From 671c8d9f27ed1bbbc8938bd7702f4e9bf9b0238c Mon Sep 17 00:00:00 2001 From: David Wisner Date: Wed, 26 Jan 2022 17:36:01 +0800 Subject: [PATCH 01/15] add modules --- dist2/f89237c6bc3f84db.png | Bin 0 -> 114217 bytes dist2/snowflake.d.ts | 6 + dist2/snowflake.js | 16428 ++++++++++++++++ dist2/snowflake.js.map | 1 + dist2/types/abis/types/commons.d.ts | 16 + .../ArgentWalletContract__factory.d.ts | 40 + .../ArgentWalletDetector__factory.d.ts | 46 + .../types/factories/Eip2612__factory.d.ts | 22 + .../factories/EnsPublicResolver__factory.d.ts | 52 + .../factories/EnsRegistrar__factory.d.ts | 52 + .../types/factories/Erc1155__factory.d.ts | 24 + .../factories/Erc20Bytes32__factory.d.ts | 19 + .../abis/types/factories/Erc20__factory.d.ts | 45 + .../abis/types/factories/Erc721__factory.d.ts | 22 + .../factories/GovernorBravo__factory.d.ts | 61 + .../abis/types/factories/Weth__factory.d.ts | 45 + dist2/types/abis/types/index.d.ts | 22 + .../types/components/AccountDetails/Copy.d.ts | 5 + .../AccountDetails/Transaction.d.ts | 4 + .../AccountDetails/TransactionSummary.d.ts | 5 + .../components/AccountDetails/index.d.ts | 10 + .../components/AddressInputPanel/index.d.ts | 9 + .../components/AnimatedDropdown/index.d.ts | 8 + dist2/types/components/Badge/RangeBadge.d.ts | 5 + dist2/types/components/Badge/index.d.ts | 17 + dist2/types/components/Blocklist/index.d.ts | 4 + dist2/types/components/Button/index.d.ts | 74 + dist2/types/components/Card/index.d.ts | 56 + dist2/types/components/Column/index.d.ts | 7 + dist2/types/components/Confetti/index.d.ts | 5 + .../CurrencyInputPanel/FiatValue.d.ts | 6 + .../components/CurrencyInputPanel/index.d.ts | 28 + .../types/components/CurrencyLogo/index.d.ts | 7 + dist2/types/components/DoubleLogo/index.d.ts | 10 + .../components/DowntimeWarning/index.d.ts | 5 + .../types/components/ErrorBoundary/index.d.ts | 11 + .../components/FeeSelector/FeeOption.d.ts | 13 + .../FeeSelector/FeeTierPercentageBadge.d.ts | 9 + dist2/types/components/FeeSelector/index.d.ts | 10 + .../types/components/FeeSelector/shared.d.ts | 8 + .../FormattedCurrencyAmount/index.d.ts | 6 + .../Header/ChainConnectivityWarning.d.ts | 2 + .../components/Header/HolidayOrnament.d.ts | 3 + .../components/Header/NetworkSelector.d.ts | 2 + dist2/types/components/Header/Polling.d.ts | 2 + dist2/types/components/Header/index.d.ts | 2 + .../components/HoverInlineText/index.d.ts | 11 + .../components/Identicon/StatusIcon.d.ts | 6 + dist2/types/components/Identicon/index.d.ts | 2 + .../InputStepCounter/InputStepCounter.d.ts | 19 + .../LiquidityChartRangeInput/Area.d.ts | 11 + .../LiquidityChartRangeInput/AxisBottom.d.ts | 7 + .../LiquidityChartRangeInput/Brush.d.ts | 14 + .../LiquidityChartRangeInput/Chart.d.ts | 5 + .../LiquidityChartRangeInput/Line.d.ts | 7 + .../LiquidityChartRangeInput/Zoom.d.ts | 14 + .../LiquidityChartRangeInput/hooks.d.ts | 14 + .../LiquidityChartRangeInput/index.d.ts | 18 + .../LiquidityChartRangeInput/svg.d.ts | 8 + .../LiquidityChartRangeInput/types.d.ts | 49 + dist2/types/components/ListLogo/index.d.ts | 7 + dist2/types/components/Loader/index.d.ts | 10 + dist2/types/components/Loader/styled.d.ts | 8 + dist2/types/components/Logo/index.d.ts | 10 + dist2/types/components/Menu/index.d.ts | 17 + dist2/types/components/Modal/index.d.ts | 11 + dist2/types/components/ModalViews/index.d.ts | 10 + .../components/NavigationTabs/index.d.ts | 17 + .../components/NetworkAlert/NetworkAlert.d.ts | 3 + .../components/NumericalInput/index.d.ts | 10 + dist2/types/components/Popover/index.d.ts | 9 + dist2/types/components/Popups/ClaimPopup.d.ts | 2 + .../Popups/FailedNetworkSwitchPopup.d.ts | 5 + dist2/types/components/Popups/PopupItem.d.ts | 7 + .../types/components/Popups/SurveyPopup.d.ts | 2 + .../components/Popups/TransactionPopup.d.ts | 4 + dist2/types/components/Popups/index.d.ts | 2 + .../types/components/PositionCard/Sushi.d.ts | 10 + dist2/types/components/PositionCard/V2.d.ts | 11 + .../types/components/PositionCard/index.d.ts | 20 + .../types/components/PositionList/index.d.ts | 9 + .../components/PositionListItem/index.d.ts | 15 + .../components/PositionPreview/index.d.ts | 12 + .../types/components/PrivacyPolicy/index.d.ts | 3 + .../types/components/ProgressSteps/index.d.ts | 17 + .../components/QuestionHelper/index.d.ts | 5 + .../RangeSelector/PresetsButtons.d.ts | 4 + .../types/components/RangeSelector/index.d.ts | 19 + dist2/types/components/RateToggle/index.d.ts | 7 + .../RoutingDiagram/RoutingDiagram.d.ts | 14 + dist2/types/components/Row/index.d.ts | 41 + .../components/SearchModal/BlockedToken.d.ts | 9 + .../components/SearchModal/CommonBases.d.ts | 7 + .../components/SearchModal/CurrencyList.d.ts | 16 + .../SearchModal/CurrencySearch.d.ts | 17 + .../SearchModal/CurrencySearchModal.d.ts | 20 + .../components/SearchModal/ImportList.d.ts | 11 + .../components/SearchModal/ImportRow.d.ts | 9 + .../components/SearchModal/ImportToken.d.ts | 12 + .../types/components/SearchModal/Manage.d.ts | 11 + .../components/SearchModal/ManageLists.d.ts | 8 + .../components/SearchModal/ManageTokens.d.ts | 7 + .../SearchModal/TokenImportCard.d.ts | 9 + .../types/components/SearchModal/styleds.d.ts | 18 + dist2/types/components/Settings/index.d.ts | 5 + dist2/types/components/Slider/index.d.ts | 11 + .../components/SwitchLocaleLink/index.d.ts | 2 + dist2/types/components/TextInput/index.d.ts | 15 + dist2/types/components/Toggle/ListToggle.d.ts | 9 + .../types/components/Toggle/MultiToggle.d.ts | 7 + dist2/types/components/Toggle/index.d.ts | 10 + .../components/TokenWarningModal/index.d.ts | 8 + dist2/types/components/Tooltip/index.d.ts | 16 + .../AnimatedConfirmation.d.ts | 2 + .../TransactionConfirmationModal/index.d.ts | 23 + .../components/TransactionSettings/index.d.ts | 7 + .../types/components/WalletModal/Option.d.ts | 13 + .../components/WalletModal/PendingView.d.ts | 8 + dist2/types/components/WalletModal/index.d.ts | 6 + .../components/Web3ReactManager/index.d.ts | 4 + dist2/types/components/Web3Status/index.d.ts | 2 + .../analytics/GoogleAnalyticsReporter.d.ts | 2 + dist2/types/components/analytics/index.d.ts | 1 + .../components/claim/AddressClaimModal.d.ts | 5 + dist2/types/components/claim/ClaimModal.d.ts | 2 + .../components/earn/ClaimRewardModal.d.ts | 9 + dist2/types/components/earn/PoolCard.d.ts | 5 + dist2/types/components/earn/StakingModal.d.ts | 11 + .../types/components/earn/UnstakingModal.d.ts | 9 + dist2/types/components/earn/styled.d.ts | 20 + .../components/swap/AdvancedSwapDetails.d.ts | 11 + .../components/swap/ConfirmSwapModal.d.ts | 17 + .../components/swap/FormattedPriceImpact.d.ts | 8 + .../components/swap/GasEstimateBadge.d.ts | 9 + dist2/types/components/swap/RouterLabel.d.ts | 3 + .../components/swap/SwapDetailsDropdown.d.ts | 13 + dist2/types/components/swap/SwapHeader.d.ts | 5 + .../components/swap/SwapModalFooter.d.ts | 9 + .../components/swap/SwapModalHeader.d.ts | 10 + dist2/types/components/swap/SwapRoute.d.ts | 10 + .../components/swap/SwapWarningDropdown.d.ts | 10 + dist2/types/components/swap/TradePrice.d.ts | 9 + .../swap/UnsupportedCurrencyFooter.d.ts | 6 + .../swap/confirmPriceImpactWithoutFee.d.ts | 7 + dist2/types/components/swap/styleds.d.ts | 454 + .../types/components/vote/DelegateModal.d.ts | 8 + .../components/vote/ProposalEmptyState.d.ts | 2 + dist2/types/components/vote/VoteModal.d.ts | 10 + dist2/types/connectors/Fortmatic.d.ts | 9 + dist2/types/connectors/NetworkConnector.d.ts | 56 + dist2/types/connectors/index.d.ts | 16 + dist2/types/constants/addresses.d.ts | 32 + dist2/types/constants/chainInfo.d.ts | 52 + dist2/types/constants/chains.d.ts | 45 + dist2/types/constants/governance.d.ts | 7 + dist2/types/constants/lists.d.ts | 5 + dist2/types/constants/locales.d.ts | 601 + dist2/types/constants/misc.d.ts | 21 + dist2/types/constants/proposals/index.d.ts | 4 + .../proposals/polygon_proposal_title.d.ts | 1 + .../uniswap_grants_proposal_description.d.ts | 1 + dist2/types/constants/routing.d.ts | 31 + dist2/types/constants/tokens.d.ts | 41 + dist2/types/constants/wallet.d.ts | 16 + dist2/types/hooks/Tokens.d.ts | 13 + dist2/types/hooks/useActiveLocale.d.ts | 11 + dist2/types/hooks/useActiveWeb3React.d.ts | 9 + dist2/types/hooks/useAddTokenToMetamask.d.ts | 5 + .../hooks/useAllCurrencyCombinations.d.ts | 2 + dist2/types/hooks/useAllV3Routes.d.ts | 11 + .../hooks/useApeModeQueryParamReader.d.ts | 1 + dist2/types/hooks/useApproveCallback.d.ts | 9 + .../types/hooks/useArgentWalletContract.d.ts | 2 + dist2/types/hooks/useAutoRouterSupported.d.ts | 1 + .../types/hooks/useAutoSlippageTolerance.d.ts | 6 + dist2/types/hooks/useBestTrade.d.ts | 12 + dist2/types/hooks/useBestV2Trade.d.ts | 11 + dist2/types/hooks/useClientSideV3Trade.d.ts | 12 + dist2/types/hooks/useColor.d.ts | 3 + dist2/types/hooks/useContract.d.ts | 30 + dist2/types/hooks/useCopyClipboard.d.ts | 1 + .../types/hooks/useCurrentBlockTimestamp.d.ts | 2 + dist2/types/hooks/useDebounce.d.ts | 5 + .../hooks/useDebouncedChangeHandler.d.ts | 7 + dist2/types/hooks/useDerivedPositionInfo.d.ts | 6 + dist2/types/hooks/useENS.d.ts | 9 + dist2/types/hooks/useENSAddress.d.ts | 7 + dist2/types/hooks/useENSAvatar.d.ts | 8 + dist2/types/hooks/useENSContentHash.d.ts | 7 + dist2/types/hooks/useENSName.d.ts | 8 + dist2/types/hooks/useERC20Permit.d.ts | 44 + dist2/types/hooks/useFeeTierDistribution.d.ts | 10 + dist2/types/hooks/useFetchListCallback.d.ts | 2 + dist2/types/hooks/useGasPrice.d.ts | 5 + dist2/types/hooks/useHttpLocations.d.ts | 1 + dist2/types/hooks/useIsArgentWallet.d.ts | 1 + dist2/types/hooks/useIsSwapUnsupported.d.ts | 7 + dist2/types/hooks/useIsTickAtLimit.d.ts | 5 + dist2/types/hooks/useIsWindowVisible.d.ts | 4 + dist2/types/hooks/useLast.d.ts | 6 + dist2/types/hooks/useLocationLinkProps.d.ts | 6 + dist2/types/hooks/useMachineTime.d.ts | 2 + .../hooks/useMonitoringEventCallback.d.ts | 4 + dist2/types/hooks/useOnClickOutside.d.ts | 2 + dist2/types/hooks/useParsedQueryString.d.ts | 3 + dist2/types/hooks/usePoolTickData.d.ts | 22 + dist2/types/hooks/usePools.d.ts | 10 + dist2/types/hooks/usePositionTokenURI.d.ts | 20 + dist2/types/hooks/usePrevious.d.ts | 1 + dist2/types/hooks/useSocksBalance.d.ts | 1 + dist2/types/hooks/useSwapCallback.d.ts | 21 + dist2/types/hooks/useTheme.d.ts | 1 + dist2/types/hooks/useToggle.d.ts | 1 + dist2/types/hooks/useTokenAllowance.d.ts | 2 + .../hooks/useTokenInfoFromActiveList.d.ts | 5 + dist2/types/hooks/useTotalSupply.d.ts | 2 + dist2/types/hooks/useTransactionDeadline.d.ts | 2 + dist2/types/hooks/useUSDCPrice.d.ts | 16 + dist2/types/hooks/useV2Pairs.d.ts | 10 + dist2/types/hooks/useV3PositionFees.d.ts | 4 + dist2/types/hooks/useV3Positions.d.ts | 13 + dist2/types/hooks/useV3SwapPools.d.ts | 11 + dist2/types/hooks/useWindowSize.d.ts | 4 + dist2/types/hooks/useWrapCallback.d.ts | 29 + dist2/types/hooks/web3.d.ts | 6 + dist2/types/i18n.d.ts | 4 + dist2/types/index.d.ts | 5 + dist2/types/lib/assets/svg/Check.d.ts | 3 + dist2/types/lib/assets/svg/Expando.d.ts | 3 + dist2/types/lib/assets/svg/Logo.d.ts | 3 + dist2/types/lib/assets/svg/Spinner.d.ts | 3 + dist2/types/lib/components/ActionButton.d.ts | 29 + dist2/types/lib/components/Button.d.ts | 15 + dist2/types/lib/components/Column.d.ts | 13 + dist2/types/lib/components/Dialog.d.ts | 29 + .../lib/components/Error/ErrorBoundary.d.ts | 17 + .../lib/components/Error/ErrorDialog.d.ts | 18 + .../lib/components/Error/ErrorGenerator.d.ts | 2 + dist2/types/lib/components/Header.d.ts | 7 + dist2/types/lib/components/Input.d.ts | 15 + dist2/types/lib/components/Popover.d.ts | 11 + .../components/RecentTransactionsDialog.d.ts | 7 + dist2/types/lib/components/Row.d.ts | 14 + dist2/types/lib/components/Rule.d.ts | 5 + dist2/types/lib/components/Swap/Input.d.ts | 6 + dist2/types/lib/components/Swap/Output.d.ts | 23 + .../lib/components/Swap/ReverseButton.d.ts | 4 + .../lib/components/Swap/Settings.fixture.d.ts | 3 + .../Swap/Settings/MaxSlippageSelect.d.ts | 2 + .../components/Swap/Settings/MockToggle.d.ts | 2 + .../Swap/Settings/TransactionTtlInput.d.ts | 2 + .../components/Swap/Settings/components.d.ts | 10 + .../lib/components/Swap/Settings/index.d.ts | 5 + .../lib/components/Swap/Status.fixture.d.ts | 3 + .../components/Swap/Status/StatusDialog.d.ts | 8 + .../lib/components/Swap/Status/index.d.ts | 1 + .../lib/components/Swap/Summary.fixture.d.ts | 3 + .../lib/components/Swap/Summary/Details.d.ts | 9 + .../lib/components/Swap/Summary/Summary.d.ts | 9 + .../lib/components/Swap/Summary/index.d.ts | 11 + .../lib/components/Swap/Swap.fixture.d.ts | 3 + .../types/lib/components/Swap/SwapButton.d.ts | 6 + .../types/lib/components/Swap/TokenInput.d.ts | 13 + dist2/types/lib/components/Swap/Toolbar.d.ts | 4 + dist2/types/lib/components/Swap/index.d.ts | 20 + dist2/types/lib/components/Toggle.d.ts | 7 + dist2/types/lib/components/TokenImg.d.ts | 11 + .../lib/components/TokenSelect.fixture.d.ts | 2 + .../lib/components/TokenSelect/TokenBase.d.ts | 8 + .../components/TokenSelect/TokenButton.d.ts | 10 + .../components/TokenSelect/TokenOptions.d.ts | 12 + .../lib/components/TokenSelect/index.d.ts | 15 + dist2/types/lib/components/Tooltip.d.ts | 11 + dist2/types/lib/components/Wallet.d.ts | 4 + dist2/types/lib/components/Web3Provider.d.ts | 9 + dist2/types/lib/components/Widget.d.ts | 16 + dist2/types/lib/cosmos.decorator.d.ts | 4 + dist2/types/lib/cosmos/components/Widget.d.ts | 6 + dist2/types/lib/errors.d.ts | 3 + dist2/types/lib/hooks/multicall.d.ts | 9 + dist2/types/lib/hooks/swap/index.d.ts | 6 + .../types/lib/hooks/swap/useSwapApproval.d.ts | 13 + dist2/types/lib/hooks/swap/useSwapInfo.d.ts | 23 + dist2/types/lib/hooks/transactions/index.d.ts | 10 + .../types/lib/hooks/transactions/updater.d.ts | 24 + dist2/types/lib/hooks/useActiveWeb3React.d.ts | 12 + dist2/types/lib/hooks/useApproval.d.ts | 17 + dist2/types/lib/hooks/useBlockNumber.d.ts | 4 + dist2/types/lib/hooks/useCurrency.d.ts | 26 + dist2/types/lib/hooks/useCurrencyBalance.d.ts | 19 + dist2/types/lib/hooks/useCurrencyColor.d.ts | 3 + .../types/lib/hooks/useCurrencyLogoURIs.d.ts | 2 + dist2/types/lib/hooks/useInterval.d.ts | 7 + dist2/types/lib/hooks/useNativeCurrency.d.ts | 2 + dist2/types/lib/hooks/useNativeEvent.d.ts | 1 + dist2/types/lib/hooks/useScrollbar.d.ts | 5 + .../hooks/useTokenList/fetchTokenList.d.ts | 4 + .../lib/hooks/useTokenList/filtering.d.ts | 4 + dist2/types/lib/hooks/useTokenList/index.d.ts | 10 + .../lib/hooks/useTokenList/querying.d.ts | 2 + .../types/lib/hooks/useTokenList/sorting.d.ts | 7 + dist2/types/lib/hooks/useTokenList/utils.d.ts | 13 + .../hooks/useTokenList/validateTokenList.d.ts | 11 + dist2/types/lib/hooks/useUnmount.d.ts | 7 + dist2/types/lib/i18n.d.ts | 11 + dist2/types/lib/icons/index.d.ts | 80 + dist2/types/lib/index.d.ts | 5 + dist2/types/lib/state/atoms.d.ts | 11 + dist2/types/lib/state/multicall.d.ts | 47 + dist2/types/lib/state/settings.d.ts | 14 + dist2/types/lib/state/swap.d.ts | 16 + dist2/types/lib/state/transactions.d.ts | 54 + dist2/types/lib/state/web3.d.ts | 5 + dist2/types/lib/theme/dynamic.d.ts | 9 + dist2/types/lib/theme/index.d.ts | 40 + dist2/types/lib/theme/layer.d.ts | 5 + dist2/types/lib/theme/styled.d.ts | 8 + dist2/types/lib/theme/theme.d.ts | 31 + dist2/types/lib/theme/type.d.ts | 23 + dist2/types/lib/utils/contenthashToUri.d.ts | 6 + dist2/types/lib/utils/parseENSAddress.d.ts | 4 + .../lib/utils/resolveENSContentHash.d.ts | 7 + .../lib/utils/tryParseCurrencyAmount.d.ts | 6 + dist2/types/lib/utils/uriToHttp.d.ts | 5 + dist2/types/locales/af-ZA.d.ts | 593 + dist2/types/locales/ar-SA.d.ts | 593 + dist2/types/locales/ca-ES.d.ts | 593 + dist2/types/locales/cs-CZ.d.ts | 593 + dist2/types/locales/da-DK.d.ts | 593 + dist2/types/locales/de-DE.d.ts | 593 + dist2/types/locales/el-GR.d.ts | 593 + dist2/types/locales/en-US.d.ts | 593 + dist2/types/locales/es-ES.d.ts | 593 + dist2/types/locales/fi-FI.d.ts | 593 + dist2/types/locales/fr-FR.d.ts | 593 + dist2/types/locales/he-IL.d.ts | 593 + dist2/types/locales/hu-HU.d.ts | 593 + dist2/types/locales/id-ID.d.ts | 593 + dist2/types/locales/it-IT.d.ts | 593 + dist2/types/locales/ja-JP.d.ts | 593 + dist2/types/locales/ko-KR.d.ts | 593 + dist2/types/locales/nl-NL.d.ts | 593 + dist2/types/locales/no-NO.d.ts | 593 + dist2/types/locales/pl-PL.d.ts | 593 + dist2/types/locales/pseudo.d.ts | 1 + dist2/types/locales/pt-BR.d.ts | 593 + dist2/types/locales/pt-PT.d.ts | 593 + dist2/types/locales/ro-RO.d.ts | 593 + dist2/types/locales/ru-RU.d.ts | 593 + dist2/types/locales/sr-SP.d.ts | 593 + dist2/types/locales/sv-SE.d.ts | 593 + dist2/types/locales/sw-TZ.d.ts | 593 + dist2/types/locales/tr-TR.d.ts | 593 + dist2/types/locales/uk-UA.d.ts | 593 + dist2/types/locales/vi-VN.d.ts | 593 + dist2/types/locales/zh-CN.d.ts | 593 + dist2/types/locales/zh-TW.d.ts | 593 + dist2/types/pages/AddLiquidity/Review.d.ts | 17 + dist2/types/pages/AddLiquidity/index.d.ts | 8 + dist2/types/pages/AddLiquidity/redirects.d.ts | 7 + dist2/types/pages/AddLiquidity/styled.d.ts | 38 + .../AddLiquidityV2/ConfirmAddModalBottom.d.ts | 15 + .../pages/AddLiquidityV2/PoolPriceBar.d.ts | 11 + dist2/types/pages/AddLiquidityV2/index.d.ts | 6 + .../types/pages/AddLiquidityV2/redirects.d.ts | 6 + dist2/types/pages/App.d.ts | 2 + dist2/types/pages/AppBody.d.ts | 11 + .../CreateProposal/ProposalActionDetail.d.ts | 13 + .../ProposalActionSelector.d.ts | 17 + .../pages/CreateProposal/ProposalEditor.d.ts | 8 + .../ProposalSubmissionModal.d.ts | 6 + dist2/types/pages/CreateProposal/index.d.ts | 2 + dist2/types/pages/Earn/Countdown.d.ts | 4 + dist2/types/pages/Earn/Manage.d.ts | 6 + dist2/types/pages/Earn/index.d.ts | 2 + .../types/pages/MigrateV2/MigrateV2Pair.d.ts | 5 + dist2/types/pages/MigrateV2/index.d.ts | 2 + dist2/types/pages/Pool/CTACards.d.ts | 2 + dist2/types/pages/Pool/PositionPage.d.ts | 5 + dist2/types/pages/Pool/index.d.ts | 2 + dist2/types/pages/Pool/styleds.d.ts | 8 + dist2/types/pages/Pool/v2.d.ts | 2 + dist2/types/pages/PoolFinder/index.d.ts | 2 + dist2/types/pages/RemoveLiquidity/V3.d.ts | 5 + dist2/types/pages/RemoveLiquidity/index.d.ts | 6 + dist2/types/pages/RemoveLiquidity/styled.d.ts | 6 + dist2/types/pages/Swap/index.d.ts | 3 + dist2/types/pages/Swap/redirects.d.ts | 7 + dist2/types/pages/Vote/Landing.d.ts | 2 + dist2/types/pages/Vote/VotePage.d.ts | 6 + dist2/types/pages/Vote/index.d.ts | 2 + dist2/types/pages/Vote/styled.d.ts | 5 + dist2/types/pages/styled.d.ts | 1 + dist2/types/polyfills.d.ts | 1 + dist2/types/service-worker.d.ts | 2 + dist2/types/serviceWorkerRegistration.d.ts | 7 + dist2/types/setupTests.d.ts | 1 + dist2/types/snowflake.d.ts | 1 + dist2/types/state/application/hooks.d.ts | 15 + dist2/types/state/application/reducer.d.ts | 35 + dist2/types/state/application/updater.d.ts | 1 + dist2/types/state/burn/actions.d.ts | 10 + dist2/types/state/burn/hooks.d.ts | 19 + dist2/types/state/burn/reducer.d.ts | 7 + dist2/types/state/burn/v3/actions.d.ts | 3 + dist2/types/state/burn/v3/hooks.d.ts | 19 + dist2/types/state/burn/v3/reducer.d.ts | 5 + dist2/types/state/claim/hooks.d.ts | 18 + dist2/types/state/data/enhanced.d.ts | 42 + dist2/types/state/data/slice.d.ts | 16 + dist2/types/state/global/actions.d.ts | 1 + dist2/types/state/governance/hooks.d.ts | 57 + dist2/types/state/governance/types.d.ts | 5 + dist2/types/state/lists/actions.d.ts | 23 + dist2/types/state/lists/hooks.d.ts | 15 + dist2/types/state/lists/reducer.d.ts | 15 + dist2/types/state/lists/updater.d.ts | 1 + dist2/types/state/lists/wrappedTokenInfo.d.ts | 29 + dist2/types/state/logs/hooks.d.ts | 18 + dist2/types/state/logs/slice.d.ts | 42 + dist2/types/state/logs/updater.d.ts | 1 + dist2/types/state/logs/utils.d.ts | 21 + dist2/types/state/mint/actions.d.ts | 10 + dist2/types/state/mint/hooks.d.ts | 30 + dist2/types/state/mint/reducer.d.ts | 12 + dist2/types/state/mint/v3/actions.d.ts | 24 + dist2/types/state/mint/v3/hooks.d.ts | 54 + dist2/types/state/mint/v3/reducer.d.ts | 11 + dist2/types/state/mint/v3/utils.d.ts | 4 + .../clientSideSmartOrderRouter/constants.d.ts | 2 + .../dependencies.d.ts | 7 + .../clientSideSmartOrderRouter/index.d.ts | 23 + dist2/types/state/routing/slice.d.ts | 31 + dist2/types/state/routing/types.d.ts | 76 + .../state/routing/useRoutingAPITrade.d.ts | 12 + dist2/types/state/routing/utils.d.ts | 15 + dist2/types/state/stake/hooks.d.ts | 29 + dist2/types/state/swap/actions.d.ts | 23 + dist2/types/state/swap/hooks.d.ts | 34 + dist2/types/state/swap/reducer.d.ts | 14 + dist2/types/state/transactions/actions.d.ts | 154 + dist2/types/state/transactions/hooks.d.ts | 21 + dist2/types/state/transactions/reducer.d.ts | 18 + dist2/types/state/transactions/updater.d.ts | 2 + dist2/types/state/user/actions.d.ts | 54 + dist2/types/state/user/hooks.d.ts | 38 + dist2/types/state/user/reducer.d.ts | 30 + dist2/types/state/user/updater.d.ts | 1 + dist2/types/state/wallet/hooks.d.ts | 6 + .../types/theme/DarkModeQueryParamReader.d.ts | 2 + .../theme/RadialGradientByChainUpdater.d.ts | 1 + dist2/types/theme/components.d.ts | 37 + dist2/types/theme/index.d.ts | 50 + dist2/types/types/tuple.d.ts | 4 + dist2/types/types/v3/commons.d.ts | 16 + .../factories/IApproveAndCall__factory.d.ts | 41 + .../types/v3/factories/IERC1271__factory.d.ts | 22 + .../v3/factories/IERC20Metadata__factory.d.ts | 35 + .../v3/factories/IERC20Minimal__factory.d.ts | 35 + .../IERC20PermitAllowed__factory.d.ts | 18 + .../v3/factories/IERC721Permit__factory.d.ts | 35 + .../factories/IImmutableState__factory.d.ts | 18 + .../IMulticallExtended__factory.d.ts | 22 + .../v3/factories/IMulticall__factory.d.ts | 22 + .../INonfungiblePositionManager__factory.d.ts | 55 + ...gibleTokenPositionDescriptor__factory.d.ts | 22 + .../factories/IOracleSlippage__factory.d.ts | 18 + .../IPeripheryImmutableState__factory.d.ts | 18 + .../IPeripheryPaymentsExtended__factory.d.ts | 18 + ...pheryPaymentsWithFeeExtended__factory.d.ts | 18 + .../IPeripheryPaymentsWithFee__factory.d.ts | 18 + .../IPeripheryPayments__factory.d.ts | 18 + .../factories/IPoolInitializer__factory.d.ts | 22 + .../v3/factories/IQuoterV2__factory.d.ts | 41 + .../types/v3/factories/IQuoter__factory.d.ts | 22 + .../v3/factories/ISelfPermit__factory.d.ts | 18 + .../v3/factories/ISwapRouter02__factory.d.ts | 41 + .../v3/factories/ISwapRouter__factory.d.ts | 37 + .../v3/factories/ITickLens__factory.d.ts | 27 + .../factories/IUniswapV3Factory__factory.d.ts | 35 + .../IUniswapV3FlashCallback__factory.d.ts | 18 + .../IUniswapV3MintCallback__factory.d.ts | 18 + .../IUniswapV3PoolActions__factory.d.ts | 22 + .../IUniswapV3PoolDeployer__factory.d.ts | 18 + .../IUniswapV3PoolDerivedState__factory.d.ts | 22 + .../IUniswapV3PoolEvents__factory.d.ts | 18 + .../IUniswapV3PoolImmutables__factory.d.ts | 18 + .../IUniswapV3PoolOwnerActions__factory.d.ts | 22 + .../IUniswapV3PoolState__factory.d.ts | 22 + .../v3/factories/IUniswapV3Pool__factory.d.ts | 35 + .../factories/IUniswapV3Staker__factory.d.ts | 45 + .../IUniswapV3SwapCallback__factory.d.ts | 18 + .../v3/factories/IV2SwapRouter__factory.d.ts | 22 + .../v3/factories/IV3Migrator__factory.d.ts | 37 + .../v3/factories/IV3SwapRouter__factory.d.ts | 37 + .../types/v3/factories/IWETH9__factory.d.ts | 35 + .../v3/factories/NFTDescriptor__factory.d.ts | 37 + .../NonfungiblePositionManager__factory.d.ts | 83 + ...gibleTokenPositionDescriptor__factory.d.ts | 46 + .../v3/factories/PairFlash__factory.d.ts | 69 + .../types/v3/factories/QuoterV2__factory.d.ts | 61 + .../types/v3/factories/Quoter__factory.d.ts | 42 + .../v3/factories/SwapRouter02__factory.d.ts | 67 + .../v3/factories/SwapRouter__factory.d.ts | 67 + .../types/v3/factories/TickLens__factory.d.ts | 37 + .../UniswapInterfaceMulticall__factory.d.ts | 61 + .../factories/UniswapV3Factory__factory.d.ts | 52 + .../v3/factories/UniswapV3Pool__factory.d.ts | 52 + .../factories/UniswapV3Staker__factory.d.ts | 66 + .../v3/factories/V2SwapRouter__factory.d.ts | 28 + .../v3/factories/V3Migrator__factory.d.ts | 63 + .../v3/factories/V3SwapRouter__factory.d.ts | 43 + dist2/types/types/v3/index.d.ts | 114 + dist2/types/utils/anonymizeLink.d.ts | 6 + dist2/types/utils/approveAmountCalldata.d.ts | 6 + dist2/types/utils/calculateGasMargin.d.ts | 6 + .../types/utils/calculateSlippageAmount.d.ts | 3 + dist2/types/utils/chains.d.ts | 3 + .../utils/computeFiatValuePriceImpact.d.ts | 2 + .../types/utils/computeSurroundingTicks.d.ts | 3 + dist2/types/utils/computeUniCirculation.d.ts | 3 + .../types/utils/constructSameAddressMap.d.ts | 4 + dist2/types/utils/currencyId.d.ts | 2 + dist2/types/utils/formatCurrencyAmount.d.ts | 3 + dist2/types/utils/formatTickPrice.d.ts | 5 + dist2/types/utils/getExplorerLink.d.ts | 13 + dist2/types/utils/getLibrary.d.ts | 2 + dist2/types/utils/getTickToPrice.d.ts | 2 + .../types/utils/getTxOptimizedSwapRouter.d.ts | 23 + dist2/types/utils/index.d.ts | 11 + dist2/types/utils/isTradeBetter.d.ts | 3 + dist2/types/utils/isZero.d.ts | 5 + dist2/types/utils/listSort.d.ts | 1 + dist2/types/utils/listVersionLabel.d.ts | 2 + dist2/types/utils/maxAmountSpend.d.ts | 6 + dist2/types/utils/prices.d.ts | 7 + dist2/types/utils/retry.d.ts | 22 + dist2/types/utils/routes.d.ts | 1 + dist2/types/utils/safeNamehash.d.ts | 1 + dist2/types/utils/supportedChainId.d.ts | 5 + dist2/types/utils/switchToNetwork.d.ts | 8 + .../types/utils/tradeMeaningFullyDiffer.d.ts | 7 + .../transformSwapRouteToGetQuoteResult.d.ts | 4 + dist2/types/utils/unwrappedToken.d.ts | 2 + dist2/types/utils/userAgent.d.ts | 2 + old-rollup.config.ts | 63 + package.json | 24 +- rollup.config.ts | 105 +- src/snowflake.ts | 1 + tsconfig.base.json | 2 +- tsconfig.json | 7 +- tsconfig.lib.json | 6 +- yarn.lock | 527 +- 553 files changed, 44663 insertions(+), 40 deletions(-) create mode 100644 dist2/f89237c6bc3f84db.png create mode 100644 dist2/snowflake.d.ts create mode 100644 dist2/snowflake.js create mode 100644 dist2/snowflake.js.map create mode 100644 dist2/types/abis/types/commons.d.ts create mode 100644 dist2/types/abis/types/factories/ArgentWalletContract__factory.d.ts create mode 100644 dist2/types/abis/types/factories/ArgentWalletDetector__factory.d.ts create mode 100644 dist2/types/abis/types/factories/Eip2612__factory.d.ts create mode 100644 dist2/types/abis/types/factories/EnsPublicResolver__factory.d.ts create mode 100644 dist2/types/abis/types/factories/EnsRegistrar__factory.d.ts create mode 100644 dist2/types/abis/types/factories/Erc1155__factory.d.ts create mode 100644 dist2/types/abis/types/factories/Erc20Bytes32__factory.d.ts create mode 100644 dist2/types/abis/types/factories/Erc20__factory.d.ts create mode 100644 dist2/types/abis/types/factories/Erc721__factory.d.ts create mode 100644 dist2/types/abis/types/factories/GovernorBravo__factory.d.ts create mode 100644 dist2/types/abis/types/factories/Weth__factory.d.ts create mode 100644 dist2/types/abis/types/index.d.ts create mode 100644 dist2/types/components/AccountDetails/Copy.d.ts create mode 100644 dist2/types/components/AccountDetails/Transaction.d.ts create mode 100644 dist2/types/components/AccountDetails/TransactionSummary.d.ts create mode 100644 dist2/types/components/AccountDetails/index.d.ts create mode 100644 dist2/types/components/AddressInputPanel/index.d.ts create mode 100644 dist2/types/components/AnimatedDropdown/index.d.ts create mode 100644 dist2/types/components/Badge/RangeBadge.d.ts create mode 100644 dist2/types/components/Badge/index.d.ts create mode 100644 dist2/types/components/Blocklist/index.d.ts create mode 100644 dist2/types/components/Button/index.d.ts create mode 100644 dist2/types/components/Card/index.d.ts create mode 100644 dist2/types/components/Column/index.d.ts create mode 100644 dist2/types/components/Confetti/index.d.ts create mode 100644 dist2/types/components/CurrencyInputPanel/FiatValue.d.ts create mode 100644 dist2/types/components/CurrencyInputPanel/index.d.ts create mode 100644 dist2/types/components/CurrencyLogo/index.d.ts create mode 100644 dist2/types/components/DoubleLogo/index.d.ts create mode 100644 dist2/types/components/DowntimeWarning/index.d.ts create mode 100644 dist2/types/components/ErrorBoundary/index.d.ts create mode 100644 dist2/types/components/FeeSelector/FeeOption.d.ts create mode 100644 dist2/types/components/FeeSelector/FeeTierPercentageBadge.d.ts create mode 100644 dist2/types/components/FeeSelector/index.d.ts create mode 100644 dist2/types/components/FeeSelector/shared.d.ts create mode 100644 dist2/types/components/FormattedCurrencyAmount/index.d.ts create mode 100644 dist2/types/components/Header/ChainConnectivityWarning.d.ts create mode 100644 dist2/types/components/Header/HolidayOrnament.d.ts create mode 100644 dist2/types/components/Header/NetworkSelector.d.ts create mode 100644 dist2/types/components/Header/Polling.d.ts create mode 100644 dist2/types/components/Header/index.d.ts create mode 100644 dist2/types/components/HoverInlineText/index.d.ts create mode 100644 dist2/types/components/Identicon/StatusIcon.d.ts create mode 100644 dist2/types/components/Identicon/index.d.ts create mode 100644 dist2/types/components/InputStepCounter/InputStepCounter.d.ts create mode 100644 dist2/types/components/LiquidityChartRangeInput/Area.d.ts create mode 100644 dist2/types/components/LiquidityChartRangeInput/AxisBottom.d.ts create mode 100644 dist2/types/components/LiquidityChartRangeInput/Brush.d.ts create mode 100644 dist2/types/components/LiquidityChartRangeInput/Chart.d.ts create mode 100644 dist2/types/components/LiquidityChartRangeInput/Line.d.ts create mode 100644 dist2/types/components/LiquidityChartRangeInput/Zoom.d.ts create mode 100644 dist2/types/components/LiquidityChartRangeInput/hooks.d.ts create mode 100644 dist2/types/components/LiquidityChartRangeInput/index.d.ts create mode 100644 dist2/types/components/LiquidityChartRangeInput/svg.d.ts create mode 100644 dist2/types/components/LiquidityChartRangeInput/types.d.ts create mode 100644 dist2/types/components/ListLogo/index.d.ts create mode 100644 dist2/types/components/Loader/index.d.ts create mode 100644 dist2/types/components/Loader/styled.d.ts create mode 100644 dist2/types/components/Logo/index.d.ts create mode 100644 dist2/types/components/Menu/index.d.ts create mode 100644 dist2/types/components/Modal/index.d.ts create mode 100644 dist2/types/components/ModalViews/index.d.ts create mode 100644 dist2/types/components/NavigationTabs/index.d.ts create mode 100644 dist2/types/components/NetworkAlert/NetworkAlert.d.ts create mode 100644 dist2/types/components/NumericalInput/index.d.ts create mode 100644 dist2/types/components/Popover/index.d.ts create mode 100644 dist2/types/components/Popups/ClaimPopup.d.ts create mode 100644 dist2/types/components/Popups/FailedNetworkSwitchPopup.d.ts create mode 100644 dist2/types/components/Popups/PopupItem.d.ts create mode 100644 dist2/types/components/Popups/SurveyPopup.d.ts create mode 100644 dist2/types/components/Popups/TransactionPopup.d.ts create mode 100644 dist2/types/components/Popups/index.d.ts create mode 100644 dist2/types/components/PositionCard/Sushi.d.ts create mode 100644 dist2/types/components/PositionCard/V2.d.ts create mode 100644 dist2/types/components/PositionCard/index.d.ts create mode 100644 dist2/types/components/PositionList/index.d.ts create mode 100644 dist2/types/components/PositionListItem/index.d.ts create mode 100644 dist2/types/components/PositionPreview/index.d.ts create mode 100644 dist2/types/components/PrivacyPolicy/index.d.ts create mode 100644 dist2/types/components/ProgressSteps/index.d.ts create mode 100644 dist2/types/components/QuestionHelper/index.d.ts create mode 100644 dist2/types/components/RangeSelector/PresetsButtons.d.ts create mode 100644 dist2/types/components/RangeSelector/index.d.ts create mode 100644 dist2/types/components/RateToggle/index.d.ts create mode 100644 dist2/types/components/RoutingDiagram/RoutingDiagram.d.ts create mode 100644 dist2/types/components/Row/index.d.ts create mode 100644 dist2/types/components/SearchModal/BlockedToken.d.ts create mode 100644 dist2/types/components/SearchModal/CommonBases.d.ts create mode 100644 dist2/types/components/SearchModal/CurrencyList.d.ts create mode 100644 dist2/types/components/SearchModal/CurrencySearch.d.ts create mode 100644 dist2/types/components/SearchModal/CurrencySearchModal.d.ts create mode 100644 dist2/types/components/SearchModal/ImportList.d.ts create mode 100644 dist2/types/components/SearchModal/ImportRow.d.ts create mode 100644 dist2/types/components/SearchModal/ImportToken.d.ts create mode 100644 dist2/types/components/SearchModal/Manage.d.ts create mode 100644 dist2/types/components/SearchModal/ManageLists.d.ts create mode 100644 dist2/types/components/SearchModal/ManageTokens.d.ts create mode 100644 dist2/types/components/SearchModal/TokenImportCard.d.ts create mode 100644 dist2/types/components/SearchModal/styleds.d.ts create mode 100644 dist2/types/components/Settings/index.d.ts create mode 100644 dist2/types/components/Slider/index.d.ts create mode 100644 dist2/types/components/SwitchLocaleLink/index.d.ts create mode 100644 dist2/types/components/TextInput/index.d.ts create mode 100644 dist2/types/components/Toggle/ListToggle.d.ts create mode 100644 dist2/types/components/Toggle/MultiToggle.d.ts create mode 100644 dist2/types/components/Toggle/index.d.ts create mode 100644 dist2/types/components/TokenWarningModal/index.d.ts create mode 100644 dist2/types/components/Tooltip/index.d.ts create mode 100644 dist2/types/components/TransactionConfirmationModal/AnimatedConfirmation.d.ts create mode 100644 dist2/types/components/TransactionConfirmationModal/index.d.ts create mode 100644 dist2/types/components/TransactionSettings/index.d.ts create mode 100644 dist2/types/components/WalletModal/Option.d.ts create mode 100644 dist2/types/components/WalletModal/PendingView.d.ts create mode 100644 dist2/types/components/WalletModal/index.d.ts create mode 100644 dist2/types/components/Web3ReactManager/index.d.ts create mode 100644 dist2/types/components/Web3Status/index.d.ts create mode 100644 dist2/types/components/analytics/GoogleAnalyticsReporter.d.ts create mode 100644 dist2/types/components/analytics/index.d.ts create mode 100644 dist2/types/components/claim/AddressClaimModal.d.ts create mode 100644 dist2/types/components/claim/ClaimModal.d.ts create mode 100644 dist2/types/components/earn/ClaimRewardModal.d.ts create mode 100644 dist2/types/components/earn/PoolCard.d.ts create mode 100644 dist2/types/components/earn/StakingModal.d.ts create mode 100644 dist2/types/components/earn/UnstakingModal.d.ts create mode 100644 dist2/types/components/earn/styled.d.ts create mode 100644 dist2/types/components/swap/AdvancedSwapDetails.d.ts create mode 100644 dist2/types/components/swap/ConfirmSwapModal.d.ts create mode 100644 dist2/types/components/swap/FormattedPriceImpact.d.ts create mode 100644 dist2/types/components/swap/GasEstimateBadge.d.ts create mode 100644 dist2/types/components/swap/RouterLabel.d.ts create mode 100644 dist2/types/components/swap/SwapDetailsDropdown.d.ts create mode 100644 dist2/types/components/swap/SwapHeader.d.ts create mode 100644 dist2/types/components/swap/SwapModalFooter.d.ts create mode 100644 dist2/types/components/swap/SwapModalHeader.d.ts create mode 100644 dist2/types/components/swap/SwapRoute.d.ts create mode 100644 dist2/types/components/swap/SwapWarningDropdown.d.ts create mode 100644 dist2/types/components/swap/TradePrice.d.ts create mode 100644 dist2/types/components/swap/UnsupportedCurrencyFooter.d.ts create mode 100644 dist2/types/components/swap/confirmPriceImpactWithoutFee.d.ts create mode 100644 dist2/types/components/swap/styleds.d.ts create mode 100644 dist2/types/components/vote/DelegateModal.d.ts create mode 100644 dist2/types/components/vote/ProposalEmptyState.d.ts create mode 100644 dist2/types/components/vote/VoteModal.d.ts create mode 100644 dist2/types/connectors/Fortmatic.d.ts create mode 100644 dist2/types/connectors/NetworkConnector.d.ts create mode 100644 dist2/types/connectors/index.d.ts create mode 100644 dist2/types/constants/addresses.d.ts create mode 100644 dist2/types/constants/chainInfo.d.ts create mode 100644 dist2/types/constants/chains.d.ts create mode 100644 dist2/types/constants/governance.d.ts create mode 100644 dist2/types/constants/lists.d.ts create mode 100644 dist2/types/constants/locales.d.ts create mode 100644 dist2/types/constants/misc.d.ts create mode 100644 dist2/types/constants/proposals/index.d.ts create mode 100644 dist2/types/constants/proposals/polygon_proposal_title.d.ts create mode 100644 dist2/types/constants/proposals/uniswap_grants_proposal_description.d.ts create mode 100644 dist2/types/constants/routing.d.ts create mode 100644 dist2/types/constants/tokens.d.ts create mode 100644 dist2/types/constants/wallet.d.ts create mode 100644 dist2/types/hooks/Tokens.d.ts create mode 100644 dist2/types/hooks/useActiveLocale.d.ts create mode 100644 dist2/types/hooks/useActiveWeb3React.d.ts create mode 100644 dist2/types/hooks/useAddTokenToMetamask.d.ts create mode 100644 dist2/types/hooks/useAllCurrencyCombinations.d.ts create mode 100644 dist2/types/hooks/useAllV3Routes.d.ts create mode 100644 dist2/types/hooks/useApeModeQueryParamReader.d.ts create mode 100644 dist2/types/hooks/useApproveCallback.d.ts create mode 100644 dist2/types/hooks/useArgentWalletContract.d.ts create mode 100644 dist2/types/hooks/useAutoRouterSupported.d.ts create mode 100644 dist2/types/hooks/useAutoSlippageTolerance.d.ts create mode 100644 dist2/types/hooks/useBestTrade.d.ts create mode 100644 dist2/types/hooks/useBestV2Trade.d.ts create mode 100644 dist2/types/hooks/useClientSideV3Trade.d.ts create mode 100644 dist2/types/hooks/useColor.d.ts create mode 100644 dist2/types/hooks/useContract.d.ts create mode 100644 dist2/types/hooks/useCopyClipboard.d.ts create mode 100644 dist2/types/hooks/useCurrentBlockTimestamp.d.ts create mode 100644 dist2/types/hooks/useDebounce.d.ts create mode 100644 dist2/types/hooks/useDebouncedChangeHandler.d.ts create mode 100644 dist2/types/hooks/useDerivedPositionInfo.d.ts create mode 100644 dist2/types/hooks/useENS.d.ts create mode 100644 dist2/types/hooks/useENSAddress.d.ts create mode 100644 dist2/types/hooks/useENSAvatar.d.ts create mode 100644 dist2/types/hooks/useENSContentHash.d.ts create mode 100644 dist2/types/hooks/useENSName.d.ts create mode 100644 dist2/types/hooks/useERC20Permit.d.ts create mode 100644 dist2/types/hooks/useFeeTierDistribution.d.ts create mode 100644 dist2/types/hooks/useFetchListCallback.d.ts create mode 100644 dist2/types/hooks/useGasPrice.d.ts create mode 100644 dist2/types/hooks/useHttpLocations.d.ts create mode 100644 dist2/types/hooks/useIsArgentWallet.d.ts create mode 100644 dist2/types/hooks/useIsSwapUnsupported.d.ts create mode 100644 dist2/types/hooks/useIsTickAtLimit.d.ts create mode 100644 dist2/types/hooks/useIsWindowVisible.d.ts create mode 100644 dist2/types/hooks/useLast.d.ts create mode 100644 dist2/types/hooks/useLocationLinkProps.d.ts create mode 100644 dist2/types/hooks/useMachineTime.d.ts create mode 100644 dist2/types/hooks/useMonitoringEventCallback.d.ts create mode 100644 dist2/types/hooks/useOnClickOutside.d.ts create mode 100644 dist2/types/hooks/useParsedQueryString.d.ts create mode 100644 dist2/types/hooks/usePoolTickData.d.ts create mode 100644 dist2/types/hooks/usePools.d.ts create mode 100644 dist2/types/hooks/usePositionTokenURI.d.ts create mode 100644 dist2/types/hooks/usePrevious.d.ts create mode 100644 dist2/types/hooks/useSocksBalance.d.ts create mode 100644 dist2/types/hooks/useSwapCallback.d.ts create mode 100644 dist2/types/hooks/useTheme.d.ts create mode 100644 dist2/types/hooks/useToggle.d.ts create mode 100644 dist2/types/hooks/useTokenAllowance.d.ts create mode 100644 dist2/types/hooks/useTokenInfoFromActiveList.d.ts create mode 100644 dist2/types/hooks/useTotalSupply.d.ts create mode 100644 dist2/types/hooks/useTransactionDeadline.d.ts create mode 100644 dist2/types/hooks/useUSDCPrice.d.ts create mode 100644 dist2/types/hooks/useV2Pairs.d.ts create mode 100644 dist2/types/hooks/useV3PositionFees.d.ts create mode 100644 dist2/types/hooks/useV3Positions.d.ts create mode 100644 dist2/types/hooks/useV3SwapPools.d.ts create mode 100644 dist2/types/hooks/useWindowSize.d.ts create mode 100644 dist2/types/hooks/useWrapCallback.d.ts create mode 100644 dist2/types/hooks/web3.d.ts create mode 100644 dist2/types/i18n.d.ts create mode 100644 dist2/types/index.d.ts create mode 100644 dist2/types/lib/assets/svg/Check.d.ts create mode 100644 dist2/types/lib/assets/svg/Expando.d.ts create mode 100644 dist2/types/lib/assets/svg/Logo.d.ts create mode 100644 dist2/types/lib/assets/svg/Spinner.d.ts create mode 100644 dist2/types/lib/components/ActionButton.d.ts create mode 100644 dist2/types/lib/components/Button.d.ts create mode 100644 dist2/types/lib/components/Column.d.ts create mode 100644 dist2/types/lib/components/Dialog.d.ts create mode 100644 dist2/types/lib/components/Error/ErrorBoundary.d.ts create mode 100644 dist2/types/lib/components/Error/ErrorDialog.d.ts create mode 100644 dist2/types/lib/components/Error/ErrorGenerator.d.ts create mode 100644 dist2/types/lib/components/Header.d.ts create mode 100644 dist2/types/lib/components/Input.d.ts create mode 100644 dist2/types/lib/components/Popover.d.ts create mode 100644 dist2/types/lib/components/RecentTransactionsDialog.d.ts create mode 100644 dist2/types/lib/components/Row.d.ts create mode 100644 dist2/types/lib/components/Rule.d.ts create mode 100644 dist2/types/lib/components/Swap/Input.d.ts create mode 100644 dist2/types/lib/components/Swap/Output.d.ts create mode 100644 dist2/types/lib/components/Swap/ReverseButton.d.ts create mode 100644 dist2/types/lib/components/Swap/Settings.fixture.d.ts create mode 100644 dist2/types/lib/components/Swap/Settings/MaxSlippageSelect.d.ts create mode 100644 dist2/types/lib/components/Swap/Settings/MockToggle.d.ts create mode 100644 dist2/types/lib/components/Swap/Settings/TransactionTtlInput.d.ts create mode 100644 dist2/types/lib/components/Swap/Settings/components.d.ts create mode 100644 dist2/types/lib/components/Swap/Settings/index.d.ts create mode 100644 dist2/types/lib/components/Swap/Status.fixture.d.ts create mode 100644 dist2/types/lib/components/Swap/Status/StatusDialog.d.ts create mode 100644 dist2/types/lib/components/Swap/Status/index.d.ts create mode 100644 dist2/types/lib/components/Swap/Summary.fixture.d.ts create mode 100644 dist2/types/lib/components/Swap/Summary/Details.d.ts create mode 100644 dist2/types/lib/components/Swap/Summary/Summary.d.ts create mode 100644 dist2/types/lib/components/Swap/Summary/index.d.ts create mode 100644 dist2/types/lib/components/Swap/Swap.fixture.d.ts create mode 100644 dist2/types/lib/components/Swap/SwapButton.d.ts create mode 100644 dist2/types/lib/components/Swap/TokenInput.d.ts create mode 100644 dist2/types/lib/components/Swap/Toolbar.d.ts create mode 100644 dist2/types/lib/components/Swap/index.d.ts create mode 100644 dist2/types/lib/components/Toggle.d.ts create mode 100644 dist2/types/lib/components/TokenImg.d.ts create mode 100644 dist2/types/lib/components/TokenSelect.fixture.d.ts create mode 100644 dist2/types/lib/components/TokenSelect/TokenBase.d.ts create mode 100644 dist2/types/lib/components/TokenSelect/TokenButton.d.ts create mode 100644 dist2/types/lib/components/TokenSelect/TokenOptions.d.ts create mode 100644 dist2/types/lib/components/TokenSelect/index.d.ts create mode 100644 dist2/types/lib/components/Tooltip.d.ts create mode 100644 dist2/types/lib/components/Wallet.d.ts create mode 100644 dist2/types/lib/components/Web3Provider.d.ts create mode 100644 dist2/types/lib/components/Widget.d.ts create mode 100644 dist2/types/lib/cosmos.decorator.d.ts create mode 100644 dist2/types/lib/cosmos/components/Widget.d.ts create mode 100644 dist2/types/lib/errors.d.ts create mode 100644 dist2/types/lib/hooks/multicall.d.ts create mode 100644 dist2/types/lib/hooks/swap/index.d.ts create mode 100644 dist2/types/lib/hooks/swap/useSwapApproval.d.ts create mode 100644 dist2/types/lib/hooks/swap/useSwapInfo.d.ts create mode 100644 dist2/types/lib/hooks/transactions/index.d.ts create mode 100644 dist2/types/lib/hooks/transactions/updater.d.ts create mode 100644 dist2/types/lib/hooks/useActiveWeb3React.d.ts create mode 100644 dist2/types/lib/hooks/useApproval.d.ts create mode 100644 dist2/types/lib/hooks/useBlockNumber.d.ts create mode 100644 dist2/types/lib/hooks/useCurrency.d.ts create mode 100644 dist2/types/lib/hooks/useCurrencyBalance.d.ts create mode 100644 dist2/types/lib/hooks/useCurrencyColor.d.ts create mode 100644 dist2/types/lib/hooks/useCurrencyLogoURIs.d.ts create mode 100644 dist2/types/lib/hooks/useInterval.d.ts create mode 100644 dist2/types/lib/hooks/useNativeCurrency.d.ts create mode 100644 dist2/types/lib/hooks/useNativeEvent.d.ts create mode 100644 dist2/types/lib/hooks/useScrollbar.d.ts create mode 100644 dist2/types/lib/hooks/useTokenList/fetchTokenList.d.ts create mode 100644 dist2/types/lib/hooks/useTokenList/filtering.d.ts create mode 100644 dist2/types/lib/hooks/useTokenList/index.d.ts create mode 100644 dist2/types/lib/hooks/useTokenList/querying.d.ts create mode 100644 dist2/types/lib/hooks/useTokenList/sorting.d.ts create mode 100644 dist2/types/lib/hooks/useTokenList/utils.d.ts create mode 100644 dist2/types/lib/hooks/useTokenList/validateTokenList.d.ts create mode 100644 dist2/types/lib/hooks/useUnmount.d.ts create mode 100644 dist2/types/lib/i18n.d.ts create mode 100644 dist2/types/lib/icons/index.d.ts create mode 100644 dist2/types/lib/index.d.ts create mode 100644 dist2/types/lib/state/atoms.d.ts create mode 100644 dist2/types/lib/state/multicall.d.ts create mode 100644 dist2/types/lib/state/settings.d.ts create mode 100644 dist2/types/lib/state/swap.d.ts create mode 100644 dist2/types/lib/state/transactions.d.ts create mode 100644 dist2/types/lib/state/web3.d.ts create mode 100644 dist2/types/lib/theme/dynamic.d.ts create mode 100644 dist2/types/lib/theme/index.d.ts create mode 100644 dist2/types/lib/theme/layer.d.ts create mode 100644 dist2/types/lib/theme/styled.d.ts create mode 100644 dist2/types/lib/theme/theme.d.ts create mode 100644 dist2/types/lib/theme/type.d.ts create mode 100644 dist2/types/lib/utils/contenthashToUri.d.ts create mode 100644 dist2/types/lib/utils/parseENSAddress.d.ts create mode 100644 dist2/types/lib/utils/resolveENSContentHash.d.ts create mode 100644 dist2/types/lib/utils/tryParseCurrencyAmount.d.ts create mode 100644 dist2/types/lib/utils/uriToHttp.d.ts create mode 100644 dist2/types/locales/af-ZA.d.ts create mode 100644 dist2/types/locales/ar-SA.d.ts create mode 100644 dist2/types/locales/ca-ES.d.ts create mode 100644 dist2/types/locales/cs-CZ.d.ts create mode 100644 dist2/types/locales/da-DK.d.ts create mode 100644 dist2/types/locales/de-DE.d.ts create mode 100644 dist2/types/locales/el-GR.d.ts create mode 100644 dist2/types/locales/en-US.d.ts create mode 100644 dist2/types/locales/es-ES.d.ts create mode 100644 dist2/types/locales/fi-FI.d.ts create mode 100644 dist2/types/locales/fr-FR.d.ts create mode 100644 dist2/types/locales/he-IL.d.ts create mode 100644 dist2/types/locales/hu-HU.d.ts create mode 100644 dist2/types/locales/id-ID.d.ts create mode 100644 dist2/types/locales/it-IT.d.ts create mode 100644 dist2/types/locales/ja-JP.d.ts create mode 100644 dist2/types/locales/ko-KR.d.ts create mode 100644 dist2/types/locales/nl-NL.d.ts create mode 100644 dist2/types/locales/no-NO.d.ts create mode 100644 dist2/types/locales/pl-PL.d.ts create mode 100644 dist2/types/locales/pseudo.d.ts create mode 100644 dist2/types/locales/pt-BR.d.ts create mode 100644 dist2/types/locales/pt-PT.d.ts create mode 100644 dist2/types/locales/ro-RO.d.ts create mode 100644 dist2/types/locales/ru-RU.d.ts create mode 100644 dist2/types/locales/sr-SP.d.ts create mode 100644 dist2/types/locales/sv-SE.d.ts create mode 100644 dist2/types/locales/sw-TZ.d.ts create mode 100644 dist2/types/locales/tr-TR.d.ts create mode 100644 dist2/types/locales/uk-UA.d.ts create mode 100644 dist2/types/locales/vi-VN.d.ts create mode 100644 dist2/types/locales/zh-CN.d.ts create mode 100644 dist2/types/locales/zh-TW.d.ts create mode 100644 dist2/types/pages/AddLiquidity/Review.d.ts create mode 100644 dist2/types/pages/AddLiquidity/index.d.ts create mode 100644 dist2/types/pages/AddLiquidity/redirects.d.ts create mode 100644 dist2/types/pages/AddLiquidity/styled.d.ts create mode 100644 dist2/types/pages/AddLiquidityV2/ConfirmAddModalBottom.d.ts create mode 100644 dist2/types/pages/AddLiquidityV2/PoolPriceBar.d.ts create mode 100644 dist2/types/pages/AddLiquidityV2/index.d.ts create mode 100644 dist2/types/pages/AddLiquidityV2/redirects.d.ts create mode 100644 dist2/types/pages/App.d.ts create mode 100644 dist2/types/pages/AppBody.d.ts create mode 100644 dist2/types/pages/CreateProposal/ProposalActionDetail.d.ts create mode 100644 dist2/types/pages/CreateProposal/ProposalActionSelector.d.ts create mode 100644 dist2/types/pages/CreateProposal/ProposalEditor.d.ts create mode 100644 dist2/types/pages/CreateProposal/ProposalSubmissionModal.d.ts create mode 100644 dist2/types/pages/CreateProposal/index.d.ts create mode 100644 dist2/types/pages/Earn/Countdown.d.ts create mode 100644 dist2/types/pages/Earn/Manage.d.ts create mode 100644 dist2/types/pages/Earn/index.d.ts create mode 100644 dist2/types/pages/MigrateV2/MigrateV2Pair.d.ts create mode 100644 dist2/types/pages/MigrateV2/index.d.ts create mode 100644 dist2/types/pages/Pool/CTACards.d.ts create mode 100644 dist2/types/pages/Pool/PositionPage.d.ts create mode 100644 dist2/types/pages/Pool/index.d.ts create mode 100644 dist2/types/pages/Pool/styleds.d.ts create mode 100644 dist2/types/pages/Pool/v2.d.ts create mode 100644 dist2/types/pages/PoolFinder/index.d.ts create mode 100644 dist2/types/pages/RemoveLiquidity/V3.d.ts create mode 100644 dist2/types/pages/RemoveLiquidity/index.d.ts create mode 100644 dist2/types/pages/RemoveLiquidity/styled.d.ts create mode 100644 dist2/types/pages/Swap/index.d.ts create mode 100644 dist2/types/pages/Swap/redirects.d.ts create mode 100644 dist2/types/pages/Vote/Landing.d.ts create mode 100644 dist2/types/pages/Vote/VotePage.d.ts create mode 100644 dist2/types/pages/Vote/index.d.ts create mode 100644 dist2/types/pages/Vote/styled.d.ts create mode 100644 dist2/types/pages/styled.d.ts create mode 100644 dist2/types/polyfills.d.ts create mode 100644 dist2/types/service-worker.d.ts create mode 100644 dist2/types/serviceWorkerRegistration.d.ts create mode 100644 dist2/types/setupTests.d.ts create mode 100644 dist2/types/snowflake.d.ts create mode 100644 dist2/types/state/application/hooks.d.ts create mode 100644 dist2/types/state/application/reducer.d.ts create mode 100644 dist2/types/state/application/updater.d.ts create mode 100644 dist2/types/state/burn/actions.d.ts create mode 100644 dist2/types/state/burn/hooks.d.ts create mode 100644 dist2/types/state/burn/reducer.d.ts create mode 100644 dist2/types/state/burn/v3/actions.d.ts create mode 100644 dist2/types/state/burn/v3/hooks.d.ts create mode 100644 dist2/types/state/burn/v3/reducer.d.ts create mode 100644 dist2/types/state/claim/hooks.d.ts create mode 100644 dist2/types/state/data/enhanced.d.ts create mode 100644 dist2/types/state/data/slice.d.ts create mode 100644 dist2/types/state/global/actions.d.ts create mode 100644 dist2/types/state/governance/hooks.d.ts create mode 100644 dist2/types/state/governance/types.d.ts create mode 100644 dist2/types/state/lists/actions.d.ts create mode 100644 dist2/types/state/lists/hooks.d.ts create mode 100644 dist2/types/state/lists/reducer.d.ts create mode 100644 dist2/types/state/lists/updater.d.ts create mode 100644 dist2/types/state/lists/wrappedTokenInfo.d.ts create mode 100644 dist2/types/state/logs/hooks.d.ts create mode 100644 dist2/types/state/logs/slice.d.ts create mode 100644 dist2/types/state/logs/updater.d.ts create mode 100644 dist2/types/state/logs/utils.d.ts create mode 100644 dist2/types/state/mint/actions.d.ts create mode 100644 dist2/types/state/mint/hooks.d.ts create mode 100644 dist2/types/state/mint/reducer.d.ts create mode 100644 dist2/types/state/mint/v3/actions.d.ts create mode 100644 dist2/types/state/mint/v3/hooks.d.ts create mode 100644 dist2/types/state/mint/v3/reducer.d.ts create mode 100644 dist2/types/state/mint/v3/utils.d.ts create mode 100644 dist2/types/state/routing/clientSideSmartOrderRouter/constants.d.ts create mode 100644 dist2/types/state/routing/clientSideSmartOrderRouter/dependencies.d.ts create mode 100644 dist2/types/state/routing/clientSideSmartOrderRouter/index.d.ts create mode 100644 dist2/types/state/routing/slice.d.ts create mode 100644 dist2/types/state/routing/types.d.ts create mode 100644 dist2/types/state/routing/useRoutingAPITrade.d.ts create mode 100644 dist2/types/state/routing/utils.d.ts create mode 100644 dist2/types/state/stake/hooks.d.ts create mode 100644 dist2/types/state/swap/actions.d.ts create mode 100644 dist2/types/state/swap/hooks.d.ts create mode 100644 dist2/types/state/swap/reducer.d.ts create mode 100644 dist2/types/state/transactions/actions.d.ts create mode 100644 dist2/types/state/transactions/hooks.d.ts create mode 100644 dist2/types/state/transactions/reducer.d.ts create mode 100644 dist2/types/state/transactions/updater.d.ts create mode 100644 dist2/types/state/user/actions.d.ts create mode 100644 dist2/types/state/user/hooks.d.ts create mode 100644 dist2/types/state/user/reducer.d.ts create mode 100644 dist2/types/state/user/updater.d.ts create mode 100644 dist2/types/state/wallet/hooks.d.ts create mode 100644 dist2/types/theme/DarkModeQueryParamReader.d.ts create mode 100644 dist2/types/theme/RadialGradientByChainUpdater.d.ts create mode 100644 dist2/types/theme/components.d.ts create mode 100644 dist2/types/theme/index.d.ts create mode 100644 dist2/types/types/tuple.d.ts create mode 100644 dist2/types/types/v3/commons.d.ts create mode 100644 dist2/types/types/v3/factories/IApproveAndCall__factory.d.ts create mode 100644 dist2/types/types/v3/factories/IERC1271__factory.d.ts create mode 100644 dist2/types/types/v3/factories/IERC20Metadata__factory.d.ts create mode 100644 dist2/types/types/v3/factories/IERC20Minimal__factory.d.ts create mode 100644 dist2/types/types/v3/factories/IERC20PermitAllowed__factory.d.ts create mode 100644 dist2/types/types/v3/factories/IERC721Permit__factory.d.ts create mode 100644 dist2/types/types/v3/factories/IImmutableState__factory.d.ts create mode 100644 dist2/types/types/v3/factories/IMulticallExtended__factory.d.ts create mode 100644 dist2/types/types/v3/factories/IMulticall__factory.d.ts create mode 100644 dist2/types/types/v3/factories/INonfungiblePositionManager__factory.d.ts create mode 100644 dist2/types/types/v3/factories/INonfungibleTokenPositionDescriptor__factory.d.ts create mode 100644 dist2/types/types/v3/factories/IOracleSlippage__factory.d.ts create mode 100644 dist2/types/types/v3/factories/IPeripheryImmutableState__factory.d.ts create mode 100644 dist2/types/types/v3/factories/IPeripheryPaymentsExtended__factory.d.ts create mode 100644 dist2/types/types/v3/factories/IPeripheryPaymentsWithFeeExtended__factory.d.ts create mode 100644 dist2/types/types/v3/factories/IPeripheryPaymentsWithFee__factory.d.ts create mode 100644 dist2/types/types/v3/factories/IPeripheryPayments__factory.d.ts create mode 100644 dist2/types/types/v3/factories/IPoolInitializer__factory.d.ts create mode 100644 dist2/types/types/v3/factories/IQuoterV2__factory.d.ts create mode 100644 dist2/types/types/v3/factories/IQuoter__factory.d.ts create mode 100644 dist2/types/types/v3/factories/ISelfPermit__factory.d.ts create mode 100644 dist2/types/types/v3/factories/ISwapRouter02__factory.d.ts create mode 100644 dist2/types/types/v3/factories/ISwapRouter__factory.d.ts create mode 100644 dist2/types/types/v3/factories/ITickLens__factory.d.ts create mode 100644 dist2/types/types/v3/factories/IUniswapV3Factory__factory.d.ts create mode 100644 dist2/types/types/v3/factories/IUniswapV3FlashCallback__factory.d.ts create mode 100644 dist2/types/types/v3/factories/IUniswapV3MintCallback__factory.d.ts create mode 100644 dist2/types/types/v3/factories/IUniswapV3PoolActions__factory.d.ts create mode 100644 dist2/types/types/v3/factories/IUniswapV3PoolDeployer__factory.d.ts create mode 100644 dist2/types/types/v3/factories/IUniswapV3PoolDerivedState__factory.d.ts create mode 100644 dist2/types/types/v3/factories/IUniswapV3PoolEvents__factory.d.ts create mode 100644 dist2/types/types/v3/factories/IUniswapV3PoolImmutables__factory.d.ts create mode 100644 dist2/types/types/v3/factories/IUniswapV3PoolOwnerActions__factory.d.ts create mode 100644 dist2/types/types/v3/factories/IUniswapV3PoolState__factory.d.ts create mode 100644 dist2/types/types/v3/factories/IUniswapV3Pool__factory.d.ts create mode 100644 dist2/types/types/v3/factories/IUniswapV3Staker__factory.d.ts create mode 100644 dist2/types/types/v3/factories/IUniswapV3SwapCallback__factory.d.ts create mode 100644 dist2/types/types/v3/factories/IV2SwapRouter__factory.d.ts create mode 100644 dist2/types/types/v3/factories/IV3Migrator__factory.d.ts create mode 100644 dist2/types/types/v3/factories/IV3SwapRouter__factory.d.ts create mode 100644 dist2/types/types/v3/factories/IWETH9__factory.d.ts create mode 100644 dist2/types/types/v3/factories/NFTDescriptor__factory.d.ts create mode 100644 dist2/types/types/v3/factories/NonfungiblePositionManager__factory.d.ts create mode 100644 dist2/types/types/v3/factories/NonfungibleTokenPositionDescriptor__factory.d.ts create mode 100644 dist2/types/types/v3/factories/PairFlash__factory.d.ts create mode 100644 dist2/types/types/v3/factories/QuoterV2__factory.d.ts create mode 100644 dist2/types/types/v3/factories/Quoter__factory.d.ts create mode 100644 dist2/types/types/v3/factories/SwapRouter02__factory.d.ts create mode 100644 dist2/types/types/v3/factories/SwapRouter__factory.d.ts create mode 100644 dist2/types/types/v3/factories/TickLens__factory.d.ts create mode 100644 dist2/types/types/v3/factories/UniswapInterfaceMulticall__factory.d.ts create mode 100644 dist2/types/types/v3/factories/UniswapV3Factory__factory.d.ts create mode 100644 dist2/types/types/v3/factories/UniswapV3Pool__factory.d.ts create mode 100644 dist2/types/types/v3/factories/UniswapV3Staker__factory.d.ts create mode 100644 dist2/types/types/v3/factories/V2SwapRouter__factory.d.ts create mode 100644 dist2/types/types/v3/factories/V3Migrator__factory.d.ts create mode 100644 dist2/types/types/v3/factories/V3SwapRouter__factory.d.ts create mode 100644 dist2/types/types/v3/index.d.ts create mode 100644 dist2/types/utils/anonymizeLink.d.ts create mode 100644 dist2/types/utils/approveAmountCalldata.d.ts create mode 100644 dist2/types/utils/calculateGasMargin.d.ts create mode 100644 dist2/types/utils/calculateSlippageAmount.d.ts create mode 100644 dist2/types/utils/chains.d.ts create mode 100644 dist2/types/utils/computeFiatValuePriceImpact.d.ts create mode 100644 dist2/types/utils/computeSurroundingTicks.d.ts create mode 100644 dist2/types/utils/computeUniCirculation.d.ts create mode 100644 dist2/types/utils/constructSameAddressMap.d.ts create mode 100644 dist2/types/utils/currencyId.d.ts create mode 100644 dist2/types/utils/formatCurrencyAmount.d.ts create mode 100644 dist2/types/utils/formatTickPrice.d.ts create mode 100644 dist2/types/utils/getExplorerLink.d.ts create mode 100644 dist2/types/utils/getLibrary.d.ts create mode 100644 dist2/types/utils/getTickToPrice.d.ts create mode 100644 dist2/types/utils/getTxOptimizedSwapRouter.d.ts create mode 100644 dist2/types/utils/index.d.ts create mode 100644 dist2/types/utils/isTradeBetter.d.ts create mode 100644 dist2/types/utils/isZero.d.ts create mode 100644 dist2/types/utils/listSort.d.ts create mode 100644 dist2/types/utils/listVersionLabel.d.ts create mode 100644 dist2/types/utils/maxAmountSpend.d.ts create mode 100644 dist2/types/utils/prices.d.ts create mode 100644 dist2/types/utils/retry.d.ts create mode 100644 dist2/types/utils/routes.d.ts create mode 100644 dist2/types/utils/safeNamehash.d.ts create mode 100644 dist2/types/utils/supportedChainId.d.ts create mode 100644 dist2/types/utils/switchToNetwork.d.ts create mode 100644 dist2/types/utils/tradeMeaningFullyDiffer.d.ts create mode 100644 dist2/types/utils/transformSwapRouteToGetQuoteResult.d.ts create mode 100644 dist2/types/utils/unwrappedToken.d.ts create mode 100644 dist2/types/utils/userAgent.d.ts create mode 100644 old-rollup.config.ts create mode 100644 src/snowflake.ts diff --git a/dist2/f89237c6bc3f84db.png b/dist2/f89237c6bc3f84db.png new file mode 100644 index 0000000000000000000000000000000000000000..85714ea2908834e9bec0b6948ae6d29fa04daaf9 GIT binary patch literal 114217 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

b^7#A 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 +import { RouteComponentProps } from 'react-router-dom'; + +declare function Swap({ history }: RouteComponentProps): JSX.Element; + +export { Swap }; diff --git a/dist2/snowflake.js b/dist2/snowflake.js new file mode 100644 index 00000000000..e373ad0d9ad --- /dev/null +++ b/dist2/snowflake.js @@ -0,0 +1,16428 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var jsxRuntime = require('react/jsx-runtime'); +var macro = require('@lingui/macro'); +var v2Sdk = require('@uniswap/v2-sdk'); +var v3Sdk = require('@uniswap/v3-sdk'); +var core$1 = require('@web3-react/core'); +var utils = require('jotai/utils'); +var core = require('widgets-web3-react/core'); +var empty = require('widgets-web3-react/empty'); +var sdkCore = require('@uniswap/sdk-core'); +var JSBI = require('jsbi'); +var reactFeather = require('react-feather'); +var React = require('react'); +var reactRedux = require('react-redux'); +var bytes = require('@ethersproject/bytes'); +var strings = require('@ethersproject/strings'); +var address = require('@ethersproject/address'); +var constants = require('@ethersproject/constants'); +var contracts = require('@ethersproject/contracts'); +var jotai = require('jotai'); +var reduxMulticall = require('@uniswap/redux-multicall'); +var redux = require('redux'); +var hash = require('@ethersproject/hash'); +var CID = require('cids'); +var multicodec = require('multicodec'); +var multihashes = require('multihashes'); +var abi$6 = require('@ethersproject/abi'); +var toolkit = require('@reduxjs/toolkit'); +var styled = require('styled-components/macro'); +var rebass = require('rebass'); +var ReactGA = require('react-ga'); +var reactRouterDom = require('react-router-dom'); +var styledComponents = require('rebass/styled-components'); +var reactSpring = require('react-spring'); +var useResizeObserver = require('use-resize-observer'); +var polished = require('polished'); +var Portal = require('@reach/portal'); +var reactPopper = require('react-popper'); +var units = require('@ethersproject/units'); +var routerSdk = require('@uniswap/router-sdk'); +var dialog = require('@reach/dialog'); +var reactUseGesture = require('react-use-gesture'); +var uaParserJs = require('ua-parser-js'); +var app = require('firebase/app'); +var database = require('firebase/database'); +var AutoSizer = require('react-virtualized-auto-sizer'); +var reactWindow = require('react-window'); +var safeAppsWeb3React = require('@gnosis.pm/safe-apps-web3-react'); +var injectedConnector = require('@web3-react/injected-connector'); +var portisConnector = require('@web3-react/portis-connector'); +var walletconnectConnector = require('@web3-react/walletconnect-connector'); +var walletlinkConnector = require('@web3-react/walletlink-connector'); +var providers = require('@ethersproject/providers'); +var ms = require('ms.macro'); +var fortmaticConnector = require('@web3-react/fortmatic-connector'); +var abstractConnector = require('@web3-react/abstract-connector'); +var invariant = require('tiny-invariant'); +var Vibrant = require('node-vibrant/lib/bundle'); +var wcagContrast = require('wcag-contrast'); +var qs = require('qs'); +var react = require('@reduxjs/toolkit/query/react'); +var reduxLocalstorageSimple = require('redux-localstorage-simple'); +var graphqlRequest = require('graphql-request'); +var tokenLists = require('@uniswap/token-lists'); +var smartOrderRouter = require('@uniswap/smart-order-router'); +var ethers = require('ethers/lib/ethers'); + +function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } + +function _interopNamespace(e) { + if (e && e.__esModule) return e; + var n = Object.create(null); + if (e) { + Object.keys(e).forEach(function (k) { + if (k !== 'default') { + var d = Object.getOwnPropertyDescriptor(e, k); + Object.defineProperty(n, k, d.get ? d : { + enumerable: true, + get: function () { return e[k]; } + }); + } + }); + } + n["default"] = e; + return Object.freeze(n); +} + +function _mergeNamespaces(n, m) { + m.forEach(function (e) { + e && typeof e !== 'string' && !Array.isArray(e) && Object.keys(e).forEach(function (k) { + if (k !== 'default' && !(k in n)) { + var d = Object.getOwnPropertyDescriptor(e, k); + Object.defineProperty(n, k, d.get ? d : { + enumerable: true, + get: function () { return e[k]; } + }); + } + }); + }); + return Object.freeze(n); +} + +var JSBI__default = /*#__PURE__*/_interopDefaultLegacy(JSBI); +var React__namespace = /*#__PURE__*/_interopNamespace(React); +var React__default = /*#__PURE__*/_interopDefaultLegacy(React); +var CID__default = /*#__PURE__*/_interopDefaultLegacy(CID); +var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled); +var ReactGA__default = /*#__PURE__*/_interopDefaultLegacy(ReactGA); +var useResizeObserver__default = /*#__PURE__*/_interopDefaultLegacy(useResizeObserver); +var Portal__default = /*#__PURE__*/_interopDefaultLegacy(Portal); +var AutoSizer__default = /*#__PURE__*/_interopDefaultLegacy(AutoSizer); +var ms__default = /*#__PURE__*/_interopDefaultLegacy(ms); +var invariant__default = /*#__PURE__*/_interopDefaultLegacy(invariant); +var Vibrant__default = /*#__PURE__*/_interopDefaultLegacy(Vibrant); +var qs__default = /*#__PURE__*/_interopDefaultLegacy(qs); + +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ +/* global Reflect, Promise */ + +var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); +}; + +function __extends(d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +} + +var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; + +function __rest(s, e) { + var t = {}; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { + if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) + t[p[i]] = s[p[i]]; + } + return t; +} + +function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +} + +function __generator(thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +} + +function __values(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +} + +function __read(o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +} + +function __spreadArray(to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); +} + +function __makeTemplateObject(cooked, raw) { + if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } + return cooked; +} + +var EthereumLogo = "data:image/png;base64,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"; + +var arbitrumLogoUrl = "data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20viewBox%3D%220%200%20470.287%20514.251%22%20enable-background%3D%22new%200%200%20470.287%20514.251%22%20xml%3Aspace%3D%22preserve%22%3E%3Cg%20id%3D%22Background%22%3E%3C%2Fg%3E%3Cg%20id%3D%22Logos_and_symbols%22%3E%20%3Cg%20id%3D%22SYMBOL_VER_3%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_4_3_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_1_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_1_%22%3E%20%20%3Cg%20id%3D%22_x31_-3%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_14_%22%3E%20%20%20%3Cpath%20fill%3D%22%232D374B%22%20d%3D%22M291.134%2C237.469l35.654-60.5l96.103%2C149.684l0.046%2C28.727l-0.313-197.672%20%20%20%20c-0.228-4.832-2.794-9.252-6.887-11.859L242.715%2C46.324c-4.045-1.99-9.18-1.967-13.22%2C0.063c-0.546%2C0.272-1.06%2C0.57-1.548%2C0.895%20%20%20%20l-0.604%2C0.379L59.399%2C144.983l-0.651%2C0.296c-0.838%2C0.385-1.686%2C0.875-2.48%2C1.444c-3.185%2C2.283-5.299%2C5.66-5.983%2C9.448%20%20%20%20c-0.103%2C0.574-0.179%2C1.158-0.214%2C1.749l0.264%2C161.083l89.515-138.745c11.271-18.397%2C35.825-24.323%2C58.62-24.001l26.753%2C0.706%20%20%20%20L67.588%2C409.765l18.582%2C10.697L245.692%2C157.22l70.51-0.256L157.091%2C426.849l66.306%2C38.138l7.922%2C4.556%20%20%20%20c3.351%2C1.362%2C7.302%2C1.431%2C10.681%2C0.21l175.453-101.678l-33.544%2C19.438L291.134%2C237.469z%20M304.736%2C433.395l-66.969-105.108%20%20%20%20l40.881-69.371l87.952%2C138.628L304.736%2C433.395z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%2328A0F0%22%20points%3D%22237.768%2C328.286%20304.736%2C433.395%20366.601%2C397.543%20278.648%2C258.915%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2328A0F0%22%20d%3D%22M422.937%2C355.379l-0.046-28.727l-96.103-149.684l-35.654%2C60.5l92.774%2C150.043l33.544-19.438%20%20%20%20c3.29-2.673%2C5.281-6.594%2C5.49-10.825L422.937%2C355.379z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23FFFFFF%22%20d%3D%22M20.219%2C382.469l47.369%2C27.296l157.634-252.801l-26.753-0.706c-22.795-0.322-47.35%2C5.604-58.62%2C24.001%20%20%20%20L50.334%2C319.004l-30.115%2C46.271V382.469z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%23FFFFFF%22%20points%3D%22316.202%2C156.964%20245.692%2C157.22%2086.17%2C420.462%20141.928%2C452.565%20157.091%2C426.849%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2396BEDC%22%20d%3D%22M452.65%2C156.601c-0.59-14.746-8.574-28.245-21.08-36.104L256.28%2C19.692%20%20%20%20c-12.371-6.229-27.825-6.237-40.218-0.004c-1.465%2C0.739-170.465%2C98.752-170.465%2C98.752c-2.339%2C1.122-4.592%2C2.458-6.711%2C3.975%20%20%20%20c-11.164%2C8.001-17.969%2C20.435-18.668%2C34.095v208.765l30.115-46.271L50.07%2C157.921c0.035-0.589%2C0.109-1.169%2C0.214-1.741%20%20%20%20c0.681-3.79%2C2.797-7.171%2C5.983-9.456c0.795-0.569%2C172.682-100.064%2C173.228-100.337c4.04-2.029%2C9.175-2.053%2C13.22-0.063%20%20%20%20l173.022%2C99.523c4.093%2C2.607%2C6.659%2C7.027%2C6.887%2C11.859v199.542c-0.209%2C4.231-1.882%2C8.152-5.172%2C10.825l-33.544%2C19.438%20%20%20%20l-17.308%2C10.031l-61.864%2C35.852l-62.737%2C36.357c-3.379%2C1.221-7.33%2C1.152-10.681-0.21l-74.228-42.693l-15.163%2C25.717%20%20%20%20l66.706%2C38.406c2.206%2C1.255%2C4.171%2C2.367%2C5.784%2C3.272c2.497%2C1.4%2C4.199%2C2.337%2C4.8%2C2.629c4.741%2C2.303%2C11.563%2C3.643%2C17.71%2C3.643%20%20%20%20c5.636%2C0%2C11.132-1.035%2C16.332-3.072l182.225-105.531c10.459-8.104%2C16.612-20.325%2C17.166-33.564V156.601z%22%2F%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_13_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_6_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_3_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_15_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_3_%22%3E%20%20%20%3Cg%20id%3D%22_x33__7_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic%22%3E%20%20%20%3Cg%20id%3D%22_x33__3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_10_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x34__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_2_%22%3E%20%20%20%3Cg%20id%3D%22_x33__6_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_2_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_11_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_5_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_12_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_1_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_9_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_2_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol_1_%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_1_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_7_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_8_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Monochromatic_1_%22%3E%20%20%3Cg%20id%3D%22_x33__4_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E"; + +var optimismLogoUrl = "data:image/svg+xml,%3Csvg%20width%3D%22170%22%20height%3D%22168%22%20viewBox%3D%220%200%20170%20168%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20clip-path%3D%22url%28%23clip0%29%22%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF505F%22%2F%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF0320%22%2F%3E%3Cpath%20d%3D%22M85.05%200C132.022%200%20170.1%2037.8949%20170.1%2084.6407C170.1%20131.386%200%20131.386%200%2084.6407C0%2037.8949%2038.0782%200%2085.05%200Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.665%2064.0394L112.444%2012.3742L89.0263%2078.9477L144.665%2064.0394Z%22%20fill%3D%22%23FF4E65%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.777%2064.215L112.444%2012.3742L165.349%2058.4347L143.777%2064.215Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.551%2063.613L142.479%20124.467L88.912%2078.5213L144.551%2063.613Z%22%20fill%3D%22%23D0001A%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.663%2063.7886L142.479%20124.467L165.235%2058.0083L143.663%2063.7886Z%22%20fill%3D%22%23FF697B%22%2F%3E%3C%2Fg%3E%3Cdefs%3E%3CclipPath%20id%3D%22clip0%22%3E%3Crect%20width%3D%22170%22%20height%3D%22168%22%20fill%3D%22white%22%2F%3E%3C%2FclipPath%3E%3C%2Fdefs%3E%3C%2Fsvg%3E"; + +var polygonMaticLogo = "data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20viewBox%3D%220%200%2038.4%2033.5%22%20style%3D%22enable-background%3Anew%200%200%2038.4%2033.5%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cstyle%20type%3D%22text%2Fcss%22%3E%20.st0%7Bfill%3A%238247E5%3B%7D%3C%2Fstyle%3E%3Cg%3E%20%3Cpath%20class%3D%22st0%22%20d%3D%22M29%2C10.2c-0.7-0.4-1.6-0.4-2.4%2C0L21%2C13.5l-3.8%2C2.1l-5.5%2C3.3c-0.7%2C0.4-1.6%2C0.4-2.4%2C0L5%2C16.3%20%20c-0.7-0.4-1.2-1.2-1.2-2.1v-5c0-0.8%2C0.4-1.6%2C1.2-2.1l4.3-2.5c0.7-0.4%2C1.6-0.4%2C2.4%2C0L16%2C7.2c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v3.3l3.8-2.2V7%20%20c0-0.8-0.4-1.6-1.2-2.1l-8-4.7c-0.7-0.4-1.6-0.4-2.4%2C0L1.2%2C5C0.4%2C5.4%2C0%2C6.2%2C0%2C7v9.4c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l5.5-3.2l3.8-2.2l5.5-3.2c0.7-0.4%2C1.6-0.4%2C2.4%2C0l4.3%2C2.5c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v5c0%2C0.8-0.4%2C1.6-1.2%2C2.1%20%20L29%2C28.8c-0.7%2C0.4-1.6%2C0.4-2.4%2C0l-4.3-2.5c-0.7-0.4-1.2-1.2-1.2-2.1V21l-3.8%2C2.2v3.3c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l8.1-4.7c0.7-0.4%2C1.2-1.2%2C1.2-2.1V17c0-0.8-0.4-1.6-1.2-2.1L29%2C10.2z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"; + +var _a$g; +/** + * List of all the networks supported by the Uniswap Interface + */ +var SupportedChainId; +(function (SupportedChainId) { + SupportedChainId[SupportedChainId["MAINNET"] = 1] = "MAINNET"; + SupportedChainId[SupportedChainId["ROPSTEN"] = 3] = "ROPSTEN"; + SupportedChainId[SupportedChainId["RINKEBY"] = 4] = "RINKEBY"; + SupportedChainId[SupportedChainId["GOERLI"] = 5] = "GOERLI"; + SupportedChainId[SupportedChainId["KOVAN"] = 42] = "KOVAN"; + SupportedChainId[SupportedChainId["ARBITRUM_ONE"] = 42161] = "ARBITRUM_ONE"; + SupportedChainId[SupportedChainId["ARBITRUM_RINKEBY"] = 421611] = "ARBITRUM_RINKEBY"; + SupportedChainId[SupportedChainId["OPTIMISM"] = 10] = "OPTIMISM"; + SupportedChainId[SupportedChainId["OPTIMISTIC_KOVAN"] = 69] = "OPTIMISTIC_KOVAN"; + SupportedChainId[SupportedChainId["POLYGON"] = 137] = "POLYGON"; + SupportedChainId[SupportedChainId["POLYGON_MUMBAI"] = 80001] = "POLYGON_MUMBAI"; +})(SupportedChainId || (SupportedChainId = {})); +(_a$g = {}, + _a$g[SupportedChainId.MAINNET] = 'mainnet', + _a$g[SupportedChainId.ROPSTEN] = 'ropsten', + _a$g[SupportedChainId.RINKEBY] = 'rinkeby', + _a$g[SupportedChainId.GOERLI] = 'goerli', + _a$g[SupportedChainId.KOVAN] = 'kovan', + _a$g[SupportedChainId.POLYGON] = 'polygon', + _a$g[SupportedChainId.POLYGON_MUMBAI] = 'polygon_mumbai', + _a$g[SupportedChainId.ARBITRUM_ONE] = 'arbitrum', + _a$g[SupportedChainId.ARBITRUM_RINKEBY] = 'arbitrum_rinkeby', + _a$g[SupportedChainId.OPTIMISM] = 'optimism', + _a$g[SupportedChainId.OPTIMISTIC_KOVAN] = 'optimistic_kovan', + _a$g); +/** + * Array of all the supported chain IDs + */ +var ALL_SUPPORTED_CHAIN_IDS = Object.values(SupportedChainId).filter(function (id) { return typeof id === 'number'; }); +var SUPPORTED_GAS_ESTIMATE_CHAIN_IDS = [SupportedChainId.MAINNET, SupportedChainId.POLYGON]; +/** + * All the chain IDs that are running the Ethereum protocol. + */ +[ + SupportedChainId.MAINNET, + SupportedChainId.ROPSTEN, + SupportedChainId.RINKEBY, + SupportedChainId.GOERLI, + SupportedChainId.KOVAN, + SupportedChainId.POLYGON, + SupportedChainId.POLYGON_MUMBAI, +]; +/** + * Controls some L2 specific behavior, e.g. slippage tolerance, special UI behavior. + * The expectation is that all of these networks have immediate transaction confirmation. + */ +var L2_CHAIN_IDS = [ + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, +]; + +var UNI_LIST = 'https://tokens.uniswap.org'; +var AAVE_LIST = 'tokenlist.aave.eth'; +var BA_LIST = 'https://raw.githubusercontent.com/The-Blockchain-Association/sec-notice-list/master/ba-sec-list.json'; +var CMC_ALL_LIST = 'https://api.coinmarketcap.com/data-api/v3/uniswap/all.json'; +var COINGECKO_LIST = 'https://tokens.coingecko.com/uniswap/all.json'; +var COMPOUND_LIST = 'https://raw.githubusercontent.com/compound-finance/token-list/master/compound.tokenlist.json'; +var GEMINI_LIST = 'https://www.gemini.com/uniswap/manifest.json'; +var ARBITRUM_LIST = 'https://bridge.arbitrum.io/token-list-42161.json'; +var KLEROS_LIST = 't2crtokens.eth'; +var OPTIMISM_LIST = 'https://static.optimism.io/optimism.tokenlist.json'; +var ROLL_LIST = 'https://app.tryroll.com/tokens.json'; +var SET_LIST = 'https://raw.githubusercontent.com/SetProtocol/uniswap-tokenlist/main/set.tokenlist.json'; +var WRAPPED_LIST = 'wrapped.tokensoft.eth'; +var UNSUPPORTED_LIST_URLS = [BA_LIST]; +// this is the default list of lists that are exposed to users +// lower index == higher priority for token import +var DEFAULT_LIST_OF_LISTS_TO_DISPLAY = [ + UNI_LIST, + COMPOUND_LIST, + AAVE_LIST, + CMC_ALL_LIST, + COINGECKO_LIST, + KLEROS_LIST, + GEMINI_LIST, + WRAPPED_LIST, + SET_LIST, + ROLL_LIST, + ARBITRUM_LIST, + OPTIMISM_LIST, +]; +var DEFAULT_LIST_OF_LISTS = __spreadArray(__spreadArray([], __read(DEFAULT_LIST_OF_LISTS_TO_DISPLAY), false), __read(UNSUPPORTED_LIST_URLS), false); +// default lists to be 'active' aka searched across +var DEFAULT_ACTIVE_LIST_URLS = [UNI_LIST, GEMINI_LIST]; + +var _a$f, _b$6; +var INFURA_KEY = process.env.REACT_APP_INFURA_KEY; +if (typeof INFURA_KEY === 'undefined') { + throw new Error("REACT_APP_INFURA_KEY must be a defined environment variable"); +} +/** + * These are the network URLs used by the interface when there is not another available source of chain data + */ +var INFURA_NETWORK_URLS = (_a$f = {}, + _a$f[SupportedChainId.MAINNET] = "https://mainnet.infura.io/v3/" + INFURA_KEY, + _a$f[SupportedChainId.RINKEBY] = "https://rinkeby.infura.io/v3/" + INFURA_KEY, + _a$f[SupportedChainId.ROPSTEN] = "https://ropsten.infura.io/v3/" + INFURA_KEY, + _a$f[SupportedChainId.GOERLI] = "https://goerli.infura.io/v3/" + INFURA_KEY, + _a$f[SupportedChainId.KOVAN] = "https://kovan.infura.io/v3/" + INFURA_KEY, + _a$f[SupportedChainId.OPTIMISM] = "https://optimism-mainnet.infura.io/v3/" + INFURA_KEY, + _a$f[SupportedChainId.OPTIMISTIC_KOVAN] = "https://optimism-kovan.infura.io/v3/" + INFURA_KEY, + _a$f[SupportedChainId.ARBITRUM_ONE] = "https://arbitrum-mainnet.infura.io/v3/" + INFURA_KEY, + _a$f[SupportedChainId.ARBITRUM_RINKEBY] = "https://arbitrum-rinkeby.infura.io/v3/" + INFURA_KEY, + _a$f[SupportedChainId.POLYGON] = "https://polygon-mainnet.infura.io/v3/" + INFURA_KEY, + _a$f[SupportedChainId.POLYGON_MUMBAI] = "https://polygon-mumbai.infura.io/v3/" + INFURA_KEY, + _a$f); +var NetworkType; +(function (NetworkType) { + NetworkType[NetworkType["L1"] = 0] = "L1"; + NetworkType[NetworkType["L2"] = 1] = "L2"; +})(NetworkType || (NetworkType = {})); +var CHAIN_INFO = (_b$6 = {}, + _b$6[SupportedChainId.MAINNET] = { + networkType: NetworkType.L1, + docs: 'https://docs.uniswap.org/', + explorer: 'https://etherscan.io/', + infoLink: 'https://info.uniswap.org/#/', + label: 'Ethereum', + logoUrl: EthereumLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, + rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.MAINNET], + }, + }, + _b$6[SupportedChainId.RINKEBY] = { + networkType: NetworkType.L1, + docs: 'https://docs.uniswap.org/', + explorer: 'https://rinkeby.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/', + label: 'Rinkeby', + logoUrl: EthereumLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Rinkeby Ether', symbol: 'rETH', decimals: 18 }, + rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.RINKEBY], + }, + }, + _b$6[SupportedChainId.ROPSTEN] = { + networkType: NetworkType.L1, + docs: 'https://docs.uniswap.org/', + explorer: 'https://ropsten.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/', + label: 'Ropsten', + logoUrl: EthereumLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Ropsten Ether', symbol: 'ropETH', decimals: 18 }, + rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.ROPSTEN], + }, + }, + _b$6[SupportedChainId.KOVAN] = { + networkType: NetworkType.L1, + docs: 'https://docs.uniswap.org/', + explorer: 'https://kovan.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/', + label: 'Kovan', + logoUrl: EthereumLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Kovan Ether', symbol: 'kovETH', decimals: 18 }, + rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.KOVAN], + }, + }, + _b$6[SupportedChainId.GOERLI] = { + networkType: NetworkType.L1, + docs: 'https://docs.uniswap.org/', + explorer: 'https://goerli.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/', + label: 'Görli', + logoUrl: EthereumLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Görli Ether', symbol: 'görETH', decimals: 18 }, + rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.GOERLI], + }, + }, + _b$6[SupportedChainId.OPTIMISM] = { + networkType: NetworkType.L2, + blockWaitMsBeforeWarning: ms__default["default"](templateObject_1$X || (templateObject_1$X = __makeTemplateObject(["25m"], ["25m"]))), + bridge: 'https://gateway.optimism.io/?chainId=1', + defaultListUrl: OPTIMISM_LIST, + docs: 'https://optimism.io/', + explorer: 'https://optimistic.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/optimism/', + label: 'Optimism', + logoUrl: optimismLogoUrl, + statusPage: 'https://optimism.io/status', + helpCenterUrl: 'https://help.uniswap.org/en/collections/3137778-uniswap-on-optimistic-ethereum-oξ', + addNetworkInfo: { + nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, + rpcUrl: 'https://mainnet.optimism.io', + }, + }, + _b$6[SupportedChainId.OPTIMISTIC_KOVAN] = { + networkType: NetworkType.L2, + blockWaitMsBeforeWarning: ms__default["default"](templateObject_2$E || (templateObject_2$E = __makeTemplateObject(["25m"], ["25m"]))), + bridge: 'https://gateway.optimism.io/', + defaultListUrl: OPTIMISM_LIST, + docs: 'https://optimism.io/', + explorer: 'https://optimistic.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/optimism/', + label: 'Optimistic Kovan', + logoUrl: optimismLogoUrl, + statusPage: 'https://optimism.io/status', + helpCenterUrl: 'https://help.uniswap.org/en/collections/3137778-uniswap-on-optimistic-ethereum-oξ', + addNetworkInfo: { + nativeCurrency: { name: 'Optimistic Kovan Ether', symbol: 'kovOpETH', decimals: 18 }, + rpcUrl: 'https://kovan.optimism.io', + }, + }, + _b$6[SupportedChainId.ARBITRUM_ONE] = { + networkType: NetworkType.L2, + blockWaitMsBeforeWarning: ms__default["default"](templateObject_3$x || (templateObject_3$x = __makeTemplateObject(["10m"], ["10m"]))), + bridge: 'https://bridge.arbitrum.io/', + docs: 'https://offchainlabs.com/', + explorer: 'https://arbiscan.io/', + infoLink: 'https://info.uniswap.org/#/arbitrum', + label: 'Arbitrum', + logoUrl: arbitrumLogoUrl, + defaultListUrl: ARBITRUM_LIST, + helpCenterUrl: 'https://help.uniswap.org/en/collections/3137787-uniswap-on-arbitrum', + addNetworkInfo: { + nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, + rpcUrl: 'https://arb1.arbitrum.io/rpc', + }, + }, + _b$6[SupportedChainId.ARBITRUM_RINKEBY] = { + networkType: NetworkType.L2, + blockWaitMsBeforeWarning: ms__default["default"](templateObject_4$n || (templateObject_4$n = __makeTemplateObject(["10m"], ["10m"]))), + bridge: 'https://bridge.arbitrum.io/', + docs: 'https://offchainlabs.com/', + explorer: 'https://rinkeby-explorer.arbitrum.io/', + infoLink: 'https://info.uniswap.org/#/arbitrum/', + label: 'Arbitrum Rinkeby', + logoUrl: arbitrumLogoUrl, + defaultListUrl: ARBITRUM_LIST, + helpCenterUrl: 'https://help.uniswap.org/en/collections/3137787-uniswap-on-arbitrum', + addNetworkInfo: { + nativeCurrency: { name: 'Rinkeby Arbitrum Ether', symbol: 'rinkArbETH', decimals: 18 }, + rpcUrl: 'https://rinkeby.arbitrum.io/rpc', + }, + }, + _b$6[SupportedChainId.POLYGON] = { + networkType: NetworkType.L1, + blockWaitMsBeforeWarning: ms__default["default"](templateObject_5$k || (templateObject_5$k = __makeTemplateObject(["10m"], ["10m"]))), + bridge: 'https://wallet.polygon.technology/bridge', + docs: 'https://polygon.io/', + explorer: 'https://polygonscan.com/', + infoLink: 'https://info.uniswap.org/#/polygon/', + label: 'Polygon', + logoUrl: polygonMaticLogo, + addNetworkInfo: { + rpcUrl: 'https://polygon-rpc.com/', + nativeCurrency: { name: 'Polygon Matic', symbol: 'MATIC', decimals: 18 }, + }, + }, + _b$6[SupportedChainId.POLYGON_MUMBAI] = { + networkType: NetworkType.L1, + blockWaitMsBeforeWarning: ms__default["default"](templateObject_6$e || (templateObject_6$e = __makeTemplateObject(["10m"], ["10m"]))), + bridge: 'https://wallet.polygon.technology/bridge', + docs: 'https://polygon.io/', + explorer: 'https://mumbai.polygonscan.com/', + infoLink: 'https://info.uniswap.org/#/polygon/', + label: 'Polygon Mumbai', + logoUrl: polygonMaticLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Polygon Mumbai Matic', symbol: 'mMATIC', decimals: 18 }, + rpcUrl: 'https://rpc-endpoints.superfluid.dev/mumbai', + }, + }, + _b$6); +var templateObject_1$X, templateObject_2$E, templateObject_3$x, templateObject_4$n, templateObject_5$k, templateObject_6$e; + +var EMPTY_CONNECTOR = core.initializeConnector(function () { return empty.EMPTY; }); +var urlAtom = utils.atomWithDefault(function () { return EMPTY_CONNECTOR; }); +var injectedAtom = utils.atomWithDefault(function () { return EMPTY_CONNECTOR; }); + +function useActiveWeb3ReactState() { + var injected = utils.useAtomValue(injectedAtom); + var url = utils.useAtomValue(urlAtom); + return injected[1].useIsActive() ? injected : url; +} +function useActiveWeb3ReactHooks() { + var _a = __read(useActiveWeb3ReactState(), 2), hooks = _a[1]; + return hooks; +} +function useActiveWeb3React$1() { + var _a = useActiveWeb3ReactHooks(), useProvider = _a.useProvider, useWeb3React = _a.useWeb3React; + return useWeb3React(useProvider()); +} + +var NetworkContextName = 'NETWORK'; +// 30 minutes, denominated in seconds +var DEFAULT_DEADLINE_FROM_NOW = 60 * 30; +var L2_DEADLINE_FROM_NOW = 60 * 5; +// transaction popup dismisal amounts +var DEFAULT_TXN_DISMISS_MS = 25000; +// used for rewards deadlines +JSBI__default["default"].BigInt(60 * 60 * 24 * 7); +JSBI__default["default"].BigInt(0); +// one basis JSBI.BigInt +var BIPS_BASE = JSBI__default["default"].BigInt(10000); +new sdkCore.Percent(JSBI__default["default"].BigInt(1), BIPS_BASE); +// used for warning states +var ALLOWED_PRICE_IMPACT_LOW = new sdkCore.Percent(JSBI__default["default"].BigInt(100), BIPS_BASE); // 1% +var ALLOWED_PRICE_IMPACT_MEDIUM = new sdkCore.Percent(JSBI__default["default"].BigInt(300), BIPS_BASE); // 3% +var ALLOWED_PRICE_IMPACT_HIGH = new sdkCore.Percent(JSBI__default["default"].BigInt(500), BIPS_BASE); // 5% +// if the price slippage exceeds this number, force the user to type 'confirm' to execute +var PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN = new sdkCore.Percent(JSBI__default["default"].BigInt(1000), BIPS_BASE); // 10% +// for non expert mode disable swaps above this +var BLOCKED_PRICE_IMPACT_NON_EXPERT = new sdkCore.Percent(JSBI__default["default"].BigInt(1500), BIPS_BASE); // 15% +var BETTER_TRADE_LESS_HOPS_THRESHOLD = new sdkCore.Percent(JSBI__default["default"].BigInt(50), BIPS_BASE); +var ZERO_PERCENT = new sdkCore.Percent('0'); +new sdkCore.Percent(JSBI__default["default"].BigInt(200), BIPS_BASE); +var ONE_HUNDRED_PERCENT = new sdkCore.Percent('1'); + +function useActiveWeb3React() { + if (process.env.REACT_APP_IS_WIDGET) { + return useActiveWeb3React$1(); + } + var interfaceContext = core$1.useWeb3React(); + var interfaceNetworkContext = core$1.useWeb3React(process.env.REACT_APP_IS_WIDGET ? undefined : NetworkContextName); + if (interfaceContext.active) { + return interfaceContext; + } + return interfaceNetworkContext; +} + +var useAppDispatch = function () { return reactRedux.useDispatch(); }; +var useAppSelector = reactRedux.useSelector; + +var DEFAULT_NETWORKS = [ + SupportedChainId.MAINNET, + SupportedChainId.ROPSTEN, + SupportedChainId.RINKEBY, + SupportedChainId.GOERLI, + SupportedChainId.KOVAN, +]; +function constructSameAddressMap(address, additionalNetworks) { + if (additionalNetworks === void 0) { additionalNetworks = []; } + return DEFAULT_NETWORKS.concat(additionalNetworks).reduce(function (memo, chainId) { + memo[chainId] = address; + return memo; + }, {}); +} + +var _a$e, _b$5, _c$4, _d$3, _e$2, _f$1, _g$1, _h$1; +var UNI_ADDRESS = constructSameAddressMap('0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984'); +var MULTICALL_ADDRESS = __assign(__assign({}, constructSameAddressMap('0x1F98415757620B543A52E61c46B32eB19261F984', [ + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.OPTIMISM, + SupportedChainId.POLYGON_MUMBAI, + SupportedChainId.POLYGON, +])), (_a$e = {}, _a$e[SupportedChainId.ARBITRUM_ONE] = '0xadF885960B47eA2CD9B55E6DAc6B42b7Cb2806dB', _a$e[SupportedChainId.ARBITRUM_RINKEBY] = '0xa501c031958F579dB7676fF1CE78AD305794d579', _a$e)); +var V2_FACTORY_ADDRESSES = constructSameAddressMap(v2Sdk.FACTORY_ADDRESS); +var V2_ROUTER_ADDRESS = constructSameAddressMap('0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D'); +var V3_ROUTER_ADDRESS = constructSameAddressMap('0xE592427A0AEce92De3Edee1F18E0157C05861564', [ + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON, + SupportedChainId.POLYGON_MUMBAI, +]); +var SWAP_ROUTER_ADDRESSES = constructSameAddressMap('0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45', [ + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON, + SupportedChainId.POLYGON_MUMBAI, +]); +/** + * The oldest V0 governance address + */ +constructSameAddressMap('0x5e4be8Bc9637f0EAA1A755019e06A68ce081D58F'); +/** + * The older V1 governance address + */ +(_b$5 = {}, + _b$5[SupportedChainId.MAINNET] = '0xC4e172459f1E7939D522503B81AFAaC1014CE6F6', + _b$5); +/** + * The latest governor bravo that is currently admin of timelock + */ +(_c$4 = {}, + _c$4[SupportedChainId.MAINNET] = '0x408ED6354d4973f66138C91495F2f2FCbd8724C3', + _c$4); +constructSameAddressMap('0x1a9C8182C09F50C8318d769245beA52c32BE35BC'); +(_d$3 = {}, + _d$3[SupportedChainId.MAINNET] = '0x090D4613473dEE047c3f2706764f49E0821D256e', + _d$3); +var ARGENT_WALLET_DETECTOR_ADDRESS = (_e$2 = {}, + _e$2[SupportedChainId.MAINNET] = '0xeca4B0bDBf7c55E9b7925919d03CbF8Dc82537E8', + _e$2); +var V3_CORE_FACTORY_ADDRESSES = constructSameAddressMap(v3Sdk.FACTORY_ADDRESS, [ + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON_MUMBAI, + SupportedChainId.POLYGON, +]); +var QUOTER_ADDRESSES = constructSameAddressMap('0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6', [ + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON_MUMBAI, + SupportedChainId.POLYGON, +]); +constructSameAddressMap('0xC36442b4a4522E871399CD717aBDD847Ab11FE88', [ + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON_MUMBAI, + SupportedChainId.POLYGON, +]); +var ENS_REGISTRAR_ADDRESSES = (_f$1 = {}, + _f$1[SupportedChainId.MAINNET] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', + _f$1[SupportedChainId.ROPSTEN] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', + _f$1[SupportedChainId.GOERLI] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', + _f$1[SupportedChainId.RINKEBY] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', + _f$1); +(_g$1 = {}, + _g$1[SupportedChainId.MAINNET] = '0x65770b5283117639760beA3F867b69b3697a91dd', + _g$1); +constructSameAddressMap('0xA5644E29708357803b5A882D272c41cC0dF92B34', [ + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON_MUMBAI, + SupportedChainId.POLYGON, +]); +(_h$1 = {}, + _h$1[SupportedChainId.ARBITRUM_ONE] = '0xbfd8137f7d1516D3ea5cA83523914859ec47F573', + _h$1[SupportedChainId.ARBITRUM_RINKEBY] = '0xbfd8137f7d1516D3ea5cA83523914859ec47F573', + _h$1); + +var _a$d, _b$4; +var AMPL = new sdkCore.Token(SupportedChainId.MAINNET, '0xD46bA6D942050d489DBd938a2C909A5d5039A161', 9, 'AMPL', 'Ampleforth'); +var DAI = new sdkCore.Token(SupportedChainId.MAINNET, '0x6B175474E89094C44Da98b954EedeAC495271d0F', 18, 'DAI', 'Dai Stablecoin'); +var DAI_ARBITRUM_ONE = new sdkCore.Token(SupportedChainId.ARBITRUM_ONE, '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', 18, 'DAI', 'Dai stable coin'); +var DAI_OPTIMISM = new sdkCore.Token(SupportedChainId.OPTIMISM, '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', 18, 'DAI', 'Dai stable coin'); +var USDC = new sdkCore.Token(SupportedChainId.MAINNET, '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', 6, 'USDC', 'USD//C'); +var USDC_ARBITRUM = new sdkCore.Token(SupportedChainId.ARBITRUM_ONE, '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8', 6, 'USDC', 'USD//C'); +var USDC_POLYGON = new sdkCore.Token(SupportedChainId.POLYGON, '0x2791bca1f2de4661ed88a30c99a7a9449aa84174', 6, 'USDC', 'USD//C'); +var DAI_POLYGON = new sdkCore.Token(SupportedChainId.POLYGON, '0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063', 18, 'DAI', 'Dai Stablecoin'); +var USDT_POLYGON = new sdkCore.Token(SupportedChainId.POLYGON, '0xc2132d05d31c914a87c6611c10748aeb04b58e8f', 6, 'USDT', 'Tether USD'); +var WBTC_POLYGON = new sdkCore.Token(SupportedChainId.POLYGON, '0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6', 8, 'WBTC', 'Wrapped BTC'); +var USDC_OPTIMISM = new sdkCore.Token(SupportedChainId.OPTIMISM, '0x7F5c764cBc14f9669B88837ca1490cCa17c31607', 6, 'USDC', 'USD//C'); +var USDT = new sdkCore.Token(SupportedChainId.MAINNET, '0xdAC17F958D2ee523a2206206994597C13D831ec7', 6, 'USDT', 'Tether USD'); +var USDT_ARBITRUM_ONE = new sdkCore.Token(SupportedChainId.ARBITRUM_ONE, '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9', 6, 'USDT', 'Tether USD'); +var USDT_OPTIMISM = new sdkCore.Token(SupportedChainId.OPTIMISM, '0x94b008aA00579c1307B0EF2c499aD98a8ce58e58', 6, 'USDT', 'Tether USD'); +var WBTC = new sdkCore.Token(SupportedChainId.MAINNET, '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', 8, 'WBTC', 'Wrapped BTC'); +var WBTC_ARBITRUM_ONE = new sdkCore.Token(SupportedChainId.ARBITRUM_ONE, '0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f', 8, 'WBTC', 'Wrapped BTC'); +var WBTC_OPTIMISM = new sdkCore.Token(SupportedChainId.OPTIMISM, '0x68f180fcCe6836688e9084f035309E29Bf0A2095', 8, 'WBTC', 'Wrapped BTC'); +var FEI = new sdkCore.Token(SupportedChainId.MAINNET, '0x956F47F50A910163D8BF957Cf5846D573E7f87CA', 18, 'FEI', 'Fei USD'); +var TRIBE = new sdkCore.Token(SupportedChainId.MAINNET, '0xc7283b66Eb1EB5FB86327f08e1B5816b0720212B', 18, 'TRIBE', 'Tribe'); +var FRAX = new sdkCore.Token(SupportedChainId.MAINNET, '0x853d955aCEf822Db058eb8505911ED77F175b99e', 18, 'FRAX', 'Frax'); +var FXS = new sdkCore.Token(SupportedChainId.MAINNET, '0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0', 18, 'FXS', 'Frax Share'); +var renBTC = new sdkCore.Token(SupportedChainId.MAINNET, '0xEB4C2781e4ebA804CE9a9803C67d0893436bB27D', 8, 'renBTC', 'renBTC'); +var ETH2X_FLI = new sdkCore.Token(SupportedChainId.MAINNET, '0xAa6E8127831c9DE45ae56bB1b0d4D4Da6e5665BD', 18, 'ETH2x-FLI', 'ETH 2x Flexible Leverage Index'); +var sETH2 = new sdkCore.Token(SupportedChainId.MAINNET, '0xFe2e637202056d30016725477c5da089Ab0A043A', 18, 'sETH2', 'StakeWise Staked ETH2'); +var rETH2 = new sdkCore.Token(SupportedChainId.MAINNET, '0x20BC832ca081b91433ff6c17f85701B6e92486c5', 18, 'rETH2', 'StakeWise Reward ETH2'); +var SWISE = new sdkCore.Token(SupportedChainId.MAINNET, '0x48C3399719B582dD63eB5AADf12A40B4C3f52FA2', 18, 'SWISE', 'StakeWise'); +var WETH_POLYGON_MUMBAI = new sdkCore.Token(SupportedChainId.POLYGON_MUMBAI, '0xa6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa', 18, 'WETH', 'Wrapped Ether'); +var WETH_POLYGON = new sdkCore.Token(SupportedChainId.POLYGON, '0x7ceb23fd6bc0add59e62ac25578270cff1b9f619', 18, 'WETH', 'Wrapped Ether'); +var UNI = (_a$d = {}, + _a$d[SupportedChainId.MAINNET] = new sdkCore.Token(SupportedChainId.MAINNET, UNI_ADDRESS[1], 18, 'UNI', 'Uniswap'), + _a$d[SupportedChainId.RINKEBY] = new sdkCore.Token(SupportedChainId.RINKEBY, UNI_ADDRESS[4], 18, 'UNI', 'Uniswap'), + _a$d[SupportedChainId.ROPSTEN] = new sdkCore.Token(SupportedChainId.ROPSTEN, UNI_ADDRESS[3], 18, 'UNI', 'Uniswap'), + _a$d[SupportedChainId.GOERLI] = new sdkCore.Token(SupportedChainId.GOERLI, UNI_ADDRESS[5], 18, 'UNI', 'Uniswap'), + _a$d[SupportedChainId.KOVAN] = new sdkCore.Token(SupportedChainId.KOVAN, UNI_ADDRESS[42], 18, 'UNI', 'Uniswap'), + _a$d); +var WRAPPED_NATIVE_CURRENCY = __assign(__assign({}, sdkCore.WETH9), (_b$4 = {}, _b$4[SupportedChainId.OPTIMISM] = new sdkCore.Token(SupportedChainId.OPTIMISM, '0x4200000000000000000000000000000000000006', 18, 'WETH', 'Wrapped Ether'), _b$4[SupportedChainId.OPTIMISTIC_KOVAN] = new sdkCore.Token(SupportedChainId.OPTIMISTIC_KOVAN, '0x4200000000000000000000000000000000000006', 18, 'WETH', 'Wrapped Ether'), _b$4[SupportedChainId.ARBITRUM_ONE] = new sdkCore.Token(SupportedChainId.ARBITRUM_ONE, '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1', 18, 'WETH', 'Wrapped Ether'), _b$4[SupportedChainId.ARBITRUM_RINKEBY] = new sdkCore.Token(SupportedChainId.ARBITRUM_RINKEBY, '0xB47e6A5f8b33b3F17603C83a0535A9dcD7E32681', 18, 'WETH', 'Wrapped Ether'), _b$4[SupportedChainId.POLYGON] = new sdkCore.Token(SupportedChainId.POLYGON, '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270', 18, 'WMATIC', 'Wrapped MATIC'), _b$4[SupportedChainId.POLYGON_MUMBAI] = new sdkCore.Token(SupportedChainId.POLYGON_MUMBAI, '0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889', 18, 'WMATIC', 'Wrapped MATIC'), _b$4)); +function isMatic(chainId) { + return chainId === SupportedChainId.POLYGON_MUMBAI || chainId === SupportedChainId.POLYGON; +} +var MaticNativeCurrency = /** @class */ (function (_super) { + __extends(MaticNativeCurrency, _super); + function MaticNativeCurrency(chainId) { + var _this = this; + if (!isMatic(chainId)) + throw new Error('Not matic'); + _this = _super.call(this, chainId, 18, 'MATIC', 'Polygon Matic') || this; + return _this; + } + MaticNativeCurrency.prototype.equals = function (other) { + return other.isNative && other.chainId === this.chainId; + }; + Object.defineProperty(MaticNativeCurrency.prototype, "wrapped", { + get: function () { + if (!isMatic(this.chainId)) + throw new Error('Not matic'); + return WRAPPED_NATIVE_CURRENCY[this.chainId]; + }, + enumerable: false, + configurable: true + }); + return MaticNativeCurrency; +}(sdkCore.NativeCurrency)); +var ExtendedEther = /** @class */ (function (_super) { + __extends(ExtendedEther, _super); + function ExtendedEther() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(ExtendedEther.prototype, "wrapped", { + get: function () { + if (this.chainId in WRAPPED_NATIVE_CURRENCY) + return WRAPPED_NATIVE_CURRENCY[this.chainId]; + throw new Error('Unsupported chain ID'); + }, + enumerable: false, + configurable: true + }); + ExtendedEther.onChain = function (chainId) { + var _a; + return (_a = this._cachedExtendedEther[chainId]) !== null && _a !== void 0 ? _a : (this._cachedExtendedEther[chainId] = new ExtendedEther(chainId)); + }; + ExtendedEther._cachedExtendedEther = {}; + return ExtendedEther; +}(sdkCore.Ether)); +var cachedNativeCurrency = {}; +function nativeOnChain(chainId) { + var _a; + return ((_a = cachedNativeCurrency[chainId]) !== null && _a !== void 0 ? _a : (cachedNativeCurrency[chainId] = isMatic(chainId) + ? new MaticNativeCurrency(chainId) + : ExtendedEther.onChain(chainId))); +} + +var _a$c, _b$3, _c$3, _d$2, _e$1, _f, _g, _h; +var WRAPPED_NATIVE_CURRENCIES_ONLY = Object.fromEntries(Object.entries(WRAPPED_NATIVE_CURRENCY).map(function (_a) { + var _b = __read(_a, 2), key = _b[0], value = _b[1]; + return [key, [value]]; +})); +// used to construct intermediary pairs for trading +var BASES_TO_CHECK_TRADES_AGAINST = __assign(__assign({}, WRAPPED_NATIVE_CURRENCIES_ONLY), (_a$c = {}, _a$c[SupportedChainId.MAINNET] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.MAINNET]), false), [DAI, USDC, USDT, WBTC], false), _a$c[SupportedChainId.OPTIMISM] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.OPTIMISM]), false), [ + DAI_OPTIMISM, + USDT_OPTIMISM, + WBTC_OPTIMISM, +], false), _a$c[SupportedChainId.ARBITRUM_ONE] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.ARBITRUM_ONE]), false), [ + DAI_ARBITRUM_ONE, + USDT_ARBITRUM_ONE, + WBTC_ARBITRUM_ONE, +], false), _a$c[SupportedChainId.POLYGON] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.POLYGON]), false), [ + DAI_POLYGON, + USDC_POLYGON, + USDT_POLYGON, + WETH_POLYGON, +], false), _a$c)); +var ADDITIONAL_BASES = (_b$3 = {}, + _b$3[SupportedChainId.MAINNET] = (_c$3 = { + '0xF16E4d813f4DcfDe4c5b44f305c908742De84eF0': [ETH2X_FLI] + }, + _c$3[rETH2.address] = [sETH2], + _c$3[SWISE.address] = [sETH2], + _c$3[FEI.address] = [TRIBE], + _c$3[TRIBE.address] = [FEI], + _c$3[FRAX.address] = [FXS], + _c$3[FXS.address] = [FRAX], + _c$3[WBTC.address] = [renBTC], + _c$3[renBTC.address] = [WBTC], + _c$3), + _b$3); +/** + * Some tokens can only be swapped via certain pairs, so we override the list of bases that are considered for these + * tokens. + */ +var CUSTOM_BASES = (_d$2 = {}, + _d$2[SupportedChainId.MAINNET] = (_e$1 = {}, + _e$1[AMPL.address] = [DAI, WRAPPED_NATIVE_CURRENCY[SupportedChainId.MAINNET]], + _e$1), + _d$2); +/** + * Shows up in the currency select for swap and add liquidity + */ +var COMMON_BASES = (_f = {}, + _f[SupportedChainId.MAINNET] = [ + nativeOnChain(SupportedChainId.MAINNET), + DAI, + USDC, + USDT, + WBTC, + WRAPPED_NATIVE_CURRENCY[SupportedChainId.MAINNET], + ], + _f[SupportedChainId.ROPSTEN] = [ + nativeOnChain(SupportedChainId.ROPSTEN), + WRAPPED_NATIVE_CURRENCY[SupportedChainId.ROPSTEN], + ], + _f[SupportedChainId.RINKEBY] = [ + nativeOnChain(SupportedChainId.RINKEBY), + WRAPPED_NATIVE_CURRENCY[SupportedChainId.RINKEBY], + ], + _f[SupportedChainId.GOERLI] = [nativeOnChain(SupportedChainId.GOERLI), WRAPPED_NATIVE_CURRENCY[SupportedChainId.GOERLI]], + _f[SupportedChainId.KOVAN] = [nativeOnChain(SupportedChainId.KOVAN), WRAPPED_NATIVE_CURRENCY[SupportedChainId.KOVAN]], + _f[SupportedChainId.ARBITRUM_ONE] = [ + nativeOnChain(SupportedChainId.ARBITRUM_ONE), + DAI_ARBITRUM_ONE, + USDC_ARBITRUM, + USDT_ARBITRUM_ONE, + WBTC_ARBITRUM_ONE, + WRAPPED_NATIVE_CURRENCY[SupportedChainId.ARBITRUM_ONE], + ], + _f[SupportedChainId.ARBITRUM_RINKEBY] = [ + nativeOnChain(SupportedChainId.ARBITRUM_RINKEBY), + WRAPPED_NATIVE_CURRENCY[SupportedChainId.ARBITRUM_RINKEBY], + ], + _f[SupportedChainId.OPTIMISM] = [ + nativeOnChain(SupportedChainId.OPTIMISM), + DAI_OPTIMISM, + USDC_OPTIMISM, + USDT_OPTIMISM, + WBTC_OPTIMISM, + ], + _f[SupportedChainId.OPTIMISTIC_KOVAN] = [nativeOnChain(SupportedChainId.OPTIMISTIC_KOVAN)], + _f[SupportedChainId.POLYGON] = [ + nativeOnChain(SupportedChainId.POLYGON), + WETH_POLYGON, + USDC_POLYGON, + DAI_POLYGON, + USDT_POLYGON, + WBTC_POLYGON, + ], + _f[SupportedChainId.POLYGON_MUMBAI] = [ + nativeOnChain(SupportedChainId.POLYGON_MUMBAI), + WRAPPED_NATIVE_CURRENCY[SupportedChainId.POLYGON_MUMBAI], + WETH_POLYGON_MUMBAI, + ], + _f); +// used to construct the list of all pairs we consider by default in the frontend +__assign(__assign({}, WRAPPED_NATIVE_CURRENCIES_ONLY), (_g = {}, _g[SupportedChainId.MAINNET] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.MAINNET]), false), [DAI, USDC, USDT, WBTC], false), _g)); +(_h = {}, + _h[SupportedChainId.MAINNET] = [ + [ + new sdkCore.Token(SupportedChainId.MAINNET, '0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643', 8, 'cDAI', 'Compound Dai'), + new sdkCore.Token(SupportedChainId.MAINNET, '0x39AA39c021dfbaE8faC545936693aC917d5E7563', 8, 'cUSDC', 'Compound USD Coin'), + ], + [USDC, USDT], + [DAI, USDT], + ], + _h); + +var abi$5 = [ + { + inputs: [ + { + internalType: "address", + name: "_rewardsDistribution", + type: "address" + }, + { + internalType: "address", + name: "_rewardsToken", + type: "address" + }, + { + internalType: "address", + name: "_stakingToken", + type: "address" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint256", + name: "reward", + type: "uint256" + } + ], + name: "RewardAdded", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "user", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "reward", + type: "uint256" + } + ], + name: "RewardPaid", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "user", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "Staked", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "user", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "Withdrawn", + type: "event" + }, + { + constant: true, + inputs: [ + { + internalType: "address", + name: "account", + type: "address" + } + ], + name: "balanceOf", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "address", + name: "account", + type: "address" + } + ], + name: "earned", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + ], + name: "exit", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + ], + name: "getReward", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "getRewardForDuration", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "lastTimeRewardApplicable", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "lastUpdateTime", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "uint256", + name: "reward", + type: "uint256" + } + ], + name: "notifyRewardAmount", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "periodFinish", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "rewardPerToken", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "rewardPerTokenStored", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "rewardRate", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "rewards", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "rewardsDistribution", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "rewardsDuration", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "rewardsToken", + outputs: [ + { + internalType: "contract IERC20", + name: "", + type: "address" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "stake", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + }, + { + internalType: "uint8", + name: "v", + type: "uint8" + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32" + } + ], + name: "stakeWithPermit", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "stakingToken", + outputs: [ + { + internalType: "contract IERC20", + name: "", + type: "address" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "totalSupply", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "userRewardPerTokenPaid", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "withdraw", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + } +]; + +var abi$4 = [ + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "owner", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "spender", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "Approval", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "sender", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "amount0", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "amount1", + type: "uint256" + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address" + } + ], + name: "Burn", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "sender", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "amount0", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "amount1", + type: "uint256" + } + ], + name: "Mint", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "sender", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "amount0In", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "amount1In", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "amount0Out", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "amount1Out", + type: "uint256" + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address" + } + ], + name: "Swap", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint112", + name: "reserve0", + type: "uint112" + }, + { + indexed: false, + internalType: "uint112", + name: "reserve1", + type: "uint112" + } + ], + name: "Sync", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "from", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "Transfer", + type: "event" + }, + { + constant: true, + inputs: [ + ], + name: "DOMAIN_SEPARATOR", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "MINIMUM_LIQUIDITY", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "pure", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "PERMIT_TYPEHASH", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + payable: false, + stateMutability: "pure", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "spender", + type: "address" + } + ], + name: "allowance", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "approve", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + } + ], + name: "balanceOf", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "address", + name: "to", + type: "address" + } + ], + name: "burn", + outputs: [ + { + internalType: "uint256", + name: "amount0", + type: "uint256" + }, + { + internalType: "uint256", + name: "amount1", + type: "uint256" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "decimals", + outputs: [ + { + internalType: "uint8", + name: "", + type: "uint8" + } + ], + payable: false, + stateMutability: "pure", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "factory", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "getReserves", + outputs: [ + { + internalType: "uint112", + name: "reserve0", + type: "uint112" + }, + { + internalType: "uint112", + name: "reserve1", + type: "uint112" + }, + { + internalType: "uint32", + name: "blockTimestampLast", + type: "uint32" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "address", + name: "", + type: "address" + }, + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "initialize", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "kLast", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "address", + name: "to", + type: "address" + } + ], + name: "mint", + outputs: [ + { + internalType: "uint256", + name: "liquidity", + type: "uint256" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "name", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + payable: false, + stateMutability: "pure", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + } + ], + name: "nonces", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + }, + { + internalType: "uint8", + name: "v", + type: "uint8" + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32" + } + ], + name: "permit", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "price0CumulativeLast", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "price1CumulativeLast", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "address", + name: "to", + type: "address" + } + ], + name: "skim", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "uint256", + name: "amount0Out", + type: "uint256" + }, + { + internalType: "uint256", + name: "amount1Out", + type: "uint256" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "swap", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "symbol", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + payable: false, + stateMutability: "pure", + type: "function" + }, + { + constant: false, + inputs: [ + ], + name: "sync", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "token0", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "token1", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "totalSupply", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "transfer", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "address", + name: "from", + type: "address" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "transferFrom", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + } +]; + +var abi$3 = [ + { + inputs: [ + ], + name: "WETH", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "tokenA", + type: "address" + }, + { + internalType: "address", + name: "tokenB", + type: "address" + }, + { + internalType: "uint256", + name: "amountADesired", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountBDesired", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountAMin", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountBMin", + type: "uint256" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "addLiquidity", + outputs: [ + { + internalType: "uint256", + name: "amountA", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountB", + type: "uint256" + }, + { + internalType: "uint256", + name: "liquidity", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address" + }, + { + internalType: "uint256", + name: "amountTokenDesired", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountTokenMin", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountETHMin", + type: "uint256" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "addLiquidityETH", + outputs: [ + { + internalType: "uint256", + name: "amountToken", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountETH", + type: "uint256" + }, + { + internalType: "uint256", + name: "liquidity", + type: "uint256" + } + ], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + ], + name: "factory", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountOut", + type: "uint256" + }, + { + internalType: "uint256", + name: "reserveIn", + type: "uint256" + }, + { + internalType: "uint256", + name: "reserveOut", + type: "uint256" + } + ], + name: "getAmountIn", + outputs: [ + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + }, + { + internalType: "uint256", + name: "reserveIn", + type: "uint256" + }, + { + internalType: "uint256", + name: "reserveOut", + type: "uint256" + } + ], + name: "getAmountOut", + outputs: [ + { + internalType: "uint256", + name: "amountOut", + type: "uint256" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountOut", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + } + ], + name: "getAmountsIn", + outputs: [ + { + internalType: "uint256[]", + name: "amounts", + type: "uint256[]" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + } + ], + name: "getAmountsOut", + outputs: [ + { + internalType: "uint256[]", + name: "amounts", + type: "uint256[]" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountA", + type: "uint256" + }, + { + internalType: "uint256", + name: "reserveA", + type: "uint256" + }, + { + internalType: "uint256", + name: "reserveB", + type: "uint256" + } + ], + name: "quote", + outputs: [ + { + internalType: "uint256", + name: "amountB", + type: "uint256" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "tokenA", + type: "address" + }, + { + internalType: "address", + name: "tokenB", + type: "address" + }, + { + internalType: "uint256", + name: "liquidity", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountAMin", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountBMin", + type: "uint256" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "removeLiquidity", + outputs: [ + { + internalType: "uint256", + name: "amountA", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountB", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address" + }, + { + internalType: "uint256", + name: "liquidity", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountTokenMin", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountETHMin", + type: "uint256" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "removeLiquidityETH", + outputs: [ + { + internalType: "uint256", + name: "amountToken", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountETH", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address" + }, + { + internalType: "uint256", + name: "liquidity", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountTokenMin", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountETHMin", + type: "uint256" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "removeLiquidityETHSupportingFeeOnTransferTokens", + outputs: [ + { + internalType: "uint256", + name: "amountETH", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address" + }, + { + internalType: "uint256", + name: "liquidity", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountTokenMin", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountETHMin", + type: "uint256" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + }, + { + internalType: "bool", + name: "approveMax", + type: "bool" + }, + { + internalType: "uint8", + name: "v", + type: "uint8" + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32" + } + ], + name: "removeLiquidityETHWithPermit", + outputs: [ + { + internalType: "uint256", + name: "amountToken", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountETH", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address" + }, + { + internalType: "uint256", + name: "liquidity", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountTokenMin", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountETHMin", + type: "uint256" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + }, + { + internalType: "bool", + name: "approveMax", + type: "bool" + }, + { + internalType: "uint8", + name: "v", + type: "uint8" + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32" + } + ], + name: "removeLiquidityETHWithPermitSupportingFeeOnTransferTokens", + outputs: [ + { + internalType: "uint256", + name: "amountETH", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "tokenA", + type: "address" + }, + { + internalType: "address", + name: "tokenB", + type: "address" + }, + { + internalType: "uint256", + name: "liquidity", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountAMin", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountBMin", + type: "uint256" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + }, + { + internalType: "bool", + name: "approveMax", + type: "bool" + }, + { + internalType: "uint8", + name: "v", + type: "uint8" + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32" + } + ], + name: "removeLiquidityWithPermit", + outputs: [ + { + internalType: "uint256", + name: "amountA", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountB", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountOut", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "swapETHForExactTokens", + outputs: [ + { + internalType: "uint256[]", + name: "amounts", + type: "uint256[]" + } + ], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountOutMin", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "swapExactETHForTokens", + outputs: [ + { + internalType: "uint256[]", + name: "amounts", + type: "uint256[]" + } + ], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountOutMin", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "swapExactETHForTokensSupportingFeeOnTransferTokens", + outputs: [ + ], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountOutMin", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "swapExactTokensForETH", + outputs: [ + { + internalType: "uint256[]", + name: "amounts", + type: "uint256[]" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountOutMin", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "swapExactTokensForETHSupportingFeeOnTransferTokens", + outputs: [ + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountOutMin", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "swapExactTokensForTokens", + outputs: [ + { + internalType: "uint256[]", + name: "amounts", + type: "uint256[]" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountOutMin", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "swapExactTokensForTokensSupportingFeeOnTransferTokens", + outputs: [ + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountOut", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountInMax", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "swapTokensForExactETH", + outputs: [ + { + internalType: "uint256[]", + name: "amounts", + type: "uint256[]" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountOut", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountInMax", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "swapTokensForExactTokens", + outputs: [ + { + internalType: "uint256[]", + name: "amounts", + type: "uint256[]" + } + ], + stateMutability: "nonpayable", + type: "function" + } +]; + +var abi$2 = [ + { + inputs: [ + { + internalType: "address", + name: "_factory", + type: "address" + }, + { + internalType: "address", + name: "_WETH9", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + inputs: [ + ], + name: "WETH9", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + ], + name: "factory", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes", + name: "path", + type: "bytes" + }, + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + } + ], + name: "quoteExactInput", + outputs: [ + { + internalType: "uint256", + name: "amountOut", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "tokenIn", + type: "address" + }, + { + internalType: "address", + name: "tokenOut", + type: "address" + }, + { + internalType: "uint24", + name: "fee", + type: "uint24" + }, + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + }, + { + internalType: "uint160", + name: "sqrtPriceLimitX96", + type: "uint160" + } + ], + name: "quoteExactInputSingle", + outputs: [ + { + internalType: "uint256", + name: "amountOut", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes", + name: "path", + type: "bytes" + }, + { + internalType: "uint256", + name: "amountOut", + type: "uint256" + } + ], + name: "quoteExactOutput", + outputs: [ + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "tokenIn", + type: "address" + }, + { + internalType: "address", + name: "tokenOut", + type: "address" + }, + { + internalType: "uint24", + name: "fee", + type: "uint24" + }, + { + internalType: "uint256", + name: "amountOut", + type: "uint256" + }, + { + internalType: "uint160", + name: "sqrtPriceLimitX96", + type: "uint160" + } + ], + name: "quoteExactOutputSingle", + outputs: [ + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "int256", + name: "amount0Delta", + type: "int256" + }, + { + internalType: "int256", + name: "amount1Delta", + type: "int256" + }, + { + internalType: "bytes", + name: "path", + type: "bytes" + } + ], + name: "uniswapV3SwapCallback", + outputs: [ + ], + stateMutability: "view", + type: "function" + } +]; + +var abi$1 = [ + { + inputs: [ + ], + name: "getCurrentBlockTimestamp", + outputs: [ + { + internalType: "uint256", + name: "timestamp", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "addr", + type: "address" + } + ], + name: "getEthBalance", + outputs: [ + { + internalType: "uint256", + name: "balance", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "uint256", + name: "gasLimit", + type: "uint256" + }, + { + internalType: "bytes", + name: "callData", + type: "bytes" + } + ], + internalType: "struct UniswapInterfaceMulticall.Call[]", + name: "calls", + type: "tuple[]" + } + ], + name: "multicall", + outputs: [ + { + internalType: "uint256", + name: "blockNumber", + type: "uint256" + }, + { + components: [ + { + internalType: "bool", + name: "success", + type: "bool" + }, + { + internalType: "uint256", + name: "gasUsed", + type: "uint256" + }, + { + internalType: "bytes", + name: "returnData", + type: "bytes" + } + ], + internalType: "struct UniswapInterfaceMulticall.Result[]", + name: "returnData", + type: "tuple[]" + } + ], + stateMutability: "nonpayable", + type: "function" + } +]; + +var ARGENT_WALLET_DETECTOR_ABI = [ + { + inputs: [ + { + internalType: "bytes32[]", + name: "_codes", + type: "bytes32[]" + }, + { + internalType: "address[]", + name: "_implementations", + type: "address[]" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "code", + type: "bytes32" + } + ], + name: "CodeAdded", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "implementation", + type: "address" + } + ], + name: "ImplementationAdded", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "_newOwner", + type: "address" + } + ], + name: "OwnerChanged", + type: "event" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + name: "acceptedCodes", + outputs: [ + { + internalType: "bool", + name: "exists", + type: "bool" + }, + { + internalType: "uint128", + name: "index", + type: "uint128" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "acceptedImplementations", + outputs: [ + { + internalType: "bool", + name: "exists", + type: "bool" + }, + { + internalType: "uint128", + name: "index", + type: "uint128" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "_code", + type: "bytes32" + } + ], + name: "addCode", + outputs: [ + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "_argentWallet", + type: "address" + } + ], + name: "addCodeAndImplementationFromWallet", + outputs: [ + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "_impl", + type: "address" + } + ], + name: "addImplementation", + outputs: [ + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "_newOwner", + type: "address" + } + ], + name: "changeOwner", + outputs: [ + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + ], + name: "getCodes", + outputs: [ + { + internalType: "bytes32[]", + name: "", + type: "bytes32[]" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + ], + name: "getImplementations", + outputs: [ + { + internalType: "address[]", + name: "", + type: "address[]" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "_wallet", + type: "address" + } + ], + name: "isArgentWallet", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + ], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + } +]; + +var EIP_2612 = [ + { + constant: true, + inputs: [ + { + name: "owner", + type: "address" + } + ], + name: "nonces", + outputs: [ + { + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "DOMAIN_SEPARATOR", + outputs: [ + { + name: "", + type: "bytes32" + } + ], + payable: false, + stateMutability: "view", + type: "function" + } +]; + +var ENS_PUBLIC_RESOLVER_ABI = [ + { + inputs: [ + { + internalType: "contract ENS", + name: "_ens", + type: "address" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: true, + internalType: "uint256", + name: "contentType", + type: "uint256" + } + ], + name: "ABIChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "address", + name: "a", + type: "address" + } + ], + name: "AddrChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "uint256", + name: "coinType", + type: "uint256" + }, + { + indexed: false, + internalType: "bytes", + name: "newAddress", + type: "bytes" + } + ], + name: "AddressChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: true, + internalType: "address", + name: "owner", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "target", + type: "address" + }, + { + indexed: false, + internalType: "bool", + name: "isAuthorised", + type: "bool" + } + ], + name: "AuthorisationChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "bytes", + name: "hash", + type: "bytes" + } + ], + name: "ContenthashChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "bytes", + name: "name", + type: "bytes" + }, + { + indexed: false, + internalType: "uint16", + name: "resource", + type: "uint16" + }, + { + indexed: false, + internalType: "bytes", + name: "record", + type: "bytes" + } + ], + name: "DNSRecordChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "bytes", + name: "name", + type: "bytes" + }, + { + indexed: false, + internalType: "uint16", + name: "resource", + type: "uint16" + } + ], + name: "DNSRecordDeleted", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "DNSZoneCleared", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: true, + internalType: "bytes4", + name: "interfaceID", + type: "bytes4" + }, + { + indexed: false, + internalType: "address", + name: "implementer", + type: "address" + } + ], + name: "InterfaceChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "string", + name: "name", + type: "string" + } + ], + name: "NameChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "bytes32", + name: "x", + type: "bytes32" + }, + { + indexed: false, + internalType: "bytes32", + name: "y", + type: "bytes32" + } + ], + name: "PubkeyChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: true, + internalType: "string", + name: "indexedKey", + type: "string" + }, + { + indexed: false, + internalType: "string", + name: "key", + type: "string" + } + ], + name: "TextChanged", + type: "event" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "uint256", + name: "contentTypes", + type: "uint256" + } + ], + name: "ABI", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + }, + { + internalType: "bytes", + name: "", + type: "bytes" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "addr", + outputs: [ + { + internalType: "address payable", + name: "", + type: "address" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + }, + { + internalType: "address", + name: "", + type: "address" + }, + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "authorisations", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "clearDNSZone", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "contenthash", + outputs: [ + { + internalType: "bytes", + name: "", + type: "bytes" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "name", + type: "bytes32" + }, + { + internalType: "uint16", + name: "resource", + type: "uint16" + } + ], + name: "dnsRecord", + outputs: [ + { + internalType: "bytes", + name: "", + type: "bytes" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "name", + type: "bytes32" + } + ], + name: "hasDNSRecords", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "bytes4", + name: "interfaceID", + type: "bytes4" + } + ], + name: "interfaceImplementer", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "name", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "pubkey", + outputs: [ + { + internalType: "bytes32", + name: "x", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "y", + type: "bytes32" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "uint256", + name: "contentType", + type: "uint256" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "setABI", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "uint256", + name: "coinType", + type: "uint256" + }, + { + internalType: "bytes", + name: "a", + type: "bytes" + } + ], + name: "setAddr", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "address", + name: "a", + type: "address" + } + ], + name: "setAddr", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "bool", + name: "isAuthorised", + type: "bool" + } + ], + name: "setAuthorisation", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "bytes", + name: "hash", + type: "bytes" + } + ], + name: "setContenthash", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "setDNSRecords", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "bytes4", + name: "interfaceID", + type: "bytes4" + }, + { + internalType: "address", + name: "implementer", + type: "address" + } + ], + name: "setInterface", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "string", + name: "name", + type: "string" + } + ], + name: "setName", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "x", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "y", + type: "bytes32" + } + ], + name: "setPubkey", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "string", + name: "key", + type: "string" + }, + { + internalType: "string", + name: "value", + type: "string" + } + ], + name: "setText", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes4", + name: "interfaceID", + type: "bytes4" + } + ], + name: "supportsInterface", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "pure", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "string", + name: "key", + type: "string" + } + ], + name: "text", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + payable: false, + stateMutability: "view", + type: "function" + } +]; + +var ENS_ABI = [ + { + inputs: [ + { + internalType: "contract ENS", + name: "_old", + type: "address" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "owner", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "operator", + type: "address" + }, + { + indexed: false, + internalType: "bool", + name: "approved", + type: "bool" + } + ], + name: "ApprovalForAll", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: true, + internalType: "bytes32", + name: "label", + type: "bytes32" + }, + { + indexed: false, + internalType: "address", + name: "owner", + type: "address" + } + ], + name: "NewOwner", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "address", + name: "resolver", + type: "address" + } + ], + name: "NewResolver", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "uint64", + name: "ttl", + type: "uint64" + } + ], + name: "NewTTL", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "address", + name: "owner", + type: "address" + } + ], + name: "Transfer", + type: "event" + }, + { + constant: true, + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "operator", + type: "address" + } + ], + name: "isApprovedForAll", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "old", + outputs: [ + { + internalType: "contract ENS", + name: "", + type: "address" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "recordExists", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "resolver", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "address", + name: "operator", + type: "address" + }, + { + internalType: "bool", + name: "approved", + type: "bool" + } + ], + name: "setApprovalForAll", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "address", + name: "owner", + type: "address" + } + ], + name: "setOwner", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "resolver", + type: "address" + }, + { + internalType: "uint64", + name: "ttl", + type: "uint64" + } + ], + name: "setRecord", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "address", + name: "resolver", + type: "address" + } + ], + name: "setResolver", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "label", + type: "bytes32" + }, + { + internalType: "address", + name: "owner", + type: "address" + } + ], + name: "setSubnodeOwner", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "label", + type: "bytes32" + }, + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "resolver", + type: "address" + }, + { + internalType: "uint64", + name: "ttl", + type: "uint64" + } + ], + name: "setSubnodeRecord", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "uint64", + name: "ttl", + type: "uint64" + } + ], + name: "setTTL", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "ttl", + outputs: [ + { + internalType: "uint64", + name: "", + type: "uint64" + } + ], + payable: false, + stateMutability: "view", + type: "function" + } +]; + +var ERC20ABI = [ + { + constant: true, + inputs: [ + ], + name: "name", + outputs: [ + { + name: "", + type: "string" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + name: "_spender", + type: "address" + }, + { + name: "_value", + type: "uint256" + } + ], + name: "approve", + outputs: [ + { + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "totalSupply", + outputs: [ + { + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + name: "_from", + type: "address" + }, + { + name: "_to", + type: "address" + }, + { + name: "_value", + type: "uint256" + } + ], + name: "transferFrom", + outputs: [ + { + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "decimals", + outputs: [ + { + name: "", + type: "uint8" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + name: "_owner", + type: "address" + } + ], + name: "balanceOf", + outputs: [ + { + name: "balance", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "symbol", + outputs: [ + { + name: "", + type: "string" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + name: "_to", + type: "address" + }, + { + name: "_value", + type: "uint256" + } + ], + name: "transfer", + outputs: [ + { + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + { + name: "_owner", + type: "address" + }, + { + name: "_spender", + type: "address" + } + ], + name: "allowance", + outputs: [ + { + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + payable: true, + stateMutability: "payable", + type: "fallback" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: "owner", + type: "address" + }, + { + indexed: true, + name: "spender", + type: "address" + }, + { + indexed: false, + name: "value", + type: "uint256" + } + ], + name: "Approval", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: "from", + type: "address" + }, + { + indexed: true, + name: "to", + type: "address" + }, + { + indexed: false, + name: "value", + type: "uint256" + } + ], + name: "Transfer", + type: "event" + } +]; + +var ERC20_BYTES32_ABI = [ + { + constant: true, + inputs: [ + ], + name: "name", + outputs: [ + { + name: "", + type: "bytes32" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "symbol", + outputs: [ + { + name: "", + type: "bytes32" + } + ], + payable: false, + stateMutability: "view", + type: "function" + } +]; + +var WETH_ABI = [ + { + constant: true, + inputs: [ + ], + name: "name", + outputs: [ + { + name: "", + type: "string" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + name: "guy", + type: "address" + }, + { + name: "wad", + type: "uint256" + } + ], + name: "approve", + outputs: [ + { + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "totalSupply", + outputs: [ + { + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + name: "src", + type: "address" + }, + { + name: "dst", + type: "address" + }, + { + name: "wad", + type: "uint256" + } + ], + name: "transferFrom", + outputs: [ + { + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + name: "wad", + type: "uint256" + } + ], + name: "withdraw", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "decimals", + outputs: [ + { + name: "", + type: "uint8" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + name: "", + type: "address" + } + ], + name: "balanceOf", + outputs: [ + { + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "symbol", + outputs: [ + { + name: "", + type: "string" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + name: "dst", + type: "address" + }, + { + name: "wad", + type: "uint256" + } + ], + name: "transfer", + outputs: [ + { + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + ], + name: "deposit", + outputs: [ + ], + payable: true, + stateMutability: "payable", + type: "function" + }, + { + constant: true, + inputs: [ + { + name: "", + type: "address" + }, + { + name: "", + type: "address" + } + ], + name: "allowance", + outputs: [ + { + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + payable: true, + stateMutability: "payable", + type: "fallback" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: "src", + type: "address" + }, + { + indexed: true, + name: "guy", + type: "address" + }, + { + indexed: false, + name: "wad", + type: "uint256" + } + ], + name: "Approval", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: "src", + type: "address" + }, + { + indexed: true, + name: "dst", + type: "address" + }, + { + indexed: false, + name: "wad", + type: "uint256" + } + ], + name: "Transfer", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: "dst", + type: "address" + }, + { + indexed: false, + name: "wad", + type: "uint256" + } + ], + name: "Deposit", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: "src", + type: "address" + }, + { + indexed: false, + name: "wad", + type: "uint256" + } + ], + name: "Withdrawal", + type: "event" + } +]; + +// returns the checksummed address if the address is valid, otherwise returns false +function isAddress(value) { + try { + return address.getAddress(value); + } + catch (_a) { + return false; + } +} +// shorten the checksummed version of the input address to have 0x + 4 characters at start and end +function shortenAddress(address, chars) { + if (chars === void 0) { chars = 4; } + var parsed = isAddress(address); + if (!parsed) { + throw Error("Invalid 'address' parameter '" + address + "'."); + } + return parsed.substring(0, chars + 2) + "..." + parsed.substring(42 - chars); +} +// account is not optional +function getSigner(library, account) { + return library.getSigner(account).connectUnchecked(); +} +// account is optional +function getProviderOrSigner(library, account) { + return account ? getSigner(library, account) : library; +} +// account is optional +function getContract(address, ABI, library, account) { + if (!isAddress(address) || address === constants.AddressZero) { + throw Error("Invalid 'address' parameter '" + address + "'."); + } + return new contracts.Contract(address, ABI, getProviderOrSigner(library, account)); +} +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} +function isTokenOnList(chainTokenMap, token) { + var _a; + return Boolean((token === null || token === void 0 ? void 0 : token.isToken) && ((_a = chainTokenMap[token.chainId]) === null || _a === void 0 ? void 0 : _a[token.address])); +} + +// returns null on errors +function useContract(addressOrAddressMap, ABI, withSignerIfPossible) { + if (withSignerIfPossible === void 0) { withSignerIfPossible = true; } + var _a = useActiveWeb3React(), library = _a.library, account = _a.account, chainId = _a.chainId; + return React.useMemo(function () { + if (!addressOrAddressMap || !ABI || !library || !chainId) + return null; + var address; + if (typeof addressOrAddressMap === 'string') + address = addressOrAddressMap; + else + address = addressOrAddressMap[chainId]; + if (!address) + return null; + try { + return getContract(address, ABI, library, withSignerIfPossible && account ? account : undefined); + } + catch (error) { + console.error('Failed to get contract', error); + return null; + } + }, [addressOrAddressMap, ABI, library, chainId, withSignerIfPossible, account]); +} +function useTokenContract(tokenAddress, withSignerIfPossible) { + return useContract(tokenAddress, ERC20ABI, withSignerIfPossible); +} +function useWETHContract(withSignerIfPossible) { + var _a; + var chainId = useActiveWeb3React().chainId; + return useContract(chainId ? (_a = WRAPPED_NATIVE_CURRENCY[chainId]) === null || _a === void 0 ? void 0 : _a.address : undefined, WETH_ABI, withSignerIfPossible); +} +function useArgentWalletDetectorContract() { + return useContract(ARGENT_WALLET_DETECTOR_ADDRESS, ARGENT_WALLET_DETECTOR_ABI, false); +} +function useENSRegistrarContract(withSignerIfPossible) { + return useContract(ENS_REGISTRAR_ADDRESSES, ENS_ABI, withSignerIfPossible); +} +function useENSResolverContract(address, withSignerIfPossible) { + return useContract(address, ENS_PUBLIC_RESOLVER_ABI, withSignerIfPossible); +} +function useBytes32TokenContract(tokenAddress, withSignerIfPossible) { + return useContract(tokenAddress, ERC20_BYTES32_ABI, withSignerIfPossible); +} +function useEIP2612Contract(tokenAddress) { + return useContract(tokenAddress, EIP_2612, false); +} +function useV2RouterContract() { + return useContract(V2_ROUTER_ADDRESS, abi$3, true); +} +function useInterfaceMulticall() { + return useContract(MULTICALL_ADDRESS, abi$1, false); +} +function useV3Quoter() { + return useContract(QUOTER_ADDRESSES, abi$2); +} + +/** + * Debounces updates to a value. + * Non-primitives *must* wrap the value in useMemo, or the value will be updated due to referential inequality. + */ +// modified from https://usehooks.com/useDebounce/ +function useDebounce(value, delay) { + var _a = __read(React.useState(value), 2), debouncedValue = _a[0], setDebouncedValue = _a[1]; + React.useEffect(function () { + // Update debounced value after delay + var handler = setTimeout(function () { + setDebouncedValue(value); + }, delay); + // Cancel the timeout if value changes (also on delay change or unmount) + // This is how we prevent debounced value from updating if value is changed ... + // .. within the delay period. Timeout gets cleared and restarted. + return function () { + clearTimeout(handler); + }; + }, [value, delay]); + return debouncedValue; +} + +var VISIBILITY_STATE_SUPPORTED = 'visibilityState' in document; +function isWindowVisible() { + return !VISIBILITY_STATE_SUPPORTED || document.visibilityState !== 'hidden'; +} +/** + * Returns whether the window is currently visible to the user. + */ +function useIsWindowVisible() { + var _a = __read(React.useState(isWindowVisible()), 2), focused = _a[0], setFocused = _a[1]; + var listener = React.useCallback(function () { + setFocused(isWindowVisible()); + }, [setFocused]); + React.useEffect(function () { + if (!VISIBILITY_STATE_SUPPORTED) + return undefined; + document.addEventListener('visibilitychange', listener); + return function () { + document.removeEventListener('visibilitychange', listener); + }; + }, [listener]); + return focused; +} + +var blockAtom = jotai.atom(undefined); +/** Requires that BlockUpdater be installed in the DOM tree. */ +function useBlockNumber() { + var chainId = useActiveWeb3React().chainId; + var block = utils.useAtomValue(blockAtom); + return chainId ? block : undefined; +} + +var _a$b; +var multicall = reduxMulticall.createMulticall(); +var reducer = redux.combineReducers((_a$b = {}, _a$b[multicall.reducerPath] = multicall.reducer, _a$b)); +redux.createStore(reducer); + +function useMultipleContractSingleData() { + var _a; + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var _b = useCallContext(), chainId = _b.chainId, latestBlock = _b.latestBlock; + return (_a = multicall.hooks).useMultipleContractSingleData.apply(_a, __spreadArray([chainId, latestBlock], __read(args), false)); +} +function useSingleCallResult() { + var _a; + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var _b = useCallContext(), chainId = _b.chainId, latestBlock = _b.latestBlock; + return (_a = multicall.hooks).useSingleCallResult.apply(_a, __spreadArray([chainId, latestBlock], __read(args), false)); +} +function useSingleContractMultipleData() { + var _a; + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var _b = useCallContext(), chainId = _b.chainId, latestBlock = _b.latestBlock; + return (_a = multicall.hooks).useSingleContractMultipleData.apply(_a, __spreadArray([chainId, latestBlock], __read(args), false)); +} +function useSingleContractWithCallData() { + var _a; + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var _b = useCallContext(), chainId = _b.chainId, latestBlock = _b.latestBlock; + return (_a = multicall.hooks).useSingleContractWithCallData.apply(_a, __spreadArray([chainId, latestBlock], __read(args), false)); +} +function useCallContext() { + var chainId = useActiveWeb3React().chainId; + var latestBlock = useBlockNumber(); + return { chainId: chainId, latestBlock: latestBlock }; +} + +function useNativeCurrency() { + var chainId = useActiveWeb3React().chainId; + return React.useMemo(function () { + return chainId + ? nativeOnChain(chainId) + : // display mainnet when not connected + nativeOnChain(SupportedChainId.MAINNET); + }, [chainId]); +} + +var REGISTRAR_ABI = [ + { + constant: true, + inputs: [ + { + name: 'node', + type: 'bytes32', + }, + ], + name: 'resolver', + outputs: [ + { + name: 'resolverAddress', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, +]; +var REGISTRAR_ADDRESS = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'; +var RESOLVER_ABI = [ + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'contenthash', + outputs: [ + { + internalType: 'bytes', + name: '', + type: 'bytes', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, +]; +// cache the resolver contracts since most of them are the public resolver +function resolverContract(resolverAddress, provider) { + return new contracts.Contract(resolverAddress, RESOLVER_ABI, provider); +} +/** + * Fetches and decodes the result of an ENS contenthash lookup on mainnet to a URI + * @param ensName to resolve + * @param provider provider to use to fetch the data + */ +function resolveENSContentHash(ensName, provider) { + return __awaiter(this, void 0, void 0, function () { + var ensRegistrarContract, hash$1, resolverAddress; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + ensRegistrarContract = new contracts.Contract(REGISTRAR_ADDRESS, REGISTRAR_ABI, provider); + hash$1 = hash.namehash(ensName); + return [4 /*yield*/, ensRegistrarContract.resolver(hash$1)]; + case 1: + resolverAddress = _a.sent(); + return [2 /*return*/, resolverContract(resolverAddress, provider).contenthash(hash$1)]; + } + }); + }); +} + +function hexToUint8Array(hex) { + hex = hex.startsWith('0x') ? hex.substr(2) : hex; + if (hex.length % 2 !== 0) + throw new Error('hex must have length that is multiple of 2'); + var arr = new Uint8Array(hex.length / 2); + for (var i = 0; i < arr.length; i++) { + arr[i] = parseInt(hex.substr(i * 2, 2), 16); + } + return arr; +} +var UTF_8_DECODER = new TextDecoder('utf-8'); +/** + * Returns the URI representation of the content hash for supported codecs + * @param contenthash to decode + */ +function contenthashToUri(contenthash) { + var data = hexToUint8Array(contenthash); + var codec = multicodec.getNameFromData(data); + switch (codec) { + case 'ipfs-ns': { + var unprefixedData = multicodec.rmPrefix(data); + var cid = new CID__default["default"](unprefixedData); + return "ipfs://" + multihashes.toB58String(cid.multihash); + } + case 'ipns-ns': { + var unprefixedData = multicodec.rmPrefix(data); + var cid = new CID__default["default"](unprefixedData); + var multihash = multihashes.decode(cid.multihash); + if (multihash.name === 'identity') { + return "ipns://" + UTF_8_DECODER.decode(multihash.digest).trim(); + } + else { + return "ipns://" + multihashes.toB58String(cid.multihash); + } + } + default: + throw new Error("Unrecognized codec: " + codec); + } +} + +var ENS_NAME_REGEX$1 = /^(([a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\.)+)eth(\/.*)?$/; +function parseENSAddress(ensAddress) { + var match = ensAddress.match(ENS_NAME_REGEX$1); + if (!match) + return undefined; + return { ensName: match[1].toLowerCase() + "eth", ensPath: match[4] }; +} + +/** + * Given a URI that may be ipfs, ipns, http, https, ar, or data protocol, return the fetch-able http(s) URLs for the same content + * @param uri to convert to fetch-able http url + */ +function uriToHttp(uri) { + var _a, _b, _c; + var protocol = uri.split(':')[0].toLowerCase(); + switch (protocol) { + case 'data': + return [uri]; + case 'https': + return [uri]; + case 'http': + return ['https' + uri.substr(4), uri]; + case 'ipfs': + var hash = (_a = uri.match(/^ipfs:(\/\/)?(.*)$/i)) === null || _a === void 0 ? void 0 : _a[2]; + return ["https://cloudflare-ipfs.com/ipfs/" + hash + "/", "https://ipfs.io/ipfs/" + hash + "/"]; + case 'ipns': + var name_1 = (_b = uri.match(/^ipns:(\/\/)?(.*)$/i)) === null || _b === void 0 ? void 0 : _b[2]; + return ["https://cloudflare-ipfs.com/ipns/" + name_1 + "/", "https://ipfs.io/ipns/" + name_1 + "/"]; + case 'ar': + var tx = (_c = uri.match(/^ar:(\/\/)?(.*)$/i)) === null || _c === void 0 ? void 0 : _c[2]; + return ["https://arweave.net/" + tx]; + default: + return []; + } +} + +var ValidationSchema; +(function (ValidationSchema) { + ValidationSchema["LIST"] = "list"; + ValidationSchema["TOKENS"] = "tokens"; +})(ValidationSchema || (ValidationSchema = {})); +var validator = new Promise(function (resolve) { return __awaiter(void 0, void 0, void 0, function () { + var _a, ajv, schema, validator; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: return [4 /*yield*/, Promise.all([Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('ajv')); }), Promise.resolve().then(function () { return tokenlist_schema$1; })])]; + case 1: + _a = __read.apply(void 0, [_b.sent(), 2]), ajv = _a[0], schema = _a[1]; + validator = new ajv.default({ allErrors: true }) + .addSchema(schema, ValidationSchema.LIST) + // Adds a meta scheme of Pick + .addSchema(__assign(__assign({}, schema), { $id: schema.$id + '#tokens', required: ['tokens'] }), ValidationSchema.TOKENS); + resolve(validator); + return [2 /*return*/]; + } + }); +}); }); +function getValidationErrors(validate) { + var _a, _b; + return ((_b = (_a = validate === null || validate === void 0 ? void 0 : validate.errors) === null || _a === void 0 ? void 0 : _a.map(function (error) { return [error.dataPath, error.message].filter(Boolean).join(' '); }).join('; ')) !== null && _b !== void 0 ? _b : 'unknown error'); +} +/** + * Validates a token list. + * @param json the TokenList to validate + */ +function validateTokenList(json) { + return __awaiter(this, void 0, void 0, function () { + var validate; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, validator]; + case 1: + validate = (_a.sent()).getSchema(ValidationSchema.LIST); + if (validate === null || validate === void 0 ? void 0 : validate(json)) { + return [2 /*return*/, json]; + } + throw new Error("Token list failed validation: " + getValidationErrors(validate)); + } + }); + }); +} + +var listCache = new Map(); +/** Fetches and validates a token list. */ +function fetchTokenList$1(listUrl, resolveENSContentHash) { + var _a; + return __awaiter(this, void 0, void 0, function () { + var cached, urls, parsedENS, contentHashUri, error_1, message, translatedUri, message, i, url, isLast, response, error_2, message, message, json, list; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + cached = listCache === null || listCache === void 0 ? void 0 : listCache.get(listUrl) // avoid spurious re-fetches + ; + if (cached) { + return [2 /*return*/, cached]; + } + parsedENS = parseENSAddress(listUrl); + if (!parsedENS) return [3 /*break*/, 5]; + contentHashUri = void 0; + _b.label = 1; + case 1: + _b.trys.push([1, 3, , 4]); + return [4 /*yield*/, resolveENSContentHash(parsedENS.ensName)]; + case 2: + contentHashUri = _b.sent(); + return [3 /*break*/, 4]; + case 3: + error_1 = _b.sent(); + message = "failed to resolve ENS name: " + parsedENS.ensName; + console.debug(message, error_1); + throw new Error(message); + case 4: + translatedUri = void 0; + try { + translatedUri = contenthashToUri(contentHashUri); + } + catch (error) { + message = "failed to translate contenthash to URI: " + contentHashUri; + console.debug(message, error); + throw new Error(message); + } + urls = uriToHttp("" + translatedUri + ((_a = parsedENS.ensPath) !== null && _a !== void 0 ? _a : '')); + return [3 /*break*/, 6]; + case 5: + urls = uriToHttp(listUrl); + _b.label = 6; + case 6: + i = 0; + _b.label = 7; + case 7: + if (!(i < urls.length)) return [3 /*break*/, 15]; + url = urls[i]; + isLast = i === urls.length - 1; + response = void 0; + _b.label = 8; + case 8: + _b.trys.push([8, 10, , 11]); + return [4 /*yield*/, fetch(url, { credentials: 'omit' })]; + case 9: + response = _b.sent(); + return [3 /*break*/, 11]; + case 10: + error_2 = _b.sent(); + message = "failed to fetch list: " + listUrl; + console.debug(message, error_2); + if (isLast) + throw new Error(message); + return [3 /*break*/, 14]; + case 11: + if (!response.ok) { + message = "failed to fetch list: " + listUrl; + console.debug(message, response.statusText); + if (isLast) + throw new Error(message); + return [3 /*break*/, 14]; + } + return [4 /*yield*/, response.json()]; + case 12: + json = _b.sent(); + return [4 /*yield*/, validateTokenList(json)]; + case 13: + list = _b.sent(); + listCache === null || listCache === void 0 ? void 0 : listCache.set(listUrl, list); + return [2 /*return*/, list]; + case 14: + i++; + return [3 /*break*/, 7]; + case 15: throw new Error('Unrecognized list URL protocol.'); + } + }); + }); +} + +/** + * Returns a map of the given addresses to their eventually consistent ETH balances. + */ +function useNativeCurrencyBalances(uncheckedAddresses) { + var chainId = useActiveWeb3React().chainId; + var multicallContract = useInterfaceMulticall(); + var validAddressInputs = React.useMemo(function () { + return uncheckedAddresses + ? uncheckedAddresses + .map(isAddress) + .filter(function (a) { return a !== false; }) + .sort() + .map(function (addr) { return [addr]; }) + : []; + }, [uncheckedAddresses]); + var results = useSingleContractMultipleData(multicallContract, 'getEthBalance', validAddressInputs); + return React.useMemo(function () { + return validAddressInputs.reduce(function (memo, _a, i) { + var _b, _c; + var _d = __read(_a, 1), address = _d[0]; + var value = (_c = (_b = results === null || results === void 0 ? void 0 : results[i]) === null || _b === void 0 ? void 0 : _b.result) === null || _c === void 0 ? void 0 : _c[0]; + if (value && chainId) + memo[address] = sdkCore.CurrencyAmount.fromRawAmount(nativeOnChain(chainId), JSBI__default["default"].BigInt(value.toString())); + return memo; + }, {}); + }, [validAddressInputs, chainId, results]); +} +var ERC20Interface = new abi$6.Interface(ERC20ABI); +var tokenBalancesGasRequirement = { gasRequired: 125000 }; +/** + * Returns a map of token addresses to their eventually consistent token balances for a single account. + */ +function useTokenBalancesWithLoadingIndicator(address, tokens) { + var validatedTokens = React.useMemo(function () { var _a; return (_a = tokens === null || tokens === void 0 ? void 0 : tokens.filter(function (t) { return isAddress(t === null || t === void 0 ? void 0 : t.address) !== false; })) !== null && _a !== void 0 ? _a : []; }, [tokens]); + var validatedTokenAddresses = React.useMemo(function () { return validatedTokens.map(function (vt) { return vt.address; }); }, [validatedTokens]); + var balances = useMultipleContractSingleData(validatedTokenAddresses, ERC20Interface, 'balanceOf', React.useMemo(function () { return [address]; }, [address]), tokenBalancesGasRequirement); + var anyLoading = React.useMemo(function () { return balances.some(function (callState) { return callState.loading; }); }, [balances]); + return React.useMemo(function () { return [ + address && validatedTokens.length > 0 + ? validatedTokens.reduce(function (memo, token, i) { + var _a, _b; + var value = (_b = (_a = balances === null || balances === void 0 ? void 0 : balances[i]) === null || _a === void 0 ? void 0 : _a.result) === null || _b === void 0 ? void 0 : _b[0]; + var amount = value ? JSBI__default["default"].BigInt(value.toString()) : undefined; + if (amount) { + memo[token.address] = sdkCore.CurrencyAmount.fromRawAmount(token, amount); + } + return memo; + }, {}) + : {}, + anyLoading, + ]; }, [address, validatedTokens, anyLoading, balances]); +} +function useTokenBalances(address, tokens) { + return useTokenBalancesWithLoadingIndicator(address, tokens)[0]; +} +function useCurrencyBalances(account, currencies) { + var tokens = React.useMemo(function () { var _a; return (_a = currencies === null || currencies === void 0 ? void 0 : currencies.filter(function (currency) { var _a; return (_a = currency === null || currency === void 0 ? void 0 : currency.isToken) !== null && _a !== void 0 ? _a : false; })) !== null && _a !== void 0 ? _a : []; }, [currencies]); + var tokenBalances = useTokenBalances(account, tokens); + var containsETH = React.useMemo(function () { var _a; return (_a = currencies === null || currencies === void 0 ? void 0 : currencies.some(function (currency) { return currency === null || currency === void 0 ? void 0 : currency.isNative; })) !== null && _a !== void 0 ? _a : false; }, [currencies]); + var ethBalance = useNativeCurrencyBalances(React.useMemo(function () { return (containsETH ? [account] : []); }, [containsETH, account])); + return React.useMemo(function () { + var _a; + return (_a = currencies === null || currencies === void 0 ? void 0 : currencies.map(function (currency) { + if (!account || !currency) + return undefined; + if (currency.isToken) + return tokenBalances[currency.address]; + if (currency.isNative) + return ethBalance[account]; + return undefined; + })) !== null && _a !== void 0 ? _a : []; + }, [account, currencies, ethBalance, tokenBalances]); +} +function useCurrencyBalance(account, currency) { + return useCurrencyBalances(account, React.useMemo(function () { return [currency]; }, [currency]))[0]; +} + +var alwaysTrue = function () { return true; }; +/** Creates a filter function that filters tokens that do not match the query. */ +function getTokenFilter(query) { + var searchingAddress = isAddress(query); + if (searchingAddress) { + var address_1 = searchingAddress.toLowerCase(); + return function (t) { return 'address' in t && address_1 === t.address.toLowerCase(); }; + } + var queryParts = query + .toLowerCase() + .split(/\s+/) + .filter(function (s) { return s.length > 0; }); + if (queryParts.length === 0) + return alwaysTrue; + var match = function (s) { + var parts = s + .toLowerCase() + .split(/\s+/) + .filter(function (s) { return s.length > 0; }); + return queryParts.every(function (p) { return p.length === 0 || parts.some(function (sp) { return sp.startsWith(p) || sp.endsWith(p); }); }); + }; + return function (_a) { + var name = _a.name, symbol = _a.symbol; + return Boolean((symbol && match(symbol)) || (name && match(name))); + }; +} + +/** Sorts currency amounts (descending). */ +function balanceComparator(a, b) { + if (a && b) { + return a.greaterThan(b) ? -1 : a.equalTo(b) ? 0 : 1; + } + else if (a === null || a === void 0 ? void 0 : a.greaterThan('0')) { + return -1; + } + else if (b === null || b === void 0 ? void 0 : b.greaterThan('0')) { + return 1; + } + return 0; +} +/** Sorts tokens by currency amount (descending), then symbol (ascending). */ +function tokenComparator(balances, a, b) { + // Sorts by balances + var balanceComparison = balanceComparator(balances[a.address], balances[b.address]); + if (balanceComparison !== 0) + return balanceComparison; + // Sorts by symbol + if (a.symbol && b.symbol) { + return a.symbol.toLowerCase() < b.symbol.toLowerCase() ? -1 : 1; + } + return -1; +} +/** Sorts tokens by query, giving precedence to exact matches and partial matches. */ +function useSortTokensByQuery(query, tokens) { + return React.useMemo(function () { + if (!tokens) { + return []; + } + var matches = query + .toLowerCase() + .split(/\s+/) + .filter(function (s) { return s.length > 0; }); + if (matches.length > 1) { + return tokens; + } + var exactMatches = []; + var symbolSubtrings = []; + var rest = []; + // sort tokens by exact match -> subtring on symbol match -> rest + tokens.map(function (token) { + var _a, _b; + if (((_a = token.symbol) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === matches[0]) { + return exactMatches.push(token); + } + else if ((_b = token.symbol) === null || _b === void 0 ? void 0 : _b.toLowerCase().startsWith(query.toLowerCase().trim())) { + return symbolSubtrings.push(token); + } + else { + return rest.push(token); + } + }); + return __spreadArray(__spreadArray(__spreadArray([], __read(exactMatches), false), __read(symbolSubtrings), false), __read(rest), false); + }, [tokens, query]); +} + +/** + * Token instances created from token info on a token list. + */ +var WrappedTokenInfo = /** @class */ (function () { + function WrappedTokenInfo(tokenInfo, list) { + this.isNative = false; + this.isToken = true; + this._checksummedAddress = null; + this._tags = null; + this.tokenInfo = tokenInfo; + this.list = list; + } + Object.defineProperty(WrappedTokenInfo.prototype, "address", { + get: function () { + if (this._checksummedAddress) + return this._checksummedAddress; + var checksummedAddress = isAddress(this.tokenInfo.address); + if (!checksummedAddress) + throw new Error("Invalid token address: " + this.tokenInfo.address); + return (this._checksummedAddress = checksummedAddress); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(WrappedTokenInfo.prototype, "chainId", { + get: function () { + return this.tokenInfo.chainId; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(WrappedTokenInfo.prototype, "decimals", { + get: function () { + return this.tokenInfo.decimals; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(WrappedTokenInfo.prototype, "name", { + get: function () { + return this.tokenInfo.name; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(WrappedTokenInfo.prototype, "symbol", { + get: function () { + return this.tokenInfo.symbol; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(WrappedTokenInfo.prototype, "logoURI", { + get: function () { + return this.tokenInfo.logoURI; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(WrappedTokenInfo.prototype, "tags", { + get: function () { + var _a; + if (this._tags !== null) + return this._tags; + if (!this.tokenInfo.tags) + return (this._tags = []); + var listTags = (_a = this.list) === null || _a === void 0 ? void 0 : _a.tags; + if (!listTags) + return (this._tags = []); + return (this._tags = this.tokenInfo.tags.map(function (tagId) { + return __assign(__assign({}, listTags[tagId]), { id: tagId }); + })); + }, + enumerable: false, + configurable: true + }); + WrappedTokenInfo.prototype.equals = function (other) { + return other.chainId === this.chainId && other.isToken && other.address.toLowerCase() === this.address.toLowerCase(); + }; + WrappedTokenInfo.prototype.sortsBefore = function (other) { + if (this.equals(other)) + throw new Error('Addresses should not be equal'); + return this.address.toLowerCase() < other.address.toLowerCase(); + }; + Object.defineProperty(WrappedTokenInfo.prototype, "wrapped", { + get: function () { + return this; + }, + enumerable: false, + configurable: true + }); + return WrappedTokenInfo; +}()); + +var mapCache = typeof WeakMap !== 'undefined' ? new WeakMap() : null; +function tokensToChainTokenMap(tokens) { + var cached = mapCache === null || mapCache === void 0 ? void 0 : mapCache.get(tokens); + if (cached) + return cached; + var _a = __read(Array.isArray(tokens) ? [undefined, tokens] : [tokens, tokens.tokens], 2), list = _a[0], infos = _a[1]; + var map = infos.reduce(function (map, info) { + var _a; + var token = new WrappedTokenInfo(info, list); + if (((_a = map[token.chainId]) === null || _a === void 0 ? void 0 : _a[token.address]) !== undefined) { + console.warn("Duplicate token skipped: " + token.address); + return map; + } + if (!map[token.chainId]) { + map[token.chainId] = {}; + } + map[token.chainId][token.address] = { token: token, list: list }; + return map; + }, {}); + mapCache === null || mapCache === void 0 ? void 0 : mapCache.set(tokens, map); + return map; +} + +jotai.atom({}); + +// parse a name or symbol from a token response +var BYTES32_REGEX = /^0x[a-fA-F0-9]{64}$/; +function parseStringOrBytes32(str, bytes32, defaultValue) { + return str && str.length > 0 + ? str + : // need to check for proper bytes string and valid terminator + bytes32 && BYTES32_REGEX.test(bytes32) && bytes.arrayify(bytes32)[31] === 0 + ? strings.parseBytes32String(bytes32) + : defaultValue; +} +/** + * Returns a Token from the tokenAddress. + * Returns null if token is loading or null was passed. + * Returns undefined if tokenAddress is invalid or token does not exist. + */ +function useTokenFromMap(tokens, tokenAddress) { + var chainId = useActiveWeb3React().chainId; + var address = isAddress(tokenAddress); + var tokenContract = useTokenContract(address ? address : undefined, false); + var tokenContractBytes32 = useBytes32TokenContract(address ? address : undefined, false); + var token = address ? tokens[address] : undefined; + var tokenName = useSingleCallResult(token ? undefined : tokenContract, 'name', undefined, reduxMulticall.NEVER_RELOAD); + var tokenNameBytes32 = useSingleCallResult(token ? undefined : tokenContractBytes32, 'name', undefined, reduxMulticall.NEVER_RELOAD); + var symbol = useSingleCallResult(token ? undefined : tokenContract, 'symbol', undefined, reduxMulticall.NEVER_RELOAD); + var symbolBytes32 = useSingleCallResult(token ? undefined : tokenContractBytes32, 'symbol', undefined, reduxMulticall.NEVER_RELOAD); + var decimals = useSingleCallResult(token ? undefined : tokenContract, 'decimals', undefined, reduxMulticall.NEVER_RELOAD); + return React.useMemo(function () { + var _a, _b, _c, _d; + if (token) + return token; + if (tokenAddress === null) + return null; + if (!chainId || !address) + return undefined; + if (decimals.loading || symbol.loading || tokenName.loading) + return null; + if (decimals.result) { + return new sdkCore.Token(chainId, address, decimals.result[0], parseStringOrBytes32((_a = symbol.result) === null || _a === void 0 ? void 0 : _a[0], (_b = symbolBytes32.result) === null || _b === void 0 ? void 0 : _b[0], 'UNKNOWN'), parseStringOrBytes32((_c = tokenName.result) === null || _c === void 0 ? void 0 : _c[0], (_d = tokenNameBytes32.result) === null || _d === void 0 ? void 0 : _d[0], 'Unknown Token')); + } + return undefined; + }, [ + address, + chainId, + decimals.loading, + decimals.result, + symbol.loading, + symbol.result, + symbolBytes32.result, + token, + tokenAddress, + tokenName.loading, + tokenName.result, + tokenNameBytes32.result, + ]); +} +/** + * Returns a Currency from the currencyId. + * Returns null if currency is loading or null was passed. + * Returns undefined if currencyId is invalid or token does not exist. + */ +function useCurrencyFromMap(tokens, currencyId) { + var _a; + var nativeCurrency = useNativeCurrency(); + var isNative = Boolean(nativeCurrency && (currencyId === null || currencyId === void 0 ? void 0 : currencyId.toUpperCase()) === 'ETH'); + var token = useTokenFromMap(tokens, isNative ? undefined : currencyId); + if (currencyId === null || currencyId === undefined) + return currencyId; + // this case so we use our builtin wrapped token instead of wrapped tokens on token lists + var wrappedNative = nativeCurrency === null || nativeCurrency === void 0 ? void 0 : nativeCurrency.wrapped; + if (((_a = wrappedNative === null || wrappedNative === void 0 ? void 0 : wrappedNative.address) === null || _a === void 0 ? void 0 : _a.toUpperCase()) === (currencyId === null || currencyId === void 0 ? void 0 : currencyId.toUpperCase())) + return wrappedNative; + return isNative ? nativeCurrency : token; +} + +var DEFAULT_LIST_PRIORITIES = DEFAULT_LIST_OF_LISTS.reduce(function (memo, listUrl, index) { + memo[listUrl] = index + 1; + return memo; +}, {}); +// use ordering of default list of lists to assign priority +function sortByListPriority(urlA, urlB) { + if (DEFAULT_LIST_PRIORITIES[urlA] && DEFAULT_LIST_PRIORITIES[urlB]) { + return DEFAULT_LIST_PRIORITIES[urlA] - DEFAULT_LIST_PRIORITIES[urlB]; + } + return 0; +} + +var name$1 = "Broken Token List"; +var timestamp$1 = "2021-01-05T20:47:02.923Z"; +var version$1 = { + major: 1, + minor: 0, + patch: 0 +}; +var tags$1 = { +}; +var logoURI$1 = "ipfs://QmNa8mQkrNKp1WEEeGjFezDmDeodkWRevGFN8JCV7b4Xir"; +var keywords$1 = [ + "uniswap", + "broken" +]; +var tokens$1 = [ + { + name: "UNI HODL", + address: "0x4bf5dc91E2555449293D7824028Eb8Fe5879B689", + symbol: "UniH", + decimals: 18, + chainId: 1, + logoURI: "" + } +]; +var BROKEN_LIST = { + name: name$1, + timestamp: timestamp$1, + version: version$1, + tags: tags$1, + logoURI: logoURI$1, + keywords: keywords$1, + tokens: tokens$1 +}; + +var name = "Unsupported Tokens"; +var timestamp = "2021-01-05T20:47:02.923Z"; +var version = { + major: 1, + minor: 0, + patch: 0 +}; +var tags = { +}; +var logoURI = "ipfs://QmNa8mQkrNKp1WEEeGjFezDmDeodkWRevGFN8JCV7b4Xir"; +var keywords = [ + "uniswap", + "unsupported" +]; +var tokens = [ + { + name: "Gold Tether", + address: "0x4922a015c4407F87432B179bb209e125432E4a2A", + symbol: "XAUt", + decimals: 6, + chainId: 1, + logoURI: "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4922a015c4407F87432B179bb209e125432E4a2A/logo.png" + }, + { + name: "Grump Cat", + address: "0x93B2FfF814FCaEFFB01406e80B4Ecd89Ca6A021b", + symbol: "GRUMPY", + decimals: 9, + chainId: 1, + logoURI: "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4922a015c4407F87432B179bb209e125432E4a2A/logo.png" + }, + { + name: "apeUSD-UMA Synthetic USD (Dec 2021)", + address: "0xfA5e27893aee4805283D86e4283Da64F8c72dd56", + symbol: "apeUSD-UMA-DEC21", + decimals: 18, + chainId: 1, + logoURI: "" + }, + { + chainId: 1, + address: "0xc6b11850241c5127eab73af4b6c68bc267cbbff4", + name: "oWETHp Put 360 DEC2520", + symbol: "oWETH-360P-12/25/20", + decimals: 7 + }, + { + chainId: 1, + name: "oYFIp Put 25000 OCT0220", + address: "0x452b421be5b30f0c6ad8c3f03c06bdaab4f5c56c", + symbol: "oYFI-25000P-10/02/20", + decimals: 7 + }, + { + chainId: 1, + name: "oWETHp Put 360 OCT3020", + address: "0x0578779e746d7186253a36cf651ea786acfcf087", + symbol: "oWETH-360P-10/30/20", + decimals: 7 + }, + { + chainId: 1, + name: "ETHc Call 500 OCT3020", + address: "0xf9aba2e43fb19184408ea3b572a0fd672946f87b", + symbol: "oETH-500C-10/30/20", + decimals: 6 + }, + { + chainId: 1, + name: "oBALp Put 22 OCT0220", + address: "0xdb0991dfc7e828b5a2837dc82d68e16490562c8d", + symbol: "oBAL-22P-10/02/20", + decimals: 7 + }, + { + chainId: 1, + name: "oCOMPp Put 150 SEP2520", + address: "0xe951ebe6b4420ab3f4844cf36dedd263d095b416", + symbol: "oCOMP-150P-09/25/20", + decimals: 7 + }, + { + chainId: 1, + name: "oCRVp Put 3 SEP252020", + address: "0x9215bd49b59748419eac6bad9dbe247df06ebdb9", + symbol: "oCRV-3P-09/25/20", + decimals: 7 + }, + { + chainId: 1, + name: "oETHp Put 180 SEP2520", + address: "0xE3A2c34Fa2F59ffa95C4ACd1E5663633d45Bc3AD", + symbol: "oETH-180P-09/25/20", + decimals: 7 + }, + { + chainId: 1, + name: "oETHc Call 400 SEP2520", + address: "0x05977EBC26825C0CD6097E0Ad7204721516711Eb", + symbol: "oETH-400C-09/25/20", + decimals: 7 + }, + { + chainId: 1, + name: "oWETHp Put 380 SEP1820", + address: "0x31f88266301b08631f9f0e33fd5c43c2a5d1e5b2", + symbol: "oWETH-380P-09/18/20", + decimals: 7 + }, + { + chainId: 1, + name: "oYFIp Put 8500 SEP1820", + address: "0xd1cec2f67fdc4c60e0963515dfc3343f31e32e47", + symbol: "oYFI-8500P-09/18/20", + decimals: 7 + }, + { + chainId: 1, + name: "oWETHp Put 370 SEP1120", + address: "0x15844029b2c2bf24506e9937739a9a912f1e4354", + symbol: "oWETH-370P-09/11/20", + decimals: 7 + }, + { + chainId: 1, + name: "oWETHp Put 400 SEP0420", + address: "0x5562c33c383f6386be4f6dcdbd35a3a99bbcfde6", + symbol: "oWETH-400P-09/04/20", + decimals: 7 + }, + { + chainId: 1, + name: "oETHp Put 200 AUG2820", + address: "0x3CBFC1397deF0602c2d211c70A1c0c38CEDB5448", + symbol: "oWETH-400P-09/04/20", + decimals: 7 + }, + { + chainId: 1, + name: "Opyn cDai Insurance", + symbol: "ocDai", + address: "0x98cc3bd6af1880fcfda17ac477b2f612980e5e33", + decimals: 8 + }, + { + chainId: 1, + name: "Opyn cUSDC Insurance", + symbol: "ocUSDC", + address: "0x8ED9f862363fFdFD3a07546e618214b6D59F03d4", + decimals: 8 + }, + { + chainId: 1, + address: "0x176C674Ee533C6139B0dc8b458D72A93dCB3e705", + symbol: "iAAVE", + name: "Synth Inverse Aave", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iAAVE.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x8A8079c7149B8A1611e5C5d978DCA3bE16545F83", + symbol: "iADA", + name: "Synth Inverse Cardano", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iADA.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0xAFD870F32CE54EfdBF677466B612bf8ad164454B", + symbol: "iBNB", + name: "Synth Inverse Binance Coin", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iBNB.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0xD6014EA05BDe904448B743833dDF07c3C7837481", + symbol: "iBTC", + name: "Synth Inverse Bitcoin", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iBTC.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x336213e1DDFC69f4701Fc3F86F4ef4A160c1159d", + symbol: "iCEX", + name: "Synth Inverse Centralised Exchange Index", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iCEX.svg", + tags: [ + "index", + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x6345728B1ccE16E6f8C509950b5c84FFF88530d9", + symbol: "iCOMP", + name: "Synth Inverse Compound", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iCOMP.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0xCB98f42221b2C251A4E74A1609722eE09f0cc08E", + symbol: "iDASH", + name: "Synth Inverse Dash", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDASH.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x14d10003807AC60d07BB0ba82cAeaC8d2087c157", + symbol: "iDEFI", + name: "Synth Inverse DeFi Index", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDEFI.svg", + tags: [ + "index", + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x46a97629C9C1F58De6EC18C7F536e7E6d6A6ecDe", + symbol: "iDOT", + name: "Synth Inverse Polkadot", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDOT.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0xF4EebDD0704021eF2a6Bbe993fdf93030Cd784b4", + symbol: "iEOS", + name: "Synth Inverse EOS", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iEOS.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0xd50c1746D835d2770dDA3703B69187bFfeB14126", + symbol: "iETC", + name: "Synth Inverse Ethereum Classic", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iETC.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0xA9859874e1743A32409f75bB11549892138BBA1E", + symbol: "iETH", + name: "Synth Inverse Ether", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iETH.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x2d7aC061fc3db53c39fe1607fB8cec1B2C162B01", + symbol: "iLINK", + name: "Synth Inverse Chainlink", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iLINK.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x79da1431150C9b82D2E5dfc1C68B33216846851e", + symbol: "iLTC", + name: "Synth Inverse Litecoin", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iLTC.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0xA5a5DF41883Cdc00c4cCC6E8097130535399d9a3", + symbol: "iOIL", + name: "Synth Inverse Perpetual Oil Futures", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iOIL.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x0fEd38108bdb8e62ef7b5680E8E0726E2F29e0De", + symbol: "iREN", + name: "Synth Inverse Ren", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iREN.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0xC5807183a9661A533CB08CbC297594a0B864dc12", + symbol: "iTRX", + name: "Synth Inverse TRON", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iTRX.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x36A00FF9072570eF4B9292117850B8FE08d96cce", + symbol: "iUNI", + name: "Synth Inverse Uniswap", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iUNI.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x4AdF728E2Df4945082cDD6053869f51278fae196", + symbol: "iXMR", + name: "Synth Inverse Monero", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXMR.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x27269b3e45A4D3E79A3D6BFeE0C8fB13d0D711A6", + symbol: "iXRP", + name: "Synth Inverse Ripple", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXRP.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x8deef89058090ac5655A99EEB451a4f9183D1678", + symbol: "iXTZ", + name: "Synth Inverse Tezos", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXTZ.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x592244301CeA952d6daB2fdC1fE6bd9E53917306", + symbol: "iYFI", + name: "Synth Inverse yearn.finance", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iYFI.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0xcD39b5434a0A92cf47D1F567a7dF84bE356814F0", + symbol: "s1INCH", + name: "Synth 1inch", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/s1INCH.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x7537AAe01f3B218DAE75e10d952473823F961B87", + symbol: "sAAPL", + name: "Synth Apple", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAAPL.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xd2dF355C19471c8bd7D8A3aa27Ff4e26A21b4076", + symbol: "sAAVE", + name: "Synth Aave", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAAVE.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xe36E2D3c7c34281FA3bC737950a68571736880A1", + symbol: "sADA", + name: "Synth Cardano", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sADA.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x9CF7E61853ea30A41b02169391b393B901eac457", + symbol: "sAMZN", + name: "Synth Amazon", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAMZN.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xF48e200EAF9906362BB1442fca31e0835773b8B4", + symbol: "sAUD", + name: "Synth Australian Dollars", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAUD.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x617aeCB6137B5108D1E7D4918e3725C8cEbdB848", + symbol: "sBNB", + name: "Synth Binance Coin", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sBNB.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xfE18be6b3Bd88A2D2A7f928d00292E7a9963CfC6", + symbol: "sBTC", + name: "Synth Bitcoin", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sBTC.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xeABACD844A196D7Faf3CE596edeBF9900341B420", + symbol: "sCEX", + name: "Synth Centralised Exchange Index", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCEX.svg", + tags: [ + "index", + "synth" + ] + }, + { + chainId: 1, + address: "0x0F83287FF768D1c1e17a42F44d644D7F22e8ee1d", + symbol: "sCHF", + name: "Synth Swiss Franc", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCHF.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x9EeF4CA7aB9fa8bc0650127341C2d3F707a40f8A", + symbol: "sCOIN", + name: "Synth Coinbase", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCOIN.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xEb029507d3e043DD6C87F2917C4E82B902c35618", + symbol: "sCOMP", + name: "Synth Compound", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCOMP.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xD38aEb759891882e78E957c80656572503D8c1B1", + symbol: "sCRV", + name: "Synth Curve DAO Token", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCRV.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xfE33ae95A9f0DA8A845aF33516EDc240DCD711d6", + symbol: "sDASH", + name: "Synth Dash", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDASH.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xe1aFe1Fd76Fd88f78cBf599ea1846231B8bA3B6B", + symbol: "sDEFI", + name: "Synth DeFi Index", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDEFI.svg", + tags: [ + "index", + "synth" + ] + }, + { + chainId: 1, + address: "0x1715AC0743102BF5Cd58EfBB6Cf2dC2685d967b6", + symbol: "sDOT", + name: "Synth Polkadot", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDOT.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x88C8Cf3A212c0369698D13FE98Fcb76620389841", + symbol: "sEOS", + name: "Synth EOS", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sEOS.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x22602469d704BfFb0936c7A7cfcD18f7aA269375", + symbol: "sETC", + name: "Synth Ethereum Classic", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sETC.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x5e74C9036fb86BD7eCdcb084a0673EFc32eA31cb", + symbol: "sETH", + name: "Synth Ether", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sETH.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xD71eCFF9342A5Ced620049e616c5035F1dB98620", + symbol: "sEUR", + name: "Synth Euros", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sEUR.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xf50B5e535F62a56A9BD2d8e2434204E726c027Fa", + symbol: "sFB", + name: "Synth Facebook", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sFB.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x23348160D7f5aca21195dF2b70f28Fce2B0be9fC", + symbol: "sFTSE", + name: "Synth FTSE 100 Index", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sFTSE.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x97fe22E7341a0Cd8Db6F6C021A24Dc8f4DAD855F", + symbol: "sGBP", + name: "Synth Pound Sterling", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sGBP.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xC63B8ECCE56aB9C46184eC6aB85e4771fEa4c8AD", + symbol: "sGOOG", + name: "Synth Alphabet", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sGOOG.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xF6b1C627e95BFc3c1b4c9B825a032Ff0fBf3e07d", + symbol: "sJPY", + name: "Synth Japanese Yen", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sJPY.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x269895a3dF4D73b077Fc823dD6dA1B95f72Aaf9B", + symbol: "sKRW", + name: "Synth South Korean Won", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sKRW.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xbBC455cb4F1B9e4bFC4B73970d360c8f032EfEE6", + symbol: "sLINK", + name: "Synth Chainlink", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sLINK.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xC14103C2141E842e228FBaC594579e798616ce7A", + symbol: "sLTC", + name: "Synth Litecoin", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sLTC.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x745a824D6aBBD236AA794b5530062778A6Ad7523", + symbol: "sMSFT", + name: "Synth Microsoft", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sMSFT.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x5A7E3c07604EB515C16b36cd51906a65f021F609", + symbol: "sNFLX", + name: "Synth Netflix", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sNFLX.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x757de3ac6B830a931eF178C6634c5C551773155c", + symbol: "sNIKKEI", + name: "Synth Nikkei 225 Index", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sNIKKEI.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x6d16cF3EC5F763d4d99cB0B0b110eefD93B11B56", + symbol: "sOIL", + name: "Synth Perpetual Oil Futures", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sOIL.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xD31533E8d0f3DF62060e94B3F1318137bB6E3525", + symbol: "sREN", + name: "Synth Ren", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sREN.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x0352557B007A4Aae1511C114409b932F06F9E2f4", + symbol: "sRUNE", + name: "Synth THORChain", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sRUNE.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xf2E08356588EC5cd9E437552Da87C0076b4970B0", + symbol: "sTRX", + name: "Synth TRON", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sTRX.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x918dA91Ccbc32B7a6A0cc4eCd5987bbab6E31e6D", + symbol: "sTSLA", + name: "Synth Tesla", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sTSLA.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x30635297E450b930f8693297eBa160D9e6c8eBcf", + symbol: "sUNI", + name: "Synth Uniswap", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sUNI.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x6A22e5e94388464181578Aa7A6B869e00fE27846", + symbol: "sXAG", + name: "Synth Silver Ounce", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXAG.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x261EfCdD24CeA98652B9700800a13DfBca4103fF", + symbol: "sXAU", + name: "Synth Gold Ounce", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXAU.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x5299d6F7472DCc137D7f3C4BcfBBB514BaBF341A", + symbol: "sXMR", + name: "Synth Monero", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXMR.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xa2B0fDe6D710e201d0d608e924A484d1A5fEd57c", + symbol: "sXRP", + name: "Synth Ripple", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXRP.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x2e59005c5c0f0a4D77CcA82653d48b46322EE5Cd", + symbol: "sXTZ", + name: "Synth Tezos", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXTZ.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x992058B7DB08F9734d84485bfbC243C4ee6954A7", + symbol: "sYFI", + name: "Synth yearn.finance", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sYFI.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x81ab848898b5ffD3354dbbEfb333D5D183eEDcB5", + name: "yUSD Synthetic Expiring 1 September 2020", + symbol: "yUSDSEP20", + decimals: 18 + }, + { + chainId: 1, + address: "0xB2FdD60AD80ca7bA89B9BAb3b5336c2601C020b4", + name: "yUSD Synthetic Expiring 1 October 2020", + symbol: "yUSDOCT20", + decimals: 18 + }, + { + chainId: 1, + address: "0x208d174775dc39fe18b1b374972f77ddec6c0f73", + name: "uUSDrBTC Synthetic Expiring 1 Oct 2020", + symbol: "uUSDrBTC-OCT", + decimals: 18 + }, + { + chainId: 1, + address: "0xf06ddacf71e2992e2122a1a0168c6967afdf63ce", + name: "uUSDrBTC Synthetic Expiring 31 Dec 2020", + symbol: "uUSDrBTC-DEC", + decimals: 18 + }, + { + chainId: 1, + address: "0xd16c79c8a39d44b2f3eb45d2019cd6a42b03e2a9", + name: "uUSDwETH Synthetic Expiring 31 Dec 2020", + symbol: "uUSDwETH-DEC", + decimals: 18 + }, + { + chainId: 1, + address: "0x3d995510f8d82c2ea341845932b5ddde0bead9a3", + name: "uGAS-JAN21 Token Expiring 31 Jan 2021", + symbol: "uGAS-JAN21", + decimals: 18 + }, + { + chainId: 1, + address: "0x90f802c7e8fb5d40b0de583e34c065a3bd2020d8", + name: "YD-ETH-MAR21 Token Expiring 31 Mar 2021", + symbol: "YD-ETH-MAR21", + decimals: 18 + }, + { + chainId: 1, + address: "0x002f0b1a71c5730cf2f4da1970a889207bdb6d0d", + name: "YD-BTC-MAR21 Token Expiring 31 Mar 2021", + symbol: "YD-BTC-MAR21", + decimals: 18 + }, + { + chainId: 1, + address: "0x1062ad0e59fa67fa0b27369113098cc941dd0d5f", + name: "UMA 35 Call Expirying 30 Apr 2021", + symbol: "UMAc35-0421", + decimals: 18 + }, + { + chainId: 1, + address: "0xf93340b1a3adf7eedcaec25fae8171d4b736e89f", + name: "pxUSD Synthetic USD Expiring 1 April 2021", + symbol: "pxUSD_MAR2021", + decimals: 18 + }, + { + chainId: 1, + address: "0x84bd083b1c8bf929f39c98bc17cf518f40154f58", + name: "Mario Cash Synthetic Token Expiring 15 January 2021", + symbol: "Mario Cash-JAN-2021", + decimals: 18 + }, + { + chainId: 1, + address: "0x81fab276aec924fbde190cf379783526d413cf70", + name: "uGAS-FEB21 Token Expiring 28 Feb 2021", + symbol: "uGAS-FEB21", + decimals: 18 + }, + { + chainId: 1, + address: "0x4e110603e70b0b5f1c403ee543b37e1f1244cf28", + name: "uGAS-MAR21 Token Expiring 31 Mar 2021", + symbol: "uGAS-MAR21", + decimals: 18 + }, + { + chainId: 1, + address: "0xcf55a7f92d5e0c6683debbc1fc20c0a6e056df13", + name: "Zelda Elastic Cash", + symbol: "Zelda Elastic Cash", + decimals: 18 + }, + { + chainId: 1, + address: "0x654eebac62240e6c56bab5f6adf7cfa74a894510", + name: "Zelda Spring Nuts Cash", + symbol: "Zelda Spring Nuts Cash", + decimals: 18 + }, + { + chainId: 1, + address: "0xa48920cc1ad85d8ea13af5d7be180c0338c306dd", + name: "Zelda Summer Nuts Cash", + symbol: "Zelda Summer Nuts Cash", + decimals: 18 + }, + { + chainId: 1, + address: "0x249a198d59b57fda5dda90630febc86fd8c7594c", + name: "Zelda Whirlwind Cash", + symbol: "Zelda Whirlwind Cash", + decimals: 18 + }, + { + chainId: 1, + address: "0x5ed1406873c9eb91f6f9a67ac4e152387c1132e7", + name: "Zelda Reinforced Cash", + symbol: "Zelda Reinforced Cash", + decimals: 18 + }, + { + chainId: 1, + address: "0x8104c9f13118320eefe5fbea8a44d600b85981ef", + name: "Mini Mario Summer Cash", + symbol: "Mini Mario Summer Cash", + decimals: 18 + }, + { + chainId: 1, + address: "0x69746c719e59674b147df25f50e7cfa0673cb625", + name: "Mini Mario Spring Cash", + symbol: "Mini Mario Spring Cash", + decimals: 18 + }, + { + chainId: 1, + address: "0x6b1257641d18791141f025eab36fb567c4b564ff", + name: "Bitcoin Dominance Token 31 March 2021", + symbol: "BTCDOM-MAR2021", + decimals: 18 + }, + { + chainId: 1, + address: "0x4e83b6287588a96321b2661c5e041845ff7814af", + name: "Altcoin Dominance Token 31 March 2021", + symbol: "ALTDOM-MAR2021", + decimals: 18 + }, + { + chainId: 1, + address: "0x59fec83ec709c893aedd1a144cf1828eb04127cd", + name: "pxGOLD Synthetic GOLD Expiring 31 May 2021", + symbol: "pxGOLD_MAY2021", + decimals: 18 + }, + { + chainId: 1, + address: "0x89337BFb7938804c3776C9FB921EccAf5ab76758", + name: "Compound Annualized Rate Future Expiring 28 March 2021", + symbol: "CAR-USDC-MAR21", + decimals: 18 + }, + { + chainId: 1, + address: "0xec58d3aefc9aaa2e0036fa65f70d569f49d9d1ed", + name: "uSTONKS Index Token April 2021", + symbol: "uSTONKS_APR21", + decimals: 6 + }, + { + chainId: 1, + address: "0xa6B9d7E3d76cF23549293Fb22c488E0Ea591A44e", + name: "uGAS-JUN21 Token Expiring 30 Jun 2021", + symbol: "uGAS-JUN21", + decimals: 18 + }, + { + chainId: 1, + address: "0xe813b65da6c38a04591aed3f082d32db7d53c382", + name: "Yield Dollar [WETH Dec 2021]", + symbol: "YD-ETH-DEC21", + decimals: 18 + }, + { + chainId: 1, + address: "0x4b606e9eb2228c70f44453afe5a73e1fea258ce1", + name: "pxUSD Synthetic USD Expiring 31 Mar 2022", + symbol: "pxUSD_MAR2022", + decimals: 18 + }, + { + chainId: 1, + address: "0x5247c0db4044fb6f97f32c7e1b48758019a5a912", + name: "pxGOLD Synthetic Gold Expiring 31 Mar 2022", + symbol: "pxGOLD_MAR2022", + decimals: 18 + }, + { + chainId: 1, + address: "0x56fb1acaff95c0b6ebcd17c8361a63d98b1a5a11", + name: "uForex CNYUSD Synthetic Token April 2021", + symbol: "uCNYUSD-APR", + decimals: 6 + }, + { + chainId: 1, + address: "0xd49fa405dce086c65d66ca1ca41f8e98583812b4", + name: "uForex EURUSD Synthetic Token April 2021", + symbol: "uEURUSD-APR", + decimals: 6 + }, + { + chainId: 1, + address: "0x29dddacba3b231ee8d673dd0f0fa759ea145561b", + name: "DEFI_PULSE_TOTAL_TVL Synthetic Token Expiring 15 April 2021", + symbol: "TVL_ALL_APRIL15", + decimals: 6 + }, + { + chainId: 1, + address: "0xcbe430927370e95b4b10cfc702c6017ec7abefc3", + name: "Yield Dollar [WETH Jun 2021]", + symbol: "YD-ETH-JUN21", + decimals: 18 + }, + { + chainId: 1, + address: "0x4b7fb448df91c8ed973494f8c8c4f12daf3a8521", + name: "Yield Dollar [renBTC Jun 2021]", + symbol: "YD-BTC-JUN21", + decimals: 8 + }, + { + chainId: 1, + address: "0x3108c33b6fb38efedaefd8b5f7ca01d5f5c7372d", + name: "Yield Dollar UMA 21", + symbol: "yUMA21", + decimals: 18 + }, + { + chainId: 1, + address: "0x0cae9e4d663793c2a2A0b211c1Cf4bBca2B9cAa7", + name: "Mirrored Amazon", + symbol: "MAMZN", + decimals: 18 + }, + { + chainId: 1, + address: "0x31c63146a635EB7465e5853020b39713AC356991", + name: "M US Oil", + symbol: "MUSO", + decimals: 18 + }, + { + chainId: 1, + address: "0x59A921Db27Dd6d4d974745B7FfC5c33932653442", + name: "M Google", + symbol: "MGOOGL", + decimals: 18 + }, + { + chainId: 1, + address: "0xf72FCd9DCF0190923Fadd44811E240Ef4533fc86", + name: "Mirrored ProShares", + symbol: "MVIXY", + decimals: 18 + }, + { + chainId: 1, + address: "0x56aA298a19C93c6801FDde870fA63EF75Cc0aF72", + name: "Mirrored Alibaba", + symbol: "MBABA", + decimals: 18 + }, + { + chainId: 1, + address: "0x0e99cC0535BB6251F6679Fa6E65d6d3b430e840B", + name: "Mirrored Facebook", + symbol: "MFB", + decimals: 18 + }, + { + chainId: 1, + address: "0x13B02c8dE71680e71F0820c996E4bE43c2F57d15", + name: "Mirrored Invesco QQ", + symbol: "MQQQ", + decimals: 18 + }, + { + chainId: 1, + address: "0x41BbEDd7286dAab5910a1f15d12CBda839852BD7", + name: "Mirrored Microsoft", + symbol: "MMSFT", + decimals: 18 + }, + { + chainId: 1, + address: "0x9d1555d8cB3C846Bb4f7D5B1B1080872c3166676", + name: "Mirrored iShares Si", + symbol: "MSLV", + decimals: 18 + }, + { + chainId: 1, + address: "0x21cA39943E91d704678F5D00b6616650F066fD63", + name: "Mirrored Tesla", + symbol: "MTSLA", + decimals: 18 + }, + { + chainId: 1, + address: "0xe82bbB62fA81d0701643d1675FB50ec52fD3Df92", + name: "DYDX Token", + symbol: "DYDX", + decimals: 18 + }, + { + chainId: 10, + address: "0xE405de8F52ba7559f9df3C368500B6E6ae6Cee49", + name: "sETH", + symbol: "Synth Ether", + decimals: 18 + }, + { + chainId: 10, + address: "0x298B9B95708152ff6968aafd889c6586e9169f1D", + name: "sBTC", + symbol: "Synth Bitcoin", + decimals: 18 + }, + { + chainId: 10, + address: "0xc5Db22719A06418028A40A9B5E9A7c02959D0d08", + name: "sLINK", + symbol: "Synth Link", + decimals: 18 + }, + { + chainId: 1, + address: "0x6B60eE11b73230045cF9095E6e43AE9Ea638e172", + name: "Shatner", + symbol: "SHAT", + decimals: 18 + }, + { + chainId: 1, + address: "0x7277a44D1325D81Ac58893002a1B40a41bea43fe", + name: "FAANG Index", + symbol: "FAANG", + decimals: 18 + }, + { + chainId: 1, + address: "0x76175599887730786bdA1545D0D7AcE8737fEBB1", + name: "ENS DAO", + symbol: "ENS", + decimals: 18 + }, + { + chainId: 1, + address: "0xa82AA729AE2F0d78e961D66db53949e27a9E866d", + name: "BMEX", + symbol: "BMEX", + decimals: 18 + } +]; +var UNSUPPORTED_TOKEN_LIST = { + name: name, + timestamp: timestamp, + version: version, + tags: tags, + logoURI: logoURI, + keywords: keywords, + tokens: tokens +}; + +function useAllLists() { + return useAppSelector(function (state) { return state.lists.byUrl; }); +} +/** + * Combine the tokens in map2 with the tokens on map1, where tokens on map1 take precedence + * @param map1 the base token map + * @param map2 the map of additioanl tokens to add to the base map + */ +function combineMaps(map1, map2) { + var chainIds = Object.keys(Object.keys(map1) + .concat(Object.keys(map2)) + .reduce(function (memo, value) { + memo[value] = true; + return memo; + }, {})).map(function (id) { return parseInt(id); }); + return chainIds.reduce(function (memo, chainId) { + memo[chainId] = __assign(__assign({}, map2[chainId]), map1[chainId]); + return memo; + }, {}); +} +// merge tokens contained within lists from urls +function useCombinedTokenMapFromUrls(urls) { + var lists = useAllLists(); + return React.useMemo(function () { + if (!urls) + return {}; + return (urls + .slice() + // sort by priority so top priority goes last + .sort(sortByListPriority) + .reduce(function (allTokens, currentUrl) { + var _a; + var current = (_a = lists[currentUrl]) === null || _a === void 0 ? void 0 : _a.current; + if (!current) + return allTokens; + try { + return combineMaps(allTokens, tokensToChainTokenMap(current)); + } + catch (error) { + console.error('Could not show token list due to error', error); + return allTokens; + } + }, {})); + }, [lists, urls]); +} +// filter out unsupported lists +function useActiveListUrls() { + var activeListUrls = useAppSelector(function (state) { return state.lists.activeListUrls; }); + return React.useMemo(function () { return activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.filter(function (url) { return !UNSUPPORTED_LIST_URLS.includes(url); }); }, [activeListUrls]); +} +function useInactiveListUrls() { + var lists = useAllLists(); + var allActiveListUrls = useActiveListUrls(); + return React.useMemo(function () { return Object.keys(lists).filter(function (url) { return !(allActiveListUrls === null || allActiveListUrls === void 0 ? void 0 : allActiveListUrls.includes(url)) && !UNSUPPORTED_LIST_URLS.includes(url); }); }, [lists, allActiveListUrls]); +} +// get all the tokens from active lists, combine with local default tokens +function useCombinedActiveList() { + var activeListUrls = useActiveListUrls(); + var activeTokens = useCombinedTokenMapFromUrls(activeListUrls); + return activeTokens; +} +// list of tokens not supported on interface for various reasons, used to show warnings and prevent swaps and adds +function useUnsupportedTokenList() { + // get hard-coded broken tokens + var brokenListMap = React.useMemo(function () { return tokensToChainTokenMap(BROKEN_LIST); }, []); + // get hard-coded list of unsupported tokens + var localUnsupportedListMap = React.useMemo(function () { return tokensToChainTokenMap(UNSUPPORTED_TOKEN_LIST); }, []); + // get dynamic list of unsupported tokens + var loadedUnsupportedListMap = useCombinedTokenMapFromUrls(UNSUPPORTED_LIST_URLS); + // format into one token address map + return React.useMemo(function () { return combineMaps(brokenListMap, combineMaps(localUnsupportedListMap, loadedUnsupportedListMap)); }, [brokenListMap, localUnsupportedListMap, loadedUnsupportedListMap]); +} +function useIsListActive(url) { + var activeListUrls = useActiveListUrls(); + return Boolean(activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(url)); +} + +// reduce token map into standard address <-> Token mapping, optionally include user added tokens +function useTokensFromMap(tokenMap, includeUserAdded) { + var chainId = useActiveWeb3React().chainId; + var userAddedTokens = useUserAddedTokens(); + return React.useMemo(function () { + var _a; + if (!chainId) + return {}; + // reduce to just tokens + var mapWithoutUrls = Object.keys((_a = tokenMap[chainId]) !== null && _a !== void 0 ? _a : {}).reduce(function (newMap, address) { + newMap[address] = tokenMap[chainId][address].token; + return newMap; + }, {}); + if (includeUserAdded) { + return (userAddedTokens + // reduce into all ALL_TOKENS filtered by the current chain + .reduce(function (tokenMap, token) { + tokenMap[token.address] = token; + return tokenMap; + }, __assign({}, mapWithoutUrls))); + } + return mapWithoutUrls; + }, [chainId, userAddedTokens, tokenMap, includeUserAdded]); +} +function useAllTokens() { + var allTokens = useCombinedActiveList(); + return useTokensFromMap(allTokens, true); +} +function useUnsupportedTokens() { + var chainId = useActiveWeb3React().chainId; + var listsByUrl = useAllLists(); + var unsupportedTokensMap = useUnsupportedTokenList(); + var unsupportedTokens = useTokensFromMap(unsupportedTokensMap, false); + // checks the default L2 lists to see if `bridgeInfo` has an L1 address value that is unsupported + var l2InferredBlockedTokens = React.useMemo(function () { + if (!chainId || !L2_CHAIN_IDS.includes(chainId)) { + return {}; + } + if (!listsByUrl) { + return {}; + } + var listUrl = CHAIN_INFO[chainId].defaultListUrl; + var list = listsByUrl[listUrl].current; + if (!list) { + return {}; + } + var unsupportedSet = new Set(Object.keys(unsupportedTokens)); + return list.tokens.reduce(function (acc, tokenInfo) { + var _a; + var _b; + var bridgeInfo = (_b = tokenInfo.extensions) === null || _b === void 0 ? void 0 : _b.bridgeInfo; + if (bridgeInfo && + bridgeInfo[SupportedChainId.MAINNET] && + bridgeInfo[SupportedChainId.MAINNET].tokenAddress && + unsupportedSet.has(bridgeInfo[SupportedChainId.MAINNET].tokenAddress)) { + var address = bridgeInfo[SupportedChainId.MAINNET].tokenAddress; + // don't rely on decimals--it's possible that a token could be bridged w/ different decimals on the L2 + return __assign(__assign({}, acc), (_a = {}, _a[address] = new sdkCore.Token(SupportedChainId.MAINNET, address, tokenInfo.decimals), _a)); + } + return acc; + }, {}); + }, [chainId, listsByUrl, unsupportedTokens]); + return __assign(__assign({}, unsupportedTokens), l2InferredBlockedTokens); +} +function useSearchInactiveTokenLists(search, minResults) { + if (minResults === void 0) { minResults = 10; } + var lists = useAllLists(); + var inactiveUrls = useInactiveListUrls(); + var chainId = useActiveWeb3React().chainId; + var activeTokens = useAllTokens(); + return React.useMemo(function () { + var e_1, _a, e_2, _b; + if (!search || search.trim().length === 0) + return []; + var tokenFilter = getTokenFilter(search); + var result = []; + var addressSet = {}; + try { + for (var inactiveUrls_1 = __values(inactiveUrls), inactiveUrls_1_1 = inactiveUrls_1.next(); !inactiveUrls_1_1.done; inactiveUrls_1_1 = inactiveUrls_1.next()) { + var url = inactiveUrls_1_1.value; + var list = lists[url].current; + if (!list) + continue; + try { + for (var _c = (e_2 = void 0, __values(list.tokens)), _d = _c.next(); !_d.done; _d = _c.next()) { + var tokenInfo = _d.value; + if (tokenInfo.chainId === chainId && tokenFilter(tokenInfo)) { + var wrapped = new WrappedTokenInfo(tokenInfo, list); + if (!(wrapped.address in activeTokens) && !addressSet[wrapped.address]) { + addressSet[wrapped.address] = true; + result.push(wrapped); + if (result.length >= minResults) + return result; + } + } + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_d && !_d.done && (_b = _c.return)) _b.call(_c); + } + finally { if (e_2) throw e_2.error; } + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (inactiveUrls_1_1 && !inactiveUrls_1_1.done && (_a = inactiveUrls_1.return)) _a.call(inactiveUrls_1); + } + finally { if (e_1) throw e_1.error; } + } + return result; + }, [activeTokens, chainId, inactiveUrls, lists, minResults, search]); +} +function useIsTokenActive(token) { + var activeTokens = useAllTokens(); + if (!activeTokens || !token) { + return false; + } + return !!activeTokens[token.address]; +} +// Check if currency is included in custom list from user storage +function useIsUserAddedToken(currency) { + var userAddedTokens = useUserAddedTokens(); + if (!currency) { + return false; + } + return !!userAddedTokens.find(function (token) { return currency.equals(token); }); +} +// undefined if invalid or does not exist +// null if loading or null was passed +// otherwise returns the token +function useToken(tokenAddress) { + var tokens = useAllTokens(); + return useTokenFromMap(tokens, tokenAddress); +} +function useCurrency(currencyId) { + var tokens = useAllTokens(); + return useCurrencyFromMap(tokens, currencyId); +} + +var updateMatchesDarkMode = toolkit.createAction('user/updateMatchesDarkMode'); +var updateUserDarkMode = toolkit.createAction('user/updateUserDarkMode'); +var updateUserExpertMode = toolkit.createAction('user/updateUserExpertMode'); +var updateUserLocale = toolkit.createAction('user/updateUserLocale'); +var updateShowSurveyPopup = toolkit.createAction('user/updateShowSurveyPopup'); +var updateUserClientSideRouter = toolkit.createAction('user/updateUserClientSideRouter'); +var updateHideClosedPositions = toolkit.createAction('user/hideClosedPositions'); +var updateUserSlippageTolerance = toolkit.createAction('user/updateUserSlippageTolerance'); +var updateUserDeadline = toolkit.createAction('user/updateUserDeadline'); +var addSerializedToken = toolkit.createAction('user/addSerializedToken'); +var removeSerializedToken = toolkit.createAction('user/removeSerializedToken'); +var addSerializedPair = toolkit.createAction('user/addSerializedPair'); +var removeSerializedPair = toolkit.createAction('user/removeSerializedPair'); + +function serializeToken(token) { + return { + chainId: token.chainId, + address: token.address, + decimals: token.decimals, + symbol: token.symbol, + name: token.name, + }; +} +function deserializeToken(serializedToken) { + return new sdkCore.Token(serializedToken.chainId, serializedToken.address, serializedToken.decimals, serializedToken.symbol, serializedToken.name); +} +function useIsDarkMode() { + var _a = useAppSelector(function (_a) { + var _b = _a.user, matchesDarkMode = _b.matchesDarkMode, userDarkMode = _b.userDarkMode; + return ({ + userDarkMode: userDarkMode, + matchesDarkMode: matchesDarkMode, + }); + }, reactRedux.shallowEqual), userDarkMode = _a.userDarkMode, matchesDarkMode = _a.matchesDarkMode; + return userDarkMode === null ? matchesDarkMode : userDarkMode; +} +function useDarkModeManager() { + var dispatch = useAppDispatch(); + var darkMode = useIsDarkMode(); + var toggleSetDarkMode = React.useCallback(function () { + dispatch(updateUserDarkMode({ userDarkMode: !darkMode })); + }, [darkMode, dispatch]); + return [darkMode, toggleSetDarkMode]; +} +function useUserLocale() { + return useAppSelector(function (state) { return state.user.userLocale; }); +} +function useIsExpertMode() { + return useAppSelector(function (state) { return state.user.userExpertMode; }); +} +function useExpertModeManager() { + var dispatch = useAppDispatch(); + var expertMode = useIsExpertMode(); + var toggleSetExpertMode = React.useCallback(function () { + dispatch(updateUserExpertMode({ userExpertMode: !expertMode })); + }, [expertMode, dispatch]); + return [expertMode, toggleSetExpertMode]; +} +function useClientSideRouter() { + var dispatch = useAppDispatch(); + var clientSideRouter = useAppSelector(function (state) { return Boolean(state.user.userClientSideRouter); }); + var setClientSideRouter = React.useCallback(function (newClientSideRouter) { + dispatch(updateUserClientSideRouter({ userClientSideRouter: newClientSideRouter })); + }, [dispatch]); + return [clientSideRouter, setClientSideRouter]; +} +function useSetUserSlippageTolerance() { + var dispatch = useAppDispatch(); + return React.useCallback(function (userSlippageTolerance) { + var value; + try { + value = + userSlippageTolerance === 'auto' ? 'auto' : JSBI__default["default"].toNumber(userSlippageTolerance.multiply(10000).quotient); + } + catch (error) { + value = 'auto'; + } + dispatch(updateUserSlippageTolerance({ + userSlippageTolerance: value, + })); + }, [dispatch]); +} +/** + * Return the user's slippage tolerance, from the redux store, and a function to update the slippage tolerance + */ +function useUserSlippageTolerance() { + var userSlippageTolerance = useAppSelector(function (state) { + return state.user.userSlippageTolerance; + }); + return React.useMemo(function () { return (userSlippageTolerance === 'auto' ? 'auto' : new sdkCore.Percent(userSlippageTolerance, 10000)); }, [userSlippageTolerance]); +} +/** + * Same as above but replaces the auto with a default value + * @param defaultSlippageTolerance the default value to replace auto with + */ +function useUserSlippageToleranceWithDefault(defaultSlippageTolerance) { + var allowedSlippage = useUserSlippageTolerance(); + return React.useMemo(function () { return (allowedSlippage === 'auto' ? defaultSlippageTolerance : allowedSlippage); }, [allowedSlippage, defaultSlippageTolerance]); +} +function useUserTransactionTTL() { + var chainId = useActiveWeb3React().chainId; + var dispatch = useAppDispatch(); + var userDeadline = useAppSelector(function (state) { return state.user.userDeadline; }); + var onL2 = Boolean(chainId && L2_CHAIN_IDS.includes(chainId)); + var deadline = onL2 ? L2_DEADLINE_FROM_NOW : userDeadline; + var setUserDeadline = React.useCallback(function (userDeadline) { + dispatch(updateUserDeadline({ userDeadline: userDeadline })); + }, [dispatch]); + return [deadline, setUserDeadline]; +} +function useAddUserToken() { + var dispatch = useAppDispatch(); + return React.useCallback(function (token) { + dispatch(addSerializedToken({ serializedToken: serializeToken(token) })); + }, [dispatch]); +} +function useRemoveUserAddedToken() { + var dispatch = useAppDispatch(); + return React.useCallback(function (chainId, address) { + dispatch(removeSerializedToken({ chainId: chainId, address: address })); + }, [dispatch]); +} +function useUserAddedTokens() { + var chainId = useActiveWeb3React().chainId; + var serializedTokensMap = useAppSelector(function (_a) { + var tokens = _a.user.tokens; + return tokens; + }); + return React.useMemo(function () { + if (!chainId) + return []; + var tokenMap = (serializedTokensMap === null || serializedTokensMap === void 0 ? void 0 : serializedTokensMap[chainId]) + ? Object.values(serializedTokensMap[chainId]).map(deserializeToken) + : []; + return tokenMap; + }, [serializedTokensMap, chainId]); +} + +var EXPLORER_HOSTNAMES = { + 'etherscan.io': true, + 'ropsten.etherscan.io': true, + 'rinkeby.etherscan.io': true, + 'kovan.etherscan.io': true, + 'goerli.etherscan.io': true, + 'optimistic.etherscan.io': true, + 'kovan-optimistic.etherscan.io': true, + 'rinkeby-explorer.arbitrum.io': true, + 'arbiscan.io': true, +}; +/** + * Returns the anonymized version of the given href, i.e. one that does not leak user information + * @param href the link to anonymize, i.e. remove any personal data from + * @return string anonymized version of the given href + */ +function anonymizeLink(href) { + try { + var url = new URL(href); + if (EXPLORER_HOSTNAMES[url.hostname]) { + var pathPieces = url.pathname.split('/'); + var anonymizedPath = pathPieces.map(function (pc) { return (/0x[a-fA-F0-9]+/.test(pc) ? '***' : pc); }).join('/'); + return url.protocol + "//" + url.hostname + anonymizedPath; + } + return href; + } + catch (error) { + return href; + } +} + +var ButtonText = styled__default["default"].button(templateObject_1$W || (templateObject_1$W = __makeTemplateObject(["\n outline: none;\n border: none;\n font-size: inherit;\n padding: 0;\n margin: 0;\n background: none;\n cursor: pointer;\n\n :hover {\n opacity: 0.7;\n }\n\n :focus {\n text-decoration: underline;\n }\n"], ["\n outline: none;\n border: none;\n font-size: inherit;\n padding: 0;\n margin: 0;\n background: none;\n cursor: pointer;\n\n :hover {\n opacity: 0.7;\n }\n\n :focus {\n text-decoration: underline;\n }\n"]))); +var CloseIcon = styled__default["default"](reactFeather.X)(templateObject_2$D || (templateObject_2$D = __makeTemplateObject(["\n cursor: pointer;\n"], ["\n cursor: pointer;\n" + // for wrapper react feather icons +]))); +// for wrapper react feather icons +var IconWrapper = styled__default["default"].div(templateObject_3$w || (templateObject_3$w = __makeTemplateObject(["\n display: flex;\n align-items: center;\n justify-content: center;\n width: ", ";\n height: ", ";\n margin-right: ", ";\n margin-left: ", ";\n & > * {\n stroke: ", ";\n }\n"], ["\n display: flex;\n align-items: center;\n justify-content: center;\n width: ", ";\n height: ", ";\n margin-right: ", ";\n margin-left: ", ";\n & > * {\n stroke: ", ";\n }\n" + // A button that triggers some onClick result, but looks like a link. +])), function (_a) { + var size = _a.size; + return size !== null && size !== void 0 ? size : '20px'; +}, function (_a) { + var size = _a.size; + return size !== null && size !== void 0 ? size : '20px'; +}, function (_a) { + var marginRight = _a.marginRight; + return marginRight !== null && marginRight !== void 0 ? marginRight : 0; +}, function (_a) { + var marginLeft = _a.marginLeft; + return marginLeft !== null && marginLeft !== void 0 ? marginLeft : 0; +}, function (_a) { + var theme = _a.theme, stroke = _a.stroke; + return stroke !== null && stroke !== void 0 ? stroke : theme.blue1; +}); +// A button that triggers some onClick result, but looks like a link. +var LinkStyledButton = styled__default["default"].button(templateObject_4$m || (templateObject_4$m = __makeTemplateObject(["\n border: none;\n text-decoration: none;\n background: none;\n\n cursor: ", ";\n color: ", ";\n font-weight: 500;\n\n :hover {\n text-decoration: ", ";\n }\n\n :focus {\n outline: none;\n text-decoration: ", ";\n }\n\n :active {\n text-decoration: none;\n }\n"], ["\n border: none;\n text-decoration: none;\n background: none;\n\n cursor: ", ";\n color: ", ";\n font-weight: 500;\n\n :hover {\n text-decoration: ", ";\n }\n\n :focus {\n outline: none;\n text-decoration: ", ";\n }\n\n :active {\n text-decoration: none;\n }\n" + // An internal link from the react-router-dom library that is correctly styled +])), function (_a) { + var disabled = _a.disabled; + return (disabled ? 'default' : 'pointer'); +}, function (_a) { + var theme = _a.theme, disabled = _a.disabled; + return (disabled ? theme.text2 : theme.primary1); +}, function (_a) { + var disabled = _a.disabled; + return (disabled ? null : 'underline'); +}, function (_a) { + var disabled = _a.disabled; + return (disabled ? null : 'underline'); +}); +// An internal link from the react-router-dom library that is correctly styled +var StyledInternalLink = styled__default["default"](reactRouterDom.Link)(templateObject_5$j || (templateObject_5$j = __makeTemplateObject(["\n text-decoration: none;\n cursor: pointer;\n color: ", ";\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 text-decoration: none;\n cursor: pointer;\n color: ", ";\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"])), function (_a) { + var theme = _a.theme; + return theme.primary1; +}); +var StyledLink = styled__default["default"].a(templateObject_6$d || (templateObject_6$d = __makeTemplateObject(["\n text-decoration: none;\n cursor: pointer;\n color: ", ";\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 text-decoration: none;\n cursor: pointer;\n color: ", ";\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"])), function (_a) { + var theme = _a.theme; + return theme.primary1; +}); +var LinkIconWrapper = styled__default["default"].a(templateObject_7$c || (templateObject_7$c = __makeTemplateObject(["\n text-decoration: none;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n text-decoration: none;\n opacity: 0.7;\n }\n\n :focus {\n outline: none;\n text-decoration: none;\n }\n\n :active {\n text-decoration: none;\n }\n"], ["\n text-decoration: none;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n text-decoration: none;\n opacity: 0.7;\n }\n\n :focus {\n outline: none;\n text-decoration: none;\n }\n\n :active {\n text-decoration: none;\n }\n"]))); +var LinkIcon = styled__default["default"](reactFeather.ExternalLink)(templateObject_8$9 || (templateObject_8$9 = __makeTemplateObject(["\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ", ";\n"], ["\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.blue1; +}); +var TrashIcon = styled__default["default"](reactFeather.Trash)(templateObject_9$8 || (templateObject_9$8 = __makeTemplateObject(["\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ", ";\n\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n opacity: 0.7;\n }\n"], ["\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ", ";\n\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n opacity: 0.7;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text3; +}); +var rotateImg = styled.keyframes(templateObject_10$6 || (templateObject_10$6 = __makeTemplateObject(["\n 0% {\n transform: perspective(1000px) rotateY(0deg);\n }\n\n 100% {\n transform: perspective(1000px) rotateY(360deg);\n }\n"], ["\n 0% {\n transform: perspective(1000px) rotateY(0deg);\n }\n\n 100% {\n transform: perspective(1000px) rotateY(360deg);\n }\n"]))); +styled__default["default"].img(templateObject_11$5 || (templateObject_11$5 = __makeTemplateObject(["\n animation: ", " 5s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n padding: 2rem 0 0 0;\n filter: drop-shadow(0px 2px 4px rgba(0, 0, 0, 0.15));\n"], ["\n animation: ", " 5s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n padding: 2rem 0 0 0;\n filter: drop-shadow(0px 2px 4px rgba(0, 0, 0, 0.15));\n"])), rotateImg); +function handleClickExternalLink(event) { + var _a = event.currentTarget, target = _a.target, href = _a.href; + var anonymizedHref = anonymizeLink(href); + // don't prevent default, don't redirect if it's a new tab + if (target === '_blank' || event.ctrlKey || event.metaKey) { + ReactGA__default["default"].outboundLink({ label: anonymizedHref }, function () { + console.debug('Fired outbound link event', anonymizedHref); + }); + } + else { + event.preventDefault(); + // send a ReactGA event and then trigger a location change + ReactGA__default["default"].outboundLink({ label: anonymizedHref }, function () { + window.location.href = anonymizedHref; + }); + } +} +/** + * Outbound link that handles firing google analytics events + */ +function ExternalLink(_a) { + var _b = _a.target, target = _b === void 0 ? '_blank' : _b, href = _a.href, _c = _a.rel, rel = _c === void 0 ? 'noopener noreferrer' : _c, rest = __rest(_a, ["target", "href", "rel"]); + return jsxRuntime.jsx(StyledLink, __assign({ target: target, rel: rel, href: href, onClick: handleClickExternalLink }, rest), void 0); +} +function ExternalLinkIcon(_a) { + var _b = _a.target, target = _b === void 0 ? '_blank' : _b, href = _a.href, _c = _a.rel, rel = _c === void 0 ? 'noopener noreferrer' : _c, rest = __rest(_a, ["target", "href", "rel"]); + return (jsxRuntime.jsx(LinkIconWrapper, __assign({ target: target, rel: rel, href: href, onClick: handleClickExternalLink }, rest, { children: jsxRuntime.jsx(LinkIcon, {}, void 0) }), void 0)); +} +var rotate$1 = styled.keyframes(templateObject_12$5 || (templateObject_12$5 = __makeTemplateObject(["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"], ["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"]))); +var Spinner$1 = styled__default["default"].img(templateObject_13$2 || (templateObject_13$2 = __makeTemplateObject(["\n animation: 2s ", " linear infinite;\n width: 16px;\n height: 16px;\n"], ["\n animation: 2s ", " linear infinite;\n width: 16px;\n height: 16px;\n"])), rotate$1); +styled__default["default"](StyledInternalLink)(templateObject_14$2 || (templateObject_14$2 = __makeTemplateObject(["\n color: ", ";\n"], ["\n color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.text1; +}); +var CustomLightSpinner = styled__default["default"](Spinner$1)(templateObject_15$1 || (templateObject_15$1 = __makeTemplateObject(["\n height: ", ";\n width: ", ";\n"], ["\n height: ", ";\n width: ", ";\n"])), function (_a) { + var size = _a.size; + return size; +}, function (_a) { + var size = _a.size; + return size; +}); +var HideSmall = styled__default["default"].span(templateObject_17 || (templateObject_17 = __makeTemplateObject(["\n ", ";\n"], ["\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToSmall(templateObject_16 || (templateObject_16 = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); +}); +styled__default["default"].span(templateObject_19 || (templateObject_19 = __makeTemplateObject(["\n ", ";\n"], ["\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToExtraSmall(templateObject_18 || (templateObject_18 = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); +}); +styled__default["default"].span(templateObject_21 || (templateObject_21 = __makeTemplateObject(["\n display: none;\n ", ";\n"], ["\n display: none;\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToSmall(templateObject_20 || (templateObject_20 = __makeTemplateObject(["\n display: block;\n "], ["\n display: block;\n "]))); +}); +var Separator$1 = styled__default["default"].div(templateObject_22 || (templateObject_22 = __makeTemplateObject(["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"], ["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}); +var templateObject_1$W, templateObject_2$D, templateObject_3$w, templateObject_4$m, templateObject_5$j, templateObject_6$d, templateObject_7$c, templateObject_8$9, templateObject_9$8, templateObject_10$6, templateObject_11$5, templateObject_12$5, templateObject_13$2, templateObject_14$2, templateObject_15$1, templateObject_16, templateObject_17, templateObject_18, templateObject_19, templateObject_20, templateObject_21, templateObject_22; + +var MEDIA_WIDTHS = { + upToExtraSmall: 500, + upToSmall: 720, + upToMedium: 960, + upToLarge: 1280, +}; +// Migrating to a standard z-index system https://getbootstrap.com/docs/5.0/layout/z-index/ +// Please avoid using deprecated numbers +var Z_INDEX; +(function (Z_INDEX) { + Z_INDEX[Z_INDEX["deprecated_zero"] = 0] = "deprecated_zero"; + Z_INDEX[Z_INDEX["deprecated_content"] = 1] = "deprecated_content"; + Z_INDEX[Z_INDEX["dropdown"] = 1000] = "dropdown"; + Z_INDEX[Z_INDEX["sticky"] = 1020] = "sticky"; + Z_INDEX[Z_INDEX["fixed"] = 1030] = "fixed"; + Z_INDEX[Z_INDEX["modalBackdrop"] = 1040] = "modalBackdrop"; + Z_INDEX[Z_INDEX["offcanvas"] = 1050] = "offcanvas"; + Z_INDEX[Z_INDEX["modal"] = 1060] = "modal"; + Z_INDEX[Z_INDEX["popover"] = 1070] = "popover"; + Z_INDEX[Z_INDEX["tooltip"] = 1080] = "tooltip"; +})(Z_INDEX || (Z_INDEX = {})); +Object.keys(MEDIA_WIDTHS).reduce(function (accumulator, size) { + accumulator[size] = function (a, b, c) { return styled.css(templateObject_1$V || (templateObject_1$V = __makeTemplateObject(["\n @media (max-width: ", "px) {\n ", "\n }\n "], ["\n @media (max-width: ", "px) {\n ", "\n }\n "])), MEDIA_WIDTHS[size], styled.css(a, b, c)); }; + return accumulator; +}, {}); +var TextWrapper$1 = styled__default["default"](rebass.Text)(templateObject_4$l || (templateObject_4$l = __makeTemplateObject(["\n color: ", ";\n"], ["\n color: ", ";\n" + /** + * Preset styles of the Rebass Text component + */ +])), function (_a) { + var color = _a.color, theme = _a.theme; + return theme[color]; +}); +/** + * Preset styles of the Rebass Text component + */ +var ThemedText = { + Main: function (props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text2' }, props), void 0); + }, + Link: function (props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'primary1' }, props), void 0); + }, + Label: function (props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 600, color: 'text1' }, props), void 0); + }, + Black: function (props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text1' }, props), void 0); + }, + White: function (props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'white' }, props), void 0); + }, + Body: function (props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 400, fontSize: 16, color: 'text1' }, props), void 0); + }, + LargeHeader: function (props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 600, fontSize: 24 }, props), void 0); + }, + MediumHeader: function (props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, fontSize: 20 }, props), void 0); + }, + SubHeader: function (props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 400, fontSize: 14 }, props), void 0); + }, + Small: function (props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, fontSize: 11 }, props), void 0); + }, + Blue: function (props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'blue1' }, props), void 0); + }, + Yellow: function (props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'yellow3' }, props), void 0); + }, + DarkGray: function (props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text3' }, props), void 0); + }, + Gray: function (props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'bg3' }, props), void 0); + }, + Italic: function (props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, fontSize: 12, fontStyle: 'italic', color: 'text2' }, props), void 0); + }, + Error: function (_a) { + var error = _a.error, props = __rest(_a, ["error"]); + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: error ? 'red1' : 'text2' }, props), void 0); + }, +}; +styled.createGlobalStyle(templateObject_5$i || (templateObject_5$i = __makeTemplateObject(["\nhtml {\n color: ", ";\n background-color: ", " !important;\n}\n\na {\n color: ", "; \n}\n"], ["\nhtml {\n color: ", ";\n background-color: ", " !important;\n}\n\na {\n color: ", "; \n}\n"])), function (_a) { + var theme = _a.theme; + return theme.text1; +}, function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var theme = _a.theme; + return theme.blue1; +}); +var templateObject_1$V, templateObject_4$l, templateObject_5$i; + +var Row = styled__default["default"](styledComponents.Box)(templateObject_1$U || (templateObject_1$U = __makeTemplateObject(["\n width: ", ";\n display: flex;\n padding: 0;\n align-items: ", ";\n justify-content: ", ";\n padding: ", ";\n border: ", ";\n border-radius: ", ";\n"], ["\n width: ", ";\n display: flex;\n padding: 0;\n align-items: ", ";\n justify-content: ", ";\n padding: ", ";\n border: ", ";\n border-radius: ", ";\n"])), function (_a) { + var width = _a.width; + return width !== null && width !== void 0 ? width : '100%'; +}, function (_a) { + var align = _a.align; + return align !== null && align !== void 0 ? align : 'center'; +}, function (_a) { + var justify = _a.justify; + return justify !== null && justify !== void 0 ? justify : 'flex-start'; +}, function (_a) { + var padding = _a.padding; + return padding; +}, function (_a) { + var border = _a.border; + return border; +}, function (_a) { + var borderRadius = _a.borderRadius; + return borderRadius; +}); +var RowBetween = styled__default["default"](Row)(templateObject_2$C || (templateObject_2$C = __makeTemplateObject(["\n justify-content: space-between;\n"], ["\n justify-content: space-between;\n"]))); +styled__default["default"].div(templateObject_3$v || (templateObject_3$v = __makeTemplateObject(["\n display: flex;\n align-items: flex-end;\n"], ["\n display: flex;\n align-items: flex-end;\n"]))); +var AutoRow = styled__default["default"](Row)(templateObject_4$k || (templateObject_4$k = __makeTemplateObject(["\n flex-wrap: wrap;\n margin: ", ";\n justify-content: ", ";\n\n & > * {\n margin: ", " !important;\n }\n"], ["\n flex-wrap: wrap;\n margin: ", ";\n justify-content: ", ";\n\n & > * {\n margin: ", " !important;\n }\n"])), function (_a) { + var gap = _a.gap; + return gap && "-" + gap; +}, function (_a) { + var justify = _a.justify; + return justify && justify; +}, function (_a) { + var gap = _a.gap; + return gap; +}); +var RowFixed = styled__default["default"](Row)(templateObject_5$h || (templateObject_5$h = __makeTemplateObject(["\n width: fit-content;\n margin: ", ";\n"], ["\n width: fit-content;\n margin: ", ";\n"])), function (_a) { + var gap = _a.gap; + return gap && "-" + gap; +}); +var templateObject_1$U, templateObject_2$C, templateObject_3$v, templateObject_4$k, templateObject_5$h; + +var _a$a, _b$2, _c$2, _d$1; +var L2Icon = styled__default["default"].img(templateObject_1$T || (templateObject_1$T = __makeTemplateObject(["\n width: 24px;\n height: 24px;\n margin-right: 16px;\n"], ["\n width: 24px;\n height: 24px;\n margin-right: 16px;\n"]))); +styled__default["default"].div(templateObject_2$B || (templateObject_2$B = __makeTemplateObject(["\n align-items: center;\n display: flex;\n justify-content: flex-start;\n padding: 0 20px 20px 20px;\n"], ["\n align-items: center;\n display: flex;\n justify-content: flex-start;\n padding: 0 20px 20px 20px;\n"]))); +var BodyText = styled__default["default"].div(templateObject_3$u || (templateObject_3$u = __makeTemplateObject(["\n color: ", ";\n display: flex;\n align-items: center;\n justify-content: flex-start;\n margin: 8px;\n font-size: 14px;\n"], ["\n color: ", ";\n display: flex;\n align-items: center;\n justify-content: flex-start;\n margin: 8px;\n font-size: 14px;\n"])), function (_a) { + var color = _a.color; + return color; +}); +var RootWrapper = styled__default["default"].div(templateObject_4$j || (templateObject_4$j = __makeTemplateObject(["\n position: relative;\n margin-top: 16px;\n"], ["\n position: relative;\n margin-top: 16px;\n"]))); +var SHOULD_SHOW_ALERT = (_a$a = {}, + _a$a[SupportedChainId.OPTIMISM] = true, + _a$a[SupportedChainId.OPTIMISTIC_KOVAN] = true, + _a$a[SupportedChainId.ARBITRUM_ONE] = true, + _a$a[SupportedChainId.ARBITRUM_RINKEBY] = true, + _a$a[SupportedChainId.POLYGON] = true, + _a$a[SupportedChainId.POLYGON_MUMBAI] = true, + _a$a); +var BG_COLORS_BY_DARK_MODE_AND_CHAIN_ID = { + dark: (_b$2 = {}, + _b$2[SupportedChainId.POLYGON] = 'radial-gradient(100% 93.36% at 0% 6.64%, rgba(160, 108, 247, 0.1) 0%, rgba(82, 32, 166, 0.1) 100%)', + _b$2[SupportedChainId.POLYGON_MUMBAI] = 'radial-gradient(100% 93.36% at 0% 6.64%, rgba(160, 108, 247, 0.1) 0%, rgba(82, 32, 166, 0.1) 100%)', + _b$2[SupportedChainId.OPTIMISM] = 'radial-gradient(948% 292% at 42% 0%, rgba(255, 58, 212, 0.01) 0%, rgba(255, 255, 255, 0.04) 100%),radial-gradient(98% 96% at 2% 0%, rgba(255, 39, 39, 0.01) 0%, rgba(235, 0, 255, 0.01) 96%)', + _b$2[SupportedChainId.OPTIMISTIC_KOVAN] = 'radial-gradient(948% 292% at 42% 0%, rgba(255, 58, 212, 0.04) 0%, rgba(255, 255, 255, 0.04) 100%),radial-gradient(98% 96% at 2% 0%, rgba(255, 39, 39, 0.04) 0%, rgba(235, 0, 255, 0.01 96%)', + _b$2[SupportedChainId.ARBITRUM_ONE] = 'radial-gradient(285% 8200% at 30% 50%, rgba(40, 160, 240, 0.01) 0%, rgba(219, 255, 0, 0) 100%),radial-gradient(75% 75% at 0% 0%, rgba(150, 190, 220, 0.05) 0%, rgba(33, 114, 229, 0.05) 100%), hsla(0, 0%, 100%, 0.05)', + _b$2[SupportedChainId.ARBITRUM_RINKEBY] = 'radial-gradient(285% 8200% at 30% 50%, rgba(40, 160, 240, 0.05) 0%, rgba(219, 255, 0, 0) 100%),radial-gradient(75% 75% at 0% 0%, rgba(150, 190, 220, 0.05) 0%, rgba(33, 114, 229, 0.1) 100%), hsla(0, 0%, 100%, 0.05)', + _b$2), + light: (_c$2 = {}, + _c$2[SupportedChainId.POLYGON] = 'radial-gradient(182.71% 205.59% at 2.81% 7.69%, rgba(130, 71, 229, 0.2) 0%, rgba(167, 202, 255, 0.2) 100%)', + _c$2[SupportedChainId.POLYGON_MUMBAI] = 'radial-gradient(182.71% 205.59% at 2.81% 7.69%, rgba(130, 71, 229, 0.2) 0%, rgba(167, 202, 255, 0.2) 100%)', + _c$2[SupportedChainId.OPTIMISM] = 'radial-gradient(92% 105% at 50% 7%, rgba(255, 58, 212, 0.04) 0%, rgba(255, 255, 255, 0.03) 100%),radial-gradient(100% 97% at 0% 12%, rgba(235, 0, 255, 0.1) 0%, rgba(243, 19, 19, 0.1) 100%), hsla(0, 0%, 100%, 0.1)', + _c$2[SupportedChainId.OPTIMISTIC_KOVAN] = 'radial-gradient(92% 105% at 50% 7%, rgba(255, 58, 212, 0.04) 0%, rgba(255, 255, 255, 0.03) 100%),radial-gradient(100% 97% at 0% 12%, rgba(235, 0, 255, 0.1) 0%, rgba(243, 19, 19, 0.1) 100%), hsla(0, 0%, 100%, 0.1)', + _c$2[SupportedChainId.ARBITRUM_ONE] = 'radial-gradient(285% 8200% at 30% 50%, rgba(40, 160, 240, 0.1) 0%, rgba(219, 255, 0, 0) 100%),radial-gradient(circle at top left, hsla(206, 50%, 75%, 0.01), hsla(215, 79%, 51%, 0.12)), hsla(0, 0%, 100%, 0.1)', + _c$2[SupportedChainId.ARBITRUM_RINKEBY] = 'radial-gradient(285% 8200% at 30% 50%, rgba(40, 160, 240, 0.1) 0%, rgba(219, 255, 0, 0) 100%),radial-gradient(circle at top left, hsla(206, 50%, 75%, 0.01), hsla(215, 79%, 51%, 0.12)), hsla(0, 0%, 100%, 0.1)', + _c$2), +}; +var ContentWrapper$1 = styled__default["default"].div(templateObject_5$g || (templateObject_5$g = __makeTemplateObject(["\n background: ", ";\n border-radius: 20px;\n display: flex;\n flex-direction: row;\n overflow: hidden;\n position: relative;\n width: 100%;\n\n :before {\n background-image: url(", ");\n background-repeat: no-repeat;\n background-size: 300px;\n content: '';\n height: 300px;\n opacity: 0.1;\n position: absolute;\n transform: rotate(25deg) translate(-90px, -40px);\n width: 300px;\n z-index: -1;\n }\n"], ["\n background: ", ";\n border-radius: 20px;\n display: flex;\n flex-direction: row;\n overflow: hidden;\n position: relative;\n width: 100%;\n\n :before {\n background-image: url(", ");\n background-repeat: no-repeat;\n background-size: 300px;\n content: '';\n height: 300px;\n opacity: 0.1;\n position: absolute;\n transform: rotate(25deg) translate(-90px, -40px);\n width: 300px;\n z-index: -1;\n }\n"])), function (_a) { + var chainId = _a.chainId, darkMode = _a.darkMode; + return BG_COLORS_BY_DARK_MODE_AND_CHAIN_ID[darkMode ? 'dark' : 'light'][chainId]; +}, function (_a) { + var logoUrl = _a.logoUrl; + return logoUrl; +}); +var Header$1 = styled__default["default"].h2(templateObject_6$c || (templateObject_6$c = __makeTemplateObject(["\n font-weight: 600;\n font-size: 16px;\n margin: 0;\n"], ["\n font-weight: 600;\n font-size: 16px;\n margin: 0;\n"]))); +var LinkOutToBridge = styled__default["default"](ExternalLink)(templateObject_7$b || (templateObject_7$b = __makeTemplateObject(["\n align-items: center;\n border-radius: 8px;\n color: white;\n display: flex;\n font-size: 16px;\n justify-content: space-between;\n padding: 6px 8px;\n margin-right: 12px;\n text-decoration: none !important;\n width: 100%;\n"], ["\n align-items: center;\n border-radius: 8px;\n color: white;\n display: flex;\n font-size: 16px;\n justify-content: space-between;\n padding: 6px 8px;\n margin-right: 12px;\n text-decoration: none !important;\n width: 100%;\n"]))); +var StyledArrowUpRight = styled__default["default"](reactFeather.ArrowUpRight)(templateObject_8$8 || (templateObject_8$8 = __makeTemplateObject(["\n margin-left: 12px;\n width: 24px;\n height: 24px;\n"], ["\n margin-left: 12px;\n width: 24px;\n height: 24px;\n"]))); +var TEXT_COLORS = (_d$1 = {}, + _d$1[SupportedChainId.POLYGON] = 'rgba(130, 71, 229)', + _d$1[SupportedChainId.POLYGON_MUMBAI] = 'rgba(130, 71, 229)', + _d$1[SupportedChainId.OPTIMISM] = '#ff3856', + _d$1[SupportedChainId.OPTIMISTIC_KOVAN] = '#ff3856', + _d$1[SupportedChainId.ARBITRUM_ONE] = '#0490ed', + _d$1[SupportedChainId.ARBITRUM_RINKEBY] = '#0490ed', + _d$1); +function shouldShowAlert(chainId) { + return Boolean(chainId && SHOULD_SHOW_ALERT[chainId]); +} +function NetworkAlert() { + var chainId = useActiveWeb3React().chainId; + var _a = __read(useDarkModeManager(), 1), darkMode = _a[0]; + if (!shouldShowAlert(chainId)) { + return null; + } + var _b = CHAIN_INFO[chainId], label = _b.label, logoUrl = _b.logoUrl, bridge = _b.bridge; + var textColor = TEXT_COLORS[chainId]; + return bridge ? (jsxRuntime.jsx(RootWrapper, { children: jsxRuntime.jsx(ContentWrapper$1, __assign({ chainId: chainId, darkMode: darkMode, logoUrl: logoUrl }, { children: jsxRuntime.jsxs(LinkOutToBridge, __assign({ href: bridge }, { children: [jsxRuntime.jsxs(BodyText, __assign({ color: textColor }, { children: [jsxRuntime.jsx(L2Icon, { src: logoUrl }, void 0), jsxRuntime.jsxs(AutoRow, { children: [jsxRuntime.jsx(Header$1, { children: jsxRuntime.jsxs(macro.Trans, { children: [label, " token bridge"] }, void 0) }, void 0), jsxRuntime.jsx(HideSmall, { children: jsxRuntime.jsxs(macro.Trans, { children: ["Deposit tokens to the ", label, " network."] }, void 0) }, void 0)] }, void 0)] }), void 0), jsxRuntime.jsx(StyledArrowUpRight, { color: textColor }, void 0)] }), void 0) }), void 0) }, void 0)) : null; +} +var templateObject_1$T, templateObject_2$B, templateObject_3$u, templateObject_4$j, templateObject_5$g, templateObject_6$c, templateObject_7$b, templateObject_8$8; + +/** + * @param open conditional to show content or hide + * @returns Wrapper to smoothly hide and expand content + */ +function AnimatedDropdown(_a) { + var open = _a.open, children = _a.children; + var _b = useResizeObserver__default["default"](), ref = _b.ref, height = _b.height; + var props = reactSpring.useSpring({ + height: open ? height !== null && height !== void 0 ? height : 0 : 0, + config: { + mass: 1.2, + tension: 300, + friction: 20, + clamp: true, + velocity: 0.01, + }, + }); + return (jsxRuntime.jsx(reactSpring.animated.div, __assign({ style: __assign(__assign({}, props), { overflow: 'hidden', width: '100%', willChange: 'height' }) }, { children: jsxRuntime.jsx("div", __assign({ ref: ref }, { children: children }), void 0) }), void 0)); +} + +var Card = styled__default["default"](styledComponents.Box)(templateObject_1$S || (templateObject_1$S = __makeTemplateObject(["\n width: ", ";\n padding: ", ";\n border-radius: ", ";\n border: ", ";\n"], ["\n width: ", ";\n padding: ", ";\n border-radius: ", ";\n border: ", ";\n"])), function (_a) { + var width = _a.width; + return width !== null && width !== void 0 ? width : '100%'; +}, function (_a) { + var padding = _a.padding; + return padding !== null && padding !== void 0 ? padding : '1rem'; +}, function (_a) { + var $borderRadius = _a.$borderRadius; + return $borderRadius !== null && $borderRadius !== void 0 ? $borderRadius : '16px'; +}, function (_a) { + var border = _a.border; + return border; +}); +var LightCard = styled__default["default"](Card)(templateObject_2$A || (templateObject_2$A = __makeTemplateObject(["\n border: 1px solid ", ";\n background-color: ", ";\n"], ["\n border: 1px solid ", ";\n background-color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}, function (_a) { + var theme = _a.theme; + return theme.bg1; +}); +var LightGreyCard = styled__default["default"](Card)(templateObject_3$t || (templateObject_3$t = __makeTemplateObject(["\n background-color: ", ";\n"], ["\n background-color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}); +var GreyCard = styled__default["default"](Card)(templateObject_4$i || (templateObject_4$i = __makeTemplateObject(["\n background-color: ", ";\n"], ["\n background-color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg3; +}); +styled__default["default"](Card)(templateObject_5$f || (templateObject_5$f = __makeTemplateObject(["\n background-color: ", ";\n"], ["\n background-color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}); +styled__default["default"](Card)(templateObject_6$b || (templateObject_6$b = __makeTemplateObject(["\n background-color: ", ";\n"], ["\n background-color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg0; +}); +var OutlineCard = styled__default["default"](Card)(templateObject_7$a || (templateObject_7$a = __makeTemplateObject(["\n border: 1px solid ", ";\n"], ["\n border: 1px solid ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg3; +}); +styled__default["default"](Card)(templateObject_8$7 || (templateObject_8$7 = __makeTemplateObject(["\n background-color: rgba(243, 132, 30, 0.05);\n color: ", ";\n font-weight: 500;\n"], ["\n background-color: rgba(243, 132, 30, 0.05);\n color: ", ";\n font-weight: 500;\n"])), function (_a) { + var theme = _a.theme; + return theme.yellow3; +}); +styled__default["default"](Card)(templateObject_9$7 || (templateObject_9$7 = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n border-radius: 12px;\n"], ["\n background-color: ", ";\n color: ", ";\n border-radius: 12px;\n"])), function (_a) { + var theme = _a.theme; + return theme.primary5; +}, function (_a) { + var theme = _a.theme; + return theme.blue2; +}); +var templateObject_1$S, templateObject_2$A, templateObject_3$t, templateObject_4$i, templateObject_5$f, templateObject_6$b, templateObject_7$a, templateObject_8$7, templateObject_9$7; + +var Column = styled__default["default"].div(templateObject_1$R || (templateObject_1$R = __makeTemplateObject(["\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n"], ["\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n"]))); +var ColumnCenter = styled__default["default"](Column)(templateObject_2$z || (templateObject_2$z = __makeTemplateObject(["\n width: 100%;\n align-items: center;\n"], ["\n width: 100%;\n align-items: center;\n"]))); +var AutoColumn = styled__default["default"].div(templateObject_3$s || (templateObject_3$s = __makeTemplateObject(["\n display: grid;\n grid-auto-rows: auto;\n grid-row-gap: ", ";\n justify-items: ", ";\n"], ["\n display: grid;\n grid-auto-rows: auto;\n grid-row-gap: ", ";\n justify-items: ", ";\n"])), function (_a) { + var gap = _a.gap; + return (gap === 'sm' && '8px') || (gap === 'md' && '12px') || (gap === 'lg' && '24px') || gap; +}, function (_a) { + var justify = _a.justify; + return justify && justify; +}); +var templateObject_1$R, templateObject_2$z, templateObject_3$s; + +var loadingAnimation = styled.keyframes(templateObject_1$Q || (templateObject_1$Q = __makeTemplateObject(["\n 0% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0% 50%;\n }\n"], ["\n 0% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0% 50%;\n }\n"]))); +var LoadingRows = styled__default["default"].div(templateObject_2$y || (templateObject_2$y = __makeTemplateObject(["\n display: grid;\n\n & > div {\n animation: ", " 1.5s infinite;\n animation-fill-mode: both;\n background: linear-gradient(\n to left,\n ", " 25%,\n ", " 50%,\n ", " 75%\n );\n background-size: 400%;\n border-radius: 12px;\n height: 2.4em;\n will-change: background-position;\n }\n"], ["\n display: grid;\n\n & > div {\n animation: ", " 1.5s infinite;\n animation-fill-mode: both;\n background: linear-gradient(\n to left,\n ", " 25%,\n ", " 50%,\n ", " 75%\n );\n background-size: 400%;\n border-radius: 12px;\n height: 2.4em;\n will-change: background-position;\n }\n"])), loadingAnimation, function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var theme = _a.theme; + return theme.bg2; +}, function (_a) { + var theme = _a.theme; + return theme.bg1; +}); +var loadingOpacityMixin = styled.css(templateObject_3$r || (templateObject_3$r = __makeTemplateObject(["\n filter: ", ";\n opacity: ", ";\n transition: opacity 0.2s ease-in-out;\n"], ["\n filter: ", ";\n opacity: ", ";\n transition: opacity 0.2s ease-in-out;\n"])), function (_a) { + var $loading = _a.$loading; + return ($loading ? 'grayscale(1)' : 'none'); +}, function (_a) { + var $loading = _a.$loading; + return ($loading ? '0.4' : '1'); +}); +var LoadingOpacityContainer = styled__default["default"].div(templateObject_4$h || (templateObject_4$h = __makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), loadingOpacityMixin); +var templateObject_1$Q, templateObject_2$y, templateObject_3$r, templateObject_4$h; + +/** + * Invokes callback repeatedly over an interval defined by the delay + * @param callback + * @param delay if null, the callback will not be invoked + * @param leading if true, the callback will be invoked immediately (on the leading edge); otherwise, it will be invoked after delay + */ +function useInterval(callback, delay, leading) { + if (leading === void 0) { leading = true; } + var savedCallback = React.useRef(); + // Remember the latest callback. + React.useEffect(function () { + savedCallback.current = callback; + }, [callback]); + // Set up the interval. + React.useEffect(function () { + function tick() { + var current = savedCallback.current; + current && current(); + } + if (delay !== null) { + if (leading) + tick(); + var id_1 = setInterval(tick, delay); + return function () { return clearInterval(id_1); }; + } + return; + }, [delay, leading]); +} + +var PopoverContainer$1 = styled__default["default"].div(templateObject_1$P || (templateObject_1$P = __makeTemplateObject(["\n z-index: 9999;\n visibility: ", ";\n opacity: ", ";\n transition: visibility 150ms linear, opacity 150ms linear;\n color: ", ";\n"], ["\n z-index: 9999;\n visibility: ", ";\n opacity: ", ";\n transition: visibility 150ms linear, opacity 150ms linear;\n color: ", ";\n"])), function (props) { return (props.show ? 'visible' : 'hidden'); }, function (props) { return (props.show ? 1 : 0); }, function (_a) { + var theme = _a.theme; + return theme.text2; +}); +var ReferenceElement = styled__default["default"].div(templateObject_2$x || (templateObject_2$x = __makeTemplateObject(["\n display: inline-block;\n"], ["\n display: inline-block;\n"]))); +var Arrow = styled__default["default"].div(templateObject_3$q || (templateObject_3$q = __makeTemplateObject(["\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 ", ";\n transform: rotate(45deg);\n background: ", ";\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 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 ", ";\n transform: rotate(45deg);\n background: ", ";\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"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}, function (_a) { + var theme = _a.theme; + return theme.bg0; +}); +function Popover(_a) { + var _b, _c; + var content = _a.content, show = _a.show, children = _a.children, _d = _a.placement, placement = _d === void 0 ? 'auto' : _d; + var _e = __read(React.useState(null), 2), referenceElement = _e[0], setReferenceElement = _e[1]; + var _f = __read(React.useState(null), 2), popperElement = _f[0], setPopperElement = _f[1]; + var _g = __read(React.useState(null), 2), arrowElement = _g[0], setArrowElement = _g[1]; + var options = React.useMemo(function () { return ({ + placement: placement, + strategy: 'fixed', + modifiers: [ + { name: 'offset', options: { offset: [8, 8] } }, + { name: 'arrow', options: { element: arrowElement } }, + { name: 'preventOverflow', options: { padding: 8 } }, + ], + }); }, [arrowElement, placement]); + var _h = reactPopper.usePopper(referenceElement, popperElement, options), styles = _h.styles, update = _h.update, attributes = _h.attributes; + var updateCallback = React.useCallback(function () { + update && update(); + }, [update]); + useInterval(updateCallback, show ? 100 : null); + return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(ReferenceElement, __assign({ ref: setReferenceElement }, { children: children }), void 0), jsxRuntime.jsx(Portal__default["default"], { children: jsxRuntime.jsxs(PopoverContainer$1, __assign({ show: show, ref: setPopperElement, style: styles.popper }, attributes.popper, { children: [content, jsxRuntime.jsx(Arrow, __assign({ className: "arrow-" + ((_c = (_b = attributes.popper) === null || _b === void 0 ? void 0 : _b['data-popper-placement']) !== null && _c !== void 0 ? _c : ''), ref: setArrowElement, style: styles.arrow }, attributes.arrow), void 0)] }), void 0) }, void 0)] }, void 0)); +} +var templateObject_1$P, templateObject_2$x, templateObject_3$q; + +var TooltipContainer = styled__default["default"].div(templateObject_1$O || (templateObject_1$O = __makeTemplateObject(["\n max-width: 256px;\n padding: 0.6rem 1rem;\n font-weight: 400;\n word-break: break-word;\n\n background: ", ";\n border-radius: 12px;\n border: 1px solid ", ";\n box-shadow: 0 4px 8px 0 ", ";\n"], ["\n max-width: 256px;\n padding: 0.6rem 1rem;\n font-weight: 400;\n word-break: break-word;\n\n background: ", ";\n border-radius: 12px;\n border: 1px solid ", ";\n box-shadow: 0 4px 8px 0 ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg0; +}, function (_a) { + var theme = _a.theme; + return theme.bg2; +}, function (_a) { + var theme = _a.theme; + return polished.transparentize(0.9, theme.shadow1); +}); +function Tooltip(_a) { + var text = _a.text, rest = __rest(_a, ["text"]); + return jsxRuntime.jsx(Popover, __assign({ content: jsxRuntime.jsx(TooltipContainer, { children: text }, void 0) }, rest), void 0); +} +function TooltipContent(_a) { + var content = _a.content, _b = _a.wrap, wrap = _b === void 0 ? false : _b, rest = __rest(_a, ["content", "wrap"]); + return jsxRuntime.jsx(Popover, __assign({ content: wrap ? jsxRuntime.jsx(TooltipContainer, { children: content }, void 0) : content }, rest), void 0); +} +function MouseoverTooltip(_a) { + var children = _a.children, rest = __rest(_a, ["children"]); + var _b = __read(React.useState(false), 2), show = _b[0], setShow = _b[1]; + var open = React.useCallback(function () { return setShow(true); }, [setShow]); + var close = React.useCallback(function () { return setShow(false); }, [setShow]); + return (jsxRuntime.jsx(Tooltip, __assign({}, rest, { show: show }, { children: jsxRuntime.jsx("div", __assign({ onMouseEnter: open, onMouseLeave: close }, { children: children }), void 0) }), void 0)); +} +function MouseoverTooltipContent(_a) { + var content = _a.content, children = _a.children, _b = _a.onOpen, openCallback = _b === void 0 ? undefined : _b, disableHover = _a.disableHover, rest = __rest(_a, ["content", "children", "onOpen", "disableHover"]); + var _c = __read(React.useState(false), 2), show = _c[0], setShow = _c[1]; + var open = React.useCallback(function () { + setShow(true); + openCallback === null || openCallback === void 0 ? void 0 : openCallback(); + }, [openCallback]); + var close = React.useCallback(function () { return setShow(false); }, [setShow]); + return (jsxRuntime.jsx(TooltipContent, __assign({}, rest, { show: show, content: disableHover ? null : content }, { children: jsxRuntime.jsx("div", __assign({ style: { display: 'inline-block', lineHeight: 0, padding: '0.25rem' }, onMouseEnter: open, onMouseLeave: close }, { children: children }), void 0) }), void 0)); +} +var templateObject_1$O; + +var THIRTY_BIPS_FEE = new sdkCore.Percent(JSBI__default["default"].BigInt(30), JSBI__default["default"].BigInt(10000)); +var INPUT_FRACTION_AFTER_FEE = ONE_HUNDRED_PERCENT.subtract(THIRTY_BIPS_FEE); +// computes realized lp fee as a percent +function computeRealizedLPFeePercent(trade) { + var e_1, _a; + var percent; + // Since routes are either all v2 or all v3 right now, calculate separately + if (trade.swaps[0].route.pools instanceof v2Sdk.Pair) { + // for each hop in our trade, take away the x*y=k price impact from 0.3% fees + // e.g. for 3 tokens/2 hops: 1 - ((1 - .03) * (1-.03)) + percent = ONE_HUNDRED_PERCENT.subtract(trade.swaps.reduce(function (currentFee) { return currentFee.multiply(INPUT_FRACTION_AFTER_FEE); }, ONE_HUNDRED_PERCENT)); + } + else { + percent = ZERO_PERCENT; + try { + for (var _b = __values(trade.swaps), _c = _b.next(); !_c.done; _c = _b.next()) { + var swap = _c.value; + var _d = swap.inputAmount.divide(trade.inputAmount), numerator = _d.numerator, denominator = _d.denominator; + var overallPercent = new sdkCore.Percent(numerator, denominator); + var routeRealizedLPFeePercent = overallPercent.multiply(ONE_HUNDRED_PERCENT.subtract(swap.route.pools.reduce(function (currentFee, pool) { + var fee = pool instanceof v2Sdk.Pair + ? // not currently possible given protocol check above, but not fatal + v3Sdk.FeeAmount.MEDIUM + : pool.fee; + return currentFee.multiply(ONE_HUNDRED_PERCENT.subtract(new sdkCore.Fraction(fee, 1000000))); + }, ONE_HUNDRED_PERCENT))); + percent = percent.add(routeRealizedLPFeePercent); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_1) throw e_1.error; } + } + } + return new sdkCore.Percent(percent.numerator, percent.denominator); +} +var IMPACT_TIERS = [ + BLOCKED_PRICE_IMPACT_NON_EXPERT, + ALLOWED_PRICE_IMPACT_HIGH, + ALLOWED_PRICE_IMPACT_MEDIUM, + ALLOWED_PRICE_IMPACT_LOW, +]; +function warningSeverity(priceImpact) { + var e_2, _a; + if (!priceImpact) + return 4; + var impact = IMPACT_TIERS.length; + try { + for (var IMPACT_TIERS_1 = __values(IMPACT_TIERS), IMPACT_TIERS_1_1 = IMPACT_TIERS_1.next(); !IMPACT_TIERS_1_1.done; IMPACT_TIERS_1_1 = IMPACT_TIERS_1.next()) { + var impactLevel = IMPACT_TIERS_1_1.value; + if (impactLevel.lessThan(priceImpact)) + return impact; + impact--; + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (IMPACT_TIERS_1_1 && !IMPACT_TIERS_1_1.done && (_a = IMPACT_TIERS_1.return)) _a.call(IMPACT_TIERS_1); + } + finally { if (e_2) throw e_2.error; } + } + return 0; +} + +/** + * Parses a CurrencyAmount from the passed string. + * Returns the CurrencyAmount, or undefined if parsing fails. + */ +function tryParseCurrencyAmount(value, currency) { + if (!value || !currency) { + return undefined; + } + try { + var typedValueParsed = units.parseUnits(value, currency.decimals).toString(); + if (typedValueParsed !== '0') { + return sdkCore.CurrencyAmount.fromRawAmount(currency, JSBI__default["default"].BigInt(typedValueParsed)); + } + } + catch (error) { + // fails if the user specifies too many decimal places of precision (or maybe exceed max uint?) + console.debug("Failed to parse input amount: \"" + value + "\"", error); + } + return undefined; +} + +// returns whether tradeB is better than tradeA by at least a threshold percentage amount +// only used by v2 hooks +function isTradeBetter(tradeA, tradeB, minimumDelta) { + if (minimumDelta === void 0) { minimumDelta = ZERO_PERCENT; } + if (tradeA && !tradeB) + return false; + if (tradeB && !tradeA) + return true; + if (!tradeA || !tradeB) + return undefined; + if (tradeA.tradeType !== tradeB.tradeType || + !tradeA.inputAmount.currency.equals(tradeB.inputAmount.currency) || + !tradeA.outputAmount.currency.equals(tradeB.outputAmount.currency)) { + throw new Error('Comparing incomparable trades'); + } + if (minimumDelta.equalTo(ZERO_PERCENT)) { + return tradeA.executionPrice.lessThan(tradeB.executionPrice); + } + else { + return tradeA.executionPrice.asFraction + .multiply(minimumDelta.add(ONE_HUNDRED_PERCENT)) + .lessThan(tradeB.executionPrice); + } +} + +function useAllCurrencyCombinations(currencyA, currencyB) { + var chainId = currencyA === null || currencyA === void 0 ? void 0 : currencyA.chainId; + var _a = __read(chainId ? [currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped, currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped] : [undefined, undefined], 2), tokenA = _a[0], tokenB = _a[1]; + var bases = React.useMemo(function () { + var _a, _b, _c, _d, _e; + if (!chainId || chainId !== (tokenB === null || tokenB === void 0 ? void 0 : tokenB.chainId)) + return []; + var common = (_a = BASES_TO_CHECK_TRADES_AGAINST[chainId]) !== null && _a !== void 0 ? _a : []; + var additionalA = tokenA ? (_c = (_b = ADDITIONAL_BASES[chainId]) === null || _b === void 0 ? void 0 : _b[tokenA.address]) !== null && _c !== void 0 ? _c : [] : []; + var additionalB = tokenB ? (_e = (_d = ADDITIONAL_BASES[chainId]) === null || _d === void 0 ? void 0 : _d[tokenB.address]) !== null && _e !== void 0 ? _e : [] : []; + return __spreadArray(__spreadArray(__spreadArray([], __read(common), false), __read(additionalA), false), __read(additionalB), false); + }, [chainId, tokenA, tokenB]); + var basePairs = React.useMemo(function () { + return bases + .flatMap(function (base) { return bases.map(function (otherBase) { return [base, otherBase]; }); }) + // though redundant with the first filter below, that expression runs more often, so this is probably worthwhile + .filter(function (_a) { + var _b = __read(_a, 2), t0 = _b[0], t1 = _b[1]; + return !t0.equals(t1); + }); + }, [bases]); + return React.useMemo(function () { + return tokenA && tokenB + ? __spreadArray(__spreadArray(__spreadArray([ + // the direct pair + [tokenA, tokenB] + ], __read(bases.map(function (base) { return [tokenA, base]; })), false), __read(bases.map(function (base) { return [tokenB, base]; })), false), __read(basePairs), false).filter(function (_a) { + var _b = __read(_a, 2), t0 = _b[0], t1 = _b[1]; + return !t0.equals(t1); + }) + // filter out duplicate pairs + .filter(function (_a, i, otherPairs) { + var _b = __read(_a, 2), t0 = _b[0], t1 = _b[1]; + // find the first index in the array at which there are the same 2 tokens as the current + var firstIndexInOtherPairs = otherPairs.findIndex(function (_a) { + var _b = __read(_a, 2), t0Other = _b[0], t1Other = _b[1]; + return (t0.equals(t0Other) && t1.equals(t1Other)) || (t0.equals(t1Other) && t1.equals(t0Other)); + }); + // only accept the first occurrence of the same 2 tokens + return firstIndexInOtherPairs === i; + }) + // optionally filter out some pairs for tokens with custom bases defined + .filter(function (_a) { + var _b = __read(_a, 2), tokenA = _b[0], tokenB = _b[1]; + if (!chainId) + return true; + var customBases = CUSTOM_BASES[chainId]; + var customBasesA = customBases === null || customBases === void 0 ? void 0 : customBases[tokenA.address]; + var customBasesB = customBases === null || customBases === void 0 ? void 0 : customBases[tokenB.address]; + if (!customBasesA && !customBasesB) + return true; + if (customBasesA && !customBasesA.find(function (base) { return tokenB.equals(base); })) + return false; + if (customBasesB && !customBasesB.find(function (base) { return tokenA.equals(base); })) + return false; + return true; + }) + : []; + }, [tokenA, tokenB, bases, basePairs, chainId]); +} + +var PAIR_INTERFACE = new abi$6.Interface(abi$4); +var PairState; +(function (PairState) { + PairState[PairState["LOADING"] = 0] = "LOADING"; + PairState[PairState["NOT_EXISTS"] = 1] = "NOT_EXISTS"; + PairState[PairState["EXISTS"] = 2] = "EXISTS"; + PairState[PairState["INVALID"] = 3] = "INVALID"; +})(PairState || (PairState = {})); +function useV2Pairs(currencies) { + var tokens = React.useMemo(function () { return currencies.map(function (_a) { + var _b = __read(_a, 2), currencyA = _b[0], currencyB = _b[1]; + return [currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped, currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped]; + }); }, [currencies]); + var pairAddresses = React.useMemo(function () { + return tokens.map(function (_a) { + var _b = __read(_a, 2), tokenA = _b[0], tokenB = _b[1]; + return tokenA && + tokenB && + tokenA.chainId === tokenB.chainId && + !tokenA.equals(tokenB) && + V2_FACTORY_ADDRESSES[tokenA.chainId] + ? v2Sdk.computePairAddress({ factoryAddress: V2_FACTORY_ADDRESSES[tokenA.chainId], tokenA: tokenA, tokenB: tokenB }) + : undefined; + }); + }, [tokens]); + var results = useMultipleContractSingleData(pairAddresses, PAIR_INTERFACE, 'getReserves'); + return React.useMemo(function () { + return results.map(function (result, i) { + var reserves = result.result, loading = result.loading; + var tokenA = tokens[i][0]; + var tokenB = tokens[i][1]; + if (loading) + return [PairState.LOADING, null]; + if (!tokenA || !tokenB || tokenA.equals(tokenB)) + return [PairState.INVALID, null]; + if (!reserves) + return [PairState.NOT_EXISTS, null]; + var reserve0 = reserves.reserve0, reserve1 = reserves.reserve1; + var _a = __read(tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA], 2), token0 = _a[0], token1 = _a[1]; + return [ + PairState.EXISTS, + new v2Sdk.Pair(sdkCore.CurrencyAmount.fromRawAmount(token0, reserve0.toString()), sdkCore.CurrencyAmount.fromRawAmount(token1, reserve1.toString())), + ]; + }); + }, [results, tokens]); +} + +function useAllCommonPairs(currencyA, currencyB) { + var allCurrencyCombinations = useAllCurrencyCombinations(currencyA, currencyB); + var allPairs = useV2Pairs(allCurrencyCombinations); + return React.useMemo(function () { + return Object.values(allPairs + // filter out invalid pairs + .filter(function (result) { return Boolean(result[0] === PairState.EXISTS && result[1]); }) + .map(function (_a) { + var _b = __read(_a, 2), pair = _b[1]; + return pair; + })); + }, [allPairs]); +} +var MAX_HOPS = 3; +/** + * Returns the best v2 trade for a desired swap + * @param tradeType whether the swap is an exact in/out + * @param amountSpecified the exact amount to swap in/out + * @param otherCurrency the desired output/payment currency + */ +function useBestV2Trade(tradeType, amountSpecified, otherCurrency, _a) { + var _b = _a === void 0 ? {} : _a, _c = _b.maxHops, maxHops = _c === void 0 ? MAX_HOPS : _c; + var _d = __read(React.useMemo(function () { + return tradeType === sdkCore.TradeType.EXACT_INPUT + ? [amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, otherCurrency] + : [otherCurrency, amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency]; + }, [tradeType, amountSpecified, otherCurrency]), 2), currencyIn = _d[0], currencyOut = _d[1]; + var allowedPairs = useAllCommonPairs(currencyIn, currencyOut); + return React.useMemo(function () { + var _a, _b, _c, _d; + if (amountSpecified && currencyIn && currencyOut && allowedPairs.length > 0) { + if (maxHops === 1) { + var options = { maxHops: 1, maxNumResults: 1 }; + if (tradeType === sdkCore.TradeType.EXACT_INPUT) { + var amountIn = amountSpecified; + return (_a = v2Sdk.Trade.bestTradeExactIn(allowedPairs, amountIn, currencyOut, options)[0]) !== null && _a !== void 0 ? _a : null; + } + else { + var amountOut = amountSpecified; + return (_b = v2Sdk.Trade.bestTradeExactOut(allowedPairs, currencyIn, amountOut, options)[0]) !== null && _b !== void 0 ? _b : null; + } + } + // search through trades with varying hops, find best trade out of them + var bestTradeSoFar = null; + for (var i = 1; i <= maxHops; i++) { + var options = { maxHops: i, maxNumResults: 1 }; + var currentTrade = void 0; + if (tradeType === sdkCore.TradeType.EXACT_INPUT) { + var amountIn = amountSpecified; + currentTrade = (_c = v2Sdk.Trade.bestTradeExactIn(allowedPairs, amountIn, currencyOut, options)[0]) !== null && _c !== void 0 ? _c : null; + } + else { + var amountOut = amountSpecified; + currentTrade = (_d = v2Sdk.Trade.bestTradeExactOut(allowedPairs, currencyIn, amountOut, options)[0]) !== null && _d !== void 0 ? _d : null; + } + // if current trade is best yet, save it + if (isTradeBetter(bestTradeSoFar, currentTrade, BETTER_TRADE_LESS_HOPS_THRESHOLD)) { + bestTradeSoFar = currentTrade; + } + } + return bestTradeSoFar; + } + return null; + }, [tradeType, amountSpecified, currencyIn, currencyOut, allowedPairs, maxHops]); +} + +var TradeState; +(function (TradeState) { + TradeState[TradeState["LOADING"] = 0] = "LOADING"; + TradeState[TradeState["INVALID"] = 1] = "INVALID"; + TradeState[TradeState["NO_ROUTE_FOUND"] = 2] = "NO_ROUTE_FOUND"; + TradeState[TradeState["VALID"] = 3] = "VALID"; + TradeState[TradeState["SYNCING"] = 4] = "SYNCING"; +})(TradeState || (TradeState = {})); +var InterfaceTrade = /** @class */ (function (_super) { + __extends(InterfaceTrade, _super); + function InterfaceTrade(_a) { + var gasUseEstimateUSD = _a.gasUseEstimateUSD, routes = __rest(_a, ["gasUseEstimateUSD"]); + var _this = _super.call(this, routes) || this; + _this.gasUseEstimateUSD = gasUseEstimateUSD; + return _this; + } + return InterfaceTrade; +}(routerSdk.Trade)); + +var abi = [ + { + inputs: [ + ], + name: "feeGrowthGlobal0X128", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + ], + name: "feeGrowthGlobal1X128", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + ], + name: "liquidity", + outputs: [ + { + internalType: "uint128", + name: "", + type: "uint128" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "index", + type: "uint256" + } + ], + name: "observations", + outputs: [ + { + internalType: "uint32", + name: "blockTimestamp", + type: "uint32" + }, + { + internalType: "int56", + name: "tickCumulative", + type: "int56" + }, + { + internalType: "uint160", + name: "secondsPerLiquidityCumulativeX128", + type: "uint160" + }, + { + internalType: "bool", + name: "initialized", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "key", + type: "bytes32" + } + ], + name: "positions", + outputs: [ + { + internalType: "uint128", + name: "_liquidity", + type: "uint128" + }, + { + internalType: "uint256", + name: "feeGrowthInside0LastX128", + type: "uint256" + }, + { + internalType: "uint256", + name: "feeGrowthInside1LastX128", + type: "uint256" + }, + { + internalType: "uint128", + name: "tokensOwed0", + type: "uint128" + }, + { + internalType: "uint128", + name: "tokensOwed1", + type: "uint128" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + ], + name: "protocolFees", + outputs: [ + { + internalType: "uint128", + name: "token0", + type: "uint128" + }, + { + internalType: "uint128", + name: "token1", + type: "uint128" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + ], + name: "slot0", + outputs: [ + { + internalType: "uint160", + name: "sqrtPriceX96", + type: "uint160" + }, + { + internalType: "int24", + name: "tick", + type: "int24" + }, + { + internalType: "uint16", + name: "observationIndex", + type: "uint16" + }, + { + internalType: "uint16", + name: "observationCardinality", + type: "uint16" + }, + { + internalType: "uint16", + name: "observationCardinalityNext", + type: "uint16" + }, + { + internalType: "uint8", + name: "feeProtocol", + type: "uint8" + }, + { + internalType: "bool", + name: "unlocked", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "int16", + name: "wordPosition", + type: "int16" + } + ], + name: "tickBitmap", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "int24", + name: "tick", + type: "int24" + } + ], + name: "ticks", + outputs: [ + { + internalType: "uint128", + name: "liquidityGross", + type: "uint128" + }, + { + internalType: "int128", + name: "liquidityNet", + type: "int128" + }, + { + internalType: "uint256", + name: "feeGrowthOutside0X128", + type: "uint256" + }, + { + internalType: "uint256", + name: "feeGrowthOutside1X128", + type: "uint256" + }, + { + internalType: "int56", + name: "tickCumulativeOutside", + type: "int56" + }, + { + internalType: "uint160", + name: "secondsPerLiquidityOutsideX128", + type: "uint160" + }, + { + internalType: "uint32", + name: "secondsOutside", + type: "uint32" + }, + { + internalType: "bool", + name: "initialized", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + } +]; + +var POOL_STATE_INTERFACE = new abi$6.Interface(abi); +var PoolState; +(function (PoolState) { + PoolState[PoolState["LOADING"] = 0] = "LOADING"; + PoolState[PoolState["NOT_EXISTS"] = 1] = "NOT_EXISTS"; + PoolState[PoolState["EXISTS"] = 2] = "EXISTS"; + PoolState[PoolState["INVALID"] = 3] = "INVALID"; +})(PoolState || (PoolState = {})); +function usePools(poolKeys) { + var chainId = useActiveWeb3React().chainId; + var transformed = React.useMemo(function () { + return poolKeys.map(function (_a) { + var _b = __read(_a, 3), currencyA = _b[0], currencyB = _b[1], feeAmount = _b[2]; + if (!chainId || !currencyA || !currencyB || !feeAmount) + return null; + var tokenA = currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped; + var tokenB = currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped; + if (!tokenA || !tokenB || tokenA.equals(tokenB)) + return null; + var _c = __read(tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA], 2), token0 = _c[0], token1 = _c[1]; + return [token0, token1, feeAmount]; + }); + }, [chainId, poolKeys]); + var poolAddresses = React.useMemo(function () { + var v3CoreFactoryAddress = chainId && V3_CORE_FACTORY_ADDRESSES[chainId]; + return transformed.map(function (value) { + if (!v3CoreFactoryAddress || !value) + return undefined; + return v3Sdk.computePoolAddress({ + factoryAddress: v3CoreFactoryAddress, + tokenA: value[0], + tokenB: value[1], + fee: value[2], + }); + }); + }, [chainId, transformed]); + var slot0s = useMultipleContractSingleData(poolAddresses, POOL_STATE_INTERFACE, 'slot0'); + var liquidities = useMultipleContractSingleData(poolAddresses, POOL_STATE_INTERFACE, 'liquidity'); + return React.useMemo(function () { + return poolKeys.map(function (_key, index) { + var _a; + var _b = __read((_a = transformed[index]) !== null && _a !== void 0 ? _a : [], 3), token0 = _b[0], token1 = _b[1], fee = _b[2]; + if (!token0 || !token1 || !fee) + return [PoolState.INVALID, null]; + var _c = slot0s[index], slot0 = _c.result, slot0Loading = _c.loading, slot0Valid = _c.valid; + var _d = liquidities[index], liquidity = _d.result, liquidityLoading = _d.loading, liquidityValid = _d.valid; + if (!slot0Valid || !liquidityValid) + return [PoolState.INVALID, null]; + if (slot0Loading || liquidityLoading) + return [PoolState.LOADING, null]; + if (!slot0 || !liquidity) + return [PoolState.NOT_EXISTS, null]; + if (!slot0.sqrtPriceX96 || slot0.sqrtPriceX96.eq(0)) + return [PoolState.NOT_EXISTS, null]; + try { + return [PoolState.EXISTS, new v3Sdk.Pool(token0, token1, fee, slot0.sqrtPriceX96, liquidity[0], slot0.tick)]; + } + catch (error) { + console.error('Error when constructing the pool', error); + return [PoolState.NOT_EXISTS, null]; + } + }); + }, [liquidities, poolKeys, slot0s, transformed]); +} + +/** + * Returns all the existing pools that should be considered for swapping between an input currency and an output currency + * @param currencyIn the input currency + * @param currencyOut the output currency + */ +function useV3SwapPools(currencyIn, currencyOut) { + var chainId = useActiveWeb3React().chainId; + var allCurrencyCombinations = useAllCurrencyCombinations(currencyIn, currencyOut); + var allCurrencyCombinationsWithAllFees = React.useMemo(function () { + return allCurrencyCombinations.reduce(function (list, _a) { + var _b = __read(_a, 2), tokenA = _b[0], tokenB = _b[1]; + return chainId === SupportedChainId.MAINNET + ? list.concat([ + [tokenA, tokenB, v3Sdk.FeeAmount.LOW], + [tokenA, tokenB, v3Sdk.FeeAmount.MEDIUM], + [tokenA, tokenB, v3Sdk.FeeAmount.HIGH], + ]) + : list.concat([ + [tokenA, tokenB, v3Sdk.FeeAmount.LOWEST], + [tokenA, tokenB, v3Sdk.FeeAmount.LOW], + [tokenA, tokenB, v3Sdk.FeeAmount.MEDIUM], + [tokenA, tokenB, v3Sdk.FeeAmount.HIGH], + ]); + }, []); + }, [allCurrencyCombinations, chainId]); + var pools = usePools(allCurrencyCombinationsWithAllFees); + return React.useMemo(function () { + return { + pools: pools + .filter(function (tuple) { + return tuple[0] === PoolState.EXISTS && tuple[1] !== null; + }) + .map(function (_a) { + var _b = __read(_a, 2), pool = _b[1]; + return pool; + }), + loading: pools.some(function (_a) { + var _b = __read(_a, 1), state = _b[0]; + return state === PoolState.LOADING; + }), + }; + }, [pools]); +} + +/** + * Returns true if poolA is equivalent to poolB + * @param poolA one of the two pools + * @param poolB the other pool + */ +function poolEquals(poolA, poolB) { + return (poolA === poolB || + (poolA.token0.equals(poolB.token0) && poolA.token1.equals(poolB.token1) && poolA.fee === poolB.fee)); +} +function computeAllRoutes(currencyIn, currencyOut, pools, chainId, currentPath, allPaths, startCurrencyIn, maxHops) { + var e_1, _a; + if (currentPath === void 0) { currentPath = []; } + if (allPaths === void 0) { allPaths = []; } + if (startCurrencyIn === void 0) { startCurrencyIn = currencyIn; } + if (maxHops === void 0) { maxHops = 2; } + var tokenIn = currencyIn === null || currencyIn === void 0 ? void 0 : currencyIn.wrapped; + var tokenOut = currencyOut === null || currencyOut === void 0 ? void 0 : currencyOut.wrapped; + if (!tokenIn || !tokenOut) + throw new Error('Missing tokenIn/tokenOut'); + var _loop_1 = function (pool) { + if (!pool.involvesToken(tokenIn) || currentPath.find(function (pathPool) { return poolEquals(pool, pathPool); })) + return "continue"; + var outputToken = pool.token0.equals(tokenIn) ? pool.token1 : pool.token0; + if (outputToken.equals(tokenOut)) { + allPaths.push(new v3Sdk.Route(__spreadArray(__spreadArray([], __read(currentPath), false), [pool], false), startCurrencyIn, currencyOut)); + } + else if (maxHops > 1) { + computeAllRoutes(outputToken, currencyOut, pools, chainId, __spreadArray(__spreadArray([], __read(currentPath), false), [pool], false), allPaths, startCurrencyIn, maxHops - 1); + } + }; + try { + for (var pools_1 = __values(pools), pools_1_1 = pools_1.next(); !pools_1_1.done; pools_1_1 = pools_1.next()) { + var pool = pools_1_1.value; + _loop_1(pool); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (pools_1_1 && !pools_1_1.done && (_a = pools_1.return)) _a.call(pools_1); + } + finally { if (e_1) throw e_1.error; } + } + return allPaths; +} +/** + * Returns all the routes from an input currency to an output currency + * @param currencyIn the input currency + * @param currencyOut the output currency + */ +function useAllV3Routes(currencyIn, currencyOut) { + var chainId = useActiveWeb3React().chainId; + var _a = useV3SwapPools(currencyIn, currencyOut), pools = _a.pools, poolsLoading = _a.loading; + return React.useMemo(function () { + if (poolsLoading || !chainId || !pools || !currencyIn || !currencyOut) + return { loading: true, routes: [] }; + var routes = computeAllRoutes(currencyIn, currencyOut, pools, chainId, [], [], currencyIn, 2); + return { loading: false, routes: routes }; + }, [chainId, currencyIn, currencyOut, pools, poolsLoading]); +} + +var _a$9; +var QUOTE_GAS_OVERRIDES = (_a$9 = {}, + _a$9[SupportedChainId.ARBITRUM_ONE] = 25000000, + _a$9[SupportedChainId.ARBITRUM_RINKEBY] = 25000000, + _a$9); +var DEFAULT_GAS_QUOTE = 2000000; +/** + * Returns the best v3 trade for a desired swap + * @param tradeType whether the swap is an exact in/out + * @param amountSpecified the exact amount to swap in/out + * @param otherCurrency the desired output/payment currency + */ +function useClientSideV3Trade(tradeType, amountSpecified, otherCurrency) { + var _a; + var _b = __read(React.useMemo(function () { + return tradeType === sdkCore.TradeType.EXACT_INPUT + ? [amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, otherCurrency] + : [otherCurrency, amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency]; + }, [tradeType, amountSpecified, otherCurrency]), 2), currencyIn = _b[0], currencyOut = _b[1]; + var _c = useAllV3Routes(currencyIn, currencyOut), routes = _c.routes, routesLoading = _c.loading; + var quoter = useV3Quoter(); + var chainId = useActiveWeb3React().chainId; + var quotesResults = useSingleContractWithCallData(quoter, amountSpecified + ? routes.map(function (route) { return v3Sdk.SwapQuoter.quoteCallParameters(route, amountSpecified, tradeType).calldata; }) + : [], { + gasRequired: chainId ? (_a = QUOTE_GAS_OVERRIDES[chainId]) !== null && _a !== void 0 ? _a : DEFAULT_GAS_QUOTE : undefined, + }); + return React.useMemo(function () { + if (!amountSpecified || + !currencyIn || + !currencyOut || + quotesResults.some(function (_a) { + var valid = _a.valid; + return !valid; + }) || + // skip when tokens are the same + (tradeType === sdkCore.TradeType.EXACT_INPUT + ? amountSpecified.currency.equals(currencyOut) + : amountSpecified.currency.equals(currencyIn))) { + return { + state: TradeState.INVALID, + trade: undefined, + }; + } + if (routesLoading || quotesResults.some(function (_a) { + var loading = _a.loading; + return loading; + })) { + return { + state: TradeState.LOADING, + trade: undefined, + }; + } + var _a = quotesResults.reduce(function (currentBest, _a, i) { + var result = _a.result; + if (!result) + return currentBest; + // overwrite the current best if it's not defined or if this route is better + if (tradeType === sdkCore.TradeType.EXACT_INPUT) { + var amountOut_1 = sdkCore.CurrencyAmount.fromRawAmount(currencyOut, result.amountOut.toString()); + if (currentBest.amountOut === null || JSBI__default["default"].lessThan(currentBest.amountOut.quotient, amountOut_1.quotient)) { + return { + bestRoute: routes[i], + amountIn: amountSpecified, + amountOut: amountOut_1, + }; + } + } + else { + var amountIn_1 = sdkCore.CurrencyAmount.fromRawAmount(currencyIn, result.amountIn.toString()); + if (currentBest.amountIn === null || JSBI__default["default"].greaterThan(currentBest.amountIn.quotient, amountIn_1.quotient)) { + return { + bestRoute: routes[i], + amountIn: amountIn_1, + amountOut: amountSpecified, + }; + } + } + return currentBest; + }, { + bestRoute: null, + amountIn: null, + amountOut: null, + }), bestRoute = _a.bestRoute, amountIn = _a.amountIn, amountOut = _a.amountOut; + if (!bestRoute || !amountIn || !amountOut) { + return { + state: TradeState.NO_ROUTE_FOUND, + trade: undefined, + }; + } + return { + state: TradeState.VALID, + trade: new InterfaceTrade({ + v2Routes: [], + v3Routes: [ + { + routev3: bestRoute, + inputAmount: amountIn, + outputAmount: amountOut, + }, + ], + tradeType: tradeType, + }), + }; + }, [amountSpecified, currencyIn, currencyOut, quotesResults, routes, routesLoading, tradeType]); +} + +var _a$8; +// Stablecoin amounts used when calculating spot price for a given currency. +// The amount is large enough to filter low liquidity pairs. +var STABLECOIN_AMOUNT_OUT = (_a$8 = {}, + _a$8[SupportedChainId.MAINNET] = sdkCore.CurrencyAmount.fromRawAmount(USDC, 100000000000), + _a$8[SupportedChainId.ARBITRUM_ONE] = sdkCore.CurrencyAmount.fromRawAmount(USDC_ARBITRUM, 10000000000), + _a$8[SupportedChainId.OPTIMISM] = sdkCore.CurrencyAmount.fromRawAmount(DAI_OPTIMISM, 1e+22), + _a$8[SupportedChainId.POLYGON] = sdkCore.CurrencyAmount.fromRawAmount(USDC_POLYGON, 10000000000), + _a$8); +/** + * Returns the price in USDC of the input currency + * @param currency currency to compute the USDC price of + */ +function useUSDCPrice(currency) { + var chainId = currency === null || currency === void 0 ? void 0 : currency.chainId; + var amountOut = chainId ? STABLECOIN_AMOUNT_OUT[chainId] : undefined; + var stablecoin = amountOut === null || amountOut === void 0 ? void 0 : amountOut.currency; + // TODO(#2808): remove dependency on useBestV2Trade + var v2USDCTrade = useBestV2Trade(sdkCore.TradeType.EXACT_OUTPUT, amountOut, currency, { + maxHops: 2, + }); + var v3USDCTrade = useClientSideV3Trade(sdkCore.TradeType.EXACT_OUTPUT, amountOut, currency); + return React.useMemo(function () { + if (!currency || !stablecoin) { + return undefined; + } + // handle usdc + if (currency === null || currency === void 0 ? void 0 : currency.wrapped.equals(stablecoin)) { + return new sdkCore.Price(stablecoin, stablecoin, '1', '1'); + } + // use v2 price if available, v3 as fallback + if (v2USDCTrade) { + var _a = v2USDCTrade.route.midPrice, numerator = _a.numerator, denominator = _a.denominator; + return new sdkCore.Price(currency, stablecoin, denominator, numerator); + } + else if (v3USDCTrade.trade) { + var _b = v3USDCTrade.trade.routes[0].midPrice, numerator = _b.numerator, denominator = _b.denominator; + return new sdkCore.Price(currency, stablecoin, denominator, numerator); + } + return undefined; + }, [currency, stablecoin, v2USDCTrade, v3USDCTrade.trade]); +} +function useUSDCValue(currencyAmount) { + var price = useUSDCPrice(currencyAmount === null || currencyAmount === void 0 ? void 0 : currencyAmount.currency); + return React.useMemo(function () { + if (!price || !currencyAmount) + return null; + try { + return price.quote(currencyAmount); + } + catch (error) { + return null; + } + }, [currencyAmount, price]); +} +/** + * + * @param fiatValue string representation of a USD amount + * @returns CurrencyAmount where currency is stablecoin on active chain + */ +function useStablecoinAmountFromFiatValue(fiatValue) { + var _a; + var chainId = useActiveWeb3React().chainId; + var stablecoin = chainId ? (_a = STABLECOIN_AMOUNT_OUT[chainId]) === null || _a === void 0 ? void 0 : _a.currency : undefined; + if (fiatValue === null || fiatValue === undefined || !chainId || !stablecoin) { + return undefined; + } + // trim for decimal precision when parsing + var parsedForDecimals = parseFloat(fiatValue).toFixed(stablecoin.decimals).toString(); + try { + // parse USD string into CurrencyAmount based on stablecoin decimals + return tryParseCurrencyAmount(parsedForDecimals, stablecoin); + } + catch (error) { + return undefined; + } +} + +var StyledPriceContainer = styled__default["default"].button(templateObject_1$N || (templateObject_1$N = __makeTemplateObject(["\n background-color: transparent;\n border: none;\n cursor: pointer;\n align-items: center;\n justify-content: flex-start;\n padding: 0;\n grid-template-columns: 1fr auto;\n grid-gap: 0.25rem;\n display: flex;\n flex-direction: row;\n text-align: left;\n flex-wrap: wrap;\n padding: 8px 0;\n user-select: text;\n"], ["\n background-color: transparent;\n border: none;\n cursor: pointer;\n align-items: center;\n justify-content: flex-start;\n padding: 0;\n grid-template-columns: 1fr auto;\n grid-gap: 0.25rem;\n display: flex;\n flex-direction: row;\n text-align: left;\n flex-wrap: wrap;\n padding: 8px 0;\n user-select: text;\n"]))); +function TradePrice(_a) { + var _b, _c, _d, _e, _f, _g; + var price = _a.price, showInverted = _a.showInverted, setShowInverted = _a.setShowInverted; + var theme = React.useContext(styled.ThemeContext); + var usdcPrice = useUSDCPrice(showInverted ? price.baseCurrency : price.quoteCurrency); + var formattedPrice; + try { + formattedPrice = showInverted ? price.toSignificant(4) : (_b = price.invert()) === null || _b === void 0 ? void 0 : _b.toSignificant(4); + } + catch (error) { + formattedPrice = '0'; + } + var label = showInverted ? "" + ((_c = price.quoteCurrency) === null || _c === void 0 ? void 0 : _c.symbol) : ((_d = price.baseCurrency) === null || _d === void 0 ? void 0 : _d.symbol) + " "; + var labelInverted = showInverted ? ((_e = price.baseCurrency) === null || _e === void 0 ? void 0 : _e.symbol) + " " : "" + ((_f = price.quoteCurrency) === null || _f === void 0 ? void 0 : _f.symbol); + var flipPrice = React.useCallback(function () { return setShowInverted(!showInverted); }, [setShowInverted, showInverted]); + var text = ((_g = '1 ' + labelInverted + ' = ' + formattedPrice) !== null && _g !== void 0 ? _g : '-') + " " + label; + return (jsxRuntime.jsxs(StyledPriceContainer, __assign({ onClick: function (e) { + e.stopPropagation(); // dont want this click to affect dropdowns / hovers + flipPrice(); + }, title: text }, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, color: theme.text1 }, { children: text }), void 0), ' ', usdcPrice && (jsxRuntime.jsx(ThemedText.DarkGray, { children: jsxRuntime.jsxs(macro.Trans, { children: ["($", usdcPrice.toSignificant(6, { groupSeparator: ',' }), ")"] }, void 0) }, void 0))] }), void 0)); +} +var templateObject_1$N; + +var Wrapper$d = styled__default["default"].div(templateObject_1$M || (templateObject_1$M = __makeTemplateObject(["\n position: relative;\n padding: 8px;\n"], ["\n position: relative;\n padding: 8px;\n"]))); +var ArrowWrapper$1 = styled__default["default"].div(templateObject_3$p || (templateObject_3$p = __makeTemplateObject(["\n padding: 4px;\n border-radius: 12px;\n height: 32px;\n width: 32px;\n position: relative;\n margin-top: -14px;\n margin-bottom: -14px;\n left: calc(50% - 16px);\n /* transform: rotate(90deg); */\n background-color: ", ";\n border: 4px solid ", ";\n z-index: 2;\n ", "\n"], ["\n padding: 4px;\n border-radius: 12px;\n height: 32px;\n width: 32px;\n position: relative;\n margin-top: -14px;\n margin-bottom: -14px;\n left: calc(50% - 16px);\n /* transform: rotate(90deg); */\n background-color: ", ";\n border: 4px solid ", ";\n z-index: 2;\n ", "\n"])), function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var theme = _a.theme; + return theme.bg0; +}, function (_a) { + var clickable = _a.clickable; + return clickable + ? styled.css(templateObject_2$w || (templateObject_2$w = __makeTemplateObject(["\n :hover {\n cursor: pointer;\n opacity: 0.8;\n }\n "], ["\n :hover {\n cursor: pointer;\n opacity: 0.8;\n }\n "]))) : null; +}); +var SectionBreak = styled__default["default"].div(templateObject_4$g || (templateObject_4$g = __makeTemplateObject(["\n height: 1px;\n width: 100%;\n background-color: ", ";\n"], ["\n height: 1px;\n width: 100%;\n background-color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg3; +}); +var ErrorText = styled__default["default"](rebass.Text)(templateObject_5$e || (templateObject_5$e = __makeTemplateObject(["\n color: ", ";\n"], ["\n color: ", ";\n"])), function (_a) { + var theme = _a.theme, severity = _a.severity; + return severity === 3 || severity === 4 + ? theme.red1 + : severity === 2 + ? theme.yellow2 + : severity === 1 + ? theme.text1 + : theme.text2; +}); +var TruncatedText = styled__default["default"](rebass.Text)(templateObject_6$a || (templateObject_6$a = __makeTemplateObject(["\n text-overflow: ellipsis;\n max-width: 220px;\n overflow: hidden;\n text-align: right;\n"], ["\n text-overflow: ellipsis;\n max-width: 220px;\n overflow: hidden;\n text-align: right;\n" + // styles +]))); +// styles +styled__default["default"].span(templateObject_7$9 || (templateObject_7$9 = __makeTemplateObject(["\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 &::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"]))); +var SwapCallbackErrorInner = styled__default["default"].div(templateObject_8$6 || (templateObject_8$6 = __makeTemplateObject(["\n background-color: ", ";\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: ", ";\n z-index: -1;\n p {\n padding: 0;\n margin: 0;\n font-weight: 500;\n }\n"], ["\n background-color: ", ";\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: ", ";\n z-index: -1;\n p {\n padding: 0;\n margin: 0;\n font-weight: 500;\n }\n"])), function (_a) { + var theme = _a.theme; + return polished.transparentize(0.9, theme.red1); +}, function (_a) { + var theme = _a.theme; + return theme.red1; +}); +var SwapCallbackErrorInnerAlertTriangle = styled__default["default"].div(templateObject_9$6 || (templateObject_9$6 = __makeTemplateObject(["\n background-color: ", ";\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 background-color: ", ";\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"])), function (_a) { + var theme = _a.theme; + return polished.transparentize(0.9, theme.red1); +}); +function SwapCallbackError(_a) { + var error = _a.error; + return (jsxRuntime.jsxs(SwapCallbackErrorInner, { children: [jsxRuntime.jsx(SwapCallbackErrorInnerAlertTriangle, { children: jsxRuntime.jsx(reactFeather.AlertTriangle, { size: 24 }, void 0) }, void 0), jsxRuntime.jsx("p", __assign({ style: { wordBreak: 'break-word' } }, { children: error }), void 0)] }, void 0)); +} +var SwapShowAcceptChanges = styled__default["default"](AutoColumn)(templateObject_10$5 || (templateObject_10$5 = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n padding: 0.5rem;\n border-radius: 12px;\n margin-top: 8px;\n"], ["\n background-color: ", ";\n color: ", ";\n padding: 0.5rem;\n border-radius: 12px;\n margin-top: 8px;\n"])), function (_a) { + var theme = _a.theme; + return polished.transparentize(0.95, theme.primary3); +}, function (_a) { + var theme = _a.theme; + return theme.primaryText1; +}); +styled__default["default"](ThemedText.Black)(templateObject_11$4 || (templateObject_11$4 = __makeTemplateObject(["\n border-bottom: 1px solid ", ";\n padding-bottom: 0.5rem;\n"], ["\n border-bottom: 1px solid ", ";\n padding-bottom: 0.5rem;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}); +var ResponsiveTooltipContainer = styled__default["default"](TooltipContainer)(templateObject_13$1 || (templateObject_13$1 = __makeTemplateObject(["\n background-color: ", ";\n border: 1px solid ", ";\n padding: 1rem;\n width: ", ";\n\n ", "\n"], ["\n background-color: ", ";\n border: 1px solid ", ";\n padding: 1rem;\n width: ", ";\n\n ", "\n"])), function (_a) { + var theme = _a.theme; + return theme.bg0; +}, function (_a) { + var theme = _a.theme; + return theme.bg2; +}, function (_a) { + var width = _a.width; + return width !== null && width !== void 0 ? width : 'auto'; +}, function (_a) { + var theme = _a.theme, origin = _a.origin; + return theme.mediaWidth.upToExtraSmall(templateObject_12$4 || (templateObject_12$4 = __makeTemplateObject(["\n transform: scale(0.8);\n transform-origin: ", ";\n "], ["\n transform: scale(0.8);\n transform-origin: ", ";\n "])), origin !== null && origin !== void 0 ? origin : 'top left'); +}); +styled__default["default"](TradePrice)(templateObject_14$1 || (templateObject_14$1 = __makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), loadingOpacityMixin); +var templateObject_1$M, templateObject_2$w, templateObject_3$p, templateObject_4$g, templateObject_5$e, templateObject_6$a, templateObject_7$9, templateObject_8$6, templateObject_9$6, templateObject_10$5, templateObject_11$4, templateObject_12$4, templateObject_13$1, templateObject_14$1; + +/** + * Formatted version of price impact text with warning colors + */ +function FormattedPriceImpact(_a) { + var priceImpact = _a.priceImpact; + return (jsxRuntime.jsx(ErrorText, __assign({ fontWeight: 500, fontSize: 14, severity: warningSeverity(priceImpact) }, { children: priceImpact ? priceImpact.multiply(-1).toFixed(2) + "%" : '-' }), void 0)); +} + +var StyledCard$1 = styled__default["default"](Card)(templateObject_1$L || (templateObject_1$L = __makeTemplateObject(["\n padding: 0;\n"], ["\n padding: 0;\n"]))); +function TextWithLoadingPlaceholder(_a) { + var syncing = _a.syncing, width = _a.width, children = _a.children; + return syncing ? (jsxRuntime.jsx(LoadingRows, { children: jsxRuntime.jsx("div", { style: { height: '15px', width: width + "px" } }, void 0) }, void 0)) : (children); +} +function AdvancedSwapDetails(_a) { + var trade = _a.trade, allowedSlippage = _a.allowedSlippage, _b = _a.syncing, syncing = _b === void 0 ? false : _b; + var theme = React.useContext(styled.ThemeContext); + var chainId = useActiveWeb3React().chainId; + var _c = React.useMemo(function () { + if (!trade) + return { expectedOutputAmount: undefined, priceImpact: undefined }; + var expectedOutputAmount = trade.outputAmount; + var realizedLpFeePercent = computeRealizedLPFeePercent(trade); + var priceImpact = trade.priceImpact.subtract(realizedLpFeePercent); + return { expectedOutputAmount: expectedOutputAmount, priceImpact: priceImpact }; + }, [trade]), expectedOutputAmount = _c.expectedOutputAmount, priceImpact = _c.priceImpact; + return !trade ? null : (jsxRuntime.jsx(StyledCard$1, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "8px" }, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(RowFixed, { children: jsxRuntime.jsx(ThemedText.SubHeader, __assign({ color: theme.text1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Expected Output" }, void 0) }), void 0) }, void 0), jsxRuntime.jsx(TextWithLoadingPlaceholder, __assign({ syncing: syncing, width: 65 }, { children: jsxRuntime.jsx(ThemedText.Black, __assign({ textAlign: "right", fontSize: 14 }, { children: expectedOutputAmount + ? expectedOutputAmount.toSignificant(6) + " " + expectedOutputAmount.currency.symbol + : '-' }), void 0) }), void 0)] }, void 0), jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(RowFixed, { children: jsxRuntime.jsx(ThemedText.SubHeader, __assign({ color: theme.text1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Price Impact" }, void 0) }), void 0) }, void 0), jsxRuntime.jsx(TextWithLoadingPlaceholder, __assign({ syncing: syncing, width: 50 }, { children: jsxRuntime.jsx(ThemedText.Black, __assign({ textAlign: "right", fontSize: 14 }, { children: jsxRuntime.jsx(FormattedPriceImpact, { priceImpact: priceImpact }, void 0) }), void 0) }), void 0)] }, void 0), jsxRuntime.jsx(Separator$1, {}, void 0), jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(RowFixed, __assign({ style: { marginRight: '20px' } }, { children: jsxRuntime.jsxs(ThemedText.SubHeader, __assign({ color: theme.text3 }, { children: [trade.tradeType === sdkCore.TradeType.EXACT_INPUT ? (jsxRuntime.jsx(macro.Trans, { children: "Minimum received" }, void 0)) : (jsxRuntime.jsx(macro.Trans, { children: "Maximum sent" }, void 0)), ' ', jsxRuntime.jsx(macro.Trans, { children: "after slippage" }, void 0), " (", allowedSlippage.toFixed(2), "%)"] }), void 0) }), void 0), jsxRuntime.jsx(TextWithLoadingPlaceholder, __assign({ syncing: syncing, width: 70 }, { children: jsxRuntime.jsx(ThemedText.Black, __assign({ textAlign: "right", fontSize: 14, color: theme.text3 }, { children: trade.tradeType === sdkCore.TradeType.EXACT_INPUT + ? trade.minimumAmountOut(allowedSlippage).toSignificant(6) + " " + trade.outputAmount.currency.symbol + : trade.maximumAmountIn(allowedSlippage).toSignificant(6) + " " + trade.inputAmount.currency.symbol }), void 0) }), void 0)] }, void 0), !(trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) || !chainId || !SUPPORTED_GAS_ESTIMATE_CHAIN_IDS.includes(chainId) ? null : (jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(ThemedText.SubHeader, __assign({ color: theme.text3 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Network Fee" }, void 0) }), void 0), jsxRuntime.jsx(TextWithLoadingPlaceholder, __assign({ syncing: syncing, width: 50 }, { children: jsxRuntime.jsxs(ThemedText.Black, __assign({ textAlign: "right", fontSize: 14, color: theme.text3 }, { children: ["~$", trade.gasUseEstimateUSD.toFixed(2)] }), void 0) }), void 0)] }, void 0))] }), void 0) }, void 0)); +} +var templateObject_1$L; + +var _path$3, _line$1, _line2, _path2; + +function _extends$4() { _extends$4 = 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$4.apply(this, arguments); } + +var SvgGasIcon = function SvgGasIcon(props) { + return /*#__PURE__*/React__namespace.createElement("svg", _extends$4({ + width: 16, + height: 16, + viewBox: "0 0 16 16", + fill: "none", + xmlns: "http://www.w3.org/2000/svg" + }, props), _path$3 || (_path$3 = /*#__PURE__*/React__namespace.createElement("path", { + d: "M10.0047 9.26921H10.2714C11.0078 9.26921 11.6047 9.86617 11.6047 10.6025V12.1359C11.6047 12.7987 12.142 13.3359 12.8047 13.3359C13.4675 13.3359 14.0047 12.7995 14.0047 12.1367V5.22059C14.0047 4.86697 13.7758 4.56227 13.5258 4.31223L10.6714 1.33594M4.00472 2.00254H8.00472C8.7411 2.00254 9.33805 2.59949 9.33805 3.33587V14.0015H2.67139V3.33587C2.67139 2.59949 3.26834 2.00254 4.00472 2.00254ZM14.0047 5.33587C14.0047 6.07225 13.4078 6.66921 12.6714 6.66921C11.935 6.66921 11.3381 6.07225 11.3381 5.33587C11.3381 4.59949 11.935 4.00254 12.6714 4.00254C13.4078 4.00254 14.0047 4.59949 14.0047 5.33587Z", + stroke: "white" + })), _line$1 || (_line$1 = /*#__PURE__*/React__namespace.createElement("line", { + x1: 4, + y1: 9.99414, + x2: 8, + y2: 9.99414, + stroke: "white" + })), _line2 || (_line2 = /*#__PURE__*/React__namespace.createElement("line", { + x1: 4, + y1: 11.9941, + x2: 8, + y2: 11.9941, + stroke: "white" + })), _path2 || (_path2 = /*#__PURE__*/React__namespace.createElement("path", { + d: "M4 8.16113H8", + stroke: "white" + }))); +}; + +var BadgeVariant; +(function (BadgeVariant) { + BadgeVariant["DEFAULT"] = "DEFAULT"; + BadgeVariant["NEGATIVE"] = "NEGATIVE"; + BadgeVariant["POSITIVE"] = "POSITIVE"; + BadgeVariant["PRIMARY"] = "PRIMARY"; + BadgeVariant["WARNING"] = "WARNING"; + BadgeVariant["WARNING_OUTLINE"] = "WARNING_OUTLINE"; +})(BadgeVariant || (BadgeVariant = {})); +function pickBackgroundColor(variant, theme) { + switch (variant) { + case BadgeVariant.NEGATIVE: + return theme.error; + case BadgeVariant.POSITIVE: + return theme.success; + case BadgeVariant.PRIMARY: + return theme.primary1; + case BadgeVariant.WARNING: + return theme.warning; + case BadgeVariant.WARNING_OUTLINE: + return 'transparent'; + default: + return theme.bg2; + } +} +function pickBorder(variant, theme) { + switch (variant) { + case BadgeVariant.WARNING_OUTLINE: + return "1px solid " + theme.warning; + default: + return 'unset'; + } +} +function pickFontColor(variant, theme) { + switch (variant) { + case BadgeVariant.NEGATIVE: + return polished.readableColor(theme.error); + case BadgeVariant.POSITIVE: + return polished.readableColor(theme.success); + case BadgeVariant.WARNING: + return polished.readableColor(theme.warning); + case BadgeVariant.WARNING_OUTLINE: + return theme.warning; + default: + return polished.readableColor(theme.bg2); + } +} +var Badge = styled__default["default"].div(templateObject_1$K || (templateObject_1$K = __makeTemplateObject(["\n align-items: center;\n background-color: ", ";\n border: ", ";\n border-radius: 0.5rem;\n color: ", ";\n display: inline-flex;\n padding: 4px 6px;\n justify-content: center;\n font-weight: 500;\n"], ["\n align-items: center;\n background-color: ", ";\n border: ", ";\n border-radius: 0.5rem;\n color: ", ";\n display: inline-flex;\n padding: 4px 6px;\n justify-content: center;\n font-weight: 500;\n"])), function (_a) { + var theme = _a.theme, variant = _a.variant; + return pickBackgroundColor(variant, theme); +}, function (_a) { + var theme = _a.theme, variant = _a.variant; + return pickBorder(variant, theme); +}, function (_a) { + var theme = _a.theme, variant = _a.variant; + return pickFontColor(variant, theme); +}); +var templateObject_1$K; + +function safeNamehash(name) { + if (name === undefined) + return undefined; + try { + return hash.namehash(name); + } + catch (error) { + console.debug(error); + return undefined; + } +} + +/** + * Returns true if the string value is zero in hex + * @param hexNumberString + */ +function isZero(hexNumberString) { + return /^0x0*$/.test(hexNumberString); +} + +/** + * Does a lookup for an ENS name to find its contenthash. + */ +function useENSContentHash(ensName) { + var _a; + var ensNodeArgument = React.useMemo(function () { return [ensName === null ? undefined : safeNamehash(ensName)]; }, [ensName]); + var registrarContract = useENSRegistrarContract(false); + var resolverAddressResult = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument); + var resolverAddress = (_a = resolverAddressResult.result) === null || _a === void 0 ? void 0 : _a[0]; + var resolverContract = useENSResolverContract(resolverAddress && isZero(resolverAddress) ? undefined : resolverAddress, false); + var contenthash = useSingleCallResult(resolverContract, 'contenthash', ensNodeArgument); + return React.useMemo(function () { + var _a, _b; + return ({ + contenthash: (_b = (_a = contenthash.result) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : null, + loading: resolverAddressResult.loading || contenthash.loading, + }); + }, [contenthash.loading, contenthash.result, resolverAddressResult.loading]); +} + +function useHttpLocations(uri) { + var ens = React.useMemo(function () { return (uri ? parseENSAddress(uri) : undefined); }, [uri]); + var resolvedContentHash = useENSContentHash(ens === null || ens === void 0 ? void 0 : ens.ensName); + return React.useMemo(function () { + if (ens) { + return resolvedContentHash.contenthash ? uriToHttp(contenthashToUri(resolvedContentHash.contenthash)) : []; + } + else { + return uri ? uriToHttp(uri) : []; + } + }, [ens, resolvedContentHash.contenthash, uri]); +} + +var MaticLogo = "data:image/svg+xml,%3Csvg%20width%3D%221024%22%20height%3D%221024%22%20viewBox%3D%220%200%201024%201024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Ccircle%20cx%3D%22512%22%20cy%3D%22512%22%20r%3D%22512%22%20fill%3D%22%238247E5%22%2F%3E%3Cpath%20d%3D%22M681.469%20402.456C669.189%20395.312%20653.224%20395.312%20639.716%20402.456L543.928%20457.228L478.842%20492.949L383.055%20547.721C370.774%20554.865%20354.81%20554.865%20341.301%20547.721L265.162%20504.856C252.882%20497.712%20244.286%20484.614%20244.286%20470.325V385.786C244.286%20371.498%20251.654%20358.4%20265.162%20351.256L340.073%20309.581C352.353%20302.437%20368.318%20302.437%20381.827%20309.581L456.737%20351.256C469.018%20358.4%20477.614%20371.498%20477.614%20385.786V440.558L542.7%20403.646V348.874C542.7%20334.586%20535.332%20321.488%20521.824%20314.344L383.055%20235.758C370.774%20228.614%20354.81%20228.614%20341.301%20235.758L200.076%20314.344C186.567%20321.488%20179.199%20334.586%20179.199%20348.874V507.237C179.199%20521.525%20186.567%20534.623%20200.076%20541.767L341.301%20620.353C353.582%20627.498%20369.546%20627.498%20383.055%20620.353L478.842%20566.772L543.928%20529.86L639.716%20476.279C651.996%20469.135%20667.961%20469.135%20681.469%20476.279L756.38%20517.953C768.66%20525.098%20777.257%20538.195%20777.257%20552.484V637.023C777.257%20651.312%20769.888%20664.409%20756.38%20671.553L681.469%20714.419C669.189%20721.563%20653.224%20721.563%20639.716%20714.419L564.805%20672.744C552.525%20665.6%20543.928%20652.502%20543.928%20638.214V583.442L478.842%20620.353V675.125C478.842%20689.414%20486.21%20702.512%20499.719%20709.656L640.944%20788.242C653.224%20795.386%20669.189%20795.386%20682.697%20788.242L823.922%20709.656C836.203%20702.512%20844.799%20689.414%20844.799%20675.125V516.763C844.799%20502.474%20837.431%20489.377%20823.922%20482.232L681.469%20402.456Z%22%20fill%3D%22white%22%2F%3E%3C%2Fsvg%3E"; + +function chainIdToNetworkName(networkId) { + switch (networkId) { + case SupportedChainId.MAINNET: + return 'ethereum'; + case SupportedChainId.ARBITRUM_ONE: + return 'arbitrum'; + case SupportedChainId.OPTIMISM: + return 'optimism'; + default: + return 'ethereum'; + } +} +function getNativeLogoURI(chainId) { + if (chainId === void 0) { chainId = SupportedChainId.MAINNET; } + switch (chainId) { + case SupportedChainId.POLYGON_MUMBAI: + case SupportedChainId.POLYGON: + return MaticLogo; + default: + return EthereumLogo; + } +} +function getTokenLogoURI(address, chainId) { + if (chainId === void 0) { chainId = SupportedChainId.MAINNET; } + var networkName = chainIdToNetworkName(chainId); + var networksWithUrls = [SupportedChainId.ARBITRUM_ONE, SupportedChainId.MAINNET, SupportedChainId.OPTIMISM]; + if (networksWithUrls.includes(chainId)) { + return "https://raw.githubusercontent.com/Uniswap/assets/master/blockchains/" + networkName + "/assets/" + address + "/logo.png"; + } +} +function useCurrencyLogoURIs(currency) { + var locations = useHttpLocations(currency instanceof WrappedTokenInfo ? currency.logoURI : undefined); + return React.useMemo(function () { + var logoURIs = __spreadArray([], __read(locations), false); + if (currency) { + if (currency.isNative) { + logoURIs.push(getNativeLogoURI(currency.chainId)); + } + else if (currency.isToken) { + var logoURI = getTokenLogoURI(currency.address, currency.chainId); + if (logoURI) { + logoURIs.push(logoURI); + } + } + } + return logoURIs; + }, [currency, locations]); +} + +function useTheme() { + return React.useContext(styled.ThemeContext); +} + +var BAD_SRCS = {}; +/** + * Renders an image by sequentially trying a list of URIs, and then eventually a fallback triangle alert + */ +function Logo(_a) { + var srcs = _a.srcs, alt = _a.alt, style = _a.style, rest = __rest(_a, ["srcs", "alt", "style"]); + var _b = __read(React.useState(0), 2), refresh = _b[1]; + var theme = useTheme(); + var src = srcs.find(function (src) { return !BAD_SRCS[src]; }); + if (src) { + return (jsxRuntime.jsx("img", __assign({}, rest, { alt: alt, src: src, style: style, onError: function () { + if (src) + BAD_SRCS[src] = true; + refresh(function (i) { return i + 1; }); + } }), void 0)); + } + return jsxRuntime.jsx(reactFeather.Slash, __assign({}, rest, { style: __assign(__assign({}, style), { color: theme.bg4 }) }), void 0); +} + +var StyledLogo$1 = styled__default["default"](Logo)(templateObject_1$J || (templateObject_1$J = __makeTemplateObject(["\n width: ", ";\n height: ", ";\n background: radial-gradient(white 50%, #ffffff00 calc(75% + 1px), #ffffff00 100%);\n border-radius: 50%;\n -mox-box-shadow: 0 0 1px ", ";\n -webkit-box-shadow: 0 0 1px ", ";\n box-shadow: 0 0 1px ", ";\n border: 0px solid rgba(255, 255, 255, 0);\n"], ["\n width: ", ";\n height: ", ";\n background: radial-gradient(white 50%, #ffffff00 calc(75% + 1px), #ffffff00 100%);\n border-radius: 50%;\n -mox-box-shadow: 0 0 1px ", ";\n -webkit-box-shadow: 0 0 1px ", ";\n box-shadow: 0 0 1px ", ";\n border: 0px solid rgba(255, 255, 255, 0);\n"])), function (_a) { + var size = _a.size; + return size; +}, function (_a) { + var size = _a.size; + return size; +}, function (_a) { + var native = _a.native; + return (native ? 'white' : 'black'); +}, function (_a) { + var native = _a.native; + return (native ? 'white' : 'black'); +}, function (_a) { + var native = _a.native; + return (native ? 'white' : 'black'); +}); +function CurrencyLogo(_a) { + var _b, _c; + var currency = _a.currency, _d = _a.size, size = _d === void 0 ? '24px' : _d, style = _a.style, rest = __rest(_a, ["currency", "size", "style"]); + var logoURIs = useCurrencyLogoURIs(currency); + return (jsxRuntime.jsx(StyledLogo$1, __assign({ size: size, native: (_b = currency === null || currency === void 0 ? void 0 : currency.isNative) !== null && _b !== void 0 ? _b : false, srcs: logoURIs, alt: ((_c = currency === null || currency === void 0 ? void 0 : currency.symbol) !== null && _c !== void 0 ? _c : 'token') + " logo", style: style }, rest), void 0)); +} +var templateObject_1$J; + +var Wrapper$c = styled__default["default"].div(templateObject_1$I || (templateObject_1$I = __makeTemplateObject(["\n position: relative;\n display: flex;\n flex-direction: row;\n margin-left: ", ";\n"], ["\n position: relative;\n display: flex;\n flex-direction: row;\n margin-left: ", ";\n"])), function (_a) { + var sizeraw = _a.sizeraw, margin = _a.margin; + return margin && (sizeraw / 3 + 8).toString() + 'px'; +}); +var HigherLogo = styled__default["default"](CurrencyLogo)(templateObject_2$v || (templateObject_2$v = __makeTemplateObject(["\n z-index: 2;\n"], ["\n z-index: 2;\n"]))); +var CoveredLogo = styled__default["default"](CurrencyLogo)(templateObject_3$o || (templateObject_3$o = __makeTemplateObject(["\n position: absolute;\n left: ", " !important;\n"], ["\n position: absolute;\n left: ", " !important;\n"])), function (_a) { + var sizeraw = _a.sizeraw; + return '-' + (sizeraw / 2).toString() + 'px'; +}); +function DoubleCurrencyLogo(_a) { + var currency0 = _a.currency0, currency1 = _a.currency1, _b = _a.size, size = _b === void 0 ? 16 : _b, _c = _a.margin, margin = _c === void 0 ? false : _c; + return (jsxRuntime.jsxs(Wrapper$c, __assign({ sizeraw: size, margin: margin }, { children: [currency0 && jsxRuntime.jsx(HigherLogo, { currency: currency0, size: size.toString() + 'px' }, void 0), currency1 && jsxRuntime.jsx(CoveredLogo, { currency: currency1, size: size.toString() + 'px', sizeraw: size }, void 0)] }), void 0)); +} +var templateObject_1$I, templateObject_2$v, templateObject_3$o; + +/** + * Returns a WrappedTokenInfo from the active token lists when possible, + * or the passed token otherwise. */ +function useTokenInfoFromActiveList(currency) { + var chainId = useActiveWeb3React().chainId; + var activeList = useCombinedActiveList(); + return React.useMemo(function () { + if (!chainId) + return; + if (currency.isNative) + return currency; + try { + return activeList[chainId][currency.wrapped.address].token; + } + catch (e) { + return currency; + } + }, [activeList, chainId, currency]); +} + +var _line; + +function _extends$3() { _extends$3 = 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$3.apply(this, arguments); } + +var SvgDotLine = function SvgDotLine(props) { + return /*#__PURE__*/React__namespace.createElement("svg", _extends$3({ + width: "100%", + height: 35, + viewBox: "800 0 300 200", + xmlns: "http://www.w3.org/2000/svg" + }, props), _line || (_line = /*#__PURE__*/React__namespace.createElement("line", { + x1: 0, + x2: 2000, + y1: 100, + y2: 100, + stroke: "currentColor", + strokeWidth: 20, + strokeLinecap: "round", + strokeDasharray: "1, 45" + }))); +}; + +var Wrapper$b = styled__default["default"](rebass.Box)(templateObject_1$H || (templateObject_1$H = __makeTemplateObject(["\n align-items: center;\n width: 100%;\n"], ["\n align-items: center;\n width: 100%;\n"]))); +var RouteContainerRow = styled__default["default"](Row)(templateObject_2$u || (templateObject_2$u = __makeTemplateObject(["\n display: grid;\n grid-template-columns: 24px 1fr 24px;\n"], ["\n display: grid;\n grid-template-columns: 24px 1fr 24px;\n"]))); +var RouteRow = styled__default["default"](Row)(templateObject_3$n || (templateObject_3$n = __makeTemplateObject(["\n align-items: center;\n display: flex;\n justify-content: center;\n padding: 0.1rem 0.5rem;\n position: relative;\n"], ["\n align-items: center;\n display: flex;\n justify-content: center;\n padding: 0.1rem 0.5rem;\n position: relative;\n"]))); +var PoolBadge = styled__default["default"](Badge)(templateObject_4$f || (templateObject_4$f = __makeTemplateObject(["\n display: flex;\n padding: 4px 4px;\n"], ["\n display: flex;\n padding: 4px 4px;\n"]))); +var DottedLine = styled__default["default"].div(templateObject_5$d || (templateObject_5$d = __makeTemplateObject(["\n display: flex;\n align-items: center;\n position: absolute;\n width: calc(100%);\n z-index: 1;\n opacity: 0.5;\n"], ["\n display: flex;\n align-items: center;\n position: absolute;\n width: calc(100%);\n z-index: 1;\n opacity: 0.5;\n"]))); +var DotColor = styled__default["default"](SvgDotLine)(templateObject_6$9 || (templateObject_6$9 = __makeTemplateObject(["\n path {\n stroke: ", ";\n }\n"], ["\n path {\n stroke: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.bg4; +}); +var OpaqueBadge = styled__default["default"](Badge)(templateObject_7$8 || (templateObject_7$8 = __makeTemplateObject(["\n background-color: ", ";\n border-radius: 8px;\n display: grid;\n font-size: 12px;\n grid-gap: 4px;\n grid-auto-flow: column;\n justify-content: start;\n padding: 4px 6px 4px 4px;\n z-index: ", ";\n"], ["\n background-color: ", ";\n border-radius: 8px;\n display: grid;\n font-size: 12px;\n grid-gap: 4px;\n grid-auto-flow: column;\n justify-content: start;\n padding: 4px 6px 4px 4px;\n z-index: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}, Z_INDEX.sticky); +var ProtocolBadge = styled__default["default"](Badge)(templateObject_8$5 || (templateObject_8$5 = __makeTemplateObject(["\n background-color: ", ";\n border-radius: 4px;\n color: ", ";\n font-size: 10px;\n padding: 2px 4px;\n z-index: ", ";\n"], ["\n background-color: ", ";\n border-radius: 4px;\n color: ", ";\n font-size: 10px;\n padding: 2px 4px;\n z-index: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg3; +}, function (_a) { + var theme = _a.theme; + return theme.text2; +}, Z_INDEX.sticky + 1); +var BadgeText = styled__default["default"](ThemedText.Small)(templateObject_9$5 || (templateObject_9$5 = __makeTemplateObject(["\n word-break: normal;\n"], ["\n word-break: normal;\n"]))); +function RoutingDiagram(_a) { + var currencyIn = _a.currencyIn, currencyOut = _a.currencyOut, routes = _a.routes; + var tokenIn = useTokenInfoFromActiveList(currencyIn); + var tokenOut = useTokenInfoFromActiveList(currencyOut); + return (jsxRuntime.jsx(Wrapper$b, { children: routes.map(function (entry, index) { return (jsxRuntime.jsxs(RouteContainerRow, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: tokenIn, size: '20px' }, void 0), jsxRuntime.jsx(Route, { entry: entry }, void 0), jsxRuntime.jsx(CurrencyLogo, { currency: tokenOut, size: '20px' }, void 0)] }, index)); }) }, void 0)); +} +function Route(_a) { + var _b = _a.entry, percent = _b.percent, path = _b.path, protocol = _b.protocol; + return (jsxRuntime.jsxs(RouteRow, { children: [jsxRuntime.jsx(DottedLine, { children: jsxRuntime.jsx(DotColor, {}, void 0) }, void 0), jsxRuntime.jsxs(OpaqueBadge, { children: [jsxRuntime.jsx(ProtocolBadge, { children: jsxRuntime.jsx(BadgeText, __assign({ fontSize: 12 }, { children: protocol.toUpperCase() }), void 0) }, void 0), jsxRuntime.jsxs(BadgeText, __assign({ fontSize: 14, style: { minWidth: 'auto' } }, { children: [percent.toSignificant(2), "%"] }), void 0)] }, void 0), jsxRuntime.jsx(AutoRow, __assign({ gap: "1px", width: "100%", style: { justifyContent: 'space-evenly', zIndex: 2 } }, { children: path.map(function (_a, index) { + var _b = __read(_a, 3), currency0 = _b[0], currency1 = _b[1], feeAmount = _b[2]; + return (jsxRuntime.jsx(Pool, { currency0: currency0, currency1: currency1, feeAmount: feeAmount }, index)); + }) }), void 0)] }, void 0)); +} +function Pool(_a) { + var currency0 = _a.currency0, currency1 = _a.currency1, feeAmount = _a.feeAmount; + var tokenInfo0 = useTokenInfoFromActiveList(currency0); + var tokenInfo1 = useTokenInfoFromActiveList(currency1); + // TODO - link pool icon to info.uniswap.org via query params + return (jsxRuntime.jsx(MouseoverTooltip, __assign({ text: jsxRuntime.jsxs(macro.Trans, { children: [(tokenInfo0 === null || tokenInfo0 === void 0 ? void 0 : tokenInfo0.symbol) + '/' + (tokenInfo1 === null || tokenInfo1 === void 0 ? void 0 : tokenInfo1.symbol) + ' ' + feeAmount / 10000, "% pool"] }, void 0) }, { children: jsxRuntime.jsxs(PoolBadge, { children: [jsxRuntime.jsx(rebass.Box, __assign({ margin: "0 4px 0 12px" }, { children: jsxRuntime.jsx(DoubleCurrencyLogo, { currency0: tokenInfo1, currency1: tokenInfo0, size: 20 }, void 0) }), void 0), jsxRuntime.jsxs(ThemedText.Small, __assign({ fontSize: 14 }, { children: [feeAmount / 10000, "%"] }), void 0)] }, void 0) }), void 0)); +} +var templateObject_1$H, templateObject_2$u, templateObject_3$n, templateObject_4$f, templateObject_5$d, templateObject_6$9, templateObject_7$8, templateObject_8$5, templateObject_9$5; + +var AUTO_ROUTER_SUPPORTED_CHAINS = Object.values(smartOrderRouter.ChainId); + +function useAutoRouterSupported() { + var chainId = useActiveWeb3React().chainId; + return Boolean(chainId && AUTO_ROUTER_SUPPORTED_CHAINS.includes(chainId)); +} + +var _defs, _path$2; + +function _extends$2() { _extends$2 = 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$2.apply(this, arguments); } + +var SvgAutoRouter = function SvgAutoRouter(props) { + return /*#__PURE__*/React__namespace.createElement("svg", _extends$2({ + width: 23, + height: 20, + viewBox: "0 0 23 20", + fill: "none", + xmlns: "http://www.w3.org/2000/svg" + }, props), _defs || (_defs = /*#__PURE__*/React__namespace.createElement("defs", null, /*#__PURE__*/React__namespace.createElement("linearGradient", { + id: "gradient1", + x1: 0, + y1: 0, + x2: 1, + y2: 0, + gradientTransform: "rotate(95)" + }, /*#__PURE__*/React__namespace.createElement("stop", { + id: "stop1", + offset: 0, + stopColor: "#2274E2" + }), /*#__PURE__*/React__namespace.createElement("stop", { + id: "stop1", + offset: 0.5, + stopColor: "#2274E2" + }), /*#__PURE__*/React__namespace.createElement("stop", { + id: "stop2", + offset: 1, + stopColor: "#3FB672" + })))), _path$2 || (_path$2 = /*#__PURE__*/React__namespace.createElement("path", { + d: "M16 16C10 16 9 10 5 10M16 16C16 17.6569 17.3431 19 19 19C20.6569 19 22 17.6569 22 16C22 14.3431 20.6569 13 19 13C17.3431 13 16 14.3431 16 16ZM5 10C9 10 10 4 16 4M5 10H1.5M16 4C16 5.65685 17.3431 7 19 7C20.6569 7 22 5.65685 22 4C22 2.34315 20.6569 1 19 1C17.3431 1 16 2.34315 16 4Z", + strokeWidth: 2, + strokeLinecap: "round", + strokeLinejoin: "round", + stroke: "url(#gradient1)" + }))); +}; + +var _path$1; + +function _extends$1() { _extends$1 = 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$1.apply(this, arguments); } + +var SvgStaticRoute = function SvgStaticRoute(props) { + return /*#__PURE__*/React__namespace.createElement("svg", _extends$1({ + width: 20, + height: 20, + viewBox: "0 0 20 22", + fill: "none", + xmlns: "http://www.w3.org/2000/svg" + }, props), _path$1 || (_path$1 = /*#__PURE__*/React__namespace.createElement("path", { + d: "M19 18C19 18.5523 18.5523 19 18 19V21C19.6569 21 21 19.6569 21 18H19ZM18 19C17.4477 19 17 18.5523 17 18H15C15 19.6569 16.3431 21 18 21V19ZM17 18C17 17.4477 17.4477 17 18 17V15C16.3431 15 15 16.3431 15 18H17ZM18 17C18.5523 17 19 17.4477 19 18H21C21 16.3431 19.6569 15 18 15V17ZM8 7H16V5H8V7ZM16 11H8V13H16V11ZM8 19H16V17H8V19ZM4 15C4 17.2091 5.79086 19 8 19V17C6.89543 17 6 16.1046 6 15H4ZM8 11C5.79086 11 4 12.7909 4 15H6C6 13.8954 6.89543 13 8 13V11ZM18 9C18 10.1046 17.1046 11 16 11V13C18.2091 13 20 11.2091 20 9H18ZM16 7C17.1046 7 18 7.89543 18 9H20C20 6.79086 18.2091 5 16 5V7ZM7 6C7 6.55228 6.55228 7 6 7V9C7.65685 9 9 7.65685 9 6H7ZM6 7C5.44772 7 5 6.55228 5 6H3C3 7.65685 4.34315 9 6 9V7ZM5 6C5 5.44772 5.44772 5 6 5V3C4.34315 3 3 4.34315 3 6H5ZM6 5C6.55228 5 7 5.44772 7 6H9C9 4.34315 7.65685 3 6 3V5Z" + }))); +}; + +var StyledAutoRouterIcon = styled__default["default"](SvgAutoRouter)(templateObject_1$G || (templateObject_1$G = __makeTemplateObject(["\n height: 16px;\n width: 16px;\n\n :hover {\n filter: brightness(1.3);\n }\n"], ["\n height: 16px;\n width: 16px;\n\n :hover {\n filter: brightness(1.3);\n }\n"]))); +var StyledStaticRouterIcon = styled__default["default"](SvgStaticRoute)(templateObject_2$t || (templateObject_2$t = __makeTemplateObject(["\n height: 16px;\n width: 16px;\n\n fill: ", ";\n\n :hover {\n filter: brightness(1.3);\n }\n"], ["\n height: 16px;\n width: 16px;\n\n fill: ", ";\n\n :hover {\n filter: brightness(1.3);\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text3; +}); +var StyledAutoRouterLabel = styled__default["default"](ThemedText.Black)(templateObject_3$m || (templateObject_3$m = __makeTemplateObject(["\n line-height: 1rem;\n\n /* fallback color */\n color: ", ";\n\n @supports (-webkit-background-clip: text) and (-webkit-text-fill-color: transparent) {\n background-image: linear-gradient(90deg, #2172e5 0%, #54e521 163.16%);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n }\n"], ["\n line-height: 1rem;\n\n /* fallback color */\n color: ", ";\n\n @supports (-webkit-background-clip: text) and (-webkit-text-fill-color: transparent) {\n background-image: linear-gradient(90deg, #2172e5 0%, #54e521 163.16%);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.green1; +}); +function AutoRouterLogo() { + var autoRouterSupported = useAutoRouterSupported(); + return autoRouterSupported ? jsxRuntime.jsx(StyledAutoRouterIcon, {}, void 0) : jsxRuntime.jsx(StyledStaticRouterIcon, {}, void 0); +} +function AutoRouterLabel() { + var autoRouterSupported = useAutoRouterSupported(); + return autoRouterSupported ? (jsxRuntime.jsx(StyledAutoRouterLabel, __assign({ fontSize: 14 }, { children: "Auto Router" }), void 0)) : (jsxRuntime.jsx(ThemedText.Black, __assign({ fontSize: 14 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Trade Route" }, void 0) }), void 0)); +} +var templateObject_1$G, templateObject_2$t, templateObject_3$m; + +var Wrapper$a = styled__default["default"](AutoColumn)(templateObject_1$F || (templateObject_1$F = __makeTemplateObject(["\n padding: ", ";\n border-radius: 16px;\n border: 1px solid ", ";\n cursor: pointer;\n"], ["\n padding: ", ";\n border-radius: 16px;\n border: 1px solid ", ";\n cursor: pointer;\n"])), function (_a) { + var fixedOpen = _a.fixedOpen; + return (fixedOpen ? '12px' : '12px 8px 12px 12px'); +}, function (_a) { + var theme = _a.theme, fixedOpen = _a.fixedOpen; + return (fixedOpen ? 'transparent' : theme.bg2); +}); +var OpenCloseIcon = styled__default["default"](reactFeather.Plus)(templateObject_2$s || (templateObject_2$s = __makeTemplateObject(["\n margin-left: 8px;\n height: 20px;\n stroke-width: 2px;\n transition: transform 0.1s;\n transform: ", ";\n stroke: ", ";\n cursor: pointer;\n :hover {\n opacity: 0.8;\n }\n"], ["\n margin-left: 8px;\n height: 20px;\n stroke-width: 2px;\n transition: transform 0.1s;\n transform: ", ";\n stroke: ", ";\n cursor: pointer;\n :hover {\n opacity: 0.8;\n }\n"])), function (_a) { + var open = _a.open; + return (open ? 'rotate(45deg)' : 'none'); +}, function (_a) { + var theme = _a.theme; + return theme.text3; +}); +var V2_DEFAULT_FEE_TIER = 3000; +var SwapRoute = React.memo(function SwapRoute(_a) { + var trade = _a.trade, syncing = _a.syncing, _b = _a.fixedOpen, fixedOpen = _b === void 0 ? false : _b, rest = __rest(_a, ["trade", "syncing", "fixedOpen"]); + var autoRouterSupported = useAutoRouterSupported(); + var routes = getTokenPath(trade); + var _c = __read(React.useState(false), 2), open = _c[0], setOpen = _c[1]; + var chainId = useActiveWeb3React().chainId; + var _d = __read(useDarkModeManager(), 1), darkMode = _d[0]; + var formattedGasPriceString = (trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) + ? trade.gasUseEstimateUSD.toFixed(2) === '0.00' + ? '<$0.01' + : '$' + trade.gasUseEstimateUSD.toFixed(2) + : undefined; + return (jsxRuntime.jsxs(Wrapper$a, __assign({}, rest, { darkMode: darkMode, fixedOpen: fixedOpen }, { children: [jsxRuntime.jsxs(RowBetween, __assign({ onClick: function () { return setOpen(!open); } }, { children: [jsxRuntime.jsxs(AutoRow, __assign({ gap: "4px", width: "auto" }, { children: [jsxRuntime.jsx(AutoRouterLogo, {}, void 0), jsxRuntime.jsx(AutoRouterLabel, {}, void 0)] }), void 0), fixedOpen ? null : jsxRuntime.jsx(OpenCloseIcon, { open: open }, void 0)] }), void 0), jsxRuntime.jsx(AnimatedDropdown, __assign({ open: open || fixedOpen }, { children: jsxRuntime.jsxs(AutoRow, __assign({ gap: "4px", width: "auto", style: { paddingTop: '12px', margin: 0 } }, { children: [syncing ? (jsxRuntime.jsx(LoadingRows, { children: jsxRuntime.jsx("div", { style: { width: '400px', height: '30px' } }, void 0) }, void 0)) : (jsxRuntime.jsx(RoutingDiagram, { currencyIn: trade.inputAmount.currency, currencyOut: trade.outputAmount.currency, routes: routes }, void 0)), autoRouterSupported && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(Separator$1, {}, void 0), syncing ? (jsxRuntime.jsx(LoadingRows, { children: jsxRuntime.jsx("div", { style: { width: '250px', height: '15px' } }, void 0) }, void 0)) : (jsxRuntime.jsxs(ThemedText.Main, __assign({ fontSize: 12, width: 400, margin: 0 }, { children: [(trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) && chainId && SUPPORTED_GAS_ESTIMATE_CHAIN_IDS.includes(chainId) ? (jsxRuntime.jsxs(macro.Trans, { children: ["Best price route costs ~", formattedGasPriceString, " in gas. "] }, void 0)) : null, ' ', jsxRuntime.jsx(macro.Trans, { children: "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step." }, void 0)] }), void 0))] }, void 0))] }), void 0) }), void 0)] }), void 0)); +}); +function getTokenPath(trade) { + return trade.swaps.map(function (_a) { + var _b = _a.route, tokenPath = _b.path, pools = _b.pools, protocol = _b.protocol, inputAmount = _a.inputAmount, outputAmount = _a.outputAmount; + var portion = trade.tradeType === sdkCore.TradeType.EXACT_INPUT + ? inputAmount.divide(trade.inputAmount) + : outputAmount.divide(trade.outputAmount); + var percent = new sdkCore.Percent(portion.numerator, portion.denominator); + var path = []; + for (var i = 0; i < pools.length; i++) { + var nextPool = pools[i]; + var tokenIn = tokenPath[i]; + var tokenOut = tokenPath[i + 1]; + var entry = [ + tokenIn, + tokenOut, + nextPool instanceof v2Sdk.Pair ? V2_DEFAULT_FEE_TIER : nextPool.fee, + ]; + path.push(entry); + } + return { + percent: percent, + path: path, + protocol: protocol, + }; + }); +} +var templateObject_1$F, templateObject_2$s; + +var GasWrapper = styled__default["default"](RowFixed)(templateObject_1$E || (templateObject_1$E = __makeTemplateObject(["\n border-radius: 8px;\n padding: 4px 6px;\n height: 24px;\n color: ", ";\n background-color: ", ";\n font-size: 14px;\n font-weight: 500;\n user-select: none;\n"], ["\n border-radius: 8px;\n padding: 4px 6px;\n height: 24px;\n color: ", ";\n background-color: ", ";\n font-size: 14px;\n font-weight: 500;\n user-select: none;\n"])), function (_a) { + var theme = _a.theme; + return theme.text3; +}, function (_a) { + var theme = _a.theme; + return theme.bg1; +}); +var StyledGasIcon = styled__default["default"](SvgGasIcon)(templateObject_2$r || (templateObject_2$r = __makeTemplateObject(["\n margin-right: 4px;\n height: 14px;\n & > * {\n stroke: ", ";\n }\n"], ["\n margin-right: 4px;\n height: 14px;\n & > * {\n stroke: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text3; +}); +function GasEstimateBadge(_a) { + var _b; + var trade = _a.trade, loading = _a.loading, showRoute = _a.showRoute, disableHover = _a.disableHover; + var formattedGasPriceString = (trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) + ? trade.gasUseEstimateUSD.toFixed(2) === '0.00' + ? '<$0.01' + : '$' + trade.gasUseEstimateUSD.toFixed(2) + : undefined; + return (jsxRuntime.jsx(MouseoverTooltipContent, __assign({ wrap: false, disableHover: disableHover, content: loading ? null : (jsxRuntime.jsx(ResponsiveTooltipContainer, __assign({ origin: "top right", style: { + padding: showRoute ? '0' : '12px', + border: 'none', + borderRadius: showRoute ? '16px' : '12px', + maxWidth: '400px', + } }, { children: showRoute ? (trade ? (jsxRuntime.jsx(SwapRoute, { trade: trade, syncing: loading, fixedOpen: showRoute }, void 0)) : null) : (jsxRuntime.jsxs(AutoColumn, __assign({ gap: "4px", justify: "center" }, { children: [jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: "12px", textAlign: "center" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Estimated network fee" }, void 0) }), void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ textAlign: "center", fontWeight: 500, style: { userSelect: 'none' } }, { children: jsxRuntime.jsxs(macro.Trans, { children: ["$", (_b = trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) === null || _b === void 0 ? void 0 : _b.toFixed(2)] }, void 0) }), void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: "10px", textAlign: "center", maxWidth: "140px", color: "text3" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Estimate may differ due to your wallet gas settings" }, void 0) }), void 0)] }), void 0)) }), void 0)), placement: "bottom", onOpen: function () { + return ReactGA__default["default"].event({ + category: 'Gas', + action: 'Gas Details Tooltip Open', + }); + } }, { children: jsxRuntime.jsx(LoadingOpacityContainer, __assign({ "$loading": loading }, { children: jsxRuntime.jsxs(GasWrapper, { children: [jsxRuntime.jsx(StyledGasIcon, {}, void 0), formattedGasPriceString !== null && formattedGasPriceString !== void 0 ? formattedGasPriceString : null] }, void 0) }), void 0) }), void 0)); +} +var templateObject_1$E, templateObject_2$r; + +var Wrapper$9 = styled__default["default"](Row)(templateObject_1$D || (templateObject_1$D = __makeTemplateObject(["\n width: 100%;\n justify-content: center;\n"], ["\n width: 100%;\n justify-content: center;\n"]))); +var StyledInfoIcon = styled__default["default"](reactFeather.Info)(templateObject_2$q || (templateObject_2$q = __makeTemplateObject(["\n height: 16px;\n width: 16px;\n margin-right: 4px;\n color: ", ";\n"], ["\n height: 16px;\n width: 16px;\n margin-right: 4px;\n color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.text3; +}); +var StyledCard = styled__default["default"](OutlineCard)(templateObject_3$l || (templateObject_3$l = __makeTemplateObject(["\n padding: 12px;\n border: 1px solid ", ";\n"], ["\n padding: 12px;\n border: 1px solid ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}); +var StyledHeaderRow = styled__default["default"](RowBetween)(templateObject_4$e || (templateObject_4$e = __makeTemplateObject(["\n padding: 4px 8px;\n border-radius: 12px;\n background-color: ", ";\n align-items: center;\n cursor: ", ";\n min-height: 40px;\n\n :hover {\n background-color: ", ";\n }\n"], ["\n padding: 4px 8px;\n border-radius: 12px;\n background-color: ", ";\n align-items: center;\n cursor: ", ";\n min-height: 40px;\n\n :hover {\n background-color: ", ";\n }\n"])), function (_a) { + var open = _a.open, theme = _a.theme; + return (open ? theme.bg1 : 'transparent'); +}, function (_a) { + var disabled = _a.disabled; + return (disabled ? 'initial' : 'pointer'); +}, function (_a) { + var theme = _a.theme, disabled = _a.disabled; + return (disabled ? theme.bg1 : polished.darken(0.015, theme.bg1)); +}); +var RotatingArrow = styled__default["default"](reactFeather.ChevronDown)(templateObject_5$c || (templateObject_5$c = __makeTemplateObject(["\n transform: ", ";\n transition: transform 0.1s linear;\n"], ["\n transform: ", ";\n transition: transform 0.1s linear;\n"])), function (_a) { + var open = _a.open; + return (open ? 'rotate(180deg)' : 'none'); +}); +var StyledPolling = styled__default["default"].div(templateObject_7$7 || (templateObject_7$7 = __makeTemplateObject(["\n display: flex;\n height: 16px;\n width: 16px;\n margin-right: 2px;\n margin-left: 10px;\n align-items: center;\n color: ", ";\n transition: 250ms ease color;\n\n ", "\n"], ["\n display: flex;\n height: 16px;\n width: 16px;\n margin-right: 2px;\n margin-left: 10px;\n align-items: center;\n color: ", ";\n transition: 250ms ease color;\n\n ", "\n"])), function (_a) { + var theme = _a.theme; + return theme.text1; +}, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToMedium(templateObject_6$8 || (templateObject_6$8 = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); +}); +var StyledPollingDot = styled__default["default"].div(templateObject_8$4 || (templateObject_8$4 = __makeTemplateObject(["\n width: 8px;\n height: 8px;\n min-height: 8px;\n min-width: 8px;\n border-radius: 50%;\n position: relative;\n background-color: ", ";\n transition: 250ms ease background-color;\n"], ["\n width: 8px;\n height: 8px;\n min-height: 8px;\n min-width: 8px;\n border-radius: 50%;\n position: relative;\n background-color: ", ";\n transition: 250ms ease background-color;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}); +var rotate360 = styled.keyframes(templateObject_9$4 || (templateObject_9$4 = __makeTemplateObject(["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"], ["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"]))); +var Spinner = styled__default["default"].div(templateObject_10$4 || (templateObject_10$4 = __makeTemplateObject(["\n animation: ", " 1s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n transform: translateZ(0);\n border-top: 1px solid transparent;\n border-right: 1px solid transparent;\n border-bottom: 1px solid transparent;\n border-left: 2px solid ", ";\n background: transparent;\n width: 14px;\n height: 14px;\n border-radius: 50%;\n position: relative;\n transition: 250ms ease border-color;\n left: -3px;\n top: -3px;\n"], ["\n animation: ", " 1s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n transform: translateZ(0);\n border-top: 1px solid transparent;\n border-right: 1px solid transparent;\n border-bottom: 1px solid transparent;\n border-left: 2px solid ", ";\n background: transparent;\n width: 14px;\n height: 14px;\n border-radius: 50%;\n position: relative;\n transition: 250ms ease border-color;\n left: -3px;\n top: -3px;\n"])), rotate360, function (_a) { + var theme = _a.theme; + return theme.text1; +}); +function SwapDetailsDropdown(_a) { + var trade = _a.trade, syncing = _a.syncing, loading = _a.loading, showInverted = _a.showInverted, setShowInverted = _a.setShowInverted, allowedSlippage = _a.allowedSlippage; + var theme = styled.useTheme(); + var chainId = useActiveWeb3React().chainId; + var _b = __read(React.useState(false), 2), showDetails = _b[0], setShowDetails = _b[1]; + return (jsxRuntime.jsx(Wrapper$9, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: '8px', style: { width: '100%', marginBottom: '-8px' } }, { children: [jsxRuntime.jsxs(StyledHeaderRow, __assign({ onClick: function () { return setShowDetails(!showDetails); }, disabled: !trade, open: showDetails }, { children: [jsxRuntime.jsxs(RowFixed, __assign({ style: { position: 'relative' } }, { children: [loading || syncing ? (jsxRuntime.jsx(StyledPolling, { children: jsxRuntime.jsx(StyledPollingDot, { children: jsxRuntime.jsx(Spinner, {}, void 0) }, void 0) }, void 0)) : (jsxRuntime.jsx(HideSmall, { children: jsxRuntime.jsx(MouseoverTooltipContent, __assign({ wrap: false, content: jsxRuntime.jsx(ResponsiveTooltipContainer, __assign({ origin: "top right", style: { padding: '0' } }, { children: jsxRuntime.jsx(Card, __assign({ padding: "12px" }, { children: jsxRuntime.jsx(AdvancedSwapDetails, { trade: trade, allowedSlippage: allowedSlippage, syncing: syncing }, void 0) }), void 0) }), void 0), placement: "bottom", disableHover: showDetails }, { children: jsxRuntime.jsx(StyledInfoIcon, { color: trade ? theme.text3 : theme.bg3 }, void 0) }), void 0) }, void 0)), trade ? (jsxRuntime.jsx(LoadingOpacityContainer, __assign({ "$loading": syncing }, { children: jsxRuntime.jsx(TradePrice, { price: trade.executionPrice, showInverted: showInverted, setShowInverted: setShowInverted }, void 0) }), void 0)) : loading || syncing ? (jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: 14 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Fetching best price..." }, void 0) }), void 0)) : null] }), void 0), jsxRuntime.jsxs(RowFixed, { children: [!(trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) || + showDetails || + !chainId || + !SUPPORTED_GAS_ESTIMATE_CHAIN_IDS.includes(chainId) ? null : (jsxRuntime.jsx(GasEstimateBadge, { trade: trade, loading: syncing || loading, showRoute: !showDetails, disableHover: showDetails }, void 0)), jsxRuntime.jsx(RotatingArrow, { stroke: trade ? theme.text3 : theme.bg3, open: Boolean(trade && showDetails) }, void 0)] }, void 0)] }), void 0), jsxRuntime.jsx(AnimatedDropdown, __assign({ open: showDetails }, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: '8px', style: { padding: '0', paddingBottom: '8px' } }, { children: [trade ? (jsxRuntime.jsx(StyledCard, { children: jsxRuntime.jsx(AdvancedSwapDetails, { trade: trade, allowedSlippage: allowedSlippage, syncing: syncing }, void 0) }, void 0)) : null, trade ? jsxRuntime.jsx(SwapRoute, { trade: trade, syncing: syncing }, void 0) : null] }), void 0) }), void 0)] }), void 0) }, void 0)); +} +var templateObject_1$D, templateObject_2$q, templateObject_3$l, templateObject_4$e, templateObject_5$c, templateObject_6$8, templateObject_7$7, templateObject_8$4, templateObject_9$4, templateObject_10$4; + +var BaseButton = styled__default["default"](styledComponents.Button)(templateObject_1$C || (templateObject_1$C = __makeTemplateObject(["\n padding: ", ";\n width: ", ";\n font-weight: 500;\n text-align: center;\n border-radius: ", ";\n outline: none;\n border: 1px solid transparent;\n color: ", ";\n text-decoration: none;\n display: flex;\n justify-content: center;\n flex-wrap: nowrap;\n align-items: center;\n cursor: pointer;\n position: relative;\n z-index: 1;\n &:disabled {\n opacity: 50%;\n cursor: auto;\n pointer-events: none;\n }\n\n will-change: transform;\n transition: transform 450ms ease;\n transform: perspective(1px) translateZ(0);\n\n > * {\n user-select: none;\n }\n\n > a {\n text-decoration: none;\n }\n"], ["\n padding: ", ";\n width: ", ";\n font-weight: 500;\n text-align: center;\n border-radius: ", ";\n outline: none;\n border: 1px solid transparent;\n color: ", ";\n text-decoration: none;\n display: flex;\n justify-content: center;\n flex-wrap: nowrap;\n align-items: center;\n cursor: pointer;\n position: relative;\n z-index: 1;\n &:disabled {\n opacity: 50%;\n cursor: auto;\n pointer-events: none;\n }\n\n will-change: transform;\n transition: transform 450ms ease;\n transform: perspective(1px) translateZ(0);\n\n > * {\n user-select: none;\n }\n\n > a {\n text-decoration: none;\n }\n"])), function (_a) { + var padding = _a.padding; + return padding !== null && padding !== void 0 ? padding : '16px'; +}, function (_a) { + var width = _a.width; + return width !== null && width !== void 0 ? width : '100%'; +}, function (_a) { + var $borderRadius = _a.$borderRadius; + return $borderRadius !== null && $borderRadius !== void 0 ? $borderRadius : '20px'; +}, function (_a) { + var theme = _a.theme; + return theme.text1; +}); +var ButtonPrimary = styled__default["default"](BaseButton)(templateObject_2$p || (templateObject_2$p = __makeTemplateObject(["\n background-color: ", ";\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n background-color: ", ";\n color: ", ";\n cursor: auto;\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n"], ["\n background-color: ", ";\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n background-color: ", ";\n color: ", ";\n cursor: auto;\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.primary1; +}, function (_a) { + var theme = _a.theme; + return polished.darken(0.05, theme.primary1); +}, function (_a) { + var theme = _a.theme; + return polished.darken(0.05, theme.primary1); +}, function (_a) { + var theme = _a.theme; + return polished.darken(0.05, theme.primary1); +}, function (_a) { + var theme = _a.theme; + return polished.darken(0.1, theme.primary1); +}, function (_a) { + var theme = _a.theme; + return polished.darken(0.1, theme.primary1); +}, function (_a) { + var theme = _a.theme, altDisabledStyle = _a.altDisabledStyle, disabled = _a.disabled; + return altDisabledStyle ? (disabled ? theme.primary1 : theme.bg2) : theme.bg2; +}, function (_a) { + var altDisabledStyle = _a.altDisabledStyle, disabled = _a.disabled, theme = _a.theme; + return altDisabledStyle ? (disabled ? theme.white : theme.text2) : theme.text2; +}); +var ButtonLight = styled__default["default"](BaseButton)(templateObject_3$k || (templateObject_3$k = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n font-size: 16px;\n font-weight: 500;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n :disabled {\n opacity: 0.4;\n :hover {\n cursor: auto;\n background-color: ", ";\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n }\n"], ["\n background-color: ", ";\n color: ", ";\n font-size: 16px;\n font-weight: 500;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n :disabled {\n opacity: 0.4;\n :hover {\n cursor: auto;\n background-color: ", ";\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.primary5; +}, function (_a) { + var theme = _a.theme; + return theme.primaryText1; +}, function (_a) { + var theme = _a.theme, disabled = _a.disabled; + return !disabled && polished.darken(0.03, theme.primary5); +}, function (_a) { + var theme = _a.theme, disabled = _a.disabled; + return !disabled && polished.darken(0.03, theme.primary5); +}, function (_a) { + var theme = _a.theme, disabled = _a.disabled; + return !disabled && polished.darken(0.03, theme.primary5); +}, function (_a) { + var theme = _a.theme, disabled = _a.disabled; + return !disabled && polished.darken(0.05, theme.primary5); +}, function (_a) { + var theme = _a.theme, disabled = _a.disabled; + return !disabled && polished.darken(0.05, theme.primary5); +}, function (_a) { + var theme = _a.theme; + return theme.primary5; +}); +var ButtonGray = styled__default["default"](BaseButton)(templateObject_4$d || (templateObject_4$d = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n font-size: 16px;\n font-weight: 500;\n\n &:hover {\n background-color: ", ";\n }\n &:active {\n background-color: ", ";\n }\n"], ["\n background-color: ", ";\n color: ", ";\n font-size: 16px;\n font-weight: 500;\n\n &:hover {\n background-color: ", ";\n }\n &:active {\n background-color: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var theme = _a.theme; + return theme.text2; +}, function (_a) { + var theme = _a.theme, disabled = _a.disabled; + return !disabled && polished.darken(0.05, theme.bg2); +}, function (_a) { + var theme = _a.theme, disabled = _a.disabled; + return !disabled && polished.darken(0.1, theme.bg2); +}); +styled__default["default"](BaseButton)(templateObject_5$b || (templateObject_5$b = __makeTemplateObject(["\n border: 1px solid ", ";\n color: ", ";\n background-color: transparent;\n font-size: 16px;\n border-radius: 12px;\n padding: ", ";\n\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n border: 1px solid ", ";\n }\n &:hover {\n border: 1px solid ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n border: 1px solid ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n a:hover {\n text-decoration: none;\n }\n"], ["\n border: 1px solid ", ";\n color: ", ";\n background-color: transparent;\n font-size: 16px;\n border-radius: 12px;\n padding: ", ";\n\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n border: 1px solid ", ";\n }\n &:hover {\n border: 1px solid ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n border: 1px solid ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n a:hover {\n text-decoration: none;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.primary4; +}, function (_a) { + var theme = _a.theme; + return theme.primary1; +}, function (_a) { + var padding = _a.padding; + return (padding ? padding : '10px'); +}, function (_a) { + var theme = _a.theme; + return theme.primary4; +}, function (_a) { + var theme = _a.theme; + return theme.primary3; +}, function (_a) { + var theme = _a.theme; + return theme.primary3; +}, function (_a) { + var theme = _a.theme; + return theme.primary4; +}, function (_a) { + var theme = _a.theme; + return theme.primary3; +}); +var ButtonOutlined = styled__default["default"](BaseButton)(templateObject_6$7 || (templateObject_6$7 = __makeTemplateObject(["\n border: 1px solid ", ";\n background-color: transparent;\n color: ", ";\n &:focus {\n box-shadow: 0 0 0 1px ", ";\n }\n &:hover {\n box-shadow: 0 0 0 1px ", ";\n }\n &:active {\n box-shadow: 0 0 0 1px ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"], ["\n border: 1px solid ", ";\n background-color: transparent;\n color: ", ";\n &:focus {\n box-shadow: 0 0 0 1px ", ";\n }\n &:hover {\n box-shadow: 0 0 0 1px ", ";\n }\n &:active {\n box-shadow: 0 0 0 1px ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}, function (_a) { + var theme = _a.theme; + return theme.text1; +}, function (_a) { + var theme = _a.theme; + return theme.bg4; +}, function (_a) { + var theme = _a.theme; + return theme.bg4; +}, function (_a) { + var theme = _a.theme; + return theme.bg4; +}); +styled__default["default"](BaseButton)(templateObject_7$6 || (templateObject_7$6 = __makeTemplateObject(["\n background-color: ", ";\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n background-color: ", ";\n opacity: 50%;\n cursor: auto;\n }\n"], ["\n background-color: ", ";\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n background-color: ", ";\n opacity: 50%;\n cursor: auto;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.yellow3; +}, function (_a) { + var theme = _a.theme; + return polished.darken(0.05, theme.yellow3); +}, function (_a) { + var theme = _a.theme; + return polished.darken(0.05, theme.yellow3); +}, function (_a) { + var theme = _a.theme; + return polished.darken(0.05, theme.yellow3); +}, function (_a) { + var theme = _a.theme; + return polished.darken(0.1, theme.yellow3); +}, function (_a) { + var theme = _a.theme; + return polished.darken(0.1, theme.yellow3); +}, function (_a) { + var theme = _a.theme; + return theme.yellow3; +}); +var ButtonEmpty = styled__default["default"](BaseButton)(templateObject_8$3 || (templateObject_8$3 = __makeTemplateObject(["\n background-color: transparent;\n color: ", ";\n display: flex;\n justify-content: center;\n align-items: center;\n\n &:focus {\n text-decoration: underline;\n }\n &:hover {\n text-decoration: none;\n }\n &:active {\n text-decoration: none;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"], ["\n background-color: transparent;\n color: ", ";\n display: flex;\n justify-content: center;\n align-items: center;\n\n &:focus {\n text-decoration: underline;\n }\n &:hover {\n text-decoration: none;\n }\n &:active {\n text-decoration: none;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.primary1; +}); +styled__default["default"](BaseButton)(templateObject_9$3 || (templateObject_9$3 = __makeTemplateObject(["\n padding: 0;\n width: fit-content;\n background: none;\n text-decoration: none;\n &:focus {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n text-decoration: underline;\n }\n &:hover {\n // text-decoration: underline;\n opacity: 0.9;\n }\n &:active {\n text-decoration: underline;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"], ["\n padding: 0;\n width: fit-content;\n background: none;\n text-decoration: none;\n &:focus {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n text-decoration: underline;\n }\n &:hover {\n // text-decoration: underline;\n opacity: 0.9;\n }\n &:active {\n text-decoration: underline;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"]))); +var ButtonConfirmedStyle = styled__default["default"](BaseButton)(templateObject_10$3 || (templateObject_10$3 = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n /* border: 1px solid ", "; */\n\n &:disabled {\n opacity: 50%;\n background-color: ", ";\n color: ", ";\n cursor: auto;\n }\n"], ["\n background-color: ", ";\n color: ", ";\n /* border: 1px solid ", "; */\n\n &:disabled {\n opacity: 50%;\n background-color: ", ";\n color: ", ";\n cursor: auto;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.bg3; +}, function (_a) { + var theme = _a.theme; + return theme.text1; +}, function (_a) { + var theme = _a.theme; + return theme.green1; +}, function (_a) { + var theme = _a.theme; + return theme.bg2; +}, function (_a) { + var theme = _a.theme; + return theme.text2; +}); +var ButtonErrorStyle = styled__default["default"](BaseButton)(templateObject_11$3 || (templateObject_11$3 = __makeTemplateObject(["\n background-color: ", ";\n border: 1px solid ", ";\n\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n box-shadow: none;\n background-color: ", ";\n border: 1px solid ", ";\n }\n"], ["\n background-color: ", ";\n border: 1px solid ", ";\n\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n box-shadow: none;\n background-color: ", ";\n border: 1px solid ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.red1; +}, function (_a) { + var theme = _a.theme; + return theme.red1; +}, function (_a) { + var theme = _a.theme; + return polished.darken(0.05, theme.red1); +}, function (_a) { + var theme = _a.theme; + return polished.darken(0.05, theme.red1); +}, function (_a) { + var theme = _a.theme; + return polished.darken(0.05, theme.red1); +}, function (_a) { + var theme = _a.theme; + return polished.darken(0.1, theme.red1); +}, function (_a) { + var theme = _a.theme; + return polished.darken(0.1, theme.red1); +}, function (_a) { + var theme = _a.theme; + return theme.red1; +}, function (_a) { + var theme = _a.theme; + return theme.red1; +}); +function ButtonConfirmed(_a) { + var confirmed = _a.confirmed, altDisabledStyle = _a.altDisabledStyle, rest = __rest(_a, ["confirmed", "altDisabledStyle"]); + if (confirmed) { + return jsxRuntime.jsx(ButtonConfirmedStyle, __assign({}, rest), void 0); + } + else { + return jsxRuntime.jsx(ButtonPrimary, __assign({}, rest, { altDisabledStyle: altDisabledStyle }), void 0); + } +} +function ButtonError(_a) { + var error = _a.error, rest = __rest(_a, ["error"]); + if (error) { + return jsxRuntime.jsx(ButtonErrorStyle, __assign({}, rest), void 0); + } + else { + return jsxRuntime.jsx(ButtonPrimary, __assign({}, rest), void 0); + } +} +styled__default["default"](ButtonOutlined)(templateObject_12$3 || (templateObject_12$3 = __makeTemplateObject(["\n border: 1px solid;\n border-color: ", ";\n"], ["\n border: 1px solid;\n border-color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.primary1; +}); +styled__default["default"].div(templateObject_13 || (templateObject_13 = __makeTemplateObject(["\n height: 17px;\n width: 17px;\n border-radius: 50%;\n background-color: ", ";\n display: flex;\n align-items: center;\n justify-content: center;\n"], ["\n height: 17px;\n width: 17px;\n border-radius: 50%;\n background-color: ", ";\n display: flex;\n align-items: center;\n justify-content: center;\n"])), function (_a) { + var theme = _a.theme; + return theme.primary1; +}); +styled__default["default"].div(templateObject_14 || (templateObject_14 = __makeTemplateObject(["\n width: 20px;\n padding: 0 10px;\n position: absolute;\n top: 11px;\n right: 15px;\n"], ["\n width: 20px;\n padding: 0 10px;\n position: absolute;\n top: 11px;\n right: 15px;\n"]))); +styled__default["default"](reactFeather.Check)(templateObject_15 || (templateObject_15 = __makeTemplateObject(["\n size: 13px;\n"], ["\n size: 13px;\n"]))); +var templateObject_1$C, templateObject_2$p, templateObject_3$k, templateObject_4$d, templateObject_5$b, templateObject_6$7, templateObject_7$6, templateObject_8$3, templateObject_9$3, templateObject_10$3, templateObject_11$3, templateObject_12$3, templateObject_13, templateObject_14, templateObject_15; + +var parser = new uaParserJs.UAParser(window.navigator.userAgent); +var type$1 = parser.getDevice().type; +parser.getResult(); +var isMobile = type$1 === 'mobile' || type$1 === 'tablet'; + +var AnimatedDialogOverlay = reactSpring.animated(dialog.DialogOverlay); +// eslint-disable-next-line @typescript-eslint/no-unused-vars +var StyledDialogOverlay = styled__default["default"](AnimatedDialogOverlay)(templateObject_1$B || (templateObject_1$B = __makeTemplateObject(["\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: ", ";\n }\n"], ["\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: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.modalBG; +}); +var AnimatedDialogContent = reactSpring.animated(dialog.DialogContent); +// destructure to not pass custom props to Dialog DOM element +// eslint-disable-next-line @typescript-eslint/no-unused-vars +var StyledDialogContent = styled__default["default"](function (_a) { + _a.minHeight; _a.maxHeight; _a.mobile; _a.isOpen; var rest = __rest(_a, ["minHeight", "maxHeight", "mobile", "isOpen"]); + return (jsxRuntime.jsx(AnimatedDialogContent, __assign({}, rest), void 0)); +}).attrs({ + 'aria-label': 'dialog', +})(templateObject_7$5 || (templateObject_7$5 = __makeTemplateObject(["\n overflow-y: auto;\n\n &[data-reach-dialog-content] {\n margin: 0 0 2rem 0;\n background-color: ", ";\n border: 1px solid ", ";\n box-shadow: 0 4px 8px 0 ", ";\n padding: 0px;\n width: 50vw;\n overflow-y: auto;\n overflow-x: hidden;\n\n align-self: ", ";\n\n max-width: 420px;\n ", "\n ", "\n display: flex;\n border-radius: 20px;\n ", "\n ", "\n }\n"], ["\n overflow-y: auto;\n\n &[data-reach-dialog-content] {\n margin: 0 0 2rem 0;\n background-color: ", ";\n border: 1px solid ", ";\n box-shadow: 0 4px 8px 0 ", ";\n padding: 0px;\n width: 50vw;\n overflow-y: auto;\n overflow-x: hidden;\n\n align-self: ", ";\n\n max-width: 420px;\n ", "\n ", "\n display: flex;\n border-radius: 20px;\n ", "\n ", "\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.bg0; +}, function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var theme = _a.theme; + return polished.transparentize(0.95, theme.shadow1); +}, function (_a) { + var mobile = _a.mobile; + return (mobile ? 'flex-end' : 'center'); +}, function (_a) { + var maxHeight = _a.maxHeight; + return maxHeight && styled.css(templateObject_2$o || (templateObject_2$o = __makeTemplateObject(["\n max-height: ", "vh;\n "], ["\n max-height: ", "vh;\n "])), maxHeight); +}, function (_a) { + var minHeight = _a.minHeight; + return minHeight && styled.css(templateObject_3$j || (templateObject_3$j = __makeTemplateObject(["\n min-height: ", "vh;\n "], ["\n min-height: ", "vh;\n "])), minHeight); +}, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToMedium(templateObject_4$c || (templateObject_4$c = __makeTemplateObject(["\n width: 65vw;\n margin: 0;\n "], ["\n width: 65vw;\n margin: 0;\n "]))); +}, function (_a) { + var theme = _a.theme, mobile = _a.mobile; + return theme.mediaWidth.upToSmall(templateObject_6$6 || (templateObject_6$6 = __makeTemplateObject(["\n width: 85vw;\n ", "\n "], ["\n width: 85vw;\n ", "\n "])), mobile && styled.css(templateObject_5$a || (templateObject_5$a = __makeTemplateObject(["\n width: 100vw;\n border-radius: 20px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n "], ["\n width: 100vw;\n border-radius: 20px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n "])))); +}); +function Modal(_a) { + var isOpen = _a.isOpen, onDismiss = _a.onDismiss, _b = _a.minHeight, minHeight = _b === void 0 ? false : _b, _c = _a.maxHeight, maxHeight = _c === void 0 ? 90 : _c, initialFocusRef = _a.initialFocusRef, children = _a.children; + var fadeTransition = reactSpring.useTransition(isOpen, null, { + config: { duration: 200 }, + from: { opacity: 0 }, + enter: { opacity: 1 }, + leave: { opacity: 0 }, + }); + var _d = __read(reactSpring.useSpring(function () { return ({ y: 0, config: { mass: 1, tension: 210, friction: 20 } }); }), 2), y = _d[0].y, set = _d[1]; + var bind = reactUseGesture.useGesture({ + onDrag: function (state) { + set({ + y: state.down ? state.movement[1] : 0, + }); + if (state.movement[1] > 300 || (state.velocity > 3 && state.direction[1] > 0)) { + onDismiss(); + } + }, + }); + return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: fadeTransition.map(function (_a) { + var item = _a.item, key = _a.key, props = _a.props; + return item && (jsxRuntime.jsx(StyledDialogOverlay, __assign({ style: props, onDismiss: onDismiss, initialFocusRef: initialFocusRef, unstable_lockFocusAcrossFrames: false }, { children: jsxRuntime.jsxs(StyledDialogContent, __assign({}, (isMobile + ? __assign(__assign({}, bind()), { style: { transform: y.interpolate(function (y) { return "translateY(" + (y > 0 ? y : 0) + "px)"; }) } }) : {}), { "aria-label": "dialog content", minHeight: minHeight, maxHeight: maxHeight, mobile: isMobile }, { children: [!initialFocusRef && isMobile ? jsxRuntime.jsx("div", { tabIndex: 1 }, void 0) : null, children] }), void 0) }), key)); + }) }, void 0)); +} +var templateObject_1$B, templateObject_2$o, templateObject_3$j, templateObject_4$c, templateObject_5$a, templateObject_6$6, templateObject_7$5; + +var _a$7; +var ETHERSCAN_PREFIXES = (_a$7 = {}, + _a$7[SupportedChainId.MAINNET] = 'https://etherscan.io', + _a$7[SupportedChainId.ROPSTEN] = 'https://ropsten.etherscan.io', + _a$7[SupportedChainId.RINKEBY] = 'https://rinkeby.etherscan.io', + _a$7[SupportedChainId.GOERLI] = 'https://goerli.etherscan.io', + _a$7[SupportedChainId.KOVAN] = 'https://kovan.etherscan.io', + _a$7[SupportedChainId.OPTIMISM] = 'https://optimistic.etherscan.io', + _a$7[SupportedChainId.OPTIMISTIC_KOVAN] = 'https://kovan-optimistic.etherscan.io', + _a$7[SupportedChainId.POLYGON_MUMBAI] = 'https://mumbai.polygonscan.com', + _a$7[SupportedChainId.POLYGON] = 'https://polygonscan.com', + _a$7); +var ExplorerDataType; +(function (ExplorerDataType) { + ExplorerDataType["TRANSACTION"] = "transaction"; + ExplorerDataType["TOKEN"] = "token"; + ExplorerDataType["ADDRESS"] = "address"; + ExplorerDataType["BLOCK"] = "block"; +})(ExplorerDataType || (ExplorerDataType = {})); +/** + * Return the explorer link for the given data and data type + * @param chainId the ID of the chain for which to return the data + * @param data the data to return a link for + * @param type the type of the data + */ +function getExplorerLink(chainId, data, type) { + var _a; + if (chainId === SupportedChainId.ARBITRUM_ONE) { + switch (type) { + case ExplorerDataType.TRANSACTION: + return "https://arbiscan.io/tx/" + data; + case ExplorerDataType.ADDRESS: + case ExplorerDataType.TOKEN: + return "https://arbiscan.io/address/" + data; + case ExplorerDataType.BLOCK: + return "https://arbiscan.io/block/" + data; + default: + return "https://arbiscan.io/"; + } + } + if (chainId === SupportedChainId.ARBITRUM_RINKEBY) { + switch (type) { + case ExplorerDataType.TRANSACTION: + return "https://rinkeby-explorer.arbitrum.io/tx/" + data; + case ExplorerDataType.ADDRESS: + case ExplorerDataType.TOKEN: + return "https://rinkeby-explorer.arbitrum.io/address/" + data; + case ExplorerDataType.BLOCK: + return "https://rinkeby-explorer.arbitrum.io/block/" + data; + default: + return "https://rinkeby-explorer.arbitrum.io/"; + } + } + var prefix = (_a = ETHERSCAN_PREFIXES[chainId]) !== null && _a !== void 0 ? _a : 'https://etherscan.io'; + switch (type) { + case ExplorerDataType.TRANSACTION: + return prefix + "/tx/" + data; + case ExplorerDataType.TOKEN: + return prefix + "/token/" + data; + case ExplorerDataType.BLOCK: + if (chainId === SupportedChainId.OPTIMISM || chainId === SupportedChainId.OPTIMISTIC_KOVAN) { + return prefix + "/tx/" + data; + } + return prefix + "/block/" + data; + case ExplorerDataType.ADDRESS: + return prefix + "/address/" + data; + default: + return "" + prefix; + } +} + +var DetailsFooter = styled__default["default"].div(templateObject_1$A || (templateObject_1$A = __makeTemplateObject(["\n padding-top: calc(16px + 2rem);\n padding-bottom: 20px;\n margin-left: auto;\n margin-right: auto;\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: ", ";\n background-color: ", ";\n z-index: ", ";\n\n transform: ", ";\n transition: transform 300ms ease-in-out;\n text-align: center;\n"], ["\n padding-top: calc(16px + 2rem);\n padding-bottom: 20px;\n margin-left: auto;\n margin-right: auto;\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: ", ";\n background-color: ", ";\n z-index: ", ";\n\n transform: ", ";\n transition: transform 300ms ease-in-out;\n text-align: center;\n"])), function (_a) { + var theme = _a.theme; + return theme.text2; +}, function (_a) { + var theme = _a.theme; + return theme.advancedBG; +}, Z_INDEX.deprecated_zero, function (_a) { + var show = _a.show; + return (show ? 'translateY(0%)' : 'translateY(-100%)'); +}); +var StyledButtonEmpty = styled__default["default"](ButtonEmpty)(templateObject_2$n || (templateObject_2$n = __makeTemplateObject(["\n text-decoration: none;\n"], ["\n text-decoration: none;\n"]))); +var AddressText$1 = styled__default["default"](ThemedText.Blue)(templateObject_4$b || (templateObject_4$b = __makeTemplateObject(["\n font-size: 12px;\n\n ", "\n"], ["\n font-size: 12px;\n\n ", "\n"])), function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToSmall(templateObject_3$i || (templateObject_3$i = __makeTemplateObject(["\n font-size: 10px;\n"], ["\n font-size: 10px;\n"]))); +}); +function UnsupportedCurrencyFooter(_a) { + var show = _a.show, currencies = _a.currencies; + var chainId = useActiveWeb3React().chainId; + var _b = __read(React.useState(false), 2), showDetails = _b[0], setShowDetails = _b[1]; + var tokens = chainId && currencies + ? currencies.map(function (currency) { + return currency === null || currency === void 0 ? void 0 : currency.wrapped; + }) + : []; + var unsupportedTokens = useUnsupportedTokens(); + return (jsxRuntime.jsxs(DetailsFooter, __assign({ show: show }, { children: [jsxRuntime.jsx(Modal, __assign({ isOpen: showDetails, onDismiss: function () { return setShowDetails(false); } }, { children: jsxRuntime.jsx(Card, __assign({ padding: "2rem" }, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "lg" }, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(ThemedText.MediumHeader, { children: jsxRuntime.jsx(macro.Trans, { children: "Unsupported Assets" }, void 0) }, void 0), jsxRuntime.jsx(CloseIcon, { onClick: function () { return setShowDetails(false); } }, void 0)] }, void 0), tokens.map(function (token) { + var _a; + return (token && + unsupportedTokens && + Object.keys(unsupportedTokens).includes(token.address) && (jsxRuntime.jsx(OutlineCard, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "10px" }, { children: [jsxRuntime.jsxs(AutoRow, __assign({ gap: "5px", align: "center" }, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: token, size: '24px' }, void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 500 }, { children: token.symbol }), void 0)] }), void 0), chainId && (jsxRuntime.jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, token.address, ExplorerDataType.ADDRESS) }, { children: jsxRuntime.jsx(AddressText$1, { children: token.address }, void 0) }), void 0))] }), void 0) }, (_a = token.address) === null || _a === void 0 ? void 0 : _a.concat('not-supported')))); + }), jsxRuntime.jsx(AutoColumn, __assign({ gap: "lg" }, { children: jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 500 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons." }, void 0) }), void 0) }), void 0)] }), void 0) }), void 0) }), void 0), jsxRuntime.jsx(StyledButtonEmpty, __assign({ padding: '0', onClick: function () { return setShowDetails(true); } }, { children: jsxRuntime.jsx(ThemedText.Blue, { children: jsxRuntime.jsx(macro.Trans, { children: "Read more about unsupported assets" }, void 0) }, void 0) }), void 0)] }), void 0)); +} +var templateObject_1$A, templateObject_2$n, templateObject_3$i, templateObject_4$b; + +/** + * Does a lookup for an ENS name to find its address. + */ +function useENSAddress(ensName) { + var _a; + var debouncedName = useDebounce(ensName, 200); + var ensNodeArgument = React.useMemo(function () { return [debouncedName === null ? undefined : safeNamehash(debouncedName)]; }, [debouncedName]); + var registrarContract = useENSRegistrarContract(false); + var resolverAddress = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument); + var resolverAddressResult = (_a = resolverAddress.result) === null || _a === void 0 ? void 0 : _a[0]; + var resolverContract = useENSResolverContract(resolverAddressResult && !isZero(resolverAddressResult) ? resolverAddressResult : undefined, false); + var addr = useSingleCallResult(resolverContract, 'addr', ensNodeArgument); + var changed = debouncedName !== ensName; + return React.useMemo(function () { + var _a, _b; + return ({ + address: changed ? null : (_b = (_a = addr.result) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : null, + loading: changed || resolverAddress.loading || addr.loading, + }); + }, [addr.loading, addr.result, changed, resolverAddress.loading]); +} + +/** + * Does a reverse lookup for an address to find its ENS name. + * Note this is not the same as looking up an ENS name to find an address. + */ +function useENSName(address) { + var _a, _b; + var debouncedAddress = useDebounce(address, 200); + var ensNodeArgument = React.useMemo(function () { + if (!debouncedAddress || !isAddress(debouncedAddress)) + return [undefined]; + return [hash.namehash(debouncedAddress.toLowerCase().substr(2) + ".addr.reverse")]; + }, [debouncedAddress]); + var registrarContract = useENSRegistrarContract(false); + var resolverAddress = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument); + var resolverAddressResult = (_a = resolverAddress.result) === null || _a === void 0 ? void 0 : _a[0]; + var resolverContract = useENSResolverContract(resolverAddressResult && !isZero(resolverAddressResult) ? resolverAddressResult : undefined, false); + var nameCallRes = useSingleCallResult(resolverContract, 'name', ensNodeArgument); + var name = (_b = nameCallRes.result) === null || _b === void 0 ? void 0 : _b[0]; + /* ENS does not enforce that an address owns a .eth domain before setting it as a reverse proxy + and recommends that you perform a match on the forward resolution + see: https://docs.ens.domains/dapp-developer-guide/resolving-names#reverse-resolution + */ + var fwdAddr = useENSAddress(name); + var checkedName = address === (fwdAddr === null || fwdAddr === void 0 ? void 0 : fwdAddr.address) ? name : null; + var changed = debouncedAddress !== address; + return React.useMemo(function () { return ({ + ENSName: changed ? null : checkedName, + loading: changed || resolverAddress.loading || nameCallRes.loading, + }); }, [changed, nameCallRes.loading, checkedName, resolverAddress.loading]); +} + +/** + * Given a name or address, does a lookup to resolve to an address and name + * @param nameOrAddress ENS name or address + */ +function useENS(nameOrAddress) { + var validated = isAddress(nameOrAddress); + var reverseLookup = useENSName(validated ? validated : undefined); + var lookup = useENSAddress(nameOrAddress); + return React.useMemo(function () { return ({ + loading: reverseLookup.loading || lookup.loading, + address: validated ? validated : lookup.address, + name: reverseLookup.ENSName ? reverseLookup.ENSName : !validated && lookup.address ? nameOrAddress || null : null, + }); }, [lookup.address, lookup.loading, nameOrAddress, reverseLookup.ENSName, reverseLookup.loading, validated]); +} + +var InputPanel$1 = styled__default["default"].div(templateObject_1$z || (templateObject_1$z = __makeTemplateObject(["\n ", "\n position: relative;\n border-radius: 1.25rem;\n background-color: ", ";\n z-index: 1;\n width: 100%;\n"], ["\n ", "\n position: relative;\n border-radius: 1.25rem;\n background-color: ", ";\n z-index: 1;\n width: 100%;\n"])), function (_a) { + var theme = _a.theme; + return theme.flexColumnNoWrap; +}, function (_a) { + var theme = _a.theme; + return theme.bg1; +}); +var ContainerRow = styled__default["default"].div(templateObject_2$m || (templateObject_2$m = __makeTemplateObject(["\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 1.25rem;\n border: 1px solid ", ";\n transition: border-color 300ms ", ",\n color 500ms ", ";\n background-color: ", ";\n"], ["\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 1.25rem;\n border: 1px solid ", ";\n transition: border-color 300ms ", ",\n color 500ms ", ";\n background-color: ", ";\n"])), function (_a) { + var error = _a.error, theme = _a.theme; + return (error ? theme.red1 : theme.bg2); +}, function (_a) { + var error = _a.error; + return (error ? 'step-end' : 'step-start'); +}, function (_a) { + var error = _a.error; + return (error ? 'step-end' : 'step-start'); +}, function (_a) { + var theme = _a.theme; + return theme.bg1; +}); +var InputContainer = styled__default["default"].div(templateObject_3$h || (templateObject_3$h = __makeTemplateObject(["\n flex: 1;\n padding: 1rem;\n"], ["\n flex: 1;\n padding: 1rem;\n"]))); +var Input$2 = styled__default["default"].input(templateObject_4$a || (templateObject_4$a = __makeTemplateObject(["\n font-size: 1.25rem;\n outline: none;\n border: none;\n flex: 1 1 auto;\n width: 0;\n background-color: ", ";\n transition: color 300ms ", ";\n color: ", ";\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 500;\n width: 100%;\n ::placeholder {\n color: ", ";\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: ", ";\n }\n"], ["\n font-size: 1.25rem;\n outline: none;\n border: none;\n flex: 1 1 auto;\n width: 0;\n background-color: ", ";\n transition: color 300ms ", ";\n color: ", ";\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 500;\n width: 100%;\n ::placeholder {\n color: ", ";\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: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var error = _a.error; + return (error ? 'step-end' : 'step-start'); +}, function (_a) { + var error = _a.error, theme = _a.theme; + return (error ? theme.red1 : theme.text1); +}, function (_a) { + var theme = _a.theme; + return theme.text4; +}, function (_a) { + var theme = _a.theme; + return theme.text4; +}); +function AddressInputPanel(_a) { + var id = _a.id, _b = _a.className, className = _b === void 0 ? 'recipient-address-input' : _b, label = _a.label, placeholder = _a.placeholder, value = _a.value, onChange = _a.onChange; + var chainId = useActiveWeb3React().chainId; + var theme = React.useContext(styled.ThemeContext); + var _c = useENS(value), address = _c.address, loading = _c.loading, name = _c.name; + var handleInput = React.useCallback(function (event) { + var input = event.target.value; + var withoutSpaces = input.replace(/\s+/g, ''); + onChange(withoutSpaces); + }, [onChange]); + var error = Boolean(value.length > 0 && !loading && !address); + return (jsxRuntime.jsx(InputPanel$1, __assign({ id: id }, { children: jsxRuntime.jsx(ContainerRow, __assign({ error: error }, { children: jsxRuntime.jsx(InputContainer, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "md" }, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(ThemedText.Black, __assign({ color: theme.text2, fontWeight: 500, fontSize: 14 }, { children: label !== null && label !== void 0 ? label : jsxRuntime.jsx(macro.Trans, { children: "Recipient" }, void 0) }), void 0), address && chainId && (jsxRuntime.jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, name !== null && name !== void 0 ? name : address, ExplorerDataType.ADDRESS), style: { fontSize: '14px' } }, { children: jsxRuntime.jsx(macro.Trans, { children: "(View on Explorer)" }, void 0) }), void 0))] }, void 0), jsxRuntime.jsx(Input$2, { className: className, type: "text", autoComplete: "off", autoCorrect: "off", autoCapitalize: "off", spellCheck: "false", placeholder: placeholder !== null && placeholder !== void 0 ? placeholder : macro.t(templateObject_5$9 || (templateObject_5$9 = __makeTemplateObject(["Wallet Address or ENS name"], ["Wallet Address or ENS name"]))), error: error, pattern: "^(0x[a-fA-F0-9]{40})$", onChange: handleInput, value: value }, void 0)] }), void 0) }, void 0) }), void 0) }), void 0)); +} +var templateObject_1$z, templateObject_2$m, templateObject_3$h, templateObject_4$a, templateObject_5$9; + +function formatCurrencyAmount(amount, sigFigs) { + if (!amount) { + return '-'; + } + if (JSBI__default["default"].equal(amount.quotient, JSBI__default["default"].BigInt(0))) { + return '0'; + } + if (amount.divide(amount.decimalScale).lessThan(new sdkCore.Fraction(1, 100000))) { + return '<0.00001'; + } + return amount.toSignificant(sigFigs); +} + +var _path; + +function _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); } + +var SvgDropdown = function SvgDropdown(props) { + return /*#__PURE__*/React__namespace.createElement("svg", _extends({ + width: 12, + height: 7, + viewBox: "0 0 12 7", + fill: "none", + xmlns: "http://www.w3.org/2000/svg" + }, props), _path || (_path = /*#__PURE__*/React__namespace.createElement("path", { + d: "M0.97168 1L6.20532 6L11.439 1", + stroke: "#AEAEAE" + }))); +}; + +/** + * Returns the gas value plus a margin for unexpected or variable gas costs + * @param value the gas value to pad + */ +function calculateGasMargin(value) { + return value.mul(120).div(100); +} + +/** + * Be careful adding to this enum, always assign a unique value (typescript will not prevent duplicate values). + * These values is persisted in state and if you change the value it will cause errors + */ +var TransactionType; +(function (TransactionType) { + TransactionType[TransactionType["APPROVAL"] = 0] = "APPROVAL"; + TransactionType[TransactionType["SWAP"] = 1] = "SWAP"; + TransactionType[TransactionType["DEPOSIT_LIQUIDITY_STAKING"] = 2] = "DEPOSIT_LIQUIDITY_STAKING"; + TransactionType[TransactionType["WITHDRAW_LIQUIDITY_STAKING"] = 3] = "WITHDRAW_LIQUIDITY_STAKING"; + TransactionType[TransactionType["CLAIM"] = 4] = "CLAIM"; + TransactionType[TransactionType["VOTE"] = 5] = "VOTE"; + TransactionType[TransactionType["DELEGATE"] = 6] = "DELEGATE"; + TransactionType[TransactionType["WRAP"] = 7] = "WRAP"; + TransactionType[TransactionType["CREATE_V3_POOL"] = 8] = "CREATE_V3_POOL"; + TransactionType[TransactionType["ADD_LIQUIDITY_V3_POOL"] = 9] = "ADD_LIQUIDITY_V3_POOL"; + TransactionType[TransactionType["ADD_LIQUIDITY_V2_POOL"] = 10] = "ADD_LIQUIDITY_V2_POOL"; + TransactionType[TransactionType["MIGRATE_LIQUIDITY_V3"] = 11] = "MIGRATE_LIQUIDITY_V3"; + TransactionType[TransactionType["COLLECT_FEES"] = 12] = "COLLECT_FEES"; + TransactionType[TransactionType["REMOVE_LIQUIDITY_V3"] = 13] = "REMOVE_LIQUIDITY_V3"; + TransactionType[TransactionType["SUBMIT_PROPOSAL"] = 14] = "SUBMIT_PROPOSAL"; +})(TransactionType || (TransactionType = {})); +var addTransaction = toolkit.createAction('transactions/addTransaction'); +var clearAllTransactions = toolkit.createAction('transactions/clearAllTransactions'); +var finalizeTransaction = toolkit.createAction('transactions/finalizeTransaction'); +var checkedTransaction = toolkit.createAction('transactions/checkedTransaction'); + +var SUPPORTED_TRANSACTION_TYPES = [ + TransactionType.ADD_LIQUIDITY_V2_POOL, + TransactionType.ADD_LIQUIDITY_V3_POOL, + TransactionType.CREATE_V3_POOL, + TransactionType.REMOVE_LIQUIDITY_V3, + TransactionType.SWAP, +]; +var FIREBASE_API_KEY = process.env.REACT_APP_FIREBASE_KEY; +var firebaseEnabled = typeof FIREBASE_API_KEY !== 'undefined'; +if (firebaseEnabled) + initializeFirebase(); +function useMonitoringEventCallback() { + var chainId = useActiveWeb3React().chainId; + return React.useCallback(function log(type, _a) { + var transactionResponse = _a.transactionResponse, walletAddress = _a.walletAddress; + return __awaiter(this, void 0, void 0, function () { + var db; + return __generator(this, function (_b) { + if (!firebaseEnabled) + return [2 /*return*/]; + db = database.getDatabase(); + if (!walletAddress) { + console.debug('Wallet address required to log monitoring events.'); + return [2 /*return*/]; + } + try { + database.push(database.ref(db, 'trm'), { + chainId: chainId, + origin: window.location.origin, + timestamp: Date.now(), + tx: transactionResponse, + type: type, + walletAddress: walletAddress, + }); + } + catch (e) { + console.debug('Error adding document: ', e); + } + return [2 /*return*/]; + }); + }); + }, [chainId]); +} +function useTransactionMonitoringEventCallback() { + var account = useActiveWeb3React().account; + var log = useMonitoringEventCallback(); + return React.useCallback(function (info, transactionResponse) { + if (SUPPORTED_TRANSACTION_TYPES.includes(info.type)) { + log(TransactionType[info.type], { + transactionResponse: (function (_a) { + var hash = _a.hash, v = _a.v, r = _a.r, s = _a.s; + return ({ hash: hash, v: v, r: r, s: s }); + })(transactionResponse), + walletAddress: account !== null && account !== void 0 ? account : undefined, + }); + } + }, [account, log]); +} +function initializeFirebase() { + app.initializeApp({ + apiKey: process.env.REACT_APP_FIREBASE_KEY, + authDomain: 'interface-monitoring.firebaseapp.com', + databaseURL: 'https://interface-monitoring-default-rtdb.firebaseio.com', + projectId: 'interface-monitoring', + storageBucket: 'interface-monitoring.appspot.com', + messagingSenderId: '968187720053', + appId: '1:968187720053:web:acedf72dce629d470be33c', + }); +} + +// helper that can take a ethers library transaction response and add it to the list of transactions +function useTransactionAdder() { + var _a = useActiveWeb3React(), chainId = _a.chainId, account = _a.account; + var dispatch = useAppDispatch(); + var logMonitoringEvent = useTransactionMonitoringEventCallback(); + return React.useCallback(function (response, info) { + if (!account) + return; + if (!chainId) + return; + var hash = response.hash; + if (!hash) { + throw Error('No transaction hash found.'); + } + dispatch(addTransaction({ hash: hash, from: account, info: info, chainId: chainId })); + logMonitoringEvent(info, response); + }, [account, chainId, dispatch, logMonitoringEvent]); +} +// returns all the transactions for the current chain +function useAllTransactions() { + var _a; + var chainId = useActiveWeb3React().chainId; + var state = useAppSelector(function (state) { return state.transactions; }); + return chainId ? (_a = state[chainId]) !== null && _a !== void 0 ? _a : {} : {}; +} +function useTransaction(transactionHash) { + var allTransactions = useAllTransactions(); + if (!transactionHash) { + return undefined; + } + return allTransactions[transactionHash]; +} +function useIsTransactionConfirmed(transactionHash) { + var transactions = useAllTransactions(); + if (!transactionHash || !transactions[transactionHash]) + return false; + return Boolean(transactions[transactionHash].receipt); +} +/** + * Returns whether a transaction happened in the last day (86400 seconds * 1000 milliseconds / second) + * @param tx to check for recency + */ +function isTransactionRecent(tx) { + return new Date().getTime() - tx.addedTime < 86400000; +} +// returns whether a token has a pending approval transaction +function useHasPendingApproval(token, spender) { + var allTransactions = useAllTransactions(); + return React.useMemo(function () { + return typeof (token === null || token === void 0 ? void 0 : token.address) === 'string' && + typeof spender === 'string' && + Object.keys(allTransactions).some(function (hash) { + var tx = allTransactions[hash]; + if (!tx) + return false; + if (tx.receipt) { + return false; + } + else { + if (tx.info.type !== TransactionType.APPROVAL) + return false; + return tx.info.spender === spender && tx.info.tokenAddress === token.address && isTransactionRecent(tx); + } + }); + }, [allTransactions, spender, token === null || token === void 0 ? void 0 : token.address]); +} + +// gets the current timestamp from the blockchain +function useCurrentBlockTimestamp() { + var _a, _b; + var multicall = useInterfaceMulticall(); + return (_b = (_a = useSingleCallResult(multicall, 'getCurrentBlockTimestamp')) === null || _a === void 0 ? void 0 : _a.result) === null || _b === void 0 ? void 0 : _b[0]; +} + +new abi$6.Interface(abi$5); +({ + 1: [ + { + tokens: [WRAPPED_NATIVE_CURRENCY[1], DAI], + stakingRewardAddress: '0xa1484C3aa22a66C62b77E0AE78E15258bd0cB711', + }, + { + tokens: [WRAPPED_NATIVE_CURRENCY[1], USDC], + stakingRewardAddress: '0x7FBa4B8Dc5E7616e59622806932DBea72537A56b', + }, + { + tokens: [WRAPPED_NATIVE_CURRENCY[1], USDT], + stakingRewardAddress: '0x6C3e4cb2E96B01F4b866965A91ed4437839A121a', + }, + { + tokens: [WRAPPED_NATIVE_CURRENCY[1], WBTC], + stakingRewardAddress: '0xCA35e32e7926b96A9988f61d510E038108d8068e', + }, + ], +}); + +// mimics useAllBalances +function useAllTokenBalances() { + var account = useActiveWeb3React().account; + var allTokens = useAllTokens(); + var allTokensArray = React.useMemo(function () { return Object.values(allTokens !== null && allTokens !== void 0 ? allTokens : {}); }, [allTokens]); + var balances = useTokenBalances(account !== null && account !== void 0 ? account : undefined, allTokensArray); + return balances !== null && balances !== void 0 ? balances : {}; +} + +var StyledInput = styled__default["default"].input(templateObject_1$y || (templateObject_1$y = __makeTemplateObject(["\n color: ", ";\n width: 0;\n position: relative;\n font-weight: 500;\n outline: none;\n border: none;\n flex: 1 1 auto;\n background-color: ", ";\n font-size: ", ";\n text-align: ", ";\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 0px;\n -webkit-appearance: textfield;\n text-align: right;\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: ", ";\n }\n"], ["\n color: ", ";\n width: 0;\n position: relative;\n font-weight: 500;\n outline: none;\n border: none;\n flex: 1 1 auto;\n background-color: ", ";\n font-size: ", ";\n text-align: ", ";\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 0px;\n -webkit-appearance: textfield;\n text-align: right;\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: ", ";\n }\n"])), function (_a) { + var error = _a.error, theme = _a.theme; + return (error ? theme.red1 : theme.text1); +}, function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var fontSize = _a.fontSize; + return fontSize !== null && fontSize !== void 0 ? fontSize : '28px'; +}, function (_a) { + var align = _a.align; + return align && align; +}, function (_a) { + var theme = _a.theme; + return theme.text4; +}); +var inputRegex = RegExp("^\\d*(?:\\\\[.])?\\d*$"); // match escaped "." characters via in a non-capturing group +var Input$1 = React__default["default"].memo(function InnerInput(_a) { + var value = _a.value, onUserInput = _a.onUserInput, placeholder = _a.placeholder, prependSymbol = _a.prependSymbol, rest = __rest(_a, ["value", "onUserInput", "placeholder", "prependSymbol"]); + var enforcer = function (nextUserInput) { + if (nextUserInput === '' || inputRegex.test(escapeRegExp(nextUserInput))) { + onUserInput(nextUserInput); + } + }; + return (jsxRuntime.jsx(StyledInput, __assign({}, rest, { value: prependSymbol && value ? prependSymbol + value : value, onChange: function (event) { + if (prependSymbol) { + var value_1 = event.target.value; + // cut off prepended symbol + var formattedValue = value_1.toString().includes(prependSymbol) + ? value_1.toString().slice(1, value_1.toString().length + 1) + : value_1; + // replace commas with periods, because uniswap exclusively uses period as the decimal separator + enforcer(formattedValue.replace(/,/g, '.')); + } + else { + enforcer(event.target.value.replace(/,/g, '.')); + } + }, + // universal input options + inputMode: "decimal", autoComplete: "off", autoCorrect: "off", + // text-specific options + type: "text", pattern: "^[0-9]*[.,]?[0-9]*$", placeholder: placeholder || '0.0', minLength: 1, maxLength: 79, spellCheck: "false" }), void 0)); +}); +var templateObject_1$y; + +// modified from https://usehooks.com/usePrevious/ +function usePrevious(value) { + // The ref object is a generic container whose current property is mutable ... + // ... and can hold any value, similar to an instance property on a class + var ref = React.useRef(); + // Store current value in ref + React.useEffect(function () { + ref.current = value; + }, [value]); // Only re-run if value changes + // Return previous value (happens before update in useEffect above) + return ref.current; +} + +/** + * Returns the last value of type T that passes a filter function + * @param value changing value + * @param filterFn function that determines whether a given value should be considered for the last value + */ +function useLast(value, filterFn) { + var _a = __read(React.useState(filterFn && filterFn(value) ? value : undefined), 2), last = _a[0], setLast = _a[1]; + React.useEffect(function () { + setLast(function (last) { + var shouldUse = filterFn ? filterFn(value) : true; + if (shouldUse) + return value; + return last; + }); + }, [filterFn, value]); + return last; +} + +function useOnClickOutside(node, handler) { + var handlerRef = React.useRef(handler); + React.useEffect(function () { + handlerRef.current = handler; + }, [handler]); + React.useEffect(function () { + var handleClickOutside = function (e) { + var _a, _b; + if ((_b = (_a = node.current) === null || _a === void 0 ? void 0 : _a.contains(e.target)) !== null && _b !== void 0 ? _b : false) { + return; + } + if (handlerRef.current) + handlerRef.current(); + }; + document.addEventListener('mousedown', handleClickOutside); + return function () { + document.removeEventListener('mousedown', handleClickOutside); + }; + }, [node]); +} + +function useToggle(initialState) { + if (initialState === void 0) { initialState = false; } + var _a = __read(React.useState(initialState), 2), state = _a[0], setState = _a[1]; + var toggle = React.useCallback(function () { return setState(function (state) { return !state; }); }, []); + return [state, toggle]; +} + +function currencyId(currency) { + if (currency.isNative) + return 'ETH'; + if (currency.isToken) + return currency.address; + throw new Error('invalid currency'); +} + +var MobileWrapper = styled__default["default"](AutoColumn)(templateObject_2$l || (templateObject_2$l = __makeTemplateObject(["\n ", ";\n"], ["\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToSmall(templateObject_1$x || (templateObject_1$x = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); +}); +var BaseWrapper = styled__default["default"].div(templateObject_3$g || (templateObject_3$g = __makeTemplateObject(["\n border: 1px solid ", ";\n border-radius: 10px;\n display: flex;\n padding: 6px;\n\n align-items: center;\n :hover {\n cursor: ", ";\n background-color: ", ";\n }\n\n color: ", ";\n background-color: ", ";\n filter: ", ";\n"], ["\n border: 1px solid ", ";\n border-radius: 10px;\n display: flex;\n padding: 6px;\n\n align-items: center;\n :hover {\n cursor: ", ";\n background-color: ", ";\n }\n\n color: ", ";\n background-color: ", ";\n filter: ", ";\n"])), function (_a) { + var theme = _a.theme, disable = _a.disable; + return (disable ? 'transparent' : theme.bg3); +}, function (_a) { + var disable = _a.disable; + return !disable && 'pointer'; +}, function (_a) { + var theme = _a.theme, disable = _a.disable; + return !disable && theme.bg2; +}, function (_a) { + var theme = _a.theme, disable = _a.disable; + return disable && theme.text3; +}, function (_a) { + var theme = _a.theme, disable = _a.disable; + return disable && theme.bg3; +}, function (_a) { + var disable = _a.disable; + return disable && 'grayscale(1)'; +}); +function CommonBases(_a) { + var _b; + var chainId = _a.chainId, onSelect = _a.onSelect, selectedCurrency = _a.selectedCurrency; + var bases = typeof chainId !== 'undefined' ? (_b = COMMON_BASES[chainId]) !== null && _b !== void 0 ? _b : [] : []; + return bases.length > 0 ? (jsxRuntime.jsx(MobileWrapper, __assign({ gap: "md" }, { children: jsxRuntime.jsx(AutoRow, __assign({ gap: "4px" }, { children: bases.map(function (currency) { + var isSelected = selectedCurrency === null || selectedCurrency === void 0 ? void 0 : selectedCurrency.equals(currency); + return (jsxRuntime.jsxs(BaseWrapper, __assign({ onClick: function () { return !isSelected && onSelect(currency); }, disable: isSelected }, { children: [jsxRuntime.jsx(CurrencyLogoFromList, { currency: currency }, void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 16 }, { children: currency.symbol }), void 0)] }), currencyId(currency))); + }) }), void 0) }), void 0)) : null; +} +/** helper component to retrieve a base currency from the active token lists */ +function CurrencyLogoFromList(_a) { + var currency = _a.currency; + var token = useTokenInfoFromActiveList(currency); + return jsxRuntime.jsx(CurrencyLogo, { currency: token, style: { marginRight: 8 } }, void 0); +} +var templateObject_1$x, templateObject_2$l, templateObject_3$g; + +var QuestionWrapper = styled__default["default"].div(templateObject_1$w || (templateObject_1$w = __makeTemplateObject(["\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0px;\n width: 18px;\n height: 18px;\n border: none;\n background: none;\n outline: none;\n cursor: default;\n border-radius: 36px;\n font-size: 12px;\n background-color: ", ";\n color: ", ";\n\n :hover,\n :focus {\n opacity: 0.7;\n }\n"], ["\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0px;\n width: 18px;\n height: 18px;\n border: none;\n background: none;\n outline: none;\n cursor: default;\n border-radius: 36px;\n font-size: 12px;\n background-color: ", ";\n color: ", ";\n\n :hover,\n :focus {\n opacity: 0.7;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}, function (_a) { + var theme = _a.theme; + return theme.text2; +}); +var QuestionMark = styled__default["default"].span(templateObject_2$k || (templateObject_2$k = __makeTemplateObject(["\n font-size: 14px;\n"], ["\n font-size: 14px;\n"]))); +function QuestionHelper(_a) { + var text = _a.text; + var _b = __read(React.useState(false), 2), show = _b[0], setShow = _b[1]; + var open = React.useCallback(function () { return setShow(true); }, [setShow]); + var close = React.useCallback(function () { return setShow(false); }, [setShow]); + return (jsxRuntime.jsx("span", __assign({ style: { marginLeft: 4, display: 'flex', alignItems: 'center' } }, { children: jsxRuntime.jsx(Tooltip, __assign({ text: text, show: show }, { children: jsxRuntime.jsx(QuestionWrapper, __assign({ onClick: open, onMouseEnter: open, onMouseLeave: close }, { children: jsxRuntime.jsx(QuestionMark, { children: "?" }, void 0) }), void 0) }), void 0) }), void 0)); +} +var templateObject_1$w, templateObject_2$k; + +var TokenListLogo = "data:image/svg+xml,%3Csvg%20width%3D%22225%22%20height%3D%22225%22%20viewBox%3D%220%200%20225%20225%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M74.8125%20190.529C65.7561%20190.513%2055.5298%20183.748%2051.9715%20175.42L19.9417%20100.456C16.3834%2092.1277%2020.8404%2085.39%2029.8968%2085.4068L111.417%2085.5579C120.473%2085.5747%20130.699%2092.3395%20134.258%20100.668L166.288%20175.632C169.846%20183.96%20165.389%20190.697%20156.332%20190.681L74.8125%20190.529Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint0_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint1_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint2_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint3_radial%29%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M92.958%20165.95C82.7695%20165.931%2071.265%20158.321%2067.2619%20148.952L26.2489%2052.9632C22.2458%2043.5941%2027.26%2036.0143%2037.4485%2036.0332L141.832%2036.2266C152.02%2036.2455%20163.525%2043.8559%20167.528%2053.225L208.541%20149.214C212.544%20158.583%20207.53%20166.163%20197.341%20166.144L92.958%20165.95ZM71.3614%20148.959C74.475%20156.246%2083.4229%20162.166%2091.3473%20162.18L195.73%20162.374C203.655%20162.388%20207.555%20156.493%20204.441%20149.206L163.428%2053.2174C160.315%2045.9304%20151.367%2040.0111%20143.442%2039.9964L39.0592%2039.803C31.1349%2039.7883%2027.2349%2045.6837%2030.3485%2052.9708L71.3614%20148.959Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M68.565%2053.3425C81.1781%2053.3659%2095.4205%2062.7875%20100.376%2074.3862C105.332%2085.985%2099.1246%2095.3687%2086.5115%2095.3454C73.8984%2095.322%2059.6559%2085.9004%2054.7001%2074.3016C49.7443%2062.7028%2055.9518%2053.3191%2068.565%2053.3425Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M90.6891%20104.981C103.302%20105.004%20117.545%20114.425%20122.5%20126.024C127.456%20137.623%20121.249%20147.007%20108.636%20146.983C96.0225%20146.96%2081.7801%20137.538%2076.8243%20125.94C71.8685%20114.341%2078.076%20104.957%2090.6891%20104.981Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M147.538%20105.142C160.151%20105.166%20174.394%20114.587%20179.349%20126.186C184.305%20137.785%20178.098%20147.168%20165.485%20147.145C152.871%20147.122%20138.629%20137.7%20133.673%20126.101C128.717%20114.503%20134.925%20105.119%20147.538%20105.142Z%22%20fill%3D%22%23131313%22%2F%3E%3Cdefs%3E%3CradialGradient%20id%3D%22paint0_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%28134.41%2068.3006%29%20rotate%28-33.9533%29%20scale%2890.6795%2083.3208%29%22%3E%3Cstop%20offset%3D%220.661458%22%20stop-color%3D%22%23C4FCF8%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint1_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%2842.7873%20129.218%29%20rotate%28-24.1606%29%20scale%28213.359%20196.045%29%22%3E%3Cstop%20stop-color%3D%22%23FF0099%22%20stop-opacity%3D%220.9%22%2F%3E%3Cstop%20offset%3D%220.770833%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint2_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%28176.854%20148.655%29%20rotate%28-53.4908%29%20scale%28107.342%2098.6309%29%22%3E%3Cstop%20stop-color%3D%22%23FFEC43%22%2F%3E%3Cstop%20offset%3D%220.805707%22%20stop-color%3D%22%23FFF6A8%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint3_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%2857.5443%2053.4752%29%20rotate%2820.3896%29%20scale%28137.027%20125.907%29%22%3E%3Cstop%20offset%3D%220.125%22%20stop-color%3D%22%235886FE%22%20stop-opacity%3D%220.46%22%2F%3E%3Cstop%20offset%3D%220.673044%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3C%2Fdefs%3E%3C%2Fsvg%3E"; + +var rotate = styled.keyframes(templateObject_1$v || (templateObject_1$v = __makeTemplateObject(["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"], ["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"]))); +var StyledSVG = styled__default["default"].svg(templateObject_2$j || (templateObject_2$j = __makeTemplateObject(["\n animation: 2s ", " linear infinite;\n height: ", ";\n width: ", ";\n path {\n stroke: ", ";\n }\n"], ["\n animation: 2s ", " linear infinite;\n height: ", ";\n width: ", ";\n path {\n stroke: ", ";\n }\n" + /** + * Takes in custom size and stroke for circle color, default to primary color as fill, + * need ...rest for layered styles on top + */ +])), rotate, function (_a) { + var size = _a.size; + return size; +}, function (_a) { + var size = _a.size; + return size; +}, function (_a) { + var stroke = _a.stroke, theme = _a.theme; + return stroke !== null && stroke !== void 0 ? stroke : theme.primary1; +}); +/** + * Takes in custom size and stroke for circle color, default to primary color as fill, + * need ...rest for layered styles on top + */ +function Loader(_a) { + var _b = _a.size, size = _b === void 0 ? '16px' : _b, stroke = _a.stroke, rest = __rest(_a, ["size", "stroke"]); + return (jsxRuntime.jsx(StyledSVG, __assign({ viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", size: size, stroke: stroke }, rest, { children: jsxRuntime.jsx("path", { d: "M12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22C17.5228 22 22 17.5228 22 12C22 9.27455 20.9097 6.80375 19.1414 5", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round" }, void 0) }), void 0)); +} +var templateObject_1$v, templateObject_2$j; + +var StyledListLogo = styled__default["default"](Logo)(templateObject_1$u || (templateObject_1$u = __makeTemplateObject(["\n width: ", ";\n height: ", ";\n"], ["\n width: ", ";\n height: ", ";\n"])), function (_a) { + var size = _a.size; + return size; +}, function (_a) { + var size = _a.size; + return size; +}); +function ListLogo(_a) { + var logoURI = _a.logoURI, style = _a.style, _b = _a.size, size = _b === void 0 ? '24px' : _b, alt = _a.alt; + var srcs = useHttpLocations(logoURI); + return jsxRuntime.jsx(StyledListLogo, { alt: alt, size: size, srcs: srcs, style: style }, void 0); +} +var templateObject_1$u; + +var TokenSection = styled__default["default"].div(templateObject_1$t || (templateObject_1$t = __makeTemplateObject(["\n padding: 4px 20px;\n height: 56px;\n display: grid;\n grid-template-columns: auto minmax(auto, 1fr) auto;\n grid-gap: 16px;\n align-items: center;\n\n opacity: ", ";\n"], ["\n padding: 4px 20px;\n height: 56px;\n display: grid;\n grid-template-columns: auto minmax(auto, 1fr) auto;\n grid-gap: 16px;\n align-items: center;\n\n opacity: ", ";\n"])), function (_a) { + var dim = _a.dim; + return (dim ? '0.4' : '1'); +}); +var CheckIcon = styled__default["default"](reactFeather.CheckCircle)(templateObject_2$i || (templateObject_2$i = __makeTemplateObject(["\n height: 16px;\n width: 16px;\n margin-right: 6px;\n stroke: ", ";\n"], ["\n height: 16px;\n width: 16px;\n margin-right: 6px;\n stroke: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.green1; +}); +var NameOverflow = styled__default["default"].div(templateObject_3$f || (templateObject_3$f = __makeTemplateObject(["\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 140px;\n font-size: 12px;\n"], ["\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 140px;\n font-size: 12px;\n"]))); +function ImportRow(_a) { + var token = _a.token, style = _a.style, dim = _a.dim, showImportView = _a.showImportView, setImportToken = _a.setImportToken; + var theme = useTheme(); + // check if already active on list or local storage tokens + var isAdded = useIsUserAddedToken(token); + var isActive = useIsTokenActive(token); + var list = token instanceof WrappedTokenInfo ? token.list : undefined; + return (jsxRuntime.jsxs(TokenSection, __assign({ style: style }, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: token, size: '24px', style: { opacity: dim ? '0.6' : '1' } }, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "4px", style: { opacity: dim ? '0.6' : '1' } }, { children: [jsxRuntime.jsxs(AutoRow, { children: [jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 500 }, { children: token.symbol }), void 0), jsxRuntime.jsx(ThemedText.DarkGray, __assign({ ml: "8px", fontWeight: 300 }, { children: jsxRuntime.jsx(NameOverflow, __assign({ title: token.name }, { children: token.name }), void 0) }), void 0)] }, void 0), list && list.logoURI && (jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(ThemedText.Small, __assign({ mr: "4px", color: theme.text3 }, { children: jsxRuntime.jsxs(macro.Trans, { children: ["via ", list.name, " "] }, void 0) }), void 0), jsxRuntime.jsx(ListLogo, { logoURI: list.logoURI, size: "12px" }, void 0)] }, void 0))] }), void 0), !isActive && !isAdded ? (jsxRuntime.jsx(ButtonPrimary, __assign({ width: "fit-content", padding: "6px 12px", fontWeight: 500, fontSize: "14px", onClick: function () { + setImportToken && setImportToken(token); + showImportView(); + } }, { children: jsxRuntime.jsx(macro.Trans, { children: "Import" }, void 0) }), void 0)) : (jsxRuntime.jsxs(RowFixed, __assign({ style: { minWidth: 'fit-content' } }, { children: [jsxRuntime.jsx(CheckIcon, {}, void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ color: theme.green1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Active" }, void 0) }), void 0)] }), void 0))] }), void 0)); +} +var templateObject_1$t, templateObject_2$i, templateObject_3$f; + +var TextDot = styled__default["default"].div(templateObject_1$s || (templateObject_1$s = __makeTemplateObject(["\n height: 3px;\n width: 3px;\n background-color: ", ";\n border-radius: 50%;\n"], ["\n height: 3px;\n width: 3px;\n background-color: ", ";\n border-radius: 50%;\n"])), function (_a) { + var theme = _a.theme; + return theme.text2; +}); +var Checkbox = styled__default["default"].input(templateObject_2$h || (templateObject_2$h = __makeTemplateObject(["\n border: 1px solid ", ";\n height: 20px;\n margin: 0;\n"], ["\n border: 1px solid ", ";\n height: 20px;\n margin: 0;\n"])), function (_a) { + var theme = _a.theme; + return theme.red3; +}); +var PaddedColumn = styled__default["default"](AutoColumn)(templateObject_3$e || (templateObject_3$e = __makeTemplateObject(["\n padding: 20px;\n"], ["\n padding: 20px;\n"]))); +var MenuItem = styled__default["default"](RowBetween)(templateObject_4$9 || (templateObject_4$9 = __makeTemplateObject(["\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: ", ";\n pointer-events: ", ";\n :hover {\n background-color: ", ";\n }\n opacity: ", ";\n"], ["\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: ", ";\n pointer-events: ", ";\n :hover {\n background-color: ", ";\n }\n opacity: ", ";\n"])), function (_a) { + var disabled = _a.disabled; + return !disabled && 'pointer'; +}, function (_a) { + var disabled = _a.disabled; + return disabled && 'none'; +}, function (_a) { + var theme = _a.theme, disabled = _a.disabled; + return !disabled && theme.bg2; +}, function (_a) { + var disabled = _a.disabled, selected = _a.selected; + return (disabled || selected ? 0.5 : 1); +}); +var SearchInput = styled__default["default"].input(templateObject_5$8 || (templateObject_5$8 = __makeTemplateObject(["\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: ", ";\n border-style: solid;\n border: 1px solid ", ";\n -webkit-appearance: none;\n\n font-size: 18px;\n\n ::placeholder {\n color: ", ";\n }\n transition: border 100ms;\n :focus {\n border: 1px solid ", ";\n outline: none;\n }\n"], ["\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: ", ";\n border-style: solid;\n border: 1px solid ", ";\n -webkit-appearance: none;\n\n font-size: 18px;\n\n ::placeholder {\n color: ", ";\n }\n transition: border 100ms;\n :focus {\n border: 1px solid ", ";\n outline: none;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text1; +}, function (_a) { + var theme = _a.theme; + return theme.bg3; +}, function (_a) { + var theme = _a.theme; + return theme.text3; +}, function (_a) { + var theme = _a.theme; + return theme.primary1; +}); +var Separator = styled__default["default"].div(templateObject_6$5 || (templateObject_6$5 = __makeTemplateObject(["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"], ["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}); +var SeparatorDark = styled__default["default"].div(templateObject_7$4 || (templateObject_7$4 = __makeTemplateObject(["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"], ["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg3; +}); +var templateObject_1$s, templateObject_2$h, templateObject_3$e, templateObject_4$9, templateObject_5$8, templateObject_6$5, templateObject_7$4; + +function currencyKey(currency) { + return currency.isToken ? currency.address : 'ETHER'; +} +var StyledBalanceText = styled__default["default"](rebass.Text)(templateObject_1$r || (templateObject_1$r = __makeTemplateObject(["\n white-space: nowrap;\n overflow: hidden;\n max-width: 5rem;\n text-overflow: ellipsis;\n"], ["\n white-space: nowrap;\n overflow: hidden;\n max-width: 5rem;\n text-overflow: ellipsis;\n"]))); +var Tag = styled__default["default"].div(templateObject_2$g || (templateObject_2$g = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\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 background-color: ", ";\n color: ", ";\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"])), function (_a) { + var theme = _a.theme; + return theme.bg3; +}, function (_a) { + var theme = _a.theme; + return theme.text2; +}); +var FixedContentRow = styled__default["default"].div(templateObject_3$d || (templateObject_3$d = __makeTemplateObject(["\n padding: 4px 20px;\n height: 56px;\n display: grid;\n grid-gap: 16px;\n align-items: center;\n"], ["\n padding: 4px 20px;\n height: 56px;\n display: grid;\n grid-gap: 16px;\n align-items: center;\n"]))); +function Balance(_a) { + var balance = _a.balance; + return jsxRuntime.jsx(StyledBalanceText, __assign({ title: balance.toExact() }, { children: balance.toSignificant(4) }), void 0); +} +var TagContainer = styled__default["default"].div(templateObject_4$8 || (templateObject_4$8 = __makeTemplateObject(["\n display: flex;\n justify-content: flex-end;\n"], ["\n display: flex;\n justify-content: flex-end;\n"]))); +var TokenListLogoWrapper = styled__default["default"].img(templateObject_5$7 || (templateObject_5$7 = __makeTemplateObject(["\n height: 20px;\n"], ["\n height: 20px;\n"]))); +function TokenTags(_a) { + var currency = _a.currency; + if (!(currency instanceof WrappedTokenInfo)) { + return jsxRuntime.jsx("span", {}, void 0); + } + var tags = currency.tags; + if (!tags || tags.length === 0) + return jsxRuntime.jsx("span", {}, void 0); + var tag = tags[0]; + return (jsxRuntime.jsxs(TagContainer, { children: [jsxRuntime.jsx(MouseoverTooltip, __assign({ text: tag.description }, { children: jsxRuntime.jsx(Tag, { children: tag.name }, tag.id) }), void 0), tags.length > 1 ? (jsxRuntime.jsx(MouseoverTooltip, __assign({ text: tags + .slice(1) + .map(function (_a) { + var name = _a.name, description = _a.description; + return name + ": " + description; + }) + .join('; \n') }, { children: jsxRuntime.jsx(Tag, { children: "..." }, void 0) }), void 0)) : null] }, void 0)); +} +function CurrencyRow(_a) { + var currency = _a.currency, onSelect = _a.onSelect, isSelected = _a.isSelected, otherSelected = _a.otherSelected, style = _a.style, showCurrencyAmount = _a.showCurrencyAmount; + var account = useActiveWeb3React().account; + var key = currencyKey(currency); + var selectedTokenList = useCombinedActiveList(); + var isOnSelectedList = isTokenOnList(selectedTokenList, currency.isToken ? currency : undefined); + var customAdded = useIsUserAddedToken(currency); + var balance = useCurrencyBalance(account !== null && account !== void 0 ? account : undefined, currency); + // only show add or remove buttons if not on selected list + return (jsxRuntime.jsxs(MenuItem, __assign({ style: style, className: "token-item-" + key, onClick: function () { return (isSelected ? null : onSelect()); }, disabled: isSelected, selected: otherSelected }, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: currency, size: '24px' }, void 0), jsxRuntime.jsxs(Column, { children: [jsxRuntime.jsx(rebass.Text, __assign({ title: currency.name, fontWeight: 500 }, { children: currency.symbol }), void 0), jsxRuntime.jsx(ThemedText.DarkGray, __assign({ ml: "0px", fontSize: '12px', fontWeight: 300 }, { children: !currency.isNative && !isOnSelectedList && customAdded ? (jsxRuntime.jsxs(macro.Trans, { children: [currency.name, " \u2022 Added by user"] }, void 0)) : (currency.name) }), void 0)] }, void 0), jsxRuntime.jsx(TokenTags, { currency: currency }, void 0), showCurrencyAmount && (jsxRuntime.jsx(RowFixed, __assign({ style: { justifySelf: 'flex-end' } }, { children: balance ? jsxRuntime.jsx(Balance, { balance: balance }, void 0) : account ? jsxRuntime.jsx(Loader, {}, void 0) : null }), void 0))] }), void 0)); +} +var BREAK_LINE = 'BREAK'; +function isBreakLine(x) { + return x === BREAK_LINE; +} +function BreakLineComponent(_a) { + var style = _a.style; + var theme = useTheme(); + return (jsxRuntime.jsx(FixedContentRow, __assign({ style: style }, { children: jsxRuntime.jsx(LightGreyCard, __assign({ padding: "8px 12px", "$borderRadius": "8px" }, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(TokenListLogoWrapper, { src: TokenListLogo }, void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ ml: "6px", fontSize: "12px", color: theme.text1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Expanded results from inactive Token Lists" }, void 0) }), void 0)] }, void 0), jsxRuntime.jsx(QuestionHelper, { text: jsxRuntime.jsx(macro.Trans, { children: "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists." }, void 0) }, void 0)] }, void 0) }), void 0) }), void 0)); +} +function CurrencyList(_a) { + var height = _a.height, currencies = _a.currencies, otherListTokens = _a.otherListTokens, selectedCurrency = _a.selectedCurrency, onCurrencySelect = _a.onCurrencySelect, otherCurrency = _a.otherCurrency, fixedListRef = _a.fixedListRef, showImportView = _a.showImportView, setImportToken = _a.setImportToken, showCurrencyAmount = _a.showCurrencyAmount; + var itemData = React.useMemo(function () { + if (otherListTokens && (otherListTokens === null || otherListTokens === void 0 ? void 0 : otherListTokens.length) > 0) { + return __spreadArray(__spreadArray(__spreadArray([], __read(currencies), false), [BREAK_LINE], false), __read(otherListTokens), false); + } + return currencies; + }, [currencies, otherListTokens]); + var Row = React.useCallback(function TokenRow(_a) { + var data = _a.data, index = _a.index, style = _a.style; + var row = data[index]; + if (isBreakLine(row)) { + return jsxRuntime.jsx(BreakLineComponent, { style: style }, void 0); + } + var currency = row; + var isSelected = Boolean(currency && selectedCurrency && selectedCurrency.equals(currency)); + var otherSelected = Boolean(currency && otherCurrency && otherCurrency.equals(currency)); + var handleSelect = function () { return currency && onCurrencySelect(currency); }; + var token = currency === null || currency === void 0 ? void 0 : currency.wrapped; + var showImport = index > currencies.length; + if (showImport && token) { + return (jsxRuntime.jsx(ImportRow, { style: style, token: token, showImportView: showImportView, setImportToken: setImportToken, dim: true }, void 0)); + } + else if (currency) { + return (jsxRuntime.jsx(CurrencyRow, { style: style, currency: currency, isSelected: isSelected, onSelect: handleSelect, otherSelected: otherSelected, showCurrencyAmount: showCurrencyAmount }, void 0)); + } + else { + return null; + } + }, [ + currencies.length, + onCurrencySelect, + otherCurrency, + selectedCurrency, + setImportToken, + showImportView, + showCurrencyAmount, + ]); + var itemKey = React.useCallback(function (index, data) { + var currency = data[index]; + if (isBreakLine(currency)) + return BREAK_LINE; + return currencyKey(currency); + }, []); + return (jsxRuntime.jsx(reactWindow.FixedSizeList, __assign({ height: height, ref: fixedListRef, width: "100%", itemData: itemData, itemCount: itemData.length, itemSize: 56, itemKey: itemKey }, { children: Row }), void 0)); +} +var templateObject_1$r, templateObject_2$g, templateObject_3$d, templateObject_4$8, templateObject_5$7; + +var ContentWrapper = styled__default["default"](Column)(templateObject_1$q || (templateObject_1$q = __makeTemplateObject(["\n width: 100%;\n flex: 1 1;\n position: relative;\n"], ["\n width: 100%;\n flex: 1 1;\n position: relative;\n"]))); +var Footer$1 = styled__default["default"].div(templateObject_2$f || (templateObject_2$f = __makeTemplateObject(["\n width: 100%;\n border-radius: 20px;\n padding: 20px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n background-color: ", ";\n border-top: 1px solid ", ";\n"], ["\n width: 100%;\n border-radius: 20px;\n padding: 20px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n background-color: ", ";\n border-top: 1px solid ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var theme = _a.theme; + return theme.bg2; +}); +function CurrencySearch(_a) { + var selectedCurrency = _a.selectedCurrency, onCurrencySelect = _a.onCurrencySelect, otherSelectedCurrency = _a.otherSelectedCurrency, showCommonBases = _a.showCommonBases, showCurrencyAmount = _a.showCurrencyAmount, disableNonToken = _a.disableNonToken, onDismiss = _a.onDismiss, isOpen = _a.isOpen, showManageView = _a.showManageView, showImportView = _a.showImportView, setImportToken = _a.setImportToken; + var chainId = useActiveWeb3React().chainId; + var theme = useTheme(); + // refs for fixed size lists + var fixedList = React.useRef(); + var _b = __read(React.useState(''), 2), searchQuery = _b[0], setSearchQuery = _b[1]; + var debouncedQuery = useDebounce(searchQuery, 200); + var allTokens = useAllTokens(); + // if they input an address, use it + var isAddressSearch = isAddress(debouncedQuery); + var searchToken = useToken(debouncedQuery); + var searchTokenIsAdded = useIsUserAddedToken(searchToken); + React.useEffect(function () { + if (isAddressSearch) { + ReactGA__default["default"].event({ + category: 'Currency Select', + action: 'Search by address', + label: isAddressSearch, + }); + } + }, [isAddressSearch]); + var filteredTokens = React.useMemo(function () { + return Object.values(allTokens).filter(getTokenFilter(debouncedQuery)); + }, [allTokens, debouncedQuery]); + var balances = useAllTokenBalances(); + var sortedTokens = React.useMemo(function () { + return filteredTokens.sort(tokenComparator.bind(null, balances)); + }, [balances, filteredTokens]); + var filteredSortedTokens = useSortTokensByQuery(debouncedQuery, sortedTokens); + var native = useNativeCurrency(); + var filteredSortedTokensWithETH = React.useMemo(function () { + var _a, _b; + if (!native) + return filteredSortedTokens; + var s = debouncedQuery.toLowerCase().trim(); + if (((_b = (_a = native.symbol) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === null || _b === void 0 ? void 0 : _b.indexOf(s)) !== -1) { + return native ? __spreadArray([native], __read(filteredSortedTokens), false) : filteredSortedTokens; + } + return filteredSortedTokens; + }, [debouncedQuery, native, filteredSortedTokens]); + var handleCurrencySelect = React.useCallback(function (currency) { + onCurrencySelect(currency); + onDismiss(); + }, [onDismiss, onCurrencySelect]); + // clear the input on open + React.useEffect(function () { + if (isOpen) + setSearchQuery(''); + }, [isOpen]); + // manage focus on modal show + var inputRef = React.useRef(); + var handleInput = React.useCallback(function (event) { + var _a; + var input = event.target.value; + var checksummedInput = isAddress(input); + setSearchQuery(checksummedInput || input); + (_a = fixedList.current) === null || _a === void 0 ? void 0 : _a.scrollTo(0); + }, []); + var handleEnter = React.useCallback(function (e) { + var _a, _b; + if (e.key === 'Enter') { + var s = debouncedQuery.toLowerCase().trim(); + if (s === ((_a = native === null || native === void 0 ? void 0 : native.symbol) === null || _a === void 0 ? void 0 : _a.toLowerCase())) { + handleCurrencySelect(native); + } + else if (filteredSortedTokensWithETH.length > 0) { + if (((_b = filteredSortedTokensWithETH[0].symbol) === null || _b === void 0 ? void 0 : _b.toLowerCase()) === debouncedQuery.trim().toLowerCase() || + filteredSortedTokensWithETH.length === 1) { + handleCurrencySelect(filteredSortedTokensWithETH[0]); + } + } + } + }, [debouncedQuery, native, filteredSortedTokensWithETH, handleCurrencySelect]); + // menu ui + var _c = __read(useToggle(false), 2), open = _c[0], toggle = _c[1]; + var node = React.useRef(); + useOnClickOutside(node, open ? toggle : undefined); + // if no results on main list, show option to expand into inactive + var filteredInactiveTokens = useSearchInactiveTokenLists(filteredTokens.length === 0 || (debouncedQuery.length > 2 && !isAddressSearch) ? debouncedQuery : undefined); + return (jsxRuntime.jsxs(ContentWrapper, { children: [jsxRuntime.jsxs(PaddedColumn, __assign({ gap: "16px" }, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 16 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Select a token" }, void 0) }), void 0), jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0)] }, void 0), jsxRuntime.jsx(Row, { children: jsxRuntime.jsx(SearchInput, { type: "text", id: "token-search-input", placeholder: macro.t(templateObject_3$c || (templateObject_3$c = __makeTemplateObject(["Search name or paste address"], ["Search name or paste address"]))), autoComplete: "off", value: searchQuery, ref: inputRef, onChange: handleInput, onKeyDown: handleEnter }, void 0) }, void 0), showCommonBases && (jsxRuntime.jsx(CommonBases, { chainId: chainId, onSelect: handleCurrencySelect, selectedCurrency: selectedCurrency }, void 0))] }), void 0), jsxRuntime.jsx(Separator, {}, void 0), searchToken && !searchTokenIsAdded ? (jsxRuntime.jsx(Column, __assign({ style: { padding: '20px 0', height: '100%' } }, { children: jsxRuntime.jsx(ImportRow, { token: searchToken, showImportView: showImportView, setImportToken: setImportToken }, void 0) }), void 0)) : (filteredSortedTokens === null || filteredSortedTokens === void 0 ? void 0 : filteredSortedTokens.length) > 0 || (filteredInactiveTokens === null || filteredInactiveTokens === void 0 ? void 0 : filteredInactiveTokens.length) > 0 ? (jsxRuntime.jsx("div", __assign({ style: { flex: '1' } }, { children: jsxRuntime.jsx(AutoSizer__default["default"], __assign({ disableWidth: true }, { children: function (_a) { + var height = _a.height; + return (jsxRuntime.jsx(CurrencyList, { height: height, currencies: disableNonToken ? filteredSortedTokens : filteredSortedTokensWithETH, otherListTokens: filteredInactiveTokens, onCurrencySelect: handleCurrencySelect, otherCurrency: otherSelectedCurrency, selectedCurrency: selectedCurrency, fixedListRef: fixedList, showImportView: showImportView, setImportToken: setImportToken, showCurrencyAmount: showCurrencyAmount }, void 0)); + } }), void 0) }), void 0)) : (jsxRuntime.jsx(Column, __assign({ style: { padding: '20px', height: '100%' } }, { children: jsxRuntime.jsx(ThemedText.Main, __assign({ color: theme.text3, textAlign: "center", mb: "20px" }, { children: jsxRuntime.jsx(macro.Trans, { children: "No results found." }, void 0) }), void 0) }), void 0)), jsxRuntime.jsx(Footer$1, { children: jsxRuntime.jsx(Row, __assign({ justify: "center" }, { children: jsxRuntime.jsx(ButtonText, __assign({ onClick: showManageView, color: theme.primary1, className: "list-token-manage-button" }, { children: jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(IconWrapper, __assign({ size: "16px", marginRight: "6px", stroke: theme.primaryText1 }, { children: jsxRuntime.jsx(reactFeather.Edit, {}, void 0) }), void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ color: theme.primaryText1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Manage Token Lists" }, void 0) }), void 0)] }, void 0) }), void 0) }), void 0) }, void 0)] }, void 0)); +} +var templateObject_1$q, templateObject_2$f, templateObject_3$c; + +var UNISWAP_LOGO_URL = "data:image/svg+xml,%3Csvg%20width%3D%2214%22%20height%3D%2215%22%20viewBox%3D%220%200%2014%2015%22%20fill%3D%22black%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20style%3D%22mix-blend-mode%3Adarken%22%3E%3Cpath%20d%3D%22M4.15217%201.55141C3.96412%201.52242%203.95619%201.51902%204.04468%201.5055C4.21427%201.47958%204.61472%201.51491%204.89067%201.58012C5.53489%201.73232%206.12109%202.12221%206.74683%202.81466L6.91307%202.99862L7.15088%202.96062C8.15274%202.8006%209.17194%202.92778%2010.0244%203.31918C10.2589%203.42686%2010.6287%203.64121%2010.6749%203.69629C10.6896%203.71384%2010.7166%203.82684%2010.7349%203.94742C10.7982%204.36458%2010.7665%204.68434%2010.6382%204.92317C10.5683%205.05313%2010.5644%205.09432%2010.6114%205.20554C10.6489%205.2943%2010.7534%205.35999%2010.8569%205.35985C11.0687%205.35956%2011.2968%205.0192%2011.4024%204.54561L11.4444%204.3575L11.5275%204.45109C11.9835%204.96459%2012.3417%205.66488%2012.4032%206.16335L12.4192%206.29332L12.3426%206.17517C12.2107%205.97186%2012.0781%205.83346%2011.9084%205.72183C11.6024%205.52062%2011.2789%205.45215%2010.4222%205.40727C9.64839%205.36675%209.21045%205.30106%208.77621%205.16032C8.03738%204.9209%207.66493%204.60204%206.78729%203.4576C6.39748%202.94928%206.15654%202.66804%205.91687%202.44155C5.37228%201.92691%204.83716%201.65701%204.15217%201.55141Z%22%2F%3E%3Cpath%20d%3D%22M10.8494%202.68637C10.8689%202.34575%2010.9153%202.12108%2011.0088%201.9159C11.0458%201.83469%2011.0804%201.76822%2011.0858%201.76822C11.0911%201.76822%2011.075%201.82816%2011.05%201.90142C10.9821%202.10054%2010.9709%202.3729%2011.0177%202.68978C11.0771%203.09184%2011.1109%203.14985%2011.5385%203.58416C11.739%203.78788%2011.9723%204.0448%2012.0568%204.15511L12.2106%204.35568L12.0568%204.21234C11.8688%204.03705%2011.4364%203.6952%2011.3409%203.64633C11.2768%203.61356%2011.2673%203.61413%2011.2278%203.65321C11.1914%203.68922%2011.1837%203.74333%2011.1787%203.99915C11.1708%204.39786%2011.1161%204.65377%2010.9842%204.90965C10.9128%205.04805%2010.9015%205.01851%2010.9661%204.8623C11.0143%204.74566%2011.0192%204.69439%2011.0189%204.30842C11.0181%203.53291%2010.9255%203.34647%2010.3823%203.02709C10.2447%202.94618%2010.0179%202.8295%209.87839%202.76778C9.73887%202.70606%209.62805%202.6523%209.63208%202.64828C9.64746%202.63307%2010.1772%202.78675%2010.3905%202.86828C10.7077%202.98954%2010.76%203.00526%2010.7985%202.99063C10.8244%202.98082%2010.8369%202.90608%2010.8494%202.68637Z%22%2F%3E%3Cpath%20d%3D%22M4.51745%204.01304C4.13569%203.49066%203.89948%202.68973%203.95062%202.091L3.96643%201.90572L4.05333%201.92148C4.21652%201.95106%204.49789%202.05515%204.62964%202.13469C4.9912%202.35293%205.14773%202.64027%205.30697%203.37811C5.35362%203.59423%205.41482%203.8388%205.44298%203.9216C5.48831%204.05487%205.65962%204.36617%205.7989%204.56834C5.89922%204.71395%205.83258%204.78295%205.61082%204.76305C5.27215%204.73267%204.8134%204.41799%204.51745%204.01304Z%22%2F%3E%3Cpath%20d%3D%22M10.3863%207.90088C8.60224%207.18693%207.97389%206.56721%207.97389%205.52157C7.97389%205.36769%207.97922%205.24179%207.98571%205.24179C7.99221%205.24179%208.06124%205.29257%208.1391%205.35465C8.50088%205.64305%208.906%205.76623%2010.0275%205.92885C10.6875%206.02455%2011.0589%206.10185%2011.4015%206.21477C12.4904%206.57371%2013.1641%207.30212%2013.3248%208.29426C13.3715%208.58255%2013.3441%209.12317%2013.2684%209.4081C13.2087%209.63315%2013.0263%2010.0388%2012.9779%2010.0544C12.9645%2010.0587%2012.9514%2010.0076%2012.9479%209.93809C12.9296%209.56554%2012.7402%209.20285%2012.4221%208.93116C12.0604%208.62227%2011.5745%208.37633%2010.3863%207.90088Z%22%2F%3E%3Cpath%20d%3D%22M9.13385%208.19748C9.11149%208.06527%209.07272%207.89643%209.04769%207.82228L9.00217%207.68748L9.08672%207.7818C9.20374%207.91233%209.2962%208.07937%209.37457%208.30185C9.43438%208.47165%209.44111%208.52215%209.44066%208.79807C9.4402%209.06896%209.43273%209.12575%209.3775%209.27858C9.29042%209.51959%209.18233%209.69048%209.00097%209.87391C8.67507%2010.2036%208.25607%2010.3861%207.65143%2010.4618C7.54633%2010.4749%207.24%2010.4971%206.97069%2010.511C6.292%2010.5461%205.84531%2010.6186%205.44393%2010.7587C5.38623%2010.7788%205.3347%2010.7911%205.32947%2010.7859C5.31323%2010.7698%205.58651%2010.6079%205.81223%2010.4998C6.1305%2010.3474%206.44733%2010.2643%207.15719%2010.1468C7.50785%2010.0887%207.86998%2010.0183%207.96194%209.99029C8.83033%209.72566%209.27671%209.04276%209.13385%208.19748Z%22%2F%3E%3Cpath%20d%3D%22M9.95169%209.64109C9.71465%209.13463%209.66022%208.64564%209.79009%208.18961C9.80399%208.14088%209.82632%208.101%209.83976%208.101C9.85319%208.101%209.90913%208.13105%209.96404%208.16777C10.0733%208.24086%2010.2924%208.36395%2010.876%208.68023C11.6043%209.0749%2012.0196%209.3805%2012.302%209.72965C12.5493%2010.0354%2012.7023%2010.3837%2012.776%2010.8084C12.8177%2011.0489%2012.7932%2011.6277%2012.7311%2011.8699C12.5353%2012.6337%2012.0802%2013.2336%2011.4311%2013.5837C11.336%2013.635%2011.2506%2013.6771%2011.2414%2013.6773C11.2321%2013.6775%2011.2668%2013.5899%2011.3184%2013.4827C11.5367%2013.029%2011.5616%2012.5877%2011.3965%2012.0965C11.2954%2011.7957%2011.0893%2011.4287%2010.6732%2010.8084C10.1893%2010.0873%2010.0707%209.89539%209.95169%209.64109Z%22%2F%3E%3Cpath%20d%3D%22M3.25046%2012.3737C3.91252%2011.8181%204.73629%2011.4234%205.48666%2011.3022C5.81005%2011.25%206.34877%2011.2707%206.64823%2011.3469C7.12824%2011.469%207.55763%2011.7425%207.78094%2012.0683C7.99918%2012.3867%208.09281%2012.6642%208.19029%2013.2816C8.22875%2013.5252%208.27057%2013.7697%208.28323%2013.8251C8.35644%2014.1451%208.4989%2014.4008%208.67544%2014.5293C8.95583%2014.7333%209.43865%2014.7459%209.91362%2014.5618C9.99423%2014.5305%2010.0642%2014.5089%2010.0691%2014.5138C10.0864%2014.5308%209.84719%2014.6899%209.67847%2014.7737C9.45143%2014.8864%209.2709%2014.93%209.03102%2014.93C8.59601%2014.93%208.23486%2014.7101%207.9335%2014.2616C7.87419%2014.1733%207.7409%2013.909%207.63729%2013.6741C7.3191%2012.9528%207.16199%2012.7331%206.79255%2012.4926C6.47104%2012.2834%206.05641%2012.2459%205.74449%2012.3979C5.33475%2012.5976%205.22043%2013.118%205.51389%2013.4478C5.63053%2013.5789%205.84803%2013.6919%206.02588%2013.7139C6.35861%2013.7551%206.64455%2013.5035%206.64455%2013.1696C6.64455%2012.9528%206.56071%2012.8291%206.34966%2012.7344C6.0614%2012.6051%205.75156%2012.7562%205.75304%2013.0254C5.75368%2013.1402%205.80396%2013.2122%205.91971%2013.2643C5.99397%2013.2977%205.99569%2013.3003%205.93514%2013.2878C5.67066%2013.2333%205.6087%2012.9164%205.82135%2012.706C6.07667%2012.4535%206.60461%2012.5649%206.78591%2012.9097C6.86208%2013.0545%206.87092%2013.3429%206.80451%2013.517C6.6559%2013.9068%206.22256%2014.1117%205.78297%2014.0002C5.48368%2013.9242%205.36181%2013.842%205.00097%2013.4726C4.37395%2012.8306%204.13053%2012.7062%203.22657%2012.566L3.05335%2012.5391L3.25046%2012.3737Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M0.308383%200.883984C2.40235%203.40996%203.84457%204.45213%204.00484%204.67231C4.13717%204.85412%204.08737%205.01757%203.86067%205.14567C3.7346%205.21689%203.47541%205.28905%203.34564%205.28905C3.19887%205.28905%203.14847%205.23278%203.14847%205.23278C3.06337%205.15255%203.01544%205.16658%202.5784%204.39555C1.97166%203.45981%201.46389%202.68357%201.45004%202.67057C1.41801%202.64052%201.41856%202.64153%202.51654%204.59413C2.69394%205.0011%202.55182%205.15049%202.55182%205.20845C2.55182%205.32636%202.51946%205.38834%202.37311%205.55059C2.12914%205.8211%202.02008%206.12505%201.94135%206.7541C1.8531%207.45926%201.60492%207.95737%200.917156%208.80989C0.514562%209.30893%200.448686%209.4004%200.3471%209.60153C0.219144%209.85482%200.183961%209.99669%200.169701%2010.3165C0.154629%2010.6547%200.183983%2010.8732%200.287934%2011.1965C0.378939%2011.4796%200.473932%2011.6665%200.716778%2012.0403C0.926351%2012.3629%201.04702%2012.6027%201.04702%2012.6965C1.04702%2012.7711%201.06136%2012.7712%201.38611%2012.6983C2.16328%2012.5239%202.79434%2012.2171%203.14925%2011.8411C3.36891%2011.6084%203.42048%2011.4799%203.42215%2011.1611C3.42325%2010.9525%203.41587%2010.9088%203.35914%2010.7888C3.2668%2010.5935%203.09869%2010.4311%202.72817%2010.1794C2.2427%209.84953%202.03534%209.58398%201.97807%209.21878C1.93108%208.91913%201.98559%208.70771%202.25416%208.14825C2.53214%207.56916%202.60103%207.32239%202.64763%206.73869C2.67773%206.36158%202.71941%206.21286%202.82842%206.09348C2.94212%205.969%203.04447%205.92684%203.32584%205.88863C3.78457%205.82635%204.07667%205.70839%204.31677%205.48849C4.52505%205.29772%204.61221%205.11391%204.62558%204.8372L4.63574%204.62747L4.51934%204.49259C4.09783%204.00411%200.0261003%200.5%200.000160437%200.5C-0.00538105%200.5%200.133325%200.672804%200.308383%200.883984ZM1.28364%2010.6992C1.37894%2010.5314%201.3283%2010.3158%201.16889%2010.2104C1.01827%2010.1109%200.78428%2010.1578%200.78428%2010.2875C0.78428%2010.3271%200.806303%2010.3559%200.855937%2010.3813C0.939514%2010.424%200.945581%2010.4721%200.879823%2010.5703C0.81323%2010.6698%200.818604%2010.7573%200.894991%2010.8167C1.0181%2010.9125%201.19237%2010.8598%201.28364%2010.6992Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M4.92523%205.99865C4.70988%206.06439%204.50054%206.29124%204.43574%206.5291C4.39621%206.67421%204.41864%206.92875%204.47785%207.00736C4.57351%207.13433%204.66602%207.16778%204.91651%207.16603C5.40693%207.16263%205.83327%206.95358%205.88284%206.69224C5.92347%206.47801%205.73622%206.18112%205.4783%206.05078C5.34521%205.98355%205.06217%205.95688%204.92523%205.99865ZM5.49853%206.44422C5.57416%206.33741%205.54107%206.22198%205.41245%206.14391C5.1675%205.99525%204.79708%206.11827%204.79708%206.34826C4.79708%206.46274%204.99025%206.58765%205.16731%206.58765C5.28516%206.58765%205.44644%206.5178%205.49853%206.44422Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"; + +var _a$6; +var NETWORK_POLLING_INTERVALS = (_a$6 = {}, + _a$6[SupportedChainId.ARBITRUM_ONE] = ms__default["default"](templateObject_1$p || (templateObject_1$p = __makeTemplateObject(["1s"], ["1s"]))), + _a$6[SupportedChainId.ARBITRUM_RINKEBY] = ms__default["default"](templateObject_2$e || (templateObject_2$e = __makeTemplateObject(["1s"], ["1s"]))), + _a$6[SupportedChainId.OPTIMISM] = ms__default["default"](templateObject_3$b || (templateObject_3$b = __makeTemplateObject(["1s"], ["1s"]))), + _a$6[SupportedChainId.OPTIMISTIC_KOVAN] = ms__default["default"](templateObject_4$7 || (templateObject_4$7 = __makeTemplateObject(["1s"], ["1s"]))), + _a$6); +function getLibrary(provider) { + var library = new providers.Web3Provider(provider, typeof provider.chainId === 'number' + ? provider.chainId + : typeof provider.chainId === 'string' + ? parseInt(provider.chainId) + : 'any'); + library.pollingInterval = 15000; + library.detectNetwork().then(function (network) { + var networkPollingInterval = NETWORK_POLLING_INTERVALS[network.chainId]; + if (networkPollingInterval) { + console.debug('Setting polling interval', networkPollingInterval); + library.pollingInterval = networkPollingInterval; + } + }); + return library; +} +var templateObject_1$p, templateObject_2$e, templateObject_3$b, templateObject_4$7; + +var OVERLAY_READY = 'OVERLAY_READY'; +var CHAIN_ID_NETWORK_ARGUMENT = { + 1: undefined, + 3: 'ropsten', + 4: 'rinkeby', + 42: 'kovan', +}; +var FortmaticConnector = /** @class */ (function (_super) { + __extends(FortmaticConnector, _super); + function FortmaticConnector() { + return _super !== null && _super.apply(this, arguments) || this; + } + FortmaticConnector.prototype.activate = function () { + return __awaiter(this, void 0, void 0, function () { + var Fortmatic, _a, apiKey, chainId, provider, pollForOverlayReady, _b, account; + var _this = this; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + if (!!this.fortmatic) return [3 /*break*/, 2]; + return [4 /*yield*/, Promise.resolve().then(function () { return fortmatic$1; })]; + case 1: + Fortmatic = (_c.sent()).default; + _a = this, apiKey = _a.apiKey, chainId = _a.chainId; + if (chainId in CHAIN_ID_NETWORK_ARGUMENT) { + this.fortmatic = new Fortmatic(apiKey, CHAIN_ID_NETWORK_ARGUMENT[chainId]); + } + else { + throw new Error("Unsupported network ID: " + chainId); + } + _c.label = 2; + case 2: + provider = this.fortmatic.getProvider(); + pollForOverlayReady = new Promise(function (resolve) { + var interval = setInterval(function () { + if (provider.overlayReady) { + clearInterval(interval); + _this.emit(OVERLAY_READY); + resolve(); + } + }, 200); + }); + return [4 /*yield*/, Promise.all([ + provider.enable().then(function (accounts) { return accounts[0]; }), + pollForOverlayReady, + ])]; + case 3: + _b = __read.apply(void 0, [_c.sent(), 1]), account = _b[0]; + return [2 /*return*/, { provider: this.fortmatic.getProvider(), chainId: this.chainId, account: account }]; + } + }); + }); + }; + return FortmaticConnector; +}(fortmaticConnector.FortmaticConnector)); + +var RequestError = /** @class */ (function (_super) { + __extends(RequestError, _super); + function RequestError(message, code, data) { + var _this = _super.call(this, message) || this; + _this.code = code; + _this.data = data; + return _this; + } + return RequestError; +}(Error)); +var MiniRpcProvider = /** @class */ (function () { + function MiniRpcProvider(connector, chainId, url, batchWaitTimeMs) { + var _this = this; + this.isMetaMask = false; + this.nextId = 1; + this.batchTimeoutId = null; + this.batch = []; + this.clearBatch = function () { return __awaiter(_this, void 0, void 0, function () { + var batch, response, json, byKey, json_1, json_1_1, result, _a, resolve, reject, method; + var e_1, _b; + var _this = this; + var _c, _d, _e; + return __generator(this, function (_f) { + switch (_f.label) { + case 0: + console.debug('Clearing batch', this.batch); + batch = this.batch; + batch = batch.filter(function (b) { + if (b.request.method === 'wallet_switchEthereumChain') { + try { + _this.connector.changeChainId(parseInt(b.request.params[0].chainId)); + b.resolve({ id: b.request.id }); + } + catch (error) { + b.reject(error); + } + return false; + } + return true; + }); + this.batch = []; + this.batchTimeoutId = null; + _f.label = 1; + case 1: + _f.trys.push([1, 3, , 4]); + return [4 /*yield*/, fetch(this.url, { + method: 'POST', + headers: { 'content-type': 'application/json', accept: 'application/json' }, + body: JSON.stringify(batch.map(function (item) { return item.request; })), + })]; + case 2: + response = _f.sent(); + return [3 /*break*/, 4]; + case 3: + _f.sent(); + batch.forEach(function (_a) { + var reject = _a.reject; + return reject(new Error('Failed to send batch call')); + }); + return [2 /*return*/]; + case 4: + if (!response.ok) { + batch.forEach(function (_a) { + var reject = _a.reject; + return reject(new RequestError(response.status + ": " + response.statusText, -32000)); + }); + return [2 /*return*/]; + } + _f.label = 5; + case 5: + _f.trys.push([5, 7, , 8]); + return [4 /*yield*/, response.json()]; + case 6: + json = _f.sent(); + return [3 /*break*/, 8]; + case 7: + _f.sent(); + batch.forEach(function (_a) { + var reject = _a.reject; + return reject(new Error('Failed to parse JSON response')); + }); + return [2 /*return*/]; + case 8: + byKey = batch.reduce(function (memo, current) { + memo[current.request.id] = current; + return memo; + }, {}); + try { + for (json_1 = __values(json), json_1_1 = json_1.next(); !json_1_1.done; json_1_1 = json_1.next()) { + result = json_1_1.value; + _a = byKey[result.id], resolve = _a.resolve, reject = _a.reject, method = _a.request.method; + if ('error' in result) { + reject(new RequestError((_c = result === null || result === void 0 ? void 0 : result.error) === null || _c === void 0 ? void 0 : _c.message, (_d = result === null || result === void 0 ? void 0 : result.error) === null || _d === void 0 ? void 0 : _d.code, (_e = result === null || result === void 0 ? void 0 : result.error) === null || _e === void 0 ? void 0 : _e.data)); + } + else if ('result' in result && resolve) { + resolve(result.result); + } + else { + reject(new RequestError("Received unexpected JSON-RPC response to " + method + " request.", -32000, result)); + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (json_1_1 && !json_1_1.done && (_b = json_1.return)) _b.call(json_1); + } + finally { if (e_1) throw e_1.error; } + } + return [2 /*return*/]; + } + }); + }); }; + this.sendAsync = function (request, callback) { + _this.request(request.method, request.params) + .then(function (result) { return callback(null, { jsonrpc: '2.0', id: request.id, result: result }); }) + .catch(function (error) { return callback(error, null); }); + }; + this.request = function (method, params) { return __awaiter(_this, void 0, void 0, function () { + var promise; + var _this = this; + var _a; + return __generator(this, function (_b) { + if (typeof method !== 'string') { + return [2 /*return*/, this.request(method.method, method.params)]; + } + if (method === 'eth_chainId') { + return [2 /*return*/, "0x" + this.chainId.toString(16)]; + } + promise = new Promise(function (resolve, reject) { + _this.batch.push({ + request: { + jsonrpc: '2.0', + id: _this.nextId++, + method: method, + params: params, + }, + resolve: resolve, + reject: reject, + }); + }); + this.batchTimeoutId = (_a = this.batchTimeoutId) !== null && _a !== void 0 ? _a : setTimeout(this.clearBatch, this.batchWaitTimeMs); + return [2 /*return*/, promise]; + }); + }); }; + this.connector = connector; + this.chainId = chainId; + this.url = url; + var parsed = new URL(url); + this.host = parsed.host; + this.path = parsed.pathname; + // how long to wait to batch calls + this.batchWaitTimeMs = batchWaitTimeMs !== null && batchWaitTimeMs !== void 0 ? batchWaitTimeMs : 50; + } + return MiniRpcProvider; +}()); +var NetworkConnector = /** @class */ (function (_super) { + __extends(NetworkConnector, _super); + function NetworkConnector(_a) { + var urls = _a.urls, defaultChainId = _a.defaultChainId; + var _this = this; + invariant__default["default"](defaultChainId || Object.keys(urls).length === 1, 'defaultChainId is a required argument with >1 url'); + _this = _super.call(this, { supportedChainIds: Object.keys(urls).map(function (k) { return Number(k); }) }) || this; + _this.currentChainId = defaultChainId !== null && defaultChainId !== void 0 ? defaultChainId : Number(Object.keys(urls)[0]); + _this.providers = Object.keys(urls).reduce(function (accumulator, chainId) { + accumulator[Number(chainId)] = new MiniRpcProvider(_this, Number(chainId), urls[Number(chainId)]); + return accumulator; + }, {}); + return _this; + } + Object.defineProperty(NetworkConnector.prototype, "provider", { + get: function () { + return this.providers[this.currentChainId]; + }, + enumerable: false, + configurable: true + }); + NetworkConnector.prototype.activate = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, { provider: this.providers[this.currentChainId], chainId: this.currentChainId, account: null }]; + }); + }); + }; + NetworkConnector.prototype.getProvider = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.providers[this.currentChainId]]; + }); + }); + }; + NetworkConnector.prototype.getChainId = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.currentChainId]; + }); + }); + }; + NetworkConnector.prototype.getAccount = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, null]; + }); + }); + }; + NetworkConnector.prototype.deactivate = function () { + return; + }; + /** + * Meant to be called only by MiniRpcProvider + * @param chainId the new chain id + */ + NetworkConnector.prototype.changeChainId = function (chainId) { + if (chainId in this.providers) { + this.currentChainId = chainId; + this.emitUpdate({ + chainId: chainId, + account: null, + provider: this.providers[chainId], + }); + } + else { + throw new Error("Unsupported chain ID: " + chainId); + } + }; + return NetworkConnector; +}(abstractConnector.AbstractConnector)); + +var FORMATIC_KEY = process.env.REACT_APP_FORTMATIC_KEY; +var PORTIS_ID = process.env.REACT_APP_PORTIS_ID; +var network = new NetworkConnector({ + urls: INFURA_NETWORK_URLS, + defaultChainId: 1, +}); +var networkLibrary; +function getNetworkLibrary() { + return (networkLibrary = networkLibrary !== null && networkLibrary !== void 0 ? networkLibrary : getLibrary(network.provider)); +} +new injectedConnector.InjectedConnector({ + supportedChainIds: ALL_SUPPORTED_CHAIN_IDS, +}); +new safeAppsWeb3React.SafeAppConnector(); +new walletconnectConnector.WalletConnectConnector({ + supportedChainIds: ALL_SUPPORTED_CHAIN_IDS, + rpc: INFURA_NETWORK_URLS, + qrcode: true, +}); +// mainnet only +new FortmaticConnector({ + apiKey: FORMATIC_KEY !== null && FORMATIC_KEY !== void 0 ? FORMATIC_KEY : '', + chainId: 1, +}); +// mainnet only +new portisConnector.PortisConnector({ + dAppId: PORTIS_ID !== null && PORTIS_ID !== void 0 ? PORTIS_ID : '', + networks: [1], +}); +new walletlinkConnector.WalletLinkConnector({ + url: INFURA_NETWORK_URLS[SupportedChainId.MAINNET], + appName: 'Uniswap', + appLogoUrl: UNISWAP_LOGO_URL, + supportedChainIds: [SupportedChainId.MAINNET, SupportedChainId.POLYGON], +}); + +var fetchTokenList = { + pending: toolkit.createAction('lists/fetchTokenList/pending'), + fulfilled: toolkit.createAction('lists/fetchTokenList/fulfilled'), + rejected: toolkit.createAction('lists/fetchTokenList/rejected'), +}; +// add and remove from list options +var addList = toolkit.createAction('lists/addList'); +var removeList = toolkit.createAction('lists/removeList'); +// select which lists to search across from loaded lists +var enableList = toolkit.createAction('lists/enableList'); +var disableList = toolkit.createAction('lists/disableList'); +// versioning +var acceptListUpdate = toolkit.createAction('lists/acceptListUpdate'); + +function useFetchListCallback() { + var _this = this; + var _a = useActiveWeb3React(), chainId = _a.chainId, library = _a.library; + var dispatch = useAppDispatch(); + var ensResolver = React.useCallback(function (ensName) { return __awaiter(_this, void 0, void 0, function () { + var networkLibrary, network; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!(!library || chainId !== 1)) return [3 /*break*/, 2]; + networkLibrary = getNetworkLibrary(); + return [4 /*yield*/, networkLibrary.getNetwork()]; + case 1: + network = _a.sent(); + if (networkLibrary && network.chainId === 1) { + return [2 /*return*/, resolveENSContentHash(ensName, networkLibrary)]; + } + throw new Error('Could not construct mainnet ENS resolver'); + case 2: return [2 /*return*/, resolveENSContentHash(ensName, library)]; + } + }); + }); }, [chainId, library]); + // note: prevent dispatch if using for list search or unsupported list + return React.useCallback(function (listUrl, sendDispatch) { + if (sendDispatch === void 0) { sendDispatch = true; } + return __awaiter(_this, void 0, void 0, function () { + var requestId; + return __generator(this, function (_a) { + requestId = toolkit.nanoid(); + sendDispatch && dispatch(fetchTokenList.pending({ requestId: requestId, url: listUrl })); + return [2 /*return*/, fetchTokenList$1(listUrl, ensResolver) + .then(function (tokenList) { + sendDispatch && dispatch(fetchTokenList.fulfilled({ url: listUrl, tokenList: tokenList, requestId: requestId })); + return tokenList; + }) + .catch(function (error) { + console.debug("Failed to get list at url " + listUrl, error); + sendDispatch && dispatch(fetchTokenList.rejected({ url: listUrl, requestId: requestId, errorMessage: error.message })); + throw error; + })]; + }); + }); + }, [dispatch, ensResolver]); +} + +var Wrapper$8 = styled__default["default"].div(templateObject_1$o || (templateObject_1$o = __makeTemplateObject(["\n position: relative;\n width: 100%;\n overflow: auto;\n"], ["\n position: relative;\n width: 100%;\n overflow: auto;\n"]))); +function ImportList(_a) { + var _b; + var listURL = _a.listURL, list = _a.list, setModalView = _a.setModalView, onDismiss = _a.onDismiss; + var theme = useTheme(); + var dispatch = useAppDispatch(); + // user must accept + var _c = __read(React.useState(false), 2), confirmed = _c[0], setConfirmed = _c[1]; + var lists = useAllLists(); + var fetchList = useFetchListCallback(); + // monitor is list is loading + var adding = Boolean((_b = lists[listURL]) === null || _b === void 0 ? void 0 : _b.loadingRequestId); + var _d = __read(React.useState(null), 2), addError = _d[0], setAddError = _d[1]; + var handleAddList = React.useCallback(function () { + if (adding) + return; + setAddError(null); + fetchList(listURL) + .then(function () { + ReactGA__default["default"].event({ + category: 'Lists', + action: 'Add List', + label: listURL, + }); + // turn list on + dispatch(enableList(listURL)); + // go back to lists + setModalView(CurrencyModalView.manage); + }) + .catch(function (error) { + ReactGA__default["default"].event({ + category: 'Lists', + action: 'Add List Failed', + label: listURL, + }); + setAddError(error.message); + dispatch(removeList(listURL)); + }); + }, [adding, dispatch, fetchList, listURL, setModalView]); + return (jsxRuntime.jsxs(Wrapper$8, { children: [jsxRuntime.jsx(PaddedColumn, __assign({ gap: "14px", style: { width: '100%', flex: '1 1' } }, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(reactFeather.ArrowLeft, { style: { cursor: 'pointer' }, onClick: function () { return setModalView(CurrencyModalView.manage); } }, void 0), jsxRuntime.jsx(ThemedText.MediumHeader, { children: jsxRuntime.jsx(macro.Trans, { children: "Import List" }, void 0) }, void 0), jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0)] }, void 0) }), void 0), jsxRuntime.jsx(SectionBreak, {}, void 0), jsxRuntime.jsx(PaddedColumn, __assign({ gap: "md" }, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "md" }, { children: [jsxRuntime.jsx(Card, __assign({ backgroundColor: theme.bg2, padding: "12px 20px" }, { children: jsxRuntime.jsx(RowBetween, { children: jsxRuntime.jsxs(RowFixed, { children: [list.logoURI && jsxRuntime.jsx(ListLogo, { logoURI: list.logoURI, size: "40px" }, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "sm", style: { marginLeft: '20px' } }, { children: [jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 600, mr: "6px" }, { children: list.name }), void 0), jsxRuntime.jsx(TextDot, {}, void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: '16px', ml: "6px" }, { children: jsxRuntime.jsxs(macro.Trans, { children: [list.tokens.length, " tokens"] }, void 0) }), void 0)] }, void 0), jsxRuntime.jsx(ExternalLink, __assign({ href: "https://tokenlists.org/token-list?url=" + listURL }, { children: jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: '12px', color: theme.blue1 }, { children: listURL }), void 0) }), void 0)] }), void 0)] }, void 0) }, void 0) }), void 0), jsxRuntime.jsxs(Card, __assign({ style: { backgroundColor: polished.transparentize(0.8, theme.red1) } }, { children: [jsxRuntime.jsxs(AutoColumn, __assign({ justify: "center", style: { textAlign: 'center', gap: '16px', marginBottom: '12px' } }, { children: [jsxRuntime.jsx(reactFeather.AlertTriangle, { stroke: theme.red1, size: 32 }, void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 500, fontSize: 20, color: theme.red1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Import at your own risk" }, void 0) }), void 0)] }), void 0), jsxRuntime.jsxs(AutoColumn, __assign({ style: { textAlign: 'center', gap: '16px', marginBottom: '12px' } }, { children: [jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 500, color: theme.red1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one." }, void 0) }), void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 600, color: theme.red1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "If you purchase a token from this list, you may not be able to sell it back." }, void 0) }), void 0)] }), void 0), jsxRuntime.jsxs(AutoRow, __assign({ justify: "center", style: { cursor: 'pointer' }, onClick: function () { return setConfirmed(!confirmed); } }, { children: [jsxRuntime.jsx(Checkbox, { name: "confirmed", type: "checkbox", checked: confirmed, onChange: function () { return setConfirmed(!confirmed); } }, void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ ml: "10px", fontSize: "16px", color: theme.red1, fontWeight: 500 }, { children: jsxRuntime.jsx(macro.Trans, { children: "I understand" }, void 0) }), void 0)] }), void 0)] }), void 0), jsxRuntime.jsx(ButtonPrimary, __assign({ disabled: !confirmed, altDisabledStyle: true, "$borderRadius": "20px", padding: "10px 1rem", onClick: handleAddList }, { children: jsxRuntime.jsx(macro.Trans, { children: "Import" }, void 0) }), void 0), addError ? (jsxRuntime.jsx(ThemedText.Error, __assign({ title: addError, style: { textOverflow: 'ellipsis', overflow: 'hidden' }, error: true }, { children: addError }), void 0)) : null] }), void 0) }), void 0)] }, void 0)); +} +var templateObject_1$o; + +var WarningWrapper = styled__default["default"](Card)(templateObject_1$n || (templateObject_1$n = __makeTemplateObject(["\n background-color: ", ";\n width: fit-content;\n"], ["\n background-color: ", ";\n width: fit-content;\n"])), function (_a) { + var theme = _a.theme, highWarning = _a.highWarning; + return highWarning ? polished.transparentize(0.8, theme.red1) : polished.transparentize(0.8, theme.yellow2); +}); +var AddressText = styled__default["default"](ThemedText.Blue)(templateObject_3$a || (templateObject_3$a = __makeTemplateObject(["\n font-size: 12px;\n word-break: break-all;\n\n ", "\n"], ["\n font-size: 12px;\n word-break: break-all;\n\n ", "\n"])), function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToSmall(templateObject_2$d || (templateObject_2$d = __makeTemplateObject(["\n font-size: 10px;\n "], ["\n font-size: 10px;\n "]))); +}); +var TokenImportCard = function (_a) { + var list = _a.list, token = _a.token; + var theme = styled.useTheme(); + var chainId = useActiveWeb3React().chainId; + return (jsxRuntime.jsx(Card, __assign({ backgroundColor: theme.bg2, padding: "2rem" }, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "10px", justify: "center" }, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: token, size: '32px' }, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "4px", justify: "center" }, { children: [jsxRuntime.jsx(ThemedText.Body, __assign({ ml: "8px", mr: "8px", fontWeight: 500, fontSize: 20 }, { children: token.symbol }), void 0), jsxRuntime.jsx(ThemedText.DarkGray, __assign({ fontWeight: 400, fontSize: 14 }, { children: token.name }), void 0)] }), void 0), chainId && (jsxRuntime.jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, token.address, ExplorerDataType.ADDRESS) }, { children: jsxRuntime.jsx(AddressText, __assign({ fontSize: 12 }, { children: token.address }), void 0) }), void 0)), list !== undefined ? (jsxRuntime.jsxs(RowFixed, { children: [list.logoURI && jsxRuntime.jsx(ListLogo, { logoURI: list.logoURI, size: "16px" }, void 0), jsxRuntime.jsx(ThemedText.Small, __assign({ ml: "6px", fontSize: 14, color: theme.text3 }, { children: jsxRuntime.jsxs(macro.Trans, { children: ["via ", list.name, " token list"] }, void 0) }), void 0)] }, void 0)) : (jsxRuntime.jsx(WarningWrapper, __assign({ "$borderRadius": "4px", padding: "4px", highWarning: true }, { children: jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(reactFeather.AlertCircle, { stroke: theme.red1, size: "10px" }, void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ color: theme.red1, ml: "4px", fontSize: "10px", fontWeight: 500 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Unknown Source" }, void 0) }), void 0)] }, void 0) }), void 0))] }), void 0) }), void 0)); +}; +var templateObject_1$n, templateObject_2$d, templateObject_3$a; + +var Wrapper$7 = styled__default["default"].div(templateObject_1$m || (templateObject_1$m = __makeTemplateObject(["\n align-items: center;\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n height: 100%;\n width: 100%;\n"], ["\n align-items: center;\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n height: 100%;\n width: 100%;\n"]))); +var Button = styled__default["default"](ButtonPrimary)(templateObject_2$c || (templateObject_2$c = __makeTemplateObject(["\n margin-top: 1em;\n padding: 10px 1em;\n"], ["\n margin-top: 1em;\n padding: 10px 1em;\n"]))); +var Content = styled__default["default"].div(templateObject_3$9 || (templateObject_3$9 = __makeTemplateObject(["\n padding: 1em;\n"], ["\n padding: 1em;\n"]))); +var Copy = styled__default["default"](ThemedText.Body)(templateObject_4$6 || (templateObject_4$6 = __makeTemplateObject(["\n text-align: center;\n margin: 0 2em 1em !important;\n font-weight: 400;\n font-size: 16px;\n"], ["\n text-align: center;\n margin: 0 2em 1em !important;\n font-weight: 400;\n font-size: 16px;\n"]))); +var Header = styled__default["default"].div(templateObject_5$6 || (templateObject_5$6 = __makeTemplateObject(["\n align-items: center;\n display: flex;\n gap: 14px;\n justify-content: space-between;\n padding: 20px;\n width: 100%;\n"], ["\n align-items: center;\n display: flex;\n gap: 14px;\n justify-content: space-between;\n padding: 20px;\n width: 100%;\n"]))); +var Icon = styled__default["default"](reactFeather.AlertCircle)(templateObject_6$4 || (templateObject_6$4 = __makeTemplateObject(["\n stroke: ", ";\n width: 48px;\n height: 48px;\n"], ["\n stroke: ", ";\n width: 48px;\n height: 48px;\n"])), function (_a) { + var theme = _a.theme; + return theme.text2; +}); +var BlockedToken = function (_a) { + var onBack = _a.onBack, onDismiss = _a.onDismiss, blockedTokens = _a.blockedTokens; + return (jsxRuntime.jsxs(Wrapper$7, { children: [jsxRuntime.jsxs(Header, { children: [onBack ? jsxRuntime.jsx(reactFeather.ArrowLeft, { style: { cursor: 'pointer' }, onClick: onBack }, void 0) : jsxRuntime.jsx("div", {}, void 0), jsxRuntime.jsx(ThemedText.MediumHeader, { children: jsxRuntime.jsx(macro.Trans, { children: "Token not supported" }, void 0) }, void 0), onDismiss ? jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0) : jsxRuntime.jsx("div", {}, void 0)] }, void 0), jsxRuntime.jsx(Icon, {}, void 0), jsxRuntime.jsxs(Content, { children: [jsxRuntime.jsx(Copy, { children: jsxRuntime.jsx(macro.Trans, { children: "This token is not supported in the Uniswap Labs app" }, void 0) }, void 0), jsxRuntime.jsx(TokenImportCard, { token: blockedTokens[0] }, void 0), jsxRuntime.jsx(Button, __assign({ disabled: true }, { children: jsxRuntime.jsx(macro.Trans, { children: "Import" }, void 0) }), void 0)] }, void 0)] }, void 0)); +}; +var templateObject_1$m, templateObject_2$c, templateObject_3$9, templateObject_4$6, templateObject_5$6, templateObject_6$4; + +var Wrapper$6 = styled__default["default"].div(templateObject_1$l || (templateObject_1$l = __makeTemplateObject(["\n position: relative;\n width: 100%;\n overflow: auto;\n"], ["\n position: relative;\n width: 100%;\n overflow: auto;\n"]))); +function ImportToken(props) { + var tokens = props.tokens, list = props.list, onBack = props.onBack, onDismiss = props.onDismiss, handleCurrencySelect = props.handleCurrencySelect; + var theme = useTheme(); + var addToken = useAddUserToken(); + var unsupportedTokens = useUnsupportedTokens(); + var unsupportedSet = new Set(Object.keys(unsupportedTokens)); + var intersection = new Set(tokens.filter(function (token) { return unsupportedSet.has(token.address); })); + if (intersection.size > 0) { + return jsxRuntime.jsx(BlockedToken, { onBack: onBack, onDismiss: onDismiss, blockedTokens: Array.from(intersection) }, void 0); + } + return (jsxRuntime.jsxs(Wrapper$6, { children: [jsxRuntime.jsx(PaddedColumn, __assign({ gap: "14px", style: { width: '100%', flex: '1 1' } }, { children: jsxRuntime.jsxs(RowBetween, { children: [onBack ? jsxRuntime.jsx(reactFeather.ArrowLeft, { style: { cursor: 'pointer' }, onClick: onBack }, void 0) : jsxRuntime.jsx("div", {}, void 0), jsxRuntime.jsx(ThemedText.MediumHeader, { children: jsxRuntime.jsx(macro.Plural, { value: tokens.length, one: "Import token", other: "Import tokens" }, void 0) }, void 0), onDismiss ? jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0) : jsxRuntime.jsx("div", {}, void 0)] }, void 0) }), void 0), jsxRuntime.jsx(SectionBreak, {}, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "md", style: { marginBottom: '32px', padding: '1rem' } }, { children: [jsxRuntime.jsxs(AutoColumn, __assign({ justify: "center", style: { textAlign: 'center', gap: '16px', padding: '1rem' } }, { children: [jsxRuntime.jsx(reactFeather.AlertCircle, { size: 48, stroke: theme.text2, strokeWidth: 1 }, void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 400, fontSize: 16 }, { children: jsxRuntime.jsx(macro.Trans, { children: "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade." }, void 0) }), void 0)] }), void 0), tokens.map(function (token) { return (jsxRuntime.jsx(TokenImportCard, { token: token, list: list }, 'import' + token.address)); }), jsxRuntime.jsx(ButtonPrimary, __assign({ altDisabledStyle: true, "$borderRadius": "20px", padding: "10px 1rem", onClick: function () { + tokens.map(function (token) { return addToken(token); }); + handleCurrencySelect && handleCurrencySelect(tokens[0]); + }, className: ".token-dismiss-button" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Import" }, void 0) }), void 0)] }), void 0)] }, void 0)); +} +var templateObject_1$l; + +function getColorFromUriPath(uri) { + return __awaiter(this, void 0, void 0, function () { + var formattedPath, palette, detectedHex, AAscore; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + formattedPath = uriToHttp(uri)[0]; + return [4 /*yield*/, Vibrant__default["default"].from(formattedPath).getPalette()]; + case 1: + palette = _a.sent(); + if (!(palette === null || palette === void 0 ? void 0 : palette.Vibrant)) { + return [2 /*return*/, null]; + } + detectedHex = palette.Vibrant.hex; + AAscore = wcagContrast.hex(detectedHex, '#FFF'); + while (AAscore < 3) { + detectedHex = polished.shade(0.005, detectedHex); + AAscore = wcagContrast.hex(detectedHex, '#FFF'); + } + return [2 /*return*/, detectedHex]; + } + }); + }); +} +function useListColor(listImageUri) { + var _a = __read(React.useState('#2172E5'), 2), color = _a[0], setColor = _a[1]; + React.useLayoutEffect(function () { + var stale = false; + if (listImageUri) { + getColorFromUriPath(listImageUri).then(function (color) { + if (!stale && color !== null) { + setColor(color); + } + }); + } + return function () { + stale = true; + setColor('#2172E5'); + }; + }, [listImageUri]); + return color; +} + +function listVersionLabel(version) { + return "v" + version.major + "." + version.minor + "." + version.patch; +} + +var Wrapper$5 = styled__default["default"].button(templateObject_1$k || (templateObject_1$k = __makeTemplateObject(["\n border-radius: 20px;\n border: none;\n background: ", ";\n display: flex;\n width: fit-content;\n cursor: pointer;\n outline: none;\n padding: 0.4rem 0.4rem;\n align-items: center;\n"], ["\n border-radius: 20px;\n border: none;\n background: ", ";\n display: flex;\n width: fit-content;\n cursor: pointer;\n outline: none;\n padding: 0.4rem 0.4rem;\n align-items: center;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg1; +}); +var ToggleElement$1 = styled__default["default"].span(templateObject_2$b || (templateObject_2$b = __makeTemplateObject(["\n border-radius: 50%;\n height: 24px;\n width: 24px;\n background-color: ", ";\n :hover {\n opacity: 0.8;\n }\n"], ["\n border-radius: 50%;\n height: 24px;\n width: 24px;\n background-color: ", ";\n :hover {\n opacity: 0.8;\n }\n"])), function (_a) { + var isActive = _a.isActive, bgColor = _a.bgColor, theme = _a.theme; + return (isActive ? bgColor : theme.bg4); +}); +var StatusText = styled__default["default"](ThemedText.Main)(templateObject_3$8 || (templateObject_3$8 = __makeTemplateObject(["\n margin: 0 10px;\n width: 24px;\n color: ", ";\n"], ["\n margin: 0 10px;\n width: 24px;\n color: ", ";\n"])), function (_a) { + var theme = _a.theme, isActive = _a.isActive; + return (isActive ? theme.text1 : theme.text3); +}); +function ListToggle(_a) { + var id = _a.id, isActive = _a.isActive, bgColor = _a.bgColor, toggle = _a.toggle; + return (jsxRuntime.jsxs(Wrapper$5, __assign({ id: id, isActive: isActive, onClick: toggle }, { children: [isActive && (jsxRuntime.jsx(StatusText, __assign({ fontWeight: "600", margin: "0 6px", isActive: true }, { children: jsxRuntime.jsx(macro.Trans, { children: "ON" }, void 0) }), void 0)), jsxRuntime.jsx(ToggleElement$1, { isActive: isActive, bgColor: bgColor }, void 0), !isActive && (jsxRuntime.jsx(StatusText, __assign({ fontWeight: "600", margin: "0 6px", isActive: false }, { children: jsxRuntime.jsx(macro.Trans, { children: "OFF" }, void 0) }), void 0))] }), void 0)); +} +var templateObject_1$k, templateObject_2$b, templateObject_3$8; + +var Wrapper$4 = styled__default["default"](Column)(templateObject_1$j || (templateObject_1$j = __makeTemplateObject(["\n flex: 1;\n overflow-y: hidden;\n"], ["\n flex: 1;\n overflow-y: hidden;\n"]))); +var UnpaddedLinkStyledButton = styled__default["default"](LinkStyledButton)(templateObject_2$a || (templateObject_2$a = __makeTemplateObject(["\n padding: 0;\n font-size: 1rem;\n opacity: ", ";\n"], ["\n padding: 0;\n font-size: 1rem;\n opacity: ", ";\n"])), function (_a) { + var disabled = _a.disabled; + return (disabled ? '0.4' : '1'); +}); +var PopoverContainer = styled__default["default"].div(templateObject_3$7 || (templateObject_3$7 = __makeTemplateObject(["\n z-index: 100;\n visibility: ", ";\n opacity: ", ";\n transition: visibility 150ms linear, opacity 150ms linear;\n background: ", ";\n border: 1px solid ", ";\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: ", ";\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 z-index: 100;\n visibility: ", ";\n opacity: ", ";\n transition: visibility 150ms linear, opacity 150ms linear;\n background: ", ";\n border: 1px solid ", ";\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: ", ";\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"])), function (props) { return (props.show ? 'visible' : 'hidden'); }, function (props) { return (props.show ? 1 : 0); }, function (_a) { + var theme = _a.theme; + return theme.bg2; +}, function (_a) { + var theme = _a.theme; + return theme.bg3; +}, function (_a) { + var theme = _a.theme; + return theme.text2; +}); +var StyledMenu$1 = styled__default["default"].div(templateObject_4$5 || (templateObject_4$5 = __makeTemplateObject(["\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n"], ["\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n"]))); +var StyledTitleText = styled__default["default"].div(templateObject_5$5 || (templateObject_5$5 = __makeTemplateObject(["\n font-size: 16px;\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 600;\n color: ", ";\n"], ["\n font-size: 16px;\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 600;\n color: ", ";\n"])), function (_a) { + var theme = _a.theme, active = _a.active; + return (active ? theme.white : theme.text2); +}); +var StyledListUrlText = styled__default["default"](ThemedText.Main)(templateObject_6$3 || (templateObject_6$3 = __makeTemplateObject(["\n font-size: 12px;\n color: ", ";\n"], ["\n font-size: 12px;\n color: ", ";\n"])), function (_a) { + var theme = _a.theme, active = _a.active; + return (active ? theme.white : theme.text2); +}); +var RowWrapper = styled__default["default"](Row)(templateObject_7$3 || (templateObject_7$3 = __makeTemplateObject(["\n background-color: ", ";\n opacity: ", ";\n transition: 200ms;\n align-items: center;\n padding: 1rem;\n border-radius: 20px;\n"], ["\n background-color: ", ";\n opacity: ", ";\n transition: 200ms;\n align-items: center;\n padding: 1rem;\n border-radius: 20px;\n"])), function (_a) { + var bgColor = _a.bgColor, active = _a.active, theme = _a.theme; + return (active ? bgColor !== null && bgColor !== void 0 ? bgColor : 'transparent' : theme.bg2); +}, function (_a) { + var hasActiveTokens = _a.hasActiveTokens; + return (hasActiveTokens ? 1 : 0.4); +}); +function listUrlRowHTMLId(listUrl) { + return "list-row-" + listUrl.replace(/\./g, '-'); +} +var ListRow = React.memo(function ListRow(_a) { + var listUrl = _a.listUrl; + var chainId = useActiveWeb3React().chainId; + var listsByUrl = useAppSelector(function (state) { return state.lists.byUrl; }); + var dispatch = useAppDispatch(); + var _b = listsByUrl[listUrl], list = _b.current, pending = _b.pendingUpdate; + var activeTokensOnThisChain = React.useMemo(function () { + if (!list || !chainId) { + return 0; + } + return list.tokens.reduce(function (acc, cur) { return (cur.chainId === chainId ? acc + 1 : acc); }, 0); + }, [chainId, list]); + var theme = useTheme(); + var listColor = useListColor(list === null || list === void 0 ? void 0 : list.logoURI); + var isActive = useIsListActive(listUrl); + var _c = __read(useToggle(false), 2), open = _c[0], toggle = _c[1]; + var node = React.useRef(); + var _d = __read(React.useState(), 2), referenceElement = _d[0], setReferenceElement = _d[1]; + var _e = __read(React.useState(), 2), popperElement = _e[0], setPopperElement = _e[1]; + var _f = reactPopper.usePopper(referenceElement, popperElement, { + placement: 'auto', + strategy: 'fixed', + modifiers: [{ name: 'offset', options: { offset: [8, 8] } }], + }), styles = _f.styles, attributes = _f.attributes; + useOnClickOutside(node, open ? toggle : undefined); + var handleAcceptListUpdate = React.useCallback(function () { + if (!pending) + return; + ReactGA__default["default"].event({ + category: 'Lists', + action: 'Update List from List Select', + label: listUrl, + }); + dispatch(acceptListUpdate(listUrl)); + }, [dispatch, listUrl, pending]); + var handleRemoveList = React.useCallback(function () { + ReactGA__default["default"].event({ + category: 'Lists', + action: 'Start Remove List', + label: listUrl, + }); + if (window.prompt(macro.t(templateObject_8$2 || (templateObject_8$2 = __makeTemplateObject(["Please confirm you would like to remove this list by typing REMOVE"], ["Please confirm you would like to remove this list by typing REMOVE"])))) === "REMOVE") { + ReactGA__default["default"].event({ + category: 'Lists', + action: 'Confirm Remove List', + label: listUrl, + }); + dispatch(removeList(listUrl)); + } + }, [dispatch, listUrl]); + var handleEnableList = React.useCallback(function () { + ReactGA__default["default"].event({ + category: 'Lists', + action: 'Enable List', + label: listUrl, + }); + dispatch(enableList(listUrl)); + }, [dispatch, listUrl]); + var handleDisableList = React.useCallback(function () { + ReactGA__default["default"].event({ + category: 'Lists', + action: 'Disable List', + label: listUrl, + }); + dispatch(disableList(listUrl)); + }, [dispatch, listUrl]); + if (!list) + return null; + return (jsxRuntime.jsxs(RowWrapper, __assign({ active: isActive, hasActiveTokens: activeTokensOnThisChain > 0, bgColor: listColor, id: listUrlRowHTMLId(listUrl) }, { children: [list.logoURI ? (jsxRuntime.jsx(ListLogo, { size: "40px", style: { marginRight: '1rem' }, logoURI: list.logoURI, alt: list.name + " list logo" }, void 0)) : (jsxRuntime.jsx("div", { style: { width: '24px', height: '24px', marginRight: '1rem' } }, void 0)), jsxRuntime.jsxs(Column, __assign({ style: { flex: '1' } }, { children: [jsxRuntime.jsx(Row, { children: jsxRuntime.jsx(StyledTitleText, __assign({ active: isActive }, { children: list.name }), void 0) }, void 0), jsxRuntime.jsxs(RowFixed, __assign({ mt: "4px" }, { children: [jsxRuntime.jsx(StyledListUrlText, __assign({ active: isActive, mr: "6px" }, { children: jsxRuntime.jsxs(macro.Trans, { children: [activeTokensOnThisChain, " tokens"] }, void 0) }), void 0), jsxRuntime.jsxs(StyledMenu$1, __assign({ ref: node }, { children: [jsxRuntime.jsx(ButtonEmpty, __assign({ onClick: toggle, ref: setReferenceElement, padding: "0" }, { children: jsxRuntime.jsx(reactFeather.Settings, { stroke: isActive ? theme.bg1 : theme.text1, size: 12 }, void 0) }), void 0), open && (jsxRuntime.jsxs(PopoverContainer, __assign({ show: true, ref: setPopperElement, style: styles.popper }, attributes.popper, { children: [jsxRuntime.jsx("div", { children: list && listVersionLabel(list.version) }, void 0), jsxRuntime.jsx(SeparatorDark, {}, void 0), jsxRuntime.jsx(ExternalLink, __assign({ href: "https://tokenlists.org/token-list?url=" + listUrl }, { children: jsxRuntime.jsx(macro.Trans, { children: "View list" }, void 0) }), void 0), jsxRuntime.jsx(UnpaddedLinkStyledButton, __assign({ onClick: handleRemoveList, disabled: Object.keys(listsByUrl).length === 1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Remove list" }, void 0) }), void 0), pending && (jsxRuntime.jsx(UnpaddedLinkStyledButton, __assign({ onClick: handleAcceptListUpdate }, { children: jsxRuntime.jsx(macro.Trans, { children: "Update list" }, void 0) }), void 0))] }), void 0))] }), void 0)] }), void 0)] }), void 0), jsxRuntime.jsx(ListToggle, { isActive: isActive, bgColor: listColor, toggle: function () { + isActive ? handleDisableList() : handleEnableList(); + } }, void 0)] }), listUrl)); +}); +var ListContainer = styled__default["default"].div(templateObject_9$2 || (templateObject_9$2 = __makeTemplateObject(["\n padding: 1rem;\n height: 100%;\n overflow: auto;\n flex: 1;\n"], ["\n padding: 1rem;\n height: 100%;\n overflow: auto;\n flex: 1;\n"]))); +function ManageLists(_a) { + var setModalView = _a.setModalView, setImportList = _a.setImportList, setListUrl = _a.setListUrl; + var chainId = useActiveWeb3React().chainId; + var theme = useTheme(); + var _b = __read(React.useState(''), 2), listUrlInput = _b[0], setListUrlInput = _b[1]; + var lists = useAllLists(); + var tokenCountByListName = React.useMemo(function () { + return Object.values(lists).reduce(function (acc, _a) { + var _b; + var list = _a.current; + if (!list) { + return acc; + } + return __assign(__assign({}, acc), (_b = {}, _b[list.name] = list.tokens.reduce(function (count, token) { return (token.chainId === chainId ? count + 1 : count); }, 0), _b)); + }, {}); + }, [chainId, lists]); + // sort by active but only if not visible + var activeListUrls = useActiveListUrls(); + var handleInput = React.useCallback(function (e) { + setListUrlInput(e.target.value); + }, []); + var fetchList = useFetchListCallback(); + var validUrl = React.useMemo(function () { + return uriToHttp(listUrlInput).length > 0 || Boolean(parseENSAddress(listUrlInput)); + }, [listUrlInput]); + var sortedLists = React.useMemo(function () { + var listUrls = Object.keys(lists); + return listUrls + .filter(function (listUrl) { + // only show loaded lists, hide unsupported lists + return Boolean(lists[listUrl].current) && !Boolean(UNSUPPORTED_LIST_URLS.includes(listUrl)); + }) + .sort(function (listUrlA, listUrlB) { + var listA = lists[listUrlA].current; + var listB = lists[listUrlB].current; + // first filter on active lists + if ((activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(listUrlA)) && !(activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(listUrlB))) { + return -1; + } + if (!(activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(listUrlA)) && (activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(listUrlB))) { + return 1; + } + if (listA && listB) { + if (tokenCountByListName[listA.name] > tokenCountByListName[listB.name]) { + return -1; + } + if (tokenCountByListName[listA.name] < tokenCountByListName[listB.name]) { + return 1; + } + return listA.name.toLowerCase() < listB.name.toLowerCase() + ? -1 + : listA.name.toLowerCase() === listB.name.toLowerCase() + ? 0 + : 1; + } + if (listA) + return -1; + if (listB) + return 1; + return 0; + }); + }, [lists, activeListUrls, tokenCountByListName]); + // temporary fetched list for import flow + var _c = __read(React.useState(), 2), tempList = _c[0], setTempList = _c[1]; + var _d = __read(React.useState(), 2), addError = _d[0], setAddError = _d[1]; + React.useEffect(function () { + function fetchTempList() { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + fetchList(listUrlInput, false) + .then(function (list) { return setTempList(list); }) + .catch(function () { return setAddError(macro.t(templateObject_10$2 || (templateObject_10$2 = __makeTemplateObject(["Error importing list"], ["Error importing list"])))); }); + return [2 /*return*/]; + }); + }); + } + // if valid url, fetch details for card + if (validUrl) { + fetchTempList(); + } + else { + setTempList(undefined); + listUrlInput !== '' && setAddError(macro.t(templateObject_11$2 || (templateObject_11$2 = __makeTemplateObject(["Enter valid list location"], ["Enter valid list location"])))); + } + // reset error + if (listUrlInput === '') { + setAddError(undefined); + } + }, [fetchList, listUrlInput, validUrl]); + // check if list is already imported + var isImported = Object.keys(lists).includes(listUrlInput); + // set list values and have parent modal switch to import list view + var handleImport = React.useCallback(function () { + if (!tempList) + return; + setImportList(tempList); + setModalView(CurrencyModalView.importList); + setListUrl(listUrlInput); + }, [listUrlInput, setImportList, setListUrl, setModalView, tempList]); + return (jsxRuntime.jsxs(Wrapper$4, { children: [jsxRuntime.jsxs(PaddedColumn, __assign({ gap: "14px" }, { children: [jsxRuntime.jsx(Row, { children: jsxRuntime.jsx(SearchInput, { type: "text", id: "list-add-input", placeholder: macro.t(templateObject_12$2 || (templateObject_12$2 = __makeTemplateObject(["https:// or ipfs:// or ENS name"], ["https:// or ipfs:// or ENS name"]))), value: listUrlInput, onChange: handleInput }, void 0) }, void 0), addError ? (jsxRuntime.jsx(ThemedText.Error, __assign({ title: addError, style: { textOverflow: 'ellipsis', overflow: 'hidden' }, error: true }, { children: addError }), void 0)) : null] }), void 0), tempList && (jsxRuntime.jsx(PaddedColumn, __assign({ style: { paddingTop: 0 } }, { children: jsxRuntime.jsx(Card, __assign({ backgroundColor: theme.bg2, padding: "12px 20px" }, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsxs(RowFixed, { children: [tempList.logoURI && jsxRuntime.jsx(ListLogo, { logoURI: tempList.logoURI, size: "40px" }, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "4px", style: { marginLeft: '20px' } }, { children: [jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 600 }, { children: tempList.name }), void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: '12px' }, { children: jsxRuntime.jsxs(macro.Trans, { children: [tempList.tokens.length, " tokens"] }, void 0) }), void 0)] }), void 0)] }, void 0), isImported ? (jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(IconWrapper, __assign({ stroke: theme.text2, size: "16px", marginRight: '10px' }, { children: jsxRuntime.jsx(reactFeather.CheckCircle, {}, void 0) }), void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ color: theme.text2 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Loaded" }, void 0) }), void 0)] }, void 0)) : (jsxRuntime.jsx(ButtonPrimary, __assign({ style: { fontSize: '14px' }, padding: "6px 8px", width: "fit-content", onClick: handleImport }, { children: jsxRuntime.jsx(macro.Trans, { children: "Import" }, void 0) }), void 0))] }, void 0) }), void 0) }), void 0)), jsxRuntime.jsx(Separator, {}, void 0), jsxRuntime.jsx(ListContainer, { children: jsxRuntime.jsx(AutoColumn, __assign({ gap: "md" }, { children: sortedLists.map(function (listUrl) { return (jsxRuntime.jsx(ListRow, { listUrl: listUrl }, listUrl)); }) }), void 0) }, void 0)] }, void 0)); +} +var templateObject_1$j, templateObject_2$a, templateObject_3$7, templateObject_4$5, templateObject_5$5, templateObject_6$3, templateObject_7$3, templateObject_8$2, templateObject_9$2, templateObject_10$2, templateObject_11$2, templateObject_12$2; + +var Wrapper$3 = styled__default["default"].div(templateObject_1$i || (templateObject_1$i = __makeTemplateObject(["\n width: 100%;\n height: calc(100% - 60px);\n position: relative;\n padding-bottom: 80px;\n"], ["\n width: 100%;\n height: calc(100% - 60px);\n position: relative;\n padding-bottom: 80px;\n"]))); +var Footer = styled__default["default"].div(templateObject_2$9 || (templateObject_2$9 = __makeTemplateObject(["\n position: absolute;\n bottom: 0;\n width: 100%;\n border-radius: 20px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n border-top: 1px solid ", ";\n padding: 20px;\n text-align: center;\n"], ["\n position: absolute;\n bottom: 0;\n width: 100%;\n border-radius: 20px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n border-top: 1px solid ", ";\n padding: 20px;\n text-align: center;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg3; +}); +function ManageTokens(_a) { + var setModalView = _a.setModalView, setImportToken = _a.setImportToken; + var chainId = useActiveWeb3React().chainId; + var _b = __read(React.useState(''), 2), searchQuery = _b[0], setSearchQuery = _b[1]; + var theme = useTheme(); + // manage focus on modal show + var inputRef = React.useRef(); + var handleInput = React.useCallback(function (event) { + var input = event.target.value; + var checksummedInput = isAddress(input); + setSearchQuery(checksummedInput || input); + }, []); + // if they input an address, use it + var isAddressSearch = isAddress(searchQuery); + var searchToken = useToken(searchQuery); + // all tokens for local lisr + var userAddedTokens = useUserAddedTokens(); + var removeToken = useRemoveUserAddedToken(); + var handleRemoveAll = React.useCallback(function () { + if (chainId && userAddedTokens) { + userAddedTokens.map(function (token) { + return removeToken(chainId, token.address); + }); + } + }, [removeToken, userAddedTokens, chainId]); + var tokenList = React.useMemo(function () { + return (chainId && + userAddedTokens.map(function (token) { return (jsxRuntime.jsxs(RowBetween, __assign({ width: "100%" }, { children: [jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: token, size: '20px' }, void 0), jsxRuntime.jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, token.address, ExplorerDataType.ADDRESS) }, { children: jsxRuntime.jsx(ThemedText.Main, __assign({ ml: '10px', fontWeight: 600 }, { children: token.symbol }), void 0) }), void 0)] }, void 0), jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(TrashIcon, { onClick: function () { return removeToken(chainId, token.address); } }, void 0), jsxRuntime.jsx(ExternalLinkIcon, { href: getExplorerLink(chainId, token.address, ExplorerDataType.ADDRESS) }, void 0)] }, void 0)] }), token.address)); })); + }, [userAddedTokens, chainId, removeToken]); + return (jsxRuntime.jsxs(Wrapper$3, { children: [jsxRuntime.jsxs(Column, __assign({ style: { width: '100%', height: '100%', flex: '1 1' } }, { children: [jsxRuntime.jsxs(PaddedColumn, __assign({ gap: "14px" }, { children: [jsxRuntime.jsx(Row, { children: jsxRuntime.jsx(SearchInput, { type: "text", id: "token-search-input", placeholder: '0x0000', value: searchQuery, autoComplete: "off", ref: inputRef, onChange: handleInput }, void 0) }, void 0), searchQuery !== '' && !isAddressSearch && (jsxRuntime.jsx(ThemedText.Error, __assign({ error: true }, { children: jsxRuntime.jsx(macro.Trans, { children: "Enter valid token address" }, void 0) }), void 0)), searchToken && (jsxRuntime.jsx(Card, __assign({ backgroundColor: theme.bg2, padding: "10px 0" }, { children: jsxRuntime.jsx(ImportRow, { token: searchToken, showImportView: function () { return setModalView(CurrencyModalView.importToken); }, setImportToken: setImportToken, style: { height: 'fit-content' } }, void 0) }), void 0))] }), void 0), jsxRuntime.jsx(Separator, {}, void 0), jsxRuntime.jsxs(PaddedColumn, __assign({ gap: "lg", style: { overflow: 'auto', marginBottom: '10px' } }, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(ThemedText.Main, __assign({ fontWeight: 600 }, { children: jsxRuntime.jsxs(macro.Trans, { children: [userAddedTokens === null || userAddedTokens === void 0 ? void 0 : userAddedTokens.length, " Custom Tokens"] }, void 0) }), void 0), userAddedTokens.length > 0 && (jsxRuntime.jsx(ButtonText, __assign({ onClick: handleRemoveAll }, { children: jsxRuntime.jsx(ThemedText.Blue, { children: jsxRuntime.jsx(macro.Trans, { children: "Clear all" }, void 0) }, void 0) }), void 0))] }, void 0), tokenList] }), void 0)] }), void 0), jsxRuntime.jsx(Footer, { children: jsxRuntime.jsx(ThemedText.DarkGray, { children: jsxRuntime.jsx(macro.Trans, { children: "Tip: Custom tokens are stored locally in your browser" }, void 0) }, void 0) }, void 0)] }, void 0)); +} +var templateObject_1$i, templateObject_2$9; + +var Wrapper$2 = styled__default["default"].div(templateObject_1$h || (templateObject_1$h = __makeTemplateObject(["\n width: 100%;\n position: relative;\n display: flex;\n flex-flow: column;\n"], ["\n width: 100%;\n position: relative;\n display: flex;\n flex-flow: column;\n"]))); +var ToggleWrapper = styled__default["default"](RowBetween)(templateObject_2$8 || (templateObject_2$8 = __makeTemplateObject(["\n background-color: ", ";\n border-radius: 12px;\n padding: 6px;\n"], ["\n background-color: ", ";\n border-radius: 12px;\n padding: 6px;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg3; +}); +var ToggleOption = styled__default["default"].div(templateObject_3$6 || (templateObject_3$6 = __makeTemplateObject(["\n width: 48%;\n padding: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 12px;\n font-weight: 600;\n background-color: ", ";\n color: ", ";\n user-select: none;\n\n :hover {\n cursor: pointer;\n opacity: 0.7;\n }\n"], ["\n width: 48%;\n padding: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 12px;\n font-weight: 600;\n background-color: ", ";\n color: ", ";\n user-select: none;\n\n :hover {\n cursor: pointer;\n opacity: 0.7;\n }\n"])), function (_a) { + var theme = _a.theme, active = _a.active; + return (active ? theme.bg1 : theme.bg3); +}, function (_a) { + var theme = _a.theme, active = _a.active; + return (active ? theme.text1 : theme.text2); +}); +function Manage(_a) { + var onDismiss = _a.onDismiss, setModalView = _a.setModalView, setImportList = _a.setImportList, setImportToken = _a.setImportToken, setListUrl = _a.setListUrl; + // toggle between tokens and lists + var _b = __read(React.useState(true), 2), showLists = _b[0], setShowLists = _b[1]; + return (jsxRuntime.jsxs(Wrapper$2, { children: [jsxRuntime.jsx(PaddedColumn, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(reactFeather.ArrowLeft, { style: { cursor: 'pointer' }, onClick: function () { return setModalView(CurrencyModalView.search); } }, void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Manage" }, void 0) }), void 0), jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0)] }, void 0) }, void 0), jsxRuntime.jsx(Separator, {}, void 0), jsxRuntime.jsx(PaddedColumn, __assign({ style: { paddingBottom: 0 } }, { children: jsxRuntime.jsxs(ToggleWrapper, { children: [jsxRuntime.jsx(ToggleOption, __assign({ onClick: function () { return setShowLists(!showLists); }, active: showLists }, { children: jsxRuntime.jsx(macro.Trans, { children: "Lists" }, void 0) }), void 0), jsxRuntime.jsx(ToggleOption, __assign({ onClick: function () { return setShowLists(!showLists); }, active: !showLists }, { children: jsxRuntime.jsx(macro.Trans, { children: "Tokens" }, void 0) }), void 0)] }, void 0) }), void 0), showLists ? (jsxRuntime.jsx(ManageLists, { setModalView: setModalView, setImportList: setImportList, setListUrl: setListUrl }, void 0)) : (jsxRuntime.jsx(ManageTokens, { setModalView: setModalView, setImportToken: setImportToken }, void 0))] }, void 0)); +} +var templateObject_1$h, templateObject_2$8, templateObject_3$6; + +var CurrencyModalView; +(function (CurrencyModalView) { + CurrencyModalView[CurrencyModalView["search"] = 0] = "search"; + CurrencyModalView[CurrencyModalView["manage"] = 1] = "manage"; + CurrencyModalView[CurrencyModalView["importToken"] = 2] = "importToken"; + CurrencyModalView[CurrencyModalView["importList"] = 3] = "importList"; +})(CurrencyModalView || (CurrencyModalView = {})); +function CurrencySearchModal(_a) { + var isOpen = _a.isOpen, onDismiss = _a.onDismiss, onCurrencySelect = _a.onCurrencySelect, selectedCurrency = _a.selectedCurrency, otherSelectedCurrency = _a.otherSelectedCurrency, _b = _a.showCommonBases, showCommonBases = _b === void 0 ? false : _b, _c = _a.showCurrencyAmount, showCurrencyAmount = _c === void 0 ? true : _c, _d = _a.disableNonToken, disableNonToken = _d === void 0 ? false : _d; + var _e = __read(React.useState(CurrencyModalView.manage), 2), modalView = _e[0], setModalView = _e[1]; + var lastOpen = useLast(isOpen); + React.useEffect(function () { + if (isOpen && !lastOpen) { + setModalView(CurrencyModalView.search); + } + }, [isOpen, lastOpen]); + var handleCurrencySelect = React.useCallback(function (currency) { + onCurrencySelect(currency); + onDismiss(); + }, [onDismiss, onCurrencySelect]); + // for token import view + var prevView = usePrevious(modalView); + // used for import token flow + var _f = __read(React.useState(), 2), importToken = _f[0], setImportToken = _f[1]; + // used for import list + var _g = __read(React.useState(), 2), importList = _g[0], setImportList = _g[1]; + var _h = __read(React.useState(), 2), listURL = _h[0], setListUrl = _h[1]; + var showImportView = React.useCallback(function () { return setModalView(CurrencyModalView.importToken); }, [setModalView]); + var showManageView = React.useCallback(function () { return setModalView(CurrencyModalView.manage); }, [setModalView]); + var handleBackImport = React.useCallback(function () { return setModalView(prevView && prevView !== CurrencyModalView.importToken ? prevView : CurrencyModalView.search); }, [setModalView, prevView]); + // change min height if not searching + var minHeight = modalView === CurrencyModalView.importToken || modalView === CurrencyModalView.importList ? 40 : 80; + var content = null; + switch (modalView) { + case CurrencyModalView.search: + content = (jsxRuntime.jsx(CurrencySearch, { isOpen: isOpen, onDismiss: onDismiss, onCurrencySelect: handleCurrencySelect, selectedCurrency: selectedCurrency, otherSelectedCurrency: otherSelectedCurrency, showCommonBases: showCommonBases, showCurrencyAmount: showCurrencyAmount, disableNonToken: disableNonToken, showImportView: showImportView, setImportToken: setImportToken, showManageView: showManageView }, void 0)); + break; + case CurrencyModalView.importToken: + if (importToken) { + content = (jsxRuntime.jsx(ImportToken, { tokens: [importToken], onDismiss: onDismiss, list: importToken instanceof WrappedTokenInfo ? importToken.list : undefined, onBack: handleBackImport, handleCurrencySelect: handleCurrencySelect }, void 0)); + } + break; + case CurrencyModalView.importList: + if (importList && listURL) { + content = jsxRuntime.jsx(ImportList, { list: importList, listURL: listURL, onDismiss: onDismiss, setModalView: setModalView }, void 0); + } + break; + case CurrencyModalView.manage: + content = (jsxRuntime.jsx(Manage, { onDismiss: onDismiss, setModalView: setModalView, setImportToken: setImportToken, setImportList: setImportList, setListUrl: setListUrl }, void 0)); + break; + } + return (jsxRuntime.jsx(Modal, __assign({ isOpen: isOpen, onDismiss: onDismiss, maxHeight: 80, minHeight: minHeight }, { children: content }), void 0)); +} + +var TextWrapper = styled__default["default"].span(templateObject_1$g || (templateObject_1$g = __makeTemplateObject(["\n margin-left: ", ";\n color: ", ";\n font-size: ", ";\n\n @media screen and (max-width: 600px) {\n font-size: ", ";\n }\n"], ["\n margin-left: ", ";\n color: ", ";\n font-size: ", ";\n\n @media screen and (max-width: 600px) {\n font-size: ", ";\n }\n"])), function (_a) { + var margin = _a.margin; + return margin && '4px'; +}, function (_a) { + var theme = _a.theme, link = _a.link, textColor = _a.textColor; + return (link ? theme.blue1 : textColor !== null && textColor !== void 0 ? textColor : theme.text1); +}, function (_a) { + var fontSize = _a.fontSize; + return fontSize !== null && fontSize !== void 0 ? fontSize : 'inherit'; +}, function (_a) { + var adjustSize = _a.adjustSize; + return adjustSize && '12px'; +}); +var HoverInlineText = function (_a) { + var text = _a.text, _b = _a.maxCharacters, maxCharacters = _b === void 0 ? 20 : _b, _c = _a.margin, margin = _c === void 0 ? false : _c, _d = _a.adjustSize, adjustSize = _d === void 0 ? false : _d, fontSize = _a.fontSize, textColor = _a.textColor, link = _a.link, rest = __rest(_a, ["text", "maxCharacters", "margin", "adjustSize", "fontSize", "textColor", "link"]); + var _e = __read(React.useState(false), 2), showHover = _e[0], setShowHover = _e[1]; + if (!text) { + return jsxRuntime.jsx("span", {}, void 0); + } + if (text.length > maxCharacters) { + return (jsxRuntime.jsx(Tooltip, __assign({ text: text, show: showHover }, { children: jsxRuntime.jsx(TextWrapper, __assign({ onMouseEnter: function () { return setShowHover(true); }, onMouseLeave: function () { return setShowHover(false); }, margin: margin, adjustSize: adjustSize, textColor: textColor, link: link, fontSize: fontSize }, rest, { children: ' ' + text.slice(0, maxCharacters - 1) + '...' }), void 0) }), void 0)); + } + return (jsxRuntime.jsx(TextWrapper, __assign({ margin: margin, adjustSize: adjustSize, link: link, fontSize: fontSize, textColor: textColor }, rest, { children: text }), void 0)); +}; +var templateObject_1$g; + +function FiatValue(_a) { + var fiatValue = _a.fiatValue, priceImpact = _a.priceImpact; + var theme = useTheme(); + var priceImpactColor = React.useMemo(function () { + if (!priceImpact) + return undefined; + if (priceImpact.lessThan('0')) + return theme.green1; + var severity = warningSeverity(priceImpact); + if (severity < 1) + return theme.text3; + if (severity < 3) + return theme.yellow1; + return theme.red1; + }, [priceImpact, theme.green1, theme.red1, theme.text3, theme.yellow1]); + return (jsxRuntime.jsxs(ThemedText.Body, __assign({ fontSize: 14, color: fiatValue ? theme.text3 : theme.text4 }, { children: [fiatValue ? (jsxRuntime.jsxs(macro.Trans, { children: ["$", jsxRuntime.jsx(HoverInlineText, { text: fiatValue === null || fiatValue === void 0 ? void 0 : fiatValue.toSignificant(6, { groupSeparator: ',' }), textColor: fiatValue ? theme.text3 : theme.text4 }, void 0)] }, void 0)) : (''), priceImpact ? (jsxRuntime.jsxs("span", __assign({ style: { color: priceImpactColor } }, { children: [' ', jsxRuntime.jsxs(MouseoverTooltip, __assign({ text: macro.t(templateObject_1$f || (templateObject_1$f = __makeTemplateObject(["The estimated difference between the USD values of input and output amounts."], ["The estimated difference between the USD values of input and output amounts."]))) }, { children: ["(", jsxRuntime.jsxs(macro.Trans, { children: [priceImpact.multiply(-1).toSignificant(3), "%"] }, void 0), ")"] }), void 0)] }), void 0)) : null] }), void 0)); +} +var templateObject_1$f; + +var InputPanel = styled__default["default"].div(templateObject_1$e || (templateObject_1$e = __makeTemplateObject(["\n ", "\n position: relative;\n border-radius: ", ";\n background-color: ", ";\n z-index: 1;\n width: ", ";\n transition: height 1s ease;\n will-change: height;\n"], ["\n ", "\n position: relative;\n border-radius: ", ";\n background-color: ", ";\n z-index: 1;\n width: ", ";\n transition: height 1s ease;\n will-change: height;\n"])), function (_a) { + var theme = _a.theme; + return theme.flexColumnNoWrap; +}, function (_a) { + var hideInput = _a.hideInput; + return (hideInput ? '16px' : '20px'); +}, function (_a) { + var theme = _a.theme, hideInput = _a.hideInput; + return (hideInput ? 'transparent' : theme.bg2); +}, function (_a) { + var hideInput = _a.hideInput; + return (hideInput ? '100%' : 'initial'); +}); +var FixedContainer = styled__default["default"].div(templateObject_2$7 || (templateObject_2$7 = __makeTemplateObject(["\n width: 100%;\n height: 100%;\n position: absolute;\n border-radius: 20px;\n background-color: ", ";\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 2;\n"], ["\n width: 100%;\n height: 100%;\n position: absolute;\n border-radius: 20px;\n background-color: ", ";\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 2;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}); +var Container$1 = styled__default["default"].div(templateObject_3$5 || (templateObject_3$5 = __makeTemplateObject(["\n border-radius: ", ";\n border: 1px solid ", ";\n background-color: ", ";\n width: ", ";\n :focus,\n :hover {\n border: 1px solid ", ";\n }\n"], ["\n border-radius: ", ";\n border: 1px solid ", ";\n background-color: ", ";\n width: ", ";\n :focus,\n :hover {\n border: 1px solid ", ";\n }\n"])), function (_a) { + var hideInput = _a.hideInput; + return (hideInput ? '16px' : '20px'); +}, function (_a) { + var theme = _a.theme; + return theme.bg0; +}, function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var hideInput = _a.hideInput; + return (hideInput ? '100%' : 'initial'); +}, function (_a) { + var theme = _a.theme, hideInput = _a.hideInput; + return (hideInput ? ' transparent' : theme.bg3); +}); +var CurrencySelect = styled__default["default"](ButtonGray)(templateObject_4$4 || (templateObject_4$4 = __makeTemplateObject(["\n align-items: center;\n background-color: ", ";\n box-shadow: ", ";\n box-shadow: 0px 6px 10px rgba(0, 0, 0, 0.075);\n color: ", ";\n cursor: pointer;\n border-radius: 16px;\n outline: none;\n user-select: none;\n border: none;\n font-size: 24px;\n font-weight: 500;\n height: ", ";\n width: ", ";\n padding: 0 8px;\n justify-content: space-between;\n margin-left: ", ";\n :focus,\n :hover {\n background-color: ", ";\n }\n visibility: ", ";\n"], ["\n align-items: center;\n background-color: ", ";\n box-shadow: ", ";\n box-shadow: 0px 6px 10px rgba(0, 0, 0, 0.075);\n color: ", ";\n cursor: pointer;\n border-radius: 16px;\n outline: none;\n user-select: none;\n border: none;\n font-size: 24px;\n font-weight: 500;\n height: ", ";\n width: ", ";\n padding: 0 8px;\n justify-content: space-between;\n margin-left: ", ";\n :focus,\n :hover {\n background-color: ", ";\n }\n visibility: ", ";\n"])), function (_a) { + var selected = _a.selected, theme = _a.theme; + return (selected ? theme.bg2 : theme.primary1); +}, function (_a) { + var selected = _a.selected; + return (selected ? 'none' : '0px 6px 10px rgba(0, 0, 0, 0.075)'); +}, function (_a) { + var selected = _a.selected, theme = _a.theme; + return (selected ? theme.text1 : theme.white); +}, function (_a) { + var hideInput = _a.hideInput; + return (hideInput ? '2.8rem' : '2.4rem'); +}, function (_a) { + var hideInput = _a.hideInput; + return (hideInput ? '100%' : 'initial'); +}, function (_a) { + var hideInput = _a.hideInput; + return (hideInput ? '0' : '12px'); +}, function (_a) { + var selected = _a.selected, theme = _a.theme; + return (selected ? theme.bg3 : polished.darken(0.05, theme.primary1)); +}, function (_a) { + var visible = _a.visible; + return (visible ? 'visible' : 'hidden'); +}); +var InputRow = styled__default["default"].div(templateObject_5$4 || (templateObject_5$4 = __makeTemplateObject(["\n ", "\n align-items: center;\n justify-content: space-between;\n padding: ", ";\n"], ["\n ", "\n align-items: center;\n justify-content: space-between;\n padding: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.flexRowNoWrap; +}, function (_a) { + var selected = _a.selected; + return (selected ? ' 1rem 1rem 0.75rem 1rem' : '1rem 1rem 1rem 1rem'); +}); +var LabelRow = styled__default["default"].div(templateObject_6$2 || (templateObject_6$2 = __makeTemplateObject(["\n ", "\n align-items: center;\n color: ", ";\n font-size: 0.75rem;\n line-height: 1rem;\n padding: 0 1rem 1rem;\n span:hover {\n cursor: pointer;\n color: ", ";\n }\n"], ["\n ", "\n align-items: center;\n color: ", ";\n font-size: 0.75rem;\n line-height: 1rem;\n padding: 0 1rem 1rem;\n span:hover {\n cursor: pointer;\n color: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.flexRowNoWrap; +}, function (_a) { + var theme = _a.theme; + return theme.text1; +}, function (_a) { + var theme = _a.theme; + return polished.darken(0.2, theme.text2); +}); +var FiatRow = styled__default["default"](LabelRow)(templateObject_7$2 || (templateObject_7$2 = __makeTemplateObject(["\n justify-content: flex-end;\n"], ["\n justify-content: flex-end;\n"]))); +var Aligner = styled__default["default"].span(templateObject_8$1 || (templateObject_8$1 = __makeTemplateObject(["\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n"], ["\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n"]))); +var StyledDropDown = styled__default["default"](SvgDropdown)(templateObject_9$1 || (templateObject_9$1 = __makeTemplateObject(["\n margin: 0 0.25rem 0 0.35rem;\n height: 35%;\n\n path {\n stroke: ", ";\n stroke-width: 1.5px;\n }\n"], ["\n margin: 0 0.25rem 0 0.35rem;\n height: 35%;\n\n path {\n stroke: ", ";\n stroke-width: 1.5px;\n }\n"])), function (_a) { + var selected = _a.selected, theme = _a.theme; + return (selected ? theme.text1 : theme.white); +}); +var StyledTokenName = styled__default["default"].span(templateObject_10$1 || (templateObject_10$1 = __makeTemplateObject(["\n ", "\n font-size: ", ";\n"], ["\n ", "\n font-size: ", ";\n"])), function (_a) { + var active = _a.active; + return (active ? ' margin: 0 0.25rem 0 0.25rem;' : ' margin: 0 0.25rem 0 0.25rem;'); +}, function (_a) { + var active = _a.active; + return (active ? '18px' : '18px'); +}); +var StyledBalanceMax = styled__default["default"].button(templateObject_11$1 || (templateObject_11$1 = __makeTemplateObject(["\n background-color: transparent;\n background-color: ", ";\n border: none;\n border-radius: 12px;\n color: ", ";\n cursor: pointer;\n font-size: 11px;\n font-weight: 500;\n margin-left: 0.25rem;\n opacity: ", ";\n padding: 4px 6px;\n pointer-events: ", ";\n\n :hover {\n opacity: ", ";\n }\n\n :focus {\n outline: none;\n }\n"], ["\n background-color: transparent;\n background-color: ", ";\n border: none;\n border-radius: 12px;\n color: ", ";\n cursor: pointer;\n font-size: 11px;\n font-weight: 500;\n margin-left: 0.25rem;\n opacity: ", ";\n padding: 4px 6px;\n pointer-events: ", ";\n\n :hover {\n opacity: ", ";\n }\n\n :focus {\n outline: none;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.primary5; +}, function (_a) { + var theme = _a.theme; + return theme.primary1; +}, function (_a) { + var disabled = _a.disabled; + return (!disabled ? 1 : 0.4); +}, function (_a) { + var disabled = _a.disabled; + return (!disabled ? 'initial' : 'none'); +}, function (_a) { + var disabled = _a.disabled; + return (!disabled ? 0.8 : 0.4); +}); +var StyledNumericalInput = styled__default["default"](Input$1)(templateObject_12$1 || (templateObject_12$1 = __makeTemplateObject(["\n ", ";\n text-align: left;\n"], ["\n ", ";\n text-align: left;\n"])), loadingOpacityMixin); +function CurrencyInputPanel(_a) { + var value = _a.value, onUserInput = _a.onUserInput, onMax = _a.onMax, showMaxButton = _a.showMaxButton, onCurrencySelect = _a.onCurrencySelect, currency = _a.currency, otherCurrency = _a.otherCurrency, id = _a.id, showCommonBases = _a.showCommonBases, showCurrencyAmount = _a.showCurrencyAmount, disableNonToken = _a.disableNonToken, renderBalance = _a.renderBalance, fiatValue = _a.fiatValue, priceImpact = _a.priceImpact, _b = _a.hideBalance, hideBalance = _b === void 0 ? false : _b, _c = _a.pair, pair = _c === void 0 ? null : _c, // used for double token logo + _d = _a.hideInput, // used for double token logo + hideInput = _d === void 0 ? false : _d, _e = _a.locked, locked = _e === void 0 ? false : _e, _f = _a.loading, loading = _f === void 0 ? false : _f, rest = __rest(_a, ["value", "onUserInput", "onMax", "showMaxButton", "onCurrencySelect", "currency", "otherCurrency", "id", "showCommonBases", "showCurrencyAmount", "disableNonToken", "renderBalance", "fiatValue", "priceImpact", "hideBalance", "pair", "hideInput", "locked", "loading"]); + var _g = __read(React.useState(false), 2), modalOpen = _g[0], setModalOpen = _g[1]; + var account = useActiveWeb3React().account; + var selectedCurrencyBalance = useCurrencyBalance(account !== null && account !== void 0 ? account : undefined, currency !== null && currency !== void 0 ? currency : undefined); + var theme = useTheme(); + var handleDismissSearch = React.useCallback(function () { + setModalOpen(false); + }, [setModalOpen]); + return (jsxRuntime.jsxs(InputPanel, __assign({ id: id, hideInput: hideInput }, rest, { children: [locked && (jsxRuntime.jsx(FixedContainer, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "sm", justify: "center" }, { children: [jsxRuntime.jsx(reactFeather.Lock, {}, void 0), jsxRuntime.jsx(ThemedText.Label, __assign({ fontSize: "12px", textAlign: "center", padding: "0 12px" }, { children: jsxRuntime.jsx(macro.Trans, { children: "The market price is outside your specified price range. Single-asset deposit only." }, void 0) }), void 0)] }), void 0) }, void 0)), jsxRuntime.jsxs(Container$1, __assign({ hideInput: hideInput }, { children: [jsxRuntime.jsxs(InputRow, __assign({ style: hideInput ? { padding: '0', borderRadius: '8px' } : {}, selected: !onCurrencySelect }, { children: [!hideInput && (jsxRuntime.jsx(StyledNumericalInput, { className: "token-amount-input", value: value, onUserInput: onUserInput, "$loading": loading }, void 0)), jsxRuntime.jsx(CurrencySelect, __assign({ visible: currency !== undefined, selected: !!currency, hideInput: hideInput, className: "open-currency-select-button", onClick: function () { + if (onCurrencySelect) { + setModalOpen(true); + } + } }, { children: jsxRuntime.jsxs(Aligner, { children: [jsxRuntime.jsxs(RowFixed, { children: [pair ? (jsxRuntime.jsx("span", __assign({ style: { marginRight: '0.5rem' } }, { children: jsxRuntime.jsx(DoubleCurrencyLogo, { currency0: pair.token0, currency1: pair.token1, size: 24, margin: true }, void 0) }), void 0)) : currency ? (jsxRuntime.jsx(CurrencyLogo, { style: { marginRight: '0.5rem' }, currency: currency, size: '24px' }, void 0)) : null, pair ? (jsxRuntime.jsxs(StyledTokenName, __assign({ className: "pair-name-container" }, { children: [pair === null || pair === void 0 ? void 0 : pair.token0.symbol, ":", pair === null || pair === void 0 ? void 0 : pair.token1.symbol] }), void 0)) : (jsxRuntime.jsx(StyledTokenName, __assign({ className: "token-symbol-container", active: Boolean(currency && currency.symbol) }, { children: (currency && currency.symbol && currency.symbol.length > 20 + ? currency.symbol.slice(0, 4) + + '...' + + currency.symbol.slice(currency.symbol.length - 5, currency.symbol.length) + : currency === null || currency === void 0 ? void 0 : currency.symbol) || jsxRuntime.jsx(macro.Trans, { children: "Select a token" }, void 0) }), void 0))] }, void 0), onCurrencySelect && jsxRuntime.jsx(StyledDropDown, { selected: !!currency }, void 0)] }, void 0) }), void 0)] }), void 0), !hideInput && !hideBalance && currency && (jsxRuntime.jsx(FiatRow, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(LoadingOpacityContainer, __assign({ "$loading": loading }, { children: jsxRuntime.jsx(FiatValue, { fiatValue: fiatValue, priceImpact: priceImpact }, void 0) }), void 0), account ? (jsxRuntime.jsxs(RowFixed, __assign({ style: { height: '17px' } }, { children: [jsxRuntime.jsx(ThemedText.Body, __assign({ onClick: onMax, color: theme.text3, fontWeight: 500, fontSize: 14, style: { display: 'inline', cursor: 'pointer' } }, { children: !hideBalance && currency && selectedCurrencyBalance ? (renderBalance ? (renderBalance(selectedCurrencyBalance)) : (jsxRuntime.jsxs(macro.Trans, { children: ["Balance: ", formatCurrencyAmount(selectedCurrencyBalance, 4)] }, void 0))) : null }), void 0), showMaxButton && selectedCurrencyBalance ? (jsxRuntime.jsx(StyledBalanceMax, __assign({ onClick: onMax }, { children: jsxRuntime.jsx(macro.Trans, { children: "MAX" }, void 0) }), void 0)) : null] }), void 0)) : (jsxRuntime.jsx("span", {}, void 0))] }, void 0) }, void 0))] }), void 0), onCurrencySelect && (jsxRuntime.jsx(CurrencySearchModal, { isOpen: modalOpen, onDismiss: handleDismissSearch, onCurrencySelect: onCurrencySelect, selectedCurrency: currency, otherSelectedCurrency: otherCurrency, showCommonBases: showCommonBases, showCurrencyAmount: showCurrencyAmount, disableNonToken: disableNonToken }, void 0))] }), void 0)); +} +var templateObject_1$e, templateObject_2$7, templateObject_3$5, templateObject_4$4, templateObject_5$4, templateObject_6$2, templateObject_7$2, templateObject_8$1, templateObject_9$1, templateObject_10$1, templateObject_11$1, templateObject_12$1; + +/** + * Given the price impact, get user confirmation. + * + * @param priceImpactWithoutFee price impact of the trade without the fee. + */ +function confirmPriceImpactWithoutFee(priceImpactWithoutFee) { + if (!priceImpactWithoutFee.lessThan(PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN)) { + return (window.prompt("This swap has a price impact of at least " + PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN.toFixed(0) + "%. Please type the word \"confirm\" to continue with this swap.") === 'confirm'); + } + else if (!priceImpactWithoutFee.lessThan(ALLOWED_PRICE_IMPACT_HIGH)) { + return window.confirm("This swap has a price impact of at least " + ALLOWED_PRICE_IMPACT_HIGH.toFixed(0) + "%. Please confirm that you would like to continue with this swap."); + } + return true; +} + +/** + * Returns true if the trade requires a confirmation of details before we can submit it + * @param args either a pair of V2 trades or a pair of V3 trades + */ +function tradeMeaningfullyDiffers() { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var _a = __read(args, 2), tradeA = _a[0], tradeB = _a[1]; + return (tradeA.tradeType !== tradeB.tradeType || + !tradeA.inputAmount.currency.equals(tradeB.inputAmount.currency) || + !tradeA.inputAmount.equalTo(tradeB.inputAmount) || + !tradeA.outputAmount.currency.equals(tradeB.outputAmount.currency) || + !tradeA.outputAmount.equalTo(tradeB.outputAmount)); +} + +function useAddTokenToMetamask(currencyToAdd) { + var library = useActiveWeb3React().library; + var token = currencyToAdd === null || currencyToAdd === void 0 ? void 0 : currencyToAdd.wrapped; + var _a = __read(React.useState(), 2), success = _a[0], setSuccess = _a[1]; + var logoURL = useCurrencyLogoURIs(token)[0]; + var addToken = React.useCallback(function () { + if (library && library.provider.isMetaMask && library.provider.request && token) { + library.provider + .request({ + method: 'wallet_watchAsset', + params: { + //@ts-ignore // need this for incorrect ethers provider type + type: 'ERC20', + options: { + address: token.address, + symbol: token.symbol, + decimals: token.decimals, + image: logoURL, + }, + }, + }) + .then(function (success) { + setSuccess(success); + }) + .catch(function () { return setSuccess(false); }); + } + else { + setSuccess(false); + } + }, [library, logoURL, token]); + return { addToken: addToken, success: success }; +} + +var Circle$1 = "data:image/svg+xml,%3Csvg%20width%3D%2294%22%20height%3D%2294%22%20viewBox%3D%220%200%2094%2094%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%20%20%3Cpath%20d%3D%22M92%2047C92%2022.1472%2071.8528%202%2047%202C22.1472%202%202%2022.1472%202%2047C2%2071.8528%2022.1472%2092%2047%2092%22%20stroke%3D%22%232172E5%22%20stroke-width%3D%223%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E"; + +var MetaMaskLogo = "f89237c6bc3f84db.png"; + +var VoteOption; +(function (VoteOption) { + VoteOption[VoteOption["Against"] = 0] = "Against"; + VoteOption[VoteOption["For"] = 1] = "For"; + VoteOption[VoteOption["Abstain"] = 2] = "Abstain"; +})(VoteOption || (VoteOption = {})); + +function formatAmount(amountRaw, decimals, sigFigs) { + return new sdkCore.Fraction(amountRaw, JSBI__default["default"].exponentiate(JSBI__default["default"].BigInt(10), JSBI__default["default"].BigInt(decimals))).toSignificant(sigFigs); +} +function FormattedCurrencyAmount(_a) { + var rawAmount = _a.rawAmount, symbol = _a.symbol, decimals = _a.decimals, sigFigs = _a.sigFigs; + return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [formatAmount(rawAmount, decimals, sigFigs), " ", symbol] }, void 0)); +} +function FormattedCurrencyAmountManaged(_a) { + var _b; + var rawAmount = _a.rawAmount, currencyId = _a.currencyId, _c = _a.sigFigs, sigFigs = _c === void 0 ? 6 : _c; + var currency = useCurrency(currencyId); + return currency ? (jsxRuntime.jsx(FormattedCurrencyAmount, { rawAmount: rawAmount, decimals: currency.decimals, sigFigs: sigFigs, symbol: (_b = currency.symbol) !== null && _b !== void 0 ? _b : '???' }, void 0)) : null; +} +function ClaimSummary(_a) { + var _b = _a.info, recipient = _b.recipient, uniAmountRaw = _b.uniAmountRaw; + var ENSName = useENSName().ENSName; + return typeof uniAmountRaw === 'string' ? (jsxRuntime.jsxs(macro.Trans, { children: ["Claim ", jsxRuntime.jsx(FormattedCurrencyAmount, { rawAmount: uniAmountRaw, symbol: 'UNI', decimals: 18, sigFigs: 4 }, void 0), " for", ' ', ENSName !== null && ENSName !== void 0 ? ENSName : recipient] }, void 0)) : (jsxRuntime.jsxs(macro.Trans, { children: ["Claim UNI reward for ", ENSName !== null && ENSName !== void 0 ? ENSName : recipient] }, void 0)); +} +function SubmitProposalTransactionSummary(_) { + return jsxRuntime.jsx(macro.Trans, { children: "Submit new proposal" }, void 0); +} +function ApprovalSummary(_a) { + var info = _a.info; + var token = useToken(info.tokenAddress); + return jsxRuntime.jsxs(macro.Trans, { children: ["Approve ", token === null || token === void 0 ? void 0 : token.symbol] }, void 0); +} +function VoteSummary(_a) { + var info = _a.info; + var proposalKey = info.governorAddress + "/" + info.proposalId; + if (info.reason && info.reason.trim().length > 0) { + switch (info.decision) { + case VoteOption.For: + return jsxRuntime.jsxs(macro.Trans, { children: ["Vote for proposal ", proposalKey] }, void 0); + case VoteOption.Abstain: + return jsxRuntime.jsxs(macro.Trans, { children: ["Vote to abstain on proposal ", proposalKey] }, void 0); + case VoteOption.Against: + return jsxRuntime.jsxs(macro.Trans, { children: ["Vote against proposal ", proposalKey] }, void 0); + } + } + else { + switch (info.decision) { + case VoteOption.For: + return (jsxRuntime.jsxs(macro.Trans, { children: ["Vote for proposal ", proposalKey, " with reason \"", info.reason, "\""] }, void 0)); + case VoteOption.Abstain: + return (jsxRuntime.jsxs(macro.Trans, { children: ["Vote to abstain on proposal ", proposalKey, " with reason \"", info.reason, "\""] }, void 0)); + case VoteOption.Against: + return (jsxRuntime.jsxs(macro.Trans, { children: ["Vote against proposal ", proposalKey, " with reason \"", info.reason, "\""] }, void 0)); + } + } +} +function DelegateSummary(_a) { + var delegatee = _a.info.delegatee; + var ENSName = useENSName(delegatee).ENSName; + return jsxRuntime.jsxs(macro.Trans, { children: ["Delegate voting power to ", ENSName !== null && ENSName !== void 0 ? ENSName : delegatee] }, void 0); +} +function WrapSummary(_a) { + var _b, _c, _d, _e, _f, _g; + var _h = _a.info, chainId = _h.chainId, currencyAmountRaw = _h.currencyAmountRaw, unwrapped = _h.unwrapped; + var native = chainId ? nativeOnChain(chainId) : undefined; + if (unwrapped) { + return (jsxRuntime.jsxs(macro.Trans, { children: ["Unwrap", ' ', jsxRuntime.jsx(FormattedCurrencyAmount, { rawAmount: currencyAmountRaw, symbol: (_c = (_b = native === null || native === void 0 ? void 0 : native.wrapped) === null || _b === void 0 ? void 0 : _b.symbol) !== null && _c !== void 0 ? _c : 'WETH', decimals: 18, sigFigs: 6 }, void 0), ' ', "to ", (_d = native === null || native === void 0 ? void 0 : native.symbol) !== null && _d !== void 0 ? _d : 'ETH'] }, void 0)); + } + else { + return (jsxRuntime.jsxs(macro.Trans, { children: ["Wrap", ' ', jsxRuntime.jsx(FormattedCurrencyAmount, { rawAmount: currencyAmountRaw, symbol: (_e = native === null || native === void 0 ? void 0 : native.symbol) !== null && _e !== void 0 ? _e : 'ETH', decimals: 18, sigFigs: 6 }, void 0), ' ', "to ", (_g = (_f = native === null || native === void 0 ? void 0 : native.wrapped) === null || _f === void 0 ? void 0 : _f.symbol) !== null && _g !== void 0 ? _g : 'WETH'] }, void 0)); + } +} +function DepositLiquidityStakingSummary(_) { + // not worth rendering the tokens since you can should no longer deposit liquidity in the staking contracts + // todo: deprecate and delete the code paths that allow this, show user more information + return jsxRuntime.jsx(macro.Trans, { children: "Deposit liquidity" }, void 0); +} +function WithdrawLiquidityStakingSummary(_) { + return jsxRuntime.jsx(macro.Trans, { children: "Withdraw deposited liquidity" }, void 0); +} +function MigrateLiquidityToV3Summary(_a) { + var _b = _a.info, baseCurrencyId = _b.baseCurrencyId, quoteCurrencyId = _b.quoteCurrencyId; + var baseCurrency = useCurrency(baseCurrencyId); + var quoteCurrency = useCurrency(quoteCurrencyId); + return (jsxRuntime.jsxs(macro.Trans, { children: ["Migrate ", baseCurrency === null || baseCurrency === void 0 ? void 0 : baseCurrency.symbol, "/", quoteCurrency === null || quoteCurrency === void 0 ? void 0 : quoteCurrency.symbol, " liquidity to V3"] }, void 0)); +} +function CreateV3PoolSummary(_a) { + var _b = _a.info, quoteCurrencyId = _b.quoteCurrencyId, baseCurrencyId = _b.baseCurrencyId; + var baseCurrency = useCurrency(baseCurrencyId); + var quoteCurrency = useCurrency(quoteCurrencyId); + return (jsxRuntime.jsxs(macro.Trans, { children: ["Create ", baseCurrency === null || baseCurrency === void 0 ? void 0 : baseCurrency.symbol, "/", quoteCurrency === null || quoteCurrency === void 0 ? void 0 : quoteCurrency.symbol, " V3 pool"] }, void 0)); +} +function CollectFeesSummary(_a) { + var _b = _a.info, currencyId0 = _b.currencyId0, currencyId1 = _b.currencyId1; + var currency0 = useCurrency(currencyId0); + var currency1 = useCurrency(currencyId1); + return (jsxRuntime.jsxs(macro.Trans, { children: ["Collect ", currency0 === null || currency0 === void 0 ? void 0 : currency0.symbol, "/", currency1 === null || currency1 === void 0 ? void 0 : currency1.symbol, " fees"] }, void 0)); +} +function RemoveLiquidityV3Summary(_a) { + var _b = _a.info, baseCurrencyId = _b.baseCurrencyId, quoteCurrencyId = _b.quoteCurrencyId, expectedAmountBaseRaw = _b.expectedAmountBaseRaw, expectedAmountQuoteRaw = _b.expectedAmountQuoteRaw; + return (jsxRuntime.jsxs(macro.Trans, { children: ["Remove", ' ', jsxRuntime.jsx(FormattedCurrencyAmountManaged, { rawAmount: expectedAmountBaseRaw, currencyId: baseCurrencyId, sigFigs: 3 }, void 0), " and", ' ', jsxRuntime.jsx(FormattedCurrencyAmountManaged, { rawAmount: expectedAmountQuoteRaw, currencyId: quoteCurrencyId, sigFigs: 3 }, void 0)] }, void 0)); +} +function AddLiquidityV3PoolSummary(_a) { + var _b = _a.info, createPool = _b.createPool, quoteCurrencyId = _b.quoteCurrencyId, baseCurrencyId = _b.baseCurrencyId; + var baseCurrency = useCurrency(baseCurrencyId); + var quoteCurrency = useCurrency(quoteCurrencyId); + return createPool ? (jsxRuntime.jsxs(macro.Trans, { children: ["Create pool and add ", baseCurrency === null || baseCurrency === void 0 ? void 0 : baseCurrency.symbol, "/", quoteCurrency === null || quoteCurrency === void 0 ? void 0 : quoteCurrency.symbol, " V3 liquidity"] }, void 0)) : (jsxRuntime.jsxs(macro.Trans, { children: ["Add ", baseCurrency === null || baseCurrency === void 0 ? void 0 : baseCurrency.symbol, "/", quoteCurrency === null || quoteCurrency === void 0 ? void 0 : quoteCurrency.symbol, " V3 liquidity"] }, void 0)); +} +function AddLiquidityV2PoolSummary(_a) { + var _b = _a.info, quoteCurrencyId = _b.quoteCurrencyId, expectedAmountBaseRaw = _b.expectedAmountBaseRaw, expectedAmountQuoteRaw = _b.expectedAmountQuoteRaw, baseCurrencyId = _b.baseCurrencyId; + return (jsxRuntime.jsxs(macro.Trans, { children: ["Add ", jsxRuntime.jsx(FormattedCurrencyAmountManaged, { rawAmount: expectedAmountBaseRaw, currencyId: baseCurrencyId, sigFigs: 3 }, void 0), ' ', "and ", jsxRuntime.jsx(FormattedCurrencyAmountManaged, { rawAmount: expectedAmountQuoteRaw, currencyId: quoteCurrencyId, sigFigs: 3 }, void 0), ' ', "to Uniswap V2"] }, void 0)); +} +function SwapSummary(_a) { + var info = _a.info; + if (info.tradeType === sdkCore.TradeType.EXACT_INPUT) { + return (jsxRuntime.jsxs(macro.Trans, { children: ["Swap exactly", ' ', jsxRuntime.jsx(FormattedCurrencyAmountManaged, { rawAmount: info.inputCurrencyAmountRaw, currencyId: info.inputCurrencyId, sigFigs: 6 }, void 0), ' ', "for", ' ', jsxRuntime.jsx(FormattedCurrencyAmountManaged, { rawAmount: info.expectedOutputCurrencyAmountRaw, currencyId: info.outputCurrencyId, sigFigs: 6 }, void 0)] }, void 0)); + } + else { + return (jsxRuntime.jsxs(macro.Trans, { children: ["Swap", ' ', jsxRuntime.jsx(FormattedCurrencyAmountManaged, { rawAmount: info.expectedInputCurrencyAmountRaw, currencyId: info.inputCurrencyId, sigFigs: 6 }, void 0), ' ', "for exactly", ' ', jsxRuntime.jsx(FormattedCurrencyAmountManaged, { rawAmount: info.outputCurrencyAmountRaw, currencyId: info.outputCurrencyId, sigFigs: 6 }, void 0)] }, void 0)); + } +} +function TransactionSummary(_a) { + var info = _a.info; + switch (info.type) { + case TransactionType.ADD_LIQUIDITY_V3_POOL: + return jsxRuntime.jsx(AddLiquidityV3PoolSummary, { info: info }, void 0); + case TransactionType.ADD_LIQUIDITY_V2_POOL: + return jsxRuntime.jsx(AddLiquidityV2PoolSummary, { info: info }, void 0); + case TransactionType.CLAIM: + return jsxRuntime.jsx(ClaimSummary, { info: info }, void 0); + case TransactionType.DEPOSIT_LIQUIDITY_STAKING: + return jsxRuntime.jsx(DepositLiquidityStakingSummary, { info: info }, void 0); + case TransactionType.WITHDRAW_LIQUIDITY_STAKING: + return jsxRuntime.jsx(WithdrawLiquidityStakingSummary, { info: info }, void 0); + case TransactionType.SWAP: + return jsxRuntime.jsx(SwapSummary, { info: info }, void 0); + case TransactionType.APPROVAL: + return jsxRuntime.jsx(ApprovalSummary, { info: info }, void 0); + case TransactionType.VOTE: + return jsxRuntime.jsx(VoteSummary, { info: info }, void 0); + case TransactionType.DELEGATE: + return jsxRuntime.jsx(DelegateSummary, { info: info }, void 0); + case TransactionType.WRAP: + return jsxRuntime.jsx(WrapSummary, { info: info }, void 0); + case TransactionType.CREATE_V3_POOL: + return jsxRuntime.jsx(CreateV3PoolSummary, { info: info }, void 0); + case TransactionType.MIGRATE_LIQUIDITY_V3: + return jsxRuntime.jsx(MigrateLiquidityToV3Summary, { info: info }, void 0); + case TransactionType.COLLECT_FEES: + return jsxRuntime.jsx(CollectFeesSummary, { info: info }, void 0); + case TransactionType.REMOVE_LIQUIDITY_V3: + return jsxRuntime.jsx(RemoveLiquidityV3Summary, { info: info }, void 0); + case TransactionType.SUBMIT_PROPOSAL: + return jsxRuntime.jsx(SubmitProposalTransactionSummary, { info: info }, void 0); + } +} + +var Wrapper$1 = styled__default["default"].div(templateObject_1$d || (templateObject_1$d = __makeTemplateObject(["\n height: 90px;\n width: 90px;\n"], ["\n height: 90px;\n width: 90px;\n"]))); +var dash = styled.keyframes(templateObject_2$6 || (templateObject_2$6 = __makeTemplateObject(["\n 0% {\n stroke-dashoffset: 1000;\n }\n 100% {\n stroke-dashoffset: 0;\n }\n"], ["\n 0% {\n stroke-dashoffset: 1000;\n }\n 100% {\n stroke-dashoffset: 0;\n }\n"]))); +var dashCheck = styled.keyframes(templateObject_3$4 || (templateObject_3$4 = __makeTemplateObject(["\n 0% {\n stroke-dashoffset: -100;\n }\n 100% {\n stroke-dashoffset: 900;\n }\n"], ["\n 0% {\n stroke-dashoffset: -100;\n }\n 100% {\n stroke-dashoffset: 900;\n }\n"]))); +var Circle = styled__default["default"].circle(templateObject_4$3 || (templateObject_4$3 = __makeTemplateObject(["\n stroke-dasharray: 1000;\n stroke-dashoffset: 0;\n -webkit-animation: ", " 0.9s ease-in-out;\n animation: ", " 0.9s ease-in-out;\n"], ["\n stroke-dasharray: 1000;\n stroke-dashoffset: 0;\n -webkit-animation: ", " 0.9s ease-in-out;\n animation: ", " 0.9s ease-in-out;\n"])), dash, dash); +var PolyLine = styled__default["default"].polyline(templateObject_5$3 || (templateObject_5$3 = __makeTemplateObject(["\n stroke-dasharray: 1000;\n stroke-dashoffset: 0;\n stroke-dashoffset: -100;\n -webkit-animation: ", " 0.9s 0.35s ease-in-out forwards;\n animation: ", " 0.9s 0.35s ease-in-out forwards;\n"], ["\n stroke-dasharray: 1000;\n stroke-dashoffset: 0;\n stroke-dashoffset: -100;\n -webkit-animation: ", " 0.9s 0.35s ease-in-out forwards;\n animation: ", " 0.9s 0.35s ease-in-out forwards;\n"])), dashCheck, dashCheck); +function AnimatedConfirmation() { + var theme = useTheme(); + return (jsxRuntime.jsx(Wrapper$1, __assign({ className: "w4rAnimated_checkmark" }, { children: jsxRuntime.jsxs("svg", __assign({ version: "1.1", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 130.2 130.2" }, { children: [jsxRuntime.jsx(Circle, { className: "path circle", fill: "none", stroke: theme.green1, strokeWidth: "6", strokeMiterlimit: "10", cx: "65.1", cy: "65.1", r: "62.1" }, void 0), jsxRuntime.jsx(PolyLine, { className: "path check", fill: "none", stroke: theme.green1, strokeWidth: "6", strokeLinecap: "round", strokeMiterlimit: "10", points: "100.2,40.2 51.5,88.8 29.8,67.5 " }, void 0)] }), void 0) }), void 0)); +} +var templateObject_1$d, templateObject_2$6, templateObject_3$4, templateObject_4$3, templateObject_5$3; + +var Wrapper = styled__default["default"].div(templateObject_1$c || (templateObject_1$c = __makeTemplateObject(["\n width: 100%;\n padding: 1rem;\n"], ["\n width: 100%;\n padding: 1rem;\n"]))); +var Section = styled__default["default"](AutoColumn)(templateObject_2$5 || (templateObject_2$5 = __makeTemplateObject(["\n padding: ", ";\n"], ["\n padding: ", ";\n"])), function (_a) { + var inline = _a.inline; + return (inline ? '0' : '0'); +}); +var BottomSection = styled__default["default"](Section)(templateObject_3$3 || (templateObject_3$3 = __makeTemplateObject(["\n border-bottom-left-radius: 20px;\n border-bottom-right-radius: 20px;\n"], ["\n border-bottom-left-radius: 20px;\n border-bottom-right-radius: 20px;\n"]))); +var ConfirmedIcon = styled__default["default"](ColumnCenter)(templateObject_4$2 || (templateObject_4$2 = __makeTemplateObject(["\n padding: ", ";\n"], ["\n padding: ", ";\n"])), function (_a) { + var inline = _a.inline; + return (inline ? '20px 0' : '32px 0;'); +}); +var StyledLogo = styled__default["default"].img(templateObject_5$2 || (templateObject_5$2 = __makeTemplateObject(["\n height: 16px;\n width: 16px;\n margin-left: 6px;\n"], ["\n height: 16px;\n width: 16px;\n margin-left: 6px;\n"]))); +function ConfirmationPendingContent(_a) { + var onDismiss = _a.onDismiss, pendingText = _a.pendingText, inline = _a.inline; + return (jsxRuntime.jsx(Wrapper, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "md" }, { children: [!inline && (jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx("div", {}, void 0), jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0)] }, void 0)), jsxRuntime.jsx(ConfirmedIcon, __assign({ inline: inline }, { children: jsxRuntime.jsx(CustomLightSpinner, { src: Circle$1, alt: "loader", size: inline ? '40px' : '90px' }, void 0) }), void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "12px", justify: 'center' }, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20, textAlign: "center" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Waiting For Confirmation" }, void 0) }), void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 400, fontSize: 16, textAlign: "center" }, { children: pendingText }), void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 14, color: "#565A69", textAlign: "center", marginBottom: "12px" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Confirm this transaction in your wallet" }, void 0) }), void 0)] }), void 0)] }), void 0) }, void 0)); +} +function TransactionSubmittedContent(_a) { + var _b; + var onDismiss = _a.onDismiss, chainId = _a.chainId, hash = _a.hash, currencyToAdd = _a.currencyToAdd, inline = _a.inline; + var theme = React.useContext(styled.ThemeContext); + var library = useActiveWeb3React().library; + var _c = useAddTokenToMetamask(currencyToAdd), addToken = _c.addToken, success = _c.success; + return (jsxRuntime.jsx(Wrapper, { children: jsxRuntime.jsxs(Section, __assign({ inline: inline }, { children: [!inline && (jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx("div", {}, void 0), jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0)] }, void 0)), jsxRuntime.jsx(ConfirmedIcon, __assign({ inline: inline }, { children: jsxRuntime.jsx(reactFeather.ArrowUpCircle, { strokeWidth: 0.5, size: inline ? '40px' : '90px', color: theme.primary1 }, void 0) }), void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "12px", justify: 'center' }, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20, textAlign: "center" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Transaction Submitted" }, void 0) }), void 0), chainId && hash && (jsxRuntime.jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, hash, ExplorerDataType.TRANSACTION) }, { children: jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 14, color: theme.primary1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "View on Explorer" }, void 0) }), void 0) }), void 0)), currencyToAdd && ((_b = library === null || library === void 0 ? void 0 : library.provider) === null || _b === void 0 ? void 0 : _b.isMetaMask) && (jsxRuntime.jsx(ButtonLight, __assign({ mt: "12px", padding: "6px 12px", width: "fit-content", onClick: addToken }, { children: !success ? (jsxRuntime.jsx(RowFixed, { children: jsxRuntime.jsxs(macro.Trans, { children: ["Add ", currencyToAdd.symbol, " to Metamask ", jsxRuntime.jsx(StyledLogo, { src: MetaMaskLogo }, void 0)] }, void 0) }, void 0)) : (jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsxs(macro.Trans, { children: ["Added ", currencyToAdd.symbol, " "] }, void 0), jsxRuntime.jsx(reactFeather.CheckCircle, { size: '16px', stroke: theme.green1, style: { marginLeft: '6px' } }, void 0)] }, void 0)) }), void 0)), jsxRuntime.jsx(ButtonPrimary, __assign({ onClick: onDismiss, style: { margin: '20px 0 0 0' } }, { children: jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20 }, { children: inline ? jsxRuntime.jsx(macro.Trans, { children: "Return" }, void 0) : jsxRuntime.jsx(macro.Trans, { children: "Close" }, void 0) }), void 0) }), void 0)] }), void 0)] }), void 0) }, void 0)); +} +function ConfirmationModalContent(_a) { + var title = _a.title, bottomContent = _a.bottomContent, onDismiss = _a.onDismiss, topContent = _a.topContent; + return (jsxRuntime.jsxs(Wrapper, { children: [jsxRuntime.jsxs(Section, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 16 }, { children: title }), void 0), jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0)] }, void 0), topContent()] }, void 0), bottomContent && jsxRuntime.jsx(BottomSection, __assign({ gap: "12px" }, { children: bottomContent() }), void 0)] }, void 0)); +} +function TransactionErrorContent(_a) { + var message = _a.message, onDismiss = _a.onDismiss; + var theme = React.useContext(styled.ThemeContext); + return (jsxRuntime.jsxs(Wrapper, { children: [jsxRuntime.jsxs(Section, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Error" }, void 0) }), void 0), jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0)] }, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ style: { marginTop: 20, padding: '2rem 0' }, gap: "24px", justify: "center" }, { children: [jsxRuntime.jsx(reactFeather.AlertTriangle, { color: theme.red1, style: { strokeWidth: 1.5 }, size: 64 }, void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 16, color: theme.red1, style: { textAlign: 'center', width: '85%', wordBreak: 'break-word' } }, { children: message }), void 0)] }), void 0)] }, void 0), jsxRuntime.jsx(BottomSection, __assign({ gap: "12px" }, { children: jsxRuntime.jsx(ButtonPrimary, __assign({ onClick: onDismiss }, { children: jsxRuntime.jsx(macro.Trans, { children: "Dismiss" }, void 0) }), void 0) }), void 0)] }, void 0)); +} +function L2Content(_a) { + var _b; + var onDismiss = _a.onDismiss, chainId = _a.chainId, hash = _a.hash, pendingText = _a.pendingText, inline = _a.inline; + var theme = React.useContext(styled.ThemeContext); + var transaction = useTransaction(hash); + var confirmed = useIsTransactionConfirmed(hash); + var transactionSuccess = ((_b = transaction === null || transaction === void 0 ? void 0 : transaction.receipt) === null || _b === void 0 ? void 0 : _b.status) === 1; + // convert unix time difference to seconds + var secondsToConfirm = (transaction === null || transaction === void 0 ? void 0 : transaction.confirmedTime) + ? (transaction.confirmedTime - transaction.addedTime) / 1000 + : undefined; + var info = CHAIN_INFO[chainId]; + return (jsxRuntime.jsx(Wrapper, { children: jsxRuntime.jsxs(Section, __assign({ inline: inline }, { children: [!inline && (jsxRuntime.jsxs(RowBetween, __assign({ mb: "16px" }, { children: [jsxRuntime.jsx(Badge, { children: jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(StyledLogo, { src: info.logoUrl, style: { margin: '0 8px 0 0' } }, void 0), info.label] }, void 0) }, void 0), jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0)] }), void 0)), jsxRuntime.jsx(ConfirmedIcon, __assign({ inline: inline }, { children: confirmed ? (transactionSuccess ? ( + // + jsxRuntime.jsx(AnimatedConfirmation, {}, void 0)) : (jsxRuntime.jsx(reactFeather.AlertCircle, { strokeWidth: 1, size: inline ? '40px' : '90px', color: theme.red1 }, void 0))) : (jsxRuntime.jsx(CustomLightSpinner, { src: Circle$1, alt: "loader", size: inline ? '40px' : '90px' }, void 0)) }), void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "12px", justify: 'center' }, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20, textAlign: "center" }, { children: !hash ? (jsxRuntime.jsx(macro.Trans, { children: "Confirm transaction in wallet" }, void 0)) : !confirmed ? (jsxRuntime.jsx(macro.Trans, { children: "Transaction Submitted" }, void 0)) : transactionSuccess ? (jsxRuntime.jsx(macro.Trans, { children: "Success" }, void 0)) : (jsxRuntime.jsx(macro.Trans, { children: "Error" }, void 0)) }), void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 400, fontSize: 16, textAlign: "center" }, { children: transaction ? jsxRuntime.jsx(TransactionSummary, { info: transaction.info }, void 0) : pendingText }), void 0), chainId && hash ? (jsxRuntime.jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, hash, ExplorerDataType.TRANSACTION) }, { children: jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 14, color: theme.primary1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "View on Explorer" }, void 0) }), void 0) }), void 0)) : (jsxRuntime.jsx("div", { style: { height: '17px' } }, void 0)), jsxRuntime.jsx(rebass.Text, __assign({ color: theme.text3, style: { margin: '20px 0 0 0' }, fontSize: '14px' }, { children: !secondsToConfirm ? (jsxRuntime.jsx("div", { style: { height: '24px' } }, void 0)) : (jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx(macro.Trans, { children: "Transaction completed in " }, void 0), jsxRuntime.jsxs("span", __assign({ style: { fontWeight: 500, marginLeft: '4px', color: theme.text1 } }, { children: [secondsToConfirm, " seconds \uD83C\uDF89"] }), void 0)] }, void 0)) }), void 0), jsxRuntime.jsx(ButtonPrimary, __assign({ onClick: onDismiss, style: { margin: '4px 0 0 0' } }, { children: jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20 }, { children: inline ? jsxRuntime.jsx(macro.Trans, { children: "Return" }, void 0) : jsxRuntime.jsx(macro.Trans, { children: "Close" }, void 0) }), void 0) }), void 0)] }), void 0)] }), void 0) }, void 0)); +} +function TransactionConfirmationModal(_a) { + var isOpen = _a.isOpen, onDismiss = _a.onDismiss, attemptingTxn = _a.attemptingTxn, hash = _a.hash, pendingText = _a.pendingText, content = _a.content, currencyToAdd = _a.currencyToAdd; + var chainId = useActiveWeb3React().chainId; + var isL2 = Boolean(chainId && L2_CHAIN_IDS.includes(chainId)); + if (!chainId) + return null; + // confirmation screen + return (jsxRuntime.jsx(Modal, __assign({ isOpen: isOpen, onDismiss: onDismiss, maxHeight: 90 }, { children: isL2 && (hash || attemptingTxn) ? (jsxRuntime.jsx(L2Content, { chainId: chainId, hash: hash, onDismiss: onDismiss, pendingText: pendingText }, void 0)) : attemptingTxn ? (jsxRuntime.jsx(ConfirmationPendingContent, { onDismiss: onDismiss, pendingText: pendingText }, void 0)) : hash ? (jsxRuntime.jsx(TransactionSubmittedContent, { chainId: chainId, hash: hash, onDismiss: onDismiss, currencyToAdd: currencyToAdd }, void 0)) : (content()) }), void 0)); +} +var templateObject_1$c, templateObject_2$5, templateObject_3$3, templateObject_4$2, templateObject_5$2; + +function SwapModalFooter(_a) { + var onConfirm = _a.onConfirm, swapErrorMessage = _a.swapErrorMessage, disabledConfirm = _a.disabledConfirm; + return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs(AutoRow, { children: [jsxRuntime.jsx(ButtonError, __assign({ onClick: onConfirm, disabled: disabledConfirm, style: { margin: '10px 0 0 0' }, id: "confirm-swap-or-send" }, { children: jsxRuntime.jsx(rebass.Text, __assign({ fontSize: 20, fontWeight: 500 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Confirm Swap" }, void 0) }), void 0) }), void 0), swapErrorMessage ? jsxRuntime.jsx(SwapCallbackError, { error: swapErrorMessage }, void 0) : null] }, void 0) }, void 0)); +} + +function computeFiatValuePriceImpact(fiatValueInput, fiatValueOutput) { + if (!fiatValueOutput || !fiatValueInput) + return undefined; + if (!fiatValueInput.currency.equals(fiatValueOutput.currency)) + return undefined; + if (JSBI__default["default"].equal(fiatValueInput.quotient, JSBI__default["default"].BigInt(0))) + return undefined; + var pct = ONE_HUNDRED_PERCENT.subtract(fiatValueOutput.divide(fiatValueInput)); + return new sdkCore.Percent(pct.numerator, pct.denominator); +} + +var ArrowWrapper = styled__default["default"].div(templateObject_1$b || (templateObject_1$b = __makeTemplateObject(["\n padding: 4px;\n border-radius: 12px;\n height: 32px;\n width: 32px;\n position: relative;\n margin-top: -18px;\n margin-bottom: -18px;\n left: calc(50% - 16px);\n display: flex;\n justify-content: center;\n align-items: center;\n background-color: ", ";\n border: 4px solid;\n border-color: ", ";\n z-index: 2;\n"], ["\n padding: 4px;\n border-radius: 12px;\n height: 32px;\n width: 32px;\n position: relative;\n margin-top: -18px;\n margin-bottom: -18px;\n left: calc(50% - 16px);\n display: flex;\n justify-content: center;\n align-items: center;\n background-color: ", ";\n border: 4px solid;\n border-color: ", ";\n z-index: 2;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var theme = _a.theme; + return theme.bg0; +}); +function SwapModalHeader(_a) { + var trade = _a.trade, allowedSlippage = _a.allowedSlippage, recipient = _a.recipient, showAcceptChanges = _a.showAcceptChanges, onAcceptChanges = _a.onAcceptChanges; + var theme = React.useContext(styled.ThemeContext); + var _b = __read(React.useState(false), 2), showInverted = _b[0], setShowInverted = _b[1]; + var fiatValueInput = useUSDCValue(trade.inputAmount); + var fiatValueOutput = useUSDCValue(trade.outputAmount); + return (jsxRuntime.jsxs(AutoColumn, __assign({ gap: '4px', style: { marginTop: '1rem' } }, { children: [jsxRuntime.jsx(LightCard, __assign({ padding: "0.75rem 1rem" }, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: '8px' }, { children: [jsxRuntime.jsxs(RowBetween, __assign({ align: "center" }, { children: [jsxRuntime.jsx(RowFixed, __assign({ gap: '0px' }, { children: jsxRuntime.jsx(TruncatedText, __assign({ fontSize: 24, fontWeight: 500, color: showAcceptChanges && trade.tradeType === sdkCore.TradeType.EXACT_OUTPUT ? theme.primary1 : '' }, { children: trade.inputAmount.toSignificant(6) }), void 0) }), void 0), jsxRuntime.jsxs(RowFixed, __assign({ gap: '0px' }, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: trade.inputAmount.currency, size: '20px', style: { marginRight: '12px' } }, void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontSize: 20, fontWeight: 500 }, { children: trade.inputAmount.currency.symbol }), void 0)] }), void 0)] }), void 0), jsxRuntime.jsx(RowBetween, { children: jsxRuntime.jsx(FiatValue, { fiatValue: fiatValueInput }, void 0) }, void 0)] }), void 0) }), void 0), jsxRuntime.jsx(ArrowWrapper, { children: jsxRuntime.jsx(reactFeather.ArrowDown, { size: "16", color: theme.text2 }, void 0) }, void 0), jsxRuntime.jsx(LightCard, __assign({ padding: "0.75rem 1rem", style: { marginBottom: '0.25rem' } }, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: '8px' }, { children: [jsxRuntime.jsxs(RowBetween, __assign({ align: "flex-end" }, { children: [jsxRuntime.jsx(RowFixed, __assign({ gap: '0px' }, { children: jsxRuntime.jsx(TruncatedText, __assign({ fontSize: 24, fontWeight: 500 }, { children: trade.outputAmount.toSignificant(6) }), void 0) }), void 0), jsxRuntime.jsxs(RowFixed, __assign({ gap: '0px' }, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: trade.outputAmount.currency, size: '20px', style: { marginRight: '12px' } }, void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontSize: 20, fontWeight: 500 }, { children: trade.outputAmount.currency.symbol }), void 0)] }), void 0)] }), void 0), jsxRuntime.jsx(RowBetween, { children: jsxRuntime.jsx(ThemedText.Body, __assign({ fontSize: 14, color: theme.text3 }, { children: jsxRuntime.jsx(FiatValue, { fiatValue: fiatValueOutput, priceImpact: computeFiatValuePriceImpact(fiatValueInput, fiatValueOutput) }, void 0) }), void 0) }, void 0)] }), void 0) }), void 0), jsxRuntime.jsx(RowBetween, __assign({ style: { marginTop: '0.25rem', padding: '0 1rem' } }, { children: jsxRuntime.jsx(TradePrice, { price: trade.executionPrice, showInverted: showInverted, setShowInverted: setShowInverted }, void 0) }), void 0), jsxRuntime.jsx(LightCard, __assign({ style: { padding: '.75rem', marginTop: '0.5rem' } }, { children: jsxRuntime.jsx(AdvancedSwapDetails, { trade: trade, allowedSlippage: allowedSlippage }, void 0) }), void 0), showAcceptChanges ? (jsxRuntime.jsx(SwapShowAcceptChanges, __assign({ justify: "flex-start", gap: '0px' }, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(reactFeather.AlertTriangle, { size: 20, style: { marginRight: '8px', minWidth: 24 } }, void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ color: theme.primary1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Price Updated" }, void 0) }), void 0)] }, void 0), jsxRuntime.jsx(ButtonPrimary, __assign({ style: { padding: '.5rem', width: 'fit-content', fontSize: '0.825rem', borderRadius: '12px' }, onClick: onAcceptChanges }, { children: jsxRuntime.jsx(macro.Trans, { children: "Accept" }, void 0) }), void 0)] }, void 0) }), void 0)) : null, jsxRuntime.jsx(AutoColumn, __assign({ justify: "flex-start", gap: "sm", style: { padding: '.75rem 1rem' } }, { children: trade.tradeType === sdkCore.TradeType.EXACT_INPUT ? (jsxRuntime.jsx(ThemedText.Italic, __assign({ fontWeight: 400, textAlign: "left", style: { width: '100%' } }, { children: jsxRuntime.jsxs(macro.Trans, { children: ["Output is estimated. You will receive at least", ' ', jsxRuntime.jsxs("b", { children: [trade.minimumAmountOut(allowedSlippage).toSignificant(6), " ", trade.outputAmount.currency.symbol] }, void 0), ' ', "or the transaction will revert."] }, void 0) }), void 0)) : (jsxRuntime.jsx(ThemedText.Italic, __assign({ fontWeight: 400, textAlign: "left", style: { width: '100%' } }, { children: jsxRuntime.jsxs(macro.Trans, { children: ["Input is estimated. You will sell at most", ' ', jsxRuntime.jsxs("b", { children: [trade.maximumAmountIn(allowedSlippage).toSignificant(6), " ", trade.inputAmount.currency.symbol] }, void 0), ' ', "or the transaction will revert."] }, void 0) }), void 0)) }), void 0), recipient !== null ? (jsxRuntime.jsx(AutoColumn, __assign({ justify: "flex-start", gap: "sm", style: { padding: '12px 0 0 0px' } }, { children: jsxRuntime.jsx(ThemedText.Main, { children: jsxRuntime.jsxs(macro.Trans, { children: ["Output will be sent to", ' ', jsxRuntime.jsx("b", __assign({ title: recipient }, { children: isAddress(recipient) ? shortenAddress(recipient) : recipient }), void 0)] }, void 0) }, void 0) }), void 0)) : null] }), void 0)); +} +var templateObject_1$b; + +function ConfirmSwapModal(_a) { + var _b, _c, _d, _e, _f, _g; + var trade = _a.trade, originalTrade = _a.originalTrade, onAcceptChanges = _a.onAcceptChanges, allowedSlippage = _a.allowedSlippage, onConfirm = _a.onConfirm, onDismiss = _a.onDismiss, recipient = _a.recipient, swapErrorMessage = _a.swapErrorMessage, isOpen = _a.isOpen, attemptingTxn = _a.attemptingTxn, txHash = _a.txHash; + var showAcceptChanges = React.useMemo(function () { return Boolean(trade && originalTrade && tradeMeaningfullyDiffers(trade, originalTrade)); }, [originalTrade, trade]); + var modalHeader = React.useCallback(function () { + return trade ? (jsxRuntime.jsx(SwapModalHeader, { trade: trade, allowedSlippage: allowedSlippage, recipient: recipient, showAcceptChanges: showAcceptChanges, onAcceptChanges: onAcceptChanges }, void 0)) : null; + }, [allowedSlippage, onAcceptChanges, recipient, showAcceptChanges, trade]); + var modalBottom = React.useCallback(function () { + return trade ? (jsxRuntime.jsx(SwapModalFooter, { onConfirm: onConfirm, trade: trade, disabledConfirm: showAcceptChanges, swapErrorMessage: swapErrorMessage }, void 0)) : null; + }, [onConfirm, showAcceptChanges, swapErrorMessage, trade]); + // text to show while loading + var pendingText = (jsxRuntime.jsxs(macro.Trans, { children: ["Swapping ", (_b = trade === null || trade === void 0 ? void 0 : trade.inputAmount) === null || _b === void 0 ? void 0 : _b.toSignificant(6), " ", (_d = (_c = trade === null || trade === void 0 ? void 0 : trade.inputAmount) === null || _c === void 0 ? void 0 : _c.currency) === null || _d === void 0 ? void 0 : _d.symbol, " for", ' ', (_e = trade === null || trade === void 0 ? void 0 : trade.outputAmount) === null || _e === void 0 ? void 0 : _e.toSignificant(6), " ", (_g = (_f = trade === null || trade === void 0 ? void 0 : trade.outputAmount) === null || _f === void 0 ? void 0 : _f.currency) === null || _g === void 0 ? void 0 : _g.symbol] }, void 0)); + var confirmationContent = React.useCallback(function () { + return swapErrorMessage ? (jsxRuntime.jsx(TransactionErrorContent, { onDismiss: onDismiss, message: swapErrorMessage }, void 0)) : (jsxRuntime.jsx(ConfirmationModalContent, { title: jsxRuntime.jsx(macro.Trans, { children: "Confirm Swap" }, void 0), onDismiss: onDismiss, topContent: modalHeader, bottomContent: modalBottom }, void 0)); + }, [onDismiss, modalBottom, modalHeader, swapErrorMessage]); + return (jsxRuntime.jsx(TransactionConfirmationModal, { isOpen: isOpen, onDismiss: onDismiss, attemptingTxn: attemptingTxn, hash: txHash, content: confirmationContent, pendingText: pendingText, currencyToAdd: trade === null || trade === void 0 ? void 0 : trade.outputAmount.currency }, void 0)); +} + +var _a$5; +var ApplicationModal; +(function (ApplicationModal) { + ApplicationModal[ApplicationModal["WALLET"] = 0] = "WALLET"; + ApplicationModal[ApplicationModal["SETTINGS"] = 1] = "SETTINGS"; + ApplicationModal[ApplicationModal["SELF_CLAIM"] = 2] = "SELF_CLAIM"; + ApplicationModal[ApplicationModal["ADDRESS_CLAIM"] = 3] = "ADDRESS_CLAIM"; + ApplicationModal[ApplicationModal["CLAIM_POPUP"] = 4] = "CLAIM_POPUP"; + ApplicationModal[ApplicationModal["MENU"] = 5] = "MENU"; + ApplicationModal[ApplicationModal["DELEGATE"] = 6] = "DELEGATE"; + ApplicationModal[ApplicationModal["VOTE"] = 7] = "VOTE"; + ApplicationModal[ApplicationModal["POOL_OVERVIEW_OPTIONS"] = 8] = "POOL_OVERVIEW_OPTIONS"; + ApplicationModal[ApplicationModal["NETWORK_SELECTOR"] = 9] = "NETWORK_SELECTOR"; + ApplicationModal[ApplicationModal["PRIVACY_POLICY"] = 10] = "PRIVACY_POLICY"; +})(ApplicationModal || (ApplicationModal = {})); +var initialState$8 = { + chainId: null, + openModal: null, + popupList: [], +}; +var applicationSlice = toolkit.createSlice({ + name: 'application', + initialState: initialState$8, + reducers: { + updateChainId: function (state, action) { + var chainId = action.payload.chainId; + state.chainId = chainId; + }, + setOpenModal: function (state, action) { + state.openModal = action.payload; + }, + addPopup: function (state, _a) { + var _b = _a.payload, content = _b.content, key = _b.key, _c = _b.removeAfterMs, removeAfterMs = _c === void 0 ? DEFAULT_TXN_DISMISS_MS : _c; + state.popupList = (key ? state.popupList.filter(function (popup) { return popup.key !== key; }) : state.popupList).concat([ + { + key: key || toolkit.nanoid(), + show: true, + content: content, + removeAfterMs: removeAfterMs, + }, + ]); + }, + removePopup: function (state, _a) { + var key = _a.payload.key; + state.popupList.forEach(function (p) { + if (p.key === key) { + p.show = false; + } + }); + }, + }, +}); +(_a$5 = applicationSlice.actions, _a$5.updateChainId); var setOpenModal = _a$5.setOpenModal; _a$5.addPopup; _a$5.removePopup; +var application = applicationSlice.reducer; + +function useModalOpen(modal) { + var openModal = useAppSelector(function (state) { return state.application.openModal; }); + return openModal === modal; +} +function useToggleModal(modal) { + var open = useModalOpen(modal); + var dispatch = useAppDispatch(); + return React.useCallback(function () { return dispatch(setOpenModal(open ? null : modal)); }, [dispatch, modal, open]); +} +function useWalletModalToggle() { + return useToggleModal(ApplicationModal.WALLET); +} +function useToggleSettingsMenu() { + return useToggleModal(ApplicationModal.SETTINGS); +} + +var ToggleElement = styled__default["default"].span(templateObject_1$a || (templateObject_1$a = __makeTemplateObject(["\n padding: 0.25rem 0.6rem;\n border-radius: 9px;\n background: ", ";\n color: ", ";\n font-size: 14px;\n font-weight: ", ";\n :hover {\n user-select: ", ";\n background: ", ";\n color: ", ";\n }\n"], ["\n padding: 0.25rem 0.6rem;\n border-radius: 9px;\n background: ", ";\n color: ", ";\n font-size: 14px;\n font-weight: ", ";\n :hover {\n user-select: ", ";\n background: ", ";\n color: ", ";\n }\n"])), function (_a) { + var theme = _a.theme, isActive = _a.isActive, isOnSwitch = _a.isOnSwitch; + return (isActive ? (isOnSwitch ? theme.primary1 : theme.bg4) : 'none'); +}, function (_a) { + var theme = _a.theme, isActive = _a.isActive; + return (isActive ? theme.white : theme.text2); +}, function (_a) { + var isOnSwitch = _a.isOnSwitch; + return (isOnSwitch ? '500' : '400'); +}, function (_a) { + var isOnSwitch = _a.isOnSwitch; + return (isOnSwitch ? 'none' : 'initial'); +}, function (_a) { + var theme = _a.theme, isActive = _a.isActive, isOnSwitch = _a.isOnSwitch; + return isActive ? (isOnSwitch ? polished.darken(0.05, theme.primary1) : polished.darken(0.05, theme.bg4)) : 'none'; +}, function (_a) { + var theme = _a.theme, isActive = _a.isActive, isOnSwitch = _a.isOnSwitch; + return (isActive ? (isOnSwitch ? theme.white : theme.white) : theme.text3); +}); +var StyledToggle = styled__default["default"].button(templateObject_2$4 || (templateObject_2$4 = __makeTemplateObject(["\n border-radius: 12px;\n border: none;\n background: ", ";\n display: flex;\n width: fit-content;\n cursor: pointer;\n outline: none;\n padding: 2px;\n"], ["\n border-radius: 12px;\n border: none;\n background: ", ";\n display: flex;\n width: fit-content;\n cursor: pointer;\n outline: none;\n padding: 2px;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg0; +}); +function Toggle(_a) { + var id = _a.id, isActive = _a.isActive, toggle = _a.toggle, _b = _a.checked, checked = _b === void 0 ? jsxRuntime.jsx(macro.Trans, { children: "On" }, void 0) : _b, _c = _a.unchecked, unchecked = _c === void 0 ? jsxRuntime.jsx(macro.Trans, { children: "Off" }, void 0) : _c; + return (jsxRuntime.jsxs(StyledToggle, __assign({ id: id, isActive: isActive, onClick: toggle }, { children: [jsxRuntime.jsx(ToggleElement, __assign({ isActive: isActive, isOnSwitch: true }, { children: checked }), void 0), jsxRuntime.jsx(ToggleElement, __assign({ isActive: !isActive, isOnSwitch: false }, { children: unchecked }), void 0)] }), void 0)); +} +var templateObject_1$a, templateObject_2$4; + +var SlippageError; +(function (SlippageError) { + SlippageError["InvalidInput"] = "InvalidInput"; +})(SlippageError || (SlippageError = {})); +var DeadlineError; +(function (DeadlineError) { + DeadlineError["InvalidInput"] = "InvalidInput"; +})(DeadlineError || (DeadlineError = {})); +var FancyButton = styled__default["default"].button(templateObject_1$9 || (templateObject_1$9 = __makeTemplateObject(["\n color: ", ";\n align-items: center;\n height: 2rem;\n border-radius: 36px;\n font-size: 1rem;\n width: auto;\n min-width: 3.5rem;\n border: 1px solid ", ";\n outline: none;\n background: ", ";\n :hover {\n border: 1px solid ", ";\n }\n :focus {\n border: 1px solid ", ";\n }\n"], ["\n color: ", ";\n align-items: center;\n height: 2rem;\n border-radius: 36px;\n font-size: 1rem;\n width: auto;\n min-width: 3.5rem;\n border: 1px solid ", ";\n outline: none;\n background: ", ";\n :hover {\n border: 1px solid ", ";\n }\n :focus {\n border: 1px solid ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text1; +}, function (_a) { + var theme = _a.theme; + return theme.bg3; +}, function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var theme = _a.theme; + return theme.bg4; +}, function (_a) { + var theme = _a.theme; + return theme.primary1; +}); +var Option = styled__default["default"](FancyButton)(templateObject_2$3 || (templateObject_2$3 = __makeTemplateObject(["\n margin-right: 8px;\n :hover {\n cursor: pointer;\n }\n background-color: ", ";\n color: ", ";\n"], ["\n margin-right: 8px;\n :hover {\n cursor: pointer;\n }\n background-color: ", ";\n color: ", ";\n"])), function (_a) { + var active = _a.active, theme = _a.theme; + return active && theme.primary1; +}, function (_a) { + var active = _a.active, theme = _a.theme; + return (active ? theme.white : theme.text1); +}); +var Input = styled__default["default"].input(templateObject_3$2 || (templateObject_3$2 = __makeTemplateObject(["\n background: ", ";\n font-size: 16px;\n width: auto;\n outline: none;\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n }\n color: ", ";\n text-align: right;\n"], ["\n background: ", ";\n font-size: 16px;\n width: auto;\n outline: none;\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n }\n color: ", ";\n text-align: right;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var theme = _a.theme, color = _a.color; + return (color === 'red' ? theme.red1 : theme.text1); +}); +var OptionCustom = styled__default["default"](FancyButton)(templateObject_4$1 || (templateObject_4$1 = __makeTemplateObject(["\n height: 2rem;\n position: relative;\n padding: 0 0.75rem;\n flex: 1;\n border: ", ";\n :hover {\n border: ", ";\n }\n\n input {\n width: 100%;\n height: 100%;\n border: 0px;\n border-radius: 2rem;\n }\n"], ["\n height: 2rem;\n position: relative;\n padding: 0 0.75rem;\n flex: 1;\n border: ", ";\n :hover {\n border: ", ";\n }\n\n input {\n width: 100%;\n height: 100%;\n border: 0px;\n border-radius: 2rem;\n }\n"])), function (_a) { + var theme = _a.theme, active = _a.active, warning = _a.warning; + return active ? "1px solid " + (warning ? theme.red1 : theme.primary1) : warning && "1px solid " + theme.red1; +}, function (_a) { + var theme = _a.theme, active = _a.active, warning = _a.warning; + return active && "1px solid " + (warning ? polished.darken(0.1, theme.red1) : polished.darken(0.1, theme.primary1)); +}); +var SlippageEmojiContainer = styled__default["default"].span(templateObject_6$1 || (templateObject_6$1 = __makeTemplateObject(["\n color: #f3841e;\n ", "\n"], ["\n color: #f3841e;\n ", "\n"])), function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToSmall(templateObject_5$1 || (templateObject_5$1 = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); +}); +var THREE_DAYS_IN_SECONDS = ms__default["default"](templateObject_7$1 || (templateObject_7$1 = __makeTemplateObject(["3 days"], ["3 days"]))) / 1000; +function TransactionSettings(_a) { + var placeholderSlippage = _a.placeholderSlippage; + var chainId = useActiveWeb3React().chainId; + var theme = React.useContext(styled.ThemeContext); + var userSlippageTolerance = useUserSlippageTolerance(); + var setUserSlippageTolerance = useSetUserSlippageTolerance(); + var _b = __read(useUserTransactionTTL(), 2), deadline = _b[0], setDeadline = _b[1]; + var _c = __read(React.useState(''), 2), slippageInput = _c[0], setSlippageInput = _c[1]; + var _d = __read(React.useState(false), 2), slippageError = _d[0], setSlippageError = _d[1]; + var _e = __read(React.useState(''), 2), deadlineInput = _e[0], setDeadlineInput = _e[1]; + var _f = __read(React.useState(false), 2), deadlineError = _f[0], setDeadlineError = _f[1]; + function parseSlippageInput(value) { + // populate what the user typed and clear the error + setSlippageInput(value); + setSlippageError(false); + if (value.length === 0) { + setUserSlippageTolerance('auto'); + } + else { + var parsed = Math.floor(Number.parseFloat(value) * 100); + if (!Number.isInteger(parsed) || parsed < 0 || parsed > 5000) { + setUserSlippageTolerance('auto'); + if (value !== '.') { + setSlippageError(SlippageError.InvalidInput); + } + } + else { + setUserSlippageTolerance(new sdkCore.Percent(parsed, 10000)); + } + } + } + var tooLow = userSlippageTolerance !== 'auto' && userSlippageTolerance.lessThan(new sdkCore.Percent(5, 10000)); + var tooHigh = userSlippageTolerance !== 'auto' && userSlippageTolerance.greaterThan(new sdkCore.Percent(1, 100)); + function parseCustomDeadline(value) { + // populate what the user typed and clear the error + setDeadlineInput(value); + setDeadlineError(false); + if (value.length === 0) { + setDeadline(DEFAULT_DEADLINE_FROM_NOW); + } + else { + try { + var parsed = Math.floor(Number.parseFloat(value) * 60); + if (!Number.isInteger(parsed) || parsed < 60 || parsed > THREE_DAYS_IN_SECONDS) { + setDeadlineError(DeadlineError.InvalidInput); + } + else { + setDeadline(parsed); + } + } + catch (error) { + console.error(error); + setDeadlineError(DeadlineError.InvalidInput); + } + } + } + var showCustomDeadlineRow = Boolean(chainId && !L2_CHAIN_IDS.includes(chainId)); + return (jsxRuntime.jsxs(AutoColumn, __assign({ gap: "md" }, { children: [jsxRuntime.jsxs(AutoColumn, __assign({ gap: "sm" }, { children: [jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(ThemedText.Black, __assign({ fontWeight: 400, fontSize: 14, color: theme.text2 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Slippage tolerance" }, void 0) }), void 0), jsxRuntime.jsx(QuestionHelper, { text: jsxRuntime.jsx(macro.Trans, { children: "Your transaction will revert if the price changes unfavorably by more than this percentage." }, void 0) }, void 0)] }, void 0), jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(Option, __assign({ onClick: function () { + parseSlippageInput(''); + }, active: userSlippageTolerance === 'auto' }, { children: jsxRuntime.jsx(macro.Trans, { children: "Auto" }, void 0) }), void 0), jsxRuntime.jsx(OptionCustom, __assign({ active: userSlippageTolerance !== 'auto', warning: !!slippageError, tabIndex: -1 }, { children: jsxRuntime.jsxs(RowBetween, { children: [tooLow || tooHigh ? (jsxRuntime.jsx(SlippageEmojiContainer, { children: jsxRuntime.jsx("span", __assign({ role: "img", "aria-label": "warning" }, { children: "\u26A0\uFE0F" }), void 0) }, void 0)) : null, jsxRuntime.jsx(Input, { placeholder: placeholderSlippage.toFixed(2), value: slippageInput.length > 0 + ? slippageInput + : userSlippageTolerance === 'auto' + ? '' + : userSlippageTolerance.toFixed(2), onChange: function (e) { return parseSlippageInput(e.target.value); }, onBlur: function () { + setSlippageInput(''); + setSlippageError(false); + }, color: slippageError ? 'red' : '' }, void 0), "%"] }, void 0) }), void 0)] }, void 0), slippageError || tooLow || tooHigh ? (jsxRuntime.jsx(RowBetween, __assign({ style: { + fontSize: '14px', + paddingTop: '7px', + color: slippageError ? 'red' : '#F3841E', + } }, { children: slippageError ? (jsxRuntime.jsx(macro.Trans, { children: "Enter a valid slippage percentage" }, void 0)) : tooLow ? (jsxRuntime.jsx(macro.Trans, { children: "Your transaction may fail" }, void 0)) : (jsxRuntime.jsx(macro.Trans, { children: "Your transaction may be frontrun" }, void 0)) }), void 0)) : null] }), void 0), showCustomDeadlineRow && (jsxRuntime.jsxs(AutoColumn, __assign({ gap: "sm" }, { children: [jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(ThemedText.Black, __assign({ fontSize: 14, fontWeight: 400, color: theme.text2 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Transaction deadline" }, void 0) }), void 0), jsxRuntime.jsx(QuestionHelper, { text: jsxRuntime.jsx(macro.Trans, { children: "Your transaction will revert if it is pending for more than this period of time." }, void 0) }, void 0)] }, void 0), jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(OptionCustom, __assign({ style: { width: '80px' }, warning: !!deadlineError, tabIndex: -1 }, { children: jsxRuntime.jsx(Input, { placeholder: (DEFAULT_DEADLINE_FROM_NOW / 60).toString(), value: deadlineInput.length > 0 + ? deadlineInput + : deadline === DEFAULT_DEADLINE_FROM_NOW + ? '' + : (deadline / 60).toString(), onChange: function (e) { return parseCustomDeadline(e.target.value); }, onBlur: function () { + setDeadlineInput(''); + setDeadlineError(false); + }, color: deadlineError ? 'red' : '' }, void 0) }), void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ style: { paddingLeft: '8px' }, fontSize: 14 }, { children: jsxRuntime.jsx(macro.Trans, { children: "minutes" }, void 0) }), void 0)] }, void 0)] }), void 0))] }), void 0)); +} +var templateObject_1$9, templateObject_2$3, templateObject_3$2, templateObject_4$1, templateObject_5$1, templateObject_6$1, templateObject_7$1; + +var StyledMenuIcon = styled__default["default"](reactFeather.Settings)(templateObject_1$8 || (templateObject_1$8 = __makeTemplateObject(["\n height: 20px;\n width: 20px;\n\n > * {\n stroke: ", ";\n }\n\n :hover {\n opacity: 0.7;\n }\n"], ["\n height: 20px;\n width: 20px;\n\n > * {\n stroke: ", ";\n }\n\n :hover {\n opacity: 0.7;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text1; +}); +var StyledCloseIcon = styled__default["default"](reactFeather.X)(templateObject_2$2 || (templateObject_2$2 = __makeTemplateObject(["\n height: 20px;\n width: 20px;\n :hover {\n cursor: pointer;\n }\n\n > * {\n stroke: ", ";\n }\n"], ["\n height: 20px;\n width: 20px;\n :hover {\n cursor: pointer;\n }\n\n > * {\n stroke: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text1; +}); +var StyledMenuButton = styled__default["default"].button(templateObject_3$1 || (templateObject_3$1 = __makeTemplateObject(["\n position: relative;\n width: 100%;\n height: 100%;\n border: none;\n background-color: transparent;\n margin: 0;\n padding: 0;\n border-radius: 0.5rem;\n height: 20px;\n\n :hover,\n :focus {\n cursor: pointer;\n outline: none;\n }\n"], ["\n position: relative;\n width: 100%;\n height: 100%;\n border: none;\n background-color: transparent;\n margin: 0;\n padding: 0;\n border-radius: 0.5rem;\n height: 20px;\n\n :hover,\n :focus {\n cursor: pointer;\n outline: none;\n }\n"]))); +var EmojiWrapper = styled__default["default"].div(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n position: absolute;\n bottom: -6px;\n right: 0px;\n font-size: 14px;\n"], ["\n position: absolute;\n bottom: -6px;\n right: 0px;\n font-size: 14px;\n"]))); +var StyledMenu = styled__default["default"].div(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n margin-left: 0.5rem;\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n text-align: left;\n"], ["\n margin-left: 0.5rem;\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n text-align: left;\n"]))); +var MenuFlyout = styled__default["default"].span(templateObject_7 || (templateObject_7 = __makeTemplateObject(["\n min-width: 20.125rem;\n background-color: ", ";\n border: 1px solid ", ";\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 border-radius: 12px;\n display: flex;\n flex-direction: column;\n font-size: 1rem;\n position: absolute;\n top: 2rem;\n right: 0rem;\n z-index: 100;\n\n ", ";\n\n user-select: none;\n"], ["\n min-width: 20.125rem;\n background-color: ", ";\n border: 1px solid ", ";\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 border-radius: 12px;\n display: flex;\n flex-direction: column;\n font-size: 1rem;\n position: absolute;\n top: 2rem;\n right: 0rem;\n z-index: 100;\n\n ", ";\n\n user-select: none;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}, function (_a) { + var theme = _a.theme; + return theme.bg3; +}, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToMedium(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n min-width: 18.125rem;\n "], ["\n min-width: 18.125rem;\n "]))); +}); +var Break = styled__default["default"].div(templateObject_8 || (templateObject_8 = __makeTemplateObject(["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"], ["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg3; +}); +var ModalContentWrapper = styled__default["default"].div(templateObject_9 || (templateObject_9 = __makeTemplateObject(["\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 2rem 0;\n background-color: ", ";\n border-radius: 20px;\n"], ["\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 2rem 0;\n background-color: ", ";\n border-radius: 20px;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}); +function SettingsTab(_a) { + var placeholderSlippage = _a.placeholderSlippage; + var chainId = useActiveWeb3React().chainId; + var node = React.useRef(); + var open = useModalOpen(ApplicationModal.SETTINGS); + var toggle = useToggleSettingsMenu(); + var theme = React.useContext(styled.ThemeContext); + var _b = __read(useExpertModeManager(), 2), expertMode = _b[0], toggleExpertMode = _b[1]; + var _c = __read(useClientSideRouter(), 2), clientSideRouter = _c[0], setClientSideRouter = _c[1]; + // show confirmation view before turning on + var _d = __read(React.useState(false), 2), showConfirmation = _d[0], setShowConfirmation = _d[1]; + useOnClickOutside(node, open ? toggle : undefined); + return ( + // https://github.com/DefinitelyTyped/DefinitelyTyped/issues/30451 + jsxRuntime.jsxs(StyledMenu, __assign({ ref: node }, { children: [jsxRuntime.jsx(Modal, __assign({ isOpen: showConfirmation, onDismiss: function () { return setShowConfirmation(false); }, maxHeight: 100 }, { children: jsxRuntime.jsx(ModalContentWrapper, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "lg" }, { children: [jsxRuntime.jsxs(RowBetween, __assign({ style: { padding: '0 2rem' } }, { children: [jsxRuntime.jsx("div", {}, void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Are you sure?" }, void 0) }), void 0), jsxRuntime.jsx(StyledCloseIcon, { onClick: function () { return setShowConfirmation(false); } }, void 0)] }), void 0), jsxRuntime.jsx(Break, {}, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "lg", style: { padding: '0 2rem' } }, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds." }, void 0) }), void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 600, fontSize: 20 }, { children: jsxRuntime.jsx(macro.Trans, { children: "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING." }, void 0) }), void 0), jsxRuntime.jsx(ButtonError, __assign({ error: true, padding: '12px', onClick: function () { + var confirmWord = macro.t(templateObject_10 || (templateObject_10 = __makeTemplateObject(["confirm"], ["confirm"]))); + if (window.prompt(macro.t(templateObject_11 || (templateObject_11 = __makeTemplateObject(["Please type the word \"", "\" to enable expert mode."], ["Please type the word \"", "\" to enable expert mode."])), confirmWord)) === confirmWord) { + toggleExpertMode(); + setShowConfirmation(false); + } + } }, { children: jsxRuntime.jsx(rebass.Text, __assign({ fontSize: 20, fontWeight: 500, id: "confirm-expert-mode" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Turn On Expert Mode" }, void 0) }), void 0) }), void 0)] }), void 0)] }), void 0) }, void 0) }), void 0), jsxRuntime.jsxs(StyledMenuButton, __assign({ onClick: toggle, id: "open-settings-dialog-button", "aria-label": macro.t(templateObject_12 || (templateObject_12 = __makeTemplateObject(["Transaction Settings"], ["Transaction Settings"]))) }, { children: [jsxRuntime.jsx(StyledMenuIcon, {}, void 0), expertMode ? (jsxRuntime.jsx(EmojiWrapper, { children: jsxRuntime.jsx("span", __assign({ role: "img", "aria-label": "wizard-icon" }, { children: "\uD83E\uDDD9" }), void 0) }, void 0)) : null] }), void 0), open && (jsxRuntime.jsx(MenuFlyout, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "md", style: { padding: '1rem' } }, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 600, fontSize: 14 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Transaction Settings" }, void 0) }), void 0), jsxRuntime.jsx(TransactionSettings, { placeholderSlippage: placeholderSlippage }, void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 600, fontSize: 14 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Interface Settings" }, void 0) }), void 0), chainId && AUTO_ROUTER_SUPPORTED_CHAINS.includes(chainId) && (jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(ThemedText.Black, __assign({ fontWeight: 400, fontSize: 14, color: theme.text2 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Auto Router API" }, void 0) }), void 0), jsxRuntime.jsx(QuestionHelper, { text: jsxRuntime.jsx(macro.Trans, { children: "Use the Uniswap Labs API to get faster quotes." }, void 0) }, void 0)] }, void 0), jsxRuntime.jsx(Toggle, { id: "toggle-optimized-router-button", isActive: !clientSideRouter, toggle: function () { + ReactGA__default["default"].event({ + category: 'Routing', + action: clientSideRouter ? 'enable routing API' : 'disable routing API', + }); + setClientSideRouter(!clientSideRouter); + } }, void 0)] }, void 0)), jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(ThemedText.Black, __assign({ fontWeight: 400, fontSize: 14, color: theme.text2 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Expert Mode" }, void 0) }), void 0), jsxRuntime.jsx(QuestionHelper, { text: jsxRuntime.jsx(macro.Trans, { children: "Allow high price impact trades and skip the confirm screen. Use at your own risk." }, void 0) }, void 0)] }, void 0), jsxRuntime.jsx(Toggle, { id: "toggle-expert-mode-button", isActive: expertMode, toggle: expertMode + ? function () { + toggleExpertMode(); + setShowConfirmation(false); + } + : function () { + toggle(); + setShowConfirmation(true); + } }, void 0)] }, void 0)] }), void 0) }, void 0))] }), void 0)); +} +var templateObject_1$8, templateObject_2$2, templateObject_3$1, templateObject_4, templateObject_5, templateObject_6, templateObject_7, templateObject_8, templateObject_9, templateObject_10, templateObject_11, templateObject_12; + +var StyledSwapHeader = styled__default["default"].div(templateObject_1$7 || (templateObject_1$7 = __makeTemplateObject(["\n padding: 1rem 1.25rem 0.5rem 1.25rem;\n width: 100%;\n color: ", ";\n"], ["\n padding: 1rem 1.25rem 0.5rem 1.25rem;\n width: 100%;\n color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.text2; +}); +function SwapHeader(_a) { + var allowedSlippage = _a.allowedSlippage; + return (jsxRuntime.jsx(StyledSwapHeader, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(RowFixed, { children: jsxRuntime.jsx(ThemedText.Black, __assign({ fontWeight: 500, fontSize: 16, style: { marginRight: '8px' } }, { children: jsxRuntime.jsx(macro.Trans, { children: "Swap" }, void 0) }), void 0) }, void 0), jsxRuntime.jsx(RowFixed, { children: jsxRuntime.jsx(SettingsTab, { placeholderSlippage: allowedSlippage }, void 0) }, void 0)] }, void 0) }, void 0)); +} +var templateObject_1$7; + +function parsedQueryString(search) { + if (!search) { + // react-router-dom places search string in the hash + var hash = window.location.hash; + search = hash.substr(hash.indexOf('?')); + } + return search && search.length > 1 ? qs.parse(search, { parseArrays: false, ignoreQueryPrefix: true }) : {}; +} +function useParsedQueryString() { + var search = reactRouterDom.useLocation().search; + return React.useMemo(function () { return parsedQueryString(search); }, [search]); +} + +var SUPPORTED_LOCALES = [ + // order as they appear in the language dropdown + 'en-US', + 'af-ZA', + 'ar-SA', + 'ca-ES', + 'cs-CZ', + 'da-DK', + 'de-DE', + 'el-GR', + 'es-ES', + 'fi-FI', + 'fr-FR', + 'he-IL', + 'hu-HU', + 'id-ID', + 'it-IT', + 'ja-JP', + 'ko-KR', + 'nl-NL', + 'no-NO', + 'pl-PL', + 'pt-BR', + 'pt-PT', + 'ro-RO', + 'ru-RU', + 'sr-SP', + 'sv-SE', + 'sw-TZ', + 'tr-TR', + 'uk-UA', + 'vi-VN', + 'zh-CN', + 'zh-TW', +]; +var DEFAULT_LOCALE = 'en-US'; +var LOCALE_LABEL = { + 'af-ZA': 'Afrikaans', + 'ar-SA': 'العربية', + 'ca-ES': 'Català', + 'cs-CZ': 'čeština', + 'da-DK': 'dansk', + 'de-DE': 'Deutsch', + 'el-GR': 'ελληνικά', + 'en-US': 'English', + 'es-ES': 'Español', + 'fi-FI': 'suomi', + 'fr-FR': 'français', + 'he-IL': 'עִברִית', + 'hu-HU': 'Magyar', + 'id-ID': 'bahasa Indonesia', + 'it-IT': 'Italiano', + 'ja-JP': '日本語', + 'ko-KR': '한국어', + 'nl-NL': 'Nederlands', + 'no-NO': 'norsk', + 'pl-PL': 'Polskie', + 'pt-BR': 'português', + 'pt-PT': 'português', + 'ro-RO': 'Română', + 'ru-RU': 'русский', + 'sr-SP': 'Српски', + 'sv-SE': 'svenska', + 'sw-TZ': 'Kiswahili', + 'tr-TR': 'Türkçe', + 'uk-UA': 'Український', + 'vi-VN': 'Tiếng Việt', + 'zh-CN': '简体中文', + 'zh-TW': '繁体中文', + pseudo: 'ƥƨèúδô', +}; + +var Field$3; +(function (Field) { + Field["LIQUIDITY_PERCENT"] = "LIQUIDITY_PERCENT"; + Field["LIQUIDITY"] = "LIQUIDITY"; + Field["CURRENCY_A"] = "CURRENCY_A"; + Field["CURRENCY_B"] = "CURRENCY_B"; +})(Field$3 || (Field$3 = {})); +var typeInput$3 = toolkit.createAction('burn/typeInputBurn'); + +var initialState$7 = { + independentField: Field$3.LIQUIDITY_PERCENT, + typedValue: '0', +}; +var burn = toolkit.createReducer(initialState$7, function (builder) { + return builder.addCase(typeInput$3, function (state, _a) { + var _b = _a.payload, field = _b.field, typedValue = _b.typedValue; + return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); + }); +}); + +var selectPercent = toolkit.createAction('burnV3/selectBurnPercent'); + +var initialState$6 = { + percent: 0, +}; +var burnV3 = toolkit.createReducer(initialState$6, function (builder) { + return builder.addCase(selectPercent, function (state, _a) { + var percent = _a.payload.percent; + return __assign(__assign({}, state), { percent: percent }); + }); +}); + +var _a$4; +// List of supported subgraphs. Note that the app currently only support one active subgraph at a time +var CHAIN_SUBGRAPH_URL = (_a$4 = {}, + _a$4[SupportedChainId.MAINNET] = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3', + _a$4[SupportedChainId.RINKEBY] = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3', + _a$4[SupportedChainId.ARBITRUM_ONE] = 'https://api.thegraph.com/subgraphs/name/ianlapham/arbitrum-minimal', + _a$4[SupportedChainId.OPTIMISM] = 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-optimism-dev', + _a$4[SupportedChainId.POLYGON] = 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-v3-polygon', + _a$4); +var api = react.createApi({ + reducerPath: 'dataApi', + baseQuery: graphqlRequestBaseQuery(), + endpoints: function (builder) { return ({ + allV3Ticks: builder.query({ + query: function (_a) { + var poolAddress = _a.poolAddress, _b = _a.skip, skip = _b === void 0 ? 0 : _b; + return ({ + document: graphqlRequest.gql(templateObject_1$6 || (templateObject_1$6 = __makeTemplateObject(["\n query allV3Ticks($poolAddress: String!, $skip: Int!) {\n ticks(first: 1000, skip: $skip, where: { poolAddress: $poolAddress }, orderBy: tickIdx) {\n tick: tickIdx\n liquidityNet\n price0\n price1\n }\n }\n "], ["\n query allV3Ticks($poolAddress: String!, $skip: Int!) {\n ticks(first: 1000, skip: $skip, where: { poolAddress: $poolAddress }, orderBy: tickIdx) {\n tick: tickIdx\n liquidityNet\n price0\n price1\n }\n }\n "]))), + variables: { + poolAddress: poolAddress, + skip: skip, + }, + }); + }, + }), + feeTierDistribution: builder.query({ + query: function (_a) { + var token0 = _a.token0, token1 = _a.token1; + return ({ + document: graphqlRequest.gql(templateObject_2$1 || (templateObject_2$1 = __makeTemplateObject(["\n query feeTierDistribution($token0: String!, $token1: String!) {\n _meta {\n block {\n number\n }\n }\n asToken0: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token0, token1: $token1 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n asToken1: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token1, token1: $token0 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n }\n "], ["\n query feeTierDistribution($token0: String!, $token1: String!) {\n _meta {\n block {\n number\n }\n }\n asToken0: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token0, token1: $token1 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n asToken1: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token1, token1: $token0 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n }\n "]))), + variables: { + token0: token0, + token1: token1, + }, + }); + }, + }), + }); }, +}); +// Graphql query client wrapper that builds a dynamic url based on chain id +function graphqlRequestBaseQuery() { + var _this = this; + return function (_a, _b) { + var document = _a.document, variables = _a.variables; + var getState = _b.getState; + return __awaiter(_this, void 0, void 0, function () { + var chainId, subgraphUrl, error_1, name_1, message, stack, request, response; + var _c; + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]); + chainId = getState().application.chainId; + subgraphUrl = chainId ? CHAIN_SUBGRAPH_URL[chainId] : undefined; + if (!subgraphUrl) { + return [2 /*return*/, { + error: { + name: 'UnsupportedChainId', + message: "Subgraph queries against ChainId " + chainId + " are not supported.", + stack: '', + }, + }]; + } + _c = {}; + return [4 /*yield*/, new graphqlRequest.GraphQLClient(subgraphUrl).request(document, variables)]; + case 1: return [2 /*return*/, (_c.data = _d.sent(), _c.meta = {}, _c)]; + case 2: + error_1 = _d.sent(); + if (error_1 instanceof graphqlRequest.ClientError) { + name_1 = error_1.name, message = error_1.message, stack = error_1.stack, request = error_1.request, response = error_1.response; + return [2 /*return*/, { error: { name: name_1, message: message, stack: stack }, meta: { request: request, response: response } }]; + } + throw error_1; + case 3: return [2 /*return*/]; + } + }); + }); + }; +} +var templateObject_1$6, templateObject_2$1; + +// fired once when the app reloads but before the app renders +// allows any updates to be applied to store data loaded from localStorage +var updateVersion = toolkit.createAction('global/updateVersion'); + +var NEW_LIST_STATE = { + error: null, + current: null, + loadingRequestId: null, + pendingUpdate: null, +}; +var initialState$5 = { + lastInitializedDefaultListOfLists: DEFAULT_LIST_OF_LISTS, + byUrl: __assign({}, DEFAULT_LIST_OF_LISTS.reduce(function (memo, listUrl) { + memo[listUrl] = NEW_LIST_STATE; + return memo; + }, {})), + activeListUrls: DEFAULT_ACTIVE_LIST_URLS, +}; +var lists = toolkit.createReducer(initialState$5, function (builder) { + return builder + .addCase(fetchTokenList.pending, function (state, _a) { + var _b, _c, _d, _e; + var _f = _a.payload, requestId = _f.requestId, url = _f.url; + var current = (_c = (_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.current) !== null && _c !== void 0 ? _c : null; + var pendingUpdate = (_e = (_d = state.byUrl[url]) === null || _d === void 0 ? void 0 : _d.pendingUpdate) !== null && _e !== void 0 ? _e : null; + state.byUrl[url] = { + current: current, + pendingUpdate: pendingUpdate, + loadingRequestId: requestId, + error: null, + }; + }) + .addCase(fetchTokenList.fulfilled, function (state, _a) { + var _b, _c, _d; + var _e = _a.payload, requestId = _e.requestId, tokenList = _e.tokenList, url = _e.url; + var current = (_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.current; + var loadingRequestId = (_c = state.byUrl[url]) === null || _c === void 0 ? void 0 : _c.loadingRequestId; + // no-op if update does nothing + if (current) { + var upgradeType = tokenLists.getVersionUpgrade(current.version, tokenList.version); + if (upgradeType === tokenLists.VersionUpgrade.NONE) + return; + if (loadingRequestId === null || loadingRequestId === requestId) { + state.byUrl[url] = { + current: current, + pendingUpdate: tokenList, + loadingRequestId: null, + error: null, + }; + } + } + else { + // activate if on default active + if (DEFAULT_ACTIVE_LIST_URLS.includes(url)) { + (_d = state.activeListUrls) === null || _d === void 0 ? void 0 : _d.push(url); + } + state.byUrl[url] = { + current: tokenList, + pendingUpdate: null, + loadingRequestId: null, + error: null, + }; + } + }) + .addCase(fetchTokenList.rejected, function (state, _a) { + var _b; + var _c = _a.payload, url = _c.url, requestId = _c.requestId, errorMessage = _c.errorMessage; + if (((_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.loadingRequestId) !== requestId) { + // no-op since it's not the latest request + return; + } + state.byUrl[url] = { + current: state.byUrl[url].current ? state.byUrl[url].current : null, + pendingUpdate: null, + loadingRequestId: null, + error: errorMessage, + }; + }) + .addCase(addList, function (state, _a) { + var url = _a.payload; + if (!state.byUrl[url]) { + state.byUrl[url] = NEW_LIST_STATE; + } + }) + .addCase(removeList, function (state, _a) { + var url = _a.payload; + if (state.byUrl[url]) { + delete state.byUrl[url]; + } + // remove list from active urls if needed + if (state.activeListUrls && state.activeListUrls.includes(url)) { + state.activeListUrls = state.activeListUrls.filter(function (u) { return u !== url; }); + } + }) + .addCase(enableList, function (state, _a) { + var url = _a.payload; + if (!state.byUrl[url]) { + state.byUrl[url] = NEW_LIST_STATE; + } + if (state.activeListUrls && !state.activeListUrls.includes(url)) { + state.activeListUrls.push(url); + } + if (!state.activeListUrls) { + state.activeListUrls = [url]; + } + }) + .addCase(disableList, function (state, _a) { + var url = _a.payload; + if (state.activeListUrls && state.activeListUrls.includes(url)) { + state.activeListUrls = state.activeListUrls.filter(function (u) { return u !== url; }); + } + }) + .addCase(acceptListUpdate, function (state, _a) { + var _b; + var url = _a.payload; + if (!((_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.pendingUpdate)) { + throw new Error('accept list update called without pending update'); + } + state.byUrl[url] = __assign(__assign({}, state.byUrl[url]), { current: state.byUrl[url].pendingUpdate, pendingUpdate: null }); + }) + .addCase(updateVersion, function (state) { + // state loaded from localStorage, but new lists have never been initialized + if (!state.lastInitializedDefaultListOfLists) { + state.byUrl = initialState$5.byUrl; + state.activeListUrls = initialState$5.activeListUrls; + } + else if (state.lastInitializedDefaultListOfLists) { + var lastInitializedSet_1 = state.lastInitializedDefaultListOfLists.reduce(function (s, l) { return s.add(l); }, new Set()); + var newListOfListsSet_1 = DEFAULT_LIST_OF_LISTS.reduce(function (s, l) { return s.add(l); }, new Set()); + DEFAULT_LIST_OF_LISTS.forEach(function (listUrl) { + if (!lastInitializedSet_1.has(listUrl)) { + state.byUrl[listUrl] = NEW_LIST_STATE; + } + }); + state.lastInitializedDefaultListOfLists.forEach(function (listUrl) { + if (!newListOfListsSet_1.has(listUrl)) { + delete state.byUrl[listUrl]; + } + }); + } + state.lastInitializedDefaultListOfLists = DEFAULT_LIST_OF_LISTS; + // if no active lists, activate defaults + if (!state.activeListUrls) { + state.activeListUrls = DEFAULT_ACTIVE_LIST_URLS; + // for each list on default list, initialize if needed + DEFAULT_ACTIVE_LIST_URLS.map(function (listUrl) { + if (!state.byUrl[listUrl]) { + state.byUrl[listUrl] = NEW_LIST_STATE; + } + return true; + }); + } + }); +}); + +/** + * Converts a filter to the corresponding string key + * @param filter the filter to convert + */ +function filterToKey(filter) { + var _a, _b, _c, _d; + return ((_a = filter.address) !== null && _a !== void 0 ? _a : '') + ":" + ((_d = (_c = (_b = filter.topics) === null || _b === void 0 ? void 0 : _b.map(function (topic) { return (topic ? (Array.isArray(topic) ? topic.join(';') : topic) : '\0'); })) === null || _c === void 0 ? void 0 : _c.join('-')) !== null && _d !== void 0 ? _d : ''); +} + +var _a$3; +var slice = toolkit.createSlice({ + name: 'logs', + initialState: {}, + reducers: { + addListener: function (state, _a) { + var _b = _a.payload, chainId = _b.chainId, filter = _b.filter; + if (!state[chainId]) + state[chainId] = {}; + var key = filterToKey(filter); + if (!state[chainId][key]) + state[chainId][key] = { + listeners: 1, + }; + else + state[chainId][key].listeners++; + }, + fetchingLogs: function (state, _a) { + var e_1, _b; + var _c = _a.payload, chainId = _c.chainId, filters = _c.filters, blockNumber = _c.blockNumber; + if (!state[chainId]) + return; + try { + for (var filters_1 = __values(filters), filters_1_1 = filters_1.next(); !filters_1_1.done; filters_1_1 = filters_1.next()) { + var filter = filters_1_1.value; + var key = filterToKey(filter); + if (!state[chainId][key]) + continue; + state[chainId][key].fetchingBlockNumber = blockNumber; + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (filters_1_1 && !filters_1_1.done && (_b = filters_1.return)) _b.call(filters_1); + } + finally { if (e_1) throw e_1.error; } + } + }, + fetchedLogs: function (state, _a) { + var _b = _a.payload, chainId = _b.chainId, filter = _b.filter, results = _b.results; + if (!state[chainId]) + return; + var key = filterToKey(filter); + var fetchState = state[chainId][key]; + if (!fetchState || (fetchState.results && fetchState.results.blockNumber > results.blockNumber)) + return; + fetchState.results = results; + }, + fetchedLogsError: function (state, _a) { + var _b = _a.payload, chainId = _b.chainId, filter = _b.filter, blockNumber = _b.blockNumber; + if (!state[chainId]) + return; + var key = filterToKey(filter); + var fetchState = state[chainId][key]; + if (!fetchState || (fetchState.results && fetchState.results.blockNumber > blockNumber)) + return; + fetchState.results = { + blockNumber: blockNumber, + error: true, + }; + }, + removeListener: function (state, _a) { + var _b = _a.payload, chainId = _b.chainId, filter = _b.filter; + if (!state[chainId]) + return; + var key = filterToKey(filter); + if (!state[chainId][key]) + return; + state[chainId][key].listeners--; + }, + }, +}); +var logs = slice.reducer; +(_a$3 = slice.actions, _a$3.addListener); _a$3.removeListener; _a$3.fetchedLogs; _a$3.fetchedLogsError; _a$3.fetchingLogs; + +var Field$2; +(function (Field) { + Field["CURRENCY_A"] = "CURRENCY_A"; + Field["CURRENCY_B"] = "CURRENCY_B"; +})(Field$2 || (Field$2 = {})); +var typeInput$2 = toolkit.createAction('mint/typeInputMint'); +var resetMintState$1 = toolkit.createAction('mint/resetMintState'); + +var initialState$4 = { + independentField: Field$2.CURRENCY_A, + typedValue: '', + otherTypedValue: '', + startPriceTypedValue: '', + leftRangeTypedValue: '', + rightRangeTypedValue: '', +}; +var mint = toolkit.createReducer(initialState$4, function (builder) { + return builder + .addCase(resetMintState$1, function () { return initialState$4; }) + .addCase(typeInput$2, function (state, _a) { + var _b = _a.payload, field = _b.field, typedValue = _b.typedValue, noLiquidity = _b.noLiquidity; + if (noLiquidity) { + // they're typing into the field they've last typed in + if (field === state.independentField) { + return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); + } + // they're typing into a new field, store the other value + else { + return __assign(__assign({}, state), { independentField: field, typedValue: typedValue, otherTypedValue: state.typedValue }); + } + } + else { + return __assign(__assign({}, state), { independentField: field, typedValue: typedValue, otherTypedValue: '' }); + } + }); +}); + +var Field$1; +(function (Field) { + Field["CURRENCY_A"] = "CURRENCY_A"; + Field["CURRENCY_B"] = "CURRENCY_B"; +})(Field$1 || (Field$1 = {})); +var Bound; +(function (Bound) { + Bound["LOWER"] = "LOWER"; + Bound["UPPER"] = "UPPER"; +})(Bound || (Bound = {})); +var typeInput$1 = toolkit.createAction('mintV3/typeInputMint'); +var typeStartPriceInput = toolkit.createAction('mintV3/typeStartPriceInput'); +var typeLeftRangeInput = toolkit.createAction('mintV3/typeLeftRangeInput'); +var typeRightRangeInput = toolkit.createAction('mintV3/typeRightRangeInput'); +var resetMintState = toolkit.createAction('mintV3/resetMintState'); +var setFullRange = toolkit.createAction('mintV3/setFullRange'); + +var initialState$3 = { + independentField: Field$1.CURRENCY_A, + typedValue: '', + startPriceTypedValue: '', + leftRangeTypedValue: '', + rightRangeTypedValue: '', +}; +var mintV3 = toolkit.createReducer(initialState$3, function (builder) { + return builder + .addCase(resetMintState, function () { return initialState$3; }) + .addCase(setFullRange, function (state) { + return __assign(__assign({}, state), { leftRangeTypedValue: true, rightRangeTypedValue: true }); + }) + .addCase(typeStartPriceInput, function (state, _a) { + var typedValue = _a.payload.typedValue; + return __assign(__assign({}, state), { startPriceTypedValue: typedValue }); + }) + .addCase(typeLeftRangeInput, function (state, _a) { + var typedValue = _a.payload.typedValue; + return __assign(__assign({}, state), { leftRangeTypedValue: typedValue }); + }) + .addCase(typeRightRangeInput, function (state, _a) { + var typedValue = _a.payload.typedValue; + return __assign(__assign({}, state), { rightRangeTypedValue: typedValue }); + }) + .addCase(typeInput$1, function (state, _a) { + var _b = _a.payload, field = _b.field, typedValue = _b.typedValue, noLiquidity = _b.noLiquidity; + if (noLiquidity) { + // they're typing into the field they've last typed in + if (field === state.independentField) { + return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); + } + // they're typing into a new field, store the other value + else { + return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); + } + } + else { + return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); + } + }); +}); + +var protocols = [routerSdk.Protocol.V2, routerSdk.Protocol.V3]; +var DEFAULT_QUERY_PARAMS = { + protocols: protocols.map(function (p) { return p.toLowerCase(); }).join(','), + // example other params + // forceCrossProtocol: 'true', + // minSplits: '5', +}; +function getClientSideQuote(_a) { + var tokenInAddress = _a.tokenInAddress, tokenInChainId = _a.tokenInChainId, tokenInDecimals = _a.tokenInDecimals, tokenInSymbol = _a.tokenInSymbol, tokenOutAddress = _a.tokenOutAddress, tokenOutChainId = _a.tokenOutChainId, tokenOutDecimals = _a.tokenOutDecimals, tokenOutSymbol = _a.tokenOutSymbol, amount = _a.amount, type = _a.type; + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_b) { + switch (_b.label) { + case 0: return [4 /*yield*/, Promise.resolve().then(function () { return index; })]; + case 1: return [2 /*return*/, (_b.sent()).getQuote({ + type: type, + chainId: tokenInChainId, + tokenIn: { + address: tokenInAddress, + chainId: tokenInChainId, + decimals: tokenInDecimals, + symbol: tokenInSymbol, + }, + tokenOut: { + address: tokenOutAddress, + chainId: tokenOutChainId, + decimals: tokenOutDecimals, + symbol: tokenOutSymbol, + }, + amount: amount, + }, { protocols: protocols })]; + } + }); + }); +} +var routingApi = react.createApi({ + reducerPath: 'routingApi', + baseQuery: react.fetchBaseQuery({ + baseUrl: 'https://api.uniswap.org/v1/', + }), + endpoints: function (build) { return ({ + getQuote: build.query({ + queryFn: function (args, _api, _extraOptions, fetch) { + return __awaiter(this, void 0, void 0, function () { + var tokenInAddress, tokenInChainId, tokenOutAddress, tokenOutChainId, amount, useClientSideRouter, type, result, query, e_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + tokenInAddress = args.tokenInAddress, tokenInChainId = args.tokenInChainId, tokenOutAddress = args.tokenOutAddress, tokenOutChainId = args.tokenOutChainId, amount = args.amount, useClientSideRouter = args.useClientSideRouter, type = args.type; + _a.label = 1; + case 1: + _a.trys.push([1, 6, , 7]); + if (!useClientSideRouter) return [3 /*break*/, 3]; + return [4 /*yield*/, getClientSideQuote(args)]; + case 2: + result = _a.sent(); + return [3 /*break*/, 5]; + case 3: + query = qs__default["default"].stringify(__assign(__assign({}, DEFAULT_QUERY_PARAMS), { tokenInAddress: tokenInAddress, tokenInChainId: tokenInChainId, tokenOutAddress: tokenOutAddress, tokenOutChainId: tokenOutChainId, amount: amount, type: type })); + return [4 /*yield*/, fetch("quote?" + query)]; + case 4: + result = _a.sent(); + _a.label = 5; + case 5: return [2 /*return*/, { data: result.data }]; + case 6: + e_1 = _a.sent(); + // TODO: fall back to client-side quoter when auto router fails. + // deprecate 'legacy' v2/v3 routers first. + return [2 /*return*/, { error: e_1 }]; + case 7: return [2 /*return*/]; + } + }); + }); + }, + keepUnusedDataFor: ms__default["default"](templateObject_1$5 || (templateObject_1$5 = __makeTemplateObject(["10s"], ["10s"]))), + extraOptions: { + maxRetries: 0, + }, + }), + }); }, +}); +var useGetQuoteQuery = routingApi.useGetQuoteQuery; +var templateObject_1$5; + +var Field; +(function (Field) { + Field["INPUT"] = "INPUT"; + Field["OUTPUT"] = "OUTPUT"; +})(Field || (Field = {})); +var selectCurrency = toolkit.createAction('swap/selectCurrency'); +var switchCurrencies = toolkit.createAction('swap/switchCurrencies'); +var typeInput = toolkit.createAction('swap/typeInput'); +var replaceSwapState = toolkit.createAction('swap/replaceSwapState'); +var setRecipient = toolkit.createAction('swap/setRecipient'); + +var CHAIN_DATA_ABI = [ + { + inputs: [], + name: 'latestAnswer', + outputs: [{ internalType: 'int256', name: '', type: 'int256' }], + stateMutability: 'view', + type: 'function', + }, +]; +/** + * Returns the price of 1 gas in WEI for the currently selected network using the chainlink fast gas price oracle + */ +function useGasPrice() { + var _a, _b; + var address = useENSAddress('fast-gas-gwei.data.eth').address; + var contract = useContract(address !== null && address !== void 0 ? address : undefined, CHAIN_DATA_ABI, false); + var resultStr = (_b = (_a = useSingleCallResult(contract, 'latestAnswer').result) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.toString(); + return typeof resultStr === 'string' ? JSBI__default["default"].BigInt(resultStr) : undefined; +} + +var V3_SWAP_DEFAULT_SLIPPAGE = new sdkCore.Percent(50, 10000); // .50% +var ONE_TENTHS_PERCENT = new sdkCore.Percent(10, 10000); // .10% +/** + * Return a guess of the gas cost used in computing slippage tolerance for a given trade + * @param trade the trade for which to _guess_ the amount of gas it would cost to execute + */ +function guesstimateGas(trade) { + if (!!trade) { + return 100000 + trade.swaps.reduce(function (memo, swap) { return swap.route.pools.length + memo; }, 0) * 30000; + } + return undefined; +} +var MIN_AUTO_SLIPPAGE_TOLERANCE = new sdkCore.Percent(5, 1000); // 0.5% +var MAX_AUTO_SLIPPAGE_TOLERANCE = new sdkCore.Percent(25, 100); // 25% +/** + * Returns slippage tolerance based on values from current trade, gas estimates from api, and active network. + */ +function useAutoSlippageTolerance(trade) { + var chainId = useActiveWeb3React().chainId; + var onL2 = chainId && L2_CHAIN_IDS.includes(chainId); + var outputDollarValue = useUSDCValue(trade === null || trade === void 0 ? void 0 : trade.outputAmount); + var nativeGasPrice = useGasPrice(); + var gasEstimate = guesstimateGas(trade); + var nativeCurrency = useNativeCurrency(); + var nativeCurrencyPrice = useUSDCPrice(nativeCurrency !== null && nativeCurrency !== void 0 ? nativeCurrency : undefined); + return React.useMemo(function () { + if (!trade || onL2) + return ONE_TENTHS_PERCENT; + var nativeGasCost = nativeGasPrice && typeof gasEstimate === 'number' + ? JSBI__default["default"].multiply(nativeGasPrice, JSBI__default["default"].BigInt(gasEstimate)) + : undefined; + var dollarGasCost = nativeCurrency && nativeGasCost && nativeCurrencyPrice + ? nativeCurrencyPrice.quote(sdkCore.CurrencyAmount.fromRawAmount(nativeCurrency, nativeGasCost)) + : undefined; + // if valid estimate from api and using api trade, use gas estimate from api + // NOTE - dont use gas estimate for L2s yet - need to verify accuracy + // if not, use local heuristic + var dollarCostToUse = chainId && SUPPORTED_GAS_ESTIMATE_CHAIN_IDS.includes(chainId) && (trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) + ? trade.gasUseEstimateUSD + : dollarGasCost; + if (outputDollarValue && dollarCostToUse) { + // the rationale is that a user will not want their trade to fail for a loss due to slippage that is less than + // the cost of the gas of the failed transaction + var fraction = dollarCostToUse.asFraction.divide(outputDollarValue.asFraction); + var result = new sdkCore.Percent(fraction.numerator, fraction.denominator); + if (result.greaterThan(MAX_AUTO_SLIPPAGE_TOLERANCE)) + return MAX_AUTO_SLIPPAGE_TOLERANCE; + if (result.lessThan(MIN_AUTO_SLIPPAGE_TOLERANCE)) + return MIN_AUTO_SLIPPAGE_TOLERANCE; + return result; + } + return V3_SWAP_DEFAULT_SLIPPAGE; + }, [trade, onL2, nativeGasPrice, gasEstimate, nativeCurrency, nativeCurrencyPrice, chainId, outputDollarValue]); +} + +/** + * Transforms a Routing API quote into an array of routes that can be used to create + * a `Trade`. + */ +function computeRoutes(currencyIn, currencyOut, tradeType, quoteResult) { + if (!quoteResult || !quoteResult.route || !currencyIn || !currencyOut) + return undefined; + if (quoteResult.route.length === 0) + return []; + var parsedTokenIn = parseToken(quoteResult.route[0][0].tokenIn); + var parsedTokenOut = parseToken(quoteResult.route[0][quoteResult.route[0].length - 1].tokenOut); + if (parsedTokenIn.address !== currencyIn.wrapped.address) + return undefined; + if (parsedTokenOut.address !== currencyOut.wrapped.address) + return undefined; + var parsedCurrencyIn = currencyIn.isNative ? nativeOnChain(currencyIn.chainId) : parsedTokenIn; + var parsedCurrencyOut = currencyOut.isNative ? nativeOnChain(currencyOut.chainId) : parsedTokenOut; + try { + return quoteResult.route.map(function (route) { + if (route.length === 0) { + throw new Error('Expected route to have at least one pair or pool'); + } + var rawAmountIn = route[0].amountIn; + var rawAmountOut = route[route.length - 1].amountOut; + if (!rawAmountIn || !rawAmountOut) { + throw new Error('Expected both amountIn and amountOut to be present'); + } + return { + routev3: isV3Route(route) ? new v3Sdk.Route(route.map(parsePool), parsedCurrencyIn, parsedCurrencyOut) : null, + routev2: !isV3Route(route) ? new v2Sdk.Route(route.map(parsePair), parsedCurrencyIn, parsedCurrencyOut) : null, + inputAmount: sdkCore.CurrencyAmount.fromRawAmount(parsedCurrencyIn, rawAmountIn), + outputAmount: sdkCore.CurrencyAmount.fromRawAmount(parsedCurrencyOut, rawAmountOut), + }; + }); + } + catch (e) { + // `Route` constructor may throw if inputs/outputs are temporarily out of sync + // (RTK-Query always returns the latest data which may not be the right inputs/outputs) + // This is not fatal and will fix itself in future render cycles + console.error(e); + return undefined; + } +} +function transformRoutesToTrade(route, tradeType, gasUseEstimateUSD) { + var _a, _b; + return new InterfaceTrade({ + v2Routes: (_a = route === null || route === void 0 ? void 0 : route.filter(function (r) { return r.routev2 !== null; }).map(function (_a) { + var routev2 = _a.routev2, inputAmount = _a.inputAmount, outputAmount = _a.outputAmount; + return ({ routev2: routev2, inputAmount: inputAmount, outputAmount: outputAmount }); + })) !== null && _a !== void 0 ? _a : [], + v3Routes: (_b = route === null || route === void 0 ? void 0 : route.filter(function (r) { return r.routev3 !== null; }).map(function (_a) { + var routev3 = _a.routev3, inputAmount = _a.inputAmount, outputAmount = _a.outputAmount; + return ({ routev3: routev3, inputAmount: inputAmount, outputAmount: outputAmount }); + })) !== null && _b !== void 0 ? _b : [], + tradeType: tradeType, + gasUseEstimateUSD: gasUseEstimateUSD, + }); +} +var parseToken = function (_a) { + var address = _a.address, chainId = _a.chainId, decimals = _a.decimals, symbol = _a.symbol; + return new sdkCore.Token(chainId, address, parseInt(decimals.toString()), symbol); +}; +var parsePool = function (_a) { + var fee = _a.fee, sqrtRatioX96 = _a.sqrtRatioX96, liquidity = _a.liquidity, tickCurrent = _a.tickCurrent, tokenIn = _a.tokenIn, tokenOut = _a.tokenOut; + return new v3Sdk.Pool(parseToken(tokenIn), parseToken(tokenOut), parseInt(fee), sqrtRatioX96, liquidity, parseInt(tickCurrent)); +}; +var parsePair = function (_a) { + var reserve0 = _a.reserve0, reserve1 = _a.reserve1; + return new v2Sdk.Pair(sdkCore.CurrencyAmount.fromRawAmount(parseToken(reserve0.token), reserve0.quotient), sdkCore.CurrencyAmount.fromRawAmount(parseToken(reserve1.token), reserve1.quotient)); +}; +function isV3Route(route) { + return route[0].type === 'v3-pool'; +} + +function useFreshData(data, dataBlockNumber, maxBlockAge) { + if (maxBlockAge === void 0) { maxBlockAge = 10; } + var localBlockNumber = useBlockNumber(); + if (!localBlockNumber) + return undefined; + if (localBlockNumber - dataBlockNumber > maxBlockAge) { + return undefined; + } + return data; +} +/** + * Returns query arguments for the Routing API query or undefined if the + * query should be skipped. + */ +function useRoutingAPIArguments(_a) { + var tokenIn = _a.tokenIn, tokenOut = _a.tokenOut, amount = _a.amount, tradeType = _a.tradeType; + var _b = __read(useClientSideRouter(), 1), clientSideRouter = _b[0]; + return React.useMemo(function () { + return !tokenIn || !tokenOut || !amount || tokenIn.equals(tokenOut) + ? undefined + : { + amount: amount.quotient.toString(), + tokenInAddress: tokenIn.wrapped.address, + tokenInChainId: tokenIn.wrapped.chainId, + tokenInDecimals: tokenIn.wrapped.decimals, + tokenInSymbol: tokenIn.wrapped.symbol, + tokenOutAddress: tokenOut.wrapped.address, + tokenOutChainId: tokenOut.wrapped.chainId, + tokenOutDecimals: tokenOut.wrapped.decimals, + tokenOutSymbol: tokenOut.wrapped.symbol, + useClientSideRouter: clientSideRouter, + type: (tradeType === sdkCore.TradeType.EXACT_INPUT ? 'exactIn' : 'exactOut'), + }; + }, [amount, clientSideRouter, tokenIn, tokenOut, tradeType]); +} +/** + * Returns the best trade by invoking the routing api or the smart order router on the client + * @param tradeType whether the swap is an exact in/out + * @param amountSpecified the exact amount to swap in/out + * @param otherCurrency the desired output/payment currency + */ +function useRoutingAPITrade(tradeType, amountSpecified, otherCurrency) { + var _a; + var _b = __read(React.useMemo(function () { + return tradeType === sdkCore.TradeType.EXACT_INPUT + ? [amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, otherCurrency] + : [otherCurrency, amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency]; + }, [amountSpecified, otherCurrency, tradeType]), 2), currencyIn = _b[0], currencyOut = _b[1]; + var queryArgs = useRoutingAPIArguments({ + tokenIn: currencyIn, + tokenOut: currencyOut, + amount: amountSpecified, + tradeType: tradeType, + }); + var _c = useGetQuoteQuery(queryArgs !== null && queryArgs !== void 0 ? queryArgs : react.skipToken, { + pollingInterval: ms__default["default"](templateObject_1$4 || (templateObject_1$4 = __makeTemplateObject(["15s"], ["15s"]))), + refetchOnFocus: true, + }), isLoading = _c.isLoading, isError = _c.isError, data = _c.data; + var quoteResult = useFreshData(data, Number(data === null || data === void 0 ? void 0 : data.blockNumber) || 0); + var route = React.useMemo(function () { return computeRoutes(currencyIn, currencyOut, tradeType, quoteResult); }, [currencyIn, currencyOut, quoteResult, tradeType]); + // get USD gas cost of trade in active chains stablecoin amount + var gasUseEstimateUSD = (_a = useStablecoinAmountFromFiatValue(quoteResult === null || quoteResult === void 0 ? void 0 : quoteResult.gasUseEstimateUSD)) !== null && _a !== void 0 ? _a : null; + return React.useMemo(function () { + if (!currencyIn || !currencyOut) { + return { + state: TradeState.INVALID, + trade: undefined, + }; + } + if (isLoading && !quoteResult) { + // only on first hook render + return { + state: TradeState.LOADING, + trade: undefined, + }; + } + var otherAmount = tradeType === sdkCore.TradeType.EXACT_INPUT + ? currencyOut && quoteResult + ? sdkCore.CurrencyAmount.fromRawAmount(currencyOut, quoteResult.quote) + : undefined + : currencyIn && quoteResult + ? sdkCore.CurrencyAmount.fromRawAmount(currencyIn, quoteResult.quote) + : undefined; + if (isError || !otherAmount || !route || route.length === 0 || !queryArgs) { + return { + state: TradeState.NO_ROUTE_FOUND, + trade: undefined, + }; + } + try { + var trade = transformRoutesToTrade(route, tradeType, gasUseEstimateUSD); + return { + // always return VALID regardless of isFetching status + state: TradeState.VALID, + trade: trade, + }; + } + catch (e) { + console.debug('transformRoutesToTrade failed: ', e); + return { state: TradeState.INVALID, trade: undefined }; + } + }, [currencyIn, currencyOut, isLoading, quoteResult, tradeType, isError, route, queryArgs, gasUseEstimateUSD]); +} +var templateObject_1$4; + +/** + * Returns the best v2+v3 trade for a desired swap. + * @param tradeType whether the swap is an exact in/out + * @param amountSpecified the exact amount to swap in/out + * @param otherCurrency the desired output/payment currency + */ +function useBestTrade(tradeType, amountSpecified, otherCurrency) { + var autoRouterSupported = useAutoRouterSupported(); + var isWindowVisible = useIsWindowVisible(); + var _a = __read(useDebounce(React.useMemo(function () { return [amountSpecified, otherCurrency]; }, [amountSpecified, otherCurrency]), 200), 2), debouncedAmount = _a[0], debouncedOtherCurrency = _a[1]; + var routingAPITrade = useRoutingAPITrade(tradeType, autoRouterSupported && isWindowVisible ? debouncedAmount : undefined, debouncedOtherCurrency); + var isLoading = amountSpecified !== undefined && debouncedAmount === undefined; + // consider trade debouncing when inputs/outputs do not match + var debouncing = routingAPITrade.trade && + amountSpecified && + (tradeType === sdkCore.TradeType.EXACT_INPUT + ? !routingAPITrade.trade.inputAmount.equalTo(amountSpecified) || + !amountSpecified.currency.equals(routingAPITrade.trade.inputAmount.currency) || + !(debouncedOtherCurrency === null || debouncedOtherCurrency === void 0 ? void 0 : debouncedOtherCurrency.equals(routingAPITrade.trade.outputAmount.currency)) + : !routingAPITrade.trade.outputAmount.equalTo(amountSpecified) || + !amountSpecified.currency.equals(routingAPITrade.trade.outputAmount.currency) || + !(debouncedOtherCurrency === null || debouncedOtherCurrency === void 0 ? void 0 : debouncedOtherCurrency.equals(routingAPITrade.trade.inputAmount.currency))); + var useFallback = !autoRouterSupported || (!debouncing && routingAPITrade.state === TradeState.NO_ROUTE_FOUND); + // only use client side router if routing api trade failed or is not supported + var bestV3Trade = useClientSideV3Trade(tradeType, useFallback ? debouncedAmount : undefined, useFallback ? debouncedOtherCurrency : undefined); + // only return gas estimate from api if routing api trade is used + return React.useMemo(function () { return (__assign(__assign(__assign({}, (useFallback ? bestV3Trade : routingAPITrade)), (debouncing ? { state: TradeState.SYNCING } : {})), (isLoading ? { state: TradeState.LOADING } : {}))); }, [bestV3Trade, debouncing, isLoading, routingAPITrade, useFallback]); +} + +function useSwapState() { + return useAppSelector(function (state) { return state.swap; }); +} +function useSwapActionHandlers() { + var dispatch = useAppDispatch(); + var onCurrencySelection = React.useCallback(function (field, currency) { + dispatch(selectCurrency({ + field: field, + currencyId: currency.isToken ? currency.address : currency.isNative ? 'ETH' : '', + })); + }, [dispatch]); + var onSwitchTokens = React.useCallback(function () { + dispatch(switchCurrencies()); + }, [dispatch]); + var onUserInput = React.useCallback(function (field, typedValue) { + dispatch(typeInput({ field: field, typedValue: typedValue })); + }, [dispatch]); + var onChangeRecipient = React.useCallback(function (recipient) { + dispatch(setRecipient({ recipient: recipient })); + }, [dispatch]); + return { + onSwitchTokens: onSwitchTokens, + onCurrencySelection: onCurrencySelection, + onUserInput: onUserInput, + onChangeRecipient: onChangeRecipient, + }; +} +var BAD_RECIPIENT_ADDRESSES = { + '0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f': true, + '0xf164fC0Ec4E93095b804a4795bBe1e041497b92a': true, + '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D': true, // v2 router 02 +}; +// from the current swap inputs, compute the best trade and return it. +function useDerivedSwapInfo() { + var _a, _b; + var account = useActiveWeb3React().account; + var _c = useSwapState(), independentField = _c.independentField, typedValue = _c.typedValue, _d = Field.INPUT, inputCurrencyId = _c[_d].currencyId, _e = Field.OUTPUT, outputCurrencyId = _c[_e].currencyId, recipient = _c.recipient; + var inputCurrency = useCurrency(inputCurrencyId); + var outputCurrency = useCurrency(outputCurrencyId); + var recipientLookup = useENS(recipient !== null && recipient !== void 0 ? recipient : undefined); + var to = (_a = (recipient === null ? account : recipientLookup.address)) !== null && _a !== void 0 ? _a : null; + var relevantTokenBalances = useCurrencyBalances(account !== null && account !== void 0 ? account : undefined, React.useMemo(function () { return [inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : undefined, outputCurrency !== null && outputCurrency !== void 0 ? outputCurrency : undefined]; }, [inputCurrency, outputCurrency])); + var isExactIn = independentField === Field.INPUT; + var parsedAmount = React.useMemo(function () { var _a; return tryParseCurrencyAmount(typedValue, (_a = (isExactIn ? inputCurrency : outputCurrency)) !== null && _a !== void 0 ? _a : undefined); }, [inputCurrency, isExactIn, outputCurrency, typedValue]); + var trade = useBestTrade(isExactIn ? sdkCore.TradeType.EXACT_INPUT : sdkCore.TradeType.EXACT_OUTPUT, parsedAmount, (_b = (isExactIn ? outputCurrency : inputCurrency)) !== null && _b !== void 0 ? _b : undefined); + var currencyBalances = React.useMemo(function () { + var _a; + return (_a = {}, + _a[Field.INPUT] = relevantTokenBalances[0], + _a[Field.OUTPUT] = relevantTokenBalances[1], + _a); + }, [relevantTokenBalances]); + var currencies = React.useMemo(function () { + var _a; + return (_a = {}, + _a[Field.INPUT] = inputCurrency, + _a[Field.OUTPUT] = outputCurrency, + _a); + }, [inputCurrency, outputCurrency]); + // allowed slippage is either auto slippage, or custom user defined slippage if auto slippage disabled + var autoSlippageTolerance = useAutoSlippageTolerance(trade.trade); + var allowedSlippage = useUserSlippageToleranceWithDefault(autoSlippageTolerance); + var inputError = React.useMemo(function () { + var _a; + var inputError; + if (!account) { + inputError = jsxRuntime.jsx(macro.Trans, { children: "Connect Wallet" }, void 0); + } + if (!currencies[Field.INPUT] || !currencies[Field.OUTPUT]) { + inputError = inputError !== null && inputError !== void 0 ? inputError : jsxRuntime.jsx(macro.Trans, { children: "Select a token" }, void 0); + } + if (!parsedAmount) { + inputError = inputError !== null && inputError !== void 0 ? inputError : jsxRuntime.jsx(macro.Trans, { children: "Enter an amount" }, void 0); + } + var formattedTo = isAddress(to); + if (!to || !formattedTo) { + inputError = inputError !== null && inputError !== void 0 ? inputError : jsxRuntime.jsx(macro.Trans, { children: "Enter a recipient" }, void 0); + } + else { + if (BAD_RECIPIENT_ADDRESSES[formattedTo]) { + inputError = inputError !== null && inputError !== void 0 ? inputError : jsxRuntime.jsx(macro.Trans, { children: "Invalid recipient" }, void 0); + } + } + // compare input balance to max input based on version + var _b = __read([currencyBalances[Field.INPUT], (_a = trade.trade) === null || _a === void 0 ? void 0 : _a.maximumAmountIn(allowedSlippage)], 2), balanceIn = _b[0], amountIn = _b[1]; + if (balanceIn && amountIn && balanceIn.lessThan(amountIn)) { + inputError = jsxRuntime.jsxs(macro.Trans, { children: ["Insufficient ", amountIn.currency.symbol, " balance"] }, void 0); + } + return inputError; + }, [account, allowedSlippage, currencies, currencyBalances, parsedAmount, to, trade.trade]); + return React.useMemo(function () { return ({ + currencies: currencies, + currencyBalances: currencyBalances, + parsedAmount: parsedAmount, + inputError: inputError, + trade: trade, + allowedSlippage: allowedSlippage, + }); }, [allowedSlippage, currencies, currencyBalances, inputError, parsedAmount, trade]); +} +function parseCurrencyFromURLParameter(urlParam) { + if (typeof urlParam === 'string') { + var valid = isAddress(urlParam); + if (valid) + return valid; + if (urlParam.toUpperCase() === 'ETH') + return 'ETH'; + } + return ''; +} +function parseTokenAmountURLParameter(urlParam) { + return typeof urlParam === 'string' && !isNaN(parseFloat(urlParam)) ? urlParam : ''; +} +function parseIndependentFieldURLParameter(urlParam) { + return typeof urlParam === 'string' && urlParam.toLowerCase() === 'output' ? Field.OUTPUT : Field.INPUT; +} +var ENS_NAME_REGEX = /^[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)?$/; +var ADDRESS_REGEX = /^0x[a-fA-F0-9]{40}$/; +function validatedRecipient(recipient) { + if (typeof recipient !== 'string') + return null; + var address = isAddress(recipient); + if (address) + return address; + if (ENS_NAME_REGEX.test(recipient)) + return recipient; + if (ADDRESS_REGEX.test(recipient)) + return recipient; + return null; +} +function queryParametersToSwapState(parsedQs) { + var _a; + var inputCurrency = parseCurrencyFromURLParameter(parsedQs.inputCurrency); + var outputCurrency = parseCurrencyFromURLParameter(parsedQs.outputCurrency); + if (inputCurrency === '' && outputCurrency === '') { + // default to ETH input + inputCurrency = 'ETH'; + } + else if (inputCurrency === outputCurrency) { + // clear output if identical + outputCurrency = ''; + } + var recipient = validatedRecipient(parsedQs.recipient); + return _a = {}, + _a[Field.INPUT] = { + currencyId: inputCurrency === '' ? null : inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : null, + }, + _a[Field.OUTPUT] = { + currencyId: outputCurrency === '' ? null : outputCurrency !== null && outputCurrency !== void 0 ? outputCurrency : null, + }, + _a.typedValue = parseTokenAmountURLParameter(parsedQs.exactAmount), + _a.independentField = parseIndependentFieldURLParameter(parsedQs.exactField), + _a.recipient = recipient, + _a; +} +// updates the swap state to use the defaults for a given network +function useDefaultsFromURLSearch() { + var chainId = useActiveWeb3React().chainId; + var dispatch = useAppDispatch(); + var parsedQs = useParsedQueryString(); + var _a = __read(React.useState(), 2), result = _a[0], setResult = _a[1]; + React.useEffect(function () { + var _a, _b; + if (!chainId) + return; + var parsed = queryParametersToSwapState(parsedQs); + var inputCurrencyId = (_a = parsed[Field.INPUT].currencyId) !== null && _a !== void 0 ? _a : undefined; + var outputCurrencyId = (_b = parsed[Field.OUTPUT].currencyId) !== null && _b !== void 0 ? _b : undefined; + dispatch(replaceSwapState({ + typedValue: parsed.typedValue, + field: parsed.independentField, + inputCurrencyId: inputCurrencyId, + outputCurrencyId: outputCurrencyId, + recipient: parsed.recipient, + })); + setResult({ inputCurrencyId: inputCurrencyId, outputCurrencyId: outputCurrencyId }); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [dispatch, chainId]); + return result; +} + +var initialState$2 = queryParametersToSwapState(parsedQueryString()); +var swap = toolkit.createReducer(initialState$2, function (builder) { + return builder + .addCase(replaceSwapState, function (state, _a) { + var _b; + var _c = _a.payload, typedValue = _c.typedValue, recipient = _c.recipient, field = _c.field, inputCurrencyId = _c.inputCurrencyId, outputCurrencyId = _c.outputCurrencyId; + return _b = {}, + _b[Field.INPUT] = { + currencyId: inputCurrencyId !== null && inputCurrencyId !== void 0 ? inputCurrencyId : null, + }, + _b[Field.OUTPUT] = { + currencyId: outputCurrencyId !== null && outputCurrencyId !== void 0 ? outputCurrencyId : null, + }, + _b.independentField = field, + _b.typedValue = typedValue, + _b.recipient = recipient, + _b; + }) + .addCase(selectCurrency, function (state, _a) { + var _b, _c; + var _d = _a.payload, currencyId = _d.currencyId, field = _d.field; + var otherField = field === Field.INPUT ? Field.OUTPUT : Field.INPUT; + if (currencyId === state[otherField].currencyId) { + // the case where we have to swap the order + return __assign(__assign({}, state), (_b = { independentField: state.independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT }, _b[field] = { currencyId: currencyId }, _b[otherField] = { currencyId: state[field].currencyId }, _b)); + } + else { + // the normal case + return __assign(__assign({}, state), (_c = {}, _c[field] = { currencyId: currencyId }, _c)); + } + }) + .addCase(switchCurrencies, function (state) { + var _a; + return __assign(__assign({}, state), (_a = { independentField: state.independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT }, _a[Field.INPUT] = { currencyId: state[Field.OUTPUT].currencyId }, _a[Field.OUTPUT] = { currencyId: state[Field.INPUT].currencyId }, _a)); + }) + .addCase(typeInput, function (state, _a) { + var _b = _a.payload, field = _b.field, typedValue = _b.typedValue; + return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); + }) + .addCase(setRecipient, function (state, _a) { + var recipient = _a.payload.recipient; + state.recipient = recipient; + }); +}); + +var now = function () { return new Date().getTime(); }; +var initialState$1 = {}; +var transactions = toolkit.createReducer(initialState$1, function (builder) { + return builder + .addCase(updateVersion, function (transactions) { + // in case there are any transactions in the store with the old format, remove them + Object.keys(transactions).forEach(function (chainId) { + var chainTransactions = transactions[chainId]; + Object.keys(chainTransactions).forEach(function (hash) { + if (!('info' in chainTransactions[hash])) { + // clear old transactions that don't have the right format + delete chainTransactions[hash]; + } + }); + }); + }) + .addCase(addTransaction, function (transactions, _a) { + var _b, _c; + var _d = _a.payload, chainId = _d.chainId, from = _d.from, hash = _d.hash, info = _d.info; + if ((_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash]) { + throw Error('Attempted to add existing transaction.'); + } + var txs = (_c = transactions[chainId]) !== null && _c !== void 0 ? _c : {}; + txs[hash] = { hash: hash, info: info, from: from, addedTime: now() }; + transactions[chainId] = txs; + }) + .addCase(clearAllTransactions, function (transactions, _a) { + var chainId = _a.payload.chainId; + if (!transactions[chainId]) + return; + transactions[chainId] = {}; + }) + .addCase(checkedTransaction, function (transactions, _a) { + var _b; + var _c = _a.payload, chainId = _c.chainId, hash = _c.hash, blockNumber = _c.blockNumber; + var tx = (_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash]; + if (!tx) { + return; + } + if (!tx.lastCheckedBlockNumber) { + tx.lastCheckedBlockNumber = blockNumber; + } + else { + tx.lastCheckedBlockNumber = Math.max(blockNumber, tx.lastCheckedBlockNumber); + } + }) + .addCase(finalizeTransaction, function (transactions, _a) { + var _b; + var _c = _a.payload, hash = _c.hash, chainId = _c.chainId, receipt = _c.receipt; + var tx = (_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash]; + if (!tx) { + return; + } + tx.receipt = receipt; + tx.confirmedTime = now(); + }); +}); + +var currentTimestamp = function () { return new Date().getTime(); }; +function pairKey(token0Address, token1Address) { + return token0Address + ";" + token1Address; +} +var initialState = { + matchesDarkMode: false, + userDarkMode: null, + userExpertMode: false, + userLocale: null, + userClientSideRouter: false, + userHideClosedPositions: false, + userSlippageTolerance: 'auto', + userSlippageToleranceHasBeenMigratedToAuto: true, + userDeadline: DEFAULT_DEADLINE_FROM_NOW, + tokens: {}, + pairs: {}, + timestamp: currentTimestamp(), + URLWarningVisible: true, + showSurveyPopup: undefined, +}; +var user = toolkit.createReducer(initialState, function (builder) { + return builder + .addCase(updateVersion, function (state) { + // slippage isnt being tracked in local storage, reset to default + // noinspection SuspiciousTypeOfGuard + if (typeof state.userSlippageTolerance !== 'number' || + !Number.isInteger(state.userSlippageTolerance) || + state.userSlippageTolerance < 0 || + state.userSlippageTolerance > 5000) { + state.userSlippageTolerance = 'auto'; + } + else { + if (!state.userSlippageToleranceHasBeenMigratedToAuto && + [10, 50, 100].indexOf(state.userSlippageTolerance) !== -1) { + state.userSlippageTolerance = 'auto'; + state.userSlippageToleranceHasBeenMigratedToAuto = true; + } + } + // deadline isnt being tracked in local storage, reset to default + // noinspection SuspiciousTypeOfGuard + if (typeof state.userDeadline !== 'number' || + !Number.isInteger(state.userDeadline) || + state.userDeadline < 60 || + state.userDeadline > 180 * 60) { + state.userDeadline = DEFAULT_DEADLINE_FROM_NOW; + } + state.lastUpdateVersionTimestamp = currentTimestamp(); + }) + .addCase(updateUserDarkMode, function (state, action) { + state.userDarkMode = action.payload.userDarkMode; + state.timestamp = currentTimestamp(); + }) + .addCase(updateMatchesDarkMode, function (state, action) { + state.matchesDarkMode = action.payload.matchesDarkMode; + state.timestamp = currentTimestamp(); + }) + .addCase(updateUserExpertMode, function (state, action) { + state.userExpertMode = action.payload.userExpertMode; + state.timestamp = currentTimestamp(); + }) + .addCase(updateUserLocale, function (state, action) { + state.userLocale = action.payload.userLocale; + state.timestamp = currentTimestamp(); + }) + .addCase(updateUserSlippageTolerance, function (state, action) { + state.userSlippageTolerance = action.payload.userSlippageTolerance; + state.timestamp = currentTimestamp(); + }) + .addCase(updateUserDeadline, function (state, action) { + state.userDeadline = action.payload.userDeadline; + state.timestamp = currentTimestamp(); + }) + .addCase(updateUserClientSideRouter, function (state, action) { + state.userClientSideRouter = action.payload.userClientSideRouter; + }) + .addCase(updateHideClosedPositions, function (state, action) { + state.userHideClosedPositions = action.payload.userHideClosedPositions; + }) + .addCase(updateShowSurveyPopup, function (state, action) { + state.showSurveyPopup = action.payload.showSurveyPopup; + }) + .addCase(addSerializedToken, function (state, _a) { + var serializedToken = _a.payload.serializedToken; + if (!state.tokens) { + state.tokens = {}; + } + state.tokens[serializedToken.chainId] = state.tokens[serializedToken.chainId] || {}; + state.tokens[serializedToken.chainId][serializedToken.address] = serializedToken; + state.timestamp = currentTimestamp(); + }) + .addCase(removeSerializedToken, function (state, _a) { + var _b = _a.payload, address = _b.address, chainId = _b.chainId; + if (!state.tokens) { + state.tokens = {}; + } + state.tokens[chainId] = state.tokens[chainId] || {}; + delete state.tokens[chainId][address]; + state.timestamp = currentTimestamp(); + }) + .addCase(addSerializedPair, function (state, _a) { + var serializedPair = _a.payload.serializedPair; + if (serializedPair.token0.chainId === serializedPair.token1.chainId && + serializedPair.token0.address !== serializedPair.token1.address) { + var chainId = serializedPair.token0.chainId; + state.pairs[chainId] = state.pairs[chainId] || {}; + state.pairs[chainId][pairKey(serializedPair.token0.address, serializedPair.token1.address)] = serializedPair; + } + state.timestamp = currentTimestamp(); + }) + .addCase(removeSerializedPair, function (state, _a) { + var _b = _a.payload, chainId = _b.chainId, tokenAAddress = _b.tokenAAddress, tokenBAddress = _b.tokenBAddress; + if (state.pairs[chainId]) { + // just delete both keys if either exists + delete state.pairs[chainId][pairKey(tokenAAddress, tokenBAddress)]; + delete state.pairs[chainId][pairKey(tokenBAddress, tokenAAddress)]; + } + state.timestamp = currentTimestamp(); + }); +}); + +var _a$2; +var PERSISTED_KEYS = ['user', 'transactions', 'lists']; +var store = toolkit.configureStore({ + reducer: (_a$2 = { + application: application, + user: user, + transactions: transactions, + swap: swap, + mint: mint, + mintV3: mintV3, + burn: burn, + burnV3: burnV3, + multicall: multicall.reducer, + lists: lists, + logs: logs + }, + _a$2[api.reducerPath] = api.reducer, + _a$2[routingApi.reducerPath] = routingApi.reducer, + _a$2), + middleware: function (getDefaultMiddleware) { + return getDefaultMiddleware({ thunk: true }) + .concat(api.middleware) + .concat(routingApi.middleware) + .concat(reduxLocalstorageSimple.save({ states: PERSISTED_KEYS, debounce: 1000 })); + }, + preloadedState: reduxLocalstorageSimple.load({ states: PERSISTED_KEYS, disableWarnings: process.env.NODE_ENV === 'test' }), +}); +store.dispatch(updateVersion()); +react.setupListeners(store.dispatch); + +var _a$1, _b$1, _c$1; +/** + * Given a locale string (e.g. from user agent), return the best match for corresponding SupportedLocale + * @param maybeSupportedLocale the fuzzy locale identifier + */ +function parseLocale(maybeSupportedLocale) { + if (typeof maybeSupportedLocale !== 'string') + return undefined; + var lowerMaybeSupportedLocale = maybeSupportedLocale.toLowerCase(); + return SUPPORTED_LOCALES.find(function (locale) { return locale.toLowerCase() === lowerMaybeSupportedLocale || locale.split('-')[0] === lowerMaybeSupportedLocale; }); +} +/** + * Returns the supported locale read from the user agent (navigator) + */ +function navigatorLocale() { + var _a; + if (!navigator.language) + return undefined; + var _b = __read(navigator.language.split('-'), 2), language = _b[0], region = _b[1]; + if (region) { + return (_a = parseLocale(language + "-" + region.toUpperCase())) !== null && _a !== void 0 ? _a : parseLocale(language); + } + return parseLocale(language); +} +function storeLocale() { + var _a; + return (_a = store.getState().user.userLocale) !== null && _a !== void 0 ? _a : undefined; +} +(_c$1 = (_b$1 = (_a$1 = parseLocale(parsedQueryString().lng)) !== null && _a$1 !== void 0 ? _a$1 : storeLocale()) !== null && _b$1 !== void 0 ? _b$1 : navigatorLocale()) !== null && _c$1 !== void 0 ? _c$1 : DEFAULT_LOCALE; +function useUrlLocale() { + var parsed = useParsedQueryString(); + return parseLocale(parsed.lng); +} +/** + * Returns the currently active locale, from a combination of user agent, query string, and user settings stored in redux + * Stores the query string locale in redux (if set) to persist across sessions + */ +function useActiveLocale() { + var urlLocale = useUrlLocale(); + var userLocale = useUserLocale(); + return React.useMemo(function () { var _a, _b; return (_b = (_a = urlLocale !== null && urlLocale !== void 0 ? urlLocale : userLocale) !== null && _a !== void 0 ? _a : navigatorLocale()) !== null && _b !== void 0 ? _b : DEFAULT_LOCALE; }, [urlLocale, userLocale]); +} + +function useLocationLinkProps(locale) { + var location = reactRouterDom.useLocation(); + var qs$1 = useParsedQueryString(); + var activeLocale = useActiveLocale(); + return React.useMemo(function () { + return !locale + ? {} + : { + to: __assign(__assign({}, location), { search: qs.stringify(__assign(__assign({}, qs$1), { lng: locale })) }), + onClick: function () { + ReactGA__default["default"].event({ + category: 'Localization', + action: 'Switch Locale', + label: activeLocale + " -> " + locale, + }); + }, + }; + }, [location, qs$1, activeLocale, locale]); +} + +var Container = styled__default["default"](ThemedText.Small)(templateObject_1$3 || (templateObject_1$3 = __makeTemplateObject(["\n opacity: 0.6;\n :hover {\n opacity: 1;\n }\n margin-top: 1rem !important;\n"], ["\n opacity: 0.6;\n :hover {\n opacity: 1;\n }\n margin-top: 1rem !important;\n"]))); +var useTargetLocale = function (activeLocale) { + var browserLocale = React.useMemo(function () { return navigatorLocale(); }, []); + if (browserLocale && (browserLocale !== DEFAULT_LOCALE || activeLocale !== DEFAULT_LOCALE)) { + if (activeLocale === browserLocale) { + return DEFAULT_LOCALE; + } + else { + return browserLocale; + } + } + return null; +}; +function SwitchLocaleLink() { + var activeLocale = useActiveLocale(); + var targetLocale = useTargetLocale(activeLocale); + var _a = useLocationLinkProps(targetLocale), to = _a.to, onClick = _a.onClick; + if (!targetLocale || !to) + return null; + return (jsxRuntime.jsx(Container, { children: jsxRuntime.jsxs(macro.Trans, { children: ["Uniswap available in:", ' ', jsxRuntime.jsx(StyledInternalLink, __assign({ onClick: onClick, to: to }, { children: LOCALE_LABEL[targetLocale] }), void 0)] }, void 0) }, void 0)); +} +var templateObject_1$3; + +function TokenWarningModal(_a) { + var isOpen = _a.isOpen, tokens = _a.tokens, onConfirm = _a.onConfirm, onDismiss = _a.onDismiss; + return (jsxRuntime.jsx(Modal, __assign({ isOpen: isOpen, onDismiss: onDismiss, maxHeight: 100 }, { children: jsxRuntime.jsx(ImportToken, { tokens: tokens, handleCurrencySelect: onConfirm }, void 0) }), void 0)); +} + +function useTokenAllowance(token, owner, spender) { + var contract = useTokenContract(token === null || token === void 0 ? void 0 : token.address, false); + var inputs = React.useMemo(function () { return [owner, spender]; }, [owner, spender]); + var allowance = useSingleCallResult(contract, 'allowance', inputs).result; + return React.useMemo(function () { return (token && allowance ? sdkCore.CurrencyAmount.fromRawAmount(token, allowance.toString()) : undefined); }, [token, allowance]); +} + +var ApprovalState; +(function (ApprovalState) { + ApprovalState["UNKNOWN"] = "UNKNOWN"; + ApprovalState["NOT_APPROVED"] = "NOT_APPROVED"; + ApprovalState["PENDING"] = "PENDING"; + ApprovalState["APPROVED"] = "APPROVED"; +})(ApprovalState || (ApprovalState = {})); +function useApprovalStateForSpender(amountToApprove, spender, useIsPendingApproval) { + var _a; + var account = useActiveWeb3React().account; + var token = ((_a = amountToApprove === null || amountToApprove === void 0 ? void 0 : amountToApprove.currency) === null || _a === void 0 ? void 0 : _a.isToken) ? amountToApprove.currency : undefined; + var currentAllowance = useTokenAllowance(token, account !== null && account !== void 0 ? account : undefined, spender); + var pendingApproval = useIsPendingApproval(token, spender); + return React.useMemo(function () { + if (!amountToApprove || !spender) + return ApprovalState.UNKNOWN; + if (amountToApprove.currency.isNative) + return ApprovalState.APPROVED; + // we might not have enough data to know whether or not we need to approve + if (!currentAllowance) + return ApprovalState.UNKNOWN; + // amountToApprove will be defined if currentAllowance is + return currentAllowance.lessThan(amountToApprove) + ? pendingApproval + ? ApprovalState.PENDING + : ApprovalState.NOT_APPROVED + : ApprovalState.APPROVED; + }, [amountToApprove, currentAllowance, pendingApproval, spender]); +} +function useApproval(amountToApprove, spender, useIsPendingApproval) { + var _this = this; + var _a; + var chainId = useActiveWeb3React().chainId; + var token = ((_a = amountToApprove === null || amountToApprove === void 0 ? void 0 : amountToApprove.currency) === null || _a === void 0 ? void 0 : _a.isToken) ? amountToApprove.currency : undefined; + // check the current approval status + var approvalState = useApprovalStateForSpender(amountToApprove, spender, useIsPendingApproval); + var tokenContract = useTokenContract(token === null || token === void 0 ? void 0 : token.address); + var approve = React.useCallback(function () { return __awaiter(_this, void 0, void 0, function () { + function logFailure(error) { + console.warn(((token === null || token === void 0 ? void 0 : token.symbol) || 'Token') + " approval failed:", error); + return; + } + var useExact, estimatedGas; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + // Bail early if there is an issue. + if (approvalState !== ApprovalState.NOT_APPROVED) { + return [2 /*return*/, logFailure('approve was called unnecessarily')]; + } + else if (!chainId) { + return [2 /*return*/, logFailure('no chainId')]; + } + else if (!token) { + return [2 /*return*/, logFailure('no token')]; + } + else if (!tokenContract) { + return [2 /*return*/, logFailure('tokenContract is null')]; + } + else if (!amountToApprove) { + return [2 /*return*/, logFailure('missing amount to approve')]; + } + else if (!spender) { + return [2 /*return*/, logFailure('no spender')]; + } + useExact = false; + return [4 /*yield*/, tokenContract.estimateGas.approve(spender, constants.MaxUint256).catch(function () { + // general fallback for tokens which restrict approval amounts + useExact = true; + return tokenContract.estimateGas.approve(spender, amountToApprove.quotient.toString()); + })]; + case 1: + estimatedGas = _a.sent(); + return [2 /*return*/, tokenContract + .approve(spender, useExact ? amountToApprove.quotient.toString() : constants.MaxUint256, { + gasLimit: calculateGasMargin(estimatedGas), + }) + .then(function (response) { return ({ + response: response, + tokenAddress: token.address, + spenderAddress: spender, + }); }) + .catch(function (error) { + logFailure(error); + throw error; + })]; + } + }); + }); }, [approvalState, token, tokenContract, amountToApprove, spender, chainId]); + return [approvalState, approve]; +} + +var SwapRouterVersion; +(function (SwapRouterVersion) { + SwapRouterVersion[SwapRouterVersion["V2"] = 0] = "V2"; + SwapRouterVersion[SwapRouterVersion["V3"] = 1] = "V3"; + SwapRouterVersion[SwapRouterVersion["V2V3"] = 2] = "V2V3"; +})(SwapRouterVersion || (SwapRouterVersion = {})); +/** + * Returns the swap router that will result in the least amount of txs (less gas) for a given swap. + * Heuristic: + * - if trade contains a single v2-only trade & V2 SwapRouter is approved: use V2 SwapRouter + * - if trade contains only v3 & V3 SwapRouter is approved: use V3 SwapRouter + * - else: approve and use V2+V3 SwapRouter + */ +function getTxOptimizedSwapRouter(_a) { + var onlyV2Routes = _a.onlyV2Routes, onlyV3Routes = _a.onlyV3Routes, tradeHasSplits = _a.tradeHasSplits, approvalStates = _a.approvalStates; + if ([approvalStates.v2, approvalStates.v3, approvalStates.v2V3].includes(ApprovalState.PENDING)) + return undefined; + if (approvalStates.v2V3 === ApprovalState.APPROVED) + return SwapRouterVersion.V2V3; + if (approvalStates.v2 === ApprovalState.APPROVED && onlyV2Routes && !tradeHasSplits) + return SwapRouterVersion.V2; + if (approvalStates.v3 === ApprovalState.APPROVED && onlyV3Routes) + return SwapRouterVersion.V3; + return SwapRouterVersion.V2V3; +} + +/** Returns approval state for all known swap routers */ +function useSwapApprovalStates(trade, allowedSlippage, useIsPendingApproval) { + var chainId = useActiveWeb3React().chainId; + var amountToApprove = React.useMemo(function () { return (trade && trade.inputAmount.currency.isToken ? trade.maximumAmountIn(allowedSlippage) : undefined); }, [trade, allowedSlippage]); + var v2RouterAddress = chainId ? V2_ROUTER_ADDRESS[chainId] : undefined; + var v3RouterAddress = chainId ? V3_ROUTER_ADDRESS[chainId] : undefined; + var swapRouterAddress = chainId ? SWAP_ROUTER_ADDRESSES[chainId] : undefined; + var v2 = useApprovalStateForSpender(amountToApprove, v2RouterAddress, useIsPendingApproval); + var v3 = useApprovalStateForSpender(amountToApprove, v3RouterAddress, useIsPendingApproval); + var v2V3 = useApprovalStateForSpender(amountToApprove, swapRouterAddress, useIsPendingApproval); + return React.useMemo(function () { return ({ v2: v2, v3: v3, v2V3: v2V3 }); }, [v2, v2V3, v3]); +} +function useSwapRouterAddress(trade) { + var chainId = useActiveWeb3React().chainId; + return React.useMemo(function () { + return chainId + ? trade instanceof v2Sdk.Trade + ? V2_ROUTER_ADDRESS[chainId] + : trade instanceof v3Sdk.Trade + ? V3_ROUTER_ADDRESS[chainId] + : SWAP_ROUTER_ADDRESSES[chainId] + : undefined; + }, [chainId, trade]); +} +// wraps useApproveCallback in the context of a swap +function useSwapApproval(trade, allowedSlippage, useIsPendingApproval) { + var amountToApprove = React.useMemo(function () { return (trade && trade.inputAmount.currency.isToken ? trade.maximumAmountIn(allowedSlippage) : undefined); }, [trade, allowedSlippage]); + var spender = useSwapRouterAddress(trade); + var approval = useApproval(amountToApprove, spender, useIsPendingApproval); + if (trade instanceof v2Sdk.Trade || trade instanceof v3Sdk.Trade) { + var approvalState = approval[0]; + invariant__default["default"](approvalState === ApprovalState.APPROVED, 'Trying to approve legacy router'); + } + return approval; +} +function useSwapApprovalOptimizedTrade(trade, allowedSlippage, useIsPendingApproval) { + var _a; + var onlyV2Routes = trade === null || trade === void 0 ? void 0 : trade.routes.every(function (route) { return route.protocol === routerSdk.Protocol.V2; }); + var onlyV3Routes = trade === null || trade === void 0 ? void 0 : trade.routes.every(function (route) { return route.protocol === routerSdk.Protocol.V3; }); + var tradeHasSplits = ((_a = trade === null || trade === void 0 ? void 0 : trade.routes.length) !== null && _a !== void 0 ? _a : 0) > 1; + var approvalStates = useSwapApprovalStates(trade, allowedSlippage, useIsPendingApproval); + var optimizedSwapRouter = React.useMemo(function () { return getTxOptimizedSwapRouter({ onlyV2Routes: onlyV2Routes, onlyV3Routes: onlyV3Routes, tradeHasSplits: tradeHasSplits, approvalStates: approvalStates }); }, [approvalStates, tradeHasSplits, onlyV2Routes, onlyV3Routes]); + return React.useMemo(function () { + if (!trade) + return undefined; + try { + switch (optimizedSwapRouter) { + case SwapRouterVersion.V2V3: + return trade; + case SwapRouterVersion.V2: + var pairs = trade.swaps[0].route.pools.filter(function (pool) { return pool instanceof v2Sdk.Pair; }); + var v2Route = new v2Sdk.Route(pairs, trade.inputAmount.currency, trade.outputAmount.currency); + return new v2Sdk.Trade(v2Route, trade.inputAmount, trade.tradeType); + case SwapRouterVersion.V3: + return v3Sdk.Trade.createUncheckedTradeWithMultipleRoutes({ + routes: trade.swaps.map(function (_a) { + var route = _a.route, inputAmount = _a.inputAmount, outputAmount = _a.outputAmount; + return ({ + route: new v3Sdk.Route(route.pools.filter(function (p) { return p instanceof v3Sdk.Pool; }), inputAmount.currency, outputAmount.currency), + inputAmount: inputAmount, + outputAmount: outputAmount, + }); + }), + tradeType: trade.tradeType, + }); + default: + return undefined; + } + } + catch (e) { + // TODO(#2989): remove try-catch + console.debug(e); + return undefined; + } + }, [trade, optimizedSwapRouter]); +} + +function useGetAndTrackApproval(getApproval) { + var addTransaction = useTransactionAdder(); + return React.useCallback(function () { + return getApproval().then(function (pending) { + if (pending) { + var response = pending.response, tokenAddress = pending.tokenAddress, spender = pending.spenderAddress; + addTransaction(response, { type: TransactionType.APPROVAL, tokenAddress: tokenAddress, spender: spender }); + } + }); + }, [addTransaction, getApproval]); +} +function useApprovalOptimizedTrade(trade, allowedSlippage) { + return useSwapApprovalOptimizedTrade(trade, allowedSlippage, useHasPendingApproval); +} +function useApproveCallbackFromTrade(trade, allowedSlippage) { + var _a = __read(useSwapApproval(trade, allowedSlippage, useHasPendingApproval), 2), approval = _a[0], getApproval = _a[1]; + return [approval, useGetAndTrackApproval(getApproval)]; +} + +function useIsArgentWallet() { + var _a, _b; + var account = useActiveWeb3React().account; + var argentWalletDetector = useArgentWalletDetectorContract(); + var inputs = React.useMemo(function () { return [account !== null && account !== void 0 ? account : undefined]; }, [account]); + var call = useSingleCallResult(argentWalletDetector, 'isArgentWallet', inputs, reduxMulticall.NEVER_RELOAD); + return (_b = (_a = call === null || call === void 0 ? void 0 : call.result) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : false; +} + +// combines the block timestamp with the user setting to give the deadline that should be used for any submitted transaction +function useTransactionDeadline() { + var chainId = useActiveWeb3React().chainId; + var ttl = useAppSelector(function (state) { return state.user.userDeadline; }); + var blockTimestamp = useCurrentBlockTimestamp(); + return React.useMemo(function () { + if (blockTimestamp && chainId && L2_CHAIN_IDS.includes(chainId)) + return blockTimestamp.add(L2_DEADLINE_FROM_NOW); + if (blockTimestamp && ttl) + return blockTimestamp.add(ttl); + return undefined; + }, [blockTimestamp, chainId, ttl]); +} + +var _a, _b, _c, _d, _e; +var PermitType; +(function (PermitType) { + PermitType[PermitType["AMOUNT"] = 1] = "AMOUNT"; + PermitType[PermitType["ALLOWED"] = 2] = "ALLOWED"; +})(PermitType || (PermitType = {})); +// 20 minutes to submit after signing +var PERMIT_VALIDITY_BUFFER = 20 * 60; +// todo: read this information from extensions on token lists or elsewhere (permit registry?) +var PERMITTABLE_TOKENS = { + 1: (_a = {}, + _a[USDC.address] = { type: PermitType.AMOUNT, name: 'USD Coin', version: '2' }, + _a[DAI.address] = { type: PermitType.ALLOWED, name: 'Dai Stablecoin', version: '1' }, + _a[UNI[1].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }, + _a), + 4: (_b = { + '0xc7AD46e0b8a400Bb3C915120d284AafbA8fc4735': { type: PermitType.ALLOWED, name: 'Dai Stablecoin', version: '1' } + }, + _b[UNI[4].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }, + _b), + 3: (_c = {}, + _c[UNI[3].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }, + _c['0x07865c6E87B9F70255377e024ace6630C1Eaa37F'] = { type: PermitType.AMOUNT, name: 'USD Coin', version: '2' }, + _c), + 5: (_d = {}, + _d[UNI[5].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }, + _d), + 42: (_e = {}, + _e[UNI[42].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }, + _e), +}; +var UseERC20PermitState; +(function (UseERC20PermitState) { + // returned for any reason, e.g. it is an argent wallet, or the currency does not support it + UseERC20PermitState[UseERC20PermitState["NOT_APPLICABLE"] = 0] = "NOT_APPLICABLE"; + UseERC20PermitState[UseERC20PermitState["LOADING"] = 1] = "LOADING"; + UseERC20PermitState[UseERC20PermitState["NOT_SIGNED"] = 2] = "NOT_SIGNED"; + UseERC20PermitState[UseERC20PermitState["SIGNED"] = 3] = "SIGNED"; +})(UseERC20PermitState || (UseERC20PermitState = {})); +var EIP712_DOMAIN_TYPE = [ + { name: 'name', type: 'string' }, + { name: 'version', type: 'string' }, + { name: 'chainId', type: 'uint256' }, + { name: 'verifyingContract', type: 'address' }, +]; +var EIP712_DOMAIN_TYPE_NO_VERSION = [ + { name: 'name', type: 'string' }, + { name: 'chainId', type: 'uint256' }, + { name: 'verifyingContract', type: 'address' }, +]; +var EIP2612_TYPE = [ + { name: 'owner', type: 'address' }, + { name: 'spender', type: 'address' }, + { name: 'value', type: 'uint256' }, + { name: 'nonce', type: 'uint256' }, + { name: 'deadline', type: 'uint256' }, +]; +var PERMIT_ALLOWED_TYPE = [ + { name: 'holder', type: 'address' }, + { name: 'spender', type: 'address' }, + { name: 'nonce', type: 'uint256' }, + { name: 'expiry', type: 'uint256' }, + { name: 'allowed', type: 'bool' }, +]; +function useERC20Permit(currencyAmount, spender, overridePermitInfo) { + var _a, _b; + var _c = useActiveWeb3React(), account = _c.account, chainId = _c.chainId, library = _c.library; + var transactionDeadline = useTransactionDeadline(); + var tokenAddress = ((_a = currencyAmount === null || currencyAmount === void 0 ? void 0 : currencyAmount.currency) === null || _a === void 0 ? void 0 : _a.isToken) ? currencyAmount.currency.address : undefined; + var eip2612Contract = useEIP2612Contract(tokenAddress); + var isArgentWallet = useIsArgentWallet(); + var nonceInputs = React.useMemo(function () { return [account !== null && account !== void 0 ? account : undefined]; }, [account]); + var tokenNonceState = useSingleCallResult(eip2612Contract, 'nonces', nonceInputs); + var permitInfo = overridePermitInfo !== null && overridePermitInfo !== void 0 ? overridePermitInfo : (chainId && tokenAddress ? (_b = PERMITTABLE_TOKENS[chainId]) === null || _b === void 0 ? void 0 : _b[tokenAddress] : undefined); + var _d = __read(React.useState(null), 2), signatureData = _d[0], setSignatureData = _d[1]; + return React.useMemo(function () { + var _a, _b; + if (isArgentWallet || + !currencyAmount || + !eip2612Contract || + !account || + !chainId || + !transactionDeadline || + !library || + !tokenNonceState.valid || + !tokenAddress || + !spender || + !permitInfo) { + return { + state: UseERC20PermitState.NOT_APPLICABLE, + signatureData: null, + gatherPermitSignature: null, + }; + } + var nonceNumber = (_b = (_a = tokenNonceState.result) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.toNumber(); + if (tokenNonceState.loading || typeof nonceNumber !== 'number') { + return { + state: UseERC20PermitState.LOADING, + signatureData: null, + gatherPermitSignature: null, + }; + } + var isSignatureDataValid = signatureData && + signatureData.owner === account && + signatureData.deadline >= transactionDeadline.toNumber() && + signatureData.tokenAddress === tokenAddress && + signatureData.nonce === nonceNumber && + signatureData.spender === spender && + ('allowed' in signatureData || JSBI__default["default"].equal(JSBI__default["default"].BigInt(signatureData.amount), currencyAmount.quotient)); + return { + state: isSignatureDataValid ? UseERC20PermitState.SIGNED : UseERC20PermitState.NOT_SIGNED, + signatureData: isSignatureDataValid ? signatureData : null, + gatherPermitSignature: function gatherPermitSignature() { + return __awaiter(this, void 0, void 0, function () { + var allowed, signatureDeadline, value, message, domain, data; + return __generator(this, function (_a) { + allowed = permitInfo.type === PermitType.ALLOWED; + signatureDeadline = transactionDeadline.toNumber() + PERMIT_VALIDITY_BUFFER; + value = currencyAmount.quotient.toString(); + message = allowed + ? { + holder: account, + spender: spender, + allowed: allowed, + nonce: nonceNumber, + expiry: signatureDeadline, + } + : { + owner: account, + spender: spender, + value: value, + nonce: nonceNumber, + deadline: signatureDeadline, + }; + domain = permitInfo.version + ? { + name: permitInfo.name, + version: permitInfo.version, + verifyingContract: tokenAddress, + chainId: chainId, + } + : { + name: permitInfo.name, + verifyingContract: tokenAddress, + chainId: chainId, + }; + data = JSON.stringify({ + types: { + EIP712Domain: permitInfo.version ? EIP712_DOMAIN_TYPE : EIP712_DOMAIN_TYPE_NO_VERSION, + Permit: allowed ? PERMIT_ALLOWED_TYPE : EIP2612_TYPE, + }, + domain: domain, + primaryType: 'Permit', + message: message, + }); + return [2 /*return*/, library + .send('eth_signTypedData_v4', [account, data]) + .then(bytes.splitSignature) + .then(function (signature) { + setSignatureData(__assign(__assign({ v: signature.v, r: signature.r, s: signature.s, deadline: signatureDeadline }, (allowed ? { allowed: allowed } : { amount: value })), { nonce: nonceNumber, chainId: chainId, owner: account, spender: spender, tokenAddress: tokenAddress, permitType: permitInfo.type })); + })]; + }); + }); + }, + }; + }, [ + currencyAmount, + eip2612Contract, + account, + chainId, + isArgentWallet, + transactionDeadline, + library, + tokenNonceState.loading, + tokenNonceState.valid, + tokenNonceState.result, + tokenAddress, + spender, + permitInfo, + signatureData, + ]); +} +({ + version: '1', + name: 'Uniswap V2', + type: PermitType.AMOUNT, +}); +function useERC20PermitFromTrade(trade, allowedSlippage) { + var chainId = useActiveWeb3React().chainId; + var swapRouterAddress = chainId + ? // v2 router does not support + trade instanceof v2Sdk.Trade + ? undefined + : trade instanceof v3Sdk.Trade + ? V3_ROUTER_ADDRESS[chainId] + : SWAP_ROUTER_ADDRESSES[chainId] + : undefined; + var amountToApprove = React.useMemo(function () { return (trade ? trade.maximumAmountIn(allowedSlippage) : undefined); }, [trade, allowedSlippage]); + return useERC20Permit(amountToApprove, swapRouterAddress, null); +} + +/** + * Returns true if the input currency or output currency cannot be traded in the interface + * @param currencyIn the input currency to check + * @param currencyOut the output currency to check + */ +function useIsSwapUnsupported(currencyIn, currencyOut) { + var unsupportedTokens = useUnsupportedTokens(); + return React.useMemo(function () { + if (!unsupportedTokens) { + return false; + } + var currencyInUnsupported = Boolean((currencyIn === null || currencyIn === void 0 ? void 0 : currencyIn.isToken) && unsupportedTokens[currencyIn.address]); + var currencyOutUnsupported = Boolean((currencyOut === null || currencyOut === void 0 ? void 0 : currencyOut.isToken) && unsupportedTokens[currencyOut.address]); + return currencyInUnsupported || currencyOutUnsupported; + }, [currencyIn, currencyOut, unsupportedTokens]); +} + +var ERC20_INTERFACE = new abi$6.Interface([ + { + constant: false, + inputs: [ + { name: '_spender', type: 'address' }, + { name: '_value', type: 'uint256' }, + ], + name: 'approve', + outputs: [{ name: '', type: 'bool' }], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, +]); +function approveAmountCalldata(amount, spender) { + if (!amount.currency.isToken) + throw new Error('Must call with an amount of token'); + var approveData = ERC20_INTERFACE.encodeFunctionData('approve', [spender, v3Sdk.toHex(amount.quotient)]); + return { + to: amount.currency.address, + data: approveData, + value: '0x0', + }; +} + +var ArgentWalletContractABI = [ + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "_transactions", + type: "tuple[]" + } + ], + name: "wc_multiCall", + outputs: [ + { + internalType: "bytes[]", + name: "", + type: "bytes[]" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "_msgHash", + type: "bytes32" + }, + { + internalType: "bytes", + name: "_signature", + type: "bytes" + } + ], + name: "isValidSignature", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4" + } + ], + stateMutability: "view", + type: "function" + } +]; + +function useArgentWalletContract() { + var account = useActiveWeb3React().account; + var isArgentWallet = useIsArgentWallet(); + return useContract(isArgentWallet ? account !== null && account !== void 0 ? account : undefined : undefined, ArgentWalletContractABI, true); +} + +var SwapCallbackState; +(function (SwapCallbackState) { + SwapCallbackState[SwapCallbackState["INVALID"] = 0] = "INVALID"; + SwapCallbackState[SwapCallbackState["LOADING"] = 1] = "LOADING"; + SwapCallbackState[SwapCallbackState["VALID"] = 2] = "VALID"; +})(SwapCallbackState || (SwapCallbackState = {})); +/** + * Returns the swap calls that can be used to make the trade + * @param trade trade to execute + * @param allowedSlippage user allowed slippage + * @param recipientAddressOrName the ENS name or address of the recipient of the swap output + * @param signatureData the signature data of the permit of the input token amount, if available + */ +function useSwapCallArguments(trade, // trade to execute, required +allowedSlippage, // in bips +recipientAddressOrName, // the ENS name or address of the recipient of the trade, or null if swap should be returned to sender +signatureData) { + var _a = useActiveWeb3React(), account = _a.account, chainId = _a.chainId, library = _a.library; + var recipientAddress = useENS(recipientAddressOrName).address; + var recipient = recipientAddressOrName === null ? account : recipientAddress; + var deadline = useTransactionDeadline(); + var routerContract = useV2RouterContract(); + var argentWalletContract = useArgentWalletContract(); + return React.useMemo(function () { + if (!trade || !recipient || !library || !account || !chainId || !deadline) + return []; + if (trade instanceof v2Sdk.Trade) { + if (!routerContract) + return []; + var swapMethods = []; + swapMethods.push(v2Sdk.Router.swapCallParameters(trade, { + feeOnTransfer: false, + allowedSlippage: allowedSlippage, + recipient: recipient, + deadline: deadline.toNumber(), + })); + if (trade.tradeType === sdkCore.TradeType.EXACT_INPUT) { + swapMethods.push(v2Sdk.Router.swapCallParameters(trade, { + feeOnTransfer: true, + allowedSlippage: allowedSlippage, + recipient: recipient, + deadline: deadline.toNumber(), + })); + } + return swapMethods.map(function (_a) { + var methodName = _a.methodName, args = _a.args, value = _a.value; + if (argentWalletContract && trade.inputAmount.currency.isToken) { + return { + address: argentWalletContract.address, + calldata: argentWalletContract.interface.encodeFunctionData('wc_multiCall', [ + [ + approveAmountCalldata(trade.maximumAmountIn(allowedSlippage), routerContract.address), + { + to: routerContract.address, + value: value, + data: routerContract.interface.encodeFunctionData(methodName, args), + }, + ], + ]), + value: '0x0', + }; + } + else { + return { + address: routerContract.address, + calldata: routerContract.interface.encodeFunctionData(methodName, args), + value: value, + }; + } + }); + } + else { + // swap options shared by v3 and v2+v3 swap routers + var sharedSwapOptions = __assign({ recipient: recipient, slippageTolerance: allowedSlippage }, (signatureData + ? { + inputTokenPermit: 'allowed' in signatureData + ? { + expiry: signatureData.deadline, + nonce: signatureData.nonce, + s: signatureData.s, + r: signatureData.r, + v: signatureData.v, + } + : { + deadline: signatureData.deadline, + amount: signatureData.amount, + s: signatureData.s, + r: signatureData.r, + v: signatureData.v, + }, + } + : {})); + var swapRouterAddress = chainId + ? trade instanceof v3Sdk.Trade + ? V3_ROUTER_ADDRESS[chainId] + : SWAP_ROUTER_ADDRESSES[chainId] + : undefined; + if (!swapRouterAddress) + return []; + var _a = trade instanceof v3Sdk.Trade + ? v3Sdk.SwapRouter.swapCallParameters(trade, __assign(__assign({}, sharedSwapOptions), { deadline: deadline.toString() })) + : routerSdk.SwapRouter.swapCallParameters(trade, __assign(__assign({}, sharedSwapOptions), { deadlineOrPreviousBlockhash: deadline.toString() })), value = _a.value, calldata = _a.calldata; + if (argentWalletContract && trade.inputAmount.currency.isToken) { + return [ + { + address: argentWalletContract.address, + calldata: argentWalletContract.interface.encodeFunctionData('wc_multiCall', [ + [ + approveAmountCalldata(trade.maximumAmountIn(allowedSlippage), swapRouterAddress), + { + to: swapRouterAddress, + value: value, + data: calldata, + }, + ], + ]), + value: '0x0', + }, + ]; + } + return [ + { + address: swapRouterAddress, + calldata: calldata, + value: value, + }, + ]; + } + }, [ + trade, + recipient, + library, + account, + chainId, + deadline, + routerContract, + allowedSlippage, + argentWalletContract, + signatureData, + ]); +} +/** + * This is hacking out the revert reason from the ethers provider thrown error however it can. + * This object seems to be undocumented by ethers. + * @param error an error from the ethers provider + */ +function swapErrorToUserReadableMessage(error) { + var _a, _b, _c, _d; + var reason; + while (Boolean(error)) { + reason = (_b = (_a = error.reason) !== null && _a !== void 0 ? _a : error.message) !== null && _b !== void 0 ? _b : reason; + error = (_c = error.error) !== null && _c !== void 0 ? _c : (_d = error.data) === null || _d === void 0 ? void 0 : _d.originalError; + } + if ((reason === null || reason === void 0 ? void 0 : reason.indexOf('execution reverted: ')) === 0) + reason = reason.substr('execution reverted: '.length); + switch (reason) { + case 'UniswapV2Router: EXPIRED': + return (jsxRuntime.jsx(macro.Trans, { children: "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low." }, void 0)); + case 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT': + case 'UniswapV2Router: EXCESSIVE_INPUT_AMOUNT': + return (jsxRuntime.jsx(macro.Trans, { children: "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance." }, void 0)); + case 'TransferHelper: TRANSFER_FROM_FAILED': + return jsxRuntime.jsx(macro.Trans, { children: "The input token cannot be transferred. There may be an issue with the input token." }, void 0); + case 'UniswapV2: TRANSFER_FAILED': + return jsxRuntime.jsx(macro.Trans, { children: "The output token cannot be transferred. There may be an issue with the output token." }, void 0); + case 'UniswapV2: K': + return (jsxRuntime.jsx(macro.Trans, { children: "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer." }, void 0)); + case 'Too little received': + case 'Too much requested': + case 'STF': + return (jsxRuntime.jsx(macro.Trans, { children: "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3." }, void 0)); + case 'TF': + return (jsxRuntime.jsx(macro.Trans, { children: "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3." }, void 0)); + default: + if ((reason === null || reason === void 0 ? void 0 : reason.indexOf('undefined is not an object')) !== -1) { + console.error(error, reason); + return (jsxRuntime.jsx(macro.Trans, { children: "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3." }, void 0)); + } + return (jsxRuntime.jsxs(macro.Trans, { children: ["Unknown error", reason ? ": \"" + reason + "\"" : '', ". Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3."] }, void 0)); + } +} +// returns a function that will execute a swap, if the parameters are all valid +// and the user has approved the slippage adjusted input amount for the trade +function useSwapCallback(trade, // trade to execute, required +allowedSlippage, // in bips +recipientAddressOrName, // the ENS name or address of the recipient of the trade, or null if swap should be returned to sender +signatureData) { + var _a = useActiveWeb3React(), account = _a.account, chainId = _a.chainId, library = _a.library; + var swapCalls = useSwapCallArguments(trade, allowedSlippage, recipientAddressOrName, signatureData); + var addTransaction = useTransactionAdder(); + var recipientAddress = useENS(recipientAddressOrName).address; + var recipient = recipientAddressOrName === null ? account : recipientAddress; + return React.useMemo(function () { + if (!trade || !library || !account || !chainId) { + return { state: SwapCallbackState.INVALID, callback: null, error: jsxRuntime.jsx(macro.Trans, { children: "Missing dependencies" }, void 0) }; + } + if (!recipient) { + if (recipientAddressOrName !== null) { + return { state: SwapCallbackState.INVALID, callback: null, error: jsxRuntime.jsx(macro.Trans, { children: "Invalid recipient" }, void 0) }; + } + else { + return { state: SwapCallbackState.LOADING, callback: null, error: null }; + } + } + return { + state: SwapCallbackState.VALID, + callback: function onSwap() { + return __awaiter(this, void 0, void 0, function () { + var estimatedCalls, bestCallOption, errorCalls, firstNoErrorCall, _a, address, calldata, value; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: return [4 /*yield*/, Promise.all(swapCalls.map(function (call) { + var address = call.address, calldata = call.calldata, value = call.value; + var tx = !value || isZero(value) + ? { from: account, to: address, data: calldata } + : { + from: account, + to: address, + data: calldata, + value: value, + }; + return library + .estimateGas(tx) + .then(function (gasEstimate) { + return { + call: call, + gasEstimate: gasEstimate, + }; + }) + .catch(function (gasError) { + console.debug('Gas estimate failed, trying eth_call to extract error', call); + return library + .call(tx) + .then(function (result) { + console.debug('Unexpected successful call after failed estimate gas', call, gasError, result); + return { call: call, error: jsxRuntime.jsx(macro.Trans, { children: "Unexpected issue with estimating the gas. Please try again." }, void 0) }; + }) + .catch(function (callError) { + console.debug('Call threw error', call, callError); + return { call: call, error: swapErrorToUserReadableMessage(callError) }; + }); + }); + })) + // a successful estimation is a bignumber gas estimate and the next call is also a bignumber gas estimate + ]; + case 1: + estimatedCalls = _b.sent(); + bestCallOption = estimatedCalls.find(function (el, ix, list) { + return 'gasEstimate' in el && (ix === list.length - 1 || 'gasEstimate' in list[ix + 1]); + }); + // check if any calls errored with a recognizable error + if (!bestCallOption) { + errorCalls = estimatedCalls.filter(function (call) { return 'error' in call; }); + if (errorCalls.length > 0) + throw errorCalls[errorCalls.length - 1].error; + firstNoErrorCall = estimatedCalls.find(function (call) { return !('error' in call); }); + if (!firstNoErrorCall) + throw new Error(macro.t(templateObject_1$2 || (templateObject_1$2 = __makeTemplateObject(["Unexpected error. Could not estimate gas for the swap."], ["Unexpected error. Could not estimate gas for the swap."])))); + bestCallOption = firstNoErrorCall; + } + _a = bestCallOption.call, address = _a.address, calldata = _a.calldata, value = _a.value; + return [2 /*return*/, library + .getSigner() + .sendTransaction(__assign(__assign({ from: account, to: address, data: calldata }, ('gasEstimate' in bestCallOption ? { gasLimit: calculateGasMargin(bestCallOption.gasEstimate) } : {})), (value && !isZero(value) ? { value: value } : {}))) + .then(function (response) { + addTransaction(response, trade.tradeType === sdkCore.TradeType.EXACT_INPUT + ? { + type: TransactionType.SWAP, + tradeType: sdkCore.TradeType.EXACT_INPUT, + inputCurrencyId: currencyId(trade.inputAmount.currency), + inputCurrencyAmountRaw: trade.inputAmount.quotient.toString(), + expectedOutputCurrencyAmountRaw: trade.outputAmount.quotient.toString(), + outputCurrencyId: currencyId(trade.outputAmount.currency), + minimumOutputCurrencyAmountRaw: trade.minimumAmountOut(allowedSlippage).quotient.toString(), + } + : { + type: TransactionType.SWAP, + tradeType: sdkCore.TradeType.EXACT_OUTPUT, + inputCurrencyId: currencyId(trade.inputAmount.currency), + maximumInputCurrencyAmountRaw: trade.maximumAmountIn(allowedSlippage).quotient.toString(), + outputCurrencyId: currencyId(trade.outputAmount.currency), + outputCurrencyAmountRaw: trade.outputAmount.quotient.toString(), + expectedInputCurrencyAmountRaw: trade.inputAmount.quotient.toString(), + }); + return response.hash; + }) + .catch(function (error) { + // if the user rejected the tx, pass this along + if ((error === null || error === void 0 ? void 0 : error.code) === 4001) { + throw new Error(macro.t(templateObject_2 || (templateObject_2 = __makeTemplateObject(["Transaction rejected."], ["Transaction rejected."])))); + } + else { + // otherwise, the error was unexpected and we need to convey that + console.error("Swap failed", error, address, calldata, value); + throw new Error(macro.t(templateObject_3 || (templateObject_3 = __makeTemplateObject(["Swap failed: ", ""], ["Swap failed: ", ""])), swapErrorToUserReadableMessage(error))); + } + })]; + } + }); + }); + }, + error: null, + }; + }, [trade, library, account, chainId, recipient, recipientAddressOrName, swapCalls, addTransaction, allowedSlippage]); +} +var templateObject_1$2, templateObject_2, templateObject_3; + +var WrapType; +(function (WrapType) { + WrapType[WrapType["NOT_APPLICABLE"] = 0] = "NOT_APPLICABLE"; + WrapType[WrapType["WRAP"] = 1] = "WRAP"; + WrapType[WrapType["UNWRAP"] = 2] = "UNWRAP"; +})(WrapType || (WrapType = {})); +var NOT_APPLICABLE = { wrapType: WrapType.NOT_APPLICABLE }; +var WrapInputError; +(function (WrapInputError) { + WrapInputError[WrapInputError["NO_ERROR"] = 0] = "NO_ERROR"; + WrapInputError[WrapInputError["ENTER_NATIVE_AMOUNT"] = 1] = "ENTER_NATIVE_AMOUNT"; + WrapInputError[WrapInputError["ENTER_WRAPPED_AMOUNT"] = 2] = "ENTER_WRAPPED_AMOUNT"; + WrapInputError[WrapInputError["INSUFFICIENT_NATIVE_BALANCE"] = 3] = "INSUFFICIENT_NATIVE_BALANCE"; + WrapInputError[WrapInputError["INSUFFICIENT_WRAPPED_BALANCE"] = 4] = "INSUFFICIENT_WRAPPED_BALANCE"; +})(WrapInputError || (WrapInputError = {})); +function WrapErrorText(_a) { + var wrapInputError = _a.wrapInputError; + var native = useNativeCurrency(); + var wrapped = native === null || native === void 0 ? void 0 : native.wrapped; + switch (wrapInputError) { + case WrapInputError.NO_ERROR: + return null; + case WrapInputError.ENTER_NATIVE_AMOUNT: + return jsxRuntime.jsxs(macro.Trans, { children: ["Enter ", native === null || native === void 0 ? void 0 : native.symbol, " amount"] }, void 0); + case WrapInputError.ENTER_WRAPPED_AMOUNT: + return jsxRuntime.jsxs(macro.Trans, { children: ["Enter ", wrapped === null || wrapped === void 0 ? void 0 : wrapped.symbol, " amount"] }, void 0); + case WrapInputError.INSUFFICIENT_NATIVE_BALANCE: + return jsxRuntime.jsxs(macro.Trans, { children: ["Insufficient ", native === null || native === void 0 ? void 0 : native.symbol, " balance"] }, void 0); + case WrapInputError.INSUFFICIENT_WRAPPED_BALANCE: + return jsxRuntime.jsxs(macro.Trans, { children: ["Insufficient ", wrapped === null || wrapped === void 0 ? void 0 : wrapped.symbol, " balance"] }, void 0); + } +} +/** + * Given the selected input and output currency, return a wrap callback + * @param inputCurrency the selected input currency + * @param outputCurrency the selected output currency + * @param typedValue the user input value + */ +function useWrapCallback(inputCurrency, outputCurrency, typedValue) { + var _this = this; + var _a = useActiveWeb3React(), chainId = _a.chainId, account = _a.account; + var wethContract = useWETHContract(); + var balance = useCurrencyBalance(account !== null && account !== void 0 ? account : undefined, inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : undefined); + // we can always parse the amount typed as the input currency, since wrapping is 1:1 + var inputAmount = React.useMemo(function () { return tryParseCurrencyAmount(typedValue, inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : undefined); }, [inputCurrency, typedValue]); + var addTransaction = useTransactionAdder(); + return React.useMemo(function () { + if (!wethContract || !chainId || !inputCurrency || !outputCurrency) + return NOT_APPLICABLE; + var weth = WRAPPED_NATIVE_CURRENCY[chainId]; + if (!weth) + return NOT_APPLICABLE; + var hasInputAmount = Boolean(inputAmount === null || inputAmount === void 0 ? void 0 : inputAmount.greaterThan('0')); + var sufficientBalance = inputAmount && balance && !balance.lessThan(inputAmount); + if (inputCurrency.isNative && weth.equals(outputCurrency)) { + return { + wrapType: WrapType.WRAP, + execute: sufficientBalance && inputAmount + ? function () { return __awaiter(_this, void 0, void 0, function () { + var txReceipt, error_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 2, , 3]); + return [4 /*yield*/, wethContract.deposit({ value: "0x" + inputAmount.quotient.toString(16) })]; + case 1: + txReceipt = _a.sent(); + addTransaction(txReceipt, { + type: TransactionType.WRAP, + unwrapped: false, + currencyAmountRaw: inputAmount === null || inputAmount === void 0 ? void 0 : inputAmount.quotient.toString(), + chainId: chainId, + }); + return [3 /*break*/, 3]; + case 2: + error_1 = _a.sent(); + console.error('Could not deposit', error_1); + return [3 /*break*/, 3]; + case 3: return [2 /*return*/]; + } + }); + }); } + : undefined, + inputError: sufficientBalance + ? undefined + : hasInputAmount + ? WrapInputError.INSUFFICIENT_NATIVE_BALANCE + : WrapInputError.ENTER_NATIVE_AMOUNT, + }; + } + else if (weth.equals(inputCurrency) && outputCurrency.isNative) { + return { + wrapType: WrapType.UNWRAP, + execute: sufficientBalance && inputAmount + ? function () { return __awaiter(_this, void 0, void 0, function () { + var txReceipt, error_2; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 2, , 3]); + return [4 /*yield*/, wethContract.withdraw("0x" + inputAmount.quotient.toString(16))]; + case 1: + txReceipt = _a.sent(); + addTransaction(txReceipt, { + type: TransactionType.WRAP, + unwrapped: true, + currencyAmountRaw: inputAmount === null || inputAmount === void 0 ? void 0 : inputAmount.quotient.toString(), + chainId: chainId, + }); + return [3 /*break*/, 3]; + case 2: + error_2 = _a.sent(); + console.error('Could not withdraw', error_2); + return [3 /*break*/, 3]; + case 3: return [2 /*return*/]; + } + }); + }); } + : undefined, + inputError: sufficientBalance + ? undefined + : hasInputAmount + ? WrapInputError.INSUFFICIENT_WRAPPED_BALANCE + : WrapInputError.ENTER_WRAPPED_AMOUNT, + }; + } + else { + return NOT_APPLICABLE; + } + }, [wethContract, chainId, inputCurrency, outputCurrency, inputAmount, balance, addTransaction]); +} + +var MIN_NATIVE_CURRENCY_FOR_GAS = JSBI__default["default"].exponentiate(JSBI__default["default"].BigInt(10), JSBI__default["default"].BigInt(16)); // .01 ETH +/** + * Given some token amount, return the max that can be spent of it + * @param currencyAmount to return max of + */ +function maxAmountSpend(currencyAmount) { + if (!currencyAmount) + return undefined; + if (currencyAmount.currency.isNative) { + if (JSBI__default["default"].greaterThan(currencyAmount.quotient, MIN_NATIVE_CURRENCY_FOR_GAS)) { + return sdkCore.CurrencyAmount.fromRawAmount(currencyAmount.currency, JSBI__default["default"].subtract(currencyAmount.quotient, MIN_NATIVE_CURRENCY_FOR_GAS)); + } + else { + return sdkCore.CurrencyAmount.fromRawAmount(currencyAmount.currency, JSBI__default["default"].BigInt(0)); + } + } + return currencyAmount; +} + +var BodyWrapper = styled__default["default"].main(templateObject_1$1 || (templateObject_1$1 = __makeTemplateObject(["\n position: relative;\n margin-top: ", ";\n max-width: ", ";\n width: 100%;\n background: ", ";\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 border-radius: 24px;\n margin-top: 1rem;\n margin-left: auto;\n margin-right: auto;\n z-index: ", ";\n"], ["\n position: relative;\n margin-top: ", ";\n max-width: ", ";\n width: 100%;\n background: ", ";\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 border-radius: 24px;\n margin-top: 1rem;\n margin-left: auto;\n margin-right: auto;\n z-index: ", ";\n" + /** + * The styled container element that wraps the content of most pages and the tabs. + */ +])), function (_a) { + var margin = _a.margin; + return margin !== null && margin !== void 0 ? margin : '0px'; +}, function (_a) { + var maxWidth = _a.maxWidth; + return maxWidth !== null && maxWidth !== void 0 ? maxWidth : '480px'; +}, function (_a) { + var theme = _a.theme; + return theme.bg0; +}, Z_INDEX.deprecated_content); +/** + * The styled container element that wraps the content of most pages and the tabs. + */ +function AppBody(_a) { + var children = _a.children, rest = __rest(_a, ["children"]); + return jsxRuntime.jsx(BodyWrapper, __assign({}, rest, { children: children }), void 0); +} +var templateObject_1$1; + +var AlertWrapper = styled__default["default"].div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n max-width: 460px;\n width: 100%;\n"], ["\n max-width: 460px;\n width: 100%;\n"]))); +function Swap(_a) { + var _this = this; + var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l; + var history = _a.history; + var account = useActiveWeb3React().account; + var loadedUrlParams = useDefaultsFromURLSearch(); + // token warning stuff + var _m = __read([ + useCurrency(loadedUrlParams === null || loadedUrlParams === void 0 ? void 0 : loadedUrlParams.inputCurrencyId), + useCurrency(loadedUrlParams === null || loadedUrlParams === void 0 ? void 0 : loadedUrlParams.outputCurrencyId), + ], 2), loadedInputCurrency = _m[0], loadedOutputCurrency = _m[1]; + var _o = __read(React.useState(false), 2), dismissTokenWarning = _o[0], setDismissTokenWarning = _o[1]; + var urlLoadedTokens = React.useMemo(function () { var _a, _b; return (_b = (_a = [loadedInputCurrency, loadedOutputCurrency]) === null || _a === void 0 ? void 0 : _a.filter(function (c) { var _a; return (_a = c === null || c === void 0 ? void 0 : c.isToken) !== null && _a !== void 0 ? _a : false; })) !== null && _b !== void 0 ? _b : []; }, [loadedInputCurrency, loadedOutputCurrency]); + var handleConfirmTokenWarning = React.useCallback(function () { + setDismissTokenWarning(true); + }, []); + // dismiss warning if all imported tokens are in active lists + var defaultTokens = useAllTokens(); + var importTokensNotInDefault = React.useMemo(function () { + return urlLoadedTokens && + urlLoadedTokens.filter(function (token) { + return !Boolean(token.address in defaultTokens); + }); + }, [defaultTokens, urlLoadedTokens]); + var theme = React.useContext(styled.ThemeContext); + // toggle wallet when disconnected + var toggleWalletModal = useWalletModalToggle(); + // for expert mode + var _p = __read(useExpertModeManager(), 1), isExpertMode = _p[0]; + // swap state + var _q = useSwapState(), independentField = _q.independentField, typedValue = _q.typedValue, recipient = _q.recipient; + var _r = useDerivedSwapInfo(), _s = _r.trade, tradeState = _s.state, trade = _s.trade, allowedSlippage = _r.allowedSlippage, currencyBalances = _r.currencyBalances, parsedAmount = _r.parsedAmount, currencies = _r.currencies, swapInputError = _r.inputError; + var _t = useWrapCallback(currencies[Field.INPUT], currencies[Field.OUTPUT], typedValue), wrapType = _t.wrapType, onWrap = _t.execute, wrapInputError = _t.inputError; + var showWrap = wrapType !== WrapType.NOT_APPLICABLE; + var recipientAddress = useENSAddress(recipient).address; + var parsedAmounts = React.useMemo(function () { + var _a, _b; + return showWrap + ? (_a = {}, + _a[Field.INPUT] = parsedAmount, + _a[Field.OUTPUT] = parsedAmount, + _a) : (_b = {}, + _b[Field.INPUT] = independentField === Field.INPUT ? parsedAmount : trade === null || trade === void 0 ? void 0 : trade.inputAmount, + _b[Field.OUTPUT] = independentField === Field.OUTPUT ? parsedAmount : trade === null || trade === void 0 ? void 0 : trade.outputAmount, + _b); + }, [independentField, parsedAmount, showWrap, trade]); + var _u = __read(React.useMemo(function () { return [!(trade === null || trade === void 0 ? void 0 : trade.swaps), TradeState.LOADING === tradeState, TradeState.SYNCING === tradeState]; }, [trade, tradeState]), 3), routeNotFound = _u[0], routeIsLoading = _u[1], routeIsSyncing = _u[2]; + var fiatValueInput = useUSDCValue(parsedAmounts[Field.INPUT]); + var fiatValueOutput = useUSDCValue(parsedAmounts[Field.OUTPUT]); + var priceImpact = React.useMemo(function () { return (routeIsSyncing ? undefined : computeFiatValuePriceImpact(fiatValueInput, fiatValueOutput)); }, [fiatValueInput, fiatValueOutput, routeIsSyncing]); + var _v = useSwapActionHandlers(), onSwitchTokens = _v.onSwitchTokens, onCurrencySelection = _v.onCurrencySelection, onUserInput = _v.onUserInput, onChangeRecipient = _v.onChangeRecipient; + var isValid = !swapInputError; + var dependentField = independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT; + var handleTypeInput = React.useCallback(function (value) { + onUserInput(Field.INPUT, value); + }, [onUserInput]); + var handleTypeOutput = React.useCallback(function (value) { + onUserInput(Field.OUTPUT, value); + }, [onUserInput]); + // reset if they close warning without tokens in params + var handleDismissTokenWarning = React.useCallback(function () { + setDismissTokenWarning(true); + history.push('/swap/'); + }, [history]); + // modal and loading + var _w = __read(React.useState({ + showConfirm: false, + tradeToConfirm: undefined, + attemptingTxn: false, + swapErrorMessage: undefined, + txHash: undefined, + }), 2), _x = _w[0], showConfirm = _x.showConfirm, tradeToConfirm = _x.tradeToConfirm, swapErrorMessage = _x.swapErrorMessage, attemptingTxn = _x.attemptingTxn, txHash = _x.txHash, setSwapState = _w[1]; + var formattedAmounts = React.useMemo(function () { + var _a; + var _b, _c, _d, _e; + return (_a = {}, + _a[independentField] = typedValue, + _a[dependentField] = showWrap + ? (_c = (_b = parsedAmounts[independentField]) === null || _b === void 0 ? void 0 : _b.toExact()) !== null && _c !== void 0 ? _c : '' + : (_e = (_d = parsedAmounts[dependentField]) === null || _d === void 0 ? void 0 : _d.toSignificant(6)) !== null && _e !== void 0 ? _e : '', + _a); + }, [dependentField, independentField, parsedAmounts, showWrap, typedValue]); + var userHasSpecifiedInputOutput = Boolean(currencies[Field.INPUT] && currencies[Field.OUTPUT] && ((_b = parsedAmounts[independentField]) === null || _b === void 0 ? void 0 : _b.greaterThan(JSBI__default["default"].BigInt(0)))); + var approvalOptimizedTrade = useApprovalOptimizedTrade(trade, allowedSlippage); + var approvalOptimizedTradeString = approvalOptimizedTrade instanceof v2Sdk.Trade + ? 'V2SwapRouter' + : approvalOptimizedTrade instanceof v3Sdk.Trade + ? 'V3SwapRouter' + : 'SwapRouter'; + // check whether the user has approved the router on the input token + var _y = __read(useApproveCallbackFromTrade(approvalOptimizedTrade, allowedSlippage), 2), approvalState = _y[0], approveCallback = _y[1]; + var _z = useERC20PermitFromTrade(approvalOptimizedTrade, allowedSlippage), signatureState = _z.state, signatureData = _z.signatureData, gatherPermitSignature = _z.gatherPermitSignature; + var handleApprove = React.useCallback(function () { return __awaiter(_this, void 0, void 0, function () { + var error_1; + var _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + if (!(signatureState === UseERC20PermitState.NOT_SIGNED && gatherPermitSignature)) return [3 /*break*/, 7]; + _b.label = 1; + case 1: + _b.trys.push([1, 3, , 6]); + return [4 /*yield*/, gatherPermitSignature()]; + case 2: + _b.sent(); + return [3 /*break*/, 6]; + case 3: + error_1 = _b.sent(); + if (!((error_1 === null || error_1 === void 0 ? void 0 : error_1.code) !== 4001)) return [3 /*break*/, 5]; + return [4 /*yield*/, approveCallback()]; + case 4: + _b.sent(); + _b.label = 5; + case 5: return [3 /*break*/, 6]; + case 6: return [3 /*break*/, 9]; + case 7: return [4 /*yield*/, approveCallback()]; + case 8: + _b.sent(); + ReactGA__default["default"].event({ + category: 'Swap', + action: 'Approve', + label: [approvalOptimizedTradeString, (_a = approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 ? void 0 : approvalOptimizedTrade.inputAmount) === null || _a === void 0 ? void 0 : _a.currency.symbol].join('/'), + }); + _b.label = 9; + case 9: return [2 /*return*/]; + } + }); + }); }, [ + signatureState, + gatherPermitSignature, + approveCallback, + approvalOptimizedTradeString, + (_c = approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 ? void 0 : approvalOptimizedTrade.inputAmount) === null || _c === void 0 ? void 0 : _c.currency.symbol, + ]); + // check if user has gone through approval process, used to show two step buttons, reset on token change + var _0 = __read(React.useState(false), 2), approvalSubmitted = _0[0], setApprovalSubmitted = _0[1]; + // mark when a user has submitted an approval, reset onTokenSelection for input field + React.useEffect(function () { + if (approvalState === ApprovalState.PENDING) { + setApprovalSubmitted(true); + } + }, [approvalState, approvalSubmitted]); + var maxInputAmount = React.useMemo(function () { return maxAmountSpend(currencyBalances[Field.INPUT]); }, [currencyBalances]); + var showMaxButton = Boolean((maxInputAmount === null || maxInputAmount === void 0 ? void 0 : maxInputAmount.greaterThan(0)) && !((_d = parsedAmounts[Field.INPUT]) === null || _d === void 0 ? void 0 : _d.equalTo(maxInputAmount))); + // the callback to execute the swap + var _1 = useSwapCallback(approvalOptimizedTrade, allowedSlippage, recipient, signatureData), swapCallback = _1.callback, swapCallbackError = _1.error; + var handleSwap = React.useCallback(function () { + if (!swapCallback) { + return; + } + if (priceImpact && !confirmPriceImpactWithoutFee(priceImpact)) { + return; + } + setSwapState({ attemptingTxn: true, tradeToConfirm: tradeToConfirm, showConfirm: showConfirm, swapErrorMessage: undefined, txHash: undefined }); + swapCallback() + .then(function (hash) { + var _a, _b, _c, _d; + setSwapState({ attemptingTxn: false, tradeToConfirm: tradeToConfirm, showConfirm: showConfirm, swapErrorMessage: undefined, txHash: hash }); + ReactGA__default["default"].event({ + category: 'Swap', + action: recipient === null + ? 'Swap w/o Send' + : (recipientAddress !== null && recipientAddress !== void 0 ? recipientAddress : recipient) === account + ? 'Swap w/o Send + recipient' + : 'Swap w/ Send', + label: [ + approvalOptimizedTradeString, + (_b = (_a = approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 ? void 0 : approvalOptimizedTrade.inputAmount) === null || _a === void 0 ? void 0 : _a.currency) === null || _b === void 0 ? void 0 : _b.symbol, + (_d = (_c = approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 ? void 0 : approvalOptimizedTrade.outputAmount) === null || _c === void 0 ? void 0 : _c.currency) === null || _d === void 0 ? void 0 : _d.symbol, + 'MH', + ].join('/'), + }); + }) + .catch(function (error) { + setSwapState({ + attemptingTxn: false, + tradeToConfirm: tradeToConfirm, + showConfirm: showConfirm, + swapErrorMessage: error.message, + txHash: undefined, + }); + }); + }, [ + swapCallback, + priceImpact, + tradeToConfirm, + showConfirm, + recipient, + recipientAddress, + account, + approvalOptimizedTradeString, + (_f = (_e = approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 ? void 0 : approvalOptimizedTrade.inputAmount) === null || _e === void 0 ? void 0 : _e.currency) === null || _f === void 0 ? void 0 : _f.symbol, + (_h = (_g = approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 ? void 0 : approvalOptimizedTrade.outputAmount) === null || _g === void 0 ? void 0 : _g.currency) === null || _h === void 0 ? void 0 : _h.symbol, + ]); + // errors + var _2 = __read(React.useState(false), 2), showInverted = _2[0], setShowInverted = _2[1]; + // warnings on the greater of fiat value price impact and execution price impact + var priceImpactSeverity = React.useMemo(function () { + var executionPriceImpact = trade === null || trade === void 0 ? void 0 : trade.priceImpact; + return warningSeverity(executionPriceImpact && priceImpact + ? executionPriceImpact.greaterThan(priceImpact) + ? executionPriceImpact + : priceImpact + : executionPriceImpact !== null && executionPriceImpact !== void 0 ? executionPriceImpact : priceImpact); + }, [priceImpact, trade]); + var isArgentWallet = useIsArgentWallet(); + // show approve flow when: no error on inputs, not approved or pending, or approved in current session + // never show if price impact is above threshold in non expert mode + var showApproveFlow = !isArgentWallet && + !swapInputError && + (approvalState === ApprovalState.NOT_APPROVED || + approvalState === ApprovalState.PENDING || + (approvalSubmitted && approvalState === ApprovalState.APPROVED)) && + !(priceImpactSeverity > 3 && !isExpertMode); + var handleConfirmDismiss = React.useCallback(function () { + setSwapState({ showConfirm: false, tradeToConfirm: tradeToConfirm, attemptingTxn: attemptingTxn, swapErrorMessage: swapErrorMessage, txHash: txHash }); + // if there was a tx hash, we want to clear the input + if (txHash) { + onUserInput(Field.INPUT, ''); + } + }, [attemptingTxn, onUserInput, swapErrorMessage, tradeToConfirm, txHash]); + var handleAcceptChanges = React.useCallback(function () { + setSwapState({ tradeToConfirm: trade, swapErrorMessage: swapErrorMessage, txHash: txHash, attemptingTxn: attemptingTxn, showConfirm: showConfirm }); + }, [attemptingTxn, showConfirm, swapErrorMessage, trade, txHash]); + var handleInputSelect = React.useCallback(function (inputCurrency) { + setApprovalSubmitted(false); // reset 2 step UI for approvals + onCurrencySelection(Field.INPUT, inputCurrency); + }, [onCurrencySelection]); + var handleMaxInput = React.useCallback(function () { + maxInputAmount && onUserInput(Field.INPUT, maxInputAmount.toExact()); + ReactGA__default["default"].event({ + category: 'Swap', + action: 'Max', + }); + }, [maxInputAmount, onUserInput]); + var handleOutputSelect = React.useCallback(function (outputCurrency) { return onCurrencySelection(Field.OUTPUT, outputCurrency); }, [onCurrencySelection]); + var swapIsUnsupported = useIsSwapUnsupported(currencies[Field.INPUT], currencies[Field.OUTPUT]); + var priceImpactTooHigh = priceImpactSeverity > 3 && !isExpertMode; + return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(TokenWarningModal, { isOpen: importTokensNotInDefault.length > 0 && !dismissTokenWarning, tokens: importTokensNotInDefault, onConfirm: handleConfirmTokenWarning, onDismiss: handleDismissTokenWarning }, void 0), jsxRuntime.jsxs(AppBody, { children: [jsxRuntime.jsx(SwapHeader, { allowedSlippage: allowedSlippage }, void 0), jsxRuntime.jsxs(Wrapper$d, __assign({ id: "swap-page" }, { children: [jsxRuntime.jsx(ConfirmSwapModal, { isOpen: showConfirm, trade: trade, originalTrade: tradeToConfirm, onAcceptChanges: handleAcceptChanges, attemptingTxn: attemptingTxn, txHash: txHash, recipient: recipient, allowedSlippage: allowedSlippage, onConfirm: handleSwap, swapErrorMessage: swapErrorMessage, onDismiss: handleConfirmDismiss }, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: 'sm' }, { children: [jsxRuntime.jsxs("div", __assign({ style: { display: 'relative' } }, { children: [jsxRuntime.jsx(CurrencyInputPanel, { label: independentField === Field.OUTPUT && !showWrap ? jsxRuntime.jsx(macro.Trans, { children: "From (at most)" }, void 0) : jsxRuntime.jsx(macro.Trans, { children: "From" }, void 0), value: formattedAmounts[Field.INPUT], showMaxButton: showMaxButton, currency: currencies[Field.INPUT], onUserInput: handleTypeInput, onMax: handleMaxInput, fiatValue: fiatValueInput !== null && fiatValueInput !== void 0 ? fiatValueInput : undefined, onCurrencySelect: handleInputSelect, otherCurrency: currencies[Field.OUTPUT], showCommonBases: true, id: "swap-currency-input", loading: independentField === Field.OUTPUT && routeIsSyncing }, void 0), jsxRuntime.jsx(ArrowWrapper$1, __assign({ clickable: true }, { children: jsxRuntime.jsx(reactFeather.ArrowDown, { size: "16", onClick: function () { + setApprovalSubmitted(false); // reset 2 step UI for approvals + onSwitchTokens(); + }, color: currencies[Field.INPUT] && currencies[Field.OUTPUT] ? theme.text1 : theme.text3 }, void 0) }), void 0), jsxRuntime.jsx(CurrencyInputPanel, { value: formattedAmounts[Field.OUTPUT], onUserInput: handleTypeOutput, label: independentField === Field.INPUT && !showWrap ? jsxRuntime.jsx(macro.Trans, { children: "To (at least)" }, void 0) : jsxRuntime.jsx(macro.Trans, { children: "To" }, void 0), showMaxButton: false, hideBalance: false, fiatValue: fiatValueOutput !== null && fiatValueOutput !== void 0 ? fiatValueOutput : undefined, priceImpact: priceImpact, currency: currencies[Field.OUTPUT], onCurrencySelect: handleOutputSelect, otherCurrency: currencies[Field.INPUT], showCommonBases: true, id: "swap-currency-output", loading: independentField === Field.INPUT && routeIsSyncing }, void 0)] }), void 0), recipient !== null && !showWrap ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs(AutoRow, __assign({ justify: "space-between", style: { padding: '0 1rem' } }, { children: [jsxRuntime.jsx(ArrowWrapper$1, __assign({ clickable: false }, { children: jsxRuntime.jsx(reactFeather.ArrowDown, { size: "16", color: theme.text2 }, void 0) }), void 0), jsxRuntime.jsx(LinkStyledButton, __assign({ id: "remove-recipient-button", onClick: function () { return onChangeRecipient(null); } }, { children: jsxRuntime.jsx(macro.Trans, { children: "- Remove recipient" }, void 0) }), void 0)] }), void 0), jsxRuntime.jsx(AddressInputPanel, { id: "recipient", value: recipient, onChange: onChangeRecipient }, void 0)] }, void 0)) : null, !showWrap && userHasSpecifiedInputOutput && (trade || routeIsLoading || routeIsSyncing) && (jsxRuntime.jsx(SwapDetailsDropdown, { trade: trade, syncing: routeIsSyncing, loading: routeIsLoading, showInverted: showInverted, setShowInverted: setShowInverted, allowedSlippage: allowedSlippage }, void 0)), jsxRuntime.jsxs("div", { children: [swapIsUnsupported ? (jsxRuntime.jsx(ButtonPrimary, __assign({ disabled: true }, { children: jsxRuntime.jsx(ThemedText.Main, __assign({ mb: "4px" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Unsupported Asset" }, void 0) }), void 0) }), void 0)) : !account ? (jsxRuntime.jsx(ButtonLight, __assign({ onClick: toggleWalletModal }, { children: jsxRuntime.jsx(macro.Trans, { children: "Connect Wallet" }, void 0) }), void 0)) : showWrap ? (jsxRuntime.jsx(ButtonPrimary, __assign({ disabled: Boolean(wrapInputError), onClick: onWrap }, { children: wrapInputError ? (jsxRuntime.jsx(WrapErrorText, { wrapInputError: wrapInputError }, void 0)) : wrapType === WrapType.WRAP ? (jsxRuntime.jsx(macro.Trans, { children: "Wrap" }, void 0)) : wrapType === WrapType.UNWRAP ? (jsxRuntime.jsx(macro.Trans, { children: "Unwrap" }, void 0)) : null }), void 0)) : routeNotFound && userHasSpecifiedInputOutput && !routeIsLoading && !routeIsSyncing ? (jsxRuntime.jsx(GreyCard, __assign({ style: { textAlign: 'center' } }, { children: jsxRuntime.jsx(ThemedText.Main, __assign({ mb: "4px" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Insufficient liquidity for this trade." }, void 0) }), void 0) }), void 0)) : showApproveFlow ? (jsxRuntime.jsx(AutoRow, __assign({ style: { flexWrap: 'nowrap', width: '100%' } }, { children: jsxRuntime.jsxs(AutoColumn, __assign({ style: { width: '100%' }, gap: "12px" }, { children: [jsxRuntime.jsx(ButtonConfirmed, __assign({ onClick: handleApprove, disabled: approvalState !== ApprovalState.NOT_APPROVED || + approvalSubmitted || + signatureState === UseERC20PermitState.SIGNED, width: "100%", altDisabledStyle: approvalState === ApprovalState.PENDING, confirmed: approvalState === ApprovalState.APPROVED || signatureState === UseERC20PermitState.SIGNED }, { children: jsxRuntime.jsxs(AutoRow, __assign({ justify: "space-between", style: { flexWrap: 'nowrap' } }, { children: [jsxRuntime.jsxs("span", __assign({ style: { display: 'flex', alignItems: 'center' } }, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: currencies[Field.INPUT], size: '20px', style: { marginRight: '8px', flexShrink: 0 } }, void 0), approvalState === ApprovalState.APPROVED || signatureState === UseERC20PermitState.SIGNED ? (jsxRuntime.jsxs(macro.Trans, { children: ["You can now trade ", (_j = currencies[Field.INPUT]) === null || _j === void 0 ? void 0 : _j.symbol] }, void 0)) : (jsxRuntime.jsxs(macro.Trans, { children: ["Allow the Uniswap Protocol to use your ", (_k = currencies[Field.INPUT]) === null || _k === void 0 ? void 0 : _k.symbol] }, void 0))] }), void 0), approvalState === ApprovalState.PENDING ? (jsxRuntime.jsx(Loader, { stroke: "white" }, void 0)) : (approvalSubmitted && approvalState === ApprovalState.APPROVED) || + signatureState === UseERC20PermitState.SIGNED ? (jsxRuntime.jsx(reactFeather.CheckCircle, { size: "20", color: theme.green1 }, void 0)) : (jsxRuntime.jsx(MouseoverTooltip, __assign({ text: jsxRuntime.jsxs(macro.Trans, { children: ["You must give the Uniswap smart contracts permission to use your", ' ', (_l = currencies[Field.INPUT]) === null || _l === void 0 ? void 0 : _l.symbol, ". You only have to do this once per token."] }, void 0) }, { children: jsxRuntime.jsx(reactFeather.HelpCircle, { size: "20", color: 'white', style: { marginLeft: '8px' } }, void 0) }), void 0))] }), void 0) }), void 0), jsxRuntime.jsx(ButtonError, __assign({ onClick: function () { + if (isExpertMode) { + handleSwap(); + } + else { + setSwapState({ + tradeToConfirm: trade, + attemptingTxn: false, + swapErrorMessage: undefined, + showConfirm: true, + txHash: undefined, + }); + } + }, width: "100%", id: "swap-button", disabled: !isValid || + routeIsSyncing || + routeIsLoading || + (approvalState !== ApprovalState.APPROVED && signatureState !== UseERC20PermitState.SIGNED) || + priceImpactTooHigh, error: isValid && priceImpactSeverity > 2 }, { children: jsxRuntime.jsx(rebass.Text, __assign({ fontSize: 16, fontWeight: 500 }, { children: priceImpactTooHigh ? (jsxRuntime.jsx(macro.Trans, { children: "High Price Impact" }, void 0)) : trade && priceImpactSeverity > 2 ? (jsxRuntime.jsx(macro.Trans, { children: "Swap Anyway" }, void 0)) : (jsxRuntime.jsx(macro.Trans, { children: "Swap" }, void 0)) }), void 0) }), void 0)] }), void 0) }), void 0)) : (jsxRuntime.jsx(ButtonError, __assign({ onClick: function () { + if (isExpertMode) { + handleSwap(); + } + else { + setSwapState({ + tradeToConfirm: trade, + attemptingTxn: false, + swapErrorMessage: undefined, + showConfirm: true, + txHash: undefined, + }); + } + }, id: "swap-button", disabled: !isValid || routeIsSyncing || routeIsLoading || priceImpactTooHigh || !!swapCallbackError, error: isValid && priceImpactSeverity > 2 && !swapCallbackError }, { children: jsxRuntime.jsx(rebass.Text, __assign({ fontSize: 20, fontWeight: 500 }, { children: swapInputError ? (swapInputError) : routeIsSyncing || routeIsLoading ? (jsxRuntime.jsx(macro.Trans, { children: "Swap" }, void 0)) : priceImpactSeverity > 2 ? (jsxRuntime.jsx(macro.Trans, { children: "Swap Anyway" }, void 0)) : priceImpactTooHigh ? (jsxRuntime.jsx(macro.Trans, { children: "Price Impact Too High" }, void 0)) : (jsxRuntime.jsx(macro.Trans, { children: "Swap" }, void 0)) }), void 0) }), void 0)), isExpertMode && swapErrorMessage ? jsxRuntime.jsx(SwapCallbackError, { error: swapErrorMessage }, void 0) : null] }, void 0)] }), void 0)] }), void 0)] }, void 0), jsxRuntime.jsx(AlertWrapper, { children: jsxRuntime.jsx(NetworkAlert, {}, void 0) }, void 0), jsxRuntime.jsx(SwitchLocaleLink, {}, void 0), !swapIsUnsupported ? null : (jsxRuntime.jsx(UnsupportedCurrencyFooter, { show: swapIsUnsupported, currencies: [currencies[Field.INPUT], currencies[Field.OUTPUT]] }, void 0))] }, void 0)); +} +var templateObject_1; + +var $schema = "http://json-schema.org/draft-07/schema#"; +var $id = "https://uniswap.org/tokenlist.schema.json"; +var title = "Uniswap Token List"; +var description = "Schema for lists of tokens compatible with the Uniswap Interface"; +var definitions = { + Version: { + type: "object", + description: "The version of the list, used in change detection", + examples: [ + { + major: 1, + minor: 0, + patch: 0 + } + ], + additionalProperties: false, + properties: { + major: { + type: "integer", + description: "The major version of the list. Must be incremented when tokens are removed from the list or token addresses are changed.", + minimum: 0, + examples: [ + 1, + 2 + ] + }, + minor: { + type: "integer", + description: "The minor version of the list. Must be incremented when tokens are added to the list.", + minimum: 0, + examples: [ + 0, + 1 + ] + }, + patch: { + type: "integer", + description: "The patch version of the list. Must be incremented for any changes to the list.", + minimum: 0, + examples: [ + 0, + 1 + ] + } + }, + required: [ + "major", + "minor", + "patch" + ] + }, + TagIdentifier: { + type: "string", + description: "The unique identifier of a tag", + minLength: 1, + maxLength: 10, + pattern: "^[\\w]+$", + examples: [ + "compound", + "stablecoin" + ] + }, + ExtensionIdentifier: { + type: "string", + description: "The name of a token extension property", + minLength: 1, + maxLength: 40, + pattern: "^[\\w]+$", + examples: [ + "color", + "is_fee_on_transfer", + "aliases" + ] + }, + ExtensionMap: { + type: "object", + description: "An object containing any arbitrary or vendor-specific token metadata", + maxProperties: 10, + propertyNames: { + $ref: "#/definitions/ExtensionIdentifier" + }, + additionalProperties: { + $ref: "#/definitions/ExtensionValue" + }, + examples: [ + { + color: "#000000", + is_verified_by_me: true + }, + { + "x-bridged-addresses-by-chain": { + "1": { + bridgeAddress: "0x4200000000000000000000000000000000000010", + tokenAddress: "0x4200000000000000000000000000000000000010" + } + } + } + ] + }, + ExtensionPrimitiveValue: { + anyOf: [ + { + type: "string", + minLength: 1, + maxLength: 42, + examples: [ + "#00000" + ] + }, + { + type: "boolean", + examples: [ + true + ] + }, + { + type: "number", + examples: [ + 15 + ] + }, + { + type: "null" + } + ] + }, + ExtensionValue: { + anyOf: [ + { + $ref: "#/definitions/ExtensionPrimitiveValue" + }, + { + type: "object", + maxProperties: 10, + propertyNames: { + $ref: "#/definitions/ExtensionIdentifier" + }, + additionalProperties: { + $ref: "#/definitions/ExtensionValueInner0" + } + } + ] + }, + ExtensionValueInner0: { + anyOf: [ + { + $ref: "#/definitions/ExtensionPrimitiveValue" + }, + { + type: "object", + maxProperties: 10, + propertyNames: { + $ref: "#/definitions/ExtensionIdentifier" + }, + additionalProperties: { + $ref: "#/definitions/ExtensionValueInner1" + } + } + ] + }, + ExtensionValueInner1: { + anyOf: [ + { + $ref: "#/definitions/ExtensionPrimitiveValue" + } + ] + }, + TagDefinition: { + type: "object", + description: "Definition of a tag that can be associated with a token via its identifier", + additionalProperties: false, + properties: { + name: { + type: "string", + description: "The name of the tag", + pattern: "^[ \\w]+$", + minLength: 1, + maxLength: 20 + }, + description: { + type: "string", + description: "A user-friendly description of the tag", + pattern: "^[ \\w\\.,:]+$", + minLength: 1, + maxLength: 200 + } + }, + required: [ + "name", + "description" + ], + examples: [ + { + name: "Stablecoin", + description: "A token with value pegged to another asset" + } + ] + }, + TokenInfo: { + type: "object", + description: "Metadata for a single token in a token list", + additionalProperties: false, + properties: { + chainId: { + type: "integer", + description: "The chain ID of the Ethereum network where this token is deployed", + minimum: 1, + examples: [ + 1, + 42 + ] + }, + address: { + type: "string", + description: "The checksummed address of the token on the specified chain ID", + pattern: "^0x[a-fA-F0-9]{40}$", + examples: [ + "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48" + ] + }, + decimals: { + type: "integer", + description: "The number of decimals for the token balance", + minimum: 0, + maximum: 255, + examples: [ + 18 + ] + }, + name: { + type: "string", + description: "The name of the token", + minLength: 1, + maxLength: 40, + pattern: "^[ \\w.'+\\-%/À-ÖØ-öø-ÿ:&\\[\\]\\(\\)]+$", + examples: [ + "USD Coin" + ] + }, + symbol: { + type: "string", + description: "The symbol for the token; must be alphanumeric", + pattern: "^[a-zA-Z0-9+\\-%/$.]+$", + minLength: 1, + maxLength: 20, + examples: [ + "USDC" + ] + }, + logoURI: { + type: "string", + description: "A URI to the token logo asset; if not set, interface will attempt to find a logo based on the token address; suggest SVG or PNG of size 64x64", + format: "uri", + examples: [ + "ipfs://QmXfzKRvjZz3u5JRgC4v5mGVbm9ahrUiB4DgzHBsnWbTMM" + ] + }, + tags: { + type: "array", + description: "An array of tag identifiers associated with the token; tags are defined at the list level", + items: { + $ref: "#/definitions/TagIdentifier" + }, + maxItems: 10, + examples: [ + "stablecoin", + "compound" + ] + }, + extensions: { + $ref: "#/definitions/ExtensionMap" + } + }, + required: [ + "chainId", + "address", + "decimals", + "name", + "symbol" + ] + } +}; +var type = "object"; +var additionalProperties = false; +var properties = { + name: { + type: "string", + description: "The name of the token list", + minLength: 1, + maxLength: 20, + pattern: "^[\\w ]+$", + examples: [ + "My Token List" + ] + }, + timestamp: { + type: "string", + format: "date-time", + description: "The timestamp of this list version; i.e. when this immutable version of the list was created" + }, + version: { + $ref: "#/definitions/Version" + }, + tokens: { + type: "array", + description: "The list of tokens included in the list", + items: { + $ref: "#/definitions/TokenInfo" + }, + minItems: 1, + maxItems: 10000 + }, + keywords: { + type: "array", + description: "Keywords associated with the contents of the list; may be used in list discoverability", + items: { + type: "string", + description: "A keyword to describe the contents of the list", + minLength: 1, + maxLength: 20, + pattern: "^[\\w ]+$", + examples: [ + "compound", + "lending", + "personal tokens" + ] + }, + maxItems: 20, + uniqueItems: true + }, + tags: { + type: "object", + description: "A mapping of tag identifiers to their name and description", + propertyNames: { + $ref: "#/definitions/TagIdentifier" + }, + additionalProperties: { + $ref: "#/definitions/TagDefinition" + }, + maxProperties: 20, + examples: [ + { + stablecoin: { + name: "Stablecoin", + description: "A token with value pegged to another asset" + } + } + ] + }, + logoURI: { + type: "string", + description: "A URI for the logo of the token list; prefer SVG or PNG of size 256x256", + format: "uri", + examples: [ + "ipfs://QmXfzKRvjZz3u5JRgC4v5mGVbm9ahrUiB4DgzHBsnWbTMM" + ] + } +}; +var required = [ + "name", + "timestamp", + "version", + "tokens" +]; +var tokenlist_schema = { + $schema: $schema, + $id: $id, + title: title, + description: description, + definitions: definitions, + type: type, + additionalProperties: additionalProperties, + properties: properties, + required: required +}; + +var tokenlist_schema$1 = /*#__PURE__*/Object.freeze({ + __proto__: null, + $schema: $schema, + $id: $id, + title: title, + description: description, + definitions: definitions, + type: type, + additionalProperties: additionalProperties, + properties: properties, + required: required, + 'default': tokenlist_schema +}); + +var fortmatic=function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n});},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0});},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=3)}([function(e,t){e.exports=function(e){return e&&e.__esModule?e:{default:e}};},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")};},function(e,t,r){function n(){return Math.floor(9e4*Math.random())+1e4}Object.defineProperty(t,"__esModule",{value:!0}),t.sendAsyncWrapper=function(e,t){var r=this;return new Promise(function(o,a){r.sendAsync({jsonrpc:"2.0",id:n(),method:e,params:t||[]},function(e,t){e?a(e):o(t.result);});})},t.sendFortmaticAsyncWrapper=function(e){var t=this;return new Promise(function(r,n){t.getProvider().sendFortmaticAsync(e,function(e,t){e?n(e):r(t?t.result:{});});})},t.randomId=n,t.findExistingResponse=function(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},t=new v(m);return t.params=[e],i.sendFortmaticAsyncWrapper.call(g,t)};};var v=function e(t,r){(0, o.default)(this,e),this.id=(0, i.randomId)(),this.method=t,this.params=r?[r]:[{}];};},function(e,t,r){var n=r(0);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=n(r(6)),a=n(r(9)),i=n(r(1)),s=n(r(10)),c=r(11),u=n(r(12)),l=r(2),f=function(){function e(t,r){if((0, i.default)(this,e),this.fortmaticClient=t,this.requests={},this.queue=[],this.account=null,this.network=null,this.isFortmatic=!0,this.overlayReady=!1,this.isLoggedIn=!1,this.postMessages={FORTMATIC_HANDLE_BATCH_REQUEST:"FORTMATIC_HANDLE_BATCH_REQUEST",FORTMATIC_HANDLE_REQUEST:"FORTMATIC_HANDLE_REQUEST",FORTMATIC_HANDLE_FORTMATIC_REQUEST:"FORTMATIC_HANDLE_FORTMATIC_REQUEST",FORTMATIC_HANDLE_RESPONSE:"FORTMATIC_HANDLE_RESPONSE",FORTMATIC_OVERLAY_READY:"FORTMATIC_OVERLAY_READY",FORTMATIC_SHOW_OVERLAY:"FORTMATIC_SHOW_OVERLAY",FORTMATIC_HIDE_OVERLAY:"FORTMATIC_HIDE_OVERLAY",FORTMATIC_USER_DENIED:"FORTMATIC_USER_DENIED",FORTMATIC_USER_LOGOUT:"FORTMATIC_USER_LOGOUT",FORTMATIC_UNAUTHORIZED_API_KEY:"FORTMATIC_UNAUTHORIZED_API_KEY"},!r.API_KEY)throw new Error("Please provide a Fortmatic API key that you acquired from the developer dashboard.");this.options={API_KEY:r.API_KEY,ETH_NETWORK:r.ETH_NETWORK,DOMAIN_ORIGIN:window.location?window.location.origin:"",version:c.version},this.queryParams=btoa(JSON.stringify(this.options)),this.constructPostMessage(),this.overlay=this.createOverlay(),this.listenMessage();}return (0, s.default)(e,[{key:"constructPostMessage",value:function(){var e=this;Object.keys(this.postMessages).map(function(t){e.postMessages[t]+="-".concat(e.queryParams);});}},{key:"createOverlay",value:function(){var e=this;return new Promise(function(t,r){var n=function(){if(function(){var t=!0,r=!1,n=void 0;try{for(var o,a=document.getElementsByClassName("fortmatic-iframe")[Symbol.iterator]();!(t=(o=a.next()).done);t=!0)if(o.value.src.includes(e.queryParams))return !1}catch(e){r=!0,n=e;}finally{try{t||null==a.return||a.return();}finally{if(r)throw n}}return !0}()){var r=document.createElement("style");r.innerHTML=u.default.css,r.type="text/css",document.head.appendChild(r);var n=document.createElement("iframe");n.className="fortmatic-iframe",n.src="".concat(e.fortmaticClient,"/send?params=").concat(e.queryParams),document.body.appendChild(n);var o=document.createElement("img");o.src="https://static.fortmatic.com/assets/trans.gif",document.body.appendChild(o),t({iframe:n});}else console.error("Fortmatic: Duplicate instances found.");};["loaded","interactive","complete"].indexOf(document.readyState)>-1?n():window.addEventListener("load",n.bind(e),!1);})}},{key:"showOverlay",value:function(){var e=(0, a.default)(o.default.mark(function e(){return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.overlay;case 2:e.sent.iframe.style.display="block";case 4:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"hideOverlay",value:function(){var e=(0, a.default)(o.default.mark(function e(){return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.overlay;case 2:e.sent.iframe.style.display="none";case 4:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"sendAsync",value:function(e,t){e.length>0?this.enqueue({payload:{id:(0, l.randomId)(),batch:e.map(function(e){return e.id=(0, l.randomId)(),e}),method:"eth_batchRequest"},cb:t}):this.enqueue({payload:e,cb:t});}},{key:"sendFortmaticAsync",value:function(e,t){this.enqueue({payload:e,cb:t,isNative:!0});}},{key:"send",value:function(e,t){if("string"==typeof e)return l.sendAsyncWrapper.call(this,e,t);if(!t){console.warn("Non-async web3 methods will be deprecated in web3 > 1.0, and are not supported by the Fortmatic provider. An async method to be used instead."),this.sendAsync(e,function(){});var r={};switch(e.method){case"eth_accounts":r=this.account?[this.account]:[];break;case"eth_coinbase":r=this.account;break;case"net_version":r=this.network||(this.options.API_KEY.startsWith("pk_live")?1:4);break;case"eth_uninstallFilter":r=!0;break;default:r={};}return {id:e.id,jsonrpc:e.jsonrpc,result:r}}this.sendAsync(e,t);}},{key:"enqueue",value:function(e){this.queue.push(e),this.overlayReady&&this.dequeue();}},{key:"dequeue",value:function(){var e=(0, a.default)(o.default.mark(function e(){var t,r,n,a=this;return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(0!==this.queue.length){e.next=2;break}return e.abrupt("return");case 2:if(!(t=this.queue.shift())){e.next=11;break}return r=t.payload,n=t.cb,r.id=(0, l.randomId)(),e.next=9,this.postMessage(t.isNative?this.postMessages.FORTMATIC_HANDLE_FORTMATIC_REQUEST:this.postMessages.FORTMATIC_HANDLE_REQUEST,t.payload);case 9:r.batch&&r.batch.length>0?(r.batch.forEach(function(e){a.requests[e.id]={parentId:r.id,payload:e,cb:function(e,t){var n=a.requests[r.id].batchResponse;if(e&&e.response&&!(0, l.findExistingResponse)(n,e.response.id))throw n.push({jsonrpc:"2.0",id:e.response.id,error:{code:e.response.code,message:e.response.message}}),a.requests[r.id].cb(null,n),e.response;if(t&&t.result&&!(0, l.findExistingResponse)(n,t.id))return n.push(t);throw new Error("Fortmatic: unexpected callback behavior")}};}),this.requests[r.id]={payload:r,cb:n,batchResponse:[]}):this.requests[r.id]={payload:r,cb:n},this.dequeue();case 11:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"postMessage",value:function(){var e=(0, a.default)(o.default.mark(function e(t,r){var n;return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.overlay;case 2:if(!(n=e.sent).iframe.contentWindow){e.next=7;break}n.iframe.contentWindow.postMessage({msgType:t,payload:r},"*"),e.next=8;break;case 7:throw new Error("Fortmatic: Modal is not ready.");case 8:case"end":return e.stop()}},e,this)}));return function(t,r){return e.apply(this,arguments)}}()},{key:"enable",value:function(){return l.sendAsyncWrapper.call(this,"eth_accounts")}},{key:"listenMessage",value:function(){var e=this;window.addEventListener("message",function(t){if(t.origin===e.fortmaticClient){var r=t.data.response?t.data.response.id:null;switch(t.data.msgType){case e.postMessages.FORTMATIC_OVERLAY_READY:e.overlayReady=!0,e.dequeue();break;case e.postMessages.FORTMATIC_HANDLE_RESPONSE:try{e.requests[r].cb(null,t.data.response);var n=e.requests[r].parentId;n&&e.requests[n].payload.batch.length===e.requests[n].batchResponse.length&&e.requests[n].cb(null,e.requests[n].batchResponse),"eth_accounts"===e.requests[r].payload.method?e.account=t.data.response.result[0]:"eth_coinbase"===e.requests[r].payload.method?e.account=t.data.response.result:"net_version"===e.requests[r].payload.method&&(e.network=t.data.response.result);}catch(e){}e.isLoggedIn=!0,e.dequeue();break;case e.postMessages.FORTMATIC_HIDE_OVERLAY:e.hideOverlay();break;case e.postMessages.FORTMATIC_SHOW_OVERLAY:e.showOverlay();break;case e.postMessages.FORTMATIC_USER_LOGOUT:e.account=null,e.network=null,e.isLoggedIn=!1;break;case e.postMessages.FORTMATIC_UNAUTHORIZED_API_KEY:throw e.overlayReady=!1,new Error("Given API key is not authorized to access the resource.");case e.postMessages.FORTMATIC_USER_DENIED:if(r){var o=t.data.response&&t.data.response.message?t.data.response.message:"Fortmatic: Modal was closed without executing action!",a=t.data.response&&t.data.response.code?t.data.response.code:1;e.requests[r].cb({message:o,code:a,response:t.data.response});}else e.queue.forEach(function(e){return e.cb({message:"Fortmatic: Modal was closed without executing action!",code:1})});e.dequeue();}}});}}]),e}();t.default=f;},function(e,t,r){e.exports=r(7);},function(e,t,r){var n=function(){return this||"object"==typeof self&&self}()||Function("return this")(),o=n.regeneratorRuntime&&Object.getOwnPropertyNames(n).indexOf("regeneratorRuntime")>=0,a=o&&n.regeneratorRuntime;if(n.regeneratorRuntime=void 0,e.exports=r(8),o)n.regeneratorRuntime=a;else try{delete n.regeneratorRuntime;}catch(e){n.regeneratorRuntime=void 0;}},function(e,t){!function(t){var r,n=Object.prototype,o=n.hasOwnProperty,a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",s=a.asyncIterator||"@@asyncIterator",c=a.toStringTag||"@@toStringTag",u="object"==typeof e,l=t.regeneratorRuntime;if(l)u&&(e.exports=l);else {(l=t.regeneratorRuntime=u?e.exports:{}).wrap=_;var f="suspendedStart",d="suspendedYield",h="executing",p="completed",m={},y={};y[i]=function(){return this};var v=Object.getPrototypeOf,g=v&&v(v(L([])));g&&g!==n&&o.call(g,i)&&(y=g);var b=A.prototype=w.prototype=Object.create(y);T.prototype=b.constructor=A,A.constructor=T,A[c]=T.displayName="GeneratorFunction",l.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return !!t&&(t===T||"GeneratorFunction"===(t.displayName||t.name))},l.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,A):(e.__proto__=A,c in e||(e[c]="GeneratorFunction")),e.prototype=Object.create(b),e},l.awrap=function(e){return {__await:e}},O(R.prototype),R.prototype[s]=function(){return this},l.AsyncIterator=R,l.async=function(e,t,r,n){var o=new R(_(e,t,r,n));return l.isGeneratorFunction(t)?o:o.next().then(function(e){return e.done?e.value:o.next()})},O(b),b[c]="Generator",b[i]=function(){return this},b.toString=function(){return "[object Generator]"},l.keys=function(e){var t=[];for(var r in e)t.push(r);return t.reverse(),function r(){for(;t.length;){var n=t.pop();if(n in e)return r.value=n,r.done=!1,r}return r.done=!0,r}},l.values=L,F.prototype={constructor:F,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=r,this.done=!1,this.delegate=null,this.method="next",this.arg=r,this.tryEntries.forEach(M),!e)for(var t in this)"t"===t.charAt(0)&&o.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=r);},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function n(n,o){return s.type="throw",s.arg=e,t.next=n,o&&(t.method="next",t.arg=r),!!o}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],s=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var c=o.call(i,"catchLoc"),u=o.call(i,"finallyLoc");if(c&&u){if(this.prev=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&o.call(n,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),M(r),m}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var o=n.arg;M(r);}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:L(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=r),m}};}function _(e,t,r,n){var o=t&&t.prototype instanceof w?t:w,a=Object.create(o.prototype),i=new F(n||[]);return a._invoke=function(e,t,r){var n=f;return function(o,a){if(n===h)throw new Error("Generator is already running");if(n===p){if("throw"===o)throw a;return k()}for(r.method=o,r.arg=a;;){var i=r.delegate;if(i){var s=I(i,r);if(s){if(s===m)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(n===f)throw n=p,r.arg;r.dispatchException(r.arg);}else "return"===r.method&&r.abrupt("return",r.arg);n=h;var c=E(e,t,r);if("normal"===c.type){if(n=r.done?p:d,c.arg===m)continue;return {value:c.arg,done:r.done}}"throw"===c.type&&(n=p,r.method="throw",r.arg=c.arg);}}}(e,r,i),a}function E(e,t,r){try{return {type:"normal",arg:e.call(t,r)}}catch(e){return {type:"throw",arg:e}}}function w(){}function T(){}function A(){}function O(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)};});}function R(e){var t;this._invoke=function(r,n){function a(){return new Promise(function(t,a){!function t(r,n,a,i){var s=E(e[r],e,n);if("throw"!==s.type){var c=s.arg,u=c.value;return u&&"object"==typeof u&&o.call(u,"__await")?Promise.resolve(u.__await).then(function(e){t("next",e,a,i);},function(e){t("throw",e,a,i);}):Promise.resolve(u).then(function(e){c.value=e,a(c);},function(e){return t("throw",e,a,i)})}i(s.arg);}(r,n,t,a);})}return t=t?t.then(a,a):a()};}function I(e,t){var n=e.iterator[t.method];if(n===r){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=r,I(e,t),"throw"===t.method))return m;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method");}return m}var o=E(n,e.iterator,t.arg);if("throw"===o.type)return t.method="throw",t.arg=o.arg,t.delegate=null,m;var a=o.arg;return a?a.done?(t[e.resultName]=a.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=r),t.delegate=null,m):a:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,m)}function x(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t);}function M(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t;}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(x,this),this.reset(!0);}function L(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n (https://fortmatic.com/)",license:"MIT",repository:{type:"git",url:"https://github.com/fortmatic/fortmatic-js"},keywords:["Auth","Login","Web3","Crypto","Ethereum","MetaMask","Wallet","Blockchain","Dapp"],homepage:"https://www.fortmatic.com",ava:{require:["@babel/register"],files:["test/**/*.spec.js"],babel:{testOptions:{presets:["@babel/env"],plugins:["@babel/plugin-proposal-function-bind","@babel/plugin-transform-runtime"]}},verbose:!0},nyc:{all:!1,"check-coverage":!0,"per-file":!0,lines:80,statements:80,functions:80,branches:80,include:["src/**/*.js"],exclude:["*/style.js"],require:[],reporter:["html","lcov"]},dependencies:{"@babel/runtime":"7.3.4"},devDependencies:{"@babel/core":"7.3.4","@babel/plugin-proposal-function-bind":"7.2.0","@babel/plugin-transform-modules-commonjs":"7.2.0","@babel/plugin-transform-runtime":"7.3.4","@babel/preset-env":"7.3.4","@babel/register":"7.0.0",ava:"2.2.0","babel-eslint":"10.0.1","babel-loader":"8.0.5",eslint:"5.9.0",lodash:"4.17.11",nyc:"13.1.0",sinon:"7.1.1",webpack:"4.26.1","webpack-cli":"3.1.2"}};},function(e,t,r){t.css="\n .fortmatic-iframe {\n display: none;\n position: fixed;\n top: 0;\n right: 0;\n width: 100%;\n height: 100%;\n border: none;\n border-radius: 0;\n z-index: 2147483647;\n }\n";}]); + +var fortmatic$1 = /*#__PURE__*/Object.freeze(/*#__PURE__*/_mergeNamespaces({ + __proto__: null, + 'default': fortmatic +}, [fortmatic])); + +// from routing-api (https://github.com/Uniswap/routing-api/blob/main/lib/handlers/quote/quote.ts#L243-L311) +function transformSwapRouteToGetQuoteResult(type, amount, _a) { + var e_1, _b; + var quote = _a.quote, quoteGasAdjusted = _a.quoteGasAdjusted, route = _a.route, estimatedGasUsed = _a.estimatedGasUsed, estimatedGasUsedQuoteToken = _a.estimatedGasUsedQuoteToken, estimatedGasUsedUSD = _a.estimatedGasUsedUSD, gasPriceWei = _a.gasPriceWei, methodParameters = _a.methodParameters, blockNumber = _a.blockNumber; + var routeResponse = []; + try { + for (var route_1 = __values(route), route_1_1 = route_1.next(); !route_1_1.done; route_1_1 = route_1.next()) { + var subRoute = route_1_1.value; + var amount_1 = subRoute.amount, quote_1 = subRoute.quote, tokenPath = subRoute.tokenPath; + if (subRoute.protocol === routerSdk.Protocol.V3) { + var pools = subRoute.route.pools; + var curRoute = []; + for (var i = 0; i < pools.length; i++) { + var nextPool = pools[i]; + var tokenIn = tokenPath[i]; + var tokenOut = tokenPath[i + 1]; + var edgeAmountIn = undefined; + if (i === 0) { + edgeAmountIn = type === 'exactIn' ? amount_1.quotient.toString() : quote_1.quotient.toString(); + } + var edgeAmountOut = undefined; + if (i === pools.length - 1) { + edgeAmountOut = type === 'exactIn' ? quote_1.quotient.toString() : amount_1.quotient.toString(); + } + curRoute.push({ + type: 'v3-pool', + tokenIn: { + chainId: tokenIn.chainId, + decimals: tokenIn.decimals, + address: tokenIn.address, + symbol: tokenIn.symbol, + }, + tokenOut: { + chainId: tokenOut.chainId, + decimals: tokenOut.decimals, + address: tokenOut.address, + symbol: tokenOut.symbol, + }, + fee: nextPool.fee.toString(), + liquidity: nextPool.liquidity.toString(), + sqrtRatioX96: nextPool.sqrtRatioX96.toString(), + tickCurrent: nextPool.tickCurrent.toString(), + amountIn: edgeAmountIn, + amountOut: edgeAmountOut, + }); + } + routeResponse.push(curRoute); + } + else if (subRoute.protocol === routerSdk.Protocol.V2) { + var pools = subRoute.route.pairs; + var curRoute = []; + for (var i = 0; i < pools.length; i++) { + var nextPool = pools[i]; + var tokenIn = tokenPath[i]; + var tokenOut = tokenPath[i + 1]; + var edgeAmountIn = undefined; + if (i === 0) { + edgeAmountIn = type === 'exactIn' ? amount_1.quotient.toString() : quote_1.quotient.toString(); + } + var edgeAmountOut = undefined; + if (i === pools.length - 1) { + edgeAmountOut = type === 'exactIn' ? quote_1.quotient.toString() : amount_1.quotient.toString(); + } + var reserve0 = nextPool.reserve0; + var reserve1 = nextPool.reserve1; + curRoute.push({ + type: 'v2-pool', + tokenIn: { + chainId: tokenIn.chainId, + decimals: tokenIn.decimals, + address: tokenIn.address, + symbol: tokenIn.symbol, + }, + tokenOut: { + chainId: tokenOut.chainId, + decimals: tokenOut.decimals, + address: tokenOut.address, + symbol: tokenOut.symbol, + }, + reserve0: { + token: { + chainId: reserve0.currency.wrapped.chainId, + decimals: reserve0.currency.wrapped.decimals, + address: reserve0.currency.wrapped.address, + symbol: reserve0.currency.wrapped.symbol, + }, + quotient: reserve0.quotient.toString(), + }, + reserve1: { + token: { + chainId: reserve1.currency.wrapped.chainId, + decimals: reserve1.currency.wrapped.decimals, + address: reserve1.currency.wrapped.address, + symbol: reserve1.currency.wrapped.symbol, + }, + quotient: reserve1.quotient.toString(), + }, + amountIn: edgeAmountIn, + amountOut: edgeAmountOut, + }); + } + routeResponse.push(curRoute); + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (route_1_1 && !route_1_1.done && (_b = route_1.return)) _b.call(route_1); + } + finally { if (e_1) throw e_1.error; } + } + var result = { + methodParameters: methodParameters, + blockNumber: blockNumber.toString(), + amount: amount.quotient.toString(), + amountDecimals: amount.toExact(), + quote: quote.quotient.toString(), + quoteDecimals: quote.toExact(), + quoteGasAdjusted: quoteGasAdjusted.quotient.toString(), + quoteGasAdjustedDecimals: quoteGasAdjusted.toExact(), + gasUseEstimateQuote: estimatedGasUsedQuoteToken.quotient.toString(), + gasUseEstimateQuoteDecimals: estimatedGasUsedQuoteToken.toExact(), + gasUseEstimate: estimatedGasUsed.toString(), + gasUseEstimateUSD: estimatedGasUsedUSD.toExact(), + gasPriceWei: gasPriceWei.toString(), + route: routeResponse, + routeString: smartOrderRouter.routeAmountsToString(route), + }; + return result; +} + +/** Minimal set of dependencies for the router to work locally. */ +function buildDependencies() { + var e_1, _a; + var dependenciesByChain = {}; + try { + for (var AUTO_ROUTER_SUPPORTED_CHAINS_1 = __values(AUTO_ROUTER_SUPPORTED_CHAINS), AUTO_ROUTER_SUPPORTED_CHAINS_1_1 = AUTO_ROUTER_SUPPORTED_CHAINS_1.next(); !AUTO_ROUTER_SUPPORTED_CHAINS_1_1.done; AUTO_ROUTER_SUPPORTED_CHAINS_1_1 = AUTO_ROUTER_SUPPORTED_CHAINS_1.next()) { + var chainId = AUTO_ROUTER_SUPPORTED_CHAINS_1_1.value; + var provider = new ethers.providers.JsonRpcProvider(INFURA_NETWORK_URLS[chainId]); + dependenciesByChain[chainId] = { + chainId: chainId, + provider: provider, + }; + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (AUTO_ROUTER_SUPPORTED_CHAINS_1_1 && !AUTO_ROUTER_SUPPORTED_CHAINS_1_1.done && (_a = AUTO_ROUTER_SUPPORTED_CHAINS_1.return)) _a.call(AUTO_ROUTER_SUPPORTED_CHAINS_1); + } + finally { if (e_1) throw e_1.error; } + } + return dependenciesByChain; +} +var GAMetric = /** @class */ (function (_super) { + __extends(GAMetric, _super); + function GAMetric() { + return _super !== null && _super.apply(this, arguments) || this; + } + GAMetric.prototype.putDimensions = function () { + return; + }; + GAMetric.prototype.putMetric = function (key, value, unit) { + ReactGA__default["default"].timing({ + category: 'Routing API', + variable: key + " | " + unit, + value: value, + label: 'client', + }); + }; + return GAMetric; +}(smartOrderRouter.IMetric)); +smartOrderRouter.setGlobalMetric(new GAMetric()); + +var routerParamsByChain = buildDependencies(); +function getQuote(_a, alphaRouterConfig) { + var type = _a.type, chainId = _a.chainId, tokenIn = _a.tokenIn, tokenOut = _a.tokenOut, amountRaw = _a.amount; + return __awaiter(this, void 0, void 0, function () { + var params, router, currencyIn, currencyOut, baseCurrency, quoteCurrency, amount, swapRoute; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + params = routerParamsByChain[chainId]; + if (!params) { + throw new Error('Router dependencies not initialized.'); + } + router = new smartOrderRouter.AlphaRouter(params); + currencyIn = new sdkCore.Token(tokenIn.chainId, tokenIn.address, tokenIn.decimals, tokenIn.symbol); + currencyOut = new sdkCore.Token(tokenOut.chainId, tokenOut.address, tokenOut.decimals, tokenOut.symbol); + baseCurrency = type === 'exactIn' ? currencyIn : currencyOut; + quoteCurrency = type === 'exactIn' ? currencyOut : currencyIn; + amount = sdkCore.CurrencyAmount.fromRawAmount(baseCurrency, JSBI__default["default"].BigInt(amountRaw)); + return [4 /*yield*/, router.route(amount, quoteCurrency, type === 'exactIn' ? sdkCore.TradeType.EXACT_INPUT : sdkCore.TradeType.EXACT_OUTPUT, + /*swapConfig=*/ undefined, alphaRouterConfig)]; + case 1: + swapRoute = _b.sent(); + if (!swapRoute) + throw new Error('Failed to generate client side quote'); + return [2 /*return*/, { data: transformSwapRouteToGetQuoteResult(type, amount, swapRoute) }]; + } + }); + }); +} + +var index = /*#__PURE__*/Object.freeze({ + __proto__: null, + getQuote: getQuote +}); + +exports.Swap = Swap; +//# sourceMappingURL=snowflake.js.map diff --git a/dist2/snowflake.js.map b/dist2/snowflake.js.map new file mode 100644 index 00000000000..8536b435fb6 --- /dev/null +++ b/dist2/snowflake.js.map @@ -0,0 +1 @@ +{"version":3,"file":"snowflake.js","sources":["../src/assets/images/ethereum-logo.png","../src/assets/svg/arbitrum_logo.svg","../src/assets/svg/optimistic_ethereum.svg","../src/assets/svg/polygon-matic-logo.svg","../src/assets/images/gas-icon.svg","../src/assets/svg/matic-token-icon.svg","../src/assets/svg/dot_line.svg","../src/assets/svg/auto_router.svg","../src/assets/svg/static_route.svg","../src/assets/images/dropdown.svg","../src/assets/svg/tokenlist.svg","../src/assets/svg/logo.svg","../src/assets/images/blue-loader.svg","../src/assets/images/metamask.png","../node_modules/fortmatic/lib/fortmatic.js"],"sourcesContent":["export default \"data:image/png;base64,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\"","export default \"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20viewBox%3D%220%200%20470.287%20514.251%22%20enable-background%3D%22new%200%200%20470.287%20514.251%22%20xml%3Aspace%3D%22preserve%22%3E%3Cg%20id%3D%22Background%22%3E%3C%2Fg%3E%3Cg%20id%3D%22Logos_and_symbols%22%3E%20%3Cg%20id%3D%22SYMBOL_VER_3%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_4_3_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_1_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_1_%22%3E%20%20%3Cg%20id%3D%22_x31_-3%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_14_%22%3E%20%20%20%3Cpath%20fill%3D%22%232D374B%22%20d%3D%22M291.134%2C237.469l35.654-60.5l96.103%2C149.684l0.046%2C28.727l-0.313-197.672%20%20%20%20c-0.228-4.832-2.794-9.252-6.887-11.859L242.715%2C46.324c-4.045-1.99-9.18-1.967-13.22%2C0.063c-0.546%2C0.272-1.06%2C0.57-1.548%2C0.895%20%20%20%20l-0.604%2C0.379L59.399%2C144.983l-0.651%2C0.296c-0.838%2C0.385-1.686%2C0.875-2.48%2C1.444c-3.185%2C2.283-5.299%2C5.66-5.983%2C9.448%20%20%20%20c-0.103%2C0.574-0.179%2C1.158-0.214%2C1.749l0.264%2C161.083l89.515-138.745c11.271-18.397%2C35.825-24.323%2C58.62-24.001l26.753%2C0.706%20%20%20%20L67.588%2C409.765l18.582%2C10.697L245.692%2C157.22l70.51-0.256L157.091%2C426.849l66.306%2C38.138l7.922%2C4.556%20%20%20%20c3.351%2C1.362%2C7.302%2C1.431%2C10.681%2C0.21l175.453-101.678l-33.544%2C19.438L291.134%2C237.469z%20M304.736%2C433.395l-66.969-105.108%20%20%20%20l40.881-69.371l87.952%2C138.628L304.736%2C433.395z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%2328A0F0%22%20points%3D%22237.768%2C328.286%20304.736%2C433.395%20366.601%2C397.543%20278.648%2C258.915%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2328A0F0%22%20d%3D%22M422.937%2C355.379l-0.046-28.727l-96.103-149.684l-35.654%2C60.5l92.774%2C150.043l33.544-19.438%20%20%20%20c3.29-2.673%2C5.281-6.594%2C5.49-10.825L422.937%2C355.379z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23FFFFFF%22%20d%3D%22M20.219%2C382.469l47.369%2C27.296l157.634-252.801l-26.753-0.706c-22.795-0.322-47.35%2C5.604-58.62%2C24.001%20%20%20%20L50.334%2C319.004l-30.115%2C46.271V382.469z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%23FFFFFF%22%20points%3D%22316.202%2C156.964%20245.692%2C157.22%2086.17%2C420.462%20141.928%2C452.565%20157.091%2C426.849%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2396BEDC%22%20d%3D%22M452.65%2C156.601c-0.59-14.746-8.574-28.245-21.08-36.104L256.28%2C19.692%20%20%20%20c-12.371-6.229-27.825-6.237-40.218-0.004c-1.465%2C0.739-170.465%2C98.752-170.465%2C98.752c-2.339%2C1.122-4.592%2C2.458-6.711%2C3.975%20%20%20%20c-11.164%2C8.001-17.969%2C20.435-18.668%2C34.095v208.765l30.115-46.271L50.07%2C157.921c0.035-0.589%2C0.109-1.169%2C0.214-1.741%20%20%20%20c0.681-3.79%2C2.797-7.171%2C5.983-9.456c0.795-0.569%2C172.682-100.064%2C173.228-100.337c4.04-2.029%2C9.175-2.053%2C13.22-0.063%20%20%20%20l173.022%2C99.523c4.093%2C2.607%2C6.659%2C7.027%2C6.887%2C11.859v199.542c-0.209%2C4.231-1.882%2C8.152-5.172%2C10.825l-33.544%2C19.438%20%20%20%20l-17.308%2C10.031l-61.864%2C35.852l-62.737%2C36.357c-3.379%2C1.221-7.33%2C1.152-10.681-0.21l-74.228-42.693l-15.163%2C25.717%20%20%20%20l66.706%2C38.406c2.206%2C1.255%2C4.171%2C2.367%2C5.784%2C3.272c2.497%2C1.4%2C4.199%2C2.337%2C4.8%2C2.629c4.741%2C2.303%2C11.563%2C3.643%2C17.71%2C3.643%20%20%20%20c5.636%2C0%2C11.132-1.035%2C16.332-3.072l182.225-105.531c10.459-8.104%2C16.612-20.325%2C17.166-33.564V156.601z%22%2F%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_13_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_6_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_3_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_15_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_3_%22%3E%20%20%20%3Cg%20id%3D%22_x33__7_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic%22%3E%20%20%20%3Cg%20id%3D%22_x33__3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_10_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x34__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_2_%22%3E%20%20%20%3Cg%20id%3D%22_x33__6_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_2_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_11_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_5_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_12_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_1_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_9_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_2_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol_1_%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_1_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_7_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_8_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Monochromatic_1_%22%3E%20%20%3Cg%20id%3D%22_x33__4_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%22170%22%20height%3D%22168%22%20viewBox%3D%220%200%20170%20168%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20clip-path%3D%22url%28%23clip0%29%22%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF505F%22%2F%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF0320%22%2F%3E%3Cpath%20d%3D%22M85.05%200C132.022%200%20170.1%2037.8949%20170.1%2084.6407C170.1%20131.386%200%20131.386%200%2084.6407C0%2037.8949%2038.0782%200%2085.05%200Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.665%2064.0394L112.444%2012.3742L89.0263%2078.9477L144.665%2064.0394Z%22%20fill%3D%22%23FF4E65%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.777%2064.215L112.444%2012.3742L165.349%2058.4347L143.777%2064.215Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.551%2063.613L142.479%20124.467L88.912%2078.5213L144.551%2063.613Z%22%20fill%3D%22%23D0001A%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.663%2063.7886L142.479%20124.467L165.235%2058.0083L143.663%2063.7886Z%22%20fill%3D%22%23FF697B%22%2F%3E%3C%2Fg%3E%3Cdefs%3E%3CclipPath%20id%3D%22clip0%22%3E%3Crect%20width%3D%22170%22%20height%3D%22168%22%20fill%3D%22white%22%2F%3E%3C%2FclipPath%3E%3C%2Fdefs%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20viewBox%3D%220%200%2038.4%2033.5%22%20style%3D%22enable-background%3Anew%200%200%2038.4%2033.5%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cstyle%20type%3D%22text%2Fcss%22%3E%20.st0%7Bfill%3A%238247E5%3B%7D%3C%2Fstyle%3E%3Cg%3E%20%3Cpath%20class%3D%22st0%22%20d%3D%22M29%2C10.2c-0.7-0.4-1.6-0.4-2.4%2C0L21%2C13.5l-3.8%2C2.1l-5.5%2C3.3c-0.7%2C0.4-1.6%2C0.4-2.4%2C0L5%2C16.3%20%20c-0.7-0.4-1.2-1.2-1.2-2.1v-5c0-0.8%2C0.4-1.6%2C1.2-2.1l4.3-2.5c0.7-0.4%2C1.6-0.4%2C2.4%2C0L16%2C7.2c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v3.3l3.8-2.2V7%20%20c0-0.8-0.4-1.6-1.2-2.1l-8-4.7c-0.7-0.4-1.6-0.4-2.4%2C0L1.2%2C5C0.4%2C5.4%2C0%2C6.2%2C0%2C7v9.4c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l5.5-3.2l3.8-2.2l5.5-3.2c0.7-0.4%2C1.6-0.4%2C2.4%2C0l4.3%2C2.5c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v5c0%2C0.8-0.4%2C1.6-1.2%2C2.1%20%20L29%2C28.8c-0.7%2C0.4-1.6%2C0.4-2.4%2C0l-4.3-2.5c-0.7-0.4-1.2-1.2-1.2-2.1V21l-3.8%2C2.2v3.3c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l8.1-4.7c0.7-0.4%2C1.2-1.2%2C1.2-2.1V17c0-0.8-0.4-1.6-1.2-2.1L29%2C10.2z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M10.0047%209.26921H10.2714C11.0078%209.26921%2011.6047%209.86617%2011.6047%2010.6025V12.1359C11.6047%2012.7987%2012.142%2013.3359%2012.8047%2013.3359C13.4675%2013.3359%2014.0047%2012.7995%2014.0047%2012.1367V5.22059C14.0047%204.86697%2013.7758%204.56227%2013.5258%204.31223L10.6714%201.33594M4.00472%202.00254H8.00472C8.7411%202.00254%209.33805%202.59949%209.33805%203.33587V14.0015H2.67139V3.33587C2.67139%202.59949%203.26834%202.00254%204.00472%202.00254ZM14.0047%205.33587C14.0047%206.07225%2013.4078%206.66921%2012.6714%206.66921C11.935%206.66921%2011.3381%206.07225%2011.3381%205.33587C11.3381%204.59949%2011.935%204.00254%2012.6714%204.00254C13.4078%204.00254%2014.0047%204.59949%2014.0047%205.33587Z%22%20stroke%3D%22white%22%2F%3E%3Cline%20x1%3D%224%22%20y1%3D%229.99414%22%20x2%3D%228%22%20y2%3D%229.99414%22%20stroke%3D%22white%22%2F%3E%3Cline%20x1%3D%224%22%20y1%3D%2211.9941%22%20x2%3D%228%22%20y2%3D%2211.9941%22%20stroke%3D%22white%22%2F%3E%3Cpath%20d%3D%22M4%208.16113H8%22%20stroke%3D%22white%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%221024%22%20height%3D%221024%22%20viewBox%3D%220%200%201024%201024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Ccircle%20cx%3D%22512%22%20cy%3D%22512%22%20r%3D%22512%22%20fill%3D%22%238247E5%22%2F%3E%3Cpath%20d%3D%22M681.469%20402.456C669.189%20395.312%20653.224%20395.312%20639.716%20402.456L543.928%20457.228L478.842%20492.949L383.055%20547.721C370.774%20554.865%20354.81%20554.865%20341.301%20547.721L265.162%20504.856C252.882%20497.712%20244.286%20484.614%20244.286%20470.325V385.786C244.286%20371.498%20251.654%20358.4%20265.162%20351.256L340.073%20309.581C352.353%20302.437%20368.318%20302.437%20381.827%20309.581L456.737%20351.256C469.018%20358.4%20477.614%20371.498%20477.614%20385.786V440.558L542.7%20403.646V348.874C542.7%20334.586%20535.332%20321.488%20521.824%20314.344L383.055%20235.758C370.774%20228.614%20354.81%20228.614%20341.301%20235.758L200.076%20314.344C186.567%20321.488%20179.199%20334.586%20179.199%20348.874V507.237C179.199%20521.525%20186.567%20534.623%20200.076%20541.767L341.301%20620.353C353.582%20627.498%20369.546%20627.498%20383.055%20620.353L478.842%20566.772L543.928%20529.86L639.716%20476.279C651.996%20469.135%20667.961%20469.135%20681.469%20476.279L756.38%20517.953C768.66%20525.098%20777.257%20538.195%20777.257%20552.484V637.023C777.257%20651.312%20769.888%20664.409%20756.38%20671.553L681.469%20714.419C669.189%20721.563%20653.224%20721.563%20639.716%20714.419L564.805%20672.744C552.525%20665.6%20543.928%20652.502%20543.928%20638.214V583.442L478.842%20620.353V675.125C478.842%20689.414%20486.21%20702.512%20499.719%20709.656L640.944%20788.242C653.224%20795.386%20669.189%20795.386%20682.697%20788.242L823.922%20709.656C836.203%20702.512%20844.799%20689.414%20844.799%20675.125V516.763C844.799%20502.474%20837.431%20489.377%20823.922%20482.232L681.469%20402.456Z%22%20fill%3D%22white%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%22100%25%22%20height%3D%2235%22%20%20viewBox%3D%22800%200%20300%20200%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%20%20%20%20%3Cline%20x1%3D%220%22%20x2%3D%222000%22%20y1%3D%22100%22%20y2%3D%22100%22%20stroke%3D%22currentColor%22%20stroke-width%3D%2220%22%20stroke-linecap%3D%22round%22%20stroke-dasharray%3D%221%2C%2045%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2223%22%20height%3D%2220%22%20viewBox%3D%220%200%2023%2020%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cdefs%3E%20%3ClinearGradient%20id%3D%22gradient1%22%20x1%3D%220%22%20y1%3D%220%22%20x2%3D%221%22%20y2%3D%220%22%20gradientTransform%3D%22rotate%2895%29%22%3E%20%20%20%20%3Cstop%20id%3D%22stop1%22%20offset%3D%220%22%20stop-color%3D%22%232274E2%22%2F%3E%20%20%20%20%3Cstop%20id%3D%22stop1%22%20offset%3D%220.5%22%20stop-color%3D%22%232274E2%22%2F%3E%20%20%20%20%3Cstop%20id%3D%22stop2%22%20offset%3D%221%22%20stop-color%3D%22%233FB672%22%20%2F%3E%20%20%3C%2FlinearGradient%3E%20%20%3C%2Fdefs%3E%3Cpath%20d%3D%22M16%2016C10%2016%209%2010%205%2010M16%2016C16%2017.6569%2017.3431%2019%2019%2019C20.6569%2019%2022%2017.6569%2022%2016C22%2014.3431%2020.6569%2013%2019%2013C17.3431%2013%2016%2014.3431%2016%2016ZM5%2010C9%2010%2010%204%2016%204M5%2010H1.5M16%204C16%205.65685%2017.3431%207%2019%207C20.6569%207%2022%205.65685%2022%204C22%202.34315%2020.6569%201%2019%201C17.3431%201%2016%202.34315%2016%204Z%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20stroke%3D%22url%28%23gradient1%29%22%20%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2022%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M19%2018C19%2018.5523%2018.5523%2019%2018%2019V21C19.6569%2021%2021%2019.6569%2021%2018H19ZM18%2019C17.4477%2019%2017%2018.5523%2017%2018H15C15%2019.6569%2016.3431%2021%2018%2021V19ZM17%2018C17%2017.4477%2017.4477%2017%2018%2017V15C16.3431%2015%2015%2016.3431%2015%2018H17ZM18%2017C18.5523%2017%2019%2017.4477%2019%2018H21C21%2016.3431%2019.6569%2015%2018%2015V17ZM8%207H16V5H8V7ZM16%2011H8V13H16V11ZM8%2019H16V17H8V19ZM4%2015C4%2017.2091%205.79086%2019%208%2019V17C6.89543%2017%206%2016.1046%206%2015H4ZM8%2011C5.79086%2011%204%2012.7909%204%2015H6C6%2013.8954%206.89543%2013%208%2013V11ZM18%209C18%2010.1046%2017.1046%2011%2016%2011V13C18.2091%2013%2020%2011.2091%2020%209H18ZM16%207C17.1046%207%2018%207.89543%2018%209H20C20%206.79086%2018.2091%205%2016%205V7ZM7%206C7%206.55228%206.55228%207%206%207V9C7.65685%209%209%207.65685%209%206H7ZM6%207C5.44772%207%205%206.55228%205%206H3C3%207.65685%204.34315%209%206%209V7ZM5%206C5%205.44772%205.44772%205%206%205V3C4.34315%203%203%204.34315%203%206H5ZM6%205C6.55228%205%207%205.44772%207%206H9C9%204.34315%207.65685%203%206%203V5Z%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%227%22%20viewBox%3D%220%200%2012%207%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%20%20%20%20%3Cpath%20d%3D%22M0.97168%201L6.20532%206L11.439%201%22%20stroke%3D%22%23AEAEAE%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%22225%22%20height%3D%22225%22%20viewBox%3D%220%200%20225%20225%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M74.8125%20190.529C65.7561%20190.513%2055.5298%20183.748%2051.9715%20175.42L19.9417%20100.456C16.3834%2092.1277%2020.8404%2085.39%2029.8968%2085.4068L111.417%2085.5579C120.473%2085.5747%20130.699%2092.3395%20134.258%20100.668L166.288%20175.632C169.846%20183.96%20165.389%20190.697%20156.332%20190.681L74.8125%20190.529Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint0_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint1_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint2_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint3_radial%29%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M92.958%20165.95C82.7695%20165.931%2071.265%20158.321%2067.2619%20148.952L26.2489%2052.9632C22.2458%2043.5941%2027.26%2036.0143%2037.4485%2036.0332L141.832%2036.2266C152.02%2036.2455%20163.525%2043.8559%20167.528%2053.225L208.541%20149.214C212.544%20158.583%20207.53%20166.163%20197.341%20166.144L92.958%20165.95ZM71.3614%20148.959C74.475%20156.246%2083.4229%20162.166%2091.3473%20162.18L195.73%20162.374C203.655%20162.388%20207.555%20156.493%20204.441%20149.206L163.428%2053.2174C160.315%2045.9304%20151.367%2040.0111%20143.442%2039.9964L39.0592%2039.803C31.1349%2039.7883%2027.2349%2045.6837%2030.3485%2052.9708L71.3614%20148.959Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M68.565%2053.3425C81.1781%2053.3659%2095.4205%2062.7875%20100.376%2074.3862C105.332%2085.985%2099.1246%2095.3687%2086.5115%2095.3454C73.8984%2095.322%2059.6559%2085.9004%2054.7001%2074.3016C49.7443%2062.7028%2055.9518%2053.3191%2068.565%2053.3425Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M90.6891%20104.981C103.302%20105.004%20117.545%20114.425%20122.5%20126.024C127.456%20137.623%20121.249%20147.007%20108.636%20146.983C96.0225%20146.96%2081.7801%20137.538%2076.8243%20125.94C71.8685%20114.341%2078.076%20104.957%2090.6891%20104.981Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M147.538%20105.142C160.151%20105.166%20174.394%20114.587%20179.349%20126.186C184.305%20137.785%20178.098%20147.168%20165.485%20147.145C152.871%20147.122%20138.629%20137.7%20133.673%20126.101C128.717%20114.503%20134.925%20105.119%20147.538%20105.142Z%22%20fill%3D%22%23131313%22%2F%3E%3Cdefs%3E%3CradialGradient%20id%3D%22paint0_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%28134.41%2068.3006%29%20rotate%28-33.9533%29%20scale%2890.6795%2083.3208%29%22%3E%3Cstop%20offset%3D%220.661458%22%20stop-color%3D%22%23C4FCF8%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint1_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%2842.7873%20129.218%29%20rotate%28-24.1606%29%20scale%28213.359%20196.045%29%22%3E%3Cstop%20stop-color%3D%22%23FF0099%22%20stop-opacity%3D%220.9%22%2F%3E%3Cstop%20offset%3D%220.770833%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint2_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%28176.854%20148.655%29%20rotate%28-53.4908%29%20scale%28107.342%2098.6309%29%22%3E%3Cstop%20stop-color%3D%22%23FFEC43%22%2F%3E%3Cstop%20offset%3D%220.805707%22%20stop-color%3D%22%23FFF6A8%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint3_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%2857.5443%2053.4752%29%20rotate%2820.3896%29%20scale%28137.027%20125.907%29%22%3E%3Cstop%20offset%3D%220.125%22%20stop-color%3D%22%235886FE%22%20stop-opacity%3D%220.46%22%2F%3E%3Cstop%20offset%3D%220.673044%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3C%2Fdefs%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2214%22%20height%3D%2215%22%20viewBox%3D%220%200%2014%2015%22%20fill%3D%22black%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20style%3D%22mix-blend-mode%3Adarken%22%3E%3Cpath%20d%3D%22M4.15217%201.55141C3.96412%201.52242%203.95619%201.51902%204.04468%201.5055C4.21427%201.47958%204.61472%201.51491%204.89067%201.58012C5.53489%201.73232%206.12109%202.12221%206.74683%202.81466L6.91307%202.99862L7.15088%202.96062C8.15274%202.8006%209.17194%202.92778%2010.0244%203.31918C10.2589%203.42686%2010.6287%203.64121%2010.6749%203.69629C10.6896%203.71384%2010.7166%203.82684%2010.7349%203.94742C10.7982%204.36458%2010.7665%204.68434%2010.6382%204.92317C10.5683%205.05313%2010.5644%205.09432%2010.6114%205.20554C10.6489%205.2943%2010.7534%205.35999%2010.8569%205.35985C11.0687%205.35956%2011.2968%205.0192%2011.4024%204.54561L11.4444%204.3575L11.5275%204.45109C11.9835%204.96459%2012.3417%205.66488%2012.4032%206.16335L12.4192%206.29332L12.3426%206.17517C12.2107%205.97186%2012.0781%205.83346%2011.9084%205.72183C11.6024%205.52062%2011.2789%205.45215%2010.4222%205.40727C9.64839%205.36675%209.21045%205.30106%208.77621%205.16032C8.03738%204.9209%207.66493%204.60204%206.78729%203.4576C6.39748%202.94928%206.15654%202.66804%205.91687%202.44155C5.37228%201.92691%204.83716%201.65701%204.15217%201.55141Z%22%2F%3E%3Cpath%20d%3D%22M10.8494%202.68637C10.8689%202.34575%2010.9153%202.12108%2011.0088%201.9159C11.0458%201.83469%2011.0804%201.76822%2011.0858%201.76822C11.0911%201.76822%2011.075%201.82816%2011.05%201.90142C10.9821%202.10054%2010.9709%202.3729%2011.0177%202.68978C11.0771%203.09184%2011.1109%203.14985%2011.5385%203.58416C11.739%203.78788%2011.9723%204.0448%2012.0568%204.15511L12.2106%204.35568L12.0568%204.21234C11.8688%204.03705%2011.4364%203.6952%2011.3409%203.64633C11.2768%203.61356%2011.2673%203.61413%2011.2278%203.65321C11.1914%203.68922%2011.1837%203.74333%2011.1787%203.99915C11.1708%204.39786%2011.1161%204.65377%2010.9842%204.90965C10.9128%205.04805%2010.9015%205.01851%2010.9661%204.8623C11.0143%204.74566%2011.0192%204.69439%2011.0189%204.30842C11.0181%203.53291%2010.9255%203.34647%2010.3823%203.02709C10.2447%202.94618%2010.0179%202.8295%209.87839%202.76778C9.73887%202.70606%209.62805%202.6523%209.63208%202.64828C9.64746%202.63307%2010.1772%202.78675%2010.3905%202.86828C10.7077%202.98954%2010.76%203.00526%2010.7985%202.99063C10.8244%202.98082%2010.8369%202.90608%2010.8494%202.68637Z%22%2F%3E%3Cpath%20d%3D%22M4.51745%204.01304C4.13569%203.49066%203.89948%202.68973%203.95062%202.091L3.96643%201.90572L4.05333%201.92148C4.21652%201.95106%204.49789%202.05515%204.62964%202.13469C4.9912%202.35293%205.14773%202.64027%205.30697%203.37811C5.35362%203.59423%205.41482%203.8388%205.44298%203.9216C5.48831%204.05487%205.65962%204.36617%205.7989%204.56834C5.89922%204.71395%205.83258%204.78295%205.61082%204.76305C5.27215%204.73267%204.8134%204.41799%204.51745%204.01304Z%22%2F%3E%3Cpath%20d%3D%22M10.3863%207.90088C8.60224%207.18693%207.97389%206.56721%207.97389%205.52157C7.97389%205.36769%207.97922%205.24179%207.98571%205.24179C7.99221%205.24179%208.06124%205.29257%208.1391%205.35465C8.50088%205.64305%208.906%205.76623%2010.0275%205.92885C10.6875%206.02455%2011.0589%206.10185%2011.4015%206.21477C12.4904%206.57371%2013.1641%207.30212%2013.3248%208.29426C13.3715%208.58255%2013.3441%209.12317%2013.2684%209.4081C13.2087%209.63315%2013.0263%2010.0388%2012.9779%2010.0544C12.9645%2010.0587%2012.9514%2010.0076%2012.9479%209.93809C12.9296%209.56554%2012.7402%209.20285%2012.4221%208.93116C12.0604%208.62227%2011.5745%208.37633%2010.3863%207.90088Z%22%2F%3E%3Cpath%20d%3D%22M9.13385%208.19748C9.11149%208.06527%209.07272%207.89643%209.04769%207.82228L9.00217%207.68748L9.08672%207.7818C9.20374%207.91233%209.2962%208.07937%209.37457%208.30185C9.43438%208.47165%209.44111%208.52215%209.44066%208.79807C9.4402%209.06896%209.43273%209.12575%209.3775%209.27858C9.29042%209.51959%209.18233%209.69048%209.00097%209.87391C8.67507%2010.2036%208.25607%2010.3861%207.65143%2010.4618C7.54633%2010.4749%207.24%2010.4971%206.97069%2010.511C6.292%2010.5461%205.84531%2010.6186%205.44393%2010.7587C5.38623%2010.7788%205.3347%2010.7911%205.32947%2010.7859C5.31323%2010.7698%205.58651%2010.6079%205.81223%2010.4998C6.1305%2010.3474%206.44733%2010.2643%207.15719%2010.1468C7.50785%2010.0887%207.86998%2010.0183%207.96194%209.99029C8.83033%209.72566%209.27671%209.04276%209.13385%208.19748Z%22%2F%3E%3Cpath%20d%3D%22M9.95169%209.64109C9.71465%209.13463%209.66022%208.64564%209.79009%208.18961C9.80399%208.14088%209.82632%208.101%209.83976%208.101C9.85319%208.101%209.90913%208.13105%209.96404%208.16777C10.0733%208.24086%2010.2924%208.36395%2010.876%208.68023C11.6043%209.0749%2012.0196%209.3805%2012.302%209.72965C12.5493%2010.0354%2012.7023%2010.3837%2012.776%2010.8084C12.8177%2011.0489%2012.7932%2011.6277%2012.7311%2011.8699C12.5353%2012.6337%2012.0802%2013.2336%2011.4311%2013.5837C11.336%2013.635%2011.2506%2013.6771%2011.2414%2013.6773C11.2321%2013.6775%2011.2668%2013.5899%2011.3184%2013.4827C11.5367%2013.029%2011.5616%2012.5877%2011.3965%2012.0965C11.2954%2011.7957%2011.0893%2011.4287%2010.6732%2010.8084C10.1893%2010.0873%2010.0707%209.89539%209.95169%209.64109Z%22%2F%3E%3Cpath%20d%3D%22M3.25046%2012.3737C3.91252%2011.8181%204.73629%2011.4234%205.48666%2011.3022C5.81005%2011.25%206.34877%2011.2707%206.64823%2011.3469C7.12824%2011.469%207.55763%2011.7425%207.78094%2012.0683C7.99918%2012.3867%208.09281%2012.6642%208.19029%2013.2816C8.22875%2013.5252%208.27057%2013.7697%208.28323%2013.8251C8.35644%2014.1451%208.4989%2014.4008%208.67544%2014.5293C8.95583%2014.7333%209.43865%2014.7459%209.91362%2014.5618C9.99423%2014.5305%2010.0642%2014.5089%2010.0691%2014.5138C10.0864%2014.5308%209.84719%2014.6899%209.67847%2014.7737C9.45143%2014.8864%209.2709%2014.93%209.03102%2014.93C8.59601%2014.93%208.23486%2014.7101%207.9335%2014.2616C7.87419%2014.1733%207.7409%2013.909%207.63729%2013.6741C7.3191%2012.9528%207.16199%2012.7331%206.79255%2012.4926C6.47104%2012.2834%206.05641%2012.2459%205.74449%2012.3979C5.33475%2012.5976%205.22043%2013.118%205.51389%2013.4478C5.63053%2013.5789%205.84803%2013.6919%206.02588%2013.7139C6.35861%2013.7551%206.64455%2013.5035%206.64455%2013.1696C6.64455%2012.9528%206.56071%2012.8291%206.34966%2012.7344C6.0614%2012.6051%205.75156%2012.7562%205.75304%2013.0254C5.75368%2013.1402%205.80396%2013.2122%205.91971%2013.2643C5.99397%2013.2977%205.99569%2013.3003%205.93514%2013.2878C5.67066%2013.2333%205.6087%2012.9164%205.82135%2012.706C6.07667%2012.4535%206.60461%2012.5649%206.78591%2012.9097C6.86208%2013.0545%206.87092%2013.3429%206.80451%2013.517C6.6559%2013.9068%206.22256%2014.1117%205.78297%2014.0002C5.48368%2013.9242%205.36181%2013.842%205.00097%2013.4726C4.37395%2012.8306%204.13053%2012.7062%203.22657%2012.566L3.05335%2012.5391L3.25046%2012.3737Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M0.308383%200.883984C2.40235%203.40996%203.84457%204.45213%204.00484%204.67231C4.13717%204.85412%204.08737%205.01757%203.86067%205.14567C3.7346%205.21689%203.47541%205.28905%203.34564%205.28905C3.19887%205.28905%203.14847%205.23278%203.14847%205.23278C3.06337%205.15255%203.01544%205.16658%202.5784%204.39555C1.97166%203.45981%201.46389%202.68357%201.45004%202.67057C1.41801%202.64052%201.41856%202.64153%202.51654%204.59413C2.69394%205.0011%202.55182%205.15049%202.55182%205.20845C2.55182%205.32636%202.51946%205.38834%202.37311%205.55059C2.12914%205.8211%202.02008%206.12505%201.94135%206.7541C1.8531%207.45926%201.60492%207.95737%200.917156%208.80989C0.514562%209.30893%200.448686%209.4004%200.3471%209.60153C0.219144%209.85482%200.183961%209.99669%200.169701%2010.3165C0.154629%2010.6547%200.183983%2010.8732%200.287934%2011.1965C0.378939%2011.4796%200.473932%2011.6665%200.716778%2012.0403C0.926351%2012.3629%201.04702%2012.6027%201.04702%2012.6965C1.04702%2012.7711%201.06136%2012.7712%201.38611%2012.6983C2.16328%2012.5239%202.79434%2012.2171%203.14925%2011.8411C3.36891%2011.6084%203.42048%2011.4799%203.42215%2011.1611C3.42325%2010.9525%203.41587%2010.9088%203.35914%2010.7888C3.2668%2010.5935%203.09869%2010.4311%202.72817%2010.1794C2.2427%209.84953%202.03534%209.58398%201.97807%209.21878C1.93108%208.91913%201.98559%208.70771%202.25416%208.14825C2.53214%207.56916%202.60103%207.32239%202.64763%206.73869C2.67773%206.36158%202.71941%206.21286%202.82842%206.09348C2.94212%205.969%203.04447%205.92684%203.32584%205.88863C3.78457%205.82635%204.07667%205.70839%204.31677%205.48849C4.52505%205.29772%204.61221%205.11391%204.62558%204.8372L4.63574%204.62747L4.51934%204.49259C4.09783%204.00411%200.0261003%200.5%200.000160437%200.5C-0.00538105%200.5%200.133325%200.672804%200.308383%200.883984ZM1.28364%2010.6992C1.37894%2010.5314%201.3283%2010.3158%201.16889%2010.2104C1.01827%2010.1109%200.78428%2010.1578%200.78428%2010.2875C0.78428%2010.3271%200.806303%2010.3559%200.855937%2010.3813C0.939514%2010.424%200.945581%2010.4721%200.879823%2010.5703C0.81323%2010.6698%200.818604%2010.7573%200.894991%2010.8167C1.0181%2010.9125%201.19237%2010.8598%201.28364%2010.6992Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M4.92523%205.99865C4.70988%206.06439%204.50054%206.29124%204.43574%206.5291C4.39621%206.67421%204.41864%206.92875%204.47785%207.00736C4.57351%207.13433%204.66602%207.16778%204.91651%207.16603C5.40693%207.16263%205.83327%206.95358%205.88284%206.69224C5.92347%206.47801%205.73622%206.18112%205.4783%206.05078C5.34521%205.98355%205.06217%205.95688%204.92523%205.99865ZM5.49853%206.44422C5.57416%206.33741%205.54107%206.22198%205.41245%206.14391C5.1675%205.99525%204.79708%206.11827%204.79708%206.34826C4.79708%206.46274%204.99025%206.58765%205.16731%206.58765C5.28516%206.58765%205.44644%206.5178%205.49853%206.44422Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2294%22%20height%3D%2294%22%20viewBox%3D%220%200%2094%2094%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%20%20%3Cpath%20d%3D%22M92%2047C92%2022.1472%2071.8528%202%2047%202C22.1472%202%202%2022.1472%202%2047C2%2071.8528%2022.1472%2092%2047%2092%22%20stroke%3D%22%232172E5%22%20stroke-width%3D%223%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E\"","export default \"f89237c6bc3f84db.png\"","module.exports=function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,\"a\",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p=\"\",r(r.s=3)}([function(e,t){e.exports=function(e){return e&&e.__esModule?e:{default:e}}},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}},function(e,t,r){\"use strict\";function n(){return Math.floor(9e4*Math.random())+1e4}Object.defineProperty(t,\"__esModule\",{value:!0}),t.sendAsyncWrapper=function(e,t){var r=this;return new Promise(function(o,a){r.sendAsync({jsonrpc:\"2.0\",id:n(),method:e,params:t||[]},function(e,t){e?a(e):o(t.result)})})},t.sendFortmaticAsyncWrapper=function(e){var t=this;return new Promise(function(r,n){t.getProvider().sendFortmaticAsync(e,function(e,t){e?n(e):r(t?t.result:{})})})},t.randomId=n,t.findExistingResponse=function(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},t=new v(m);return t.params=[e],i.sendFortmaticAsyncWrapper.call(g,t)}};var v=function e(t,r){(0,o.default)(this,e),this.id=(0,i.randomId)(),this.method=t,this.params=r?[r]:[{}]}},function(e,t,r){\"use strict\";var n=r(0);Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var o=n(r(6)),a=n(r(9)),i=n(r(1)),s=n(r(10)),c=r(11),u=n(r(12)),l=r(2),f=function(){function e(t,r){if((0,i.default)(this,e),this.fortmaticClient=t,this.requests={},this.queue=[],this.account=null,this.network=null,this.isFortmatic=!0,this.overlayReady=!1,this.isLoggedIn=!1,this.postMessages={FORTMATIC_HANDLE_BATCH_REQUEST:\"FORTMATIC_HANDLE_BATCH_REQUEST\",FORTMATIC_HANDLE_REQUEST:\"FORTMATIC_HANDLE_REQUEST\",FORTMATIC_HANDLE_FORTMATIC_REQUEST:\"FORTMATIC_HANDLE_FORTMATIC_REQUEST\",FORTMATIC_HANDLE_RESPONSE:\"FORTMATIC_HANDLE_RESPONSE\",FORTMATIC_OVERLAY_READY:\"FORTMATIC_OVERLAY_READY\",FORTMATIC_SHOW_OVERLAY:\"FORTMATIC_SHOW_OVERLAY\",FORTMATIC_HIDE_OVERLAY:\"FORTMATIC_HIDE_OVERLAY\",FORTMATIC_USER_DENIED:\"FORTMATIC_USER_DENIED\",FORTMATIC_USER_LOGOUT:\"FORTMATIC_USER_LOGOUT\",FORTMATIC_UNAUTHORIZED_API_KEY:\"FORTMATIC_UNAUTHORIZED_API_KEY\"},!r.API_KEY)throw new Error(\"Please provide a Fortmatic API key that you acquired from the developer dashboard.\");this.options={API_KEY:r.API_KEY,ETH_NETWORK:r.ETH_NETWORK,DOMAIN_ORIGIN:window.location?window.location.origin:\"\",version:c.version},this.queryParams=btoa(JSON.stringify(this.options)),this.constructPostMessage(),this.overlay=this.createOverlay(),this.listenMessage()}return(0,s.default)(e,[{key:\"constructPostMessage\",value:function(){var e=this;Object.keys(this.postMessages).map(function(t){e.postMessages[t]+=\"-\".concat(e.queryParams)})}},{key:\"createOverlay\",value:function(){var e=this;return new Promise(function(t,r){var n=function(){if(function(){var t=!0,r=!1,n=void 0;try{for(var o,a=document.getElementsByClassName(\"fortmatic-iframe\")[Symbol.iterator]();!(t=(o=a.next()).done);t=!0)if(o.value.src.includes(e.queryParams))return!1}catch(e){r=!0,n=e}finally{try{t||null==a.return||a.return()}finally{if(r)throw n}}return!0}()){var r=document.createElement(\"style\");r.innerHTML=u.default.css,r.type=\"text/css\",document.head.appendChild(r);var n=document.createElement(\"iframe\");n.className=\"fortmatic-iframe\",n.src=\"\".concat(e.fortmaticClient,\"/send?params=\").concat(e.queryParams),document.body.appendChild(n);var o=document.createElement(\"img\");o.src=\"https://static.fortmatic.com/assets/trans.gif\",document.body.appendChild(o),t({iframe:n})}else console.error(\"Fortmatic: Duplicate instances found.\")};[\"loaded\",\"interactive\",\"complete\"].indexOf(document.readyState)>-1?n():window.addEventListener(\"load\",n.bind(e),!1)})}},{key:\"showOverlay\",value:function(){var e=(0,a.default)(o.default.mark(function e(){return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.overlay;case 2:e.sent.iframe.style.display=\"block\";case 4:case\"end\":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:\"hideOverlay\",value:function(){var e=(0,a.default)(o.default.mark(function e(){return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.overlay;case 2:e.sent.iframe.style.display=\"none\";case 4:case\"end\":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:\"sendAsync\",value:function(e,t){e.length>0?this.enqueue({payload:{id:(0,l.randomId)(),batch:e.map(function(e){return e.id=(0,l.randomId)(),e}),method:\"eth_batchRequest\"},cb:t}):this.enqueue({payload:e,cb:t})}},{key:\"sendFortmaticAsync\",value:function(e,t){this.enqueue({payload:e,cb:t,isNative:!0})}},{key:\"send\",value:function(e,t){if(\"string\"==typeof e)return l.sendAsyncWrapper.call(this,e,t);if(!t){console.warn(\"Non-async web3 methods will be deprecated in web3 > 1.0, and are not supported by the Fortmatic provider. An async method to be used instead.\"),this.sendAsync(e,function(){});var r={};switch(e.method){case\"eth_accounts\":r=this.account?[this.account]:[];break;case\"eth_coinbase\":r=this.account;break;case\"net_version\":r=this.network||(this.options.API_KEY.startsWith(\"pk_live\")?1:4);break;case\"eth_uninstallFilter\":r=!0;break;default:r={}}return{id:e.id,jsonrpc:e.jsonrpc,result:r}}this.sendAsync(e,t)}},{key:\"enqueue\",value:function(e){this.queue.push(e),this.overlayReady&&this.dequeue()}},{key:\"dequeue\",value:function(){var e=(0,a.default)(o.default.mark(function e(){var t,r,n,a=this;return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(0!==this.queue.length){e.next=2;break}return e.abrupt(\"return\");case 2:if(!(t=this.queue.shift())){e.next=11;break}return r=t.payload,n=t.cb,r.id=(0,l.randomId)(),e.next=9,this.postMessage(t.isNative?this.postMessages.FORTMATIC_HANDLE_FORTMATIC_REQUEST:this.postMessages.FORTMATIC_HANDLE_REQUEST,t.payload);case 9:r.batch&&r.batch.length>0?(r.batch.forEach(function(e){a.requests[e.id]={parentId:r.id,payload:e,cb:function(e,t){var n=a.requests[r.id].batchResponse;if(e&&e.response&&!(0,l.findExistingResponse)(n,e.response.id))throw n.push({jsonrpc:\"2.0\",id:e.response.id,error:{code:e.response.code,message:e.response.message}}),a.requests[r.id].cb(null,n),e.response;if(t&&t.result&&!(0,l.findExistingResponse)(n,t.id))return n.push(t);throw new Error(\"Fortmatic: unexpected callback behavior\")}}}),this.requests[r.id]={payload:r,cb:n,batchResponse:[]}):this.requests[r.id]={payload:r,cb:n},this.dequeue();case 11:case\"end\":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:\"postMessage\",value:function(){var e=(0,a.default)(o.default.mark(function e(t,r){var n;return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.overlay;case 2:if(!(n=e.sent).iframe.contentWindow){e.next=7;break}n.iframe.contentWindow.postMessage({msgType:t,payload:r},\"*\"),e.next=8;break;case 7:throw new Error(\"Fortmatic: Modal is not ready.\");case 8:case\"end\":return e.stop()}},e,this)}));return function(t,r){return e.apply(this,arguments)}}()},{key:\"enable\",value:function(){return l.sendAsyncWrapper.call(this,\"eth_accounts\")}},{key:\"listenMessage\",value:function(){var e=this;window.addEventListener(\"message\",function(t){if(t.origin===e.fortmaticClient){var r=t.data.response?t.data.response.id:null;switch(t.data.msgType){case e.postMessages.FORTMATIC_OVERLAY_READY:e.overlayReady=!0,e.dequeue();break;case e.postMessages.FORTMATIC_HANDLE_RESPONSE:try{e.requests[r].cb(null,t.data.response);var n=e.requests[r].parentId;n&&e.requests[n].payload.batch.length===e.requests[n].batchResponse.length&&e.requests[n].cb(null,e.requests[n].batchResponse),\"eth_accounts\"===e.requests[r].payload.method?e.account=t.data.response.result[0]:\"eth_coinbase\"===e.requests[r].payload.method?e.account=t.data.response.result:\"net_version\"===e.requests[r].payload.method&&(e.network=t.data.response.result)}catch(e){}e.isLoggedIn=!0,e.dequeue();break;case e.postMessages.FORTMATIC_HIDE_OVERLAY:e.hideOverlay();break;case e.postMessages.FORTMATIC_SHOW_OVERLAY:e.showOverlay();break;case e.postMessages.FORTMATIC_USER_LOGOUT:e.account=null,e.network=null,e.isLoggedIn=!1;break;case e.postMessages.FORTMATIC_UNAUTHORIZED_API_KEY:throw e.overlayReady=!1,new Error(\"Given API key is not authorized to access the resource.\");case e.postMessages.FORTMATIC_USER_DENIED:if(r){var o=t.data.response&&t.data.response.message?t.data.response.message:\"Fortmatic: Modal was closed without executing action!\",a=t.data.response&&t.data.response.code?t.data.response.code:1;e.requests[r].cb({message:o,code:a,response:t.data.response})}else e.queue.forEach(function(e){return e.cb({message:\"Fortmatic: Modal was closed without executing action!\",code:1})});e.dequeue()}}})}}]),e}();t.default=f},function(e,t,r){e.exports=r(7)},function(e,t,r){var n=function(){return this||\"object\"==typeof self&&self}()||Function(\"return this\")(),o=n.regeneratorRuntime&&Object.getOwnPropertyNames(n).indexOf(\"regeneratorRuntime\")>=0,a=o&&n.regeneratorRuntime;if(n.regeneratorRuntime=void 0,e.exports=r(8),o)n.regeneratorRuntime=a;else try{delete n.regeneratorRuntime}catch(e){n.regeneratorRuntime=void 0}},function(e,t){!function(t){\"use strict\";var r,n=Object.prototype,o=n.hasOwnProperty,a=\"function\"==typeof Symbol?Symbol:{},i=a.iterator||\"@@iterator\",s=a.asyncIterator||\"@@asyncIterator\",c=a.toStringTag||\"@@toStringTag\",u=\"object\"==typeof e,l=t.regeneratorRuntime;if(l)u&&(e.exports=l);else{(l=t.regeneratorRuntime=u?e.exports:{}).wrap=_;var f=\"suspendedStart\",d=\"suspendedYield\",h=\"executing\",p=\"completed\",m={},y={};y[i]=function(){return this};var v=Object.getPrototypeOf,g=v&&v(v(L([])));g&&g!==n&&o.call(g,i)&&(y=g);var b=A.prototype=w.prototype=Object.create(y);T.prototype=b.constructor=A,A.constructor=T,A[c]=T.displayName=\"GeneratorFunction\",l.isGeneratorFunction=function(e){var t=\"function\"==typeof e&&e.constructor;return!!t&&(t===T||\"GeneratorFunction\"===(t.displayName||t.name))},l.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,A):(e.__proto__=A,c in e||(e[c]=\"GeneratorFunction\")),e.prototype=Object.create(b),e},l.awrap=function(e){return{__await:e}},O(R.prototype),R.prototype[s]=function(){return this},l.AsyncIterator=R,l.async=function(e,t,r,n){var o=new R(_(e,t,r,n));return l.isGeneratorFunction(t)?o:o.next().then(function(e){return e.done?e.value:o.next()})},O(b),b[c]=\"Generator\",b[i]=function(){return this},b.toString=function(){return\"[object Generator]\"},l.keys=function(e){var t=[];for(var r in e)t.push(r);return t.reverse(),function r(){for(;t.length;){var n=t.pop();if(n in e)return r.value=n,r.done=!1,r}return r.done=!0,r}},l.values=L,F.prototype={constructor:F,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=r,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=r,this.tryEntries.forEach(M),!e)for(var t in this)\"t\"===t.charAt(0)&&o.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=r)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if(\"throw\"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function n(n,o){return s.type=\"throw\",s.arg=e,t.next=n,o&&(t.method=\"next\",t.arg=r),!!o}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],s=i.completion;if(\"root\"===i.tryLoc)return n(\"end\");if(i.tryLoc<=this.prev){var c=o.call(i,\"catchLoc\"),u=o.call(i,\"finallyLoc\");if(c&&u){if(this.prev=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&o.call(n,\"finallyLoc\")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),M(r),m}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if(\"throw\"===n.type){var o=n.arg;M(r)}return o}}throw new Error(\"illegal catch attempt\")},delegateYield:function(e,t,n){return this.delegate={iterator:L(e),resultName:t,nextLoc:n},\"next\"===this.method&&(this.arg=r),m}}}function _(e,t,r,n){var o=t&&t.prototype instanceof w?t:w,a=Object.create(o.prototype),i=new F(n||[]);return a._invoke=function(e,t,r){var n=f;return function(o,a){if(n===h)throw new Error(\"Generator is already running\");if(n===p){if(\"throw\"===o)throw a;return k()}for(r.method=o,r.arg=a;;){var i=r.delegate;if(i){var s=I(i,r);if(s){if(s===m)continue;return s}}if(\"next\"===r.method)r.sent=r._sent=r.arg;else if(\"throw\"===r.method){if(n===f)throw n=p,r.arg;r.dispatchException(r.arg)}else\"return\"===r.method&&r.abrupt(\"return\",r.arg);n=h;var c=E(e,t,r);if(\"normal\"===c.type){if(n=r.done?p:d,c.arg===m)continue;return{value:c.arg,done:r.done}}\"throw\"===c.type&&(n=p,r.method=\"throw\",r.arg=c.arg)}}}(e,r,i),a}function E(e,t,r){try{return{type:\"normal\",arg:e.call(t,r)}}catch(e){return{type:\"throw\",arg:e}}}function w(){}function T(){}function A(){}function O(e){[\"next\",\"throw\",\"return\"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function R(e){var t;this._invoke=function(r,n){function a(){return new Promise(function(t,a){!function t(r,n,a,i){var s=E(e[r],e,n);if(\"throw\"!==s.type){var c=s.arg,u=c.value;return u&&\"object\"==typeof u&&o.call(u,\"__await\")?Promise.resolve(u.__await).then(function(e){t(\"next\",e,a,i)},function(e){t(\"throw\",e,a,i)}):Promise.resolve(u).then(function(e){c.value=e,a(c)},function(e){return t(\"throw\",e,a,i)})}i(s.arg)}(r,n,t,a)})}return t=t?t.then(a,a):a()}}function I(e,t){var n=e.iterator[t.method];if(n===r){if(t.delegate=null,\"throw\"===t.method){if(e.iterator.return&&(t.method=\"return\",t.arg=r,I(e,t),\"throw\"===t.method))return m;t.method=\"throw\",t.arg=new TypeError(\"The iterator does not provide a 'throw' method\")}return m}var o=E(n,e.iterator,t.arg);if(\"throw\"===o.type)return t.method=\"throw\",t.arg=o.arg,t.delegate=null,m;var a=o.arg;return a?a.done?(t[e.resultName]=a.value,t.next=e.nextLoc,\"return\"!==t.method&&(t.method=\"next\",t.arg=r),t.delegate=null,m):a:(t.method=\"throw\",t.arg=new TypeError(\"iterator result is not an object\"),t.delegate=null,m)}function x(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function M(e){var t=e.completion||{};t.type=\"normal\",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:\"root\"}],e.forEach(x,this),this.reset(!0)}function L(e){if(e){var t=e[i];if(t)return t.call(e);if(\"function\"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n (https://fortmatic.com/)\",license:\"MIT\",repository:{type:\"git\",url:\"https://github.com/fortmatic/fortmatic-js\"},keywords:[\"Auth\",\"Login\",\"Web3\",\"Crypto\",\"Ethereum\",\"MetaMask\",\"Wallet\",\"Blockchain\",\"Dapp\"],homepage:\"https://www.fortmatic.com\",ava:{require:[\"@babel/register\"],files:[\"test/**/*.spec.js\"],babel:{testOptions:{presets:[\"@babel/env\"],plugins:[\"@babel/plugin-proposal-function-bind\",\"@babel/plugin-transform-runtime\"]}},verbose:!0},nyc:{all:!1,\"check-coverage\":!0,\"per-file\":!0,lines:80,statements:80,functions:80,branches:80,include:[\"src/**/*.js\"],exclude:[\"*/style.js\"],require:[],reporter:[\"html\",\"lcov\"]},dependencies:{\"@babel/runtime\":\"7.3.4\"},devDependencies:{\"@babel/core\":\"7.3.4\",\"@babel/plugin-proposal-function-bind\":\"7.2.0\",\"@babel/plugin-transform-modules-commonjs\":\"7.2.0\",\"@babel/plugin-transform-runtime\":\"7.3.4\",\"@babel/preset-env\":\"7.3.4\",\"@babel/register\":\"7.0.0\",ava:\"2.2.0\",\"babel-eslint\":\"10.0.1\",\"babel-loader\":\"8.0.5\",eslint:\"5.9.0\",lodash:\"4.17.11\",nyc:\"13.1.0\",sinon:\"7.1.1\",webpack:\"4.26.1\",\"webpack-cli\":\"3.1.2\"}}},function(e,t,r){\"use strict\";t.css=\"\\n .fortmatic-iframe {\\n display: none;\\n position: fixed;\\n top: 0;\\n right: 0;\\n width: 100%;\\n height: 100%;\\n border: none;\\n border-radius: 0;\\n z-index: 2147483647;\\n }\\n\"}]);"],"names":["_path","_line","_extends","React"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mBAAe;;AC+Lf,sBAAe,0kPAA0kP;;ACvIzlP,sBAAe,0sDAA0sD;;AC7BztD,uBAAe,k3CAAk3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACwFD,oBAAe,0tLAA0tL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9DzuL,uBAAe,qmTAAqmT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpBpnT,eAAe,mcAAmc;;ACvBld,mBAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICAf,SAAc,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAA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"} \ No newline at end of file diff --git a/dist2/types/abis/types/commons.d.ts b/dist2/types/abis/types/commons.d.ts new file mode 100644 index 00000000000..fbb82635f1f --- /dev/null +++ b/dist2/types/abis/types/commons.d.ts @@ -0,0 +1,16 @@ +import { EventFilter, Event } from "ethers"; +import { Result } from "@ethersproject/abi"; +export interface TypedEventFilter<_EventArgsArray, _EventArgsObject> extends EventFilter { +} +export interface TypedEvent extends Event { + args: EventArgs; +} +export declare type TypedListener, EventArgsObject> = (...listenerArg: [ + ...EventArgsArray, + TypedEvent +]) => void; +export declare type MinEthersFactory = { + deploy(...a: ARGS[]): Promise; +}; +export declare type GetContractTypeFromFactory = F extends MinEthersFactory ? C : never; +export declare type GetARGsTypeFromFactory = F extends MinEthersFactory ? Parameters : never; diff --git a/dist2/types/abis/types/factories/ArgentWalletContract__factory.d.ts b/dist2/types/abis/types/factories/ArgentWalletContract__factory.d.ts new file mode 100644 index 00000000000..af199c61bc7 --- /dev/null +++ b/dist2/types/abis/types/factories/ArgentWalletContract__factory.d.ts @@ -0,0 +1,40 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { ArgentWalletContract, ArgentWalletContractInterface } from "../ArgentWalletContract"; +export declare class ArgentWalletContract__factory { + static readonly abi: ({ + inputs: { + components: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + } | { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + })[]; + static createInterface(): ArgentWalletContractInterface; + static connect(address: string, signerOrProvider: Signer | Provider): ArgentWalletContract; +} diff --git a/dist2/types/abis/types/factories/ArgentWalletDetector__factory.d.ts b/dist2/types/abis/types/factories/ArgentWalletDetector__factory.d.ts new file mode 100644 index 00000000000..fc017d66041 --- /dev/null +++ b/dist2/types/abis/types/factories/ArgentWalletDetector__factory.d.ts @@ -0,0 +1,46 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { ArgentWalletDetector, ArgentWalletDetectorInterface } from "../ArgentWalletDetector"; +export declare class ArgentWalletDetector__factory { + static readonly abi: ({ + inputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + anonymous?: undefined; + name?: undefined; + outputs?: undefined; + } | { + anonymous: boolean; + inputs: { + indexed: boolean; + internalType: string; + name: string; + type: string; + }[]; + name: string; + type: string; + stateMutability?: undefined; + outputs?: undefined; + } | { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + anonymous?: undefined; + })[]; + static createInterface(): ArgentWalletDetectorInterface; + static connect(address: string, signerOrProvider: Signer | Provider): ArgentWalletDetector; +} diff --git a/dist2/types/abis/types/factories/Eip2612__factory.d.ts b/dist2/types/abis/types/factories/Eip2612__factory.d.ts new file mode 100644 index 00000000000..3db8b297f03 --- /dev/null +++ b/dist2/types/abis/types/factories/Eip2612__factory.d.ts @@ -0,0 +1,22 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { Eip2612, Eip2612Interface } from "../Eip2612"; +export declare class Eip2612__factory { + static readonly abi: { + constant: boolean; + inputs: { + name: string; + type: string; + }[]; + name: string; + outputs: { + name: string; + type: string; + }[]; + payable: boolean; + stateMutability: string; + type: string; + }[]; + static createInterface(): Eip2612Interface; + static connect(address: string, signerOrProvider: Signer | Provider): Eip2612; +} diff --git a/dist2/types/abis/types/factories/EnsPublicResolver__factory.d.ts b/dist2/types/abis/types/factories/EnsPublicResolver__factory.d.ts new file mode 100644 index 00000000000..9b2bbd80e3d --- /dev/null +++ b/dist2/types/abis/types/factories/EnsPublicResolver__factory.d.ts @@ -0,0 +1,52 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { EnsPublicResolver, EnsPublicResolverInterface } from "../EnsPublicResolver"; +export declare class EnsPublicResolver__factory { + static readonly abi: ({ + inputs: { + internalType: string; + name: string; + type: string; + }[]; + payable: boolean; + stateMutability: string; + type: string; + anonymous?: undefined; + name?: undefined; + constant?: undefined; + outputs?: undefined; + } | { + anonymous: boolean; + inputs: { + indexed: boolean; + internalType: string; + name: string; + type: string; + }[]; + name: string; + type: string; + payable?: undefined; + stateMutability?: undefined; + constant?: undefined; + outputs?: undefined; + } | { + constant: boolean; + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + payable: boolean; + stateMutability: string; + type: string; + anonymous?: undefined; + })[]; + static createInterface(): EnsPublicResolverInterface; + static connect(address: string, signerOrProvider: Signer | Provider): EnsPublicResolver; +} diff --git a/dist2/types/abis/types/factories/EnsRegistrar__factory.d.ts b/dist2/types/abis/types/factories/EnsRegistrar__factory.d.ts new file mode 100644 index 00000000000..3cea77158f1 --- /dev/null +++ b/dist2/types/abis/types/factories/EnsRegistrar__factory.d.ts @@ -0,0 +1,52 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { EnsRegistrar, EnsRegistrarInterface } from "../EnsRegistrar"; +export declare class EnsRegistrar__factory { + static readonly abi: ({ + inputs: { + internalType: string; + name: string; + type: string; + }[]; + payable: boolean; + stateMutability: string; + type: string; + anonymous?: undefined; + name?: undefined; + constant?: undefined; + outputs?: undefined; + } | { + anonymous: boolean; + inputs: { + indexed: boolean; + internalType: string; + name: string; + type: string; + }[]; + name: string; + type: string; + payable?: undefined; + stateMutability?: undefined; + constant?: undefined; + outputs?: undefined; + } | { + constant: boolean; + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + payable: boolean; + stateMutability: string; + type: string; + anonymous?: undefined; + })[]; + static createInterface(): EnsRegistrarInterface; + static connect(address: string, signerOrProvider: Signer | Provider): EnsRegistrar; +} diff --git a/dist2/types/abis/types/factories/Erc1155__factory.d.ts b/dist2/types/abis/types/factories/Erc1155__factory.d.ts new file mode 100644 index 00000000000..73baaa6b55d --- /dev/null +++ b/dist2/types/abis/types/factories/Erc1155__factory.d.ts @@ -0,0 +1,24 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { Erc1155, Erc1155Interface } from "../Erc1155"; +export declare class Erc1155__factory { + static readonly abi: { + constant: boolean; + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + payable: boolean; + stateMutability: string; + type: string; + }[]; + static createInterface(): Erc1155Interface; + static connect(address: string, signerOrProvider: Signer | Provider): Erc1155; +} diff --git a/dist2/types/abis/types/factories/Erc20Bytes32__factory.d.ts b/dist2/types/abis/types/factories/Erc20Bytes32__factory.d.ts new file mode 100644 index 00000000000..5d6bc468642 --- /dev/null +++ b/dist2/types/abis/types/factories/Erc20Bytes32__factory.d.ts @@ -0,0 +1,19 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { Erc20Bytes32, Erc20Bytes32Interface } from "../Erc20Bytes32"; +export declare class Erc20Bytes32__factory { + static readonly abi: { + constant: boolean; + inputs: never[]; + name: string; + outputs: { + name: string; + type: string; + }[]; + payable: boolean; + stateMutability: string; + type: string; + }[]; + static createInterface(): Erc20Bytes32Interface; + static connect(address: string, signerOrProvider: Signer | Provider): Erc20Bytes32; +} diff --git a/dist2/types/abis/types/factories/Erc20__factory.d.ts b/dist2/types/abis/types/factories/Erc20__factory.d.ts new file mode 100644 index 00000000000..554b75acee9 --- /dev/null +++ b/dist2/types/abis/types/factories/Erc20__factory.d.ts @@ -0,0 +1,45 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { Erc20, Erc20Interface } from "../Erc20"; +export declare class Erc20__factory { + static readonly abi: ({ + constant: boolean; + inputs: { + name: string; + type: string; + }[]; + name: string; + outputs: { + name: string; + type: string; + }[]; + payable: boolean; + stateMutability: string; + type: string; + anonymous?: undefined; + } | { + payable: boolean; + stateMutability: string; + type: string; + constant?: undefined; + inputs?: undefined; + name?: undefined; + outputs?: undefined; + anonymous?: undefined; + } | { + anonymous: boolean; + inputs: { + indexed: boolean; + name: string; + type: string; + }[]; + name: string; + type: string; + constant?: undefined; + outputs?: undefined; + payable?: undefined; + stateMutability?: undefined; + })[]; + static createInterface(): Erc20Interface; + static connect(address: string, signerOrProvider: Signer | Provider): Erc20; +} diff --git a/dist2/types/abis/types/factories/Erc721__factory.d.ts b/dist2/types/abis/types/factories/Erc721__factory.d.ts new file mode 100644 index 00000000000..8fe0731bbd1 --- /dev/null +++ b/dist2/types/abis/types/factories/Erc721__factory.d.ts @@ -0,0 +1,22 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { Erc721, Erc721Interface } from "../Erc721"; +export declare class Erc721__factory { + static readonly abi: { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + }[]; + static createInterface(): Erc721Interface; + static connect(address: string, signerOrProvider: Signer | Provider): Erc721; +} diff --git a/dist2/types/abis/types/factories/GovernorBravo__factory.d.ts b/dist2/types/abis/types/factories/GovernorBravo__factory.d.ts new file mode 100644 index 00000000000..9ca8bd61bcc --- /dev/null +++ b/dist2/types/abis/types/factories/GovernorBravo__factory.d.ts @@ -0,0 +1,61 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { GovernorBravo, GovernorBravoInterface } from "../GovernorBravo"; +export declare class GovernorBravo__factory { + static readonly abi: ({ + anonymous: boolean; + inputs: { + indexed: boolean; + internalType: string; + name: string; + type: string; + }[]; + name: string; + type: string; + constant?: undefined; + outputs?: undefined; + payable?: undefined; + stateMutability?: undefined; + } | { + constant: boolean; + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + payable: boolean; + stateMutability: string; + type: string; + anonymous?: undefined; + } | { + constant: boolean; + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + components: { + internalType: string; + name: string; + type: string; + }[]; + internalType: string; + name: string; + type: string; + }[]; + payable: boolean; + stateMutability: string; + type: string; + anonymous?: undefined; + })[]; + static createInterface(): GovernorBravoInterface; + static connect(address: string, signerOrProvider: Signer | Provider): GovernorBravo; +} diff --git a/dist2/types/abis/types/factories/Weth__factory.d.ts b/dist2/types/abis/types/factories/Weth__factory.d.ts new file mode 100644 index 00000000000..04c7bcd914c --- /dev/null +++ b/dist2/types/abis/types/factories/Weth__factory.d.ts @@ -0,0 +1,45 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { Weth, WethInterface } from "../Weth"; +export declare class Weth__factory { + static readonly abi: ({ + constant: boolean; + inputs: { + name: string; + type: string; + }[]; + name: string; + outputs: { + name: string; + type: string; + }[]; + payable: boolean; + stateMutability: string; + type: string; + anonymous?: undefined; + } | { + payable: boolean; + stateMutability: string; + type: string; + constant?: undefined; + inputs?: undefined; + name?: undefined; + outputs?: undefined; + anonymous?: undefined; + } | { + anonymous: boolean; + inputs: { + indexed: boolean; + name: string; + type: string; + }[]; + name: string; + type: string; + constant?: undefined; + outputs?: undefined; + payable?: undefined; + stateMutability?: undefined; + })[]; + static createInterface(): WethInterface; + static connect(address: string, signerOrProvider: Signer | Provider): Weth; +} diff --git a/dist2/types/abis/types/index.d.ts b/dist2/types/abis/types/index.d.ts new file mode 100644 index 00000000000..0f11f26eb49 --- /dev/null +++ b/dist2/types/abis/types/index.d.ts @@ -0,0 +1,22 @@ +export type { ArgentWalletContract } from "./ArgentWalletContract"; +export type { ArgentWalletDetector } from "./ArgentWalletDetector"; +export type { Eip2612 } from "./Eip2612"; +export type { EnsPublicResolver } from "./EnsPublicResolver"; +export type { EnsRegistrar } from "./EnsRegistrar"; +export type { Erc1155 } from "./Erc1155"; +export type { Erc20Bytes32 } from "./Erc20Bytes32"; +export type { Erc20 } from "./Erc20"; +export type { Erc721 } from "./Erc721"; +export type { GovernorBravo } from "./GovernorBravo"; +export type { Weth } from "./Weth"; +export { ArgentWalletContract__factory } from "./factories/ArgentWalletContract__factory"; +export { ArgentWalletDetector__factory } from "./factories/ArgentWalletDetector__factory"; +export { Eip2612__factory } from "./factories/Eip2612__factory"; +export { EnsPublicResolver__factory } from "./factories/EnsPublicResolver__factory"; +export { EnsRegistrar__factory } from "./factories/EnsRegistrar__factory"; +export { Erc1155__factory } from "./factories/Erc1155__factory"; +export { Erc20Bytes32__factory } from "./factories/Erc20Bytes32__factory"; +export { Erc20__factory } from "./factories/Erc20__factory"; +export { Erc721__factory } from "./factories/Erc721__factory"; +export { GovernorBravo__factory } from "./factories/GovernorBravo__factory"; +export { Weth__factory } from "./factories/Weth__factory"; diff --git a/dist2/types/components/AccountDetails/Copy.d.ts b/dist2/types/components/AccountDetails/Copy.d.ts new file mode 100644 index 00000000000..353684f4677 --- /dev/null +++ b/dist2/types/components/AccountDetails/Copy.d.ts @@ -0,0 +1,5 @@ +import React from 'react'; +export default function CopyHelper(props: { + toCopy: string; + children?: React.ReactNode; +}): JSX.Element; diff --git a/dist2/types/components/AccountDetails/Transaction.d.ts b/dist2/types/components/AccountDetails/Transaction.d.ts new file mode 100644 index 00000000000..292d3b5d01a --- /dev/null +++ b/dist2/types/components/AccountDetails/Transaction.d.ts @@ -0,0 +1,4 @@ +/// +export default function Transaction({ hash }: { + hash: string; +}): JSX.Element | null; diff --git a/dist2/types/components/AccountDetails/TransactionSummary.d.ts b/dist2/types/components/AccountDetails/TransactionSummary.d.ts new file mode 100644 index 00000000000..aa79b269737 --- /dev/null +++ b/dist2/types/components/AccountDetails/TransactionSummary.d.ts @@ -0,0 +1,5 @@ +/// +import { TransactionInfo } from '../../state/transactions/actions'; +export declare function TransactionSummary({ info }: { + info: TransactionInfo; +}): JSX.Element; diff --git a/dist2/types/components/AccountDetails/index.d.ts b/dist2/types/components/AccountDetails/index.d.ts new file mode 100644 index 00000000000..54fab84b683 --- /dev/null +++ b/dist2/types/components/AccountDetails/index.d.ts @@ -0,0 +1,10 @@ +/// +interface AccountDetailsProps { + toggleWalletModal: () => void; + pendingTransactions: string[]; + confirmedTransactions: string[]; + ENSName?: string; + openOptions: () => void; +} +export default function AccountDetails({ toggleWalletModal, pendingTransactions, confirmedTransactions, ENSName, openOptions, }: AccountDetailsProps): JSX.Element; +export {}; diff --git a/dist2/types/components/AddressInputPanel/index.d.ts b/dist2/types/components/AddressInputPanel/index.d.ts new file mode 100644 index 00000000000..737d50e1730 --- /dev/null +++ b/dist2/types/components/AddressInputPanel/index.d.ts @@ -0,0 +1,9 @@ +import { ReactNode } from 'react'; +export default function AddressInputPanel({ id, className, label, placeholder, value, onChange, }: { + id?: string; + className?: string; + label?: ReactNode; + placeholder?: string; + value: string; + onChange: (value: string) => void; +}): JSX.Element; diff --git a/dist2/types/components/AnimatedDropdown/index.d.ts b/dist2/types/components/AnimatedDropdown/index.d.ts new file mode 100644 index 00000000000..300fd7f3552 --- /dev/null +++ b/dist2/types/components/AnimatedDropdown/index.d.ts @@ -0,0 +1,8 @@ +/// +/** + * @param open conditional to show content or hide + * @returns Wrapper to smoothly hide and expand content + */ +export default function AnimatedDropdown({ open, children }: React.PropsWithChildren<{ + open: boolean; +}>): JSX.Element; diff --git a/dist2/types/components/Badge/RangeBadge.d.ts b/dist2/types/components/Badge/RangeBadge.d.ts new file mode 100644 index 00000000000..322c015ec42 --- /dev/null +++ b/dist2/types/components/Badge/RangeBadge.d.ts @@ -0,0 +1,5 @@ +/// +export default function RangeBadge({ removed, inRange, }: { + removed: boolean | undefined; + inRange: boolean | undefined; +}): JSX.Element; diff --git a/dist2/types/components/Badge/index.d.ts b/dist2/types/components/Badge/index.d.ts new file mode 100644 index 00000000000..dd0f7b6cc6f --- /dev/null +++ b/dist2/types/components/Badge/index.d.ts @@ -0,0 +1,17 @@ +/// +import { DefaultTheme } from 'styled-components/macro'; +export declare enum BadgeVariant { + DEFAULT = "DEFAULT", + NEGATIVE = "NEGATIVE", + POSITIVE = "POSITIVE", + PRIMARY = "PRIMARY", + WARNING = "WARNING", + WARNING_OUTLINE = "WARNING_OUTLINE" +} +interface BadgeProps { + variant?: BadgeVariant; +} +declare const Badge: import("styled-components").StyledComponent<"div", DefaultTheme, BadgeProps & { + children?: import("react").ReactNode; +}, never>; +export default Badge; diff --git a/dist2/types/components/Blocklist/index.d.ts b/dist2/types/components/Blocklist/index.d.ts new file mode 100644 index 00000000000..a877e1c2bf5 --- /dev/null +++ b/dist2/types/components/Blocklist/index.d.ts @@ -0,0 +1,4 @@ +import { ReactNode } from 'react'; +export default function Blocklist({ children }: { + children: ReactNode; +}): JSX.Element; diff --git a/dist2/types/components/Button/index.d.ts b/dist2/types/components/Button/index.d.ts new file mode 100644 index 00000000000..31eb9e3a1e9 --- /dev/null +++ b/dist2/types/components/Button/index.d.ts @@ -0,0 +1,74 @@ +/// +import { ButtonProps as ButtonPropsOriginal } from 'rebass/styled-components'; +declare type ButtonProps = Omit; +export declare const BaseButton: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { + padding?: string | undefined; + width?: string | undefined; + $borderRadius?: string | undefined; + altDisabledStyle?: boolean | undefined; +} & ButtonProps, never>; +export declare const ButtonPrimary: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { + padding?: string | undefined; + width?: string | undefined; + $borderRadius?: string | undefined; + altDisabledStyle?: boolean | undefined; +} & ButtonProps, never>; +export declare const ButtonLight: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { + padding?: string | undefined; + width?: string | undefined; + $borderRadius?: string | undefined; + altDisabledStyle?: boolean | undefined; +} & ButtonProps, never>; +export declare const ButtonGray: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { + padding?: string | undefined; + width?: string | undefined; + $borderRadius?: string | undefined; + altDisabledStyle?: boolean | undefined; +} & ButtonProps, never>; +export declare const ButtonSecondary: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { + padding?: string | undefined; + width?: string | undefined; + $borderRadius?: string | undefined; + altDisabledStyle?: boolean | undefined; +} & ButtonProps, never>; +export declare const ButtonOutlined: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { + padding?: string | undefined; + width?: string | undefined; + $borderRadius?: string | undefined; + altDisabledStyle?: boolean | undefined; +} & ButtonProps, never>; +export declare const ButtonYellow: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { + padding?: string | undefined; + width?: string | undefined; + $borderRadius?: string | undefined; + altDisabledStyle?: boolean | undefined; +} & ButtonProps, never>; +export declare const ButtonEmpty: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { + padding?: string | undefined; + width?: string | undefined; + $borderRadius?: string | undefined; + altDisabledStyle?: boolean | undefined; +} & ButtonProps, never>; +export declare const ButtonText: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { + padding?: string | undefined; + width?: string | undefined; + $borderRadius?: string | undefined; + altDisabledStyle?: boolean | undefined; +} & ButtonProps, never>; +export declare function ButtonConfirmed({ confirmed, altDisabledStyle, ...rest }: { + confirmed?: boolean; + altDisabledStyle?: boolean; +} & ButtonProps): JSX.Element; +export declare function ButtonError({ error, ...rest }: { + error?: boolean; +} & ButtonProps): JSX.Element; +export declare function ButtonDropdown({ disabled, children, ...rest }: { + disabled?: boolean; +} & ButtonProps): JSX.Element; +export declare function ButtonDropdownLight({ disabled, children, ...rest }: { + disabled?: boolean; +} & ButtonProps): JSX.Element; +export declare function ButtonRadioChecked({ active, children, ...rest }: { + active?: boolean; +} & ButtonProps): JSX.Element; +export {}; diff --git a/dist2/types/components/Card/index.d.ts b/dist2/types/components/Card/index.d.ts new file mode 100644 index 00000000000..ad1ef9bd51f --- /dev/null +++ b/dist2/types/components/Card/index.d.ts @@ -0,0 +1,56 @@ +/// +declare const Card: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { + width?: string | undefined; + padding?: string | undefined; + border?: string | undefined; + $borderRadius?: string | undefined; +}, never>; +export default Card; +export declare const LightCard: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { + width?: string | undefined; + padding?: string | undefined; + border?: string | undefined; + $borderRadius?: string | undefined; +}, never>; +export declare const LightGreyCard: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { + width?: string | undefined; + padding?: string | undefined; + border?: string | undefined; + $borderRadius?: string | undefined; +}, never>; +export declare const GreyCard: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { + width?: string | undefined; + padding?: string | undefined; + border?: string | undefined; + $borderRadius?: string | undefined; +}, never>; +export declare const DarkGreyCard: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { + width?: string | undefined; + padding?: string | undefined; + border?: string | undefined; + $borderRadius?: string | undefined; +}, never>; +export declare const DarkCard: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { + width?: string | undefined; + padding?: string | undefined; + border?: string | undefined; + $borderRadius?: string | undefined; +}, never>; +export declare const OutlineCard: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { + width?: string | undefined; + padding?: string | undefined; + border?: string | undefined; + $borderRadius?: string | undefined; +}, never>; +export declare const YellowCard: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { + width?: string | undefined; + padding?: string | undefined; + border?: string | undefined; + $borderRadius?: string | undefined; +}, never>; +export declare const BlueCard: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { + width?: string | undefined; + padding?: string | undefined; + border?: string | undefined; + $borderRadius?: string | undefined; +}, never>; diff --git a/dist2/types/components/Column/index.d.ts b/dist2/types/components/Column/index.d.ts new file mode 100644 index 00000000000..454ccdfb709 --- /dev/null +++ b/dist2/types/components/Column/index.d.ts @@ -0,0 +1,7 @@ +declare const Column: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; +export declare const ColumnCenter: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; +export declare const AutoColumn: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, { + gap?: string | undefined; + justify?: "end" | "space-between" | "stretch" | "center" | "flex-end" | "flex-start" | "start" | undefined; +}, never>; +export default Column; diff --git a/dist2/types/components/Confetti/index.d.ts b/dist2/types/components/Confetti/index.d.ts new file mode 100644 index 00000000000..8964c5c73b6 --- /dev/null +++ b/dist2/types/components/Confetti/index.d.ts @@ -0,0 +1,5 @@ +/// +export default function Confetti({ start, variant }: { + start: boolean; + variant?: string; +}): JSX.Element | null; diff --git a/dist2/types/components/CurrencyInputPanel/FiatValue.d.ts b/dist2/types/components/CurrencyInputPanel/FiatValue.d.ts new file mode 100644 index 00000000000..acb386c2fb5 --- /dev/null +++ b/dist2/types/components/CurrencyInputPanel/FiatValue.d.ts @@ -0,0 +1,6 @@ +/// +import { Currency, CurrencyAmount, Percent } from '@uniswap/sdk-core'; +export declare function FiatValue({ fiatValue, priceImpact, }: { + fiatValue: CurrencyAmount | null | undefined; + priceImpact?: Percent; +}): JSX.Element; diff --git a/dist2/types/components/CurrencyInputPanel/index.d.ts b/dist2/types/components/CurrencyInputPanel/index.d.ts new file mode 100644 index 00000000000..820fb0f6853 --- /dev/null +++ b/dist2/types/components/CurrencyInputPanel/index.d.ts @@ -0,0 +1,28 @@ +import { Currency, CurrencyAmount, Percent, Token } from '@uniswap/sdk-core'; +import { Pair } from '@uniswap/v2-sdk'; +import { ReactNode } from 'react'; +interface CurrencyInputPanelProps { + value: string; + onUserInput: (value: string) => void; + onMax?: () => void; + showMaxButton: boolean; + label?: ReactNode; + onCurrencySelect?: (currency: Currency) => void; + currency?: Currency | null; + hideBalance?: boolean; + pair?: Pair | null; + hideInput?: boolean; + otherCurrency?: Currency | null; + fiatValue?: CurrencyAmount | null; + priceImpact?: Percent; + id: string; + showCommonBases?: boolean; + showCurrencyAmount?: boolean; + disableNonToken?: boolean; + renderBalance?: (amount: CurrencyAmount) => ReactNode; + locked?: boolean; + loading?: boolean; +} +export default function CurrencyInputPanel({ value, onUserInput, onMax, showMaxButton, onCurrencySelect, currency, otherCurrency, id, showCommonBases, showCurrencyAmount, disableNonToken, renderBalance, fiatValue, priceImpact, hideBalance, pair, // used for double token logo +hideInput, locked, loading, ...rest }: CurrencyInputPanelProps): JSX.Element; +export {}; diff --git a/dist2/types/components/CurrencyLogo/index.d.ts b/dist2/types/components/CurrencyLogo/index.d.ts new file mode 100644 index 00000000000..93a5955e841 --- /dev/null +++ b/dist2/types/components/CurrencyLogo/index.d.ts @@ -0,0 +1,7 @@ +import { Currency } from '@uniswap/sdk-core'; +import React from 'react'; +export default function CurrencyLogo({ currency, size, style, ...rest }: { + currency?: Currency | null; + size?: string; + style?: React.CSSProperties; +}): JSX.Element; diff --git a/dist2/types/components/DoubleLogo/index.d.ts b/dist2/types/components/DoubleLogo/index.d.ts new file mode 100644 index 00000000000..e43bbecab99 --- /dev/null +++ b/dist2/types/components/DoubleLogo/index.d.ts @@ -0,0 +1,10 @@ +/// +import { Currency } from '@uniswap/sdk-core'; +interface DoubleCurrencyLogoProps { + margin?: boolean; + size?: number; + currency0?: Currency; + currency1?: Currency; +} +export default function DoubleCurrencyLogo({ currency0, currency1, size, margin, }: DoubleCurrencyLogoProps): JSX.Element; +export {}; diff --git a/dist2/types/components/DowntimeWarning/index.d.ts b/dist2/types/components/DowntimeWarning/index.d.ts new file mode 100644 index 00000000000..8a1770ca2f8 --- /dev/null +++ b/dist2/types/components/DowntimeWarning/index.d.ts @@ -0,0 +1,5 @@ +/// +/** + * Shows a downtime warning for the network if it's relevant + */ +export default function DowntimeWarning(): JSX.Element | null; diff --git a/dist2/types/components/ErrorBoundary/index.d.ts b/dist2/types/components/ErrorBoundary/index.d.ts new file mode 100644 index 00000000000..93a208747c6 --- /dev/null +++ b/dist2/types/components/ErrorBoundary/index.d.ts @@ -0,0 +1,11 @@ +import React, { ErrorInfo } from 'react'; +declare type ErrorBoundaryState = { + error: Error | null; +}; +export default class ErrorBoundary extends React.Component { + constructor(props: unknown); + static getDerivedStateFromError(error: Error): ErrorBoundaryState; + componentDidCatch(error: Error, errorInfo: ErrorInfo): void; + render(): React.ReactNode; +} +export {}; diff --git a/dist2/types/components/FeeSelector/FeeOption.d.ts b/dist2/types/components/FeeSelector/FeeOption.d.ts new file mode 100644 index 00000000000..1837a05f6c5 --- /dev/null +++ b/dist2/types/components/FeeSelector/FeeOption.d.ts @@ -0,0 +1,13 @@ +/// +import { FeeAmount } from '@uniswap/v3-sdk'; +import { useFeeTierDistribution } from 'hooks/useFeeTierDistribution'; +import { PoolState } from 'hooks/usePools'; +interface FeeOptionProps { + feeAmount: FeeAmount; + active: boolean; + distributions: ReturnType['distributions']; + poolState: PoolState; + onClick: () => void; +} +export declare function FeeOption({ feeAmount, active, poolState, distributions, onClick }: FeeOptionProps): JSX.Element; +export {}; diff --git a/dist2/types/components/FeeSelector/FeeTierPercentageBadge.d.ts b/dist2/types/components/FeeSelector/FeeTierPercentageBadge.d.ts new file mode 100644 index 00000000000..6a2c8e91223 --- /dev/null +++ b/dist2/types/components/FeeSelector/FeeTierPercentageBadge.d.ts @@ -0,0 +1,9 @@ +/// +import { FeeAmount } from '@uniswap/v3-sdk'; +import { useFeeTierDistribution } from 'hooks/useFeeTierDistribution'; +import { PoolState } from 'hooks/usePools'; +export declare function FeeTierPercentageBadge({ feeAmount, distributions, poolState, }: { + feeAmount: FeeAmount; + distributions: ReturnType['distributions']; + poolState: PoolState; +}): JSX.Element; diff --git a/dist2/types/components/FeeSelector/index.d.ts b/dist2/types/components/FeeSelector/index.d.ts new file mode 100644 index 00000000000..77c5fe90712 --- /dev/null +++ b/dist2/types/components/FeeSelector/index.d.ts @@ -0,0 +1,10 @@ +/// +import { Currency } from '@uniswap/sdk-core'; +import { FeeAmount } from '@uniswap/v3-sdk'; +export default function FeeSelector({ disabled, feeAmount, handleFeePoolSelect, currencyA, currencyB, }: { + disabled?: boolean; + feeAmount?: FeeAmount; + handleFeePoolSelect: (feeAmount: FeeAmount) => void; + currencyA?: Currency | undefined; + currencyB?: Currency | undefined; +}): JSX.Element; diff --git a/dist2/types/components/FeeSelector/shared.d.ts b/dist2/types/components/FeeSelector/shared.d.ts new file mode 100644 index 00000000000..3a4e8e6274e --- /dev/null +++ b/dist2/types/components/FeeSelector/shared.d.ts @@ -0,0 +1,8 @@ +import { FeeAmount } from '@uniswap/v3-sdk'; +import { SupportedChainId } from 'constants/chains'; +import { ReactNode } from 'react'; +export declare const FEE_AMOUNT_DETAIL: Record; diff --git a/dist2/types/components/FormattedCurrencyAmount/index.d.ts b/dist2/types/components/FormattedCurrencyAmount/index.d.ts new file mode 100644 index 00000000000..b6ab9502343 --- /dev/null +++ b/dist2/types/components/FormattedCurrencyAmount/index.d.ts @@ -0,0 +1,6 @@ +/// +import { Currency, CurrencyAmount } from '@uniswap/sdk-core'; +export default function FormattedCurrencyAmount({ currencyAmount, significantDigits, }: { + currencyAmount: CurrencyAmount; + significantDigits?: number; +}): JSX.Element; diff --git a/dist2/types/components/Header/ChainConnectivityWarning.d.ts b/dist2/types/components/Header/ChainConnectivityWarning.d.ts new file mode 100644 index 00000000000..c9deac4829e --- /dev/null +++ b/dist2/types/components/Header/ChainConnectivityWarning.d.ts @@ -0,0 +1,2 @@ +/// +export declare function ChainConnectivityWarning(): JSX.Element; diff --git a/dist2/types/components/Header/HolidayOrnament.d.ts b/dist2/types/components/Header/HolidayOrnament.d.ts new file mode 100644 index 00000000000..72ddbc3414d --- /dev/null +++ b/dist2/types/components/Header/HolidayOrnament.d.ts @@ -0,0 +1,3 @@ +import { ReactElement } from 'react'; +declare const HolidayOrnament: () => ReactElement>; +export default HolidayOrnament; diff --git a/dist2/types/components/Header/NetworkSelector.d.ts b/dist2/types/components/Header/NetworkSelector.d.ts new file mode 100644 index 00000000000..edaf6033d8b --- /dev/null +++ b/dist2/types/components/Header/NetworkSelector.d.ts @@ -0,0 +1,2 @@ +/// +export default function NetworkSelector(): JSX.Element | null; diff --git a/dist2/types/components/Header/Polling.d.ts b/dist2/types/components/Header/Polling.d.ts new file mode 100644 index 00000000000..d458ddfc273 --- /dev/null +++ b/dist2/types/components/Header/Polling.d.ts @@ -0,0 +1,2 @@ +/// +export default function Polling(): JSX.Element; diff --git a/dist2/types/components/Header/index.d.ts b/dist2/types/components/Header/index.d.ts new file mode 100644 index 00000000000..573e642a3c0 --- /dev/null +++ b/dist2/types/components/Header/index.d.ts @@ -0,0 +1,2 @@ +/// +export default function Header(): JSX.Element; diff --git a/dist2/types/components/HoverInlineText/index.d.ts b/dist2/types/components/HoverInlineText/index.d.ts new file mode 100644 index 00000000000..67d3a9c2324 --- /dev/null +++ b/dist2/types/components/HoverInlineText/index.d.ts @@ -0,0 +1,11 @@ +/// +declare const HoverInlineText: ({ text, maxCharacters, margin, adjustSize, fontSize, textColor, link, ...rest }: { + text?: string | undefined; + maxCharacters?: number | undefined; + margin?: boolean | undefined; + adjustSize?: boolean | undefined; + fontSize?: string | undefined; + textColor?: string | undefined; + link?: boolean | undefined; +}) => JSX.Element; +export default HoverInlineText; diff --git a/dist2/types/components/Identicon/StatusIcon.d.ts b/dist2/types/components/Identicon/StatusIcon.d.ts new file mode 100644 index 00000000000..f13388ca19a --- /dev/null +++ b/dist2/types/components/Identicon/StatusIcon.d.ts @@ -0,0 +1,6 @@ +/// +import { AbstractConnector } from '@web3-react/abstract-connector'; +import { Connector } from 'widgets-web3-react/types'; +export default function StatusIcon({ connector }: { + connector: AbstractConnector | Connector; +}): JSX.Element | null; diff --git a/dist2/types/components/Identicon/index.d.ts b/dist2/types/components/Identicon/index.d.ts new file mode 100644 index 00000000000..b3fecc924f0 --- /dev/null +++ b/dist2/types/components/Identicon/index.d.ts @@ -0,0 +1,2 @@ +/// +export default function Identicon(): JSX.Element; diff --git a/dist2/types/components/InputStepCounter/InputStepCounter.d.ts b/dist2/types/components/InputStepCounter/InputStepCounter.d.ts new file mode 100644 index 00000000000..5f488a42662 --- /dev/null +++ b/dist2/types/components/InputStepCounter/InputStepCounter.d.ts @@ -0,0 +1,19 @@ +import { FeeAmount } from '@uniswap/v3-sdk'; +import { ReactNode } from 'react'; +interface StepCounterProps { + value: string; + onUserInput: (value: string) => void; + decrement: () => string; + increment: () => string; + decrementDisabled?: boolean; + incrementDisabled?: boolean; + feeAmount?: FeeAmount; + label?: string; + width?: string; + locked?: boolean; + title: ReactNode; + tokenA: string | undefined; + tokenB: string | undefined; +} +declare const StepCounter: ({ value, decrement, increment, decrementDisabled, incrementDisabled, width, locked, onUserInput, title, tokenA, tokenB, }: StepCounterProps) => JSX.Element; +export default StepCounter; diff --git a/dist2/types/components/LiquidityChartRangeInput/Area.d.ts b/dist2/types/components/LiquidityChartRangeInput/Area.d.ts new file mode 100644 index 00000000000..476c349ccf6 --- /dev/null +++ b/dist2/types/components/LiquidityChartRangeInput/Area.d.ts @@ -0,0 +1,11 @@ +/// +import { ScaleLinear } from 'd3'; +import { ChartEntry } from './types'; +export declare const Area: ({ series, xScale, yScale, xValue, yValue, fill, }: { + series: ChartEntry[]; + xScale: ScaleLinear; + yScale: ScaleLinear; + xValue: (d: ChartEntry) => number; + yValue: (d: ChartEntry) => number; + fill?: string | undefined; +}) => JSX.Element; diff --git a/dist2/types/components/LiquidityChartRangeInput/AxisBottom.d.ts b/dist2/types/components/LiquidityChartRangeInput/AxisBottom.d.ts new file mode 100644 index 00000000000..c3a866ac580 --- /dev/null +++ b/dist2/types/components/LiquidityChartRangeInput/AxisBottom.d.ts @@ -0,0 +1,7 @@ +/// +import { ScaleLinear } from 'd3'; +export declare const AxisBottom: ({ xScale, innerHeight, offset, }: { + xScale: ScaleLinear; + innerHeight: number; + offset?: number | undefined; +}) => JSX.Element; diff --git a/dist2/types/components/LiquidityChartRangeInput/Brush.d.ts b/dist2/types/components/LiquidityChartRangeInput/Brush.d.ts new file mode 100644 index 00000000000..d36dd5da09e --- /dev/null +++ b/dist2/types/components/LiquidityChartRangeInput/Brush.d.ts @@ -0,0 +1,14 @@ +/// +import { ScaleLinear } from 'd3'; +export declare const Brush: ({ id, xScale, interactive, brushLabelValue, brushExtent, setBrushExtent, innerWidth, innerHeight, westHandleColor, eastHandleColor, }: { + id: string; + xScale: ScaleLinear; + interactive: boolean; + brushLabelValue: (d: 'w' | 'e', x: number) => string; + brushExtent: [number, number]; + setBrushExtent: (extent: [number, number], mode: string | undefined) => void; + innerWidth: number; + innerHeight: number; + westHandleColor: string; + eastHandleColor: string; +}) => JSX.Element; diff --git a/dist2/types/components/LiquidityChartRangeInput/Chart.d.ts b/dist2/types/components/LiquidityChartRangeInput/Chart.d.ts new file mode 100644 index 00000000000..7cbe2840652 --- /dev/null +++ b/dist2/types/components/LiquidityChartRangeInput/Chart.d.ts @@ -0,0 +1,5 @@ +/// +import { ChartEntry, LiquidityChartRangeInputProps } from './types'; +export declare const xAccessor: (d: ChartEntry) => number; +export declare const yAccessor: (d: ChartEntry) => number; +export declare function Chart({ id, data: { series, current }, ticksAtLimit, styles, dimensions: { width, height }, margins, interactive, brushDomain, brushLabels, onBrushDomainChange, zoomLevels, }: LiquidityChartRangeInputProps): JSX.Element; diff --git a/dist2/types/components/LiquidityChartRangeInput/Line.d.ts b/dist2/types/components/LiquidityChartRangeInput/Line.d.ts new file mode 100644 index 00000000000..a5db2172ab0 --- /dev/null +++ b/dist2/types/components/LiquidityChartRangeInput/Line.d.ts @@ -0,0 +1,7 @@ +/// +import { ScaleLinear } from 'd3'; +export declare const Line: ({ value, xScale, innerHeight, }: { + value: number; + xScale: ScaleLinear; + innerHeight: number; +}) => JSX.Element; diff --git a/dist2/types/components/LiquidityChartRangeInput/Zoom.d.ts b/dist2/types/components/LiquidityChartRangeInput/Zoom.d.ts new file mode 100644 index 00000000000..0c9567bd5e6 --- /dev/null +++ b/dist2/types/components/LiquidityChartRangeInput/Zoom.d.ts @@ -0,0 +1,14 @@ +/// +import { ScaleLinear, ZoomTransform } from 'd3'; +import { ZoomLevels } from './types'; +export declare const ZoomOverlay: import("styled-components").StyledComponent<"rect", import("styled-components").DefaultTheme, {}, never>; +export default function Zoom({ svg, xScale, setZoom, width, height, resetBrush, showResetButton, zoomLevels, }: { + svg: SVGElement | null; + xScale: ScaleLinear; + setZoom: (transform: ZoomTransform) => void; + width: number; + height: number; + resetBrush: () => void; + showResetButton: boolean; + zoomLevels: ZoomLevels; +}): JSX.Element; diff --git a/dist2/types/components/LiquidityChartRangeInput/hooks.d.ts b/dist2/types/components/LiquidityChartRangeInput/hooks.d.ts new file mode 100644 index 00000000000..5c0490a1426 --- /dev/null +++ b/dist2/types/components/LiquidityChartRangeInput/hooks.d.ts @@ -0,0 +1,14 @@ +import { Currency } from '@uniswap/sdk-core'; +import { FeeAmount } from '@uniswap/v3-sdk'; +import { ChartEntry } from './types'; +export declare function useDensityChartData({ currencyA, currencyB, feeAmount, }: { + currencyA: Currency | undefined; + currencyB: Currency | undefined; + feeAmount: FeeAmount | undefined; +}): { + isLoading: boolean; + isUninitialized: boolean; + isError: boolean; + error: any; + formattedData: ChartEntry[] | undefined; +}; diff --git a/dist2/types/components/LiquidityChartRangeInput/index.d.ts b/dist2/types/components/LiquidityChartRangeInput/index.d.ts new file mode 100644 index 00000000000..fb1c3dbaede --- /dev/null +++ b/dist2/types/components/LiquidityChartRangeInput/index.d.ts @@ -0,0 +1,18 @@ +/// +import { Currency, Price, Token } from '@uniswap/sdk-core'; +import { FeeAmount } from '@uniswap/v3-sdk'; +import { Bound } from 'state/mint/v3/actions'; +export default function LiquidityChartRangeInput({ currencyA, currencyB, feeAmount, ticksAtLimit, price, priceLower, priceUpper, onLeftRangeInput, onRightRangeInput, interactive, }: { + currencyA: Currency | undefined; + currencyB: Currency | undefined; + feeAmount?: FeeAmount; + ticksAtLimit: { + [bound in Bound]?: boolean | undefined; + }; + price: number | undefined; + priceLower?: Price; + priceUpper?: Price; + onLeftRangeInput: (typedValue: string) => void; + onRightRangeInput: (typedValue: string) => void; + interactive: boolean; +}): JSX.Element; diff --git a/dist2/types/components/LiquidityChartRangeInput/svg.d.ts b/dist2/types/components/LiquidityChartRangeInput/svg.d.ts new file mode 100644 index 00000000000..6706394299b --- /dev/null +++ b/dist2/types/components/LiquidityChartRangeInput/svg.d.ts @@ -0,0 +1,8 @@ +/// +export declare const brushHandlePath: (height: number) => string; +export declare const brushHandleAccentPath: () => string; +export declare const OffScreenHandle: ({ color, size, margin, }: { + color: string; + size?: number | undefined; + margin?: number | undefined; +}) => JSX.Element; diff --git a/dist2/types/components/LiquidityChartRangeInput/types.d.ts b/dist2/types/components/LiquidityChartRangeInput/types.d.ts new file mode 100644 index 00000000000..fed3dab3c68 --- /dev/null +++ b/dist2/types/components/LiquidityChartRangeInput/types.d.ts @@ -0,0 +1,49 @@ +import { Bound } from 'state/mint/v3/actions'; +export interface ChartEntry { + activeLiquidity: number; + price0: number; +} +export interface Dimensions { + width: number; + height: number; +} +export interface Margins { + top: number; + right: number; + bottom: number; + left: number; +} +export interface ZoomLevels { + initialMin: number; + initialMax: number; + min: number; + max: number; +} +export interface LiquidityChartRangeInputProps { + id?: string; + data: { + series: ChartEntry[]; + current: number; + }; + ticksAtLimit: { + [bound in Bound]?: boolean | undefined; + }; + styles: { + area: { + selection: string; + }; + brush: { + handle: { + west: string; + east: string; + }; + }; + }; + dimensions: Dimensions; + margins: Margins; + interactive?: boolean; + brushLabels: (d: 'w' | 'e', x: number) => string; + brushDomain: [number, number] | undefined; + onBrushDomainChange: (domain: [number, number], mode: string | undefined) => void; + zoomLevels: ZoomLevels; +} diff --git a/dist2/types/components/ListLogo/index.d.ts b/dist2/types/components/ListLogo/index.d.ts new file mode 100644 index 00000000000..1f1f079201d --- /dev/null +++ b/dist2/types/components/ListLogo/index.d.ts @@ -0,0 +1,7 @@ +import React from 'react'; +export default function ListLogo({ logoURI, style, size, alt, }: { + logoURI: string; + size?: string; + style?: React.CSSProperties; + alt?: string; +}): JSX.Element; diff --git a/dist2/types/components/Loader/index.d.ts b/dist2/types/components/Loader/index.d.ts new file mode 100644 index 00000000000..0f28f56bdde --- /dev/null +++ b/dist2/types/components/Loader/index.d.ts @@ -0,0 +1,10 @@ +/// +/** + * Takes in custom size and stroke for circle color, default to primary color as fill, + * need ...rest for layered styles on top + */ +export default function Loader({ size, stroke, ...rest }: { + size?: string; + stroke?: string; + [k: string]: any; +}): JSX.Element; diff --git a/dist2/types/components/Loader/styled.d.ts b/dist2/types/components/Loader/styled.d.ts new file mode 100644 index 00000000000..e76fc5db6f4 --- /dev/null +++ b/dist2/types/components/Loader/styled.d.ts @@ -0,0 +1,8 @@ +export declare const loadingAnimation: import("styled-components").Keyframes; +export declare const LoadingRows: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; +export declare const loadingOpacityMixin: import("styled-components").FlattenInterpolation>; +export declare const LoadingOpacityContainer: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, { + $loading: boolean; +}, never>; diff --git a/dist2/types/components/Logo/index.d.ts b/dist2/types/components/Logo/index.d.ts new file mode 100644 index 00000000000..8fafa262199 --- /dev/null +++ b/dist2/types/components/Logo/index.d.ts @@ -0,0 +1,10 @@ +/// +import { ImageProps } from 'rebass'; +interface LogoProps extends Pick { + srcs: string[]; +} +/** + * Renders an image by sequentially trying a list of URIs, and then eventually a fallback triangle alert + */ +export default function Logo({ srcs, alt, style, ...rest }: LogoProps): JSX.Element; +export {}; diff --git a/dist2/types/components/Menu/index.d.ts b/dist2/types/components/Menu/index.d.ts new file mode 100644 index 00000000000..2b7aced3e88 --- /dev/null +++ b/dist2/types/components/Menu/index.d.ts @@ -0,0 +1,17 @@ +import React from 'react'; +export declare enum FlyoutAlignment { + LEFT = "LEFT", + RIGHT = "RIGHT" +} +export default function Menu(): JSX.Element; +interface NewMenuProps { + flyoutAlignment?: FlyoutAlignment; + ToggleUI?: React.FunctionComponent; + menuItems: { + content: any; + link: string; + external: boolean; + }[]; +} +export declare const NewMenu: ({ flyoutAlignment, ToggleUI, menuItems, ...rest }: NewMenuProps) => JSX.Element; +export {}; diff --git a/dist2/types/components/Modal/index.d.ts b/dist2/types/components/Modal/index.d.ts new file mode 100644 index 00000000000..b0b888e30ab --- /dev/null +++ b/dist2/types/components/Modal/index.d.ts @@ -0,0 +1,11 @@ +import React from 'react'; +interface ModalProps { + isOpen: boolean; + onDismiss: () => void; + minHeight?: number | false; + maxHeight?: number; + initialFocusRef?: React.RefObject; + children?: React.ReactNode; +} +export default function Modal({ isOpen, onDismiss, minHeight, maxHeight, initialFocusRef, children, }: ModalProps): JSX.Element; +export {}; diff --git a/dist2/types/components/ModalViews/index.d.ts b/dist2/types/components/ModalViews/index.d.ts new file mode 100644 index 00000000000..44fe5a8718b --- /dev/null +++ b/dist2/types/components/ModalViews/index.d.ts @@ -0,0 +1,10 @@ +/// +export declare function LoadingView({ children, onDismiss }: { + children: any; + onDismiss: () => void; +}): JSX.Element; +export declare function SubmittedView({ children, onDismiss, hash, }: { + children: any; + onDismiss: () => void; + hash: string | undefined; +}): JSX.Element; diff --git a/dist2/types/components/NavigationTabs/index.d.ts b/dist2/types/components/NavigationTabs/index.d.ts new file mode 100644 index 00000000000..be4f8fac18d --- /dev/null +++ b/dist2/types/components/NavigationTabs/index.d.ts @@ -0,0 +1,17 @@ +import { Percent } from '@uniswap/sdk-core'; +import { ReactNode } from 'react'; +export declare function SwapPoolTabs({ active }: { + active: 'swap' | 'pool'; +}): JSX.Element; +export declare function FindPoolTabs({ origin }: { + origin: string; +}): JSX.Element; +export declare function AddRemoveTabs({ adding, creating, defaultSlippage, positionID, children, }: { + adding: boolean; + creating: boolean; + defaultSlippage: Percent; + positionID?: string | undefined; + showBackLink?: boolean; + children?: ReactNode | undefined; +}): JSX.Element; +export declare function CreateProposalTabs(): JSX.Element; diff --git a/dist2/types/components/NetworkAlert/NetworkAlert.d.ts b/dist2/types/components/NetworkAlert/NetworkAlert.d.ts new file mode 100644 index 00000000000..cafc4df98c0 --- /dev/null +++ b/dist2/types/components/NetworkAlert/NetworkAlert.d.ts @@ -0,0 +1,3 @@ +/// +export declare const Controls: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; +export declare function NetworkAlert(): JSX.Element | null; diff --git a/dist2/types/components/NumericalInput/index.d.ts b/dist2/types/components/NumericalInput/index.d.ts new file mode 100644 index 00000000000..5a70ee343d5 --- /dev/null +++ b/dist2/types/components/NumericalInput/index.d.ts @@ -0,0 +1,10 @@ +import React from 'react'; +export declare const Input: React.NamedExoticComponent<{ + value: string | number; + onUserInput: (input: string) => void; + error?: boolean | undefined; + fontSize?: string | undefined; + align?: "left" | "right" | undefined; + prependSymbol?: string | undefined; +} & Omit, "ref" | "onChange" | "as">>; +export default Input; diff --git a/dist2/types/components/Popover/index.d.ts b/dist2/types/components/Popover/index.d.ts new file mode 100644 index 00000000000..11d864ac4ce --- /dev/null +++ b/dist2/types/components/Popover/index.d.ts @@ -0,0 +1,9 @@ +import { Placement } from '@popperjs/core'; +import React from 'react'; +export interface PopoverProps { + content: React.ReactNode; + show: boolean; + children: React.ReactNode; + placement?: Placement; +} +export default function Popover({ content, show, children, placement }: PopoverProps): JSX.Element; diff --git a/dist2/types/components/Popups/ClaimPopup.d.ts b/dist2/types/components/Popups/ClaimPopup.d.ts new file mode 100644 index 00000000000..182c525361b --- /dev/null +++ b/dist2/types/components/Popups/ClaimPopup.d.ts @@ -0,0 +1,2 @@ +/// +export default function ClaimPopup(): JSX.Element; diff --git a/dist2/types/components/Popups/FailedNetworkSwitchPopup.d.ts b/dist2/types/components/Popups/FailedNetworkSwitchPopup.d.ts new file mode 100644 index 00000000000..7f1d8a0bde1 --- /dev/null +++ b/dist2/types/components/Popups/FailedNetworkSwitchPopup.d.ts @@ -0,0 +1,5 @@ +/// +import { SupportedChainId } from 'constants/chains'; +export default function FailedNetworkSwitchPopup({ chainId }: { + chainId: SupportedChainId; +}): JSX.Element; diff --git a/dist2/types/components/Popups/PopupItem.d.ts b/dist2/types/components/Popups/PopupItem.d.ts new file mode 100644 index 00000000000..6089457b48e --- /dev/null +++ b/dist2/types/components/Popups/PopupItem.d.ts @@ -0,0 +1,7 @@ +/// +import { PopupContent } from '../../state/application/reducer'; +export default function PopupItem({ removeAfterMs, content, popKey, }: { + removeAfterMs: number | null; + content: PopupContent; + popKey: string; +}): JSX.Element; diff --git a/dist2/types/components/Popups/SurveyPopup.d.ts b/dist2/types/components/Popups/SurveyPopup.d.ts new file mode 100644 index 00000000000..16ab612ae79 --- /dev/null +++ b/dist2/types/components/Popups/SurveyPopup.d.ts @@ -0,0 +1,2 @@ +/// +export default function SurveyPopup(): JSX.Element; diff --git a/dist2/types/components/Popups/TransactionPopup.d.ts b/dist2/types/components/Popups/TransactionPopup.d.ts new file mode 100644 index 00000000000..21832e5535c --- /dev/null +++ b/dist2/types/components/Popups/TransactionPopup.d.ts @@ -0,0 +1,4 @@ +/// +export default function TransactionPopup({ hash }: { + hash: string; +}): JSX.Element | null; diff --git a/dist2/types/components/Popups/index.d.ts b/dist2/types/components/Popups/index.d.ts new file mode 100644 index 00000000000..07f76c89a2c --- /dev/null +++ b/dist2/types/components/Popups/index.d.ts @@ -0,0 +1,2 @@ +/// +export default function Popups(): JSX.Element; diff --git a/dist2/types/components/PositionCard/Sushi.d.ts b/dist2/types/components/PositionCard/Sushi.d.ts new file mode 100644 index 00000000000..2fe46d44704 --- /dev/null +++ b/dist2/types/components/PositionCard/Sushi.d.ts @@ -0,0 +1,10 @@ +/// +import { Token } from '@uniswap/sdk-core'; +interface PositionCardProps { + tokenA: Token; + tokenB: Token; + liquidityToken: Token; + border?: string; +} +export default function SushiPositionCard({ tokenA, tokenB, liquidityToken, border }: PositionCardProps): JSX.Element; +export {}; diff --git a/dist2/types/components/PositionCard/V2.d.ts b/dist2/types/components/PositionCard/V2.d.ts new file mode 100644 index 00000000000..50337973ed4 --- /dev/null +++ b/dist2/types/components/PositionCard/V2.d.ts @@ -0,0 +1,11 @@ +/// +import { CurrencyAmount, Token } from '@uniswap/sdk-core'; +import { Pair } from '@uniswap/v2-sdk'; +interface PositionCardProps { + pair: Pair; + showUnwrapped?: boolean; + border?: string; + stakedBalance?: CurrencyAmount; +} +export default function V2PositionCard({ pair, border, stakedBalance }: PositionCardProps): JSX.Element; +export {}; diff --git a/dist2/types/components/PositionCard/index.d.ts b/dist2/types/components/PositionCard/index.d.ts new file mode 100644 index 00000000000..a30afd8fe88 --- /dev/null +++ b/dist2/types/components/PositionCard/index.d.ts @@ -0,0 +1,20 @@ +/// +import { CurrencyAmount, Token } from '@uniswap/sdk-core'; +import { Pair } from '@uniswap/v2-sdk'; +export declare const FixedHeightRow: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { + width?: string | undefined; + align?: string | undefined; + justify?: string | undefined; + padding?: string | undefined; + border?: string | undefined; + borderRadius?: string | undefined; +}, never>; +interface PositionCardProps { + pair: Pair; + showUnwrapped?: boolean; + border?: string; + stakedBalance?: CurrencyAmount; +} +export declare function MinimalPositionCard({ pair, showUnwrapped, border }: PositionCardProps): JSX.Element; +export default function FullPositionCard({ pair, border, stakedBalance }: PositionCardProps): JSX.Element; +export {}; diff --git a/dist2/types/components/PositionList/index.d.ts b/dist2/types/components/PositionList/index.d.ts new file mode 100644 index 00000000000..b87bea2dbc0 --- /dev/null +++ b/dist2/types/components/PositionList/index.d.ts @@ -0,0 +1,9 @@ +import React from 'react'; +import { PositionDetails } from 'types/position'; +declare type PositionListProps = React.PropsWithChildren<{ + positions: PositionDetails[]; + setUserHideClosedPositions: any; + userHideClosedPositions: boolean; +}>; +export default function PositionList({ positions, setUserHideClosedPositions, userHideClosedPositions, }: PositionListProps): JSX.Element; +export {}; diff --git a/dist2/types/components/PositionListItem/index.d.ts b/dist2/types/components/PositionListItem/index.d.ts new file mode 100644 index 00000000000..c1eeca56fac --- /dev/null +++ b/dist2/types/components/PositionListItem/index.d.ts @@ -0,0 +1,15 @@ +/// +import { Price, Token } from '@uniswap/sdk-core'; +import { Position } from '@uniswap/v3-sdk'; +import { PositionDetails } from 'types/position'; +interface PositionListItemProps { + positionDetails: PositionDetails; +} +export declare function getPriceOrderingFromPositionForUI(position?: Position): { + priceLower?: Price; + priceUpper?: Price; + quote?: Token; + base?: Token; +}; +export default function PositionListItem({ positionDetails }: PositionListItemProps): JSX.Element; +export {}; diff --git a/dist2/types/components/PositionPreview/index.d.ts b/dist2/types/components/PositionPreview/index.d.ts new file mode 100644 index 00000000000..dd0bcecea28 --- /dev/null +++ b/dist2/types/components/PositionPreview/index.d.ts @@ -0,0 +1,12 @@ +import { Currency } from '@uniswap/sdk-core'; +import { Position } from '@uniswap/v3-sdk'; +import { ReactNode } from 'react'; +export declare const PositionPreview: ({ position, title, inRange, baseCurrencyDefault, ticksAtLimit, }: { + position: Position; + title?: ReactNode; + inRange: boolean; + baseCurrencyDefault?: Currency | undefined; + ticksAtLimit: { + [bound: string]: boolean | undefined; + }; +}) => JSX.Element; diff --git a/dist2/types/components/PrivacyPolicy/index.d.ts b/dist2/types/components/PrivacyPolicy/index.d.ts new file mode 100644 index 00000000000..8764a519bf3 --- /dev/null +++ b/dist2/types/components/PrivacyPolicy/index.d.ts @@ -0,0 +1,3 @@ +/// +export declare function PrivacyPolicyModal(): JSX.Element; +export declare function PrivacyPolicy(): JSX.Element; diff --git a/dist2/types/components/ProgressSteps/index.d.ts b/dist2/types/components/ProgressSteps/index.d.ts new file mode 100644 index 00000000000..d424c7286c7 --- /dev/null +++ b/dist2/types/components/ProgressSteps/index.d.ts @@ -0,0 +1,17 @@ +/// +interface ProgressCirclesProps { + steps: boolean[]; + disabled?: boolean; +} +/** + * Based on array of steps, create a step counter of circles. + * A circle can be enabled, disabled, or confirmed. States are derived + * from previous step. + * + * An extra circle is added to represent the ability to swap, add, or remove. + * This step will never be marked as complete (because no 'txn done' state in body ui). + * + * @param steps array of booleans where true means step is complete + */ +export default function ProgressCircles({ steps, disabled, ...rest }: ProgressCirclesProps): JSX.Element; +export {}; diff --git a/dist2/types/components/QuestionHelper/index.d.ts b/dist2/types/components/QuestionHelper/index.d.ts new file mode 100644 index 00000000000..0f44eb7a0ca --- /dev/null +++ b/dist2/types/components/QuestionHelper/index.d.ts @@ -0,0 +1,5 @@ +import { ReactNode } from 'react'; +export default function QuestionHelper({ text }: { + text: ReactNode; + size?: number; +}): JSX.Element; diff --git a/dist2/types/components/RangeSelector/PresetsButtons.d.ts b/dist2/types/components/RangeSelector/PresetsButtons.d.ts new file mode 100644 index 00000000000..9521ad15e5c --- /dev/null +++ b/dist2/types/components/RangeSelector/PresetsButtons.d.ts @@ -0,0 +1,4 @@ +/// +export default function PresetsButtons({ setFullRange }: { + setFullRange: () => void; +}): JSX.Element; diff --git a/dist2/types/components/RangeSelector/index.d.ts b/dist2/types/components/RangeSelector/index.d.ts new file mode 100644 index 00000000000..5c70a464d49 --- /dev/null +++ b/dist2/types/components/RangeSelector/index.d.ts @@ -0,0 +1,19 @@ +/// +import { Currency, Price, Token } from '@uniswap/sdk-core'; +import { Bound } from 'state/mint/v3/actions'; +export default function RangeSelector({ priceLower, priceUpper, onLeftRangeInput, onRightRangeInput, getDecrementLower, getIncrementLower, getDecrementUpper, getIncrementUpper, currencyA, currencyB, feeAmount, ticksAtLimit, }: { + priceLower?: Price; + priceUpper?: Price; + getDecrementLower: () => string; + getIncrementLower: () => string; + getDecrementUpper: () => string; + getIncrementUpper: () => string; + onLeftRangeInput: (typedValue: string) => void; + onRightRangeInput: (typedValue: string) => void; + currencyA?: Currency | null; + currencyB?: Currency | null; + feeAmount?: number; + ticksAtLimit: { + [bound in Bound]?: boolean | undefined; + }; +}): JSX.Element; diff --git a/dist2/types/components/RateToggle/index.d.ts b/dist2/types/components/RateToggle/index.d.ts new file mode 100644 index 00000000000..3ae49b3737b --- /dev/null +++ b/dist2/types/components/RateToggle/index.d.ts @@ -0,0 +1,7 @@ +/// +import { Currency } from '@uniswap/sdk-core'; +export default function RateToggle({ currencyA, currencyB, handleRateToggle, }: { + currencyA: Currency; + currencyB: Currency; + handleRateToggle: () => void; +}): JSX.Element | null; diff --git a/dist2/types/components/RoutingDiagram/RoutingDiagram.d.ts b/dist2/types/components/RoutingDiagram/RoutingDiagram.d.ts new file mode 100644 index 00000000000..c396fa9d08a --- /dev/null +++ b/dist2/types/components/RoutingDiagram/RoutingDiagram.d.ts @@ -0,0 +1,14 @@ +/// +import { Protocol } from '@uniswap/router-sdk'; +import { Currency, Percent } from '@uniswap/sdk-core'; +import { FeeAmount } from '@uniswap/v3-sdk'; +export interface RoutingDiagramEntry { + percent: Percent; + path: [Currency, Currency, FeeAmount][]; + protocol: Protocol; +} +export default function RoutingDiagram({ currencyIn, currencyOut, routes, }: { + currencyIn: Currency; + currencyOut: Currency; + routes: RoutingDiagramEntry[]; +}): JSX.Element; diff --git a/dist2/types/components/Row/index.d.ts b/dist2/types/components/Row/index.d.ts new file mode 100644 index 00000000000..f40be67e24d --- /dev/null +++ b/dist2/types/components/Row/index.d.ts @@ -0,0 +1,41 @@ +/// +declare const Row: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { + width?: string | undefined; + align?: string | undefined; + justify?: string | undefined; + padding?: string | undefined; + border?: string | undefined; + borderRadius?: string | undefined; +}, never>; +export declare const RowBetween: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { + width?: string | undefined; + align?: string | undefined; + justify?: string | undefined; + padding?: string | undefined; + border?: string | undefined; + borderRadius?: string | undefined; +}, never>; +export declare const RowFlat: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; +export declare const AutoRow: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { + width?: string | undefined; + align?: string | undefined; + justify?: string | undefined; + padding?: string | undefined; + border?: string | undefined; + borderRadius?: string | undefined; +} & { + gap?: string | undefined; + justify?: string | undefined; +}, never>; +export declare const RowFixed: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { + width?: string | undefined; + align?: string | undefined; + justify?: string | undefined; + padding?: string | undefined; + border?: string | undefined; + borderRadius?: string | undefined; +} & { + gap?: string | undefined; + justify?: string | undefined; +}, never>; +export default Row; diff --git a/dist2/types/components/SearchModal/BlockedToken.d.ts b/dist2/types/components/SearchModal/BlockedToken.d.ts new file mode 100644 index 00000000000..b298f4745f5 --- /dev/null +++ b/dist2/types/components/SearchModal/BlockedToken.d.ts @@ -0,0 +1,9 @@ +/// +import { Token } from '@uniswap/sdk-core'; +interface BlockedTokenProps { + onBack: (() => void) | undefined; + onDismiss: (() => void) | undefined; + blockedTokens: Token[]; +} +declare const BlockedToken: ({ onBack, onDismiss, blockedTokens }: BlockedTokenProps) => JSX.Element; +export default BlockedToken; diff --git a/dist2/types/components/SearchModal/CommonBases.d.ts b/dist2/types/components/SearchModal/CommonBases.d.ts new file mode 100644 index 00000000000..4e3d9137987 --- /dev/null +++ b/dist2/types/components/SearchModal/CommonBases.d.ts @@ -0,0 +1,7 @@ +/// +import { Currency } from '@uniswap/sdk-core'; +export default function CommonBases({ chainId, onSelect, selectedCurrency, }: { + chainId?: number; + selectedCurrency?: Currency | null; + onSelect: (currency: Currency) => void; +}): JSX.Element | null; diff --git a/dist2/types/components/SearchModal/CurrencyList.d.ts b/dist2/types/components/SearchModal/CurrencyList.d.ts new file mode 100644 index 00000000000..2cbbb3f4d43 --- /dev/null +++ b/dist2/types/components/SearchModal/CurrencyList.d.ts @@ -0,0 +1,16 @@ +import { Currency, Token } from '@uniswap/sdk-core'; +import { MutableRefObject } from 'react'; +import { FixedSizeList } from 'react-window'; +import { WrappedTokenInfo } from '../../state/lists/wrappedTokenInfo'; +export default function CurrencyList({ height, currencies, otherListTokens, selectedCurrency, onCurrencySelect, otherCurrency, fixedListRef, showImportView, setImportToken, showCurrencyAmount, }: { + height: number; + currencies: Currency[]; + otherListTokens?: WrappedTokenInfo[]; + selectedCurrency?: Currency | null; + onCurrencySelect: (currency: Currency) => void; + otherCurrency?: Currency | null; + fixedListRef?: MutableRefObject; + showImportView: () => void; + setImportToken: (token: Token) => void; + showCurrencyAmount?: boolean; +}): JSX.Element; diff --git a/dist2/types/components/SearchModal/CurrencySearch.d.ts b/dist2/types/components/SearchModal/CurrencySearch.d.ts new file mode 100644 index 00000000000..a575bb30251 --- /dev/null +++ b/dist2/types/components/SearchModal/CurrencySearch.d.ts @@ -0,0 +1,17 @@ +/// +import { Currency, Token } from '@uniswap/sdk-core'; +interface CurrencySearchProps { + isOpen: boolean; + onDismiss: () => void; + selectedCurrency?: Currency | null; + onCurrencySelect: (currency: Currency) => void; + otherSelectedCurrency?: Currency | null; + showCommonBases?: boolean; + showCurrencyAmount?: boolean; + disableNonToken?: boolean; + showManageView: () => void; + showImportView: () => void; + setImportToken: (token: Token) => void; +} +export declare function CurrencySearch({ selectedCurrency, onCurrencySelect, otherSelectedCurrency, showCommonBases, showCurrencyAmount, disableNonToken, onDismiss, isOpen, showManageView, showImportView, setImportToken, }: CurrencySearchProps): JSX.Element; +export {}; diff --git a/dist2/types/components/SearchModal/CurrencySearchModal.d.ts b/dist2/types/components/SearchModal/CurrencySearchModal.d.ts new file mode 100644 index 00000000000..34702203bbc --- /dev/null +++ b/dist2/types/components/SearchModal/CurrencySearchModal.d.ts @@ -0,0 +1,20 @@ +/// +import { Currency } from '@uniswap/sdk-core'; +interface CurrencySearchModalProps { + isOpen: boolean; + onDismiss: () => void; + selectedCurrency?: Currency | null; + onCurrencySelect: (currency: Currency) => void; + otherSelectedCurrency?: Currency | null; + showCommonBases?: boolean; + showCurrencyAmount?: boolean; + disableNonToken?: boolean; +} +export declare enum CurrencyModalView { + search = 0, + manage = 1, + importToken = 2, + importList = 3 +} +export default function CurrencySearchModal({ isOpen, onDismiss, onCurrencySelect, selectedCurrency, otherSelectedCurrency, showCommonBases, showCurrencyAmount, disableNonToken, }: CurrencySearchModalProps): JSX.Element; +export {}; diff --git a/dist2/types/components/SearchModal/ImportList.d.ts b/dist2/types/components/SearchModal/ImportList.d.ts new file mode 100644 index 00000000000..cdcc31dc088 --- /dev/null +++ b/dist2/types/components/SearchModal/ImportList.d.ts @@ -0,0 +1,11 @@ +/// +import { TokenList } from '@uniswap/token-lists'; +import { CurrencyModalView } from './CurrencySearchModal'; +interface ImportProps { + listURL: string; + list: TokenList; + onDismiss: () => void; + setModalView: (view: CurrencyModalView) => void; +} +export declare function ImportList({ listURL, list, setModalView, onDismiss }: ImportProps): JSX.Element; +export {}; diff --git a/dist2/types/components/SearchModal/ImportRow.d.ts b/dist2/types/components/SearchModal/ImportRow.d.ts new file mode 100644 index 00000000000..04e84e7ff55 --- /dev/null +++ b/dist2/types/components/SearchModal/ImportRow.d.ts @@ -0,0 +1,9 @@ +import { Token } from '@uniswap/sdk-core'; +import { CSSProperties } from 'react'; +export default function ImportRow({ token, style, dim, showImportView, setImportToken, }: { + token: Token; + style?: CSSProperties; + dim?: boolean; + showImportView: () => void; + setImportToken: (token: Token) => void; +}): JSX.Element; diff --git a/dist2/types/components/SearchModal/ImportToken.d.ts b/dist2/types/components/SearchModal/ImportToken.d.ts new file mode 100644 index 00000000000..1b4cac68da6 --- /dev/null +++ b/dist2/types/components/SearchModal/ImportToken.d.ts @@ -0,0 +1,12 @@ +/// +import { Currency, Token } from '@uniswap/sdk-core'; +import { TokenList } from '@uniswap/token-lists'; +interface ImportProps { + tokens: Token[]; + list?: TokenList; + onBack?: () => void; + onDismiss?: () => void; + handleCurrencySelect?: (currency: Currency) => void; +} +export declare function ImportToken(props: ImportProps): JSX.Element; +export {}; diff --git a/dist2/types/components/SearchModal/Manage.d.ts b/dist2/types/components/SearchModal/Manage.d.ts new file mode 100644 index 00000000000..1f60f2d915e --- /dev/null +++ b/dist2/types/components/SearchModal/Manage.d.ts @@ -0,0 +1,11 @@ +/// +import { Token } from '@uniswap/sdk-core'; +import { TokenList } from '@uniswap/token-lists'; +import { CurrencyModalView } from './CurrencySearchModal'; +export default function Manage({ onDismiss, setModalView, setImportList, setImportToken, setListUrl, }: { + onDismiss: () => void; + setModalView: (view: CurrencyModalView) => void; + setImportToken: (token: Token) => void; + setImportList: (list: TokenList) => void; + setListUrl: (url: string) => void; +}): JSX.Element; diff --git a/dist2/types/components/SearchModal/ManageLists.d.ts b/dist2/types/components/SearchModal/ManageLists.d.ts new file mode 100644 index 00000000000..68632b1672e --- /dev/null +++ b/dist2/types/components/SearchModal/ManageLists.d.ts @@ -0,0 +1,8 @@ +/// +import { TokenList } from '@uniswap/token-lists'; +import { CurrencyModalView } from './CurrencySearchModal'; +export declare function ManageLists({ setModalView, setImportList, setListUrl, }: { + setModalView: (view: CurrencyModalView) => void; + setImportList: (list: TokenList) => void; + setListUrl: (url: string) => void; +}): JSX.Element; diff --git a/dist2/types/components/SearchModal/ManageTokens.d.ts b/dist2/types/components/SearchModal/ManageTokens.d.ts new file mode 100644 index 00000000000..88a5f0097fa --- /dev/null +++ b/dist2/types/components/SearchModal/ManageTokens.d.ts @@ -0,0 +1,7 @@ +/// +import { Token } from '@uniswap/sdk-core'; +import { CurrencyModalView } from './CurrencySearchModal'; +export default function ManageTokens({ setModalView, setImportToken, }: { + setModalView: (view: CurrencyModalView) => void; + setImportToken: (token: Token) => void; +}): JSX.Element; diff --git a/dist2/types/components/SearchModal/TokenImportCard.d.ts b/dist2/types/components/SearchModal/TokenImportCard.d.ts new file mode 100644 index 00000000000..44e1e1b8f29 --- /dev/null +++ b/dist2/types/components/SearchModal/TokenImportCard.d.ts @@ -0,0 +1,9 @@ +/// +import { Token } from '@uniswap/sdk-core'; +import { TokenList } from '@uniswap/token-lists'; +interface TokenImportCardProps { + list?: TokenList; + token: Token; +} +declare const TokenImportCard: ({ list, token }: TokenImportCardProps) => JSX.Element; +export default TokenImportCard; diff --git a/dist2/types/components/SearchModal/styleds.d.ts b/dist2/types/components/SearchModal/styleds.d.ts new file mode 100644 index 00000000000..48407adbf01 --- /dev/null +++ b/dist2/types/components/SearchModal/styleds.d.ts @@ -0,0 +1,18 @@ +/// +export declare const TextDot: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; +export declare const Checkbox: import("styled-components").StyledComponent<"input", import("styled-components").DefaultTheme, {}, never>; +export declare const PaddedColumn: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, { + gap?: string | undefined; + justify?: "end" | "space-between" | "stretch" | "center" | "flex-end" | "flex-start" | "start" | undefined; +}, never>; +export declare const MenuItem: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { + width?: string | undefined; + align?: string | undefined; + justify?: string | undefined; + padding?: string | undefined; + border?: string | undefined; + borderRadius?: string | undefined; +}, never>; +export declare const SearchInput: import("styled-components").StyledComponent<"input", import("styled-components").DefaultTheme, {}, never>; +export declare const Separator: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; +export declare const SeparatorDark: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; diff --git a/dist2/types/components/Settings/index.d.ts b/dist2/types/components/Settings/index.d.ts new file mode 100644 index 00000000000..ee16ae4aa2b --- /dev/null +++ b/dist2/types/components/Settings/index.d.ts @@ -0,0 +1,5 @@ +/// +import { Percent } from '@uniswap/sdk-core'; +export default function SettingsTab({ placeholderSlippage }: { + placeholderSlippage: Percent; +}): JSX.Element; diff --git a/dist2/types/components/Slider/index.d.ts b/dist2/types/components/Slider/index.d.ts new file mode 100644 index 00000000000..0ca82a6d3aa --- /dev/null +++ b/dist2/types/components/Slider/index.d.ts @@ -0,0 +1,11 @@ +/// +interface InputSliderProps { + value: number; + onChange: (value: number) => void; + step?: number; + min?: number; + max?: number; + size?: number; +} +export default function Slider({ value, onChange, min, step, max, size, ...rest }: InputSliderProps): JSX.Element; +export {}; diff --git a/dist2/types/components/SwitchLocaleLink/index.d.ts b/dist2/types/components/SwitchLocaleLink/index.d.ts new file mode 100644 index 00000000000..2aa88b94700 --- /dev/null +++ b/dist2/types/components/SwitchLocaleLink/index.d.ts @@ -0,0 +1,2 @@ +/// +export declare function SwitchLocaleLink(): JSX.Element | null; diff --git a/dist2/types/components/TextInput/index.d.ts b/dist2/types/components/TextInput/index.d.ts new file mode 100644 index 00000000000..74fec2513af --- /dev/null +++ b/dist2/types/components/TextInput/index.d.ts @@ -0,0 +1,15 @@ +import React from 'react'; +export declare const TextInput: ({ className, value, onUserInput, placeholder, fontSize, }: { + className?: string | undefined; + value: string; + onUserInput: (value: string) => void; + placeholder: string; + fontSize: string; +}) => JSX.Element; +export declare const ResizingTextArea: React.MemoExoticComponent<({ className, value, onUserInput, placeholder, fontSize, }: { + className?: string | undefined; + value: string; + onUserInput: (value: string) => void; + placeholder: string; + fontSize: string; +}) => JSX.Element>; diff --git a/dist2/types/components/Toggle/ListToggle.d.ts b/dist2/types/components/Toggle/ListToggle.d.ts new file mode 100644 index 00000000000..c829ca07567 --- /dev/null +++ b/dist2/types/components/Toggle/ListToggle.d.ts @@ -0,0 +1,9 @@ +/// +interface ToggleProps { + id?: string; + isActive: boolean; + bgColor: string; + toggle: () => void; +} +export default function ListToggle({ id, isActive, bgColor, toggle }: ToggleProps): JSX.Element; +export {}; diff --git a/dist2/types/components/Toggle/MultiToggle.d.ts b/dist2/types/components/Toggle/MultiToggle.d.ts new file mode 100644 index 00000000000..7cd8fc5cc44 --- /dev/null +++ b/dist2/types/components/Toggle/MultiToggle.d.ts @@ -0,0 +1,7 @@ +export declare const ToggleWrapper: import("styled-components").StyledComponent<"button", import("styled-components").DefaultTheme, { + width?: string | undefined; +}, never>; +export declare const ToggleElement: import("styled-components").StyledComponent<"span", import("styled-components").DefaultTheme, { + isActive?: boolean | undefined; + fontSize?: string | undefined; +}, never>; diff --git a/dist2/types/components/Toggle/index.d.ts b/dist2/types/components/Toggle/index.d.ts new file mode 100644 index 00000000000..068b44ce2c4 --- /dev/null +++ b/dist2/types/components/Toggle/index.d.ts @@ -0,0 +1,10 @@ +import { ReactNode } from 'react'; +interface ToggleProps { + id?: string; + isActive: boolean; + toggle: () => void; + checked?: ReactNode; + unchecked?: ReactNode; +} +export default function Toggle({ id, isActive, toggle, checked, unchecked, }: ToggleProps): JSX.Element; +export {}; diff --git a/dist2/types/components/TokenWarningModal/index.d.ts b/dist2/types/components/TokenWarningModal/index.d.ts new file mode 100644 index 00000000000..1e1a40bc53c --- /dev/null +++ b/dist2/types/components/TokenWarningModal/index.d.ts @@ -0,0 +1,8 @@ +/// +import { Token } from '@uniswap/sdk-core'; +export default function TokenWarningModal({ isOpen, tokens, onConfirm, onDismiss, }: { + isOpen: boolean; + tokens: Token[]; + onConfirm: () => void; + onDismiss: () => void; +}): JSX.Element; diff --git a/dist2/types/components/Tooltip/index.d.ts b/dist2/types/components/Tooltip/index.d.ts new file mode 100644 index 00000000000..4b891a09dce --- /dev/null +++ b/dist2/types/components/Tooltip/index.d.ts @@ -0,0 +1,16 @@ +import { ReactNode } from 'react'; +import { PopoverProps } from '../Popover'; +export declare const TooltipContainer: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; +interface TooltipProps extends Omit { + text: ReactNode; +} +interface TooltipContentProps extends Omit { + content: ReactNode; + onOpen?: () => void; + wrap?: boolean; + disableHover?: boolean; +} +export default function Tooltip({ text, ...rest }: TooltipProps): JSX.Element; +export declare function MouseoverTooltip({ children, ...rest }: Omit): JSX.Element; +export declare function MouseoverTooltipContent({ content, children, onOpen: openCallback, disableHover, ...rest }: Omit): JSX.Element; +export {}; diff --git a/dist2/types/components/TransactionConfirmationModal/AnimatedConfirmation.d.ts b/dist2/types/components/TransactionConfirmationModal/AnimatedConfirmation.d.ts new file mode 100644 index 00000000000..41f6ab876b1 --- /dev/null +++ b/dist2/types/components/TransactionConfirmationModal/AnimatedConfirmation.d.ts @@ -0,0 +1,2 @@ +/// +export default function AnimatedConfirmation(): JSX.Element; diff --git a/dist2/types/components/TransactionConfirmationModal/index.d.ts b/dist2/types/components/TransactionConfirmationModal/index.d.ts new file mode 100644 index 00000000000..a2b8d7ce6ec --- /dev/null +++ b/dist2/types/components/TransactionConfirmationModal/index.d.ts @@ -0,0 +1,23 @@ +import { Currency } from '@uniswap/sdk-core'; +import { ReactNode } from 'react'; +export declare function ConfirmationModalContent({ title, bottomContent, onDismiss, topContent, }: { + title: ReactNode; + onDismiss: () => void; + topContent: () => ReactNode; + bottomContent?: () => ReactNode | undefined; +}): JSX.Element; +export declare function TransactionErrorContent({ message, onDismiss }: { + message: ReactNode; + onDismiss: () => void; +}): JSX.Element; +interface ConfirmationModalProps { + isOpen: boolean; + onDismiss: () => void; + hash: string | undefined; + content: () => ReactNode; + attemptingTxn: boolean; + pendingText: ReactNode; + currencyToAdd?: Currency | undefined; +} +export default function TransactionConfirmationModal({ isOpen, onDismiss, attemptingTxn, hash, pendingText, content, currencyToAdd, }: ConfirmationModalProps): JSX.Element | null; +export {}; diff --git a/dist2/types/components/TransactionSettings/index.d.ts b/dist2/types/components/TransactionSettings/index.d.ts new file mode 100644 index 00000000000..77fd8c92fdb --- /dev/null +++ b/dist2/types/components/TransactionSettings/index.d.ts @@ -0,0 +1,7 @@ +/// +import { Percent } from '@uniswap/sdk-core'; +interface TransactionSettingsProps { + placeholderSlippage: Percent; +} +export default function TransactionSettings({ placeholderSlippage }: TransactionSettingsProps): JSX.Element; +export {}; diff --git a/dist2/types/components/WalletModal/Option.d.ts b/dist2/types/components/WalletModal/Option.d.ts new file mode 100644 index 00000000000..cac54d476d8 --- /dev/null +++ b/dist2/types/components/WalletModal/Option.d.ts @@ -0,0 +1,13 @@ +import React from 'react'; +export default function Option({ link, clickable, size, onClick, color, header, subheader, icon, active, id, }: { + link?: string | null; + clickable?: boolean; + size?: number | null; + onClick?: null | (() => void); + color: string; + header: React.ReactNode; + subheader: React.ReactNode | null; + icon: string; + active?: boolean; + id: string; +}): JSX.Element; diff --git a/dist2/types/components/WalletModal/PendingView.d.ts b/dist2/types/components/WalletModal/PendingView.d.ts new file mode 100644 index 00000000000..8e4e685f919 --- /dev/null +++ b/dist2/types/components/WalletModal/PendingView.d.ts @@ -0,0 +1,8 @@ +/// +import { AbstractConnector } from '@web3-react/abstract-connector'; +export default function PendingView({ connector, error, setPendingError, tryActivation, }: { + connector?: AbstractConnector; + error?: boolean; + setPendingError: (error: boolean) => void; + tryActivation: (connector: AbstractConnector) => void; +}): JSX.Element; diff --git a/dist2/types/components/WalletModal/index.d.ts b/dist2/types/components/WalletModal/index.d.ts new file mode 100644 index 00000000000..1bb2047a04e --- /dev/null +++ b/dist2/types/components/WalletModal/index.d.ts @@ -0,0 +1,6 @@ +/// +export default function WalletModal({ pendingTransactions, confirmedTransactions, ENSName, }: { + pendingTransactions: string[]; + confirmedTransactions: string[]; + ENSName?: string; +}): JSX.Element; diff --git a/dist2/types/components/Web3ReactManager/index.d.ts b/dist2/types/components/Web3ReactManager/index.d.ts new file mode 100644 index 00000000000..f54f45f4fee --- /dev/null +++ b/dist2/types/components/Web3ReactManager/index.d.ts @@ -0,0 +1,4 @@ +/// +export default function Web3ReactManager({ children }: { + children: JSX.Element; +}): JSX.Element; diff --git a/dist2/types/components/Web3Status/index.d.ts b/dist2/types/components/Web3Status/index.d.ts new file mode 100644 index 00000000000..14179bd71c0 --- /dev/null +++ b/dist2/types/components/Web3Status/index.d.ts @@ -0,0 +1,2 @@ +/// +export default function Web3Status(): JSX.Element; diff --git a/dist2/types/components/analytics/GoogleAnalyticsReporter.d.ts b/dist2/types/components/analytics/GoogleAnalyticsReporter.d.ts new file mode 100644 index 00000000000..0d797b2348f --- /dev/null +++ b/dist2/types/components/analytics/GoogleAnalyticsReporter.d.ts @@ -0,0 +1,2 @@ +import { RouteComponentProps } from 'react-router-dom'; +export default function GoogleAnalyticsReporter({ location: { pathname, search } }: RouteComponentProps): null; diff --git a/dist2/types/components/analytics/index.d.ts b/dist2/types/components/analytics/index.d.ts new file mode 100644 index 00000000000..cb0ff5c3b54 --- /dev/null +++ b/dist2/types/components/analytics/index.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/dist2/types/components/claim/AddressClaimModal.d.ts b/dist2/types/components/claim/AddressClaimModal.d.ts new file mode 100644 index 00000000000..2cb0311246e --- /dev/null +++ b/dist2/types/components/claim/AddressClaimModal.d.ts @@ -0,0 +1,5 @@ +/// +export default function AddressClaimModal({ isOpen, onDismiss }: { + isOpen: boolean; + onDismiss: () => void; +}): JSX.Element; diff --git a/dist2/types/components/claim/ClaimModal.d.ts b/dist2/types/components/claim/ClaimModal.d.ts new file mode 100644 index 00000000000..5135efda31a --- /dev/null +++ b/dist2/types/components/claim/ClaimModal.d.ts @@ -0,0 +1,2 @@ +/// +export default function ClaimModal(): JSX.Element; diff --git a/dist2/types/components/earn/ClaimRewardModal.d.ts b/dist2/types/components/earn/ClaimRewardModal.d.ts new file mode 100644 index 00000000000..19ce7ba55ed --- /dev/null +++ b/dist2/types/components/earn/ClaimRewardModal.d.ts @@ -0,0 +1,9 @@ +/// +import { StakingInfo } from '../../state/stake/hooks'; +interface StakingModalProps { + isOpen: boolean; + onDismiss: () => void; + stakingInfo: StakingInfo; +} +export default function ClaimRewardModal({ isOpen, onDismiss, stakingInfo }: StakingModalProps): JSX.Element; +export {}; diff --git a/dist2/types/components/earn/PoolCard.d.ts b/dist2/types/components/earn/PoolCard.d.ts new file mode 100644 index 00000000000..2d818ee791a --- /dev/null +++ b/dist2/types/components/earn/PoolCard.d.ts @@ -0,0 +1,5 @@ +/// +import { StakingInfo } from '../../state/stake/hooks'; +export default function PoolCard({ stakingInfo }: { + stakingInfo: StakingInfo; +}): JSX.Element; diff --git a/dist2/types/components/earn/StakingModal.d.ts b/dist2/types/components/earn/StakingModal.d.ts new file mode 100644 index 00000000000..6a5397e4553 --- /dev/null +++ b/dist2/types/components/earn/StakingModal.d.ts @@ -0,0 +1,11 @@ +/// +import { CurrencyAmount, Token } from '@uniswap/sdk-core'; +import { StakingInfo } from '../../state/stake/hooks'; +interface StakingModalProps { + isOpen: boolean; + onDismiss: () => void; + stakingInfo: StakingInfo; + userLiquidityUnstaked: CurrencyAmount | undefined; +} +export default function StakingModal({ isOpen, onDismiss, stakingInfo, userLiquidityUnstaked }: StakingModalProps): JSX.Element; +export {}; diff --git a/dist2/types/components/earn/UnstakingModal.d.ts b/dist2/types/components/earn/UnstakingModal.d.ts new file mode 100644 index 00000000000..43a1e25b705 --- /dev/null +++ b/dist2/types/components/earn/UnstakingModal.d.ts @@ -0,0 +1,9 @@ +/// +import { StakingInfo } from '../../state/stake/hooks'; +interface StakingModalProps { + isOpen: boolean; + onDismiss: () => void; + stakingInfo: StakingInfo; +} +export default function UnstakingModal({ isOpen, onDismiss, stakingInfo }: StakingModalProps): JSX.Element; +export {}; diff --git a/dist2/types/components/earn/styled.d.ts b/dist2/types/components/earn/styled.d.ts new file mode 100644 index 00000000000..6f83720d015 --- /dev/null +++ b/dist2/types/components/earn/styled.d.ts @@ -0,0 +1,20 @@ +export declare const DataCard: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, { + gap?: string | undefined; + justify?: "end" | "space-between" | "stretch" | "center" | "flex-end" | "flex-start" | "start" | undefined; +} & { + disabled?: boolean | undefined; +}, never>; +export declare const CardBGImage: import("styled-components").StyledComponent<"span", import("styled-components").DefaultTheme, { + desaturate?: boolean | undefined; +}, never>; +export declare const CardBGImageSmaller: import("styled-components").StyledComponent<"span", import("styled-components").DefaultTheme, { + desaturate?: boolean | undefined; +}, never>; +export declare const CardNoise: import("styled-components").StyledComponent<"span", import("styled-components").DefaultTheme, {}, never>; +export declare const CardSection: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, { + gap?: string | undefined; + justify?: "end" | "space-between" | "stretch" | "center" | "flex-end" | "flex-start" | "start" | undefined; +} & { + disabled?: boolean | undefined; +}, never>; +export declare const Break: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; diff --git a/dist2/types/components/swap/AdvancedSwapDetails.d.ts b/dist2/types/components/swap/AdvancedSwapDetails.d.ts new file mode 100644 index 00000000000..32c3f500799 --- /dev/null +++ b/dist2/types/components/swap/AdvancedSwapDetails.d.ts @@ -0,0 +1,11 @@ +/// +import { Currency, Percent, TradeType } from '@uniswap/sdk-core'; +import { InterfaceTrade } from 'state/routing/types'; +interface AdvancedSwapDetailsProps { + trade?: InterfaceTrade; + allowedSlippage: Percent; + syncing?: boolean; + hideRouteDiagram?: boolean; +} +export declare function AdvancedSwapDetails({ trade, allowedSlippage, syncing }: AdvancedSwapDetailsProps): JSX.Element | null; +export {}; diff --git a/dist2/types/components/swap/ConfirmSwapModal.d.ts b/dist2/types/components/swap/ConfirmSwapModal.d.ts new file mode 100644 index 00000000000..0f893becab1 --- /dev/null +++ b/dist2/types/components/swap/ConfirmSwapModal.d.ts @@ -0,0 +1,17 @@ +import { Trade } from '@uniswap/router-sdk'; +import { Currency, Percent, TradeType } from '@uniswap/sdk-core'; +import { ReactNode } from 'react'; +import { InterfaceTrade } from 'state/routing/types'; +export default function ConfirmSwapModal({ trade, originalTrade, onAcceptChanges, allowedSlippage, onConfirm, onDismiss, recipient, swapErrorMessage, isOpen, attemptingTxn, txHash, }: { + isOpen: boolean; + trade: InterfaceTrade | undefined; + originalTrade: Trade | undefined; + attemptingTxn: boolean; + txHash: string | undefined; + recipient: string | null; + allowedSlippage: Percent; + onAcceptChanges: () => void; + onConfirm: () => void; + swapErrorMessage: ReactNode | undefined; + onDismiss: () => void; +}): JSX.Element; diff --git a/dist2/types/components/swap/FormattedPriceImpact.d.ts b/dist2/types/components/swap/FormattedPriceImpact.d.ts new file mode 100644 index 00000000000..4844d233108 --- /dev/null +++ b/dist2/types/components/swap/FormattedPriceImpact.d.ts @@ -0,0 +1,8 @@ +/// +import { Percent } from '@uniswap/sdk-core'; +/** + * Formatted version of price impact text with warning colors + */ +export default function FormattedPriceImpact({ priceImpact }: { + priceImpact?: Percent; +}): JSX.Element; diff --git a/dist2/types/components/swap/GasEstimateBadge.d.ts b/dist2/types/components/swap/GasEstimateBadge.d.ts new file mode 100644 index 00000000000..f4d4fffbd40 --- /dev/null +++ b/dist2/types/components/swap/GasEstimateBadge.d.ts @@ -0,0 +1,9 @@ +/// +import { Currency, TradeType } from '@uniswap/sdk-core'; +import { InterfaceTrade } from 'state/routing/types'; +export default function GasEstimateBadge({ trade, loading, showRoute, disableHover, }: { + trade: InterfaceTrade | undefined | null; + loading: boolean; + showRoute?: boolean; + disableHover?: boolean; +}): JSX.Element; diff --git a/dist2/types/components/swap/RouterLabel.d.ts b/dist2/types/components/swap/RouterLabel.d.ts new file mode 100644 index 00000000000..4825082cc34 --- /dev/null +++ b/dist2/types/components/swap/RouterLabel.d.ts @@ -0,0 +1,3 @@ +/// +export declare function AutoRouterLogo(): JSX.Element; +export declare function AutoRouterLabel(): JSX.Element; diff --git a/dist2/types/components/swap/SwapDetailsDropdown.d.ts b/dist2/types/components/swap/SwapDetailsDropdown.d.ts new file mode 100644 index 00000000000..b607a462f87 --- /dev/null +++ b/dist2/types/components/swap/SwapDetailsDropdown.d.ts @@ -0,0 +1,13 @@ +/// +import { Currency, Percent, TradeType } from '@uniswap/sdk-core'; +import { InterfaceTrade } from 'state/routing/types'; +interface SwapDetailsInlineProps { + trade: InterfaceTrade | undefined; + syncing: boolean; + loading: boolean; + showInverted: boolean; + setShowInverted: React.Dispatch>; + allowedSlippage: Percent; +} +export default function SwapDetailsDropdown({ trade, syncing, loading, showInverted, setShowInverted, allowedSlippage, }: SwapDetailsInlineProps): JSX.Element; +export {}; diff --git a/dist2/types/components/swap/SwapHeader.d.ts b/dist2/types/components/swap/SwapHeader.d.ts new file mode 100644 index 00000000000..a597e2cf105 --- /dev/null +++ b/dist2/types/components/swap/SwapHeader.d.ts @@ -0,0 +1,5 @@ +/// +import { Percent } from '@uniswap/sdk-core'; +export default function SwapHeader({ allowedSlippage }: { + allowedSlippage: Percent; +}): JSX.Element; diff --git a/dist2/types/components/swap/SwapModalFooter.d.ts b/dist2/types/components/swap/SwapModalFooter.d.ts new file mode 100644 index 00000000000..94c6ad35029 --- /dev/null +++ b/dist2/types/components/swap/SwapModalFooter.d.ts @@ -0,0 +1,9 @@ +import { Trade } from '@uniswap/router-sdk'; +import { Currency, TradeType } from '@uniswap/sdk-core'; +import { ReactNode } from 'react'; +export default function SwapModalFooter({ onConfirm, swapErrorMessage, disabledConfirm, }: { + trade: Trade; + onConfirm: () => void; + swapErrorMessage: ReactNode | undefined; + disabledConfirm: boolean; +}): JSX.Element; diff --git a/dist2/types/components/swap/SwapModalHeader.d.ts b/dist2/types/components/swap/SwapModalHeader.d.ts new file mode 100644 index 00000000000..cbedb7a4d3e --- /dev/null +++ b/dist2/types/components/swap/SwapModalHeader.d.ts @@ -0,0 +1,10 @@ +/// +import { Currency, Percent, TradeType } from '@uniswap/sdk-core'; +import { InterfaceTrade } from 'state/routing/types'; +export default function SwapModalHeader({ trade, allowedSlippage, recipient, showAcceptChanges, onAcceptChanges, }: { + trade: InterfaceTrade; + allowedSlippage: Percent; + recipient: string | null; + showAcceptChanges: boolean; + onAcceptChanges: () => void; +}): JSX.Element; diff --git a/dist2/types/components/swap/SwapRoute.d.ts b/dist2/types/components/swap/SwapRoute.d.ts new file mode 100644 index 00000000000..58240798840 --- /dev/null +++ b/dist2/types/components/swap/SwapRoute.d.ts @@ -0,0 +1,10 @@ +/// +import { Currency, TradeType } from '@uniswap/sdk-core'; +import { InterfaceTrade } from 'state/routing/types'; +interface SwapRouteProps extends React.HTMLAttributes { + trade: InterfaceTrade; + syncing: boolean; + fixedOpen?: boolean; +} +declare const _default: import("react").NamedExoticComponent; +export default _default; diff --git a/dist2/types/components/swap/SwapWarningDropdown.d.ts b/dist2/types/components/swap/SwapWarningDropdown.d.ts new file mode 100644 index 00000000000..7ae95382c16 --- /dev/null +++ b/dist2/types/components/swap/SwapWarningDropdown.d.ts @@ -0,0 +1,10 @@ +/// +import { Currency, CurrencyAmount, Token, TradeType } from '@uniswap/sdk-core'; +import { InterfaceTrade } from 'state/routing/types'; +/** + * @returns Dropdown card for showing edge case warnings outside of button + */ +export default function SwapWarningDropdown({ fiatValueInput, trade, }: { + fiatValueInput: CurrencyAmount | null; + trade: InterfaceTrade | undefined; +}): JSX.Element | null; diff --git a/dist2/types/components/swap/TradePrice.d.ts b/dist2/types/components/swap/TradePrice.d.ts new file mode 100644 index 00000000000..76e5e610ce3 --- /dev/null +++ b/dist2/types/components/swap/TradePrice.d.ts @@ -0,0 +1,9 @@ +/// +import { Currency, Price } from '@uniswap/sdk-core'; +interface TradePriceProps { + price: Price; + showInverted: boolean; + setShowInverted: (showInverted: boolean) => void; +} +export default function TradePrice({ price, showInverted, setShowInverted }: TradePriceProps): JSX.Element; +export {}; diff --git a/dist2/types/components/swap/UnsupportedCurrencyFooter.d.ts b/dist2/types/components/swap/UnsupportedCurrencyFooter.d.ts new file mode 100644 index 00000000000..33663c38f09 --- /dev/null +++ b/dist2/types/components/swap/UnsupportedCurrencyFooter.d.ts @@ -0,0 +1,6 @@ +/// +import { Currency } from '@uniswap/sdk-core'; +export default function UnsupportedCurrencyFooter({ show, currencies, }: { + show: boolean; + currencies: (Currency | undefined | null)[]; +}): JSX.Element; diff --git a/dist2/types/components/swap/confirmPriceImpactWithoutFee.d.ts b/dist2/types/components/swap/confirmPriceImpactWithoutFee.d.ts new file mode 100644 index 00000000000..2c63e412ec8 --- /dev/null +++ b/dist2/types/components/swap/confirmPriceImpactWithoutFee.d.ts @@ -0,0 +1,7 @@ +import { Percent } from '@uniswap/sdk-core'; +/** + * Given the price impact, get user confirmation. + * + * @param priceImpactWithoutFee price impact of the trade without the fee. + */ +export default function confirmPriceImpactWithoutFee(priceImpactWithoutFee: Percent): boolean; diff --git a/dist2/types/components/swap/styleds.d.ts b/dist2/types/components/swap/styleds.d.ts new file mode 100644 index 00000000000..b9939449472 --- /dev/null +++ b/dist2/types/components/swap/styleds.d.ts @@ -0,0 +1,454 @@ +import { ReactNode } from 'react'; +import TradePrice from './TradePrice'; +export declare const Wrapper: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; +export declare const ArrowWrapper: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, { + clickable: boolean; +}, never>; +export declare const SectionBreak: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; +export declare const ErrorText: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { + severity?: 0 | 2 | 1 | 3 | 4 | undefined; +}, never>; +export declare const TruncatedText: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, {}, never>; +export declare const Dots: import("styled-components").StyledComponent<"span", import("styled-components").DefaultTheme, {}, never>; +export declare function SwapCallbackError({ error }: { + error: ReactNode; +}): JSX.Element; +export declare const SwapShowAcceptChanges: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, { + gap?: string | undefined; + justify?: "end" | "space-between" | "stretch" | "center" | "flex-end" | "flex-start" | "start" | undefined; +}, never>; +export declare const TransactionDetailsLabel: import("styled-components").StyledComponent<(props: { + name?: string | undefined; + label?: string | undefined; + min?: string | number | undefined; + value?: string | number | readonly string[] | undefined; + data?: string | undefined; + nonce?: string | undefined; + type?: string | undefined; + target?: string | undefined; + resource?: string | undefined; + key?: import("react").Key | null | undefined; + id?: string | undefined; + src?: string | undefined; + results?: number | undefined; + list?: string | undefined; + hidden?: boolean | undefined; + ref?: import("react").Ref | undefined; + cite?: string | undefined; + form?: string | undefined; + p?: import("styled-system").ResponsiveValue>> | undefined; + slot?: string | undefined; + span?: number | undefined; + style?: import("react").CSSProperties | undefined; + summary?: string | undefined; + title?: string | undefined; + pattern?: string | undefined; + children?: ReactNode; + size?: import("styled-system").ResponsiveValue, Required>> | undefined; + content?: string | undefined; + headers?: string | undefined; + integrity?: string | undefined; + method?: string | undefined; + default?: boolean | undefined; + color?: import("styled-system").ResponsiveValue>> | undefined; + minLength?: number | undefined; + required?: boolean | undefined; + lang?: string | undefined; + className?: string | undefined; + height?: import("styled-system").ResponsiveValue, Required>> | undefined; + max?: string | number | undefined; + media?: string | undefined; + width?: import("styled-system").ResponsiveValue, Required>> | undefined; + role?: import("react").AriaRole | undefined; + tabIndex?: number | undefined; + crossOrigin?: string | undefined; + display?: import("styled-system").ResponsiveValue>> | undefined; + fontFamily?: import("styled-system").ResponsiveValue>> | undefined; + fontSize?: import("styled-system").ResponsiveValue>> | undefined; + fontStyle?: import("styled-system").ResponsiveValue>> | undefined; + fontWeight?: import("styled-system").ResponsiveValue>> | undefined; + href?: string | undefined; + letterSpacing?: import("styled-system").ResponsiveValue>> | undefined; + opacity?: import("styled-system").ResponsiveValue>> | undefined; + order?: import("styled-system").ResponsiveValue>> | undefined; + overflow?: import("styled-system").ResponsiveValue>> | undefined; + 'aria-activedescendant'?: string | undefined; + 'aria-atomic'?: (boolean | "true" | "false") | undefined; + 'aria-autocomplete'?: "list" | "none" | "both" | "inline" | undefined; + 'aria-busy'?: (boolean | "true" | "false") | undefined; + 'aria-checked'?: boolean | "true" | "false" | "mixed" | undefined; + 'aria-colcount'?: number | undefined; + 'aria-colindex'?: number | undefined; + 'aria-colspan'?: number | undefined; + 'aria-controls'?: string | undefined; + 'aria-current'?: boolean | "time" | "true" | "false" | "page" | "location" | "step" | "date" | undefined; + 'aria-describedby'?: string | undefined; + 'aria-details'?: string | undefined; + 'aria-disabled'?: (boolean | "true" | "false") | undefined; + 'aria-dropeffect'?: "execute" | "link" | "copy" | "none" | "move" | "popup" | undefined; + 'aria-errormessage'?: string | undefined; + 'aria-expanded'?: (boolean | "true" | "false") | undefined; + 'aria-flowto'?: string | undefined; + 'aria-grabbed'?: (boolean | "true" | "false") | undefined; + 'aria-haspopup'?: boolean | "dialog" | "menu" | "grid" | "listbox" | "tree" | "true" | "false" | undefined; + 'aria-hidden'?: (boolean | "true" | "false") | undefined; + 'aria-invalid'?: boolean | "true" | "false" | "grammar" | "spelling" | undefined; + 'aria-keyshortcuts'?: string | undefined; + 'aria-label'?: string | undefined; + 'aria-labelledby'?: string | undefined; + 'aria-level'?: number | undefined; + 'aria-live'?: "off" | "assertive" | "polite" | undefined; + 'aria-modal'?: (boolean | "true" | "false") | undefined; + 'aria-multiline'?: (boolean | "true" | "false") | undefined; + 'aria-multiselectable'?: (boolean | "true" | "false") | undefined; + 'aria-orientation'?: "horizontal" | "vertical" | undefined; + 'aria-owns'?: string | undefined; + 'aria-placeholder'?: string | undefined; + 'aria-posinset'?: number | undefined; + 'aria-pressed'?: boolean | "true" | "false" | "mixed" | undefined; + 'aria-readonly'?: (boolean | "true" | "false") | undefined; + 'aria-relevant'?: "text" | "all" | "additions" | "additions removals" | "additions text" | "removals" | "removals additions" | "removals text" | "text additions" | "text removals" | undefined; + 'aria-required'?: (boolean | "true" | "false") | undefined; + 'aria-roledescription'?: string | undefined; + 'aria-rowcount'?: number | undefined; + 'aria-rowindex'?: number | undefined; + 'aria-rowspan'?: number | undefined; + 'aria-selected'?: (boolean | "true" | "false") | undefined; + 'aria-setsize'?: number | undefined; + 'aria-sort'?: "other" | "none" | "ascending" | "descending" | undefined; + 'aria-valuemax'?: number | undefined; + 'aria-valuemin'?: number | undefined; + 'aria-valuenow'?: number | undefined; + 'aria-valuetext'?: string | undefined; + dangerouslySetInnerHTML?: { + __html: string; + } | undefined; + onCopy?: import("react").ClipboardEventHandler | undefined; + onCopyCapture?: import("react").ClipboardEventHandler | undefined; + onCut?: import("react").ClipboardEventHandler | undefined; + onCutCapture?: import("react").ClipboardEventHandler | undefined; + onPaste?: import("react").ClipboardEventHandler | undefined; + onPasteCapture?: import("react").ClipboardEventHandler | undefined; + onCompositionEnd?: import("react").CompositionEventHandler | undefined; + onCompositionEndCapture?: import("react").CompositionEventHandler | undefined; + onCompositionStart?: import("react").CompositionEventHandler | undefined; + onCompositionStartCapture?: import("react").CompositionEventHandler | undefined; + onCompositionUpdate?: import("react").CompositionEventHandler | undefined; + onCompositionUpdateCapture?: import("react").CompositionEventHandler | undefined; + onFocus?: import("react").FocusEventHandler | undefined; + onFocusCapture?: import("react").FocusEventHandler | undefined; + onBlur?: import("react").FocusEventHandler | undefined; + onBlurCapture?: import("react").FocusEventHandler | undefined; + onChange?: import("react").FormEventHandler | undefined; + onChangeCapture?: import("react").FormEventHandler | undefined; + onBeforeInput?: import("react").FormEventHandler | undefined; + onBeforeInputCapture?: import("react").FormEventHandler | undefined; + onInput?: import("react").FormEventHandler | undefined; + onInputCapture?: import("react").FormEventHandler | undefined; + onReset?: import("react").FormEventHandler | undefined; + onResetCapture?: import("react").FormEventHandler | undefined; + onSubmit?: import("react").FormEventHandler | undefined; + onSubmitCapture?: import("react").FormEventHandler | undefined; + onInvalid?: import("react").FormEventHandler | undefined; + onInvalidCapture?: import("react").FormEventHandler | undefined; + onLoad?: import("react").ReactEventHandler | undefined; + onLoadCapture?: import("react").ReactEventHandler | undefined; + onError?: import("react").ReactEventHandler | undefined; + onErrorCapture?: import("react").ReactEventHandler | undefined; + onKeyDown?: import("react").KeyboardEventHandler | undefined; + onKeyDownCapture?: import("react").KeyboardEventHandler | undefined; + onKeyPress?: import("react").KeyboardEventHandler | undefined; + onKeyPressCapture?: import("react").KeyboardEventHandler | undefined; + onKeyUp?: import("react").KeyboardEventHandler | undefined; + onKeyUpCapture?: import("react").KeyboardEventHandler | undefined; + onAbort?: import("react").ReactEventHandler | undefined; + onAbortCapture?: import("react").ReactEventHandler | undefined; + onCanPlay?: import("react").ReactEventHandler | undefined; + onCanPlayCapture?: import("react").ReactEventHandler | undefined; + onCanPlayThrough?: import("react").ReactEventHandler | undefined; + onCanPlayThroughCapture?: import("react").ReactEventHandler | undefined; + onDurationChange?: import("react").ReactEventHandler | undefined; + onDurationChangeCapture?: import("react").ReactEventHandler | undefined; + onEmptied?: import("react").ReactEventHandler | undefined; + onEmptiedCapture?: import("react").ReactEventHandler | undefined; + onEncrypted?: import("react").ReactEventHandler | undefined; + onEncryptedCapture?: import("react").ReactEventHandler | undefined; + onEnded?: import("react").ReactEventHandler | undefined; + onEndedCapture?: import("react").ReactEventHandler | undefined; + onLoadedData?: import("react").ReactEventHandler | undefined; + onLoadedDataCapture?: import("react").ReactEventHandler | undefined; + onLoadedMetadata?: import("react").ReactEventHandler | undefined; + onLoadedMetadataCapture?: import("react").ReactEventHandler | undefined; + onLoadStart?: import("react").ReactEventHandler | undefined; + onLoadStartCapture?: import("react").ReactEventHandler | undefined; + onPause?: import("react").ReactEventHandler | undefined; + onPauseCapture?: import("react").ReactEventHandler | undefined; + onPlay?: import("react").ReactEventHandler | undefined; + onPlayCapture?: import("react").ReactEventHandler | undefined; + onPlaying?: import("react").ReactEventHandler | undefined; + onPlayingCapture?: import("react").ReactEventHandler | undefined; + onProgress?: import("react").ReactEventHandler | undefined; + onProgressCapture?: import("react").ReactEventHandler | undefined; + onRateChange?: import("react").ReactEventHandler | undefined; + onRateChangeCapture?: import("react").ReactEventHandler | undefined; + onSeeked?: import("react").ReactEventHandler | undefined; + onSeekedCapture?: import("react").ReactEventHandler | undefined; + onSeeking?: import("react").ReactEventHandler | undefined; + onSeekingCapture?: import("react").ReactEventHandler | undefined; + onStalled?: import("react").ReactEventHandler | undefined; + onStalledCapture?: import("react").ReactEventHandler | undefined; + onSuspend?: import("react").ReactEventHandler | undefined; + onSuspendCapture?: import("react").ReactEventHandler | undefined; + onTimeUpdate?: import("react").ReactEventHandler | undefined; + onTimeUpdateCapture?: import("react").ReactEventHandler | undefined; + onVolumeChange?: import("react").ReactEventHandler | undefined; + onVolumeChangeCapture?: import("react").ReactEventHandler | undefined; + onWaiting?: import("react").ReactEventHandler | undefined; + onWaitingCapture?: import("react").ReactEventHandler | undefined; + onAuxClick?: import("react").MouseEventHandler | undefined; + onAuxClickCapture?: import("react").MouseEventHandler | undefined; + onClick?: import("react").MouseEventHandler | undefined; + onClickCapture?: import("react").MouseEventHandler | undefined; + onContextMenu?: import("react").MouseEventHandler | undefined; + onContextMenuCapture?: import("react").MouseEventHandler | undefined; + onDoubleClick?: import("react").MouseEventHandler | undefined; + onDoubleClickCapture?: import("react").MouseEventHandler | undefined; + onDrag?: import("react").DragEventHandler | undefined; + onDragCapture?: import("react").DragEventHandler | undefined; + onDragEnd?: import("react").DragEventHandler | undefined; + onDragEndCapture?: import("react").DragEventHandler | undefined; + onDragEnter?: import("react").DragEventHandler | undefined; + onDragEnterCapture?: import("react").DragEventHandler | undefined; + onDragExit?: import("react").DragEventHandler | undefined; + onDragExitCapture?: import("react").DragEventHandler | undefined; + onDragLeave?: import("react").DragEventHandler | undefined; + onDragLeaveCapture?: import("react").DragEventHandler | undefined; + onDragOver?: import("react").DragEventHandler | undefined; + onDragOverCapture?: import("react").DragEventHandler | undefined; + onDragStart?: import("react").DragEventHandler | undefined; + onDragStartCapture?: import("react").DragEventHandler | undefined; + onDrop?: import("react").DragEventHandler | undefined; + onDropCapture?: import("react").DragEventHandler | undefined; + onMouseDown?: import("react").MouseEventHandler | undefined; + onMouseDownCapture?: import("react").MouseEventHandler | undefined; + onMouseEnter?: import("react").MouseEventHandler | undefined; + onMouseLeave?: import("react").MouseEventHandler | undefined; + onMouseMove?: import("react").MouseEventHandler | undefined; + onMouseMoveCapture?: import("react").MouseEventHandler | undefined; + onMouseOut?: import("react").MouseEventHandler | undefined; + onMouseOutCapture?: import("react").MouseEventHandler | undefined; + onMouseOver?: import("react").MouseEventHandler | undefined; + onMouseOverCapture?: import("react").MouseEventHandler | undefined; + onMouseUp?: import("react").MouseEventHandler | undefined; + onMouseUpCapture?: import("react").MouseEventHandler | undefined; + onSelect?: import("react").ReactEventHandler | undefined; + onSelectCapture?: import("react").ReactEventHandler | undefined; + onTouchCancel?: import("react").TouchEventHandler | undefined; + onTouchCancelCapture?: import("react").TouchEventHandler | undefined; + onTouchEnd?: import("react").TouchEventHandler | undefined; + onTouchEndCapture?: import("react").TouchEventHandler | undefined; + onTouchMove?: import("react").TouchEventHandler | undefined; + onTouchMoveCapture?: import("react").TouchEventHandler | undefined; + onTouchStart?: import("react").TouchEventHandler | undefined; + onTouchStartCapture?: import("react").TouchEventHandler | undefined; + onPointerDown?: import("react").PointerEventHandler | undefined; + onPointerDownCapture?: import("react").PointerEventHandler | undefined; + onPointerMove?: import("react").PointerEventHandler | undefined; + onPointerMoveCapture?: import("react").PointerEventHandler | undefined; + onPointerUp?: import("react").PointerEventHandler | undefined; + onPointerUpCapture?: import("react").PointerEventHandler | undefined; + onPointerCancel?: import("react").PointerEventHandler | undefined; + onPointerCancelCapture?: import("react").PointerEventHandler | undefined; + onPointerEnter?: import("react").PointerEventHandler | undefined; + onPointerEnterCapture?: import("react").PointerEventHandler | undefined; + onPointerLeave?: import("react").PointerEventHandler | undefined; + onPointerLeaveCapture?: import("react").PointerEventHandler | undefined; + onPointerOver?: import("react").PointerEventHandler | undefined; + onPointerOverCapture?: import("react").PointerEventHandler | undefined; + onPointerOut?: import("react").PointerEventHandler | undefined; + onPointerOutCapture?: import("react").PointerEventHandler | undefined; + onGotPointerCapture?: import("react").PointerEventHandler | undefined; + onGotPointerCaptureCapture?: import("react").PointerEventHandler | undefined; + onLostPointerCapture?: import("react").PointerEventHandler | undefined; + onLostPointerCaptureCapture?: import("react").PointerEventHandler | undefined; + onScroll?: import("react").UIEventHandler | undefined; + onScrollCapture?: import("react").UIEventHandler | undefined; + onWheel?: import("react").WheelEventHandler | undefined; + onWheelCapture?: import("react").WheelEventHandler | undefined; + onAnimationStart?: import("react").AnimationEventHandler | undefined; + onAnimationStartCapture?: import("react").AnimationEventHandler | undefined; + onAnimationEnd?: import("react").AnimationEventHandler | undefined; + onAnimationEndCapture?: import("react").AnimationEventHandler | undefined; + onAnimationIteration?: import("react").AnimationEventHandler | undefined; + onAnimationIterationCapture?: import("react").AnimationEventHandler | undefined; + onTransitionEnd?: import("react").TransitionEventHandler | undefined; + onTransitionEndCapture?: import("react").TransitionEventHandler | undefined; + start?: number | undefined; + flex?: import("styled-system").ResponsiveValue, Required>> | undefined; + wrap?: string | undefined; + open?: boolean | undefined; + padding?: import("styled-system").ResponsiveValue>> | undefined; + multiple?: boolean | undefined; + disabled?: boolean | undefined; + as?: import("react").ElementType | undefined; + defaultChecked?: boolean | undefined; + defaultValue?: string | number | readonly string[] | undefined; + suppressContentEditableWarning?: boolean | undefined; + suppressHydrationWarning?: boolean | undefined; + accessKey?: string | undefined; + contentEditable?: "inherit" | (boolean | "true" | "false") | undefined; + contextMenu?: string | undefined; + dir?: string | undefined; + draggable?: (boolean | "true" | "false") | undefined; + placeholder?: string | undefined; + spellCheck?: (boolean | "true" | "false") | undefined; + translate?: "no" | "yes" | undefined; + radioGroup?: string | undefined; + about?: string | undefined; + datatype?: string | undefined; + inlist?: any; + prefix?: string | undefined; + property?: string | undefined; + typeof?: string | undefined; + vocab?: string | undefined; + autoCapitalize?: string | undefined; + autoCorrect?: string | undefined; + autoSave?: string | undefined; + itemProp?: string | undefined; + itemScope?: boolean | undefined; + itemType?: string | undefined; + itemID?: string | undefined; + itemRef?: string | undefined; + security?: string | undefined; + unselectable?: "on" | "off" | undefined; + inputMode?: "text" | "search" | "url" | "none" | "tel" | "email" | "numeric" | "decimal" | undefined; + is?: string | undefined; + marginRight?: import("styled-system").ResponsiveValue>> | undefined; + marginLeft?: import("styled-system").ResponsiveValue>> | undefined; + autoFocus?: boolean | undefined; + formAction?: string | undefined; + formEncType?: string | undefined; + formMethod?: string | undefined; + formNoValidate?: boolean | undefined; + formTarget?: string | undefined; + download?: any; + hrefLang?: string | undefined; + rel?: string | undefined; + step?: string | number | undefined; + alt?: string | undefined; + sizes?: string | undefined; + srcSet?: string | undefined; + useMap?: string | undefined; + async?: boolean | undefined; + accept?: string | undefined; + acceptCharset?: string | undefined; + action?: string | undefined; + allowFullScreen?: boolean | undefined; + allowTransparency?: boolean | undefined; + autoComplete?: string | undefined; + autoPlay?: boolean | undefined; + capture?: string | boolean | undefined; + cellPadding?: string | number | undefined; + cellSpacing?: string | number | undefined; + charSet?: string | undefined; + challenge?: string | undefined; + checked?: boolean | undefined; + classID?: string | undefined; + cols?: number | undefined; + colSpan?: number | undefined; + controls?: boolean | undefined; + coords?: string | undefined; + dateTime?: string | undefined; + defer?: boolean | undefined; + encType?: string | undefined; + frameBorder?: string | number | undefined; + high?: number | undefined; + htmlFor?: string | undefined; + httpEquiv?: string | undefined; + keyParams?: string | undefined; + keyType?: string | undefined; + kind?: string | undefined; + loop?: boolean | undefined; + low?: number | undefined; + manifest?: string | undefined; + marginHeight?: number | undefined; + marginWidth?: number | undefined; + maxLength?: number | undefined; + mediaGroup?: string | undefined; + muted?: boolean | undefined; + noValidate?: boolean | undefined; + optimum?: number | undefined; + playsInline?: boolean | undefined; + poster?: string | undefined; + preload?: string | undefined; + readOnly?: boolean | undefined; + reversed?: boolean | undefined; + rows?: number | undefined; + rowSpan?: number | undefined; + sandbox?: string | undefined; + scope?: string | undefined; + scoped?: boolean | undefined; + scrolling?: string | undefined; + seamless?: boolean | undefined; + selected?: boolean | undefined; + shape?: string | undefined; + srcDoc?: string | undefined; + srcLang?: string | undefined; + wmode?: string | undefined; + variant?: import("styled-system").ResponsiveValue>> | undefined; + tx?: string | undefined; + m?: import("styled-system").ResponsiveValue>> | undefined; + margin?: import("styled-system").ResponsiveValue>> | undefined; + mt?: import("styled-system").ResponsiveValue>> | undefined; + marginTop?: import("styled-system").ResponsiveValue>> | undefined; + mr?: import("styled-system").ResponsiveValue>> | undefined; + mb?: import("styled-system").ResponsiveValue>> | undefined; + marginBottom?: import("styled-system").ResponsiveValue>> | undefined; + ml?: import("styled-system").ResponsiveValue>> | undefined; + mx?: import("styled-system").ResponsiveValue>> | undefined; + marginX?: import("styled-system").ResponsiveValue>> | undefined; + my?: import("styled-system").ResponsiveValue>> | undefined; + marginY?: import("styled-system").ResponsiveValue>> | undefined; + pt?: import("styled-system").ResponsiveValue>> | undefined; + paddingTop?: import("styled-system").ResponsiveValue>> | undefined; + pr?: import("styled-system").ResponsiveValue>> | undefined; + paddingRight?: import("styled-system").ResponsiveValue>> | undefined; + pb?: import("styled-system").ResponsiveValue>> | undefined; + paddingBottom?: import("styled-system").ResponsiveValue>> | undefined; + pl?: import("styled-system").ResponsiveValue>> | undefined; + paddingLeft?: import("styled-system").ResponsiveValue>> | undefined; + px?: import("styled-system").ResponsiveValue>> | undefined; + paddingX?: import("styled-system").ResponsiveValue>> | undefined; + py?: import("styled-system").ResponsiveValue>> | undefined; + paddingY?: import("styled-system").ResponsiveValue>> | undefined; + minWidth?: import("styled-system").ResponsiveValue, Required>> | undefined; + minHeight?: import("styled-system").ResponsiveValue, Required>> | undefined; + maxWidth?: import("styled-system").ResponsiveValue, Required>> | undefined; + maxHeight?: import("styled-system").ResponsiveValue, Required>> | undefined; + verticalAlign?: import("styled-system").ResponsiveValue, Required>> | undefined; + overflowX?: import("styled-system").ResponsiveValue>> | undefined; + overflowY?: import("styled-system").ResponsiveValue>> | undefined; + lineHeight?: import("styled-system").ResponsiveValue>> | undefined; + textAlign?: import("styled-system").ResponsiveValue>> | undefined; + bg?: import("styled-system").ResponsiveValue>> | undefined; + backgroundColor?: import("styled-system").ResponsiveValue>> | undefined; + alignItems?: import("styled-system").ResponsiveValue>> | undefined; + alignContent?: import("styled-system").ResponsiveValue>> | undefined; + justifyItems?: import("styled-system").ResponsiveValue>> | undefined; + justifyContent?: import("styled-system").ResponsiveValue>> | undefined; + flexWrap?: import("styled-system").ResponsiveValue>> | undefined; + flexDirection?: import("styled-system").ResponsiveValue>> | undefined; + flexGrow?: import("styled-system").ResponsiveValue>> | undefined; + flexShrink?: import("styled-system").ResponsiveValue>> | undefined; + flexBasis?: import("styled-system").ResponsiveValue, Required>> | undefined; + justifySelf?: import("styled-system").ResponsiveValue>> | undefined; + alignSelf?: import("styled-system").ResponsiveValue>> | undefined; + sx?: import("rebass").SxStyleProp | undefined; +}) => JSX.Element, import("styled-components").DefaultTheme, {}, never>; +export declare const ResponsiveTooltipContainer: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, { + origin?: string | undefined; + width?: string | undefined; +}, never>; +export declare const StyledTradePrice: import("styled-components").StyledComponent; diff --git a/dist2/types/components/vote/DelegateModal.d.ts b/dist2/types/components/vote/DelegateModal.d.ts new file mode 100644 index 00000000000..1a70e9d5429 --- /dev/null +++ b/dist2/types/components/vote/DelegateModal.d.ts @@ -0,0 +1,8 @@ +import { ReactNode } from 'react'; +interface VoteModalProps { + isOpen: boolean; + onDismiss: () => void; + title: ReactNode; +} +export default function DelegateModal({ isOpen, onDismiss, title }: VoteModalProps): JSX.Element; +export {}; diff --git a/dist2/types/components/vote/ProposalEmptyState.d.ts b/dist2/types/components/vote/ProposalEmptyState.d.ts new file mode 100644 index 00000000000..e84de5b1d9f --- /dev/null +++ b/dist2/types/components/vote/ProposalEmptyState.d.ts @@ -0,0 +1,2 @@ +/// +export default function ProposalEmptyState(): JSX.Element; diff --git a/dist2/types/components/vote/VoteModal.d.ts b/dist2/types/components/vote/VoteModal.d.ts new file mode 100644 index 00000000000..57e96ee093c --- /dev/null +++ b/dist2/types/components/vote/VoteModal.d.ts @@ -0,0 +1,10 @@ +/// +import { VoteOption } from '../../state/governance/types'; +interface VoteModalProps { + isOpen: boolean; + onDismiss: () => void; + voteOption: VoteOption | undefined; + proposalId: string | undefined; +} +export default function VoteModal({ isOpen, onDismiss, proposalId, voteOption }: VoteModalProps): JSX.Element; +export {}; diff --git a/dist2/types/connectors/Fortmatic.d.ts b/dist2/types/connectors/Fortmatic.d.ts new file mode 100644 index 00000000000..9e4468c90fc --- /dev/null +++ b/dist2/types/connectors/Fortmatic.d.ts @@ -0,0 +1,9 @@ +import { FortmaticConnector as FortmaticConnectorCore } from '@web3-react/fortmatic-connector'; +export declare const OVERLAY_READY = "OVERLAY_READY"; +export declare class FortmaticConnector extends FortmaticConnectorCore { + activate(): Promise<{ + provider: any; + chainId: any; + account: any; + }>; +} diff --git a/dist2/types/connectors/NetworkConnector.d.ts b/dist2/types/connectors/NetworkConnector.d.ts new file mode 100644 index 00000000000..c2f33f60cf9 --- /dev/null +++ b/dist2/types/connectors/NetworkConnector.d.ts @@ -0,0 +1,56 @@ +import { AbstractConnector } from '@web3-react/abstract-connector'; +import { ConnectorUpdate } from '@web3-react/types'; +interface NetworkConnectorArguments { + urls: { + [chainId: number]: string; + }; + defaultChainId?: number; +} +declare type AsyncSendable = { + isMetaMask?: boolean; + host?: string; + path?: string; + sendAsync?: (request: any, callback: (error: any, response: any) => void) => void; + send?: (request: any, callback: (error: any, response: any) => void) => void; +}; +declare class MiniRpcProvider implements AsyncSendable { + readonly isMetaMask: false; + readonly chainId: number; + readonly url: string; + readonly host: string; + readonly path: string; + readonly batchWaitTimeMs: number; + private readonly connector; + private nextId; + private batchTimeoutId; + private batch; + constructor(connector: NetworkConnector, chainId: number, url: string, batchWaitTimeMs?: number); + readonly clearBatch: () => Promise; + readonly sendAsync: (request: { + jsonrpc: '2.0'; + id: number | string | null; + method: string; + params?: unknown[] | Record; + }, callback: (error: any, response: any) => void) => void; + readonly request: (method: string | { + method: string; + params: unknown[]; + }, params?: unknown[] | Record | undefined) => Promise; +} +export declare class NetworkConnector extends AbstractConnector { + private readonly providers; + private currentChainId; + constructor({ urls, defaultChainId }: NetworkConnectorArguments); + get provider(): MiniRpcProvider; + activate(): Promise; + getProvider(): Promise; + getChainId(): Promise; + getAccount(): Promise; + deactivate(): void; + /** + * Meant to be called only by MiniRpcProvider + * @param chainId the new chain id + */ + changeChainId(chainId: number): void; +} +export {}; diff --git a/dist2/types/connectors/index.d.ts b/dist2/types/connectors/index.d.ts new file mode 100644 index 00000000000..f97333f9ef6 --- /dev/null +++ b/dist2/types/connectors/index.d.ts @@ -0,0 +1,16 @@ +import { Web3Provider } from '@ethersproject/providers'; +import { SafeAppConnector } from '@gnosis.pm/safe-apps-web3-react'; +import { InjectedConnector } from '@web3-react/injected-connector'; +import { PortisConnector } from '@web3-react/portis-connector'; +import { WalletConnectConnector } from '@web3-react/walletconnect-connector'; +import { WalletLinkConnector } from '@web3-react/walletlink-connector'; +import { FortmaticConnector } from './Fortmatic'; +import { NetworkConnector } from './NetworkConnector'; +export declare const network: NetworkConnector; +export declare function getNetworkLibrary(): Web3Provider; +export declare const injected: InjectedConnector; +export declare const gnosisSafe: SafeAppConnector; +export declare const walletconnect: WalletConnectConnector; +export declare const fortmatic: FortmaticConnector; +export declare const portis: PortisConnector; +export declare const walletlink: WalletLinkConnector; diff --git a/dist2/types/constants/addresses.d.ts b/dist2/types/constants/addresses.d.ts new file mode 100644 index 00000000000..a79ed50fdfa --- /dev/null +++ b/dist2/types/constants/addresses.d.ts @@ -0,0 +1,32 @@ +declare type AddressMap = { + [chainId: number]: string; +}; +export declare const UNI_ADDRESS: AddressMap; +export declare const MULTICALL_ADDRESS: AddressMap; +export declare const V2_FACTORY_ADDRESSES: AddressMap; +export declare const V2_ROUTER_ADDRESS: AddressMap; +export declare const V3_ROUTER_ADDRESS: AddressMap; +export declare const SWAP_ROUTER_ADDRESSES: AddressMap; +/** + * The oldest V0 governance address + */ +export declare const GOVERNANCE_ALPHA_V0_ADDRESSES: AddressMap; +/** + * The older V1 governance address + */ +export declare const GOVERNANCE_ALPHA_V1_ADDRESSES: AddressMap; +/** + * The latest governor bravo that is currently admin of timelock + */ +export declare const GOVERNANCE_BRAVO_ADDRESSES: AddressMap; +export declare const TIMELOCK_ADDRESS: AddressMap; +export declare const MERKLE_DISTRIBUTOR_ADDRESS: AddressMap; +export declare const ARGENT_WALLET_DETECTOR_ADDRESS: AddressMap; +export declare const V3_CORE_FACTORY_ADDRESSES: AddressMap; +export declare const QUOTER_ADDRESSES: AddressMap; +export declare const NONFUNGIBLE_POSITION_MANAGER_ADDRESSES: AddressMap; +export declare const ENS_REGISTRAR_ADDRESSES: AddressMap; +export declare const SOCKS_CONTROLLER_ADDRESSES: AddressMap; +export declare const V3_MIGRATOR_ADDRESSES: AddressMap; +export declare const TICK_LENS_ADDRESSES: AddressMap; +export {}; diff --git a/dist2/types/constants/chainInfo.d.ts b/dist2/types/constants/chainInfo.d.ts new file mode 100644 index 00000000000..5b4a2d151a9 --- /dev/null +++ b/dist2/types/constants/chainInfo.d.ts @@ -0,0 +1,52 @@ +import { SupportedChainId, SupportedL1ChainId, SupportedL2ChainId } from './chains'; +/** + * These are the network URLs used by the interface when there is not another available source of chain data + */ +export declare const INFURA_NETWORK_URLS: { + [key in SupportedChainId]: string; +}; +/** + * This is used to call the add network RPC + */ +interface AddNetworkInfo { + readonly rpcUrl: string; + readonly nativeCurrency: { + name: string; + symbol: string; + decimals: number; + }; +} +export declare enum NetworkType { + L1 = 0, + L2 = 1 +} +interface BaseChainInfo { + readonly networkType: NetworkType; + readonly blockWaitMsBeforeWarning?: number; + readonly docs: string; + readonly bridge?: string; + readonly explorer: string; + readonly infoLink: string; + readonly logoUrl: string; + readonly label: string; + readonly helpCenterUrl?: string; + readonly addNetworkInfo: AddNetworkInfo; +} +export interface L1ChainInfo extends BaseChainInfo { + readonly networkType: NetworkType.L1; +} +export interface L2ChainInfo extends BaseChainInfo { + readonly networkType: NetworkType.L2; + readonly bridge: string; + readonly statusPage?: string; + readonly defaultListUrl: string; +} +export declare type ChainInfoMap = { + readonly [chainId: number]: L1ChainInfo | L2ChainInfo; +} & { + readonly [chainId in SupportedL2ChainId]: L2ChainInfo; +} & { + readonly [chainId in SupportedL1ChainId]: L1ChainInfo; +}; +export declare const CHAIN_INFO: ChainInfoMap; +export {}; diff --git a/dist2/types/constants/chains.d.ts b/dist2/types/constants/chains.d.ts new file mode 100644 index 00000000000..3552bc970bd --- /dev/null +++ b/dist2/types/constants/chains.d.ts @@ -0,0 +1,45 @@ +/** + * List of all the networks supported by the Uniswap Interface + */ +export declare enum SupportedChainId { + MAINNET = 1, + ROPSTEN = 3, + RINKEBY = 4, + GOERLI = 5, + KOVAN = 42, + ARBITRUM_ONE = 42161, + ARBITRUM_RINKEBY = 421611, + OPTIMISM = 10, + OPTIMISTIC_KOVAN = 69, + POLYGON = 137, + POLYGON_MUMBAI = 80001 +} +export declare const CHAIN_IDS_TO_NAMES: { + 1: string; + 3: string; + 4: string; + 5: string; + 42: string; + 137: string; + 80001: string; + 42161: string; + 421611: string; + 10: string; + 69: string; +}; +/** + * Array of all the supported chain IDs + */ +export declare const ALL_SUPPORTED_CHAIN_IDS: SupportedChainId[]; +export declare const SUPPORTED_GAS_ESTIMATE_CHAIN_IDS: SupportedChainId[]; +/** + * All the chain IDs that are running the Ethereum protocol. + */ +export declare const L1_CHAIN_IDS: readonly [SupportedChainId.MAINNET, SupportedChainId.ROPSTEN, SupportedChainId.RINKEBY, SupportedChainId.GOERLI, SupportedChainId.KOVAN, SupportedChainId.POLYGON, SupportedChainId.POLYGON_MUMBAI]; +export declare type SupportedL1ChainId = typeof L1_CHAIN_IDS[number]; +/** + * Controls some L2 specific behavior, e.g. slippage tolerance, special UI behavior. + * The expectation is that all of these networks have immediate transaction confirmation. + */ +export declare const L2_CHAIN_IDS: readonly [SupportedChainId.ARBITRUM_ONE, SupportedChainId.ARBITRUM_RINKEBY, SupportedChainId.OPTIMISM, SupportedChainId.OPTIMISTIC_KOVAN]; +export declare type SupportedL2ChainId = typeof L2_CHAIN_IDS[number]; diff --git a/dist2/types/constants/governance.d.ts b/dist2/types/constants/governance.d.ts new file mode 100644 index 00000000000..e644180e38f --- /dev/null +++ b/dist2/types/constants/governance.d.ts @@ -0,0 +1,7 @@ +export declare const COMMON_CONTRACT_NAMES: Record; +export declare const DEFAULT_AVERAGE_BLOCK_TIME_IN_SECS = 13; +export declare const AVERAGE_BLOCK_TIME_IN_SECS: { + [chainId: number]: number; +}; diff --git a/dist2/types/constants/lists.d.ts b/dist2/types/constants/lists.d.ts new file mode 100644 index 00000000000..acccc739c3e --- /dev/null +++ b/dist2/types/constants/lists.d.ts @@ -0,0 +1,5 @@ +export declare const ARBITRUM_LIST = "https://bridge.arbitrum.io/token-list-42161.json"; +export declare const OPTIMISM_LIST = "https://static.optimism.io/optimism.tokenlist.json"; +export declare const UNSUPPORTED_LIST_URLS: string[]; +export declare const DEFAULT_LIST_OF_LISTS: string[]; +export declare const DEFAULT_ACTIVE_LIST_URLS: string[]; diff --git a/dist2/types/constants/locales.d.ts b/dist2/types/constants/locales.d.ts new file mode 100644 index 00000000000..511e5591a79 --- /dev/null +++ b/dist2/types/constants/locales.d.ts @@ -0,0 +1,601 @@ +export declare const SUPPORTED_LOCALES: readonly ["en-US", "af-ZA", "ar-SA", "ca-ES", "cs-CZ", "da-DK", "de-DE", "el-GR", "es-ES", "fi-FI", "fr-FR", "he-IL", "hu-HU", "id-ID", "it-IT", "ja-JP", "ko-KR", "nl-NL", "no-NO", "pl-PL", "pt-BR", "pt-PT", "ro-RO", "ru-RU", "sr-SP", "sv-SE", "sw-TZ", "tr-TR", "uk-UA", "vi-VN", "zh-CN", "zh-TW"]; +export declare type SupportedLocale = typeof SUPPORTED_LOCALES[number] | 'pseudo'; +export declare const DEFAULT_LOCALE: SupportedLocale; +export declare const DEFAULT_CATALOG: { + messages: { + "$-": string; + "$<0/>": string; + "${0}": (string | string[])[]; + "(${0})": (string | string[])[]; + "(View on Explorer)": string; + "(clear all)": string; + "(edit)": string; + "- Remove recipient": string; + "0 UNI / week": string; + "25%": string; + "50%": string; + "75%": string; + "<0/> All Proposals": string; + "<0/> Votes": string; + "<0>Account analytics and accrued fees<1> \u2197 ": string; + "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; + "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; + "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; + "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; + "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; + "<0>Unlock voting to prepare for the next proposal.": string; + "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; + "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; + About: string; + Accept: string; + Account: string; + Active: string; + Add: string; + "Add <0/> and <1/> to Uniswap V2": string; + "Add Delegate +": string; + "Add Liquidity": string; + "Add V2 Liquidity": string; + "Add liquidity.": string; + "Add more liquidity": string; + "Add {0} to Metamask <0/>": (string | string[])[]; + "Add {0}-{1} liquidity": (string | string[])[]; + "Add {0}/{1} V3 liquidity": (string | string[])[]; + "Added {0}": (string | string[])[]; + "Address has no available claim": string; + Against: string; + "Allow LP token migration": string; + "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; + "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; + Allowed: string; + Amount: string; + "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Approval pending <0/>": string; + Approve: string; + "Approve Token": string; + "Approve {0}": (string | string[])[]; + "Approve {0} first": (string | string[])[]; + Approved: string; + Approving: string; + "Approving {0}": (string | string[])[]; + Arbiscan: string; + "Arbitrum Bridge": string; + "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Are you sure?": string; + "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; + "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; + Auto: string; + "Auto Router API": string; + "Available to deposit: {0}": (string | string[])[]; + "Balance: {0}": (string | string[])[]; + "Best for exotic pairs.": string; + "Best for most pairs.": string; + "Best for stable pairs.": string; + "Best for very stable pairs.": string; + "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; + "Blocked address": string; + Bridge: string; + "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; + "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; + Canceled: string; + Change: string; + Charts: string; + "Check network status": string; + "Check out our v3 LP walkthrough and migration guides.": string; + Claim: string; + "Claim <0/> for {0}": (string | string[])[]; + "Claim UNI": string; + "Claim UNI Token": string; + "Claim UNI reward for {0}": (string | string[])[]; + "Claim fees": string; + "Claim your UNI tokens": string; + Claimed: string; + "Claimed UNI!": string; + "Claimed!": string; + Claiming: string; + "Claiming UNI": string; + "Claiming {0} UNI": (string | string[])[]; + "Clear All": string; + "Clear all": string; + Close: string; + Closed: string; + Collect: string; + "Collect as WETH": string; + "Collect fees": string; + "Collect {0}/{1} fees": (string | string[])[]; + Collected: string; + Collecting: string; + "Collecting fees": string; + "Collecting fees will withdraw currently available fees for you.": string; + Confirm: string; + "Confirm Supply": string; + "Confirm Swap": string; + "Confirm swap": string; + "Confirm this transaction in your wallet": string; + "Confirm transaction in wallet": string; + "Connect Wallet": string; + "Connect a wallet": string; + "Connect to a wallet to find pools": string; + "Connect to a wallet to view your V2 liquidity.": string; + "Connect to a wallet to view your liquidity.": string; + "Connect wallet to swap": string; + "Connected with {name}": (string | string[])[]; + Copied: string; + "Copy Address": string; + "Create Pool & Supply": string; + "Create Proposal": string; + "Create a pair": string; + "Create a pool": string; + "Create an issue on GitHub": string; + "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; + "Create pool.": string; + "Create {0}/{1} V3 pool": (string | string[])[]; + "Current price": string; + "Current {0} Price:": (string | string[])[]; + Custom: string; + "Dark Theme": string; + Defeated: string; + "Delegate Votes": string; + "Delegate voting power to {0}": (string | string[])[]; + "Delegated to:": string; + "Delegating votes": string; + Deposit: string; + "Deposit Amounts": string; + "Deposit UNI-V2 LP Tokens": string; + "Deposit liquidity": string; + "Deposit tokens to the {label} network.": (string | string[])[]; + "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; + "Deposited liquidity:": string; + "Deposited {0} UNI-V2": (string | string[])[]; + "Depositing Liquidity": string; + Description: string; + Detailed: string; + Details: string; + Disconnect: string; + Discord: string; + Dismiss: string; + Docs: string; + "Don\u2019t see one of your v2 positions? <0>Import it.": string; + "Earned UNI tokens represent voting shares in Uniswap governance.": string; + Edit: string; + "Efficiency Comparison": string; + "Enter a percent": string; + "Enter a recipient": string; + "Enter a valid slippage percentage": string; + "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; + "Enter an amount": string; + "Enter valid list location": string; + "Enter valid token address": string; + "Enter {0} amount": (string | string[])[]; + Error: string; + "Error connecting": string; + "Error connecting. Try refreshing the page.": string; + "Error details": string; + "Error importing list": string; + "Estimate may differ due to your wallet gas settings": string; + "Estimated network fee": string; + Etherscan: string; + Executed: string; + "Expanded results from inactive Token Lists": string; + "Expected Output": string; + "Expert Mode": string; + "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; + Expired: string; + "Explore Uniswap Analytics.": string; + "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; + "Fee Tier": string; + "Fee tier": string; + "Fetching best price...": string; + "Fetching best price\u2026": string; + For: string; + "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; + From: string; + "From (at most)": string; + "Full Range": string; + "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; + "Get support on Discord": string; + "Help Center": string; + Hide: string; + "Hide closed positions": string; + "High Price Impact": string; + "How this app uses APIs": string; + "I understand": string; + "If you purchase a token from this list, you may not be able to sell it back.": string; + Import: string; + "Import List": string; + "Import Pool": string; + "Import V2 Pool": string; + "Import at your own risk": string; + "In range": string; + "Increase Liquidity": string; + "Initial prices and pool share": string; + "Initializing...": string; + "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Install Metamask": string; + "Insufficient liquidity for this trade.": string; + "Insufficient {0}": (string | string[])[]; + "Insufficient {0} balance": (string | string[])[]; + "Interface Settings": string; + "Invalid pair": string; + "Invalid pair.": string; + "Invalid price input": string; + "Invalid range selected. The min price must be lower than the max price.": string; + "Invalid recipient": string; + Language: string; + Learn: string; + "Learn about providing liquidity": string; + "Learn more": string; + "Legal & Privacy": string; + "Light Theme": string; + Liquidity: string; + "Liquidity data not available.": string; + "Liquidity provider rewards": string; + "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + Lists: string; + Loaded: string; + Loading: string; + MAX: string; + Manage: string; + "Manage Liquidity in Rewards Pool": string; + "Manage Token Lists": string; + "Manage this pool.": string; + Max: string; + "Max Price": string; + "Max price": string; + "Max slippage": string; + "Max:": string; + "Maximum sent": string; + Menu: string; + Migrate: string; + "Migrate Liquidity to V3": string; + "Migrate V2 Liquidity": string; + "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; + "Migrate {0}/{1} liquidity to V3": (string | string[])[]; + Migrating: string; + "Min Price": string; + "Min price": string; + "Min:": string; + "Minimum received": string; + "Missing dependencies": string; + "Mock Toggle": string; + More: string; + "Network Fee": string; + "Network Warning": string; + "Network fees exceed 50% of the swap amount!": string; + "New Position": string; + "No V2 Liquidity found.": string; + "No active pools": string; + "No data": string; + "No description.": string; + "No liquidity found.": string; + "No pool found.": string; + "No proposals found.": string; + "No results found.": string; + "Not created": string; + OFF: string; + ON: string; + "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; + Off: string; + On: string; + "Once you are happy with the rate click supply to review.": string; + "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; + "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; + "Optimism Gateway": string; + "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Optimistic Etherscan": string; + "Out of range": string; + "Output is estimated.": string; + "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; + "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Output will be sent to <0>{0}": (string | string[])[]; + Owner: string; + "Participating pools": string; + Pending: string; + "Please confirm you would like to remove this list by typing REMOVE": string; + "Please connect to Layer 1 Ethereum": string; + "Please connect to a supported network in the dropdown menu or in your wallet.": string; + "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; + "Polygon Bridge": string; + Polygonscan: string; + Pool: string; + "Pool Found!": string; + "Pool Rate": string; + "Pool rate": string; + "Pool tokens in rewards pool:": string; + "Pooled {0}:": (string | string[])[]; + "Pools Overview": string; + Preview: string; + Price: string; + "Price Difference:": string; + "Price Impact": string; + "Price Impact Too High": string; + "Price Updated": string; + "Price impact": string; + "Price range": string; + "Price updated": string; + "Price:": string; + "Prices and pool share": string; + Proposal: string; + "Proposal Submitted": string; + "Proposal Title": string; + Proposals: string; + "Proposals submitted by community members will appear here.": string; + "Proposed Action": string; + Proposer: string; + "Protocol Disclaimer": string; + Queued: string; + Rates: string; + "Read more about UNI": string; + "Read more about Uniswap governance": string; + "Read more about providing liquidity": string; + "Read more about unsupported assets": string; + "Recent Transactions": string; + "Recent transactions": string; + Recipient: string; + "Reload the page": string; + Remove: string; + "Remove <0/> and <1/>": string; + "Remove Amount": string; + "Remove Delegate": string; + "Remove Liquidity": string; + "Remove list": string; + "Removing {0} {1} and {2} {3}": (string | string[])[]; + "Removing {0} {1} and{2} {3}": (string | string[])[]; + "Request Features": string; + Reset: string; + Return: string; + "Review swap": string; + "Search by token name or address": string; + "Search name or paste address": string; + "Select Pair": string; + "Select a network": string; + "Select a token": string; + "Select a token to find your v2 liquidity.": string; + "Select an action": string; + "Selected Range": string; + Self: string; + "Self Delegate": string; + "Set Price Range": string; + "Set Starting Price": string; + Settings: string; + "Share of Pool": string; + "Share of Pool:": string; + "Show Portis": string; + "Show closed positions": string; + Simple: string; + "Slippage tolerance": string; + "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; + "Something went wrong": string; + "Something went wrong.": string; + "Step 1. Get UNI-V2 Liquidity tokens": string; + "Submit new proposal": string; + "Submitting Proposal": string; + "Submitting Vote": string; + Succeeded: string; + Success: string; + Supply: string; + "Supplying {0} {1} and {2} {3}": (string | string[])[]; + Swap: string; + "Swap <0/> for exactly <1/>": string; + "Swap Anyway": string; + "Swap details": string; + "Swap exactly <0/> for <1/>": string; + "Swap failed: {0}": (string | string[])[]; + "Swap summary": string; + "Swapping {0} {1} for {2} {3}": (string | string[])[]; + "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; + "Tell us what you think \u2197": string; + "Thanks for being part of the Uniswap community <0/>": string; + "The % you will earn in fees.": string; + "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; + "The app fetches blockchain data from The Graph\u2019s hosted service.": string; + "The app fetches on-chain data and constructs contract calls with an Infura API.": string; + "The app fetches the optimal trade route from a Uniswap Labs server.": string; + "The app logs anonymized usage statistics in order to improve over time.": string; + "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; + "The cost of sending this transaction is more than half of the value of the input amount.": string; + "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; + "The estimated difference between the USD values of input and output amounts.": string; + "The input token cannot be transferred. There may be an issue with the input token.": string; + "The market price is outside your specified price range. Single-asset deposit only.": string; + "The most recent block number on this network. Prices update on every block.": string; + "The output token cannot be transferred. There may be an issue with the output token.": string; + "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; + "The price of this pool is within your selected range. Your position is currently earning fees.": string; + "The ratio of tokens you add will set the price of this pool.": string; + "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; + "There is no liquidity data.": string; + "This app uses the following third-party APIs:": string; + "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; + "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; + "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; + "This token is not supported in the Uniswap Labs app": string; + "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; + "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; + "Tip: Custom tokens are stored locally in your browser": string; + To: string; + "To (at least)": string; + "Token not supported": string; + Tokens: string; + "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; + "Top pools": string; + "Total deposited": string; + "Total deposits": string; + "Trade Route": string; + Trading: string; + "Transaction Settings": string; + "Transaction Submitted": string; + "Transaction completed in": string; + "Transaction deadline": string; + "Transaction pending": string; + "Transaction rejected.": string; + "Transaction submitted": string; + "Transfer Token": string; + "Try Again": string; + "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Turn On Expert Mode": string; + "UNI has arrived": string; + "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; + "UNI {0}/{1} Burned": (string | string[])[]; + "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; + "UNI-V2 {0}-{1}": (string | string[])[]; + "Unclaimed UNI": string; + "Unclaimed fees": string; + Undetermined: string; + "Unexpected error. Could not estimate gas for the swap.": string; + "Unexpected issue with estimating the gas. Please try again.": string; + "Uniswap Governance": string; + "Uniswap Labs' Terms of Service": string; + "Uniswap available in: <0>{0}": (string | string[])[]; + "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; + "Uniswap liquidity mining": string; + "Uniswap migration contract\u2197": string; + "Unknown Source": string; + "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; + "Unlock Votes": string; + "Unlock Voting": string; + "Unlocking Votes": string; + "Unsupported Asset": string; + "Unsupported Assets": string; + "Unsupported network\u2013switch to another to trade.": string; + Untitled: string; + Unwrap: string; + "Unwrap <0/> to {0}": (string | string[])[]; + "Update Delegation": string; + "Update list": string; + "Use the Uniswap Labs API to get faster quotes.": string; + User: string; + "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; + "V2 liquidity": string; + "V3 {0} Price:": (string | string[])[]; + "View accrued fees and analytics<0>\u2197": string; + "View list": string; + "View on Etherscan": string; + "View on Explorer": string; + "View transaction on Explorer": string; + Vote: string; + "Vote Against": string; + "Vote For": string; + "Vote against proposal {proposalId}": (string | string[])[]; + "Vote against proposal {proposalKey}": (string | string[])[]; + "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote for proposal {proposalId}": (string | string[])[]; + "Vote for proposal {proposalKey}": (string | string[])[]; + "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote to abstain on proposal {proposalId}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Voting ended {0}": (string | string[])[]; + "Voting ends approximately {0}": (string | string[])[]; + "Voting starts approximately {0}": (string | string[])[]; + "Waiting For Confirmation": string; + "Wallet Address or ENS name": string; + "Weekly Rewards": string; + "Welcome to team Unicorn :)": string; + "When you claim without withdrawing your liquidity remains in the mining pool.": string; + "When you withdraw, the contract will automagically claim UNI on your behalf!": string; + "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; + Withdraw: string; + "Withdraw & Claim": string; + "Withdraw deposited liquidity": string; + "Withdrawing {0} UNI-V2": (string | string[])[]; + "Withdrew UNI-V2!": string; + Wrap: string; + "Wrap <0/> to {0}": (string | string[])[]; + "Wrong Network": string; + "You already have an active or pending proposal": string; + "You are creating a pool": string; + "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; + "You are the first liquidity provider.": string; + "You can either vote on each proposal yourself or delegate your votes to a third party.": string; + "You can now trade {0}": (string | string[])[]; + "You don't have enough votes to submit a proposal": string; + "You don\u2019t have liquidity in this pool yet.": string; + "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; + "You may have lost your network connection.": string; + "You might consider waiting until the network fees go down to complete this transaction.": string; + "You must connect an account.": string; + "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; + "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; + "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; + "You will also collect fees earned from this position.": string; + "You will receive": string; + "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; + "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; + "Your V2 liquidity": string; + "Your active V3 liquidity positions will appear here.": string; + "Your liquidity deposits": string; + "Your pool share:": string; + "Your position": string; + "Your position has 0 liquidity, and is not earning fees.": string; + "Your position will appear here.": string; + "Your position will be 100% composed of {0} at this price": (string | string[])[]; + "Your position will be 100% {0} at this price.": (string | string[])[]; + "Your position will not earn fees or be used in trades until the market price moves into your range.": string; + "Your positions": string; + "Your rate": string; + "Your total pool tokens:": string; + "Your transaction cost will be much higher as it includes the gas to create the pool.": string; + "Your transaction may be frontrun": string; + "Your transaction may fail": string; + "Your transaction will revert if it has been pending for longer than this period of time.": string; + "Your transaction will revert if it is pending for more than this period of time.": string; + "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; + "Your transactions will appear here...": string; + "Your unclaimed UNI": string; + "after slippage": string; + confirm: string; + "for {0}": (string | string[])[]; + gwei: string; + "has socks emoji": string; + "here.": string; + "https:// or ipfs:// or ENS name": string; + minutes: string; + "via {0}": (string | string[])[]; + "via {0} token list": (string | string[])[]; + "{0, plural, one {Import token} other {Import tokens}}": (string | { + one: string; + other: string; + })[][]; + "{0}": string[][]; + "{0} %": (string | string[])[]; + "{0} <0/> per <1/>": (string | string[])[]; + "{0} Custom Tokens": (string | string[])[]; + "{0} Deposited": (string | string[])[]; + "{0} ETH": (string | string[])[]; + "{0} Fees Earned:": (string | string[])[]; + "{0} Pending": (string | string[])[]; + "{0} UNI": (string | string[])[]; + "{0} UNI / week": (string | string[])[]; + "{0} UNI-V2": (string | string[])[]; + "{0} UNI-V2 LP tokens available": (string | string[])[]; + "{0} Votes": (string | string[])[]; + "{0} per {1}": (string | string[])[]; + "{0} tokens": (string | string[])[]; + "{0} {1} Price:": (string | string[])[]; + "{0} {nativeCurrencySymbol}": (string | string[])[]; + "{0} \u2022 Added by user": (string | string[])[]; + "{0}%": (string | string[])[]; + "{0}% fee tier": (string | string[])[]; + "{0}% pool": (string | string[])[]; + "{0}% select": (string | string[])[]; + "{0}-{1} Liquidity Mining": (string | string[])[]; + "{0}/{1} LP NFT": (string | string[])[]; + "{0}/{1} LP Tokens": (string | string[])[]; + "{SOCKS_AMOUNT} UNI": (string | string[])[]; + "{USER_AMOUNT} UNI": (string | string[])[]; + "{activeTokensOnThisChain} tokens": (string | string[])[]; + "{integrator} fee": (string | string[])[]; + "{label} token bridge": (string | string[])[]; + "{min}m {sec}s": (string | string[])[]; + "{percentForSlider}%": (string | string[])[]; + "{sec}s": (string | string[])[]; + "{tokenB} per {tokenA}": (string | string[])[]; + "\u2190 Back to Pools Overview": string; + }; +}; +export declare const LOCALE_LABEL: { + [locale in SupportedLocale]: string; +}; diff --git a/dist2/types/constants/misc.d.ts b/dist2/types/constants/misc.d.ts new file mode 100644 index 00000000000..099f63ecbd1 --- /dev/null +++ b/dist2/types/constants/misc.d.ts @@ -0,0 +1,21 @@ +import { Percent } from '@uniswap/sdk-core'; +import JSBI from 'jsbi'; +export declare const ZERO_ADDRESS = "0x0000000000000000000000000000000000000000"; +export declare const NetworkContextName = "NETWORK"; +export declare const IS_IN_IFRAME: boolean; +export declare const DEFAULT_DEADLINE_FROM_NOW: number; +export declare const L2_DEADLINE_FROM_NOW: number; +export declare const DEFAULT_TXN_DISMISS_MS = 25000; +export declare const L2_TXN_DISMISS_MS = 5000; +export declare const BIG_INT_SECONDS_IN_WEEK: JSBI; +export declare const BIG_INT_ZERO: JSBI; +export declare const ONE_BIPS: Percent; +export declare const ALLOWED_PRICE_IMPACT_LOW: Percent; +export declare const ALLOWED_PRICE_IMPACT_MEDIUM: Percent; +export declare const ALLOWED_PRICE_IMPACT_HIGH: Percent; +export declare const PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN: Percent; +export declare const BLOCKED_PRICE_IMPACT_NON_EXPERT: Percent; +export declare const BETTER_TRADE_LESS_HOPS_THRESHOLD: Percent; +export declare const ZERO_PERCENT: Percent; +export declare const TWO_PERCENT: Percent; +export declare const ONE_HUNDRED_PERCENT: Percent; diff --git a/dist2/types/constants/proposals/index.d.ts b/dist2/types/constants/proposals/index.d.ts new file mode 100644 index 00000000000..a65a67f9c77 --- /dev/null +++ b/dist2/types/constants/proposals/index.d.ts @@ -0,0 +1,4 @@ +export declare const UNISWAP_GRANTS_START_BLOCK = 11473815; +export declare const BRAVO_START_BLOCK = 13059344; +export declare const ONE_BIP_START_BLOCK = 13551293; +export declare const POLYGON_START_BLOCK = 13786993; diff --git a/dist2/types/constants/proposals/polygon_proposal_title.d.ts b/dist2/types/constants/proposals/polygon_proposal_title.d.ts new file mode 100644 index 00000000000..4de675a3082 --- /dev/null +++ b/dist2/types/constants/proposals/polygon_proposal_title.d.ts @@ -0,0 +1 @@ +export declare const POLYGON_PROPOSAL_TITLE = "Should Uniswap v3 be deployed to Polygon?"; diff --git a/dist2/types/constants/proposals/uniswap_grants_proposal_description.d.ts b/dist2/types/constants/proposals/uniswap_grants_proposal_description.d.ts new file mode 100644 index 00000000000..0ca54d3f337 --- /dev/null +++ b/dist2/types/constants/proposals/uniswap_grants_proposal_description.d.ts @@ -0,0 +1 @@ +export declare const UNISWAP_GRANTS_PROPOSAL_DESCRIPTION = "# Uniswap Grants Program v0.1\n\n*co-authored with [Ken Ng](https://twitter.com/nkennethk?lang=en)*\n\n## Summary:\n\n**This post outlines a framework for funding Uniswap ecosystem development with grants from the[ UNI Community Treasury](https://uniswap.org/blog/uni/).** The program starts small\u2014sponsoring hackathons, [for example](https://gov.uniswap.org/c/proposal-discussion/5)\u2014but could grow in significance over time (with renewals approved by governance) to fund core protocol development. Grants administration is a subjective process that cannot be easily automated, and thus we propose a nimble committee of 6 members \u20141 lead and 5 reviewers\u2014to deliver an efficient, predictable process to applicants, such that funding can be administered without having to put each application to a vote. We propose the program start with an initial cap of $750K per quarter and a limit of 2 quarters before renewal\u2014a sum that we feel is appropriate for an MVP relative to the size of the treasury that UNI token holders are entrusted with allocating.\n\n**Purpose:**\n\n**The mission of the UGP is to provide valuable resources to help grow the Uniswap ecosystem.** Through public discourse and inbound applications, the community will get first-hand exposure to identify and respond to the most pressing needs of the ecosystem, as well as the ability to support innovative projects expanding the capabilities of Uniswap. By rewarding talent early with developer incentives, bounties, and infrastructure support, UGP acts as a catalyst for growth and helps to maintain Uniswap as a nexus for DeFi on Ethereum.\n\n**Quarterly Budget:**\n\n* Max quarterly budget of up to $750k\n* Budget and caps to be assessed every six months\n\n**Grant Allocation Committee:**\n\n* Of 6 committee members: 1 lead and 5 reviewers\n* Each committee has a term of 2 quarters (6 months) after which the program needs to be renewed by UNI governance\n* Committee functions as a 4 of 5 multi-sig\n\n**Committee Members**\n\nWhile the goals and priorities of the grant program will be thoroughly discussed and reviewed by the community through public discourse, **the decision to start UGP by operating as a small committee is to ensure that the application and decision process will be efficient and predictable, so applicants have clear objectives and timely decisions.**\n\nStarting with just six members enables the committee to efficiently fund projects with tight feedback loops and rapid iterations. The purpose of this committee would be to test the hypothesis that the Grants Program can successfully provide value for the UNI ecosystem before scaling the program.\n\n**We suggest the grants program is administered by a single lead. Here we propose Kenneth Ng, a co-author of this post**. Ken has helped grow the Ethereum Foundation Grants Program over the last two years in establishing high level priorities and adapting for the ecosystems needs.\n\n**The other 5 committee members should be thought of as \u201Creviewers\u201D \u2014 UNI community members who will keep the grants program functional by ensuring Ken is leading effectively and, of course, not absconding with funds.** Part of the reviewers job is to hold the program accountable for success (defined below) and/or return any excess funds to the UNI treasury. Reviewers are not compensated as part of this proposal as we expect their time commitment to be minimal. Compensation for the lead role is discussed below, as we expect this to be a labor intensive role.\n\n**Program Lead:** [Ken Ng](https://twitter.com/nkennethk?lang=en) (HL Creative Corp)\n*Ecosystem Support Program at the Ethereum Foundation*\n\n1. Reviewer: [Jesse Walden](https://twitter.com/jessewldn) (o/b/o Unofficial LLC dba [Variant Fund](http://twitter.com/variantfund))\n*Founder and Investor at Variant Fund (holds UNI)*\n\n2. Reviewer: [Monet Supply](https://twitter.com/MonetSupply)\n*Risk Analyst at MakerDAO*\n\n3. Reviewer: [Robert Leshner](https://twitter.com/rleshner)\n*Founder and CEO of Compound Finance*\n\n4. Reviewer: [Kain Warwick](https://twitter.com/kaiynne)\n*Founder of Synthetix*\n\n5. Reviewer: [Ashleigh Schap](https://twitter.com/ashleighschap)\n*Growth Lead, Uniswap (Company)*\n\n## Methodology\n\n**1.1 Budget**\n\nThis proposal recommends a max cap of $750K per quarter, with the ability to reevaluate biannually at each epoch (two fiscal quarters). While the UGP Grants Committee will be the decision makers around individual grants, respective budgets, roadmaps, and milestones, any top-level changes to UGP including epochs and max cap, will require full community quorum (4% approval).\n\nThe UGP will be funded by the UNI treasury according to the[ release schedule](https://uniswap.org/blog/uni/) set out by the Uniswap team, whereby 43% of the UNI treasury is released over a four-year timeline. In Year 1 this will total to 172,000,000 UNI (~$344M as of writing).\n\nTaking into consideration the current landscape of ecosystem funding across Ethereum, the community would be hard-pressed to allocate even 5% of Year 1\u2019s treasury. For context Gitcoin CLR Round 7 distributed $725k ($450k in matched) across 857 projects and YTD, Moloch has granted just under $200k but in contrast, the EF has committed to somewhere in the 8 figure range.\n\n**1.2 Committee Compensation**\n\nOperating a successful grants program takes considerable time and effort. Take, for instance, the EF Ecosystem Support Program, which has awarded grants since 2018, consists of an internal team at the Foundation as well as an ever increasing roster of community advisors in order to keep expanding and adapting to best serve the needs of the Ethereum ecosystem. While the structure of the allocation committee has six members, we propose that only the lead will be remunerated for their work in establishing the initial processes, vetting applications, and managing the program overall as this role is expected to be time consuming if the program is to be succesful. We propose that the other committee members be unpaid UNI ecosystem stakeholders who have an interest in seeing the protocol ecosystem continue to operate and grow.\n\n**We propose the lead be compensated 25 UNI/hr (approximately $100 USD at time of this writing) capped at 30 hours/week. This compensation, along with the quarterly budget, will be allocated to the UGP multisig from the UNI treasury**. In keeping with the committee\u2019s commitment to the community, hours and duties will be logged publicly and transparently .\n\n**2.1 Priorities**\n\nInitially, the program aims to start narrow in scope, funding peripheral ecosystem initiatives, such as targeted bounties, hackathon sponsorships, and other low-stakes means of building out the Uniswap developer ecosystem. Over time, if the program proves effective, the grant allocations can grow in scope to include, for example, improved frontends, trading interfaces, and eventually, core protocol development.\n\n![|624x199](upload://vNP0APCOjiwQMurCmYI47cTLklc.png)\n\nWith the initial priorities in mind, some effective measures for quick successes might look like:\n\n* Total number of projects funded\n* Quarterly increase in applications\n* Project engagement post-event/funding\n* Overall community engagement/sentiment\n\n**2.2 Timeline**\n\nIn keeping with the fast pace of the UNI ecosystem, we organize time in epochs, or two calendar quarters. Each epoch will see two funding rounds, one per quarter, after which the community can review and create proposals to improve or revamp the program as they deem fit.\n\n**![|624x245](upload://n56TSh5X3mt4TSqVVMFhbnZM0eM.png)**\n\n**Rolling Wave 1 & 2 Applications**\n\n* Starting in Q1 2021, UGP will start accepting applications for events looking for support in the form of bounties or prizes that in parallel can be proactively sourced. During these first two waves of funding projects, the allocation committee lead can begin laying out guardrails for continued funding\n\n* Considering the immediate feedback loops for the first epoch, we expect these allocation decisions to be discussed and reviewed by the larger community. Should this not be of value, the community can submit a formal governance proposal to change any piece of UGP that was not effective\n\n**Wave 3 & Beyond**\n\n* Beginning with Wave 3, there should have been enough time with impactful projects funded to be considered for follow-on funding, should it make sense. In the same vein, projects within scope will be expanded to also include those working on integrations and and other key components.\n\n* Beyond the second epoch, as the community helps to review and help adapt UGP to be most effective, the scope will continue to grow in order to accommodate the state of the ecosystem including that of core protocol improvements\n\n## Conclusion:\n\n**If this proposal is successfully approved, UGP will start accepting applications on a rolling basis beginning at the start of 2021.** With the phases and priorities laid out above, UGP will aim to make a significant impact by catalyzing growth and innovation in the UNI ecosystem.\n\n**This program is meant to be the simplest possible MVP of a Uniswap Ecosystem Grants initiative.** While the multi-sig committee comes with trust assumptions about the members, our hope is the community will approve this limited engagement to get the ball rolling in an efficient structure. **After the first epoch (2 fiscal quarters) the burden of proof will be on UGP to show empirical evidence that the program is worth continuing in its existing form and will submit to governance to renew treasury funding.**\n\nIf this program proves successful, we hope it will inspire others to follow suit and create their own funding committees for allocating treasury capital\u2014ideally with different specializations.\n"; diff --git a/dist2/types/constants/routing.d.ts b/dist2/types/constants/routing.d.ts new file mode 100644 index 00000000000..ae1ef4713a5 --- /dev/null +++ b/dist2/types/constants/routing.d.ts @@ -0,0 +1,31 @@ +import { Currency, Token } from '@uniswap/sdk-core'; +declare type ChainTokenList = { + readonly [chainId: number]: Token[]; +}; +declare type ChainCurrencyList = { + readonly [chainId: number]: Currency[]; +}; +export declare const BASES_TO_CHECK_TRADES_AGAINST: ChainTokenList; +export declare const ADDITIONAL_BASES: { + [chainId: number]: { + [tokenAddress: string]: Token[]; + }; +}; +/** + * Some tokens can only be swapped via certain pairs, so we override the list of bases that are considered for these + * tokens. + */ +export declare const CUSTOM_BASES: { + [chainId: number]: { + [tokenAddress: string]: Token[]; + }; +}; +/** + * Shows up in the currency select for swap and add liquidity + */ +export declare const COMMON_BASES: ChainCurrencyList; +export declare const BASES_TO_TRACK_LIQUIDITY_FOR: ChainTokenList; +export declare const PINNED_PAIRS: { + readonly [chainId: number]: [Token, Token][]; +}; +export {}; diff --git a/dist2/types/constants/tokens.d.ts b/dist2/types/constants/tokens.d.ts new file mode 100644 index 00000000000..005e16d0547 --- /dev/null +++ b/dist2/types/constants/tokens.d.ts @@ -0,0 +1,41 @@ +import { Ether, NativeCurrency, Token } from '@uniswap/sdk-core'; +export declare const AMPL: Token; +export declare const DAI: Token; +export declare const DAI_ARBITRUM_ONE: Token; +export declare const DAI_OPTIMISM: Token; +export declare const USDC: Token; +export declare const USDC_ARBITRUM: Token; +export declare const USDC_POLYGON: Token; +export declare const DAI_POLYGON: Token; +export declare const USDT_POLYGON: Token; +export declare const WBTC_POLYGON: Token; +export declare const USDC_OPTIMISM: Token; +export declare const USDT: Token; +export declare const USDT_ARBITRUM_ONE: Token; +export declare const USDT_OPTIMISM: Token; +export declare const WBTC: Token; +export declare const WBTC_ARBITRUM_ONE: Token; +export declare const WBTC_OPTIMISM: Token; +export declare const FEI: Token; +export declare const TRIBE: Token; +export declare const FRAX: Token; +export declare const FXS: Token; +export declare const renBTC: Token; +export declare const ETH2X_FLI: Token; +export declare const sETH2: Token; +export declare const rETH2: Token; +export declare const SWISE: Token; +export declare const WETH_POLYGON_MUMBAI: Token; +export declare const WETH_POLYGON: Token; +export declare const UNI: { + [chainId: number]: Token; +}; +export declare const WRAPPED_NATIVE_CURRENCY: { + [chainId: number]: Token; +}; +export declare class ExtendedEther extends Ether { + get wrapped(): Token; + private static _cachedExtendedEther; + static onChain(chainId: number): ExtendedEther; +} +export declare function nativeOnChain(chainId: number): NativeCurrency; diff --git a/dist2/types/constants/wallet.d.ts b/dist2/types/constants/wallet.d.ts new file mode 100644 index 00000000000..ef43dbee524 --- /dev/null +++ b/dist2/types/constants/wallet.d.ts @@ -0,0 +1,16 @@ +import { AbstractConnector } from '@web3-react/abstract-connector'; +interface WalletInfo { + connector?: AbstractConnector; + name: string; + iconURL: string; + description: string; + href: string | null; + color: string; + primary?: true; + mobile?: true; + mobileOnly?: true; +} +export declare const SUPPORTED_WALLETS: { + [key: string]: WalletInfo; +}; +export {}; diff --git a/dist2/types/hooks/Tokens.d.ts b/dist2/types/hooks/Tokens.d.ts new file mode 100644 index 00000000000..b113e21f132 --- /dev/null +++ b/dist2/types/hooks/Tokens.d.ts @@ -0,0 +1,13 @@ +import { Currency, Token } from '@uniswap/sdk-core'; +import { WrappedTokenInfo } from '../state/lists/wrappedTokenInfo'; +export declare function useAllTokens(): { + [address: string]: Token; +}; +export declare function useUnsupportedTokens(): { + [address: string]: Token; +}; +export declare function useSearchInactiveTokenLists(search: string | undefined, minResults?: number): WrappedTokenInfo[]; +export declare function useIsTokenActive(token: Token | undefined | null): boolean; +export declare function useIsUserAddedToken(currency: Currency | undefined | null): boolean; +export declare function useToken(tokenAddress?: string | null): Token | null | undefined; +export declare function useCurrency(currencyId?: string | null): Currency | null | undefined; diff --git a/dist2/types/hooks/useActiveLocale.d.ts b/dist2/types/hooks/useActiveLocale.d.ts new file mode 100644 index 00000000000..62f76e10cdb --- /dev/null +++ b/dist2/types/hooks/useActiveLocale.d.ts @@ -0,0 +1,11 @@ +import { SupportedLocale } from 'constants/locales'; +/** + * Returns the supported locale read from the user agent (navigator) + */ +export declare function navigatorLocale(): SupportedLocale | undefined; +export declare const initialLocale: SupportedLocale; +/** + * Returns the currently active locale, from a combination of user agent, query string, and user settings stored in redux + * Stores the query string locale in redux (if set) to persist across sessions + */ +export declare function useActiveLocale(): SupportedLocale; diff --git a/dist2/types/hooks/useActiveWeb3React.d.ts b/dist2/types/hooks/useActiveWeb3React.d.ts new file mode 100644 index 00000000000..29840bb2437 --- /dev/null +++ b/dist2/types/hooks/useActiveWeb3React.d.ts @@ -0,0 +1,9 @@ +import { Web3Provider } from '@ethersproject/providers'; +export default function useActiveWeb3React(): { + connector: import("widgets-web3-react/types").Connector; + library: Web3Provider | undefined; + chainId: number | undefined; + account: string | undefined; + active: boolean; + error: Error | undefined; +} | import("@web3-react/core/dist/types").Web3ReactContextInterface; diff --git a/dist2/types/hooks/useAddTokenToMetamask.d.ts b/dist2/types/hooks/useAddTokenToMetamask.d.ts new file mode 100644 index 00000000000..87626a92dd3 --- /dev/null +++ b/dist2/types/hooks/useAddTokenToMetamask.d.ts @@ -0,0 +1,5 @@ +import { Currency } from '@uniswap/sdk-core'; +export default function useAddTokenToMetamask(currencyToAdd: Currency | undefined): { + addToken: () => void; + success: boolean | undefined; +}; diff --git a/dist2/types/hooks/useAllCurrencyCombinations.d.ts b/dist2/types/hooks/useAllCurrencyCombinations.d.ts new file mode 100644 index 00000000000..173910ec4d6 --- /dev/null +++ b/dist2/types/hooks/useAllCurrencyCombinations.d.ts @@ -0,0 +1,2 @@ +import { Currency, Token } from '@uniswap/sdk-core'; +export declare function useAllCurrencyCombinations(currencyA?: Currency, currencyB?: Currency): [Token, Token][]; diff --git a/dist2/types/hooks/useAllV3Routes.d.ts b/dist2/types/hooks/useAllV3Routes.d.ts new file mode 100644 index 00000000000..7022d3a71ad --- /dev/null +++ b/dist2/types/hooks/useAllV3Routes.d.ts @@ -0,0 +1,11 @@ +import { Currency } from '@uniswap/sdk-core'; +import { Route } from '@uniswap/v3-sdk'; +/** + * Returns all the routes from an input currency to an output currency + * @param currencyIn the input currency + * @param currencyOut the output currency + */ +export declare function useAllV3Routes(currencyIn?: Currency, currencyOut?: Currency): { + loading: boolean; + routes: Route[]; +}; diff --git a/dist2/types/hooks/useApeModeQueryParamReader.d.ts b/dist2/types/hooks/useApeModeQueryParamReader.d.ts new file mode 100644 index 00000000000..7afea7a467d --- /dev/null +++ b/dist2/types/hooks/useApeModeQueryParamReader.d.ts @@ -0,0 +1 @@ +export default function ApeModeQueryParamReader(): null; diff --git a/dist2/types/hooks/useApproveCallback.d.ts b/dist2/types/hooks/useApproveCallback.d.ts new file mode 100644 index 00000000000..a57c9aa45b9 --- /dev/null +++ b/dist2/types/hooks/useApproveCallback.d.ts @@ -0,0 +1,9 @@ +import { Trade } from '@uniswap/router-sdk'; +import { Currency, CurrencyAmount, Percent, TradeType } from '@uniswap/sdk-core'; +import { Trade as V2Trade } from '@uniswap/v2-sdk'; +import { Trade as V3Trade } from '@uniswap/v3-sdk'; +import { ApprovalState } from 'lib/hooks/useApproval'; +export { ApprovalState } from 'lib/hooks/useApproval'; +export declare function useApproveCallback(amountToApprove?: CurrencyAmount, spender?: string): [ApprovalState, () => Promise]; +export declare function useApprovalOptimizedTrade(trade: Trade | undefined, allowedSlippage: Percent): V2Trade | Trade | V3Trade | undefined; +export declare function useApproveCallbackFromTrade(trade: V2Trade | V3Trade | Trade | undefined, allowedSlippage: Percent): [ApprovalState, () => Promise]; diff --git a/dist2/types/hooks/useArgentWalletContract.d.ts b/dist2/types/hooks/useArgentWalletContract.d.ts new file mode 100644 index 00000000000..d33dfc11255 --- /dev/null +++ b/dist2/types/hooks/useArgentWalletContract.d.ts @@ -0,0 +1,2 @@ +import { ArgentWalletContract } from '../abis/types'; +export declare function useArgentWalletContract(): ArgentWalletContract | null; diff --git a/dist2/types/hooks/useAutoRouterSupported.d.ts b/dist2/types/hooks/useAutoRouterSupported.d.ts new file mode 100644 index 00000000000..fdbf0c64fe6 --- /dev/null +++ b/dist2/types/hooks/useAutoRouterSupported.d.ts @@ -0,0 +1 @@ +export default function useAutoRouterSupported(): boolean; diff --git a/dist2/types/hooks/useAutoSlippageTolerance.d.ts b/dist2/types/hooks/useAutoSlippageTolerance.d.ts new file mode 100644 index 00000000000..abb77e38ba3 --- /dev/null +++ b/dist2/types/hooks/useAutoSlippageTolerance.d.ts @@ -0,0 +1,6 @@ +import { Currency, Percent, TradeType } from '@uniswap/sdk-core'; +import { InterfaceTrade } from 'state/routing/types'; +/** + * Returns slippage tolerance based on values from current trade, gas estimates from api, and active network. + */ +export default function useAutoSlippageTolerance(trade: InterfaceTrade | undefined): Percent; diff --git a/dist2/types/hooks/useBestTrade.d.ts b/dist2/types/hooks/useBestTrade.d.ts new file mode 100644 index 00000000000..1fb57b6ee82 --- /dev/null +++ b/dist2/types/hooks/useBestTrade.d.ts @@ -0,0 +1,12 @@ +import { Currency, CurrencyAmount, TradeType } from '@uniswap/sdk-core'; +import { InterfaceTrade, TradeState } from 'state/routing/types'; +/** + * Returns the best v2+v3 trade for a desired swap. + * @param tradeType whether the swap is an exact in/out + * @param amountSpecified the exact amount to swap in/out + * @param otherCurrency the desired output/payment currency + */ +export declare function useBestTrade(tradeType: TradeType, amountSpecified?: CurrencyAmount, otherCurrency?: Currency): { + state: TradeState; + trade: InterfaceTrade | undefined; +}; diff --git a/dist2/types/hooks/useBestV2Trade.d.ts b/dist2/types/hooks/useBestV2Trade.d.ts new file mode 100644 index 00000000000..018e91ff21d --- /dev/null +++ b/dist2/types/hooks/useBestV2Trade.d.ts @@ -0,0 +1,11 @@ +import { Currency, CurrencyAmount, TradeType } from '@uniswap/sdk-core'; +import { Trade } from '@uniswap/v2-sdk'; +/** + * Returns the best v2 trade for a desired swap + * @param tradeType whether the swap is an exact in/out + * @param amountSpecified the exact amount to swap in/out + * @param otherCurrency the desired output/payment currency + */ +export declare function useBestV2Trade(tradeType: TradeType.EXACT_INPUT | TradeType.EXACT_OUTPUT, amountSpecified?: CurrencyAmount, otherCurrency?: Currency, { maxHops }?: { + maxHops?: number | undefined; +}): Trade | null; diff --git a/dist2/types/hooks/useClientSideV3Trade.d.ts b/dist2/types/hooks/useClientSideV3Trade.d.ts new file mode 100644 index 00000000000..4c4d6aacc39 --- /dev/null +++ b/dist2/types/hooks/useClientSideV3Trade.d.ts @@ -0,0 +1,12 @@ +import { Currency, CurrencyAmount, TradeType } from '@uniswap/sdk-core'; +import { InterfaceTrade, TradeState } from 'state/routing/types'; +/** + * Returns the best v3 trade for a desired swap + * @param tradeType whether the swap is an exact in/out + * @param amountSpecified the exact amount to swap in/out + * @param otherCurrency the desired output/payment currency + */ +export declare function useClientSideV3Trade(tradeType: TTradeType, amountSpecified?: CurrencyAmount, otherCurrency?: Currency): { + state: TradeState; + trade: InterfaceTrade | undefined; +}; diff --git a/dist2/types/hooks/useColor.d.ts b/dist2/types/hooks/useColor.d.ts new file mode 100644 index 00000000000..e867661bc76 --- /dev/null +++ b/dist2/types/hooks/useColor.d.ts @@ -0,0 +1,3 @@ +import { Token } from '@uniswap/sdk-core'; +export declare function useColor(token?: Token): string; +export declare function useListColor(listImageUri?: string): string; diff --git a/dist2/types/hooks/useContract.d.ts b/dist2/types/hooks/useContract.d.ts new file mode 100644 index 00000000000..e0bd40cb12f --- /dev/null +++ b/dist2/types/hooks/useContract.d.ts @@ -0,0 +1,30 @@ +import { Contract } from '@ethersproject/contracts'; +import { ArgentWalletDetector, EnsPublicResolver, EnsRegistrar, Erc20, Erc721, Erc1155, Weth } from 'abis/types'; +import { NonfungiblePositionManager, Quoter, TickLens, UniswapInterfaceMulticall } from 'types/v3'; +import { V3Migrator } from 'types/v3/V3Migrator'; +export declare function useContract(addressOrAddressMap: string | { + [chainId: number]: string; +} | undefined, ABI: any, withSignerIfPossible?: boolean): T | null; +export declare function useV2MigratorContract(): V3Migrator | null; +export declare function useTokenContract(tokenAddress?: string, withSignerIfPossible?: boolean): Erc20 | null; +export declare function useWETHContract(withSignerIfPossible?: boolean): Weth | null; +export declare function useERC721Contract(nftAddress?: string): Erc721 | null; +export declare function useERC1155Contract(nftAddress?: string): Erc1155 | null; +export declare function useArgentWalletDetectorContract(): ArgentWalletDetector | null; +export declare function useENSRegistrarContract(withSignerIfPossible?: boolean): EnsRegistrar | null; +export declare function useENSResolverContract(address: string | undefined, withSignerIfPossible?: boolean): EnsPublicResolver | null; +export declare function useBytes32TokenContract(tokenAddress?: string, withSignerIfPossible?: boolean): Contract | null; +export declare function useEIP2612Contract(tokenAddress?: string): Contract | null; +export declare function usePairContract(pairAddress?: string, withSignerIfPossible?: boolean): Contract | null; +export declare function useV2RouterContract(): Contract | null; +export declare function useInterfaceMulticall(): UniswapInterfaceMulticall; +export declare function useMerkleDistributorContract(): Contract | null; +export declare function useGovernanceV0Contract(): Contract | null; +export declare function useGovernanceV1Contract(): Contract | null; +export declare function useGovernanceBravoContract(): Contract | null; +export declare const useLatestGovernanceContract: typeof useGovernanceBravoContract; +export declare function useUniContract(): Contract | null; +export declare function useStakingContract(stakingAddress?: string, withSignerIfPossible?: boolean): Contract | null; +export declare function useV3NFTPositionManagerContract(withSignerIfPossible?: boolean): NonfungiblePositionManager | null; +export declare function useV3Quoter(): Quoter | null; +export declare function useTickLens(): TickLens | null; diff --git a/dist2/types/hooks/useCopyClipboard.d.ts b/dist2/types/hooks/useCopyClipboard.d.ts new file mode 100644 index 00000000000..6360e3d4fd7 --- /dev/null +++ b/dist2/types/hooks/useCopyClipboard.d.ts @@ -0,0 +1 @@ +export default function useCopyClipboard(timeout?: number): [boolean, (toCopy: string) => void]; diff --git a/dist2/types/hooks/useCurrentBlockTimestamp.d.ts b/dist2/types/hooks/useCurrentBlockTimestamp.d.ts new file mode 100644 index 00000000000..ba8a3393eea --- /dev/null +++ b/dist2/types/hooks/useCurrentBlockTimestamp.d.ts @@ -0,0 +1,2 @@ +import { BigNumber } from '@ethersproject/bignumber'; +export default function useCurrentBlockTimestamp(): BigNumber | undefined; diff --git a/dist2/types/hooks/useDebounce.d.ts b/dist2/types/hooks/useDebounce.d.ts new file mode 100644 index 00000000000..8db27679830 --- /dev/null +++ b/dist2/types/hooks/useDebounce.d.ts @@ -0,0 +1,5 @@ +/** + * Debounces updates to a value. + * Non-primitives *must* wrap the value in useMemo, or the value will be updated due to referential inequality. + */ +export default function useDebounce(value: T, delay: number): T; diff --git a/dist2/types/hooks/useDebouncedChangeHandler.d.ts b/dist2/types/hooks/useDebouncedChangeHandler.d.ts new file mode 100644 index 00000000000..83f498fe76b --- /dev/null +++ b/dist2/types/hooks/useDebouncedChangeHandler.d.ts @@ -0,0 +1,7 @@ +/** + * Easy way to debounce the handling of a rapidly changing value, e.g. a changing slider input + * @param value value that is rapidly changing + * @param onChange change handler that should receive the debounced updates to the value + * @param debouncedMs how long we should wait for changes to be applied + */ +export default function useDebouncedChangeHandler(value: T, onChange: (newValue: T) => void, debouncedMs?: number): [T, (value: T) => void]; diff --git a/dist2/types/hooks/useDerivedPositionInfo.d.ts b/dist2/types/hooks/useDerivedPositionInfo.d.ts new file mode 100644 index 00000000000..59b925d76fc --- /dev/null +++ b/dist2/types/hooks/useDerivedPositionInfo.d.ts @@ -0,0 +1,6 @@ +import { Pool, Position } from '@uniswap/v3-sdk'; +import { PositionDetails } from 'types/position'; +export declare function useDerivedPositionInfo(positionDetails: PositionDetails | undefined): { + position: Position | undefined; + pool: Pool | undefined; +}; diff --git a/dist2/types/hooks/useENS.d.ts b/dist2/types/hooks/useENS.d.ts new file mode 100644 index 00000000000..9b44be51bff --- /dev/null +++ b/dist2/types/hooks/useENS.d.ts @@ -0,0 +1,9 @@ +/** + * Given a name or address, does a lookup to resolve to an address and name + * @param nameOrAddress ENS name or address + */ +export default function useENS(nameOrAddress?: string | null): { + loading: boolean; + address: string | null; + name: string | null; +}; diff --git a/dist2/types/hooks/useENSAddress.d.ts b/dist2/types/hooks/useENSAddress.d.ts new file mode 100644 index 00000000000..cb222b71bad --- /dev/null +++ b/dist2/types/hooks/useENSAddress.d.ts @@ -0,0 +1,7 @@ +/** + * Does a lookup for an ENS name to find its address. + */ +export default function useENSAddress(ensName?: string | null): { + loading: boolean; + address: string | null; +}; diff --git a/dist2/types/hooks/useENSAvatar.d.ts b/dist2/types/hooks/useENSAvatar.d.ts new file mode 100644 index 00000000000..3c4c6bcfa6b --- /dev/null +++ b/dist2/types/hooks/useENSAvatar.d.ts @@ -0,0 +1,8 @@ +/** + * Returns the ENS avatar URI, if available. + * Spec: https://gist.github.com/Arachnid/9db60bd75277969ee1689c8742b75182. + */ +export default function useENSAvatar(address?: string, enforceOwnership?: boolean): { + avatar: string | null; + loading: boolean; +}; diff --git a/dist2/types/hooks/useENSContentHash.d.ts b/dist2/types/hooks/useENSContentHash.d.ts new file mode 100644 index 00000000000..9170a7d7616 --- /dev/null +++ b/dist2/types/hooks/useENSContentHash.d.ts @@ -0,0 +1,7 @@ +/** + * Does a lookup for an ENS name to find its contenthash. + */ +export default function useENSContentHash(ensName?: string | null): { + loading: boolean; + contenthash: string | null; +}; diff --git a/dist2/types/hooks/useENSName.d.ts b/dist2/types/hooks/useENSName.d.ts new file mode 100644 index 00000000000..ce5e919aea8 --- /dev/null +++ b/dist2/types/hooks/useENSName.d.ts @@ -0,0 +1,8 @@ +/** + * Does a reverse lookup for an address to find its ENS name. + * Note this is not the same as looking up an ENS name to find an address. + */ +export default function useENSName(address?: string): { + ENSName: string | null; + loading: boolean; +}; diff --git a/dist2/types/hooks/useERC20Permit.d.ts b/dist2/types/hooks/useERC20Permit.d.ts new file mode 100644 index 00000000000..f1e14e42be7 --- /dev/null +++ b/dist2/types/hooks/useERC20Permit.d.ts @@ -0,0 +1,44 @@ +import { Trade } from '@uniswap/router-sdk'; +import { Currency, CurrencyAmount, Percent, Token, TradeType } from '@uniswap/sdk-core'; +import { Trade as V2Trade } from '@uniswap/v2-sdk'; +import { Trade as V3Trade } from '@uniswap/v3-sdk'; +declare enum PermitType { + AMOUNT = 1, + ALLOWED = 2 +} +export declare enum UseERC20PermitState { + NOT_APPLICABLE = 0, + LOADING = 1, + NOT_SIGNED = 2, + SIGNED = 3 +} +interface BaseSignatureData { + v: number; + r: string; + s: string; + deadline: number; + nonce: number; + owner: string; + spender: string; + chainId: number; + tokenAddress: string; + permitType: PermitType; +} +interface StandardSignatureData extends BaseSignatureData { + amount: string; +} +interface AllowedSignatureData extends BaseSignatureData { + allowed: true; +} +export declare type SignatureData = StandardSignatureData | AllowedSignatureData; +export declare function useV2LiquidityTokenPermit(liquidityAmount: CurrencyAmount | null | undefined, spender: string | null | undefined): { + signatureData: SignatureData | null; + state: UseERC20PermitState; + gatherPermitSignature: (() => Promise) | null; +}; +export declare function useERC20PermitFromTrade(trade: V2Trade | V3Trade | Trade | undefined, allowedSlippage: Percent): { + signatureData: SignatureData | null; + state: UseERC20PermitState; + gatherPermitSignature: (() => Promise) | null; +}; +export {}; diff --git a/dist2/types/hooks/useFeeTierDistribution.d.ts b/dist2/types/hooks/useFeeTierDistribution.d.ts new file mode 100644 index 00000000000..7c72b048e05 --- /dev/null +++ b/dist2/types/hooks/useFeeTierDistribution.d.ts @@ -0,0 +1,10 @@ +import { Currency } from '@uniswap/sdk-core'; +import { FeeAmount } from '@uniswap/v3-sdk'; +interface FeeTierDistribution { + isLoading: boolean; + isError: boolean; + largestUsageFeeTier?: FeeAmount | undefined; + distributions?: Record; +} +export declare function useFeeTierDistribution(currencyA: Currency | undefined, currencyB: Currency | undefined): FeeTierDistribution; +export {}; diff --git a/dist2/types/hooks/useFetchListCallback.d.ts b/dist2/types/hooks/useFetchListCallback.d.ts new file mode 100644 index 00000000000..594192d326b --- /dev/null +++ b/dist2/types/hooks/useFetchListCallback.d.ts @@ -0,0 +1,2 @@ +import { TokenList } from '@uniswap/token-lists'; +export declare function useFetchListCallback(): (listUrl: string, sendDispatch?: boolean) => Promise; diff --git a/dist2/types/hooks/useGasPrice.d.ts b/dist2/types/hooks/useGasPrice.d.ts new file mode 100644 index 00000000000..8e1c7d26094 --- /dev/null +++ b/dist2/types/hooks/useGasPrice.d.ts @@ -0,0 +1,5 @@ +import JSBI from 'jsbi'; +/** + * Returns the price of 1 gas in WEI for the currently selected network using the chainlink fast gas price oracle + */ +export default function useGasPrice(): JSBI | undefined; diff --git a/dist2/types/hooks/useHttpLocations.d.ts b/dist2/types/hooks/useHttpLocations.d.ts new file mode 100644 index 00000000000..ab597735d38 --- /dev/null +++ b/dist2/types/hooks/useHttpLocations.d.ts @@ -0,0 +1 @@ +export default function useHttpLocations(uri: string | undefined): string[]; diff --git a/dist2/types/hooks/useIsArgentWallet.d.ts b/dist2/types/hooks/useIsArgentWallet.d.ts new file mode 100644 index 00000000000..9ad8e150d67 --- /dev/null +++ b/dist2/types/hooks/useIsArgentWallet.d.ts @@ -0,0 +1 @@ +export default function useIsArgentWallet(): boolean; diff --git a/dist2/types/hooks/useIsSwapUnsupported.d.ts b/dist2/types/hooks/useIsSwapUnsupported.d.ts new file mode 100644 index 00000000000..f9d7a5b1763 --- /dev/null +++ b/dist2/types/hooks/useIsSwapUnsupported.d.ts @@ -0,0 +1,7 @@ +import { Currency } from '@uniswap/sdk-core'; +/** + * Returns true if the input currency or output currency cannot be traded in the interface + * @param currencyIn the input currency to check + * @param currencyOut the output currency to check + */ +export declare function useIsSwapUnsupported(currencyIn?: Currency | null, currencyOut?: Currency | null): boolean; diff --git a/dist2/types/hooks/useIsTickAtLimit.d.ts b/dist2/types/hooks/useIsTickAtLimit.d.ts new file mode 100644 index 00000000000..1067d8f7a01 --- /dev/null +++ b/dist2/types/hooks/useIsTickAtLimit.d.ts @@ -0,0 +1,5 @@ +import { FeeAmount } from '@uniswap/v3-sdk'; +export default function useIsTickAtLimit(feeAmount: FeeAmount | undefined, tickLower: number | undefined, tickUpper: number | undefined): { + LOWER: boolean | undefined; + UPPER: boolean | undefined; +}; diff --git a/dist2/types/hooks/useIsWindowVisible.d.ts b/dist2/types/hooks/useIsWindowVisible.d.ts new file mode 100644 index 00000000000..9ea6082eea7 --- /dev/null +++ b/dist2/types/hooks/useIsWindowVisible.d.ts @@ -0,0 +1,4 @@ +/** + * Returns whether the window is currently visible to the user. + */ +export default function useIsWindowVisible(): boolean; diff --git a/dist2/types/hooks/useLast.d.ts b/dist2/types/hooks/useLast.d.ts new file mode 100644 index 00000000000..ed525b31cdd --- /dev/null +++ b/dist2/types/hooks/useLast.d.ts @@ -0,0 +1,6 @@ +/** + * Returns the last value of type T that passes a filter function + * @param value changing value + * @param filterFn function that determines whether a given value should be considered for the last value + */ +export default function useLast(value: T | undefined | null, filterFn?: (value: T | null | undefined) => boolean): T | null | undefined; diff --git a/dist2/types/hooks/useLocationLinkProps.d.ts b/dist2/types/hooks/useLocationLinkProps.d.ts new file mode 100644 index 00000000000..774efeed206 --- /dev/null +++ b/dist2/types/hooks/useLocationLinkProps.d.ts @@ -0,0 +1,6 @@ +import { SupportedLocale } from 'constants/locales'; +import { LocationDescriptor } from 'history'; +export declare function useLocationLinkProps(locale: SupportedLocale | null): { + to?: LocationDescriptor; + onClick?: () => void; +}; diff --git a/dist2/types/hooks/useMachineTime.d.ts b/dist2/types/hooks/useMachineTime.d.ts new file mode 100644 index 00000000000..251b86134ec --- /dev/null +++ b/dist2/types/hooks/useMachineTime.d.ts @@ -0,0 +1,2 @@ +declare const useMachineTimeMs: (updateInterval: number) => number; +export default useMachineTimeMs; diff --git a/dist2/types/hooks/useMonitoringEventCallback.d.ts b/dist2/types/hooks/useMonitoringEventCallback.d.ts new file mode 100644 index 00000000000..d0caae9ba0a --- /dev/null +++ b/dist2/types/hooks/useMonitoringEventCallback.d.ts @@ -0,0 +1,4 @@ +import { TransactionResponse } from '@ethersproject/providers'; +import { TransactionInfo } from 'state/transactions/actions'; +export declare function useTransactionMonitoringEventCallback(): (info: TransactionInfo, transactionResponse: TransactionResponse) => void; +export declare function useWalletConnectMonitoringEventCallback(): (walletAddress: any) => void; diff --git a/dist2/types/hooks/useOnClickOutside.d.ts b/dist2/types/hooks/useOnClickOutside.d.ts new file mode 100644 index 00000000000..371b4ca4a62 --- /dev/null +++ b/dist2/types/hooks/useOnClickOutside.d.ts @@ -0,0 +1,2 @@ +import { RefObject } from 'react'; +export declare function useOnClickOutside(node: RefObject, handler: undefined | (() => void)): void; diff --git a/dist2/types/hooks/useParsedQueryString.d.ts b/dist2/types/hooks/useParsedQueryString.d.ts new file mode 100644 index 00000000000..dbd75ccdd0a --- /dev/null +++ b/dist2/types/hooks/useParsedQueryString.d.ts @@ -0,0 +1,3 @@ +import { ParsedQs } from 'qs'; +export declare function parsedQueryString(search?: string): ParsedQs; +export default function useParsedQueryString(): ParsedQs; diff --git a/dist2/types/hooks/usePoolTickData.d.ts b/dist2/types/hooks/usePoolTickData.d.ts new file mode 100644 index 00000000000..cb5e3d41704 --- /dev/null +++ b/dist2/types/hooks/usePoolTickData.d.ts @@ -0,0 +1,22 @@ +import { Currency } from '@uniswap/sdk-core'; +import { FeeAmount } from '@uniswap/v3-sdk'; +import JSBI from 'jsbi'; +export interface TickData { + tick: number; + liquidityNet: JSBI; + liquidityGross: JSBI; +} +export interface TickProcessed { + tick: number; + liquidityActive: JSBI; + liquidityNet: JSBI; + price0: string; +} +export declare function usePoolActiveLiquidity(currencyA: Currency | undefined, currencyB: Currency | undefined, feeAmount: FeeAmount | undefined): { + isLoading: boolean; + isUninitialized: boolean; + isError: boolean; + error: any; + activeTick: number | undefined; + data: TickProcessed[] | undefined; +}; diff --git a/dist2/types/hooks/usePools.d.ts b/dist2/types/hooks/usePools.d.ts new file mode 100644 index 00000000000..0ef32d42f56 --- /dev/null +++ b/dist2/types/hooks/usePools.d.ts @@ -0,0 +1,10 @@ +import { Currency } from '@uniswap/sdk-core'; +import { FeeAmount, Pool } from '@uniswap/v3-sdk'; +export declare enum PoolState { + LOADING = 0, + NOT_EXISTS = 1, + EXISTS = 2, + INVALID = 3 +} +export declare function usePools(poolKeys: [Currency | undefined, Currency | undefined, FeeAmount | undefined][]): [PoolState, Pool | null][]; +export declare function usePool(currencyA: Currency | undefined, currencyB: Currency | undefined, feeAmount: FeeAmount | undefined): [PoolState, Pool | null]; diff --git a/dist2/types/hooks/usePositionTokenURI.d.ts b/dist2/types/hooks/usePositionTokenURI.d.ts new file mode 100644 index 00000000000..21890bdf1b3 --- /dev/null +++ b/dist2/types/hooks/usePositionTokenURI.d.ts @@ -0,0 +1,20 @@ +import { BigNumber } from '@ethersproject/bignumber'; +import JSBI from 'jsbi'; +declare type TokenId = number | JSBI | BigNumber; +declare type UsePositionTokenURIResult = { + valid: true; + loading: false; + result: { + name: string; + description: string; + image: string; + }; +} | { + valid: false; + loading: false; +} | { + valid: true; + loading: true; +}; +export declare function usePositionTokenURI(tokenId: TokenId | undefined): UsePositionTokenURIResult; +export {}; diff --git a/dist2/types/hooks/usePrevious.d.ts b/dist2/types/hooks/usePrevious.d.ts new file mode 100644 index 00000000000..ae7baab6c92 --- /dev/null +++ b/dist2/types/hooks/usePrevious.d.ts @@ -0,0 +1 @@ +export default function usePrevious(value: T): T | undefined; diff --git a/dist2/types/hooks/useSocksBalance.d.ts b/dist2/types/hooks/useSocksBalance.d.ts new file mode 100644 index 00000000000..cc1d96bd990 --- /dev/null +++ b/dist2/types/hooks/useSocksBalance.d.ts @@ -0,0 +1 @@ +export declare function useHasSocks(): boolean | undefined; diff --git a/dist2/types/hooks/useSwapCallback.d.ts b/dist2/types/hooks/useSwapCallback.d.ts new file mode 100644 index 00000000000..771451dd535 --- /dev/null +++ b/dist2/types/hooks/useSwapCallback.d.ts @@ -0,0 +1,21 @@ +import { Trade } from '@uniswap/router-sdk'; +import { Currency, Percent, TradeType } from '@uniswap/sdk-core'; +import { Trade as V2Trade } from '@uniswap/v2-sdk'; +import { Trade as V3Trade } from '@uniswap/v3-sdk'; +import { ReactNode } from 'react'; +import { SignatureData } from './useERC20Permit'; +declare type AnyTrade = V2Trade | V3Trade | Trade; +declare enum SwapCallbackState { + INVALID = 0, + LOADING = 1, + VALID = 2 +} +export declare function useSwapCallback(trade: AnyTrade | undefined, // trade to execute, required +allowedSlippage: Percent, // in bips +recipientAddressOrName: string | null, // the ENS name or address of the recipient of the trade, or null if swap should be returned to sender +signatureData: SignatureData | undefined | null): { + state: SwapCallbackState; + callback: null | (() => Promise); + error: ReactNode | null; +}; +export {}; diff --git a/dist2/types/hooks/useTheme.d.ts b/dist2/types/hooks/useTheme.d.ts new file mode 100644 index 00000000000..5702d34f93f --- /dev/null +++ b/dist2/types/hooks/useTheme.d.ts @@ -0,0 +1 @@ +export default function useTheme(): import("styled-components").DefaultTheme; diff --git a/dist2/types/hooks/useToggle.d.ts b/dist2/types/hooks/useToggle.d.ts new file mode 100644 index 00000000000..e3cf108e96c --- /dev/null +++ b/dist2/types/hooks/useToggle.d.ts @@ -0,0 +1 @@ +export default function useToggle(initialState?: boolean): [boolean, () => void]; diff --git a/dist2/types/hooks/useTokenAllowance.d.ts b/dist2/types/hooks/useTokenAllowance.d.ts new file mode 100644 index 00000000000..38400b803df --- /dev/null +++ b/dist2/types/hooks/useTokenAllowance.d.ts @@ -0,0 +1,2 @@ +import { CurrencyAmount, Token } from '@uniswap/sdk-core'; +export declare function useTokenAllowance(token?: Token, owner?: string, spender?: string): CurrencyAmount | undefined; diff --git a/dist2/types/hooks/useTokenInfoFromActiveList.d.ts b/dist2/types/hooks/useTokenInfoFromActiveList.d.ts new file mode 100644 index 00000000000..b23981566ae --- /dev/null +++ b/dist2/types/hooks/useTokenInfoFromActiveList.d.ts @@ -0,0 +1,5 @@ +import { Currency } from '@uniswap/sdk-core'; +/** + * Returns a WrappedTokenInfo from the active token lists when possible, + * or the passed token otherwise. */ +export declare function useTokenInfoFromActiveList(currency: Currency): import("@uniswap/sdk-core").Token | import("@uniswap/sdk-core").NativeCurrency | import("../state/lists/wrappedTokenInfo").WrappedTokenInfo | undefined; diff --git a/dist2/types/hooks/useTotalSupply.d.ts b/dist2/types/hooks/useTotalSupply.d.ts new file mode 100644 index 00000000000..7853f19e996 --- /dev/null +++ b/dist2/types/hooks/useTotalSupply.d.ts @@ -0,0 +1,2 @@ +import { Currency, CurrencyAmount, Token } from '@uniswap/sdk-core'; +export declare function useTotalSupply(token?: Currency): CurrencyAmount | undefined; diff --git a/dist2/types/hooks/useTransactionDeadline.d.ts b/dist2/types/hooks/useTransactionDeadline.d.ts new file mode 100644 index 00000000000..585b553234b --- /dev/null +++ b/dist2/types/hooks/useTransactionDeadline.d.ts @@ -0,0 +1,2 @@ +import { BigNumber } from '@ethersproject/bignumber'; +export default function useTransactionDeadline(): BigNumber | undefined; diff --git a/dist2/types/hooks/useUSDCPrice.d.ts b/dist2/types/hooks/useUSDCPrice.d.ts new file mode 100644 index 00000000000..1db8e767ed2 --- /dev/null +++ b/dist2/types/hooks/useUSDCPrice.d.ts @@ -0,0 +1,16 @@ +import { Currency, CurrencyAmount, Price, Token } from '@uniswap/sdk-core'; +export declare const STABLECOIN_AMOUNT_OUT: { + [chainId: number]: CurrencyAmount; +}; +/** + * Returns the price in USDC of the input currency + * @param currency currency to compute the USDC price of + */ +export default function useUSDCPrice(currency?: Currency): Price | undefined; +export declare function useUSDCValue(currencyAmount: CurrencyAmount | undefined | null): CurrencyAmount | null; +/** + * + * @param fiatValue string representation of a USD amount + * @returns CurrencyAmount where currency is stablecoin on active chain + */ +export declare function useStablecoinAmountFromFiatValue(fiatValue: string | null | undefined): CurrencyAmount | undefined; diff --git a/dist2/types/hooks/useV2Pairs.d.ts b/dist2/types/hooks/useV2Pairs.d.ts new file mode 100644 index 00000000000..cf17170d341 --- /dev/null +++ b/dist2/types/hooks/useV2Pairs.d.ts @@ -0,0 +1,10 @@ +import { Currency } from '@uniswap/sdk-core'; +import { Pair } from '@uniswap/v2-sdk'; +export declare enum PairState { + LOADING = 0, + NOT_EXISTS = 1, + EXISTS = 2, + INVALID = 3 +} +export declare function useV2Pairs(currencies: [Currency | undefined, Currency | undefined][]): [PairState, Pair | null][]; +export declare function useV2Pair(tokenA?: Currency, tokenB?: Currency): [PairState, Pair | null]; diff --git a/dist2/types/hooks/useV3PositionFees.d.ts b/dist2/types/hooks/useV3PositionFees.d.ts new file mode 100644 index 00000000000..1e40e2c2853 --- /dev/null +++ b/dist2/types/hooks/useV3PositionFees.d.ts @@ -0,0 +1,4 @@ +import { BigNumber } from '@ethersproject/bignumber'; +import { Currency, CurrencyAmount } from '@uniswap/sdk-core'; +import { Pool } from '@uniswap/v3-sdk'; +export declare function useV3PositionFees(pool?: Pool, tokenId?: BigNumber, asWETH?: boolean): [CurrencyAmount, CurrencyAmount] | [undefined, undefined]; diff --git a/dist2/types/hooks/useV3Positions.d.ts b/dist2/types/hooks/useV3Positions.d.ts new file mode 100644 index 00000000000..e8ddc666368 --- /dev/null +++ b/dist2/types/hooks/useV3Positions.d.ts @@ -0,0 +1,13 @@ +import { BigNumber } from '@ethersproject/bignumber'; +import { PositionDetails } from 'types/position'; +interface UseV3PositionsResults { + loading: boolean; + positions: PositionDetails[] | undefined; +} +interface UseV3PositionResults { + loading: boolean; + position: PositionDetails | undefined; +} +export declare function useV3PositionFromTokenId(tokenId: BigNumber | undefined): UseV3PositionResults; +export declare function useV3Positions(account: string | null | undefined): UseV3PositionsResults; +export {}; diff --git a/dist2/types/hooks/useV3SwapPools.d.ts b/dist2/types/hooks/useV3SwapPools.d.ts new file mode 100644 index 00000000000..dc79b76bce0 --- /dev/null +++ b/dist2/types/hooks/useV3SwapPools.d.ts @@ -0,0 +1,11 @@ +import { Currency } from '@uniswap/sdk-core'; +import { Pool } from '@uniswap/v3-sdk'; +/** + * Returns all the existing pools that should be considered for swapping between an input currency and an output currency + * @param currencyIn the input currency + * @param currencyOut the output currency + */ +export declare function useV3SwapPools(currencyIn?: Currency, currencyOut?: Currency): { + pools: Pool[]; + loading: boolean; +}; diff --git a/dist2/types/hooks/useWindowSize.d.ts b/dist2/types/hooks/useWindowSize.d.ts new file mode 100644 index 00000000000..55596ab3ccd --- /dev/null +++ b/dist2/types/hooks/useWindowSize.d.ts @@ -0,0 +1,4 @@ +export declare function useWindowSize(): { + width: number | undefined; + height: number | undefined; +}; diff --git a/dist2/types/hooks/useWrapCallback.d.ts b/dist2/types/hooks/useWrapCallback.d.ts new file mode 100644 index 00000000000..27e22fc0ed0 --- /dev/null +++ b/dist2/types/hooks/useWrapCallback.d.ts @@ -0,0 +1,29 @@ +/// +import { Currency } from '@uniswap/sdk-core'; +export declare enum WrapType { + NOT_APPLICABLE = 0, + WRAP = 1, + UNWRAP = 2 +} +declare enum WrapInputError { + NO_ERROR = 0, + ENTER_NATIVE_AMOUNT = 1, + ENTER_WRAPPED_AMOUNT = 2, + INSUFFICIENT_NATIVE_BALANCE = 3, + INSUFFICIENT_WRAPPED_BALANCE = 4 +} +export declare function WrapErrorText({ wrapInputError }: { + wrapInputError: WrapInputError; +}): JSX.Element | null; +/** + * Given the selected input and output currency, return a wrap callback + * @param inputCurrency the selected input currency + * @param outputCurrency the selected output currency + * @param typedValue the user input value + */ +export default function useWrapCallback(inputCurrency: Currency | undefined | null, outputCurrency: Currency | undefined | null, typedValue: string | undefined): { + wrapType: WrapType; + execute?: undefined | (() => Promise); + inputError?: WrapInputError; +}; +export {}; diff --git a/dist2/types/hooks/web3.d.ts b/dist2/types/hooks/web3.d.ts new file mode 100644 index 00000000000..b389050b736 --- /dev/null +++ b/dist2/types/hooks/web3.d.ts @@ -0,0 +1,6 @@ +export declare function useEagerConnect(): boolean; +/** + * Use for network and injected - logs user in + * and out after checking what network theyre on + */ +export declare function useInactiveListener(suppress?: boolean): void; diff --git a/dist2/types/i18n.d.ts b/dist2/types/i18n.d.ts new file mode 100644 index 00000000000..22fd671b977 --- /dev/null +++ b/dist2/types/i18n.d.ts @@ -0,0 +1,4 @@ +import { ReactNode } from 'react'; +export declare function LanguageProvider({ children }: { + children: ReactNode; +}): JSX.Element; diff --git a/dist2/types/index.d.ts b/dist2/types/index.d.ts new file mode 100644 index 00000000000..9f6a2850ee7 --- /dev/null +++ b/dist2/types/index.d.ts @@ -0,0 +1,5 @@ +import '@reach/dialog/styles.css'; +import 'inter-ui'; +import 'polyfills'; +import 'components/analytics'; +export { INFURA_NETWORK_URLS } from 'constants/chainInfo'; diff --git a/dist2/types/lib/assets/svg/Check.d.ts b/dist2/types/lib/assets/svg/Check.d.ts new file mode 100644 index 00000000000..af0693b2c0f --- /dev/null +++ b/dist2/types/lib/assets/svg/Check.d.ts @@ -0,0 +1,3 @@ +import * as React from 'react'; +declare function SvgCheck(props: React.SVGProps): JSX.Element; +export default SvgCheck; diff --git a/dist2/types/lib/assets/svg/Expando.d.ts b/dist2/types/lib/assets/svg/Expando.d.ts new file mode 100644 index 00000000000..bb4b29d481c --- /dev/null +++ b/dist2/types/lib/assets/svg/Expando.d.ts @@ -0,0 +1,3 @@ +import * as React from 'react'; +declare function SvgExpando(props: React.SVGProps): JSX.Element; +export default SvgExpando; diff --git a/dist2/types/lib/assets/svg/Logo.d.ts b/dist2/types/lib/assets/svg/Logo.d.ts new file mode 100644 index 00000000000..8e2c1a71e66 --- /dev/null +++ b/dist2/types/lib/assets/svg/Logo.d.ts @@ -0,0 +1,3 @@ +import * as React from 'react'; +declare function SvgLogo(props: React.SVGProps): JSX.Element; +export default SvgLogo; diff --git a/dist2/types/lib/assets/svg/Spinner.d.ts b/dist2/types/lib/assets/svg/Spinner.d.ts new file mode 100644 index 00000000000..4e50904cb2a --- /dev/null +++ b/dist2/types/lib/assets/svg/Spinner.d.ts @@ -0,0 +1,3 @@ +import * as React from 'react'; +declare function SvgSpinner(props: React.SVGProps): JSX.Element; +export default SvgSpinner; diff --git a/dist2/types/lib/components/ActionButton.d.ts b/dist2/types/lib/components/ActionButton.d.ts new file mode 100644 index 00000000000..8c2c7d4cc13 --- /dev/null +++ b/dist2/types/lib/components/ActionButton.d.ts @@ -0,0 +1,29 @@ +import { Icon } from 'lib/icons'; +import { Color } from 'lib/theme'; +import { ReactNode } from 'react'; +export declare const Overlay: import("styled-components").StyledComponent<"div", import("../theme/theme").ComputedTheme, { + color?: keyof import("lib/theme").Colors | undefined; + align?: string | undefined; + justify?: string | undefined; + pad?: number | undefined; + gap?: number | undefined; + flex?: true | undefined; + grow?: true | undefined; + children?: ReactNode; + theme: import("lib/theme").Theme; +} & { + update?: boolean | undefined; +}, never>; +export interface ActionButtonProps { + color?: Color; + disabled?: boolean; + update?: { + message: ReactNode; + action: ReactNode; + icon?: Icon; + }; + onClick: () => void; + onUpdate?: () => void; + children: ReactNode; +} +export default function ActionButton({ color, disabled, update, onClick, onUpdate, children, }: ActionButtonProps): JSX.Element; diff --git a/dist2/types/lib/components/Button.d.ts b/dist2/types/lib/components/Button.d.ts new file mode 100644 index 00000000000..a8837f6ba58 --- /dev/null +++ b/dist2/types/lib/components/Button.d.ts @@ -0,0 +1,15 @@ +import { Icon } from 'lib/icons'; +import { ComponentProps } from 'react'; +export declare const BaseButton: import("styled-components").StyledComponent<"button", import("../theme/theme").ComputedTheme, {}, never>; +declare const _default: import("styled-components").StyledComponent<"button", import("../theme/theme").ComputedTheme, { + color?: keyof import("lib/theme").Colors | undefined; +}, never>; +export default _default; +export declare const TextButton: import("styled-components").StyledComponent<"button", import("../theme/theme").ComputedTheme, { + color?: keyof import("lib/theme").Colors | undefined; +}, never>; +interface IconButtonProps { + icon: Icon; + iconProps?: ComponentProps; +} +export declare function IconButton({ icon: Icon, iconProps, ...props }: IconButtonProps & ComponentProps): JSX.Element; diff --git a/dist2/types/lib/components/Column.d.ts b/dist2/types/lib/components/Column.d.ts new file mode 100644 index 00000000000..597b77b7605 --- /dev/null +++ b/dist2/types/lib/components/Column.d.ts @@ -0,0 +1,13 @@ +import { Theme } from 'lib/theme'; +declare const Column: import("styled-components").StyledComponent<"div", import("../theme/theme").ComputedTheme, { + align?: string | undefined; + color?: keyof import("lib/theme").Colors | undefined; + justify?: string | undefined; + gap?: number | undefined; + padded?: true | undefined; + flex?: true | undefined; + grow?: true | undefined; + theme: Theme; + css?: import("styled-components").FlattenInterpolation> | undefined; +}, never>; +export default Column; diff --git a/dist2/types/lib/components/Dialog.d.ts b/dist2/types/lib/components/Dialog.d.ts new file mode 100644 index 00000000000..cdd6ba93aac --- /dev/null +++ b/dist2/types/lib/components/Dialog.d.ts @@ -0,0 +1,29 @@ +import 'wicg-inert'; +import { Color } from 'lib/theme'; +import { ReactElement, ReactNode } from 'react'; +declare global { + interface HTMLElement { + inert?: boolean; + } +} +interface ProviderProps { + value: HTMLElement | null; + children: ReactNode; +} +export declare function Provider({ value, children }: ProviderProps): JSX.Element; +interface HeaderProps { + title?: ReactElement; + ruled?: boolean; + children?: ReactNode; +} +export declare function Header({ title, children, ruled }: HeaderProps): JSX.Element; +export declare const Modal: import("styled-components").StyledComponent<"div", import("../theme/theme").ComputedTheme, { + color: Color; +}, never>; +interface DialogProps { + color: Color; + children: ReactNode; + onClose?: () => void; +} +export default function Dialog({ color, children, onClose }: DialogProps): import("react").ReactPortal | null; +export {}; diff --git a/dist2/types/lib/components/Error/ErrorBoundary.d.ts b/dist2/types/lib/components/Error/ErrorBoundary.d.ts new file mode 100644 index 00000000000..e510cbe9d95 --- /dev/null +++ b/dist2/types/lib/components/Error/ErrorBoundary.d.ts @@ -0,0 +1,17 @@ +import React, { ErrorInfo } from 'react'; +export declare type ErrorHandler = (error: Error, info: ErrorInfo) => void; +interface ErrorBoundaryProps { + onError?: ErrorHandler; +} +declare type ErrorBoundaryState = { + error: Error | null; +}; +export default class ErrorBoundary extends React.Component { + constructor(props: ErrorBoundaryProps); + static getDerivedStateFromError(error: Error): { + error: Error; + }; + componentDidCatch(error: Error, errorInfo: ErrorInfo): void; + render(): React.ReactNode; +} +export {}; diff --git a/dist2/types/lib/components/Error/ErrorDialog.d.ts b/dist2/types/lib/components/Error/ErrorDialog.d.ts new file mode 100644 index 00000000000..b03289584f2 --- /dev/null +++ b/dist2/types/lib/components/Error/ErrorDialog.d.ts @@ -0,0 +1,18 @@ +import { Icon } from 'lib/icons'; +import { Color } from 'lib/theme'; +import { ReactNode } from 'react'; +interface StatusHeaderProps { + icon: Icon; + iconColor?: Color; + iconSize?: number; + children: ReactNode; +} +export declare function StatusHeader({ icon: Icon, iconColor, iconSize, children }: StatusHeaderProps): JSX.Element; +interface ErrorDialogProps { + header?: ReactNode; + error: Error; + action: ReactNode; + onAction: () => void; +} +export default function ErrorDialog({ header, error, action, onAction }: ErrorDialogProps): JSX.Element; +export {}; diff --git a/dist2/types/lib/components/Error/ErrorGenerator.d.ts b/dist2/types/lib/components/Error/ErrorGenerator.d.ts new file mode 100644 index 00000000000..47dd9838787 --- /dev/null +++ b/dist2/types/lib/components/Error/ErrorGenerator.d.ts @@ -0,0 +1,2 @@ +import { SwapWidgetProps } from 'lib/index'; +export default function ErrorGenerator(swapWidgetProps: SwapWidgetProps): null; diff --git a/dist2/types/lib/components/Header.d.ts b/dist2/types/lib/components/Header.d.ts new file mode 100644 index 00000000000..20e0acd5972 --- /dev/null +++ b/dist2/types/lib/components/Header.d.ts @@ -0,0 +1,7 @@ +import { ReactElement, ReactNode } from 'react'; +export interface HeaderProps { + title?: ReactElement; + logo?: boolean; + children: ReactNode; +} +export default function Header({ title, logo, children }: HeaderProps): JSX.Element; diff --git a/dist2/types/lib/components/Input.d.ts b/dist2/types/lib/components/Input.d.ts new file mode 100644 index 00000000000..fcdf5b0d5a4 --- /dev/null +++ b/dist2/types/lib/components/Input.d.ts @@ -0,0 +1,15 @@ +import { HTMLProps } from 'react'; +declare const Input: import("styled-components").StyledComponent<"input", import("../theme/theme").ComputedTheme, {}, never>; +export default Input; +interface StringInputProps extends Omit, 'onChange' | 'as' | 'value'> { + value: string; + onChange: (input: string) => void; +} +export declare const StringInput: import("react").ForwardRefExoticComponent & import("react").RefAttributes>; +interface NumericInputProps extends Omit, 'onChange' | 'as' | 'value'> { + value: string; + onChange: (input: string) => void; +} +export declare const IntegerInput: import("react").ForwardRefExoticComponent & import("react").RefAttributes>; +export declare const DecimalInput: import("react").ForwardRefExoticComponent & import("react").RefAttributes>; +export declare const inputCss: import("styled-components").FlattenInterpolation>; diff --git a/dist2/types/lib/components/Popover.d.ts b/dist2/types/lib/components/Popover.d.ts new file mode 100644 index 00000000000..2bf711591c4 --- /dev/null +++ b/dist2/types/lib/components/Popover.d.ts @@ -0,0 +1,11 @@ +import { Placement } from '@popperjs/core'; +import React from 'react'; +export declare const BoundaryProvider: React.Provider; +export interface PopoverProps { + content: React.ReactNode; + show: boolean; + children: React.ReactNode; + placement: Placement; + contained?: true; +} +export default function Popover({ content, show, children, placement, contained }: PopoverProps): JSX.Element; diff --git a/dist2/types/lib/components/RecentTransactionsDialog.d.ts b/dist2/types/lib/components/RecentTransactionsDialog.d.ts new file mode 100644 index 00000000000..1a49021739e --- /dev/null +++ b/dist2/types/lib/components/RecentTransactionsDialog.d.ts @@ -0,0 +1,7 @@ +/// +export declare enum TransactionStatus { + SUCCESS = 0, + ERROR = 1, + PENDING = 2 +} +export default function RecentTransactionsDialog(): JSX.Element; diff --git a/dist2/types/lib/components/Row.d.ts b/dist2/types/lib/components/Row.d.ts new file mode 100644 index 00000000000..649c1478f66 --- /dev/null +++ b/dist2/types/lib/components/Row.d.ts @@ -0,0 +1,14 @@ +import { Theme } from 'lib/theme'; +import { ReactNode } from 'react'; +declare const Row: import("styled-components").StyledComponent<"div", import("../theme/theme").ComputedTheme, { + color?: keyof import("lib/theme").Colors | undefined; + align?: string | undefined; + justify?: string | undefined; + pad?: number | undefined; + gap?: number | undefined; + flex?: true | undefined; + grow?: true | undefined; + children?: ReactNode; + theme: Theme; +}, never>; +export default Row; diff --git a/dist2/types/lib/components/Rule.d.ts b/dist2/types/lib/components/Rule.d.ts new file mode 100644 index 00000000000..8f3ca133139 --- /dev/null +++ b/dist2/types/lib/components/Rule.d.ts @@ -0,0 +1,5 @@ +declare const Rule: import("styled-components").StyledComponent<"hr", import("../theme/theme").ComputedTheme, { + padded?: true | undefined; + scrollingEdge?: "bottom" | "top" | undefined; +}, never>; +export default Rule; diff --git a/dist2/types/lib/components/Swap/Input.d.ts b/dist2/types/lib/components/Swap/Input.d.ts new file mode 100644 index 00000000000..73f23b977bf --- /dev/null +++ b/dist2/types/lib/components/Swap/Input.d.ts @@ -0,0 +1,6 @@ +/// +interface InputProps { + disabled?: boolean; +} +export default function Input({ disabled }: InputProps): JSX.Element; +export {}; diff --git a/dist2/types/lib/components/Swap/Output.d.ts b/dist2/types/lib/components/Swap/Output.d.ts new file mode 100644 index 00000000000..b581f62bb64 --- /dev/null +++ b/dist2/types/lib/components/Swap/Output.d.ts @@ -0,0 +1,23 @@ +import { ReactNode } from 'react'; +export declare const colorAtom: import("jotai").Atom & { + write: (get: { + (atom: import("jotai").Atom>): Value; + (atom: import("jotai").Atom>): Value_1; + (atom: import("jotai").Atom): Value_2 extends Promise ? V : Value_2; + } & { + (atom: import("jotai").Atom>, unstable_promise: true): Value_3 | Promise; + (atom: import("jotai").Atom>, unstable_promise: true): Value_4 | Promise; + }, set: { + >(atom: import("jotai").WritableAtom): Result; + >(atom: import("jotai").WritableAtom, update: Update): Result_1; + }, update: string | ((prev: string | undefined) => string | undefined) | undefined) => void; + onMount?: ( string | undefined) | undefined) => void>(setAtom: S) => void | (() => void)) | undefined; +} & { + init: string | undefined; +}; +interface OutputProps { + disabled?: boolean; + children: ReactNode; +} +export default function Output({ disabled, children }: OutputProps): JSX.Element; +export {}; diff --git a/dist2/types/lib/components/Swap/ReverseButton.d.ts b/dist2/types/lib/components/Swap/ReverseButton.d.ts new file mode 100644 index 00000000000..16a800a371d --- /dev/null +++ b/dist2/types/lib/components/Swap/ReverseButton.d.ts @@ -0,0 +1,4 @@ +/// +export default function ReverseButton({ disabled }: { + disabled?: boolean; +}): JSX.Element; diff --git a/dist2/types/lib/components/Swap/Settings.fixture.d.ts b/dist2/types/lib/components/Swap/Settings.fixture.d.ts new file mode 100644 index 00000000000..5c4fa1761e2 --- /dev/null +++ b/dist2/types/lib/components/Swap/Settings.fixture.d.ts @@ -0,0 +1,3 @@ +/// +declare const _default: JSX.Element; +export default _default; diff --git a/dist2/types/lib/components/Swap/Settings/MaxSlippageSelect.d.ts b/dist2/types/lib/components/Swap/Settings/MaxSlippageSelect.d.ts new file mode 100644 index 00000000000..10f222bc381 --- /dev/null +++ b/dist2/types/lib/components/Swap/Settings/MaxSlippageSelect.d.ts @@ -0,0 +1,2 @@ +/// +export default function MaxSlippageSelect(): JSX.Element; diff --git a/dist2/types/lib/components/Swap/Settings/MockToggle.d.ts b/dist2/types/lib/components/Swap/Settings/MockToggle.d.ts new file mode 100644 index 00000000000..d578da35c70 --- /dev/null +++ b/dist2/types/lib/components/Swap/Settings/MockToggle.d.ts @@ -0,0 +1,2 @@ +/// +export default function MockToggle(): JSX.Element; diff --git a/dist2/types/lib/components/Swap/Settings/TransactionTtlInput.d.ts b/dist2/types/lib/components/Swap/Settings/TransactionTtlInput.d.ts new file mode 100644 index 00000000000..2f71b9e83ad --- /dev/null +++ b/dist2/types/lib/components/Swap/Settings/TransactionTtlInput.d.ts @@ -0,0 +1,2 @@ +/// +export default function TransactionTtlInput(): JSX.Element; diff --git a/dist2/types/lib/components/Swap/Settings/components.d.ts b/dist2/types/lib/components/Swap/Settings/components.d.ts new file mode 100644 index 00000000000..2f4c9e9a483 --- /dev/null +++ b/dist2/types/lib/components/Swap/Settings/components.d.ts @@ -0,0 +1,10 @@ +import { ReactNode } from 'react'; +import { AnyStyledComponent } from 'styled-components'; +export declare const optionCss: (selected: boolean) => import("styled-components").FlattenInterpolation>; +export declare function value(Value: AnyStyledComponent): import("styled-components").StyledComponent; +interface LabelProps { + name: ReactNode; + tooltip?: ReactNode; +} +export declare function Label({ name, tooltip }: LabelProps): JSX.Element; +export {}; diff --git a/dist2/types/lib/components/Swap/Settings/index.d.ts b/dist2/types/lib/components/Swap/Settings/index.d.ts new file mode 100644 index 00000000000..e59995ad5c9 --- /dev/null +++ b/dist2/types/lib/components/Swap/Settings/index.d.ts @@ -0,0 +1,5 @@ +/// +export declare function SettingsDialog(): JSX.Element; +export default function Settings({ disabled }: { + disabled?: boolean; +}): JSX.Element; diff --git a/dist2/types/lib/components/Swap/Status.fixture.d.ts b/dist2/types/lib/components/Swap/Status.fixture.d.ts new file mode 100644 index 00000000000..5c4fa1761e2 --- /dev/null +++ b/dist2/types/lib/components/Swap/Status.fixture.d.ts @@ -0,0 +1,3 @@ +/// +declare const _default: JSX.Element; +export default _default; diff --git a/dist2/types/lib/components/Swap/Status/StatusDialog.d.ts b/dist2/types/lib/components/Swap/Status/StatusDialog.d.ts new file mode 100644 index 00000000000..2bdd692a0f7 --- /dev/null +++ b/dist2/types/lib/components/Swap/Status/StatusDialog.d.ts @@ -0,0 +1,8 @@ +/// +import { SwapTransactionInfo, Transaction } from 'lib/state/transactions'; +interface TransactionStatusProps { + tx: Transaction; + onClose: () => void; +} +export default function TransactionStatusDialog({ tx, onClose }: TransactionStatusProps): JSX.Element; +export {}; diff --git a/dist2/types/lib/components/Swap/Status/index.d.ts b/dist2/types/lib/components/Swap/Status/index.d.ts new file mode 100644 index 00000000000..03a0f00c93c --- /dev/null +++ b/dist2/types/lib/components/Swap/Status/index.d.ts @@ -0,0 +1 @@ +export { default as StatusDialog } from './StatusDialog'; diff --git a/dist2/types/lib/components/Swap/Summary.fixture.d.ts b/dist2/types/lib/components/Swap/Summary.fixture.d.ts new file mode 100644 index 00000000000..5c4fa1761e2 --- /dev/null +++ b/dist2/types/lib/components/Swap/Summary.fixture.d.ts @@ -0,0 +1,3 @@ +/// +declare const _default: JSX.Element; +export default _default; diff --git a/dist2/types/lib/components/Swap/Summary/Details.d.ts b/dist2/types/lib/components/Swap/Summary/Details.d.ts new file mode 100644 index 00000000000..06763586812 --- /dev/null +++ b/dist2/types/lib/components/Swap/Summary/Details.d.ts @@ -0,0 +1,9 @@ +/// +import { Trade } from '@uniswap/router-sdk'; +import { Currency, Percent, TradeType } from '@uniswap/sdk-core'; +interface DetailsProps { + trade: Trade; + allowedSlippage: Percent; +} +export default function Details({ trade, allowedSlippage }: DetailsProps): JSX.Element; +export {}; diff --git a/dist2/types/lib/components/Swap/Summary/Summary.d.ts b/dist2/types/lib/components/Swap/Summary/Summary.d.ts new file mode 100644 index 00000000000..f5684507d53 --- /dev/null +++ b/dist2/types/lib/components/Swap/Summary/Summary.d.ts @@ -0,0 +1,9 @@ +/// +import { Currency, CurrencyAmount } from '@uniswap/sdk-core'; +interface SummaryProps { + input: CurrencyAmount; + output: CurrencyAmount; + usdc?: boolean; +} +export default function Summary({ input, output, usdc }: SummaryProps): JSX.Element; +export {}; diff --git a/dist2/types/lib/components/Swap/Summary/index.d.ts b/dist2/types/lib/components/Swap/Summary/index.d.ts new file mode 100644 index 00000000000..692682be9de --- /dev/null +++ b/dist2/types/lib/components/Swap/Summary/index.d.ts @@ -0,0 +1,11 @@ +/// +import { Trade } from '@uniswap/router-sdk'; +import { Currency, Percent, TradeType } from '@uniswap/sdk-core'; +import Summary from './Summary'; +export default Summary; +interface SummaryDialogProps { + trade: Trade; + allowedSlippage: Percent; + onConfirm: () => void; +} +export declare function SummaryDialog({ trade, allowedSlippage, onConfirm }: SummaryDialogProps): JSX.Element | null; diff --git a/dist2/types/lib/components/Swap/Swap.fixture.d.ts b/dist2/types/lib/components/Swap/Swap.fixture.d.ts new file mode 100644 index 00000000000..5c4fa1761e2 --- /dev/null +++ b/dist2/types/lib/components/Swap/Swap.fixture.d.ts @@ -0,0 +1,3 @@ +/// +declare const _default: JSX.Element; +export default _default; diff --git a/dist2/types/lib/components/Swap/SwapButton.d.ts b/dist2/types/lib/components/Swap/SwapButton.d.ts new file mode 100644 index 00000000000..c8c920e4d5c --- /dev/null +++ b/dist2/types/lib/components/Swap/SwapButton.d.ts @@ -0,0 +1,6 @@ +/// +interface SwapButtonProps { + disabled?: boolean; +} +export default function SwapButton({ disabled }: SwapButtonProps): JSX.Element; +export {}; diff --git a/dist2/types/lib/components/Swap/TokenInput.d.ts b/dist2/types/lib/components/Swap/TokenInput.d.ts new file mode 100644 index 00000000000..ac946e623be --- /dev/null +++ b/dist2/types/lib/components/Swap/TokenInput.d.ts @@ -0,0 +1,13 @@ +import { Currency } from '@uniswap/sdk-core'; +import { ReactNode } from 'react'; +interface TokenInputProps { + currency?: Currency; + amount: string; + disabled?: boolean; + onMax?: () => void; + onChangeInput: (input: string) => void; + onChangeCurrency: (currency: Currency) => void; + children: ReactNode; +} +export default function TokenInput({ currency, amount, disabled, onMax, onChangeInput, onChangeCurrency, children, }: TokenInputProps): JSX.Element; +export {}; diff --git a/dist2/types/lib/components/Swap/Toolbar.d.ts b/dist2/types/lib/components/Swap/Toolbar.d.ts new file mode 100644 index 00000000000..1e392192002 --- /dev/null +++ b/dist2/types/lib/components/Swap/Toolbar.d.ts @@ -0,0 +1,4 @@ +/// +export default function Toolbar({ disabled }: { + disabled?: boolean; +}): JSX.Element; diff --git a/dist2/types/lib/components/Swap/index.d.ts b/dist2/types/lib/components/Swap/index.d.ts new file mode 100644 index 00000000000..ca3dc8ea202 --- /dev/null +++ b/dist2/types/lib/components/Swap/index.d.ts @@ -0,0 +1,20 @@ +/// +import { TokenInfo } from '@uniswap/token-lists'; +interface DefaultTokenAmount { + address?: string | { + [chainId: number]: string; + }; + amount?: number; +} +interface SwapDefaults { + tokenList: string | TokenInfo[]; + input: DefaultTokenAmount; + output: DefaultTokenAmount; +} +export interface SwapProps { + convenienceFee?: number; + convenienceFeeRecipient?: string; + defaults?: Partial; +} +export default function Swap({ defaults }: SwapProps): JSX.Element; +export {}; diff --git a/dist2/types/lib/components/Toggle.d.ts b/dist2/types/lib/components/Toggle.d.ts new file mode 100644 index 00000000000..a4c3baabd6b --- /dev/null +++ b/dist2/types/lib/components/Toggle.d.ts @@ -0,0 +1,7 @@ +/// +interface ToggleProps { + checked: boolean; + onToggle: () => void; +} +export default function Toggle({ checked, onToggle }: ToggleProps): JSX.Element; +export {}; diff --git a/dist2/types/lib/components/TokenImg.d.ts b/dist2/types/lib/components/TokenImg.d.ts new file mode 100644 index 00000000000..e2f7803a5a3 --- /dev/null +++ b/dist2/types/lib/components/TokenImg.d.ts @@ -0,0 +1,11 @@ +/// +import { Currency } from '@uniswap/sdk-core'; +interface TokenImgProps { + className?: string; + token: Currency; +} +declare function TokenImg({ className, token }: TokenImgProps): JSX.Element; +declare const _default: import("styled-components").StyledComponent; +export default _default; diff --git a/dist2/types/lib/components/TokenSelect.fixture.d.ts b/dist2/types/lib/components/TokenSelect.fixture.d.ts new file mode 100644 index 00000000000..2fd2fc0f568 --- /dev/null +++ b/dist2/types/lib/components/TokenSelect.fixture.d.ts @@ -0,0 +1,2 @@ +/// +export default function Fixture(): JSX.Element; diff --git a/dist2/types/lib/components/TokenSelect/TokenBase.d.ts b/dist2/types/lib/components/TokenSelect/TokenBase.d.ts new file mode 100644 index 00000000000..52cf93ce796 --- /dev/null +++ b/dist2/types/lib/components/TokenSelect/TokenBase.d.ts @@ -0,0 +1,8 @@ +/// +import { Currency } from '@uniswap/sdk-core'; +interface TokenBaseProps { + value: Currency; + onClick: (value: Currency) => void; +} +export default function TokenBase({ value, onClick }: TokenBaseProps): JSX.Element; +export {}; diff --git a/dist2/types/lib/components/TokenSelect/TokenButton.d.ts b/dist2/types/lib/components/TokenSelect/TokenButton.d.ts new file mode 100644 index 00000000000..ef749495f02 --- /dev/null +++ b/dist2/types/lib/components/TokenSelect/TokenButton.d.ts @@ -0,0 +1,10 @@ +/// +import { Currency } from '@uniswap/sdk-core'; +interface TokenButtonProps { + value?: Currency; + collapsed: boolean; + disabled?: boolean; + onClick: () => void; +} +export default function TokenButton({ value, collapsed, disabled, onClick }: TokenButtonProps): JSX.Element; +export {}; diff --git a/dist2/types/lib/components/TokenSelect/TokenOptions.d.ts b/dist2/types/lib/components/TokenSelect/TokenOptions.d.ts new file mode 100644 index 00000000000..b1ec4cabc11 --- /dev/null +++ b/dist2/types/lib/components/TokenSelect/TokenOptions.d.ts @@ -0,0 +1,12 @@ +import { Currency } from '@uniswap/sdk-core'; +import { KeyboardEvent } from 'react'; +interface TokenOptionsHandle { + onKeyDown: (e: KeyboardEvent) => void; + blur: () => void; +} +interface TokenOptionsProps { + tokens: Currency[]; + onSelect: (token: Currency) => void; +} +declare const TokenOptions: import("react").ForwardRefExoticComponent>; +export default TokenOptions; diff --git a/dist2/types/lib/components/TokenSelect/index.d.ts b/dist2/types/lib/components/TokenSelect/index.d.ts new file mode 100644 index 00000000000..8986ce5f391 --- /dev/null +++ b/dist2/types/lib/components/TokenSelect/index.d.ts @@ -0,0 +1,15 @@ +/// +import { Currency } from '@uniswap/sdk-core'; +interface TokenSelectDialogProps { + value?: Currency; + onSelect: (token: Currency) => void; +} +export declare function TokenSelectDialog({ value, onSelect }: TokenSelectDialogProps): JSX.Element; +interface TokenSelectProps { + value?: Currency; + collapsed: boolean; + disabled?: boolean; + onSelect: (value: Currency) => void; +} +export default function TokenSelect({ value, collapsed, disabled, onSelect }: TokenSelectProps): JSX.Element; +export {}; diff --git a/dist2/types/lib/components/Tooltip.d.ts b/dist2/types/lib/components/Tooltip.d.ts new file mode 100644 index 00000000000..8be6e4ef0f4 --- /dev/null +++ b/dist2/types/lib/components/Tooltip.d.ts @@ -0,0 +1,11 @@ +import { Placement } from '@popperjs/core'; +import { Icon } from 'lib/icons'; +import { ReactNode } from 'react'; +interface TooltipInterface { + icon?: Icon; + children: ReactNode; + placement: Placement; + contained?: true; +} +export default function Tooltip({ icon: Icon, children, placement, contained, }: TooltipInterface): JSX.Element; +export {}; diff --git a/dist2/types/lib/components/Wallet.d.ts b/dist2/types/lib/components/Wallet.d.ts new file mode 100644 index 00000000000..5e8313c0e4d --- /dev/null +++ b/dist2/types/lib/components/Wallet.d.ts @@ -0,0 +1,4 @@ +/// +export default function Wallet({ disabled }: { + disabled?: boolean; +}): JSX.Element | null; diff --git a/dist2/types/lib/components/Web3Provider.d.ts b/dist2/types/lib/components/Web3Provider.d.ts new file mode 100644 index 00000000000..9e8c6100935 --- /dev/null +++ b/dist2/types/lib/components/Web3Provider.d.ts @@ -0,0 +1,9 @@ +import { ReactNode } from 'react'; +import { Provider as EthProvider } from 'widgets-web3-react/types'; +interface Web3ProviderProps { + jsonRpcEndpoint?: string; + provider?: EthProvider; + children: ReactNode; +} +export default function Web3Provider({ jsonRpcEndpoint, provider, children }: Web3ProviderProps): JSX.Element; +export {}; diff --git a/dist2/types/lib/components/Widget.d.ts b/dist2/types/lib/components/Widget.d.ts new file mode 100644 index 00000000000..baf16907b76 --- /dev/null +++ b/dist2/types/lib/components/Widget.d.ts @@ -0,0 +1,16 @@ +import { SupportedLocale } from 'constants/locales'; +import { Theme } from 'lib/theme'; +import { ComponentProps, JSXElementConstructor, PropsWithChildren } from 'react'; +import { Provider as EthProvider } from 'widgets-web3-react/types'; +import { ErrorHandler } from './Error/ErrorBoundary'; +export declare type WidgetProps | undefined = undefined> = { + theme?: Theme; + locale?: SupportedLocale; + provider?: EthProvider; + jsonRpcEndpoint?: string; + width?: string | number; + dialog?: HTMLElement | null; + className?: string; + onError?: ErrorHandler; +} & (T extends JSXElementConstructor ? ComponentProps : {}); +export default function Widget(props: PropsWithChildren): JSX.Element; diff --git a/dist2/types/lib/cosmos.decorator.d.ts b/dist2/types/lib/cosmos.decorator.d.ts new file mode 100644 index 00000000000..23ed708c483 --- /dev/null +++ b/dist2/types/lib/cosmos.decorator.d.ts @@ -0,0 +1,4 @@ +import { JSXElementConstructor, ReactElement } from 'react'; +export default function WidgetDecorator({ children, }: { + children: ReactElement>; +}): JSX.Element; diff --git a/dist2/types/lib/cosmos/components/Widget.d.ts b/dist2/types/lib/cosmos/components/Widget.d.ts new file mode 100644 index 00000000000..33412bd8eba --- /dev/null +++ b/dist2/types/lib/cosmos/components/Widget.d.ts @@ -0,0 +1,6 @@ +import { ReactNode } from 'react'; +import { MetaMask } from 'widgets-web3-react/metamask'; +export declare const metaMask: MetaMask; +export default function Wrapper({ children }: { + children: ReactNode; +}): JSX.Element; diff --git a/dist2/types/lib/errors.d.ts b/dist2/types/lib/errors.d.ts new file mode 100644 index 00000000000..b055d2150f2 --- /dev/null +++ b/dist2/types/lib/errors.d.ts @@ -0,0 +1,3 @@ +export declare class IntegrationError extends Error { + constructor(message: string); +} diff --git a/dist2/types/lib/hooks/multicall.d.ts b/dist2/types/lib/hooks/multicall.d.ts new file mode 100644 index 00000000000..16b1ae99eb6 --- /dev/null +++ b/dist2/types/lib/hooks/multicall.d.ts @@ -0,0 +1,9 @@ +import multicall from 'lib/state/multicall'; +import { SkipFirst } from 'types/tuple'; +export type { CallStateResult } from '@uniswap/redux-multicall'; +export { NEVER_RELOAD } from '@uniswap/redux-multicall'; +declare type SkipFirstTwoParams any> = SkipFirst, 2>; +export declare function useMultipleContractSingleData(...args: SkipFirstTwoParams): import("@uniswap/redux-multicall").CallState[]; +export declare function useSingleCallResult(...args: SkipFirstTwoParams): import("@uniswap/redux-multicall").CallState; +export declare function useSingleContractMultipleData(...args: SkipFirstTwoParams): import("@uniswap/redux-multicall").CallState[]; +export declare function useSingleContractWithCallData(...args: SkipFirstTwoParams): import("@uniswap/redux-multicall").CallState[]; diff --git a/dist2/types/lib/hooks/swap/index.d.ts b/dist2/types/lib/hooks/swap/index.d.ts new file mode 100644 index 00000000000..8176899d342 --- /dev/null +++ b/dist2/types/lib/hooks/swap/index.d.ts @@ -0,0 +1,6 @@ +import { Currency } from '@uniswap/sdk-core'; +import { Field } from 'lib/state/swap'; +export { default as useSwapInfo } from './useSwapInfo'; +export declare function useSwitchSwapCurrencies(): () => void; +export declare function useSwapCurrency(field: Field): [Currency | undefined, (currency?: Currency) => void]; +export declare function useSwapAmount(field: Field): [string | undefined, (amount: string) => void]; diff --git a/dist2/types/lib/hooks/swap/useSwapApproval.d.ts b/dist2/types/lib/hooks/swap/useSwapApproval.d.ts new file mode 100644 index 00000000000..e0c9ba9becc --- /dev/null +++ b/dist2/types/lib/hooks/swap/useSwapApproval.d.ts @@ -0,0 +1,13 @@ +import { Trade } from '@uniswap/router-sdk'; +import { Currency, Percent, Token, TradeType } from '@uniswap/sdk-core'; +import { Trade as V2Trade } from '@uniswap/v2-sdk'; +import { Trade as V3Trade } from '@uniswap/v3-sdk'; +import { ApprovalState } from '../useApproval'; +export { ApprovalState } from '../useApproval'; +export declare function useSwapRouterAddress(trade: V2Trade | V3Trade | Trade | undefined): string | undefined; +export default function useSwapApproval(trade: V2Trade | V3Trade | Trade | undefined, allowedSlippage: Percent, useIsPendingApproval: (token?: Token, spender?: string) => boolean): [ApprovalState, () => Promise<{ + response: import("@ethersproject/abstract-provider").TransactionResponse; + tokenAddress: string; + spenderAddress: string; +} | undefined>]; +export declare function useSwapApprovalOptimizedTrade(trade: Trade | undefined, allowedSlippage: Percent, useIsPendingApproval: (token?: Token, spender?: string) => boolean): V2Trade | V3Trade | Trade | undefined; diff --git a/dist2/types/lib/hooks/swap/useSwapInfo.d.ts b/dist2/types/lib/hooks/swap/useSwapInfo.d.ts new file mode 100644 index 00000000000..42f0298059d --- /dev/null +++ b/dist2/types/lib/hooks/swap/useSwapInfo.d.ts @@ -0,0 +1,23 @@ +import { Currency, CurrencyAmount, Percent, TradeType } from '@uniswap/sdk-core'; +import { Field } from 'lib/state/swap'; +import { InterfaceTrade, TradeState } from 'state/routing/types'; +interface SwapInfo { + currencies: { + [field in Field]?: Currency; + }; + currencyBalances: { + [field in Field]?: CurrencyAmount; + }; + currencyAmounts: { + [field in Field]?: CurrencyAmount; + }; + trade: { + trade?: InterfaceTrade; + state: TradeState; + }; + allowedSlippage: Percent; +} +export declare function SwapInfoUpdater(): null; +/** Requires that SwapInfoUpdater be installed in the DOM tree. **/ +export default function useSwapInfo(): SwapInfo; +export {}; diff --git a/dist2/types/lib/hooks/transactions/index.d.ts b/dist2/types/lib/hooks/transactions/index.d.ts new file mode 100644 index 00000000000..dbd5a0574bb --- /dev/null +++ b/dist2/types/lib/hooks/transactions/index.d.ts @@ -0,0 +1,10 @@ +/// +import { Token } from '@uniswap/sdk-core'; +import { Transaction, TransactionInfo } from 'lib/state/transactions'; +export declare function usePendingTransactions(): { + [hash: string]: Transaction; +}; +export declare function useAddTransaction(): (info: TransactionInfo) => void; +/** Returns the hash of a pending approval transaction, if it exists. */ +export declare function usePendingApproval(token?: Token, spender?: string): string | undefined; +export declare function TransactionsUpdater(): JSX.Element; diff --git a/dist2/types/lib/hooks/transactions/updater.d.ts b/dist2/types/lib/hooks/transactions/updater.d.ts new file mode 100644 index 00000000000..a10352fa162 --- /dev/null +++ b/dist2/types/lib/hooks/transactions/updater.d.ts @@ -0,0 +1,24 @@ +import { TransactionReceipt } from '@ethersproject/abstract-provider'; +interface Transaction { + addedTime: number; + receipt?: unknown; + lastCheckedBlockNumber?: number; +} +export declare function shouldCheck(lastBlockNumber: number, tx: Transaction): boolean; +interface UpdaterProps { + pendingTransactions: { + [hash: string]: Transaction; + }; + onCheck: (tx: { + chainId: number; + hash: string; + blockNumber: number; + }) => void; + onReceipt: (tx: { + chainId: number; + hash: string; + receipt: TransactionReceipt; + }) => void; +} +export default function Updater({ pendingTransactions, onCheck, onReceipt }: UpdaterProps): null; +export {}; diff --git a/dist2/types/lib/hooks/useActiveWeb3React.d.ts b/dist2/types/lib/hooks/useActiveWeb3React.d.ts new file mode 100644 index 00000000000..293c9484215 --- /dev/null +++ b/dist2/types/lib/hooks/useActiveWeb3React.d.ts @@ -0,0 +1,12 @@ +import { Web3ReactState } from 'lib/state/web3'; +import { Web3ReactHooks } from 'widgets-web3-react/core'; +export declare function useActiveWeb3ReactState(): Web3ReactState; +export declare function useActiveWeb3ReactHooks(): Web3ReactHooks; +export default function useActiveWeb3React(): { + connector: import("widgets-web3-react/types").Connector; + library: import("@ethersproject/providers").Web3Provider | undefined; + chainId: number | undefined; + account: string | undefined; + active: boolean; + error: Error | undefined; +}; diff --git a/dist2/types/lib/hooks/useApproval.d.ts b/dist2/types/lib/hooks/useApproval.d.ts new file mode 100644 index 00000000000..407f8978791 --- /dev/null +++ b/dist2/types/lib/hooks/useApproval.d.ts @@ -0,0 +1,17 @@ +import { TransactionResponse } from '@ethersproject/providers'; +import { Currency, CurrencyAmount, Token } from '@uniswap/sdk-core'; +export declare enum ApprovalState { + UNKNOWN = "UNKNOWN", + NOT_APPROVED = "NOT_APPROVED", + PENDING = "PENDING", + APPROVED = "APPROVED" +} +export declare function useApprovalStateForSpender(amountToApprove: CurrencyAmount | undefined, spender: string | undefined, useIsPendingApproval: (token?: Token, spender?: string) => boolean): ApprovalState; +export declare function useApproval(amountToApprove: CurrencyAmount | undefined, spender: string | undefined, useIsPendingApproval: (token?: Token, spender?: string) => boolean): [ + ApprovalState, + () => Promise<{ + response: TransactionResponse; + tokenAddress: string; + spenderAddress: string; + } | undefined> +]; diff --git a/dist2/types/lib/hooks/useBlockNumber.d.ts b/dist2/types/lib/hooks/useBlockNumber.d.ts new file mode 100644 index 00000000000..ddc1a124e86 --- /dev/null +++ b/dist2/types/lib/hooks/useBlockNumber.d.ts @@ -0,0 +1,4 @@ +export declare function BlockUpdater(): null; +/** Requires that BlockUpdater be installed in the DOM tree. */ +export default function useBlockNumber(): number | undefined; +export declare function useFastForwardBlockNumber(): (block: number) => void; diff --git a/dist2/types/lib/hooks/useCurrency.d.ts b/dist2/types/lib/hooks/useCurrency.d.ts new file mode 100644 index 00000000000..72d12dbdde3 --- /dev/null +++ b/dist2/types/lib/hooks/useCurrency.d.ts @@ -0,0 +1,26 @@ +import { Currency, Token } from '@uniswap/sdk-core'; +import { TokenMap } from './useTokenList'; +/** + * Returns a Token from the tokenAddress. + * Returns null if token is loading or null was passed. + * Returns undefined if tokenAddress is invalid or token does not exist. + */ +export declare function useTokenFromMap(tokens: TokenMap, tokenAddress?: string | null): Token | null | undefined; +/** + * Returns a Token from the tokenAddress. + * Returns null if token is loading or null was passed. + * Returns undefined if tokenAddress is invalid or token does not exist. + */ +export declare function useToken(tokenAddress?: string | null): Token | null | undefined; +/** + * Returns a Currency from the currencyId. + * Returns null if currency is loading or null was passed. + * Returns undefined if currencyId is invalid or token does not exist. + */ +export declare function useCurrencyFromMap(tokens: TokenMap, currencyId?: string | null): Currency | null | undefined; +/** + * Returns a Currency from the currencyId. + * Returns null if currency is loading or null was passed. + * Returns undefined if currencyId is invalid or token does not exist. + */ +export default function useCurrency(currencyId?: string | null): Currency | null | undefined; diff --git a/dist2/types/lib/hooks/useCurrencyBalance.d.ts b/dist2/types/lib/hooks/useCurrencyBalance.d.ts new file mode 100644 index 00000000000..5d6125f85f9 --- /dev/null +++ b/dist2/types/lib/hooks/useCurrencyBalance.d.ts @@ -0,0 +1,19 @@ +import { Currency, CurrencyAmount, Token } from '@uniswap/sdk-core'; +/** + * Returns a map of the given addresses to their eventually consistent ETH balances. + */ +export declare function useNativeCurrencyBalances(uncheckedAddresses?: (string | undefined)[]): { + [address: string]: CurrencyAmount | undefined; +}; +/** + * Returns a map of token addresses to their eventually consistent token balances for a single account. + */ +export declare function useTokenBalancesWithLoadingIndicator(address?: string, tokens?: (Token | undefined)[]): [{ + [tokenAddress: string]: CurrencyAmount | undefined; +}, boolean]; +export declare function useTokenBalances(address?: string, tokens?: (Token | undefined)[]): { + [tokenAddress: string]: CurrencyAmount | undefined; +}; +export declare function useTokenBalance(account?: string, token?: Token): CurrencyAmount | undefined; +export declare function useCurrencyBalances(account?: string, currencies?: (Currency | undefined)[]): (CurrencyAmount | undefined)[]; +export default function useCurrencyBalance(account?: string, currency?: Currency): CurrencyAmount | undefined; diff --git a/dist2/types/lib/hooks/useCurrencyColor.d.ts b/dist2/types/lib/hooks/useCurrencyColor.d.ts new file mode 100644 index 00000000000..ca480dfeaa1 --- /dev/null +++ b/dist2/types/lib/hooks/useCurrencyColor.d.ts @@ -0,0 +1,3 @@ +import { Currency } from '@uniswap/sdk-core'; +export declare function usePrefetchCurrencyColor(token?: Currency): void; +export default function useCurrencyColor(token?: Currency): string | undefined; diff --git a/dist2/types/lib/hooks/useCurrencyLogoURIs.d.ts b/dist2/types/lib/hooks/useCurrencyLogoURIs.d.ts new file mode 100644 index 00000000000..02927663e41 --- /dev/null +++ b/dist2/types/lib/hooks/useCurrencyLogoURIs.d.ts @@ -0,0 +1,2 @@ +import { Currency } from '@uniswap/sdk-core'; +export default function useCurrencyLogoURIs(currency?: Currency | null): string[]; diff --git a/dist2/types/lib/hooks/useInterval.d.ts b/dist2/types/lib/hooks/useInterval.d.ts new file mode 100644 index 00000000000..56cd5f3250a --- /dev/null +++ b/dist2/types/lib/hooks/useInterval.d.ts @@ -0,0 +1,7 @@ +/** + * Invokes callback repeatedly over an interval defined by the delay + * @param callback + * @param delay if null, the callback will not be invoked + * @param leading if true, the callback will be invoked immediately (on the leading edge); otherwise, it will be invoked after delay + */ +export default function useInterval(callback: () => void, delay: null | number, leading?: boolean): void; diff --git a/dist2/types/lib/hooks/useNativeCurrency.d.ts b/dist2/types/lib/hooks/useNativeCurrency.d.ts new file mode 100644 index 00000000000..7f53cceee6c --- /dev/null +++ b/dist2/types/lib/hooks/useNativeCurrency.d.ts @@ -0,0 +1,2 @@ +import { NativeCurrency } from '@uniswap/sdk-core'; +export default function useNativeCurrency(): NativeCurrency; diff --git a/dist2/types/lib/hooks/useNativeEvent.d.ts b/dist2/types/lib/hooks/useNativeEvent.d.ts new file mode 100644 index 00000000000..2bf361862ad --- /dev/null +++ b/dist2/types/lib/hooks/useNativeEvent.d.ts @@ -0,0 +1 @@ +export default function useNativeEvent(element: HTMLElement | null, ...eventListener: Parameters): void; diff --git a/dist2/types/lib/hooks/useScrollbar.d.ts b/dist2/types/lib/hooks/useScrollbar.d.ts new file mode 100644 index 00000000000..3c070fc6b53 --- /dev/null +++ b/dist2/types/lib/hooks/useScrollbar.d.ts @@ -0,0 +1,5 @@ +interface ScrollbarOptions { + padded?: boolean; +} +export default function useScrollbar(element: HTMLElement | null, { padded }?: ScrollbarOptions): import("styled-components").FlattenInterpolation>; +export {}; diff --git a/dist2/types/lib/hooks/useTokenList/fetchTokenList.d.ts b/dist2/types/lib/hooks/useTokenList/fetchTokenList.d.ts new file mode 100644 index 00000000000..005348a0601 --- /dev/null +++ b/dist2/types/lib/hooks/useTokenList/fetchTokenList.d.ts @@ -0,0 +1,4 @@ +import type { TokenList } from '@uniswap/token-lists'; +export declare const DEFAULT_TOKEN_LIST = "https://gateway.ipfs.io/ipns/tokens.uniswap.org"; +/** Fetches and validates a token list. */ +export default function fetchTokenList(listUrl: string, resolveENSContentHash: (ensName: string) => Promise): Promise; diff --git a/dist2/types/lib/hooks/useTokenList/filtering.d.ts b/dist2/types/lib/hooks/useTokenList/filtering.d.ts new file mode 100644 index 00000000000..82ff3cb5720 --- /dev/null +++ b/dist2/types/lib/hooks/useTokenList/filtering.d.ts @@ -0,0 +1,4 @@ +import { NativeCurrency, Token } from '@uniswap/sdk-core'; +import { TokenInfo } from '@uniswap/token-lists'; +/** Creates a filter function that filters tokens that do not match the query. */ +export declare function getTokenFilter(query: string): (token: T | NativeCurrency) => boolean; diff --git a/dist2/types/lib/hooks/useTokenList/index.d.ts b/dist2/types/lib/hooks/useTokenList/index.d.ts new file mode 100644 index 00000000000..5ca14c093d6 --- /dev/null +++ b/dist2/types/lib/hooks/useTokenList/index.d.ts @@ -0,0 +1,10 @@ +import { Token } from '@uniswap/sdk-core'; +import { TokenInfo } from '@uniswap/token-lists'; +import { WrappedTokenInfo } from 'state/lists/wrappedTokenInfo'; +export { DEFAULT_TOKEN_LIST } from './fetchTokenList'; +export default function useTokenList(list?: string | TokenInfo[]): WrappedTokenInfo[]; +export declare type TokenMap = { + [address: string]: Token; +}; +export declare function useTokenMap(): TokenMap; +export declare function useQueryTokenList(query: string): (import("@uniswap/sdk-core").NativeCurrency | WrappedTokenInfo)[]; diff --git a/dist2/types/lib/hooks/useTokenList/querying.d.ts b/dist2/types/lib/hooks/useTokenList/querying.d.ts new file mode 100644 index 00000000000..ac3c94aba1d --- /dev/null +++ b/dist2/types/lib/hooks/useTokenList/querying.d.ts @@ -0,0 +1,2 @@ +import { WrappedTokenInfo } from 'state/lists/wrappedTokenInfo'; +export declare function useQueryTokens(query: string, tokens: WrappedTokenInfo[]): (import("@uniswap/sdk-core").NativeCurrency | WrappedTokenInfo)[]; diff --git a/dist2/types/lib/hooks/useTokenList/sorting.d.ts b/dist2/types/lib/hooks/useTokenList/sorting.d.ts new file mode 100644 index 00000000000..533613fe334 --- /dev/null +++ b/dist2/types/lib/hooks/useTokenList/sorting.d.ts @@ -0,0 +1,7 @@ +import { Token } from '@uniswap/sdk-core'; +import { TokenInfo } from '@uniswap/token-lists'; +import { useTokenBalances } from 'state/wallet/hooks'; +/** Sorts tokens by currency amount (descending), then symbol (ascending). */ +export declare function tokenComparator(balances: ReturnType, a: Token, b: Token): 1 | -1; +/** Sorts tokens by query, giving precedence to exact matches and partial matches. */ +export declare function useSortTokensByQuery(query: string, tokens?: T[]): T[]; diff --git a/dist2/types/lib/hooks/useTokenList/utils.d.ts b/dist2/types/lib/hooks/useTokenList/utils.d.ts new file mode 100644 index 00000000000..8cc586c4623 --- /dev/null +++ b/dist2/types/lib/hooks/useTokenList/utils.d.ts @@ -0,0 +1,13 @@ +import { TokenInfo, TokenList } from '@uniswap/token-lists'; +import { WrappedTokenInfo } from 'state/lists/wrappedTokenInfo'; +declare type TokenMap = Readonly<{ + [tokenAddress: string]: { + token: WrappedTokenInfo; + list?: TokenList; + }; +}>; +export declare type ChainTokenMap = Readonly<{ + [chainId: number]: TokenMap; +}>; +export declare function tokensToChainTokenMap(tokens: TokenList | TokenInfo[]): ChainTokenMap; +export {}; diff --git a/dist2/types/lib/hooks/useTokenList/validateTokenList.d.ts b/dist2/types/lib/hooks/useTokenList/validateTokenList.d.ts new file mode 100644 index 00000000000..cf8ba766751 --- /dev/null +++ b/dist2/types/lib/hooks/useTokenList/validateTokenList.d.ts @@ -0,0 +1,11 @@ +import type { TokenInfo, TokenList } from '@uniswap/token-lists'; +/** + * Validates an array of tokens. + * @param json the TokenInfo[] to validate + */ +export declare function validateTokens(json: TokenInfo[]): Promise; +/** + * Validates a token list. + * @param json the TokenList to validate + */ +export default function validateTokenList(json: TokenList): Promise; diff --git a/dist2/types/lib/hooks/useUnmount.d.ts b/dist2/types/lib/hooks/useUnmount.d.ts new file mode 100644 index 00000000000..4e42d90ddaa --- /dev/null +++ b/dist2/types/lib/hooks/useUnmount.d.ts @@ -0,0 +1,7 @@ +import { RefObject } from 'react'; +export declare const UNMOUNTING = "unmounting"; +/** + * Delays a node's unmounting so that an animation may be applied. + * An animation *must* be applied, or the node will not unmount. + */ +export default function useUnmount(node: RefObject): void; diff --git a/dist2/types/lib/i18n.d.ts b/dist2/types/lib/i18n.d.ts new file mode 100644 index 00000000000..2e59f6d0d4d --- /dev/null +++ b/dist2/types/lib/i18n.d.ts @@ -0,0 +1,11 @@ +import { SupportedLocale } from 'constants/locales'; +import { ReactNode } from 'react'; +export declare function dynamicActivate(locale: SupportedLocale): Promise; +interface ProviderProps { + locale: SupportedLocale; + forceRenderAfterLocaleChange?: boolean; + onActivate?: (locale: SupportedLocale) => void; + children: ReactNode; +} +export declare function Provider({ locale, forceRenderAfterLocaleChange, onActivate, children }: ProviderProps): JSX.Element; +export {}; diff --git a/dist2/types/lib/icons/index.d.ts b/dist2/types/lib/icons/index.d.ts new file mode 100644 index 00000000000..5d27ecc037d --- /dev/null +++ b/dist2/types/lib/icons/index.d.ts @@ -0,0 +1,80 @@ +import { Color } from 'lib/theme'; +import { FunctionComponent, SVGProps } from 'react'; +import { Icon as FeatherIcon } from 'react-feather'; +declare type SVGIcon = FunctionComponent>; +declare function icon(Icon: FeatherIcon | SVGIcon): import("styled-components").StyledComponent; +export declare type Icon = ReturnType; +export declare const largeIconCss: import("styled-components").FlattenInterpolation>; +interface LargeIconProps { + icon: Icon; + color?: Color; + size?: number; + className?: string; +} +export declare function LargeIcon({ icon: Icon, color, size, className }: LargeIconProps): JSX.Element; +export declare const AlertTriangle: import("styled-components").StyledComponent; +export declare const ArrowDown: import("styled-components").StyledComponent; +export declare const ArrowRight: import("styled-components").StyledComponent; +export declare const ArrowUp: import("styled-components").StyledComponent; +export declare const CheckCircle: import("styled-components").StyledComponent; +export declare const ChevronDown: import("styled-components").StyledComponent; +export declare const Clock: import("styled-components").StyledComponent; +export declare const CreditCard: import("styled-components").StyledComponent; +export declare const HelpCircle: import("styled-components").StyledComponent; +export declare const Info: import("styled-components").StyledComponent; +export declare const Link: import("styled-components").StyledComponent; +export declare const Settings: import("styled-components").StyledComponent; +export declare const Slash: import("styled-components").StyledComponent; +export declare const Trash2: import("styled-components").StyledComponent; +export declare const X: import("styled-components").StyledComponent; +export declare const Check: import("styled-components").StyledComponent; +export declare const Expando: import("styled-components").StyledComponent; +export declare const Logo: import("styled-components").StyledComponent; +export declare const Spinner: import("styled-components").StyledComponent; +export {}; diff --git a/dist2/types/lib/index.d.ts b/dist2/types/lib/index.d.ts new file mode 100644 index 00000000000..61fa261a2fe --- /dev/null +++ b/dist2/types/lib/index.d.ts @@ -0,0 +1,5 @@ +/// +import Swap from './components/Swap'; +import { WidgetProps } from './components/Widget'; +export declare type SwapWidgetProps = WidgetProps; +export declare function SwapWidget({ ...props }: SwapWidgetProps): JSX.Element; diff --git a/dist2/types/lib/state/atoms.d.ts b/dist2/types/lib/state/atoms.d.ts new file mode 100644 index 00000000000..2d9068c66da --- /dev/null +++ b/dist2/types/lib/state/atoms.d.ts @@ -0,0 +1,11 @@ +import { Draft } from 'immer'; +import { WritableAtom } from 'jotai'; +/** + * Creates a derived atom whose value is the picked object property. + * By default, the setter acts as a primitive atom's, changing the original atom. + * A custom setter may also be passed, which uses an Immer Draft so that it may be mutated directly. + */ +export declare function pickAtom, Update>(anAtom: WritableAtom, key: Key, setter: (draft: Draft[Key], update: Update) => Draft[Key]): WritableAtom; +export declare function pickAtom, Update extends Value[Key]>(anAtom: WritableAtom, key: Key, setter?: (draft: Draft[Key], update: Update) => Draft[Key]): WritableAtom; +/** Sets a togglable atom to invert its state at the next render. */ +export declare function setTogglable(draft: boolean): boolean; diff --git a/dist2/types/lib/state/multicall.d.ts b/dist2/types/lib/state/multicall.d.ts new file mode 100644 index 00000000000..69ed9ebe367 --- /dev/null +++ b/dist2/types/lib/state/multicall.d.ts @@ -0,0 +1,47 @@ +/// +declare const multicall: { + reducerPath: string; + reducer: import("redux").Reducer; + actions: import("@reduxjs/toolkit").CaseReducerActions<{ + addMulticallListeners: (state: import("immer/dist/internal").WritableDraft, action: { + payload: import("@uniswap/redux-multicall").MulticallListenerPayload; + type: string; + }) => void; + removeMulticallListeners: (state: import("immer/dist/internal").WritableDraft, action: { + payload: import("@uniswap/redux-multicall").MulticallListenerPayload; + type: string; + }) => void; + fetchingMulticallResults: (state: import("immer/dist/internal").WritableDraft, action: { + payload: import("@uniswap/redux-multicall").MulticallFetchingPayload; + type: string; + }) => void; + errorFetchingMulticallResults: (state: import("immer/dist/internal").WritableDraft, action: { + payload: import("@uniswap/redux-multicall").MulticallFetchingPayload; + type: string; + }) => void; + updateMulticallResults: (state: import("immer/dist/internal").WritableDraft, action: { + payload: import("@uniswap/redux-multicall").MulticallResultsPayload; + type: string; + }) => void; + }>; + hooks: { + useMultipleContractSingleData: (chainId: number | undefined, latestBlockNumber: number | undefined, addresses: (string | undefined)[], contractInterface: import("@ethersproject/abi").Interface, methodName: string, callInputs?: (string | number | import("ethers").BigNumber | (string | number | import("ethers").BigNumber)[] | undefined)[] | undefined, options?: (Partial & { + gasRequired?: number | undefined; + }) | undefined) => import("@uniswap/redux-multicall").CallState[]; + useSingleContractMultipleData: (chainId: number | undefined, latestBlockNumber: number | undefined, contract: import("ethers").Contract | null | undefined, methodName: string, callInputs: ((string | number | import("ethers").BigNumber | (string | number | import("ethers").BigNumber)[] | undefined)[] | undefined)[], options?: (Partial & { + gasRequired?: number | undefined; + }) | undefined) => import("@uniswap/redux-multicall").CallState[]; + useSingleContractWithCallData: (chainId: number | undefined, latestBlockNumber: number | undefined, contract: import("ethers").Contract | null | undefined, callDatas: string[], options?: (Partial & { + gasRequired?: number | undefined; + }) | undefined) => import("@uniswap/redux-multicall").CallState[]; + useSingleCallResult: (chainId: number | undefined, latestBlockNumber: number | undefined, contract: import("ethers").Contract | null | undefined, methodName: string, inputs?: (string | number | import("ethers").BigNumber | (string | number | import("ethers").BigNumber)[] | undefined)[] | undefined, options?: (Partial & { + gasRequired?: number | undefined; + }) | undefined) => import("@uniswap/redux-multicall").CallState; + }; + Updater: (props: Pick) => JSX.Element; +}; +export declare const store: import("redux").Store; +export default multicall; +export declare function MulticallUpdater(): JSX.Element; diff --git a/dist2/types/lib/state/settings.d.ts b/dist2/types/lib/state/settings.d.ts new file mode 100644 index 00000000000..327d88d3a9d --- /dev/null +++ b/dist2/types/lib/state/settings.d.ts @@ -0,0 +1,14 @@ +import { Percent } from '@uniswap/sdk-core'; +export declare const TRANSACTION_TTL_DEFAULT = 40; +interface Settings { + maxSlippage: Percent | 'auto'; + transactionTtl: number | undefined; + mockTogglable: boolean; + clientSideRouter: boolean; +} +export declare const settingsAtom: import("jotai").WritableAtom Settings), void>; +export declare const maxSlippageAtom: import("jotai").WritableAtom; +export declare const transactionTtlAtom: import("jotai").WritableAtom; +export declare const mockTogglableAtom: import("jotai").WritableAtom; +export declare const clientSideRouterAtom: import("jotai").WritableAtom; +export {}; diff --git a/dist2/types/lib/state/swap.d.ts b/dist2/types/lib/state/swap.d.ts new file mode 100644 index 00000000000..3c2d8b87c8a --- /dev/null +++ b/dist2/types/lib/state/swap.d.ts @@ -0,0 +1,16 @@ +import { Currency } from '@uniswap/sdk-core'; +export declare enum Field { + INPUT = "INPUT", + OUTPUT = "OUTPUT" +} +export interface Swap { + independentField: Field; + readonly amount: string; + readonly [Field.INPUT]?: Currency; + readonly [Field.OUTPUT]?: Currency; + integratorFee?: number; +} +export declare const swapAtom: import("jotai").WritableAtom) => void), void>; +export declare const independentFieldAtom: import("jotai").WritableAtom; +export declare const integratorFeeAtom: import("jotai").WritableAtom; +export declare const amountAtom: import("jotai").WritableAtom; diff --git a/dist2/types/lib/state/transactions.d.ts b/dist2/types/lib/state/transactions.d.ts new file mode 100644 index 00000000000..d7b474eae36 --- /dev/null +++ b/dist2/types/lib/state/transactions.d.ts @@ -0,0 +1,54 @@ +import { TransactionReceipt, TransactionResponse } from '@ethersproject/abstract-provider'; +import { TradeType } from '@uniswap/sdk-core'; +export declare enum TransactionType { + APPROVAL = 0, + SWAP = 1 +} +interface BaseTransactionInfo { + type: TransactionType; + response: TransactionResponse; +} +export interface ApprovalTransactionInfo extends BaseTransactionInfo { + type: TransactionType.APPROVAL; + tokenAddress: string; + spenderAddress: string; +} +export interface SwapTransactionInfo extends BaseTransactionInfo { + type: TransactionType.SWAP; + tradeType: TradeType; + inputCurrencyAddress: string; + outputCurrencyAddress: string; +} +export interface InputSwapTransactionInfo extends SwapTransactionInfo { + tradeType: TradeType.EXACT_INPUT; + inputCurrencyAmount: string; + expectedOutputCurrencyAmount: string; + minimumOutputCurrencyAmount: string; +} +export interface OutputSwapTransactionInfo extends SwapTransactionInfo { + tradeType: TradeType.EXACT_OUTPUT; + outputCurrencyAmount: string; + expectedInputCurrencyAmount: string; + maximumInputCurrencyAmount: string; +} +export declare type TransactionInfo = ApprovalTransactionInfo | SwapTransactionInfo; +export interface Transaction { + addedTime: number; + lastCheckedBlockNumber?: number; + receipt?: TransactionReceipt; + info: T; +} +export declare const transactionsAtom: import("jotai").WritableAtom<{ + [chainId: string]: { + [hash: string]: Transaction; + }; +}, { + [chainId: string]: { + [hash: string]: Transaction; + }; +} | ((draft: import("immer/dist/internal").WritableDraft<{ + [chainId: string]: { + [hash: string]: Transaction; + }; +}>) => void), void>; +export {}; diff --git a/dist2/types/lib/state/web3.d.ts b/dist2/types/lib/state/web3.d.ts new file mode 100644 index 00000000000..d8df4e582f9 --- /dev/null +++ b/dist2/types/lib/state/web3.d.ts @@ -0,0 +1,5 @@ +import { Web3ReactHooks } from 'widgets-web3-react/core'; +import { Connector } from 'widgets-web3-react/types'; +export declare type Web3ReactState = [Connector, Web3ReactHooks]; +export declare const urlAtom: import("jotai").WritableAtom Web3ReactState)), void>; +export declare const injectedAtom: import("jotai").WritableAtom Web3ReactState)), void>; diff --git a/dist2/types/lib/theme/dynamic.d.ts b/dist2/types/lib/theme/dynamic.d.ts new file mode 100644 index 00000000000..5cb3ed723dd --- /dev/null +++ b/dist2/types/lib/theme/dynamic.d.ts @@ -0,0 +1,9 @@ +import { ReactNode } from 'react'; +import { ComputedTheme } from './theme'; +export declare function getDynamicTheme(theme: ComputedTheme, color: string): ComputedTheme; +interface DynamicThemeProviderProps { + color?: string; + children: ReactNode; +} +export declare function DynamicThemeProvider({ color, children }: DynamicThemeProviderProps): JSX.Element; +export {}; diff --git a/dist2/types/lib/theme/index.d.ts b/dist2/types/lib/theme/index.d.ts new file mode 100644 index 00000000000..78d6ff5e752 --- /dev/null +++ b/dist2/types/lib/theme/index.d.ts @@ -0,0 +1,40 @@ +import '../assets/fonts.scss'; +import { ReactNode } from 'react'; +import styled from './styled'; +import { Colors, Theme } from './theme'; +export type { Color, Colors, Theme } from './theme'; +export default styled; +export * from './dynamic'; +export * from './layer'; +export * from './styled'; +export * as ThemedText from './type'; +export declare const lightTheme: Colors; +export declare const darkTheme: Colors; +export declare const defaultTheme: { + accent: string; + container: string; + module: string; + interactive: string; + outline: string; + dialog: string; + primary: string; + secondary: string; + hint: string; + onInteractive: string; + active: string; + success: string; + warning: string; + error: string; + currentColor: "currentColor"; + borderRadius: number; + fontFamily: string; + fontFamilyVariable: string; + fontFamilyCode: string; + tokenColorExtraction: boolean; +}; +export declare function useSystemTheme(): Colors; +interface ThemeProviderProps { + theme?: Theme; + children: ReactNode; +} +export declare function ThemeProvider({ theme, children }: ThemeProviderProps): JSX.Element; diff --git a/dist2/types/lib/theme/layer.d.ts b/dist2/types/lib/theme/layer.d.ts new file mode 100644 index 00000000000..5a101e7c033 --- /dev/null +++ b/dist2/types/lib/theme/layer.d.ts @@ -0,0 +1,5 @@ +export declare enum Layer { + OVERLAY = 100, + DIALOG = 1000, + TOOLTIP = 2000 +} diff --git a/dist2/types/lib/theme/styled.d.ts b/dist2/types/lib/theme/styled.d.ts new file mode 100644 index 00000000000..5fc81be6285 --- /dev/null +++ b/dist2/types/lib/theme/styled.d.ts @@ -0,0 +1,8 @@ +import { keyframes as styledKeyframes, ThemedBaseStyledInterface, ThemedCssFunction, ThemeProviderComponent } from 'styled-components/macro'; +import { ComputedTheme } from './theme'; +declare const _default: ThemedBaseStyledInterface; +export default _default; +export declare const css: ThemedCssFunction; +export declare const keyframes: typeof styledKeyframes; +export declare const useTheme: () => ComputedTheme; +export declare const ThemedProvider: ThemeProviderComponent; diff --git a/dist2/types/lib/theme/theme.d.ts b/dist2/types/lib/theme/theme.d.ts new file mode 100644 index 00000000000..8be6bdfbb2e --- /dev/null +++ b/dist2/types/lib/theme/theme.d.ts @@ -0,0 +1,31 @@ +export interface Colors { + accent: string; + container: string; + module: string; + interactive: string; + outline: string; + dialog: string; + primary: string; + secondary: string; + hint: string; + onInteractive: string; + active: string; + success: string; + warning: string; + error: string; + currentColor: 'currentColor'; +} +export declare type Color = keyof Colors; +export interface Attributes { + borderRadius: boolean | number; + fontFamily: string; + fontFamilyVariable: string; + fontFamilyCode: string; + tokenColorExtraction: boolean; +} +export interface Theme extends Partial, Partial { +} +export interface ComputedTheme extends Omit, Colors { + borderRadius: number; + onHover: (color: string) => string; +} diff --git a/dist2/types/lib/theme/type.d.ts b/dist2/types/lib/theme/type.d.ts new file mode 100644 index 00000000000..5a7693ae0ed --- /dev/null +++ b/dist2/types/lib/theme/type.d.ts @@ -0,0 +1,23 @@ +/// +import { TextProps as TextPropsWithCss } from 'rebass'; +import { Color } from './theme'; +declare type TextProps = Omit & { + color?: Color; +}; +export declare function H1(props: TextProps): JSX.Element; +export declare function H2(props: TextProps): JSX.Element; +export declare function H3(props: TextProps): JSX.Element; +export declare function Subhead1(props: TextProps): JSX.Element; +export declare function Subhead2(props: TextProps): JSX.Element; +export declare function Body1(props: TextProps): JSX.Element; +export declare function Body2(props: TextProps): JSX.Element; +export declare function Caption(props: TextProps): JSX.Element; +export declare function Badge(props: TextProps): JSX.Element; +export declare function ButtonLarge(props: TextProps): JSX.Element; +export declare function ButtonMedium(props: TextProps): JSX.Element; +export declare function ButtonSmall(props: TextProps): JSX.Element; +export declare function TransitionButton(props: TextProps & { + buttonSize: 'small' | 'medium' | 'large'; +}): JSX.Element; +export declare function Code(props: TextProps): JSX.Element; +export {}; diff --git a/dist2/types/lib/utils/contenthashToUri.d.ts b/dist2/types/lib/utils/contenthashToUri.d.ts new file mode 100644 index 00000000000..ae9419f4ef8 --- /dev/null +++ b/dist2/types/lib/utils/contenthashToUri.d.ts @@ -0,0 +1,6 @@ +export declare function hexToUint8Array(hex: string): Uint8Array; +/** + * Returns the URI representation of the content hash for supported codecs + * @param contenthash to decode + */ +export default function contenthashToUri(contenthash: string): string; diff --git a/dist2/types/lib/utils/parseENSAddress.d.ts b/dist2/types/lib/utils/parseENSAddress.d.ts new file mode 100644 index 00000000000..02ec8581e22 --- /dev/null +++ b/dist2/types/lib/utils/parseENSAddress.d.ts @@ -0,0 +1,4 @@ +export default function parseENSAddress(ensAddress: string): { + ensName: string; + ensPath: string | undefined; +} | undefined; diff --git a/dist2/types/lib/utils/resolveENSContentHash.d.ts b/dist2/types/lib/utils/resolveENSContentHash.d.ts new file mode 100644 index 00000000000..67fd282e457 --- /dev/null +++ b/dist2/types/lib/utils/resolveENSContentHash.d.ts @@ -0,0 +1,7 @@ +import { Provider } from '@ethersproject/abstract-provider'; +/** + * Fetches and decodes the result of an ENS contenthash lookup on mainnet to a URI + * @param ensName to resolve + * @param provider provider to use to fetch the data + */ +export default function resolveENSContentHash(ensName: string, provider: Provider): Promise; diff --git a/dist2/types/lib/utils/tryParseCurrencyAmount.d.ts b/dist2/types/lib/utils/tryParseCurrencyAmount.d.ts new file mode 100644 index 00000000000..308726213c3 --- /dev/null +++ b/dist2/types/lib/utils/tryParseCurrencyAmount.d.ts @@ -0,0 +1,6 @@ +import { Currency, CurrencyAmount } from '@uniswap/sdk-core'; +/** + * Parses a CurrencyAmount from the passed string. + * Returns the CurrencyAmount, or undefined if parsing fails. + */ +export default function tryParseCurrencyAmount(value?: string, currency?: T): CurrencyAmount | undefined; diff --git a/dist2/types/lib/utils/uriToHttp.d.ts b/dist2/types/lib/utils/uriToHttp.d.ts new file mode 100644 index 00000000000..165928135bf --- /dev/null +++ b/dist2/types/lib/utils/uriToHttp.d.ts @@ -0,0 +1,5 @@ +/** + * Given a URI that may be ipfs, ipns, http, https, ar, or data protocol, return the fetch-able http(s) URLs for the same content + * @param uri to convert to fetch-able http url + */ +export default function uriToHttp(uri: string): string[]; diff --git a/dist2/types/locales/af-ZA.d.ts b/dist2/types/locales/af-ZA.d.ts new file mode 100644 index 00000000000..75120e0e5c9 --- /dev/null +++ b/dist2/types/locales/af-ZA.d.ts @@ -0,0 +1,593 @@ +export const messages: { + "$-": string; + "$<0/>": string; + "${0}": (string | string[])[]; + "(${0})": (string | string[])[]; + "(View on Explorer)": string; + "(clear all)": string; + "(edit)": string; + "- Remove recipient": string; + "0 UNI / week": string; + "25%": string; + "50%": string; + "75%": string; + "<0/> All Proposals": string; + "<0/> Votes": string; + "<0>Account analytics and accrued fees<1> \u2197 ": string; + "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; + "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; + "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; + "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; + "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; + "<0>Unlock voting to prepare for the next proposal.": string; + "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; + "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; + About: string; + Accept: string; + Account: string; + Active: string; + Add: string; + "Add <0/> and <1/> to Uniswap V2": string; + "Add Delegate +": string; + "Add Liquidity": string; + "Add V2 Liquidity": string; + "Add liquidity.": string; + "Add more liquidity": string; + "Add {0} to Metamask <0/>": (string | string[])[]; + "Add {0}-{1} liquidity": (string | string[])[]; + "Add {0}/{1} V3 liquidity": (string | string[])[]; + "Added {0}": (string | string[])[]; + "Address has no available claim": string; + Against: string; + "Allow LP token migration": string; + "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; + "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; + Allowed: string; + Amount: string; + "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Approval pending <0/>": string; + Approve: string; + "Approve Token": string; + "Approve {0}": (string | string[])[]; + "Approve {0} first": (string | string[])[]; + Approved: string; + Approving: string; + "Approving {0}": (string | string[])[]; + Arbiscan: string; + "Arbitrum Bridge": string; + "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Are you sure?": string; + "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; + "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; + Auto: string; + "Auto Router API": string; + "Available to deposit: {0}": (string | string[])[]; + "Balance: {0}": (string | string[])[]; + "Best for exotic pairs.": string; + "Best for most pairs.": string; + "Best for stable pairs.": string; + "Best for very stable pairs.": string; + "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; + "Blocked address": string; + Bridge: string; + "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; + "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; + Canceled: string; + Change: string; + Charts: string; + "Check network status": string; + "Check out our v3 LP walkthrough and migration guides.": string; + Claim: string; + "Claim <0/> for {0}": (string | string[])[]; + "Claim UNI": string; + "Claim UNI Token": string; + "Claim UNI reward for {0}": (string | string[])[]; + "Claim fees": string; + "Claim your UNI tokens": string; + Claimed: string; + "Claimed UNI!": string; + "Claimed!": string; + Claiming: string; + "Claiming UNI": string; + "Claiming {0} UNI": (string | string[])[]; + "Clear All": string; + "Clear all": string; + Close: string; + Closed: string; + Collect: string; + "Collect as WETH": string; + "Collect fees": string; + "Collect {0}/{1} fees": (string | string[])[]; + Collected: string; + Collecting: string; + "Collecting fees": string; + "Collecting fees will withdraw currently available fees for you.": string; + Confirm: string; + "Confirm Supply": string; + "Confirm Swap": string; + "Confirm swap": string; + "Confirm this transaction in your wallet": string; + "Confirm transaction in wallet": string; + "Connect Wallet": string; + "Connect a wallet": string; + "Connect to a wallet to find pools": string; + "Connect to a wallet to view your V2 liquidity.": string; + "Connect to a wallet to view your liquidity.": string; + "Connect wallet to swap": string; + "Connected with {name}": (string | string[])[]; + Copied: string; + "Copy Address": string; + "Create Pool & Supply": string; + "Create Proposal": string; + "Create a pair": string; + "Create a pool": string; + "Create an issue on GitHub": string; + "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; + "Create pool.": string; + "Create {0}/{1} V3 pool": (string | string[])[]; + "Current price": string; + "Current {0} Price:": (string | string[])[]; + Custom: string; + "Dark Theme": string; + Defeated: string; + "Delegate Votes": string; + "Delegate voting power to {0}": (string | string[])[]; + "Delegated to:": string; + "Delegating votes": string; + Deposit: string; + "Deposit Amounts": string; + "Deposit UNI-V2 LP Tokens": string; + "Deposit liquidity": string; + "Deposit tokens to the {label} network.": (string | string[])[]; + "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; + "Deposited liquidity:": string; + "Deposited {0} UNI-V2": (string | string[])[]; + "Depositing Liquidity": string; + Description: string; + Detailed: string; + Details: string; + Disconnect: string; + Discord: string; + Dismiss: string; + Docs: string; + "Don\u2019t see one of your v2 positions? <0>Import it.": string; + "Earned UNI tokens represent voting shares in Uniswap governance.": string; + Edit: string; + "Efficiency Comparison": string; + "Enter a percent": string; + "Enter a recipient": string; + "Enter a valid slippage percentage": string; + "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; + "Enter an amount": string; + "Enter valid list location": string; + "Enter valid token address": string; + "Enter {0} amount": (string | string[])[]; + Error: string; + "Error connecting": string; + "Error connecting. Try refreshing the page.": string; + "Error details": string; + "Error importing list": string; + "Estimate may differ due to your wallet gas settings": string; + "Estimated network fee": string; + Etherscan: string; + Executed: string; + "Expanded results from inactive Token Lists": string; + "Expected Output": string; + "Expert Mode": string; + "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; + Expired: string; + "Explore Uniswap Analytics.": string; + "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; + "Fee Tier": string; + "Fee tier": string; + "Fetching best price...": string; + "Fetching best price\u2026": string; + For: string; + "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; + From: string; + "From (at most)": string; + "Full Range": string; + "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; + "Get support on Discord": string; + "Help Center": string; + Hide: string; + "Hide closed positions": string; + "High Price Impact": string; + "How this app uses APIs": string; + "I understand": string; + "If you purchase a token from this list, you may not be able to sell it back.": string; + Import: string; + "Import List": string; + "Import Pool": string; + "Import V2 Pool": string; + "Import at your own risk": string; + "In range": string; + "Increase Liquidity": string; + "Initial prices and pool share": string; + "Initializing...": string; + "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Install Metamask": string; + "Insufficient liquidity for this trade.": string; + "Insufficient {0}": (string | string[])[]; + "Insufficient {0} balance": (string | string[])[]; + "Interface Settings": string; + "Invalid pair": string; + "Invalid pair.": string; + "Invalid price input": string; + "Invalid range selected. The min price must be lower than the max price.": string; + "Invalid recipient": string; + Language: string; + Learn: string; + "Learn about providing liquidity": string; + "Learn more": string; + "Legal & Privacy": string; + "Light Theme": string; + Liquidity: string; + "Liquidity data not available.": string; + "Liquidity provider rewards": string; + "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + Lists: string; + Loaded: string; + Loading: string; + MAX: string; + Manage: string; + "Manage Liquidity in Rewards Pool": string; + "Manage Token Lists": string; + "Manage this pool.": string; + Max: string; + "Max Price": string; + "Max price": string; + "Max slippage": string; + "Max:": string; + "Maximum sent": string; + Menu: string; + Migrate: string; + "Migrate Liquidity to V3": string; + "Migrate V2 Liquidity": string; + "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; + "Migrate {0}/{1} liquidity to V3": (string | string[])[]; + Migrating: string; + "Min Price": string; + "Min price": string; + "Min:": string; + "Minimum received": string; + "Missing dependencies": string; + "Mock Toggle": string; + More: string; + "Network Fee": string; + "Network Warning": string; + "Network fees exceed 50% of the swap amount!": string; + "New Position": string; + "No V2 Liquidity found.": string; + "No active pools": string; + "No data": string; + "No description.": string; + "No liquidity found.": string; + "No pool found.": string; + "No proposals found.": string; + "No results found.": string; + "Not created": string; + OFF: string; + ON: string; + "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; + Off: string; + On: string; + "Once you are happy with the rate click supply to review.": string; + "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; + "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; + "Optimism Gateway": string; + "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Optimistic Etherscan": string; + "Out of range": string; + "Output is estimated.": string; + "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; + "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Output will be sent to <0>{0}": (string | string[])[]; + Owner: string; + "Participating pools": string; + Pending: string; + "Please confirm you would like to remove this list by typing REMOVE": string; + "Please connect to Layer 1 Ethereum": string; + "Please connect to a supported network in the dropdown menu or in your wallet.": string; + "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; + "Polygon Bridge": string; + Polygonscan: string; + Pool: string; + "Pool Found!": string; + "Pool Rate": string; + "Pool rate": string; + "Pool tokens in rewards pool:": string; + "Pooled {0}:": (string | string[])[]; + "Pools Overview": string; + Preview: string; + Price: string; + "Price Difference:": string; + "Price Impact": string; + "Price Impact Too High": string; + "Price Updated": string; + "Price impact": string; + "Price range": string; + "Price updated": string; + "Price:": string; + "Prices and pool share": string; + Proposal: string; + "Proposal Submitted": string; + "Proposal Title": string; + Proposals: string; + "Proposals submitted by community members will appear here.": string; + "Proposed Action": string; + Proposer: string; + "Protocol Disclaimer": string; + Queued: string; + Rates: string; + "Read more about UNI": string; + "Read more about Uniswap governance": string; + "Read more about providing liquidity": string; + "Read more about unsupported assets": string; + "Recent Transactions": string; + "Recent transactions": string; + Recipient: string; + "Reload the page": string; + Remove: string; + "Remove <0/> and <1/>": string; + "Remove Amount": string; + "Remove Delegate": string; + "Remove Liquidity": string; + "Remove list": string; + "Removing {0} {1} and {2} {3}": (string | string[])[]; + "Removing {0} {1} and{2} {3}": (string | string[])[]; + "Request Features": string; + Reset: string; + Return: string; + "Review swap": string; + "Search by token name or address": string; + "Search name or paste address": string; + "Select Pair": string; + "Select a network": string; + "Select a token": string; + "Select a token to find your v2 liquidity.": string; + "Select an action": string; + "Selected Range": string; + Self: string; + "Self Delegate": string; + "Set Price Range": string; + "Set Starting Price": string; + Settings: string; + "Share of Pool": string; + "Share of Pool:": string; + "Show Portis": string; + "Show closed positions": string; + Simple: string; + "Slippage tolerance": string; + "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; + "Something went wrong": string; + "Something went wrong.": string; + "Step 1. Get UNI-V2 Liquidity tokens": string; + "Submit new proposal": string; + "Submitting Proposal": string; + "Submitting Vote": string; + Succeeded: string; + Success: string; + Supply: string; + "Supplying {0} {1} and {2} {3}": (string | string[])[]; + Swap: string; + "Swap <0/> for exactly <1/>": string; + "Swap Anyway": string; + "Swap details": string; + "Swap exactly <0/> for <1/>": string; + "Swap failed: {0}": (string | string[])[]; + "Swap summary": string; + "Swapping {0} {1} for {2} {3}": (string | string[])[]; + "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; + "Tell us what you think \u2197": string; + "Thanks for being part of the Uniswap community <0/>": string; + "The % you will earn in fees.": string; + "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; + "The app fetches blockchain data from The Graph\u2019s hosted service.": string; + "The app fetches on-chain data and constructs contract calls with an Infura API.": string; + "The app fetches the optimal trade route from a Uniswap Labs server.": string; + "The app logs anonymized usage statistics in order to improve over time.": string; + "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; + "The cost of sending this transaction is more than half of the value of the input amount.": string; + "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; + "The estimated difference between the USD values of input and output amounts.": string; + "The input token cannot be transferred. There may be an issue with the input token.": string; + "The market price is outside your specified price range. Single-asset deposit only.": string; + "The most recent block number on this network. Prices update on every block.": string; + "The output token cannot be transferred. There may be an issue with the output token.": string; + "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; + "The price of this pool is within your selected range. Your position is currently earning fees.": string; + "The ratio of tokens you add will set the price of this pool.": string; + "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; + "There is no liquidity data.": string; + "This app uses the following third-party APIs:": string; + "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; + "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; + "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; + "This token is not supported in the Uniswap Labs app": string; + "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; + "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; + "Tip: Custom tokens are stored locally in your browser": string; + To: string; + "To (at least)": string; + "Token not supported": string; + Tokens: string; + "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; + "Top pools": string; + "Total deposited": string; + "Total deposits": string; + "Trade Route": string; + Trading: string; + "Transaction Settings": string; + "Transaction Submitted": string; + "Transaction completed in": string; + "Transaction deadline": string; + "Transaction pending": string; + "Transaction rejected.": string; + "Transaction submitted": string; + "Transfer Token": string; + "Try Again": string; + "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Turn On Expert Mode": string; + "UNI has arrived": string; + "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; + "UNI {0}/{1} Burned": (string | string[])[]; + "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; + "UNI-V2 {0}-{1}": (string | string[])[]; + "Unclaimed UNI": string; + "Unclaimed fees": string; + Undetermined: string; + "Unexpected error. Could not estimate gas for the swap.": string; + "Unexpected issue with estimating the gas. Please try again.": string; + "Uniswap Governance": string; + "Uniswap Labs' Terms of Service": string; + "Uniswap available in: <0>{0}": (string | string[])[]; + "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; + "Uniswap liquidity mining": string; + "Uniswap migration contract\u2197": string; + "Unknown Source": string; + "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; + "Unlock Votes": string; + "Unlock Voting": string; + "Unlocking Votes": string; + "Unsupported Asset": string; + "Unsupported Assets": string; + "Unsupported network\u2013switch to another to trade.": string; + Untitled: string; + Unwrap: string; + "Unwrap <0/> to {0}": (string | string[])[]; + "Update Delegation": string; + "Update list": string; + "Use the Uniswap Labs API to get faster quotes.": string; + User: string; + "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; + "V2 liquidity": string; + "V3 {0} Price:": (string | string[])[]; + "View accrued fees and analytics<0>\u2197": string; + "View list": string; + "View on Etherscan": string; + "View on Explorer": string; + "View transaction on Explorer": string; + Vote: string; + "Vote Against": string; + "Vote For": string; + "Vote against proposal {proposalId}": (string | string[])[]; + "Vote against proposal {proposalKey}": (string | string[])[]; + "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote for proposal {proposalId}": (string | string[])[]; + "Vote for proposal {proposalKey}": (string | string[])[]; + "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote to abstain on proposal {proposalId}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Voting ended {0}": (string | string[])[]; + "Voting ends approximately {0}": (string | string[])[]; + "Voting starts approximately {0}": (string | string[])[]; + "Waiting For Confirmation": string; + "Wallet Address or ENS name": string; + "Weekly Rewards": string; + "Welcome to team Unicorn :)": string; + "When you claim without withdrawing your liquidity remains in the mining pool.": string; + "When you withdraw, the contract will automagically claim UNI on your behalf!": string; + "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; + Withdraw: string; + "Withdraw & Claim": string; + "Withdraw deposited liquidity": string; + "Withdrawing {0} UNI-V2": (string | string[])[]; + "Withdrew UNI-V2!": string; + Wrap: string; + "Wrap <0/> to {0}": (string | string[])[]; + "Wrong Network": string; + "You already have an active or pending proposal": string; + "You are creating a pool": string; + "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; + "You are the first liquidity provider.": string; + "You can either vote on each proposal yourself or delegate your votes to a third party.": string; + "You can now trade {0}": (string | string[])[]; + "You don't have enough votes to submit a proposal": string; + "You don\u2019t have liquidity in this pool yet.": string; + "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; + "You may have lost your network connection.": string; + "You might consider waiting until the network fees go down to complete this transaction.": string; + "You must connect an account.": string; + "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; + "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; + "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; + "You will also collect fees earned from this position.": string; + "You will receive": string; + "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; + "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; + "Your V2 liquidity": string; + "Your active V3 liquidity positions will appear here.": string; + "Your liquidity deposits": string; + "Your pool share:": string; + "Your position": string; + "Your position has 0 liquidity, and is not earning fees.": string; + "Your position will appear here.": string; + "Your position will be 100% composed of {0} at this price": (string | string[])[]; + "Your position will be 100% {0} at this price.": (string | string[])[]; + "Your position will not earn fees or be used in trades until the market price moves into your range.": string; + "Your positions": string; + "Your rate": string; + "Your total pool tokens:": string; + "Your transaction cost will be much higher as it includes the gas to create the pool.": string; + "Your transaction may be frontrun": string; + "Your transaction may fail": string; + "Your transaction will revert if it has been pending for longer than this period of time.": string; + "Your transaction will revert if it is pending for more than this period of time.": string; + "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; + "Your transactions will appear here...": string; + "Your unclaimed UNI": string; + "after slippage": string; + confirm: string; + "for {0}": (string | string[])[]; + gwei: string; + "has socks emoji": string; + "here.": string; + "https:// or ipfs:// or ENS name": string; + minutes: string; + "via {0}": (string | string[])[]; + "via {0} token list": (string | string[])[]; + "{0, plural, one {Import token} other {Import tokens}}": (string | { + one: string; + other: string; + })[][]; + "{0}": string[][]; + "{0} %": (string | string[])[]; + "{0} <0/> per <1/>": (string | string[])[]; + "{0} Custom Tokens": (string | string[])[]; + "{0} Deposited": (string | string[])[]; + "{0} ETH": (string | string[])[]; + "{0} Fees Earned:": (string | string[])[]; + "{0} Pending": (string | string[])[]; + "{0} UNI": (string | string[])[]; + "{0} UNI / week": (string | string[])[]; + "{0} UNI-V2": (string | string[])[]; + "{0} UNI-V2 LP tokens available": (string | string[])[]; + "{0} Votes": (string | string[])[]; + "{0} per {1}": (string | string[])[]; + "{0} tokens": (string | string[])[]; + "{0} {1} Price:": (string | string[])[]; + "{0} {nativeCurrencySymbol}": (string | string[])[]; + "{0} \u2022 Added by user": (string | string[])[]; + "{0}%": (string | string[])[]; + "{0}% fee tier": (string | string[])[]; + "{0}% pool": (string | string[])[]; + "{0}% select": (string | string[])[]; + "{0}-{1} Liquidity Mining": (string | string[])[]; + "{0}/{1} LP NFT": (string | string[])[]; + "{0}/{1} LP Tokens": (string | string[])[]; + "{SOCKS_AMOUNT} UNI": (string | string[])[]; + "{USER_AMOUNT} UNI": (string | string[])[]; + "{activeTokensOnThisChain} tokens": (string | string[])[]; + "{integrator} fee": (string | string[])[]; + "{label} token bridge": (string | string[])[]; + "{min}m {sec}s": (string | string[])[]; + "{percentForSlider}%": (string | string[])[]; + "{sec}s": (string | string[])[]; + "{tokenB} per {tokenA}": (string | string[])[]; + "\u2190 Back to Pools Overview": string; +}; diff --git a/dist2/types/locales/ar-SA.d.ts b/dist2/types/locales/ar-SA.d.ts new file mode 100644 index 00000000000..75120e0e5c9 --- /dev/null +++ b/dist2/types/locales/ar-SA.d.ts @@ -0,0 +1,593 @@ +export const messages: { + "$-": string; + "$<0/>": string; + "${0}": (string | string[])[]; + "(${0})": (string | string[])[]; + "(View on Explorer)": string; + "(clear all)": string; + "(edit)": string; + "- Remove recipient": string; + "0 UNI / week": string; + "25%": string; + "50%": string; + "75%": string; + "<0/> All Proposals": string; + "<0/> Votes": string; + "<0>Account analytics and accrued fees<1> \u2197 ": string; + "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; + "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; + "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; + "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; + "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; + "<0>Unlock voting to prepare for the next proposal.": string; + "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; + "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; + About: string; + Accept: string; + Account: string; + Active: string; + Add: string; + "Add <0/> and <1/> to Uniswap V2": string; + "Add Delegate +": string; + "Add Liquidity": string; + "Add V2 Liquidity": string; + "Add liquidity.": string; + "Add more liquidity": string; + "Add {0} to Metamask <0/>": (string | string[])[]; + "Add {0}-{1} liquidity": (string | string[])[]; + "Add {0}/{1} V3 liquidity": (string | string[])[]; + "Added {0}": (string | string[])[]; + "Address has no available claim": string; + Against: string; + "Allow LP token migration": string; + "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; + "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; + Allowed: string; + Amount: string; + "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Approval pending <0/>": string; + Approve: string; + "Approve Token": string; + "Approve {0}": (string | string[])[]; + "Approve {0} first": (string | string[])[]; + Approved: string; + Approving: string; + "Approving {0}": (string | string[])[]; + Arbiscan: string; + "Arbitrum Bridge": string; + "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Are you sure?": string; + "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; + "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; + Auto: string; + "Auto Router API": string; + "Available to deposit: {0}": (string | string[])[]; + "Balance: {0}": (string | string[])[]; + "Best for exotic pairs.": string; + "Best for most pairs.": string; + "Best for stable pairs.": string; + "Best for very stable pairs.": string; + "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; + "Blocked address": string; + Bridge: string; + "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; + "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; + Canceled: string; + Change: string; + Charts: string; + "Check network status": string; + "Check out our v3 LP walkthrough and migration guides.": string; + Claim: string; + "Claim <0/> for {0}": (string | string[])[]; + "Claim UNI": string; + "Claim UNI Token": string; + "Claim UNI reward for {0}": (string | string[])[]; + "Claim fees": string; + "Claim your UNI tokens": string; + Claimed: string; + "Claimed UNI!": string; + "Claimed!": string; + Claiming: string; + "Claiming UNI": string; + "Claiming {0} UNI": (string | string[])[]; + "Clear All": string; + "Clear all": string; + Close: string; + Closed: string; + Collect: string; + "Collect as WETH": string; + "Collect fees": string; + "Collect {0}/{1} fees": (string | string[])[]; + Collected: string; + Collecting: string; + "Collecting fees": string; + "Collecting fees will withdraw currently available fees for you.": string; + Confirm: string; + "Confirm Supply": string; + "Confirm Swap": string; + "Confirm swap": string; + "Confirm this transaction in your wallet": string; + "Confirm transaction in wallet": string; + "Connect Wallet": string; + "Connect a wallet": string; + "Connect to a wallet to find pools": string; + "Connect to a wallet to view your V2 liquidity.": string; + "Connect to a wallet to view your liquidity.": string; + "Connect wallet to swap": string; + "Connected with {name}": (string | string[])[]; + Copied: string; + "Copy Address": string; + "Create Pool & Supply": string; + "Create Proposal": string; + "Create a pair": string; + "Create a pool": string; + "Create an issue on GitHub": string; + "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; + "Create pool.": string; + "Create {0}/{1} V3 pool": (string | string[])[]; + "Current price": string; + "Current {0} Price:": (string | string[])[]; + Custom: string; + "Dark Theme": string; + Defeated: string; + "Delegate Votes": string; + "Delegate voting power to {0}": (string | string[])[]; + "Delegated to:": string; + "Delegating votes": string; + Deposit: string; + "Deposit Amounts": string; + "Deposit UNI-V2 LP Tokens": string; + "Deposit liquidity": string; + "Deposit tokens to the {label} network.": (string | string[])[]; + "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; + "Deposited liquidity:": string; + "Deposited {0} UNI-V2": (string | string[])[]; + "Depositing Liquidity": string; + Description: string; + Detailed: string; + Details: string; + Disconnect: string; + Discord: string; + Dismiss: string; + Docs: string; + "Don\u2019t see one of your v2 positions? <0>Import it.": string; + "Earned UNI tokens represent voting shares in Uniswap governance.": string; + Edit: string; + "Efficiency Comparison": string; + "Enter a percent": string; + "Enter a recipient": string; + "Enter a valid slippage percentage": string; + "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; + "Enter an amount": string; + "Enter valid list location": string; + "Enter valid token address": string; + "Enter {0} amount": (string | string[])[]; + Error: string; + "Error connecting": string; + "Error connecting. Try refreshing the page.": string; + "Error details": string; + "Error importing list": string; + "Estimate may differ due to your wallet gas settings": string; + "Estimated network fee": string; + Etherscan: string; + Executed: string; + "Expanded results from inactive Token Lists": string; + "Expected Output": string; + "Expert Mode": string; + "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; + Expired: string; + "Explore Uniswap Analytics.": string; + "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; + "Fee Tier": string; + "Fee tier": string; + "Fetching best price...": string; + "Fetching best price\u2026": string; + For: string; + "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; + From: string; + "From (at most)": string; + "Full Range": string; + "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; + "Get support on Discord": string; + "Help Center": string; + Hide: string; + "Hide closed positions": string; + "High Price Impact": string; + "How this app uses APIs": string; + "I understand": string; + "If you purchase a token from this list, you may not be able to sell it back.": string; + Import: string; + "Import List": string; + "Import Pool": string; + "Import V2 Pool": string; + "Import at your own risk": string; + "In range": string; + "Increase Liquidity": string; + "Initial prices and pool share": string; + "Initializing...": string; + "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Install Metamask": string; + "Insufficient liquidity for this trade.": string; + "Insufficient {0}": (string | string[])[]; + "Insufficient {0} balance": (string | string[])[]; + "Interface Settings": string; + "Invalid pair": string; + "Invalid pair.": string; + "Invalid price input": string; + "Invalid range selected. The min price must be lower than the max price.": string; + "Invalid recipient": string; + Language: string; + Learn: string; + "Learn about providing liquidity": string; + "Learn more": string; + "Legal & Privacy": string; + "Light Theme": string; + Liquidity: string; + "Liquidity data not available.": string; + "Liquidity provider rewards": string; + "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + Lists: string; + Loaded: string; + Loading: string; + MAX: string; + Manage: string; + "Manage Liquidity in Rewards Pool": string; + "Manage Token Lists": string; + "Manage this pool.": string; + Max: string; + "Max Price": string; + "Max price": string; + "Max slippage": string; + "Max:": string; + "Maximum sent": string; + Menu: string; + Migrate: string; + "Migrate Liquidity to V3": string; + "Migrate V2 Liquidity": string; + "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; + "Migrate {0}/{1} liquidity to V3": (string | string[])[]; + Migrating: string; + "Min Price": string; + "Min price": string; + "Min:": string; + "Minimum received": string; + "Missing dependencies": string; + "Mock Toggle": string; + More: string; + "Network Fee": string; + "Network Warning": string; + "Network fees exceed 50% of the swap amount!": string; + "New Position": string; + "No V2 Liquidity found.": string; + "No active pools": string; + "No data": string; + "No description.": string; + "No liquidity found.": string; + "No pool found.": string; + "No proposals found.": string; + "No results found.": string; + "Not created": string; + OFF: string; + ON: string; + "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; + Off: string; + On: string; + "Once you are happy with the rate click supply to review.": string; + "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; + "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; + "Optimism Gateway": string; + "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Optimistic Etherscan": string; + "Out of range": string; + "Output is estimated.": string; + "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; + "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Output will be sent to <0>{0}": (string | string[])[]; + Owner: string; + "Participating pools": string; + Pending: string; + "Please confirm you would like to remove this list by typing REMOVE": string; + "Please connect to Layer 1 Ethereum": string; + "Please connect to a supported network in the dropdown menu or in your wallet.": string; + "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; + "Polygon Bridge": string; + Polygonscan: string; + Pool: string; + "Pool Found!": string; + "Pool Rate": string; + "Pool rate": string; + "Pool tokens in rewards pool:": string; + "Pooled {0}:": (string | string[])[]; + "Pools Overview": string; + Preview: string; + Price: string; + "Price Difference:": string; + "Price Impact": string; + "Price Impact Too High": string; + "Price Updated": string; + "Price impact": string; + "Price range": string; + "Price updated": string; + "Price:": string; + "Prices and pool share": string; + Proposal: string; + "Proposal Submitted": string; + "Proposal Title": string; + Proposals: string; + "Proposals submitted by community members will appear here.": string; + "Proposed Action": string; + Proposer: string; + "Protocol Disclaimer": string; + Queued: string; + Rates: string; + "Read more about UNI": string; + "Read more about Uniswap governance": string; + "Read more about providing liquidity": string; + "Read more about unsupported assets": string; + "Recent Transactions": string; + "Recent transactions": string; + Recipient: string; + "Reload the page": string; + Remove: string; + "Remove <0/> and <1/>": string; + "Remove Amount": string; + "Remove Delegate": string; + "Remove Liquidity": string; + "Remove list": string; + "Removing {0} {1} and {2} {3}": (string | string[])[]; + "Removing {0} {1} and{2} {3}": (string | string[])[]; + "Request Features": string; + Reset: string; + Return: string; + "Review swap": string; + "Search by token name or address": string; + "Search name or paste address": string; + "Select Pair": string; + "Select a network": string; + "Select a token": string; + "Select a token to find your v2 liquidity.": string; + "Select an action": string; + "Selected Range": string; + Self: string; + "Self Delegate": string; + "Set Price Range": string; + "Set Starting Price": string; + Settings: string; + "Share of Pool": string; + "Share of Pool:": string; + "Show Portis": string; + "Show closed positions": string; + Simple: string; + "Slippage tolerance": string; + "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; + "Something went wrong": string; + "Something went wrong.": string; + "Step 1. Get UNI-V2 Liquidity tokens": string; + "Submit new proposal": string; + "Submitting Proposal": string; + "Submitting Vote": string; + Succeeded: string; + Success: string; + Supply: string; + "Supplying {0} {1} and {2} {3}": (string | string[])[]; + Swap: string; + "Swap <0/> for exactly <1/>": string; + "Swap Anyway": string; + "Swap details": string; + "Swap exactly <0/> for <1/>": string; + "Swap failed: {0}": (string | string[])[]; + "Swap summary": string; + "Swapping {0} {1} for {2} {3}": (string | string[])[]; + "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; + "Tell us what you think \u2197": string; + "Thanks for being part of the Uniswap community <0/>": string; + "The % you will earn in fees.": string; + "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; + "The app fetches blockchain data from The Graph\u2019s hosted service.": string; + "The app fetches on-chain data and constructs contract calls with an Infura API.": string; + "The app fetches the optimal trade route from a Uniswap Labs server.": string; + "The app logs anonymized usage statistics in order to improve over time.": string; + "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; + "The cost of sending this transaction is more than half of the value of the input amount.": string; + "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; + "The estimated difference between the USD values of input and output amounts.": string; + "The input token cannot be transferred. There may be an issue with the input token.": string; + "The market price is outside your specified price range. Single-asset deposit only.": string; + "The most recent block number on this network. Prices update on every block.": string; + "The output token cannot be transferred. There may be an issue with the output token.": string; + "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; + "The price of this pool is within your selected range. Your position is currently earning fees.": string; + "The ratio of tokens you add will set the price of this pool.": string; + "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; + "There is no liquidity data.": string; + "This app uses the following third-party APIs:": string; + "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; + "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; + "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; + "This token is not supported in the Uniswap Labs app": string; + "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; + "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; + "Tip: Custom tokens are stored locally in your browser": string; + To: string; + "To (at least)": string; + "Token not supported": string; + Tokens: string; + "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; + "Top pools": string; + "Total deposited": string; + "Total deposits": string; + "Trade Route": string; + Trading: string; + "Transaction Settings": string; + "Transaction Submitted": string; + "Transaction completed in": string; + "Transaction deadline": string; + "Transaction pending": string; + "Transaction rejected.": string; + "Transaction submitted": string; + "Transfer Token": string; + "Try Again": string; + "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Turn On Expert Mode": string; + "UNI has arrived": string; + "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; + "UNI {0}/{1} Burned": (string | string[])[]; + "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; + "UNI-V2 {0}-{1}": (string | string[])[]; + "Unclaimed UNI": string; + "Unclaimed fees": string; + Undetermined: string; + "Unexpected error. Could not estimate gas for the swap.": string; + "Unexpected issue with estimating the gas. Please try again.": string; + "Uniswap Governance": string; + "Uniswap Labs' Terms of Service": string; + "Uniswap available in: <0>{0}": (string | string[])[]; + "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; + "Uniswap liquidity mining": string; + "Uniswap migration contract\u2197": string; + "Unknown Source": string; + "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; + "Unlock Votes": string; + "Unlock Voting": string; + "Unlocking Votes": string; + "Unsupported Asset": string; + "Unsupported Assets": string; + "Unsupported network\u2013switch to another to trade.": string; + Untitled: string; + Unwrap: string; + "Unwrap <0/> to {0}": (string | string[])[]; + "Update Delegation": string; + "Update list": string; + "Use the Uniswap Labs API to get faster quotes.": string; + User: string; + "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; + "V2 liquidity": string; + "V3 {0} Price:": (string | string[])[]; + "View accrued fees and analytics<0>\u2197": string; + "View list": string; + "View on Etherscan": string; + "View on Explorer": string; + "View transaction on Explorer": string; + Vote: string; + "Vote Against": string; + "Vote For": string; + "Vote against proposal {proposalId}": (string | string[])[]; + "Vote against proposal {proposalKey}": (string | string[])[]; + "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote for proposal {proposalId}": (string | string[])[]; + "Vote for proposal {proposalKey}": (string | string[])[]; + "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote to abstain on proposal {proposalId}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Voting ended {0}": (string | string[])[]; + "Voting ends approximately {0}": (string | string[])[]; + "Voting starts approximately {0}": (string | string[])[]; + "Waiting For Confirmation": string; + "Wallet Address or ENS name": string; + "Weekly Rewards": string; + "Welcome to team Unicorn :)": string; + "When you claim without withdrawing your liquidity remains in the mining pool.": string; + "When you withdraw, the contract will automagically claim UNI on your behalf!": string; + "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; + Withdraw: string; + "Withdraw & Claim": string; + "Withdraw deposited liquidity": string; + "Withdrawing {0} UNI-V2": (string | string[])[]; + "Withdrew UNI-V2!": string; + Wrap: string; + "Wrap <0/> to {0}": (string | string[])[]; + "Wrong Network": string; + "You already have an active or pending proposal": string; + "You are creating a pool": string; + "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; + "You are the first liquidity provider.": string; + "You can either vote on each proposal yourself or delegate your votes to a third party.": string; + "You can now trade {0}": (string | string[])[]; + "You don't have enough votes to submit a proposal": string; + "You don\u2019t have liquidity in this pool yet.": string; + "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; + "You may have lost your network connection.": string; + "You might consider waiting until the network fees go down to complete this transaction.": string; + "You must connect an account.": string; + "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; + "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; + "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; + "You will also collect fees earned from this position.": string; + "You will receive": string; + "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; + "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; + "Your V2 liquidity": string; + "Your active V3 liquidity positions will appear here.": string; + "Your liquidity deposits": string; + "Your pool share:": string; + "Your position": string; + "Your position has 0 liquidity, and is not earning fees.": string; + "Your position will appear here.": string; + "Your position will be 100% composed of {0} at this price": (string | string[])[]; + "Your position will be 100% {0} at this price.": (string | string[])[]; + "Your position will not earn fees or be used in trades until the market price moves into your range.": string; + "Your positions": string; + "Your rate": string; + "Your total pool tokens:": string; + "Your transaction cost will be much higher as it includes the gas to create the pool.": string; + "Your transaction may be frontrun": string; + "Your transaction may fail": string; + "Your transaction will revert if it has been pending for longer than this period of time.": string; + "Your transaction will revert if it is pending for more than this period of time.": string; + "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; + "Your transactions will appear here...": string; + "Your unclaimed UNI": string; + "after slippage": string; + confirm: string; + "for {0}": (string | string[])[]; + gwei: string; + "has socks emoji": string; + "here.": string; + "https:// or ipfs:// or ENS name": string; + minutes: string; + "via {0}": (string | string[])[]; + "via {0} token list": (string | string[])[]; + "{0, plural, one {Import token} other {Import tokens}}": (string | { + one: string; + other: string; + })[][]; + "{0}": string[][]; + "{0} %": (string | string[])[]; + "{0} <0/> per <1/>": (string | string[])[]; + "{0} Custom Tokens": (string | string[])[]; + "{0} Deposited": (string | string[])[]; + "{0} ETH": (string | string[])[]; + "{0} Fees Earned:": (string | string[])[]; + "{0} Pending": (string | string[])[]; + "{0} UNI": (string | string[])[]; + "{0} UNI / week": (string | string[])[]; + "{0} UNI-V2": (string | string[])[]; + "{0} UNI-V2 LP tokens available": (string | string[])[]; + "{0} Votes": (string | string[])[]; + "{0} per {1}": (string | string[])[]; + "{0} tokens": (string | string[])[]; + "{0} {1} Price:": (string | string[])[]; + "{0} {nativeCurrencySymbol}": (string | string[])[]; + "{0} \u2022 Added by user": (string | string[])[]; + "{0}%": (string | string[])[]; + "{0}% fee tier": (string | string[])[]; + "{0}% pool": (string | string[])[]; + "{0}% select": (string | string[])[]; + "{0}-{1} Liquidity Mining": (string | string[])[]; + "{0}/{1} LP NFT": (string | string[])[]; + "{0}/{1} LP Tokens": (string | string[])[]; + "{SOCKS_AMOUNT} UNI": (string | string[])[]; + "{USER_AMOUNT} UNI": (string | string[])[]; + "{activeTokensOnThisChain} tokens": (string | string[])[]; + "{integrator} fee": (string | string[])[]; + "{label} token bridge": (string | string[])[]; + "{min}m {sec}s": (string | string[])[]; + "{percentForSlider}%": (string | string[])[]; + "{sec}s": (string | string[])[]; + "{tokenB} per {tokenA}": (string | string[])[]; + "\u2190 Back to Pools Overview": string; +}; diff --git a/dist2/types/locales/ca-ES.d.ts b/dist2/types/locales/ca-ES.d.ts new file mode 100644 index 00000000000..75120e0e5c9 --- /dev/null +++ b/dist2/types/locales/ca-ES.d.ts @@ -0,0 +1,593 @@ +export const messages: { + "$-": string; + "$<0/>": string; + "${0}": (string | string[])[]; + "(${0})": (string | string[])[]; + "(View on Explorer)": string; + "(clear all)": string; + "(edit)": string; + "- Remove recipient": string; + "0 UNI / week": string; + "25%": string; + "50%": string; + "75%": string; + "<0/> All Proposals": string; + "<0/> Votes": string; + "<0>Account analytics and accrued fees<1> \u2197 ": string; + "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; + "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; + "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; + "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; + "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; + "<0>Unlock voting to prepare for the next proposal.": string; + "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; + "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; + About: string; + Accept: string; + Account: string; + Active: string; + Add: string; + "Add <0/> and <1/> to Uniswap V2": string; + "Add Delegate +": string; + "Add Liquidity": string; + "Add V2 Liquidity": string; + "Add liquidity.": string; + "Add more liquidity": string; + "Add {0} to Metamask <0/>": (string | string[])[]; + "Add {0}-{1} liquidity": (string | string[])[]; + "Add {0}/{1} V3 liquidity": (string | string[])[]; + "Added {0}": (string | string[])[]; + "Address has no available claim": string; + Against: string; + "Allow LP token migration": string; + "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; + "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; + Allowed: string; + Amount: string; + "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Approval pending <0/>": string; + Approve: string; + "Approve Token": string; + "Approve {0}": (string | string[])[]; + "Approve {0} first": (string | string[])[]; + Approved: string; + Approving: string; + "Approving {0}": (string | string[])[]; + Arbiscan: string; + "Arbitrum Bridge": string; + "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Are you sure?": string; + "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; + "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; + Auto: string; + "Auto Router API": string; + "Available to deposit: {0}": (string | string[])[]; + "Balance: {0}": (string | string[])[]; + "Best for exotic pairs.": string; + "Best for most pairs.": string; + "Best for stable pairs.": string; + "Best for very stable pairs.": string; + "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; + "Blocked address": string; + Bridge: string; + "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; + "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; + Canceled: string; + Change: string; + Charts: string; + "Check network status": string; + "Check out our v3 LP walkthrough and migration guides.": string; + Claim: string; + "Claim <0/> for {0}": (string | string[])[]; + "Claim UNI": string; + "Claim UNI Token": string; + "Claim UNI reward for {0}": (string | string[])[]; + "Claim fees": string; + "Claim your UNI tokens": string; + Claimed: string; + "Claimed UNI!": string; + "Claimed!": string; + Claiming: string; + "Claiming UNI": string; + "Claiming {0} UNI": (string | string[])[]; + "Clear All": string; + "Clear all": string; + Close: string; + Closed: string; + Collect: string; + "Collect as WETH": string; + "Collect fees": string; + "Collect {0}/{1} fees": (string | string[])[]; + Collected: string; + Collecting: string; + "Collecting fees": string; + "Collecting fees will withdraw currently available fees for you.": string; + Confirm: string; + "Confirm Supply": string; + "Confirm Swap": string; + "Confirm swap": string; + "Confirm this transaction in your wallet": string; + "Confirm transaction in wallet": string; + "Connect Wallet": string; + "Connect a wallet": string; + "Connect to a wallet to find pools": string; + "Connect to a wallet to view your V2 liquidity.": string; + "Connect to a wallet to view your liquidity.": string; + "Connect wallet to swap": string; + "Connected with {name}": (string | string[])[]; + Copied: string; + "Copy Address": string; + "Create Pool & Supply": string; + "Create Proposal": string; + "Create a pair": string; + "Create a pool": string; + "Create an issue on GitHub": string; + "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; + "Create pool.": string; + "Create {0}/{1} V3 pool": (string | string[])[]; + "Current price": string; + "Current {0} Price:": (string | string[])[]; + Custom: string; + "Dark Theme": string; + Defeated: string; + "Delegate Votes": string; + "Delegate voting power to {0}": (string | string[])[]; + "Delegated to:": string; + "Delegating votes": string; + Deposit: string; + "Deposit Amounts": string; + "Deposit UNI-V2 LP Tokens": string; + "Deposit liquidity": string; + "Deposit tokens to the {label} network.": (string | string[])[]; + "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; + "Deposited liquidity:": string; + "Deposited {0} UNI-V2": (string | string[])[]; + "Depositing Liquidity": string; + Description: string; + Detailed: string; + Details: string; + Disconnect: string; + Discord: string; + Dismiss: string; + Docs: string; + "Don\u2019t see one of your v2 positions? <0>Import it.": string; + "Earned UNI tokens represent voting shares in Uniswap governance.": string; + Edit: string; + "Efficiency Comparison": string; + "Enter a percent": string; + "Enter a recipient": string; + "Enter a valid slippage percentage": string; + "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; + "Enter an amount": string; + "Enter valid list location": string; + "Enter valid token address": string; + "Enter {0} amount": (string | string[])[]; + Error: string; + "Error connecting": string; + "Error connecting. Try refreshing the page.": string; + "Error details": string; + "Error importing list": string; + "Estimate may differ due to your wallet gas settings": string; + "Estimated network fee": string; + Etherscan: string; + Executed: string; + "Expanded results from inactive Token Lists": string; + "Expected Output": string; + "Expert Mode": string; + "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; + Expired: string; + "Explore Uniswap Analytics.": string; + "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; + "Fee Tier": string; + "Fee tier": string; + "Fetching best price...": string; + "Fetching best price\u2026": string; + For: string; + "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; + From: string; + "From (at most)": string; + "Full Range": string; + "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; + "Get support on Discord": string; + "Help Center": string; + Hide: string; + "Hide closed positions": string; + "High Price Impact": string; + "How this app uses APIs": string; + "I understand": string; + "If you purchase a token from this list, you may not be able to sell it back.": string; + Import: string; + "Import List": string; + "Import Pool": string; + "Import V2 Pool": string; + "Import at your own risk": string; + "In range": string; + "Increase Liquidity": string; + "Initial prices and pool share": string; + "Initializing...": string; + "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Install Metamask": string; + "Insufficient liquidity for this trade.": string; + "Insufficient {0}": (string | string[])[]; + "Insufficient {0} balance": (string | string[])[]; + "Interface Settings": string; + "Invalid pair": string; + "Invalid pair.": string; + "Invalid price input": string; + "Invalid range selected. The min price must be lower than the max price.": string; + "Invalid recipient": string; + Language: string; + Learn: string; + "Learn about providing liquidity": string; + "Learn more": string; + "Legal & Privacy": string; + "Light Theme": string; + Liquidity: string; + "Liquidity data not available.": string; + "Liquidity provider rewards": string; + "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + Lists: string; + Loaded: string; + Loading: string; + MAX: string; + Manage: string; + "Manage Liquidity in Rewards Pool": string; + "Manage Token Lists": string; + "Manage this pool.": string; + Max: string; + "Max Price": string; + "Max price": string; + "Max slippage": string; + "Max:": string; + "Maximum sent": string; + Menu: string; + Migrate: string; + "Migrate Liquidity to V3": string; + "Migrate V2 Liquidity": string; + "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; + "Migrate {0}/{1} liquidity to V3": (string | string[])[]; + Migrating: string; + "Min Price": string; + "Min price": string; + "Min:": string; + "Minimum received": string; + "Missing dependencies": string; + "Mock Toggle": string; + More: string; + "Network Fee": string; + "Network Warning": string; + "Network fees exceed 50% of the swap amount!": string; + "New Position": string; + "No V2 Liquidity found.": string; + "No active pools": string; + "No data": string; + "No description.": string; + "No liquidity found.": string; + "No pool found.": string; + "No proposals found.": string; + "No results found.": string; + "Not created": string; + OFF: string; + ON: string; + "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; + Off: string; + On: string; + "Once you are happy with the rate click supply to review.": string; + "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; + "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; + "Optimism Gateway": string; + "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Optimistic Etherscan": string; + "Out of range": string; + "Output is estimated.": string; + "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; + "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Output will be sent to <0>{0}": (string | string[])[]; + Owner: string; + "Participating pools": string; + Pending: string; + "Please confirm you would like to remove this list by typing REMOVE": string; + "Please connect to Layer 1 Ethereum": string; + "Please connect to a supported network in the dropdown menu or in your wallet.": string; + "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; + "Polygon Bridge": string; + Polygonscan: string; + Pool: string; + "Pool Found!": string; + "Pool Rate": string; + "Pool rate": string; + "Pool tokens in rewards pool:": string; + "Pooled {0}:": (string | string[])[]; + "Pools Overview": string; + Preview: string; + Price: string; + "Price Difference:": string; + "Price Impact": string; + "Price Impact Too High": string; + "Price Updated": string; + "Price impact": string; + "Price range": string; + "Price updated": string; + "Price:": string; + "Prices and pool share": string; + Proposal: string; + "Proposal Submitted": string; + "Proposal Title": string; + Proposals: string; + "Proposals submitted by community members will appear here.": string; + "Proposed Action": string; + Proposer: string; + "Protocol Disclaimer": string; + Queued: string; + Rates: string; + "Read more about UNI": string; + "Read more about Uniswap governance": string; + "Read more about providing liquidity": string; + "Read more about unsupported assets": string; + "Recent Transactions": string; + "Recent transactions": string; + Recipient: string; + "Reload the page": string; + Remove: string; + "Remove <0/> and <1/>": string; + "Remove Amount": string; + "Remove Delegate": string; + "Remove Liquidity": string; + "Remove list": string; + "Removing {0} {1} and {2} {3}": (string | string[])[]; + "Removing {0} {1} and{2} {3}": (string | string[])[]; + "Request Features": string; + Reset: string; + Return: string; + "Review swap": string; + "Search by token name or address": string; + "Search name or paste address": string; + "Select Pair": string; + "Select a network": string; + "Select a token": string; + "Select a token to find your v2 liquidity.": string; + "Select an action": string; + "Selected Range": string; + Self: string; + "Self Delegate": string; + "Set Price Range": string; + "Set Starting Price": string; + Settings: string; + "Share of Pool": string; + "Share of Pool:": string; + "Show Portis": string; + "Show closed positions": string; + Simple: string; + "Slippage tolerance": string; + "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; + "Something went wrong": string; + "Something went wrong.": string; + "Step 1. Get UNI-V2 Liquidity tokens": string; + "Submit new proposal": string; + "Submitting Proposal": string; + "Submitting Vote": string; + Succeeded: string; + Success: string; + Supply: string; + "Supplying {0} {1} and {2} {3}": (string | string[])[]; + Swap: string; + "Swap <0/> for exactly <1/>": string; + "Swap Anyway": string; + "Swap details": string; + "Swap exactly <0/> for <1/>": string; + "Swap failed: {0}": (string | string[])[]; + "Swap summary": string; + "Swapping {0} {1} for {2} {3}": (string | string[])[]; + "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; + "Tell us what you think \u2197": string; + "Thanks for being part of the Uniswap community <0/>": string; + "The % you will earn in fees.": string; + "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; + "The app fetches blockchain data from The Graph\u2019s hosted service.": string; + "The app fetches on-chain data and constructs contract calls with an Infura API.": string; + "The app fetches the optimal trade route from a Uniswap Labs server.": string; + "The app logs anonymized usage statistics in order to improve over time.": string; + "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; + "The cost of sending this transaction is more than half of the value of the input amount.": string; + "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; + "The estimated difference between the USD values of input and output amounts.": string; + "The input token cannot be transferred. There may be an issue with the input token.": string; + "The market price is outside your specified price range. Single-asset deposit only.": string; + "The most recent block number on this network. Prices update on every block.": string; + "The output token cannot be transferred. There may be an issue with the output token.": string; + "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; + "The price of this pool is within your selected range. Your position is currently earning fees.": string; + "The ratio of tokens you add will set the price of this pool.": string; + "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; + "There is no liquidity data.": string; + "This app uses the following third-party APIs:": string; + "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; + "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; + "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; + "This token is not supported in the Uniswap Labs app": string; + "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; + "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; + "Tip: Custom tokens are stored locally in your browser": string; + To: string; + "To (at least)": string; + "Token not supported": string; + Tokens: string; + "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; + "Top pools": string; + "Total deposited": string; + "Total deposits": string; + "Trade Route": string; + Trading: string; + "Transaction Settings": string; + "Transaction Submitted": string; + "Transaction completed in": string; + "Transaction deadline": string; + "Transaction pending": string; + "Transaction rejected.": string; + "Transaction submitted": string; + "Transfer Token": string; + "Try Again": string; + "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Turn On Expert Mode": string; + "UNI has arrived": string; + "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; + "UNI {0}/{1} Burned": (string | string[])[]; + "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; + "UNI-V2 {0}-{1}": (string | string[])[]; + "Unclaimed UNI": string; + "Unclaimed fees": string; + Undetermined: string; + "Unexpected error. Could not estimate gas for the swap.": string; + "Unexpected issue with estimating the gas. Please try again.": string; + "Uniswap Governance": string; + "Uniswap Labs' Terms of Service": string; + "Uniswap available in: <0>{0}": (string | string[])[]; + "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; + "Uniswap liquidity mining": string; + "Uniswap migration contract\u2197": string; + "Unknown Source": string; + "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; + "Unlock Votes": string; + "Unlock Voting": string; + "Unlocking Votes": string; + "Unsupported Asset": string; + "Unsupported Assets": string; + "Unsupported network\u2013switch to another to trade.": string; + Untitled: string; + Unwrap: string; + "Unwrap <0/> to {0}": (string | string[])[]; + "Update Delegation": string; + "Update list": string; + "Use the Uniswap Labs API to get faster quotes.": string; + User: string; + "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; + "V2 liquidity": string; + "V3 {0} Price:": (string | string[])[]; + "View accrued fees and analytics<0>\u2197": string; + "View list": string; + "View on Etherscan": string; + "View on Explorer": string; + "View transaction on Explorer": string; + Vote: string; + "Vote Against": string; + "Vote For": string; + "Vote against proposal {proposalId}": (string | string[])[]; + "Vote against proposal {proposalKey}": (string | string[])[]; + "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote for proposal {proposalId}": (string | string[])[]; + "Vote for proposal {proposalKey}": (string | string[])[]; + "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote to abstain on proposal {proposalId}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Voting ended {0}": (string | string[])[]; + "Voting ends approximately {0}": (string | string[])[]; + "Voting starts approximately {0}": (string | string[])[]; + "Waiting For Confirmation": string; + "Wallet Address or ENS name": string; + "Weekly Rewards": string; + "Welcome to team Unicorn :)": string; + "When you claim without withdrawing your liquidity remains in the mining pool.": string; + "When you withdraw, the contract will automagically claim UNI on your behalf!": string; + "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; + Withdraw: string; + "Withdraw & Claim": string; + "Withdraw deposited liquidity": string; + "Withdrawing {0} UNI-V2": (string | string[])[]; + "Withdrew UNI-V2!": string; + Wrap: string; + "Wrap <0/> to {0}": (string | string[])[]; + "Wrong Network": string; + "You already have an active or pending proposal": string; + "You are creating a pool": string; + "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; + "You are the first liquidity provider.": string; + "You can either vote on each proposal yourself or delegate your votes to a third party.": string; + "You can now trade {0}": (string | string[])[]; + "You don't have enough votes to submit a proposal": string; + "You don\u2019t have liquidity in this pool yet.": string; + "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; + "You may have lost your network connection.": string; + "You might consider waiting until the network fees go down to complete this transaction.": string; + "You must connect an account.": string; + "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; + "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; + "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; + "You will also collect fees earned from this position.": string; + "You will receive": string; + "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; + "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; + "Your V2 liquidity": string; + "Your active V3 liquidity positions will appear here.": string; + "Your liquidity deposits": string; + "Your pool share:": string; + "Your position": string; + "Your position has 0 liquidity, and is not earning fees.": string; + "Your position will appear here.": string; + "Your position will be 100% composed of {0} at this price": (string | string[])[]; + "Your position will be 100% {0} at this price.": (string | string[])[]; + "Your position will not earn fees or be used in trades until the market price moves into your range.": string; + "Your positions": string; + "Your rate": string; + "Your total pool tokens:": string; + "Your transaction cost will be much higher as it includes the gas to create the pool.": string; + "Your transaction may be frontrun": string; + "Your transaction may fail": string; + "Your transaction will revert if it has been pending for longer than this period of time.": string; + "Your transaction will revert if it is pending for more than this period of time.": string; + "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; + "Your transactions will appear here...": string; + "Your unclaimed UNI": string; + "after slippage": string; + confirm: string; + "for {0}": (string | string[])[]; + gwei: string; + "has socks emoji": string; + "here.": string; + "https:// or ipfs:// or ENS name": string; + minutes: string; + "via {0}": (string | string[])[]; + "via {0} token list": (string | string[])[]; + "{0, plural, one {Import token} other {Import tokens}}": (string | { + one: string; + other: string; + })[][]; + "{0}": string[][]; + "{0} %": (string | string[])[]; + "{0} <0/> per <1/>": (string | string[])[]; + "{0} Custom Tokens": (string | string[])[]; + "{0} Deposited": (string | string[])[]; + "{0} ETH": (string | string[])[]; + "{0} Fees Earned:": (string | string[])[]; + "{0} Pending": (string | string[])[]; + "{0} UNI": (string | string[])[]; + "{0} UNI / week": (string | string[])[]; + "{0} UNI-V2": (string | string[])[]; + "{0} UNI-V2 LP tokens available": (string | string[])[]; + "{0} Votes": (string | string[])[]; + "{0} per {1}": (string | string[])[]; + "{0} tokens": (string | string[])[]; + "{0} {1} Price:": (string | string[])[]; + "{0} {nativeCurrencySymbol}": (string | string[])[]; + "{0} \u2022 Added by user": (string | string[])[]; + "{0}%": (string | string[])[]; + "{0}% fee tier": (string | string[])[]; + "{0}% pool": (string | string[])[]; + "{0}% select": (string | string[])[]; + "{0}-{1} Liquidity Mining": (string | string[])[]; + "{0}/{1} LP NFT": (string | string[])[]; + "{0}/{1} LP Tokens": (string | string[])[]; + "{SOCKS_AMOUNT} UNI": (string | string[])[]; + "{USER_AMOUNT} UNI": (string | string[])[]; + "{activeTokensOnThisChain} tokens": (string | string[])[]; + "{integrator} fee": (string | string[])[]; + "{label} token bridge": (string | string[])[]; + "{min}m {sec}s": (string | string[])[]; + "{percentForSlider}%": (string | string[])[]; + "{sec}s": (string | string[])[]; + "{tokenB} per {tokenA}": (string | string[])[]; + "\u2190 Back to Pools Overview": string; +}; diff --git a/dist2/types/locales/cs-CZ.d.ts b/dist2/types/locales/cs-CZ.d.ts new file mode 100644 index 00000000000..75120e0e5c9 --- /dev/null +++ b/dist2/types/locales/cs-CZ.d.ts @@ -0,0 +1,593 @@ +export const messages: { + "$-": string; + "$<0/>": string; + "${0}": (string | string[])[]; + "(${0})": (string | string[])[]; + "(View on Explorer)": string; + "(clear all)": string; + "(edit)": string; + "- Remove recipient": string; + "0 UNI / week": string; + "25%": string; + "50%": string; + "75%": string; + "<0/> All Proposals": string; + "<0/> Votes": string; + "<0>Account analytics and accrued fees<1> \u2197 ": string; + "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; + "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; + "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; + "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; + "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; + "<0>Unlock voting to prepare for the next proposal.": string; + "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; + "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; + About: string; + Accept: string; + Account: string; + Active: string; + Add: string; + "Add <0/> and <1/> to Uniswap V2": string; + "Add Delegate +": string; + "Add Liquidity": string; + "Add V2 Liquidity": string; + "Add liquidity.": string; + "Add more liquidity": string; + "Add {0} to Metamask <0/>": (string | string[])[]; + "Add {0}-{1} liquidity": (string | string[])[]; + "Add {0}/{1} V3 liquidity": (string | string[])[]; + "Added {0}": (string | string[])[]; + "Address has no available claim": string; + Against: string; + "Allow LP token migration": string; + "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; + "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; + Allowed: string; + Amount: string; + "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Approval pending <0/>": string; + Approve: string; + "Approve Token": string; + "Approve {0}": (string | string[])[]; + "Approve {0} first": (string | string[])[]; + Approved: string; + Approving: string; + "Approving {0}": (string | string[])[]; + Arbiscan: string; + "Arbitrum Bridge": string; + "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Are you sure?": string; + "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; + "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; + Auto: string; + "Auto Router API": string; + "Available to deposit: {0}": (string | string[])[]; + "Balance: {0}": (string | string[])[]; + "Best for exotic pairs.": string; + "Best for most pairs.": string; + "Best for stable pairs.": string; + "Best for very stable pairs.": string; + "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; + "Blocked address": string; + Bridge: string; + "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; + "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; + Canceled: string; + Change: string; + Charts: string; + "Check network status": string; + "Check out our v3 LP walkthrough and migration guides.": string; + Claim: string; + "Claim <0/> for {0}": (string | string[])[]; + "Claim UNI": string; + "Claim UNI Token": string; + "Claim UNI reward for {0}": (string | string[])[]; + "Claim fees": string; + "Claim your UNI tokens": string; + Claimed: string; + "Claimed UNI!": string; + "Claimed!": string; + Claiming: string; + "Claiming UNI": string; + "Claiming {0} UNI": (string | string[])[]; + "Clear All": string; + "Clear all": string; + Close: string; + Closed: string; + Collect: string; + "Collect as WETH": string; + "Collect fees": string; + "Collect {0}/{1} fees": (string | string[])[]; + Collected: string; + Collecting: string; + "Collecting fees": string; + "Collecting fees will withdraw currently available fees for you.": string; + Confirm: string; + "Confirm Supply": string; + "Confirm Swap": string; + "Confirm swap": string; + "Confirm this transaction in your wallet": string; + "Confirm transaction in wallet": string; + "Connect Wallet": string; + "Connect a wallet": string; + "Connect to a wallet to find pools": string; + "Connect to a wallet to view your V2 liquidity.": string; + "Connect to a wallet to view your liquidity.": string; + "Connect wallet to swap": string; + "Connected with {name}": (string | string[])[]; + Copied: string; + "Copy Address": string; + "Create Pool & Supply": string; + "Create Proposal": string; + "Create a pair": string; + "Create a pool": string; + "Create an issue on GitHub": string; + "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; + "Create pool.": string; + "Create {0}/{1} V3 pool": (string | string[])[]; + "Current price": string; + "Current {0} Price:": (string | string[])[]; + Custom: string; + "Dark Theme": string; + Defeated: string; + "Delegate Votes": string; + "Delegate voting power to {0}": (string | string[])[]; + "Delegated to:": string; + "Delegating votes": string; + Deposit: string; + "Deposit Amounts": string; + "Deposit UNI-V2 LP Tokens": string; + "Deposit liquidity": string; + "Deposit tokens to the {label} network.": (string | string[])[]; + "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; + "Deposited liquidity:": string; + "Deposited {0} UNI-V2": (string | string[])[]; + "Depositing Liquidity": string; + Description: string; + Detailed: string; + Details: string; + Disconnect: string; + Discord: string; + Dismiss: string; + Docs: string; + "Don\u2019t see one of your v2 positions? <0>Import it.": string; + "Earned UNI tokens represent voting shares in Uniswap governance.": string; + Edit: string; + "Efficiency Comparison": string; + "Enter a percent": string; + "Enter a recipient": string; + "Enter a valid slippage percentage": string; + "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; + "Enter an amount": string; + "Enter valid list location": string; + "Enter valid token address": string; + "Enter {0} amount": (string | string[])[]; + Error: string; + "Error connecting": string; + "Error connecting. Try refreshing the page.": string; + "Error details": string; + "Error importing list": string; + "Estimate may differ due to your wallet gas settings": string; + "Estimated network fee": string; + Etherscan: string; + Executed: string; + "Expanded results from inactive Token Lists": string; + "Expected Output": string; + "Expert Mode": string; + "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; + Expired: string; + "Explore Uniswap Analytics.": string; + "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; + "Fee Tier": string; + "Fee tier": string; + "Fetching best price...": string; + "Fetching best price\u2026": string; + For: string; + "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; + From: string; + "From (at most)": string; + "Full Range": string; + "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; + "Get support on Discord": string; + "Help Center": string; + Hide: string; + "Hide closed positions": string; + "High Price Impact": string; + "How this app uses APIs": string; + "I understand": string; + "If you purchase a token from this list, you may not be able to sell it back.": string; + Import: string; + "Import List": string; + "Import Pool": string; + "Import V2 Pool": string; + "Import at your own risk": string; + "In range": string; + "Increase Liquidity": string; + "Initial prices and pool share": string; + "Initializing...": string; + "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Install Metamask": string; + "Insufficient liquidity for this trade.": string; + "Insufficient {0}": (string | string[])[]; + "Insufficient {0} balance": (string | string[])[]; + "Interface Settings": string; + "Invalid pair": string; + "Invalid pair.": string; + "Invalid price input": string; + "Invalid range selected. The min price must be lower than the max price.": string; + "Invalid recipient": string; + Language: string; + Learn: string; + "Learn about providing liquidity": string; + "Learn more": string; + "Legal & Privacy": string; + "Light Theme": string; + Liquidity: string; + "Liquidity data not available.": string; + "Liquidity provider rewards": string; + "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + Lists: string; + Loaded: string; + Loading: string; + MAX: string; + Manage: string; + "Manage Liquidity in Rewards Pool": string; + "Manage Token Lists": string; + "Manage this pool.": string; + Max: string; + "Max Price": string; + "Max price": string; + "Max slippage": string; + "Max:": string; + "Maximum sent": string; + Menu: string; + Migrate: string; + "Migrate Liquidity to V3": string; + "Migrate V2 Liquidity": string; + "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; + "Migrate {0}/{1} liquidity to V3": (string | string[])[]; + Migrating: string; + "Min Price": string; + "Min price": string; + "Min:": string; + "Minimum received": string; + "Missing dependencies": string; + "Mock Toggle": string; + More: string; + "Network Fee": string; + "Network Warning": string; + "Network fees exceed 50% of the swap amount!": string; + "New Position": string; + "No V2 Liquidity found.": string; + "No active pools": string; + "No data": string; + "No description.": string; + "No liquidity found.": string; + "No pool found.": string; + "No proposals found.": string; + "No results found.": string; + "Not created": string; + OFF: string; + ON: string; + "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; + Off: string; + On: string; + "Once you are happy with the rate click supply to review.": string; + "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; + "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; + "Optimism Gateway": string; + "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Optimistic Etherscan": string; + "Out of range": string; + "Output is estimated.": string; + "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; + "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Output will be sent to <0>{0}": (string | string[])[]; + Owner: string; + "Participating pools": string; + Pending: string; + "Please confirm you would like to remove this list by typing REMOVE": string; + "Please connect to Layer 1 Ethereum": string; + "Please connect to a supported network in the dropdown menu or in your wallet.": string; + "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; + "Polygon Bridge": string; + Polygonscan: string; + Pool: string; + "Pool Found!": string; + "Pool Rate": string; + "Pool rate": string; + "Pool tokens in rewards pool:": string; + "Pooled {0}:": (string | string[])[]; + "Pools Overview": string; + Preview: string; + Price: string; + "Price Difference:": string; + "Price Impact": string; + "Price Impact Too High": string; + "Price Updated": string; + "Price impact": string; + "Price range": string; + "Price updated": string; + "Price:": string; + "Prices and pool share": string; + Proposal: string; + "Proposal Submitted": string; + "Proposal Title": string; + Proposals: string; + "Proposals submitted by community members will appear here.": string; + "Proposed Action": string; + Proposer: string; + "Protocol Disclaimer": string; + Queued: string; + Rates: string; + "Read more about UNI": string; + "Read more about Uniswap governance": string; + "Read more about providing liquidity": string; + "Read more about unsupported assets": string; + "Recent Transactions": string; + "Recent transactions": string; + Recipient: string; + "Reload the page": string; + Remove: string; + "Remove <0/> and <1/>": string; + "Remove Amount": string; + "Remove Delegate": string; + "Remove Liquidity": string; + "Remove list": string; + "Removing {0} {1} and {2} {3}": (string | string[])[]; + "Removing {0} {1} and{2} {3}": (string | string[])[]; + "Request Features": string; + Reset: string; + Return: string; + "Review swap": string; + "Search by token name or address": string; + "Search name or paste address": string; + "Select Pair": string; + "Select a network": string; + "Select a token": string; + "Select a token to find your v2 liquidity.": string; + "Select an action": string; + "Selected Range": string; + Self: string; + "Self Delegate": string; + "Set Price Range": string; + "Set Starting Price": string; + Settings: string; + "Share of Pool": string; + "Share of Pool:": string; + "Show Portis": string; + "Show closed positions": string; + Simple: string; + "Slippage tolerance": string; + "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; + "Something went wrong": string; + "Something went wrong.": string; + "Step 1. Get UNI-V2 Liquidity tokens": string; + "Submit new proposal": string; + "Submitting Proposal": string; + "Submitting Vote": string; + Succeeded: string; + Success: string; + Supply: string; + "Supplying {0} {1} and {2} {3}": (string | string[])[]; + Swap: string; + "Swap <0/> for exactly <1/>": string; + "Swap Anyway": string; + "Swap details": string; + "Swap exactly <0/> for <1/>": string; + "Swap failed: {0}": (string | string[])[]; + "Swap summary": string; + "Swapping {0} {1} for {2} {3}": (string | string[])[]; + "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; + "Tell us what you think \u2197": string; + "Thanks for being part of the Uniswap community <0/>": string; + "The % you will earn in fees.": string; + "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; + "The app fetches blockchain data from The Graph\u2019s hosted service.": string; + "The app fetches on-chain data and constructs contract calls with an Infura API.": string; + "The app fetches the optimal trade route from a Uniswap Labs server.": string; + "The app logs anonymized usage statistics in order to improve over time.": string; + "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; + "The cost of sending this transaction is more than half of the value of the input amount.": string; + "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; + "The estimated difference between the USD values of input and output amounts.": string; + "The input token cannot be transferred. There may be an issue with the input token.": string; + "The market price is outside your specified price range. Single-asset deposit only.": string; + "The most recent block number on this network. Prices update on every block.": string; + "The output token cannot be transferred. There may be an issue with the output token.": string; + "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; + "The price of this pool is within your selected range. Your position is currently earning fees.": string; + "The ratio of tokens you add will set the price of this pool.": string; + "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; + "There is no liquidity data.": string; + "This app uses the following third-party APIs:": string; + "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; + "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; + "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; + "This token is not supported in the Uniswap Labs app": string; + "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; + "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; + "Tip: Custom tokens are stored locally in your browser": string; + To: string; + "To (at least)": string; + "Token not supported": string; + Tokens: string; + "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; + "Top pools": string; + "Total deposited": string; + "Total deposits": string; + "Trade Route": string; + Trading: string; + "Transaction Settings": string; + "Transaction Submitted": string; + "Transaction completed in": string; + "Transaction deadline": string; + "Transaction pending": string; + "Transaction rejected.": string; + "Transaction submitted": string; + "Transfer Token": string; + "Try Again": string; + "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Turn On Expert Mode": string; + "UNI has arrived": string; + "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; + "UNI {0}/{1} Burned": (string | string[])[]; + "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; + "UNI-V2 {0}-{1}": (string | string[])[]; + "Unclaimed UNI": string; + "Unclaimed fees": string; + Undetermined: string; + "Unexpected error. Could not estimate gas for the swap.": string; + "Unexpected issue with estimating the gas. Please try again.": string; + "Uniswap Governance": string; + "Uniswap Labs' Terms of Service": string; + "Uniswap available in: <0>{0}": (string | string[])[]; + "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; + "Uniswap liquidity mining": string; + "Uniswap migration contract\u2197": string; + "Unknown Source": string; + "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; + "Unlock Votes": string; + "Unlock Voting": string; + "Unlocking Votes": string; + "Unsupported Asset": string; + "Unsupported Assets": string; + "Unsupported network\u2013switch to another to trade.": string; + Untitled: string; + Unwrap: string; + "Unwrap <0/> to {0}": (string | string[])[]; + "Update Delegation": string; + "Update list": string; + "Use the Uniswap Labs API to get faster quotes.": string; + User: string; + "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; + "V2 liquidity": string; + "V3 {0} Price:": (string | string[])[]; + "View accrued fees and analytics<0>\u2197": string; + "View list": string; + "View on Etherscan": string; + "View on Explorer": string; + "View transaction on Explorer": string; + Vote: string; + "Vote Against": string; + "Vote For": string; + "Vote against proposal {proposalId}": (string | string[])[]; + "Vote against proposal {proposalKey}": (string | string[])[]; + "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote for proposal {proposalId}": (string | string[])[]; + "Vote for proposal {proposalKey}": (string | string[])[]; + "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote to abstain on proposal {proposalId}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Voting ended {0}": (string | string[])[]; + "Voting ends approximately {0}": (string | string[])[]; + "Voting starts approximately {0}": (string | string[])[]; + "Waiting For Confirmation": string; + "Wallet Address or ENS name": string; + "Weekly Rewards": string; + "Welcome to team Unicorn :)": string; + "When you claim without withdrawing your liquidity remains in the mining pool.": string; + "When you withdraw, the contract will automagically claim UNI on your behalf!": string; + "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; + Withdraw: string; + "Withdraw & Claim": string; + "Withdraw deposited liquidity": string; + "Withdrawing {0} UNI-V2": (string | string[])[]; + "Withdrew UNI-V2!": string; + Wrap: string; + "Wrap <0/> to {0}": (string | string[])[]; + "Wrong Network": string; + "You already have an active or pending proposal": string; + "You are creating a pool": string; + "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; + "You are the first liquidity provider.": string; + "You can either vote on each proposal yourself or delegate your votes to a third party.": string; + "You can now trade {0}": (string | string[])[]; + "You don't have enough votes to submit a proposal": string; + "You don\u2019t have liquidity in this pool yet.": string; + "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; + "You may have lost your network connection.": string; + "You might consider waiting until the network fees go down to complete this transaction.": string; + "You must connect an account.": string; + "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; + "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; + "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; + "You will also collect fees earned from this position.": string; + "You will receive": string; + "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; + "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; + "Your V2 liquidity": string; + "Your active V3 liquidity positions will appear here.": string; + "Your liquidity deposits": string; + "Your pool share:": string; + "Your position": string; + "Your position has 0 liquidity, and is not earning fees.": string; + "Your position will appear here.": string; + "Your position will be 100% composed of {0} at this price": (string | string[])[]; + "Your position will be 100% {0} at this price.": (string | string[])[]; + "Your position will not earn fees or be used in trades until the market price moves into your range.": string; + "Your positions": string; + "Your rate": string; + "Your total pool tokens:": string; + "Your transaction cost will be much higher as it includes the gas to create the pool.": string; + "Your transaction may be frontrun": string; + "Your transaction may fail": string; + "Your transaction will revert if it has been pending for longer than this period of time.": string; + "Your transaction will revert if it is pending for more than this period of time.": string; + "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; + "Your transactions will appear here...": string; + "Your unclaimed UNI": string; + "after slippage": string; + confirm: string; + "for {0}": (string | string[])[]; + gwei: string; + "has socks emoji": string; + "here.": string; + "https:// or ipfs:// or ENS name": string; + minutes: string; + "via {0}": (string | string[])[]; + "via {0} token list": (string | string[])[]; + "{0, plural, one {Import token} other {Import tokens}}": (string | { + one: string; + other: string; + })[][]; + "{0}": string[][]; + "{0} %": (string | string[])[]; + "{0} <0/> per <1/>": (string | string[])[]; + "{0} Custom Tokens": (string | string[])[]; + "{0} Deposited": (string | string[])[]; + "{0} ETH": (string | string[])[]; + "{0} Fees Earned:": (string | string[])[]; + "{0} Pending": (string | string[])[]; + "{0} UNI": (string | string[])[]; + "{0} UNI / week": (string | string[])[]; + "{0} UNI-V2": (string | string[])[]; + "{0} UNI-V2 LP tokens available": (string | string[])[]; + "{0} Votes": (string | string[])[]; + "{0} per {1}": (string | string[])[]; + "{0} tokens": (string | string[])[]; + "{0} {1} Price:": (string | string[])[]; + "{0} {nativeCurrencySymbol}": (string | string[])[]; + "{0} \u2022 Added by user": (string | string[])[]; + "{0}%": (string | string[])[]; + "{0}% fee tier": (string | string[])[]; + "{0}% pool": (string | string[])[]; + "{0}% select": (string | string[])[]; + "{0}-{1} Liquidity Mining": (string | string[])[]; + "{0}/{1} LP NFT": (string | string[])[]; + "{0}/{1} LP Tokens": (string | string[])[]; + "{SOCKS_AMOUNT} UNI": (string | string[])[]; + "{USER_AMOUNT} UNI": (string | string[])[]; + "{activeTokensOnThisChain} tokens": (string | string[])[]; + "{integrator} fee": (string | string[])[]; + "{label} token bridge": (string | string[])[]; + "{min}m {sec}s": (string | string[])[]; + "{percentForSlider}%": (string | string[])[]; + "{sec}s": (string | string[])[]; + "{tokenB} per {tokenA}": (string | string[])[]; + "\u2190 Back to Pools Overview": string; +}; diff --git a/dist2/types/locales/da-DK.d.ts b/dist2/types/locales/da-DK.d.ts new file mode 100644 index 00000000000..75120e0e5c9 --- /dev/null +++ b/dist2/types/locales/da-DK.d.ts @@ -0,0 +1,593 @@ +export const messages: { + "$-": string; + "$<0/>": string; + "${0}": (string | string[])[]; + "(${0})": (string | string[])[]; + "(View on Explorer)": string; + "(clear all)": string; + "(edit)": string; + "- Remove recipient": string; + "0 UNI / week": string; + "25%": string; + "50%": string; + "75%": string; + "<0/> All Proposals": string; + "<0/> Votes": string; + "<0>Account analytics and accrued fees<1> \u2197 ": string; + "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; + "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; + "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; + "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; + "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; + "<0>Unlock voting to prepare for the next proposal.": string; + "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; + "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; + About: string; + Accept: string; + Account: string; + Active: string; + Add: string; + "Add <0/> and <1/> to Uniswap V2": string; + "Add Delegate +": string; + "Add Liquidity": string; + "Add V2 Liquidity": string; + "Add liquidity.": string; + "Add more liquidity": string; + "Add {0} to Metamask <0/>": (string | string[])[]; + "Add {0}-{1} liquidity": (string | string[])[]; + "Add {0}/{1} V3 liquidity": (string | string[])[]; + "Added {0}": (string | string[])[]; + "Address has no available claim": string; + Against: string; + "Allow LP token migration": string; + "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; + "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; + Allowed: string; + Amount: string; + "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Approval pending <0/>": string; + Approve: string; + "Approve Token": string; + "Approve {0}": (string | string[])[]; + "Approve {0} first": (string | string[])[]; + Approved: string; + Approving: string; + "Approving {0}": (string | string[])[]; + Arbiscan: string; + "Arbitrum Bridge": string; + "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Are you sure?": string; + "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; + "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; + Auto: string; + "Auto Router API": string; + "Available to deposit: {0}": (string | string[])[]; + "Balance: {0}": (string | string[])[]; + "Best for exotic pairs.": string; + "Best for most pairs.": string; + "Best for stable pairs.": string; + "Best for very stable pairs.": string; + "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; + "Blocked address": string; + Bridge: string; + "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; + "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; + Canceled: string; + Change: string; + Charts: string; + "Check network status": string; + "Check out our v3 LP walkthrough and migration guides.": string; + Claim: string; + "Claim <0/> for {0}": (string | string[])[]; + "Claim UNI": string; + "Claim UNI Token": string; + "Claim UNI reward for {0}": (string | string[])[]; + "Claim fees": string; + "Claim your UNI tokens": string; + Claimed: string; + "Claimed UNI!": string; + "Claimed!": string; + Claiming: string; + "Claiming UNI": string; + "Claiming {0} UNI": (string | string[])[]; + "Clear All": string; + "Clear all": string; + Close: string; + Closed: string; + Collect: string; + "Collect as WETH": string; + "Collect fees": string; + "Collect {0}/{1} fees": (string | string[])[]; + Collected: string; + Collecting: string; + "Collecting fees": string; + "Collecting fees will withdraw currently available fees for you.": string; + Confirm: string; + "Confirm Supply": string; + "Confirm Swap": string; + "Confirm swap": string; + "Confirm this transaction in your wallet": string; + "Confirm transaction in wallet": string; + "Connect Wallet": string; + "Connect a wallet": string; + "Connect to a wallet to find pools": string; + "Connect to a wallet to view your V2 liquidity.": string; + "Connect to a wallet to view your liquidity.": string; + "Connect wallet to swap": string; + "Connected with {name}": (string | string[])[]; + Copied: string; + "Copy Address": string; + "Create Pool & Supply": string; + "Create Proposal": string; + "Create a pair": string; + "Create a pool": string; + "Create an issue on GitHub": string; + "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; + "Create pool.": string; + "Create {0}/{1} V3 pool": (string | string[])[]; + "Current price": string; + "Current {0} Price:": (string | string[])[]; + Custom: string; + "Dark Theme": string; + Defeated: string; + "Delegate Votes": string; + "Delegate voting power to {0}": (string | string[])[]; + "Delegated to:": string; + "Delegating votes": string; + Deposit: string; + "Deposit Amounts": string; + "Deposit UNI-V2 LP Tokens": string; + "Deposit liquidity": string; + "Deposit tokens to the {label} network.": (string | string[])[]; + "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; + "Deposited liquidity:": string; + "Deposited {0} UNI-V2": (string | string[])[]; + "Depositing Liquidity": string; + Description: string; + Detailed: string; + Details: string; + Disconnect: string; + Discord: string; + Dismiss: string; + Docs: string; + "Don\u2019t see one of your v2 positions? <0>Import it.": string; + "Earned UNI tokens represent voting shares in Uniswap governance.": string; + Edit: string; + "Efficiency Comparison": string; + "Enter a percent": string; + "Enter a recipient": string; + "Enter a valid slippage percentage": string; + "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; + "Enter an amount": string; + "Enter valid list location": string; + "Enter valid token address": string; + "Enter {0} amount": (string | string[])[]; + Error: string; + "Error connecting": string; + "Error connecting. Try refreshing the page.": string; + "Error details": string; + "Error importing list": string; + "Estimate may differ due to your wallet gas settings": string; + "Estimated network fee": string; + Etherscan: string; + Executed: string; + "Expanded results from inactive Token Lists": string; + "Expected Output": string; + "Expert Mode": string; + "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; + Expired: string; + "Explore Uniswap Analytics.": string; + "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; + "Fee Tier": string; + "Fee tier": string; + "Fetching best price...": string; + "Fetching best price\u2026": string; + For: string; + "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; + From: string; + "From (at most)": string; + "Full Range": string; + "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; + "Get support on Discord": string; + "Help Center": string; + Hide: string; + "Hide closed positions": string; + "High Price Impact": string; + "How this app uses APIs": string; + "I understand": string; + "If you purchase a token from this list, you may not be able to sell it back.": string; + Import: string; + "Import List": string; + "Import Pool": string; + "Import V2 Pool": string; + "Import at your own risk": string; + "In range": string; + "Increase Liquidity": string; + "Initial prices and pool share": string; + "Initializing...": string; + "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Install Metamask": string; + "Insufficient liquidity for this trade.": string; + "Insufficient {0}": (string | string[])[]; + "Insufficient {0} balance": (string | string[])[]; + "Interface Settings": string; + "Invalid pair": string; + "Invalid pair.": string; + "Invalid price input": string; + "Invalid range selected. The min price must be lower than the max price.": string; + "Invalid recipient": string; + Language: string; + Learn: string; + "Learn about providing liquidity": string; + "Learn more": string; + "Legal & Privacy": string; + "Light Theme": string; + Liquidity: string; + "Liquidity data not available.": string; + "Liquidity provider rewards": string; + "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + Lists: string; + Loaded: string; + Loading: string; + MAX: string; + Manage: string; + "Manage Liquidity in Rewards Pool": string; + "Manage Token Lists": string; + "Manage this pool.": string; + Max: string; + "Max Price": string; + "Max price": string; + "Max slippage": string; + "Max:": string; + "Maximum sent": string; + Menu: string; + Migrate: string; + "Migrate Liquidity to V3": string; + "Migrate V2 Liquidity": string; + "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; + "Migrate {0}/{1} liquidity to V3": (string | string[])[]; + Migrating: string; + "Min Price": string; + "Min price": string; + "Min:": string; + "Minimum received": string; + "Missing dependencies": string; + "Mock Toggle": string; + More: string; + "Network Fee": string; + "Network Warning": string; + "Network fees exceed 50% of the swap amount!": string; + "New Position": string; + "No V2 Liquidity found.": string; + "No active pools": string; + "No data": string; + "No description.": string; + "No liquidity found.": string; + "No pool found.": string; + "No proposals found.": string; + "No results found.": string; + "Not created": string; + OFF: string; + ON: string; + "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; + Off: string; + On: string; + "Once you are happy with the rate click supply to review.": string; + "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; + "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; + "Optimism Gateway": string; + "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Optimistic Etherscan": string; + "Out of range": string; + "Output is estimated.": string; + "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; + "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Output will be sent to <0>{0}": (string | string[])[]; + Owner: string; + "Participating pools": string; + Pending: string; + "Please confirm you would like to remove this list by typing REMOVE": string; + "Please connect to Layer 1 Ethereum": string; + "Please connect to a supported network in the dropdown menu or in your wallet.": string; + "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; + "Polygon Bridge": string; + Polygonscan: string; + Pool: string; + "Pool Found!": string; + "Pool Rate": string; + "Pool rate": string; + "Pool tokens in rewards pool:": string; + "Pooled {0}:": (string | string[])[]; + "Pools Overview": string; + Preview: string; + Price: string; + "Price Difference:": string; + "Price Impact": string; + "Price Impact Too High": string; + "Price Updated": string; + "Price impact": string; + "Price range": string; + "Price updated": string; + "Price:": string; + "Prices and pool share": string; + Proposal: string; + "Proposal Submitted": string; + "Proposal Title": string; + Proposals: string; + "Proposals submitted by community members will appear here.": string; + "Proposed Action": string; + Proposer: string; + "Protocol Disclaimer": string; + Queued: string; + Rates: string; + "Read more about UNI": string; + "Read more about Uniswap governance": string; + "Read more about providing liquidity": string; + "Read more about unsupported assets": string; + "Recent Transactions": string; + "Recent transactions": string; + Recipient: string; + "Reload the page": string; + Remove: string; + "Remove <0/> and <1/>": string; + "Remove Amount": string; + "Remove Delegate": string; + "Remove Liquidity": string; + "Remove list": string; + "Removing {0} {1} and {2} {3}": (string | string[])[]; + "Removing {0} {1} and{2} {3}": (string | string[])[]; + "Request Features": string; + Reset: string; + Return: string; + "Review swap": string; + "Search by token name or address": string; + "Search name or paste address": string; + "Select Pair": string; + "Select a network": string; + "Select a token": string; + "Select a token to find your v2 liquidity.": string; + "Select an action": string; + "Selected Range": string; + Self: string; + "Self Delegate": string; + "Set Price Range": string; + "Set Starting Price": string; + Settings: string; + "Share of Pool": string; + "Share of Pool:": string; + "Show Portis": string; + "Show closed positions": string; + Simple: string; + "Slippage tolerance": string; + "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; + "Something went wrong": string; + "Something went wrong.": string; + "Step 1. Get UNI-V2 Liquidity tokens": string; + "Submit new proposal": string; + "Submitting Proposal": string; + "Submitting Vote": string; + Succeeded: string; + Success: string; + Supply: string; + "Supplying {0} {1} and {2} {3}": (string | string[])[]; + Swap: string; + "Swap <0/> for exactly <1/>": string; + "Swap Anyway": string; + "Swap details": string; + "Swap exactly <0/> for <1/>": string; + "Swap failed: {0}": (string | string[])[]; + "Swap summary": string; + "Swapping {0} {1} for {2} {3}": (string | string[])[]; + "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; + "Tell us what you think \u2197": string; + "Thanks for being part of the Uniswap community <0/>": string; + "The % you will earn in fees.": string; + "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; + "The app fetches blockchain data from The Graph\u2019s hosted service.": string; + "The app fetches on-chain data and constructs contract calls with an Infura API.": string; + "The app fetches the optimal trade route from a Uniswap Labs server.": string; + "The app logs anonymized usage statistics in order to improve over time.": string; + "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; + "The cost of sending this transaction is more than half of the value of the input amount.": string; + "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; + "The estimated difference between the USD values of input and output amounts.": string; + "The input token cannot be transferred. There may be an issue with the input token.": string; + "The market price is outside your specified price range. Single-asset deposit only.": string; + "The most recent block number on this network. Prices update on every block.": string; + "The output token cannot be transferred. There may be an issue with the output token.": string; + "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; + "The price of this pool is within your selected range. Your position is currently earning fees.": string; + "The ratio of tokens you add will set the price of this pool.": string; + "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; + "There is no liquidity data.": string; + "This app uses the following third-party APIs:": string; + "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; + "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; + "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; + "This token is not supported in the Uniswap Labs app": string; + "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; + "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; + "Tip: Custom tokens are stored locally in your browser": string; + To: string; + "To (at least)": string; + "Token not supported": string; + Tokens: string; + "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; + "Top pools": string; + "Total deposited": string; + "Total deposits": string; + "Trade Route": string; + Trading: string; + "Transaction Settings": string; + "Transaction Submitted": string; + "Transaction completed in": string; + "Transaction deadline": string; + "Transaction pending": string; + "Transaction rejected.": string; + "Transaction submitted": string; + "Transfer Token": string; + "Try Again": string; + "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Turn On Expert Mode": string; + "UNI has arrived": string; + "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; + "UNI {0}/{1} Burned": (string | string[])[]; + "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; + "UNI-V2 {0}-{1}": (string | string[])[]; + "Unclaimed UNI": string; + "Unclaimed fees": string; + Undetermined: string; + "Unexpected error. Could not estimate gas for the swap.": string; + "Unexpected issue with estimating the gas. Please try again.": string; + "Uniswap Governance": string; + "Uniswap Labs' Terms of Service": string; + "Uniswap available in: <0>{0}": (string | string[])[]; + "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; + "Uniswap liquidity mining": string; + "Uniswap migration contract\u2197": string; + "Unknown Source": string; + "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; + "Unlock Votes": string; + "Unlock Voting": string; + "Unlocking Votes": string; + "Unsupported Asset": string; + "Unsupported Assets": string; + "Unsupported network\u2013switch to another to trade.": string; + Untitled: string; + Unwrap: string; + "Unwrap <0/> to {0}": (string | string[])[]; + "Update Delegation": string; + "Update list": string; + "Use the Uniswap Labs API to get faster quotes.": string; + User: string; + "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; + "V2 liquidity": string; + "V3 {0} Price:": (string | string[])[]; + "View accrued fees and analytics<0>\u2197": string; + "View list": string; + "View on Etherscan": string; + "View on Explorer": string; + "View transaction on Explorer": string; + Vote: string; + "Vote Against": string; + "Vote For": string; + "Vote against proposal {proposalId}": (string | string[])[]; + "Vote against proposal {proposalKey}": (string | string[])[]; + "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote for proposal {proposalId}": (string | string[])[]; + "Vote for proposal {proposalKey}": (string | string[])[]; + "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote to abstain on proposal {proposalId}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Voting ended {0}": (string | string[])[]; + "Voting ends approximately {0}": (string | string[])[]; + "Voting starts approximately {0}": (string | string[])[]; + "Waiting For Confirmation": string; + "Wallet Address or ENS name": string; + "Weekly Rewards": string; + "Welcome to team Unicorn :)": string; + "When you claim without withdrawing your liquidity remains in the mining pool.": string; + "When you withdraw, the contract will automagically claim UNI on your behalf!": string; + "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; + Withdraw: string; + "Withdraw & Claim": string; + "Withdraw deposited liquidity": string; + "Withdrawing {0} UNI-V2": (string | string[])[]; + "Withdrew UNI-V2!": string; + Wrap: string; + "Wrap <0/> to {0}": (string | string[])[]; + "Wrong Network": string; + "You already have an active or pending proposal": string; + "You are creating a pool": string; + "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; + "You are the first liquidity provider.": string; + "You can either vote on each proposal yourself or delegate your votes to a third party.": string; + "You can now trade {0}": (string | string[])[]; + "You don't have enough votes to submit a proposal": string; + "You don\u2019t have liquidity in this pool yet.": string; + "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; + "You may have lost your network connection.": string; + "You might consider waiting until the network fees go down to complete this transaction.": string; + "You must connect an account.": string; + "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; + "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; + "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; + "You will also collect fees earned from this position.": string; + "You will receive": string; + "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; + "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; + "Your V2 liquidity": string; + "Your active V3 liquidity positions will appear here.": string; + "Your liquidity deposits": string; + "Your pool share:": string; + "Your position": string; + "Your position has 0 liquidity, and is not earning fees.": string; + "Your position will appear here.": string; + "Your position will be 100% composed of {0} at this price": (string | string[])[]; + "Your position will be 100% {0} at this price.": (string | string[])[]; + "Your position will not earn fees or be used in trades until the market price moves into your range.": string; + "Your positions": string; + "Your rate": string; + "Your total pool tokens:": string; + "Your transaction cost will be much higher as it includes the gas to create the pool.": string; + "Your transaction may be frontrun": string; + "Your transaction may fail": string; + "Your transaction will revert if it has been pending for longer than this period of time.": string; + "Your transaction will revert if it is pending for more than this period of time.": string; + "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; + "Your transactions will appear here...": string; + "Your unclaimed UNI": string; + "after slippage": string; + confirm: string; + "for {0}": (string | string[])[]; + gwei: string; + "has socks emoji": string; + "here.": string; + "https:// or ipfs:// or ENS name": string; + minutes: string; + "via {0}": (string | string[])[]; + "via {0} token list": (string | string[])[]; + "{0, plural, one {Import token} other {Import tokens}}": (string | { + one: string; + other: string; + })[][]; + "{0}": string[][]; + "{0} %": (string | string[])[]; + "{0} <0/> per <1/>": (string | string[])[]; + "{0} Custom Tokens": (string | string[])[]; + "{0} Deposited": (string | string[])[]; + "{0} ETH": (string | string[])[]; + "{0} Fees Earned:": (string | string[])[]; + "{0} Pending": (string | string[])[]; + "{0} UNI": (string | string[])[]; + "{0} UNI / week": (string | string[])[]; + "{0} UNI-V2": (string | string[])[]; + "{0} UNI-V2 LP tokens available": (string | string[])[]; + "{0} Votes": (string | string[])[]; + "{0} per {1}": (string | string[])[]; + "{0} tokens": (string | string[])[]; + "{0} {1} Price:": (string | string[])[]; + "{0} {nativeCurrencySymbol}": (string | string[])[]; + "{0} \u2022 Added by user": (string | string[])[]; + "{0}%": (string | string[])[]; + "{0}% fee tier": (string | string[])[]; + "{0}% pool": (string | string[])[]; + "{0}% select": (string | string[])[]; + "{0}-{1} Liquidity Mining": (string | string[])[]; + "{0}/{1} LP NFT": (string | string[])[]; + "{0}/{1} LP Tokens": (string | string[])[]; + "{SOCKS_AMOUNT} UNI": (string | string[])[]; + "{USER_AMOUNT} UNI": (string | string[])[]; + "{activeTokensOnThisChain} tokens": (string | string[])[]; + "{integrator} fee": (string | string[])[]; + "{label} token bridge": (string | string[])[]; + "{min}m {sec}s": (string | string[])[]; + "{percentForSlider}%": (string | string[])[]; + "{sec}s": (string | string[])[]; + "{tokenB} per {tokenA}": (string | string[])[]; + "\u2190 Back to Pools Overview": string; +}; diff --git a/dist2/types/locales/de-DE.d.ts b/dist2/types/locales/de-DE.d.ts new file mode 100644 index 00000000000..75120e0e5c9 --- /dev/null +++ b/dist2/types/locales/de-DE.d.ts @@ -0,0 +1,593 @@ +export const messages: { + "$-": string; + "$<0/>": string; + "${0}": (string | string[])[]; + "(${0})": (string | string[])[]; + "(View on Explorer)": string; + "(clear all)": string; + "(edit)": string; + "- Remove recipient": string; + "0 UNI / week": string; + "25%": string; + "50%": string; + "75%": string; + "<0/> All Proposals": string; + "<0/> Votes": string; + "<0>Account analytics and accrued fees<1> \u2197 ": string; + "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; + "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; + "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; + "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; + "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; + "<0>Unlock voting to prepare for the next proposal.": string; + "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; + "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; + About: string; + Accept: string; + Account: string; + Active: string; + Add: string; + "Add <0/> and <1/> to Uniswap V2": string; + "Add Delegate +": string; + "Add Liquidity": string; + "Add V2 Liquidity": string; + "Add liquidity.": string; + "Add more liquidity": string; + "Add {0} to Metamask <0/>": (string | string[])[]; + "Add {0}-{1} liquidity": (string | string[])[]; + "Add {0}/{1} V3 liquidity": (string | string[])[]; + "Added {0}": (string | string[])[]; + "Address has no available claim": string; + Against: string; + "Allow LP token migration": string; + "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; + "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; + Allowed: string; + Amount: string; + "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Approval pending <0/>": string; + Approve: string; + "Approve Token": string; + "Approve {0}": (string | string[])[]; + "Approve {0} first": (string | string[])[]; + Approved: string; + Approving: string; + "Approving {0}": (string | string[])[]; + Arbiscan: string; + "Arbitrum Bridge": string; + "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Are you sure?": string; + "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; + "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; + Auto: string; + "Auto Router API": string; + "Available to deposit: {0}": (string | string[])[]; + "Balance: {0}": (string | string[])[]; + "Best for exotic pairs.": string; + "Best for most pairs.": string; + "Best for stable pairs.": string; + "Best for very stable pairs.": string; + "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; + "Blocked address": string; + Bridge: string; + "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; + "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; + Canceled: string; + Change: string; + Charts: string; + "Check network status": string; + "Check out our v3 LP walkthrough and migration guides.": string; + Claim: string; + "Claim <0/> for {0}": (string | string[])[]; + "Claim UNI": string; + "Claim UNI Token": string; + "Claim UNI reward for {0}": (string | string[])[]; + "Claim fees": string; + "Claim your UNI tokens": string; + Claimed: string; + "Claimed UNI!": string; + "Claimed!": string; + Claiming: string; + "Claiming UNI": string; + "Claiming {0} UNI": (string | string[])[]; + "Clear All": string; + "Clear all": string; + Close: string; + Closed: string; + Collect: string; + "Collect as WETH": string; + "Collect fees": string; + "Collect {0}/{1} fees": (string | string[])[]; + Collected: string; + Collecting: string; + "Collecting fees": string; + "Collecting fees will withdraw currently available fees for you.": string; + Confirm: string; + "Confirm Supply": string; + "Confirm Swap": string; + "Confirm swap": string; + "Confirm this transaction in your wallet": string; + "Confirm transaction in wallet": string; + "Connect Wallet": string; + "Connect a wallet": string; + "Connect to a wallet to find pools": string; + "Connect to a wallet to view your V2 liquidity.": string; + "Connect to a wallet to view your liquidity.": string; + "Connect wallet to swap": string; + "Connected with {name}": (string | string[])[]; + Copied: string; + "Copy Address": string; + "Create Pool & Supply": string; + "Create Proposal": string; + "Create a pair": string; + "Create a pool": string; + "Create an issue on GitHub": string; + "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; + "Create pool.": string; + "Create {0}/{1} V3 pool": (string | string[])[]; + "Current price": string; + "Current {0} Price:": (string | string[])[]; + Custom: string; + "Dark Theme": string; + Defeated: string; + "Delegate Votes": string; + "Delegate voting power to {0}": (string | string[])[]; + "Delegated to:": string; + "Delegating votes": string; + Deposit: string; + "Deposit Amounts": string; + "Deposit UNI-V2 LP Tokens": string; + "Deposit liquidity": string; + "Deposit tokens to the {label} network.": (string | string[])[]; + "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; + "Deposited liquidity:": string; + "Deposited {0} UNI-V2": (string | string[])[]; + "Depositing Liquidity": string; + Description: string; + Detailed: string; + Details: string; + Disconnect: string; + Discord: string; + Dismiss: string; + Docs: string; + "Don\u2019t see one of your v2 positions? <0>Import it.": string; + "Earned UNI tokens represent voting shares in Uniswap governance.": string; + Edit: string; + "Efficiency Comparison": string; + "Enter a percent": string; + "Enter a recipient": string; + "Enter a valid slippage percentage": string; + "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; + "Enter an amount": string; + "Enter valid list location": string; + "Enter valid token address": string; + "Enter {0} amount": (string | string[])[]; + Error: string; + "Error connecting": string; + "Error connecting. Try refreshing the page.": string; + "Error details": string; + "Error importing list": string; + "Estimate may differ due to your wallet gas settings": string; + "Estimated network fee": string; + Etherscan: string; + Executed: string; + "Expanded results from inactive Token Lists": string; + "Expected Output": string; + "Expert Mode": string; + "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; + Expired: string; + "Explore Uniswap Analytics.": string; + "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; + "Fee Tier": string; + "Fee tier": string; + "Fetching best price...": string; + "Fetching best price\u2026": string; + For: string; + "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; + From: string; + "From (at most)": string; + "Full Range": string; + "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; + "Get support on Discord": string; + "Help Center": string; + Hide: string; + "Hide closed positions": string; + "High Price Impact": string; + "How this app uses APIs": string; + "I understand": string; + "If you purchase a token from this list, you may not be able to sell it back.": string; + Import: string; + "Import List": string; + "Import Pool": string; + "Import V2 Pool": string; + "Import at your own risk": string; + "In range": string; + "Increase Liquidity": string; + "Initial prices and pool share": string; + "Initializing...": string; + "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Install Metamask": string; + "Insufficient liquidity for this trade.": string; + "Insufficient {0}": (string | string[])[]; + "Insufficient {0} balance": (string | string[])[]; + "Interface Settings": string; + "Invalid pair": string; + "Invalid pair.": string; + "Invalid price input": string; + "Invalid range selected. The min price must be lower than the max price.": string; + "Invalid recipient": string; + Language: string; + Learn: string; + "Learn about providing liquidity": string; + "Learn more": string; + "Legal & Privacy": string; + "Light Theme": string; + Liquidity: string; + "Liquidity data not available.": string; + "Liquidity provider rewards": string; + "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + Lists: string; + Loaded: string; + Loading: string; + MAX: string; + Manage: string; + "Manage Liquidity in Rewards Pool": string; + "Manage Token Lists": string; + "Manage this pool.": string; + Max: string; + "Max Price": string; + "Max price": string; + "Max slippage": string; + "Max:": string; + "Maximum sent": string; + Menu: string; + Migrate: string; + "Migrate Liquidity to V3": string; + "Migrate V2 Liquidity": string; + "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; + "Migrate {0}/{1} liquidity to V3": (string | string[])[]; + Migrating: string; + "Min Price": string; + "Min price": string; + "Min:": string; + "Minimum received": string; + "Missing dependencies": string; + "Mock Toggle": string; + More: string; + "Network Fee": string; + "Network Warning": string; + "Network fees exceed 50% of the swap amount!": string; + "New Position": string; + "No V2 Liquidity found.": string; + "No active pools": string; + "No data": string; + "No description.": string; + "No liquidity found.": string; + "No pool found.": string; + "No proposals found.": string; + "No results found.": string; + "Not created": string; + OFF: string; + ON: string; + "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; + Off: string; + On: string; + "Once you are happy with the rate click supply to review.": string; + "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; + "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; + "Optimism Gateway": string; + "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Optimistic Etherscan": string; + "Out of range": string; + "Output is estimated.": string; + "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; + "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Output will be sent to <0>{0}": (string | string[])[]; + Owner: string; + "Participating pools": string; + Pending: string; + "Please confirm you would like to remove this list by typing REMOVE": string; + "Please connect to Layer 1 Ethereum": string; + "Please connect to a supported network in the dropdown menu or in your wallet.": string; + "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; + "Polygon Bridge": string; + Polygonscan: string; + Pool: string; + "Pool Found!": string; + "Pool Rate": string; + "Pool rate": string; + "Pool tokens in rewards pool:": string; + "Pooled {0}:": (string | string[])[]; + "Pools Overview": string; + Preview: string; + Price: string; + "Price Difference:": string; + "Price Impact": string; + "Price Impact Too High": string; + "Price Updated": string; + "Price impact": string; + "Price range": string; + "Price updated": string; + "Price:": string; + "Prices and pool share": string; + Proposal: string; + "Proposal Submitted": string; + "Proposal Title": string; + Proposals: string; + "Proposals submitted by community members will appear here.": string; + "Proposed Action": string; + Proposer: string; + "Protocol Disclaimer": string; + Queued: string; + Rates: string; + "Read more about UNI": string; + "Read more about Uniswap governance": string; + "Read more about providing liquidity": string; + "Read more about unsupported assets": string; + "Recent Transactions": string; + "Recent transactions": string; + Recipient: string; + "Reload the page": string; + Remove: string; + "Remove <0/> and <1/>": string; + "Remove Amount": string; + "Remove Delegate": string; + "Remove Liquidity": string; + "Remove list": string; + "Removing {0} {1} and {2} {3}": (string | string[])[]; + "Removing {0} {1} and{2} {3}": (string | string[])[]; + "Request Features": string; + Reset: string; + Return: string; + "Review swap": string; + "Search by token name or address": string; + "Search name or paste address": string; + "Select Pair": string; + "Select a network": string; + "Select a token": string; + "Select a token to find your v2 liquidity.": string; + "Select an action": string; + "Selected Range": string; + Self: string; + "Self Delegate": string; + "Set Price Range": string; + "Set Starting Price": string; + Settings: string; + "Share of Pool": string; + "Share of Pool:": string; + "Show Portis": string; + "Show closed positions": string; + Simple: string; + "Slippage tolerance": string; + "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; + "Something went wrong": string; + "Something went wrong.": string; + "Step 1. Get UNI-V2 Liquidity tokens": string; + "Submit new proposal": string; + "Submitting Proposal": string; + "Submitting Vote": string; + Succeeded: string; + Success: string; + Supply: string; + "Supplying {0} {1} and {2} {3}": (string | string[])[]; + Swap: string; + "Swap <0/> for exactly <1/>": string; + "Swap Anyway": string; + "Swap details": string; + "Swap exactly <0/> for <1/>": string; + "Swap failed: {0}": (string | string[])[]; + "Swap summary": string; + "Swapping {0} {1} for {2} {3}": (string | string[])[]; + "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; + "Tell us what you think \u2197": string; + "Thanks for being part of the Uniswap community <0/>": string; + "The % you will earn in fees.": string; + "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; + "The app fetches blockchain data from The Graph\u2019s hosted service.": string; + "The app fetches on-chain data and constructs contract calls with an Infura API.": string; + "The app fetches the optimal trade route from a Uniswap Labs server.": string; + "The app logs anonymized usage statistics in order to improve over time.": string; + "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; + "The cost of sending this transaction is more than half of the value of the input amount.": string; + "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; + "The estimated difference between the USD values of input and output amounts.": string; + "The input token cannot be transferred. There may be an issue with the input token.": string; + "The market price is outside your specified price range. Single-asset deposit only.": string; + "The most recent block number on this network. Prices update on every block.": string; + "The output token cannot be transferred. There may be an issue with the output token.": string; + "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; + "The price of this pool is within your selected range. Your position is currently earning fees.": string; + "The ratio of tokens you add will set the price of this pool.": string; + "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; + "There is no liquidity data.": string; + "This app uses the following third-party APIs:": string; + "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; + "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; + "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; + "This token is not supported in the Uniswap Labs app": string; + "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; + "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; + "Tip: Custom tokens are stored locally in your browser": string; + To: string; + "To (at least)": string; + "Token not supported": string; + Tokens: string; + "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; + "Top pools": string; + "Total deposited": string; + "Total deposits": string; + "Trade Route": string; + Trading: string; + "Transaction Settings": string; + "Transaction Submitted": string; + "Transaction completed in": string; + "Transaction deadline": string; + "Transaction pending": string; + "Transaction rejected.": string; + "Transaction submitted": string; + "Transfer Token": string; + "Try Again": string; + "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Turn On Expert Mode": string; + "UNI has arrived": string; + "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; + "UNI {0}/{1} Burned": (string | string[])[]; + "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; + "UNI-V2 {0}-{1}": (string | string[])[]; + "Unclaimed UNI": string; + "Unclaimed fees": string; + Undetermined: string; + "Unexpected error. Could not estimate gas for the swap.": string; + "Unexpected issue with estimating the gas. Please try again.": string; + "Uniswap Governance": string; + "Uniswap Labs' Terms of Service": string; + "Uniswap available in: <0>{0}": (string | string[])[]; + "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; + "Uniswap liquidity mining": string; + "Uniswap migration contract\u2197": string; + "Unknown Source": string; + "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; + "Unlock Votes": string; + "Unlock Voting": string; + "Unlocking Votes": string; + "Unsupported Asset": string; + "Unsupported Assets": string; + "Unsupported network\u2013switch to another to trade.": string; + Untitled: string; + Unwrap: string; + "Unwrap <0/> to {0}": (string | string[])[]; + "Update Delegation": string; + "Update list": string; + "Use the Uniswap Labs API to get faster quotes.": string; + User: string; + "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; + "V2 liquidity": string; + "V3 {0} Price:": (string | string[])[]; + "View accrued fees and analytics<0>\u2197": string; + "View list": string; + "View on Etherscan": string; + "View on Explorer": string; + "View transaction on Explorer": string; + Vote: string; + "Vote Against": string; + "Vote For": string; + "Vote against proposal {proposalId}": (string | string[])[]; + "Vote against proposal {proposalKey}": (string | string[])[]; + "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote for proposal {proposalId}": (string | string[])[]; + "Vote for proposal {proposalKey}": (string | string[])[]; + "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote to abstain on proposal {proposalId}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Voting ended {0}": (string | string[])[]; + "Voting ends approximately {0}": (string | string[])[]; + "Voting starts approximately {0}": (string | string[])[]; + "Waiting For Confirmation": string; + "Wallet Address or ENS name": string; + "Weekly Rewards": string; + "Welcome to team Unicorn :)": string; + "When you claim without withdrawing your liquidity remains in the mining pool.": string; + "When you withdraw, the contract will automagically claim UNI on your behalf!": string; + "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; + Withdraw: string; + "Withdraw & Claim": string; + "Withdraw deposited liquidity": string; + "Withdrawing {0} UNI-V2": (string | string[])[]; + "Withdrew UNI-V2!": string; + Wrap: string; + "Wrap <0/> to {0}": (string | string[])[]; + "Wrong Network": string; + "You already have an active or pending proposal": string; + "You are creating a pool": string; + "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; + "You are the first liquidity provider.": string; + "You can either vote on each proposal yourself or delegate your votes to a third party.": string; + "You can now trade {0}": (string | string[])[]; + "You don't have enough votes to submit a proposal": string; + "You don\u2019t have liquidity in this pool yet.": string; + "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; + "You may have lost your network connection.": string; + "You might consider waiting until the network fees go down to complete this transaction.": string; + "You must connect an account.": string; + "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; + "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; + "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; + "You will also collect fees earned from this position.": string; + "You will receive": string; + "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; + "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; + "Your V2 liquidity": string; + "Your active V3 liquidity positions will appear here.": string; + "Your liquidity deposits": string; + "Your pool share:": string; + "Your position": string; + "Your position has 0 liquidity, and is not earning fees.": string; + "Your position will appear here.": string; + "Your position will be 100% composed of {0} at this price": (string | string[])[]; + "Your position will be 100% {0} at this price.": (string | string[])[]; + "Your position will not earn fees or be used in trades until the market price moves into your range.": string; + "Your positions": string; + "Your rate": string; + "Your total pool tokens:": string; + "Your transaction cost will be much higher as it includes the gas to create the pool.": string; + "Your transaction may be frontrun": string; + "Your transaction may fail": string; + "Your transaction will revert if it has been pending for longer than this period of time.": string; + "Your transaction will revert if it is pending for more than this period of time.": string; + "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; + "Your transactions will appear here...": string; + "Your unclaimed UNI": string; + "after slippage": string; + confirm: string; + "for {0}": (string | string[])[]; + gwei: string; + "has socks emoji": string; + "here.": string; + "https:// or ipfs:// or ENS name": string; + minutes: string; + "via {0}": (string | string[])[]; + "via {0} token list": (string | string[])[]; + "{0, plural, one {Import token} other {Import tokens}}": (string | { + one: string; + other: string; + })[][]; + "{0}": string[][]; + "{0} %": (string | string[])[]; + "{0} <0/> per <1/>": (string | string[])[]; + "{0} Custom Tokens": (string | string[])[]; + "{0} Deposited": (string | string[])[]; + "{0} ETH": (string | string[])[]; + "{0} Fees Earned:": (string | string[])[]; + "{0} Pending": (string | string[])[]; + "{0} UNI": (string | string[])[]; + "{0} UNI / week": (string | string[])[]; + "{0} UNI-V2": (string | string[])[]; + "{0} UNI-V2 LP tokens available": (string | string[])[]; + "{0} Votes": (string | string[])[]; + "{0} per {1}": (string | string[])[]; + "{0} tokens": (string | string[])[]; + "{0} {1} Price:": (string | string[])[]; + "{0} {nativeCurrencySymbol}": (string | string[])[]; + "{0} \u2022 Added by user": (string | string[])[]; + "{0}%": (string | string[])[]; + "{0}% fee tier": (string | string[])[]; + "{0}% pool": (string | string[])[]; + "{0}% select": (string | string[])[]; + "{0}-{1} Liquidity Mining": (string | string[])[]; + "{0}/{1} LP NFT": (string | string[])[]; + "{0}/{1} LP Tokens": (string | string[])[]; + "{SOCKS_AMOUNT} UNI": (string | string[])[]; + "{USER_AMOUNT} UNI": (string | string[])[]; + "{activeTokensOnThisChain} tokens": (string | string[])[]; + "{integrator} fee": (string | string[])[]; + "{label} token bridge": (string | string[])[]; + "{min}m {sec}s": (string | string[])[]; + "{percentForSlider}%": (string | string[])[]; + "{sec}s": (string | string[])[]; + "{tokenB} per {tokenA}": (string | string[])[]; + "\u2190 Back to Pools Overview": string; +}; diff --git a/dist2/types/locales/el-GR.d.ts b/dist2/types/locales/el-GR.d.ts new file mode 100644 index 00000000000..75120e0e5c9 --- /dev/null +++ b/dist2/types/locales/el-GR.d.ts @@ -0,0 +1,593 @@ +export const messages: { + "$-": string; + "$<0/>": string; + "${0}": (string | string[])[]; + "(${0})": (string | string[])[]; + "(View on Explorer)": string; + "(clear all)": string; + "(edit)": string; + "- Remove recipient": string; + "0 UNI / week": string; + "25%": string; + "50%": string; + "75%": string; + "<0/> All Proposals": string; + "<0/> Votes": string; + "<0>Account analytics and accrued fees<1> \u2197 ": string; + "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; + "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; + "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; + "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; + "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; + "<0>Unlock voting to prepare for the next proposal.": string; + "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; + "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; + About: string; + Accept: string; + Account: string; + Active: string; + Add: string; + "Add <0/> and <1/> to Uniswap V2": string; + "Add Delegate +": string; + "Add Liquidity": string; + "Add V2 Liquidity": string; + "Add liquidity.": string; + "Add more liquidity": string; + "Add {0} to Metamask <0/>": (string | string[])[]; + "Add {0}-{1} liquidity": (string | string[])[]; + "Add {0}/{1} V3 liquidity": (string | string[])[]; + "Added {0}": (string | string[])[]; + "Address has no available claim": string; + Against: string; + "Allow LP token migration": string; + "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; + "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; + Allowed: string; + Amount: string; + "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Approval pending <0/>": string; + Approve: string; + "Approve Token": string; + "Approve {0}": (string | string[])[]; + "Approve {0} first": (string | string[])[]; + Approved: string; + Approving: string; + "Approving {0}": (string | string[])[]; + Arbiscan: string; + "Arbitrum Bridge": string; + "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Are you sure?": string; + "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; + "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; + Auto: string; + "Auto Router API": string; + "Available to deposit: {0}": (string | string[])[]; + "Balance: {0}": (string | string[])[]; + "Best for exotic pairs.": string; + "Best for most pairs.": string; + "Best for stable pairs.": string; + "Best for very stable pairs.": string; + "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; + "Blocked address": string; + Bridge: string; + "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; + "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; + Canceled: string; + Change: string; + Charts: string; + "Check network status": string; + "Check out our v3 LP walkthrough and migration guides.": string; + Claim: string; + "Claim <0/> for {0}": (string | string[])[]; + "Claim UNI": string; + "Claim UNI Token": string; + "Claim UNI reward for {0}": (string | string[])[]; + "Claim fees": string; + "Claim your UNI tokens": string; + Claimed: string; + "Claimed UNI!": string; + "Claimed!": string; + Claiming: string; + "Claiming UNI": string; + "Claiming {0} UNI": (string | string[])[]; + "Clear All": string; + "Clear all": string; + Close: string; + Closed: string; + Collect: string; + "Collect as WETH": string; + "Collect fees": string; + "Collect {0}/{1} fees": (string | string[])[]; + Collected: string; + Collecting: string; + "Collecting fees": string; + "Collecting fees will withdraw currently available fees for you.": string; + Confirm: string; + "Confirm Supply": string; + "Confirm Swap": string; + "Confirm swap": string; + "Confirm this transaction in your wallet": string; + "Confirm transaction in wallet": string; + "Connect Wallet": string; + "Connect a wallet": string; + "Connect to a wallet to find pools": string; + "Connect to a wallet to view your V2 liquidity.": string; + "Connect to a wallet to view your liquidity.": string; + "Connect wallet to swap": string; + "Connected with {name}": (string | string[])[]; + Copied: string; + "Copy Address": string; + "Create Pool & Supply": string; + "Create Proposal": string; + "Create a pair": string; + "Create a pool": string; + "Create an issue on GitHub": string; + "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; + "Create pool.": string; + "Create {0}/{1} V3 pool": (string | string[])[]; + "Current price": string; + "Current {0} Price:": (string | string[])[]; + Custom: string; + "Dark Theme": string; + Defeated: string; + "Delegate Votes": string; + "Delegate voting power to {0}": (string | string[])[]; + "Delegated to:": string; + "Delegating votes": string; + Deposit: string; + "Deposit Amounts": string; + "Deposit UNI-V2 LP Tokens": string; + "Deposit liquidity": string; + "Deposit tokens to the {label} network.": (string | string[])[]; + "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; + "Deposited liquidity:": string; + "Deposited {0} UNI-V2": (string | string[])[]; + "Depositing Liquidity": string; + Description: string; + Detailed: string; + Details: string; + Disconnect: string; + Discord: string; + Dismiss: string; + Docs: string; + "Don\u2019t see one of your v2 positions? <0>Import it.": string; + "Earned UNI tokens represent voting shares in Uniswap governance.": string; + Edit: string; + "Efficiency Comparison": string; + "Enter a percent": string; + "Enter a recipient": string; + "Enter a valid slippage percentage": string; + "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; + "Enter an amount": string; + "Enter valid list location": string; + "Enter valid token address": string; + "Enter {0} amount": (string | string[])[]; + Error: string; + "Error connecting": string; + "Error connecting. Try refreshing the page.": string; + "Error details": string; + "Error importing list": string; + "Estimate may differ due to your wallet gas settings": string; + "Estimated network fee": string; + Etherscan: string; + Executed: string; + "Expanded results from inactive Token Lists": string; + "Expected Output": string; + "Expert Mode": string; + "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; + Expired: string; + "Explore Uniswap Analytics.": string; + "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; + "Fee Tier": string; + "Fee tier": string; + "Fetching best price...": string; + "Fetching best price\u2026": string; + For: string; + "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; + From: string; + "From (at most)": string; + "Full Range": string; + "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; + "Get support on Discord": string; + "Help Center": string; + Hide: string; + "Hide closed positions": string; + "High Price Impact": string; + "How this app uses APIs": string; + "I understand": string; + "If you purchase a token from this list, you may not be able to sell it back.": string; + Import: string; + "Import List": string; + "Import Pool": string; + "Import V2 Pool": string; + "Import at your own risk": string; + "In range": string; + "Increase Liquidity": string; + "Initial prices and pool share": string; + "Initializing...": string; + "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Install Metamask": string; + "Insufficient liquidity for this trade.": string; + "Insufficient {0}": (string | string[])[]; + "Insufficient {0} balance": (string | string[])[]; + "Interface Settings": string; + "Invalid pair": string; + "Invalid pair.": string; + "Invalid price input": string; + "Invalid range selected. The min price must be lower than the max price.": string; + "Invalid recipient": string; + Language: string; + Learn: string; + "Learn about providing liquidity": string; + "Learn more": string; + "Legal & Privacy": string; + "Light Theme": string; + Liquidity: string; + "Liquidity data not available.": string; + "Liquidity provider rewards": string; + "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + Lists: string; + Loaded: string; + Loading: string; + MAX: string; + Manage: string; + "Manage Liquidity in Rewards Pool": string; + "Manage Token Lists": string; + "Manage this pool.": string; + Max: string; + "Max Price": string; + "Max price": string; + "Max slippage": string; + "Max:": string; + "Maximum sent": string; + Menu: string; + Migrate: string; + "Migrate Liquidity to V3": string; + "Migrate V2 Liquidity": string; + "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; + "Migrate {0}/{1} liquidity to V3": (string | string[])[]; + Migrating: string; + "Min Price": string; + "Min price": string; + "Min:": string; + "Minimum received": string; + "Missing dependencies": string; + "Mock Toggle": string; + More: string; + "Network Fee": string; + "Network Warning": string; + "Network fees exceed 50% of the swap amount!": string; + "New Position": string; + "No V2 Liquidity found.": string; + "No active pools": string; + "No data": string; + "No description.": string; + "No liquidity found.": string; + "No pool found.": string; + "No proposals found.": string; + "No results found.": string; + "Not created": string; + OFF: string; + ON: string; + "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; + Off: string; + On: string; + "Once you are happy with the rate click supply to review.": string; + "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; + "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; + "Optimism Gateway": string; + "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Optimistic Etherscan": string; + "Out of range": string; + "Output is estimated.": string; + "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; + "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Output will be sent to <0>{0}": (string | string[])[]; + Owner: string; + "Participating pools": string; + Pending: string; + "Please confirm you would like to remove this list by typing REMOVE": string; + "Please connect to Layer 1 Ethereum": string; + "Please connect to a supported network in the dropdown menu or in your wallet.": string; + "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; + "Polygon Bridge": string; + Polygonscan: string; + Pool: string; + "Pool Found!": string; + "Pool Rate": string; + "Pool rate": string; + "Pool tokens in rewards pool:": string; + "Pooled {0}:": (string | string[])[]; + "Pools Overview": string; + Preview: string; + Price: string; + "Price Difference:": string; + "Price Impact": string; + "Price Impact Too High": string; + "Price Updated": string; + "Price impact": string; + "Price range": string; + "Price updated": string; + "Price:": string; + "Prices and pool share": string; + Proposal: string; + "Proposal Submitted": string; + "Proposal Title": string; + Proposals: string; + "Proposals submitted by community members will appear here.": string; + "Proposed Action": string; + Proposer: string; + "Protocol Disclaimer": string; + Queued: string; + Rates: string; + "Read more about UNI": string; + "Read more about Uniswap governance": string; + "Read more about providing liquidity": string; + "Read more about unsupported assets": string; + "Recent Transactions": string; + "Recent transactions": string; + Recipient: string; + "Reload the page": string; + Remove: string; + "Remove <0/> and <1/>": string; + "Remove Amount": string; + "Remove Delegate": string; + "Remove Liquidity": string; + "Remove list": string; + "Removing {0} {1} and {2} {3}": (string | string[])[]; + "Removing {0} {1} and{2} {3}": (string | string[])[]; + "Request Features": string; + Reset: string; + Return: string; + "Review swap": string; + "Search by token name or address": string; + "Search name or paste address": string; + "Select Pair": string; + "Select a network": string; + "Select a token": string; + "Select a token to find your v2 liquidity.": string; + "Select an action": string; + "Selected Range": string; + Self: string; + "Self Delegate": string; + "Set Price Range": string; + "Set Starting Price": string; + Settings: string; + "Share of Pool": string; + "Share of Pool:": string; + "Show Portis": string; + "Show closed positions": string; + Simple: string; + "Slippage tolerance": string; + "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; + "Something went wrong": string; + "Something went wrong.": string; + "Step 1. Get UNI-V2 Liquidity tokens": string; + "Submit new proposal": string; + "Submitting Proposal": string; + "Submitting Vote": string; + Succeeded: string; + Success: string; + Supply: string; + "Supplying {0} {1} and {2} {3}": (string | string[])[]; + Swap: string; + "Swap <0/> for exactly <1/>": string; + "Swap Anyway": string; + "Swap details": string; + "Swap exactly <0/> for <1/>": string; + "Swap failed: {0}": (string | string[])[]; + "Swap summary": string; + "Swapping {0} {1} for {2} {3}": (string | string[])[]; + "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; + "Tell us what you think \u2197": string; + "Thanks for being part of the Uniswap community <0/>": string; + "The % you will earn in fees.": string; + "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; + "The app fetches blockchain data from The Graph\u2019s hosted service.": string; + "The app fetches on-chain data and constructs contract calls with an Infura API.": string; + "The app fetches the optimal trade route from a Uniswap Labs server.": string; + "The app logs anonymized usage statistics in order to improve over time.": string; + "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; + "The cost of sending this transaction is more than half of the value of the input amount.": string; + "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; + "The estimated difference between the USD values of input and output amounts.": string; + "The input token cannot be transferred. There may be an issue with the input token.": string; + "The market price is outside your specified price range. Single-asset deposit only.": string; + "The most recent block number on this network. Prices update on every block.": string; + "The output token cannot be transferred. There may be an issue with the output token.": string; + "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; + "The price of this pool is within your selected range. Your position is currently earning fees.": string; + "The ratio of tokens you add will set the price of this pool.": string; + "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; + "There is no liquidity data.": string; + "This app uses the following third-party APIs:": string; + "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; + "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; + "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; + "This token is not supported in the Uniswap Labs app": string; + "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; + "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; + "Tip: Custom tokens are stored locally in your browser": string; + To: string; + "To (at least)": string; + "Token not supported": string; + Tokens: string; + "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; + "Top pools": string; + "Total deposited": string; + "Total deposits": string; + "Trade Route": string; + Trading: string; + "Transaction Settings": string; + "Transaction Submitted": string; + "Transaction completed in": string; + "Transaction deadline": string; + "Transaction pending": string; + "Transaction rejected.": string; + "Transaction submitted": string; + "Transfer Token": string; + "Try Again": string; + "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Turn On Expert Mode": string; + "UNI has arrived": string; + "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; + "UNI {0}/{1} Burned": (string | string[])[]; + "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; + "UNI-V2 {0}-{1}": (string | string[])[]; + "Unclaimed UNI": string; + "Unclaimed fees": string; + Undetermined: string; + "Unexpected error. Could not estimate gas for the swap.": string; + "Unexpected issue with estimating the gas. Please try again.": string; + "Uniswap Governance": string; + "Uniswap Labs' Terms of Service": string; + "Uniswap available in: <0>{0}": (string | string[])[]; + "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; + "Uniswap liquidity mining": string; + "Uniswap migration contract\u2197": string; + "Unknown Source": string; + "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; + "Unlock Votes": string; + "Unlock Voting": string; + "Unlocking Votes": string; + "Unsupported Asset": string; + "Unsupported Assets": string; + "Unsupported network\u2013switch to another to trade.": string; + Untitled: string; + Unwrap: string; + "Unwrap <0/> to {0}": (string | string[])[]; + "Update Delegation": string; + "Update list": string; + "Use the Uniswap Labs API to get faster quotes.": string; + User: string; + "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; + "V2 liquidity": string; + "V3 {0} Price:": (string | string[])[]; + "View accrued fees and analytics<0>\u2197": string; + "View list": string; + "View on Etherscan": string; + "View on Explorer": string; + "View transaction on Explorer": string; + Vote: string; + "Vote Against": string; + "Vote For": string; + "Vote against proposal {proposalId}": (string | string[])[]; + "Vote against proposal {proposalKey}": (string | string[])[]; + "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote for proposal {proposalId}": (string | string[])[]; + "Vote for proposal {proposalKey}": (string | string[])[]; + "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote to abstain on proposal {proposalId}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Voting ended {0}": (string | string[])[]; + "Voting ends approximately {0}": (string | string[])[]; + "Voting starts approximately {0}": (string | string[])[]; + "Waiting For Confirmation": string; + "Wallet Address or ENS name": string; + "Weekly Rewards": string; + "Welcome to team Unicorn :)": string; + "When you claim without withdrawing your liquidity remains in the mining pool.": string; + "When you withdraw, the contract will automagically claim UNI on your behalf!": string; + "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; + Withdraw: string; + "Withdraw & Claim": string; + "Withdraw deposited liquidity": string; + "Withdrawing {0} UNI-V2": (string | string[])[]; + "Withdrew UNI-V2!": string; + Wrap: string; + "Wrap <0/> to {0}": (string | string[])[]; + "Wrong Network": string; + "You already have an active or pending proposal": string; + "You are creating a pool": string; + "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; + "You are the first liquidity provider.": string; + "You can either vote on each proposal yourself or delegate your votes to a third party.": string; + "You can now trade {0}": (string | string[])[]; + "You don't have enough votes to submit a proposal": string; + "You don\u2019t have liquidity in this pool yet.": string; + "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; + "You may have lost your network connection.": string; + "You might consider waiting until the network fees go down to complete this transaction.": string; + "You must connect an account.": string; + "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; + "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; + "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; + "You will also collect fees earned from this position.": string; + "You will receive": string; + "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; + "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; + "Your V2 liquidity": string; + "Your active V3 liquidity positions will appear here.": string; + "Your liquidity deposits": string; + "Your pool share:": string; + "Your position": string; + "Your position has 0 liquidity, and is not earning fees.": string; + "Your position will appear here.": string; + "Your position will be 100% composed of {0} at this price": (string | string[])[]; + "Your position will be 100% {0} at this price.": (string | string[])[]; + "Your position will not earn fees or be used in trades until the market price moves into your range.": string; + "Your positions": string; + "Your rate": string; + "Your total pool tokens:": string; + "Your transaction cost will be much higher as it includes the gas to create the pool.": string; + "Your transaction may be frontrun": string; + "Your transaction may fail": string; + "Your transaction will revert if it has been pending for longer than this period of time.": string; + "Your transaction will revert if it is pending for more than this period of time.": string; + "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; + "Your transactions will appear here...": string; + "Your unclaimed UNI": string; + "after slippage": string; + confirm: string; + "for {0}": (string | string[])[]; + gwei: string; + "has socks emoji": string; + "here.": string; + "https:// or ipfs:// or ENS name": string; + minutes: string; + "via {0}": (string | string[])[]; + "via {0} token list": (string | string[])[]; + "{0, plural, one {Import token} other {Import tokens}}": (string | { + one: string; + other: string; + })[][]; + "{0}": string[][]; + "{0} %": (string | string[])[]; + "{0} <0/> per <1/>": (string | string[])[]; + "{0} Custom Tokens": (string | string[])[]; + "{0} Deposited": (string | string[])[]; + "{0} ETH": (string | string[])[]; + "{0} Fees Earned:": (string | string[])[]; + "{0} Pending": (string | string[])[]; + "{0} UNI": (string | string[])[]; + "{0} UNI / week": (string | string[])[]; + "{0} UNI-V2": (string | string[])[]; + "{0} UNI-V2 LP tokens available": (string | string[])[]; + "{0} Votes": (string | string[])[]; + "{0} per {1}": (string | string[])[]; + "{0} tokens": (string | string[])[]; + "{0} {1} Price:": (string | string[])[]; + "{0} {nativeCurrencySymbol}": (string | string[])[]; + "{0} \u2022 Added by user": (string | string[])[]; + "{0}%": (string | string[])[]; + "{0}% fee tier": (string | string[])[]; + "{0}% pool": (string | string[])[]; + "{0}% select": (string | string[])[]; + "{0}-{1} Liquidity Mining": (string | string[])[]; + "{0}/{1} LP NFT": (string | string[])[]; + "{0}/{1} LP Tokens": (string | string[])[]; + "{SOCKS_AMOUNT} UNI": (string | string[])[]; + "{USER_AMOUNT} UNI": (string | string[])[]; + "{activeTokensOnThisChain} tokens": (string | string[])[]; + "{integrator} fee": (string | string[])[]; + "{label} token bridge": (string | string[])[]; + "{min}m {sec}s": (string | string[])[]; + "{percentForSlider}%": (string | string[])[]; + "{sec}s": (string | string[])[]; + "{tokenB} per {tokenA}": (string | string[])[]; + "\u2190 Back to Pools Overview": string; +}; diff --git a/dist2/types/locales/en-US.d.ts b/dist2/types/locales/en-US.d.ts new file mode 100644 index 00000000000..75120e0e5c9 --- /dev/null +++ b/dist2/types/locales/en-US.d.ts @@ -0,0 +1,593 @@ +export const messages: { + "$-": string; + "$<0/>": string; + "${0}": (string | string[])[]; + "(${0})": (string | string[])[]; + "(View on Explorer)": string; + "(clear all)": string; + "(edit)": string; + "- Remove recipient": string; + "0 UNI / week": string; + "25%": string; + "50%": string; + "75%": string; + "<0/> All Proposals": string; + "<0/> Votes": string; + "<0>Account analytics and accrued fees<1> \u2197 ": string; + "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; + "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; + "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; + "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; + "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; + "<0>Unlock voting to prepare for the next proposal.": string; + "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; + "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; + About: string; + Accept: string; + Account: string; + Active: string; + Add: string; + "Add <0/> and <1/> to Uniswap V2": string; + "Add Delegate +": string; + "Add Liquidity": string; + "Add V2 Liquidity": string; + "Add liquidity.": string; + "Add more liquidity": string; + "Add {0} to Metamask <0/>": (string | string[])[]; + "Add {0}-{1} liquidity": (string | string[])[]; + "Add {0}/{1} V3 liquidity": (string | string[])[]; + "Added {0}": (string | string[])[]; + "Address has no available claim": string; + Against: string; + "Allow LP token migration": string; + "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; + "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; + Allowed: string; + Amount: string; + "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Approval pending <0/>": string; + Approve: string; + "Approve Token": string; + "Approve {0}": (string | string[])[]; + "Approve {0} first": (string | string[])[]; + Approved: string; + Approving: string; + "Approving {0}": (string | string[])[]; + Arbiscan: string; + "Arbitrum Bridge": string; + "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Are you sure?": string; + "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; + "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; + Auto: string; + "Auto Router API": string; + "Available to deposit: {0}": (string | string[])[]; + "Balance: {0}": (string | string[])[]; + "Best for exotic pairs.": string; + "Best for most pairs.": string; + "Best for stable pairs.": string; + "Best for very stable pairs.": string; + "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; + "Blocked address": string; + Bridge: string; + "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; + "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; + Canceled: string; + Change: string; + Charts: string; + "Check network status": string; + "Check out our v3 LP walkthrough and migration guides.": string; + Claim: string; + "Claim <0/> for {0}": (string | string[])[]; + "Claim UNI": string; + "Claim UNI Token": string; + "Claim UNI reward for {0}": (string | string[])[]; + "Claim fees": string; + "Claim your UNI tokens": string; + Claimed: string; + "Claimed UNI!": string; + "Claimed!": string; + Claiming: string; + "Claiming UNI": string; + "Claiming {0} UNI": (string | string[])[]; + "Clear All": string; + "Clear all": string; + Close: string; + Closed: string; + Collect: string; + "Collect as WETH": string; + "Collect fees": string; + "Collect {0}/{1} fees": (string | string[])[]; + Collected: string; + Collecting: string; + "Collecting fees": string; + "Collecting fees will withdraw currently available fees for you.": string; + Confirm: string; + "Confirm Supply": string; + "Confirm Swap": string; + "Confirm swap": string; + "Confirm this transaction in your wallet": string; + "Confirm transaction in wallet": string; + "Connect Wallet": string; + "Connect a wallet": string; + "Connect to a wallet to find pools": string; + "Connect to a wallet to view your V2 liquidity.": string; + "Connect to a wallet to view your liquidity.": string; + "Connect wallet to swap": string; + "Connected with {name}": (string | string[])[]; + Copied: string; + "Copy Address": string; + "Create Pool & Supply": string; + "Create Proposal": string; + "Create a pair": string; + "Create a pool": string; + "Create an issue on GitHub": string; + "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; + "Create pool.": string; + "Create {0}/{1} V3 pool": (string | string[])[]; + "Current price": string; + "Current {0} Price:": (string | string[])[]; + Custom: string; + "Dark Theme": string; + Defeated: string; + "Delegate Votes": string; + "Delegate voting power to {0}": (string | string[])[]; + "Delegated to:": string; + "Delegating votes": string; + Deposit: string; + "Deposit Amounts": string; + "Deposit UNI-V2 LP Tokens": string; + "Deposit liquidity": string; + "Deposit tokens to the {label} network.": (string | string[])[]; + "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; + "Deposited liquidity:": string; + "Deposited {0} UNI-V2": (string | string[])[]; + "Depositing Liquidity": string; + Description: string; + Detailed: string; + Details: string; + Disconnect: string; + Discord: string; + Dismiss: string; + Docs: string; + "Don\u2019t see one of your v2 positions? <0>Import it.": string; + "Earned UNI tokens represent voting shares in Uniswap governance.": string; + Edit: string; + "Efficiency Comparison": string; + "Enter a percent": string; + "Enter a recipient": string; + "Enter a valid slippage percentage": string; + "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; + "Enter an amount": string; + "Enter valid list location": string; + "Enter valid token address": string; + "Enter {0} amount": (string | string[])[]; + Error: string; + "Error connecting": string; + "Error connecting. Try refreshing the page.": string; + "Error details": string; + "Error importing list": string; + "Estimate may differ due to your wallet gas settings": string; + "Estimated network fee": string; + Etherscan: string; + Executed: string; + "Expanded results from inactive Token Lists": string; + "Expected Output": string; + "Expert Mode": string; + "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; + Expired: string; + "Explore Uniswap Analytics.": string; + "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; + "Fee Tier": string; + "Fee tier": string; + "Fetching best price...": string; + "Fetching best price\u2026": string; + For: string; + "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; + From: string; + "From (at most)": string; + "Full Range": string; + "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; + "Get support on Discord": string; + "Help Center": string; + Hide: string; + "Hide closed positions": string; + "High Price Impact": string; + "How this app uses APIs": string; + "I understand": string; + "If you purchase a token from this list, you may not be able to sell it back.": string; + Import: string; + "Import List": string; + "Import Pool": string; + "Import V2 Pool": string; + "Import at your own risk": string; + "In range": string; + "Increase Liquidity": string; + "Initial prices and pool share": string; + "Initializing...": string; + "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Install Metamask": string; + "Insufficient liquidity for this trade.": string; + "Insufficient {0}": (string | string[])[]; + "Insufficient {0} balance": (string | string[])[]; + "Interface Settings": string; + "Invalid pair": string; + "Invalid pair.": string; + "Invalid price input": string; + "Invalid range selected. The min price must be lower than the max price.": string; + "Invalid recipient": string; + Language: string; + Learn: string; + "Learn about providing liquidity": string; + "Learn more": string; + "Legal & Privacy": string; + "Light Theme": string; + Liquidity: string; + "Liquidity data not available.": string; + "Liquidity provider rewards": string; + "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + Lists: string; + Loaded: string; + Loading: string; + MAX: string; + Manage: string; + "Manage Liquidity in Rewards Pool": string; + "Manage Token Lists": string; + "Manage this pool.": string; + Max: string; + "Max Price": string; + "Max price": string; + "Max slippage": string; + "Max:": string; + "Maximum sent": string; + Menu: string; + Migrate: string; + "Migrate Liquidity to V3": string; + "Migrate V2 Liquidity": string; + "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; + "Migrate {0}/{1} liquidity to V3": (string | string[])[]; + Migrating: string; + "Min Price": string; + "Min price": string; + "Min:": string; + "Minimum received": string; + "Missing dependencies": string; + "Mock Toggle": string; + More: string; + "Network Fee": string; + "Network Warning": string; + "Network fees exceed 50% of the swap amount!": string; + "New Position": string; + "No V2 Liquidity found.": string; + "No active pools": string; + "No data": string; + "No description.": string; + "No liquidity found.": string; + "No pool found.": string; + "No proposals found.": string; + "No results found.": string; + "Not created": string; + OFF: string; + ON: string; + "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; + Off: string; + On: string; + "Once you are happy with the rate click supply to review.": string; + "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; + "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; + "Optimism Gateway": string; + "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Optimistic Etherscan": string; + "Out of range": string; + "Output is estimated.": string; + "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; + "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Output will be sent to <0>{0}": (string | string[])[]; + Owner: string; + "Participating pools": string; + Pending: string; + "Please confirm you would like to remove this list by typing REMOVE": string; + "Please connect to Layer 1 Ethereum": string; + "Please connect to a supported network in the dropdown menu or in your wallet.": string; + "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; + "Polygon Bridge": string; + Polygonscan: string; + Pool: string; + "Pool Found!": string; + "Pool Rate": string; + "Pool rate": string; + "Pool tokens in rewards pool:": string; + "Pooled {0}:": (string | string[])[]; + "Pools Overview": string; + Preview: string; + Price: string; + "Price Difference:": string; + "Price Impact": string; + "Price Impact Too High": string; + "Price Updated": string; + "Price impact": string; + "Price range": string; + "Price updated": string; + "Price:": string; + "Prices and pool share": string; + Proposal: string; + "Proposal Submitted": string; + "Proposal Title": string; + Proposals: string; + "Proposals submitted by community members will appear here.": string; + "Proposed Action": string; + Proposer: string; + "Protocol Disclaimer": string; + Queued: string; + Rates: string; + "Read more about UNI": string; + "Read more about Uniswap governance": string; + "Read more about providing liquidity": string; + "Read more about unsupported assets": string; + "Recent Transactions": string; + "Recent transactions": string; + Recipient: string; + "Reload the page": string; + Remove: string; + "Remove <0/> and <1/>": string; + "Remove Amount": string; + "Remove Delegate": string; + "Remove Liquidity": string; + "Remove list": string; + "Removing {0} {1} and {2} {3}": (string | string[])[]; + "Removing {0} {1} and{2} {3}": (string | string[])[]; + "Request Features": string; + Reset: string; + Return: string; + "Review swap": string; + "Search by token name or address": string; + "Search name or paste address": string; + "Select Pair": string; + "Select a network": string; + "Select a token": string; + "Select a token to find your v2 liquidity.": string; + "Select an action": string; + "Selected Range": string; + Self: string; + "Self Delegate": string; + "Set Price Range": string; + "Set Starting Price": string; + Settings: string; + "Share of Pool": string; + "Share of Pool:": string; + "Show Portis": string; + "Show closed positions": string; + Simple: string; + "Slippage tolerance": string; + "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; + "Something went wrong": string; + "Something went wrong.": string; + "Step 1. Get UNI-V2 Liquidity tokens": string; + "Submit new proposal": string; + "Submitting Proposal": string; + "Submitting Vote": string; + Succeeded: string; + Success: string; + Supply: string; + "Supplying {0} {1} and {2} {3}": (string | string[])[]; + Swap: string; + "Swap <0/> for exactly <1/>": string; + "Swap Anyway": string; + "Swap details": string; + "Swap exactly <0/> for <1/>": string; + "Swap failed: {0}": (string | string[])[]; + "Swap summary": string; + "Swapping {0} {1} for {2} {3}": (string | string[])[]; + "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; + "Tell us what you think \u2197": string; + "Thanks for being part of the Uniswap community <0/>": string; + "The % you will earn in fees.": string; + "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; + "The app fetches blockchain data from The Graph\u2019s hosted service.": string; + "The app fetches on-chain data and constructs contract calls with an Infura API.": string; + "The app fetches the optimal trade route from a Uniswap Labs server.": string; + "The app logs anonymized usage statistics in order to improve over time.": string; + "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; + "The cost of sending this transaction is more than half of the value of the input amount.": string; + "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; + "The estimated difference between the USD values of input and output amounts.": string; + "The input token cannot be transferred. There may be an issue with the input token.": string; + "The market price is outside your specified price range. Single-asset deposit only.": string; + "The most recent block number on this network. Prices update on every block.": string; + "The output token cannot be transferred. There may be an issue with the output token.": string; + "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; + "The price of this pool is within your selected range. Your position is currently earning fees.": string; + "The ratio of tokens you add will set the price of this pool.": string; + "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; + "There is no liquidity data.": string; + "This app uses the following third-party APIs:": string; + "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; + "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; + "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; + "This token is not supported in the Uniswap Labs app": string; + "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; + "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; + "Tip: Custom tokens are stored locally in your browser": string; + To: string; + "To (at least)": string; + "Token not supported": string; + Tokens: string; + "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; + "Top pools": string; + "Total deposited": string; + "Total deposits": string; + "Trade Route": string; + Trading: string; + "Transaction Settings": string; + "Transaction Submitted": string; + "Transaction completed in": string; + "Transaction deadline": string; + "Transaction pending": string; + "Transaction rejected.": string; + "Transaction submitted": string; + "Transfer Token": string; + "Try Again": string; + "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Turn On Expert Mode": string; + "UNI has arrived": string; + "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; + "UNI {0}/{1} Burned": (string | string[])[]; + "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; + "UNI-V2 {0}-{1}": (string | string[])[]; + "Unclaimed UNI": string; + "Unclaimed fees": string; + Undetermined: string; + "Unexpected error. Could not estimate gas for the swap.": string; + "Unexpected issue with estimating the gas. Please try again.": string; + "Uniswap Governance": string; + "Uniswap Labs' Terms of Service": string; + "Uniswap available in: <0>{0}": (string | string[])[]; + "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; + "Uniswap liquidity mining": string; + "Uniswap migration contract\u2197": string; + "Unknown Source": string; + "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; + "Unlock Votes": string; + "Unlock Voting": string; + "Unlocking Votes": string; + "Unsupported Asset": string; + "Unsupported Assets": string; + "Unsupported network\u2013switch to another to trade.": string; + Untitled: string; + Unwrap: string; + "Unwrap <0/> to {0}": (string | string[])[]; + "Update Delegation": string; + "Update list": string; + "Use the Uniswap Labs API to get faster quotes.": string; + User: string; + "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; + "V2 liquidity": string; + "V3 {0} Price:": (string | string[])[]; + "View accrued fees and analytics<0>\u2197": string; + "View list": string; + "View on Etherscan": string; + "View on Explorer": string; + "View transaction on Explorer": string; + Vote: string; + "Vote Against": string; + "Vote For": string; + "Vote against proposal {proposalId}": (string | string[])[]; + "Vote against proposal {proposalKey}": (string | string[])[]; + "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote for proposal {proposalId}": (string | string[])[]; + "Vote for proposal {proposalKey}": (string | string[])[]; + "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote to abstain on proposal {proposalId}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Voting ended {0}": (string | string[])[]; + "Voting ends approximately {0}": (string | string[])[]; + "Voting starts approximately {0}": (string | string[])[]; + "Waiting For Confirmation": string; + "Wallet Address or ENS name": string; + "Weekly Rewards": string; + "Welcome to team Unicorn :)": string; + "When you claim without withdrawing your liquidity remains in the mining pool.": string; + "When you withdraw, the contract will automagically claim UNI on your behalf!": string; + "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; + Withdraw: string; + "Withdraw & Claim": string; + "Withdraw deposited liquidity": string; + "Withdrawing {0} UNI-V2": (string | string[])[]; + "Withdrew UNI-V2!": string; + Wrap: string; + "Wrap <0/> to {0}": (string | string[])[]; + "Wrong Network": string; + "You already have an active or pending proposal": string; + "You are creating a pool": string; + "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; + "You are the first liquidity provider.": string; + "You can either vote on each proposal yourself or delegate your votes to a third party.": string; + "You can now trade {0}": (string | string[])[]; + "You don't have enough votes to submit a proposal": string; + "You don\u2019t have liquidity in this pool yet.": string; + "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; + "You may have lost your network connection.": string; + "You might consider waiting until the network fees go down to complete this transaction.": string; + "You must connect an account.": string; + "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; + "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; + "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; + "You will also collect fees earned from this position.": string; + "You will receive": string; + "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; + "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; + "Your V2 liquidity": string; + "Your active V3 liquidity positions will appear here.": string; + "Your liquidity deposits": string; + "Your pool share:": string; + "Your position": string; + "Your position has 0 liquidity, and is not earning fees.": string; + "Your position will appear here.": string; + "Your position will be 100% composed of {0} at this price": (string | string[])[]; + "Your position will be 100% {0} at this price.": (string | string[])[]; + "Your position will not earn fees or be used in trades until the market price moves into your range.": string; + "Your positions": string; + "Your rate": string; + "Your total pool tokens:": string; + "Your transaction cost will be much higher as it includes the gas to create the pool.": string; + "Your transaction may be frontrun": string; + "Your transaction may fail": string; + "Your transaction will revert if it has been pending for longer than this period of time.": string; + "Your transaction will revert if it is pending for more than this period of time.": string; + "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; + "Your transactions will appear here...": string; + "Your unclaimed UNI": string; + "after slippage": string; + confirm: string; + "for {0}": (string | string[])[]; + gwei: string; + "has socks emoji": string; + "here.": string; + "https:// or ipfs:// or ENS name": string; + minutes: string; + "via {0}": (string | string[])[]; + "via {0} token list": (string | string[])[]; + "{0, plural, one {Import token} other {Import tokens}}": (string | { + one: string; + other: string; + })[][]; + "{0}": string[][]; + "{0} %": (string | string[])[]; + "{0} <0/> per <1/>": (string | string[])[]; + "{0} Custom Tokens": (string | string[])[]; + "{0} Deposited": (string | string[])[]; + "{0} ETH": (string | string[])[]; + "{0} Fees Earned:": (string | string[])[]; + "{0} Pending": (string | string[])[]; + "{0} UNI": (string | string[])[]; + "{0} UNI / week": (string | string[])[]; + "{0} UNI-V2": (string | string[])[]; + "{0} UNI-V2 LP tokens available": (string | string[])[]; + "{0} Votes": (string | string[])[]; + "{0} per {1}": (string | string[])[]; + "{0} tokens": (string | string[])[]; + "{0} {1} Price:": (string | string[])[]; + "{0} {nativeCurrencySymbol}": (string | string[])[]; + "{0} \u2022 Added by user": (string | string[])[]; + "{0}%": (string | string[])[]; + "{0}% fee tier": (string | string[])[]; + "{0}% pool": (string | string[])[]; + "{0}% select": (string | string[])[]; + "{0}-{1} Liquidity Mining": (string | string[])[]; + "{0}/{1} LP NFT": (string | string[])[]; + "{0}/{1} LP Tokens": (string | string[])[]; + "{SOCKS_AMOUNT} UNI": (string | string[])[]; + "{USER_AMOUNT} UNI": (string | string[])[]; + "{activeTokensOnThisChain} tokens": (string | string[])[]; + "{integrator} fee": (string | string[])[]; + "{label} token bridge": (string | string[])[]; + "{min}m {sec}s": (string | string[])[]; + "{percentForSlider}%": (string | string[])[]; + "{sec}s": (string | string[])[]; + "{tokenB} per {tokenA}": (string | string[])[]; + "\u2190 Back to Pools Overview": string; +}; diff --git a/dist2/types/locales/es-ES.d.ts b/dist2/types/locales/es-ES.d.ts new file mode 100644 index 00000000000..261a7fbd1ca --- /dev/null +++ b/dist2/types/locales/es-ES.d.ts @@ -0,0 +1,593 @@ +export const messages: { + "$-": string; + "$<0/>": string; + "${0}": (string | string[])[]; + "(${0})": (string | string[])[]; + "(View on Explorer)": string; + "(clear all)": string; + "(edit)": string; + "- Remove recipient": string; + "0 UNI / week": string; + "25%": string; + "50%": string; + "75%": string; + "<0/> All Proposals": string; + "<0/> Votes": string; + "<0>Account analytics and accrued fees<1> \u2197 ": string; + "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; + "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; + "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; + "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; + "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; + "<0>Unlock voting to prepare for the next proposal.": string; + "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; + "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; + About: string; + Accept: string; + Account: string; + Active: string; + Add: string; + "Add <0/> and <1/> to Uniswap V2": string; + "Add Delegate +": string; + "Add Liquidity": string; + "Add V2 Liquidity": string; + "Add liquidity.": string; + "Add more liquidity": string; + "Add {0} to Metamask <0/>": (string | string[])[]; + "Add {0}-{1} liquidity": (string | string[])[]; + "Add {0}/{1} V3 liquidity": (string | string[])[]; + "Added {0}": (string | string[])[]; + "Address has no available claim": string; + Against: string; + "Allow LP token migration": string; + "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; + "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; + Allowed: string; + Amount: string; + "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Approval pending <0/>": string; + Approve: string; + "Approve Token": string; + "Approve {0}": (string | string[])[]; + "Approve {0} first": (string | string[])[]; + Approved: string; + Approving: string; + "Approving {0}": (string | string[])[]; + Arbiscan: string; + "Arbitrum Bridge": string; + "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Are you sure?": string; + "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; + "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; + Auto: string; + "Auto Router API": string; + "Available to deposit: {0}": (string | string[])[]; + "Balance: {0}": (string | string[])[]; + "Best for exotic pairs.": string; + "Best for most pairs.": string; + "Best for stable pairs.": string; + "Best for very stable pairs.": string; + "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; + "Blocked address": string; + Bridge: string; + "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; + "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; + Canceled: string; + Change: string; + Charts: string; + "Check network status": string; + "Check out our v3 LP walkthrough and migration guides.": string; + Claim: string; + "Claim <0/> for {0}": (string | string[])[]; + "Claim UNI": string; + "Claim UNI Token": string; + "Claim UNI reward for {0}": (string | string[])[]; + "Claim fees": string; + "Claim your UNI tokens": string; + Claimed: string; + "Claimed UNI!": string; + "Claimed!": string; + Claiming: string; + "Claiming UNI": string; + "Claiming {0} UNI": (string | string[])[]; + "Clear All": string; + "Clear all": string; + Close: string; + Closed: string; + Collect: string; + "Collect as WETH": string; + "Collect fees": string; + "Collect {0}/{1} fees": (string | string[])[]; + Collected: string; + Collecting: string; + "Collecting fees": string; + "Collecting fees will withdraw currently available fees for you.": string; + Confirm: string; + "Confirm Supply": string; + "Confirm Swap": string; + "Confirm swap": string; + "Confirm this transaction in your wallet": string; + "Confirm transaction in wallet": string; + "Connect Wallet": string; + "Connect a wallet": string; + "Connect to a wallet to find pools": string; + "Connect to a wallet to view your V2 liquidity.": string; + "Connect to a wallet to view your liquidity.": string; + "Connect wallet to swap": string; + "Connected with {name}": (string | string[])[]; + Copied: string; + "Copy Address": string; + "Create Pool & Supply": string; + "Create Proposal": string; + "Create a pair": string; + "Create a pool": string; + "Create an issue on GitHub": string; + "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; + "Create pool.": string; + "Create {0}/{1} V3 pool": (string | string[])[]; + "Current price": string; + "Current {0} Price:": (string | string[])[]; + Custom: string; + "Dark Theme": string; + Defeated: string; + "Delegate Votes": string; + "Delegate voting power to {0}": (string | string[])[]; + "Delegated to:": string; + "Delegating votes": string; + Deposit: string; + "Deposit Amounts": string; + "Deposit UNI-V2 LP Tokens": string; + "Deposit liquidity": string; + "Deposit tokens to the {label} network.": (string | string[])[]; + "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; + "Deposited liquidity:": string; + "Deposited {0} UNI-V2": (string | string[])[]; + "Depositing Liquidity": string; + Description: string; + Detailed: string; + Details: string; + Disconnect: string; + Discord: string; + Dismiss: string; + Docs: string; + "Don\u2019t see one of your v2 positions? <0>Import it.": string; + "Earned UNI tokens represent voting shares in Uniswap governance.": string; + Edit: string; + "Efficiency Comparison": string; + "Enter a percent": string; + "Enter a recipient": string; + "Enter a valid slippage percentage": string; + "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; + "Enter an amount": string; + "Enter valid list location": string; + "Enter valid token address": string; + "Enter {0} amount": (string | string[])[]; + Error: string; + "Error connecting": string; + "Error connecting. Try refreshing the page.": string; + "Error details": string; + "Error importing list": string; + "Estimate may differ due to your wallet gas settings": string; + "Estimated network fee": string; + Etherscan: string; + Executed: string; + "Expanded results from inactive Token Lists": string; + "Expected Output": string; + "Expert Mode": string; + "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; + Expired: string; + "Explore Uniswap Analytics.": string; + "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; + "Fee Tier": string; + "Fee tier": string; + "Fetching best price...": string; + "Fetching best price\u2026": string; + For: string; + "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; + From: string; + "From (at most)": string; + "Full Range": string; + "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; + "Get support on Discord": string; + "Help Center": string; + Hide: string; + "Hide closed positions": string; + "High Price Impact": string; + "How this app uses APIs": string; + "I understand": string; + "If you purchase a token from this list, you may not be able to sell it back.": string; + Import: string; + "Import List": string; + "Import Pool": string; + "Import V2 Pool": string; + "Import at your own risk": string; + "In range": string; + "Increase Liquidity": string; + "Initial prices and pool share": string; + "Initializing...": string; + "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Install Metamask": string; + "Insufficient liquidity for this trade.": string; + "Insufficient {0}": (string | string[])[]; + "Insufficient {0} balance": (string | string[])[]; + "Interface Settings": string; + "Invalid pair": string; + "Invalid pair.": string; + "Invalid price input": string; + "Invalid range selected. The min price must be lower than the max price.": string; + "Invalid recipient": string; + Language: string; + Learn: string; + "Learn about providing liquidity": string; + "Learn more": string; + "Legal & Privacy": string; + "Light Theme": string; + Liquidity: string; + "Liquidity data not available.": string; + "Liquidity provider rewards": string; + "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + Lists: string; + Loaded: string; + Loading: string; + MAX: string; + Manage: string; + "Manage Liquidity in Rewards Pool": string; + "Manage Token Lists": string; + "Manage this pool.": string; + Max: string; + "Max Price": string; + "Max price": string; + "Max slippage": string; + "Max:": string; + "Maximum sent": string; + Menu: string; + Migrate: string; + "Migrate Liquidity to V3": string; + "Migrate V2 Liquidity": string; + "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; + "Migrate {0}/{1} liquidity to V3": (string | string[])[]; + Migrating: string; + "Min Price": string; + "Min price": string; + "Min:": string; + "Minimum received": string; + "Missing dependencies": string; + "Mock Toggle": string; + More: string; + "Network Fee": string; + "Network Warning": string; + "Network fees exceed 50% of the swap amount!": string; + "New Position": string; + "No V2 Liquidity found.": string; + "No active pools": string; + "No data": string; + "No description.": string; + "No liquidity found.": string; + "No pool found.": string; + "No proposals found.": string; + "No results found.": string; + "Not created": string; + OFF: string; + ON: string; + "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; + Off: string; + On: string; + "Once you are happy with the rate click supply to review.": string; + "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; + "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; + "Optimism Gateway": string; + "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Optimistic Etherscan": string; + "Out of range": string; + "Output is estimated.": string; + "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; + "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Output will be sent to <0>{0}": (string | string[])[]; + Owner: string; + "Participating pools": string; + Pending: string; + "Please confirm you would like to remove this list by typing REMOVE": string; + "Please connect to Layer 1 Ethereum": string; + "Please connect to a supported network in the dropdown menu or in your wallet.": string; + "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; + "Polygon Bridge": string; + Polygonscan: string; + Pool: string; + "Pool Found!": string; + "Pool Rate": string; + "Pool rate": string; + "Pool tokens in rewards pool:": string; + "Pooled {0}:": (string | string[])[]; + "Pools Overview": string; + Preview: string; + Price: string; + "Price Difference:": string; + "Price Impact": string; + "Price Impact Too High": string; + "Price Updated": string; + "Price impact": string; + "Price range": string; + "Price updated": string; + "Price:": string; + "Prices and pool share": string; + Proposal: string; + "Proposal Submitted": string; + "Proposal Title": string; + Proposals: string; + "Proposals submitted by community members will appear here.": string; + "Proposed Action": string; + Proposer: string; + "Protocol Disclaimer": string; + Queued: string; + Rates: string; + "Read more about UNI": string; + "Read more about Uniswap governance": string; + "Read more about providing liquidity": string; + "Read more about unsupported assets": string; + "Recent Transactions": string; + "Recent transactions": string; + Recipient: string; + "Reload the page": string; + Remove: string; + "Remove <0/> and <1/>": string; + "Remove Amount": string; + "Remove Delegate": string; + "Remove Liquidity": string; + "Remove list": string; + "Removing {0} {1} and {2} {3}": (string | string[])[]; + "Removing {0} {1} and{2} {3}": (string | string[])[]; + "Request Features": string; + Reset: string; + Return: string; + "Review swap": string; + "Search by token name or address": string; + "Search name or paste address": string; + "Select Pair": string; + "Select a network": string; + "Select a token": string; + "Select a token to find your v2 liquidity.": string; + "Select an action": string; + "Selected Range": string; + Self: string; + "Self Delegate": string; + "Set Price Range": string; + "Set Starting Price": string; + Settings: string; + "Share of Pool": string; + "Share of Pool:": string; + "Show Portis": string; + "Show closed positions": string; + Simple: string; + "Slippage tolerance": string; + "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; + "Something went wrong": string; + "Something went wrong.": string; + "Step 1. Get UNI-V2 Liquidity tokens": string; + "Submit new proposal": string; + "Submitting Proposal": string; + "Submitting Vote": string; + Succeeded: string; + Success: string; + Supply: string; + "Supplying {0} {1} and {2} {3}": (string | string[])[]; + Swap: string; + "Swap <0/> for exactly <1/>": string; + "Swap Anyway": string; + "Swap details": string; + "Swap exactly <0/> for <1/>": string; + "Swap failed: {0}": (string | string[])[]; + "Swap summary": string; + "Swapping {0} {1} for {2} {3}": (string | string[])[]; + "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; + "Tell us what you think \u2197": string; + "Thanks for being part of the Uniswap community <0/>": string; + "The % you will earn in fees.": string; + "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; + "The app fetches blockchain data from The Graph\u2019s hosted service.": string; + "The app fetches on-chain data and constructs contract calls with an Infura API.": string; + "The app fetches the optimal trade route from a Uniswap Labs server.": string; + "The app logs anonymized usage statistics in order to improve over time.": string; + "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; + "The cost of sending this transaction is more than half of the value of the input amount.": string; + "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; + "The estimated difference between the USD values of input and output amounts.": string; + "The input token cannot be transferred. There may be an issue with the input token.": string; + "The market price is outside your specified price range. Single-asset deposit only.": string; + "The most recent block number on this network. Prices update on every block.": string; + "The output token cannot be transferred. There may be an issue with the output token.": string; + "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; + "The price of this pool is within your selected range. Your position is currently earning fees.": string; + "The ratio of tokens you add will set the price of this pool.": string; + "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; + "There is no liquidity data.": string; + "This app uses the following third-party APIs:": string; + "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; + "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; + "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; + "This token is not supported in the Uniswap Labs app": string; + "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; + "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; + "Tip: Custom tokens are stored locally in your browser": string; + To: string; + "To (at least)": string; + "Token not supported": string; + Tokens: string; + "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; + "Top pools": string; + "Total deposited": string; + "Total deposits": string; + "Trade Route": string; + Trading: string; + "Transaction Settings": string; + "Transaction Submitted": string; + "Transaction completed in": string; + "Transaction deadline": string; + "Transaction pending": string; + "Transaction rejected.": string; + "Transaction submitted": string; + "Transfer Token": string; + "Try Again": string; + "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Turn On Expert Mode": string; + "UNI has arrived": string; + "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; + "UNI {0}/{1} Burned": (string | string[])[]; + "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; + "UNI-V2 {0}-{1}": (string | string[])[]; + "Unclaimed UNI": string; + "Unclaimed fees": string; + Undetermined: string; + "Unexpected error. Could not estimate gas for the swap.": string; + "Unexpected issue with estimating the gas. Please try again.": string; + "Uniswap Governance": string; + "Uniswap Labs' Terms of Service": string; + "Uniswap available in: <0>{0}": (string | string[])[]; + "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; + "Uniswap liquidity mining": string; + "Uniswap migration contract\u2197": string; + "Unknown Source": string; + "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; + "Unlock Votes": string; + "Unlock Voting": string; + "Unlocking Votes": string; + "Unsupported Asset": string; + "Unsupported Assets": string; + "Unsupported network\u2013switch to another to trade.": string; + Untitled: string; + Unwrap: string; + "Unwrap <0/> to {0}": (string | string[])[]; + "Update Delegation": string; + "Update list": string; + "Use the Uniswap Labs API to get faster quotes.": string; + User: string; + "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; + "V2 liquidity": string; + "V3 {0} Price:": (string | string[])[]; + "View accrued fees and analytics<0>\u2197": string; + "View list": string; + "View on Etherscan": string; + "View on Explorer": string; + "View transaction on Explorer": string; + Vote: string; + "Vote Against": string; + "Vote For": string; + "Vote against proposal {proposalId}": (string | string[])[]; + "Vote against proposal {proposalKey}": (string | string[])[]; + "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote for proposal {proposalId}": (string | string[])[]; + "Vote for proposal {proposalKey}": (string | string[])[]; + "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote to abstain on proposal {proposalId}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Voting ended {0}": (string | string[])[]; + "Voting ends approximately {0}": (string | string[])[]; + "Voting starts approximately {0}": (string | string[])[]; + "Waiting For Confirmation": string; + "Wallet Address or ENS name": string; + "Weekly Rewards": string; + "Welcome to team Unicorn :)": string; + "When you claim without withdrawing your liquidity remains in the mining pool.": string; + "When you withdraw, the contract will automagically claim UNI on your behalf!": string; + "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; + Withdraw: string; + "Withdraw & Claim": string; + "Withdraw deposited liquidity": string; + "Withdrawing {0} UNI-V2": (string | string[])[]; + "Withdrew UNI-V2!": string; + Wrap: string; + "Wrap <0/> to {0}": (string | string[])[]; + "Wrong Network": string; + "You already have an active or pending proposal": string; + "You are creating a pool": string; + "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; + "You are the first liquidity provider.": string; + "You can either vote on each proposal yourself or delegate your votes to a third party.": string; + "You can now trade {0}": (string | string[])[]; + "You don't have enough votes to submit a proposal": string; + "You don\u2019t have liquidity in this pool yet.": string; + "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; + "You may have lost your network connection.": string; + "You might consider waiting until the network fees go down to complete this transaction.": string; + "You must connect an account.": string; + "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; + "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; + "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; + "You will also collect fees earned from this position.": string; + "You will receive": string; + "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; + "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; + "Your V2 liquidity": string; + "Your active V3 liquidity positions will appear here.": string; + "Your liquidity deposits": string; + "Your pool share:": string; + "Your position": string; + "Your position has 0 liquidity, and is not earning fees.": string; + "Your position will appear here.": string; + "Your position will be 100% composed of {0} at this price": (string | string[])[]; + "Your position will be 100% {0} at this price.": (string | string[])[]; + "Your position will not earn fees or be used in trades until the market price moves into your range.": string; + "Your positions": string; + "Your rate": string; + "Your total pool tokens:": string; + "Your transaction cost will be much higher as it includes the gas to create the pool.": string; + "Your transaction may be frontrun": string; + "Your transaction may fail": string; + "Your transaction will revert if it has been pending for longer than this period of time.": string; + "Your transaction will revert if it is pending for more than this period of time.": string; + "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; + "Your transactions will appear here...": string; + "Your unclaimed UNI": string; + "after slippage": string; + confirm: string; + "for {0}": (string | string[])[]; + gwei: string; + "has socks emoji": string; + "here.": string; + "https:// or ipfs:// or ENS name": string; + minutes: string; + "via {0}": (string | string[])[]; + "via {0} token list": (string | string[])[]; + "{0, plural, one {Import token} other {Import tokens}}": (string | { + one: string; + other: string; + })[][]; + "{0}": string[][]; + "{0} %": (string | string[])[]; + "{0} <0/> per <1/>": (string | string[])[]; + "{0} Custom Tokens": (string | string[])[]; + "{0} Deposited": (string | string[])[]; + "{0} ETH": (string | string[])[]; + "{0} Fees Earned:": (string | string[])[]; + "{0} Pending": (string | string[])[]; + "{0} UNI": (string | string[])[]; + "{0} UNI / week": (string | string[])[]; + "{0} UNI-V2": (string | string[])[]; + "{0} UNI-V2 LP tokens available": (string | string[])[]; + "{0} Votes": (string | string[])[]; + "{0} per {1}": (string | string[])[]; + "{0} tokens": (string | string[])[]; + "{0} {1} Price:": (string | string[])[]; + "{0} {nativeCurrencySymbol}": (string | string[])[]; + "{0} \u2022 Added by user": (string | string[])[]; + "{0}%": (string | string[])[]; + "{0}% fee tier": (string | string[])[]; + "{0}% pool": (string | string[])[]; + "{0}% select": (string | string[])[]; + "{0}-{1} Liquidity Mining": (string | string[])[]; + "{0}/{1} LP NFT": (string | string[])[]; + "{0}/{1} LP Tokens": (string | string[])[]; + "{SOCKS_AMOUNT} UNI": (string | string[])[]; + "{USER_AMOUNT} UNI": (string | string[])[]; + "{activeTokensOnThisChain} tokens": (string | string[])[]; + "{integrator} fee": (string | string[])[]; + "{label} token bridge": (string | string[])[]; + "{min}m {sec}s": (string | string[])[]; + "{percentForSlider}%": (string | string[])[]; + "{sec}s": string[][]; + "{tokenB} per {tokenA}": (string | string[])[]; + "\u2190 Back to Pools Overview": string; +}; diff --git a/dist2/types/locales/fi-FI.d.ts b/dist2/types/locales/fi-FI.d.ts new file mode 100644 index 00000000000..75120e0e5c9 --- /dev/null +++ b/dist2/types/locales/fi-FI.d.ts @@ -0,0 +1,593 @@ +export const messages: { + "$-": string; + "$<0/>": string; + "${0}": (string | string[])[]; + "(${0})": (string | string[])[]; + "(View on Explorer)": string; + "(clear all)": string; + "(edit)": string; + "- Remove recipient": string; + "0 UNI / week": string; + "25%": string; + "50%": string; + "75%": string; + "<0/> All Proposals": string; + "<0/> Votes": string; + "<0>Account analytics and accrued fees<1> \u2197 ": string; + "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; + "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; + "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; + "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; + "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; + "<0>Unlock voting to prepare for the next proposal.": string; + "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; + "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; + About: string; + Accept: string; + Account: string; + Active: string; + Add: string; + "Add <0/> and <1/> to Uniswap V2": string; + "Add Delegate +": string; + "Add Liquidity": string; + "Add V2 Liquidity": string; + "Add liquidity.": string; + "Add more liquidity": string; + "Add {0} to Metamask <0/>": (string | string[])[]; + "Add {0}-{1} liquidity": (string | string[])[]; + "Add {0}/{1} V3 liquidity": (string | string[])[]; + "Added {0}": (string | string[])[]; + "Address has no available claim": string; + Against: string; + "Allow LP token migration": string; + "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; + "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; + Allowed: string; + Amount: string; + "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Approval pending <0/>": string; + Approve: string; + "Approve Token": string; + "Approve {0}": (string | string[])[]; + "Approve {0} first": (string | string[])[]; + Approved: string; + Approving: string; + "Approving {0}": (string | string[])[]; + Arbiscan: string; + "Arbitrum Bridge": string; + "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Are you sure?": string; + "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; + "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; + Auto: string; + "Auto Router API": string; + "Available to deposit: {0}": (string | string[])[]; + "Balance: {0}": (string | string[])[]; + "Best for exotic pairs.": string; + "Best for most pairs.": string; + "Best for stable pairs.": string; + "Best for very stable pairs.": string; + "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; + "Blocked address": string; + Bridge: string; + "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; + "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; + Canceled: string; + Change: string; + Charts: string; + "Check network status": string; + "Check out our v3 LP walkthrough and migration guides.": string; + Claim: string; + "Claim <0/> for {0}": (string | string[])[]; + "Claim UNI": string; + "Claim UNI Token": string; + "Claim UNI reward for {0}": (string | string[])[]; + "Claim fees": string; + "Claim your UNI tokens": string; + Claimed: string; + "Claimed UNI!": string; + "Claimed!": string; + Claiming: string; + "Claiming UNI": string; + "Claiming {0} UNI": (string | string[])[]; + "Clear All": string; + "Clear all": string; + Close: string; + Closed: string; + Collect: string; + "Collect as WETH": string; + "Collect fees": string; + "Collect {0}/{1} fees": (string | string[])[]; + Collected: string; + Collecting: string; + "Collecting fees": string; + "Collecting fees will withdraw currently available fees for you.": string; + Confirm: string; + "Confirm Supply": string; + "Confirm Swap": string; + "Confirm swap": string; + "Confirm this transaction in your wallet": string; + "Confirm transaction in wallet": string; + "Connect Wallet": string; + "Connect a wallet": string; + "Connect to a wallet to find pools": string; + "Connect to a wallet to view your V2 liquidity.": string; + "Connect to a wallet to view your liquidity.": string; + "Connect wallet to swap": string; + "Connected with {name}": (string | string[])[]; + Copied: string; + "Copy Address": string; + "Create Pool & Supply": string; + "Create Proposal": string; + "Create a pair": string; + "Create a pool": string; + "Create an issue on GitHub": string; + "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; + "Create pool.": string; + "Create {0}/{1} V3 pool": (string | string[])[]; + "Current price": string; + "Current {0} Price:": (string | string[])[]; + Custom: string; + "Dark Theme": string; + Defeated: string; + "Delegate Votes": string; + "Delegate voting power to {0}": (string | string[])[]; + "Delegated to:": string; + "Delegating votes": string; + Deposit: string; + "Deposit Amounts": string; + "Deposit UNI-V2 LP Tokens": string; + "Deposit liquidity": string; + "Deposit tokens to the {label} network.": (string | string[])[]; + "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; + "Deposited liquidity:": string; + "Deposited {0} UNI-V2": (string | string[])[]; + "Depositing Liquidity": string; + Description: string; + Detailed: string; + Details: string; + Disconnect: string; + Discord: string; + Dismiss: string; + Docs: string; + "Don\u2019t see one of your v2 positions? <0>Import it.": string; + "Earned UNI tokens represent voting shares in Uniswap governance.": string; + Edit: string; + "Efficiency Comparison": string; + "Enter a percent": string; + "Enter a recipient": string; + "Enter a valid slippage percentage": string; + "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; + "Enter an amount": string; + "Enter valid list location": string; + "Enter valid token address": string; + "Enter {0} amount": (string | string[])[]; + Error: string; + "Error connecting": string; + "Error connecting. Try refreshing the page.": string; + "Error details": string; + "Error importing list": string; + "Estimate may differ due to your wallet gas settings": string; + "Estimated network fee": string; + Etherscan: string; + Executed: string; + "Expanded results from inactive Token Lists": string; + "Expected Output": string; + "Expert Mode": string; + "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; + Expired: string; + "Explore Uniswap Analytics.": string; + "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; + "Fee Tier": string; + "Fee tier": string; + "Fetching best price...": string; + "Fetching best price\u2026": string; + For: string; + "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; + From: string; + "From (at most)": string; + "Full Range": string; + "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; + "Get support on Discord": string; + "Help Center": string; + Hide: string; + "Hide closed positions": string; + "High Price Impact": string; + "How this app uses APIs": string; + "I understand": string; + "If you purchase a token from this list, you may not be able to sell it back.": string; + Import: string; + "Import List": string; + "Import Pool": string; + "Import V2 Pool": string; + "Import at your own risk": string; + "In range": string; + "Increase Liquidity": string; + "Initial prices and pool share": string; + "Initializing...": string; + "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Install Metamask": string; + "Insufficient liquidity for this trade.": string; + "Insufficient {0}": (string | string[])[]; + "Insufficient {0} balance": (string | string[])[]; + "Interface Settings": string; + "Invalid pair": string; + "Invalid pair.": string; + "Invalid price input": string; + "Invalid range selected. The min price must be lower than the max price.": string; + "Invalid recipient": string; + Language: string; + Learn: string; + "Learn about providing liquidity": string; + "Learn more": string; + "Legal & Privacy": string; + "Light Theme": string; + Liquidity: string; + "Liquidity data not available.": string; + "Liquidity provider rewards": string; + "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + Lists: string; + Loaded: string; + Loading: string; + MAX: string; + Manage: string; + "Manage Liquidity in Rewards Pool": string; + "Manage Token Lists": string; + "Manage this pool.": string; + Max: string; + "Max Price": string; + "Max price": string; + "Max slippage": string; + "Max:": string; + "Maximum sent": string; + Menu: string; + Migrate: string; + "Migrate Liquidity to V3": string; + "Migrate V2 Liquidity": string; + "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; + "Migrate {0}/{1} liquidity to V3": (string | string[])[]; + Migrating: string; + "Min Price": string; + "Min price": string; + "Min:": string; + "Minimum received": string; + "Missing dependencies": string; + "Mock Toggle": string; + More: string; + "Network Fee": string; + "Network Warning": string; + "Network fees exceed 50% of the swap amount!": string; + "New Position": string; + "No V2 Liquidity found.": string; + "No active pools": string; + "No data": string; + "No description.": string; + "No liquidity found.": string; + "No pool found.": string; + "No proposals found.": string; + "No results found.": string; + "Not created": string; + OFF: string; + ON: string; + "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; + Off: string; + On: string; + "Once you are happy with the rate click supply to review.": string; + "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; + "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; + "Optimism Gateway": string; + "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Optimistic Etherscan": string; + "Out of range": string; + "Output is estimated.": string; + "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; + "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Output will be sent to <0>{0}": (string | string[])[]; + Owner: string; + "Participating pools": string; + Pending: string; + "Please confirm you would like to remove this list by typing REMOVE": string; + "Please connect to Layer 1 Ethereum": string; + "Please connect to a supported network in the dropdown menu or in your wallet.": string; + "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; + "Polygon Bridge": string; + Polygonscan: string; + Pool: string; + "Pool Found!": string; + "Pool Rate": string; + "Pool rate": string; + "Pool tokens in rewards pool:": string; + "Pooled {0}:": (string | string[])[]; + "Pools Overview": string; + Preview: string; + Price: string; + "Price Difference:": string; + "Price Impact": string; + "Price Impact Too High": string; + "Price Updated": string; + "Price impact": string; + "Price range": string; + "Price updated": string; + "Price:": string; + "Prices and pool share": string; + Proposal: string; + "Proposal Submitted": string; + "Proposal Title": string; + Proposals: string; + "Proposals submitted by community members will appear here.": string; + "Proposed Action": string; + Proposer: string; + "Protocol Disclaimer": string; + Queued: string; + Rates: string; + "Read more about UNI": string; + "Read more about Uniswap governance": string; + "Read more about providing liquidity": string; + "Read more about unsupported assets": string; + "Recent Transactions": string; + "Recent transactions": string; + Recipient: string; + "Reload the page": string; + Remove: string; + "Remove <0/> and <1/>": string; + "Remove Amount": string; + "Remove Delegate": string; + "Remove Liquidity": string; + "Remove list": string; + "Removing {0} {1} and {2} {3}": (string | string[])[]; + "Removing {0} {1} and{2} {3}": (string | string[])[]; + "Request Features": string; + Reset: string; + Return: string; + "Review swap": string; + "Search by token name or address": string; + "Search name or paste address": string; + "Select Pair": string; + "Select a network": string; + "Select a token": string; + "Select a token to find your v2 liquidity.": string; + "Select an action": string; + "Selected Range": string; + Self: string; + "Self Delegate": string; + "Set Price Range": string; + "Set Starting Price": string; + Settings: string; + "Share of Pool": string; + "Share of Pool:": string; + "Show Portis": string; + "Show closed positions": string; + Simple: string; + "Slippage tolerance": string; + "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; + "Something went wrong": string; + "Something went wrong.": string; + "Step 1. Get UNI-V2 Liquidity tokens": string; + "Submit new proposal": string; + "Submitting Proposal": string; + "Submitting Vote": string; + Succeeded: string; + Success: string; + Supply: string; + "Supplying {0} {1} and {2} {3}": (string | string[])[]; + Swap: string; + "Swap <0/> for exactly <1/>": string; + "Swap Anyway": string; + "Swap details": string; + "Swap exactly <0/> for <1/>": string; + "Swap failed: {0}": (string | string[])[]; + "Swap summary": string; + "Swapping {0} {1} for {2} {3}": (string | string[])[]; + "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; + "Tell us what you think \u2197": string; + "Thanks for being part of the Uniswap community <0/>": string; + "The % you will earn in fees.": string; + "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; + "The app fetches blockchain data from The Graph\u2019s hosted service.": string; + "The app fetches on-chain data and constructs contract calls with an Infura API.": string; + "The app fetches the optimal trade route from a Uniswap Labs server.": string; + "The app logs anonymized usage statistics in order to improve over time.": string; + "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; + "The cost of sending this transaction is more than half of the value of the input amount.": string; + "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; + "The estimated difference between the USD values of input and output amounts.": string; + "The input token cannot be transferred. There may be an issue with the input token.": string; + "The market price is outside your specified price range. Single-asset deposit only.": string; + "The most recent block number on this network. Prices update on every block.": string; + "The output token cannot be transferred. There may be an issue with the output token.": string; + "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; + "The price of this pool is within your selected range. Your position is currently earning fees.": string; + "The ratio of tokens you add will set the price of this pool.": string; + "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; + "There is no liquidity data.": string; + "This app uses the following third-party APIs:": string; + "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; + "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; + "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; + "This token is not supported in the Uniswap Labs app": string; + "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; + "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; + "Tip: Custom tokens are stored locally in your browser": string; + To: string; + "To (at least)": string; + "Token not supported": string; + Tokens: string; + "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; + "Top pools": string; + "Total deposited": string; + "Total deposits": string; + "Trade Route": string; + Trading: string; + "Transaction Settings": string; + "Transaction Submitted": string; + "Transaction completed in": string; + "Transaction deadline": string; + "Transaction pending": string; + "Transaction rejected.": string; + "Transaction submitted": string; + "Transfer Token": string; + "Try Again": string; + "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Turn On Expert Mode": string; + "UNI has arrived": string; + "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; + "UNI {0}/{1} Burned": (string | string[])[]; + "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; + "UNI-V2 {0}-{1}": (string | string[])[]; + "Unclaimed UNI": string; + "Unclaimed fees": string; + Undetermined: string; + "Unexpected error. Could not estimate gas for the swap.": string; + "Unexpected issue with estimating the gas. Please try again.": string; + "Uniswap Governance": string; + "Uniswap Labs' Terms of Service": string; + "Uniswap available in: <0>{0}": (string | string[])[]; + "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; + "Uniswap liquidity mining": string; + "Uniswap migration contract\u2197": string; + "Unknown Source": string; + "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; + "Unlock Votes": string; + "Unlock Voting": string; + "Unlocking Votes": string; + "Unsupported Asset": string; + "Unsupported Assets": string; + "Unsupported network\u2013switch to another to trade.": string; + Untitled: string; + Unwrap: string; + "Unwrap <0/> to {0}": (string | string[])[]; + "Update Delegation": string; + "Update list": string; + "Use the Uniswap Labs API to get faster quotes.": string; + User: string; + "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; + "V2 liquidity": string; + "V3 {0} Price:": (string | string[])[]; + "View accrued fees and analytics<0>\u2197": string; + "View list": string; + "View on Etherscan": string; + "View on Explorer": string; + "View transaction on Explorer": string; + Vote: string; + "Vote Against": string; + "Vote For": string; + "Vote against proposal {proposalId}": (string | string[])[]; + "Vote against proposal {proposalKey}": (string | string[])[]; + "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote for proposal {proposalId}": (string | string[])[]; + "Vote for proposal {proposalKey}": (string | string[])[]; + "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote to abstain on proposal {proposalId}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Voting ended {0}": (string | string[])[]; + "Voting ends approximately {0}": (string | string[])[]; + "Voting starts approximately {0}": (string | string[])[]; + "Waiting For Confirmation": string; + "Wallet Address or ENS name": string; + "Weekly Rewards": string; + "Welcome to team Unicorn :)": string; + "When you claim without withdrawing your liquidity remains in the mining pool.": string; + "When you withdraw, the contract will automagically claim UNI on your behalf!": string; + "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; + Withdraw: string; + "Withdraw & Claim": string; + "Withdraw deposited liquidity": string; + "Withdrawing {0} UNI-V2": (string | string[])[]; + "Withdrew UNI-V2!": string; + Wrap: string; + "Wrap <0/> to {0}": (string | string[])[]; + "Wrong Network": string; + "You already have an active or pending proposal": string; + "You are creating a pool": string; + "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; + "You are the first liquidity provider.": string; + "You can either vote on each proposal yourself or delegate your votes to a third party.": string; + "You can now trade {0}": (string | string[])[]; + "You don't have enough votes to submit a proposal": string; + "You don\u2019t have liquidity in this pool yet.": string; + "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; + "You may have lost your network connection.": string; + "You might consider waiting until the network fees go down to complete this transaction.": string; + "You must connect an account.": string; + "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; + "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; + "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; + "You will also collect fees earned from this position.": string; + "You will receive": string; + "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; + "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; + "Your V2 liquidity": string; + "Your active V3 liquidity positions will appear here.": string; + "Your liquidity deposits": string; + "Your pool share:": string; + "Your position": string; + "Your position has 0 liquidity, and is not earning fees.": string; + "Your position will appear here.": string; + "Your position will be 100% composed of {0} at this price": (string | string[])[]; + "Your position will be 100% {0} at this price.": (string | string[])[]; + "Your position will not earn fees or be used in trades until the market price moves into your range.": string; + "Your positions": string; + "Your rate": string; + "Your total pool tokens:": string; + "Your transaction cost will be much higher as it includes the gas to create the pool.": string; + "Your transaction may be frontrun": string; + "Your transaction may fail": string; + "Your transaction will revert if it has been pending for longer than this period of time.": string; + "Your transaction will revert if it is pending for more than this period of time.": string; + "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; + "Your transactions will appear here...": string; + "Your unclaimed UNI": string; + "after slippage": string; + confirm: string; + "for {0}": (string | string[])[]; + gwei: string; + "has socks emoji": string; + "here.": string; + "https:// or ipfs:// or ENS name": string; + minutes: string; + "via {0}": (string | string[])[]; + "via {0} token list": (string | string[])[]; + "{0, plural, one {Import token} other {Import tokens}}": (string | { + one: string; + other: string; + })[][]; + "{0}": string[][]; + "{0} %": (string | string[])[]; + "{0} <0/> per <1/>": (string | string[])[]; + "{0} Custom Tokens": (string | string[])[]; + "{0} Deposited": (string | string[])[]; + "{0} ETH": (string | string[])[]; + "{0} Fees Earned:": (string | string[])[]; + "{0} Pending": (string | string[])[]; + "{0} UNI": (string | string[])[]; + "{0} UNI / week": (string | string[])[]; + "{0} UNI-V2": (string | string[])[]; + "{0} UNI-V2 LP tokens available": (string | string[])[]; + "{0} Votes": (string | string[])[]; + "{0} per {1}": (string | string[])[]; + "{0} tokens": (string | string[])[]; + "{0} {1} Price:": (string | string[])[]; + "{0} {nativeCurrencySymbol}": (string | string[])[]; + "{0} \u2022 Added by user": (string | string[])[]; + "{0}%": (string | string[])[]; + "{0}% fee tier": (string | string[])[]; + "{0}% pool": (string | string[])[]; + "{0}% select": (string | string[])[]; + "{0}-{1} Liquidity Mining": (string | string[])[]; + "{0}/{1} LP NFT": (string | string[])[]; + "{0}/{1} LP Tokens": (string | string[])[]; + "{SOCKS_AMOUNT} UNI": (string | string[])[]; + "{USER_AMOUNT} UNI": (string | string[])[]; + "{activeTokensOnThisChain} tokens": (string | string[])[]; + "{integrator} fee": (string | string[])[]; + "{label} token bridge": (string | string[])[]; + "{min}m {sec}s": (string | string[])[]; + "{percentForSlider}%": (string | string[])[]; + "{sec}s": (string | string[])[]; + "{tokenB} per {tokenA}": (string | string[])[]; + "\u2190 Back to Pools Overview": string; +}; diff --git a/dist2/types/locales/fr-FR.d.ts b/dist2/types/locales/fr-FR.d.ts new file mode 100644 index 00000000000..75120e0e5c9 --- /dev/null +++ b/dist2/types/locales/fr-FR.d.ts @@ -0,0 +1,593 @@ +export const messages: { + "$-": string; + "$<0/>": string; + "${0}": (string | string[])[]; + "(${0})": (string | string[])[]; + "(View on Explorer)": string; + "(clear all)": string; + "(edit)": string; + "- Remove recipient": string; + "0 UNI / week": string; + "25%": string; + "50%": string; + "75%": string; + "<0/> All Proposals": string; + "<0/> Votes": string; + "<0>Account analytics and accrued fees<1> \u2197 ": string; + "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; + "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; + "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; + "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; + "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; + "<0>Unlock voting to prepare for the next proposal.": string; + "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; + "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; + About: string; + Accept: string; + Account: string; + Active: string; + Add: string; + "Add <0/> and <1/> to Uniswap V2": string; + "Add Delegate +": string; + "Add Liquidity": string; + "Add V2 Liquidity": string; + "Add liquidity.": string; + "Add more liquidity": string; + "Add {0} to Metamask <0/>": (string | string[])[]; + "Add {0}-{1} liquidity": (string | string[])[]; + "Add {0}/{1} V3 liquidity": (string | string[])[]; + "Added {0}": (string | string[])[]; + "Address has no available claim": string; + Against: string; + "Allow LP token migration": string; + "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; + "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; + Allowed: string; + Amount: string; + "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Approval pending <0/>": string; + Approve: string; + "Approve Token": string; + "Approve {0}": (string | string[])[]; + "Approve {0} first": (string | string[])[]; + Approved: string; + Approving: string; + "Approving {0}": (string | string[])[]; + Arbiscan: string; + "Arbitrum Bridge": string; + "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Are you sure?": string; + "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; + "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; + Auto: string; + "Auto Router API": string; + "Available to deposit: {0}": (string | string[])[]; + "Balance: {0}": (string | string[])[]; + "Best for exotic pairs.": string; + "Best for most pairs.": string; + "Best for stable pairs.": string; + "Best for very stable pairs.": string; + "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; + "Blocked address": string; + Bridge: string; + "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; + "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; + Canceled: string; + Change: string; + Charts: string; + "Check network status": string; + "Check out our v3 LP walkthrough and migration guides.": string; + Claim: string; + "Claim <0/> for {0}": (string | string[])[]; + "Claim UNI": string; + "Claim UNI Token": string; + "Claim UNI reward for {0}": (string | string[])[]; + "Claim fees": string; + "Claim your UNI tokens": string; + Claimed: string; + "Claimed UNI!": string; + "Claimed!": string; + Claiming: string; + "Claiming UNI": string; + "Claiming {0} UNI": (string | string[])[]; + "Clear All": string; + "Clear all": string; + Close: string; + Closed: string; + Collect: string; + "Collect as WETH": string; + "Collect fees": string; + "Collect {0}/{1} fees": (string | string[])[]; + Collected: string; + Collecting: string; + "Collecting fees": string; + "Collecting fees will withdraw currently available fees for you.": string; + Confirm: string; + "Confirm Supply": string; + "Confirm Swap": string; + "Confirm swap": string; + "Confirm this transaction in your wallet": string; + "Confirm transaction in wallet": string; + "Connect Wallet": string; + "Connect a wallet": string; + "Connect to a wallet to find pools": string; + "Connect to a wallet to view your V2 liquidity.": string; + "Connect to a wallet to view your liquidity.": string; + "Connect wallet to swap": string; + "Connected with {name}": (string | string[])[]; + Copied: string; + "Copy Address": string; + "Create Pool & Supply": string; + "Create Proposal": string; + "Create a pair": string; + "Create a pool": string; + "Create an issue on GitHub": string; + "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; + "Create pool.": string; + "Create {0}/{1} V3 pool": (string | string[])[]; + "Current price": string; + "Current {0} Price:": (string | string[])[]; + Custom: string; + "Dark Theme": string; + Defeated: string; + "Delegate Votes": string; + "Delegate voting power to {0}": (string | string[])[]; + "Delegated to:": string; + "Delegating votes": string; + Deposit: string; + "Deposit Amounts": string; + "Deposit UNI-V2 LP Tokens": string; + "Deposit liquidity": string; + "Deposit tokens to the {label} network.": (string | string[])[]; + "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; + "Deposited liquidity:": string; + "Deposited {0} UNI-V2": (string | string[])[]; + "Depositing Liquidity": string; + Description: string; + Detailed: string; + Details: string; + Disconnect: string; + Discord: string; + Dismiss: string; + Docs: string; + "Don\u2019t see one of your v2 positions? <0>Import it.": string; + "Earned UNI tokens represent voting shares in Uniswap governance.": string; + Edit: string; + "Efficiency Comparison": string; + "Enter a percent": string; + "Enter a recipient": string; + "Enter a valid slippage percentage": string; + "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; + "Enter an amount": string; + "Enter valid list location": string; + "Enter valid token address": string; + "Enter {0} amount": (string | string[])[]; + Error: string; + "Error connecting": string; + "Error connecting. Try refreshing the page.": string; + "Error details": string; + "Error importing list": string; + "Estimate may differ due to your wallet gas settings": string; + "Estimated network fee": string; + Etherscan: string; + Executed: string; + "Expanded results from inactive Token Lists": string; + "Expected Output": string; + "Expert Mode": string; + "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; + Expired: string; + "Explore Uniswap Analytics.": string; + "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; + "Fee Tier": string; + "Fee tier": string; + "Fetching best price...": string; + "Fetching best price\u2026": string; + For: string; + "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; + From: string; + "From (at most)": string; + "Full Range": string; + "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; + "Get support on Discord": string; + "Help Center": string; + Hide: string; + "Hide closed positions": string; + "High Price Impact": string; + "How this app uses APIs": string; + "I understand": string; + "If you purchase a token from this list, you may not be able to sell it back.": string; + Import: string; + "Import List": string; + "Import Pool": string; + "Import V2 Pool": string; + "Import at your own risk": string; + "In range": string; + "Increase Liquidity": string; + "Initial prices and pool share": string; + "Initializing...": string; + "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Install Metamask": string; + "Insufficient liquidity for this trade.": string; + "Insufficient {0}": (string | string[])[]; + "Insufficient {0} balance": (string | string[])[]; + "Interface Settings": string; + "Invalid pair": string; + "Invalid pair.": string; + "Invalid price input": string; + "Invalid range selected. The min price must be lower than the max price.": string; + "Invalid recipient": string; + Language: string; + Learn: string; + "Learn about providing liquidity": string; + "Learn more": string; + "Legal & Privacy": string; + "Light Theme": string; + Liquidity: string; + "Liquidity data not available.": string; + "Liquidity provider rewards": string; + "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + Lists: string; + Loaded: string; + Loading: string; + MAX: string; + Manage: string; + "Manage Liquidity in Rewards Pool": string; + "Manage Token Lists": string; + "Manage this pool.": string; + Max: string; + "Max Price": string; + "Max price": string; + "Max slippage": string; + "Max:": string; + "Maximum sent": string; + Menu: string; + Migrate: string; + "Migrate Liquidity to V3": string; + "Migrate V2 Liquidity": string; + "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; + "Migrate {0}/{1} liquidity to V3": (string | string[])[]; + Migrating: string; + "Min Price": string; + "Min price": string; + "Min:": string; + "Minimum received": string; + "Missing dependencies": string; + "Mock Toggle": string; + More: string; + "Network Fee": string; + "Network Warning": string; + "Network fees exceed 50% of the swap amount!": string; + "New Position": string; + "No V2 Liquidity found.": string; + "No active pools": string; + "No data": string; + "No description.": string; + "No liquidity found.": string; + "No pool found.": string; + "No proposals found.": string; + "No results found.": string; + "Not created": string; + OFF: string; + ON: string; + "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; + Off: string; + On: string; + "Once you are happy with the rate click supply to review.": string; + "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; + "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; + "Optimism Gateway": string; + "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Optimistic Etherscan": string; + "Out of range": string; + "Output is estimated.": string; + "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; + "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Output will be sent to <0>{0}": (string | string[])[]; + Owner: string; + "Participating pools": string; + Pending: string; + "Please confirm you would like to remove this list by typing REMOVE": string; + "Please connect to Layer 1 Ethereum": string; + "Please connect to a supported network in the dropdown menu or in your wallet.": string; + "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; + "Polygon Bridge": string; + Polygonscan: string; + Pool: string; + "Pool Found!": string; + "Pool Rate": string; + "Pool rate": string; + "Pool tokens in rewards pool:": string; + "Pooled {0}:": (string | string[])[]; + "Pools Overview": string; + Preview: string; + Price: string; + "Price Difference:": string; + "Price Impact": string; + "Price Impact Too High": string; + "Price Updated": string; + "Price impact": string; + "Price range": string; + "Price updated": string; + "Price:": string; + "Prices and pool share": string; + Proposal: string; + "Proposal Submitted": string; + "Proposal Title": string; + Proposals: string; + "Proposals submitted by community members will appear here.": string; + "Proposed Action": string; + Proposer: string; + "Protocol Disclaimer": string; + Queued: string; + Rates: string; + "Read more about UNI": string; + "Read more about Uniswap governance": string; + "Read more about providing liquidity": string; + "Read more about unsupported assets": string; + "Recent Transactions": string; + "Recent transactions": string; + Recipient: string; + "Reload the page": string; + Remove: string; + "Remove <0/> and <1/>": string; + "Remove Amount": string; + "Remove Delegate": string; + "Remove Liquidity": string; + "Remove list": string; + "Removing {0} {1} and {2} {3}": (string | string[])[]; + "Removing {0} {1} and{2} {3}": (string | string[])[]; + "Request Features": string; + Reset: string; + Return: string; + "Review swap": string; + "Search by token name or address": string; + "Search name or paste address": string; + "Select Pair": string; + "Select a network": string; + "Select a token": string; + "Select a token to find your v2 liquidity.": string; + "Select an action": string; + "Selected Range": string; + Self: string; + "Self Delegate": string; + "Set Price Range": string; + "Set Starting Price": string; + Settings: string; + "Share of Pool": string; + "Share of Pool:": string; + "Show Portis": string; + "Show closed positions": string; + Simple: string; + "Slippage tolerance": string; + "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; + "Something went wrong": string; + "Something went wrong.": string; + "Step 1. Get UNI-V2 Liquidity tokens": string; + "Submit new proposal": string; + "Submitting Proposal": string; + "Submitting Vote": string; + Succeeded: string; + Success: string; + Supply: string; + "Supplying {0} {1} and {2} {3}": (string | string[])[]; + Swap: string; + "Swap <0/> for exactly <1/>": string; + "Swap Anyway": string; + "Swap details": string; + "Swap exactly <0/> for <1/>": string; + "Swap failed: {0}": (string | string[])[]; + "Swap summary": string; + "Swapping {0} {1} for {2} {3}": (string | string[])[]; + "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; + "Tell us what you think \u2197": string; + "Thanks for being part of the Uniswap community <0/>": string; + "The % you will earn in fees.": string; + "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; + "The app fetches blockchain data from The Graph\u2019s hosted service.": string; + "The app fetches on-chain data and constructs contract calls with an Infura API.": string; + "The app fetches the optimal trade route from a Uniswap Labs server.": string; + "The app logs anonymized usage statistics in order to improve over time.": string; + "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; + "The cost of sending this transaction is more than half of the value of the input amount.": string; + "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; + "The estimated difference between the USD values of input and output amounts.": string; + "The input token cannot be transferred. There may be an issue with the input token.": string; + "The market price is outside your specified price range. Single-asset deposit only.": string; + "The most recent block number on this network. Prices update on every block.": string; + "The output token cannot be transferred. There may be an issue with the output token.": string; + "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; + "The price of this pool is within your selected range. Your position is currently earning fees.": string; + "The ratio of tokens you add will set the price of this pool.": string; + "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; + "There is no liquidity data.": string; + "This app uses the following third-party APIs:": string; + "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; + "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; + "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; + "This token is not supported in the Uniswap Labs app": string; + "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; + "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; + "Tip: Custom tokens are stored locally in your browser": string; + To: string; + "To (at least)": string; + "Token not supported": string; + Tokens: string; + "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; + "Top pools": string; + "Total deposited": string; + "Total deposits": string; + "Trade Route": string; + Trading: string; + "Transaction Settings": string; + "Transaction Submitted": string; + "Transaction completed in": string; + "Transaction deadline": string; + "Transaction pending": string; + "Transaction rejected.": string; + "Transaction submitted": string; + "Transfer Token": string; + "Try Again": string; + "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Turn On Expert Mode": string; + "UNI has arrived": string; + "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; + "UNI {0}/{1} Burned": (string | string[])[]; + "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; + "UNI-V2 {0}-{1}": (string | string[])[]; + "Unclaimed UNI": string; + "Unclaimed fees": string; + Undetermined: string; + "Unexpected error. Could not estimate gas for the swap.": string; + "Unexpected issue with estimating the gas. Please try again.": string; + "Uniswap Governance": string; + "Uniswap Labs' Terms of Service": string; + "Uniswap available in: <0>{0}": (string | string[])[]; + "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; + "Uniswap liquidity mining": string; + "Uniswap migration contract\u2197": string; + "Unknown Source": string; + "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; + "Unlock Votes": string; + "Unlock Voting": string; + "Unlocking Votes": string; + "Unsupported Asset": string; + "Unsupported Assets": string; + "Unsupported network\u2013switch to another to trade.": string; + Untitled: string; + Unwrap: string; + "Unwrap <0/> to {0}": (string | string[])[]; + "Update Delegation": string; + "Update list": string; + "Use the Uniswap Labs API to get faster quotes.": string; + User: string; + "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; + "V2 liquidity": string; + "V3 {0} Price:": (string | string[])[]; + "View accrued fees and analytics<0>\u2197": string; + "View list": string; + "View on Etherscan": string; + "View on Explorer": string; + "View transaction on Explorer": string; + Vote: string; + "Vote Against": string; + "Vote For": string; + "Vote against proposal {proposalId}": (string | string[])[]; + "Vote against proposal {proposalKey}": (string | string[])[]; + "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote for proposal {proposalId}": (string | string[])[]; + "Vote for proposal {proposalKey}": (string | string[])[]; + "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote to abstain on proposal {proposalId}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Voting ended {0}": (string | string[])[]; + "Voting ends approximately {0}": (string | string[])[]; + "Voting starts approximately {0}": (string | string[])[]; + "Waiting For Confirmation": string; + "Wallet Address or ENS name": string; + "Weekly Rewards": string; + "Welcome to team Unicorn :)": string; + "When you claim without withdrawing your liquidity remains in the mining pool.": string; + "When you withdraw, the contract will automagically claim UNI on your behalf!": string; + "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; + Withdraw: string; + "Withdraw & Claim": string; + "Withdraw deposited liquidity": string; + "Withdrawing {0} UNI-V2": (string | string[])[]; + "Withdrew UNI-V2!": string; + Wrap: string; + "Wrap <0/> to {0}": (string | string[])[]; + "Wrong Network": string; + "You already have an active or pending proposal": string; + "You are creating a pool": string; + "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; + "You are the first liquidity provider.": string; + "You can either vote on each proposal yourself or delegate your votes to a third party.": string; + "You can now trade {0}": (string | string[])[]; + "You don't have enough votes to submit a proposal": string; + "You don\u2019t have liquidity in this pool yet.": string; + "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; + "You may have lost your network connection.": string; + "You might consider waiting until the network fees go down to complete this transaction.": string; + "You must connect an account.": string; + "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; + "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; + "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; + "You will also collect fees earned from this position.": string; + "You will receive": string; + "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; + "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; + "Your V2 liquidity": string; + "Your active V3 liquidity positions will appear here.": string; + "Your liquidity deposits": string; + "Your pool share:": string; + "Your position": string; + "Your position has 0 liquidity, and is not earning fees.": string; + "Your position will appear here.": string; + "Your position will be 100% composed of {0} at this price": (string | string[])[]; + "Your position will be 100% {0} at this price.": (string | string[])[]; + "Your position will not earn fees or be used in trades until the market price moves into your range.": string; + "Your positions": string; + "Your rate": string; + "Your total pool tokens:": string; + "Your transaction cost will be much higher as it includes the gas to create the pool.": string; + "Your transaction may be frontrun": string; + "Your transaction may fail": string; + "Your transaction will revert if it has been pending for longer than this period of time.": string; + "Your transaction will revert if it is pending for more than this period of time.": string; + "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; + "Your transactions will appear here...": string; + "Your unclaimed UNI": string; + "after slippage": string; + confirm: string; + "for {0}": (string | string[])[]; + gwei: string; + "has socks emoji": string; + "here.": string; + "https:// or ipfs:// or ENS name": string; + minutes: string; + "via {0}": (string | string[])[]; + "via {0} token list": (string | string[])[]; + "{0, plural, one {Import token} other {Import tokens}}": (string | { + one: string; + other: string; + })[][]; + "{0}": string[][]; + "{0} %": (string | string[])[]; + "{0} <0/> per <1/>": (string | string[])[]; + "{0} Custom Tokens": (string | string[])[]; + "{0} Deposited": (string | string[])[]; + "{0} ETH": (string | string[])[]; + "{0} Fees Earned:": (string | string[])[]; + "{0} Pending": (string | string[])[]; + "{0} UNI": (string | string[])[]; + "{0} UNI / week": (string | string[])[]; + "{0} UNI-V2": (string | string[])[]; + "{0} UNI-V2 LP tokens available": (string | string[])[]; + "{0} Votes": (string | string[])[]; + "{0} per {1}": (string | string[])[]; + "{0} tokens": (string | string[])[]; + "{0} {1} Price:": (string | string[])[]; + "{0} {nativeCurrencySymbol}": (string | string[])[]; + "{0} \u2022 Added by user": (string | string[])[]; + "{0}%": (string | string[])[]; + "{0}% fee tier": (string | string[])[]; + "{0}% pool": (string | string[])[]; + "{0}% select": (string | string[])[]; + "{0}-{1} Liquidity Mining": (string | string[])[]; + "{0}/{1} LP NFT": (string | string[])[]; + "{0}/{1} LP Tokens": (string | string[])[]; + "{SOCKS_AMOUNT} UNI": (string | string[])[]; + "{USER_AMOUNT} UNI": (string | string[])[]; + "{activeTokensOnThisChain} tokens": (string | string[])[]; + "{integrator} fee": (string | string[])[]; + "{label} token bridge": (string | string[])[]; + "{min}m {sec}s": (string | string[])[]; + "{percentForSlider}%": (string | string[])[]; + "{sec}s": (string | string[])[]; + "{tokenB} per {tokenA}": (string | string[])[]; + "\u2190 Back to Pools Overview": string; +}; diff --git a/dist2/types/locales/he-IL.d.ts b/dist2/types/locales/he-IL.d.ts new file mode 100644 index 00000000000..75120e0e5c9 --- /dev/null +++ b/dist2/types/locales/he-IL.d.ts @@ -0,0 +1,593 @@ +export const messages: { + "$-": string; + "$<0/>": string; + "${0}": (string | string[])[]; + "(${0})": (string | string[])[]; + "(View on Explorer)": string; + "(clear all)": string; + "(edit)": string; + "- Remove recipient": string; + "0 UNI / week": string; + "25%": string; + "50%": string; + "75%": string; + "<0/> All Proposals": string; + "<0/> Votes": string; + "<0>Account analytics and accrued fees<1> \u2197 ": string; + "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; + "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; + "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; + "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; + "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; + "<0>Unlock voting to prepare for the next proposal.": string; + "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; + "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; + About: string; + Accept: string; + Account: string; + Active: string; + Add: string; + "Add <0/> and <1/> to Uniswap V2": string; + "Add Delegate +": string; + "Add Liquidity": string; + "Add V2 Liquidity": string; + "Add liquidity.": string; + "Add more liquidity": string; + "Add {0} to Metamask <0/>": (string | string[])[]; + "Add {0}-{1} liquidity": (string | string[])[]; + "Add {0}/{1} V3 liquidity": (string | string[])[]; + "Added {0}": (string | string[])[]; + "Address has no available claim": string; + Against: string; + "Allow LP token migration": string; + "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; + "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; + Allowed: string; + Amount: string; + "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Approval pending <0/>": string; + Approve: string; + "Approve Token": string; + "Approve {0}": (string | string[])[]; + "Approve {0} first": (string | string[])[]; + Approved: string; + Approving: string; + "Approving {0}": (string | string[])[]; + Arbiscan: string; + "Arbitrum Bridge": string; + "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Are you sure?": string; + "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; + "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; + Auto: string; + "Auto Router API": string; + "Available to deposit: {0}": (string | string[])[]; + "Balance: {0}": (string | string[])[]; + "Best for exotic pairs.": string; + "Best for most pairs.": string; + "Best for stable pairs.": string; + "Best for very stable pairs.": string; + "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; + "Blocked address": string; + Bridge: string; + "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; + "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; + Canceled: string; + Change: string; + Charts: string; + "Check network status": string; + "Check out our v3 LP walkthrough and migration guides.": string; + Claim: string; + "Claim <0/> for {0}": (string | string[])[]; + "Claim UNI": string; + "Claim UNI Token": string; + "Claim UNI reward for {0}": (string | string[])[]; + "Claim fees": string; + "Claim your UNI tokens": string; + Claimed: string; + "Claimed UNI!": string; + "Claimed!": string; + Claiming: string; + "Claiming UNI": string; + "Claiming {0} UNI": (string | string[])[]; + "Clear All": string; + "Clear all": string; + Close: string; + Closed: string; + Collect: string; + "Collect as WETH": string; + "Collect fees": string; + "Collect {0}/{1} fees": (string | string[])[]; + Collected: string; + Collecting: string; + "Collecting fees": string; + "Collecting fees will withdraw currently available fees for you.": string; + Confirm: string; + "Confirm Supply": string; + "Confirm Swap": string; + "Confirm swap": string; + "Confirm this transaction in your wallet": string; + "Confirm transaction in wallet": string; + "Connect Wallet": string; + "Connect a wallet": string; + "Connect to a wallet to find pools": string; + "Connect to a wallet to view your V2 liquidity.": string; + "Connect to a wallet to view your liquidity.": string; + "Connect wallet to swap": string; + "Connected with {name}": (string | string[])[]; + Copied: string; + "Copy Address": string; + "Create Pool & Supply": string; + "Create Proposal": string; + "Create a pair": string; + "Create a pool": string; + "Create an issue on GitHub": string; + "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; + "Create pool.": string; + "Create {0}/{1} V3 pool": (string | string[])[]; + "Current price": string; + "Current {0} Price:": (string | string[])[]; + Custom: string; + "Dark Theme": string; + Defeated: string; + "Delegate Votes": string; + "Delegate voting power to {0}": (string | string[])[]; + "Delegated to:": string; + "Delegating votes": string; + Deposit: string; + "Deposit Amounts": string; + "Deposit UNI-V2 LP Tokens": string; + "Deposit liquidity": string; + "Deposit tokens to the {label} network.": (string | string[])[]; + "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; + "Deposited liquidity:": string; + "Deposited {0} UNI-V2": (string | string[])[]; + "Depositing Liquidity": string; + Description: string; + Detailed: string; + Details: string; + Disconnect: string; + Discord: string; + Dismiss: string; + Docs: string; + "Don\u2019t see one of your v2 positions? <0>Import it.": string; + "Earned UNI tokens represent voting shares in Uniswap governance.": string; + Edit: string; + "Efficiency Comparison": string; + "Enter a percent": string; + "Enter a recipient": string; + "Enter a valid slippage percentage": string; + "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; + "Enter an amount": string; + "Enter valid list location": string; + "Enter valid token address": string; + "Enter {0} amount": (string | string[])[]; + Error: string; + "Error connecting": string; + "Error connecting. Try refreshing the page.": string; + "Error details": string; + "Error importing list": string; + "Estimate may differ due to your wallet gas settings": string; + "Estimated network fee": string; + Etherscan: string; + Executed: string; + "Expanded results from inactive Token Lists": string; + "Expected Output": string; + "Expert Mode": string; + "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; + Expired: string; + "Explore Uniswap Analytics.": string; + "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; + "Fee Tier": string; + "Fee tier": string; + "Fetching best price...": string; + "Fetching best price\u2026": string; + For: string; + "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; + From: string; + "From (at most)": string; + "Full Range": string; + "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; + "Get support on Discord": string; + "Help Center": string; + Hide: string; + "Hide closed positions": string; + "High Price Impact": string; + "How this app uses APIs": string; + "I understand": string; + "If you purchase a token from this list, you may not be able to sell it back.": string; + Import: string; + "Import List": string; + "Import Pool": string; + "Import V2 Pool": string; + "Import at your own risk": string; + "In range": string; + "Increase Liquidity": string; + "Initial prices and pool share": string; + "Initializing...": string; + "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Install Metamask": string; + "Insufficient liquidity for this trade.": string; + "Insufficient {0}": (string | string[])[]; + "Insufficient {0} balance": (string | string[])[]; + "Interface Settings": string; + "Invalid pair": string; + "Invalid pair.": string; + "Invalid price input": string; + "Invalid range selected. The min price must be lower than the max price.": string; + "Invalid recipient": string; + Language: string; + Learn: string; + "Learn about providing liquidity": string; + "Learn more": string; + "Legal & Privacy": string; + "Light Theme": string; + Liquidity: string; + "Liquidity data not available.": string; + "Liquidity provider rewards": string; + "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + Lists: string; + Loaded: string; + Loading: string; + MAX: string; + Manage: string; + "Manage Liquidity in Rewards Pool": string; + "Manage Token Lists": string; + "Manage this pool.": string; + Max: string; + "Max Price": string; + "Max price": string; + "Max slippage": string; + "Max:": string; + "Maximum sent": string; + Menu: string; + Migrate: string; + "Migrate Liquidity to V3": string; + "Migrate V2 Liquidity": string; + "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; + "Migrate {0}/{1} liquidity to V3": (string | string[])[]; + Migrating: string; + "Min Price": string; + "Min price": string; + "Min:": string; + "Minimum received": string; + "Missing dependencies": string; + "Mock Toggle": string; + More: string; + "Network Fee": string; + "Network Warning": string; + "Network fees exceed 50% of the swap amount!": string; + "New Position": string; + "No V2 Liquidity found.": string; + "No active pools": string; + "No data": string; + "No description.": string; + "No liquidity found.": string; + "No pool found.": string; + "No proposals found.": string; + "No results found.": string; + "Not created": string; + OFF: string; + ON: string; + "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; + Off: string; + On: string; + "Once you are happy with the rate click supply to review.": string; + "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; + "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; + "Optimism Gateway": string; + "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Optimistic Etherscan": string; + "Out of range": string; + "Output is estimated.": string; + "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; + "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Output will be sent to <0>{0}": (string | string[])[]; + Owner: string; + "Participating pools": string; + Pending: string; + "Please confirm you would like to remove this list by typing REMOVE": string; + "Please connect to Layer 1 Ethereum": string; + "Please connect to a supported network in the dropdown menu or in your wallet.": string; + "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; + "Polygon Bridge": string; + Polygonscan: string; + Pool: string; + "Pool Found!": string; + "Pool Rate": string; + "Pool rate": string; + "Pool tokens in rewards pool:": string; + "Pooled {0}:": (string | string[])[]; + "Pools Overview": string; + Preview: string; + Price: string; + "Price Difference:": string; + "Price Impact": string; + "Price Impact Too High": string; + "Price Updated": string; + "Price impact": string; + "Price range": string; + "Price updated": string; + "Price:": string; + "Prices and pool share": string; + Proposal: string; + "Proposal Submitted": string; + "Proposal Title": string; + Proposals: string; + "Proposals submitted by community members will appear here.": string; + "Proposed Action": string; + Proposer: string; + "Protocol Disclaimer": string; + Queued: string; + Rates: string; + "Read more about UNI": string; + "Read more about Uniswap governance": string; + "Read more about providing liquidity": string; + "Read more about unsupported assets": string; + "Recent Transactions": string; + "Recent transactions": string; + Recipient: string; + "Reload the page": string; + Remove: string; + "Remove <0/> and <1/>": string; + "Remove Amount": string; + "Remove Delegate": string; + "Remove Liquidity": string; + "Remove list": string; + "Removing {0} {1} and {2} {3}": (string | string[])[]; + "Removing {0} {1} and{2} {3}": (string | string[])[]; + "Request Features": string; + Reset: string; + Return: string; + "Review swap": string; + "Search by token name or address": string; + "Search name or paste address": string; + "Select Pair": string; + "Select a network": string; + "Select a token": string; + "Select a token to find your v2 liquidity.": string; + "Select an action": string; + "Selected Range": string; + Self: string; + "Self Delegate": string; + "Set Price Range": string; + "Set Starting Price": string; + Settings: string; + "Share of Pool": string; + "Share of Pool:": string; + "Show Portis": string; + "Show closed positions": string; + Simple: string; + "Slippage tolerance": string; + "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; + "Something went wrong": string; + "Something went wrong.": string; + "Step 1. Get UNI-V2 Liquidity tokens": string; + "Submit new proposal": string; + "Submitting Proposal": string; + "Submitting Vote": string; + Succeeded: string; + Success: string; + Supply: string; + "Supplying {0} {1} and {2} {3}": (string | string[])[]; + Swap: string; + "Swap <0/> for exactly <1/>": string; + "Swap Anyway": string; + "Swap details": string; + "Swap exactly <0/> for <1/>": string; + "Swap failed: {0}": (string | string[])[]; + "Swap summary": string; + "Swapping {0} {1} for {2} {3}": (string | string[])[]; + "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; + "Tell us what you think \u2197": string; + "Thanks for being part of the Uniswap community <0/>": string; + "The % you will earn in fees.": string; + "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; + "The app fetches blockchain data from The Graph\u2019s hosted service.": string; + "The app fetches on-chain data and constructs contract calls with an Infura API.": string; + "The app fetches the optimal trade route from a Uniswap Labs server.": string; + "The app logs anonymized usage statistics in order to improve over time.": string; + "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; + "The cost of sending this transaction is more than half of the value of the input amount.": string; + "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; + "The estimated difference between the USD values of input and output amounts.": string; + "The input token cannot be transferred. There may be an issue with the input token.": string; + "The market price is outside your specified price range. Single-asset deposit only.": string; + "The most recent block number on this network. Prices update on every block.": string; + "The output token cannot be transferred. There may be an issue with the output token.": string; + "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; + "The price of this pool is within your selected range. Your position is currently earning fees.": string; + "The ratio of tokens you add will set the price of this pool.": string; + "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; + "There is no liquidity data.": string; + "This app uses the following third-party APIs:": string; + "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; + "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; + "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; + "This token is not supported in the Uniswap Labs app": string; + "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; + "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; + "Tip: Custom tokens are stored locally in your browser": string; + To: string; + "To (at least)": string; + "Token not supported": string; + Tokens: string; + "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; + "Top pools": string; + "Total deposited": string; + "Total deposits": string; + "Trade Route": string; + Trading: string; + "Transaction Settings": string; + "Transaction Submitted": string; + "Transaction completed in": string; + "Transaction deadline": string; + "Transaction pending": string; + "Transaction rejected.": string; + "Transaction submitted": string; + "Transfer Token": string; + "Try Again": string; + "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Turn On Expert Mode": string; + "UNI has arrived": string; + "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; + "UNI {0}/{1} Burned": (string | string[])[]; + "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; + "UNI-V2 {0}-{1}": (string | string[])[]; + "Unclaimed UNI": string; + "Unclaimed fees": string; + Undetermined: string; + "Unexpected error. Could not estimate gas for the swap.": string; + "Unexpected issue with estimating the gas. Please try again.": string; + "Uniswap Governance": string; + "Uniswap Labs' Terms of Service": string; + "Uniswap available in: <0>{0}": (string | string[])[]; + "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; + "Uniswap liquidity mining": string; + "Uniswap migration contract\u2197": string; + "Unknown Source": string; + "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; + "Unlock Votes": string; + "Unlock Voting": string; + "Unlocking Votes": string; + "Unsupported Asset": string; + "Unsupported Assets": string; + "Unsupported network\u2013switch to another to trade.": string; + Untitled: string; + Unwrap: string; + "Unwrap <0/> to {0}": (string | string[])[]; + "Update Delegation": string; + "Update list": string; + "Use the Uniswap Labs API to get faster quotes.": string; + User: string; + "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; + "V2 liquidity": string; + "V3 {0} Price:": (string | string[])[]; + "View accrued fees and analytics<0>\u2197": string; + "View list": string; + "View on Etherscan": string; + "View on Explorer": string; + "View transaction on Explorer": string; + Vote: string; + "Vote Against": string; + "Vote For": string; + "Vote against proposal {proposalId}": (string | string[])[]; + "Vote against proposal {proposalKey}": (string | string[])[]; + "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote for proposal {proposalId}": (string | string[])[]; + "Vote for proposal {proposalKey}": (string | string[])[]; + "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote to abstain on proposal {proposalId}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Voting ended {0}": (string | string[])[]; + "Voting ends approximately {0}": (string | string[])[]; + "Voting starts approximately {0}": (string | string[])[]; + "Waiting For Confirmation": string; + "Wallet Address or ENS name": string; + "Weekly Rewards": string; + "Welcome to team Unicorn :)": string; + "When you claim without withdrawing your liquidity remains in the mining pool.": string; + "When you withdraw, the contract will automagically claim UNI on your behalf!": string; + "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; + Withdraw: string; + "Withdraw & Claim": string; + "Withdraw deposited liquidity": string; + "Withdrawing {0} UNI-V2": (string | string[])[]; + "Withdrew UNI-V2!": string; + Wrap: string; + "Wrap <0/> to {0}": (string | string[])[]; + "Wrong Network": string; + "You already have an active or pending proposal": string; + "You are creating a pool": string; + "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; + "You are the first liquidity provider.": string; + "You can either vote on each proposal yourself or delegate your votes to a third party.": string; + "You can now trade {0}": (string | string[])[]; + "You don't have enough votes to submit a proposal": string; + "You don\u2019t have liquidity in this pool yet.": string; + "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; + "You may have lost your network connection.": string; + "You might consider waiting until the network fees go down to complete this transaction.": string; + "You must connect an account.": string; + "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; + "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; + "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; + "You will also collect fees earned from this position.": string; + "You will receive": string; + "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; + "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; + "Your V2 liquidity": string; + "Your active V3 liquidity positions will appear here.": string; + "Your liquidity deposits": string; + "Your pool share:": string; + "Your position": string; + "Your position has 0 liquidity, and is not earning fees.": string; + "Your position will appear here.": string; + "Your position will be 100% composed of {0} at this price": (string | string[])[]; + "Your position will be 100% {0} at this price.": (string | string[])[]; + "Your position will not earn fees or be used in trades until the market price moves into your range.": string; + "Your positions": string; + "Your rate": string; + "Your total pool tokens:": string; + "Your transaction cost will be much higher as it includes the gas to create the pool.": string; + "Your transaction may be frontrun": string; + "Your transaction may fail": string; + "Your transaction will revert if it has been pending for longer than this period of time.": string; + "Your transaction will revert if it is pending for more than this period of time.": string; + "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; + "Your transactions will appear here...": string; + "Your unclaimed UNI": string; + "after slippage": string; + confirm: string; + "for {0}": (string | string[])[]; + gwei: string; + "has socks emoji": string; + "here.": string; + "https:// or ipfs:// or ENS name": string; + minutes: string; + "via {0}": (string | string[])[]; + "via {0} token list": (string | string[])[]; + "{0, plural, one {Import token} other {Import tokens}}": (string | { + one: string; + other: string; + })[][]; + "{0}": string[][]; + "{0} %": (string | string[])[]; + "{0} <0/> per <1/>": (string | string[])[]; + "{0} Custom Tokens": (string | string[])[]; + "{0} Deposited": (string | string[])[]; + "{0} ETH": (string | string[])[]; + "{0} Fees Earned:": (string | string[])[]; + "{0} Pending": (string | string[])[]; + "{0} UNI": (string | string[])[]; + "{0} UNI / week": (string | string[])[]; + "{0} UNI-V2": (string | string[])[]; + "{0} UNI-V2 LP tokens available": (string | string[])[]; + "{0} Votes": (string | string[])[]; + "{0} per {1}": (string | string[])[]; + "{0} tokens": (string | string[])[]; + "{0} {1} Price:": (string | string[])[]; + "{0} {nativeCurrencySymbol}": (string | string[])[]; + "{0} \u2022 Added by user": (string | string[])[]; + "{0}%": (string | string[])[]; + "{0}% fee tier": (string | string[])[]; + "{0}% pool": (string | string[])[]; + "{0}% select": (string | string[])[]; + "{0}-{1} Liquidity Mining": (string | string[])[]; + "{0}/{1} LP NFT": (string | string[])[]; + "{0}/{1} LP Tokens": (string | string[])[]; + "{SOCKS_AMOUNT} UNI": (string | string[])[]; + "{USER_AMOUNT} UNI": (string | string[])[]; + "{activeTokensOnThisChain} tokens": (string | string[])[]; + "{integrator} fee": (string | string[])[]; + "{label} token bridge": (string | string[])[]; + "{min}m {sec}s": (string | string[])[]; + "{percentForSlider}%": (string | string[])[]; + "{sec}s": (string | string[])[]; + "{tokenB} per {tokenA}": (string | string[])[]; + "\u2190 Back to Pools Overview": string; +}; diff --git a/dist2/types/locales/hu-HU.d.ts b/dist2/types/locales/hu-HU.d.ts new file mode 100644 index 00000000000..8d764f84636 --- /dev/null +++ b/dist2/types/locales/hu-HU.d.ts @@ -0,0 +1,593 @@ +export const messages: { + "$-": string; + "$<0/>": string; + "${0}": (string | string[])[]; + "(${0})": (string | string[])[]; + "(View on Explorer)": string; + "(clear all)": string; + "(edit)": string; + "- Remove recipient": string; + "0 UNI / week": string; + "25%": string; + "50%": string; + "75%": string; + "<0/> All Proposals": string; + "<0/> Votes": string; + "<0>Account analytics and accrued fees<1> \u2197 ": string; + "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; + "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; + "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; + "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; + "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; + "<0>Unlock voting to prepare for the next proposal.": string; + "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; + "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; + About: string; + Accept: string; + Account: string; + Active: string; + Add: string; + "Add <0/> and <1/> to Uniswap V2": string; + "Add Delegate +": string; + "Add Liquidity": string; + "Add V2 Liquidity": string; + "Add liquidity.": string; + "Add more liquidity": string; + "Add {0} to Metamask <0/>": (string | string[])[]; + "Add {0}-{1} liquidity": (string | string[])[]; + "Add {0}/{1} V3 liquidity": (string | string[])[]; + "Added {0}": (string | string[])[]; + "Address has no available claim": string; + Against: string; + "Allow LP token migration": string; + "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; + "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; + Allowed: string; + Amount: string; + "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Approval pending <0/>": string; + Approve: string; + "Approve Token": string; + "Approve {0}": (string | string[])[]; + "Approve {0} first": (string | string[])[]; + Approved: string; + Approving: string; + "Approving {0}": (string | string[])[]; + Arbiscan: string; + "Arbitrum Bridge": string; + "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Are you sure?": string; + "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; + "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; + Auto: string; + "Auto Router API": string; + "Available to deposit: {0}": (string | string[])[]; + "Balance: {0}": (string | string[])[]; + "Best for exotic pairs.": string; + "Best for most pairs.": string; + "Best for stable pairs.": string; + "Best for very stable pairs.": string; + "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; + "Blocked address": string; + Bridge: string; + "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; + "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; + Canceled: string; + Change: string; + Charts: string; + "Check network status": string; + "Check out our v3 LP walkthrough and migration guides.": string; + Claim: string; + "Claim <0/> for {0}": (string | string[])[]; + "Claim UNI": string; + "Claim UNI Token": string; + "Claim UNI reward for {0}": (string | string[])[]; + "Claim fees": string; + "Claim your UNI tokens": string; + Claimed: string; + "Claimed UNI!": string; + "Claimed!": string; + Claiming: string; + "Claiming UNI": string; + "Claiming {0} UNI": (string | string[])[]; + "Clear All": string; + "Clear all": string; + Close: string; + Closed: string; + Collect: string; + "Collect as WETH": string; + "Collect fees": string; + "Collect {0}/{1} fees": (string | string[])[]; + Collected: string; + Collecting: string; + "Collecting fees": string; + "Collecting fees will withdraw currently available fees for you.": string; + Confirm: string; + "Confirm Supply": string; + "Confirm Swap": string; + "Confirm swap": string; + "Confirm this transaction in your wallet": string; + "Confirm transaction in wallet": string; + "Connect Wallet": string; + "Connect a wallet": string; + "Connect to a wallet to find pools": string; + "Connect to a wallet to view your V2 liquidity.": string; + "Connect to a wallet to view your liquidity.": string; + "Connect wallet to swap": string; + "Connected with {name}": (string | string[])[]; + Copied: string; + "Copy Address": string; + "Create Pool & Supply": string; + "Create Proposal": string; + "Create a pair": string; + "Create a pool": string; + "Create an issue on GitHub": string; + "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; + "Create pool.": string; + "Create {0}/{1} V3 pool": (string | string[])[]; + "Current price": string; + "Current {0} Price:": (string | string[])[]; + Custom: string; + "Dark Theme": string; + Defeated: string; + "Delegate Votes": string; + "Delegate voting power to {0}": (string | string[])[]; + "Delegated to:": string; + "Delegating votes": string; + Deposit: string; + "Deposit Amounts": string; + "Deposit UNI-V2 LP Tokens": string; + "Deposit liquidity": string; + "Deposit tokens to the {label} network.": (string | string[])[]; + "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; + "Deposited liquidity:": string; + "Deposited {0} UNI-V2": (string | string[])[]; + "Depositing Liquidity": string; + Description: string; + Detailed: string; + Details: string; + Disconnect: string; + Discord: string; + Dismiss: string; + Docs: string; + "Don\u2019t see one of your v2 positions? <0>Import it.": string; + "Earned UNI tokens represent voting shares in Uniswap governance.": string; + Edit: string; + "Efficiency Comparison": string; + "Enter a percent": string; + "Enter a recipient": string; + "Enter a valid slippage percentage": string; + "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; + "Enter an amount": string; + "Enter valid list location": string; + "Enter valid token address": string; + "Enter {0} amount": (string | string[])[]; + Error: string; + "Error connecting": string; + "Error connecting. Try refreshing the page.": string; + "Error details": string; + "Error importing list": string; + "Estimate may differ due to your wallet gas settings": string; + "Estimated network fee": string; + Etherscan: string; + Executed: string; + "Expanded results from inactive Token Lists": string; + "Expected Output": string; + "Expert Mode": string; + "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; + Expired: string; + "Explore Uniswap Analytics.": string; + "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; + "Fee Tier": string; + "Fee tier": string; + "Fetching best price...": string; + "Fetching best price\u2026": string; + For: string; + "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; + From: string; + "From (at most)": string; + "Full Range": string; + "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; + "Get support on Discord": string; + "Help Center": string; + Hide: string; + "Hide closed positions": string; + "High Price Impact": string; + "How this app uses APIs": string; + "I understand": string; + "If you purchase a token from this list, you may not be able to sell it back.": string; + Import: string; + "Import List": string; + "Import Pool": string; + "Import V2 Pool": string; + "Import at your own risk": string; + "In range": string; + "Increase Liquidity": string; + "Initial prices and pool share": string; + "Initializing...": string; + "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Install Metamask": string; + "Insufficient liquidity for this trade.": string; + "Insufficient {0}": (string | string[])[]; + "Insufficient {0} balance": (string | string[])[]; + "Interface Settings": string; + "Invalid pair": string; + "Invalid pair.": string; + "Invalid price input": string; + "Invalid range selected. The min price must be lower than the max price.": string; + "Invalid recipient": string; + Language: string; + Learn: string; + "Learn about providing liquidity": string; + "Learn more": string; + "Legal & Privacy": string; + "Light Theme": string; + Liquidity: string; + "Liquidity data not available.": string; + "Liquidity provider rewards": string; + "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + Lists: string; + Loaded: string; + Loading: string; + MAX: string; + Manage: string; + "Manage Liquidity in Rewards Pool": string; + "Manage Token Lists": string; + "Manage this pool.": string; + Max: string; + "Max Price": string; + "Max price": string; + "Max slippage": string; + "Max:": string; + "Maximum sent": string; + Menu: string; + Migrate: string; + "Migrate Liquidity to V3": string; + "Migrate V2 Liquidity": string; + "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; + "Migrate {0}/{1} liquidity to V3": (string | string[])[]; + Migrating: string; + "Min Price": string; + "Min price": string; + "Min:": string; + "Minimum received": string; + "Missing dependencies": string; + "Mock Toggle": string; + More: string; + "Network Fee": string; + "Network Warning": string; + "Network fees exceed 50% of the swap amount!": string; + "New Position": string; + "No V2 Liquidity found.": string; + "No active pools": string; + "No data": string; + "No description.": string; + "No liquidity found.": string; + "No pool found.": string; + "No proposals found.": string; + "No results found.": string; + "Not created": string; + OFF: string; + ON: string; + "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; + Off: string; + On: string; + "Once you are happy with the rate click supply to review.": string; + "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; + "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; + "Optimism Gateway": string; + "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Optimistic Etherscan": string; + "Out of range": string; + "Output is estimated.": string; + "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; + "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Output will be sent to <0>{0}": (string | string[])[]; + Owner: string; + "Participating pools": string; + Pending: string; + "Please confirm you would like to remove this list by typing REMOVE": string; + "Please connect to Layer 1 Ethereum": string; + "Please connect to a supported network in the dropdown menu or in your wallet.": string; + "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; + "Polygon Bridge": string; + Polygonscan: string; + Pool: string; + "Pool Found!": string; + "Pool Rate": string; + "Pool rate": string; + "Pool tokens in rewards pool:": string; + "Pooled {0}:": (string | string[])[]; + "Pools Overview": string; + Preview: string; + Price: string; + "Price Difference:": string; + "Price Impact": string; + "Price Impact Too High": string; + "Price Updated": string; + "Price impact": string; + "Price range": string; + "Price updated": string; + "Price:": string; + "Prices and pool share": string; + Proposal: string; + "Proposal Submitted": string; + "Proposal Title": string; + Proposals: string; + "Proposals submitted by community members will appear here.": string; + "Proposed Action": string; + Proposer: string; + "Protocol Disclaimer": string; + Queued: string; + Rates: string; + "Read more about UNI": string; + "Read more about Uniswap governance": string; + "Read more about providing liquidity": string; + "Read more about unsupported assets": string; + "Recent Transactions": string; + "Recent transactions": string; + Recipient: string; + "Reload the page": string; + Remove: string; + "Remove <0/> and <1/>": string; + "Remove Amount": string; + "Remove Delegate": string; + "Remove Liquidity": string; + "Remove list": string; + "Removing {0} {1} and {2} {3}": (string | string[])[]; + "Removing {0} {1} and{2} {3}": (string | string[])[]; + "Request Features": string; + Reset: string; + Return: string; + "Review swap": string; + "Search by token name or address": string; + "Search name or paste address": string; + "Select Pair": string; + "Select a network": string; + "Select a token": string; + "Select a token to find your v2 liquidity.": string; + "Select an action": string; + "Selected Range": string; + Self: string; + "Self Delegate": string; + "Set Price Range": string; + "Set Starting Price": string; + Settings: string; + "Share of Pool": string; + "Share of Pool:": string; + "Show Portis": string; + "Show closed positions": string; + Simple: string; + "Slippage tolerance": string; + "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; + "Something went wrong": string; + "Something went wrong.": string; + "Step 1. Get UNI-V2 Liquidity tokens": string; + "Submit new proposal": string; + "Submitting Proposal": string; + "Submitting Vote": string; + Succeeded: string; + Success: string; + Supply: string; + "Supplying {0} {1} and {2} {3}": (string | string[])[]; + Swap: string; + "Swap <0/> for exactly <1/>": string; + "Swap Anyway": string; + "Swap details": string; + "Swap exactly <0/> for <1/>": string; + "Swap failed: {0}": (string | string[])[]; + "Swap summary": string; + "Swapping {0} {1} for {2} {3}": (string | string[])[]; + "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; + "Tell us what you think \u2197": string; + "Thanks for being part of the Uniswap community <0/>": string; + "The % you will earn in fees.": string; + "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; + "The app fetches blockchain data from The Graph\u2019s hosted service.": string; + "The app fetches on-chain data and constructs contract calls with an Infura API.": string; + "The app fetches the optimal trade route from a Uniswap Labs server.": string; + "The app logs anonymized usage statistics in order to improve over time.": string; + "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; + "The cost of sending this transaction is more than half of the value of the input amount.": string; + "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; + "The estimated difference between the USD values of input and output amounts.": string; + "The input token cannot be transferred. There may be an issue with the input token.": string; + "The market price is outside your specified price range. Single-asset deposit only.": string; + "The most recent block number on this network. Prices update on every block.": string; + "The output token cannot be transferred. There may be an issue with the output token.": string; + "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; + "The price of this pool is within your selected range. Your position is currently earning fees.": string; + "The ratio of tokens you add will set the price of this pool.": string; + "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; + "There is no liquidity data.": string; + "This app uses the following third-party APIs:": string; + "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; + "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; + "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; + "This token is not supported in the Uniswap Labs app": string; + "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; + "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; + "Tip: Custom tokens are stored locally in your browser": string; + To: string; + "To (at least)": string; + "Token not supported": string; + Tokens: string; + "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; + "Top pools": string; + "Total deposited": string; + "Total deposits": string; + "Trade Route": string; + Trading: string; + "Transaction Settings": string; + "Transaction Submitted": string; + "Transaction completed in": string; + "Transaction deadline": string; + "Transaction pending": string; + "Transaction rejected.": string; + "Transaction submitted": string; + "Transfer Token": string; + "Try Again": string; + "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Turn On Expert Mode": string; + "UNI has arrived": string; + "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; + "UNI {0}/{1} Burned": (string | string[])[]; + "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; + "UNI-V2 {0}-{1}": (string | string[])[]; + "Unclaimed UNI": string; + "Unclaimed fees": string; + Undetermined: string; + "Unexpected error. Could not estimate gas for the swap.": string; + "Unexpected issue with estimating the gas. Please try again.": string; + "Uniswap Governance": string; + "Uniswap Labs' Terms of Service": string; + "Uniswap available in: <0>{0}": (string | string[])[]; + "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; + "Uniswap liquidity mining": string; + "Uniswap migration contract\u2197": string; + "Unknown Source": string; + "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; + "Unlock Votes": string; + "Unlock Voting": string; + "Unlocking Votes": string; + "Unsupported Asset": string; + "Unsupported Assets": string; + "Unsupported network\u2013switch to another to trade.": string; + Untitled: string; + Unwrap: string; + "Unwrap <0/> to {0}": (string | string[])[]; + "Update Delegation": string; + "Update list": string; + "Use the Uniswap Labs API to get faster quotes.": string; + User: string; + "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; + "V2 liquidity": string; + "V3 {0} Price:": (string | string[])[]; + "View accrued fees and analytics<0>\u2197": string; + "View list": string; + "View on Etherscan": string; + "View on Explorer": string; + "View transaction on Explorer": string; + Vote: string; + "Vote Against": string; + "Vote For": string; + "Vote against proposal {proposalId}": (string | string[])[]; + "Vote against proposal {proposalKey}": (string | string[])[]; + "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote for proposal {proposalId}": (string | string[])[]; + "Vote for proposal {proposalKey}": (string | string[])[]; + "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote to abstain on proposal {proposalId}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Voting ended {0}": (string | string[])[]; + "Voting ends approximately {0}": (string | string[])[]; + "Voting starts approximately {0}": (string | string[])[]; + "Waiting For Confirmation": string; + "Wallet Address or ENS name": string; + "Weekly Rewards": string; + "Welcome to team Unicorn :)": string; + "When you claim without withdrawing your liquidity remains in the mining pool.": string; + "When you withdraw, the contract will automagically claim UNI on your behalf!": string; + "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; + Withdraw: string; + "Withdraw & Claim": string; + "Withdraw deposited liquidity": string; + "Withdrawing {0} UNI-V2": (string | string[])[]; + "Withdrew UNI-V2!": string; + Wrap: string; + "Wrap <0/> to {0}": (string | string[])[]; + "Wrong Network": string; + "You already have an active or pending proposal": string; + "You are creating a pool": string; + "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; + "You are the first liquidity provider.": string; + "You can either vote on each proposal yourself or delegate your votes to a third party.": string; + "You can now trade {0}": (string | string[])[]; + "You don't have enough votes to submit a proposal": string; + "You don\u2019t have liquidity in this pool yet.": string; + "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; + "You may have lost your network connection.": string; + "You might consider waiting until the network fees go down to complete this transaction.": string; + "You must connect an account.": string; + "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; + "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; + "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; + "You will also collect fees earned from this position.": string; + "You will receive": string; + "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; + "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; + "Your V2 liquidity": string; + "Your active V3 liquidity positions will appear here.": string; + "Your liquidity deposits": string; + "Your pool share:": string; + "Your position": string; + "Your position has 0 liquidity, and is not earning fees.": string; + "Your position will appear here.": string; + "Your position will be 100% composed of {0} at this price": (string | string[])[]; + "Your position will be 100% {0} at this price.": (string | string[])[]; + "Your position will not earn fees or be used in trades until the market price moves into your range.": string; + "Your positions": string; + "Your rate": string; + "Your total pool tokens:": string; + "Your transaction cost will be much higher as it includes the gas to create the pool.": string; + "Your transaction may be frontrun": string; + "Your transaction may fail": string; + "Your transaction will revert if it has been pending for longer than this period of time.": string; + "Your transaction will revert if it is pending for more than this period of time.": string; + "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; + "Your transactions will appear here...": string; + "Your unclaimed UNI": string; + "after slippage": string; + confirm: string; + "for {0}": string[][]; + gwei: string; + "has socks emoji": string; + "here.": string; + "https:// or ipfs:// or ENS name": string; + minutes: string; + "via {0}": (string | string[])[]; + "via {0} token list": (string | string[])[]; + "{0, plural, one {Import token} other {Import tokens}}": (string | { + one: string; + other: string; + })[][]; + "{0}": string[][]; + "{0} %": (string | string[])[]; + "{0} <0/> per <1/>": (string | string[])[]; + "{0} Custom Tokens": (string | string[])[]; + "{0} Deposited": (string | string[])[]; + "{0} ETH": (string | string[])[]; + "{0} Fees Earned:": (string | string[])[]; + "{0} Pending": (string | string[])[]; + "{0} UNI": (string | string[])[]; + "{0} UNI / week": (string | string[])[]; + "{0} UNI-V2": (string | string[])[]; + "{0} UNI-V2 LP tokens available": (string | string[])[]; + "{0} Votes": (string | string[])[]; + "{0} per {1}": (string | string[])[]; + "{0} tokens": (string | string[])[]; + "{0} {1} Price:": (string | string[])[]; + "{0} {nativeCurrencySymbol}": (string | string[])[]; + "{0} \u2022 Added by user": (string | string[])[]; + "{0}%": (string | string[])[]; + "{0}% fee tier": (string | string[])[]; + "{0}% pool": (string | string[])[]; + "{0}% select": (string | string[])[]; + "{0}-{1} Liquidity Mining": (string | string[])[]; + "{0}/{1} LP NFT": (string | string[])[]; + "{0}/{1} LP Tokens": (string | string[])[]; + "{SOCKS_AMOUNT} UNI": (string | string[])[]; + "{USER_AMOUNT} UNI": (string | string[])[]; + "{activeTokensOnThisChain} tokens": (string | string[])[]; + "{integrator} fee": (string | string[])[]; + "{label} token bridge": (string | string[])[]; + "{min}m {sec}s": (string | string[])[]; + "{percentForSlider}%": (string | string[])[]; + "{sec}s": (string | string[])[]; + "{tokenB} per {tokenA}": (string | string[])[]; + "\u2190 Back to Pools Overview": string; +}; diff --git a/dist2/types/locales/id-ID.d.ts b/dist2/types/locales/id-ID.d.ts new file mode 100644 index 00000000000..75120e0e5c9 --- /dev/null +++ b/dist2/types/locales/id-ID.d.ts @@ -0,0 +1,593 @@ +export const messages: { + "$-": string; + "$<0/>": string; + "${0}": (string | string[])[]; + "(${0})": (string | string[])[]; + "(View on Explorer)": string; + "(clear all)": string; + "(edit)": string; + "- Remove recipient": string; + "0 UNI / week": string; + "25%": string; + "50%": string; + "75%": string; + "<0/> All Proposals": string; + "<0/> Votes": string; + "<0>Account analytics and accrued fees<1> \u2197 ": string; + "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; + "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; + "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; + "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; + "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; + "<0>Unlock voting to prepare for the next proposal.": string; + "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; + "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; + About: string; + Accept: string; + Account: string; + Active: string; + Add: string; + "Add <0/> and <1/> to Uniswap V2": string; + "Add Delegate +": string; + "Add Liquidity": string; + "Add V2 Liquidity": string; + "Add liquidity.": string; + "Add more liquidity": string; + "Add {0} to Metamask <0/>": (string | string[])[]; + "Add {0}-{1} liquidity": (string | string[])[]; + "Add {0}/{1} V3 liquidity": (string | string[])[]; + "Added {0}": (string | string[])[]; + "Address has no available claim": string; + Against: string; + "Allow LP token migration": string; + "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; + "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; + Allowed: string; + Amount: string; + "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Approval pending <0/>": string; + Approve: string; + "Approve Token": string; + "Approve {0}": (string | string[])[]; + "Approve {0} first": (string | string[])[]; + Approved: string; + Approving: string; + "Approving {0}": (string | string[])[]; + Arbiscan: string; + "Arbitrum Bridge": string; + "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Are you sure?": string; + "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; + "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; + Auto: string; + "Auto Router API": string; + "Available to deposit: {0}": (string | string[])[]; + "Balance: {0}": (string | string[])[]; + "Best for exotic pairs.": string; + "Best for most pairs.": string; + "Best for stable pairs.": string; + "Best for very stable pairs.": string; + "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; + "Blocked address": string; + Bridge: string; + "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; + "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; + Canceled: string; + Change: string; + Charts: string; + "Check network status": string; + "Check out our v3 LP walkthrough and migration guides.": string; + Claim: string; + "Claim <0/> for {0}": (string | string[])[]; + "Claim UNI": string; + "Claim UNI Token": string; + "Claim UNI reward for {0}": (string | string[])[]; + "Claim fees": string; + "Claim your UNI tokens": string; + Claimed: string; + "Claimed UNI!": string; + "Claimed!": string; + Claiming: string; + "Claiming UNI": string; + "Claiming {0} UNI": (string | string[])[]; + "Clear All": string; + "Clear all": string; + Close: string; + Closed: string; + Collect: string; + "Collect as WETH": string; + "Collect fees": string; + "Collect {0}/{1} fees": (string | string[])[]; + Collected: string; + Collecting: string; + "Collecting fees": string; + "Collecting fees will withdraw currently available fees for you.": string; + Confirm: string; + "Confirm Supply": string; + "Confirm Swap": string; + "Confirm swap": string; + "Confirm this transaction in your wallet": string; + "Confirm transaction in wallet": string; + "Connect Wallet": string; + "Connect a wallet": string; + "Connect to a wallet to find pools": string; + "Connect to a wallet to view your V2 liquidity.": string; + "Connect to a wallet to view your liquidity.": string; + "Connect wallet to swap": string; + "Connected with {name}": (string | string[])[]; + Copied: string; + "Copy Address": string; + "Create Pool & Supply": string; + "Create Proposal": string; + "Create a pair": string; + "Create a pool": string; + "Create an issue on GitHub": string; + "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; + "Create pool.": string; + "Create {0}/{1} V3 pool": (string | string[])[]; + "Current price": string; + "Current {0} Price:": (string | string[])[]; + Custom: string; + "Dark Theme": string; + Defeated: string; + "Delegate Votes": string; + "Delegate voting power to {0}": (string | string[])[]; + "Delegated to:": string; + "Delegating votes": string; + Deposit: string; + "Deposit Amounts": string; + "Deposit UNI-V2 LP Tokens": string; + "Deposit liquidity": string; + "Deposit tokens to the {label} network.": (string | string[])[]; + "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; + "Deposited liquidity:": string; + "Deposited {0} UNI-V2": (string | string[])[]; + "Depositing Liquidity": string; + Description: string; + Detailed: string; + Details: string; + Disconnect: string; + Discord: string; + Dismiss: string; + Docs: string; + "Don\u2019t see one of your v2 positions? <0>Import it.": string; + "Earned UNI tokens represent voting shares in Uniswap governance.": string; + Edit: string; + "Efficiency Comparison": string; + "Enter a percent": string; + "Enter a recipient": string; + "Enter a valid slippage percentage": string; + "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; + "Enter an amount": string; + "Enter valid list location": string; + "Enter valid token address": string; + "Enter {0} amount": (string | string[])[]; + Error: string; + "Error connecting": string; + "Error connecting. Try refreshing the page.": string; + "Error details": string; + "Error importing list": string; + "Estimate may differ due to your wallet gas settings": string; + "Estimated network fee": string; + Etherscan: string; + Executed: string; + "Expanded results from inactive Token Lists": string; + "Expected Output": string; + "Expert Mode": string; + "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; + Expired: string; + "Explore Uniswap Analytics.": string; + "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; + "Fee Tier": string; + "Fee tier": string; + "Fetching best price...": string; + "Fetching best price\u2026": string; + For: string; + "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; + From: string; + "From (at most)": string; + "Full Range": string; + "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; + "Get support on Discord": string; + "Help Center": string; + Hide: string; + "Hide closed positions": string; + "High Price Impact": string; + "How this app uses APIs": string; + "I understand": string; + "If you purchase a token from this list, you may not be able to sell it back.": string; + Import: string; + "Import List": string; + "Import Pool": string; + "Import V2 Pool": string; + "Import at your own risk": string; + "In range": string; + "Increase Liquidity": string; + "Initial prices and pool share": string; + "Initializing...": string; + "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Install Metamask": string; + "Insufficient liquidity for this trade.": string; + "Insufficient {0}": (string | string[])[]; + "Insufficient {0} balance": (string | string[])[]; + "Interface Settings": string; + "Invalid pair": string; + "Invalid pair.": string; + "Invalid price input": string; + "Invalid range selected. The min price must be lower than the max price.": string; + "Invalid recipient": string; + Language: string; + Learn: string; + "Learn about providing liquidity": string; + "Learn more": string; + "Legal & Privacy": string; + "Light Theme": string; + Liquidity: string; + "Liquidity data not available.": string; + "Liquidity provider rewards": string; + "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + Lists: string; + Loaded: string; + Loading: string; + MAX: string; + Manage: string; + "Manage Liquidity in Rewards Pool": string; + "Manage Token Lists": string; + "Manage this pool.": string; + Max: string; + "Max Price": string; + "Max price": string; + "Max slippage": string; + "Max:": string; + "Maximum sent": string; + Menu: string; + Migrate: string; + "Migrate Liquidity to V3": string; + "Migrate V2 Liquidity": string; + "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; + "Migrate {0}/{1} liquidity to V3": (string | string[])[]; + Migrating: string; + "Min Price": string; + "Min price": string; + "Min:": string; + "Minimum received": string; + "Missing dependencies": string; + "Mock Toggle": string; + More: string; + "Network Fee": string; + "Network Warning": string; + "Network fees exceed 50% of the swap amount!": string; + "New Position": string; + "No V2 Liquidity found.": string; + "No active pools": string; + "No data": string; + "No description.": string; + "No liquidity found.": string; + "No pool found.": string; + "No proposals found.": string; + "No results found.": string; + "Not created": string; + OFF: string; + ON: string; + "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; + Off: string; + On: string; + "Once you are happy with the rate click supply to review.": string; + "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; + "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; + "Optimism Gateway": string; + "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Optimistic Etherscan": string; + "Out of range": string; + "Output is estimated.": string; + "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; + "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Output will be sent to <0>{0}": (string | string[])[]; + Owner: string; + "Participating pools": string; + Pending: string; + "Please confirm you would like to remove this list by typing REMOVE": string; + "Please connect to Layer 1 Ethereum": string; + "Please connect to a supported network in the dropdown menu or in your wallet.": string; + "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; + "Polygon Bridge": string; + Polygonscan: string; + Pool: string; + "Pool Found!": string; + "Pool Rate": string; + "Pool rate": string; + "Pool tokens in rewards pool:": string; + "Pooled {0}:": (string | string[])[]; + "Pools Overview": string; + Preview: string; + Price: string; + "Price Difference:": string; + "Price Impact": string; + "Price Impact Too High": string; + "Price Updated": string; + "Price impact": string; + "Price range": string; + "Price updated": string; + "Price:": string; + "Prices and pool share": string; + Proposal: string; + "Proposal Submitted": string; + "Proposal Title": string; + Proposals: string; + "Proposals submitted by community members will appear here.": string; + "Proposed Action": string; + Proposer: string; + "Protocol Disclaimer": string; + Queued: string; + Rates: string; + "Read more about UNI": string; + "Read more about Uniswap governance": string; + "Read more about providing liquidity": string; + "Read more about unsupported assets": string; + "Recent Transactions": string; + "Recent transactions": string; + Recipient: string; + "Reload the page": string; + Remove: string; + "Remove <0/> and <1/>": string; + "Remove Amount": string; + "Remove Delegate": string; + "Remove Liquidity": string; + "Remove list": string; + "Removing {0} {1} and {2} {3}": (string | string[])[]; + "Removing {0} {1} and{2} {3}": (string | string[])[]; + "Request Features": string; + Reset: string; + Return: string; + "Review swap": string; + "Search by token name or address": string; + "Search name or paste address": string; + "Select Pair": string; + "Select a network": string; + "Select a token": string; + "Select a token to find your v2 liquidity.": string; + "Select an action": string; + "Selected Range": string; + Self: string; + "Self Delegate": string; + "Set Price Range": string; + "Set Starting Price": string; + Settings: string; + "Share of Pool": string; + "Share of Pool:": string; + "Show Portis": string; + "Show closed positions": string; + Simple: string; + "Slippage tolerance": string; + "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; + "Something went wrong": string; + "Something went wrong.": string; + "Step 1. Get UNI-V2 Liquidity tokens": string; + "Submit new proposal": string; + "Submitting Proposal": string; + "Submitting Vote": string; + Succeeded: string; + Success: string; + Supply: string; + "Supplying {0} {1} and {2} {3}": (string | string[])[]; + Swap: string; + "Swap <0/> for exactly <1/>": string; + "Swap Anyway": string; + "Swap details": string; + "Swap exactly <0/> for <1/>": string; + "Swap failed: {0}": (string | string[])[]; + "Swap summary": string; + "Swapping {0} {1} for {2} {3}": (string | string[])[]; + "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; + "Tell us what you think \u2197": string; + "Thanks for being part of the Uniswap community <0/>": string; + "The % you will earn in fees.": string; + "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; + "The app fetches blockchain data from The Graph\u2019s hosted service.": string; + "The app fetches on-chain data and constructs contract calls with an Infura API.": string; + "The app fetches the optimal trade route from a Uniswap Labs server.": string; + "The app logs anonymized usage statistics in order to improve over time.": string; + "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; + "The cost of sending this transaction is more than half of the value of the input amount.": string; + "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; + "The estimated difference between the USD values of input and output amounts.": string; + "The input token cannot be transferred. There may be an issue with the input token.": string; + "The market price is outside your specified price range. Single-asset deposit only.": string; + "The most recent block number on this network. Prices update on every block.": string; + "The output token cannot be transferred. There may be an issue with the output token.": string; + "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; + "The price of this pool is within your selected range. Your position is currently earning fees.": string; + "The ratio of tokens you add will set the price of this pool.": string; + "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; + "There is no liquidity data.": string; + "This app uses the following third-party APIs:": string; + "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; + "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; + "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; + "This token is not supported in the Uniswap Labs app": string; + "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; + "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; + "Tip: Custom tokens are stored locally in your browser": string; + To: string; + "To (at least)": string; + "Token not supported": string; + Tokens: string; + "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; + "Top pools": string; + "Total deposited": string; + "Total deposits": string; + "Trade Route": string; + Trading: string; + "Transaction Settings": string; + "Transaction Submitted": string; + "Transaction completed in": string; + "Transaction deadline": string; + "Transaction pending": string; + "Transaction rejected.": string; + "Transaction submitted": string; + "Transfer Token": string; + "Try Again": string; + "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Turn On Expert Mode": string; + "UNI has arrived": string; + "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; + "UNI {0}/{1} Burned": (string | string[])[]; + "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; + "UNI-V2 {0}-{1}": (string | string[])[]; + "Unclaimed UNI": string; + "Unclaimed fees": string; + Undetermined: string; + "Unexpected error. Could not estimate gas for the swap.": string; + "Unexpected issue with estimating the gas. Please try again.": string; + "Uniswap Governance": string; + "Uniswap Labs' Terms of Service": string; + "Uniswap available in: <0>{0}": (string | string[])[]; + "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; + "Uniswap liquidity mining": string; + "Uniswap migration contract\u2197": string; + "Unknown Source": string; + "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; + "Unlock Votes": string; + "Unlock Voting": string; + "Unlocking Votes": string; + "Unsupported Asset": string; + "Unsupported Assets": string; + "Unsupported network\u2013switch to another to trade.": string; + Untitled: string; + Unwrap: string; + "Unwrap <0/> to {0}": (string | string[])[]; + "Update Delegation": string; + "Update list": string; + "Use the Uniswap Labs API to get faster quotes.": string; + User: string; + "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; + "V2 liquidity": string; + "V3 {0} Price:": (string | string[])[]; + "View accrued fees and analytics<0>\u2197": string; + "View list": string; + "View on Etherscan": string; + "View on Explorer": string; + "View transaction on Explorer": string; + Vote: string; + "Vote Against": string; + "Vote For": string; + "Vote against proposal {proposalId}": (string | string[])[]; + "Vote against proposal {proposalKey}": (string | string[])[]; + "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote for proposal {proposalId}": (string | string[])[]; + "Vote for proposal {proposalKey}": (string | string[])[]; + "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote to abstain on proposal {proposalId}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Voting ended {0}": (string | string[])[]; + "Voting ends approximately {0}": (string | string[])[]; + "Voting starts approximately {0}": (string | string[])[]; + "Waiting For Confirmation": string; + "Wallet Address or ENS name": string; + "Weekly Rewards": string; + "Welcome to team Unicorn :)": string; + "When you claim without withdrawing your liquidity remains in the mining pool.": string; + "When you withdraw, the contract will automagically claim UNI on your behalf!": string; + "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; + Withdraw: string; + "Withdraw & Claim": string; + "Withdraw deposited liquidity": string; + "Withdrawing {0} UNI-V2": (string | string[])[]; + "Withdrew UNI-V2!": string; + Wrap: string; + "Wrap <0/> to {0}": (string | string[])[]; + "Wrong Network": string; + "You already have an active or pending proposal": string; + "You are creating a pool": string; + "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; + "You are the first liquidity provider.": string; + "You can either vote on each proposal yourself or delegate your votes to a third party.": string; + "You can now trade {0}": (string | string[])[]; + "You don't have enough votes to submit a proposal": string; + "You don\u2019t have liquidity in this pool yet.": string; + "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; + "You may have lost your network connection.": string; + "You might consider waiting until the network fees go down to complete this transaction.": string; + "You must connect an account.": string; + "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; + "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; + "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; + "You will also collect fees earned from this position.": string; + "You will receive": string; + "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; + "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; + "Your V2 liquidity": string; + "Your active V3 liquidity positions will appear here.": string; + "Your liquidity deposits": string; + "Your pool share:": string; + "Your position": string; + "Your position has 0 liquidity, and is not earning fees.": string; + "Your position will appear here.": string; + "Your position will be 100% composed of {0} at this price": (string | string[])[]; + "Your position will be 100% {0} at this price.": (string | string[])[]; + "Your position will not earn fees or be used in trades until the market price moves into your range.": string; + "Your positions": string; + "Your rate": string; + "Your total pool tokens:": string; + "Your transaction cost will be much higher as it includes the gas to create the pool.": string; + "Your transaction may be frontrun": string; + "Your transaction may fail": string; + "Your transaction will revert if it has been pending for longer than this period of time.": string; + "Your transaction will revert if it is pending for more than this period of time.": string; + "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; + "Your transactions will appear here...": string; + "Your unclaimed UNI": string; + "after slippage": string; + confirm: string; + "for {0}": (string | string[])[]; + gwei: string; + "has socks emoji": string; + "here.": string; + "https:// or ipfs:// or ENS name": string; + minutes: string; + "via {0}": (string | string[])[]; + "via {0} token list": (string | string[])[]; + "{0, plural, one {Import token} other {Import tokens}}": (string | { + one: string; + other: string; + })[][]; + "{0}": string[][]; + "{0} %": (string | string[])[]; + "{0} <0/> per <1/>": (string | string[])[]; + "{0} Custom Tokens": (string | string[])[]; + "{0} Deposited": (string | string[])[]; + "{0} ETH": (string | string[])[]; + "{0} Fees Earned:": (string | string[])[]; + "{0} Pending": (string | string[])[]; + "{0} UNI": (string | string[])[]; + "{0} UNI / week": (string | string[])[]; + "{0} UNI-V2": (string | string[])[]; + "{0} UNI-V2 LP tokens available": (string | string[])[]; + "{0} Votes": (string | string[])[]; + "{0} per {1}": (string | string[])[]; + "{0} tokens": (string | string[])[]; + "{0} {1} Price:": (string | string[])[]; + "{0} {nativeCurrencySymbol}": (string | string[])[]; + "{0} \u2022 Added by user": (string | string[])[]; + "{0}%": (string | string[])[]; + "{0}% fee tier": (string | string[])[]; + "{0}% pool": (string | string[])[]; + "{0}% select": (string | string[])[]; + "{0}-{1} Liquidity Mining": (string | string[])[]; + "{0}/{1} LP NFT": (string | string[])[]; + "{0}/{1} LP Tokens": (string | string[])[]; + "{SOCKS_AMOUNT} UNI": (string | string[])[]; + "{USER_AMOUNT} UNI": (string | string[])[]; + "{activeTokensOnThisChain} tokens": (string | string[])[]; + "{integrator} fee": (string | string[])[]; + "{label} token bridge": (string | string[])[]; + "{min}m {sec}s": (string | string[])[]; + "{percentForSlider}%": (string | string[])[]; + "{sec}s": (string | string[])[]; + "{tokenB} per {tokenA}": (string | string[])[]; + "\u2190 Back to Pools Overview": string; +}; diff --git a/dist2/types/locales/it-IT.d.ts b/dist2/types/locales/it-IT.d.ts new file mode 100644 index 00000000000..75120e0e5c9 --- /dev/null +++ b/dist2/types/locales/it-IT.d.ts @@ -0,0 +1,593 @@ +export const messages: { + "$-": string; + "$<0/>": string; + "${0}": (string | string[])[]; + "(${0})": (string | string[])[]; + "(View on Explorer)": string; + "(clear all)": string; + "(edit)": string; + "- Remove recipient": string; + "0 UNI / week": string; + "25%": string; + "50%": string; + "75%": string; + "<0/> All Proposals": string; + "<0/> Votes": string; + "<0>Account analytics and accrued fees<1> \u2197 ": string; + "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; + "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; + "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; + "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; + "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; + "<0>Unlock voting to prepare for the next proposal.": string; + "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; + "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; + About: string; + Accept: string; + Account: string; + Active: string; + Add: string; + "Add <0/> and <1/> to Uniswap V2": string; + "Add Delegate +": string; + "Add Liquidity": string; + "Add V2 Liquidity": string; + "Add liquidity.": string; + "Add more liquidity": string; + "Add {0} to Metamask <0/>": (string | string[])[]; + "Add {0}-{1} liquidity": (string | string[])[]; + "Add {0}/{1} V3 liquidity": (string | string[])[]; + "Added {0}": (string | string[])[]; + "Address has no available claim": string; + Against: string; + "Allow LP token migration": string; + "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; + "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; + Allowed: string; + Amount: string; + "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Approval pending <0/>": string; + Approve: string; + "Approve Token": string; + "Approve {0}": (string | string[])[]; + "Approve {0} first": (string | string[])[]; + Approved: string; + Approving: string; + "Approving {0}": (string | string[])[]; + Arbiscan: string; + "Arbitrum Bridge": string; + "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Are you sure?": string; + "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; + "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; + Auto: string; + "Auto Router API": string; + "Available to deposit: {0}": (string | string[])[]; + "Balance: {0}": (string | string[])[]; + "Best for exotic pairs.": string; + "Best for most pairs.": string; + "Best for stable pairs.": string; + "Best for very stable pairs.": string; + "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; + "Blocked address": string; + Bridge: string; + "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; + "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; + Canceled: string; + Change: string; + Charts: string; + "Check network status": string; + "Check out our v3 LP walkthrough and migration guides.": string; + Claim: string; + "Claim <0/> for {0}": (string | string[])[]; + "Claim UNI": string; + "Claim UNI Token": string; + "Claim UNI reward for {0}": (string | string[])[]; + "Claim fees": string; + "Claim your UNI tokens": string; + Claimed: string; + "Claimed UNI!": string; + "Claimed!": string; + Claiming: string; + "Claiming UNI": string; + "Claiming {0} UNI": (string | string[])[]; + "Clear All": string; + "Clear all": string; + Close: string; + Closed: string; + Collect: string; + "Collect as WETH": string; + "Collect fees": string; + "Collect {0}/{1} fees": (string | string[])[]; + Collected: string; + Collecting: string; + "Collecting fees": string; + "Collecting fees will withdraw currently available fees for you.": string; + Confirm: string; + "Confirm Supply": string; + "Confirm Swap": string; + "Confirm swap": string; + "Confirm this transaction in your wallet": string; + "Confirm transaction in wallet": string; + "Connect Wallet": string; + "Connect a wallet": string; + "Connect to a wallet to find pools": string; + "Connect to a wallet to view your V2 liquidity.": string; + "Connect to a wallet to view your liquidity.": string; + "Connect wallet to swap": string; + "Connected with {name}": (string | string[])[]; + Copied: string; + "Copy Address": string; + "Create Pool & Supply": string; + "Create Proposal": string; + "Create a pair": string; + "Create a pool": string; + "Create an issue on GitHub": string; + "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; + "Create pool.": string; + "Create {0}/{1} V3 pool": (string | string[])[]; + "Current price": string; + "Current {0} Price:": (string | string[])[]; + Custom: string; + "Dark Theme": string; + Defeated: string; + "Delegate Votes": string; + "Delegate voting power to {0}": (string | string[])[]; + "Delegated to:": string; + "Delegating votes": string; + Deposit: string; + "Deposit Amounts": string; + "Deposit UNI-V2 LP Tokens": string; + "Deposit liquidity": string; + "Deposit tokens to the {label} network.": (string | string[])[]; + "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; + "Deposited liquidity:": string; + "Deposited {0} UNI-V2": (string | string[])[]; + "Depositing Liquidity": string; + Description: string; + Detailed: string; + Details: string; + Disconnect: string; + Discord: string; + Dismiss: string; + Docs: string; + "Don\u2019t see one of your v2 positions? <0>Import it.": string; + "Earned UNI tokens represent voting shares in Uniswap governance.": string; + Edit: string; + "Efficiency Comparison": string; + "Enter a percent": string; + "Enter a recipient": string; + "Enter a valid slippage percentage": string; + "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; + "Enter an amount": string; + "Enter valid list location": string; + "Enter valid token address": string; + "Enter {0} amount": (string | string[])[]; + Error: string; + "Error connecting": string; + "Error connecting. Try refreshing the page.": string; + "Error details": string; + "Error importing list": string; + "Estimate may differ due to your wallet gas settings": string; + "Estimated network fee": string; + Etherscan: string; + Executed: string; + "Expanded results from inactive Token Lists": string; + "Expected Output": string; + "Expert Mode": string; + "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; + Expired: string; + "Explore Uniswap Analytics.": string; + "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; + "Fee Tier": string; + "Fee tier": string; + "Fetching best price...": string; + "Fetching best price\u2026": string; + For: string; + "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; + From: string; + "From (at most)": string; + "Full Range": string; + "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; + "Get support on Discord": string; + "Help Center": string; + Hide: string; + "Hide closed positions": string; + "High Price Impact": string; + "How this app uses APIs": string; + "I understand": string; + "If you purchase a token from this list, you may not be able to sell it back.": string; + Import: string; + "Import List": string; + "Import Pool": string; + "Import V2 Pool": string; + "Import at your own risk": string; + "In range": string; + "Increase Liquidity": string; + "Initial prices and pool share": string; + "Initializing...": string; + "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Install Metamask": string; + "Insufficient liquidity for this trade.": string; + "Insufficient {0}": (string | string[])[]; + "Insufficient {0} balance": (string | string[])[]; + "Interface Settings": string; + "Invalid pair": string; + "Invalid pair.": string; + "Invalid price input": string; + "Invalid range selected. The min price must be lower than the max price.": string; + "Invalid recipient": string; + Language: string; + Learn: string; + "Learn about providing liquidity": string; + "Learn more": string; + "Legal & Privacy": string; + "Light Theme": string; + Liquidity: string; + "Liquidity data not available.": string; + "Liquidity provider rewards": string; + "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + Lists: string; + Loaded: string; + Loading: string; + MAX: string; + Manage: string; + "Manage Liquidity in Rewards Pool": string; + "Manage Token Lists": string; + "Manage this pool.": string; + Max: string; + "Max Price": string; + "Max price": string; + "Max slippage": string; + "Max:": string; + "Maximum sent": string; + Menu: string; + Migrate: string; + "Migrate Liquidity to V3": string; + "Migrate V2 Liquidity": string; + "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; + "Migrate {0}/{1} liquidity to V3": (string | string[])[]; + Migrating: string; + "Min Price": string; + "Min price": string; + "Min:": string; + "Minimum received": string; + "Missing dependencies": string; + "Mock Toggle": string; + More: string; + "Network Fee": string; + "Network Warning": string; + "Network fees exceed 50% of the swap amount!": string; + "New Position": string; + "No V2 Liquidity found.": string; + "No active pools": string; + "No data": string; + "No description.": string; + "No liquidity found.": string; + "No pool found.": string; + "No proposals found.": string; + "No results found.": string; + "Not created": string; + OFF: string; + ON: string; + "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; + Off: string; + On: string; + "Once you are happy with the rate click supply to review.": string; + "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; + "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; + "Optimism Gateway": string; + "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Optimistic Etherscan": string; + "Out of range": string; + "Output is estimated.": string; + "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; + "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Output will be sent to <0>{0}": (string | string[])[]; + Owner: string; + "Participating pools": string; + Pending: string; + "Please confirm you would like to remove this list by typing REMOVE": string; + "Please connect to Layer 1 Ethereum": string; + "Please connect to a supported network in the dropdown menu or in your wallet.": string; + "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; + "Polygon Bridge": string; + Polygonscan: string; + Pool: string; + "Pool Found!": string; + "Pool Rate": string; + "Pool rate": string; + "Pool tokens in rewards pool:": string; + "Pooled {0}:": (string | string[])[]; + "Pools Overview": string; + Preview: string; + Price: string; + "Price Difference:": string; + "Price Impact": string; + "Price Impact Too High": string; + "Price Updated": string; + "Price impact": string; + "Price range": string; + "Price updated": string; + "Price:": string; + "Prices and pool share": string; + Proposal: string; + "Proposal Submitted": string; + "Proposal Title": string; + Proposals: string; + "Proposals submitted by community members will appear here.": string; + "Proposed Action": string; + Proposer: string; + "Protocol Disclaimer": string; + Queued: string; + Rates: string; + "Read more about UNI": string; + "Read more about Uniswap governance": string; + "Read more about providing liquidity": string; + "Read more about unsupported assets": string; + "Recent Transactions": string; + "Recent transactions": string; + Recipient: string; + "Reload the page": string; + Remove: string; + "Remove <0/> and <1/>": string; + "Remove Amount": string; + "Remove Delegate": string; + "Remove Liquidity": string; + "Remove list": string; + "Removing {0} {1} and {2} {3}": (string | string[])[]; + "Removing {0} {1} and{2} {3}": (string | string[])[]; + "Request Features": string; + Reset: string; + Return: string; + "Review swap": string; + "Search by token name or address": string; + "Search name or paste address": string; + "Select Pair": string; + "Select a network": string; + "Select a token": string; + "Select a token to find your v2 liquidity.": string; + "Select an action": string; + "Selected Range": string; + Self: string; + "Self Delegate": string; + "Set Price Range": string; + "Set Starting Price": string; + Settings: string; + "Share of Pool": string; + "Share of Pool:": string; + "Show Portis": string; + "Show closed positions": string; + Simple: string; + "Slippage tolerance": string; + "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; + "Something went wrong": string; + "Something went wrong.": string; + "Step 1. Get UNI-V2 Liquidity tokens": string; + "Submit new proposal": string; + "Submitting Proposal": string; + "Submitting Vote": string; + Succeeded: string; + Success: string; + Supply: string; + "Supplying {0} {1} and {2} {3}": (string | string[])[]; + Swap: string; + "Swap <0/> for exactly <1/>": string; + "Swap Anyway": string; + "Swap details": string; + "Swap exactly <0/> for <1/>": string; + "Swap failed: {0}": (string | string[])[]; + "Swap summary": string; + "Swapping {0} {1} for {2} {3}": (string | string[])[]; + "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; + "Tell us what you think \u2197": string; + "Thanks for being part of the Uniswap community <0/>": string; + "The % you will earn in fees.": string; + "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; + "The app fetches blockchain data from The Graph\u2019s hosted service.": string; + "The app fetches on-chain data and constructs contract calls with an Infura API.": string; + "The app fetches the optimal trade route from a Uniswap Labs server.": string; + "The app logs anonymized usage statistics in order to improve over time.": string; + "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; + "The cost of sending this transaction is more than half of the value of the input amount.": string; + "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; + "The estimated difference between the USD values of input and output amounts.": string; + "The input token cannot be transferred. There may be an issue with the input token.": string; + "The market price is outside your specified price range. Single-asset deposit only.": string; + "The most recent block number on this network. Prices update on every block.": string; + "The output token cannot be transferred. There may be an issue with the output token.": string; + "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; + "The price of this pool is within your selected range. Your position is currently earning fees.": string; + "The ratio of tokens you add will set the price of this pool.": string; + "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; + "There is no liquidity data.": string; + "This app uses the following third-party APIs:": string; + "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; + "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; + "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; + "This token is not supported in the Uniswap Labs app": string; + "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; + "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; + "Tip: Custom tokens are stored locally in your browser": string; + To: string; + "To (at least)": string; + "Token not supported": string; + Tokens: string; + "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; + "Top pools": string; + "Total deposited": string; + "Total deposits": string; + "Trade Route": string; + Trading: string; + "Transaction Settings": string; + "Transaction Submitted": string; + "Transaction completed in": string; + "Transaction deadline": string; + "Transaction pending": string; + "Transaction rejected.": string; + "Transaction submitted": string; + "Transfer Token": string; + "Try Again": string; + "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Turn On Expert Mode": string; + "UNI has arrived": string; + "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; + "UNI {0}/{1} Burned": (string | string[])[]; + "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; + "UNI-V2 {0}-{1}": (string | string[])[]; + "Unclaimed UNI": string; + "Unclaimed fees": string; + Undetermined: string; + "Unexpected error. Could not estimate gas for the swap.": string; + "Unexpected issue with estimating the gas. Please try again.": string; + "Uniswap Governance": string; + "Uniswap Labs' Terms of Service": string; + "Uniswap available in: <0>{0}": (string | string[])[]; + "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; + "Uniswap liquidity mining": string; + "Uniswap migration contract\u2197": string; + "Unknown Source": string; + "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; + "Unlock Votes": string; + "Unlock Voting": string; + "Unlocking Votes": string; + "Unsupported Asset": string; + "Unsupported Assets": string; + "Unsupported network\u2013switch to another to trade.": string; + Untitled: string; + Unwrap: string; + "Unwrap <0/> to {0}": (string | string[])[]; + "Update Delegation": string; + "Update list": string; + "Use the Uniswap Labs API to get faster quotes.": string; + User: string; + "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; + "V2 liquidity": string; + "V3 {0} Price:": (string | string[])[]; + "View accrued fees and analytics<0>\u2197": string; + "View list": string; + "View on Etherscan": string; + "View on Explorer": string; + "View transaction on Explorer": string; + Vote: string; + "Vote Against": string; + "Vote For": string; + "Vote against proposal {proposalId}": (string | string[])[]; + "Vote against proposal {proposalKey}": (string | string[])[]; + "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote for proposal {proposalId}": (string | string[])[]; + "Vote for proposal {proposalKey}": (string | string[])[]; + "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote to abstain on proposal {proposalId}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Voting ended {0}": (string | string[])[]; + "Voting ends approximately {0}": (string | string[])[]; + "Voting starts approximately {0}": (string | string[])[]; + "Waiting For Confirmation": string; + "Wallet Address or ENS name": string; + "Weekly Rewards": string; + "Welcome to team Unicorn :)": string; + "When you claim without withdrawing your liquidity remains in the mining pool.": string; + "When you withdraw, the contract will automagically claim UNI on your behalf!": string; + "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; + Withdraw: string; + "Withdraw & Claim": string; + "Withdraw deposited liquidity": string; + "Withdrawing {0} UNI-V2": (string | string[])[]; + "Withdrew UNI-V2!": string; + Wrap: string; + "Wrap <0/> to {0}": (string | string[])[]; + "Wrong Network": string; + "You already have an active or pending proposal": string; + "You are creating a pool": string; + "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; + "You are the first liquidity provider.": string; + "You can either vote on each proposal yourself or delegate your votes to a third party.": string; + "You can now trade {0}": (string | string[])[]; + "You don't have enough votes to submit a proposal": string; + "You don\u2019t have liquidity in this pool yet.": string; + "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; + "You may have lost your network connection.": string; + "You might consider waiting until the network fees go down to complete this transaction.": string; + "You must connect an account.": string; + "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; + "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; + "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; + "You will also collect fees earned from this position.": string; + "You will receive": string; + "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; + "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; + "Your V2 liquidity": string; + "Your active V3 liquidity positions will appear here.": string; + "Your liquidity deposits": string; + "Your pool share:": string; + "Your position": string; + "Your position has 0 liquidity, and is not earning fees.": string; + "Your position will appear here.": string; + "Your position will be 100% composed of {0} at this price": (string | string[])[]; + "Your position will be 100% {0} at this price.": (string | string[])[]; + "Your position will not earn fees or be used in trades until the market price moves into your range.": string; + "Your positions": string; + "Your rate": string; + "Your total pool tokens:": string; + "Your transaction cost will be much higher as it includes the gas to create the pool.": string; + "Your transaction may be frontrun": string; + "Your transaction may fail": string; + "Your transaction will revert if it has been pending for longer than this period of time.": string; + "Your transaction will revert if it is pending for more than this period of time.": string; + "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; + "Your transactions will appear here...": string; + "Your unclaimed UNI": string; + "after slippage": string; + confirm: string; + "for {0}": (string | string[])[]; + gwei: string; + "has socks emoji": string; + "here.": string; + "https:// or ipfs:// or ENS name": string; + minutes: string; + "via {0}": (string | string[])[]; + "via {0} token list": (string | string[])[]; + "{0, plural, one {Import token} other {Import tokens}}": (string | { + one: string; + other: string; + })[][]; + "{0}": string[][]; + "{0} %": (string | string[])[]; + "{0} <0/> per <1/>": (string | string[])[]; + "{0} Custom Tokens": (string | string[])[]; + "{0} Deposited": (string | string[])[]; + "{0} ETH": (string | string[])[]; + "{0} Fees Earned:": (string | string[])[]; + "{0} Pending": (string | string[])[]; + "{0} UNI": (string | string[])[]; + "{0} UNI / week": (string | string[])[]; + "{0} UNI-V2": (string | string[])[]; + "{0} UNI-V2 LP tokens available": (string | string[])[]; + "{0} Votes": (string | string[])[]; + "{0} per {1}": (string | string[])[]; + "{0} tokens": (string | string[])[]; + "{0} {1} Price:": (string | string[])[]; + "{0} {nativeCurrencySymbol}": (string | string[])[]; + "{0} \u2022 Added by user": (string | string[])[]; + "{0}%": (string | string[])[]; + "{0}% fee tier": (string | string[])[]; + "{0}% pool": (string | string[])[]; + "{0}% select": (string | string[])[]; + "{0}-{1} Liquidity Mining": (string | string[])[]; + "{0}/{1} LP NFT": (string | string[])[]; + "{0}/{1} LP Tokens": (string | string[])[]; + "{SOCKS_AMOUNT} UNI": (string | string[])[]; + "{USER_AMOUNT} UNI": (string | string[])[]; + "{activeTokensOnThisChain} tokens": (string | string[])[]; + "{integrator} fee": (string | string[])[]; + "{label} token bridge": (string | string[])[]; + "{min}m {sec}s": (string | string[])[]; + "{percentForSlider}%": (string | string[])[]; + "{sec}s": (string | string[])[]; + "{tokenB} per {tokenA}": (string | string[])[]; + "\u2190 Back to Pools Overview": string; +}; diff --git a/dist2/types/locales/ja-JP.d.ts b/dist2/types/locales/ja-JP.d.ts new file mode 100644 index 00000000000..75120e0e5c9 --- /dev/null +++ b/dist2/types/locales/ja-JP.d.ts @@ -0,0 +1,593 @@ +export const messages: { + "$-": string; + "$<0/>": string; + "${0}": (string | string[])[]; + "(${0})": (string | string[])[]; + "(View on Explorer)": string; + "(clear all)": string; + "(edit)": string; + "- Remove recipient": string; + "0 UNI / week": string; + "25%": string; + "50%": string; + "75%": string; + "<0/> All Proposals": string; + "<0/> Votes": string; + "<0>Account analytics and accrued fees<1> \u2197 ": string; + "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; + "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; + "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; + "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; + "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; + "<0>Unlock voting to prepare for the next proposal.": string; + "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; + "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; + About: string; + Accept: string; + Account: string; + Active: string; + Add: string; + "Add <0/> and <1/> to Uniswap V2": string; + "Add Delegate +": string; + "Add Liquidity": string; + "Add V2 Liquidity": string; + "Add liquidity.": string; + "Add more liquidity": string; + "Add {0} to Metamask <0/>": (string | string[])[]; + "Add {0}-{1} liquidity": (string | string[])[]; + "Add {0}/{1} V3 liquidity": (string | string[])[]; + "Added {0}": (string | string[])[]; + "Address has no available claim": string; + Against: string; + "Allow LP token migration": string; + "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; + "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; + Allowed: string; + Amount: string; + "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Approval pending <0/>": string; + Approve: string; + "Approve Token": string; + "Approve {0}": (string | string[])[]; + "Approve {0} first": (string | string[])[]; + Approved: string; + Approving: string; + "Approving {0}": (string | string[])[]; + Arbiscan: string; + "Arbitrum Bridge": string; + "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Are you sure?": string; + "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; + "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; + Auto: string; + "Auto Router API": string; + "Available to deposit: {0}": (string | string[])[]; + "Balance: {0}": (string | string[])[]; + "Best for exotic pairs.": string; + "Best for most pairs.": string; + "Best for stable pairs.": string; + "Best for very stable pairs.": string; + "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; + "Blocked address": string; + Bridge: string; + "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; + "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; + Canceled: string; + Change: string; + Charts: string; + "Check network status": string; + "Check out our v3 LP walkthrough and migration guides.": string; + Claim: string; + "Claim <0/> for {0}": (string | string[])[]; + "Claim UNI": string; + "Claim UNI Token": string; + "Claim UNI reward for {0}": (string | string[])[]; + "Claim fees": string; + "Claim your UNI tokens": string; + Claimed: string; + "Claimed UNI!": string; + "Claimed!": string; + Claiming: string; + "Claiming UNI": string; + "Claiming {0} UNI": (string | string[])[]; + "Clear All": string; + "Clear all": string; + Close: string; + Closed: string; + Collect: string; + "Collect as WETH": string; + "Collect fees": string; + "Collect {0}/{1} fees": (string | string[])[]; + Collected: string; + Collecting: string; + "Collecting fees": string; + "Collecting fees will withdraw currently available fees for you.": string; + Confirm: string; + "Confirm Supply": string; + "Confirm Swap": string; + "Confirm swap": string; + "Confirm this transaction in your wallet": string; + "Confirm transaction in wallet": string; + "Connect Wallet": string; + "Connect a wallet": string; + "Connect to a wallet to find pools": string; + "Connect to a wallet to view your V2 liquidity.": string; + "Connect to a wallet to view your liquidity.": string; + "Connect wallet to swap": string; + "Connected with {name}": (string | string[])[]; + Copied: string; + "Copy Address": string; + "Create Pool & Supply": string; + "Create Proposal": string; + "Create a pair": string; + "Create a pool": string; + "Create an issue on GitHub": string; + "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; + "Create pool.": string; + "Create {0}/{1} V3 pool": (string | string[])[]; + "Current price": string; + "Current {0} Price:": (string | string[])[]; + Custom: string; + "Dark Theme": string; + Defeated: string; + "Delegate Votes": string; + "Delegate voting power to {0}": (string | string[])[]; + "Delegated to:": string; + "Delegating votes": string; + Deposit: string; + "Deposit Amounts": string; + "Deposit UNI-V2 LP Tokens": string; + "Deposit liquidity": string; + "Deposit tokens to the {label} network.": (string | string[])[]; + "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; + "Deposited liquidity:": string; + "Deposited {0} UNI-V2": (string | string[])[]; + "Depositing Liquidity": string; + Description: string; + Detailed: string; + Details: string; + Disconnect: string; + Discord: string; + Dismiss: string; + Docs: string; + "Don\u2019t see one of your v2 positions? <0>Import it.": string; + "Earned UNI tokens represent voting shares in Uniswap governance.": string; + Edit: string; + "Efficiency Comparison": string; + "Enter a percent": string; + "Enter a recipient": string; + "Enter a valid slippage percentage": string; + "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; + "Enter an amount": string; + "Enter valid list location": string; + "Enter valid token address": string; + "Enter {0} amount": (string | string[])[]; + Error: string; + "Error connecting": string; + "Error connecting. Try refreshing the page.": string; + "Error details": string; + "Error importing list": string; + "Estimate may differ due to your wallet gas settings": string; + "Estimated network fee": string; + Etherscan: string; + Executed: string; + "Expanded results from inactive Token Lists": string; + "Expected Output": string; + "Expert Mode": string; + "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; + Expired: string; + "Explore Uniswap Analytics.": string; + "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; + "Fee Tier": string; + "Fee tier": string; + "Fetching best price...": string; + "Fetching best price\u2026": string; + For: string; + "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; + From: string; + "From (at most)": string; + "Full Range": string; + "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; + "Get support on Discord": string; + "Help Center": string; + Hide: string; + "Hide closed positions": string; + "High Price Impact": string; + "How this app uses APIs": string; + "I understand": string; + "If you purchase a token from this list, you may not be able to sell it back.": string; + Import: string; + "Import List": string; + "Import Pool": string; + "Import V2 Pool": string; + "Import at your own risk": string; + "In range": string; + "Increase Liquidity": string; + "Initial prices and pool share": string; + "Initializing...": string; + "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Install Metamask": string; + "Insufficient liquidity for this trade.": string; + "Insufficient {0}": (string | string[])[]; + "Insufficient {0} balance": (string | string[])[]; + "Interface Settings": string; + "Invalid pair": string; + "Invalid pair.": string; + "Invalid price input": string; + "Invalid range selected. The min price must be lower than the max price.": string; + "Invalid recipient": string; + Language: string; + Learn: string; + "Learn about providing liquidity": string; + "Learn more": string; + "Legal & Privacy": string; + "Light Theme": string; + Liquidity: string; + "Liquidity data not available.": string; + "Liquidity provider rewards": string; + "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + Lists: string; + Loaded: string; + Loading: string; + MAX: string; + Manage: string; + "Manage Liquidity in Rewards Pool": string; + "Manage Token Lists": string; + "Manage this pool.": string; + Max: string; + "Max Price": string; + "Max price": string; + "Max slippage": string; + "Max:": string; + "Maximum sent": string; + Menu: string; + Migrate: string; + "Migrate Liquidity to V3": string; + "Migrate V2 Liquidity": string; + "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; + "Migrate {0}/{1} liquidity to V3": (string | string[])[]; + Migrating: string; + "Min Price": string; + "Min price": string; + "Min:": string; + "Minimum received": string; + "Missing dependencies": string; + "Mock Toggle": string; + More: string; + "Network Fee": string; + "Network Warning": string; + "Network fees exceed 50% of the swap amount!": string; + "New Position": string; + "No V2 Liquidity found.": string; + "No active pools": string; + "No data": string; + "No description.": string; + "No liquidity found.": string; + "No pool found.": string; + "No proposals found.": string; + "No results found.": string; + "Not created": string; + OFF: string; + ON: string; + "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; + Off: string; + On: string; + "Once you are happy with the rate click supply to review.": string; + "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; + "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; + "Optimism Gateway": string; + "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Optimistic Etherscan": string; + "Out of range": string; + "Output is estimated.": string; + "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; + "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Output will be sent to <0>{0}": (string | string[])[]; + Owner: string; + "Participating pools": string; + Pending: string; + "Please confirm you would like to remove this list by typing REMOVE": string; + "Please connect to Layer 1 Ethereum": string; + "Please connect to a supported network in the dropdown menu or in your wallet.": string; + "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; + "Polygon Bridge": string; + Polygonscan: string; + Pool: string; + "Pool Found!": string; + "Pool Rate": string; + "Pool rate": string; + "Pool tokens in rewards pool:": string; + "Pooled {0}:": (string | string[])[]; + "Pools Overview": string; + Preview: string; + Price: string; + "Price Difference:": string; + "Price Impact": string; + "Price Impact Too High": string; + "Price Updated": string; + "Price impact": string; + "Price range": string; + "Price updated": string; + "Price:": string; + "Prices and pool share": string; + Proposal: string; + "Proposal Submitted": string; + "Proposal Title": string; + Proposals: string; + "Proposals submitted by community members will appear here.": string; + "Proposed Action": string; + Proposer: string; + "Protocol Disclaimer": string; + Queued: string; + Rates: string; + "Read more about UNI": string; + "Read more about Uniswap governance": string; + "Read more about providing liquidity": string; + "Read more about unsupported assets": string; + "Recent Transactions": string; + "Recent transactions": string; + Recipient: string; + "Reload the page": string; + Remove: string; + "Remove <0/> and <1/>": string; + "Remove Amount": string; + "Remove Delegate": string; + "Remove Liquidity": string; + "Remove list": string; + "Removing {0} {1} and {2} {3}": (string | string[])[]; + "Removing {0} {1} and{2} {3}": (string | string[])[]; + "Request Features": string; + Reset: string; + Return: string; + "Review swap": string; + "Search by token name or address": string; + "Search name or paste address": string; + "Select Pair": string; + "Select a network": string; + "Select a token": string; + "Select a token to find your v2 liquidity.": string; + "Select an action": string; + "Selected Range": string; + Self: string; + "Self Delegate": string; + "Set Price Range": string; + "Set Starting Price": string; + Settings: string; + "Share of Pool": string; + "Share of Pool:": string; + "Show Portis": string; + "Show closed positions": string; + Simple: string; + "Slippage tolerance": string; + "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; + "Something went wrong": string; + "Something went wrong.": string; + "Step 1. Get UNI-V2 Liquidity tokens": string; + "Submit new proposal": string; + "Submitting Proposal": string; + "Submitting Vote": string; + Succeeded: string; + Success: string; + Supply: string; + "Supplying {0} {1} and {2} {3}": (string | string[])[]; + Swap: string; + "Swap <0/> for exactly <1/>": string; + "Swap Anyway": string; + "Swap details": string; + "Swap exactly <0/> for <1/>": string; + "Swap failed: {0}": (string | string[])[]; + "Swap summary": string; + "Swapping {0} {1} for {2} {3}": (string | string[])[]; + "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; + "Tell us what you think \u2197": string; + "Thanks for being part of the Uniswap community <0/>": string; + "The % you will earn in fees.": string; + "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; + "The app fetches blockchain data from The Graph\u2019s hosted service.": string; + "The app fetches on-chain data and constructs contract calls with an Infura API.": string; + "The app fetches the optimal trade route from a Uniswap Labs server.": string; + "The app logs anonymized usage statistics in order to improve over time.": string; + "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; + "The cost of sending this transaction is more than half of the value of the input amount.": string; + "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; + "The estimated difference between the USD values of input and output amounts.": string; + "The input token cannot be transferred. There may be an issue with the input token.": string; + "The market price is outside your specified price range. Single-asset deposit only.": string; + "The most recent block number on this network. Prices update on every block.": string; + "The output token cannot be transferred. There may be an issue with the output token.": string; + "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; + "The price of this pool is within your selected range. Your position is currently earning fees.": string; + "The ratio of tokens you add will set the price of this pool.": string; + "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; + "There is no liquidity data.": string; + "This app uses the following third-party APIs:": string; + "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; + "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; + "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; + "This token is not supported in the Uniswap Labs app": string; + "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; + "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; + "Tip: Custom tokens are stored locally in your browser": string; + To: string; + "To (at least)": string; + "Token not supported": string; + Tokens: string; + "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; + "Top pools": string; + "Total deposited": string; + "Total deposits": string; + "Trade Route": string; + Trading: string; + "Transaction Settings": string; + "Transaction Submitted": string; + "Transaction completed in": string; + "Transaction deadline": string; + "Transaction pending": string; + "Transaction rejected.": string; + "Transaction submitted": string; + "Transfer Token": string; + "Try Again": string; + "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Turn On Expert Mode": string; + "UNI has arrived": string; + "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; + "UNI {0}/{1} Burned": (string | string[])[]; + "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; + "UNI-V2 {0}-{1}": (string | string[])[]; + "Unclaimed UNI": string; + "Unclaimed fees": string; + Undetermined: string; + "Unexpected error. Could not estimate gas for the swap.": string; + "Unexpected issue with estimating the gas. Please try again.": string; + "Uniswap Governance": string; + "Uniswap Labs' Terms of Service": string; + "Uniswap available in: <0>{0}": (string | string[])[]; + "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; + "Uniswap liquidity mining": string; + "Uniswap migration contract\u2197": string; + "Unknown Source": string; + "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; + "Unlock Votes": string; + "Unlock Voting": string; + "Unlocking Votes": string; + "Unsupported Asset": string; + "Unsupported Assets": string; + "Unsupported network\u2013switch to another to trade.": string; + Untitled: string; + Unwrap: string; + "Unwrap <0/> to {0}": (string | string[])[]; + "Update Delegation": string; + "Update list": string; + "Use the Uniswap Labs API to get faster quotes.": string; + User: string; + "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; + "V2 liquidity": string; + "V3 {0} Price:": (string | string[])[]; + "View accrued fees and analytics<0>\u2197": string; + "View list": string; + "View on Etherscan": string; + "View on Explorer": string; + "View transaction on Explorer": string; + Vote: string; + "Vote Against": string; + "Vote For": string; + "Vote against proposal {proposalId}": (string | string[])[]; + "Vote against proposal {proposalKey}": (string | string[])[]; + "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote for proposal {proposalId}": (string | string[])[]; + "Vote for proposal {proposalKey}": (string | string[])[]; + "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote to abstain on proposal {proposalId}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Voting ended {0}": (string | string[])[]; + "Voting ends approximately {0}": (string | string[])[]; + "Voting starts approximately {0}": (string | string[])[]; + "Waiting For Confirmation": string; + "Wallet Address or ENS name": string; + "Weekly Rewards": string; + "Welcome to team Unicorn :)": string; + "When you claim without withdrawing your liquidity remains in the mining pool.": string; + "When you withdraw, the contract will automagically claim UNI on your behalf!": string; + "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; + Withdraw: string; + "Withdraw & Claim": string; + "Withdraw deposited liquidity": string; + "Withdrawing {0} UNI-V2": (string | string[])[]; + "Withdrew UNI-V2!": string; + Wrap: string; + "Wrap <0/> to {0}": (string | string[])[]; + "Wrong Network": string; + "You already have an active or pending proposal": string; + "You are creating a pool": string; + "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; + "You are the first liquidity provider.": string; + "You can either vote on each proposal yourself or delegate your votes to a third party.": string; + "You can now trade {0}": (string | string[])[]; + "You don't have enough votes to submit a proposal": string; + "You don\u2019t have liquidity in this pool yet.": string; + "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; + "You may have lost your network connection.": string; + "You might consider waiting until the network fees go down to complete this transaction.": string; + "You must connect an account.": string; + "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; + "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; + "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; + "You will also collect fees earned from this position.": string; + "You will receive": string; + "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; + "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; + "Your V2 liquidity": string; + "Your active V3 liquidity positions will appear here.": string; + "Your liquidity deposits": string; + "Your pool share:": string; + "Your position": string; + "Your position has 0 liquidity, and is not earning fees.": string; + "Your position will appear here.": string; + "Your position will be 100% composed of {0} at this price": (string | string[])[]; + "Your position will be 100% {0} at this price.": (string | string[])[]; + "Your position will not earn fees or be used in trades until the market price moves into your range.": string; + "Your positions": string; + "Your rate": string; + "Your total pool tokens:": string; + "Your transaction cost will be much higher as it includes the gas to create the pool.": string; + "Your transaction may be frontrun": string; + "Your transaction may fail": string; + "Your transaction will revert if it has been pending for longer than this period of time.": string; + "Your transaction will revert if it is pending for more than this period of time.": string; + "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; + "Your transactions will appear here...": string; + "Your unclaimed UNI": string; + "after slippage": string; + confirm: string; + "for {0}": (string | string[])[]; + gwei: string; + "has socks emoji": string; + "here.": string; + "https:// or ipfs:// or ENS name": string; + minutes: string; + "via {0}": (string | string[])[]; + "via {0} token list": (string | string[])[]; + "{0, plural, one {Import token} other {Import tokens}}": (string | { + one: string; + other: string; + })[][]; + "{0}": string[][]; + "{0} %": (string | string[])[]; + "{0} <0/> per <1/>": (string | string[])[]; + "{0} Custom Tokens": (string | string[])[]; + "{0} Deposited": (string | string[])[]; + "{0} ETH": (string | string[])[]; + "{0} Fees Earned:": (string | string[])[]; + "{0} Pending": (string | string[])[]; + "{0} UNI": (string | string[])[]; + "{0} UNI / week": (string | string[])[]; + "{0} UNI-V2": (string | string[])[]; + "{0} UNI-V2 LP tokens available": (string | string[])[]; + "{0} Votes": (string | string[])[]; + "{0} per {1}": (string | string[])[]; + "{0} tokens": (string | string[])[]; + "{0} {1} Price:": (string | string[])[]; + "{0} {nativeCurrencySymbol}": (string | string[])[]; + "{0} \u2022 Added by user": (string | string[])[]; + "{0}%": (string | string[])[]; + "{0}% fee tier": (string | string[])[]; + "{0}% pool": (string | string[])[]; + "{0}% select": (string | string[])[]; + "{0}-{1} Liquidity Mining": (string | string[])[]; + "{0}/{1} LP NFT": (string | string[])[]; + "{0}/{1} LP Tokens": (string | string[])[]; + "{SOCKS_AMOUNT} UNI": (string | string[])[]; + "{USER_AMOUNT} UNI": (string | string[])[]; + "{activeTokensOnThisChain} tokens": (string | string[])[]; + "{integrator} fee": (string | string[])[]; + "{label} token bridge": (string | string[])[]; + "{min}m {sec}s": (string | string[])[]; + "{percentForSlider}%": (string | string[])[]; + "{sec}s": (string | string[])[]; + "{tokenB} per {tokenA}": (string | string[])[]; + "\u2190 Back to Pools Overview": string; +}; diff --git a/dist2/types/locales/ko-KR.d.ts b/dist2/types/locales/ko-KR.d.ts new file mode 100644 index 00000000000..75120e0e5c9 --- /dev/null +++ b/dist2/types/locales/ko-KR.d.ts @@ -0,0 +1,593 @@ +export const messages: { + "$-": string; + "$<0/>": string; + "${0}": (string | string[])[]; + "(${0})": (string | string[])[]; + "(View on Explorer)": string; + "(clear all)": string; + "(edit)": string; + "- Remove recipient": string; + "0 UNI / week": string; + "25%": string; + "50%": string; + "75%": string; + "<0/> All Proposals": string; + "<0/> Votes": string; + "<0>Account analytics and accrued fees<1> \u2197 ": string; + "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; + "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; + "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; + "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; + "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; + "<0>Unlock voting to prepare for the next proposal.": string; + "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; + "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; + About: string; + Accept: string; + Account: string; + Active: string; + Add: string; + "Add <0/> and <1/> to Uniswap V2": string; + "Add Delegate +": string; + "Add Liquidity": string; + "Add V2 Liquidity": string; + "Add liquidity.": string; + "Add more liquidity": string; + "Add {0} to Metamask <0/>": (string | string[])[]; + "Add {0}-{1} liquidity": (string | string[])[]; + "Add {0}/{1} V3 liquidity": (string | string[])[]; + "Added {0}": (string | string[])[]; + "Address has no available claim": string; + Against: string; + "Allow LP token migration": string; + "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; + "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; + Allowed: string; + Amount: string; + "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Approval pending <0/>": string; + Approve: string; + "Approve Token": string; + "Approve {0}": (string | string[])[]; + "Approve {0} first": (string | string[])[]; + Approved: string; + Approving: string; + "Approving {0}": (string | string[])[]; + Arbiscan: string; + "Arbitrum Bridge": string; + "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Are you sure?": string; + "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; + "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; + Auto: string; + "Auto Router API": string; + "Available to deposit: {0}": (string | string[])[]; + "Balance: {0}": (string | string[])[]; + "Best for exotic pairs.": string; + "Best for most pairs.": string; + "Best for stable pairs.": string; + "Best for very stable pairs.": string; + "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; + "Blocked address": string; + Bridge: string; + "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; + "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; + Canceled: string; + Change: string; + Charts: string; + "Check network status": string; + "Check out our v3 LP walkthrough and migration guides.": string; + Claim: string; + "Claim <0/> for {0}": (string | string[])[]; + "Claim UNI": string; + "Claim UNI Token": string; + "Claim UNI reward for {0}": (string | string[])[]; + "Claim fees": string; + "Claim your UNI tokens": string; + Claimed: string; + "Claimed UNI!": string; + "Claimed!": string; + Claiming: string; + "Claiming UNI": string; + "Claiming {0} UNI": (string | string[])[]; + "Clear All": string; + "Clear all": string; + Close: string; + Closed: string; + Collect: string; + "Collect as WETH": string; + "Collect fees": string; + "Collect {0}/{1} fees": (string | string[])[]; + Collected: string; + Collecting: string; + "Collecting fees": string; + "Collecting fees will withdraw currently available fees for you.": string; + Confirm: string; + "Confirm Supply": string; + "Confirm Swap": string; + "Confirm swap": string; + "Confirm this transaction in your wallet": string; + "Confirm transaction in wallet": string; + "Connect Wallet": string; + "Connect a wallet": string; + "Connect to a wallet to find pools": string; + "Connect to a wallet to view your V2 liquidity.": string; + "Connect to a wallet to view your liquidity.": string; + "Connect wallet to swap": string; + "Connected with {name}": (string | string[])[]; + Copied: string; + "Copy Address": string; + "Create Pool & Supply": string; + "Create Proposal": string; + "Create a pair": string; + "Create a pool": string; + "Create an issue on GitHub": string; + "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; + "Create pool.": string; + "Create {0}/{1} V3 pool": (string | string[])[]; + "Current price": string; + "Current {0} Price:": (string | string[])[]; + Custom: string; + "Dark Theme": string; + Defeated: string; + "Delegate Votes": string; + "Delegate voting power to {0}": (string | string[])[]; + "Delegated to:": string; + "Delegating votes": string; + Deposit: string; + "Deposit Amounts": string; + "Deposit UNI-V2 LP Tokens": string; + "Deposit liquidity": string; + "Deposit tokens to the {label} network.": (string | string[])[]; + "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; + "Deposited liquidity:": string; + "Deposited {0} UNI-V2": (string | string[])[]; + "Depositing Liquidity": string; + Description: string; + Detailed: string; + Details: string; + Disconnect: string; + Discord: string; + Dismiss: string; + Docs: string; + "Don\u2019t see one of your v2 positions? <0>Import it.": string; + "Earned UNI tokens represent voting shares in Uniswap governance.": string; + Edit: string; + "Efficiency Comparison": string; + "Enter a percent": string; + "Enter a recipient": string; + "Enter a valid slippage percentage": string; + "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; + "Enter an amount": string; + "Enter valid list location": string; + "Enter valid token address": string; + "Enter {0} amount": (string | string[])[]; + Error: string; + "Error connecting": string; + "Error connecting. Try refreshing the page.": string; + "Error details": string; + "Error importing list": string; + "Estimate may differ due to your wallet gas settings": string; + "Estimated network fee": string; + Etherscan: string; + Executed: string; + "Expanded results from inactive Token Lists": string; + "Expected Output": string; + "Expert Mode": string; + "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; + Expired: string; + "Explore Uniswap Analytics.": string; + "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; + "Fee Tier": string; + "Fee tier": string; + "Fetching best price...": string; + "Fetching best price\u2026": string; + For: string; + "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; + From: string; + "From (at most)": string; + "Full Range": string; + "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; + "Get support on Discord": string; + "Help Center": string; + Hide: string; + "Hide closed positions": string; + "High Price Impact": string; + "How this app uses APIs": string; + "I understand": string; + "If you purchase a token from this list, you may not be able to sell it back.": string; + Import: string; + "Import List": string; + "Import Pool": string; + "Import V2 Pool": string; + "Import at your own risk": string; + "In range": string; + "Increase Liquidity": string; + "Initial prices and pool share": string; + "Initializing...": string; + "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Install Metamask": string; + "Insufficient liquidity for this trade.": string; + "Insufficient {0}": (string | string[])[]; + "Insufficient {0} balance": (string | string[])[]; + "Interface Settings": string; + "Invalid pair": string; + "Invalid pair.": string; + "Invalid price input": string; + "Invalid range selected. The min price must be lower than the max price.": string; + "Invalid recipient": string; + Language: string; + Learn: string; + "Learn about providing liquidity": string; + "Learn more": string; + "Legal & Privacy": string; + "Light Theme": string; + Liquidity: string; + "Liquidity data not available.": string; + "Liquidity provider rewards": string; + "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + Lists: string; + Loaded: string; + Loading: string; + MAX: string; + Manage: string; + "Manage Liquidity in Rewards Pool": string; + "Manage Token Lists": string; + "Manage this pool.": string; + Max: string; + "Max Price": string; + "Max price": string; + "Max slippage": string; + "Max:": string; + "Maximum sent": string; + Menu: string; + Migrate: string; + "Migrate Liquidity to V3": string; + "Migrate V2 Liquidity": string; + "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; + "Migrate {0}/{1} liquidity to V3": (string | string[])[]; + Migrating: string; + "Min Price": string; + "Min price": string; + "Min:": string; + "Minimum received": string; + "Missing dependencies": string; + "Mock Toggle": string; + More: string; + "Network Fee": string; + "Network Warning": string; + "Network fees exceed 50% of the swap amount!": string; + "New Position": string; + "No V2 Liquidity found.": string; + "No active pools": string; + "No data": string; + "No description.": string; + "No liquidity found.": string; + "No pool found.": string; + "No proposals found.": string; + "No results found.": string; + "Not created": string; + OFF: string; + ON: string; + "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; + Off: string; + On: string; + "Once you are happy with the rate click supply to review.": string; + "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; + "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; + "Optimism Gateway": string; + "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Optimistic Etherscan": string; + "Out of range": string; + "Output is estimated.": string; + "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; + "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Output will be sent to <0>{0}": (string | string[])[]; + Owner: string; + "Participating pools": string; + Pending: string; + "Please confirm you would like to remove this list by typing REMOVE": string; + "Please connect to Layer 1 Ethereum": string; + "Please connect to a supported network in the dropdown menu or in your wallet.": string; + "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; + "Polygon Bridge": string; + Polygonscan: string; + Pool: string; + "Pool Found!": string; + "Pool Rate": string; + "Pool rate": string; + "Pool tokens in rewards pool:": string; + "Pooled {0}:": (string | string[])[]; + "Pools Overview": string; + Preview: string; + Price: string; + "Price Difference:": string; + "Price Impact": string; + "Price Impact Too High": string; + "Price Updated": string; + "Price impact": string; + "Price range": string; + "Price updated": string; + "Price:": string; + "Prices and pool share": string; + Proposal: string; + "Proposal Submitted": string; + "Proposal Title": string; + Proposals: string; + "Proposals submitted by community members will appear here.": string; + "Proposed Action": string; + Proposer: string; + "Protocol Disclaimer": string; + Queued: string; + Rates: string; + "Read more about UNI": string; + "Read more about Uniswap governance": string; + "Read more about providing liquidity": string; + "Read more about unsupported assets": string; + "Recent Transactions": string; + "Recent transactions": string; + Recipient: string; + "Reload the page": string; + Remove: string; + "Remove <0/> and <1/>": string; + "Remove Amount": string; + "Remove Delegate": string; + "Remove Liquidity": string; + "Remove list": string; + "Removing {0} {1} and {2} {3}": (string | string[])[]; + "Removing {0} {1} and{2} {3}": (string | string[])[]; + "Request Features": string; + Reset: string; + Return: string; + "Review swap": string; + "Search by token name or address": string; + "Search name or paste address": string; + "Select Pair": string; + "Select a network": string; + "Select a token": string; + "Select a token to find your v2 liquidity.": string; + "Select an action": string; + "Selected Range": string; + Self: string; + "Self Delegate": string; + "Set Price Range": string; + "Set Starting Price": string; + Settings: string; + "Share of Pool": string; + "Share of Pool:": string; + "Show Portis": string; + "Show closed positions": string; + Simple: string; + "Slippage tolerance": string; + "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; + "Something went wrong": string; + "Something went wrong.": string; + "Step 1. Get UNI-V2 Liquidity tokens": string; + "Submit new proposal": string; + "Submitting Proposal": string; + "Submitting Vote": string; + Succeeded: string; + Success: string; + Supply: string; + "Supplying {0} {1} and {2} {3}": (string | string[])[]; + Swap: string; + "Swap <0/> for exactly <1/>": string; + "Swap Anyway": string; + "Swap details": string; + "Swap exactly <0/> for <1/>": string; + "Swap failed: {0}": (string | string[])[]; + "Swap summary": string; + "Swapping {0} {1} for {2} {3}": (string | string[])[]; + "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; + "Tell us what you think \u2197": string; + "Thanks for being part of the Uniswap community <0/>": string; + "The % you will earn in fees.": string; + "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; + "The app fetches blockchain data from The Graph\u2019s hosted service.": string; + "The app fetches on-chain data and constructs contract calls with an Infura API.": string; + "The app fetches the optimal trade route from a Uniswap Labs server.": string; + "The app logs anonymized usage statistics in order to improve over time.": string; + "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; + "The cost of sending this transaction is more than half of the value of the input amount.": string; + "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; + "The estimated difference between the USD values of input and output amounts.": string; + "The input token cannot be transferred. There may be an issue with the input token.": string; + "The market price is outside your specified price range. Single-asset deposit only.": string; + "The most recent block number on this network. Prices update on every block.": string; + "The output token cannot be transferred. There may be an issue with the output token.": string; + "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; + "The price of this pool is within your selected range. Your position is currently earning fees.": string; + "The ratio of tokens you add will set the price of this pool.": string; + "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; + "There is no liquidity data.": string; + "This app uses the following third-party APIs:": string; + "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; + "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; + "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; + "This token is not supported in the Uniswap Labs app": string; + "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; + "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; + "Tip: Custom tokens are stored locally in your browser": string; + To: string; + "To (at least)": string; + "Token not supported": string; + Tokens: string; + "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; + "Top pools": string; + "Total deposited": string; + "Total deposits": string; + "Trade Route": string; + Trading: string; + "Transaction Settings": string; + "Transaction Submitted": string; + "Transaction completed in": string; + "Transaction deadline": string; + "Transaction pending": string; + "Transaction rejected.": string; + "Transaction submitted": string; + "Transfer Token": string; + "Try Again": string; + "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Turn On Expert Mode": string; + "UNI has arrived": string; + "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; + "UNI {0}/{1} Burned": (string | string[])[]; + "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; + "UNI-V2 {0}-{1}": (string | string[])[]; + "Unclaimed UNI": string; + "Unclaimed fees": string; + Undetermined: string; + "Unexpected error. Could not estimate gas for the swap.": string; + "Unexpected issue with estimating the gas. Please try again.": string; + "Uniswap Governance": string; + "Uniswap Labs' Terms of Service": string; + "Uniswap available in: <0>{0}": (string | string[])[]; + "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; + "Uniswap liquidity mining": string; + "Uniswap migration contract\u2197": string; + "Unknown Source": string; + "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; + "Unlock Votes": string; + "Unlock Voting": string; + "Unlocking Votes": string; + "Unsupported Asset": string; + "Unsupported Assets": string; + "Unsupported network\u2013switch to another to trade.": string; + Untitled: string; + Unwrap: string; + "Unwrap <0/> to {0}": (string | string[])[]; + "Update Delegation": string; + "Update list": string; + "Use the Uniswap Labs API to get faster quotes.": string; + User: string; + "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; + "V2 liquidity": string; + "V3 {0} Price:": (string | string[])[]; + "View accrued fees and analytics<0>\u2197": string; + "View list": string; + "View on Etherscan": string; + "View on Explorer": string; + "View transaction on Explorer": string; + Vote: string; + "Vote Against": string; + "Vote For": string; + "Vote against proposal {proposalId}": (string | string[])[]; + "Vote against proposal {proposalKey}": (string | string[])[]; + "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote for proposal {proposalId}": (string | string[])[]; + "Vote for proposal {proposalKey}": (string | string[])[]; + "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote to abstain on proposal {proposalId}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Voting ended {0}": (string | string[])[]; + "Voting ends approximately {0}": (string | string[])[]; + "Voting starts approximately {0}": (string | string[])[]; + "Waiting For Confirmation": string; + "Wallet Address or ENS name": string; + "Weekly Rewards": string; + "Welcome to team Unicorn :)": string; + "When you claim without withdrawing your liquidity remains in the mining pool.": string; + "When you withdraw, the contract will automagically claim UNI on your behalf!": string; + "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; + Withdraw: string; + "Withdraw & Claim": string; + "Withdraw deposited liquidity": string; + "Withdrawing {0} UNI-V2": (string | string[])[]; + "Withdrew UNI-V2!": string; + Wrap: string; + "Wrap <0/> to {0}": (string | string[])[]; + "Wrong Network": string; + "You already have an active or pending proposal": string; + "You are creating a pool": string; + "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; + "You are the first liquidity provider.": string; + "You can either vote on each proposal yourself or delegate your votes to a third party.": string; + "You can now trade {0}": (string | string[])[]; + "You don't have enough votes to submit a proposal": string; + "You don\u2019t have liquidity in this pool yet.": string; + "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; + "You may have lost your network connection.": string; + "You might consider waiting until the network fees go down to complete this transaction.": string; + "You must connect an account.": string; + "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; + "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; + "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; + "You will also collect fees earned from this position.": string; + "You will receive": string; + "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; + "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; + "Your V2 liquidity": string; + "Your active V3 liquidity positions will appear here.": string; + "Your liquidity deposits": string; + "Your pool share:": string; + "Your position": string; + "Your position has 0 liquidity, and is not earning fees.": string; + "Your position will appear here.": string; + "Your position will be 100% composed of {0} at this price": (string | string[])[]; + "Your position will be 100% {0} at this price.": (string | string[])[]; + "Your position will not earn fees or be used in trades until the market price moves into your range.": string; + "Your positions": string; + "Your rate": string; + "Your total pool tokens:": string; + "Your transaction cost will be much higher as it includes the gas to create the pool.": string; + "Your transaction may be frontrun": string; + "Your transaction may fail": string; + "Your transaction will revert if it has been pending for longer than this period of time.": string; + "Your transaction will revert if it is pending for more than this period of time.": string; + "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; + "Your transactions will appear here...": string; + "Your unclaimed UNI": string; + "after slippage": string; + confirm: string; + "for {0}": (string | string[])[]; + gwei: string; + "has socks emoji": string; + "here.": string; + "https:// or ipfs:// or ENS name": string; + minutes: string; + "via {0}": (string | string[])[]; + "via {0} token list": (string | string[])[]; + "{0, plural, one {Import token} other {Import tokens}}": (string | { + one: string; + other: string; + })[][]; + "{0}": string[][]; + "{0} %": (string | string[])[]; + "{0} <0/> per <1/>": (string | string[])[]; + "{0} Custom Tokens": (string | string[])[]; + "{0} Deposited": (string | string[])[]; + "{0} ETH": (string | string[])[]; + "{0} Fees Earned:": (string | string[])[]; + "{0} Pending": (string | string[])[]; + "{0} UNI": (string | string[])[]; + "{0} UNI / week": (string | string[])[]; + "{0} UNI-V2": (string | string[])[]; + "{0} UNI-V2 LP tokens available": (string | string[])[]; + "{0} Votes": (string | string[])[]; + "{0} per {1}": (string | string[])[]; + "{0} tokens": (string | string[])[]; + "{0} {1} Price:": (string | string[])[]; + "{0} {nativeCurrencySymbol}": (string | string[])[]; + "{0} \u2022 Added by user": (string | string[])[]; + "{0}%": (string | string[])[]; + "{0}% fee tier": (string | string[])[]; + "{0}% pool": (string | string[])[]; + "{0}% select": (string | string[])[]; + "{0}-{1} Liquidity Mining": (string | string[])[]; + "{0}/{1} LP NFT": (string | string[])[]; + "{0}/{1} LP Tokens": (string | string[])[]; + "{SOCKS_AMOUNT} UNI": (string | string[])[]; + "{USER_AMOUNT} UNI": (string | string[])[]; + "{activeTokensOnThisChain} tokens": (string | string[])[]; + "{integrator} fee": (string | string[])[]; + "{label} token bridge": (string | string[])[]; + "{min}m {sec}s": (string | string[])[]; + "{percentForSlider}%": (string | string[])[]; + "{sec}s": (string | string[])[]; + "{tokenB} per {tokenA}": (string | string[])[]; + "\u2190 Back to Pools Overview": string; +}; diff --git a/dist2/types/locales/nl-NL.d.ts b/dist2/types/locales/nl-NL.d.ts new file mode 100644 index 00000000000..75120e0e5c9 --- /dev/null +++ b/dist2/types/locales/nl-NL.d.ts @@ -0,0 +1,593 @@ +export const messages: { + "$-": string; + "$<0/>": string; + "${0}": (string | string[])[]; + "(${0})": (string | string[])[]; + "(View on Explorer)": string; + "(clear all)": string; + "(edit)": string; + "- Remove recipient": string; + "0 UNI / week": string; + "25%": string; + "50%": string; + "75%": string; + "<0/> All Proposals": string; + "<0/> Votes": string; + "<0>Account analytics and accrued fees<1> \u2197 ": string; + "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; + "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; + "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; + "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; + "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; + "<0>Unlock voting to prepare for the next proposal.": string; + "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; + "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; + About: string; + Accept: string; + Account: string; + Active: string; + Add: string; + "Add <0/> and <1/> to Uniswap V2": string; + "Add Delegate +": string; + "Add Liquidity": string; + "Add V2 Liquidity": string; + "Add liquidity.": string; + "Add more liquidity": string; + "Add {0} to Metamask <0/>": (string | string[])[]; + "Add {0}-{1} liquidity": (string | string[])[]; + "Add {0}/{1} V3 liquidity": (string | string[])[]; + "Added {0}": (string | string[])[]; + "Address has no available claim": string; + Against: string; + "Allow LP token migration": string; + "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; + "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; + Allowed: string; + Amount: string; + "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Approval pending <0/>": string; + Approve: string; + "Approve Token": string; + "Approve {0}": (string | string[])[]; + "Approve {0} first": (string | string[])[]; + Approved: string; + Approving: string; + "Approving {0}": (string | string[])[]; + Arbiscan: string; + "Arbitrum Bridge": string; + "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Are you sure?": string; + "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; + "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; + Auto: string; + "Auto Router API": string; + "Available to deposit: {0}": (string | string[])[]; + "Balance: {0}": (string | string[])[]; + "Best for exotic pairs.": string; + "Best for most pairs.": string; + "Best for stable pairs.": string; + "Best for very stable pairs.": string; + "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; + "Blocked address": string; + Bridge: string; + "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; + "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; + Canceled: string; + Change: string; + Charts: string; + "Check network status": string; + "Check out our v3 LP walkthrough and migration guides.": string; + Claim: string; + "Claim <0/> for {0}": (string | string[])[]; + "Claim UNI": string; + "Claim UNI Token": string; + "Claim UNI reward for {0}": (string | string[])[]; + "Claim fees": string; + "Claim your UNI tokens": string; + Claimed: string; + "Claimed UNI!": string; + "Claimed!": string; + Claiming: string; + "Claiming UNI": string; + "Claiming {0} UNI": (string | string[])[]; + "Clear All": string; + "Clear all": string; + Close: string; + Closed: string; + Collect: string; + "Collect as WETH": string; + "Collect fees": string; + "Collect {0}/{1} fees": (string | string[])[]; + Collected: string; + Collecting: string; + "Collecting fees": string; + "Collecting fees will withdraw currently available fees for you.": string; + Confirm: string; + "Confirm Supply": string; + "Confirm Swap": string; + "Confirm swap": string; + "Confirm this transaction in your wallet": string; + "Confirm transaction in wallet": string; + "Connect Wallet": string; + "Connect a wallet": string; + "Connect to a wallet to find pools": string; + "Connect to a wallet to view your V2 liquidity.": string; + "Connect to a wallet to view your liquidity.": string; + "Connect wallet to swap": string; + "Connected with {name}": (string | string[])[]; + Copied: string; + "Copy Address": string; + "Create Pool & Supply": string; + "Create Proposal": string; + "Create a pair": string; + "Create a pool": string; + "Create an issue on GitHub": string; + "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; + "Create pool.": string; + "Create {0}/{1} V3 pool": (string | string[])[]; + "Current price": string; + "Current {0} Price:": (string | string[])[]; + Custom: string; + "Dark Theme": string; + Defeated: string; + "Delegate Votes": string; + "Delegate voting power to {0}": (string | string[])[]; + "Delegated to:": string; + "Delegating votes": string; + Deposit: string; + "Deposit Amounts": string; + "Deposit UNI-V2 LP Tokens": string; + "Deposit liquidity": string; + "Deposit tokens to the {label} network.": (string | string[])[]; + "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; + "Deposited liquidity:": string; + "Deposited {0} UNI-V2": (string | string[])[]; + "Depositing Liquidity": string; + Description: string; + Detailed: string; + Details: string; + Disconnect: string; + Discord: string; + Dismiss: string; + Docs: string; + "Don\u2019t see one of your v2 positions? <0>Import it.": string; + "Earned UNI tokens represent voting shares in Uniswap governance.": string; + Edit: string; + "Efficiency Comparison": string; + "Enter a percent": string; + "Enter a recipient": string; + "Enter a valid slippage percentage": string; + "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; + "Enter an amount": string; + "Enter valid list location": string; + "Enter valid token address": string; + "Enter {0} amount": (string | string[])[]; + Error: string; + "Error connecting": string; + "Error connecting. Try refreshing the page.": string; + "Error details": string; + "Error importing list": string; + "Estimate may differ due to your wallet gas settings": string; + "Estimated network fee": string; + Etherscan: string; + Executed: string; + "Expanded results from inactive Token Lists": string; + "Expected Output": string; + "Expert Mode": string; + "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; + Expired: string; + "Explore Uniswap Analytics.": string; + "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; + "Fee Tier": string; + "Fee tier": string; + "Fetching best price...": string; + "Fetching best price\u2026": string; + For: string; + "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; + From: string; + "From (at most)": string; + "Full Range": string; + "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; + "Get support on Discord": string; + "Help Center": string; + Hide: string; + "Hide closed positions": string; + "High Price Impact": string; + "How this app uses APIs": string; + "I understand": string; + "If you purchase a token from this list, you may not be able to sell it back.": string; + Import: string; + "Import List": string; + "Import Pool": string; + "Import V2 Pool": string; + "Import at your own risk": string; + "In range": string; + "Increase Liquidity": string; + "Initial prices and pool share": string; + "Initializing...": string; + "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Install Metamask": string; + "Insufficient liquidity for this trade.": string; + "Insufficient {0}": (string | string[])[]; + "Insufficient {0} balance": (string | string[])[]; + "Interface Settings": string; + "Invalid pair": string; + "Invalid pair.": string; + "Invalid price input": string; + "Invalid range selected. The min price must be lower than the max price.": string; + "Invalid recipient": string; + Language: string; + Learn: string; + "Learn about providing liquidity": string; + "Learn more": string; + "Legal & Privacy": string; + "Light Theme": string; + Liquidity: string; + "Liquidity data not available.": string; + "Liquidity provider rewards": string; + "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + Lists: string; + Loaded: string; + Loading: string; + MAX: string; + Manage: string; + "Manage Liquidity in Rewards Pool": string; + "Manage Token Lists": string; + "Manage this pool.": string; + Max: string; + "Max Price": string; + "Max price": string; + "Max slippage": string; + "Max:": string; + "Maximum sent": string; + Menu: string; + Migrate: string; + "Migrate Liquidity to V3": string; + "Migrate V2 Liquidity": string; + "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; + "Migrate {0}/{1} liquidity to V3": (string | string[])[]; + Migrating: string; + "Min Price": string; + "Min price": string; + "Min:": string; + "Minimum received": string; + "Missing dependencies": string; + "Mock Toggle": string; + More: string; + "Network Fee": string; + "Network Warning": string; + "Network fees exceed 50% of the swap amount!": string; + "New Position": string; + "No V2 Liquidity found.": string; + "No active pools": string; + "No data": string; + "No description.": string; + "No liquidity found.": string; + "No pool found.": string; + "No proposals found.": string; + "No results found.": string; + "Not created": string; + OFF: string; + ON: string; + "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; + Off: string; + On: string; + "Once you are happy with the rate click supply to review.": string; + "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; + "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; + "Optimism Gateway": string; + "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Optimistic Etherscan": string; + "Out of range": string; + "Output is estimated.": string; + "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; + "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Output will be sent to <0>{0}": (string | string[])[]; + Owner: string; + "Participating pools": string; + Pending: string; + "Please confirm you would like to remove this list by typing REMOVE": string; + "Please connect to Layer 1 Ethereum": string; + "Please connect to a supported network in the dropdown menu or in your wallet.": string; + "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; + "Polygon Bridge": string; + Polygonscan: string; + Pool: string; + "Pool Found!": string; + "Pool Rate": string; + "Pool rate": string; + "Pool tokens in rewards pool:": string; + "Pooled {0}:": (string | string[])[]; + "Pools Overview": string; + Preview: string; + Price: string; + "Price Difference:": string; + "Price Impact": string; + "Price Impact Too High": string; + "Price Updated": string; + "Price impact": string; + "Price range": string; + "Price updated": string; + "Price:": string; + "Prices and pool share": string; + Proposal: string; + "Proposal Submitted": string; + "Proposal Title": string; + Proposals: string; + "Proposals submitted by community members will appear here.": string; + "Proposed Action": string; + Proposer: string; + "Protocol Disclaimer": string; + Queued: string; + Rates: string; + "Read more about UNI": string; + "Read more about Uniswap governance": string; + "Read more about providing liquidity": string; + "Read more about unsupported assets": string; + "Recent Transactions": string; + "Recent transactions": string; + Recipient: string; + "Reload the page": string; + Remove: string; + "Remove <0/> and <1/>": string; + "Remove Amount": string; + "Remove Delegate": string; + "Remove Liquidity": string; + "Remove list": string; + "Removing {0} {1} and {2} {3}": (string | string[])[]; + "Removing {0} {1} and{2} {3}": (string | string[])[]; + "Request Features": string; + Reset: string; + Return: string; + "Review swap": string; + "Search by token name or address": string; + "Search name or paste address": string; + "Select Pair": string; + "Select a network": string; + "Select a token": string; + "Select a token to find your v2 liquidity.": string; + "Select an action": string; + "Selected Range": string; + Self: string; + "Self Delegate": string; + "Set Price Range": string; + "Set Starting Price": string; + Settings: string; + "Share of Pool": string; + "Share of Pool:": string; + "Show Portis": string; + "Show closed positions": string; + Simple: string; + "Slippage tolerance": string; + "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; + "Something went wrong": string; + "Something went wrong.": string; + "Step 1. Get UNI-V2 Liquidity tokens": string; + "Submit new proposal": string; + "Submitting Proposal": string; + "Submitting Vote": string; + Succeeded: string; + Success: string; + Supply: string; + "Supplying {0} {1} and {2} {3}": (string | string[])[]; + Swap: string; + "Swap <0/> for exactly <1/>": string; + "Swap Anyway": string; + "Swap details": string; + "Swap exactly <0/> for <1/>": string; + "Swap failed: {0}": (string | string[])[]; + "Swap summary": string; + "Swapping {0} {1} for {2} {3}": (string | string[])[]; + "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; + "Tell us what you think \u2197": string; + "Thanks for being part of the Uniswap community <0/>": string; + "The % you will earn in fees.": string; + "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; + "The app fetches blockchain data from The Graph\u2019s hosted service.": string; + "The app fetches on-chain data and constructs contract calls with an Infura API.": string; + "The app fetches the optimal trade route from a Uniswap Labs server.": string; + "The app logs anonymized usage statistics in order to improve over time.": string; + "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; + "The cost of sending this transaction is more than half of the value of the input amount.": string; + "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; + "The estimated difference between the USD values of input and output amounts.": string; + "The input token cannot be transferred. There may be an issue with the input token.": string; + "The market price is outside your specified price range. Single-asset deposit only.": string; + "The most recent block number on this network. Prices update on every block.": string; + "The output token cannot be transferred. There may be an issue with the output token.": string; + "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; + "The price of this pool is within your selected range. Your position is currently earning fees.": string; + "The ratio of tokens you add will set the price of this pool.": string; + "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; + "There is no liquidity data.": string; + "This app uses the following third-party APIs:": string; + "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; + "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; + "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; + "This token is not supported in the Uniswap Labs app": string; + "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; + "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; + "Tip: Custom tokens are stored locally in your browser": string; + To: string; + "To (at least)": string; + "Token not supported": string; + Tokens: string; + "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; + "Top pools": string; + "Total deposited": string; + "Total deposits": string; + "Trade Route": string; + Trading: string; + "Transaction Settings": string; + "Transaction Submitted": string; + "Transaction completed in": string; + "Transaction deadline": string; + "Transaction pending": string; + "Transaction rejected.": string; + "Transaction submitted": string; + "Transfer Token": string; + "Try Again": string; + "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Turn On Expert Mode": string; + "UNI has arrived": string; + "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; + "UNI {0}/{1} Burned": (string | string[])[]; + "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; + "UNI-V2 {0}-{1}": (string | string[])[]; + "Unclaimed UNI": string; + "Unclaimed fees": string; + Undetermined: string; + "Unexpected error. Could not estimate gas for the swap.": string; + "Unexpected issue with estimating the gas. Please try again.": string; + "Uniswap Governance": string; + "Uniswap Labs' Terms of Service": string; + "Uniswap available in: <0>{0}": (string | string[])[]; + "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; + "Uniswap liquidity mining": string; + "Uniswap migration contract\u2197": string; + "Unknown Source": string; + "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; + "Unlock Votes": string; + "Unlock Voting": string; + "Unlocking Votes": string; + "Unsupported Asset": string; + "Unsupported Assets": string; + "Unsupported network\u2013switch to another to trade.": string; + Untitled: string; + Unwrap: string; + "Unwrap <0/> to {0}": (string | string[])[]; + "Update Delegation": string; + "Update list": string; + "Use the Uniswap Labs API to get faster quotes.": string; + User: string; + "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; + "V2 liquidity": string; + "V3 {0} Price:": (string | string[])[]; + "View accrued fees and analytics<0>\u2197": string; + "View list": string; + "View on Etherscan": string; + "View on Explorer": string; + "View transaction on Explorer": string; + Vote: string; + "Vote Against": string; + "Vote For": string; + "Vote against proposal {proposalId}": (string | string[])[]; + "Vote against proposal {proposalKey}": (string | string[])[]; + "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote for proposal {proposalId}": (string | string[])[]; + "Vote for proposal {proposalKey}": (string | string[])[]; + "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote to abstain on proposal {proposalId}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Voting ended {0}": (string | string[])[]; + "Voting ends approximately {0}": (string | string[])[]; + "Voting starts approximately {0}": (string | string[])[]; + "Waiting For Confirmation": string; + "Wallet Address or ENS name": string; + "Weekly Rewards": string; + "Welcome to team Unicorn :)": string; + "When you claim without withdrawing your liquidity remains in the mining pool.": string; + "When you withdraw, the contract will automagically claim UNI on your behalf!": string; + "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; + Withdraw: string; + "Withdraw & Claim": string; + "Withdraw deposited liquidity": string; + "Withdrawing {0} UNI-V2": (string | string[])[]; + "Withdrew UNI-V2!": string; + Wrap: string; + "Wrap <0/> to {0}": (string | string[])[]; + "Wrong Network": string; + "You already have an active or pending proposal": string; + "You are creating a pool": string; + "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; + "You are the first liquidity provider.": string; + "You can either vote on each proposal yourself or delegate your votes to a third party.": string; + "You can now trade {0}": (string | string[])[]; + "You don't have enough votes to submit a proposal": string; + "You don\u2019t have liquidity in this pool yet.": string; + "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; + "You may have lost your network connection.": string; + "You might consider waiting until the network fees go down to complete this transaction.": string; + "You must connect an account.": string; + "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; + "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; + "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; + "You will also collect fees earned from this position.": string; + "You will receive": string; + "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; + "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; + "Your V2 liquidity": string; + "Your active V3 liquidity positions will appear here.": string; + "Your liquidity deposits": string; + "Your pool share:": string; + "Your position": string; + "Your position has 0 liquidity, and is not earning fees.": string; + "Your position will appear here.": string; + "Your position will be 100% composed of {0} at this price": (string | string[])[]; + "Your position will be 100% {0} at this price.": (string | string[])[]; + "Your position will not earn fees or be used in trades until the market price moves into your range.": string; + "Your positions": string; + "Your rate": string; + "Your total pool tokens:": string; + "Your transaction cost will be much higher as it includes the gas to create the pool.": string; + "Your transaction may be frontrun": string; + "Your transaction may fail": string; + "Your transaction will revert if it has been pending for longer than this period of time.": string; + "Your transaction will revert if it is pending for more than this period of time.": string; + "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; + "Your transactions will appear here...": string; + "Your unclaimed UNI": string; + "after slippage": string; + confirm: string; + "for {0}": (string | string[])[]; + gwei: string; + "has socks emoji": string; + "here.": string; + "https:// or ipfs:// or ENS name": string; + minutes: string; + "via {0}": (string | string[])[]; + "via {0} token list": (string | string[])[]; + "{0, plural, one {Import token} other {Import tokens}}": (string | { + one: string; + other: string; + })[][]; + "{0}": string[][]; + "{0} %": (string | string[])[]; + "{0} <0/> per <1/>": (string | string[])[]; + "{0} Custom Tokens": (string | string[])[]; + "{0} Deposited": (string | string[])[]; + "{0} ETH": (string | string[])[]; + "{0} Fees Earned:": (string | string[])[]; + "{0} Pending": (string | string[])[]; + "{0} UNI": (string | string[])[]; + "{0} UNI / week": (string | string[])[]; + "{0} UNI-V2": (string | string[])[]; + "{0} UNI-V2 LP tokens available": (string | string[])[]; + "{0} Votes": (string | string[])[]; + "{0} per {1}": (string | string[])[]; + "{0} tokens": (string | string[])[]; + "{0} {1} Price:": (string | string[])[]; + "{0} {nativeCurrencySymbol}": (string | string[])[]; + "{0} \u2022 Added by user": (string | string[])[]; + "{0}%": (string | string[])[]; + "{0}% fee tier": (string | string[])[]; + "{0}% pool": (string | string[])[]; + "{0}% select": (string | string[])[]; + "{0}-{1} Liquidity Mining": (string | string[])[]; + "{0}/{1} LP NFT": (string | string[])[]; + "{0}/{1} LP Tokens": (string | string[])[]; + "{SOCKS_AMOUNT} UNI": (string | string[])[]; + "{USER_AMOUNT} UNI": (string | string[])[]; + "{activeTokensOnThisChain} tokens": (string | string[])[]; + "{integrator} fee": (string | string[])[]; + "{label} token bridge": (string | string[])[]; + "{min}m {sec}s": (string | string[])[]; + "{percentForSlider}%": (string | string[])[]; + "{sec}s": (string | string[])[]; + "{tokenB} per {tokenA}": (string | string[])[]; + "\u2190 Back to Pools Overview": string; +}; diff --git a/dist2/types/locales/no-NO.d.ts b/dist2/types/locales/no-NO.d.ts new file mode 100644 index 00000000000..75120e0e5c9 --- /dev/null +++ b/dist2/types/locales/no-NO.d.ts @@ -0,0 +1,593 @@ +export const messages: { + "$-": string; + "$<0/>": string; + "${0}": (string | string[])[]; + "(${0})": (string | string[])[]; + "(View on Explorer)": string; + "(clear all)": string; + "(edit)": string; + "- Remove recipient": string; + "0 UNI / week": string; + "25%": string; + "50%": string; + "75%": string; + "<0/> All Proposals": string; + "<0/> Votes": string; + "<0>Account analytics and accrued fees<1> \u2197 ": string; + "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; + "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; + "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; + "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; + "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; + "<0>Unlock voting to prepare for the next proposal.": string; + "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; + "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; + About: string; + Accept: string; + Account: string; + Active: string; + Add: string; + "Add <0/> and <1/> to Uniswap V2": string; + "Add Delegate +": string; + "Add Liquidity": string; + "Add V2 Liquidity": string; + "Add liquidity.": string; + "Add more liquidity": string; + "Add {0} to Metamask <0/>": (string | string[])[]; + "Add {0}-{1} liquidity": (string | string[])[]; + "Add {0}/{1} V3 liquidity": (string | string[])[]; + "Added {0}": (string | string[])[]; + "Address has no available claim": string; + Against: string; + "Allow LP token migration": string; + "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; + "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; + Allowed: string; + Amount: string; + "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Approval pending <0/>": string; + Approve: string; + "Approve Token": string; + "Approve {0}": (string | string[])[]; + "Approve {0} first": (string | string[])[]; + Approved: string; + Approving: string; + "Approving {0}": (string | string[])[]; + Arbiscan: string; + "Arbitrum Bridge": string; + "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Are you sure?": string; + "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; + "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; + Auto: string; + "Auto Router API": string; + "Available to deposit: {0}": (string | string[])[]; + "Balance: {0}": (string | string[])[]; + "Best for exotic pairs.": string; + "Best for most pairs.": string; + "Best for stable pairs.": string; + "Best for very stable pairs.": string; + "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; + "Blocked address": string; + Bridge: string; + "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; + "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; + Canceled: string; + Change: string; + Charts: string; + "Check network status": string; + "Check out our v3 LP walkthrough and migration guides.": string; + Claim: string; + "Claim <0/> for {0}": (string | string[])[]; + "Claim UNI": string; + "Claim UNI Token": string; + "Claim UNI reward for {0}": (string | string[])[]; + "Claim fees": string; + "Claim your UNI tokens": string; + Claimed: string; + "Claimed UNI!": string; + "Claimed!": string; + Claiming: string; + "Claiming UNI": string; + "Claiming {0} UNI": (string | string[])[]; + "Clear All": string; + "Clear all": string; + Close: string; + Closed: string; + Collect: string; + "Collect as WETH": string; + "Collect fees": string; + "Collect {0}/{1} fees": (string | string[])[]; + Collected: string; + Collecting: string; + "Collecting fees": string; + "Collecting fees will withdraw currently available fees for you.": string; + Confirm: string; + "Confirm Supply": string; + "Confirm Swap": string; + "Confirm swap": string; + "Confirm this transaction in your wallet": string; + "Confirm transaction in wallet": string; + "Connect Wallet": string; + "Connect a wallet": string; + "Connect to a wallet to find pools": string; + "Connect to a wallet to view your V2 liquidity.": string; + "Connect to a wallet to view your liquidity.": string; + "Connect wallet to swap": string; + "Connected with {name}": (string | string[])[]; + Copied: string; + "Copy Address": string; + "Create Pool & Supply": string; + "Create Proposal": string; + "Create a pair": string; + "Create a pool": string; + "Create an issue on GitHub": string; + "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; + "Create pool.": string; + "Create {0}/{1} V3 pool": (string | string[])[]; + "Current price": string; + "Current {0} Price:": (string | string[])[]; + Custom: string; + "Dark Theme": string; + Defeated: string; + "Delegate Votes": string; + "Delegate voting power to {0}": (string | string[])[]; + "Delegated to:": string; + "Delegating votes": string; + Deposit: string; + "Deposit Amounts": string; + "Deposit UNI-V2 LP Tokens": string; + "Deposit liquidity": string; + "Deposit tokens to the {label} network.": (string | string[])[]; + "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; + "Deposited liquidity:": string; + "Deposited {0} UNI-V2": (string | string[])[]; + "Depositing Liquidity": string; + Description: string; + Detailed: string; + Details: string; + Disconnect: string; + Discord: string; + Dismiss: string; + Docs: string; + "Don\u2019t see one of your v2 positions? <0>Import it.": string; + "Earned UNI tokens represent voting shares in Uniswap governance.": string; + Edit: string; + "Efficiency Comparison": string; + "Enter a percent": string; + "Enter a recipient": string; + "Enter a valid slippage percentage": string; + "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; + "Enter an amount": string; + "Enter valid list location": string; + "Enter valid token address": string; + "Enter {0} amount": (string | string[])[]; + Error: string; + "Error connecting": string; + "Error connecting. Try refreshing the page.": string; + "Error details": string; + "Error importing list": string; + "Estimate may differ due to your wallet gas settings": string; + "Estimated network fee": string; + Etherscan: string; + Executed: string; + "Expanded results from inactive Token Lists": string; + "Expected Output": string; + "Expert Mode": string; + "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; + Expired: string; + "Explore Uniswap Analytics.": string; + "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; + "Fee Tier": string; + "Fee tier": string; + "Fetching best price...": string; + "Fetching best price\u2026": string; + For: string; + "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; + From: string; + "From (at most)": string; + "Full Range": string; + "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; + "Get support on Discord": string; + "Help Center": string; + Hide: string; + "Hide closed positions": string; + "High Price Impact": string; + "How this app uses APIs": string; + "I understand": string; + "If you purchase a token from this list, you may not be able to sell it back.": string; + Import: string; + "Import List": string; + "Import Pool": string; + "Import V2 Pool": string; + "Import at your own risk": string; + "In range": string; + "Increase Liquidity": string; + "Initial prices and pool share": string; + "Initializing...": string; + "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Install Metamask": string; + "Insufficient liquidity for this trade.": string; + "Insufficient {0}": (string | string[])[]; + "Insufficient {0} balance": (string | string[])[]; + "Interface Settings": string; + "Invalid pair": string; + "Invalid pair.": string; + "Invalid price input": string; + "Invalid range selected. The min price must be lower than the max price.": string; + "Invalid recipient": string; + Language: string; + Learn: string; + "Learn about providing liquidity": string; + "Learn more": string; + "Legal & Privacy": string; + "Light Theme": string; + Liquidity: string; + "Liquidity data not available.": string; + "Liquidity provider rewards": string; + "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + Lists: string; + Loaded: string; + Loading: string; + MAX: string; + Manage: string; + "Manage Liquidity in Rewards Pool": string; + "Manage Token Lists": string; + "Manage this pool.": string; + Max: string; + "Max Price": string; + "Max price": string; + "Max slippage": string; + "Max:": string; + "Maximum sent": string; + Menu: string; + Migrate: string; + "Migrate Liquidity to V3": string; + "Migrate V2 Liquidity": string; + "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; + "Migrate {0}/{1} liquidity to V3": (string | string[])[]; + Migrating: string; + "Min Price": string; + "Min price": string; + "Min:": string; + "Minimum received": string; + "Missing dependencies": string; + "Mock Toggle": string; + More: string; + "Network Fee": string; + "Network Warning": string; + "Network fees exceed 50% of the swap amount!": string; + "New Position": string; + "No V2 Liquidity found.": string; + "No active pools": string; + "No data": string; + "No description.": string; + "No liquidity found.": string; + "No pool found.": string; + "No proposals found.": string; + "No results found.": string; + "Not created": string; + OFF: string; + ON: string; + "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; + Off: string; + On: string; + "Once you are happy with the rate click supply to review.": string; + "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; + "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; + "Optimism Gateway": string; + "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Optimistic Etherscan": string; + "Out of range": string; + "Output is estimated.": string; + "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; + "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Output will be sent to <0>{0}": (string | string[])[]; + Owner: string; + "Participating pools": string; + Pending: string; + "Please confirm you would like to remove this list by typing REMOVE": string; + "Please connect to Layer 1 Ethereum": string; + "Please connect to a supported network in the dropdown menu or in your wallet.": string; + "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; + "Polygon Bridge": string; + Polygonscan: string; + Pool: string; + "Pool Found!": string; + "Pool Rate": string; + "Pool rate": string; + "Pool tokens in rewards pool:": string; + "Pooled {0}:": (string | string[])[]; + "Pools Overview": string; + Preview: string; + Price: string; + "Price Difference:": string; + "Price Impact": string; + "Price Impact Too High": string; + "Price Updated": string; + "Price impact": string; + "Price range": string; + "Price updated": string; + "Price:": string; + "Prices and pool share": string; + Proposal: string; + "Proposal Submitted": string; + "Proposal Title": string; + Proposals: string; + "Proposals submitted by community members will appear here.": string; + "Proposed Action": string; + Proposer: string; + "Protocol Disclaimer": string; + Queued: string; + Rates: string; + "Read more about UNI": string; + "Read more about Uniswap governance": string; + "Read more about providing liquidity": string; + "Read more about unsupported assets": string; + "Recent Transactions": string; + "Recent transactions": string; + Recipient: string; + "Reload the page": string; + Remove: string; + "Remove <0/> and <1/>": string; + "Remove Amount": string; + "Remove Delegate": string; + "Remove Liquidity": string; + "Remove list": string; + "Removing {0} {1} and {2} {3}": (string | string[])[]; + "Removing {0} {1} and{2} {3}": (string | string[])[]; + "Request Features": string; + Reset: string; + Return: string; + "Review swap": string; + "Search by token name or address": string; + "Search name or paste address": string; + "Select Pair": string; + "Select a network": string; + "Select a token": string; + "Select a token to find your v2 liquidity.": string; + "Select an action": string; + "Selected Range": string; + Self: string; + "Self Delegate": string; + "Set Price Range": string; + "Set Starting Price": string; + Settings: string; + "Share of Pool": string; + "Share of Pool:": string; + "Show Portis": string; + "Show closed positions": string; + Simple: string; + "Slippage tolerance": string; + "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; + "Something went wrong": string; + "Something went wrong.": string; + "Step 1. Get UNI-V2 Liquidity tokens": string; + "Submit new proposal": string; + "Submitting Proposal": string; + "Submitting Vote": string; + Succeeded: string; + Success: string; + Supply: string; + "Supplying {0} {1} and {2} {3}": (string | string[])[]; + Swap: string; + "Swap <0/> for exactly <1/>": string; + "Swap Anyway": string; + "Swap details": string; + "Swap exactly <0/> for <1/>": string; + "Swap failed: {0}": (string | string[])[]; + "Swap summary": string; + "Swapping {0} {1} for {2} {3}": (string | string[])[]; + "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; + "Tell us what you think \u2197": string; + "Thanks for being part of the Uniswap community <0/>": string; + "The % you will earn in fees.": string; + "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; + "The app fetches blockchain data from The Graph\u2019s hosted service.": string; + "The app fetches on-chain data and constructs contract calls with an Infura API.": string; + "The app fetches the optimal trade route from a Uniswap Labs server.": string; + "The app logs anonymized usage statistics in order to improve over time.": string; + "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; + "The cost of sending this transaction is more than half of the value of the input amount.": string; + "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; + "The estimated difference between the USD values of input and output amounts.": string; + "The input token cannot be transferred. There may be an issue with the input token.": string; + "The market price is outside your specified price range. Single-asset deposit only.": string; + "The most recent block number on this network. Prices update on every block.": string; + "The output token cannot be transferred. There may be an issue with the output token.": string; + "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; + "The price of this pool is within your selected range. Your position is currently earning fees.": string; + "The ratio of tokens you add will set the price of this pool.": string; + "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; + "There is no liquidity data.": string; + "This app uses the following third-party APIs:": string; + "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; + "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; + "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; + "This token is not supported in the Uniswap Labs app": string; + "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; + "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; + "Tip: Custom tokens are stored locally in your browser": string; + To: string; + "To (at least)": string; + "Token not supported": string; + Tokens: string; + "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; + "Top pools": string; + "Total deposited": string; + "Total deposits": string; + "Trade Route": string; + Trading: string; + "Transaction Settings": string; + "Transaction Submitted": string; + "Transaction completed in": string; + "Transaction deadline": string; + "Transaction pending": string; + "Transaction rejected.": string; + "Transaction submitted": string; + "Transfer Token": string; + "Try Again": string; + "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Turn On Expert Mode": string; + "UNI has arrived": string; + "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; + "UNI {0}/{1} Burned": (string | string[])[]; + "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; + "UNI-V2 {0}-{1}": (string | string[])[]; + "Unclaimed UNI": string; + "Unclaimed fees": string; + Undetermined: string; + "Unexpected error. Could not estimate gas for the swap.": string; + "Unexpected issue with estimating the gas. Please try again.": string; + "Uniswap Governance": string; + "Uniswap Labs' Terms of Service": string; + "Uniswap available in: <0>{0}": (string | string[])[]; + "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; + "Uniswap liquidity mining": string; + "Uniswap migration contract\u2197": string; + "Unknown Source": string; + "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; + "Unlock Votes": string; + "Unlock Voting": string; + "Unlocking Votes": string; + "Unsupported Asset": string; + "Unsupported Assets": string; + "Unsupported network\u2013switch to another to trade.": string; + Untitled: string; + Unwrap: string; + "Unwrap <0/> to {0}": (string | string[])[]; + "Update Delegation": string; + "Update list": string; + "Use the Uniswap Labs API to get faster quotes.": string; + User: string; + "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; + "V2 liquidity": string; + "V3 {0} Price:": (string | string[])[]; + "View accrued fees and analytics<0>\u2197": string; + "View list": string; + "View on Etherscan": string; + "View on Explorer": string; + "View transaction on Explorer": string; + Vote: string; + "Vote Against": string; + "Vote For": string; + "Vote against proposal {proposalId}": (string | string[])[]; + "Vote against proposal {proposalKey}": (string | string[])[]; + "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote for proposal {proposalId}": (string | string[])[]; + "Vote for proposal {proposalKey}": (string | string[])[]; + "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote to abstain on proposal {proposalId}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Voting ended {0}": (string | string[])[]; + "Voting ends approximately {0}": (string | string[])[]; + "Voting starts approximately {0}": (string | string[])[]; + "Waiting For Confirmation": string; + "Wallet Address or ENS name": string; + "Weekly Rewards": string; + "Welcome to team Unicorn :)": string; + "When you claim without withdrawing your liquidity remains in the mining pool.": string; + "When you withdraw, the contract will automagically claim UNI on your behalf!": string; + "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; + Withdraw: string; + "Withdraw & Claim": string; + "Withdraw deposited liquidity": string; + "Withdrawing {0} UNI-V2": (string | string[])[]; + "Withdrew UNI-V2!": string; + Wrap: string; + "Wrap <0/> to {0}": (string | string[])[]; + "Wrong Network": string; + "You already have an active or pending proposal": string; + "You are creating a pool": string; + "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; + "You are the first liquidity provider.": string; + "You can either vote on each proposal yourself or delegate your votes to a third party.": string; + "You can now trade {0}": (string | string[])[]; + "You don't have enough votes to submit a proposal": string; + "You don\u2019t have liquidity in this pool yet.": string; + "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; + "You may have lost your network connection.": string; + "You might consider waiting until the network fees go down to complete this transaction.": string; + "You must connect an account.": string; + "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; + "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; + "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; + "You will also collect fees earned from this position.": string; + "You will receive": string; + "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; + "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; + "Your V2 liquidity": string; + "Your active V3 liquidity positions will appear here.": string; + "Your liquidity deposits": string; + "Your pool share:": string; + "Your position": string; + "Your position has 0 liquidity, and is not earning fees.": string; + "Your position will appear here.": string; + "Your position will be 100% composed of {0} at this price": (string | string[])[]; + "Your position will be 100% {0} at this price.": (string | string[])[]; + "Your position will not earn fees or be used in trades until the market price moves into your range.": string; + "Your positions": string; + "Your rate": string; + "Your total pool tokens:": string; + "Your transaction cost will be much higher as it includes the gas to create the pool.": string; + "Your transaction may be frontrun": string; + "Your transaction may fail": string; + "Your transaction will revert if it has been pending for longer than this period of time.": string; + "Your transaction will revert if it is pending for more than this period of time.": string; + "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; + "Your transactions will appear here...": string; + "Your unclaimed UNI": string; + "after slippage": string; + confirm: string; + "for {0}": (string | string[])[]; + gwei: string; + "has socks emoji": string; + "here.": string; + "https:// or ipfs:// or ENS name": string; + minutes: string; + "via {0}": (string | string[])[]; + "via {0} token list": (string | string[])[]; + "{0, plural, one {Import token} other {Import tokens}}": (string | { + one: string; + other: string; + })[][]; + "{0}": string[][]; + "{0} %": (string | string[])[]; + "{0} <0/> per <1/>": (string | string[])[]; + "{0} Custom Tokens": (string | string[])[]; + "{0} Deposited": (string | string[])[]; + "{0} ETH": (string | string[])[]; + "{0} Fees Earned:": (string | string[])[]; + "{0} Pending": (string | string[])[]; + "{0} UNI": (string | string[])[]; + "{0} UNI / week": (string | string[])[]; + "{0} UNI-V2": (string | string[])[]; + "{0} UNI-V2 LP tokens available": (string | string[])[]; + "{0} Votes": (string | string[])[]; + "{0} per {1}": (string | string[])[]; + "{0} tokens": (string | string[])[]; + "{0} {1} Price:": (string | string[])[]; + "{0} {nativeCurrencySymbol}": (string | string[])[]; + "{0} \u2022 Added by user": (string | string[])[]; + "{0}%": (string | string[])[]; + "{0}% fee tier": (string | string[])[]; + "{0}% pool": (string | string[])[]; + "{0}% select": (string | string[])[]; + "{0}-{1} Liquidity Mining": (string | string[])[]; + "{0}/{1} LP NFT": (string | string[])[]; + "{0}/{1} LP Tokens": (string | string[])[]; + "{SOCKS_AMOUNT} UNI": (string | string[])[]; + "{USER_AMOUNT} UNI": (string | string[])[]; + "{activeTokensOnThisChain} tokens": (string | string[])[]; + "{integrator} fee": (string | string[])[]; + "{label} token bridge": (string | string[])[]; + "{min}m {sec}s": (string | string[])[]; + "{percentForSlider}%": (string | string[])[]; + "{sec}s": (string | string[])[]; + "{tokenB} per {tokenA}": (string | string[])[]; + "\u2190 Back to Pools Overview": string; +}; diff --git a/dist2/types/locales/pl-PL.d.ts b/dist2/types/locales/pl-PL.d.ts new file mode 100644 index 00000000000..261a7fbd1ca --- /dev/null +++ b/dist2/types/locales/pl-PL.d.ts @@ -0,0 +1,593 @@ +export const messages: { + "$-": string; + "$<0/>": string; + "${0}": (string | string[])[]; + "(${0})": (string | string[])[]; + "(View on Explorer)": string; + "(clear all)": string; + "(edit)": string; + "- Remove recipient": string; + "0 UNI / week": string; + "25%": string; + "50%": string; + "75%": string; + "<0/> All Proposals": string; + "<0/> Votes": string; + "<0>Account analytics and accrued fees<1> \u2197 ": string; + "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; + "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; + "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; + "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; + "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; + "<0>Unlock voting to prepare for the next proposal.": string; + "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; + "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; + About: string; + Accept: string; + Account: string; + Active: string; + Add: string; + "Add <0/> and <1/> to Uniswap V2": string; + "Add Delegate +": string; + "Add Liquidity": string; + "Add V2 Liquidity": string; + "Add liquidity.": string; + "Add more liquidity": string; + "Add {0} to Metamask <0/>": (string | string[])[]; + "Add {0}-{1} liquidity": (string | string[])[]; + "Add {0}/{1} V3 liquidity": (string | string[])[]; + "Added {0}": (string | string[])[]; + "Address has no available claim": string; + Against: string; + "Allow LP token migration": string; + "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; + "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; + Allowed: string; + Amount: string; + "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Approval pending <0/>": string; + Approve: string; + "Approve Token": string; + "Approve {0}": (string | string[])[]; + "Approve {0} first": (string | string[])[]; + Approved: string; + Approving: string; + "Approving {0}": (string | string[])[]; + Arbiscan: string; + "Arbitrum Bridge": string; + "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Are you sure?": string; + "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; + "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; + Auto: string; + "Auto Router API": string; + "Available to deposit: {0}": (string | string[])[]; + "Balance: {0}": (string | string[])[]; + "Best for exotic pairs.": string; + "Best for most pairs.": string; + "Best for stable pairs.": string; + "Best for very stable pairs.": string; + "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; + "Blocked address": string; + Bridge: string; + "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; + "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; + Canceled: string; + Change: string; + Charts: string; + "Check network status": string; + "Check out our v3 LP walkthrough and migration guides.": string; + Claim: string; + "Claim <0/> for {0}": (string | string[])[]; + "Claim UNI": string; + "Claim UNI Token": string; + "Claim UNI reward for {0}": (string | string[])[]; + "Claim fees": string; + "Claim your UNI tokens": string; + Claimed: string; + "Claimed UNI!": string; + "Claimed!": string; + Claiming: string; + "Claiming UNI": string; + "Claiming {0} UNI": (string | string[])[]; + "Clear All": string; + "Clear all": string; + Close: string; + Closed: string; + Collect: string; + "Collect as WETH": string; + "Collect fees": string; + "Collect {0}/{1} fees": (string | string[])[]; + Collected: string; + Collecting: string; + "Collecting fees": string; + "Collecting fees will withdraw currently available fees for you.": string; + Confirm: string; + "Confirm Supply": string; + "Confirm Swap": string; + "Confirm swap": string; + "Confirm this transaction in your wallet": string; + "Confirm transaction in wallet": string; + "Connect Wallet": string; + "Connect a wallet": string; + "Connect to a wallet to find pools": string; + "Connect to a wallet to view your V2 liquidity.": string; + "Connect to a wallet to view your liquidity.": string; + "Connect wallet to swap": string; + "Connected with {name}": (string | string[])[]; + Copied: string; + "Copy Address": string; + "Create Pool & Supply": string; + "Create Proposal": string; + "Create a pair": string; + "Create a pool": string; + "Create an issue on GitHub": string; + "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; + "Create pool.": string; + "Create {0}/{1} V3 pool": (string | string[])[]; + "Current price": string; + "Current {0} Price:": (string | string[])[]; + Custom: string; + "Dark Theme": string; + Defeated: string; + "Delegate Votes": string; + "Delegate voting power to {0}": (string | string[])[]; + "Delegated to:": string; + "Delegating votes": string; + Deposit: string; + "Deposit Amounts": string; + "Deposit UNI-V2 LP Tokens": string; + "Deposit liquidity": string; + "Deposit tokens to the {label} network.": (string | string[])[]; + "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; + "Deposited liquidity:": string; + "Deposited {0} UNI-V2": (string | string[])[]; + "Depositing Liquidity": string; + Description: string; + Detailed: string; + Details: string; + Disconnect: string; + Discord: string; + Dismiss: string; + Docs: string; + "Don\u2019t see one of your v2 positions? <0>Import it.": string; + "Earned UNI tokens represent voting shares in Uniswap governance.": string; + Edit: string; + "Efficiency Comparison": string; + "Enter a percent": string; + "Enter a recipient": string; + "Enter a valid slippage percentage": string; + "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; + "Enter an amount": string; + "Enter valid list location": string; + "Enter valid token address": string; + "Enter {0} amount": (string | string[])[]; + Error: string; + "Error connecting": string; + "Error connecting. Try refreshing the page.": string; + "Error details": string; + "Error importing list": string; + "Estimate may differ due to your wallet gas settings": string; + "Estimated network fee": string; + Etherscan: string; + Executed: string; + "Expanded results from inactive Token Lists": string; + "Expected Output": string; + "Expert Mode": string; + "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; + Expired: string; + "Explore Uniswap Analytics.": string; + "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; + "Fee Tier": string; + "Fee tier": string; + "Fetching best price...": string; + "Fetching best price\u2026": string; + For: string; + "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; + From: string; + "From (at most)": string; + "Full Range": string; + "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; + "Get support on Discord": string; + "Help Center": string; + Hide: string; + "Hide closed positions": string; + "High Price Impact": string; + "How this app uses APIs": string; + "I understand": string; + "If you purchase a token from this list, you may not be able to sell it back.": string; + Import: string; + "Import List": string; + "Import Pool": string; + "Import V2 Pool": string; + "Import at your own risk": string; + "In range": string; + "Increase Liquidity": string; + "Initial prices and pool share": string; + "Initializing...": string; + "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Install Metamask": string; + "Insufficient liquidity for this trade.": string; + "Insufficient {0}": (string | string[])[]; + "Insufficient {0} balance": (string | string[])[]; + "Interface Settings": string; + "Invalid pair": string; + "Invalid pair.": string; + "Invalid price input": string; + "Invalid range selected. The min price must be lower than the max price.": string; + "Invalid recipient": string; + Language: string; + Learn: string; + "Learn about providing liquidity": string; + "Learn more": string; + "Legal & Privacy": string; + "Light Theme": string; + Liquidity: string; + "Liquidity data not available.": string; + "Liquidity provider rewards": string; + "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + Lists: string; + Loaded: string; + Loading: string; + MAX: string; + Manage: string; + "Manage Liquidity in Rewards Pool": string; + "Manage Token Lists": string; + "Manage this pool.": string; + Max: string; + "Max Price": string; + "Max price": string; + "Max slippage": string; + "Max:": string; + "Maximum sent": string; + Menu: string; + Migrate: string; + "Migrate Liquidity to V3": string; + "Migrate V2 Liquidity": string; + "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; + "Migrate {0}/{1} liquidity to V3": (string | string[])[]; + Migrating: string; + "Min Price": string; + "Min price": string; + "Min:": string; + "Minimum received": string; + "Missing dependencies": string; + "Mock Toggle": string; + More: string; + "Network Fee": string; + "Network Warning": string; + "Network fees exceed 50% of the swap amount!": string; + "New Position": string; + "No V2 Liquidity found.": string; + "No active pools": string; + "No data": string; + "No description.": string; + "No liquidity found.": string; + "No pool found.": string; + "No proposals found.": string; + "No results found.": string; + "Not created": string; + OFF: string; + ON: string; + "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; + Off: string; + On: string; + "Once you are happy with the rate click supply to review.": string; + "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; + "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; + "Optimism Gateway": string; + "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Optimistic Etherscan": string; + "Out of range": string; + "Output is estimated.": string; + "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; + "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Output will be sent to <0>{0}": (string | string[])[]; + Owner: string; + "Participating pools": string; + Pending: string; + "Please confirm you would like to remove this list by typing REMOVE": string; + "Please connect to Layer 1 Ethereum": string; + "Please connect to a supported network in the dropdown menu or in your wallet.": string; + "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; + "Polygon Bridge": string; + Polygonscan: string; + Pool: string; + "Pool Found!": string; + "Pool Rate": string; + "Pool rate": string; + "Pool tokens in rewards pool:": string; + "Pooled {0}:": (string | string[])[]; + "Pools Overview": string; + Preview: string; + Price: string; + "Price Difference:": string; + "Price Impact": string; + "Price Impact Too High": string; + "Price Updated": string; + "Price impact": string; + "Price range": string; + "Price updated": string; + "Price:": string; + "Prices and pool share": string; + Proposal: string; + "Proposal Submitted": string; + "Proposal Title": string; + Proposals: string; + "Proposals submitted by community members will appear here.": string; + "Proposed Action": string; + Proposer: string; + "Protocol Disclaimer": string; + Queued: string; + Rates: string; + "Read more about UNI": string; + "Read more about Uniswap governance": string; + "Read more about providing liquidity": string; + "Read more about unsupported assets": string; + "Recent Transactions": string; + "Recent transactions": string; + Recipient: string; + "Reload the page": string; + Remove: string; + "Remove <0/> and <1/>": string; + "Remove Amount": string; + "Remove Delegate": string; + "Remove Liquidity": string; + "Remove list": string; + "Removing {0} {1} and {2} {3}": (string | string[])[]; + "Removing {0} {1} and{2} {3}": (string | string[])[]; + "Request Features": string; + Reset: string; + Return: string; + "Review swap": string; + "Search by token name or address": string; + "Search name or paste address": string; + "Select Pair": string; + "Select a network": string; + "Select a token": string; + "Select a token to find your v2 liquidity.": string; + "Select an action": string; + "Selected Range": string; + Self: string; + "Self Delegate": string; + "Set Price Range": string; + "Set Starting Price": string; + Settings: string; + "Share of Pool": string; + "Share of Pool:": string; + "Show Portis": string; + "Show closed positions": string; + Simple: string; + "Slippage tolerance": string; + "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; + "Something went wrong": string; + "Something went wrong.": string; + "Step 1. Get UNI-V2 Liquidity tokens": string; + "Submit new proposal": string; + "Submitting Proposal": string; + "Submitting Vote": string; + Succeeded: string; + Success: string; + Supply: string; + "Supplying {0} {1} and {2} {3}": (string | string[])[]; + Swap: string; + "Swap <0/> for exactly <1/>": string; + "Swap Anyway": string; + "Swap details": string; + "Swap exactly <0/> for <1/>": string; + "Swap failed: {0}": (string | string[])[]; + "Swap summary": string; + "Swapping {0} {1} for {2} {3}": (string | string[])[]; + "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; + "Tell us what you think \u2197": string; + "Thanks for being part of the Uniswap community <0/>": string; + "The % you will earn in fees.": string; + "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; + "The app fetches blockchain data from The Graph\u2019s hosted service.": string; + "The app fetches on-chain data and constructs contract calls with an Infura API.": string; + "The app fetches the optimal trade route from a Uniswap Labs server.": string; + "The app logs anonymized usage statistics in order to improve over time.": string; + "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; + "The cost of sending this transaction is more than half of the value of the input amount.": string; + "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; + "The estimated difference between the USD values of input and output amounts.": string; + "The input token cannot be transferred. There may be an issue with the input token.": string; + "The market price is outside your specified price range. Single-asset deposit only.": string; + "The most recent block number on this network. Prices update on every block.": string; + "The output token cannot be transferred. There may be an issue with the output token.": string; + "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; + "The price of this pool is within your selected range. Your position is currently earning fees.": string; + "The ratio of tokens you add will set the price of this pool.": string; + "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; + "There is no liquidity data.": string; + "This app uses the following third-party APIs:": string; + "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; + "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; + "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; + "This token is not supported in the Uniswap Labs app": string; + "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; + "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; + "Tip: Custom tokens are stored locally in your browser": string; + To: string; + "To (at least)": string; + "Token not supported": string; + Tokens: string; + "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; + "Top pools": string; + "Total deposited": string; + "Total deposits": string; + "Trade Route": string; + Trading: string; + "Transaction Settings": string; + "Transaction Submitted": string; + "Transaction completed in": string; + "Transaction deadline": string; + "Transaction pending": string; + "Transaction rejected.": string; + "Transaction submitted": string; + "Transfer Token": string; + "Try Again": string; + "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Turn On Expert Mode": string; + "UNI has arrived": string; + "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; + "UNI {0}/{1} Burned": (string | string[])[]; + "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; + "UNI-V2 {0}-{1}": (string | string[])[]; + "Unclaimed UNI": string; + "Unclaimed fees": string; + Undetermined: string; + "Unexpected error. Could not estimate gas for the swap.": string; + "Unexpected issue with estimating the gas. Please try again.": string; + "Uniswap Governance": string; + "Uniswap Labs' Terms of Service": string; + "Uniswap available in: <0>{0}": (string | string[])[]; + "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; + "Uniswap liquidity mining": string; + "Uniswap migration contract\u2197": string; + "Unknown Source": string; + "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; + "Unlock Votes": string; + "Unlock Voting": string; + "Unlocking Votes": string; + "Unsupported Asset": string; + "Unsupported Assets": string; + "Unsupported network\u2013switch to another to trade.": string; + Untitled: string; + Unwrap: string; + "Unwrap <0/> to {0}": (string | string[])[]; + "Update Delegation": string; + "Update list": string; + "Use the Uniswap Labs API to get faster quotes.": string; + User: string; + "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; + "V2 liquidity": string; + "V3 {0} Price:": (string | string[])[]; + "View accrued fees and analytics<0>\u2197": string; + "View list": string; + "View on Etherscan": string; + "View on Explorer": string; + "View transaction on Explorer": string; + Vote: string; + "Vote Against": string; + "Vote For": string; + "Vote against proposal {proposalId}": (string | string[])[]; + "Vote against proposal {proposalKey}": (string | string[])[]; + "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote for proposal {proposalId}": (string | string[])[]; + "Vote for proposal {proposalKey}": (string | string[])[]; + "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote to abstain on proposal {proposalId}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Voting ended {0}": (string | string[])[]; + "Voting ends approximately {0}": (string | string[])[]; + "Voting starts approximately {0}": (string | string[])[]; + "Waiting For Confirmation": string; + "Wallet Address or ENS name": string; + "Weekly Rewards": string; + "Welcome to team Unicorn :)": string; + "When you claim without withdrawing your liquidity remains in the mining pool.": string; + "When you withdraw, the contract will automagically claim UNI on your behalf!": string; + "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; + Withdraw: string; + "Withdraw & Claim": string; + "Withdraw deposited liquidity": string; + "Withdrawing {0} UNI-V2": (string | string[])[]; + "Withdrew UNI-V2!": string; + Wrap: string; + "Wrap <0/> to {0}": (string | string[])[]; + "Wrong Network": string; + "You already have an active or pending proposal": string; + "You are creating a pool": string; + "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; + "You are the first liquidity provider.": string; + "You can either vote on each proposal yourself or delegate your votes to a third party.": string; + "You can now trade {0}": (string | string[])[]; + "You don't have enough votes to submit a proposal": string; + "You don\u2019t have liquidity in this pool yet.": string; + "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; + "You may have lost your network connection.": string; + "You might consider waiting until the network fees go down to complete this transaction.": string; + "You must connect an account.": string; + "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; + "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; + "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; + "You will also collect fees earned from this position.": string; + "You will receive": string; + "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; + "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; + "Your V2 liquidity": string; + "Your active V3 liquidity positions will appear here.": string; + "Your liquidity deposits": string; + "Your pool share:": string; + "Your position": string; + "Your position has 0 liquidity, and is not earning fees.": string; + "Your position will appear here.": string; + "Your position will be 100% composed of {0} at this price": (string | string[])[]; + "Your position will be 100% {0} at this price.": (string | string[])[]; + "Your position will not earn fees or be used in trades until the market price moves into your range.": string; + "Your positions": string; + "Your rate": string; + "Your total pool tokens:": string; + "Your transaction cost will be much higher as it includes the gas to create the pool.": string; + "Your transaction may be frontrun": string; + "Your transaction may fail": string; + "Your transaction will revert if it has been pending for longer than this period of time.": string; + "Your transaction will revert if it is pending for more than this period of time.": string; + "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; + "Your transactions will appear here...": string; + "Your unclaimed UNI": string; + "after slippage": string; + confirm: string; + "for {0}": (string | string[])[]; + gwei: string; + "has socks emoji": string; + "here.": string; + "https:// or ipfs:// or ENS name": string; + minutes: string; + "via {0}": (string | string[])[]; + "via {0} token list": (string | string[])[]; + "{0, plural, one {Import token} other {Import tokens}}": (string | { + one: string; + other: string; + })[][]; + "{0}": string[][]; + "{0} %": (string | string[])[]; + "{0} <0/> per <1/>": (string | string[])[]; + "{0} Custom Tokens": (string | string[])[]; + "{0} Deposited": (string | string[])[]; + "{0} ETH": (string | string[])[]; + "{0} Fees Earned:": (string | string[])[]; + "{0} Pending": (string | string[])[]; + "{0} UNI": (string | string[])[]; + "{0} UNI / week": (string | string[])[]; + "{0} UNI-V2": (string | string[])[]; + "{0} UNI-V2 LP tokens available": (string | string[])[]; + "{0} Votes": (string | string[])[]; + "{0} per {1}": (string | string[])[]; + "{0} tokens": (string | string[])[]; + "{0} {1} Price:": (string | string[])[]; + "{0} {nativeCurrencySymbol}": (string | string[])[]; + "{0} \u2022 Added by user": (string | string[])[]; + "{0}%": (string | string[])[]; + "{0}% fee tier": (string | string[])[]; + "{0}% pool": (string | string[])[]; + "{0}% select": (string | string[])[]; + "{0}-{1} Liquidity Mining": (string | string[])[]; + "{0}/{1} LP NFT": (string | string[])[]; + "{0}/{1} LP Tokens": (string | string[])[]; + "{SOCKS_AMOUNT} UNI": (string | string[])[]; + "{USER_AMOUNT} UNI": (string | string[])[]; + "{activeTokensOnThisChain} tokens": (string | string[])[]; + "{integrator} fee": (string | string[])[]; + "{label} token bridge": (string | string[])[]; + "{min}m {sec}s": (string | string[])[]; + "{percentForSlider}%": (string | string[])[]; + "{sec}s": string[][]; + "{tokenB} per {tokenA}": (string | string[])[]; + "\u2190 Back to Pools Overview": string; +}; diff --git a/dist2/types/locales/pseudo.d.ts b/dist2/types/locales/pseudo.d.ts new file mode 100644 index 00000000000..79753c9213e --- /dev/null +++ b/dist2/types/locales/pseudo.d.ts @@ -0,0 +1 @@ +export const messages: {}; diff --git a/dist2/types/locales/pt-BR.d.ts b/dist2/types/locales/pt-BR.d.ts new file mode 100644 index 00000000000..76cde7152f5 --- /dev/null +++ b/dist2/types/locales/pt-BR.d.ts @@ -0,0 +1,593 @@ +export const messages: { + "$-": string; + "$<0/>": string; + "${0}": (string | string[])[]; + "(${0})": (string | string[])[]; + "(View on Explorer)": string; + "(clear all)": string; + "(edit)": string; + "- Remove recipient": string; + "0 UNI / week": string; + "25%": string; + "50%": string; + "75%": string; + "<0/> All Proposals": string; + "<0/> Votes": string; + "<0>Account analytics and accrued fees<1> \u2197 ": string; + "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; + "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; + "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; + "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; + "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; + "<0>Unlock voting to prepare for the next proposal.": string; + "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; + "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; + About: string; + Accept: string; + Account: string; + Active: string; + Add: string; + "Add <0/> and <1/> to Uniswap V2": string; + "Add Delegate +": string; + "Add Liquidity": string; + "Add V2 Liquidity": string; + "Add liquidity.": string; + "Add more liquidity": string; + "Add {0} to Metamask <0/>": (string | string[])[]; + "Add {0}-{1} liquidity": (string | string[])[]; + "Add {0}/{1} V3 liquidity": (string | string[])[]; + "Added {0}": (string | string[])[]; + "Address has no available claim": string; + Against: string; + "Allow LP token migration": string; + "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; + "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; + Allowed: string; + Amount: string; + "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Approval pending <0/>": string; + Approve: string; + "Approve Token": string; + "Approve {0}": (string | string[])[]; + "Approve {0} first": (string | string[])[]; + Approved: string; + Approving: string; + "Approving {0}": (string | string[])[]; + Arbiscan: string; + "Arbitrum Bridge": string; + "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Are you sure?": string; + "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; + "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; + Auto: string; + "Auto Router API": string; + "Available to deposit: {0}": (string | string[])[]; + "Balance: {0}": (string | string[])[]; + "Best for exotic pairs.": string; + "Best for most pairs.": string; + "Best for stable pairs.": string; + "Best for very stable pairs.": string; + "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; + "Blocked address": string; + Bridge: string; + "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; + "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; + Canceled: string; + Change: string; + Charts: string; + "Check network status": string; + "Check out our v3 LP walkthrough and migration guides.": string; + Claim: string; + "Claim <0/> for {0}": (string | string[])[]; + "Claim UNI": string; + "Claim UNI Token": string; + "Claim UNI reward for {0}": (string | string[])[]; + "Claim fees": string; + "Claim your UNI tokens": string; + Claimed: string; + "Claimed UNI!": string; + "Claimed!": string; + Claiming: string; + "Claiming UNI": (string | string[])[]; + "Claiming {0} UNI": (string | string[])[]; + "Clear All": string; + "Clear all": string; + Close: string; + Closed: string; + Collect: string; + "Collect as WETH": string; + "Collect fees": string; + "Collect {0}/{1} fees": (string | string[])[]; + Collected: string; + Collecting: string; + "Collecting fees": string; + "Collecting fees will withdraw currently available fees for you.": string; + Confirm: string; + "Confirm Supply": string; + "Confirm Swap": string; + "Confirm swap": string; + "Confirm this transaction in your wallet": string; + "Confirm transaction in wallet": string; + "Connect Wallet": string; + "Connect a wallet": string; + "Connect to a wallet to find pools": string; + "Connect to a wallet to view your V2 liquidity.": string; + "Connect to a wallet to view your liquidity.": string; + "Connect wallet to swap": string; + "Connected with {name}": (string | string[])[]; + Copied: string; + "Copy Address": string; + "Create Pool & Supply": string; + "Create Proposal": string; + "Create a pair": string; + "Create a pool": string; + "Create an issue on GitHub": string; + "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; + "Create pool.": string; + "Create {0}/{1} V3 pool": (string | string[])[]; + "Current price": string; + "Current {0} Price:": (string | string[])[]; + Custom: string; + "Dark Theme": string; + Defeated: string; + "Delegate Votes": string; + "Delegate voting power to {0}": (string | string[])[]; + "Delegated to:": string; + "Delegating votes": string; + Deposit: string; + "Deposit Amounts": string; + "Deposit UNI-V2 LP Tokens": string; + "Deposit liquidity": string; + "Deposit tokens to the {label} network.": (string | string[])[]; + "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; + "Deposited liquidity:": string; + "Deposited {0} UNI-V2": (string | string[])[]; + "Depositing Liquidity": string; + Description: string; + Detailed: string; + Details: string; + Disconnect: string; + Discord: string; + Dismiss: string; + Docs: string; + "Don\u2019t see one of your v2 positions? <0>Import it.": string; + "Earned UNI tokens represent voting shares in Uniswap governance.": string; + Edit: string; + "Efficiency Comparison": string; + "Enter a percent": string; + "Enter a recipient": string; + "Enter a valid slippage percentage": string; + "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; + "Enter an amount": string; + "Enter valid list location": string; + "Enter valid token address": string; + "Enter {0} amount": (string | string[])[]; + Error: string; + "Error connecting": string; + "Error connecting. Try refreshing the page.": string; + "Error details": string; + "Error importing list": string; + "Estimate may differ due to your wallet gas settings": string; + "Estimated network fee": string; + Etherscan: string; + Executed: string; + "Expanded results from inactive Token Lists": string; + "Expected Output": string; + "Expert Mode": string; + "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; + Expired: string; + "Explore Uniswap Analytics.": string; + "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; + "Fee Tier": string; + "Fee tier": string; + "Fetching best price...": string; + "Fetching best price\u2026": string; + For: string; + "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; + From: string; + "From (at most)": string; + "Full Range": string; + "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; + "Get support on Discord": string; + "Help Center": string; + Hide: string; + "Hide closed positions": string; + "High Price Impact": string; + "How this app uses APIs": string; + "I understand": string; + "If you purchase a token from this list, you may not be able to sell it back.": string; + Import: string; + "Import List": string; + "Import Pool": string; + "Import V2 Pool": string; + "Import at your own risk": string; + "In range": string; + "Increase Liquidity": string; + "Initial prices and pool share": string; + "Initializing...": string; + "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Install Metamask": string; + "Insufficient liquidity for this trade.": string; + "Insufficient {0}": (string | string[])[]; + "Insufficient {0} balance": (string | string[])[]; + "Interface Settings": string; + "Invalid pair": string; + "Invalid pair.": string; + "Invalid price input": string; + "Invalid range selected. The min price must be lower than the max price.": string; + "Invalid recipient": string; + Language: string; + Learn: string; + "Learn about providing liquidity": string; + "Learn more": string; + "Legal & Privacy": string; + "Light Theme": string; + Liquidity: string; + "Liquidity data not available.": string; + "Liquidity provider rewards": string; + "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + Lists: string; + Loaded: string; + Loading: string; + MAX: string; + Manage: string; + "Manage Liquidity in Rewards Pool": string; + "Manage Token Lists": string; + "Manage this pool.": string; + Max: string; + "Max Price": string; + "Max price": string; + "Max slippage": string; + "Max:": string; + "Maximum sent": string; + Menu: string; + Migrate: string; + "Migrate Liquidity to V3": string; + "Migrate V2 Liquidity": string; + "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; + "Migrate {0}/{1} liquidity to V3": (string | string[])[]; + Migrating: string; + "Min Price": string; + "Min price": string; + "Min:": string; + "Minimum received": string; + "Missing dependencies": string; + "Mock Toggle": string; + More: string; + "Network Fee": string; + "Network Warning": string; + "Network fees exceed 50% of the swap amount!": string; + "New Position": string; + "No V2 Liquidity found.": string; + "No active pools": string; + "No data": string; + "No description.": string; + "No liquidity found.": string; + "No pool found.": string; + "No proposals found.": string; + "No results found.": string; + "Not created": string; + OFF: string; + ON: string; + "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; + Off: string; + On: string; + "Once you are happy with the rate click supply to review.": string; + "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; + "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; + "Optimism Gateway": string; + "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Optimistic Etherscan": string; + "Out of range": string; + "Output is estimated.": string; + "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; + "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Output will be sent to <0>{0}": (string | string[])[]; + Owner: string; + "Participating pools": string; + Pending: string; + "Please confirm you would like to remove this list by typing REMOVE": string; + "Please connect to Layer 1 Ethereum": string; + "Please connect to a supported network in the dropdown menu or in your wallet.": string; + "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; + "Polygon Bridge": string; + Polygonscan: string; + Pool: string; + "Pool Found!": string; + "Pool Rate": string; + "Pool rate": string; + "Pool tokens in rewards pool:": string; + "Pooled {0}:": (string | string[])[]; + "Pools Overview": string; + Preview: string; + Price: string; + "Price Difference:": string; + "Price Impact": string; + "Price Impact Too High": string; + "Price Updated": string; + "Price impact": string; + "Price range": string; + "Price updated": string; + "Price:": string; + "Prices and pool share": string; + Proposal: string; + "Proposal Submitted": string; + "Proposal Title": string; + Proposals: string; + "Proposals submitted by community members will appear here.": string; + "Proposed Action": string; + Proposer: string; + "Protocol Disclaimer": string; + Queued: string; + Rates: string; + "Read more about UNI": string; + "Read more about Uniswap governance": string; + "Read more about providing liquidity": string; + "Read more about unsupported assets": string; + "Recent Transactions": string; + "Recent transactions": string; + Recipient: string; + "Reload the page": string; + Remove: string; + "Remove <0/> and <1/>": string; + "Remove Amount": string; + "Remove Delegate": string; + "Remove Liquidity": string; + "Remove list": string; + "Removing {0} {1} and {2} {3}": (string | string[])[]; + "Removing {0} {1} and{2} {3}": (string | string[])[]; + "Request Features": string; + Reset: string; + Return: string; + "Review swap": string; + "Search by token name or address": string; + "Search name or paste address": string; + "Select Pair": string; + "Select a network": string; + "Select a token": string; + "Select a token to find your v2 liquidity.": string; + "Select an action": string; + "Selected Range": string; + Self: string; + "Self Delegate": string; + "Set Price Range": string; + "Set Starting Price": string; + Settings: string; + "Share of Pool": string; + "Share of Pool:": string; + "Show Portis": string; + "Show closed positions": string; + Simple: string; + "Slippage tolerance": string; + "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; + "Something went wrong": string; + "Something went wrong.": string; + "Step 1. Get UNI-V2 Liquidity tokens": string; + "Submit new proposal": string; + "Submitting Proposal": string; + "Submitting Vote": string; + Succeeded: string; + Success: string; + Supply: string; + "Supplying {0} {1} and {2} {3}": (string | string[])[]; + Swap: string; + "Swap <0/> for exactly <1/>": string; + "Swap Anyway": string; + "Swap details": string; + "Swap exactly <0/> for <1/>": string; + "Swap failed: {0}": (string | string[])[]; + "Swap summary": string; + "Swapping {0} {1} for {2} {3}": (string | string[])[]; + "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; + "Tell us what you think \u2197": string; + "Thanks for being part of the Uniswap community <0/>": string; + "The % you will earn in fees.": string; + "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; + "The app fetches blockchain data from The Graph\u2019s hosted service.": string; + "The app fetches on-chain data and constructs contract calls with an Infura API.": string; + "The app fetches the optimal trade route from a Uniswap Labs server.": string; + "The app logs anonymized usage statistics in order to improve over time.": string; + "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; + "The cost of sending this transaction is more than half of the value of the input amount.": string; + "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; + "The estimated difference between the USD values of input and output amounts.": string; + "The input token cannot be transferred. There may be an issue with the input token.": string; + "The market price is outside your specified price range. Single-asset deposit only.": string; + "The most recent block number on this network. Prices update on every block.": string; + "The output token cannot be transferred. There may be an issue with the output token.": string; + "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; + "The price of this pool is within your selected range. Your position is currently earning fees.": string; + "The ratio of tokens you add will set the price of this pool.": string; + "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; + "There is no liquidity data.": string; + "This app uses the following third-party APIs:": string; + "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; + "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; + "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; + "This token is not supported in the Uniswap Labs app": string; + "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; + "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; + "Tip: Custom tokens are stored locally in your browser": string; + To: string; + "To (at least)": string; + "Token not supported": string; + Tokens: string; + "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; + "Top pools": string; + "Total deposited": string; + "Total deposits": string; + "Trade Route": string; + Trading: string; + "Transaction Settings": string; + "Transaction Submitted": string; + "Transaction completed in": string; + "Transaction deadline": string; + "Transaction pending": string; + "Transaction rejected.": string; + "Transaction submitted": string; + "Transfer Token": string; + "Try Again": string; + "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Turn On Expert Mode": string; + "UNI has arrived": string; + "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; + "UNI {0}/{1} Burned": (string | string[])[]; + "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; + "UNI-V2 {0}-{1}": (string | string[])[]; + "Unclaimed UNI": string; + "Unclaimed fees": string; + Undetermined: string; + "Unexpected error. Could not estimate gas for the swap.": string; + "Unexpected issue with estimating the gas. Please try again.": string; + "Uniswap Governance": string; + "Uniswap Labs' Terms of Service": string; + "Uniswap available in: <0>{0}": (string | string[])[]; + "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; + "Uniswap liquidity mining": string; + "Uniswap migration contract\u2197": string; + "Unknown Source": string; + "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; + "Unlock Votes": string; + "Unlock Voting": string; + "Unlocking Votes": string; + "Unsupported Asset": string; + "Unsupported Assets": string; + "Unsupported network\u2013switch to another to trade.": string; + Untitled: string; + Unwrap: string; + "Unwrap <0/> to {0}": (string | string[])[]; + "Update Delegation": string; + "Update list": string; + "Use the Uniswap Labs API to get faster quotes.": string; + User: string; + "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; + "V2 liquidity": string; + "V3 {0} Price:": (string | string[])[]; + "View accrued fees and analytics<0>\u2197": string; + "View list": string; + "View on Etherscan": string; + "View on Explorer": string; + "View transaction on Explorer": string; + Vote: string; + "Vote Against": string; + "Vote For": string; + "Vote against proposal {proposalId}": (string | string[])[]; + "Vote against proposal {proposalKey}": (string | string[])[]; + "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote for proposal {proposalId}": (string | string[])[]; + "Vote for proposal {proposalKey}": (string | string[])[]; + "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote to abstain on proposal {proposalId}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Voting ended {0}": (string | string[])[]; + "Voting ends approximately {0}": (string | string[])[]; + "Voting starts approximately {0}": (string | string[])[]; + "Waiting For Confirmation": string; + "Wallet Address or ENS name": string; + "Weekly Rewards": string; + "Welcome to team Unicorn :)": string; + "When you claim without withdrawing your liquidity remains in the mining pool.": string; + "When you withdraw, the contract will automagically claim UNI on your behalf!": string; + "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; + Withdraw: string; + "Withdraw & Claim": string; + "Withdraw deposited liquidity": string; + "Withdrawing {0} UNI-V2": (string | string[])[]; + "Withdrew UNI-V2!": string; + Wrap: string; + "Wrap <0/> to {0}": (string | string[])[]; + "Wrong Network": string; + "You already have an active or pending proposal": string; + "You are creating a pool": string; + "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; + "You are the first liquidity provider.": string; + "You can either vote on each proposal yourself or delegate your votes to a third party.": string; + "You can now trade {0}": (string | string[])[]; + "You don't have enough votes to submit a proposal": string; + "You don\u2019t have liquidity in this pool yet.": string; + "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; + "You may have lost your network connection.": string; + "You might consider waiting until the network fees go down to complete this transaction.": string; + "You must connect an account.": string; + "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; + "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; + "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; + "You will also collect fees earned from this position.": string; + "You will receive": string; + "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; + "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; + "Your V2 liquidity": string; + "Your active V3 liquidity positions will appear here.": string; + "Your liquidity deposits": string; + "Your pool share:": string; + "Your position": string; + "Your position has 0 liquidity, and is not earning fees.": string; + "Your position will appear here.": string; + "Your position will be 100% composed of {0} at this price": (string | string[])[]; + "Your position will be 100% {0} at this price.": (string | string[])[]; + "Your position will not earn fees or be used in trades until the market price moves into your range.": string; + "Your positions": string; + "Your rate": string; + "Your total pool tokens:": string; + "Your transaction cost will be much higher as it includes the gas to create the pool.": string; + "Your transaction may be frontrun": string; + "Your transaction may fail": string; + "Your transaction will revert if it has been pending for longer than this period of time.": string; + "Your transaction will revert if it is pending for more than this period of time.": string; + "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; + "Your transactions will appear here...": string; + "Your unclaimed UNI": string; + "after slippage": string; + confirm: string; + "for {0}": (string | string[])[]; + gwei: string; + "has socks emoji": string; + "here.": string; + "https:// or ipfs:// or ENS name": string; + minutes: string; + "via {0}": (string | string[])[]; + "via {0} token list": (string | string[])[]; + "{0, plural, one {Import token} other {Import tokens}}": (string | { + one: string; + other: string; + })[][]; + "{0}": string[][]; + "{0} %": (string | string[])[]; + "{0} <0/> per <1/>": (string | string[])[]; + "{0} Custom Tokens": (string | string[])[]; + "{0} Deposited": (string | string[])[]; + "{0} ETH": (string | string[])[]; + "{0} Fees Earned:": (string | string[])[]; + "{0} Pending": (string | string[])[]; + "{0} UNI": (string | string[])[]; + "{0} UNI / week": (string | string[])[]; + "{0} UNI-V2": (string | string[])[]; + "{0} UNI-V2 LP tokens available": (string | string[])[]; + "{0} Votes": (string | string[])[]; + "{0} per {1}": (string | string[])[]; + "{0} tokens": (string | string[])[]; + "{0} {1} Price:": (string | string[])[]; + "{0} {nativeCurrencySymbol}": (string | string[])[]; + "{0} \u2022 Added by user": (string | string[])[]; + "{0}%": (string | string[])[]; + "{0}% fee tier": (string | string[])[]; + "{0}% pool": (string | string[])[]; + "{0}% select": (string | string[])[]; + "{0}-{1} Liquidity Mining": (string | string[])[]; + "{0}/{1} LP NFT": (string | string[])[]; + "{0}/{1} LP Tokens": (string | string[])[]; + "{SOCKS_AMOUNT} UNI": (string | string[])[]; + "{USER_AMOUNT} UNI": (string | string[])[]; + "{activeTokensOnThisChain} tokens": (string | string[])[]; + "{integrator} fee": (string | string[])[]; + "{label} token bridge": (string | string[])[]; + "{min}m {sec}s": (string | string[])[]; + "{percentForSlider}%": (string | string[])[]; + "{sec}s": (string | string[])[]; + "{tokenB} per {tokenA}": (string | string[])[]; + "\u2190 Back to Pools Overview": string; +}; diff --git a/dist2/types/locales/pt-PT.d.ts b/dist2/types/locales/pt-PT.d.ts new file mode 100644 index 00000000000..75120e0e5c9 --- /dev/null +++ b/dist2/types/locales/pt-PT.d.ts @@ -0,0 +1,593 @@ +export const messages: { + "$-": string; + "$<0/>": string; + "${0}": (string | string[])[]; + "(${0})": (string | string[])[]; + "(View on Explorer)": string; + "(clear all)": string; + "(edit)": string; + "- Remove recipient": string; + "0 UNI / week": string; + "25%": string; + "50%": string; + "75%": string; + "<0/> All Proposals": string; + "<0/> Votes": string; + "<0>Account analytics and accrued fees<1> \u2197 ": string; + "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; + "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; + "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; + "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; + "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; + "<0>Unlock voting to prepare for the next proposal.": string; + "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; + "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; + About: string; + Accept: string; + Account: string; + Active: string; + Add: string; + "Add <0/> and <1/> to Uniswap V2": string; + "Add Delegate +": string; + "Add Liquidity": string; + "Add V2 Liquidity": string; + "Add liquidity.": string; + "Add more liquidity": string; + "Add {0} to Metamask <0/>": (string | string[])[]; + "Add {0}-{1} liquidity": (string | string[])[]; + "Add {0}/{1} V3 liquidity": (string | string[])[]; + "Added {0}": (string | string[])[]; + "Address has no available claim": string; + Against: string; + "Allow LP token migration": string; + "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; + "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; + Allowed: string; + Amount: string; + "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Approval pending <0/>": string; + Approve: string; + "Approve Token": string; + "Approve {0}": (string | string[])[]; + "Approve {0} first": (string | string[])[]; + Approved: string; + Approving: string; + "Approving {0}": (string | string[])[]; + Arbiscan: string; + "Arbitrum Bridge": string; + "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Are you sure?": string; + "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; + "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; + Auto: string; + "Auto Router API": string; + "Available to deposit: {0}": (string | string[])[]; + "Balance: {0}": (string | string[])[]; + "Best for exotic pairs.": string; + "Best for most pairs.": string; + "Best for stable pairs.": string; + "Best for very stable pairs.": string; + "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; + "Blocked address": string; + Bridge: string; + "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; + "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; + Canceled: string; + Change: string; + Charts: string; + "Check network status": string; + "Check out our v3 LP walkthrough and migration guides.": string; + Claim: string; + "Claim <0/> for {0}": (string | string[])[]; + "Claim UNI": string; + "Claim UNI Token": string; + "Claim UNI reward for {0}": (string | string[])[]; + "Claim fees": string; + "Claim your UNI tokens": string; + Claimed: string; + "Claimed UNI!": string; + "Claimed!": string; + Claiming: string; + "Claiming UNI": string; + "Claiming {0} UNI": (string | string[])[]; + "Clear All": string; + "Clear all": string; + Close: string; + Closed: string; + Collect: string; + "Collect as WETH": string; + "Collect fees": string; + "Collect {0}/{1} fees": (string | string[])[]; + Collected: string; + Collecting: string; + "Collecting fees": string; + "Collecting fees will withdraw currently available fees for you.": string; + Confirm: string; + "Confirm Supply": string; + "Confirm Swap": string; + "Confirm swap": string; + "Confirm this transaction in your wallet": string; + "Confirm transaction in wallet": string; + "Connect Wallet": string; + "Connect a wallet": string; + "Connect to a wallet to find pools": string; + "Connect to a wallet to view your V2 liquidity.": string; + "Connect to a wallet to view your liquidity.": string; + "Connect wallet to swap": string; + "Connected with {name}": (string | string[])[]; + Copied: string; + "Copy Address": string; + "Create Pool & Supply": string; + "Create Proposal": string; + "Create a pair": string; + "Create a pool": string; + "Create an issue on GitHub": string; + "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; + "Create pool.": string; + "Create {0}/{1} V3 pool": (string | string[])[]; + "Current price": string; + "Current {0} Price:": (string | string[])[]; + Custom: string; + "Dark Theme": string; + Defeated: string; + "Delegate Votes": string; + "Delegate voting power to {0}": (string | string[])[]; + "Delegated to:": string; + "Delegating votes": string; + Deposit: string; + "Deposit Amounts": string; + "Deposit UNI-V2 LP Tokens": string; + "Deposit liquidity": string; + "Deposit tokens to the {label} network.": (string | string[])[]; + "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; + "Deposited liquidity:": string; + "Deposited {0} UNI-V2": (string | string[])[]; + "Depositing Liquidity": string; + Description: string; + Detailed: string; + Details: string; + Disconnect: string; + Discord: string; + Dismiss: string; + Docs: string; + "Don\u2019t see one of your v2 positions? <0>Import it.": string; + "Earned UNI tokens represent voting shares in Uniswap governance.": string; + Edit: string; + "Efficiency Comparison": string; + "Enter a percent": string; + "Enter a recipient": string; + "Enter a valid slippage percentage": string; + "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; + "Enter an amount": string; + "Enter valid list location": string; + "Enter valid token address": string; + "Enter {0} amount": (string | string[])[]; + Error: string; + "Error connecting": string; + "Error connecting. Try refreshing the page.": string; + "Error details": string; + "Error importing list": string; + "Estimate may differ due to your wallet gas settings": string; + "Estimated network fee": string; + Etherscan: string; + Executed: string; + "Expanded results from inactive Token Lists": string; + "Expected Output": string; + "Expert Mode": string; + "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; + Expired: string; + "Explore Uniswap Analytics.": string; + "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; + "Fee Tier": string; + "Fee tier": string; + "Fetching best price...": string; + "Fetching best price\u2026": string; + For: string; + "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; + From: string; + "From (at most)": string; + "Full Range": string; + "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; + "Get support on Discord": string; + "Help Center": string; + Hide: string; + "Hide closed positions": string; + "High Price Impact": string; + "How this app uses APIs": string; + "I understand": string; + "If you purchase a token from this list, you may not be able to sell it back.": string; + Import: string; + "Import List": string; + "Import Pool": string; + "Import V2 Pool": string; + "Import at your own risk": string; + "In range": string; + "Increase Liquidity": string; + "Initial prices and pool share": string; + "Initializing...": string; + "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Install Metamask": string; + "Insufficient liquidity for this trade.": string; + "Insufficient {0}": (string | string[])[]; + "Insufficient {0} balance": (string | string[])[]; + "Interface Settings": string; + "Invalid pair": string; + "Invalid pair.": string; + "Invalid price input": string; + "Invalid range selected. The min price must be lower than the max price.": string; + "Invalid recipient": string; + Language: string; + Learn: string; + "Learn about providing liquidity": string; + "Learn more": string; + "Legal & Privacy": string; + "Light Theme": string; + Liquidity: string; + "Liquidity data not available.": string; + "Liquidity provider rewards": string; + "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + Lists: string; + Loaded: string; + Loading: string; + MAX: string; + Manage: string; + "Manage Liquidity in Rewards Pool": string; + "Manage Token Lists": string; + "Manage this pool.": string; + Max: string; + "Max Price": string; + "Max price": string; + "Max slippage": string; + "Max:": string; + "Maximum sent": string; + Menu: string; + Migrate: string; + "Migrate Liquidity to V3": string; + "Migrate V2 Liquidity": string; + "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; + "Migrate {0}/{1} liquidity to V3": (string | string[])[]; + Migrating: string; + "Min Price": string; + "Min price": string; + "Min:": string; + "Minimum received": string; + "Missing dependencies": string; + "Mock Toggle": string; + More: string; + "Network Fee": string; + "Network Warning": string; + "Network fees exceed 50% of the swap amount!": string; + "New Position": string; + "No V2 Liquidity found.": string; + "No active pools": string; + "No data": string; + "No description.": string; + "No liquidity found.": string; + "No pool found.": string; + "No proposals found.": string; + "No results found.": string; + "Not created": string; + OFF: string; + ON: string; + "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; + Off: string; + On: string; + "Once you are happy with the rate click supply to review.": string; + "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; + "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; + "Optimism Gateway": string; + "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Optimistic Etherscan": string; + "Out of range": string; + "Output is estimated.": string; + "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; + "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Output will be sent to <0>{0}": (string | string[])[]; + Owner: string; + "Participating pools": string; + Pending: string; + "Please confirm you would like to remove this list by typing REMOVE": string; + "Please connect to Layer 1 Ethereum": string; + "Please connect to a supported network in the dropdown menu or in your wallet.": string; + "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; + "Polygon Bridge": string; + Polygonscan: string; + Pool: string; + "Pool Found!": string; + "Pool Rate": string; + "Pool rate": string; + "Pool tokens in rewards pool:": string; + "Pooled {0}:": (string | string[])[]; + "Pools Overview": string; + Preview: string; + Price: string; + "Price Difference:": string; + "Price Impact": string; + "Price Impact Too High": string; + "Price Updated": string; + "Price impact": string; + "Price range": string; + "Price updated": string; + "Price:": string; + "Prices and pool share": string; + Proposal: string; + "Proposal Submitted": string; + "Proposal Title": string; + Proposals: string; + "Proposals submitted by community members will appear here.": string; + "Proposed Action": string; + Proposer: string; + "Protocol Disclaimer": string; + Queued: string; + Rates: string; + "Read more about UNI": string; + "Read more about Uniswap governance": string; + "Read more about providing liquidity": string; + "Read more about unsupported assets": string; + "Recent Transactions": string; + "Recent transactions": string; + Recipient: string; + "Reload the page": string; + Remove: string; + "Remove <0/> and <1/>": string; + "Remove Amount": string; + "Remove Delegate": string; + "Remove Liquidity": string; + "Remove list": string; + "Removing {0} {1} and {2} {3}": (string | string[])[]; + "Removing {0} {1} and{2} {3}": (string | string[])[]; + "Request Features": string; + Reset: string; + Return: string; + "Review swap": string; + "Search by token name or address": string; + "Search name or paste address": string; + "Select Pair": string; + "Select a network": string; + "Select a token": string; + "Select a token to find your v2 liquidity.": string; + "Select an action": string; + "Selected Range": string; + Self: string; + "Self Delegate": string; + "Set Price Range": string; + "Set Starting Price": string; + Settings: string; + "Share of Pool": string; + "Share of Pool:": string; + "Show Portis": string; + "Show closed positions": string; + Simple: string; + "Slippage tolerance": string; + "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; + "Something went wrong": string; + "Something went wrong.": string; + "Step 1. Get UNI-V2 Liquidity tokens": string; + "Submit new proposal": string; + "Submitting Proposal": string; + "Submitting Vote": string; + Succeeded: string; + Success: string; + Supply: string; + "Supplying {0} {1} and {2} {3}": (string | string[])[]; + Swap: string; + "Swap <0/> for exactly <1/>": string; + "Swap Anyway": string; + "Swap details": string; + "Swap exactly <0/> for <1/>": string; + "Swap failed: {0}": (string | string[])[]; + "Swap summary": string; + "Swapping {0} {1} for {2} {3}": (string | string[])[]; + "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; + "Tell us what you think \u2197": string; + "Thanks for being part of the Uniswap community <0/>": string; + "The % you will earn in fees.": string; + "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; + "The app fetches blockchain data from The Graph\u2019s hosted service.": string; + "The app fetches on-chain data and constructs contract calls with an Infura API.": string; + "The app fetches the optimal trade route from a Uniswap Labs server.": string; + "The app logs anonymized usage statistics in order to improve over time.": string; + "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; + "The cost of sending this transaction is more than half of the value of the input amount.": string; + "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; + "The estimated difference between the USD values of input and output amounts.": string; + "The input token cannot be transferred. There may be an issue with the input token.": string; + "The market price is outside your specified price range. Single-asset deposit only.": string; + "The most recent block number on this network. Prices update on every block.": string; + "The output token cannot be transferred. There may be an issue with the output token.": string; + "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; + "The price of this pool is within your selected range. Your position is currently earning fees.": string; + "The ratio of tokens you add will set the price of this pool.": string; + "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; + "There is no liquidity data.": string; + "This app uses the following third-party APIs:": string; + "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; + "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; + "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; + "This token is not supported in the Uniswap Labs app": string; + "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; + "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; + "Tip: Custom tokens are stored locally in your browser": string; + To: string; + "To (at least)": string; + "Token not supported": string; + Tokens: string; + "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; + "Top pools": string; + "Total deposited": string; + "Total deposits": string; + "Trade Route": string; + Trading: string; + "Transaction Settings": string; + "Transaction Submitted": string; + "Transaction completed in": string; + "Transaction deadline": string; + "Transaction pending": string; + "Transaction rejected.": string; + "Transaction submitted": string; + "Transfer Token": string; + "Try Again": string; + "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Turn On Expert Mode": string; + "UNI has arrived": string; + "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; + "UNI {0}/{1} Burned": (string | string[])[]; + "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; + "UNI-V2 {0}-{1}": (string | string[])[]; + "Unclaimed UNI": string; + "Unclaimed fees": string; + Undetermined: string; + "Unexpected error. Could not estimate gas for the swap.": string; + "Unexpected issue with estimating the gas. Please try again.": string; + "Uniswap Governance": string; + "Uniswap Labs' Terms of Service": string; + "Uniswap available in: <0>{0}": (string | string[])[]; + "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; + "Uniswap liquidity mining": string; + "Uniswap migration contract\u2197": string; + "Unknown Source": string; + "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; + "Unlock Votes": string; + "Unlock Voting": string; + "Unlocking Votes": string; + "Unsupported Asset": string; + "Unsupported Assets": string; + "Unsupported network\u2013switch to another to trade.": string; + Untitled: string; + Unwrap: string; + "Unwrap <0/> to {0}": (string | string[])[]; + "Update Delegation": string; + "Update list": string; + "Use the Uniswap Labs API to get faster quotes.": string; + User: string; + "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; + "V2 liquidity": string; + "V3 {0} Price:": (string | string[])[]; + "View accrued fees and analytics<0>\u2197": string; + "View list": string; + "View on Etherscan": string; + "View on Explorer": string; + "View transaction on Explorer": string; + Vote: string; + "Vote Against": string; + "Vote For": string; + "Vote against proposal {proposalId}": (string | string[])[]; + "Vote against proposal {proposalKey}": (string | string[])[]; + "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote for proposal {proposalId}": (string | string[])[]; + "Vote for proposal {proposalKey}": (string | string[])[]; + "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote to abstain on proposal {proposalId}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Voting ended {0}": (string | string[])[]; + "Voting ends approximately {0}": (string | string[])[]; + "Voting starts approximately {0}": (string | string[])[]; + "Waiting For Confirmation": string; + "Wallet Address or ENS name": string; + "Weekly Rewards": string; + "Welcome to team Unicorn :)": string; + "When you claim without withdrawing your liquidity remains in the mining pool.": string; + "When you withdraw, the contract will automagically claim UNI on your behalf!": string; + "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; + Withdraw: string; + "Withdraw & Claim": string; + "Withdraw deposited liquidity": string; + "Withdrawing {0} UNI-V2": (string | string[])[]; + "Withdrew UNI-V2!": string; + Wrap: string; + "Wrap <0/> to {0}": (string | string[])[]; + "Wrong Network": string; + "You already have an active or pending proposal": string; + "You are creating a pool": string; + "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; + "You are the first liquidity provider.": string; + "You can either vote on each proposal yourself or delegate your votes to a third party.": string; + "You can now trade {0}": (string | string[])[]; + "You don't have enough votes to submit a proposal": string; + "You don\u2019t have liquidity in this pool yet.": string; + "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; + "You may have lost your network connection.": string; + "You might consider waiting until the network fees go down to complete this transaction.": string; + "You must connect an account.": string; + "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; + "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; + "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; + "You will also collect fees earned from this position.": string; + "You will receive": string; + "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; + "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; + "Your V2 liquidity": string; + "Your active V3 liquidity positions will appear here.": string; + "Your liquidity deposits": string; + "Your pool share:": string; + "Your position": string; + "Your position has 0 liquidity, and is not earning fees.": string; + "Your position will appear here.": string; + "Your position will be 100% composed of {0} at this price": (string | string[])[]; + "Your position will be 100% {0} at this price.": (string | string[])[]; + "Your position will not earn fees or be used in trades until the market price moves into your range.": string; + "Your positions": string; + "Your rate": string; + "Your total pool tokens:": string; + "Your transaction cost will be much higher as it includes the gas to create the pool.": string; + "Your transaction may be frontrun": string; + "Your transaction may fail": string; + "Your transaction will revert if it has been pending for longer than this period of time.": string; + "Your transaction will revert if it is pending for more than this period of time.": string; + "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; + "Your transactions will appear here...": string; + "Your unclaimed UNI": string; + "after slippage": string; + confirm: string; + "for {0}": (string | string[])[]; + gwei: string; + "has socks emoji": string; + "here.": string; + "https:// or ipfs:// or ENS name": string; + minutes: string; + "via {0}": (string | string[])[]; + "via {0} token list": (string | string[])[]; + "{0, plural, one {Import token} other {Import tokens}}": (string | { + one: string; + other: string; + })[][]; + "{0}": string[][]; + "{0} %": (string | string[])[]; + "{0} <0/> per <1/>": (string | string[])[]; + "{0} Custom Tokens": (string | string[])[]; + "{0} Deposited": (string | string[])[]; + "{0} ETH": (string | string[])[]; + "{0} Fees Earned:": (string | string[])[]; + "{0} Pending": (string | string[])[]; + "{0} UNI": (string | string[])[]; + "{0} UNI / week": (string | string[])[]; + "{0} UNI-V2": (string | string[])[]; + "{0} UNI-V2 LP tokens available": (string | string[])[]; + "{0} Votes": (string | string[])[]; + "{0} per {1}": (string | string[])[]; + "{0} tokens": (string | string[])[]; + "{0} {1} Price:": (string | string[])[]; + "{0} {nativeCurrencySymbol}": (string | string[])[]; + "{0} \u2022 Added by user": (string | string[])[]; + "{0}%": (string | string[])[]; + "{0}% fee tier": (string | string[])[]; + "{0}% pool": (string | string[])[]; + "{0}% select": (string | string[])[]; + "{0}-{1} Liquidity Mining": (string | string[])[]; + "{0}/{1} LP NFT": (string | string[])[]; + "{0}/{1} LP Tokens": (string | string[])[]; + "{SOCKS_AMOUNT} UNI": (string | string[])[]; + "{USER_AMOUNT} UNI": (string | string[])[]; + "{activeTokensOnThisChain} tokens": (string | string[])[]; + "{integrator} fee": (string | string[])[]; + "{label} token bridge": (string | string[])[]; + "{min}m {sec}s": (string | string[])[]; + "{percentForSlider}%": (string | string[])[]; + "{sec}s": (string | string[])[]; + "{tokenB} per {tokenA}": (string | string[])[]; + "\u2190 Back to Pools Overview": string; +}; diff --git a/dist2/types/locales/ro-RO.d.ts b/dist2/types/locales/ro-RO.d.ts new file mode 100644 index 00000000000..75120e0e5c9 --- /dev/null +++ b/dist2/types/locales/ro-RO.d.ts @@ -0,0 +1,593 @@ +export const messages: { + "$-": string; + "$<0/>": string; + "${0}": (string | string[])[]; + "(${0})": (string | string[])[]; + "(View on Explorer)": string; + "(clear all)": string; + "(edit)": string; + "- Remove recipient": string; + "0 UNI / week": string; + "25%": string; + "50%": string; + "75%": string; + "<0/> All Proposals": string; + "<0/> Votes": string; + "<0>Account analytics and accrued fees<1> \u2197 ": string; + "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; + "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; + "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; + "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; + "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; + "<0>Unlock voting to prepare for the next proposal.": string; + "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; + "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; + About: string; + Accept: string; + Account: string; + Active: string; + Add: string; + "Add <0/> and <1/> to Uniswap V2": string; + "Add Delegate +": string; + "Add Liquidity": string; + "Add V2 Liquidity": string; + "Add liquidity.": string; + "Add more liquidity": string; + "Add {0} to Metamask <0/>": (string | string[])[]; + "Add {0}-{1} liquidity": (string | string[])[]; + "Add {0}/{1} V3 liquidity": (string | string[])[]; + "Added {0}": (string | string[])[]; + "Address has no available claim": string; + Against: string; + "Allow LP token migration": string; + "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; + "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; + Allowed: string; + Amount: string; + "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Approval pending <0/>": string; + Approve: string; + "Approve Token": string; + "Approve {0}": (string | string[])[]; + "Approve {0} first": (string | string[])[]; + Approved: string; + Approving: string; + "Approving {0}": (string | string[])[]; + Arbiscan: string; + "Arbitrum Bridge": string; + "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Are you sure?": string; + "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; + "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; + Auto: string; + "Auto Router API": string; + "Available to deposit: {0}": (string | string[])[]; + "Balance: {0}": (string | string[])[]; + "Best for exotic pairs.": string; + "Best for most pairs.": string; + "Best for stable pairs.": string; + "Best for very stable pairs.": string; + "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; + "Blocked address": string; + Bridge: string; + "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; + "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; + Canceled: string; + Change: string; + Charts: string; + "Check network status": string; + "Check out our v3 LP walkthrough and migration guides.": string; + Claim: string; + "Claim <0/> for {0}": (string | string[])[]; + "Claim UNI": string; + "Claim UNI Token": string; + "Claim UNI reward for {0}": (string | string[])[]; + "Claim fees": string; + "Claim your UNI tokens": string; + Claimed: string; + "Claimed UNI!": string; + "Claimed!": string; + Claiming: string; + "Claiming UNI": string; + "Claiming {0} UNI": (string | string[])[]; + "Clear All": string; + "Clear all": string; + Close: string; + Closed: string; + Collect: string; + "Collect as WETH": string; + "Collect fees": string; + "Collect {0}/{1} fees": (string | string[])[]; + Collected: string; + Collecting: string; + "Collecting fees": string; + "Collecting fees will withdraw currently available fees for you.": string; + Confirm: string; + "Confirm Supply": string; + "Confirm Swap": string; + "Confirm swap": string; + "Confirm this transaction in your wallet": string; + "Confirm transaction in wallet": string; + "Connect Wallet": string; + "Connect a wallet": string; + "Connect to a wallet to find pools": string; + "Connect to a wallet to view your V2 liquidity.": string; + "Connect to a wallet to view your liquidity.": string; + "Connect wallet to swap": string; + "Connected with {name}": (string | string[])[]; + Copied: string; + "Copy Address": string; + "Create Pool & Supply": string; + "Create Proposal": string; + "Create a pair": string; + "Create a pool": string; + "Create an issue on GitHub": string; + "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; + "Create pool.": string; + "Create {0}/{1} V3 pool": (string | string[])[]; + "Current price": string; + "Current {0} Price:": (string | string[])[]; + Custom: string; + "Dark Theme": string; + Defeated: string; + "Delegate Votes": string; + "Delegate voting power to {0}": (string | string[])[]; + "Delegated to:": string; + "Delegating votes": string; + Deposit: string; + "Deposit Amounts": string; + "Deposit UNI-V2 LP Tokens": string; + "Deposit liquidity": string; + "Deposit tokens to the {label} network.": (string | string[])[]; + "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; + "Deposited liquidity:": string; + "Deposited {0} UNI-V2": (string | string[])[]; + "Depositing Liquidity": string; + Description: string; + Detailed: string; + Details: string; + Disconnect: string; + Discord: string; + Dismiss: string; + Docs: string; + "Don\u2019t see one of your v2 positions? <0>Import it.": string; + "Earned UNI tokens represent voting shares in Uniswap governance.": string; + Edit: string; + "Efficiency Comparison": string; + "Enter a percent": string; + "Enter a recipient": string; + "Enter a valid slippage percentage": string; + "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; + "Enter an amount": string; + "Enter valid list location": string; + "Enter valid token address": string; + "Enter {0} amount": (string | string[])[]; + Error: string; + "Error connecting": string; + "Error connecting. Try refreshing the page.": string; + "Error details": string; + "Error importing list": string; + "Estimate may differ due to your wallet gas settings": string; + "Estimated network fee": string; + Etherscan: string; + Executed: string; + "Expanded results from inactive Token Lists": string; + "Expected Output": string; + "Expert Mode": string; + "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; + Expired: string; + "Explore Uniswap Analytics.": string; + "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; + "Fee Tier": string; + "Fee tier": string; + "Fetching best price...": string; + "Fetching best price\u2026": string; + For: string; + "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; + From: string; + "From (at most)": string; + "Full Range": string; + "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; + "Get support on Discord": string; + "Help Center": string; + Hide: string; + "Hide closed positions": string; + "High Price Impact": string; + "How this app uses APIs": string; + "I understand": string; + "If you purchase a token from this list, you may not be able to sell it back.": string; + Import: string; + "Import List": string; + "Import Pool": string; + "Import V2 Pool": string; + "Import at your own risk": string; + "In range": string; + "Increase Liquidity": string; + "Initial prices and pool share": string; + "Initializing...": string; + "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Install Metamask": string; + "Insufficient liquidity for this trade.": string; + "Insufficient {0}": (string | string[])[]; + "Insufficient {0} balance": (string | string[])[]; + "Interface Settings": string; + "Invalid pair": string; + "Invalid pair.": string; + "Invalid price input": string; + "Invalid range selected. The min price must be lower than the max price.": string; + "Invalid recipient": string; + Language: string; + Learn: string; + "Learn about providing liquidity": string; + "Learn more": string; + "Legal & Privacy": string; + "Light Theme": string; + Liquidity: string; + "Liquidity data not available.": string; + "Liquidity provider rewards": string; + "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + Lists: string; + Loaded: string; + Loading: string; + MAX: string; + Manage: string; + "Manage Liquidity in Rewards Pool": string; + "Manage Token Lists": string; + "Manage this pool.": string; + Max: string; + "Max Price": string; + "Max price": string; + "Max slippage": string; + "Max:": string; + "Maximum sent": string; + Menu: string; + Migrate: string; + "Migrate Liquidity to V3": string; + "Migrate V2 Liquidity": string; + "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; + "Migrate {0}/{1} liquidity to V3": (string | string[])[]; + Migrating: string; + "Min Price": string; + "Min price": string; + "Min:": string; + "Minimum received": string; + "Missing dependencies": string; + "Mock Toggle": string; + More: string; + "Network Fee": string; + "Network Warning": string; + "Network fees exceed 50% of the swap amount!": string; + "New Position": string; + "No V2 Liquidity found.": string; + "No active pools": string; + "No data": string; + "No description.": string; + "No liquidity found.": string; + "No pool found.": string; + "No proposals found.": string; + "No results found.": string; + "Not created": string; + OFF: string; + ON: string; + "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; + Off: string; + On: string; + "Once you are happy with the rate click supply to review.": string; + "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; + "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; + "Optimism Gateway": string; + "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Optimistic Etherscan": string; + "Out of range": string; + "Output is estimated.": string; + "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; + "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Output will be sent to <0>{0}": (string | string[])[]; + Owner: string; + "Participating pools": string; + Pending: string; + "Please confirm you would like to remove this list by typing REMOVE": string; + "Please connect to Layer 1 Ethereum": string; + "Please connect to a supported network in the dropdown menu or in your wallet.": string; + "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; + "Polygon Bridge": string; + Polygonscan: string; + Pool: string; + "Pool Found!": string; + "Pool Rate": string; + "Pool rate": string; + "Pool tokens in rewards pool:": string; + "Pooled {0}:": (string | string[])[]; + "Pools Overview": string; + Preview: string; + Price: string; + "Price Difference:": string; + "Price Impact": string; + "Price Impact Too High": string; + "Price Updated": string; + "Price impact": string; + "Price range": string; + "Price updated": string; + "Price:": string; + "Prices and pool share": string; + Proposal: string; + "Proposal Submitted": string; + "Proposal Title": string; + Proposals: string; + "Proposals submitted by community members will appear here.": string; + "Proposed Action": string; + Proposer: string; + "Protocol Disclaimer": string; + Queued: string; + Rates: string; + "Read more about UNI": string; + "Read more about Uniswap governance": string; + "Read more about providing liquidity": string; + "Read more about unsupported assets": string; + "Recent Transactions": string; + "Recent transactions": string; + Recipient: string; + "Reload the page": string; + Remove: string; + "Remove <0/> and <1/>": string; + "Remove Amount": string; + "Remove Delegate": string; + "Remove Liquidity": string; + "Remove list": string; + "Removing {0} {1} and {2} {3}": (string | string[])[]; + "Removing {0} {1} and{2} {3}": (string | string[])[]; + "Request Features": string; + Reset: string; + Return: string; + "Review swap": string; + "Search by token name or address": string; + "Search name or paste address": string; + "Select Pair": string; + "Select a network": string; + "Select a token": string; + "Select a token to find your v2 liquidity.": string; + "Select an action": string; + "Selected Range": string; + Self: string; + "Self Delegate": string; + "Set Price Range": string; + "Set Starting Price": string; + Settings: string; + "Share of Pool": string; + "Share of Pool:": string; + "Show Portis": string; + "Show closed positions": string; + Simple: string; + "Slippage tolerance": string; + "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; + "Something went wrong": string; + "Something went wrong.": string; + "Step 1. Get UNI-V2 Liquidity tokens": string; + "Submit new proposal": string; + "Submitting Proposal": string; + "Submitting Vote": string; + Succeeded: string; + Success: string; + Supply: string; + "Supplying {0} {1} and {2} {3}": (string | string[])[]; + Swap: string; + "Swap <0/> for exactly <1/>": string; + "Swap Anyway": string; + "Swap details": string; + "Swap exactly <0/> for <1/>": string; + "Swap failed: {0}": (string | string[])[]; + "Swap summary": string; + "Swapping {0} {1} for {2} {3}": (string | string[])[]; + "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; + "Tell us what you think \u2197": string; + "Thanks for being part of the Uniswap community <0/>": string; + "The % you will earn in fees.": string; + "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; + "The app fetches blockchain data from The Graph\u2019s hosted service.": string; + "The app fetches on-chain data and constructs contract calls with an Infura API.": string; + "The app fetches the optimal trade route from a Uniswap Labs server.": string; + "The app logs anonymized usage statistics in order to improve over time.": string; + "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; + "The cost of sending this transaction is more than half of the value of the input amount.": string; + "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; + "The estimated difference between the USD values of input and output amounts.": string; + "The input token cannot be transferred. There may be an issue with the input token.": string; + "The market price is outside your specified price range. Single-asset deposit only.": string; + "The most recent block number on this network. Prices update on every block.": string; + "The output token cannot be transferred. There may be an issue with the output token.": string; + "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; + "The price of this pool is within your selected range. Your position is currently earning fees.": string; + "The ratio of tokens you add will set the price of this pool.": string; + "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; + "There is no liquidity data.": string; + "This app uses the following third-party APIs:": string; + "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; + "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; + "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; + "This token is not supported in the Uniswap Labs app": string; + "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; + "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; + "Tip: Custom tokens are stored locally in your browser": string; + To: string; + "To (at least)": string; + "Token not supported": string; + Tokens: string; + "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; + "Top pools": string; + "Total deposited": string; + "Total deposits": string; + "Trade Route": string; + Trading: string; + "Transaction Settings": string; + "Transaction Submitted": string; + "Transaction completed in": string; + "Transaction deadline": string; + "Transaction pending": string; + "Transaction rejected.": string; + "Transaction submitted": string; + "Transfer Token": string; + "Try Again": string; + "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Turn On Expert Mode": string; + "UNI has arrived": string; + "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; + "UNI {0}/{1} Burned": (string | string[])[]; + "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; + "UNI-V2 {0}-{1}": (string | string[])[]; + "Unclaimed UNI": string; + "Unclaimed fees": string; + Undetermined: string; + "Unexpected error. Could not estimate gas for the swap.": string; + "Unexpected issue with estimating the gas. Please try again.": string; + "Uniswap Governance": string; + "Uniswap Labs' Terms of Service": string; + "Uniswap available in: <0>{0}": (string | string[])[]; + "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; + "Uniswap liquidity mining": string; + "Uniswap migration contract\u2197": string; + "Unknown Source": string; + "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; + "Unlock Votes": string; + "Unlock Voting": string; + "Unlocking Votes": string; + "Unsupported Asset": string; + "Unsupported Assets": string; + "Unsupported network\u2013switch to another to trade.": string; + Untitled: string; + Unwrap: string; + "Unwrap <0/> to {0}": (string | string[])[]; + "Update Delegation": string; + "Update list": string; + "Use the Uniswap Labs API to get faster quotes.": string; + User: string; + "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; + "V2 liquidity": string; + "V3 {0} Price:": (string | string[])[]; + "View accrued fees and analytics<0>\u2197": string; + "View list": string; + "View on Etherscan": string; + "View on Explorer": string; + "View transaction on Explorer": string; + Vote: string; + "Vote Against": string; + "Vote For": string; + "Vote against proposal {proposalId}": (string | string[])[]; + "Vote against proposal {proposalKey}": (string | string[])[]; + "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote for proposal {proposalId}": (string | string[])[]; + "Vote for proposal {proposalKey}": (string | string[])[]; + "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote to abstain on proposal {proposalId}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Voting ended {0}": (string | string[])[]; + "Voting ends approximately {0}": (string | string[])[]; + "Voting starts approximately {0}": (string | string[])[]; + "Waiting For Confirmation": string; + "Wallet Address or ENS name": string; + "Weekly Rewards": string; + "Welcome to team Unicorn :)": string; + "When you claim without withdrawing your liquidity remains in the mining pool.": string; + "When you withdraw, the contract will automagically claim UNI on your behalf!": string; + "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; + Withdraw: string; + "Withdraw & Claim": string; + "Withdraw deposited liquidity": string; + "Withdrawing {0} UNI-V2": (string | string[])[]; + "Withdrew UNI-V2!": string; + Wrap: string; + "Wrap <0/> to {0}": (string | string[])[]; + "Wrong Network": string; + "You already have an active or pending proposal": string; + "You are creating a pool": string; + "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; + "You are the first liquidity provider.": string; + "You can either vote on each proposal yourself or delegate your votes to a third party.": string; + "You can now trade {0}": (string | string[])[]; + "You don't have enough votes to submit a proposal": string; + "You don\u2019t have liquidity in this pool yet.": string; + "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; + "You may have lost your network connection.": string; + "You might consider waiting until the network fees go down to complete this transaction.": string; + "You must connect an account.": string; + "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; + "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; + "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; + "You will also collect fees earned from this position.": string; + "You will receive": string; + "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; + "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; + "Your V2 liquidity": string; + "Your active V3 liquidity positions will appear here.": string; + "Your liquidity deposits": string; + "Your pool share:": string; + "Your position": string; + "Your position has 0 liquidity, and is not earning fees.": string; + "Your position will appear here.": string; + "Your position will be 100% composed of {0} at this price": (string | string[])[]; + "Your position will be 100% {0} at this price.": (string | string[])[]; + "Your position will not earn fees or be used in trades until the market price moves into your range.": string; + "Your positions": string; + "Your rate": string; + "Your total pool tokens:": string; + "Your transaction cost will be much higher as it includes the gas to create the pool.": string; + "Your transaction may be frontrun": string; + "Your transaction may fail": string; + "Your transaction will revert if it has been pending for longer than this period of time.": string; + "Your transaction will revert if it is pending for more than this period of time.": string; + "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; + "Your transactions will appear here...": string; + "Your unclaimed UNI": string; + "after slippage": string; + confirm: string; + "for {0}": (string | string[])[]; + gwei: string; + "has socks emoji": string; + "here.": string; + "https:// or ipfs:// or ENS name": string; + minutes: string; + "via {0}": (string | string[])[]; + "via {0} token list": (string | string[])[]; + "{0, plural, one {Import token} other {Import tokens}}": (string | { + one: string; + other: string; + })[][]; + "{0}": string[][]; + "{0} %": (string | string[])[]; + "{0} <0/> per <1/>": (string | string[])[]; + "{0} Custom Tokens": (string | string[])[]; + "{0} Deposited": (string | string[])[]; + "{0} ETH": (string | string[])[]; + "{0} Fees Earned:": (string | string[])[]; + "{0} Pending": (string | string[])[]; + "{0} UNI": (string | string[])[]; + "{0} UNI / week": (string | string[])[]; + "{0} UNI-V2": (string | string[])[]; + "{0} UNI-V2 LP tokens available": (string | string[])[]; + "{0} Votes": (string | string[])[]; + "{0} per {1}": (string | string[])[]; + "{0} tokens": (string | string[])[]; + "{0} {1} Price:": (string | string[])[]; + "{0} {nativeCurrencySymbol}": (string | string[])[]; + "{0} \u2022 Added by user": (string | string[])[]; + "{0}%": (string | string[])[]; + "{0}% fee tier": (string | string[])[]; + "{0}% pool": (string | string[])[]; + "{0}% select": (string | string[])[]; + "{0}-{1} Liquidity Mining": (string | string[])[]; + "{0}/{1} LP NFT": (string | string[])[]; + "{0}/{1} LP Tokens": (string | string[])[]; + "{SOCKS_AMOUNT} UNI": (string | string[])[]; + "{USER_AMOUNT} UNI": (string | string[])[]; + "{activeTokensOnThisChain} tokens": (string | string[])[]; + "{integrator} fee": (string | string[])[]; + "{label} token bridge": (string | string[])[]; + "{min}m {sec}s": (string | string[])[]; + "{percentForSlider}%": (string | string[])[]; + "{sec}s": (string | string[])[]; + "{tokenB} per {tokenA}": (string | string[])[]; + "\u2190 Back to Pools Overview": string; +}; diff --git a/dist2/types/locales/ru-RU.d.ts b/dist2/types/locales/ru-RU.d.ts new file mode 100644 index 00000000000..75120e0e5c9 --- /dev/null +++ b/dist2/types/locales/ru-RU.d.ts @@ -0,0 +1,593 @@ +export const messages: { + "$-": string; + "$<0/>": string; + "${0}": (string | string[])[]; + "(${0})": (string | string[])[]; + "(View on Explorer)": string; + "(clear all)": string; + "(edit)": string; + "- Remove recipient": string; + "0 UNI / week": string; + "25%": string; + "50%": string; + "75%": string; + "<0/> All Proposals": string; + "<0/> Votes": string; + "<0>Account analytics and accrued fees<1> \u2197 ": string; + "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; + "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; + "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; + "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; + "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; + "<0>Unlock voting to prepare for the next proposal.": string; + "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; + "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; + About: string; + Accept: string; + Account: string; + Active: string; + Add: string; + "Add <0/> and <1/> to Uniswap V2": string; + "Add Delegate +": string; + "Add Liquidity": string; + "Add V2 Liquidity": string; + "Add liquidity.": string; + "Add more liquidity": string; + "Add {0} to Metamask <0/>": (string | string[])[]; + "Add {0}-{1} liquidity": (string | string[])[]; + "Add {0}/{1} V3 liquidity": (string | string[])[]; + "Added {0}": (string | string[])[]; + "Address has no available claim": string; + Against: string; + "Allow LP token migration": string; + "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; + "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; + Allowed: string; + Amount: string; + "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Approval pending <0/>": string; + Approve: string; + "Approve Token": string; + "Approve {0}": (string | string[])[]; + "Approve {0} first": (string | string[])[]; + Approved: string; + Approving: string; + "Approving {0}": (string | string[])[]; + Arbiscan: string; + "Arbitrum Bridge": string; + "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Are you sure?": string; + "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; + "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; + Auto: string; + "Auto Router API": string; + "Available to deposit: {0}": (string | string[])[]; + "Balance: {0}": (string | string[])[]; + "Best for exotic pairs.": string; + "Best for most pairs.": string; + "Best for stable pairs.": string; + "Best for very stable pairs.": string; + "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; + "Blocked address": string; + Bridge: string; + "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; + "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; + Canceled: string; + Change: string; + Charts: string; + "Check network status": string; + "Check out our v3 LP walkthrough and migration guides.": string; + Claim: string; + "Claim <0/> for {0}": (string | string[])[]; + "Claim UNI": string; + "Claim UNI Token": string; + "Claim UNI reward for {0}": (string | string[])[]; + "Claim fees": string; + "Claim your UNI tokens": string; + Claimed: string; + "Claimed UNI!": string; + "Claimed!": string; + Claiming: string; + "Claiming UNI": string; + "Claiming {0} UNI": (string | string[])[]; + "Clear All": string; + "Clear all": string; + Close: string; + Closed: string; + Collect: string; + "Collect as WETH": string; + "Collect fees": string; + "Collect {0}/{1} fees": (string | string[])[]; + Collected: string; + Collecting: string; + "Collecting fees": string; + "Collecting fees will withdraw currently available fees for you.": string; + Confirm: string; + "Confirm Supply": string; + "Confirm Swap": string; + "Confirm swap": string; + "Confirm this transaction in your wallet": string; + "Confirm transaction in wallet": string; + "Connect Wallet": string; + "Connect a wallet": string; + "Connect to a wallet to find pools": string; + "Connect to a wallet to view your V2 liquidity.": string; + "Connect to a wallet to view your liquidity.": string; + "Connect wallet to swap": string; + "Connected with {name}": (string | string[])[]; + Copied: string; + "Copy Address": string; + "Create Pool & Supply": string; + "Create Proposal": string; + "Create a pair": string; + "Create a pool": string; + "Create an issue on GitHub": string; + "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; + "Create pool.": string; + "Create {0}/{1} V3 pool": (string | string[])[]; + "Current price": string; + "Current {0} Price:": (string | string[])[]; + Custom: string; + "Dark Theme": string; + Defeated: string; + "Delegate Votes": string; + "Delegate voting power to {0}": (string | string[])[]; + "Delegated to:": string; + "Delegating votes": string; + Deposit: string; + "Deposit Amounts": string; + "Deposit UNI-V2 LP Tokens": string; + "Deposit liquidity": string; + "Deposit tokens to the {label} network.": (string | string[])[]; + "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; + "Deposited liquidity:": string; + "Deposited {0} UNI-V2": (string | string[])[]; + "Depositing Liquidity": string; + Description: string; + Detailed: string; + Details: string; + Disconnect: string; + Discord: string; + Dismiss: string; + Docs: string; + "Don\u2019t see one of your v2 positions? <0>Import it.": string; + "Earned UNI tokens represent voting shares in Uniswap governance.": string; + Edit: string; + "Efficiency Comparison": string; + "Enter a percent": string; + "Enter a recipient": string; + "Enter a valid slippage percentage": string; + "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; + "Enter an amount": string; + "Enter valid list location": string; + "Enter valid token address": string; + "Enter {0} amount": (string | string[])[]; + Error: string; + "Error connecting": string; + "Error connecting. Try refreshing the page.": string; + "Error details": string; + "Error importing list": string; + "Estimate may differ due to your wallet gas settings": string; + "Estimated network fee": string; + Etherscan: string; + Executed: string; + "Expanded results from inactive Token Lists": string; + "Expected Output": string; + "Expert Mode": string; + "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; + Expired: string; + "Explore Uniswap Analytics.": string; + "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; + "Fee Tier": string; + "Fee tier": string; + "Fetching best price...": string; + "Fetching best price\u2026": string; + For: string; + "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; + From: string; + "From (at most)": string; + "Full Range": string; + "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; + "Get support on Discord": string; + "Help Center": string; + Hide: string; + "Hide closed positions": string; + "High Price Impact": string; + "How this app uses APIs": string; + "I understand": string; + "If you purchase a token from this list, you may not be able to sell it back.": string; + Import: string; + "Import List": string; + "Import Pool": string; + "Import V2 Pool": string; + "Import at your own risk": string; + "In range": string; + "Increase Liquidity": string; + "Initial prices and pool share": string; + "Initializing...": string; + "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Install Metamask": string; + "Insufficient liquidity for this trade.": string; + "Insufficient {0}": (string | string[])[]; + "Insufficient {0} balance": (string | string[])[]; + "Interface Settings": string; + "Invalid pair": string; + "Invalid pair.": string; + "Invalid price input": string; + "Invalid range selected. The min price must be lower than the max price.": string; + "Invalid recipient": string; + Language: string; + Learn: string; + "Learn about providing liquidity": string; + "Learn more": string; + "Legal & Privacy": string; + "Light Theme": string; + Liquidity: string; + "Liquidity data not available.": string; + "Liquidity provider rewards": string; + "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + Lists: string; + Loaded: string; + Loading: string; + MAX: string; + Manage: string; + "Manage Liquidity in Rewards Pool": string; + "Manage Token Lists": string; + "Manage this pool.": string; + Max: string; + "Max Price": string; + "Max price": string; + "Max slippage": string; + "Max:": string; + "Maximum sent": string; + Menu: string; + Migrate: string; + "Migrate Liquidity to V3": string; + "Migrate V2 Liquidity": string; + "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; + "Migrate {0}/{1} liquidity to V3": (string | string[])[]; + Migrating: string; + "Min Price": string; + "Min price": string; + "Min:": string; + "Minimum received": string; + "Missing dependencies": string; + "Mock Toggle": string; + More: string; + "Network Fee": string; + "Network Warning": string; + "Network fees exceed 50% of the swap amount!": string; + "New Position": string; + "No V2 Liquidity found.": string; + "No active pools": string; + "No data": string; + "No description.": string; + "No liquidity found.": string; + "No pool found.": string; + "No proposals found.": string; + "No results found.": string; + "Not created": string; + OFF: string; + ON: string; + "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; + Off: string; + On: string; + "Once you are happy with the rate click supply to review.": string; + "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; + "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; + "Optimism Gateway": string; + "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Optimistic Etherscan": string; + "Out of range": string; + "Output is estimated.": string; + "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; + "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Output will be sent to <0>{0}": (string | string[])[]; + Owner: string; + "Participating pools": string; + Pending: string; + "Please confirm you would like to remove this list by typing REMOVE": string; + "Please connect to Layer 1 Ethereum": string; + "Please connect to a supported network in the dropdown menu or in your wallet.": string; + "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; + "Polygon Bridge": string; + Polygonscan: string; + Pool: string; + "Pool Found!": string; + "Pool Rate": string; + "Pool rate": string; + "Pool tokens in rewards pool:": string; + "Pooled {0}:": (string | string[])[]; + "Pools Overview": string; + Preview: string; + Price: string; + "Price Difference:": string; + "Price Impact": string; + "Price Impact Too High": string; + "Price Updated": string; + "Price impact": string; + "Price range": string; + "Price updated": string; + "Price:": string; + "Prices and pool share": string; + Proposal: string; + "Proposal Submitted": string; + "Proposal Title": string; + Proposals: string; + "Proposals submitted by community members will appear here.": string; + "Proposed Action": string; + Proposer: string; + "Protocol Disclaimer": string; + Queued: string; + Rates: string; + "Read more about UNI": string; + "Read more about Uniswap governance": string; + "Read more about providing liquidity": string; + "Read more about unsupported assets": string; + "Recent Transactions": string; + "Recent transactions": string; + Recipient: string; + "Reload the page": string; + Remove: string; + "Remove <0/> and <1/>": string; + "Remove Amount": string; + "Remove Delegate": string; + "Remove Liquidity": string; + "Remove list": string; + "Removing {0} {1} and {2} {3}": (string | string[])[]; + "Removing {0} {1} and{2} {3}": (string | string[])[]; + "Request Features": string; + Reset: string; + Return: string; + "Review swap": string; + "Search by token name or address": string; + "Search name or paste address": string; + "Select Pair": string; + "Select a network": string; + "Select a token": string; + "Select a token to find your v2 liquidity.": string; + "Select an action": string; + "Selected Range": string; + Self: string; + "Self Delegate": string; + "Set Price Range": string; + "Set Starting Price": string; + Settings: string; + "Share of Pool": string; + "Share of Pool:": string; + "Show Portis": string; + "Show closed positions": string; + Simple: string; + "Slippage tolerance": string; + "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; + "Something went wrong": string; + "Something went wrong.": string; + "Step 1. Get UNI-V2 Liquidity tokens": string; + "Submit new proposal": string; + "Submitting Proposal": string; + "Submitting Vote": string; + Succeeded: string; + Success: string; + Supply: string; + "Supplying {0} {1} and {2} {3}": (string | string[])[]; + Swap: string; + "Swap <0/> for exactly <1/>": string; + "Swap Anyway": string; + "Swap details": string; + "Swap exactly <0/> for <1/>": string; + "Swap failed: {0}": (string | string[])[]; + "Swap summary": string; + "Swapping {0} {1} for {2} {3}": (string | string[])[]; + "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; + "Tell us what you think \u2197": string; + "Thanks for being part of the Uniswap community <0/>": string; + "The % you will earn in fees.": string; + "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; + "The app fetches blockchain data from The Graph\u2019s hosted service.": string; + "The app fetches on-chain data and constructs contract calls with an Infura API.": string; + "The app fetches the optimal trade route from a Uniswap Labs server.": string; + "The app logs anonymized usage statistics in order to improve over time.": string; + "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; + "The cost of sending this transaction is more than half of the value of the input amount.": string; + "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; + "The estimated difference between the USD values of input and output amounts.": string; + "The input token cannot be transferred. There may be an issue with the input token.": string; + "The market price is outside your specified price range. Single-asset deposit only.": string; + "The most recent block number on this network. Prices update on every block.": string; + "The output token cannot be transferred. There may be an issue with the output token.": string; + "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; + "The price of this pool is within your selected range. Your position is currently earning fees.": string; + "The ratio of tokens you add will set the price of this pool.": string; + "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; + "There is no liquidity data.": string; + "This app uses the following third-party APIs:": string; + "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; + "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; + "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; + "This token is not supported in the Uniswap Labs app": string; + "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; + "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; + "Tip: Custom tokens are stored locally in your browser": string; + To: string; + "To (at least)": string; + "Token not supported": string; + Tokens: string; + "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; + "Top pools": string; + "Total deposited": string; + "Total deposits": string; + "Trade Route": string; + Trading: string; + "Transaction Settings": string; + "Transaction Submitted": string; + "Transaction completed in": string; + "Transaction deadline": string; + "Transaction pending": string; + "Transaction rejected.": string; + "Transaction submitted": string; + "Transfer Token": string; + "Try Again": string; + "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Turn On Expert Mode": string; + "UNI has arrived": string; + "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; + "UNI {0}/{1} Burned": (string | string[])[]; + "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; + "UNI-V2 {0}-{1}": (string | string[])[]; + "Unclaimed UNI": string; + "Unclaimed fees": string; + Undetermined: string; + "Unexpected error. Could not estimate gas for the swap.": string; + "Unexpected issue with estimating the gas. Please try again.": string; + "Uniswap Governance": string; + "Uniswap Labs' Terms of Service": string; + "Uniswap available in: <0>{0}": (string | string[])[]; + "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; + "Uniswap liquidity mining": string; + "Uniswap migration contract\u2197": string; + "Unknown Source": string; + "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; + "Unlock Votes": string; + "Unlock Voting": string; + "Unlocking Votes": string; + "Unsupported Asset": string; + "Unsupported Assets": string; + "Unsupported network\u2013switch to another to trade.": string; + Untitled: string; + Unwrap: string; + "Unwrap <0/> to {0}": (string | string[])[]; + "Update Delegation": string; + "Update list": string; + "Use the Uniswap Labs API to get faster quotes.": string; + User: string; + "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; + "V2 liquidity": string; + "V3 {0} Price:": (string | string[])[]; + "View accrued fees and analytics<0>\u2197": string; + "View list": string; + "View on Etherscan": string; + "View on Explorer": string; + "View transaction on Explorer": string; + Vote: string; + "Vote Against": string; + "Vote For": string; + "Vote against proposal {proposalId}": (string | string[])[]; + "Vote against proposal {proposalKey}": (string | string[])[]; + "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote for proposal {proposalId}": (string | string[])[]; + "Vote for proposal {proposalKey}": (string | string[])[]; + "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote to abstain on proposal {proposalId}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Voting ended {0}": (string | string[])[]; + "Voting ends approximately {0}": (string | string[])[]; + "Voting starts approximately {0}": (string | string[])[]; + "Waiting For Confirmation": string; + "Wallet Address or ENS name": string; + "Weekly Rewards": string; + "Welcome to team Unicorn :)": string; + "When you claim without withdrawing your liquidity remains in the mining pool.": string; + "When you withdraw, the contract will automagically claim UNI on your behalf!": string; + "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; + Withdraw: string; + "Withdraw & Claim": string; + "Withdraw deposited liquidity": string; + "Withdrawing {0} UNI-V2": (string | string[])[]; + "Withdrew UNI-V2!": string; + Wrap: string; + "Wrap <0/> to {0}": (string | string[])[]; + "Wrong Network": string; + "You already have an active or pending proposal": string; + "You are creating a pool": string; + "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; + "You are the first liquidity provider.": string; + "You can either vote on each proposal yourself or delegate your votes to a third party.": string; + "You can now trade {0}": (string | string[])[]; + "You don't have enough votes to submit a proposal": string; + "You don\u2019t have liquidity in this pool yet.": string; + "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; + "You may have lost your network connection.": string; + "You might consider waiting until the network fees go down to complete this transaction.": string; + "You must connect an account.": string; + "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; + "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; + "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; + "You will also collect fees earned from this position.": string; + "You will receive": string; + "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; + "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; + "Your V2 liquidity": string; + "Your active V3 liquidity positions will appear here.": string; + "Your liquidity deposits": string; + "Your pool share:": string; + "Your position": string; + "Your position has 0 liquidity, and is not earning fees.": string; + "Your position will appear here.": string; + "Your position will be 100% composed of {0} at this price": (string | string[])[]; + "Your position will be 100% {0} at this price.": (string | string[])[]; + "Your position will not earn fees or be used in trades until the market price moves into your range.": string; + "Your positions": string; + "Your rate": string; + "Your total pool tokens:": string; + "Your transaction cost will be much higher as it includes the gas to create the pool.": string; + "Your transaction may be frontrun": string; + "Your transaction may fail": string; + "Your transaction will revert if it has been pending for longer than this period of time.": string; + "Your transaction will revert if it is pending for more than this period of time.": string; + "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; + "Your transactions will appear here...": string; + "Your unclaimed UNI": string; + "after slippage": string; + confirm: string; + "for {0}": (string | string[])[]; + gwei: string; + "has socks emoji": string; + "here.": string; + "https:// or ipfs:// or ENS name": string; + minutes: string; + "via {0}": (string | string[])[]; + "via {0} token list": (string | string[])[]; + "{0, plural, one {Import token} other {Import tokens}}": (string | { + one: string; + other: string; + })[][]; + "{0}": string[][]; + "{0} %": (string | string[])[]; + "{0} <0/> per <1/>": (string | string[])[]; + "{0} Custom Tokens": (string | string[])[]; + "{0} Deposited": (string | string[])[]; + "{0} ETH": (string | string[])[]; + "{0} Fees Earned:": (string | string[])[]; + "{0} Pending": (string | string[])[]; + "{0} UNI": (string | string[])[]; + "{0} UNI / week": (string | string[])[]; + "{0} UNI-V2": (string | string[])[]; + "{0} UNI-V2 LP tokens available": (string | string[])[]; + "{0} Votes": (string | string[])[]; + "{0} per {1}": (string | string[])[]; + "{0} tokens": (string | string[])[]; + "{0} {1} Price:": (string | string[])[]; + "{0} {nativeCurrencySymbol}": (string | string[])[]; + "{0} \u2022 Added by user": (string | string[])[]; + "{0}%": (string | string[])[]; + "{0}% fee tier": (string | string[])[]; + "{0}% pool": (string | string[])[]; + "{0}% select": (string | string[])[]; + "{0}-{1} Liquidity Mining": (string | string[])[]; + "{0}/{1} LP NFT": (string | string[])[]; + "{0}/{1} LP Tokens": (string | string[])[]; + "{SOCKS_AMOUNT} UNI": (string | string[])[]; + "{USER_AMOUNT} UNI": (string | string[])[]; + "{activeTokensOnThisChain} tokens": (string | string[])[]; + "{integrator} fee": (string | string[])[]; + "{label} token bridge": (string | string[])[]; + "{min}m {sec}s": (string | string[])[]; + "{percentForSlider}%": (string | string[])[]; + "{sec}s": (string | string[])[]; + "{tokenB} per {tokenA}": (string | string[])[]; + "\u2190 Back to Pools Overview": string; +}; diff --git a/dist2/types/locales/sr-SP.d.ts b/dist2/types/locales/sr-SP.d.ts new file mode 100644 index 00000000000..75120e0e5c9 --- /dev/null +++ b/dist2/types/locales/sr-SP.d.ts @@ -0,0 +1,593 @@ +export const messages: { + "$-": string; + "$<0/>": string; + "${0}": (string | string[])[]; + "(${0})": (string | string[])[]; + "(View on Explorer)": string; + "(clear all)": string; + "(edit)": string; + "- Remove recipient": string; + "0 UNI / week": string; + "25%": string; + "50%": string; + "75%": string; + "<0/> All Proposals": string; + "<0/> Votes": string; + "<0>Account analytics and accrued fees<1> \u2197 ": string; + "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; + "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; + "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; + "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; + "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; + "<0>Unlock voting to prepare for the next proposal.": string; + "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; + "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; + About: string; + Accept: string; + Account: string; + Active: string; + Add: string; + "Add <0/> and <1/> to Uniswap V2": string; + "Add Delegate +": string; + "Add Liquidity": string; + "Add V2 Liquidity": string; + "Add liquidity.": string; + "Add more liquidity": string; + "Add {0} to Metamask <0/>": (string | string[])[]; + "Add {0}-{1} liquidity": (string | string[])[]; + "Add {0}/{1} V3 liquidity": (string | string[])[]; + "Added {0}": (string | string[])[]; + "Address has no available claim": string; + Against: string; + "Allow LP token migration": string; + "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; + "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; + Allowed: string; + Amount: string; + "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Approval pending <0/>": string; + Approve: string; + "Approve Token": string; + "Approve {0}": (string | string[])[]; + "Approve {0} first": (string | string[])[]; + Approved: string; + Approving: string; + "Approving {0}": (string | string[])[]; + Arbiscan: string; + "Arbitrum Bridge": string; + "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Are you sure?": string; + "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; + "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; + Auto: string; + "Auto Router API": string; + "Available to deposit: {0}": (string | string[])[]; + "Balance: {0}": (string | string[])[]; + "Best for exotic pairs.": string; + "Best for most pairs.": string; + "Best for stable pairs.": string; + "Best for very stable pairs.": string; + "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; + "Blocked address": string; + Bridge: string; + "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; + "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; + Canceled: string; + Change: string; + Charts: string; + "Check network status": string; + "Check out our v3 LP walkthrough and migration guides.": string; + Claim: string; + "Claim <0/> for {0}": (string | string[])[]; + "Claim UNI": string; + "Claim UNI Token": string; + "Claim UNI reward for {0}": (string | string[])[]; + "Claim fees": string; + "Claim your UNI tokens": string; + Claimed: string; + "Claimed UNI!": string; + "Claimed!": string; + Claiming: string; + "Claiming UNI": string; + "Claiming {0} UNI": (string | string[])[]; + "Clear All": string; + "Clear all": string; + Close: string; + Closed: string; + Collect: string; + "Collect as WETH": string; + "Collect fees": string; + "Collect {0}/{1} fees": (string | string[])[]; + Collected: string; + Collecting: string; + "Collecting fees": string; + "Collecting fees will withdraw currently available fees for you.": string; + Confirm: string; + "Confirm Supply": string; + "Confirm Swap": string; + "Confirm swap": string; + "Confirm this transaction in your wallet": string; + "Confirm transaction in wallet": string; + "Connect Wallet": string; + "Connect a wallet": string; + "Connect to a wallet to find pools": string; + "Connect to a wallet to view your V2 liquidity.": string; + "Connect to a wallet to view your liquidity.": string; + "Connect wallet to swap": string; + "Connected with {name}": (string | string[])[]; + Copied: string; + "Copy Address": string; + "Create Pool & Supply": string; + "Create Proposal": string; + "Create a pair": string; + "Create a pool": string; + "Create an issue on GitHub": string; + "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; + "Create pool.": string; + "Create {0}/{1} V3 pool": (string | string[])[]; + "Current price": string; + "Current {0} Price:": (string | string[])[]; + Custom: string; + "Dark Theme": string; + Defeated: string; + "Delegate Votes": string; + "Delegate voting power to {0}": (string | string[])[]; + "Delegated to:": string; + "Delegating votes": string; + Deposit: string; + "Deposit Amounts": string; + "Deposit UNI-V2 LP Tokens": string; + "Deposit liquidity": string; + "Deposit tokens to the {label} network.": (string | string[])[]; + "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; + "Deposited liquidity:": string; + "Deposited {0} UNI-V2": (string | string[])[]; + "Depositing Liquidity": string; + Description: string; + Detailed: string; + Details: string; + Disconnect: string; + Discord: string; + Dismiss: string; + Docs: string; + "Don\u2019t see one of your v2 positions? <0>Import it.": string; + "Earned UNI tokens represent voting shares in Uniswap governance.": string; + Edit: string; + "Efficiency Comparison": string; + "Enter a percent": string; + "Enter a recipient": string; + "Enter a valid slippage percentage": string; + "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; + "Enter an amount": string; + "Enter valid list location": string; + "Enter valid token address": string; + "Enter {0} amount": (string | string[])[]; + Error: string; + "Error connecting": string; + "Error connecting. Try refreshing the page.": string; + "Error details": string; + "Error importing list": string; + "Estimate may differ due to your wallet gas settings": string; + "Estimated network fee": string; + Etherscan: string; + Executed: string; + "Expanded results from inactive Token Lists": string; + "Expected Output": string; + "Expert Mode": string; + "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; + Expired: string; + "Explore Uniswap Analytics.": string; + "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; + "Fee Tier": string; + "Fee tier": string; + "Fetching best price...": string; + "Fetching best price\u2026": string; + For: string; + "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; + From: string; + "From (at most)": string; + "Full Range": string; + "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; + "Get support on Discord": string; + "Help Center": string; + Hide: string; + "Hide closed positions": string; + "High Price Impact": string; + "How this app uses APIs": string; + "I understand": string; + "If you purchase a token from this list, you may not be able to sell it back.": string; + Import: string; + "Import List": string; + "Import Pool": string; + "Import V2 Pool": string; + "Import at your own risk": string; + "In range": string; + "Increase Liquidity": string; + "Initial prices and pool share": string; + "Initializing...": string; + "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Install Metamask": string; + "Insufficient liquidity for this trade.": string; + "Insufficient {0}": (string | string[])[]; + "Insufficient {0} balance": (string | string[])[]; + "Interface Settings": string; + "Invalid pair": string; + "Invalid pair.": string; + "Invalid price input": string; + "Invalid range selected. The min price must be lower than the max price.": string; + "Invalid recipient": string; + Language: string; + Learn: string; + "Learn about providing liquidity": string; + "Learn more": string; + "Legal & Privacy": string; + "Light Theme": string; + Liquidity: string; + "Liquidity data not available.": string; + "Liquidity provider rewards": string; + "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + Lists: string; + Loaded: string; + Loading: string; + MAX: string; + Manage: string; + "Manage Liquidity in Rewards Pool": string; + "Manage Token Lists": string; + "Manage this pool.": string; + Max: string; + "Max Price": string; + "Max price": string; + "Max slippage": string; + "Max:": string; + "Maximum sent": string; + Menu: string; + Migrate: string; + "Migrate Liquidity to V3": string; + "Migrate V2 Liquidity": string; + "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; + "Migrate {0}/{1} liquidity to V3": (string | string[])[]; + Migrating: string; + "Min Price": string; + "Min price": string; + "Min:": string; + "Minimum received": string; + "Missing dependencies": string; + "Mock Toggle": string; + More: string; + "Network Fee": string; + "Network Warning": string; + "Network fees exceed 50% of the swap amount!": string; + "New Position": string; + "No V2 Liquidity found.": string; + "No active pools": string; + "No data": string; + "No description.": string; + "No liquidity found.": string; + "No pool found.": string; + "No proposals found.": string; + "No results found.": string; + "Not created": string; + OFF: string; + ON: string; + "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; + Off: string; + On: string; + "Once you are happy with the rate click supply to review.": string; + "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; + "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; + "Optimism Gateway": string; + "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Optimistic Etherscan": string; + "Out of range": string; + "Output is estimated.": string; + "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; + "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Output will be sent to <0>{0}": (string | string[])[]; + Owner: string; + "Participating pools": string; + Pending: string; + "Please confirm you would like to remove this list by typing REMOVE": string; + "Please connect to Layer 1 Ethereum": string; + "Please connect to a supported network in the dropdown menu or in your wallet.": string; + "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; + "Polygon Bridge": string; + Polygonscan: string; + Pool: string; + "Pool Found!": string; + "Pool Rate": string; + "Pool rate": string; + "Pool tokens in rewards pool:": string; + "Pooled {0}:": (string | string[])[]; + "Pools Overview": string; + Preview: string; + Price: string; + "Price Difference:": string; + "Price Impact": string; + "Price Impact Too High": string; + "Price Updated": string; + "Price impact": string; + "Price range": string; + "Price updated": string; + "Price:": string; + "Prices and pool share": string; + Proposal: string; + "Proposal Submitted": string; + "Proposal Title": string; + Proposals: string; + "Proposals submitted by community members will appear here.": string; + "Proposed Action": string; + Proposer: string; + "Protocol Disclaimer": string; + Queued: string; + Rates: string; + "Read more about UNI": string; + "Read more about Uniswap governance": string; + "Read more about providing liquidity": string; + "Read more about unsupported assets": string; + "Recent Transactions": string; + "Recent transactions": string; + Recipient: string; + "Reload the page": string; + Remove: string; + "Remove <0/> and <1/>": string; + "Remove Amount": string; + "Remove Delegate": string; + "Remove Liquidity": string; + "Remove list": string; + "Removing {0} {1} and {2} {3}": (string | string[])[]; + "Removing {0} {1} and{2} {3}": (string | string[])[]; + "Request Features": string; + Reset: string; + Return: string; + "Review swap": string; + "Search by token name or address": string; + "Search name or paste address": string; + "Select Pair": string; + "Select a network": string; + "Select a token": string; + "Select a token to find your v2 liquidity.": string; + "Select an action": string; + "Selected Range": string; + Self: string; + "Self Delegate": string; + "Set Price Range": string; + "Set Starting Price": string; + Settings: string; + "Share of Pool": string; + "Share of Pool:": string; + "Show Portis": string; + "Show closed positions": string; + Simple: string; + "Slippage tolerance": string; + "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; + "Something went wrong": string; + "Something went wrong.": string; + "Step 1. Get UNI-V2 Liquidity tokens": string; + "Submit new proposal": string; + "Submitting Proposal": string; + "Submitting Vote": string; + Succeeded: string; + Success: string; + Supply: string; + "Supplying {0} {1} and {2} {3}": (string | string[])[]; + Swap: string; + "Swap <0/> for exactly <1/>": string; + "Swap Anyway": string; + "Swap details": string; + "Swap exactly <0/> for <1/>": string; + "Swap failed: {0}": (string | string[])[]; + "Swap summary": string; + "Swapping {0} {1} for {2} {3}": (string | string[])[]; + "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; + "Tell us what you think \u2197": string; + "Thanks for being part of the Uniswap community <0/>": string; + "The % you will earn in fees.": string; + "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; + "The app fetches blockchain data from The Graph\u2019s hosted service.": string; + "The app fetches on-chain data and constructs contract calls with an Infura API.": string; + "The app fetches the optimal trade route from a Uniswap Labs server.": string; + "The app logs anonymized usage statistics in order to improve over time.": string; + "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; + "The cost of sending this transaction is more than half of the value of the input amount.": string; + "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; + "The estimated difference between the USD values of input and output amounts.": string; + "The input token cannot be transferred. There may be an issue with the input token.": string; + "The market price is outside your specified price range. Single-asset deposit only.": string; + "The most recent block number on this network. Prices update on every block.": string; + "The output token cannot be transferred. There may be an issue with the output token.": string; + "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; + "The price of this pool is within your selected range. Your position is currently earning fees.": string; + "The ratio of tokens you add will set the price of this pool.": string; + "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; + "There is no liquidity data.": string; + "This app uses the following third-party APIs:": string; + "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; + "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; + "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; + "This token is not supported in the Uniswap Labs app": string; + "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; + "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; + "Tip: Custom tokens are stored locally in your browser": string; + To: string; + "To (at least)": string; + "Token not supported": string; + Tokens: string; + "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; + "Top pools": string; + "Total deposited": string; + "Total deposits": string; + "Trade Route": string; + Trading: string; + "Transaction Settings": string; + "Transaction Submitted": string; + "Transaction completed in": string; + "Transaction deadline": string; + "Transaction pending": string; + "Transaction rejected.": string; + "Transaction submitted": string; + "Transfer Token": string; + "Try Again": string; + "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Turn On Expert Mode": string; + "UNI has arrived": string; + "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; + "UNI {0}/{1} Burned": (string | string[])[]; + "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; + "UNI-V2 {0}-{1}": (string | string[])[]; + "Unclaimed UNI": string; + "Unclaimed fees": string; + Undetermined: string; + "Unexpected error. Could not estimate gas for the swap.": string; + "Unexpected issue with estimating the gas. Please try again.": string; + "Uniswap Governance": string; + "Uniswap Labs' Terms of Service": string; + "Uniswap available in: <0>{0}": (string | string[])[]; + "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; + "Uniswap liquidity mining": string; + "Uniswap migration contract\u2197": string; + "Unknown Source": string; + "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; + "Unlock Votes": string; + "Unlock Voting": string; + "Unlocking Votes": string; + "Unsupported Asset": string; + "Unsupported Assets": string; + "Unsupported network\u2013switch to another to trade.": string; + Untitled: string; + Unwrap: string; + "Unwrap <0/> to {0}": (string | string[])[]; + "Update Delegation": string; + "Update list": string; + "Use the Uniswap Labs API to get faster quotes.": string; + User: string; + "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; + "V2 liquidity": string; + "V3 {0} Price:": (string | string[])[]; + "View accrued fees and analytics<0>\u2197": string; + "View list": string; + "View on Etherscan": string; + "View on Explorer": string; + "View transaction on Explorer": string; + Vote: string; + "Vote Against": string; + "Vote For": string; + "Vote against proposal {proposalId}": (string | string[])[]; + "Vote against proposal {proposalKey}": (string | string[])[]; + "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote for proposal {proposalId}": (string | string[])[]; + "Vote for proposal {proposalKey}": (string | string[])[]; + "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote to abstain on proposal {proposalId}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Voting ended {0}": (string | string[])[]; + "Voting ends approximately {0}": (string | string[])[]; + "Voting starts approximately {0}": (string | string[])[]; + "Waiting For Confirmation": string; + "Wallet Address or ENS name": string; + "Weekly Rewards": string; + "Welcome to team Unicorn :)": string; + "When you claim without withdrawing your liquidity remains in the mining pool.": string; + "When you withdraw, the contract will automagically claim UNI on your behalf!": string; + "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; + Withdraw: string; + "Withdraw & Claim": string; + "Withdraw deposited liquidity": string; + "Withdrawing {0} UNI-V2": (string | string[])[]; + "Withdrew UNI-V2!": string; + Wrap: string; + "Wrap <0/> to {0}": (string | string[])[]; + "Wrong Network": string; + "You already have an active or pending proposal": string; + "You are creating a pool": string; + "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; + "You are the first liquidity provider.": string; + "You can either vote on each proposal yourself or delegate your votes to a third party.": string; + "You can now trade {0}": (string | string[])[]; + "You don't have enough votes to submit a proposal": string; + "You don\u2019t have liquidity in this pool yet.": string; + "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; + "You may have lost your network connection.": string; + "You might consider waiting until the network fees go down to complete this transaction.": string; + "You must connect an account.": string; + "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; + "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; + "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; + "You will also collect fees earned from this position.": string; + "You will receive": string; + "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; + "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; + "Your V2 liquidity": string; + "Your active V3 liquidity positions will appear here.": string; + "Your liquidity deposits": string; + "Your pool share:": string; + "Your position": string; + "Your position has 0 liquidity, and is not earning fees.": string; + "Your position will appear here.": string; + "Your position will be 100% composed of {0} at this price": (string | string[])[]; + "Your position will be 100% {0} at this price.": (string | string[])[]; + "Your position will not earn fees or be used in trades until the market price moves into your range.": string; + "Your positions": string; + "Your rate": string; + "Your total pool tokens:": string; + "Your transaction cost will be much higher as it includes the gas to create the pool.": string; + "Your transaction may be frontrun": string; + "Your transaction may fail": string; + "Your transaction will revert if it has been pending for longer than this period of time.": string; + "Your transaction will revert if it is pending for more than this period of time.": string; + "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; + "Your transactions will appear here...": string; + "Your unclaimed UNI": string; + "after slippage": string; + confirm: string; + "for {0}": (string | string[])[]; + gwei: string; + "has socks emoji": string; + "here.": string; + "https:// or ipfs:// or ENS name": string; + minutes: string; + "via {0}": (string | string[])[]; + "via {0} token list": (string | string[])[]; + "{0, plural, one {Import token} other {Import tokens}}": (string | { + one: string; + other: string; + })[][]; + "{0}": string[][]; + "{0} %": (string | string[])[]; + "{0} <0/> per <1/>": (string | string[])[]; + "{0} Custom Tokens": (string | string[])[]; + "{0} Deposited": (string | string[])[]; + "{0} ETH": (string | string[])[]; + "{0} Fees Earned:": (string | string[])[]; + "{0} Pending": (string | string[])[]; + "{0} UNI": (string | string[])[]; + "{0} UNI / week": (string | string[])[]; + "{0} UNI-V2": (string | string[])[]; + "{0} UNI-V2 LP tokens available": (string | string[])[]; + "{0} Votes": (string | string[])[]; + "{0} per {1}": (string | string[])[]; + "{0} tokens": (string | string[])[]; + "{0} {1} Price:": (string | string[])[]; + "{0} {nativeCurrencySymbol}": (string | string[])[]; + "{0} \u2022 Added by user": (string | string[])[]; + "{0}%": (string | string[])[]; + "{0}% fee tier": (string | string[])[]; + "{0}% pool": (string | string[])[]; + "{0}% select": (string | string[])[]; + "{0}-{1} Liquidity Mining": (string | string[])[]; + "{0}/{1} LP NFT": (string | string[])[]; + "{0}/{1} LP Tokens": (string | string[])[]; + "{SOCKS_AMOUNT} UNI": (string | string[])[]; + "{USER_AMOUNT} UNI": (string | string[])[]; + "{activeTokensOnThisChain} tokens": (string | string[])[]; + "{integrator} fee": (string | string[])[]; + "{label} token bridge": (string | string[])[]; + "{min}m {sec}s": (string | string[])[]; + "{percentForSlider}%": (string | string[])[]; + "{sec}s": (string | string[])[]; + "{tokenB} per {tokenA}": (string | string[])[]; + "\u2190 Back to Pools Overview": string; +}; diff --git a/dist2/types/locales/sv-SE.d.ts b/dist2/types/locales/sv-SE.d.ts new file mode 100644 index 00000000000..75120e0e5c9 --- /dev/null +++ b/dist2/types/locales/sv-SE.d.ts @@ -0,0 +1,593 @@ +export const messages: { + "$-": string; + "$<0/>": string; + "${0}": (string | string[])[]; + "(${0})": (string | string[])[]; + "(View on Explorer)": string; + "(clear all)": string; + "(edit)": string; + "- Remove recipient": string; + "0 UNI / week": string; + "25%": string; + "50%": string; + "75%": string; + "<0/> All Proposals": string; + "<0/> Votes": string; + "<0>Account analytics and accrued fees<1> \u2197 ": string; + "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; + "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; + "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; + "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; + "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; + "<0>Unlock voting to prepare for the next proposal.": string; + "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; + "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; + About: string; + Accept: string; + Account: string; + Active: string; + Add: string; + "Add <0/> and <1/> to Uniswap V2": string; + "Add Delegate +": string; + "Add Liquidity": string; + "Add V2 Liquidity": string; + "Add liquidity.": string; + "Add more liquidity": string; + "Add {0} to Metamask <0/>": (string | string[])[]; + "Add {0}-{1} liquidity": (string | string[])[]; + "Add {0}/{1} V3 liquidity": (string | string[])[]; + "Added {0}": (string | string[])[]; + "Address has no available claim": string; + Against: string; + "Allow LP token migration": string; + "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; + "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; + Allowed: string; + Amount: string; + "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Approval pending <0/>": string; + Approve: string; + "Approve Token": string; + "Approve {0}": (string | string[])[]; + "Approve {0} first": (string | string[])[]; + Approved: string; + Approving: string; + "Approving {0}": (string | string[])[]; + Arbiscan: string; + "Arbitrum Bridge": string; + "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Are you sure?": string; + "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; + "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; + Auto: string; + "Auto Router API": string; + "Available to deposit: {0}": (string | string[])[]; + "Balance: {0}": (string | string[])[]; + "Best for exotic pairs.": string; + "Best for most pairs.": string; + "Best for stable pairs.": string; + "Best for very stable pairs.": string; + "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; + "Blocked address": string; + Bridge: string; + "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; + "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; + Canceled: string; + Change: string; + Charts: string; + "Check network status": string; + "Check out our v3 LP walkthrough and migration guides.": string; + Claim: string; + "Claim <0/> for {0}": (string | string[])[]; + "Claim UNI": string; + "Claim UNI Token": string; + "Claim UNI reward for {0}": (string | string[])[]; + "Claim fees": string; + "Claim your UNI tokens": string; + Claimed: string; + "Claimed UNI!": string; + "Claimed!": string; + Claiming: string; + "Claiming UNI": string; + "Claiming {0} UNI": (string | string[])[]; + "Clear All": string; + "Clear all": string; + Close: string; + Closed: string; + Collect: string; + "Collect as WETH": string; + "Collect fees": string; + "Collect {0}/{1} fees": (string | string[])[]; + Collected: string; + Collecting: string; + "Collecting fees": string; + "Collecting fees will withdraw currently available fees for you.": string; + Confirm: string; + "Confirm Supply": string; + "Confirm Swap": string; + "Confirm swap": string; + "Confirm this transaction in your wallet": string; + "Confirm transaction in wallet": string; + "Connect Wallet": string; + "Connect a wallet": string; + "Connect to a wallet to find pools": string; + "Connect to a wallet to view your V2 liquidity.": string; + "Connect to a wallet to view your liquidity.": string; + "Connect wallet to swap": string; + "Connected with {name}": (string | string[])[]; + Copied: string; + "Copy Address": string; + "Create Pool & Supply": string; + "Create Proposal": string; + "Create a pair": string; + "Create a pool": string; + "Create an issue on GitHub": string; + "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; + "Create pool.": string; + "Create {0}/{1} V3 pool": (string | string[])[]; + "Current price": string; + "Current {0} Price:": (string | string[])[]; + Custom: string; + "Dark Theme": string; + Defeated: string; + "Delegate Votes": string; + "Delegate voting power to {0}": (string | string[])[]; + "Delegated to:": string; + "Delegating votes": string; + Deposit: string; + "Deposit Amounts": string; + "Deposit UNI-V2 LP Tokens": string; + "Deposit liquidity": string; + "Deposit tokens to the {label} network.": (string | string[])[]; + "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; + "Deposited liquidity:": string; + "Deposited {0} UNI-V2": (string | string[])[]; + "Depositing Liquidity": string; + Description: string; + Detailed: string; + Details: string; + Disconnect: string; + Discord: string; + Dismiss: string; + Docs: string; + "Don\u2019t see one of your v2 positions? <0>Import it.": string; + "Earned UNI tokens represent voting shares in Uniswap governance.": string; + Edit: string; + "Efficiency Comparison": string; + "Enter a percent": string; + "Enter a recipient": string; + "Enter a valid slippage percentage": string; + "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; + "Enter an amount": string; + "Enter valid list location": string; + "Enter valid token address": string; + "Enter {0} amount": (string | string[])[]; + Error: string; + "Error connecting": string; + "Error connecting. Try refreshing the page.": string; + "Error details": string; + "Error importing list": string; + "Estimate may differ due to your wallet gas settings": string; + "Estimated network fee": string; + Etherscan: string; + Executed: string; + "Expanded results from inactive Token Lists": string; + "Expected Output": string; + "Expert Mode": string; + "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; + Expired: string; + "Explore Uniswap Analytics.": string; + "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; + "Fee Tier": string; + "Fee tier": string; + "Fetching best price...": string; + "Fetching best price\u2026": string; + For: string; + "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; + From: string; + "From (at most)": string; + "Full Range": string; + "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; + "Get support on Discord": string; + "Help Center": string; + Hide: string; + "Hide closed positions": string; + "High Price Impact": string; + "How this app uses APIs": string; + "I understand": string; + "If you purchase a token from this list, you may not be able to sell it back.": string; + Import: string; + "Import List": string; + "Import Pool": string; + "Import V2 Pool": string; + "Import at your own risk": string; + "In range": string; + "Increase Liquidity": string; + "Initial prices and pool share": string; + "Initializing...": string; + "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Install Metamask": string; + "Insufficient liquidity for this trade.": string; + "Insufficient {0}": (string | string[])[]; + "Insufficient {0} balance": (string | string[])[]; + "Interface Settings": string; + "Invalid pair": string; + "Invalid pair.": string; + "Invalid price input": string; + "Invalid range selected. The min price must be lower than the max price.": string; + "Invalid recipient": string; + Language: string; + Learn: string; + "Learn about providing liquidity": string; + "Learn more": string; + "Legal & Privacy": string; + "Light Theme": string; + Liquidity: string; + "Liquidity data not available.": string; + "Liquidity provider rewards": string; + "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + Lists: string; + Loaded: string; + Loading: string; + MAX: string; + Manage: string; + "Manage Liquidity in Rewards Pool": string; + "Manage Token Lists": string; + "Manage this pool.": string; + Max: string; + "Max Price": string; + "Max price": string; + "Max slippage": string; + "Max:": string; + "Maximum sent": string; + Menu: string; + Migrate: string; + "Migrate Liquidity to V3": string; + "Migrate V2 Liquidity": string; + "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; + "Migrate {0}/{1} liquidity to V3": (string | string[])[]; + Migrating: string; + "Min Price": string; + "Min price": string; + "Min:": string; + "Minimum received": string; + "Missing dependencies": string; + "Mock Toggle": string; + More: string; + "Network Fee": string; + "Network Warning": string; + "Network fees exceed 50% of the swap amount!": string; + "New Position": string; + "No V2 Liquidity found.": string; + "No active pools": string; + "No data": string; + "No description.": string; + "No liquidity found.": string; + "No pool found.": string; + "No proposals found.": string; + "No results found.": string; + "Not created": string; + OFF: string; + ON: string; + "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; + Off: string; + On: string; + "Once you are happy with the rate click supply to review.": string; + "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; + "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; + "Optimism Gateway": string; + "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Optimistic Etherscan": string; + "Out of range": string; + "Output is estimated.": string; + "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; + "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Output will be sent to <0>{0}": (string | string[])[]; + Owner: string; + "Participating pools": string; + Pending: string; + "Please confirm you would like to remove this list by typing REMOVE": string; + "Please connect to Layer 1 Ethereum": string; + "Please connect to a supported network in the dropdown menu or in your wallet.": string; + "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; + "Polygon Bridge": string; + Polygonscan: string; + Pool: string; + "Pool Found!": string; + "Pool Rate": string; + "Pool rate": string; + "Pool tokens in rewards pool:": string; + "Pooled {0}:": (string | string[])[]; + "Pools Overview": string; + Preview: string; + Price: string; + "Price Difference:": string; + "Price Impact": string; + "Price Impact Too High": string; + "Price Updated": string; + "Price impact": string; + "Price range": string; + "Price updated": string; + "Price:": string; + "Prices and pool share": string; + Proposal: string; + "Proposal Submitted": string; + "Proposal Title": string; + Proposals: string; + "Proposals submitted by community members will appear here.": string; + "Proposed Action": string; + Proposer: string; + "Protocol Disclaimer": string; + Queued: string; + Rates: string; + "Read more about UNI": string; + "Read more about Uniswap governance": string; + "Read more about providing liquidity": string; + "Read more about unsupported assets": string; + "Recent Transactions": string; + "Recent transactions": string; + Recipient: string; + "Reload the page": string; + Remove: string; + "Remove <0/> and <1/>": string; + "Remove Amount": string; + "Remove Delegate": string; + "Remove Liquidity": string; + "Remove list": string; + "Removing {0} {1} and {2} {3}": (string | string[])[]; + "Removing {0} {1} and{2} {3}": (string | string[])[]; + "Request Features": string; + Reset: string; + Return: string; + "Review swap": string; + "Search by token name or address": string; + "Search name or paste address": string; + "Select Pair": string; + "Select a network": string; + "Select a token": string; + "Select a token to find your v2 liquidity.": string; + "Select an action": string; + "Selected Range": string; + Self: string; + "Self Delegate": string; + "Set Price Range": string; + "Set Starting Price": string; + Settings: string; + "Share of Pool": string; + "Share of Pool:": string; + "Show Portis": string; + "Show closed positions": string; + Simple: string; + "Slippage tolerance": string; + "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; + "Something went wrong": string; + "Something went wrong.": string; + "Step 1. Get UNI-V2 Liquidity tokens": string; + "Submit new proposal": string; + "Submitting Proposal": string; + "Submitting Vote": string; + Succeeded: string; + Success: string; + Supply: string; + "Supplying {0} {1} and {2} {3}": (string | string[])[]; + Swap: string; + "Swap <0/> for exactly <1/>": string; + "Swap Anyway": string; + "Swap details": string; + "Swap exactly <0/> for <1/>": string; + "Swap failed: {0}": (string | string[])[]; + "Swap summary": string; + "Swapping {0} {1} for {2} {3}": (string | string[])[]; + "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; + "Tell us what you think \u2197": string; + "Thanks for being part of the Uniswap community <0/>": string; + "The % you will earn in fees.": string; + "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; + "The app fetches blockchain data from The Graph\u2019s hosted service.": string; + "The app fetches on-chain data and constructs contract calls with an Infura API.": string; + "The app fetches the optimal trade route from a Uniswap Labs server.": string; + "The app logs anonymized usage statistics in order to improve over time.": string; + "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; + "The cost of sending this transaction is more than half of the value of the input amount.": string; + "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; + "The estimated difference between the USD values of input and output amounts.": string; + "The input token cannot be transferred. There may be an issue with the input token.": string; + "The market price is outside your specified price range. Single-asset deposit only.": string; + "The most recent block number on this network. Prices update on every block.": string; + "The output token cannot be transferred. There may be an issue with the output token.": string; + "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; + "The price of this pool is within your selected range. Your position is currently earning fees.": string; + "The ratio of tokens you add will set the price of this pool.": string; + "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; + "There is no liquidity data.": string; + "This app uses the following third-party APIs:": string; + "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; + "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; + "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; + "This token is not supported in the Uniswap Labs app": string; + "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; + "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; + "Tip: Custom tokens are stored locally in your browser": string; + To: string; + "To (at least)": string; + "Token not supported": string; + Tokens: string; + "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; + "Top pools": string; + "Total deposited": string; + "Total deposits": string; + "Trade Route": string; + Trading: string; + "Transaction Settings": string; + "Transaction Submitted": string; + "Transaction completed in": string; + "Transaction deadline": string; + "Transaction pending": string; + "Transaction rejected.": string; + "Transaction submitted": string; + "Transfer Token": string; + "Try Again": string; + "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Turn On Expert Mode": string; + "UNI has arrived": string; + "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; + "UNI {0}/{1} Burned": (string | string[])[]; + "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; + "UNI-V2 {0}-{1}": (string | string[])[]; + "Unclaimed UNI": string; + "Unclaimed fees": string; + Undetermined: string; + "Unexpected error. Could not estimate gas for the swap.": string; + "Unexpected issue with estimating the gas. Please try again.": string; + "Uniswap Governance": string; + "Uniswap Labs' Terms of Service": string; + "Uniswap available in: <0>{0}": (string | string[])[]; + "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; + "Uniswap liquidity mining": string; + "Uniswap migration contract\u2197": string; + "Unknown Source": string; + "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; + "Unlock Votes": string; + "Unlock Voting": string; + "Unlocking Votes": string; + "Unsupported Asset": string; + "Unsupported Assets": string; + "Unsupported network\u2013switch to another to trade.": string; + Untitled: string; + Unwrap: string; + "Unwrap <0/> to {0}": (string | string[])[]; + "Update Delegation": string; + "Update list": string; + "Use the Uniswap Labs API to get faster quotes.": string; + User: string; + "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; + "V2 liquidity": string; + "V3 {0} Price:": (string | string[])[]; + "View accrued fees and analytics<0>\u2197": string; + "View list": string; + "View on Etherscan": string; + "View on Explorer": string; + "View transaction on Explorer": string; + Vote: string; + "Vote Against": string; + "Vote For": string; + "Vote against proposal {proposalId}": (string | string[])[]; + "Vote against proposal {proposalKey}": (string | string[])[]; + "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote for proposal {proposalId}": (string | string[])[]; + "Vote for proposal {proposalKey}": (string | string[])[]; + "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote to abstain on proposal {proposalId}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Voting ended {0}": (string | string[])[]; + "Voting ends approximately {0}": (string | string[])[]; + "Voting starts approximately {0}": (string | string[])[]; + "Waiting For Confirmation": string; + "Wallet Address or ENS name": string; + "Weekly Rewards": string; + "Welcome to team Unicorn :)": string; + "When you claim without withdrawing your liquidity remains in the mining pool.": string; + "When you withdraw, the contract will automagically claim UNI on your behalf!": string; + "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; + Withdraw: string; + "Withdraw & Claim": string; + "Withdraw deposited liquidity": string; + "Withdrawing {0} UNI-V2": (string | string[])[]; + "Withdrew UNI-V2!": string; + Wrap: string; + "Wrap <0/> to {0}": (string | string[])[]; + "Wrong Network": string; + "You already have an active or pending proposal": string; + "You are creating a pool": string; + "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; + "You are the first liquidity provider.": string; + "You can either vote on each proposal yourself or delegate your votes to a third party.": string; + "You can now trade {0}": (string | string[])[]; + "You don't have enough votes to submit a proposal": string; + "You don\u2019t have liquidity in this pool yet.": string; + "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; + "You may have lost your network connection.": string; + "You might consider waiting until the network fees go down to complete this transaction.": string; + "You must connect an account.": string; + "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; + "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; + "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; + "You will also collect fees earned from this position.": string; + "You will receive": string; + "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; + "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; + "Your V2 liquidity": string; + "Your active V3 liquidity positions will appear here.": string; + "Your liquidity deposits": string; + "Your pool share:": string; + "Your position": string; + "Your position has 0 liquidity, and is not earning fees.": string; + "Your position will appear here.": string; + "Your position will be 100% composed of {0} at this price": (string | string[])[]; + "Your position will be 100% {0} at this price.": (string | string[])[]; + "Your position will not earn fees or be used in trades until the market price moves into your range.": string; + "Your positions": string; + "Your rate": string; + "Your total pool tokens:": string; + "Your transaction cost will be much higher as it includes the gas to create the pool.": string; + "Your transaction may be frontrun": string; + "Your transaction may fail": string; + "Your transaction will revert if it has been pending for longer than this period of time.": string; + "Your transaction will revert if it is pending for more than this period of time.": string; + "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; + "Your transactions will appear here...": string; + "Your unclaimed UNI": string; + "after slippage": string; + confirm: string; + "for {0}": (string | string[])[]; + gwei: string; + "has socks emoji": string; + "here.": string; + "https:// or ipfs:// or ENS name": string; + minutes: string; + "via {0}": (string | string[])[]; + "via {0} token list": (string | string[])[]; + "{0, plural, one {Import token} other {Import tokens}}": (string | { + one: string; + other: string; + })[][]; + "{0}": string[][]; + "{0} %": (string | string[])[]; + "{0} <0/> per <1/>": (string | string[])[]; + "{0} Custom Tokens": (string | string[])[]; + "{0} Deposited": (string | string[])[]; + "{0} ETH": (string | string[])[]; + "{0} Fees Earned:": (string | string[])[]; + "{0} Pending": (string | string[])[]; + "{0} UNI": (string | string[])[]; + "{0} UNI / week": (string | string[])[]; + "{0} UNI-V2": (string | string[])[]; + "{0} UNI-V2 LP tokens available": (string | string[])[]; + "{0} Votes": (string | string[])[]; + "{0} per {1}": (string | string[])[]; + "{0} tokens": (string | string[])[]; + "{0} {1} Price:": (string | string[])[]; + "{0} {nativeCurrencySymbol}": (string | string[])[]; + "{0} \u2022 Added by user": (string | string[])[]; + "{0}%": (string | string[])[]; + "{0}% fee tier": (string | string[])[]; + "{0}% pool": (string | string[])[]; + "{0}% select": (string | string[])[]; + "{0}-{1} Liquidity Mining": (string | string[])[]; + "{0}/{1} LP NFT": (string | string[])[]; + "{0}/{1} LP Tokens": (string | string[])[]; + "{SOCKS_AMOUNT} UNI": (string | string[])[]; + "{USER_AMOUNT} UNI": (string | string[])[]; + "{activeTokensOnThisChain} tokens": (string | string[])[]; + "{integrator} fee": (string | string[])[]; + "{label} token bridge": (string | string[])[]; + "{min}m {sec}s": (string | string[])[]; + "{percentForSlider}%": (string | string[])[]; + "{sec}s": (string | string[])[]; + "{tokenB} per {tokenA}": (string | string[])[]; + "\u2190 Back to Pools Overview": string; +}; diff --git a/dist2/types/locales/sw-TZ.d.ts b/dist2/types/locales/sw-TZ.d.ts new file mode 100644 index 00000000000..75120e0e5c9 --- /dev/null +++ b/dist2/types/locales/sw-TZ.d.ts @@ -0,0 +1,593 @@ +export const messages: { + "$-": string; + "$<0/>": string; + "${0}": (string | string[])[]; + "(${0})": (string | string[])[]; + "(View on Explorer)": string; + "(clear all)": string; + "(edit)": string; + "- Remove recipient": string; + "0 UNI / week": string; + "25%": string; + "50%": string; + "75%": string; + "<0/> All Proposals": string; + "<0/> Votes": string; + "<0>Account analytics and accrued fees<1> \u2197 ": string; + "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; + "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; + "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; + "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; + "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; + "<0>Unlock voting to prepare for the next proposal.": string; + "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; + "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; + About: string; + Accept: string; + Account: string; + Active: string; + Add: string; + "Add <0/> and <1/> to Uniswap V2": string; + "Add Delegate +": string; + "Add Liquidity": string; + "Add V2 Liquidity": string; + "Add liquidity.": string; + "Add more liquidity": string; + "Add {0} to Metamask <0/>": (string | string[])[]; + "Add {0}-{1} liquidity": (string | string[])[]; + "Add {0}/{1} V3 liquidity": (string | string[])[]; + "Added {0}": (string | string[])[]; + "Address has no available claim": string; + Against: string; + "Allow LP token migration": string; + "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; + "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; + Allowed: string; + Amount: string; + "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Approval pending <0/>": string; + Approve: string; + "Approve Token": string; + "Approve {0}": (string | string[])[]; + "Approve {0} first": (string | string[])[]; + Approved: string; + Approving: string; + "Approving {0}": (string | string[])[]; + Arbiscan: string; + "Arbitrum Bridge": string; + "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Are you sure?": string; + "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; + "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; + Auto: string; + "Auto Router API": string; + "Available to deposit: {0}": (string | string[])[]; + "Balance: {0}": (string | string[])[]; + "Best for exotic pairs.": string; + "Best for most pairs.": string; + "Best for stable pairs.": string; + "Best for very stable pairs.": string; + "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; + "Blocked address": string; + Bridge: string; + "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; + "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; + Canceled: string; + Change: string; + Charts: string; + "Check network status": string; + "Check out our v3 LP walkthrough and migration guides.": string; + Claim: string; + "Claim <0/> for {0}": (string | string[])[]; + "Claim UNI": string; + "Claim UNI Token": string; + "Claim UNI reward for {0}": (string | string[])[]; + "Claim fees": string; + "Claim your UNI tokens": string; + Claimed: string; + "Claimed UNI!": string; + "Claimed!": string; + Claiming: string; + "Claiming UNI": string; + "Claiming {0} UNI": (string | string[])[]; + "Clear All": string; + "Clear all": string; + Close: string; + Closed: string; + Collect: string; + "Collect as WETH": string; + "Collect fees": string; + "Collect {0}/{1} fees": (string | string[])[]; + Collected: string; + Collecting: string; + "Collecting fees": string; + "Collecting fees will withdraw currently available fees for you.": string; + Confirm: string; + "Confirm Supply": string; + "Confirm Swap": string; + "Confirm swap": string; + "Confirm this transaction in your wallet": string; + "Confirm transaction in wallet": string; + "Connect Wallet": string; + "Connect a wallet": string; + "Connect to a wallet to find pools": string; + "Connect to a wallet to view your V2 liquidity.": string; + "Connect to a wallet to view your liquidity.": string; + "Connect wallet to swap": string; + "Connected with {name}": (string | string[])[]; + Copied: string; + "Copy Address": string; + "Create Pool & Supply": string; + "Create Proposal": string; + "Create a pair": string; + "Create a pool": string; + "Create an issue on GitHub": string; + "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; + "Create pool.": string; + "Create {0}/{1} V3 pool": (string | string[])[]; + "Current price": string; + "Current {0} Price:": (string | string[])[]; + Custom: string; + "Dark Theme": string; + Defeated: string; + "Delegate Votes": string; + "Delegate voting power to {0}": (string | string[])[]; + "Delegated to:": string; + "Delegating votes": string; + Deposit: string; + "Deposit Amounts": string; + "Deposit UNI-V2 LP Tokens": string; + "Deposit liquidity": string; + "Deposit tokens to the {label} network.": (string | string[])[]; + "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; + "Deposited liquidity:": string; + "Deposited {0} UNI-V2": (string | string[])[]; + "Depositing Liquidity": string; + Description: string; + Detailed: string; + Details: string; + Disconnect: string; + Discord: string; + Dismiss: string; + Docs: string; + "Don\u2019t see one of your v2 positions? <0>Import it.": string; + "Earned UNI tokens represent voting shares in Uniswap governance.": string; + Edit: string; + "Efficiency Comparison": string; + "Enter a percent": string; + "Enter a recipient": string; + "Enter a valid slippage percentage": string; + "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; + "Enter an amount": string; + "Enter valid list location": string; + "Enter valid token address": string; + "Enter {0} amount": (string | string[])[]; + Error: string; + "Error connecting": string; + "Error connecting. Try refreshing the page.": string; + "Error details": string; + "Error importing list": string; + "Estimate may differ due to your wallet gas settings": string; + "Estimated network fee": string; + Etherscan: string; + Executed: string; + "Expanded results from inactive Token Lists": string; + "Expected Output": string; + "Expert Mode": string; + "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; + Expired: string; + "Explore Uniswap Analytics.": string; + "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; + "Fee Tier": string; + "Fee tier": string; + "Fetching best price...": string; + "Fetching best price\u2026": string; + For: string; + "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; + From: string; + "From (at most)": string; + "Full Range": string; + "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; + "Get support on Discord": string; + "Help Center": string; + Hide: string; + "Hide closed positions": string; + "High Price Impact": string; + "How this app uses APIs": string; + "I understand": string; + "If you purchase a token from this list, you may not be able to sell it back.": string; + Import: string; + "Import List": string; + "Import Pool": string; + "Import V2 Pool": string; + "Import at your own risk": string; + "In range": string; + "Increase Liquidity": string; + "Initial prices and pool share": string; + "Initializing...": string; + "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Install Metamask": string; + "Insufficient liquidity for this trade.": string; + "Insufficient {0}": (string | string[])[]; + "Insufficient {0} balance": (string | string[])[]; + "Interface Settings": string; + "Invalid pair": string; + "Invalid pair.": string; + "Invalid price input": string; + "Invalid range selected. The min price must be lower than the max price.": string; + "Invalid recipient": string; + Language: string; + Learn: string; + "Learn about providing liquidity": string; + "Learn more": string; + "Legal & Privacy": string; + "Light Theme": string; + Liquidity: string; + "Liquidity data not available.": string; + "Liquidity provider rewards": string; + "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + Lists: string; + Loaded: string; + Loading: string; + MAX: string; + Manage: string; + "Manage Liquidity in Rewards Pool": string; + "Manage Token Lists": string; + "Manage this pool.": string; + Max: string; + "Max Price": string; + "Max price": string; + "Max slippage": string; + "Max:": string; + "Maximum sent": string; + Menu: string; + Migrate: string; + "Migrate Liquidity to V3": string; + "Migrate V2 Liquidity": string; + "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; + "Migrate {0}/{1} liquidity to V3": (string | string[])[]; + Migrating: string; + "Min Price": string; + "Min price": string; + "Min:": string; + "Minimum received": string; + "Missing dependencies": string; + "Mock Toggle": string; + More: string; + "Network Fee": string; + "Network Warning": string; + "Network fees exceed 50% of the swap amount!": string; + "New Position": string; + "No V2 Liquidity found.": string; + "No active pools": string; + "No data": string; + "No description.": string; + "No liquidity found.": string; + "No pool found.": string; + "No proposals found.": string; + "No results found.": string; + "Not created": string; + OFF: string; + ON: string; + "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; + Off: string; + On: string; + "Once you are happy with the rate click supply to review.": string; + "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; + "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; + "Optimism Gateway": string; + "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Optimistic Etherscan": string; + "Out of range": string; + "Output is estimated.": string; + "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; + "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Output will be sent to <0>{0}": (string | string[])[]; + Owner: string; + "Participating pools": string; + Pending: string; + "Please confirm you would like to remove this list by typing REMOVE": string; + "Please connect to Layer 1 Ethereum": string; + "Please connect to a supported network in the dropdown menu or in your wallet.": string; + "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; + "Polygon Bridge": string; + Polygonscan: string; + Pool: string; + "Pool Found!": string; + "Pool Rate": string; + "Pool rate": string; + "Pool tokens in rewards pool:": string; + "Pooled {0}:": (string | string[])[]; + "Pools Overview": string; + Preview: string; + Price: string; + "Price Difference:": string; + "Price Impact": string; + "Price Impact Too High": string; + "Price Updated": string; + "Price impact": string; + "Price range": string; + "Price updated": string; + "Price:": string; + "Prices and pool share": string; + Proposal: string; + "Proposal Submitted": string; + "Proposal Title": string; + Proposals: string; + "Proposals submitted by community members will appear here.": string; + "Proposed Action": string; + Proposer: string; + "Protocol Disclaimer": string; + Queued: string; + Rates: string; + "Read more about UNI": string; + "Read more about Uniswap governance": string; + "Read more about providing liquidity": string; + "Read more about unsupported assets": string; + "Recent Transactions": string; + "Recent transactions": string; + Recipient: string; + "Reload the page": string; + Remove: string; + "Remove <0/> and <1/>": string; + "Remove Amount": string; + "Remove Delegate": string; + "Remove Liquidity": string; + "Remove list": string; + "Removing {0} {1} and {2} {3}": (string | string[])[]; + "Removing {0} {1} and{2} {3}": (string | string[])[]; + "Request Features": string; + Reset: string; + Return: string; + "Review swap": string; + "Search by token name or address": string; + "Search name or paste address": string; + "Select Pair": string; + "Select a network": string; + "Select a token": string; + "Select a token to find your v2 liquidity.": string; + "Select an action": string; + "Selected Range": string; + Self: string; + "Self Delegate": string; + "Set Price Range": string; + "Set Starting Price": string; + Settings: string; + "Share of Pool": string; + "Share of Pool:": string; + "Show Portis": string; + "Show closed positions": string; + Simple: string; + "Slippage tolerance": string; + "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; + "Something went wrong": string; + "Something went wrong.": string; + "Step 1. Get UNI-V2 Liquidity tokens": string; + "Submit new proposal": string; + "Submitting Proposal": string; + "Submitting Vote": string; + Succeeded: string; + Success: string; + Supply: string; + "Supplying {0} {1} and {2} {3}": (string | string[])[]; + Swap: string; + "Swap <0/> for exactly <1/>": string; + "Swap Anyway": string; + "Swap details": string; + "Swap exactly <0/> for <1/>": string; + "Swap failed: {0}": (string | string[])[]; + "Swap summary": string; + "Swapping {0} {1} for {2} {3}": (string | string[])[]; + "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; + "Tell us what you think \u2197": string; + "Thanks for being part of the Uniswap community <0/>": string; + "The % you will earn in fees.": string; + "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; + "The app fetches blockchain data from The Graph\u2019s hosted service.": string; + "The app fetches on-chain data and constructs contract calls with an Infura API.": string; + "The app fetches the optimal trade route from a Uniswap Labs server.": string; + "The app logs anonymized usage statistics in order to improve over time.": string; + "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; + "The cost of sending this transaction is more than half of the value of the input amount.": string; + "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; + "The estimated difference between the USD values of input and output amounts.": string; + "The input token cannot be transferred. There may be an issue with the input token.": string; + "The market price is outside your specified price range. Single-asset deposit only.": string; + "The most recent block number on this network. Prices update on every block.": string; + "The output token cannot be transferred. There may be an issue with the output token.": string; + "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; + "The price of this pool is within your selected range. Your position is currently earning fees.": string; + "The ratio of tokens you add will set the price of this pool.": string; + "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; + "There is no liquidity data.": string; + "This app uses the following third-party APIs:": string; + "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; + "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; + "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; + "This token is not supported in the Uniswap Labs app": string; + "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; + "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; + "Tip: Custom tokens are stored locally in your browser": string; + To: string; + "To (at least)": string; + "Token not supported": string; + Tokens: string; + "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; + "Top pools": string; + "Total deposited": string; + "Total deposits": string; + "Trade Route": string; + Trading: string; + "Transaction Settings": string; + "Transaction Submitted": string; + "Transaction completed in": string; + "Transaction deadline": string; + "Transaction pending": string; + "Transaction rejected.": string; + "Transaction submitted": string; + "Transfer Token": string; + "Try Again": string; + "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Turn On Expert Mode": string; + "UNI has arrived": string; + "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; + "UNI {0}/{1} Burned": (string | string[])[]; + "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; + "UNI-V2 {0}-{1}": (string | string[])[]; + "Unclaimed UNI": string; + "Unclaimed fees": string; + Undetermined: string; + "Unexpected error. Could not estimate gas for the swap.": string; + "Unexpected issue with estimating the gas. Please try again.": string; + "Uniswap Governance": string; + "Uniswap Labs' Terms of Service": string; + "Uniswap available in: <0>{0}": (string | string[])[]; + "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; + "Uniswap liquidity mining": string; + "Uniswap migration contract\u2197": string; + "Unknown Source": string; + "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; + "Unlock Votes": string; + "Unlock Voting": string; + "Unlocking Votes": string; + "Unsupported Asset": string; + "Unsupported Assets": string; + "Unsupported network\u2013switch to another to trade.": string; + Untitled: string; + Unwrap: string; + "Unwrap <0/> to {0}": (string | string[])[]; + "Update Delegation": string; + "Update list": string; + "Use the Uniswap Labs API to get faster quotes.": string; + User: string; + "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; + "V2 liquidity": string; + "V3 {0} Price:": (string | string[])[]; + "View accrued fees and analytics<0>\u2197": string; + "View list": string; + "View on Etherscan": string; + "View on Explorer": string; + "View transaction on Explorer": string; + Vote: string; + "Vote Against": string; + "Vote For": string; + "Vote against proposal {proposalId}": (string | string[])[]; + "Vote against proposal {proposalKey}": (string | string[])[]; + "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote for proposal {proposalId}": (string | string[])[]; + "Vote for proposal {proposalKey}": (string | string[])[]; + "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote to abstain on proposal {proposalId}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Voting ended {0}": (string | string[])[]; + "Voting ends approximately {0}": (string | string[])[]; + "Voting starts approximately {0}": (string | string[])[]; + "Waiting For Confirmation": string; + "Wallet Address or ENS name": string; + "Weekly Rewards": string; + "Welcome to team Unicorn :)": string; + "When you claim without withdrawing your liquidity remains in the mining pool.": string; + "When you withdraw, the contract will automagically claim UNI on your behalf!": string; + "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; + Withdraw: string; + "Withdraw & Claim": string; + "Withdraw deposited liquidity": string; + "Withdrawing {0} UNI-V2": (string | string[])[]; + "Withdrew UNI-V2!": string; + Wrap: string; + "Wrap <0/> to {0}": (string | string[])[]; + "Wrong Network": string; + "You already have an active or pending proposal": string; + "You are creating a pool": string; + "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; + "You are the first liquidity provider.": string; + "You can either vote on each proposal yourself or delegate your votes to a third party.": string; + "You can now trade {0}": (string | string[])[]; + "You don't have enough votes to submit a proposal": string; + "You don\u2019t have liquidity in this pool yet.": string; + "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; + "You may have lost your network connection.": string; + "You might consider waiting until the network fees go down to complete this transaction.": string; + "You must connect an account.": string; + "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; + "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; + "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; + "You will also collect fees earned from this position.": string; + "You will receive": string; + "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; + "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; + "Your V2 liquidity": string; + "Your active V3 liquidity positions will appear here.": string; + "Your liquidity deposits": string; + "Your pool share:": string; + "Your position": string; + "Your position has 0 liquidity, and is not earning fees.": string; + "Your position will appear here.": string; + "Your position will be 100% composed of {0} at this price": (string | string[])[]; + "Your position will be 100% {0} at this price.": (string | string[])[]; + "Your position will not earn fees or be used in trades until the market price moves into your range.": string; + "Your positions": string; + "Your rate": string; + "Your total pool tokens:": string; + "Your transaction cost will be much higher as it includes the gas to create the pool.": string; + "Your transaction may be frontrun": string; + "Your transaction may fail": string; + "Your transaction will revert if it has been pending for longer than this period of time.": string; + "Your transaction will revert if it is pending for more than this period of time.": string; + "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; + "Your transactions will appear here...": string; + "Your unclaimed UNI": string; + "after slippage": string; + confirm: string; + "for {0}": (string | string[])[]; + gwei: string; + "has socks emoji": string; + "here.": string; + "https:// or ipfs:// or ENS name": string; + minutes: string; + "via {0}": (string | string[])[]; + "via {0} token list": (string | string[])[]; + "{0, plural, one {Import token} other {Import tokens}}": (string | { + one: string; + other: string; + })[][]; + "{0}": string[][]; + "{0} %": (string | string[])[]; + "{0} <0/> per <1/>": (string | string[])[]; + "{0} Custom Tokens": (string | string[])[]; + "{0} Deposited": (string | string[])[]; + "{0} ETH": (string | string[])[]; + "{0} Fees Earned:": (string | string[])[]; + "{0} Pending": (string | string[])[]; + "{0} UNI": (string | string[])[]; + "{0} UNI / week": (string | string[])[]; + "{0} UNI-V2": (string | string[])[]; + "{0} UNI-V2 LP tokens available": (string | string[])[]; + "{0} Votes": (string | string[])[]; + "{0} per {1}": (string | string[])[]; + "{0} tokens": (string | string[])[]; + "{0} {1} Price:": (string | string[])[]; + "{0} {nativeCurrencySymbol}": (string | string[])[]; + "{0} \u2022 Added by user": (string | string[])[]; + "{0}%": (string | string[])[]; + "{0}% fee tier": (string | string[])[]; + "{0}% pool": (string | string[])[]; + "{0}% select": (string | string[])[]; + "{0}-{1} Liquidity Mining": (string | string[])[]; + "{0}/{1} LP NFT": (string | string[])[]; + "{0}/{1} LP Tokens": (string | string[])[]; + "{SOCKS_AMOUNT} UNI": (string | string[])[]; + "{USER_AMOUNT} UNI": (string | string[])[]; + "{activeTokensOnThisChain} tokens": (string | string[])[]; + "{integrator} fee": (string | string[])[]; + "{label} token bridge": (string | string[])[]; + "{min}m {sec}s": (string | string[])[]; + "{percentForSlider}%": (string | string[])[]; + "{sec}s": (string | string[])[]; + "{tokenB} per {tokenA}": (string | string[])[]; + "\u2190 Back to Pools Overview": string; +}; diff --git a/dist2/types/locales/tr-TR.d.ts b/dist2/types/locales/tr-TR.d.ts new file mode 100644 index 00000000000..75120e0e5c9 --- /dev/null +++ b/dist2/types/locales/tr-TR.d.ts @@ -0,0 +1,593 @@ +export const messages: { + "$-": string; + "$<0/>": string; + "${0}": (string | string[])[]; + "(${0})": (string | string[])[]; + "(View on Explorer)": string; + "(clear all)": string; + "(edit)": string; + "- Remove recipient": string; + "0 UNI / week": string; + "25%": string; + "50%": string; + "75%": string; + "<0/> All Proposals": string; + "<0/> Votes": string; + "<0>Account analytics and accrued fees<1> \u2197 ": string; + "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; + "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; + "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; + "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; + "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; + "<0>Unlock voting to prepare for the next proposal.": string; + "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; + "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; + About: string; + Accept: string; + Account: string; + Active: string; + Add: string; + "Add <0/> and <1/> to Uniswap V2": string; + "Add Delegate +": string; + "Add Liquidity": string; + "Add V2 Liquidity": string; + "Add liquidity.": string; + "Add more liquidity": string; + "Add {0} to Metamask <0/>": (string | string[])[]; + "Add {0}-{1} liquidity": (string | string[])[]; + "Add {0}/{1} V3 liquidity": (string | string[])[]; + "Added {0}": (string | string[])[]; + "Address has no available claim": string; + Against: string; + "Allow LP token migration": string; + "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; + "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; + Allowed: string; + Amount: string; + "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Approval pending <0/>": string; + Approve: string; + "Approve Token": string; + "Approve {0}": (string | string[])[]; + "Approve {0} first": (string | string[])[]; + Approved: string; + Approving: string; + "Approving {0}": (string | string[])[]; + Arbiscan: string; + "Arbitrum Bridge": string; + "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Are you sure?": string; + "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; + "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; + Auto: string; + "Auto Router API": string; + "Available to deposit: {0}": (string | string[])[]; + "Balance: {0}": (string | string[])[]; + "Best for exotic pairs.": string; + "Best for most pairs.": string; + "Best for stable pairs.": string; + "Best for very stable pairs.": string; + "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; + "Blocked address": string; + Bridge: string; + "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; + "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; + Canceled: string; + Change: string; + Charts: string; + "Check network status": string; + "Check out our v3 LP walkthrough and migration guides.": string; + Claim: string; + "Claim <0/> for {0}": (string | string[])[]; + "Claim UNI": string; + "Claim UNI Token": string; + "Claim UNI reward for {0}": (string | string[])[]; + "Claim fees": string; + "Claim your UNI tokens": string; + Claimed: string; + "Claimed UNI!": string; + "Claimed!": string; + Claiming: string; + "Claiming UNI": string; + "Claiming {0} UNI": (string | string[])[]; + "Clear All": string; + "Clear all": string; + Close: string; + Closed: string; + Collect: string; + "Collect as WETH": string; + "Collect fees": string; + "Collect {0}/{1} fees": (string | string[])[]; + Collected: string; + Collecting: string; + "Collecting fees": string; + "Collecting fees will withdraw currently available fees for you.": string; + Confirm: string; + "Confirm Supply": string; + "Confirm Swap": string; + "Confirm swap": string; + "Confirm this transaction in your wallet": string; + "Confirm transaction in wallet": string; + "Connect Wallet": string; + "Connect a wallet": string; + "Connect to a wallet to find pools": string; + "Connect to a wallet to view your V2 liquidity.": string; + "Connect to a wallet to view your liquidity.": string; + "Connect wallet to swap": string; + "Connected with {name}": (string | string[])[]; + Copied: string; + "Copy Address": string; + "Create Pool & Supply": string; + "Create Proposal": string; + "Create a pair": string; + "Create a pool": string; + "Create an issue on GitHub": string; + "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; + "Create pool.": string; + "Create {0}/{1} V3 pool": (string | string[])[]; + "Current price": string; + "Current {0} Price:": (string | string[])[]; + Custom: string; + "Dark Theme": string; + Defeated: string; + "Delegate Votes": string; + "Delegate voting power to {0}": (string | string[])[]; + "Delegated to:": string; + "Delegating votes": string; + Deposit: string; + "Deposit Amounts": string; + "Deposit UNI-V2 LP Tokens": string; + "Deposit liquidity": string; + "Deposit tokens to the {label} network.": (string | string[])[]; + "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; + "Deposited liquidity:": string; + "Deposited {0} UNI-V2": (string | string[])[]; + "Depositing Liquidity": string; + Description: string; + Detailed: string; + Details: string; + Disconnect: string; + Discord: string; + Dismiss: string; + Docs: string; + "Don\u2019t see one of your v2 positions? <0>Import it.": string; + "Earned UNI tokens represent voting shares in Uniswap governance.": string; + Edit: string; + "Efficiency Comparison": string; + "Enter a percent": string; + "Enter a recipient": string; + "Enter a valid slippage percentage": string; + "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; + "Enter an amount": string; + "Enter valid list location": string; + "Enter valid token address": string; + "Enter {0} amount": (string | string[])[]; + Error: string; + "Error connecting": string; + "Error connecting. Try refreshing the page.": string; + "Error details": string; + "Error importing list": string; + "Estimate may differ due to your wallet gas settings": string; + "Estimated network fee": string; + Etherscan: string; + Executed: string; + "Expanded results from inactive Token Lists": string; + "Expected Output": string; + "Expert Mode": string; + "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; + Expired: string; + "Explore Uniswap Analytics.": string; + "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; + "Fee Tier": string; + "Fee tier": string; + "Fetching best price...": string; + "Fetching best price\u2026": string; + For: string; + "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; + From: string; + "From (at most)": string; + "Full Range": string; + "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; + "Get support on Discord": string; + "Help Center": string; + Hide: string; + "Hide closed positions": string; + "High Price Impact": string; + "How this app uses APIs": string; + "I understand": string; + "If you purchase a token from this list, you may not be able to sell it back.": string; + Import: string; + "Import List": string; + "Import Pool": string; + "Import V2 Pool": string; + "Import at your own risk": string; + "In range": string; + "Increase Liquidity": string; + "Initial prices and pool share": string; + "Initializing...": string; + "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Install Metamask": string; + "Insufficient liquidity for this trade.": string; + "Insufficient {0}": (string | string[])[]; + "Insufficient {0} balance": (string | string[])[]; + "Interface Settings": string; + "Invalid pair": string; + "Invalid pair.": string; + "Invalid price input": string; + "Invalid range selected. The min price must be lower than the max price.": string; + "Invalid recipient": string; + Language: string; + Learn: string; + "Learn about providing liquidity": string; + "Learn more": string; + "Legal & Privacy": string; + "Light Theme": string; + Liquidity: string; + "Liquidity data not available.": string; + "Liquidity provider rewards": string; + "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + Lists: string; + Loaded: string; + Loading: string; + MAX: string; + Manage: string; + "Manage Liquidity in Rewards Pool": string; + "Manage Token Lists": string; + "Manage this pool.": string; + Max: string; + "Max Price": string; + "Max price": string; + "Max slippage": string; + "Max:": string; + "Maximum sent": string; + Menu: string; + Migrate: string; + "Migrate Liquidity to V3": string; + "Migrate V2 Liquidity": string; + "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; + "Migrate {0}/{1} liquidity to V3": (string | string[])[]; + Migrating: string; + "Min Price": string; + "Min price": string; + "Min:": string; + "Minimum received": string; + "Missing dependencies": string; + "Mock Toggle": string; + More: string; + "Network Fee": string; + "Network Warning": string; + "Network fees exceed 50% of the swap amount!": string; + "New Position": string; + "No V2 Liquidity found.": string; + "No active pools": string; + "No data": string; + "No description.": string; + "No liquidity found.": string; + "No pool found.": string; + "No proposals found.": string; + "No results found.": string; + "Not created": string; + OFF: string; + ON: string; + "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; + Off: string; + On: string; + "Once you are happy with the rate click supply to review.": string; + "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; + "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; + "Optimism Gateway": string; + "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Optimistic Etherscan": string; + "Out of range": string; + "Output is estimated.": string; + "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; + "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Output will be sent to <0>{0}": (string | string[])[]; + Owner: string; + "Participating pools": string; + Pending: string; + "Please confirm you would like to remove this list by typing REMOVE": string; + "Please connect to Layer 1 Ethereum": string; + "Please connect to a supported network in the dropdown menu or in your wallet.": string; + "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; + "Polygon Bridge": string; + Polygonscan: string; + Pool: string; + "Pool Found!": string; + "Pool Rate": string; + "Pool rate": string; + "Pool tokens in rewards pool:": string; + "Pooled {0}:": (string | string[])[]; + "Pools Overview": string; + Preview: string; + Price: string; + "Price Difference:": string; + "Price Impact": string; + "Price Impact Too High": string; + "Price Updated": string; + "Price impact": string; + "Price range": string; + "Price updated": string; + "Price:": string; + "Prices and pool share": string; + Proposal: string; + "Proposal Submitted": string; + "Proposal Title": string; + Proposals: string; + "Proposals submitted by community members will appear here.": string; + "Proposed Action": string; + Proposer: string; + "Protocol Disclaimer": string; + Queued: string; + Rates: string; + "Read more about UNI": string; + "Read more about Uniswap governance": string; + "Read more about providing liquidity": string; + "Read more about unsupported assets": string; + "Recent Transactions": string; + "Recent transactions": string; + Recipient: string; + "Reload the page": string; + Remove: string; + "Remove <0/> and <1/>": string; + "Remove Amount": string; + "Remove Delegate": string; + "Remove Liquidity": string; + "Remove list": string; + "Removing {0} {1} and {2} {3}": (string | string[])[]; + "Removing {0} {1} and{2} {3}": (string | string[])[]; + "Request Features": string; + Reset: string; + Return: string; + "Review swap": string; + "Search by token name or address": string; + "Search name or paste address": string; + "Select Pair": string; + "Select a network": string; + "Select a token": string; + "Select a token to find your v2 liquidity.": string; + "Select an action": string; + "Selected Range": string; + Self: string; + "Self Delegate": string; + "Set Price Range": string; + "Set Starting Price": string; + Settings: string; + "Share of Pool": string; + "Share of Pool:": string; + "Show Portis": string; + "Show closed positions": string; + Simple: string; + "Slippage tolerance": string; + "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; + "Something went wrong": string; + "Something went wrong.": string; + "Step 1. Get UNI-V2 Liquidity tokens": string; + "Submit new proposal": string; + "Submitting Proposal": string; + "Submitting Vote": string; + Succeeded: string; + Success: string; + Supply: string; + "Supplying {0} {1} and {2} {3}": (string | string[])[]; + Swap: string; + "Swap <0/> for exactly <1/>": string; + "Swap Anyway": string; + "Swap details": string; + "Swap exactly <0/> for <1/>": string; + "Swap failed: {0}": (string | string[])[]; + "Swap summary": string; + "Swapping {0} {1} for {2} {3}": (string | string[])[]; + "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; + "Tell us what you think \u2197": string; + "Thanks for being part of the Uniswap community <0/>": string; + "The % you will earn in fees.": string; + "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; + "The app fetches blockchain data from The Graph\u2019s hosted service.": string; + "The app fetches on-chain data and constructs contract calls with an Infura API.": string; + "The app fetches the optimal trade route from a Uniswap Labs server.": string; + "The app logs anonymized usage statistics in order to improve over time.": string; + "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; + "The cost of sending this transaction is more than half of the value of the input amount.": string; + "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; + "The estimated difference between the USD values of input and output amounts.": string; + "The input token cannot be transferred. There may be an issue with the input token.": string; + "The market price is outside your specified price range. Single-asset deposit only.": string; + "The most recent block number on this network. Prices update on every block.": string; + "The output token cannot be transferred. There may be an issue with the output token.": string; + "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; + "The price of this pool is within your selected range. Your position is currently earning fees.": string; + "The ratio of tokens you add will set the price of this pool.": string; + "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; + "There is no liquidity data.": string; + "This app uses the following third-party APIs:": string; + "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; + "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; + "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; + "This token is not supported in the Uniswap Labs app": string; + "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; + "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; + "Tip: Custom tokens are stored locally in your browser": string; + To: string; + "To (at least)": string; + "Token not supported": string; + Tokens: string; + "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; + "Top pools": string; + "Total deposited": string; + "Total deposits": string; + "Trade Route": string; + Trading: string; + "Transaction Settings": string; + "Transaction Submitted": string; + "Transaction completed in": string; + "Transaction deadline": string; + "Transaction pending": string; + "Transaction rejected.": string; + "Transaction submitted": string; + "Transfer Token": string; + "Try Again": string; + "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Turn On Expert Mode": string; + "UNI has arrived": string; + "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; + "UNI {0}/{1} Burned": (string | string[])[]; + "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; + "UNI-V2 {0}-{1}": (string | string[])[]; + "Unclaimed UNI": string; + "Unclaimed fees": string; + Undetermined: string; + "Unexpected error. Could not estimate gas for the swap.": string; + "Unexpected issue with estimating the gas. Please try again.": string; + "Uniswap Governance": string; + "Uniswap Labs' Terms of Service": string; + "Uniswap available in: <0>{0}": (string | string[])[]; + "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; + "Uniswap liquidity mining": string; + "Uniswap migration contract\u2197": string; + "Unknown Source": string; + "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; + "Unlock Votes": string; + "Unlock Voting": string; + "Unlocking Votes": string; + "Unsupported Asset": string; + "Unsupported Assets": string; + "Unsupported network\u2013switch to another to trade.": string; + Untitled: string; + Unwrap: string; + "Unwrap <0/> to {0}": (string | string[])[]; + "Update Delegation": string; + "Update list": string; + "Use the Uniswap Labs API to get faster quotes.": string; + User: string; + "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; + "V2 liquidity": string; + "V3 {0} Price:": (string | string[])[]; + "View accrued fees and analytics<0>\u2197": string; + "View list": string; + "View on Etherscan": string; + "View on Explorer": string; + "View transaction on Explorer": string; + Vote: string; + "Vote Against": string; + "Vote For": string; + "Vote against proposal {proposalId}": (string | string[])[]; + "Vote against proposal {proposalKey}": (string | string[])[]; + "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote for proposal {proposalId}": (string | string[])[]; + "Vote for proposal {proposalKey}": (string | string[])[]; + "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote to abstain on proposal {proposalId}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Voting ended {0}": (string | string[])[]; + "Voting ends approximately {0}": (string | string[])[]; + "Voting starts approximately {0}": (string | string[])[]; + "Waiting For Confirmation": string; + "Wallet Address or ENS name": string; + "Weekly Rewards": string; + "Welcome to team Unicorn :)": string; + "When you claim without withdrawing your liquidity remains in the mining pool.": string; + "When you withdraw, the contract will automagically claim UNI on your behalf!": string; + "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; + Withdraw: string; + "Withdraw & Claim": string; + "Withdraw deposited liquidity": string; + "Withdrawing {0} UNI-V2": (string | string[])[]; + "Withdrew UNI-V2!": string; + Wrap: string; + "Wrap <0/> to {0}": (string | string[])[]; + "Wrong Network": string; + "You already have an active or pending proposal": string; + "You are creating a pool": string; + "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; + "You are the first liquidity provider.": string; + "You can either vote on each proposal yourself or delegate your votes to a third party.": string; + "You can now trade {0}": (string | string[])[]; + "You don't have enough votes to submit a proposal": string; + "You don\u2019t have liquidity in this pool yet.": string; + "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; + "You may have lost your network connection.": string; + "You might consider waiting until the network fees go down to complete this transaction.": string; + "You must connect an account.": string; + "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; + "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; + "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; + "You will also collect fees earned from this position.": string; + "You will receive": string; + "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; + "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; + "Your V2 liquidity": string; + "Your active V3 liquidity positions will appear here.": string; + "Your liquidity deposits": string; + "Your pool share:": string; + "Your position": string; + "Your position has 0 liquidity, and is not earning fees.": string; + "Your position will appear here.": string; + "Your position will be 100% composed of {0} at this price": (string | string[])[]; + "Your position will be 100% {0} at this price.": (string | string[])[]; + "Your position will not earn fees or be used in trades until the market price moves into your range.": string; + "Your positions": string; + "Your rate": string; + "Your total pool tokens:": string; + "Your transaction cost will be much higher as it includes the gas to create the pool.": string; + "Your transaction may be frontrun": string; + "Your transaction may fail": string; + "Your transaction will revert if it has been pending for longer than this period of time.": string; + "Your transaction will revert if it is pending for more than this period of time.": string; + "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; + "Your transactions will appear here...": string; + "Your unclaimed UNI": string; + "after slippage": string; + confirm: string; + "for {0}": (string | string[])[]; + gwei: string; + "has socks emoji": string; + "here.": string; + "https:// or ipfs:// or ENS name": string; + minutes: string; + "via {0}": (string | string[])[]; + "via {0} token list": (string | string[])[]; + "{0, plural, one {Import token} other {Import tokens}}": (string | { + one: string; + other: string; + })[][]; + "{0}": string[][]; + "{0} %": (string | string[])[]; + "{0} <0/> per <1/>": (string | string[])[]; + "{0} Custom Tokens": (string | string[])[]; + "{0} Deposited": (string | string[])[]; + "{0} ETH": (string | string[])[]; + "{0} Fees Earned:": (string | string[])[]; + "{0} Pending": (string | string[])[]; + "{0} UNI": (string | string[])[]; + "{0} UNI / week": (string | string[])[]; + "{0} UNI-V2": (string | string[])[]; + "{0} UNI-V2 LP tokens available": (string | string[])[]; + "{0} Votes": (string | string[])[]; + "{0} per {1}": (string | string[])[]; + "{0} tokens": (string | string[])[]; + "{0} {1} Price:": (string | string[])[]; + "{0} {nativeCurrencySymbol}": (string | string[])[]; + "{0} \u2022 Added by user": (string | string[])[]; + "{0}%": (string | string[])[]; + "{0}% fee tier": (string | string[])[]; + "{0}% pool": (string | string[])[]; + "{0}% select": (string | string[])[]; + "{0}-{1} Liquidity Mining": (string | string[])[]; + "{0}/{1} LP NFT": (string | string[])[]; + "{0}/{1} LP Tokens": (string | string[])[]; + "{SOCKS_AMOUNT} UNI": (string | string[])[]; + "{USER_AMOUNT} UNI": (string | string[])[]; + "{activeTokensOnThisChain} tokens": (string | string[])[]; + "{integrator} fee": (string | string[])[]; + "{label} token bridge": (string | string[])[]; + "{min}m {sec}s": (string | string[])[]; + "{percentForSlider}%": (string | string[])[]; + "{sec}s": (string | string[])[]; + "{tokenB} per {tokenA}": (string | string[])[]; + "\u2190 Back to Pools Overview": string; +}; diff --git a/dist2/types/locales/uk-UA.d.ts b/dist2/types/locales/uk-UA.d.ts new file mode 100644 index 00000000000..75120e0e5c9 --- /dev/null +++ b/dist2/types/locales/uk-UA.d.ts @@ -0,0 +1,593 @@ +export const messages: { + "$-": string; + "$<0/>": string; + "${0}": (string | string[])[]; + "(${0})": (string | string[])[]; + "(View on Explorer)": string; + "(clear all)": string; + "(edit)": string; + "- Remove recipient": string; + "0 UNI / week": string; + "25%": string; + "50%": string; + "75%": string; + "<0/> All Proposals": string; + "<0/> Votes": string; + "<0>Account analytics and accrued fees<1> \u2197 ": string; + "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; + "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; + "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; + "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; + "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; + "<0>Unlock voting to prepare for the next proposal.": string; + "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; + "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; + About: string; + Accept: string; + Account: string; + Active: string; + Add: string; + "Add <0/> and <1/> to Uniswap V2": string; + "Add Delegate +": string; + "Add Liquidity": string; + "Add V2 Liquidity": string; + "Add liquidity.": string; + "Add more liquidity": string; + "Add {0} to Metamask <0/>": (string | string[])[]; + "Add {0}-{1} liquidity": (string | string[])[]; + "Add {0}/{1} V3 liquidity": (string | string[])[]; + "Added {0}": (string | string[])[]; + "Address has no available claim": string; + Against: string; + "Allow LP token migration": string; + "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; + "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; + Allowed: string; + Amount: string; + "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Approval pending <0/>": string; + Approve: string; + "Approve Token": string; + "Approve {0}": (string | string[])[]; + "Approve {0} first": (string | string[])[]; + Approved: string; + Approving: string; + "Approving {0}": (string | string[])[]; + Arbiscan: string; + "Arbitrum Bridge": string; + "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Are you sure?": string; + "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; + "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; + Auto: string; + "Auto Router API": string; + "Available to deposit: {0}": (string | string[])[]; + "Balance: {0}": (string | string[])[]; + "Best for exotic pairs.": string; + "Best for most pairs.": string; + "Best for stable pairs.": string; + "Best for very stable pairs.": string; + "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; + "Blocked address": string; + Bridge: string; + "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; + "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; + Canceled: string; + Change: string; + Charts: string; + "Check network status": string; + "Check out our v3 LP walkthrough and migration guides.": string; + Claim: string; + "Claim <0/> for {0}": (string | string[])[]; + "Claim UNI": string; + "Claim UNI Token": string; + "Claim UNI reward for {0}": (string | string[])[]; + "Claim fees": string; + "Claim your UNI tokens": string; + Claimed: string; + "Claimed UNI!": string; + "Claimed!": string; + Claiming: string; + "Claiming UNI": string; + "Claiming {0} UNI": (string | string[])[]; + "Clear All": string; + "Clear all": string; + Close: string; + Closed: string; + Collect: string; + "Collect as WETH": string; + "Collect fees": string; + "Collect {0}/{1} fees": (string | string[])[]; + Collected: string; + Collecting: string; + "Collecting fees": string; + "Collecting fees will withdraw currently available fees for you.": string; + Confirm: string; + "Confirm Supply": string; + "Confirm Swap": string; + "Confirm swap": string; + "Confirm this transaction in your wallet": string; + "Confirm transaction in wallet": string; + "Connect Wallet": string; + "Connect a wallet": string; + "Connect to a wallet to find pools": string; + "Connect to a wallet to view your V2 liquidity.": string; + "Connect to a wallet to view your liquidity.": string; + "Connect wallet to swap": string; + "Connected with {name}": (string | string[])[]; + Copied: string; + "Copy Address": string; + "Create Pool & Supply": string; + "Create Proposal": string; + "Create a pair": string; + "Create a pool": string; + "Create an issue on GitHub": string; + "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; + "Create pool.": string; + "Create {0}/{1} V3 pool": (string | string[])[]; + "Current price": string; + "Current {0} Price:": (string | string[])[]; + Custom: string; + "Dark Theme": string; + Defeated: string; + "Delegate Votes": string; + "Delegate voting power to {0}": (string | string[])[]; + "Delegated to:": string; + "Delegating votes": string; + Deposit: string; + "Deposit Amounts": string; + "Deposit UNI-V2 LP Tokens": string; + "Deposit liquidity": string; + "Deposit tokens to the {label} network.": (string | string[])[]; + "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; + "Deposited liquidity:": string; + "Deposited {0} UNI-V2": (string | string[])[]; + "Depositing Liquidity": string; + Description: string; + Detailed: string; + Details: string; + Disconnect: string; + Discord: string; + Dismiss: string; + Docs: string; + "Don\u2019t see one of your v2 positions? <0>Import it.": string; + "Earned UNI tokens represent voting shares in Uniswap governance.": string; + Edit: string; + "Efficiency Comparison": string; + "Enter a percent": string; + "Enter a recipient": string; + "Enter a valid slippage percentage": string; + "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; + "Enter an amount": string; + "Enter valid list location": string; + "Enter valid token address": string; + "Enter {0} amount": (string | string[])[]; + Error: string; + "Error connecting": string; + "Error connecting. Try refreshing the page.": string; + "Error details": string; + "Error importing list": string; + "Estimate may differ due to your wallet gas settings": string; + "Estimated network fee": string; + Etherscan: string; + Executed: string; + "Expanded results from inactive Token Lists": string; + "Expected Output": string; + "Expert Mode": string; + "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; + Expired: string; + "Explore Uniswap Analytics.": string; + "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; + "Fee Tier": string; + "Fee tier": string; + "Fetching best price...": string; + "Fetching best price\u2026": string; + For: string; + "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; + From: string; + "From (at most)": string; + "Full Range": string; + "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; + "Get support on Discord": string; + "Help Center": string; + Hide: string; + "Hide closed positions": string; + "High Price Impact": string; + "How this app uses APIs": string; + "I understand": string; + "If you purchase a token from this list, you may not be able to sell it back.": string; + Import: string; + "Import List": string; + "Import Pool": string; + "Import V2 Pool": string; + "Import at your own risk": string; + "In range": string; + "Increase Liquidity": string; + "Initial prices and pool share": string; + "Initializing...": string; + "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Install Metamask": string; + "Insufficient liquidity for this trade.": string; + "Insufficient {0}": (string | string[])[]; + "Insufficient {0} balance": (string | string[])[]; + "Interface Settings": string; + "Invalid pair": string; + "Invalid pair.": string; + "Invalid price input": string; + "Invalid range selected. The min price must be lower than the max price.": string; + "Invalid recipient": string; + Language: string; + Learn: string; + "Learn about providing liquidity": string; + "Learn more": string; + "Legal & Privacy": string; + "Light Theme": string; + Liquidity: string; + "Liquidity data not available.": string; + "Liquidity provider rewards": string; + "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + Lists: string; + Loaded: string; + Loading: string; + MAX: string; + Manage: string; + "Manage Liquidity in Rewards Pool": string; + "Manage Token Lists": string; + "Manage this pool.": string; + Max: string; + "Max Price": string; + "Max price": string; + "Max slippage": string; + "Max:": string; + "Maximum sent": string; + Menu: string; + Migrate: string; + "Migrate Liquidity to V3": string; + "Migrate V2 Liquidity": string; + "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; + "Migrate {0}/{1} liquidity to V3": (string | string[])[]; + Migrating: string; + "Min Price": string; + "Min price": string; + "Min:": string; + "Minimum received": string; + "Missing dependencies": string; + "Mock Toggle": string; + More: string; + "Network Fee": string; + "Network Warning": string; + "Network fees exceed 50% of the swap amount!": string; + "New Position": string; + "No V2 Liquidity found.": string; + "No active pools": string; + "No data": string; + "No description.": string; + "No liquidity found.": string; + "No pool found.": string; + "No proposals found.": string; + "No results found.": string; + "Not created": string; + OFF: string; + ON: string; + "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; + Off: string; + On: string; + "Once you are happy with the rate click supply to review.": string; + "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; + "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; + "Optimism Gateway": string; + "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Optimistic Etherscan": string; + "Out of range": string; + "Output is estimated.": string; + "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; + "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Output will be sent to <0>{0}": (string | string[])[]; + Owner: string; + "Participating pools": string; + Pending: string; + "Please confirm you would like to remove this list by typing REMOVE": string; + "Please connect to Layer 1 Ethereum": string; + "Please connect to a supported network in the dropdown menu or in your wallet.": string; + "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; + "Polygon Bridge": string; + Polygonscan: string; + Pool: string; + "Pool Found!": string; + "Pool Rate": string; + "Pool rate": string; + "Pool tokens in rewards pool:": string; + "Pooled {0}:": (string | string[])[]; + "Pools Overview": string; + Preview: string; + Price: string; + "Price Difference:": string; + "Price Impact": string; + "Price Impact Too High": string; + "Price Updated": string; + "Price impact": string; + "Price range": string; + "Price updated": string; + "Price:": string; + "Prices and pool share": string; + Proposal: string; + "Proposal Submitted": string; + "Proposal Title": string; + Proposals: string; + "Proposals submitted by community members will appear here.": string; + "Proposed Action": string; + Proposer: string; + "Protocol Disclaimer": string; + Queued: string; + Rates: string; + "Read more about UNI": string; + "Read more about Uniswap governance": string; + "Read more about providing liquidity": string; + "Read more about unsupported assets": string; + "Recent Transactions": string; + "Recent transactions": string; + Recipient: string; + "Reload the page": string; + Remove: string; + "Remove <0/> and <1/>": string; + "Remove Amount": string; + "Remove Delegate": string; + "Remove Liquidity": string; + "Remove list": string; + "Removing {0} {1} and {2} {3}": (string | string[])[]; + "Removing {0} {1} and{2} {3}": (string | string[])[]; + "Request Features": string; + Reset: string; + Return: string; + "Review swap": string; + "Search by token name or address": string; + "Search name or paste address": string; + "Select Pair": string; + "Select a network": string; + "Select a token": string; + "Select a token to find your v2 liquidity.": string; + "Select an action": string; + "Selected Range": string; + Self: string; + "Self Delegate": string; + "Set Price Range": string; + "Set Starting Price": string; + Settings: string; + "Share of Pool": string; + "Share of Pool:": string; + "Show Portis": string; + "Show closed positions": string; + Simple: string; + "Slippage tolerance": string; + "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; + "Something went wrong": string; + "Something went wrong.": string; + "Step 1. Get UNI-V2 Liquidity tokens": string; + "Submit new proposal": string; + "Submitting Proposal": string; + "Submitting Vote": string; + Succeeded: string; + Success: string; + Supply: string; + "Supplying {0} {1} and {2} {3}": (string | string[])[]; + Swap: string; + "Swap <0/> for exactly <1/>": string; + "Swap Anyway": string; + "Swap details": string; + "Swap exactly <0/> for <1/>": string; + "Swap failed: {0}": (string | string[])[]; + "Swap summary": string; + "Swapping {0} {1} for {2} {3}": (string | string[])[]; + "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; + "Tell us what you think \u2197": string; + "Thanks for being part of the Uniswap community <0/>": string; + "The % you will earn in fees.": string; + "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; + "The app fetches blockchain data from The Graph\u2019s hosted service.": string; + "The app fetches on-chain data and constructs contract calls with an Infura API.": string; + "The app fetches the optimal trade route from a Uniswap Labs server.": string; + "The app logs anonymized usage statistics in order to improve over time.": string; + "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; + "The cost of sending this transaction is more than half of the value of the input amount.": string; + "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; + "The estimated difference between the USD values of input and output amounts.": string; + "The input token cannot be transferred. There may be an issue with the input token.": string; + "The market price is outside your specified price range. Single-asset deposit only.": string; + "The most recent block number on this network. Prices update on every block.": string; + "The output token cannot be transferred. There may be an issue with the output token.": string; + "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; + "The price of this pool is within your selected range. Your position is currently earning fees.": string; + "The ratio of tokens you add will set the price of this pool.": string; + "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; + "There is no liquidity data.": string; + "This app uses the following third-party APIs:": string; + "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; + "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; + "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; + "This token is not supported in the Uniswap Labs app": string; + "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; + "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; + "Tip: Custom tokens are stored locally in your browser": string; + To: string; + "To (at least)": string; + "Token not supported": string; + Tokens: string; + "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; + "Top pools": string; + "Total deposited": string; + "Total deposits": string; + "Trade Route": string; + Trading: string; + "Transaction Settings": string; + "Transaction Submitted": string; + "Transaction completed in": string; + "Transaction deadline": string; + "Transaction pending": string; + "Transaction rejected.": string; + "Transaction submitted": string; + "Transfer Token": string; + "Try Again": string; + "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Turn On Expert Mode": string; + "UNI has arrived": string; + "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; + "UNI {0}/{1} Burned": (string | string[])[]; + "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; + "UNI-V2 {0}-{1}": (string | string[])[]; + "Unclaimed UNI": string; + "Unclaimed fees": string; + Undetermined: string; + "Unexpected error. Could not estimate gas for the swap.": string; + "Unexpected issue with estimating the gas. Please try again.": string; + "Uniswap Governance": string; + "Uniswap Labs' Terms of Service": string; + "Uniswap available in: <0>{0}": (string | string[])[]; + "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; + "Uniswap liquidity mining": string; + "Uniswap migration contract\u2197": string; + "Unknown Source": string; + "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; + "Unlock Votes": string; + "Unlock Voting": string; + "Unlocking Votes": string; + "Unsupported Asset": string; + "Unsupported Assets": string; + "Unsupported network\u2013switch to another to trade.": string; + Untitled: string; + Unwrap: string; + "Unwrap <0/> to {0}": (string | string[])[]; + "Update Delegation": string; + "Update list": string; + "Use the Uniswap Labs API to get faster quotes.": string; + User: string; + "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; + "V2 liquidity": string; + "V3 {0} Price:": (string | string[])[]; + "View accrued fees and analytics<0>\u2197": string; + "View list": string; + "View on Etherscan": string; + "View on Explorer": string; + "View transaction on Explorer": string; + Vote: string; + "Vote Against": string; + "Vote For": string; + "Vote against proposal {proposalId}": (string | string[])[]; + "Vote against proposal {proposalKey}": (string | string[])[]; + "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote for proposal {proposalId}": (string | string[])[]; + "Vote for proposal {proposalKey}": (string | string[])[]; + "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote to abstain on proposal {proposalId}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Voting ended {0}": (string | string[])[]; + "Voting ends approximately {0}": (string | string[])[]; + "Voting starts approximately {0}": (string | string[])[]; + "Waiting For Confirmation": string; + "Wallet Address or ENS name": string; + "Weekly Rewards": string; + "Welcome to team Unicorn :)": string; + "When you claim without withdrawing your liquidity remains in the mining pool.": string; + "When you withdraw, the contract will automagically claim UNI on your behalf!": string; + "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; + Withdraw: string; + "Withdraw & Claim": string; + "Withdraw deposited liquidity": string; + "Withdrawing {0} UNI-V2": (string | string[])[]; + "Withdrew UNI-V2!": string; + Wrap: string; + "Wrap <0/> to {0}": (string | string[])[]; + "Wrong Network": string; + "You already have an active or pending proposal": string; + "You are creating a pool": string; + "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; + "You are the first liquidity provider.": string; + "You can either vote on each proposal yourself or delegate your votes to a third party.": string; + "You can now trade {0}": (string | string[])[]; + "You don't have enough votes to submit a proposal": string; + "You don\u2019t have liquidity in this pool yet.": string; + "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; + "You may have lost your network connection.": string; + "You might consider waiting until the network fees go down to complete this transaction.": string; + "You must connect an account.": string; + "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; + "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; + "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; + "You will also collect fees earned from this position.": string; + "You will receive": string; + "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; + "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; + "Your V2 liquidity": string; + "Your active V3 liquidity positions will appear here.": string; + "Your liquidity deposits": string; + "Your pool share:": string; + "Your position": string; + "Your position has 0 liquidity, and is not earning fees.": string; + "Your position will appear here.": string; + "Your position will be 100% composed of {0} at this price": (string | string[])[]; + "Your position will be 100% {0} at this price.": (string | string[])[]; + "Your position will not earn fees or be used in trades until the market price moves into your range.": string; + "Your positions": string; + "Your rate": string; + "Your total pool tokens:": string; + "Your transaction cost will be much higher as it includes the gas to create the pool.": string; + "Your transaction may be frontrun": string; + "Your transaction may fail": string; + "Your transaction will revert if it has been pending for longer than this period of time.": string; + "Your transaction will revert if it is pending for more than this period of time.": string; + "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; + "Your transactions will appear here...": string; + "Your unclaimed UNI": string; + "after slippage": string; + confirm: string; + "for {0}": (string | string[])[]; + gwei: string; + "has socks emoji": string; + "here.": string; + "https:// or ipfs:// or ENS name": string; + minutes: string; + "via {0}": (string | string[])[]; + "via {0} token list": (string | string[])[]; + "{0, plural, one {Import token} other {Import tokens}}": (string | { + one: string; + other: string; + })[][]; + "{0}": string[][]; + "{0} %": (string | string[])[]; + "{0} <0/> per <1/>": (string | string[])[]; + "{0} Custom Tokens": (string | string[])[]; + "{0} Deposited": (string | string[])[]; + "{0} ETH": (string | string[])[]; + "{0} Fees Earned:": (string | string[])[]; + "{0} Pending": (string | string[])[]; + "{0} UNI": (string | string[])[]; + "{0} UNI / week": (string | string[])[]; + "{0} UNI-V2": (string | string[])[]; + "{0} UNI-V2 LP tokens available": (string | string[])[]; + "{0} Votes": (string | string[])[]; + "{0} per {1}": (string | string[])[]; + "{0} tokens": (string | string[])[]; + "{0} {1} Price:": (string | string[])[]; + "{0} {nativeCurrencySymbol}": (string | string[])[]; + "{0} \u2022 Added by user": (string | string[])[]; + "{0}%": (string | string[])[]; + "{0}% fee tier": (string | string[])[]; + "{0}% pool": (string | string[])[]; + "{0}% select": (string | string[])[]; + "{0}-{1} Liquidity Mining": (string | string[])[]; + "{0}/{1} LP NFT": (string | string[])[]; + "{0}/{1} LP Tokens": (string | string[])[]; + "{SOCKS_AMOUNT} UNI": (string | string[])[]; + "{USER_AMOUNT} UNI": (string | string[])[]; + "{activeTokensOnThisChain} tokens": (string | string[])[]; + "{integrator} fee": (string | string[])[]; + "{label} token bridge": (string | string[])[]; + "{min}m {sec}s": (string | string[])[]; + "{percentForSlider}%": (string | string[])[]; + "{sec}s": (string | string[])[]; + "{tokenB} per {tokenA}": (string | string[])[]; + "\u2190 Back to Pools Overview": string; +}; diff --git a/dist2/types/locales/vi-VN.d.ts b/dist2/types/locales/vi-VN.d.ts new file mode 100644 index 00000000000..75120e0e5c9 --- /dev/null +++ b/dist2/types/locales/vi-VN.d.ts @@ -0,0 +1,593 @@ +export const messages: { + "$-": string; + "$<0/>": string; + "${0}": (string | string[])[]; + "(${0})": (string | string[])[]; + "(View on Explorer)": string; + "(clear all)": string; + "(edit)": string; + "- Remove recipient": string; + "0 UNI / week": string; + "25%": string; + "50%": string; + "75%": string; + "<0/> All Proposals": string; + "<0/> Votes": string; + "<0>Account analytics and accrued fees<1> \u2197 ": string; + "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; + "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; + "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; + "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; + "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; + "<0>Unlock voting to prepare for the next proposal.": string; + "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; + "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; + About: string; + Accept: string; + Account: string; + Active: string; + Add: string; + "Add <0/> and <1/> to Uniswap V2": string; + "Add Delegate +": string; + "Add Liquidity": string; + "Add V2 Liquidity": string; + "Add liquidity.": string; + "Add more liquidity": string; + "Add {0} to Metamask <0/>": (string | string[])[]; + "Add {0}-{1} liquidity": (string | string[])[]; + "Add {0}/{1} V3 liquidity": (string | string[])[]; + "Added {0}": (string | string[])[]; + "Address has no available claim": string; + Against: string; + "Allow LP token migration": string; + "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; + "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; + Allowed: string; + Amount: string; + "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Approval pending <0/>": string; + Approve: string; + "Approve Token": string; + "Approve {0}": (string | string[])[]; + "Approve {0} first": (string | string[])[]; + Approved: string; + Approving: string; + "Approving {0}": (string | string[])[]; + Arbiscan: string; + "Arbitrum Bridge": string; + "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Are you sure?": string; + "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; + "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; + Auto: string; + "Auto Router API": string; + "Available to deposit: {0}": (string | string[])[]; + "Balance: {0}": (string | string[])[]; + "Best for exotic pairs.": string; + "Best for most pairs.": string; + "Best for stable pairs.": string; + "Best for very stable pairs.": string; + "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; + "Blocked address": string; + Bridge: string; + "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; + "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; + Canceled: string; + Change: string; + Charts: string; + "Check network status": string; + "Check out our v3 LP walkthrough and migration guides.": string; + Claim: string; + "Claim <0/> for {0}": (string | string[])[]; + "Claim UNI": string; + "Claim UNI Token": string; + "Claim UNI reward for {0}": (string | string[])[]; + "Claim fees": string; + "Claim your UNI tokens": string; + Claimed: string; + "Claimed UNI!": string; + "Claimed!": string; + Claiming: string; + "Claiming UNI": string; + "Claiming {0} UNI": (string | string[])[]; + "Clear All": string; + "Clear all": string; + Close: string; + Closed: string; + Collect: string; + "Collect as WETH": string; + "Collect fees": string; + "Collect {0}/{1} fees": (string | string[])[]; + Collected: string; + Collecting: string; + "Collecting fees": string; + "Collecting fees will withdraw currently available fees for you.": string; + Confirm: string; + "Confirm Supply": string; + "Confirm Swap": string; + "Confirm swap": string; + "Confirm this transaction in your wallet": string; + "Confirm transaction in wallet": string; + "Connect Wallet": string; + "Connect a wallet": string; + "Connect to a wallet to find pools": string; + "Connect to a wallet to view your V2 liquidity.": string; + "Connect to a wallet to view your liquidity.": string; + "Connect wallet to swap": string; + "Connected with {name}": (string | string[])[]; + Copied: string; + "Copy Address": string; + "Create Pool & Supply": string; + "Create Proposal": string; + "Create a pair": string; + "Create a pool": string; + "Create an issue on GitHub": string; + "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; + "Create pool.": string; + "Create {0}/{1} V3 pool": (string | string[])[]; + "Current price": string; + "Current {0} Price:": (string | string[])[]; + Custom: string; + "Dark Theme": string; + Defeated: string; + "Delegate Votes": string; + "Delegate voting power to {0}": (string | string[])[]; + "Delegated to:": string; + "Delegating votes": string; + Deposit: string; + "Deposit Amounts": string; + "Deposit UNI-V2 LP Tokens": string; + "Deposit liquidity": string; + "Deposit tokens to the {label} network.": (string | string[])[]; + "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; + "Deposited liquidity:": string; + "Deposited {0} UNI-V2": (string | string[])[]; + "Depositing Liquidity": string; + Description: string; + Detailed: string; + Details: string; + Disconnect: string; + Discord: string; + Dismiss: string; + Docs: string; + "Don\u2019t see one of your v2 positions? <0>Import it.": string; + "Earned UNI tokens represent voting shares in Uniswap governance.": string; + Edit: string; + "Efficiency Comparison": string; + "Enter a percent": string; + "Enter a recipient": string; + "Enter a valid slippage percentage": string; + "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; + "Enter an amount": string; + "Enter valid list location": string; + "Enter valid token address": string; + "Enter {0} amount": (string | string[])[]; + Error: string; + "Error connecting": string; + "Error connecting. Try refreshing the page.": string; + "Error details": string; + "Error importing list": string; + "Estimate may differ due to your wallet gas settings": string; + "Estimated network fee": string; + Etherscan: string; + Executed: string; + "Expanded results from inactive Token Lists": string; + "Expected Output": string; + "Expert Mode": string; + "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; + Expired: string; + "Explore Uniswap Analytics.": string; + "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; + "Fee Tier": string; + "Fee tier": string; + "Fetching best price...": string; + "Fetching best price\u2026": string; + For: string; + "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; + From: string; + "From (at most)": string; + "Full Range": string; + "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; + "Get support on Discord": string; + "Help Center": string; + Hide: string; + "Hide closed positions": string; + "High Price Impact": string; + "How this app uses APIs": string; + "I understand": string; + "If you purchase a token from this list, you may not be able to sell it back.": string; + Import: string; + "Import List": string; + "Import Pool": string; + "Import V2 Pool": string; + "Import at your own risk": string; + "In range": string; + "Increase Liquidity": string; + "Initial prices and pool share": string; + "Initializing...": string; + "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Install Metamask": string; + "Insufficient liquidity for this trade.": string; + "Insufficient {0}": (string | string[])[]; + "Insufficient {0} balance": (string | string[])[]; + "Interface Settings": string; + "Invalid pair": string; + "Invalid pair.": string; + "Invalid price input": string; + "Invalid range selected. The min price must be lower than the max price.": string; + "Invalid recipient": string; + Language: string; + Learn: string; + "Learn about providing liquidity": string; + "Learn more": string; + "Legal & Privacy": string; + "Light Theme": string; + Liquidity: string; + "Liquidity data not available.": string; + "Liquidity provider rewards": string; + "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + Lists: string; + Loaded: string; + Loading: string; + MAX: string; + Manage: string; + "Manage Liquidity in Rewards Pool": string; + "Manage Token Lists": string; + "Manage this pool.": string; + Max: string; + "Max Price": string; + "Max price": string; + "Max slippage": string; + "Max:": string; + "Maximum sent": string; + Menu: string; + Migrate: string; + "Migrate Liquidity to V3": string; + "Migrate V2 Liquidity": string; + "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; + "Migrate {0}/{1} liquidity to V3": (string | string[])[]; + Migrating: string; + "Min Price": string; + "Min price": string; + "Min:": string; + "Minimum received": string; + "Missing dependencies": string; + "Mock Toggle": string; + More: string; + "Network Fee": string; + "Network Warning": string; + "Network fees exceed 50% of the swap amount!": string; + "New Position": string; + "No V2 Liquidity found.": string; + "No active pools": string; + "No data": string; + "No description.": string; + "No liquidity found.": string; + "No pool found.": string; + "No proposals found.": string; + "No results found.": string; + "Not created": string; + OFF: string; + ON: string; + "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; + Off: string; + On: string; + "Once you are happy with the rate click supply to review.": string; + "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; + "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; + "Optimism Gateway": string; + "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Optimistic Etherscan": string; + "Out of range": string; + "Output is estimated.": string; + "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; + "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Output will be sent to <0>{0}": (string | string[])[]; + Owner: string; + "Participating pools": string; + Pending: string; + "Please confirm you would like to remove this list by typing REMOVE": string; + "Please connect to Layer 1 Ethereum": string; + "Please connect to a supported network in the dropdown menu or in your wallet.": string; + "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; + "Polygon Bridge": string; + Polygonscan: string; + Pool: string; + "Pool Found!": string; + "Pool Rate": string; + "Pool rate": string; + "Pool tokens in rewards pool:": string; + "Pooled {0}:": (string | string[])[]; + "Pools Overview": string; + Preview: string; + Price: string; + "Price Difference:": string; + "Price Impact": string; + "Price Impact Too High": string; + "Price Updated": string; + "Price impact": string; + "Price range": string; + "Price updated": string; + "Price:": string; + "Prices and pool share": string; + Proposal: string; + "Proposal Submitted": string; + "Proposal Title": string; + Proposals: string; + "Proposals submitted by community members will appear here.": string; + "Proposed Action": string; + Proposer: string; + "Protocol Disclaimer": string; + Queued: string; + Rates: string; + "Read more about UNI": string; + "Read more about Uniswap governance": string; + "Read more about providing liquidity": string; + "Read more about unsupported assets": string; + "Recent Transactions": string; + "Recent transactions": string; + Recipient: string; + "Reload the page": string; + Remove: string; + "Remove <0/> and <1/>": string; + "Remove Amount": string; + "Remove Delegate": string; + "Remove Liquidity": string; + "Remove list": string; + "Removing {0} {1} and {2} {3}": (string | string[])[]; + "Removing {0} {1} and{2} {3}": (string | string[])[]; + "Request Features": string; + Reset: string; + Return: string; + "Review swap": string; + "Search by token name or address": string; + "Search name or paste address": string; + "Select Pair": string; + "Select a network": string; + "Select a token": string; + "Select a token to find your v2 liquidity.": string; + "Select an action": string; + "Selected Range": string; + Self: string; + "Self Delegate": string; + "Set Price Range": string; + "Set Starting Price": string; + Settings: string; + "Share of Pool": string; + "Share of Pool:": string; + "Show Portis": string; + "Show closed positions": string; + Simple: string; + "Slippage tolerance": string; + "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; + "Something went wrong": string; + "Something went wrong.": string; + "Step 1. Get UNI-V2 Liquidity tokens": string; + "Submit new proposal": string; + "Submitting Proposal": string; + "Submitting Vote": string; + Succeeded: string; + Success: string; + Supply: string; + "Supplying {0} {1} and {2} {3}": (string | string[])[]; + Swap: string; + "Swap <0/> for exactly <1/>": string; + "Swap Anyway": string; + "Swap details": string; + "Swap exactly <0/> for <1/>": string; + "Swap failed: {0}": (string | string[])[]; + "Swap summary": string; + "Swapping {0} {1} for {2} {3}": (string | string[])[]; + "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; + "Tell us what you think \u2197": string; + "Thanks for being part of the Uniswap community <0/>": string; + "The % you will earn in fees.": string; + "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; + "The app fetches blockchain data from The Graph\u2019s hosted service.": string; + "The app fetches on-chain data and constructs contract calls with an Infura API.": string; + "The app fetches the optimal trade route from a Uniswap Labs server.": string; + "The app logs anonymized usage statistics in order to improve over time.": string; + "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; + "The cost of sending this transaction is more than half of the value of the input amount.": string; + "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; + "The estimated difference between the USD values of input and output amounts.": string; + "The input token cannot be transferred. There may be an issue with the input token.": string; + "The market price is outside your specified price range. Single-asset deposit only.": string; + "The most recent block number on this network. Prices update on every block.": string; + "The output token cannot be transferred. There may be an issue with the output token.": string; + "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; + "The price of this pool is within your selected range. Your position is currently earning fees.": string; + "The ratio of tokens you add will set the price of this pool.": string; + "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; + "There is no liquidity data.": string; + "This app uses the following third-party APIs:": string; + "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; + "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; + "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; + "This token is not supported in the Uniswap Labs app": string; + "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; + "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; + "Tip: Custom tokens are stored locally in your browser": string; + To: string; + "To (at least)": string; + "Token not supported": string; + Tokens: string; + "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; + "Top pools": string; + "Total deposited": string; + "Total deposits": string; + "Trade Route": string; + Trading: string; + "Transaction Settings": string; + "Transaction Submitted": string; + "Transaction completed in": string; + "Transaction deadline": string; + "Transaction pending": string; + "Transaction rejected.": string; + "Transaction submitted": string; + "Transfer Token": string; + "Try Again": string; + "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Turn On Expert Mode": string; + "UNI has arrived": string; + "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; + "UNI {0}/{1} Burned": (string | string[])[]; + "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; + "UNI-V2 {0}-{1}": (string | string[])[]; + "Unclaimed UNI": string; + "Unclaimed fees": string; + Undetermined: string; + "Unexpected error. Could not estimate gas for the swap.": string; + "Unexpected issue with estimating the gas. Please try again.": string; + "Uniswap Governance": string; + "Uniswap Labs' Terms of Service": string; + "Uniswap available in: <0>{0}": (string | string[])[]; + "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; + "Uniswap liquidity mining": string; + "Uniswap migration contract\u2197": string; + "Unknown Source": string; + "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; + "Unlock Votes": string; + "Unlock Voting": string; + "Unlocking Votes": string; + "Unsupported Asset": string; + "Unsupported Assets": string; + "Unsupported network\u2013switch to another to trade.": string; + Untitled: string; + Unwrap: string; + "Unwrap <0/> to {0}": (string | string[])[]; + "Update Delegation": string; + "Update list": string; + "Use the Uniswap Labs API to get faster quotes.": string; + User: string; + "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; + "V2 liquidity": string; + "V3 {0} Price:": (string | string[])[]; + "View accrued fees and analytics<0>\u2197": string; + "View list": string; + "View on Etherscan": string; + "View on Explorer": string; + "View transaction on Explorer": string; + Vote: string; + "Vote Against": string; + "Vote For": string; + "Vote against proposal {proposalId}": (string | string[])[]; + "Vote against proposal {proposalKey}": (string | string[])[]; + "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote for proposal {proposalId}": (string | string[])[]; + "Vote for proposal {proposalKey}": (string | string[])[]; + "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote to abstain on proposal {proposalId}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Voting ended {0}": (string | string[])[]; + "Voting ends approximately {0}": (string | string[])[]; + "Voting starts approximately {0}": (string | string[])[]; + "Waiting For Confirmation": string; + "Wallet Address or ENS name": string; + "Weekly Rewards": string; + "Welcome to team Unicorn :)": string; + "When you claim without withdrawing your liquidity remains in the mining pool.": string; + "When you withdraw, the contract will automagically claim UNI on your behalf!": string; + "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; + Withdraw: string; + "Withdraw & Claim": string; + "Withdraw deposited liquidity": string; + "Withdrawing {0} UNI-V2": (string | string[])[]; + "Withdrew UNI-V2!": string; + Wrap: string; + "Wrap <0/> to {0}": (string | string[])[]; + "Wrong Network": string; + "You already have an active or pending proposal": string; + "You are creating a pool": string; + "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; + "You are the first liquidity provider.": string; + "You can either vote on each proposal yourself or delegate your votes to a third party.": string; + "You can now trade {0}": (string | string[])[]; + "You don't have enough votes to submit a proposal": string; + "You don\u2019t have liquidity in this pool yet.": string; + "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; + "You may have lost your network connection.": string; + "You might consider waiting until the network fees go down to complete this transaction.": string; + "You must connect an account.": string; + "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; + "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; + "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; + "You will also collect fees earned from this position.": string; + "You will receive": string; + "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; + "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; + "Your V2 liquidity": string; + "Your active V3 liquidity positions will appear here.": string; + "Your liquidity deposits": string; + "Your pool share:": string; + "Your position": string; + "Your position has 0 liquidity, and is not earning fees.": string; + "Your position will appear here.": string; + "Your position will be 100% composed of {0} at this price": (string | string[])[]; + "Your position will be 100% {0} at this price.": (string | string[])[]; + "Your position will not earn fees or be used in trades until the market price moves into your range.": string; + "Your positions": string; + "Your rate": string; + "Your total pool tokens:": string; + "Your transaction cost will be much higher as it includes the gas to create the pool.": string; + "Your transaction may be frontrun": string; + "Your transaction may fail": string; + "Your transaction will revert if it has been pending for longer than this period of time.": string; + "Your transaction will revert if it is pending for more than this period of time.": string; + "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; + "Your transactions will appear here...": string; + "Your unclaimed UNI": string; + "after slippage": string; + confirm: string; + "for {0}": (string | string[])[]; + gwei: string; + "has socks emoji": string; + "here.": string; + "https:// or ipfs:// or ENS name": string; + minutes: string; + "via {0}": (string | string[])[]; + "via {0} token list": (string | string[])[]; + "{0, plural, one {Import token} other {Import tokens}}": (string | { + one: string; + other: string; + })[][]; + "{0}": string[][]; + "{0} %": (string | string[])[]; + "{0} <0/> per <1/>": (string | string[])[]; + "{0} Custom Tokens": (string | string[])[]; + "{0} Deposited": (string | string[])[]; + "{0} ETH": (string | string[])[]; + "{0} Fees Earned:": (string | string[])[]; + "{0} Pending": (string | string[])[]; + "{0} UNI": (string | string[])[]; + "{0} UNI / week": (string | string[])[]; + "{0} UNI-V2": (string | string[])[]; + "{0} UNI-V2 LP tokens available": (string | string[])[]; + "{0} Votes": (string | string[])[]; + "{0} per {1}": (string | string[])[]; + "{0} tokens": (string | string[])[]; + "{0} {1} Price:": (string | string[])[]; + "{0} {nativeCurrencySymbol}": (string | string[])[]; + "{0} \u2022 Added by user": (string | string[])[]; + "{0}%": (string | string[])[]; + "{0}% fee tier": (string | string[])[]; + "{0}% pool": (string | string[])[]; + "{0}% select": (string | string[])[]; + "{0}-{1} Liquidity Mining": (string | string[])[]; + "{0}/{1} LP NFT": (string | string[])[]; + "{0}/{1} LP Tokens": (string | string[])[]; + "{SOCKS_AMOUNT} UNI": (string | string[])[]; + "{USER_AMOUNT} UNI": (string | string[])[]; + "{activeTokensOnThisChain} tokens": (string | string[])[]; + "{integrator} fee": (string | string[])[]; + "{label} token bridge": (string | string[])[]; + "{min}m {sec}s": (string | string[])[]; + "{percentForSlider}%": (string | string[])[]; + "{sec}s": (string | string[])[]; + "{tokenB} per {tokenA}": (string | string[])[]; + "\u2190 Back to Pools Overview": string; +}; diff --git a/dist2/types/locales/zh-CN.d.ts b/dist2/types/locales/zh-CN.d.ts new file mode 100644 index 00000000000..75120e0e5c9 --- /dev/null +++ b/dist2/types/locales/zh-CN.d.ts @@ -0,0 +1,593 @@ +export const messages: { + "$-": string; + "$<0/>": string; + "${0}": (string | string[])[]; + "(${0})": (string | string[])[]; + "(View on Explorer)": string; + "(clear all)": string; + "(edit)": string; + "- Remove recipient": string; + "0 UNI / week": string; + "25%": string; + "50%": string; + "75%": string; + "<0/> All Proposals": string; + "<0/> Votes": string; + "<0>Account analytics and accrued fees<1> \u2197 ": string; + "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; + "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; + "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; + "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; + "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; + "<0>Unlock voting to prepare for the next proposal.": string; + "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; + "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; + About: string; + Accept: string; + Account: string; + Active: string; + Add: string; + "Add <0/> and <1/> to Uniswap V2": string; + "Add Delegate +": string; + "Add Liquidity": string; + "Add V2 Liquidity": string; + "Add liquidity.": string; + "Add more liquidity": string; + "Add {0} to Metamask <0/>": (string | string[])[]; + "Add {0}-{1} liquidity": (string | string[])[]; + "Add {0}/{1} V3 liquidity": (string | string[])[]; + "Added {0}": (string | string[])[]; + "Address has no available claim": string; + Against: string; + "Allow LP token migration": string; + "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; + "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; + Allowed: string; + Amount: string; + "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Approval pending <0/>": string; + Approve: string; + "Approve Token": string; + "Approve {0}": (string | string[])[]; + "Approve {0} first": (string | string[])[]; + Approved: string; + Approving: string; + "Approving {0}": (string | string[])[]; + Arbiscan: string; + "Arbitrum Bridge": string; + "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Are you sure?": string; + "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; + "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; + Auto: string; + "Auto Router API": string; + "Available to deposit: {0}": (string | string[])[]; + "Balance: {0}": (string | string[])[]; + "Best for exotic pairs.": string; + "Best for most pairs.": string; + "Best for stable pairs.": string; + "Best for very stable pairs.": string; + "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; + "Blocked address": string; + Bridge: string; + "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; + "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; + Canceled: string; + Change: string; + Charts: string; + "Check network status": string; + "Check out our v3 LP walkthrough and migration guides.": string; + Claim: string; + "Claim <0/> for {0}": (string | string[])[]; + "Claim UNI": string; + "Claim UNI Token": string; + "Claim UNI reward for {0}": (string | string[])[]; + "Claim fees": string; + "Claim your UNI tokens": string; + Claimed: string; + "Claimed UNI!": string; + "Claimed!": string; + Claiming: string; + "Claiming UNI": string; + "Claiming {0} UNI": (string | string[])[]; + "Clear All": string; + "Clear all": string; + Close: string; + Closed: string; + Collect: string; + "Collect as WETH": string; + "Collect fees": string; + "Collect {0}/{1} fees": (string | string[])[]; + Collected: string; + Collecting: string; + "Collecting fees": string; + "Collecting fees will withdraw currently available fees for you.": string; + Confirm: string; + "Confirm Supply": string; + "Confirm Swap": string; + "Confirm swap": string; + "Confirm this transaction in your wallet": string; + "Confirm transaction in wallet": string; + "Connect Wallet": string; + "Connect a wallet": string; + "Connect to a wallet to find pools": string; + "Connect to a wallet to view your V2 liquidity.": string; + "Connect to a wallet to view your liquidity.": string; + "Connect wallet to swap": string; + "Connected with {name}": (string | string[])[]; + Copied: string; + "Copy Address": string; + "Create Pool & Supply": string; + "Create Proposal": string; + "Create a pair": string; + "Create a pool": string; + "Create an issue on GitHub": string; + "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; + "Create pool.": string; + "Create {0}/{1} V3 pool": (string | string[])[]; + "Current price": string; + "Current {0} Price:": (string | string[])[]; + Custom: string; + "Dark Theme": string; + Defeated: string; + "Delegate Votes": string; + "Delegate voting power to {0}": (string | string[])[]; + "Delegated to:": string; + "Delegating votes": string; + Deposit: string; + "Deposit Amounts": string; + "Deposit UNI-V2 LP Tokens": string; + "Deposit liquidity": string; + "Deposit tokens to the {label} network.": (string | string[])[]; + "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; + "Deposited liquidity:": string; + "Deposited {0} UNI-V2": (string | string[])[]; + "Depositing Liquidity": string; + Description: string; + Detailed: string; + Details: string; + Disconnect: string; + Discord: string; + Dismiss: string; + Docs: string; + "Don\u2019t see one of your v2 positions? <0>Import it.": string; + "Earned UNI tokens represent voting shares in Uniswap governance.": string; + Edit: string; + "Efficiency Comparison": string; + "Enter a percent": string; + "Enter a recipient": string; + "Enter a valid slippage percentage": string; + "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; + "Enter an amount": string; + "Enter valid list location": string; + "Enter valid token address": string; + "Enter {0} amount": (string | string[])[]; + Error: string; + "Error connecting": string; + "Error connecting. Try refreshing the page.": string; + "Error details": string; + "Error importing list": string; + "Estimate may differ due to your wallet gas settings": string; + "Estimated network fee": string; + Etherscan: string; + Executed: string; + "Expanded results from inactive Token Lists": string; + "Expected Output": string; + "Expert Mode": string; + "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; + Expired: string; + "Explore Uniswap Analytics.": string; + "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; + "Fee Tier": string; + "Fee tier": string; + "Fetching best price...": string; + "Fetching best price\u2026": string; + For: string; + "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; + From: string; + "From (at most)": string; + "Full Range": string; + "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; + "Get support on Discord": string; + "Help Center": string; + Hide: string; + "Hide closed positions": string; + "High Price Impact": string; + "How this app uses APIs": string; + "I understand": string; + "If you purchase a token from this list, you may not be able to sell it back.": string; + Import: string; + "Import List": string; + "Import Pool": string; + "Import V2 Pool": string; + "Import at your own risk": string; + "In range": string; + "Increase Liquidity": string; + "Initial prices and pool share": string; + "Initializing...": string; + "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Install Metamask": string; + "Insufficient liquidity for this trade.": string; + "Insufficient {0}": (string | string[])[]; + "Insufficient {0} balance": (string | string[])[]; + "Interface Settings": string; + "Invalid pair": string; + "Invalid pair.": string; + "Invalid price input": string; + "Invalid range selected. The min price must be lower than the max price.": string; + "Invalid recipient": string; + Language: string; + Learn: string; + "Learn about providing liquidity": string; + "Learn more": string; + "Legal & Privacy": string; + "Light Theme": string; + Liquidity: string; + "Liquidity data not available.": string; + "Liquidity provider rewards": string; + "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + Lists: string; + Loaded: string; + Loading: string; + MAX: string; + Manage: string; + "Manage Liquidity in Rewards Pool": string; + "Manage Token Lists": string; + "Manage this pool.": string; + Max: string; + "Max Price": string; + "Max price": string; + "Max slippage": string; + "Max:": string; + "Maximum sent": string; + Menu: string; + Migrate: string; + "Migrate Liquidity to V3": string; + "Migrate V2 Liquidity": string; + "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; + "Migrate {0}/{1} liquidity to V3": (string | string[])[]; + Migrating: string; + "Min Price": string; + "Min price": string; + "Min:": string; + "Minimum received": string; + "Missing dependencies": string; + "Mock Toggle": string; + More: string; + "Network Fee": string; + "Network Warning": string; + "Network fees exceed 50% of the swap amount!": string; + "New Position": string; + "No V2 Liquidity found.": string; + "No active pools": string; + "No data": string; + "No description.": string; + "No liquidity found.": string; + "No pool found.": string; + "No proposals found.": string; + "No results found.": string; + "Not created": string; + OFF: string; + ON: string; + "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; + Off: string; + On: string; + "Once you are happy with the rate click supply to review.": string; + "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; + "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; + "Optimism Gateway": string; + "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Optimistic Etherscan": string; + "Out of range": string; + "Output is estimated.": string; + "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; + "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Output will be sent to <0>{0}": (string | string[])[]; + Owner: string; + "Participating pools": string; + Pending: string; + "Please confirm you would like to remove this list by typing REMOVE": string; + "Please connect to Layer 1 Ethereum": string; + "Please connect to a supported network in the dropdown menu or in your wallet.": string; + "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; + "Polygon Bridge": string; + Polygonscan: string; + Pool: string; + "Pool Found!": string; + "Pool Rate": string; + "Pool rate": string; + "Pool tokens in rewards pool:": string; + "Pooled {0}:": (string | string[])[]; + "Pools Overview": string; + Preview: string; + Price: string; + "Price Difference:": string; + "Price Impact": string; + "Price Impact Too High": string; + "Price Updated": string; + "Price impact": string; + "Price range": string; + "Price updated": string; + "Price:": string; + "Prices and pool share": string; + Proposal: string; + "Proposal Submitted": string; + "Proposal Title": string; + Proposals: string; + "Proposals submitted by community members will appear here.": string; + "Proposed Action": string; + Proposer: string; + "Protocol Disclaimer": string; + Queued: string; + Rates: string; + "Read more about UNI": string; + "Read more about Uniswap governance": string; + "Read more about providing liquidity": string; + "Read more about unsupported assets": string; + "Recent Transactions": string; + "Recent transactions": string; + Recipient: string; + "Reload the page": string; + Remove: string; + "Remove <0/> and <1/>": string; + "Remove Amount": string; + "Remove Delegate": string; + "Remove Liquidity": string; + "Remove list": string; + "Removing {0} {1} and {2} {3}": (string | string[])[]; + "Removing {0} {1} and{2} {3}": (string | string[])[]; + "Request Features": string; + Reset: string; + Return: string; + "Review swap": string; + "Search by token name or address": string; + "Search name or paste address": string; + "Select Pair": string; + "Select a network": string; + "Select a token": string; + "Select a token to find your v2 liquidity.": string; + "Select an action": string; + "Selected Range": string; + Self: string; + "Self Delegate": string; + "Set Price Range": string; + "Set Starting Price": string; + Settings: string; + "Share of Pool": string; + "Share of Pool:": string; + "Show Portis": string; + "Show closed positions": string; + Simple: string; + "Slippage tolerance": string; + "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; + "Something went wrong": string; + "Something went wrong.": string; + "Step 1. Get UNI-V2 Liquidity tokens": string; + "Submit new proposal": string; + "Submitting Proposal": string; + "Submitting Vote": string; + Succeeded: string; + Success: string; + Supply: string; + "Supplying {0} {1} and {2} {3}": (string | string[])[]; + Swap: string; + "Swap <0/> for exactly <1/>": string; + "Swap Anyway": string; + "Swap details": string; + "Swap exactly <0/> for <1/>": string; + "Swap failed: {0}": (string | string[])[]; + "Swap summary": string; + "Swapping {0} {1} for {2} {3}": (string | string[])[]; + "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; + "Tell us what you think \u2197": string; + "Thanks for being part of the Uniswap community <0/>": string; + "The % you will earn in fees.": string; + "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; + "The app fetches blockchain data from The Graph\u2019s hosted service.": string; + "The app fetches on-chain data and constructs contract calls with an Infura API.": string; + "The app fetches the optimal trade route from a Uniswap Labs server.": string; + "The app logs anonymized usage statistics in order to improve over time.": string; + "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; + "The cost of sending this transaction is more than half of the value of the input amount.": string; + "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; + "The estimated difference between the USD values of input and output amounts.": string; + "The input token cannot be transferred. There may be an issue with the input token.": string; + "The market price is outside your specified price range. Single-asset deposit only.": string; + "The most recent block number on this network. Prices update on every block.": string; + "The output token cannot be transferred. There may be an issue with the output token.": string; + "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; + "The price of this pool is within your selected range. Your position is currently earning fees.": string; + "The ratio of tokens you add will set the price of this pool.": string; + "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; + "There is no liquidity data.": string; + "This app uses the following third-party APIs:": string; + "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; + "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; + "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; + "This token is not supported in the Uniswap Labs app": string; + "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; + "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; + "Tip: Custom tokens are stored locally in your browser": string; + To: string; + "To (at least)": string; + "Token not supported": string; + Tokens: string; + "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; + "Top pools": string; + "Total deposited": string; + "Total deposits": string; + "Trade Route": string; + Trading: string; + "Transaction Settings": string; + "Transaction Submitted": string; + "Transaction completed in": string; + "Transaction deadline": string; + "Transaction pending": string; + "Transaction rejected.": string; + "Transaction submitted": string; + "Transfer Token": string; + "Try Again": string; + "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Turn On Expert Mode": string; + "UNI has arrived": string; + "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; + "UNI {0}/{1} Burned": (string | string[])[]; + "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; + "UNI-V2 {0}-{1}": (string | string[])[]; + "Unclaimed UNI": string; + "Unclaimed fees": string; + Undetermined: string; + "Unexpected error. Could not estimate gas for the swap.": string; + "Unexpected issue with estimating the gas. Please try again.": string; + "Uniswap Governance": string; + "Uniswap Labs' Terms of Service": string; + "Uniswap available in: <0>{0}": (string | string[])[]; + "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; + "Uniswap liquidity mining": string; + "Uniswap migration contract\u2197": string; + "Unknown Source": string; + "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; + "Unlock Votes": string; + "Unlock Voting": string; + "Unlocking Votes": string; + "Unsupported Asset": string; + "Unsupported Assets": string; + "Unsupported network\u2013switch to another to trade.": string; + Untitled: string; + Unwrap: string; + "Unwrap <0/> to {0}": (string | string[])[]; + "Update Delegation": string; + "Update list": string; + "Use the Uniswap Labs API to get faster quotes.": string; + User: string; + "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; + "V2 liquidity": string; + "V3 {0} Price:": (string | string[])[]; + "View accrued fees and analytics<0>\u2197": string; + "View list": string; + "View on Etherscan": string; + "View on Explorer": string; + "View transaction on Explorer": string; + Vote: string; + "Vote Against": string; + "Vote For": string; + "Vote against proposal {proposalId}": (string | string[])[]; + "Vote against proposal {proposalKey}": (string | string[])[]; + "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote for proposal {proposalId}": (string | string[])[]; + "Vote for proposal {proposalKey}": (string | string[])[]; + "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote to abstain on proposal {proposalId}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Voting ended {0}": (string | string[])[]; + "Voting ends approximately {0}": (string | string[])[]; + "Voting starts approximately {0}": (string | string[])[]; + "Waiting For Confirmation": string; + "Wallet Address or ENS name": string; + "Weekly Rewards": string; + "Welcome to team Unicorn :)": string; + "When you claim without withdrawing your liquidity remains in the mining pool.": string; + "When you withdraw, the contract will automagically claim UNI on your behalf!": string; + "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; + Withdraw: string; + "Withdraw & Claim": string; + "Withdraw deposited liquidity": string; + "Withdrawing {0} UNI-V2": (string | string[])[]; + "Withdrew UNI-V2!": string; + Wrap: string; + "Wrap <0/> to {0}": (string | string[])[]; + "Wrong Network": string; + "You already have an active or pending proposal": string; + "You are creating a pool": string; + "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; + "You are the first liquidity provider.": string; + "You can either vote on each proposal yourself or delegate your votes to a third party.": string; + "You can now trade {0}": (string | string[])[]; + "You don't have enough votes to submit a proposal": string; + "You don\u2019t have liquidity in this pool yet.": string; + "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; + "You may have lost your network connection.": string; + "You might consider waiting until the network fees go down to complete this transaction.": string; + "You must connect an account.": string; + "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; + "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; + "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; + "You will also collect fees earned from this position.": string; + "You will receive": string; + "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; + "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; + "Your V2 liquidity": string; + "Your active V3 liquidity positions will appear here.": string; + "Your liquidity deposits": string; + "Your pool share:": string; + "Your position": string; + "Your position has 0 liquidity, and is not earning fees.": string; + "Your position will appear here.": string; + "Your position will be 100% composed of {0} at this price": (string | string[])[]; + "Your position will be 100% {0} at this price.": (string | string[])[]; + "Your position will not earn fees or be used in trades until the market price moves into your range.": string; + "Your positions": string; + "Your rate": string; + "Your total pool tokens:": string; + "Your transaction cost will be much higher as it includes the gas to create the pool.": string; + "Your transaction may be frontrun": string; + "Your transaction may fail": string; + "Your transaction will revert if it has been pending for longer than this period of time.": string; + "Your transaction will revert if it is pending for more than this period of time.": string; + "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; + "Your transactions will appear here...": string; + "Your unclaimed UNI": string; + "after slippage": string; + confirm: string; + "for {0}": (string | string[])[]; + gwei: string; + "has socks emoji": string; + "here.": string; + "https:// or ipfs:// or ENS name": string; + minutes: string; + "via {0}": (string | string[])[]; + "via {0} token list": (string | string[])[]; + "{0, plural, one {Import token} other {Import tokens}}": (string | { + one: string; + other: string; + })[][]; + "{0}": string[][]; + "{0} %": (string | string[])[]; + "{0} <0/> per <1/>": (string | string[])[]; + "{0} Custom Tokens": (string | string[])[]; + "{0} Deposited": (string | string[])[]; + "{0} ETH": (string | string[])[]; + "{0} Fees Earned:": (string | string[])[]; + "{0} Pending": (string | string[])[]; + "{0} UNI": (string | string[])[]; + "{0} UNI / week": (string | string[])[]; + "{0} UNI-V2": (string | string[])[]; + "{0} UNI-V2 LP tokens available": (string | string[])[]; + "{0} Votes": (string | string[])[]; + "{0} per {1}": (string | string[])[]; + "{0} tokens": (string | string[])[]; + "{0} {1} Price:": (string | string[])[]; + "{0} {nativeCurrencySymbol}": (string | string[])[]; + "{0} \u2022 Added by user": (string | string[])[]; + "{0}%": (string | string[])[]; + "{0}% fee tier": (string | string[])[]; + "{0}% pool": (string | string[])[]; + "{0}% select": (string | string[])[]; + "{0}-{1} Liquidity Mining": (string | string[])[]; + "{0}/{1} LP NFT": (string | string[])[]; + "{0}/{1} LP Tokens": (string | string[])[]; + "{SOCKS_AMOUNT} UNI": (string | string[])[]; + "{USER_AMOUNT} UNI": (string | string[])[]; + "{activeTokensOnThisChain} tokens": (string | string[])[]; + "{integrator} fee": (string | string[])[]; + "{label} token bridge": (string | string[])[]; + "{min}m {sec}s": (string | string[])[]; + "{percentForSlider}%": (string | string[])[]; + "{sec}s": (string | string[])[]; + "{tokenB} per {tokenA}": (string | string[])[]; + "\u2190 Back to Pools Overview": string; +}; diff --git a/dist2/types/locales/zh-TW.d.ts b/dist2/types/locales/zh-TW.d.ts new file mode 100644 index 00000000000..75120e0e5c9 --- /dev/null +++ b/dist2/types/locales/zh-TW.d.ts @@ -0,0 +1,593 @@ +export const messages: { + "$-": string; + "$<0/>": string; + "${0}": (string | string[])[]; + "(${0})": (string | string[])[]; + "(View on Explorer)": string; + "(clear all)": string; + "(edit)": string; + "- Remove recipient": string; + "0 UNI / week": string; + "25%": string; + "50%": string; + "75%": string; + "<0/> All Proposals": string; + "<0/> Votes": string; + "<0>Account analytics and accrued fees<1> \u2197 ": string; + "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; + "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; + "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; + "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; + "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; + "<0>Unlock voting to prepare for the next proposal.": string; + "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; + "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; + About: string; + Accept: string; + Account: string; + Active: string; + Add: string; + "Add <0/> and <1/> to Uniswap V2": string; + "Add Delegate +": string; + "Add Liquidity": string; + "Add V2 Liquidity": string; + "Add liquidity.": string; + "Add more liquidity": string; + "Add {0} to Metamask <0/>": (string | string[])[]; + "Add {0}-{1} liquidity": (string | string[])[]; + "Add {0}/{1} V3 liquidity": (string | string[])[]; + "Added {0}": (string | string[])[]; + "Address has no available claim": string; + Against: string; + "Allow LP token migration": string; + "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; + "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; + Allowed: string; + Amount: string; + "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Approval pending <0/>": string; + Approve: string; + "Approve Token": string; + "Approve {0}": (string | string[])[]; + "Approve {0} first": (string | string[])[]; + Approved: string; + Approving: string; + "Approving {0}": (string | string[])[]; + Arbiscan: string; + "Arbitrum Bridge": string; + "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Are you sure?": string; + "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; + "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; + Auto: string; + "Auto Router API": string; + "Available to deposit: {0}": (string | string[])[]; + "Balance: {0}": (string | string[])[]; + "Best for exotic pairs.": string; + "Best for most pairs.": string; + "Best for stable pairs.": string; + "Best for very stable pairs.": string; + "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; + "Blocked address": string; + Bridge: string; + "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; + "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; + Canceled: string; + Change: string; + Charts: string; + "Check network status": string; + "Check out our v3 LP walkthrough and migration guides.": string; + Claim: string; + "Claim <0/> for {0}": (string | string[])[]; + "Claim UNI": string; + "Claim UNI Token": string; + "Claim UNI reward for {0}": (string | string[])[]; + "Claim fees": string; + "Claim your UNI tokens": string; + Claimed: string; + "Claimed UNI!": string; + "Claimed!": string; + Claiming: string; + "Claiming UNI": string; + "Claiming {0} UNI": (string | string[])[]; + "Clear All": string; + "Clear all": string; + Close: string; + Closed: string; + Collect: string; + "Collect as WETH": string; + "Collect fees": string; + "Collect {0}/{1} fees": (string | string[])[]; + Collected: string; + Collecting: string; + "Collecting fees": string; + "Collecting fees will withdraw currently available fees for you.": string; + Confirm: string; + "Confirm Supply": string; + "Confirm Swap": string; + "Confirm swap": string; + "Confirm this transaction in your wallet": string; + "Confirm transaction in wallet": string; + "Connect Wallet": string; + "Connect a wallet": string; + "Connect to a wallet to find pools": string; + "Connect to a wallet to view your V2 liquidity.": string; + "Connect to a wallet to view your liquidity.": string; + "Connect wallet to swap": string; + "Connected with {name}": (string | string[])[]; + Copied: string; + "Copy Address": string; + "Create Pool & Supply": string; + "Create Proposal": string; + "Create a pair": string; + "Create a pool": string; + "Create an issue on GitHub": string; + "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; + "Create pool.": string; + "Create {0}/{1} V3 pool": (string | string[])[]; + "Current price": string; + "Current {0} Price:": (string | string[])[]; + Custom: string; + "Dark Theme": string; + Defeated: string; + "Delegate Votes": string; + "Delegate voting power to {0}": (string | string[])[]; + "Delegated to:": string; + "Delegating votes": string; + Deposit: string; + "Deposit Amounts": string; + "Deposit UNI-V2 LP Tokens": string; + "Deposit liquidity": string; + "Deposit tokens to the {label} network.": (string | string[])[]; + "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; + "Deposited liquidity:": string; + "Deposited {0} UNI-V2": (string | string[])[]; + "Depositing Liquidity": string; + Description: string; + Detailed: string; + Details: string; + Disconnect: string; + Discord: string; + Dismiss: string; + Docs: string; + "Don\u2019t see one of your v2 positions? <0>Import it.": string; + "Earned UNI tokens represent voting shares in Uniswap governance.": string; + Edit: string; + "Efficiency Comparison": string; + "Enter a percent": string; + "Enter a recipient": string; + "Enter a valid slippage percentage": string; + "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; + "Enter an amount": string; + "Enter valid list location": string; + "Enter valid token address": string; + "Enter {0} amount": (string | string[])[]; + Error: string; + "Error connecting": string; + "Error connecting. Try refreshing the page.": string; + "Error details": string; + "Error importing list": string; + "Estimate may differ due to your wallet gas settings": string; + "Estimated network fee": string; + Etherscan: string; + Executed: string; + "Expanded results from inactive Token Lists": string; + "Expected Output": string; + "Expert Mode": string; + "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; + Expired: string; + "Explore Uniswap Analytics.": string; + "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; + "Fee Tier": string; + "Fee tier": string; + "Fetching best price...": string; + "Fetching best price\u2026": string; + For: string; + "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; + From: string; + "From (at most)": string; + "Full Range": string; + "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; + "Get support on Discord": string; + "Help Center": string; + Hide: string; + "Hide closed positions": string; + "High Price Impact": string; + "How this app uses APIs": string; + "I understand": string; + "If you purchase a token from this list, you may not be able to sell it back.": string; + Import: string; + "Import List": string; + "Import Pool": string; + "Import V2 Pool": string; + "Import at your own risk": string; + "In range": string; + "Increase Liquidity": string; + "Initial prices and pool share": string; + "Initializing...": string; + "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Install Metamask": string; + "Insufficient liquidity for this trade.": string; + "Insufficient {0}": (string | string[])[]; + "Insufficient {0} balance": (string | string[])[]; + "Interface Settings": string; + "Invalid pair": string; + "Invalid pair.": string; + "Invalid price input": string; + "Invalid range selected. The min price must be lower than the max price.": string; + "Invalid recipient": string; + Language: string; + Learn: string; + "Learn about providing liquidity": string; + "Learn more": string; + "Legal & Privacy": string; + "Light Theme": string; + Liquidity: string; + "Liquidity data not available.": string; + "Liquidity provider rewards": string; + "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; + Lists: string; + Loaded: string; + Loading: string; + MAX: string; + Manage: string; + "Manage Liquidity in Rewards Pool": string; + "Manage Token Lists": string; + "Manage this pool.": string; + Max: string; + "Max Price": string; + "Max price": string; + "Max slippage": string; + "Max:": string; + "Maximum sent": string; + Menu: string; + Migrate: string; + "Migrate Liquidity to V3": string; + "Migrate V2 Liquidity": string; + "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; + "Migrate {0}/{1} liquidity to V3": (string | string[])[]; + Migrating: string; + "Min Price": string; + "Min price": string; + "Min:": string; + "Minimum received": string; + "Missing dependencies": string; + "Mock Toggle": string; + More: string; + "Network Fee": string; + "Network Warning": string; + "Network fees exceed 50% of the swap amount!": string; + "New Position": string; + "No V2 Liquidity found.": string; + "No active pools": string; + "No data": string; + "No description.": string; + "No liquidity found.": string; + "No pool found.": string; + "No proposals found.": string; + "No results found.": string; + "Not created": string; + OFF: string; + ON: string; + "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; + Off: string; + On: string; + "Once you are happy with the rate click supply to review.": string; + "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; + "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; + "Optimism Gateway": string; + "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; + "Optimistic Etherscan": string; + "Out of range": string; + "Output is estimated.": string; + "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; + "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; + "Output will be sent to <0>{0}": (string | string[])[]; + Owner: string; + "Participating pools": string; + Pending: string; + "Please confirm you would like to remove this list by typing REMOVE": string; + "Please connect to Layer 1 Ethereum": string; + "Please connect to a supported network in the dropdown menu or in your wallet.": string; + "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; + "Polygon Bridge": string; + Polygonscan: string; + Pool: string; + "Pool Found!": string; + "Pool Rate": string; + "Pool rate": string; + "Pool tokens in rewards pool:": string; + "Pooled {0}:": (string | string[])[]; + "Pools Overview": string; + Preview: string; + Price: string; + "Price Difference:": string; + "Price Impact": string; + "Price Impact Too High": string; + "Price Updated": string; + "Price impact": string; + "Price range": string; + "Price updated": string; + "Price:": string; + "Prices and pool share": string; + Proposal: string; + "Proposal Submitted": string; + "Proposal Title": string; + Proposals: string; + "Proposals submitted by community members will appear here.": string; + "Proposed Action": string; + Proposer: string; + "Protocol Disclaimer": string; + Queued: string; + Rates: string; + "Read more about UNI": string; + "Read more about Uniswap governance": string; + "Read more about providing liquidity": string; + "Read more about unsupported assets": string; + "Recent Transactions": string; + "Recent transactions": string; + Recipient: string; + "Reload the page": string; + Remove: string; + "Remove <0/> and <1/>": string; + "Remove Amount": string; + "Remove Delegate": string; + "Remove Liquidity": string; + "Remove list": string; + "Removing {0} {1} and {2} {3}": (string | string[])[]; + "Removing {0} {1} and{2} {3}": (string | string[])[]; + "Request Features": string; + Reset: string; + Return: string; + "Review swap": string; + "Search by token name or address": string; + "Search name or paste address": string; + "Select Pair": string; + "Select a network": string; + "Select a token": string; + "Select a token to find your v2 liquidity.": string; + "Select an action": string; + "Selected Range": string; + Self: string; + "Self Delegate": string; + "Set Price Range": string; + "Set Starting Price": string; + Settings: string; + "Share of Pool": string; + "Share of Pool:": string; + "Show Portis": string; + "Show closed positions": string; + Simple: string; + "Slippage tolerance": string; + "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; + "Something went wrong": string; + "Something went wrong.": string; + "Step 1. Get UNI-V2 Liquidity tokens": string; + "Submit new proposal": string; + "Submitting Proposal": string; + "Submitting Vote": string; + Succeeded: string; + Success: string; + Supply: string; + "Supplying {0} {1} and {2} {3}": (string | string[])[]; + Swap: string; + "Swap <0/> for exactly <1/>": string; + "Swap Anyway": string; + "Swap details": string; + "Swap exactly <0/> for <1/>": string; + "Swap failed: {0}": (string | string[])[]; + "Swap summary": string; + "Swapping {0} {1} for {2} {3}": (string | string[])[]; + "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; + "Tell us what you think \u2197": string; + "Thanks for being part of the Uniswap community <0/>": string; + "The % you will earn in fees.": string; + "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; + "The app fetches blockchain data from The Graph\u2019s hosted service.": string; + "The app fetches on-chain data and constructs contract calls with an Infura API.": string; + "The app fetches the optimal trade route from a Uniswap Labs server.": string; + "The app logs anonymized usage statistics in order to improve over time.": string; + "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; + "The cost of sending this transaction is more than half of the value of the input amount.": string; + "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; + "The estimated difference between the USD values of input and output amounts.": string; + "The input token cannot be transferred. There may be an issue with the input token.": string; + "The market price is outside your specified price range. Single-asset deposit only.": string; + "The most recent block number on this network. Prices update on every block.": string; + "The output token cannot be transferred. There may be an issue with the output token.": string; + "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; + "The price of this pool is within your selected range. Your position is currently earning fees.": string; + "The ratio of tokens you add will set the price of this pool.": string; + "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; + "There is no liquidity data.": string; + "This app uses the following third-party APIs:": string; + "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; + "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; + "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; + "This token is not supported in the Uniswap Labs app": string; + "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; + "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; + "Tip: Custom tokens are stored locally in your browser": string; + To: string; + "To (at least)": string; + "Token not supported": string; + Tokens: string; + "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; + "Top pools": string; + "Total deposited": string; + "Total deposits": string; + "Trade Route": string; + Trading: string; + "Transaction Settings": string; + "Transaction Submitted": string; + "Transaction completed in": string; + "Transaction deadline": string; + "Transaction pending": string; + "Transaction rejected.": string; + "Transaction submitted": string; + "Transfer Token": string; + "Try Again": string; + "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; + "Turn On Expert Mode": string; + "UNI has arrived": string; + "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; + "UNI {0}/{1} Burned": (string | string[])[]; + "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; + "UNI-V2 {0}-{1}": (string | string[])[]; + "Unclaimed UNI": string; + "Unclaimed fees": string; + Undetermined: string; + "Unexpected error. Could not estimate gas for the swap.": string; + "Unexpected issue with estimating the gas. Please try again.": string; + "Uniswap Governance": string; + "Uniswap Labs' Terms of Service": string; + "Uniswap available in: <0>{0}": (string | string[])[]; + "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; + "Uniswap liquidity mining": string; + "Uniswap migration contract\u2197": string; + "Unknown Source": string; + "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; + "Unlock Votes": string; + "Unlock Voting": string; + "Unlocking Votes": string; + "Unsupported Asset": string; + "Unsupported Assets": string; + "Unsupported network\u2013switch to another to trade.": string; + Untitled: string; + Unwrap: string; + "Unwrap <0/> to {0}": (string | string[])[]; + "Update Delegation": string; + "Update list": string; + "Use the Uniswap Labs API to get faster quotes.": string; + User: string; + "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; + "V2 liquidity": string; + "V3 {0} Price:": (string | string[])[]; + "View accrued fees and analytics<0>\u2197": string; + "View list": string; + "View on Etherscan": string; + "View on Explorer": string; + "View transaction on Explorer": string; + Vote: string; + "Vote Against": string; + "Vote For": string; + "Vote against proposal {proposalId}": (string | string[])[]; + "Vote against proposal {proposalKey}": (string | string[])[]; + "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote for proposal {proposalId}": (string | string[])[]; + "Vote for proposal {proposalKey}": (string | string[])[]; + "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Vote to abstain on proposal {proposalId}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey}": (string | string[])[]; + "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; + "Voting ended {0}": (string | string[])[]; + "Voting ends approximately {0}": (string | string[])[]; + "Voting starts approximately {0}": (string | string[])[]; + "Waiting For Confirmation": string; + "Wallet Address or ENS name": string; + "Weekly Rewards": string; + "Welcome to team Unicorn :)": string; + "When you claim without withdrawing your liquidity remains in the mining pool.": string; + "When you withdraw, the contract will automagically claim UNI on your behalf!": string; + "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; + Withdraw: string; + "Withdraw & Claim": string; + "Withdraw deposited liquidity": string; + "Withdrawing {0} UNI-V2": (string | string[])[]; + "Withdrew UNI-V2!": string; + Wrap: string; + "Wrap <0/> to {0}": (string | string[])[]; + "Wrong Network": string; + "You already have an active or pending proposal": string; + "You are creating a pool": string; + "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; + "You are the first liquidity provider.": string; + "You can either vote on each proposal yourself or delegate your votes to a third party.": string; + "You can now trade {0}": (string | string[])[]; + "You don't have enough votes to submit a proposal": string; + "You don\u2019t have liquidity in this pool yet.": string; + "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; + "You may have lost your network connection.": string; + "You might consider waiting until the network fees go down to complete this transaction.": string; + "You must connect an account.": string; + "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; + "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; + "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; + "You will also collect fees earned from this position.": string; + "You will receive": string; + "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; + "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; + "Your V2 liquidity": string; + "Your active V3 liquidity positions will appear here.": string; + "Your liquidity deposits": string; + "Your pool share:": string; + "Your position": string; + "Your position has 0 liquidity, and is not earning fees.": string; + "Your position will appear here.": string; + "Your position will be 100% composed of {0} at this price": (string | string[])[]; + "Your position will be 100% {0} at this price.": (string | string[])[]; + "Your position will not earn fees or be used in trades until the market price moves into your range.": string; + "Your positions": string; + "Your rate": string; + "Your total pool tokens:": string; + "Your transaction cost will be much higher as it includes the gas to create the pool.": string; + "Your transaction may be frontrun": string; + "Your transaction may fail": string; + "Your transaction will revert if it has been pending for longer than this period of time.": string; + "Your transaction will revert if it is pending for more than this period of time.": string; + "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; + "Your transactions will appear here...": string; + "Your unclaimed UNI": string; + "after slippage": string; + confirm: string; + "for {0}": (string | string[])[]; + gwei: string; + "has socks emoji": string; + "here.": string; + "https:// or ipfs:// or ENS name": string; + minutes: string; + "via {0}": (string | string[])[]; + "via {0} token list": (string | string[])[]; + "{0, plural, one {Import token} other {Import tokens}}": (string | { + one: string; + other: string; + })[][]; + "{0}": string[][]; + "{0} %": (string | string[])[]; + "{0} <0/> per <1/>": (string | string[])[]; + "{0} Custom Tokens": (string | string[])[]; + "{0} Deposited": (string | string[])[]; + "{0} ETH": (string | string[])[]; + "{0} Fees Earned:": (string | string[])[]; + "{0} Pending": (string | string[])[]; + "{0} UNI": (string | string[])[]; + "{0} UNI / week": (string | string[])[]; + "{0} UNI-V2": (string | string[])[]; + "{0} UNI-V2 LP tokens available": (string | string[])[]; + "{0} Votes": (string | string[])[]; + "{0} per {1}": (string | string[])[]; + "{0} tokens": (string | string[])[]; + "{0} {1} Price:": (string | string[])[]; + "{0} {nativeCurrencySymbol}": (string | string[])[]; + "{0} \u2022 Added by user": (string | string[])[]; + "{0}%": (string | string[])[]; + "{0}% fee tier": (string | string[])[]; + "{0}% pool": (string | string[])[]; + "{0}% select": (string | string[])[]; + "{0}-{1} Liquidity Mining": (string | string[])[]; + "{0}/{1} LP NFT": (string | string[])[]; + "{0}/{1} LP Tokens": (string | string[])[]; + "{SOCKS_AMOUNT} UNI": (string | string[])[]; + "{USER_AMOUNT} UNI": (string | string[])[]; + "{activeTokensOnThisChain} tokens": (string | string[])[]; + "{integrator} fee": (string | string[])[]; + "{label} token bridge": (string | string[])[]; + "{min}m {sec}s": (string | string[])[]; + "{percentForSlider}%": (string | string[])[]; + "{sec}s": (string | string[])[]; + "{tokenB} per {tokenA}": (string | string[])[]; + "\u2190 Back to Pools Overview": string; +}; diff --git a/dist2/types/pages/AddLiquidity/Review.d.ts b/dist2/types/pages/AddLiquidity/Review.d.ts new file mode 100644 index 00000000000..6488da1035e --- /dev/null +++ b/dist2/types/pages/AddLiquidity/Review.d.ts @@ -0,0 +1,17 @@ +/// +import { Currency, CurrencyAmount, Price } from '@uniswap/sdk-core'; +import { Position } from '@uniswap/v3-sdk'; +import { Bound, Field } from '../../state/mint/v3/actions'; +export declare function Review({ position, outOfRange, ticksAtLimit, }: { + position?: Position; + existingPosition?: Position; + parsedAmounts: { + [field in Field]?: CurrencyAmount; + }; + priceLower?: Price; + priceUpper?: Price; + outOfRange: boolean; + ticksAtLimit: { + [bound in Bound]?: boolean | undefined; + }; +}): JSX.Element; diff --git a/dist2/types/pages/AddLiquidity/index.d.ts b/dist2/types/pages/AddLiquidity/index.d.ts new file mode 100644 index 00000000000..6e71b58d105 --- /dev/null +++ b/dist2/types/pages/AddLiquidity/index.d.ts @@ -0,0 +1,8 @@ +/// +import { RouteComponentProps } from 'react-router-dom'; +export default function AddLiquidity({ match: { params: { currencyIdA, currencyIdB, feeAmount: feeAmountFromUrl, tokenId }, }, history, }: RouteComponentProps<{ + currencyIdA?: string; + currencyIdB?: string; + feeAmount?: string; + tokenId?: string; +}>): JSX.Element; diff --git a/dist2/types/pages/AddLiquidity/redirects.d.ts b/dist2/types/pages/AddLiquidity/redirects.d.ts new file mode 100644 index 00000000000..1f09b02e7e3 --- /dev/null +++ b/dist2/types/pages/AddLiquidity/redirects.d.ts @@ -0,0 +1,7 @@ +/// +import { RouteComponentProps } from 'react-router-dom'; +export declare function RedirectDuplicateTokenIds(props: RouteComponentProps<{ + currencyIdA: string; + currencyIdB: string; + feeAmount?: string; +}>): JSX.Element; diff --git a/dist2/types/pages/AddLiquidity/styled.d.ts b/dist2/types/pages/AddLiquidity/styled.d.ts new file mode 100644 index 00000000000..635dfbc4621 --- /dev/null +++ b/dist2/types/pages/AddLiquidity/styled.d.ts @@ -0,0 +1,38 @@ +/// +import CurrencyInputPanel from 'components/CurrencyInputPanel'; +export declare const PageWrapper: import("styled-components").StyledComponent<"main", import("styled-components").DefaultTheme, { + margin?: string | undefined; + maxWidth?: string | undefined; +} & { + wide: boolean; +}, never>; +export declare const Wrapper: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; +export declare const ScrollablePage: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; +export declare const DynamicSection: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, { + gap?: string | undefined; + justify?: "end" | "space-between" | "stretch" | "center" | "flex-end" | "flex-start" | "start" | undefined; +} & { + disabled?: boolean | undefined; +}, never>; +export declare const CurrencyDropdown: import("styled-components").StyledComponent; +export declare const StyledInput: import("styled-components").StyledComponent void; + error?: boolean | undefined; + fontSize?: string | undefined; + align?: "left" | "right" | undefined; + prependSymbol?: string | undefined; +} & Omit, "ref" | "onChange" | "as">>, import("styled-components").DefaultTheme, {}, never>; +export declare const ResponsiveTwoColumns: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, { + wide: boolean; +}, never>; +export declare const RightContainer: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, { + gap?: string | undefined; + justify?: "end" | "space-between" | "stretch" | "center" | "flex-end" | "flex-start" | "start" | undefined; +}, never>; +export declare const StackedContainer: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; +export declare const StackedItem: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, { + zIndex?: number | undefined; +}, never>; +export declare const MediumOnly: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; +export declare const HideMedium: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; diff --git a/dist2/types/pages/AddLiquidityV2/ConfirmAddModalBottom.d.ts b/dist2/types/pages/AddLiquidityV2/ConfirmAddModalBottom.d.ts new file mode 100644 index 00000000000..f84d3469262 --- /dev/null +++ b/dist2/types/pages/AddLiquidityV2/ConfirmAddModalBottom.d.ts @@ -0,0 +1,15 @@ +/// +import { Currency, CurrencyAmount, Fraction, Percent } from '@uniswap/sdk-core'; +import { Field } from '../../state/mint/actions'; +export declare function ConfirmAddModalBottom({ noLiquidity, price, currencies, parsedAmounts, poolTokenPercentage, onAdd, }: { + noLiquidity?: boolean; + price?: Fraction; + currencies: { + [field in Field]?: Currency; + }; + parsedAmounts: { + [field in Field]?: CurrencyAmount; + }; + poolTokenPercentage?: Percent; + onAdd: () => void; +}): JSX.Element; diff --git a/dist2/types/pages/AddLiquidityV2/PoolPriceBar.d.ts b/dist2/types/pages/AddLiquidityV2/PoolPriceBar.d.ts new file mode 100644 index 00000000000..bcd5584bfae --- /dev/null +++ b/dist2/types/pages/AddLiquidityV2/PoolPriceBar.d.ts @@ -0,0 +1,11 @@ +/// +import { Currency, Percent, Price } from '@uniswap/sdk-core'; +import { Field } from '../../state/mint/actions'; +export declare function PoolPriceBar({ currencies, noLiquidity, poolTokenPercentage, price, }: { + currencies: { + [field in Field]?: Currency; + }; + noLiquidity?: boolean; + poolTokenPercentage?: Percent; + price?: Price; +}): JSX.Element; diff --git a/dist2/types/pages/AddLiquidityV2/index.d.ts b/dist2/types/pages/AddLiquidityV2/index.d.ts new file mode 100644 index 00000000000..118d921530e --- /dev/null +++ b/dist2/types/pages/AddLiquidityV2/index.d.ts @@ -0,0 +1,6 @@ +/// +import { RouteComponentProps } from 'react-router-dom'; +export default function AddLiquidity({ match: { params: { currencyIdA, currencyIdB }, }, history, }: RouteComponentProps<{ + currencyIdA?: string; + currencyIdB?: string; +}>): JSX.Element; diff --git a/dist2/types/pages/AddLiquidityV2/redirects.d.ts b/dist2/types/pages/AddLiquidityV2/redirects.d.ts new file mode 100644 index 00000000000..e701bf0af1e --- /dev/null +++ b/dist2/types/pages/AddLiquidityV2/redirects.d.ts @@ -0,0 +1,6 @@ +/// +import { RouteComponentProps } from 'react-router-dom'; +export declare function RedirectDuplicateTokenIdsV2(props: RouteComponentProps<{ + currencyIdA: string; + currencyIdB: string; +}>): JSX.Element; diff --git a/dist2/types/pages/App.d.ts b/dist2/types/pages/App.d.ts new file mode 100644 index 00000000000..699671919a5 --- /dev/null +++ b/dist2/types/pages/App.d.ts @@ -0,0 +1,2 @@ +/// +export default function App(): JSX.Element; diff --git a/dist2/types/pages/AppBody.d.ts b/dist2/types/pages/AppBody.d.ts new file mode 100644 index 00000000000..43d83fded0a --- /dev/null +++ b/dist2/types/pages/AppBody.d.ts @@ -0,0 +1,11 @@ +import React from 'react'; +export declare const BodyWrapper: import("styled-components").StyledComponent<"main", import("styled-components").DefaultTheme, { + margin?: string | undefined; + maxWidth?: string | undefined; +}, never>; +/** + * The styled container element that wraps the content of most pages and the tabs. + */ +export default function AppBody({ children, ...rest }: { + children: React.ReactNode; +}): JSX.Element; diff --git a/dist2/types/pages/CreateProposal/ProposalActionDetail.d.ts b/dist2/types/pages/CreateProposal/ProposalActionDetail.d.ts new file mode 100644 index 00000000000..3a05a098f40 --- /dev/null +++ b/dist2/types/pages/CreateProposal/ProposalActionDetail.d.ts @@ -0,0 +1,13 @@ +/// +import { Currency } from '@uniswap/sdk-core'; +import { ProposalAction } from './ProposalActionSelector'; +export declare const ProposalActionDetail: ({ className, proposalAction, currency, amount, toAddress, onCurrencySelect, onAmountInput, onToAddressInput, }: { + className?: string | undefined; + proposalAction: ProposalAction; + currency: Currency | undefined; + amount: string; + toAddress: string; + onCurrencySelect: (currency: Currency) => void; + onAmountInput: (amount: string) => void; + onToAddressInput: (address: string) => void; +}) => JSX.Element; diff --git a/dist2/types/pages/CreateProposal/ProposalActionSelector.d.ts b/dist2/types/pages/CreateProposal/ProposalActionSelector.d.ts new file mode 100644 index 00000000000..2c96159fa7f --- /dev/null +++ b/dist2/types/pages/CreateProposal/ProposalActionSelector.d.ts @@ -0,0 +1,17 @@ +/// +export declare enum ProposalAction { + TRANSFER_TOKEN = "Transfer Token", + APPROVE_TOKEN = "Approve Token" +} +interface ProposalActionSelectorModalProps { + isOpen: boolean; + onDismiss: () => void; + onProposalActionSelect: (proposalAction: ProposalAction) => void; +} +export declare const ProposalActionSelector: ({ className, onClick, proposalAction, }: { + className?: string | undefined; + onClick: () => void; + proposalAction: ProposalAction; +}) => JSX.Element; +export declare function ProposalActionSelectorModal({ isOpen, onDismiss, onProposalActionSelect, }: ProposalActionSelectorModalProps): JSX.Element; +export {}; diff --git a/dist2/types/pages/CreateProposal/ProposalEditor.d.ts b/dist2/types/pages/CreateProposal/ProposalEditor.d.ts new file mode 100644 index 00000000000..0f7cdf7ed82 --- /dev/null +++ b/dist2/types/pages/CreateProposal/ProposalEditor.d.ts @@ -0,0 +1,8 @@ +/// +export declare const ProposalEditor: ({ className, title, body, onTitleInput, onBodyInput, }: { + className?: string | undefined; + title: string; + body: string; + onTitleInput: (title: string) => void; + onBodyInput: (body: string) => void; +}) => JSX.Element; diff --git a/dist2/types/pages/CreateProposal/ProposalSubmissionModal.d.ts b/dist2/types/pages/CreateProposal/ProposalSubmissionModal.d.ts new file mode 100644 index 00000000000..dc03ce2fe40 --- /dev/null +++ b/dist2/types/pages/CreateProposal/ProposalSubmissionModal.d.ts @@ -0,0 +1,6 @@ +/// +export declare const ProposalSubmissionModal: ({ isOpen, hash, onDismiss, }: { + isOpen: boolean; + hash: string | undefined; + onDismiss: () => void; +}) => JSX.Element; diff --git a/dist2/types/pages/CreateProposal/index.d.ts b/dist2/types/pages/CreateProposal/index.d.ts new file mode 100644 index 00000000000..a05bade2c50 --- /dev/null +++ b/dist2/types/pages/CreateProposal/index.d.ts @@ -0,0 +1,2 @@ +/// +export default function CreateProposal(): JSX.Element; diff --git a/dist2/types/pages/Earn/Countdown.d.ts b/dist2/types/pages/Earn/Countdown.d.ts new file mode 100644 index 00000000000..ffa214d3271 --- /dev/null +++ b/dist2/types/pages/Earn/Countdown.d.ts @@ -0,0 +1,4 @@ +/// +export declare function Countdown({ exactEnd }: { + exactEnd?: Date; +}): JSX.Element; diff --git a/dist2/types/pages/Earn/Manage.d.ts b/dist2/types/pages/Earn/Manage.d.ts new file mode 100644 index 00000000000..a96156de94e --- /dev/null +++ b/dist2/types/pages/Earn/Manage.d.ts @@ -0,0 +1,6 @@ +/// +import { RouteComponentProps } from 'react-router-dom'; +export default function Manage({ match: { params: { currencyIdA, currencyIdB }, }, }: RouteComponentProps<{ + currencyIdA: string; + currencyIdB: string; +}>): JSX.Element; diff --git a/dist2/types/pages/Earn/index.d.ts b/dist2/types/pages/Earn/index.d.ts new file mode 100644 index 00000000000..dfae0370851 --- /dev/null +++ b/dist2/types/pages/Earn/index.d.ts @@ -0,0 +1,2 @@ +/// +export default function Earn(): JSX.Element; diff --git a/dist2/types/pages/MigrateV2/MigrateV2Pair.d.ts b/dist2/types/pages/MigrateV2/MigrateV2Pair.d.ts new file mode 100644 index 00000000000..d12eb7c483a --- /dev/null +++ b/dist2/types/pages/MigrateV2/MigrateV2Pair.d.ts @@ -0,0 +1,5 @@ +/// +import { RouteComponentProps } from 'react-router'; +export default function MigrateV2Pair({ match: { params: { address }, }, }: RouteComponentProps<{ + address: string; +}>): JSX.Element; diff --git a/dist2/types/pages/MigrateV2/index.d.ts b/dist2/types/pages/MigrateV2/index.d.ts new file mode 100644 index 00000000000..94633adbef3 --- /dev/null +++ b/dist2/types/pages/MigrateV2/index.d.ts @@ -0,0 +1,2 @@ +/// +export default function MigrateV2(): JSX.Element; diff --git a/dist2/types/pages/Pool/CTACards.d.ts b/dist2/types/pages/Pool/CTACards.d.ts new file mode 100644 index 00000000000..a1b81ceebdc --- /dev/null +++ b/dist2/types/pages/Pool/CTACards.d.ts @@ -0,0 +1,2 @@ +/// +export default function CTACards(): JSX.Element; diff --git a/dist2/types/pages/Pool/PositionPage.d.ts b/dist2/types/pages/Pool/PositionPage.d.ts new file mode 100644 index 00000000000..84c7b09ba25 --- /dev/null +++ b/dist2/types/pages/Pool/PositionPage.d.ts @@ -0,0 +1,5 @@ +/// +import { RouteComponentProps } from 'react-router-dom'; +export declare function PositionPage({ match: { params: { tokenId: tokenIdFromUrl }, }, }: RouteComponentProps<{ + tokenId?: string; +}>): JSX.Element; diff --git a/dist2/types/pages/Pool/index.d.ts b/dist2/types/pages/Pool/index.d.ts new file mode 100644 index 00000000000..696ae071c7f --- /dev/null +++ b/dist2/types/pages/Pool/index.d.ts @@ -0,0 +1,2 @@ +/// +export default function Pool(): JSX.Element; diff --git a/dist2/types/pages/Pool/styleds.d.ts b/dist2/types/pages/Pool/styleds.d.ts new file mode 100644 index 00000000000..925820595f5 --- /dev/null +++ b/dist2/types/pages/Pool/styleds.d.ts @@ -0,0 +1,8 @@ +/// +export declare const Wrapper: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; +export declare const ClickableText: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, {}, never>; +export declare const MaxButton: import("styled-components").StyledComponent<"button", import("styled-components").DefaultTheme, { + width: string; +}, never>; +export declare const Dots: import("styled-components").StyledComponent<"span", import("styled-components").DefaultTheme, {}, never>; +export declare const LoadingRows: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; diff --git a/dist2/types/pages/Pool/v2.d.ts b/dist2/types/pages/Pool/v2.d.ts new file mode 100644 index 00000000000..696ae071c7f --- /dev/null +++ b/dist2/types/pages/Pool/v2.d.ts @@ -0,0 +1,2 @@ +/// +export default function Pool(): JSX.Element; diff --git a/dist2/types/pages/PoolFinder/index.d.ts b/dist2/types/pages/PoolFinder/index.d.ts new file mode 100644 index 00000000000..cd96abfa6ef --- /dev/null +++ b/dist2/types/pages/PoolFinder/index.d.ts @@ -0,0 +1,2 @@ +/// +export default function PoolFinder(): JSX.Element; diff --git a/dist2/types/pages/RemoveLiquidity/V3.d.ts b/dist2/types/pages/RemoveLiquidity/V3.d.ts new file mode 100644 index 00000000000..c24f7e4f224 --- /dev/null +++ b/dist2/types/pages/RemoveLiquidity/V3.d.ts @@ -0,0 +1,5 @@ +/// +import { RouteComponentProps } from 'react-router-dom'; +export default function RemoveLiquidityV3({ location, match: { params: { tokenId }, }, }: RouteComponentProps<{ + tokenId: string; +}>): JSX.Element; diff --git a/dist2/types/pages/RemoveLiquidity/index.d.ts b/dist2/types/pages/RemoveLiquidity/index.d.ts new file mode 100644 index 00000000000..398605c54cb --- /dev/null +++ b/dist2/types/pages/RemoveLiquidity/index.d.ts @@ -0,0 +1,6 @@ +/// +import { RouteComponentProps } from 'react-router'; +export default function RemoveLiquidity({ history, match: { params: { currencyIdA, currencyIdB }, }, }: RouteComponentProps<{ + currencyIdA: string; + currencyIdB: string; +}>): JSX.Element; diff --git a/dist2/types/pages/RemoveLiquidity/styled.d.ts b/dist2/types/pages/RemoveLiquidity/styled.d.ts new file mode 100644 index 00000000000..09e497ed9dc --- /dev/null +++ b/dist2/types/pages/RemoveLiquidity/styled.d.ts @@ -0,0 +1,6 @@ +/// +export declare const Wrapper: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; +export declare const SmallMaxButton: import("styled-components").StyledComponent<"button", import("styled-components").DefaultTheme, { + width: string; +}, never>; +export declare const ResponsiveHeaderText: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, {}, never>; diff --git a/dist2/types/pages/Swap/index.d.ts b/dist2/types/pages/Swap/index.d.ts new file mode 100644 index 00000000000..b74fc614d02 --- /dev/null +++ b/dist2/types/pages/Swap/index.d.ts @@ -0,0 +1,3 @@ +/// +import { RouteComponentProps } from 'react-router-dom'; +export default function Swap({ history }: RouteComponentProps): JSX.Element; diff --git a/dist2/types/pages/Swap/redirects.d.ts b/dist2/types/pages/Swap/redirects.d.ts new file mode 100644 index 00000000000..27027f027ea --- /dev/null +++ b/dist2/types/pages/Swap/redirects.d.ts @@ -0,0 +1,7 @@ +/// +import { RouteComponentProps } from 'react-router-dom'; +export declare function RedirectPathToSwapOnly({ location }: RouteComponentProps): JSX.Element; +export declare function RedirectToSwap(props: RouteComponentProps<{ + outputCurrency: string; +}>): JSX.Element; +export declare function OpenClaimAddressModalAndRedirectToSwap(props: RouteComponentProps): JSX.Element; diff --git a/dist2/types/pages/Vote/Landing.d.ts b/dist2/types/pages/Vote/Landing.d.ts new file mode 100644 index 00000000000..ae54cd6a552 --- /dev/null +++ b/dist2/types/pages/Vote/Landing.d.ts @@ -0,0 +1,2 @@ +/// +export default function Landing(): JSX.Element; diff --git a/dist2/types/pages/Vote/VotePage.d.ts b/dist2/types/pages/Vote/VotePage.d.ts new file mode 100644 index 00000000000..14364ad28a7 --- /dev/null +++ b/dist2/types/pages/Vote/VotePage.d.ts @@ -0,0 +1,6 @@ +/// +import { RouteComponentProps } from 'react-router-dom'; +export default function VotePage({ match: { params: { governorIndex, id }, }, }: RouteComponentProps<{ + governorIndex: string; + id: string; +}>): JSX.Element; diff --git a/dist2/types/pages/Vote/index.d.ts b/dist2/types/pages/Vote/index.d.ts new file mode 100644 index 00000000000..e0b6ed395d9 --- /dev/null +++ b/dist2/types/pages/Vote/index.d.ts @@ -0,0 +1,2 @@ +/// +export default function Vote(): JSX.Element; diff --git a/dist2/types/pages/Vote/styled.d.ts b/dist2/types/pages/Vote/styled.d.ts new file mode 100644 index 00000000000..cda7f08a434 --- /dev/null +++ b/dist2/types/pages/Vote/styled.d.ts @@ -0,0 +1,5 @@ +/// +import { ProposalState } from '../../state/governance/hooks'; +export declare function ProposalStatus({ status }: { + status: ProposalState; +}): JSX.Element; diff --git a/dist2/types/pages/styled.d.ts b/dist2/types/pages/styled.d.ts new file mode 100644 index 00000000000..f78fe33607b --- /dev/null +++ b/dist2/types/pages/styled.d.ts @@ -0,0 +1 @@ +export declare const IframeBodyWrapper: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; diff --git a/dist2/types/polyfills.d.ts b/dist2/types/polyfills.d.ts new file mode 100644 index 00000000000..fcc8d56270b --- /dev/null +++ b/dist2/types/polyfills.d.ts @@ -0,0 +1 @@ +import 'polyfill-object.fromentries'; diff --git a/dist2/types/service-worker.d.ts b/dist2/types/service-worker.d.ts new file mode 100644 index 00000000000..67dd33d605f --- /dev/null +++ b/dist2/types/service-worker.d.ts @@ -0,0 +1,2 @@ +/// +export {}; diff --git a/dist2/types/serviceWorkerRegistration.d.ts b/dist2/types/serviceWorkerRegistration.d.ts new file mode 100644 index 00000000000..c6724c325ff --- /dev/null +++ b/dist2/types/serviceWorkerRegistration.d.ts @@ -0,0 +1,7 @@ +declare type Config = { + onSuccess?: (registration: ServiceWorkerRegistration) => void; + onUpdate?: (registration: ServiceWorkerRegistration) => void; +}; +export declare function register(config?: Config): void; +export declare function unregister(): void; +export {}; diff --git a/dist2/types/setupTests.d.ts b/dist2/types/setupTests.d.ts new file mode 100644 index 00000000000..7b0828bfa80 --- /dev/null +++ b/dist2/types/setupTests.d.ts @@ -0,0 +1 @@ +import '@testing-library/jest-dom'; diff --git a/dist2/types/snowflake.d.ts b/dist2/types/snowflake.d.ts new file mode 100644 index 00000000000..2f8196a1641 --- /dev/null +++ b/dist2/types/snowflake.d.ts @@ -0,0 +1 @@ +export { default as Swap } from './pages/Swap'; diff --git a/dist2/types/state/application/hooks.d.ts b/dist2/types/state/application/hooks.d.ts new file mode 100644 index 00000000000..236de2a5041 --- /dev/null +++ b/dist2/types/state/application/hooks.d.ts @@ -0,0 +1,15 @@ +import { AppState } from '../index'; +import { ApplicationModal, PopupContent } from './reducer'; +export declare function useModalOpen(modal: ApplicationModal): boolean; +export declare function useToggleModal(modal: ApplicationModal): () => void; +export declare function useWalletModalToggle(): () => void; +export declare function useToggleSettingsMenu(): () => void; +export declare function useShowClaimPopup(): boolean; +export declare function useToggleShowClaimPopup(): () => void; +export declare function useToggleSelfClaimModal(): () => void; +export declare function useToggleDelegateModal(): () => void; +export declare function useToggleVoteModal(): () => void; +export declare function useTogglePrivacyPolicy(): () => void; +export declare function useAddPopup(): (content: PopupContent, key?: string, removeAfterMs?: number) => void; +export declare function useRemovePopup(): (key: string) => void; +export declare function useActivePopups(): AppState['application']['popupList']; diff --git a/dist2/types/state/application/reducer.d.ts b/dist2/types/state/application/reducer.d.ts new file mode 100644 index 00000000000..81e95bd7330 --- /dev/null +++ b/dist2/types/state/application/reducer.d.ts @@ -0,0 +1,35 @@ +import { SupportedChainId } from '../../constants/chains'; +export declare type PopupContent = { + txn: { + hash: string; + }; +} | { + failedSwitchNetwork: SupportedChainId; +}; +export declare enum ApplicationModal { + WALLET = 0, + SETTINGS = 1, + SELF_CLAIM = 2, + ADDRESS_CLAIM = 3, + CLAIM_POPUP = 4, + MENU = 5, + DELEGATE = 6, + VOTE = 7, + POOL_OVERVIEW_OPTIONS = 8, + NETWORK_SELECTOR = 9, + PRIVACY_POLICY = 10 +} +declare type PopupList = Array<{ + key: string; + show: boolean; + content: PopupContent; + removeAfterMs: number | null; +}>; +export interface ApplicationState { + readonly chainId: number | null; + readonly openModal: ApplicationModal | null; + readonly popupList: PopupList; +} +export declare const updateChainId: import("@reduxjs/toolkit").ActionCreatorWithPayload, setOpenModal: import("@reduxjs/toolkit").ActionCreatorWithPayload, addPopup: import("@reduxjs/toolkit").ActionCreatorWithPayload, removePopup: import("@reduxjs/toolkit").ActionCreatorWithPayload; +declare const _default: import("redux").Reducer; +export default _default; diff --git a/dist2/types/state/application/updater.d.ts b/dist2/types/state/application/updater.d.ts new file mode 100644 index 00000000000..b91977cb6ee --- /dev/null +++ b/dist2/types/state/application/updater.d.ts @@ -0,0 +1 @@ +export default function Updater(): null; diff --git a/dist2/types/state/burn/actions.d.ts b/dist2/types/state/burn/actions.d.ts new file mode 100644 index 00000000000..96617c5bdf2 --- /dev/null +++ b/dist2/types/state/burn/actions.d.ts @@ -0,0 +1,10 @@ +export declare enum Field { + LIQUIDITY_PERCENT = "LIQUIDITY_PERCENT", + LIQUIDITY = "LIQUIDITY", + CURRENCY_A = "CURRENCY_A", + CURRENCY_B = "CURRENCY_B" +} +export declare const typeInput: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ + field: Field; + typedValue: string; +}, string>; diff --git a/dist2/types/state/burn/hooks.d.ts b/dist2/types/state/burn/hooks.d.ts new file mode 100644 index 00000000000..e650beb8682 --- /dev/null +++ b/dist2/types/state/burn/hooks.d.ts @@ -0,0 +1,19 @@ +import { Currency, CurrencyAmount, Percent, Token } from '@uniswap/sdk-core'; +import { Pair } from '@uniswap/v2-sdk'; +import { ReactNode } from 'react'; +import { AppState } from '../index'; +import { Field } from './actions'; +export declare function useBurnState(): AppState['burn']; +export declare function useDerivedBurnInfo(currencyA: Currency | undefined, currencyB: Currency | undefined): { + pair?: Pair | null; + parsedAmounts: { + [Field.LIQUIDITY_PERCENT]: Percent; + [Field.LIQUIDITY]?: CurrencyAmount; + [Field.CURRENCY_A]?: CurrencyAmount; + [Field.CURRENCY_B]?: CurrencyAmount; + }; + error?: ReactNode; +}; +export declare function useBurnActionHandlers(): { + onUserInput: (field: Field, typedValue: string) => void; +}; diff --git a/dist2/types/state/burn/reducer.d.ts b/dist2/types/state/burn/reducer.d.ts new file mode 100644 index 00000000000..d0746d7f1eb --- /dev/null +++ b/dist2/types/state/burn/reducer.d.ts @@ -0,0 +1,7 @@ +import { Field } from './actions'; +interface BurnState { + readonly independentField: Field; + readonly typedValue: string; +} +declare const _default: import("redux").Reducer; +export default _default; diff --git a/dist2/types/state/burn/v3/actions.d.ts b/dist2/types/state/burn/v3/actions.d.ts new file mode 100644 index 00000000000..9d98b90237d --- /dev/null +++ b/dist2/types/state/burn/v3/actions.d.ts @@ -0,0 +1,3 @@ +export declare const selectPercent: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ + percent: number; +}, string>; diff --git a/dist2/types/state/burn/v3/hooks.d.ts b/dist2/types/state/burn/v3/hooks.d.ts new file mode 100644 index 00000000000..f43956ddef3 --- /dev/null +++ b/dist2/types/state/burn/v3/hooks.d.ts @@ -0,0 +1,19 @@ +import { Currency, CurrencyAmount, Percent } from '@uniswap/sdk-core'; +import { Position } from '@uniswap/v3-sdk'; +import { ReactNode } from 'react'; +import { PositionDetails } from 'types/position'; +import { AppState } from '../../index'; +export declare function useBurnV3State(): AppState['burnV3']; +export declare function useDerivedV3BurnInfo(position?: PositionDetails, asWETH?: boolean): { + position?: Position; + liquidityPercentage?: Percent; + liquidityValue0?: CurrencyAmount; + liquidityValue1?: CurrencyAmount; + feeValue0?: CurrencyAmount; + feeValue1?: CurrencyAmount; + outOfRange: boolean; + error?: ReactNode; +}; +export declare function useBurnV3ActionHandlers(): { + onPercentSelect: (percent: number) => void; +}; diff --git a/dist2/types/state/burn/v3/reducer.d.ts b/dist2/types/state/burn/v3/reducer.d.ts new file mode 100644 index 00000000000..e7a25868b3a --- /dev/null +++ b/dist2/types/state/burn/v3/reducer.d.ts @@ -0,0 +1,5 @@ +interface BurnV3State { + readonly percent: number; +} +declare const _default: import("redux").Reducer; +export default _default; diff --git a/dist2/types/state/claim/hooks.d.ts b/dist2/types/state/claim/hooks.d.ts new file mode 100644 index 00000000000..6569b8ff1f0 --- /dev/null +++ b/dist2/types/state/claim/hooks.d.ts @@ -0,0 +1,18 @@ +import { CurrencyAmount, Token } from '@uniswap/sdk-core'; +interface UserClaimData { + index: number; + amount: string; + proof: string[]; + flags?: { + isSOCKS: boolean; + isLP: boolean; + isUser: boolean; + }; +} +export declare function useUserClaimData(account: string | null | undefined): UserClaimData | null; +export declare function useUserHasAvailableClaim(account: string | null | undefined): boolean; +export declare function useUserUnclaimedAmount(account: string | null | undefined): CurrencyAmount | undefined; +export declare function useClaimCallback(account: string | null | undefined): { + claimCallback: () => Promise; +}; +export {}; diff --git a/dist2/types/state/data/enhanced.d.ts b/dist2/types/state/data/enhanced.d.ts new file mode 100644 index 00000000000..8fbc190d6d5 --- /dev/null +++ b/dist2/types/state/data/enhanced.d.ts @@ -0,0 +1,42 @@ +export declare const CHAIN_TAG = "Chain"; +export declare const api: import("@reduxjs/toolkit/dist/query").Api, Partial>, {}>, import("@reduxjs/toolkit/dist/query/endpointDefinitions").ReplaceTagTypes<{ + allV3Ticks: import("@reduxjs/toolkit/dist/query").QueryDefinition, Partial>, {}>, never, any, string>; + feeTierDistribution: import("@reduxjs/toolkit/dist/query").QueryDefinition, Partial>, {}>, never, any, string>; +} & { + allV3Ticks: import("@reduxjs/toolkit/dist/query").QueryDefinition, import("@reduxjs/toolkit/dist/query").BaseQueryFn<{ + document: string | import("graphql").DocumentNode; + variables?: any; + }, unknown, Pick, Partial>, {}>, never, import("./generated").AllV3TicksQuery, string>; + feeTierDistribution: import("@reduxjs/toolkit/dist/query").QueryDefinition, import("@reduxjs/toolkit/dist/query").BaseQueryFn<{ + document: string | import("graphql").DocumentNode; + variables?: any; + }, unknown, Pick, Partial>, {}>, never, import("./generated").FeeTierDistributionQuery, string>; +}, "Chain">, "dataApi", "Chain", typeof import("@reduxjs/toolkit/dist/query/core/module").coreModuleName | typeof import("@reduxjs/toolkit/dist/query/react/module").reactHooksModuleName>; +export declare const useAllV3TicksQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseQuery, import("@reduxjs/toolkit/dist/query").BaseQueryFn<{ + document: string | import("graphql").DocumentNode; + variables?: any; +}, unknown, Pick, Partial>, {}>, "Chain", any, string>>, useFeeTierDistributionQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseQuery, import("@reduxjs/toolkit/dist/query").BaseQueryFn<{ + document: string | import("graphql").DocumentNode; + variables?: any; +}, unknown, Pick, Partial>, {}>, "Chain", any, string>>; diff --git a/dist2/types/state/data/slice.d.ts b/dist2/types/state/data/slice.d.ts new file mode 100644 index 00000000000..55543151dfe --- /dev/null +++ b/dist2/types/state/data/slice.d.ts @@ -0,0 +1,16 @@ +import { BaseQueryFn } from '@reduxjs/toolkit/query'; +import { DocumentNode } from 'graphql'; +import { ClientError } from 'graphql-request'; +export declare const api: import("@reduxjs/toolkit/query").Api, Partial>, {}>, { + allV3Ticks: import("@reduxjs/toolkit/query").QueryDefinition, Partial>, {}>, never, any, string>; + feeTierDistribution: import("@reduxjs/toolkit/query").QueryDefinition, Partial>, {}>, never, any, string>; +}, "dataApi", never, typeof import("@reduxjs/toolkit/dist/query/core/module").coreModuleName | typeof import("@reduxjs/toolkit/dist/query/react/module").reactHooksModuleName>; diff --git a/dist2/types/state/global/actions.d.ts b/dist2/types/state/global/actions.d.ts new file mode 100644 index 00000000000..5b4f703e5e2 --- /dev/null +++ b/dist2/types/state/global/actions.d.ts @@ -0,0 +1 @@ +export declare const updateVersion: import("@reduxjs/toolkit").ActionCreatorWithoutPayload; diff --git a/dist2/types/state/governance/hooks.d.ts b/dist2/types/state/governance/hooks.d.ts new file mode 100644 index 00000000000..14bb973ef46 --- /dev/null +++ b/dist2/types/state/governance/hooks.d.ts @@ -0,0 +1,57 @@ +import { CurrencyAmount, Token } from '@uniswap/sdk-core'; +import { VoteOption } from './types'; +interface ProposalDetail { + target: string; + functionSig: string; + callData: string; +} +export interface ProposalData { + id: string; + title: string; + description: string; + proposer: string; + status: ProposalState; + forCount: number; + againstCount: number; + startBlock: number; + endBlock: number; + details: ProposalDetail[]; + governorIndex: number; +} +export interface CreateProposalData { + targets: string[]; + values: string[]; + signatures: string[]; + calldatas: string[]; + description: string; +} +export declare enum ProposalState { + UNDETERMINED = -1, + PENDING = 0, + ACTIVE = 1, + CANCELED = 2, + DEFEATED = 3, + SUCCEEDED = 4, + QUEUED = 5, + EXPIRED = 6, + EXECUTED = 7 +} +export declare function useAllProposalData(): { + data: ProposalData[]; + loading: boolean; +}; +export declare function useProposalData(governorIndex: number, id: string): ProposalData | undefined; +export declare function useUserDelegatee(): string; +export declare function useUserVotes(): { + loading: boolean; + votes: CurrencyAmount | undefined; +}; +export declare function useUserVotesAsOfBlock(block: number | undefined): CurrencyAmount | undefined; +export declare function useDelegateCallback(): (delegatee: string | undefined) => undefined | Promise; +export declare function useVoteCallback(): { + voteCallback: (proposalId: string | undefined, voteOption: VoteOption) => undefined | Promise; +}; +export declare function useCreateProposalCallback(): (createProposalData: CreateProposalData | undefined) => undefined | Promise; +export declare function useLatestProposalId(address: string | undefined): string | undefined; +export declare function useProposalThreshold(): CurrencyAmount | undefined; +export {}; diff --git a/dist2/types/state/governance/types.d.ts b/dist2/types/state/governance/types.d.ts new file mode 100644 index 00000000000..f92f19a1a64 --- /dev/null +++ b/dist2/types/state/governance/types.d.ts @@ -0,0 +1,5 @@ +export declare enum VoteOption { + Against = 0, + For = 1, + Abstain = 2 +} diff --git a/dist2/types/state/lists/actions.d.ts b/dist2/types/state/lists/actions.d.ts new file mode 100644 index 00000000000..cc00f5fb237 --- /dev/null +++ b/dist2/types/state/lists/actions.d.ts @@ -0,0 +1,23 @@ +import { ActionCreatorWithPayload } from '@reduxjs/toolkit'; +import { TokenList } from '@uniswap/token-lists'; +export declare const fetchTokenList: Readonly<{ + pending: ActionCreatorWithPayload<{ + url: string; + requestId: string; + }>; + fulfilled: ActionCreatorWithPayload<{ + url: string; + tokenList: TokenList; + requestId: string; + }>; + rejected: ActionCreatorWithPayload<{ + url: string; + errorMessage: string; + requestId: string; + }>; +}>; +export declare const addList: ActionCreatorWithPayload; +export declare const removeList: ActionCreatorWithPayload; +export declare const enableList: ActionCreatorWithPayload; +export declare const disableList: ActionCreatorWithPayload; +export declare const acceptListUpdate: ActionCreatorWithPayload; diff --git a/dist2/types/state/lists/hooks.d.ts b/dist2/types/state/lists/hooks.d.ts new file mode 100644 index 00000000000..c3f81b3469f --- /dev/null +++ b/dist2/types/state/lists/hooks.d.ts @@ -0,0 +1,15 @@ +import { ChainTokenMap } from 'lib/hooks/useTokenList/utils'; +import { AppState } from '../index'; +export declare type TokenAddressMap = ChainTokenMap; +export declare function useAllLists(): AppState['lists']['byUrl']; +/** + * Combine the tokens in map2 with the tokens on map1, where tokens on map1 take precedence + * @param map1 the base token map + * @param map2 the map of additioanl tokens to add to the base map + */ +export declare function combineMaps(map1: TokenAddressMap, map2: TokenAddressMap): TokenAddressMap; +export declare function useActiveListUrls(): string[] | undefined; +export declare function useInactiveListUrls(): string[]; +export declare function useCombinedActiveList(): TokenAddressMap; +export declare function useUnsupportedTokenList(): TokenAddressMap; +export declare function useIsListActive(url: string): boolean; diff --git a/dist2/types/state/lists/reducer.d.ts b/dist2/types/state/lists/reducer.d.ts new file mode 100644 index 00000000000..bdf7c5e2f59 --- /dev/null +++ b/dist2/types/state/lists/reducer.d.ts @@ -0,0 +1,15 @@ +import { TokenList } from '@uniswap/token-lists'; +export interface ListsState { + readonly byUrl: { + readonly [url: string]: { + readonly current: TokenList | null; + readonly pendingUpdate: TokenList | null; + readonly loadingRequestId: string | null; + readonly error: string | null; + }; + }; + readonly lastInitializedDefaultListOfLists?: string[]; + readonly activeListUrls: string[] | undefined; +} +declare const _default: import("redux").Reducer; +export default _default; diff --git a/dist2/types/state/lists/updater.d.ts b/dist2/types/state/lists/updater.d.ts new file mode 100644 index 00000000000..b91977cb6ee --- /dev/null +++ b/dist2/types/state/lists/updater.d.ts @@ -0,0 +1 @@ +export default function Updater(): null; diff --git a/dist2/types/state/lists/wrappedTokenInfo.d.ts b/dist2/types/state/lists/wrappedTokenInfo.d.ts new file mode 100644 index 00000000000..581c43431b3 --- /dev/null +++ b/dist2/types/state/lists/wrappedTokenInfo.d.ts @@ -0,0 +1,29 @@ +import { Currency, Token } from '@uniswap/sdk-core'; +import { Tags, TokenInfo, TokenList } from '@uniswap/token-lists'; +declare type TagDetails = Tags[keyof Tags]; +interface TagInfo extends TagDetails { + id: string; +} +/** + * Token instances created from token info on a token list. + */ +export declare class WrappedTokenInfo implements Token { + readonly isNative: false; + readonly isToken: true; + readonly list?: TokenList; + readonly tokenInfo: TokenInfo; + constructor(tokenInfo: TokenInfo, list?: TokenList); + private _checksummedAddress; + get address(): string; + get chainId(): number; + get decimals(): number; + get name(): string; + get symbol(): string; + get logoURI(): string | undefined; + private _tags; + get tags(): TagInfo[]; + equals(other: Currency): boolean; + sortsBefore(other: Token): boolean; + get wrapped(): Token; +} +export {}; diff --git a/dist2/types/state/logs/hooks.d.ts b/dist2/types/state/logs/hooks.d.ts new file mode 100644 index 00000000000..94735293264 --- /dev/null +++ b/dist2/types/state/logs/hooks.d.ts @@ -0,0 +1,18 @@ +import { EventFilter, Log } from './utils'; +export declare enum LogsState { + INVALID = 0, + LOADING = 1, + SYNCING = 2, + ERROR = 3, + SYNCED = 4 +} +export interface UseLogsResult { + logs: Log[] | undefined; + state: LogsState; +} +/** + * Returns the logs for the given filter as of the latest block, re-fetching from the library every block. + * @param filter The logs filter, without `blockHash`, `fromBlock` or `toBlock` defined. + * The filter parameter should _always_ be memoized, or else will trigger constant refetching + */ +export declare function useLogs(filter: EventFilter | undefined): UseLogsResult; diff --git a/dist2/types/state/logs/slice.d.ts b/dist2/types/state/logs/slice.d.ts new file mode 100644 index 00000000000..ffd263c618d --- /dev/null +++ b/dist2/types/state/logs/slice.d.ts @@ -0,0 +1,42 @@ +import { EventFilter, Log } from './utils'; +export interface LogsState { + [chainId: number]: { + [filterKey: string]: { + listeners: number; + fetchingBlockNumber?: number; + results?: { + blockNumber: number; + logs: Log[]; + error?: undefined; + } | { + blockNumber: number; + logs?: undefined; + error: true; + }; + }; + }; +} +declare const _default: import("redux").Reducer; +export default _default; +export declare const addListener: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ + chainId: number; + filter: EventFilter; +}, string>, removeListener: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ + chainId: number; + filter: EventFilter; +}, string>, fetchedLogs: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ + chainId: number; + filter: EventFilter; + results: { + blockNumber: number; + logs: Log[]; + }; +}, string>, fetchedLogsError: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ + chainId: number; + blockNumber: number; + filter: EventFilter; +}, string>, fetchingLogs: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ + chainId: number; + filters: EventFilter[]; + blockNumber: number; +}, string>; diff --git a/dist2/types/state/logs/updater.d.ts b/dist2/types/state/logs/updater.d.ts new file mode 100644 index 00000000000..b91977cb6ee --- /dev/null +++ b/dist2/types/state/logs/updater.d.ts @@ -0,0 +1 @@ +export default function Updater(): null; diff --git a/dist2/types/state/logs/utils.d.ts b/dist2/types/state/logs/utils.d.ts new file mode 100644 index 00000000000..1416cda31c3 --- /dev/null +++ b/dist2/types/state/logs/utils.d.ts @@ -0,0 +1,21 @@ +export interface EventFilter { + address?: string; + topics?: Array | null>; +} +export interface Log { + topics: Array; + data: string; + transactionIndex: number; + logIndex: number; + blockNumber: number; +} +/** + * Converts a filter to the corresponding string key + * @param filter the filter to convert + */ +export declare function filterToKey(filter: EventFilter): string; +/** + * Convert a filter key to the corresponding filter + * @param key key to convert + */ +export declare function keyToFilter(key: string): EventFilter; diff --git a/dist2/types/state/mint/actions.d.ts b/dist2/types/state/mint/actions.d.ts new file mode 100644 index 00000000000..f4c05e6ce2a --- /dev/null +++ b/dist2/types/state/mint/actions.d.ts @@ -0,0 +1,10 @@ +export declare enum Field { + CURRENCY_A = "CURRENCY_A", + CURRENCY_B = "CURRENCY_B" +} +export declare const typeInput: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ + field: Field; + typedValue: string; + noLiquidity: boolean; +}, string>; +export declare const resetMintState: import("@reduxjs/toolkit").ActionCreatorWithoutPayload; diff --git a/dist2/types/state/mint/hooks.d.ts b/dist2/types/state/mint/hooks.d.ts new file mode 100644 index 00000000000..aa8e00a005d --- /dev/null +++ b/dist2/types/state/mint/hooks.d.ts @@ -0,0 +1,30 @@ +import { Currency, CurrencyAmount, Percent, Price, Token } from '@uniswap/sdk-core'; +import { Pair } from '@uniswap/v2-sdk'; +import { ReactNode } from 'react'; +import { PairState } from '../../hooks/useV2Pairs'; +import { AppState } from '../index'; +import { Field } from './actions'; +export declare function useMintState(): AppState['mint']; +export declare function useMintActionHandlers(noLiquidity: boolean | undefined): { + onFieldAInput: (typedValue: string) => void; + onFieldBInput: (typedValue: string) => void; +}; +export declare function useDerivedMintInfo(currencyA: Currency | undefined, currencyB: Currency | undefined): { + dependentField: Field; + currencies: { + [field in Field]?: Currency; + }; + pair?: Pair | null; + pairState: PairState; + currencyBalances: { + [field in Field]?: CurrencyAmount; + }; + parsedAmounts: { + [field in Field]?: CurrencyAmount; + }; + price?: Price; + noLiquidity?: boolean; + liquidityMinted?: CurrencyAmount; + poolTokenPercentage?: Percent; + error?: ReactNode; +}; diff --git a/dist2/types/state/mint/reducer.d.ts b/dist2/types/state/mint/reducer.d.ts new file mode 100644 index 00000000000..7a9a0353f0e --- /dev/null +++ b/dist2/types/state/mint/reducer.d.ts @@ -0,0 +1,12 @@ +import { Field } from './actions'; +export interface MintState { + readonly independentField: Field; + readonly typedValue: string; + readonly otherTypedValue: string; + readonly startPriceTypedValue: string; + readonly leftRangeTypedValue: string; + readonly rightRangeTypedValue: string; +} +export declare const initialState: MintState; +declare const _default: import("redux").Reducer; +export default _default; diff --git a/dist2/types/state/mint/v3/actions.d.ts b/dist2/types/state/mint/v3/actions.d.ts new file mode 100644 index 00000000000..e1d5eaa10be --- /dev/null +++ b/dist2/types/state/mint/v3/actions.d.ts @@ -0,0 +1,24 @@ +export declare enum Field { + CURRENCY_A = "CURRENCY_A", + CURRENCY_B = "CURRENCY_B" +} +export declare enum Bound { + LOWER = "LOWER", + UPPER = "UPPER" +} +export declare const typeInput: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ + field: Field; + typedValue: string; + noLiquidity: boolean; +}, string>; +export declare const typeStartPriceInput: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ + typedValue: string; +}, string>; +export declare const typeLeftRangeInput: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ + typedValue: string; +}, string>; +export declare const typeRightRangeInput: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ + typedValue: string; +}, string>; +export declare const resetMintState: import("@reduxjs/toolkit").ActionCreatorWithoutPayload; +export declare const setFullRange: import("@reduxjs/toolkit").ActionCreatorWithoutPayload; diff --git a/dist2/types/state/mint/v3/hooks.d.ts b/dist2/types/state/mint/v3/hooks.d.ts new file mode 100644 index 00000000000..74e0730aa6a --- /dev/null +++ b/dist2/types/state/mint/v3/hooks.d.ts @@ -0,0 +1,54 @@ +import { Currency, CurrencyAmount, Price, Token } from '@uniswap/sdk-core'; +import { FeeAmount, Pool, Position } from '@uniswap/v3-sdk'; +import { ReactNode } from 'react'; +import { PoolState } from '../../../hooks/usePools'; +import { AppState } from '../../index'; +import { Bound, Field } from './actions'; +export declare function useV3MintState(): AppState['mintV3']; +export declare function useV3MintActionHandlers(noLiquidity: boolean | undefined): { + onFieldAInput: (typedValue: string) => void; + onFieldBInput: (typedValue: string) => void; + onLeftRangeInput: (typedValue: string) => void; + onRightRangeInput: (typedValue: string) => void; + onStartPriceInput: (typedValue: string) => void; +}; +export declare function useV3DerivedMintInfo(currencyA?: Currency, currencyB?: Currency, feeAmount?: FeeAmount, baseCurrency?: Currency, existingPosition?: Position): { + pool?: Pool | null; + poolState: PoolState; + ticks: { + [bound in Bound]?: number | undefined; + }; + price?: Price; + pricesAtTicks: { + [bound in Bound]?: Price | undefined; + }; + currencies: { + [field in Field]?: Currency; + }; + currencyBalances: { + [field in Field]?: CurrencyAmount; + }; + dependentField: Field; + parsedAmounts: { + [field in Field]?: CurrencyAmount; + }; + position: Position | undefined; + noLiquidity?: boolean; + errorMessage?: ReactNode; + invalidPool: boolean; + outOfRange: boolean; + invalidRange: boolean; + depositADisabled: boolean; + depositBDisabled: boolean; + invertPrice: boolean; + ticksAtLimit: { + [bound in Bound]?: boolean | undefined; + }; +}; +export declare function useRangeHopCallbacks(baseCurrency: Currency | undefined, quoteCurrency: Currency | undefined, feeAmount: FeeAmount | undefined, tickLower: number | undefined, tickUpper: number | undefined, pool?: Pool | undefined | null): { + getDecrementLower: () => string; + getIncrementLower: () => string; + getDecrementUpper: () => string; + getIncrementUpper: () => string; + getSetFullRange: () => void; +}; diff --git a/dist2/types/state/mint/v3/reducer.d.ts b/dist2/types/state/mint/v3/reducer.d.ts new file mode 100644 index 00000000000..b8efefed2f5 --- /dev/null +++ b/dist2/types/state/mint/v3/reducer.d.ts @@ -0,0 +1,11 @@ +import { Field } from './actions'; +export declare type FullRange = true; +interface MintState { + readonly independentField: Field; + readonly typedValue: string; + readonly startPriceTypedValue: string; + readonly leftRangeTypedValue: string | FullRange; + readonly rightRangeTypedValue: string | FullRange; +} +declare const _default: import("redux").Reducer; +export default _default; diff --git a/dist2/types/state/mint/v3/utils.d.ts b/dist2/types/state/mint/v3/utils.d.ts new file mode 100644 index 00000000000..fcabec5e1f8 --- /dev/null +++ b/dist2/types/state/mint/v3/utils.d.ts @@ -0,0 +1,4 @@ +import { Price, Token } from '@uniswap/sdk-core'; +import { FeeAmount } from '@uniswap/v3-sdk'; +export declare function tryParsePrice(baseToken?: Token, quoteToken?: Token, value?: string): Price | undefined; +export declare function tryParseTick(baseToken?: Token, quoteToken?: Token, feeAmount?: FeeAmount, value?: string): number | undefined; diff --git a/dist2/types/state/routing/clientSideSmartOrderRouter/constants.d.ts b/dist2/types/state/routing/clientSideSmartOrderRouter/constants.d.ts new file mode 100644 index 00000000000..1cd4e0d7ed4 --- /dev/null +++ b/dist2/types/state/routing/clientSideSmartOrderRouter/constants.d.ts @@ -0,0 +1,2 @@ +import { ChainId } from '@uniswap/smart-order-router'; +export declare const AUTO_ROUTER_SUPPORTED_CHAINS: ChainId[]; diff --git a/dist2/types/state/routing/clientSideSmartOrderRouter/dependencies.d.ts b/dist2/types/state/routing/clientSideSmartOrderRouter/dependencies.d.ts new file mode 100644 index 00000000000..5475b84b2db --- /dev/null +++ b/dist2/types/state/routing/clientSideSmartOrderRouter/dependencies.d.ts @@ -0,0 +1,7 @@ +import { AlphaRouterParams } from '@uniswap/smart-order-router'; +import { SupportedChainId } from 'constants/chains'; +export declare type Dependencies = { + [chainId in SupportedChainId]?: AlphaRouterParams; +}; +/** Minimal set of dependencies for the router to work locally. */ +export declare function buildDependencies(): Dependencies; diff --git a/dist2/types/state/routing/clientSideSmartOrderRouter/index.d.ts b/dist2/types/state/routing/clientSideSmartOrderRouter/index.d.ts new file mode 100644 index 00000000000..f37ba29461b --- /dev/null +++ b/dist2/types/state/routing/clientSideSmartOrderRouter/index.d.ts @@ -0,0 +1,23 @@ +import { BigintIsh } from '@uniswap/sdk-core'; +import { AlphaRouterConfig, ChainId } from '@uniswap/smart-order-router'; +import { GetQuoteResult } from 'state/routing/types'; +export declare function getQuote({ type, chainId, tokenIn, tokenOut, amount: amountRaw, }: { + type: 'exactIn' | 'exactOut'; + chainId: ChainId; + tokenIn: { + address: string; + chainId: number; + decimals: number; + symbol?: string; + }; + tokenOut: { + address: string; + chainId: number; + decimals: number; + symbol?: string; + }; + amount: BigintIsh; +}, alphaRouterConfig: Partial): Promise<{ + data: GetQuoteResult; + error?: unknown; +}>; diff --git a/dist2/types/state/routing/slice.d.ts b/dist2/types/state/routing/slice.d.ts new file mode 100644 index 00000000000..164d3c9a1c1 --- /dev/null +++ b/dist2/types/state/routing/slice.d.ts @@ -0,0 +1,31 @@ +import { FetchBaseQueryError } from '@reduxjs/toolkit/query/react'; +import { ChainId } from '@uniswap/smart-order-router'; +import { GetQuoteResult } from './types'; +export declare const routingApi: import("@reduxjs/toolkit/query/react").Api, { + getQuote: import("@reduxjs/toolkit/query/react").QueryDefinition<{ + tokenInAddress: string; + tokenInChainId: ChainId; + tokenInDecimals: number; + tokenInSymbol?: string | undefined; + tokenOutAddress: string; + tokenOutChainId: ChainId; + tokenOutDecimals: number; + tokenOutSymbol?: string | undefined; + amount: string; + useClientSideRouter: boolean; + type: 'exactIn' | 'exactOut'; + }, import("@reduxjs/toolkit/query/react").BaseQueryFn, never, GetQuoteResult, string>; +}, "routingApi", never, typeof import("@reduxjs/toolkit/dist/query/core/module").coreModuleName | typeof import("@reduxjs/toolkit/dist/query/react/module").reactHooksModuleName>; +export declare const useGetQuoteQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseQuery, never, GetQuoteResult, string>>; diff --git a/dist2/types/state/routing/types.d.ts b/dist2/types/state/routing/types.d.ts new file mode 100644 index 00000000000..1d9a1939ff4 --- /dev/null +++ b/dist2/types/state/routing/types.d.ts @@ -0,0 +1,76 @@ +import { Trade } from '@uniswap/router-sdk'; +import { Currency, CurrencyAmount, Token, TradeType } from '@uniswap/sdk-core'; +import { Route as V2Route } from '@uniswap/v2-sdk'; +import { Route as V3Route } from '@uniswap/v3-sdk'; +export declare enum TradeState { + LOADING = 0, + INVALID = 1, + NO_ROUTE_FOUND = 2, + VALID = 3, + SYNCING = 4 +} +export declare type TokenInRoute = Pick; +export declare type V3PoolInRoute = { + type: 'v3-pool'; + tokenIn: TokenInRoute; + tokenOut: TokenInRoute; + sqrtRatioX96: string; + liquidity: string; + tickCurrent: string; + fee: string; + amountIn?: string; + amountOut?: string; + address?: string; +}; +export declare type V2Reserve = { + token: TokenInRoute; + quotient: string; +}; +export declare type V2PoolInRoute = { + type: 'v2-pool'; + tokenIn: TokenInRoute; + tokenOut: TokenInRoute; + reserve0: V2Reserve; + reserve1: V2Reserve; + amountIn?: string; + amountOut?: string; + address?: string; +}; +export interface GetQuoteResult { + quoteId?: string; + blockNumber: string; + amount: string; + amountDecimals: string; + gasPriceWei: string; + gasUseEstimate: string; + gasUseEstimateQuote: string; + gasUseEstimateQuoteDecimals: string; + gasUseEstimateUSD: string; + methodParameters?: { + calldata: string; + value: string; + }; + quote: string; + quoteDecimals: string; + quoteGasAdjusted: string; + quoteGasAdjustedDecimals: string; + route: Array; + routeString: string; +} +export declare class InterfaceTrade extends Trade { + gasUseEstimateUSD: CurrencyAmount | null | undefined; + constructor({ gasUseEstimateUSD, ...routes }: { + gasUseEstimateUSD?: CurrencyAmount | undefined | null; + v2Routes: { + routev2: V2Route; + inputAmount: CurrencyAmount; + outputAmount: CurrencyAmount; + }[]; + v3Routes: { + routev3: V3Route; + inputAmount: CurrencyAmount; + outputAmount: CurrencyAmount; + }[]; + tradeType: TTradeType; + }); +} diff --git a/dist2/types/state/routing/useRoutingAPITrade.d.ts b/dist2/types/state/routing/useRoutingAPITrade.d.ts new file mode 100644 index 00000000000..b4d68ded679 --- /dev/null +++ b/dist2/types/state/routing/useRoutingAPITrade.d.ts @@ -0,0 +1,12 @@ +import { Currency, CurrencyAmount, TradeType } from '@uniswap/sdk-core'; +import { InterfaceTrade, TradeState } from './types'; +/** + * Returns the best trade by invoking the routing api or the smart order router on the client + * @param tradeType whether the swap is an exact in/out + * @param amountSpecified the exact amount to swap in/out + * @param otherCurrency the desired output/payment currency + */ +export declare function useRoutingAPITrade(tradeType: TTradeType, amountSpecified?: CurrencyAmount, otherCurrency?: Currency): { + state: TradeState; + trade: InterfaceTrade | undefined; +}; diff --git a/dist2/types/state/routing/utils.d.ts b/dist2/types/state/routing/utils.d.ts new file mode 100644 index 00000000000..30809c33dc8 --- /dev/null +++ b/dist2/types/state/routing/utils.d.ts @@ -0,0 +1,15 @@ +import { Currency, CurrencyAmount, Token, TradeType } from '@uniswap/sdk-core'; +import { Route as V2Route } from '@uniswap/v2-sdk'; +import { Route as V3Route } from '@uniswap/v3-sdk'; +import { GetQuoteResult, InterfaceTrade } from './types'; +/** + * Transforms a Routing API quote into an array of routes that can be used to create + * a `Trade`. + */ +export declare function computeRoutes(currencyIn: Currency | undefined, currencyOut: Currency | undefined, tradeType: TradeType, quoteResult: Pick | undefined): { + routev3: V3Route | null; + routev2: V2Route | null; + inputAmount: CurrencyAmount; + outputAmount: CurrencyAmount; +}[] | undefined; +export declare function transformRoutesToTrade(route: ReturnType, tradeType: TTradeType, gasUseEstimateUSD?: CurrencyAmount | null): InterfaceTrade; diff --git a/dist2/types/state/stake/hooks.d.ts b/dist2/types/state/stake/hooks.d.ts new file mode 100644 index 00000000000..f510be70890 --- /dev/null +++ b/dist2/types/state/stake/hooks.d.ts @@ -0,0 +1,29 @@ +import { CurrencyAmount, Token } from '@uniswap/sdk-core'; +import { Pair } from '@uniswap/v2-sdk'; +import { ReactNode } from 'react'; +export declare const STAKING_GENESIS = 1600387200; +export declare const REWARDS_DURATION_DAYS = 60; +export declare const STAKING_REWARDS_INFO: { + [chainId: number]: { + tokens: [Token, Token]; + stakingRewardAddress: string; + }[]; +}; +export interface StakingInfo { + stakingRewardAddress: string; + tokens: [Token, Token]; + stakedAmount: CurrencyAmount; + earnedAmount: CurrencyAmount; + totalStakedAmount: CurrencyAmount; + totalRewardRate: CurrencyAmount; + rewardRate: CurrencyAmount; + periodFinish: Date | undefined; + active: boolean; + getHypotheticalRewardRate: (stakedAmount: CurrencyAmount, totalStakedAmount: CurrencyAmount, totalRewardRate: CurrencyAmount) => CurrencyAmount; +} +export declare function useStakingInfo(pairToFilterBy?: Pair | null): StakingInfo[]; +export declare function useTotalUniEarned(): CurrencyAmount | undefined; +export declare function useDerivedStakeInfo(typedValue: string, stakingToken: Token | undefined, userLiquidityUnstaked: CurrencyAmount | undefined): { + parsedAmount?: CurrencyAmount; + error?: ReactNode; +}; diff --git a/dist2/types/state/swap/actions.d.ts b/dist2/types/state/swap/actions.d.ts new file mode 100644 index 00000000000..03d574d9fae --- /dev/null +++ b/dist2/types/state/swap/actions.d.ts @@ -0,0 +1,23 @@ +export declare enum Field { + INPUT = "INPUT", + OUTPUT = "OUTPUT" +} +export declare const selectCurrency: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ + field: Field; + currencyId: string; +}, string>; +export declare const switchCurrencies: import("@reduxjs/toolkit").ActionCreatorWithoutPayload; +export declare const typeInput: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ + field: Field; + typedValue: string; +}, string>; +export declare const replaceSwapState: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ + field: Field; + typedValue: string; + inputCurrencyId?: string | undefined; + outputCurrencyId?: string | undefined; + recipient: string | null; +}, string>; +export declare const setRecipient: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ + recipient: string | null; +}, string>; diff --git a/dist2/types/state/swap/hooks.d.ts b/dist2/types/state/swap/hooks.d.ts new file mode 100644 index 00000000000..a0be76f5d76 --- /dev/null +++ b/dist2/types/state/swap/hooks.d.ts @@ -0,0 +1,34 @@ +import { Currency, CurrencyAmount, Percent, TradeType } from '@uniswap/sdk-core'; +import { ParsedQs } from 'qs'; +import { ReactNode } from 'react'; +import { InterfaceTrade, TradeState } from 'state/routing/types'; +import { AppState } from '../index'; +import { Field } from './actions'; +import { SwapState } from './reducer'; +export declare function useSwapState(): AppState['swap']; +export declare function useSwapActionHandlers(): { + onCurrencySelection: (field: Field, currency: Currency) => void; + onSwitchTokens: () => void; + onUserInput: (field: Field, typedValue: string) => void; + onChangeRecipient: (recipient: string | null) => void; +}; +export declare function useDerivedSwapInfo(): { + currencies: { + [field in Field]?: Currency | null; + }; + currencyBalances: { + [field in Field]?: CurrencyAmount; + }; + parsedAmount: CurrencyAmount | undefined; + inputError?: ReactNode; + trade: { + trade: InterfaceTrade | undefined; + state: TradeState; + }; + allowedSlippage: Percent; +}; +export declare function queryParametersToSwapState(parsedQs: ParsedQs): SwapState; +export declare function useDefaultsFromURLSearch(): { + inputCurrencyId: string | undefined; + outputCurrencyId: string | undefined; +} | undefined; diff --git a/dist2/types/state/swap/reducer.d.ts b/dist2/types/state/swap/reducer.d.ts new file mode 100644 index 00000000000..951b835bc67 --- /dev/null +++ b/dist2/types/state/swap/reducer.d.ts @@ -0,0 +1,14 @@ +import { Field } from './actions'; +export interface SwapState { + readonly independentField: Field; + readonly typedValue: string; + readonly [Field.INPUT]: { + readonly currencyId: string | undefined | null; + }; + readonly [Field.OUTPUT]: { + readonly currencyId: string | undefined | null; + }; + readonly recipient: string | null; +} +declare const _default: import("redux").Reducer; +export default _default; diff --git a/dist2/types/state/transactions/actions.d.ts b/dist2/types/state/transactions/actions.d.ts new file mode 100644 index 00000000000..45173dc5167 --- /dev/null +++ b/dist2/types/state/transactions/actions.d.ts @@ -0,0 +1,154 @@ +import { TradeType } from '@uniswap/sdk-core'; +import { VoteOption } from '../governance/types'; +export interface SerializableTransactionReceipt { + to: string; + from: string; + contractAddress: string; + transactionIndex: number; + blockHash: string; + transactionHash: string; + blockNumber: number; + status?: number; +} +/** + * Be careful adding to this enum, always assign a unique value (typescript will not prevent duplicate values). + * These values is persisted in state and if you change the value it will cause errors + */ +export declare enum TransactionType { + APPROVAL = 0, + SWAP = 1, + DEPOSIT_LIQUIDITY_STAKING = 2, + WITHDRAW_LIQUIDITY_STAKING = 3, + CLAIM = 4, + VOTE = 5, + DELEGATE = 6, + WRAP = 7, + CREATE_V3_POOL = 8, + ADD_LIQUIDITY_V3_POOL = 9, + ADD_LIQUIDITY_V2_POOL = 10, + MIGRATE_LIQUIDITY_V3 = 11, + COLLECT_FEES = 12, + REMOVE_LIQUIDITY_V3 = 13, + SUBMIT_PROPOSAL = 14 +} +export interface BaseTransactionInfo { + type: TransactionType; +} +export interface VoteTransactionInfo extends BaseTransactionInfo { + type: TransactionType.VOTE; + governorAddress: string; + proposalId: number; + decision: VoteOption; + reason: string; +} +export interface DelegateTransactionInfo extends BaseTransactionInfo { + type: TransactionType.DELEGATE; + delegatee: string; +} +export interface ApproveTransactionInfo extends BaseTransactionInfo { + type: TransactionType.APPROVAL; + tokenAddress: string; + spender: string; +} +interface BaseSwapTransactionInfo extends BaseTransactionInfo { + type: TransactionType.SWAP; + tradeType: TradeType; + inputCurrencyId: string; + outputCurrencyId: string; +} +export interface ExactInputSwapTransactionInfo extends BaseSwapTransactionInfo { + tradeType: TradeType.EXACT_INPUT; + inputCurrencyAmountRaw: string; + expectedOutputCurrencyAmountRaw: string; + minimumOutputCurrencyAmountRaw: string; +} +export interface ExactOutputSwapTransactionInfo extends BaseSwapTransactionInfo { + tradeType: TradeType.EXACT_OUTPUT; + outputCurrencyAmountRaw: string; + expectedInputCurrencyAmountRaw: string; + maximumInputCurrencyAmountRaw: string; +} +export interface DepositLiquidityStakingTransactionInfo { + type: TransactionType.DEPOSIT_LIQUIDITY_STAKING; + token0Address: string; + token1Address: string; +} +export interface WithdrawLiquidityStakingTransactionInfo { + type: TransactionType.WITHDRAW_LIQUIDITY_STAKING; + token0Address: string; + token1Address: string; +} +export interface WrapTransactionInfo { + type: TransactionType.WRAP; + unwrapped: boolean; + currencyAmountRaw: string; + chainId?: number; +} +export interface ClaimTransactionInfo { + type: TransactionType.CLAIM; + recipient: string; + uniAmountRaw?: string; +} +export interface CreateV3PoolTransactionInfo { + type: TransactionType.CREATE_V3_POOL; + baseCurrencyId: string; + quoteCurrencyId: string; +} +export interface AddLiquidityV3PoolTransactionInfo { + type: TransactionType.ADD_LIQUIDITY_V3_POOL; + createPool: boolean; + baseCurrencyId: string; + quoteCurrencyId: string; + feeAmount: number; + expectedAmountBaseRaw: string; + expectedAmountQuoteRaw: string; +} +export interface AddLiquidityV2PoolTransactionInfo { + type: TransactionType.ADD_LIQUIDITY_V2_POOL; + baseCurrencyId: string; + quoteCurrencyId: string; + expectedAmountBaseRaw: string; + expectedAmountQuoteRaw: string; +} +export interface MigrateV2LiquidityToV3TransactionInfo { + type: TransactionType.MIGRATE_LIQUIDITY_V3; + baseCurrencyId: string; + quoteCurrencyId: string; + isFork: boolean; +} +export interface CollectFeesTransactionInfo { + type: TransactionType.COLLECT_FEES; + currencyId0: string; + currencyId1: string; +} +export interface RemoveLiquidityV3TransactionInfo { + type: TransactionType.REMOVE_LIQUIDITY_V3; + baseCurrencyId: string; + quoteCurrencyId: string; + expectedAmountBaseRaw: string; + expectedAmountQuoteRaw: string; +} +export interface SubmitProposalTransactionInfo { + type: TransactionType.SUBMIT_PROPOSAL; +} +export declare type TransactionInfo = ApproveTransactionInfo | ExactOutputSwapTransactionInfo | ExactInputSwapTransactionInfo | ClaimTransactionInfo | VoteTransactionInfo | DelegateTransactionInfo | DepositLiquidityStakingTransactionInfo | WithdrawLiquidityStakingTransactionInfo | WrapTransactionInfo | CreateV3PoolTransactionInfo | AddLiquidityV3PoolTransactionInfo | AddLiquidityV2PoolTransactionInfo | MigrateV2LiquidityToV3TransactionInfo | CollectFeesTransactionInfo | RemoveLiquidityV3TransactionInfo | SubmitProposalTransactionInfo; +export declare const addTransaction: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ + chainId: number; + hash: string; + from: string; + info: TransactionInfo; +}, string>; +export declare const clearAllTransactions: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ + chainId: number; +}, string>; +export declare const finalizeTransaction: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ + chainId: number; + hash: string; + receipt: SerializableTransactionReceipt; +}, string>; +export declare const checkedTransaction: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ + chainId: number; + hash: string; + blockNumber: number; +}, string>; +export {}; diff --git a/dist2/types/state/transactions/hooks.d.ts b/dist2/types/state/transactions/hooks.d.ts new file mode 100644 index 00000000000..88699e0f2e7 --- /dev/null +++ b/dist2/types/state/transactions/hooks.d.ts @@ -0,0 +1,21 @@ +import { TransactionResponse } from '@ethersproject/providers'; +import { Token } from '@uniswap/sdk-core'; +import { TransactionInfo } from './actions'; +import { TransactionDetails } from './reducer'; +export declare function useTransactionAdder(): (response: TransactionResponse, info: TransactionInfo) => void; +export declare function useAllTransactions(): { + [txHash: string]: TransactionDetails; +}; +export declare function useTransaction(transactionHash?: string): TransactionDetails | undefined; +export declare function useIsTransactionPending(transactionHash?: string): boolean; +export declare function useIsTransactionConfirmed(transactionHash?: string): boolean; +/** + * Returns whether a transaction happened in the last day (86400 seconds * 1000 milliseconds / second) + * @param tx to check for recency + */ +export declare function isTransactionRecent(tx: TransactionDetails): boolean; +export declare function useHasPendingApproval(token?: Token, spender?: string): boolean; +export declare function useUserHasSubmittedClaim(account?: string): { + claimSubmitted: boolean; + claimTxn: TransactionDetails | undefined; +}; diff --git a/dist2/types/state/transactions/reducer.d.ts b/dist2/types/state/transactions/reducer.d.ts new file mode 100644 index 00000000000..cbe25a5de07 --- /dev/null +++ b/dist2/types/state/transactions/reducer.d.ts @@ -0,0 +1,18 @@ +import { SerializableTransactionReceipt, TransactionInfo } from './actions'; +export interface TransactionDetails { + hash: string; + receipt?: SerializableTransactionReceipt; + lastCheckedBlockNumber?: number; + addedTime: number; + confirmedTime?: number; + from: string; + info: TransactionInfo; +} +export interface TransactionState { + [chainId: number]: { + [txHash: string]: TransactionDetails; + }; +} +export declare const initialState: TransactionState; +declare const _default: import("redux").Reducer; +export default _default; diff --git a/dist2/types/state/transactions/updater.d.ts b/dist2/types/state/transactions/updater.d.ts new file mode 100644 index 00000000000..d1883e2693b --- /dev/null +++ b/dist2/types/state/transactions/updater.d.ts @@ -0,0 +1,2 @@ +/// +export default function Updater(): JSX.Element; diff --git a/dist2/types/state/user/actions.d.ts b/dist2/types/state/user/actions.d.ts new file mode 100644 index 00000000000..5d594bf7c64 --- /dev/null +++ b/dist2/types/state/user/actions.d.ts @@ -0,0 +1,54 @@ +import { SupportedLocale } from 'constants/locales'; +export interface SerializedToken { + chainId: number; + address: string; + decimals: number; + symbol?: string; + name?: string; +} +export interface SerializedPair { + token0: SerializedToken; + token1: SerializedToken; +} +export declare const updateMatchesDarkMode: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ + matchesDarkMode: boolean; +}, string>; +export declare const updateUserDarkMode: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ + userDarkMode: boolean; +}, string>; +export declare const updateUserExpertMode: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ + userExpertMode: boolean; +}, string>; +export declare const updateUserLocale: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ + userLocale: SupportedLocale; +}, string>; +export declare const updateShowSurveyPopup: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ + showSurveyPopup: boolean; +}, string>; +export declare const updateUserClientSideRouter: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ + userClientSideRouter: boolean; +}, string>; +export declare const updateHideClosedPositions: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ + userHideClosedPositions: boolean; +}, string>; +export declare const updateUserSlippageTolerance: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ + userSlippageTolerance: number | 'auto'; +}, string>; +export declare const updateUserDeadline: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ + userDeadline: number; +}, string>; +export declare const addSerializedToken: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ + serializedToken: SerializedToken; +}, string>; +export declare const removeSerializedToken: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ + chainId: number; + address: string; +}, string>; +export declare const addSerializedPair: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ + serializedPair: SerializedPair; +}, string>; +export declare const removeSerializedPair: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ + chainId: number; + tokenAAddress: string; + tokenBAddress: string; +}, string>; diff --git a/dist2/types/state/user/hooks.d.ts b/dist2/types/state/user/hooks.d.ts new file mode 100644 index 00000000000..4de57a33992 --- /dev/null +++ b/dist2/types/state/user/hooks.d.ts @@ -0,0 +1,38 @@ +import { Percent, Token } from '@uniswap/sdk-core'; +import { Pair } from '@uniswap/v2-sdk'; +import { SupportedLocale } from 'constants/locales'; +export declare function useIsDarkMode(): boolean; +export declare function useDarkModeManager(): [boolean, () => void]; +export declare function useUserLocale(): SupportedLocale | null; +export declare function useUserLocaleManager(): [SupportedLocale | null, (newLocale: SupportedLocale) => void]; +export declare function useIsExpertMode(): boolean; +export declare function useExpertModeManager(): [boolean, () => void]; +export declare function useShowSurveyPopup(): [boolean | undefined, (showPopup: boolean) => void]; +export declare function useClientSideRouter(): [boolean, (userClientSideRouter: boolean) => void]; +export declare function useSetUserSlippageTolerance(): (slippageTolerance: Percent | 'auto') => void; +/** + * Return the user's slippage tolerance, from the redux store, and a function to update the slippage tolerance + */ +export declare function useUserSlippageTolerance(): Percent | 'auto'; +export declare function useUserHideClosedPositions(): [boolean, (newHideClosedPositions: boolean) => void]; +/** + * Same as above but replaces the auto with a default value + * @param defaultSlippageTolerance the default value to replace auto with + */ +export declare function useUserSlippageToleranceWithDefault(defaultSlippageTolerance: Percent): Percent; +export declare function useUserTransactionTTL(): [number, (slippage: number) => void]; +export declare function useAddUserToken(): (token: Token) => void; +export declare function useRemoveUserAddedToken(): (chainId: number, address: string) => void; +export declare function useUserAddedTokens(): Token[]; +export declare function usePairAdder(): (pair: Pair) => void; +export declare function useURLWarningVisible(): boolean; +/** + * Given two tokens return the liquidity token that represents its liquidity shares + * @param tokenA one of the two tokens + * @param tokenB the other token + */ +export declare function toV2LiquidityToken([tokenA, tokenB]: [Token, Token]): Token; +/** + * Returns all the pairs of tokens that are tracked by the user for the current chain ID. + */ +export declare function useTrackedTokenPairs(): [Token, Token][]; diff --git a/dist2/types/state/user/reducer.d.ts b/dist2/types/state/user/reducer.d.ts new file mode 100644 index 00000000000..1fb01db088f --- /dev/null +++ b/dist2/types/state/user/reducer.d.ts @@ -0,0 +1,30 @@ +import { SupportedLocale } from 'constants/locales'; +import { SerializedPair, SerializedToken } from './actions'; +export interface UserState { + lastUpdateVersionTimestamp?: number; + matchesDarkMode: boolean; + userDarkMode: boolean | null; + userLocale: SupportedLocale | null; + userExpertMode: boolean; + userClientSideRouter: boolean; + userHideClosedPositions: boolean; + userSlippageTolerance: number | 'auto'; + userSlippageToleranceHasBeenMigratedToAuto: boolean; + userDeadline: number; + tokens: { + [chainId: number]: { + [address: string]: SerializedToken; + }; + }; + pairs: { + [chainId: number]: { + [key: string]: SerializedPair; + }; + }; + timestamp: number; + URLWarningVisible: boolean; + showSurveyPopup: boolean | undefined; +} +export declare const initialState: UserState; +declare const _default: import("redux").Reducer; +export default _default; diff --git a/dist2/types/state/user/updater.d.ts b/dist2/types/state/user/updater.d.ts new file mode 100644 index 00000000000..b91977cb6ee --- /dev/null +++ b/dist2/types/state/user/updater.d.ts @@ -0,0 +1 @@ +export default function Updater(): null; diff --git a/dist2/types/state/wallet/hooks.d.ts b/dist2/types/state/wallet/hooks.d.ts new file mode 100644 index 00000000000..09614d558ef --- /dev/null +++ b/dist2/types/state/wallet/hooks.d.ts @@ -0,0 +1,6 @@ +import { CurrencyAmount, Token } from '@uniswap/sdk-core'; +export { default as useCurrencyBalance, useCurrencyBalances, useNativeCurrencyBalances, useTokenBalance, useTokenBalances, useTokenBalancesWithLoadingIndicator, } from 'lib/hooks/useCurrencyBalance'; +export declare function useAllTokenBalances(): { + [tokenAddress: string]: CurrencyAmount | undefined; +}; +export declare function useAggregateUniBalance(): CurrencyAmount | undefined; diff --git a/dist2/types/theme/DarkModeQueryParamReader.d.ts b/dist2/types/theme/DarkModeQueryParamReader.d.ts new file mode 100644 index 00000000000..dbf737386f4 --- /dev/null +++ b/dist2/types/theme/DarkModeQueryParamReader.d.ts @@ -0,0 +1,2 @@ +import { RouteComponentProps } from 'react-router-dom'; +export default function DarkModeQueryParamReader({ location: { search } }: RouteComponentProps): null; diff --git a/dist2/types/theme/RadialGradientByChainUpdater.d.ts b/dist2/types/theme/RadialGradientByChainUpdater.d.ts new file mode 100644 index 00000000000..a95bde4206f --- /dev/null +++ b/dist2/types/theme/RadialGradientByChainUpdater.d.ts @@ -0,0 +1 @@ +export default function RadialGradientByChainUpdater(): null; diff --git a/dist2/types/theme/components.d.ts b/dist2/types/theme/components.d.ts new file mode 100644 index 00000000000..36309781f0d --- /dev/null +++ b/dist2/types/theme/components.d.ts @@ -0,0 +1,37 @@ +import { HTMLProps } from 'react'; +import { Link } from 'react-router-dom'; +export declare const ButtonText: import("styled-components").StyledComponent<"button", import("styled-components").DefaultTheme, {}, never>; +export declare const CloseIcon: import("styled-components").StyledComponent void; +}, never>; +export declare const IconWrapper: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, { + stroke?: string | undefined; + size?: string | undefined; + marginRight?: string | undefined; + marginLeft?: string | undefined; +}, never>; +export declare const LinkStyledButton: import("styled-components").StyledComponent<"button", import("styled-components").DefaultTheme, { + disabled?: boolean | undefined; +}, never>; +export declare const StyledInternalLink: import("styled-components").StyledComponent; +export declare const TrashIcon: import("styled-components").StyledComponent; +export declare const UniTokenAnimated: import("styled-components").StyledComponent<"img", import("styled-components").DefaultTheme, {}, never>; +/** + * Outbound link that handles firing google analytics events + */ +export declare function ExternalLink({ target, href, rel, ...rest }: Omit, 'as' | 'ref' | 'onClick'> & { + href: string; +}): JSX.Element; +export declare function ExternalLinkIcon({ target, href, rel, ...rest }: Omit, 'as' | 'ref' | 'onClick'> & { + href: string; +}): JSX.Element; +export declare function BackArrow({ to }: { + to: string; +}): JSX.Element; +export declare const CustomLightSpinner: import("styled-components").StyledComponent<"img", import("styled-components").DefaultTheme, { + size: string; +}, never>; +export declare const HideSmall: import("styled-components").StyledComponent<"span", import("styled-components").DefaultTheme, {}, never>; +export declare const HideExtraSmall: import("styled-components").StyledComponent<"span", import("styled-components").DefaultTheme, {}, never>; +export declare const SmallOnly: import("styled-components").StyledComponent<"span", import("styled-components").DefaultTheme, {}, never>; +export declare const Separator: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; diff --git a/dist2/types/theme/index.d.ts b/dist2/types/theme/index.d.ts new file mode 100644 index 00000000000..c7f7818cc4c --- /dev/null +++ b/dist2/types/theme/index.d.ts @@ -0,0 +1,50 @@ +import React from 'react'; +import { TextProps as TextPropsOriginal } from 'rebass'; +import { DefaultTheme } from 'styled-components/macro'; +export * from './components'; +declare type TextProps = Omit; +export declare const MEDIA_WIDTHS: { + upToExtraSmall: number; + upToSmall: number; + upToMedium: number; + upToLarge: number; +}; +export declare enum Z_INDEX { + deprecated_zero = 0, + deprecated_content = 1, + dropdown = 1000, + sticky = 1020, + fixed = 1030, + modalBackdrop = 1040, + offcanvas = 1050, + modal = 1060, + popover = 1070, + tooltip = 1080 +} +export default function ThemeProvider({ children }: { + children: React.ReactNode; +}): JSX.Element; +/** + * Preset styles of the Rebass Text component + */ +export declare const ThemedText: { + Main(props: TextProps): JSX.Element; + Link(props: TextProps): JSX.Element; + Label(props: TextProps): JSX.Element; + Black(props: TextProps): JSX.Element; + White(props: TextProps): JSX.Element; + Body(props: TextProps): JSX.Element; + LargeHeader(props: TextProps): JSX.Element; + MediumHeader(props: TextProps): JSX.Element; + SubHeader(props: TextProps): JSX.Element; + Small(props: TextProps): JSX.Element; + Blue(props: TextProps): JSX.Element; + Yellow(props: TextProps): JSX.Element; + DarkGray(props: TextProps): JSX.Element; + Gray(props: TextProps): JSX.Element; + Italic(props: TextProps): JSX.Element; + Error({ error, ...props }: { + error: boolean; + } & TextProps): JSX.Element; +}; +export declare const ThemedGlobalStyle: import("styled-components").GlobalStyleComponent<{}, DefaultTheme>; diff --git a/dist2/types/types/tuple.d.ts b/dist2/types/types/tuple.d.ts new file mode 100644 index 00000000000..829e60dbff5 --- /dev/null +++ b/dist2/types/types/tuple.d.ts @@ -0,0 +1,4 @@ +export declare type TupleSplit = O['length'] extends N ? [O, T] : T extends readonly [infer F, ...infer R] ? TupleSplit : [O, T]; +export declare type TakeFirst = TupleSplit[0]; +export declare type SkipFirst = TupleSplit[1]; +export declare type NonNullable = T extends null | undefined ? never : T; diff --git a/dist2/types/types/v3/commons.d.ts b/dist2/types/types/v3/commons.d.ts new file mode 100644 index 00000000000..fbb82635f1f --- /dev/null +++ b/dist2/types/types/v3/commons.d.ts @@ -0,0 +1,16 @@ +import { EventFilter, Event } from "ethers"; +import { Result } from "@ethersproject/abi"; +export interface TypedEventFilter<_EventArgsArray, _EventArgsObject> extends EventFilter { +} +export interface TypedEvent extends Event { + args: EventArgs; +} +export declare type TypedListener, EventArgsObject> = (...listenerArg: [ + ...EventArgsArray, + TypedEvent +]) => void; +export declare type MinEthersFactory = { + deploy(...a: ARGS[]): Promise; +}; +export declare type GetContractTypeFromFactory = F extends MinEthersFactory ? C : never; +export declare type GetARGsTypeFromFactory = F extends MinEthersFactory ? Parameters : never; diff --git a/dist2/types/types/v3/factories/IApproveAndCall__factory.d.ts b/dist2/types/types/v3/factories/IApproveAndCall__factory.d.ts new file mode 100644 index 00000000000..ced5b912e4f --- /dev/null +++ b/dist2/types/types/v3/factories/IApproveAndCall__factory.d.ts @@ -0,0 +1,41 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { IApproveAndCall, IApproveAndCallInterface } from "../IApproveAndCall"; +export declare class IApproveAndCall__factory { + static readonly abi: ({ + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + } | { + inputs: { + components: { + internalType: string; + name: string; + type: string; + }[]; + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + })[]; + static createInterface(): IApproveAndCallInterface; + static connect(address: string, signerOrProvider: Signer | Provider): IApproveAndCall; +} diff --git a/dist2/types/types/v3/factories/IERC1271__factory.d.ts b/dist2/types/types/v3/factories/IERC1271__factory.d.ts new file mode 100644 index 00000000000..4562379cebe --- /dev/null +++ b/dist2/types/types/v3/factories/IERC1271__factory.d.ts @@ -0,0 +1,22 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { IERC1271, IERC1271Interface } from "../IERC1271"; +export declare class IERC1271__factory { + static readonly abi: { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + }[]; + static createInterface(): IERC1271Interface; + static connect(address: string, signerOrProvider: Signer | Provider): IERC1271; +} diff --git a/dist2/types/types/v3/factories/IERC20Metadata__factory.d.ts b/dist2/types/types/v3/factories/IERC20Metadata__factory.d.ts new file mode 100644 index 00000000000..53bb5aec292 --- /dev/null +++ b/dist2/types/types/v3/factories/IERC20Metadata__factory.d.ts @@ -0,0 +1,35 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { IERC20Metadata, IERC20MetadataInterface } from "../IERC20Metadata"; +export declare class IERC20Metadata__factory { + static readonly abi: ({ + anonymous: boolean; + inputs: { + indexed: boolean; + internalType: string; + name: string; + type: string; + }[]; + name: string; + type: string; + outputs?: undefined; + stateMutability?: undefined; + } | { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + anonymous?: undefined; + })[]; + static createInterface(): IERC20MetadataInterface; + static connect(address: string, signerOrProvider: Signer | Provider): IERC20Metadata; +} diff --git a/dist2/types/types/v3/factories/IERC20Minimal__factory.d.ts b/dist2/types/types/v3/factories/IERC20Minimal__factory.d.ts new file mode 100644 index 00000000000..7c0c55192ab --- /dev/null +++ b/dist2/types/types/v3/factories/IERC20Minimal__factory.d.ts @@ -0,0 +1,35 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { IERC20Minimal, IERC20MinimalInterface } from "../IERC20Minimal"; +export declare class IERC20Minimal__factory { + static readonly abi: ({ + anonymous: boolean; + inputs: { + indexed: boolean; + internalType: string; + name: string; + type: string; + }[]; + name: string; + type: string; + outputs?: undefined; + stateMutability?: undefined; + } | { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + anonymous?: undefined; + })[]; + static createInterface(): IERC20MinimalInterface; + static connect(address: string, signerOrProvider: Signer | Provider): IERC20Minimal; +} diff --git a/dist2/types/types/v3/factories/IERC20PermitAllowed__factory.d.ts b/dist2/types/types/v3/factories/IERC20PermitAllowed__factory.d.ts new file mode 100644 index 00000000000..41677f64bb8 --- /dev/null +++ b/dist2/types/types/v3/factories/IERC20PermitAllowed__factory.d.ts @@ -0,0 +1,18 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { IERC20PermitAllowed, IERC20PermitAllowedInterface } from "../IERC20PermitAllowed"; +export declare class IERC20PermitAllowed__factory { + static readonly abi: { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: never[]; + stateMutability: string; + type: string; + }[]; + static createInterface(): IERC20PermitAllowedInterface; + static connect(address: string, signerOrProvider: Signer | Provider): IERC20PermitAllowed; +} diff --git a/dist2/types/types/v3/factories/IERC721Permit__factory.d.ts b/dist2/types/types/v3/factories/IERC721Permit__factory.d.ts new file mode 100644 index 00000000000..f2f16933e54 --- /dev/null +++ b/dist2/types/types/v3/factories/IERC721Permit__factory.d.ts @@ -0,0 +1,35 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { IERC721Permit, IERC721PermitInterface } from "../IERC721Permit"; +export declare class IERC721Permit__factory { + static readonly abi: ({ + anonymous: boolean; + inputs: { + indexed: boolean; + internalType: string; + name: string; + type: string; + }[]; + name: string; + type: string; + outputs?: undefined; + stateMutability?: undefined; + } | { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + anonymous?: undefined; + })[]; + static createInterface(): IERC721PermitInterface; + static connect(address: string, signerOrProvider: Signer | Provider): IERC721Permit; +} diff --git a/dist2/types/types/v3/factories/IImmutableState__factory.d.ts b/dist2/types/types/v3/factories/IImmutableState__factory.d.ts new file mode 100644 index 00000000000..de38ce60118 --- /dev/null +++ b/dist2/types/types/v3/factories/IImmutableState__factory.d.ts @@ -0,0 +1,18 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { IImmutableState, IImmutableStateInterface } from "../IImmutableState"; +export declare class IImmutableState__factory { + static readonly abi: { + inputs: never[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + }[]; + static createInterface(): IImmutableStateInterface; + static connect(address: string, signerOrProvider: Signer | Provider): IImmutableState; +} diff --git a/dist2/types/types/v3/factories/IMulticallExtended__factory.d.ts b/dist2/types/types/v3/factories/IMulticallExtended__factory.d.ts new file mode 100644 index 00000000000..d778c6d1d8f --- /dev/null +++ b/dist2/types/types/v3/factories/IMulticallExtended__factory.d.ts @@ -0,0 +1,22 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { IMulticallExtended, IMulticallExtendedInterface } from "../IMulticallExtended"; +export declare class IMulticallExtended__factory { + static readonly abi: { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + }[]; + static createInterface(): IMulticallExtendedInterface; + static connect(address: string, signerOrProvider: Signer | Provider): IMulticallExtended; +} diff --git a/dist2/types/types/v3/factories/IMulticall__factory.d.ts b/dist2/types/types/v3/factories/IMulticall__factory.d.ts new file mode 100644 index 00000000000..184fc3399d7 --- /dev/null +++ b/dist2/types/types/v3/factories/IMulticall__factory.d.ts @@ -0,0 +1,22 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { IMulticall, IMulticallInterface } from "../IMulticall"; +export declare class IMulticall__factory { + static readonly abi: { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + }[]; + static createInterface(): IMulticallInterface; + static connect(address: string, signerOrProvider: Signer | Provider): IMulticall; +} diff --git a/dist2/types/types/v3/factories/INonfungiblePositionManager__factory.d.ts b/dist2/types/types/v3/factories/INonfungiblePositionManager__factory.d.ts new file mode 100644 index 00000000000..f6190ed9c79 --- /dev/null +++ b/dist2/types/types/v3/factories/INonfungiblePositionManager__factory.d.ts @@ -0,0 +1,55 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { INonfungiblePositionManager, INonfungiblePositionManagerInterface } from "../INonfungiblePositionManager"; +export declare class INonfungiblePositionManager__factory { + static readonly abi: ({ + anonymous: boolean; + inputs: { + indexed: boolean; + internalType: string; + name: string; + type: string; + }[]; + name: string; + type: string; + outputs?: undefined; + stateMutability?: undefined; + } | { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + anonymous?: undefined; + } | { + inputs: { + components: { + internalType: string; + name: string; + type: string; + }[]; + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + anonymous?: undefined; + })[]; + static createInterface(): INonfungiblePositionManagerInterface; + static connect(address: string, signerOrProvider: Signer | Provider): INonfungiblePositionManager; +} diff --git a/dist2/types/types/v3/factories/INonfungibleTokenPositionDescriptor__factory.d.ts b/dist2/types/types/v3/factories/INonfungibleTokenPositionDescriptor__factory.d.ts new file mode 100644 index 00000000000..d7a32e1078d --- /dev/null +++ b/dist2/types/types/v3/factories/INonfungibleTokenPositionDescriptor__factory.d.ts @@ -0,0 +1,22 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { INonfungibleTokenPositionDescriptor, INonfungibleTokenPositionDescriptorInterface } from "../INonfungibleTokenPositionDescriptor"; +export declare class INonfungibleTokenPositionDescriptor__factory { + static readonly abi: { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + }[]; + static createInterface(): INonfungibleTokenPositionDescriptorInterface; + static connect(address: string, signerOrProvider: Signer | Provider): INonfungibleTokenPositionDescriptor; +} diff --git a/dist2/types/types/v3/factories/IOracleSlippage__factory.d.ts b/dist2/types/types/v3/factories/IOracleSlippage__factory.d.ts new file mode 100644 index 00000000000..b7e5bc00443 --- /dev/null +++ b/dist2/types/types/v3/factories/IOracleSlippage__factory.d.ts @@ -0,0 +1,18 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { IOracleSlippage, IOracleSlippageInterface } from "../IOracleSlippage"; +export declare class IOracleSlippage__factory { + static readonly abi: { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: never[]; + stateMutability: string; + type: string; + }[]; + static createInterface(): IOracleSlippageInterface; + static connect(address: string, signerOrProvider: Signer | Provider): IOracleSlippage; +} diff --git a/dist2/types/types/v3/factories/IPeripheryImmutableState__factory.d.ts b/dist2/types/types/v3/factories/IPeripheryImmutableState__factory.d.ts new file mode 100644 index 00000000000..8a05531e16a --- /dev/null +++ b/dist2/types/types/v3/factories/IPeripheryImmutableState__factory.d.ts @@ -0,0 +1,18 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { IPeripheryImmutableState, IPeripheryImmutableStateInterface } from "../IPeripheryImmutableState"; +export declare class IPeripheryImmutableState__factory { + static readonly abi: { + inputs: never[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + }[]; + static createInterface(): IPeripheryImmutableStateInterface; + static connect(address: string, signerOrProvider: Signer | Provider): IPeripheryImmutableState; +} diff --git a/dist2/types/types/v3/factories/IPeripheryPaymentsExtended__factory.d.ts b/dist2/types/types/v3/factories/IPeripheryPaymentsExtended__factory.d.ts new file mode 100644 index 00000000000..c7398f0dbac --- /dev/null +++ b/dist2/types/types/v3/factories/IPeripheryPaymentsExtended__factory.d.ts @@ -0,0 +1,18 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { IPeripheryPaymentsExtended, IPeripheryPaymentsExtendedInterface } from "../IPeripheryPaymentsExtended"; +export declare class IPeripheryPaymentsExtended__factory { + static readonly abi: { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: never[]; + stateMutability: string; + type: string; + }[]; + static createInterface(): IPeripheryPaymentsExtendedInterface; + static connect(address: string, signerOrProvider: Signer | Provider): IPeripheryPaymentsExtended; +} diff --git a/dist2/types/types/v3/factories/IPeripheryPaymentsWithFeeExtended__factory.d.ts b/dist2/types/types/v3/factories/IPeripheryPaymentsWithFeeExtended__factory.d.ts new file mode 100644 index 00000000000..d871da4d11b --- /dev/null +++ b/dist2/types/types/v3/factories/IPeripheryPaymentsWithFeeExtended__factory.d.ts @@ -0,0 +1,18 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { IPeripheryPaymentsWithFeeExtended, IPeripheryPaymentsWithFeeExtendedInterface } from "../IPeripheryPaymentsWithFeeExtended"; +export declare class IPeripheryPaymentsWithFeeExtended__factory { + static readonly abi: { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: never[]; + stateMutability: string; + type: string; + }[]; + static createInterface(): IPeripheryPaymentsWithFeeExtendedInterface; + static connect(address: string, signerOrProvider: Signer | Provider): IPeripheryPaymentsWithFeeExtended; +} diff --git a/dist2/types/types/v3/factories/IPeripheryPaymentsWithFee__factory.d.ts b/dist2/types/types/v3/factories/IPeripheryPaymentsWithFee__factory.d.ts new file mode 100644 index 00000000000..da4a9c82be4 --- /dev/null +++ b/dist2/types/types/v3/factories/IPeripheryPaymentsWithFee__factory.d.ts @@ -0,0 +1,18 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { IPeripheryPaymentsWithFee, IPeripheryPaymentsWithFeeInterface } from "../IPeripheryPaymentsWithFee"; +export declare class IPeripheryPaymentsWithFee__factory { + static readonly abi: { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: never[]; + stateMutability: string; + type: string; + }[]; + static createInterface(): IPeripheryPaymentsWithFeeInterface; + static connect(address: string, signerOrProvider: Signer | Provider): IPeripheryPaymentsWithFee; +} diff --git a/dist2/types/types/v3/factories/IPeripheryPayments__factory.d.ts b/dist2/types/types/v3/factories/IPeripheryPayments__factory.d.ts new file mode 100644 index 00000000000..53324c7278c --- /dev/null +++ b/dist2/types/types/v3/factories/IPeripheryPayments__factory.d.ts @@ -0,0 +1,18 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { IPeripheryPayments, IPeripheryPaymentsInterface } from "../IPeripheryPayments"; +export declare class IPeripheryPayments__factory { + static readonly abi: { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: never[]; + stateMutability: string; + type: string; + }[]; + static createInterface(): IPeripheryPaymentsInterface; + static connect(address: string, signerOrProvider: Signer | Provider): IPeripheryPayments; +} diff --git a/dist2/types/types/v3/factories/IPoolInitializer__factory.d.ts b/dist2/types/types/v3/factories/IPoolInitializer__factory.d.ts new file mode 100644 index 00000000000..62901585ec8 --- /dev/null +++ b/dist2/types/types/v3/factories/IPoolInitializer__factory.d.ts @@ -0,0 +1,22 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { IPoolInitializer, IPoolInitializerInterface } from "../IPoolInitializer"; +export declare class IPoolInitializer__factory { + static readonly abi: { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + }[]; + static createInterface(): IPoolInitializerInterface; + static connect(address: string, signerOrProvider: Signer | Provider): IPoolInitializer; +} diff --git a/dist2/types/types/v3/factories/IQuoterV2__factory.d.ts b/dist2/types/types/v3/factories/IQuoterV2__factory.d.ts new file mode 100644 index 00000000000..2505a92f877 --- /dev/null +++ b/dist2/types/types/v3/factories/IQuoterV2__factory.d.ts @@ -0,0 +1,41 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { IQuoterV2, IQuoterV2Interface } from "../IQuoterV2"; +export declare class IQuoterV2__factory { + static readonly abi: ({ + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + } | { + inputs: { + components: { + internalType: string; + name: string; + type: string; + }[]; + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + })[]; + static createInterface(): IQuoterV2Interface; + static connect(address: string, signerOrProvider: Signer | Provider): IQuoterV2; +} diff --git a/dist2/types/types/v3/factories/IQuoter__factory.d.ts b/dist2/types/types/v3/factories/IQuoter__factory.d.ts new file mode 100644 index 00000000000..a2630bcb961 --- /dev/null +++ b/dist2/types/types/v3/factories/IQuoter__factory.d.ts @@ -0,0 +1,22 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { IQuoter, IQuoterInterface } from "../IQuoter"; +export declare class IQuoter__factory { + static readonly abi: { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + }[]; + static createInterface(): IQuoterInterface; + static connect(address: string, signerOrProvider: Signer | Provider): IQuoter; +} diff --git a/dist2/types/types/v3/factories/ISelfPermit__factory.d.ts b/dist2/types/types/v3/factories/ISelfPermit__factory.d.ts new file mode 100644 index 00000000000..7f25b0cdb2f --- /dev/null +++ b/dist2/types/types/v3/factories/ISelfPermit__factory.d.ts @@ -0,0 +1,18 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { ISelfPermit, ISelfPermitInterface } from "../ISelfPermit"; +export declare class ISelfPermit__factory { + static readonly abi: { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: never[]; + stateMutability: string; + type: string; + }[]; + static createInterface(): ISelfPermitInterface; + static connect(address: string, signerOrProvider: Signer | Provider): ISelfPermit; +} diff --git a/dist2/types/types/v3/factories/ISwapRouter02__factory.d.ts b/dist2/types/types/v3/factories/ISwapRouter02__factory.d.ts new file mode 100644 index 00000000000..e847f149986 --- /dev/null +++ b/dist2/types/types/v3/factories/ISwapRouter02__factory.d.ts @@ -0,0 +1,41 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { ISwapRouter02, ISwapRouter02Interface } from "../ISwapRouter02"; +export declare class ISwapRouter02__factory { + static readonly abi: ({ + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + } | { + inputs: { + components: { + internalType: string; + name: string; + type: string; + }[]; + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + })[]; + static createInterface(): ISwapRouter02Interface; + static connect(address: string, signerOrProvider: Signer | Provider): ISwapRouter02; +} diff --git a/dist2/types/types/v3/factories/ISwapRouter__factory.d.ts b/dist2/types/types/v3/factories/ISwapRouter__factory.d.ts new file mode 100644 index 00000000000..cd4eeabb067 --- /dev/null +++ b/dist2/types/types/v3/factories/ISwapRouter__factory.d.ts @@ -0,0 +1,37 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { ISwapRouter, ISwapRouterInterface } from "../ISwapRouter"; +export declare class ISwapRouter__factory { + static readonly abi: ({ + inputs: { + components: { + internalType: string; + name: string; + type: string; + }[]; + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + } | { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: never[]; + stateMutability: string; + type: string; + })[]; + static createInterface(): ISwapRouterInterface; + static connect(address: string, signerOrProvider: Signer | Provider): ISwapRouter; +} diff --git a/dist2/types/types/v3/factories/ITickLens__factory.d.ts b/dist2/types/types/v3/factories/ITickLens__factory.d.ts new file mode 100644 index 00000000000..79f2c5704d0 --- /dev/null +++ b/dist2/types/types/v3/factories/ITickLens__factory.d.ts @@ -0,0 +1,27 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { ITickLens, ITickLensInterface } from "../ITickLens"; +export declare class ITickLens__factory { + static readonly abi: { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + components: { + internalType: string; + name: string; + type: string; + }[]; + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + }[]; + static createInterface(): ITickLensInterface; + static connect(address: string, signerOrProvider: Signer | Provider): ITickLens; +} diff --git a/dist2/types/types/v3/factories/IUniswapV3Factory__factory.d.ts b/dist2/types/types/v3/factories/IUniswapV3Factory__factory.d.ts new file mode 100644 index 00000000000..0d28d64d978 --- /dev/null +++ b/dist2/types/types/v3/factories/IUniswapV3Factory__factory.d.ts @@ -0,0 +1,35 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { IUniswapV3Factory, IUniswapV3FactoryInterface } from "../IUniswapV3Factory"; +export declare class IUniswapV3Factory__factory { + static readonly abi: ({ + anonymous: boolean; + inputs: { + indexed: boolean; + internalType: string; + name: string; + type: string; + }[]; + name: string; + type: string; + outputs?: undefined; + stateMutability?: undefined; + } | { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + anonymous?: undefined; + })[]; + static createInterface(): IUniswapV3FactoryInterface; + static connect(address: string, signerOrProvider: Signer | Provider): IUniswapV3Factory; +} diff --git a/dist2/types/types/v3/factories/IUniswapV3FlashCallback__factory.d.ts b/dist2/types/types/v3/factories/IUniswapV3FlashCallback__factory.d.ts new file mode 100644 index 00000000000..c4256ca5718 --- /dev/null +++ b/dist2/types/types/v3/factories/IUniswapV3FlashCallback__factory.d.ts @@ -0,0 +1,18 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { IUniswapV3FlashCallback, IUniswapV3FlashCallbackInterface } from "../IUniswapV3FlashCallback"; +export declare class IUniswapV3FlashCallback__factory { + static readonly abi: { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: never[]; + stateMutability: string; + type: string; + }[]; + static createInterface(): IUniswapV3FlashCallbackInterface; + static connect(address: string, signerOrProvider: Signer | Provider): IUniswapV3FlashCallback; +} diff --git a/dist2/types/types/v3/factories/IUniswapV3MintCallback__factory.d.ts b/dist2/types/types/v3/factories/IUniswapV3MintCallback__factory.d.ts new file mode 100644 index 00000000000..4c7746b831e --- /dev/null +++ b/dist2/types/types/v3/factories/IUniswapV3MintCallback__factory.d.ts @@ -0,0 +1,18 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { IUniswapV3MintCallback, IUniswapV3MintCallbackInterface } from "../IUniswapV3MintCallback"; +export declare class IUniswapV3MintCallback__factory { + static readonly abi: { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: never[]; + stateMutability: string; + type: string; + }[]; + static createInterface(): IUniswapV3MintCallbackInterface; + static connect(address: string, signerOrProvider: Signer | Provider): IUniswapV3MintCallback; +} diff --git a/dist2/types/types/v3/factories/IUniswapV3PoolActions__factory.d.ts b/dist2/types/types/v3/factories/IUniswapV3PoolActions__factory.d.ts new file mode 100644 index 00000000000..778125ea623 --- /dev/null +++ b/dist2/types/types/v3/factories/IUniswapV3PoolActions__factory.d.ts @@ -0,0 +1,22 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { IUniswapV3PoolActions, IUniswapV3PoolActionsInterface } from "../IUniswapV3PoolActions"; +export declare class IUniswapV3PoolActions__factory { + static readonly abi: { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + }[]; + static createInterface(): IUniswapV3PoolActionsInterface; + static connect(address: string, signerOrProvider: Signer | Provider): IUniswapV3PoolActions; +} diff --git a/dist2/types/types/v3/factories/IUniswapV3PoolDeployer__factory.d.ts b/dist2/types/types/v3/factories/IUniswapV3PoolDeployer__factory.d.ts new file mode 100644 index 00000000000..f72ec47cedc --- /dev/null +++ b/dist2/types/types/v3/factories/IUniswapV3PoolDeployer__factory.d.ts @@ -0,0 +1,18 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { IUniswapV3PoolDeployer, IUniswapV3PoolDeployerInterface } from "../IUniswapV3PoolDeployer"; +export declare class IUniswapV3PoolDeployer__factory { + static readonly abi: { + inputs: never[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + }[]; + static createInterface(): IUniswapV3PoolDeployerInterface; + static connect(address: string, signerOrProvider: Signer | Provider): IUniswapV3PoolDeployer; +} diff --git a/dist2/types/types/v3/factories/IUniswapV3PoolDerivedState__factory.d.ts b/dist2/types/types/v3/factories/IUniswapV3PoolDerivedState__factory.d.ts new file mode 100644 index 00000000000..beeefdbd84e --- /dev/null +++ b/dist2/types/types/v3/factories/IUniswapV3PoolDerivedState__factory.d.ts @@ -0,0 +1,22 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { IUniswapV3PoolDerivedState, IUniswapV3PoolDerivedStateInterface } from "../IUniswapV3PoolDerivedState"; +export declare class IUniswapV3PoolDerivedState__factory { + static readonly abi: { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + }[]; + static createInterface(): IUniswapV3PoolDerivedStateInterface; + static connect(address: string, signerOrProvider: Signer | Provider): IUniswapV3PoolDerivedState; +} diff --git a/dist2/types/types/v3/factories/IUniswapV3PoolEvents__factory.d.ts b/dist2/types/types/v3/factories/IUniswapV3PoolEvents__factory.d.ts new file mode 100644 index 00000000000..2e7a45d088e --- /dev/null +++ b/dist2/types/types/v3/factories/IUniswapV3PoolEvents__factory.d.ts @@ -0,0 +1,18 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { IUniswapV3PoolEvents, IUniswapV3PoolEventsInterface } from "../IUniswapV3PoolEvents"; +export declare class IUniswapV3PoolEvents__factory { + static readonly abi: { + anonymous: boolean; + inputs: { + indexed: boolean; + internalType: string; + name: string; + type: string; + }[]; + name: string; + type: string; + }[]; + static createInterface(): IUniswapV3PoolEventsInterface; + static connect(address: string, signerOrProvider: Signer | Provider): IUniswapV3PoolEvents; +} diff --git a/dist2/types/types/v3/factories/IUniswapV3PoolImmutables__factory.d.ts b/dist2/types/types/v3/factories/IUniswapV3PoolImmutables__factory.d.ts new file mode 100644 index 00000000000..50c7e866a7f --- /dev/null +++ b/dist2/types/types/v3/factories/IUniswapV3PoolImmutables__factory.d.ts @@ -0,0 +1,18 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { IUniswapV3PoolImmutables, IUniswapV3PoolImmutablesInterface } from "../IUniswapV3PoolImmutables"; +export declare class IUniswapV3PoolImmutables__factory { + static readonly abi: { + inputs: never[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + }[]; + static createInterface(): IUniswapV3PoolImmutablesInterface; + static connect(address: string, signerOrProvider: Signer | Provider): IUniswapV3PoolImmutables; +} diff --git a/dist2/types/types/v3/factories/IUniswapV3PoolOwnerActions__factory.d.ts b/dist2/types/types/v3/factories/IUniswapV3PoolOwnerActions__factory.d.ts new file mode 100644 index 00000000000..6608be339cd --- /dev/null +++ b/dist2/types/types/v3/factories/IUniswapV3PoolOwnerActions__factory.d.ts @@ -0,0 +1,22 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { IUniswapV3PoolOwnerActions, IUniswapV3PoolOwnerActionsInterface } from "../IUniswapV3PoolOwnerActions"; +export declare class IUniswapV3PoolOwnerActions__factory { + static readonly abi: { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + }[]; + static createInterface(): IUniswapV3PoolOwnerActionsInterface; + static connect(address: string, signerOrProvider: Signer | Provider): IUniswapV3PoolOwnerActions; +} diff --git a/dist2/types/types/v3/factories/IUniswapV3PoolState__factory.d.ts b/dist2/types/types/v3/factories/IUniswapV3PoolState__factory.d.ts new file mode 100644 index 00000000000..f1208b0e3b0 --- /dev/null +++ b/dist2/types/types/v3/factories/IUniswapV3PoolState__factory.d.ts @@ -0,0 +1,22 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { IUniswapV3PoolState, IUniswapV3PoolStateInterface } from "../IUniswapV3PoolState"; +export declare class IUniswapV3PoolState__factory { + static readonly abi: { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + }[]; + static createInterface(): IUniswapV3PoolStateInterface; + static connect(address: string, signerOrProvider: Signer | Provider): IUniswapV3PoolState; +} diff --git a/dist2/types/types/v3/factories/IUniswapV3Pool__factory.d.ts b/dist2/types/types/v3/factories/IUniswapV3Pool__factory.d.ts new file mode 100644 index 00000000000..4277f4edeb5 --- /dev/null +++ b/dist2/types/types/v3/factories/IUniswapV3Pool__factory.d.ts @@ -0,0 +1,35 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { IUniswapV3Pool, IUniswapV3PoolInterface } from "../IUniswapV3Pool"; +export declare class IUniswapV3Pool__factory { + static readonly abi: ({ + anonymous: boolean; + inputs: { + indexed: boolean; + internalType: string; + name: string; + type: string; + }[]; + name: string; + type: string; + outputs?: undefined; + stateMutability?: undefined; + } | { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + anonymous?: undefined; + })[]; + static createInterface(): IUniswapV3PoolInterface; + static connect(address: string, signerOrProvider: Signer | Provider): IUniswapV3Pool; +} diff --git a/dist2/types/types/v3/factories/IUniswapV3Staker__factory.d.ts b/dist2/types/types/v3/factories/IUniswapV3Staker__factory.d.ts new file mode 100644 index 00000000000..a612a78dcee --- /dev/null +++ b/dist2/types/types/v3/factories/IUniswapV3Staker__factory.d.ts @@ -0,0 +1,45 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { IUniswapV3Staker, IUniswapV3StakerInterface } from "../IUniswapV3Staker"; +export declare class IUniswapV3Staker__factory { + static readonly abi: ({ + anonymous: boolean; + inputs: { + indexed: boolean; + internalType: string; + name: string; + type: string; + }[]; + name: string; + type: string; + outputs?: undefined; + stateMutability?: undefined; + } | { + inputs: ({ + components: { + internalType: string; + name: string; + type: string; + }[]; + internalType: string; + name: string; + type: string; + } | { + internalType: string; + name: string; + type: string; + components?: undefined; + })[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + anonymous?: undefined; + })[]; + static createInterface(): IUniswapV3StakerInterface; + static connect(address: string, signerOrProvider: Signer | Provider): IUniswapV3Staker; +} diff --git a/dist2/types/types/v3/factories/IUniswapV3SwapCallback__factory.d.ts b/dist2/types/types/v3/factories/IUniswapV3SwapCallback__factory.d.ts new file mode 100644 index 00000000000..8bfb65b0f11 --- /dev/null +++ b/dist2/types/types/v3/factories/IUniswapV3SwapCallback__factory.d.ts @@ -0,0 +1,18 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { IUniswapV3SwapCallback, IUniswapV3SwapCallbackInterface } from "../IUniswapV3SwapCallback"; +export declare class IUniswapV3SwapCallback__factory { + static readonly abi: { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: never[]; + stateMutability: string; + type: string; + }[]; + static createInterface(): IUniswapV3SwapCallbackInterface; + static connect(address: string, signerOrProvider: Signer | Provider): IUniswapV3SwapCallback; +} diff --git a/dist2/types/types/v3/factories/IV2SwapRouter__factory.d.ts b/dist2/types/types/v3/factories/IV2SwapRouter__factory.d.ts new file mode 100644 index 00000000000..740d7900223 --- /dev/null +++ b/dist2/types/types/v3/factories/IV2SwapRouter__factory.d.ts @@ -0,0 +1,22 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { IV2SwapRouter, IV2SwapRouterInterface } from "../IV2SwapRouter"; +export declare class IV2SwapRouter__factory { + static readonly abi: { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + }[]; + static createInterface(): IV2SwapRouterInterface; + static connect(address: string, signerOrProvider: Signer | Provider): IV2SwapRouter; +} diff --git a/dist2/types/types/v3/factories/IV3Migrator__factory.d.ts b/dist2/types/types/v3/factories/IV3Migrator__factory.d.ts new file mode 100644 index 00000000000..052401db9f1 --- /dev/null +++ b/dist2/types/types/v3/factories/IV3Migrator__factory.d.ts @@ -0,0 +1,37 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { IV3Migrator, IV3MigratorInterface } from "../IV3Migrator"; +export declare class IV3Migrator__factory { + static readonly abi: ({ + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + } | { + inputs: { + components: { + internalType: string; + name: string; + type: string; + }[]; + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: never[]; + stateMutability: string; + type: string; + })[]; + static createInterface(): IV3MigratorInterface; + static connect(address: string, signerOrProvider: Signer | Provider): IV3Migrator; +} diff --git a/dist2/types/types/v3/factories/IV3SwapRouter__factory.d.ts b/dist2/types/types/v3/factories/IV3SwapRouter__factory.d.ts new file mode 100644 index 00000000000..cc1ed16afc1 --- /dev/null +++ b/dist2/types/types/v3/factories/IV3SwapRouter__factory.d.ts @@ -0,0 +1,37 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { IV3SwapRouter, IV3SwapRouterInterface } from "../IV3SwapRouter"; +export declare class IV3SwapRouter__factory { + static readonly abi: ({ + inputs: { + components: { + internalType: string; + name: string; + type: string; + }[]; + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + } | { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: never[]; + stateMutability: string; + type: string; + })[]; + static createInterface(): IV3SwapRouterInterface; + static connect(address: string, signerOrProvider: Signer | Provider): IV3SwapRouter; +} diff --git a/dist2/types/types/v3/factories/IWETH9__factory.d.ts b/dist2/types/types/v3/factories/IWETH9__factory.d.ts new file mode 100644 index 00000000000..37ab3b3883b --- /dev/null +++ b/dist2/types/types/v3/factories/IWETH9__factory.d.ts @@ -0,0 +1,35 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { IWETH9, IWETH9Interface } from "../IWETH9"; +export declare class IWETH9__factory { + static readonly abi: ({ + anonymous: boolean; + inputs: { + indexed: boolean; + internalType: string; + name: string; + type: string; + }[]; + name: string; + type: string; + outputs?: undefined; + stateMutability?: undefined; + } | { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + anonymous?: undefined; + })[]; + static createInterface(): IWETH9Interface; + static connect(address: string, signerOrProvider: Signer | Provider): IWETH9; +} diff --git a/dist2/types/types/v3/factories/NFTDescriptor__factory.d.ts b/dist2/types/types/v3/factories/NFTDescriptor__factory.d.ts new file mode 100644 index 00000000000..733ab1f98e7 --- /dev/null +++ b/dist2/types/types/v3/factories/NFTDescriptor__factory.d.ts @@ -0,0 +1,37 @@ +import { Signer, ContractFactory, Overrides } from "ethers"; +import { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { NFTDescriptor, NFTDescriptorInterface } from "../NFTDescriptor"; +export declare class NFTDescriptor__factory extends ContractFactory { + constructor(signer?: Signer); + deploy(overrides?: Overrides & { + from?: string | Promise; + }): Promise; + getDeployTransaction(overrides?: Overrides & { + from?: string | Promise; + }): TransactionRequest; + attach(address: string): NFTDescriptor; + connect(signer: Signer): NFTDescriptor__factory; + static readonly bytecode = "0x615fdd610026600b82828239805160001a60731461001957fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c8063c49917d71461003a575b600080fd5b61004d610048366004613f08565b610063565b60405161005a919061464a565b60405180910390f35b6060600061007e83610079856101800151610170565b6103d1565b905060006100b2610092856060015161048c565b61009f866080015161048c565b6100ad876101a00151610644565b61065a565b905060006101006100c6866000015161068c565b6100d3876080015161048c565b6100e08860200151610644565b6100ed8960400151610644565b6100fb8a6101800151610170565b610767565b905060006101156101108761079d565b6109d8565b90506101458484848460405160200161013194939291906142c5565b6040516020818303038152906040526109d8565b6040516020016101559190614605565b6040516020818303038152906040529450505050505b919050565b606062ffffff82166101b6575060408051808201909152600281527f3025000000000000000000000000000000000000000000000000000000000000602082015261016b565b816000805b62ffffff8316156102065760ff8116156101d7576001016101f0565b600a62ffffff84160662ffffff166000146101f0576001015b600190910190600a62ffffff84160492506101bb565b61020e613e02565b60006005841061030357600060046102298660ff8716610b5d565b1015610236576001610239565b60005b60ff908116915061024d9085166001610b5d565b610258866005610b5d565b106102845761027f61026e60ff86166001610b5d565b610279876005610b5d565b90610b5d565b610287565b60005b60ff8516608085018190529092506102a6906001906102799085610bba565b60ff90811660a085015260808401516102cd9183916102c791166001610b5d565b90610bba565b60ff90811660408501526102f59082906102c7906102ee9088166001610bba565b8590610bba565b60ff16602084015250610373565b61030e600585610b5d565b60026080840181905290915061032c90600190610279908490610bba565b60ff90811660a084015261034e906103479085166002610bba565b8290610bba565b60ff1660208301819052610363906002610b5d565b60ff166040830152600160c08301525b6103926103838560ff8616610b5d565b62ffffff891690600a0a610c14565b8252600160e0830152600484116103aa5760006103b5565b6103b5846004610b5d565b60ff1660608301526103c682610c7b565b979650505050505050565b6060816103e1846060015161048c565b6103ee856080015161048c565b6104278660e00151156104065786610120015161040d565b8661010001515b8761016001518860c001518960a001518a60e00151610ea7565b6104608760e001511561043f57876101000151610446565b8761012001515b8861016001518960c001518a60a001518b60e00151610ea7565b6040516020016104749594939291906143ec565b60405160208183030381529060405290505b92915050565b6060816000805b82518160ff1610156104f057828160ff16815181106104ae57fe5b6020910101517fff0000000000000000000000000000000000000000000000000000000000000016601160f91b14156104e8576001909101905b600101610493565b5060ff81161561063c5760008160ff1683510167ffffffffffffffff8111801561051957600080fd5b506040519080825280601f01601f191660200182016040528015610544576020820181803683370190505b5090506000805b84518160ff16101561062f57848160ff168151811061056657fe5b6020910101517fff0000000000000000000000000000000000000000000000000000000000000016601160f91b14156105e4577f5c000000000000000000000000000000000000000000000000000000000000008383806001019450815181106105cc57fe5b60200101906001600160f81b031916908160001a9053505b848160ff16815181106105f357fe5b602001015160f81c60f81b83838060010194508151811061061057fe5b60200101906001600160f81b031916908160001a90535060010161054b565b508194505050505061016b565b509192915050565b60606104866001600160a01b0383166014610fd1565b6060838383866040516020016106739493929190614179565b60405160208183030381529060405290505b9392505050565b6060816106b157506040805180820190915260018152600360fc1b602082015261016b565b8160005b81156106c957600101600a820491506106b5565b60008167ffffffffffffffff811180156106e257600080fd5b506040519080825280601f01601f19166020018201604052801561070d576020820181803683370190505b50859350905060001982015b831561075e57600a840660300160f81b8282806001900393508151811061073c57fe5b60200101906001600160f81b031916908160001a905350600a84049350610719565b50949350505050565b606083858484896040516020016107829594939291906144ed565b60405160208183030381529060405290505b95945050505050565b60606000604051806102a001604052806107ba8560200151610644565b81526020016107cc8560400151610644565b8152602001846101a001516001600160a01b031681526020018460600151815260200184608001518152602001610807856101800151610170565b815260200184610100015160020b815260200184610120015160020b815260200184610160015160020b8152602001610850856101000151866101200151876101400151611159565b60000b81526020018460000151815260200161087a85602001516001600160a01b03166088611190565b815260200161089785604001516001600160a01b03166088611190565b81526020016108b485602001516001600160a01b03166000611190565b81526020016108d185604001516001600160a01b03166000611190565b81526020016109046108f686602001516001600160a01b03166010886000015161119f565b600060ff60106101126111bf565b815260200161093761092986604001516001600160a01b03166010886000015161119f565b600060ff60646101e46111bf565b815260200161095c6108f686602001516001600160a01b03166020886000015161119f565b815260200161098161092986604001516001600160a01b03166020886000015161119f565b81526020016109a66108f686602001516001600160a01b03166030886000015161119f565b81526020016109cb61092986604001516001600160a01b03166030886000015161119f565b9052905061068581611207565b60608151600014156109f9575060408051602081019091526000815261016b565b600060405180606001604052806040815260200161526b60409139905060006003845160020181610a2657fe5b04600402905060008160200167ffffffffffffffff81118015610a4857600080fd5b506040519080825280601f01601f191660200182016040528015610a73576020820181803683370190505b509050818152600183018586518101602084015b81831015610ae15760039283018051603f601282901c811687015160f890811b8552600c83901c8216880151811b6001860152600683901c8216880151811b60028601529116860151901b93820193909352600401610a87565b600389510660018114610afb5760028114610b2757610b4f565b7f3d3d000000000000000000000000000000000000000000000000000000000000600119830152610b4f565b7f3d000000000000000000000000000000000000000000000000000000000000006000198301525b509398975050505050505050565b600082821115610bb4576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600082820183811015610685576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000808211610c6a576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381610c7357fe5b049392505050565b60606000826020015160ff1667ffffffffffffffff81118015610c9d57600080fd5b506040519080825280601f01601f191660200182016040528015610cc8576020820181803683370190505b5090508260e0015115610d1e577f250000000000000000000000000000000000000000000000000000000000000081600183510381518110610d0657fe5b60200101906001600160f81b031916908160001a9053505b8260c0015115610d7b57600360fc1b81600081518110610d3a57fe5b60200101906001600160f81b031916908160001a905350601760f91b81600181518110610d6357fe5b60200101906001600160f81b031916908160001a9053505b608083015160ff165b60a0840151610d979060ff166001610bba565b811015610dce57603060f81b828281518110610daf57fe5b60200101906001600160f81b031916908160001a905350600101610d84565b505b825115610486576000836060015160ff16118015610dfb5750826060015160ff16836040015160ff16145b15610e3e5760408301805160ff600019820181169092528251601760f91b92849216908110610e2657fe5b60200101906001600160f81b031916908160001a9053505b8251610e5090603090600a9006610bba565b60f81b818460400180518091906001900360ff1660ff1681525060ff1681518110610e7757fe5b60200101906001600160f81b031916908160001a905350600a8360000181815181610e9e57fe5b04905250610dd0565b606084600281900b620d89e71981610ebb57fe5b050260020b8660020b1415610f15578115610ef1576040518060400160405280600381526020016209a82b60eb1b815250610f0e565b6040518060400160405280600381526020016226a4a760e91b8152505b9050610794565b84600281900b620d89e881610f2657fe5b050260020b8660020b1415610f7c578115610f5c576040518060400160405280600381526020016226a4a760e91b815250610f0e565b5060408051808201909152600381526209a82b60eb1b6020820152610794565b6000610f8787611496565b90508215610fbe57610fbb78010000000000000000000000000000000000000000000000006001600160a01b038316610c14565b90505b610fc98186866117e4565b915050610794565b606060008260020260020167ffffffffffffffff81118015610ff257600080fd5b506040519080825280601f01601f19166020018201604052801561101d576020820181803683370190505b509050600360fc1b8160008151811061103257fe5b60200101906001600160f81b031916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061107757fe5b60200101906001600160f81b031916908160001a905350600160028402015b6001811115611105577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106110ce57fe5b1a60f81b8282815181106110de57fe5b60200101906001600160f81b031916908160001a90535060049490941c9360001901611096565b508315610685576040805162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015290519081900360640190fd5b60008360020b8260020b12156111725750600019610685565b8260020b8260020b131561118857506001610685565b506000610685565b606061068583831c60036119b2565b600060ff826111ae8686611a79565b02816111b657fe5b06949350505050565b60606111fd6111f8846102c76111d5888a610b5d565b6111f26111e2888a610b5d565b6111ec8d8d610b5d565b90611a80565b90610c14565b61068c565b9695505050505050565b606061121282611ad9565b61122e836000015184602001518560600151866080015161218d565b611245846060015185608001518660a001516124b8565b6112638560c001518660e00151876101000151886101200151612608565b61128361127487610140015161068c565b8760c001518860e0015161295b565b6112968761014001518860400151612d8c565b6040516020018087805190602001908083835b602083106112c85780518252601f1990920191602091820191016112a9565b51815160209384036101000a600019018019909216911617905289519190930192890191508083835b602083106113105780518252601f1990920191602091820191016112f1565b51815160209384036101000a600019018019909216911617905288519190930192880191508083835b602083106113585780518252601f199092019160209182019101611339565b51815160209384036101000a600019018019909216911617905287519190930192870191508083835b602083106113a05780518252601f199092019160209182019101611381565b51815160209384036101000a600019018019909216911617905286519190930192860191508083835b602083106113e85780518252601f1990920191602091820191016113c9565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106114305780518252601f199092019160209182019101611411565b5181516020939093036101000a60001901801990911692169190911790527f3c2f7376673e000000000000000000000000000000000000000000000000000092019182525060408051808303601919018152600690920190529998505050505050505050565b60008060008360020b126114ad578260020b6114b5565b8260020b6000035b9050620d89e881111561150f576040805162461bcd60e51b815260206004820152600160248201527f5400000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60006001821661152357600160801b611535565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615611569576ffff97272373d413259a46990580e213a0260801c5b6004821615611588576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b60088216156115a7576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b60108216156115c6576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156115e5576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615611604576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615611623576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615611643576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615611663576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615611683576ff3392b0822b70005940c7a398e4b70f30260801c5b6108008216156116a3576fe7159475a2c29b7443b29c7fa6e889d90260801c5b6110008216156116c3576fd097f3bdfd2022b8845ad8f792aa58250260801c5b6120008216156116e3576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615611703576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615611723576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615611744576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615611764576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615611783576d2216e584f5fa1ea926041bedfe980260801c5b620800008216156117a0576b048a170391f7dc42444e8fa20260801c5b60008460020b13156117bb5780600019816117b757fe5b0490505b6401000000008106156117cf5760016117d2565b60005b60ff16602082901c0192505050919050565b606060006117f3858585612e04565b9050600061180b828368010000000000000000612f06565b90506c010000000000000000000000008210801561184c576118458272047bf19673df52e37f2410011d100000000000600160801b612f06565b9150611861565b61185e82620186a0600160801b612f06565b91505b8160005b811561187957600101600a82049150611865565b6000190160008061188a8684612fb5565b91509150801561189b576001909201915b6118a3613e02565b8515611910576118c26118ba602b60ff8716610b5d565b600790610bba565b60ff9081166020830152600260808301526118e8906001906102c790602b908816610b5d565b60ff90811660a0830152602082015161190391166001610b5d565b60ff166040820152611987565b60098460ff16106119595761192960ff85166004610b5d565b60ff166020820181905260056080830152611945906001610b5d565b60ff1660a082015260046040820152611987565b6006602082015260056040820181905261197e906001906102c79060ff881690610b5d565b60ff1660608201525b82815285151560c0820152600060e08201526119a281610c7b565b9c9b505050505050505050505050565b606060008260020267ffffffffffffffff811180156119d057600080fd5b506040519080825280601f01601f1916602001820160405280156119fb576020820181803683370190505b5080519091505b8015611a71577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110611a3757fe5b1a60f81b826001830381518110611a4a57fe5b60200101906001600160f81b031916908160001a90535060049490941c9360001901611a02565b509392505050565b1c60ff1690565b600082611a8f57506000610486565b82820282848281611a9c57fe5b04146106855760405162461bcd60e51b815260040180806020018281038252602181526020018061548a6021913960400191505060405180910390fd5b6060611b6e82610160015160405160200180806150446081913960810182805190602001908083835b60208310611b215780518252601f199092019160209182019101611b02565b6001836020036101000a038019825116818451168082178552505050505050905001806813979f1e17b9bb339f60b91b8152506009019150506040516020818303038152906040526109d8565b611cda836101e001518461020001518561018001516040516020018080614b816063913960630184805190602001908083835b60208310611bc05780518252601f199092019160209182019101611ba1565b51815160209384036101000a600019018019909216911617905265272063793d2760d01b919093019081528551600690910192860191508083835b60208310611c1a5780518252601f199092019160209182019101611bfb565b51815160209384036101000a60001901801990921691161790527f2720723d273132307078272066696c6c3d272300000000000000000000000000919093019081528451601390910192850191508083835b60208310611c8b5780518252601f199092019160209182019101611c6c565b6001836020036101000a038019825116818451168082178552505050505050905001806813979f1e17b9bb339f60b91b81525060090193505050506040516020818303038152906040526109d8565b611d2b846102200151856102400151866101a001516040516020018080614b8160639139606301848051906020019080838360208310611bc05780518252601f199092019160209182019101611ba1565b611e4a856102600151866102800151876101c001516040516020018080614b816063913960630184805190602001908083835b60208310611d7d5780518252601f199092019160209182019101611d5e565b51815160209384036101000a600019018019909216911617905265272063793d2760d01b919093019081528551600690910192860191508083835b60208310611dd75780518252601f199092019160209182019101611db8565b51815160001960209485036101000a019081169019919091161790527f2720723d273130307078272066696c6c3d272300000000000000000000000000939091019283528451601390930192908501915080838360208310611c8b5780518252601f199092019160209182019101611c6c565b6101608601516040516020018060566148fc8239605601602c6152ab82397f3c646566733e0000000000000000000000000000000000000000000000000000602c820152603201604b614ff98239604b0186805190602001908083835b60208310611ec65780518252601f199092019160209182019101611ea7565b6001836020036101000a03801982511681845116808217855250505050505090500180615b31603e9139603e0185805190602001908083835b60208310611f1e5780518252601f199092019160209182019101611eff565b6001836020036101000a038019825116818451168082178552505050505050905001806150c5603e9139603e0184805190602001908083835b60208310611f765780518252601f199092019160209182019101611f57565b5181516020939093036101000a60001901801990911692169190911790527f22202f3e00000000000000000000000000000000000000000000000000000000920191825250600401603b6147f48239603b0183805190602001908083835b60208310611ff35780518252601f199092019160209182019101611fd4565b6001836020036101000a03801982511681845116808217855250505050505090500180614c4160999139609901607f6156e28239607f016088615aa982396088016041614cda8239604101605d615c698239605d01607261578e8239607201604961475d823960490160be614f3b823960be016071614a0d8239607101607561562582396075016066614d1b823960660160a46152d7823960a4016085615b6f82397f3c6720636c69702d706174683d2275726c2823636f726e65727329223e00000060858201527f3c726563742066696c6c3d22000000000000000000000000000000000000000060a2820152825160ae9091019060208401908083835b602083106121115780518252601f1990920191602091820191016120f2565b6001836020036101000a03801982511681845116808217855250505050505090500180614d8160319139603101604e6147a68239604e01605d614be48239605d01604161522a8239604101605261510382396052016075615bf48239607501955050505050506040516020818303038152906040529050919050565b60608382858488878a896040516020018080615d4c60259139602501607d614ebe8239607d0189805190602001908083835b602083106121de5780518252601f1990920191602091820191016121bf565b51815160209384036101000a600019018019909216911617905264010714051160dd1b919093019081528a516005909101928b0191508083835b602083106122375780518252601f199092019160209182019101612218565b6001836020036101000a03801982511681845116808217855250505050505090500180614db2607991396079016086615cc6823960860187805190602001908083835b602083106122995780518252601f19909201916020918201910161227a565b51815160209384036101000a600019018019909216911617905264010714051160dd1b919093019081528851600590910192890191508083835b602083106122f25780518252601f1990920191602091820191016122d3565b6001836020036101000a0380198251168184511680821785525050505050509050018061498860859139608501607b6159178239607b0185805190602001908083835b602083106123545780518252601f199092019160209182019101612335565b51815160209384036101000a600019018019909216911617905264010714051160dd1b919093019081528651600590910192870191508083835b602083106123ad5780518252601f19909201916020918201910161238e565b6001836020036101000a03801982511681845116808217855250505050505090500180614ad2605d9139605d0160a3615582823960a30183805190602001908083835b6020831061240f5780518252601f1990920191602091820191016123f0565b51815160209384036101000a600019018019909216911617905264010714051160dd1b919093019081528451600590910192850191508083835b602083106124685780518252601f199092019160209182019101612449565b6001836020036101000a038019825116818451168082178552505050505050905001806146d2608b9139608b01985050505050505050506040516020818303038152906040529050949350505050565b6060838383604051602001808061482f60cd913960cd0184805190602001908083835b602083106124fa5780518252601f1990920191602091820191016124db565b6001836020036101000a03801982511681845116808217855250505050505090500180602f60f81b81525060010183805190602001908083835b602083106125535780518252601f199092019160209182019101612534565b6001836020036101000a03801982511681845116808217855250505050505090500180615ef56077913960770182805190602001908083835b602083106125ab5780518252601f19909201916020918201910161258c565b5181516020939093036101000a60001901801990911692169190911790526a1e17ba32bc3a1f1e17b39f60a91b920191825250600b016073615d958239607301935050505060405160208183030381529060405290509392505050565b606060008260000b60011461269a578260000b6000191461265e576040518060400160405280600581526020017f236e6f6e65000000000000000000000000000000000000000000000000000000815250612695565b6040518060400160405280600a81526020017f23666164652d646f776e000000000000000000000000000000000000000000008152505b6126d1565b6040518060400160405280600881526020017f23666164652d75700000000000000000000000000000000000000000000000008152505b905060006126e0878787613026565b9050818183836126ef88613274565b60405160200180807f3c67206d61736b3d2275726c2800000000000000000000000000000000000000815250600d0186805190602001908083835b602083106127495780518252601f19909201916020918201910161272a565b5181516020939093036101000a600019018019909116921691909117905261149160f11b920191825250600201607761537b823960770185805190602001908083835b602083106127ab5780518252601f19909201916020918201910161278c565b6001836020036101000a03801982511681845116808217855250505050505090500180614a7e60549139605401807f3c2f673e3c67206d61736b3d2275726c2800000000000000000000000000000081525060110184805190602001908083835b6020831061282b5780518252601f19909201916020918201910161280c565b5181516020939093036101000a600019018019909116921691909117905261149160f11b92019182525060020160296153f2823960290160456154458239604501807f3c7061746820643d22000000000000000000000000000000000000000000000081525060090183805190602001908083835b602083106128bf5780518252601f1990920191602091820191016128a0565b6001836020036101000a0380198251168184511680821785525050505050509050018061569a6048913960480182805190602001908083835b602083106129175780518252601f1990920191602091820191016128f8565b6001836020036101000a0380198251168184511680821785525050505050509050019550505050505060405160208183030381529060405292505050949350505050565b6060600061296884613748565b9050600061297584613748565b865183518251929350600490910191600a91820191016000806129988a8a613852565b915091506129ab8560040160070261068c565b8b6129bb8660040160070261068c565b896129cb8760040160070261068c565b8a87876040516020018080615761602d9139602d01806c1e3932b1ba103bb4b23a341e9160991b815250600d0189805190602001908083835b60208310612a235780518252601f199092019160209182019101612a04565b6001836020036101000a03801982511681845116808217855250505050505090500180615155603d9139603d01608d615e088239608d0188805190602001908083835b60208310612a855780518252601f199092019160209182019101612a66565b5181516020939093036101000a60001901801990911692169190911790526a1e17ba32bc3a1f1e17b39f60a91b920191825250600b01602d615fa48239602d01806c1e3932b1ba103bb4b23a341e9160991b815250600d0187805190602001908083835b60208310612b085780518252601f199092019160209182019101612ae9565b6001836020036101000a03801982511681845116808217855250505050505090500180615155603d9139603d016093614e2b823960930186805190602001908083835b60208310612b6a5780518252601f199092019160209182019101612b4b565b5181516020939093036101000a60001901801990911692169190911790526a1e17ba32bc3a1f1e17b39f60a91b920191825250600b01602d614b2f8239602d01806c1e3932b1ba103bb4b23a341e9160991b815250600d0185805190602001908083835b60208310612bed5780518252601f199092019160209182019101612bce565b6001836020036101000a03801982511681845116808217855250505050505090500180615155603d9139603d016093615992823960930184805190602001908083835b60208310612c4f5780518252601f199092019160209182019101612c30565b6001836020036101000a03801982511681845116808217855250505050505090500180615f6c603891396038016060615e958239606001606461551e82396064016025614b5c823960250183805190602001908083835b60208310612cc55780518252601f199092019160209182019101612ca6565b51815160209384036101000a60001901801990921691161790527f70782c2000000000000000000000000000000000000000000000000000000000919093019081528451600490910192850191508083835b60208310612d365780518252601f199092019160209182019101612d17565b6001836020036101000a0380198251168184511680821785525050505050509050018061495260369139603601985050505050505050506040516020818303038152906040529750505050505050509392505050565b6060612d988383613c83565b15612dee5760405160200180608d61588a8239608d0160736154ab823960730160716151b98239607101608a6158008239608a016084615a25823960840190506040516020818303038152906040529050610486565b5060408051602081019091526000815292915050565b600080612e1f612e1a60ff868116908616613ce6565b613d4b565b9050600081118015612e32575060128111155b15612ef3578260ff168460ff161115612e9c57612e66612e53826002610c14565b6001600160a01b03871690600a0a611a80565b91506002810660011415612e9757612e94827003298b075b4b6a5240945790619b37fd4a600160801b612f06565b91505b612eee565b612ebd612eaa826002610c14565b6001600160a01b03871690600a0a610c14565b91506002810660011415612eee57612eeb82600160801b7003298b075b4b6a5240945790619b37fd4a612f06565b91505b611a71565b50506001600160a01b0390921692915050565b6000808060001985870986860292508281109083900303905080612f3c5760008411612f3157600080fd5b508290049050610685565b808411612f4857600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b600080600060058460ff161115612fdd57612fda8560ff600419870116600a0a610c14565b94505b60006004600a8706119050612ff386600a610c14565b95508015613002578560010195505b85620186a0141561301857600a86049550600191505b5084925090505b9250929050565b606060008260020b85850360020b8161303b57fe5b05905060048160020b13613086576040518060400160405280601a81526020017f4d312031433431203431203130352031303520313435203134350000000000008152509150611a71565b60088160020b136130ce576040518060400160405280601981526020017f4d312031433333203439203937203131332031343520313435000000000000008152509150611a71565b60108160020b13613116576040518060400160405280601981526020017f4d312031433333203537203839203131332031343520313435000000000000008152509150611a71565b60208160020b1361315e576040518060400160405280601981526020017f4d312031433235203635203831203132312031343520313435000000000000008152509150611a71565b60408160020b136131a6576040518060400160405280601981526020017f4d312031433137203733203733203132392031343520313435000000000000008152509150611a71565b60808160020b136131ee576040518060400160405280601881526020017f4d312031433920383120363520313337203134352031343500000000000000008152509150611a71565b6101008160020b13613237576040518060400160405280601a81526020017f4d31203143312038392035372e352031343520313435203134350000000000008152509150611a71565b505060408051808201909152601881527f4d3120314331203937203439203134352031343520313435000000000000000060208201529392505050565b604080518082018252600281527f37330000000000000000000000000000000000000000000000000000000000006020808301919091528251808401845260038082527f313930000000000000000000000000000000000000000000000000000000000082840152845180860186528181527f32313700000000000000000000000000000000000000000000000000000000008185015285518087019096529085527f3333340000000000000000000000000000000000000000000000000000000000928501929092526060939091906001600087900b148061335b57508560000b600019145b15613552578560000b600019146133725781613374565b835b8660000b600019146133865781613388565b835b8760000b6000191461339a578361339c565b855b8860000b600019146133ae57836133b0565b855b60405160200180806b1e31b4b931b6329031bc1e9160a11b815250600c0185805190602001908083835b602083106133f95780518252601f1990920191602091820191016133da565b51815160209384036101000a600019018019909216911617905267383c111031bc9e9160c11b919093019081528651600890910192870191508083835b602083106134555780518252601f199092019160209182019101613436565b6001836020036101000a038019825116818451168082178552505050505050905001806151926027913960270183805190602001908083835b602083106134ad5780518252601f19909201916020918201910161348e565b51815160209384036101000a600019018019909216911617905267383c111031bc9e9160c11b919093019081528451600890910192850191508083835b602083106135095780518252601f1990920191602091820191016134ea565b6001836020036101000a0380198251168184511680821785525050505050509050018061541b602a9139602a01945050505050604051602081830303815290604052945061373f565b8383838360405160200180806b1e31b4b931b6329031bc1e9160a11b815250600c0185805190602001908083835b6020831061359f5780518252601f199092019160209182019101613580565b51815160209384036101000a600019018019909216911617905267383c111031bc9e9160c11b919093019081528651600890910192870191508083835b602083106135fb5780518252601f1990920191602091820191016135dc565b51815160209384036101000a60001901801990921691161790527f70782220723d22347078222066696c6c3d22776869746522202f3e0000000000919093019081526b1e31b4b931b6329031bc1e9160a11b601b8201528551602790910192860191508083835b602083106136815780518252601f199092019160209182019101613662565b51815160209384036101000a600019018019909216911617905267383c111031bc9e9160c11b919093019081528451600890910192850191508083835b602083106136dd5780518252601f1990920191602091820191016136be565b6001836020036101000a038019825116818451168082178552505050505050905001807f70782220723d22347078222066696c6c3d22776869746522202f3e0000000000815250601b0194505050505060405160208183030381529060405294505b50505050919050565b6060600060405180602001604052806000815250905060008360020b121561378e5782600019029250604051806040016040528060018152602001602d60f81b81525090505b8061379b8460020b61068c565b6040516020018083805190602001908083835b602083106137cd5780518252601f1990920191602091820191016137ae565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106138155780518252601f1990920191602091820191016137f6565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052915050919050565b60608060006002858501810b0590506201e847198160020b12156138ca57604051806040016040528060018152602001600760fb1b8152506040518060400160405280600181526020017f3700000000000000000000000000000000000000000000000000000000000000815250925092505061301f565b620124f7198160020b121561393357604051806040016040528060018152602001600760fb1b8152506040518060400160405280600481526020017f31302e3500000000000000000000000000000000000000000000000000000000815250925092505061301f565b6161a7198160020b121561399b57604051806040016040528060018152602001600760fb1b8152506040518060400160405280600581526020017f31342e3235000000000000000000000000000000000000000000000000000000815250925092505061301f565b611387198160020b1215613a04576040518060400160405280600281526020017f313000000000000000000000000000000000000000000000000000000000000081525060405180604001604052806002815260200161062760f31b815250925092505061301f565b60008160020b1215613a6b576040518060400160405280600281526020017f313100000000000000000000000000000000000000000000000000000000000081525060405180604001604052806002815260200161323160f01b815250925092505061301f565b6113888160020b1215613aee576040518060400160405280600281526020017f31330000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f3233000000000000000000000000000000000000000000000000000000000000815250925092505061301f565b6161a88160020b1215613b71576040518060400160405280600281526020017f31350000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f3235000000000000000000000000000000000000000000000000000000000000815250925092505061301f565b620124f88160020b1215613bda5760405180604001604052806002815260200161062760f31b8152506040518060400160405280600281526020017f3236000000000000000000000000000000000000000000000000000000000000815250925092505061301f565b6201e8488160020b1215613c285760405180604001604052806002815260200161323160f01b81525060405180604001604052806002815260200161323760f01b815250925092505061301f565b6040518060400160405280600281526020017f323400000000000000000000000000000000000000000000000000000000000081525060405180604001604052806002815260200161323760f01b815250925092505061301f565b6040805160208082018590526bffffffffffffffffffffffff19606085901b16828401528251603481840301815260549092019092528051910120600090613cca84613d62565b60020260010160ff1660001981613cdd57fe5b04119392505050565b6000818303818312801590613cfb5750838113155b80613d105750600083128015613d1057508381135b6106855760405162461bcd60e51b8152600401808060200182810382526024815260200180615d716024913960400191505060405180910390fd5b600080821215613d5e5781600003610486565b5090565b6000808211613d7057600080fd5b600160801b8210613d8357608091821c91015b680100000000000000008210613d9b57604091821c91015b6401000000008210613daf57602091821c91015b620100008210613dc157601091821c91015b6101008210613dd257600891821c91015b60108210613de257600491821c91015b60048210613df257600291821c91015b6002821061016b57600101919050565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915290565b80356001600160a01b038116811461016b57600080fd5b8035801515811461016b57600080fd5b8035600281900b811461016b57600080fd5b600082601f830112613e8f578081fd5b813567ffffffffffffffff811115613ea357fe5b613eb6601f8201601f191660200161467d565b818152846020838601011115613eca578283fd5b816020850160208301379081016020019190915292915050565b803562ffffff8116811461016b57600080fd5b803560ff8116811461016b57600080fd5b600060208284031215613f19578081fd5b813567ffffffffffffffff80821115613f30578283fd5b81840191506101c0808387031215613f46578384fd5b613f4f8161467d565b905082358152613f6160208401613e46565b6020820152613f7260408401613e46565b6040820152606083013582811115613f88578485fd5b613f9487828601613e7f565b606083015250608083013582811115613fab578485fd5b613fb787828601613e7f565b608083015250613fc960a08401613ef7565b60a0820152613fda60c08401613ef7565b60c0820152613feb60e08401613e5d565b60e08201526101009150614000828401613e6d565b828201526101209150614014828401613e6d565b828201526101409150614028828401613e6d565b82820152610160915061403c828401613e6d565b828201526101809150614050828401613ee4565b828201526101a09150614064828401613e46565b91810191909152949350505050565b600081516140858185602086016146a1565b9290920192915050565b7fe29aa0efb88f20444953434c41494d45523a204475652064696c6967656e636581527f20697320696d7065726174697665207768656e20617373657373696e6720746860208201527f6973204e46542e204d616b65207375726520746f6b656e20616464726573736560408201527f73206d617463682074686520657870656374656420746f6b656e732c2061732060608201527f746f6b656e2073796d626f6c73206d617920626520696d6974617465642e00006080820152609e0190565b7f5c6e5c6e00000000000000000000000000000000000000000000000000000000815260040190565b60007f54686973204e465420726570726573656e74732061206c69717569646974792082527f706f736974696f6e20696e206120556e69737761702056332000000000000000602083015285516141d7816039850160208a016146a1565b602d60f81b60399184019182015285516141f881603a840160208a016146a1565b7f20706f6f6c2e2000000000000000000000000000000000000000000000000000603a92909101918201527f546865206f776e6572206f662074686973204e46542063616e206d6f6469667960418201527f206f722072656465656d2074686520706f736974696f6e2e5c6e00000000000060618201527f5c6e506f6f6c20416464726573733a2000000000000000000000000000000000607b82015284516142a881608b8401602089016146a1565b612e3760f11b608b92909101918201526103c6608d820185614073565b60007f7b226e616d65223a220000000000000000000000000000000000000000000000825285516142fd816009850160208a016146a1565b7f222c20226465736372697074696f6e223a220000000000000000000000000000600991840191820152855161433a81601b840160208a016146a1565b855191019061435081601b8401602089016146a1565b7f222c2022696d616765223a202200000000000000000000000000000000000000601b92909101918201527f646174613a696d6167652f7376672b786d6c3b6261736536342c000000000000602882015283516143b48160428401602088016146a1565b7f227d000000000000000000000000000000000000000000000000000000000000604292909101918201526044019695505050505050565b60007f556e6973776170202d20000000000000000000000000000000000000000000008252865161442481600a850160208b016146a1565b80830190507f202d20000000000000000000000000000000000000000000000000000000000080600a830152875161446381600d850160208c016146a1565b602f60f81b600d9390910192830152865161448581600e850160208b016146a1565b600e92019182015284516144a08160118401602089016146a1565b7f3c3e0000000000000000000000000000000000000000000000000000000000006011929091019182015283516144de8160138401602088016146a1565b01601301979650505050505050565b60007f20416464726573733a2000000000000000000000000000000000000000000000808352875161452681600a860160208c016146a1565b612e3760f11b600a91850191820152875161454881600c840160208c016146a1565b01600c810191909152855190614565826016830160208a016146a1565b8181019150507f5c6e46656520546965723a200000000000000000000000000000000000000000601682015284516145a48160228401602089016146a1565b7f5c6e546f6b656e2049443a2000000000000000000000000000000000000000006022929091019182015283516145e281602e8401602088016146a1565b6145f86145f3602e83850101614150565b61408f565b9998505050505050505050565b60007f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000008252825161463d81601d8501602087016146a1565b91909101601d0192915050565b60006020825282518060208401526146698160408501602087016146a1565b601f01601f19169190910160400192915050565b60405181810167ffffffffffffffff8111828210171561469957fe5b604052919050565b60005b838110156146bc5781810151838201526020016146a4565b838111156146cb576000848401525b5050505056fe203c616e696d6174652061646469746976653d2273756d22206174747269627574654e616d653d2273746172744f6666736574222066726f6d3d2230252220746f3d22313030252220626567696e3d22307322206475723d223330732220726570656174436f756e743d22696e646566696e69746522202f3e3c2f74657874506174683e3c2f746578743e3c73746f70206f66667365743d222e39222073746f702d636f6c6f723d227768697465222073746f702d6f7061636974793d223022202f3e3c2f6c696e6561724772616469656e743e3c72656374207374796c653d2266696c7465723a2075726c28236631292220783d223070782220793d22307078222077696474683d22323930707822206865696768743d22353030707822202f3e3c6665496d61676520726573756c743d2270332220786c696e6b3a687265663d22646174613a696d6167652f7376672b786d6c3b6261736536342c3c67206d61736b3d2275726c2823666164652d73796d626f6c29223e3c726563742066696c6c3d226e6f6e652220783d223070782220793d22307078222077696474683d22323930707822206865696768743d22323030707822202f3e203c7465787420793d22373070782220783d2233327078222066696c6c3d2277686974652220666f6e742d66616d696c793d2227436f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d7765696768743d223230302220666f6e742d73697a653d2233367078223e3c7376672077696474683d2232393022206865696768743d22353030222076696577426f783d2230203020323930203530302220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f7376672270782c2030707829222063783d22307078222063793d223070782220723d22347078222066696c6c3d227768697465222f3e3c2f673e203c616e696d6174652061646469746976653d2273756d22206174747269627574654e616d653d2273746172744f6666736574222066726f6d3d2230252220746f3d22313030252220626567696e3d22307322206475723d223330732220726570656174436f756e743d22696e646566696e69746522202f3e203c2f74657874506174683e3c6d61736b2069643d22666164652d757022206d61736b436f6e74656e74556e6974733d226f626a656374426f756e64696e67426f78223e3c726563742077696474683d223122206865696768743d2231222066696c6c3d2275726c2823677261642d75702922202f3e3c2f6d61736b3e22207374726f6b653d227267626128302c302c302c302e332922207374726f6b652d77696474683d2233327078222066696c6c3d226e6f6e6522207374726f6b652d6c696e656361703d22726f756e6422202f3e203c616e696d6174652061646469746976653d2273756d22206174747269627574654e616d653d2273746172744f6666736574222066726f6d3d2230252220746f3d22313030252220626567696e3d22307322206475723d2233307322203c67207374796c653d227472616e73666f726d3a7472616e736c61746528323970782c20343434707829223e3c636972636c65207374796c653d227472616e73666f726d3a7472616e736c6174653364283c7376672077696474683d2732393027206865696768743d27353030272076696577426f783d2730203020323930203530302720786d6c6e733d27687474703a2f2f7777772e77332e6f72672f323030302f737667273e3c636972636c652063783d27203c67207374796c653d2266696c7465723a75726c2823746f702d726567696f6e2d626c7572293b207472616e73666f726d3a7363616c6528312e35293b207472616e73666f726d2d6f726967696e3a63656e74657220746f703b223e22202f3e3c6665426c656e64206d6f64653d226f7665726c61792220696e3d2270302220696e323d22703122202f3e3c6665426c656e64206d6f64653d226578636c7573696f6e2220696e323d22703222202f3e3c6665426c656e64206d6f64653d226f7665726c61792220696e323d2270332220726573756c743d22626c656e644f757422202f3e3c6665476175737369616e426c7572203c706174682069643d226d696e696d61702220643d224d3233342034343443323334203435372e393439203234322e323120343633203235332034363322202f3e3c6d61736b2069643d226e6f6e6522206d61736b436f6e74656e74556e6974733d226f626a656374426f756e64696e67426f78223e3c726563742077696474683d223122206865696768743d2231222066696c6c3d22776869746522202f3e3c2f6d61736b3e2220783d223070782220793d22307078222077696474683d22323930707822206865696768743d22353030707822202f3e203c616e696d6174652061646469746976653d2273756d22206174747269627574654e616d653d2273746172744f6666736574222066726f6d3d2230252220746f3d22313030252220626567696e3d22307322206475723d223330732220726570656174436f756e743d22696e646566696e69746522202f3e3c7465787420783d22313270782220793d22313770782220666f6e742d66616d696c793d2227436f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d73697a653d2231327078222066696c6c3d227768697465223e3c747370616e2066696c6c3d2272676261283235352c3235352c3235352c302e3629223e4d696e205469636b3a203c2f747370616e3e3c74657874506174682073746172744f66667365743d222d31303025222066696c6c3d2277686974652220666f6e742d66616d696c793d2227436f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d73697a653d22313070782220786c696e6b3a687265663d2223746578742d706174682d61223e3c6c696e6561724772616469656e742069643d22677261642d646f776e222078313d2230222078323d2231222079313d2230222079323d2231223e3c73746f70206f66667365743d22302e30222073746f702d636f6c6f723d227768697465222073746f702d6f7061636974793d223122202f3e3c73746f70206f66667365743d22302e39222073746f702d636f6c6f723d227768697465222073746f702d6f7061636974793d223022202f3e3c2f6c696e6561724772616469656e743e3c66696c7465722069643d226631223e3c6665496d61676520726573756c743d2270302220786c696e6b3a687265663d22646174613a696d6167652f7376672b786d6c3b6261736536342c3c7376672077696474683d2732393027206865696768743d27353030272076696577426f783d2730203020323930203530302720786d6c6e733d27687474703a2f2f7777772e77332e6f72672f323030302f737667273e3c726563742077696474683d27323930707827206865696768743d273530307078272066696c6c3d2723222f3e3c6665496d61676520726573756c743d2270322220786c696e6b3a687265663d22646174613a696d6167652f7376672b786d6c3b6261736536342c3c656c6c697073652063783d22353025222063793d22307078222072783d223138307078222072793d223132307078222066696c6c3d222330303022206f7061636974793d22302e383522202f3e3c2f673e707822206865696768743d2232367078222072783d22387078222072793d22387078222066696c6c3d227267626128302c302c302c302e362922202f3e70782220723d22347078222066696c6c3d22776869746522202f3e3c636972636c652063783d2231312e333437384c32342031324c31342e343334312031322e363532324c32322e333932332031384c31332e373831392031332e373831394c31382032322e333932334c31322e363532322031342e343334314c31322032344c31312e333437382031342e343334314c362032322e33393c726563742066696c6c3d226e6f6e652220783d223070782220793d22307078222077696474683d22323930707822206865696768743d22353030707822202f3e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f20786d6c6e733a786c696e6b3d27687474703a2f2f7777772e77332e6f72672f313939392f786c696e6b273e3c6c696e6561724772616469656e742069643d22677261642d73796d626f6c223e3c73746f70206f66667365743d22302e37222073746f702d636f6c6f723d227768697465222073746f702d6f7061636974793d223122202f3e3c73746f70206f66667365743d222e3935222073746f702d636f6c6f723d227768697465222073746f702d6f7061636974793d223022202f3e3c2f6c696e6561724772616469656e743e207374796c653d227472616e73666f726d3a7472616e736c61746528373270782c313839707829223e3c7265637420783d222d313670782220793d222d31367078222077696474683d22313830707822206865696768743d223138307078222066696c6c3d226e6f6e6522202f3e3c7061746820643d22207374796c653d227472616e73666f726d3a7472616e736c61746528373270782c313839707829223e70782220723d2232347078222066696c6c3d226e6f6e6522207374726f6b653d22776869746522202f3e3c7265637420783d222d313670782220793d222d31367078222077696474683d22313830707822206865696768743d223138307078222066696c6c3d226e6f6e6522202f3e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f773c673e3c70617468207374796c653d227472616e73666f726d3a7472616e736c617465283670782c367078292220643d224d313220304c31322e3635323220392e35363538374c313820312e363037374c31332e373831392031302e323138314c32322e3339323320364c31342e34333431203c70617468207374726f6b652d6c696e656361703d22726f756e642220643d224d38203943382e30303030342032322e393439342031362e32303939203238203237203238222066696c6c3d226e6f6e6522207374726f6b653d22776869746522202f3e20726570656174436f756e743d22696e646566696e69746522202f3e3c2f74657874506174683e3c74657874506174682073746172744f66667365743d222d353025222066696c6c3d2277686974652220666f6e742d66616d696c793d2227436f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d73697a653d22313070782220786c696e6b3a687265663d2223746578742d706174682d61223e3c6d61736b2069643d22666164652d646f776e22206d61736b436f6e74656e74556e6974733d226f626a656374426f756e64696e67426f78223e3c726563742077696474683d223122206865696768743d2231222066696c6c3d2275726c2823677261642d646f776e2922202f3e3c2f6d61736b3e22207374726f6b653d2272676261283235352c3235352c3235352c3129222066696c6c3d226e6f6e6522207374726f6b652d6c696e656361703d22726f756e6422202f3e3c2f673e696e3d22626c656e644f75742220737464446576696174696f6e3d22343222202f3e3c2f66696c7465723e203c636c6970506174682069643d22636f726e657273223e3c726563742077696474683d2232393022206865696768743d22353030222072783d223432222072793d22343222202f3e3c2f636c6970506174683e203c67207374796c653d227472616e73666f726d3a7472616e736c61746528323970782c20333834707829223e3c6c696e6561724772616469656e742069643d22677261642d7570222078313d2231222078323d2230222079313d2231222079323d2230223e3c73746f70206f66667365743d22302e30222073746f702d636f6c6f723d227768697465222073746f702d6f7061636974793d223122202f3e32334c31302e323138312031332e373831394c312e363037372031384c392e35363538372031322e363532324c302031324c392e35363538372031312e333437384c312e3630373720364c31302e323138312031302e323138314c3620312e363037374c31312e3334373820392e35363538374c313220305a222066696c6c3d22776869746522202f3e3c67207374796c653d227472616e73666f726d3a7472616e736c6174652832323670782c20333932707829223e3c726563742077696474683d223336707822206865696768743d2233367078222072783d22387078222072793d22387078222066696c6c3d226e6f6e6522207374726f6b653d2272676261283235352c3235352c3235352c302e322922202f3e3c74657874506174682073746172744f66667365743d22353025222066696c6c3d2277686974652220666f6e742d66616d696c793d2227436f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d73697a653d22313070782220786c696e6b3a687265663d2223746578742d706174682d61223e3c7465787420783d22313270782220793d22313770782220666f6e742d66616d696c793d2227436f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d73697a653d2231327078222066696c6c3d227768697465223e3c747370616e2066696c6c3d2272676261283235352c3235352c3235352c302e3629223e4d6178205469636b3a203c2f747370616e3e3c616e696d6174655472616e73666f726d206174747269627574654e616d653d227472616e73666f726d2220747970653d22726f74617465222066726f6d3d22302031382031382220746f3d2233363020313820313822206475723d223130732220726570656174436f756e743d22696e646566696e697465222f3e3c2f673e3c2f673e3c706174682069643d22746578742d706174682d612220643d224d34302031322048323530204132382032382030203020312032373820343020563436302041323820323820302030203120323530203438382048343020413238203238203020302031203132203436302056343020413238203238203020302031203430203132207a22202f3e222f3e3c6665496d61676520726573756c743d2270312220786c696e6b3a687265663d22646174613a696d6167652f7376672b786d6c3b6261736536342c3c6d61736b2069643d22666164652d73796d626f6c22206d61736b436f6e74656e74556e6974733d227573657253706163654f6e557365223e3c726563742077696474683d22323930707822206865696768743d223230307078222066696c6c3d2275726c2823677261642d73796d626f6c2922202f3e3c2f6d61736b3e3c2f646566733e3c7265637420783d22302220793d2230222077696474683d2232393022206865696768743d22353030222072783d223432222072793d223432222066696c6c3d227267626128302c302c302c302922207374726f6b653d2272676261283235352c3235352c3235352c302e322922202f3e3c2f673e3c66696c7465722069643d22746f702d726567696f6e2d626c7572223e3c6665476175737369616e426c757220696e3d22536f75726365477261706869632220737464446576696174696f6e3d22323422202f3e3c2f66696c7465723e3c2f74657874506174683e203c74657874506174682073746172744f66667365743d223025222066696c6c3d2277686974652220666f6e742d66616d696c793d2227436f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d73697a653d22313070782220786c696e6b3a687265663d2223746578742d706174682d61223e3c7465787420746578742d72656e646572696e673d226f7074696d697a655370656564223e5369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f773c7265637420783d2231362220793d223136222077696474683d2232353822206865696768743d22343638222072783d223236222072793d223236222066696c6c3d227267626128302c302c302c302922207374726f6b653d2272676261283235352c3235352c3235352c302e322922202f3e3c7465787420783d22313270782220793d22313770782220666f6e742d66616d696c793d2227436f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d73697a653d2231327078222066696c6c3d227768697465223e3c747370616e2066696c6c3d2272676261283235352c3235352c3235352c302e3629223e49443a203c2f747370616e3e3c726563742077696474683d223336707822206865696768743d2233367078222072783d22387078222072793d22387078222066696c6c3d226e6f6e6522207374726f6b653d2272676261283235352c3235352c3235352c302e322922202f3e3c2f746578743e3c7465787420793d2231313570782220783d2233327078222066696c6c3d2277686974652220666f6e742d66616d696c793d2227436f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d7765696768743d223230302220666f6e742d73697a653d2233367078223e3c2f746578743e3c2f673e3c67207374796c653d227472616e73666f726d3a7472616e736c6174652832323670782c20343333707829223e203c67207374796c653d227472616e73666f726d3a7472616e736c61746528323970782c20343134707829223ea164736f6c6343000706000a"; + static readonly abi: { + inputs: { + components: { + internalType: string; + name: string; + type: string; + }[]; + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + }[]; + static createInterface(): NFTDescriptorInterface; + static connect(address: string, signerOrProvider: Signer | Provider): NFTDescriptor; +} diff --git a/dist2/types/types/v3/factories/NonfungiblePositionManager__factory.d.ts b/dist2/types/types/v3/factories/NonfungiblePositionManager__factory.d.ts new file mode 100644 index 00000000000..26e308959b3 --- /dev/null +++ b/dist2/types/types/v3/factories/NonfungiblePositionManager__factory.d.ts @@ -0,0 +1,83 @@ +import { Signer, ContractFactory, Overrides } from "ethers"; +import { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { NonfungiblePositionManager, NonfungiblePositionManagerInterface } from "../NonfungiblePositionManager"; +export declare class NonfungiblePositionManager__factory extends ContractFactory { + constructor(signer?: Signer); + deploy(_factory: string, _WETH9: string, _tokenDescriptor_: string, overrides?: Overrides & { + from?: string | Promise; + }): Promise; + getDeployTransaction(_factory: string, _WETH9: string, _tokenDescriptor_: string, overrides?: Overrides & { + from?: string | Promise; + }): TransactionRequest; + attach(address: string): NonfungiblePositionManager; + connect(signer: Signer): NonfungiblePositionManager__factory; + static readonly bytecode = "0x610120604052600d80546001600160b01b0319166001176001600160b01b0316600160b01b1790553480156200003457600080fd5b50604051620062e9380380620062e98339810160408190526200005791620002db565b82826040518060400160405280601b81526020017f556e697377617020563320506f736974696f6e73204e46542d563100000000008152506040518060400160405280600a815260200169554e492d56332d504f5360b01b815250604051806040016040528060018152602001603160f81b8152508282620000e66301ffc9a760e01b6200018d60201b60201c565b8151620000fb90600690602085019062000212565b5080516200011190600790602084019062000212565b50620001246380ac58cd60e01b6200018d565b62000136635b5e139f60e01b6200018d565b6200014863780e9d6360e01b6200018d565b50508251602093840120608052805192019190912060a052506001600160601b0319606092831b811660c05290821b811660e05291901b166101005250620003249050565b6001600160e01b03198082161415620001ed576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826200024a576000855562000295565b82601f106200026557805160ff191683800117855562000295565b8280016001018555821562000295579182015b828111156200029557825182559160200191906001019062000278565b50620002a3929150620002a7565b5090565b5b80821115620002a35760008155600101620002a8565b80516001600160a01b0381168114620002d657600080fd5b919050565b600080600060608486031215620002f0578283fd5b620002fb84620002be565b92506200030b60208501620002be565b91506200031b60408501620002be565b90509250925092565b60805160a05160c05160601c60e05160601c6101005160601c615f40620003a960003980612a835250806102995280611718528061180e52806118965280613e5d5280613ea35280613f17525080610aa75280610dde5280610ea55280612a1d5280612b235280612e4452806136e15250806114ff5250806114de5250615f406000f3fe6080604052600436106102895760003560e01c80636352211e11610153578063ac9650d8116100cb578063d34879971161007f578063e985e9c511610064578063e985e9c5146106f5578063f3995c6714610715578063fc6f7865146107285761030d565b8063d3487997146106c2578063df2ab5bb146106e25761030d565b8063c2e3140a116100b0578063c2e3140a1461067a578063c45a01551461068d578063c87b56dd146106a25761030d565b8063ac9650d81461063a578063b88d4fde1461065a5761030d565b8063883164561161012257806399fbab881161010757806399fbab88146105cf578063a22cb46514610607578063a4a78f0c146106275761030d565b8063883164561461059757806395d89b41146105ba5761030d565b80636352211e1461052f5780636c0360eb1461054f57806370a08231146105645780637ac2ff7b146105845761030d565b806323b872dd1161020157806342966c68116101b557806349404b7c1161019a57806349404b7c146104e75780634aa4a4fc146104fa5780634f6ccce71461050f5761030d565b806342966c68146104c15780634659a494146104d45761030d565b806330adf81f116101e657806330adf81f146104775780633644e5151461048c57806342842e0e146104a15761030d565b806323b872dd146104375780632f745c59146104575761030d565b80630c49ccbe1161025857806313ead5621161023d57806313ead562146103e057806318160ddd146103f3578063219f5d17146104155761030d565b80630c49ccbe146103b757806312210e8a146103d85761030d565b806301ffc9a71461031257806306fdde0314610348578063081812fc1461036a578063095ea7b3146103975761030d565b3661030d57336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461030b576040805162461bcd60e51b815260206004820152600960248201527f4e6f742057455448390000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b600080fd5b34801561031e57600080fd5b5061033261032d3660046153a6565b61073b565b60405161033f919061591e565b60405180910390f35b34801561035457600080fd5b5061035d610776565b60405161033f9190615971565b34801561037657600080fd5b5061038a6103853660046156b8565b61080c565b60405161033f91906157e2565b3480156103a357600080fd5b5061030b6103b2366004615270565b610868565b6103ca6103c5366004615483565b61093e565b60405161033f929190615b42565b61030b610daa565b61038a6103ee366004615103565b610dbc565b3480156103ff57600080fd5b506104086110c9565b60405161033f9190615929565b610428610423366004615494565b6110da565b60405161033f93929190615afd565b34801561044357600080fd5b5061030b61045236600461515c565b611413565b34801561046357600080fd5b50610408610472366004615270565b61146a565b34801561048357600080fd5b50610408611495565b34801561049857600080fd5b506104086114b9565b3480156104ad57600080fd5b5061030b6104bc36600461515c565b611577565b61030b6104cf3660046156b8565b611592565b61030b6104e23660046152dc565b611661565b61030b6104f53660046156d0565b611714565b34801561050657600080fd5b5061038a611894565b34801561051b57600080fd5b5061040861052a3660046156b8565b6118b8565b34801561053b57600080fd5b5061038a61054a3660046156b8565b6118ce565b34801561055b57600080fd5b5061035d6118f6565b34801561057057600080fd5b5061040861057f3660046150af565b6118fb565b61030b6105923660046152dc565b611963565b6105aa6105a5366004615550565b611e0f565b60405161033f9493929190615b1e565b3480156105c657600080fd5b5061035d612370565b3480156105db57600080fd5b506105ef6105ea3660046156b8565b6123d1565b60405161033f9c9b9a99989796959493929190615b50565b34801561061357600080fd5b5061030b610622366004615243565b612600565b61030b6106353660046152dc565b612723565b61064d610648366004615337565b6127d5565b60405161033f91906158a0565b34801561066657600080fd5b5061030b61067536600461519c565b612915565b61030b6106883660046152dc565b612973565b34801561069957600080fd5b5061038a612a1b565b3480156106ae57600080fd5b5061035d6106bd3660046156b8565b612a3f565b3480156106ce57600080fd5b5061030b6106dd366004615717565b612b0e565b61030b6106f036600461529b565b612b8c565b34801561070157600080fd5b506103326107103660046150cb565b612c6f565b61030b6107233660046152dc565b612c9d565b6103ca61073636600461546c565b612d28565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526020819052604090205460ff165b919050565b60068054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108025780601f106107d757610100808354040283529160200191610802565b820191906000526020600020905b8154815290600101906020018083116107e557829003601f168201915b5050505050905090565b600061081782613246565b61083c5760405162461bcd60e51b8152600401610833906159bb565b60405180910390fd5b506000908152600c60205260409020546c0100000000000000000000000090046001600160a01b031690565b6000610873826118ce565b9050806001600160a01b0316836001600160a01b031614156108c65760405162461bcd60e51b8152600401808060200182810382526021815260200180615ee26021913960400191505060405180910390fd5b806001600160a01b03166108d8613253565b6001600160a01b031614806108f457506108f481610710613253565b61092f5760405162461bcd60e51b8152600401808060200182810382526038815260200180615e0c6038913960400191505060405180910390fd5b6109398383613257565b505050565b600080823561094d33826132db565b6109695760405162461bcd60e51b815260040161083390615984565b836080013580610977613377565b11156109ca576040805162461bcd60e51b815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b60006109dc6040870160208801615562565b6001600160801b0316116109ef57600080fd5b84356000908152600c602090815260409182902060018101549092600160801b9091046001600160801b031691610a2a918901908901615562565b6001600160801b0316816001600160801b03161015610a4857600080fd5b60018281015469ffffffffffffffffffff166000908152600b60209081526040808320815160608101835281546001600160a01b039081168252919095015490811692850192909252600160a01b90910462ffffff1690830152610acc7f00000000000000000000000000000000000000000000000000000000000000008361337b565b60018501549091506001600160a01b0382169063a34123a7906a01000000000000000000008104600290810b91600160681b9004900b610b1260408e0160208f01615562565b6040518463ffffffff1660e01b8152600401610b309392919061594b565b6040805180830381600087803b158015610b4957600080fd5b505af1158015610b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8191906156f4565b909850965060408901358810801590610b9e575088606001358710155b610bba5760405162461bcd60e51b815260040161083390615a18565b6001840154600090610bea9030906a01000000000000000000008104600290810b91600160681b9004900b613477565b9050600080836001600160a01b031663514ea4bf846040518263ffffffff1660e01b8152600401610c1b9190615929565b60a06040518083038186803b158015610c3357600080fd5b505afa158015610c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6b91906155ac565b50509250925050610c9087600201548303876001600160801b0316600160801b6134d1565b6004880180546fffffffffffffffffffffffffffffffff198116928e016001600160801b039182160181169290921790556003880154610cda91908303908816600160801b6134d1565b6004880180546001600160801b03808216938e01600160801b9283900482160116029190911790556002870182905560038701819055610d2060408d0160208e01615562565b86038760010160106101000a8154816001600160801b0302191690836001600160801b031602179055508b600001357f26f6a048ee9138f2c0ce266f322cb99228e8d619ae2bff30c67f8dcf9d2377b48d6020016020810190610d839190615562565b8d8d604051610d9493929190615afd565b60405180910390a2505050505050505050915091565b4715610dba57610dba3347613580565b565b6000836001600160a01b0316856001600160a01b031610610ddc57600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631698ee828686866040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018262ffffff168152602001935050505060206040518083038186803b158015610e6757600080fd5b505afa158015610e7b573d6000803e3d6000fd5b505050506040513d6020811015610e9157600080fd5b505190506001600160a01b038116610fe0577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a16712958686866040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018262ffffff1681526020019350505050602060405180830381600087803b158015610f3057600080fd5b505af1158015610f44573d6000803e3d6000fd5b505050506040513d6020811015610f5a57600080fd5b5051604080517ff637731d0000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015291519293509083169163f637731d9160248082019260009290919082900301818387803b158015610fc357600080fd5b505af1158015610fd7573d6000803e3d6000fd5b505050506110c1565b6000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561101b57600080fd5b505afa15801561102f573d6000803e3d6000fd5b505050506040513d60e081101561104557600080fd5b505190506001600160a01b0381166110bf57816001600160a01b031663f637731d846040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156110a657600080fd5b505af11580156110ba573d6000803e3d6000fd5b505050505b505b949350505050565b60006110d56002613689565b905090565b60008060008360a00135806110ed613377565b1115611140576040805162461bcd60e51b815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b84356000908152600c6020908152604080832060018082015469ffffffffffffffffffff81168652600b855283862084516060808201875282546001600160a01b039081168352929094015480831682890190815262ffffff600160a01b9092048216838901908152885161014081018a528451861681529151909416818a01529251168287015230828501526a01000000000000000000008304600290810b810b608080850191909152600160681b909404810b900b60a0830152958c013560c0820152938b013560e0850152908a0135610100840152890135610120830152929061122c90613694565b6001870154939a50919850965091506000906112669030906a01000000000000000000008104600290810b91600160681b9004900b613477565b9050600080836001600160a01b031663514ea4bf846040518263ffffffff1660e01b81526004016112979190615929565b60a06040518083038186803b1580156112af57600080fd5b505afa1580156112c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e791906155ac565b50509250925050611323866002015483038760010160109054906101000a90046001600160801b03166001600160801b0316600160801b6134d1565b6004870180546001600160801b0380821690930183166fffffffffffffffffffffffffffffffff19909116179055600387015460018801546113739291840391600160801b9182900416906134d1565b6004870180546001600160801b03600160801b80830482169094018116840291811691909117909155600288018490556003880183905560018801805483810483168e018316909302929091169190911790556040518b35907f3067048beee31b25b2f1681f88dac838c8bba36af25bfb2b7cf7473a5847e35f906113fd908d908d908d90615afd565b60405180910390a2505050505050509193909250565b61142461141e613253565b826132db565b61145f5760405162461bcd60e51b8152600401808060200182810382526031815260200180615f036031913960400191505060405180910390fd5b6109398383836138cf565b6001600160a01b038216600090815260016020526040812061148c9083613a1b565b90505b92915050565b7f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad81565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611526613a27565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b031681526020019550505050505060405160208183030381529060405280519060200120905090565b61093983838360405180602001604052806000815250612915565b8061159d33826132db565b6115b95760405162461bcd60e51b815260040161083390615984565b6000828152600c602052604090206001810154600160801b90046001600160801b03161580156115f4575060048101546001600160801b0316155b801561161257506004810154600160801b90046001600160801b0316155b61162e5760405162461bcd60e51b815260040161083390615a86565b6000838152600c602052604081208181556001810182905560028101829055600381018290556004015561093983613a2b565b604080517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e4810183905290516001600160a01b03881691638fcbaf0c9161010480830192600092919082900301818387803b1580156116f457600080fd5b505af1158015611708573d6000803e3d6000fd5b50505050505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561178357600080fd5b505afa158015611797573d6000803e3d6000fd5b505050506040513d60208110156117ad57600080fd5b5051905082811015611806576040805162461bcd60e51b815260206004820152601260248201527f496e73756666696369656e742057455448390000000000000000000000000000604482015290519081900360640190fd5b8015610939577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561187257600080fd5b505af1158015611886573d6000803e3d6000fd5b505050506109398282613580565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806118c6600284613af8565b509392505050565b600061148f82604051806060016040528060298152602001615e6e6029913960029190613b16565b606090565b60006001600160a01b0382166119425760405162461bcd60e51b815260040180806020018281038252602a815260200180615e44602a913960400191505060405180910390fd5b6001600160a01b038216600090815260016020526040902061148f90613689565b8361196c613377565b11156119bf576040805162461bcd60e51b815260206004820152600e60248201527f5065726d69742065787069726564000000000000000000000000000000000000604482015290519081900360640190fd5b60006119c96114b9565b7f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad88886119f581613b23565b604080516020808201969096526001600160a01b03909416848201526060840192909252608083015260a08083018a90528151808403909101815260c0830182528051908401207f190100000000000000000000000000000000000000000000000000000000000060e084015260e283019490945261010280830194909452805180830390940184526101229091019052815191012090506000611a98876118ce565b9050806001600160a01b0316886001600160a01b03161415611aeb5760405162461bcd60e51b8152600401808060200182810382526027815260200180615d6f6027913960400191505060405180910390fd5b611af481613b62565b15611ccf576040805160208082018790528183018690527fff0000000000000000000000000000000000000000000000000000000000000060f889901b16606083015282516041818403018152606183018085527f1626ba7e0000000000000000000000000000000000000000000000000000000090526065830186815260858401948552815160a585015281516001600160a01b03871695631626ba7e958995919260c59091019185019080838360005b83811015611bbe578181015183820152602001611ba6565b50505050905090810190601f168015611beb5780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b158015611c0957600080fd5b505afa158015611c1d573d6000803e3d6000fd5b505050506040513d6020811015611c3357600080fd5b50517fffffffff00000000000000000000000000000000000000000000000000000000167f1626ba7e0000000000000000000000000000000000000000000000000000000014611cca576040805162461bcd60e51b815260206004820152600c60248201527f556e617574686f72697a65640000000000000000000000000000000000000000604482015290519081900360640190fd5b611dfb565b600060018387878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611d2b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611d93576040805162461bcd60e51b815260206004820152601160248201527f496e76616c6964207369676e6174757265000000000000000000000000000000604482015290519081900360640190fd5b816001600160a01b0316816001600160a01b031614611df9576040805162461bcd60e51b815260206004820152600c60248201527f556e617574686f72697a65640000000000000000000000000000000000000000604482015290519081900360640190fd5b505b611e058888613257565b5050505050505050565b60008060008084610140013580611e24613377565b1115611e77576040805162461bcd60e51b815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b604080516101408101909152600090611f439080611e9860208b018b6150af565b6001600160a01b03168152602001896020016020810190611eb991906150af565b6001600160a01b03168152602001611ed760608b0160408c0161569e565b62ffffff168152306020820152604001611ef760808b0160608c016153e6565b60020b8152602001611f0f60a08b0160808c016153e6565b60020b81526020018960a0013581526020018960c0013581526020018960e001358152602001896101000135815250613694565b92975090955093509050611fb7611f6261014089016101208a016150af565b600d80547fffffffffffffffffffff000000000000000000000000000000000000000000008116600175ffffffffffffffffffffffffffffffffffffffffffff92831690810190921617909155975087613b68565b6000611fe230611fcd60808b0160608c016153e6565b611fdd60a08c0160808d016153e6565b613477565b9050600080836001600160a01b031663514ea4bf846040518263ffffffff1660e01b81526004016120139190615929565b60a06040518083038186803b15801561202b57600080fd5b505afa15801561203f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206391906155ac565b5050925092505060006120dc8560405180606001604052808e600001602081019061208e91906150af565b6001600160a01b031681526020018e60200160208101906120af91906150af565b6001600160a01b031681526020018e60400160208101906120d0919061569e565b62ffffff169052613c96565b905060405180610140016040528060006bffffffffffffffffffffffff16815260200160006001600160a01b031681526020018269ffffffffffffffffffff1681526020018c606001602081019061213491906153e6565b60020b815260200161214c60a08e0160808f016153e6565b60020b81526020018a6001600160801b0316815260200184815260200183815260200160006001600160801b0316815260200160006001600160801b0316815250600c60008c815260200190815260200160002060008201518160000160006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550602082015181600001600c6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160006101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff160217905550606082015181600101600a6101000a81548162ffffff021916908360020b62ffffff160217905550608082015181600101600d6101000a81548162ffffff021916908360020b62ffffff16021790555060a08201518160010160106101000a8154816001600160801b0302191690836001600160801b0316021790555060c0820151816002015560e082015181600301556101008201518160040160006101000a8154816001600160801b0302191690836001600160801b031602179055506101208201518160040160106101000a8154816001600160801b0302191690836001600160801b03160217905550905050897f3067048beee31b25b2f1681f88dac838c8bba36af25bfb2b7cf7473a5847e35f8a8a8a60405161235b93929190615afd565b60405180910390a25050505050509193509193565b60078054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108025780601f106107d757610100808354040283529160200191610802565b6000818152600c6020908152604080832081516101408101835281546bffffffffffffffffffffffff811682526001600160a01b036c010000000000000000000000009091041693810193909352600181015469ffffffffffffffffffff81169284018390526a01000000000000000000008104600290810b810b810b6060860152600160681b8204810b810b810b60808601526001600160801b03600160801b92839004811660a08701529083015460c0860152600383015460e0860152600490920154808316610100860152041661012083015282918291829182918291829182918291829182918291906124da5760405162461bcd60e51b815260040161083390615a4f565b6000600b6000836040015169ffffffffffffffffffff1669ffffffffffffffffffff1681526020019081526020016000206040518060600160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820160149054906101000a900462ffffff1662ffffff1662ffffff1681525050905081600001518260200151826000015183602001518460400151866060015187608001518860a001518960c001518a60e001518b61010001518c61012001519d509d509d509d509d509d509d509d509d509d509d509d50505091939597999b5091939597999b565b612608613253565b6001600160a01b0316826001600160a01b0316141561266e576040805162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b806005600061267b613253565b6001600160a01b0390811682526020808301939093526040918201600090812091871680825291909352912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016921515929092179091556126dd613253565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051600019916001600160a01b0389169163dd62ed3e91604480820192602092909190829003018186803b15801561278d57600080fd5b505afa1580156127a1573d6000803e3d6000fd5b505050506040513d60208110156127b757600080fd5b505110156127cd576127cd868686868686611661565b505050505050565b60608167ffffffffffffffff811180156127ee57600080fd5b5060405190808252806020026020018201604052801561282257816020015b606081526020019060019003908161280d5790505b50905060005b8281101561290e576000803086868581811061284057fe5b90506020028101906128529190615bef565b6040516128609291906157d2565b600060405180830381855af49150503d806000811461289b576040519150601f19603f3d011682016040523d82523d6000602084013e6128a0565b606091505b5091509150816128ec576044815110156128b957600080fd5b600481019050808060200190518101906128d39190615402565b60405162461bcd60e51b81526004016108339190615971565b808484815181106128f957fe5b60209081029190910101525050600101612828565b5092915050565b612926612920613253565b836132db565b6129615760405162461bcd60e51b8152600401808060200182810382526031815260200180615f036031913960400191505060405180910390fd5b61296d84848484613de6565b50505050565b604080517fdd62ed3e000000000000000000000000000000000000000000000000000000008152336004820152306024820152905186916001600160a01b0389169163dd62ed3e91604480820192602092909190829003018186803b1580156129db57600080fd5b505afa1580156129ef573d6000803e3d6000fd5b505050506040513d6020811015612a0557600080fd5b505110156127cd576127cd868686868686612c9d565b7f000000000000000000000000000000000000000000000000000000000000000081565b6060612a4a82613246565b612a5357600080fd5b6040517fe9dc63750000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e9dc637590612aba9030908690600401615932565b60006040518083038186803b158015612ad257600080fd5b505afa158015612ae6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261148f9190810190615402565b6000612b1c828401846154a5565b9050612b4c7f00000000000000000000000000000000000000000000000000000000000000008260000151613e38565b508415612b67578051516020820151612b6791903388613e5b565b8315612b8557612b8581600001516020015182602001513387613e5b565b5050505050565b6000836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612bdb57600080fd5b505afa158015612bef573d6000803e3d6000fd5b505050506040513d6020811015612c0557600080fd5b5051905082811015612c5e576040805162461bcd60e51b815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b801561296d5761296d848383613feb565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b604080517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c4810183905290516001600160a01b0388169163d505accf9160e480830192600092919082900301818387803b1580156116f457600080fd5b6000808235612d3733826132db565b612d535760405162461bcd60e51b815260040161083390615984565b6000612d656060860160408701615562565b6001600160801b03161180612d9257506000612d876080860160608701615562565b6001600160801b0316115b612d9b57600080fd5b600080612dae60408701602088016150af565b6001600160a01b031614612dd157612dcc60408601602087016150af565b612dd3565b305b85356000908152600c6020908152604080832060018082015469ffffffffffffffffffff168552600b8452828520835160608101855281546001600160a01b039081168252919092015490811694820194909452600160a01b90930462ffffff169183019190915292935090612e697f00000000000000000000000000000000000000000000000000000000000000008361337b565b600484015460018501549192506001600160801b0380821692600160801b92839004821692900416156130865760018501546040517fa34123a70000000000000000000000000000000000000000000000000000000081526001600160a01b0385169163a34123a791612f00916a01000000000000000000008104600290810b92600160681b909204900b9060009060040161594b565b6040805180830381600087803b158015612f1957600080fd5b505af1158015612f2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f5191906156f4565b5050600185015460009081906001600160a01b0386169063514ea4bf90612f969030906a01000000000000000000008104600290810b91600160681b9004900b613477565b6040518263ffffffff1660e01b8152600401612fb29190615929565b60a06040518083038186803b158015612fca57600080fd5b505afa158015612fde573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300291906155ac565b5050925092505061303e876002015483038860010160109054906101000a90046001600160801b03166001600160801b0316600160801b6134d1565b84019350613077876003015482038860010160109054906101000a90046001600160801b03166001600160801b0316600160801b6134d1565b60028801929092556003870155015b6000806001600160801b0384166130a360608e0160408f01615562565b6001600160801b0316116130c6576130c160608d0160408e01615562565b6130c8565b835b836001600160801b03168d60600160208101906130e59190615562565b6001600160801b0316116131085761310360808e0160608f01615562565b61310a565b835b60018901546040517f4f1eb3d80000000000000000000000000000000000000000000000000000000081529294509092506001600160a01b03871691634f1eb3d89161317d918c916a01000000000000000000008104600290810b92600160681b909204900b9088908890600401615839565b6040805180830381600087803b15801561319657600080fd5b505af11580156131aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131ce919061557e565b6004890180546fffffffffffffffffffffffffffffffff196001600160801b03918216600160801b878a0384160217168689038216179091556040519281169d50169a508c35907f40d0efd1a53d60ecbf40971b9daf7dc90178c3aadc7aab1765632738fa8b8f0190610d94908b9086908690615876565b600061148f60028361417b565b3390565b6000818152600c6020526040902080546bffffffffffffffffffffffff166c010000000000000000000000006001600160a01b0385169081029190911790915581906132a2826118ce565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006132e682613246565b6133215760405162461bcd60e51b815260040180806020018281038252602c815260200180615de0602c913960400191505060405180910390fd5b600061332c836118ce565b9050806001600160a01b0316846001600160a01b031614806133675750836001600160a01b031661335c8461080c565b6001600160a01b0316145b806110c157506110c18185612c6f565b4290565b600081602001516001600160a01b031682600001516001600160a01b0316106133a357600080fd5b50805160208083015160409384015184516001600160a01b0394851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b6bffffffffffffffffffffffff191660a183015260b58201939093527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d5808301919091528251808303909101815260f5909101909152805191012090565b604080516bffffffffffffffffffffffff19606086901b16602080830191909152600285810b60e890811b60348501529085900b901b60378301528251601a818403018152603a90920190925280519101205b9392505050565b600080806000198587098686029250828110908390030390508061350757600084116134fc57600080fd5b5082900490506134ca565b80841161351357600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106135cc5780518252601f1990920191602091820191016135ad565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461362e576040519150601f19603f3d011682016040523d82523d6000602084013e613633565b606091505b5050905080610939576040805162461bcd60e51b815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600061148f82614187565b6000806000806000604051806060016040528087600001516001600160a01b0316815260200187602001516001600160a01b03168152602001876040015162ffffff1681525090506137067f00000000000000000000000000000000000000000000000000000000000000008261337b565b91506000826001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561374357600080fd5b505afa158015613757573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061377b919061560d565b50505050505090506000613792886080015161418b565b905060006137a38960a0015161418b565b90506137ba8383838c60c001518d60e001516144d9565b9750505050816001600160a01b0316633c8a7d8d876060015188608001518960a00151896040518060400160405280888152602001336001600160a01b031681525060405160200161380c9190615abd565b6040516020818303038152906040526040518663ffffffff1660e01b815260040161383b9594939291906157f6565b6040805180830381600087803b15801561385457600080fd5b505af1158015613868573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061388c91906156f4565b610100880151919550935084108015906138ab57508561012001518310155b6138c75760405162461bcd60e51b815260040161083390615a18565b509193509193565b826001600160a01b03166138e2826118ce565b6001600160a01b0316146139275760405162461bcd60e51b8152600401808060200182810382526029815260200180615eb96029913960400191505060405180910390fd5b6001600160a01b03821661396c5760405162461bcd60e51b8152600401808060200182810382526024815260200180615d966024913960400191505060405180910390fd5b613977838383610939565b613982600082613257565b6001600160a01b03831660009081526001602052604090206139a4908261459d565b506001600160a01b03821660009081526001602052604090206139c790826145a9565b506139d4600282846145b5565b5080826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061148c83836145cb565b4690565b6000613a36826118ce565b9050613a4481600084610939565b613a4f600083613257565b6000828152600860205260409020546002600019610100600184161502019091160415613a8d576000828152600860205260408120613a8d9161501f565b6001600160a01b0381166000908152600160205260409020613aaf908361459d565b50613abb60028361462f565b5060405182906000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6000808080613b07868661463b565b909450925050505b9250929050565b60006110c18484846146b6565b6000908152600c6020526040902080546bffffffffffffffffffffffff19811660016bffffffffffffffffffffffff9283169081019092161790915590565b3b151590565b6001600160a01b038216613bc3576040805162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b613bcc81613246565b15613c1e576040805162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b613c2a60008383610939565b6001600160a01b0382166000908152600160205260409020613c4c90826145a9565b50613c59600282846145b5565b5060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001600160a01b0382166000908152600a602052604090205469ffffffffffffffffffff168061148f5750600d8054600169ffffffffffffffffffff76010000000000000000000000000000000000000000000080840482168381019092160275ffffffffffffffffffffffffffffffffffffffffffff909316929092179092556001600160a01b038085166000908152600a6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffff000000000000000000001686179055848352600b825291829020865181549085167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617825591870151950180549287015162ffffff16600160a01b027fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff969094169290911691909117939093161790915592915050565b613df18484846138cf565b613dfd84848484614780565b61296d5760405162461bcd60e51b8152600401808060200182810382526032815260200180615d3d6032913960400191505060405180910390fd5b6000613e44838361337b565b9050336001600160a01b0382161461148f57600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316148015613e9c5750804710155b15613fbe577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613efc57600080fd5b505af1158015613f10573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015613f8c57600080fd5b505af1158015613fa0573d6000803e3d6000fd5b505050506040513d6020811015613fb657600080fd5b5061296d9050565b6001600160a01b038316301415613fdf57613fda848383613feb565b61296d565b61296d8484848461495c565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b602083106140955780518252601f199092019160209182019101614076565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146140f7576040519150601f19603f3d011682016040523d82523d6000602084013e6140fc565b606091505b509150915081801561412a57508051158061412a575080806020019051602081101561412757600080fd5b50515b612b85576040805162461bcd60e51b815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600061148c8383614af4565b5490565b60008060008360020b126141a2578260020b6141aa565b8260020b6000035b9050620d89e8811115614204576040805162461bcd60e51b815260206004820152600160248201527f5400000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60006001821661421857600160801b61422a565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff169050600282161561425e576ffff97272373d413259a46990580e213a0260801c5b600482161561427d576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b600882161561429c576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b60108216156142bb576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156142da576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156142f9576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615614318576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615614338576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615614358576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615614378576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615614398576fe7159475a2c29b7443b29c7fa6e889d90260801c5b6110008216156143b8576fd097f3bdfd2022b8845ad8f792aa58250260801c5b6120008216156143d8576fa9f746462d870fdf8a65dc1f90e061e50260801c5b6140008216156143f8576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615614418576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615614439576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615614459576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615614478576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615614495576b048a170391f7dc42444e8fa20260801c5b60008460020b13156144b05780600019816144ac57fe5b0490505b6401000000008106156144c45760016144c7565b60005b60ff16602082901c0192505050919050565b6000836001600160a01b0316856001600160a01b031611156144f9579293925b846001600160a01b0316866001600160a01b0316116145245761451d858585614b0c565b9050614594565b836001600160a01b0316866001600160a01b0316101561458657600061454b878686614b0c565b9050600061455a878986614b78565b9050806001600160801b0316826001600160801b03161061457b578061457d565b815b92505050614594565b614591858584614b78565b90505b95945050505050565b600061148c8383614bbe565b600061148c8383614c84565b60006110c184846001600160a01b038516614cce565b8154600090821061460d5760405162461bcd60e51b8152600401808060200182810382526022815260200180615d1b6022913960400191505060405180910390fd5b82600001828154811061461c57fe5b9060005260206000200154905092915050565b600061148c8383614d65565b81546000908190831061467f5760405162461bcd60e51b8152600401808060200182810382526022815260200180615e976022913960400191505060405180910390fd5b600084600001848154811061469057fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b600082815260018401602052604081205482816147515760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156147165781810151838201526020016146fe565b50505050905090810190601f1680156147435780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5084600001600182038154811061476457fe5b9060005260206000209060020201600101549150509392505050565b6000614794846001600160a01b0316613b62565b6147a0575060016110c1565b60006148f17f150b7a02000000000000000000000000000000000000000000000000000000006147ce613253565b88878760405160240180856001600160a01b03168152602001846001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561483557818101518382015260200161481d565b50505050905090810190601f1680156148625780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051806060016040528060328152602001615d3d603291396001600160a01b0388169190614e39565b9050600081806020019051602081101561490a57600080fd5b50517fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001492505050949350505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000178152925182516000948594938a169392918291908083835b60208310614a0e5780518252601f1990920191602091820191016149ef565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614a70576040519150601f19603f3d011682016040523d82523d6000602084013e614a75565b606091505b5091509150818015614aa3575080511580614aa35750808060200190516020811015614aa057600080fd5b50515b6127cd576040805162461bcd60e51b815260206004820152600360248201527f5354460000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60009081526001919091016020526040902054151590565b6000826001600160a01b0316846001600160a01b03161115614b2c579192915b6000614b58856001600160a01b0316856001600160a01b03166c010000000000000000000000006134d1565b9050614594614b7384838888036001600160a01b03166134d1565b614e48565b6000826001600160a01b0316846001600160a01b03161115614b98579192915b6110c1614b73836c010000000000000000000000008787036001600160a01b03166134d1565b60008181526001830160205260408120548015614c7a5783546000198083019190810190600090879083908110614bf157fe5b9060005260206000200154905080876000018481548110614c0e57fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080614c3e57fe5b6001900381819060005260206000200160009055905586600101600087815260200190815260200160002060009055600194505050505061148f565b600091505061148f565b6000614c908383614af4565b614cc65750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561148f565b50600061148f565b600082815260018401602052604081205480614d335750506040805180820182528381526020808201848152865460018181018955600089815284812095516002909302909501918255915190820155865486845281880190925292909120556134ca565b82856000016001830381548110614d4657fe5b90600052602060002090600202016001018190555060009150506134ca565b60008181526001830160205260408120548015614c7a5783546000198083019190810190600090879083908110614d9857fe5b9060005260206000209060020201905080876000018481548110614db857fe5b600091825260208083208454600290930201918255600193840154918401919091558354825289830190526040902090840190558654879080614df757fe5b600082815260208082206002600019909401938402018281556001908101839055929093558881528982019092526040822091909155945061148f9350505050565b60606110c18484600085614e5e565b806001600160801b038116811461077157600080fd5b606082471015614e9f5760405162461bcd60e51b8152600401808060200182810382526026815260200180615dba6026913960400191505060405180910390fd5b614ea885613b62565b614ef9576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b60208310614f375780518252601f199092019160209182019101614f18565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614f99576040519150601f19603f3d011682016040523d82523d6000602084013e614f9e565b606091505b5091509150614fae828286614fb9565b979650505050505050565b60608315614fc85750816134ca565b825115614fd85782518084602001fd5b60405162461bcd60e51b81526020600482018181528451602484015284518593919283926044019190850190808383600083156147165781810151838201526020016146fe565b50805460018160011615610100020316600290046000825580601f106150455750615063565b601f0160209004906000526020600020908101906150639190615066565b50565b5b8082111561507b5760008155600101615067565b5090565b803561077181615cc4565b805161ffff8116811461077157600080fd5b803562ffffff8116811461077157600080fd5b6000602082840312156150c0578081fd5b81356134ca81615cc4565b600080604083850312156150dd578081fd5b82356150e881615cc4565b915060208301356150f881615cc4565b809150509250929050565b60008060008060808587031215615118578182fd5b843561512381615cc4565b9350602085013561513381615cc4565b92506151416040860161509c565b9150606085013561515181615cc4565b939692955090935050565b600080600060608486031215615170578081fd5b833561517b81615cc4565b9250602084013561518b81615cc4565b929592945050506040919091013590565b600080600080608085870312156151b1578182fd5b84356151bc81615cc4565b935060208501356151cc81615cc4565b925060408501359150606085013567ffffffffffffffff8111156151ee578182fd5b8501601f810187136151fe578182fd5b803561521161520c82615c76565b615c52565b818152886020838501011115615225578384fd5b81602084016020830137908101602001929092525092959194509250565b60008060408385031215615255578182fd5b823561526081615cc4565b915060208301356150f881615cd9565b60008060408385031215615282578182fd5b823561528d81615cc4565b946020939093013593505050565b6000806000606084860312156152af578081fd5b83356152ba81615cc4565b92506020840135915060408401356152d181615cc4565b809150509250925092565b60008060008060008060c087890312156152f4578384fd5b86356152ff81615cc4565b95506020870135945060408701359350606087013561531d81615d0b565b9598949750929560808101359460a0909101359350915050565b60008060208385031215615349578182fd5b823567ffffffffffffffff80821115615360578384fd5b818501915085601f830112615373578384fd5b813581811115615381578485fd5b8660208083028501011115615394578485fd5b60209290920196919550909350505050565b6000602082840312156153b7578081fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146134ca578182fd5b6000602082840312156153f7578081fd5b81356134ca81615ce7565b600060208284031215615413578081fd5b815167ffffffffffffffff811115615429578182fd5b8201601f81018413615439578182fd5b805161544761520c82615c76565b81815285602083850101111561545b578384fd5b614594826020830160208601615c98565b60006080828403121561547d578081fd5b50919050565b600060a0828403121561547d578081fd5b600060c0828403121561547d578081fd5b600081830360808112156154b7578182fd5b6040516040810167ffffffffffffffff82821081831117156154d557fe5b8160405260608412156154e6578485fd5b60a08301935081841081851117156154fa57fe5b50826040528435925061550c83615cc4565b91825260208401359161551e83615cc4565b8260608301526155306040860161509c565b608083015281526155436060850161507f565b6020820152949350505050565b6000610160828403121561547d578081fd5b600060208284031215615573578081fd5b81356134ca81615cf6565b60008060408385031215615590578182fd5b825161559b81615cf6565b60208401519092506150f881615cf6565b600080600080600060a086880312156155c3578283fd5b85516155ce81615cf6565b80955050602086015193506040860151925060608601516155ee81615cf6565b60808701519092506155ff81615cf6565b809150509295509295909350565b600080600080600080600060e0888a031215615627578485fd5b875161563281615cc4565b602089015190975061564381615ce7565b95506156516040890161508a565b945061565f6060890161508a565b935061566d6080890161508a565b925060a088015161567d81615d0b565b60c089015190925061568e81615cd9565b8091505092959891949750929550565b6000602082840312156156af578081fd5b61148c8261509c565b6000602082840312156156c9578081fd5b5035919050565b600080604083850312156156e2578182fd5b8235915060208301356150f881615cc4565b60008060408385031215615706578182fd5b505080516020909101519092909150565b6000806000806060858703121561572c578182fd5b8435935060208501359250604085013567ffffffffffffffff80821115615751578384fd5b818701915087601f830112615764578384fd5b813581811115615772578485fd5b886020828501011115615783578485fd5b95989497505060200194505050565b600081518084526157aa816020860160208601615c98565b601f01601f19169290920160200192915050565b60020b9052565b6001600160801b03169052565b6000828483379101908152919050565b6001600160a01b0391909116815260200190565b60006001600160a01b03871682528560020b60208301528460020b60408301526001600160801b038416606083015260a06080830152614fae60a0830184615792565b6001600160a01b03959095168552600293840b60208601529190920b60408401526001600160801b03918216606084015216608082015260a00190565b6001600160a01b039390931683526001600160801b03918216602084015216604082015260600190565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015615911577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526158ff858351615792565b945092850192908501906001016158c5565b5092979650505050505050565b901515815260200190565b90815260200190565b6001600160a01b03929092168252602082015260400190565b600293840b81529190920b60208201526001600160801b03909116604082015260600190565b60006020825261148c6020830184615792565b6020808252600c908201527f4e6f7420617070726f7665640000000000000000000000000000000000000000604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201527f697374656e7420746f6b656e0000000000000000000000000000000000000000606082015260800190565b60208082526014908201527f507269636520736c69707061676520636865636b000000000000000000000000604082015260600190565b60208082526010908201527f496e76616c696420746f6b656e20494400000000000000000000000000000000604082015260600190565b6020808252600b908201527f4e6f7420636c6561726564000000000000000000000000000000000000000000604082015260600190565b815180516001600160a01b03908116835260208083015182168185015260409283015162ffffff1692840192909252920151909116606082015260800190565b6001600160801b039390931683526020830191909152604082015260600190565b9384526001600160801b039290921660208401526040830152606082015260800190565b918252602082015260400190565b6bffffffffffffffffffffffff8d1681526001600160a01b038c811660208301528b811660408301528a16606082015262ffffff89166080820152600288900b60a08201526101808101615ba760c08301896157be565b615bb460e08301886157c5565b8561010083015284610120830152615bd06101408301856157c5565b615bde6101608301846157c5565b9d9c50505050505050505050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615c23578283fd5b83018035915067ffffffffffffffff821115615c3d578283fd5b602001915036819003821315613b0f57600080fd5b60405181810167ffffffffffffffff81118282101715615c6e57fe5b604052919050565b600067ffffffffffffffff821115615c8a57fe5b50601f01601f191660200190565b60005b83811015615cb3578181015183820152602001615c9b565b8381111561296d5750506000910152565b6001600160a01b038116811461506357600080fd5b801515811461506357600080fd5b8060020b811461506357600080fd5b6001600160801b038116811461506357600080fd5b60ff8116811461506357600080fdfe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724552433732315065726d69743a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e7366657220746f20746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c4552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e64734552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564a164736f6c6343000706000a"; + static readonly abi: ({ + inputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + anonymous?: undefined; + name?: undefined; + outputs?: undefined; + } | { + anonymous: boolean; + inputs: { + indexed: boolean; + internalType: string; + name: string; + type: string; + }[]; + name: string; + type: string; + stateMutability?: undefined; + outputs?: undefined; + } | { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + anonymous?: undefined; + } | { + inputs: { + components: { + internalType: string; + name: string; + type: string; + }[]; + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + anonymous?: undefined; + } | { + stateMutability: string; + type: string; + inputs?: undefined; + anonymous?: undefined; + name?: undefined; + outputs?: undefined; + })[]; + static createInterface(): NonfungiblePositionManagerInterface; + static connect(address: string, signerOrProvider: Signer | Provider): NonfungiblePositionManager; +} diff --git a/dist2/types/types/v3/factories/NonfungibleTokenPositionDescriptor__factory.d.ts b/dist2/types/types/v3/factories/NonfungibleTokenPositionDescriptor__factory.d.ts new file mode 100644 index 00000000000..19e42701ac5 --- /dev/null +++ b/dist2/types/types/v3/factories/NonfungibleTokenPositionDescriptor__factory.d.ts @@ -0,0 +1,46 @@ +import { Signer, BytesLike, ContractFactory, Overrides } from "ethers"; +import { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { NonfungibleTokenPositionDescriptor, NonfungibleTokenPositionDescriptorInterface } from "../NonfungibleTokenPositionDescriptor"; +export declare class NonfungibleTokenPositionDescriptor__factory extends ContractFactory { + constructor(linkLibraryAddresses: NonfungibleTokenPositionDescriptorLibraryAddresses, signer?: Signer); + static linkBytecode(linkLibraryAddresses: NonfungibleTokenPositionDescriptorLibraryAddresses): string; + deploy(_WETH9: string, _nativeCurrencyLabelBytes: BytesLike, overrides?: Overrides & { + from?: string | Promise; + }): Promise; + getDeployTransaction(_WETH9: string, _nativeCurrencyLabelBytes: BytesLike, overrides?: Overrides & { + from?: string | Promise; + }): TransactionRequest; + attach(address: string): NonfungibleTokenPositionDescriptor; + connect(signer: Signer): NonfungibleTokenPositionDescriptor__factory; + static readonly bytecode = "0x60c060405234801561001057600080fd5b5060405161158038038061158083398101604081905261002f9161004a565b60609190911b6001600160601b03191660805260a052610082565b6000806040838503121561005c578182fd5b82516001600160a01b0381168114610072578283fd5b6020939093015192949293505050565b60805160601c60a0516114bf6100c16000398061028f52806102c35280610377525080610107528061014c528061061a528061066e52506114bf6000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c8063a18246e211610050578063a18246e2146100d5578063b7af3cdc146100dd578063e9dc6375146100f257610072565b80634aa4a4fc146100775780637e5af771146100955780639d7b0ea8146100b5575b600080fd5b61007f610105565b60405161008c9190611311565b60405180910390f35b6100a86100a3366004611017565b610129565b60405161008c9190611325565b6100c86100c3366004611057565b610148565b60405161008c9190611330565b6100c861028d565b6100e56102b1565b60405161008c9190611339565b6100e5610100366004611057565b6103d7565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006101358383610148565b61013f8584610148565b13949350505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316141561018d5750606319610287565b8160011415610283576001600160a01b03831673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4814156101c4575061012c610287565b6001600160a01b03831673dac17f958d2ee523a2206206994597c13d831ec714156101f1575060c8610287565b6001600160a01b038316736b175474e89094c44da98b954eedeac495271d0f141561021e57506064610287565b6001600160a01b038316738daebade922df735c38c80c7ebd708af50815faa141561024c575060c719610287565b6001600160a01b038316732260fac5e5542a773aa44fbcfedf7c193bc2c599141561027b575061012b19610287565b506000610287565b5060005b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b606060005b60208110801561031657507f000000000000000000000000000000000000000000000000000000000000000081602081106102ed57fe5b1a60f81b7fff000000000000000000000000000000000000000000000000000000000000001615155b15610323576001016102b6565b60008167ffffffffffffffff8111801561033c57600080fd5b506040519080825280601f01601f191660200182016040528015610367576020820181803683370190505b50905060005b828110156103d0577f000000000000000000000000000000000000000000000000000000000000000081602081106103a157fe5b1a60f81b8282815181106103b157fe5b60200101906001600160f81b031916908160001a90535060010161036d565b5091505090565b60606000806000806000876001600160a01b03166399fbab88886040518263ffffffff1660e01b815260040161040d9190611330565b6101806040518083038186803b15801561042657600080fd5b505afa15801561043a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045e91906111dc565b5050505050965096509650965096505050600061051c896001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156104ad57600080fd5b505afa1580156104c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e59190610ff4565b6040518060600160405280896001600160a01b03168152602001886001600160a01b031681526020018762ffffff168152506108e7565b9050600061052d87876100a36109e3565b90506000811561053d578761053f565b865b90506000821561054f5787610551565b885b90506000846001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561058e57600080fd5b505afa1580156105a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c69190611133565b505050505091505073__$cea9be979eee3d87fb124d6cbb244bb0b5$__63c49917d7604051806101c001604052808f8152602001866001600160a01b03168152602001856001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b03161461065f5761065a876109e7565b610667565b6106676102b1565b81526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b0316146106b3576106ae866109e7565b6106bb565b6106bb6102b1565b8152602001866001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156106f957600080fd5b505afa15801561070d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073191906111c2565b60ff168152602001856001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561077257600080fd5b505afa158015610786573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107aa91906111c2565b60ff16815260200187151581526020018a60020b81526020018960020b81526020018460020b8152602001886001600160a01b031663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561080e57600080fd5b505afa158015610822573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108469190611082565b60020b81526020018b62ffffff168152602001886001600160a01b03168152506040518263ffffffff1660e01b8152600401610882919061134c565b60006040518083038186803b15801561089a57600080fd5b505af41580156108ae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108d6919081019061109c565b9d9c50505050505050505050505050565b600081602001516001600160a01b031682600001516001600160a01b03161061090f57600080fd5b50805160208083015160409384015184516001600160a01b0394851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b6bffffffffffffffffffffffff191660a183015260b58201939093527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d5808301919091528251808303909101815260f5909101909152805191012090565b4690565b60606000610a15837f95d89b4100000000000000000000000000000000000000000000000000000000610a3a565b9050805160001415610a3257610a2a83610c8f565b915050610a35565b90505b919050565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000085161781529151815160609360009384936001600160a01b03891693919290918291908083835b60208310610ad35780518252601f199092019160209182019101610ab4565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114610b33576040519150601f19603f3d011682016040523d82523d6000602084013e610b38565b606091505b5091509150811580610b4957508051155b15610b67576040518060200160405280600081525092505050610287565b805160201415610b9f576000818060200190516020811015610b8857600080fd5b50519050610b9581610c9c565b9350505050610287565b604081511115610c7757808060200190516020811015610bbe57600080fd5b8101908080516040519392919084640100000000821115610bde57600080fd5b908301906020820185811115610bf357600080fd5b8251640100000000811182820188101715610c0d57600080fd5b82525081516020918201929091019080838360005b83811015610c3a578181015183820152602001610c22565b50505050905090810190601f168015610c675780820380516001836020036101000a031916815260200191505b5060405250505092505050610287565b50506040805160208101909152600081529392505050565b6060610a32826006610ddc565b604080516020808252818301909252606091600091906020820181803683370190505090506000805b6020811015610d3e576000858260208110610cdc57fe5b1a60f81b90507fff00000000000000000000000000000000000000000000000000000000000000811615610d355780848481518110610d1757fe5b60200101906001600160f81b031916908160001a9053506001909201915b50600101610cc5565b5060008167ffffffffffffffff81118015610d5857600080fd5b506040519080825280601f01601f191660200182016040528015610d83576020820181803683370190505b50905060005b82811015610dd357838181518110610d9d57fe5b602001015160f81c60f81b828281518110610db457fe5b60200101906001600160f81b031916908160001a905350600101610d89565b50949350505050565b606060028206158015610def5750600082115b8015610dfc575060288211155b610e6757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f41646472657373537472696e675574696c3a20494e56414c49445f4c454e0000604482015290519081900360640190fd5b60008267ffffffffffffffff81118015610e8057600080fd5b506040519080825280601f01601f191660200182016040528015610eab576020820181803683370190505b5090506001600160a01b03841660005b60028504811015610f4f57600860138290030282901c600f600482901c1660f082168203610ee882610f59565b868560020281518110610ef757fe5b60200101906001600160f81b031916908160001a905350610f1781610f59565b868560020260010181518110610f2957fe5b60200101906001600160f81b031916908160001a9053505060019092019150610ebb9050565b5090949350505050565b6000600a8260ff161015610f7457506030810160f81b610a35565b506037810160f81b610a35565b8051610a358161149a565b8051600281900b8114610a3557600080fd5b80516fffffffffffffffffffffffffffffffff81168114610a3557600080fd5b805161ffff81168114610a3557600080fd5b805162ffffff81168114610a3557600080fd5b805160ff81168114610a3557600080fd5b600060208284031215611005578081fd5b81516110108161149a565b9392505050565b60008060006060848603121561102b578182fd5b83356110368161149a565b925060208401356110468161149a565b929592945050506040919091013590565b60008060408385031215611069578182fd5b82356110748161149a565b946020939093013593505050565b600060208284031215611093578081fd5b61101082610f8c565b6000602082840312156110ad578081fd5b815167ffffffffffffffff808211156110c4578283fd5b818401915084601f8301126110d7578283fd5b8151818111156110e357fe5b604051601f8201601f19168101602001838111828210171561110157fe5b604052818152838201602001871015611118578485fd5b61112982602083016020870161146a565b9695505050505050565b600080600080600080600060e0888a03121561114d578283fd5b87516111588161149a565b965061116660208901610f8c565b955061117460408901610fbe565b945061118260608901610fbe565b935061119060808901610fbe565b925061119e60a08901610fe3565b915060c088015180151581146111b2578182fd5b8091505092959891949750929550565b6000602082840312156111d3578081fd5b61101082610fe3565b6000806000806000806000806000806000806101808d8f0312156111fe578485fd5b8c516bffffffffffffffffffffffff81168114611219578586fd5b9b5061122760208e01610f81565b9a5061123560408e01610f81565b995061124360608e01610f81565b985061125160808e01610fd0565b975061125f60a08e01610f8c565b965061126d60c08e01610f8c565b955061127b60e08e01610f9e565b94506101008d015193506101208d0151925061129a6101408e01610f9e565b91506112a96101608e01610f9e565b90509295989b509295989b509295989b565b6001600160a01b03169052565b15159052565b60020b9052565b600081518084526112ed81602086016020860161146a565b601f01601f19169290920160200192915050565b62ffffff169052565b60ff169052565b6001600160a01b0391909116815260200190565b901515815260200190565b90815260200190565b60006020825261101060208301846112d5565b60006020825282516020830152602083015161136b60408401826112bb565b50604083015161137e60608401826112bb565b5060608301516101c080608085015261139b6101e08501836112d5565b91506080850151601f198584030160a08601526113b883826112d5565b92505060a08501516113cd60c086018261130a565b5060c08501516113e060e086018261130a565b5060e08501516101006113f5818701836112c8565b8601519050610120611409868201836112ce565b860151905061014061141d868201836112ce565b8601519050610160611431868201836112ce565b8601519050610180611445868201836112ce565b86015190506101a061145986820183611301565b8601519050610f4f858301826112bb565b60005b8381101561148557818101518382015260200161146d565b83811115611494576000848401525b50505050565b6001600160a01b03811681146114af57600080fd5b5056fea164736f6c6343000706000a"; + static readonly abi: ({ + inputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + name?: undefined; + outputs?: undefined; + } | { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + })[]; + static createInterface(): NonfungibleTokenPositionDescriptorInterface; + static connect(address: string, signerOrProvider: Signer | Provider): NonfungibleTokenPositionDescriptor; +} +export interface NonfungibleTokenPositionDescriptorLibraryAddresses { + ["contracts/libraries/NFTDescriptor.sol:NFTDescriptor"]: string; +} diff --git a/dist2/types/types/v3/factories/PairFlash__factory.d.ts b/dist2/types/types/v3/factories/PairFlash__factory.d.ts new file mode 100644 index 00000000000..8b44505e75f --- /dev/null +++ b/dist2/types/types/v3/factories/PairFlash__factory.d.ts @@ -0,0 +1,69 @@ +import { Signer, ContractFactory, Overrides } from "ethers"; +import { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PairFlash, PairFlashInterface } from "../PairFlash"; +export declare class PairFlash__factory extends ContractFactory { + constructor(signer?: Signer); + deploy(_swapRouter: string, _factory: string, _WETH9: string, overrides?: Overrides & { + from?: string | Promise; + }): Promise; + getDeployTransaction(_swapRouter: string, _factory: string, _WETH9: string, overrides?: Overrides & { + from?: string | Promise; + }): TransactionRequest; + attach(address: string): PairFlash; + connect(signer: Signer): PairFlash__factory; + static readonly bytecode = "0x60e06040523480156200001157600080fd5b5060405162001a9338038062001a9383398101604081905262000034916200005c565b6001600160601b0319606092831b811660805290821b811660a05291901b1660c052620000c8565b60008060006060848603121562000071578283fd5b83516200007e81620000af565b60208501519093506200009181620000af565b6040850151909250620000a481620000af565b809150509250925092565b6001600160a01b0381168114620000c557600080fd5b50565b60805160601c60a05160601c60c05160601c61195a6200013960003980610573528061074b528061077852806108c85280610976525080609c528061038b52806104b5528061054f52806110f0528061115052806111d1525080610267528061059752806106eb525061195a6000f3fe60806040526004361061007f5760003560e01c8063c31c9c071161004e578063c31c9c0714610195578063c45a0155146101aa578063df2ab5bb146101bf578063e9cbafb0146101d25761012a565b806312210e8a1461012f5780632384463b1461013757806349404b7c146101575780634aa4a4fc1461016a5761012a565b3661012a573373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461012857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742057455448390000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b600080fd5b6101286101f2565b34801561014357600080fd5b5061012861015236600461161f565b610204565b6101286101653660046116d2565b610387565b34801561017657600080fd5b5061017f61054d565b60405161018c9190611781565b60405180910390f35b3480156101a157600080fd5b5061017f610571565b3480156101b657600080fd5b5061017f610595565b6101286101cd3660046114e8565b6105b9565b3480156101de57600080fd5b506101286101ed3660046116fd565b6106d6565b4715610202576102023347610a73565b565b60006040518060600160405280836000015173ffffffffffffffffffffffffffffffffffffffff168152602001836020015173ffffffffffffffffffffffffffffffffffffffff168152602001836040015162ffffff168152509050600061028c7f000000000000000000000000000000000000000000000000000000000000000083610bc1565b90508073ffffffffffffffffffffffffffffffffffffffff1663490e6cbc30856060015186608001516040518060c0016040528089606001518152602001896080015181526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018881526020018960a0015162ffffff1681526020018960c0015162ffffff1681525060405160200161032291906118bb565b6040516020818303038152906040526040518563ffffffff1660e01b815260040161035094939291906117a2565b600060405180830381600087803b15801561036a57600080fd5b505af115801561037e573d6000803e3d6000fd5b50505050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561041057600080fd5b505afa158015610424573d6000803e3d6000fd5b505050506040513d602081101561043a57600080fd5b50519050828110156104ad57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e742057455448390000000000000000000000000000604482015290519081900360640190fd5b8015610548577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561052657600080fd5b505af115801561053a573d6000803e3d6000fd5b505050506105488282610a73565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561062257600080fd5b505afa158015610636573d6000803e3d6000fd5b505050506040513d602081101561064c57600080fd5b50519050828110156106bf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b80156106d0576106d0848383610cf7565b50505050565b60006106e482840184611523565b90506107147f00000000000000000000000000000000000000000000000000000000000000008260600151610ed3565b506060810151805160209091015182516000906107319089610f09565b90506000610743856020015189610f09565b9050610774837f00000000000000000000000000000000000000000000000000000000000000008760200151610f19565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663414bf3896040518061010001604052808773ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff168152602001896080015162ffffff1681526020013073ffffffffffffffffffffffffffffffffffffffff16815260200142815260200189602001518152602001868152602001600073ffffffffffffffffffffffffffffffffffffffff168152506040518263ffffffff1660e01b815260040161086e919061183f565b602060405180830381600087803b15801561088857600080fd5b505af115801561089c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c091906116ba565b90506108f1857f00000000000000000000000000000000000000000000000000000000000000008860000151610f19565b604080516101008101825273ffffffffffffffffffffffffffffffffffffffff8781168252868116602083015260a08981015162ffffff168385015230606084015242608084015289519083015260c08201859052600060e0830181905292517f414bf3890000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000009091169163414bf389916109ac919060040161183f565b602060405180830381600087803b1580156109c657600080fd5b505af11580156109da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fe91906116ba565b90508315610a1257610a12863033876110ee565b8215610a2457610a24853033866110ee565b83821115610a455760008483039050610a4387308a60400151846110ee565b505b82811115610a665760008382039050610a6486308a60400151846110ee565b505b5050505050505050505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b60208310610aea57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610aad565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114610b4c576040519150601f19603f3d011682016040523d82523d6000602084013e610b51565b606091505b505090508061054857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1610610c0357600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d5808301919091528251808303909101815260f5909101909152805191012090565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b60208310610dcc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d8f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610e2e576040519150601f19603f3d011682016040523d82523d6000602084013e610e33565b606091505b5091509150818015610e61575080511580610e615750808060200190516020811015610e5e57600080fd5b50515b610ecc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b5050505050565b6000610edf8383610bc1565b90503373ffffffffffffffffffffffffffffffffffffffff821614610f0357600080fd5b92915050565b80820182811015610f0357600080fd5b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b3000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b60208310610fee57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fb1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611050576040519150601f19603f3d011682016040523d82523d6000602084013e611055565b606091505b5091509150818015611083575080511580611083575080806020019051602081101561108057600080fd5b50515b610ecc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5341000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156111495750804710155b15611292577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156111b657600080fd5b505af11580156111ca573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561126057600080fd5b505af1158015611274573d6000803e3d6000fd5b505050506040513d602081101561128a57600080fd5b506106d09050565b73ffffffffffffffffffffffffffffffffffffffff83163014156112c0576112bb848383610cf7565b6106d0565b6106d0848484846040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000178152925182516000948594938a169392918291908083835b602083106113a457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611367565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611406576040519150601f19603f3d011682016040523d82523d6000602084013e61140b565b606091505b5091509150818015611439575080511580611439575080806020019051602081101561143657600080fd5b50515b6114a457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354460000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b505050505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146114d057600080fd5b919050565b803562ffffff811681146114d057600080fd5b6000806000606084860312156114fc578283fd5b611505846114ac565b92506020840135915061151a604085016114ac565b90509250925092565b6000818303610100811215611536578182fd5b6040805160c0810167ffffffffffffffff828210818311171561155557fe5b81845286358352602087013560208401526115718488016114ac565b8484015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0860112156115a4578586fd5b8351945060608501915084821081831117156115bc57fe5b5082526115cb606086016114ac565b83526115d9608086016114ac565b60208401526115ea60a086016114d5565b8284015282606082015261160060c086016114d5565b608082015261161160e086016114d5565b60a082015295945050505050565b600060e08284031215611630578081fd5b60405160e0810181811067ffffffffffffffff8211171561164d57fe5b604052611659836114ac565b8152611667602084016114ac565b6020820152611678604084016114d5565b6040820152606083013560608201526080830135608082015261169d60a084016114d5565b60a08201526116ae60c084016114d5565b60c08201529392505050565b6000602082840312156116cb578081fd5b5051919050565b600080604083850312156116e4578182fd5b823591506116f4602084016114ac565b90509250929050565b60008060008060608587031215611712578081fd5b8435935060208501359250604085013567ffffffffffffffff80821115611737578283fd5b818701915087601f83011261174a578283fd5b813581811115611758578384fd5b886020828501011115611769578384fd5b95989497505060200194505050565b62ffffff169052565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8616825260208581840152846040840152608060608401528351806080850152825b818110156117f75785810183015185820160a0015282016117db565b81811115611808578360a083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160a0019695505050505050565b60006101008201905073ffffffffffffffffffffffffffffffffffffffff80845116835280602085015116602084015262ffffff60408501511660408401528060608501511660608401526080840151608084015260a084015160a084015260c084015160c08401528060e08501511660e08401525092915050565b6000610100820190508251825260208301516020830152604083015173ffffffffffffffffffffffffffffffffffffffff8082166040850152606085015191508082511660608501528060208301511660808501525062ffffff60408201511660a084015250608083015161193360c0840182611778565b5060a083015161194660e0840182611778565b509291505056fea164736f6c6343000706000a"; + static readonly abi: ({ + inputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + name?: undefined; + outputs?: undefined; + } | { + inputs: never[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + } | { + inputs: { + components: { + internalType: string; + name: string; + type: string; + }[]; + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: never[]; + stateMutability: string; + type: string; + } | { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: never[]; + stateMutability: string; + type: string; + } | { + stateMutability: string; + type: string; + inputs?: undefined; + name?: undefined; + outputs?: undefined; + })[]; + static createInterface(): PairFlashInterface; + static connect(address: string, signerOrProvider: Signer | Provider): PairFlash; +} diff --git a/dist2/types/types/v3/factories/QuoterV2__factory.d.ts b/dist2/types/types/v3/factories/QuoterV2__factory.d.ts new file mode 100644 index 00000000000..81a3e2ad345 --- /dev/null +++ b/dist2/types/types/v3/factories/QuoterV2__factory.d.ts @@ -0,0 +1,61 @@ +import { Signer, ContractFactory, Overrides } from "ethers"; +import { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { QuoterV2, QuoterV2Interface } from "../QuoterV2"; +export declare class QuoterV2__factory extends ContractFactory { + constructor(signer?: Signer); + deploy(_factory: string, _WETH9: string, overrides?: Overrides & { + from?: string | Promise; + }): Promise; + getDeployTransaction(_factory: string, _WETH9: string, overrides?: Overrides & { + from?: string | Promise; + }): TransactionRequest; + attach(address: string): QuoterV2; + connect(signer: Signer): QuoterV2__factory; + static readonly bytecode = "0x60c06040523480156200001157600080fd5b506040516200212c3803806200212c833981016040819052620000349162000070565b6001600160601b0319606092831b8116608052911b1660a052620000a7565b80516001600160a01b03811681146200006b57600080fd5b919050565b6000806040838503121562000083578182fd5b6200008e8362000053565b91506200009e6020840162000053565b90509250929050565b60805160601c60a05160601c612051620000db60003980610321525080610577528061095d5280610b9252506120516000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063c45a01551161005b578063c45a0155146100e6578063c6a5026a146100ee578063cdca175314610101578063fa461e33146101145761007d565b80632f80bb1d146100825780634aa4a4fc146100ae578063bd21704a146100c3575b600080fd5b610095610090366004611b2b565b610129565b6040516100a59493929190611eac565b60405180910390f35b6100b661031f565b6040516100a59190611def565b6100d66100d1366004611c49565b610343565b6040516100a59493929190611f54565b6100b6610575565b6100d66100fc366004611c49565b610599565b61009561010f366004611b2b565b610754565b610127610122366004611b91565b61092c565b005b6000606080600061013986610ae8565b67ffffffffffffffff8111801561014f57600080fd5b50604051908082528060200260200182016040528015610179578160200160208202803683370190505b50925061018586610ae8565b67ffffffffffffffff8111801561019b57600080fd5b506040519080825280602002602001820160405280156101c5578160200160208202803683370190505b50915060005b60008060006101d98a610b17565b92509250925060008060008061025c6040518060a001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff1681526020018f81526020018762ffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815250610343565b9350935093509350828b898151811061027157fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818a89815181106102b857fe5b63ffffffff90921660209283029190910190910152929b50968201966001909601958b926102e58e610b48565b156102fa576102f38e610b50565b9d5061030a565b8c9b505050505050505050610316565b505050505050506101cb565b92959194509250565b7f000000000000000000000000000000000000000000000000000000000000000081565b60208101518151606083015160009283928392839273ffffffffffffffffffffffffffffffffffffffff808216908416109284926103819290610b8b565b9050866080015173ffffffffffffffffffffffffffffffffffffffff16600014156103af5760408701516000555b60005a90508173ffffffffffffffffffffffffffffffffffffffff1663128acb0830856103df8c60400151610bc9565b6000038c6080015173ffffffffffffffffffffffffffffffffffffffff1660001461040e578c60800151610434565b8761042d5773fffd8963efd1fc6a506488495d951d5263988d25610434565b6401000276a45b8d602001518e606001518f6000015160405160200161045593929190611d89565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401610484959493929190611e10565b6040805180830381600087803b15801561049d57600080fd5b505af19250505080156104eb575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526104e891810190611b6e565b60015b610568573d808015610519576040519150601f19603f3d011682016040523d82523d6000602084013e61051e565b606091505b505a82039450886080015173ffffffffffffffffffffffffffffffffffffffff166000141561054c57600080555b610557818487610bfb565b97509750975097505050505061056e565b50505050505b9193509193565b7f000000000000000000000000000000000000000000000000000000000000000081565b60208101518151606083015160009283928392839273ffffffffffffffffffffffffffffffffffffffff808216908416109284926105d79290610b8b565b905060005a90508173ffffffffffffffffffffffffffffffffffffffff1663128acb0830856106098c60400151610bc9565b60808d015173ffffffffffffffffffffffffffffffffffffffff1615610633578c60800151610659565b876106525773fffd8963efd1fc6a506488495d951d5263988d25610659565b6401000276a45b8d600001518e606001518f6020015160405160200161067a93929190611d89565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016106a9959493929190611e10565b6040805180830381600087803b1580156106c257600080fd5b505af1925050508015610710575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261070d91810190611b6e565b60015b610568573d80801561073e576040519150601f19603f3d011682016040523d82523d6000602084013e610743565b606091505b505a82039450610557818487610bfb565b6000606080600061076486610ae8565b67ffffffffffffffff8111801561077a57600080fd5b506040519080825280602002602001820160405280156107a4578160200160208202803683370190505b5092506107b086610ae8565b67ffffffffffffffff811180156107c657600080fd5b506040519080825280602002602001820160405280156107f0578160200160208202803683370190505b50915060005b60008060006108048a610b17565b9250925092506000806000806108876040518060a001604052808973ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018f81526020018762ffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815250610599565b9350935093509350828b898151811061089c57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818a89815181106108e357fe5b63ffffffff90921660209283029190910190910152929b50968201966001909601958b926109108e610b48565b156102fa5761091e8e610b50565b9d50505050505050506107f6565b600083138061093b5750600082135b61094457600080fd5b600080600061095284610b17565b9250925092506109847f0000000000000000000000000000000000000000000000000000000000000000848484610ccf565b5060008060008089136109ca578573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1610888a6000036109ff565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161089896000035b9250925092506000610a12878787610b8b565b90506000808273ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015610a5d57600080fd5b505afa158015610a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a959190611c6b565b5050505050915091508515610abb57604051848152826020820152816040820152606081fd5b60005415610ad1576000548414610ad157600080fd5b604051858152826020820152816040820152606081fd5b805160177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec909101045b919050565b60008080610b258482610cee565b9250610b32846014610dee565b9050610b3f846017610cee565b91509193909250565b516042111590565b8051606090610b859083906017907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe901610ede565b92915050565b6000610bc17f0000000000000000000000000000000000000000000000000000000000000000610bbc8686866110c5565b611142565b949350505050565b60007f80000000000000000000000000000000000000000000000000000000000000008210610bf757600080fd5b5090565b6000806000806000808773ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015610c4a57600080fd5b505afa158015610c5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c829190611c6b565b50939650610c9794508d935061127892505050565b91975095509050610cbf73ffffffffffffffffffffffffffffffffffffffff89168383611339565b9350869250505093509350935093565b6000610ce585610ce08686866110c5565b611991565b95945050505050565b600081826014011015610d6257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f416464726573735f6f766572666c6f770000000000000000000000000000604482015290519081900360640190fd5b8160140183511015610dd557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e64730000000000000000000000604482015290519081900360640190fd5b5001602001516c01000000000000000000000000900490565b600081826003011015610e6257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b8160030183511015610ed557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e6473000000000000000000000000604482015290519081900360640190fd5b50016003015190565b60608182601f011015610f5257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b828284011015610fc357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b8183018451101561103557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015290519081900360640190fd5b60608215801561105457604051915060008252602082016040526110bc565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561108d578051835260209283019201611075565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b6110cd6119fa565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161115611105579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161061118457600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d5808301919091528251808303909101815260f5909101909152805191012090565b60008060008351606014611318576044845110156112cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c290611e75565b60405180910390fd5b600484019350838060200190518101906112e59190611bdf565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c29190611e62565b8380602001905181019061132c9190611d02565b9250925092509193909250565b60008060008060008060008060088b73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561138d57600080fd5b505afa1580156113a1573d6000803e3d6000fd5b505050506040513d60208110156113b757600080fd5b5051600290810b908c900b816113c957fe5b0560020b901d905060006101008c73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561141c57600080fd5b505afa158015611430573d6000803e3d6000fd5b505050506040513d602081101561144657600080fd5b5051600290810b908d900b8161145857fe5b0560020b8161146357fe5b079050600060088d73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156114b057600080fd5b505afa1580156114c4573d6000803e3d6000fd5b505050506040513d60208110156114da57600080fd5b5051600290810b908d900b816114ec57fe5b0560020b901d905060006101008e73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561153f57600080fd5b505afa158015611553573d6000803e3d6000fd5b505050506040513d602081101561156957600080fd5b5051600290810b908e900b8161157b57fe5b0560020b8161158657fe5b07905060008160ff166001901b8f73ffffffffffffffffffffffffffffffffffffffff16635339c296856040518263ffffffff1660e01b8152600401808260010b815260200191505060206040518083038186803b1580156115e757600080fd5b505afa1580156115fb573d6000803e3d6000fd5b505050506040513d602081101561161157600080fd5b5051161180156116a457508d73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561166257600080fd5b505afa158015611676573d6000803e3d6000fd5b505050506040513d602081101561168c57600080fd5b5051600290810b908d900b8161169e57fe5b0760020b155b80156116b557508b60020b8d60020b135b945060008360ff166001901b8f73ffffffffffffffffffffffffffffffffffffffff16635339c296876040518263ffffffff1660e01b8152600401808260010b815260200191505060206040518083038186803b15801561171557600080fd5b505afa158015611729573d6000803e3d6000fd5b505050506040513d602081101561173f57600080fd5b5051161180156117d257508d73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561179057600080fd5b505afa1580156117a4573d6000803e3d6000fd5b505050506040513d60208110156117ba57600080fd5b5051600290810b908e900b816117cc57fe5b0760020b155b80156117e357508b60020b8d60020b125b95508160010b8460010b128061180f57508160010b8460010b14801561180f57508060ff168360ff1611155b1561182557839950829750819850809650611832565b8199508097508398508296505b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff87161b9150505b8560010b8760010b13611969578560010b8760010b14156118a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff858103161c165b6000818c73ffffffffffffffffffffffffffffffffffffffff16635339c2968a6040518263ffffffff1660e01b8152600401808260010b815260200191505060206040518083038186803b1580156118fa57600080fd5b505afa15801561190e573d6000803e3d6000fd5b505050506040513d602081101561192457600080fd5b5051169050611932816119c1565b61ffff16989098019750506001909501947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61185e565b8115611976576001880397505b8215611983576001880397505b505050505050509392505050565b600061199d8383611142565b90503373ffffffffffffffffffffffffffffffffffffffff821614610b8557600080fd5b6000805b8215610b85577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8301909216916001016119c5565b604080516060810182526000808252602082018190529181019190915290565b600082601f830112611a2a578081fd5b8135611a3d611a3882611faf565b611f8b565b818152846020838601011115611a51578283fd5b816020850160208301379081016020019190915292915050565b8051600281900b8114610b1257600080fd5b600060a08284031215611a8e578081fd5b60405160a0810181811067ffffffffffffffff82111715611aab57fe5b6040529050808235611abc8161201f565b81526020830135611acc8161201f565b602082015260408381013590820152606083013562ffffff81168114611af157600080fd5b6060820152611b0260808401611b0e565b60808201525092915050565b8035610b128161201f565b805161ffff81168114610b1257600080fd5b60008060408385031215611b3d578182fd5b823567ffffffffffffffff811115611b53578283fd5b611b5f85828601611a1a565b95602094909401359450505050565b60008060408385031215611b80578182fd5b505080516020909101519092909150565b600080600060608486031215611ba5578081fd5b8335925060208401359150604084013567ffffffffffffffff811115611bc9578182fd5b611bd586828701611a1a565b9150509250925092565b600060208284031215611bf0578081fd5b815167ffffffffffffffff811115611c06578182fd5b8201601f81018413611c16578182fd5b8051611c24611a3882611faf565b818152856020838501011115611c38578384fd5b610ce5826020830160208601611fef565b600060a08284031215611c5a578081fd5b611c648383611a7d565b9392505050565b600080600080600080600060e0888a031215611c85578283fd5b8751611c908161201f565b9650611c9e60208901611a6b565b9550611cac60408901611b19565b9450611cba60608901611b19565b9350611cc860808901611b19565b925060a088015160ff81168114611cdd578283fd5b60c08901519092508015158114611cf2578182fd5b8091505092959891949750929550565b600080600060608486031215611d16578081fd5b835192506020840151611d288161201f565b9150611d3660408501611a6b565b90509250925092565b60008151808452611d57816020860160208601611fef565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116825260e89390931b7fffffff0000000000000000000000000000000000000000000000000000000000166014820152921b166017820152602b0190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a06080830152611e5760a0830184611d3f565b979650505050505050565b600060208252611c646020830184611d3f565b60208082526010908201527f556e6578706563746564206572726f7200000000000000000000000000000000604082015260600190565b600060808201868352602060808185015281875180845260a0860191508289019350845b81811015611f0257845173ffffffffffffffffffffffffffffffffffffffff1683529383019391830191600101611ed0565b505084810360408601528651808252908201925081870190845b81811015611f3e57825163ffffffff1685529383019391830191600101611f1c565b5050505060609290920192909252949350505050565b93845273ffffffffffffffffffffffffffffffffffffffff92909216602084015263ffffffff166040830152606082015260800190565b60405181810167ffffffffffffffff81118282101715611fa757fe5b604052919050565b600067ffffffffffffffff821115611fc357fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b8381101561200a578181015183820152602001611ff2565b83811115612019576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461204157600080fd5b5056fea164736f6c6343000706000a"; + static readonly abi: ({ + inputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + name?: undefined; + outputs?: undefined; + } | { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + } | { + inputs: { + components: { + internalType: string; + name: string; + type: string; + }[]; + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + })[]; + static createInterface(): QuoterV2Interface; + static connect(address: string, signerOrProvider: Signer | Provider): QuoterV2; +} diff --git a/dist2/types/types/v3/factories/Quoter__factory.d.ts b/dist2/types/types/v3/factories/Quoter__factory.d.ts new file mode 100644 index 00000000000..fbe0a91abc2 --- /dev/null +++ b/dist2/types/types/v3/factories/Quoter__factory.d.ts @@ -0,0 +1,42 @@ +import { Signer, ContractFactory, Overrides } from "ethers"; +import { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { Quoter, QuoterInterface } from "../Quoter"; +export declare class Quoter__factory extends ContractFactory { + constructor(signer?: Signer); + deploy(_factory: string, _WETH9: string, overrides?: Overrides & { + from?: string | Promise; + }): Promise; + getDeployTransaction(_factory: string, _WETH9: string, overrides?: Overrides & { + from?: string | Promise; + }): TransactionRequest; + attach(address: string): Quoter; + connect(signer: Signer): Quoter__factory; + static readonly bytecode = "0x60c060405234801561001057600080fd5b506040516112e53803806112e583398101604081905261002f91610069565b6001600160601b0319606092831b8116608052911b1660a05261009b565b80516001600160a01b038116811461006457600080fd5b919050565b6000806040838503121561007b578182fd5b6100848361004d565b91506100926020840161004d565b90509250929050565b60805160601c60a05160601c6112176100ce60003980610342525080610366528061058652806106d552506112176000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063c45a01551161005b578063c45a0155146100d3578063cdca1753146100db578063f7729d43146100ee578063fa461e33146101015761007d565b80632f80bb1d1461008257806330d07f21146100ab5780634aa4a4fc146100be575b600080fd5b610095610090366004610e9e565b610116565b6040516100a29190611148565b60405180910390f35b6100956100b9366004610e30565b61017b565b6100c6610340565b6040516100a29190611084565b6100c6610364565b6100956100e9366004610e9e565b610388565b6100956100fc366004610e30565b6103d6565b61011461010f366004610f04565b610555565b005b60005b600061012484610660565b9050600080600061013487610668565b92509250925061014882848389600061017b565b955083156101605761015987610699565b965061016c565b85945050505050610175565b50505050610119565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff808616878216109083166101a65760008490555b6101b18787876106ce565b73ffffffffffffffffffffffffffffffffffffffff1663128acb0830836101d78861070c565b60000373ffffffffffffffffffffffffffffffffffffffff8816156101fc5787610222565b8561021b5773fffd8963efd1fc6a506488495d951d5263988d25610222565b6401000276a45b8b8b8e6040516020016102379392919061101e565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016102669594939291906110a5565b6040805180830381600087803b15801561027f57600080fd5b505af19250505080156102cd575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526102ca91810190610ee1565b60015b610333573d8080156102fb576040519150601f19603f3d011682016040523d82523d6000602084013e610300565b606091505b5073ffffffffffffffffffffffffffffffffffffffff841661032157600080555b61032a8161073e565b92505050610337565b5050505b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60005b600061039684610660565b905060008060006103a687610668565b9250925092506103ba8383838960006103d6565b95508315610160576103cb87610699565b96505050505061038b565b600073ffffffffffffffffffffffffffffffffffffffff808616908716106103ff8787876106ce565b73ffffffffffffffffffffffffffffffffffffffff1663128acb0830836104258861070c565b73ffffffffffffffffffffffffffffffffffffffff881615610447578761046d565b856104665773fffd8963efd1fc6a506488495d951d5263988d2561046d565b6401000276a45b8c8b8d6040516020016104829392919061101e565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016104b19594939291906110a5565b6040805180830381600087803b1580156104ca57600080fd5b505af1925050508015610518575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261051591810190610ee1565b60015b610333573d808015610546576040519150601f19603f3d011682016040523d82523d6000602084013e61054b565b606091505b5061032a8161073e565b60008313806105645750600082135b61056d57600080fd5b600080600061057b84610668565b9250925092506105ad7f00000000000000000000000000000000000000000000000000000000000000008484846107ef565b5060008060008089136105f3578573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1610888a600003610628565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161089896000035b925092509250821561063f57604051818152602081fd5b6000541561065557600054811461065557600080fd5b604051828152602081fd5b516042111590565b600080806106768482610805565b9250610683846014610905565b9050610690846017610805565b91509193909250565b80516060906101759083906017907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9016109f5565b60006107047f00000000000000000000000000000000000000000000000000000000000000006106ff868686610bdc565b610c59565b949350505050565b60007f8000000000000000000000000000000000000000000000000000000000000000821061073a57600080fd5b5090565b600081516020146107db5760448251101561078e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078590611111565b60405180910390fd5b600482019150818060200190518101906107a89190610f52565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078591906110f7565b818060200190518101906101759190610fbc565b600061033785610800868686610bdc565b610d8f565b60008182601401101561087957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f416464726573735f6f766572666c6f770000000000000000000000000000604482015290519081900360640190fd5b81601401835110156108ec57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e64730000000000000000000000604482015290519081900360640190fd5b5001602001516c01000000000000000000000000900490565b60008182600301101561097957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b81600301835110156109ec57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e6473000000000000000000000000604482015290519081900360640190fd5b50016003015190565b60608182601f011015610a6957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b828284011015610ada57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b81830184511015610b4c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015290519081900360640190fd5b606082158015610b6b5760405191506000825260208201604052610bd3565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015610ba4578051835260209283019201610b8c565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b610be4610dbf565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161115610c1c579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1610610c9b57600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d5808301919091528251808303909101815260f5909101909152805191012090565b6000610d9b8383610c59565b90503373ffffffffffffffffffffffffffffffffffffffff82161461017557600080fd5b604080516060810182526000808252602082018190529181019190915290565b600082601f830112610def578081fd5b8135610e02610dfd82611175565b611151565b818152846020838601011115610e16578283fd5b816020850160208301379081016020019190915292915050565b600080600080600060a08688031215610e47578081fd5b8535610e52816111e5565b94506020860135610e62816111e5565b9350604086013562ffffff81168114610e79578182fd5b9250606086013591506080860135610e90816111e5565b809150509295509295909350565b60008060408385031215610eb0578182fd5b823567ffffffffffffffff811115610ec6578283fd5b610ed285828601610ddf565b95602094909401359450505050565b60008060408385031215610ef3578182fd5b505080516020909101519092909150565b600080600060608486031215610f18578283fd5b8335925060208401359150604084013567ffffffffffffffff811115610f3c578182fd5b610f4886828701610ddf565b9150509250925092565b600060208284031215610f63578081fd5b815167ffffffffffffffff811115610f79578182fd5b8201601f81018413610f89578182fd5b8051610f97610dfd82611175565b818152856020838501011115610fab578384fd5b6103378260208301602086016111b5565b600060208284031215610fcd578081fd5b5051919050565b60008151808452610fec8160208601602086016111b5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116825260e89390931b7fffffff0000000000000000000000000000000000000000000000000000000000166014820152921b166017820152602b0190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a060808301526110ec60a0830184610fd4565b979650505050505050565b60006020825261110a6020830184610fd4565b9392505050565b60208082526010908201527f556e6578706563746564206572726f7200000000000000000000000000000000604082015260600190565b90815260200190565b60405181810167ffffffffffffffff8111828210171561116d57fe5b604052919050565b600067ffffffffffffffff82111561118957fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b838110156111d05781810151838201526020016111b8565b838111156111df576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461120757600080fd5b5056fea164736f6c6343000706000a"; + static readonly abi: ({ + inputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + name?: undefined; + outputs?: undefined; + } | { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + })[]; + static createInterface(): QuoterInterface; + static connect(address: string, signerOrProvider: Signer | Provider): Quoter; +} diff --git a/dist2/types/types/v3/factories/SwapRouter02__factory.d.ts b/dist2/types/types/v3/factories/SwapRouter02__factory.d.ts new file mode 100644 index 00000000000..98b82afa402 --- /dev/null +++ b/dist2/types/types/v3/factories/SwapRouter02__factory.d.ts @@ -0,0 +1,67 @@ +import { Signer, ContractFactory, Overrides } from "ethers"; +import { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { SwapRouter02, SwapRouter02Interface } from "../SwapRouter02"; +export declare class SwapRouter02__factory extends ContractFactory { + constructor(signer?: Signer); + deploy(_factoryV2: string, factoryV3: string, _positionManager: string, _WETH9: string, overrides?: Overrides & { + from?: string | Promise; + }): Promise; + getDeployTransaction(_factoryV2: string, factoryV3: string, _positionManager: string, _WETH9: string, overrides?: Overrides & { + from?: string | Promise; + }): TransactionRequest; + attach(address: string): SwapRouter02; + connect(signer: Signer): SwapRouter02__factory; + static readonly bytecode = "0x6101006040526000196000553480156200001857600080fd5b5060405162006135380380620061358339810160408190526200003b9162000087565b6001600160601b0319606094851b811660805291841b821660a05291831b811660c052911b1660e052620000e3565b80516001600160a01b03811681146200008257600080fd5b919050565b600080600080608085870312156200009d578384fd5b620000a8856200006a565b9350620000b8602086016200006a565b9250620000c8604086016200006a565b9150620000d8606086016200006a565b905092959194509250565b60805160601c60a05160601c60c05160601c60e05160601c615fb162000184600039806102c15280610b3c52806112ad52806113d7528061147e52806116af52806117d95280612d8f5280612def5280612e70525080611e4c52806124df5280613cdb52508061166f5280611b1a5280611e9c52806132a6525080610c625280610d365280610fe2528061164b5280612fc252806131855250615fb16000f3fe6080604052600436106102a45760003560e01c80639b2c0a371161016e578063dee00f35116100cb578063f100b2051161007f578063f2d5d56b11610064578063f2d5d56b1461066e578063f3995c6714610681578063fa461e33146106945761034f565b8063f100b2051461063b578063f25801a71461064e5761034f565b8063e0e189a0116100b0578063e0e189a0146105f5578063e90a182f14610608578063efdeed8e1461061b5761034f565b8063dee00f35146105b5578063df2ab5bb146105e25761034f565b8063b858183f11610122578063c45a015511610107578063c45a01551461057a578063cab372ce1461058f578063d4ef38de146105a25761034f565b8063b858183f14610554578063c2e3140a146105675761034f565b8063ab3fdd5011610153578063ab3fdd501461051b578063ac9650d81461052e578063b3a2af13146105415761034f565b80639b2c0a37146104f5578063a4a78f0c146105085761034f565b8063472b43f31161021c578063571ac8b0116101d0578063639d71a9116101b5578063639d71a9146104b857806368e0d4e1146104cb578063791b98bc146104e05761034f565b8063571ac8b0146104925780635ae401dc146104a55761034f565b80634961699711610201578063496169971461044a5780634aa4a4fc1461045d5780635023b4df1461047f5761034f565b8063472b43f31461042457806349404b7c146104375761034f565b80631c58db4f116102735780633068c554116102585780633068c554146103eb57806342712a67146103fe5780634659a494146104115761034f565b80631c58db4f146103b85780631f0464d1146103cb5761034f565b806304e45aaf1461035457806309b813461461037d57806311ed56c91461039057806312210e8a146103b05761034f565b3661034f573373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461034d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742057455448390000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b600080fd5b610367610362366004615543565b6106b4565b6040516103749190615dfd565b60405180910390f35b61036761038b3660046155de565b61083c565b6103a361039e366004615638565b61091c565b6040516103749190615b7a565b61034d610b28565b61034d6103c63660046157bb565b610b3a565b6103de6103d93660046152a7565b610bbe565b6040516103749190615afc565b61034d6103f93660046150d8565b610c48565b61036761040c366004615885565b610c5b565b61034d61041f366004615121565b610e35565b610367610432366004615885565b610ef5565b61034d6104453660046157eb565b6112a9565b61034d6104583660046157bb565b61146f565b34801561046957600080fd5b5061047261147c565b6040516103749190615a3c565b61036761048d366004615616565b6114a0565b61034d6104a0366004614feb565b611589565b6103de6104b33660046152a7565b6115bc565b61034d6104c6366004614feb565b611635565b3480156104d757600080fd5b50610472611649565b3480156104ec57600080fd5b5061047261166d565b61034d61050336600461581a565b611691565b61034d610516366004615121565b6118a7565b61034d610529366004614feb565b61197c565b6103de61053c36600461517c565b6119ba565b6103a361054f3660046152f1565b611b14565b61036761056236600461549d565b611bd2565b61034d610575366004615121565b611d95565b34801561058657600080fd5b50610472611e4a565b61034d61059d366004614feb565b611990565b61034d6105b0366004615858565b611e6e565b3480156105c157600080fd5b506105d56105d036600461500e565b611e7a565b6040516103749190615b8d565b61034d6105f0366004615039565b612027565b61034d61060336600461507a565b61213e565b61034d61061636600461500e565b6122a4565b34801561062757600080fd5b5061034d6106363660046151bc565b6122b3565b6103a3610649366004615627565b612305565b34801561065a57600080fd5b5061034d610669366004615324565b6123a5565b61034d61067c36600461500e565b6123f6565b61034d61068f366004615121565b612402565b3480156106a057600080fd5b5061034d6106af3660046153b8565b61249a565b600080600083608001511415610771575081516040517f70a0823100000000000000000000000000000000000000000000000000000000815260019173ffffffffffffffffffffffffffffffffffffffff16906370a082319061071b903090600401615a3c565b60206040518083038186803b15801561073357600080fd5b505afa158015610747573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076b91906157d3565b60808401525b6107ed836080015184606001518560c001516040518060400160405280886000015189604001518a602001516040516020016107af939291906159aa565b6040516020818303038152906040528152602001866107ce57336107d0565b305b73ffffffffffffffffffffffffffffffffffffffff1690526125de565b91508260a00151821015610836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c7d565b60405180910390fd5b50919050565b60006108b0604083018035906108559060208601614feb565b604080518082019091526000908061086d8880615e41565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252503360209091015261278f565b505060005460608201358111156108f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c0f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600055919050565b604080516101608101909152606090610b20907f8831645600000000000000000000000000000000000000000000000000000000908061095f6020870187614feb565b73ffffffffffffffffffffffffffffffffffffffff16815260200185602001602081019061098d9190614feb565b73ffffffffffffffffffffffffffffffffffffffff1681526020016109b860608701604088016157a1565b62ffffff1681526020016109d26080870160608801615379565b60020b81526020016109ea60a0870160808801615379565b60020b8152602090810190610a0a90610a0590880188614feb565b612976565b8152602001610a25866020016020810190610a059190614feb565b815260a0860135602082015260c08601356040820152606001610a4f610100870160e08801614feb565b73ffffffffffffffffffffffffffffffffffffffff1681526020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff815250604051602401610a9e9190615cf8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611b14565b90505b919050565b4715610b3857610b383347612a1b565b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610ba257600080fd5b505af1158015610bb6573d6000803e3d6000fd5b505050505050565b60608380600143034014610c3357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f426c6f636b686173680000000000000000000000000000000000000000000000604482015290519081900360640190fd5b610c3d84846119ba565b91505b509392505050565b610c55848433858561213e565b50505050565b6000610cbb7f000000000000000000000000000000000000000000000000000000000000000087868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612b6992505050565b600081518110610cc757fe5b6020026020010151905084811115610d0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c0f565b610da484846000818110610d1b57fe5b9050602002016020810190610d309190614feb565b33610d9e7f000000000000000000000000000000000000000000000000000000000000000088886000818110610d6257fe5b9050602002016020810190610d779190614feb565b89896001818110610d8457fe5b9050602002016020810190610d999190614feb565b612ca2565b84612d8d565b73ffffffffffffffffffffffffffffffffffffffff821660011415610dcb57339150610dee565b73ffffffffffffffffffffffffffffffffffffffff821660021415610dee573091505b610e2c848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250869250612f6b915050565b95945050505050565b604080517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e48101839052905173ffffffffffffffffffffffffffffffffffffffff881691638fcbaf0c9161010480830192600092919082900301818387803b158015610ed557600080fd5b505af1158015610ee9573d6000803e3d6000fd5b50505050505050505050565b60008086610fab575060018484600081610f0b57fe5b9050602002016020810190610f209190614feb565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f589190615a3c565b60206040518083038186803b158015610f7057600080fd5b505afa158015610f84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa891906157d3565b96505b61103685856000818110610fbb57fe5b9050602002016020810190610fd09190614feb565b82610fdb5733610fdd565b305b6110307f00000000000000000000000000000000000000000000000000000000000000008989600081811061100e57fe5b90506020020160208101906110239190614feb565b8a8a6001818110610d8457fe5b8a612d8d565b73ffffffffffffffffffffffffffffffffffffffff83166001141561105d57339250611080565b73ffffffffffffffffffffffffffffffffffffffff831660021415611080573092505b600085857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181106110b057fe5b90506020020160208101906110c59190614feb565b73ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b81526004016110fd9190615a3c565b60206040518083038186803b15801561111557600080fd5b505afa158015611129573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114d91906157d3565b905061118d868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250889250612f6b915050565b6112628187877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181106111bf57fe5b90506020020160208101906111d49190614feb565b73ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b815260040161120c9190615a3c565b60206040518083038186803b15801561122457600080fd5b505afa158015611238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125c91906157d3565b90613270565b92508683101561129e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c7d565b505095945050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561133257600080fd5b505afa158015611346573d6000803e3d6000fd5b505050506040513d602081101561135c57600080fd5b50519050828110156113cf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e742057455448390000000000000000000000000000604482015290519081900360640190fd5b801561146a577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561144857600080fd5b505af115801561145c573d6000803e3d6000fd5b5050505061146a8282612a1b565b505050565b61147981336112a9565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000611549608083018035906114b99060608601614feb565b6114c960e0860160c08701614feb565b60405180604001604052808760200160208101906114e79190614feb565b6114f760608a0160408b016157a1565b61150460208b018b614feb565b604051602001611516939291906159aa565b60405160208183030381529060405281526020013373ffffffffffffffffffffffffffffffffffffffff1681525061278f565b90508160a001358111156108f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c0f565b6115b3817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613280565b61147957600080fd5b606083806115c86133cc565b1115610c3357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b611640816000613280565b61158957600080fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000821180156116a2575060648211155b6116ab57600080fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561173457600080fd5b505afa158015611748573d6000803e3d6000fd5b505050506040513d602081101561175e57600080fd5b50519050848110156117d157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e742057455448390000000000000000000000000000604482015290519081900360640190fd5b80156118a0577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561184a57600080fd5b505af115801561185e573d6000803e3d6000fd5b50505050600061271061187a85846133d090919063ffffffff16565b8161188157fe5b0490508015611894576118948382612a1b565b610bb685828403612a1b565b5050505050565b604080517fdd62ed3e00000000000000000000000000000000000000000000000000000000815233600482015230602482015290517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b15801561193c57600080fd5b505afa158015611950573d6000803e3d6000fd5b505050506040513d602081101561196657600080fd5b50511015610bb657610bb6868686868686610e35565b611987816000613280565b61199057600080fd5b6115b3817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe613280565b60608167ffffffffffffffff811180156119d357600080fd5b50604051908082528060200260200182016040528015611a0757816020015b60608152602001906001900390816119f25790505b50905060005b82811015611b0d5760008030868685818110611a2557fe5b9050602002810190611a379190615e41565b604051611a45929190615a10565b600060405180830381855af49150503d8060008114611a80576040519150601f19603f3d011682016040523d82523d6000602084013e611a85565b606091505b509150915081611aeb57604481511015611a9e57600080fd5b60048101905080806020019051810190611ab89190615433565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d9190615b7a565b80848481518110611af857fe5b60209081029190910101525050600101611a0d565b5092915050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1683604051611b5d9190615a20565b6000604051808303816000865af19150503d8060008114611b9a576040519150601f19603f3d011682016040523d82523d6000602084013e611b9f565b606091505b50925090508061083657604482511015611bb857600080fd5b60048201915081806020019051810190611ab89190615433565b600080600083604001511415611ca357600190506000611bf584600001516133f4565b50506040517f70a0823100000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff8216906370a0823190611c4c903090600401615a3c565b60206040518083038186803b158015611c6457600080fd5b505afa158015611c78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c9c91906157d3565b6040850152505b600081611cb05733611cb2565b305b90505b6000611cc48560000151613425565b9050611d1d856040015182611cdd578660200151611cdf565b305b60006040518060400160405280611cf98b6000015161342d565b81526020018773ffffffffffffffffffffffffffffffffffffffff168152506125de565b60408601528015611d3d578451309250611d369061343c565b8552611d4a565b8460400151935050611d50565b50611cb5565b8360600151831015611d8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c7d565b5050919050565b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051869173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b158015611e0a57600080fd5b505afa158015611e1e573d6000803e3d6000fd5b505050506040513d6020811015611e3457600080fd5b50511015610bb657610bb6868686868686612402565b7f000000000000000000000000000000000000000000000000000000000000000081565b61146a83338484611691565b6000818373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e307f00000000000000000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b8152600401611ed8929190615a5d565b60206040518083038186803b158015611ef057600080fd5b505afa158015611f04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2891906157d3565b10611f3557506000612021565b611f5f837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613280565b15611f6c57506001612021565b611f96837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe613280565b15611fa357506002612021565b611fae836000613280565b611fb757600080fd5b611fe1837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613280565b15611fee57506003612021565b612018837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe613280565b1561034f575060045b92915050565b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561209057600080fd5b505afa1580156120a4573d6000803e3d6000fd5b505050506040513d60208110156120ba57600080fd5b505190508281101561212d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b8015610c5557610c55848383613471565b60008211801561214f575060648211155b61215857600080fd5b60008573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156121c157600080fd5b505afa1580156121d5573d6000803e3d6000fd5b505050506040513d60208110156121eb57600080fd5b505190508481101561225e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b8015610bb657600061271061227383866133d0565b8161227a57fe5b049050801561228e5761228e878483613471565b61229b8786838503613471565b50505050505050565b6122af828233612027565b5050565b6000806122c1868685613646565b915091508362ffffff1681830312610bb6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c46565b6060610b2063219f5d1760e01b6040518060c001604052808560400135815260200161233d866000016020810190610a059190614feb565b8152602001612358866020016020810190610a059190614feb565b815260200185606001358152602001856080013581526020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff815250604051602401610a9e9190615cb4565b6000806123b28584613859565b915091508362ffffff16818303126118a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c46565b6122af82333084613ae1565b604080517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c48101839052905173ffffffffffffffffffffffffffffffffffffffff88169163d505accf9160e480830192600092919082900301818387803b158015610ed557600080fd5b60008413806124a95750600083135b6124b257600080fd5b60006124c08284018461564a565b905060008060006124d484600001516133f4565b9250925092506125067f0000000000000000000000000000000000000000000000000000000000000000848484613cbe565b5060008060008a13612547578473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161089612578565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16108a5b915091508115612597576125928587602001513384612d8d565b610ee9565b85516125a290613425565b156125c75785516125b29061343c565b86526125c1813360008961278f565b50610ee9565b80600081905550610ee98487602001513384612d8d565b600073ffffffffffffffffffffffffffffffffffffffff8416600114156126075733935061262a565b73ffffffffffffffffffffffffffffffffffffffff84166002141561262a573093505b600080600061263c85600001516133f4565b9194509250905073ffffffffffffffffffffffffffffffffffffffff8083169084161060008061266d868686613cd4565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088b856126938f613d12565b73ffffffffffffffffffffffffffffffffffffffff8e16156126b5578d6126db565b876126d45773fffd8963efd1fc6a506488495d951d5263988d256126db565b6401000276a45b8d6040516020016126ec9190615da6565b6040516020818303038152906040526040518663ffffffff1660e01b815260040161271b959493929190615a84565b6040805180830381600087803b15801561273457600080fd5b505af1158015612748573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061276c9190615395565b915091508261277b578161277d565b805b6000039b9a5050505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8416600114156127b8573393506127db565b73ffffffffffffffffffffffffffffffffffffffff8416600214156127db573093505b60008060006127ed85600001516133f4565b9194509250905073ffffffffffffffffffffffffffffffffffffffff8084169083161060008061281e858786613cd4565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088b856128448f613d12565b60000373ffffffffffffffffffffffffffffffffffffffff8e1615612869578d61288f565b876128885773fffd8963efd1fc6a506488495d951d5263988d2561288f565b6401000276a45b8d6040516020016128a09190615da6565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016128cf959493929190615a84565b6040805180830381600087803b1580156128e857600080fd5b505af11580156128fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129209190615395565b9150915060008361293557818360000361293b565b82826000035b909850905073ffffffffffffffffffffffffffffffffffffffff8a16612967578b811461296757600080fd5b50505050505050949350505050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8316906370a08231906129cb903090600401615a3c565b60206040518083038186803b1580156129e357600080fd5b505afa1580156129f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2091906157d3565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b60208310612a9257805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612a55565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612af4576040519150601f19603f3d011682016040523d82523d6000602084013e612af9565b606091505b505090508061146a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6060600282511015612b7a57600080fd5b815167ffffffffffffffff81118015612b9257600080fd5b50604051908082528060200260200182016040528015612bbc578160200160208202803683370190505b5090508281600183510381518110612bd057fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b8015610c4057600080612c3d87866001860381518110612c1c57fe5b6020026020010151878681518110612c3057fe5b6020026020010151613d44565b91509150612c5f848481518110612c5057fe5b60200260200101518383613e2c565b846001850381518110612c6e57fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01612c00565b6000806000612cb18585613f02565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612de85750804710155b15612f31577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e5557600080fd5b505af1158015612e69573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612eff57600080fd5b505af1158015612f13573d6000803e3d6000fd5b505050506040513d6020811015612f2957600080fd5b50610c559050565b73ffffffffffffffffffffffffffffffffffffffff8316301415612f5f57612f5a848383613471565b610c55565b610c5584848484613ae1565b60005b600183510381101561146a57600080848381518110612f8957fe5b6020026020010151858460010181518110612fa057fe5b6020026020010151915091506000612fb88383613f02565b5090506000612fe87f00000000000000000000000000000000000000000000000000000000000000008585612ca2565b90506000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561303657600080fd5b505afa15801561304a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061306e91906156da565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691506000808773ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16146130d05782846130d3565b83835b91509150613114828b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b815260040161120c9190615a3c565b9550613121868383613fa7565b9450505050506000808573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161461316557826000613169565b6000835b91509150600060028c51038a10613180578a6131c1565b6131c17f0000000000000000000000000000000000000000000000000000000000000000898e8d600201815181106131b457fe5b6020026020010151612ca2565b604080516000815260208101918290527f022c0d9f0000000000000000000000000000000000000000000000000000000090915290915073ffffffffffffffffffffffffffffffffffffffff87169063022c0d9f906132299086908690869060248101615e06565b600060405180830381600087803b15801561324357600080fd5b505af1158015613257573d6000803e3d6000fd5b50506001909b019a50612f6e9950505050505050505050565b8082038281111561202157600080fd5b60008060008473ffffffffffffffffffffffffffffffffffffffff1663095ea7b360e01b7f0000000000000000000000000000000000000000000000000000000000000000866040516024016132d7929190615ad6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516133609190615a20565b6000604051808303816000865af19150503d806000811461339d576040519150601f19603f3d011682016040523d82523d6000602084013e6133a2565b606091505b5091509150818015610e2c575080511580610e2c575080806020019051810190610e2c919061528d565b4290565b60008215806133eb575050818102818382816133e857fe5b04145b61202157600080fd5b60008080613402848261407d565b925061340f84601461417d565b905061341c84601761407d565b91509193909250565b516042111590565b6060610b20826000602b61426d565b8051606090610b209083906017907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe90161426d565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b6020831061354657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613509565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146135a8576040519150601f19603f3d011682016040523d82523d6000602084013e6135ad565b606091505b50915091508180156135db5750805115806135db57508080602001905160208110156135d857600080fd5b50515b6118a057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600080835185511461365757600080fd5b6000855167ffffffffffffffff8111801561367157600080fd5b506040519080825280602002602001820160405280156136ab57816020015b613698614e34565b8152602001906001900390816136905790505b5090506000865167ffffffffffffffff811180156136c857600080fd5b5060405190808252806020026020018201604052801561370257816020015b6136ef614e34565b8152602001906001900390816136e75790505b50905060005b8751811015613832576000806137318a848151811061372357fe5b602002602001015189613859565b9150915061373e82614454565b85848151811061374a57fe5b60200260200101516000019060020b908160020b8152505061376b81614454565b84848151811061377757fe5b60200260200101516000019060020b908160020b8152505088838151811061379b57fe5b60200260200101518584815181106137af57fe5b6020026020010151602001906fffffffffffffffffffffffffffffffff1690816fffffffffffffffffffffffffffffffff16815250508883815181106137f157fe5b602002602001015184848151811061380557fe5b6020908102919091018101516fffffffffffffffffffffffffffffffff9092169101525050600101613708565b5061383c82614465565b60020b935061384a81614465565b60020b92505050935093915050565b6000806000806138688661454d565b90506000805b82811015613a865760008060006138848b6133f4565b9250925092506000613897848484613cd4565b905060008063ffffffff8d166138c0576138b083614578565b600291820b9350900b9050613962565b6138ca838e614810565b8160020b915050809250508273ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561391b57600080fd5b505afa15801561392f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139539190615715565b50505060029290920b93505050505b600189038714156139a3578473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161099506139b2565b6139ac8e61343c565b9d508597505b6000871580613a5357508673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1610613a23578673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1610613a53565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16105b90508015613a68579b82019b9a81019a613a73565b828d039c50818c039b505b50506001909501945061386e9350505050565b5082613ad7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850294507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff840293505b5050509250929050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000178152925182516000948594938a169392918291908083835b60208310613bbe57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613b81565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613c20576040519150601f19603f3d011682016040523d82523d6000602084013e613c25565b606091505b5091509150818015613c53575080511580613c535750808060200190516020811015613c5057600080fd5b50515b610bb657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354460000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000610e2c85613ccf868686614c41565b614cbe565b6000613d0a7f0000000000000000000000000000000000000000000000000000000000000000613d05868686614c41565b614cee565b949350505050565b60007f80000000000000000000000000000000000000000000000000000000000000008210613d4057600080fd5b5090565b6000806000613d538585613f02565b509050600080613d64888888612ca2565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613da957600080fd5b505afa158015613dbd573d6000803e3d6000fd5b505050506040513d6060811015613dd357600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff87811690841614613e1a578082613e1d565b81815b90999098509650505050505050565b6000808411613e9c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f494e53554646494349454e545f4f55545055545f414d4f554e54000000000000604482015290519081900360640190fd5b600083118015613eac5750600082115b613eb557600080fd5b6000613ecd6103e8613ec786886133d0565b906133d0565b90506000613ee16103e5613ec78689613270565b9050613ef86001828481613ef157fe5b0490614e24565b9695505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613f3e57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610613f78578284613f7b565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216613fa057600080fd5b9250929050565b600080841161401757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f494e53554646494349454e545f494e5055545f414d4f554e5400000000000000604482015290519081900360640190fd5b6000831180156140275750600082115b61403057600080fd5b600061403e856103e56133d0565b9050600061404c82856133d0565b9050600061406683614060886103e86133d0565b90614e24565b905080828161407157fe5b04979650505050505050565b6000818260140110156140f157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f416464726573735f6f766572666c6f770000000000000000000000000000604482015290519081900360640190fd5b816014018351101561416457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e64730000000000000000000000604482015290519081900360640190fd5b5001602001516c01000000000000000000000000900490565b6000818260030110156141f157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b816003018351101561426457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e6473000000000000000000000000604482015290519081900360640190fd5b50016003015190565b60608182601f0110156142e157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b82828401101561435257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b818301845110156143c457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015290519081900360640190fd5b6060821580156143e3576040519150600082526020820160405261444b565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561441c578051835260209283019201614404565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b80600281900b8114610b2357600080fd5b6000806000805b84518110156144fa5784818151811061448157fe5b6020026020010151602001516fffffffffffffffffffffffffffffffff168582815181106144ab57fe5b60200260200101516000015160020b02830192508481815181106144cb57fe5b6020026020010151602001516fffffffffffffffffffffffffffffffff1682019150808060010191505061446c565b5080828161450457fe5b05925060008212801561451f575080828161451b57fe5b0715155b15611d8e5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01919050565b5160177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec9091010490565b6000806000808473ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b1580156145c457600080fd5b505afa1580156145d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145fc9190615715565b50939750919550935050600161ffff84161191506146489050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615bd8565b6000808673ffffffffffffffffffffffffffffffffffffffff1663252c09d7856040518263ffffffff1660e01b81526004016146849190615dee565b60806040518083038186803b15801561469c57600080fd5b505afa1580156146b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146d491906158e0565b5050915091506146e26133cc565b63ffffffff168263ffffffff16146146fc57849550614807565b60008361ffff1660018561ffff168761ffff1601038161471857fe5b06905060008060008a73ffffffffffffffffffffffffffffffffffffffff1663252c09d7856040518263ffffffff1660e01b81526004016147599190615dfd565b60806040518083038186803b15801561477157600080fd5b505afa158015614785573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147a991906158e0565b93505092509250806147e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615ba1565b82860363ffffffff811683870360060b816147fe57fe5b059a5050505050505b50505050915091565b60008063ffffffff831661488557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f4250000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60408051600280825260608201835260009260208301908036833701905050905083816000815181106148b457fe5b602002602001019063ffffffff16908163ffffffff16815250506000816001815181106148dd57fe5b63ffffffff9092166020928302919091018201526040517f883bdbfd00000000000000000000000000000000000000000000000000000000815260048101828152835160248301528351600093849373ffffffffffffffffffffffffffffffffffffffff8b169363883bdbfd9388939192839260449091019185820191028083838b5b83811015614978578181015183820152602001614960565b505050509050019250505060006040518083038186803b15801561499b57600080fd5b505afa1580156149af573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160409081528110156149f657600080fd5b8101908080516040519392919084640100000000821115614a1657600080fd5b908301906020820185811115614a2b57600080fd5b8251866020820283011164010000000082111715614a4857600080fd5b82525081516020918201928201910280838360005b83811015614a75578181015183820152602001614a5d565b5050505090500160405260200180516040519392919084640100000000821115614a9e57600080fd5b908301906020820185811115614ab357600080fd5b8251866020820283011164010000000082111715614ad057600080fd5b82525081516020918201928201910280838360005b83811015614afd578181015183820152602001614ae5565b5050505090500160405250505091509150600082600081518110614b1d57fe5b602002602001015183600181518110614b3257fe5b6020026020010151039050600082600081518110614b4c57fe5b602002602001015183600181518110614b6157fe5b60200260200101510390508763ffffffff168260060b81614b7e57fe5b05965060008260060b128015614ba857508763ffffffff168260060b81614ba157fe5b0760060b15155b15614bd3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909601955b63ffffffff881673ffffffffffffffffffffffffffffffffffffffff0277ffffffffffffffffffffffffffffffffffffffff00000000602083901b1677ffffffffffffffffffffffffffffffffffffffffffffffff821681614c3157fe5b0496505050505050509250929050565b614c49614e4b565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161115614c81579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b6000614cca8383614cee565b90503373ffffffffffffffffffffffffffffffffffffffff82161461202157600080fd5b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1610614d3057600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d5808301919091528251808303909101815260f5909101909152805191012090565b8082018281101561202157600080fd5b604080518082019091526000808252602082015290565b604080516060810182526000808252602082018190529181019190915290565b8035610b2381615f52565b60008083601f840112614e87578182fd5b50813567ffffffffffffffff811115614e9e578182fd5b6020830191508360208083028501011115613fa057600080fd5b600082601f830112614ec8578081fd5b81356020614edd614ed883615ec8565b615ea4565b8281528181019085830183850287018401881015614ef9578586fd5b855b85811015614f345781356fffffffffffffffffffffffffffffffff81168114614f22578788fd5b84529284019290840190600101614efb565b5090979650505050505050565b80518015158114610b2357600080fd5b600082601f830112614f61578081fd5b8135614f6f614ed882615ee6565b818152846020838601011115614f83578283fd5b816020850160208301379081016020019190915292915050565b80516dffffffffffffffffffffffffffff81168114610b2357600080fd5b805161ffff81168114610b2357600080fd5b803562ffffff81168114610b2357600080fd5b8035610b2381615f83565b600060208284031215614ffc578081fd5b813561500781615f52565b9392505050565b60008060408385031215615020578081fd5b823561502b81615f52565b946020939093013593505050565b60008060006060848603121561504d578081fd5b833561505881615f52565b925060208401359150604084013561506f81615f52565b809150509250925092565b600080600080600060a08688031215615091578283fd5b853561509c81615f52565b94506020860135935060408601356150b381615f52565b92506060860135915060808601356150ca81615f52565b809150509295509295909350565b600080600080608085870312156150ed578182fd5b84356150f881615f52565b93506020850135925060408501359150606085013561511681615f52565b939692955090935050565b60008060008060008060c08789031215615139578384fd5b863561514481615f52565b95506020870135945060408701359350606087013561516281615f95565b9598949750929560808101359460a0909101359350915050565b6000806020838503121561518e578182fd5b823567ffffffffffffffff8111156151a4578283fd5b6151b085828601614e76565b90969095509350505050565b600080600080608085870312156151d1578182fd5b843567ffffffffffffffff808211156151e8578384fd5b818701915087601f8301126151fb578384fd5b8135602061520b614ed883615ec8565b82815281810190858301885b858110156152405761522e8e8684358b0101614f51565b84529284019290840190600101615217565b50909950505088013592505080821115615258578384fd5b5061526587828801614eb8565b93505061527460408601614fcd565b915061528260608601614fe0565b905092959194509250565b60006020828403121561529e578081fd5b61500782614f41565b6000806000604084860312156152bb578081fd5b83359250602084013567ffffffffffffffff8111156152d8578182fd5b6152e486828701614e76565b9497909650939450505050565b600060208284031215615302578081fd5b813567ffffffffffffffff811115615318578182fd5b613d0a84828501614f51565b600080600060608486031215615338578081fd5b833567ffffffffffffffff81111561534e578182fd5b61535a86828701614f51565b93505061536960208501614fcd565b9150604084013561506f81615f83565b60006020828403121561538a578081fd5b813561500781615f74565b600080604083850312156153a7578182fd5b505080516020909101519092909150565b600080600080606085870312156153cd578182fd5b8435935060208501359250604085013567ffffffffffffffff808211156153f2578384fd5b818701915087601f830112615405578384fd5b813581811115615413578485fd5b886020828501011115615424578485fd5b95989497505060200194505050565b600060208284031215615444578081fd5b815167ffffffffffffffff81111561545a578182fd5b8201601f8101841361546a578182fd5b8051615478614ed882615ee6565b81815285602083850101111561548c578384fd5b610e2c826020830160208601615f26565b6000602082840312156154ae578081fd5b813567ffffffffffffffff808211156154c5578283fd5b90830190608082860312156154d8578283fd5b6040516080810181811083821117156154ed57fe5b6040528235828111156154fe578485fd5b61550a87828601614f51565b8252506020830135915061551d82615f52565b816020820152604083013560408201526060830135606082015280935050505092915050565b600060e08284031215615554578081fd5b60405160e0810181811067ffffffffffffffff8211171561557157fe5b60405261557d83614e6b565b815261558b60208401614e6b565b602082015261559c60408401614fcd565b60408201526155ad60608401614e6b565b60608201526080830135608082015260a083013560a08201526155d260c08401614e6b565b60c08201529392505050565b6000602082840312156155ef578081fd5b813567ffffffffffffffff811115615605578182fd5b820160808185031215615007578182fd5b600060e08284031215610836578081fd5b600060a08284031215610836578081fd5b60006101008284031215610836578081fd5b60006020828403121561565b578081fd5b813567ffffffffffffffff80821115615672578283fd5b9083019060408286031215615685578283fd5b60405160408101818110838211171561569a57fe5b6040528235828111156156ab578485fd5b6156b787828601614f51565b825250602083013592506156ca83615f52565b6020810192909252509392505050565b6000806000606084860312156156ee578081fd5b6156f784614f9d565b925061570560208501614f9d565b9150604084015161506f81615f83565b600080600080600080600060e0888a03121561572f578485fd5b875161573a81615f52565b602089015190975061574b81615f74565b955061575960408901614fbb565b945061576760608901614fbb565b935061577560808901614fbb565b925060a088015161578581615f95565b915061579360c08901614f41565b905092959891949750929550565b6000602082840312156157b2578081fd5b61500782614fcd565b6000602082840312156157cc578081fd5b5035919050565b6000602082840312156157e4578081fd5b5051919050565b600080604083850312156157fd578182fd5b82359150602083013561580f81615f52565b809150509250929050565b6000806000806080858703121561582f578182fd5b84359350602085013561584181615f52565b925060408501359150606085013561511681615f52565b60008060006060848603121561586c578081fd5b8335925060208401359150604084013561506f81615f52565b60008060008060006080868803121561589c578283fd5b8535945060208601359350604086013567ffffffffffffffff8111156158c0578384fd5b6158cc88828901614e76565b90945092505060608601356150ca81615f52565b600080600080608085870312156158f5578182fd5b845161590081615f83565b8094505060208501518060060b8114615917578283fd5b604086015190935061592881615f52565b915061528260608601614f41565b73ffffffffffffffffffffffffffffffffffffffff169052565b60008151808452615968816020860160208601615f26565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60020b9052565b62ffffff169052565b606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116825260e89390931b7fffffff0000000000000000000000000000000000000000000000000000000000166014820152921b166017820152602b0190565b6000828483379101908152919050565b60008251615a32818460208701615f26565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a06080830152615acb60a0830184615950565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015615b6d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452615b5b858351615950565b94509285019290850190600101615b21565b5092979650505050505050565b6000602082526150076020830184615950565b6020810160058310615b9b57fe5b91905290565b60208082526003908201527f4f4e490000000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526003908201527f4e454f0000000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526012908201527f546f6f206d756368207265717565737465640000000000000000000000000000604082015260600190565b60208082526002908201527f5444000000000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526013908201527f546f6f206c6974746c6520726563656976656400000000000000000000000000604082015260600190565b600060c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b600061016082019050615d0c828451615936565b6020830151615d1e6020840182615936565b506040830151615d3160408401826159a1565b506060830151615d44606084018261599a565b506080830151615d57608084018261599a565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151615d9582850182615936565b505061014092830151919092015290565b600060208252825160406020840152615dc26060840182615950565b905073ffffffffffffffffffffffffffffffffffffffff60208501511660408401528091505092915050565b61ffff91909116815260200190565b90815260200190565b600085825284602083015273ffffffffffffffffffffffffffffffffffffffff8416604083015260806060830152613ef86080830184615950565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615e75578283fd5b83018035915067ffffffffffffffff821115615e8f578283fd5b602001915036819003821315613fa057600080fd5b60405181810167ffffffffffffffff81118282101715615ec057fe5b604052919050565b600067ffffffffffffffff821115615edc57fe5b5060209081020190565b600067ffffffffffffffff821115615efa57fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b83811015615f41578181015183820152602001615f29565b83811115610c555750506000910152565b73ffffffffffffffffffffffffffffffffffffffff8116811461147957600080fd5b8060020b811461147957600080fd5b63ffffffff8116811461147957600080fd5b60ff8116811461147957600080fdfea164736f6c6343000706000a"; + static readonly abi: ({ + inputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + name?: undefined; + outputs?: undefined; + } | { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + } | { + inputs: { + components: { + internalType: string; + name: string; + type: string; + }[]; + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + } | { + stateMutability: string; + type: string; + inputs?: undefined; + name?: undefined; + outputs?: undefined; + })[]; + static createInterface(): SwapRouter02Interface; + static connect(address: string, signerOrProvider: Signer | Provider): SwapRouter02; +} diff --git a/dist2/types/types/v3/factories/SwapRouter__factory.d.ts b/dist2/types/types/v3/factories/SwapRouter__factory.d.ts new file mode 100644 index 00000000000..a8e7a00c2c1 --- /dev/null +++ b/dist2/types/types/v3/factories/SwapRouter__factory.d.ts @@ -0,0 +1,67 @@ +import { Signer, ContractFactory, Overrides } from "ethers"; +import { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { SwapRouter, SwapRouterInterface } from "../SwapRouter"; +export declare class SwapRouter__factory extends ContractFactory { + constructor(signer?: Signer); + deploy(_factory: string, _WETH9: string, overrides?: Overrides & { + from?: string | Promise; + }): Promise; + getDeployTransaction(_factory: string, _WETH9: string, overrides?: Overrides & { + from?: string | Promise; + }): TransactionRequest; + attach(address: string): SwapRouter; + connect(signer: Signer): SwapRouter__factory; + static readonly bytecode = "0x60c06040526000196000553480156200001757600080fd5b506040516200302f3803806200302f8339810160408190526200003a9162000076565b6001600160601b0319606092831b8116608052911b1660a052620000ad565b80516001600160a01b03811681146200007157600080fd5b919050565b6000806040838503121562000089578182fd5b620000948362000059565b9150620000a46020840162000059565b90509250929050565b60805160601c60a05160601c612f26620001096000398061012f528061058352806106ad5280610747528061078752806108b15280611c435280611ca35280611d24525080610dc6528061140c5280611e265250612f266000f3fe6080604052600436106101125760003560e01c8063c04b8d59116100a5578063df2ab5bb11610074578063f28c049811610059578063f28c0498146102f5578063f3995c6714610308578063fa461e331461031b576101bd565b8063df2ab5bb146102cf578063e0e189a0146102e2576101bd565b8063c04b8d5914610281578063c2e3140a14610294578063c45a0155146102a7578063db3e2198146102bc576101bd565b80634aa4a4fc116100e15780634aa4a4fc146102195780639b2c0a371461023b578063a4a78f0c1461024e578063ac9650d814610261576101bd565b806312210e8a146101c2578063414bf389146101ca5780634659a494146101f357806349404b7c14610206576101bd565b366101bd573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146101bb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742057455448390000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b600080fd5b6101bb61033b565b6101dd6101d83660046129f8565b61034d565b6040516101ea9190612df1565b60405180910390f35b6101bb610201366004612776565b6104bf565b6101bb610214366004612aff565b61057f565b34801561022557600080fd5b5061022e610745565b6040516101ea9190612c37565b6101bb610249366004612b2e565b610769565b6101bb61025c366004612776565b610981565b61027461026f3660046127d6565b610a56565b6040516101ea9190612caa565b6101dd61028f36600461294d565b610bb0565b6101bb6102a2366004612776565b610d0f565b3480156102b357600080fd5b5061022e610dc4565b6101dd6102ca3660046129f8565b610de8565b6101bb6102dd3660046126d7565b610f78565b6101bb6102f0366004612718565b611095565b6101dd610303366004612a14565b6111fb565b6101bb610316366004612776565b61132f565b34801561032757600080fd5b506101bb610336366004612868565b6113c7565b471561034b5761034b334761150e565b565b600081608001358061035d61165c565b11156103ca57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b61047060a08401356103e260808601606087016126b4565b6103f3610100870160e088016126b4565b604080518082019091528061040b60208a018a6126b4565b61041b60608b0160408c01612adc565b61042b60408c0160208d016126b4565b60405160200161043d93929190612bc1565b60405160208183030381529060405281526020013373ffffffffffffffffffffffffffffffffffffffff16815250611660565b91508260c001358210156104b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b090612d72565b60405180910390fd5b50919050565b604080517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e48101839052905173ffffffffffffffffffffffffffffffffffffffff881691638fcbaf0c9161010480830192600092919082900301818387803b15801561055f57600080fd5b505af1158015610573573d6000803e3d6000fd5b50505050505050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561060857600080fd5b505afa15801561061c573d6000803e3d6000fd5b505050506040513d602081101561063257600080fd5b50519050828110156106a557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e742057455448390000000000000000000000000000604482015290519081900360640190fd5b8015610740577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561071e57600080fd5b505af1158015610732573d6000803e3d6000fd5b50505050610740828261150e565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008211801561077a575060648211155b61078357600080fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561080c57600080fd5b505afa158015610820573d6000803e3d6000fd5b505050506040513d602081101561083657600080fd5b50519050848110156108a957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e742057455448390000000000000000000000000000604482015290519081900360640190fd5b801561097a577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561092257600080fd5b505af1158015610936573d6000803e3d6000fd5b50505050600061271061095285846117e690919063ffffffff16565b8161095957fe5b049050801561096c5761096c838261150e565b6109788582840361150e565b505b5050505050565b604080517fdd62ed3e00000000000000000000000000000000000000000000000000000000815233600482015230602482015290517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b158015610a1657600080fd5b505afa158015610a2a573d6000803e3d6000fd5b505050506040513d6020811015610a4057600080fd5b50511015610978576109788686868686866104bf565b60608167ffffffffffffffff81118015610a6f57600080fd5b50604051908082528060200260200182016040528015610aa357816020015b6060815260200190600190039081610a8e5790505b50905060005b82811015610ba95760008030868685818110610ac157fe5b9050602002810190610ad39190612dfa565b604051610ae1929190612c27565b600060405180830381855af49150503d8060008114610b1c576040519150601f19603f3d011682016040523d82523d6000602084013e610b21565b606091505b509150915081610b8757604481511015610b3a57600080fd5b60048101905080806020019051810190610b5491906128e3565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b09190612d28565b80848481518110610b9457fe5b60209081029190910101525050600101610aa9565b5092915050565b6000816040015180610bc061165c565b1115610c2d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b335b6000610c3e8560000151611810565b9050610c97856060015182610c57578660200151610c59565b305b60006040518060400160405280610c738b6000015161181c565b81526020018773ffffffffffffffffffffffffffffffffffffffff16815250611660565b60608601528015610cb7578451309250610cb09061182b565b8552610cc4565b8460600151935050610cca565b50610c2f565b8360800151831015610d08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b090612d72565b5050919050565b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051869173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b158015610d8457600080fd5b505afa158015610d98573d6000803e3d6000fd5b505050506040513d6020811015610dae57600080fd5b505110156109785761097886868686868661132f565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000816080013580610df861165c565b1115610e6557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b610f0e60a0840135610e7d60808601606087016126b4565b610e8e610100870160e088016126b4565b6040518060400160405280886020016020810190610eac91906126b4565b610ebc60608b0160408c01612adc565b610ec960208c018c6126b4565b604051602001610edb93929190612bc1565b60405160208183030381529060405281526020013373ffffffffffffffffffffffffffffffffffffffff16815250611860565b91508260c00135821115610f4e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b090612d3b565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600055919050565b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610fe157600080fd5b505afa158015610ff5573d6000803e3d6000fd5b505050506040513d602081101561100b57600080fd5b505190508281101561107e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b801561108f5761108f848383611a1c565b50505050565b6000821180156110a6575060648211155b6110af57600080fd5b60008573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561111857600080fd5b505afa15801561112c573d6000803e3d6000fd5b505050506040513d602081101561114257600080fd5b50519050848110156111b557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b80156109785760006127106111ca83866117e6565b816111d157fe5b04905080156111e5576111e5878483611a1c565b6111f28786838503611a1c565b50505050505050565b600081604001358061120b61165c565b111561127857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b6112eb606084013561129060408601602087016126b4565b60408051808201909152600090806112a88980612dfa565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525033602090910152611860565b5060005491508260800135821115610f4e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b090612d3b565b604080517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c48101839052905173ffffffffffffffffffffffffffffffffffffffff88169163d505accf9160e480830192600092919082900301818387803b15801561055f57600080fd5b60008413806113d65750600083135b6113df57600080fd5b60006113ed82840184612a4c565b905060008060006114018460000151611bf1565b9250925092506114337f0000000000000000000000000000000000000000000000000000000000000000848484611c22565b5060008060008a13611474578473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610896114a5565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16108a5b9150915081156114c4576114bf8587602001513384611c41565b610573565b85516114cf90611810565b156114f45785516114df9061182b565b86526114ee8133600089611860565b50610573565b806000819055508394506105738587602001513384611c41565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b6020831061158557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611548565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146115e7576040519150601f19603f3d011682016040523d82523d6000602084013e6115ec565b606091505b505090508061074057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b4290565b600073ffffffffffffffffffffffffffffffffffffffff8416611681573093505b60008060006116938560000151611bf1565b9194509250905073ffffffffffffffffffffffffffffffffffffffff808316908416106000806116c4868686611e1f565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088b856116ea8f611e5d565b73ffffffffffffffffffffffffffffffffffffffff8e161561170c578d611732565b8761172b5773fffd8963efd1fc6a506488495d951d5263988d25611732565b6401000276a45b8d6040516020016117439190612da9565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401611772959493929190612c58565b6040805180830381600087803b15801561178b57600080fd5b505af115801561179f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c39190612845565b91509150826117d257816117d4565b805b6000039b9a5050505050505050505050565b6000821580611801575050818102818382816117fe57fe5b04145b61180a57600080fd5b92915050565b8051604211155b919050565b606061180a826000602b611e8f565b805160609061180a9083906017907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe901611e8f565b600073ffffffffffffffffffffffffffffffffffffffff8416611881573093505b60008060006118938560000151611bf1565b9194509250905073ffffffffffffffffffffffffffffffffffffffff808416908316106000806118c4858786611e1f565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088b856118ea8f611e5d565b60000373ffffffffffffffffffffffffffffffffffffffff8e161561190f578d611935565b8761192e5773fffd8963efd1fc6a506488495d951d5263988d25611935565b6401000276a45b8d6040516020016119469190612da9565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401611975959493929190612c58565b6040805180830381600087803b15801561198e57600080fd5b505af11580156119a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c69190612845565b915091506000836119db5781836000036119e1565b82826000035b909850905073ffffffffffffffffffffffffffffffffffffffff8a16611a0d578b8114611a0d57600080fd5b50505050505050949350505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b60208310611af157805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611ab4565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b53576040519150601f19603f3d011682016040523d82523d6000602084013e611b58565b606091505b5091509150818015611b86575080511580611b865750808060200190516020811015611b8357600080fd5b50515b61097a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60008080611bff8482612076565b9250611c0c846014612176565b9050611c19846017612076565b91509193909250565b6000611c3885611c33868686612266565b6122e3565b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611c9c5750804710155b15611de5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d0957600080fd5b505af1158015611d1d573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611db357600080fd5b505af1158015611dc7573d6000803e3d6000fd5b505050506040513d6020811015611ddd57600080fd5b5061108f9050565b73ffffffffffffffffffffffffffffffffffffffff8316301415611e1357611e0e848383611a1c565b61108f565b61108f84848484612313565b6000611e557f0000000000000000000000000000000000000000000000000000000000000000611e50868686612266565b6124f0565b949350505050565b60007f80000000000000000000000000000000000000000000000000000000000000008210611e8b57600080fd5b5090565b60608182601f011015611f0357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b828284011015611f7457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b81830184511015611fe657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015290519081900360640190fd5b606082158015612005576040519150600082526020820160405261206d565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561203e578051835260209283019201612026565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b6000818260140110156120ea57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f416464726573735f6f766572666c6f770000000000000000000000000000604482015290519081900360640190fd5b816014018351101561215d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e64730000000000000000000000604482015290519081900360640190fd5b5001602001516c01000000000000000000000000900490565b6000818260030110156121ea57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b816003018351101561225d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e6473000000000000000000000000604482015290519081900360640190fd5b50016003015190565b61226e612626565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1611156122a6579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b60006122ef83836124f0565b90503373ffffffffffffffffffffffffffffffffffffffff82161461180a57600080fd5b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000178152925182516000948594938a169392918291908083835b602083106123f057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016123b3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612452576040519150601f19603f3d011682016040523d82523d6000602084013e612457565b606091505b5091509150818015612485575080511580612485575080806020019051602081101561248257600080fd5b50515b61097857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354460000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161061253257600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d5808301919091528251808303909101815260f5909101909152805191012090565b604080516060810182526000808252602082018190529181019190915290565b803561181781612ef4565b600082601f830112612661578081fd5b813561267461266f82612e88565b612e64565b818152846020838601011115612688578283fd5b816020850160208301379081016020019190915292915050565b600061010082840312156104b9578081fd5b6000602082840312156126c5578081fd5b81356126d081612ef4565b9392505050565b6000806000606084860312156126eb578182fd5b83356126f681612ef4565b925060208401359150604084013561270d81612ef4565b809150509250925092565b600080600080600060a0868803121561272f578081fd5b853561273a81612ef4565b945060208601359350604086013561275181612ef4565b925060608601359150608086013561276881612ef4565b809150509295509295909350565b60008060008060008060c0878903121561278e578081fd5b863561279981612ef4565b95506020870135945060408701359350606087013560ff811681146127bc578182fd5b9598949750929560808101359460a0909101359350915050565b600080602083850312156127e8578182fd5b823567ffffffffffffffff808211156127ff578384fd5b818501915085601f830112612812578384fd5b813581811115612820578485fd5b8660208083028501011115612833578485fd5b60209290920196919550909350505050565b60008060408385031215612857578182fd5b505080516020909101519092909150565b6000806000806060858703121561287d578182fd5b8435935060208501359250604085013567ffffffffffffffff808211156128a2578384fd5b818701915087601f8301126128b5578384fd5b8135818111156128c3578485fd5b8860208285010111156128d4578485fd5b95989497505060200194505050565b6000602082840312156128f4578081fd5b815167ffffffffffffffff81111561290a578182fd5b8201601f8101841361291a578182fd5b805161292861266f82612e88565b81815285602083850101111561293c578384fd5b611c38826020830160208601612ec8565b60006020828403121561295e578081fd5b813567ffffffffffffffff80821115612975578283fd5b9083019060a08286031215612988578283fd5b60405160a08101818110838211171561299d57fe5b6040528235828111156129ae578485fd5b6129ba87828601612651565b8252506129c960208401612646565b602082015260408301356040820152606083013560608201526080830135608082015280935050505092915050565b60006101008284031215612a0a578081fd5b6126d083836126a2565b600060208284031215612a25578081fd5b813567ffffffffffffffff811115612a3b578182fd5b820160a081850312156126d0578182fd5b600060208284031215612a5d578081fd5b813567ffffffffffffffff80821115612a74578283fd5b9083019060408286031215612a87578283fd5b604051604081018181108382111715612a9c57fe5b604052823582811115612aad578485fd5b612ab987828601612651565b82525060208301359250612acc83612ef4565b6020810192909252509392505050565b600060208284031215612aed578081fd5b813562ffffff811681146126d0578182fd5b60008060408385031215612b11578182fd5b823591506020830135612b2381612ef4565b809150509250929050565b60008060008060808587031215612b43578182fd5b843593506020850135612b5581612ef4565b9250604085013591506060850135612b6c81612ef4565b939692955090935050565b60008151808452612b8f816020860160208601612ec8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116825260e89390931b7fffffff0000000000000000000000000000000000000000000000000000000000166014820152921b166017820152602b0190565b6000828483379101908152919050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a06080830152612c9f60a0830184612b77565b979650505050505050565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015612d1b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452612d09858351612b77565b94509285019290850190600101612ccf565b5092979650505050505050565b6000602082526126d06020830184612b77565b60208082526012908201527f546f6f206d756368207265717565737465640000000000000000000000000000604082015260600190565b60208082526013908201527f546f6f206c6974746c6520726563656976656400000000000000000000000000604082015260600190565b600060208252825160406020840152612dc56060840182612b77565b905073ffffffffffffffffffffffffffffffffffffffff60208501511660408401528091505092915050565b90815260200190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612e2e578283fd5b83018035915067ffffffffffffffff821115612e48578283fd5b602001915036819003821315612e5d57600080fd5b9250929050565b60405181810167ffffffffffffffff81118282101715612e8057fe5b604052919050565b600067ffffffffffffffff821115612e9c57fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b83811015612ee3578181015183820152602001612ecb565b8381111561108f5750506000910152565b73ffffffffffffffffffffffffffffffffffffffff81168114612f1657600080fd5b5056fea164736f6c6343000706000a"; + static readonly abi: ({ + inputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + name?: undefined; + outputs?: undefined; + } | { + inputs: { + components: { + internalType: string; + name: string; + type: string; + }[]; + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + } | { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + } | { + stateMutability: string; + type: string; + inputs?: undefined; + name?: undefined; + outputs?: undefined; + })[]; + static createInterface(): SwapRouterInterface; + static connect(address: string, signerOrProvider: Signer | Provider): SwapRouter; +} diff --git a/dist2/types/types/v3/factories/TickLens__factory.d.ts b/dist2/types/types/v3/factories/TickLens__factory.d.ts new file mode 100644 index 00000000000..9c3b78310c0 --- /dev/null +++ b/dist2/types/types/v3/factories/TickLens__factory.d.ts @@ -0,0 +1,37 @@ +import { Signer, ContractFactory, Overrides } from "ethers"; +import { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { TickLens, TickLensInterface } from "../TickLens"; +export declare class TickLens__factory extends ContractFactory { + constructor(signer?: Signer); + deploy(overrides?: Overrides & { + from?: string | Promise; + }): Promise; + getDeployTransaction(overrides?: Overrides & { + from?: string | Promise; + }): TransactionRequest; + attach(address: string): TickLens; + connect(signer: Signer): TickLens__factory; + static readonly bytecode = "0x608060405234801561001057600080fd5b50610569806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063351fb47814610030575b600080fd5b61004361003e36600461037c565b610059565b60405161005091906104aa565b60405180910390f35b606060008373ffffffffffffffffffffffffffffffffffffffff16635339c296846040518263ffffffff1660e01b8152600401610096919061051b565b60206040518083038186803b1580156100ae57600080fd5b505afa1580156100c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e69190610492565b90506000805b610100811015610110576001811b831615610108576001909101905b6001016100ec565b5060008573ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561015957600080fd5b505afa15801561016d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061019191906103ba565b90508167ffffffffffffffff811180156101aa57600080fd5b506040519080825280602002602001820160405280156101e457816020015b6101d1610328565b8152602001906001900390816101c95790505b50935060005b61010081101561031e576001811b841615610316576040517ff30dba93000000000000000000000000000000000000000000000000000000008152600187900b60020b60081b8201830290600090819073ffffffffffffffffffffffffffffffffffffffff8b169063f30dba9390610266908690600401610529565b6101006040518083038186803b15801561027f57600080fd5b505afa158015610293573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102b791906103e2565b5050505050509150915060405180606001604052808460020b815260200182600f0b8152602001836fffffffffffffffffffffffffffffffff168152508887600190039750878151811061030757fe5b60200260200101819052505050505b6001016101ea565b5050505092915050565b604080516060810182526000808252602082018190529181019190915290565b8051801515811461035857600080fd5b919050565b805161035881610537565b805163ffffffff8116811461035857600080fd5b6000806040838503121561038e578182fd5b823561039981610537565b91506020830135600181900b81146103af578182fd5b809150509250929050565b6000602082840312156103cb578081fd5b81518060020b81146103db578182fd5b9392505050565b600080600080600080600080610100898b0312156103fe578384fd5b88516fffffffffffffffffffffffffffffffff8116811461041d578485fd5b80985050602089015180600f0b8114610434578485fd5b80975050604089015195506060890151945060808901518060060b8114610459578485fd5b935061046760a08a0161035d565b925061047560c08a01610368565b915061048360e08a01610348565b90509295985092959890939650565b6000602082840312156104a3578081fd5b5051919050565b602080825282518282018190526000919060409081850190868401855b8281101561050e578151805160020b855286810151600f0b878601528501516fffffffffffffffffffffffffffffffff1685850152606090930192908501906001016104c7565b5091979650505050505050565b60019190910b815260200190565b60029190910b815260200190565b73ffffffffffffffffffffffffffffffffffffffff8116811461055957600080fd5b5056fea164736f6c6343000706000a"; + static readonly abi: { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + components: { + internalType: string; + name: string; + type: string; + }[]; + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + }[]; + static createInterface(): TickLensInterface; + static connect(address: string, signerOrProvider: Signer | Provider): TickLens; +} diff --git a/dist2/types/types/v3/factories/UniswapInterfaceMulticall__factory.d.ts b/dist2/types/types/v3/factories/UniswapInterfaceMulticall__factory.d.ts new file mode 100644 index 00000000000..86a7878e91d --- /dev/null +++ b/dist2/types/types/v3/factories/UniswapInterfaceMulticall__factory.d.ts @@ -0,0 +1,61 @@ +import { Signer, ContractFactory, Overrides } from "ethers"; +import { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { UniswapInterfaceMulticall, UniswapInterfaceMulticallInterface } from "../UniswapInterfaceMulticall"; +export declare class UniswapInterfaceMulticall__factory extends ContractFactory { + constructor(signer?: Signer); + deploy(overrides?: Overrides & { + from?: string | Promise; + }): Promise; + getDeployTransaction(overrides?: Overrides & { + from?: string | Promise; + }): TransactionRequest; + attach(address: string): UniswapInterfaceMulticall; + connect(signer: Signer): UniswapInterfaceMulticall__factory; + static readonly bytecode = "0x608060405234801561001057600080fd5b50610567806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630f28c97d146100465780631749e1e3146100645780634d2301cc14610085575b600080fd5b61004e610098565b60405161005b919061041f565b60405180910390f35b6100776100723660046102a7565b61009c565b60405161005b929190610428565b61004e610093366004610286565b610220565b4290565b8051439060609067ffffffffffffffff811180156100b957600080fd5b506040519080825280602002602001820160405280156100f357816020015b6100e061023a565b8152602001906001900390816100d85790505b50905060005b835181101561021a57600080600086848151811061011357fe5b60200260200101516000015187858151811061012b57fe5b60200260200101516020015188868151811061014357fe5b60200260200101516040015192509250925060005a90506000808573ffffffffffffffffffffffffffffffffffffffff1685856040516101839190610403565b60006040518083038160008787f1925050503d80600081146101c1576040519150601f19603f3d011682016040523d82523d6000602084013e6101c6565b606091505b509150915060005a8403905060405180606001604052808415158152602001828152602001838152508989815181106101fb57fe5b60200260200101819052505050505050505080806001019150506100f9565b50915091565b73ffffffffffffffffffffffffffffffffffffffff163190565b604051806060016040528060001515815260200160008152602001606081525090565b803573ffffffffffffffffffffffffffffffffffffffff8116811461028157600080fd5b919050565b600060208284031215610297578081fd5b6102a08261025d565b9392505050565b600060208083850312156102b9578182fd5b823567ffffffffffffffff808211156102d0578384fd5b818501915085601f8301126102e3578384fd5b8135818111156102ef57fe5b6102fc8485830201610506565b81815284810190848601875b848110156103f457813587017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0606081838f03011215610346578a8bfd5b60408051606081018181108b8211171561035c57fe5b8252610369848d0161025d565b8152818401358c82015260608401358a811115610384578d8efd5b8085019450508e603f850112610398578c8dfd5b8b8401358a8111156103a657fe5b6103b68d85601f84011601610506565b93508084528f838287010111156103cb578d8efd5b808386018e86013783018c018d9052908101919091528552509287019290870190600101610308565b50909998505050505050505050565b6000825161041581846020870161052a565b9190910192915050565b90815260200190565b600060408083018584526020828186015281865180845260609350838701915083838202880101838901875b838110156104f6578983037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa001855281518051151584528681015187850152880151888401889052805188850181905260806104b582828801858c0161052a565b96880196601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01694909401909301925090850190600101610454565b50909a9950505050505050505050565b60405181810167ffffffffffffffff8111828210171561052257fe5b604052919050565b60005b8381101561054557818101518382015260200161052d565b83811115610554576000848401525b5050505056fea164736f6c6343000706000a"; + static readonly abi: ({ + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + } | { + inputs: { + components: { + internalType: string; + name: string; + type: string; + }[]; + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: ({ + internalType: string; + name: string; + type: string; + components?: undefined; + } | { + components: { + internalType: string; + name: string; + type: string; + }[]; + internalType: string; + name: string; + type: string; + })[]; + stateMutability: string; + type: string; + })[]; + static createInterface(): UniswapInterfaceMulticallInterface; + static connect(address: string, signerOrProvider: Signer | Provider): UniswapInterfaceMulticall; +} diff --git a/dist2/types/types/v3/factories/UniswapV3Factory__factory.d.ts b/dist2/types/types/v3/factories/UniswapV3Factory__factory.d.ts new file mode 100644 index 00000000000..91ac8364e34 --- /dev/null +++ b/dist2/types/types/v3/factories/UniswapV3Factory__factory.d.ts @@ -0,0 +1,52 @@ +import { Signer, ContractFactory, Overrides } from "ethers"; +import { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { UniswapV3Factory, UniswapV3FactoryInterface } from "../UniswapV3Factory"; +export declare class UniswapV3Factory__factory extends ContractFactory { + constructor(signer?: Signer); + deploy(overrides?: Overrides & { + from?: string | Promise; + }): Promise; + getDeployTransaction(overrides?: Overrides & { + from?: string | Promise; + }): TransactionRequest; + attach(address: string): UniswapV3Factory; + connect(signer: Signer): UniswapV3Factory__factory; + static readonly bytecode = "0x60a060405234801561001057600080fd5b503060601b608052600380546001600160a01b031916339081179091556040516000907fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c908290a36101f4600081815260046020527ffb8cf1d12598d1a039dd1d106665851a96aadf67d0d9ed76fceea282119208b7805462ffffff1916600a90811790915560405190929160008051602061614b83398151915291a3610bb8600081815260046020527f72dffa9b822156d9cf4b0090fa0b656bcb9cc2b2c60eb6acfc20a34f54b31743805462ffffff1916603c90811790915560405190929160008051602061614b83398151915291a3612710600081815260046020527f8cc740d51daa94ff54f33bd779c2d20149f524c340519b49181be5a08615f829805462ffffff191660c890811790915560405190929160008051602061614b83398151915291a360805160601c615fd7610174600039806105515250615fd76000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063890357301161005b578063890357301461013b5780638a7c195f146101855780638da5cb5b146101b0578063a1671295146101b85761007d565b806313af4035146100825780631698ee82146100aa57806322afcccb14610102575b600080fd5b6100a86004803603602081101561009857600080fd5b50356001600160a01b03166101f4565b005b6100e6600480360360608110156100c057600080fd5b5080356001600160a01b03908116916020810135909116906040013562ffffff16610267565b604080516001600160a01b039092168252519081900360200190f35b6101246004803603602081101561011857600080fd5b503562ffffff16610293565b6040805160029290920b8252519081900360200190f35b6101436102a8565b604080516001600160a01b0396871681529486166020860152929094168383015262ffffff16606083015260029290920b608082015290519081900360a00190f35b6100a86004803603604081101561019b57600080fd5b5062ffffff813516906020013560020b6102de565b6100e66103a1565b6100e6600480360360608110156101ce57600080fd5b5080356001600160a01b03908116916020810135909116906040013562ffffff166103b0565b6003546001600160a01b0316331461020b57600080fd5b6003546040516001600160a01b038084169216907fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c90600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b60056020908152600093845260408085208252928452828420905282529020546001600160a01b031681565b60046020526000908152604090205460020b81565b600054600154600280546001600160a01b03938416939283169281169162ffffff600160a01b83041691600160b81b9004900b85565b6003546001600160a01b031633146102f557600080fd5b620f42408262ffffff161061030957600080fd5b60008160020b13801561032057506140008160020b125b61032957600080fd5b62ffffff8216600090815260046020526040902054600290810b900b1561034f57600080fd5b62ffffff828116600081815260046020526040808220805462ffffff1916600287900b958616179055517fc66a3fdf07232cdd185febcc6579d408c241b47ae2f9907d84be655141eeaecc9190a35050565b6003546001600160a01b031681565b60006103ba610546565b826001600160a01b0316846001600160a01b031614156103d957600080fd5b600080846001600160a01b0316866001600160a01b0316106103fc5784866103ff565b85855b90925090506001600160a01b03821661041757600080fd5b62ffffff8416600090815260046020526040902054600290810b9081900b61043e57600080fd5b6001600160a01b0383811660009081526005602090815260408083208685168452825280832062ffffff8a168452909152902054161561047d57600080fd5b61048a308484888561057d565b6001600160a01b03808516600081815260056020818152604080842089871680865290835281852062ffffff8e168087529084528286208054988a166001600160a01b0319998a1681179091558287529484528286208787528452828620818752845294829020805490971684179096558051600289900b815291820192909252815195995091947f783cca1c0412dd0d695e784568c96da2e9c22ff989357a2e8b1d9b2b4e6b71189281900390910190a45050509392505050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461057b57600080fd5b565b6040805160a0810182526001600160a01b03878116808352878216602080850182905292881684860181905262ffffff888116606080880182905260028a810b6080998a01819052600080546001600160a01b03199081169099178155600180548a1689179055825490981686177fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff16600160a01b8502177fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff16600160b81b91830b9095160293909317909255875180870194909452838801929092528281019190915285518083039091018152930193849052825192909101919091209091610686906106f5565b8190604051809103906000f59050801580156106a6573d6000803e3d6000fd5b50600080546001600160a01b0319908116909155600180549091169055600280547fffffffffffff00000000000000000000000000000000000000000000000000001690559695505050505050565b6158c8806107038339019056fe6101606040523480156200001257600080fd5b503060601b60805260408051630890357360e41b81529051600091339163890357309160048082019260a092909190829003018186803b1580156200005657600080fd5b505afa1580156200006b573d6000803e3d6000fd5b505050506040513d60a08110156200008257600080fd5b508051602080830151604084015160608086015160809096015160e896871b6001600160e81b0319166101005291811b6001600160601b031990811660e05292811b831660c0529390931b1660a052600282810b900b90921b610120529150620000f79082906200010f811b62002b8417901c565b60801b6001600160801b03191661014052506200017d565b60008082600281900b620d89e719816200012557fe5b05029050600083600281900b620d89e8816200013d57fe5b0502905060008460020b83830360020b816200015557fe5b0560010190508062ffffff166001600160801b038016816200017357fe5b0495945050505050565b60805160601c60a05160601c60c05160601c60e05160601c6101005160e81c6101205160e81c6101405160801c61567e6200024a60003980611fee5280614b5f5280614b96525080610c0052806128fd5280614bca5280614bfc525080610cef52806119cb5280611a0252806129455250806111c75280611a855280611ef4528061244452806129215280613e6b5250806108d252806112f55280611a545280611e8e52806123be5280613d2252508061207b528061227d52806128d9525080612bfb525061567e6000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c806370cf754a116100ee578063c45a015511610097578063ddca3f4311610071578063ddca3f4314610800578063f305839914610820578063f30dba9314610828578063f637731d146108aa576101ae565b8063c45a0155146107d1578063d0c93a7c146107d9578063d21220a7146107f8576101ae565b8063883bdbfd116100c8578063883bdbfd14610633578063a34123a71461073c578063a38807f214610776576101ae565b806370cf754a146105c65780638206a4d1146105ce57806385b66729146105f6576101ae565b80633850c7bd1161015b578063490e6cbc11610135578063490e6cbc146104705780634f1eb3d8146104fc578063514ea4bf1461054d5780635339c296146105a6576101ae565b80633850c7bd1461035b5780633c8a7d8d146103b45780634614131914610456576101ae565b80631ad8b03b1161018c5780631ad8b03b146102aa578063252c09d7146102e157806332148f6714610338576101ae565b80630dfe1681146101b3578063128acb08146101d75780631a68650214610286575b600080fd5b6101bb6108d0565b604080516001600160a01b039092168252519081900360200190f35b61026d600480360360a08110156101ed57600080fd5b6001600160a01b0382358116926020810135151592604082013592606083013516919081019060a08101608082013564010000000081111561022e57600080fd5b82018360208201111561024057600080fd5b8035906020019184600183028401116401000000008311171561026257600080fd5b5090925090506108f4565b6040805192835260208301919091528051918290030190f35b61028e6114ad565b604080516001600160801b039092168252519081900360200190f35b6102b26114bc565b60405180836001600160801b03168152602001826001600160801b031681526020019250505060405180910390f35b6102fe600480360360208110156102f757600080fd5b50356114d6565b6040805163ffffffff909516855260069390930b60208501526001600160a01b039091168383015215156060830152519081900360800190f35b6103596004803603602081101561034e57600080fd5b503561ffff1661151c565b005b610363611616565b604080516001600160a01b03909816885260029690960b602088015261ffff9485168787015292841660608701529216608085015260ff90911660a0840152151560c0830152519081900360e00190f35b61026d600480360360a08110156103ca57600080fd5b6001600160a01b03823516916020810135600290810b92604083013590910b916001600160801b036060820135169181019060a08101608082013564010000000081111561041757600080fd5b82018360208201111561042957600080fd5b8035906020019184600183028401116401000000008311171561044b57600080fd5b509092509050611666565b61045e611922565b60408051918252519081900360200190f35b6103596004803603608081101561048657600080fd5b6001600160a01b0382351691602081013591604082013591908101906080810160608201356401000000008111156104bd57600080fd5b8201836020820111156104cf57600080fd5b803590602001918460018302840111640100000000831117156104f157600080fd5b509092509050611928565b6102b2600480360360a081101561051257600080fd5b506001600160a01b03813516906020810135600290810b91604081013590910b906001600160801b0360608201358116916080013516611d83565b61056a6004803603602081101561056357600080fd5b5035611f9d565b604080516001600160801b0396871681526020810195909552848101939093529084166060840152909216608082015290519081900360a00190f35b61045e600480360360208110156105bc57600080fd5b503560010b611fda565b61028e611fec565b610359600480360360408110156105e457600080fd5b5060ff81358116916020013516612010565b6102b26004803603606081101561060c57600080fd5b506001600160a01b03813516906001600160801b036020820135811691604001351661220f565b6106a36004803603602081101561064957600080fd5b81019060208101813564010000000081111561066457600080fd5b82018360208201111561067657600080fd5b8035906020019184602083028401116401000000008311171561069857600080fd5b5090925090506124dc565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156106e75781810151838201526020016106cf565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561072657818101518382015260200161070e565b5050505090500194505050505060405180910390f35b61026d6004803603606081101561075257600080fd5b508035600290810b91602081013590910b90604001356001600160801b0316612569565b6107a06004803603604081101561078c57600080fd5b508035600290810b9160200135900b6126e0565b6040805160069490940b84526001600160a01b03909216602084015263ffffffff1682820152519081900360600190f35b6101bb6128d7565b6107e16128fb565b6040805160029290920b8252519081900360200190f35b6101bb61291f565b610808612943565b6040805162ffffff9092168252519081900360200190f35b61045e612967565b6108486004803603602081101561083e57600080fd5b503560020b61296d565b604080516001600160801b039099168952600f9790970b602089015287870195909552606087019390935260069190910b60808601526001600160a01b031660a085015263ffffffff1660c0840152151560e083015251908190036101000190f35b610359600480360360208110156108c057600080fd5b50356001600160a01b03166129db565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806108ff612bf0565b85610936576040805162461bcd60e51b8152602060048201526002602482015261415360f01b604482015290519081900360640190fd5b6040805160e0810182526000546001600160a01b0381168252600160a01b8104600290810b810b900b602083015261ffff600160b81b8204811693830193909352600160c81b810483166060830152600160d81b8104909216608082015260ff600160e81b8304811660a0830152600160f01b909204909116151560c082018190526109ef576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b87610a3a5780600001516001600160a01b0316866001600160a01b0316118015610a35575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038716105b610a6c565b80600001516001600160a01b0316866001600160a01b0316108015610a6c57506401000276a36001600160a01b038716115b610aa3576040805162461bcd60e51b815260206004820152600360248201526214d41360ea1b604482015290519081900360640190fd5b6000805460ff60f01b191681556040805160c08101909152808a610ad25760048460a0015160ff16901c610ae5565b60108460a0015160ff1681610ae357fe5b065b60ff1681526004546001600160801b03166020820152604001610b06612c27565b63ffffffff168152602001600060060b815260200160006001600160a01b031681526020016000151581525090506000808913905060006040518060e001604052808b81526020016000815260200185600001516001600160a01b03168152602001856020015160020b81526020018c610b8257600254610b86565b6001545b815260200160006001600160801b0316815260200184602001516001600160801b031681525090505b805115801590610bd55750886001600160a01b031681604001516001600160a01b031614155b15610f9f57610be261560e565b60408201516001600160a01b031681526060820151610c25906006907f00000000000000000000000000000000000000000000000000000000000000008f612c2b565b15156040830152600290810b810b60208301819052620d89e719910b1215610c5657620d89e7196020820152610c75565b6020810151620d89e860029190910b1315610c7557620d89e860208201525b610c828160200151612d6d565b6001600160a01b031660608201526040820151610d13908d610cbc578b6001600160a01b031683606001516001600160a01b031611610cd6565b8b6001600160a01b031683606001516001600160a01b0316105b610ce4578260600151610ce6565b8b5b60c085015185517f000000000000000000000000000000000000000000000000000000000000000061309f565b60c085015260a084015260808301526001600160a01b031660408301528215610d7557610d498160c00151826080015101613291565b825103825260a0810151610d6b90610d6090613291565b6020840151906132a7565b6020830152610db0565b610d828160a00151613291565b825101825260c08101516080820151610daa91610d9f9101613291565b6020840151906132c3565b60208301525b835160ff1615610df6576000846000015160ff168260c0015181610dd057fe5b60c0840180519290910491829003905260a0840180519091016001600160801b03169052505b60c08201516001600160801b031615610e3557610e298160c00151600160801b8460c001516001600160801b03166132d9565b60808301805190910190525b80606001516001600160a01b031682604001516001600160a01b03161415610f5e57806040015115610f35578360a00151610ebf57610e9d846040015160008760200151886040015188602001518a606001516008613389909695949392919063ffffffff16565b6001600160a01b03166080860152600690810b900b6060850152600160a08501525b6000610f0b82602001518e610ed657600154610edc565b84608001515b8f610eeb578560800151610eef565b6002545b608089015160608a015160408b0151600595949392919061351c565b90508c15610f17576000035b610f258360c00151826135ef565b6001600160801b031660c0840152505b8b610f44578060200151610f4d565b60018160200151035b600290810b900b6060830152610f99565b80600001516001600160a01b031682604001516001600160a01b031614610f9957610f8c82604001516136a5565b600290810b900b60608301525b50610baf565b836020015160020b816060015160020b1461107a57600080610fed86604001518660400151886020015188602001518a606001518b6080015160086139d1909695949392919063ffffffff16565b604085015160608601516000805461ffff60c81b1916600160c81b61ffff958616021761ffff60b81b1916600160b81b95909416949094029290921762ffffff60a01b1916600160a01b62ffffff60029490940b93909316929092029190911773ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03909116179055506110ac9050565b60408101516000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039092169190911790555b8060c001516001600160801b031683602001516001600160801b0316146110f25760c0810151600480546001600160801b0319166001600160801b039092169190911790555b8a1561114257608081015160015560a08101516001600160801b03161561113d5760a0810151600380546001600160801b031981166001600160801b03918216909301169190911790555b611188565b608081015160025560a08101516001600160801b0316156111885760a0810151600380546001600160801b03808216600160801b92839004821690940116029190911790555b8115158b1515146111a157602081015181518b036111ae565b80600001518a0381602001515b90965094508a156112e75760008512156111f0576111f07f00000000000000000000000000000000000000000000000000000000000000008d87600003613b86565b60006111fa613cd4565b9050336001600160a01b031663fa461e3388888c8c6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b15801561127e57600080fd5b505af1158015611292573d6000803e3d6000fd5b5050505061129e613cd4565b6112a88289613e0d565b11156112e1576040805162461bcd60e51b815260206004820152600360248201526249494160e81b604482015290519081900360640190fd5b50611411565b600086121561131e5761131e7f00000000000000000000000000000000000000000000000000000000000000008d88600003613b86565b6000611328613e1d565b9050336001600160a01b031663fa461e3388888c8c6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b1580156113ac57600080fd5b505af11580156113c0573d6000803e3d6000fd5b505050506113cc613e1d565b6113d68288613e0d565b111561140f576040805162461bcd60e51b815260206004820152600360248201526249494160e81b604482015290519081900360640190fd5b505b60408082015160c083015160608085015184518b8152602081018b90526001600160a01b03948516818701526001600160801b039093169183019190915260020b60808201529151908e169133917fc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca679181900360a00190a350506000805460ff60f01b1916600160f01b17905550919890975095505050505050565b6004546001600160801b031681565b6003546001600160801b0380821691600160801b90041682565b60088161ffff81106114e757600080fd5b015463ffffffff81169150640100000000810460060b90600160581b81046001600160a01b031690600160f81b900460ff1684565b600054600160f01b900460ff16611560576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b19169055611575612bf0565b60008054600160d81b900461ffff169061159160088385613eb5565b6000805461ffff808416600160d81b810261ffff60d81b19909316929092179092559192508316146115fe576040805161ffff80851682528316602082015281517fac49e518f90a358f652e4400164f05a5d8f7e35e7747279bc3a93dbf584e125a929181900390910190a15b50506000805460ff60f01b1916600160f01b17905550565b6000546001600160a01b03811690600160a01b810460020b9061ffff600160b81b8204811691600160c81b8104821691600160d81b8204169060ff600160e81b8204811691600160f01b90041687565b600080548190600160f01b900460ff166116ad576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b191690556001600160801b0385166116cd57600080fd5b60008061171b60405180608001604052808c6001600160a01b031681526020018b60020b81526020018a60020b81526020016117118a6001600160801b0316613f58565b600f0b9052613f69565b9250925050819350809250600080600086111561173d5761173a613cd4565b91505b841561174e5761174b613e1d565b90505b336001600160a01b031663d348799787878b8b6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b1580156117d057600080fd5b505af11580156117e4573d6000803e3d6000fd5b50505050600086111561183b576117f9613cd4565b6118038388613e0d565b111561183b576040805162461bcd60e51b815260206004820152600260248201526104d360f41b604482015290519081900360640190fd5b841561188b57611849613e1d565b6118538287613e0d565b111561188b576040805162461bcd60e51b81526020600482015260026024820152614d3160f01b604482015290519081900360640190fd5b8960020b8b60020b8d6001600160a01b03167f7a53080ba414158be7ec69b987b5fb7d07dee101fe85488f0853ae16239d0bde338d8b8b60405180856001600160a01b03168152602001846001600160801b0316815260200183815260200182815260200194505050505060405180910390a450506000805460ff60f01b1916600160f01b17905550919890975095505050505050565b60025481565b600054600160f01b900460ff1661196c576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b19169055611981612bf0565b6004546001600160801b0316806119c3576040805162461bcd60e51b81526020600482015260016024820152601360fa1b604482015290519081900360640190fd5b60006119f8867f000000000000000000000000000000000000000000000000000000000000000062ffffff16620f42406141a9565b90506000611a2f867f000000000000000000000000000000000000000000000000000000000000000062ffffff16620f42406141a9565b90506000611a3b613cd4565b90506000611a47613e1d565b90508815611a7a57611a7a7f00000000000000000000000000000000000000000000000000000000000000008b8b613b86565b8715611aab57611aab7f00000000000000000000000000000000000000000000000000000000000000008b8a613b86565b336001600160a01b031663e9cbafb085858a8a6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b158015611b2d57600080fd5b505af1158015611b41573d6000803e3d6000fd5b505050506000611b4f613cd4565b90506000611b5b613e1d565b905081611b688588613e0d565b1115611ba0576040805162461bcd60e51b8152602060048201526002602482015261046360f41b604482015290519081900360640190fd5b80611bab8487613e0d565b1115611be3576040805162461bcd60e51b8152602060048201526002602482015261463160f01b604482015290519081900360640190fd5b8382038382038115611c725760008054600160e81b9004600f16908115611c16578160ff168481611c1057fe5b04611c19565b60005b90506001600160801b03811615611c4c57600380546001600160801b038082168401166001600160801b03199091161790555b611c66818503600160801b8d6001600160801b03166132d9565b60018054909101905550505b8015611cfd5760008054600160e81b900460041c600f16908115611ca2578160ff168381611c9c57fe5b04611ca5565b60005b90506001600160801b03811615611cd757600380546001600160801b03600160801b8083048216850182160291161790555b611cf1818403600160801b8d6001600160801b03166132d9565b60028054909101905550505b8d6001600160a01b0316336001600160a01b03167fbdbdb71d7860376ba52b25a5028beea23581364a40522f6bcfb86bb1f2dca6338f8f86866040518085815260200184815260200183815260200182815260200194505050505060405180910390a350506000805460ff60f01b1916600160f01b179055505050505050505050505050565b600080548190600160f01b900460ff16611dca576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b19168155611de460073389896141e3565b60038101549091506001600160801b0390811690861611611e055784611e14565b60038101546001600160801b03165b60038201549093506001600160801b03600160801b909104811690851611611e3c5783611e52565b6003810154600160801b90046001600160801b03165b91506001600160801b03831615611eb7576003810180546001600160801b031981166001600160801b03918216869003821617909155611eb7907f0000000000000000000000000000000000000000000000000000000000000000908a908616613b86565b6001600160801b03821615611f1d576003810180546001600160801b03600160801b808304821686900382160291811691909117909155611f1d907f0000000000000000000000000000000000000000000000000000000000000000908a908516613b86565b604080516001600160a01b038a1681526001600160801b0380861660208301528416818301529051600288810b92908a900b9133917f70935338e69775456a85ddef226c395fb668b63fa0115f5f20610b388e6ca9c0919081900360600190a4506000805460ff60f01b1916600160f01b17905590969095509350505050565b60076020526000908152604090208054600182015460028301546003909301546001600160801b0392831693919281811691600160801b90041685565b60066020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600054600160f01b900460ff16612054576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b1916905560408051638da5cb5b60e01b815290516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691638da5cb5b916004808301926020929190829003018186803b1580156120c157600080fd5b505afa1580156120d5573d6000803e3d6000fd5b505050506040513d60208110156120eb57600080fd5b50516001600160a01b0316331461210157600080fd5b60ff82161580612124575060048260ff16101580156121245750600a8260ff1611155b801561214e575060ff8116158061214e575060048160ff161015801561214e5750600a8160ff1611155b61215757600080fd5b60008054610ff0600484901b16840160ff908116600160e81b9081027fffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841617909355919004167f973d8d92bb299f4af6ce49b52a8adb85ae46b9f214c4c4fc06ac77401237b1336010826040805160ff9390920683168252600f600486901c16602083015286831682820152918516606082015290519081900360800190a150506000805460ff60f01b1916600160f01b17905550565b600080548190600160f01b900460ff16612256576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b1916905560408051638da5cb5b60e01b815290516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691638da5cb5b916004808301926020929190829003018186803b1580156122c357600080fd5b505afa1580156122d7573d6000803e3d6000fd5b505050506040513d60208110156122ed57600080fd5b50516001600160a01b0316331461230357600080fd5b6003546001600160801b039081169085161161231f578361232c565b6003546001600160801b03165b6003549092506001600160801b03600160801b9091048116908416116123525782612366565b600354600160801b90046001600160801b03165b90506001600160801b038216156123e7576003546001600160801b038381169116141561239557600019909101905b600380546001600160801b031981166001600160801b039182168590038216179091556123e7907f00000000000000000000000000000000000000000000000000000000000000009087908516613b86565b6001600160801b0381161561246d576003546001600160801b03828116600160801b90920416141561241857600019015b600380546001600160801b03600160801b80830482168590038216029181169190911790915561246d907f00000000000000000000000000000000000000000000000000000000000000009087908416613b86565b604080516001600160801b0380851682528316602082015281516001600160a01b0388169233927f596b573906218d3411850b26a6b437d6c4522fdb43d2d2386263f86d50b8b151929081900390910190a36000805460ff60f01b1916600160f01b1790559094909350915050565b6060806124e7612bf0565b61255e6124f2612c27565b858580806020026020016040519081016040528093929190818152602001838360200280828437600092018290525054600454600896959450600160a01b820460020b935061ffff600160b81b8304811693506001600160801b0390911691600160c81b900416614247565b915091509250929050565b600080548190600160f01b900460ff166125b0576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b1916815560408051608081018252338152600288810b602083015287900b918101919091528190819061260990606081016125fc6001600160801b038a16613f58565b600003600f0b9052613f69565b925092509250816000039450806000039350600085118061262a5750600084115b15612669576003830180546001600160801b038082168089018216600160801b93849004831689019092169092029091176001600160801b0319161790555b604080516001600160801b0388168152602081018790528082018690529051600289810b92908b900b9133917f0c396cd989a39f4459b5fa1aed6a9a8dcdbc45908acfd67e028cd568da98982c919081900360600190a450506000805460ff60f01b1916600160f01b179055509094909350915050565b60008060006126ed612bf0565b6126f785856143a1565b600285810b810b60009081526005602052604080822087840b90930b825281206003830154600681900b9367010000000000000082046001600160a01b0316928492600160d81b810463ffffffff169284929091600160f81b900460ff168061275f57600080fd5b6003820154600681900b985067010000000000000081046001600160a01b03169650600160d81b810463ffffffff169450600160f81b900460ff16806127a457600080fd5b50506040805160e0810182526000546001600160a01b0381168252600160a01b8104600290810b810b810b6020840181905261ffff600160b81b8404811695850195909552600160c81b830485166060850152600160d81b8304909416608084015260ff600160e81b8304811660a0850152600160f01b909204909116151560c08301529093508e810b91900b1215905061284d575093909403965090039350900390506128d0565b8a60020b816020015160020b12156128c1576000612869612c27565b602083015160408401516004546060860151939450600093849361289f936008938893879392916001600160801b031690613389565b9a9003989098039b5050949096039290920396509091030392506128d0915050565b50949093039650039350900390505b9250925092565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60015481565b60056020526000908152604090208054600182015460028301546003909301546001600160801b03831693600160801b909304600f0b9290600681900b9067010000000000000081046001600160a01b031690600160d81b810463ffffffff1690600160f81b900460ff1688565b6000546001600160a01b031615612a1e576040805162461bcd60e51b8152602060048201526002602482015261414960f01b604482015290519081900360640190fd5b6000612a29826136a5565b9050600080612a41612a39612c27565b60089061446a565b6040805160e0810182526001600160a01b038816808252600288810b6020808501829052600085870181905261ffff898116606088018190529089166080880181905260a08801839052600160c0909801979097528154600160f01b73ffffffffffffffffffffffffffffffffffffffff19909116871762ffffff60a01b1916600160a01b62ffffff9787900b9790971696909602959095177fffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffff16600160c81b9091021761ffff60d81b1916600160d81b909602959095177fff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1692909217909355835191825281019190915281519395509193507f98636036cb66a9c19a37435efc1e90142190214e8abeb821bdba3f2990dd4c9592918290030190a150505050565b60008082600281900b620d89e71981612b9957fe5b05029050600083600281900b620d89e881612bb057fe5b0502905060008460020b83830360020b81612bc757fe5b0560010190508062ffffff166001600160801b03801681612be457fe5b0493505050505b919050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612c2557600080fd5b565b4290565b60008060008460020b8660020b81612c3f57fe5b05905060008660020b128015612c6657508460020b8660020b81612c5f57fe5b0760020b15155b15612c7057600019015b8315612ce557600080612c82836144b6565b600182810b810b600090815260208d9052604090205460ff83169190911b80016000190190811680151597509294509092509085612cc757888360ff16860302612cda565b88612cd1826144c8565b840360ff168603025b965050505050612d63565b600080612cf4836001016144b6565b91509150600060018260ff166001901b031990506000818b60008660010b60010b8152602001908152602001600020541690508060001415955085612d4657888360ff0360ff16866001010102612d5c565b8883612d5183614568565b0360ff168660010101025b9650505050505b5094509492505050565b60008060008360020b12612d84578260020b612d8c565b8260020b6000035b9050620d89e8811115612dca576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b600060018216612dde57600160801b612df0565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615612e24576ffff97272373d413259a46990580e213a0260801c5b6004821615612e43576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615612e62576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615612e81576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615612ea0576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615612ebf576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615612ede576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615612efe576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615612f1e576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615612f3e576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615612f5e576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615612f7e576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615612f9e576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615612fbe576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615612fde576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615612fff576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b6202000082161561301f576e5d6af8dedb81196699c329225ee6040260801c5b6204000082161561303e576d2216e584f5fa1ea926041bedfe980260801c5b6208000082161561305b576b048a170391f7dc42444e8fa20260801c5b60008460020b131561307657806000198161307257fe5b0490505b64010000000081061561308a57600161308d565b60005b60ff16602082901c0192505050919050565b60008080806001600160a01b03808916908a1610158187128015906131245760006130d88989620f42400362ffffff16620f42406132d9565b9050826130f1576130ec8c8c8c6001614652565b6130fe565b6130fe8b8d8c60016146cd565b955085811061310f578a965061311e565b61311b8c8b838661478a565b96505b5061316e565b8161313b576131368b8b8b60006146cd565b613148565b6131488a8c8b6000614652565b935083886000031061315c5789955061316e565b61316b8b8a8a600003856147d6565b95505b6001600160a01b038a81169087161482156131d15780801561318d5750815b6131a35761319e878d8c60016146cd565b6131a5565b855b95508080156131b2575081155b6131c8576131c3878d8c6000614652565b6131ca565b845b945061321b565b8080156131db5750815b6131f1576131ec8c888c6001614652565b6131f3565b855b9550808015613200575081155b613216576132118c888c60006146cd565b613218565b845b94505b8115801561322b57508860000385115b15613237578860000394505b81801561325657508a6001600160a01b0316876001600160a01b031614155b15613265578589039350613282565b61327f868962ffffff168a620f42400362ffffff166141a9565b93505b50505095509550955095915050565b6000600160ff1b82106132a357600080fd5b5090565b808203828113156000831215146132bd57600080fd5b92915050565b818101828112156000831215146132bd57600080fd5b600080806000198587098686029250828110908390030390508061330f576000841161330457600080fd5b508290049050613382565b80841161331b57600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150505b9392505050565b60008063ffffffff8716613430576000898661ffff1661ffff81106133aa57fe5b60408051608081018252919092015463ffffffff8082168084526401000000008304600690810b810b900b6020850152600160581b83046001600160a01b031694840194909452600160f81b90910460ff16151560608301529092508a161461341c57613419818a8988614822565b90505b806020015181604001519250925050613510565b8688036000806134458c8c858c8c8c8c6148d2565b91509150816000015163ffffffff168363ffffffff161415613477578160200151826040015194509450505050613510565b805163ffffffff8481169116141561349f578060200151816040015194509450505050613510565b8151815160208085015190840151918390039286039163ffffffff80841692908516910360060b816134cd57fe5b05028460200151018263ffffffff168263ffffffff1686604001518660400151036001600160a01b031602816134ff57fe5b048560400151019650965050505050505b97509795505050505050565b600295860b860b60009081526020979097526040909620600181018054909503909455938301805490920390915560038201805463ffffffff600160d81b6001600160a01b036701000000000000008085048216909603169094027fffffffffff0000000000000000000000000000000000000000ffffffffffffff90921691909117600681810b90960390950b66ffffffffffffff1666ffffffffffffff199095169490941782810485169095039093160263ffffffff60d81b1990931692909217905554600160801b9004600f0b90565b60008082600f0b121561365457826001600160801b03168260000384039150816001600160801b03161061364f576040805162461bcd60e51b81526020600482015260026024820152614c5360f01b604482015290519081900360640190fd5b6132bd565b826001600160801b03168284019150816001600160801b031610156132bd576040805162461bcd60e51b81526020600482015260026024820152614c4160f01b604482015290519081900360640190fd5b60006401000276a36001600160a01b038316108015906136e1575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b613716576040805162461bcd60e51b81526020600482015260016024820152602960f91b604482015290519081900360640190fd5b77ffffffffffffffffffffffffffffffffffffffff00000000602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c979088119617909417909217179091171717608081106137b757607f810383901c91506137c1565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b146139c257886001600160a01b03166139a682612d6d565b6001600160a01b031611156139bb57816139bd565b805b6139c4565b815b9998505050505050505050565b6000806000898961ffff1661ffff81106139e757fe5b60408051608081018252919092015463ffffffff8082168084526401000000008304600690810b810b900b6020850152600160581b83046001600160a01b031694840194909452600160f81b90910460ff161515606083015290925089161415613a575788859250925050613510565b8461ffff168461ffff16118015613a7857506001850361ffff168961ffff16145b15613a8557839150613a89565b8491505b8161ffff168960010161ffff1681613a9d57fe5b069250613aac81898989614822565b8a8461ffff1661ffff8110613abd57fe5b825191018054602084015160408501516060909501511515600160f81b027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001600160a01b03909616600160581b027fff0000000000000000000000000000000000000000ffffffffffffffffffffff60069390930b66ffffffffffffff16640100000000026affffffffffffff000000001963ffffffff90971663ffffffff199095169490941795909516929092171692909217929092161790555097509795505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1781529251825160009485949389169392918291908083835b60208310613c025780518252601f199092019160209182019101613be3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613c64576040519150601f19603f3d011682016040523d82523d6000602084013e613c69565b606091505b5091509150818015613c97575080511580613c975750808060200190516020811015613c9457600080fd5b50515b613ccd576040805162461bcd60e51b81526020600482015260026024820152612a2360f11b604482015290519081900360640190fd5b5050505050565b604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b17815291518151600093849384936001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693919290918291908083835b60208310613d6d5780518252601f199092019160209182019101613d4e565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114613dcd576040519150601f19603f3d011682016040523d82523d6000602084013e613dd2565b606091505b5091509150818015613de657506020815110155b613def57600080fd5b808060200190516020811015613e0457600080fd5b50519250505090565b808201828110156132bd57600080fd5b604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b17815291518151600093849384936001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016939192909182919080838360208310613d6d5780518252601f199092019160209182019101613d4e565b6000808361ffff1611613ef3576040805162461bcd60e51b81526020600482015260016024820152604960f81b604482015290519081900360640190fd5b8261ffff168261ffff1611613f09575081613382565b825b8261ffff168161ffff161015613f4f576001858261ffff1661ffff8110613f2e57fe5b01805463ffffffff191663ffffffff92909216919091179055600101613f0b565b50909392505050565b80600f81900b8114612beb57600080fd5b6000806000613f76612bf0565b613f88846020015185604001516143a1565b6040805160e0810182526000546001600160a01b0381168252600160a01b8104600290810b810b900b602080840182905261ffff600160b81b8404811685870152600160c81b84048116606080870191909152600160d81b8504909116608086015260ff600160e81b8504811660a0870152600160f01b909404909316151560c08501528851908901519489015192890151939461402c9491939092909190614acf565b93508460600151600f0b6000146141a157846020015160020b816020015160020b12156140815761407a6140638660200151612d6d565b6140708760400151612d6d565b8760600151614c84565b92506141a1565b846040015160020b816020015160020b12156141775760045460408201516001600160801b03909116906140d3906140b7612c27565b60208501516060860151608087015160089493929187916139d1565b6000805461ffff60c81b1916600160c81b61ffff938416021761ffff60b81b1916600160b81b939092169290920217905581516040870151614123919061411990612d6d565b8860600151614c84565b93506141416141358760200151612d6d565b83516060890151614cc8565b92506141518187606001516135ef565b600480546001600160801b0319166001600160801b0392909216919091179055506141a1565b61419e6141878660200151612d6d565b6141948760400151612d6d565b8760600151614cc8565b91505b509193909250565b60006141b68484846132d9565b9050600082806141c257fe5b84860911156133825760001981106141d957600080fd5b6001019392505050565b6040805160609490941b6bffffffffffffffffffffffff1916602080860191909152600293840b60e890811b60348701529290930b90911b60378401528051808403601a018152603a90930181528251928201929092206000908152929052902090565b60608060008361ffff1611614287576040805162461bcd60e51b81526020600482015260016024820152604960f81b604482015290519081900360640190fd5b865167ffffffffffffffff8111801561429f57600080fd5b506040519080825280602002602001820160405280156142c9578160200160208202803683370190505b509150865167ffffffffffffffff811180156142e457600080fd5b5060405190808252806020026020018201604052801561430e578160200160208202803683370190505b50905060005b87518110156143945761433f8a8a8a848151811061432e57fe5b60200260200101518a8a8a8a613389565b84838151811061434b57fe5b6020026020010184848151811061435e57fe5b60200260200101826001600160a01b03166001600160a01b03168152508260060b60060b81525050508080600101915050614314565b5097509795505050505050565b8060020b8260020b126143e1576040805162461bcd60e51b8152602060048201526003602482015262544c5560e81b604482015290519081900360640190fd5b620d89e719600283900b1215614424576040805162461bcd60e51b8152602060048201526003602482015262544c4d60e81b604482015290519081900360640190fd5b620d89e8600282900b1315614466576040805162461bcd60e51b815260206004820152600360248201526254554d60e81b604482015290519081900360640190fd5b5050565b6040805160808101825263ffffffff9283168082526000602083018190529282019290925260016060909101819052835463ffffffff1916909117909116600160f81b17909155908190565b60020b600881901d9161010090910790565b60008082116144d657600080fd5b600160801b82106144e957608091821c91015b68010000000000000000821061450157604091821c91015b640100000000821061451557602091821c91015b62010000821061452757601091821c91015b610100821061453857600891821c91015b6010821061454857600491821c91015b6004821061455857600291821c91015b60028210612beb57600101919050565b600080821161457657600080fd5b5060ff6001600160801b0382161561459157607f1901614599565b608082901c91505b67ffffffffffffffff8216156145b257603f19016145ba565b604082901c91505b63ffffffff8216156145cf57601f19016145d7565b602082901c91505b61ffff8216156145ea57600f19016145f2565b601082901c91505b60ff821615614604576007190161460c565b600882901c91505b600f82161561461e5760031901614626565b600482901c91505b60038216156146385760011901614640565b600282901c91505b6001821615612beb5760001901919050565b6000836001600160a01b0316856001600160a01b03161115614672579293925b8161469f5761469a836001600160801b03168686036001600160a01b0316600160601b6132d9565b6146c2565b6146c2836001600160801b03168686036001600160a01b0316600160601b6141a9565b90505b949350505050565b6000836001600160a01b0316856001600160a01b031611156146ed579293925b7bffffffffffffffffffffffffffffffff000000000000000000000000606084901b166001600160a01b03868603811690871661472957600080fd5b8361475957866001600160a01b031661474c8383896001600160a01b03166132d9565b8161475357fe5b0461477f565b61477f6147708383896001600160a01b03166141a9565b886001600160a01b0316614cf7565b979650505050505050565b600080856001600160a01b0316116147a157600080fd5b6000846001600160801b0316116147b757600080fd5b816147c95761469a8585856001614d02565b6146c28585856001614de3565b600080856001600160a01b0316116147ed57600080fd5b6000846001600160801b03161161480357600080fd5b816148155761469a8585856000614de3565b6146c28585856000614d02565b61482a61564a565b600085600001518503905060405180608001604052808663ffffffff1681526020018263ffffffff168660020b0288602001510160060b81526020016000856001600160801b03161161487e576001614880565b845b6001600160801b031673ffffffff00000000000000000000000000000000608085901b16816148ab57fe5b048860400151016001600160a01b0316815260200160011515815250915050949350505050565b6148da61564a565b6148e261564a565b888561ffff1661ffff81106148f357fe5b60408051608081018252919092015463ffffffff81168083526401000000008204600690810b810b900b6020840152600160581b82046001600160a01b031693830193909352600160f81b900460ff1615156060820152925061495890899089614ed8565b15614990578663ffffffff16826000015163ffffffff16141561497a57613510565b8161498783898988614822565b91509150613510565b888361ffff168660010161ffff16816149a557fe5b0661ffff1661ffff81106149b557fe5b60408051608081018252929091015463ffffffff811683526401000000008104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b90910416151560608201819052909250614a6c57604080516080810182528a5463ffffffff811682526401000000008104600690810b810b900b6020830152600160581b81046001600160a01b031692820192909252600160f81b90910460ff161515606082015291505b614a7b88836000015189614ed8565b614ab2576040805162461bcd60e51b815260206004820152600360248201526213d31160ea1b604482015290519081900360640190fd5b614abf8989898887614f9b565b9150915097509795505050505050565b6000614ade60078787876141e3565b60015460025491925090600080600f87900b15614c24576000614aff612c27565b6000805460045492935090918291614b499160089186918591600160a01b810460020b9161ffff600160b81b83048116926001600160801b0390921691600160c81b900416613389565b9092509050614b8360058d8b8d8b8b87898b60007f000000000000000000000000000000000000000000000000000000000000000061513b565b9450614bba60058c8b8d8b8b87898b60017f000000000000000000000000000000000000000000000000000000000000000061513b565b93508415614bee57614bee60068d7f0000000000000000000000000000000000000000000000000000000000000000615325565b8315614c2057614c2060068c7f0000000000000000000000000000000000000000000000000000000000000000615325565b5050505b600080614c3660058c8c8b8a8a61538b565b9092509050614c47878a8484615437565b600089600f0b1215614c75578315614c6457614c6460058c6155cc565b8215614c7557614c7560058b6155cc565b50505050505095945050505050565b60008082600f0b12614caa57614ca5614ca085858560016146cd565b613291565b6146c5565b614cbd614ca085858560000360006146cd565b600003949350505050565b60008082600f0b12614ce457614ca5614ca08585856001614652565b614cbd614ca08585856000036000614652565b808204910615150190565b60008115614d755760006001600160a01b03841115614d3857614d3384600160601b876001600160801b03166132d9565b614d50565b6001600160801b038516606085901b81614d4e57fe5b045b9050614d6d614d686001600160a01b03881683613e0d565b6155f8565b9150506146c5565b60006001600160a01b03841115614da357614d9e84600160601b876001600160801b03166141a9565b614dba565b614dba606085901b6001600160801b038716614cf7565b905080866001600160a01b031611614dd157600080fd5b6001600160a01b0386160390506146c5565b600082614df15750836146c5565b7bffffffffffffffffffffffffffffffff000000000000000000000000606085901b168215614e91576001600160a01b03861684810290858281614e3157fe5b041415614e6257818101828110614e6057614e5683896001600160a01b0316836141a9565b93505050506146c5565b505b614e8882614e83878a6001600160a01b03168681614e7c57fe5b0490613e0d565b614cf7565b925050506146c5565b6001600160a01b03861684810290858281614ea857fe5b04148015614eb557508082115b614ebe57600080fd5b808203614e56614d68846001600160a01b038b16846141a9565b60008363ffffffff168363ffffffff1611158015614f0257508363ffffffff168263ffffffff1611155b15614f1e578163ffffffff168363ffffffff1611159050613382565b60008463ffffffff168463ffffffff1611614f46578363ffffffff1664010000000001614f4e565b8363ffffffff165b64ffffffffff16905060008563ffffffff168463ffffffff1611614f7f578363ffffffff1664010000000001614f87565b8363ffffffff165b64ffffffffff169091111595945050505050565b614fa361564a565b614fab61564a565b60008361ffff168560010161ffff1681614fc157fe5b0661ffff169050600060018561ffff16830103905060005b506002818301048961ffff87168281614fee57fe5b0661ffff8110614ffa57fe5b60408051608081018252929091015463ffffffff811683526401000000008104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b9091041615156060820181905290955061506557806001019250614fd9565b898661ffff16826001018161507657fe5b0661ffff811061508257fe5b60408051608081018252929091015463ffffffff811683526401000000008104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b909104161515606082015285519094506000906150ed908b908b614ed8565b905080801561510657506151068a8a8760000151614ed8565b15615111575061512e565b8061512157600182039250615128565b8160010193505b50614fd9565b5050509550959350505050565b60028a810b900b600090815260208c90526040812080546001600160801b031682615166828d6135ef565b9050846001600160801b0316816001600160801b031611156151b4576040805162461bcd60e51b81526020600482015260026024820152614c4f60f01b604482015290519081900360640190fd5b6001600160801b03828116159082161581141594501561528a578c60020b8e60020b1361525a57600183018b9055600283018a90556003830180547fffffffffff0000000000000000000000000000000000000000ffffffffffffff166701000000000000006001600160a01b038c16021766ffffffffffffff191666ffffffffffffff60068b900b161763ffffffff60d81b1916600160d81b63ffffffff8a16021790555b6003830180547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600160f81b1790555b82546001600160801b0319166001600160801b038216178355856152d35782546152ce906152c990600160801b9004600f90810b810b908f900b6132c3565b613f58565b6152f4565b82546152f4906152c990600160801b9004600f90810b810b908f900b6132a7565b8354600f9190910b6001600160801b03908116600160801b0291161790925550909c9b505050505050505050505050565b8060020b8260020b8161533457fe5b0760020b1561534257600080fd5b60008061535d8360020b8560020b8161535757fe5b056144b6565b600191820b820b60009081526020979097526040909620805460ff9097169190911b90951890945550505050565b600285810b80820b60009081526020899052604080822088850b850b83529082209193849391929184918291908a900b126153d1575050600182015460028301546153e4565b8360010154880391508360020154870390505b6000808b60020b8b60020b121561540657505060018301546002840154615419565b84600101548a0391508460020154890390505b92909803979097039b96909503949094039850939650505050505050565b6040805160a08101825285546001600160801b0390811682526001870154602083015260028701549282019290925260038601548083166060830152600160801b900490911660808201526000600f85900b6154d65781516001600160801b03166154ce576040805162461bcd60e51b815260206004820152600260248201526104e560f41b604482015290519081900360640190fd5b5080516154e5565b81516154e290866135ef565b90505b60006155098360200151860384600001516001600160801b0316600160801b6132d9565b9050600061552f8460400151860385600001516001600160801b0316600160801b6132d9565b905086600f0b6000146155565787546001600160801b0319166001600160801b0384161788555b60018801869055600288018590556001600160801b03821615158061558457506000816001600160801b0316115b156155c2576003880180546001600160801b031981166001600160801b039182168501821617808216600160801b9182900483168501909216021790555b5050505050505050565b600290810b810b6000908152602092909252604082208281556001810183905590810182905560030155565b806001600160a01b0381168114612beb57600080fd5b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b6040805160808101825260008082526020820181905291810182905260608101919091529056fea164736f6c6343000706000aa164736f6c6343000706000ac66a3fdf07232cdd185febcc6579d408c241b47ae2f9907d84be655141eeaecc"; + static readonly abi: ({ + inputs: never[]; + stateMutability: string; + type: string; + anonymous?: undefined; + name?: undefined; + outputs?: undefined; + } | { + anonymous: boolean; + inputs: { + indexed: boolean; + internalType: string; + name: string; + type: string; + }[]; + name: string; + type: string; + stateMutability?: undefined; + outputs?: undefined; + } | { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + anonymous?: undefined; + })[]; + static createInterface(): UniswapV3FactoryInterface; + static connect(address: string, signerOrProvider: Signer | Provider): UniswapV3Factory; +} diff --git a/dist2/types/types/v3/factories/UniswapV3Pool__factory.d.ts b/dist2/types/types/v3/factories/UniswapV3Pool__factory.d.ts new file mode 100644 index 00000000000..8c8cc3ddc6e --- /dev/null +++ b/dist2/types/types/v3/factories/UniswapV3Pool__factory.d.ts @@ -0,0 +1,52 @@ +import { Signer, ContractFactory, Overrides } from "ethers"; +import { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { UniswapV3Pool, UniswapV3PoolInterface } from "../UniswapV3Pool"; +export declare class UniswapV3Pool__factory extends ContractFactory { + constructor(signer?: Signer); + deploy(overrides?: Overrides & { + from?: string | Promise; + }): Promise; + getDeployTransaction(overrides?: Overrides & { + from?: string | Promise; + }): TransactionRequest; + attach(address: string): UniswapV3Pool; + connect(signer: Signer): UniswapV3Pool__factory; + static readonly bytecode = "0x6101606040523480156200001257600080fd5b503060601b60805260408051630890357360e41b81529051600091339163890357309160048082019260a092909190829003018186803b1580156200005657600080fd5b505afa1580156200006b573d6000803e3d6000fd5b505050506040513d60a08110156200008257600080fd5b508051602080830151604084015160608086015160809096015160e896871b6001600160e81b0319166101005291811b6001600160601b031990811660e05292811b831660c0529390931b1660a052600282810b900b90921b610120529150620000f79082906200010f811b62002b8417901c565b60801b6001600160801b03191661014052506200017d565b60008082600281900b620d89e719816200012557fe5b05029050600083600281900b620d89e8816200013d57fe5b0502905060008460020b83830360020b816200015557fe5b0560010190508062ffffff166001600160801b038016816200017357fe5b0495945050505050565b60805160601c60a05160601c60c05160601c60e05160601c6101005160e81c6101205160e81c6101405160801c61567e6200024a60003980611fee5280614b5f5280614b96525080610c0052806128fd5280614bca5280614bfc525080610cef52806119cb5280611a0252806129455250806111c75280611a855280611ef4528061244452806129215280613e6b5250806108d252806112f55280611a545280611e8e52806123be5280613d2252508061207b528061227d52806128d9525080612bfb525061567e6000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c806370cf754a116100ee578063c45a015511610097578063ddca3f4311610071578063ddca3f4314610800578063f305839914610820578063f30dba9314610828578063f637731d146108aa576101ae565b8063c45a0155146107d1578063d0c93a7c146107d9578063d21220a7146107f8576101ae565b8063883bdbfd116100c8578063883bdbfd14610633578063a34123a71461073c578063a38807f214610776576101ae565b806370cf754a146105c65780638206a4d1146105ce57806385b66729146105f6576101ae565b80633850c7bd1161015b578063490e6cbc11610135578063490e6cbc146104705780634f1eb3d8146104fc578063514ea4bf1461054d5780635339c296146105a6576101ae565b80633850c7bd1461035b5780633c8a7d8d146103b45780634614131914610456576101ae565b80631ad8b03b1161018c5780631ad8b03b146102aa578063252c09d7146102e157806332148f6714610338576101ae565b80630dfe1681146101b3578063128acb08146101d75780631a68650214610286575b600080fd5b6101bb6108d0565b604080516001600160a01b039092168252519081900360200190f35b61026d600480360360a08110156101ed57600080fd5b6001600160a01b0382358116926020810135151592604082013592606083013516919081019060a08101608082013564010000000081111561022e57600080fd5b82018360208201111561024057600080fd5b8035906020019184600183028401116401000000008311171561026257600080fd5b5090925090506108f4565b6040805192835260208301919091528051918290030190f35b61028e6114ad565b604080516001600160801b039092168252519081900360200190f35b6102b26114bc565b60405180836001600160801b03168152602001826001600160801b031681526020019250505060405180910390f35b6102fe600480360360208110156102f757600080fd5b50356114d6565b6040805163ffffffff909516855260069390930b60208501526001600160a01b039091168383015215156060830152519081900360800190f35b6103596004803603602081101561034e57600080fd5b503561ffff1661151c565b005b610363611616565b604080516001600160a01b03909816885260029690960b602088015261ffff9485168787015292841660608701529216608085015260ff90911660a0840152151560c0830152519081900360e00190f35b61026d600480360360a08110156103ca57600080fd5b6001600160a01b03823516916020810135600290810b92604083013590910b916001600160801b036060820135169181019060a08101608082013564010000000081111561041757600080fd5b82018360208201111561042957600080fd5b8035906020019184600183028401116401000000008311171561044b57600080fd5b509092509050611666565b61045e611922565b60408051918252519081900360200190f35b6103596004803603608081101561048657600080fd5b6001600160a01b0382351691602081013591604082013591908101906080810160608201356401000000008111156104bd57600080fd5b8201836020820111156104cf57600080fd5b803590602001918460018302840111640100000000831117156104f157600080fd5b509092509050611928565b6102b2600480360360a081101561051257600080fd5b506001600160a01b03813516906020810135600290810b91604081013590910b906001600160801b0360608201358116916080013516611d83565b61056a6004803603602081101561056357600080fd5b5035611f9d565b604080516001600160801b0396871681526020810195909552848101939093529084166060840152909216608082015290519081900360a00190f35b61045e600480360360208110156105bc57600080fd5b503560010b611fda565b61028e611fec565b610359600480360360408110156105e457600080fd5b5060ff81358116916020013516612010565b6102b26004803603606081101561060c57600080fd5b506001600160a01b03813516906001600160801b036020820135811691604001351661220f565b6106a36004803603602081101561064957600080fd5b81019060208101813564010000000081111561066457600080fd5b82018360208201111561067657600080fd5b8035906020019184602083028401116401000000008311171561069857600080fd5b5090925090506124dc565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156106e75781810151838201526020016106cf565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561072657818101518382015260200161070e565b5050505090500194505050505060405180910390f35b61026d6004803603606081101561075257600080fd5b508035600290810b91602081013590910b90604001356001600160801b0316612569565b6107a06004803603604081101561078c57600080fd5b508035600290810b9160200135900b6126e0565b6040805160069490940b84526001600160a01b03909216602084015263ffffffff1682820152519081900360600190f35b6101bb6128d7565b6107e16128fb565b6040805160029290920b8252519081900360200190f35b6101bb61291f565b610808612943565b6040805162ffffff9092168252519081900360200190f35b61045e612967565b6108486004803603602081101561083e57600080fd5b503560020b61296d565b604080516001600160801b039099168952600f9790970b602089015287870195909552606087019390935260069190910b60808601526001600160a01b031660a085015263ffffffff1660c0840152151560e083015251908190036101000190f35b610359600480360360208110156108c057600080fd5b50356001600160a01b03166129db565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806108ff612bf0565b85610936576040805162461bcd60e51b8152602060048201526002602482015261415360f01b604482015290519081900360640190fd5b6040805160e0810182526000546001600160a01b0381168252600160a01b8104600290810b810b900b602083015261ffff600160b81b8204811693830193909352600160c81b810483166060830152600160d81b8104909216608082015260ff600160e81b8304811660a0830152600160f01b909204909116151560c082018190526109ef576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b87610a3a5780600001516001600160a01b0316866001600160a01b0316118015610a35575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038716105b610a6c565b80600001516001600160a01b0316866001600160a01b0316108015610a6c57506401000276a36001600160a01b038716115b610aa3576040805162461bcd60e51b815260206004820152600360248201526214d41360ea1b604482015290519081900360640190fd5b6000805460ff60f01b191681556040805160c08101909152808a610ad25760048460a0015160ff16901c610ae5565b60108460a0015160ff1681610ae357fe5b065b60ff1681526004546001600160801b03166020820152604001610b06612c27565b63ffffffff168152602001600060060b815260200160006001600160a01b031681526020016000151581525090506000808913905060006040518060e001604052808b81526020016000815260200185600001516001600160a01b03168152602001856020015160020b81526020018c610b8257600254610b86565b6001545b815260200160006001600160801b0316815260200184602001516001600160801b031681525090505b805115801590610bd55750886001600160a01b031681604001516001600160a01b031614155b15610f9f57610be261560e565b60408201516001600160a01b031681526060820151610c25906006907f00000000000000000000000000000000000000000000000000000000000000008f612c2b565b15156040830152600290810b810b60208301819052620d89e719910b1215610c5657620d89e7196020820152610c75565b6020810151620d89e860029190910b1315610c7557620d89e860208201525b610c828160200151612d6d565b6001600160a01b031660608201526040820151610d13908d610cbc578b6001600160a01b031683606001516001600160a01b031611610cd6565b8b6001600160a01b031683606001516001600160a01b0316105b610ce4578260600151610ce6565b8b5b60c085015185517f000000000000000000000000000000000000000000000000000000000000000061309f565b60c085015260a084015260808301526001600160a01b031660408301528215610d7557610d498160c00151826080015101613291565b825103825260a0810151610d6b90610d6090613291565b6020840151906132a7565b6020830152610db0565b610d828160a00151613291565b825101825260c08101516080820151610daa91610d9f9101613291565b6020840151906132c3565b60208301525b835160ff1615610df6576000846000015160ff168260c0015181610dd057fe5b60c0840180519290910491829003905260a0840180519091016001600160801b03169052505b60c08201516001600160801b031615610e3557610e298160c00151600160801b8460c001516001600160801b03166132d9565b60808301805190910190525b80606001516001600160a01b031682604001516001600160a01b03161415610f5e57806040015115610f35578360a00151610ebf57610e9d846040015160008760200151886040015188602001518a606001516008613389909695949392919063ffffffff16565b6001600160a01b03166080860152600690810b900b6060850152600160a08501525b6000610f0b82602001518e610ed657600154610edc565b84608001515b8f610eeb578560800151610eef565b6002545b608089015160608a015160408b0151600595949392919061351c565b90508c15610f17576000035b610f258360c00151826135ef565b6001600160801b031660c0840152505b8b610f44578060200151610f4d565b60018160200151035b600290810b900b6060830152610f99565b80600001516001600160a01b031682604001516001600160a01b031614610f9957610f8c82604001516136a5565b600290810b900b60608301525b50610baf565b836020015160020b816060015160020b1461107a57600080610fed86604001518660400151886020015188602001518a606001518b6080015160086139d1909695949392919063ffffffff16565b604085015160608601516000805461ffff60c81b1916600160c81b61ffff958616021761ffff60b81b1916600160b81b95909416949094029290921762ffffff60a01b1916600160a01b62ffffff60029490940b93909316929092029190911773ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03909116179055506110ac9050565b60408101516000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039092169190911790555b8060c001516001600160801b031683602001516001600160801b0316146110f25760c0810151600480546001600160801b0319166001600160801b039092169190911790555b8a1561114257608081015160015560a08101516001600160801b03161561113d5760a0810151600380546001600160801b031981166001600160801b03918216909301169190911790555b611188565b608081015160025560a08101516001600160801b0316156111885760a0810151600380546001600160801b03808216600160801b92839004821690940116029190911790555b8115158b1515146111a157602081015181518b036111ae565b80600001518a0381602001515b90965094508a156112e75760008512156111f0576111f07f00000000000000000000000000000000000000000000000000000000000000008d87600003613b86565b60006111fa613cd4565b9050336001600160a01b031663fa461e3388888c8c6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b15801561127e57600080fd5b505af1158015611292573d6000803e3d6000fd5b5050505061129e613cd4565b6112a88289613e0d565b11156112e1576040805162461bcd60e51b815260206004820152600360248201526249494160e81b604482015290519081900360640190fd5b50611411565b600086121561131e5761131e7f00000000000000000000000000000000000000000000000000000000000000008d88600003613b86565b6000611328613e1d565b9050336001600160a01b031663fa461e3388888c8c6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b1580156113ac57600080fd5b505af11580156113c0573d6000803e3d6000fd5b505050506113cc613e1d565b6113d68288613e0d565b111561140f576040805162461bcd60e51b815260206004820152600360248201526249494160e81b604482015290519081900360640190fd5b505b60408082015160c083015160608085015184518b8152602081018b90526001600160a01b03948516818701526001600160801b039093169183019190915260020b60808201529151908e169133917fc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca679181900360a00190a350506000805460ff60f01b1916600160f01b17905550919890975095505050505050565b6004546001600160801b031681565b6003546001600160801b0380821691600160801b90041682565b60088161ffff81106114e757600080fd5b015463ffffffff81169150640100000000810460060b90600160581b81046001600160a01b031690600160f81b900460ff1684565b600054600160f01b900460ff16611560576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b19169055611575612bf0565b60008054600160d81b900461ffff169061159160088385613eb5565b6000805461ffff808416600160d81b810261ffff60d81b19909316929092179092559192508316146115fe576040805161ffff80851682528316602082015281517fac49e518f90a358f652e4400164f05a5d8f7e35e7747279bc3a93dbf584e125a929181900390910190a15b50506000805460ff60f01b1916600160f01b17905550565b6000546001600160a01b03811690600160a01b810460020b9061ffff600160b81b8204811691600160c81b8104821691600160d81b8204169060ff600160e81b8204811691600160f01b90041687565b600080548190600160f01b900460ff166116ad576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b191690556001600160801b0385166116cd57600080fd5b60008061171b60405180608001604052808c6001600160a01b031681526020018b60020b81526020018a60020b81526020016117118a6001600160801b0316613f58565b600f0b9052613f69565b9250925050819350809250600080600086111561173d5761173a613cd4565b91505b841561174e5761174b613e1d565b90505b336001600160a01b031663d348799787878b8b6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b1580156117d057600080fd5b505af11580156117e4573d6000803e3d6000fd5b50505050600086111561183b576117f9613cd4565b6118038388613e0d565b111561183b576040805162461bcd60e51b815260206004820152600260248201526104d360f41b604482015290519081900360640190fd5b841561188b57611849613e1d565b6118538287613e0d565b111561188b576040805162461bcd60e51b81526020600482015260026024820152614d3160f01b604482015290519081900360640190fd5b8960020b8b60020b8d6001600160a01b03167f7a53080ba414158be7ec69b987b5fb7d07dee101fe85488f0853ae16239d0bde338d8b8b60405180856001600160a01b03168152602001846001600160801b0316815260200183815260200182815260200194505050505060405180910390a450506000805460ff60f01b1916600160f01b17905550919890975095505050505050565b60025481565b600054600160f01b900460ff1661196c576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b19169055611981612bf0565b6004546001600160801b0316806119c3576040805162461bcd60e51b81526020600482015260016024820152601360fa1b604482015290519081900360640190fd5b60006119f8867f000000000000000000000000000000000000000000000000000000000000000062ffffff16620f42406141a9565b90506000611a2f867f000000000000000000000000000000000000000000000000000000000000000062ffffff16620f42406141a9565b90506000611a3b613cd4565b90506000611a47613e1d565b90508815611a7a57611a7a7f00000000000000000000000000000000000000000000000000000000000000008b8b613b86565b8715611aab57611aab7f00000000000000000000000000000000000000000000000000000000000000008b8a613b86565b336001600160a01b031663e9cbafb085858a8a6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b158015611b2d57600080fd5b505af1158015611b41573d6000803e3d6000fd5b505050506000611b4f613cd4565b90506000611b5b613e1d565b905081611b688588613e0d565b1115611ba0576040805162461bcd60e51b8152602060048201526002602482015261046360f41b604482015290519081900360640190fd5b80611bab8487613e0d565b1115611be3576040805162461bcd60e51b8152602060048201526002602482015261463160f01b604482015290519081900360640190fd5b8382038382038115611c725760008054600160e81b9004600f16908115611c16578160ff168481611c1057fe5b04611c19565b60005b90506001600160801b03811615611c4c57600380546001600160801b038082168401166001600160801b03199091161790555b611c66818503600160801b8d6001600160801b03166132d9565b60018054909101905550505b8015611cfd5760008054600160e81b900460041c600f16908115611ca2578160ff168381611c9c57fe5b04611ca5565b60005b90506001600160801b03811615611cd757600380546001600160801b03600160801b8083048216850182160291161790555b611cf1818403600160801b8d6001600160801b03166132d9565b60028054909101905550505b8d6001600160a01b0316336001600160a01b03167fbdbdb71d7860376ba52b25a5028beea23581364a40522f6bcfb86bb1f2dca6338f8f86866040518085815260200184815260200183815260200182815260200194505050505060405180910390a350506000805460ff60f01b1916600160f01b179055505050505050505050505050565b600080548190600160f01b900460ff16611dca576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b19168155611de460073389896141e3565b60038101549091506001600160801b0390811690861611611e055784611e14565b60038101546001600160801b03165b60038201549093506001600160801b03600160801b909104811690851611611e3c5783611e52565b6003810154600160801b90046001600160801b03165b91506001600160801b03831615611eb7576003810180546001600160801b031981166001600160801b03918216869003821617909155611eb7907f0000000000000000000000000000000000000000000000000000000000000000908a908616613b86565b6001600160801b03821615611f1d576003810180546001600160801b03600160801b808304821686900382160291811691909117909155611f1d907f0000000000000000000000000000000000000000000000000000000000000000908a908516613b86565b604080516001600160a01b038a1681526001600160801b0380861660208301528416818301529051600288810b92908a900b9133917f70935338e69775456a85ddef226c395fb668b63fa0115f5f20610b388e6ca9c0919081900360600190a4506000805460ff60f01b1916600160f01b17905590969095509350505050565b60076020526000908152604090208054600182015460028301546003909301546001600160801b0392831693919281811691600160801b90041685565b60066020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600054600160f01b900460ff16612054576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b1916905560408051638da5cb5b60e01b815290516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691638da5cb5b916004808301926020929190829003018186803b1580156120c157600080fd5b505afa1580156120d5573d6000803e3d6000fd5b505050506040513d60208110156120eb57600080fd5b50516001600160a01b0316331461210157600080fd5b60ff82161580612124575060048260ff16101580156121245750600a8260ff1611155b801561214e575060ff8116158061214e575060048160ff161015801561214e5750600a8160ff1611155b61215757600080fd5b60008054610ff0600484901b16840160ff908116600160e81b9081027fffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841617909355919004167f973d8d92bb299f4af6ce49b52a8adb85ae46b9f214c4c4fc06ac77401237b1336010826040805160ff9390920683168252600f600486901c16602083015286831682820152918516606082015290519081900360800190a150506000805460ff60f01b1916600160f01b17905550565b600080548190600160f01b900460ff16612256576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b1916905560408051638da5cb5b60e01b815290516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691638da5cb5b916004808301926020929190829003018186803b1580156122c357600080fd5b505afa1580156122d7573d6000803e3d6000fd5b505050506040513d60208110156122ed57600080fd5b50516001600160a01b0316331461230357600080fd5b6003546001600160801b039081169085161161231f578361232c565b6003546001600160801b03165b6003549092506001600160801b03600160801b9091048116908416116123525782612366565b600354600160801b90046001600160801b03165b90506001600160801b038216156123e7576003546001600160801b038381169116141561239557600019909101905b600380546001600160801b031981166001600160801b039182168590038216179091556123e7907f00000000000000000000000000000000000000000000000000000000000000009087908516613b86565b6001600160801b0381161561246d576003546001600160801b03828116600160801b90920416141561241857600019015b600380546001600160801b03600160801b80830482168590038216029181169190911790915561246d907f00000000000000000000000000000000000000000000000000000000000000009087908416613b86565b604080516001600160801b0380851682528316602082015281516001600160a01b0388169233927f596b573906218d3411850b26a6b437d6c4522fdb43d2d2386263f86d50b8b151929081900390910190a36000805460ff60f01b1916600160f01b1790559094909350915050565b6060806124e7612bf0565b61255e6124f2612c27565b858580806020026020016040519081016040528093929190818152602001838360200280828437600092018290525054600454600896959450600160a01b820460020b935061ffff600160b81b8304811693506001600160801b0390911691600160c81b900416614247565b915091509250929050565b600080548190600160f01b900460ff166125b0576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b1916815560408051608081018252338152600288810b602083015287900b918101919091528190819061260990606081016125fc6001600160801b038a16613f58565b600003600f0b9052613f69565b925092509250816000039450806000039350600085118061262a5750600084115b15612669576003830180546001600160801b038082168089018216600160801b93849004831689019092169092029091176001600160801b0319161790555b604080516001600160801b0388168152602081018790528082018690529051600289810b92908b900b9133917f0c396cd989a39f4459b5fa1aed6a9a8dcdbc45908acfd67e028cd568da98982c919081900360600190a450506000805460ff60f01b1916600160f01b179055509094909350915050565b60008060006126ed612bf0565b6126f785856143a1565b600285810b810b60009081526005602052604080822087840b90930b825281206003830154600681900b9367010000000000000082046001600160a01b0316928492600160d81b810463ffffffff169284929091600160f81b900460ff168061275f57600080fd5b6003820154600681900b985067010000000000000081046001600160a01b03169650600160d81b810463ffffffff169450600160f81b900460ff16806127a457600080fd5b50506040805160e0810182526000546001600160a01b0381168252600160a01b8104600290810b810b810b6020840181905261ffff600160b81b8404811695850195909552600160c81b830485166060850152600160d81b8304909416608084015260ff600160e81b8304811660a0850152600160f01b909204909116151560c08301529093508e810b91900b1215905061284d575093909403965090039350900390506128d0565b8a60020b816020015160020b12156128c1576000612869612c27565b602083015160408401516004546060860151939450600093849361289f936008938893879392916001600160801b031690613389565b9a9003989098039b5050949096039290920396509091030392506128d0915050565b50949093039650039350900390505b9250925092565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60015481565b60056020526000908152604090208054600182015460028301546003909301546001600160801b03831693600160801b909304600f0b9290600681900b9067010000000000000081046001600160a01b031690600160d81b810463ffffffff1690600160f81b900460ff1688565b6000546001600160a01b031615612a1e576040805162461bcd60e51b8152602060048201526002602482015261414960f01b604482015290519081900360640190fd5b6000612a29826136a5565b9050600080612a41612a39612c27565b60089061446a565b6040805160e0810182526001600160a01b038816808252600288810b6020808501829052600085870181905261ffff898116606088018190529089166080880181905260a08801839052600160c0909801979097528154600160f01b73ffffffffffffffffffffffffffffffffffffffff19909116871762ffffff60a01b1916600160a01b62ffffff9787900b9790971696909602959095177fffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffff16600160c81b9091021761ffff60d81b1916600160d81b909602959095177fff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1692909217909355835191825281019190915281519395509193507f98636036cb66a9c19a37435efc1e90142190214e8abeb821bdba3f2990dd4c9592918290030190a150505050565b60008082600281900b620d89e71981612b9957fe5b05029050600083600281900b620d89e881612bb057fe5b0502905060008460020b83830360020b81612bc757fe5b0560010190508062ffffff166001600160801b03801681612be457fe5b0493505050505b919050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612c2557600080fd5b565b4290565b60008060008460020b8660020b81612c3f57fe5b05905060008660020b128015612c6657508460020b8660020b81612c5f57fe5b0760020b15155b15612c7057600019015b8315612ce557600080612c82836144b6565b600182810b810b600090815260208d9052604090205460ff83169190911b80016000190190811680151597509294509092509085612cc757888360ff16860302612cda565b88612cd1826144c8565b840360ff168603025b965050505050612d63565b600080612cf4836001016144b6565b91509150600060018260ff166001901b031990506000818b60008660010b60010b8152602001908152602001600020541690508060001415955085612d4657888360ff0360ff16866001010102612d5c565b8883612d5183614568565b0360ff168660010101025b9650505050505b5094509492505050565b60008060008360020b12612d84578260020b612d8c565b8260020b6000035b9050620d89e8811115612dca576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b600060018216612dde57600160801b612df0565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615612e24576ffff97272373d413259a46990580e213a0260801c5b6004821615612e43576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615612e62576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615612e81576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615612ea0576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615612ebf576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615612ede576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615612efe576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615612f1e576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615612f3e576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615612f5e576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615612f7e576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615612f9e576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615612fbe576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615612fde576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615612fff576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b6202000082161561301f576e5d6af8dedb81196699c329225ee6040260801c5b6204000082161561303e576d2216e584f5fa1ea926041bedfe980260801c5b6208000082161561305b576b048a170391f7dc42444e8fa20260801c5b60008460020b131561307657806000198161307257fe5b0490505b64010000000081061561308a57600161308d565b60005b60ff16602082901c0192505050919050565b60008080806001600160a01b03808916908a1610158187128015906131245760006130d88989620f42400362ffffff16620f42406132d9565b9050826130f1576130ec8c8c8c6001614652565b6130fe565b6130fe8b8d8c60016146cd565b955085811061310f578a965061311e565b61311b8c8b838661478a565b96505b5061316e565b8161313b576131368b8b8b60006146cd565b613148565b6131488a8c8b6000614652565b935083886000031061315c5789955061316e565b61316b8b8a8a600003856147d6565b95505b6001600160a01b038a81169087161482156131d15780801561318d5750815b6131a35761319e878d8c60016146cd565b6131a5565b855b95508080156131b2575081155b6131c8576131c3878d8c6000614652565b6131ca565b845b945061321b565b8080156131db5750815b6131f1576131ec8c888c6001614652565b6131f3565b855b9550808015613200575081155b613216576132118c888c60006146cd565b613218565b845b94505b8115801561322b57508860000385115b15613237578860000394505b81801561325657508a6001600160a01b0316876001600160a01b031614155b15613265578589039350613282565b61327f868962ffffff168a620f42400362ffffff166141a9565b93505b50505095509550955095915050565b6000600160ff1b82106132a357600080fd5b5090565b808203828113156000831215146132bd57600080fd5b92915050565b818101828112156000831215146132bd57600080fd5b600080806000198587098686029250828110908390030390508061330f576000841161330457600080fd5b508290049050613382565b80841161331b57600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150505b9392505050565b60008063ffffffff8716613430576000898661ffff1661ffff81106133aa57fe5b60408051608081018252919092015463ffffffff8082168084526401000000008304600690810b810b900b6020850152600160581b83046001600160a01b031694840194909452600160f81b90910460ff16151560608301529092508a161461341c57613419818a8988614822565b90505b806020015181604001519250925050613510565b8688036000806134458c8c858c8c8c8c6148d2565b91509150816000015163ffffffff168363ffffffff161415613477578160200151826040015194509450505050613510565b805163ffffffff8481169116141561349f578060200151816040015194509450505050613510565b8151815160208085015190840151918390039286039163ffffffff80841692908516910360060b816134cd57fe5b05028460200151018263ffffffff168263ffffffff1686604001518660400151036001600160a01b031602816134ff57fe5b048560400151019650965050505050505b97509795505050505050565b600295860b860b60009081526020979097526040909620600181018054909503909455938301805490920390915560038201805463ffffffff600160d81b6001600160a01b036701000000000000008085048216909603169094027fffffffffff0000000000000000000000000000000000000000ffffffffffffff90921691909117600681810b90960390950b66ffffffffffffff1666ffffffffffffff199095169490941782810485169095039093160263ffffffff60d81b1990931692909217905554600160801b9004600f0b90565b60008082600f0b121561365457826001600160801b03168260000384039150816001600160801b03161061364f576040805162461bcd60e51b81526020600482015260026024820152614c5360f01b604482015290519081900360640190fd5b6132bd565b826001600160801b03168284019150816001600160801b031610156132bd576040805162461bcd60e51b81526020600482015260026024820152614c4160f01b604482015290519081900360640190fd5b60006401000276a36001600160a01b038316108015906136e1575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b613716576040805162461bcd60e51b81526020600482015260016024820152602960f91b604482015290519081900360640190fd5b77ffffffffffffffffffffffffffffffffffffffff00000000602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c979088119617909417909217179091171717608081106137b757607f810383901c91506137c1565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b146139c257886001600160a01b03166139a682612d6d565b6001600160a01b031611156139bb57816139bd565b805b6139c4565b815b9998505050505050505050565b6000806000898961ffff1661ffff81106139e757fe5b60408051608081018252919092015463ffffffff8082168084526401000000008304600690810b810b900b6020850152600160581b83046001600160a01b031694840194909452600160f81b90910460ff161515606083015290925089161415613a575788859250925050613510565b8461ffff168461ffff16118015613a7857506001850361ffff168961ffff16145b15613a8557839150613a89565b8491505b8161ffff168960010161ffff1681613a9d57fe5b069250613aac81898989614822565b8a8461ffff1661ffff8110613abd57fe5b825191018054602084015160408501516060909501511515600160f81b027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001600160a01b03909616600160581b027fff0000000000000000000000000000000000000000ffffffffffffffffffffff60069390930b66ffffffffffffff16640100000000026affffffffffffff000000001963ffffffff90971663ffffffff199095169490941795909516929092171692909217929092161790555097509795505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1781529251825160009485949389169392918291908083835b60208310613c025780518252601f199092019160209182019101613be3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613c64576040519150601f19603f3d011682016040523d82523d6000602084013e613c69565b606091505b5091509150818015613c97575080511580613c975750808060200190516020811015613c9457600080fd5b50515b613ccd576040805162461bcd60e51b81526020600482015260026024820152612a2360f11b604482015290519081900360640190fd5b5050505050565b604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b17815291518151600093849384936001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693919290918291908083835b60208310613d6d5780518252601f199092019160209182019101613d4e565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114613dcd576040519150601f19603f3d011682016040523d82523d6000602084013e613dd2565b606091505b5091509150818015613de657506020815110155b613def57600080fd5b808060200190516020811015613e0457600080fd5b50519250505090565b808201828110156132bd57600080fd5b604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b17815291518151600093849384936001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016939192909182919080838360208310613d6d5780518252601f199092019160209182019101613d4e565b6000808361ffff1611613ef3576040805162461bcd60e51b81526020600482015260016024820152604960f81b604482015290519081900360640190fd5b8261ffff168261ffff1611613f09575081613382565b825b8261ffff168161ffff161015613f4f576001858261ffff1661ffff8110613f2e57fe5b01805463ffffffff191663ffffffff92909216919091179055600101613f0b565b50909392505050565b80600f81900b8114612beb57600080fd5b6000806000613f76612bf0565b613f88846020015185604001516143a1565b6040805160e0810182526000546001600160a01b0381168252600160a01b8104600290810b810b900b602080840182905261ffff600160b81b8404811685870152600160c81b84048116606080870191909152600160d81b8504909116608086015260ff600160e81b8504811660a0870152600160f01b909404909316151560c08501528851908901519489015192890151939461402c9491939092909190614acf565b93508460600151600f0b6000146141a157846020015160020b816020015160020b12156140815761407a6140638660200151612d6d565b6140708760400151612d6d565b8760600151614c84565b92506141a1565b846040015160020b816020015160020b12156141775760045460408201516001600160801b03909116906140d3906140b7612c27565b60208501516060860151608087015160089493929187916139d1565b6000805461ffff60c81b1916600160c81b61ffff938416021761ffff60b81b1916600160b81b939092169290920217905581516040870151614123919061411990612d6d565b8860600151614c84565b93506141416141358760200151612d6d565b83516060890151614cc8565b92506141518187606001516135ef565b600480546001600160801b0319166001600160801b0392909216919091179055506141a1565b61419e6141878660200151612d6d565b6141948760400151612d6d565b8760600151614cc8565b91505b509193909250565b60006141b68484846132d9565b9050600082806141c257fe5b84860911156133825760001981106141d957600080fd5b6001019392505050565b6040805160609490941b6bffffffffffffffffffffffff1916602080860191909152600293840b60e890811b60348701529290930b90911b60378401528051808403601a018152603a90930181528251928201929092206000908152929052902090565b60608060008361ffff1611614287576040805162461bcd60e51b81526020600482015260016024820152604960f81b604482015290519081900360640190fd5b865167ffffffffffffffff8111801561429f57600080fd5b506040519080825280602002602001820160405280156142c9578160200160208202803683370190505b509150865167ffffffffffffffff811180156142e457600080fd5b5060405190808252806020026020018201604052801561430e578160200160208202803683370190505b50905060005b87518110156143945761433f8a8a8a848151811061432e57fe5b60200260200101518a8a8a8a613389565b84838151811061434b57fe5b6020026020010184848151811061435e57fe5b60200260200101826001600160a01b03166001600160a01b03168152508260060b60060b81525050508080600101915050614314565b5097509795505050505050565b8060020b8260020b126143e1576040805162461bcd60e51b8152602060048201526003602482015262544c5560e81b604482015290519081900360640190fd5b620d89e719600283900b1215614424576040805162461bcd60e51b8152602060048201526003602482015262544c4d60e81b604482015290519081900360640190fd5b620d89e8600282900b1315614466576040805162461bcd60e51b815260206004820152600360248201526254554d60e81b604482015290519081900360640190fd5b5050565b6040805160808101825263ffffffff9283168082526000602083018190529282019290925260016060909101819052835463ffffffff1916909117909116600160f81b17909155908190565b60020b600881901d9161010090910790565b60008082116144d657600080fd5b600160801b82106144e957608091821c91015b68010000000000000000821061450157604091821c91015b640100000000821061451557602091821c91015b62010000821061452757601091821c91015b610100821061453857600891821c91015b6010821061454857600491821c91015b6004821061455857600291821c91015b60028210612beb57600101919050565b600080821161457657600080fd5b5060ff6001600160801b0382161561459157607f1901614599565b608082901c91505b67ffffffffffffffff8216156145b257603f19016145ba565b604082901c91505b63ffffffff8216156145cf57601f19016145d7565b602082901c91505b61ffff8216156145ea57600f19016145f2565b601082901c91505b60ff821615614604576007190161460c565b600882901c91505b600f82161561461e5760031901614626565b600482901c91505b60038216156146385760011901614640565b600282901c91505b6001821615612beb5760001901919050565b6000836001600160a01b0316856001600160a01b03161115614672579293925b8161469f5761469a836001600160801b03168686036001600160a01b0316600160601b6132d9565b6146c2565b6146c2836001600160801b03168686036001600160a01b0316600160601b6141a9565b90505b949350505050565b6000836001600160a01b0316856001600160a01b031611156146ed579293925b7bffffffffffffffffffffffffffffffff000000000000000000000000606084901b166001600160a01b03868603811690871661472957600080fd5b8361475957866001600160a01b031661474c8383896001600160a01b03166132d9565b8161475357fe5b0461477f565b61477f6147708383896001600160a01b03166141a9565b886001600160a01b0316614cf7565b979650505050505050565b600080856001600160a01b0316116147a157600080fd5b6000846001600160801b0316116147b757600080fd5b816147c95761469a8585856001614d02565b6146c28585856001614de3565b600080856001600160a01b0316116147ed57600080fd5b6000846001600160801b03161161480357600080fd5b816148155761469a8585856000614de3565b6146c28585856000614d02565b61482a61564a565b600085600001518503905060405180608001604052808663ffffffff1681526020018263ffffffff168660020b0288602001510160060b81526020016000856001600160801b03161161487e576001614880565b845b6001600160801b031673ffffffff00000000000000000000000000000000608085901b16816148ab57fe5b048860400151016001600160a01b0316815260200160011515815250915050949350505050565b6148da61564a565b6148e261564a565b888561ffff1661ffff81106148f357fe5b60408051608081018252919092015463ffffffff81168083526401000000008204600690810b810b900b6020840152600160581b82046001600160a01b031693830193909352600160f81b900460ff1615156060820152925061495890899089614ed8565b15614990578663ffffffff16826000015163ffffffff16141561497a57613510565b8161498783898988614822565b91509150613510565b888361ffff168660010161ffff16816149a557fe5b0661ffff1661ffff81106149b557fe5b60408051608081018252929091015463ffffffff811683526401000000008104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b90910416151560608201819052909250614a6c57604080516080810182528a5463ffffffff811682526401000000008104600690810b810b900b6020830152600160581b81046001600160a01b031692820192909252600160f81b90910460ff161515606082015291505b614a7b88836000015189614ed8565b614ab2576040805162461bcd60e51b815260206004820152600360248201526213d31160ea1b604482015290519081900360640190fd5b614abf8989898887614f9b565b9150915097509795505050505050565b6000614ade60078787876141e3565b60015460025491925090600080600f87900b15614c24576000614aff612c27565b6000805460045492935090918291614b499160089186918591600160a01b810460020b9161ffff600160b81b83048116926001600160801b0390921691600160c81b900416613389565b9092509050614b8360058d8b8d8b8b87898b60007f000000000000000000000000000000000000000000000000000000000000000061513b565b9450614bba60058c8b8d8b8b87898b60017f000000000000000000000000000000000000000000000000000000000000000061513b565b93508415614bee57614bee60068d7f0000000000000000000000000000000000000000000000000000000000000000615325565b8315614c2057614c2060068c7f0000000000000000000000000000000000000000000000000000000000000000615325565b5050505b600080614c3660058c8c8b8a8a61538b565b9092509050614c47878a8484615437565b600089600f0b1215614c75578315614c6457614c6460058c6155cc565b8215614c7557614c7560058b6155cc565b50505050505095945050505050565b60008082600f0b12614caa57614ca5614ca085858560016146cd565b613291565b6146c5565b614cbd614ca085858560000360006146cd565b600003949350505050565b60008082600f0b12614ce457614ca5614ca08585856001614652565b614cbd614ca08585856000036000614652565b808204910615150190565b60008115614d755760006001600160a01b03841115614d3857614d3384600160601b876001600160801b03166132d9565b614d50565b6001600160801b038516606085901b81614d4e57fe5b045b9050614d6d614d686001600160a01b03881683613e0d565b6155f8565b9150506146c5565b60006001600160a01b03841115614da357614d9e84600160601b876001600160801b03166141a9565b614dba565b614dba606085901b6001600160801b038716614cf7565b905080866001600160a01b031611614dd157600080fd5b6001600160a01b0386160390506146c5565b600082614df15750836146c5565b7bffffffffffffffffffffffffffffffff000000000000000000000000606085901b168215614e91576001600160a01b03861684810290858281614e3157fe5b041415614e6257818101828110614e6057614e5683896001600160a01b0316836141a9565b93505050506146c5565b505b614e8882614e83878a6001600160a01b03168681614e7c57fe5b0490613e0d565b614cf7565b925050506146c5565b6001600160a01b03861684810290858281614ea857fe5b04148015614eb557508082115b614ebe57600080fd5b808203614e56614d68846001600160a01b038b16846141a9565b60008363ffffffff168363ffffffff1611158015614f0257508363ffffffff168263ffffffff1611155b15614f1e578163ffffffff168363ffffffff1611159050613382565b60008463ffffffff168463ffffffff1611614f46578363ffffffff1664010000000001614f4e565b8363ffffffff165b64ffffffffff16905060008563ffffffff168463ffffffff1611614f7f578363ffffffff1664010000000001614f87565b8363ffffffff165b64ffffffffff169091111595945050505050565b614fa361564a565b614fab61564a565b60008361ffff168560010161ffff1681614fc157fe5b0661ffff169050600060018561ffff16830103905060005b506002818301048961ffff87168281614fee57fe5b0661ffff8110614ffa57fe5b60408051608081018252929091015463ffffffff811683526401000000008104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b9091041615156060820181905290955061506557806001019250614fd9565b898661ffff16826001018161507657fe5b0661ffff811061508257fe5b60408051608081018252929091015463ffffffff811683526401000000008104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b909104161515606082015285519094506000906150ed908b908b614ed8565b905080801561510657506151068a8a8760000151614ed8565b15615111575061512e565b8061512157600182039250615128565b8160010193505b50614fd9565b5050509550959350505050565b60028a810b900b600090815260208c90526040812080546001600160801b031682615166828d6135ef565b9050846001600160801b0316816001600160801b031611156151b4576040805162461bcd60e51b81526020600482015260026024820152614c4f60f01b604482015290519081900360640190fd5b6001600160801b03828116159082161581141594501561528a578c60020b8e60020b1361525a57600183018b9055600283018a90556003830180547fffffffffff0000000000000000000000000000000000000000ffffffffffffff166701000000000000006001600160a01b038c16021766ffffffffffffff191666ffffffffffffff60068b900b161763ffffffff60d81b1916600160d81b63ffffffff8a16021790555b6003830180547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600160f81b1790555b82546001600160801b0319166001600160801b038216178355856152d35782546152ce906152c990600160801b9004600f90810b810b908f900b6132c3565b613f58565b6152f4565b82546152f4906152c990600160801b9004600f90810b810b908f900b6132a7565b8354600f9190910b6001600160801b03908116600160801b0291161790925550909c9b505050505050505050505050565b8060020b8260020b8161533457fe5b0760020b1561534257600080fd5b60008061535d8360020b8560020b8161535757fe5b056144b6565b600191820b820b60009081526020979097526040909620805460ff9097169190911b90951890945550505050565b600285810b80820b60009081526020899052604080822088850b850b83529082209193849391929184918291908a900b126153d1575050600182015460028301546153e4565b8360010154880391508360020154870390505b6000808b60020b8b60020b121561540657505060018301546002840154615419565b84600101548a0391508460020154890390505b92909803979097039b96909503949094039850939650505050505050565b6040805160a08101825285546001600160801b0390811682526001870154602083015260028701549282019290925260038601548083166060830152600160801b900490911660808201526000600f85900b6154d65781516001600160801b03166154ce576040805162461bcd60e51b815260206004820152600260248201526104e560f41b604482015290519081900360640190fd5b5080516154e5565b81516154e290866135ef565b90505b60006155098360200151860384600001516001600160801b0316600160801b6132d9565b9050600061552f8460400151860385600001516001600160801b0316600160801b6132d9565b905086600f0b6000146155565787546001600160801b0319166001600160801b0384161788555b60018801869055600288018590556001600160801b03821615158061558457506000816001600160801b0316115b156155c2576003880180546001600160801b031981166001600160801b039182168501821617808216600160801b9182900483168501909216021790555b5050505050505050565b600290810b810b6000908152602092909252604082208281556001810183905590810182905560030155565b806001600160a01b0381168114612beb57600080fd5b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b6040805160808101825260008082526020820181905291810182905260608101919091529056fea164736f6c6343000706000a"; + static readonly abi: ({ + inputs: never[]; + stateMutability: string; + type: string; + anonymous?: undefined; + name?: undefined; + outputs?: undefined; + } | { + anonymous: boolean; + inputs: { + indexed: boolean; + internalType: string; + name: string; + type: string; + }[]; + name: string; + type: string; + stateMutability?: undefined; + outputs?: undefined; + } | { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + anonymous?: undefined; + })[]; + static createInterface(): UniswapV3PoolInterface; + static connect(address: string, signerOrProvider: Signer | Provider): UniswapV3Pool; +} diff --git a/dist2/types/types/v3/factories/UniswapV3Staker__factory.d.ts b/dist2/types/types/v3/factories/UniswapV3Staker__factory.d.ts new file mode 100644 index 00000000000..cf92d7941d0 --- /dev/null +++ b/dist2/types/types/v3/factories/UniswapV3Staker__factory.d.ts @@ -0,0 +1,66 @@ +import { Signer, BigNumberish, ContractFactory, Overrides } from "ethers"; +import { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { UniswapV3Staker, UniswapV3StakerInterface } from "../UniswapV3Staker"; +export declare class UniswapV3Staker__factory extends ContractFactory { + constructor(signer?: Signer); + deploy(_factory: string, _nonfungiblePositionManager: string, _maxIncentiveStartLeadTime: BigNumberish, _maxIncentiveDuration: BigNumberish, overrides?: Overrides & { + from?: string | Promise; + }): Promise; + getDeployTransaction(_factory: string, _nonfungiblePositionManager: string, _maxIncentiveStartLeadTime: BigNumberish, _maxIncentiveDuration: BigNumberish, overrides?: Overrides & { + from?: string | Promise; + }): TransactionRequest; + attach(address: string): UniswapV3Staker; + connect(signer: Signer): UniswapV3Staker__factory; + static readonly bytecode = "0x6101006040523480156200001257600080fd5b5060405162003ba338038062003ba383398101604081905262000035916200005e565b6001600160601b0319606094851b81166080529290931b90911660a05260c05260e052620000c3565b6000806000806080858703121562000074578384fd5b84516200008181620000aa565b60208601519094506200009481620000aa565b6040860151606090960151949790965092505050565b6001600160a01b0381168114620000c057600080fd5b50565b60805160601c60a05160601c60c05160e051613a816200012260003980610bbd5280610cfa5250806103b15280610c595250806103ed52806104525280610b4852806110555280611ad552508061124c5280611ab45250613a816000f3fe6080604052600436106101295760003560e01c8063b02c43d0116100a5578063c45a015511610074578063e70b9e2711610059578063e70b9e271461034f578063f2d2909b1461036f578063f549ab421461038f57610129565b8063c45a01551461030c578063d953186e1461032157610129565b8063b02c43d01461026c578063b44a27221461029c578063b5ada6e4146102be578063c36c1ea5146102de57610129565b80633c423f0b116100fc5780635cc5e3d9116100e15780635cc5e3d9146101fd578063607777951461021d578063ac9650d81461024c57610129565b80633c423f0b146101c85780633dc0714b146101e857610129565b806301b754401461012e578063150b7a021461015957806326bfee04146101865780632f2d783d146101a8575b600080fd5b34801561013a57600080fd5b506101436103af565b60405161015091906138b9565b60405180910390f35b34801561016557600080fd5b5061017961017436600461273f565b6103d3565b6040516101509190612db4565b34801561019257600080fd5b506101a66101a1366004612a9c565b61071c565b005b3480156101b457600080fd5b506101436101c3366004612946565b61084a565b3480156101d457600080fd5b506101a66101e3366004612ac0565b610928565b3480156101f457600080fd5b50610143610bbb565b34801561020957600080fd5b506101a6610218366004612a72565b610bdf565b34801561022957600080fd5b5061023d6102383660046128f6565b610e10565b604051610150939291906138e6565b61025f61025a3660046127d9565b610e67565b6040516101509190612d36565b34801561027857600080fd5b5061028c6102873660046128f6565b610fc1565b6040516101509493929190612cf5565b3480156102a857600080fd5b506102b1611053565b6040516101509190612de1565b3480156102ca57600080fd5b506101436102d9366004612a57565b611077565b3480156102ea57600080fd5b506102fe6102f9366004612b52565b6111c5565b604051610150929190613881565b34801561031857600080fd5b506102b161124a565b34801561032d57600080fd5b5061034161033c366004612a72565b61126e565b6040516101509291906138c2565b34801561035b57600080fd5b5061014361036a36600461290e565b611493565b34801561037b57600080fd5b506101a661038a366004612a72565b6114b0565b34801561039b57600080fd5b506101a66103aa366004612a72565b61151b565b7f000000000000000000000000000000000000000000000000000000000000000081565b60003373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461044d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104449061375a565b60405180910390fd5b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166399fbab88876040518263ffffffff1660e01b81526004016104a991906138b9565b6101806040518083038186803b1580156104c257600080fd5b505afa1580156104d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104fa9190612b73565b505050505096509650505050505060405180608001604052808873ffffffffffffffffffffffffffffffffffffffff168152602001600065ffffffffffff1681526020018360020b81526020018260020b8152506001600088815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548165ffffffffffff021916908365ffffffffffff160217905550604082015181600001601a6101000a81548162ffffff021916908360020b62ffffff160217905550606082015181600001601d6101000a81548162ffffff021916908360020b62ffffff1602179055509050508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff16877fcdfc765b85e1048bee3c6a0f9d1c91fc7c4631f5fe5745a55fc6843db5c3260f60405160405180910390a483156106ef5760a08414156106ab576106a66106a085870187612a57565b87611964565b6106ef565b60006106b985870187612848565b905060005b81518110156106ec576106e48282815181106106d657fe5b602002602001015189611964565b6001016106be565b50505b507f150b7a0200000000000000000000000000000000000000000000000000000000979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116610769576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044490613183565b60008281526001602052604090205473ffffffffffffffffffffffffffffffffffffffff163381146107c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044490612e86565b60008381526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff868116918217909255915191929084169186917fcdfc765b85e1048bee3c6a0f9d1c91fc7c4631f5fe5745a55fc6843db5c3260f91a4505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360209081526040808320338452909152902054811580159061088957508082105b156108915750805b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602090815260408083203384529091529020805482900390556108d3848483611ed1565b8273ffffffffffffffffffffffffffffffffffffffff167f106f923f993c2149d49b4255ff723acafa1f2d94393f561d3eda32ae348f72418260405161091991906138b9565b60405180910390a29392505050565b73ffffffffffffffffffffffffffffffffffffffff8216301415610978576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610444906137b7565b6000838152600160209081526040918290208251608081018452905473ffffffffffffffffffffffffffffffffffffffff8116825265ffffffffffff740100000000000000000000000000000000000000008204169282018390527a0100000000000000000000000000000000000000000000000000008104600290810b810b810b948301949094527d0100000000000000000000000000000000000000000000000000000000009004830b830b90920b606083015215610a65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044490613046565b805173ffffffffffffffffffffffffffffffffffffffff163314610ab5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044490613481565b6000848152600160205260408082208290558251905173ffffffffffffffffffffffffffffffffffffffff9091169086907fcdfc765b85e1048bee3c6a0f9d1c91fc7c4631f5fe5745a55fc6843db5c3260f908490a46040517fb88d4fde00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b88d4fde90610b83903090879089908890600401612cac565b600060405180830381600087803b158015610b9d57600080fd5b505af1158015610bb1573d6000803e3d6000fd5b5050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008111610c19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610444906135be565b8160400151421115610c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610444906131e0565b7f0000000000000000000000000000000000000000000000000000000000000000428360400151031115610cb7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104449061361b565b8160600151826040015110610cf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610444906136d7565b7f000000000000000000000000000000000000000000000000000000000000000082604001518360600151031115610d5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044490613679565b6000610d67836120ad565b60008181526020819052604090208054840190558351909150610d8c903330856120de565b826020015173ffffffffffffffffffffffffffffffffffffffff16836000015173ffffffffffffffffffffffffffffffffffffffff167fa876344e28d4b5191ad03bc0d43f740e3695827ab0faccac739930b915ef8b0285604001518660600151876080015187604051610e039493929190613920565b60405180910390a3505050565b6000602081905290815260409020805460019091015473ffffffffffffffffffffffffffffffffffffffff8116907401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1683565b60608167ffffffffffffffff81118015610e8057600080fd5b50604051908082528060200260200182016040528015610eb457816020015b6060815260200190600190039081610e9f5790505b50905060005b82811015610fba5760008030868685818110610ed257fe5b9050602002810190610ee49190613951565b604051610ef2929190612c9c565b600060405180830381855af49150503d8060008114610f2d576040519150601f19603f3d011682016040523d82523d6000602084013e610f32565b606091505b509150915081610f9857604481511015610f4b57600080fd5b60048101905080806020019051810190610f6591906129df565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104449190612e16565b80848481518110610fa557fe5b60209081029190910101525050600101610eba565b5092915050565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff81169065ffffffffffff74010000000000000000000000000000000000000000820416907a0100000000000000000000000000000000000000000000000000008104600290810b917d0100000000000000000000000000000000000000000000000000000000009004900b84565b7f000000000000000000000000000000000000000000000000000000000000000081565b600081606001514210156110b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044490612f66565b60006110c2836120ad565b6000818152602081905260409020805493509091508261110e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044490612e29565b60018101547401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1615611170576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610444906134de565b6000815583516080850151611186919085611ed1565b817f65124e6175aa9904f40735e87e2a37c76e87a609b855287bb4d1aba8257d9763846040516111b691906138b9565b60405180910390a25050919050565b60008281526002602090815260408083208484529091529020805473ffffffffffffffffffffffffffffffffffffffff8116916bffffffffffffffffffffffff740100000000000000000000000000000000000000009092048216918214156112425760018101546fffffffffffffffffffffffffffffffff1691505b509250929050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600061127c856120ad565b905060008061128b86846111c5565b915091506000816fffffffffffffffffffffffffffffffff16116112db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044490612f09565b60008681526001602081815260408084208151608081018352905473ffffffffffffffffffffffffffffffffffffffff80821683527401000000000000000000000000000000000000000080830465ffffffffffff16848701527a0100000000000000000000000000000000000000000000000000008304600290810b810b810b8587019081527d010000000000000000000000000000000000000000000000000000000000909404810b810b900b60608086019182528c8a52898852868a2087519182018852805482529098015480841689890152919091046bffffffffffffffffffffffff1687860152948e01519151945193517fa38807f200000000000000000000000000000000000000000000000000000000815292969491169263a38807f29261140e929190600401612e02565b60606040518083038186803b15801561142657600080fd5b505afa15801561143a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145e9190612986565b50915050611482826000015183602001518c604001518d60600151888a87426122c3565b909b909a5098505050505050505050565b600360209081526000928352604080842090915290825290205481565b60008181526001602052604090205473ffffffffffffffffffffffffffffffffffffffff16331461150d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044490613561565b6115178282611964565b5050565b6000818152600160209081526040918290208251608081018452905473ffffffffffffffffffffffffffffffffffffffff8116825265ffffffffffff74010000000000000000000000000000000000000000820416928201929092527a0100000000000000000000000000000000000000000000000000008204600290810b810b810b938201939093527d010000000000000000000000000000000000000000000000000000000000909104820b820b90910b60608083019190915283015142101561163157805173ffffffffffffffffffffffffffffffffffffffff163314611631576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104449061331e565b600061163c846120ad565b905060008061164b85846111c5565b91509150806fffffffffffffffffffffffffffffffff166000141561169c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044490612fe9565b600083815260208181526040808320888452600180845282852080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff65ffffffffffff740100000000000000000000000000000000000000008084048216830190911681027fffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffff9093169290921790925591830180546bffffffffffffffffffffffff848204811690930190921690920273ffffffffffffffffffffffffffffffffffffffff91821617909155928a01518883015160608a015193517fa38807f2000000000000000000000000000000000000000000000000000000008152929594919091169263a38807f2926117b7929190600401612e02565b60606040518083038186803b1580156117cf57600080fd5b505afa1580156117e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118079190612986565b508354600185015460408c015160608d0151939550600094508493611848939273ffffffffffffffffffffffffffffffffffffffff169190898b89426122c3565b6001860180547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff9182168401821617909155865483900387558c51811660009081526003602090815260408083208e5190941683529281528282208054860190558d8252600281528282208c8352905290812090815591935091506bffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff87161061192a576001810180547fffffffffffffffffffffffffffffffff000000000000000000000000000000001690555b60405188908b907fe1ba67e807ae0efa0a9549f9520ddc15c27f0a4dae2bc045e800ca66a940778f90600090a35050505050505050505050565b81604001514210156119a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610444906133a1565b816060015142106119df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044490613126565b60006119ea836120ad565b600081815260208190526040902054909150611a32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610444906132c1565b60008281526002602090815260408083208484529091529020547401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1615611aa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610444906130c9565b600080600080611afa7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000088612345565b9350935093509350866020015173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614611b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610444906133fe565b6000816fffffffffffffffffffffffffffffffff1611611bb7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044490613263565b6000868152600160208181526040808420805465ffffffffffff740100000000000000000000000000000000000000008083048216870190911681027fffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffff9092169190911790915589855291849052808420830180546bffffffffffffffffffffffff848204811690950190941690920273ffffffffffffffffffffffffffffffffffffffff93841617909155517fa38807f20000000000000000000000000000000000000000000000000000000081529086169063a38807f290611ca19087908790600401612e02565b60606040518083038186803b158015611cb957600080fd5b505afa158015611ccd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf19190612986565b509150506bffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff831610611e0a576040805160608101825273ffffffffffffffffffffffffffffffffffffffff80841682526bffffffffffffffffffffffff60208084018281526fffffffffffffffffffffffffffffffff80891686880190815260008f8152600285528881208f82529094529690922094518554915190931674010000000000000000000000000000000000000000029284167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617909216178255915160019091018054919092167fffffffffffffffffffffffffffffffff00000000000000000000000000000000909116179055611e8e565b6000878152600260209081526040808320898452909152902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8381169190911716740100000000000000000000000000000000000000006bffffffffffffffffffffffff8516021790555b85877f3fe90ccd0a34e28f2b4b7a1e8323415ed9dd595f4eec5dfd461d18c2df336dbd84604051611ebf9190613864565b60405180910390a35050505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b60208310611fa657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611f69565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612008576040519150601f19603f3d011682016040523d82523d6000602084013e61200d565b606091505b509150915081801561203b57508051158061203b575080806020019051602081101561203857600080fd5b50515b6120a657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b5050505050565b6000816040516020016120c09190613814565b6040516020818303038152906040528051906020012090505b919050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000178152925182516000948594938a169392918291908083835b602083106121bb57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161217e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461221d576040519150601f19603f3d011682016040523d82523d6000602084013e612222565b606091505b5091509150818015612250575080511580612250575080806020019051602081101561224d57600080fd5b50515b6122bb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354460000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b505050505050565b600080878310156122d057fe5b508383036fffffffffffffffffffffffffffffffff861602600073ffffffffffffffffffffffffffffffffffffffff8a1660808a61230e8b8861244e565b03901b0390506123358b8373ffffffffffffffffffffffffffffffffffffffff1683612467565b9250509850989650505050505050565b60008060008060008060008873ffffffffffffffffffffffffffffffffffffffff166399fbab88896040518263ffffffff1660e01b8152600401808281526020019150506101806040518083038186803b1580156123a257600080fd5b505afa1580156123b6573d6000803e3d6000fd5b505050506040513d6101808110156123cd57600080fd5b50604080820151606080840151608085015160a086015160c087015160e0909701518651948501875273ffffffffffffffffffffffffffffffffffffffff80871686528416602086015262ffffff8316968501969096529b50949950929750909550909350909150612440908b90612534565b965050505093509350935093565b60008183101561245e5781612460565b825b9392505050565b600080807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff858709868602925082811090839003039050806124bb57600084116124b057600080fd5b508290049050612460565b8084116124c757600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161061257657600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d5808301919091528251808303909101815260f5909101909152805191012090565b80516120d981613a4f565b8051600281900b81146120d957600080fd5b600060a08284031215612698578081fd5b60405160a0810181811067ffffffffffffffff821117156126b557fe5b60405290508082356126c681613a4f565b815260208301356126d681613a4f565b80602083015250604083013560408201526060830135606082015260808301356126ff81613a4f565b6080919091015292915050565b80516fffffffffffffffffffffffffffffffff811681146120d957600080fd5b805162ffffff811681146120d957600080fd5b600080600080600060808688031215612756578081fd5b853561276181613a4f565b9450602086013561277181613a4f565b935060408601359250606086013567ffffffffffffffff80821115612794578283fd5b818801915088601f8301126127a7578283fd5b8135818111156127b5578384fd5b8960208285010111156127c6578384fd5b9699959850939650602001949392505050565b600080602083850312156127eb578182fd5b823567ffffffffffffffff80821115612802578384fd5b818501915085601f830112612815578384fd5b813581811115612823578485fd5b8660208083028501011115612836578485fd5b60209290920196919550909350505050565b6000602080838503121561285a578182fd5b823567ffffffffffffffff80821115612871578384fd5b818501915085601f830112612884578384fd5b81358181111561289057fe5b61289d84858302016139bb565b818152848101925083850160a0808402860187018a10156128bc578788fd5b8795505b838610156128e8576128d28a83612687565b85526001959095019493860193908101906128c0565b509098975050505050505050565b600060208284031215612907578081fd5b5035919050565b60008060408385031215612920578182fd5b823561292b81613a4f565b9150602083013561293b81613a4f565b809150509250929050565b60008060006060848603121561295a578081fd5b833561296581613a4f565b9250602084013561297581613a4f565b929592945050506040919091013590565b60008060006060848603121561299a578081fd5b83518060060b81146129aa578182fd5b60208501519093506129bb81613a4f565b604085015190925063ffffffff811681146129d4578182fd5b809150509250925092565b6000602082840312156129f0578081fd5b815167ffffffffffffffff811115612a06578182fd5b8201601f81018413612a16578182fd5b8051612a29612a24826139df565b6139bb565b818152856020838501011115612a3d578384fd5b612a4e826020830160208601613a1f565b95945050505050565b600060a08284031215612a68578081fd5b6124608383612687565b60008060c08385031215612a84578182fd5b612a8e8484612687565b9460a0939093013593505050565b60008060408385031215612aae578182fd5b82359150602083013561293b81613a4f565b600080600060608486031215612ad4578081fd5b833592506020840135612ae681613a4f565b9150604084013567ffffffffffffffff811115612b01578182fd5b8401601f81018613612b11578182fd5b8035612b1f612a24826139df565b818152876020838501011115612b33578384fd5b8160208401602083013783602083830101528093505050509250925092565b60008060408385031215612b64578182fd5b50508035926020909101359150565b6000806000806000806000806000806000806101808d8f031215612b9557898afd5b8c516bffffffffffffffffffffffff81168114612bb0578a8bfd5b9b50612bbe60208e0161266a565b9a50612bcc60408e0161266a565b9950612bda60608e0161266a565b9850612be860808e0161272c565b9750612bf660a08e01612675565b9650612c0460c08e01612675565b9550612c1260e08e0161270c565b94506101008d015193506101208d01519250612c316101408e0161270c565b9150612c406101608e0161270c565b90509295989b509295989b509295989b565b60008151808452612c6a816020860160208601613a1f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000828483379101908152919050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612ceb6080830184612c52565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff94909416845265ffffffffffff929092166020840152600290810b60408401520b606082015260800190565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015612da7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452612d95858351612c52565b94509285019290850190600101612d5b565b5092979650505050505050565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600292830b8152910b602082015260400190565b6000602082526124606020830184612c52565b60208082526032908201527f556e697377617056335374616b65723a3a656e64496e63656e746976653a206e60408201527f6f20726566756e6420617661696c61626c650000000000000000000000000000606082015260800190565b60208082526045908201527f556e697377617056335374616b65723a3a7472616e736665724465706f73697460408201527f3a2063616e206f6e6c792062652063616c6c6564206279206465706f7369742060608201527f6f776e6572000000000000000000000000000000000000000000000000000000608082015260a00190565b60208082526034908201527f556e697377617056335374616b65723a3a676574526577617264496e666f3a2060408201527f7374616b6520646f6573206e6f74206578697374000000000000000000000000606082015260800190565b60208082526043908201527f556e697377617056335374616b65723a3a656e64496e63656e746976653a206360408201527f616e6e6f7420656e6420696e63656e74697665206265666f726520656e64207460608201527f696d650000000000000000000000000000000000000000000000000000000000608082015260a00190565b60208082526033908201527f556e697377617056335374616b65723a3a756e7374616b65546f6b656e3a207360408201527f74616b6520646f6573206e6f7420657869737400000000000000000000000000606082015260800190565b60208082526042908201527f556e697377617056335374616b65723a3a7769746864726177546f6b656e3a2060408201527f63616e6e6f7420776974686472617720746f6b656e207768696c65207374616b60608201527f6564000000000000000000000000000000000000000000000000000000000000608082015260a00190565b60208082526031908201527f556e697377617056335374616b65723a3a7374616b65546f6b656e3a20746f6b60408201527f656e20616c7265616479207374616b6564000000000000000000000000000000606082015260800190565b6020808252602c908201527f556e697377617056335374616b65723a3a7374616b65546f6b656e3a20696e6360408201527f656e7469766520656e6465640000000000000000000000000000000000000000606082015260800190565b6020808252603c908201527f556e697377617056335374616b65723a3a7472616e736665724465706f73697460408201527f3a20696e76616c6964207472616e7366657220726563697069656e7400000000606082015260800190565b60208082526049908201527f556e697377617056335374616b65723a3a637265617465496e63656e7469766560408201527f3a2073746172742074696d65206d757374206265206e6f77206f7220696e207460608201527f6865206675747572650000000000000000000000000000000000000000000000608082015260a00190565b602080825260409082018190527f556e697377617056335374616b65723a3a7374616b65546f6b656e3a2063616e908201527f6e6f74207374616b6520746f6b656e20776974682030206c6971756964697479606082015260800190565b60208082526033908201527f556e697377617056335374616b65723a3a7374616b65546f6b656e3a206e6f6e60408201527f2d6578697374656e7420696e63656e7469766500000000000000000000000000606082015260800190565b60208082526056908201527f556e697377617056335374616b65723a3a756e7374616b65546f6b656e3a206f60408201527f6e6c79206f776e65722063616e20776974686472617720746f6b656e2062656660608201527f6f726520696e63656e7469766520656e642074696d6500000000000000000000608082015260a00190565b60208082526032908201527f556e697377617056335374616b65723a3a7374616b65546f6b656e3a20696e6360408201527f656e74697665206e6f7420737461727465640000000000000000000000000000606082015260800190565b60208082526041908201527f556e697377617056335374616b65723a3a7374616b65546f6b656e3a20746f6b60408201527f656e20706f6f6c206973206e6f742074686520696e63656e7469766520706f6f60608201527f6c00000000000000000000000000000000000000000000000000000000000000608082015260a00190565b6020808252603d908201527f556e697377617056335374616b65723a3a7769746864726177546f6b656e3a2060408201527f6f6e6c79206f776e65722063616e20776974686472617720746f6b656e000000606082015260800190565b6020808252604d908201527f556e697377617056335374616b65723a3a656e64496e63656e746976653a206360408201527f616e6e6f7420656e6420696e63656e74697665207768696c65206465706f736960608201527f747320617265207374616b656400000000000000000000000000000000000000608082015260a00190565b60208082526037908201527f556e697377617056335374616b65723a3a7374616b65546f6b656e3a206f6e6c60408201527f79206f776e65722063616e207374616b6520746f6b656e000000000000000000606082015260800190565b60208082526039908201527f556e697377617056335374616b65723a3a637265617465496e63656e7469766560408201527f3a20726577617264206d75737420626520706f73697469766500000000000000606082015260800190565b602080825260409082018190527f556e697377617056335374616b65723a3a637265617465496e63656e74697665908201527f3a2073746172742074696d6520746f6f2066617220696e746f20667574757265606082015260800190565b602080825260409082018190527f556e697377617056335374616b65723a3a637265617465496e63656e74697665908201527f3a20696e63656e74697665206475726174696f6e20697320746f6f206c6f6e67606082015260800190565b60208082526044908201527f556e697377617056335374616b65723a3a637265617465496e63656e7469766560408201527f3a2073746172742074696d65206d757374206265206265666f726520656e642060608201527f74696d6500000000000000000000000000000000000000000000000000000000608082015260a00190565b60208082526032908201527f556e697377617056335374616b65723a3a6f6e4552433732315265636569766560408201527f643a206e6f74206120756e697633206e66740000000000000000000000000000606082015260800190565b60208082526039908201527f556e697377617056335374616b65723a3a7769746864726177546f6b656e3a2060408201527f63616e6e6f7420776974686472617720746f207374616b657200000000000000606082015260800190565b815173ffffffffffffffffffffffffffffffffffffffff90811682526020808401518216908301526040808401519083015260608084015190830152608092830151169181019190915260a00190565b6fffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff9290921682526fffffffffffffffffffffffffffffffff16602082015260400190565b90815260200190565b91825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b92835273ffffffffffffffffffffffffffffffffffffffff9190911660208301526bffffffffffffffffffffffff16604082015260600190565b938452602084019290925273ffffffffffffffffffffffffffffffffffffffff166040830152606082015260800190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613985578283fd5b83018035915067ffffffffffffffff82111561399f578283fd5b6020019150368190038213156139b457600080fd5b9250929050565b60405181810167ffffffffffffffff811182821017156139d757fe5b604052919050565b600067ffffffffffffffff8211156139f357fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b83811015613a3a578181015183820152602001613a22565b83811115613a49576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff81168114613a7157600080fd5b5056fea164736f6c6343000706000a"; + static readonly abi: ({ + inputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + anonymous?: undefined; + name?: undefined; + outputs?: undefined; + } | { + anonymous: boolean; + inputs: { + indexed: boolean; + internalType: string; + name: string; + type: string; + }[]; + name: string; + type: string; + stateMutability?: undefined; + outputs?: undefined; + } | { + inputs: ({ + components: { + internalType: string; + name: string; + type: string; + }[]; + internalType: string; + name: string; + type: string; + } | { + internalType: string; + name: string; + type: string; + components?: undefined; + })[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + anonymous?: undefined; + })[]; + static createInterface(): UniswapV3StakerInterface; + static connect(address: string, signerOrProvider: Signer | Provider): UniswapV3Staker; +} diff --git a/dist2/types/types/v3/factories/V2SwapRouter__factory.d.ts b/dist2/types/types/v3/factories/V2SwapRouter__factory.d.ts new file mode 100644 index 00000000000..a49a27fee62 --- /dev/null +++ b/dist2/types/types/v3/factories/V2SwapRouter__factory.d.ts @@ -0,0 +1,28 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { V2SwapRouter, V2SwapRouterInterface } from "../V2SwapRouter"; +export declare class V2SwapRouter__factory { + static readonly abi: ({ + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + } | { + stateMutability: string; + type: string; + inputs?: undefined; + name?: undefined; + outputs?: undefined; + })[]; + static createInterface(): V2SwapRouterInterface; + static connect(address: string, signerOrProvider: Signer | Provider): V2SwapRouter; +} diff --git a/dist2/types/types/v3/factories/V3Migrator__factory.d.ts b/dist2/types/types/v3/factories/V3Migrator__factory.d.ts new file mode 100644 index 00000000000..f12fc5b83ba --- /dev/null +++ b/dist2/types/types/v3/factories/V3Migrator__factory.d.ts @@ -0,0 +1,63 @@ +import { Signer, ContractFactory, Overrides } from "ethers"; +import { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { V3Migrator, V3MigratorInterface } from "../V3Migrator"; +export declare class V3Migrator__factory extends ContractFactory { + constructor(signer?: Signer); + deploy(_factory: string, _WETH9: string, _nonfungiblePositionManager: string, overrides?: Overrides & { + from?: string | Promise; + }): Promise; + getDeployTransaction(_factory: string, _WETH9: string, _nonfungiblePositionManager: string, overrides?: Overrides & { + from?: string | Promise; + }): TransactionRequest; + attach(address: string): V3Migrator; + connect(signer: Signer): V3Migrator__factory; + static readonly bytecode = "0x60e06040523480156200001157600080fd5b5060405162001f4238038062001f42833981016040819052620000349162000079565b6001600160601b0319606093841b811660805291831b821660a05290911b1660c052620000c2565b80516001600160a01b03811681146200007457600080fd5b919050565b6000806000606084860312156200008e578283fd5b62000099846200005c565b9250620000a9602085016200005c565b9150620000b9604085016200005c565b90509250925092565b60805160601c60a05160601c60c05160601c611e146200012e6000398061090d5280610c4c5280610c865280610cb05280610e8d52508060d252806106b25280610ee65280610f70528061105852806110e2525080610269528061036452806109e65250611e146000f3fe6080604052600436106100b55760003560e01c8063b44a272211610069578063c45a01551161004e578063c45a0155146101e5578063d44f2bf2146101fa578063f3995c671461021a57610134565b8063b44a2722146101bd578063c2e3140a146101d257610134565b80634aa4a4fc1161009a5780634aa4a4fc14610175578063a4a78f0c1461018a578063ac9650d81461019d57610134565b806313ead562146101395780634659a4941461016257610134565b36610134573373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012990611c15565b60405180910390fd5b005b600080fd5b61014c610147366004611788565b61022d565b6040516101599190611afb565b60405180910390f35b6101326101703660046117e1565b6105f0565b34801561018157600080fd5b5061014c6106b0565b6101326101983660046117e1565b6106d4565b6101b06101ab36600461183a565b6107b1565b6040516101599190611b4d565b3480156101c957600080fd5b5061014c61090b565b6101326101e03660046117e1565b61092f565b3480156101f157600080fd5b5061014c6109e4565b34801561020657600080fd5b506101326102153660046119b7565b610a08565b6101326102283660046117e1565b611176565b60008373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161061026757600080fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631698ee828686866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018262ffffff168152602001935050505060206040518083038186803b15801561031957600080fd5b505afa15801561032d573d6000803e3d6000fd5b505050506040513d602081101561034357600080fd5b5051905073ffffffffffffffffffffffffffffffffffffffff81166104d3577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a16712958686866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018262ffffff1681526020019350505050602060405180830381600087803b15801561041657600080fd5b505af115801561042a573d6000803e3d6000fd5b505050506040513d602081101561044057600080fd5b5051604080517ff637731d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015291519293509083169163f637731d9160248082019260009290919082900301818387803b1580156104b657600080fd5b505af11580156104ca573d6000803e3d6000fd5b505050506105e8565b60008173ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561051b57600080fd5b505afa15801561052f573d6000803e3d6000fd5b505050506040513d60e081101561054557600080fd5b5051905073ffffffffffffffffffffffffffffffffffffffff81166105e6578173ffffffffffffffffffffffffffffffffffffffff1663f637731d846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156105cd57600080fd5b505af11580156105e1573d6000803e3d6000fd5b505050505b505b949350505050565b604080517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e48101839052905173ffffffffffffffffffffffffffffffffffffffff881691638fcbaf0c9161010480830192600092919082900301818387803b15801561069057600080fd5b505af11580156106a4573d6000803e3d6000fd5b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b604080517fdd62ed3e00000000000000000000000000000000000000000000000000000000815233600482015230602482015290517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b15801561076957600080fd5b505afa15801561077d573d6000803e3d6000fd5b505050506040513d602081101561079357600080fd5b505110156107a9576107a98686868686866105f0565b505050505050565b60608167ffffffffffffffff811180156107ca57600080fd5b506040519080825280602002602001820160405280156107fe57816020015b60608152602001906001900390816107e95790505b50905060005b82811015610904576000803086868581811061081c57fe5b905060200281019061082e9190611d3a565b60405161083c929190611aeb565b600060405180830381855af49150503d8060008114610877576040519150601f19603f3d011682016040523d82523d6000602084013e61087c565b606091505b5091509150816108e25760448151101561089557600080fd5b600481019050808060200190518101906108af9190611902565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101299190611bcb565b808484815181106108ef57fe5b60209081029190910101525050600101610804565b5092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051869173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b1580156109a457600080fd5b505afa1580156109b8573d6000803e3d6000fd5b505050506040513d60208110156109ce57600080fd5b505110156107a9576107a9868686868686611176565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610a1a6060830160408401611a5d565b60ff1611610a54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012990611bde565b6064610a666060830160408401611a5d565b60ff161115610aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012990611c4c565b610aae6020820182611765565b73ffffffffffffffffffffffffffffffffffffffff166323b872dd33610ad76020850185611765565b84602001356040518463ffffffff1660e01b8152600401610afa93929190611b1c565b602060405180830381600087803b158015610b1457600080fd5b505af1158015610b28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4c91906118c5565b50600080610b5d6020840184611765565b73ffffffffffffffffffffffffffffffffffffffff166389afcb44306040518263ffffffff1660e01b8152600401610b959190611afb565b6040805180830381600087803b158015610bae57600080fd5b505af1158015610bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be69190611a3a565b909250905060006064610c0c610c026060870160408801611a5d565b859060ff1661120e565b81610c1357fe5b04905060006064610c2d610c026060880160408901611a5d565b81610c3457fe5b049050610c71610c4a6080870160608801611765565b7f000000000000000000000000000000000000000000000000000000000000000084611238565b610cab610c8460a0870160808801611765565b7f000000000000000000000000000000000000000000000000000000000000000083611238565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663883164566040518061016001604052808a6060016020810190610d099190611765565b73ffffffffffffffffffffffffffffffffffffffff168152602001610d3460a08c0160808d01611765565b73ffffffffffffffffffffffffffffffffffffffff168152602001610d5f60c08c0160a08d016119cf565b62ffffff168152602001610d7960e08c0160c08d016118e1565b60020b8152602001610d926101008c0160e08d016118e1565b60020b815260208101889052604081018790526101008b013560608201526101208b0135608082015260a001610dd06101608c016101408d01611765565b73ffffffffffffffffffffffffffffffffffffffff1681526020018a61016001358152506040518263ffffffff1660e01b8152600401610e109190611c83565b608060405180830381600087803b158015610e2a57600080fd5b505af1158015610e3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6291906119e9565b935093505050858210156110025783821015610eb357610eb3610e8b6080890160608a01611765565b7f00000000000000000000000000000000000000000000000000000000000000006000611238565b818603610ec86101a089016101808a016118a9565b8015610f2e575073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016610f1660808a0160608b01611765565b73ffffffffffffffffffffffffffffffffffffffff16145b15610fe6576040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632e1a7d4d90610fa5908490600401611d31565b600060405180830381600087803b158015610fbf57600080fd5b505af1158015610fd3573d6000803e3d6000fd5b50505050610fe13382611414565b611000565b611000610ff960808a0160608b01611765565b3383611567565b505b8481101561116d578281101561102557611025610e8b60a0890160808a01611765565b80850361103a6101a089016101808a016118a9565b80156110a0575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661108860a08a0160808b01611765565b73ffffffffffffffffffffffffffffffffffffffff16145b15611158576040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632e1a7d4d90611117908490600401611d31565b600060405180830381600087803b15801561113157600080fd5b505af1158015611145573d6000803e3d6000fd5b505050506111533382611414565b61116b565b61116b610ff960a08a0160808b01611765565b505b50505050505050565b604080517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c48101839052905173ffffffffffffffffffffffffffffffffffffffff88169163d505accf9160e480830192600092919082900301818387803b15801561069057600080fd5b60008215806112295750508181028183828161122657fe5b04145b61123257600080fd5b92915050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b3000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b6020831061130d57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016112d0565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461136f576040519150601f19603f3d011682016040523d82523d6000602084013e611374565b606091505b50915091508180156113a25750805115806113a2575080806020019051602081101561139f57600080fd5b50515b61140d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5341000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b5050505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b6020831061148b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161144e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146114ed576040519150601f19603f3d011682016040523d82523d6000602084013e6114f2565b606091505b505090508061156257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b6020831061163c57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016115ff565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461169e576040519150601f19603f3d011682016040523d82523d6000602084013e6116a3565b606091505b50915091508180156116d15750805115806116d157508080602001905160208110156116ce57600080fd5b50515b61140d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b803562ffffff8116811461174f57600080fd5b919050565b803560ff8116811461174f57600080fd5b600060208284031215611776578081fd5b813561178181611dd4565b9392505050565b6000806000806080858703121561179d578283fd5b84356117a881611dd4565b935060208501356117b881611dd4565b92506117c66040860161173c565b915060608501356117d681611dd4565b939692955090935050565b60008060008060008060c087890312156117f9578182fd5b863561180481611dd4565b9550602087013594506040870135935061182060608801611754565b92506080870135915060a087013590509295509295509295565b6000806020838503121561184c578182fd5b823567ffffffffffffffff80821115611863578384fd5b818501915085601f830112611876578384fd5b813581811115611884578485fd5b8660208083028501011115611897578485fd5b60209290920196919550909350505050565b6000602082840312156118ba578081fd5b813561178181611df9565b6000602082840312156118d6578081fd5b815161178181611df9565b6000602082840312156118f2578081fd5b81358060020b8114611781578182fd5b600060208284031215611913578081fd5b815167ffffffffffffffff8082111561192a578283fd5b818401915084601f83011261193d578283fd5b81518181111561194957fe5b60405160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116820101818110848211171561198557fe5b60405281815283820160200187101561199c578485fd5b6119ad826020830160208701611da4565b9695505050505050565b60006101a082840312156119c9578081fd5b50919050565b6000602082840312156119e0578081fd5b6117818261173c565b600080600080608085870312156119fe578384fd5b8451935060208501516fffffffffffffffffffffffffffffffff81168114611a24578384fd5b6040860151606090960151949790965092505050565b60008060408385031215611a4c578182fd5b505080516020909101519092909150565b600060208284031215611a6e578081fd5b61178182611754565b73ffffffffffffffffffffffffffffffffffffffff169052565b60008151808452611aa9816020860160208601611da4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60020b9052565b62ffffff169052565b6000828483379101908152919050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015611bbe577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452611bac858351611a91565b94509285019290850190600101611b72565b5092979650505050505050565b6000602082526117816020830184611a91565b60208082526014908201527f50657263656e7461676520746f6f20736d616c6c000000000000000000000000604082015260600190565b60208082526009908201527f4e6f742057455448390000000000000000000000000000000000000000000000604082015260600190565b60208082526014908201527f50657263656e7461676520746f6f206c61726765000000000000000000000000604082015260600190565b600061016082019050611c97828451611a77565b6020830151611ca96020840182611a77565b506040830151611cbc6040840182611ae2565b506060830151611ccf6060840182611adb565b506080830151611ce26080840182611adb565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151611d2082850182611a77565b505061014092830151919092015290565b90815260200190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611d6e578283fd5b83018035915067ffffffffffffffff821115611d88578283fd5b602001915036819003821315611d9d57600080fd5b9250929050565b60005b83811015611dbf578181015183820152602001611da7565b83811115611dce576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611df657600080fd5b50565b8015158114611df657600080fdfea164736f6c6343000706000a"; + static readonly abi: ({ + inputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + name?: undefined; + outputs?: undefined; + } | { + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + } | { + inputs: { + components: { + internalType: string; + name: string; + type: string; + }[]; + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: never[]; + stateMutability: string; + type: string; + } | { + stateMutability: string; + type: string; + inputs?: undefined; + name?: undefined; + outputs?: undefined; + })[]; + static createInterface(): V3MigratorInterface; + static connect(address: string, signerOrProvider: Signer | Provider): V3Migrator; +} diff --git a/dist2/types/types/v3/factories/V3SwapRouter__factory.d.ts b/dist2/types/types/v3/factories/V3SwapRouter__factory.d.ts new file mode 100644 index 00000000000..5eb7438a199 --- /dev/null +++ b/dist2/types/types/v3/factories/V3SwapRouter__factory.d.ts @@ -0,0 +1,43 @@ +import { Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { V3SwapRouter, V3SwapRouterInterface } from "../V3SwapRouter"; +export declare class V3SwapRouter__factory { + static readonly abi: ({ + inputs: { + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: never[]; + stateMutability: string; + type: string; + } | { + inputs: { + components: { + internalType: string; + name: string; + type: string; + }[]; + internalType: string; + name: string; + type: string; + }[]; + name: string; + outputs: { + internalType: string; + name: string; + type: string; + }[]; + stateMutability: string; + type: string; + } | { + stateMutability: string; + type: string; + inputs?: undefined; + name?: undefined; + outputs?: undefined; + })[]; + static createInterface(): V3SwapRouterInterface; + static connect(address: string, signerOrProvider: Signer | Provider): V3SwapRouter; +} diff --git a/dist2/types/types/v3/index.d.ts b/dist2/types/types/v3/index.d.ts new file mode 100644 index 00000000000..971fa33a897 --- /dev/null +++ b/dist2/types/types/v3/index.d.ts @@ -0,0 +1,114 @@ +export type { IApproveAndCall } from "./IApproveAndCall"; +export type { IImmutableState } from "./IImmutableState"; +export type { IMulticallExtended } from "./IMulticallExtended"; +export type { IOracleSlippage } from "./IOracleSlippage"; +export type { IPeripheryPaymentsExtended } from "./IPeripheryPaymentsExtended"; +export type { IPeripheryPaymentsWithFeeExtended } from "./IPeripheryPaymentsWithFeeExtended"; +export type { IQuoter } from "./IQuoter"; +export type { IQuoterV2 } from "./IQuoterV2"; +export type { ISwapRouter02 } from "./ISwapRouter02"; +export type { IV2SwapRouter } from "./IV2SwapRouter"; +export type { IV3SwapRouter } from "./IV3SwapRouter"; +export type { Quoter } from "./Quoter"; +export type { QuoterV2 } from "./QuoterV2"; +export type { SwapRouter02 } from "./SwapRouter02"; +export type { V2SwapRouter } from "./V2SwapRouter"; +export type { V3SwapRouter } from "./V3SwapRouter"; +export type { IUniswapV3FlashCallback } from "./IUniswapV3FlashCallback"; +export type { IUniswapV3MintCallback } from "./IUniswapV3MintCallback"; +export type { IUniswapV3SwapCallback } from "./IUniswapV3SwapCallback"; +export type { IERC20Minimal } from "./IERC20Minimal"; +export type { IUniswapV3Factory } from "./IUniswapV3Factory"; +export type { IUniswapV3Pool } from "./IUniswapV3Pool"; +export type { IUniswapV3PoolDeployer } from "./IUniswapV3PoolDeployer"; +export type { IUniswapV3PoolActions } from "./IUniswapV3PoolActions"; +export type { IUniswapV3PoolDerivedState } from "./IUniswapV3PoolDerivedState"; +export type { IUniswapV3PoolEvents } from "./IUniswapV3PoolEvents"; +export type { IUniswapV3PoolImmutables } from "./IUniswapV3PoolImmutables"; +export type { IUniswapV3PoolOwnerActions } from "./IUniswapV3PoolOwnerActions"; +export type { IUniswapV3PoolState } from "./IUniswapV3PoolState"; +export type { UniswapV3Factory } from "./UniswapV3Factory"; +export type { UniswapV3Pool } from "./UniswapV3Pool"; +export type { PairFlash } from "./PairFlash"; +export type { IERC1271 } from "./IERC1271"; +export type { IERC20PermitAllowed } from "./IERC20PermitAllowed"; +export type { IWETH9 } from "./IWETH9"; +export type { IERC20Metadata } from "./IERC20Metadata"; +export type { IERC721Permit } from "./IERC721Permit"; +export type { IMulticall } from "./IMulticall"; +export type { INonfungiblePositionManager } from "./INonfungiblePositionManager"; +export type { INonfungibleTokenPositionDescriptor } from "./INonfungibleTokenPositionDescriptor"; +export type { IPeripheryImmutableState } from "./IPeripheryImmutableState"; +export type { IPeripheryPayments } from "./IPeripheryPayments"; +export type { IPeripheryPaymentsWithFee } from "./IPeripheryPaymentsWithFee"; +export type { IPoolInitializer } from "./IPoolInitializer"; +export type { ISelfPermit } from "./ISelfPermit"; +export type { ISwapRouter } from "./ISwapRouter"; +export type { ITickLens } from "./ITickLens"; +export type { IV3Migrator } from "./IV3Migrator"; +export type { TickLens } from "./TickLens"; +export type { UniswapInterfaceMulticall } from "./UniswapInterfaceMulticall"; +export type { NFTDescriptor } from "./NFTDescriptor"; +export type { NonfungiblePositionManager } from "./NonfungiblePositionManager"; +export type { NonfungibleTokenPositionDescriptor } from "./NonfungibleTokenPositionDescriptor"; +export type { SwapRouter } from "./SwapRouter"; +export type { V3Migrator } from "./V3Migrator"; +export type { IUniswapV3Staker } from "./IUniswapV3Staker"; +export type { UniswapV3Staker } from "./UniswapV3Staker"; +export { IApproveAndCall__factory } from "./factories/IApproveAndCall__factory"; +export { IImmutableState__factory } from "./factories/IImmutableState__factory"; +export { IMulticallExtended__factory } from "./factories/IMulticallExtended__factory"; +export { IOracleSlippage__factory } from "./factories/IOracleSlippage__factory"; +export { IPeripheryPaymentsExtended__factory } from "./factories/IPeripheryPaymentsExtended__factory"; +export { IPeripheryPaymentsWithFeeExtended__factory } from "./factories/IPeripheryPaymentsWithFeeExtended__factory"; +export { IQuoter__factory } from "./factories/IQuoter__factory"; +export { IQuoterV2__factory } from "./factories/IQuoterV2__factory"; +export { ISwapRouter02__factory } from "./factories/ISwapRouter02__factory"; +export { IV2SwapRouter__factory } from "./factories/IV2SwapRouter__factory"; +export { IV3SwapRouter__factory } from "./factories/IV3SwapRouter__factory"; +export { Quoter__factory } from "./factories/Quoter__factory"; +export { QuoterV2__factory } from "./factories/QuoterV2__factory"; +export { SwapRouter02__factory } from "./factories/SwapRouter02__factory"; +export { V2SwapRouter__factory } from "./factories/V2SwapRouter__factory"; +export { V3SwapRouter__factory } from "./factories/V3SwapRouter__factory"; +export { IUniswapV3FlashCallback__factory } from "./factories/IUniswapV3FlashCallback__factory"; +export { IUniswapV3MintCallback__factory } from "./factories/IUniswapV3MintCallback__factory"; +export { IUniswapV3SwapCallback__factory } from "./factories/IUniswapV3SwapCallback__factory"; +export { IERC20Minimal__factory } from "./factories/IERC20Minimal__factory"; +export { IUniswapV3Factory__factory } from "./factories/IUniswapV3Factory__factory"; +export { IUniswapV3Pool__factory } from "./factories/IUniswapV3Pool__factory"; +export { IUniswapV3PoolDeployer__factory } from "./factories/IUniswapV3PoolDeployer__factory"; +export { IUniswapV3PoolActions__factory } from "./factories/IUniswapV3PoolActions__factory"; +export { IUniswapV3PoolDerivedState__factory } from "./factories/IUniswapV3PoolDerivedState__factory"; +export { IUniswapV3PoolEvents__factory } from "./factories/IUniswapV3PoolEvents__factory"; +export { IUniswapV3PoolImmutables__factory } from "./factories/IUniswapV3PoolImmutables__factory"; +export { IUniswapV3PoolOwnerActions__factory } from "./factories/IUniswapV3PoolOwnerActions__factory"; +export { IUniswapV3PoolState__factory } from "./factories/IUniswapV3PoolState__factory"; +export { UniswapV3Factory__factory } from "./factories/UniswapV3Factory__factory"; +export { UniswapV3Pool__factory } from "./factories/UniswapV3Pool__factory"; +export { PairFlash__factory } from "./factories/PairFlash__factory"; +export { IERC1271__factory } from "./factories/IERC1271__factory"; +export { IERC20PermitAllowed__factory } from "./factories/IERC20PermitAllowed__factory"; +export { IWETH9__factory } from "./factories/IWETH9__factory"; +export { IERC20Metadata__factory } from "./factories/IERC20Metadata__factory"; +export { IERC721Permit__factory } from "./factories/IERC721Permit__factory"; +export { IMulticall__factory } from "./factories/IMulticall__factory"; +export { INonfungiblePositionManager__factory } from "./factories/INonfungiblePositionManager__factory"; +export { INonfungibleTokenPositionDescriptor__factory } from "./factories/INonfungibleTokenPositionDescriptor__factory"; +export { IPeripheryImmutableState__factory } from "./factories/IPeripheryImmutableState__factory"; +export { IPeripheryPayments__factory } from "./factories/IPeripheryPayments__factory"; +export { IPeripheryPaymentsWithFee__factory } from "./factories/IPeripheryPaymentsWithFee__factory"; +export { IPoolInitializer__factory } from "./factories/IPoolInitializer__factory"; +export { ISelfPermit__factory } from "./factories/ISelfPermit__factory"; +export { ISwapRouter__factory } from "./factories/ISwapRouter__factory"; +export { ITickLens__factory } from "./factories/ITickLens__factory"; +export { IV3Migrator__factory } from "./factories/IV3Migrator__factory"; +export { TickLens__factory } from "./factories/TickLens__factory"; +export { UniswapInterfaceMulticall__factory } from "./factories/UniswapInterfaceMulticall__factory"; +export { NFTDescriptor__factory } from "./factories/NFTDescriptor__factory"; +export { NonfungiblePositionManager__factory } from "./factories/NonfungiblePositionManager__factory"; +export { NonfungibleTokenPositionDescriptor__factory } from "./factories/NonfungibleTokenPositionDescriptor__factory"; +export { SwapRouter__factory } from "./factories/SwapRouter__factory"; +export { V3Migrator__factory } from "./factories/V3Migrator__factory"; +export { IUniswapV3Staker__factory } from "./factories/IUniswapV3Staker__factory"; +export { UniswapV3Staker__factory } from "./factories/UniswapV3Staker__factory"; diff --git a/dist2/types/utils/anonymizeLink.d.ts b/dist2/types/utils/anonymizeLink.d.ts new file mode 100644 index 00000000000..58d2cb8237c --- /dev/null +++ b/dist2/types/utils/anonymizeLink.d.ts @@ -0,0 +1,6 @@ +/** + * Returns the anonymized version of the given href, i.e. one that does not leak user information + * @param href the link to anonymize, i.e. remove any personal data from + * @return string anonymized version of the given href + */ +export declare function anonymizeLink(href: string): string; diff --git a/dist2/types/utils/approveAmountCalldata.d.ts b/dist2/types/utils/approveAmountCalldata.d.ts new file mode 100644 index 00000000000..1af5d2fe19c --- /dev/null +++ b/dist2/types/utils/approveAmountCalldata.d.ts @@ -0,0 +1,6 @@ +import { Currency, CurrencyAmount } from '@uniswap/sdk-core'; +export default function approveAmountCalldata(amount: CurrencyAmount, spender: string): { + to: string; + data: string; + value: '0x0'; +}; diff --git a/dist2/types/utils/calculateGasMargin.d.ts b/dist2/types/utils/calculateGasMargin.d.ts new file mode 100644 index 00000000000..bf6ddf3cbcd --- /dev/null +++ b/dist2/types/utils/calculateGasMargin.d.ts @@ -0,0 +1,6 @@ +import { BigNumber } from '@ethersproject/bignumber'; +/** + * Returns the gas value plus a margin for unexpected or variable gas costs + * @param value the gas value to pad + */ +export declare function calculateGasMargin(value: BigNumber): BigNumber; diff --git a/dist2/types/utils/calculateSlippageAmount.d.ts b/dist2/types/utils/calculateSlippageAmount.d.ts new file mode 100644 index 00000000000..02e91c3c864 --- /dev/null +++ b/dist2/types/utils/calculateSlippageAmount.d.ts @@ -0,0 +1,3 @@ +import { Currency, CurrencyAmount, Percent } from '@uniswap/sdk-core'; +import JSBI from 'jsbi'; +export declare function calculateSlippageAmount(value: CurrencyAmount, slippage: Percent): [JSBI, JSBI]; diff --git a/dist2/types/utils/chains.d.ts b/dist2/types/utils/chains.d.ts new file mode 100644 index 00000000000..26df63b7e2b --- /dev/null +++ b/dist2/types/utils/chains.d.ts @@ -0,0 +1,3 @@ +import { SupportedL1ChainId, SupportedL2ChainId } from 'constants/chains'; +export declare function isL1ChainId(chainId: number | undefined): chainId is SupportedL1ChainId; +export declare function isL2ChainId(chainId: number | undefined): chainId is SupportedL2ChainId; diff --git a/dist2/types/utils/computeFiatValuePriceImpact.d.ts b/dist2/types/utils/computeFiatValuePriceImpact.d.ts new file mode 100644 index 00000000000..8082536d5d2 --- /dev/null +++ b/dist2/types/utils/computeFiatValuePriceImpact.d.ts @@ -0,0 +1,2 @@ +import { CurrencyAmount, Percent, Token } from '@uniswap/sdk-core'; +export declare function computeFiatValuePriceImpact(fiatValueInput: CurrencyAmount | undefined | null, fiatValueOutput: CurrencyAmount | undefined | null): Percent | undefined; diff --git a/dist2/types/utils/computeSurroundingTicks.d.ts b/dist2/types/utils/computeSurroundingTicks.d.ts new file mode 100644 index 00000000000..1a0271564a2 --- /dev/null +++ b/dist2/types/utils/computeSurroundingTicks.d.ts @@ -0,0 +1,3 @@ +import { Token } from '@uniswap/sdk-core'; +import { TickData, TickProcessed } from 'hooks/usePoolTickData'; +export default function computeSurroundingTicks(token0: Token, token1: Token, activeTickProcessed: TickProcessed, sortedTickData: TickData[], pivot: number, ascending: boolean): TickProcessed[]; diff --git a/dist2/types/utils/computeUniCirculation.d.ts b/dist2/types/utils/computeUniCirculation.d.ts new file mode 100644 index 00000000000..1d9690e0820 --- /dev/null +++ b/dist2/types/utils/computeUniCirculation.d.ts @@ -0,0 +1,3 @@ +import { BigNumber } from '@ethersproject/bignumber'; +import { CurrencyAmount, Token } from '@uniswap/sdk-core'; +export declare function computeUniCirculation(uni: Token, blockTimestamp: BigNumber, unclaimedUni: CurrencyAmount | undefined): CurrencyAmount; diff --git a/dist2/types/utils/constructSameAddressMap.d.ts b/dist2/types/utils/constructSameAddressMap.d.ts new file mode 100644 index 00000000000..561a13ec8ee --- /dev/null +++ b/dist2/types/utils/constructSameAddressMap.d.ts @@ -0,0 +1,4 @@ +import { SupportedChainId } from '../constants/chains'; +export declare function constructSameAddressMap(address: T, additionalNetworks?: SupportedChainId[]): { + [chainId: number]: T; +}; diff --git a/dist2/types/utils/currencyId.d.ts b/dist2/types/utils/currencyId.d.ts new file mode 100644 index 00000000000..1f2ca9b231d --- /dev/null +++ b/dist2/types/utils/currencyId.d.ts @@ -0,0 +1,2 @@ +import { Currency } from '@uniswap/sdk-core'; +export declare function currencyId(currency: Currency): string; diff --git a/dist2/types/utils/formatCurrencyAmount.d.ts b/dist2/types/utils/formatCurrencyAmount.d.ts new file mode 100644 index 00000000000..cee1658aca8 --- /dev/null +++ b/dist2/types/utils/formatCurrencyAmount.d.ts @@ -0,0 +1,3 @@ +import { Currency, CurrencyAmount, Price } from '@uniswap/sdk-core'; +export declare function formatCurrencyAmount(amount: CurrencyAmount | undefined, sigFigs: number): string; +export declare function formatPrice(price: Price | undefined, sigFigs: number): string; diff --git a/dist2/types/utils/formatTickPrice.d.ts b/dist2/types/utils/formatTickPrice.d.ts new file mode 100644 index 00000000000..7104b57d893 --- /dev/null +++ b/dist2/types/utils/formatTickPrice.d.ts @@ -0,0 +1,5 @@ +import { Price, Token } from '@uniswap/sdk-core'; +import { Bound } from '../state/mint/v3/actions'; +export declare function formatTickPrice(price: Price | undefined, atLimit: { + [bound in Bound]?: boolean | undefined; +}, direction: Bound, placeholder?: string): string; diff --git a/dist2/types/utils/getExplorerLink.d.ts b/dist2/types/utils/getExplorerLink.d.ts new file mode 100644 index 00000000000..f31378386ef --- /dev/null +++ b/dist2/types/utils/getExplorerLink.d.ts @@ -0,0 +1,13 @@ +export declare enum ExplorerDataType { + TRANSACTION = "transaction", + TOKEN = "token", + ADDRESS = "address", + BLOCK = "block" +} +/** + * Return the explorer link for the given data and data type + * @param chainId the ID of the chain for which to return the data + * @param data the data to return a link for + * @param type the type of the data + */ +export declare function getExplorerLink(chainId: number, data: string, type: ExplorerDataType): string; diff --git a/dist2/types/utils/getLibrary.d.ts b/dist2/types/utils/getLibrary.d.ts new file mode 100644 index 00000000000..7901b744d5a --- /dev/null +++ b/dist2/types/utils/getLibrary.d.ts @@ -0,0 +1,2 @@ +import { Web3Provider } from '@ethersproject/providers'; +export default function getLibrary(provider: any): Web3Provider; diff --git a/dist2/types/utils/getTickToPrice.d.ts b/dist2/types/utils/getTickToPrice.d.ts new file mode 100644 index 00000000000..ca53e208d58 --- /dev/null +++ b/dist2/types/utils/getTickToPrice.d.ts @@ -0,0 +1,2 @@ +import { Price, Token } from '@uniswap/sdk-core'; +export declare function getTickToPrice(baseToken?: Token, quoteToken?: Token, tick?: number): Price | undefined; diff --git a/dist2/types/utils/getTxOptimizedSwapRouter.d.ts b/dist2/types/utils/getTxOptimizedSwapRouter.d.ts new file mode 100644 index 00000000000..efef8642079 --- /dev/null +++ b/dist2/types/utils/getTxOptimizedSwapRouter.d.ts @@ -0,0 +1,23 @@ +import { ApprovalState } from 'lib/hooks/useApproval'; +export declare enum SwapRouterVersion { + V2 = 0, + V3 = 1, + V2V3 = 2 +} +/** + * Returns the swap router that will result in the least amount of txs (less gas) for a given swap. + * Heuristic: + * - if trade contains a single v2-only trade & V2 SwapRouter is approved: use V2 SwapRouter + * - if trade contains only v3 & V3 SwapRouter is approved: use V3 SwapRouter + * - else: approve and use V2+V3 SwapRouter + */ +export declare function getTxOptimizedSwapRouter({ onlyV2Routes, onlyV3Routes, tradeHasSplits, approvalStates, }: { + onlyV2Routes: boolean | undefined; + onlyV3Routes: boolean | undefined; + tradeHasSplits: boolean | undefined; + approvalStates: { + v2: ApprovalState; + v3: ApprovalState; + v2V3: ApprovalState; + }; +}): SwapRouterVersion | undefined; diff --git a/dist2/types/utils/index.d.ts b/dist2/types/utils/index.d.ts new file mode 100644 index 00000000000..992db2940e3 --- /dev/null +++ b/dist2/types/utils/index.d.ts @@ -0,0 +1,11 @@ +import { Contract } from '@ethersproject/contracts'; +import { Web3Provider } from '@ethersproject/providers'; +import { Token } from '@uniswap/sdk-core'; +import { FeeAmount } from '@uniswap/v3-sdk'; +import { ChainTokenMap } from 'lib/hooks/useTokenList/utils'; +export declare function isAddress(value: any): string | false; +export declare function shortenAddress(address: string, chars?: number): string; +export declare function getContract(address: string, ABI: any, library: Web3Provider, account?: string): Contract; +export declare function escapeRegExp(string: string): string; +export declare function isTokenOnList(chainTokenMap: ChainTokenMap, token?: Token): boolean; +export declare function formattedFeeAmount(feeAmount: FeeAmount): number; diff --git a/dist2/types/utils/isTradeBetter.d.ts b/dist2/types/utils/isTradeBetter.d.ts new file mode 100644 index 00000000000..fce0b10eee2 --- /dev/null +++ b/dist2/types/utils/isTradeBetter.d.ts @@ -0,0 +1,3 @@ +import { Currency, Percent, TradeType } from '@uniswap/sdk-core'; +import { Trade as V2Trade } from '@uniswap/v2-sdk'; +export declare function isTradeBetter(tradeA: V2Trade | undefined | null, tradeB: V2Trade | undefined | null, minimumDelta?: Percent): boolean | undefined; diff --git a/dist2/types/utils/isZero.d.ts b/dist2/types/utils/isZero.d.ts new file mode 100644 index 00000000000..7afe966870e --- /dev/null +++ b/dist2/types/utils/isZero.d.ts @@ -0,0 +1,5 @@ +/** + * Returns true if the string value is zero in hex + * @param hexNumberString + */ +export default function isZero(hexNumberString: string): boolean; diff --git a/dist2/types/utils/listSort.d.ts b/dist2/types/utils/listSort.d.ts new file mode 100644 index 00000000000..88b581cd680 --- /dev/null +++ b/dist2/types/utils/listSort.d.ts @@ -0,0 +1 @@ +export default function sortByListPriority(urlA: string, urlB: string): number; diff --git a/dist2/types/utils/listVersionLabel.d.ts b/dist2/types/utils/listVersionLabel.d.ts new file mode 100644 index 00000000000..c1dcc4ce78b --- /dev/null +++ b/dist2/types/utils/listVersionLabel.d.ts @@ -0,0 +1,2 @@ +import { Version } from '@uniswap/token-lists'; +export default function listVersionLabel(version: Version): string; diff --git a/dist2/types/utils/maxAmountSpend.d.ts b/dist2/types/utils/maxAmountSpend.d.ts new file mode 100644 index 00000000000..6ac3c298b2e --- /dev/null +++ b/dist2/types/utils/maxAmountSpend.d.ts @@ -0,0 +1,6 @@ +import { Currency, CurrencyAmount } from '@uniswap/sdk-core'; +/** + * Given some token amount, return the max that can be spent of it + * @param currencyAmount to return max of + */ +export declare function maxAmountSpend(currencyAmount?: CurrencyAmount): CurrencyAmount | undefined; diff --git a/dist2/types/utils/prices.d.ts b/dist2/types/utils/prices.d.ts new file mode 100644 index 00000000000..a259afc479d --- /dev/null +++ b/dist2/types/utils/prices.d.ts @@ -0,0 +1,7 @@ +import { Trade } from '@uniswap/router-sdk'; +import { Currency, CurrencyAmount, Percent, TradeType } from '@uniswap/sdk-core'; +export declare function computeRealizedLPFeePercent(trade: Trade): Percent; +export declare function computeRealizedLPFeeAmount(trade?: Trade | null): CurrencyAmount | undefined; +declare type WarningSeverity = 0 | 1 | 2 | 3 | 4; +export declare function warningSeverity(priceImpact: Percent | undefined): WarningSeverity; +export {}; diff --git a/dist2/types/utils/retry.d.ts b/dist2/types/utils/retry.d.ts new file mode 100644 index 00000000000..ed1a406020e --- /dev/null +++ b/dist2/types/utils/retry.d.ts @@ -0,0 +1,22 @@ +/** + * Throw this error if the function should retry + */ +export declare class RetryableError extends Error { + isRetryableError: true; +} +export interface RetryOptions { + n: number; + minWait: number; + maxWait: number; +} +/** + * Retries the function that returns the promise until the promise successfully resolves up to n retries + * @param fn function to retry + * @param n how many times to retry + * @param minWait min wait between retries in ms + * @param maxWait max wait between retries in ms + */ +export declare function retry(fn: () => Promise, { n, minWait, maxWait }: RetryOptions): { + promise: Promise; + cancel: () => void; +}; diff --git a/dist2/types/utils/routes.d.ts b/dist2/types/utils/routes.d.ts new file mode 100644 index 00000000000..debf923389c --- /dev/null +++ b/dist2/types/utils/routes.d.ts @@ -0,0 +1 @@ +export declare const replaceURLParam: (search: string, param: string, newValue: string) => string; diff --git a/dist2/types/utils/safeNamehash.d.ts b/dist2/types/utils/safeNamehash.d.ts new file mode 100644 index 00000000000..852b9452229 --- /dev/null +++ b/dist2/types/utils/safeNamehash.d.ts @@ -0,0 +1 @@ +export declare function safeNamehash(name?: string): string | undefined; diff --git a/dist2/types/utils/supportedChainId.d.ts b/dist2/types/utils/supportedChainId.d.ts new file mode 100644 index 00000000000..26345016a40 --- /dev/null +++ b/dist2/types/utils/supportedChainId.d.ts @@ -0,0 +1,5 @@ +/** + * Returns the input chain ID if chain is supported. If not, return undefined + * @param chainId a chain ID, which will be returned if it is a supported chain ID + */ +export declare function supportedChainId(chainId: number): number | undefined; diff --git a/dist2/types/utils/switchToNetwork.d.ts b/dist2/types/utils/switchToNetwork.d.ts new file mode 100644 index 00000000000..f47db5d6bb5 --- /dev/null +++ b/dist2/types/utils/switchToNetwork.d.ts @@ -0,0 +1,8 @@ +import { Web3Provider } from '@ethersproject/providers'; +import { SupportedChainId } from 'constants/chains'; +interface SwitchNetworkArguments { + library: Web3Provider; + chainId: SupportedChainId; +} +export declare function switchToNetwork({ library, chainId }: SwitchNetworkArguments): Promise; +export {}; diff --git a/dist2/types/utils/tradeMeaningFullyDiffer.d.ts b/dist2/types/utils/tradeMeaningFullyDiffer.d.ts new file mode 100644 index 00000000000..95a9458a8d6 --- /dev/null +++ b/dist2/types/utils/tradeMeaningFullyDiffer.d.ts @@ -0,0 +1,7 @@ +import { Trade } from '@uniswap/router-sdk'; +import { Currency, TradeType } from '@uniswap/sdk-core'; +/** + * Returns true if the trade requires a confirmation of details before we can submit it + * @param args either a pair of V2 trades or a pair of V3 trades + */ +export declare function tradeMeaningfullyDiffers(...args: [Trade, Trade]): boolean; diff --git a/dist2/types/utils/transformSwapRouteToGetQuoteResult.d.ts b/dist2/types/utils/transformSwapRouteToGetQuoteResult.d.ts new file mode 100644 index 00000000000..ccc06972190 --- /dev/null +++ b/dist2/types/utils/transformSwapRouteToGetQuoteResult.d.ts @@ -0,0 +1,4 @@ +import { Currency, CurrencyAmount } from '@uniswap/sdk-core'; +import { SwapRoute } from '@uniswap/smart-order-router'; +import { GetQuoteResult } from 'state/routing/types'; +export declare function transformSwapRouteToGetQuoteResult(type: 'exactIn' | 'exactOut', amount: CurrencyAmount, { quote, quoteGasAdjusted, route, estimatedGasUsed, estimatedGasUsedQuoteToken, estimatedGasUsedUSD, gasPriceWei, methodParameters, blockNumber, }: SwapRoute): GetQuoteResult; diff --git a/dist2/types/utils/unwrappedToken.d.ts b/dist2/types/utils/unwrappedToken.d.ts new file mode 100644 index 00000000000..d27e94513fd --- /dev/null +++ b/dist2/types/utils/unwrappedToken.d.ts @@ -0,0 +1,2 @@ +import { Currency } from '@uniswap/sdk-core'; +export declare function unwrappedToken(currency: Currency): Currency; diff --git a/dist2/types/utils/userAgent.d.ts b/dist2/types/utils/userAgent.d.ts new file mode 100644 index 00000000000..0cc77c56a89 --- /dev/null +++ b/dist2/types/utils/userAgent.d.ts @@ -0,0 +1,2 @@ +export declare const userAgent: import("ua-parser-js").IResult; +export declare const isMobile: boolean; diff --git a/old-rollup.config.ts b/old-rollup.config.ts new file mode 100644 index 00000000000..7da55cde6f8 --- /dev/null +++ b/old-rollup.config.ts @@ -0,0 +1,63 @@ +/** + * Bundles the widgets library, which is released independently of the interface application. + * This library lives in src/lib, but shares code with the interface application. + */ + +import eslint from '@rollup/plugin-eslint' +import json from '@rollup/plugin-json' +import replace from '@rollup/plugin-replace' +import url from '@rollup/plugin-url' +import svgr from '@svgr/rollup' +import dts from 'rollup-plugin-dts' +import sass from 'rollup-plugin-scss' +import typescript from 'rollup-plugin-typescript2' + +import { dependencies } from './package.json' + +const deps = Object.keys(dependencies) + +const replacements = { + 'process.env.REACT_APP_IS_WIDGET': true, +} + +const library = { + input: 'src/lib/index.tsx', + output: [ + { + file: 'dist/widgets.js', + format: 'cjs', + inlineDynamicImports: true, + sourcemap: true, + }, + { + file: 'dist/widgets.esm.js', + format: 'esm', + inlineDynamicImports: true, + sourcemap: true, + }, + ], + // necessary because some nested imports (eg jotai/*) would otherwise not resolve. + external: (source: string) => Boolean(deps.find((dep) => source === dep || source.startsWith(dep + '/'))), + plugins: [ + eslint({ include: ['**/*.js', '**/*.jsx', '**/*.ts', '**/*.tsx'] }), + json(), // imports json + replace({ ...replacements, preventAssignment: true }), + url(), // imports files (including svgs) as data URIs + svgr({ exportType: 'named', svgo: false }), // imports svgs as React components + sass(), // imports sass styles + typescript({ tsconfig: './tsconfig.lib.json', useTsconfigDeclarationDir: true }), + ], +} + +const typings = { + input: 'dist/dts/lib/index.d.ts', + output: { + file: 'dist/widgets.d.ts', + format: 'es', + }, + external: (source: string) => source.endsWith('.scss'), + plugins: [dts({ compilerOptions: { baseUrl: 'dist/dts' } })], +} + +const config = [library, typings] +export default config diff --git a/package.json b/package.json index c0b5442b0b4..ea71970ec6d 100644 --- a/package.json +++ b/package.json @@ -2,14 +2,13 @@ "name": "@uniswap/interface", "description": "Uniswap Interface", "homepage": ".", - "main": "dist/interface.js", - "module": "dist/interface.esm.js", - "types": "dist/index.d.ts", + "main": "dist2/snowflake.js", + "types": "dist2/snowflake.d.ts", "files": [ - "lib", - "dist" + "dist2" ], - "private": true, + "version": "1.0.0", + "private": false, "devDependencies": { "@ethersproject/experimental": "^5.4.0", "@gnosis.pm/safe-apps-web3-react": "^0.6.0", @@ -23,8 +22,11 @@ "@reach/portal": "^0.10.3", "@react-hook/window-scroll": "^1.3.0", "@reduxjs/toolkit": "^1.6.1", + "@rollup/plugin-babel": "^5.3.0", + "@rollup/plugin-commonjs": "^21.0.1", "@rollup/plugin-eslint": "^8.0.1", "@rollup/plugin-json": "^4.1.0", + "@rollup/plugin-node-resolve": "^13.1.3", "@rollup/plugin-replace": "^3.0.1", "@rollup/plugin-url": "^6.1.0", "@svgr/rollup": "^6.2.0", @@ -104,7 +106,10 @@ "redux-localstorage-simple": "^2.3.1", "rollup": "^2.63.0", "rollup-plugin-dts": "^4.1.0", + "rollup-plugin-peer-deps-external": "^2.2.4", + "rollup-plugin-postcss": "^4.0.2", "rollup-plugin-scss": "^3.0.0", + "rollup-plugin-terser": "^7.0.2", "rollup-plugin-typescript2": "^0.31.1", "sass": "^1.45.1", "serve": "^11.3.2", @@ -132,13 +137,15 @@ "i18n:extract": "lingui extract --locale en-US", "i18n:compile": "yarn i18n:extract && lingui compile", "i18n:pseudo": "lingui extract --locale pseudo && lingui compile", - "postinstall": "yarn contracts:compile && yarn graphql:generate && yarn i18n:compile", + "prestart": "yarn contracts:compile && yarn graphql:generate && yarn i18n:compile", "start": "react-scripts start", "build": "react-scripts build", "test": "react-scripts test --env=./custom-test-env.js", "test:e2e": "start-server-and-test 'serve build -l 3000' http://localhost:3000 'cypress run --record'", "widgets:start": "cosmos", - "widgets:build": "rollup --config --failAfterWarnings --configPlugin typescript2" + "widgets:build": "rollup --config --failAfterWarnings --configPlugin typescript2", + "snowflake:build": "rollup --config --configPlugin typescript2", + "build:tsc": "tsc" }, "browserslist": { "production": [ @@ -173,6 +180,7 @@ "@lingui/macro": "^3.9.0", "@lingui/react": "^3.9.0", "@popperjs/core": "^2.4.4", + "@types/rollup-plugin-peer-deps-external": "^2.2.1", "@uniswap/redux-multicall": "^1.0.0", "@uniswap/router-sdk": "^1.0.3", "@uniswap/sdk-core": "^3.0.1", diff --git a/rollup.config.ts b/rollup.config.ts index 7da55cde6f8..c71db111b8e 100644 --- a/rollup.config.ts +++ b/rollup.config.ts @@ -3,61 +3,124 @@ * This library lives in src/lib, but shares code with the interface application. */ -import eslint from '@rollup/plugin-eslint' +// import eslint from '@rollup/plugin-eslint' +import commonjs from '@rollup/plugin-commonjs' import json from '@rollup/plugin-json' -import replace from '@rollup/plugin-replace' +// import resolve from '@rollup/plugin-node-resolve' +import babel from '@rollup/plugin-babel' + +import { DEFAULT_EXTENSIONS } from '@babel/core' +// import replace from '@rollup/plugin-replace' import url from '@rollup/plugin-url' import svgr from '@svgr/rollup' import dts from 'rollup-plugin-dts' +// import external from 'rollup-plugin-peer-deps-external' import sass from 'rollup-plugin-scss' import typescript from 'rollup-plugin-typescript2' -import { dependencies } from './package.json' +// import { dependencies } from './package.json' + +// const deps = Object.keys(dependencies) + +// const replacements = { +// 'process.env.REACT_APP_IS_WIDGET': true, +// } +// process.env.BABEL_ENV === 'production' -const deps = Object.keys(dependencies) +// const ignore = ['styled-components'] +const babelConfig = { + extensions: [...DEFAULT_EXTENSIONS, '.ts', 'tsx'], -const replacements = { - 'process.env.REACT_APP_IS_WIDGET': true, + exclude: '/node_modules/**', + babelrc: false, + configFile: false, + presets: [ + [ + require.resolve('babel-preset-react-app'), + { + runtime: 'automatic', + }, + ], + ], + // plugins: [ + // [ + // require.resolve('babel-plugin-named-asset-import'), + // { + // loaderMap: { + // svg: { + // ReactComponent: '@svgr/webpack?-svgo,+titleProp,+ref![path]', + // }, + // }, + // }, + // ], + // ], } +// const babelPlugins = [ +// // These plugins filter out non-ES2015. +// '@babel/plugin-transform-flow-strip-types', +// ['@babel/plugin-proposal-class-properties', { loose: true }], +// 'syntax-trailing-function-commas', +// // These use loose mode which avoids embedding a runtime. +// // TODO: Remove object spread from the source. Prefer Object.assign instead. +// ['@babel/plugin-proposal-object-rest-spread', { loose: true, useBuiltIns: true }], +// ['@babel/plugin-transform-template-literals', { loose: true }], +// // TODO: Remove for...of from the source. It requires a runtime to be embedded. +// '@babel/plugin-transform-for-of', +// // TODO: Remove array spread from the source. Prefer .apply instead. +// ['@babel/plugin-transform-spread', { loose: true, useBuiltIns: true }], +// '@babel/plugin-transform-parameters', +// // TODO: Remove array destructuring from the source. Requires runtime. +// ['@babel/plugin-transform-destructuring', { loose: true, useBuiltIns: true }], +// ] const library = { - input: 'src/lib/index.tsx', + input: 'src/snowflake.ts', output: [ { - file: 'dist/widgets.js', + file: 'dist2/snowflake.js', format: 'cjs', inlineDynamicImports: true, sourcemap: true, }, - { - file: 'dist/widgets.esm.js', - format: 'esm', - inlineDynamicImports: true, - sourcemap: true, - }, + // { + // file: 'dist/widgets.esm.js', + // format: 'esm', + // inlineDynamicImports: true, + // sourcemap: true, + // }, ], // necessary because some nested imports (eg jotai/*) would otherwise not resolve. - external: (source: string) => Boolean(deps.find((dep) => source === dep || source.startsWith(dep + '/'))), + // external: (source: string) => Boolean(deps.find((dep) => source === dep || source.startsWith(dep + '/'))), + // external: ['styled-components'], + // external: (source: string) => ignore.includes(source), plugins: [ - eslint({ include: ['**/*.js', '**/*.jsx', '**/*.ts', '**/*.tsx'] }), + // external(), + // resolve(), + typescript({ tsconfig: './tsconfig.json', useTsconfigDeclarationDir: false }), + commonjs(), + // commonjs({ ignore: ['node_modules/styled-components/**/*.js'] }), + // eslint({ include: ['**/*.js', '**/*.jsx', '**/*.ts', '**/*.tsx'] }), + // babel(babelConfig), json(), // imports json - replace({ ...replacements, preventAssignment: true }), + // replace({ ...replacements, preventAssignment: true }), url(), // imports files (including svgs) as data URIs svgr({ exportType: 'named', svgo: false }), // imports svgs as React components sass(), // imports sass styles - typescript({ tsconfig: './tsconfig.lib.json', useTsconfigDeclarationDir: true }), ], } const typings = { - input: 'dist/dts/lib/index.d.ts', + input: 'dist2/types/snowflake.d.ts', output: { - file: 'dist/widgets.d.ts', + file: 'dist2/snowflake.d.ts', format: 'es', }, external: (source: string) => source.endsWith('.scss'), - plugins: [dts({ compilerOptions: { baseUrl: 'dist/dts' } })], + // plugins: [dts()], + plugins: [dts({ compilerOptions: { baseUrl: 'dist2/types' } })], } const config = [library, typings] +// const config = [library] + export default config diff --git a/src/snowflake.ts b/src/snowflake.ts new file mode 100644 index 00000000000..967b576e09d --- /dev/null +++ b/src/snowflake.ts @@ -0,0 +1 @@ +export { default as Swap } from './pages/Swap' diff --git a/tsconfig.base.json b/tsconfig.base.json index c92c0ef8310..a8bf67f8349 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -24,5 +24,5 @@ "allowSyntheticDefaultImports": true, "types": ["react-spring", "jest"] }, - "exclude": ["node_modules", "cypress"], + "exclude": ["node_modules", "cypress"] } diff --git a/tsconfig.json b/tsconfig.json index 2d36fd433fe..64c26c7e38e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,7 +3,12 @@ "compilerOptions": { "jsx": "react-jsx", "baseUrl": "src" + // "outDir": "dist2", + // "moduleResolution": "node", + // "declaration": true, + // "declarationDir": "dist2/types" + // "emitDeclarationOnly": true }, - "exclude": ["node_modules", "cypress"], + "exclude": ["node_modules", "cypress", "src/**/*.test.*"], "include": ["src/**/*"] } diff --git a/tsconfig.lib.json b/tsconfig.lib.json index ec839e1b6c2..fa39e12c14d 100644 --- a/tsconfig.lib.json +++ b/tsconfig.lib.json @@ -3,7 +3,7 @@ "compilerOptions": { "jsx": "react-jsx", "declaration": true, - "declarationDir": "dist/dts", + "declarationDir": "dist2/dts", "baseUrl": "src/lib", "paths": { "lib/*": ["./*"], @@ -13,8 +13,8 @@ "hooks/*": ["../hooks/*"], "state/*": ["../state/*"], "types/*": ["../types/*"], - "utils/*": ["../utils/*"], - }, + "utils/*": ["../utils/*"] + } }, "exclude": ["node_modules", "src/lib/**/*.test.*"], "include": ["src/lib/**/*"] diff --git a/yarn.lock b/yarn.lock index ad9f3b687ef..dbd7d89f40a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -205,7 +205,7 @@ dependencies: "@babel/types" "^7.16.7" -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.1", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.13.12", "@babel/helper-module-imports@^7.16.7": +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.1", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.13.12", "@babel/helper-module-imports@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== @@ -3625,6 +3625,27 @@ redux-thunk "^2.3.0" reselect "^4.0.0" +"@rollup/plugin-babel@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.0.tgz#9cb1c5146ddd6a4968ad96f209c50c62f92f9879" + integrity sha512-9uIC8HZOnVLrLHxayq/PTzw+uS25E14KPUBh5ktF+18Mjo5yK0ToMMx6epY0uEgkjwJw0aBW4x2horYXh8juWw== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@rollup/pluginutils" "^3.1.0" + +"@rollup/plugin-commonjs@^21.0.1": + version "21.0.1" + resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-21.0.1.tgz#1e57c81ae1518e4df0954d681c642e7d94588fee" + integrity sha512-EA+g22lbNJ8p5kuZJUYyhhDK7WgJckW5g4pNN7n4mAFUM96VuwUnNT3xr2Db2iCZPI1pJPbGyfT5mS9T1dHfMg== + dependencies: + "@rollup/pluginutils" "^3.1.0" + commondir "^1.0.1" + estree-walker "^2.0.1" + glob "^7.1.6" + is-reference "^1.2.1" + magic-string "^0.25.7" + resolve "^1.17.0" + "@rollup/plugin-eslint@^8.0.1": version "8.0.1" resolved "https://registry.yarnpkg.com/@rollup/plugin-eslint/-/plugin-eslint-8.0.1.tgz#bf7462f96027613729b8a805caaa951dc23c333e" @@ -3640,6 +3661,18 @@ dependencies: "@rollup/pluginutils" "^3.0.8" +"@rollup/plugin-node-resolve@^13.1.3": + version "13.1.3" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.1.3.tgz#2ed277fb3ad98745424c1d2ba152484508a92d79" + integrity sha512-BdxNk+LtmElRo5d06MGY4zoepyrXX1tkzX2hrnPEZ53k78GuOMWLqmJDGIIOPwVRIFZrLQOo+Yr6KtCuLIA0AQ== + dependencies: + "@rollup/pluginutils" "^3.1.0" + "@types/resolve" "1.17.1" + builtin-modules "^3.1.0" + deepmerge "^4.2.2" + is-module "^1.0.0" + resolve "^1.19.0" + "@rollup/plugin-node-resolve@^7.1.1": version "7.1.3" resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz#80de384edfbd7bfc9101164910f86078151a3eca" @@ -4785,11 +4818,26 @@ dependencies: "@types/node" "*" +"@types/resolve@1.17.1": + version "1.17.1" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" + integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== + dependencies: + "@types/node" "*" + "@types/retry@*": version "0.12.1" resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.1.tgz#d8f1c0d0dc23afad6dc16a9e993a0865774b4065" integrity sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g== +"@types/rollup-plugin-peer-deps-external@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@types/rollup-plugin-peer-deps-external/-/rollup-plugin-peer-deps-external-2.2.1.tgz#7711fe77727c2ec920d3e096fa4e61d02734a23d" + integrity sha512-CUK4Mi3M3A/0coRUeo4McvUFOxR5H6UYd6Wt3D+K4c4fJupolMSoIxsZaBG1g/BJQOaujf78Pf7KhgfhrX1FZA== + dependencies: + "@types/node" "*" + rollup "^0.63.4" + "@types/scheduler@*": version "0.16.2" resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" @@ -7528,7 +7576,7 @@ browserslist@^3.2.6: caniuse-lite "^1.0.30000844" electron-to-chromium "^1.3.47" -browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.17.5, browserslist@^4.19.1, browserslist@^4.6.2, browserslist@^4.6.4: +browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.16.6, browserslist@^4.17.5, browserslist@^4.19.1, browserslist@^4.6.2, browserslist@^4.6.4: version "4.19.1" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.19.1.tgz#4ac0435b35ab655896c31d53018b6dd5e9e4c9a3" integrity sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A== @@ -8357,6 +8405,11 @@ color@^3.0.0: color-convert "^1.9.3" color-string "^1.6.0" +colord@^2.9.1: + version "2.9.2" + resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.2.tgz#25e2bacbbaa65991422c07ea209e2089428effb1" + integrity sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ== + colorette@^1.2.1, colorette@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" @@ -8498,6 +8551,13 @@ concat-stream@^1.5.0, concat-stream@^1.5.1: readable-stream "^2.2.2" typedarray "^0.0.6" +concat-with-sourcemaps@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz#d4ea93f05ae25790951b99e7b3b09e3908a4082e" + integrity sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg== + dependencies: + source-map "^0.6.1" + confusing-browser-globals@^1.0.10: version "1.0.10" resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz#30d1e7f3d1b882b25ec4933d1d1adac353d20a59" @@ -8836,6 +8896,13 @@ css-declaration-sorter@^4.0.1: postcss "^7.0.1" timsort "^0.3.0" +css-declaration-sorter@^6.0.3: + version "6.1.4" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.1.4.tgz#b9bfb4ed9a41f8dcca9bf7184d849ea94a8294b4" + integrity sha512-lpfkqS0fctcmZotJGhnxkIyJWvBXgpyi2wsFd4J8VB7wzyrT6Ch/3Q+FMNJpjK4gu1+GN5khOnpU2ZVKrLbhCw== + dependencies: + timsort "^0.3.0" + css-has-pseudo@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz#3c642ab34ca242c59c41a125df9105841f6966ee" @@ -9005,6 +9072,41 @@ cssnano-preset-default@^4.0.8: postcss-svgo "^4.0.3" postcss-unique-selectors "^4.0.1" +cssnano-preset-default@^5.1.11: + version "5.1.11" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.1.11.tgz#db10fb1ecee310e8285c5aca45bd8237be206828" + integrity sha512-ETet5hqHxmzQq2ynXMOQofKuLm7VOjMiOB7E2zdtm/hSeCKlD9fabzIUV4GoPcRyJRHi+4kGf0vsfGYbQ4nmPw== + dependencies: + css-declaration-sorter "^6.0.3" + cssnano-utils "^3.0.1" + postcss-calc "^8.2.0" + postcss-colormin "^5.2.4" + postcss-convert-values "^5.0.3" + postcss-discard-comments "^5.0.2" + postcss-discard-duplicates "^5.0.2" + postcss-discard-empty "^5.0.2" + postcss-discard-overridden "^5.0.3" + postcss-merge-longhand "^5.0.5" + postcss-merge-rules "^5.0.5" + postcss-minify-font-values "^5.0.3" + postcss-minify-gradients "^5.0.5" + postcss-minify-params "^5.0.4" + postcss-minify-selectors "^5.1.2" + postcss-normalize-charset "^5.0.2" + postcss-normalize-display-values "^5.0.2" + postcss-normalize-positions "^5.0.3" + postcss-normalize-repeat-style "^5.0.3" + postcss-normalize-string "^5.0.3" + postcss-normalize-timing-functions "^5.0.2" + postcss-normalize-unicode "^5.0.3" + postcss-normalize-url "^5.0.4" + postcss-normalize-whitespace "^5.0.3" + postcss-ordered-values "^5.0.4" + postcss-reduce-initial "^5.0.2" + postcss-reduce-transforms "^5.0.3" + postcss-svgo "^5.0.3" + postcss-unique-selectors "^5.0.3" + cssnano-util-get-arguments@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" @@ -9027,6 +9129,11 @@ cssnano-util-same-parent@^4.0.0: resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== +cssnano-utils@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-3.0.1.tgz#d3cc0a142d3d217f8736837ec0a2ccff6a89c6ea" + integrity sha512-VNCHL364lh++/ono+S3j9NlUK+d97KNkxI77NlqZU2W3xd2/qmyN61dsa47pTpb55zuU4G4lI7qFjAXZJH1OAQ== + cssnano@^4.1.10: version "4.1.11" resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.11.tgz#c7b5f5b81da269cb1fd982cb960c1200910c9a99" @@ -9037,6 +9144,15 @@ cssnano@^4.1.10: is-resolvable "^1.0.0" postcss "^7.0.0" +cssnano@^5.0.1: + version "5.0.16" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.0.16.tgz#4ee97d30411693f3de24cef70b36f7ae2a843e04" + integrity sha512-ryhRI9/B9VFCwPbb1z60LLK5/ldoExi7nwdnJzpkLZkm2/r7j2X3jfY+ZvDVJhC/0fPZlrAguYdHNFg0iglPKQ== + dependencies: + cssnano-preset-default "^5.1.11" + lilconfig "^2.0.3" + yaml "^1.10.2" + csso@^4.0.2, csso@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" @@ -10958,7 +11074,7 @@ eventemitter2@^6.4.3: resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.4.tgz#aa96e8275c4dbeb017a5d0e03780c65612a1202b" integrity sha512-HLU3NDY6wARrLCEwyGKRBvuWYyvW6mHYv72SJJAH3iJN3a6eVUvkjFkcxah1bcTgGVBBrFdIopBJPhCQFMLyXw== -eventemitter3@4.0.7, eventemitter3@^4.0.0: +eventemitter3@4.0.7, eventemitter3@^4.0.0, eventemitter3@^4.0.4: version "4.0.7" resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== @@ -11747,6 +11863,13 @@ fuzzaldrin@^2.1.0: resolved "https://registry.npmjs.org/fuzzaldrin/-/fuzzaldrin-2.1.0.tgz" integrity sha1-kCBMPi/appQbso0WZF1BgGOpDps= +generic-names@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/generic-names/-/generic-names-4.0.0.tgz#0bd8a2fd23fe8ea16cbd0a279acd69c06933d9a3" + integrity sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A== + dependencies: + loader-utils "^3.2.0" + gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -12490,6 +12613,11 @@ iconv-lite@0.6, iconv-lite@^0.6.2: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" +icss-replace-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" + integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0= + icss-utils@^4.0.0, icss-utils@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" @@ -12497,6 +12625,11 @@ icss-utils@^4.0.0, icss-utils@^4.1.1: dependencies: postcss "^7.0.14" +icss-utils@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" + integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== + idb@3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/idb/-/idb-3.0.2.tgz#c8e9122d5ddd40f13b60ae665e4862f8b13fa384" @@ -12571,6 +12704,13 @@ import-cwd@^2.0.0: dependencies: import-from "^2.1.0" +import-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-3.0.0.tgz#20845547718015126ea9b3676b7592fb8bd4cf92" + integrity sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg== + dependencies: + import-from "^3.0.0" + import-fresh@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" @@ -13153,6 +13293,13 @@ is-promise@^2.1.0: resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== +is-reference@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" + integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== + dependencies: + "@types/estree" "*" + is-regex@^1.0.4, is-regex@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" @@ -13833,7 +13980,7 @@ jest-worker@^24.9.0: merge-stream "^2.0.0" supports-color "^6.1.0" -jest-worker@^26.5.0, jest-worker@^26.6.2: +jest-worker@^26.2.1, jest-worker@^26.5.0, jest-worker@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== @@ -14351,6 +14498,11 @@ lie@~3.3.0: dependencies: immediate "~3.0.5" +lilconfig@^2.0.3, lilconfig@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.4.tgz#f4507d043d7058b380b6a8f5cb7bcd4b34cee082" + integrity sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA== + lines-and-columns@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" @@ -14469,6 +14621,11 @@ loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: emojis-list "^3.0.0" json5 "^1.0.1" +loader-utils@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-3.2.0.tgz#bcecc51a7898bee7473d4bc6b845b23af8304d4f" + integrity sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ== + locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" @@ -15502,6 +15659,11 @@ normalize-url@^4.1.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -15895,6 +16057,14 @@ p-map@^4.0.0: dependencies: aggregate-error "^3.0.0" +p-queue@^6.6.2: + version "6.6.2" + resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426" + integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== + dependencies: + eventemitter3 "^4.0.4" + p-timeout "^3.2.0" + p-retry@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" @@ -15902,6 +16072,13 @@ p-retry@^3.0.1: dependencies: retry "^0.12.0" +p-timeout@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" + integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== + dependencies: + p-finally "^1.0.0" + p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" @@ -16404,6 +16581,14 @@ postcss-calc@^7.0.1: postcss-selector-parser "^6.0.2" postcss-value-parser "^4.0.2" +postcss-calc@^8.2.0: + version "8.2.2" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-8.2.2.tgz#9706e7399e8ec8b61a47830dcf1f21391af23373" + integrity sha512-B5R0UeB4zLJvxNt1FVCaDZULdzsKLPc6FhjFJ+xwFiq7VG4i9cuaJLxVjNtExNK8ocm3n2o4unXXLiVX1SCqxA== + dependencies: + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.0.2" + postcss-color-functional-notation@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz#5efd37a88fbabeb00a2966d1e53d98ced93f74e0" @@ -16457,6 +16642,16 @@ postcss-colormin@^4.0.3: postcss "^7.0.0" postcss-value-parser "^3.0.0" +postcss-colormin@^5.2.4: + version "5.2.4" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.2.4.tgz#7726d3f3d24f111d39faff50a6500688225d5324" + integrity sha512-rYlC5015aNqVQt/B6Cy156g7sH5tRUJGmT9xeagYthtKehetbKx7jHxhyLpulP4bs4vbp8u/B2rac0J7S7qPQg== + dependencies: + browserslist "^4.16.6" + caniuse-api "^3.0.0" + colord "^2.9.1" + postcss-value-parser "^4.2.0" + postcss-convert-values@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" @@ -16465,6 +16660,13 @@ postcss-convert-values@^4.0.1: postcss "^7.0.0" postcss-value-parser "^3.0.0" +postcss-convert-values@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.0.3.tgz#492db08a28af84d57651f10edc8f6c8fb2f6df40" + integrity sha512-fVkjHm2T0PSMqXUCIhHNWVGjhB9mHEWX2GboVs7j3iCgr6FpIl9c/IdXy0PHWZSQ9LFTRgmj98amxJE6KOnlsA== + dependencies: + postcss-value-parser "^4.2.0" + postcss-custom-media@^7.0.8: version "7.0.8" resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz#fffd13ffeffad73621be5f387076a28b00294e0c" @@ -16503,6 +16705,11 @@ postcss-discard-comments@^4.0.2: dependencies: postcss "^7.0.0" +postcss-discard-comments@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.0.2.tgz#811ed34e2b6c40713daab0beb4d7a04125927dcd" + integrity sha512-6VQ3pYTsJHEsN2Bic88Aa7J/Brn4Bv8j/rqaFQZkH+pcVkKYwxCIvoMQkykEW7fBjmofdTnQgcivt5CCBJhtrg== + postcss-discard-duplicates@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" @@ -16510,6 +16717,11 @@ postcss-discard-duplicates@^4.0.2: dependencies: postcss "^7.0.0" +postcss-discard-duplicates@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.2.tgz#61076f3d256351bdaac8e20aade730fef0609f44" + integrity sha512-LKY81YjUjc78p6rbXIsnppsaFo8XzCoMZkXVILJU//sK0DgPkPSpuq/cZvHss3EtdKvWNYgWzQL+wiJFtEET4g== + postcss-discard-empty@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" @@ -16517,6 +16729,11 @@ postcss-discard-empty@^4.0.1: dependencies: postcss "^7.0.0" +postcss-discard-empty@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-5.0.2.tgz#0676a9bcfc44bb00d338352a45ab80845a31d8f0" + integrity sha512-SxBsbTjlsKUvZLL+dMrdWauuNZU8TBq5IOL/DHa6jBUSXFEwmDqeXRfTIK/FQpPTa8MJMxEHjSV3UbiuyLARPQ== + postcss-discard-overridden@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" @@ -16524,6 +16741,11 @@ postcss-discard-overridden@^4.0.1: dependencies: postcss "^7.0.0" +postcss-discard-overridden@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.0.3.tgz#004b9818cabb407e60616509267567150b327a3f" + integrity sha512-yRTXknIZA4k8Yo4FiF1xbsLj/VBxfXEWxJNIrtIy6HC9KQ4xJxcPtoaaskh6QptCGrrcGnhKsTsENTRPZOBu4g== + postcss-double-position-gradients@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz#fc927d52fddc896cb3a2812ebc5df147e110522e" @@ -16607,6 +16829,14 @@ postcss-load-config@^2.0.0: cosmiconfig "^5.0.0" import-cwd "^2.0.0" +postcss-load-config@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-3.1.1.tgz#2f53a17f2f543d9e63864460af42efdac0d41f87" + integrity sha512-c/9XYboIbSEUZpiD1UQD0IKiUe8n9WHYV7YFe7X7J+ZwCsEKkUJSFWjS9hBU1RR9THR7jMXst8sxiqP0jjo2mg== + dependencies: + lilconfig "^2.0.4" + yaml "^1.10.2" + postcss-loader@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d" @@ -16641,6 +16871,14 @@ postcss-merge-longhand@^4.0.11: postcss-value-parser "^3.0.0" stylehacks "^4.0.0" +postcss-merge-longhand@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.0.5.tgz#cbc217ca22fb5a3e6ee22a6a1aa6920ec1f3c628" + integrity sha512-R2BCPJJ/U2oh1uTWEYn9CcJ7MMcQ1iIbj9wfr2s/zHu5om5MP/ewKdaunpfJqR1WYzqCsgnXuRoVXPAzxdqy8g== + dependencies: + postcss-value-parser "^4.2.0" + stylehacks "^5.0.2" + postcss-merge-rules@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" @@ -16653,6 +16891,16 @@ postcss-merge-rules@^4.0.3: postcss-selector-parser "^3.0.0" vendors "^1.0.0" +postcss-merge-rules@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.0.5.tgz#2a18669ec214019884a60f0a0d356803a8138366" + integrity sha512-3Oa26/Pb9VOFVksJjFG45SNoe4nhGvJ2Uc6TlRimqF8uhfOCEhVCaJ3rvEat5UFOn2UZqTY5Da8dFgCh3Iq0Ug== + dependencies: + browserslist "^4.16.6" + caniuse-api "^3.0.0" + cssnano-utils "^3.0.1" + postcss-selector-parser "^6.0.5" + postcss-minify-font-values@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" @@ -16661,6 +16909,13 @@ postcss-minify-font-values@^4.0.2: postcss "^7.0.0" postcss-value-parser "^3.0.0" +postcss-minify-font-values@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-5.0.3.tgz#48c455c4cd980ecd07ac9bf3fc58e9d8a2ae4168" + integrity sha512-bC45rVzEwsLhv/cL1eCjoo2OOjbSk9I7HKFBYnBvtyuIZlf7uMipMATXtA0Fc3jwPo3wuPIW1jRJWKzflMh1sA== + dependencies: + postcss-value-parser "^4.2.0" + postcss-minify-gradients@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" @@ -16671,6 +16926,15 @@ postcss-minify-gradients@^4.0.2: postcss "^7.0.0" postcss-value-parser "^3.0.0" +postcss-minify-gradients@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-5.0.5.tgz#a5572b9c98ed52cbd7414db24b873f8b9e418290" + integrity sha512-/YjvXs8PepsoiZAIpjstOO4IHKwFAqYNqbA1yVdqklM84tbUUneh6omJxGlRlF3mi6K5Pa067Mg6IwqEnYC8Zg== + dependencies: + colord "^2.9.1" + cssnano-utils "^3.0.1" + postcss-value-parser "^4.2.0" + postcss-minify-params@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" @@ -16683,6 +16947,15 @@ postcss-minify-params@^4.0.2: postcss-value-parser "^3.0.0" uniqs "^2.0.0" +postcss-minify-params@^5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.0.4.tgz#230a4d04456609e614db1d48c2eebc21f6490a45" + integrity sha512-Z0vjod9lRZEmEPfEmA2sCfjbfEEFKefMD3RDIQSUfXK4LpCyWkX1CniUgyNvnjJFLDPSxtgKzozhHhPHKoeGkg== + dependencies: + browserslist "^4.16.6" + cssnano-utils "^3.0.1" + postcss-value-parser "^4.2.0" + postcss-minify-selectors@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" @@ -16693,6 +16966,13 @@ postcss-minify-selectors@^4.0.2: postcss "^7.0.0" postcss-selector-parser "^3.0.0" +postcss-minify-selectors@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-5.1.2.tgz#bc9698f713b9dab7f44f1ec30643fcbad9a043c0" + integrity sha512-gpn1nJDMCf3g32y/7kl+jsdamhiYT+/zmEt57RoT9GmzlixBNRPohI7k8UIHelLABhdLf3MSZhtM33xuH5eQOQ== + dependencies: + postcss-selector-parser "^6.0.5" + postcss-modules-extract-imports@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" @@ -16700,6 +16980,11 @@ postcss-modules-extract-imports@^2.0.0: dependencies: postcss "^7.0.5" +postcss-modules-extract-imports@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" + integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== + postcss-modules-local-by-default@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz#bb14e0cc78279d504dbdcbfd7e0ca28993ffbbb0" @@ -16710,6 +16995,15 @@ postcss-modules-local-by-default@^3.0.3: postcss-selector-parser "^6.0.2" postcss-value-parser "^4.1.0" +postcss-modules-local-by-default@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" + integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== + dependencies: + icss-utils "^5.0.0" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + postcss-modules-scope@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" @@ -16718,6 +17012,13 @@ postcss-modules-scope@^2.2.0: postcss "^7.0.6" postcss-selector-parser "^6.0.0" +postcss-modules-scope@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" + integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== + dependencies: + postcss-selector-parser "^6.0.4" + postcss-modules-values@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" @@ -16726,6 +17027,27 @@ postcss-modules-values@^3.0.0: icss-utils "^4.0.0" postcss "^7.0.6" +postcss-modules-values@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" + integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== + dependencies: + icss-utils "^5.0.0" + +postcss-modules@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/postcss-modules/-/postcss-modules-4.3.0.tgz#1cb32f16a8cfffe2b989598f8135eb6427106ec7" + integrity sha512-zoUttLDSsbWDinJM9jH37o7hulLRyEgH6fZm2PchxN7AZ8rkdWiALyNhnQ7+jg7cX9f10m6y5VhHsrjO0Mf/DA== + dependencies: + generic-names "^4.0.0" + icss-replace-symbols "^1.1.0" + lodash.camelcase "^4.3.0" + postcss-modules-extract-imports "^3.0.0" + postcss-modules-local-by-default "^4.0.0" + postcss-modules-scope "^3.0.0" + postcss-modules-values "^4.0.0" + string-hash "^1.1.1" + postcss-nesting@^7.0.0: version "7.0.1" resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-7.0.1.tgz#b50ad7b7f0173e5b5e3880c3501344703e04c052" @@ -16740,6 +17062,11 @@ postcss-normalize-charset@^4.0.1: dependencies: postcss "^7.0.0" +postcss-normalize-charset@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.0.2.tgz#eb6130c8a8e950ce25f9ea512de1d9d6a6f81439" + integrity sha512-fEMhYXzO8My+gC009qDc/3bgnFP8Fv1Ic8uw4ec4YTlhIOw63tGPk1YFd7fk9bZUf1DAbkhiL/QPWs9JLqdF2g== + postcss-normalize-display-values@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a" @@ -16749,6 +17076,13 @@ postcss-normalize-display-values@^4.0.2: postcss "^7.0.0" postcss-value-parser "^3.0.0" +postcss-normalize-display-values@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.2.tgz#8b5273c6c7d0a445e6ef226b8a5bb3204a55fb99" + integrity sha512-RxXoJPUR0shSjkMMzgEZDjGPrgXUVYyWA/YwQRicb48H15OClPuaDR7tYokLAlGZ2tCSENEN5WxjgxSD5m4cUw== + dependencies: + postcss-value-parser "^4.2.0" + postcss-normalize-positions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f" @@ -16759,6 +17093,13 @@ postcss-normalize-positions@^4.0.2: postcss "^7.0.0" postcss-value-parser "^3.0.0" +postcss-normalize-positions@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.0.3.tgz#b63fcc4ff5fbf65934fafaf83270b2da214711d1" + integrity sha512-U+rmhjrNBvIGYqr/1tD4wXPFFMKUbXsYXvlUCzLi0tOCUS6LoeEAnmVXXJY/MEB/1CKZZwBSs2tmzGawcygVBA== + dependencies: + postcss-value-parser "^4.2.0" + postcss-normalize-repeat-style@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c" @@ -16769,6 +17110,13 @@ postcss-normalize-repeat-style@^4.0.2: postcss "^7.0.0" postcss-value-parser "^3.0.0" +postcss-normalize-repeat-style@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.3.tgz#488c0ad8aac0fa4f66ef56cc8d604b3fd9bf705f" + integrity sha512-uk1+xYx0AMbA3nLSNhbDrqbf/rx+Iuq5tVad2VNyaxxJzx79oGieJ6D9F6AfOL2GtiIbP7vTYlpYHtG+ERFXTg== + dependencies: + postcss-value-parser "^4.2.0" + postcss-normalize-string@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" @@ -16778,6 +17126,13 @@ postcss-normalize-string@^4.0.2: postcss "^7.0.0" postcss-value-parser "^3.0.0" +postcss-normalize-string@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-5.0.3.tgz#49e0a1d58a119d5435ef21893ad03136a6e8f0e6" + integrity sha512-Mf2V4JbIDboNGQhW6xW0YREDiYXoX3WrD3EjKkjvnpAJ6W4qqjLnK/c9aioyVFaWWHVdP5zVRw/9DI5S3oLDFw== + dependencies: + postcss-value-parser "^4.2.0" + postcss-normalize-timing-functions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9" @@ -16787,6 +17142,13 @@ postcss-normalize-timing-functions@^4.0.2: postcss "^7.0.0" postcss-value-parser "^3.0.0" +postcss-normalize-timing-functions@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.2.tgz#db4f4f49721f47667afd1fdc5edb032f8d9cdb2e" + integrity sha512-Ao0PP6MoYsRU1LxeVUW740ioknvdIUmfr6uAA3xWlQJ9s69/Tupy8qwhuKG3xWfl+KvLMAP9p2WXF9cwuk/7Bg== + dependencies: + postcss-value-parser "^4.2.0" + postcss-normalize-unicode@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" @@ -16796,6 +17158,14 @@ postcss-normalize-unicode@^4.0.1: postcss "^7.0.0" postcss-value-parser "^3.0.0" +postcss-normalize-unicode@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.3.tgz#10f0d30093598a58c48a616491cc7fa53256dd43" + integrity sha512-uNC7BmS/7h6to2UWa4RFH8sOTzu2O9dVWPE/F9Vm9GdhONiD/c1kNaCLbmsFHlKWcEx7alNUChQ+jH/QAlqsQw== + dependencies: + browserslist "^4.16.6" + postcss-value-parser "^4.2.0" + postcss-normalize-url@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" @@ -16806,6 +17176,14 @@ postcss-normalize-url@^4.0.1: postcss "^7.0.0" postcss-value-parser "^3.0.0" +postcss-normalize-url@^5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-5.0.4.tgz#3b0322c425e31dd275174d0d5db0e466f50810fb" + integrity sha512-cNj3RzK2pgQQyNp7dzq0dqpUpQ/wYtdDZM3DepPmFjCmYIfceuD9VIAcOdvrNetjIU65g1B4uwdP/Krf6AFdXg== + dependencies: + normalize-url "^6.0.1" + postcss-value-parser "^4.2.0" + postcss-normalize-whitespace@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82" @@ -16814,6 +17192,13 @@ postcss-normalize-whitespace@^4.0.2: postcss "^7.0.0" postcss-value-parser "^3.0.0" +postcss-normalize-whitespace@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.3.tgz#fb6bcc9ff2f834448b802657c7acd0956f4591d1" + integrity sha512-333JWRnX655fSoUbufJ10HJop3c8mrpKkCCUnEmgz/Cb/QEtW+/TMZwDAUt4lnwqP6tCCk0x0b58jqvDgiQm/A== + dependencies: + postcss-value-parser "^4.2.0" + postcss-normalize@8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/postcss-normalize/-/postcss-normalize-8.0.1.tgz#90e80a7763d7fdf2da6f2f0f82be832ce4f66776" @@ -16834,6 +17219,14 @@ postcss-ordered-values@^4.1.2: postcss "^7.0.0" postcss-value-parser "^3.0.0" +postcss-ordered-values@^5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.0.4.tgz#f799dca87a7f17526d31a20085e61768d0b00534" + integrity sha512-taKtGDZtyYUMVYkg+MuJeBUiTF6cGHZmo/qcW7ibvW79UlyKuSHbo6dpCIiqI+j9oJsXWzP+ovIxoyLDOeQFdw== + dependencies: + cssnano-utils "^3.0.1" + postcss-value-parser "^4.2.0" + postcss-overflow-shorthand@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz#31ecf350e9c6f6ddc250a78f0c3e111f32dd4c30" @@ -16917,6 +17310,14 @@ postcss-reduce-initial@^4.0.3: has "^1.0.0" postcss "^7.0.0" +postcss-reduce-initial@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.0.2.tgz#fa424ce8aa88a89bc0b6d0f94871b24abe94c048" + integrity sha512-v/kbAAQ+S1V5v9TJvbGkV98V2ERPdU6XvMcKMjqAlYiJ2NtsHGlKYLPjWWcXlaTKNxooId7BGxeraK8qXvzKtw== + dependencies: + browserslist "^4.16.6" + caniuse-api "^3.0.0" + postcss-reduce-transforms@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" @@ -16927,6 +17328,13 @@ postcss-reduce-transforms@^4.0.2: postcss "^7.0.0" postcss-value-parser "^3.0.0" +postcss-reduce-transforms@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.3.tgz#df60fab34698a43073e8b87938c71df7a3b040ac" + integrity sha512-yDnTUab5i7auHiNwdcL1f+pBnqQFf+7eC4cbC7D8Lc1FkvNZhtpkdad+9U4wDdFb84haupMf0rA/Zc5LcTe/3A== + dependencies: + postcss-value-parser "^4.2.0" + postcss-replace-overflow-wrap@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz#61b360ffdaedca84c7c918d2b0f0d0ea559ab01c" @@ -16983,6 +17391,14 @@ postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: cssesc "^3.0.0" util-deprecate "^1.0.2" +postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5: + version "6.0.9" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz#ee71c3b9ff63d9cd130838876c13a2ec1a992b2f" + integrity sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + postcss-svgo@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.3.tgz#343a2cdbac9505d416243d496f724f38894c941e" @@ -16992,6 +17408,14 @@ postcss-svgo@^4.0.3: postcss-value-parser "^3.0.0" svgo "^1.0.0" +postcss-svgo@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.0.3.tgz#d945185756e5dfaae07f9edb0d3cae7ff79f9b30" + integrity sha512-41XZUA1wNDAZrQ3XgWREL/M2zSw8LJPvb5ZWivljBsUQAGoEKMYm6okHsTjJxKYI4M75RQEH4KYlEM52VwdXVA== + dependencies: + postcss-value-parser "^4.1.0" + svgo "^2.7.0" + postcss-unique-selectors@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" @@ -17001,6 +17425,13 @@ postcss-unique-selectors@^4.0.1: postcss "^7.0.0" uniqs "^2.0.0" +postcss-unique-selectors@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-5.0.3.tgz#07fd116a8fbd9202e7030f7c4952e7b52c26c63d" + integrity sha512-V5tX2hadSSn+miVCluuK1IDGy+7jAXSOfRZ2DQ+s/4uQZb/orDYBjH0CHgFrXsRw78p4QTuEFA9kI6C956UnHQ== + dependencies: + postcss-selector-parser "^6.0.5" + postcss-value-parser@^3.0.0: version "3.3.1" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" @@ -17011,6 +17442,11 @@ postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== +postcss-value-parser@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz#da8b472d901da1e205b47bdc98637b9e9e550e5f" @@ -17166,6 +17602,11 @@ promise-to-callback@^1.0.0: is-fn "^1.0.0" set-immediate-shim "^1.0.1" +promise.series@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/promise.series/-/promise.series-0.2.0.tgz#2cc7ebe959fc3a6619c04ab4dbdc9e452d864bbd" + integrity sha1-LMfr6Vn8OmYZwEq029yeRS2GS70= + promise@^7.1.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" @@ -18521,6 +18962,30 @@ rollup-plugin-dts@^4.1.0: optionalDependencies: "@babel/code-frame" "^7.16.0" +rollup-plugin-peer-deps-external@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/rollup-plugin-peer-deps-external/-/rollup-plugin-peer-deps-external-2.2.4.tgz#8a420bbfd6dccc30aeb68c9bf57011f2f109570d" + integrity sha512-AWdukIM1+k5JDdAqV/Cxd+nejvno2FVLVeZ74NKggm3Q5s9cbbcOgUPGdbxPi4BXu7xGaZ8HG12F+thImYu/0g== + +rollup-plugin-postcss@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/rollup-plugin-postcss/-/rollup-plugin-postcss-4.0.2.tgz#15e9462f39475059b368ce0e49c800fa4b1f7050" + integrity sha512-05EaY6zvZdmvPUDi3uCcAQoESDcYnv8ogJJQRp6V5kZ6J6P7uAVJlrTZcaaA20wTH527YTnKfkAoPxWI/jPp4w== + dependencies: + chalk "^4.1.0" + concat-with-sourcemaps "^1.1.0" + cssnano "^5.0.1" + import-cwd "^3.0.0" + p-queue "^6.6.2" + pify "^5.0.0" + postcss-load-config "^3.0.0" + postcss-modules "^4.0.0" + promise.series "^0.2.0" + resolve "^1.19.0" + rollup-pluginutils "^2.8.2" + safe-identifier "^0.4.2" + style-inject "^0.3.0" + rollup-plugin-scss@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/rollup-plugin-scss/-/rollup-plugin-scss-3.0.0.tgz#35ad0adc614217e0278e702d8a674820faa0929e" @@ -18539,6 +19004,16 @@ rollup-plugin-terser@^5.3.1: serialize-javascript "^4.0.0" terser "^4.6.2" +rollup-plugin-terser@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" + integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ== + dependencies: + "@babel/code-frame" "^7.10.4" + jest-worker "^26.2.1" + serialize-javascript "^4.0.0" + terser "^5.0.0" + rollup-plugin-typescript2@^0.31.1: version "0.31.1" resolved "https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.31.1.tgz#3b3a0e29b29b2ed8244b1a78fd8e2cac93ab79a4" @@ -18558,6 +19033,14 @@ rollup-pluginutils@^2.3.3, rollup-pluginutils@^2.8.1, rollup-pluginutils@^2.8.2: dependencies: estree-walker "^0.6.1" +rollup@^0.63.4: + version "0.63.5" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.63.5.tgz#5543eecac9a1b83b7e1be598b5be84c9c0a089db" + integrity sha512-dFf8LpUNzIj3oE0vCvobX6rqOzHzLBoblyFp+3znPbjiSmSvOoK2kMKx+Fv9jYduG1rvcCfCveSgEaQHjWRF6g== + dependencies: + "@types/estree" "0.0.39" + "@types/node" "*" + rollup@^1.31.1: version "1.32.1" resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.32.1.tgz#4480e52d9d9e2ae4b46ba0d9ddeaf3163940f9c4" @@ -18632,6 +19115,11 @@ safe-event-emitter@^1.0.1: dependencies: events "^3.0.0" +safe-identifier@^0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/safe-identifier/-/safe-identifier-0.4.2.tgz#cf6bfca31c2897c588092d1750d30ef501d59fcb" + integrity sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w== + safe-json-stringify@~1: version "1.2.0" resolved "https://registry.yarnpkg.com/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz#356e44bc98f1f93ce45df14bcd7c01cda86e0afd" @@ -19500,6 +19988,11 @@ string-env-interpolation@1.0.1, string-env-interpolation@^1.0.1: resolved "https://registry.yarnpkg.com/string-env-interpolation/-/string-env-interpolation-1.0.1.tgz#ad4397ae4ac53fe6c91d1402ad6f6a52862c7152" integrity sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg== +string-hash@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" + integrity sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs= + string-length@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" @@ -19695,6 +20188,11 @@ strip-json-comments@~2.0.1: resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= +style-inject@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/style-inject/-/style-inject-0.3.0.tgz#d21c477affec91811cc82355832a700d22bf8dd3" + integrity sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw== + style-loader@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.3.0.tgz#828b4a3b3b7e7aa5847ce7bae9e874512114249e" @@ -19747,6 +20245,14 @@ stylehacks@^4.0.0: postcss "^7.0.0" postcss-selector-parser "^3.0.0" +stylehacks@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.0.2.tgz#fa10e5181c6e8dc0bddb4a3fb372e9ac42bba2ad" + integrity sha512-114zeJdOpTrbQYRD4OU5UWJ99LKUaqCPJTU1HQ/n3q3BwmllFN8kHENaLnOeqVq6AhXrWfxHNZTl33iJ4oy3cQ== + dependencies: + browserslist "^4.16.6" + postcss-selector-parser "^6.0.4" + subscriptions-transport-ws@^0.9.18: version "0.9.19" resolved "https://registry.yarnpkg.com/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.19.tgz#10ca32f7e291d5ee8eb728b9c02e43c52606cdcf" @@ -19823,7 +20329,7 @@ svgo@^1.0.0, svgo@^1.2.2: unquote "~1.1.1" util.promisify "~1.0.0" -svgo@^2.5.0: +svgo@^2.5.0, svgo@^2.7.0: version "2.8.0" resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== @@ -19979,6 +20485,15 @@ terser@^4.1.2, terser@^4.6.2, terser@^4.6.3: source-map "~0.6.1" source-map-support "~0.5.12" +terser@^5.0.0: + version "5.10.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.10.0.tgz#b86390809c0389105eb0a0b62397563096ddafcc" + integrity sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA== + dependencies: + commander "^2.20.0" + source-map "~0.7.2" + source-map-support "~0.5.20" + terser@^5.3.4: version "5.9.0" resolved "https://registry.yarnpkg.com/terser/-/terser-5.9.0.tgz#47d6e629a522963240f2b55fcaa3c99083d2c351" @@ -21699,7 +22214,7 @@ yaml-ast-parser@^0.0.43: resolved "https://registry.yarnpkg.com/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz#e8a23e6fb4c38076ab92995c5dca33f3d3d7c9bb" integrity sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A== -yaml@^1.10.0, yaml@^1.7.2: +yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: version "1.10.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== From d30445be55cd8fd0c8b62c1d64030d70dc393ee6 Mon Sep 17 00:00:00 2001 From: David Wisner Date: Wed, 26 Jan 2022 20:52:26 +0800 Subject: [PATCH 02/15] second try --- .babelrc | 3 ++ .env | 2 +- .eslintrc.json | 2 +- dist2/snowflake.js | 40 ++++++----------- dist2/snowflake.js.map | 2 +- package.json | 1 + rollup.config.ts | 80 ++++++++++----------------------- src/hooks/useActiveWeb3React.ts | 8 ++-- yarn.lock | 7 +++ 9 files changed, 54 insertions(+), 91 deletions(-) create mode 100644 .babelrc diff --git a/.babelrc b/.babelrc new file mode 100644 index 00000000000..3bd30f55095 --- /dev/null +++ b/.babelrc @@ -0,0 +1,3 @@ +{ + // "presets": [["react-app", { "flow": false, "typescript": false, "absoluteRuntime": true }]] +} diff --git a/.env b/.env index 9285b9c4a23..6015177c84a 100644 --- a/.env +++ b/.env @@ -1 +1 @@ -REACT_APP_INFURA_KEY="4bf032f2d38a4ed6bb975b80d6340847" \ No newline at end of file +REACT_APP_INFURA_KEY="4bf032f2d38a4ed6bb975b80d6340847" diff --git a/.eslintrc.json b/.eslintrc.json index 5497c9c6d18..e216e683e08 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -44,7 +44,7 @@ "plugins": ["simple-import-sort", "unused-imports"], "rules": { "unused-imports/no-unused-imports": "error", - "simple-import-sort/imports": "error", + "simple-import-sort/imports": "off", "simple-import-sort/exports": "error", "@typescript-eslint/explicit-function-return-type": "off", "prettier/prettier": "error", diff --git a/dist2/snowflake.js b/dist2/snowflake.js index e373ad0d9ad..c79256bdd6d 100644 --- a/dist2/snowflake.js +++ b/dist2/snowflake.js @@ -6,10 +6,7 @@ var jsxRuntime = require('react/jsx-runtime'); var macro = require('@lingui/macro'); var v2Sdk = require('@uniswap/v2-sdk'); var v3Sdk = require('@uniswap/v3-sdk'); -var core$1 = require('@web3-react/core'); -var utils = require('jotai/utils'); -var core = require('widgets-web3-react/core'); -var empty = require('widgets-web3-react/empty'); +var core = require('@web3-react/core'); var sdkCore = require('@uniswap/sdk-core'); var JSBI = require('jsbi'); var reactFeather = require('react-feather'); @@ -21,8 +18,11 @@ var address = require('@ethersproject/address'); var constants = require('@ethersproject/constants'); var contracts = require('@ethersproject/contracts'); var jotai = require('jotai'); +var utils = require('jotai/utils'); var reduxMulticall = require('@uniswap/redux-multicall'); var redux = require('redux'); +var core$1 = require('widgets-web3-react/core'); +var empty = require('widgets-web3-react/empty'); var hash = require('@ethersproject/hash'); var CID = require('cids'); var multicodec = require('multicodec'); @@ -538,24 +538,6 @@ var CHAIN_INFO = (_b$6 = {}, _b$6); var templateObject_1$X, templateObject_2$E, templateObject_3$x, templateObject_4$n, templateObject_5$k, templateObject_6$e; -var EMPTY_CONNECTOR = core.initializeConnector(function () { return empty.EMPTY; }); -var urlAtom = utils.atomWithDefault(function () { return EMPTY_CONNECTOR; }); -var injectedAtom = utils.atomWithDefault(function () { return EMPTY_CONNECTOR; }); - -function useActiveWeb3ReactState() { - var injected = utils.useAtomValue(injectedAtom); - var url = utils.useAtomValue(urlAtom); - return injected[1].useIsActive() ? injected : url; -} -function useActiveWeb3ReactHooks() { - var _a = __read(useActiveWeb3ReactState(), 2), hooks = _a[1]; - return hooks; -} -function useActiveWeb3React$1() { - var _a = useActiveWeb3ReactHooks(), useProvider = _a.useProvider, useWeb3React = _a.useWeb3React; - return useWeb3React(useProvider()); -} - var NetworkContextName = 'NETWORK'; // 30 minutes, denominated in seconds var DEFAULT_DEADLINE_FROM_NOW = 60 * 30; @@ -582,11 +564,11 @@ new sdkCore.Percent(JSBI__default["default"].BigInt(200), BIPS_BASE); var ONE_HUNDRED_PERCENT = new sdkCore.Percent('1'); function useActiveWeb3React() { - if (process.env.REACT_APP_IS_WIDGET) { - return useActiveWeb3React$1(); - } - var interfaceContext = core$1.useWeb3React(); - var interfaceNetworkContext = core$1.useWeb3React(process.env.REACT_APP_IS_WIDGET ? undefined : NetworkContextName); + // if (false) { + // return useWidgetsWeb3React() + // } + var interfaceContext = core.useWeb3React(); + var interfaceNetworkContext = core.useWeb3React(NetworkContextName); if (interfaceContext.active) { return interfaceContext; } @@ -5635,6 +5617,10 @@ function useNativeCurrency() { }, [chainId]); } +var EMPTY_CONNECTOR = core$1.initializeConnector(function () { return empty.EMPTY; }); +utils.atomWithDefault(function () { return EMPTY_CONNECTOR; }); +utils.atomWithDefault(function () { return EMPTY_CONNECTOR; }); + var REGISTRAR_ABI = [ { constant: true, diff --git a/dist2/snowflake.js.map b/dist2/snowflake.js.map index 8536b435fb6..10de2655b69 100644 --- a/dist2/snowflake.js.map +++ b/dist2/snowflake.js.map @@ -1 +1 @@ -{"version":3,"file":"snowflake.js","sources":["../src/assets/images/ethereum-logo.png","../src/assets/svg/arbitrum_logo.svg","../src/assets/svg/optimistic_ethereum.svg","../src/assets/svg/polygon-matic-logo.svg","../src/assets/images/gas-icon.svg","../src/assets/svg/matic-token-icon.svg","../src/assets/svg/dot_line.svg","../src/assets/svg/auto_router.svg","../src/assets/svg/static_route.svg","../src/assets/images/dropdown.svg","../src/assets/svg/tokenlist.svg","../src/assets/svg/logo.svg","../src/assets/images/blue-loader.svg","../src/assets/images/metamask.png","../node_modules/fortmatic/lib/fortmatic.js"],"sourcesContent":["export default \"data:image/png;base64,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\"","export default \"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20viewBox%3D%220%200%20470.287%20514.251%22%20enable-background%3D%22new%200%200%20470.287%20514.251%22%20xml%3Aspace%3D%22preserve%22%3E%3Cg%20id%3D%22Background%22%3E%3C%2Fg%3E%3Cg%20id%3D%22Logos_and_symbols%22%3E%20%3Cg%20id%3D%22SYMBOL_VER_3%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_4_3_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_1_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_1_%22%3E%20%20%3Cg%20id%3D%22_x31_-3%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_14_%22%3E%20%20%20%3Cpath%20fill%3D%22%232D374B%22%20d%3D%22M291.134%2C237.469l35.654-60.5l96.103%2C149.684l0.046%2C28.727l-0.313-197.672%20%20%20%20c-0.228-4.832-2.794-9.252-6.887-11.859L242.715%2C46.324c-4.045-1.99-9.18-1.967-13.22%2C0.063c-0.546%2C0.272-1.06%2C0.57-1.548%2C0.895%20%20%20%20l-0.604%2C0.379L59.399%2C144.983l-0.651%2C0.296c-0.838%2C0.385-1.686%2C0.875-2.48%2C1.444c-3.185%2C2.283-5.299%2C5.66-5.983%2C9.448%20%20%20%20c-0.103%2C0.574-0.179%2C1.158-0.214%2C1.749l0.264%2C161.083l89.515-138.745c11.271-18.397%2C35.825-24.323%2C58.62-24.001l26.753%2C0.706%20%20%20%20L67.588%2C409.765l18.582%2C10.697L245.692%2C157.22l70.51-0.256L157.091%2C426.849l66.306%2C38.138l7.922%2C4.556%20%20%20%20c3.351%2C1.362%2C7.302%2C1.431%2C10.681%2C0.21l175.453-101.678l-33.544%2C19.438L291.134%2C237.469z%20M304.736%2C433.395l-66.969-105.108%20%20%20%20l40.881-69.371l87.952%2C138.628L304.736%2C433.395z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%2328A0F0%22%20points%3D%22237.768%2C328.286%20304.736%2C433.395%20366.601%2C397.543%20278.648%2C258.915%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2328A0F0%22%20d%3D%22M422.937%2C355.379l-0.046-28.727l-96.103-149.684l-35.654%2C60.5l92.774%2C150.043l33.544-19.438%20%20%20%20c3.29-2.673%2C5.281-6.594%2C5.49-10.825L422.937%2C355.379z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23FFFFFF%22%20d%3D%22M20.219%2C382.469l47.369%2C27.296l157.634-252.801l-26.753-0.706c-22.795-0.322-47.35%2C5.604-58.62%2C24.001%20%20%20%20L50.334%2C319.004l-30.115%2C46.271V382.469z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%23FFFFFF%22%20points%3D%22316.202%2C156.964%20245.692%2C157.22%2086.17%2C420.462%20141.928%2C452.565%20157.091%2C426.849%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2396BEDC%22%20d%3D%22M452.65%2C156.601c-0.59-14.746-8.574-28.245-21.08-36.104L256.28%2C19.692%20%20%20%20c-12.371-6.229-27.825-6.237-40.218-0.004c-1.465%2C0.739-170.465%2C98.752-170.465%2C98.752c-2.339%2C1.122-4.592%2C2.458-6.711%2C3.975%20%20%20%20c-11.164%2C8.001-17.969%2C20.435-18.668%2C34.095v208.765l30.115-46.271L50.07%2C157.921c0.035-0.589%2C0.109-1.169%2C0.214-1.741%20%20%20%20c0.681-3.79%2C2.797-7.171%2C5.983-9.456c0.795-0.569%2C172.682-100.064%2C173.228-100.337c4.04-2.029%2C9.175-2.053%2C13.22-0.063%20%20%20%20l173.022%2C99.523c4.093%2C2.607%2C6.659%2C7.027%2C6.887%2C11.859v199.542c-0.209%2C4.231-1.882%2C8.152-5.172%2C10.825l-33.544%2C19.438%20%20%20%20l-17.308%2C10.031l-61.864%2C35.852l-62.737%2C36.357c-3.379%2C1.221-7.33%2C1.152-10.681-0.21l-74.228-42.693l-15.163%2C25.717%20%20%20%20l66.706%2C38.406c2.206%2C1.255%2C4.171%2C2.367%2C5.784%2C3.272c2.497%2C1.4%2C4.199%2C2.337%2C4.8%2C2.629c4.741%2C2.303%2C11.563%2C3.643%2C17.71%2C3.643%20%20%20%20c5.636%2C0%2C11.132-1.035%2C16.332-3.072l182.225-105.531c10.459-8.104%2C16.612-20.325%2C17.166-33.564V156.601z%22%2F%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_13_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_6_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_3_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_15_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_3_%22%3E%20%20%20%3Cg%20id%3D%22_x33__7_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic%22%3E%20%20%20%3Cg%20id%3D%22_x33__3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_10_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x34__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_2_%22%3E%20%20%20%3Cg%20id%3D%22_x33__6_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_2_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_11_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_5_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_12_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_1_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_9_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_2_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol_1_%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_1_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_7_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_8_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Monochromatic_1_%22%3E%20%20%3Cg%20id%3D%22_x33__4_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%22170%22%20height%3D%22168%22%20viewBox%3D%220%200%20170%20168%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20clip-path%3D%22url%28%23clip0%29%22%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF505F%22%2F%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF0320%22%2F%3E%3Cpath%20d%3D%22M85.05%200C132.022%200%20170.1%2037.8949%20170.1%2084.6407C170.1%20131.386%200%20131.386%200%2084.6407C0%2037.8949%2038.0782%200%2085.05%200Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.665%2064.0394L112.444%2012.3742L89.0263%2078.9477L144.665%2064.0394Z%22%20fill%3D%22%23FF4E65%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.777%2064.215L112.444%2012.3742L165.349%2058.4347L143.777%2064.215Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.551%2063.613L142.479%20124.467L88.912%2078.5213L144.551%2063.613Z%22%20fill%3D%22%23D0001A%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.663%2063.7886L142.479%20124.467L165.235%2058.0083L143.663%2063.7886Z%22%20fill%3D%22%23FF697B%22%2F%3E%3C%2Fg%3E%3Cdefs%3E%3CclipPath%20id%3D%22clip0%22%3E%3Crect%20width%3D%22170%22%20height%3D%22168%22%20fill%3D%22white%22%2F%3E%3C%2FclipPath%3E%3C%2Fdefs%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20viewBox%3D%220%200%2038.4%2033.5%22%20style%3D%22enable-background%3Anew%200%200%2038.4%2033.5%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cstyle%20type%3D%22text%2Fcss%22%3E%20.st0%7Bfill%3A%238247E5%3B%7D%3C%2Fstyle%3E%3Cg%3E%20%3Cpath%20class%3D%22st0%22%20d%3D%22M29%2C10.2c-0.7-0.4-1.6-0.4-2.4%2C0L21%2C13.5l-3.8%2C2.1l-5.5%2C3.3c-0.7%2C0.4-1.6%2C0.4-2.4%2C0L5%2C16.3%20%20c-0.7-0.4-1.2-1.2-1.2-2.1v-5c0-0.8%2C0.4-1.6%2C1.2-2.1l4.3-2.5c0.7-0.4%2C1.6-0.4%2C2.4%2C0L16%2C7.2c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v3.3l3.8-2.2V7%20%20c0-0.8-0.4-1.6-1.2-2.1l-8-4.7c-0.7-0.4-1.6-0.4-2.4%2C0L1.2%2C5C0.4%2C5.4%2C0%2C6.2%2C0%2C7v9.4c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l5.5-3.2l3.8-2.2l5.5-3.2c0.7-0.4%2C1.6-0.4%2C2.4%2C0l4.3%2C2.5c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v5c0%2C0.8-0.4%2C1.6-1.2%2C2.1%20%20L29%2C28.8c-0.7%2C0.4-1.6%2C0.4-2.4%2C0l-4.3-2.5c-0.7-0.4-1.2-1.2-1.2-2.1V21l-3.8%2C2.2v3.3c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l8.1-4.7c0.7-0.4%2C1.2-1.2%2C1.2-2.1V17c0-0.8-0.4-1.6-1.2-2.1L29%2C10.2z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M10.0047%209.26921H10.2714C11.0078%209.26921%2011.6047%209.86617%2011.6047%2010.6025V12.1359C11.6047%2012.7987%2012.142%2013.3359%2012.8047%2013.3359C13.4675%2013.3359%2014.0047%2012.7995%2014.0047%2012.1367V5.22059C14.0047%204.86697%2013.7758%204.56227%2013.5258%204.31223L10.6714%201.33594M4.00472%202.00254H8.00472C8.7411%202.00254%209.33805%202.59949%209.33805%203.33587V14.0015H2.67139V3.33587C2.67139%202.59949%203.26834%202.00254%204.00472%202.00254ZM14.0047%205.33587C14.0047%206.07225%2013.4078%206.66921%2012.6714%206.66921C11.935%206.66921%2011.3381%206.07225%2011.3381%205.33587C11.3381%204.59949%2011.935%204.00254%2012.6714%204.00254C13.4078%204.00254%2014.0047%204.59949%2014.0047%205.33587Z%22%20stroke%3D%22white%22%2F%3E%3Cline%20x1%3D%224%22%20y1%3D%229.99414%22%20x2%3D%228%22%20y2%3D%229.99414%22%20stroke%3D%22white%22%2F%3E%3Cline%20x1%3D%224%22%20y1%3D%2211.9941%22%20x2%3D%228%22%20y2%3D%2211.9941%22%20stroke%3D%22white%22%2F%3E%3Cpath%20d%3D%22M4%208.16113H8%22%20stroke%3D%22white%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%221024%22%20height%3D%221024%22%20viewBox%3D%220%200%201024%201024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Ccircle%20cx%3D%22512%22%20cy%3D%22512%22%20r%3D%22512%22%20fill%3D%22%238247E5%22%2F%3E%3Cpath%20d%3D%22M681.469%20402.456C669.189%20395.312%20653.224%20395.312%20639.716%20402.456L543.928%20457.228L478.842%20492.949L383.055%20547.721C370.774%20554.865%20354.81%20554.865%20341.301%20547.721L265.162%20504.856C252.882%20497.712%20244.286%20484.614%20244.286%20470.325V385.786C244.286%20371.498%20251.654%20358.4%20265.162%20351.256L340.073%20309.581C352.353%20302.437%20368.318%20302.437%20381.827%20309.581L456.737%20351.256C469.018%20358.4%20477.614%20371.498%20477.614%20385.786V440.558L542.7%20403.646V348.874C542.7%20334.586%20535.332%20321.488%20521.824%20314.344L383.055%20235.758C370.774%20228.614%20354.81%20228.614%20341.301%20235.758L200.076%20314.344C186.567%20321.488%20179.199%20334.586%20179.199%20348.874V507.237C179.199%20521.525%20186.567%20534.623%20200.076%20541.767L341.301%20620.353C353.582%20627.498%20369.546%20627.498%20383.055%20620.353L478.842%20566.772L543.928%20529.86L639.716%20476.279C651.996%20469.135%20667.961%20469.135%20681.469%20476.279L756.38%20517.953C768.66%20525.098%20777.257%20538.195%20777.257%20552.484V637.023C777.257%20651.312%20769.888%20664.409%20756.38%20671.553L681.469%20714.419C669.189%20721.563%20653.224%20721.563%20639.716%20714.419L564.805%20672.744C552.525%20665.6%20543.928%20652.502%20543.928%20638.214V583.442L478.842%20620.353V675.125C478.842%20689.414%20486.21%20702.512%20499.719%20709.656L640.944%20788.242C653.224%20795.386%20669.189%20795.386%20682.697%20788.242L823.922%20709.656C836.203%20702.512%20844.799%20689.414%20844.799%20675.125V516.763C844.799%20502.474%20837.431%20489.377%20823.922%20482.232L681.469%20402.456Z%22%20fill%3D%22white%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%22100%25%22%20height%3D%2235%22%20%20viewBox%3D%22800%200%20300%20200%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%20%20%20%20%3Cline%20x1%3D%220%22%20x2%3D%222000%22%20y1%3D%22100%22%20y2%3D%22100%22%20stroke%3D%22currentColor%22%20stroke-width%3D%2220%22%20stroke-linecap%3D%22round%22%20stroke-dasharray%3D%221%2C%2045%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2223%22%20height%3D%2220%22%20viewBox%3D%220%200%2023%2020%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cdefs%3E%20%3ClinearGradient%20id%3D%22gradient1%22%20x1%3D%220%22%20y1%3D%220%22%20x2%3D%221%22%20y2%3D%220%22%20gradientTransform%3D%22rotate%2895%29%22%3E%20%20%20%20%3Cstop%20id%3D%22stop1%22%20offset%3D%220%22%20stop-color%3D%22%232274E2%22%2F%3E%20%20%20%20%3Cstop%20id%3D%22stop1%22%20offset%3D%220.5%22%20stop-color%3D%22%232274E2%22%2F%3E%20%20%20%20%3Cstop%20id%3D%22stop2%22%20offset%3D%221%22%20stop-color%3D%22%233FB672%22%20%2F%3E%20%20%3C%2FlinearGradient%3E%20%20%3C%2Fdefs%3E%3Cpath%20d%3D%22M16%2016C10%2016%209%2010%205%2010M16%2016C16%2017.6569%2017.3431%2019%2019%2019C20.6569%2019%2022%2017.6569%2022%2016C22%2014.3431%2020.6569%2013%2019%2013C17.3431%2013%2016%2014.3431%2016%2016ZM5%2010C9%2010%2010%204%2016%204M5%2010H1.5M16%204C16%205.65685%2017.3431%207%2019%207C20.6569%207%2022%205.65685%2022%204C22%202.34315%2020.6569%201%2019%201C17.3431%201%2016%202.34315%2016%204Z%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20stroke%3D%22url%28%23gradient1%29%22%20%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2022%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M19%2018C19%2018.5523%2018.5523%2019%2018%2019V21C19.6569%2021%2021%2019.6569%2021%2018H19ZM18%2019C17.4477%2019%2017%2018.5523%2017%2018H15C15%2019.6569%2016.3431%2021%2018%2021V19ZM17%2018C17%2017.4477%2017.4477%2017%2018%2017V15C16.3431%2015%2015%2016.3431%2015%2018H17ZM18%2017C18.5523%2017%2019%2017.4477%2019%2018H21C21%2016.3431%2019.6569%2015%2018%2015V17ZM8%207H16V5H8V7ZM16%2011H8V13H16V11ZM8%2019H16V17H8V19ZM4%2015C4%2017.2091%205.79086%2019%208%2019V17C6.89543%2017%206%2016.1046%206%2015H4ZM8%2011C5.79086%2011%204%2012.7909%204%2015H6C6%2013.8954%206.89543%2013%208%2013V11ZM18%209C18%2010.1046%2017.1046%2011%2016%2011V13C18.2091%2013%2020%2011.2091%2020%209H18ZM16%207C17.1046%207%2018%207.89543%2018%209H20C20%206.79086%2018.2091%205%2016%205V7ZM7%206C7%206.55228%206.55228%207%206%207V9C7.65685%209%209%207.65685%209%206H7ZM6%207C5.44772%207%205%206.55228%205%206H3C3%207.65685%204.34315%209%206%209V7ZM5%206C5%205.44772%205.44772%205%206%205V3C4.34315%203%203%204.34315%203%206H5ZM6%205C6.55228%205%207%205.44772%207%206H9C9%204.34315%207.65685%203%206%203V5Z%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%227%22%20viewBox%3D%220%200%2012%207%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%20%20%20%20%3Cpath%20d%3D%22M0.97168%201L6.20532%206L11.439%201%22%20stroke%3D%22%23AEAEAE%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%22225%22%20height%3D%22225%22%20viewBox%3D%220%200%20225%20225%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M74.8125%20190.529C65.7561%20190.513%2055.5298%20183.748%2051.9715%20175.42L19.9417%20100.456C16.3834%2092.1277%2020.8404%2085.39%2029.8968%2085.4068L111.417%2085.5579C120.473%2085.5747%20130.699%2092.3395%20134.258%20100.668L166.288%20175.632C169.846%20183.96%20165.389%20190.697%20156.332%20190.681L74.8125%20190.529Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint0_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint1_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint2_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint3_radial%29%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M92.958%20165.95C82.7695%20165.931%2071.265%20158.321%2067.2619%20148.952L26.2489%2052.9632C22.2458%2043.5941%2027.26%2036.0143%2037.4485%2036.0332L141.832%2036.2266C152.02%2036.2455%20163.525%2043.8559%20167.528%2053.225L208.541%20149.214C212.544%20158.583%20207.53%20166.163%20197.341%20166.144L92.958%20165.95ZM71.3614%20148.959C74.475%20156.246%2083.4229%20162.166%2091.3473%20162.18L195.73%20162.374C203.655%20162.388%20207.555%20156.493%20204.441%20149.206L163.428%2053.2174C160.315%2045.9304%20151.367%2040.0111%20143.442%2039.9964L39.0592%2039.803C31.1349%2039.7883%2027.2349%2045.6837%2030.3485%2052.9708L71.3614%20148.959Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M68.565%2053.3425C81.1781%2053.3659%2095.4205%2062.7875%20100.376%2074.3862C105.332%2085.985%2099.1246%2095.3687%2086.5115%2095.3454C73.8984%2095.322%2059.6559%2085.9004%2054.7001%2074.3016C49.7443%2062.7028%2055.9518%2053.3191%2068.565%2053.3425Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M90.6891%20104.981C103.302%20105.004%20117.545%20114.425%20122.5%20126.024C127.456%20137.623%20121.249%20147.007%20108.636%20146.983C96.0225%20146.96%2081.7801%20137.538%2076.8243%20125.94C71.8685%20114.341%2078.076%20104.957%2090.6891%20104.981Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M147.538%20105.142C160.151%20105.166%20174.394%20114.587%20179.349%20126.186C184.305%20137.785%20178.098%20147.168%20165.485%20147.145C152.871%20147.122%20138.629%20137.7%20133.673%20126.101C128.717%20114.503%20134.925%20105.119%20147.538%20105.142Z%22%20fill%3D%22%23131313%22%2F%3E%3Cdefs%3E%3CradialGradient%20id%3D%22paint0_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%28134.41%2068.3006%29%20rotate%28-33.9533%29%20scale%2890.6795%2083.3208%29%22%3E%3Cstop%20offset%3D%220.661458%22%20stop-color%3D%22%23C4FCF8%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint1_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%2842.7873%20129.218%29%20rotate%28-24.1606%29%20scale%28213.359%20196.045%29%22%3E%3Cstop%20stop-color%3D%22%23FF0099%22%20stop-opacity%3D%220.9%22%2F%3E%3Cstop%20offset%3D%220.770833%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint2_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%28176.854%20148.655%29%20rotate%28-53.4908%29%20scale%28107.342%2098.6309%29%22%3E%3Cstop%20stop-color%3D%22%23FFEC43%22%2F%3E%3Cstop%20offset%3D%220.805707%22%20stop-color%3D%22%23FFF6A8%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint3_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%2857.5443%2053.4752%29%20rotate%2820.3896%29%20scale%28137.027%20125.907%29%22%3E%3Cstop%20offset%3D%220.125%22%20stop-color%3D%22%235886FE%22%20stop-opacity%3D%220.46%22%2F%3E%3Cstop%20offset%3D%220.673044%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3C%2Fdefs%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2214%22%20height%3D%2215%22%20viewBox%3D%220%200%2014%2015%22%20fill%3D%22black%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20style%3D%22mix-blend-mode%3Adarken%22%3E%3Cpath%20d%3D%22M4.15217%201.55141C3.96412%201.52242%203.95619%201.51902%204.04468%201.5055C4.21427%201.47958%204.61472%201.51491%204.89067%201.58012C5.53489%201.73232%206.12109%202.12221%206.74683%202.81466L6.91307%202.99862L7.15088%202.96062C8.15274%202.8006%209.17194%202.92778%2010.0244%203.31918C10.2589%203.42686%2010.6287%203.64121%2010.6749%203.69629C10.6896%203.71384%2010.7166%203.82684%2010.7349%203.94742C10.7982%204.36458%2010.7665%204.68434%2010.6382%204.92317C10.5683%205.05313%2010.5644%205.09432%2010.6114%205.20554C10.6489%205.2943%2010.7534%205.35999%2010.8569%205.35985C11.0687%205.35956%2011.2968%205.0192%2011.4024%204.54561L11.4444%204.3575L11.5275%204.45109C11.9835%204.96459%2012.3417%205.66488%2012.4032%206.16335L12.4192%206.29332L12.3426%206.17517C12.2107%205.97186%2012.0781%205.83346%2011.9084%205.72183C11.6024%205.52062%2011.2789%205.45215%2010.4222%205.40727C9.64839%205.36675%209.21045%205.30106%208.77621%205.16032C8.03738%204.9209%207.66493%204.60204%206.78729%203.4576C6.39748%202.94928%206.15654%202.66804%205.91687%202.44155C5.37228%201.92691%204.83716%201.65701%204.15217%201.55141Z%22%2F%3E%3Cpath%20d%3D%22M10.8494%202.68637C10.8689%202.34575%2010.9153%202.12108%2011.0088%201.9159C11.0458%201.83469%2011.0804%201.76822%2011.0858%201.76822C11.0911%201.76822%2011.075%201.82816%2011.05%201.90142C10.9821%202.10054%2010.9709%202.3729%2011.0177%202.68978C11.0771%203.09184%2011.1109%203.14985%2011.5385%203.58416C11.739%203.78788%2011.9723%204.0448%2012.0568%204.15511L12.2106%204.35568L12.0568%204.21234C11.8688%204.03705%2011.4364%203.6952%2011.3409%203.64633C11.2768%203.61356%2011.2673%203.61413%2011.2278%203.65321C11.1914%203.68922%2011.1837%203.74333%2011.1787%203.99915C11.1708%204.39786%2011.1161%204.65377%2010.9842%204.90965C10.9128%205.04805%2010.9015%205.01851%2010.9661%204.8623C11.0143%204.74566%2011.0192%204.69439%2011.0189%204.30842C11.0181%203.53291%2010.9255%203.34647%2010.3823%203.02709C10.2447%202.94618%2010.0179%202.8295%209.87839%202.76778C9.73887%202.70606%209.62805%202.6523%209.63208%202.64828C9.64746%202.63307%2010.1772%202.78675%2010.3905%202.86828C10.7077%202.98954%2010.76%203.00526%2010.7985%202.99063C10.8244%202.98082%2010.8369%202.90608%2010.8494%202.68637Z%22%2F%3E%3Cpath%20d%3D%22M4.51745%204.01304C4.13569%203.49066%203.89948%202.68973%203.95062%202.091L3.96643%201.90572L4.05333%201.92148C4.21652%201.95106%204.49789%202.05515%204.62964%202.13469C4.9912%202.35293%205.14773%202.64027%205.30697%203.37811C5.35362%203.59423%205.41482%203.8388%205.44298%203.9216C5.48831%204.05487%205.65962%204.36617%205.7989%204.56834C5.89922%204.71395%205.83258%204.78295%205.61082%204.76305C5.27215%204.73267%204.8134%204.41799%204.51745%204.01304Z%22%2F%3E%3Cpath%20d%3D%22M10.3863%207.90088C8.60224%207.18693%207.97389%206.56721%207.97389%205.52157C7.97389%205.36769%207.97922%205.24179%207.98571%205.24179C7.99221%205.24179%208.06124%205.29257%208.1391%205.35465C8.50088%205.64305%208.906%205.76623%2010.0275%205.92885C10.6875%206.02455%2011.0589%206.10185%2011.4015%206.21477C12.4904%206.57371%2013.1641%207.30212%2013.3248%208.29426C13.3715%208.58255%2013.3441%209.12317%2013.2684%209.4081C13.2087%209.63315%2013.0263%2010.0388%2012.9779%2010.0544C12.9645%2010.0587%2012.9514%2010.0076%2012.9479%209.93809C12.9296%209.56554%2012.7402%209.20285%2012.4221%208.93116C12.0604%208.62227%2011.5745%208.37633%2010.3863%207.90088Z%22%2F%3E%3Cpath%20d%3D%22M9.13385%208.19748C9.11149%208.06527%209.07272%207.89643%209.04769%207.82228L9.00217%207.68748L9.08672%207.7818C9.20374%207.91233%209.2962%208.07937%209.37457%208.30185C9.43438%208.47165%209.44111%208.52215%209.44066%208.79807C9.4402%209.06896%209.43273%209.12575%209.3775%209.27858C9.29042%209.51959%209.18233%209.69048%209.00097%209.87391C8.67507%2010.2036%208.25607%2010.3861%207.65143%2010.4618C7.54633%2010.4749%207.24%2010.4971%206.97069%2010.511C6.292%2010.5461%205.84531%2010.6186%205.44393%2010.7587C5.38623%2010.7788%205.3347%2010.7911%205.32947%2010.7859C5.31323%2010.7698%205.58651%2010.6079%205.81223%2010.4998C6.1305%2010.3474%206.44733%2010.2643%207.15719%2010.1468C7.50785%2010.0887%207.86998%2010.0183%207.96194%209.99029C8.83033%209.72566%209.27671%209.04276%209.13385%208.19748Z%22%2F%3E%3Cpath%20d%3D%22M9.95169%209.64109C9.71465%209.13463%209.66022%208.64564%209.79009%208.18961C9.80399%208.14088%209.82632%208.101%209.83976%208.101C9.85319%208.101%209.90913%208.13105%209.96404%208.16777C10.0733%208.24086%2010.2924%208.36395%2010.876%208.68023C11.6043%209.0749%2012.0196%209.3805%2012.302%209.72965C12.5493%2010.0354%2012.7023%2010.3837%2012.776%2010.8084C12.8177%2011.0489%2012.7932%2011.6277%2012.7311%2011.8699C12.5353%2012.6337%2012.0802%2013.2336%2011.4311%2013.5837C11.336%2013.635%2011.2506%2013.6771%2011.2414%2013.6773C11.2321%2013.6775%2011.2668%2013.5899%2011.3184%2013.4827C11.5367%2013.029%2011.5616%2012.5877%2011.3965%2012.0965C11.2954%2011.7957%2011.0893%2011.4287%2010.6732%2010.8084C10.1893%2010.0873%2010.0707%209.89539%209.95169%209.64109Z%22%2F%3E%3Cpath%20d%3D%22M3.25046%2012.3737C3.91252%2011.8181%204.73629%2011.4234%205.48666%2011.3022C5.81005%2011.25%206.34877%2011.2707%206.64823%2011.3469C7.12824%2011.469%207.55763%2011.7425%207.78094%2012.0683C7.99918%2012.3867%208.09281%2012.6642%208.19029%2013.2816C8.22875%2013.5252%208.27057%2013.7697%208.28323%2013.8251C8.35644%2014.1451%208.4989%2014.4008%208.67544%2014.5293C8.95583%2014.7333%209.43865%2014.7459%209.91362%2014.5618C9.99423%2014.5305%2010.0642%2014.5089%2010.0691%2014.5138C10.0864%2014.5308%209.84719%2014.6899%209.67847%2014.7737C9.45143%2014.8864%209.2709%2014.93%209.03102%2014.93C8.59601%2014.93%208.23486%2014.7101%207.9335%2014.2616C7.87419%2014.1733%207.7409%2013.909%207.63729%2013.6741C7.3191%2012.9528%207.16199%2012.7331%206.79255%2012.4926C6.47104%2012.2834%206.05641%2012.2459%205.74449%2012.3979C5.33475%2012.5976%205.22043%2013.118%205.51389%2013.4478C5.63053%2013.5789%205.84803%2013.6919%206.02588%2013.7139C6.35861%2013.7551%206.64455%2013.5035%206.64455%2013.1696C6.64455%2012.9528%206.56071%2012.8291%206.34966%2012.7344C6.0614%2012.6051%205.75156%2012.7562%205.75304%2013.0254C5.75368%2013.1402%205.80396%2013.2122%205.91971%2013.2643C5.99397%2013.2977%205.99569%2013.3003%205.93514%2013.2878C5.67066%2013.2333%205.6087%2012.9164%205.82135%2012.706C6.07667%2012.4535%206.60461%2012.5649%206.78591%2012.9097C6.86208%2013.0545%206.87092%2013.3429%206.80451%2013.517C6.6559%2013.9068%206.22256%2014.1117%205.78297%2014.0002C5.48368%2013.9242%205.36181%2013.842%205.00097%2013.4726C4.37395%2012.8306%204.13053%2012.7062%203.22657%2012.566L3.05335%2012.5391L3.25046%2012.3737Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M0.308383%200.883984C2.40235%203.40996%203.84457%204.45213%204.00484%204.67231C4.13717%204.85412%204.08737%205.01757%203.86067%205.14567C3.7346%205.21689%203.47541%205.28905%203.34564%205.28905C3.19887%205.28905%203.14847%205.23278%203.14847%205.23278C3.06337%205.15255%203.01544%205.16658%202.5784%204.39555C1.97166%203.45981%201.46389%202.68357%201.45004%202.67057C1.41801%202.64052%201.41856%202.64153%202.51654%204.59413C2.69394%205.0011%202.55182%205.15049%202.55182%205.20845C2.55182%205.32636%202.51946%205.38834%202.37311%205.55059C2.12914%205.8211%202.02008%206.12505%201.94135%206.7541C1.8531%207.45926%201.60492%207.95737%200.917156%208.80989C0.514562%209.30893%200.448686%209.4004%200.3471%209.60153C0.219144%209.85482%200.183961%209.99669%200.169701%2010.3165C0.154629%2010.6547%200.183983%2010.8732%200.287934%2011.1965C0.378939%2011.4796%200.473932%2011.6665%200.716778%2012.0403C0.926351%2012.3629%201.04702%2012.6027%201.04702%2012.6965C1.04702%2012.7711%201.06136%2012.7712%201.38611%2012.6983C2.16328%2012.5239%202.79434%2012.2171%203.14925%2011.8411C3.36891%2011.6084%203.42048%2011.4799%203.42215%2011.1611C3.42325%2010.9525%203.41587%2010.9088%203.35914%2010.7888C3.2668%2010.5935%203.09869%2010.4311%202.72817%2010.1794C2.2427%209.84953%202.03534%209.58398%201.97807%209.21878C1.93108%208.91913%201.98559%208.70771%202.25416%208.14825C2.53214%207.56916%202.60103%207.32239%202.64763%206.73869C2.67773%206.36158%202.71941%206.21286%202.82842%206.09348C2.94212%205.969%203.04447%205.92684%203.32584%205.88863C3.78457%205.82635%204.07667%205.70839%204.31677%205.48849C4.52505%205.29772%204.61221%205.11391%204.62558%204.8372L4.63574%204.62747L4.51934%204.49259C4.09783%204.00411%200.0261003%200.5%200.000160437%200.5C-0.00538105%200.5%200.133325%200.672804%200.308383%200.883984ZM1.28364%2010.6992C1.37894%2010.5314%201.3283%2010.3158%201.16889%2010.2104C1.01827%2010.1109%200.78428%2010.1578%200.78428%2010.2875C0.78428%2010.3271%200.806303%2010.3559%200.855937%2010.3813C0.939514%2010.424%200.945581%2010.4721%200.879823%2010.5703C0.81323%2010.6698%200.818604%2010.7573%200.894991%2010.8167C1.0181%2010.9125%201.19237%2010.8598%201.28364%2010.6992Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M4.92523%205.99865C4.70988%206.06439%204.50054%206.29124%204.43574%206.5291C4.39621%206.67421%204.41864%206.92875%204.47785%207.00736C4.57351%207.13433%204.66602%207.16778%204.91651%207.16603C5.40693%207.16263%205.83327%206.95358%205.88284%206.69224C5.92347%206.47801%205.73622%206.18112%205.4783%206.05078C5.34521%205.98355%205.06217%205.95688%204.92523%205.99865ZM5.49853%206.44422C5.57416%206.33741%205.54107%206.22198%205.41245%206.14391C5.1675%205.99525%204.79708%206.11827%204.79708%206.34826C4.79708%206.46274%204.99025%206.58765%205.16731%206.58765C5.28516%206.58765%205.44644%206.5178%205.49853%206.44422Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2294%22%20height%3D%2294%22%20viewBox%3D%220%200%2094%2094%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%20%20%3Cpath%20d%3D%22M92%2047C92%2022.1472%2071.8528%202%2047%202C22.1472%202%202%2022.1472%202%2047C2%2071.8528%2022.1472%2092%2047%2092%22%20stroke%3D%22%232172E5%22%20stroke-width%3D%223%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E\"","export default \"f89237c6bc3f84db.png\"","module.exports=function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,\"a\",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p=\"\",r(r.s=3)}([function(e,t){e.exports=function(e){return e&&e.__esModule?e:{default:e}}},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}},function(e,t,r){\"use strict\";function n(){return Math.floor(9e4*Math.random())+1e4}Object.defineProperty(t,\"__esModule\",{value:!0}),t.sendAsyncWrapper=function(e,t){var r=this;return new Promise(function(o,a){r.sendAsync({jsonrpc:\"2.0\",id:n(),method:e,params:t||[]},function(e,t){e?a(e):o(t.result)})})},t.sendFortmaticAsyncWrapper=function(e){var t=this;return new Promise(function(r,n){t.getProvider().sendFortmaticAsync(e,function(e,t){e?n(e):r(t?t.result:{})})})},t.randomId=n,t.findExistingResponse=function(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},t=new v(m);return t.params=[e],i.sendFortmaticAsyncWrapper.call(g,t)}};var v=function e(t,r){(0,o.default)(this,e),this.id=(0,i.randomId)(),this.method=t,this.params=r?[r]:[{}]}},function(e,t,r){\"use strict\";var n=r(0);Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var o=n(r(6)),a=n(r(9)),i=n(r(1)),s=n(r(10)),c=r(11),u=n(r(12)),l=r(2),f=function(){function e(t,r){if((0,i.default)(this,e),this.fortmaticClient=t,this.requests={},this.queue=[],this.account=null,this.network=null,this.isFortmatic=!0,this.overlayReady=!1,this.isLoggedIn=!1,this.postMessages={FORTMATIC_HANDLE_BATCH_REQUEST:\"FORTMATIC_HANDLE_BATCH_REQUEST\",FORTMATIC_HANDLE_REQUEST:\"FORTMATIC_HANDLE_REQUEST\",FORTMATIC_HANDLE_FORTMATIC_REQUEST:\"FORTMATIC_HANDLE_FORTMATIC_REQUEST\",FORTMATIC_HANDLE_RESPONSE:\"FORTMATIC_HANDLE_RESPONSE\",FORTMATIC_OVERLAY_READY:\"FORTMATIC_OVERLAY_READY\",FORTMATIC_SHOW_OVERLAY:\"FORTMATIC_SHOW_OVERLAY\",FORTMATIC_HIDE_OVERLAY:\"FORTMATIC_HIDE_OVERLAY\",FORTMATIC_USER_DENIED:\"FORTMATIC_USER_DENIED\",FORTMATIC_USER_LOGOUT:\"FORTMATIC_USER_LOGOUT\",FORTMATIC_UNAUTHORIZED_API_KEY:\"FORTMATIC_UNAUTHORIZED_API_KEY\"},!r.API_KEY)throw new Error(\"Please provide a Fortmatic API key that you acquired from the developer dashboard.\");this.options={API_KEY:r.API_KEY,ETH_NETWORK:r.ETH_NETWORK,DOMAIN_ORIGIN:window.location?window.location.origin:\"\",version:c.version},this.queryParams=btoa(JSON.stringify(this.options)),this.constructPostMessage(),this.overlay=this.createOverlay(),this.listenMessage()}return(0,s.default)(e,[{key:\"constructPostMessage\",value:function(){var e=this;Object.keys(this.postMessages).map(function(t){e.postMessages[t]+=\"-\".concat(e.queryParams)})}},{key:\"createOverlay\",value:function(){var e=this;return new Promise(function(t,r){var n=function(){if(function(){var t=!0,r=!1,n=void 0;try{for(var o,a=document.getElementsByClassName(\"fortmatic-iframe\")[Symbol.iterator]();!(t=(o=a.next()).done);t=!0)if(o.value.src.includes(e.queryParams))return!1}catch(e){r=!0,n=e}finally{try{t||null==a.return||a.return()}finally{if(r)throw n}}return!0}()){var r=document.createElement(\"style\");r.innerHTML=u.default.css,r.type=\"text/css\",document.head.appendChild(r);var n=document.createElement(\"iframe\");n.className=\"fortmatic-iframe\",n.src=\"\".concat(e.fortmaticClient,\"/send?params=\").concat(e.queryParams),document.body.appendChild(n);var o=document.createElement(\"img\");o.src=\"https://static.fortmatic.com/assets/trans.gif\",document.body.appendChild(o),t({iframe:n})}else console.error(\"Fortmatic: Duplicate instances found.\")};[\"loaded\",\"interactive\",\"complete\"].indexOf(document.readyState)>-1?n():window.addEventListener(\"load\",n.bind(e),!1)})}},{key:\"showOverlay\",value:function(){var e=(0,a.default)(o.default.mark(function e(){return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.overlay;case 2:e.sent.iframe.style.display=\"block\";case 4:case\"end\":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:\"hideOverlay\",value:function(){var e=(0,a.default)(o.default.mark(function e(){return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.overlay;case 2:e.sent.iframe.style.display=\"none\";case 4:case\"end\":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:\"sendAsync\",value:function(e,t){e.length>0?this.enqueue({payload:{id:(0,l.randomId)(),batch:e.map(function(e){return e.id=(0,l.randomId)(),e}),method:\"eth_batchRequest\"},cb:t}):this.enqueue({payload:e,cb:t})}},{key:\"sendFortmaticAsync\",value:function(e,t){this.enqueue({payload:e,cb:t,isNative:!0})}},{key:\"send\",value:function(e,t){if(\"string\"==typeof e)return l.sendAsyncWrapper.call(this,e,t);if(!t){console.warn(\"Non-async web3 methods will be deprecated in web3 > 1.0, and are not supported by the Fortmatic provider. An async method to be used instead.\"),this.sendAsync(e,function(){});var r={};switch(e.method){case\"eth_accounts\":r=this.account?[this.account]:[];break;case\"eth_coinbase\":r=this.account;break;case\"net_version\":r=this.network||(this.options.API_KEY.startsWith(\"pk_live\")?1:4);break;case\"eth_uninstallFilter\":r=!0;break;default:r={}}return{id:e.id,jsonrpc:e.jsonrpc,result:r}}this.sendAsync(e,t)}},{key:\"enqueue\",value:function(e){this.queue.push(e),this.overlayReady&&this.dequeue()}},{key:\"dequeue\",value:function(){var e=(0,a.default)(o.default.mark(function e(){var t,r,n,a=this;return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(0!==this.queue.length){e.next=2;break}return e.abrupt(\"return\");case 2:if(!(t=this.queue.shift())){e.next=11;break}return r=t.payload,n=t.cb,r.id=(0,l.randomId)(),e.next=9,this.postMessage(t.isNative?this.postMessages.FORTMATIC_HANDLE_FORTMATIC_REQUEST:this.postMessages.FORTMATIC_HANDLE_REQUEST,t.payload);case 9:r.batch&&r.batch.length>0?(r.batch.forEach(function(e){a.requests[e.id]={parentId:r.id,payload:e,cb:function(e,t){var n=a.requests[r.id].batchResponse;if(e&&e.response&&!(0,l.findExistingResponse)(n,e.response.id))throw n.push({jsonrpc:\"2.0\",id:e.response.id,error:{code:e.response.code,message:e.response.message}}),a.requests[r.id].cb(null,n),e.response;if(t&&t.result&&!(0,l.findExistingResponse)(n,t.id))return n.push(t);throw new Error(\"Fortmatic: unexpected callback behavior\")}}}),this.requests[r.id]={payload:r,cb:n,batchResponse:[]}):this.requests[r.id]={payload:r,cb:n},this.dequeue();case 11:case\"end\":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:\"postMessage\",value:function(){var e=(0,a.default)(o.default.mark(function e(t,r){var n;return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.overlay;case 2:if(!(n=e.sent).iframe.contentWindow){e.next=7;break}n.iframe.contentWindow.postMessage({msgType:t,payload:r},\"*\"),e.next=8;break;case 7:throw new Error(\"Fortmatic: Modal is not ready.\");case 8:case\"end\":return e.stop()}},e,this)}));return function(t,r){return e.apply(this,arguments)}}()},{key:\"enable\",value:function(){return l.sendAsyncWrapper.call(this,\"eth_accounts\")}},{key:\"listenMessage\",value:function(){var e=this;window.addEventListener(\"message\",function(t){if(t.origin===e.fortmaticClient){var r=t.data.response?t.data.response.id:null;switch(t.data.msgType){case e.postMessages.FORTMATIC_OVERLAY_READY:e.overlayReady=!0,e.dequeue();break;case e.postMessages.FORTMATIC_HANDLE_RESPONSE:try{e.requests[r].cb(null,t.data.response);var n=e.requests[r].parentId;n&&e.requests[n].payload.batch.length===e.requests[n].batchResponse.length&&e.requests[n].cb(null,e.requests[n].batchResponse),\"eth_accounts\"===e.requests[r].payload.method?e.account=t.data.response.result[0]:\"eth_coinbase\"===e.requests[r].payload.method?e.account=t.data.response.result:\"net_version\"===e.requests[r].payload.method&&(e.network=t.data.response.result)}catch(e){}e.isLoggedIn=!0,e.dequeue();break;case e.postMessages.FORTMATIC_HIDE_OVERLAY:e.hideOverlay();break;case e.postMessages.FORTMATIC_SHOW_OVERLAY:e.showOverlay();break;case e.postMessages.FORTMATIC_USER_LOGOUT:e.account=null,e.network=null,e.isLoggedIn=!1;break;case e.postMessages.FORTMATIC_UNAUTHORIZED_API_KEY:throw e.overlayReady=!1,new Error(\"Given API key is not authorized to access the resource.\");case e.postMessages.FORTMATIC_USER_DENIED:if(r){var o=t.data.response&&t.data.response.message?t.data.response.message:\"Fortmatic: Modal was closed without executing action!\",a=t.data.response&&t.data.response.code?t.data.response.code:1;e.requests[r].cb({message:o,code:a,response:t.data.response})}else e.queue.forEach(function(e){return e.cb({message:\"Fortmatic: Modal was closed without executing action!\",code:1})});e.dequeue()}}})}}]),e}();t.default=f},function(e,t,r){e.exports=r(7)},function(e,t,r){var n=function(){return this||\"object\"==typeof self&&self}()||Function(\"return this\")(),o=n.regeneratorRuntime&&Object.getOwnPropertyNames(n).indexOf(\"regeneratorRuntime\")>=0,a=o&&n.regeneratorRuntime;if(n.regeneratorRuntime=void 0,e.exports=r(8),o)n.regeneratorRuntime=a;else try{delete n.regeneratorRuntime}catch(e){n.regeneratorRuntime=void 0}},function(e,t){!function(t){\"use strict\";var r,n=Object.prototype,o=n.hasOwnProperty,a=\"function\"==typeof Symbol?Symbol:{},i=a.iterator||\"@@iterator\",s=a.asyncIterator||\"@@asyncIterator\",c=a.toStringTag||\"@@toStringTag\",u=\"object\"==typeof e,l=t.regeneratorRuntime;if(l)u&&(e.exports=l);else{(l=t.regeneratorRuntime=u?e.exports:{}).wrap=_;var f=\"suspendedStart\",d=\"suspendedYield\",h=\"executing\",p=\"completed\",m={},y={};y[i]=function(){return this};var v=Object.getPrototypeOf,g=v&&v(v(L([])));g&&g!==n&&o.call(g,i)&&(y=g);var b=A.prototype=w.prototype=Object.create(y);T.prototype=b.constructor=A,A.constructor=T,A[c]=T.displayName=\"GeneratorFunction\",l.isGeneratorFunction=function(e){var t=\"function\"==typeof e&&e.constructor;return!!t&&(t===T||\"GeneratorFunction\"===(t.displayName||t.name))},l.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,A):(e.__proto__=A,c in e||(e[c]=\"GeneratorFunction\")),e.prototype=Object.create(b),e},l.awrap=function(e){return{__await:e}},O(R.prototype),R.prototype[s]=function(){return this},l.AsyncIterator=R,l.async=function(e,t,r,n){var o=new R(_(e,t,r,n));return l.isGeneratorFunction(t)?o:o.next().then(function(e){return e.done?e.value:o.next()})},O(b),b[c]=\"Generator\",b[i]=function(){return this},b.toString=function(){return\"[object Generator]\"},l.keys=function(e){var t=[];for(var r in e)t.push(r);return t.reverse(),function r(){for(;t.length;){var n=t.pop();if(n in e)return r.value=n,r.done=!1,r}return r.done=!0,r}},l.values=L,F.prototype={constructor:F,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=r,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=r,this.tryEntries.forEach(M),!e)for(var t in this)\"t\"===t.charAt(0)&&o.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=r)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if(\"throw\"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function n(n,o){return s.type=\"throw\",s.arg=e,t.next=n,o&&(t.method=\"next\",t.arg=r),!!o}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],s=i.completion;if(\"root\"===i.tryLoc)return n(\"end\");if(i.tryLoc<=this.prev){var c=o.call(i,\"catchLoc\"),u=o.call(i,\"finallyLoc\");if(c&&u){if(this.prev=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&o.call(n,\"finallyLoc\")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),M(r),m}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if(\"throw\"===n.type){var o=n.arg;M(r)}return o}}throw new Error(\"illegal catch attempt\")},delegateYield:function(e,t,n){return this.delegate={iterator:L(e),resultName:t,nextLoc:n},\"next\"===this.method&&(this.arg=r),m}}}function _(e,t,r,n){var o=t&&t.prototype instanceof w?t:w,a=Object.create(o.prototype),i=new F(n||[]);return a._invoke=function(e,t,r){var n=f;return function(o,a){if(n===h)throw new Error(\"Generator is already running\");if(n===p){if(\"throw\"===o)throw a;return k()}for(r.method=o,r.arg=a;;){var i=r.delegate;if(i){var s=I(i,r);if(s){if(s===m)continue;return s}}if(\"next\"===r.method)r.sent=r._sent=r.arg;else if(\"throw\"===r.method){if(n===f)throw n=p,r.arg;r.dispatchException(r.arg)}else\"return\"===r.method&&r.abrupt(\"return\",r.arg);n=h;var c=E(e,t,r);if(\"normal\"===c.type){if(n=r.done?p:d,c.arg===m)continue;return{value:c.arg,done:r.done}}\"throw\"===c.type&&(n=p,r.method=\"throw\",r.arg=c.arg)}}}(e,r,i),a}function E(e,t,r){try{return{type:\"normal\",arg:e.call(t,r)}}catch(e){return{type:\"throw\",arg:e}}}function w(){}function T(){}function A(){}function O(e){[\"next\",\"throw\",\"return\"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function R(e){var t;this._invoke=function(r,n){function a(){return new Promise(function(t,a){!function t(r,n,a,i){var s=E(e[r],e,n);if(\"throw\"!==s.type){var c=s.arg,u=c.value;return u&&\"object\"==typeof u&&o.call(u,\"__await\")?Promise.resolve(u.__await).then(function(e){t(\"next\",e,a,i)},function(e){t(\"throw\",e,a,i)}):Promise.resolve(u).then(function(e){c.value=e,a(c)},function(e){return t(\"throw\",e,a,i)})}i(s.arg)}(r,n,t,a)})}return t=t?t.then(a,a):a()}}function I(e,t){var n=e.iterator[t.method];if(n===r){if(t.delegate=null,\"throw\"===t.method){if(e.iterator.return&&(t.method=\"return\",t.arg=r,I(e,t),\"throw\"===t.method))return m;t.method=\"throw\",t.arg=new TypeError(\"The iterator does not provide a 'throw' method\")}return m}var o=E(n,e.iterator,t.arg);if(\"throw\"===o.type)return t.method=\"throw\",t.arg=o.arg,t.delegate=null,m;var a=o.arg;return a?a.done?(t[e.resultName]=a.value,t.next=e.nextLoc,\"return\"!==t.method&&(t.method=\"next\",t.arg=r),t.delegate=null,m):a:(t.method=\"throw\",t.arg=new TypeError(\"iterator result is not an object\"),t.delegate=null,m)}function x(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function M(e){var t=e.completion||{};t.type=\"normal\",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:\"root\"}],e.forEach(x,this),this.reset(!0)}function L(e){if(e){var t=e[i];if(t)return t.call(e);if(\"function\"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n (https://fortmatic.com/)\",license:\"MIT\",repository:{type:\"git\",url:\"https://github.com/fortmatic/fortmatic-js\"},keywords:[\"Auth\",\"Login\",\"Web3\",\"Crypto\",\"Ethereum\",\"MetaMask\",\"Wallet\",\"Blockchain\",\"Dapp\"],homepage:\"https://www.fortmatic.com\",ava:{require:[\"@babel/register\"],files:[\"test/**/*.spec.js\"],babel:{testOptions:{presets:[\"@babel/env\"],plugins:[\"@babel/plugin-proposal-function-bind\",\"@babel/plugin-transform-runtime\"]}},verbose:!0},nyc:{all:!1,\"check-coverage\":!0,\"per-file\":!0,lines:80,statements:80,functions:80,branches:80,include:[\"src/**/*.js\"],exclude:[\"*/style.js\"],require:[],reporter:[\"html\",\"lcov\"]},dependencies:{\"@babel/runtime\":\"7.3.4\"},devDependencies:{\"@babel/core\":\"7.3.4\",\"@babel/plugin-proposal-function-bind\":\"7.2.0\",\"@babel/plugin-transform-modules-commonjs\":\"7.2.0\",\"@babel/plugin-transform-runtime\":\"7.3.4\",\"@babel/preset-env\":\"7.3.4\",\"@babel/register\":\"7.0.0\",ava:\"2.2.0\",\"babel-eslint\":\"10.0.1\",\"babel-loader\":\"8.0.5\",eslint:\"5.9.0\",lodash:\"4.17.11\",nyc:\"13.1.0\",sinon:\"7.1.1\",webpack:\"4.26.1\",\"webpack-cli\":\"3.1.2\"}}},function(e,t,r){\"use strict\";t.css=\"\\n .fortmatic-iframe {\\n display: none;\\n position: fixed;\\n top: 0;\\n right: 0;\\n width: 100%;\\n height: 100%;\\n border: none;\\n border-radius: 0;\\n z-index: 2147483647;\\n }\\n\"}]);"],"names":["_path","_line","_extends","React"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mBAAe;;AC+Lf,sBAAe,0kPAA0kP;;ACvIzlP,sBAAe,0sDAA0sD;;AC7BztD,uBAAe,k3CAAk3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACwFD,oBAAe,0tLAA0tL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9DzuL,uBAAe,qmTAAqmT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpBpnT,eAAe,mcAAmc;;ACvBld,mBAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICAf,SAAc,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,OAAO,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAc,SAAS,CAAC,EAAE,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAc,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,IAAG,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,oFAAoF,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAG,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAC,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAc,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAG,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,8BAA8B,CAAC,gCAAgC,CAAC,wBAAwB,CAAC,0BAA0B,CAAC,kCAAkC,CAAC,oCAAoC,CAAC,yBAAyB,CAAC,2BAA2B,CAAC,uBAAuB,CAAC,yBAAyB,CAAC,sBAAsB,CAAC,wBAAwB,CAAC,sBAAsB,CAAC,wBAAwB,CAAC,qBAAqB,CAAC,uBAAuB,CAAC,qBAAqB,CAAC,uBAAuB,CAAC,8BAA8B,CAAC,gCAAgC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,oFAAoF,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,aAAa,GAAE,CAAC,OAAM,IAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,sBAAsB,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,OAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,GAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,+CAA+C,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,CAAC,KAAK,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,oBAAoB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,+IAA+I,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,IAAI,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,MAAM,IAAI,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,CAAC,GAAE,CAAC,OAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,GAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,kCAAkC,CAAC,IAAI,CAAC,YAAY,CAAC,wBAAwB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAG,CAAC,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAG,CAAC,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,YAAY,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,YAAY,CAAC,sBAAsB,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,YAAY,CAAC,sBAAsB,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,YAAY,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,uDAAuD,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,uDAAuD,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAE,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,OAAO,IAAI,EAAE,QAAQ,EAAE,OAAO,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,EAAE,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC,mBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,EAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAc,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU,EAAE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,OAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,mBAAmB,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,OAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAM,oBAAoB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,OAAM,OAAO,GAAG,CAAC,CAAC,IAAI,EAAE,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,EAAC,CAAC,KAAI,QAAQ,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,SAAS,OAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,gDAAgD,EAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,kCAAkC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,EAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,OAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,IAAI,EAAE,QAAQ,EAAE,OAAO,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAK,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,0BAA0B,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,gCAAgC,CAAC,WAAW,CAAC,mFAAmF,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC,MAAM,CAAC,yDAAyD,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,sCAAsC,CAAC,iCAAiC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,eAAe,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,sCAAsC,CAAC,OAAO,CAAC,0CAA0C,CAAC,OAAO,CAAC,iCAAiC,CAAC,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAc,CAAC,CAAC,GAAG,CAAC,gNAA+M,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"} \ No newline at end of file +{"version":3,"file":"snowflake.js","sources":["../src/assets/images/ethereum-logo.png","../src/assets/svg/arbitrum_logo.svg","../src/assets/svg/optimistic_ethereum.svg","../src/assets/svg/polygon-matic-logo.svg","../src/assets/images/gas-icon.svg","../src/assets/svg/matic-token-icon.svg","../src/assets/svg/dot_line.svg","../src/assets/svg/auto_router.svg","../src/assets/svg/static_route.svg","../src/assets/images/dropdown.svg","../src/assets/svg/tokenlist.svg","../src/assets/svg/logo.svg","../src/assets/images/blue-loader.svg","../src/assets/images/metamask.png","../node_modules/fortmatic/lib/fortmatic.js"],"sourcesContent":["export default \"data:image/png;base64,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\"","export default \"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20viewBox%3D%220%200%20470.287%20514.251%22%20enable-background%3D%22new%200%200%20470.287%20514.251%22%20xml%3Aspace%3D%22preserve%22%3E%3Cg%20id%3D%22Background%22%3E%3C%2Fg%3E%3Cg%20id%3D%22Logos_and_symbols%22%3E%20%3Cg%20id%3D%22SYMBOL_VER_3%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_4_3_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_1_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_1_%22%3E%20%20%3Cg%20id%3D%22_x31_-3%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_14_%22%3E%20%20%20%3Cpath%20fill%3D%22%232D374B%22%20d%3D%22M291.134%2C237.469l35.654-60.5l96.103%2C149.684l0.046%2C28.727l-0.313-197.672%20%20%20%20c-0.228-4.832-2.794-9.252-6.887-11.859L242.715%2C46.324c-4.045-1.99-9.18-1.967-13.22%2C0.063c-0.546%2C0.272-1.06%2C0.57-1.548%2C0.895%20%20%20%20l-0.604%2C0.379L59.399%2C144.983l-0.651%2C0.296c-0.838%2C0.385-1.686%2C0.875-2.48%2C1.444c-3.185%2C2.283-5.299%2C5.66-5.983%2C9.448%20%20%20%20c-0.103%2C0.574-0.179%2C1.158-0.214%2C1.749l0.264%2C161.083l89.515-138.745c11.271-18.397%2C35.825-24.323%2C58.62-24.001l26.753%2C0.706%20%20%20%20L67.588%2C409.765l18.582%2C10.697L245.692%2C157.22l70.51-0.256L157.091%2C426.849l66.306%2C38.138l7.922%2C4.556%20%20%20%20c3.351%2C1.362%2C7.302%2C1.431%2C10.681%2C0.21l175.453-101.678l-33.544%2C19.438L291.134%2C237.469z%20M304.736%2C433.395l-66.969-105.108%20%20%20%20l40.881-69.371l87.952%2C138.628L304.736%2C433.395z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%2328A0F0%22%20points%3D%22237.768%2C328.286%20304.736%2C433.395%20366.601%2C397.543%20278.648%2C258.915%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2328A0F0%22%20d%3D%22M422.937%2C355.379l-0.046-28.727l-96.103-149.684l-35.654%2C60.5l92.774%2C150.043l33.544-19.438%20%20%20%20c3.29-2.673%2C5.281-6.594%2C5.49-10.825L422.937%2C355.379z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23FFFFFF%22%20d%3D%22M20.219%2C382.469l47.369%2C27.296l157.634-252.801l-26.753-0.706c-22.795-0.322-47.35%2C5.604-58.62%2C24.001%20%20%20%20L50.334%2C319.004l-30.115%2C46.271V382.469z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%23FFFFFF%22%20points%3D%22316.202%2C156.964%20245.692%2C157.22%2086.17%2C420.462%20141.928%2C452.565%20157.091%2C426.849%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2396BEDC%22%20d%3D%22M452.65%2C156.601c-0.59-14.746-8.574-28.245-21.08-36.104L256.28%2C19.692%20%20%20%20c-12.371-6.229-27.825-6.237-40.218-0.004c-1.465%2C0.739-170.465%2C98.752-170.465%2C98.752c-2.339%2C1.122-4.592%2C2.458-6.711%2C3.975%20%20%20%20c-11.164%2C8.001-17.969%2C20.435-18.668%2C34.095v208.765l30.115-46.271L50.07%2C157.921c0.035-0.589%2C0.109-1.169%2C0.214-1.741%20%20%20%20c0.681-3.79%2C2.797-7.171%2C5.983-9.456c0.795-0.569%2C172.682-100.064%2C173.228-100.337c4.04-2.029%2C9.175-2.053%2C13.22-0.063%20%20%20%20l173.022%2C99.523c4.093%2C2.607%2C6.659%2C7.027%2C6.887%2C11.859v199.542c-0.209%2C4.231-1.882%2C8.152-5.172%2C10.825l-33.544%2C19.438%20%20%20%20l-17.308%2C10.031l-61.864%2C35.852l-62.737%2C36.357c-3.379%2C1.221-7.33%2C1.152-10.681-0.21l-74.228-42.693l-15.163%2C25.717%20%20%20%20l66.706%2C38.406c2.206%2C1.255%2C4.171%2C2.367%2C5.784%2C3.272c2.497%2C1.4%2C4.199%2C2.337%2C4.8%2C2.629c4.741%2C2.303%2C11.563%2C3.643%2C17.71%2C3.643%20%20%20%20c5.636%2C0%2C11.132-1.035%2C16.332-3.072l182.225-105.531c10.459-8.104%2C16.612-20.325%2C17.166-33.564V156.601z%22%2F%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_13_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_6_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_3_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_15_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_3_%22%3E%20%20%20%3Cg%20id%3D%22_x33__7_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic%22%3E%20%20%20%3Cg%20id%3D%22_x33__3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_10_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x34__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_2_%22%3E%20%20%20%3Cg%20id%3D%22_x33__6_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_2_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_11_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_5_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_12_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_1_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_9_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_2_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol_1_%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_1_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_7_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_8_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Monochromatic_1_%22%3E%20%20%3Cg%20id%3D%22_x33__4_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%22170%22%20height%3D%22168%22%20viewBox%3D%220%200%20170%20168%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20clip-path%3D%22url%28%23clip0%29%22%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF505F%22%2F%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF0320%22%2F%3E%3Cpath%20d%3D%22M85.05%200C132.022%200%20170.1%2037.8949%20170.1%2084.6407C170.1%20131.386%200%20131.386%200%2084.6407C0%2037.8949%2038.0782%200%2085.05%200Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.665%2064.0394L112.444%2012.3742L89.0263%2078.9477L144.665%2064.0394Z%22%20fill%3D%22%23FF4E65%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.777%2064.215L112.444%2012.3742L165.349%2058.4347L143.777%2064.215Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.551%2063.613L142.479%20124.467L88.912%2078.5213L144.551%2063.613Z%22%20fill%3D%22%23D0001A%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.663%2063.7886L142.479%20124.467L165.235%2058.0083L143.663%2063.7886Z%22%20fill%3D%22%23FF697B%22%2F%3E%3C%2Fg%3E%3Cdefs%3E%3CclipPath%20id%3D%22clip0%22%3E%3Crect%20width%3D%22170%22%20height%3D%22168%22%20fill%3D%22white%22%2F%3E%3C%2FclipPath%3E%3C%2Fdefs%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20viewBox%3D%220%200%2038.4%2033.5%22%20style%3D%22enable-background%3Anew%200%200%2038.4%2033.5%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cstyle%20type%3D%22text%2Fcss%22%3E%20.st0%7Bfill%3A%238247E5%3B%7D%3C%2Fstyle%3E%3Cg%3E%20%3Cpath%20class%3D%22st0%22%20d%3D%22M29%2C10.2c-0.7-0.4-1.6-0.4-2.4%2C0L21%2C13.5l-3.8%2C2.1l-5.5%2C3.3c-0.7%2C0.4-1.6%2C0.4-2.4%2C0L5%2C16.3%20%20c-0.7-0.4-1.2-1.2-1.2-2.1v-5c0-0.8%2C0.4-1.6%2C1.2-2.1l4.3-2.5c0.7-0.4%2C1.6-0.4%2C2.4%2C0L16%2C7.2c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v3.3l3.8-2.2V7%20%20c0-0.8-0.4-1.6-1.2-2.1l-8-4.7c-0.7-0.4-1.6-0.4-2.4%2C0L1.2%2C5C0.4%2C5.4%2C0%2C6.2%2C0%2C7v9.4c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l5.5-3.2l3.8-2.2l5.5-3.2c0.7-0.4%2C1.6-0.4%2C2.4%2C0l4.3%2C2.5c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v5c0%2C0.8-0.4%2C1.6-1.2%2C2.1%20%20L29%2C28.8c-0.7%2C0.4-1.6%2C0.4-2.4%2C0l-4.3-2.5c-0.7-0.4-1.2-1.2-1.2-2.1V21l-3.8%2C2.2v3.3c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l8.1-4.7c0.7-0.4%2C1.2-1.2%2C1.2-2.1V17c0-0.8-0.4-1.6-1.2-2.1L29%2C10.2z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M10.0047%209.26921H10.2714C11.0078%209.26921%2011.6047%209.86617%2011.6047%2010.6025V12.1359C11.6047%2012.7987%2012.142%2013.3359%2012.8047%2013.3359C13.4675%2013.3359%2014.0047%2012.7995%2014.0047%2012.1367V5.22059C14.0047%204.86697%2013.7758%204.56227%2013.5258%204.31223L10.6714%201.33594M4.00472%202.00254H8.00472C8.7411%202.00254%209.33805%202.59949%209.33805%203.33587V14.0015H2.67139V3.33587C2.67139%202.59949%203.26834%202.00254%204.00472%202.00254ZM14.0047%205.33587C14.0047%206.07225%2013.4078%206.66921%2012.6714%206.66921C11.935%206.66921%2011.3381%206.07225%2011.3381%205.33587C11.3381%204.59949%2011.935%204.00254%2012.6714%204.00254C13.4078%204.00254%2014.0047%204.59949%2014.0047%205.33587Z%22%20stroke%3D%22white%22%2F%3E%3Cline%20x1%3D%224%22%20y1%3D%229.99414%22%20x2%3D%228%22%20y2%3D%229.99414%22%20stroke%3D%22white%22%2F%3E%3Cline%20x1%3D%224%22%20y1%3D%2211.9941%22%20x2%3D%228%22%20y2%3D%2211.9941%22%20stroke%3D%22white%22%2F%3E%3Cpath%20d%3D%22M4%208.16113H8%22%20stroke%3D%22white%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%221024%22%20height%3D%221024%22%20viewBox%3D%220%200%201024%201024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Ccircle%20cx%3D%22512%22%20cy%3D%22512%22%20r%3D%22512%22%20fill%3D%22%238247E5%22%2F%3E%3Cpath%20d%3D%22M681.469%20402.456C669.189%20395.312%20653.224%20395.312%20639.716%20402.456L543.928%20457.228L478.842%20492.949L383.055%20547.721C370.774%20554.865%20354.81%20554.865%20341.301%20547.721L265.162%20504.856C252.882%20497.712%20244.286%20484.614%20244.286%20470.325V385.786C244.286%20371.498%20251.654%20358.4%20265.162%20351.256L340.073%20309.581C352.353%20302.437%20368.318%20302.437%20381.827%20309.581L456.737%20351.256C469.018%20358.4%20477.614%20371.498%20477.614%20385.786V440.558L542.7%20403.646V348.874C542.7%20334.586%20535.332%20321.488%20521.824%20314.344L383.055%20235.758C370.774%20228.614%20354.81%20228.614%20341.301%20235.758L200.076%20314.344C186.567%20321.488%20179.199%20334.586%20179.199%20348.874V507.237C179.199%20521.525%20186.567%20534.623%20200.076%20541.767L341.301%20620.353C353.582%20627.498%20369.546%20627.498%20383.055%20620.353L478.842%20566.772L543.928%20529.86L639.716%20476.279C651.996%20469.135%20667.961%20469.135%20681.469%20476.279L756.38%20517.953C768.66%20525.098%20777.257%20538.195%20777.257%20552.484V637.023C777.257%20651.312%20769.888%20664.409%20756.38%20671.553L681.469%20714.419C669.189%20721.563%20653.224%20721.563%20639.716%20714.419L564.805%20672.744C552.525%20665.6%20543.928%20652.502%20543.928%20638.214V583.442L478.842%20620.353V675.125C478.842%20689.414%20486.21%20702.512%20499.719%20709.656L640.944%20788.242C653.224%20795.386%20669.189%20795.386%20682.697%20788.242L823.922%20709.656C836.203%20702.512%20844.799%20689.414%20844.799%20675.125V516.763C844.799%20502.474%20837.431%20489.377%20823.922%20482.232L681.469%20402.456Z%22%20fill%3D%22white%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%22100%25%22%20height%3D%2235%22%20%20viewBox%3D%22800%200%20300%20200%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%20%20%20%20%3Cline%20x1%3D%220%22%20x2%3D%222000%22%20y1%3D%22100%22%20y2%3D%22100%22%20stroke%3D%22currentColor%22%20stroke-width%3D%2220%22%20stroke-linecap%3D%22round%22%20stroke-dasharray%3D%221%2C%2045%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2223%22%20height%3D%2220%22%20viewBox%3D%220%200%2023%2020%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cdefs%3E%20%3ClinearGradient%20id%3D%22gradient1%22%20x1%3D%220%22%20y1%3D%220%22%20x2%3D%221%22%20y2%3D%220%22%20gradientTransform%3D%22rotate%2895%29%22%3E%20%20%20%20%3Cstop%20id%3D%22stop1%22%20offset%3D%220%22%20stop-color%3D%22%232274E2%22%2F%3E%20%20%20%20%3Cstop%20id%3D%22stop1%22%20offset%3D%220.5%22%20stop-color%3D%22%232274E2%22%2F%3E%20%20%20%20%3Cstop%20id%3D%22stop2%22%20offset%3D%221%22%20stop-color%3D%22%233FB672%22%20%2F%3E%20%20%3C%2FlinearGradient%3E%20%20%3C%2Fdefs%3E%3Cpath%20d%3D%22M16%2016C10%2016%209%2010%205%2010M16%2016C16%2017.6569%2017.3431%2019%2019%2019C20.6569%2019%2022%2017.6569%2022%2016C22%2014.3431%2020.6569%2013%2019%2013C17.3431%2013%2016%2014.3431%2016%2016ZM5%2010C9%2010%2010%204%2016%204M5%2010H1.5M16%204C16%205.65685%2017.3431%207%2019%207C20.6569%207%2022%205.65685%2022%204C22%202.34315%2020.6569%201%2019%201C17.3431%201%2016%202.34315%2016%204Z%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20stroke%3D%22url%28%23gradient1%29%22%20%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2022%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M19%2018C19%2018.5523%2018.5523%2019%2018%2019V21C19.6569%2021%2021%2019.6569%2021%2018H19ZM18%2019C17.4477%2019%2017%2018.5523%2017%2018H15C15%2019.6569%2016.3431%2021%2018%2021V19ZM17%2018C17%2017.4477%2017.4477%2017%2018%2017V15C16.3431%2015%2015%2016.3431%2015%2018H17ZM18%2017C18.5523%2017%2019%2017.4477%2019%2018H21C21%2016.3431%2019.6569%2015%2018%2015V17ZM8%207H16V5H8V7ZM16%2011H8V13H16V11ZM8%2019H16V17H8V19ZM4%2015C4%2017.2091%205.79086%2019%208%2019V17C6.89543%2017%206%2016.1046%206%2015H4ZM8%2011C5.79086%2011%204%2012.7909%204%2015H6C6%2013.8954%206.89543%2013%208%2013V11ZM18%209C18%2010.1046%2017.1046%2011%2016%2011V13C18.2091%2013%2020%2011.2091%2020%209H18ZM16%207C17.1046%207%2018%207.89543%2018%209H20C20%206.79086%2018.2091%205%2016%205V7ZM7%206C7%206.55228%206.55228%207%206%207V9C7.65685%209%209%207.65685%209%206H7ZM6%207C5.44772%207%205%206.55228%205%206H3C3%207.65685%204.34315%209%206%209V7ZM5%206C5%205.44772%205.44772%205%206%205V3C4.34315%203%203%204.34315%203%206H5ZM6%205C6.55228%205%207%205.44772%207%206H9C9%204.34315%207.65685%203%206%203V5Z%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%227%22%20viewBox%3D%220%200%2012%207%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%20%20%20%20%3Cpath%20d%3D%22M0.97168%201L6.20532%206L11.439%201%22%20stroke%3D%22%23AEAEAE%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%22225%22%20height%3D%22225%22%20viewBox%3D%220%200%20225%20225%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M74.8125%20190.529C65.7561%20190.513%2055.5298%20183.748%2051.9715%20175.42L19.9417%20100.456C16.3834%2092.1277%2020.8404%2085.39%2029.8968%2085.4068L111.417%2085.5579C120.473%2085.5747%20130.699%2092.3395%20134.258%20100.668L166.288%20175.632C169.846%20183.96%20165.389%20190.697%20156.332%20190.681L74.8125%20190.529Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint0_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint1_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint2_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint3_radial%29%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M92.958%20165.95C82.7695%20165.931%2071.265%20158.321%2067.2619%20148.952L26.2489%2052.9632C22.2458%2043.5941%2027.26%2036.0143%2037.4485%2036.0332L141.832%2036.2266C152.02%2036.2455%20163.525%2043.8559%20167.528%2053.225L208.541%20149.214C212.544%20158.583%20207.53%20166.163%20197.341%20166.144L92.958%20165.95ZM71.3614%20148.959C74.475%20156.246%2083.4229%20162.166%2091.3473%20162.18L195.73%20162.374C203.655%20162.388%20207.555%20156.493%20204.441%20149.206L163.428%2053.2174C160.315%2045.9304%20151.367%2040.0111%20143.442%2039.9964L39.0592%2039.803C31.1349%2039.7883%2027.2349%2045.6837%2030.3485%2052.9708L71.3614%20148.959Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M68.565%2053.3425C81.1781%2053.3659%2095.4205%2062.7875%20100.376%2074.3862C105.332%2085.985%2099.1246%2095.3687%2086.5115%2095.3454C73.8984%2095.322%2059.6559%2085.9004%2054.7001%2074.3016C49.7443%2062.7028%2055.9518%2053.3191%2068.565%2053.3425Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M90.6891%20104.981C103.302%20105.004%20117.545%20114.425%20122.5%20126.024C127.456%20137.623%20121.249%20147.007%20108.636%20146.983C96.0225%20146.96%2081.7801%20137.538%2076.8243%20125.94C71.8685%20114.341%2078.076%20104.957%2090.6891%20104.981Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M147.538%20105.142C160.151%20105.166%20174.394%20114.587%20179.349%20126.186C184.305%20137.785%20178.098%20147.168%20165.485%20147.145C152.871%20147.122%20138.629%20137.7%20133.673%20126.101C128.717%20114.503%20134.925%20105.119%20147.538%20105.142Z%22%20fill%3D%22%23131313%22%2F%3E%3Cdefs%3E%3CradialGradient%20id%3D%22paint0_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%28134.41%2068.3006%29%20rotate%28-33.9533%29%20scale%2890.6795%2083.3208%29%22%3E%3Cstop%20offset%3D%220.661458%22%20stop-color%3D%22%23C4FCF8%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint1_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%2842.7873%20129.218%29%20rotate%28-24.1606%29%20scale%28213.359%20196.045%29%22%3E%3Cstop%20stop-color%3D%22%23FF0099%22%20stop-opacity%3D%220.9%22%2F%3E%3Cstop%20offset%3D%220.770833%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint2_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%28176.854%20148.655%29%20rotate%28-53.4908%29%20scale%28107.342%2098.6309%29%22%3E%3Cstop%20stop-color%3D%22%23FFEC43%22%2F%3E%3Cstop%20offset%3D%220.805707%22%20stop-color%3D%22%23FFF6A8%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint3_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%2857.5443%2053.4752%29%20rotate%2820.3896%29%20scale%28137.027%20125.907%29%22%3E%3Cstop%20offset%3D%220.125%22%20stop-color%3D%22%235886FE%22%20stop-opacity%3D%220.46%22%2F%3E%3Cstop%20offset%3D%220.673044%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3C%2Fdefs%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2214%22%20height%3D%2215%22%20viewBox%3D%220%200%2014%2015%22%20fill%3D%22black%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20style%3D%22mix-blend-mode%3Adarken%22%3E%3Cpath%20d%3D%22M4.15217%201.55141C3.96412%201.52242%203.95619%201.51902%204.04468%201.5055C4.21427%201.47958%204.61472%201.51491%204.89067%201.58012C5.53489%201.73232%206.12109%202.12221%206.74683%202.81466L6.91307%202.99862L7.15088%202.96062C8.15274%202.8006%209.17194%202.92778%2010.0244%203.31918C10.2589%203.42686%2010.6287%203.64121%2010.6749%203.69629C10.6896%203.71384%2010.7166%203.82684%2010.7349%203.94742C10.7982%204.36458%2010.7665%204.68434%2010.6382%204.92317C10.5683%205.05313%2010.5644%205.09432%2010.6114%205.20554C10.6489%205.2943%2010.7534%205.35999%2010.8569%205.35985C11.0687%205.35956%2011.2968%205.0192%2011.4024%204.54561L11.4444%204.3575L11.5275%204.45109C11.9835%204.96459%2012.3417%205.66488%2012.4032%206.16335L12.4192%206.29332L12.3426%206.17517C12.2107%205.97186%2012.0781%205.83346%2011.9084%205.72183C11.6024%205.52062%2011.2789%205.45215%2010.4222%205.40727C9.64839%205.36675%209.21045%205.30106%208.77621%205.16032C8.03738%204.9209%207.66493%204.60204%206.78729%203.4576C6.39748%202.94928%206.15654%202.66804%205.91687%202.44155C5.37228%201.92691%204.83716%201.65701%204.15217%201.55141Z%22%2F%3E%3Cpath%20d%3D%22M10.8494%202.68637C10.8689%202.34575%2010.9153%202.12108%2011.0088%201.9159C11.0458%201.83469%2011.0804%201.76822%2011.0858%201.76822C11.0911%201.76822%2011.075%201.82816%2011.05%201.90142C10.9821%202.10054%2010.9709%202.3729%2011.0177%202.68978C11.0771%203.09184%2011.1109%203.14985%2011.5385%203.58416C11.739%203.78788%2011.9723%204.0448%2012.0568%204.15511L12.2106%204.35568L12.0568%204.21234C11.8688%204.03705%2011.4364%203.6952%2011.3409%203.64633C11.2768%203.61356%2011.2673%203.61413%2011.2278%203.65321C11.1914%203.68922%2011.1837%203.74333%2011.1787%203.99915C11.1708%204.39786%2011.1161%204.65377%2010.9842%204.90965C10.9128%205.04805%2010.9015%205.01851%2010.9661%204.8623C11.0143%204.74566%2011.0192%204.69439%2011.0189%204.30842C11.0181%203.53291%2010.9255%203.34647%2010.3823%203.02709C10.2447%202.94618%2010.0179%202.8295%209.87839%202.76778C9.73887%202.70606%209.62805%202.6523%209.63208%202.64828C9.64746%202.63307%2010.1772%202.78675%2010.3905%202.86828C10.7077%202.98954%2010.76%203.00526%2010.7985%202.99063C10.8244%202.98082%2010.8369%202.90608%2010.8494%202.68637Z%22%2F%3E%3Cpath%20d%3D%22M4.51745%204.01304C4.13569%203.49066%203.89948%202.68973%203.95062%202.091L3.96643%201.90572L4.05333%201.92148C4.21652%201.95106%204.49789%202.05515%204.62964%202.13469C4.9912%202.35293%205.14773%202.64027%205.30697%203.37811C5.35362%203.59423%205.41482%203.8388%205.44298%203.9216C5.48831%204.05487%205.65962%204.36617%205.7989%204.56834C5.89922%204.71395%205.83258%204.78295%205.61082%204.76305C5.27215%204.73267%204.8134%204.41799%204.51745%204.01304Z%22%2F%3E%3Cpath%20d%3D%22M10.3863%207.90088C8.60224%207.18693%207.97389%206.56721%207.97389%205.52157C7.97389%205.36769%207.97922%205.24179%207.98571%205.24179C7.99221%205.24179%208.06124%205.29257%208.1391%205.35465C8.50088%205.64305%208.906%205.76623%2010.0275%205.92885C10.6875%206.02455%2011.0589%206.10185%2011.4015%206.21477C12.4904%206.57371%2013.1641%207.30212%2013.3248%208.29426C13.3715%208.58255%2013.3441%209.12317%2013.2684%209.4081C13.2087%209.63315%2013.0263%2010.0388%2012.9779%2010.0544C12.9645%2010.0587%2012.9514%2010.0076%2012.9479%209.93809C12.9296%209.56554%2012.7402%209.20285%2012.4221%208.93116C12.0604%208.62227%2011.5745%208.37633%2010.3863%207.90088Z%22%2F%3E%3Cpath%20d%3D%22M9.13385%208.19748C9.11149%208.06527%209.07272%207.89643%209.04769%207.82228L9.00217%207.68748L9.08672%207.7818C9.20374%207.91233%209.2962%208.07937%209.37457%208.30185C9.43438%208.47165%209.44111%208.52215%209.44066%208.79807C9.4402%209.06896%209.43273%209.12575%209.3775%209.27858C9.29042%209.51959%209.18233%209.69048%209.00097%209.87391C8.67507%2010.2036%208.25607%2010.3861%207.65143%2010.4618C7.54633%2010.4749%207.24%2010.4971%206.97069%2010.511C6.292%2010.5461%205.84531%2010.6186%205.44393%2010.7587C5.38623%2010.7788%205.3347%2010.7911%205.32947%2010.7859C5.31323%2010.7698%205.58651%2010.6079%205.81223%2010.4998C6.1305%2010.3474%206.44733%2010.2643%207.15719%2010.1468C7.50785%2010.0887%207.86998%2010.0183%207.96194%209.99029C8.83033%209.72566%209.27671%209.04276%209.13385%208.19748Z%22%2F%3E%3Cpath%20d%3D%22M9.95169%209.64109C9.71465%209.13463%209.66022%208.64564%209.79009%208.18961C9.80399%208.14088%209.82632%208.101%209.83976%208.101C9.85319%208.101%209.90913%208.13105%209.96404%208.16777C10.0733%208.24086%2010.2924%208.36395%2010.876%208.68023C11.6043%209.0749%2012.0196%209.3805%2012.302%209.72965C12.5493%2010.0354%2012.7023%2010.3837%2012.776%2010.8084C12.8177%2011.0489%2012.7932%2011.6277%2012.7311%2011.8699C12.5353%2012.6337%2012.0802%2013.2336%2011.4311%2013.5837C11.336%2013.635%2011.2506%2013.6771%2011.2414%2013.6773C11.2321%2013.6775%2011.2668%2013.5899%2011.3184%2013.4827C11.5367%2013.029%2011.5616%2012.5877%2011.3965%2012.0965C11.2954%2011.7957%2011.0893%2011.4287%2010.6732%2010.8084C10.1893%2010.0873%2010.0707%209.89539%209.95169%209.64109Z%22%2F%3E%3Cpath%20d%3D%22M3.25046%2012.3737C3.91252%2011.8181%204.73629%2011.4234%205.48666%2011.3022C5.81005%2011.25%206.34877%2011.2707%206.64823%2011.3469C7.12824%2011.469%207.55763%2011.7425%207.78094%2012.0683C7.99918%2012.3867%208.09281%2012.6642%208.19029%2013.2816C8.22875%2013.5252%208.27057%2013.7697%208.28323%2013.8251C8.35644%2014.1451%208.4989%2014.4008%208.67544%2014.5293C8.95583%2014.7333%209.43865%2014.7459%209.91362%2014.5618C9.99423%2014.5305%2010.0642%2014.5089%2010.0691%2014.5138C10.0864%2014.5308%209.84719%2014.6899%209.67847%2014.7737C9.45143%2014.8864%209.2709%2014.93%209.03102%2014.93C8.59601%2014.93%208.23486%2014.7101%207.9335%2014.2616C7.87419%2014.1733%207.7409%2013.909%207.63729%2013.6741C7.3191%2012.9528%207.16199%2012.7331%206.79255%2012.4926C6.47104%2012.2834%206.05641%2012.2459%205.74449%2012.3979C5.33475%2012.5976%205.22043%2013.118%205.51389%2013.4478C5.63053%2013.5789%205.84803%2013.6919%206.02588%2013.7139C6.35861%2013.7551%206.64455%2013.5035%206.64455%2013.1696C6.64455%2012.9528%206.56071%2012.8291%206.34966%2012.7344C6.0614%2012.6051%205.75156%2012.7562%205.75304%2013.0254C5.75368%2013.1402%205.80396%2013.2122%205.91971%2013.2643C5.99397%2013.2977%205.99569%2013.3003%205.93514%2013.2878C5.67066%2013.2333%205.6087%2012.9164%205.82135%2012.706C6.07667%2012.4535%206.60461%2012.5649%206.78591%2012.9097C6.86208%2013.0545%206.87092%2013.3429%206.80451%2013.517C6.6559%2013.9068%206.22256%2014.1117%205.78297%2014.0002C5.48368%2013.9242%205.36181%2013.842%205.00097%2013.4726C4.37395%2012.8306%204.13053%2012.7062%203.22657%2012.566L3.05335%2012.5391L3.25046%2012.3737Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M0.308383%200.883984C2.40235%203.40996%203.84457%204.45213%204.00484%204.67231C4.13717%204.85412%204.08737%205.01757%203.86067%205.14567C3.7346%205.21689%203.47541%205.28905%203.34564%205.28905C3.19887%205.28905%203.14847%205.23278%203.14847%205.23278C3.06337%205.15255%203.01544%205.16658%202.5784%204.39555C1.97166%203.45981%201.46389%202.68357%201.45004%202.67057C1.41801%202.64052%201.41856%202.64153%202.51654%204.59413C2.69394%205.0011%202.55182%205.15049%202.55182%205.20845C2.55182%205.32636%202.51946%205.38834%202.37311%205.55059C2.12914%205.8211%202.02008%206.12505%201.94135%206.7541C1.8531%207.45926%201.60492%207.95737%200.917156%208.80989C0.514562%209.30893%200.448686%209.4004%200.3471%209.60153C0.219144%209.85482%200.183961%209.99669%200.169701%2010.3165C0.154629%2010.6547%200.183983%2010.8732%200.287934%2011.1965C0.378939%2011.4796%200.473932%2011.6665%200.716778%2012.0403C0.926351%2012.3629%201.04702%2012.6027%201.04702%2012.6965C1.04702%2012.7711%201.06136%2012.7712%201.38611%2012.6983C2.16328%2012.5239%202.79434%2012.2171%203.14925%2011.8411C3.36891%2011.6084%203.42048%2011.4799%203.42215%2011.1611C3.42325%2010.9525%203.41587%2010.9088%203.35914%2010.7888C3.2668%2010.5935%203.09869%2010.4311%202.72817%2010.1794C2.2427%209.84953%202.03534%209.58398%201.97807%209.21878C1.93108%208.91913%201.98559%208.70771%202.25416%208.14825C2.53214%207.56916%202.60103%207.32239%202.64763%206.73869C2.67773%206.36158%202.71941%206.21286%202.82842%206.09348C2.94212%205.969%203.04447%205.92684%203.32584%205.88863C3.78457%205.82635%204.07667%205.70839%204.31677%205.48849C4.52505%205.29772%204.61221%205.11391%204.62558%204.8372L4.63574%204.62747L4.51934%204.49259C4.09783%204.00411%200.0261003%200.5%200.000160437%200.5C-0.00538105%200.5%200.133325%200.672804%200.308383%200.883984ZM1.28364%2010.6992C1.37894%2010.5314%201.3283%2010.3158%201.16889%2010.2104C1.01827%2010.1109%200.78428%2010.1578%200.78428%2010.2875C0.78428%2010.3271%200.806303%2010.3559%200.855937%2010.3813C0.939514%2010.424%200.945581%2010.4721%200.879823%2010.5703C0.81323%2010.6698%200.818604%2010.7573%200.894991%2010.8167C1.0181%2010.9125%201.19237%2010.8598%201.28364%2010.6992Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M4.92523%205.99865C4.70988%206.06439%204.50054%206.29124%204.43574%206.5291C4.39621%206.67421%204.41864%206.92875%204.47785%207.00736C4.57351%207.13433%204.66602%207.16778%204.91651%207.16603C5.40693%207.16263%205.83327%206.95358%205.88284%206.69224C5.92347%206.47801%205.73622%206.18112%205.4783%206.05078C5.34521%205.98355%205.06217%205.95688%204.92523%205.99865ZM5.49853%206.44422C5.57416%206.33741%205.54107%206.22198%205.41245%206.14391C5.1675%205.99525%204.79708%206.11827%204.79708%206.34826C4.79708%206.46274%204.99025%206.58765%205.16731%206.58765C5.28516%206.58765%205.44644%206.5178%205.49853%206.44422Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2294%22%20height%3D%2294%22%20viewBox%3D%220%200%2094%2094%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%20%20%3Cpath%20d%3D%22M92%2047C92%2022.1472%2071.8528%202%2047%202C22.1472%202%202%2022.1472%202%2047C2%2071.8528%2022.1472%2092%2047%2092%22%20stroke%3D%22%232172E5%22%20stroke-width%3D%223%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E\"","export default \"f89237c6bc3f84db.png\"","module.exports=function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,\"a\",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p=\"\",r(r.s=3)}([function(e,t){e.exports=function(e){return e&&e.__esModule?e:{default:e}}},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}},function(e,t,r){\"use strict\";function n(){return Math.floor(9e4*Math.random())+1e4}Object.defineProperty(t,\"__esModule\",{value:!0}),t.sendAsyncWrapper=function(e,t){var r=this;return new Promise(function(o,a){r.sendAsync({jsonrpc:\"2.0\",id:n(),method:e,params:t||[]},function(e,t){e?a(e):o(t.result)})})},t.sendFortmaticAsyncWrapper=function(e){var t=this;return new Promise(function(r,n){t.getProvider().sendFortmaticAsync(e,function(e,t){e?n(e):r(t?t.result:{})})})},t.randomId=n,t.findExistingResponse=function(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},t=new v(m);return t.params=[e],i.sendFortmaticAsyncWrapper.call(g,t)}};var v=function e(t,r){(0,o.default)(this,e),this.id=(0,i.randomId)(),this.method=t,this.params=r?[r]:[{}]}},function(e,t,r){\"use strict\";var n=r(0);Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var o=n(r(6)),a=n(r(9)),i=n(r(1)),s=n(r(10)),c=r(11),u=n(r(12)),l=r(2),f=function(){function e(t,r){if((0,i.default)(this,e),this.fortmaticClient=t,this.requests={},this.queue=[],this.account=null,this.network=null,this.isFortmatic=!0,this.overlayReady=!1,this.isLoggedIn=!1,this.postMessages={FORTMATIC_HANDLE_BATCH_REQUEST:\"FORTMATIC_HANDLE_BATCH_REQUEST\",FORTMATIC_HANDLE_REQUEST:\"FORTMATIC_HANDLE_REQUEST\",FORTMATIC_HANDLE_FORTMATIC_REQUEST:\"FORTMATIC_HANDLE_FORTMATIC_REQUEST\",FORTMATIC_HANDLE_RESPONSE:\"FORTMATIC_HANDLE_RESPONSE\",FORTMATIC_OVERLAY_READY:\"FORTMATIC_OVERLAY_READY\",FORTMATIC_SHOW_OVERLAY:\"FORTMATIC_SHOW_OVERLAY\",FORTMATIC_HIDE_OVERLAY:\"FORTMATIC_HIDE_OVERLAY\",FORTMATIC_USER_DENIED:\"FORTMATIC_USER_DENIED\",FORTMATIC_USER_LOGOUT:\"FORTMATIC_USER_LOGOUT\",FORTMATIC_UNAUTHORIZED_API_KEY:\"FORTMATIC_UNAUTHORIZED_API_KEY\"},!r.API_KEY)throw new Error(\"Please provide a Fortmatic API key that you acquired from the developer dashboard.\");this.options={API_KEY:r.API_KEY,ETH_NETWORK:r.ETH_NETWORK,DOMAIN_ORIGIN:window.location?window.location.origin:\"\",version:c.version},this.queryParams=btoa(JSON.stringify(this.options)),this.constructPostMessage(),this.overlay=this.createOverlay(),this.listenMessage()}return(0,s.default)(e,[{key:\"constructPostMessage\",value:function(){var e=this;Object.keys(this.postMessages).map(function(t){e.postMessages[t]+=\"-\".concat(e.queryParams)})}},{key:\"createOverlay\",value:function(){var e=this;return new Promise(function(t,r){var n=function(){if(function(){var t=!0,r=!1,n=void 0;try{for(var o,a=document.getElementsByClassName(\"fortmatic-iframe\")[Symbol.iterator]();!(t=(o=a.next()).done);t=!0)if(o.value.src.includes(e.queryParams))return!1}catch(e){r=!0,n=e}finally{try{t||null==a.return||a.return()}finally{if(r)throw n}}return!0}()){var r=document.createElement(\"style\");r.innerHTML=u.default.css,r.type=\"text/css\",document.head.appendChild(r);var n=document.createElement(\"iframe\");n.className=\"fortmatic-iframe\",n.src=\"\".concat(e.fortmaticClient,\"/send?params=\").concat(e.queryParams),document.body.appendChild(n);var o=document.createElement(\"img\");o.src=\"https://static.fortmatic.com/assets/trans.gif\",document.body.appendChild(o),t({iframe:n})}else console.error(\"Fortmatic: Duplicate instances found.\")};[\"loaded\",\"interactive\",\"complete\"].indexOf(document.readyState)>-1?n():window.addEventListener(\"load\",n.bind(e),!1)})}},{key:\"showOverlay\",value:function(){var e=(0,a.default)(o.default.mark(function e(){return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.overlay;case 2:e.sent.iframe.style.display=\"block\";case 4:case\"end\":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:\"hideOverlay\",value:function(){var e=(0,a.default)(o.default.mark(function e(){return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.overlay;case 2:e.sent.iframe.style.display=\"none\";case 4:case\"end\":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:\"sendAsync\",value:function(e,t){e.length>0?this.enqueue({payload:{id:(0,l.randomId)(),batch:e.map(function(e){return e.id=(0,l.randomId)(),e}),method:\"eth_batchRequest\"},cb:t}):this.enqueue({payload:e,cb:t})}},{key:\"sendFortmaticAsync\",value:function(e,t){this.enqueue({payload:e,cb:t,isNative:!0})}},{key:\"send\",value:function(e,t){if(\"string\"==typeof e)return l.sendAsyncWrapper.call(this,e,t);if(!t){console.warn(\"Non-async web3 methods will be deprecated in web3 > 1.0, and are not supported by the Fortmatic provider. An async method to be used instead.\"),this.sendAsync(e,function(){});var r={};switch(e.method){case\"eth_accounts\":r=this.account?[this.account]:[];break;case\"eth_coinbase\":r=this.account;break;case\"net_version\":r=this.network||(this.options.API_KEY.startsWith(\"pk_live\")?1:4);break;case\"eth_uninstallFilter\":r=!0;break;default:r={}}return{id:e.id,jsonrpc:e.jsonrpc,result:r}}this.sendAsync(e,t)}},{key:\"enqueue\",value:function(e){this.queue.push(e),this.overlayReady&&this.dequeue()}},{key:\"dequeue\",value:function(){var e=(0,a.default)(o.default.mark(function e(){var t,r,n,a=this;return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(0!==this.queue.length){e.next=2;break}return e.abrupt(\"return\");case 2:if(!(t=this.queue.shift())){e.next=11;break}return r=t.payload,n=t.cb,r.id=(0,l.randomId)(),e.next=9,this.postMessage(t.isNative?this.postMessages.FORTMATIC_HANDLE_FORTMATIC_REQUEST:this.postMessages.FORTMATIC_HANDLE_REQUEST,t.payload);case 9:r.batch&&r.batch.length>0?(r.batch.forEach(function(e){a.requests[e.id]={parentId:r.id,payload:e,cb:function(e,t){var n=a.requests[r.id].batchResponse;if(e&&e.response&&!(0,l.findExistingResponse)(n,e.response.id))throw n.push({jsonrpc:\"2.0\",id:e.response.id,error:{code:e.response.code,message:e.response.message}}),a.requests[r.id].cb(null,n),e.response;if(t&&t.result&&!(0,l.findExistingResponse)(n,t.id))return n.push(t);throw new Error(\"Fortmatic: unexpected callback behavior\")}}}),this.requests[r.id]={payload:r,cb:n,batchResponse:[]}):this.requests[r.id]={payload:r,cb:n},this.dequeue();case 11:case\"end\":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:\"postMessage\",value:function(){var e=(0,a.default)(o.default.mark(function e(t,r){var n;return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.overlay;case 2:if(!(n=e.sent).iframe.contentWindow){e.next=7;break}n.iframe.contentWindow.postMessage({msgType:t,payload:r},\"*\"),e.next=8;break;case 7:throw new Error(\"Fortmatic: Modal is not ready.\");case 8:case\"end\":return e.stop()}},e,this)}));return function(t,r){return e.apply(this,arguments)}}()},{key:\"enable\",value:function(){return l.sendAsyncWrapper.call(this,\"eth_accounts\")}},{key:\"listenMessage\",value:function(){var e=this;window.addEventListener(\"message\",function(t){if(t.origin===e.fortmaticClient){var r=t.data.response?t.data.response.id:null;switch(t.data.msgType){case e.postMessages.FORTMATIC_OVERLAY_READY:e.overlayReady=!0,e.dequeue();break;case e.postMessages.FORTMATIC_HANDLE_RESPONSE:try{e.requests[r].cb(null,t.data.response);var n=e.requests[r].parentId;n&&e.requests[n].payload.batch.length===e.requests[n].batchResponse.length&&e.requests[n].cb(null,e.requests[n].batchResponse),\"eth_accounts\"===e.requests[r].payload.method?e.account=t.data.response.result[0]:\"eth_coinbase\"===e.requests[r].payload.method?e.account=t.data.response.result:\"net_version\"===e.requests[r].payload.method&&(e.network=t.data.response.result)}catch(e){}e.isLoggedIn=!0,e.dequeue();break;case e.postMessages.FORTMATIC_HIDE_OVERLAY:e.hideOverlay();break;case e.postMessages.FORTMATIC_SHOW_OVERLAY:e.showOverlay();break;case e.postMessages.FORTMATIC_USER_LOGOUT:e.account=null,e.network=null,e.isLoggedIn=!1;break;case e.postMessages.FORTMATIC_UNAUTHORIZED_API_KEY:throw e.overlayReady=!1,new Error(\"Given API key is not authorized to access the resource.\");case e.postMessages.FORTMATIC_USER_DENIED:if(r){var o=t.data.response&&t.data.response.message?t.data.response.message:\"Fortmatic: Modal was closed without executing action!\",a=t.data.response&&t.data.response.code?t.data.response.code:1;e.requests[r].cb({message:o,code:a,response:t.data.response})}else e.queue.forEach(function(e){return e.cb({message:\"Fortmatic: Modal was closed without executing action!\",code:1})});e.dequeue()}}})}}]),e}();t.default=f},function(e,t,r){e.exports=r(7)},function(e,t,r){var n=function(){return this||\"object\"==typeof self&&self}()||Function(\"return this\")(),o=n.regeneratorRuntime&&Object.getOwnPropertyNames(n).indexOf(\"regeneratorRuntime\")>=0,a=o&&n.regeneratorRuntime;if(n.regeneratorRuntime=void 0,e.exports=r(8),o)n.regeneratorRuntime=a;else try{delete n.regeneratorRuntime}catch(e){n.regeneratorRuntime=void 0}},function(e,t){!function(t){\"use strict\";var r,n=Object.prototype,o=n.hasOwnProperty,a=\"function\"==typeof Symbol?Symbol:{},i=a.iterator||\"@@iterator\",s=a.asyncIterator||\"@@asyncIterator\",c=a.toStringTag||\"@@toStringTag\",u=\"object\"==typeof e,l=t.regeneratorRuntime;if(l)u&&(e.exports=l);else{(l=t.regeneratorRuntime=u?e.exports:{}).wrap=_;var f=\"suspendedStart\",d=\"suspendedYield\",h=\"executing\",p=\"completed\",m={},y={};y[i]=function(){return this};var v=Object.getPrototypeOf,g=v&&v(v(L([])));g&&g!==n&&o.call(g,i)&&(y=g);var b=A.prototype=w.prototype=Object.create(y);T.prototype=b.constructor=A,A.constructor=T,A[c]=T.displayName=\"GeneratorFunction\",l.isGeneratorFunction=function(e){var t=\"function\"==typeof e&&e.constructor;return!!t&&(t===T||\"GeneratorFunction\"===(t.displayName||t.name))},l.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,A):(e.__proto__=A,c in e||(e[c]=\"GeneratorFunction\")),e.prototype=Object.create(b),e},l.awrap=function(e){return{__await:e}},O(R.prototype),R.prototype[s]=function(){return this},l.AsyncIterator=R,l.async=function(e,t,r,n){var o=new R(_(e,t,r,n));return l.isGeneratorFunction(t)?o:o.next().then(function(e){return e.done?e.value:o.next()})},O(b),b[c]=\"Generator\",b[i]=function(){return this},b.toString=function(){return\"[object Generator]\"},l.keys=function(e){var t=[];for(var r in e)t.push(r);return t.reverse(),function r(){for(;t.length;){var n=t.pop();if(n in e)return r.value=n,r.done=!1,r}return r.done=!0,r}},l.values=L,F.prototype={constructor:F,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=r,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=r,this.tryEntries.forEach(M),!e)for(var t in this)\"t\"===t.charAt(0)&&o.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=r)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if(\"throw\"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function n(n,o){return s.type=\"throw\",s.arg=e,t.next=n,o&&(t.method=\"next\",t.arg=r),!!o}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],s=i.completion;if(\"root\"===i.tryLoc)return n(\"end\");if(i.tryLoc<=this.prev){var c=o.call(i,\"catchLoc\"),u=o.call(i,\"finallyLoc\");if(c&&u){if(this.prev=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&o.call(n,\"finallyLoc\")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),M(r),m}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if(\"throw\"===n.type){var o=n.arg;M(r)}return o}}throw new Error(\"illegal catch attempt\")},delegateYield:function(e,t,n){return this.delegate={iterator:L(e),resultName:t,nextLoc:n},\"next\"===this.method&&(this.arg=r),m}}}function _(e,t,r,n){var o=t&&t.prototype instanceof w?t:w,a=Object.create(o.prototype),i=new F(n||[]);return a._invoke=function(e,t,r){var n=f;return function(o,a){if(n===h)throw new Error(\"Generator is already running\");if(n===p){if(\"throw\"===o)throw a;return k()}for(r.method=o,r.arg=a;;){var i=r.delegate;if(i){var s=I(i,r);if(s){if(s===m)continue;return s}}if(\"next\"===r.method)r.sent=r._sent=r.arg;else if(\"throw\"===r.method){if(n===f)throw n=p,r.arg;r.dispatchException(r.arg)}else\"return\"===r.method&&r.abrupt(\"return\",r.arg);n=h;var c=E(e,t,r);if(\"normal\"===c.type){if(n=r.done?p:d,c.arg===m)continue;return{value:c.arg,done:r.done}}\"throw\"===c.type&&(n=p,r.method=\"throw\",r.arg=c.arg)}}}(e,r,i),a}function E(e,t,r){try{return{type:\"normal\",arg:e.call(t,r)}}catch(e){return{type:\"throw\",arg:e}}}function w(){}function T(){}function A(){}function O(e){[\"next\",\"throw\",\"return\"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function R(e){var t;this._invoke=function(r,n){function a(){return new Promise(function(t,a){!function t(r,n,a,i){var s=E(e[r],e,n);if(\"throw\"!==s.type){var c=s.arg,u=c.value;return u&&\"object\"==typeof u&&o.call(u,\"__await\")?Promise.resolve(u.__await).then(function(e){t(\"next\",e,a,i)},function(e){t(\"throw\",e,a,i)}):Promise.resolve(u).then(function(e){c.value=e,a(c)},function(e){return t(\"throw\",e,a,i)})}i(s.arg)}(r,n,t,a)})}return t=t?t.then(a,a):a()}}function I(e,t){var n=e.iterator[t.method];if(n===r){if(t.delegate=null,\"throw\"===t.method){if(e.iterator.return&&(t.method=\"return\",t.arg=r,I(e,t),\"throw\"===t.method))return m;t.method=\"throw\",t.arg=new TypeError(\"The iterator does not provide a 'throw' method\")}return m}var o=E(n,e.iterator,t.arg);if(\"throw\"===o.type)return t.method=\"throw\",t.arg=o.arg,t.delegate=null,m;var a=o.arg;return a?a.done?(t[e.resultName]=a.value,t.next=e.nextLoc,\"return\"!==t.method&&(t.method=\"next\",t.arg=r),t.delegate=null,m):a:(t.method=\"throw\",t.arg=new TypeError(\"iterator result is not an object\"),t.delegate=null,m)}function x(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function M(e){var t=e.completion||{};t.type=\"normal\",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:\"root\"}],e.forEach(x,this),this.reset(!0)}function L(e){if(e){var t=e[i];if(t)return t.call(e);if(\"function\"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n (https://fortmatic.com/)\",license:\"MIT\",repository:{type:\"git\",url:\"https://github.com/fortmatic/fortmatic-js\"},keywords:[\"Auth\",\"Login\",\"Web3\",\"Crypto\",\"Ethereum\",\"MetaMask\",\"Wallet\",\"Blockchain\",\"Dapp\"],homepage:\"https://www.fortmatic.com\",ava:{require:[\"@babel/register\"],files:[\"test/**/*.spec.js\"],babel:{testOptions:{presets:[\"@babel/env\"],plugins:[\"@babel/plugin-proposal-function-bind\",\"@babel/plugin-transform-runtime\"]}},verbose:!0},nyc:{all:!1,\"check-coverage\":!0,\"per-file\":!0,lines:80,statements:80,functions:80,branches:80,include:[\"src/**/*.js\"],exclude:[\"*/style.js\"],require:[],reporter:[\"html\",\"lcov\"]},dependencies:{\"@babel/runtime\":\"7.3.4\"},devDependencies:{\"@babel/core\":\"7.3.4\",\"@babel/plugin-proposal-function-bind\":\"7.2.0\",\"@babel/plugin-transform-modules-commonjs\":\"7.2.0\",\"@babel/plugin-transform-runtime\":\"7.3.4\",\"@babel/preset-env\":\"7.3.4\",\"@babel/register\":\"7.0.0\",ava:\"2.2.0\",\"babel-eslint\":\"10.0.1\",\"babel-loader\":\"8.0.5\",eslint:\"5.9.0\",lodash:\"4.17.11\",nyc:\"13.1.0\",sinon:\"7.1.1\",webpack:\"4.26.1\",\"webpack-cli\":\"3.1.2\"}}},function(e,t,r){\"use strict\";t.css=\"\\n .fortmatic-iframe {\\n display: none;\\n position: fixed;\\n top: 0;\\n right: 0;\\n width: 100%;\\n height: 100%;\\n border: none;\\n border-radius: 0;\\n z-index: 2147483647;\\n }\\n\"}]);"],"names":["_path","_line","_extends","React"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mBAAe;;AC+Lf,sBAAe,0kPAA0kP;;ACvIzlP,sBAAe,0sDAA0sD;;AC7BztD,uBAAe,k3CAAk3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACwFD,oBAAe,0tLAA0tL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9DzuL,uBAAe,qmTAAqmT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpBpnT,eAAe,mcAAmc;;ACvBld,mBAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICAf,SAAc,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CA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"} \ No newline at end of file diff --git a/package.json b/package.json index ea71970ec6d..2f9fc451b79 100644 --- a/package.json +++ b/package.json @@ -161,6 +161,7 @@ }, "license": "GPL-3.0-or-later", "dependencies": { + "@babel/runtime": "^7.16.7", "@ethersproject/abi": "^5.4.1", "@ethersproject/abstract-provider": "^5.4.1", "@ethersproject/address": "^5.4.0", diff --git a/rollup.config.ts b/rollup.config.ts index c71db111b8e..8078aab46c8 100644 --- a/rollup.config.ts +++ b/rollup.config.ts @@ -3,75 +3,33 @@ * This library lives in src/lib, but shares code with the interface application. */ -// import eslint from '@rollup/plugin-eslint' +import eslint from '@rollup/plugin-eslint' +// import babel from '@rollup/plugin-babel' import commonjs from '@rollup/plugin-commonjs' import json from '@rollup/plugin-json' // import resolve from '@rollup/plugin-node-resolve' -import babel from '@rollup/plugin-babel' - -import { DEFAULT_EXTENSIONS } from '@babel/core' -// import replace from '@rollup/plugin-replace' import url from '@rollup/plugin-url' import svgr from '@svgr/rollup' import dts from 'rollup-plugin-dts' -// import external from 'rollup-plugin-peer-deps-external' import sass from 'rollup-plugin-scss' +// import { DEFAULT_EXTENSIONS } from '@babel/core' + import typescript from 'rollup-plugin-typescript2' +// import babel from '@rollup/plugin-babel' +// import { DEFAULT_EXTENSIONS } from '@babel/core' +import replace from '@rollup/plugin-replace' +// import external from 'rollup-plugin-peer-deps-external' + // import { dependencies } from './package.json' // const deps = Object.keys(dependencies) -// const replacements = { -// 'process.env.REACT_APP_IS_WIDGET': true, -// } -// process.env.BABEL_ENV === 'production' +const replacements = { + 'process.env.REACT_APP_IS_WIDGET': false, +} // const ignore = ['styled-components'] -const babelConfig = { - extensions: [...DEFAULT_EXTENSIONS, '.ts', 'tsx'], - - exclude: '/node_modules/**', - babelrc: false, - configFile: false, - presets: [ - [ - require.resolve('babel-preset-react-app'), - { - runtime: 'automatic', - }, - ], - ], - // plugins: [ - // [ - // require.resolve('babel-plugin-named-asset-import'), - // { - // loaderMap: { - // svg: { - // ReactComponent: '@svgr/webpack?-svgo,+titleProp,+ref![path]', - // }, - // }, - // }, - // ], - // ], -} -// const babelPlugins = [ -// // These plugins filter out non-ES2015. -// '@babel/plugin-transform-flow-strip-types', -// ['@babel/plugin-proposal-class-properties', { loose: true }], -// 'syntax-trailing-function-commas', -// // These use loose mode which avoids embedding a runtime. -// // TODO: Remove object spread from the source. Prefer Object.assign instead. -// ['@babel/plugin-proposal-object-rest-spread', { loose: true, useBuiltIns: true }], -// ['@babel/plugin-transform-template-literals', { loose: true }], -// // TODO: Remove for...of from the source. It requires a runtime to be embedded. -// '@babel/plugin-transform-for-of', -// // TODO: Remove array spread from the source. Prefer .apply instead. -// ['@babel/plugin-transform-spread', { loose: true, useBuiltIns: true }], -// '@babel/plugin-transform-parameters', -// // TODO: Remove array destructuring from the source. Requires runtime. -// ['@babel/plugin-transform-destructuring', { loose: true, useBuiltIns: true }], -// ] const library = { input: 'src/snowflake.ts', @@ -95,12 +53,20 @@ const library = { // external: (source: string) => ignore.includes(source), plugins: [ // external(), + eslint({ include: ['**/*.js', '**/*.jsx', '**/*.ts', '**/*.tsx'] }), + replace({ ...replacements, preventAssignment: true }), + + typescript({ tsconfig: './tsconfig.json', useTsconfigDeclarationDir: true }), + commonjs({ esmExternals: true, requireReturnsDefault: false }), // resolve(), - typescript({ tsconfig: './tsconfig.json', useTsconfigDeclarationDir: false }), - commonjs(), + + // babel({ + // extensions: [...DEFAULT_EXTENSIONS, '.ts', 'tsx'], + // babelHelpers: 'runtime', + // exclude: /node_modules/, + // }), // commonjs({ ignore: ['node_modules/styled-components/**/*.js'] }), // eslint({ include: ['**/*.js', '**/*.jsx', '**/*.ts', '**/*.tsx'] }), - // babel(babelConfig), json(), // imports json // replace({ ...replacements, preventAssignment: true }), url(), // imports files (including svgs) as data URIs diff --git a/src/hooks/useActiveWeb3React.ts b/src/hooks/useActiveWeb3React.ts index bf900ed8776..ed3cd50f5fd 100644 --- a/src/hooks/useActiveWeb3React.ts +++ b/src/hooks/useActiveWeb3React.ts @@ -1,14 +1,14 @@ /* eslint-disable react-hooks/rules-of-hooks */ import { Web3Provider } from '@ethersproject/providers' import { useWeb3React } from '@web3-react/core' -import { default as useWidgetsWeb3React } from 'lib/hooks/useActiveWeb3React' +// import { default as useWidgetsWeb3React } from 'lib/hooks/useActiveWeb3React' import { NetworkContextName } from '../constants/misc' export default function useActiveWeb3React() { - if (process.env.REACT_APP_IS_WIDGET) { - return useWidgetsWeb3React() - } + // if (process.env.REACT_APP_IS_WIDGET) { + // return useWidgetsWeb3React() + // } const interfaceContext = useWeb3React() const interfaceNetworkContext = useWeb3React( diff --git a/yarn.lock b/yarn.lock index dbd7d89f40a..771b04209e7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1245,6 +1245,13 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.7.tgz#03ff99f64106588c9c403c6ecb8c3bafbbdff1fa" + integrity sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ== + dependencies: + regenerator-runtime "^0.13.4" + "@babel/template@^7.10.4", "@babel/template@^7.16.7", "@babel/template@^7.3.3": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" From 6d0182c6c7ef26b0508f4418cb1be43016c1bddb Mon Sep 17 00:00:00 2001 From: David Wisner Date: Wed, 26 Jan 2022 22:08:28 +0800 Subject: [PATCH 03/15] update deps --- package.json | 119 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 116 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 2f9fc451b79..db9afbe993a 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "files": [ "dist2" ], - "version": "1.0.0", + "version": "1.0.1", "private": false, "devDependencies": { "@ethersproject/experimental": "^5.4.0", @@ -212,13 +212,126 @@ "redux": "^4.1.2", "styled-components": "^5.3.0", "tiny-invariant": "^1.2.0", - "wcag-contrast": "^3.0.0", "wicg-inert": "^3.1.1", "widgets-web3-react/core": "npm:@web3-react/core@8.0.16-alpha.0", "widgets-web3-react/eip1193": "npm:@web3-react/eip1193@8.0.16-alpha.0", "widgets-web3-react/empty": "npm:@web3-react/empty@8.0.17-alpha.0", "widgets-web3-react/metamask": "npm:@web3-react/metamask@8.0.16-alpha.0", "widgets-web3-react/types": "npm:@web3-react/types@8.0.16-alpha.0", - "widgets-web3-react/url": "npm:@web3-react/url@8.0.17-alpha.0" + "widgets-web3-react/url": "npm:@web3-react/url@8.0.17-alpha.0", + "@ethersproject/experimental": "^5.4.0", + "@gnosis.pm/safe-apps-web3-react": "^0.6.0", + "@graphql-codegen/cli": "1.21.5", + "@graphql-codegen/typescript": "1.22.3", + "@graphql-codegen/typescript-operations": "^1.18.2", + "@graphql-codegen/typescript-rtk-query": "^1.1.1", + "@lingui/cli": "^3.9.0", + "@metamask/jazzicon": "^2.0.0", + "@reach/dialog": "^0.10.3", + "@reach/portal": "^0.10.3", + "@react-hook/window-scroll": "^1.3.0", + "@reduxjs/toolkit": "^1.6.1", + "@rollup/plugin-babel": "^5.3.0", + "@rollup/plugin-commonjs": "^21.0.1", + "@rollup/plugin-eslint": "^8.0.1", + "@rollup/plugin-json": "^4.1.0", + "@rollup/plugin-node-resolve": "^13.1.3", + "@rollup/plugin-replace": "^3.0.1", + "@rollup/plugin-url": "^6.1.0", + "@svgr/rollup": "^6.2.0", + "@testing-library/jest-dom": "^5.14.1", + "@testing-library/react": "^12.0.0", + "@testing-library/react-hooks": "^7.0.2", + "@typechain/ethers-v5": "^7.0.0", + "@types/array.prototype.flat": "^1.2.1", + "@types/array.prototype.flatmap": "^1.2.2", + "@types/d3": "^6.7.1", + "@types/jest": "^25.2.1", + "@types/lingui__core": "^2.7.1", + "@types/lingui__macro": "^2.7.4", + "@types/lingui__react": "^2.8.3", + "@types/ms.macro": "^2.0.0", + "@types/multicodec": "^1.0.0", + "@types/node": "^13.13.5", + "@types/qs": "^6.9.2", + "@types/react": "^17.0.2", + "@types/react-dom": "^17.0.1", + "@types/react-redux": "^7.1.16", + "@types/react-router-dom": "^5.0.0", + "@types/react-virtualized-auto-sizer": "^1.0.0", + "@types/react-window": "^1.8.2", + "@types/rebass": "^4.0.7", + "@types/styled-components": "^5.1.0", + "@types/testing-library__cypress": "^5.0.5", + "@types/ua-parser-js": "^0.7.35", + "@types/wcag-contrast": "^3.0.0", + "@typescript-eslint/eslint-plugin": "^4.1.0", + "@typescript-eslint/parser": "^4.1.0", + "@uniswap/default-token-list": "^3.0.0", + "@uniswap/governance": "^1.0.2", + "@uniswap/liquidity-staker": "^1.0.2", + "@uniswap/merkle-distributor": "1.0.1", + "@uniswap/smart-order-router": "^2.5.10", + "@uniswap/v2-core": "1.0.0", + "@uniswap/v2-periphery": "^1.1.0-beta.0", + "@uniswap/v3-core": "1.0.0", + "@uniswap/v3-periphery": "^1.1.1", + "@web3-react/fortmatic-connector": "^6.0.9", + "@web3-react/injected-connector": "^6.0.7", + "@web3-react/portis-connector": "^6.0.9", + "@web3-react/walletconnect-connector": "^7.0.2-alpha.0", + "@web3-react/walletlink-connector": "^6.2.8", + "array.prototype.flat": "^1.2.4", + "array.prototype.flatmap": "^1.2.4", + "copy-to-clipboard": "^3.2.0", + "cross-env": "^7.0.3", + "cypress": "^7.7.0", + "d3": "^7.0.0", + "eslint": "^7.11.0", + "eslint-config-prettier": "^6.11.0", + "eslint-plugin-better-styled-components": "^1.1.2", + "eslint-plugin-prettier": "^3.1.3", + "eslint-plugin-react": "^7.19.0", + "eslint-plugin-react-hooks": "^4.0.0", + "eslint-plugin-simple-import-sort": "^7.0.0", + "eslint-plugin-unused-imports": "^2.0.0", + "firebase": "^9.1.3", + "graphql": "^15.5.0", + "graphql-request": "^3.4.0", + "inter-ui": "^3.13.1", + "jest-styled-components": "^7.0.5", + "polyfill-object.fromentries": "^1.0.1", + "prettier": "^2.2.1", + "qs": "^6.9.4", + "react-confetti": "^6.0.0", + "react-cosmos": "^5.6.6", + "react-ga": "^2.5.7", + "react-is": "^17.0.2", + "react-markdown": "^4.3.1", + "react-router-dom": "^5.0.0", + "react-scripts": "^4.0.3", + "react-spring": "^8.0.27", + "react-use-gesture": "^6.0.14", + "redux-localstorage-simple": "^2.3.1", + "rollup": "^2.63.0", + "rollup-plugin-dts": "^4.1.0", + "rollup-plugin-peer-deps-external": "^2.2.4", + "rollup-plugin-postcss": "^4.0.2", + "rollup-plugin-scss": "^3.0.0", + "rollup-plugin-terser": "^7.0.2", + "rollup-plugin-typescript2": "^0.31.1", + "sass": "^1.45.1", + "serve": "^11.3.2", + "start-server-and-test": "^1.11.0", + "typechain": "^5.0.0", + "typescript": "^4.2.3", + "ua-parser-js": "^0.7.28", + "use-count-up": "^2.2.5", + "use-resize-observer": "^8.0.0", + "wcag-contrast": "^3.0.0", + "web-vitals": "^2.1.0", + "workbox-core": "^6.1.0", + "workbox-precaching": "^6.1.0", + "workbox-routing": "^6.1.0" } } From 9d9fb05ed3a40d0c143f1ca37ef4a7dd01a8c3a8 Mon Sep 17 00:00:00 2001 From: David Wisner Date: Thu, 27 Jan 2022 15:52:52 +0800 Subject: [PATCH 04/15] update types and tsconfig --- dist2/types/components/swap/styleds.d.ts | 2 +- dist2/types/hooks/useActiveWeb3React.d.ts | 9 +------ dist2/types/hooks/useERC20Permit.d.ts | 16 +++++++---- dist2/types/hooks/useSwapCallArguments.d.ts | 21 +++++++++++++++ dist2/types/hooks/useSwapCallback.d.ts | 14 +++------- .../hooks/useV2LiquidityTokenPermit.d.ts | 6 +++++ dist2/types/lib/components/ActionButton.d.ts | 2 +- .../Error/WidgetsPropsValidator.d.ts | 3 +++ dist2/types/lib/components/Row.d.ts | 2 +- .../components/Swap/SwapPropValidator.d.ts | 5 ++++ dist2/types/lib/components/Swap/index.d.ts | 27 +++++++++---------- dist2/types/lib/components/Widget.d.ts | 6 ++--- dist2/types/lib/hooks/swap/index.d.ts | 1 + .../hooks/swap/useSendSwapTransaction.d.ts | 16 +++++++++++ .../types/lib/hooks/swap/useSwapCallback.d.ts | 19 +++++++++++++ .../types/lib/hooks/swap/useSwapDefaults.d.ts | 9 +++++++ dist2/types/lib/index.d.ts | 7 ++--- dist2/types/lib/state/settings.d.ts | 2 ++ dist2/types/lib/state/swap.d.ts | 25 ++++++++++++----- .../utils/swapErrorToUserReadableMessage.d.ts | 7 +++++ tsconfig.base.json | 1 - tsconfig.json | 12 ++++----- 22 files changed, 151 insertions(+), 61 deletions(-) create mode 100644 dist2/types/hooks/useSwapCallArguments.d.ts create mode 100644 dist2/types/hooks/useV2LiquidityTokenPermit.d.ts create mode 100644 dist2/types/lib/components/Error/WidgetsPropsValidator.d.ts create mode 100644 dist2/types/lib/components/Swap/SwapPropValidator.d.ts create mode 100644 dist2/types/lib/hooks/swap/useSendSwapTransaction.d.ts create mode 100644 dist2/types/lib/hooks/swap/useSwapCallback.d.ts create mode 100644 dist2/types/lib/hooks/swap/useSwapDefaults.d.ts create mode 100644 dist2/types/utils/swapErrorToUserReadableMessage.d.ts diff --git a/dist2/types/components/swap/styleds.d.ts b/dist2/types/components/swap/styleds.d.ts index b9939449472..281f6d77f1c 100644 --- a/dist2/types/components/swap/styleds.d.ts +++ b/dist2/types/components/swap/styleds.d.ts @@ -6,7 +6,7 @@ export declare const ArrowWrapper: import("styled-components").StyledComponent<" }, never>; export declare const SectionBreak: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; export declare const ErrorText: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { - severity?: 0 | 2 | 1 | 3 | 4 | undefined; + severity?: 0 | 1 | 2 | 3 | 4 | undefined; }, never>; export declare const TruncatedText: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, {}, never>; export declare const Dots: import("styled-components").StyledComponent<"span", import("styled-components").DefaultTheme, {}, never>; diff --git a/dist2/types/hooks/useActiveWeb3React.d.ts b/dist2/types/hooks/useActiveWeb3React.d.ts index 29840bb2437..349f26e036e 100644 --- a/dist2/types/hooks/useActiveWeb3React.d.ts +++ b/dist2/types/hooks/useActiveWeb3React.d.ts @@ -1,9 +1,2 @@ import { Web3Provider } from '@ethersproject/providers'; -export default function useActiveWeb3React(): { - connector: import("widgets-web3-react/types").Connector; - library: Web3Provider | undefined; - chainId: number | undefined; - account: string | undefined; - active: boolean; - error: Error | undefined; -} | import("@web3-react/core/dist/types").Web3ReactContextInterface; +export default function useActiveWeb3React(): import("@web3-react/core/dist/types").Web3ReactContextInterface; diff --git a/dist2/types/hooks/useERC20Permit.d.ts b/dist2/types/hooks/useERC20Permit.d.ts index f1e14e42be7..6d5d29d401a 100644 --- a/dist2/types/hooks/useERC20Permit.d.ts +++ b/dist2/types/hooks/useERC20Permit.d.ts @@ -1,11 +1,17 @@ +import { BigNumber } from '@ethersproject/bignumber'; import { Trade } from '@uniswap/router-sdk'; -import { Currency, CurrencyAmount, Percent, Token, TradeType } from '@uniswap/sdk-core'; +import { Currency, CurrencyAmount, Percent, TradeType } from '@uniswap/sdk-core'; import { Trade as V2Trade } from '@uniswap/v2-sdk'; import { Trade as V3Trade } from '@uniswap/v3-sdk'; -declare enum PermitType { +export declare enum PermitType { AMOUNT = 1, ALLOWED = 2 } +export interface PermitInfo { + type: PermitType; + name: string; + version?: string; +} export declare enum UseERC20PermitState { NOT_APPLICABLE = 0, LOADING = 1, @@ -31,12 +37,12 @@ interface AllowedSignatureData extends BaseSignatureData { allowed: true; } export declare type SignatureData = StandardSignatureData | AllowedSignatureData; -export declare function useV2LiquidityTokenPermit(liquidityAmount: CurrencyAmount | null | undefined, spender: string | null | undefined): { +export declare function useERC20Permit(currencyAmount: CurrencyAmount | null | undefined, spender: string | null | undefined, transactionDeadline: BigNumber | undefined, overridePermitInfo: PermitInfo | undefined | null): { signatureData: SignatureData | null; state: UseERC20PermitState; - gatherPermitSignature: (() => Promise) | null; + gatherPermitSignature: null | (() => Promise); }; -export declare function useERC20PermitFromTrade(trade: V2Trade | V3Trade | Trade | undefined, allowedSlippage: Percent): { +export declare function useERC20PermitFromTrade(trade: V2Trade | V3Trade | Trade | undefined, allowedSlippage: Percent, transactionDeadline: BigNumber | undefined): { signatureData: SignatureData | null; state: UseERC20PermitState; gatherPermitSignature: (() => Promise) | null; diff --git a/dist2/types/hooks/useSwapCallArguments.d.ts b/dist2/types/hooks/useSwapCallArguments.d.ts new file mode 100644 index 00000000000..a291cc4c261 --- /dev/null +++ b/dist2/types/hooks/useSwapCallArguments.d.ts @@ -0,0 +1,21 @@ +import { BigNumber } from '@ethersproject/bignumber'; +import { Trade } from '@uniswap/router-sdk'; +import { Currency, Percent, TradeType } from '@uniswap/sdk-core'; +import { Trade as V2Trade } from '@uniswap/v2-sdk'; +import { Trade as V3Trade } from '@uniswap/v3-sdk'; +import { SignatureData } from './useERC20Permit'; +export declare type AnyTrade = V2Trade | V3Trade | Trade; +interface SwapCall { + address: string; + calldata: string; + value: string; +} +/** + * Returns the swap calls that can be used to make the trade + * @param trade trade to execute + * @param allowedSlippage user allowed slippage + * @param recipientAddressOrName the ENS name or address of the recipient of the swap output + * @param signatureData the signature data of the permit of the input token amount, if available + */ +export declare function useSwapCallArguments(trade: AnyTrade | undefined, allowedSlippage: Percent, recipientAddressOrName: string | null | undefined, signatureData: SignatureData | null | undefined, deadline: BigNumber | undefined): SwapCall[]; +export {}; diff --git a/dist2/types/hooks/useSwapCallback.d.ts b/dist2/types/hooks/useSwapCallback.d.ts index 771451dd535..f5907287065 100644 --- a/dist2/types/hooks/useSwapCallback.d.ts +++ b/dist2/types/hooks/useSwapCallback.d.ts @@ -1,15 +1,8 @@ -import { Trade } from '@uniswap/router-sdk'; -import { Currency, Percent, TradeType } from '@uniswap/sdk-core'; -import { Trade as V2Trade } from '@uniswap/v2-sdk'; -import { Trade as V3Trade } from '@uniswap/v3-sdk'; +import { Percent } from '@uniswap/sdk-core'; +import { SwapCallbackState } from 'lib/hooks/swap/useSwapCallback'; import { ReactNode } from 'react'; import { SignatureData } from './useERC20Permit'; -declare type AnyTrade = V2Trade | V3Trade | Trade; -declare enum SwapCallbackState { - INVALID = 0, - LOADING = 1, - VALID = 2 -} +import { AnyTrade } from './useSwapCallArguments'; export declare function useSwapCallback(trade: AnyTrade | undefined, // trade to execute, required allowedSlippage: Percent, // in bips recipientAddressOrName: string | null, // the ENS name or address of the recipient of the trade, or null if swap should be returned to sender @@ -18,4 +11,3 @@ signatureData: SignatureData | undefined | null): { callback: null | (() => Promise); error: ReactNode | null; }; -export {}; diff --git a/dist2/types/hooks/useV2LiquidityTokenPermit.d.ts b/dist2/types/hooks/useV2LiquidityTokenPermit.d.ts new file mode 100644 index 00000000000..431d402adb0 --- /dev/null +++ b/dist2/types/hooks/useV2LiquidityTokenPermit.d.ts @@ -0,0 +1,6 @@ +import { CurrencyAmount, Token } from '@uniswap/sdk-core'; +export declare function useV2LiquidityTokenPermit(liquidityAmount: CurrencyAmount | null | undefined, spender: string | null | undefined): { + signatureData: import("./useERC20Permit").SignatureData | null; + state: import("./useERC20Permit").UseERC20PermitState; + gatherPermitSignature: (() => Promise) | null; +}; diff --git a/dist2/types/lib/components/ActionButton.d.ts b/dist2/types/lib/components/ActionButton.d.ts index 8c2c7d4cc13..0021320908c 100644 --- a/dist2/types/lib/components/ActionButton.d.ts +++ b/dist2/types/lib/components/ActionButton.d.ts @@ -8,7 +8,7 @@ export declare const Overlay: import("styled-components").StyledComponent<"div", pad?: number | undefined; gap?: number | undefined; flex?: true | undefined; - grow?: true | undefined; + grow?: true | "first" | "last" | undefined; children?: ReactNode; theme: import("lib/theme").Theme; } & { diff --git a/dist2/types/lib/components/Error/WidgetsPropsValidator.d.ts b/dist2/types/lib/components/Error/WidgetsPropsValidator.d.ts new file mode 100644 index 00000000000..a4e08e824b5 --- /dev/null +++ b/dist2/types/lib/components/Error/WidgetsPropsValidator.d.ts @@ -0,0 +1,3 @@ +import { WidgetProps } from 'lib/components/Widget'; +import { PropsWithChildren } from 'react'; +export default function WidgetsPropsValidator(props: PropsWithChildren): JSX.Element; diff --git a/dist2/types/lib/components/Row.d.ts b/dist2/types/lib/components/Row.d.ts index 649c1478f66..8fd1a815ce1 100644 --- a/dist2/types/lib/components/Row.d.ts +++ b/dist2/types/lib/components/Row.d.ts @@ -7,7 +7,7 @@ declare const Row: import("styled-components").StyledComponent<"div", import(".. pad?: number | undefined; gap?: number | undefined; flex?: true | undefined; - grow?: true | undefined; + grow?: true | "first" | "last" | undefined; children?: ReactNode; theme: Theme; }, never>; diff --git a/dist2/types/lib/components/Swap/SwapPropValidator.d.ts b/dist2/types/lib/components/Swap/SwapPropValidator.d.ts new file mode 100644 index 00000000000..134fb63b69c --- /dev/null +++ b/dist2/types/lib/components/Swap/SwapPropValidator.d.ts @@ -0,0 +1,5 @@ +import { SwapProps } from 'lib/components/Swap'; +import { PropsWithChildren } from 'react'; +declare type ValidatorProps = PropsWithChildren; +export default function SwapPropValidator(props: ValidatorProps): JSX.Element; +export {}; diff --git a/dist2/types/lib/components/Swap/index.d.ts b/dist2/types/lib/components/Swap/index.d.ts index ca3dc8ea202..43b8f698115 100644 --- a/dist2/types/lib/components/Swap/index.d.ts +++ b/dist2/types/lib/components/Swap/index.d.ts @@ -1,20 +1,17 @@ /// import { TokenInfo } from '@uniswap/token-lists'; -interface DefaultTokenAmount { - address?: string | { - [chainId: number]: string; - }; - amount?: number; -} -interface SwapDefaults { - tokenList: string | TokenInfo[]; - input: DefaultTokenAmount; - output: DefaultTokenAmount; -} +export declare type DefaultAddress = string | { + [chainId: number]: string | 'NATIVE'; +} | 'NATIVE'; export interface SwapProps { + tokenList?: string | TokenInfo[]; + defaultInputAddress?: DefaultAddress; + defaultInputAmount?: string; + defaultOutputAddress?: DefaultAddress; + defaultOutputAmount?: string; convenienceFee?: number; - convenienceFeeRecipient?: string; - defaults?: Partial; + convenienceFeeRecipient?: string | { + [chainId: number]: string; + }; } -export default function Swap({ defaults }: SwapProps): JSX.Element; -export {}; +export default function Swap(props: SwapProps): JSX.Element; diff --git a/dist2/types/lib/components/Widget.d.ts b/dist2/types/lib/components/Widget.d.ts index baf16907b76..6126d1b3677 100644 --- a/dist2/types/lib/components/Widget.d.ts +++ b/dist2/types/lib/components/Widget.d.ts @@ -1,9 +1,9 @@ import { SupportedLocale } from 'constants/locales'; import { Theme } from 'lib/theme'; -import { ComponentProps, JSXElementConstructor, PropsWithChildren } from 'react'; +import { PropsWithChildren } from 'react'; import { Provider as EthProvider } from 'widgets-web3-react/types'; import { ErrorHandler } from './Error/ErrorBoundary'; -export declare type WidgetProps | undefined = undefined> = { +export declare type WidgetProps = { theme?: Theme; locale?: SupportedLocale; provider?: EthProvider; @@ -12,5 +12,5 @@ export declare type WidgetProps | undefined dialog?: HTMLElement | null; className?: string; onError?: ErrorHandler; -} & (T extends JSXElementConstructor ? ComponentProps : {}); +}; export default function Widget(props: PropsWithChildren): JSX.Element; diff --git a/dist2/types/lib/hooks/swap/index.d.ts b/dist2/types/lib/hooks/swap/index.d.ts index 8176899d342..536335a16d3 100644 --- a/dist2/types/lib/hooks/swap/index.d.ts +++ b/dist2/types/lib/hooks/swap/index.d.ts @@ -1,6 +1,7 @@ import { Currency } from '@uniswap/sdk-core'; import { Field } from 'lib/state/swap'; export { default as useSwapInfo } from './useSwapInfo'; +export declare const amountAtom: import("jotai").WritableAtom; export declare function useSwitchSwapCurrencies(): () => void; export declare function useSwapCurrency(field: Field): [Currency | undefined, (currency?: Currency) => void]; export declare function useSwapAmount(field: Field): [string | undefined, (amount: string) => void]; diff --git a/dist2/types/lib/hooks/swap/useSendSwapTransaction.d.ts b/dist2/types/lib/hooks/swap/useSendSwapTransaction.d.ts new file mode 100644 index 00000000000..64d7d323bc4 --- /dev/null +++ b/dist2/types/lib/hooks/swap/useSendSwapTransaction.d.ts @@ -0,0 +1,16 @@ +import { TransactionResponse, Web3Provider } from '@ethersproject/providers'; +import { Trade } from '@uniswap/router-sdk'; +import { Currency, TradeType } from '@uniswap/sdk-core'; +import { Trade as V2Trade } from '@uniswap/v2-sdk'; +import { Trade as V3Trade } from '@uniswap/v3-sdk'; +declare type AnyTrade = V2Trade | V3Trade | Trade; +interface SwapCall { + address: string; + calldata: string; + value: string; +} +export default function useSendSwapTransaction(account: string | null | undefined, chainId: number | undefined, library: Web3Provider | undefined, trade: AnyTrade | undefined, // trade to execute, required +swapCalls: SwapCall[]): { + callback: null | (() => Promise); +}; +export {}; diff --git a/dist2/types/lib/hooks/swap/useSwapCallback.d.ts b/dist2/types/lib/hooks/swap/useSwapCallback.d.ts new file mode 100644 index 00000000000..b8d7d94f274 --- /dev/null +++ b/dist2/types/lib/hooks/swap/useSwapCallback.d.ts @@ -0,0 +1,19 @@ +import { BigNumber } from '@ethersproject/bignumber'; +import { TransactionResponse } from '@ethersproject/providers'; +import { Percent } from '@uniswap/sdk-core'; +import { SignatureData } from 'hooks/useERC20Permit'; +import { AnyTrade } from 'hooks/useSwapCallArguments'; +import { ReactNode } from 'react'; +export declare enum SwapCallbackState { + INVALID = 0, + LOADING = 1, + VALID = 2 +} +export declare function useSwapCallback(trade: AnyTrade | undefined, // trade to execute, required +allowedSlippage: Percent, // in bips +recipientAddressOrName: string | null | undefined, // the ENS name or address of the recipient of the trade, or null if swap should be returned to sender +signatureData: SignatureData | null | undefined, deadline: BigNumber | undefined): { + state: SwapCallbackState; + callback: null | (() => Promise); + error: ReactNode | null; +}; diff --git a/dist2/types/lib/hooks/swap/useSwapDefaults.d.ts b/dist2/types/lib/hooks/swap/useSwapDefaults.d.ts new file mode 100644 index 00000000000..60870c9a023 --- /dev/null +++ b/dist2/types/lib/hooks/swap/useSwapDefaults.d.ts @@ -0,0 +1,9 @@ +import { DefaultAddress } from 'lib/components/Swap'; +interface UseSwapDefaultsArgs { + defaultInputAddress?: DefaultAddress; + defaultInputAmount?: string; + defaultOutputAddress?: DefaultAddress; + defaultOutputAmount?: string; +} +export default function useSwapDefaults({ defaultInputAddress, defaultInputAmount, defaultOutputAddress, defaultOutputAmount, }: UseSwapDefaultsArgs): void; +export {}; diff --git a/dist2/types/lib/index.d.ts b/dist2/types/lib/index.d.ts index 61fa261a2fe..c33ec002efe 100644 --- a/dist2/types/lib/index.d.ts +++ b/dist2/types/lib/index.d.ts @@ -1,5 +1,6 @@ /// -import Swap from './components/Swap'; +import { SwapProps } from './components/Swap'; import { WidgetProps } from './components/Widget'; -export declare type SwapWidgetProps = WidgetProps; -export declare function SwapWidget({ ...props }: SwapWidgetProps): JSX.Element; +declare type SwapWidgetProps = SwapProps & WidgetProps; +export declare function SwapWidget(props: SwapWidgetProps): JSX.Element; +export {}; diff --git a/dist2/types/lib/state/settings.d.ts b/dist2/types/lib/state/settings.d.ts index 327d88d3a9d..d1c995e57d9 100644 --- a/dist2/types/lib/state/settings.d.ts +++ b/dist2/types/lib/state/settings.d.ts @@ -3,12 +3,14 @@ export declare const TRANSACTION_TTL_DEFAULT = 40; interface Settings { maxSlippage: Percent | 'auto'; transactionTtl: number | undefined; + integratorFee: number | undefined; mockTogglable: boolean; clientSideRouter: boolean; } export declare const settingsAtom: import("jotai").WritableAtom Settings), void>; export declare const maxSlippageAtom: import("jotai").WritableAtom; export declare const transactionTtlAtom: import("jotai").WritableAtom; +export declare const integratorFeeAtom: import("jotai").WritableAtom; export declare const mockTogglableAtom: import("jotai").WritableAtom; export declare const clientSideRouterAtom: import("jotai").WritableAtom; export {}; diff --git a/dist2/types/lib/state/swap.d.ts b/dist2/types/lib/state/swap.d.ts index 3c2d8b87c8a..61bddc515f3 100644 --- a/dist2/types/lib/state/swap.d.ts +++ b/dist2/types/lib/state/swap.d.ts @@ -5,12 +5,25 @@ export declare enum Field { } export interface Swap { independentField: Field; - readonly amount: string; - readonly [Field.INPUT]?: Currency; - readonly [Field.OUTPUT]?: Currency; - integratorFee?: number; + amount: string; + [Field.INPUT]?: Currency; + [Field.OUTPUT]?: Currency; } export declare const swapAtom: import("jotai").WritableAtom) => void), void>; export declare const independentFieldAtom: import("jotai").WritableAtom; -export declare const integratorFeeAtom: import("jotai").WritableAtom; -export declare const amountAtom: import("jotai").WritableAtom; +export declare const displayTxHashAtom: import("jotai").Atom & { + write: (get: { + (atom: import("jotai").Atom>): Value; + (atom: import("jotai").Atom>): Value_1; + (atom: import("jotai").Atom): Value_2 extends Promise ? V : Value_2; + } & { + (atom: import("jotai").Atom>, unstable_promise: true): Value_3 | Promise; + (atom: import("jotai").Atom>, unstable_promise: true): Value_4 | Promise; + }, set: { + >(atom: import("jotai").WritableAtom): Result; + >(atom: import("jotai").WritableAtom, update: Update): Result_1; + }, update: string | ((prev: string | undefined) => string | undefined) | undefined) => void; + onMount?: ( string | undefined) | undefined) => void>(setAtom: S) => void | (() => void)) | undefined; +} & { + init: string | undefined; +}; diff --git a/dist2/types/utils/swapErrorToUserReadableMessage.d.ts b/dist2/types/utils/swapErrorToUserReadableMessage.d.ts new file mode 100644 index 00000000000..071e3004bd9 --- /dev/null +++ b/dist2/types/utils/swapErrorToUserReadableMessage.d.ts @@ -0,0 +1,7 @@ +import { ReactNode } from 'react'; +/** + * This is hacking out the revert reason from the ethers provider thrown error however it can. + * This object seems to be undocumented by ethers. + * @param error an error from the ethers provider + */ +export declare function swapErrorToUserReadableMessage(error: any): ReactNode; diff --git a/tsconfig.base.json b/tsconfig.base.json index a8bf67f8349..c7dce16414a 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -5,7 +5,6 @@ "allowJs": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - "noEmit": true, "esModuleInterop": true, "module": "esnext", "strict": true, diff --git a/tsconfig.json b/tsconfig.json index 64c26c7e38e..d28b310287d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,12 +2,12 @@ "extends": "./tsconfig.base.json", "compilerOptions": { "jsx": "react-jsx", - "baseUrl": "src" - // "outDir": "dist2", - // "moduleResolution": "node", - // "declaration": true, - // "declarationDir": "dist2/types" - // "emitDeclarationOnly": true + "baseUrl": "src", + "outDir": "dist2", + "moduleResolution": "node", + "declaration": true, + "declarationDir": "dist2/types", + "emitDeclarationOnly": true }, "exclude": ["node_modules", "cypress", "src/**/*.test.*"], "include": ["src/**/*"] From ee1338c81a2c73d9938e225b8b96abd2fc298260 Mon Sep 17 00:00:00 2001 From: Lint Action Date: Thu, 27 Jan 2022 08:50:48 +0000 Subject: [PATCH 05/15] Fix code style issues with ESLint --- dist2/snowflake.js | 45501 +++++++++++++++++++++++++++---------------- 1 file changed, 29135 insertions(+), 16366 deletions(-) diff --git a/dist2/snowflake.js b/dist2/snowflake.js index c79256bdd6d..5f17b27edca 100644 --- a/dist2/snowflake.js +++ b/dist2/snowflake.js @@ -1,16414 +1,29183 @@ -'use strict'; - -Object.defineProperty(exports, '__esModule', { value: true }); - -var jsxRuntime = require('react/jsx-runtime'); -var macro = require('@lingui/macro'); -var v2Sdk = require('@uniswap/v2-sdk'); -var v3Sdk = require('@uniswap/v3-sdk'); -var core = require('@web3-react/core'); -var sdkCore = require('@uniswap/sdk-core'); -var JSBI = require('jsbi'); -var reactFeather = require('react-feather'); -var React = require('react'); -var reactRedux = require('react-redux'); -var bytes = require('@ethersproject/bytes'); -var strings = require('@ethersproject/strings'); -var address = require('@ethersproject/address'); -var constants = require('@ethersproject/constants'); -var contracts = require('@ethersproject/contracts'); -var jotai = require('jotai'); -var utils = require('jotai/utils'); -var reduxMulticall = require('@uniswap/redux-multicall'); -var redux = require('redux'); -var core$1 = require('widgets-web3-react/core'); -var empty = require('widgets-web3-react/empty'); -var hash = require('@ethersproject/hash'); -var CID = require('cids'); -var multicodec = require('multicodec'); -var multihashes = require('multihashes'); -var abi$6 = require('@ethersproject/abi'); -var toolkit = require('@reduxjs/toolkit'); -var styled = require('styled-components/macro'); -var rebass = require('rebass'); -var ReactGA = require('react-ga'); -var reactRouterDom = require('react-router-dom'); -var styledComponents = require('rebass/styled-components'); -var reactSpring = require('react-spring'); -var useResizeObserver = require('use-resize-observer'); -var polished = require('polished'); -var Portal = require('@reach/portal'); -var reactPopper = require('react-popper'); -var units = require('@ethersproject/units'); -var routerSdk = require('@uniswap/router-sdk'); -var dialog = require('@reach/dialog'); -var reactUseGesture = require('react-use-gesture'); -var uaParserJs = require('ua-parser-js'); -var app = require('firebase/app'); -var database = require('firebase/database'); -var AutoSizer = require('react-virtualized-auto-sizer'); -var reactWindow = require('react-window'); -var safeAppsWeb3React = require('@gnosis.pm/safe-apps-web3-react'); -var injectedConnector = require('@web3-react/injected-connector'); -var portisConnector = require('@web3-react/portis-connector'); -var walletconnectConnector = require('@web3-react/walletconnect-connector'); -var walletlinkConnector = require('@web3-react/walletlink-connector'); -var providers = require('@ethersproject/providers'); -var ms = require('ms.macro'); -var fortmaticConnector = require('@web3-react/fortmatic-connector'); -var abstractConnector = require('@web3-react/abstract-connector'); -var invariant = require('tiny-invariant'); -var Vibrant = require('node-vibrant/lib/bundle'); -var wcagContrast = require('wcag-contrast'); -var qs = require('qs'); -var react = require('@reduxjs/toolkit/query/react'); -var reduxLocalstorageSimple = require('redux-localstorage-simple'); -var graphqlRequest = require('graphql-request'); -var tokenLists = require('@uniswap/token-lists'); -var smartOrderRouter = require('@uniswap/smart-order-router'); -var ethers = require('ethers/lib/ethers'); - -function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } +Object.defineProperty(exports, '__esModule', { value: true }) + +var jsxRuntime = require('react/jsx-runtime') +var macro = require('@lingui/macro') +var v2Sdk = require('@uniswap/v2-sdk') +var v3Sdk = require('@uniswap/v3-sdk') +var core = require('@web3-react/core') +var sdkCore = require('@uniswap/sdk-core') +var JSBI = require('jsbi') +var reactFeather = require('react-feather') +var React = require('react') +var reactRedux = require('react-redux') +var bytes = require('@ethersproject/bytes') +var strings = require('@ethersproject/strings') +var address = require('@ethersproject/address') +var constants = require('@ethersproject/constants') +var contracts = require('@ethersproject/contracts') +var jotai = require('jotai') +var utils = require('jotai/utils') +var reduxMulticall = require('@uniswap/redux-multicall') +var redux = require('redux') +var core$1 = require('widgets-web3-react/core') +var empty = require('widgets-web3-react/empty') +var hash = require('@ethersproject/hash') +var CID = require('cids') +var multicodec = require('multicodec') +var multihashes = require('multihashes') +var abi$6 = require('@ethersproject/abi') +var toolkit = require('@reduxjs/toolkit') +var styled = require('styled-components/macro') +var rebass = require('rebass') +var ReactGA = require('react-ga') +var reactRouterDom = require('react-router-dom') +var styledComponents = require('rebass/styled-components') +var reactSpring = require('react-spring') +var useResizeObserver = require('use-resize-observer') +var polished = require('polished') +var Portal = require('@reach/portal') +var reactPopper = require('react-popper') +var units = require('@ethersproject/units') +var routerSdk = require('@uniswap/router-sdk') +var dialog = require('@reach/dialog') +var reactUseGesture = require('react-use-gesture') +var uaParserJs = require('ua-parser-js') +var app = require('firebase/app') +var database = require('firebase/database') +var AutoSizer = require('react-virtualized-auto-sizer') +var reactWindow = require('react-window') +var safeAppsWeb3React = require('@gnosis.pm/safe-apps-web3-react') +var injectedConnector = require('@web3-react/injected-connector') +var portisConnector = require('@web3-react/portis-connector') +var walletconnectConnector = require('@web3-react/walletconnect-connector') +var walletlinkConnector = require('@web3-react/walletlink-connector') +var providers = require('@ethersproject/providers') +var ms = require('ms.macro') +var fortmaticConnector = require('@web3-react/fortmatic-connector') +var abstractConnector = require('@web3-react/abstract-connector') +var invariant = require('tiny-invariant') +var Vibrant = require('node-vibrant/lib/bundle') +var wcagContrast = require('wcag-contrast') +var qs = require('qs') +var react = require('@reduxjs/toolkit/query/react') +var reduxLocalstorageSimple = require('redux-localstorage-simple') +var graphqlRequest = require('graphql-request') +var tokenLists = require('@uniswap/token-lists') +var smartOrderRouter = require('@uniswap/smart-order-router') +var ethers = require('ethers/lib/ethers') + +function _interopDefaultLegacy(e) { + return e && typeof e === 'object' && 'default' in e ? e : { default: e } +} function _interopNamespace(e) { - if (e && e.__esModule) return e; - var n = Object.create(null); - if (e) { - Object.keys(e).forEach(function (k) { - if (k !== 'default') { - var d = Object.getOwnPropertyDescriptor(e, k); - Object.defineProperty(n, k, d.get ? d : { - enumerable: true, - get: function () { return e[k]; } - }); - } - }); - } - n["default"] = e; - return Object.freeze(n); + if (e && e.__esModule) return e + var n = Object.create(null) + if (e) { + Object.keys(e).forEach(function (k) { + if (k !== 'default') { + var d = Object.getOwnPropertyDescriptor(e, k) + Object.defineProperty( + n, + k, + d.get + ? d + : { + enumerable: true, + get() { + return e[k] + }, + } + ) + } + }) + } + n['default'] = e + return Object.freeze(n) } function _mergeNamespaces(n, m) { - m.forEach(function (e) { - e && typeof e !== 'string' && !Array.isArray(e) && Object.keys(e).forEach(function (k) { - if (k !== 'default' && !(k in n)) { - var d = Object.getOwnPropertyDescriptor(e, k); - Object.defineProperty(n, k, d.get ? d : { - enumerable: true, - get: function () { return e[k]; } - }); + m.forEach(function (e) { + e && + typeof e !== 'string' && + !Array.isArray(e) && + Object.keys(e).forEach(function (k) { + if (k !== 'default' && !(k in n)) { + var d = Object.getOwnPropertyDescriptor(e, k) + Object.defineProperty( + n, + k, + d.get + ? d + : { + enumerable: true, + get() { + return e[k] + }, + } + ) + } + }) + }) + return Object.freeze(n) +} + +var JSBI__default = /*#__PURE__*/ _interopDefaultLegacy(JSBI) +var React__namespace = /*#__PURE__*/ _interopNamespace(React) +var React__default = /*#__PURE__*/ _interopDefaultLegacy(React) +var CID__default = /*#__PURE__*/ _interopDefaultLegacy(CID) +var styled__default = /*#__PURE__*/ _interopDefaultLegacy(styled) +var ReactGA__default = /*#__PURE__*/ _interopDefaultLegacy(ReactGA) +var useResizeObserver__default = /*#__PURE__*/ _interopDefaultLegacy(useResizeObserver) +var Portal__default = /*#__PURE__*/ _interopDefaultLegacy(Portal) +var AutoSizer__default = /*#__PURE__*/ _interopDefaultLegacy(AutoSizer) +var ms__default = /*#__PURE__*/ _interopDefaultLegacy(ms) +var invariant__default = /*#__PURE__*/ _interopDefaultLegacy(invariant) +var Vibrant__default = /*#__PURE__*/ _interopDefaultLegacy(Vibrant) +var qs__default = /*#__PURE__*/ _interopDefaultLegacy(qs) + +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ +/* global Reflect, Promise */ + +var extendStatics = function (d, b) { + extendStatics = + Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && + function (d, b) { + d.__proto__ = b + }) || + function (d, b) { + for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p] + } + return extendStatics(d, b) +} + +function __extends(d, b) { + if (typeof b !== 'function' && b !== null) + throw new TypeError('Class extends value ' + String(b) + ' is not a constructor or null') + extendStatics(d, b) + function __() { + this.constructor = d + } + d.prototype = b === null ? Object.create(b) : ((__.prototype = b.prototype), new __()) +} + +var __assign = function () { + __assign = + Object.assign || + function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i] + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p] + } + return t + } + return __assign.apply(this, arguments) +} + +function __rest(s, e) { + var t = {} + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p] + if (s != null && typeof Object.getOwnPropertySymbols === 'function') + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { + if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]] + } + return t +} + +function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P + ? value + : new P(function (resolve) { + resolve(value) + }) + } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)) + } catch (e) { + reject(e) + } + } + function rejected(value) { + try { + step(generator['throw'](value)) + } catch (e) { + reject(e) + } + } + function step(result) { + result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected) + } + step((generator = generator.apply(thisArg, _arguments || [])).next()) + }) +} + +function __generator(thisArg, body) { + var _ = { + label: 0, + sent() { + if (t[0] & 1) throw t[1] + return t[1] + }, + trys: [], + ops: [], + }, + f, + y, + t, + g + return ( + (g = { next: verb(0), throw: verb(1), return: verb(2) }), + typeof Symbol === 'function' && + (g[Symbol.iterator] = function () { + return this + }), + g + ) + function verb(n) { + return function (v) { + return step([n, v]) + } + } + function step(op) { + if (f) throw new TypeError('Generator is already executing.') + while (_) + try { + if ( + ((f = 1), + y && + (t = op[0] & 2 ? y['return'] : op[0] ? y['throw'] || ((t = y['return']) && t.call(y), 0) : y.next) && + !(t = t.call(y, op[1])).done) + ) + return t + if (((y = 0), t)) op = [op[0] & 2, t.value] + switch (op[0]) { + case 0: + case 1: + t = op + break + case 4: + _.label++ + return { value: op[1], done: false } + case 5: + _.label++ + y = op[1] + op = [0] + continue + case 7: + op = _.ops.pop() + _.trys.pop() + continue + default: + if (!((t = _.trys), (t = t.length > 0 && t[t.length - 1])) && (op[0] === 6 || op[0] === 2)) { + _ = 0 + continue } - }); - }); - return Object.freeze(n); -} - -var JSBI__default = /*#__PURE__*/_interopDefaultLegacy(JSBI); -var React__namespace = /*#__PURE__*/_interopNamespace(React); -var React__default = /*#__PURE__*/_interopDefaultLegacy(React); -var CID__default = /*#__PURE__*/_interopDefaultLegacy(CID); -var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled); -var ReactGA__default = /*#__PURE__*/_interopDefaultLegacy(ReactGA); -var useResizeObserver__default = /*#__PURE__*/_interopDefaultLegacy(useResizeObserver); -var Portal__default = /*#__PURE__*/_interopDefaultLegacy(Portal); -var AutoSizer__default = /*#__PURE__*/_interopDefaultLegacy(AutoSizer); -var ms__default = /*#__PURE__*/_interopDefaultLegacy(ms); -var invariant__default = /*#__PURE__*/_interopDefaultLegacy(invariant); -var Vibrant__default = /*#__PURE__*/_interopDefaultLegacy(Vibrant); -var qs__default = /*#__PURE__*/_interopDefaultLegacy(qs); - -/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */ -/* global Reflect, Promise */ - -var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); -}; - -function __extends(d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); -} - -var __assign = function() { - __assign = Object.assign || function __assign(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); -}; - -function __rest(s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -} - -function __awaiter(thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -} - -function __generator(thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -} - -function __values(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -} - -function __read(o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; -} - -function __spreadArray(to, from, pack) { - if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { - if (ar || !(i in from)) { - if (!ar) ar = Array.prototype.slice.call(from, 0, i); - ar[i] = from[i]; - } - } - return to.concat(ar || Array.prototype.slice.call(from)); -} - -function __makeTemplateObject(cooked, raw) { - if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } - return cooked; -} - -var EthereumLogo = "data:image/png;base64,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"; - -var arbitrumLogoUrl = "data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20viewBox%3D%220%200%20470.287%20514.251%22%20enable-background%3D%22new%200%200%20470.287%20514.251%22%20xml%3Aspace%3D%22preserve%22%3E%3Cg%20id%3D%22Background%22%3E%3C%2Fg%3E%3Cg%20id%3D%22Logos_and_symbols%22%3E%20%3Cg%20id%3D%22SYMBOL_VER_3%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_4_3_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_1_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_1_%22%3E%20%20%3Cg%20id%3D%22_x31_-3%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_14_%22%3E%20%20%20%3Cpath%20fill%3D%22%232D374B%22%20d%3D%22M291.134%2C237.469l35.654-60.5l96.103%2C149.684l0.046%2C28.727l-0.313-197.672%20%20%20%20c-0.228-4.832-2.794-9.252-6.887-11.859L242.715%2C46.324c-4.045-1.99-9.18-1.967-13.22%2C0.063c-0.546%2C0.272-1.06%2C0.57-1.548%2C0.895%20%20%20%20l-0.604%2C0.379L59.399%2C144.983l-0.651%2C0.296c-0.838%2C0.385-1.686%2C0.875-2.48%2C1.444c-3.185%2C2.283-5.299%2C5.66-5.983%2C9.448%20%20%20%20c-0.103%2C0.574-0.179%2C1.158-0.214%2C1.749l0.264%2C161.083l89.515-138.745c11.271-18.397%2C35.825-24.323%2C58.62-24.001l26.753%2C0.706%20%20%20%20L67.588%2C409.765l18.582%2C10.697L245.692%2C157.22l70.51-0.256L157.091%2C426.849l66.306%2C38.138l7.922%2C4.556%20%20%20%20c3.351%2C1.362%2C7.302%2C1.431%2C10.681%2C0.21l175.453-101.678l-33.544%2C19.438L291.134%2C237.469z%20M304.736%2C433.395l-66.969-105.108%20%20%20%20l40.881-69.371l87.952%2C138.628L304.736%2C433.395z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%2328A0F0%22%20points%3D%22237.768%2C328.286%20304.736%2C433.395%20366.601%2C397.543%20278.648%2C258.915%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2328A0F0%22%20d%3D%22M422.937%2C355.379l-0.046-28.727l-96.103-149.684l-35.654%2C60.5l92.774%2C150.043l33.544-19.438%20%20%20%20c3.29-2.673%2C5.281-6.594%2C5.49-10.825L422.937%2C355.379z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23FFFFFF%22%20d%3D%22M20.219%2C382.469l47.369%2C27.296l157.634-252.801l-26.753-0.706c-22.795-0.322-47.35%2C5.604-58.62%2C24.001%20%20%20%20L50.334%2C319.004l-30.115%2C46.271V382.469z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%23FFFFFF%22%20points%3D%22316.202%2C156.964%20245.692%2C157.22%2086.17%2C420.462%20141.928%2C452.565%20157.091%2C426.849%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2396BEDC%22%20d%3D%22M452.65%2C156.601c-0.59-14.746-8.574-28.245-21.08-36.104L256.28%2C19.692%20%20%20%20c-12.371-6.229-27.825-6.237-40.218-0.004c-1.465%2C0.739-170.465%2C98.752-170.465%2C98.752c-2.339%2C1.122-4.592%2C2.458-6.711%2C3.975%20%20%20%20c-11.164%2C8.001-17.969%2C20.435-18.668%2C34.095v208.765l30.115-46.271L50.07%2C157.921c0.035-0.589%2C0.109-1.169%2C0.214-1.741%20%20%20%20c0.681-3.79%2C2.797-7.171%2C5.983-9.456c0.795-0.569%2C172.682-100.064%2C173.228-100.337c4.04-2.029%2C9.175-2.053%2C13.22-0.063%20%20%20%20l173.022%2C99.523c4.093%2C2.607%2C6.659%2C7.027%2C6.887%2C11.859v199.542c-0.209%2C4.231-1.882%2C8.152-5.172%2C10.825l-33.544%2C19.438%20%20%20%20l-17.308%2C10.031l-61.864%2C35.852l-62.737%2C36.357c-3.379%2C1.221-7.33%2C1.152-10.681-0.21l-74.228-42.693l-15.163%2C25.717%20%20%20%20l66.706%2C38.406c2.206%2C1.255%2C4.171%2C2.367%2C5.784%2C3.272c2.497%2C1.4%2C4.199%2C2.337%2C4.8%2C2.629c4.741%2C2.303%2C11.563%2C3.643%2C17.71%2C3.643%20%20%20%20c5.636%2C0%2C11.132-1.035%2C16.332-3.072l182.225-105.531c10.459-8.104%2C16.612-20.325%2C17.166-33.564V156.601z%22%2F%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_13_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_6_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_3_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_15_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_3_%22%3E%20%20%20%3Cg%20id%3D%22_x33__7_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic%22%3E%20%20%20%3Cg%20id%3D%22_x33__3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_10_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x34__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_2_%22%3E%20%20%20%3Cg%20id%3D%22_x33__6_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_2_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_11_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_5_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_12_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_1_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_9_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_2_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol_1_%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_1_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_7_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_8_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Monochromatic_1_%22%3E%20%20%3Cg%20id%3D%22_x33__4_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E"; - -var optimismLogoUrl = "data:image/svg+xml,%3Csvg%20width%3D%22170%22%20height%3D%22168%22%20viewBox%3D%220%200%20170%20168%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20clip-path%3D%22url%28%23clip0%29%22%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF505F%22%2F%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF0320%22%2F%3E%3Cpath%20d%3D%22M85.05%200C132.022%200%20170.1%2037.8949%20170.1%2084.6407C170.1%20131.386%200%20131.386%200%2084.6407C0%2037.8949%2038.0782%200%2085.05%200Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.665%2064.0394L112.444%2012.3742L89.0263%2078.9477L144.665%2064.0394Z%22%20fill%3D%22%23FF4E65%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.777%2064.215L112.444%2012.3742L165.349%2058.4347L143.777%2064.215Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.551%2063.613L142.479%20124.467L88.912%2078.5213L144.551%2063.613Z%22%20fill%3D%22%23D0001A%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.663%2063.7886L142.479%20124.467L165.235%2058.0083L143.663%2063.7886Z%22%20fill%3D%22%23FF697B%22%2F%3E%3C%2Fg%3E%3Cdefs%3E%3CclipPath%20id%3D%22clip0%22%3E%3Crect%20width%3D%22170%22%20height%3D%22168%22%20fill%3D%22white%22%2F%3E%3C%2FclipPath%3E%3C%2Fdefs%3E%3C%2Fsvg%3E"; - -var polygonMaticLogo = "data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20viewBox%3D%220%200%2038.4%2033.5%22%20style%3D%22enable-background%3Anew%200%200%2038.4%2033.5%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cstyle%20type%3D%22text%2Fcss%22%3E%20.st0%7Bfill%3A%238247E5%3B%7D%3C%2Fstyle%3E%3Cg%3E%20%3Cpath%20class%3D%22st0%22%20d%3D%22M29%2C10.2c-0.7-0.4-1.6-0.4-2.4%2C0L21%2C13.5l-3.8%2C2.1l-5.5%2C3.3c-0.7%2C0.4-1.6%2C0.4-2.4%2C0L5%2C16.3%20%20c-0.7-0.4-1.2-1.2-1.2-2.1v-5c0-0.8%2C0.4-1.6%2C1.2-2.1l4.3-2.5c0.7-0.4%2C1.6-0.4%2C2.4%2C0L16%2C7.2c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v3.3l3.8-2.2V7%20%20c0-0.8-0.4-1.6-1.2-2.1l-8-4.7c-0.7-0.4-1.6-0.4-2.4%2C0L1.2%2C5C0.4%2C5.4%2C0%2C6.2%2C0%2C7v9.4c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l5.5-3.2l3.8-2.2l5.5-3.2c0.7-0.4%2C1.6-0.4%2C2.4%2C0l4.3%2C2.5c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v5c0%2C0.8-0.4%2C1.6-1.2%2C2.1%20%20L29%2C28.8c-0.7%2C0.4-1.6%2C0.4-2.4%2C0l-4.3-2.5c-0.7-0.4-1.2-1.2-1.2-2.1V21l-3.8%2C2.2v3.3c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l8.1-4.7c0.7-0.4%2C1.2-1.2%2C1.2-2.1V17c0-0.8-0.4-1.6-1.2-2.1L29%2C10.2z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"; - -var _a$g; -/** - * List of all the networks supported by the Uniswap Interface - */ -var SupportedChainId; -(function (SupportedChainId) { - SupportedChainId[SupportedChainId["MAINNET"] = 1] = "MAINNET"; - SupportedChainId[SupportedChainId["ROPSTEN"] = 3] = "ROPSTEN"; - SupportedChainId[SupportedChainId["RINKEBY"] = 4] = "RINKEBY"; - SupportedChainId[SupportedChainId["GOERLI"] = 5] = "GOERLI"; - SupportedChainId[SupportedChainId["KOVAN"] = 42] = "KOVAN"; - SupportedChainId[SupportedChainId["ARBITRUM_ONE"] = 42161] = "ARBITRUM_ONE"; - SupportedChainId[SupportedChainId["ARBITRUM_RINKEBY"] = 421611] = "ARBITRUM_RINKEBY"; - SupportedChainId[SupportedChainId["OPTIMISM"] = 10] = "OPTIMISM"; - SupportedChainId[SupportedChainId["OPTIMISTIC_KOVAN"] = 69] = "OPTIMISTIC_KOVAN"; - SupportedChainId[SupportedChainId["POLYGON"] = 137] = "POLYGON"; - SupportedChainId[SupportedChainId["POLYGON_MUMBAI"] = 80001] = "POLYGON_MUMBAI"; -})(SupportedChainId || (SupportedChainId = {})); -(_a$g = {}, - _a$g[SupportedChainId.MAINNET] = 'mainnet', - _a$g[SupportedChainId.ROPSTEN] = 'ropsten', - _a$g[SupportedChainId.RINKEBY] = 'rinkeby', - _a$g[SupportedChainId.GOERLI] = 'goerli', - _a$g[SupportedChainId.KOVAN] = 'kovan', - _a$g[SupportedChainId.POLYGON] = 'polygon', - _a$g[SupportedChainId.POLYGON_MUMBAI] = 'polygon_mumbai', - _a$g[SupportedChainId.ARBITRUM_ONE] = 'arbitrum', - _a$g[SupportedChainId.ARBITRUM_RINKEBY] = 'arbitrum_rinkeby', - _a$g[SupportedChainId.OPTIMISM] = 'optimism', - _a$g[SupportedChainId.OPTIMISTIC_KOVAN] = 'optimistic_kovan', - _a$g); -/** - * Array of all the supported chain IDs - */ -var ALL_SUPPORTED_CHAIN_IDS = Object.values(SupportedChainId).filter(function (id) { return typeof id === 'number'; }); -var SUPPORTED_GAS_ESTIMATE_CHAIN_IDS = [SupportedChainId.MAINNET, SupportedChainId.POLYGON]; -/** - * All the chain IDs that are running the Ethereum protocol. - */ -[ - SupportedChainId.MAINNET, - SupportedChainId.ROPSTEN, - SupportedChainId.RINKEBY, - SupportedChainId.GOERLI, - SupportedChainId.KOVAN, - SupportedChainId.POLYGON, - SupportedChainId.POLYGON_MUMBAI, -]; -/** - * Controls some L2 specific behavior, e.g. slippage tolerance, special UI behavior. - * The expectation is that all of these networks have immediate transaction confirmation. - */ -var L2_CHAIN_IDS = [ - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, -]; - -var UNI_LIST = 'https://tokens.uniswap.org'; -var AAVE_LIST = 'tokenlist.aave.eth'; -var BA_LIST = 'https://raw.githubusercontent.com/The-Blockchain-Association/sec-notice-list/master/ba-sec-list.json'; -var CMC_ALL_LIST = 'https://api.coinmarketcap.com/data-api/v3/uniswap/all.json'; -var COINGECKO_LIST = 'https://tokens.coingecko.com/uniswap/all.json'; -var COMPOUND_LIST = 'https://raw.githubusercontent.com/compound-finance/token-list/master/compound.tokenlist.json'; -var GEMINI_LIST = 'https://www.gemini.com/uniswap/manifest.json'; -var ARBITRUM_LIST = 'https://bridge.arbitrum.io/token-list-42161.json'; -var KLEROS_LIST = 't2crtokens.eth'; -var OPTIMISM_LIST = 'https://static.optimism.io/optimism.tokenlist.json'; -var ROLL_LIST = 'https://app.tryroll.com/tokens.json'; -var SET_LIST = 'https://raw.githubusercontent.com/SetProtocol/uniswap-tokenlist/main/set.tokenlist.json'; -var WRAPPED_LIST = 'wrapped.tokensoft.eth'; -var UNSUPPORTED_LIST_URLS = [BA_LIST]; -// this is the default list of lists that are exposed to users -// lower index == higher priority for token import -var DEFAULT_LIST_OF_LISTS_TO_DISPLAY = [ - UNI_LIST, - COMPOUND_LIST, - AAVE_LIST, - CMC_ALL_LIST, - COINGECKO_LIST, - KLEROS_LIST, - GEMINI_LIST, - WRAPPED_LIST, - SET_LIST, - ROLL_LIST, - ARBITRUM_LIST, - OPTIMISM_LIST, -]; -var DEFAULT_LIST_OF_LISTS = __spreadArray(__spreadArray([], __read(DEFAULT_LIST_OF_LISTS_TO_DISPLAY), false), __read(UNSUPPORTED_LIST_URLS), false); -// default lists to be 'active' aka searched across -var DEFAULT_ACTIVE_LIST_URLS = [UNI_LIST, GEMINI_LIST]; - -var _a$f, _b$6; -var INFURA_KEY = process.env.REACT_APP_INFURA_KEY; -if (typeof INFURA_KEY === 'undefined') { - throw new Error("REACT_APP_INFURA_KEY must be a defined environment variable"); -} -/** - * These are the network URLs used by the interface when there is not another available source of chain data - */ -var INFURA_NETWORK_URLS = (_a$f = {}, - _a$f[SupportedChainId.MAINNET] = "https://mainnet.infura.io/v3/" + INFURA_KEY, - _a$f[SupportedChainId.RINKEBY] = "https://rinkeby.infura.io/v3/" + INFURA_KEY, - _a$f[SupportedChainId.ROPSTEN] = "https://ropsten.infura.io/v3/" + INFURA_KEY, - _a$f[SupportedChainId.GOERLI] = "https://goerli.infura.io/v3/" + INFURA_KEY, - _a$f[SupportedChainId.KOVAN] = "https://kovan.infura.io/v3/" + INFURA_KEY, - _a$f[SupportedChainId.OPTIMISM] = "https://optimism-mainnet.infura.io/v3/" + INFURA_KEY, - _a$f[SupportedChainId.OPTIMISTIC_KOVAN] = "https://optimism-kovan.infura.io/v3/" + INFURA_KEY, - _a$f[SupportedChainId.ARBITRUM_ONE] = "https://arbitrum-mainnet.infura.io/v3/" + INFURA_KEY, - _a$f[SupportedChainId.ARBITRUM_RINKEBY] = "https://arbitrum-rinkeby.infura.io/v3/" + INFURA_KEY, - _a$f[SupportedChainId.POLYGON] = "https://polygon-mainnet.infura.io/v3/" + INFURA_KEY, - _a$f[SupportedChainId.POLYGON_MUMBAI] = "https://polygon-mumbai.infura.io/v3/" + INFURA_KEY, - _a$f); -var NetworkType; -(function (NetworkType) { - NetworkType[NetworkType["L1"] = 0] = "L1"; - NetworkType[NetworkType["L2"] = 1] = "L2"; -})(NetworkType || (NetworkType = {})); -var CHAIN_INFO = (_b$6 = {}, - _b$6[SupportedChainId.MAINNET] = { - networkType: NetworkType.L1, - docs: 'https://docs.uniswap.org/', - explorer: 'https://etherscan.io/', - infoLink: 'https://info.uniswap.org/#/', - label: 'Ethereum', - logoUrl: EthereumLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, - rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.MAINNET], - }, - }, - _b$6[SupportedChainId.RINKEBY] = { - networkType: NetworkType.L1, - docs: 'https://docs.uniswap.org/', - explorer: 'https://rinkeby.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/', - label: 'Rinkeby', - logoUrl: EthereumLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Rinkeby Ether', symbol: 'rETH', decimals: 18 }, - rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.RINKEBY], - }, - }, - _b$6[SupportedChainId.ROPSTEN] = { - networkType: NetworkType.L1, - docs: 'https://docs.uniswap.org/', - explorer: 'https://ropsten.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/', - label: 'Ropsten', - logoUrl: EthereumLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Ropsten Ether', symbol: 'ropETH', decimals: 18 }, - rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.ROPSTEN], - }, - }, - _b$6[SupportedChainId.KOVAN] = { - networkType: NetworkType.L1, - docs: 'https://docs.uniswap.org/', - explorer: 'https://kovan.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/', - label: 'Kovan', - logoUrl: EthereumLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Kovan Ether', symbol: 'kovETH', decimals: 18 }, - rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.KOVAN], - }, - }, - _b$6[SupportedChainId.GOERLI] = { - networkType: NetworkType.L1, - docs: 'https://docs.uniswap.org/', - explorer: 'https://goerli.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/', - label: 'Görli', - logoUrl: EthereumLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Görli Ether', symbol: 'görETH', decimals: 18 }, - rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.GOERLI], - }, - }, - _b$6[SupportedChainId.OPTIMISM] = { - networkType: NetworkType.L2, - blockWaitMsBeforeWarning: ms__default["default"](templateObject_1$X || (templateObject_1$X = __makeTemplateObject(["25m"], ["25m"]))), - bridge: 'https://gateway.optimism.io/?chainId=1', - defaultListUrl: OPTIMISM_LIST, - docs: 'https://optimism.io/', - explorer: 'https://optimistic.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/optimism/', - label: 'Optimism', - logoUrl: optimismLogoUrl, - statusPage: 'https://optimism.io/status', - helpCenterUrl: 'https://help.uniswap.org/en/collections/3137778-uniswap-on-optimistic-ethereum-oξ', - addNetworkInfo: { - nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, - rpcUrl: 'https://mainnet.optimism.io', - }, - }, - _b$6[SupportedChainId.OPTIMISTIC_KOVAN] = { - networkType: NetworkType.L2, - blockWaitMsBeforeWarning: ms__default["default"](templateObject_2$E || (templateObject_2$E = __makeTemplateObject(["25m"], ["25m"]))), - bridge: 'https://gateway.optimism.io/', - defaultListUrl: OPTIMISM_LIST, - docs: 'https://optimism.io/', - explorer: 'https://optimistic.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/optimism/', - label: 'Optimistic Kovan', - logoUrl: optimismLogoUrl, - statusPage: 'https://optimism.io/status', - helpCenterUrl: 'https://help.uniswap.org/en/collections/3137778-uniswap-on-optimistic-ethereum-oξ', - addNetworkInfo: { - nativeCurrency: { name: 'Optimistic Kovan Ether', symbol: 'kovOpETH', decimals: 18 }, - rpcUrl: 'https://kovan.optimism.io', - }, - }, - _b$6[SupportedChainId.ARBITRUM_ONE] = { - networkType: NetworkType.L2, - blockWaitMsBeforeWarning: ms__default["default"](templateObject_3$x || (templateObject_3$x = __makeTemplateObject(["10m"], ["10m"]))), - bridge: 'https://bridge.arbitrum.io/', - docs: 'https://offchainlabs.com/', - explorer: 'https://arbiscan.io/', - infoLink: 'https://info.uniswap.org/#/arbitrum', - label: 'Arbitrum', - logoUrl: arbitrumLogoUrl, - defaultListUrl: ARBITRUM_LIST, - helpCenterUrl: 'https://help.uniswap.org/en/collections/3137787-uniswap-on-arbitrum', - addNetworkInfo: { - nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, - rpcUrl: 'https://arb1.arbitrum.io/rpc', - }, - }, - _b$6[SupportedChainId.ARBITRUM_RINKEBY] = { - networkType: NetworkType.L2, - blockWaitMsBeforeWarning: ms__default["default"](templateObject_4$n || (templateObject_4$n = __makeTemplateObject(["10m"], ["10m"]))), - bridge: 'https://bridge.arbitrum.io/', - docs: 'https://offchainlabs.com/', - explorer: 'https://rinkeby-explorer.arbitrum.io/', - infoLink: 'https://info.uniswap.org/#/arbitrum/', - label: 'Arbitrum Rinkeby', - logoUrl: arbitrumLogoUrl, - defaultListUrl: ARBITRUM_LIST, - helpCenterUrl: 'https://help.uniswap.org/en/collections/3137787-uniswap-on-arbitrum', - addNetworkInfo: { - nativeCurrency: { name: 'Rinkeby Arbitrum Ether', symbol: 'rinkArbETH', decimals: 18 }, - rpcUrl: 'https://rinkeby.arbitrum.io/rpc', - }, - }, - _b$6[SupportedChainId.POLYGON] = { - networkType: NetworkType.L1, - blockWaitMsBeforeWarning: ms__default["default"](templateObject_5$k || (templateObject_5$k = __makeTemplateObject(["10m"], ["10m"]))), - bridge: 'https://wallet.polygon.technology/bridge', - docs: 'https://polygon.io/', - explorer: 'https://polygonscan.com/', - infoLink: 'https://info.uniswap.org/#/polygon/', - label: 'Polygon', - logoUrl: polygonMaticLogo, - addNetworkInfo: { - rpcUrl: 'https://polygon-rpc.com/', - nativeCurrency: { name: 'Polygon Matic', symbol: 'MATIC', decimals: 18 }, - }, - }, - _b$6[SupportedChainId.POLYGON_MUMBAI] = { - networkType: NetworkType.L1, - blockWaitMsBeforeWarning: ms__default["default"](templateObject_6$e || (templateObject_6$e = __makeTemplateObject(["10m"], ["10m"]))), - bridge: 'https://wallet.polygon.technology/bridge', - docs: 'https://polygon.io/', - explorer: 'https://mumbai.polygonscan.com/', - infoLink: 'https://info.uniswap.org/#/polygon/', - label: 'Polygon Mumbai', - logoUrl: polygonMaticLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Polygon Mumbai Matic', symbol: 'mMATIC', decimals: 18 }, - rpcUrl: 'https://rpc-endpoints.superfluid.dev/mumbai', - }, - }, - _b$6); -var templateObject_1$X, templateObject_2$E, templateObject_3$x, templateObject_4$n, templateObject_5$k, templateObject_6$e; - -var NetworkContextName = 'NETWORK'; -// 30 minutes, denominated in seconds -var DEFAULT_DEADLINE_FROM_NOW = 60 * 30; -var L2_DEADLINE_FROM_NOW = 60 * 5; -// transaction popup dismisal amounts -var DEFAULT_TXN_DISMISS_MS = 25000; -// used for rewards deadlines -JSBI__default["default"].BigInt(60 * 60 * 24 * 7); -JSBI__default["default"].BigInt(0); -// one basis JSBI.BigInt -var BIPS_BASE = JSBI__default["default"].BigInt(10000); -new sdkCore.Percent(JSBI__default["default"].BigInt(1), BIPS_BASE); -// used for warning states -var ALLOWED_PRICE_IMPACT_LOW = new sdkCore.Percent(JSBI__default["default"].BigInt(100), BIPS_BASE); // 1% -var ALLOWED_PRICE_IMPACT_MEDIUM = new sdkCore.Percent(JSBI__default["default"].BigInt(300), BIPS_BASE); // 3% -var ALLOWED_PRICE_IMPACT_HIGH = new sdkCore.Percent(JSBI__default["default"].BigInt(500), BIPS_BASE); // 5% -// if the price slippage exceeds this number, force the user to type 'confirm' to execute -var PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN = new sdkCore.Percent(JSBI__default["default"].BigInt(1000), BIPS_BASE); // 10% -// for non expert mode disable swaps above this -var BLOCKED_PRICE_IMPACT_NON_EXPERT = new sdkCore.Percent(JSBI__default["default"].BigInt(1500), BIPS_BASE); // 15% -var BETTER_TRADE_LESS_HOPS_THRESHOLD = new sdkCore.Percent(JSBI__default["default"].BigInt(50), BIPS_BASE); -var ZERO_PERCENT = new sdkCore.Percent('0'); -new sdkCore.Percent(JSBI__default["default"].BigInt(200), BIPS_BASE); -var ONE_HUNDRED_PERCENT = new sdkCore.Percent('1'); - -function useActiveWeb3React() { - // if (false) { - // return useWidgetsWeb3React() - // } - var interfaceContext = core.useWeb3React(); - var interfaceNetworkContext = core.useWeb3React(NetworkContextName); - if (interfaceContext.active) { - return interfaceContext; - } - return interfaceNetworkContext; -} - -var useAppDispatch = function () { return reactRedux.useDispatch(); }; -var useAppSelector = reactRedux.useSelector; - -var DEFAULT_NETWORKS = [ - SupportedChainId.MAINNET, - SupportedChainId.ROPSTEN, - SupportedChainId.RINKEBY, - SupportedChainId.GOERLI, - SupportedChainId.KOVAN, -]; -function constructSameAddressMap(address, additionalNetworks) { - if (additionalNetworks === void 0) { additionalNetworks = []; } - return DEFAULT_NETWORKS.concat(additionalNetworks).reduce(function (memo, chainId) { - memo[chainId] = address; - return memo; - }, {}); -} - -var _a$e, _b$5, _c$4, _d$3, _e$2, _f$1, _g$1, _h$1; -var UNI_ADDRESS = constructSameAddressMap('0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984'); -var MULTICALL_ADDRESS = __assign(__assign({}, constructSameAddressMap('0x1F98415757620B543A52E61c46B32eB19261F984', [ - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.OPTIMISM, - SupportedChainId.POLYGON_MUMBAI, - SupportedChainId.POLYGON, -])), (_a$e = {}, _a$e[SupportedChainId.ARBITRUM_ONE] = '0xadF885960B47eA2CD9B55E6DAc6B42b7Cb2806dB', _a$e[SupportedChainId.ARBITRUM_RINKEBY] = '0xa501c031958F579dB7676fF1CE78AD305794d579', _a$e)); -var V2_FACTORY_ADDRESSES = constructSameAddressMap(v2Sdk.FACTORY_ADDRESS); -var V2_ROUTER_ADDRESS = constructSameAddressMap('0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D'); -var V3_ROUTER_ADDRESS = constructSameAddressMap('0xE592427A0AEce92De3Edee1F18E0157C05861564', [ - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON, - SupportedChainId.POLYGON_MUMBAI, -]); -var SWAP_ROUTER_ADDRESSES = constructSameAddressMap('0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45', [ - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON, - SupportedChainId.POLYGON_MUMBAI, -]); -/** - * The oldest V0 governance address - */ -constructSameAddressMap('0x5e4be8Bc9637f0EAA1A755019e06A68ce081D58F'); -/** - * The older V1 governance address - */ -(_b$5 = {}, - _b$5[SupportedChainId.MAINNET] = '0xC4e172459f1E7939D522503B81AFAaC1014CE6F6', - _b$5); -/** - * The latest governor bravo that is currently admin of timelock - */ -(_c$4 = {}, - _c$4[SupportedChainId.MAINNET] = '0x408ED6354d4973f66138C91495F2f2FCbd8724C3', - _c$4); -constructSameAddressMap('0x1a9C8182C09F50C8318d769245beA52c32BE35BC'); -(_d$3 = {}, - _d$3[SupportedChainId.MAINNET] = '0x090D4613473dEE047c3f2706764f49E0821D256e', - _d$3); -var ARGENT_WALLET_DETECTOR_ADDRESS = (_e$2 = {}, - _e$2[SupportedChainId.MAINNET] = '0xeca4B0bDBf7c55E9b7925919d03CbF8Dc82537E8', - _e$2); -var V3_CORE_FACTORY_ADDRESSES = constructSameAddressMap(v3Sdk.FACTORY_ADDRESS, [ - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON_MUMBAI, - SupportedChainId.POLYGON, -]); -var QUOTER_ADDRESSES = constructSameAddressMap('0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6', [ - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON_MUMBAI, - SupportedChainId.POLYGON, -]); -constructSameAddressMap('0xC36442b4a4522E871399CD717aBDD847Ab11FE88', [ - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON_MUMBAI, - SupportedChainId.POLYGON, -]); -var ENS_REGISTRAR_ADDRESSES = (_f$1 = {}, - _f$1[SupportedChainId.MAINNET] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', - _f$1[SupportedChainId.ROPSTEN] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', - _f$1[SupportedChainId.GOERLI] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', - _f$1[SupportedChainId.RINKEBY] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', - _f$1); -(_g$1 = {}, - _g$1[SupportedChainId.MAINNET] = '0x65770b5283117639760beA3F867b69b3697a91dd', - _g$1); -constructSameAddressMap('0xA5644E29708357803b5A882D272c41cC0dF92B34', [ - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON_MUMBAI, - SupportedChainId.POLYGON, -]); -(_h$1 = {}, - _h$1[SupportedChainId.ARBITRUM_ONE] = '0xbfd8137f7d1516D3ea5cA83523914859ec47F573', - _h$1[SupportedChainId.ARBITRUM_RINKEBY] = '0xbfd8137f7d1516D3ea5cA83523914859ec47F573', - _h$1); - -var _a$d, _b$4; -var AMPL = new sdkCore.Token(SupportedChainId.MAINNET, '0xD46bA6D942050d489DBd938a2C909A5d5039A161', 9, 'AMPL', 'Ampleforth'); -var DAI = new sdkCore.Token(SupportedChainId.MAINNET, '0x6B175474E89094C44Da98b954EedeAC495271d0F', 18, 'DAI', 'Dai Stablecoin'); -var DAI_ARBITRUM_ONE = new sdkCore.Token(SupportedChainId.ARBITRUM_ONE, '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', 18, 'DAI', 'Dai stable coin'); -var DAI_OPTIMISM = new sdkCore.Token(SupportedChainId.OPTIMISM, '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', 18, 'DAI', 'Dai stable coin'); -var USDC = new sdkCore.Token(SupportedChainId.MAINNET, '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', 6, 'USDC', 'USD//C'); -var USDC_ARBITRUM = new sdkCore.Token(SupportedChainId.ARBITRUM_ONE, '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8', 6, 'USDC', 'USD//C'); -var USDC_POLYGON = new sdkCore.Token(SupportedChainId.POLYGON, '0x2791bca1f2de4661ed88a30c99a7a9449aa84174', 6, 'USDC', 'USD//C'); -var DAI_POLYGON = new sdkCore.Token(SupportedChainId.POLYGON, '0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063', 18, 'DAI', 'Dai Stablecoin'); -var USDT_POLYGON = new sdkCore.Token(SupportedChainId.POLYGON, '0xc2132d05d31c914a87c6611c10748aeb04b58e8f', 6, 'USDT', 'Tether USD'); -var WBTC_POLYGON = new sdkCore.Token(SupportedChainId.POLYGON, '0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6', 8, 'WBTC', 'Wrapped BTC'); -var USDC_OPTIMISM = new sdkCore.Token(SupportedChainId.OPTIMISM, '0x7F5c764cBc14f9669B88837ca1490cCa17c31607', 6, 'USDC', 'USD//C'); -var USDT = new sdkCore.Token(SupportedChainId.MAINNET, '0xdAC17F958D2ee523a2206206994597C13D831ec7', 6, 'USDT', 'Tether USD'); -var USDT_ARBITRUM_ONE = new sdkCore.Token(SupportedChainId.ARBITRUM_ONE, '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9', 6, 'USDT', 'Tether USD'); -var USDT_OPTIMISM = new sdkCore.Token(SupportedChainId.OPTIMISM, '0x94b008aA00579c1307B0EF2c499aD98a8ce58e58', 6, 'USDT', 'Tether USD'); -var WBTC = new sdkCore.Token(SupportedChainId.MAINNET, '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', 8, 'WBTC', 'Wrapped BTC'); -var WBTC_ARBITRUM_ONE = new sdkCore.Token(SupportedChainId.ARBITRUM_ONE, '0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f', 8, 'WBTC', 'Wrapped BTC'); -var WBTC_OPTIMISM = new sdkCore.Token(SupportedChainId.OPTIMISM, '0x68f180fcCe6836688e9084f035309E29Bf0A2095', 8, 'WBTC', 'Wrapped BTC'); -var FEI = new sdkCore.Token(SupportedChainId.MAINNET, '0x956F47F50A910163D8BF957Cf5846D573E7f87CA', 18, 'FEI', 'Fei USD'); -var TRIBE = new sdkCore.Token(SupportedChainId.MAINNET, '0xc7283b66Eb1EB5FB86327f08e1B5816b0720212B', 18, 'TRIBE', 'Tribe'); -var FRAX = new sdkCore.Token(SupportedChainId.MAINNET, '0x853d955aCEf822Db058eb8505911ED77F175b99e', 18, 'FRAX', 'Frax'); -var FXS = new sdkCore.Token(SupportedChainId.MAINNET, '0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0', 18, 'FXS', 'Frax Share'); -var renBTC = new sdkCore.Token(SupportedChainId.MAINNET, '0xEB4C2781e4ebA804CE9a9803C67d0893436bB27D', 8, 'renBTC', 'renBTC'); -var ETH2X_FLI = new sdkCore.Token(SupportedChainId.MAINNET, '0xAa6E8127831c9DE45ae56bB1b0d4D4Da6e5665BD', 18, 'ETH2x-FLI', 'ETH 2x Flexible Leverage Index'); -var sETH2 = new sdkCore.Token(SupportedChainId.MAINNET, '0xFe2e637202056d30016725477c5da089Ab0A043A', 18, 'sETH2', 'StakeWise Staked ETH2'); -var rETH2 = new sdkCore.Token(SupportedChainId.MAINNET, '0x20BC832ca081b91433ff6c17f85701B6e92486c5', 18, 'rETH2', 'StakeWise Reward ETH2'); -var SWISE = new sdkCore.Token(SupportedChainId.MAINNET, '0x48C3399719B582dD63eB5AADf12A40B4C3f52FA2', 18, 'SWISE', 'StakeWise'); -var WETH_POLYGON_MUMBAI = new sdkCore.Token(SupportedChainId.POLYGON_MUMBAI, '0xa6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa', 18, 'WETH', 'Wrapped Ether'); -var WETH_POLYGON = new sdkCore.Token(SupportedChainId.POLYGON, '0x7ceb23fd6bc0add59e62ac25578270cff1b9f619', 18, 'WETH', 'Wrapped Ether'); -var UNI = (_a$d = {}, - _a$d[SupportedChainId.MAINNET] = new sdkCore.Token(SupportedChainId.MAINNET, UNI_ADDRESS[1], 18, 'UNI', 'Uniswap'), - _a$d[SupportedChainId.RINKEBY] = new sdkCore.Token(SupportedChainId.RINKEBY, UNI_ADDRESS[4], 18, 'UNI', 'Uniswap'), - _a$d[SupportedChainId.ROPSTEN] = new sdkCore.Token(SupportedChainId.ROPSTEN, UNI_ADDRESS[3], 18, 'UNI', 'Uniswap'), - _a$d[SupportedChainId.GOERLI] = new sdkCore.Token(SupportedChainId.GOERLI, UNI_ADDRESS[5], 18, 'UNI', 'Uniswap'), - _a$d[SupportedChainId.KOVAN] = new sdkCore.Token(SupportedChainId.KOVAN, UNI_ADDRESS[42], 18, 'UNI', 'Uniswap'), - _a$d); -var WRAPPED_NATIVE_CURRENCY = __assign(__assign({}, sdkCore.WETH9), (_b$4 = {}, _b$4[SupportedChainId.OPTIMISM] = new sdkCore.Token(SupportedChainId.OPTIMISM, '0x4200000000000000000000000000000000000006', 18, 'WETH', 'Wrapped Ether'), _b$4[SupportedChainId.OPTIMISTIC_KOVAN] = new sdkCore.Token(SupportedChainId.OPTIMISTIC_KOVAN, '0x4200000000000000000000000000000000000006', 18, 'WETH', 'Wrapped Ether'), _b$4[SupportedChainId.ARBITRUM_ONE] = new sdkCore.Token(SupportedChainId.ARBITRUM_ONE, '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1', 18, 'WETH', 'Wrapped Ether'), _b$4[SupportedChainId.ARBITRUM_RINKEBY] = new sdkCore.Token(SupportedChainId.ARBITRUM_RINKEBY, '0xB47e6A5f8b33b3F17603C83a0535A9dcD7E32681', 18, 'WETH', 'Wrapped Ether'), _b$4[SupportedChainId.POLYGON] = new sdkCore.Token(SupportedChainId.POLYGON, '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270', 18, 'WMATIC', 'Wrapped MATIC'), _b$4[SupportedChainId.POLYGON_MUMBAI] = new sdkCore.Token(SupportedChainId.POLYGON_MUMBAI, '0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889', 18, 'WMATIC', 'Wrapped MATIC'), _b$4)); -function isMatic(chainId) { - return chainId === SupportedChainId.POLYGON_MUMBAI || chainId === SupportedChainId.POLYGON; -} -var MaticNativeCurrency = /** @class */ (function (_super) { - __extends(MaticNativeCurrency, _super); - function MaticNativeCurrency(chainId) { - var _this = this; - if (!isMatic(chainId)) - throw new Error('Not matic'); - _this = _super.call(this, chainId, 18, 'MATIC', 'Polygon Matic') || this; - return _this; - } - MaticNativeCurrency.prototype.equals = function (other) { - return other.isNative && other.chainId === this.chainId; - }; - Object.defineProperty(MaticNativeCurrency.prototype, "wrapped", { - get: function () { - if (!isMatic(this.chainId)) - throw new Error('Not matic'); - return WRAPPED_NATIVE_CURRENCY[this.chainId]; - }, - enumerable: false, - configurable: true - }); - return MaticNativeCurrency; -}(sdkCore.NativeCurrency)); -var ExtendedEther = /** @class */ (function (_super) { - __extends(ExtendedEther, _super); - function ExtendedEther() { - return _super !== null && _super.apply(this, arguments) || this; - } - Object.defineProperty(ExtendedEther.prototype, "wrapped", { - get: function () { - if (this.chainId in WRAPPED_NATIVE_CURRENCY) - return WRAPPED_NATIVE_CURRENCY[this.chainId]; - throw new Error('Unsupported chain ID'); - }, - enumerable: false, - configurable: true - }); - ExtendedEther.onChain = function (chainId) { - var _a; - return (_a = this._cachedExtendedEther[chainId]) !== null && _a !== void 0 ? _a : (this._cachedExtendedEther[chainId] = new ExtendedEther(chainId)); - }; - ExtendedEther._cachedExtendedEther = {}; - return ExtendedEther; -}(sdkCore.Ether)); -var cachedNativeCurrency = {}; -function nativeOnChain(chainId) { - var _a; - return ((_a = cachedNativeCurrency[chainId]) !== null && _a !== void 0 ? _a : (cachedNativeCurrency[chainId] = isMatic(chainId) - ? new MaticNativeCurrency(chainId) - : ExtendedEther.onChain(chainId))); -} - -var _a$c, _b$3, _c$3, _d$2, _e$1, _f, _g, _h; -var WRAPPED_NATIVE_CURRENCIES_ONLY = Object.fromEntries(Object.entries(WRAPPED_NATIVE_CURRENCY).map(function (_a) { - var _b = __read(_a, 2), key = _b[0], value = _b[1]; - return [key, [value]]; -})); -// used to construct intermediary pairs for trading -var BASES_TO_CHECK_TRADES_AGAINST = __assign(__assign({}, WRAPPED_NATIVE_CURRENCIES_ONLY), (_a$c = {}, _a$c[SupportedChainId.MAINNET] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.MAINNET]), false), [DAI, USDC, USDT, WBTC], false), _a$c[SupportedChainId.OPTIMISM] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.OPTIMISM]), false), [ - DAI_OPTIMISM, - USDT_OPTIMISM, - WBTC_OPTIMISM, -], false), _a$c[SupportedChainId.ARBITRUM_ONE] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.ARBITRUM_ONE]), false), [ - DAI_ARBITRUM_ONE, - USDT_ARBITRUM_ONE, - WBTC_ARBITRUM_ONE, -], false), _a$c[SupportedChainId.POLYGON] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.POLYGON]), false), [ - DAI_POLYGON, - USDC_POLYGON, - USDT_POLYGON, - WETH_POLYGON, -], false), _a$c)); -var ADDITIONAL_BASES = (_b$3 = {}, - _b$3[SupportedChainId.MAINNET] = (_c$3 = { - '0xF16E4d813f4DcfDe4c5b44f305c908742De84eF0': [ETH2X_FLI] - }, - _c$3[rETH2.address] = [sETH2], - _c$3[SWISE.address] = [sETH2], - _c$3[FEI.address] = [TRIBE], - _c$3[TRIBE.address] = [FEI], - _c$3[FRAX.address] = [FXS], - _c$3[FXS.address] = [FRAX], - _c$3[WBTC.address] = [renBTC], - _c$3[renBTC.address] = [WBTC], - _c$3), - _b$3); -/** - * Some tokens can only be swapped via certain pairs, so we override the list of bases that are considered for these - * tokens. - */ -var CUSTOM_BASES = (_d$2 = {}, - _d$2[SupportedChainId.MAINNET] = (_e$1 = {}, - _e$1[AMPL.address] = [DAI, WRAPPED_NATIVE_CURRENCY[SupportedChainId.MAINNET]], - _e$1), - _d$2); -/** - * Shows up in the currency select for swap and add liquidity - */ -var COMMON_BASES = (_f = {}, - _f[SupportedChainId.MAINNET] = [ - nativeOnChain(SupportedChainId.MAINNET), - DAI, - USDC, - USDT, - WBTC, - WRAPPED_NATIVE_CURRENCY[SupportedChainId.MAINNET], - ], - _f[SupportedChainId.ROPSTEN] = [ - nativeOnChain(SupportedChainId.ROPSTEN), - WRAPPED_NATIVE_CURRENCY[SupportedChainId.ROPSTEN], - ], - _f[SupportedChainId.RINKEBY] = [ - nativeOnChain(SupportedChainId.RINKEBY), - WRAPPED_NATIVE_CURRENCY[SupportedChainId.RINKEBY], - ], - _f[SupportedChainId.GOERLI] = [nativeOnChain(SupportedChainId.GOERLI), WRAPPED_NATIVE_CURRENCY[SupportedChainId.GOERLI]], - _f[SupportedChainId.KOVAN] = [nativeOnChain(SupportedChainId.KOVAN), WRAPPED_NATIVE_CURRENCY[SupportedChainId.KOVAN]], - _f[SupportedChainId.ARBITRUM_ONE] = [ - nativeOnChain(SupportedChainId.ARBITRUM_ONE), - DAI_ARBITRUM_ONE, - USDC_ARBITRUM, - USDT_ARBITRUM_ONE, - WBTC_ARBITRUM_ONE, - WRAPPED_NATIVE_CURRENCY[SupportedChainId.ARBITRUM_ONE], - ], - _f[SupportedChainId.ARBITRUM_RINKEBY] = [ - nativeOnChain(SupportedChainId.ARBITRUM_RINKEBY), - WRAPPED_NATIVE_CURRENCY[SupportedChainId.ARBITRUM_RINKEBY], - ], - _f[SupportedChainId.OPTIMISM] = [ - nativeOnChain(SupportedChainId.OPTIMISM), - DAI_OPTIMISM, - USDC_OPTIMISM, - USDT_OPTIMISM, - WBTC_OPTIMISM, - ], - _f[SupportedChainId.OPTIMISTIC_KOVAN] = [nativeOnChain(SupportedChainId.OPTIMISTIC_KOVAN)], - _f[SupportedChainId.POLYGON] = [ - nativeOnChain(SupportedChainId.POLYGON), - WETH_POLYGON, - USDC_POLYGON, - DAI_POLYGON, - USDT_POLYGON, - WBTC_POLYGON, - ], - _f[SupportedChainId.POLYGON_MUMBAI] = [ - nativeOnChain(SupportedChainId.POLYGON_MUMBAI), - WRAPPED_NATIVE_CURRENCY[SupportedChainId.POLYGON_MUMBAI], - WETH_POLYGON_MUMBAI, - ], - _f); -// used to construct the list of all pairs we consider by default in the frontend -__assign(__assign({}, WRAPPED_NATIVE_CURRENCIES_ONLY), (_g = {}, _g[SupportedChainId.MAINNET] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.MAINNET]), false), [DAI, USDC, USDT, WBTC], false), _g)); -(_h = {}, - _h[SupportedChainId.MAINNET] = [ - [ - new sdkCore.Token(SupportedChainId.MAINNET, '0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643', 8, 'cDAI', 'Compound Dai'), - new sdkCore.Token(SupportedChainId.MAINNET, '0x39AA39c021dfbaE8faC545936693aC917d5E7563', 8, 'cUSDC', 'Compound USD Coin'), - ], - [USDC, USDT], - [DAI, USDT], - ], - _h); + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { + _.label = op[1] + break + } + if (op[0] === 6 && _.label < t[1]) { + _.label = t[1] + t = op + break + } + if (t && _.label < t[2]) { + _.label = t[2] + _.ops.push(op) + break + } + if (t[2]) _.ops.pop() + _.trys.pop() + continue + } + op = body.call(thisArg, _) + } catch (e) { + op = [6, e] + y = 0 + } finally { + f = t = 0 + } + if (op[0] & 5) throw op[1] + return { value: op[0] ? op[1] : void 0, done: true } + } +} + +function __values(o) { + var s = typeof Symbol === 'function' && Symbol.iterator, + m = s && o[s], + i = 0 + if (m) return m.call(o) + if (o && typeof o.length === 'number') + return { + next() { + if (o && i >= o.length) o = void 0 + return { value: o && o[i++], done: !o } + }, + } + throw new TypeError(s ? 'Object is not iterable.' : 'Symbol.iterator is not defined.') +} + +function __read(o, n) { + var m = typeof Symbol === 'function' && o[Symbol.iterator] + if (!m) return o + var i = m.call(o), + r, + ar = [], + e + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value) + } catch (error) { + e = { error } + } finally { + try { + if (r && !r.done && (m = i['return'])) m.call(i) + } finally { + if (e) throw e.error + } + } + return ar +} + +function __spreadArray(to, from, pack) { + if (pack || arguments.length === 2) + for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i) + ar[i] = from[i] + } + } + return to.concat(ar || Array.prototype.slice.call(from)) +} + +function __makeTemplateObject(cooked, raw) { + if (Object.defineProperty) { + Object.defineProperty(cooked, 'raw', { value: raw }) + } else { + cooked.raw = raw + } + return cooked +} + +var EthereumLogo = + 'data:image/png;base64,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' + +var arbitrumLogoUrl = + 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20viewBox%3D%220%200%20470.287%20514.251%22%20enable-background%3D%22new%200%200%20470.287%20514.251%22%20xml%3Aspace%3D%22preserve%22%3E%3Cg%20id%3D%22Background%22%3E%3C%2Fg%3E%3Cg%20id%3D%22Logos_and_symbols%22%3E%20%3Cg%20id%3D%22SYMBOL_VER_3%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_4_3_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_1_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_1_%22%3E%20%20%3Cg%20id%3D%22_x31_-3%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_14_%22%3E%20%20%20%3Cpath%20fill%3D%22%232D374B%22%20d%3D%22M291.134%2C237.469l35.654-60.5l96.103%2C149.684l0.046%2C28.727l-0.313-197.672%20%20%20%20c-0.228-4.832-2.794-9.252-6.887-11.859L242.715%2C46.324c-4.045-1.99-9.18-1.967-13.22%2C0.063c-0.546%2C0.272-1.06%2C0.57-1.548%2C0.895%20%20%20%20l-0.604%2C0.379L59.399%2C144.983l-0.651%2C0.296c-0.838%2C0.385-1.686%2C0.875-2.48%2C1.444c-3.185%2C2.283-5.299%2C5.66-5.983%2C9.448%20%20%20%20c-0.103%2C0.574-0.179%2C1.158-0.214%2C1.749l0.264%2C161.083l89.515-138.745c11.271-18.397%2C35.825-24.323%2C58.62-24.001l26.753%2C0.706%20%20%20%20L67.588%2C409.765l18.582%2C10.697L245.692%2C157.22l70.51-0.256L157.091%2C426.849l66.306%2C38.138l7.922%2C4.556%20%20%20%20c3.351%2C1.362%2C7.302%2C1.431%2C10.681%2C0.21l175.453-101.678l-33.544%2C19.438L291.134%2C237.469z%20M304.736%2C433.395l-66.969-105.108%20%20%20%20l40.881-69.371l87.952%2C138.628L304.736%2C433.395z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%2328A0F0%22%20points%3D%22237.768%2C328.286%20304.736%2C433.395%20366.601%2C397.543%20278.648%2C258.915%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2328A0F0%22%20d%3D%22M422.937%2C355.379l-0.046-28.727l-96.103-149.684l-35.654%2C60.5l92.774%2C150.043l33.544-19.438%20%20%20%20c3.29-2.673%2C5.281-6.594%2C5.49-10.825L422.937%2C355.379z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23FFFFFF%22%20d%3D%22M20.219%2C382.469l47.369%2C27.296l157.634-252.801l-26.753-0.706c-22.795-0.322-47.35%2C5.604-58.62%2C24.001%20%20%20%20L50.334%2C319.004l-30.115%2C46.271V382.469z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%23FFFFFF%22%20points%3D%22316.202%2C156.964%20245.692%2C157.22%2086.17%2C420.462%20141.928%2C452.565%20157.091%2C426.849%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2396BEDC%22%20d%3D%22M452.65%2C156.601c-0.59-14.746-8.574-28.245-21.08-36.104L256.28%2C19.692%20%20%20%20c-12.371-6.229-27.825-6.237-40.218-0.004c-1.465%2C0.739-170.465%2C98.752-170.465%2C98.752c-2.339%2C1.122-4.592%2C2.458-6.711%2C3.975%20%20%20%20c-11.164%2C8.001-17.969%2C20.435-18.668%2C34.095v208.765l30.115-46.271L50.07%2C157.921c0.035-0.589%2C0.109-1.169%2C0.214-1.741%20%20%20%20c0.681-3.79%2C2.797-7.171%2C5.983-9.456c0.795-0.569%2C172.682-100.064%2C173.228-100.337c4.04-2.029%2C9.175-2.053%2C13.22-0.063%20%20%20%20l173.022%2C99.523c4.093%2C2.607%2C6.659%2C7.027%2C6.887%2C11.859v199.542c-0.209%2C4.231-1.882%2C8.152-5.172%2C10.825l-33.544%2C19.438%20%20%20%20l-17.308%2C10.031l-61.864%2C35.852l-62.737%2C36.357c-3.379%2C1.221-7.33%2C1.152-10.681-0.21l-74.228-42.693l-15.163%2C25.717%20%20%20%20l66.706%2C38.406c2.206%2C1.255%2C4.171%2C2.367%2C5.784%2C3.272c2.497%2C1.4%2C4.199%2C2.337%2C4.8%2C2.629c4.741%2C2.303%2C11.563%2C3.643%2C17.71%2C3.643%20%20%20%20c5.636%2C0%2C11.132-1.035%2C16.332-3.072l182.225-105.531c10.459-8.104%2C16.612-20.325%2C17.166-33.564V156.601z%22%2F%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_13_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_6_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_3_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_15_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_3_%22%3E%20%20%20%3Cg%20id%3D%22_x33__7_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic%22%3E%20%20%20%3Cg%20id%3D%22_x33__3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_10_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x34__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_2_%22%3E%20%20%20%3Cg%20id%3D%22_x33__6_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_2_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_11_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_5_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_12_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_1_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_9_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_2_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol_1_%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_1_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_7_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_8_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Monochromatic_1_%22%3E%20%20%3Cg%20id%3D%22_x33__4_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E' + +var optimismLogoUrl = + 'data:image/svg+xml,%3Csvg%20width%3D%22170%22%20height%3D%22168%22%20viewBox%3D%220%200%20170%20168%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20clip-path%3D%22url%28%23clip0%29%22%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF505F%22%2F%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF0320%22%2F%3E%3Cpath%20d%3D%22M85.05%200C132.022%200%20170.1%2037.8949%20170.1%2084.6407C170.1%20131.386%200%20131.386%200%2084.6407C0%2037.8949%2038.0782%200%2085.05%200Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.665%2064.0394L112.444%2012.3742L89.0263%2078.9477L144.665%2064.0394Z%22%20fill%3D%22%23FF4E65%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.777%2064.215L112.444%2012.3742L165.349%2058.4347L143.777%2064.215Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.551%2063.613L142.479%20124.467L88.912%2078.5213L144.551%2063.613Z%22%20fill%3D%22%23D0001A%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.663%2063.7886L142.479%20124.467L165.235%2058.0083L143.663%2063.7886Z%22%20fill%3D%22%23FF697B%22%2F%3E%3C%2Fg%3E%3Cdefs%3E%3CclipPath%20id%3D%22clip0%22%3E%3Crect%20width%3D%22170%22%20height%3D%22168%22%20fill%3D%22white%22%2F%3E%3C%2FclipPath%3E%3C%2Fdefs%3E%3C%2Fsvg%3E' + +var polygonMaticLogo = + 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20viewBox%3D%220%200%2038.4%2033.5%22%20style%3D%22enable-background%3Anew%200%200%2038.4%2033.5%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cstyle%20type%3D%22text%2Fcss%22%3E%20.st0%7Bfill%3A%238247E5%3B%7D%3C%2Fstyle%3E%3Cg%3E%20%3Cpath%20class%3D%22st0%22%20d%3D%22M29%2C10.2c-0.7-0.4-1.6-0.4-2.4%2C0L21%2C13.5l-3.8%2C2.1l-5.5%2C3.3c-0.7%2C0.4-1.6%2C0.4-2.4%2C0L5%2C16.3%20%20c-0.7-0.4-1.2-1.2-1.2-2.1v-5c0-0.8%2C0.4-1.6%2C1.2-2.1l4.3-2.5c0.7-0.4%2C1.6-0.4%2C2.4%2C0L16%2C7.2c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v3.3l3.8-2.2V7%20%20c0-0.8-0.4-1.6-1.2-2.1l-8-4.7c-0.7-0.4-1.6-0.4-2.4%2C0L1.2%2C5C0.4%2C5.4%2C0%2C6.2%2C0%2C7v9.4c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l5.5-3.2l3.8-2.2l5.5-3.2c0.7-0.4%2C1.6-0.4%2C2.4%2C0l4.3%2C2.5c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v5c0%2C0.8-0.4%2C1.6-1.2%2C2.1%20%20L29%2C28.8c-0.7%2C0.4-1.6%2C0.4-2.4%2C0l-4.3-2.5c-0.7-0.4-1.2-1.2-1.2-2.1V21l-3.8%2C2.2v3.3c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l8.1-4.7c0.7-0.4%2C1.2-1.2%2C1.2-2.1V17c0-0.8-0.4-1.6-1.2-2.1L29%2C10.2z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E' + +var _a$g +/** + * List of all the networks supported by the Uniswap Interface + */ +var SupportedChainId +;(function (SupportedChainId) { + SupportedChainId[(SupportedChainId['MAINNET'] = 1)] = 'MAINNET' + SupportedChainId[(SupportedChainId['ROPSTEN'] = 3)] = 'ROPSTEN' + SupportedChainId[(SupportedChainId['RINKEBY'] = 4)] = 'RINKEBY' + SupportedChainId[(SupportedChainId['GOERLI'] = 5)] = 'GOERLI' + SupportedChainId[(SupportedChainId['KOVAN'] = 42)] = 'KOVAN' + SupportedChainId[(SupportedChainId['ARBITRUM_ONE'] = 42161)] = 'ARBITRUM_ONE' + SupportedChainId[(SupportedChainId['ARBITRUM_RINKEBY'] = 421611)] = 'ARBITRUM_RINKEBY' + SupportedChainId[(SupportedChainId['OPTIMISM'] = 10)] = 'OPTIMISM' + SupportedChainId[(SupportedChainId['OPTIMISTIC_KOVAN'] = 69)] = 'OPTIMISTIC_KOVAN' + SupportedChainId[(SupportedChainId['POLYGON'] = 137)] = 'POLYGON' + SupportedChainId[(SupportedChainId['POLYGON_MUMBAI'] = 80001)] = 'POLYGON_MUMBAI' +})(SupportedChainId || (SupportedChainId = {})) +;(_a$g = {}), + (_a$g[SupportedChainId.MAINNET] = 'mainnet'), + (_a$g[SupportedChainId.ROPSTEN] = 'ropsten'), + (_a$g[SupportedChainId.RINKEBY] = 'rinkeby'), + (_a$g[SupportedChainId.GOERLI] = 'goerli'), + (_a$g[SupportedChainId.KOVAN] = 'kovan'), + (_a$g[SupportedChainId.POLYGON] = 'polygon'), + (_a$g[SupportedChainId.POLYGON_MUMBAI] = 'polygon_mumbai'), + (_a$g[SupportedChainId.ARBITRUM_ONE] = 'arbitrum'), + (_a$g[SupportedChainId.ARBITRUM_RINKEBY] = 'arbitrum_rinkeby'), + (_a$g[SupportedChainId.OPTIMISM] = 'optimism'), + (_a$g[SupportedChainId.OPTIMISTIC_KOVAN] = 'optimistic_kovan'), + _a$g +/** + * Array of all the supported chain IDs + */ +var ALL_SUPPORTED_CHAIN_IDS = Object.values(SupportedChainId).filter(function (id) { + return typeof id === 'number' +}) +var SUPPORTED_GAS_ESTIMATE_CHAIN_IDS = [SupportedChainId.MAINNET, SupportedChainId.POLYGON] +/** + * All the chain IDs that are running the Ethereum protocol. + */ +;[ + SupportedChainId.MAINNET, + SupportedChainId.ROPSTEN, + SupportedChainId.RINKEBY, + SupportedChainId.GOERLI, + SupportedChainId.KOVAN, + SupportedChainId.POLYGON, + SupportedChainId.POLYGON_MUMBAI, +] +/** + * Controls some L2 specific behavior, e.g. slippage tolerance, special UI behavior. + * The expectation is that all of these networks have immediate transaction confirmation. + */ +var L2_CHAIN_IDS = [ + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, +] + +var UNI_LIST = 'https://tokens.uniswap.org' +var AAVE_LIST = 'tokenlist.aave.eth' +var BA_LIST = 'https://raw.githubusercontent.com/The-Blockchain-Association/sec-notice-list/master/ba-sec-list.json' +var CMC_ALL_LIST = 'https://api.coinmarketcap.com/data-api/v3/uniswap/all.json' +var COINGECKO_LIST = 'https://tokens.coingecko.com/uniswap/all.json' +var COMPOUND_LIST = 'https://raw.githubusercontent.com/compound-finance/token-list/master/compound.tokenlist.json' +var GEMINI_LIST = 'https://www.gemini.com/uniswap/manifest.json' +var ARBITRUM_LIST = 'https://bridge.arbitrum.io/token-list-42161.json' +var KLEROS_LIST = 't2crtokens.eth' +var OPTIMISM_LIST = 'https://static.optimism.io/optimism.tokenlist.json' +var ROLL_LIST = 'https://app.tryroll.com/tokens.json' +var SET_LIST = 'https://raw.githubusercontent.com/SetProtocol/uniswap-tokenlist/main/set.tokenlist.json' +var WRAPPED_LIST = 'wrapped.tokensoft.eth' +var UNSUPPORTED_LIST_URLS = [BA_LIST] +// this is the default list of lists that are exposed to users +// lower index == higher priority for token import +var DEFAULT_LIST_OF_LISTS_TO_DISPLAY = [ + UNI_LIST, + COMPOUND_LIST, + AAVE_LIST, + CMC_ALL_LIST, + COINGECKO_LIST, + KLEROS_LIST, + GEMINI_LIST, + WRAPPED_LIST, + SET_LIST, + ROLL_LIST, + ARBITRUM_LIST, + OPTIMISM_LIST, +] +var DEFAULT_LIST_OF_LISTS = __spreadArray( + __spreadArray([], __read(DEFAULT_LIST_OF_LISTS_TO_DISPLAY), false), + __read(UNSUPPORTED_LIST_URLS), + false +) +// default lists to be 'active' aka searched across +var DEFAULT_ACTIVE_LIST_URLS = [UNI_LIST, GEMINI_LIST] + +var _a$f, _b$6 +var INFURA_KEY = process.env.REACT_APP_INFURA_KEY +if (typeof INFURA_KEY === 'undefined') { + throw new Error('REACT_APP_INFURA_KEY must be a defined environment variable') +} +/** + * These are the network URLs used by the interface when there is not another available source of chain data + */ +var INFURA_NETWORK_URLS = + ((_a$f = {}), + (_a$f[SupportedChainId.MAINNET] = 'https://mainnet.infura.io/v3/' + INFURA_KEY), + (_a$f[SupportedChainId.RINKEBY] = 'https://rinkeby.infura.io/v3/' + INFURA_KEY), + (_a$f[SupportedChainId.ROPSTEN] = 'https://ropsten.infura.io/v3/' + INFURA_KEY), + (_a$f[SupportedChainId.GOERLI] = 'https://goerli.infura.io/v3/' + INFURA_KEY), + (_a$f[SupportedChainId.KOVAN] = 'https://kovan.infura.io/v3/' + INFURA_KEY), + (_a$f[SupportedChainId.OPTIMISM] = 'https://optimism-mainnet.infura.io/v3/' + INFURA_KEY), + (_a$f[SupportedChainId.OPTIMISTIC_KOVAN] = 'https://optimism-kovan.infura.io/v3/' + INFURA_KEY), + (_a$f[SupportedChainId.ARBITRUM_ONE] = 'https://arbitrum-mainnet.infura.io/v3/' + INFURA_KEY), + (_a$f[SupportedChainId.ARBITRUM_RINKEBY] = 'https://arbitrum-rinkeby.infura.io/v3/' + INFURA_KEY), + (_a$f[SupportedChainId.POLYGON] = 'https://polygon-mainnet.infura.io/v3/' + INFURA_KEY), + (_a$f[SupportedChainId.POLYGON_MUMBAI] = 'https://polygon-mumbai.infura.io/v3/' + INFURA_KEY), + _a$f) +var NetworkType +;(function (NetworkType) { + NetworkType[(NetworkType['L1'] = 0)] = 'L1' + NetworkType[(NetworkType['L2'] = 1)] = 'L2' +})(NetworkType || (NetworkType = {})) +var CHAIN_INFO = + ((_b$6 = {}), + (_b$6[SupportedChainId.MAINNET] = { + networkType: NetworkType.L1, + docs: 'https://docs.uniswap.org/', + explorer: 'https://etherscan.io/', + infoLink: 'https://info.uniswap.org/#/', + label: 'Ethereum', + logoUrl: EthereumLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, + rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.MAINNET], + }, + }), + (_b$6[SupportedChainId.RINKEBY] = { + networkType: NetworkType.L1, + docs: 'https://docs.uniswap.org/', + explorer: 'https://rinkeby.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/', + label: 'Rinkeby', + logoUrl: EthereumLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Rinkeby Ether', symbol: 'rETH', decimals: 18 }, + rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.RINKEBY], + }, + }), + (_b$6[SupportedChainId.ROPSTEN] = { + networkType: NetworkType.L1, + docs: 'https://docs.uniswap.org/', + explorer: 'https://ropsten.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/', + label: 'Ropsten', + logoUrl: EthereumLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Ropsten Ether', symbol: 'ropETH', decimals: 18 }, + rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.ROPSTEN], + }, + }), + (_b$6[SupportedChainId.KOVAN] = { + networkType: NetworkType.L1, + docs: 'https://docs.uniswap.org/', + explorer: 'https://kovan.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/', + label: 'Kovan', + logoUrl: EthereumLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Kovan Ether', symbol: 'kovETH', decimals: 18 }, + rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.KOVAN], + }, + }), + (_b$6[SupportedChainId.GOERLI] = { + networkType: NetworkType.L1, + docs: 'https://docs.uniswap.org/', + explorer: 'https://goerli.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/', + label: 'Görli', + logoUrl: EthereumLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Görli Ether', symbol: 'görETH', decimals: 18 }, + rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.GOERLI], + }, + }), + (_b$6[SupportedChainId.OPTIMISM] = { + networkType: NetworkType.L2, + blockWaitMsBeforeWarning: ms__default['default']( + templateObject_1$X || (templateObject_1$X = __makeTemplateObject(['25m'], ['25m'])) + ), + bridge: 'https://gateway.optimism.io/?chainId=1', + defaultListUrl: OPTIMISM_LIST, + docs: 'https://optimism.io/', + explorer: 'https://optimistic.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/optimism/', + label: 'Optimism', + logoUrl: optimismLogoUrl, + statusPage: 'https://optimism.io/status', + helpCenterUrl: 'https://help.uniswap.org/en/collections/3137778-uniswap-on-optimistic-ethereum-oξ', + addNetworkInfo: { + nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, + rpcUrl: 'https://mainnet.optimism.io', + }, + }), + (_b$6[SupportedChainId.OPTIMISTIC_KOVAN] = { + networkType: NetworkType.L2, + blockWaitMsBeforeWarning: ms__default['default']( + templateObject_2$E || (templateObject_2$E = __makeTemplateObject(['25m'], ['25m'])) + ), + bridge: 'https://gateway.optimism.io/', + defaultListUrl: OPTIMISM_LIST, + docs: 'https://optimism.io/', + explorer: 'https://optimistic.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/optimism/', + label: 'Optimistic Kovan', + logoUrl: optimismLogoUrl, + statusPage: 'https://optimism.io/status', + helpCenterUrl: 'https://help.uniswap.org/en/collections/3137778-uniswap-on-optimistic-ethereum-oξ', + addNetworkInfo: { + nativeCurrency: { name: 'Optimistic Kovan Ether', symbol: 'kovOpETH', decimals: 18 }, + rpcUrl: 'https://kovan.optimism.io', + }, + }), + (_b$6[SupportedChainId.ARBITRUM_ONE] = { + networkType: NetworkType.L2, + blockWaitMsBeforeWarning: ms__default['default']( + templateObject_3$x || (templateObject_3$x = __makeTemplateObject(['10m'], ['10m'])) + ), + bridge: 'https://bridge.arbitrum.io/', + docs: 'https://offchainlabs.com/', + explorer: 'https://arbiscan.io/', + infoLink: 'https://info.uniswap.org/#/arbitrum', + label: 'Arbitrum', + logoUrl: arbitrumLogoUrl, + defaultListUrl: ARBITRUM_LIST, + helpCenterUrl: 'https://help.uniswap.org/en/collections/3137787-uniswap-on-arbitrum', + addNetworkInfo: { + nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, + rpcUrl: 'https://arb1.arbitrum.io/rpc', + }, + }), + (_b$6[SupportedChainId.ARBITRUM_RINKEBY] = { + networkType: NetworkType.L2, + blockWaitMsBeforeWarning: ms__default['default']( + templateObject_4$n || (templateObject_4$n = __makeTemplateObject(['10m'], ['10m'])) + ), + bridge: 'https://bridge.arbitrum.io/', + docs: 'https://offchainlabs.com/', + explorer: 'https://rinkeby-explorer.arbitrum.io/', + infoLink: 'https://info.uniswap.org/#/arbitrum/', + label: 'Arbitrum Rinkeby', + logoUrl: arbitrumLogoUrl, + defaultListUrl: ARBITRUM_LIST, + helpCenterUrl: 'https://help.uniswap.org/en/collections/3137787-uniswap-on-arbitrum', + addNetworkInfo: { + nativeCurrency: { name: 'Rinkeby Arbitrum Ether', symbol: 'rinkArbETH', decimals: 18 }, + rpcUrl: 'https://rinkeby.arbitrum.io/rpc', + }, + }), + (_b$6[SupportedChainId.POLYGON] = { + networkType: NetworkType.L1, + blockWaitMsBeforeWarning: ms__default['default']( + templateObject_5$k || (templateObject_5$k = __makeTemplateObject(['10m'], ['10m'])) + ), + bridge: 'https://wallet.polygon.technology/bridge', + docs: 'https://polygon.io/', + explorer: 'https://polygonscan.com/', + infoLink: 'https://info.uniswap.org/#/polygon/', + label: 'Polygon', + logoUrl: polygonMaticLogo, + addNetworkInfo: { + rpcUrl: 'https://polygon-rpc.com/', + nativeCurrency: { name: 'Polygon Matic', symbol: 'MATIC', decimals: 18 }, + }, + }), + (_b$6[SupportedChainId.POLYGON_MUMBAI] = { + networkType: NetworkType.L1, + blockWaitMsBeforeWarning: ms__default['default']( + templateObject_6$e || (templateObject_6$e = __makeTemplateObject(['10m'], ['10m'])) + ), + bridge: 'https://wallet.polygon.technology/bridge', + docs: 'https://polygon.io/', + explorer: 'https://mumbai.polygonscan.com/', + infoLink: 'https://info.uniswap.org/#/polygon/', + label: 'Polygon Mumbai', + logoUrl: polygonMaticLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Polygon Mumbai Matic', symbol: 'mMATIC', decimals: 18 }, + rpcUrl: 'https://rpc-endpoints.superfluid.dev/mumbai', + }, + }), + _b$6) +var templateObject_1$X, + templateObject_2$E, + templateObject_3$x, + templateObject_4$n, + templateObject_5$k, + templateObject_6$e + +var NetworkContextName = 'NETWORK' +// 30 minutes, denominated in seconds +var DEFAULT_DEADLINE_FROM_NOW = 60 * 30 +var L2_DEADLINE_FROM_NOW = 60 * 5 +// transaction popup dismisal amounts +var DEFAULT_TXN_DISMISS_MS = 25000 +// used for rewards deadlines +JSBI__default['default'].BigInt(60 * 60 * 24 * 7) +JSBI__default['default'].BigInt(0) +// one basis JSBI.BigInt +var BIPS_BASE = JSBI__default['default'].BigInt(10000) +new sdkCore.Percent(JSBI__default['default'].BigInt(1), BIPS_BASE) +// used for warning states +var ALLOWED_PRICE_IMPACT_LOW = new sdkCore.Percent(JSBI__default['default'].BigInt(100), BIPS_BASE) // 1% +var ALLOWED_PRICE_IMPACT_MEDIUM = new sdkCore.Percent(JSBI__default['default'].BigInt(300), BIPS_BASE) // 3% +var ALLOWED_PRICE_IMPACT_HIGH = new sdkCore.Percent(JSBI__default['default'].BigInt(500), BIPS_BASE) // 5% +// if the price slippage exceeds this number, force the user to type 'confirm' to execute +var PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN = new sdkCore.Percent(JSBI__default['default'].BigInt(1000), BIPS_BASE) // 10% +// for non expert mode disable swaps above this +var BLOCKED_PRICE_IMPACT_NON_EXPERT = new sdkCore.Percent(JSBI__default['default'].BigInt(1500), BIPS_BASE) // 15% +var BETTER_TRADE_LESS_HOPS_THRESHOLD = new sdkCore.Percent(JSBI__default['default'].BigInt(50), BIPS_BASE) +var ZERO_PERCENT = new sdkCore.Percent('0') +new sdkCore.Percent(JSBI__default['default'].BigInt(200), BIPS_BASE) +var ONE_HUNDRED_PERCENT = new sdkCore.Percent('1') + +function useActiveWeb3React() { + // if (false) { + // return useWidgetsWeb3React() + // } + var interfaceContext = core.useWeb3React() + var interfaceNetworkContext = core.useWeb3React(NetworkContextName) + if (interfaceContext.active) { + return interfaceContext + } + return interfaceNetworkContext +} + +var useAppDispatch = function () { + return reactRedux.useDispatch() +} +var useAppSelector = reactRedux.useSelector + +var DEFAULT_NETWORKS = [ + SupportedChainId.MAINNET, + SupportedChainId.ROPSTEN, + SupportedChainId.RINKEBY, + SupportedChainId.GOERLI, + SupportedChainId.KOVAN, +] +function constructSameAddressMap(address, additionalNetworks) { + if (additionalNetworks === void 0) { + additionalNetworks = [] + } + return DEFAULT_NETWORKS.concat(additionalNetworks).reduce(function (memo, chainId) { + memo[chainId] = address + return memo + }, {}) +} + +var _a$e, _b$5, _c$4, _d$3, _e$2, _f$1, _g$1, _h$1 +var UNI_ADDRESS = constructSameAddressMap('0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984') +var MULTICALL_ADDRESS = __assign( + __assign( + {}, + constructSameAddressMap('0x1F98415757620B543A52E61c46B32eB19261F984', [ + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.OPTIMISM, + SupportedChainId.POLYGON_MUMBAI, + SupportedChainId.POLYGON, + ]) + ), + ((_a$e = {}), + (_a$e[SupportedChainId.ARBITRUM_ONE] = '0xadF885960B47eA2CD9B55E6DAc6B42b7Cb2806dB'), + (_a$e[SupportedChainId.ARBITRUM_RINKEBY] = '0xa501c031958F579dB7676fF1CE78AD305794d579'), + _a$e) +) +var V2_FACTORY_ADDRESSES = constructSameAddressMap(v2Sdk.FACTORY_ADDRESS) +var V2_ROUTER_ADDRESS = constructSameAddressMap('0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D') +var V3_ROUTER_ADDRESS = constructSameAddressMap('0xE592427A0AEce92De3Edee1F18E0157C05861564', [ + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON, + SupportedChainId.POLYGON_MUMBAI, +]) +var SWAP_ROUTER_ADDRESSES = constructSameAddressMap('0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45', [ + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON, + SupportedChainId.POLYGON_MUMBAI, +]) +/** + * The oldest V0 governance address + */ +constructSameAddressMap('0x5e4be8Bc9637f0EAA1A755019e06A68ce081D58F') +/** + * The older V1 governance address + */ +;(_b$5 = {}), (_b$5[SupportedChainId.MAINNET] = '0xC4e172459f1E7939D522503B81AFAaC1014CE6F6'), _b$5 +/** + * The latest governor bravo that is currently admin of timelock + */ +;(_c$4 = {}), (_c$4[SupportedChainId.MAINNET] = '0x408ED6354d4973f66138C91495F2f2FCbd8724C3'), _c$4 +constructSameAddressMap('0x1a9C8182C09F50C8318d769245beA52c32BE35BC') +;(_d$3 = {}), (_d$3[SupportedChainId.MAINNET] = '0x090D4613473dEE047c3f2706764f49E0821D256e'), _d$3 +var ARGENT_WALLET_DETECTOR_ADDRESS = + ((_e$2 = {}), (_e$2[SupportedChainId.MAINNET] = '0xeca4B0bDBf7c55E9b7925919d03CbF8Dc82537E8'), _e$2) +var V3_CORE_FACTORY_ADDRESSES = constructSameAddressMap(v3Sdk.FACTORY_ADDRESS, [ + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON_MUMBAI, + SupportedChainId.POLYGON, +]) +var QUOTER_ADDRESSES = constructSameAddressMap('0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6', [ + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON_MUMBAI, + SupportedChainId.POLYGON, +]) +constructSameAddressMap('0xC36442b4a4522E871399CD717aBDD847Ab11FE88', [ + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON_MUMBAI, + SupportedChainId.POLYGON, +]) +var ENS_REGISTRAR_ADDRESSES = + ((_f$1 = {}), + (_f$1[SupportedChainId.MAINNET] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'), + (_f$1[SupportedChainId.ROPSTEN] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'), + (_f$1[SupportedChainId.GOERLI] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'), + (_f$1[SupportedChainId.RINKEBY] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'), + _f$1) +;(_g$1 = {}), (_g$1[SupportedChainId.MAINNET] = '0x65770b5283117639760beA3F867b69b3697a91dd'), _g$1 +constructSameAddressMap('0xA5644E29708357803b5A882D272c41cC0dF92B34', [ + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON_MUMBAI, + SupportedChainId.POLYGON, +]) +;(_h$1 = {}), + (_h$1[SupportedChainId.ARBITRUM_ONE] = '0xbfd8137f7d1516D3ea5cA83523914859ec47F573'), + (_h$1[SupportedChainId.ARBITRUM_RINKEBY] = '0xbfd8137f7d1516D3ea5cA83523914859ec47F573'), + _h$1 + +var _a$d, _b$4 +var AMPL = new sdkCore.Token( + SupportedChainId.MAINNET, + '0xD46bA6D942050d489DBd938a2C909A5d5039A161', + 9, + 'AMPL', + 'Ampleforth' +) +var DAI = new sdkCore.Token( + SupportedChainId.MAINNET, + '0x6B175474E89094C44Da98b954EedeAC495271d0F', + 18, + 'DAI', + 'Dai Stablecoin' +) +var DAI_ARBITRUM_ONE = new sdkCore.Token( + SupportedChainId.ARBITRUM_ONE, + '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', + 18, + 'DAI', + 'Dai stable coin' +) +var DAI_OPTIMISM = new sdkCore.Token( + SupportedChainId.OPTIMISM, + '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', + 18, + 'DAI', + 'Dai stable coin' +) +var USDC = new sdkCore.Token( + SupportedChainId.MAINNET, + '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', + 6, + 'USDC', + 'USD//C' +) +var USDC_ARBITRUM = new sdkCore.Token( + SupportedChainId.ARBITRUM_ONE, + '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8', + 6, + 'USDC', + 'USD//C' +) +var USDC_POLYGON = new sdkCore.Token( + SupportedChainId.POLYGON, + '0x2791bca1f2de4661ed88a30c99a7a9449aa84174', + 6, + 'USDC', + 'USD//C' +) +var DAI_POLYGON = new sdkCore.Token( + SupportedChainId.POLYGON, + '0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063', + 18, + 'DAI', + 'Dai Stablecoin' +) +var USDT_POLYGON = new sdkCore.Token( + SupportedChainId.POLYGON, + '0xc2132d05d31c914a87c6611c10748aeb04b58e8f', + 6, + 'USDT', + 'Tether USD' +) +var WBTC_POLYGON = new sdkCore.Token( + SupportedChainId.POLYGON, + '0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6', + 8, + 'WBTC', + 'Wrapped BTC' +) +var USDC_OPTIMISM = new sdkCore.Token( + SupportedChainId.OPTIMISM, + '0x7F5c764cBc14f9669B88837ca1490cCa17c31607', + 6, + 'USDC', + 'USD//C' +) +var USDT = new sdkCore.Token( + SupportedChainId.MAINNET, + '0xdAC17F958D2ee523a2206206994597C13D831ec7', + 6, + 'USDT', + 'Tether USD' +) +var USDT_ARBITRUM_ONE = new sdkCore.Token( + SupportedChainId.ARBITRUM_ONE, + '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9', + 6, + 'USDT', + 'Tether USD' +) +var USDT_OPTIMISM = new sdkCore.Token( + SupportedChainId.OPTIMISM, + '0x94b008aA00579c1307B0EF2c499aD98a8ce58e58', + 6, + 'USDT', + 'Tether USD' +) +var WBTC = new sdkCore.Token( + SupportedChainId.MAINNET, + '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', + 8, + 'WBTC', + 'Wrapped BTC' +) +var WBTC_ARBITRUM_ONE = new sdkCore.Token( + SupportedChainId.ARBITRUM_ONE, + '0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f', + 8, + 'WBTC', + 'Wrapped BTC' +) +var WBTC_OPTIMISM = new sdkCore.Token( + SupportedChainId.OPTIMISM, + '0x68f180fcCe6836688e9084f035309E29Bf0A2095', + 8, + 'WBTC', + 'Wrapped BTC' +) +var FEI = new sdkCore.Token( + SupportedChainId.MAINNET, + '0x956F47F50A910163D8BF957Cf5846D573E7f87CA', + 18, + 'FEI', + 'Fei USD' +) +var TRIBE = new sdkCore.Token( + SupportedChainId.MAINNET, + '0xc7283b66Eb1EB5FB86327f08e1B5816b0720212B', + 18, + 'TRIBE', + 'Tribe' +) +var FRAX = new sdkCore.Token(SupportedChainId.MAINNET, '0x853d955aCEf822Db058eb8505911ED77F175b99e', 18, 'FRAX', 'Frax') +var FXS = new sdkCore.Token( + SupportedChainId.MAINNET, + '0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0', + 18, + 'FXS', + 'Frax Share' +) +var renBTC = new sdkCore.Token( + SupportedChainId.MAINNET, + '0xEB4C2781e4ebA804CE9a9803C67d0893436bB27D', + 8, + 'renBTC', + 'renBTC' +) +var ETH2X_FLI = new sdkCore.Token( + SupportedChainId.MAINNET, + '0xAa6E8127831c9DE45ae56bB1b0d4D4Da6e5665BD', + 18, + 'ETH2x-FLI', + 'ETH 2x Flexible Leverage Index' +) +var sETH2 = new sdkCore.Token( + SupportedChainId.MAINNET, + '0xFe2e637202056d30016725477c5da089Ab0A043A', + 18, + 'sETH2', + 'StakeWise Staked ETH2' +) +var rETH2 = new sdkCore.Token( + SupportedChainId.MAINNET, + '0x20BC832ca081b91433ff6c17f85701B6e92486c5', + 18, + 'rETH2', + 'StakeWise Reward ETH2' +) +var SWISE = new sdkCore.Token( + SupportedChainId.MAINNET, + '0x48C3399719B582dD63eB5AADf12A40B4C3f52FA2', + 18, + 'SWISE', + 'StakeWise' +) +var WETH_POLYGON_MUMBAI = new sdkCore.Token( + SupportedChainId.POLYGON_MUMBAI, + '0xa6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa', + 18, + 'WETH', + 'Wrapped Ether' +) +var WETH_POLYGON = new sdkCore.Token( + SupportedChainId.POLYGON, + '0x7ceb23fd6bc0add59e62ac25578270cff1b9f619', + 18, + 'WETH', + 'Wrapped Ether' +) +var UNI = + ((_a$d = {}), + (_a$d[SupportedChainId.MAINNET] = new sdkCore.Token(SupportedChainId.MAINNET, UNI_ADDRESS[1], 18, 'UNI', 'Uniswap')), + (_a$d[SupportedChainId.RINKEBY] = new sdkCore.Token(SupportedChainId.RINKEBY, UNI_ADDRESS[4], 18, 'UNI', 'Uniswap')), + (_a$d[SupportedChainId.ROPSTEN] = new sdkCore.Token(SupportedChainId.ROPSTEN, UNI_ADDRESS[3], 18, 'UNI', 'Uniswap')), + (_a$d[SupportedChainId.GOERLI] = new sdkCore.Token(SupportedChainId.GOERLI, UNI_ADDRESS[5], 18, 'UNI', 'Uniswap')), + (_a$d[SupportedChainId.KOVAN] = new sdkCore.Token(SupportedChainId.KOVAN, UNI_ADDRESS[42], 18, 'UNI', 'Uniswap')), + _a$d) +var WRAPPED_NATIVE_CURRENCY = __assign( + __assign({}, sdkCore.WETH9), + ((_b$4 = {}), + (_b$4[SupportedChainId.OPTIMISM] = new sdkCore.Token( + SupportedChainId.OPTIMISM, + '0x4200000000000000000000000000000000000006', + 18, + 'WETH', + 'Wrapped Ether' + )), + (_b$4[SupportedChainId.OPTIMISTIC_KOVAN] = new sdkCore.Token( + SupportedChainId.OPTIMISTIC_KOVAN, + '0x4200000000000000000000000000000000000006', + 18, + 'WETH', + 'Wrapped Ether' + )), + (_b$4[SupportedChainId.ARBITRUM_ONE] = new sdkCore.Token( + SupportedChainId.ARBITRUM_ONE, + '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1', + 18, + 'WETH', + 'Wrapped Ether' + )), + (_b$4[SupportedChainId.ARBITRUM_RINKEBY] = new sdkCore.Token( + SupportedChainId.ARBITRUM_RINKEBY, + '0xB47e6A5f8b33b3F17603C83a0535A9dcD7E32681', + 18, + 'WETH', + 'Wrapped Ether' + )), + (_b$4[SupportedChainId.POLYGON] = new sdkCore.Token( + SupportedChainId.POLYGON, + '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270', + 18, + 'WMATIC', + 'Wrapped MATIC' + )), + (_b$4[SupportedChainId.POLYGON_MUMBAI] = new sdkCore.Token( + SupportedChainId.POLYGON_MUMBAI, + '0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889', + 18, + 'WMATIC', + 'Wrapped MATIC' + )), + _b$4) +) +function isMatic(chainId) { + return chainId === SupportedChainId.POLYGON_MUMBAI || chainId === SupportedChainId.POLYGON +} +var MaticNativeCurrency = /** @class */ (function (_super) { + __extends(MaticNativeCurrency, _super) + function MaticNativeCurrency(chainId) { + var _this = this + if (!isMatic(chainId)) throw new Error('Not matic') + _this = _super.call(this, chainId, 18, 'MATIC', 'Polygon Matic') || this + return _this + } + MaticNativeCurrency.prototype.equals = function (other) { + return other.isNative && other.chainId === this.chainId + } + Object.defineProperty(MaticNativeCurrency.prototype, 'wrapped', { + get() { + if (!isMatic(this.chainId)) throw new Error('Not matic') + return WRAPPED_NATIVE_CURRENCY[this.chainId] + }, + enumerable: false, + configurable: true, + }) + return MaticNativeCurrency +})(sdkCore.NativeCurrency) +var ExtendedEther = /** @class */ (function (_super) { + __extends(ExtendedEther, _super) + function ExtendedEther() { + return (_super !== null && _super.apply(this, arguments)) || this + } + Object.defineProperty(ExtendedEther.prototype, 'wrapped', { + get() { + if (this.chainId in WRAPPED_NATIVE_CURRENCY) return WRAPPED_NATIVE_CURRENCY[this.chainId] + throw new Error('Unsupported chain ID') + }, + enumerable: false, + configurable: true, + }) + ExtendedEther.onChain = function (chainId) { + var _a + return (_a = this._cachedExtendedEther[chainId]) !== null && _a !== void 0 + ? _a + : (this._cachedExtendedEther[chainId] = new ExtendedEther(chainId)) + } + ExtendedEther._cachedExtendedEther = {} + return ExtendedEther +})(sdkCore.Ether) +var cachedNativeCurrency = {} +function nativeOnChain(chainId) { + var _a + return (_a = cachedNativeCurrency[chainId]) !== null && _a !== void 0 + ? _a + : (cachedNativeCurrency[chainId] = isMatic(chainId) + ? new MaticNativeCurrency(chainId) + : ExtendedEther.onChain(chainId)) +} + +var _a$c, _b$3, _c$3, _d$2, _e$1, _f, _g, _h +var WRAPPED_NATIVE_CURRENCIES_ONLY = Object.fromEntries( + Object.entries(WRAPPED_NATIVE_CURRENCY).map(function (_a) { + var _b = __read(_a, 2), + key = _b[0], + value = _b[1] + return [key, [value]] + }) +) +// used to construct intermediary pairs for trading +var BASES_TO_CHECK_TRADES_AGAINST = __assign( + __assign({}, WRAPPED_NATIVE_CURRENCIES_ONLY), + ((_a$c = {}), + (_a$c[SupportedChainId.MAINNET] = __spreadArray( + __spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.MAINNET]), false), + [DAI, USDC, USDT, WBTC], + false + )), + (_a$c[SupportedChainId.OPTIMISM] = __spreadArray( + __spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.OPTIMISM]), false), + [DAI_OPTIMISM, USDT_OPTIMISM, WBTC_OPTIMISM], + false + )), + (_a$c[SupportedChainId.ARBITRUM_ONE] = __spreadArray( + __spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.ARBITRUM_ONE]), false), + [DAI_ARBITRUM_ONE, USDT_ARBITRUM_ONE, WBTC_ARBITRUM_ONE], + false + )), + (_a$c[SupportedChainId.POLYGON] = __spreadArray( + __spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.POLYGON]), false), + [DAI_POLYGON, USDC_POLYGON, USDT_POLYGON, WETH_POLYGON], + false + )), + _a$c) +) +var ADDITIONAL_BASES = + ((_b$3 = {}), + (_b$3[SupportedChainId.MAINNET] = + ((_c$3 = { + '0xF16E4d813f4DcfDe4c5b44f305c908742De84eF0': [ETH2X_FLI], + }), + (_c$3[rETH2.address] = [sETH2]), + (_c$3[SWISE.address] = [sETH2]), + (_c$3[FEI.address] = [TRIBE]), + (_c$3[TRIBE.address] = [FEI]), + (_c$3[FRAX.address] = [FXS]), + (_c$3[FXS.address] = [FRAX]), + (_c$3[WBTC.address] = [renBTC]), + (_c$3[renBTC.address] = [WBTC]), + _c$3)), + _b$3) +/** + * Some tokens can only be swapped via certain pairs, so we override the list of bases that are considered for these + * tokens. + */ +var CUSTOM_BASES = + ((_d$2 = {}), + (_d$2[SupportedChainId.MAINNET] = + ((_e$1 = {}), (_e$1[AMPL.address] = [DAI, WRAPPED_NATIVE_CURRENCY[SupportedChainId.MAINNET]]), _e$1)), + _d$2) +/** + * Shows up in the currency select for swap and add liquidity + */ +var COMMON_BASES = + ((_f = {}), + (_f[SupportedChainId.MAINNET] = [ + nativeOnChain(SupportedChainId.MAINNET), + DAI, + USDC, + USDT, + WBTC, + WRAPPED_NATIVE_CURRENCY[SupportedChainId.MAINNET], + ]), + (_f[SupportedChainId.ROPSTEN] = [ + nativeOnChain(SupportedChainId.ROPSTEN), + WRAPPED_NATIVE_CURRENCY[SupportedChainId.ROPSTEN], + ]), + (_f[SupportedChainId.RINKEBY] = [ + nativeOnChain(SupportedChainId.RINKEBY), + WRAPPED_NATIVE_CURRENCY[SupportedChainId.RINKEBY], + ]), + (_f[SupportedChainId.GOERLI] = [ + nativeOnChain(SupportedChainId.GOERLI), + WRAPPED_NATIVE_CURRENCY[SupportedChainId.GOERLI], + ]), + (_f[SupportedChainId.KOVAN] = [ + nativeOnChain(SupportedChainId.KOVAN), + WRAPPED_NATIVE_CURRENCY[SupportedChainId.KOVAN], + ]), + (_f[SupportedChainId.ARBITRUM_ONE] = [ + nativeOnChain(SupportedChainId.ARBITRUM_ONE), + DAI_ARBITRUM_ONE, + USDC_ARBITRUM, + USDT_ARBITRUM_ONE, + WBTC_ARBITRUM_ONE, + WRAPPED_NATIVE_CURRENCY[SupportedChainId.ARBITRUM_ONE], + ]), + (_f[SupportedChainId.ARBITRUM_RINKEBY] = [ + nativeOnChain(SupportedChainId.ARBITRUM_RINKEBY), + WRAPPED_NATIVE_CURRENCY[SupportedChainId.ARBITRUM_RINKEBY], + ]), + (_f[SupportedChainId.OPTIMISM] = [ + nativeOnChain(SupportedChainId.OPTIMISM), + DAI_OPTIMISM, + USDC_OPTIMISM, + USDT_OPTIMISM, + WBTC_OPTIMISM, + ]), + (_f[SupportedChainId.OPTIMISTIC_KOVAN] = [nativeOnChain(SupportedChainId.OPTIMISTIC_KOVAN)]), + (_f[SupportedChainId.POLYGON] = [ + nativeOnChain(SupportedChainId.POLYGON), + WETH_POLYGON, + USDC_POLYGON, + DAI_POLYGON, + USDT_POLYGON, + WBTC_POLYGON, + ]), + (_f[SupportedChainId.POLYGON_MUMBAI] = [ + nativeOnChain(SupportedChainId.POLYGON_MUMBAI), + WRAPPED_NATIVE_CURRENCY[SupportedChainId.POLYGON_MUMBAI], + WETH_POLYGON_MUMBAI, + ]), + _f) +// used to construct the list of all pairs we consider by default in the frontend +__assign( + __assign({}, WRAPPED_NATIVE_CURRENCIES_ONLY), + ((_g = {}), + (_g[SupportedChainId.MAINNET] = __spreadArray( + __spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.MAINNET]), false), + [DAI, USDC, USDT, WBTC], + false + )), + _g) +) +;(_h = {}), + (_h[SupportedChainId.MAINNET] = [ + [ + new sdkCore.Token( + SupportedChainId.MAINNET, + '0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643', + 8, + 'cDAI', + 'Compound Dai' + ), + new sdkCore.Token( + SupportedChainId.MAINNET, + '0x39AA39c021dfbaE8faC545936693aC917d5E7563', + 8, + 'cUSDC', + 'Compound USD Coin' + ), + ], + [USDC, USDT], + [DAI, USDT], + ]), + _h var abi$5 = [ - { - inputs: [ - { - internalType: "address", - name: "_rewardsDistribution", - type: "address" - }, - { - internalType: "address", - name: "_rewardsToken", - type: "address" - }, - { - internalType: "address", - name: "_stakingToken", - type: "address" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "constructor" - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "reward", - type: "uint256" - } - ], - name: "RewardAdded", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "user", - type: "address" - }, - { - indexed: false, - internalType: "uint256", - name: "reward", - type: "uint256" - } - ], - name: "RewardPaid", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "user", - type: "address" - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256" - } - ], - name: "Staked", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "user", - type: "address" - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256" - } - ], - name: "Withdrawn", - type: "event" - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "account", - type: "address" - } - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "account", - type: "address" - } - ], - name: "earned", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - ], - name: "exit", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - ], - name: "getReward", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "getRewardForDuration", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "lastTimeRewardApplicable", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "lastUpdateTime", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "reward", - type: "uint256" - } - ], - name: "notifyRewardAmount", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "periodFinish", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "rewardPerToken", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "rewardPerTokenStored", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "rewardRate", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - name: "rewards", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "rewardsDistribution", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "rewardsDuration", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "rewardsToken", - outputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256" - } - ], - name: "stake", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - }, - { - internalType: "uint8", - name: "v", - type: "uint8" - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32" - } - ], - name: "stakeWithPermit", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "stakingToken", - outputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - name: "userRewardPerTokenPaid", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256" - } - ], - name: "withdraw", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - } -]; + { + inputs: [ + { + internalType: 'address', + name: '_rewardsDistribution', + type: 'address', + }, + { + internalType: 'address', + name: '_rewardsToken', + type: 'address', + }, + { + internalType: 'address', + name: '_stakingToken', + type: 'address', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'uint256', + name: 'reward', + type: 'uint256', + }, + ], + name: 'RewardAdded', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'user', + type: 'address', + }, + { + indexed: false, + internalType: 'uint256', + name: 'reward', + type: 'uint256', + }, + ], + name: 'RewardPaid', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'user', + type: 'address', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount', + type: 'uint256', + }, + ], + name: 'Staked', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'user', + type: 'address', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount', + type: 'uint256', + }, + ], + name: 'Withdrawn', + type: 'event', + }, + { + constant: true, + inputs: [ + { + internalType: 'address', + name: 'account', + type: 'address', + }, + ], + name: 'balanceOf', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'address', + name: 'account', + type: 'address', + }, + ], + name: 'earned', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [], + name: 'exit', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [], + name: 'getReward', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'getRewardForDuration', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'lastTimeRewardApplicable', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'lastUpdateTime', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'uint256', + name: 'reward', + type: 'uint256', + }, + ], + name: 'notifyRewardAmount', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'periodFinish', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'rewardPerToken', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'rewardPerTokenStored', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'rewardRate', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + name: 'rewards', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'rewardsDistribution', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'rewardsDuration', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'rewardsToken', + outputs: [ + { + internalType: 'contract IERC20', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'uint256', + name: 'amount', + type: 'uint256', + }, + ], + name: 'stake', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'uint256', + name: 'amount', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + { + internalType: 'uint8', + name: 'v', + type: 'uint8', + }, + { + internalType: 'bytes32', + name: 'r', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 's', + type: 'bytes32', + }, + ], + name: 'stakeWithPermit', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'stakingToken', + outputs: [ + { + internalType: 'contract IERC20', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'totalSupply', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + name: 'userRewardPerTokenPaid', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'uint256', + name: 'amount', + type: 'uint256', + }, + ], + name: 'withdraw', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, +] var abi$4 = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address" - }, - { - indexed: true, - internalType: "address", - name: "spender", - type: "address" - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256" - } - ], - name: "Approval", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "sender", - type: "address" - }, - { - indexed: false, - internalType: "uint256", - name: "amount0", - type: "uint256" - }, - { - indexed: false, - internalType: "uint256", - name: "amount1", - type: "uint256" - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address" - } - ], - name: "Burn", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "sender", - type: "address" - }, - { - indexed: false, - internalType: "uint256", - name: "amount0", - type: "uint256" - }, - { - indexed: false, - internalType: "uint256", - name: "amount1", - type: "uint256" - } - ], - name: "Mint", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "sender", - type: "address" - }, - { - indexed: false, - internalType: "uint256", - name: "amount0In", - type: "uint256" - }, - { - indexed: false, - internalType: "uint256", - name: "amount1In", - type: "uint256" - }, - { - indexed: false, - internalType: "uint256", - name: "amount0Out", - type: "uint256" - }, - { - indexed: false, - internalType: "uint256", - name: "amount1Out", - type: "uint256" - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address" - } - ], - name: "Swap", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint112", - name: "reserve0", - type: "uint112" - }, - { - indexed: false, - internalType: "uint112", - name: "reserve1", - type: "uint112" - } - ], - name: "Sync", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address" - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address" - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256" - } - ], - name: "Transfer", - type: "event" - }, - { - constant: true, - inputs: [ - ], - name: "DOMAIN_SEPARATOR", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "MINIMUM_LIQUIDITY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "pure", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "PERMIT_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32" - } - ], - payable: false, - stateMutability: "pure", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "owner", - type: "address" - }, - { - internalType: "address", - name: "spender", - type: "address" - } - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "spender", - type: "address" - }, - { - internalType: "uint256", - name: "value", - type: "uint256" - } - ], - name: "approve", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "owner", - type: "address" - } - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "to", - type: "address" - } - ], - name: "burn", - outputs: [ - { - internalType: "uint256", - name: "amount0", - type: "uint256" - }, - { - internalType: "uint256", - name: "amount1", - type: "uint256" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8" - } - ], - payable: false, - stateMutability: "pure", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "factory", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "getReserves", - outputs: [ - { - internalType: "uint112", - name: "reserve0", - type: "uint112" - }, - { - internalType: "uint112", - name: "reserve1", - type: "uint112" - }, - { - internalType: "uint32", - name: "blockTimestampLast", - type: "uint32" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "", - type: "address" - }, - { - internalType: "address", - name: "", - type: "address" - } - ], - name: "initialize", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "kLast", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "to", - type: "address" - } - ], - name: "mint", - outputs: [ - { - internalType: "uint256", - name: "liquidity", - type: "uint256" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string" - } - ], - payable: false, - stateMutability: "pure", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "owner", - type: "address" - } - ], - name: "nonces", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "owner", - type: "address" - }, - { - internalType: "address", - name: "spender", - type: "address" - }, - { - internalType: "uint256", - name: "value", - type: "uint256" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - }, - { - internalType: "uint8", - name: "v", - type: "uint8" - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32" - } - ], - name: "permit", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "price0CumulativeLast", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "price1CumulativeLast", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "to", - type: "address" - } - ], - name: "skim", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "amount0Out", - type: "uint256" - }, - { - internalType: "uint256", - name: "amount1Out", - type: "uint256" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "bytes", - name: "data", - type: "bytes" - } - ], - name: "swap", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string" - } - ], - payable: false, - stateMutability: "pure", - type: "function" - }, - { - constant: false, - inputs: [ - ], - name: "sync", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "token0", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "token1", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "value", - type: "uint256" - } - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "from", - type: "address" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "value", - type: "uint256" - } - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - } -]; + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + indexed: true, + internalType: 'address', + name: 'spender', + type: 'address', + }, + { + indexed: false, + internalType: 'uint256', + name: 'value', + type: 'uint256', + }, + ], + name: 'Approval', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'sender', + type: 'address', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount0', + type: 'uint256', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount1', + type: 'uint256', + }, + { + indexed: true, + internalType: 'address', + name: 'to', + type: 'address', + }, + ], + name: 'Burn', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'sender', + type: 'address', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount0', + type: 'uint256', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount1', + type: 'uint256', + }, + ], + name: 'Mint', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'sender', + type: 'address', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount0In', + type: 'uint256', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount1In', + type: 'uint256', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount0Out', + type: 'uint256', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount1Out', + type: 'uint256', + }, + { + indexed: true, + internalType: 'address', + name: 'to', + type: 'address', + }, + ], + name: 'Swap', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'uint112', + name: 'reserve0', + type: 'uint112', + }, + { + indexed: false, + internalType: 'uint112', + name: 'reserve1', + type: 'uint112', + }, + ], + name: 'Sync', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'from', + type: 'address', + }, + { + indexed: true, + internalType: 'address', + name: 'to', + type: 'address', + }, + { + indexed: false, + internalType: 'uint256', + name: 'value', + type: 'uint256', + }, + ], + name: 'Transfer', + type: 'event', + }, + { + constant: true, + inputs: [], + name: 'DOMAIN_SEPARATOR', + outputs: [ + { + internalType: 'bytes32', + name: '', + type: 'bytes32', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'MINIMUM_LIQUIDITY', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'pure', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'PERMIT_TYPEHASH', + outputs: [ + { + internalType: 'bytes32', + name: '', + type: 'bytes32', + }, + ], + payable: false, + stateMutability: 'pure', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + internalType: 'address', + name: 'spender', + type: 'address', + }, + ], + name: 'allowance', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'address', + name: 'spender', + type: 'address', + }, + { + internalType: 'uint256', + name: 'value', + type: 'uint256', + }, + ], + name: 'approve', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + ], + name: 'balanceOf', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'address', + name: 'to', + type: 'address', + }, + ], + name: 'burn', + outputs: [ + { + internalType: 'uint256', + name: 'amount0', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amount1', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'decimals', + outputs: [ + { + internalType: 'uint8', + name: '', + type: 'uint8', + }, + ], + payable: false, + stateMutability: 'pure', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'factory', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'getReserves', + outputs: [ + { + internalType: 'uint112', + name: 'reserve0', + type: 'uint112', + }, + { + internalType: 'uint112', + name: 'reserve1', + type: 'uint112', + }, + { + internalType: 'uint32', + name: 'blockTimestampLast', + type: 'uint32', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + name: 'initialize', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'kLast', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'address', + name: 'to', + type: 'address', + }, + ], + name: 'mint', + outputs: [ + { + internalType: 'uint256', + name: 'liquidity', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'name', + outputs: [ + { + internalType: 'string', + name: '', + type: 'string', + }, + ], + payable: false, + stateMutability: 'pure', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + ], + name: 'nonces', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + internalType: 'address', + name: 'spender', + type: 'address', + }, + { + internalType: 'uint256', + name: 'value', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + { + internalType: 'uint8', + name: 'v', + type: 'uint8', + }, + { + internalType: 'bytes32', + name: 'r', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 's', + type: 'bytes32', + }, + ], + name: 'permit', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'price0CumulativeLast', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'price1CumulativeLast', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'address', + name: 'to', + type: 'address', + }, + ], + name: 'skim', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'uint256', + name: 'amount0Out', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amount1Out', + type: 'uint256', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'bytes', + name: 'data', + type: 'bytes', + }, + ], + name: 'swap', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'symbol', + outputs: [ + { + internalType: 'string', + name: '', + type: 'string', + }, + ], + payable: false, + stateMutability: 'pure', + type: 'function', + }, + { + constant: false, + inputs: [], + name: 'sync', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'token0', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'token1', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'totalSupply', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'value', + type: 'uint256', + }, + ], + name: 'transfer', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'address', + name: 'from', + type: 'address', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'value', + type: 'uint256', + }, + ], + name: 'transferFrom', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, +] var abi$3 = [ - { - inputs: [ - ], - name: "WETH", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - stateMutability: "pure", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "tokenA", - type: "address" - }, - { - internalType: "address", - name: "tokenB", - type: "address" - }, - { - internalType: "uint256", - name: "amountADesired", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountBDesired", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountAMin", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountBMin", - type: "uint256" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "addLiquidity", - outputs: [ - { - internalType: "uint256", - name: "amountA", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountB", - type: "uint256" - }, - { - internalType: "uint256", - name: "liquidity", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address" - }, - { - internalType: "uint256", - name: "amountTokenDesired", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountTokenMin", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountETHMin", - type: "uint256" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "addLiquidityETH", - outputs: [ - { - internalType: "uint256", - name: "amountToken", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountETH", - type: "uint256" - }, - { - internalType: "uint256", - name: "liquidity", - type: "uint256" - } - ], - stateMutability: "payable", - type: "function" - }, - { - inputs: [ - ], - name: "factory", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - stateMutability: "pure", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256" - }, - { - internalType: "uint256", - name: "reserveIn", - type: "uint256" - }, - { - internalType: "uint256", - name: "reserveOut", - type: "uint256" - } - ], - name: "getAmountIn", - outputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - } - ], - stateMutability: "pure", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - }, - { - internalType: "uint256", - name: "reserveIn", - type: "uint256" - }, - { - internalType: "uint256", - name: "reserveOut", - type: "uint256" - } - ], - name: "getAmountOut", - outputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256" - } - ], - stateMutability: "pure", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - } - ], - name: "getAmountsIn", - outputs: [ - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - } - ], - name: "getAmountsOut", - outputs: [ - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountA", - type: "uint256" - }, - { - internalType: "uint256", - name: "reserveA", - type: "uint256" - }, - { - internalType: "uint256", - name: "reserveB", - type: "uint256" - } - ], - name: "quote", - outputs: [ - { - internalType: "uint256", - name: "amountB", - type: "uint256" - } - ], - stateMutability: "pure", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "tokenA", - type: "address" - }, - { - internalType: "address", - name: "tokenB", - type: "address" - }, - { - internalType: "uint256", - name: "liquidity", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountAMin", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountBMin", - type: "uint256" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "removeLiquidity", - outputs: [ - { - internalType: "uint256", - name: "amountA", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountB", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address" - }, - { - internalType: "uint256", - name: "liquidity", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountTokenMin", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountETHMin", - type: "uint256" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "removeLiquidityETH", - outputs: [ - { - internalType: "uint256", - name: "amountToken", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountETH", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address" - }, - { - internalType: "uint256", - name: "liquidity", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountTokenMin", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountETHMin", - type: "uint256" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "removeLiquidityETHSupportingFeeOnTransferTokens", - outputs: [ - { - internalType: "uint256", - name: "amountETH", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address" - }, - { - internalType: "uint256", - name: "liquidity", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountTokenMin", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountETHMin", - type: "uint256" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - }, - { - internalType: "bool", - name: "approveMax", - type: "bool" - }, - { - internalType: "uint8", - name: "v", - type: "uint8" - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32" - } - ], - name: "removeLiquidityETHWithPermit", - outputs: [ - { - internalType: "uint256", - name: "amountToken", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountETH", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address" - }, - { - internalType: "uint256", - name: "liquidity", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountTokenMin", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountETHMin", - type: "uint256" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - }, - { - internalType: "bool", - name: "approveMax", - type: "bool" - }, - { - internalType: "uint8", - name: "v", - type: "uint8" - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32" - } - ], - name: "removeLiquidityETHWithPermitSupportingFeeOnTransferTokens", - outputs: [ - { - internalType: "uint256", - name: "amountETH", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "tokenA", - type: "address" - }, - { - internalType: "address", - name: "tokenB", - type: "address" - }, - { - internalType: "uint256", - name: "liquidity", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountAMin", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountBMin", - type: "uint256" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - }, - { - internalType: "bool", - name: "approveMax", - type: "bool" - }, - { - internalType: "uint8", - name: "v", - type: "uint8" - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32" - } - ], - name: "removeLiquidityWithPermit", - outputs: [ - { - internalType: "uint256", - name: "amountA", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountB", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "swapETHForExactTokens", - outputs: [ - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]" - } - ], - stateMutability: "payable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOutMin", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "swapExactETHForTokens", - outputs: [ - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]" - } - ], - stateMutability: "payable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOutMin", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "swapExactETHForTokensSupportingFeeOnTransferTokens", - outputs: [ - ], - stateMutability: "payable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountOutMin", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "swapExactTokensForETH", - outputs: [ - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountOutMin", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "swapExactTokensForETHSupportingFeeOnTransferTokens", - outputs: [ - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountOutMin", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "swapExactTokensForTokens", - outputs: [ - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountOutMin", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "swapExactTokensForTokensSupportingFeeOnTransferTokens", - outputs: [ - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountInMax", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "swapTokensForExactETH", - outputs: [ - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountInMax", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "swapTokensForExactTokens", - outputs: [ - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]" - } - ], - stateMutability: "nonpayable", - type: "function" - } -]; + { + inputs: [], + name: 'WETH', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'pure', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'tokenA', + type: 'address', + }, + { + internalType: 'address', + name: 'tokenB', + type: 'address', + }, + { + internalType: 'uint256', + name: 'amountADesired', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountBDesired', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountAMin', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountBMin', + type: 'uint256', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'addLiquidity', + outputs: [ + { + internalType: 'uint256', + name: 'amountA', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountB', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'liquidity', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'token', + type: 'address', + }, + { + internalType: 'uint256', + name: 'amountTokenDesired', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountTokenMin', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountETHMin', + type: 'uint256', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'addLiquidityETH', + outputs: [ + { + internalType: 'uint256', + name: 'amountToken', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountETH', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'liquidity', + type: 'uint256', + }, + ], + stateMutability: 'payable', + type: 'function', + }, + { + inputs: [], + name: 'factory', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'pure', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountOut', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'reserveIn', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'reserveOut', + type: 'uint256', + }, + ], + name: 'getAmountIn', + outputs: [ + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + ], + stateMutability: 'pure', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'reserveIn', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'reserveOut', + type: 'uint256', + }, + ], + name: 'getAmountOut', + outputs: [ + { + internalType: 'uint256', + name: 'amountOut', + type: 'uint256', + }, + ], + stateMutability: 'pure', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountOut', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + ], + name: 'getAmountsIn', + outputs: [ + { + internalType: 'uint256[]', + name: 'amounts', + type: 'uint256[]', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + ], + name: 'getAmountsOut', + outputs: [ + { + internalType: 'uint256[]', + name: 'amounts', + type: 'uint256[]', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountA', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'reserveA', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'reserveB', + type: 'uint256', + }, + ], + name: 'quote', + outputs: [ + { + internalType: 'uint256', + name: 'amountB', + type: 'uint256', + }, + ], + stateMutability: 'pure', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'tokenA', + type: 'address', + }, + { + internalType: 'address', + name: 'tokenB', + type: 'address', + }, + { + internalType: 'uint256', + name: 'liquidity', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountAMin', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountBMin', + type: 'uint256', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'removeLiquidity', + outputs: [ + { + internalType: 'uint256', + name: 'amountA', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountB', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'token', + type: 'address', + }, + { + internalType: 'uint256', + name: 'liquidity', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountTokenMin', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountETHMin', + type: 'uint256', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'removeLiquidityETH', + outputs: [ + { + internalType: 'uint256', + name: 'amountToken', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountETH', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'token', + type: 'address', + }, + { + internalType: 'uint256', + name: 'liquidity', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountTokenMin', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountETHMin', + type: 'uint256', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'removeLiquidityETHSupportingFeeOnTransferTokens', + outputs: [ + { + internalType: 'uint256', + name: 'amountETH', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'token', + type: 'address', + }, + { + internalType: 'uint256', + name: 'liquidity', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountTokenMin', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountETHMin', + type: 'uint256', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + { + internalType: 'bool', + name: 'approveMax', + type: 'bool', + }, + { + internalType: 'uint8', + name: 'v', + type: 'uint8', + }, + { + internalType: 'bytes32', + name: 'r', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 's', + type: 'bytes32', + }, + ], + name: 'removeLiquidityETHWithPermit', + outputs: [ + { + internalType: 'uint256', + name: 'amountToken', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountETH', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'token', + type: 'address', + }, + { + internalType: 'uint256', + name: 'liquidity', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountTokenMin', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountETHMin', + type: 'uint256', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + { + internalType: 'bool', + name: 'approveMax', + type: 'bool', + }, + { + internalType: 'uint8', + name: 'v', + type: 'uint8', + }, + { + internalType: 'bytes32', + name: 'r', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 's', + type: 'bytes32', + }, + ], + name: 'removeLiquidityETHWithPermitSupportingFeeOnTransferTokens', + outputs: [ + { + internalType: 'uint256', + name: 'amountETH', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'tokenA', + type: 'address', + }, + { + internalType: 'address', + name: 'tokenB', + type: 'address', + }, + { + internalType: 'uint256', + name: 'liquidity', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountAMin', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountBMin', + type: 'uint256', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + { + internalType: 'bool', + name: 'approveMax', + type: 'bool', + }, + { + internalType: 'uint8', + name: 'v', + type: 'uint8', + }, + { + internalType: 'bytes32', + name: 'r', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 's', + type: 'bytes32', + }, + ], + name: 'removeLiquidityWithPermit', + outputs: [ + { + internalType: 'uint256', + name: 'amountA', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountB', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountOut', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'swapETHForExactTokens', + outputs: [ + { + internalType: 'uint256[]', + name: 'amounts', + type: 'uint256[]', + }, + ], + stateMutability: 'payable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountOutMin', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'swapExactETHForTokens', + outputs: [ + { + internalType: 'uint256[]', + name: 'amounts', + type: 'uint256[]', + }, + ], + stateMutability: 'payable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountOutMin', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'swapExactETHForTokensSupportingFeeOnTransferTokens', + outputs: [], + stateMutability: 'payable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountOutMin', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'swapExactTokensForETH', + outputs: [ + { + internalType: 'uint256[]', + name: 'amounts', + type: 'uint256[]', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountOutMin', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'swapExactTokensForETHSupportingFeeOnTransferTokens', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountOutMin', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'swapExactTokensForTokens', + outputs: [ + { + internalType: 'uint256[]', + name: 'amounts', + type: 'uint256[]', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountOutMin', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'swapExactTokensForTokensSupportingFeeOnTransferTokens', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountOut', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountInMax', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'swapTokensForExactETH', + outputs: [ + { + internalType: 'uint256[]', + name: 'amounts', + type: 'uint256[]', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountOut', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountInMax', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'swapTokensForExactTokens', + outputs: [ + { + internalType: 'uint256[]', + name: 'amounts', + type: 'uint256[]', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, +] var abi$2 = [ - { - inputs: [ - { - internalType: "address", - name: "_factory", - type: "address" - }, - { - internalType: "address", - name: "_WETH9", - type: "address" - } - ], - stateMutability: "nonpayable", - type: "constructor" - }, - { - inputs: [ - ], - name: "WETH9", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - ], - name: "factory", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "bytes", - name: "path", - type: "bytes" - }, - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - } - ], - name: "quoteExactInput", - outputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "tokenIn", - type: "address" - }, - { - internalType: "address", - name: "tokenOut", - type: "address" - }, - { - internalType: "uint24", - name: "fee", - type: "uint24" - }, - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - }, - { - internalType: "uint160", - name: "sqrtPriceLimitX96", - type: "uint160" - } - ], - name: "quoteExactInputSingle", - outputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "bytes", - name: "path", - type: "bytes" - }, - { - internalType: "uint256", - name: "amountOut", - type: "uint256" - } - ], - name: "quoteExactOutput", - outputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "tokenIn", - type: "address" - }, - { - internalType: "address", - name: "tokenOut", - type: "address" - }, - { - internalType: "uint24", - name: "fee", - type: "uint24" - }, - { - internalType: "uint256", - name: "amountOut", - type: "uint256" - }, - { - internalType: "uint160", - name: "sqrtPriceLimitX96", - type: "uint160" - } - ], - name: "quoteExactOutputSingle", - outputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "int256", - name: "amount0Delta", - type: "int256" - }, - { - internalType: "int256", - name: "amount1Delta", - type: "int256" - }, - { - internalType: "bytes", - name: "path", - type: "bytes" - } - ], - name: "uniswapV3SwapCallback", - outputs: [ - ], - stateMutability: "view", - type: "function" - } -]; + { + inputs: [ + { + internalType: 'address', + name: '_factory', + type: 'address', + }, + { + internalType: 'address', + name: '_WETH9', + type: 'address', + }, + ], + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + inputs: [], + name: 'WETH9', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'factory', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes', + name: 'path', + type: 'bytes', + }, + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + ], + name: 'quoteExactInput', + outputs: [ + { + internalType: 'uint256', + name: 'amountOut', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'tokenIn', + type: 'address', + }, + { + internalType: 'address', + name: 'tokenOut', + type: 'address', + }, + { + internalType: 'uint24', + name: 'fee', + type: 'uint24', + }, + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + { + internalType: 'uint160', + name: 'sqrtPriceLimitX96', + type: 'uint160', + }, + ], + name: 'quoteExactInputSingle', + outputs: [ + { + internalType: 'uint256', + name: 'amountOut', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes', + name: 'path', + type: 'bytes', + }, + { + internalType: 'uint256', + name: 'amountOut', + type: 'uint256', + }, + ], + name: 'quoteExactOutput', + outputs: [ + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'tokenIn', + type: 'address', + }, + { + internalType: 'address', + name: 'tokenOut', + type: 'address', + }, + { + internalType: 'uint24', + name: 'fee', + type: 'uint24', + }, + { + internalType: 'uint256', + name: 'amountOut', + type: 'uint256', + }, + { + internalType: 'uint160', + name: 'sqrtPriceLimitX96', + type: 'uint160', + }, + ], + name: 'quoteExactOutputSingle', + outputs: [ + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'int256', + name: 'amount0Delta', + type: 'int256', + }, + { + internalType: 'int256', + name: 'amount1Delta', + type: 'int256', + }, + { + internalType: 'bytes', + name: 'path', + type: 'bytes', + }, + ], + name: 'uniswapV3SwapCallback', + outputs: [], + stateMutability: 'view', + type: 'function', + }, +] var abi$1 = [ - { - inputs: [ - ], - name: "getCurrentBlockTimestamp", - outputs: [ - { - internalType: "uint256", - name: "timestamp", - type: "uint256" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "addr", - type: "address" - } - ], - name: "getEthBalance", - outputs: [ - { - internalType: "uint256", - name: "balance", - type: "uint256" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "target", - type: "address" - }, - { - internalType: "uint256", - name: "gasLimit", - type: "uint256" - }, - { - internalType: "bytes", - name: "callData", - type: "bytes" - } - ], - internalType: "struct UniswapInterfaceMulticall.Call[]", - name: "calls", - type: "tuple[]" - } - ], - name: "multicall", - outputs: [ - { - internalType: "uint256", - name: "blockNumber", - type: "uint256" - }, - { - components: [ - { - internalType: "bool", - name: "success", - type: "bool" - }, - { - internalType: "uint256", - name: "gasUsed", - type: "uint256" - }, - { - internalType: "bytes", - name: "returnData", - type: "bytes" - } - ], - internalType: "struct UniswapInterfaceMulticall.Result[]", - name: "returnData", - type: "tuple[]" - } - ], - stateMutability: "nonpayable", - type: "function" - } -]; + { + inputs: [], + name: 'getCurrentBlockTimestamp', + outputs: [ + { + internalType: 'uint256', + name: 'timestamp', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'addr', + type: 'address', + }, + ], + name: 'getEthBalance', + outputs: [ + { + internalType: 'uint256', + name: 'balance', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + components: [ + { + internalType: 'address', + name: 'target', + type: 'address', + }, + { + internalType: 'uint256', + name: 'gasLimit', + type: 'uint256', + }, + { + internalType: 'bytes', + name: 'callData', + type: 'bytes', + }, + ], + internalType: 'struct UniswapInterfaceMulticall.Call[]', + name: 'calls', + type: 'tuple[]', + }, + ], + name: 'multicall', + outputs: [ + { + internalType: 'uint256', + name: 'blockNumber', + type: 'uint256', + }, + { + components: [ + { + internalType: 'bool', + name: 'success', + type: 'bool', + }, + { + internalType: 'uint256', + name: 'gasUsed', + type: 'uint256', + }, + { + internalType: 'bytes', + name: 'returnData', + type: 'bytes', + }, + ], + internalType: 'struct UniswapInterfaceMulticall.Result[]', + name: 'returnData', + type: 'tuple[]', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, +] var ARGENT_WALLET_DETECTOR_ABI = [ - { - inputs: [ - { - internalType: "bytes32[]", - name: "_codes", - type: "bytes32[]" - }, - { - internalType: "address[]", - name: "_implementations", - type: "address[]" - } - ], - stateMutability: "nonpayable", - type: "constructor" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "code", - type: "bytes32" - } - ], - name: "CodeAdded", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "implementation", - type: "address" - } - ], - name: "ImplementationAdded", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_newOwner", - type: "address" - } - ], - name: "OwnerChanged", - type: "event" - }, - { - inputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32" - } - ], - name: "acceptedCodes", - outputs: [ - { - internalType: "bool", - name: "exists", - type: "bool" - }, - { - internalType: "uint128", - name: "index", - type: "uint128" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - name: "acceptedImplementations", - outputs: [ - { - internalType: "bool", - name: "exists", - type: "bool" - }, - { - internalType: "uint128", - name: "index", - type: "uint128" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "bytes32", - name: "_code", - type: "bytes32" - } - ], - name: "addCode", - outputs: [ - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "_argentWallet", - type: "address" - } - ], - name: "addCodeAndImplementationFromWallet", - outputs: [ - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "_impl", - type: "address" - } - ], - name: "addImplementation", - outputs: [ - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "_newOwner", - type: "address" - } - ], - name: "changeOwner", - outputs: [ - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - ], - name: "getCodes", - outputs: [ - { - internalType: "bytes32[]", - name: "", - type: "bytes32[]" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - ], - name: "getImplementations", - outputs: [ - { - internalType: "address[]", - name: "", - type: "address[]" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "_wallet", - type: "address" - } - ], - name: "isArgentWallet", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - ], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - stateMutability: "view", - type: "function" - } -]; + { + inputs: [ + { + internalType: 'bytes32[]', + name: '_codes', + type: 'bytes32[]', + }, + { + internalType: 'address[]', + name: '_implementations', + type: 'address[]', + }, + ], + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'code', + type: 'bytes32', + }, + ], + name: 'CodeAdded', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'implementation', + type: 'address', + }, + ], + name: 'ImplementationAdded', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: '_newOwner', + type: 'address', + }, + ], + name: 'OwnerChanged', + type: 'event', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: '', + type: 'bytes32', + }, + ], + name: 'acceptedCodes', + outputs: [ + { + internalType: 'bool', + name: 'exists', + type: 'bool', + }, + { + internalType: 'uint128', + name: 'index', + type: 'uint128', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + name: 'acceptedImplementations', + outputs: [ + { + internalType: 'bool', + name: 'exists', + type: 'bool', + }, + { + internalType: 'uint128', + name: 'index', + type: 'uint128', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: '_code', + type: 'bytes32', + }, + ], + name: 'addCode', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: '_argentWallet', + type: 'address', + }, + ], + name: 'addCodeAndImplementationFromWallet', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: '_impl', + type: 'address', + }, + ], + name: 'addImplementation', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: '_newOwner', + type: 'address', + }, + ], + name: 'changeOwner', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [], + name: 'getCodes', + outputs: [ + { + internalType: 'bytes32[]', + name: '', + type: 'bytes32[]', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'getImplementations', + outputs: [ + { + internalType: 'address[]', + name: '', + type: 'address[]', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: '_wallet', + type: 'address', + }, + ], + name: 'isArgentWallet', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'owner', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, +] var EIP_2612 = [ - { - constant: true, - inputs: [ - { - name: "owner", - type: "address" - } - ], - name: "nonces", - outputs: [ - { - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "DOMAIN_SEPARATOR", - outputs: [ - { - name: "", - type: "bytes32" - } - ], - payable: false, - stateMutability: "view", - type: "function" - } -]; + { + constant: true, + inputs: [ + { + name: 'owner', + type: 'address', + }, + ], + name: 'nonces', + outputs: [ + { + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'DOMAIN_SEPARATOR', + outputs: [ + { + name: '', + type: 'bytes32', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, +] var ENS_PUBLIC_RESOLVER_ABI = [ - { - inputs: [ - { - internalType: "contract ENS", - name: "_ens", - type: "address" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "constructor" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: true, - internalType: "uint256", - name: "contentType", - type: "uint256" - } - ], - name: "ABIChanged", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: false, - internalType: "address", - name: "a", - type: "address" - } - ], - name: "AddrChanged", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: false, - internalType: "uint256", - name: "coinType", - type: "uint256" - }, - { - indexed: false, - internalType: "bytes", - name: "newAddress", - type: "bytes" - } - ], - name: "AddressChanged", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: true, - internalType: "address", - name: "owner", - type: "address" - }, - { - indexed: true, - internalType: "address", - name: "target", - type: "address" - }, - { - indexed: false, - internalType: "bool", - name: "isAuthorised", - type: "bool" - } - ], - name: "AuthorisationChanged", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: false, - internalType: "bytes", - name: "hash", - type: "bytes" - } - ], - name: "ContenthashChanged", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: false, - internalType: "bytes", - name: "name", - type: "bytes" - }, - { - indexed: false, - internalType: "uint16", - name: "resource", - type: "uint16" - }, - { - indexed: false, - internalType: "bytes", - name: "record", - type: "bytes" - } - ], - name: "DNSRecordChanged", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: false, - internalType: "bytes", - name: "name", - type: "bytes" - }, - { - indexed: false, - internalType: "uint16", - name: "resource", - type: "uint16" - } - ], - name: "DNSRecordDeleted", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - } - ], - name: "DNSZoneCleared", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: true, - internalType: "bytes4", - name: "interfaceID", - type: "bytes4" - }, - { - indexed: false, - internalType: "address", - name: "implementer", - type: "address" - } - ], - name: "InterfaceChanged", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: false, - internalType: "string", - name: "name", - type: "string" - } - ], - name: "NameChanged", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: false, - internalType: "bytes32", - name: "x", - type: "bytes32" - }, - { - indexed: false, - internalType: "bytes32", - name: "y", - type: "bytes32" - } - ], - name: "PubkeyChanged", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: true, - internalType: "string", - name: "indexedKey", - type: "string" - }, - { - indexed: false, - internalType: "string", - name: "key", - type: "string" - } - ], - name: "TextChanged", - type: "event" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "uint256", - name: "contentTypes", - type: "uint256" - } - ], - name: "ABI", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - }, - { - internalType: "bytes", - name: "", - type: "bytes" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - } - ], - name: "addr", - outputs: [ - { - internalType: "address payable", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32" - }, - { - internalType: "address", - name: "", - type: "address" - }, - { - internalType: "address", - name: "", - type: "address" - } - ], - name: "authorisations", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - } - ], - name: "clearDNSZone", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - } - ], - name: "contenthash", - outputs: [ - { - internalType: "bytes", - name: "", - type: "bytes" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "name", - type: "bytes32" - }, - { - internalType: "uint16", - name: "resource", - type: "uint16" - } - ], - name: "dnsRecord", - outputs: [ - { - internalType: "bytes", - name: "", - type: "bytes" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "name", - type: "bytes32" - } - ], - name: "hasDNSRecords", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "bytes4", - name: "interfaceID", - type: "bytes4" - } - ], - name: "interfaceImplementer", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - } - ], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - } - ], - name: "pubkey", - outputs: [ - { - internalType: "bytes32", - name: "x", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "y", - type: "bytes32" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "uint256", - name: "contentType", - type: "uint256" - }, - { - internalType: "bytes", - name: "data", - type: "bytes" - } - ], - name: "setABI", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "uint256", - name: "coinType", - type: "uint256" - }, - { - internalType: "bytes", - name: "a", - type: "bytes" - } - ], - name: "setAddr", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "address", - name: "a", - type: "address" - } - ], - name: "setAddr", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "address", - name: "target", - type: "address" - }, - { - internalType: "bool", - name: "isAuthorised", - type: "bool" - } - ], - name: "setAuthorisation", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "bytes", - name: "hash", - type: "bytes" - } - ], - name: "setContenthash", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "bytes", - name: "data", - type: "bytes" - } - ], - name: "setDNSRecords", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "bytes4", - name: "interfaceID", - type: "bytes4" - }, - { - internalType: "address", - name: "implementer", - type: "address" - } - ], - name: "setInterface", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "string", - name: "name", - type: "string" - } - ], - name: "setName", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "x", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "y", - type: "bytes32" - } - ], - name: "setPubkey", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "string", - name: "key", - type: "string" - }, - { - internalType: "string", - name: "value", - type: "string" - } - ], - name: "setText", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes4", - name: "interfaceID", - type: "bytes4" - } - ], - name: "supportsInterface", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "pure", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "string", - name: "key", - type: "string" - } - ], - name: "text", - outputs: [ - { - internalType: "string", - name: "", - type: "string" - } - ], - payable: false, - stateMutability: "view", - type: "function" - } -]; + { + inputs: [ + { + internalType: 'contract ENS', + name: '_ens', + type: 'address', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: true, + internalType: 'uint256', + name: 'contentType', + type: 'uint256', + }, + ], + name: 'ABIChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'address', + name: 'a', + type: 'address', + }, + ], + name: 'AddrChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'uint256', + name: 'coinType', + type: 'uint256', + }, + { + indexed: false, + internalType: 'bytes', + name: 'newAddress', + type: 'bytes', + }, + ], + name: 'AddressChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: true, + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + indexed: true, + internalType: 'address', + name: 'target', + type: 'address', + }, + { + indexed: false, + internalType: 'bool', + name: 'isAuthorised', + type: 'bool', + }, + ], + name: 'AuthorisationChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'bytes', + name: 'hash', + type: 'bytes', + }, + ], + name: 'ContenthashChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'bytes', + name: 'name', + type: 'bytes', + }, + { + indexed: false, + internalType: 'uint16', + name: 'resource', + type: 'uint16', + }, + { + indexed: false, + internalType: 'bytes', + name: 'record', + type: 'bytes', + }, + ], + name: 'DNSRecordChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'bytes', + name: 'name', + type: 'bytes', + }, + { + indexed: false, + internalType: 'uint16', + name: 'resource', + type: 'uint16', + }, + ], + name: 'DNSRecordDeleted', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'DNSZoneCleared', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: true, + internalType: 'bytes4', + name: 'interfaceID', + type: 'bytes4', + }, + { + indexed: false, + internalType: 'address', + name: 'implementer', + type: 'address', + }, + ], + name: 'InterfaceChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'string', + name: 'name', + type: 'string', + }, + ], + name: 'NameChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'bytes32', + name: 'x', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'bytes32', + name: 'y', + type: 'bytes32', + }, + ], + name: 'PubkeyChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: true, + internalType: 'string', + name: 'indexedKey', + type: 'string', + }, + { + indexed: false, + internalType: 'string', + name: 'key', + type: 'string', + }, + ], + name: 'TextChanged', + type: 'event', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'uint256', + name: 'contentTypes', + type: 'uint256', + }, + ], + name: 'ABI', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + { + internalType: 'bytes', + name: '', + type: 'bytes', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'addr', + outputs: [ + { + internalType: 'address payable', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: '', + type: 'bytes32', + }, + { + internalType: 'address', + name: '', + type: 'address', + }, + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + name: 'authorisations', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'clearDNSZone', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'contenthash', + outputs: [ + { + internalType: 'bytes', + name: '', + type: 'bytes', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 'name', + type: 'bytes32', + }, + { + internalType: 'uint16', + name: 'resource', + type: 'uint16', + }, + ], + name: 'dnsRecord', + outputs: [ + { + internalType: 'bytes', + name: '', + type: 'bytes', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 'name', + type: 'bytes32', + }, + ], + name: 'hasDNSRecords', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes4', + name: 'interfaceID', + type: 'bytes4', + }, + ], + name: 'interfaceImplementer', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'name', + outputs: [ + { + internalType: 'string', + name: '', + type: 'string', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'pubkey', + outputs: [ + { + internalType: 'bytes32', + name: 'x', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 'y', + type: 'bytes32', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'uint256', + name: 'contentType', + type: 'uint256', + }, + { + internalType: 'bytes', + name: 'data', + type: 'bytes', + }, + ], + name: 'setABI', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'uint256', + name: 'coinType', + type: 'uint256', + }, + { + internalType: 'bytes', + name: 'a', + type: 'bytes', + }, + ], + name: 'setAddr', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'address', + name: 'a', + type: 'address', + }, + ], + name: 'setAddr', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'address', + name: 'target', + type: 'address', + }, + { + internalType: 'bool', + name: 'isAuthorised', + type: 'bool', + }, + ], + name: 'setAuthorisation', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes', + name: 'hash', + type: 'bytes', + }, + ], + name: 'setContenthash', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes', + name: 'data', + type: 'bytes', + }, + ], + name: 'setDNSRecords', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes4', + name: 'interfaceID', + type: 'bytes4', + }, + { + internalType: 'address', + name: 'implementer', + type: 'address', + }, + ], + name: 'setInterface', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'string', + name: 'name', + type: 'string', + }, + ], + name: 'setName', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 'x', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 'y', + type: 'bytes32', + }, + ], + name: 'setPubkey', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'string', + name: 'key', + type: 'string', + }, + { + internalType: 'string', + name: 'value', + type: 'string', + }, + ], + name: 'setText', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes4', + name: 'interfaceID', + type: 'bytes4', + }, + ], + name: 'supportsInterface', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'pure', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'string', + name: 'key', + type: 'string', + }, + ], + name: 'text', + outputs: [ + { + internalType: 'string', + name: '', + type: 'string', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, +] var ENS_ABI = [ - { - inputs: [ - { - internalType: "contract ENS", - name: "_old", - type: "address" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "constructor" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address" - }, - { - indexed: true, - internalType: "address", - name: "operator", - type: "address" - }, - { - indexed: false, - internalType: "bool", - name: "approved", - type: "bool" - } - ], - name: "ApprovalForAll", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: true, - internalType: "bytes32", - name: "label", - type: "bytes32" - }, - { - indexed: false, - internalType: "address", - name: "owner", - type: "address" - } - ], - name: "NewOwner", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: false, - internalType: "address", - name: "resolver", - type: "address" - } - ], - name: "NewResolver", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: false, - internalType: "uint64", - name: "ttl", - type: "uint64" - } - ], - name: "NewTTL", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: false, - internalType: "address", - name: "owner", - type: "address" - } - ], - name: "Transfer", - type: "event" - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "owner", - type: "address" - }, - { - internalType: "address", - name: "operator", - type: "address" - } - ], - name: "isApprovedForAll", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "old", - outputs: [ - { - internalType: "contract ENS", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - } - ], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - } - ], - name: "recordExists", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - } - ], - name: "resolver", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "operator", - type: "address" - }, - { - internalType: "bool", - name: "approved", - type: "bool" - } - ], - name: "setApprovalForAll", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "address", - name: "owner", - type: "address" - } - ], - name: "setOwner", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "address", - name: "owner", - type: "address" - }, - { - internalType: "address", - name: "resolver", - type: "address" - }, - { - internalType: "uint64", - name: "ttl", - type: "uint64" - } - ], - name: "setRecord", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "address", - name: "resolver", - type: "address" - } - ], - name: "setResolver", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "label", - type: "bytes32" - }, - { - internalType: "address", - name: "owner", - type: "address" - } - ], - name: "setSubnodeOwner", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "label", - type: "bytes32" - }, - { - internalType: "address", - name: "owner", - type: "address" - }, - { - internalType: "address", - name: "resolver", - type: "address" - }, - { - internalType: "uint64", - name: "ttl", - type: "uint64" - } - ], - name: "setSubnodeRecord", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "uint64", - name: "ttl", - type: "uint64" - } - ], - name: "setTTL", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - } - ], - name: "ttl", - outputs: [ - { - internalType: "uint64", - name: "", - type: "uint64" - } - ], - payable: false, - stateMutability: "view", - type: "function" - } -]; + { + inputs: [ + { + internalType: 'contract ENS', + name: '_old', + type: 'address', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + indexed: true, + internalType: 'address', + name: 'operator', + type: 'address', + }, + { + indexed: false, + internalType: 'bool', + name: 'approved', + type: 'bool', + }, + ], + name: 'ApprovalForAll', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: true, + internalType: 'bytes32', + name: 'label', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'address', + name: 'owner', + type: 'address', + }, + ], + name: 'NewOwner', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'address', + name: 'resolver', + type: 'address', + }, + ], + name: 'NewResolver', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'uint64', + name: 'ttl', + type: 'uint64', + }, + ], + name: 'NewTTL', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'address', + name: 'owner', + type: 'address', + }, + ], + name: 'Transfer', + type: 'event', + }, + { + constant: true, + inputs: [ + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + internalType: 'address', + name: 'operator', + type: 'address', + }, + ], + name: 'isApprovedForAll', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'old', + outputs: [ + { + internalType: 'contract ENS', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'owner', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'recordExists', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'resolver', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'address', + name: 'operator', + type: 'address', + }, + { + internalType: 'bool', + name: 'approved', + type: 'bool', + }, + ], + name: 'setApprovalForAll', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + ], + name: 'setOwner', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + internalType: 'address', + name: 'resolver', + type: 'address', + }, + { + internalType: 'uint64', + name: 'ttl', + type: 'uint64', + }, + ], + name: 'setRecord', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'address', + name: 'resolver', + type: 'address', + }, + ], + name: 'setResolver', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 'label', + type: 'bytes32', + }, + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + ], + name: 'setSubnodeOwner', + outputs: [ + { + internalType: 'bytes32', + name: '', + type: 'bytes32', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 'label', + type: 'bytes32', + }, + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + internalType: 'address', + name: 'resolver', + type: 'address', + }, + { + internalType: 'uint64', + name: 'ttl', + type: 'uint64', + }, + ], + name: 'setSubnodeRecord', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'uint64', + name: 'ttl', + type: 'uint64', + }, + ], + name: 'setTTL', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'ttl', + outputs: [ + { + internalType: 'uint64', + name: '', + type: 'uint64', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, +] var ERC20ABI = [ - { - constant: true, - inputs: [ - ], - name: "name", - outputs: [ - { - name: "", - type: "string" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - name: "_spender", - type: "address" - }, - { - name: "_value", - type: "uint256" - } - ], - name: "approve", - outputs: [ - { - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "totalSupply", - outputs: [ - { - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - name: "_from", - type: "address" - }, - { - name: "_to", - type: "address" - }, - { - name: "_value", - type: "uint256" - } - ], - name: "transferFrom", - outputs: [ - { - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "decimals", - outputs: [ - { - name: "", - type: "uint8" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - name: "_owner", - type: "address" - } - ], - name: "balanceOf", - outputs: [ - { - name: "balance", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "symbol", - outputs: [ - { - name: "", - type: "string" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - name: "_to", - type: "address" - }, - { - name: "_value", - type: "uint256" - } - ], - name: "transfer", - outputs: [ - { - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - { - name: "_owner", - type: "address" - }, - { - name: "_spender", - type: "address" - } - ], - name: "allowance", - outputs: [ - { - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - payable: true, - stateMutability: "payable", - type: "fallback" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: "owner", - type: "address" - }, - { - indexed: true, - name: "spender", - type: "address" - }, - { - indexed: false, - name: "value", - type: "uint256" - } - ], - name: "Approval", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: "from", - type: "address" - }, - { - indexed: true, - name: "to", - type: "address" - }, - { - indexed: false, - name: "value", - type: "uint256" - } - ], - name: "Transfer", - type: "event" - } -]; + { + constant: true, + inputs: [], + name: 'name', + outputs: [ + { + name: '', + type: 'string', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + name: '_spender', + type: 'address', + }, + { + name: '_value', + type: 'uint256', + }, + ], + name: 'approve', + outputs: [ + { + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'totalSupply', + outputs: [ + { + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + name: '_from', + type: 'address', + }, + { + name: '_to', + type: 'address', + }, + { + name: '_value', + type: 'uint256', + }, + ], + name: 'transferFrom', + outputs: [ + { + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'decimals', + outputs: [ + { + name: '', + type: 'uint8', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + name: '_owner', + type: 'address', + }, + ], + name: 'balanceOf', + outputs: [ + { + name: 'balance', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'symbol', + outputs: [ + { + name: '', + type: 'string', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + name: '_to', + type: 'address', + }, + { + name: '_value', + type: 'uint256', + }, + ], + name: 'transfer', + outputs: [ + { + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [ + { + name: '_owner', + type: 'address', + }, + { + name: '_spender', + type: 'address', + }, + ], + name: 'allowance', + outputs: [ + { + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + payable: true, + stateMutability: 'payable', + type: 'fallback', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: 'owner', + type: 'address', + }, + { + indexed: true, + name: 'spender', + type: 'address', + }, + { + indexed: false, + name: 'value', + type: 'uint256', + }, + ], + name: 'Approval', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: 'from', + type: 'address', + }, + { + indexed: true, + name: 'to', + type: 'address', + }, + { + indexed: false, + name: 'value', + type: 'uint256', + }, + ], + name: 'Transfer', + type: 'event', + }, +] var ERC20_BYTES32_ABI = [ - { - constant: true, - inputs: [ - ], - name: "name", - outputs: [ - { - name: "", - type: "bytes32" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "symbol", - outputs: [ - { - name: "", - type: "bytes32" - } - ], - payable: false, - stateMutability: "view", - type: "function" - } -]; + { + constant: true, + inputs: [], + name: 'name', + outputs: [ + { + name: '', + type: 'bytes32', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'symbol', + outputs: [ + { + name: '', + type: 'bytes32', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, +] var WETH_ABI = [ - { - constant: true, - inputs: [ - ], - name: "name", - outputs: [ - { - name: "", - type: "string" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - name: "guy", - type: "address" - }, - { - name: "wad", - type: "uint256" - } - ], - name: "approve", - outputs: [ - { - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "totalSupply", - outputs: [ - { - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - name: "src", - type: "address" - }, - { - name: "dst", - type: "address" - }, - { - name: "wad", - type: "uint256" - } - ], - name: "transferFrom", - outputs: [ - { - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - name: "wad", - type: "uint256" - } - ], - name: "withdraw", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "decimals", - outputs: [ - { - name: "", - type: "uint8" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - name: "", - type: "address" - } - ], - name: "balanceOf", - outputs: [ - { - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "symbol", - outputs: [ - { - name: "", - type: "string" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - name: "dst", - type: "address" - }, - { - name: "wad", - type: "uint256" - } - ], - name: "transfer", - outputs: [ - { - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - ], - name: "deposit", - outputs: [ - ], - payable: true, - stateMutability: "payable", - type: "function" - }, - { - constant: true, - inputs: [ - { - name: "", - type: "address" - }, - { - name: "", - type: "address" - } - ], - name: "allowance", - outputs: [ - { - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - payable: true, - stateMutability: "payable", - type: "fallback" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: "src", - type: "address" - }, - { - indexed: true, - name: "guy", - type: "address" - }, - { - indexed: false, - name: "wad", - type: "uint256" - } - ], - name: "Approval", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: "src", - type: "address" - }, - { - indexed: true, - name: "dst", - type: "address" - }, - { - indexed: false, - name: "wad", - type: "uint256" - } - ], - name: "Transfer", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: "dst", - type: "address" - }, - { - indexed: false, - name: "wad", - type: "uint256" - } - ], - name: "Deposit", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: "src", - type: "address" - }, - { - indexed: false, - name: "wad", - type: "uint256" - } - ], - name: "Withdrawal", - type: "event" - } -]; - -// returns the checksummed address if the address is valid, otherwise returns false -function isAddress(value) { - try { - return address.getAddress(value); - } - catch (_a) { - return false; - } -} -// shorten the checksummed version of the input address to have 0x + 4 characters at start and end -function shortenAddress(address, chars) { - if (chars === void 0) { chars = 4; } - var parsed = isAddress(address); - if (!parsed) { - throw Error("Invalid 'address' parameter '" + address + "'."); - } - return parsed.substring(0, chars + 2) + "..." + parsed.substring(42 - chars); -} -// account is not optional -function getSigner(library, account) { - return library.getSigner(account).connectUnchecked(); -} -// account is optional -function getProviderOrSigner(library, account) { - return account ? getSigner(library, account) : library; -} -// account is optional -function getContract(address, ABI, library, account) { - if (!isAddress(address) || address === constants.AddressZero) { - throw Error("Invalid 'address' parameter '" + address + "'."); - } - return new contracts.Contract(address, ABI, getProviderOrSigner(library, account)); -} -function escapeRegExp(string) { - return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string -} -function isTokenOnList(chainTokenMap, token) { - var _a; - return Boolean((token === null || token === void 0 ? void 0 : token.isToken) && ((_a = chainTokenMap[token.chainId]) === null || _a === void 0 ? void 0 : _a[token.address])); -} - -// returns null on errors -function useContract(addressOrAddressMap, ABI, withSignerIfPossible) { - if (withSignerIfPossible === void 0) { withSignerIfPossible = true; } - var _a = useActiveWeb3React(), library = _a.library, account = _a.account, chainId = _a.chainId; - return React.useMemo(function () { - if (!addressOrAddressMap || !ABI || !library || !chainId) - return null; - var address; - if (typeof addressOrAddressMap === 'string') - address = addressOrAddressMap; - else - address = addressOrAddressMap[chainId]; - if (!address) - return null; - try { - return getContract(address, ABI, library, withSignerIfPossible && account ? account : undefined); - } - catch (error) { - console.error('Failed to get contract', error); - return null; - } - }, [addressOrAddressMap, ABI, library, chainId, withSignerIfPossible, account]); -} -function useTokenContract(tokenAddress, withSignerIfPossible) { - return useContract(tokenAddress, ERC20ABI, withSignerIfPossible); -} -function useWETHContract(withSignerIfPossible) { - var _a; - var chainId = useActiveWeb3React().chainId; - return useContract(chainId ? (_a = WRAPPED_NATIVE_CURRENCY[chainId]) === null || _a === void 0 ? void 0 : _a.address : undefined, WETH_ABI, withSignerIfPossible); -} -function useArgentWalletDetectorContract() { - return useContract(ARGENT_WALLET_DETECTOR_ADDRESS, ARGENT_WALLET_DETECTOR_ABI, false); -} -function useENSRegistrarContract(withSignerIfPossible) { - return useContract(ENS_REGISTRAR_ADDRESSES, ENS_ABI, withSignerIfPossible); -} -function useENSResolverContract(address, withSignerIfPossible) { - return useContract(address, ENS_PUBLIC_RESOLVER_ABI, withSignerIfPossible); -} -function useBytes32TokenContract(tokenAddress, withSignerIfPossible) { - return useContract(tokenAddress, ERC20_BYTES32_ABI, withSignerIfPossible); -} -function useEIP2612Contract(tokenAddress) { - return useContract(tokenAddress, EIP_2612, false); -} -function useV2RouterContract() { - return useContract(V2_ROUTER_ADDRESS, abi$3, true); -} -function useInterfaceMulticall() { - return useContract(MULTICALL_ADDRESS, abi$1, false); -} -function useV3Quoter() { - return useContract(QUOTER_ADDRESSES, abi$2); -} - -/** - * Debounces updates to a value. - * Non-primitives *must* wrap the value in useMemo, or the value will be updated due to referential inequality. - */ -// modified from https://usehooks.com/useDebounce/ -function useDebounce(value, delay) { - var _a = __read(React.useState(value), 2), debouncedValue = _a[0], setDebouncedValue = _a[1]; - React.useEffect(function () { - // Update debounced value after delay - var handler = setTimeout(function () { - setDebouncedValue(value); - }, delay); - // Cancel the timeout if value changes (also on delay change or unmount) - // This is how we prevent debounced value from updating if value is changed ... - // .. within the delay period. Timeout gets cleared and restarted. - return function () { - clearTimeout(handler); - }; - }, [value, delay]); - return debouncedValue; -} - -var VISIBILITY_STATE_SUPPORTED = 'visibilityState' in document; -function isWindowVisible() { - return !VISIBILITY_STATE_SUPPORTED || document.visibilityState !== 'hidden'; -} -/** - * Returns whether the window is currently visible to the user. - */ -function useIsWindowVisible() { - var _a = __read(React.useState(isWindowVisible()), 2), focused = _a[0], setFocused = _a[1]; - var listener = React.useCallback(function () { - setFocused(isWindowVisible()); - }, [setFocused]); - React.useEffect(function () { - if (!VISIBILITY_STATE_SUPPORTED) - return undefined; - document.addEventListener('visibilitychange', listener); - return function () { - document.removeEventListener('visibilitychange', listener); - }; - }, [listener]); - return focused; -} - -var blockAtom = jotai.atom(undefined); -/** Requires that BlockUpdater be installed in the DOM tree. */ -function useBlockNumber() { - var chainId = useActiveWeb3React().chainId; - var block = utils.useAtomValue(blockAtom); - return chainId ? block : undefined; -} - -var _a$b; -var multicall = reduxMulticall.createMulticall(); -var reducer = redux.combineReducers((_a$b = {}, _a$b[multicall.reducerPath] = multicall.reducer, _a$b)); -redux.createStore(reducer); - -function useMultipleContractSingleData() { - var _a; - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var _b = useCallContext(), chainId = _b.chainId, latestBlock = _b.latestBlock; - return (_a = multicall.hooks).useMultipleContractSingleData.apply(_a, __spreadArray([chainId, latestBlock], __read(args), false)); -} -function useSingleCallResult() { - var _a; - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var _b = useCallContext(), chainId = _b.chainId, latestBlock = _b.latestBlock; - return (_a = multicall.hooks).useSingleCallResult.apply(_a, __spreadArray([chainId, latestBlock], __read(args), false)); -} -function useSingleContractMultipleData() { - var _a; - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var _b = useCallContext(), chainId = _b.chainId, latestBlock = _b.latestBlock; - return (_a = multicall.hooks).useSingleContractMultipleData.apply(_a, __spreadArray([chainId, latestBlock], __read(args), false)); -} -function useSingleContractWithCallData() { - var _a; - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var _b = useCallContext(), chainId = _b.chainId, latestBlock = _b.latestBlock; - return (_a = multicall.hooks).useSingleContractWithCallData.apply(_a, __spreadArray([chainId, latestBlock], __read(args), false)); -} -function useCallContext() { - var chainId = useActiveWeb3React().chainId; - var latestBlock = useBlockNumber(); - return { chainId: chainId, latestBlock: latestBlock }; -} - -function useNativeCurrency() { - var chainId = useActiveWeb3React().chainId; - return React.useMemo(function () { - return chainId - ? nativeOnChain(chainId) - : // display mainnet when not connected - nativeOnChain(SupportedChainId.MAINNET); - }, [chainId]); -} - -var EMPTY_CONNECTOR = core$1.initializeConnector(function () { return empty.EMPTY; }); -utils.atomWithDefault(function () { return EMPTY_CONNECTOR; }); -utils.atomWithDefault(function () { return EMPTY_CONNECTOR; }); - -var REGISTRAR_ABI = [ - { - constant: true, - inputs: [ - { - name: 'node', - type: 'bytes32', - }, - ], - name: 'resolver', - outputs: [ - { - name: 'resolverAddress', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, -]; -var REGISTRAR_ADDRESS = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'; -var RESOLVER_ABI = [ - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - ], - name: 'contenthash', - outputs: [ - { - internalType: 'bytes', - name: '', - type: 'bytes', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, -]; -// cache the resolver contracts since most of them are the public resolver -function resolverContract(resolverAddress, provider) { - return new contracts.Contract(resolverAddress, RESOLVER_ABI, provider); -} -/** - * Fetches and decodes the result of an ENS contenthash lookup on mainnet to a URI - * @param ensName to resolve - * @param provider provider to use to fetch the data - */ -function resolveENSContentHash(ensName, provider) { - return __awaiter(this, void 0, void 0, function () { - var ensRegistrarContract, hash$1, resolverAddress; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - ensRegistrarContract = new contracts.Contract(REGISTRAR_ADDRESS, REGISTRAR_ABI, provider); - hash$1 = hash.namehash(ensName); - return [4 /*yield*/, ensRegistrarContract.resolver(hash$1)]; - case 1: - resolverAddress = _a.sent(); - return [2 /*return*/, resolverContract(resolverAddress, provider).contenthash(hash$1)]; - } - }); - }); -} - -function hexToUint8Array(hex) { - hex = hex.startsWith('0x') ? hex.substr(2) : hex; - if (hex.length % 2 !== 0) - throw new Error('hex must have length that is multiple of 2'); - var arr = new Uint8Array(hex.length / 2); - for (var i = 0; i < arr.length; i++) { - arr[i] = parseInt(hex.substr(i * 2, 2), 16); - } - return arr; -} -var UTF_8_DECODER = new TextDecoder('utf-8'); -/** - * Returns the URI representation of the content hash for supported codecs - * @param contenthash to decode - */ -function contenthashToUri(contenthash) { - var data = hexToUint8Array(contenthash); - var codec = multicodec.getNameFromData(data); - switch (codec) { - case 'ipfs-ns': { - var unprefixedData = multicodec.rmPrefix(data); - var cid = new CID__default["default"](unprefixedData); - return "ipfs://" + multihashes.toB58String(cid.multihash); - } - case 'ipns-ns': { - var unprefixedData = multicodec.rmPrefix(data); - var cid = new CID__default["default"](unprefixedData); - var multihash = multihashes.decode(cid.multihash); - if (multihash.name === 'identity') { - return "ipns://" + UTF_8_DECODER.decode(multihash.digest).trim(); - } - else { - return "ipns://" + multihashes.toB58String(cid.multihash); - } - } - default: - throw new Error("Unrecognized codec: " + codec); - } -} - -var ENS_NAME_REGEX$1 = /^(([a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\.)+)eth(\/.*)?$/; -function parseENSAddress(ensAddress) { - var match = ensAddress.match(ENS_NAME_REGEX$1); - if (!match) - return undefined; - return { ensName: match[1].toLowerCase() + "eth", ensPath: match[4] }; -} - -/** - * Given a URI that may be ipfs, ipns, http, https, ar, or data protocol, return the fetch-able http(s) URLs for the same content - * @param uri to convert to fetch-able http url - */ -function uriToHttp(uri) { - var _a, _b, _c; - var protocol = uri.split(':')[0].toLowerCase(); - switch (protocol) { - case 'data': - return [uri]; - case 'https': - return [uri]; - case 'http': - return ['https' + uri.substr(4), uri]; - case 'ipfs': - var hash = (_a = uri.match(/^ipfs:(\/\/)?(.*)$/i)) === null || _a === void 0 ? void 0 : _a[2]; - return ["https://cloudflare-ipfs.com/ipfs/" + hash + "/", "https://ipfs.io/ipfs/" + hash + "/"]; - case 'ipns': - var name_1 = (_b = uri.match(/^ipns:(\/\/)?(.*)$/i)) === null || _b === void 0 ? void 0 : _b[2]; - return ["https://cloudflare-ipfs.com/ipns/" + name_1 + "/", "https://ipfs.io/ipns/" + name_1 + "/"]; - case 'ar': - var tx = (_c = uri.match(/^ar:(\/\/)?(.*)$/i)) === null || _c === void 0 ? void 0 : _c[2]; - return ["https://arweave.net/" + tx]; - default: - return []; - } -} - -var ValidationSchema; -(function (ValidationSchema) { - ValidationSchema["LIST"] = "list"; - ValidationSchema["TOKENS"] = "tokens"; -})(ValidationSchema || (ValidationSchema = {})); -var validator = new Promise(function (resolve) { return __awaiter(void 0, void 0, void 0, function () { - var _a, ajv, schema, validator; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, Promise.all([Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('ajv')); }), Promise.resolve().then(function () { return tokenlist_schema$1; })])]; - case 1: - _a = __read.apply(void 0, [_b.sent(), 2]), ajv = _a[0], schema = _a[1]; - validator = new ajv.default({ allErrors: true }) - .addSchema(schema, ValidationSchema.LIST) - // Adds a meta scheme of Pick - .addSchema(__assign(__assign({}, schema), { $id: schema.$id + '#tokens', required: ['tokens'] }), ValidationSchema.TOKENS); - resolve(validator); - return [2 /*return*/]; - } - }); -}); }); -function getValidationErrors(validate) { - var _a, _b; - return ((_b = (_a = validate === null || validate === void 0 ? void 0 : validate.errors) === null || _a === void 0 ? void 0 : _a.map(function (error) { return [error.dataPath, error.message].filter(Boolean).join(' '); }).join('; ')) !== null && _b !== void 0 ? _b : 'unknown error'); -} -/** - * Validates a token list. - * @param json the TokenList to validate - */ -function validateTokenList(json) { - return __awaiter(this, void 0, void 0, function () { - var validate; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, validator]; - case 1: - validate = (_a.sent()).getSchema(ValidationSchema.LIST); - if (validate === null || validate === void 0 ? void 0 : validate(json)) { - return [2 /*return*/, json]; - } - throw new Error("Token list failed validation: " + getValidationErrors(validate)); - } - }); - }); -} - -var listCache = new Map(); -/** Fetches and validates a token list. */ -function fetchTokenList$1(listUrl, resolveENSContentHash) { - var _a; - return __awaiter(this, void 0, void 0, function () { - var cached, urls, parsedENS, contentHashUri, error_1, message, translatedUri, message, i, url, isLast, response, error_2, message, message, json, list; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - cached = listCache === null || listCache === void 0 ? void 0 : listCache.get(listUrl) // avoid spurious re-fetches - ; - if (cached) { - return [2 /*return*/, cached]; - } - parsedENS = parseENSAddress(listUrl); - if (!parsedENS) return [3 /*break*/, 5]; - contentHashUri = void 0; - _b.label = 1; - case 1: - _b.trys.push([1, 3, , 4]); - return [4 /*yield*/, resolveENSContentHash(parsedENS.ensName)]; - case 2: - contentHashUri = _b.sent(); - return [3 /*break*/, 4]; - case 3: - error_1 = _b.sent(); - message = "failed to resolve ENS name: " + parsedENS.ensName; - console.debug(message, error_1); - throw new Error(message); - case 4: - translatedUri = void 0; - try { - translatedUri = contenthashToUri(contentHashUri); - } - catch (error) { - message = "failed to translate contenthash to URI: " + contentHashUri; - console.debug(message, error); - throw new Error(message); - } - urls = uriToHttp("" + translatedUri + ((_a = parsedENS.ensPath) !== null && _a !== void 0 ? _a : '')); - return [3 /*break*/, 6]; - case 5: - urls = uriToHttp(listUrl); - _b.label = 6; - case 6: - i = 0; - _b.label = 7; - case 7: - if (!(i < urls.length)) return [3 /*break*/, 15]; - url = urls[i]; - isLast = i === urls.length - 1; - response = void 0; - _b.label = 8; - case 8: - _b.trys.push([8, 10, , 11]); - return [4 /*yield*/, fetch(url, { credentials: 'omit' })]; - case 9: - response = _b.sent(); - return [3 /*break*/, 11]; - case 10: - error_2 = _b.sent(); - message = "failed to fetch list: " + listUrl; - console.debug(message, error_2); - if (isLast) - throw new Error(message); - return [3 /*break*/, 14]; - case 11: - if (!response.ok) { - message = "failed to fetch list: " + listUrl; - console.debug(message, response.statusText); - if (isLast) - throw new Error(message); - return [3 /*break*/, 14]; - } - return [4 /*yield*/, response.json()]; - case 12: - json = _b.sent(); - return [4 /*yield*/, validateTokenList(json)]; - case 13: - list = _b.sent(); - listCache === null || listCache === void 0 ? void 0 : listCache.set(listUrl, list); - return [2 /*return*/, list]; - case 14: - i++; - return [3 /*break*/, 7]; - case 15: throw new Error('Unrecognized list URL protocol.'); - } - }); - }); -} - -/** - * Returns a map of the given addresses to their eventually consistent ETH balances. - */ -function useNativeCurrencyBalances(uncheckedAddresses) { - var chainId = useActiveWeb3React().chainId; - var multicallContract = useInterfaceMulticall(); - var validAddressInputs = React.useMemo(function () { - return uncheckedAddresses - ? uncheckedAddresses - .map(isAddress) - .filter(function (a) { return a !== false; }) - .sort() - .map(function (addr) { return [addr]; }) - : []; - }, [uncheckedAddresses]); - var results = useSingleContractMultipleData(multicallContract, 'getEthBalance', validAddressInputs); - return React.useMemo(function () { - return validAddressInputs.reduce(function (memo, _a, i) { - var _b, _c; - var _d = __read(_a, 1), address = _d[0]; - var value = (_c = (_b = results === null || results === void 0 ? void 0 : results[i]) === null || _b === void 0 ? void 0 : _b.result) === null || _c === void 0 ? void 0 : _c[0]; - if (value && chainId) - memo[address] = sdkCore.CurrencyAmount.fromRawAmount(nativeOnChain(chainId), JSBI__default["default"].BigInt(value.toString())); - return memo; - }, {}); - }, [validAddressInputs, chainId, results]); -} -var ERC20Interface = new abi$6.Interface(ERC20ABI); -var tokenBalancesGasRequirement = { gasRequired: 125000 }; -/** - * Returns a map of token addresses to their eventually consistent token balances for a single account. - */ -function useTokenBalancesWithLoadingIndicator(address, tokens) { - var validatedTokens = React.useMemo(function () { var _a; return (_a = tokens === null || tokens === void 0 ? void 0 : tokens.filter(function (t) { return isAddress(t === null || t === void 0 ? void 0 : t.address) !== false; })) !== null && _a !== void 0 ? _a : []; }, [tokens]); - var validatedTokenAddresses = React.useMemo(function () { return validatedTokens.map(function (vt) { return vt.address; }); }, [validatedTokens]); - var balances = useMultipleContractSingleData(validatedTokenAddresses, ERC20Interface, 'balanceOf', React.useMemo(function () { return [address]; }, [address]), tokenBalancesGasRequirement); - var anyLoading = React.useMemo(function () { return balances.some(function (callState) { return callState.loading; }); }, [balances]); - return React.useMemo(function () { return [ - address && validatedTokens.length > 0 - ? validatedTokens.reduce(function (memo, token, i) { - var _a, _b; - var value = (_b = (_a = balances === null || balances === void 0 ? void 0 : balances[i]) === null || _a === void 0 ? void 0 : _a.result) === null || _b === void 0 ? void 0 : _b[0]; - var amount = value ? JSBI__default["default"].BigInt(value.toString()) : undefined; - if (amount) { - memo[token.address] = sdkCore.CurrencyAmount.fromRawAmount(token, amount); - } - return memo; - }, {}) - : {}, - anyLoading, - ]; }, [address, validatedTokens, anyLoading, balances]); -} -function useTokenBalances(address, tokens) { - return useTokenBalancesWithLoadingIndicator(address, tokens)[0]; -} -function useCurrencyBalances(account, currencies) { - var tokens = React.useMemo(function () { var _a; return (_a = currencies === null || currencies === void 0 ? void 0 : currencies.filter(function (currency) { var _a; return (_a = currency === null || currency === void 0 ? void 0 : currency.isToken) !== null && _a !== void 0 ? _a : false; })) !== null && _a !== void 0 ? _a : []; }, [currencies]); - var tokenBalances = useTokenBalances(account, tokens); - var containsETH = React.useMemo(function () { var _a; return (_a = currencies === null || currencies === void 0 ? void 0 : currencies.some(function (currency) { return currency === null || currency === void 0 ? void 0 : currency.isNative; })) !== null && _a !== void 0 ? _a : false; }, [currencies]); - var ethBalance = useNativeCurrencyBalances(React.useMemo(function () { return (containsETH ? [account] : []); }, [containsETH, account])); - return React.useMemo(function () { - var _a; - return (_a = currencies === null || currencies === void 0 ? void 0 : currencies.map(function (currency) { - if (!account || !currency) - return undefined; - if (currency.isToken) - return tokenBalances[currency.address]; - if (currency.isNative) - return ethBalance[account]; - return undefined; - })) !== null && _a !== void 0 ? _a : []; - }, [account, currencies, ethBalance, tokenBalances]); -} -function useCurrencyBalance(account, currency) { - return useCurrencyBalances(account, React.useMemo(function () { return [currency]; }, [currency]))[0]; -} - -var alwaysTrue = function () { return true; }; -/** Creates a filter function that filters tokens that do not match the query. */ -function getTokenFilter(query) { - var searchingAddress = isAddress(query); - if (searchingAddress) { - var address_1 = searchingAddress.toLowerCase(); - return function (t) { return 'address' in t && address_1 === t.address.toLowerCase(); }; - } - var queryParts = query - .toLowerCase() - .split(/\s+/) - .filter(function (s) { return s.length > 0; }); - if (queryParts.length === 0) - return alwaysTrue; - var match = function (s) { - var parts = s - .toLowerCase() - .split(/\s+/) - .filter(function (s) { return s.length > 0; }); - return queryParts.every(function (p) { return p.length === 0 || parts.some(function (sp) { return sp.startsWith(p) || sp.endsWith(p); }); }); - }; - return function (_a) { - var name = _a.name, symbol = _a.symbol; - return Boolean((symbol && match(symbol)) || (name && match(name))); - }; -} - -/** Sorts currency amounts (descending). */ -function balanceComparator(a, b) { - if (a && b) { - return a.greaterThan(b) ? -1 : a.equalTo(b) ? 0 : 1; - } - else if (a === null || a === void 0 ? void 0 : a.greaterThan('0')) { - return -1; - } - else if (b === null || b === void 0 ? void 0 : b.greaterThan('0')) { - return 1; - } - return 0; -} -/** Sorts tokens by currency amount (descending), then symbol (ascending). */ -function tokenComparator(balances, a, b) { - // Sorts by balances - var balanceComparison = balanceComparator(balances[a.address], balances[b.address]); - if (balanceComparison !== 0) - return balanceComparison; - // Sorts by symbol - if (a.symbol && b.symbol) { - return a.symbol.toLowerCase() < b.symbol.toLowerCase() ? -1 : 1; - } - return -1; -} -/** Sorts tokens by query, giving precedence to exact matches and partial matches. */ -function useSortTokensByQuery(query, tokens) { - return React.useMemo(function () { - if (!tokens) { - return []; - } - var matches = query - .toLowerCase() - .split(/\s+/) - .filter(function (s) { return s.length > 0; }); - if (matches.length > 1) { - return tokens; - } - var exactMatches = []; - var symbolSubtrings = []; - var rest = []; - // sort tokens by exact match -> subtring on symbol match -> rest - tokens.map(function (token) { - var _a, _b; - if (((_a = token.symbol) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === matches[0]) { - return exactMatches.push(token); - } - else if ((_b = token.symbol) === null || _b === void 0 ? void 0 : _b.toLowerCase().startsWith(query.toLowerCase().trim())) { - return symbolSubtrings.push(token); - } - else { - return rest.push(token); - } - }); - return __spreadArray(__spreadArray(__spreadArray([], __read(exactMatches), false), __read(symbolSubtrings), false), __read(rest), false); - }, [tokens, query]); -} - -/** - * Token instances created from token info on a token list. - */ -var WrappedTokenInfo = /** @class */ (function () { - function WrappedTokenInfo(tokenInfo, list) { - this.isNative = false; - this.isToken = true; - this._checksummedAddress = null; - this._tags = null; - this.tokenInfo = tokenInfo; - this.list = list; - } - Object.defineProperty(WrappedTokenInfo.prototype, "address", { - get: function () { - if (this._checksummedAddress) - return this._checksummedAddress; - var checksummedAddress = isAddress(this.tokenInfo.address); - if (!checksummedAddress) - throw new Error("Invalid token address: " + this.tokenInfo.address); - return (this._checksummedAddress = checksummedAddress); - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(WrappedTokenInfo.prototype, "chainId", { - get: function () { - return this.tokenInfo.chainId; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(WrappedTokenInfo.prototype, "decimals", { - get: function () { - return this.tokenInfo.decimals; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(WrappedTokenInfo.prototype, "name", { - get: function () { - return this.tokenInfo.name; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(WrappedTokenInfo.prototype, "symbol", { - get: function () { - return this.tokenInfo.symbol; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(WrappedTokenInfo.prototype, "logoURI", { - get: function () { - return this.tokenInfo.logoURI; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(WrappedTokenInfo.prototype, "tags", { - get: function () { - var _a; - if (this._tags !== null) - return this._tags; - if (!this.tokenInfo.tags) - return (this._tags = []); - var listTags = (_a = this.list) === null || _a === void 0 ? void 0 : _a.tags; - if (!listTags) - return (this._tags = []); - return (this._tags = this.tokenInfo.tags.map(function (tagId) { - return __assign(__assign({}, listTags[tagId]), { id: tagId }); - })); - }, - enumerable: false, - configurable: true - }); - WrappedTokenInfo.prototype.equals = function (other) { - return other.chainId === this.chainId && other.isToken && other.address.toLowerCase() === this.address.toLowerCase(); - }; - WrappedTokenInfo.prototype.sortsBefore = function (other) { - if (this.equals(other)) - throw new Error('Addresses should not be equal'); - return this.address.toLowerCase() < other.address.toLowerCase(); - }; - Object.defineProperty(WrappedTokenInfo.prototype, "wrapped", { - get: function () { - return this; - }, - enumerable: false, - configurable: true - }); - return WrappedTokenInfo; -}()); - -var mapCache = typeof WeakMap !== 'undefined' ? new WeakMap() : null; -function tokensToChainTokenMap(tokens) { - var cached = mapCache === null || mapCache === void 0 ? void 0 : mapCache.get(tokens); - if (cached) - return cached; - var _a = __read(Array.isArray(tokens) ? [undefined, tokens] : [tokens, tokens.tokens], 2), list = _a[0], infos = _a[1]; - var map = infos.reduce(function (map, info) { - var _a; - var token = new WrappedTokenInfo(info, list); - if (((_a = map[token.chainId]) === null || _a === void 0 ? void 0 : _a[token.address]) !== undefined) { - console.warn("Duplicate token skipped: " + token.address); - return map; - } - if (!map[token.chainId]) { - map[token.chainId] = {}; - } - map[token.chainId][token.address] = { token: token, list: list }; - return map; - }, {}); - mapCache === null || mapCache === void 0 ? void 0 : mapCache.set(tokens, map); - return map; -} - -jotai.atom({}); - -// parse a name or symbol from a token response -var BYTES32_REGEX = /^0x[a-fA-F0-9]{64}$/; -function parseStringOrBytes32(str, bytes32, defaultValue) { - return str && str.length > 0 - ? str - : // need to check for proper bytes string and valid terminator - bytes32 && BYTES32_REGEX.test(bytes32) && bytes.arrayify(bytes32)[31] === 0 - ? strings.parseBytes32String(bytes32) - : defaultValue; -} -/** - * Returns a Token from the tokenAddress. - * Returns null if token is loading or null was passed. - * Returns undefined if tokenAddress is invalid or token does not exist. - */ -function useTokenFromMap(tokens, tokenAddress) { - var chainId = useActiveWeb3React().chainId; - var address = isAddress(tokenAddress); - var tokenContract = useTokenContract(address ? address : undefined, false); - var tokenContractBytes32 = useBytes32TokenContract(address ? address : undefined, false); - var token = address ? tokens[address] : undefined; - var tokenName = useSingleCallResult(token ? undefined : tokenContract, 'name', undefined, reduxMulticall.NEVER_RELOAD); - var tokenNameBytes32 = useSingleCallResult(token ? undefined : tokenContractBytes32, 'name', undefined, reduxMulticall.NEVER_RELOAD); - var symbol = useSingleCallResult(token ? undefined : tokenContract, 'symbol', undefined, reduxMulticall.NEVER_RELOAD); - var symbolBytes32 = useSingleCallResult(token ? undefined : tokenContractBytes32, 'symbol', undefined, reduxMulticall.NEVER_RELOAD); - var decimals = useSingleCallResult(token ? undefined : tokenContract, 'decimals', undefined, reduxMulticall.NEVER_RELOAD); - return React.useMemo(function () { - var _a, _b, _c, _d; - if (token) - return token; - if (tokenAddress === null) - return null; - if (!chainId || !address) - return undefined; - if (decimals.loading || symbol.loading || tokenName.loading) - return null; - if (decimals.result) { - return new sdkCore.Token(chainId, address, decimals.result[0], parseStringOrBytes32((_a = symbol.result) === null || _a === void 0 ? void 0 : _a[0], (_b = symbolBytes32.result) === null || _b === void 0 ? void 0 : _b[0], 'UNKNOWN'), parseStringOrBytes32((_c = tokenName.result) === null || _c === void 0 ? void 0 : _c[0], (_d = tokenNameBytes32.result) === null || _d === void 0 ? void 0 : _d[0], 'Unknown Token')); - } - return undefined; - }, [ - address, - chainId, - decimals.loading, - decimals.result, - symbol.loading, - symbol.result, - symbolBytes32.result, - token, - tokenAddress, - tokenName.loading, - tokenName.result, - tokenNameBytes32.result, - ]); -} -/** - * Returns a Currency from the currencyId. - * Returns null if currency is loading or null was passed. - * Returns undefined if currencyId is invalid or token does not exist. - */ -function useCurrencyFromMap(tokens, currencyId) { - var _a; - var nativeCurrency = useNativeCurrency(); - var isNative = Boolean(nativeCurrency && (currencyId === null || currencyId === void 0 ? void 0 : currencyId.toUpperCase()) === 'ETH'); - var token = useTokenFromMap(tokens, isNative ? undefined : currencyId); - if (currencyId === null || currencyId === undefined) - return currencyId; - // this case so we use our builtin wrapped token instead of wrapped tokens on token lists - var wrappedNative = nativeCurrency === null || nativeCurrency === void 0 ? void 0 : nativeCurrency.wrapped; - if (((_a = wrappedNative === null || wrappedNative === void 0 ? void 0 : wrappedNative.address) === null || _a === void 0 ? void 0 : _a.toUpperCase()) === (currencyId === null || currencyId === void 0 ? void 0 : currencyId.toUpperCase())) - return wrappedNative; - return isNative ? nativeCurrency : token; -} - -var DEFAULT_LIST_PRIORITIES = DEFAULT_LIST_OF_LISTS.reduce(function (memo, listUrl, index) { - memo[listUrl] = index + 1; - return memo; -}, {}); -// use ordering of default list of lists to assign priority -function sortByListPriority(urlA, urlB) { - if (DEFAULT_LIST_PRIORITIES[urlA] && DEFAULT_LIST_PRIORITIES[urlB]) { - return DEFAULT_LIST_PRIORITIES[urlA] - DEFAULT_LIST_PRIORITIES[urlB]; - } - return 0; -} - -var name$1 = "Broken Token List"; -var timestamp$1 = "2021-01-05T20:47:02.923Z"; + { + constant: true, + inputs: [], + name: 'name', + outputs: [ + { + name: '', + type: 'string', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + name: 'guy', + type: 'address', + }, + { + name: 'wad', + type: 'uint256', + }, + ], + name: 'approve', + outputs: [ + { + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'totalSupply', + outputs: [ + { + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + name: 'src', + type: 'address', + }, + { + name: 'dst', + type: 'address', + }, + { + name: 'wad', + type: 'uint256', + }, + ], + name: 'transferFrom', + outputs: [ + { + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + name: 'wad', + type: 'uint256', + }, + ], + name: 'withdraw', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'decimals', + outputs: [ + { + name: '', + type: 'uint8', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + name: '', + type: 'address', + }, + ], + name: 'balanceOf', + outputs: [ + { + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'symbol', + outputs: [ + { + name: '', + type: 'string', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + name: 'dst', + type: 'address', + }, + { + name: 'wad', + type: 'uint256', + }, + ], + name: 'transfer', + outputs: [ + { + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [], + name: 'deposit', + outputs: [], + payable: true, + stateMutability: 'payable', + type: 'function', + }, + { + constant: true, + inputs: [ + { + name: '', + type: 'address', + }, + { + name: '', + type: 'address', + }, + ], + name: 'allowance', + outputs: [ + { + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + payable: true, + stateMutability: 'payable', + type: 'fallback', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: 'src', + type: 'address', + }, + { + indexed: true, + name: 'guy', + type: 'address', + }, + { + indexed: false, + name: 'wad', + type: 'uint256', + }, + ], + name: 'Approval', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: 'src', + type: 'address', + }, + { + indexed: true, + name: 'dst', + type: 'address', + }, + { + indexed: false, + name: 'wad', + type: 'uint256', + }, + ], + name: 'Transfer', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: 'dst', + type: 'address', + }, + { + indexed: false, + name: 'wad', + type: 'uint256', + }, + ], + name: 'Deposit', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: 'src', + type: 'address', + }, + { + indexed: false, + name: 'wad', + type: 'uint256', + }, + ], + name: 'Withdrawal', + type: 'event', + }, +] + +// returns the checksummed address if the address is valid, otherwise returns false +function isAddress(value) { + try { + return address.getAddress(value) + } catch (_a) { + return false + } +} +// shorten the checksummed version of the input address to have 0x + 4 characters at start and end +function shortenAddress(address, chars) { + if (chars === void 0) { + chars = 4 + } + var parsed = isAddress(address) + if (!parsed) { + throw Error("Invalid 'address' parameter '" + address + "'.") + } + return parsed.substring(0, chars + 2) + '...' + parsed.substring(42 - chars) +} +// account is not optional +function getSigner(library, account) { + return library.getSigner(account).connectUnchecked() +} +// account is optional +function getProviderOrSigner(library, account) { + return account ? getSigner(library, account) : library +} +// account is optional +function getContract(address, ABI, library, account) { + if (!isAddress(address) || address === constants.AddressZero) { + throw Error("Invalid 'address' parameter '" + address + "'.") + } + return new contracts.Contract(address, ABI, getProviderOrSigner(library, account)) +} +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') // $& means the whole matched string +} +function isTokenOnList(chainTokenMap, token) { + var _a + return Boolean( + (token === null || token === void 0 ? void 0 : token.isToken) && + ((_a = chainTokenMap[token.chainId]) === null || _a === void 0 ? void 0 : _a[token.address]) + ) +} + +// returns null on errors +function useContract(addressOrAddressMap, ABI, withSignerIfPossible) { + if (withSignerIfPossible === void 0) { + withSignerIfPossible = true + } + var _a = useActiveWeb3React(), + library = _a.library, + account = _a.account, + chainId = _a.chainId + return React.useMemo( + function () { + if (!addressOrAddressMap || !ABI || !library || !chainId) return null + var address + if (typeof addressOrAddressMap === 'string') address = addressOrAddressMap + else address = addressOrAddressMap[chainId] + if (!address) return null + try { + return getContract(address, ABI, library, withSignerIfPossible && account ? account : undefined) + } catch (error) { + console.error('Failed to get contract', error) + return null + } + }, + [addressOrAddressMap, ABI, library, chainId, withSignerIfPossible, account] + ) +} +function useTokenContract(tokenAddress, withSignerIfPossible) { + return useContract(tokenAddress, ERC20ABI, withSignerIfPossible) +} +function useWETHContract(withSignerIfPossible) { + var _a + var chainId = useActiveWeb3React().chainId + return useContract( + chainId ? ((_a = WRAPPED_NATIVE_CURRENCY[chainId]) === null || _a === void 0 ? void 0 : _a.address) : undefined, + WETH_ABI, + withSignerIfPossible + ) +} +function useArgentWalletDetectorContract() { + return useContract(ARGENT_WALLET_DETECTOR_ADDRESS, ARGENT_WALLET_DETECTOR_ABI, false) +} +function useENSRegistrarContract(withSignerIfPossible) { + return useContract(ENS_REGISTRAR_ADDRESSES, ENS_ABI, withSignerIfPossible) +} +function useENSResolverContract(address, withSignerIfPossible) { + return useContract(address, ENS_PUBLIC_RESOLVER_ABI, withSignerIfPossible) +} +function useBytes32TokenContract(tokenAddress, withSignerIfPossible) { + return useContract(tokenAddress, ERC20_BYTES32_ABI, withSignerIfPossible) +} +function useEIP2612Contract(tokenAddress) { + return useContract(tokenAddress, EIP_2612, false) +} +function useV2RouterContract() { + return useContract(V2_ROUTER_ADDRESS, abi$3, true) +} +function useInterfaceMulticall() { + return useContract(MULTICALL_ADDRESS, abi$1, false) +} +function useV3Quoter() { + return useContract(QUOTER_ADDRESSES, abi$2) +} + +/** + * Debounces updates to a value. + * Non-primitives *must* wrap the value in useMemo, or the value will be updated due to referential inequality. + */ +// modified from https://usehooks.com/useDebounce/ +function useDebounce(value, delay) { + var _a = __read(React.useState(value), 2), + debouncedValue = _a[0], + setDebouncedValue = _a[1] + React.useEffect( + function () { + // Update debounced value after delay + var handler = setTimeout(function () { + setDebouncedValue(value) + }, delay) + // Cancel the timeout if value changes (also on delay change or unmount) + // This is how we prevent debounced value from updating if value is changed ... + // .. within the delay period. Timeout gets cleared and restarted. + return function () { + clearTimeout(handler) + } + }, + [value, delay] + ) + return debouncedValue +} + +var VISIBILITY_STATE_SUPPORTED = 'visibilityState' in document +function isWindowVisible() { + return !VISIBILITY_STATE_SUPPORTED || document.visibilityState !== 'hidden' +} +/** + * Returns whether the window is currently visible to the user. + */ +function useIsWindowVisible() { + var _a = __read(React.useState(isWindowVisible()), 2), + focused = _a[0], + setFocused = _a[1] + var listener = React.useCallback( + function () { + setFocused(isWindowVisible()) + }, + [setFocused] + ) + React.useEffect( + function () { + if (!VISIBILITY_STATE_SUPPORTED) return undefined + document.addEventListener('visibilitychange', listener) + return function () { + document.removeEventListener('visibilitychange', listener) + } + }, + [listener] + ) + return focused +} + +var blockAtom = jotai.atom(undefined) +/** Requires that BlockUpdater be installed in the DOM tree. */ +function useBlockNumber() { + var chainId = useActiveWeb3React().chainId + var block = utils.useAtomValue(blockAtom) + return chainId ? block : undefined +} + +var _a$b +var multicall = reduxMulticall.createMulticall() +var reducer = redux.combineReducers(((_a$b = {}), (_a$b[multicall.reducerPath] = multicall.reducer), _a$b)) +redux.createStore(reducer) + +function useMultipleContractSingleData() { + var _a + var args = [] + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i] + } + var _b = useCallContext(), + chainId = _b.chainId, + latestBlock = _b.latestBlock + return (_a = multicall.hooks).useMultipleContractSingleData.apply( + _a, + __spreadArray([chainId, latestBlock], __read(args), false) + ) +} +function useSingleCallResult() { + var _a + var args = [] + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i] + } + var _b = useCallContext(), + chainId = _b.chainId, + latestBlock = _b.latestBlock + return (_a = multicall.hooks).useSingleCallResult.apply( + _a, + __spreadArray([chainId, latestBlock], __read(args), false) + ) +} +function useSingleContractMultipleData() { + var _a + var args = [] + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i] + } + var _b = useCallContext(), + chainId = _b.chainId, + latestBlock = _b.latestBlock + return (_a = multicall.hooks).useSingleContractMultipleData.apply( + _a, + __spreadArray([chainId, latestBlock], __read(args), false) + ) +} +function useSingleContractWithCallData() { + var _a + var args = [] + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i] + } + var _b = useCallContext(), + chainId = _b.chainId, + latestBlock = _b.latestBlock + return (_a = multicall.hooks).useSingleContractWithCallData.apply( + _a, + __spreadArray([chainId, latestBlock], __read(args), false) + ) +} +function useCallContext() { + var chainId = useActiveWeb3React().chainId + var latestBlock = useBlockNumber() + return { chainId, latestBlock } +} + +function useNativeCurrency() { + var chainId = useActiveWeb3React().chainId + return React.useMemo( + function () { + return chainId + ? nativeOnChain(chainId) + : // display mainnet when not connected + nativeOnChain(SupportedChainId.MAINNET) + }, + [chainId] + ) +} + +var EMPTY_CONNECTOR = core$1.initializeConnector(function () { + return empty.EMPTY +}) +utils.atomWithDefault(function () { + return EMPTY_CONNECTOR +}) +utils.atomWithDefault(function () { + return EMPTY_CONNECTOR +}) + +var REGISTRAR_ABI = [ + { + constant: true, + inputs: [ + { + name: 'node', + type: 'bytes32', + }, + ], + name: 'resolver', + outputs: [ + { + name: 'resolverAddress', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, +] +var REGISTRAR_ADDRESS = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e' +var RESOLVER_ABI = [ + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'contenthash', + outputs: [ + { + internalType: 'bytes', + name: '', + type: 'bytes', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, +] +// cache the resolver contracts since most of them are the public resolver +function resolverContract(resolverAddress, provider) { + return new contracts.Contract(resolverAddress, RESOLVER_ABI, provider) +} +/** + * Fetches and decodes the result of an ENS contenthash lookup on mainnet to a URI + * @param ensName to resolve + * @param provider provider to use to fetch the data + */ +function resolveENSContentHash(ensName, provider) { + return __awaiter(this, void 0, void 0, function () { + var ensRegistrarContract, hash$1, resolverAddress + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + ensRegistrarContract = new contracts.Contract(REGISTRAR_ADDRESS, REGISTRAR_ABI, provider) + hash$1 = hash.namehash(ensName) + return [4 /*yield*/, ensRegistrarContract.resolver(hash$1)] + case 1: + resolverAddress = _a.sent() + return [2 /*return*/, resolverContract(resolverAddress, provider).contenthash(hash$1)] + } + }) + }) +} + +function hexToUint8Array(hex) { + hex = hex.startsWith('0x') ? hex.substr(2) : hex + if (hex.length % 2 !== 0) throw new Error('hex must have length that is multiple of 2') + var arr = new Uint8Array(hex.length / 2) + for (var i = 0; i < arr.length; i++) { + arr[i] = parseInt(hex.substr(i * 2, 2), 16) + } + return arr +} +var UTF_8_DECODER = new TextDecoder('utf-8') +/** + * Returns the URI representation of the content hash for supported codecs + * @param contenthash to decode + */ +function contenthashToUri(contenthash) { + var data = hexToUint8Array(contenthash) + var codec = multicodec.getNameFromData(data) + switch (codec) { + case 'ipfs-ns': { + var unprefixedData = multicodec.rmPrefix(data) + var cid = new CID__default['default'](unprefixedData) + return 'ipfs://' + multihashes.toB58String(cid.multihash) + } + case 'ipns-ns': { + var unprefixedData = multicodec.rmPrefix(data) + var cid = new CID__default['default'](unprefixedData) + var multihash = multihashes.decode(cid.multihash) + if (multihash.name === 'identity') { + return 'ipns://' + UTF_8_DECODER.decode(multihash.digest).trim() + } else { + return 'ipns://' + multihashes.toB58String(cid.multihash) + } + } + default: + throw new Error('Unrecognized codec: ' + codec) + } +} + +var ENS_NAME_REGEX$1 = /^(([a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\.)+)eth(\/.*)?$/ +function parseENSAddress(ensAddress) { + var match = ensAddress.match(ENS_NAME_REGEX$1) + if (!match) return undefined + return { ensName: match[1].toLowerCase() + 'eth', ensPath: match[4] } +} + +/** + * Given a URI that may be ipfs, ipns, http, https, ar, or data protocol, return the fetch-able http(s) URLs for the same content + * @param uri to convert to fetch-able http url + */ +function uriToHttp(uri) { + var _a, _b, _c + var protocol = uri.split(':')[0].toLowerCase() + switch (protocol) { + case 'data': + return [uri] + case 'https': + return [uri] + case 'http': + return ['https' + uri.substr(4), uri] + case 'ipfs': + var hash = (_a = uri.match(/^ipfs:(\/\/)?(.*)$/i)) === null || _a === void 0 ? void 0 : _a[2] + return ['https://cloudflare-ipfs.com/ipfs/' + hash + '/', 'https://ipfs.io/ipfs/' + hash + '/'] + case 'ipns': + var name_1 = (_b = uri.match(/^ipns:(\/\/)?(.*)$/i)) === null || _b === void 0 ? void 0 : _b[2] + return ['https://cloudflare-ipfs.com/ipns/' + name_1 + '/', 'https://ipfs.io/ipns/' + name_1 + '/'] + case 'ar': + var tx = (_c = uri.match(/^ar:(\/\/)?(.*)$/i)) === null || _c === void 0 ? void 0 : _c[2] + return ['https://arweave.net/' + tx] + default: + return [] + } +} + +var ValidationSchema +;(function (ValidationSchema) { + ValidationSchema['LIST'] = 'list' + ValidationSchema['TOKENS'] = 'tokens' +})(ValidationSchema || (ValidationSchema = {})) +var validator = new Promise(function (resolve) { + return __awaiter(void 0, void 0, void 0, function () { + var _a, ajv, schema, validator + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + return [ + 4 /*yield*/, + Promise.all([ + Promise.resolve().then(function () { + return /*#__PURE__*/ _interopNamespace(require('ajv')) + }), + Promise.resolve().then(function () { + return tokenlist_schema$1 + }), + ]), + ] + case 1: + ;(_a = __read.apply(void 0, [_b.sent(), 2])), (ajv = _a[0]), (schema = _a[1]) + validator = new ajv.default({ allErrors: true }) + .addSchema(schema, ValidationSchema.LIST) + // Adds a meta scheme of Pick + .addSchema( + __assign(__assign({}, schema), { $id: schema.$id + '#tokens', required: ['tokens'] }), + ValidationSchema.TOKENS + ) + resolve(validator) + return [2 /*return*/] + } + }) + }) +}) +function getValidationErrors(validate) { + var _a, _b + return (_b = + (_a = validate === null || validate === void 0 ? void 0 : validate.errors) === null || _a === void 0 + ? void 0 + : _a + .map(function (error) { + return [error.dataPath, error.message].filter(Boolean).join(' ') + }) + .join('; ')) !== null && _b !== void 0 + ? _b + : 'unknown error' +} +/** + * Validates a token list. + * @param json the TokenList to validate + */ +function validateTokenList(json) { + return __awaiter(this, void 0, void 0, function () { + var validate + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + return [4 /*yield*/, validator] + case 1: + validate = _a.sent().getSchema(ValidationSchema.LIST) + if (validate === null || validate === void 0 ? void 0 : validate(json)) { + return [2 /*return*/, json] + } + throw new Error('Token list failed validation: ' + getValidationErrors(validate)) + } + }) + }) +} + +var listCache = new Map() +/** Fetches and validates a token list. */ +function fetchTokenList$1(listUrl, resolveENSContentHash) { + var _a + return __awaiter(this, void 0, void 0, function () { + var cached, + urls, + parsedENS, + contentHashUri, + error_1, + message, + translatedUri, + message, + i, + url, + isLast, + response, + error_2, + message, + message, + json, + list + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + cached = listCache === null || listCache === void 0 ? void 0 : listCache.get(listUrl) // avoid spurious re-fetches + if (cached) { + return [2 /*return*/, cached] + } + parsedENS = parseENSAddress(listUrl) + if (!parsedENS) return [3 /*break*/, 5] + contentHashUri = void 0 + _b.label = 1 + case 1: + _b.trys.push([1, 3, , 4]) + return [4 /*yield*/, resolveENSContentHash(parsedENS.ensName)] + case 2: + contentHashUri = _b.sent() + return [3 /*break*/, 4] + case 3: + error_1 = _b.sent() + message = 'failed to resolve ENS name: ' + parsedENS.ensName + console.debug(message, error_1) + throw new Error(message) + case 4: + translatedUri = void 0 + try { + translatedUri = contenthashToUri(contentHashUri) + } catch (error) { + message = 'failed to translate contenthash to URI: ' + contentHashUri + console.debug(message, error) + throw new Error(message) + } + urls = uriToHttp('' + translatedUri + ((_a = parsedENS.ensPath) !== null && _a !== void 0 ? _a : '')) + return [3 /*break*/, 6] + case 5: + urls = uriToHttp(listUrl) + _b.label = 6 + case 6: + i = 0 + _b.label = 7 + case 7: + if (!(i < urls.length)) return [3 /*break*/, 15] + url = urls[i] + isLast = i === urls.length - 1 + response = void 0 + _b.label = 8 + case 8: + _b.trys.push([8, 10, , 11]) + return [4 /*yield*/, fetch(url, { credentials: 'omit' })] + case 9: + response = _b.sent() + return [3 /*break*/, 11] + case 10: + error_2 = _b.sent() + message = 'failed to fetch list: ' + listUrl + console.debug(message, error_2) + if (isLast) throw new Error(message) + return [3 /*break*/, 14] + case 11: + if (!response.ok) { + message = 'failed to fetch list: ' + listUrl + console.debug(message, response.statusText) + if (isLast) throw new Error(message) + return [3 /*break*/, 14] + } + return [4 /*yield*/, response.json()] + case 12: + json = _b.sent() + return [4 /*yield*/, validateTokenList(json)] + case 13: + list = _b.sent() + listCache === null || listCache === void 0 ? void 0 : listCache.set(listUrl, list) + return [2 /*return*/, list] + case 14: + i++ + return [3 /*break*/, 7] + case 15: + throw new Error('Unrecognized list URL protocol.') + } + }) + }) +} + +/** + * Returns a map of the given addresses to their eventually consistent ETH balances. + */ +function useNativeCurrencyBalances(uncheckedAddresses) { + var chainId = useActiveWeb3React().chainId + var multicallContract = useInterfaceMulticall() + var validAddressInputs = React.useMemo( + function () { + return uncheckedAddresses + ? uncheckedAddresses + .map(isAddress) + .filter(function (a) { + return a !== false + }) + .sort() + .map(function (addr) { + return [addr] + }) + : [] + }, + [uncheckedAddresses] + ) + var results = useSingleContractMultipleData(multicallContract, 'getEthBalance', validAddressInputs) + return React.useMemo( + function () { + return validAddressInputs.reduce(function (memo, _a, i) { + var _b, _c + var _d = __read(_a, 1), + address = _d[0] + var value = + (_c = + (_b = results === null || results === void 0 ? void 0 : results[i]) === null || _b === void 0 + ? void 0 + : _b.result) === null || _c === void 0 + ? void 0 + : _c[0] + if (value && chainId) + memo[address] = sdkCore.CurrencyAmount.fromRawAmount( + nativeOnChain(chainId), + JSBI__default['default'].BigInt(value.toString()) + ) + return memo + }, {}) + }, + [validAddressInputs, chainId, results] + ) +} +var ERC20Interface = new abi$6.Interface(ERC20ABI) +var tokenBalancesGasRequirement = { gasRequired: 125000 } +/** + * Returns a map of token addresses to their eventually consistent token balances for a single account. + */ +function useTokenBalancesWithLoadingIndicator(address, tokens) { + var validatedTokens = React.useMemo( + function () { + var _a + return (_a = + tokens === null || tokens === void 0 + ? void 0 + : tokens.filter(function (t) { + return isAddress(t === null || t === void 0 ? void 0 : t.address) !== false + })) !== null && _a !== void 0 + ? _a + : [] + }, + [tokens] + ) + var validatedTokenAddresses = React.useMemo( + function () { + return validatedTokens.map(function (vt) { + return vt.address + }) + }, + [validatedTokens] + ) + var balances = useMultipleContractSingleData( + validatedTokenAddresses, + ERC20Interface, + 'balanceOf', + React.useMemo( + function () { + return [address] + }, + [address] + ), + tokenBalancesGasRequirement + ) + var anyLoading = React.useMemo( + function () { + return balances.some(function (callState) { + return callState.loading + }) + }, + [balances] + ) + return React.useMemo( + function () { + return [ + address && validatedTokens.length > 0 + ? validatedTokens.reduce(function (memo, token, i) { + var _a, _b + var value = + (_b = + (_a = balances === null || balances === void 0 ? void 0 : balances[i]) === null || _a === void 0 + ? void 0 + : _a.result) === null || _b === void 0 + ? void 0 + : _b[0] + var amount = value ? JSBI__default['default'].BigInt(value.toString()) : undefined + if (amount) { + memo[token.address] = sdkCore.CurrencyAmount.fromRawAmount(token, amount) + } + return memo + }, {}) + : {}, + anyLoading, + ] + }, + [address, validatedTokens, anyLoading, balances] + ) +} +function useTokenBalances(address, tokens) { + return useTokenBalancesWithLoadingIndicator(address, tokens)[0] +} +function useCurrencyBalances(account, currencies) { + var tokens = React.useMemo( + function () { + var _a + return (_a = + currencies === null || currencies === void 0 + ? void 0 + : currencies.filter(function (currency) { + var _a + return (_a = currency === null || currency === void 0 ? void 0 : currency.isToken) !== null && + _a !== void 0 + ? _a + : false + })) !== null && _a !== void 0 + ? _a + : [] + }, + [currencies] + ) + var tokenBalances = useTokenBalances(account, tokens) + var containsETH = React.useMemo( + function () { + var _a + return (_a = + currencies === null || currencies === void 0 + ? void 0 + : currencies.some(function (currency) { + return currency === null || currency === void 0 ? void 0 : currency.isNative + })) !== null && _a !== void 0 + ? _a + : false + }, + [currencies] + ) + var ethBalance = useNativeCurrencyBalances( + React.useMemo( + function () { + return containsETH ? [account] : [] + }, + [containsETH, account] + ) + ) + return React.useMemo( + function () { + var _a + return (_a = + currencies === null || currencies === void 0 + ? void 0 + : currencies.map(function (currency) { + if (!account || !currency) return undefined + if (currency.isToken) return tokenBalances[currency.address] + if (currency.isNative) return ethBalance[account] + return undefined + })) !== null && _a !== void 0 + ? _a + : [] + }, + [account, currencies, ethBalance, tokenBalances] + ) +} +function useCurrencyBalance(account, currency) { + return useCurrencyBalances( + account, + React.useMemo( + function () { + return [currency] + }, + [currency] + ) + )[0] +} + +var alwaysTrue = function () { + return true +} +/** Creates a filter function that filters tokens that do not match the query. */ +function getTokenFilter(query) { + var searchingAddress = isAddress(query) + if (searchingAddress) { + var address_1 = searchingAddress.toLowerCase() + return function (t) { + return 'address' in t && address_1 === t.address.toLowerCase() + } + } + var queryParts = query + .toLowerCase() + .split(/\s+/) + .filter(function (s) { + return s.length > 0 + }) + if (queryParts.length === 0) return alwaysTrue + var match = function (s) { + var parts = s + .toLowerCase() + .split(/\s+/) + .filter(function (s) { + return s.length > 0 + }) + return queryParts.every(function (p) { + return ( + p.length === 0 || + parts.some(function (sp) { + return sp.startsWith(p) || sp.endsWith(p) + }) + ) + }) + } + return function (_a) { + var name = _a.name, + symbol = _a.symbol + return Boolean((symbol && match(symbol)) || (name && match(name))) + } +} + +/** Sorts currency amounts (descending). */ +function balanceComparator(a, b) { + if (a && b) { + return a.greaterThan(b) ? -1 : a.equalTo(b) ? 0 : 1 + } else if (a === null || a === void 0 ? void 0 : a.greaterThan('0')) { + return -1 + } else if (b === null || b === void 0 ? void 0 : b.greaterThan('0')) { + return 1 + } + return 0 +} +/** Sorts tokens by currency amount (descending), then symbol (ascending). */ +function tokenComparator(balances, a, b) { + // Sorts by balances + var balanceComparison = balanceComparator(balances[a.address], balances[b.address]) + if (balanceComparison !== 0) return balanceComparison + // Sorts by symbol + if (a.symbol && b.symbol) { + return a.symbol.toLowerCase() < b.symbol.toLowerCase() ? -1 : 1 + } + return -1 +} +/** Sorts tokens by query, giving precedence to exact matches and partial matches. */ +function useSortTokensByQuery(query, tokens) { + return React.useMemo( + function () { + if (!tokens) { + return [] + } + var matches = query + .toLowerCase() + .split(/\s+/) + .filter(function (s) { + return s.length > 0 + }) + if (matches.length > 1) { + return tokens + } + var exactMatches = [] + var symbolSubtrings = [] + var rest = [] + // sort tokens by exact match -> subtring on symbol match -> rest + tokens.map(function (token) { + var _a, _b + if (((_a = token.symbol) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === matches[0]) { + return exactMatches.push(token) + } else if ( + (_b = token.symbol) === null || _b === void 0 + ? void 0 + : _b.toLowerCase().startsWith(query.toLowerCase().trim()) + ) { + return symbolSubtrings.push(token) + } else { + return rest.push(token) + } + }) + return __spreadArray( + __spreadArray(__spreadArray([], __read(exactMatches), false), __read(symbolSubtrings), false), + __read(rest), + false + ) + }, + [tokens, query] + ) +} + +/** + * Token instances created from token info on a token list. + */ +var WrappedTokenInfo = /** @class */ (function () { + function WrappedTokenInfo(tokenInfo, list) { + this.isNative = false + this.isToken = true + this._checksummedAddress = null + this._tags = null + this.tokenInfo = tokenInfo + this.list = list + } + Object.defineProperty(WrappedTokenInfo.prototype, 'address', { + get() { + if (this._checksummedAddress) return this._checksummedAddress + var checksummedAddress = isAddress(this.tokenInfo.address) + if (!checksummedAddress) throw new Error('Invalid token address: ' + this.tokenInfo.address) + return (this._checksummedAddress = checksummedAddress) + }, + enumerable: false, + configurable: true, + }) + Object.defineProperty(WrappedTokenInfo.prototype, 'chainId', { + get() { + return this.tokenInfo.chainId + }, + enumerable: false, + configurable: true, + }) + Object.defineProperty(WrappedTokenInfo.prototype, 'decimals', { + get() { + return this.tokenInfo.decimals + }, + enumerable: false, + configurable: true, + }) + Object.defineProperty(WrappedTokenInfo.prototype, 'name', { + get() { + return this.tokenInfo.name + }, + enumerable: false, + configurable: true, + }) + Object.defineProperty(WrappedTokenInfo.prototype, 'symbol', { + get() { + return this.tokenInfo.symbol + }, + enumerable: false, + configurable: true, + }) + Object.defineProperty(WrappedTokenInfo.prototype, 'logoURI', { + get() { + return this.tokenInfo.logoURI + }, + enumerable: false, + configurable: true, + }) + Object.defineProperty(WrappedTokenInfo.prototype, 'tags', { + get() { + var _a + if (this._tags !== null) return this._tags + if (!this.tokenInfo.tags) return (this._tags = []) + var listTags = (_a = this.list) === null || _a === void 0 ? void 0 : _a.tags + if (!listTags) return (this._tags = []) + return (this._tags = this.tokenInfo.tags.map(function (tagId) { + return __assign(__assign({}, listTags[tagId]), { id: tagId }) + })) + }, + enumerable: false, + configurable: true, + }) + WrappedTokenInfo.prototype.equals = function (other) { + return other.chainId === this.chainId && other.isToken && other.address.toLowerCase() === this.address.toLowerCase() + } + WrappedTokenInfo.prototype.sortsBefore = function (other) { + if (this.equals(other)) throw new Error('Addresses should not be equal') + return this.address.toLowerCase() < other.address.toLowerCase() + } + Object.defineProperty(WrappedTokenInfo.prototype, 'wrapped', { + get() { + return this + }, + enumerable: false, + configurable: true, + }) + return WrappedTokenInfo +})() + +var mapCache = typeof WeakMap !== 'undefined' ? new WeakMap() : null +function tokensToChainTokenMap(tokens) { + var cached = mapCache === null || mapCache === void 0 ? void 0 : mapCache.get(tokens) + if (cached) return cached + var _a = __read(Array.isArray(tokens) ? [undefined, tokens] : [tokens, tokens.tokens], 2), + list = _a[0], + infos = _a[1] + var map = infos.reduce(function (map, info) { + var _a + var token = new WrappedTokenInfo(info, list) + if (((_a = map[token.chainId]) === null || _a === void 0 ? void 0 : _a[token.address]) !== undefined) { + console.warn('Duplicate token skipped: ' + token.address) + return map + } + if (!map[token.chainId]) { + map[token.chainId] = {} + } + map[token.chainId][token.address] = { token, list } + return map + }, {}) + mapCache === null || mapCache === void 0 ? void 0 : mapCache.set(tokens, map) + return map +} + +jotai.atom({}) + +// parse a name or symbol from a token response +var BYTES32_REGEX = /^0x[a-fA-F0-9]{64}$/ +function parseStringOrBytes32(str, bytes32, defaultValue) { + return str && str.length > 0 + ? str + : // need to check for proper bytes string and valid terminator + bytes32 && BYTES32_REGEX.test(bytes32) && bytes.arrayify(bytes32)[31] === 0 + ? strings.parseBytes32String(bytes32) + : defaultValue +} +/** + * Returns a Token from the tokenAddress. + * Returns null if token is loading or null was passed. + * Returns undefined if tokenAddress is invalid or token does not exist. + */ +function useTokenFromMap(tokens, tokenAddress) { + var chainId = useActiveWeb3React().chainId + var address = isAddress(tokenAddress) + var tokenContract = useTokenContract(address ? address : undefined, false) + var tokenContractBytes32 = useBytes32TokenContract(address ? address : undefined, false) + var token = address ? tokens[address] : undefined + var tokenName = useSingleCallResult(token ? undefined : tokenContract, 'name', undefined, reduxMulticall.NEVER_RELOAD) + var tokenNameBytes32 = useSingleCallResult( + token ? undefined : tokenContractBytes32, + 'name', + undefined, + reduxMulticall.NEVER_RELOAD + ) + var symbol = useSingleCallResult(token ? undefined : tokenContract, 'symbol', undefined, reduxMulticall.NEVER_RELOAD) + var symbolBytes32 = useSingleCallResult( + token ? undefined : tokenContractBytes32, + 'symbol', + undefined, + reduxMulticall.NEVER_RELOAD + ) + var decimals = useSingleCallResult( + token ? undefined : tokenContract, + 'decimals', + undefined, + reduxMulticall.NEVER_RELOAD + ) + return React.useMemo( + function () { + var _a, _b, _c, _d + if (token) return token + if (tokenAddress === null) return null + if (!chainId || !address) return undefined + if (decimals.loading || symbol.loading || tokenName.loading) return null + if (decimals.result) { + return new sdkCore.Token( + chainId, + address, + decimals.result[0], + parseStringOrBytes32( + (_a = symbol.result) === null || _a === void 0 ? void 0 : _a[0], + (_b = symbolBytes32.result) === null || _b === void 0 ? void 0 : _b[0], + 'UNKNOWN' + ), + parseStringOrBytes32( + (_c = tokenName.result) === null || _c === void 0 ? void 0 : _c[0], + (_d = tokenNameBytes32.result) === null || _d === void 0 ? void 0 : _d[0], + 'Unknown Token' + ) + ) + } + return undefined + }, + [ + address, + chainId, + decimals.loading, + decimals.result, + symbol.loading, + symbol.result, + symbolBytes32.result, + token, + tokenAddress, + tokenName.loading, + tokenName.result, + tokenNameBytes32.result, + ] + ) +} +/** + * Returns a Currency from the currencyId. + * Returns null if currency is loading or null was passed. + * Returns undefined if currencyId is invalid or token does not exist. + */ +function useCurrencyFromMap(tokens, currencyId) { + var _a + var nativeCurrency = useNativeCurrency() + var isNative = Boolean( + nativeCurrency && (currencyId === null || currencyId === void 0 ? void 0 : currencyId.toUpperCase()) === 'ETH' + ) + var token = useTokenFromMap(tokens, isNative ? undefined : currencyId) + if (currencyId === null || currencyId === undefined) return currencyId + // this case so we use our builtin wrapped token instead of wrapped tokens on token lists + var wrappedNative = nativeCurrency === null || nativeCurrency === void 0 ? void 0 : nativeCurrency.wrapped + if ( + ((_a = wrappedNative === null || wrappedNative === void 0 ? void 0 : wrappedNative.address) === null || + _a === void 0 + ? void 0 + : _a.toUpperCase()) === (currencyId === null || currencyId === void 0 ? void 0 : currencyId.toUpperCase()) + ) + return wrappedNative + return isNative ? nativeCurrency : token +} + +var DEFAULT_LIST_PRIORITIES = DEFAULT_LIST_OF_LISTS.reduce(function (memo, listUrl, index) { + memo[listUrl] = index + 1 + return memo +}, {}) +// use ordering of default list of lists to assign priority +function sortByListPriority(urlA, urlB) { + if (DEFAULT_LIST_PRIORITIES[urlA] && DEFAULT_LIST_PRIORITIES[urlB]) { + return DEFAULT_LIST_PRIORITIES[urlA] - DEFAULT_LIST_PRIORITIES[urlB] + } + return 0 +} + +var name$1 = 'Broken Token List' +var timestamp$1 = '2021-01-05T20:47:02.923Z' var version$1 = { - major: 1, - minor: 0, - patch: 0 -}; -var tags$1 = { -}; -var logoURI$1 = "ipfs://QmNa8mQkrNKp1WEEeGjFezDmDeodkWRevGFN8JCV7b4Xir"; -var keywords$1 = [ - "uniswap", - "broken" -]; + major: 1, + minor: 0, + patch: 0, +} +var tags$1 = {} +var logoURI$1 = 'ipfs://QmNa8mQkrNKp1WEEeGjFezDmDeodkWRevGFN8JCV7b4Xir' +var keywords$1 = ['uniswap', 'broken'] var tokens$1 = [ - { - name: "UNI HODL", - address: "0x4bf5dc91E2555449293D7824028Eb8Fe5879B689", - symbol: "UniH", - decimals: 18, - chainId: 1, - logoURI: "" - } -]; + { + name: 'UNI HODL', + address: '0x4bf5dc91E2555449293D7824028Eb8Fe5879B689', + symbol: 'UniH', + decimals: 18, + chainId: 1, + logoURI: '', + }, +] var BROKEN_LIST = { - name: name$1, - timestamp: timestamp$1, - version: version$1, - tags: tags$1, - logoURI: logoURI$1, - keywords: keywords$1, - tokens: tokens$1 -}; - -var name = "Unsupported Tokens"; -var timestamp = "2021-01-05T20:47:02.923Z"; + name: name$1, + timestamp: timestamp$1, + version: version$1, + tags: tags$1, + logoURI: logoURI$1, + keywords: keywords$1, + tokens: tokens$1, +} + +var name = 'Unsupported Tokens' +var timestamp = '2021-01-05T20:47:02.923Z' var version = { - major: 1, - minor: 0, - patch: 0 -}; -var tags = { -}; -var logoURI = "ipfs://QmNa8mQkrNKp1WEEeGjFezDmDeodkWRevGFN8JCV7b4Xir"; -var keywords = [ - "uniswap", - "unsupported" -]; + major: 1, + minor: 0, + patch: 0, +} +var tags = {} +var logoURI = 'ipfs://QmNa8mQkrNKp1WEEeGjFezDmDeodkWRevGFN8JCV7b4Xir' +var keywords = ['uniswap', 'unsupported'] var tokens = [ - { - name: "Gold Tether", - address: "0x4922a015c4407F87432B179bb209e125432E4a2A", - symbol: "XAUt", - decimals: 6, - chainId: 1, - logoURI: "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4922a015c4407F87432B179bb209e125432E4a2A/logo.png" - }, - { - name: "Grump Cat", - address: "0x93B2FfF814FCaEFFB01406e80B4Ecd89Ca6A021b", - symbol: "GRUMPY", - decimals: 9, - chainId: 1, - logoURI: "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4922a015c4407F87432B179bb209e125432E4a2A/logo.png" - }, - { - name: "apeUSD-UMA Synthetic USD (Dec 2021)", - address: "0xfA5e27893aee4805283D86e4283Da64F8c72dd56", - symbol: "apeUSD-UMA-DEC21", - decimals: 18, - chainId: 1, - logoURI: "" - }, - { - chainId: 1, - address: "0xc6b11850241c5127eab73af4b6c68bc267cbbff4", - name: "oWETHp Put 360 DEC2520", - symbol: "oWETH-360P-12/25/20", - decimals: 7 - }, - { - chainId: 1, - name: "oYFIp Put 25000 OCT0220", - address: "0x452b421be5b30f0c6ad8c3f03c06bdaab4f5c56c", - symbol: "oYFI-25000P-10/02/20", - decimals: 7 - }, - { - chainId: 1, - name: "oWETHp Put 360 OCT3020", - address: "0x0578779e746d7186253a36cf651ea786acfcf087", - symbol: "oWETH-360P-10/30/20", - decimals: 7 - }, - { - chainId: 1, - name: "ETHc Call 500 OCT3020", - address: "0xf9aba2e43fb19184408ea3b572a0fd672946f87b", - symbol: "oETH-500C-10/30/20", - decimals: 6 - }, - { - chainId: 1, - name: "oBALp Put 22 OCT0220", - address: "0xdb0991dfc7e828b5a2837dc82d68e16490562c8d", - symbol: "oBAL-22P-10/02/20", - decimals: 7 - }, - { - chainId: 1, - name: "oCOMPp Put 150 SEP2520", - address: "0xe951ebe6b4420ab3f4844cf36dedd263d095b416", - symbol: "oCOMP-150P-09/25/20", - decimals: 7 - }, - { - chainId: 1, - name: "oCRVp Put 3 SEP252020", - address: "0x9215bd49b59748419eac6bad9dbe247df06ebdb9", - symbol: "oCRV-3P-09/25/20", - decimals: 7 - }, - { - chainId: 1, - name: "oETHp Put 180 SEP2520", - address: "0xE3A2c34Fa2F59ffa95C4ACd1E5663633d45Bc3AD", - symbol: "oETH-180P-09/25/20", - decimals: 7 - }, - { - chainId: 1, - name: "oETHc Call 400 SEP2520", - address: "0x05977EBC26825C0CD6097E0Ad7204721516711Eb", - symbol: "oETH-400C-09/25/20", - decimals: 7 - }, - { - chainId: 1, - name: "oWETHp Put 380 SEP1820", - address: "0x31f88266301b08631f9f0e33fd5c43c2a5d1e5b2", - symbol: "oWETH-380P-09/18/20", - decimals: 7 - }, - { - chainId: 1, - name: "oYFIp Put 8500 SEP1820", - address: "0xd1cec2f67fdc4c60e0963515dfc3343f31e32e47", - symbol: "oYFI-8500P-09/18/20", - decimals: 7 - }, - { - chainId: 1, - name: "oWETHp Put 370 SEP1120", - address: "0x15844029b2c2bf24506e9937739a9a912f1e4354", - symbol: "oWETH-370P-09/11/20", - decimals: 7 - }, - { - chainId: 1, - name: "oWETHp Put 400 SEP0420", - address: "0x5562c33c383f6386be4f6dcdbd35a3a99bbcfde6", - symbol: "oWETH-400P-09/04/20", - decimals: 7 - }, - { - chainId: 1, - name: "oETHp Put 200 AUG2820", - address: "0x3CBFC1397deF0602c2d211c70A1c0c38CEDB5448", - symbol: "oWETH-400P-09/04/20", - decimals: 7 - }, - { - chainId: 1, - name: "Opyn cDai Insurance", - symbol: "ocDai", - address: "0x98cc3bd6af1880fcfda17ac477b2f612980e5e33", - decimals: 8 - }, - { - chainId: 1, - name: "Opyn cUSDC Insurance", - symbol: "ocUSDC", - address: "0x8ED9f862363fFdFD3a07546e618214b6D59F03d4", - decimals: 8 - }, - { - chainId: 1, - address: "0x176C674Ee533C6139B0dc8b458D72A93dCB3e705", - symbol: "iAAVE", - name: "Synth Inverse Aave", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iAAVE.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x8A8079c7149B8A1611e5C5d978DCA3bE16545F83", - symbol: "iADA", - name: "Synth Inverse Cardano", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iADA.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0xAFD870F32CE54EfdBF677466B612bf8ad164454B", - symbol: "iBNB", - name: "Synth Inverse Binance Coin", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iBNB.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0xD6014EA05BDe904448B743833dDF07c3C7837481", - symbol: "iBTC", - name: "Synth Inverse Bitcoin", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iBTC.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x336213e1DDFC69f4701Fc3F86F4ef4A160c1159d", - symbol: "iCEX", - name: "Synth Inverse Centralised Exchange Index", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iCEX.svg", - tags: [ - "index", - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x6345728B1ccE16E6f8C509950b5c84FFF88530d9", - symbol: "iCOMP", - name: "Synth Inverse Compound", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iCOMP.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0xCB98f42221b2C251A4E74A1609722eE09f0cc08E", - symbol: "iDASH", - name: "Synth Inverse Dash", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDASH.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x14d10003807AC60d07BB0ba82cAeaC8d2087c157", - symbol: "iDEFI", - name: "Synth Inverse DeFi Index", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDEFI.svg", - tags: [ - "index", - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x46a97629C9C1F58De6EC18C7F536e7E6d6A6ecDe", - symbol: "iDOT", - name: "Synth Inverse Polkadot", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDOT.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0xF4EebDD0704021eF2a6Bbe993fdf93030Cd784b4", - symbol: "iEOS", - name: "Synth Inverse EOS", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iEOS.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0xd50c1746D835d2770dDA3703B69187bFfeB14126", - symbol: "iETC", - name: "Synth Inverse Ethereum Classic", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iETC.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0xA9859874e1743A32409f75bB11549892138BBA1E", - symbol: "iETH", - name: "Synth Inverse Ether", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iETH.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x2d7aC061fc3db53c39fe1607fB8cec1B2C162B01", - symbol: "iLINK", - name: "Synth Inverse Chainlink", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iLINK.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x79da1431150C9b82D2E5dfc1C68B33216846851e", - symbol: "iLTC", - name: "Synth Inverse Litecoin", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iLTC.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0xA5a5DF41883Cdc00c4cCC6E8097130535399d9a3", - symbol: "iOIL", - name: "Synth Inverse Perpetual Oil Futures", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iOIL.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x0fEd38108bdb8e62ef7b5680E8E0726E2F29e0De", - symbol: "iREN", - name: "Synth Inverse Ren", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iREN.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0xC5807183a9661A533CB08CbC297594a0B864dc12", - symbol: "iTRX", - name: "Synth Inverse TRON", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iTRX.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x36A00FF9072570eF4B9292117850B8FE08d96cce", - symbol: "iUNI", - name: "Synth Inverse Uniswap", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iUNI.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x4AdF728E2Df4945082cDD6053869f51278fae196", - symbol: "iXMR", - name: "Synth Inverse Monero", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXMR.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x27269b3e45A4D3E79A3D6BFeE0C8fB13d0D711A6", - symbol: "iXRP", - name: "Synth Inverse Ripple", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXRP.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x8deef89058090ac5655A99EEB451a4f9183D1678", - symbol: "iXTZ", - name: "Synth Inverse Tezos", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXTZ.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x592244301CeA952d6daB2fdC1fE6bd9E53917306", - symbol: "iYFI", - name: "Synth Inverse yearn.finance", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iYFI.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0xcD39b5434a0A92cf47D1F567a7dF84bE356814F0", - symbol: "s1INCH", - name: "Synth 1inch", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/s1INCH.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x7537AAe01f3B218DAE75e10d952473823F961B87", - symbol: "sAAPL", - name: "Synth Apple", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAAPL.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xd2dF355C19471c8bd7D8A3aa27Ff4e26A21b4076", - symbol: "sAAVE", - name: "Synth Aave", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAAVE.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xe36E2D3c7c34281FA3bC737950a68571736880A1", - symbol: "sADA", - name: "Synth Cardano", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sADA.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x9CF7E61853ea30A41b02169391b393B901eac457", - symbol: "sAMZN", - name: "Synth Amazon", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAMZN.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xF48e200EAF9906362BB1442fca31e0835773b8B4", - symbol: "sAUD", - name: "Synth Australian Dollars", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAUD.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x617aeCB6137B5108D1E7D4918e3725C8cEbdB848", - symbol: "sBNB", - name: "Synth Binance Coin", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sBNB.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xfE18be6b3Bd88A2D2A7f928d00292E7a9963CfC6", - symbol: "sBTC", - name: "Synth Bitcoin", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sBTC.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xeABACD844A196D7Faf3CE596edeBF9900341B420", - symbol: "sCEX", - name: "Synth Centralised Exchange Index", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCEX.svg", - tags: [ - "index", - "synth" - ] - }, - { - chainId: 1, - address: "0x0F83287FF768D1c1e17a42F44d644D7F22e8ee1d", - symbol: "sCHF", - name: "Synth Swiss Franc", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCHF.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x9EeF4CA7aB9fa8bc0650127341C2d3F707a40f8A", - symbol: "sCOIN", - name: "Synth Coinbase", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCOIN.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xEb029507d3e043DD6C87F2917C4E82B902c35618", - symbol: "sCOMP", - name: "Synth Compound", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCOMP.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xD38aEb759891882e78E957c80656572503D8c1B1", - symbol: "sCRV", - name: "Synth Curve DAO Token", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCRV.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xfE33ae95A9f0DA8A845aF33516EDc240DCD711d6", - symbol: "sDASH", - name: "Synth Dash", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDASH.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xe1aFe1Fd76Fd88f78cBf599ea1846231B8bA3B6B", - symbol: "sDEFI", - name: "Synth DeFi Index", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDEFI.svg", - tags: [ - "index", - "synth" - ] - }, - { - chainId: 1, - address: "0x1715AC0743102BF5Cd58EfBB6Cf2dC2685d967b6", - symbol: "sDOT", - name: "Synth Polkadot", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDOT.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x88C8Cf3A212c0369698D13FE98Fcb76620389841", - symbol: "sEOS", - name: "Synth EOS", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sEOS.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x22602469d704BfFb0936c7A7cfcD18f7aA269375", - symbol: "sETC", - name: "Synth Ethereum Classic", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sETC.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x5e74C9036fb86BD7eCdcb084a0673EFc32eA31cb", - symbol: "sETH", - name: "Synth Ether", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sETH.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xD71eCFF9342A5Ced620049e616c5035F1dB98620", - symbol: "sEUR", - name: "Synth Euros", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sEUR.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xf50B5e535F62a56A9BD2d8e2434204E726c027Fa", - symbol: "sFB", - name: "Synth Facebook", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sFB.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x23348160D7f5aca21195dF2b70f28Fce2B0be9fC", - symbol: "sFTSE", - name: "Synth FTSE 100 Index", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sFTSE.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x97fe22E7341a0Cd8Db6F6C021A24Dc8f4DAD855F", - symbol: "sGBP", - name: "Synth Pound Sterling", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sGBP.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xC63B8ECCE56aB9C46184eC6aB85e4771fEa4c8AD", - symbol: "sGOOG", - name: "Synth Alphabet", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sGOOG.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xF6b1C627e95BFc3c1b4c9B825a032Ff0fBf3e07d", - symbol: "sJPY", - name: "Synth Japanese Yen", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sJPY.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x269895a3dF4D73b077Fc823dD6dA1B95f72Aaf9B", - symbol: "sKRW", - name: "Synth South Korean Won", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sKRW.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xbBC455cb4F1B9e4bFC4B73970d360c8f032EfEE6", - symbol: "sLINK", - name: "Synth Chainlink", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sLINK.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xC14103C2141E842e228FBaC594579e798616ce7A", - symbol: "sLTC", - name: "Synth Litecoin", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sLTC.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x745a824D6aBBD236AA794b5530062778A6Ad7523", - symbol: "sMSFT", - name: "Synth Microsoft", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sMSFT.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x5A7E3c07604EB515C16b36cd51906a65f021F609", - symbol: "sNFLX", - name: "Synth Netflix", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sNFLX.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x757de3ac6B830a931eF178C6634c5C551773155c", - symbol: "sNIKKEI", - name: "Synth Nikkei 225 Index", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sNIKKEI.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x6d16cF3EC5F763d4d99cB0B0b110eefD93B11B56", - symbol: "sOIL", - name: "Synth Perpetual Oil Futures", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sOIL.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xD31533E8d0f3DF62060e94B3F1318137bB6E3525", - symbol: "sREN", - name: "Synth Ren", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sREN.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x0352557B007A4Aae1511C114409b932F06F9E2f4", - symbol: "sRUNE", - name: "Synth THORChain", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sRUNE.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xf2E08356588EC5cd9E437552Da87C0076b4970B0", - symbol: "sTRX", - name: "Synth TRON", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sTRX.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x918dA91Ccbc32B7a6A0cc4eCd5987bbab6E31e6D", - symbol: "sTSLA", - name: "Synth Tesla", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sTSLA.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x30635297E450b930f8693297eBa160D9e6c8eBcf", - symbol: "sUNI", - name: "Synth Uniswap", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sUNI.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x6A22e5e94388464181578Aa7A6B869e00fE27846", - symbol: "sXAG", - name: "Synth Silver Ounce", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXAG.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x261EfCdD24CeA98652B9700800a13DfBca4103fF", - symbol: "sXAU", - name: "Synth Gold Ounce", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXAU.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x5299d6F7472DCc137D7f3C4BcfBBB514BaBF341A", - symbol: "sXMR", - name: "Synth Monero", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXMR.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xa2B0fDe6D710e201d0d608e924A484d1A5fEd57c", - symbol: "sXRP", - name: "Synth Ripple", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXRP.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x2e59005c5c0f0a4D77CcA82653d48b46322EE5Cd", - symbol: "sXTZ", - name: "Synth Tezos", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXTZ.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x992058B7DB08F9734d84485bfbC243C4ee6954A7", - symbol: "sYFI", - name: "Synth yearn.finance", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sYFI.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x81ab848898b5ffD3354dbbEfb333D5D183eEDcB5", - name: "yUSD Synthetic Expiring 1 September 2020", - symbol: "yUSDSEP20", - decimals: 18 - }, - { - chainId: 1, - address: "0xB2FdD60AD80ca7bA89B9BAb3b5336c2601C020b4", - name: "yUSD Synthetic Expiring 1 October 2020", - symbol: "yUSDOCT20", - decimals: 18 - }, - { - chainId: 1, - address: "0x208d174775dc39fe18b1b374972f77ddec6c0f73", - name: "uUSDrBTC Synthetic Expiring 1 Oct 2020", - symbol: "uUSDrBTC-OCT", - decimals: 18 - }, - { - chainId: 1, - address: "0xf06ddacf71e2992e2122a1a0168c6967afdf63ce", - name: "uUSDrBTC Synthetic Expiring 31 Dec 2020", - symbol: "uUSDrBTC-DEC", - decimals: 18 - }, - { - chainId: 1, - address: "0xd16c79c8a39d44b2f3eb45d2019cd6a42b03e2a9", - name: "uUSDwETH Synthetic Expiring 31 Dec 2020", - symbol: "uUSDwETH-DEC", - decimals: 18 - }, - { - chainId: 1, - address: "0x3d995510f8d82c2ea341845932b5ddde0bead9a3", - name: "uGAS-JAN21 Token Expiring 31 Jan 2021", - symbol: "uGAS-JAN21", - decimals: 18 - }, - { - chainId: 1, - address: "0x90f802c7e8fb5d40b0de583e34c065a3bd2020d8", - name: "YD-ETH-MAR21 Token Expiring 31 Mar 2021", - symbol: "YD-ETH-MAR21", - decimals: 18 - }, - { - chainId: 1, - address: "0x002f0b1a71c5730cf2f4da1970a889207bdb6d0d", - name: "YD-BTC-MAR21 Token Expiring 31 Mar 2021", - symbol: "YD-BTC-MAR21", - decimals: 18 - }, - { - chainId: 1, - address: "0x1062ad0e59fa67fa0b27369113098cc941dd0d5f", - name: "UMA 35 Call Expirying 30 Apr 2021", - symbol: "UMAc35-0421", - decimals: 18 - }, - { - chainId: 1, - address: "0xf93340b1a3adf7eedcaec25fae8171d4b736e89f", - name: "pxUSD Synthetic USD Expiring 1 April 2021", - symbol: "pxUSD_MAR2021", - decimals: 18 - }, - { - chainId: 1, - address: "0x84bd083b1c8bf929f39c98bc17cf518f40154f58", - name: "Mario Cash Synthetic Token Expiring 15 January 2021", - symbol: "Mario Cash-JAN-2021", - decimals: 18 - }, - { - chainId: 1, - address: "0x81fab276aec924fbde190cf379783526d413cf70", - name: "uGAS-FEB21 Token Expiring 28 Feb 2021", - symbol: "uGAS-FEB21", - decimals: 18 - }, - { - chainId: 1, - address: "0x4e110603e70b0b5f1c403ee543b37e1f1244cf28", - name: "uGAS-MAR21 Token Expiring 31 Mar 2021", - symbol: "uGAS-MAR21", - decimals: 18 - }, - { - chainId: 1, - address: "0xcf55a7f92d5e0c6683debbc1fc20c0a6e056df13", - name: "Zelda Elastic Cash", - symbol: "Zelda Elastic Cash", - decimals: 18 - }, - { - chainId: 1, - address: "0x654eebac62240e6c56bab5f6adf7cfa74a894510", - name: "Zelda Spring Nuts Cash", - symbol: "Zelda Spring Nuts Cash", - decimals: 18 - }, - { - chainId: 1, - address: "0xa48920cc1ad85d8ea13af5d7be180c0338c306dd", - name: "Zelda Summer Nuts Cash", - symbol: "Zelda Summer Nuts Cash", - decimals: 18 - }, - { - chainId: 1, - address: "0x249a198d59b57fda5dda90630febc86fd8c7594c", - name: "Zelda Whirlwind Cash", - symbol: "Zelda Whirlwind Cash", - decimals: 18 - }, - { - chainId: 1, - address: "0x5ed1406873c9eb91f6f9a67ac4e152387c1132e7", - name: "Zelda Reinforced Cash", - symbol: "Zelda Reinforced Cash", - decimals: 18 - }, - { - chainId: 1, - address: "0x8104c9f13118320eefe5fbea8a44d600b85981ef", - name: "Mini Mario Summer Cash", - symbol: "Mini Mario Summer Cash", - decimals: 18 - }, - { - chainId: 1, - address: "0x69746c719e59674b147df25f50e7cfa0673cb625", - name: "Mini Mario Spring Cash", - symbol: "Mini Mario Spring Cash", - decimals: 18 - }, - { - chainId: 1, - address: "0x6b1257641d18791141f025eab36fb567c4b564ff", - name: "Bitcoin Dominance Token 31 March 2021", - symbol: "BTCDOM-MAR2021", - decimals: 18 - }, - { - chainId: 1, - address: "0x4e83b6287588a96321b2661c5e041845ff7814af", - name: "Altcoin Dominance Token 31 March 2021", - symbol: "ALTDOM-MAR2021", - decimals: 18 - }, - { - chainId: 1, - address: "0x59fec83ec709c893aedd1a144cf1828eb04127cd", - name: "pxGOLD Synthetic GOLD Expiring 31 May 2021", - symbol: "pxGOLD_MAY2021", - decimals: 18 - }, - { - chainId: 1, - address: "0x89337BFb7938804c3776C9FB921EccAf5ab76758", - name: "Compound Annualized Rate Future Expiring 28 March 2021", - symbol: "CAR-USDC-MAR21", - decimals: 18 - }, - { - chainId: 1, - address: "0xec58d3aefc9aaa2e0036fa65f70d569f49d9d1ed", - name: "uSTONKS Index Token April 2021", - symbol: "uSTONKS_APR21", - decimals: 6 - }, - { - chainId: 1, - address: "0xa6B9d7E3d76cF23549293Fb22c488E0Ea591A44e", - name: "uGAS-JUN21 Token Expiring 30 Jun 2021", - symbol: "uGAS-JUN21", - decimals: 18 - }, - { - chainId: 1, - address: "0xe813b65da6c38a04591aed3f082d32db7d53c382", - name: "Yield Dollar [WETH Dec 2021]", - symbol: "YD-ETH-DEC21", - decimals: 18 - }, - { - chainId: 1, - address: "0x4b606e9eb2228c70f44453afe5a73e1fea258ce1", - name: "pxUSD Synthetic USD Expiring 31 Mar 2022", - symbol: "pxUSD_MAR2022", - decimals: 18 - }, - { - chainId: 1, - address: "0x5247c0db4044fb6f97f32c7e1b48758019a5a912", - name: "pxGOLD Synthetic Gold Expiring 31 Mar 2022", - symbol: "pxGOLD_MAR2022", - decimals: 18 - }, - { - chainId: 1, - address: "0x56fb1acaff95c0b6ebcd17c8361a63d98b1a5a11", - name: "uForex CNYUSD Synthetic Token April 2021", - symbol: "uCNYUSD-APR", - decimals: 6 - }, - { - chainId: 1, - address: "0xd49fa405dce086c65d66ca1ca41f8e98583812b4", - name: "uForex EURUSD Synthetic Token April 2021", - symbol: "uEURUSD-APR", - decimals: 6 - }, - { - chainId: 1, - address: "0x29dddacba3b231ee8d673dd0f0fa759ea145561b", - name: "DEFI_PULSE_TOTAL_TVL Synthetic Token Expiring 15 April 2021", - symbol: "TVL_ALL_APRIL15", - decimals: 6 - }, - { - chainId: 1, - address: "0xcbe430927370e95b4b10cfc702c6017ec7abefc3", - name: "Yield Dollar [WETH Jun 2021]", - symbol: "YD-ETH-JUN21", - decimals: 18 - }, - { - chainId: 1, - address: "0x4b7fb448df91c8ed973494f8c8c4f12daf3a8521", - name: "Yield Dollar [renBTC Jun 2021]", - symbol: "YD-BTC-JUN21", - decimals: 8 - }, - { - chainId: 1, - address: "0x3108c33b6fb38efedaefd8b5f7ca01d5f5c7372d", - name: "Yield Dollar UMA 21", - symbol: "yUMA21", - decimals: 18 - }, - { - chainId: 1, - address: "0x0cae9e4d663793c2a2A0b211c1Cf4bBca2B9cAa7", - name: "Mirrored Amazon", - symbol: "MAMZN", - decimals: 18 - }, - { - chainId: 1, - address: "0x31c63146a635EB7465e5853020b39713AC356991", - name: "M US Oil", - symbol: "MUSO", - decimals: 18 - }, - { - chainId: 1, - address: "0x59A921Db27Dd6d4d974745B7FfC5c33932653442", - name: "M Google", - symbol: "MGOOGL", - decimals: 18 - }, - { - chainId: 1, - address: "0xf72FCd9DCF0190923Fadd44811E240Ef4533fc86", - name: "Mirrored ProShares", - symbol: "MVIXY", - decimals: 18 - }, - { - chainId: 1, - address: "0x56aA298a19C93c6801FDde870fA63EF75Cc0aF72", - name: "Mirrored Alibaba", - symbol: "MBABA", - decimals: 18 - }, - { - chainId: 1, - address: "0x0e99cC0535BB6251F6679Fa6E65d6d3b430e840B", - name: "Mirrored Facebook", - symbol: "MFB", - decimals: 18 - }, - { - chainId: 1, - address: "0x13B02c8dE71680e71F0820c996E4bE43c2F57d15", - name: "Mirrored Invesco QQ", - symbol: "MQQQ", - decimals: 18 - }, - { - chainId: 1, - address: "0x41BbEDd7286dAab5910a1f15d12CBda839852BD7", - name: "Mirrored Microsoft", - symbol: "MMSFT", - decimals: 18 - }, - { - chainId: 1, - address: "0x9d1555d8cB3C846Bb4f7D5B1B1080872c3166676", - name: "Mirrored iShares Si", - symbol: "MSLV", - decimals: 18 - }, - { - chainId: 1, - address: "0x21cA39943E91d704678F5D00b6616650F066fD63", - name: "Mirrored Tesla", - symbol: "MTSLA", - decimals: 18 - }, - { - chainId: 1, - address: "0xe82bbB62fA81d0701643d1675FB50ec52fD3Df92", - name: "DYDX Token", - symbol: "DYDX", - decimals: 18 - }, - { - chainId: 10, - address: "0xE405de8F52ba7559f9df3C368500B6E6ae6Cee49", - name: "sETH", - symbol: "Synth Ether", - decimals: 18 - }, - { - chainId: 10, - address: "0x298B9B95708152ff6968aafd889c6586e9169f1D", - name: "sBTC", - symbol: "Synth Bitcoin", - decimals: 18 - }, - { - chainId: 10, - address: "0xc5Db22719A06418028A40A9B5E9A7c02959D0d08", - name: "sLINK", - symbol: "Synth Link", - decimals: 18 - }, - { - chainId: 1, - address: "0x6B60eE11b73230045cF9095E6e43AE9Ea638e172", - name: "Shatner", - symbol: "SHAT", - decimals: 18 - }, - { - chainId: 1, - address: "0x7277a44D1325D81Ac58893002a1B40a41bea43fe", - name: "FAANG Index", - symbol: "FAANG", - decimals: 18 - }, - { - chainId: 1, - address: "0x76175599887730786bdA1545D0D7AcE8737fEBB1", - name: "ENS DAO", - symbol: "ENS", - decimals: 18 - }, - { - chainId: 1, - address: "0xa82AA729AE2F0d78e961D66db53949e27a9E866d", - name: "BMEX", - symbol: "BMEX", - decimals: 18 - } -]; + { + name: 'Gold Tether', + address: '0x4922a015c4407F87432B179bb209e125432E4a2A', + symbol: 'XAUt', + decimals: 6, + chainId: 1, + logoURI: + 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4922a015c4407F87432B179bb209e125432E4a2A/logo.png', + }, + { + name: 'Grump Cat', + address: '0x93B2FfF814FCaEFFB01406e80B4Ecd89Ca6A021b', + symbol: 'GRUMPY', + decimals: 9, + chainId: 1, + logoURI: + 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4922a015c4407F87432B179bb209e125432E4a2A/logo.png', + }, + { + name: 'apeUSD-UMA Synthetic USD (Dec 2021)', + address: '0xfA5e27893aee4805283D86e4283Da64F8c72dd56', + symbol: 'apeUSD-UMA-DEC21', + decimals: 18, + chainId: 1, + logoURI: '', + }, + { + chainId: 1, + address: '0xc6b11850241c5127eab73af4b6c68bc267cbbff4', + name: 'oWETHp Put 360 DEC2520', + symbol: 'oWETH-360P-12/25/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oYFIp Put 25000 OCT0220', + address: '0x452b421be5b30f0c6ad8c3f03c06bdaab4f5c56c', + symbol: 'oYFI-25000P-10/02/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oWETHp Put 360 OCT3020', + address: '0x0578779e746d7186253a36cf651ea786acfcf087', + symbol: 'oWETH-360P-10/30/20', + decimals: 7, + }, + { + chainId: 1, + name: 'ETHc Call 500 OCT3020', + address: '0xf9aba2e43fb19184408ea3b572a0fd672946f87b', + symbol: 'oETH-500C-10/30/20', + decimals: 6, + }, + { + chainId: 1, + name: 'oBALp Put 22 OCT0220', + address: '0xdb0991dfc7e828b5a2837dc82d68e16490562c8d', + symbol: 'oBAL-22P-10/02/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oCOMPp Put 150 SEP2520', + address: '0xe951ebe6b4420ab3f4844cf36dedd263d095b416', + symbol: 'oCOMP-150P-09/25/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oCRVp Put 3 SEP252020', + address: '0x9215bd49b59748419eac6bad9dbe247df06ebdb9', + symbol: 'oCRV-3P-09/25/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oETHp Put 180 SEP2520', + address: '0xE3A2c34Fa2F59ffa95C4ACd1E5663633d45Bc3AD', + symbol: 'oETH-180P-09/25/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oETHc Call 400 SEP2520', + address: '0x05977EBC26825C0CD6097E0Ad7204721516711Eb', + symbol: 'oETH-400C-09/25/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oWETHp Put 380 SEP1820', + address: '0x31f88266301b08631f9f0e33fd5c43c2a5d1e5b2', + symbol: 'oWETH-380P-09/18/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oYFIp Put 8500 SEP1820', + address: '0xd1cec2f67fdc4c60e0963515dfc3343f31e32e47', + symbol: 'oYFI-8500P-09/18/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oWETHp Put 370 SEP1120', + address: '0x15844029b2c2bf24506e9937739a9a912f1e4354', + symbol: 'oWETH-370P-09/11/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oWETHp Put 400 SEP0420', + address: '0x5562c33c383f6386be4f6dcdbd35a3a99bbcfde6', + symbol: 'oWETH-400P-09/04/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oETHp Put 200 AUG2820', + address: '0x3CBFC1397deF0602c2d211c70A1c0c38CEDB5448', + symbol: 'oWETH-400P-09/04/20', + decimals: 7, + }, + { + chainId: 1, + name: 'Opyn cDai Insurance', + symbol: 'ocDai', + address: '0x98cc3bd6af1880fcfda17ac477b2f612980e5e33', + decimals: 8, + }, + { + chainId: 1, + name: 'Opyn cUSDC Insurance', + symbol: 'ocUSDC', + address: '0x8ED9f862363fFdFD3a07546e618214b6D59F03d4', + decimals: 8, + }, + { + chainId: 1, + address: '0x176C674Ee533C6139B0dc8b458D72A93dCB3e705', + symbol: 'iAAVE', + name: 'Synth Inverse Aave', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iAAVE.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x8A8079c7149B8A1611e5C5d978DCA3bE16545F83', + symbol: 'iADA', + name: 'Synth Inverse Cardano', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iADA.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0xAFD870F32CE54EfdBF677466B612bf8ad164454B', + symbol: 'iBNB', + name: 'Synth Inverse Binance Coin', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iBNB.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0xD6014EA05BDe904448B743833dDF07c3C7837481', + symbol: 'iBTC', + name: 'Synth Inverse Bitcoin', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iBTC.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x336213e1DDFC69f4701Fc3F86F4ef4A160c1159d', + symbol: 'iCEX', + name: 'Synth Inverse Centralised Exchange Index', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iCEX.svg', + tags: ['index', 'inverse', 'synth'], + }, + { + chainId: 1, + address: '0x6345728B1ccE16E6f8C509950b5c84FFF88530d9', + symbol: 'iCOMP', + name: 'Synth Inverse Compound', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iCOMP.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0xCB98f42221b2C251A4E74A1609722eE09f0cc08E', + symbol: 'iDASH', + name: 'Synth Inverse Dash', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDASH.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x14d10003807AC60d07BB0ba82cAeaC8d2087c157', + symbol: 'iDEFI', + name: 'Synth Inverse DeFi Index', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDEFI.svg', + tags: ['index', 'inverse', 'synth'], + }, + { + chainId: 1, + address: '0x46a97629C9C1F58De6EC18C7F536e7E6d6A6ecDe', + symbol: 'iDOT', + name: 'Synth Inverse Polkadot', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDOT.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0xF4EebDD0704021eF2a6Bbe993fdf93030Cd784b4', + symbol: 'iEOS', + name: 'Synth Inverse EOS', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iEOS.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0xd50c1746D835d2770dDA3703B69187bFfeB14126', + symbol: 'iETC', + name: 'Synth Inverse Ethereum Classic', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iETC.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0xA9859874e1743A32409f75bB11549892138BBA1E', + symbol: 'iETH', + name: 'Synth Inverse Ether', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iETH.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x2d7aC061fc3db53c39fe1607fB8cec1B2C162B01', + symbol: 'iLINK', + name: 'Synth Inverse Chainlink', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iLINK.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x79da1431150C9b82D2E5dfc1C68B33216846851e', + symbol: 'iLTC', + name: 'Synth Inverse Litecoin', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iLTC.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0xA5a5DF41883Cdc00c4cCC6E8097130535399d9a3', + symbol: 'iOIL', + name: 'Synth Inverse Perpetual Oil Futures', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iOIL.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x0fEd38108bdb8e62ef7b5680E8E0726E2F29e0De', + symbol: 'iREN', + name: 'Synth Inverse Ren', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iREN.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0xC5807183a9661A533CB08CbC297594a0B864dc12', + symbol: 'iTRX', + name: 'Synth Inverse TRON', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iTRX.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x36A00FF9072570eF4B9292117850B8FE08d96cce', + symbol: 'iUNI', + name: 'Synth Inverse Uniswap', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iUNI.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x4AdF728E2Df4945082cDD6053869f51278fae196', + symbol: 'iXMR', + name: 'Synth Inverse Monero', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXMR.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x27269b3e45A4D3E79A3D6BFeE0C8fB13d0D711A6', + symbol: 'iXRP', + name: 'Synth Inverse Ripple', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXRP.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x8deef89058090ac5655A99EEB451a4f9183D1678', + symbol: 'iXTZ', + name: 'Synth Inverse Tezos', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXTZ.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x592244301CeA952d6daB2fdC1fE6bd9E53917306', + symbol: 'iYFI', + name: 'Synth Inverse yearn.finance', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iYFI.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0xcD39b5434a0A92cf47D1F567a7dF84bE356814F0', + symbol: 's1INCH', + name: 'Synth 1inch', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/s1INCH.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x7537AAe01f3B218DAE75e10d952473823F961B87', + symbol: 'sAAPL', + name: 'Synth Apple', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAAPL.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xd2dF355C19471c8bd7D8A3aa27Ff4e26A21b4076', + symbol: 'sAAVE', + name: 'Synth Aave', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAAVE.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xe36E2D3c7c34281FA3bC737950a68571736880A1', + symbol: 'sADA', + name: 'Synth Cardano', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sADA.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x9CF7E61853ea30A41b02169391b393B901eac457', + symbol: 'sAMZN', + name: 'Synth Amazon', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAMZN.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xF48e200EAF9906362BB1442fca31e0835773b8B4', + symbol: 'sAUD', + name: 'Synth Australian Dollars', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAUD.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x617aeCB6137B5108D1E7D4918e3725C8cEbdB848', + symbol: 'sBNB', + name: 'Synth Binance Coin', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sBNB.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xfE18be6b3Bd88A2D2A7f928d00292E7a9963CfC6', + symbol: 'sBTC', + name: 'Synth Bitcoin', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sBTC.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xeABACD844A196D7Faf3CE596edeBF9900341B420', + symbol: 'sCEX', + name: 'Synth Centralised Exchange Index', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCEX.svg', + tags: ['index', 'synth'], + }, + { + chainId: 1, + address: '0x0F83287FF768D1c1e17a42F44d644D7F22e8ee1d', + symbol: 'sCHF', + name: 'Synth Swiss Franc', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCHF.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x9EeF4CA7aB9fa8bc0650127341C2d3F707a40f8A', + symbol: 'sCOIN', + name: 'Synth Coinbase', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCOIN.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xEb029507d3e043DD6C87F2917C4E82B902c35618', + symbol: 'sCOMP', + name: 'Synth Compound', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCOMP.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xD38aEb759891882e78E957c80656572503D8c1B1', + symbol: 'sCRV', + name: 'Synth Curve DAO Token', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCRV.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xfE33ae95A9f0DA8A845aF33516EDc240DCD711d6', + symbol: 'sDASH', + name: 'Synth Dash', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDASH.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xe1aFe1Fd76Fd88f78cBf599ea1846231B8bA3B6B', + symbol: 'sDEFI', + name: 'Synth DeFi Index', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDEFI.svg', + tags: ['index', 'synth'], + }, + { + chainId: 1, + address: '0x1715AC0743102BF5Cd58EfBB6Cf2dC2685d967b6', + symbol: 'sDOT', + name: 'Synth Polkadot', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDOT.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x88C8Cf3A212c0369698D13FE98Fcb76620389841', + symbol: 'sEOS', + name: 'Synth EOS', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sEOS.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x22602469d704BfFb0936c7A7cfcD18f7aA269375', + symbol: 'sETC', + name: 'Synth Ethereum Classic', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sETC.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x5e74C9036fb86BD7eCdcb084a0673EFc32eA31cb', + symbol: 'sETH', + name: 'Synth Ether', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sETH.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xD71eCFF9342A5Ced620049e616c5035F1dB98620', + symbol: 'sEUR', + name: 'Synth Euros', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sEUR.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xf50B5e535F62a56A9BD2d8e2434204E726c027Fa', + symbol: 'sFB', + name: 'Synth Facebook', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sFB.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x23348160D7f5aca21195dF2b70f28Fce2B0be9fC', + symbol: 'sFTSE', + name: 'Synth FTSE 100 Index', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sFTSE.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x97fe22E7341a0Cd8Db6F6C021A24Dc8f4DAD855F', + symbol: 'sGBP', + name: 'Synth Pound Sterling', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sGBP.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xC63B8ECCE56aB9C46184eC6aB85e4771fEa4c8AD', + symbol: 'sGOOG', + name: 'Synth Alphabet', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sGOOG.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xF6b1C627e95BFc3c1b4c9B825a032Ff0fBf3e07d', + symbol: 'sJPY', + name: 'Synth Japanese Yen', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sJPY.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x269895a3dF4D73b077Fc823dD6dA1B95f72Aaf9B', + symbol: 'sKRW', + name: 'Synth South Korean Won', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sKRW.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xbBC455cb4F1B9e4bFC4B73970d360c8f032EfEE6', + symbol: 'sLINK', + name: 'Synth Chainlink', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sLINK.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xC14103C2141E842e228FBaC594579e798616ce7A', + symbol: 'sLTC', + name: 'Synth Litecoin', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sLTC.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x745a824D6aBBD236AA794b5530062778A6Ad7523', + symbol: 'sMSFT', + name: 'Synth Microsoft', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sMSFT.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x5A7E3c07604EB515C16b36cd51906a65f021F609', + symbol: 'sNFLX', + name: 'Synth Netflix', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sNFLX.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x757de3ac6B830a931eF178C6634c5C551773155c', + symbol: 'sNIKKEI', + name: 'Synth Nikkei 225 Index', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sNIKKEI.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x6d16cF3EC5F763d4d99cB0B0b110eefD93B11B56', + symbol: 'sOIL', + name: 'Synth Perpetual Oil Futures', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sOIL.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xD31533E8d0f3DF62060e94B3F1318137bB6E3525', + symbol: 'sREN', + name: 'Synth Ren', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sREN.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x0352557B007A4Aae1511C114409b932F06F9E2f4', + symbol: 'sRUNE', + name: 'Synth THORChain', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sRUNE.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xf2E08356588EC5cd9E437552Da87C0076b4970B0', + symbol: 'sTRX', + name: 'Synth TRON', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sTRX.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x918dA91Ccbc32B7a6A0cc4eCd5987bbab6E31e6D', + symbol: 'sTSLA', + name: 'Synth Tesla', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sTSLA.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x30635297E450b930f8693297eBa160D9e6c8eBcf', + symbol: 'sUNI', + name: 'Synth Uniswap', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sUNI.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x6A22e5e94388464181578Aa7A6B869e00fE27846', + symbol: 'sXAG', + name: 'Synth Silver Ounce', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXAG.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x261EfCdD24CeA98652B9700800a13DfBca4103fF', + symbol: 'sXAU', + name: 'Synth Gold Ounce', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXAU.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x5299d6F7472DCc137D7f3C4BcfBBB514BaBF341A', + symbol: 'sXMR', + name: 'Synth Monero', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXMR.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xa2B0fDe6D710e201d0d608e924A484d1A5fEd57c', + symbol: 'sXRP', + name: 'Synth Ripple', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXRP.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x2e59005c5c0f0a4D77CcA82653d48b46322EE5Cd', + symbol: 'sXTZ', + name: 'Synth Tezos', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXTZ.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x992058B7DB08F9734d84485bfbC243C4ee6954A7', + symbol: 'sYFI', + name: 'Synth yearn.finance', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sYFI.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x81ab848898b5ffD3354dbbEfb333D5D183eEDcB5', + name: 'yUSD Synthetic Expiring 1 September 2020', + symbol: 'yUSDSEP20', + decimals: 18, + }, + { + chainId: 1, + address: '0xB2FdD60AD80ca7bA89B9BAb3b5336c2601C020b4', + name: 'yUSD Synthetic Expiring 1 October 2020', + symbol: 'yUSDOCT20', + decimals: 18, + }, + { + chainId: 1, + address: '0x208d174775dc39fe18b1b374972f77ddec6c0f73', + name: 'uUSDrBTC Synthetic Expiring 1 Oct 2020', + symbol: 'uUSDrBTC-OCT', + decimals: 18, + }, + { + chainId: 1, + address: '0xf06ddacf71e2992e2122a1a0168c6967afdf63ce', + name: 'uUSDrBTC Synthetic Expiring 31 Dec 2020', + symbol: 'uUSDrBTC-DEC', + decimals: 18, + }, + { + chainId: 1, + address: '0xd16c79c8a39d44b2f3eb45d2019cd6a42b03e2a9', + name: 'uUSDwETH Synthetic Expiring 31 Dec 2020', + symbol: 'uUSDwETH-DEC', + decimals: 18, + }, + { + chainId: 1, + address: '0x3d995510f8d82c2ea341845932b5ddde0bead9a3', + name: 'uGAS-JAN21 Token Expiring 31 Jan 2021', + symbol: 'uGAS-JAN21', + decimals: 18, + }, + { + chainId: 1, + address: '0x90f802c7e8fb5d40b0de583e34c065a3bd2020d8', + name: 'YD-ETH-MAR21 Token Expiring 31 Mar 2021', + symbol: 'YD-ETH-MAR21', + decimals: 18, + }, + { + chainId: 1, + address: '0x002f0b1a71c5730cf2f4da1970a889207bdb6d0d', + name: 'YD-BTC-MAR21 Token Expiring 31 Mar 2021', + symbol: 'YD-BTC-MAR21', + decimals: 18, + }, + { + chainId: 1, + address: '0x1062ad0e59fa67fa0b27369113098cc941dd0d5f', + name: 'UMA 35 Call Expirying 30 Apr 2021', + symbol: 'UMAc35-0421', + decimals: 18, + }, + { + chainId: 1, + address: '0xf93340b1a3adf7eedcaec25fae8171d4b736e89f', + name: 'pxUSD Synthetic USD Expiring 1 April 2021', + symbol: 'pxUSD_MAR2021', + decimals: 18, + }, + { + chainId: 1, + address: '0x84bd083b1c8bf929f39c98bc17cf518f40154f58', + name: 'Mario Cash Synthetic Token Expiring 15 January 2021', + symbol: 'Mario Cash-JAN-2021', + decimals: 18, + }, + { + chainId: 1, + address: '0x81fab276aec924fbde190cf379783526d413cf70', + name: 'uGAS-FEB21 Token Expiring 28 Feb 2021', + symbol: 'uGAS-FEB21', + decimals: 18, + }, + { + chainId: 1, + address: '0x4e110603e70b0b5f1c403ee543b37e1f1244cf28', + name: 'uGAS-MAR21 Token Expiring 31 Mar 2021', + symbol: 'uGAS-MAR21', + decimals: 18, + }, + { + chainId: 1, + address: '0xcf55a7f92d5e0c6683debbc1fc20c0a6e056df13', + name: 'Zelda Elastic Cash', + symbol: 'Zelda Elastic Cash', + decimals: 18, + }, + { + chainId: 1, + address: '0x654eebac62240e6c56bab5f6adf7cfa74a894510', + name: 'Zelda Spring Nuts Cash', + symbol: 'Zelda Spring Nuts Cash', + decimals: 18, + }, + { + chainId: 1, + address: '0xa48920cc1ad85d8ea13af5d7be180c0338c306dd', + name: 'Zelda Summer Nuts Cash', + symbol: 'Zelda Summer Nuts Cash', + decimals: 18, + }, + { + chainId: 1, + address: '0x249a198d59b57fda5dda90630febc86fd8c7594c', + name: 'Zelda Whirlwind Cash', + symbol: 'Zelda Whirlwind Cash', + decimals: 18, + }, + { + chainId: 1, + address: '0x5ed1406873c9eb91f6f9a67ac4e152387c1132e7', + name: 'Zelda Reinforced Cash', + symbol: 'Zelda Reinforced Cash', + decimals: 18, + }, + { + chainId: 1, + address: '0x8104c9f13118320eefe5fbea8a44d600b85981ef', + name: 'Mini Mario Summer Cash', + symbol: 'Mini Mario Summer Cash', + decimals: 18, + }, + { + chainId: 1, + address: '0x69746c719e59674b147df25f50e7cfa0673cb625', + name: 'Mini Mario Spring Cash', + symbol: 'Mini Mario Spring Cash', + decimals: 18, + }, + { + chainId: 1, + address: '0x6b1257641d18791141f025eab36fb567c4b564ff', + name: 'Bitcoin Dominance Token 31 March 2021', + symbol: 'BTCDOM-MAR2021', + decimals: 18, + }, + { + chainId: 1, + address: '0x4e83b6287588a96321b2661c5e041845ff7814af', + name: 'Altcoin Dominance Token 31 March 2021', + symbol: 'ALTDOM-MAR2021', + decimals: 18, + }, + { + chainId: 1, + address: '0x59fec83ec709c893aedd1a144cf1828eb04127cd', + name: 'pxGOLD Synthetic GOLD Expiring 31 May 2021', + symbol: 'pxGOLD_MAY2021', + decimals: 18, + }, + { + chainId: 1, + address: '0x89337BFb7938804c3776C9FB921EccAf5ab76758', + name: 'Compound Annualized Rate Future Expiring 28 March 2021', + symbol: 'CAR-USDC-MAR21', + decimals: 18, + }, + { + chainId: 1, + address: '0xec58d3aefc9aaa2e0036fa65f70d569f49d9d1ed', + name: 'uSTONKS Index Token April 2021', + symbol: 'uSTONKS_APR21', + decimals: 6, + }, + { + chainId: 1, + address: '0xa6B9d7E3d76cF23549293Fb22c488E0Ea591A44e', + name: 'uGAS-JUN21 Token Expiring 30 Jun 2021', + symbol: 'uGAS-JUN21', + decimals: 18, + }, + { + chainId: 1, + address: '0xe813b65da6c38a04591aed3f082d32db7d53c382', + name: 'Yield Dollar [WETH Dec 2021]', + symbol: 'YD-ETH-DEC21', + decimals: 18, + }, + { + chainId: 1, + address: '0x4b606e9eb2228c70f44453afe5a73e1fea258ce1', + name: 'pxUSD Synthetic USD Expiring 31 Mar 2022', + symbol: 'pxUSD_MAR2022', + decimals: 18, + }, + { + chainId: 1, + address: '0x5247c0db4044fb6f97f32c7e1b48758019a5a912', + name: 'pxGOLD Synthetic Gold Expiring 31 Mar 2022', + symbol: 'pxGOLD_MAR2022', + decimals: 18, + }, + { + chainId: 1, + address: '0x56fb1acaff95c0b6ebcd17c8361a63d98b1a5a11', + name: 'uForex CNYUSD Synthetic Token April 2021', + symbol: 'uCNYUSD-APR', + decimals: 6, + }, + { + chainId: 1, + address: '0xd49fa405dce086c65d66ca1ca41f8e98583812b4', + name: 'uForex EURUSD Synthetic Token April 2021', + symbol: 'uEURUSD-APR', + decimals: 6, + }, + { + chainId: 1, + address: '0x29dddacba3b231ee8d673dd0f0fa759ea145561b', + name: 'DEFI_PULSE_TOTAL_TVL Synthetic Token Expiring 15 April 2021', + symbol: 'TVL_ALL_APRIL15', + decimals: 6, + }, + { + chainId: 1, + address: '0xcbe430927370e95b4b10cfc702c6017ec7abefc3', + name: 'Yield Dollar [WETH Jun 2021]', + symbol: 'YD-ETH-JUN21', + decimals: 18, + }, + { + chainId: 1, + address: '0x4b7fb448df91c8ed973494f8c8c4f12daf3a8521', + name: 'Yield Dollar [renBTC Jun 2021]', + symbol: 'YD-BTC-JUN21', + decimals: 8, + }, + { + chainId: 1, + address: '0x3108c33b6fb38efedaefd8b5f7ca01d5f5c7372d', + name: 'Yield Dollar UMA 21', + symbol: 'yUMA21', + decimals: 18, + }, + { + chainId: 1, + address: '0x0cae9e4d663793c2a2A0b211c1Cf4bBca2B9cAa7', + name: 'Mirrored Amazon', + symbol: 'MAMZN', + decimals: 18, + }, + { + chainId: 1, + address: '0x31c63146a635EB7465e5853020b39713AC356991', + name: 'M US Oil', + symbol: 'MUSO', + decimals: 18, + }, + { + chainId: 1, + address: '0x59A921Db27Dd6d4d974745B7FfC5c33932653442', + name: 'M Google', + symbol: 'MGOOGL', + decimals: 18, + }, + { + chainId: 1, + address: '0xf72FCd9DCF0190923Fadd44811E240Ef4533fc86', + name: 'Mirrored ProShares', + symbol: 'MVIXY', + decimals: 18, + }, + { + chainId: 1, + address: '0x56aA298a19C93c6801FDde870fA63EF75Cc0aF72', + name: 'Mirrored Alibaba', + symbol: 'MBABA', + decimals: 18, + }, + { + chainId: 1, + address: '0x0e99cC0535BB6251F6679Fa6E65d6d3b430e840B', + name: 'Mirrored Facebook', + symbol: 'MFB', + decimals: 18, + }, + { + chainId: 1, + address: '0x13B02c8dE71680e71F0820c996E4bE43c2F57d15', + name: 'Mirrored Invesco QQ', + symbol: 'MQQQ', + decimals: 18, + }, + { + chainId: 1, + address: '0x41BbEDd7286dAab5910a1f15d12CBda839852BD7', + name: 'Mirrored Microsoft', + symbol: 'MMSFT', + decimals: 18, + }, + { + chainId: 1, + address: '0x9d1555d8cB3C846Bb4f7D5B1B1080872c3166676', + name: 'Mirrored iShares Si', + symbol: 'MSLV', + decimals: 18, + }, + { + chainId: 1, + address: '0x21cA39943E91d704678F5D00b6616650F066fD63', + name: 'Mirrored Tesla', + symbol: 'MTSLA', + decimals: 18, + }, + { + chainId: 1, + address: '0xe82bbB62fA81d0701643d1675FB50ec52fD3Df92', + name: 'DYDX Token', + symbol: 'DYDX', + decimals: 18, + }, + { + chainId: 10, + address: '0xE405de8F52ba7559f9df3C368500B6E6ae6Cee49', + name: 'sETH', + symbol: 'Synth Ether', + decimals: 18, + }, + { + chainId: 10, + address: '0x298B9B95708152ff6968aafd889c6586e9169f1D', + name: 'sBTC', + symbol: 'Synth Bitcoin', + decimals: 18, + }, + { + chainId: 10, + address: '0xc5Db22719A06418028A40A9B5E9A7c02959D0d08', + name: 'sLINK', + symbol: 'Synth Link', + decimals: 18, + }, + { + chainId: 1, + address: '0x6B60eE11b73230045cF9095E6e43AE9Ea638e172', + name: 'Shatner', + symbol: 'SHAT', + decimals: 18, + }, + { + chainId: 1, + address: '0x7277a44D1325D81Ac58893002a1B40a41bea43fe', + name: 'FAANG Index', + symbol: 'FAANG', + decimals: 18, + }, + { + chainId: 1, + address: '0x76175599887730786bdA1545D0D7AcE8737fEBB1', + name: 'ENS DAO', + symbol: 'ENS', + decimals: 18, + }, + { + chainId: 1, + address: '0xa82AA729AE2F0d78e961D66db53949e27a9E866d', + name: 'BMEX', + symbol: 'BMEX', + decimals: 18, + }, +] var UNSUPPORTED_TOKEN_LIST = { - name: name, - timestamp: timestamp, - version: version, - tags: tags, - logoURI: logoURI, - keywords: keywords, - tokens: tokens -}; - -function useAllLists() { - return useAppSelector(function (state) { return state.lists.byUrl; }); -} -/** - * Combine the tokens in map2 with the tokens on map1, where tokens on map1 take precedence - * @param map1 the base token map - * @param map2 the map of additioanl tokens to add to the base map - */ -function combineMaps(map1, map2) { - var chainIds = Object.keys(Object.keys(map1) - .concat(Object.keys(map2)) - .reduce(function (memo, value) { - memo[value] = true; - return memo; - }, {})).map(function (id) { return parseInt(id); }); - return chainIds.reduce(function (memo, chainId) { - memo[chainId] = __assign(__assign({}, map2[chainId]), map1[chainId]); - return memo; - }, {}); -} -// merge tokens contained within lists from urls -function useCombinedTokenMapFromUrls(urls) { - var lists = useAllLists(); - return React.useMemo(function () { - if (!urls) - return {}; - return (urls - .slice() - // sort by priority so top priority goes last - .sort(sortByListPriority) - .reduce(function (allTokens, currentUrl) { - var _a; - var current = (_a = lists[currentUrl]) === null || _a === void 0 ? void 0 : _a.current; - if (!current) - return allTokens; - try { - return combineMaps(allTokens, tokensToChainTokenMap(current)); - } - catch (error) { - console.error('Could not show token list due to error', error); - return allTokens; - } - }, {})); - }, [lists, urls]); -} -// filter out unsupported lists -function useActiveListUrls() { - var activeListUrls = useAppSelector(function (state) { return state.lists.activeListUrls; }); - return React.useMemo(function () { return activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.filter(function (url) { return !UNSUPPORTED_LIST_URLS.includes(url); }); }, [activeListUrls]); -} -function useInactiveListUrls() { - var lists = useAllLists(); - var allActiveListUrls = useActiveListUrls(); - return React.useMemo(function () { return Object.keys(lists).filter(function (url) { return !(allActiveListUrls === null || allActiveListUrls === void 0 ? void 0 : allActiveListUrls.includes(url)) && !UNSUPPORTED_LIST_URLS.includes(url); }); }, [lists, allActiveListUrls]); -} -// get all the tokens from active lists, combine with local default tokens -function useCombinedActiveList() { - var activeListUrls = useActiveListUrls(); - var activeTokens = useCombinedTokenMapFromUrls(activeListUrls); - return activeTokens; -} -// list of tokens not supported on interface for various reasons, used to show warnings and prevent swaps and adds -function useUnsupportedTokenList() { - // get hard-coded broken tokens - var brokenListMap = React.useMemo(function () { return tokensToChainTokenMap(BROKEN_LIST); }, []); - // get hard-coded list of unsupported tokens - var localUnsupportedListMap = React.useMemo(function () { return tokensToChainTokenMap(UNSUPPORTED_TOKEN_LIST); }, []); - // get dynamic list of unsupported tokens - var loadedUnsupportedListMap = useCombinedTokenMapFromUrls(UNSUPPORTED_LIST_URLS); - // format into one token address map - return React.useMemo(function () { return combineMaps(brokenListMap, combineMaps(localUnsupportedListMap, loadedUnsupportedListMap)); }, [brokenListMap, localUnsupportedListMap, loadedUnsupportedListMap]); -} -function useIsListActive(url) { - var activeListUrls = useActiveListUrls(); - return Boolean(activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(url)); -} - -// reduce token map into standard address <-> Token mapping, optionally include user added tokens -function useTokensFromMap(tokenMap, includeUserAdded) { - var chainId = useActiveWeb3React().chainId; - var userAddedTokens = useUserAddedTokens(); - return React.useMemo(function () { - var _a; - if (!chainId) - return {}; - // reduce to just tokens - var mapWithoutUrls = Object.keys((_a = tokenMap[chainId]) !== null && _a !== void 0 ? _a : {}).reduce(function (newMap, address) { - newMap[address] = tokenMap[chainId][address].token; - return newMap; - }, {}); - if (includeUserAdded) { - return (userAddedTokens - // reduce into all ALL_TOKENS filtered by the current chain - .reduce(function (tokenMap, token) { - tokenMap[token.address] = token; - return tokenMap; - }, __assign({}, mapWithoutUrls))); - } - return mapWithoutUrls; - }, [chainId, userAddedTokens, tokenMap, includeUserAdded]); -} -function useAllTokens() { - var allTokens = useCombinedActiveList(); - return useTokensFromMap(allTokens, true); -} -function useUnsupportedTokens() { - var chainId = useActiveWeb3React().chainId; - var listsByUrl = useAllLists(); - var unsupportedTokensMap = useUnsupportedTokenList(); - var unsupportedTokens = useTokensFromMap(unsupportedTokensMap, false); - // checks the default L2 lists to see if `bridgeInfo` has an L1 address value that is unsupported - var l2InferredBlockedTokens = React.useMemo(function () { - if (!chainId || !L2_CHAIN_IDS.includes(chainId)) { - return {}; - } - if (!listsByUrl) { - return {}; - } - var listUrl = CHAIN_INFO[chainId].defaultListUrl; - var list = listsByUrl[listUrl].current; - if (!list) { - return {}; - } - var unsupportedSet = new Set(Object.keys(unsupportedTokens)); - return list.tokens.reduce(function (acc, tokenInfo) { - var _a; - var _b; - var bridgeInfo = (_b = tokenInfo.extensions) === null || _b === void 0 ? void 0 : _b.bridgeInfo; - if (bridgeInfo && - bridgeInfo[SupportedChainId.MAINNET] && - bridgeInfo[SupportedChainId.MAINNET].tokenAddress && - unsupportedSet.has(bridgeInfo[SupportedChainId.MAINNET].tokenAddress)) { - var address = bridgeInfo[SupportedChainId.MAINNET].tokenAddress; - // don't rely on decimals--it's possible that a token could be bridged w/ different decimals on the L2 - return __assign(__assign({}, acc), (_a = {}, _a[address] = new sdkCore.Token(SupportedChainId.MAINNET, address, tokenInfo.decimals), _a)); - } - return acc; - }, {}); - }, [chainId, listsByUrl, unsupportedTokens]); - return __assign(__assign({}, unsupportedTokens), l2InferredBlockedTokens); -} -function useSearchInactiveTokenLists(search, minResults) { - if (minResults === void 0) { minResults = 10; } - var lists = useAllLists(); - var inactiveUrls = useInactiveListUrls(); - var chainId = useActiveWeb3React().chainId; - var activeTokens = useAllTokens(); - return React.useMemo(function () { - var e_1, _a, e_2, _b; - if (!search || search.trim().length === 0) - return []; - var tokenFilter = getTokenFilter(search); - var result = []; - var addressSet = {}; - try { - for (var inactiveUrls_1 = __values(inactiveUrls), inactiveUrls_1_1 = inactiveUrls_1.next(); !inactiveUrls_1_1.done; inactiveUrls_1_1 = inactiveUrls_1.next()) { - var url = inactiveUrls_1_1.value; - var list = lists[url].current; - if (!list) - continue; - try { - for (var _c = (e_2 = void 0, __values(list.tokens)), _d = _c.next(); !_d.done; _d = _c.next()) { - var tokenInfo = _d.value; - if (tokenInfo.chainId === chainId && tokenFilter(tokenInfo)) { - var wrapped = new WrappedTokenInfo(tokenInfo, list); - if (!(wrapped.address in activeTokens) && !addressSet[wrapped.address]) { - addressSet[wrapped.address] = true; - result.push(wrapped); - if (result.length >= minResults) - return result; - } - } - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (_d && !_d.done && (_b = _c.return)) _b.call(_c); - } - finally { if (e_2) throw e_2.error; } - } - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (inactiveUrls_1_1 && !inactiveUrls_1_1.done && (_a = inactiveUrls_1.return)) _a.call(inactiveUrls_1); - } - finally { if (e_1) throw e_1.error; } - } - return result; - }, [activeTokens, chainId, inactiveUrls, lists, minResults, search]); -} -function useIsTokenActive(token) { - var activeTokens = useAllTokens(); - if (!activeTokens || !token) { - return false; - } - return !!activeTokens[token.address]; -} -// Check if currency is included in custom list from user storage -function useIsUserAddedToken(currency) { - var userAddedTokens = useUserAddedTokens(); - if (!currency) { - return false; - } - return !!userAddedTokens.find(function (token) { return currency.equals(token); }); -} -// undefined if invalid or does not exist -// null if loading or null was passed -// otherwise returns the token -function useToken(tokenAddress) { - var tokens = useAllTokens(); - return useTokenFromMap(tokens, tokenAddress); -} -function useCurrency(currencyId) { - var tokens = useAllTokens(); - return useCurrencyFromMap(tokens, currencyId); -} - -var updateMatchesDarkMode = toolkit.createAction('user/updateMatchesDarkMode'); -var updateUserDarkMode = toolkit.createAction('user/updateUserDarkMode'); -var updateUserExpertMode = toolkit.createAction('user/updateUserExpertMode'); -var updateUserLocale = toolkit.createAction('user/updateUserLocale'); -var updateShowSurveyPopup = toolkit.createAction('user/updateShowSurveyPopup'); -var updateUserClientSideRouter = toolkit.createAction('user/updateUserClientSideRouter'); -var updateHideClosedPositions = toolkit.createAction('user/hideClosedPositions'); -var updateUserSlippageTolerance = toolkit.createAction('user/updateUserSlippageTolerance'); -var updateUserDeadline = toolkit.createAction('user/updateUserDeadline'); -var addSerializedToken = toolkit.createAction('user/addSerializedToken'); -var removeSerializedToken = toolkit.createAction('user/removeSerializedToken'); -var addSerializedPair = toolkit.createAction('user/addSerializedPair'); -var removeSerializedPair = toolkit.createAction('user/removeSerializedPair'); - -function serializeToken(token) { - return { - chainId: token.chainId, - address: token.address, - decimals: token.decimals, - symbol: token.symbol, - name: token.name, - }; -} -function deserializeToken(serializedToken) { - return new sdkCore.Token(serializedToken.chainId, serializedToken.address, serializedToken.decimals, serializedToken.symbol, serializedToken.name); -} -function useIsDarkMode() { - var _a = useAppSelector(function (_a) { - var _b = _a.user, matchesDarkMode = _b.matchesDarkMode, userDarkMode = _b.userDarkMode; - return ({ - userDarkMode: userDarkMode, - matchesDarkMode: matchesDarkMode, - }); - }, reactRedux.shallowEqual), userDarkMode = _a.userDarkMode, matchesDarkMode = _a.matchesDarkMode; - return userDarkMode === null ? matchesDarkMode : userDarkMode; -} -function useDarkModeManager() { - var dispatch = useAppDispatch(); - var darkMode = useIsDarkMode(); - var toggleSetDarkMode = React.useCallback(function () { - dispatch(updateUserDarkMode({ userDarkMode: !darkMode })); - }, [darkMode, dispatch]); - return [darkMode, toggleSetDarkMode]; -} -function useUserLocale() { - return useAppSelector(function (state) { return state.user.userLocale; }); -} -function useIsExpertMode() { - return useAppSelector(function (state) { return state.user.userExpertMode; }); -} -function useExpertModeManager() { - var dispatch = useAppDispatch(); - var expertMode = useIsExpertMode(); - var toggleSetExpertMode = React.useCallback(function () { - dispatch(updateUserExpertMode({ userExpertMode: !expertMode })); - }, [expertMode, dispatch]); - return [expertMode, toggleSetExpertMode]; -} -function useClientSideRouter() { - var dispatch = useAppDispatch(); - var clientSideRouter = useAppSelector(function (state) { return Boolean(state.user.userClientSideRouter); }); - var setClientSideRouter = React.useCallback(function (newClientSideRouter) { - dispatch(updateUserClientSideRouter({ userClientSideRouter: newClientSideRouter })); - }, [dispatch]); - return [clientSideRouter, setClientSideRouter]; -} -function useSetUserSlippageTolerance() { - var dispatch = useAppDispatch(); - return React.useCallback(function (userSlippageTolerance) { - var value; - try { - value = - userSlippageTolerance === 'auto' ? 'auto' : JSBI__default["default"].toNumber(userSlippageTolerance.multiply(10000).quotient); - } - catch (error) { - value = 'auto'; - } - dispatch(updateUserSlippageTolerance({ - userSlippageTolerance: value, - })); - }, [dispatch]); -} -/** - * Return the user's slippage tolerance, from the redux store, and a function to update the slippage tolerance - */ -function useUserSlippageTolerance() { - var userSlippageTolerance = useAppSelector(function (state) { - return state.user.userSlippageTolerance; - }); - return React.useMemo(function () { return (userSlippageTolerance === 'auto' ? 'auto' : new sdkCore.Percent(userSlippageTolerance, 10000)); }, [userSlippageTolerance]); -} -/** - * Same as above but replaces the auto with a default value - * @param defaultSlippageTolerance the default value to replace auto with - */ -function useUserSlippageToleranceWithDefault(defaultSlippageTolerance) { - var allowedSlippage = useUserSlippageTolerance(); - return React.useMemo(function () { return (allowedSlippage === 'auto' ? defaultSlippageTolerance : allowedSlippage); }, [allowedSlippage, defaultSlippageTolerance]); -} -function useUserTransactionTTL() { - var chainId = useActiveWeb3React().chainId; - var dispatch = useAppDispatch(); - var userDeadline = useAppSelector(function (state) { return state.user.userDeadline; }); - var onL2 = Boolean(chainId && L2_CHAIN_IDS.includes(chainId)); - var deadline = onL2 ? L2_DEADLINE_FROM_NOW : userDeadline; - var setUserDeadline = React.useCallback(function (userDeadline) { - dispatch(updateUserDeadline({ userDeadline: userDeadline })); - }, [dispatch]); - return [deadline, setUserDeadline]; -} -function useAddUserToken() { - var dispatch = useAppDispatch(); - return React.useCallback(function (token) { - dispatch(addSerializedToken({ serializedToken: serializeToken(token) })); - }, [dispatch]); -} -function useRemoveUserAddedToken() { - var dispatch = useAppDispatch(); - return React.useCallback(function (chainId, address) { - dispatch(removeSerializedToken({ chainId: chainId, address: address })); - }, [dispatch]); -} -function useUserAddedTokens() { - var chainId = useActiveWeb3React().chainId; - var serializedTokensMap = useAppSelector(function (_a) { - var tokens = _a.user.tokens; - return tokens; - }); - return React.useMemo(function () { - if (!chainId) - return []; - var tokenMap = (serializedTokensMap === null || serializedTokensMap === void 0 ? void 0 : serializedTokensMap[chainId]) - ? Object.values(serializedTokensMap[chainId]).map(deserializeToken) - : []; - return tokenMap; - }, [serializedTokensMap, chainId]); -} - -var EXPLORER_HOSTNAMES = { - 'etherscan.io': true, - 'ropsten.etherscan.io': true, - 'rinkeby.etherscan.io': true, - 'kovan.etherscan.io': true, - 'goerli.etherscan.io': true, - 'optimistic.etherscan.io': true, - 'kovan-optimistic.etherscan.io': true, - 'rinkeby-explorer.arbitrum.io': true, - 'arbiscan.io': true, -}; -/** - * Returns the anonymized version of the given href, i.e. one that does not leak user information - * @param href the link to anonymize, i.e. remove any personal data from - * @return string anonymized version of the given href - */ -function anonymizeLink(href) { - try { - var url = new URL(href); - if (EXPLORER_HOSTNAMES[url.hostname]) { - var pathPieces = url.pathname.split('/'); - var anonymizedPath = pathPieces.map(function (pc) { return (/0x[a-fA-F0-9]+/.test(pc) ? '***' : pc); }).join('/'); - return url.protocol + "//" + url.hostname + anonymizedPath; - } - return href; - } - catch (error) { - return href; - } -} - -var ButtonText = styled__default["default"].button(templateObject_1$W || (templateObject_1$W = __makeTemplateObject(["\n outline: none;\n border: none;\n font-size: inherit;\n padding: 0;\n margin: 0;\n background: none;\n cursor: pointer;\n\n :hover {\n opacity: 0.7;\n }\n\n :focus {\n text-decoration: underline;\n }\n"], ["\n outline: none;\n border: none;\n font-size: inherit;\n padding: 0;\n margin: 0;\n background: none;\n cursor: pointer;\n\n :hover {\n opacity: 0.7;\n }\n\n :focus {\n text-decoration: underline;\n }\n"]))); -var CloseIcon = styled__default["default"](reactFeather.X)(templateObject_2$D || (templateObject_2$D = __makeTemplateObject(["\n cursor: pointer;\n"], ["\n cursor: pointer;\n" - // for wrapper react feather icons -]))); -// for wrapper react feather icons -var IconWrapper = styled__default["default"].div(templateObject_3$w || (templateObject_3$w = __makeTemplateObject(["\n display: flex;\n align-items: center;\n justify-content: center;\n width: ", ";\n height: ", ";\n margin-right: ", ";\n margin-left: ", ";\n & > * {\n stroke: ", ";\n }\n"], ["\n display: flex;\n align-items: center;\n justify-content: center;\n width: ", ";\n height: ", ";\n margin-right: ", ";\n margin-left: ", ";\n & > * {\n stroke: ", ";\n }\n" - // A button that triggers some onClick result, but looks like a link. -])), function (_a) { - var size = _a.size; - return size !== null && size !== void 0 ? size : '20px'; -}, function (_a) { - var size = _a.size; - return size !== null && size !== void 0 ? size : '20px'; -}, function (_a) { - var marginRight = _a.marginRight; - return marginRight !== null && marginRight !== void 0 ? marginRight : 0; -}, function (_a) { - var marginLeft = _a.marginLeft; - return marginLeft !== null && marginLeft !== void 0 ? marginLeft : 0; -}, function (_a) { - var theme = _a.theme, stroke = _a.stroke; - return stroke !== null && stroke !== void 0 ? stroke : theme.blue1; -}); -// A button that triggers some onClick result, but looks like a link. -var LinkStyledButton = styled__default["default"].button(templateObject_4$m || (templateObject_4$m = __makeTemplateObject(["\n border: none;\n text-decoration: none;\n background: none;\n\n cursor: ", ";\n color: ", ";\n font-weight: 500;\n\n :hover {\n text-decoration: ", ";\n }\n\n :focus {\n outline: none;\n text-decoration: ", ";\n }\n\n :active {\n text-decoration: none;\n }\n"], ["\n border: none;\n text-decoration: none;\n background: none;\n\n cursor: ", ";\n color: ", ";\n font-weight: 500;\n\n :hover {\n text-decoration: ", ";\n }\n\n :focus {\n outline: none;\n text-decoration: ", ";\n }\n\n :active {\n text-decoration: none;\n }\n" - // An internal link from the react-router-dom library that is correctly styled -])), function (_a) { - var disabled = _a.disabled; - return (disabled ? 'default' : 'pointer'); -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return (disabled ? theme.text2 : theme.primary1); -}, function (_a) { - var disabled = _a.disabled; - return (disabled ? null : 'underline'); -}, function (_a) { - var disabled = _a.disabled; - return (disabled ? null : 'underline'); -}); -// An internal link from the react-router-dom library that is correctly styled -var StyledInternalLink = styled__default["default"](reactRouterDom.Link)(templateObject_5$j || (templateObject_5$j = __makeTemplateObject(["\n text-decoration: none;\n cursor: pointer;\n color: ", ";\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 text-decoration: none;\n cursor: pointer;\n color: ", ";\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"])), function (_a) { - var theme = _a.theme; - return theme.primary1; -}); -var StyledLink = styled__default["default"].a(templateObject_6$d || (templateObject_6$d = __makeTemplateObject(["\n text-decoration: none;\n cursor: pointer;\n color: ", ";\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 text-decoration: none;\n cursor: pointer;\n color: ", ";\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"])), function (_a) { - var theme = _a.theme; - return theme.primary1; -}); -var LinkIconWrapper = styled__default["default"].a(templateObject_7$c || (templateObject_7$c = __makeTemplateObject(["\n text-decoration: none;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n text-decoration: none;\n opacity: 0.7;\n }\n\n :focus {\n outline: none;\n text-decoration: none;\n }\n\n :active {\n text-decoration: none;\n }\n"], ["\n text-decoration: none;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n text-decoration: none;\n opacity: 0.7;\n }\n\n :focus {\n outline: none;\n text-decoration: none;\n }\n\n :active {\n text-decoration: none;\n }\n"]))); -var LinkIcon = styled__default["default"](reactFeather.ExternalLink)(templateObject_8$9 || (templateObject_8$9 = __makeTemplateObject(["\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ", ";\n"], ["\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.blue1; -}); -var TrashIcon = styled__default["default"](reactFeather.Trash)(templateObject_9$8 || (templateObject_9$8 = __makeTemplateObject(["\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ", ";\n\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n opacity: 0.7;\n }\n"], ["\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ", ";\n\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n opacity: 0.7;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.text3; -}); -var rotateImg = styled.keyframes(templateObject_10$6 || (templateObject_10$6 = __makeTemplateObject(["\n 0% {\n transform: perspective(1000px) rotateY(0deg);\n }\n\n 100% {\n transform: perspective(1000px) rotateY(360deg);\n }\n"], ["\n 0% {\n transform: perspective(1000px) rotateY(0deg);\n }\n\n 100% {\n transform: perspective(1000px) rotateY(360deg);\n }\n"]))); -styled__default["default"].img(templateObject_11$5 || (templateObject_11$5 = __makeTemplateObject(["\n animation: ", " 5s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n padding: 2rem 0 0 0;\n filter: drop-shadow(0px 2px 4px rgba(0, 0, 0, 0.15));\n"], ["\n animation: ", " 5s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n padding: 2rem 0 0 0;\n filter: drop-shadow(0px 2px 4px rgba(0, 0, 0, 0.15));\n"])), rotateImg); -function handleClickExternalLink(event) { - var _a = event.currentTarget, target = _a.target, href = _a.href; - var anonymizedHref = anonymizeLink(href); - // don't prevent default, don't redirect if it's a new tab - if (target === '_blank' || event.ctrlKey || event.metaKey) { - ReactGA__default["default"].outboundLink({ label: anonymizedHref }, function () { - console.debug('Fired outbound link event', anonymizedHref); - }); - } - else { - event.preventDefault(); - // send a ReactGA event and then trigger a location change - ReactGA__default["default"].outboundLink({ label: anonymizedHref }, function () { - window.location.href = anonymizedHref; - }); - } -} -/** - * Outbound link that handles firing google analytics events - */ -function ExternalLink(_a) { - var _b = _a.target, target = _b === void 0 ? '_blank' : _b, href = _a.href, _c = _a.rel, rel = _c === void 0 ? 'noopener noreferrer' : _c, rest = __rest(_a, ["target", "href", "rel"]); - return jsxRuntime.jsx(StyledLink, __assign({ target: target, rel: rel, href: href, onClick: handleClickExternalLink }, rest), void 0); -} -function ExternalLinkIcon(_a) { - var _b = _a.target, target = _b === void 0 ? '_blank' : _b, href = _a.href, _c = _a.rel, rel = _c === void 0 ? 'noopener noreferrer' : _c, rest = __rest(_a, ["target", "href", "rel"]); - return (jsxRuntime.jsx(LinkIconWrapper, __assign({ target: target, rel: rel, href: href, onClick: handleClickExternalLink }, rest, { children: jsxRuntime.jsx(LinkIcon, {}, void 0) }), void 0)); -} -var rotate$1 = styled.keyframes(templateObject_12$5 || (templateObject_12$5 = __makeTemplateObject(["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"], ["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"]))); -var Spinner$1 = styled__default["default"].img(templateObject_13$2 || (templateObject_13$2 = __makeTemplateObject(["\n animation: 2s ", " linear infinite;\n width: 16px;\n height: 16px;\n"], ["\n animation: 2s ", " linear infinite;\n width: 16px;\n height: 16px;\n"])), rotate$1); -styled__default["default"](StyledInternalLink)(templateObject_14$2 || (templateObject_14$2 = __makeTemplateObject(["\n color: ", ";\n"], ["\n color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.text1; -}); -var CustomLightSpinner = styled__default["default"](Spinner$1)(templateObject_15$1 || (templateObject_15$1 = __makeTemplateObject(["\n height: ", ";\n width: ", ";\n"], ["\n height: ", ";\n width: ", ";\n"])), function (_a) { - var size = _a.size; - return size; -}, function (_a) { - var size = _a.size; - return size; -}); -var HideSmall = styled__default["default"].span(templateObject_17 || (templateObject_17 = __makeTemplateObject(["\n ", ";\n"], ["\n ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToSmall(templateObject_16 || (templateObject_16 = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); -}); -styled__default["default"].span(templateObject_19 || (templateObject_19 = __makeTemplateObject(["\n ", ";\n"], ["\n ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToExtraSmall(templateObject_18 || (templateObject_18 = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); -}); -styled__default["default"].span(templateObject_21 || (templateObject_21 = __makeTemplateObject(["\n display: none;\n ", ";\n"], ["\n display: none;\n ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToSmall(templateObject_20 || (templateObject_20 = __makeTemplateObject(["\n display: block;\n "], ["\n display: block;\n "]))); -}); -var Separator$1 = styled__default["default"].div(templateObject_22 || (templateObject_22 = __makeTemplateObject(["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"], ["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}); -var templateObject_1$W, templateObject_2$D, templateObject_3$w, templateObject_4$m, templateObject_5$j, templateObject_6$d, templateObject_7$c, templateObject_8$9, templateObject_9$8, templateObject_10$6, templateObject_11$5, templateObject_12$5, templateObject_13$2, templateObject_14$2, templateObject_15$1, templateObject_16, templateObject_17, templateObject_18, templateObject_19, templateObject_20, templateObject_21, templateObject_22; - -var MEDIA_WIDTHS = { - upToExtraSmall: 500, - upToSmall: 720, - upToMedium: 960, - upToLarge: 1280, -}; -// Migrating to a standard z-index system https://getbootstrap.com/docs/5.0/layout/z-index/ -// Please avoid using deprecated numbers -var Z_INDEX; -(function (Z_INDEX) { - Z_INDEX[Z_INDEX["deprecated_zero"] = 0] = "deprecated_zero"; - Z_INDEX[Z_INDEX["deprecated_content"] = 1] = "deprecated_content"; - Z_INDEX[Z_INDEX["dropdown"] = 1000] = "dropdown"; - Z_INDEX[Z_INDEX["sticky"] = 1020] = "sticky"; - Z_INDEX[Z_INDEX["fixed"] = 1030] = "fixed"; - Z_INDEX[Z_INDEX["modalBackdrop"] = 1040] = "modalBackdrop"; - Z_INDEX[Z_INDEX["offcanvas"] = 1050] = "offcanvas"; - Z_INDEX[Z_INDEX["modal"] = 1060] = "modal"; - Z_INDEX[Z_INDEX["popover"] = 1070] = "popover"; - Z_INDEX[Z_INDEX["tooltip"] = 1080] = "tooltip"; -})(Z_INDEX || (Z_INDEX = {})); -Object.keys(MEDIA_WIDTHS).reduce(function (accumulator, size) { - accumulator[size] = function (a, b, c) { return styled.css(templateObject_1$V || (templateObject_1$V = __makeTemplateObject(["\n @media (max-width: ", "px) {\n ", "\n }\n "], ["\n @media (max-width: ", "px) {\n ", "\n }\n "])), MEDIA_WIDTHS[size], styled.css(a, b, c)); }; - return accumulator; -}, {}); -var TextWrapper$1 = styled__default["default"](rebass.Text)(templateObject_4$l || (templateObject_4$l = __makeTemplateObject(["\n color: ", ";\n"], ["\n color: ", ";\n" - /** - * Preset styles of the Rebass Text component - */ -])), function (_a) { - var color = _a.color, theme = _a.theme; - return theme[color]; -}); -/** - * Preset styles of the Rebass Text component - */ -var ThemedText = { - Main: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text2' }, props), void 0); - }, - Link: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'primary1' }, props), void 0); - }, - Label: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 600, color: 'text1' }, props), void 0); - }, - Black: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text1' }, props), void 0); - }, - White: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'white' }, props), void 0); - }, - Body: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 400, fontSize: 16, color: 'text1' }, props), void 0); - }, - LargeHeader: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 600, fontSize: 24 }, props), void 0); - }, - MediumHeader: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, fontSize: 20 }, props), void 0); - }, - SubHeader: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 400, fontSize: 14 }, props), void 0); - }, - Small: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, fontSize: 11 }, props), void 0); - }, - Blue: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'blue1' }, props), void 0); - }, - Yellow: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'yellow3' }, props), void 0); - }, - DarkGray: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text3' }, props), void 0); - }, - Gray: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'bg3' }, props), void 0); - }, - Italic: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, fontSize: 12, fontStyle: 'italic', color: 'text2' }, props), void 0); - }, - Error: function (_a) { - var error = _a.error, props = __rest(_a, ["error"]); - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: error ? 'red1' : 'text2' }, props), void 0); - }, -}; -styled.createGlobalStyle(templateObject_5$i || (templateObject_5$i = __makeTemplateObject(["\nhtml {\n color: ", ";\n background-color: ", " !important;\n}\n\na {\n color: ", "; \n}\n"], ["\nhtml {\n color: ", ";\n background-color: ", " !important;\n}\n\na {\n color: ", "; \n}\n"])), function (_a) { - var theme = _a.theme; - return theme.text1; -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var theme = _a.theme; - return theme.blue1; -}); -var templateObject_1$V, templateObject_4$l, templateObject_5$i; - -var Row = styled__default["default"](styledComponents.Box)(templateObject_1$U || (templateObject_1$U = __makeTemplateObject(["\n width: ", ";\n display: flex;\n padding: 0;\n align-items: ", ";\n justify-content: ", ";\n padding: ", ";\n border: ", ";\n border-radius: ", ";\n"], ["\n width: ", ";\n display: flex;\n padding: 0;\n align-items: ", ";\n justify-content: ", ";\n padding: ", ";\n border: ", ";\n border-radius: ", ";\n"])), function (_a) { - var width = _a.width; - return width !== null && width !== void 0 ? width : '100%'; -}, function (_a) { - var align = _a.align; - return align !== null && align !== void 0 ? align : 'center'; -}, function (_a) { - var justify = _a.justify; - return justify !== null && justify !== void 0 ? justify : 'flex-start'; -}, function (_a) { - var padding = _a.padding; - return padding; -}, function (_a) { - var border = _a.border; - return border; -}, function (_a) { - var borderRadius = _a.borderRadius; - return borderRadius; -}); -var RowBetween = styled__default["default"](Row)(templateObject_2$C || (templateObject_2$C = __makeTemplateObject(["\n justify-content: space-between;\n"], ["\n justify-content: space-between;\n"]))); -styled__default["default"].div(templateObject_3$v || (templateObject_3$v = __makeTemplateObject(["\n display: flex;\n align-items: flex-end;\n"], ["\n display: flex;\n align-items: flex-end;\n"]))); -var AutoRow = styled__default["default"](Row)(templateObject_4$k || (templateObject_4$k = __makeTemplateObject(["\n flex-wrap: wrap;\n margin: ", ";\n justify-content: ", ";\n\n & > * {\n margin: ", " !important;\n }\n"], ["\n flex-wrap: wrap;\n margin: ", ";\n justify-content: ", ";\n\n & > * {\n margin: ", " !important;\n }\n"])), function (_a) { - var gap = _a.gap; - return gap && "-" + gap; -}, function (_a) { - var justify = _a.justify; - return justify && justify; -}, function (_a) { - var gap = _a.gap; - return gap; -}); -var RowFixed = styled__default["default"](Row)(templateObject_5$h || (templateObject_5$h = __makeTemplateObject(["\n width: fit-content;\n margin: ", ";\n"], ["\n width: fit-content;\n margin: ", ";\n"])), function (_a) { - var gap = _a.gap; - return gap && "-" + gap; -}); -var templateObject_1$U, templateObject_2$C, templateObject_3$v, templateObject_4$k, templateObject_5$h; - -var _a$a, _b$2, _c$2, _d$1; -var L2Icon = styled__default["default"].img(templateObject_1$T || (templateObject_1$T = __makeTemplateObject(["\n width: 24px;\n height: 24px;\n margin-right: 16px;\n"], ["\n width: 24px;\n height: 24px;\n margin-right: 16px;\n"]))); -styled__default["default"].div(templateObject_2$B || (templateObject_2$B = __makeTemplateObject(["\n align-items: center;\n display: flex;\n justify-content: flex-start;\n padding: 0 20px 20px 20px;\n"], ["\n align-items: center;\n display: flex;\n justify-content: flex-start;\n padding: 0 20px 20px 20px;\n"]))); -var BodyText = styled__default["default"].div(templateObject_3$u || (templateObject_3$u = __makeTemplateObject(["\n color: ", ";\n display: flex;\n align-items: center;\n justify-content: flex-start;\n margin: 8px;\n font-size: 14px;\n"], ["\n color: ", ";\n display: flex;\n align-items: center;\n justify-content: flex-start;\n margin: 8px;\n font-size: 14px;\n"])), function (_a) { - var color = _a.color; - return color; -}); -var RootWrapper = styled__default["default"].div(templateObject_4$j || (templateObject_4$j = __makeTemplateObject(["\n position: relative;\n margin-top: 16px;\n"], ["\n position: relative;\n margin-top: 16px;\n"]))); -var SHOULD_SHOW_ALERT = (_a$a = {}, - _a$a[SupportedChainId.OPTIMISM] = true, - _a$a[SupportedChainId.OPTIMISTIC_KOVAN] = true, - _a$a[SupportedChainId.ARBITRUM_ONE] = true, - _a$a[SupportedChainId.ARBITRUM_RINKEBY] = true, - _a$a[SupportedChainId.POLYGON] = true, - _a$a[SupportedChainId.POLYGON_MUMBAI] = true, - _a$a); -var BG_COLORS_BY_DARK_MODE_AND_CHAIN_ID = { - dark: (_b$2 = {}, - _b$2[SupportedChainId.POLYGON] = 'radial-gradient(100% 93.36% at 0% 6.64%, rgba(160, 108, 247, 0.1) 0%, rgba(82, 32, 166, 0.1) 100%)', - _b$2[SupportedChainId.POLYGON_MUMBAI] = 'radial-gradient(100% 93.36% at 0% 6.64%, rgba(160, 108, 247, 0.1) 0%, rgba(82, 32, 166, 0.1) 100%)', - _b$2[SupportedChainId.OPTIMISM] = 'radial-gradient(948% 292% at 42% 0%, rgba(255, 58, 212, 0.01) 0%, rgba(255, 255, 255, 0.04) 100%),radial-gradient(98% 96% at 2% 0%, rgba(255, 39, 39, 0.01) 0%, rgba(235, 0, 255, 0.01) 96%)', - _b$2[SupportedChainId.OPTIMISTIC_KOVAN] = 'radial-gradient(948% 292% at 42% 0%, rgba(255, 58, 212, 0.04) 0%, rgba(255, 255, 255, 0.04) 100%),radial-gradient(98% 96% at 2% 0%, rgba(255, 39, 39, 0.04) 0%, rgba(235, 0, 255, 0.01 96%)', - _b$2[SupportedChainId.ARBITRUM_ONE] = 'radial-gradient(285% 8200% at 30% 50%, rgba(40, 160, 240, 0.01) 0%, rgba(219, 255, 0, 0) 100%),radial-gradient(75% 75% at 0% 0%, rgba(150, 190, 220, 0.05) 0%, rgba(33, 114, 229, 0.05) 100%), hsla(0, 0%, 100%, 0.05)', - _b$2[SupportedChainId.ARBITRUM_RINKEBY] = 'radial-gradient(285% 8200% at 30% 50%, rgba(40, 160, 240, 0.05) 0%, rgba(219, 255, 0, 0) 100%),radial-gradient(75% 75% at 0% 0%, rgba(150, 190, 220, 0.05) 0%, rgba(33, 114, 229, 0.1) 100%), hsla(0, 0%, 100%, 0.05)', - _b$2), - light: (_c$2 = {}, - _c$2[SupportedChainId.POLYGON] = 'radial-gradient(182.71% 205.59% at 2.81% 7.69%, rgba(130, 71, 229, 0.2) 0%, rgba(167, 202, 255, 0.2) 100%)', - _c$2[SupportedChainId.POLYGON_MUMBAI] = 'radial-gradient(182.71% 205.59% at 2.81% 7.69%, rgba(130, 71, 229, 0.2) 0%, rgba(167, 202, 255, 0.2) 100%)', - _c$2[SupportedChainId.OPTIMISM] = 'radial-gradient(92% 105% at 50% 7%, rgba(255, 58, 212, 0.04) 0%, rgba(255, 255, 255, 0.03) 100%),radial-gradient(100% 97% at 0% 12%, rgba(235, 0, 255, 0.1) 0%, rgba(243, 19, 19, 0.1) 100%), hsla(0, 0%, 100%, 0.1)', - _c$2[SupportedChainId.OPTIMISTIC_KOVAN] = 'radial-gradient(92% 105% at 50% 7%, rgba(255, 58, 212, 0.04) 0%, rgba(255, 255, 255, 0.03) 100%),radial-gradient(100% 97% at 0% 12%, rgba(235, 0, 255, 0.1) 0%, rgba(243, 19, 19, 0.1) 100%), hsla(0, 0%, 100%, 0.1)', - _c$2[SupportedChainId.ARBITRUM_ONE] = 'radial-gradient(285% 8200% at 30% 50%, rgba(40, 160, 240, 0.1) 0%, rgba(219, 255, 0, 0) 100%),radial-gradient(circle at top left, hsla(206, 50%, 75%, 0.01), hsla(215, 79%, 51%, 0.12)), hsla(0, 0%, 100%, 0.1)', - _c$2[SupportedChainId.ARBITRUM_RINKEBY] = 'radial-gradient(285% 8200% at 30% 50%, rgba(40, 160, 240, 0.1) 0%, rgba(219, 255, 0, 0) 100%),radial-gradient(circle at top left, hsla(206, 50%, 75%, 0.01), hsla(215, 79%, 51%, 0.12)), hsla(0, 0%, 100%, 0.1)', - _c$2), -}; -var ContentWrapper$1 = styled__default["default"].div(templateObject_5$g || (templateObject_5$g = __makeTemplateObject(["\n background: ", ";\n border-radius: 20px;\n display: flex;\n flex-direction: row;\n overflow: hidden;\n position: relative;\n width: 100%;\n\n :before {\n background-image: url(", ");\n background-repeat: no-repeat;\n background-size: 300px;\n content: '';\n height: 300px;\n opacity: 0.1;\n position: absolute;\n transform: rotate(25deg) translate(-90px, -40px);\n width: 300px;\n z-index: -1;\n }\n"], ["\n background: ", ";\n border-radius: 20px;\n display: flex;\n flex-direction: row;\n overflow: hidden;\n position: relative;\n width: 100%;\n\n :before {\n background-image: url(", ");\n background-repeat: no-repeat;\n background-size: 300px;\n content: '';\n height: 300px;\n opacity: 0.1;\n position: absolute;\n transform: rotate(25deg) translate(-90px, -40px);\n width: 300px;\n z-index: -1;\n }\n"])), function (_a) { - var chainId = _a.chainId, darkMode = _a.darkMode; - return BG_COLORS_BY_DARK_MODE_AND_CHAIN_ID[darkMode ? 'dark' : 'light'][chainId]; -}, function (_a) { - var logoUrl = _a.logoUrl; - return logoUrl; -}); -var Header$1 = styled__default["default"].h2(templateObject_6$c || (templateObject_6$c = __makeTemplateObject(["\n font-weight: 600;\n font-size: 16px;\n margin: 0;\n"], ["\n font-weight: 600;\n font-size: 16px;\n margin: 0;\n"]))); -var LinkOutToBridge = styled__default["default"](ExternalLink)(templateObject_7$b || (templateObject_7$b = __makeTemplateObject(["\n align-items: center;\n border-radius: 8px;\n color: white;\n display: flex;\n font-size: 16px;\n justify-content: space-between;\n padding: 6px 8px;\n margin-right: 12px;\n text-decoration: none !important;\n width: 100%;\n"], ["\n align-items: center;\n border-radius: 8px;\n color: white;\n display: flex;\n font-size: 16px;\n justify-content: space-between;\n padding: 6px 8px;\n margin-right: 12px;\n text-decoration: none !important;\n width: 100%;\n"]))); -var StyledArrowUpRight = styled__default["default"](reactFeather.ArrowUpRight)(templateObject_8$8 || (templateObject_8$8 = __makeTemplateObject(["\n margin-left: 12px;\n width: 24px;\n height: 24px;\n"], ["\n margin-left: 12px;\n width: 24px;\n height: 24px;\n"]))); -var TEXT_COLORS = (_d$1 = {}, - _d$1[SupportedChainId.POLYGON] = 'rgba(130, 71, 229)', - _d$1[SupportedChainId.POLYGON_MUMBAI] = 'rgba(130, 71, 229)', - _d$1[SupportedChainId.OPTIMISM] = '#ff3856', - _d$1[SupportedChainId.OPTIMISTIC_KOVAN] = '#ff3856', - _d$1[SupportedChainId.ARBITRUM_ONE] = '#0490ed', - _d$1[SupportedChainId.ARBITRUM_RINKEBY] = '#0490ed', - _d$1); -function shouldShowAlert(chainId) { - return Boolean(chainId && SHOULD_SHOW_ALERT[chainId]); -} -function NetworkAlert() { - var chainId = useActiveWeb3React().chainId; - var _a = __read(useDarkModeManager(), 1), darkMode = _a[0]; - if (!shouldShowAlert(chainId)) { - return null; - } - var _b = CHAIN_INFO[chainId], label = _b.label, logoUrl = _b.logoUrl, bridge = _b.bridge; - var textColor = TEXT_COLORS[chainId]; - return bridge ? (jsxRuntime.jsx(RootWrapper, { children: jsxRuntime.jsx(ContentWrapper$1, __assign({ chainId: chainId, darkMode: darkMode, logoUrl: logoUrl }, { children: jsxRuntime.jsxs(LinkOutToBridge, __assign({ href: bridge }, { children: [jsxRuntime.jsxs(BodyText, __assign({ color: textColor }, { children: [jsxRuntime.jsx(L2Icon, { src: logoUrl }, void 0), jsxRuntime.jsxs(AutoRow, { children: [jsxRuntime.jsx(Header$1, { children: jsxRuntime.jsxs(macro.Trans, { children: [label, " token bridge"] }, void 0) }, void 0), jsxRuntime.jsx(HideSmall, { children: jsxRuntime.jsxs(macro.Trans, { children: ["Deposit tokens to the ", label, " network."] }, void 0) }, void 0)] }, void 0)] }), void 0), jsxRuntime.jsx(StyledArrowUpRight, { color: textColor }, void 0)] }), void 0) }), void 0) }, void 0)) : null; -} -var templateObject_1$T, templateObject_2$B, templateObject_3$u, templateObject_4$j, templateObject_5$g, templateObject_6$c, templateObject_7$b, templateObject_8$8; - -/** - * @param open conditional to show content or hide - * @returns Wrapper to smoothly hide and expand content - */ -function AnimatedDropdown(_a) { - var open = _a.open, children = _a.children; - var _b = useResizeObserver__default["default"](), ref = _b.ref, height = _b.height; - var props = reactSpring.useSpring({ - height: open ? height !== null && height !== void 0 ? height : 0 : 0, - config: { - mass: 1.2, - tension: 300, - friction: 20, - clamp: true, - velocity: 0.01, - }, - }); - return (jsxRuntime.jsx(reactSpring.animated.div, __assign({ style: __assign(__assign({}, props), { overflow: 'hidden', width: '100%', willChange: 'height' }) }, { children: jsxRuntime.jsx("div", __assign({ ref: ref }, { children: children }), void 0) }), void 0)); -} - -var Card = styled__default["default"](styledComponents.Box)(templateObject_1$S || (templateObject_1$S = __makeTemplateObject(["\n width: ", ";\n padding: ", ";\n border-radius: ", ";\n border: ", ";\n"], ["\n width: ", ";\n padding: ", ";\n border-radius: ", ";\n border: ", ";\n"])), function (_a) { - var width = _a.width; - return width !== null && width !== void 0 ? width : '100%'; -}, function (_a) { - var padding = _a.padding; - return padding !== null && padding !== void 0 ? padding : '1rem'; -}, function (_a) { - var $borderRadius = _a.$borderRadius; - return $borderRadius !== null && $borderRadius !== void 0 ? $borderRadius : '16px'; -}, function (_a) { - var border = _a.border; - return border; -}); -var LightCard = styled__default["default"](Card)(templateObject_2$A || (templateObject_2$A = __makeTemplateObject(["\n border: 1px solid ", ";\n background-color: ", ";\n"], ["\n border: 1px solid ", ";\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}); -var LightGreyCard = styled__default["default"](Card)(templateObject_3$t || (templateObject_3$t = __makeTemplateObject(["\n background-color: ", ";\n"], ["\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}); -var GreyCard = styled__default["default"](Card)(templateObject_4$i || (templateObject_4$i = __makeTemplateObject(["\n background-color: ", ";\n"], ["\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg3; -}); -styled__default["default"](Card)(templateObject_5$f || (templateObject_5$f = __makeTemplateObject(["\n background-color: ", ";\n"], ["\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}); -styled__default["default"](Card)(templateObject_6$b || (templateObject_6$b = __makeTemplateObject(["\n background-color: ", ";\n"], ["\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg0; -}); -var OutlineCard = styled__default["default"](Card)(templateObject_7$a || (templateObject_7$a = __makeTemplateObject(["\n border: 1px solid ", ";\n"], ["\n border: 1px solid ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg3; -}); -styled__default["default"](Card)(templateObject_8$7 || (templateObject_8$7 = __makeTemplateObject(["\n background-color: rgba(243, 132, 30, 0.05);\n color: ", ";\n font-weight: 500;\n"], ["\n background-color: rgba(243, 132, 30, 0.05);\n color: ", ";\n font-weight: 500;\n"])), function (_a) { - var theme = _a.theme; - return theme.yellow3; -}); -styled__default["default"](Card)(templateObject_9$7 || (templateObject_9$7 = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n border-radius: 12px;\n"], ["\n background-color: ", ";\n color: ", ";\n border-radius: 12px;\n"])), function (_a) { - var theme = _a.theme; - return theme.primary5; -}, function (_a) { - var theme = _a.theme; - return theme.blue2; -}); -var templateObject_1$S, templateObject_2$A, templateObject_3$t, templateObject_4$i, templateObject_5$f, templateObject_6$b, templateObject_7$a, templateObject_8$7, templateObject_9$7; - -var Column = styled__default["default"].div(templateObject_1$R || (templateObject_1$R = __makeTemplateObject(["\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n"], ["\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n"]))); -var ColumnCenter = styled__default["default"](Column)(templateObject_2$z || (templateObject_2$z = __makeTemplateObject(["\n width: 100%;\n align-items: center;\n"], ["\n width: 100%;\n align-items: center;\n"]))); -var AutoColumn = styled__default["default"].div(templateObject_3$s || (templateObject_3$s = __makeTemplateObject(["\n display: grid;\n grid-auto-rows: auto;\n grid-row-gap: ", ";\n justify-items: ", ";\n"], ["\n display: grid;\n grid-auto-rows: auto;\n grid-row-gap: ", ";\n justify-items: ", ";\n"])), function (_a) { - var gap = _a.gap; - return (gap === 'sm' && '8px') || (gap === 'md' && '12px') || (gap === 'lg' && '24px') || gap; -}, function (_a) { - var justify = _a.justify; - return justify && justify; -}); -var templateObject_1$R, templateObject_2$z, templateObject_3$s; - -var loadingAnimation = styled.keyframes(templateObject_1$Q || (templateObject_1$Q = __makeTemplateObject(["\n 0% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0% 50%;\n }\n"], ["\n 0% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0% 50%;\n }\n"]))); -var LoadingRows = styled__default["default"].div(templateObject_2$y || (templateObject_2$y = __makeTemplateObject(["\n display: grid;\n\n & > div {\n animation: ", " 1.5s infinite;\n animation-fill-mode: both;\n background: linear-gradient(\n to left,\n ", " 25%,\n ", " 50%,\n ", " 75%\n );\n background-size: 400%;\n border-radius: 12px;\n height: 2.4em;\n will-change: background-position;\n }\n"], ["\n display: grid;\n\n & > div {\n animation: ", " 1.5s infinite;\n animation-fill-mode: both;\n background: linear-gradient(\n to left,\n ", " 25%,\n ", " 50%,\n ", " 75%\n );\n background-size: 400%;\n border-radius: 12px;\n height: 2.4em;\n will-change: background-position;\n }\n"])), loadingAnimation, function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var theme = _a.theme; - return theme.bg2; -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}); -var loadingOpacityMixin = styled.css(templateObject_3$r || (templateObject_3$r = __makeTemplateObject(["\n filter: ", ";\n opacity: ", ";\n transition: opacity 0.2s ease-in-out;\n"], ["\n filter: ", ";\n opacity: ", ";\n transition: opacity 0.2s ease-in-out;\n"])), function (_a) { - var $loading = _a.$loading; - return ($loading ? 'grayscale(1)' : 'none'); -}, function (_a) { - var $loading = _a.$loading; - return ($loading ? '0.4' : '1'); -}); -var LoadingOpacityContainer = styled__default["default"].div(templateObject_4$h || (templateObject_4$h = __makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), loadingOpacityMixin); -var templateObject_1$Q, templateObject_2$y, templateObject_3$r, templateObject_4$h; - -/** - * Invokes callback repeatedly over an interval defined by the delay - * @param callback - * @param delay if null, the callback will not be invoked - * @param leading if true, the callback will be invoked immediately (on the leading edge); otherwise, it will be invoked after delay - */ -function useInterval(callback, delay, leading) { - if (leading === void 0) { leading = true; } - var savedCallback = React.useRef(); - // Remember the latest callback. - React.useEffect(function () { - savedCallback.current = callback; - }, [callback]); - // Set up the interval. - React.useEffect(function () { - function tick() { - var current = savedCallback.current; - current && current(); - } - if (delay !== null) { - if (leading) - tick(); - var id_1 = setInterval(tick, delay); - return function () { return clearInterval(id_1); }; - } - return; - }, [delay, leading]); -} - -var PopoverContainer$1 = styled__default["default"].div(templateObject_1$P || (templateObject_1$P = __makeTemplateObject(["\n z-index: 9999;\n visibility: ", ";\n opacity: ", ";\n transition: visibility 150ms linear, opacity 150ms linear;\n color: ", ";\n"], ["\n z-index: 9999;\n visibility: ", ";\n opacity: ", ";\n transition: visibility 150ms linear, opacity 150ms linear;\n color: ", ";\n"])), function (props) { return (props.show ? 'visible' : 'hidden'); }, function (props) { return (props.show ? 1 : 0); }, function (_a) { - var theme = _a.theme; - return theme.text2; -}); -var ReferenceElement = styled__default["default"].div(templateObject_2$x || (templateObject_2$x = __makeTemplateObject(["\n display: inline-block;\n"], ["\n display: inline-block;\n"]))); -var Arrow = styled__default["default"].div(templateObject_3$q || (templateObject_3$q = __makeTemplateObject(["\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 ", ";\n transform: rotate(45deg);\n background: ", ";\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 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 ", ";\n transform: rotate(45deg);\n background: ", ";\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"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}, function (_a) { - var theme = _a.theme; - return theme.bg0; -}); -function Popover(_a) { - var _b, _c; - var content = _a.content, show = _a.show, children = _a.children, _d = _a.placement, placement = _d === void 0 ? 'auto' : _d; - var _e = __read(React.useState(null), 2), referenceElement = _e[0], setReferenceElement = _e[1]; - var _f = __read(React.useState(null), 2), popperElement = _f[0], setPopperElement = _f[1]; - var _g = __read(React.useState(null), 2), arrowElement = _g[0], setArrowElement = _g[1]; - var options = React.useMemo(function () { return ({ - placement: placement, - strategy: 'fixed', - modifiers: [ - { name: 'offset', options: { offset: [8, 8] } }, - { name: 'arrow', options: { element: arrowElement } }, - { name: 'preventOverflow', options: { padding: 8 } }, - ], - }); }, [arrowElement, placement]); - var _h = reactPopper.usePopper(referenceElement, popperElement, options), styles = _h.styles, update = _h.update, attributes = _h.attributes; - var updateCallback = React.useCallback(function () { - update && update(); - }, [update]); - useInterval(updateCallback, show ? 100 : null); - return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(ReferenceElement, __assign({ ref: setReferenceElement }, { children: children }), void 0), jsxRuntime.jsx(Portal__default["default"], { children: jsxRuntime.jsxs(PopoverContainer$1, __assign({ show: show, ref: setPopperElement, style: styles.popper }, attributes.popper, { children: [content, jsxRuntime.jsx(Arrow, __assign({ className: "arrow-" + ((_c = (_b = attributes.popper) === null || _b === void 0 ? void 0 : _b['data-popper-placement']) !== null && _c !== void 0 ? _c : ''), ref: setArrowElement, style: styles.arrow }, attributes.arrow), void 0)] }), void 0) }, void 0)] }, void 0)); -} -var templateObject_1$P, templateObject_2$x, templateObject_3$q; - -var TooltipContainer = styled__default["default"].div(templateObject_1$O || (templateObject_1$O = __makeTemplateObject(["\n max-width: 256px;\n padding: 0.6rem 1rem;\n font-weight: 400;\n word-break: break-word;\n\n background: ", ";\n border-radius: 12px;\n border: 1px solid ", ";\n box-shadow: 0 4px 8px 0 ", ";\n"], ["\n max-width: 256px;\n padding: 0.6rem 1rem;\n font-weight: 400;\n word-break: break-word;\n\n background: ", ";\n border-radius: 12px;\n border: 1px solid ", ";\n box-shadow: 0 4px 8px 0 ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg0; -}, function (_a) { - var theme = _a.theme; - return theme.bg2; -}, function (_a) { - var theme = _a.theme; - return polished.transparentize(0.9, theme.shadow1); -}); -function Tooltip(_a) { - var text = _a.text, rest = __rest(_a, ["text"]); - return jsxRuntime.jsx(Popover, __assign({ content: jsxRuntime.jsx(TooltipContainer, { children: text }, void 0) }, rest), void 0); -} -function TooltipContent(_a) { - var content = _a.content, _b = _a.wrap, wrap = _b === void 0 ? false : _b, rest = __rest(_a, ["content", "wrap"]); - return jsxRuntime.jsx(Popover, __assign({ content: wrap ? jsxRuntime.jsx(TooltipContainer, { children: content }, void 0) : content }, rest), void 0); -} -function MouseoverTooltip(_a) { - var children = _a.children, rest = __rest(_a, ["children"]); - var _b = __read(React.useState(false), 2), show = _b[0], setShow = _b[1]; - var open = React.useCallback(function () { return setShow(true); }, [setShow]); - var close = React.useCallback(function () { return setShow(false); }, [setShow]); - return (jsxRuntime.jsx(Tooltip, __assign({}, rest, { show: show }, { children: jsxRuntime.jsx("div", __assign({ onMouseEnter: open, onMouseLeave: close }, { children: children }), void 0) }), void 0)); -} -function MouseoverTooltipContent(_a) { - var content = _a.content, children = _a.children, _b = _a.onOpen, openCallback = _b === void 0 ? undefined : _b, disableHover = _a.disableHover, rest = __rest(_a, ["content", "children", "onOpen", "disableHover"]); - var _c = __read(React.useState(false), 2), show = _c[0], setShow = _c[1]; - var open = React.useCallback(function () { - setShow(true); - openCallback === null || openCallback === void 0 ? void 0 : openCallback(); - }, [openCallback]); - var close = React.useCallback(function () { return setShow(false); }, [setShow]); - return (jsxRuntime.jsx(TooltipContent, __assign({}, rest, { show: show, content: disableHover ? null : content }, { children: jsxRuntime.jsx("div", __assign({ style: { display: 'inline-block', lineHeight: 0, padding: '0.25rem' }, onMouseEnter: open, onMouseLeave: close }, { children: children }), void 0) }), void 0)); -} -var templateObject_1$O; - -var THIRTY_BIPS_FEE = new sdkCore.Percent(JSBI__default["default"].BigInt(30), JSBI__default["default"].BigInt(10000)); -var INPUT_FRACTION_AFTER_FEE = ONE_HUNDRED_PERCENT.subtract(THIRTY_BIPS_FEE); -// computes realized lp fee as a percent -function computeRealizedLPFeePercent(trade) { - var e_1, _a; - var percent; - // Since routes are either all v2 or all v3 right now, calculate separately - if (trade.swaps[0].route.pools instanceof v2Sdk.Pair) { - // for each hop in our trade, take away the x*y=k price impact from 0.3% fees - // e.g. for 3 tokens/2 hops: 1 - ((1 - .03) * (1-.03)) - percent = ONE_HUNDRED_PERCENT.subtract(trade.swaps.reduce(function (currentFee) { return currentFee.multiply(INPUT_FRACTION_AFTER_FEE); }, ONE_HUNDRED_PERCENT)); - } - else { - percent = ZERO_PERCENT; - try { - for (var _b = __values(trade.swaps), _c = _b.next(); !_c.done; _c = _b.next()) { - var swap = _c.value; - var _d = swap.inputAmount.divide(trade.inputAmount), numerator = _d.numerator, denominator = _d.denominator; - var overallPercent = new sdkCore.Percent(numerator, denominator); - var routeRealizedLPFeePercent = overallPercent.multiply(ONE_HUNDRED_PERCENT.subtract(swap.route.pools.reduce(function (currentFee, pool) { - var fee = pool instanceof v2Sdk.Pair - ? // not currently possible given protocol check above, but not fatal - v3Sdk.FeeAmount.MEDIUM - : pool.fee; - return currentFee.multiply(ONE_HUNDRED_PERCENT.subtract(new sdkCore.Fraction(fee, 1000000))); - }, ONE_HUNDRED_PERCENT))); - percent = percent.add(routeRealizedLPFeePercent); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_1) throw e_1.error; } - } - } - return new sdkCore.Percent(percent.numerator, percent.denominator); -} -var IMPACT_TIERS = [ - BLOCKED_PRICE_IMPACT_NON_EXPERT, - ALLOWED_PRICE_IMPACT_HIGH, - ALLOWED_PRICE_IMPACT_MEDIUM, - ALLOWED_PRICE_IMPACT_LOW, -]; -function warningSeverity(priceImpact) { - var e_2, _a; - if (!priceImpact) - return 4; - var impact = IMPACT_TIERS.length; - try { - for (var IMPACT_TIERS_1 = __values(IMPACT_TIERS), IMPACT_TIERS_1_1 = IMPACT_TIERS_1.next(); !IMPACT_TIERS_1_1.done; IMPACT_TIERS_1_1 = IMPACT_TIERS_1.next()) { - var impactLevel = IMPACT_TIERS_1_1.value; - if (impactLevel.lessThan(priceImpact)) - return impact; - impact--; - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (IMPACT_TIERS_1_1 && !IMPACT_TIERS_1_1.done && (_a = IMPACT_TIERS_1.return)) _a.call(IMPACT_TIERS_1); - } - finally { if (e_2) throw e_2.error; } - } - return 0; -} - -/** - * Parses a CurrencyAmount from the passed string. - * Returns the CurrencyAmount, or undefined if parsing fails. - */ -function tryParseCurrencyAmount(value, currency) { - if (!value || !currency) { - return undefined; - } - try { - var typedValueParsed = units.parseUnits(value, currency.decimals).toString(); - if (typedValueParsed !== '0') { - return sdkCore.CurrencyAmount.fromRawAmount(currency, JSBI__default["default"].BigInt(typedValueParsed)); - } - } - catch (error) { - // fails if the user specifies too many decimal places of precision (or maybe exceed max uint?) - console.debug("Failed to parse input amount: \"" + value + "\"", error); - } - return undefined; -} - -// returns whether tradeB is better than tradeA by at least a threshold percentage amount -// only used by v2 hooks -function isTradeBetter(tradeA, tradeB, minimumDelta) { - if (minimumDelta === void 0) { minimumDelta = ZERO_PERCENT; } - if (tradeA && !tradeB) - return false; - if (tradeB && !tradeA) - return true; - if (!tradeA || !tradeB) - return undefined; - if (tradeA.tradeType !== tradeB.tradeType || - !tradeA.inputAmount.currency.equals(tradeB.inputAmount.currency) || - !tradeA.outputAmount.currency.equals(tradeB.outputAmount.currency)) { - throw new Error('Comparing incomparable trades'); - } - if (minimumDelta.equalTo(ZERO_PERCENT)) { - return tradeA.executionPrice.lessThan(tradeB.executionPrice); - } - else { - return tradeA.executionPrice.asFraction - .multiply(minimumDelta.add(ONE_HUNDRED_PERCENT)) - .lessThan(tradeB.executionPrice); - } -} - -function useAllCurrencyCombinations(currencyA, currencyB) { - var chainId = currencyA === null || currencyA === void 0 ? void 0 : currencyA.chainId; - var _a = __read(chainId ? [currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped, currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped] : [undefined, undefined], 2), tokenA = _a[0], tokenB = _a[1]; - var bases = React.useMemo(function () { - var _a, _b, _c, _d, _e; - if (!chainId || chainId !== (tokenB === null || tokenB === void 0 ? void 0 : tokenB.chainId)) - return []; - var common = (_a = BASES_TO_CHECK_TRADES_AGAINST[chainId]) !== null && _a !== void 0 ? _a : []; - var additionalA = tokenA ? (_c = (_b = ADDITIONAL_BASES[chainId]) === null || _b === void 0 ? void 0 : _b[tokenA.address]) !== null && _c !== void 0 ? _c : [] : []; - var additionalB = tokenB ? (_e = (_d = ADDITIONAL_BASES[chainId]) === null || _d === void 0 ? void 0 : _d[tokenB.address]) !== null && _e !== void 0 ? _e : [] : []; - return __spreadArray(__spreadArray(__spreadArray([], __read(common), false), __read(additionalA), false), __read(additionalB), false); - }, [chainId, tokenA, tokenB]); - var basePairs = React.useMemo(function () { - return bases - .flatMap(function (base) { return bases.map(function (otherBase) { return [base, otherBase]; }); }) - // though redundant with the first filter below, that expression runs more often, so this is probably worthwhile - .filter(function (_a) { - var _b = __read(_a, 2), t0 = _b[0], t1 = _b[1]; - return !t0.equals(t1); - }); - }, [bases]); - return React.useMemo(function () { - return tokenA && tokenB - ? __spreadArray(__spreadArray(__spreadArray([ - // the direct pair - [tokenA, tokenB] - ], __read(bases.map(function (base) { return [tokenA, base]; })), false), __read(bases.map(function (base) { return [tokenB, base]; })), false), __read(basePairs), false).filter(function (_a) { - var _b = __read(_a, 2), t0 = _b[0], t1 = _b[1]; - return !t0.equals(t1); - }) - // filter out duplicate pairs - .filter(function (_a, i, otherPairs) { - var _b = __read(_a, 2), t0 = _b[0], t1 = _b[1]; - // find the first index in the array at which there are the same 2 tokens as the current - var firstIndexInOtherPairs = otherPairs.findIndex(function (_a) { - var _b = __read(_a, 2), t0Other = _b[0], t1Other = _b[1]; - return (t0.equals(t0Other) && t1.equals(t1Other)) || (t0.equals(t1Other) && t1.equals(t0Other)); - }); - // only accept the first occurrence of the same 2 tokens - return firstIndexInOtherPairs === i; - }) - // optionally filter out some pairs for tokens with custom bases defined - .filter(function (_a) { - var _b = __read(_a, 2), tokenA = _b[0], tokenB = _b[1]; - if (!chainId) - return true; - var customBases = CUSTOM_BASES[chainId]; - var customBasesA = customBases === null || customBases === void 0 ? void 0 : customBases[tokenA.address]; - var customBasesB = customBases === null || customBases === void 0 ? void 0 : customBases[tokenB.address]; - if (!customBasesA && !customBasesB) - return true; - if (customBasesA && !customBasesA.find(function (base) { return tokenB.equals(base); })) - return false; - if (customBasesB && !customBasesB.find(function (base) { return tokenA.equals(base); })) - return false; - return true; - }) - : []; - }, [tokenA, tokenB, bases, basePairs, chainId]); -} - -var PAIR_INTERFACE = new abi$6.Interface(abi$4); -var PairState; -(function (PairState) { - PairState[PairState["LOADING"] = 0] = "LOADING"; - PairState[PairState["NOT_EXISTS"] = 1] = "NOT_EXISTS"; - PairState[PairState["EXISTS"] = 2] = "EXISTS"; - PairState[PairState["INVALID"] = 3] = "INVALID"; -})(PairState || (PairState = {})); -function useV2Pairs(currencies) { - var tokens = React.useMemo(function () { return currencies.map(function (_a) { - var _b = __read(_a, 2), currencyA = _b[0], currencyB = _b[1]; - return [currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped, currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped]; - }); }, [currencies]); - var pairAddresses = React.useMemo(function () { - return tokens.map(function (_a) { - var _b = __read(_a, 2), tokenA = _b[0], tokenB = _b[1]; - return tokenA && - tokenB && - tokenA.chainId === tokenB.chainId && - !tokenA.equals(tokenB) && - V2_FACTORY_ADDRESSES[tokenA.chainId] - ? v2Sdk.computePairAddress({ factoryAddress: V2_FACTORY_ADDRESSES[tokenA.chainId], tokenA: tokenA, tokenB: tokenB }) - : undefined; - }); - }, [tokens]); - var results = useMultipleContractSingleData(pairAddresses, PAIR_INTERFACE, 'getReserves'); - return React.useMemo(function () { - return results.map(function (result, i) { - var reserves = result.result, loading = result.loading; - var tokenA = tokens[i][0]; - var tokenB = tokens[i][1]; - if (loading) - return [PairState.LOADING, null]; - if (!tokenA || !tokenB || tokenA.equals(tokenB)) - return [PairState.INVALID, null]; - if (!reserves) - return [PairState.NOT_EXISTS, null]; - var reserve0 = reserves.reserve0, reserve1 = reserves.reserve1; - var _a = __read(tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA], 2), token0 = _a[0], token1 = _a[1]; - return [ - PairState.EXISTS, - new v2Sdk.Pair(sdkCore.CurrencyAmount.fromRawAmount(token0, reserve0.toString()), sdkCore.CurrencyAmount.fromRawAmount(token1, reserve1.toString())), - ]; - }); - }, [results, tokens]); -} - -function useAllCommonPairs(currencyA, currencyB) { - var allCurrencyCombinations = useAllCurrencyCombinations(currencyA, currencyB); - var allPairs = useV2Pairs(allCurrencyCombinations); - return React.useMemo(function () { - return Object.values(allPairs - // filter out invalid pairs - .filter(function (result) { return Boolean(result[0] === PairState.EXISTS && result[1]); }) - .map(function (_a) { - var _b = __read(_a, 2), pair = _b[1]; - return pair; - })); - }, [allPairs]); -} -var MAX_HOPS = 3; -/** - * Returns the best v2 trade for a desired swap - * @param tradeType whether the swap is an exact in/out - * @param amountSpecified the exact amount to swap in/out - * @param otherCurrency the desired output/payment currency - */ -function useBestV2Trade(tradeType, amountSpecified, otherCurrency, _a) { - var _b = _a === void 0 ? {} : _a, _c = _b.maxHops, maxHops = _c === void 0 ? MAX_HOPS : _c; - var _d = __read(React.useMemo(function () { - return tradeType === sdkCore.TradeType.EXACT_INPUT - ? [amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, otherCurrency] - : [otherCurrency, amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency]; - }, [tradeType, amountSpecified, otherCurrency]), 2), currencyIn = _d[0], currencyOut = _d[1]; - var allowedPairs = useAllCommonPairs(currencyIn, currencyOut); - return React.useMemo(function () { - var _a, _b, _c, _d; - if (amountSpecified && currencyIn && currencyOut && allowedPairs.length > 0) { - if (maxHops === 1) { - var options = { maxHops: 1, maxNumResults: 1 }; - if (tradeType === sdkCore.TradeType.EXACT_INPUT) { - var amountIn = amountSpecified; - return (_a = v2Sdk.Trade.bestTradeExactIn(allowedPairs, amountIn, currencyOut, options)[0]) !== null && _a !== void 0 ? _a : null; - } - else { - var amountOut = amountSpecified; - return (_b = v2Sdk.Trade.bestTradeExactOut(allowedPairs, currencyIn, amountOut, options)[0]) !== null && _b !== void 0 ? _b : null; - } - } - // search through trades with varying hops, find best trade out of them - var bestTradeSoFar = null; - for (var i = 1; i <= maxHops; i++) { - var options = { maxHops: i, maxNumResults: 1 }; - var currentTrade = void 0; - if (tradeType === sdkCore.TradeType.EXACT_INPUT) { - var amountIn = amountSpecified; - currentTrade = (_c = v2Sdk.Trade.bestTradeExactIn(allowedPairs, amountIn, currencyOut, options)[0]) !== null && _c !== void 0 ? _c : null; - } - else { - var amountOut = amountSpecified; - currentTrade = (_d = v2Sdk.Trade.bestTradeExactOut(allowedPairs, currencyIn, amountOut, options)[0]) !== null && _d !== void 0 ? _d : null; - } - // if current trade is best yet, save it - if (isTradeBetter(bestTradeSoFar, currentTrade, BETTER_TRADE_LESS_HOPS_THRESHOLD)) { - bestTradeSoFar = currentTrade; - } - } - return bestTradeSoFar; - } - return null; - }, [tradeType, amountSpecified, currencyIn, currencyOut, allowedPairs, maxHops]); -} - -var TradeState; -(function (TradeState) { - TradeState[TradeState["LOADING"] = 0] = "LOADING"; - TradeState[TradeState["INVALID"] = 1] = "INVALID"; - TradeState[TradeState["NO_ROUTE_FOUND"] = 2] = "NO_ROUTE_FOUND"; - TradeState[TradeState["VALID"] = 3] = "VALID"; - TradeState[TradeState["SYNCING"] = 4] = "SYNCING"; -})(TradeState || (TradeState = {})); -var InterfaceTrade = /** @class */ (function (_super) { - __extends(InterfaceTrade, _super); - function InterfaceTrade(_a) { - var gasUseEstimateUSD = _a.gasUseEstimateUSD, routes = __rest(_a, ["gasUseEstimateUSD"]); - var _this = _super.call(this, routes) || this; - _this.gasUseEstimateUSD = gasUseEstimateUSD; - return _this; - } - return InterfaceTrade; -}(routerSdk.Trade)); + name, + timestamp, + version, + tags, + logoURI, + keywords, + tokens, +} + +function useAllLists() { + return useAppSelector(function (state) { + return state.lists.byUrl + }) +} +/** + * Combine the tokens in map2 with the tokens on map1, where tokens on map1 take precedence + * @param map1 the base token map + * @param map2 the map of additioanl tokens to add to the base map + */ +function combineMaps(map1, map2) { + var chainIds = Object.keys( + Object.keys(map1) + .concat(Object.keys(map2)) + .reduce(function (memo, value) { + memo[value] = true + return memo + }, {}) + ).map(function (id) { + return parseInt(id) + }) + return chainIds.reduce(function (memo, chainId) { + memo[chainId] = __assign(__assign({}, map2[chainId]), map1[chainId]) + return memo + }, {}) +} +// merge tokens contained within lists from urls +function useCombinedTokenMapFromUrls(urls) { + var lists = useAllLists() + return React.useMemo( + function () { + if (!urls) return {} + return ( + urls + .slice() + // sort by priority so top priority goes last + .sort(sortByListPriority) + .reduce(function (allTokens, currentUrl) { + var _a + var current = (_a = lists[currentUrl]) === null || _a === void 0 ? void 0 : _a.current + if (!current) return allTokens + try { + return combineMaps(allTokens, tokensToChainTokenMap(current)) + } catch (error) { + console.error('Could not show token list due to error', error) + return allTokens + } + }, {}) + ) + }, + [lists, urls] + ) +} +// filter out unsupported lists +function useActiveListUrls() { + var activeListUrls = useAppSelector(function (state) { + return state.lists.activeListUrls + }) + return React.useMemo( + function () { + return activeListUrls === null || activeListUrls === void 0 + ? void 0 + : activeListUrls.filter(function (url) { + return !UNSUPPORTED_LIST_URLS.includes(url) + }) + }, + [activeListUrls] + ) +} +function useInactiveListUrls() { + var lists = useAllLists() + var allActiveListUrls = useActiveListUrls() + return React.useMemo( + function () { + return Object.keys(lists).filter(function (url) { + return ( + !(allActiveListUrls === null || allActiveListUrls === void 0 ? void 0 : allActiveListUrls.includes(url)) && + !UNSUPPORTED_LIST_URLS.includes(url) + ) + }) + }, + [lists, allActiveListUrls] + ) +} +// get all the tokens from active lists, combine with local default tokens +function useCombinedActiveList() { + var activeListUrls = useActiveListUrls() + var activeTokens = useCombinedTokenMapFromUrls(activeListUrls) + return activeTokens +} +// list of tokens not supported on interface for various reasons, used to show warnings and prevent swaps and adds +function useUnsupportedTokenList() { + // get hard-coded broken tokens + var brokenListMap = React.useMemo(function () { + return tokensToChainTokenMap(BROKEN_LIST) + }, []) + // get hard-coded list of unsupported tokens + var localUnsupportedListMap = React.useMemo(function () { + return tokensToChainTokenMap(UNSUPPORTED_TOKEN_LIST) + }, []) + // get dynamic list of unsupported tokens + var loadedUnsupportedListMap = useCombinedTokenMapFromUrls(UNSUPPORTED_LIST_URLS) + // format into one token address map + return React.useMemo( + function () { + return combineMaps(brokenListMap, combineMaps(localUnsupportedListMap, loadedUnsupportedListMap)) + }, + [brokenListMap, localUnsupportedListMap, loadedUnsupportedListMap] + ) +} +function useIsListActive(url) { + var activeListUrls = useActiveListUrls() + return Boolean(activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(url)) +} + +// reduce token map into standard address <-> Token mapping, optionally include user added tokens +function useTokensFromMap(tokenMap, includeUserAdded) { + var chainId = useActiveWeb3React().chainId + var userAddedTokens = useUserAddedTokens() + return React.useMemo( + function () { + var _a + if (!chainId) return {} + // reduce to just tokens + var mapWithoutUrls = Object.keys((_a = tokenMap[chainId]) !== null && _a !== void 0 ? _a : {}).reduce(function ( + newMap, + address + ) { + newMap[address] = tokenMap[chainId][address].token + return newMap + }, + {}) + if (includeUserAdded) { + return ( + userAddedTokens + // reduce into all ALL_TOKENS filtered by the current chain + .reduce(function (tokenMap, token) { + tokenMap[token.address] = token + return tokenMap + }, __assign({}, mapWithoutUrls)) + ) + } + return mapWithoutUrls + }, + [chainId, userAddedTokens, tokenMap, includeUserAdded] + ) +} +function useAllTokens() { + var allTokens = useCombinedActiveList() + return useTokensFromMap(allTokens, true) +} +function useUnsupportedTokens() { + var chainId = useActiveWeb3React().chainId + var listsByUrl = useAllLists() + var unsupportedTokensMap = useUnsupportedTokenList() + var unsupportedTokens = useTokensFromMap(unsupportedTokensMap, false) + // checks the default L2 lists to see if `bridgeInfo` has an L1 address value that is unsupported + var l2InferredBlockedTokens = React.useMemo( + function () { + if (!chainId || !L2_CHAIN_IDS.includes(chainId)) { + return {} + } + if (!listsByUrl) { + return {} + } + var listUrl = CHAIN_INFO[chainId].defaultListUrl + var list = listsByUrl[listUrl].current + if (!list) { + return {} + } + var unsupportedSet = new Set(Object.keys(unsupportedTokens)) + return list.tokens.reduce(function (acc, tokenInfo) { + var _a + var _b + var bridgeInfo = (_b = tokenInfo.extensions) === null || _b === void 0 ? void 0 : _b.bridgeInfo + if ( + bridgeInfo && + bridgeInfo[SupportedChainId.MAINNET] && + bridgeInfo[SupportedChainId.MAINNET].tokenAddress && + unsupportedSet.has(bridgeInfo[SupportedChainId.MAINNET].tokenAddress) + ) { + var address = bridgeInfo[SupportedChainId.MAINNET].tokenAddress + // don't rely on decimals--it's possible that a token could be bridged w/ different decimals on the L2 + return __assign( + __assign({}, acc), + ((_a = {}), (_a[address] = new sdkCore.Token(SupportedChainId.MAINNET, address, tokenInfo.decimals)), _a) + ) + } + return acc + }, {}) + }, + [chainId, listsByUrl, unsupportedTokens] + ) + return __assign(__assign({}, unsupportedTokens), l2InferredBlockedTokens) +} +function useSearchInactiveTokenLists(search, minResults) { + if (minResults === void 0) { + minResults = 10 + } + var lists = useAllLists() + var inactiveUrls = useInactiveListUrls() + var chainId = useActiveWeb3React().chainId + var activeTokens = useAllTokens() + return React.useMemo( + function () { + var e_1, _a, e_2, _b + if (!search || search.trim().length === 0) return [] + var tokenFilter = getTokenFilter(search) + var result = [] + var addressSet = {} + try { + for ( + var inactiveUrls_1 = __values(inactiveUrls), inactiveUrls_1_1 = inactiveUrls_1.next(); + !inactiveUrls_1_1.done; + inactiveUrls_1_1 = inactiveUrls_1.next() + ) { + var url = inactiveUrls_1_1.value + var list = lists[url].current + if (!list) continue + try { + for (var _c = ((e_2 = void 0), __values(list.tokens)), _d = _c.next(); !_d.done; _d = _c.next()) { + var tokenInfo = _d.value + if (tokenInfo.chainId === chainId && tokenFilter(tokenInfo)) { + var wrapped = new WrappedTokenInfo(tokenInfo, list) + if (!(wrapped.address in activeTokens) && !addressSet[wrapped.address]) { + addressSet[wrapped.address] = true + result.push(wrapped) + if (result.length >= minResults) return result + } + } + } + } catch (e_2_1) { + e_2 = { error: e_2_1 } + } finally { + try { + if (_d && !_d.done && (_b = _c.return)) _b.call(_c) + } finally { + if (e_2) throw e_2.error + } + } + } + } catch (e_1_1) { + e_1 = { error: e_1_1 } + } finally { + try { + if (inactiveUrls_1_1 && !inactiveUrls_1_1.done && (_a = inactiveUrls_1.return)) _a.call(inactiveUrls_1) + } finally { + if (e_1) throw e_1.error + } + } + return result + }, + [activeTokens, chainId, inactiveUrls, lists, minResults, search] + ) +} +function useIsTokenActive(token) { + var activeTokens = useAllTokens() + if (!activeTokens || !token) { + return false + } + return !!activeTokens[token.address] +} +// Check if currency is included in custom list from user storage +function useIsUserAddedToken(currency) { + var userAddedTokens = useUserAddedTokens() + if (!currency) { + return false + } + return !!userAddedTokens.find(function (token) { + return currency.equals(token) + }) +} +// undefined if invalid or does not exist +// null if loading or null was passed +// otherwise returns the token +function useToken(tokenAddress) { + var tokens = useAllTokens() + return useTokenFromMap(tokens, tokenAddress) +} +function useCurrency(currencyId) { + var tokens = useAllTokens() + return useCurrencyFromMap(tokens, currencyId) +} + +var updateMatchesDarkMode = toolkit.createAction('user/updateMatchesDarkMode') +var updateUserDarkMode = toolkit.createAction('user/updateUserDarkMode') +var updateUserExpertMode = toolkit.createAction('user/updateUserExpertMode') +var updateUserLocale = toolkit.createAction('user/updateUserLocale') +var updateShowSurveyPopup = toolkit.createAction('user/updateShowSurveyPopup') +var updateUserClientSideRouter = toolkit.createAction('user/updateUserClientSideRouter') +var updateHideClosedPositions = toolkit.createAction('user/hideClosedPositions') +var updateUserSlippageTolerance = toolkit.createAction('user/updateUserSlippageTolerance') +var updateUserDeadline = toolkit.createAction('user/updateUserDeadline') +var addSerializedToken = toolkit.createAction('user/addSerializedToken') +var removeSerializedToken = toolkit.createAction('user/removeSerializedToken') +var addSerializedPair = toolkit.createAction('user/addSerializedPair') +var removeSerializedPair = toolkit.createAction('user/removeSerializedPair') + +function serializeToken(token) { + return { + chainId: token.chainId, + address: token.address, + decimals: token.decimals, + symbol: token.symbol, + name: token.name, + } +} +function deserializeToken(serializedToken) { + return new sdkCore.Token( + serializedToken.chainId, + serializedToken.address, + serializedToken.decimals, + serializedToken.symbol, + serializedToken.name + ) +} +function useIsDarkMode() { + var _a = useAppSelector(function (_a) { + var _b = _a.user, + matchesDarkMode = _b.matchesDarkMode, + userDarkMode = _b.userDarkMode + return { + userDarkMode, + matchesDarkMode, + } + }, reactRedux.shallowEqual), + userDarkMode = _a.userDarkMode, + matchesDarkMode = _a.matchesDarkMode + return userDarkMode === null ? matchesDarkMode : userDarkMode +} +function useDarkModeManager() { + var dispatch = useAppDispatch() + var darkMode = useIsDarkMode() + var toggleSetDarkMode = React.useCallback( + function () { + dispatch(updateUserDarkMode({ userDarkMode: !darkMode })) + }, + [darkMode, dispatch] + ) + return [darkMode, toggleSetDarkMode] +} +function useUserLocale() { + return useAppSelector(function (state) { + return state.user.userLocale + }) +} +function useIsExpertMode() { + return useAppSelector(function (state) { + return state.user.userExpertMode + }) +} +function useExpertModeManager() { + var dispatch = useAppDispatch() + var expertMode = useIsExpertMode() + var toggleSetExpertMode = React.useCallback( + function () { + dispatch(updateUserExpertMode({ userExpertMode: !expertMode })) + }, + [expertMode, dispatch] + ) + return [expertMode, toggleSetExpertMode] +} +function useClientSideRouter() { + var dispatch = useAppDispatch() + var clientSideRouter = useAppSelector(function (state) { + return Boolean(state.user.userClientSideRouter) + }) + var setClientSideRouter = React.useCallback( + function (newClientSideRouter) { + dispatch(updateUserClientSideRouter({ userClientSideRouter: newClientSideRouter })) + }, + [dispatch] + ) + return [clientSideRouter, setClientSideRouter] +} +function useSetUserSlippageTolerance() { + var dispatch = useAppDispatch() + return React.useCallback( + function (userSlippageTolerance) { + var value + try { + value = + userSlippageTolerance === 'auto' + ? 'auto' + : JSBI__default['default'].toNumber(userSlippageTolerance.multiply(10000).quotient) + } catch (error) { + value = 'auto' + } + dispatch( + updateUserSlippageTolerance({ + userSlippageTolerance: value, + }) + ) + }, + [dispatch] + ) +} +/** + * Return the user's slippage tolerance, from the redux store, and a function to update the slippage tolerance + */ +function useUserSlippageTolerance() { + var userSlippageTolerance = useAppSelector(function (state) { + return state.user.userSlippageTolerance + }) + return React.useMemo( + function () { + return userSlippageTolerance === 'auto' ? 'auto' : new sdkCore.Percent(userSlippageTolerance, 10000) + }, + [userSlippageTolerance] + ) +} +/** + * Same as above but replaces the auto with a default value + * @param defaultSlippageTolerance the default value to replace auto with + */ +function useUserSlippageToleranceWithDefault(defaultSlippageTolerance) { + var allowedSlippage = useUserSlippageTolerance() + return React.useMemo( + function () { + return allowedSlippage === 'auto' ? defaultSlippageTolerance : allowedSlippage + }, + [allowedSlippage, defaultSlippageTolerance] + ) +} +function useUserTransactionTTL() { + var chainId = useActiveWeb3React().chainId + var dispatch = useAppDispatch() + var userDeadline = useAppSelector(function (state) { + return state.user.userDeadline + }) + var onL2 = Boolean(chainId && L2_CHAIN_IDS.includes(chainId)) + var deadline = onL2 ? L2_DEADLINE_FROM_NOW : userDeadline + var setUserDeadline = React.useCallback( + function (userDeadline) { + dispatch(updateUserDeadline({ userDeadline })) + }, + [dispatch] + ) + return [deadline, setUserDeadline] +} +function useAddUserToken() { + var dispatch = useAppDispatch() + return React.useCallback( + function (token) { + dispatch(addSerializedToken({ serializedToken: serializeToken(token) })) + }, + [dispatch] + ) +} +function useRemoveUserAddedToken() { + var dispatch = useAppDispatch() + return React.useCallback( + function (chainId, address) { + dispatch(removeSerializedToken({ chainId, address })) + }, + [dispatch] + ) +} +function useUserAddedTokens() { + var chainId = useActiveWeb3React().chainId + var serializedTokensMap = useAppSelector(function (_a) { + var tokens = _a.user.tokens + return tokens + }) + return React.useMemo( + function () { + if (!chainId) return [] + var tokenMap = ( + serializedTokensMap === null || serializedTokensMap === void 0 ? void 0 : serializedTokensMap[chainId] + ) + ? Object.values(serializedTokensMap[chainId]).map(deserializeToken) + : [] + return tokenMap + }, + [serializedTokensMap, chainId] + ) +} + +var EXPLORER_HOSTNAMES = { + 'etherscan.io': true, + 'ropsten.etherscan.io': true, + 'rinkeby.etherscan.io': true, + 'kovan.etherscan.io': true, + 'goerli.etherscan.io': true, + 'optimistic.etherscan.io': true, + 'kovan-optimistic.etherscan.io': true, + 'rinkeby-explorer.arbitrum.io': true, + 'arbiscan.io': true, +} +/** + * Returns the anonymized version of the given href, i.e. one that does not leak user information + * @param href the link to anonymize, i.e. remove any personal data from + * @return string anonymized version of the given href + */ +function anonymizeLink(href) { + try { + var url = new URL(href) + if (EXPLORER_HOSTNAMES[url.hostname]) { + var pathPieces = url.pathname.split('/') + var anonymizedPath = pathPieces + .map(function (pc) { + return /0x[a-fA-F0-9]+/.test(pc) ? '***' : pc + }) + .join('/') + return url.protocol + '//' + url.hostname + anonymizedPath + } + return href + } catch (error) { + return href + } +} + +var ButtonText = styled__default['default'].button( + templateObject_1$W || + (templateObject_1$W = __makeTemplateObject( + [ + '\n outline: none;\n border: none;\n font-size: inherit;\n padding: 0;\n margin: 0;\n background: none;\n cursor: pointer;\n\n :hover {\n opacity: 0.7;\n }\n\n :focus {\n text-decoration: underline;\n }\n', + ], + [ + '\n outline: none;\n border: none;\n font-size: inherit;\n padding: 0;\n margin: 0;\n background: none;\n cursor: pointer;\n\n :hover {\n opacity: 0.7;\n }\n\n :focus {\n text-decoration: underline;\n }\n', + ] + )) +) +var CloseIcon = styled__default['default'](reactFeather.X)( + templateObject_2$D || + (templateObject_2$D = __makeTemplateObject( + ['\n cursor: pointer;\n'], + [ + '\n cursor: pointer;\n', + // for wrapper react feather icons + ] + )) +) +// for wrapper react feather icons +var IconWrapper = styled__default['default'].div( + templateObject_3$w || + (templateObject_3$w = __makeTemplateObject( + [ + '\n display: flex;\n align-items: center;\n justify-content: center;\n width: ', + ';\n height: ', + ';\n margin-right: ', + ';\n margin-left: ', + ';\n & > * {\n stroke: ', + ';\n }\n', + ], + [ + '\n display: flex;\n align-items: center;\n justify-content: center;\n width: ', + ';\n height: ', + ';\n margin-right: ', + ';\n margin-left: ', + ';\n & > * {\n stroke: ', + ';\n }\n', + // A button that triggers some onClick result, but looks like a link. + ] + )), + function (_a) { + var size = _a.size + return size !== null && size !== void 0 ? size : '20px' + }, + function (_a) { + var size = _a.size + return size !== null && size !== void 0 ? size : '20px' + }, + function (_a) { + var marginRight = _a.marginRight + return marginRight !== null && marginRight !== void 0 ? marginRight : 0 + }, + function (_a) { + var marginLeft = _a.marginLeft + return marginLeft !== null && marginLeft !== void 0 ? marginLeft : 0 + }, + function (_a) { + var theme = _a.theme, + stroke = _a.stroke + return stroke !== null && stroke !== void 0 ? stroke : theme.blue1 + } +) +// A button that triggers some onClick result, but looks like a link. +var LinkStyledButton = styled__default['default'].button( + templateObject_4$m || + (templateObject_4$m = __makeTemplateObject( + [ + '\n border: none;\n text-decoration: none;\n background: none;\n\n cursor: ', + ';\n color: ', + ';\n font-weight: 500;\n\n :hover {\n text-decoration: ', + ';\n }\n\n :focus {\n outline: none;\n text-decoration: ', + ';\n }\n\n :active {\n text-decoration: none;\n }\n', + ], + [ + '\n border: none;\n text-decoration: none;\n background: none;\n\n cursor: ', + ';\n color: ', + ';\n font-weight: 500;\n\n :hover {\n text-decoration: ', + ';\n }\n\n :focus {\n outline: none;\n text-decoration: ', + ';\n }\n\n :active {\n text-decoration: none;\n }\n', + // An internal link from the react-router-dom library that is correctly styled + ] + )), + function (_a) { + var disabled = _a.disabled + return disabled ? 'default' : 'pointer' + }, + function (_a) { + var theme = _a.theme, + disabled = _a.disabled + return disabled ? theme.text2 : theme.primary1 + }, + function (_a) { + var disabled = _a.disabled + return disabled ? null : 'underline' + }, + function (_a) { + var disabled = _a.disabled + return disabled ? null : 'underline' + } +) +// An internal link from the react-router-dom library that is correctly styled +var StyledInternalLink = styled__default['default'](reactRouterDom.Link)( + templateObject_5$j || + (templateObject_5$j = __makeTemplateObject( + [ + '\n text-decoration: none;\n cursor: pointer;\n color: ', + ';\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 text-decoration: none;\n cursor: pointer;\n color: ', + ';\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', + ] + )), + function (_a) { + var theme = _a.theme + return theme.primary1 + } +) +var StyledLink = styled__default['default'].a( + templateObject_6$d || + (templateObject_6$d = __makeTemplateObject( + [ + '\n text-decoration: none;\n cursor: pointer;\n color: ', + ';\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 text-decoration: none;\n cursor: pointer;\n color: ', + ';\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', + ] + )), + function (_a) { + var theme = _a.theme + return theme.primary1 + } +) +var LinkIconWrapper = styled__default['default'].a( + templateObject_7$c || + (templateObject_7$c = __makeTemplateObject( + [ + '\n text-decoration: none;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n text-decoration: none;\n opacity: 0.7;\n }\n\n :focus {\n outline: none;\n text-decoration: none;\n }\n\n :active {\n text-decoration: none;\n }\n', + ], + [ + '\n text-decoration: none;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n text-decoration: none;\n opacity: 0.7;\n }\n\n :focus {\n outline: none;\n text-decoration: none;\n }\n\n :active {\n text-decoration: none;\n }\n', + ] + )) +) +var LinkIcon = styled__default['default'](reactFeather.ExternalLink)( + templateObject_8$9 || + (templateObject_8$9 = __makeTemplateObject( + ['\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ', ';\n'], + ['\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ', ';\n'] + )), + function (_a) { + var theme = _a.theme + return theme.blue1 + } +) +var TrashIcon = styled__default['default'](reactFeather.Trash)( + templateObject_9$8 || + (templateObject_9$8 = __makeTemplateObject( + [ + '\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ', + ';\n\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n opacity: 0.7;\n }\n', + ], + [ + '\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ', + ';\n\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n opacity: 0.7;\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.text3 + } +) +var rotateImg = styled.keyframes( + templateObject_10$6 || + (templateObject_10$6 = __makeTemplateObject( + [ + '\n 0% {\n transform: perspective(1000px) rotateY(0deg);\n }\n\n 100% {\n transform: perspective(1000px) rotateY(360deg);\n }\n', + ], + [ + '\n 0% {\n transform: perspective(1000px) rotateY(0deg);\n }\n\n 100% {\n transform: perspective(1000px) rotateY(360deg);\n }\n', + ] + )) +) +styled__default['default'].img( + templateObject_11$5 || + (templateObject_11$5 = __makeTemplateObject( + [ + '\n animation: ', + ' 5s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n padding: 2rem 0 0 0;\n filter: drop-shadow(0px 2px 4px rgba(0, 0, 0, 0.15));\n', + ], + [ + '\n animation: ', + ' 5s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n padding: 2rem 0 0 0;\n filter: drop-shadow(0px 2px 4px rgba(0, 0, 0, 0.15));\n', + ] + )), + rotateImg +) +function handleClickExternalLink(event) { + var _a = event.currentTarget, + target = _a.target, + href = _a.href + var anonymizedHref = anonymizeLink(href) + // don't prevent default, don't redirect if it's a new tab + if (target === '_blank' || event.ctrlKey || event.metaKey) { + ReactGA__default['default'].outboundLink({ label: anonymizedHref }, function () { + console.debug('Fired outbound link event', anonymizedHref) + }) + } else { + event.preventDefault() + // send a ReactGA event and then trigger a location change + ReactGA__default['default'].outboundLink({ label: anonymizedHref }, function () { + window.location.href = anonymizedHref + }) + } +} +/** + * Outbound link that handles firing google analytics events + */ +function ExternalLink(_a) { + var _b = _a.target, + target = _b === void 0 ? '_blank' : _b, + href = _a.href, + _c = _a.rel, + rel = _c === void 0 ? 'noopener noreferrer' : _c, + rest = __rest(_a, ['target', 'href', 'rel']) + return jsxRuntime.jsx(StyledLink, __assign({ target, rel, href, onClick: handleClickExternalLink }, rest), void 0) +} +function ExternalLinkIcon(_a) { + var _b = _a.target, + target = _b === void 0 ? '_blank' : _b, + href = _a.href, + _c = _a.rel, + rel = _c === void 0 ? 'noopener noreferrer' : _c, + rest = __rest(_a, ['target', 'href', 'rel']) + return jsxRuntime.jsx( + LinkIconWrapper, + __assign({ target, rel, href, onClick: handleClickExternalLink }, rest, { + children: jsxRuntime.jsx(LinkIcon, {}, void 0), + }), + void 0 + ) +} +var rotate$1 = styled.keyframes( + templateObject_12$5 || + (templateObject_12$5 = __makeTemplateObject( + ['\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n'], + ['\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n'] + )) +) +var Spinner$1 = styled__default['default'].img( + templateObject_13$2 || + (templateObject_13$2 = __makeTemplateObject( + ['\n animation: 2s ', ' linear infinite;\n width: 16px;\n height: 16px;\n'], + ['\n animation: 2s ', ' linear infinite;\n width: 16px;\n height: 16px;\n'] + )), + rotate$1 +) +styled__default['default'](StyledInternalLink)( + templateObject_14$2 || (templateObject_14$2 = __makeTemplateObject(['\n color: ', ';\n'], ['\n color: ', ';\n'])), + function (_a) { + var theme = _a.theme + return theme.text1 + } +) +var CustomLightSpinner = styled__default['default'](Spinner$1)( + templateObject_15$1 || + (templateObject_15$1 = __makeTemplateObject( + ['\n height: ', ';\n width: ', ';\n'], + ['\n height: ', ';\n width: ', ';\n'] + )), + function (_a) { + var size = _a.size + return size + }, + function (_a) { + var size = _a.size + return size + } +) +var HideSmall = styled__default['default'].span( + templateObject_17 || (templateObject_17 = __makeTemplateObject(['\n ', ';\n'], ['\n ', ';\n'])), + function (_a) { + var theme = _a.theme + return theme.mediaWidth.upToSmall( + templateObject_16 || + (templateObject_16 = __makeTemplateObject(['\n display: none;\n '], ['\n display: none;\n '])) + ) + } +) +styled__default['default'].span( + templateObject_19 || (templateObject_19 = __makeTemplateObject(['\n ', ';\n'], ['\n ', ';\n'])), + function (_a) { + var theme = _a.theme + return theme.mediaWidth.upToExtraSmall( + templateObject_18 || + (templateObject_18 = __makeTemplateObject(['\n display: none;\n '], ['\n display: none;\n '])) + ) + } +) +styled__default['default'].span( + templateObject_21 || + (templateObject_21 = __makeTemplateObject(['\n display: none;\n ', ';\n'], ['\n display: none;\n ', ';\n'])), + function (_a) { + var theme = _a.theme + return theme.mediaWidth.upToSmall( + templateObject_20 || + (templateObject_20 = __makeTemplateObject(['\n display: block;\n '], ['\n display: block;\n '])) + ) + } +) +var Separator$1 = styled__default['default'].div( + templateObject_22 || + (templateObject_22 = __makeTemplateObject( + ['\n width: 100%;\n height: 1px;\n background-color: ', ';\n'], + ['\n width: 100%;\n height: 1px;\n background-color: ', ';\n'] + )), + function (_a) { + var theme = _a.theme + return theme.bg2 + } +) +var templateObject_1$W, + templateObject_2$D, + templateObject_3$w, + templateObject_4$m, + templateObject_5$j, + templateObject_6$d, + templateObject_7$c, + templateObject_8$9, + templateObject_9$8, + templateObject_10$6, + templateObject_11$5, + templateObject_12$5, + templateObject_13$2, + templateObject_14$2, + templateObject_15$1, + templateObject_16, + templateObject_17, + templateObject_18, + templateObject_19, + templateObject_20, + templateObject_21, + templateObject_22 + +var MEDIA_WIDTHS = { + upToExtraSmall: 500, + upToSmall: 720, + upToMedium: 960, + upToLarge: 1280, +} +// Migrating to a standard z-index system https://getbootstrap.com/docs/5.0/layout/z-index/ +// Please avoid using deprecated numbers +var Z_INDEX +;(function (Z_INDEX) { + Z_INDEX[(Z_INDEX['deprecated_zero'] = 0)] = 'deprecated_zero' + Z_INDEX[(Z_INDEX['deprecated_content'] = 1)] = 'deprecated_content' + Z_INDEX[(Z_INDEX['dropdown'] = 1000)] = 'dropdown' + Z_INDEX[(Z_INDEX['sticky'] = 1020)] = 'sticky' + Z_INDEX[(Z_INDEX['fixed'] = 1030)] = 'fixed' + Z_INDEX[(Z_INDEX['modalBackdrop'] = 1040)] = 'modalBackdrop' + Z_INDEX[(Z_INDEX['offcanvas'] = 1050)] = 'offcanvas' + Z_INDEX[(Z_INDEX['modal'] = 1060)] = 'modal' + Z_INDEX[(Z_INDEX['popover'] = 1070)] = 'popover' + Z_INDEX[(Z_INDEX['tooltip'] = 1080)] = 'tooltip' +})(Z_INDEX || (Z_INDEX = {})) +Object.keys(MEDIA_WIDTHS).reduce(function (accumulator, size) { + accumulator[size] = function (a, b, c) { + return styled.css( + templateObject_1$V || + (templateObject_1$V = __makeTemplateObject( + ['\n @media (max-width: ', 'px) {\n ', '\n }\n '], + ['\n @media (max-width: ', 'px) {\n ', '\n }\n '] + )), + MEDIA_WIDTHS[size], + styled.css(a, b, c) + ) + } + return accumulator +}, {}) +var TextWrapper$1 = styled__default['default'](rebass.Text)( + templateObject_4$l || + (templateObject_4$l = __makeTemplateObject( + ['\n color: ', ';\n'], + [ + '\n color: ', + ';\n', + /** + * Preset styles of the Rebass Text component + */ + ] + )), + function (_a) { + var color = _a.color, + theme = _a.theme + return theme[color] + } +) +/** + * Preset styles of the Rebass Text component + */ +var ThemedText = { + Main(props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text2' }, props), void 0) + }, + Link(props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'primary1' }, props), void 0) + }, + Label(props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 600, color: 'text1' }, props), void 0) + }, + Black(props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text1' }, props), void 0) + }, + White(props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'white' }, props), void 0) + }, + Body(props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 400, fontSize: 16, color: 'text1' }, props), void 0) + }, + LargeHeader(props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 600, fontSize: 24 }, props), void 0) + }, + MediumHeader(props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, fontSize: 20 }, props), void 0) + }, + SubHeader(props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 400, fontSize: 14 }, props), void 0) + }, + Small(props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, fontSize: 11 }, props), void 0) + }, + Blue(props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'blue1' }, props), void 0) + }, + Yellow(props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'yellow3' }, props), void 0) + }, + DarkGray(props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text3' }, props), void 0) + }, + Gray(props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'bg3' }, props), void 0) + }, + Italic(props) { + return jsxRuntime.jsx( + TextWrapper$1, + __assign({ fontWeight: 500, fontSize: 12, fontStyle: 'italic', color: 'text2' }, props), + void 0 + ) + }, + Error(_a) { + var error = _a.error, + props = __rest(_a, ['error']) + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: error ? 'red1' : 'text2' }, props), void 0) + }, +} +styled.createGlobalStyle( + templateObject_5$i || + (templateObject_5$i = __makeTemplateObject( + ['\nhtml {\n color: ', ';\n background-color: ', ' !important;\n}\n\na {\n color: ', '; \n}\n'], + ['\nhtml {\n color: ', ';\n background-color: ', ' !important;\n}\n\na {\n color: ', '; \n}\n'] + )), + function (_a) { + var theme = _a.theme + return theme.text1 + }, + function (_a) { + var theme = _a.theme + return theme.bg1 + }, + function (_a) { + var theme = _a.theme + return theme.blue1 + } +) +var templateObject_1$V, templateObject_4$l, templateObject_5$i + +var Row = styled__default['default'](styledComponents.Box)( + templateObject_1$U || + (templateObject_1$U = __makeTemplateObject( + [ + '\n width: ', + ';\n display: flex;\n padding: 0;\n align-items: ', + ';\n justify-content: ', + ';\n padding: ', + ';\n border: ', + ';\n border-radius: ', + ';\n', + ], + [ + '\n width: ', + ';\n display: flex;\n padding: 0;\n align-items: ', + ';\n justify-content: ', + ';\n padding: ', + ';\n border: ', + ';\n border-radius: ', + ';\n', + ] + )), + function (_a) { + var width = _a.width + return width !== null && width !== void 0 ? width : '100%' + }, + function (_a) { + var align = _a.align + return align !== null && align !== void 0 ? align : 'center' + }, + function (_a) { + var justify = _a.justify + return justify !== null && justify !== void 0 ? justify : 'flex-start' + }, + function (_a) { + var padding = _a.padding + return padding + }, + function (_a) { + var border = _a.border + return border + }, + function (_a) { + var borderRadius = _a.borderRadius + return borderRadius + } +) +var RowBetween = styled__default['default'](Row)( + templateObject_2$C || + (templateObject_2$C = __makeTemplateObject( + ['\n justify-content: space-between;\n'], + ['\n justify-content: space-between;\n'] + )) +) +styled__default['default'].div( + templateObject_3$v || + (templateObject_3$v = __makeTemplateObject( + ['\n display: flex;\n align-items: flex-end;\n'], + ['\n display: flex;\n align-items: flex-end;\n'] + )) +) +var AutoRow = styled__default['default'](Row)( + templateObject_4$k || + (templateObject_4$k = __makeTemplateObject( + [ + '\n flex-wrap: wrap;\n margin: ', + ';\n justify-content: ', + ';\n\n & > * {\n margin: ', + ' !important;\n }\n', + ], + [ + '\n flex-wrap: wrap;\n margin: ', + ';\n justify-content: ', + ';\n\n & > * {\n margin: ', + ' !important;\n }\n', + ] + )), + function (_a) { + var gap = _a.gap + return gap && '-' + gap + }, + function (_a) { + var justify = _a.justify + return justify && justify + }, + function (_a) { + var gap = _a.gap + return gap + } +) +var RowFixed = styled__default['default'](Row)( + templateObject_5$h || + (templateObject_5$h = __makeTemplateObject( + ['\n width: fit-content;\n margin: ', ';\n'], + ['\n width: fit-content;\n margin: ', ';\n'] + )), + function (_a) { + var gap = _a.gap + return gap && '-' + gap + } +) +var templateObject_1$U, templateObject_2$C, templateObject_3$v, templateObject_4$k, templateObject_5$h + +var _a$a, _b$2, _c$2, _d$1 +var L2Icon = styled__default['default'].img( + templateObject_1$T || + (templateObject_1$T = __makeTemplateObject( + ['\n width: 24px;\n height: 24px;\n margin-right: 16px;\n'], + ['\n width: 24px;\n height: 24px;\n margin-right: 16px;\n'] + )) +) +styled__default['default'].div( + templateObject_2$B || + (templateObject_2$B = __makeTemplateObject( + ['\n align-items: center;\n display: flex;\n justify-content: flex-start;\n padding: 0 20px 20px 20px;\n'], + ['\n align-items: center;\n display: flex;\n justify-content: flex-start;\n padding: 0 20px 20px 20px;\n'] + )) +) +var BodyText = styled__default['default'].div( + templateObject_3$u || + (templateObject_3$u = __makeTemplateObject( + [ + '\n color: ', + ';\n display: flex;\n align-items: center;\n justify-content: flex-start;\n margin: 8px;\n font-size: 14px;\n', + ], + [ + '\n color: ', + ';\n display: flex;\n align-items: center;\n justify-content: flex-start;\n margin: 8px;\n font-size: 14px;\n', + ] + )), + function (_a) { + var color = _a.color + return color + } +) +var RootWrapper = styled__default['default'].div( + templateObject_4$j || + (templateObject_4$j = __makeTemplateObject( + ['\n position: relative;\n margin-top: 16px;\n'], + ['\n position: relative;\n margin-top: 16px;\n'] + )) +) +var SHOULD_SHOW_ALERT = + ((_a$a = {}), + (_a$a[SupportedChainId.OPTIMISM] = true), + (_a$a[SupportedChainId.OPTIMISTIC_KOVAN] = true), + (_a$a[SupportedChainId.ARBITRUM_ONE] = true), + (_a$a[SupportedChainId.ARBITRUM_RINKEBY] = true), + (_a$a[SupportedChainId.POLYGON] = true), + (_a$a[SupportedChainId.POLYGON_MUMBAI] = true), + _a$a) +var BG_COLORS_BY_DARK_MODE_AND_CHAIN_ID = { + dark: + ((_b$2 = {}), + (_b$2[SupportedChainId.POLYGON] = + 'radial-gradient(100% 93.36% at 0% 6.64%, rgba(160, 108, 247, 0.1) 0%, rgba(82, 32, 166, 0.1) 100%)'), + (_b$2[SupportedChainId.POLYGON_MUMBAI] = + 'radial-gradient(100% 93.36% at 0% 6.64%, rgba(160, 108, 247, 0.1) 0%, rgba(82, 32, 166, 0.1) 100%)'), + (_b$2[SupportedChainId.OPTIMISM] = + 'radial-gradient(948% 292% at 42% 0%, rgba(255, 58, 212, 0.01) 0%, rgba(255, 255, 255, 0.04) 100%),radial-gradient(98% 96% at 2% 0%, rgba(255, 39, 39, 0.01) 0%, rgba(235, 0, 255, 0.01) 96%)'), + (_b$2[SupportedChainId.OPTIMISTIC_KOVAN] = + 'radial-gradient(948% 292% at 42% 0%, rgba(255, 58, 212, 0.04) 0%, rgba(255, 255, 255, 0.04) 100%),radial-gradient(98% 96% at 2% 0%, rgba(255, 39, 39, 0.04) 0%, rgba(235, 0, 255, 0.01 96%)'), + (_b$2[SupportedChainId.ARBITRUM_ONE] = + 'radial-gradient(285% 8200% at 30% 50%, rgba(40, 160, 240, 0.01) 0%, rgba(219, 255, 0, 0) 100%),radial-gradient(75% 75% at 0% 0%, rgba(150, 190, 220, 0.05) 0%, rgba(33, 114, 229, 0.05) 100%), hsla(0, 0%, 100%, 0.05)'), + (_b$2[SupportedChainId.ARBITRUM_RINKEBY] = + 'radial-gradient(285% 8200% at 30% 50%, rgba(40, 160, 240, 0.05) 0%, rgba(219, 255, 0, 0) 100%),radial-gradient(75% 75% at 0% 0%, rgba(150, 190, 220, 0.05) 0%, rgba(33, 114, 229, 0.1) 100%), hsla(0, 0%, 100%, 0.05)'), + _b$2), + light: + ((_c$2 = {}), + (_c$2[SupportedChainId.POLYGON] = + 'radial-gradient(182.71% 205.59% at 2.81% 7.69%, rgba(130, 71, 229, 0.2) 0%, rgba(167, 202, 255, 0.2) 100%)'), + (_c$2[SupportedChainId.POLYGON_MUMBAI] = + 'radial-gradient(182.71% 205.59% at 2.81% 7.69%, rgba(130, 71, 229, 0.2) 0%, rgba(167, 202, 255, 0.2) 100%)'), + (_c$2[SupportedChainId.OPTIMISM] = + 'radial-gradient(92% 105% at 50% 7%, rgba(255, 58, 212, 0.04) 0%, rgba(255, 255, 255, 0.03) 100%),radial-gradient(100% 97% at 0% 12%, rgba(235, 0, 255, 0.1) 0%, rgba(243, 19, 19, 0.1) 100%), hsla(0, 0%, 100%, 0.1)'), + (_c$2[SupportedChainId.OPTIMISTIC_KOVAN] = + 'radial-gradient(92% 105% at 50% 7%, rgba(255, 58, 212, 0.04) 0%, rgba(255, 255, 255, 0.03) 100%),radial-gradient(100% 97% at 0% 12%, rgba(235, 0, 255, 0.1) 0%, rgba(243, 19, 19, 0.1) 100%), hsla(0, 0%, 100%, 0.1)'), + (_c$2[SupportedChainId.ARBITRUM_ONE] = + 'radial-gradient(285% 8200% at 30% 50%, rgba(40, 160, 240, 0.1) 0%, rgba(219, 255, 0, 0) 100%),radial-gradient(circle at top left, hsla(206, 50%, 75%, 0.01), hsla(215, 79%, 51%, 0.12)), hsla(0, 0%, 100%, 0.1)'), + (_c$2[SupportedChainId.ARBITRUM_RINKEBY] = + 'radial-gradient(285% 8200% at 30% 50%, rgba(40, 160, 240, 0.1) 0%, rgba(219, 255, 0, 0) 100%),radial-gradient(circle at top left, hsla(206, 50%, 75%, 0.01), hsla(215, 79%, 51%, 0.12)), hsla(0, 0%, 100%, 0.1)'), + _c$2), +} +var ContentWrapper$1 = styled__default['default'].div( + templateObject_5$g || + (templateObject_5$g = __makeTemplateObject( + [ + '\n background: ', + ';\n border-radius: 20px;\n display: flex;\n flex-direction: row;\n overflow: hidden;\n position: relative;\n width: 100%;\n\n :before {\n background-image: url(', + ");\n background-repeat: no-repeat;\n background-size: 300px;\n content: '';\n height: 300px;\n opacity: 0.1;\n position: absolute;\n transform: rotate(25deg) translate(-90px, -40px);\n width: 300px;\n z-index: -1;\n }\n", + ], + [ + '\n background: ', + ';\n border-radius: 20px;\n display: flex;\n flex-direction: row;\n overflow: hidden;\n position: relative;\n width: 100%;\n\n :before {\n background-image: url(', + ");\n background-repeat: no-repeat;\n background-size: 300px;\n content: '';\n height: 300px;\n opacity: 0.1;\n position: absolute;\n transform: rotate(25deg) translate(-90px, -40px);\n width: 300px;\n z-index: -1;\n }\n", + ] + )), + function (_a) { + var chainId = _a.chainId, + darkMode = _a.darkMode + return BG_COLORS_BY_DARK_MODE_AND_CHAIN_ID[darkMode ? 'dark' : 'light'][chainId] + }, + function (_a) { + var logoUrl = _a.logoUrl + return logoUrl + } +) +var Header$1 = styled__default['default'].h2( + templateObject_6$c || + (templateObject_6$c = __makeTemplateObject( + ['\n font-weight: 600;\n font-size: 16px;\n margin: 0;\n'], + ['\n font-weight: 600;\n font-size: 16px;\n margin: 0;\n'] + )) +) +var LinkOutToBridge = styled__default['default'](ExternalLink)( + templateObject_7$b || + (templateObject_7$b = __makeTemplateObject( + [ + '\n align-items: center;\n border-radius: 8px;\n color: white;\n display: flex;\n font-size: 16px;\n justify-content: space-between;\n padding: 6px 8px;\n margin-right: 12px;\n text-decoration: none !important;\n width: 100%;\n', + ], + [ + '\n align-items: center;\n border-radius: 8px;\n color: white;\n display: flex;\n font-size: 16px;\n justify-content: space-between;\n padding: 6px 8px;\n margin-right: 12px;\n text-decoration: none !important;\n width: 100%;\n', + ] + )) +) +var StyledArrowUpRight = styled__default['default'](reactFeather.ArrowUpRight)( + templateObject_8$8 || + (templateObject_8$8 = __makeTemplateObject( + ['\n margin-left: 12px;\n width: 24px;\n height: 24px;\n'], + ['\n margin-left: 12px;\n width: 24px;\n height: 24px;\n'] + )) +) +var TEXT_COLORS = + ((_d$1 = {}), + (_d$1[SupportedChainId.POLYGON] = 'rgba(130, 71, 229)'), + (_d$1[SupportedChainId.POLYGON_MUMBAI] = 'rgba(130, 71, 229)'), + (_d$1[SupportedChainId.OPTIMISM] = '#ff3856'), + (_d$1[SupportedChainId.OPTIMISTIC_KOVAN] = '#ff3856'), + (_d$1[SupportedChainId.ARBITRUM_ONE] = '#0490ed'), + (_d$1[SupportedChainId.ARBITRUM_RINKEBY] = '#0490ed'), + _d$1) +function shouldShowAlert(chainId) { + return Boolean(chainId && SHOULD_SHOW_ALERT[chainId]) +} +function NetworkAlert() { + var chainId = useActiveWeb3React().chainId + var _a = __read(useDarkModeManager(), 1), + darkMode = _a[0] + if (!shouldShowAlert(chainId)) { + return null + } + var _b = CHAIN_INFO[chainId], + label = _b.label, + logoUrl = _b.logoUrl, + bridge = _b.bridge + var textColor = TEXT_COLORS[chainId] + return bridge + ? jsxRuntime.jsx( + RootWrapper, + { + children: jsxRuntime.jsx( + ContentWrapper$1, + __assign( + { chainId, darkMode, logoUrl }, + { + children: jsxRuntime.jsxs( + LinkOutToBridge, + __assign( + { href: bridge }, + { + children: [ + jsxRuntime.jsxs( + BodyText, + __assign( + { color: textColor }, + { + children: [ + jsxRuntime.jsx(L2Icon, { src: logoUrl }, void 0), + jsxRuntime.jsxs( + AutoRow, + { + children: [ + jsxRuntime.jsx( + Header$1, + { + children: jsxRuntime.jsxs( + macro.Trans, + { children: [label, ' token bridge'] }, + void 0 + ), + }, + void 0 + ), + jsxRuntime.jsx( + HideSmall, + { + children: jsxRuntime.jsxs( + macro.Trans, + { children: ['Deposit tokens to the ', label, ' network.'] }, + void 0 + ), + }, + void 0 + ), + ], + }, + void 0 + ), + ], + } + ), + void 0 + ), + jsxRuntime.jsx(StyledArrowUpRight, { color: textColor }, void 0), + ], + } + ), + void 0 + ), + } + ), + void 0 + ), + }, + void 0 + ) + : null +} +var templateObject_1$T, + templateObject_2$B, + templateObject_3$u, + templateObject_4$j, + templateObject_5$g, + templateObject_6$c, + templateObject_7$b, + templateObject_8$8 + +/** + * @param open conditional to show content or hide + * @returns Wrapper to smoothly hide and expand content + */ +function AnimatedDropdown(_a) { + var open = _a.open, + children = _a.children + var _b = useResizeObserver__default['default'](), + ref = _b.ref, + height = _b.height + var props = reactSpring.useSpring({ + height: open ? (height !== null && height !== void 0 ? height : 0) : 0, + config: { + mass: 1.2, + tension: 300, + friction: 20, + clamp: true, + velocity: 0.01, + }, + }) + return jsxRuntime.jsx( + reactSpring.animated.div, + __assign( + { style: __assign(__assign({}, props), { overflow: 'hidden', width: '100%', willChange: 'height' }) }, + { children: jsxRuntime.jsx('div', __assign({ ref }, { children }), void 0) } + ), + void 0 + ) +} + +var Card = styled__default['default'](styledComponents.Box)( + templateObject_1$S || + (templateObject_1$S = __makeTemplateObject( + ['\n width: ', ';\n padding: ', ';\n border-radius: ', ';\n border: ', ';\n'], + ['\n width: ', ';\n padding: ', ';\n border-radius: ', ';\n border: ', ';\n'] + )), + function (_a) { + var width = _a.width + return width !== null && width !== void 0 ? width : '100%' + }, + function (_a) { + var padding = _a.padding + return padding !== null && padding !== void 0 ? padding : '1rem' + }, + function (_a) { + var $borderRadius = _a.$borderRadius + return $borderRadius !== null && $borderRadius !== void 0 ? $borderRadius : '16px' + }, + function (_a) { + var border = _a.border + return border + } +) +var LightCard = styled__default['default'](Card)( + templateObject_2$A || + (templateObject_2$A = __makeTemplateObject( + ['\n border: 1px solid ', ';\n background-color: ', ';\n'], + ['\n border: 1px solid ', ';\n background-color: ', ';\n'] + )), + function (_a) { + var theme = _a.theme + return theme.bg2 + }, + function (_a) { + var theme = _a.theme + return theme.bg1 + } +) +var LightGreyCard = styled__default['default'](Card)( + templateObject_3$t || + (templateObject_3$t = __makeTemplateObject(['\n background-color: ', ';\n'], ['\n background-color: ', ';\n'])), + function (_a) { + var theme = _a.theme + return theme.bg2 + } +) +var GreyCard = styled__default['default'](Card)( + templateObject_4$i || + (templateObject_4$i = __makeTemplateObject(['\n background-color: ', ';\n'], ['\n background-color: ', ';\n'])), + function (_a) { + var theme = _a.theme + return theme.bg3 + } +) +styled__default['default'](Card)( + templateObject_5$f || + (templateObject_5$f = __makeTemplateObject(['\n background-color: ', ';\n'], ['\n background-color: ', ';\n'])), + function (_a) { + var theme = _a.theme + return theme.bg2 + } +) +styled__default['default'](Card)( + templateObject_6$b || + (templateObject_6$b = __makeTemplateObject(['\n background-color: ', ';\n'], ['\n background-color: ', ';\n'])), + function (_a) { + var theme = _a.theme + return theme.bg0 + } +) +var OutlineCard = styled__default['default'](Card)( + templateObject_7$a || + (templateObject_7$a = __makeTemplateObject(['\n border: 1px solid ', ';\n'], ['\n border: 1px solid ', ';\n'])), + function (_a) { + var theme = _a.theme + return theme.bg3 + } +) +styled__default['default'](Card)( + templateObject_8$7 || + (templateObject_8$7 = __makeTemplateObject( + ['\n background-color: rgba(243, 132, 30, 0.05);\n color: ', ';\n font-weight: 500;\n'], + ['\n background-color: rgba(243, 132, 30, 0.05);\n color: ', ';\n font-weight: 500;\n'] + )), + function (_a) { + var theme = _a.theme + return theme.yellow3 + } +) +styled__default['default'](Card)( + templateObject_9$7 || + (templateObject_9$7 = __makeTemplateObject( + ['\n background-color: ', ';\n color: ', ';\n border-radius: 12px;\n'], + ['\n background-color: ', ';\n color: ', ';\n border-radius: 12px;\n'] + )), + function (_a) { + var theme = _a.theme + return theme.primary5 + }, + function (_a) { + var theme = _a.theme + return theme.blue2 + } +) +var templateObject_1$S, + templateObject_2$A, + templateObject_3$t, + templateObject_4$i, + templateObject_5$f, + templateObject_6$b, + templateObject_7$a, + templateObject_8$7, + templateObject_9$7 + +var Column = styled__default['default'].div( + templateObject_1$R || + (templateObject_1$R = __makeTemplateObject( + ['\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n'], + ['\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n'] + )) +) +var ColumnCenter = styled__default['default'](Column)( + templateObject_2$z || + (templateObject_2$z = __makeTemplateObject( + ['\n width: 100%;\n align-items: center;\n'], + ['\n width: 100%;\n align-items: center;\n'] + )) +) +var AutoColumn = styled__default['default'].div( + templateObject_3$s || + (templateObject_3$s = __makeTemplateObject( + ['\n display: grid;\n grid-auto-rows: auto;\n grid-row-gap: ', ';\n justify-items: ', ';\n'], + ['\n display: grid;\n grid-auto-rows: auto;\n grid-row-gap: ', ';\n justify-items: ', ';\n'] + )), + function (_a) { + var gap = _a.gap + return (gap === 'sm' && '8px') || (gap === 'md' && '12px') || (gap === 'lg' && '24px') || gap + }, + function (_a) { + var justify = _a.justify + return justify && justify + } +) +var templateObject_1$R, templateObject_2$z, templateObject_3$s + +var loadingAnimation = styled.keyframes( + templateObject_1$Q || + (templateObject_1$Q = __makeTemplateObject( + ['\n 0% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0% 50%;\n }\n'], + ['\n 0% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0% 50%;\n }\n'] + )) +) +var LoadingRows = styled__default['default'].div( + templateObject_2$y || + (templateObject_2$y = __makeTemplateObject( + [ + '\n display: grid;\n\n & > div {\n animation: ', + ' 1.5s infinite;\n animation-fill-mode: both;\n background: linear-gradient(\n to left,\n ', + ' 25%,\n ', + ' 50%,\n ', + ' 75%\n );\n background-size: 400%;\n border-radius: 12px;\n height: 2.4em;\n will-change: background-position;\n }\n', + ], + [ + '\n display: grid;\n\n & > div {\n animation: ', + ' 1.5s infinite;\n animation-fill-mode: both;\n background: linear-gradient(\n to left,\n ', + ' 25%,\n ', + ' 50%,\n ', + ' 75%\n );\n background-size: 400%;\n border-radius: 12px;\n height: 2.4em;\n will-change: background-position;\n }\n', + ] + )), + loadingAnimation, + function (_a) { + var theme = _a.theme + return theme.bg1 + }, + function (_a) { + var theme = _a.theme + return theme.bg2 + }, + function (_a) { + var theme = _a.theme + return theme.bg1 + } +) +var loadingOpacityMixin = styled.css( + templateObject_3$r || + (templateObject_3$r = __makeTemplateObject( + ['\n filter: ', ';\n opacity: ', ';\n transition: opacity 0.2s ease-in-out;\n'], + ['\n filter: ', ';\n opacity: ', ';\n transition: opacity 0.2s ease-in-out;\n'] + )), + function (_a) { + var $loading = _a.$loading + return $loading ? 'grayscale(1)' : 'none' + }, + function (_a) { + var $loading = _a.$loading + return $loading ? '0.4' : '1' + } +) +var LoadingOpacityContainer = styled__default['default'].div( + templateObject_4$h || (templateObject_4$h = __makeTemplateObject(['\n ', '\n'], ['\n ', '\n'])), + loadingOpacityMixin +) +var templateObject_1$Q, templateObject_2$y, templateObject_3$r, templateObject_4$h + +/** + * Invokes callback repeatedly over an interval defined by the delay + * @param callback + * @param delay if null, the callback will not be invoked + * @param leading if true, the callback will be invoked immediately (on the leading edge); otherwise, it will be invoked after delay + */ +function useInterval(callback, delay, leading) { + if (leading === void 0) { + leading = true + } + var savedCallback = React.useRef() + // Remember the latest callback. + React.useEffect( + function () { + savedCallback.current = callback + }, + [callback] + ) + // Set up the interval. + React.useEffect( + function () { + function tick() { + var current = savedCallback.current + current && current() + } + if (delay !== null) { + if (leading) tick() + var id_1 = setInterval(tick, delay) + return function () { + return clearInterval(id_1) + } + } + return + }, + [delay, leading] + ) +} + +var PopoverContainer$1 = styled__default['default'].div( + templateObject_1$P || + (templateObject_1$P = __makeTemplateObject( + [ + '\n z-index: 9999;\n visibility: ', + ';\n opacity: ', + ';\n transition: visibility 150ms linear, opacity 150ms linear;\n color: ', + ';\n', + ], + [ + '\n z-index: 9999;\n visibility: ', + ';\n opacity: ', + ';\n transition: visibility 150ms linear, opacity 150ms linear;\n color: ', + ';\n', + ] + )), + function (props) { + return props.show ? 'visible' : 'hidden' + }, + function (props) { + return props.show ? 1 : 0 + }, + function (_a) { + var theme = _a.theme + return theme.text2 + } +) +var ReferenceElement = styled__default['default'].div( + templateObject_2$x || + (templateObject_2$x = __makeTemplateObject(['\n display: inline-block;\n'], ['\n display: inline-block;\n'])) +) +var Arrow = styled__default['default'].div( + templateObject_3$q || + (templateObject_3$q = __makeTemplateObject( + [ + "\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 ", + ';\n transform: rotate(45deg);\n background: ', + ';\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 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 ", + ';\n transform: rotate(45deg);\n background: ', + ';\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', + ] + )), + function (_a) { + var theme = _a.theme + return theme.bg2 + }, + function (_a) { + var theme = _a.theme + return theme.bg0 + } +) +function Popover(_a) { + var _b, _c + var content = _a.content, + show = _a.show, + children = _a.children, + _d = _a.placement, + placement = _d === void 0 ? 'auto' : _d + var _e = __read(React.useState(null), 2), + referenceElement = _e[0], + setReferenceElement = _e[1] + var _f = __read(React.useState(null), 2), + popperElement = _f[0], + setPopperElement = _f[1] + var _g = __read(React.useState(null), 2), + arrowElement = _g[0], + setArrowElement = _g[1] + var options = React.useMemo( + function () { + return { + placement, + strategy: 'fixed', + modifiers: [ + { name: 'offset', options: { offset: [8, 8] } }, + { name: 'arrow', options: { element: arrowElement } }, + { name: 'preventOverflow', options: { padding: 8 } }, + ], + } + }, + [arrowElement, placement] + ) + var _h = reactPopper.usePopper(referenceElement, popperElement, options), + styles = _h.styles, + update = _h.update, + attributes = _h.attributes + var updateCallback = React.useCallback( + function () { + update && update() + }, + [update] + ) + useInterval(updateCallback, show ? 100 : null) + return jsxRuntime.jsxs( + jsxRuntime.Fragment, + { + children: [ + jsxRuntime.jsx(ReferenceElement, __assign({ ref: setReferenceElement }, { children }), void 0), + jsxRuntime.jsx( + Portal__default['default'], + { + children: jsxRuntime.jsxs( + PopoverContainer$1, + __assign({ show, ref: setPopperElement, style: styles.popper }, attributes.popper, { + children: [ + content, + jsxRuntime.jsx( + Arrow, + __assign( + { + className: + 'arrow-' + + ((_c = + (_b = attributes.popper) === null || _b === void 0 + ? void 0 + : _b['data-popper-placement']) !== null && _c !== void 0 + ? _c + : ''), + ref: setArrowElement, + style: styles.arrow, + }, + attributes.arrow + ), + void 0 + ), + ], + }), + void 0 + ), + }, + void 0 + ), + ], + }, + void 0 + ) +} +var templateObject_1$P, templateObject_2$x, templateObject_3$q + +var TooltipContainer = styled__default['default'].div( + templateObject_1$O || + (templateObject_1$O = __makeTemplateObject( + [ + '\n max-width: 256px;\n padding: 0.6rem 1rem;\n font-weight: 400;\n word-break: break-word;\n\n background: ', + ';\n border-radius: 12px;\n border: 1px solid ', + ';\n box-shadow: 0 4px 8px 0 ', + ';\n', + ], + [ + '\n max-width: 256px;\n padding: 0.6rem 1rem;\n font-weight: 400;\n word-break: break-word;\n\n background: ', + ';\n border-radius: 12px;\n border: 1px solid ', + ';\n box-shadow: 0 4px 8px 0 ', + ';\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.bg0 + }, + function (_a) { + var theme = _a.theme + return theme.bg2 + }, + function (_a) { + var theme = _a.theme + return polished.transparentize(0.9, theme.shadow1) + } +) +function Tooltip(_a) { + var text = _a.text, + rest = __rest(_a, ['text']) + return jsxRuntime.jsx( + Popover, + __assign({ content: jsxRuntime.jsx(TooltipContainer, { children: text }, void 0) }, rest), + void 0 + ) +} +function TooltipContent(_a) { + var content = _a.content, + _b = _a.wrap, + wrap = _b === void 0 ? false : _b, + rest = __rest(_a, ['content', 'wrap']) + return jsxRuntime.jsx( + Popover, + __assign({ content: wrap ? jsxRuntime.jsx(TooltipContainer, { children: content }, void 0) : content }, rest), + void 0 + ) +} +function MouseoverTooltip(_a) { + var children = _a.children, + rest = __rest(_a, ['children']) + var _b = __read(React.useState(false), 2), + show = _b[0], + setShow = _b[1] + var open = React.useCallback( + function () { + return setShow(true) + }, + [setShow] + ) + var close = React.useCallback( + function () { + return setShow(false) + }, + [setShow] + ) + return jsxRuntime.jsx( + Tooltip, + __assign( + {}, + rest, + { show }, + { + children: jsxRuntime.jsx('div', __assign({ onMouseEnter: open, onMouseLeave: close }, { children }), void 0), + } + ), + void 0 + ) +} +function MouseoverTooltipContent(_a) { + var content = _a.content, + children = _a.children, + _b = _a.onOpen, + openCallback = _b === void 0 ? undefined : _b, + disableHover = _a.disableHover, + rest = __rest(_a, ['content', 'children', 'onOpen', 'disableHover']) + var _c = __read(React.useState(false), 2), + show = _c[0], + setShow = _c[1] + var open = React.useCallback( + function () { + setShow(true) + openCallback === null || openCallback === void 0 ? void 0 : openCallback() + }, + [openCallback] + ) + var close = React.useCallback( + function () { + return setShow(false) + }, + [setShow] + ) + return jsxRuntime.jsx( + TooltipContent, + __assign( + {}, + rest, + { show, content: disableHover ? null : content }, + { + children: jsxRuntime.jsx( + 'div', + __assign( + { + style: { display: 'inline-block', lineHeight: 0, padding: '0.25rem' }, + onMouseEnter: open, + onMouseLeave: close, + }, + { children } + ), + void 0 + ), + } + ), + void 0 + ) +} +var templateObject_1$O + +var THIRTY_BIPS_FEE = new sdkCore.Percent(JSBI__default['default'].BigInt(30), JSBI__default['default'].BigInt(10000)) +var INPUT_FRACTION_AFTER_FEE = ONE_HUNDRED_PERCENT.subtract(THIRTY_BIPS_FEE) +// computes realized lp fee as a percent +function computeRealizedLPFeePercent(trade) { + var e_1, _a + var percent + // Since routes are either all v2 or all v3 right now, calculate separately + if (trade.swaps[0].route.pools instanceof v2Sdk.Pair) { + // for each hop in our trade, take away the x*y=k price impact from 0.3% fees + // e.g. for 3 tokens/2 hops: 1 - ((1 - .03) * (1-.03)) + percent = ONE_HUNDRED_PERCENT.subtract( + trade.swaps.reduce(function (currentFee) { + return currentFee.multiply(INPUT_FRACTION_AFTER_FEE) + }, ONE_HUNDRED_PERCENT) + ) + } else { + percent = ZERO_PERCENT + try { + for (var _b = __values(trade.swaps), _c = _b.next(); !_c.done; _c = _b.next()) { + var swap = _c.value + var _d = swap.inputAmount.divide(trade.inputAmount), + numerator = _d.numerator, + denominator = _d.denominator + var overallPercent = new sdkCore.Percent(numerator, denominator) + var routeRealizedLPFeePercent = overallPercent.multiply( + ONE_HUNDRED_PERCENT.subtract( + swap.route.pools.reduce(function (currentFee, pool) { + var fee = + pool instanceof v2Sdk.Pair + ? // not currently possible given protocol check above, but not fatal + v3Sdk.FeeAmount.MEDIUM + : pool.fee + return currentFee.multiply(ONE_HUNDRED_PERCENT.subtract(new sdkCore.Fraction(fee, 1000000))) + }, ONE_HUNDRED_PERCENT) + ) + ) + percent = percent.add(routeRealizedLPFeePercent) + } + } catch (e_1_1) { + e_1 = { error: e_1_1 } + } finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b) + } finally { + if (e_1) throw e_1.error + } + } + } + return new sdkCore.Percent(percent.numerator, percent.denominator) +} +var IMPACT_TIERS = [ + BLOCKED_PRICE_IMPACT_NON_EXPERT, + ALLOWED_PRICE_IMPACT_HIGH, + ALLOWED_PRICE_IMPACT_MEDIUM, + ALLOWED_PRICE_IMPACT_LOW, +] +function warningSeverity(priceImpact) { + var e_2, _a + if (!priceImpact) return 4 + var impact = IMPACT_TIERS.length + try { + for ( + var IMPACT_TIERS_1 = __values(IMPACT_TIERS), IMPACT_TIERS_1_1 = IMPACT_TIERS_1.next(); + !IMPACT_TIERS_1_1.done; + IMPACT_TIERS_1_1 = IMPACT_TIERS_1.next() + ) { + var impactLevel = IMPACT_TIERS_1_1.value + if (impactLevel.lessThan(priceImpact)) return impact + impact-- + } + } catch (e_2_1) { + e_2 = { error: e_2_1 } + } finally { + try { + if (IMPACT_TIERS_1_1 && !IMPACT_TIERS_1_1.done && (_a = IMPACT_TIERS_1.return)) _a.call(IMPACT_TIERS_1) + } finally { + if (e_2) throw e_2.error + } + } + return 0 +} + +/** + * Parses a CurrencyAmount from the passed string. + * Returns the CurrencyAmount, or undefined if parsing fails. + */ +function tryParseCurrencyAmount(value, currency) { + if (!value || !currency) { + return undefined + } + try { + var typedValueParsed = units.parseUnits(value, currency.decimals).toString() + if (typedValueParsed !== '0') { + return sdkCore.CurrencyAmount.fromRawAmount(currency, JSBI__default['default'].BigInt(typedValueParsed)) + } + } catch (error) { + // fails if the user specifies too many decimal places of precision (or maybe exceed max uint?) + console.debug('Failed to parse input amount: "' + value + '"', error) + } + return undefined +} + +// returns whether tradeB is better than tradeA by at least a threshold percentage amount +// only used by v2 hooks +function isTradeBetter(tradeA, tradeB, minimumDelta) { + if (minimumDelta === void 0) { + minimumDelta = ZERO_PERCENT + } + if (tradeA && !tradeB) return false + if (tradeB && !tradeA) return true + if (!tradeA || !tradeB) return undefined + if ( + tradeA.tradeType !== tradeB.tradeType || + !tradeA.inputAmount.currency.equals(tradeB.inputAmount.currency) || + !tradeA.outputAmount.currency.equals(tradeB.outputAmount.currency) + ) { + throw new Error('Comparing incomparable trades') + } + if (minimumDelta.equalTo(ZERO_PERCENT)) { + return tradeA.executionPrice.lessThan(tradeB.executionPrice) + } else { + return tradeA.executionPrice.asFraction + .multiply(minimumDelta.add(ONE_HUNDRED_PERCENT)) + .lessThan(tradeB.executionPrice) + } +} + +function useAllCurrencyCombinations(currencyA, currencyB) { + var chainId = currencyA === null || currencyA === void 0 ? void 0 : currencyA.chainId + var _a = __read( + chainId + ? [ + currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped, + currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped, + ] + : [undefined, undefined], + 2 + ), + tokenA = _a[0], + tokenB = _a[1] + var bases = React.useMemo( + function () { + var _a, _b, _c, _d, _e + if (!chainId || chainId !== (tokenB === null || tokenB === void 0 ? void 0 : tokenB.chainId)) return [] + var common = (_a = BASES_TO_CHECK_TRADES_AGAINST[chainId]) !== null && _a !== void 0 ? _a : [] + var additionalA = tokenA + ? (_c = (_b = ADDITIONAL_BASES[chainId]) === null || _b === void 0 ? void 0 : _b[tokenA.address]) !== null && + _c !== void 0 + ? _c + : [] + : [] + var additionalB = tokenB + ? (_e = (_d = ADDITIONAL_BASES[chainId]) === null || _d === void 0 ? void 0 : _d[tokenB.address]) !== null && + _e !== void 0 + ? _e + : [] + : [] + return __spreadArray( + __spreadArray(__spreadArray([], __read(common), false), __read(additionalA), false), + __read(additionalB), + false + ) + }, + [chainId, tokenA, tokenB] + ) + var basePairs = React.useMemo( + function () { + return ( + bases + .flatMap(function (base) { + return bases.map(function (otherBase) { + return [base, otherBase] + }) + }) + // though redundant with the first filter below, that expression runs more often, so this is probably worthwhile + .filter(function (_a) { + var _b = __read(_a, 2), + t0 = _b[0], + t1 = _b[1] + return !t0.equals(t1) + }) + ) + }, + [bases] + ) + return React.useMemo( + function () { + return tokenA && tokenB + ? __spreadArray( + __spreadArray( + __spreadArray( + [ + // the direct pair + [tokenA, tokenB], + ], + __read( + bases.map(function (base) { + return [tokenA, base] + }) + ), + false + ), + __read( + bases.map(function (base) { + return [tokenB, base] + }) + ), + false + ), + __read(basePairs), + false + ) + .filter(function (_a) { + var _b = __read(_a, 2), + t0 = _b[0], + t1 = _b[1] + return !t0.equals(t1) + }) + // filter out duplicate pairs + .filter(function (_a, i, otherPairs) { + var _b = __read(_a, 2), + t0 = _b[0], + t1 = _b[1] + // find the first index in the array at which there are the same 2 tokens as the current + var firstIndexInOtherPairs = otherPairs.findIndex(function (_a) { + var _b = __read(_a, 2), + t0Other = _b[0], + t1Other = _b[1] + return (t0.equals(t0Other) && t1.equals(t1Other)) || (t0.equals(t1Other) && t1.equals(t0Other)) + }) + // only accept the first occurrence of the same 2 tokens + return firstIndexInOtherPairs === i + }) + // optionally filter out some pairs for tokens with custom bases defined + .filter(function (_a) { + var _b = __read(_a, 2), + tokenA = _b[0], + tokenB = _b[1] + if (!chainId) return true + var customBases = CUSTOM_BASES[chainId] + var customBasesA = customBases === null || customBases === void 0 ? void 0 : customBases[tokenA.address] + var customBasesB = customBases === null || customBases === void 0 ? void 0 : customBases[tokenB.address] + if (!customBasesA && !customBasesB) return true + if ( + customBasesA && + !customBasesA.find(function (base) { + return tokenB.equals(base) + }) + ) + return false + if ( + customBasesB && + !customBasesB.find(function (base) { + return tokenA.equals(base) + }) + ) + return false + return true + }) + : [] + }, + [tokenA, tokenB, bases, basePairs, chainId] + ) +} + +var PAIR_INTERFACE = new abi$6.Interface(abi$4) +var PairState +;(function (PairState) { + PairState[(PairState['LOADING'] = 0)] = 'LOADING' + PairState[(PairState['NOT_EXISTS'] = 1)] = 'NOT_EXISTS' + PairState[(PairState['EXISTS'] = 2)] = 'EXISTS' + PairState[(PairState['INVALID'] = 3)] = 'INVALID' +})(PairState || (PairState = {})) +function useV2Pairs(currencies) { + var tokens = React.useMemo( + function () { + return currencies.map(function (_a) { + var _b = __read(_a, 2), + currencyA = _b[0], + currencyB = _b[1] + return [ + currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped, + currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped, + ] + }) + }, + [currencies] + ) + var pairAddresses = React.useMemo( + function () { + return tokens.map(function (_a) { + var _b = __read(_a, 2), + tokenA = _b[0], + tokenB = _b[1] + return tokenA && + tokenB && + tokenA.chainId === tokenB.chainId && + !tokenA.equals(tokenB) && + V2_FACTORY_ADDRESSES[tokenA.chainId] + ? v2Sdk.computePairAddress({ + factoryAddress: V2_FACTORY_ADDRESSES[tokenA.chainId], + tokenA, + tokenB, + }) + : undefined + }) + }, + [tokens] + ) + var results = useMultipleContractSingleData(pairAddresses, PAIR_INTERFACE, 'getReserves') + return React.useMemo( + function () { + return results.map(function (result, i) { + var reserves = result.result, + loading = result.loading + var tokenA = tokens[i][0] + var tokenB = tokens[i][1] + if (loading) return [PairState.LOADING, null] + if (!tokenA || !tokenB || tokenA.equals(tokenB)) return [PairState.INVALID, null] + if (!reserves) return [PairState.NOT_EXISTS, null] + var reserve0 = reserves.reserve0, + reserve1 = reserves.reserve1 + var _a = __read(tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA], 2), + token0 = _a[0], + token1 = _a[1] + return [ + PairState.EXISTS, + new v2Sdk.Pair( + sdkCore.CurrencyAmount.fromRawAmount(token0, reserve0.toString()), + sdkCore.CurrencyAmount.fromRawAmount(token1, reserve1.toString()) + ), + ] + }) + }, + [results, tokens] + ) +} + +function useAllCommonPairs(currencyA, currencyB) { + var allCurrencyCombinations = useAllCurrencyCombinations(currencyA, currencyB) + var allPairs = useV2Pairs(allCurrencyCombinations) + return React.useMemo( + function () { + return Object.values( + allPairs + // filter out invalid pairs + .filter(function (result) { + return Boolean(result[0] === PairState.EXISTS && result[1]) + }) + .map(function (_a) { + var _b = __read(_a, 2), + pair = _b[1] + return pair + }) + ) + }, + [allPairs] + ) +} +var MAX_HOPS = 3 +/** + * Returns the best v2 trade for a desired swap + * @param tradeType whether the swap is an exact in/out + * @param amountSpecified the exact amount to swap in/out + * @param otherCurrency the desired output/payment currency + */ +function useBestV2Trade(tradeType, amountSpecified, otherCurrency, _a) { + var _b = _a === void 0 ? {} : _a, + _c = _b.maxHops, + maxHops = _c === void 0 ? MAX_HOPS : _c + var _d = __read( + React.useMemo( + function () { + return tradeType === sdkCore.TradeType.EXACT_INPUT + ? [ + amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, + otherCurrency, + ] + : [ + otherCurrency, + amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, + ] + }, + [tradeType, amountSpecified, otherCurrency] + ), + 2 + ), + currencyIn = _d[0], + currencyOut = _d[1] + var allowedPairs = useAllCommonPairs(currencyIn, currencyOut) + return React.useMemo( + function () { + var _a, _b, _c, _d + if (amountSpecified && currencyIn && currencyOut && allowedPairs.length > 0) { + if (maxHops === 1) { + var options = { maxHops: 1, maxNumResults: 1 } + if (tradeType === sdkCore.TradeType.EXACT_INPUT) { + var amountIn = amountSpecified + return (_a = v2Sdk.Trade.bestTradeExactIn(allowedPairs, amountIn, currencyOut, options)[0]) !== null && + _a !== void 0 + ? _a + : null + } else { + var amountOut = amountSpecified + return (_b = v2Sdk.Trade.bestTradeExactOut(allowedPairs, currencyIn, amountOut, options)[0]) !== null && + _b !== void 0 + ? _b + : null + } + } + // search through trades with varying hops, find best trade out of them + var bestTradeSoFar = null + for (var i = 1; i <= maxHops; i++) { + var options = { maxHops: i, maxNumResults: 1 } + var currentTrade = void 0 + if (tradeType === sdkCore.TradeType.EXACT_INPUT) { + var amountIn = amountSpecified + currentTrade = + (_c = v2Sdk.Trade.bestTradeExactIn(allowedPairs, amountIn, currencyOut, options)[0]) !== null && + _c !== void 0 + ? _c + : null + } else { + var amountOut = amountSpecified + currentTrade = + (_d = v2Sdk.Trade.bestTradeExactOut(allowedPairs, currencyIn, amountOut, options)[0]) !== null && + _d !== void 0 + ? _d + : null + } + // if current trade is best yet, save it + if (isTradeBetter(bestTradeSoFar, currentTrade, BETTER_TRADE_LESS_HOPS_THRESHOLD)) { + bestTradeSoFar = currentTrade + } + } + return bestTradeSoFar + } + return null + }, + [tradeType, amountSpecified, currencyIn, currencyOut, allowedPairs, maxHops] + ) +} + +var TradeState +;(function (TradeState) { + TradeState[(TradeState['LOADING'] = 0)] = 'LOADING' + TradeState[(TradeState['INVALID'] = 1)] = 'INVALID' + TradeState[(TradeState['NO_ROUTE_FOUND'] = 2)] = 'NO_ROUTE_FOUND' + TradeState[(TradeState['VALID'] = 3)] = 'VALID' + TradeState[(TradeState['SYNCING'] = 4)] = 'SYNCING' +})(TradeState || (TradeState = {})) +var InterfaceTrade = /** @class */ (function (_super) { + __extends(InterfaceTrade, _super) + function InterfaceTrade(_a) { + var gasUseEstimateUSD = _a.gasUseEstimateUSD, + routes = __rest(_a, ['gasUseEstimateUSD']) + var _this = _super.call(this, routes) || this + _this.gasUseEstimateUSD = gasUseEstimateUSD + return _this + } + return InterfaceTrade +})(routerSdk.Trade) var abi = [ - { - inputs: [ - ], - name: "feeGrowthGlobal0X128", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - ], - name: "feeGrowthGlobal1X128", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - ], - name: "liquidity", - outputs: [ - { - internalType: "uint128", - name: "", - type: "uint128" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "index", - type: "uint256" - } - ], - name: "observations", - outputs: [ - { - internalType: "uint32", - name: "blockTimestamp", - type: "uint32" - }, - { - internalType: "int56", - name: "tickCumulative", - type: "int56" - }, - { - internalType: "uint160", - name: "secondsPerLiquidityCumulativeX128", - type: "uint160" - }, - { - internalType: "bool", - name: "initialized", - type: "bool" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "bytes32", - name: "key", - type: "bytes32" - } - ], - name: "positions", - outputs: [ - { - internalType: "uint128", - name: "_liquidity", - type: "uint128" - }, - { - internalType: "uint256", - name: "feeGrowthInside0LastX128", - type: "uint256" - }, - { - internalType: "uint256", - name: "feeGrowthInside1LastX128", - type: "uint256" - }, - { - internalType: "uint128", - name: "tokensOwed0", - type: "uint128" - }, - { - internalType: "uint128", - name: "tokensOwed1", - type: "uint128" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - ], - name: "protocolFees", - outputs: [ - { - internalType: "uint128", - name: "token0", - type: "uint128" - }, - { - internalType: "uint128", - name: "token1", - type: "uint128" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - ], - name: "slot0", - outputs: [ - { - internalType: "uint160", - name: "sqrtPriceX96", - type: "uint160" - }, - { - internalType: "int24", - name: "tick", - type: "int24" - }, - { - internalType: "uint16", - name: "observationIndex", - type: "uint16" - }, - { - internalType: "uint16", - name: "observationCardinality", - type: "uint16" - }, - { - internalType: "uint16", - name: "observationCardinalityNext", - type: "uint16" - }, - { - internalType: "uint8", - name: "feeProtocol", - type: "uint8" - }, - { - internalType: "bool", - name: "unlocked", - type: "bool" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "int16", - name: "wordPosition", - type: "int16" - } - ], - name: "tickBitmap", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "int24", - name: "tick", - type: "int24" - } - ], - name: "ticks", - outputs: [ - { - internalType: "uint128", - name: "liquidityGross", - type: "uint128" - }, - { - internalType: "int128", - name: "liquidityNet", - type: "int128" - }, - { - internalType: "uint256", - name: "feeGrowthOutside0X128", - type: "uint256" - }, - { - internalType: "uint256", - name: "feeGrowthOutside1X128", - type: "uint256" - }, - { - internalType: "int56", - name: "tickCumulativeOutside", - type: "int56" - }, - { - internalType: "uint160", - name: "secondsPerLiquidityOutsideX128", - type: "uint160" - }, - { - internalType: "uint32", - name: "secondsOutside", - type: "uint32" - }, - { - internalType: "bool", - name: "initialized", - type: "bool" - } - ], - stateMutability: "view", - type: "function" - } -]; - -var POOL_STATE_INTERFACE = new abi$6.Interface(abi); -var PoolState; -(function (PoolState) { - PoolState[PoolState["LOADING"] = 0] = "LOADING"; - PoolState[PoolState["NOT_EXISTS"] = 1] = "NOT_EXISTS"; - PoolState[PoolState["EXISTS"] = 2] = "EXISTS"; - PoolState[PoolState["INVALID"] = 3] = "INVALID"; -})(PoolState || (PoolState = {})); -function usePools(poolKeys) { - var chainId = useActiveWeb3React().chainId; - var transformed = React.useMemo(function () { - return poolKeys.map(function (_a) { - var _b = __read(_a, 3), currencyA = _b[0], currencyB = _b[1], feeAmount = _b[2]; - if (!chainId || !currencyA || !currencyB || !feeAmount) - return null; - var tokenA = currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped; - var tokenB = currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped; - if (!tokenA || !tokenB || tokenA.equals(tokenB)) - return null; - var _c = __read(tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA], 2), token0 = _c[0], token1 = _c[1]; - return [token0, token1, feeAmount]; - }); - }, [chainId, poolKeys]); - var poolAddresses = React.useMemo(function () { - var v3CoreFactoryAddress = chainId && V3_CORE_FACTORY_ADDRESSES[chainId]; - return transformed.map(function (value) { - if (!v3CoreFactoryAddress || !value) - return undefined; - return v3Sdk.computePoolAddress({ - factoryAddress: v3CoreFactoryAddress, - tokenA: value[0], - tokenB: value[1], - fee: value[2], - }); - }); - }, [chainId, transformed]); - var slot0s = useMultipleContractSingleData(poolAddresses, POOL_STATE_INTERFACE, 'slot0'); - var liquidities = useMultipleContractSingleData(poolAddresses, POOL_STATE_INTERFACE, 'liquidity'); - return React.useMemo(function () { - return poolKeys.map(function (_key, index) { - var _a; - var _b = __read((_a = transformed[index]) !== null && _a !== void 0 ? _a : [], 3), token0 = _b[0], token1 = _b[1], fee = _b[2]; - if (!token0 || !token1 || !fee) - return [PoolState.INVALID, null]; - var _c = slot0s[index], slot0 = _c.result, slot0Loading = _c.loading, slot0Valid = _c.valid; - var _d = liquidities[index], liquidity = _d.result, liquidityLoading = _d.loading, liquidityValid = _d.valid; - if (!slot0Valid || !liquidityValid) - return [PoolState.INVALID, null]; - if (slot0Loading || liquidityLoading) - return [PoolState.LOADING, null]; - if (!slot0 || !liquidity) - return [PoolState.NOT_EXISTS, null]; - if (!slot0.sqrtPriceX96 || slot0.sqrtPriceX96.eq(0)) - return [PoolState.NOT_EXISTS, null]; - try { - return [PoolState.EXISTS, new v3Sdk.Pool(token0, token1, fee, slot0.sqrtPriceX96, liquidity[0], slot0.tick)]; - } - catch (error) { - console.error('Error when constructing the pool', error); - return [PoolState.NOT_EXISTS, null]; - } - }); - }, [liquidities, poolKeys, slot0s, transformed]); -} - -/** - * Returns all the existing pools that should be considered for swapping between an input currency and an output currency - * @param currencyIn the input currency - * @param currencyOut the output currency - */ -function useV3SwapPools(currencyIn, currencyOut) { - var chainId = useActiveWeb3React().chainId; - var allCurrencyCombinations = useAllCurrencyCombinations(currencyIn, currencyOut); - var allCurrencyCombinationsWithAllFees = React.useMemo(function () { - return allCurrencyCombinations.reduce(function (list, _a) { - var _b = __read(_a, 2), tokenA = _b[0], tokenB = _b[1]; - return chainId === SupportedChainId.MAINNET - ? list.concat([ - [tokenA, tokenB, v3Sdk.FeeAmount.LOW], - [tokenA, tokenB, v3Sdk.FeeAmount.MEDIUM], - [tokenA, tokenB, v3Sdk.FeeAmount.HIGH], - ]) - : list.concat([ - [tokenA, tokenB, v3Sdk.FeeAmount.LOWEST], - [tokenA, tokenB, v3Sdk.FeeAmount.LOW], - [tokenA, tokenB, v3Sdk.FeeAmount.MEDIUM], - [tokenA, tokenB, v3Sdk.FeeAmount.HIGH], - ]); - }, []); - }, [allCurrencyCombinations, chainId]); - var pools = usePools(allCurrencyCombinationsWithAllFees); - return React.useMemo(function () { - return { - pools: pools - .filter(function (tuple) { - return tuple[0] === PoolState.EXISTS && tuple[1] !== null; - }) - .map(function (_a) { - var _b = __read(_a, 2), pool = _b[1]; - return pool; - }), - loading: pools.some(function (_a) { - var _b = __read(_a, 1), state = _b[0]; - return state === PoolState.LOADING; - }), - }; - }, [pools]); -} - -/** - * Returns true if poolA is equivalent to poolB - * @param poolA one of the two pools - * @param poolB the other pool - */ -function poolEquals(poolA, poolB) { - return (poolA === poolB || - (poolA.token0.equals(poolB.token0) && poolA.token1.equals(poolB.token1) && poolA.fee === poolB.fee)); -} -function computeAllRoutes(currencyIn, currencyOut, pools, chainId, currentPath, allPaths, startCurrencyIn, maxHops) { - var e_1, _a; - if (currentPath === void 0) { currentPath = []; } - if (allPaths === void 0) { allPaths = []; } - if (startCurrencyIn === void 0) { startCurrencyIn = currencyIn; } - if (maxHops === void 0) { maxHops = 2; } - var tokenIn = currencyIn === null || currencyIn === void 0 ? void 0 : currencyIn.wrapped; - var tokenOut = currencyOut === null || currencyOut === void 0 ? void 0 : currencyOut.wrapped; - if (!tokenIn || !tokenOut) - throw new Error('Missing tokenIn/tokenOut'); - var _loop_1 = function (pool) { - if (!pool.involvesToken(tokenIn) || currentPath.find(function (pathPool) { return poolEquals(pool, pathPool); })) - return "continue"; - var outputToken = pool.token0.equals(tokenIn) ? pool.token1 : pool.token0; - if (outputToken.equals(tokenOut)) { - allPaths.push(new v3Sdk.Route(__spreadArray(__spreadArray([], __read(currentPath), false), [pool], false), startCurrencyIn, currencyOut)); - } - else if (maxHops > 1) { - computeAllRoutes(outputToken, currencyOut, pools, chainId, __spreadArray(__spreadArray([], __read(currentPath), false), [pool], false), allPaths, startCurrencyIn, maxHops - 1); - } - }; - try { - for (var pools_1 = __values(pools), pools_1_1 = pools_1.next(); !pools_1_1.done; pools_1_1 = pools_1.next()) { - var pool = pools_1_1.value; - _loop_1(pool); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (pools_1_1 && !pools_1_1.done && (_a = pools_1.return)) _a.call(pools_1); - } - finally { if (e_1) throw e_1.error; } - } - return allPaths; -} -/** - * Returns all the routes from an input currency to an output currency - * @param currencyIn the input currency - * @param currencyOut the output currency - */ -function useAllV3Routes(currencyIn, currencyOut) { - var chainId = useActiveWeb3React().chainId; - var _a = useV3SwapPools(currencyIn, currencyOut), pools = _a.pools, poolsLoading = _a.loading; - return React.useMemo(function () { - if (poolsLoading || !chainId || !pools || !currencyIn || !currencyOut) - return { loading: true, routes: [] }; - var routes = computeAllRoutes(currencyIn, currencyOut, pools, chainId, [], [], currencyIn, 2); - return { loading: false, routes: routes }; - }, [chainId, currencyIn, currencyOut, pools, poolsLoading]); -} - -var _a$9; -var QUOTE_GAS_OVERRIDES = (_a$9 = {}, - _a$9[SupportedChainId.ARBITRUM_ONE] = 25000000, - _a$9[SupportedChainId.ARBITRUM_RINKEBY] = 25000000, - _a$9); -var DEFAULT_GAS_QUOTE = 2000000; -/** - * Returns the best v3 trade for a desired swap - * @param tradeType whether the swap is an exact in/out - * @param amountSpecified the exact amount to swap in/out - * @param otherCurrency the desired output/payment currency - */ -function useClientSideV3Trade(tradeType, amountSpecified, otherCurrency) { - var _a; - var _b = __read(React.useMemo(function () { - return tradeType === sdkCore.TradeType.EXACT_INPUT - ? [amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, otherCurrency] - : [otherCurrency, amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency]; - }, [tradeType, amountSpecified, otherCurrency]), 2), currencyIn = _b[0], currencyOut = _b[1]; - var _c = useAllV3Routes(currencyIn, currencyOut), routes = _c.routes, routesLoading = _c.loading; - var quoter = useV3Quoter(); - var chainId = useActiveWeb3React().chainId; - var quotesResults = useSingleContractWithCallData(quoter, amountSpecified - ? routes.map(function (route) { return v3Sdk.SwapQuoter.quoteCallParameters(route, amountSpecified, tradeType).calldata; }) - : [], { - gasRequired: chainId ? (_a = QUOTE_GAS_OVERRIDES[chainId]) !== null && _a !== void 0 ? _a : DEFAULT_GAS_QUOTE : undefined, - }); - return React.useMemo(function () { - if (!amountSpecified || - !currencyIn || - !currencyOut || - quotesResults.some(function (_a) { - var valid = _a.valid; - return !valid; - }) || - // skip when tokens are the same - (tradeType === sdkCore.TradeType.EXACT_INPUT - ? amountSpecified.currency.equals(currencyOut) - : amountSpecified.currency.equals(currencyIn))) { - return { - state: TradeState.INVALID, - trade: undefined, - }; - } - if (routesLoading || quotesResults.some(function (_a) { - var loading = _a.loading; - return loading; - })) { - return { - state: TradeState.LOADING, - trade: undefined, - }; - } - var _a = quotesResults.reduce(function (currentBest, _a, i) { - var result = _a.result; - if (!result) - return currentBest; - // overwrite the current best if it's not defined or if this route is better - if (tradeType === sdkCore.TradeType.EXACT_INPUT) { - var amountOut_1 = sdkCore.CurrencyAmount.fromRawAmount(currencyOut, result.amountOut.toString()); - if (currentBest.amountOut === null || JSBI__default["default"].lessThan(currentBest.amountOut.quotient, amountOut_1.quotient)) { - return { - bestRoute: routes[i], - amountIn: amountSpecified, - amountOut: amountOut_1, - }; - } - } - else { - var amountIn_1 = sdkCore.CurrencyAmount.fromRawAmount(currencyIn, result.amountIn.toString()); - if (currentBest.amountIn === null || JSBI__default["default"].greaterThan(currentBest.amountIn.quotient, amountIn_1.quotient)) { - return { - bestRoute: routes[i], - amountIn: amountIn_1, - amountOut: amountSpecified, - }; - } - } - return currentBest; - }, { - bestRoute: null, - amountIn: null, - amountOut: null, - }), bestRoute = _a.bestRoute, amountIn = _a.amountIn, amountOut = _a.amountOut; - if (!bestRoute || !amountIn || !amountOut) { - return { - state: TradeState.NO_ROUTE_FOUND, - trade: undefined, - }; - } - return { - state: TradeState.VALID, - trade: new InterfaceTrade({ - v2Routes: [], - v3Routes: [ - { - routev3: bestRoute, - inputAmount: amountIn, - outputAmount: amountOut, - }, - ], - tradeType: tradeType, - }), - }; - }, [amountSpecified, currencyIn, currencyOut, quotesResults, routes, routesLoading, tradeType]); -} - -var _a$8; -// Stablecoin amounts used when calculating spot price for a given currency. -// The amount is large enough to filter low liquidity pairs. -var STABLECOIN_AMOUNT_OUT = (_a$8 = {}, - _a$8[SupportedChainId.MAINNET] = sdkCore.CurrencyAmount.fromRawAmount(USDC, 100000000000), - _a$8[SupportedChainId.ARBITRUM_ONE] = sdkCore.CurrencyAmount.fromRawAmount(USDC_ARBITRUM, 10000000000), - _a$8[SupportedChainId.OPTIMISM] = sdkCore.CurrencyAmount.fromRawAmount(DAI_OPTIMISM, 1e+22), - _a$8[SupportedChainId.POLYGON] = sdkCore.CurrencyAmount.fromRawAmount(USDC_POLYGON, 10000000000), - _a$8); -/** - * Returns the price in USDC of the input currency - * @param currency currency to compute the USDC price of - */ -function useUSDCPrice(currency) { - var chainId = currency === null || currency === void 0 ? void 0 : currency.chainId; - var amountOut = chainId ? STABLECOIN_AMOUNT_OUT[chainId] : undefined; - var stablecoin = amountOut === null || amountOut === void 0 ? void 0 : amountOut.currency; - // TODO(#2808): remove dependency on useBestV2Trade - var v2USDCTrade = useBestV2Trade(sdkCore.TradeType.EXACT_OUTPUT, amountOut, currency, { - maxHops: 2, - }); - var v3USDCTrade = useClientSideV3Trade(sdkCore.TradeType.EXACT_OUTPUT, amountOut, currency); - return React.useMemo(function () { - if (!currency || !stablecoin) { - return undefined; - } - // handle usdc - if (currency === null || currency === void 0 ? void 0 : currency.wrapped.equals(stablecoin)) { - return new sdkCore.Price(stablecoin, stablecoin, '1', '1'); - } - // use v2 price if available, v3 as fallback - if (v2USDCTrade) { - var _a = v2USDCTrade.route.midPrice, numerator = _a.numerator, denominator = _a.denominator; - return new sdkCore.Price(currency, stablecoin, denominator, numerator); - } - else if (v3USDCTrade.trade) { - var _b = v3USDCTrade.trade.routes[0].midPrice, numerator = _b.numerator, denominator = _b.denominator; - return new sdkCore.Price(currency, stablecoin, denominator, numerator); - } - return undefined; - }, [currency, stablecoin, v2USDCTrade, v3USDCTrade.trade]); -} -function useUSDCValue(currencyAmount) { - var price = useUSDCPrice(currencyAmount === null || currencyAmount === void 0 ? void 0 : currencyAmount.currency); - return React.useMemo(function () { - if (!price || !currencyAmount) - return null; - try { - return price.quote(currencyAmount); - } - catch (error) { - return null; - } - }, [currencyAmount, price]); -} -/** - * - * @param fiatValue string representation of a USD amount - * @returns CurrencyAmount where currency is stablecoin on active chain - */ -function useStablecoinAmountFromFiatValue(fiatValue) { - var _a; - var chainId = useActiveWeb3React().chainId; - var stablecoin = chainId ? (_a = STABLECOIN_AMOUNT_OUT[chainId]) === null || _a === void 0 ? void 0 : _a.currency : undefined; - if (fiatValue === null || fiatValue === undefined || !chainId || !stablecoin) { - return undefined; - } - // trim for decimal precision when parsing - var parsedForDecimals = parseFloat(fiatValue).toFixed(stablecoin.decimals).toString(); - try { - // parse USD string into CurrencyAmount based on stablecoin decimals - return tryParseCurrencyAmount(parsedForDecimals, stablecoin); - } - catch (error) { - return undefined; - } -} - -var StyledPriceContainer = styled__default["default"].button(templateObject_1$N || (templateObject_1$N = __makeTemplateObject(["\n background-color: transparent;\n border: none;\n cursor: pointer;\n align-items: center;\n justify-content: flex-start;\n padding: 0;\n grid-template-columns: 1fr auto;\n grid-gap: 0.25rem;\n display: flex;\n flex-direction: row;\n text-align: left;\n flex-wrap: wrap;\n padding: 8px 0;\n user-select: text;\n"], ["\n background-color: transparent;\n border: none;\n cursor: pointer;\n align-items: center;\n justify-content: flex-start;\n padding: 0;\n grid-template-columns: 1fr auto;\n grid-gap: 0.25rem;\n display: flex;\n flex-direction: row;\n text-align: left;\n flex-wrap: wrap;\n padding: 8px 0;\n user-select: text;\n"]))); -function TradePrice(_a) { - var _b, _c, _d, _e, _f, _g; - var price = _a.price, showInverted = _a.showInverted, setShowInverted = _a.setShowInverted; - var theme = React.useContext(styled.ThemeContext); - var usdcPrice = useUSDCPrice(showInverted ? price.baseCurrency : price.quoteCurrency); - var formattedPrice; - try { - formattedPrice = showInverted ? price.toSignificant(4) : (_b = price.invert()) === null || _b === void 0 ? void 0 : _b.toSignificant(4); - } - catch (error) { - formattedPrice = '0'; - } - var label = showInverted ? "" + ((_c = price.quoteCurrency) === null || _c === void 0 ? void 0 : _c.symbol) : ((_d = price.baseCurrency) === null || _d === void 0 ? void 0 : _d.symbol) + " "; - var labelInverted = showInverted ? ((_e = price.baseCurrency) === null || _e === void 0 ? void 0 : _e.symbol) + " " : "" + ((_f = price.quoteCurrency) === null || _f === void 0 ? void 0 : _f.symbol); - var flipPrice = React.useCallback(function () { return setShowInverted(!showInverted); }, [setShowInverted, showInverted]); - var text = ((_g = '1 ' + labelInverted + ' = ' + formattedPrice) !== null && _g !== void 0 ? _g : '-') + " " + label; - return (jsxRuntime.jsxs(StyledPriceContainer, __assign({ onClick: function (e) { - e.stopPropagation(); // dont want this click to affect dropdowns / hovers - flipPrice(); - }, title: text }, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, color: theme.text1 }, { children: text }), void 0), ' ', usdcPrice && (jsxRuntime.jsx(ThemedText.DarkGray, { children: jsxRuntime.jsxs(macro.Trans, { children: ["($", usdcPrice.toSignificant(6, { groupSeparator: ',' }), ")"] }, void 0) }, void 0))] }), void 0)); -} -var templateObject_1$N; - -var Wrapper$d = styled__default["default"].div(templateObject_1$M || (templateObject_1$M = __makeTemplateObject(["\n position: relative;\n padding: 8px;\n"], ["\n position: relative;\n padding: 8px;\n"]))); -var ArrowWrapper$1 = styled__default["default"].div(templateObject_3$p || (templateObject_3$p = __makeTemplateObject(["\n padding: 4px;\n border-radius: 12px;\n height: 32px;\n width: 32px;\n position: relative;\n margin-top: -14px;\n margin-bottom: -14px;\n left: calc(50% - 16px);\n /* transform: rotate(90deg); */\n background-color: ", ";\n border: 4px solid ", ";\n z-index: 2;\n ", "\n"], ["\n padding: 4px;\n border-radius: 12px;\n height: 32px;\n width: 32px;\n position: relative;\n margin-top: -14px;\n margin-bottom: -14px;\n left: calc(50% - 16px);\n /* transform: rotate(90deg); */\n background-color: ", ";\n border: 4px solid ", ";\n z-index: 2;\n ", "\n"])), function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var theme = _a.theme; - return theme.bg0; -}, function (_a) { - var clickable = _a.clickable; - return clickable - ? styled.css(templateObject_2$w || (templateObject_2$w = __makeTemplateObject(["\n :hover {\n cursor: pointer;\n opacity: 0.8;\n }\n "], ["\n :hover {\n cursor: pointer;\n opacity: 0.8;\n }\n "]))) : null; -}); -var SectionBreak = styled__default["default"].div(templateObject_4$g || (templateObject_4$g = __makeTemplateObject(["\n height: 1px;\n width: 100%;\n background-color: ", ";\n"], ["\n height: 1px;\n width: 100%;\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg3; -}); -var ErrorText = styled__default["default"](rebass.Text)(templateObject_5$e || (templateObject_5$e = __makeTemplateObject(["\n color: ", ";\n"], ["\n color: ", ";\n"])), function (_a) { - var theme = _a.theme, severity = _a.severity; - return severity === 3 || severity === 4 - ? theme.red1 - : severity === 2 - ? theme.yellow2 - : severity === 1 - ? theme.text1 - : theme.text2; -}); -var TruncatedText = styled__default["default"](rebass.Text)(templateObject_6$a || (templateObject_6$a = __makeTemplateObject(["\n text-overflow: ellipsis;\n max-width: 220px;\n overflow: hidden;\n text-align: right;\n"], ["\n text-overflow: ellipsis;\n max-width: 220px;\n overflow: hidden;\n text-align: right;\n" - // styles -]))); -// styles -styled__default["default"].span(templateObject_7$9 || (templateObject_7$9 = __makeTemplateObject(["\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 &::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"]))); -var SwapCallbackErrorInner = styled__default["default"].div(templateObject_8$6 || (templateObject_8$6 = __makeTemplateObject(["\n background-color: ", ";\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: ", ";\n z-index: -1;\n p {\n padding: 0;\n margin: 0;\n font-weight: 500;\n }\n"], ["\n background-color: ", ";\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: ", ";\n z-index: -1;\n p {\n padding: 0;\n margin: 0;\n font-weight: 500;\n }\n"])), function (_a) { - var theme = _a.theme; - return polished.transparentize(0.9, theme.red1); -}, function (_a) { - var theme = _a.theme; - return theme.red1; -}); -var SwapCallbackErrorInnerAlertTriangle = styled__default["default"].div(templateObject_9$6 || (templateObject_9$6 = __makeTemplateObject(["\n background-color: ", ";\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 background-color: ", ";\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"])), function (_a) { - var theme = _a.theme; - return polished.transparentize(0.9, theme.red1); -}); -function SwapCallbackError(_a) { - var error = _a.error; - return (jsxRuntime.jsxs(SwapCallbackErrorInner, { children: [jsxRuntime.jsx(SwapCallbackErrorInnerAlertTriangle, { children: jsxRuntime.jsx(reactFeather.AlertTriangle, { size: 24 }, void 0) }, void 0), jsxRuntime.jsx("p", __assign({ style: { wordBreak: 'break-word' } }, { children: error }), void 0)] }, void 0)); -} -var SwapShowAcceptChanges = styled__default["default"](AutoColumn)(templateObject_10$5 || (templateObject_10$5 = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n padding: 0.5rem;\n border-radius: 12px;\n margin-top: 8px;\n"], ["\n background-color: ", ";\n color: ", ";\n padding: 0.5rem;\n border-radius: 12px;\n margin-top: 8px;\n"])), function (_a) { - var theme = _a.theme; - return polished.transparentize(0.95, theme.primary3); -}, function (_a) { - var theme = _a.theme; - return theme.primaryText1; -}); -styled__default["default"](ThemedText.Black)(templateObject_11$4 || (templateObject_11$4 = __makeTemplateObject(["\n border-bottom: 1px solid ", ";\n padding-bottom: 0.5rem;\n"], ["\n border-bottom: 1px solid ", ";\n padding-bottom: 0.5rem;\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}); -var ResponsiveTooltipContainer = styled__default["default"](TooltipContainer)(templateObject_13$1 || (templateObject_13$1 = __makeTemplateObject(["\n background-color: ", ";\n border: 1px solid ", ";\n padding: 1rem;\n width: ", ";\n\n ", "\n"], ["\n background-color: ", ";\n border: 1px solid ", ";\n padding: 1rem;\n width: ", ";\n\n ", "\n"])), function (_a) { - var theme = _a.theme; - return theme.bg0; -}, function (_a) { - var theme = _a.theme; - return theme.bg2; -}, function (_a) { - var width = _a.width; - return width !== null && width !== void 0 ? width : 'auto'; -}, function (_a) { - var theme = _a.theme, origin = _a.origin; - return theme.mediaWidth.upToExtraSmall(templateObject_12$4 || (templateObject_12$4 = __makeTemplateObject(["\n transform: scale(0.8);\n transform-origin: ", ";\n "], ["\n transform: scale(0.8);\n transform-origin: ", ";\n "])), origin !== null && origin !== void 0 ? origin : 'top left'); -}); -styled__default["default"](TradePrice)(templateObject_14$1 || (templateObject_14$1 = __makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), loadingOpacityMixin); -var templateObject_1$M, templateObject_2$w, templateObject_3$p, templateObject_4$g, templateObject_5$e, templateObject_6$a, templateObject_7$9, templateObject_8$6, templateObject_9$6, templateObject_10$5, templateObject_11$4, templateObject_12$4, templateObject_13$1, templateObject_14$1; - -/** - * Formatted version of price impact text with warning colors - */ -function FormattedPriceImpact(_a) { - var priceImpact = _a.priceImpact; - return (jsxRuntime.jsx(ErrorText, __assign({ fontWeight: 500, fontSize: 14, severity: warningSeverity(priceImpact) }, { children: priceImpact ? priceImpact.multiply(-1).toFixed(2) + "%" : '-' }), void 0)); -} - -var StyledCard$1 = styled__default["default"](Card)(templateObject_1$L || (templateObject_1$L = __makeTemplateObject(["\n padding: 0;\n"], ["\n padding: 0;\n"]))); -function TextWithLoadingPlaceholder(_a) { - var syncing = _a.syncing, width = _a.width, children = _a.children; - return syncing ? (jsxRuntime.jsx(LoadingRows, { children: jsxRuntime.jsx("div", { style: { height: '15px', width: width + "px" } }, void 0) }, void 0)) : (children); -} -function AdvancedSwapDetails(_a) { - var trade = _a.trade, allowedSlippage = _a.allowedSlippage, _b = _a.syncing, syncing = _b === void 0 ? false : _b; - var theme = React.useContext(styled.ThemeContext); - var chainId = useActiveWeb3React().chainId; - var _c = React.useMemo(function () { - if (!trade) - return { expectedOutputAmount: undefined, priceImpact: undefined }; - var expectedOutputAmount = trade.outputAmount; - var realizedLpFeePercent = computeRealizedLPFeePercent(trade); - var priceImpact = trade.priceImpact.subtract(realizedLpFeePercent); - return { expectedOutputAmount: expectedOutputAmount, priceImpact: priceImpact }; - }, [trade]), expectedOutputAmount = _c.expectedOutputAmount, priceImpact = _c.priceImpact; - return !trade ? null : (jsxRuntime.jsx(StyledCard$1, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "8px" }, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(RowFixed, { children: jsxRuntime.jsx(ThemedText.SubHeader, __assign({ color: theme.text1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Expected Output" }, void 0) }), void 0) }, void 0), jsxRuntime.jsx(TextWithLoadingPlaceholder, __assign({ syncing: syncing, width: 65 }, { children: jsxRuntime.jsx(ThemedText.Black, __assign({ textAlign: "right", fontSize: 14 }, { children: expectedOutputAmount - ? expectedOutputAmount.toSignificant(6) + " " + expectedOutputAmount.currency.symbol - : '-' }), void 0) }), void 0)] }, void 0), jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(RowFixed, { children: jsxRuntime.jsx(ThemedText.SubHeader, __assign({ color: theme.text1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Price Impact" }, void 0) }), void 0) }, void 0), jsxRuntime.jsx(TextWithLoadingPlaceholder, __assign({ syncing: syncing, width: 50 }, { children: jsxRuntime.jsx(ThemedText.Black, __assign({ textAlign: "right", fontSize: 14 }, { children: jsxRuntime.jsx(FormattedPriceImpact, { priceImpact: priceImpact }, void 0) }), void 0) }), void 0)] }, void 0), jsxRuntime.jsx(Separator$1, {}, void 0), jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(RowFixed, __assign({ style: { marginRight: '20px' } }, { children: jsxRuntime.jsxs(ThemedText.SubHeader, __assign({ color: theme.text3 }, { children: [trade.tradeType === sdkCore.TradeType.EXACT_INPUT ? (jsxRuntime.jsx(macro.Trans, { children: "Minimum received" }, void 0)) : (jsxRuntime.jsx(macro.Trans, { children: "Maximum sent" }, void 0)), ' ', jsxRuntime.jsx(macro.Trans, { children: "after slippage" }, void 0), " (", allowedSlippage.toFixed(2), "%)"] }), void 0) }), void 0), jsxRuntime.jsx(TextWithLoadingPlaceholder, __assign({ syncing: syncing, width: 70 }, { children: jsxRuntime.jsx(ThemedText.Black, __assign({ textAlign: "right", fontSize: 14, color: theme.text3 }, { children: trade.tradeType === sdkCore.TradeType.EXACT_INPUT - ? trade.minimumAmountOut(allowedSlippage).toSignificant(6) + " " + trade.outputAmount.currency.symbol - : trade.maximumAmountIn(allowedSlippage).toSignificant(6) + " " + trade.inputAmount.currency.symbol }), void 0) }), void 0)] }, void 0), !(trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) || !chainId || !SUPPORTED_GAS_ESTIMATE_CHAIN_IDS.includes(chainId) ? null : (jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(ThemedText.SubHeader, __assign({ color: theme.text3 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Network Fee" }, void 0) }), void 0), jsxRuntime.jsx(TextWithLoadingPlaceholder, __assign({ syncing: syncing, width: 50 }, { children: jsxRuntime.jsxs(ThemedText.Black, __assign({ textAlign: "right", fontSize: 14, color: theme.text3 }, { children: ["~$", trade.gasUseEstimateUSD.toFixed(2)] }), void 0) }), void 0)] }, void 0))] }), void 0) }, void 0)); -} -var templateObject_1$L; - -var _path$3, _line$1, _line2, _path2; - -function _extends$4() { _extends$4 = 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$4.apply(this, arguments); } + { + inputs: [], + name: 'feeGrowthGlobal0X128', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'feeGrowthGlobal1X128', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'liquidity', + outputs: [ + { + internalType: 'uint128', + name: '', + type: 'uint128', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'index', + type: 'uint256', + }, + ], + name: 'observations', + outputs: [ + { + internalType: 'uint32', + name: 'blockTimestamp', + type: 'uint32', + }, + { + internalType: 'int56', + name: 'tickCumulative', + type: 'int56', + }, + { + internalType: 'uint160', + name: 'secondsPerLiquidityCumulativeX128', + type: 'uint160', + }, + { + internalType: 'bool', + name: 'initialized', + type: 'bool', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'key', + type: 'bytes32', + }, + ], + name: 'positions', + outputs: [ + { + internalType: 'uint128', + name: '_liquidity', + type: 'uint128', + }, + { + internalType: 'uint256', + name: 'feeGrowthInside0LastX128', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'feeGrowthInside1LastX128', + type: 'uint256', + }, + { + internalType: 'uint128', + name: 'tokensOwed0', + type: 'uint128', + }, + { + internalType: 'uint128', + name: 'tokensOwed1', + type: 'uint128', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'protocolFees', + outputs: [ + { + internalType: 'uint128', + name: 'token0', + type: 'uint128', + }, + { + internalType: 'uint128', + name: 'token1', + type: 'uint128', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'slot0', + outputs: [ + { + internalType: 'uint160', + name: 'sqrtPriceX96', + type: 'uint160', + }, + { + internalType: 'int24', + name: 'tick', + type: 'int24', + }, + { + internalType: 'uint16', + name: 'observationIndex', + type: 'uint16', + }, + { + internalType: 'uint16', + name: 'observationCardinality', + type: 'uint16', + }, + { + internalType: 'uint16', + name: 'observationCardinalityNext', + type: 'uint16', + }, + { + internalType: 'uint8', + name: 'feeProtocol', + type: 'uint8', + }, + { + internalType: 'bool', + name: 'unlocked', + type: 'bool', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'int16', + name: 'wordPosition', + type: 'int16', + }, + ], + name: 'tickBitmap', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'int24', + name: 'tick', + type: 'int24', + }, + ], + name: 'ticks', + outputs: [ + { + internalType: 'uint128', + name: 'liquidityGross', + type: 'uint128', + }, + { + internalType: 'int128', + name: 'liquidityNet', + type: 'int128', + }, + { + internalType: 'uint256', + name: 'feeGrowthOutside0X128', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'feeGrowthOutside1X128', + type: 'uint256', + }, + { + internalType: 'int56', + name: 'tickCumulativeOutside', + type: 'int56', + }, + { + internalType: 'uint160', + name: 'secondsPerLiquidityOutsideX128', + type: 'uint160', + }, + { + internalType: 'uint32', + name: 'secondsOutside', + type: 'uint32', + }, + { + internalType: 'bool', + name: 'initialized', + type: 'bool', + }, + ], + stateMutability: 'view', + type: 'function', + }, +] -var SvgGasIcon = function SvgGasIcon(props) { - return /*#__PURE__*/React__namespace.createElement("svg", _extends$4({ - width: 16, - height: 16, - viewBox: "0 0 16 16", - fill: "none", - xmlns: "http://www.w3.org/2000/svg" - }, props), _path$3 || (_path$3 = /*#__PURE__*/React__namespace.createElement("path", { - d: "M10.0047 9.26921H10.2714C11.0078 9.26921 11.6047 9.86617 11.6047 10.6025V12.1359C11.6047 12.7987 12.142 13.3359 12.8047 13.3359C13.4675 13.3359 14.0047 12.7995 14.0047 12.1367V5.22059C14.0047 4.86697 13.7758 4.56227 13.5258 4.31223L10.6714 1.33594M4.00472 2.00254H8.00472C8.7411 2.00254 9.33805 2.59949 9.33805 3.33587V14.0015H2.67139V3.33587C2.67139 2.59949 3.26834 2.00254 4.00472 2.00254ZM14.0047 5.33587C14.0047 6.07225 13.4078 6.66921 12.6714 6.66921C11.935 6.66921 11.3381 6.07225 11.3381 5.33587C11.3381 4.59949 11.935 4.00254 12.6714 4.00254C13.4078 4.00254 14.0047 4.59949 14.0047 5.33587Z", - stroke: "white" - })), _line$1 || (_line$1 = /*#__PURE__*/React__namespace.createElement("line", { - x1: 4, - y1: 9.99414, - x2: 8, - y2: 9.99414, - stroke: "white" - })), _line2 || (_line2 = /*#__PURE__*/React__namespace.createElement("line", { - x1: 4, - y1: 11.9941, - x2: 8, - y2: 11.9941, - stroke: "white" - })), _path2 || (_path2 = /*#__PURE__*/React__namespace.createElement("path", { - d: "M4 8.16113H8", - stroke: "white" - }))); -}; - -var BadgeVariant; -(function (BadgeVariant) { - BadgeVariant["DEFAULT"] = "DEFAULT"; - BadgeVariant["NEGATIVE"] = "NEGATIVE"; - BadgeVariant["POSITIVE"] = "POSITIVE"; - BadgeVariant["PRIMARY"] = "PRIMARY"; - BadgeVariant["WARNING"] = "WARNING"; - BadgeVariant["WARNING_OUTLINE"] = "WARNING_OUTLINE"; -})(BadgeVariant || (BadgeVariant = {})); -function pickBackgroundColor(variant, theme) { - switch (variant) { - case BadgeVariant.NEGATIVE: - return theme.error; - case BadgeVariant.POSITIVE: - return theme.success; - case BadgeVariant.PRIMARY: - return theme.primary1; - case BadgeVariant.WARNING: - return theme.warning; - case BadgeVariant.WARNING_OUTLINE: - return 'transparent'; - default: - return theme.bg2; - } -} -function pickBorder(variant, theme) { - switch (variant) { - case BadgeVariant.WARNING_OUTLINE: - return "1px solid " + theme.warning; - default: - return 'unset'; - } -} -function pickFontColor(variant, theme) { - switch (variant) { - case BadgeVariant.NEGATIVE: - return polished.readableColor(theme.error); - case BadgeVariant.POSITIVE: - return polished.readableColor(theme.success); - case BadgeVariant.WARNING: - return polished.readableColor(theme.warning); - case BadgeVariant.WARNING_OUTLINE: - return theme.warning; - default: - return polished.readableColor(theme.bg2); - } -} -var Badge = styled__default["default"].div(templateObject_1$K || (templateObject_1$K = __makeTemplateObject(["\n align-items: center;\n background-color: ", ";\n border: ", ";\n border-radius: 0.5rem;\n color: ", ";\n display: inline-flex;\n padding: 4px 6px;\n justify-content: center;\n font-weight: 500;\n"], ["\n align-items: center;\n background-color: ", ";\n border: ", ";\n border-radius: 0.5rem;\n color: ", ";\n display: inline-flex;\n padding: 4px 6px;\n justify-content: center;\n font-weight: 500;\n"])), function (_a) { - var theme = _a.theme, variant = _a.variant; - return pickBackgroundColor(variant, theme); -}, function (_a) { - var theme = _a.theme, variant = _a.variant; - return pickBorder(variant, theme); -}, function (_a) { - var theme = _a.theme, variant = _a.variant; - return pickFontColor(variant, theme); -}); -var templateObject_1$K; - -function safeNamehash(name) { - if (name === undefined) - return undefined; - try { - return hash.namehash(name); - } - catch (error) { - console.debug(error); - return undefined; - } -} - -/** - * Returns true if the string value is zero in hex - * @param hexNumberString - */ -function isZero(hexNumberString) { - return /^0x0*$/.test(hexNumberString); -} - -/** - * Does a lookup for an ENS name to find its contenthash. - */ -function useENSContentHash(ensName) { - var _a; - var ensNodeArgument = React.useMemo(function () { return [ensName === null ? undefined : safeNamehash(ensName)]; }, [ensName]); - var registrarContract = useENSRegistrarContract(false); - var resolverAddressResult = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument); - var resolverAddress = (_a = resolverAddressResult.result) === null || _a === void 0 ? void 0 : _a[0]; - var resolverContract = useENSResolverContract(resolverAddress && isZero(resolverAddress) ? undefined : resolverAddress, false); - var contenthash = useSingleCallResult(resolverContract, 'contenthash', ensNodeArgument); - return React.useMemo(function () { - var _a, _b; - return ({ - contenthash: (_b = (_a = contenthash.result) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : null, - loading: resolverAddressResult.loading || contenthash.loading, - }); - }, [contenthash.loading, contenthash.result, resolverAddressResult.loading]); -} - -function useHttpLocations(uri) { - var ens = React.useMemo(function () { return (uri ? parseENSAddress(uri) : undefined); }, [uri]); - var resolvedContentHash = useENSContentHash(ens === null || ens === void 0 ? void 0 : ens.ensName); - return React.useMemo(function () { - if (ens) { - return resolvedContentHash.contenthash ? uriToHttp(contenthashToUri(resolvedContentHash.contenthash)) : []; - } - else { - return uri ? uriToHttp(uri) : []; - } - }, [ens, resolvedContentHash.contenthash, uri]); -} - -var MaticLogo = "data:image/svg+xml,%3Csvg%20width%3D%221024%22%20height%3D%221024%22%20viewBox%3D%220%200%201024%201024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Ccircle%20cx%3D%22512%22%20cy%3D%22512%22%20r%3D%22512%22%20fill%3D%22%238247E5%22%2F%3E%3Cpath%20d%3D%22M681.469%20402.456C669.189%20395.312%20653.224%20395.312%20639.716%20402.456L543.928%20457.228L478.842%20492.949L383.055%20547.721C370.774%20554.865%20354.81%20554.865%20341.301%20547.721L265.162%20504.856C252.882%20497.712%20244.286%20484.614%20244.286%20470.325V385.786C244.286%20371.498%20251.654%20358.4%20265.162%20351.256L340.073%20309.581C352.353%20302.437%20368.318%20302.437%20381.827%20309.581L456.737%20351.256C469.018%20358.4%20477.614%20371.498%20477.614%20385.786V440.558L542.7%20403.646V348.874C542.7%20334.586%20535.332%20321.488%20521.824%20314.344L383.055%20235.758C370.774%20228.614%20354.81%20228.614%20341.301%20235.758L200.076%20314.344C186.567%20321.488%20179.199%20334.586%20179.199%20348.874V507.237C179.199%20521.525%20186.567%20534.623%20200.076%20541.767L341.301%20620.353C353.582%20627.498%20369.546%20627.498%20383.055%20620.353L478.842%20566.772L543.928%20529.86L639.716%20476.279C651.996%20469.135%20667.961%20469.135%20681.469%20476.279L756.38%20517.953C768.66%20525.098%20777.257%20538.195%20777.257%20552.484V637.023C777.257%20651.312%20769.888%20664.409%20756.38%20671.553L681.469%20714.419C669.189%20721.563%20653.224%20721.563%20639.716%20714.419L564.805%20672.744C552.525%20665.6%20543.928%20652.502%20543.928%20638.214V583.442L478.842%20620.353V675.125C478.842%20689.414%20486.21%20702.512%20499.719%20709.656L640.944%20788.242C653.224%20795.386%20669.189%20795.386%20682.697%20788.242L823.922%20709.656C836.203%20702.512%20844.799%20689.414%20844.799%20675.125V516.763C844.799%20502.474%20837.431%20489.377%20823.922%20482.232L681.469%20402.456Z%22%20fill%3D%22white%22%2F%3E%3C%2Fsvg%3E"; - -function chainIdToNetworkName(networkId) { - switch (networkId) { - case SupportedChainId.MAINNET: - return 'ethereum'; - case SupportedChainId.ARBITRUM_ONE: - return 'arbitrum'; - case SupportedChainId.OPTIMISM: - return 'optimism'; - default: - return 'ethereum'; - } -} -function getNativeLogoURI(chainId) { - if (chainId === void 0) { chainId = SupportedChainId.MAINNET; } - switch (chainId) { - case SupportedChainId.POLYGON_MUMBAI: - case SupportedChainId.POLYGON: - return MaticLogo; - default: - return EthereumLogo; - } -} -function getTokenLogoURI(address, chainId) { - if (chainId === void 0) { chainId = SupportedChainId.MAINNET; } - var networkName = chainIdToNetworkName(chainId); - var networksWithUrls = [SupportedChainId.ARBITRUM_ONE, SupportedChainId.MAINNET, SupportedChainId.OPTIMISM]; - if (networksWithUrls.includes(chainId)) { - return "https://raw.githubusercontent.com/Uniswap/assets/master/blockchains/" + networkName + "/assets/" + address + "/logo.png"; - } -} -function useCurrencyLogoURIs(currency) { - var locations = useHttpLocations(currency instanceof WrappedTokenInfo ? currency.logoURI : undefined); - return React.useMemo(function () { - var logoURIs = __spreadArray([], __read(locations), false); - if (currency) { - if (currency.isNative) { - logoURIs.push(getNativeLogoURI(currency.chainId)); - } - else if (currency.isToken) { - var logoURI = getTokenLogoURI(currency.address, currency.chainId); - if (logoURI) { - logoURIs.push(logoURI); - } - } - } - return logoURIs; - }, [currency, locations]); -} - -function useTheme() { - return React.useContext(styled.ThemeContext); -} - -var BAD_SRCS = {}; -/** - * Renders an image by sequentially trying a list of URIs, and then eventually a fallback triangle alert - */ -function Logo(_a) { - var srcs = _a.srcs, alt = _a.alt, style = _a.style, rest = __rest(_a, ["srcs", "alt", "style"]); - var _b = __read(React.useState(0), 2), refresh = _b[1]; - var theme = useTheme(); - var src = srcs.find(function (src) { return !BAD_SRCS[src]; }); - if (src) { - return (jsxRuntime.jsx("img", __assign({}, rest, { alt: alt, src: src, style: style, onError: function () { - if (src) - BAD_SRCS[src] = true; - refresh(function (i) { return i + 1; }); - } }), void 0)); - } - return jsxRuntime.jsx(reactFeather.Slash, __assign({}, rest, { style: __assign(__assign({}, style), { color: theme.bg4 }) }), void 0); -} - -var StyledLogo$1 = styled__default["default"](Logo)(templateObject_1$J || (templateObject_1$J = __makeTemplateObject(["\n width: ", ";\n height: ", ";\n background: radial-gradient(white 50%, #ffffff00 calc(75% + 1px), #ffffff00 100%);\n border-radius: 50%;\n -mox-box-shadow: 0 0 1px ", ";\n -webkit-box-shadow: 0 0 1px ", ";\n box-shadow: 0 0 1px ", ";\n border: 0px solid rgba(255, 255, 255, 0);\n"], ["\n width: ", ";\n height: ", ";\n background: radial-gradient(white 50%, #ffffff00 calc(75% + 1px), #ffffff00 100%);\n border-radius: 50%;\n -mox-box-shadow: 0 0 1px ", ";\n -webkit-box-shadow: 0 0 1px ", ";\n box-shadow: 0 0 1px ", ";\n border: 0px solid rgba(255, 255, 255, 0);\n"])), function (_a) { - var size = _a.size; - return size; -}, function (_a) { - var size = _a.size; - return size; -}, function (_a) { - var native = _a.native; - return (native ? 'white' : 'black'); -}, function (_a) { - var native = _a.native; - return (native ? 'white' : 'black'); -}, function (_a) { - var native = _a.native; - return (native ? 'white' : 'black'); -}); -function CurrencyLogo(_a) { - var _b, _c; - var currency = _a.currency, _d = _a.size, size = _d === void 0 ? '24px' : _d, style = _a.style, rest = __rest(_a, ["currency", "size", "style"]); - var logoURIs = useCurrencyLogoURIs(currency); - return (jsxRuntime.jsx(StyledLogo$1, __assign({ size: size, native: (_b = currency === null || currency === void 0 ? void 0 : currency.isNative) !== null && _b !== void 0 ? _b : false, srcs: logoURIs, alt: ((_c = currency === null || currency === void 0 ? void 0 : currency.symbol) !== null && _c !== void 0 ? _c : 'token') + " logo", style: style }, rest), void 0)); -} -var templateObject_1$J; - -var Wrapper$c = styled__default["default"].div(templateObject_1$I || (templateObject_1$I = __makeTemplateObject(["\n position: relative;\n display: flex;\n flex-direction: row;\n margin-left: ", ";\n"], ["\n position: relative;\n display: flex;\n flex-direction: row;\n margin-left: ", ";\n"])), function (_a) { - var sizeraw = _a.sizeraw, margin = _a.margin; - return margin && (sizeraw / 3 + 8).toString() + 'px'; -}); -var HigherLogo = styled__default["default"](CurrencyLogo)(templateObject_2$v || (templateObject_2$v = __makeTemplateObject(["\n z-index: 2;\n"], ["\n z-index: 2;\n"]))); -var CoveredLogo = styled__default["default"](CurrencyLogo)(templateObject_3$o || (templateObject_3$o = __makeTemplateObject(["\n position: absolute;\n left: ", " !important;\n"], ["\n position: absolute;\n left: ", " !important;\n"])), function (_a) { - var sizeraw = _a.sizeraw; - return '-' + (sizeraw / 2).toString() + 'px'; -}); -function DoubleCurrencyLogo(_a) { - var currency0 = _a.currency0, currency1 = _a.currency1, _b = _a.size, size = _b === void 0 ? 16 : _b, _c = _a.margin, margin = _c === void 0 ? false : _c; - return (jsxRuntime.jsxs(Wrapper$c, __assign({ sizeraw: size, margin: margin }, { children: [currency0 && jsxRuntime.jsx(HigherLogo, { currency: currency0, size: size.toString() + 'px' }, void 0), currency1 && jsxRuntime.jsx(CoveredLogo, { currency: currency1, size: size.toString() + 'px', sizeraw: size }, void 0)] }), void 0)); -} -var templateObject_1$I, templateObject_2$v, templateObject_3$o; - -/** - * Returns a WrappedTokenInfo from the active token lists when possible, - * or the passed token otherwise. */ -function useTokenInfoFromActiveList(currency) { - var chainId = useActiveWeb3React().chainId; - var activeList = useCombinedActiveList(); - return React.useMemo(function () { - if (!chainId) - return; - if (currency.isNative) - return currency; - try { - return activeList[chainId][currency.wrapped.address].token; - } - catch (e) { - return currency; - } - }, [activeList, chainId, currency]); -} - -var _line; - -function _extends$3() { _extends$3 = 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$3.apply(this, arguments); } +var POOL_STATE_INTERFACE = new abi$6.Interface(abi) +var PoolState +;(function (PoolState) { + PoolState[(PoolState['LOADING'] = 0)] = 'LOADING' + PoolState[(PoolState['NOT_EXISTS'] = 1)] = 'NOT_EXISTS' + PoolState[(PoolState['EXISTS'] = 2)] = 'EXISTS' + PoolState[(PoolState['INVALID'] = 3)] = 'INVALID' +})(PoolState || (PoolState = {})) +function usePools(poolKeys) { + var chainId = useActiveWeb3React().chainId + var transformed = React.useMemo( + function () { + return poolKeys.map(function (_a) { + var _b = __read(_a, 3), + currencyA = _b[0], + currencyB = _b[1], + feeAmount = _b[2] + if (!chainId || !currencyA || !currencyB || !feeAmount) return null + var tokenA = currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped + var tokenB = currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped + if (!tokenA || !tokenB || tokenA.equals(tokenB)) return null + var _c = __read(tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA], 2), + token0 = _c[0], + token1 = _c[1] + return [token0, token1, feeAmount] + }) + }, + [chainId, poolKeys] + ) + var poolAddresses = React.useMemo( + function () { + var v3CoreFactoryAddress = chainId && V3_CORE_FACTORY_ADDRESSES[chainId] + return transformed.map(function (value) { + if (!v3CoreFactoryAddress || !value) return undefined + return v3Sdk.computePoolAddress({ + factoryAddress: v3CoreFactoryAddress, + tokenA: value[0], + tokenB: value[1], + fee: value[2], + }) + }) + }, + [chainId, transformed] + ) + var slot0s = useMultipleContractSingleData(poolAddresses, POOL_STATE_INTERFACE, 'slot0') + var liquidities = useMultipleContractSingleData(poolAddresses, POOL_STATE_INTERFACE, 'liquidity') + return React.useMemo( + function () { + return poolKeys.map(function (_key, index) { + var _a + var _b = __read((_a = transformed[index]) !== null && _a !== void 0 ? _a : [], 3), + token0 = _b[0], + token1 = _b[1], + fee = _b[2] + if (!token0 || !token1 || !fee) return [PoolState.INVALID, null] + var _c = slot0s[index], + slot0 = _c.result, + slot0Loading = _c.loading, + slot0Valid = _c.valid + var _d = liquidities[index], + liquidity = _d.result, + liquidityLoading = _d.loading, + liquidityValid = _d.valid + if (!slot0Valid || !liquidityValid) return [PoolState.INVALID, null] + if (slot0Loading || liquidityLoading) return [PoolState.LOADING, null] + if (!slot0 || !liquidity) return [PoolState.NOT_EXISTS, null] + if (!slot0.sqrtPriceX96 || slot0.sqrtPriceX96.eq(0)) return [PoolState.NOT_EXISTS, null] + try { + return [PoolState.EXISTS, new v3Sdk.Pool(token0, token1, fee, slot0.sqrtPriceX96, liquidity[0], slot0.tick)] + } catch (error) { + console.error('Error when constructing the pool', error) + return [PoolState.NOT_EXISTS, null] + } + }) + }, + [liquidities, poolKeys, slot0s, transformed] + ) +} -var SvgDotLine = function SvgDotLine(props) { - return /*#__PURE__*/React__namespace.createElement("svg", _extends$3({ - width: "100%", - height: 35, - viewBox: "800 0 300 200", - xmlns: "http://www.w3.org/2000/svg" - }, props), _line || (_line = /*#__PURE__*/React__namespace.createElement("line", { - x1: 0, - x2: 2000, - y1: 100, - y2: 100, - stroke: "currentColor", - strokeWidth: 20, - strokeLinecap: "round", - strokeDasharray: "1, 45" - }))); -}; - -var Wrapper$b = styled__default["default"](rebass.Box)(templateObject_1$H || (templateObject_1$H = __makeTemplateObject(["\n align-items: center;\n width: 100%;\n"], ["\n align-items: center;\n width: 100%;\n"]))); -var RouteContainerRow = styled__default["default"](Row)(templateObject_2$u || (templateObject_2$u = __makeTemplateObject(["\n display: grid;\n grid-template-columns: 24px 1fr 24px;\n"], ["\n display: grid;\n grid-template-columns: 24px 1fr 24px;\n"]))); -var RouteRow = styled__default["default"](Row)(templateObject_3$n || (templateObject_3$n = __makeTemplateObject(["\n align-items: center;\n display: flex;\n justify-content: center;\n padding: 0.1rem 0.5rem;\n position: relative;\n"], ["\n align-items: center;\n display: flex;\n justify-content: center;\n padding: 0.1rem 0.5rem;\n position: relative;\n"]))); -var PoolBadge = styled__default["default"](Badge)(templateObject_4$f || (templateObject_4$f = __makeTemplateObject(["\n display: flex;\n padding: 4px 4px;\n"], ["\n display: flex;\n padding: 4px 4px;\n"]))); -var DottedLine = styled__default["default"].div(templateObject_5$d || (templateObject_5$d = __makeTemplateObject(["\n display: flex;\n align-items: center;\n position: absolute;\n width: calc(100%);\n z-index: 1;\n opacity: 0.5;\n"], ["\n display: flex;\n align-items: center;\n position: absolute;\n width: calc(100%);\n z-index: 1;\n opacity: 0.5;\n"]))); -var DotColor = styled__default["default"](SvgDotLine)(templateObject_6$9 || (templateObject_6$9 = __makeTemplateObject(["\n path {\n stroke: ", ";\n }\n"], ["\n path {\n stroke: ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.bg4; -}); -var OpaqueBadge = styled__default["default"](Badge)(templateObject_7$8 || (templateObject_7$8 = __makeTemplateObject(["\n background-color: ", ";\n border-radius: 8px;\n display: grid;\n font-size: 12px;\n grid-gap: 4px;\n grid-auto-flow: column;\n justify-content: start;\n padding: 4px 6px 4px 4px;\n z-index: ", ";\n"], ["\n background-color: ", ";\n border-radius: 8px;\n display: grid;\n font-size: 12px;\n grid-gap: 4px;\n grid-auto-flow: column;\n justify-content: start;\n padding: 4px 6px 4px 4px;\n z-index: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}, Z_INDEX.sticky); -var ProtocolBadge = styled__default["default"](Badge)(templateObject_8$5 || (templateObject_8$5 = __makeTemplateObject(["\n background-color: ", ";\n border-radius: 4px;\n color: ", ";\n font-size: 10px;\n padding: 2px 4px;\n z-index: ", ";\n"], ["\n background-color: ", ";\n border-radius: 4px;\n color: ", ";\n font-size: 10px;\n padding: 2px 4px;\n z-index: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg3; -}, function (_a) { - var theme = _a.theme; - return theme.text2; -}, Z_INDEX.sticky + 1); -var BadgeText = styled__default["default"](ThemedText.Small)(templateObject_9$5 || (templateObject_9$5 = __makeTemplateObject(["\n word-break: normal;\n"], ["\n word-break: normal;\n"]))); -function RoutingDiagram(_a) { - var currencyIn = _a.currencyIn, currencyOut = _a.currencyOut, routes = _a.routes; - var tokenIn = useTokenInfoFromActiveList(currencyIn); - var tokenOut = useTokenInfoFromActiveList(currencyOut); - return (jsxRuntime.jsx(Wrapper$b, { children: routes.map(function (entry, index) { return (jsxRuntime.jsxs(RouteContainerRow, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: tokenIn, size: '20px' }, void 0), jsxRuntime.jsx(Route, { entry: entry }, void 0), jsxRuntime.jsx(CurrencyLogo, { currency: tokenOut, size: '20px' }, void 0)] }, index)); }) }, void 0)); -} -function Route(_a) { - var _b = _a.entry, percent = _b.percent, path = _b.path, protocol = _b.protocol; - return (jsxRuntime.jsxs(RouteRow, { children: [jsxRuntime.jsx(DottedLine, { children: jsxRuntime.jsx(DotColor, {}, void 0) }, void 0), jsxRuntime.jsxs(OpaqueBadge, { children: [jsxRuntime.jsx(ProtocolBadge, { children: jsxRuntime.jsx(BadgeText, __assign({ fontSize: 12 }, { children: protocol.toUpperCase() }), void 0) }, void 0), jsxRuntime.jsxs(BadgeText, __assign({ fontSize: 14, style: { minWidth: 'auto' } }, { children: [percent.toSignificant(2), "%"] }), void 0)] }, void 0), jsxRuntime.jsx(AutoRow, __assign({ gap: "1px", width: "100%", style: { justifyContent: 'space-evenly', zIndex: 2 } }, { children: path.map(function (_a, index) { - var _b = __read(_a, 3), currency0 = _b[0], currency1 = _b[1], feeAmount = _b[2]; - return (jsxRuntime.jsx(Pool, { currency0: currency0, currency1: currency1, feeAmount: feeAmount }, index)); - }) }), void 0)] }, void 0)); -} -function Pool(_a) { - var currency0 = _a.currency0, currency1 = _a.currency1, feeAmount = _a.feeAmount; - var tokenInfo0 = useTokenInfoFromActiveList(currency0); - var tokenInfo1 = useTokenInfoFromActiveList(currency1); - // TODO - link pool icon to info.uniswap.org via query params - return (jsxRuntime.jsx(MouseoverTooltip, __assign({ text: jsxRuntime.jsxs(macro.Trans, { children: [(tokenInfo0 === null || tokenInfo0 === void 0 ? void 0 : tokenInfo0.symbol) + '/' + (tokenInfo1 === null || tokenInfo1 === void 0 ? void 0 : tokenInfo1.symbol) + ' ' + feeAmount / 10000, "% pool"] }, void 0) }, { children: jsxRuntime.jsxs(PoolBadge, { children: [jsxRuntime.jsx(rebass.Box, __assign({ margin: "0 4px 0 12px" }, { children: jsxRuntime.jsx(DoubleCurrencyLogo, { currency0: tokenInfo1, currency1: tokenInfo0, size: 20 }, void 0) }), void 0), jsxRuntime.jsxs(ThemedText.Small, __assign({ fontSize: 14 }, { children: [feeAmount / 10000, "%"] }), void 0)] }, void 0) }), void 0)); -} -var templateObject_1$H, templateObject_2$u, templateObject_3$n, templateObject_4$f, templateObject_5$d, templateObject_6$9, templateObject_7$8, templateObject_8$5, templateObject_9$5; - -var AUTO_ROUTER_SUPPORTED_CHAINS = Object.values(smartOrderRouter.ChainId); - -function useAutoRouterSupported() { - var chainId = useActiveWeb3React().chainId; - return Boolean(chainId && AUTO_ROUTER_SUPPORTED_CHAINS.includes(chainId)); -} - -var _defs, _path$2; - -function _extends$2() { _extends$2 = 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$2.apply(this, arguments); } +/** + * Returns all the existing pools that should be considered for swapping between an input currency and an output currency + * @param currencyIn the input currency + * @param currencyOut the output currency + */ +function useV3SwapPools(currencyIn, currencyOut) { + var chainId = useActiveWeb3React().chainId + var allCurrencyCombinations = useAllCurrencyCombinations(currencyIn, currencyOut) + var allCurrencyCombinationsWithAllFees = React.useMemo( + function () { + return allCurrencyCombinations.reduce(function (list, _a) { + var _b = __read(_a, 2), + tokenA = _b[0], + tokenB = _b[1] + return chainId === SupportedChainId.MAINNET + ? list.concat([ + [tokenA, tokenB, v3Sdk.FeeAmount.LOW], + [tokenA, tokenB, v3Sdk.FeeAmount.MEDIUM], + [tokenA, tokenB, v3Sdk.FeeAmount.HIGH], + ]) + : list.concat([ + [tokenA, tokenB, v3Sdk.FeeAmount.LOWEST], + [tokenA, tokenB, v3Sdk.FeeAmount.LOW], + [tokenA, tokenB, v3Sdk.FeeAmount.MEDIUM], + [tokenA, tokenB, v3Sdk.FeeAmount.HIGH], + ]) + }, []) + }, + [allCurrencyCombinations, chainId] + ) + var pools = usePools(allCurrencyCombinationsWithAllFees) + return React.useMemo( + function () { + return { + pools: pools + .filter(function (tuple) { + return tuple[0] === PoolState.EXISTS && tuple[1] !== null + }) + .map(function (_a) { + var _b = __read(_a, 2), + pool = _b[1] + return pool + }), + loading: pools.some(function (_a) { + var _b = __read(_a, 1), + state = _b[0] + return state === PoolState.LOADING + }), + } + }, + [pools] + ) +} -var SvgAutoRouter = function SvgAutoRouter(props) { - return /*#__PURE__*/React__namespace.createElement("svg", _extends$2({ - width: 23, - height: 20, - viewBox: "0 0 23 20", - fill: "none", - xmlns: "http://www.w3.org/2000/svg" - }, props), _defs || (_defs = /*#__PURE__*/React__namespace.createElement("defs", null, /*#__PURE__*/React__namespace.createElement("linearGradient", { - id: "gradient1", - x1: 0, - y1: 0, - x2: 1, - y2: 0, - gradientTransform: "rotate(95)" - }, /*#__PURE__*/React__namespace.createElement("stop", { - id: "stop1", - offset: 0, - stopColor: "#2274E2" - }), /*#__PURE__*/React__namespace.createElement("stop", { - id: "stop1", - offset: 0.5, - stopColor: "#2274E2" - }), /*#__PURE__*/React__namespace.createElement("stop", { - id: "stop2", - offset: 1, - stopColor: "#3FB672" - })))), _path$2 || (_path$2 = /*#__PURE__*/React__namespace.createElement("path", { - d: "M16 16C10 16 9 10 5 10M16 16C16 17.6569 17.3431 19 19 19C20.6569 19 22 17.6569 22 16C22 14.3431 20.6569 13 19 13C17.3431 13 16 14.3431 16 16ZM5 10C9 10 10 4 16 4M5 10H1.5M16 4C16 5.65685 17.3431 7 19 7C20.6569 7 22 5.65685 22 4C22 2.34315 20.6569 1 19 1C17.3431 1 16 2.34315 16 4Z", - strokeWidth: 2, - strokeLinecap: "round", - strokeLinejoin: "round", - stroke: "url(#gradient1)" - }))); -}; - -var _path$1; - -function _extends$1() { _extends$1 = 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$1.apply(this, arguments); } +/** + * Returns true if poolA is equivalent to poolB + * @param poolA one of the two pools + * @param poolB the other pool + */ +function poolEquals(poolA, poolB) { + return ( + poolA === poolB || + (poolA.token0.equals(poolB.token0) && poolA.token1.equals(poolB.token1) && poolA.fee === poolB.fee) + ) +} +function computeAllRoutes(currencyIn, currencyOut, pools, chainId, currentPath, allPaths, startCurrencyIn, maxHops) { + var e_1, _a + if (currentPath === void 0) { + currentPath = [] + } + if (allPaths === void 0) { + allPaths = [] + } + if (startCurrencyIn === void 0) { + startCurrencyIn = currencyIn + } + if (maxHops === void 0) { + maxHops = 2 + } + var tokenIn = currencyIn === null || currencyIn === void 0 ? void 0 : currencyIn.wrapped + var tokenOut = currencyOut === null || currencyOut === void 0 ? void 0 : currencyOut.wrapped + if (!tokenIn || !tokenOut) throw new Error('Missing tokenIn/tokenOut') + var _loop_1 = function (pool) { + if ( + !pool.involvesToken(tokenIn) || + currentPath.find(function (pathPool) { + return poolEquals(pool, pathPool) + }) + ) + return 'continue' + var outputToken = pool.token0.equals(tokenIn) ? pool.token1 : pool.token0 + if (outputToken.equals(tokenOut)) { + allPaths.push( + new v3Sdk.Route( + __spreadArray(__spreadArray([], __read(currentPath), false), [pool], false), + startCurrencyIn, + currencyOut + ) + ) + } else if (maxHops > 1) { + computeAllRoutes( + outputToken, + currencyOut, + pools, + chainId, + __spreadArray(__spreadArray([], __read(currentPath), false), [pool], false), + allPaths, + startCurrencyIn, + maxHops - 1 + ) + } + } + try { + for (var pools_1 = __values(pools), pools_1_1 = pools_1.next(); !pools_1_1.done; pools_1_1 = pools_1.next()) { + var pool = pools_1_1.value + _loop_1(pool) + } + } catch (e_1_1) { + e_1 = { error: e_1_1 } + } finally { + try { + if (pools_1_1 && !pools_1_1.done && (_a = pools_1.return)) _a.call(pools_1) + } finally { + if (e_1) throw e_1.error + } + } + return allPaths +} +/** + * Returns all the routes from an input currency to an output currency + * @param currencyIn the input currency + * @param currencyOut the output currency + */ +function useAllV3Routes(currencyIn, currencyOut) { + var chainId = useActiveWeb3React().chainId + var _a = useV3SwapPools(currencyIn, currencyOut), + pools = _a.pools, + poolsLoading = _a.loading + return React.useMemo( + function () { + if (poolsLoading || !chainId || !pools || !currencyIn || !currencyOut) return { loading: true, routes: [] } + var routes = computeAllRoutes(currencyIn, currencyOut, pools, chainId, [], [], currencyIn, 2) + return { loading: false, routes } + }, + [chainId, currencyIn, currencyOut, pools, poolsLoading] + ) +} -var SvgStaticRoute = function SvgStaticRoute(props) { - return /*#__PURE__*/React__namespace.createElement("svg", _extends$1({ - width: 20, - height: 20, - viewBox: "0 0 20 22", - fill: "none", - xmlns: "http://www.w3.org/2000/svg" - }, props), _path$1 || (_path$1 = /*#__PURE__*/React__namespace.createElement("path", { - d: "M19 18C19 18.5523 18.5523 19 18 19V21C19.6569 21 21 19.6569 21 18H19ZM18 19C17.4477 19 17 18.5523 17 18H15C15 19.6569 16.3431 21 18 21V19ZM17 18C17 17.4477 17.4477 17 18 17V15C16.3431 15 15 16.3431 15 18H17ZM18 17C18.5523 17 19 17.4477 19 18H21C21 16.3431 19.6569 15 18 15V17ZM8 7H16V5H8V7ZM16 11H8V13H16V11ZM8 19H16V17H8V19ZM4 15C4 17.2091 5.79086 19 8 19V17C6.89543 17 6 16.1046 6 15H4ZM8 11C5.79086 11 4 12.7909 4 15H6C6 13.8954 6.89543 13 8 13V11ZM18 9C18 10.1046 17.1046 11 16 11V13C18.2091 13 20 11.2091 20 9H18ZM16 7C17.1046 7 18 7.89543 18 9H20C20 6.79086 18.2091 5 16 5V7ZM7 6C7 6.55228 6.55228 7 6 7V9C7.65685 9 9 7.65685 9 6H7ZM6 7C5.44772 7 5 6.55228 5 6H3C3 7.65685 4.34315 9 6 9V7ZM5 6C5 5.44772 5.44772 5 6 5V3C4.34315 3 3 4.34315 3 6H5ZM6 5C6.55228 5 7 5.44772 7 6H9C9 4.34315 7.65685 3 6 3V5Z" - }))); -}; - -var StyledAutoRouterIcon = styled__default["default"](SvgAutoRouter)(templateObject_1$G || (templateObject_1$G = __makeTemplateObject(["\n height: 16px;\n width: 16px;\n\n :hover {\n filter: brightness(1.3);\n }\n"], ["\n height: 16px;\n width: 16px;\n\n :hover {\n filter: brightness(1.3);\n }\n"]))); -var StyledStaticRouterIcon = styled__default["default"](SvgStaticRoute)(templateObject_2$t || (templateObject_2$t = __makeTemplateObject(["\n height: 16px;\n width: 16px;\n\n fill: ", ";\n\n :hover {\n filter: brightness(1.3);\n }\n"], ["\n height: 16px;\n width: 16px;\n\n fill: ", ";\n\n :hover {\n filter: brightness(1.3);\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.text3; -}); -var StyledAutoRouterLabel = styled__default["default"](ThemedText.Black)(templateObject_3$m || (templateObject_3$m = __makeTemplateObject(["\n line-height: 1rem;\n\n /* fallback color */\n color: ", ";\n\n @supports (-webkit-background-clip: text) and (-webkit-text-fill-color: transparent) {\n background-image: linear-gradient(90deg, #2172e5 0%, #54e521 163.16%);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n }\n"], ["\n line-height: 1rem;\n\n /* fallback color */\n color: ", ";\n\n @supports (-webkit-background-clip: text) and (-webkit-text-fill-color: transparent) {\n background-image: linear-gradient(90deg, #2172e5 0%, #54e521 163.16%);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.green1; -}); -function AutoRouterLogo() { - var autoRouterSupported = useAutoRouterSupported(); - return autoRouterSupported ? jsxRuntime.jsx(StyledAutoRouterIcon, {}, void 0) : jsxRuntime.jsx(StyledStaticRouterIcon, {}, void 0); -} -function AutoRouterLabel() { - var autoRouterSupported = useAutoRouterSupported(); - return autoRouterSupported ? (jsxRuntime.jsx(StyledAutoRouterLabel, __assign({ fontSize: 14 }, { children: "Auto Router" }), void 0)) : (jsxRuntime.jsx(ThemedText.Black, __assign({ fontSize: 14 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Trade Route" }, void 0) }), void 0)); -} -var templateObject_1$G, templateObject_2$t, templateObject_3$m; - -var Wrapper$a = styled__default["default"](AutoColumn)(templateObject_1$F || (templateObject_1$F = __makeTemplateObject(["\n padding: ", ";\n border-radius: 16px;\n border: 1px solid ", ";\n cursor: pointer;\n"], ["\n padding: ", ";\n border-radius: 16px;\n border: 1px solid ", ";\n cursor: pointer;\n"])), function (_a) { - var fixedOpen = _a.fixedOpen; - return (fixedOpen ? '12px' : '12px 8px 12px 12px'); -}, function (_a) { - var theme = _a.theme, fixedOpen = _a.fixedOpen; - return (fixedOpen ? 'transparent' : theme.bg2); -}); -var OpenCloseIcon = styled__default["default"](reactFeather.Plus)(templateObject_2$s || (templateObject_2$s = __makeTemplateObject(["\n margin-left: 8px;\n height: 20px;\n stroke-width: 2px;\n transition: transform 0.1s;\n transform: ", ";\n stroke: ", ";\n cursor: pointer;\n :hover {\n opacity: 0.8;\n }\n"], ["\n margin-left: 8px;\n height: 20px;\n stroke-width: 2px;\n transition: transform 0.1s;\n transform: ", ";\n stroke: ", ";\n cursor: pointer;\n :hover {\n opacity: 0.8;\n }\n"])), function (_a) { - var open = _a.open; - return (open ? 'rotate(45deg)' : 'none'); -}, function (_a) { - var theme = _a.theme; - return theme.text3; -}); -var V2_DEFAULT_FEE_TIER = 3000; -var SwapRoute = React.memo(function SwapRoute(_a) { - var trade = _a.trade, syncing = _a.syncing, _b = _a.fixedOpen, fixedOpen = _b === void 0 ? false : _b, rest = __rest(_a, ["trade", "syncing", "fixedOpen"]); - var autoRouterSupported = useAutoRouterSupported(); - var routes = getTokenPath(trade); - var _c = __read(React.useState(false), 2), open = _c[0], setOpen = _c[1]; - var chainId = useActiveWeb3React().chainId; - var _d = __read(useDarkModeManager(), 1), darkMode = _d[0]; - var formattedGasPriceString = (trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) - ? trade.gasUseEstimateUSD.toFixed(2) === '0.00' - ? '<$0.01' - : '$' + trade.gasUseEstimateUSD.toFixed(2) - : undefined; - return (jsxRuntime.jsxs(Wrapper$a, __assign({}, rest, { darkMode: darkMode, fixedOpen: fixedOpen }, { children: [jsxRuntime.jsxs(RowBetween, __assign({ onClick: function () { return setOpen(!open); } }, { children: [jsxRuntime.jsxs(AutoRow, __assign({ gap: "4px", width: "auto" }, { children: [jsxRuntime.jsx(AutoRouterLogo, {}, void 0), jsxRuntime.jsx(AutoRouterLabel, {}, void 0)] }), void 0), fixedOpen ? null : jsxRuntime.jsx(OpenCloseIcon, { open: open }, void 0)] }), void 0), jsxRuntime.jsx(AnimatedDropdown, __assign({ open: open || fixedOpen }, { children: jsxRuntime.jsxs(AutoRow, __assign({ gap: "4px", width: "auto", style: { paddingTop: '12px', margin: 0 } }, { children: [syncing ? (jsxRuntime.jsx(LoadingRows, { children: jsxRuntime.jsx("div", { style: { width: '400px', height: '30px' } }, void 0) }, void 0)) : (jsxRuntime.jsx(RoutingDiagram, { currencyIn: trade.inputAmount.currency, currencyOut: trade.outputAmount.currency, routes: routes }, void 0)), autoRouterSupported && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(Separator$1, {}, void 0), syncing ? (jsxRuntime.jsx(LoadingRows, { children: jsxRuntime.jsx("div", { style: { width: '250px', height: '15px' } }, void 0) }, void 0)) : (jsxRuntime.jsxs(ThemedText.Main, __assign({ fontSize: 12, width: 400, margin: 0 }, { children: [(trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) && chainId && SUPPORTED_GAS_ESTIMATE_CHAIN_IDS.includes(chainId) ? (jsxRuntime.jsxs(macro.Trans, { children: ["Best price route costs ~", formattedGasPriceString, " in gas. "] }, void 0)) : null, ' ', jsxRuntime.jsx(macro.Trans, { children: "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step." }, void 0)] }), void 0))] }, void 0))] }), void 0) }), void 0)] }), void 0)); -}); -function getTokenPath(trade) { - return trade.swaps.map(function (_a) { - var _b = _a.route, tokenPath = _b.path, pools = _b.pools, protocol = _b.protocol, inputAmount = _a.inputAmount, outputAmount = _a.outputAmount; - var portion = trade.tradeType === sdkCore.TradeType.EXACT_INPUT - ? inputAmount.divide(trade.inputAmount) - : outputAmount.divide(trade.outputAmount); - var percent = new sdkCore.Percent(portion.numerator, portion.denominator); - var path = []; - for (var i = 0; i < pools.length; i++) { - var nextPool = pools[i]; - var tokenIn = tokenPath[i]; - var tokenOut = tokenPath[i + 1]; - var entry = [ - tokenIn, - tokenOut, - nextPool instanceof v2Sdk.Pair ? V2_DEFAULT_FEE_TIER : nextPool.fee, - ]; - path.push(entry); - } - return { - percent: percent, - path: path, - protocol: protocol, - }; - }); -} -var templateObject_1$F, templateObject_2$s; - -var GasWrapper = styled__default["default"](RowFixed)(templateObject_1$E || (templateObject_1$E = __makeTemplateObject(["\n border-radius: 8px;\n padding: 4px 6px;\n height: 24px;\n color: ", ";\n background-color: ", ";\n font-size: 14px;\n font-weight: 500;\n user-select: none;\n"], ["\n border-radius: 8px;\n padding: 4px 6px;\n height: 24px;\n color: ", ";\n background-color: ", ";\n font-size: 14px;\n font-weight: 500;\n user-select: none;\n"])), function (_a) { - var theme = _a.theme; - return theme.text3; -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}); -var StyledGasIcon = styled__default["default"](SvgGasIcon)(templateObject_2$r || (templateObject_2$r = __makeTemplateObject(["\n margin-right: 4px;\n height: 14px;\n & > * {\n stroke: ", ";\n }\n"], ["\n margin-right: 4px;\n height: 14px;\n & > * {\n stroke: ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.text3; -}); -function GasEstimateBadge(_a) { - var _b; - var trade = _a.trade, loading = _a.loading, showRoute = _a.showRoute, disableHover = _a.disableHover; - var formattedGasPriceString = (trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) - ? trade.gasUseEstimateUSD.toFixed(2) === '0.00' - ? '<$0.01' - : '$' + trade.gasUseEstimateUSD.toFixed(2) - : undefined; - return (jsxRuntime.jsx(MouseoverTooltipContent, __assign({ wrap: false, disableHover: disableHover, content: loading ? null : (jsxRuntime.jsx(ResponsiveTooltipContainer, __assign({ origin: "top right", style: { - padding: showRoute ? '0' : '12px', - border: 'none', - borderRadius: showRoute ? '16px' : '12px', - maxWidth: '400px', - } }, { children: showRoute ? (trade ? (jsxRuntime.jsx(SwapRoute, { trade: trade, syncing: loading, fixedOpen: showRoute }, void 0)) : null) : (jsxRuntime.jsxs(AutoColumn, __assign({ gap: "4px", justify: "center" }, { children: [jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: "12px", textAlign: "center" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Estimated network fee" }, void 0) }), void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ textAlign: "center", fontWeight: 500, style: { userSelect: 'none' } }, { children: jsxRuntime.jsxs(macro.Trans, { children: ["$", (_b = trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) === null || _b === void 0 ? void 0 : _b.toFixed(2)] }, void 0) }), void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: "10px", textAlign: "center", maxWidth: "140px", color: "text3" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Estimate may differ due to your wallet gas settings" }, void 0) }), void 0)] }), void 0)) }), void 0)), placement: "bottom", onOpen: function () { - return ReactGA__default["default"].event({ - category: 'Gas', - action: 'Gas Details Tooltip Open', - }); - } }, { children: jsxRuntime.jsx(LoadingOpacityContainer, __assign({ "$loading": loading }, { children: jsxRuntime.jsxs(GasWrapper, { children: [jsxRuntime.jsx(StyledGasIcon, {}, void 0), formattedGasPriceString !== null && formattedGasPriceString !== void 0 ? formattedGasPriceString : null] }, void 0) }), void 0) }), void 0)); -} -var templateObject_1$E, templateObject_2$r; - -var Wrapper$9 = styled__default["default"](Row)(templateObject_1$D || (templateObject_1$D = __makeTemplateObject(["\n width: 100%;\n justify-content: center;\n"], ["\n width: 100%;\n justify-content: center;\n"]))); -var StyledInfoIcon = styled__default["default"](reactFeather.Info)(templateObject_2$q || (templateObject_2$q = __makeTemplateObject(["\n height: 16px;\n width: 16px;\n margin-right: 4px;\n color: ", ";\n"], ["\n height: 16px;\n width: 16px;\n margin-right: 4px;\n color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.text3; -}); -var StyledCard = styled__default["default"](OutlineCard)(templateObject_3$l || (templateObject_3$l = __makeTemplateObject(["\n padding: 12px;\n border: 1px solid ", ";\n"], ["\n padding: 12px;\n border: 1px solid ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}); -var StyledHeaderRow = styled__default["default"](RowBetween)(templateObject_4$e || (templateObject_4$e = __makeTemplateObject(["\n padding: 4px 8px;\n border-radius: 12px;\n background-color: ", ";\n align-items: center;\n cursor: ", ";\n min-height: 40px;\n\n :hover {\n background-color: ", ";\n }\n"], ["\n padding: 4px 8px;\n border-radius: 12px;\n background-color: ", ";\n align-items: center;\n cursor: ", ";\n min-height: 40px;\n\n :hover {\n background-color: ", ";\n }\n"])), function (_a) { - var open = _a.open, theme = _a.theme; - return (open ? theme.bg1 : 'transparent'); -}, function (_a) { - var disabled = _a.disabled; - return (disabled ? 'initial' : 'pointer'); -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return (disabled ? theme.bg1 : polished.darken(0.015, theme.bg1)); -}); -var RotatingArrow = styled__default["default"](reactFeather.ChevronDown)(templateObject_5$c || (templateObject_5$c = __makeTemplateObject(["\n transform: ", ";\n transition: transform 0.1s linear;\n"], ["\n transform: ", ";\n transition: transform 0.1s linear;\n"])), function (_a) { - var open = _a.open; - return (open ? 'rotate(180deg)' : 'none'); -}); -var StyledPolling = styled__default["default"].div(templateObject_7$7 || (templateObject_7$7 = __makeTemplateObject(["\n display: flex;\n height: 16px;\n width: 16px;\n margin-right: 2px;\n margin-left: 10px;\n align-items: center;\n color: ", ";\n transition: 250ms ease color;\n\n ", "\n"], ["\n display: flex;\n height: 16px;\n width: 16px;\n margin-right: 2px;\n margin-left: 10px;\n align-items: center;\n color: ", ";\n transition: 250ms ease color;\n\n ", "\n"])), function (_a) { - var theme = _a.theme; - return theme.text1; -}, function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToMedium(templateObject_6$8 || (templateObject_6$8 = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); -}); -var StyledPollingDot = styled__default["default"].div(templateObject_8$4 || (templateObject_8$4 = __makeTemplateObject(["\n width: 8px;\n height: 8px;\n min-height: 8px;\n min-width: 8px;\n border-radius: 50%;\n position: relative;\n background-color: ", ";\n transition: 250ms ease background-color;\n"], ["\n width: 8px;\n height: 8px;\n min-height: 8px;\n min-width: 8px;\n border-radius: 50%;\n position: relative;\n background-color: ", ";\n transition: 250ms ease background-color;\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}); -var rotate360 = styled.keyframes(templateObject_9$4 || (templateObject_9$4 = __makeTemplateObject(["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"], ["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"]))); -var Spinner = styled__default["default"].div(templateObject_10$4 || (templateObject_10$4 = __makeTemplateObject(["\n animation: ", " 1s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n transform: translateZ(0);\n border-top: 1px solid transparent;\n border-right: 1px solid transparent;\n border-bottom: 1px solid transparent;\n border-left: 2px solid ", ";\n background: transparent;\n width: 14px;\n height: 14px;\n border-radius: 50%;\n position: relative;\n transition: 250ms ease border-color;\n left: -3px;\n top: -3px;\n"], ["\n animation: ", " 1s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n transform: translateZ(0);\n border-top: 1px solid transparent;\n border-right: 1px solid transparent;\n border-bottom: 1px solid transparent;\n border-left: 2px solid ", ";\n background: transparent;\n width: 14px;\n height: 14px;\n border-radius: 50%;\n position: relative;\n transition: 250ms ease border-color;\n left: -3px;\n top: -3px;\n"])), rotate360, function (_a) { - var theme = _a.theme; - return theme.text1; -}); -function SwapDetailsDropdown(_a) { - var trade = _a.trade, syncing = _a.syncing, loading = _a.loading, showInverted = _a.showInverted, setShowInverted = _a.setShowInverted, allowedSlippage = _a.allowedSlippage; - var theme = styled.useTheme(); - var chainId = useActiveWeb3React().chainId; - var _b = __read(React.useState(false), 2), showDetails = _b[0], setShowDetails = _b[1]; - return (jsxRuntime.jsx(Wrapper$9, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: '8px', style: { width: '100%', marginBottom: '-8px' } }, { children: [jsxRuntime.jsxs(StyledHeaderRow, __assign({ onClick: function () { return setShowDetails(!showDetails); }, disabled: !trade, open: showDetails }, { children: [jsxRuntime.jsxs(RowFixed, __assign({ style: { position: 'relative' } }, { children: [loading || syncing ? (jsxRuntime.jsx(StyledPolling, { children: jsxRuntime.jsx(StyledPollingDot, { children: jsxRuntime.jsx(Spinner, {}, void 0) }, void 0) }, void 0)) : (jsxRuntime.jsx(HideSmall, { children: jsxRuntime.jsx(MouseoverTooltipContent, __assign({ wrap: false, content: jsxRuntime.jsx(ResponsiveTooltipContainer, __assign({ origin: "top right", style: { padding: '0' } }, { children: jsxRuntime.jsx(Card, __assign({ padding: "12px" }, { children: jsxRuntime.jsx(AdvancedSwapDetails, { trade: trade, allowedSlippage: allowedSlippage, syncing: syncing }, void 0) }), void 0) }), void 0), placement: "bottom", disableHover: showDetails }, { children: jsxRuntime.jsx(StyledInfoIcon, { color: trade ? theme.text3 : theme.bg3 }, void 0) }), void 0) }, void 0)), trade ? (jsxRuntime.jsx(LoadingOpacityContainer, __assign({ "$loading": syncing }, { children: jsxRuntime.jsx(TradePrice, { price: trade.executionPrice, showInverted: showInverted, setShowInverted: setShowInverted }, void 0) }), void 0)) : loading || syncing ? (jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: 14 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Fetching best price..." }, void 0) }), void 0)) : null] }), void 0), jsxRuntime.jsxs(RowFixed, { children: [!(trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) || - showDetails || - !chainId || - !SUPPORTED_GAS_ESTIMATE_CHAIN_IDS.includes(chainId) ? null : (jsxRuntime.jsx(GasEstimateBadge, { trade: trade, loading: syncing || loading, showRoute: !showDetails, disableHover: showDetails }, void 0)), jsxRuntime.jsx(RotatingArrow, { stroke: trade ? theme.text3 : theme.bg3, open: Boolean(trade && showDetails) }, void 0)] }, void 0)] }), void 0), jsxRuntime.jsx(AnimatedDropdown, __assign({ open: showDetails }, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: '8px', style: { padding: '0', paddingBottom: '8px' } }, { children: [trade ? (jsxRuntime.jsx(StyledCard, { children: jsxRuntime.jsx(AdvancedSwapDetails, { trade: trade, allowedSlippage: allowedSlippage, syncing: syncing }, void 0) }, void 0)) : null, trade ? jsxRuntime.jsx(SwapRoute, { trade: trade, syncing: syncing }, void 0) : null] }), void 0) }), void 0)] }), void 0) }, void 0)); -} -var templateObject_1$D, templateObject_2$q, templateObject_3$l, templateObject_4$e, templateObject_5$c, templateObject_6$8, templateObject_7$7, templateObject_8$4, templateObject_9$4, templateObject_10$4; - -var BaseButton = styled__default["default"](styledComponents.Button)(templateObject_1$C || (templateObject_1$C = __makeTemplateObject(["\n padding: ", ";\n width: ", ";\n font-weight: 500;\n text-align: center;\n border-radius: ", ";\n outline: none;\n border: 1px solid transparent;\n color: ", ";\n text-decoration: none;\n display: flex;\n justify-content: center;\n flex-wrap: nowrap;\n align-items: center;\n cursor: pointer;\n position: relative;\n z-index: 1;\n &:disabled {\n opacity: 50%;\n cursor: auto;\n pointer-events: none;\n }\n\n will-change: transform;\n transition: transform 450ms ease;\n transform: perspective(1px) translateZ(0);\n\n > * {\n user-select: none;\n }\n\n > a {\n text-decoration: none;\n }\n"], ["\n padding: ", ";\n width: ", ";\n font-weight: 500;\n text-align: center;\n border-radius: ", ";\n outline: none;\n border: 1px solid transparent;\n color: ", ";\n text-decoration: none;\n display: flex;\n justify-content: center;\n flex-wrap: nowrap;\n align-items: center;\n cursor: pointer;\n position: relative;\n z-index: 1;\n &:disabled {\n opacity: 50%;\n cursor: auto;\n pointer-events: none;\n }\n\n will-change: transform;\n transition: transform 450ms ease;\n transform: perspective(1px) translateZ(0);\n\n > * {\n user-select: none;\n }\n\n > a {\n text-decoration: none;\n }\n"])), function (_a) { - var padding = _a.padding; - return padding !== null && padding !== void 0 ? padding : '16px'; -}, function (_a) { - var width = _a.width; - return width !== null && width !== void 0 ? width : '100%'; -}, function (_a) { - var $borderRadius = _a.$borderRadius; - return $borderRadius !== null && $borderRadius !== void 0 ? $borderRadius : '20px'; -}, function (_a) { - var theme = _a.theme; - return theme.text1; -}); -var ButtonPrimary = styled__default["default"](BaseButton)(templateObject_2$p || (templateObject_2$p = __makeTemplateObject(["\n background-color: ", ";\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n background-color: ", ";\n color: ", ";\n cursor: auto;\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n"], ["\n background-color: ", ";\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n background-color: ", ";\n color: ", ";\n cursor: auto;\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.primary1; -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.05, theme.primary1); -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.05, theme.primary1); -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.05, theme.primary1); -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.1, theme.primary1); -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.1, theme.primary1); -}, function (_a) { - var theme = _a.theme, altDisabledStyle = _a.altDisabledStyle, disabled = _a.disabled; - return altDisabledStyle ? (disabled ? theme.primary1 : theme.bg2) : theme.bg2; -}, function (_a) { - var altDisabledStyle = _a.altDisabledStyle, disabled = _a.disabled, theme = _a.theme; - return altDisabledStyle ? (disabled ? theme.white : theme.text2) : theme.text2; -}); -var ButtonLight = styled__default["default"](BaseButton)(templateObject_3$k || (templateObject_3$k = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n font-size: 16px;\n font-weight: 500;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n :disabled {\n opacity: 0.4;\n :hover {\n cursor: auto;\n background-color: ", ";\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n }\n"], ["\n background-color: ", ";\n color: ", ";\n font-size: 16px;\n font-weight: 500;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n :disabled {\n opacity: 0.4;\n :hover {\n cursor: auto;\n background-color: ", ";\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.primary5; -}, function (_a) { - var theme = _a.theme; - return theme.primaryText1; -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return !disabled && polished.darken(0.03, theme.primary5); -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return !disabled && polished.darken(0.03, theme.primary5); -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return !disabled && polished.darken(0.03, theme.primary5); -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return !disabled && polished.darken(0.05, theme.primary5); -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return !disabled && polished.darken(0.05, theme.primary5); -}, function (_a) { - var theme = _a.theme; - return theme.primary5; -}); -var ButtonGray = styled__default["default"](BaseButton)(templateObject_4$d || (templateObject_4$d = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n font-size: 16px;\n font-weight: 500;\n\n &:hover {\n background-color: ", ";\n }\n &:active {\n background-color: ", ";\n }\n"], ["\n background-color: ", ";\n color: ", ";\n font-size: 16px;\n font-weight: 500;\n\n &:hover {\n background-color: ", ";\n }\n &:active {\n background-color: ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var theme = _a.theme; - return theme.text2; -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return !disabled && polished.darken(0.05, theme.bg2); -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return !disabled && polished.darken(0.1, theme.bg2); -}); -styled__default["default"](BaseButton)(templateObject_5$b || (templateObject_5$b = __makeTemplateObject(["\n border: 1px solid ", ";\n color: ", ";\n background-color: transparent;\n font-size: 16px;\n border-radius: 12px;\n padding: ", ";\n\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n border: 1px solid ", ";\n }\n &:hover {\n border: 1px solid ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n border: 1px solid ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n a:hover {\n text-decoration: none;\n }\n"], ["\n border: 1px solid ", ";\n color: ", ";\n background-color: transparent;\n font-size: 16px;\n border-radius: 12px;\n padding: ", ";\n\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n border: 1px solid ", ";\n }\n &:hover {\n border: 1px solid ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n border: 1px solid ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n a:hover {\n text-decoration: none;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.primary4; -}, function (_a) { - var theme = _a.theme; - return theme.primary1; -}, function (_a) { - var padding = _a.padding; - return (padding ? padding : '10px'); -}, function (_a) { - var theme = _a.theme; - return theme.primary4; -}, function (_a) { - var theme = _a.theme; - return theme.primary3; -}, function (_a) { - var theme = _a.theme; - return theme.primary3; -}, function (_a) { - var theme = _a.theme; - return theme.primary4; -}, function (_a) { - var theme = _a.theme; - return theme.primary3; -}); -var ButtonOutlined = styled__default["default"](BaseButton)(templateObject_6$7 || (templateObject_6$7 = __makeTemplateObject(["\n border: 1px solid ", ";\n background-color: transparent;\n color: ", ";\n &:focus {\n box-shadow: 0 0 0 1px ", ";\n }\n &:hover {\n box-shadow: 0 0 0 1px ", ";\n }\n &:active {\n box-shadow: 0 0 0 1px ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"], ["\n border: 1px solid ", ";\n background-color: transparent;\n color: ", ";\n &:focus {\n box-shadow: 0 0 0 1px ", ";\n }\n &:hover {\n box-shadow: 0 0 0 1px ", ";\n }\n &:active {\n box-shadow: 0 0 0 1px ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}, function (_a) { - var theme = _a.theme; - return theme.text1; -}, function (_a) { - var theme = _a.theme; - return theme.bg4; -}, function (_a) { - var theme = _a.theme; - return theme.bg4; -}, function (_a) { - var theme = _a.theme; - return theme.bg4; -}); -styled__default["default"](BaseButton)(templateObject_7$6 || (templateObject_7$6 = __makeTemplateObject(["\n background-color: ", ";\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n background-color: ", ";\n opacity: 50%;\n cursor: auto;\n }\n"], ["\n background-color: ", ";\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n background-color: ", ";\n opacity: 50%;\n cursor: auto;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.yellow3; -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.05, theme.yellow3); -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.05, theme.yellow3); -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.05, theme.yellow3); -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.1, theme.yellow3); -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.1, theme.yellow3); -}, function (_a) { - var theme = _a.theme; - return theme.yellow3; -}); -var ButtonEmpty = styled__default["default"](BaseButton)(templateObject_8$3 || (templateObject_8$3 = __makeTemplateObject(["\n background-color: transparent;\n color: ", ";\n display: flex;\n justify-content: center;\n align-items: center;\n\n &:focus {\n text-decoration: underline;\n }\n &:hover {\n text-decoration: none;\n }\n &:active {\n text-decoration: none;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"], ["\n background-color: transparent;\n color: ", ";\n display: flex;\n justify-content: center;\n align-items: center;\n\n &:focus {\n text-decoration: underline;\n }\n &:hover {\n text-decoration: none;\n }\n &:active {\n text-decoration: none;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.primary1; -}); -styled__default["default"](BaseButton)(templateObject_9$3 || (templateObject_9$3 = __makeTemplateObject(["\n padding: 0;\n width: fit-content;\n background: none;\n text-decoration: none;\n &:focus {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n text-decoration: underline;\n }\n &:hover {\n // text-decoration: underline;\n opacity: 0.9;\n }\n &:active {\n text-decoration: underline;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"], ["\n padding: 0;\n width: fit-content;\n background: none;\n text-decoration: none;\n &:focus {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n text-decoration: underline;\n }\n &:hover {\n // text-decoration: underline;\n opacity: 0.9;\n }\n &:active {\n text-decoration: underline;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"]))); -var ButtonConfirmedStyle = styled__default["default"](BaseButton)(templateObject_10$3 || (templateObject_10$3 = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n /* border: 1px solid ", "; */\n\n &:disabled {\n opacity: 50%;\n background-color: ", ";\n color: ", ";\n cursor: auto;\n }\n"], ["\n background-color: ", ";\n color: ", ";\n /* border: 1px solid ", "; */\n\n &:disabled {\n opacity: 50%;\n background-color: ", ";\n color: ", ";\n cursor: auto;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.bg3; -}, function (_a) { - var theme = _a.theme; - return theme.text1; -}, function (_a) { - var theme = _a.theme; - return theme.green1; -}, function (_a) { - var theme = _a.theme; - return theme.bg2; -}, function (_a) { - var theme = _a.theme; - return theme.text2; -}); -var ButtonErrorStyle = styled__default["default"](BaseButton)(templateObject_11$3 || (templateObject_11$3 = __makeTemplateObject(["\n background-color: ", ";\n border: 1px solid ", ";\n\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n box-shadow: none;\n background-color: ", ";\n border: 1px solid ", ";\n }\n"], ["\n background-color: ", ";\n border: 1px solid ", ";\n\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n box-shadow: none;\n background-color: ", ";\n border: 1px solid ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.red1; -}, function (_a) { - var theme = _a.theme; - return theme.red1; -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.05, theme.red1); -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.05, theme.red1); -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.05, theme.red1); -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.1, theme.red1); -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.1, theme.red1); -}, function (_a) { - var theme = _a.theme; - return theme.red1; -}, function (_a) { - var theme = _a.theme; - return theme.red1; -}); -function ButtonConfirmed(_a) { - var confirmed = _a.confirmed, altDisabledStyle = _a.altDisabledStyle, rest = __rest(_a, ["confirmed", "altDisabledStyle"]); - if (confirmed) { - return jsxRuntime.jsx(ButtonConfirmedStyle, __assign({}, rest), void 0); - } - else { - return jsxRuntime.jsx(ButtonPrimary, __assign({}, rest, { altDisabledStyle: altDisabledStyle }), void 0); - } -} -function ButtonError(_a) { - var error = _a.error, rest = __rest(_a, ["error"]); - if (error) { - return jsxRuntime.jsx(ButtonErrorStyle, __assign({}, rest), void 0); - } - else { - return jsxRuntime.jsx(ButtonPrimary, __assign({}, rest), void 0); - } -} -styled__default["default"](ButtonOutlined)(templateObject_12$3 || (templateObject_12$3 = __makeTemplateObject(["\n border: 1px solid;\n border-color: ", ";\n"], ["\n border: 1px solid;\n border-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.primary1; -}); -styled__default["default"].div(templateObject_13 || (templateObject_13 = __makeTemplateObject(["\n height: 17px;\n width: 17px;\n border-radius: 50%;\n background-color: ", ";\n display: flex;\n align-items: center;\n justify-content: center;\n"], ["\n height: 17px;\n width: 17px;\n border-radius: 50%;\n background-color: ", ";\n display: flex;\n align-items: center;\n justify-content: center;\n"])), function (_a) { - var theme = _a.theme; - return theme.primary1; -}); -styled__default["default"].div(templateObject_14 || (templateObject_14 = __makeTemplateObject(["\n width: 20px;\n padding: 0 10px;\n position: absolute;\n top: 11px;\n right: 15px;\n"], ["\n width: 20px;\n padding: 0 10px;\n position: absolute;\n top: 11px;\n right: 15px;\n"]))); -styled__default["default"](reactFeather.Check)(templateObject_15 || (templateObject_15 = __makeTemplateObject(["\n size: 13px;\n"], ["\n size: 13px;\n"]))); -var templateObject_1$C, templateObject_2$p, templateObject_3$k, templateObject_4$d, templateObject_5$b, templateObject_6$7, templateObject_7$6, templateObject_8$3, templateObject_9$3, templateObject_10$3, templateObject_11$3, templateObject_12$3, templateObject_13, templateObject_14, templateObject_15; - -var parser = new uaParserJs.UAParser(window.navigator.userAgent); -var type$1 = parser.getDevice().type; -parser.getResult(); -var isMobile = type$1 === 'mobile' || type$1 === 'tablet'; - -var AnimatedDialogOverlay = reactSpring.animated(dialog.DialogOverlay); -// eslint-disable-next-line @typescript-eslint/no-unused-vars -var StyledDialogOverlay = styled__default["default"](AnimatedDialogOverlay)(templateObject_1$B || (templateObject_1$B = __makeTemplateObject(["\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: ", ";\n }\n"], ["\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: ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.modalBG; -}); -var AnimatedDialogContent = reactSpring.animated(dialog.DialogContent); -// destructure to not pass custom props to Dialog DOM element -// eslint-disable-next-line @typescript-eslint/no-unused-vars -var StyledDialogContent = styled__default["default"](function (_a) { - _a.minHeight; _a.maxHeight; _a.mobile; _a.isOpen; var rest = __rest(_a, ["minHeight", "maxHeight", "mobile", "isOpen"]); - return (jsxRuntime.jsx(AnimatedDialogContent, __assign({}, rest), void 0)); -}).attrs({ - 'aria-label': 'dialog', -})(templateObject_7$5 || (templateObject_7$5 = __makeTemplateObject(["\n overflow-y: auto;\n\n &[data-reach-dialog-content] {\n margin: 0 0 2rem 0;\n background-color: ", ";\n border: 1px solid ", ";\n box-shadow: 0 4px 8px 0 ", ";\n padding: 0px;\n width: 50vw;\n overflow-y: auto;\n overflow-x: hidden;\n\n align-self: ", ";\n\n max-width: 420px;\n ", "\n ", "\n display: flex;\n border-radius: 20px;\n ", "\n ", "\n }\n"], ["\n overflow-y: auto;\n\n &[data-reach-dialog-content] {\n margin: 0 0 2rem 0;\n background-color: ", ";\n border: 1px solid ", ";\n box-shadow: 0 4px 8px 0 ", ";\n padding: 0px;\n width: 50vw;\n overflow-y: auto;\n overflow-x: hidden;\n\n align-self: ", ";\n\n max-width: 420px;\n ", "\n ", "\n display: flex;\n border-radius: 20px;\n ", "\n ", "\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.bg0; -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var theme = _a.theme; - return polished.transparentize(0.95, theme.shadow1); -}, function (_a) { - var mobile = _a.mobile; - return (mobile ? 'flex-end' : 'center'); -}, function (_a) { - var maxHeight = _a.maxHeight; - return maxHeight && styled.css(templateObject_2$o || (templateObject_2$o = __makeTemplateObject(["\n max-height: ", "vh;\n "], ["\n max-height: ", "vh;\n "])), maxHeight); -}, function (_a) { - var minHeight = _a.minHeight; - return minHeight && styled.css(templateObject_3$j || (templateObject_3$j = __makeTemplateObject(["\n min-height: ", "vh;\n "], ["\n min-height: ", "vh;\n "])), minHeight); -}, function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToMedium(templateObject_4$c || (templateObject_4$c = __makeTemplateObject(["\n width: 65vw;\n margin: 0;\n "], ["\n width: 65vw;\n margin: 0;\n "]))); -}, function (_a) { - var theme = _a.theme, mobile = _a.mobile; - return theme.mediaWidth.upToSmall(templateObject_6$6 || (templateObject_6$6 = __makeTemplateObject(["\n width: 85vw;\n ", "\n "], ["\n width: 85vw;\n ", "\n "])), mobile && styled.css(templateObject_5$a || (templateObject_5$a = __makeTemplateObject(["\n width: 100vw;\n border-radius: 20px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n "], ["\n width: 100vw;\n border-radius: 20px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n "])))); -}); -function Modal(_a) { - var isOpen = _a.isOpen, onDismiss = _a.onDismiss, _b = _a.minHeight, minHeight = _b === void 0 ? false : _b, _c = _a.maxHeight, maxHeight = _c === void 0 ? 90 : _c, initialFocusRef = _a.initialFocusRef, children = _a.children; - var fadeTransition = reactSpring.useTransition(isOpen, null, { - config: { duration: 200 }, - from: { opacity: 0 }, - enter: { opacity: 1 }, - leave: { opacity: 0 }, - }); - var _d = __read(reactSpring.useSpring(function () { return ({ y: 0, config: { mass: 1, tension: 210, friction: 20 } }); }), 2), y = _d[0].y, set = _d[1]; - var bind = reactUseGesture.useGesture({ - onDrag: function (state) { - set({ - y: state.down ? state.movement[1] : 0, - }); - if (state.movement[1] > 300 || (state.velocity > 3 && state.direction[1] > 0)) { - onDismiss(); - } - }, - }); - return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: fadeTransition.map(function (_a) { - var item = _a.item, key = _a.key, props = _a.props; - return item && (jsxRuntime.jsx(StyledDialogOverlay, __assign({ style: props, onDismiss: onDismiss, initialFocusRef: initialFocusRef, unstable_lockFocusAcrossFrames: false }, { children: jsxRuntime.jsxs(StyledDialogContent, __assign({}, (isMobile - ? __assign(__assign({}, bind()), { style: { transform: y.interpolate(function (y) { return "translateY(" + (y > 0 ? y : 0) + "px)"; }) } }) : {}), { "aria-label": "dialog content", minHeight: minHeight, maxHeight: maxHeight, mobile: isMobile }, { children: [!initialFocusRef && isMobile ? jsxRuntime.jsx("div", { tabIndex: 1 }, void 0) : null, children] }), void 0) }), key)); - }) }, void 0)); -} -var templateObject_1$B, templateObject_2$o, templateObject_3$j, templateObject_4$c, templateObject_5$a, templateObject_6$6, templateObject_7$5; - -var _a$7; -var ETHERSCAN_PREFIXES = (_a$7 = {}, - _a$7[SupportedChainId.MAINNET] = 'https://etherscan.io', - _a$7[SupportedChainId.ROPSTEN] = 'https://ropsten.etherscan.io', - _a$7[SupportedChainId.RINKEBY] = 'https://rinkeby.etherscan.io', - _a$7[SupportedChainId.GOERLI] = 'https://goerli.etherscan.io', - _a$7[SupportedChainId.KOVAN] = 'https://kovan.etherscan.io', - _a$7[SupportedChainId.OPTIMISM] = 'https://optimistic.etherscan.io', - _a$7[SupportedChainId.OPTIMISTIC_KOVAN] = 'https://kovan-optimistic.etherscan.io', - _a$7[SupportedChainId.POLYGON_MUMBAI] = 'https://mumbai.polygonscan.com', - _a$7[SupportedChainId.POLYGON] = 'https://polygonscan.com', - _a$7); -var ExplorerDataType; -(function (ExplorerDataType) { - ExplorerDataType["TRANSACTION"] = "transaction"; - ExplorerDataType["TOKEN"] = "token"; - ExplorerDataType["ADDRESS"] = "address"; - ExplorerDataType["BLOCK"] = "block"; -})(ExplorerDataType || (ExplorerDataType = {})); -/** - * Return the explorer link for the given data and data type - * @param chainId the ID of the chain for which to return the data - * @param data the data to return a link for - * @param type the type of the data - */ -function getExplorerLink(chainId, data, type) { - var _a; - if (chainId === SupportedChainId.ARBITRUM_ONE) { - switch (type) { - case ExplorerDataType.TRANSACTION: - return "https://arbiscan.io/tx/" + data; - case ExplorerDataType.ADDRESS: - case ExplorerDataType.TOKEN: - return "https://arbiscan.io/address/" + data; - case ExplorerDataType.BLOCK: - return "https://arbiscan.io/block/" + data; - default: - return "https://arbiscan.io/"; - } - } - if (chainId === SupportedChainId.ARBITRUM_RINKEBY) { - switch (type) { - case ExplorerDataType.TRANSACTION: - return "https://rinkeby-explorer.arbitrum.io/tx/" + data; - case ExplorerDataType.ADDRESS: - case ExplorerDataType.TOKEN: - return "https://rinkeby-explorer.arbitrum.io/address/" + data; - case ExplorerDataType.BLOCK: - return "https://rinkeby-explorer.arbitrum.io/block/" + data; - default: - return "https://rinkeby-explorer.arbitrum.io/"; - } - } - var prefix = (_a = ETHERSCAN_PREFIXES[chainId]) !== null && _a !== void 0 ? _a : 'https://etherscan.io'; - switch (type) { - case ExplorerDataType.TRANSACTION: - return prefix + "/tx/" + data; - case ExplorerDataType.TOKEN: - return prefix + "/token/" + data; - case ExplorerDataType.BLOCK: - if (chainId === SupportedChainId.OPTIMISM || chainId === SupportedChainId.OPTIMISTIC_KOVAN) { - return prefix + "/tx/" + data; - } - return prefix + "/block/" + data; - case ExplorerDataType.ADDRESS: - return prefix + "/address/" + data; - default: - return "" + prefix; - } -} - -var DetailsFooter = styled__default["default"].div(templateObject_1$A || (templateObject_1$A = __makeTemplateObject(["\n padding-top: calc(16px + 2rem);\n padding-bottom: 20px;\n margin-left: auto;\n margin-right: auto;\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: ", ";\n background-color: ", ";\n z-index: ", ";\n\n transform: ", ";\n transition: transform 300ms ease-in-out;\n text-align: center;\n"], ["\n padding-top: calc(16px + 2rem);\n padding-bottom: 20px;\n margin-left: auto;\n margin-right: auto;\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: ", ";\n background-color: ", ";\n z-index: ", ";\n\n transform: ", ";\n transition: transform 300ms ease-in-out;\n text-align: center;\n"])), function (_a) { - var theme = _a.theme; - return theme.text2; -}, function (_a) { - var theme = _a.theme; - return theme.advancedBG; -}, Z_INDEX.deprecated_zero, function (_a) { - var show = _a.show; - return (show ? 'translateY(0%)' : 'translateY(-100%)'); -}); -var StyledButtonEmpty = styled__default["default"](ButtonEmpty)(templateObject_2$n || (templateObject_2$n = __makeTemplateObject(["\n text-decoration: none;\n"], ["\n text-decoration: none;\n"]))); -var AddressText$1 = styled__default["default"](ThemedText.Blue)(templateObject_4$b || (templateObject_4$b = __makeTemplateObject(["\n font-size: 12px;\n\n ", "\n"], ["\n font-size: 12px;\n\n ", "\n"])), function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToSmall(templateObject_3$i || (templateObject_3$i = __makeTemplateObject(["\n font-size: 10px;\n"], ["\n font-size: 10px;\n"]))); -}); -function UnsupportedCurrencyFooter(_a) { - var show = _a.show, currencies = _a.currencies; - var chainId = useActiveWeb3React().chainId; - var _b = __read(React.useState(false), 2), showDetails = _b[0], setShowDetails = _b[1]; - var tokens = chainId && currencies - ? currencies.map(function (currency) { - return currency === null || currency === void 0 ? void 0 : currency.wrapped; - }) - : []; - var unsupportedTokens = useUnsupportedTokens(); - return (jsxRuntime.jsxs(DetailsFooter, __assign({ show: show }, { children: [jsxRuntime.jsx(Modal, __assign({ isOpen: showDetails, onDismiss: function () { return setShowDetails(false); } }, { children: jsxRuntime.jsx(Card, __assign({ padding: "2rem" }, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "lg" }, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(ThemedText.MediumHeader, { children: jsxRuntime.jsx(macro.Trans, { children: "Unsupported Assets" }, void 0) }, void 0), jsxRuntime.jsx(CloseIcon, { onClick: function () { return setShowDetails(false); } }, void 0)] }, void 0), tokens.map(function (token) { - var _a; - return (token && - unsupportedTokens && - Object.keys(unsupportedTokens).includes(token.address) && (jsxRuntime.jsx(OutlineCard, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "10px" }, { children: [jsxRuntime.jsxs(AutoRow, __assign({ gap: "5px", align: "center" }, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: token, size: '24px' }, void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 500 }, { children: token.symbol }), void 0)] }), void 0), chainId && (jsxRuntime.jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, token.address, ExplorerDataType.ADDRESS) }, { children: jsxRuntime.jsx(AddressText$1, { children: token.address }, void 0) }), void 0))] }), void 0) }, (_a = token.address) === null || _a === void 0 ? void 0 : _a.concat('not-supported')))); - }), jsxRuntime.jsx(AutoColumn, __assign({ gap: "lg" }, { children: jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 500 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons." }, void 0) }), void 0) }), void 0)] }), void 0) }), void 0) }), void 0), jsxRuntime.jsx(StyledButtonEmpty, __assign({ padding: '0', onClick: function () { return setShowDetails(true); } }, { children: jsxRuntime.jsx(ThemedText.Blue, { children: jsxRuntime.jsx(macro.Trans, { children: "Read more about unsupported assets" }, void 0) }, void 0) }), void 0)] }), void 0)); -} -var templateObject_1$A, templateObject_2$n, templateObject_3$i, templateObject_4$b; - -/** - * Does a lookup for an ENS name to find its address. - */ -function useENSAddress(ensName) { - var _a; - var debouncedName = useDebounce(ensName, 200); - var ensNodeArgument = React.useMemo(function () { return [debouncedName === null ? undefined : safeNamehash(debouncedName)]; }, [debouncedName]); - var registrarContract = useENSRegistrarContract(false); - var resolverAddress = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument); - var resolverAddressResult = (_a = resolverAddress.result) === null || _a === void 0 ? void 0 : _a[0]; - var resolverContract = useENSResolverContract(resolverAddressResult && !isZero(resolverAddressResult) ? resolverAddressResult : undefined, false); - var addr = useSingleCallResult(resolverContract, 'addr', ensNodeArgument); - var changed = debouncedName !== ensName; - return React.useMemo(function () { - var _a, _b; - return ({ - address: changed ? null : (_b = (_a = addr.result) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : null, - loading: changed || resolverAddress.loading || addr.loading, - }); - }, [addr.loading, addr.result, changed, resolverAddress.loading]); -} - -/** - * Does a reverse lookup for an address to find its ENS name. - * Note this is not the same as looking up an ENS name to find an address. - */ -function useENSName(address) { - var _a, _b; - var debouncedAddress = useDebounce(address, 200); - var ensNodeArgument = React.useMemo(function () { - if (!debouncedAddress || !isAddress(debouncedAddress)) - return [undefined]; - return [hash.namehash(debouncedAddress.toLowerCase().substr(2) + ".addr.reverse")]; - }, [debouncedAddress]); - var registrarContract = useENSRegistrarContract(false); - var resolverAddress = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument); - var resolverAddressResult = (_a = resolverAddress.result) === null || _a === void 0 ? void 0 : _a[0]; - var resolverContract = useENSResolverContract(resolverAddressResult && !isZero(resolverAddressResult) ? resolverAddressResult : undefined, false); - var nameCallRes = useSingleCallResult(resolverContract, 'name', ensNodeArgument); - var name = (_b = nameCallRes.result) === null || _b === void 0 ? void 0 : _b[0]; - /* ENS does not enforce that an address owns a .eth domain before setting it as a reverse proxy - and recommends that you perform a match on the forward resolution - see: https://docs.ens.domains/dapp-developer-guide/resolving-names#reverse-resolution - */ - var fwdAddr = useENSAddress(name); - var checkedName = address === (fwdAddr === null || fwdAddr === void 0 ? void 0 : fwdAddr.address) ? name : null; - var changed = debouncedAddress !== address; - return React.useMemo(function () { return ({ - ENSName: changed ? null : checkedName, - loading: changed || resolverAddress.loading || nameCallRes.loading, - }); }, [changed, nameCallRes.loading, checkedName, resolverAddress.loading]); -} - -/** - * Given a name or address, does a lookup to resolve to an address and name - * @param nameOrAddress ENS name or address - */ -function useENS(nameOrAddress) { - var validated = isAddress(nameOrAddress); - var reverseLookup = useENSName(validated ? validated : undefined); - var lookup = useENSAddress(nameOrAddress); - return React.useMemo(function () { return ({ - loading: reverseLookup.loading || lookup.loading, - address: validated ? validated : lookup.address, - name: reverseLookup.ENSName ? reverseLookup.ENSName : !validated && lookup.address ? nameOrAddress || null : null, - }); }, [lookup.address, lookup.loading, nameOrAddress, reverseLookup.ENSName, reverseLookup.loading, validated]); -} - -var InputPanel$1 = styled__default["default"].div(templateObject_1$z || (templateObject_1$z = __makeTemplateObject(["\n ", "\n position: relative;\n border-radius: 1.25rem;\n background-color: ", ";\n z-index: 1;\n width: 100%;\n"], ["\n ", "\n position: relative;\n border-radius: 1.25rem;\n background-color: ", ";\n z-index: 1;\n width: 100%;\n"])), function (_a) { - var theme = _a.theme; - return theme.flexColumnNoWrap; -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}); -var ContainerRow = styled__default["default"].div(templateObject_2$m || (templateObject_2$m = __makeTemplateObject(["\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 1.25rem;\n border: 1px solid ", ";\n transition: border-color 300ms ", ",\n color 500ms ", ";\n background-color: ", ";\n"], ["\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 1.25rem;\n border: 1px solid ", ";\n transition: border-color 300ms ", ",\n color 500ms ", ";\n background-color: ", ";\n"])), function (_a) { - var error = _a.error, theme = _a.theme; - return (error ? theme.red1 : theme.bg2); -}, function (_a) { - var error = _a.error; - return (error ? 'step-end' : 'step-start'); -}, function (_a) { - var error = _a.error; - return (error ? 'step-end' : 'step-start'); -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}); -var InputContainer = styled__default["default"].div(templateObject_3$h || (templateObject_3$h = __makeTemplateObject(["\n flex: 1;\n padding: 1rem;\n"], ["\n flex: 1;\n padding: 1rem;\n"]))); -var Input$2 = styled__default["default"].input(templateObject_4$a || (templateObject_4$a = __makeTemplateObject(["\n font-size: 1.25rem;\n outline: none;\n border: none;\n flex: 1 1 auto;\n width: 0;\n background-color: ", ";\n transition: color 300ms ", ";\n color: ", ";\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 500;\n width: 100%;\n ::placeholder {\n color: ", ";\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: ", ";\n }\n"], ["\n font-size: 1.25rem;\n outline: none;\n border: none;\n flex: 1 1 auto;\n width: 0;\n background-color: ", ";\n transition: color 300ms ", ";\n color: ", ";\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 500;\n width: 100%;\n ::placeholder {\n color: ", ";\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: ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var error = _a.error; - return (error ? 'step-end' : 'step-start'); -}, function (_a) { - var error = _a.error, theme = _a.theme; - return (error ? theme.red1 : theme.text1); -}, function (_a) { - var theme = _a.theme; - return theme.text4; -}, function (_a) { - var theme = _a.theme; - return theme.text4; -}); -function AddressInputPanel(_a) { - var id = _a.id, _b = _a.className, className = _b === void 0 ? 'recipient-address-input' : _b, label = _a.label, placeholder = _a.placeholder, value = _a.value, onChange = _a.onChange; - var chainId = useActiveWeb3React().chainId; - var theme = React.useContext(styled.ThemeContext); - var _c = useENS(value), address = _c.address, loading = _c.loading, name = _c.name; - var handleInput = React.useCallback(function (event) { - var input = event.target.value; - var withoutSpaces = input.replace(/\s+/g, ''); - onChange(withoutSpaces); - }, [onChange]); - var error = Boolean(value.length > 0 && !loading && !address); - return (jsxRuntime.jsx(InputPanel$1, __assign({ id: id }, { children: jsxRuntime.jsx(ContainerRow, __assign({ error: error }, { children: jsxRuntime.jsx(InputContainer, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "md" }, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(ThemedText.Black, __assign({ color: theme.text2, fontWeight: 500, fontSize: 14 }, { children: label !== null && label !== void 0 ? label : jsxRuntime.jsx(macro.Trans, { children: "Recipient" }, void 0) }), void 0), address && chainId && (jsxRuntime.jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, name !== null && name !== void 0 ? name : address, ExplorerDataType.ADDRESS), style: { fontSize: '14px' } }, { children: jsxRuntime.jsx(macro.Trans, { children: "(View on Explorer)" }, void 0) }), void 0))] }, void 0), jsxRuntime.jsx(Input$2, { className: className, type: "text", autoComplete: "off", autoCorrect: "off", autoCapitalize: "off", spellCheck: "false", placeholder: placeholder !== null && placeholder !== void 0 ? placeholder : macro.t(templateObject_5$9 || (templateObject_5$9 = __makeTemplateObject(["Wallet Address or ENS name"], ["Wallet Address or ENS name"]))), error: error, pattern: "^(0x[a-fA-F0-9]{40})$", onChange: handleInput, value: value }, void 0)] }), void 0) }, void 0) }), void 0) }), void 0)); -} -var templateObject_1$z, templateObject_2$m, templateObject_3$h, templateObject_4$a, templateObject_5$9; - -function formatCurrencyAmount(amount, sigFigs) { - if (!amount) { - return '-'; - } - if (JSBI__default["default"].equal(amount.quotient, JSBI__default["default"].BigInt(0))) { - return '0'; - } - if (amount.divide(amount.decimalScale).lessThan(new sdkCore.Fraction(1, 100000))) { - return '<0.00001'; - } - return amount.toSignificant(sigFigs); -} - -var _path; - -function _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); } +var _a$9 +var QUOTE_GAS_OVERRIDES = + ((_a$9 = {}), + (_a$9[SupportedChainId.ARBITRUM_ONE] = 25000000), + (_a$9[SupportedChainId.ARBITRUM_RINKEBY] = 25000000), + _a$9) +var DEFAULT_GAS_QUOTE = 2000000 +/** + * Returns the best v3 trade for a desired swap + * @param tradeType whether the swap is an exact in/out + * @param amountSpecified the exact amount to swap in/out + * @param otherCurrency the desired output/payment currency + */ +function useClientSideV3Trade(tradeType, amountSpecified, otherCurrency) { + var _a + var _b = __read( + React.useMemo( + function () { + return tradeType === sdkCore.TradeType.EXACT_INPUT + ? [ + amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, + otherCurrency, + ] + : [ + otherCurrency, + amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, + ] + }, + [tradeType, amountSpecified, otherCurrency] + ), + 2 + ), + currencyIn = _b[0], + currencyOut = _b[1] + var _c = useAllV3Routes(currencyIn, currencyOut), + routes = _c.routes, + routesLoading = _c.loading + var quoter = useV3Quoter() + var chainId = useActiveWeb3React().chainId + var quotesResults = useSingleContractWithCallData( + quoter, + amountSpecified + ? routes.map(function (route) { + return v3Sdk.SwapQuoter.quoteCallParameters(route, amountSpecified, tradeType).calldata + }) + : [], + { + gasRequired: chainId + ? (_a = QUOTE_GAS_OVERRIDES[chainId]) !== null && _a !== void 0 + ? _a + : DEFAULT_GAS_QUOTE + : undefined, + } + ) + return React.useMemo( + function () { + if ( + !amountSpecified || + !currencyIn || + !currencyOut || + quotesResults.some(function (_a) { + var valid = _a.valid + return !valid + }) || + // skip when tokens are the same + (tradeType === sdkCore.TradeType.EXACT_INPUT + ? amountSpecified.currency.equals(currencyOut) + : amountSpecified.currency.equals(currencyIn)) + ) { + return { + state: TradeState.INVALID, + trade: undefined, + } + } + if ( + routesLoading || + quotesResults.some(function (_a) { + var loading = _a.loading + return loading + }) + ) { + return { + state: TradeState.LOADING, + trade: undefined, + } + } + var _a = quotesResults.reduce( + function (currentBest, _a, i) { + var result = _a.result + if (!result) return currentBest + // overwrite the current best if it's not defined or if this route is better + if (tradeType === sdkCore.TradeType.EXACT_INPUT) { + var amountOut_1 = sdkCore.CurrencyAmount.fromRawAmount(currencyOut, result.amountOut.toString()) + if ( + currentBest.amountOut === null || + JSBI__default['default'].lessThan(currentBest.amountOut.quotient, amountOut_1.quotient) + ) { + return { + bestRoute: routes[i], + amountIn: amountSpecified, + amountOut: amountOut_1, + } + } + } else { + var amountIn_1 = sdkCore.CurrencyAmount.fromRawAmount(currencyIn, result.amountIn.toString()) + if ( + currentBest.amountIn === null || + JSBI__default['default'].greaterThan(currentBest.amountIn.quotient, amountIn_1.quotient) + ) { + return { + bestRoute: routes[i], + amountIn: amountIn_1, + amountOut: amountSpecified, + } + } + } + return currentBest + }, + { + bestRoute: null, + amountIn: null, + amountOut: null, + } + ), + bestRoute = _a.bestRoute, + amountIn = _a.amountIn, + amountOut = _a.amountOut + if (!bestRoute || !amountIn || !amountOut) { + return { + state: TradeState.NO_ROUTE_FOUND, + trade: undefined, + } + } + return { + state: TradeState.VALID, + trade: new InterfaceTrade({ + v2Routes: [], + v3Routes: [ + { + routev3: bestRoute, + inputAmount: amountIn, + outputAmount: amountOut, + }, + ], + tradeType, + }), + } + }, + [amountSpecified, currencyIn, currencyOut, quotesResults, routes, routesLoading, tradeType] + ) +} -var SvgDropdown = function SvgDropdown(props) { - return /*#__PURE__*/React__namespace.createElement("svg", _extends({ - width: 12, - height: 7, - viewBox: "0 0 12 7", - fill: "none", - xmlns: "http://www.w3.org/2000/svg" - }, props), _path || (_path = /*#__PURE__*/React__namespace.createElement("path", { - d: "M0.97168 1L6.20532 6L11.439 1", - stroke: "#AEAEAE" - }))); -}; - -/** - * Returns the gas value plus a margin for unexpected or variable gas costs - * @param value the gas value to pad - */ -function calculateGasMargin(value) { - return value.mul(120).div(100); -} - -/** - * Be careful adding to this enum, always assign a unique value (typescript will not prevent duplicate values). - * These values is persisted in state and if you change the value it will cause errors - */ -var TransactionType; -(function (TransactionType) { - TransactionType[TransactionType["APPROVAL"] = 0] = "APPROVAL"; - TransactionType[TransactionType["SWAP"] = 1] = "SWAP"; - TransactionType[TransactionType["DEPOSIT_LIQUIDITY_STAKING"] = 2] = "DEPOSIT_LIQUIDITY_STAKING"; - TransactionType[TransactionType["WITHDRAW_LIQUIDITY_STAKING"] = 3] = "WITHDRAW_LIQUIDITY_STAKING"; - TransactionType[TransactionType["CLAIM"] = 4] = "CLAIM"; - TransactionType[TransactionType["VOTE"] = 5] = "VOTE"; - TransactionType[TransactionType["DELEGATE"] = 6] = "DELEGATE"; - TransactionType[TransactionType["WRAP"] = 7] = "WRAP"; - TransactionType[TransactionType["CREATE_V3_POOL"] = 8] = "CREATE_V3_POOL"; - TransactionType[TransactionType["ADD_LIQUIDITY_V3_POOL"] = 9] = "ADD_LIQUIDITY_V3_POOL"; - TransactionType[TransactionType["ADD_LIQUIDITY_V2_POOL"] = 10] = "ADD_LIQUIDITY_V2_POOL"; - TransactionType[TransactionType["MIGRATE_LIQUIDITY_V3"] = 11] = "MIGRATE_LIQUIDITY_V3"; - TransactionType[TransactionType["COLLECT_FEES"] = 12] = "COLLECT_FEES"; - TransactionType[TransactionType["REMOVE_LIQUIDITY_V3"] = 13] = "REMOVE_LIQUIDITY_V3"; - TransactionType[TransactionType["SUBMIT_PROPOSAL"] = 14] = "SUBMIT_PROPOSAL"; -})(TransactionType || (TransactionType = {})); -var addTransaction = toolkit.createAction('transactions/addTransaction'); -var clearAllTransactions = toolkit.createAction('transactions/clearAllTransactions'); -var finalizeTransaction = toolkit.createAction('transactions/finalizeTransaction'); -var checkedTransaction = toolkit.createAction('transactions/checkedTransaction'); - -var SUPPORTED_TRANSACTION_TYPES = [ - TransactionType.ADD_LIQUIDITY_V2_POOL, - TransactionType.ADD_LIQUIDITY_V3_POOL, - TransactionType.CREATE_V3_POOL, - TransactionType.REMOVE_LIQUIDITY_V3, - TransactionType.SWAP, -]; -var FIREBASE_API_KEY = process.env.REACT_APP_FIREBASE_KEY; -var firebaseEnabled = typeof FIREBASE_API_KEY !== 'undefined'; -if (firebaseEnabled) - initializeFirebase(); -function useMonitoringEventCallback() { - var chainId = useActiveWeb3React().chainId; - return React.useCallback(function log(type, _a) { - var transactionResponse = _a.transactionResponse, walletAddress = _a.walletAddress; - return __awaiter(this, void 0, void 0, function () { - var db; - return __generator(this, function (_b) { - if (!firebaseEnabled) - return [2 /*return*/]; - db = database.getDatabase(); - if (!walletAddress) { - console.debug('Wallet address required to log monitoring events.'); - return [2 /*return*/]; - } - try { - database.push(database.ref(db, 'trm'), { - chainId: chainId, - origin: window.location.origin, - timestamp: Date.now(), - tx: transactionResponse, - type: type, - walletAddress: walletAddress, - }); - } - catch (e) { - console.debug('Error adding document: ', e); - } - return [2 /*return*/]; - }); - }); - }, [chainId]); -} -function useTransactionMonitoringEventCallback() { - var account = useActiveWeb3React().account; - var log = useMonitoringEventCallback(); - return React.useCallback(function (info, transactionResponse) { - if (SUPPORTED_TRANSACTION_TYPES.includes(info.type)) { - log(TransactionType[info.type], { - transactionResponse: (function (_a) { - var hash = _a.hash, v = _a.v, r = _a.r, s = _a.s; - return ({ hash: hash, v: v, r: r, s: s }); - })(transactionResponse), - walletAddress: account !== null && account !== void 0 ? account : undefined, - }); - } - }, [account, log]); -} -function initializeFirebase() { - app.initializeApp({ - apiKey: process.env.REACT_APP_FIREBASE_KEY, - authDomain: 'interface-monitoring.firebaseapp.com', - databaseURL: 'https://interface-monitoring-default-rtdb.firebaseio.com', - projectId: 'interface-monitoring', - storageBucket: 'interface-monitoring.appspot.com', - messagingSenderId: '968187720053', - appId: '1:968187720053:web:acedf72dce629d470be33c', - }); -} - -// helper that can take a ethers library transaction response and add it to the list of transactions -function useTransactionAdder() { - var _a = useActiveWeb3React(), chainId = _a.chainId, account = _a.account; - var dispatch = useAppDispatch(); - var logMonitoringEvent = useTransactionMonitoringEventCallback(); - return React.useCallback(function (response, info) { - if (!account) - return; - if (!chainId) - return; - var hash = response.hash; - if (!hash) { - throw Error('No transaction hash found.'); - } - dispatch(addTransaction({ hash: hash, from: account, info: info, chainId: chainId })); - logMonitoringEvent(info, response); - }, [account, chainId, dispatch, logMonitoringEvent]); -} -// returns all the transactions for the current chain -function useAllTransactions() { - var _a; - var chainId = useActiveWeb3React().chainId; - var state = useAppSelector(function (state) { return state.transactions; }); - return chainId ? (_a = state[chainId]) !== null && _a !== void 0 ? _a : {} : {}; -} -function useTransaction(transactionHash) { - var allTransactions = useAllTransactions(); - if (!transactionHash) { - return undefined; - } - return allTransactions[transactionHash]; -} -function useIsTransactionConfirmed(transactionHash) { - var transactions = useAllTransactions(); - if (!transactionHash || !transactions[transactionHash]) - return false; - return Boolean(transactions[transactionHash].receipt); -} -/** - * Returns whether a transaction happened in the last day (86400 seconds * 1000 milliseconds / second) - * @param tx to check for recency - */ -function isTransactionRecent(tx) { - return new Date().getTime() - tx.addedTime < 86400000; -} -// returns whether a token has a pending approval transaction -function useHasPendingApproval(token, spender) { - var allTransactions = useAllTransactions(); - return React.useMemo(function () { - return typeof (token === null || token === void 0 ? void 0 : token.address) === 'string' && - typeof spender === 'string' && - Object.keys(allTransactions).some(function (hash) { - var tx = allTransactions[hash]; - if (!tx) - return false; - if (tx.receipt) { - return false; - } - else { - if (tx.info.type !== TransactionType.APPROVAL) - return false; - return tx.info.spender === spender && tx.info.tokenAddress === token.address && isTransactionRecent(tx); - } - }); - }, [allTransactions, spender, token === null || token === void 0 ? void 0 : token.address]); -} - -// gets the current timestamp from the blockchain -function useCurrentBlockTimestamp() { - var _a, _b; - var multicall = useInterfaceMulticall(); - return (_b = (_a = useSingleCallResult(multicall, 'getCurrentBlockTimestamp')) === null || _a === void 0 ? void 0 : _a.result) === null || _b === void 0 ? void 0 : _b[0]; -} - -new abi$6.Interface(abi$5); -({ - 1: [ - { - tokens: [WRAPPED_NATIVE_CURRENCY[1], DAI], - stakingRewardAddress: '0xa1484C3aa22a66C62b77E0AE78E15258bd0cB711', - }, - { - tokens: [WRAPPED_NATIVE_CURRENCY[1], USDC], - stakingRewardAddress: '0x7FBa4B8Dc5E7616e59622806932DBea72537A56b', - }, - { - tokens: [WRAPPED_NATIVE_CURRENCY[1], USDT], - stakingRewardAddress: '0x6C3e4cb2E96B01F4b866965A91ed4437839A121a', - }, - { - tokens: [WRAPPED_NATIVE_CURRENCY[1], WBTC], - stakingRewardAddress: '0xCA35e32e7926b96A9988f61d510E038108d8068e', - }, - ], -}); - -// mimics useAllBalances -function useAllTokenBalances() { - var account = useActiveWeb3React().account; - var allTokens = useAllTokens(); - var allTokensArray = React.useMemo(function () { return Object.values(allTokens !== null && allTokens !== void 0 ? allTokens : {}); }, [allTokens]); - var balances = useTokenBalances(account !== null && account !== void 0 ? account : undefined, allTokensArray); - return balances !== null && balances !== void 0 ? balances : {}; -} - -var StyledInput = styled__default["default"].input(templateObject_1$y || (templateObject_1$y = __makeTemplateObject(["\n color: ", ";\n width: 0;\n position: relative;\n font-weight: 500;\n outline: none;\n border: none;\n flex: 1 1 auto;\n background-color: ", ";\n font-size: ", ";\n text-align: ", ";\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 0px;\n -webkit-appearance: textfield;\n text-align: right;\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: ", ";\n }\n"], ["\n color: ", ";\n width: 0;\n position: relative;\n font-weight: 500;\n outline: none;\n border: none;\n flex: 1 1 auto;\n background-color: ", ";\n font-size: ", ";\n text-align: ", ";\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 0px;\n -webkit-appearance: textfield;\n text-align: right;\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: ", ";\n }\n"])), function (_a) { - var error = _a.error, theme = _a.theme; - return (error ? theme.red1 : theme.text1); -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var fontSize = _a.fontSize; - return fontSize !== null && fontSize !== void 0 ? fontSize : '28px'; -}, function (_a) { - var align = _a.align; - return align && align; -}, function (_a) { - var theme = _a.theme; - return theme.text4; -}); -var inputRegex = RegExp("^\\d*(?:\\\\[.])?\\d*$"); // match escaped "." characters via in a non-capturing group -var Input$1 = React__default["default"].memo(function InnerInput(_a) { - var value = _a.value, onUserInput = _a.onUserInput, placeholder = _a.placeholder, prependSymbol = _a.prependSymbol, rest = __rest(_a, ["value", "onUserInput", "placeholder", "prependSymbol"]); - var enforcer = function (nextUserInput) { - if (nextUserInput === '' || inputRegex.test(escapeRegExp(nextUserInput))) { - onUserInput(nextUserInput); - } - }; - return (jsxRuntime.jsx(StyledInput, __assign({}, rest, { value: prependSymbol && value ? prependSymbol + value : value, onChange: function (event) { - if (prependSymbol) { - var value_1 = event.target.value; - // cut off prepended symbol - var formattedValue = value_1.toString().includes(prependSymbol) - ? value_1.toString().slice(1, value_1.toString().length + 1) - : value_1; - // replace commas with periods, because uniswap exclusively uses period as the decimal separator - enforcer(formattedValue.replace(/,/g, '.')); - } - else { - enforcer(event.target.value.replace(/,/g, '.')); - } - }, - // universal input options - inputMode: "decimal", autoComplete: "off", autoCorrect: "off", - // text-specific options - type: "text", pattern: "^[0-9]*[.,]?[0-9]*$", placeholder: placeholder || '0.0', minLength: 1, maxLength: 79, spellCheck: "false" }), void 0)); -}); -var templateObject_1$y; - -// modified from https://usehooks.com/usePrevious/ -function usePrevious(value) { - // The ref object is a generic container whose current property is mutable ... - // ... and can hold any value, similar to an instance property on a class - var ref = React.useRef(); - // Store current value in ref - React.useEffect(function () { - ref.current = value; - }, [value]); // Only re-run if value changes - // Return previous value (happens before update in useEffect above) - return ref.current; -} - -/** - * Returns the last value of type T that passes a filter function - * @param value changing value - * @param filterFn function that determines whether a given value should be considered for the last value - */ -function useLast(value, filterFn) { - var _a = __read(React.useState(filterFn && filterFn(value) ? value : undefined), 2), last = _a[0], setLast = _a[1]; - React.useEffect(function () { - setLast(function (last) { - var shouldUse = filterFn ? filterFn(value) : true; - if (shouldUse) - return value; - return last; - }); - }, [filterFn, value]); - return last; -} - -function useOnClickOutside(node, handler) { - var handlerRef = React.useRef(handler); - React.useEffect(function () { - handlerRef.current = handler; - }, [handler]); - React.useEffect(function () { - var handleClickOutside = function (e) { - var _a, _b; - if ((_b = (_a = node.current) === null || _a === void 0 ? void 0 : _a.contains(e.target)) !== null && _b !== void 0 ? _b : false) { - return; - } - if (handlerRef.current) - handlerRef.current(); - }; - document.addEventListener('mousedown', handleClickOutside); - return function () { - document.removeEventListener('mousedown', handleClickOutside); - }; - }, [node]); -} - -function useToggle(initialState) { - if (initialState === void 0) { initialState = false; } - var _a = __read(React.useState(initialState), 2), state = _a[0], setState = _a[1]; - var toggle = React.useCallback(function () { return setState(function (state) { return !state; }); }, []); - return [state, toggle]; -} - -function currencyId(currency) { - if (currency.isNative) - return 'ETH'; - if (currency.isToken) - return currency.address; - throw new Error('invalid currency'); -} - -var MobileWrapper = styled__default["default"](AutoColumn)(templateObject_2$l || (templateObject_2$l = __makeTemplateObject(["\n ", ";\n"], ["\n ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToSmall(templateObject_1$x || (templateObject_1$x = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); -}); -var BaseWrapper = styled__default["default"].div(templateObject_3$g || (templateObject_3$g = __makeTemplateObject(["\n border: 1px solid ", ";\n border-radius: 10px;\n display: flex;\n padding: 6px;\n\n align-items: center;\n :hover {\n cursor: ", ";\n background-color: ", ";\n }\n\n color: ", ";\n background-color: ", ";\n filter: ", ";\n"], ["\n border: 1px solid ", ";\n border-radius: 10px;\n display: flex;\n padding: 6px;\n\n align-items: center;\n :hover {\n cursor: ", ";\n background-color: ", ";\n }\n\n color: ", ";\n background-color: ", ";\n filter: ", ";\n"])), function (_a) { - var theme = _a.theme, disable = _a.disable; - return (disable ? 'transparent' : theme.bg3); -}, function (_a) { - var disable = _a.disable; - return !disable && 'pointer'; -}, function (_a) { - var theme = _a.theme, disable = _a.disable; - return !disable && theme.bg2; -}, function (_a) { - var theme = _a.theme, disable = _a.disable; - return disable && theme.text3; -}, function (_a) { - var theme = _a.theme, disable = _a.disable; - return disable && theme.bg3; -}, function (_a) { - var disable = _a.disable; - return disable && 'grayscale(1)'; -}); -function CommonBases(_a) { - var _b; - var chainId = _a.chainId, onSelect = _a.onSelect, selectedCurrency = _a.selectedCurrency; - var bases = typeof chainId !== 'undefined' ? (_b = COMMON_BASES[chainId]) !== null && _b !== void 0 ? _b : [] : []; - return bases.length > 0 ? (jsxRuntime.jsx(MobileWrapper, __assign({ gap: "md" }, { children: jsxRuntime.jsx(AutoRow, __assign({ gap: "4px" }, { children: bases.map(function (currency) { - var isSelected = selectedCurrency === null || selectedCurrency === void 0 ? void 0 : selectedCurrency.equals(currency); - return (jsxRuntime.jsxs(BaseWrapper, __assign({ onClick: function () { return !isSelected && onSelect(currency); }, disable: isSelected }, { children: [jsxRuntime.jsx(CurrencyLogoFromList, { currency: currency }, void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 16 }, { children: currency.symbol }), void 0)] }), currencyId(currency))); - }) }), void 0) }), void 0)) : null; -} -/** helper component to retrieve a base currency from the active token lists */ -function CurrencyLogoFromList(_a) { - var currency = _a.currency; - var token = useTokenInfoFromActiveList(currency); - return jsxRuntime.jsx(CurrencyLogo, { currency: token, style: { marginRight: 8 } }, void 0); -} -var templateObject_1$x, templateObject_2$l, templateObject_3$g; - -var QuestionWrapper = styled__default["default"].div(templateObject_1$w || (templateObject_1$w = __makeTemplateObject(["\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0px;\n width: 18px;\n height: 18px;\n border: none;\n background: none;\n outline: none;\n cursor: default;\n border-radius: 36px;\n font-size: 12px;\n background-color: ", ";\n color: ", ";\n\n :hover,\n :focus {\n opacity: 0.7;\n }\n"], ["\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0px;\n width: 18px;\n height: 18px;\n border: none;\n background: none;\n outline: none;\n cursor: default;\n border-radius: 36px;\n font-size: 12px;\n background-color: ", ";\n color: ", ";\n\n :hover,\n :focus {\n opacity: 0.7;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}, function (_a) { - var theme = _a.theme; - return theme.text2; -}); -var QuestionMark = styled__default["default"].span(templateObject_2$k || (templateObject_2$k = __makeTemplateObject(["\n font-size: 14px;\n"], ["\n font-size: 14px;\n"]))); -function QuestionHelper(_a) { - var text = _a.text; - var _b = __read(React.useState(false), 2), show = _b[0], setShow = _b[1]; - var open = React.useCallback(function () { return setShow(true); }, [setShow]); - var close = React.useCallback(function () { return setShow(false); }, [setShow]); - return (jsxRuntime.jsx("span", __assign({ style: { marginLeft: 4, display: 'flex', alignItems: 'center' } }, { children: jsxRuntime.jsx(Tooltip, __assign({ text: text, show: show }, { children: jsxRuntime.jsx(QuestionWrapper, __assign({ onClick: open, onMouseEnter: open, onMouseLeave: close }, { children: jsxRuntime.jsx(QuestionMark, { children: "?" }, void 0) }), void 0) }), void 0) }), void 0)); -} -var templateObject_1$w, templateObject_2$k; - -var TokenListLogo = "data:image/svg+xml,%3Csvg%20width%3D%22225%22%20height%3D%22225%22%20viewBox%3D%220%200%20225%20225%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M74.8125%20190.529C65.7561%20190.513%2055.5298%20183.748%2051.9715%20175.42L19.9417%20100.456C16.3834%2092.1277%2020.8404%2085.39%2029.8968%2085.4068L111.417%2085.5579C120.473%2085.5747%20130.699%2092.3395%20134.258%20100.668L166.288%20175.632C169.846%20183.96%20165.389%20190.697%20156.332%20190.681L74.8125%20190.529Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint0_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint1_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint2_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint3_radial%29%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M92.958%20165.95C82.7695%20165.931%2071.265%20158.321%2067.2619%20148.952L26.2489%2052.9632C22.2458%2043.5941%2027.26%2036.0143%2037.4485%2036.0332L141.832%2036.2266C152.02%2036.2455%20163.525%2043.8559%20167.528%2053.225L208.541%20149.214C212.544%20158.583%20207.53%20166.163%20197.341%20166.144L92.958%20165.95ZM71.3614%20148.959C74.475%20156.246%2083.4229%20162.166%2091.3473%20162.18L195.73%20162.374C203.655%20162.388%20207.555%20156.493%20204.441%20149.206L163.428%2053.2174C160.315%2045.9304%20151.367%2040.0111%20143.442%2039.9964L39.0592%2039.803C31.1349%2039.7883%2027.2349%2045.6837%2030.3485%2052.9708L71.3614%20148.959Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M68.565%2053.3425C81.1781%2053.3659%2095.4205%2062.7875%20100.376%2074.3862C105.332%2085.985%2099.1246%2095.3687%2086.5115%2095.3454C73.8984%2095.322%2059.6559%2085.9004%2054.7001%2074.3016C49.7443%2062.7028%2055.9518%2053.3191%2068.565%2053.3425Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M90.6891%20104.981C103.302%20105.004%20117.545%20114.425%20122.5%20126.024C127.456%20137.623%20121.249%20147.007%20108.636%20146.983C96.0225%20146.96%2081.7801%20137.538%2076.8243%20125.94C71.8685%20114.341%2078.076%20104.957%2090.6891%20104.981Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M147.538%20105.142C160.151%20105.166%20174.394%20114.587%20179.349%20126.186C184.305%20137.785%20178.098%20147.168%20165.485%20147.145C152.871%20147.122%20138.629%20137.7%20133.673%20126.101C128.717%20114.503%20134.925%20105.119%20147.538%20105.142Z%22%20fill%3D%22%23131313%22%2F%3E%3Cdefs%3E%3CradialGradient%20id%3D%22paint0_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%28134.41%2068.3006%29%20rotate%28-33.9533%29%20scale%2890.6795%2083.3208%29%22%3E%3Cstop%20offset%3D%220.661458%22%20stop-color%3D%22%23C4FCF8%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint1_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%2842.7873%20129.218%29%20rotate%28-24.1606%29%20scale%28213.359%20196.045%29%22%3E%3Cstop%20stop-color%3D%22%23FF0099%22%20stop-opacity%3D%220.9%22%2F%3E%3Cstop%20offset%3D%220.770833%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint2_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%28176.854%20148.655%29%20rotate%28-53.4908%29%20scale%28107.342%2098.6309%29%22%3E%3Cstop%20stop-color%3D%22%23FFEC43%22%2F%3E%3Cstop%20offset%3D%220.805707%22%20stop-color%3D%22%23FFF6A8%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint3_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%2857.5443%2053.4752%29%20rotate%2820.3896%29%20scale%28137.027%20125.907%29%22%3E%3Cstop%20offset%3D%220.125%22%20stop-color%3D%22%235886FE%22%20stop-opacity%3D%220.46%22%2F%3E%3Cstop%20offset%3D%220.673044%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3C%2Fdefs%3E%3C%2Fsvg%3E"; - -var rotate = styled.keyframes(templateObject_1$v || (templateObject_1$v = __makeTemplateObject(["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"], ["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"]))); -var StyledSVG = styled__default["default"].svg(templateObject_2$j || (templateObject_2$j = __makeTemplateObject(["\n animation: 2s ", " linear infinite;\n height: ", ";\n width: ", ";\n path {\n stroke: ", ";\n }\n"], ["\n animation: 2s ", " linear infinite;\n height: ", ";\n width: ", ";\n path {\n stroke: ", ";\n }\n" - /** - * Takes in custom size and stroke for circle color, default to primary color as fill, - * need ...rest for layered styles on top - */ -])), rotate, function (_a) { - var size = _a.size; - return size; -}, function (_a) { - var size = _a.size; - return size; -}, function (_a) { - var stroke = _a.stroke, theme = _a.theme; - return stroke !== null && stroke !== void 0 ? stroke : theme.primary1; -}); -/** - * Takes in custom size and stroke for circle color, default to primary color as fill, - * need ...rest for layered styles on top - */ -function Loader(_a) { - var _b = _a.size, size = _b === void 0 ? '16px' : _b, stroke = _a.stroke, rest = __rest(_a, ["size", "stroke"]); - return (jsxRuntime.jsx(StyledSVG, __assign({ viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", size: size, stroke: stroke }, rest, { children: jsxRuntime.jsx("path", { d: "M12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22C17.5228 22 22 17.5228 22 12C22 9.27455 20.9097 6.80375 19.1414 5", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round" }, void 0) }), void 0)); -} -var templateObject_1$v, templateObject_2$j; - -var StyledListLogo = styled__default["default"](Logo)(templateObject_1$u || (templateObject_1$u = __makeTemplateObject(["\n width: ", ";\n height: ", ";\n"], ["\n width: ", ";\n height: ", ";\n"])), function (_a) { - var size = _a.size; - return size; -}, function (_a) { - var size = _a.size; - return size; -}); -function ListLogo(_a) { - var logoURI = _a.logoURI, style = _a.style, _b = _a.size, size = _b === void 0 ? '24px' : _b, alt = _a.alt; - var srcs = useHttpLocations(logoURI); - return jsxRuntime.jsx(StyledListLogo, { alt: alt, size: size, srcs: srcs, style: style }, void 0); -} -var templateObject_1$u; - -var TokenSection = styled__default["default"].div(templateObject_1$t || (templateObject_1$t = __makeTemplateObject(["\n padding: 4px 20px;\n height: 56px;\n display: grid;\n grid-template-columns: auto minmax(auto, 1fr) auto;\n grid-gap: 16px;\n align-items: center;\n\n opacity: ", ";\n"], ["\n padding: 4px 20px;\n height: 56px;\n display: grid;\n grid-template-columns: auto minmax(auto, 1fr) auto;\n grid-gap: 16px;\n align-items: center;\n\n opacity: ", ";\n"])), function (_a) { - var dim = _a.dim; - return (dim ? '0.4' : '1'); -}); -var CheckIcon = styled__default["default"](reactFeather.CheckCircle)(templateObject_2$i || (templateObject_2$i = __makeTemplateObject(["\n height: 16px;\n width: 16px;\n margin-right: 6px;\n stroke: ", ";\n"], ["\n height: 16px;\n width: 16px;\n margin-right: 6px;\n stroke: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.green1; -}); -var NameOverflow = styled__default["default"].div(templateObject_3$f || (templateObject_3$f = __makeTemplateObject(["\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 140px;\n font-size: 12px;\n"], ["\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 140px;\n font-size: 12px;\n"]))); -function ImportRow(_a) { - var token = _a.token, style = _a.style, dim = _a.dim, showImportView = _a.showImportView, setImportToken = _a.setImportToken; - var theme = useTheme(); - // check if already active on list or local storage tokens - var isAdded = useIsUserAddedToken(token); - var isActive = useIsTokenActive(token); - var list = token instanceof WrappedTokenInfo ? token.list : undefined; - return (jsxRuntime.jsxs(TokenSection, __assign({ style: style }, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: token, size: '24px', style: { opacity: dim ? '0.6' : '1' } }, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "4px", style: { opacity: dim ? '0.6' : '1' } }, { children: [jsxRuntime.jsxs(AutoRow, { children: [jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 500 }, { children: token.symbol }), void 0), jsxRuntime.jsx(ThemedText.DarkGray, __assign({ ml: "8px", fontWeight: 300 }, { children: jsxRuntime.jsx(NameOverflow, __assign({ title: token.name }, { children: token.name }), void 0) }), void 0)] }, void 0), list && list.logoURI && (jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(ThemedText.Small, __assign({ mr: "4px", color: theme.text3 }, { children: jsxRuntime.jsxs(macro.Trans, { children: ["via ", list.name, " "] }, void 0) }), void 0), jsxRuntime.jsx(ListLogo, { logoURI: list.logoURI, size: "12px" }, void 0)] }, void 0))] }), void 0), !isActive && !isAdded ? (jsxRuntime.jsx(ButtonPrimary, __assign({ width: "fit-content", padding: "6px 12px", fontWeight: 500, fontSize: "14px", onClick: function () { - setImportToken && setImportToken(token); - showImportView(); - } }, { children: jsxRuntime.jsx(macro.Trans, { children: "Import" }, void 0) }), void 0)) : (jsxRuntime.jsxs(RowFixed, __assign({ style: { minWidth: 'fit-content' } }, { children: [jsxRuntime.jsx(CheckIcon, {}, void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ color: theme.green1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Active" }, void 0) }), void 0)] }), void 0))] }), void 0)); -} -var templateObject_1$t, templateObject_2$i, templateObject_3$f; - -var TextDot = styled__default["default"].div(templateObject_1$s || (templateObject_1$s = __makeTemplateObject(["\n height: 3px;\n width: 3px;\n background-color: ", ";\n border-radius: 50%;\n"], ["\n height: 3px;\n width: 3px;\n background-color: ", ";\n border-radius: 50%;\n"])), function (_a) { - var theme = _a.theme; - return theme.text2; -}); -var Checkbox = styled__default["default"].input(templateObject_2$h || (templateObject_2$h = __makeTemplateObject(["\n border: 1px solid ", ";\n height: 20px;\n margin: 0;\n"], ["\n border: 1px solid ", ";\n height: 20px;\n margin: 0;\n"])), function (_a) { - var theme = _a.theme; - return theme.red3; -}); -var PaddedColumn = styled__default["default"](AutoColumn)(templateObject_3$e || (templateObject_3$e = __makeTemplateObject(["\n padding: 20px;\n"], ["\n padding: 20px;\n"]))); -var MenuItem = styled__default["default"](RowBetween)(templateObject_4$9 || (templateObject_4$9 = __makeTemplateObject(["\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: ", ";\n pointer-events: ", ";\n :hover {\n background-color: ", ";\n }\n opacity: ", ";\n"], ["\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: ", ";\n pointer-events: ", ";\n :hover {\n background-color: ", ";\n }\n opacity: ", ";\n"])), function (_a) { - var disabled = _a.disabled; - return !disabled && 'pointer'; -}, function (_a) { - var disabled = _a.disabled; - return disabled && 'none'; -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return !disabled && theme.bg2; -}, function (_a) { - var disabled = _a.disabled, selected = _a.selected; - return (disabled || selected ? 0.5 : 1); -}); -var SearchInput = styled__default["default"].input(templateObject_5$8 || (templateObject_5$8 = __makeTemplateObject(["\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: ", ";\n border-style: solid;\n border: 1px solid ", ";\n -webkit-appearance: none;\n\n font-size: 18px;\n\n ::placeholder {\n color: ", ";\n }\n transition: border 100ms;\n :focus {\n border: 1px solid ", ";\n outline: none;\n }\n"], ["\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: ", ";\n border-style: solid;\n border: 1px solid ", ";\n -webkit-appearance: none;\n\n font-size: 18px;\n\n ::placeholder {\n color: ", ";\n }\n transition: border 100ms;\n :focus {\n border: 1px solid ", ";\n outline: none;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.text1; -}, function (_a) { - var theme = _a.theme; - return theme.bg3; -}, function (_a) { - var theme = _a.theme; - return theme.text3; -}, function (_a) { - var theme = _a.theme; - return theme.primary1; -}); -var Separator = styled__default["default"].div(templateObject_6$5 || (templateObject_6$5 = __makeTemplateObject(["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"], ["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}); -var SeparatorDark = styled__default["default"].div(templateObject_7$4 || (templateObject_7$4 = __makeTemplateObject(["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"], ["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg3; -}); -var templateObject_1$s, templateObject_2$h, templateObject_3$e, templateObject_4$9, templateObject_5$8, templateObject_6$5, templateObject_7$4; - -function currencyKey(currency) { - return currency.isToken ? currency.address : 'ETHER'; -} -var StyledBalanceText = styled__default["default"](rebass.Text)(templateObject_1$r || (templateObject_1$r = __makeTemplateObject(["\n white-space: nowrap;\n overflow: hidden;\n max-width: 5rem;\n text-overflow: ellipsis;\n"], ["\n white-space: nowrap;\n overflow: hidden;\n max-width: 5rem;\n text-overflow: ellipsis;\n"]))); -var Tag = styled__default["default"].div(templateObject_2$g || (templateObject_2$g = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\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 background-color: ", ";\n color: ", ";\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"])), function (_a) { - var theme = _a.theme; - return theme.bg3; -}, function (_a) { - var theme = _a.theme; - return theme.text2; -}); -var FixedContentRow = styled__default["default"].div(templateObject_3$d || (templateObject_3$d = __makeTemplateObject(["\n padding: 4px 20px;\n height: 56px;\n display: grid;\n grid-gap: 16px;\n align-items: center;\n"], ["\n padding: 4px 20px;\n height: 56px;\n display: grid;\n grid-gap: 16px;\n align-items: center;\n"]))); -function Balance(_a) { - var balance = _a.balance; - return jsxRuntime.jsx(StyledBalanceText, __assign({ title: balance.toExact() }, { children: balance.toSignificant(4) }), void 0); -} -var TagContainer = styled__default["default"].div(templateObject_4$8 || (templateObject_4$8 = __makeTemplateObject(["\n display: flex;\n justify-content: flex-end;\n"], ["\n display: flex;\n justify-content: flex-end;\n"]))); -var TokenListLogoWrapper = styled__default["default"].img(templateObject_5$7 || (templateObject_5$7 = __makeTemplateObject(["\n height: 20px;\n"], ["\n height: 20px;\n"]))); -function TokenTags(_a) { - var currency = _a.currency; - if (!(currency instanceof WrappedTokenInfo)) { - return jsxRuntime.jsx("span", {}, void 0); - } - var tags = currency.tags; - if (!tags || tags.length === 0) - return jsxRuntime.jsx("span", {}, void 0); - var tag = tags[0]; - return (jsxRuntime.jsxs(TagContainer, { children: [jsxRuntime.jsx(MouseoverTooltip, __assign({ text: tag.description }, { children: jsxRuntime.jsx(Tag, { children: tag.name }, tag.id) }), void 0), tags.length > 1 ? (jsxRuntime.jsx(MouseoverTooltip, __assign({ text: tags - .slice(1) - .map(function (_a) { - var name = _a.name, description = _a.description; - return name + ": " + description; - }) - .join('; \n') }, { children: jsxRuntime.jsx(Tag, { children: "..." }, void 0) }), void 0)) : null] }, void 0)); -} -function CurrencyRow(_a) { - var currency = _a.currency, onSelect = _a.onSelect, isSelected = _a.isSelected, otherSelected = _a.otherSelected, style = _a.style, showCurrencyAmount = _a.showCurrencyAmount; - var account = useActiveWeb3React().account; - var key = currencyKey(currency); - var selectedTokenList = useCombinedActiveList(); - var isOnSelectedList = isTokenOnList(selectedTokenList, currency.isToken ? currency : undefined); - var customAdded = useIsUserAddedToken(currency); - var balance = useCurrencyBalance(account !== null && account !== void 0 ? account : undefined, currency); - // only show add or remove buttons if not on selected list - return (jsxRuntime.jsxs(MenuItem, __assign({ style: style, className: "token-item-" + key, onClick: function () { return (isSelected ? null : onSelect()); }, disabled: isSelected, selected: otherSelected }, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: currency, size: '24px' }, void 0), jsxRuntime.jsxs(Column, { children: [jsxRuntime.jsx(rebass.Text, __assign({ title: currency.name, fontWeight: 500 }, { children: currency.symbol }), void 0), jsxRuntime.jsx(ThemedText.DarkGray, __assign({ ml: "0px", fontSize: '12px', fontWeight: 300 }, { children: !currency.isNative && !isOnSelectedList && customAdded ? (jsxRuntime.jsxs(macro.Trans, { children: [currency.name, " \u2022 Added by user"] }, void 0)) : (currency.name) }), void 0)] }, void 0), jsxRuntime.jsx(TokenTags, { currency: currency }, void 0), showCurrencyAmount && (jsxRuntime.jsx(RowFixed, __assign({ style: { justifySelf: 'flex-end' } }, { children: balance ? jsxRuntime.jsx(Balance, { balance: balance }, void 0) : account ? jsxRuntime.jsx(Loader, {}, void 0) : null }), void 0))] }), void 0)); -} -var BREAK_LINE = 'BREAK'; -function isBreakLine(x) { - return x === BREAK_LINE; -} -function BreakLineComponent(_a) { - var style = _a.style; - var theme = useTheme(); - return (jsxRuntime.jsx(FixedContentRow, __assign({ style: style }, { children: jsxRuntime.jsx(LightGreyCard, __assign({ padding: "8px 12px", "$borderRadius": "8px" }, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(TokenListLogoWrapper, { src: TokenListLogo }, void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ ml: "6px", fontSize: "12px", color: theme.text1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Expanded results from inactive Token Lists" }, void 0) }), void 0)] }, void 0), jsxRuntime.jsx(QuestionHelper, { text: jsxRuntime.jsx(macro.Trans, { children: "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists." }, void 0) }, void 0)] }, void 0) }), void 0) }), void 0)); -} -function CurrencyList(_a) { - var height = _a.height, currencies = _a.currencies, otherListTokens = _a.otherListTokens, selectedCurrency = _a.selectedCurrency, onCurrencySelect = _a.onCurrencySelect, otherCurrency = _a.otherCurrency, fixedListRef = _a.fixedListRef, showImportView = _a.showImportView, setImportToken = _a.setImportToken, showCurrencyAmount = _a.showCurrencyAmount; - var itemData = React.useMemo(function () { - if (otherListTokens && (otherListTokens === null || otherListTokens === void 0 ? void 0 : otherListTokens.length) > 0) { - return __spreadArray(__spreadArray(__spreadArray([], __read(currencies), false), [BREAK_LINE], false), __read(otherListTokens), false); - } - return currencies; - }, [currencies, otherListTokens]); - var Row = React.useCallback(function TokenRow(_a) { - var data = _a.data, index = _a.index, style = _a.style; - var row = data[index]; - if (isBreakLine(row)) { - return jsxRuntime.jsx(BreakLineComponent, { style: style }, void 0); - } - var currency = row; - var isSelected = Boolean(currency && selectedCurrency && selectedCurrency.equals(currency)); - var otherSelected = Boolean(currency && otherCurrency && otherCurrency.equals(currency)); - var handleSelect = function () { return currency && onCurrencySelect(currency); }; - var token = currency === null || currency === void 0 ? void 0 : currency.wrapped; - var showImport = index > currencies.length; - if (showImport && token) { - return (jsxRuntime.jsx(ImportRow, { style: style, token: token, showImportView: showImportView, setImportToken: setImportToken, dim: true }, void 0)); - } - else if (currency) { - return (jsxRuntime.jsx(CurrencyRow, { style: style, currency: currency, isSelected: isSelected, onSelect: handleSelect, otherSelected: otherSelected, showCurrencyAmount: showCurrencyAmount }, void 0)); - } - else { - return null; - } - }, [ - currencies.length, - onCurrencySelect, - otherCurrency, - selectedCurrency, - setImportToken, - showImportView, - showCurrencyAmount, - ]); - var itemKey = React.useCallback(function (index, data) { - var currency = data[index]; - if (isBreakLine(currency)) - return BREAK_LINE; - return currencyKey(currency); - }, []); - return (jsxRuntime.jsx(reactWindow.FixedSizeList, __assign({ height: height, ref: fixedListRef, width: "100%", itemData: itemData, itemCount: itemData.length, itemSize: 56, itemKey: itemKey }, { children: Row }), void 0)); -} -var templateObject_1$r, templateObject_2$g, templateObject_3$d, templateObject_4$8, templateObject_5$7; - -var ContentWrapper = styled__default["default"](Column)(templateObject_1$q || (templateObject_1$q = __makeTemplateObject(["\n width: 100%;\n flex: 1 1;\n position: relative;\n"], ["\n width: 100%;\n flex: 1 1;\n position: relative;\n"]))); -var Footer$1 = styled__default["default"].div(templateObject_2$f || (templateObject_2$f = __makeTemplateObject(["\n width: 100%;\n border-radius: 20px;\n padding: 20px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n background-color: ", ";\n border-top: 1px solid ", ";\n"], ["\n width: 100%;\n border-radius: 20px;\n padding: 20px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n background-color: ", ";\n border-top: 1px solid ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var theme = _a.theme; - return theme.bg2; -}); -function CurrencySearch(_a) { - var selectedCurrency = _a.selectedCurrency, onCurrencySelect = _a.onCurrencySelect, otherSelectedCurrency = _a.otherSelectedCurrency, showCommonBases = _a.showCommonBases, showCurrencyAmount = _a.showCurrencyAmount, disableNonToken = _a.disableNonToken, onDismiss = _a.onDismiss, isOpen = _a.isOpen, showManageView = _a.showManageView, showImportView = _a.showImportView, setImportToken = _a.setImportToken; - var chainId = useActiveWeb3React().chainId; - var theme = useTheme(); - // refs for fixed size lists - var fixedList = React.useRef(); - var _b = __read(React.useState(''), 2), searchQuery = _b[0], setSearchQuery = _b[1]; - var debouncedQuery = useDebounce(searchQuery, 200); - var allTokens = useAllTokens(); - // if they input an address, use it - var isAddressSearch = isAddress(debouncedQuery); - var searchToken = useToken(debouncedQuery); - var searchTokenIsAdded = useIsUserAddedToken(searchToken); - React.useEffect(function () { - if (isAddressSearch) { - ReactGA__default["default"].event({ - category: 'Currency Select', - action: 'Search by address', - label: isAddressSearch, - }); - } - }, [isAddressSearch]); - var filteredTokens = React.useMemo(function () { - return Object.values(allTokens).filter(getTokenFilter(debouncedQuery)); - }, [allTokens, debouncedQuery]); - var balances = useAllTokenBalances(); - var sortedTokens = React.useMemo(function () { - return filteredTokens.sort(tokenComparator.bind(null, balances)); - }, [balances, filteredTokens]); - var filteredSortedTokens = useSortTokensByQuery(debouncedQuery, sortedTokens); - var native = useNativeCurrency(); - var filteredSortedTokensWithETH = React.useMemo(function () { - var _a, _b; - if (!native) - return filteredSortedTokens; - var s = debouncedQuery.toLowerCase().trim(); - if (((_b = (_a = native.symbol) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === null || _b === void 0 ? void 0 : _b.indexOf(s)) !== -1) { - return native ? __spreadArray([native], __read(filteredSortedTokens), false) : filteredSortedTokens; - } - return filteredSortedTokens; - }, [debouncedQuery, native, filteredSortedTokens]); - var handleCurrencySelect = React.useCallback(function (currency) { - onCurrencySelect(currency); - onDismiss(); - }, [onDismiss, onCurrencySelect]); - // clear the input on open - React.useEffect(function () { - if (isOpen) - setSearchQuery(''); - }, [isOpen]); - // manage focus on modal show - var inputRef = React.useRef(); - var handleInput = React.useCallback(function (event) { - var _a; - var input = event.target.value; - var checksummedInput = isAddress(input); - setSearchQuery(checksummedInput || input); - (_a = fixedList.current) === null || _a === void 0 ? void 0 : _a.scrollTo(0); - }, []); - var handleEnter = React.useCallback(function (e) { - var _a, _b; - if (e.key === 'Enter') { - var s = debouncedQuery.toLowerCase().trim(); - if (s === ((_a = native === null || native === void 0 ? void 0 : native.symbol) === null || _a === void 0 ? void 0 : _a.toLowerCase())) { - handleCurrencySelect(native); - } - else if (filteredSortedTokensWithETH.length > 0) { - if (((_b = filteredSortedTokensWithETH[0].symbol) === null || _b === void 0 ? void 0 : _b.toLowerCase()) === debouncedQuery.trim().toLowerCase() || - filteredSortedTokensWithETH.length === 1) { - handleCurrencySelect(filteredSortedTokensWithETH[0]); - } - } - } - }, [debouncedQuery, native, filteredSortedTokensWithETH, handleCurrencySelect]); - // menu ui - var _c = __read(useToggle(false), 2), open = _c[0], toggle = _c[1]; - var node = React.useRef(); - useOnClickOutside(node, open ? toggle : undefined); - // if no results on main list, show option to expand into inactive - var filteredInactiveTokens = useSearchInactiveTokenLists(filteredTokens.length === 0 || (debouncedQuery.length > 2 && !isAddressSearch) ? debouncedQuery : undefined); - return (jsxRuntime.jsxs(ContentWrapper, { children: [jsxRuntime.jsxs(PaddedColumn, __assign({ gap: "16px" }, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 16 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Select a token" }, void 0) }), void 0), jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0)] }, void 0), jsxRuntime.jsx(Row, { children: jsxRuntime.jsx(SearchInput, { type: "text", id: "token-search-input", placeholder: macro.t(templateObject_3$c || (templateObject_3$c = __makeTemplateObject(["Search name or paste address"], ["Search name or paste address"]))), autoComplete: "off", value: searchQuery, ref: inputRef, onChange: handleInput, onKeyDown: handleEnter }, void 0) }, void 0), showCommonBases && (jsxRuntime.jsx(CommonBases, { chainId: chainId, onSelect: handleCurrencySelect, selectedCurrency: selectedCurrency }, void 0))] }), void 0), jsxRuntime.jsx(Separator, {}, void 0), searchToken && !searchTokenIsAdded ? (jsxRuntime.jsx(Column, __assign({ style: { padding: '20px 0', height: '100%' } }, { children: jsxRuntime.jsx(ImportRow, { token: searchToken, showImportView: showImportView, setImportToken: setImportToken }, void 0) }), void 0)) : (filteredSortedTokens === null || filteredSortedTokens === void 0 ? void 0 : filteredSortedTokens.length) > 0 || (filteredInactiveTokens === null || filteredInactiveTokens === void 0 ? void 0 : filteredInactiveTokens.length) > 0 ? (jsxRuntime.jsx("div", __assign({ style: { flex: '1' } }, { children: jsxRuntime.jsx(AutoSizer__default["default"], __assign({ disableWidth: true }, { children: function (_a) { - var height = _a.height; - return (jsxRuntime.jsx(CurrencyList, { height: height, currencies: disableNonToken ? filteredSortedTokens : filteredSortedTokensWithETH, otherListTokens: filteredInactiveTokens, onCurrencySelect: handleCurrencySelect, otherCurrency: otherSelectedCurrency, selectedCurrency: selectedCurrency, fixedListRef: fixedList, showImportView: showImportView, setImportToken: setImportToken, showCurrencyAmount: showCurrencyAmount }, void 0)); - } }), void 0) }), void 0)) : (jsxRuntime.jsx(Column, __assign({ style: { padding: '20px', height: '100%' } }, { children: jsxRuntime.jsx(ThemedText.Main, __assign({ color: theme.text3, textAlign: "center", mb: "20px" }, { children: jsxRuntime.jsx(macro.Trans, { children: "No results found." }, void 0) }), void 0) }), void 0)), jsxRuntime.jsx(Footer$1, { children: jsxRuntime.jsx(Row, __assign({ justify: "center" }, { children: jsxRuntime.jsx(ButtonText, __assign({ onClick: showManageView, color: theme.primary1, className: "list-token-manage-button" }, { children: jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(IconWrapper, __assign({ size: "16px", marginRight: "6px", stroke: theme.primaryText1 }, { children: jsxRuntime.jsx(reactFeather.Edit, {}, void 0) }), void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ color: theme.primaryText1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Manage Token Lists" }, void 0) }), void 0)] }, void 0) }), void 0) }), void 0) }, void 0)] }, void 0)); -} -var templateObject_1$q, templateObject_2$f, templateObject_3$c; - -var UNISWAP_LOGO_URL = "data:image/svg+xml,%3Csvg%20width%3D%2214%22%20height%3D%2215%22%20viewBox%3D%220%200%2014%2015%22%20fill%3D%22black%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20style%3D%22mix-blend-mode%3Adarken%22%3E%3Cpath%20d%3D%22M4.15217%201.55141C3.96412%201.52242%203.95619%201.51902%204.04468%201.5055C4.21427%201.47958%204.61472%201.51491%204.89067%201.58012C5.53489%201.73232%206.12109%202.12221%206.74683%202.81466L6.91307%202.99862L7.15088%202.96062C8.15274%202.8006%209.17194%202.92778%2010.0244%203.31918C10.2589%203.42686%2010.6287%203.64121%2010.6749%203.69629C10.6896%203.71384%2010.7166%203.82684%2010.7349%203.94742C10.7982%204.36458%2010.7665%204.68434%2010.6382%204.92317C10.5683%205.05313%2010.5644%205.09432%2010.6114%205.20554C10.6489%205.2943%2010.7534%205.35999%2010.8569%205.35985C11.0687%205.35956%2011.2968%205.0192%2011.4024%204.54561L11.4444%204.3575L11.5275%204.45109C11.9835%204.96459%2012.3417%205.66488%2012.4032%206.16335L12.4192%206.29332L12.3426%206.17517C12.2107%205.97186%2012.0781%205.83346%2011.9084%205.72183C11.6024%205.52062%2011.2789%205.45215%2010.4222%205.40727C9.64839%205.36675%209.21045%205.30106%208.77621%205.16032C8.03738%204.9209%207.66493%204.60204%206.78729%203.4576C6.39748%202.94928%206.15654%202.66804%205.91687%202.44155C5.37228%201.92691%204.83716%201.65701%204.15217%201.55141Z%22%2F%3E%3Cpath%20d%3D%22M10.8494%202.68637C10.8689%202.34575%2010.9153%202.12108%2011.0088%201.9159C11.0458%201.83469%2011.0804%201.76822%2011.0858%201.76822C11.0911%201.76822%2011.075%201.82816%2011.05%201.90142C10.9821%202.10054%2010.9709%202.3729%2011.0177%202.68978C11.0771%203.09184%2011.1109%203.14985%2011.5385%203.58416C11.739%203.78788%2011.9723%204.0448%2012.0568%204.15511L12.2106%204.35568L12.0568%204.21234C11.8688%204.03705%2011.4364%203.6952%2011.3409%203.64633C11.2768%203.61356%2011.2673%203.61413%2011.2278%203.65321C11.1914%203.68922%2011.1837%203.74333%2011.1787%203.99915C11.1708%204.39786%2011.1161%204.65377%2010.9842%204.90965C10.9128%205.04805%2010.9015%205.01851%2010.9661%204.8623C11.0143%204.74566%2011.0192%204.69439%2011.0189%204.30842C11.0181%203.53291%2010.9255%203.34647%2010.3823%203.02709C10.2447%202.94618%2010.0179%202.8295%209.87839%202.76778C9.73887%202.70606%209.62805%202.6523%209.63208%202.64828C9.64746%202.63307%2010.1772%202.78675%2010.3905%202.86828C10.7077%202.98954%2010.76%203.00526%2010.7985%202.99063C10.8244%202.98082%2010.8369%202.90608%2010.8494%202.68637Z%22%2F%3E%3Cpath%20d%3D%22M4.51745%204.01304C4.13569%203.49066%203.89948%202.68973%203.95062%202.091L3.96643%201.90572L4.05333%201.92148C4.21652%201.95106%204.49789%202.05515%204.62964%202.13469C4.9912%202.35293%205.14773%202.64027%205.30697%203.37811C5.35362%203.59423%205.41482%203.8388%205.44298%203.9216C5.48831%204.05487%205.65962%204.36617%205.7989%204.56834C5.89922%204.71395%205.83258%204.78295%205.61082%204.76305C5.27215%204.73267%204.8134%204.41799%204.51745%204.01304Z%22%2F%3E%3Cpath%20d%3D%22M10.3863%207.90088C8.60224%207.18693%207.97389%206.56721%207.97389%205.52157C7.97389%205.36769%207.97922%205.24179%207.98571%205.24179C7.99221%205.24179%208.06124%205.29257%208.1391%205.35465C8.50088%205.64305%208.906%205.76623%2010.0275%205.92885C10.6875%206.02455%2011.0589%206.10185%2011.4015%206.21477C12.4904%206.57371%2013.1641%207.30212%2013.3248%208.29426C13.3715%208.58255%2013.3441%209.12317%2013.2684%209.4081C13.2087%209.63315%2013.0263%2010.0388%2012.9779%2010.0544C12.9645%2010.0587%2012.9514%2010.0076%2012.9479%209.93809C12.9296%209.56554%2012.7402%209.20285%2012.4221%208.93116C12.0604%208.62227%2011.5745%208.37633%2010.3863%207.90088Z%22%2F%3E%3Cpath%20d%3D%22M9.13385%208.19748C9.11149%208.06527%209.07272%207.89643%209.04769%207.82228L9.00217%207.68748L9.08672%207.7818C9.20374%207.91233%209.2962%208.07937%209.37457%208.30185C9.43438%208.47165%209.44111%208.52215%209.44066%208.79807C9.4402%209.06896%209.43273%209.12575%209.3775%209.27858C9.29042%209.51959%209.18233%209.69048%209.00097%209.87391C8.67507%2010.2036%208.25607%2010.3861%207.65143%2010.4618C7.54633%2010.4749%207.24%2010.4971%206.97069%2010.511C6.292%2010.5461%205.84531%2010.6186%205.44393%2010.7587C5.38623%2010.7788%205.3347%2010.7911%205.32947%2010.7859C5.31323%2010.7698%205.58651%2010.6079%205.81223%2010.4998C6.1305%2010.3474%206.44733%2010.2643%207.15719%2010.1468C7.50785%2010.0887%207.86998%2010.0183%207.96194%209.99029C8.83033%209.72566%209.27671%209.04276%209.13385%208.19748Z%22%2F%3E%3Cpath%20d%3D%22M9.95169%209.64109C9.71465%209.13463%209.66022%208.64564%209.79009%208.18961C9.80399%208.14088%209.82632%208.101%209.83976%208.101C9.85319%208.101%209.90913%208.13105%209.96404%208.16777C10.0733%208.24086%2010.2924%208.36395%2010.876%208.68023C11.6043%209.0749%2012.0196%209.3805%2012.302%209.72965C12.5493%2010.0354%2012.7023%2010.3837%2012.776%2010.8084C12.8177%2011.0489%2012.7932%2011.6277%2012.7311%2011.8699C12.5353%2012.6337%2012.0802%2013.2336%2011.4311%2013.5837C11.336%2013.635%2011.2506%2013.6771%2011.2414%2013.6773C11.2321%2013.6775%2011.2668%2013.5899%2011.3184%2013.4827C11.5367%2013.029%2011.5616%2012.5877%2011.3965%2012.0965C11.2954%2011.7957%2011.0893%2011.4287%2010.6732%2010.8084C10.1893%2010.0873%2010.0707%209.89539%209.95169%209.64109Z%22%2F%3E%3Cpath%20d%3D%22M3.25046%2012.3737C3.91252%2011.8181%204.73629%2011.4234%205.48666%2011.3022C5.81005%2011.25%206.34877%2011.2707%206.64823%2011.3469C7.12824%2011.469%207.55763%2011.7425%207.78094%2012.0683C7.99918%2012.3867%208.09281%2012.6642%208.19029%2013.2816C8.22875%2013.5252%208.27057%2013.7697%208.28323%2013.8251C8.35644%2014.1451%208.4989%2014.4008%208.67544%2014.5293C8.95583%2014.7333%209.43865%2014.7459%209.91362%2014.5618C9.99423%2014.5305%2010.0642%2014.5089%2010.0691%2014.5138C10.0864%2014.5308%209.84719%2014.6899%209.67847%2014.7737C9.45143%2014.8864%209.2709%2014.93%209.03102%2014.93C8.59601%2014.93%208.23486%2014.7101%207.9335%2014.2616C7.87419%2014.1733%207.7409%2013.909%207.63729%2013.6741C7.3191%2012.9528%207.16199%2012.7331%206.79255%2012.4926C6.47104%2012.2834%206.05641%2012.2459%205.74449%2012.3979C5.33475%2012.5976%205.22043%2013.118%205.51389%2013.4478C5.63053%2013.5789%205.84803%2013.6919%206.02588%2013.7139C6.35861%2013.7551%206.64455%2013.5035%206.64455%2013.1696C6.64455%2012.9528%206.56071%2012.8291%206.34966%2012.7344C6.0614%2012.6051%205.75156%2012.7562%205.75304%2013.0254C5.75368%2013.1402%205.80396%2013.2122%205.91971%2013.2643C5.99397%2013.2977%205.99569%2013.3003%205.93514%2013.2878C5.67066%2013.2333%205.6087%2012.9164%205.82135%2012.706C6.07667%2012.4535%206.60461%2012.5649%206.78591%2012.9097C6.86208%2013.0545%206.87092%2013.3429%206.80451%2013.517C6.6559%2013.9068%206.22256%2014.1117%205.78297%2014.0002C5.48368%2013.9242%205.36181%2013.842%205.00097%2013.4726C4.37395%2012.8306%204.13053%2012.7062%203.22657%2012.566L3.05335%2012.5391L3.25046%2012.3737Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M0.308383%200.883984C2.40235%203.40996%203.84457%204.45213%204.00484%204.67231C4.13717%204.85412%204.08737%205.01757%203.86067%205.14567C3.7346%205.21689%203.47541%205.28905%203.34564%205.28905C3.19887%205.28905%203.14847%205.23278%203.14847%205.23278C3.06337%205.15255%203.01544%205.16658%202.5784%204.39555C1.97166%203.45981%201.46389%202.68357%201.45004%202.67057C1.41801%202.64052%201.41856%202.64153%202.51654%204.59413C2.69394%205.0011%202.55182%205.15049%202.55182%205.20845C2.55182%205.32636%202.51946%205.38834%202.37311%205.55059C2.12914%205.8211%202.02008%206.12505%201.94135%206.7541C1.8531%207.45926%201.60492%207.95737%200.917156%208.80989C0.514562%209.30893%200.448686%209.4004%200.3471%209.60153C0.219144%209.85482%200.183961%209.99669%200.169701%2010.3165C0.154629%2010.6547%200.183983%2010.8732%200.287934%2011.1965C0.378939%2011.4796%200.473932%2011.6665%200.716778%2012.0403C0.926351%2012.3629%201.04702%2012.6027%201.04702%2012.6965C1.04702%2012.7711%201.06136%2012.7712%201.38611%2012.6983C2.16328%2012.5239%202.79434%2012.2171%203.14925%2011.8411C3.36891%2011.6084%203.42048%2011.4799%203.42215%2011.1611C3.42325%2010.9525%203.41587%2010.9088%203.35914%2010.7888C3.2668%2010.5935%203.09869%2010.4311%202.72817%2010.1794C2.2427%209.84953%202.03534%209.58398%201.97807%209.21878C1.93108%208.91913%201.98559%208.70771%202.25416%208.14825C2.53214%207.56916%202.60103%207.32239%202.64763%206.73869C2.67773%206.36158%202.71941%206.21286%202.82842%206.09348C2.94212%205.969%203.04447%205.92684%203.32584%205.88863C3.78457%205.82635%204.07667%205.70839%204.31677%205.48849C4.52505%205.29772%204.61221%205.11391%204.62558%204.8372L4.63574%204.62747L4.51934%204.49259C4.09783%204.00411%200.0261003%200.5%200.000160437%200.5C-0.00538105%200.5%200.133325%200.672804%200.308383%200.883984ZM1.28364%2010.6992C1.37894%2010.5314%201.3283%2010.3158%201.16889%2010.2104C1.01827%2010.1109%200.78428%2010.1578%200.78428%2010.2875C0.78428%2010.3271%200.806303%2010.3559%200.855937%2010.3813C0.939514%2010.424%200.945581%2010.4721%200.879823%2010.5703C0.81323%2010.6698%200.818604%2010.7573%200.894991%2010.8167C1.0181%2010.9125%201.19237%2010.8598%201.28364%2010.6992Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M4.92523%205.99865C4.70988%206.06439%204.50054%206.29124%204.43574%206.5291C4.39621%206.67421%204.41864%206.92875%204.47785%207.00736C4.57351%207.13433%204.66602%207.16778%204.91651%207.16603C5.40693%207.16263%205.83327%206.95358%205.88284%206.69224C5.92347%206.47801%205.73622%206.18112%205.4783%206.05078C5.34521%205.98355%205.06217%205.95688%204.92523%205.99865ZM5.49853%206.44422C5.57416%206.33741%205.54107%206.22198%205.41245%206.14391C5.1675%205.99525%204.79708%206.11827%204.79708%206.34826C4.79708%206.46274%204.99025%206.58765%205.16731%206.58765C5.28516%206.58765%205.44644%206.5178%205.49853%206.44422Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"; - -var _a$6; -var NETWORK_POLLING_INTERVALS = (_a$6 = {}, - _a$6[SupportedChainId.ARBITRUM_ONE] = ms__default["default"](templateObject_1$p || (templateObject_1$p = __makeTemplateObject(["1s"], ["1s"]))), - _a$6[SupportedChainId.ARBITRUM_RINKEBY] = ms__default["default"](templateObject_2$e || (templateObject_2$e = __makeTemplateObject(["1s"], ["1s"]))), - _a$6[SupportedChainId.OPTIMISM] = ms__default["default"](templateObject_3$b || (templateObject_3$b = __makeTemplateObject(["1s"], ["1s"]))), - _a$6[SupportedChainId.OPTIMISTIC_KOVAN] = ms__default["default"](templateObject_4$7 || (templateObject_4$7 = __makeTemplateObject(["1s"], ["1s"]))), - _a$6); -function getLibrary(provider) { - var library = new providers.Web3Provider(provider, typeof provider.chainId === 'number' - ? provider.chainId - : typeof provider.chainId === 'string' - ? parseInt(provider.chainId) - : 'any'); - library.pollingInterval = 15000; - library.detectNetwork().then(function (network) { - var networkPollingInterval = NETWORK_POLLING_INTERVALS[network.chainId]; - if (networkPollingInterval) { - console.debug('Setting polling interval', networkPollingInterval); - library.pollingInterval = networkPollingInterval; - } - }); - return library; -} -var templateObject_1$p, templateObject_2$e, templateObject_3$b, templateObject_4$7; - -var OVERLAY_READY = 'OVERLAY_READY'; -var CHAIN_ID_NETWORK_ARGUMENT = { - 1: undefined, - 3: 'ropsten', - 4: 'rinkeby', - 42: 'kovan', -}; -var FortmaticConnector = /** @class */ (function (_super) { - __extends(FortmaticConnector, _super); - function FortmaticConnector() { - return _super !== null && _super.apply(this, arguments) || this; - } - FortmaticConnector.prototype.activate = function () { - return __awaiter(this, void 0, void 0, function () { - var Fortmatic, _a, apiKey, chainId, provider, pollForOverlayReady, _b, account; - var _this = this; - return __generator(this, function (_c) { - switch (_c.label) { - case 0: - if (!!this.fortmatic) return [3 /*break*/, 2]; - return [4 /*yield*/, Promise.resolve().then(function () { return fortmatic$1; })]; - case 1: - Fortmatic = (_c.sent()).default; - _a = this, apiKey = _a.apiKey, chainId = _a.chainId; - if (chainId in CHAIN_ID_NETWORK_ARGUMENT) { - this.fortmatic = new Fortmatic(apiKey, CHAIN_ID_NETWORK_ARGUMENT[chainId]); - } - else { - throw new Error("Unsupported network ID: " + chainId); - } - _c.label = 2; - case 2: - provider = this.fortmatic.getProvider(); - pollForOverlayReady = new Promise(function (resolve) { - var interval = setInterval(function () { - if (provider.overlayReady) { - clearInterval(interval); - _this.emit(OVERLAY_READY); - resolve(); - } - }, 200); - }); - return [4 /*yield*/, Promise.all([ - provider.enable().then(function (accounts) { return accounts[0]; }), - pollForOverlayReady, - ])]; - case 3: - _b = __read.apply(void 0, [_c.sent(), 1]), account = _b[0]; - return [2 /*return*/, { provider: this.fortmatic.getProvider(), chainId: this.chainId, account: account }]; - } - }); - }); - }; - return FortmaticConnector; -}(fortmaticConnector.FortmaticConnector)); - -var RequestError = /** @class */ (function (_super) { - __extends(RequestError, _super); - function RequestError(message, code, data) { - var _this = _super.call(this, message) || this; - _this.code = code; - _this.data = data; - return _this; - } - return RequestError; -}(Error)); -var MiniRpcProvider = /** @class */ (function () { - function MiniRpcProvider(connector, chainId, url, batchWaitTimeMs) { - var _this = this; - this.isMetaMask = false; - this.nextId = 1; - this.batchTimeoutId = null; - this.batch = []; - this.clearBatch = function () { return __awaiter(_this, void 0, void 0, function () { - var batch, response, json, byKey, json_1, json_1_1, result, _a, resolve, reject, method; - var e_1, _b; - var _this = this; - var _c, _d, _e; - return __generator(this, function (_f) { - switch (_f.label) { - case 0: - console.debug('Clearing batch', this.batch); - batch = this.batch; - batch = batch.filter(function (b) { - if (b.request.method === 'wallet_switchEthereumChain') { - try { - _this.connector.changeChainId(parseInt(b.request.params[0].chainId)); - b.resolve({ id: b.request.id }); - } - catch (error) { - b.reject(error); - } - return false; - } - return true; - }); - this.batch = []; - this.batchTimeoutId = null; - _f.label = 1; - case 1: - _f.trys.push([1, 3, , 4]); - return [4 /*yield*/, fetch(this.url, { - method: 'POST', - headers: { 'content-type': 'application/json', accept: 'application/json' }, - body: JSON.stringify(batch.map(function (item) { return item.request; })), - })]; - case 2: - response = _f.sent(); - return [3 /*break*/, 4]; - case 3: - _f.sent(); - batch.forEach(function (_a) { - var reject = _a.reject; - return reject(new Error('Failed to send batch call')); - }); - return [2 /*return*/]; - case 4: - if (!response.ok) { - batch.forEach(function (_a) { - var reject = _a.reject; - return reject(new RequestError(response.status + ": " + response.statusText, -32000)); - }); - return [2 /*return*/]; - } - _f.label = 5; - case 5: - _f.trys.push([5, 7, , 8]); - return [4 /*yield*/, response.json()]; - case 6: - json = _f.sent(); - return [3 /*break*/, 8]; - case 7: - _f.sent(); - batch.forEach(function (_a) { - var reject = _a.reject; - return reject(new Error('Failed to parse JSON response')); - }); - return [2 /*return*/]; - case 8: - byKey = batch.reduce(function (memo, current) { - memo[current.request.id] = current; - return memo; - }, {}); - try { - for (json_1 = __values(json), json_1_1 = json_1.next(); !json_1_1.done; json_1_1 = json_1.next()) { - result = json_1_1.value; - _a = byKey[result.id], resolve = _a.resolve, reject = _a.reject, method = _a.request.method; - if ('error' in result) { - reject(new RequestError((_c = result === null || result === void 0 ? void 0 : result.error) === null || _c === void 0 ? void 0 : _c.message, (_d = result === null || result === void 0 ? void 0 : result.error) === null || _d === void 0 ? void 0 : _d.code, (_e = result === null || result === void 0 ? void 0 : result.error) === null || _e === void 0 ? void 0 : _e.data)); - } - else if ('result' in result && resolve) { - resolve(result.result); - } - else { - reject(new RequestError("Received unexpected JSON-RPC response to " + method + " request.", -32000, result)); - } - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (json_1_1 && !json_1_1.done && (_b = json_1.return)) _b.call(json_1); - } - finally { if (e_1) throw e_1.error; } - } - return [2 /*return*/]; - } - }); - }); }; - this.sendAsync = function (request, callback) { - _this.request(request.method, request.params) - .then(function (result) { return callback(null, { jsonrpc: '2.0', id: request.id, result: result }); }) - .catch(function (error) { return callback(error, null); }); - }; - this.request = function (method, params) { return __awaiter(_this, void 0, void 0, function () { - var promise; - var _this = this; - var _a; - return __generator(this, function (_b) { - if (typeof method !== 'string') { - return [2 /*return*/, this.request(method.method, method.params)]; - } - if (method === 'eth_chainId') { - return [2 /*return*/, "0x" + this.chainId.toString(16)]; - } - promise = new Promise(function (resolve, reject) { - _this.batch.push({ - request: { - jsonrpc: '2.0', - id: _this.nextId++, - method: method, - params: params, - }, - resolve: resolve, - reject: reject, - }); - }); - this.batchTimeoutId = (_a = this.batchTimeoutId) !== null && _a !== void 0 ? _a : setTimeout(this.clearBatch, this.batchWaitTimeMs); - return [2 /*return*/, promise]; - }); - }); }; - this.connector = connector; - this.chainId = chainId; - this.url = url; - var parsed = new URL(url); - this.host = parsed.host; - this.path = parsed.pathname; - // how long to wait to batch calls - this.batchWaitTimeMs = batchWaitTimeMs !== null && batchWaitTimeMs !== void 0 ? batchWaitTimeMs : 50; - } - return MiniRpcProvider; -}()); -var NetworkConnector = /** @class */ (function (_super) { - __extends(NetworkConnector, _super); - function NetworkConnector(_a) { - var urls = _a.urls, defaultChainId = _a.defaultChainId; - var _this = this; - invariant__default["default"](defaultChainId || Object.keys(urls).length === 1, 'defaultChainId is a required argument with >1 url'); - _this = _super.call(this, { supportedChainIds: Object.keys(urls).map(function (k) { return Number(k); }) }) || this; - _this.currentChainId = defaultChainId !== null && defaultChainId !== void 0 ? defaultChainId : Number(Object.keys(urls)[0]); - _this.providers = Object.keys(urls).reduce(function (accumulator, chainId) { - accumulator[Number(chainId)] = new MiniRpcProvider(_this, Number(chainId), urls[Number(chainId)]); - return accumulator; - }, {}); - return _this; - } - Object.defineProperty(NetworkConnector.prototype, "provider", { - get: function () { - return this.providers[this.currentChainId]; - }, - enumerable: false, - configurable: true - }); - NetworkConnector.prototype.activate = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, { provider: this.providers[this.currentChainId], chainId: this.currentChainId, account: null }]; - }); - }); - }; - NetworkConnector.prototype.getProvider = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, this.providers[this.currentChainId]]; - }); - }); - }; - NetworkConnector.prototype.getChainId = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, this.currentChainId]; - }); - }); - }; - NetworkConnector.prototype.getAccount = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, null]; - }); - }); - }; - NetworkConnector.prototype.deactivate = function () { - return; - }; - /** - * Meant to be called only by MiniRpcProvider - * @param chainId the new chain id - */ - NetworkConnector.prototype.changeChainId = function (chainId) { - if (chainId in this.providers) { - this.currentChainId = chainId; - this.emitUpdate({ - chainId: chainId, - account: null, - provider: this.providers[chainId], - }); - } - else { - throw new Error("Unsupported chain ID: " + chainId); - } - }; - return NetworkConnector; -}(abstractConnector.AbstractConnector)); - -var FORMATIC_KEY = process.env.REACT_APP_FORTMATIC_KEY; -var PORTIS_ID = process.env.REACT_APP_PORTIS_ID; -var network = new NetworkConnector({ - urls: INFURA_NETWORK_URLS, - defaultChainId: 1, -}); -var networkLibrary; -function getNetworkLibrary() { - return (networkLibrary = networkLibrary !== null && networkLibrary !== void 0 ? networkLibrary : getLibrary(network.provider)); -} -new injectedConnector.InjectedConnector({ - supportedChainIds: ALL_SUPPORTED_CHAIN_IDS, -}); -new safeAppsWeb3React.SafeAppConnector(); -new walletconnectConnector.WalletConnectConnector({ - supportedChainIds: ALL_SUPPORTED_CHAIN_IDS, - rpc: INFURA_NETWORK_URLS, - qrcode: true, -}); -// mainnet only -new FortmaticConnector({ - apiKey: FORMATIC_KEY !== null && FORMATIC_KEY !== void 0 ? FORMATIC_KEY : '', - chainId: 1, -}); -// mainnet only -new portisConnector.PortisConnector({ - dAppId: PORTIS_ID !== null && PORTIS_ID !== void 0 ? PORTIS_ID : '', - networks: [1], -}); -new walletlinkConnector.WalletLinkConnector({ - url: INFURA_NETWORK_URLS[SupportedChainId.MAINNET], - appName: 'Uniswap', - appLogoUrl: UNISWAP_LOGO_URL, - supportedChainIds: [SupportedChainId.MAINNET, SupportedChainId.POLYGON], -}); - -var fetchTokenList = { - pending: toolkit.createAction('lists/fetchTokenList/pending'), - fulfilled: toolkit.createAction('lists/fetchTokenList/fulfilled'), - rejected: toolkit.createAction('lists/fetchTokenList/rejected'), -}; -// add and remove from list options -var addList = toolkit.createAction('lists/addList'); -var removeList = toolkit.createAction('lists/removeList'); -// select which lists to search across from loaded lists -var enableList = toolkit.createAction('lists/enableList'); -var disableList = toolkit.createAction('lists/disableList'); -// versioning -var acceptListUpdate = toolkit.createAction('lists/acceptListUpdate'); - -function useFetchListCallback() { - var _this = this; - var _a = useActiveWeb3React(), chainId = _a.chainId, library = _a.library; - var dispatch = useAppDispatch(); - var ensResolver = React.useCallback(function (ensName) { return __awaiter(_this, void 0, void 0, function () { - var networkLibrary, network; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - if (!(!library || chainId !== 1)) return [3 /*break*/, 2]; - networkLibrary = getNetworkLibrary(); - return [4 /*yield*/, networkLibrary.getNetwork()]; - case 1: - network = _a.sent(); - if (networkLibrary && network.chainId === 1) { - return [2 /*return*/, resolveENSContentHash(ensName, networkLibrary)]; - } - throw new Error('Could not construct mainnet ENS resolver'); - case 2: return [2 /*return*/, resolveENSContentHash(ensName, library)]; - } - }); - }); }, [chainId, library]); - // note: prevent dispatch if using for list search or unsupported list - return React.useCallback(function (listUrl, sendDispatch) { - if (sendDispatch === void 0) { sendDispatch = true; } - return __awaiter(_this, void 0, void 0, function () { - var requestId; - return __generator(this, function (_a) { - requestId = toolkit.nanoid(); - sendDispatch && dispatch(fetchTokenList.pending({ requestId: requestId, url: listUrl })); - return [2 /*return*/, fetchTokenList$1(listUrl, ensResolver) - .then(function (tokenList) { - sendDispatch && dispatch(fetchTokenList.fulfilled({ url: listUrl, tokenList: tokenList, requestId: requestId })); - return tokenList; - }) - .catch(function (error) { - console.debug("Failed to get list at url " + listUrl, error); - sendDispatch && dispatch(fetchTokenList.rejected({ url: listUrl, requestId: requestId, errorMessage: error.message })); - throw error; - })]; - }); - }); - }, [dispatch, ensResolver]); -} - -var Wrapper$8 = styled__default["default"].div(templateObject_1$o || (templateObject_1$o = __makeTemplateObject(["\n position: relative;\n width: 100%;\n overflow: auto;\n"], ["\n position: relative;\n width: 100%;\n overflow: auto;\n"]))); -function ImportList(_a) { - var _b; - var listURL = _a.listURL, list = _a.list, setModalView = _a.setModalView, onDismiss = _a.onDismiss; - var theme = useTheme(); - var dispatch = useAppDispatch(); - // user must accept - var _c = __read(React.useState(false), 2), confirmed = _c[0], setConfirmed = _c[1]; - var lists = useAllLists(); - var fetchList = useFetchListCallback(); - // monitor is list is loading - var adding = Boolean((_b = lists[listURL]) === null || _b === void 0 ? void 0 : _b.loadingRequestId); - var _d = __read(React.useState(null), 2), addError = _d[0], setAddError = _d[1]; - var handleAddList = React.useCallback(function () { - if (adding) - return; - setAddError(null); - fetchList(listURL) - .then(function () { - ReactGA__default["default"].event({ - category: 'Lists', - action: 'Add List', - label: listURL, - }); - // turn list on - dispatch(enableList(listURL)); - // go back to lists - setModalView(CurrencyModalView.manage); - }) - .catch(function (error) { - ReactGA__default["default"].event({ - category: 'Lists', - action: 'Add List Failed', - label: listURL, - }); - setAddError(error.message); - dispatch(removeList(listURL)); - }); - }, [adding, dispatch, fetchList, listURL, setModalView]); - return (jsxRuntime.jsxs(Wrapper$8, { children: [jsxRuntime.jsx(PaddedColumn, __assign({ gap: "14px", style: { width: '100%', flex: '1 1' } }, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(reactFeather.ArrowLeft, { style: { cursor: 'pointer' }, onClick: function () { return setModalView(CurrencyModalView.manage); } }, void 0), jsxRuntime.jsx(ThemedText.MediumHeader, { children: jsxRuntime.jsx(macro.Trans, { children: "Import List" }, void 0) }, void 0), jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0)] }, void 0) }), void 0), jsxRuntime.jsx(SectionBreak, {}, void 0), jsxRuntime.jsx(PaddedColumn, __assign({ gap: "md" }, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "md" }, { children: [jsxRuntime.jsx(Card, __assign({ backgroundColor: theme.bg2, padding: "12px 20px" }, { children: jsxRuntime.jsx(RowBetween, { children: jsxRuntime.jsxs(RowFixed, { children: [list.logoURI && jsxRuntime.jsx(ListLogo, { logoURI: list.logoURI, size: "40px" }, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "sm", style: { marginLeft: '20px' } }, { children: [jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 600, mr: "6px" }, { children: list.name }), void 0), jsxRuntime.jsx(TextDot, {}, void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: '16px', ml: "6px" }, { children: jsxRuntime.jsxs(macro.Trans, { children: [list.tokens.length, " tokens"] }, void 0) }), void 0)] }, void 0), jsxRuntime.jsx(ExternalLink, __assign({ href: "https://tokenlists.org/token-list?url=" + listURL }, { children: jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: '12px', color: theme.blue1 }, { children: listURL }), void 0) }), void 0)] }), void 0)] }, void 0) }, void 0) }), void 0), jsxRuntime.jsxs(Card, __assign({ style: { backgroundColor: polished.transparentize(0.8, theme.red1) } }, { children: [jsxRuntime.jsxs(AutoColumn, __assign({ justify: "center", style: { textAlign: 'center', gap: '16px', marginBottom: '12px' } }, { children: [jsxRuntime.jsx(reactFeather.AlertTriangle, { stroke: theme.red1, size: 32 }, void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 500, fontSize: 20, color: theme.red1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Import at your own risk" }, void 0) }), void 0)] }), void 0), jsxRuntime.jsxs(AutoColumn, __assign({ style: { textAlign: 'center', gap: '16px', marginBottom: '12px' } }, { children: [jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 500, color: theme.red1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one." }, void 0) }), void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 600, color: theme.red1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "If you purchase a token from this list, you may not be able to sell it back." }, void 0) }), void 0)] }), void 0), jsxRuntime.jsxs(AutoRow, __assign({ justify: "center", style: { cursor: 'pointer' }, onClick: function () { return setConfirmed(!confirmed); } }, { children: [jsxRuntime.jsx(Checkbox, { name: "confirmed", type: "checkbox", checked: confirmed, onChange: function () { return setConfirmed(!confirmed); } }, void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ ml: "10px", fontSize: "16px", color: theme.red1, fontWeight: 500 }, { children: jsxRuntime.jsx(macro.Trans, { children: "I understand" }, void 0) }), void 0)] }), void 0)] }), void 0), jsxRuntime.jsx(ButtonPrimary, __assign({ disabled: !confirmed, altDisabledStyle: true, "$borderRadius": "20px", padding: "10px 1rem", onClick: handleAddList }, { children: jsxRuntime.jsx(macro.Trans, { children: "Import" }, void 0) }), void 0), addError ? (jsxRuntime.jsx(ThemedText.Error, __assign({ title: addError, style: { textOverflow: 'ellipsis', overflow: 'hidden' }, error: true }, { children: addError }), void 0)) : null] }), void 0) }), void 0)] }, void 0)); -} -var templateObject_1$o; - -var WarningWrapper = styled__default["default"](Card)(templateObject_1$n || (templateObject_1$n = __makeTemplateObject(["\n background-color: ", ";\n width: fit-content;\n"], ["\n background-color: ", ";\n width: fit-content;\n"])), function (_a) { - var theme = _a.theme, highWarning = _a.highWarning; - return highWarning ? polished.transparentize(0.8, theme.red1) : polished.transparentize(0.8, theme.yellow2); -}); -var AddressText = styled__default["default"](ThemedText.Blue)(templateObject_3$a || (templateObject_3$a = __makeTemplateObject(["\n font-size: 12px;\n word-break: break-all;\n\n ", "\n"], ["\n font-size: 12px;\n word-break: break-all;\n\n ", "\n"])), function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToSmall(templateObject_2$d || (templateObject_2$d = __makeTemplateObject(["\n font-size: 10px;\n "], ["\n font-size: 10px;\n "]))); -}); -var TokenImportCard = function (_a) { - var list = _a.list, token = _a.token; - var theme = styled.useTheme(); - var chainId = useActiveWeb3React().chainId; - return (jsxRuntime.jsx(Card, __assign({ backgroundColor: theme.bg2, padding: "2rem" }, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "10px", justify: "center" }, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: token, size: '32px' }, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "4px", justify: "center" }, { children: [jsxRuntime.jsx(ThemedText.Body, __assign({ ml: "8px", mr: "8px", fontWeight: 500, fontSize: 20 }, { children: token.symbol }), void 0), jsxRuntime.jsx(ThemedText.DarkGray, __assign({ fontWeight: 400, fontSize: 14 }, { children: token.name }), void 0)] }), void 0), chainId && (jsxRuntime.jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, token.address, ExplorerDataType.ADDRESS) }, { children: jsxRuntime.jsx(AddressText, __assign({ fontSize: 12 }, { children: token.address }), void 0) }), void 0)), list !== undefined ? (jsxRuntime.jsxs(RowFixed, { children: [list.logoURI && jsxRuntime.jsx(ListLogo, { logoURI: list.logoURI, size: "16px" }, void 0), jsxRuntime.jsx(ThemedText.Small, __assign({ ml: "6px", fontSize: 14, color: theme.text3 }, { children: jsxRuntime.jsxs(macro.Trans, { children: ["via ", list.name, " token list"] }, void 0) }), void 0)] }, void 0)) : (jsxRuntime.jsx(WarningWrapper, __assign({ "$borderRadius": "4px", padding: "4px", highWarning: true }, { children: jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(reactFeather.AlertCircle, { stroke: theme.red1, size: "10px" }, void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ color: theme.red1, ml: "4px", fontSize: "10px", fontWeight: 500 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Unknown Source" }, void 0) }), void 0)] }, void 0) }), void 0))] }), void 0) }), void 0)); -}; -var templateObject_1$n, templateObject_2$d, templateObject_3$a; - -var Wrapper$7 = styled__default["default"].div(templateObject_1$m || (templateObject_1$m = __makeTemplateObject(["\n align-items: center;\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n height: 100%;\n width: 100%;\n"], ["\n align-items: center;\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n height: 100%;\n width: 100%;\n"]))); -var Button = styled__default["default"](ButtonPrimary)(templateObject_2$c || (templateObject_2$c = __makeTemplateObject(["\n margin-top: 1em;\n padding: 10px 1em;\n"], ["\n margin-top: 1em;\n padding: 10px 1em;\n"]))); -var Content = styled__default["default"].div(templateObject_3$9 || (templateObject_3$9 = __makeTemplateObject(["\n padding: 1em;\n"], ["\n padding: 1em;\n"]))); -var Copy = styled__default["default"](ThemedText.Body)(templateObject_4$6 || (templateObject_4$6 = __makeTemplateObject(["\n text-align: center;\n margin: 0 2em 1em !important;\n font-weight: 400;\n font-size: 16px;\n"], ["\n text-align: center;\n margin: 0 2em 1em !important;\n font-weight: 400;\n font-size: 16px;\n"]))); -var Header = styled__default["default"].div(templateObject_5$6 || (templateObject_5$6 = __makeTemplateObject(["\n align-items: center;\n display: flex;\n gap: 14px;\n justify-content: space-between;\n padding: 20px;\n width: 100%;\n"], ["\n align-items: center;\n display: flex;\n gap: 14px;\n justify-content: space-between;\n padding: 20px;\n width: 100%;\n"]))); -var Icon = styled__default["default"](reactFeather.AlertCircle)(templateObject_6$4 || (templateObject_6$4 = __makeTemplateObject(["\n stroke: ", ";\n width: 48px;\n height: 48px;\n"], ["\n stroke: ", ";\n width: 48px;\n height: 48px;\n"])), function (_a) { - var theme = _a.theme; - return theme.text2; -}); -var BlockedToken = function (_a) { - var onBack = _a.onBack, onDismiss = _a.onDismiss, blockedTokens = _a.blockedTokens; - return (jsxRuntime.jsxs(Wrapper$7, { children: [jsxRuntime.jsxs(Header, { children: [onBack ? jsxRuntime.jsx(reactFeather.ArrowLeft, { style: { cursor: 'pointer' }, onClick: onBack }, void 0) : jsxRuntime.jsx("div", {}, void 0), jsxRuntime.jsx(ThemedText.MediumHeader, { children: jsxRuntime.jsx(macro.Trans, { children: "Token not supported" }, void 0) }, void 0), onDismiss ? jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0) : jsxRuntime.jsx("div", {}, void 0)] }, void 0), jsxRuntime.jsx(Icon, {}, void 0), jsxRuntime.jsxs(Content, { children: [jsxRuntime.jsx(Copy, { children: jsxRuntime.jsx(macro.Trans, { children: "This token is not supported in the Uniswap Labs app" }, void 0) }, void 0), jsxRuntime.jsx(TokenImportCard, { token: blockedTokens[0] }, void 0), jsxRuntime.jsx(Button, __assign({ disabled: true }, { children: jsxRuntime.jsx(macro.Trans, { children: "Import" }, void 0) }), void 0)] }, void 0)] }, void 0)); -}; -var templateObject_1$m, templateObject_2$c, templateObject_3$9, templateObject_4$6, templateObject_5$6, templateObject_6$4; - -var Wrapper$6 = styled__default["default"].div(templateObject_1$l || (templateObject_1$l = __makeTemplateObject(["\n position: relative;\n width: 100%;\n overflow: auto;\n"], ["\n position: relative;\n width: 100%;\n overflow: auto;\n"]))); -function ImportToken(props) { - var tokens = props.tokens, list = props.list, onBack = props.onBack, onDismiss = props.onDismiss, handleCurrencySelect = props.handleCurrencySelect; - var theme = useTheme(); - var addToken = useAddUserToken(); - var unsupportedTokens = useUnsupportedTokens(); - var unsupportedSet = new Set(Object.keys(unsupportedTokens)); - var intersection = new Set(tokens.filter(function (token) { return unsupportedSet.has(token.address); })); - if (intersection.size > 0) { - return jsxRuntime.jsx(BlockedToken, { onBack: onBack, onDismiss: onDismiss, blockedTokens: Array.from(intersection) }, void 0); - } - return (jsxRuntime.jsxs(Wrapper$6, { children: [jsxRuntime.jsx(PaddedColumn, __assign({ gap: "14px", style: { width: '100%', flex: '1 1' } }, { children: jsxRuntime.jsxs(RowBetween, { children: [onBack ? jsxRuntime.jsx(reactFeather.ArrowLeft, { style: { cursor: 'pointer' }, onClick: onBack }, void 0) : jsxRuntime.jsx("div", {}, void 0), jsxRuntime.jsx(ThemedText.MediumHeader, { children: jsxRuntime.jsx(macro.Plural, { value: tokens.length, one: "Import token", other: "Import tokens" }, void 0) }, void 0), onDismiss ? jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0) : jsxRuntime.jsx("div", {}, void 0)] }, void 0) }), void 0), jsxRuntime.jsx(SectionBreak, {}, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "md", style: { marginBottom: '32px', padding: '1rem' } }, { children: [jsxRuntime.jsxs(AutoColumn, __assign({ justify: "center", style: { textAlign: 'center', gap: '16px', padding: '1rem' } }, { children: [jsxRuntime.jsx(reactFeather.AlertCircle, { size: 48, stroke: theme.text2, strokeWidth: 1 }, void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 400, fontSize: 16 }, { children: jsxRuntime.jsx(macro.Trans, { children: "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade." }, void 0) }), void 0)] }), void 0), tokens.map(function (token) { return (jsxRuntime.jsx(TokenImportCard, { token: token, list: list }, 'import' + token.address)); }), jsxRuntime.jsx(ButtonPrimary, __assign({ altDisabledStyle: true, "$borderRadius": "20px", padding: "10px 1rem", onClick: function () { - tokens.map(function (token) { return addToken(token); }); - handleCurrencySelect && handleCurrencySelect(tokens[0]); - }, className: ".token-dismiss-button" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Import" }, void 0) }), void 0)] }), void 0)] }, void 0)); -} -var templateObject_1$l; - -function getColorFromUriPath(uri) { - return __awaiter(this, void 0, void 0, function () { - var formattedPath, palette, detectedHex, AAscore; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - formattedPath = uriToHttp(uri)[0]; - return [4 /*yield*/, Vibrant__default["default"].from(formattedPath).getPalette()]; - case 1: - palette = _a.sent(); - if (!(palette === null || palette === void 0 ? void 0 : palette.Vibrant)) { - return [2 /*return*/, null]; - } - detectedHex = palette.Vibrant.hex; - AAscore = wcagContrast.hex(detectedHex, '#FFF'); - while (AAscore < 3) { - detectedHex = polished.shade(0.005, detectedHex); - AAscore = wcagContrast.hex(detectedHex, '#FFF'); - } - return [2 /*return*/, detectedHex]; - } - }); - }); -} -function useListColor(listImageUri) { - var _a = __read(React.useState('#2172E5'), 2), color = _a[0], setColor = _a[1]; - React.useLayoutEffect(function () { - var stale = false; - if (listImageUri) { - getColorFromUriPath(listImageUri).then(function (color) { - if (!stale && color !== null) { - setColor(color); - } - }); - } - return function () { - stale = true; - setColor('#2172E5'); - }; - }, [listImageUri]); - return color; -} - -function listVersionLabel(version) { - return "v" + version.major + "." + version.minor + "." + version.patch; -} - -var Wrapper$5 = styled__default["default"].button(templateObject_1$k || (templateObject_1$k = __makeTemplateObject(["\n border-radius: 20px;\n border: none;\n background: ", ";\n display: flex;\n width: fit-content;\n cursor: pointer;\n outline: none;\n padding: 0.4rem 0.4rem;\n align-items: center;\n"], ["\n border-radius: 20px;\n border: none;\n background: ", ";\n display: flex;\n width: fit-content;\n cursor: pointer;\n outline: none;\n padding: 0.4rem 0.4rem;\n align-items: center;\n"])), function (_a) { - var theme = _a.theme; - return theme.bg1; -}); -var ToggleElement$1 = styled__default["default"].span(templateObject_2$b || (templateObject_2$b = __makeTemplateObject(["\n border-radius: 50%;\n height: 24px;\n width: 24px;\n background-color: ", ";\n :hover {\n opacity: 0.8;\n }\n"], ["\n border-radius: 50%;\n height: 24px;\n width: 24px;\n background-color: ", ";\n :hover {\n opacity: 0.8;\n }\n"])), function (_a) { - var isActive = _a.isActive, bgColor = _a.bgColor, theme = _a.theme; - return (isActive ? bgColor : theme.bg4); -}); -var StatusText = styled__default["default"](ThemedText.Main)(templateObject_3$8 || (templateObject_3$8 = __makeTemplateObject(["\n margin: 0 10px;\n width: 24px;\n color: ", ";\n"], ["\n margin: 0 10px;\n width: 24px;\n color: ", ";\n"])), function (_a) { - var theme = _a.theme, isActive = _a.isActive; - return (isActive ? theme.text1 : theme.text3); -}); -function ListToggle(_a) { - var id = _a.id, isActive = _a.isActive, bgColor = _a.bgColor, toggle = _a.toggle; - return (jsxRuntime.jsxs(Wrapper$5, __assign({ id: id, isActive: isActive, onClick: toggle }, { children: [isActive && (jsxRuntime.jsx(StatusText, __assign({ fontWeight: "600", margin: "0 6px", isActive: true }, { children: jsxRuntime.jsx(macro.Trans, { children: "ON" }, void 0) }), void 0)), jsxRuntime.jsx(ToggleElement$1, { isActive: isActive, bgColor: bgColor }, void 0), !isActive && (jsxRuntime.jsx(StatusText, __assign({ fontWeight: "600", margin: "0 6px", isActive: false }, { children: jsxRuntime.jsx(macro.Trans, { children: "OFF" }, void 0) }), void 0))] }), void 0)); -} -var templateObject_1$k, templateObject_2$b, templateObject_3$8; - -var Wrapper$4 = styled__default["default"](Column)(templateObject_1$j || (templateObject_1$j = __makeTemplateObject(["\n flex: 1;\n overflow-y: hidden;\n"], ["\n flex: 1;\n overflow-y: hidden;\n"]))); -var UnpaddedLinkStyledButton = styled__default["default"](LinkStyledButton)(templateObject_2$a || (templateObject_2$a = __makeTemplateObject(["\n padding: 0;\n font-size: 1rem;\n opacity: ", ";\n"], ["\n padding: 0;\n font-size: 1rem;\n opacity: ", ";\n"])), function (_a) { - var disabled = _a.disabled; - return (disabled ? '0.4' : '1'); -}); -var PopoverContainer = styled__default["default"].div(templateObject_3$7 || (templateObject_3$7 = __makeTemplateObject(["\n z-index: 100;\n visibility: ", ";\n opacity: ", ";\n transition: visibility 150ms linear, opacity 150ms linear;\n background: ", ";\n border: 1px solid ", ";\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: ", ";\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 z-index: 100;\n visibility: ", ";\n opacity: ", ";\n transition: visibility 150ms linear, opacity 150ms linear;\n background: ", ";\n border: 1px solid ", ";\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: ", ";\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"])), function (props) { return (props.show ? 'visible' : 'hidden'); }, function (props) { return (props.show ? 1 : 0); }, function (_a) { - var theme = _a.theme; - return theme.bg2; -}, function (_a) { - var theme = _a.theme; - return theme.bg3; -}, function (_a) { - var theme = _a.theme; - return theme.text2; -}); -var StyledMenu$1 = styled__default["default"].div(templateObject_4$5 || (templateObject_4$5 = __makeTemplateObject(["\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n"], ["\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n"]))); -var StyledTitleText = styled__default["default"].div(templateObject_5$5 || (templateObject_5$5 = __makeTemplateObject(["\n font-size: 16px;\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 600;\n color: ", ";\n"], ["\n font-size: 16px;\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 600;\n color: ", ";\n"])), function (_a) { - var theme = _a.theme, active = _a.active; - return (active ? theme.white : theme.text2); -}); -var StyledListUrlText = styled__default["default"](ThemedText.Main)(templateObject_6$3 || (templateObject_6$3 = __makeTemplateObject(["\n font-size: 12px;\n color: ", ";\n"], ["\n font-size: 12px;\n color: ", ";\n"])), function (_a) { - var theme = _a.theme, active = _a.active; - return (active ? theme.white : theme.text2); -}); -var RowWrapper = styled__default["default"](Row)(templateObject_7$3 || (templateObject_7$3 = __makeTemplateObject(["\n background-color: ", ";\n opacity: ", ";\n transition: 200ms;\n align-items: center;\n padding: 1rem;\n border-radius: 20px;\n"], ["\n background-color: ", ";\n opacity: ", ";\n transition: 200ms;\n align-items: center;\n padding: 1rem;\n border-radius: 20px;\n"])), function (_a) { - var bgColor = _a.bgColor, active = _a.active, theme = _a.theme; - return (active ? bgColor !== null && bgColor !== void 0 ? bgColor : 'transparent' : theme.bg2); -}, function (_a) { - var hasActiveTokens = _a.hasActiveTokens; - return (hasActiveTokens ? 1 : 0.4); -}); -function listUrlRowHTMLId(listUrl) { - return "list-row-" + listUrl.replace(/\./g, '-'); -} -var ListRow = React.memo(function ListRow(_a) { - var listUrl = _a.listUrl; - var chainId = useActiveWeb3React().chainId; - var listsByUrl = useAppSelector(function (state) { return state.lists.byUrl; }); - var dispatch = useAppDispatch(); - var _b = listsByUrl[listUrl], list = _b.current, pending = _b.pendingUpdate; - var activeTokensOnThisChain = React.useMemo(function () { - if (!list || !chainId) { - return 0; - } - return list.tokens.reduce(function (acc, cur) { return (cur.chainId === chainId ? acc + 1 : acc); }, 0); - }, [chainId, list]); - var theme = useTheme(); - var listColor = useListColor(list === null || list === void 0 ? void 0 : list.logoURI); - var isActive = useIsListActive(listUrl); - var _c = __read(useToggle(false), 2), open = _c[0], toggle = _c[1]; - var node = React.useRef(); - var _d = __read(React.useState(), 2), referenceElement = _d[0], setReferenceElement = _d[1]; - var _e = __read(React.useState(), 2), popperElement = _e[0], setPopperElement = _e[1]; - var _f = reactPopper.usePopper(referenceElement, popperElement, { - placement: 'auto', - strategy: 'fixed', - modifiers: [{ name: 'offset', options: { offset: [8, 8] } }], - }), styles = _f.styles, attributes = _f.attributes; - useOnClickOutside(node, open ? toggle : undefined); - var handleAcceptListUpdate = React.useCallback(function () { - if (!pending) - return; - ReactGA__default["default"].event({ - category: 'Lists', - action: 'Update List from List Select', - label: listUrl, - }); - dispatch(acceptListUpdate(listUrl)); - }, [dispatch, listUrl, pending]); - var handleRemoveList = React.useCallback(function () { - ReactGA__default["default"].event({ - category: 'Lists', - action: 'Start Remove List', - label: listUrl, - }); - if (window.prompt(macro.t(templateObject_8$2 || (templateObject_8$2 = __makeTemplateObject(["Please confirm you would like to remove this list by typing REMOVE"], ["Please confirm you would like to remove this list by typing REMOVE"])))) === "REMOVE") { - ReactGA__default["default"].event({ - category: 'Lists', - action: 'Confirm Remove List', - label: listUrl, - }); - dispatch(removeList(listUrl)); - } - }, [dispatch, listUrl]); - var handleEnableList = React.useCallback(function () { - ReactGA__default["default"].event({ - category: 'Lists', - action: 'Enable List', - label: listUrl, - }); - dispatch(enableList(listUrl)); - }, [dispatch, listUrl]); - var handleDisableList = React.useCallback(function () { - ReactGA__default["default"].event({ - category: 'Lists', - action: 'Disable List', - label: listUrl, - }); - dispatch(disableList(listUrl)); - }, [dispatch, listUrl]); - if (!list) - return null; - return (jsxRuntime.jsxs(RowWrapper, __assign({ active: isActive, hasActiveTokens: activeTokensOnThisChain > 0, bgColor: listColor, id: listUrlRowHTMLId(listUrl) }, { children: [list.logoURI ? (jsxRuntime.jsx(ListLogo, { size: "40px", style: { marginRight: '1rem' }, logoURI: list.logoURI, alt: list.name + " list logo" }, void 0)) : (jsxRuntime.jsx("div", { style: { width: '24px', height: '24px', marginRight: '1rem' } }, void 0)), jsxRuntime.jsxs(Column, __assign({ style: { flex: '1' } }, { children: [jsxRuntime.jsx(Row, { children: jsxRuntime.jsx(StyledTitleText, __assign({ active: isActive }, { children: list.name }), void 0) }, void 0), jsxRuntime.jsxs(RowFixed, __assign({ mt: "4px" }, { children: [jsxRuntime.jsx(StyledListUrlText, __assign({ active: isActive, mr: "6px" }, { children: jsxRuntime.jsxs(macro.Trans, { children: [activeTokensOnThisChain, " tokens"] }, void 0) }), void 0), jsxRuntime.jsxs(StyledMenu$1, __assign({ ref: node }, { children: [jsxRuntime.jsx(ButtonEmpty, __assign({ onClick: toggle, ref: setReferenceElement, padding: "0" }, { children: jsxRuntime.jsx(reactFeather.Settings, { stroke: isActive ? theme.bg1 : theme.text1, size: 12 }, void 0) }), void 0), open && (jsxRuntime.jsxs(PopoverContainer, __assign({ show: true, ref: setPopperElement, style: styles.popper }, attributes.popper, { children: [jsxRuntime.jsx("div", { children: list && listVersionLabel(list.version) }, void 0), jsxRuntime.jsx(SeparatorDark, {}, void 0), jsxRuntime.jsx(ExternalLink, __assign({ href: "https://tokenlists.org/token-list?url=" + listUrl }, { children: jsxRuntime.jsx(macro.Trans, { children: "View list" }, void 0) }), void 0), jsxRuntime.jsx(UnpaddedLinkStyledButton, __assign({ onClick: handleRemoveList, disabled: Object.keys(listsByUrl).length === 1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Remove list" }, void 0) }), void 0), pending && (jsxRuntime.jsx(UnpaddedLinkStyledButton, __assign({ onClick: handleAcceptListUpdate }, { children: jsxRuntime.jsx(macro.Trans, { children: "Update list" }, void 0) }), void 0))] }), void 0))] }), void 0)] }), void 0)] }), void 0), jsxRuntime.jsx(ListToggle, { isActive: isActive, bgColor: listColor, toggle: function () { - isActive ? handleDisableList() : handleEnableList(); - } }, void 0)] }), listUrl)); -}); -var ListContainer = styled__default["default"].div(templateObject_9$2 || (templateObject_9$2 = __makeTemplateObject(["\n padding: 1rem;\n height: 100%;\n overflow: auto;\n flex: 1;\n"], ["\n padding: 1rem;\n height: 100%;\n overflow: auto;\n flex: 1;\n"]))); -function ManageLists(_a) { - var setModalView = _a.setModalView, setImportList = _a.setImportList, setListUrl = _a.setListUrl; - var chainId = useActiveWeb3React().chainId; - var theme = useTheme(); - var _b = __read(React.useState(''), 2), listUrlInput = _b[0], setListUrlInput = _b[1]; - var lists = useAllLists(); - var tokenCountByListName = React.useMemo(function () { - return Object.values(lists).reduce(function (acc, _a) { - var _b; - var list = _a.current; - if (!list) { - return acc; - } - return __assign(__assign({}, acc), (_b = {}, _b[list.name] = list.tokens.reduce(function (count, token) { return (token.chainId === chainId ? count + 1 : count); }, 0), _b)); - }, {}); - }, [chainId, lists]); - // sort by active but only if not visible - var activeListUrls = useActiveListUrls(); - var handleInput = React.useCallback(function (e) { - setListUrlInput(e.target.value); - }, []); - var fetchList = useFetchListCallback(); - var validUrl = React.useMemo(function () { - return uriToHttp(listUrlInput).length > 0 || Boolean(parseENSAddress(listUrlInput)); - }, [listUrlInput]); - var sortedLists = React.useMemo(function () { - var listUrls = Object.keys(lists); - return listUrls - .filter(function (listUrl) { - // only show loaded lists, hide unsupported lists - return Boolean(lists[listUrl].current) && !Boolean(UNSUPPORTED_LIST_URLS.includes(listUrl)); - }) - .sort(function (listUrlA, listUrlB) { - var listA = lists[listUrlA].current; - var listB = lists[listUrlB].current; - // first filter on active lists - if ((activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(listUrlA)) && !(activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(listUrlB))) { - return -1; - } - if (!(activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(listUrlA)) && (activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(listUrlB))) { - return 1; - } - if (listA && listB) { - if (tokenCountByListName[listA.name] > tokenCountByListName[listB.name]) { - return -1; - } - if (tokenCountByListName[listA.name] < tokenCountByListName[listB.name]) { - return 1; - } - return listA.name.toLowerCase() < listB.name.toLowerCase() - ? -1 - : listA.name.toLowerCase() === listB.name.toLowerCase() - ? 0 - : 1; - } - if (listA) - return -1; - if (listB) - return 1; - return 0; - }); - }, [lists, activeListUrls, tokenCountByListName]); - // temporary fetched list for import flow - var _c = __read(React.useState(), 2), tempList = _c[0], setTempList = _c[1]; - var _d = __read(React.useState(), 2), addError = _d[0], setAddError = _d[1]; - React.useEffect(function () { - function fetchTempList() { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - fetchList(listUrlInput, false) - .then(function (list) { return setTempList(list); }) - .catch(function () { return setAddError(macro.t(templateObject_10$2 || (templateObject_10$2 = __makeTemplateObject(["Error importing list"], ["Error importing list"])))); }); - return [2 /*return*/]; - }); - }); - } - // if valid url, fetch details for card - if (validUrl) { - fetchTempList(); - } - else { - setTempList(undefined); - listUrlInput !== '' && setAddError(macro.t(templateObject_11$2 || (templateObject_11$2 = __makeTemplateObject(["Enter valid list location"], ["Enter valid list location"])))); - } - // reset error - if (listUrlInput === '') { - setAddError(undefined); - } - }, [fetchList, listUrlInput, validUrl]); - // check if list is already imported - var isImported = Object.keys(lists).includes(listUrlInput); - // set list values and have parent modal switch to import list view - var handleImport = React.useCallback(function () { - if (!tempList) - return; - setImportList(tempList); - setModalView(CurrencyModalView.importList); - setListUrl(listUrlInput); - }, [listUrlInput, setImportList, setListUrl, setModalView, tempList]); - return (jsxRuntime.jsxs(Wrapper$4, { children: [jsxRuntime.jsxs(PaddedColumn, __assign({ gap: "14px" }, { children: [jsxRuntime.jsx(Row, { children: jsxRuntime.jsx(SearchInput, { type: "text", id: "list-add-input", placeholder: macro.t(templateObject_12$2 || (templateObject_12$2 = __makeTemplateObject(["https:// or ipfs:// or ENS name"], ["https:// or ipfs:// or ENS name"]))), value: listUrlInput, onChange: handleInput }, void 0) }, void 0), addError ? (jsxRuntime.jsx(ThemedText.Error, __assign({ title: addError, style: { textOverflow: 'ellipsis', overflow: 'hidden' }, error: true }, { children: addError }), void 0)) : null] }), void 0), tempList && (jsxRuntime.jsx(PaddedColumn, __assign({ style: { paddingTop: 0 } }, { children: jsxRuntime.jsx(Card, __assign({ backgroundColor: theme.bg2, padding: "12px 20px" }, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsxs(RowFixed, { children: [tempList.logoURI && jsxRuntime.jsx(ListLogo, { logoURI: tempList.logoURI, size: "40px" }, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "4px", style: { marginLeft: '20px' } }, { children: [jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 600 }, { children: tempList.name }), void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: '12px' }, { children: jsxRuntime.jsxs(macro.Trans, { children: [tempList.tokens.length, " tokens"] }, void 0) }), void 0)] }), void 0)] }, void 0), isImported ? (jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(IconWrapper, __assign({ stroke: theme.text2, size: "16px", marginRight: '10px' }, { children: jsxRuntime.jsx(reactFeather.CheckCircle, {}, void 0) }), void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ color: theme.text2 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Loaded" }, void 0) }), void 0)] }, void 0)) : (jsxRuntime.jsx(ButtonPrimary, __assign({ style: { fontSize: '14px' }, padding: "6px 8px", width: "fit-content", onClick: handleImport }, { children: jsxRuntime.jsx(macro.Trans, { children: "Import" }, void 0) }), void 0))] }, void 0) }), void 0) }), void 0)), jsxRuntime.jsx(Separator, {}, void 0), jsxRuntime.jsx(ListContainer, { children: jsxRuntime.jsx(AutoColumn, __assign({ gap: "md" }, { children: sortedLists.map(function (listUrl) { return (jsxRuntime.jsx(ListRow, { listUrl: listUrl }, listUrl)); }) }), void 0) }, void 0)] }, void 0)); -} -var templateObject_1$j, templateObject_2$a, templateObject_3$7, templateObject_4$5, templateObject_5$5, templateObject_6$3, templateObject_7$3, templateObject_8$2, templateObject_9$2, templateObject_10$2, templateObject_11$2, templateObject_12$2; - -var Wrapper$3 = styled__default["default"].div(templateObject_1$i || (templateObject_1$i = __makeTemplateObject(["\n width: 100%;\n height: calc(100% - 60px);\n position: relative;\n padding-bottom: 80px;\n"], ["\n width: 100%;\n height: calc(100% - 60px);\n position: relative;\n padding-bottom: 80px;\n"]))); -var Footer = styled__default["default"].div(templateObject_2$9 || (templateObject_2$9 = __makeTemplateObject(["\n position: absolute;\n bottom: 0;\n width: 100%;\n border-radius: 20px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n border-top: 1px solid ", ";\n padding: 20px;\n text-align: center;\n"], ["\n position: absolute;\n bottom: 0;\n width: 100%;\n border-radius: 20px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n border-top: 1px solid ", ";\n padding: 20px;\n text-align: center;\n"])), function (_a) { - var theme = _a.theme; - return theme.bg3; -}); -function ManageTokens(_a) { - var setModalView = _a.setModalView, setImportToken = _a.setImportToken; - var chainId = useActiveWeb3React().chainId; - var _b = __read(React.useState(''), 2), searchQuery = _b[0], setSearchQuery = _b[1]; - var theme = useTheme(); - // manage focus on modal show - var inputRef = React.useRef(); - var handleInput = React.useCallback(function (event) { - var input = event.target.value; - var checksummedInput = isAddress(input); - setSearchQuery(checksummedInput || input); - }, []); - // if they input an address, use it - var isAddressSearch = isAddress(searchQuery); - var searchToken = useToken(searchQuery); - // all tokens for local lisr - var userAddedTokens = useUserAddedTokens(); - var removeToken = useRemoveUserAddedToken(); - var handleRemoveAll = React.useCallback(function () { - if (chainId && userAddedTokens) { - userAddedTokens.map(function (token) { - return removeToken(chainId, token.address); - }); - } - }, [removeToken, userAddedTokens, chainId]); - var tokenList = React.useMemo(function () { - return (chainId && - userAddedTokens.map(function (token) { return (jsxRuntime.jsxs(RowBetween, __assign({ width: "100%" }, { children: [jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: token, size: '20px' }, void 0), jsxRuntime.jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, token.address, ExplorerDataType.ADDRESS) }, { children: jsxRuntime.jsx(ThemedText.Main, __assign({ ml: '10px', fontWeight: 600 }, { children: token.symbol }), void 0) }), void 0)] }, void 0), jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(TrashIcon, { onClick: function () { return removeToken(chainId, token.address); } }, void 0), jsxRuntime.jsx(ExternalLinkIcon, { href: getExplorerLink(chainId, token.address, ExplorerDataType.ADDRESS) }, void 0)] }, void 0)] }), token.address)); })); - }, [userAddedTokens, chainId, removeToken]); - return (jsxRuntime.jsxs(Wrapper$3, { children: [jsxRuntime.jsxs(Column, __assign({ style: { width: '100%', height: '100%', flex: '1 1' } }, { children: [jsxRuntime.jsxs(PaddedColumn, __assign({ gap: "14px" }, { children: [jsxRuntime.jsx(Row, { children: jsxRuntime.jsx(SearchInput, { type: "text", id: "token-search-input", placeholder: '0x0000', value: searchQuery, autoComplete: "off", ref: inputRef, onChange: handleInput }, void 0) }, void 0), searchQuery !== '' && !isAddressSearch && (jsxRuntime.jsx(ThemedText.Error, __assign({ error: true }, { children: jsxRuntime.jsx(macro.Trans, { children: "Enter valid token address" }, void 0) }), void 0)), searchToken && (jsxRuntime.jsx(Card, __assign({ backgroundColor: theme.bg2, padding: "10px 0" }, { children: jsxRuntime.jsx(ImportRow, { token: searchToken, showImportView: function () { return setModalView(CurrencyModalView.importToken); }, setImportToken: setImportToken, style: { height: 'fit-content' } }, void 0) }), void 0))] }), void 0), jsxRuntime.jsx(Separator, {}, void 0), jsxRuntime.jsxs(PaddedColumn, __assign({ gap: "lg", style: { overflow: 'auto', marginBottom: '10px' } }, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(ThemedText.Main, __assign({ fontWeight: 600 }, { children: jsxRuntime.jsxs(macro.Trans, { children: [userAddedTokens === null || userAddedTokens === void 0 ? void 0 : userAddedTokens.length, " Custom Tokens"] }, void 0) }), void 0), userAddedTokens.length > 0 && (jsxRuntime.jsx(ButtonText, __assign({ onClick: handleRemoveAll }, { children: jsxRuntime.jsx(ThemedText.Blue, { children: jsxRuntime.jsx(macro.Trans, { children: "Clear all" }, void 0) }, void 0) }), void 0))] }, void 0), tokenList] }), void 0)] }), void 0), jsxRuntime.jsx(Footer, { children: jsxRuntime.jsx(ThemedText.DarkGray, { children: jsxRuntime.jsx(macro.Trans, { children: "Tip: Custom tokens are stored locally in your browser" }, void 0) }, void 0) }, void 0)] }, void 0)); -} -var templateObject_1$i, templateObject_2$9; - -var Wrapper$2 = styled__default["default"].div(templateObject_1$h || (templateObject_1$h = __makeTemplateObject(["\n width: 100%;\n position: relative;\n display: flex;\n flex-flow: column;\n"], ["\n width: 100%;\n position: relative;\n display: flex;\n flex-flow: column;\n"]))); -var ToggleWrapper = styled__default["default"](RowBetween)(templateObject_2$8 || (templateObject_2$8 = __makeTemplateObject(["\n background-color: ", ";\n border-radius: 12px;\n padding: 6px;\n"], ["\n background-color: ", ";\n border-radius: 12px;\n padding: 6px;\n"])), function (_a) { - var theme = _a.theme; - return theme.bg3; -}); -var ToggleOption = styled__default["default"].div(templateObject_3$6 || (templateObject_3$6 = __makeTemplateObject(["\n width: 48%;\n padding: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 12px;\n font-weight: 600;\n background-color: ", ";\n color: ", ";\n user-select: none;\n\n :hover {\n cursor: pointer;\n opacity: 0.7;\n }\n"], ["\n width: 48%;\n padding: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 12px;\n font-weight: 600;\n background-color: ", ";\n color: ", ";\n user-select: none;\n\n :hover {\n cursor: pointer;\n opacity: 0.7;\n }\n"])), function (_a) { - var theme = _a.theme, active = _a.active; - return (active ? theme.bg1 : theme.bg3); -}, function (_a) { - var theme = _a.theme, active = _a.active; - return (active ? theme.text1 : theme.text2); -}); -function Manage(_a) { - var onDismiss = _a.onDismiss, setModalView = _a.setModalView, setImportList = _a.setImportList, setImportToken = _a.setImportToken, setListUrl = _a.setListUrl; - // toggle between tokens and lists - var _b = __read(React.useState(true), 2), showLists = _b[0], setShowLists = _b[1]; - return (jsxRuntime.jsxs(Wrapper$2, { children: [jsxRuntime.jsx(PaddedColumn, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(reactFeather.ArrowLeft, { style: { cursor: 'pointer' }, onClick: function () { return setModalView(CurrencyModalView.search); } }, void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Manage" }, void 0) }), void 0), jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0)] }, void 0) }, void 0), jsxRuntime.jsx(Separator, {}, void 0), jsxRuntime.jsx(PaddedColumn, __assign({ style: { paddingBottom: 0 } }, { children: jsxRuntime.jsxs(ToggleWrapper, { children: [jsxRuntime.jsx(ToggleOption, __assign({ onClick: function () { return setShowLists(!showLists); }, active: showLists }, { children: jsxRuntime.jsx(macro.Trans, { children: "Lists" }, void 0) }), void 0), jsxRuntime.jsx(ToggleOption, __assign({ onClick: function () { return setShowLists(!showLists); }, active: !showLists }, { children: jsxRuntime.jsx(macro.Trans, { children: "Tokens" }, void 0) }), void 0)] }, void 0) }), void 0), showLists ? (jsxRuntime.jsx(ManageLists, { setModalView: setModalView, setImportList: setImportList, setListUrl: setListUrl }, void 0)) : (jsxRuntime.jsx(ManageTokens, { setModalView: setModalView, setImportToken: setImportToken }, void 0))] }, void 0)); -} -var templateObject_1$h, templateObject_2$8, templateObject_3$6; - -var CurrencyModalView; -(function (CurrencyModalView) { - CurrencyModalView[CurrencyModalView["search"] = 0] = "search"; - CurrencyModalView[CurrencyModalView["manage"] = 1] = "manage"; - CurrencyModalView[CurrencyModalView["importToken"] = 2] = "importToken"; - CurrencyModalView[CurrencyModalView["importList"] = 3] = "importList"; -})(CurrencyModalView || (CurrencyModalView = {})); -function CurrencySearchModal(_a) { - var isOpen = _a.isOpen, onDismiss = _a.onDismiss, onCurrencySelect = _a.onCurrencySelect, selectedCurrency = _a.selectedCurrency, otherSelectedCurrency = _a.otherSelectedCurrency, _b = _a.showCommonBases, showCommonBases = _b === void 0 ? false : _b, _c = _a.showCurrencyAmount, showCurrencyAmount = _c === void 0 ? true : _c, _d = _a.disableNonToken, disableNonToken = _d === void 0 ? false : _d; - var _e = __read(React.useState(CurrencyModalView.manage), 2), modalView = _e[0], setModalView = _e[1]; - var lastOpen = useLast(isOpen); - React.useEffect(function () { - if (isOpen && !lastOpen) { - setModalView(CurrencyModalView.search); - } - }, [isOpen, lastOpen]); - var handleCurrencySelect = React.useCallback(function (currency) { - onCurrencySelect(currency); - onDismiss(); - }, [onDismiss, onCurrencySelect]); - // for token import view - var prevView = usePrevious(modalView); - // used for import token flow - var _f = __read(React.useState(), 2), importToken = _f[0], setImportToken = _f[1]; - // used for import list - var _g = __read(React.useState(), 2), importList = _g[0], setImportList = _g[1]; - var _h = __read(React.useState(), 2), listURL = _h[0], setListUrl = _h[1]; - var showImportView = React.useCallback(function () { return setModalView(CurrencyModalView.importToken); }, [setModalView]); - var showManageView = React.useCallback(function () { return setModalView(CurrencyModalView.manage); }, [setModalView]); - var handleBackImport = React.useCallback(function () { return setModalView(prevView && prevView !== CurrencyModalView.importToken ? prevView : CurrencyModalView.search); }, [setModalView, prevView]); - // change min height if not searching - var minHeight = modalView === CurrencyModalView.importToken || modalView === CurrencyModalView.importList ? 40 : 80; - var content = null; - switch (modalView) { - case CurrencyModalView.search: - content = (jsxRuntime.jsx(CurrencySearch, { isOpen: isOpen, onDismiss: onDismiss, onCurrencySelect: handleCurrencySelect, selectedCurrency: selectedCurrency, otherSelectedCurrency: otherSelectedCurrency, showCommonBases: showCommonBases, showCurrencyAmount: showCurrencyAmount, disableNonToken: disableNonToken, showImportView: showImportView, setImportToken: setImportToken, showManageView: showManageView }, void 0)); - break; - case CurrencyModalView.importToken: - if (importToken) { - content = (jsxRuntime.jsx(ImportToken, { tokens: [importToken], onDismiss: onDismiss, list: importToken instanceof WrappedTokenInfo ? importToken.list : undefined, onBack: handleBackImport, handleCurrencySelect: handleCurrencySelect }, void 0)); - } - break; - case CurrencyModalView.importList: - if (importList && listURL) { - content = jsxRuntime.jsx(ImportList, { list: importList, listURL: listURL, onDismiss: onDismiss, setModalView: setModalView }, void 0); - } - break; - case CurrencyModalView.manage: - content = (jsxRuntime.jsx(Manage, { onDismiss: onDismiss, setModalView: setModalView, setImportToken: setImportToken, setImportList: setImportList, setListUrl: setListUrl }, void 0)); - break; - } - return (jsxRuntime.jsx(Modal, __assign({ isOpen: isOpen, onDismiss: onDismiss, maxHeight: 80, minHeight: minHeight }, { children: content }), void 0)); -} - -var TextWrapper = styled__default["default"].span(templateObject_1$g || (templateObject_1$g = __makeTemplateObject(["\n margin-left: ", ";\n color: ", ";\n font-size: ", ";\n\n @media screen and (max-width: 600px) {\n font-size: ", ";\n }\n"], ["\n margin-left: ", ";\n color: ", ";\n font-size: ", ";\n\n @media screen and (max-width: 600px) {\n font-size: ", ";\n }\n"])), function (_a) { - var margin = _a.margin; - return margin && '4px'; -}, function (_a) { - var theme = _a.theme, link = _a.link, textColor = _a.textColor; - return (link ? theme.blue1 : textColor !== null && textColor !== void 0 ? textColor : theme.text1); -}, function (_a) { - var fontSize = _a.fontSize; - return fontSize !== null && fontSize !== void 0 ? fontSize : 'inherit'; -}, function (_a) { - var adjustSize = _a.adjustSize; - return adjustSize && '12px'; -}); -var HoverInlineText = function (_a) { - var text = _a.text, _b = _a.maxCharacters, maxCharacters = _b === void 0 ? 20 : _b, _c = _a.margin, margin = _c === void 0 ? false : _c, _d = _a.adjustSize, adjustSize = _d === void 0 ? false : _d, fontSize = _a.fontSize, textColor = _a.textColor, link = _a.link, rest = __rest(_a, ["text", "maxCharacters", "margin", "adjustSize", "fontSize", "textColor", "link"]); - var _e = __read(React.useState(false), 2), showHover = _e[0], setShowHover = _e[1]; - if (!text) { - return jsxRuntime.jsx("span", {}, void 0); - } - if (text.length > maxCharacters) { - return (jsxRuntime.jsx(Tooltip, __assign({ text: text, show: showHover }, { children: jsxRuntime.jsx(TextWrapper, __assign({ onMouseEnter: function () { return setShowHover(true); }, onMouseLeave: function () { return setShowHover(false); }, margin: margin, adjustSize: adjustSize, textColor: textColor, link: link, fontSize: fontSize }, rest, { children: ' ' + text.slice(0, maxCharacters - 1) + '...' }), void 0) }), void 0)); - } - return (jsxRuntime.jsx(TextWrapper, __assign({ margin: margin, adjustSize: adjustSize, link: link, fontSize: fontSize, textColor: textColor }, rest, { children: text }), void 0)); -}; -var templateObject_1$g; - -function FiatValue(_a) { - var fiatValue = _a.fiatValue, priceImpact = _a.priceImpact; - var theme = useTheme(); - var priceImpactColor = React.useMemo(function () { - if (!priceImpact) - return undefined; - if (priceImpact.lessThan('0')) - return theme.green1; - var severity = warningSeverity(priceImpact); - if (severity < 1) - return theme.text3; - if (severity < 3) - return theme.yellow1; - return theme.red1; - }, [priceImpact, theme.green1, theme.red1, theme.text3, theme.yellow1]); - return (jsxRuntime.jsxs(ThemedText.Body, __assign({ fontSize: 14, color: fiatValue ? theme.text3 : theme.text4 }, { children: [fiatValue ? (jsxRuntime.jsxs(macro.Trans, { children: ["$", jsxRuntime.jsx(HoverInlineText, { text: fiatValue === null || fiatValue === void 0 ? void 0 : fiatValue.toSignificant(6, { groupSeparator: ',' }), textColor: fiatValue ? theme.text3 : theme.text4 }, void 0)] }, void 0)) : (''), priceImpact ? (jsxRuntime.jsxs("span", __assign({ style: { color: priceImpactColor } }, { children: [' ', jsxRuntime.jsxs(MouseoverTooltip, __assign({ text: macro.t(templateObject_1$f || (templateObject_1$f = __makeTemplateObject(["The estimated difference between the USD values of input and output amounts."], ["The estimated difference between the USD values of input and output amounts."]))) }, { children: ["(", jsxRuntime.jsxs(macro.Trans, { children: [priceImpact.multiply(-1).toSignificant(3), "%"] }, void 0), ")"] }), void 0)] }), void 0)) : null] }), void 0)); -} -var templateObject_1$f; - -var InputPanel = styled__default["default"].div(templateObject_1$e || (templateObject_1$e = __makeTemplateObject(["\n ", "\n position: relative;\n border-radius: ", ";\n background-color: ", ";\n z-index: 1;\n width: ", ";\n transition: height 1s ease;\n will-change: height;\n"], ["\n ", "\n position: relative;\n border-radius: ", ";\n background-color: ", ";\n z-index: 1;\n width: ", ";\n transition: height 1s ease;\n will-change: height;\n"])), function (_a) { - var theme = _a.theme; - return theme.flexColumnNoWrap; -}, function (_a) { - var hideInput = _a.hideInput; - return (hideInput ? '16px' : '20px'); -}, function (_a) { - var theme = _a.theme, hideInput = _a.hideInput; - return (hideInput ? 'transparent' : theme.bg2); -}, function (_a) { - var hideInput = _a.hideInput; - return (hideInput ? '100%' : 'initial'); -}); -var FixedContainer = styled__default["default"].div(templateObject_2$7 || (templateObject_2$7 = __makeTemplateObject(["\n width: 100%;\n height: 100%;\n position: absolute;\n border-radius: 20px;\n background-color: ", ";\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 2;\n"], ["\n width: 100%;\n height: 100%;\n position: absolute;\n border-radius: 20px;\n background-color: ", ";\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 2;\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}); -var Container$1 = styled__default["default"].div(templateObject_3$5 || (templateObject_3$5 = __makeTemplateObject(["\n border-radius: ", ";\n border: 1px solid ", ";\n background-color: ", ";\n width: ", ";\n :focus,\n :hover {\n border: 1px solid ", ";\n }\n"], ["\n border-radius: ", ";\n border: 1px solid ", ";\n background-color: ", ";\n width: ", ";\n :focus,\n :hover {\n border: 1px solid ", ";\n }\n"])), function (_a) { - var hideInput = _a.hideInput; - return (hideInput ? '16px' : '20px'); -}, function (_a) { - var theme = _a.theme; - return theme.bg0; -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var hideInput = _a.hideInput; - return (hideInput ? '100%' : 'initial'); -}, function (_a) { - var theme = _a.theme, hideInput = _a.hideInput; - return (hideInput ? ' transparent' : theme.bg3); -}); -var CurrencySelect = styled__default["default"](ButtonGray)(templateObject_4$4 || (templateObject_4$4 = __makeTemplateObject(["\n align-items: center;\n background-color: ", ";\n box-shadow: ", ";\n box-shadow: 0px 6px 10px rgba(0, 0, 0, 0.075);\n color: ", ";\n cursor: pointer;\n border-radius: 16px;\n outline: none;\n user-select: none;\n border: none;\n font-size: 24px;\n font-weight: 500;\n height: ", ";\n width: ", ";\n padding: 0 8px;\n justify-content: space-between;\n margin-left: ", ";\n :focus,\n :hover {\n background-color: ", ";\n }\n visibility: ", ";\n"], ["\n align-items: center;\n background-color: ", ";\n box-shadow: ", ";\n box-shadow: 0px 6px 10px rgba(0, 0, 0, 0.075);\n color: ", ";\n cursor: pointer;\n border-radius: 16px;\n outline: none;\n user-select: none;\n border: none;\n font-size: 24px;\n font-weight: 500;\n height: ", ";\n width: ", ";\n padding: 0 8px;\n justify-content: space-between;\n margin-left: ", ";\n :focus,\n :hover {\n background-color: ", ";\n }\n visibility: ", ";\n"])), function (_a) { - var selected = _a.selected, theme = _a.theme; - return (selected ? theme.bg2 : theme.primary1); -}, function (_a) { - var selected = _a.selected; - return (selected ? 'none' : '0px 6px 10px rgba(0, 0, 0, 0.075)'); -}, function (_a) { - var selected = _a.selected, theme = _a.theme; - return (selected ? theme.text1 : theme.white); -}, function (_a) { - var hideInput = _a.hideInput; - return (hideInput ? '2.8rem' : '2.4rem'); -}, function (_a) { - var hideInput = _a.hideInput; - return (hideInput ? '100%' : 'initial'); -}, function (_a) { - var hideInput = _a.hideInput; - return (hideInput ? '0' : '12px'); -}, function (_a) { - var selected = _a.selected, theme = _a.theme; - return (selected ? theme.bg3 : polished.darken(0.05, theme.primary1)); -}, function (_a) { - var visible = _a.visible; - return (visible ? 'visible' : 'hidden'); -}); -var InputRow = styled__default["default"].div(templateObject_5$4 || (templateObject_5$4 = __makeTemplateObject(["\n ", "\n align-items: center;\n justify-content: space-between;\n padding: ", ";\n"], ["\n ", "\n align-items: center;\n justify-content: space-between;\n padding: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.flexRowNoWrap; -}, function (_a) { - var selected = _a.selected; - return (selected ? ' 1rem 1rem 0.75rem 1rem' : '1rem 1rem 1rem 1rem'); -}); -var LabelRow = styled__default["default"].div(templateObject_6$2 || (templateObject_6$2 = __makeTemplateObject(["\n ", "\n align-items: center;\n color: ", ";\n font-size: 0.75rem;\n line-height: 1rem;\n padding: 0 1rem 1rem;\n span:hover {\n cursor: pointer;\n color: ", ";\n }\n"], ["\n ", "\n align-items: center;\n color: ", ";\n font-size: 0.75rem;\n line-height: 1rem;\n padding: 0 1rem 1rem;\n span:hover {\n cursor: pointer;\n color: ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.flexRowNoWrap; -}, function (_a) { - var theme = _a.theme; - return theme.text1; -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.2, theme.text2); -}); -var FiatRow = styled__default["default"](LabelRow)(templateObject_7$2 || (templateObject_7$2 = __makeTemplateObject(["\n justify-content: flex-end;\n"], ["\n justify-content: flex-end;\n"]))); -var Aligner = styled__default["default"].span(templateObject_8$1 || (templateObject_8$1 = __makeTemplateObject(["\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n"], ["\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n"]))); -var StyledDropDown = styled__default["default"](SvgDropdown)(templateObject_9$1 || (templateObject_9$1 = __makeTemplateObject(["\n margin: 0 0.25rem 0 0.35rem;\n height: 35%;\n\n path {\n stroke: ", ";\n stroke-width: 1.5px;\n }\n"], ["\n margin: 0 0.25rem 0 0.35rem;\n height: 35%;\n\n path {\n stroke: ", ";\n stroke-width: 1.5px;\n }\n"])), function (_a) { - var selected = _a.selected, theme = _a.theme; - return (selected ? theme.text1 : theme.white); -}); -var StyledTokenName = styled__default["default"].span(templateObject_10$1 || (templateObject_10$1 = __makeTemplateObject(["\n ", "\n font-size: ", ";\n"], ["\n ", "\n font-size: ", ";\n"])), function (_a) { - var active = _a.active; - return (active ? ' margin: 0 0.25rem 0 0.25rem;' : ' margin: 0 0.25rem 0 0.25rem;'); -}, function (_a) { - var active = _a.active; - return (active ? '18px' : '18px'); -}); -var StyledBalanceMax = styled__default["default"].button(templateObject_11$1 || (templateObject_11$1 = __makeTemplateObject(["\n background-color: transparent;\n background-color: ", ";\n border: none;\n border-radius: 12px;\n color: ", ";\n cursor: pointer;\n font-size: 11px;\n font-weight: 500;\n margin-left: 0.25rem;\n opacity: ", ";\n padding: 4px 6px;\n pointer-events: ", ";\n\n :hover {\n opacity: ", ";\n }\n\n :focus {\n outline: none;\n }\n"], ["\n background-color: transparent;\n background-color: ", ";\n border: none;\n border-radius: 12px;\n color: ", ";\n cursor: pointer;\n font-size: 11px;\n font-weight: 500;\n margin-left: 0.25rem;\n opacity: ", ";\n padding: 4px 6px;\n pointer-events: ", ";\n\n :hover {\n opacity: ", ";\n }\n\n :focus {\n outline: none;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.primary5; -}, function (_a) { - var theme = _a.theme; - return theme.primary1; -}, function (_a) { - var disabled = _a.disabled; - return (!disabled ? 1 : 0.4); -}, function (_a) { - var disabled = _a.disabled; - return (!disabled ? 'initial' : 'none'); -}, function (_a) { - var disabled = _a.disabled; - return (!disabled ? 0.8 : 0.4); -}); -var StyledNumericalInput = styled__default["default"](Input$1)(templateObject_12$1 || (templateObject_12$1 = __makeTemplateObject(["\n ", ";\n text-align: left;\n"], ["\n ", ";\n text-align: left;\n"])), loadingOpacityMixin); -function CurrencyInputPanel(_a) { - var value = _a.value, onUserInput = _a.onUserInput, onMax = _a.onMax, showMaxButton = _a.showMaxButton, onCurrencySelect = _a.onCurrencySelect, currency = _a.currency, otherCurrency = _a.otherCurrency, id = _a.id, showCommonBases = _a.showCommonBases, showCurrencyAmount = _a.showCurrencyAmount, disableNonToken = _a.disableNonToken, renderBalance = _a.renderBalance, fiatValue = _a.fiatValue, priceImpact = _a.priceImpact, _b = _a.hideBalance, hideBalance = _b === void 0 ? false : _b, _c = _a.pair, pair = _c === void 0 ? null : _c, // used for double token logo - _d = _a.hideInput, // used for double token logo - hideInput = _d === void 0 ? false : _d, _e = _a.locked, locked = _e === void 0 ? false : _e, _f = _a.loading, loading = _f === void 0 ? false : _f, rest = __rest(_a, ["value", "onUserInput", "onMax", "showMaxButton", "onCurrencySelect", "currency", "otherCurrency", "id", "showCommonBases", "showCurrencyAmount", "disableNonToken", "renderBalance", "fiatValue", "priceImpact", "hideBalance", "pair", "hideInput", "locked", "loading"]); - var _g = __read(React.useState(false), 2), modalOpen = _g[0], setModalOpen = _g[1]; - var account = useActiveWeb3React().account; - var selectedCurrencyBalance = useCurrencyBalance(account !== null && account !== void 0 ? account : undefined, currency !== null && currency !== void 0 ? currency : undefined); - var theme = useTheme(); - var handleDismissSearch = React.useCallback(function () { - setModalOpen(false); - }, [setModalOpen]); - return (jsxRuntime.jsxs(InputPanel, __assign({ id: id, hideInput: hideInput }, rest, { children: [locked && (jsxRuntime.jsx(FixedContainer, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "sm", justify: "center" }, { children: [jsxRuntime.jsx(reactFeather.Lock, {}, void 0), jsxRuntime.jsx(ThemedText.Label, __assign({ fontSize: "12px", textAlign: "center", padding: "0 12px" }, { children: jsxRuntime.jsx(macro.Trans, { children: "The market price is outside your specified price range. Single-asset deposit only." }, void 0) }), void 0)] }), void 0) }, void 0)), jsxRuntime.jsxs(Container$1, __assign({ hideInput: hideInput }, { children: [jsxRuntime.jsxs(InputRow, __assign({ style: hideInput ? { padding: '0', borderRadius: '8px' } : {}, selected: !onCurrencySelect }, { children: [!hideInput && (jsxRuntime.jsx(StyledNumericalInput, { className: "token-amount-input", value: value, onUserInput: onUserInput, "$loading": loading }, void 0)), jsxRuntime.jsx(CurrencySelect, __assign({ visible: currency !== undefined, selected: !!currency, hideInput: hideInput, className: "open-currency-select-button", onClick: function () { - if (onCurrencySelect) { - setModalOpen(true); - } - } }, { children: jsxRuntime.jsxs(Aligner, { children: [jsxRuntime.jsxs(RowFixed, { children: [pair ? (jsxRuntime.jsx("span", __assign({ style: { marginRight: '0.5rem' } }, { children: jsxRuntime.jsx(DoubleCurrencyLogo, { currency0: pair.token0, currency1: pair.token1, size: 24, margin: true }, void 0) }), void 0)) : currency ? (jsxRuntime.jsx(CurrencyLogo, { style: { marginRight: '0.5rem' }, currency: currency, size: '24px' }, void 0)) : null, pair ? (jsxRuntime.jsxs(StyledTokenName, __assign({ className: "pair-name-container" }, { children: [pair === null || pair === void 0 ? void 0 : pair.token0.symbol, ":", pair === null || pair === void 0 ? void 0 : pair.token1.symbol] }), void 0)) : (jsxRuntime.jsx(StyledTokenName, __assign({ className: "token-symbol-container", active: Boolean(currency && currency.symbol) }, { children: (currency && currency.symbol && currency.symbol.length > 20 - ? currency.symbol.slice(0, 4) + - '...' + - currency.symbol.slice(currency.symbol.length - 5, currency.symbol.length) - : currency === null || currency === void 0 ? void 0 : currency.symbol) || jsxRuntime.jsx(macro.Trans, { children: "Select a token" }, void 0) }), void 0))] }, void 0), onCurrencySelect && jsxRuntime.jsx(StyledDropDown, { selected: !!currency }, void 0)] }, void 0) }), void 0)] }), void 0), !hideInput && !hideBalance && currency && (jsxRuntime.jsx(FiatRow, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(LoadingOpacityContainer, __assign({ "$loading": loading }, { children: jsxRuntime.jsx(FiatValue, { fiatValue: fiatValue, priceImpact: priceImpact }, void 0) }), void 0), account ? (jsxRuntime.jsxs(RowFixed, __assign({ style: { height: '17px' } }, { children: [jsxRuntime.jsx(ThemedText.Body, __assign({ onClick: onMax, color: theme.text3, fontWeight: 500, fontSize: 14, style: { display: 'inline', cursor: 'pointer' } }, { children: !hideBalance && currency && selectedCurrencyBalance ? (renderBalance ? (renderBalance(selectedCurrencyBalance)) : (jsxRuntime.jsxs(macro.Trans, { children: ["Balance: ", formatCurrencyAmount(selectedCurrencyBalance, 4)] }, void 0))) : null }), void 0), showMaxButton && selectedCurrencyBalance ? (jsxRuntime.jsx(StyledBalanceMax, __assign({ onClick: onMax }, { children: jsxRuntime.jsx(macro.Trans, { children: "MAX" }, void 0) }), void 0)) : null] }), void 0)) : (jsxRuntime.jsx("span", {}, void 0))] }, void 0) }, void 0))] }), void 0), onCurrencySelect && (jsxRuntime.jsx(CurrencySearchModal, { isOpen: modalOpen, onDismiss: handleDismissSearch, onCurrencySelect: onCurrencySelect, selectedCurrency: currency, otherSelectedCurrency: otherCurrency, showCommonBases: showCommonBases, showCurrencyAmount: showCurrencyAmount, disableNonToken: disableNonToken }, void 0))] }), void 0)); -} -var templateObject_1$e, templateObject_2$7, templateObject_3$5, templateObject_4$4, templateObject_5$4, templateObject_6$2, templateObject_7$2, templateObject_8$1, templateObject_9$1, templateObject_10$1, templateObject_11$1, templateObject_12$1; - -/** - * Given the price impact, get user confirmation. - * - * @param priceImpactWithoutFee price impact of the trade without the fee. - */ -function confirmPriceImpactWithoutFee(priceImpactWithoutFee) { - if (!priceImpactWithoutFee.lessThan(PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN)) { - return (window.prompt("This swap has a price impact of at least " + PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN.toFixed(0) + "%. Please type the word \"confirm\" to continue with this swap.") === 'confirm'); - } - else if (!priceImpactWithoutFee.lessThan(ALLOWED_PRICE_IMPACT_HIGH)) { - return window.confirm("This swap has a price impact of at least " + ALLOWED_PRICE_IMPACT_HIGH.toFixed(0) + "%. Please confirm that you would like to continue with this swap."); - } - return true; -} - -/** - * Returns true if the trade requires a confirmation of details before we can submit it - * @param args either a pair of V2 trades or a pair of V3 trades - */ -function tradeMeaningfullyDiffers() { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var _a = __read(args, 2), tradeA = _a[0], tradeB = _a[1]; - return (tradeA.tradeType !== tradeB.tradeType || - !tradeA.inputAmount.currency.equals(tradeB.inputAmount.currency) || - !tradeA.inputAmount.equalTo(tradeB.inputAmount) || - !tradeA.outputAmount.currency.equals(tradeB.outputAmount.currency) || - !tradeA.outputAmount.equalTo(tradeB.outputAmount)); -} - -function useAddTokenToMetamask(currencyToAdd) { - var library = useActiveWeb3React().library; - var token = currencyToAdd === null || currencyToAdd === void 0 ? void 0 : currencyToAdd.wrapped; - var _a = __read(React.useState(), 2), success = _a[0], setSuccess = _a[1]; - var logoURL = useCurrencyLogoURIs(token)[0]; - var addToken = React.useCallback(function () { - if (library && library.provider.isMetaMask && library.provider.request && token) { - library.provider - .request({ - method: 'wallet_watchAsset', - params: { - //@ts-ignore // need this for incorrect ethers provider type - type: 'ERC20', - options: { - address: token.address, - symbol: token.symbol, - decimals: token.decimals, - image: logoURL, - }, - }, - }) - .then(function (success) { - setSuccess(success); - }) - .catch(function () { return setSuccess(false); }); - } - else { - setSuccess(false); - } - }, [library, logoURL, token]); - return { addToken: addToken, success: success }; -} - -var Circle$1 = "data:image/svg+xml,%3Csvg%20width%3D%2294%22%20height%3D%2294%22%20viewBox%3D%220%200%2094%2094%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%20%20%3Cpath%20d%3D%22M92%2047C92%2022.1472%2071.8528%202%2047%202C22.1472%202%202%2022.1472%202%2047C2%2071.8528%2022.1472%2092%2047%2092%22%20stroke%3D%22%232172E5%22%20stroke-width%3D%223%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E"; - -var MetaMaskLogo = "f89237c6bc3f84db.png"; - -var VoteOption; -(function (VoteOption) { - VoteOption[VoteOption["Against"] = 0] = "Against"; - VoteOption[VoteOption["For"] = 1] = "For"; - VoteOption[VoteOption["Abstain"] = 2] = "Abstain"; -})(VoteOption || (VoteOption = {})); - -function formatAmount(amountRaw, decimals, sigFigs) { - return new sdkCore.Fraction(amountRaw, JSBI__default["default"].exponentiate(JSBI__default["default"].BigInt(10), JSBI__default["default"].BigInt(decimals))).toSignificant(sigFigs); -} -function FormattedCurrencyAmount(_a) { - var rawAmount = _a.rawAmount, symbol = _a.symbol, decimals = _a.decimals, sigFigs = _a.sigFigs; - return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [formatAmount(rawAmount, decimals, sigFigs), " ", symbol] }, void 0)); -} -function FormattedCurrencyAmountManaged(_a) { - var _b; - var rawAmount = _a.rawAmount, currencyId = _a.currencyId, _c = _a.sigFigs, sigFigs = _c === void 0 ? 6 : _c; - var currency = useCurrency(currencyId); - return currency ? (jsxRuntime.jsx(FormattedCurrencyAmount, { rawAmount: rawAmount, decimals: currency.decimals, sigFigs: sigFigs, symbol: (_b = currency.symbol) !== null && _b !== void 0 ? _b : '???' }, void 0)) : null; -} -function ClaimSummary(_a) { - var _b = _a.info, recipient = _b.recipient, uniAmountRaw = _b.uniAmountRaw; - var ENSName = useENSName().ENSName; - return typeof uniAmountRaw === 'string' ? (jsxRuntime.jsxs(macro.Trans, { children: ["Claim ", jsxRuntime.jsx(FormattedCurrencyAmount, { rawAmount: uniAmountRaw, symbol: 'UNI', decimals: 18, sigFigs: 4 }, void 0), " for", ' ', ENSName !== null && ENSName !== void 0 ? ENSName : recipient] }, void 0)) : (jsxRuntime.jsxs(macro.Trans, { children: ["Claim UNI reward for ", ENSName !== null && ENSName !== void 0 ? ENSName : recipient] }, void 0)); -} -function SubmitProposalTransactionSummary(_) { - return jsxRuntime.jsx(macro.Trans, { children: "Submit new proposal" }, void 0); -} -function ApprovalSummary(_a) { - var info = _a.info; - var token = useToken(info.tokenAddress); - return jsxRuntime.jsxs(macro.Trans, { children: ["Approve ", token === null || token === void 0 ? void 0 : token.symbol] }, void 0); -} -function VoteSummary(_a) { - var info = _a.info; - var proposalKey = info.governorAddress + "/" + info.proposalId; - if (info.reason && info.reason.trim().length > 0) { - switch (info.decision) { - case VoteOption.For: - return jsxRuntime.jsxs(macro.Trans, { children: ["Vote for proposal ", proposalKey] }, void 0); - case VoteOption.Abstain: - return jsxRuntime.jsxs(macro.Trans, { children: ["Vote to abstain on proposal ", proposalKey] }, void 0); - case VoteOption.Against: - return jsxRuntime.jsxs(macro.Trans, { children: ["Vote against proposal ", proposalKey] }, void 0); - } - } - else { - switch (info.decision) { - case VoteOption.For: - return (jsxRuntime.jsxs(macro.Trans, { children: ["Vote for proposal ", proposalKey, " with reason \"", info.reason, "\""] }, void 0)); - case VoteOption.Abstain: - return (jsxRuntime.jsxs(macro.Trans, { children: ["Vote to abstain on proposal ", proposalKey, " with reason \"", info.reason, "\""] }, void 0)); - case VoteOption.Against: - return (jsxRuntime.jsxs(macro.Trans, { children: ["Vote against proposal ", proposalKey, " with reason \"", info.reason, "\""] }, void 0)); - } - } -} -function DelegateSummary(_a) { - var delegatee = _a.info.delegatee; - var ENSName = useENSName(delegatee).ENSName; - return jsxRuntime.jsxs(macro.Trans, { children: ["Delegate voting power to ", ENSName !== null && ENSName !== void 0 ? ENSName : delegatee] }, void 0); -} -function WrapSummary(_a) { - var _b, _c, _d, _e, _f, _g; - var _h = _a.info, chainId = _h.chainId, currencyAmountRaw = _h.currencyAmountRaw, unwrapped = _h.unwrapped; - var native = chainId ? nativeOnChain(chainId) : undefined; - if (unwrapped) { - return (jsxRuntime.jsxs(macro.Trans, { children: ["Unwrap", ' ', jsxRuntime.jsx(FormattedCurrencyAmount, { rawAmount: currencyAmountRaw, symbol: (_c = (_b = native === null || native === void 0 ? void 0 : native.wrapped) === null || _b === void 0 ? void 0 : _b.symbol) !== null && _c !== void 0 ? _c : 'WETH', decimals: 18, sigFigs: 6 }, void 0), ' ', "to ", (_d = native === null || native === void 0 ? void 0 : native.symbol) !== null && _d !== void 0 ? _d : 'ETH'] }, void 0)); - } - else { - return (jsxRuntime.jsxs(macro.Trans, { children: ["Wrap", ' ', jsxRuntime.jsx(FormattedCurrencyAmount, { rawAmount: currencyAmountRaw, symbol: (_e = native === null || native === void 0 ? void 0 : native.symbol) !== null && _e !== void 0 ? _e : 'ETH', decimals: 18, sigFigs: 6 }, void 0), ' ', "to ", (_g = (_f = native === null || native === void 0 ? void 0 : native.wrapped) === null || _f === void 0 ? void 0 : _f.symbol) !== null && _g !== void 0 ? _g : 'WETH'] }, void 0)); - } -} -function DepositLiquidityStakingSummary(_) { - // not worth rendering the tokens since you can should no longer deposit liquidity in the staking contracts - // todo: deprecate and delete the code paths that allow this, show user more information - return jsxRuntime.jsx(macro.Trans, { children: "Deposit liquidity" }, void 0); -} -function WithdrawLiquidityStakingSummary(_) { - return jsxRuntime.jsx(macro.Trans, { children: "Withdraw deposited liquidity" }, void 0); -} -function MigrateLiquidityToV3Summary(_a) { - var _b = _a.info, baseCurrencyId = _b.baseCurrencyId, quoteCurrencyId = _b.quoteCurrencyId; - var baseCurrency = useCurrency(baseCurrencyId); - var quoteCurrency = useCurrency(quoteCurrencyId); - return (jsxRuntime.jsxs(macro.Trans, { children: ["Migrate ", baseCurrency === null || baseCurrency === void 0 ? void 0 : baseCurrency.symbol, "/", quoteCurrency === null || quoteCurrency === void 0 ? void 0 : quoteCurrency.symbol, " liquidity to V3"] }, void 0)); -} -function CreateV3PoolSummary(_a) { - var _b = _a.info, quoteCurrencyId = _b.quoteCurrencyId, baseCurrencyId = _b.baseCurrencyId; - var baseCurrency = useCurrency(baseCurrencyId); - var quoteCurrency = useCurrency(quoteCurrencyId); - return (jsxRuntime.jsxs(macro.Trans, { children: ["Create ", baseCurrency === null || baseCurrency === void 0 ? void 0 : baseCurrency.symbol, "/", quoteCurrency === null || quoteCurrency === void 0 ? void 0 : quoteCurrency.symbol, " V3 pool"] }, void 0)); -} -function CollectFeesSummary(_a) { - var _b = _a.info, currencyId0 = _b.currencyId0, currencyId1 = _b.currencyId1; - var currency0 = useCurrency(currencyId0); - var currency1 = useCurrency(currencyId1); - return (jsxRuntime.jsxs(macro.Trans, { children: ["Collect ", currency0 === null || currency0 === void 0 ? void 0 : currency0.symbol, "/", currency1 === null || currency1 === void 0 ? void 0 : currency1.symbol, " fees"] }, void 0)); -} -function RemoveLiquidityV3Summary(_a) { - var _b = _a.info, baseCurrencyId = _b.baseCurrencyId, quoteCurrencyId = _b.quoteCurrencyId, expectedAmountBaseRaw = _b.expectedAmountBaseRaw, expectedAmountQuoteRaw = _b.expectedAmountQuoteRaw; - return (jsxRuntime.jsxs(macro.Trans, { children: ["Remove", ' ', jsxRuntime.jsx(FormattedCurrencyAmountManaged, { rawAmount: expectedAmountBaseRaw, currencyId: baseCurrencyId, sigFigs: 3 }, void 0), " and", ' ', jsxRuntime.jsx(FormattedCurrencyAmountManaged, { rawAmount: expectedAmountQuoteRaw, currencyId: quoteCurrencyId, sigFigs: 3 }, void 0)] }, void 0)); -} -function AddLiquidityV3PoolSummary(_a) { - var _b = _a.info, createPool = _b.createPool, quoteCurrencyId = _b.quoteCurrencyId, baseCurrencyId = _b.baseCurrencyId; - var baseCurrency = useCurrency(baseCurrencyId); - var quoteCurrency = useCurrency(quoteCurrencyId); - return createPool ? (jsxRuntime.jsxs(macro.Trans, { children: ["Create pool and add ", baseCurrency === null || baseCurrency === void 0 ? void 0 : baseCurrency.symbol, "/", quoteCurrency === null || quoteCurrency === void 0 ? void 0 : quoteCurrency.symbol, " V3 liquidity"] }, void 0)) : (jsxRuntime.jsxs(macro.Trans, { children: ["Add ", baseCurrency === null || baseCurrency === void 0 ? void 0 : baseCurrency.symbol, "/", quoteCurrency === null || quoteCurrency === void 0 ? void 0 : quoteCurrency.symbol, " V3 liquidity"] }, void 0)); -} -function AddLiquidityV2PoolSummary(_a) { - var _b = _a.info, quoteCurrencyId = _b.quoteCurrencyId, expectedAmountBaseRaw = _b.expectedAmountBaseRaw, expectedAmountQuoteRaw = _b.expectedAmountQuoteRaw, baseCurrencyId = _b.baseCurrencyId; - return (jsxRuntime.jsxs(macro.Trans, { children: ["Add ", jsxRuntime.jsx(FormattedCurrencyAmountManaged, { rawAmount: expectedAmountBaseRaw, currencyId: baseCurrencyId, sigFigs: 3 }, void 0), ' ', "and ", jsxRuntime.jsx(FormattedCurrencyAmountManaged, { rawAmount: expectedAmountQuoteRaw, currencyId: quoteCurrencyId, sigFigs: 3 }, void 0), ' ', "to Uniswap V2"] }, void 0)); -} -function SwapSummary(_a) { - var info = _a.info; - if (info.tradeType === sdkCore.TradeType.EXACT_INPUT) { - return (jsxRuntime.jsxs(macro.Trans, { children: ["Swap exactly", ' ', jsxRuntime.jsx(FormattedCurrencyAmountManaged, { rawAmount: info.inputCurrencyAmountRaw, currencyId: info.inputCurrencyId, sigFigs: 6 }, void 0), ' ', "for", ' ', jsxRuntime.jsx(FormattedCurrencyAmountManaged, { rawAmount: info.expectedOutputCurrencyAmountRaw, currencyId: info.outputCurrencyId, sigFigs: 6 }, void 0)] }, void 0)); - } - else { - return (jsxRuntime.jsxs(macro.Trans, { children: ["Swap", ' ', jsxRuntime.jsx(FormattedCurrencyAmountManaged, { rawAmount: info.expectedInputCurrencyAmountRaw, currencyId: info.inputCurrencyId, sigFigs: 6 }, void 0), ' ', "for exactly", ' ', jsxRuntime.jsx(FormattedCurrencyAmountManaged, { rawAmount: info.outputCurrencyAmountRaw, currencyId: info.outputCurrencyId, sigFigs: 6 }, void 0)] }, void 0)); - } -} -function TransactionSummary(_a) { - var info = _a.info; - switch (info.type) { - case TransactionType.ADD_LIQUIDITY_V3_POOL: - return jsxRuntime.jsx(AddLiquidityV3PoolSummary, { info: info }, void 0); - case TransactionType.ADD_LIQUIDITY_V2_POOL: - return jsxRuntime.jsx(AddLiquidityV2PoolSummary, { info: info }, void 0); - case TransactionType.CLAIM: - return jsxRuntime.jsx(ClaimSummary, { info: info }, void 0); - case TransactionType.DEPOSIT_LIQUIDITY_STAKING: - return jsxRuntime.jsx(DepositLiquidityStakingSummary, { info: info }, void 0); - case TransactionType.WITHDRAW_LIQUIDITY_STAKING: - return jsxRuntime.jsx(WithdrawLiquidityStakingSummary, { info: info }, void 0); - case TransactionType.SWAP: - return jsxRuntime.jsx(SwapSummary, { info: info }, void 0); - case TransactionType.APPROVAL: - return jsxRuntime.jsx(ApprovalSummary, { info: info }, void 0); - case TransactionType.VOTE: - return jsxRuntime.jsx(VoteSummary, { info: info }, void 0); - case TransactionType.DELEGATE: - return jsxRuntime.jsx(DelegateSummary, { info: info }, void 0); - case TransactionType.WRAP: - return jsxRuntime.jsx(WrapSummary, { info: info }, void 0); - case TransactionType.CREATE_V3_POOL: - return jsxRuntime.jsx(CreateV3PoolSummary, { info: info }, void 0); - case TransactionType.MIGRATE_LIQUIDITY_V3: - return jsxRuntime.jsx(MigrateLiquidityToV3Summary, { info: info }, void 0); - case TransactionType.COLLECT_FEES: - return jsxRuntime.jsx(CollectFeesSummary, { info: info }, void 0); - case TransactionType.REMOVE_LIQUIDITY_V3: - return jsxRuntime.jsx(RemoveLiquidityV3Summary, { info: info }, void 0); - case TransactionType.SUBMIT_PROPOSAL: - return jsxRuntime.jsx(SubmitProposalTransactionSummary, { info: info }, void 0); - } -} - -var Wrapper$1 = styled__default["default"].div(templateObject_1$d || (templateObject_1$d = __makeTemplateObject(["\n height: 90px;\n width: 90px;\n"], ["\n height: 90px;\n width: 90px;\n"]))); -var dash = styled.keyframes(templateObject_2$6 || (templateObject_2$6 = __makeTemplateObject(["\n 0% {\n stroke-dashoffset: 1000;\n }\n 100% {\n stroke-dashoffset: 0;\n }\n"], ["\n 0% {\n stroke-dashoffset: 1000;\n }\n 100% {\n stroke-dashoffset: 0;\n }\n"]))); -var dashCheck = styled.keyframes(templateObject_3$4 || (templateObject_3$4 = __makeTemplateObject(["\n 0% {\n stroke-dashoffset: -100;\n }\n 100% {\n stroke-dashoffset: 900;\n }\n"], ["\n 0% {\n stroke-dashoffset: -100;\n }\n 100% {\n stroke-dashoffset: 900;\n }\n"]))); -var Circle = styled__default["default"].circle(templateObject_4$3 || (templateObject_4$3 = __makeTemplateObject(["\n stroke-dasharray: 1000;\n stroke-dashoffset: 0;\n -webkit-animation: ", " 0.9s ease-in-out;\n animation: ", " 0.9s ease-in-out;\n"], ["\n stroke-dasharray: 1000;\n stroke-dashoffset: 0;\n -webkit-animation: ", " 0.9s ease-in-out;\n animation: ", " 0.9s ease-in-out;\n"])), dash, dash); -var PolyLine = styled__default["default"].polyline(templateObject_5$3 || (templateObject_5$3 = __makeTemplateObject(["\n stroke-dasharray: 1000;\n stroke-dashoffset: 0;\n stroke-dashoffset: -100;\n -webkit-animation: ", " 0.9s 0.35s ease-in-out forwards;\n animation: ", " 0.9s 0.35s ease-in-out forwards;\n"], ["\n stroke-dasharray: 1000;\n stroke-dashoffset: 0;\n stroke-dashoffset: -100;\n -webkit-animation: ", " 0.9s 0.35s ease-in-out forwards;\n animation: ", " 0.9s 0.35s ease-in-out forwards;\n"])), dashCheck, dashCheck); -function AnimatedConfirmation() { - var theme = useTheme(); - return (jsxRuntime.jsx(Wrapper$1, __assign({ className: "w4rAnimated_checkmark" }, { children: jsxRuntime.jsxs("svg", __assign({ version: "1.1", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 130.2 130.2" }, { children: [jsxRuntime.jsx(Circle, { className: "path circle", fill: "none", stroke: theme.green1, strokeWidth: "6", strokeMiterlimit: "10", cx: "65.1", cy: "65.1", r: "62.1" }, void 0), jsxRuntime.jsx(PolyLine, { className: "path check", fill: "none", stroke: theme.green1, strokeWidth: "6", strokeLinecap: "round", strokeMiterlimit: "10", points: "100.2,40.2 51.5,88.8 29.8,67.5 " }, void 0)] }), void 0) }), void 0)); -} -var templateObject_1$d, templateObject_2$6, templateObject_3$4, templateObject_4$3, templateObject_5$3; - -var Wrapper = styled__default["default"].div(templateObject_1$c || (templateObject_1$c = __makeTemplateObject(["\n width: 100%;\n padding: 1rem;\n"], ["\n width: 100%;\n padding: 1rem;\n"]))); -var Section = styled__default["default"](AutoColumn)(templateObject_2$5 || (templateObject_2$5 = __makeTemplateObject(["\n padding: ", ";\n"], ["\n padding: ", ";\n"])), function (_a) { - var inline = _a.inline; - return (inline ? '0' : '0'); -}); -var BottomSection = styled__default["default"](Section)(templateObject_3$3 || (templateObject_3$3 = __makeTemplateObject(["\n border-bottom-left-radius: 20px;\n border-bottom-right-radius: 20px;\n"], ["\n border-bottom-left-radius: 20px;\n border-bottom-right-radius: 20px;\n"]))); -var ConfirmedIcon = styled__default["default"](ColumnCenter)(templateObject_4$2 || (templateObject_4$2 = __makeTemplateObject(["\n padding: ", ";\n"], ["\n padding: ", ";\n"])), function (_a) { - var inline = _a.inline; - return (inline ? '20px 0' : '32px 0;'); -}); -var StyledLogo = styled__default["default"].img(templateObject_5$2 || (templateObject_5$2 = __makeTemplateObject(["\n height: 16px;\n width: 16px;\n margin-left: 6px;\n"], ["\n height: 16px;\n width: 16px;\n margin-left: 6px;\n"]))); -function ConfirmationPendingContent(_a) { - var onDismiss = _a.onDismiss, pendingText = _a.pendingText, inline = _a.inline; - return (jsxRuntime.jsx(Wrapper, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "md" }, { children: [!inline && (jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx("div", {}, void 0), jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0)] }, void 0)), jsxRuntime.jsx(ConfirmedIcon, __assign({ inline: inline }, { children: jsxRuntime.jsx(CustomLightSpinner, { src: Circle$1, alt: "loader", size: inline ? '40px' : '90px' }, void 0) }), void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "12px", justify: 'center' }, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20, textAlign: "center" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Waiting For Confirmation" }, void 0) }), void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 400, fontSize: 16, textAlign: "center" }, { children: pendingText }), void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 14, color: "#565A69", textAlign: "center", marginBottom: "12px" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Confirm this transaction in your wallet" }, void 0) }), void 0)] }), void 0)] }), void 0) }, void 0)); -} -function TransactionSubmittedContent(_a) { - var _b; - var onDismiss = _a.onDismiss, chainId = _a.chainId, hash = _a.hash, currencyToAdd = _a.currencyToAdd, inline = _a.inline; - var theme = React.useContext(styled.ThemeContext); - var library = useActiveWeb3React().library; - var _c = useAddTokenToMetamask(currencyToAdd), addToken = _c.addToken, success = _c.success; - return (jsxRuntime.jsx(Wrapper, { children: jsxRuntime.jsxs(Section, __assign({ inline: inline }, { children: [!inline && (jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx("div", {}, void 0), jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0)] }, void 0)), jsxRuntime.jsx(ConfirmedIcon, __assign({ inline: inline }, { children: jsxRuntime.jsx(reactFeather.ArrowUpCircle, { strokeWidth: 0.5, size: inline ? '40px' : '90px', color: theme.primary1 }, void 0) }), void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "12px", justify: 'center' }, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20, textAlign: "center" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Transaction Submitted" }, void 0) }), void 0), chainId && hash && (jsxRuntime.jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, hash, ExplorerDataType.TRANSACTION) }, { children: jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 14, color: theme.primary1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "View on Explorer" }, void 0) }), void 0) }), void 0)), currencyToAdd && ((_b = library === null || library === void 0 ? void 0 : library.provider) === null || _b === void 0 ? void 0 : _b.isMetaMask) && (jsxRuntime.jsx(ButtonLight, __assign({ mt: "12px", padding: "6px 12px", width: "fit-content", onClick: addToken }, { children: !success ? (jsxRuntime.jsx(RowFixed, { children: jsxRuntime.jsxs(macro.Trans, { children: ["Add ", currencyToAdd.symbol, " to Metamask ", jsxRuntime.jsx(StyledLogo, { src: MetaMaskLogo }, void 0)] }, void 0) }, void 0)) : (jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsxs(macro.Trans, { children: ["Added ", currencyToAdd.symbol, " "] }, void 0), jsxRuntime.jsx(reactFeather.CheckCircle, { size: '16px', stroke: theme.green1, style: { marginLeft: '6px' } }, void 0)] }, void 0)) }), void 0)), jsxRuntime.jsx(ButtonPrimary, __assign({ onClick: onDismiss, style: { margin: '20px 0 0 0' } }, { children: jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20 }, { children: inline ? jsxRuntime.jsx(macro.Trans, { children: "Return" }, void 0) : jsxRuntime.jsx(macro.Trans, { children: "Close" }, void 0) }), void 0) }), void 0)] }), void 0)] }), void 0) }, void 0)); -} -function ConfirmationModalContent(_a) { - var title = _a.title, bottomContent = _a.bottomContent, onDismiss = _a.onDismiss, topContent = _a.topContent; - return (jsxRuntime.jsxs(Wrapper, { children: [jsxRuntime.jsxs(Section, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 16 }, { children: title }), void 0), jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0)] }, void 0), topContent()] }, void 0), bottomContent && jsxRuntime.jsx(BottomSection, __assign({ gap: "12px" }, { children: bottomContent() }), void 0)] }, void 0)); -} -function TransactionErrorContent(_a) { - var message = _a.message, onDismiss = _a.onDismiss; - var theme = React.useContext(styled.ThemeContext); - return (jsxRuntime.jsxs(Wrapper, { children: [jsxRuntime.jsxs(Section, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Error" }, void 0) }), void 0), jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0)] }, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ style: { marginTop: 20, padding: '2rem 0' }, gap: "24px", justify: "center" }, { children: [jsxRuntime.jsx(reactFeather.AlertTriangle, { color: theme.red1, style: { strokeWidth: 1.5 }, size: 64 }, void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 16, color: theme.red1, style: { textAlign: 'center', width: '85%', wordBreak: 'break-word' } }, { children: message }), void 0)] }), void 0)] }, void 0), jsxRuntime.jsx(BottomSection, __assign({ gap: "12px" }, { children: jsxRuntime.jsx(ButtonPrimary, __assign({ onClick: onDismiss }, { children: jsxRuntime.jsx(macro.Trans, { children: "Dismiss" }, void 0) }), void 0) }), void 0)] }, void 0)); -} -function L2Content(_a) { - var _b; - var onDismiss = _a.onDismiss, chainId = _a.chainId, hash = _a.hash, pendingText = _a.pendingText, inline = _a.inline; - var theme = React.useContext(styled.ThemeContext); - var transaction = useTransaction(hash); - var confirmed = useIsTransactionConfirmed(hash); - var transactionSuccess = ((_b = transaction === null || transaction === void 0 ? void 0 : transaction.receipt) === null || _b === void 0 ? void 0 : _b.status) === 1; - // convert unix time difference to seconds - var secondsToConfirm = (transaction === null || transaction === void 0 ? void 0 : transaction.confirmedTime) - ? (transaction.confirmedTime - transaction.addedTime) / 1000 - : undefined; - var info = CHAIN_INFO[chainId]; - return (jsxRuntime.jsx(Wrapper, { children: jsxRuntime.jsxs(Section, __assign({ inline: inline }, { children: [!inline && (jsxRuntime.jsxs(RowBetween, __assign({ mb: "16px" }, { children: [jsxRuntime.jsx(Badge, { children: jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(StyledLogo, { src: info.logoUrl, style: { margin: '0 8px 0 0' } }, void 0), info.label] }, void 0) }, void 0), jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0)] }), void 0)), jsxRuntime.jsx(ConfirmedIcon, __assign({ inline: inline }, { children: confirmed ? (transactionSuccess ? ( - // - jsxRuntime.jsx(AnimatedConfirmation, {}, void 0)) : (jsxRuntime.jsx(reactFeather.AlertCircle, { strokeWidth: 1, size: inline ? '40px' : '90px', color: theme.red1 }, void 0))) : (jsxRuntime.jsx(CustomLightSpinner, { src: Circle$1, alt: "loader", size: inline ? '40px' : '90px' }, void 0)) }), void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "12px", justify: 'center' }, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20, textAlign: "center" }, { children: !hash ? (jsxRuntime.jsx(macro.Trans, { children: "Confirm transaction in wallet" }, void 0)) : !confirmed ? (jsxRuntime.jsx(macro.Trans, { children: "Transaction Submitted" }, void 0)) : transactionSuccess ? (jsxRuntime.jsx(macro.Trans, { children: "Success" }, void 0)) : (jsxRuntime.jsx(macro.Trans, { children: "Error" }, void 0)) }), void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 400, fontSize: 16, textAlign: "center" }, { children: transaction ? jsxRuntime.jsx(TransactionSummary, { info: transaction.info }, void 0) : pendingText }), void 0), chainId && hash ? (jsxRuntime.jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, hash, ExplorerDataType.TRANSACTION) }, { children: jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 14, color: theme.primary1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "View on Explorer" }, void 0) }), void 0) }), void 0)) : (jsxRuntime.jsx("div", { style: { height: '17px' } }, void 0)), jsxRuntime.jsx(rebass.Text, __assign({ color: theme.text3, style: { margin: '20px 0 0 0' }, fontSize: '14px' }, { children: !secondsToConfirm ? (jsxRuntime.jsx("div", { style: { height: '24px' } }, void 0)) : (jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx(macro.Trans, { children: "Transaction completed in " }, void 0), jsxRuntime.jsxs("span", __assign({ style: { fontWeight: 500, marginLeft: '4px', color: theme.text1 } }, { children: [secondsToConfirm, " seconds \uD83C\uDF89"] }), void 0)] }, void 0)) }), void 0), jsxRuntime.jsx(ButtonPrimary, __assign({ onClick: onDismiss, style: { margin: '4px 0 0 0' } }, { children: jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20 }, { children: inline ? jsxRuntime.jsx(macro.Trans, { children: "Return" }, void 0) : jsxRuntime.jsx(macro.Trans, { children: "Close" }, void 0) }), void 0) }), void 0)] }), void 0)] }), void 0) }, void 0)); -} -function TransactionConfirmationModal(_a) { - var isOpen = _a.isOpen, onDismiss = _a.onDismiss, attemptingTxn = _a.attemptingTxn, hash = _a.hash, pendingText = _a.pendingText, content = _a.content, currencyToAdd = _a.currencyToAdd; - var chainId = useActiveWeb3React().chainId; - var isL2 = Boolean(chainId && L2_CHAIN_IDS.includes(chainId)); - if (!chainId) - return null; - // confirmation screen - return (jsxRuntime.jsx(Modal, __assign({ isOpen: isOpen, onDismiss: onDismiss, maxHeight: 90 }, { children: isL2 && (hash || attemptingTxn) ? (jsxRuntime.jsx(L2Content, { chainId: chainId, hash: hash, onDismiss: onDismiss, pendingText: pendingText }, void 0)) : attemptingTxn ? (jsxRuntime.jsx(ConfirmationPendingContent, { onDismiss: onDismiss, pendingText: pendingText }, void 0)) : hash ? (jsxRuntime.jsx(TransactionSubmittedContent, { chainId: chainId, hash: hash, onDismiss: onDismiss, currencyToAdd: currencyToAdd }, void 0)) : (content()) }), void 0)); -} -var templateObject_1$c, templateObject_2$5, templateObject_3$3, templateObject_4$2, templateObject_5$2; - -function SwapModalFooter(_a) { - var onConfirm = _a.onConfirm, swapErrorMessage = _a.swapErrorMessage, disabledConfirm = _a.disabledConfirm; - return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs(AutoRow, { children: [jsxRuntime.jsx(ButtonError, __assign({ onClick: onConfirm, disabled: disabledConfirm, style: { margin: '10px 0 0 0' }, id: "confirm-swap-or-send" }, { children: jsxRuntime.jsx(rebass.Text, __assign({ fontSize: 20, fontWeight: 500 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Confirm Swap" }, void 0) }), void 0) }), void 0), swapErrorMessage ? jsxRuntime.jsx(SwapCallbackError, { error: swapErrorMessage }, void 0) : null] }, void 0) }, void 0)); -} - -function computeFiatValuePriceImpact(fiatValueInput, fiatValueOutput) { - if (!fiatValueOutput || !fiatValueInput) - return undefined; - if (!fiatValueInput.currency.equals(fiatValueOutput.currency)) - return undefined; - if (JSBI__default["default"].equal(fiatValueInput.quotient, JSBI__default["default"].BigInt(0))) - return undefined; - var pct = ONE_HUNDRED_PERCENT.subtract(fiatValueOutput.divide(fiatValueInput)); - return new sdkCore.Percent(pct.numerator, pct.denominator); -} - -var ArrowWrapper = styled__default["default"].div(templateObject_1$b || (templateObject_1$b = __makeTemplateObject(["\n padding: 4px;\n border-radius: 12px;\n height: 32px;\n width: 32px;\n position: relative;\n margin-top: -18px;\n margin-bottom: -18px;\n left: calc(50% - 16px);\n display: flex;\n justify-content: center;\n align-items: center;\n background-color: ", ";\n border: 4px solid;\n border-color: ", ";\n z-index: 2;\n"], ["\n padding: 4px;\n border-radius: 12px;\n height: 32px;\n width: 32px;\n position: relative;\n margin-top: -18px;\n margin-bottom: -18px;\n left: calc(50% - 16px);\n display: flex;\n justify-content: center;\n align-items: center;\n background-color: ", ";\n border: 4px solid;\n border-color: ", ";\n z-index: 2;\n"])), function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var theme = _a.theme; - return theme.bg0; -}); -function SwapModalHeader(_a) { - var trade = _a.trade, allowedSlippage = _a.allowedSlippage, recipient = _a.recipient, showAcceptChanges = _a.showAcceptChanges, onAcceptChanges = _a.onAcceptChanges; - var theme = React.useContext(styled.ThemeContext); - var _b = __read(React.useState(false), 2), showInverted = _b[0], setShowInverted = _b[1]; - var fiatValueInput = useUSDCValue(trade.inputAmount); - var fiatValueOutput = useUSDCValue(trade.outputAmount); - return (jsxRuntime.jsxs(AutoColumn, __assign({ gap: '4px', style: { marginTop: '1rem' } }, { children: [jsxRuntime.jsx(LightCard, __assign({ padding: "0.75rem 1rem" }, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: '8px' }, { children: [jsxRuntime.jsxs(RowBetween, __assign({ align: "center" }, { children: [jsxRuntime.jsx(RowFixed, __assign({ gap: '0px' }, { children: jsxRuntime.jsx(TruncatedText, __assign({ fontSize: 24, fontWeight: 500, color: showAcceptChanges && trade.tradeType === sdkCore.TradeType.EXACT_OUTPUT ? theme.primary1 : '' }, { children: trade.inputAmount.toSignificant(6) }), void 0) }), void 0), jsxRuntime.jsxs(RowFixed, __assign({ gap: '0px' }, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: trade.inputAmount.currency, size: '20px', style: { marginRight: '12px' } }, void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontSize: 20, fontWeight: 500 }, { children: trade.inputAmount.currency.symbol }), void 0)] }), void 0)] }), void 0), jsxRuntime.jsx(RowBetween, { children: jsxRuntime.jsx(FiatValue, { fiatValue: fiatValueInput }, void 0) }, void 0)] }), void 0) }), void 0), jsxRuntime.jsx(ArrowWrapper, { children: jsxRuntime.jsx(reactFeather.ArrowDown, { size: "16", color: theme.text2 }, void 0) }, void 0), jsxRuntime.jsx(LightCard, __assign({ padding: "0.75rem 1rem", style: { marginBottom: '0.25rem' } }, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: '8px' }, { children: [jsxRuntime.jsxs(RowBetween, __assign({ align: "flex-end" }, { children: [jsxRuntime.jsx(RowFixed, __assign({ gap: '0px' }, { children: jsxRuntime.jsx(TruncatedText, __assign({ fontSize: 24, fontWeight: 500 }, { children: trade.outputAmount.toSignificant(6) }), void 0) }), void 0), jsxRuntime.jsxs(RowFixed, __assign({ gap: '0px' }, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: trade.outputAmount.currency, size: '20px', style: { marginRight: '12px' } }, void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontSize: 20, fontWeight: 500 }, { children: trade.outputAmount.currency.symbol }), void 0)] }), void 0)] }), void 0), jsxRuntime.jsx(RowBetween, { children: jsxRuntime.jsx(ThemedText.Body, __assign({ fontSize: 14, color: theme.text3 }, { children: jsxRuntime.jsx(FiatValue, { fiatValue: fiatValueOutput, priceImpact: computeFiatValuePriceImpact(fiatValueInput, fiatValueOutput) }, void 0) }), void 0) }, void 0)] }), void 0) }), void 0), jsxRuntime.jsx(RowBetween, __assign({ style: { marginTop: '0.25rem', padding: '0 1rem' } }, { children: jsxRuntime.jsx(TradePrice, { price: trade.executionPrice, showInverted: showInverted, setShowInverted: setShowInverted }, void 0) }), void 0), jsxRuntime.jsx(LightCard, __assign({ style: { padding: '.75rem', marginTop: '0.5rem' } }, { children: jsxRuntime.jsx(AdvancedSwapDetails, { trade: trade, allowedSlippage: allowedSlippage }, void 0) }), void 0), showAcceptChanges ? (jsxRuntime.jsx(SwapShowAcceptChanges, __assign({ justify: "flex-start", gap: '0px' }, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(reactFeather.AlertTriangle, { size: 20, style: { marginRight: '8px', minWidth: 24 } }, void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ color: theme.primary1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Price Updated" }, void 0) }), void 0)] }, void 0), jsxRuntime.jsx(ButtonPrimary, __assign({ style: { padding: '.5rem', width: 'fit-content', fontSize: '0.825rem', borderRadius: '12px' }, onClick: onAcceptChanges }, { children: jsxRuntime.jsx(macro.Trans, { children: "Accept" }, void 0) }), void 0)] }, void 0) }), void 0)) : null, jsxRuntime.jsx(AutoColumn, __assign({ justify: "flex-start", gap: "sm", style: { padding: '.75rem 1rem' } }, { children: trade.tradeType === sdkCore.TradeType.EXACT_INPUT ? (jsxRuntime.jsx(ThemedText.Italic, __assign({ fontWeight: 400, textAlign: "left", style: { width: '100%' } }, { children: jsxRuntime.jsxs(macro.Trans, { children: ["Output is estimated. You will receive at least", ' ', jsxRuntime.jsxs("b", { children: [trade.minimumAmountOut(allowedSlippage).toSignificant(6), " ", trade.outputAmount.currency.symbol] }, void 0), ' ', "or the transaction will revert."] }, void 0) }), void 0)) : (jsxRuntime.jsx(ThemedText.Italic, __assign({ fontWeight: 400, textAlign: "left", style: { width: '100%' } }, { children: jsxRuntime.jsxs(macro.Trans, { children: ["Input is estimated. You will sell at most", ' ', jsxRuntime.jsxs("b", { children: [trade.maximumAmountIn(allowedSlippage).toSignificant(6), " ", trade.inputAmount.currency.symbol] }, void 0), ' ', "or the transaction will revert."] }, void 0) }), void 0)) }), void 0), recipient !== null ? (jsxRuntime.jsx(AutoColumn, __assign({ justify: "flex-start", gap: "sm", style: { padding: '12px 0 0 0px' } }, { children: jsxRuntime.jsx(ThemedText.Main, { children: jsxRuntime.jsxs(macro.Trans, { children: ["Output will be sent to", ' ', jsxRuntime.jsx("b", __assign({ title: recipient }, { children: isAddress(recipient) ? shortenAddress(recipient) : recipient }), void 0)] }, void 0) }, void 0) }), void 0)) : null] }), void 0)); -} -var templateObject_1$b; - -function ConfirmSwapModal(_a) { - var _b, _c, _d, _e, _f, _g; - var trade = _a.trade, originalTrade = _a.originalTrade, onAcceptChanges = _a.onAcceptChanges, allowedSlippage = _a.allowedSlippage, onConfirm = _a.onConfirm, onDismiss = _a.onDismiss, recipient = _a.recipient, swapErrorMessage = _a.swapErrorMessage, isOpen = _a.isOpen, attemptingTxn = _a.attemptingTxn, txHash = _a.txHash; - var showAcceptChanges = React.useMemo(function () { return Boolean(trade && originalTrade && tradeMeaningfullyDiffers(trade, originalTrade)); }, [originalTrade, trade]); - var modalHeader = React.useCallback(function () { - return trade ? (jsxRuntime.jsx(SwapModalHeader, { trade: trade, allowedSlippage: allowedSlippage, recipient: recipient, showAcceptChanges: showAcceptChanges, onAcceptChanges: onAcceptChanges }, void 0)) : null; - }, [allowedSlippage, onAcceptChanges, recipient, showAcceptChanges, trade]); - var modalBottom = React.useCallback(function () { - return trade ? (jsxRuntime.jsx(SwapModalFooter, { onConfirm: onConfirm, trade: trade, disabledConfirm: showAcceptChanges, swapErrorMessage: swapErrorMessage }, void 0)) : null; - }, [onConfirm, showAcceptChanges, swapErrorMessage, trade]); - // text to show while loading - var pendingText = (jsxRuntime.jsxs(macro.Trans, { children: ["Swapping ", (_b = trade === null || trade === void 0 ? void 0 : trade.inputAmount) === null || _b === void 0 ? void 0 : _b.toSignificant(6), " ", (_d = (_c = trade === null || trade === void 0 ? void 0 : trade.inputAmount) === null || _c === void 0 ? void 0 : _c.currency) === null || _d === void 0 ? void 0 : _d.symbol, " for", ' ', (_e = trade === null || trade === void 0 ? void 0 : trade.outputAmount) === null || _e === void 0 ? void 0 : _e.toSignificant(6), " ", (_g = (_f = trade === null || trade === void 0 ? void 0 : trade.outputAmount) === null || _f === void 0 ? void 0 : _f.currency) === null || _g === void 0 ? void 0 : _g.symbol] }, void 0)); - var confirmationContent = React.useCallback(function () { - return swapErrorMessage ? (jsxRuntime.jsx(TransactionErrorContent, { onDismiss: onDismiss, message: swapErrorMessage }, void 0)) : (jsxRuntime.jsx(ConfirmationModalContent, { title: jsxRuntime.jsx(macro.Trans, { children: "Confirm Swap" }, void 0), onDismiss: onDismiss, topContent: modalHeader, bottomContent: modalBottom }, void 0)); - }, [onDismiss, modalBottom, modalHeader, swapErrorMessage]); - return (jsxRuntime.jsx(TransactionConfirmationModal, { isOpen: isOpen, onDismiss: onDismiss, attemptingTxn: attemptingTxn, hash: txHash, content: confirmationContent, pendingText: pendingText, currencyToAdd: trade === null || trade === void 0 ? void 0 : trade.outputAmount.currency }, void 0)); -} - -var _a$5; -var ApplicationModal; -(function (ApplicationModal) { - ApplicationModal[ApplicationModal["WALLET"] = 0] = "WALLET"; - ApplicationModal[ApplicationModal["SETTINGS"] = 1] = "SETTINGS"; - ApplicationModal[ApplicationModal["SELF_CLAIM"] = 2] = "SELF_CLAIM"; - ApplicationModal[ApplicationModal["ADDRESS_CLAIM"] = 3] = "ADDRESS_CLAIM"; - ApplicationModal[ApplicationModal["CLAIM_POPUP"] = 4] = "CLAIM_POPUP"; - ApplicationModal[ApplicationModal["MENU"] = 5] = "MENU"; - ApplicationModal[ApplicationModal["DELEGATE"] = 6] = "DELEGATE"; - ApplicationModal[ApplicationModal["VOTE"] = 7] = "VOTE"; - ApplicationModal[ApplicationModal["POOL_OVERVIEW_OPTIONS"] = 8] = "POOL_OVERVIEW_OPTIONS"; - ApplicationModal[ApplicationModal["NETWORK_SELECTOR"] = 9] = "NETWORK_SELECTOR"; - ApplicationModal[ApplicationModal["PRIVACY_POLICY"] = 10] = "PRIVACY_POLICY"; -})(ApplicationModal || (ApplicationModal = {})); -var initialState$8 = { - chainId: null, - openModal: null, - popupList: [], -}; -var applicationSlice = toolkit.createSlice({ - name: 'application', - initialState: initialState$8, - reducers: { - updateChainId: function (state, action) { - var chainId = action.payload.chainId; - state.chainId = chainId; - }, - setOpenModal: function (state, action) { - state.openModal = action.payload; - }, - addPopup: function (state, _a) { - var _b = _a.payload, content = _b.content, key = _b.key, _c = _b.removeAfterMs, removeAfterMs = _c === void 0 ? DEFAULT_TXN_DISMISS_MS : _c; - state.popupList = (key ? state.popupList.filter(function (popup) { return popup.key !== key; }) : state.popupList).concat([ - { - key: key || toolkit.nanoid(), - show: true, - content: content, - removeAfterMs: removeAfterMs, - }, - ]); - }, - removePopup: function (state, _a) { - var key = _a.payload.key; - state.popupList.forEach(function (p) { - if (p.key === key) { - p.show = false; - } - }); - }, - }, -}); -(_a$5 = applicationSlice.actions, _a$5.updateChainId); var setOpenModal = _a$5.setOpenModal; _a$5.addPopup; _a$5.removePopup; -var application = applicationSlice.reducer; - -function useModalOpen(modal) { - var openModal = useAppSelector(function (state) { return state.application.openModal; }); - return openModal === modal; -} -function useToggleModal(modal) { - var open = useModalOpen(modal); - var dispatch = useAppDispatch(); - return React.useCallback(function () { return dispatch(setOpenModal(open ? null : modal)); }, [dispatch, modal, open]); -} -function useWalletModalToggle() { - return useToggleModal(ApplicationModal.WALLET); -} -function useToggleSettingsMenu() { - return useToggleModal(ApplicationModal.SETTINGS); -} - -var ToggleElement = styled__default["default"].span(templateObject_1$a || (templateObject_1$a = __makeTemplateObject(["\n padding: 0.25rem 0.6rem;\n border-radius: 9px;\n background: ", ";\n color: ", ";\n font-size: 14px;\n font-weight: ", ";\n :hover {\n user-select: ", ";\n background: ", ";\n color: ", ";\n }\n"], ["\n padding: 0.25rem 0.6rem;\n border-radius: 9px;\n background: ", ";\n color: ", ";\n font-size: 14px;\n font-weight: ", ";\n :hover {\n user-select: ", ";\n background: ", ";\n color: ", ";\n }\n"])), function (_a) { - var theme = _a.theme, isActive = _a.isActive, isOnSwitch = _a.isOnSwitch; - return (isActive ? (isOnSwitch ? theme.primary1 : theme.bg4) : 'none'); -}, function (_a) { - var theme = _a.theme, isActive = _a.isActive; - return (isActive ? theme.white : theme.text2); -}, function (_a) { - var isOnSwitch = _a.isOnSwitch; - return (isOnSwitch ? '500' : '400'); -}, function (_a) { - var isOnSwitch = _a.isOnSwitch; - return (isOnSwitch ? 'none' : 'initial'); -}, function (_a) { - var theme = _a.theme, isActive = _a.isActive, isOnSwitch = _a.isOnSwitch; - return isActive ? (isOnSwitch ? polished.darken(0.05, theme.primary1) : polished.darken(0.05, theme.bg4)) : 'none'; -}, function (_a) { - var theme = _a.theme, isActive = _a.isActive, isOnSwitch = _a.isOnSwitch; - return (isActive ? (isOnSwitch ? theme.white : theme.white) : theme.text3); -}); -var StyledToggle = styled__default["default"].button(templateObject_2$4 || (templateObject_2$4 = __makeTemplateObject(["\n border-radius: 12px;\n border: none;\n background: ", ";\n display: flex;\n width: fit-content;\n cursor: pointer;\n outline: none;\n padding: 2px;\n"], ["\n border-radius: 12px;\n border: none;\n background: ", ";\n display: flex;\n width: fit-content;\n cursor: pointer;\n outline: none;\n padding: 2px;\n"])), function (_a) { - var theme = _a.theme; - return theme.bg0; -}); -function Toggle(_a) { - var id = _a.id, isActive = _a.isActive, toggle = _a.toggle, _b = _a.checked, checked = _b === void 0 ? jsxRuntime.jsx(macro.Trans, { children: "On" }, void 0) : _b, _c = _a.unchecked, unchecked = _c === void 0 ? jsxRuntime.jsx(macro.Trans, { children: "Off" }, void 0) : _c; - return (jsxRuntime.jsxs(StyledToggle, __assign({ id: id, isActive: isActive, onClick: toggle }, { children: [jsxRuntime.jsx(ToggleElement, __assign({ isActive: isActive, isOnSwitch: true }, { children: checked }), void 0), jsxRuntime.jsx(ToggleElement, __assign({ isActive: !isActive, isOnSwitch: false }, { children: unchecked }), void 0)] }), void 0)); -} -var templateObject_1$a, templateObject_2$4; - -var SlippageError; -(function (SlippageError) { - SlippageError["InvalidInput"] = "InvalidInput"; -})(SlippageError || (SlippageError = {})); -var DeadlineError; -(function (DeadlineError) { - DeadlineError["InvalidInput"] = "InvalidInput"; -})(DeadlineError || (DeadlineError = {})); -var FancyButton = styled__default["default"].button(templateObject_1$9 || (templateObject_1$9 = __makeTemplateObject(["\n color: ", ";\n align-items: center;\n height: 2rem;\n border-radius: 36px;\n font-size: 1rem;\n width: auto;\n min-width: 3.5rem;\n border: 1px solid ", ";\n outline: none;\n background: ", ";\n :hover {\n border: 1px solid ", ";\n }\n :focus {\n border: 1px solid ", ";\n }\n"], ["\n color: ", ";\n align-items: center;\n height: 2rem;\n border-radius: 36px;\n font-size: 1rem;\n width: auto;\n min-width: 3.5rem;\n border: 1px solid ", ";\n outline: none;\n background: ", ";\n :hover {\n border: 1px solid ", ";\n }\n :focus {\n border: 1px solid ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.text1; -}, function (_a) { - var theme = _a.theme; - return theme.bg3; -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var theme = _a.theme; - return theme.bg4; -}, function (_a) { - var theme = _a.theme; - return theme.primary1; -}); -var Option = styled__default["default"](FancyButton)(templateObject_2$3 || (templateObject_2$3 = __makeTemplateObject(["\n margin-right: 8px;\n :hover {\n cursor: pointer;\n }\n background-color: ", ";\n color: ", ";\n"], ["\n margin-right: 8px;\n :hover {\n cursor: pointer;\n }\n background-color: ", ";\n color: ", ";\n"])), function (_a) { - var active = _a.active, theme = _a.theme; - return active && theme.primary1; -}, function (_a) { - var active = _a.active, theme = _a.theme; - return (active ? theme.white : theme.text1); -}); -var Input = styled__default["default"].input(templateObject_3$2 || (templateObject_3$2 = __makeTemplateObject(["\n background: ", ";\n font-size: 16px;\n width: auto;\n outline: none;\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n }\n color: ", ";\n text-align: right;\n"], ["\n background: ", ";\n font-size: 16px;\n width: auto;\n outline: none;\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n }\n color: ", ";\n text-align: right;\n"])), function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var theme = _a.theme, color = _a.color; - return (color === 'red' ? theme.red1 : theme.text1); -}); -var OptionCustom = styled__default["default"](FancyButton)(templateObject_4$1 || (templateObject_4$1 = __makeTemplateObject(["\n height: 2rem;\n position: relative;\n padding: 0 0.75rem;\n flex: 1;\n border: ", ";\n :hover {\n border: ", ";\n }\n\n input {\n width: 100%;\n height: 100%;\n border: 0px;\n border-radius: 2rem;\n }\n"], ["\n height: 2rem;\n position: relative;\n padding: 0 0.75rem;\n flex: 1;\n border: ", ";\n :hover {\n border: ", ";\n }\n\n input {\n width: 100%;\n height: 100%;\n border: 0px;\n border-radius: 2rem;\n }\n"])), function (_a) { - var theme = _a.theme, active = _a.active, warning = _a.warning; - return active ? "1px solid " + (warning ? theme.red1 : theme.primary1) : warning && "1px solid " + theme.red1; -}, function (_a) { - var theme = _a.theme, active = _a.active, warning = _a.warning; - return active && "1px solid " + (warning ? polished.darken(0.1, theme.red1) : polished.darken(0.1, theme.primary1)); -}); -var SlippageEmojiContainer = styled__default["default"].span(templateObject_6$1 || (templateObject_6$1 = __makeTemplateObject(["\n color: #f3841e;\n ", "\n"], ["\n color: #f3841e;\n ", "\n"])), function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToSmall(templateObject_5$1 || (templateObject_5$1 = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); -}); -var THREE_DAYS_IN_SECONDS = ms__default["default"](templateObject_7$1 || (templateObject_7$1 = __makeTemplateObject(["3 days"], ["3 days"]))) / 1000; -function TransactionSettings(_a) { - var placeholderSlippage = _a.placeholderSlippage; - var chainId = useActiveWeb3React().chainId; - var theme = React.useContext(styled.ThemeContext); - var userSlippageTolerance = useUserSlippageTolerance(); - var setUserSlippageTolerance = useSetUserSlippageTolerance(); - var _b = __read(useUserTransactionTTL(), 2), deadline = _b[0], setDeadline = _b[1]; - var _c = __read(React.useState(''), 2), slippageInput = _c[0], setSlippageInput = _c[1]; - var _d = __read(React.useState(false), 2), slippageError = _d[0], setSlippageError = _d[1]; - var _e = __read(React.useState(''), 2), deadlineInput = _e[0], setDeadlineInput = _e[1]; - var _f = __read(React.useState(false), 2), deadlineError = _f[0], setDeadlineError = _f[1]; - function parseSlippageInput(value) { - // populate what the user typed and clear the error - setSlippageInput(value); - setSlippageError(false); - if (value.length === 0) { - setUserSlippageTolerance('auto'); - } - else { - var parsed = Math.floor(Number.parseFloat(value) * 100); - if (!Number.isInteger(parsed) || parsed < 0 || parsed > 5000) { - setUserSlippageTolerance('auto'); - if (value !== '.') { - setSlippageError(SlippageError.InvalidInput); - } - } - else { - setUserSlippageTolerance(new sdkCore.Percent(parsed, 10000)); - } - } - } - var tooLow = userSlippageTolerance !== 'auto' && userSlippageTolerance.lessThan(new sdkCore.Percent(5, 10000)); - var tooHigh = userSlippageTolerance !== 'auto' && userSlippageTolerance.greaterThan(new sdkCore.Percent(1, 100)); - function parseCustomDeadline(value) { - // populate what the user typed and clear the error - setDeadlineInput(value); - setDeadlineError(false); - if (value.length === 0) { - setDeadline(DEFAULT_DEADLINE_FROM_NOW); - } - else { - try { - var parsed = Math.floor(Number.parseFloat(value) * 60); - if (!Number.isInteger(parsed) || parsed < 60 || parsed > THREE_DAYS_IN_SECONDS) { - setDeadlineError(DeadlineError.InvalidInput); - } - else { - setDeadline(parsed); - } - } - catch (error) { - console.error(error); - setDeadlineError(DeadlineError.InvalidInput); - } - } - } - var showCustomDeadlineRow = Boolean(chainId && !L2_CHAIN_IDS.includes(chainId)); - return (jsxRuntime.jsxs(AutoColumn, __assign({ gap: "md" }, { children: [jsxRuntime.jsxs(AutoColumn, __assign({ gap: "sm" }, { children: [jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(ThemedText.Black, __assign({ fontWeight: 400, fontSize: 14, color: theme.text2 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Slippage tolerance" }, void 0) }), void 0), jsxRuntime.jsx(QuestionHelper, { text: jsxRuntime.jsx(macro.Trans, { children: "Your transaction will revert if the price changes unfavorably by more than this percentage." }, void 0) }, void 0)] }, void 0), jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(Option, __assign({ onClick: function () { - parseSlippageInput(''); - }, active: userSlippageTolerance === 'auto' }, { children: jsxRuntime.jsx(macro.Trans, { children: "Auto" }, void 0) }), void 0), jsxRuntime.jsx(OptionCustom, __assign({ active: userSlippageTolerance !== 'auto', warning: !!slippageError, tabIndex: -1 }, { children: jsxRuntime.jsxs(RowBetween, { children: [tooLow || tooHigh ? (jsxRuntime.jsx(SlippageEmojiContainer, { children: jsxRuntime.jsx("span", __assign({ role: "img", "aria-label": "warning" }, { children: "\u26A0\uFE0F" }), void 0) }, void 0)) : null, jsxRuntime.jsx(Input, { placeholder: placeholderSlippage.toFixed(2), value: slippageInput.length > 0 - ? slippageInput - : userSlippageTolerance === 'auto' - ? '' - : userSlippageTolerance.toFixed(2), onChange: function (e) { return parseSlippageInput(e.target.value); }, onBlur: function () { - setSlippageInput(''); - setSlippageError(false); - }, color: slippageError ? 'red' : '' }, void 0), "%"] }, void 0) }), void 0)] }, void 0), slippageError || tooLow || tooHigh ? (jsxRuntime.jsx(RowBetween, __assign({ style: { - fontSize: '14px', - paddingTop: '7px', - color: slippageError ? 'red' : '#F3841E', - } }, { children: slippageError ? (jsxRuntime.jsx(macro.Trans, { children: "Enter a valid slippage percentage" }, void 0)) : tooLow ? (jsxRuntime.jsx(macro.Trans, { children: "Your transaction may fail" }, void 0)) : (jsxRuntime.jsx(macro.Trans, { children: "Your transaction may be frontrun" }, void 0)) }), void 0)) : null] }), void 0), showCustomDeadlineRow && (jsxRuntime.jsxs(AutoColumn, __assign({ gap: "sm" }, { children: [jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(ThemedText.Black, __assign({ fontSize: 14, fontWeight: 400, color: theme.text2 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Transaction deadline" }, void 0) }), void 0), jsxRuntime.jsx(QuestionHelper, { text: jsxRuntime.jsx(macro.Trans, { children: "Your transaction will revert if it is pending for more than this period of time." }, void 0) }, void 0)] }, void 0), jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(OptionCustom, __assign({ style: { width: '80px' }, warning: !!deadlineError, tabIndex: -1 }, { children: jsxRuntime.jsx(Input, { placeholder: (DEFAULT_DEADLINE_FROM_NOW / 60).toString(), value: deadlineInput.length > 0 - ? deadlineInput - : deadline === DEFAULT_DEADLINE_FROM_NOW - ? '' - : (deadline / 60).toString(), onChange: function (e) { return parseCustomDeadline(e.target.value); }, onBlur: function () { - setDeadlineInput(''); - setDeadlineError(false); - }, color: deadlineError ? 'red' : '' }, void 0) }), void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ style: { paddingLeft: '8px' }, fontSize: 14 }, { children: jsxRuntime.jsx(macro.Trans, { children: "minutes" }, void 0) }), void 0)] }, void 0)] }), void 0))] }), void 0)); -} -var templateObject_1$9, templateObject_2$3, templateObject_3$2, templateObject_4$1, templateObject_5$1, templateObject_6$1, templateObject_7$1; - -var StyledMenuIcon = styled__default["default"](reactFeather.Settings)(templateObject_1$8 || (templateObject_1$8 = __makeTemplateObject(["\n height: 20px;\n width: 20px;\n\n > * {\n stroke: ", ";\n }\n\n :hover {\n opacity: 0.7;\n }\n"], ["\n height: 20px;\n width: 20px;\n\n > * {\n stroke: ", ";\n }\n\n :hover {\n opacity: 0.7;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.text1; -}); -var StyledCloseIcon = styled__default["default"](reactFeather.X)(templateObject_2$2 || (templateObject_2$2 = __makeTemplateObject(["\n height: 20px;\n width: 20px;\n :hover {\n cursor: pointer;\n }\n\n > * {\n stroke: ", ";\n }\n"], ["\n height: 20px;\n width: 20px;\n :hover {\n cursor: pointer;\n }\n\n > * {\n stroke: ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.text1; -}); -var StyledMenuButton = styled__default["default"].button(templateObject_3$1 || (templateObject_3$1 = __makeTemplateObject(["\n position: relative;\n width: 100%;\n height: 100%;\n border: none;\n background-color: transparent;\n margin: 0;\n padding: 0;\n border-radius: 0.5rem;\n height: 20px;\n\n :hover,\n :focus {\n cursor: pointer;\n outline: none;\n }\n"], ["\n position: relative;\n width: 100%;\n height: 100%;\n border: none;\n background-color: transparent;\n margin: 0;\n padding: 0;\n border-radius: 0.5rem;\n height: 20px;\n\n :hover,\n :focus {\n cursor: pointer;\n outline: none;\n }\n"]))); -var EmojiWrapper = styled__default["default"].div(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n position: absolute;\n bottom: -6px;\n right: 0px;\n font-size: 14px;\n"], ["\n position: absolute;\n bottom: -6px;\n right: 0px;\n font-size: 14px;\n"]))); -var StyledMenu = styled__default["default"].div(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n margin-left: 0.5rem;\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n text-align: left;\n"], ["\n margin-left: 0.5rem;\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n text-align: left;\n"]))); -var MenuFlyout = styled__default["default"].span(templateObject_7 || (templateObject_7 = __makeTemplateObject(["\n min-width: 20.125rem;\n background-color: ", ";\n border: 1px solid ", ";\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 border-radius: 12px;\n display: flex;\n flex-direction: column;\n font-size: 1rem;\n position: absolute;\n top: 2rem;\n right: 0rem;\n z-index: 100;\n\n ", ";\n\n user-select: none;\n"], ["\n min-width: 20.125rem;\n background-color: ", ";\n border: 1px solid ", ";\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 border-radius: 12px;\n display: flex;\n flex-direction: column;\n font-size: 1rem;\n position: absolute;\n top: 2rem;\n right: 0rem;\n z-index: 100;\n\n ", ";\n\n user-select: none;\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}, function (_a) { - var theme = _a.theme; - return theme.bg3; -}, function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToMedium(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n min-width: 18.125rem;\n "], ["\n min-width: 18.125rem;\n "]))); -}); -var Break = styled__default["default"].div(templateObject_8 || (templateObject_8 = __makeTemplateObject(["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"], ["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg3; -}); -var ModalContentWrapper = styled__default["default"].div(templateObject_9 || (templateObject_9 = __makeTemplateObject(["\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 2rem 0;\n background-color: ", ";\n border-radius: 20px;\n"], ["\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 2rem 0;\n background-color: ", ";\n border-radius: 20px;\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}); -function SettingsTab(_a) { - var placeholderSlippage = _a.placeholderSlippage; - var chainId = useActiveWeb3React().chainId; - var node = React.useRef(); - var open = useModalOpen(ApplicationModal.SETTINGS); - var toggle = useToggleSettingsMenu(); - var theme = React.useContext(styled.ThemeContext); - var _b = __read(useExpertModeManager(), 2), expertMode = _b[0], toggleExpertMode = _b[1]; - var _c = __read(useClientSideRouter(), 2), clientSideRouter = _c[0], setClientSideRouter = _c[1]; - // show confirmation view before turning on - var _d = __read(React.useState(false), 2), showConfirmation = _d[0], setShowConfirmation = _d[1]; - useOnClickOutside(node, open ? toggle : undefined); - return ( - // https://github.com/DefinitelyTyped/DefinitelyTyped/issues/30451 - jsxRuntime.jsxs(StyledMenu, __assign({ ref: node }, { children: [jsxRuntime.jsx(Modal, __assign({ isOpen: showConfirmation, onDismiss: function () { return setShowConfirmation(false); }, maxHeight: 100 }, { children: jsxRuntime.jsx(ModalContentWrapper, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "lg" }, { children: [jsxRuntime.jsxs(RowBetween, __assign({ style: { padding: '0 2rem' } }, { children: [jsxRuntime.jsx("div", {}, void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Are you sure?" }, void 0) }), void 0), jsxRuntime.jsx(StyledCloseIcon, { onClick: function () { return setShowConfirmation(false); } }, void 0)] }), void 0), jsxRuntime.jsx(Break, {}, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "lg", style: { padding: '0 2rem' } }, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds." }, void 0) }), void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 600, fontSize: 20 }, { children: jsxRuntime.jsx(macro.Trans, { children: "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING." }, void 0) }), void 0), jsxRuntime.jsx(ButtonError, __assign({ error: true, padding: '12px', onClick: function () { - var confirmWord = macro.t(templateObject_10 || (templateObject_10 = __makeTemplateObject(["confirm"], ["confirm"]))); - if (window.prompt(macro.t(templateObject_11 || (templateObject_11 = __makeTemplateObject(["Please type the word \"", "\" to enable expert mode."], ["Please type the word \"", "\" to enable expert mode."])), confirmWord)) === confirmWord) { - toggleExpertMode(); - setShowConfirmation(false); - } - } }, { children: jsxRuntime.jsx(rebass.Text, __assign({ fontSize: 20, fontWeight: 500, id: "confirm-expert-mode" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Turn On Expert Mode" }, void 0) }), void 0) }), void 0)] }), void 0)] }), void 0) }, void 0) }), void 0), jsxRuntime.jsxs(StyledMenuButton, __assign({ onClick: toggle, id: "open-settings-dialog-button", "aria-label": macro.t(templateObject_12 || (templateObject_12 = __makeTemplateObject(["Transaction Settings"], ["Transaction Settings"]))) }, { children: [jsxRuntime.jsx(StyledMenuIcon, {}, void 0), expertMode ? (jsxRuntime.jsx(EmojiWrapper, { children: jsxRuntime.jsx("span", __assign({ role: "img", "aria-label": "wizard-icon" }, { children: "\uD83E\uDDD9" }), void 0) }, void 0)) : null] }), void 0), open && (jsxRuntime.jsx(MenuFlyout, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "md", style: { padding: '1rem' } }, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 600, fontSize: 14 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Transaction Settings" }, void 0) }), void 0), jsxRuntime.jsx(TransactionSettings, { placeholderSlippage: placeholderSlippage }, void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 600, fontSize: 14 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Interface Settings" }, void 0) }), void 0), chainId && AUTO_ROUTER_SUPPORTED_CHAINS.includes(chainId) && (jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(ThemedText.Black, __assign({ fontWeight: 400, fontSize: 14, color: theme.text2 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Auto Router API" }, void 0) }), void 0), jsxRuntime.jsx(QuestionHelper, { text: jsxRuntime.jsx(macro.Trans, { children: "Use the Uniswap Labs API to get faster quotes." }, void 0) }, void 0)] }, void 0), jsxRuntime.jsx(Toggle, { id: "toggle-optimized-router-button", isActive: !clientSideRouter, toggle: function () { - ReactGA__default["default"].event({ - category: 'Routing', - action: clientSideRouter ? 'enable routing API' : 'disable routing API', - }); - setClientSideRouter(!clientSideRouter); - } }, void 0)] }, void 0)), jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(ThemedText.Black, __assign({ fontWeight: 400, fontSize: 14, color: theme.text2 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Expert Mode" }, void 0) }), void 0), jsxRuntime.jsx(QuestionHelper, { text: jsxRuntime.jsx(macro.Trans, { children: "Allow high price impact trades and skip the confirm screen. Use at your own risk." }, void 0) }, void 0)] }, void 0), jsxRuntime.jsx(Toggle, { id: "toggle-expert-mode-button", isActive: expertMode, toggle: expertMode - ? function () { - toggleExpertMode(); - setShowConfirmation(false); - } - : function () { - toggle(); - setShowConfirmation(true); - } }, void 0)] }, void 0)] }), void 0) }, void 0))] }), void 0)); -} -var templateObject_1$8, templateObject_2$2, templateObject_3$1, templateObject_4, templateObject_5, templateObject_6, templateObject_7, templateObject_8, templateObject_9, templateObject_10, templateObject_11, templateObject_12; - -var StyledSwapHeader = styled__default["default"].div(templateObject_1$7 || (templateObject_1$7 = __makeTemplateObject(["\n padding: 1rem 1.25rem 0.5rem 1.25rem;\n width: 100%;\n color: ", ";\n"], ["\n padding: 1rem 1.25rem 0.5rem 1.25rem;\n width: 100%;\n color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.text2; -}); -function SwapHeader(_a) { - var allowedSlippage = _a.allowedSlippage; - return (jsxRuntime.jsx(StyledSwapHeader, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(RowFixed, { children: jsxRuntime.jsx(ThemedText.Black, __assign({ fontWeight: 500, fontSize: 16, style: { marginRight: '8px' } }, { children: jsxRuntime.jsx(macro.Trans, { children: "Swap" }, void 0) }), void 0) }, void 0), jsxRuntime.jsx(RowFixed, { children: jsxRuntime.jsx(SettingsTab, { placeholderSlippage: allowedSlippage }, void 0) }, void 0)] }, void 0) }, void 0)); -} -var templateObject_1$7; - -function parsedQueryString(search) { - if (!search) { - // react-router-dom places search string in the hash - var hash = window.location.hash; - search = hash.substr(hash.indexOf('?')); - } - return search && search.length > 1 ? qs.parse(search, { parseArrays: false, ignoreQueryPrefix: true }) : {}; -} -function useParsedQueryString() { - var search = reactRouterDom.useLocation().search; - return React.useMemo(function () { return parsedQueryString(search); }, [search]); -} - -var SUPPORTED_LOCALES = [ - // order as they appear in the language dropdown - 'en-US', - 'af-ZA', - 'ar-SA', - 'ca-ES', - 'cs-CZ', - 'da-DK', - 'de-DE', - 'el-GR', - 'es-ES', - 'fi-FI', - 'fr-FR', - 'he-IL', - 'hu-HU', - 'id-ID', - 'it-IT', - 'ja-JP', - 'ko-KR', - 'nl-NL', - 'no-NO', - 'pl-PL', - 'pt-BR', - 'pt-PT', - 'ro-RO', - 'ru-RU', - 'sr-SP', - 'sv-SE', - 'sw-TZ', - 'tr-TR', - 'uk-UA', - 'vi-VN', - 'zh-CN', - 'zh-TW', -]; -var DEFAULT_LOCALE = 'en-US'; -var LOCALE_LABEL = { - 'af-ZA': 'Afrikaans', - 'ar-SA': 'العربية', - 'ca-ES': 'Català', - 'cs-CZ': 'čeština', - 'da-DK': 'dansk', - 'de-DE': 'Deutsch', - 'el-GR': 'ελληνικά', - 'en-US': 'English', - 'es-ES': 'Español', - 'fi-FI': 'suomi', - 'fr-FR': 'français', - 'he-IL': 'עִברִית', - 'hu-HU': 'Magyar', - 'id-ID': 'bahasa Indonesia', - 'it-IT': 'Italiano', - 'ja-JP': '日本語', - 'ko-KR': '한국어', - 'nl-NL': 'Nederlands', - 'no-NO': 'norsk', - 'pl-PL': 'Polskie', - 'pt-BR': 'português', - 'pt-PT': 'português', - 'ro-RO': 'Română', - 'ru-RU': 'русский', - 'sr-SP': 'Српски', - 'sv-SE': 'svenska', - 'sw-TZ': 'Kiswahili', - 'tr-TR': 'Türkçe', - 'uk-UA': 'Український', - 'vi-VN': 'Tiếng Việt', - 'zh-CN': '简体中文', - 'zh-TW': '繁体中文', - pseudo: 'ƥƨèúδô', -}; - -var Field$3; -(function (Field) { - Field["LIQUIDITY_PERCENT"] = "LIQUIDITY_PERCENT"; - Field["LIQUIDITY"] = "LIQUIDITY"; - Field["CURRENCY_A"] = "CURRENCY_A"; - Field["CURRENCY_B"] = "CURRENCY_B"; -})(Field$3 || (Field$3 = {})); -var typeInput$3 = toolkit.createAction('burn/typeInputBurn'); - -var initialState$7 = { - independentField: Field$3.LIQUIDITY_PERCENT, - typedValue: '0', -}; -var burn = toolkit.createReducer(initialState$7, function (builder) { - return builder.addCase(typeInput$3, function (state, _a) { - var _b = _a.payload, field = _b.field, typedValue = _b.typedValue; - return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); - }); -}); - -var selectPercent = toolkit.createAction('burnV3/selectBurnPercent'); - -var initialState$6 = { - percent: 0, -}; -var burnV3 = toolkit.createReducer(initialState$6, function (builder) { - return builder.addCase(selectPercent, function (state, _a) { - var percent = _a.payload.percent; - return __assign(__assign({}, state), { percent: percent }); - }); -}); - -var _a$4; -// List of supported subgraphs. Note that the app currently only support one active subgraph at a time -var CHAIN_SUBGRAPH_URL = (_a$4 = {}, - _a$4[SupportedChainId.MAINNET] = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3', - _a$4[SupportedChainId.RINKEBY] = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3', - _a$4[SupportedChainId.ARBITRUM_ONE] = 'https://api.thegraph.com/subgraphs/name/ianlapham/arbitrum-minimal', - _a$4[SupportedChainId.OPTIMISM] = 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-optimism-dev', - _a$4[SupportedChainId.POLYGON] = 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-v3-polygon', - _a$4); -var api = react.createApi({ - reducerPath: 'dataApi', - baseQuery: graphqlRequestBaseQuery(), - endpoints: function (builder) { return ({ - allV3Ticks: builder.query({ - query: function (_a) { - var poolAddress = _a.poolAddress, _b = _a.skip, skip = _b === void 0 ? 0 : _b; - return ({ - document: graphqlRequest.gql(templateObject_1$6 || (templateObject_1$6 = __makeTemplateObject(["\n query allV3Ticks($poolAddress: String!, $skip: Int!) {\n ticks(first: 1000, skip: $skip, where: { poolAddress: $poolAddress }, orderBy: tickIdx) {\n tick: tickIdx\n liquidityNet\n price0\n price1\n }\n }\n "], ["\n query allV3Ticks($poolAddress: String!, $skip: Int!) {\n ticks(first: 1000, skip: $skip, where: { poolAddress: $poolAddress }, orderBy: tickIdx) {\n tick: tickIdx\n liquidityNet\n price0\n price1\n }\n }\n "]))), - variables: { - poolAddress: poolAddress, - skip: skip, - }, - }); - }, - }), - feeTierDistribution: builder.query({ - query: function (_a) { - var token0 = _a.token0, token1 = _a.token1; - return ({ - document: graphqlRequest.gql(templateObject_2$1 || (templateObject_2$1 = __makeTemplateObject(["\n query feeTierDistribution($token0: String!, $token1: String!) {\n _meta {\n block {\n number\n }\n }\n asToken0: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token0, token1: $token1 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n asToken1: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token1, token1: $token0 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n }\n "], ["\n query feeTierDistribution($token0: String!, $token1: String!) {\n _meta {\n block {\n number\n }\n }\n asToken0: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token0, token1: $token1 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n asToken1: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token1, token1: $token0 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n }\n "]))), - variables: { - token0: token0, - token1: token1, - }, - }); - }, - }), - }); }, -}); -// Graphql query client wrapper that builds a dynamic url based on chain id -function graphqlRequestBaseQuery() { - var _this = this; - return function (_a, _b) { - var document = _a.document, variables = _a.variables; - var getState = _b.getState; - return __awaiter(_this, void 0, void 0, function () { - var chainId, subgraphUrl, error_1, name_1, message, stack, request, response; - var _c; - return __generator(this, function (_d) { - switch (_d.label) { - case 0: - _d.trys.push([0, 2, , 3]); - chainId = getState().application.chainId; - subgraphUrl = chainId ? CHAIN_SUBGRAPH_URL[chainId] : undefined; - if (!subgraphUrl) { - return [2 /*return*/, { - error: { - name: 'UnsupportedChainId', - message: "Subgraph queries against ChainId " + chainId + " are not supported.", - stack: '', - }, - }]; - } - _c = {}; - return [4 /*yield*/, new graphqlRequest.GraphQLClient(subgraphUrl).request(document, variables)]; - case 1: return [2 /*return*/, (_c.data = _d.sent(), _c.meta = {}, _c)]; - case 2: - error_1 = _d.sent(); - if (error_1 instanceof graphqlRequest.ClientError) { - name_1 = error_1.name, message = error_1.message, stack = error_1.stack, request = error_1.request, response = error_1.response; - return [2 /*return*/, { error: { name: name_1, message: message, stack: stack }, meta: { request: request, response: response } }]; - } - throw error_1; - case 3: return [2 /*return*/]; - } - }); - }); - }; -} -var templateObject_1$6, templateObject_2$1; - -// fired once when the app reloads but before the app renders -// allows any updates to be applied to store data loaded from localStorage -var updateVersion = toolkit.createAction('global/updateVersion'); - -var NEW_LIST_STATE = { - error: null, - current: null, - loadingRequestId: null, - pendingUpdate: null, -}; -var initialState$5 = { - lastInitializedDefaultListOfLists: DEFAULT_LIST_OF_LISTS, - byUrl: __assign({}, DEFAULT_LIST_OF_LISTS.reduce(function (memo, listUrl) { - memo[listUrl] = NEW_LIST_STATE; - return memo; - }, {})), - activeListUrls: DEFAULT_ACTIVE_LIST_URLS, -}; -var lists = toolkit.createReducer(initialState$5, function (builder) { - return builder - .addCase(fetchTokenList.pending, function (state, _a) { - var _b, _c, _d, _e; - var _f = _a.payload, requestId = _f.requestId, url = _f.url; - var current = (_c = (_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.current) !== null && _c !== void 0 ? _c : null; - var pendingUpdate = (_e = (_d = state.byUrl[url]) === null || _d === void 0 ? void 0 : _d.pendingUpdate) !== null && _e !== void 0 ? _e : null; - state.byUrl[url] = { - current: current, - pendingUpdate: pendingUpdate, - loadingRequestId: requestId, - error: null, - }; - }) - .addCase(fetchTokenList.fulfilled, function (state, _a) { - var _b, _c, _d; - var _e = _a.payload, requestId = _e.requestId, tokenList = _e.tokenList, url = _e.url; - var current = (_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.current; - var loadingRequestId = (_c = state.byUrl[url]) === null || _c === void 0 ? void 0 : _c.loadingRequestId; - // no-op if update does nothing - if (current) { - var upgradeType = tokenLists.getVersionUpgrade(current.version, tokenList.version); - if (upgradeType === tokenLists.VersionUpgrade.NONE) - return; - if (loadingRequestId === null || loadingRequestId === requestId) { - state.byUrl[url] = { - current: current, - pendingUpdate: tokenList, - loadingRequestId: null, - error: null, - }; - } - } - else { - // activate if on default active - if (DEFAULT_ACTIVE_LIST_URLS.includes(url)) { - (_d = state.activeListUrls) === null || _d === void 0 ? void 0 : _d.push(url); - } - state.byUrl[url] = { - current: tokenList, - pendingUpdate: null, - loadingRequestId: null, - error: null, - }; - } - }) - .addCase(fetchTokenList.rejected, function (state, _a) { - var _b; - var _c = _a.payload, url = _c.url, requestId = _c.requestId, errorMessage = _c.errorMessage; - if (((_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.loadingRequestId) !== requestId) { - // no-op since it's not the latest request - return; - } - state.byUrl[url] = { - current: state.byUrl[url].current ? state.byUrl[url].current : null, - pendingUpdate: null, - loadingRequestId: null, - error: errorMessage, - }; - }) - .addCase(addList, function (state, _a) { - var url = _a.payload; - if (!state.byUrl[url]) { - state.byUrl[url] = NEW_LIST_STATE; - } - }) - .addCase(removeList, function (state, _a) { - var url = _a.payload; - if (state.byUrl[url]) { - delete state.byUrl[url]; - } - // remove list from active urls if needed - if (state.activeListUrls && state.activeListUrls.includes(url)) { - state.activeListUrls = state.activeListUrls.filter(function (u) { return u !== url; }); - } - }) - .addCase(enableList, function (state, _a) { - var url = _a.payload; - if (!state.byUrl[url]) { - state.byUrl[url] = NEW_LIST_STATE; - } - if (state.activeListUrls && !state.activeListUrls.includes(url)) { - state.activeListUrls.push(url); - } - if (!state.activeListUrls) { - state.activeListUrls = [url]; - } - }) - .addCase(disableList, function (state, _a) { - var url = _a.payload; - if (state.activeListUrls && state.activeListUrls.includes(url)) { - state.activeListUrls = state.activeListUrls.filter(function (u) { return u !== url; }); - } - }) - .addCase(acceptListUpdate, function (state, _a) { - var _b; - var url = _a.payload; - if (!((_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.pendingUpdate)) { - throw new Error('accept list update called without pending update'); - } - state.byUrl[url] = __assign(__assign({}, state.byUrl[url]), { current: state.byUrl[url].pendingUpdate, pendingUpdate: null }); - }) - .addCase(updateVersion, function (state) { - // state loaded from localStorage, but new lists have never been initialized - if (!state.lastInitializedDefaultListOfLists) { - state.byUrl = initialState$5.byUrl; - state.activeListUrls = initialState$5.activeListUrls; - } - else if (state.lastInitializedDefaultListOfLists) { - var lastInitializedSet_1 = state.lastInitializedDefaultListOfLists.reduce(function (s, l) { return s.add(l); }, new Set()); - var newListOfListsSet_1 = DEFAULT_LIST_OF_LISTS.reduce(function (s, l) { return s.add(l); }, new Set()); - DEFAULT_LIST_OF_LISTS.forEach(function (listUrl) { - if (!lastInitializedSet_1.has(listUrl)) { - state.byUrl[listUrl] = NEW_LIST_STATE; - } - }); - state.lastInitializedDefaultListOfLists.forEach(function (listUrl) { - if (!newListOfListsSet_1.has(listUrl)) { - delete state.byUrl[listUrl]; - } - }); - } - state.lastInitializedDefaultListOfLists = DEFAULT_LIST_OF_LISTS; - // if no active lists, activate defaults - if (!state.activeListUrls) { - state.activeListUrls = DEFAULT_ACTIVE_LIST_URLS; - // for each list on default list, initialize if needed - DEFAULT_ACTIVE_LIST_URLS.map(function (listUrl) { - if (!state.byUrl[listUrl]) { - state.byUrl[listUrl] = NEW_LIST_STATE; - } - return true; - }); - } - }); -}); - -/** - * Converts a filter to the corresponding string key - * @param filter the filter to convert - */ -function filterToKey(filter) { - var _a, _b, _c, _d; - return ((_a = filter.address) !== null && _a !== void 0 ? _a : '') + ":" + ((_d = (_c = (_b = filter.topics) === null || _b === void 0 ? void 0 : _b.map(function (topic) { return (topic ? (Array.isArray(topic) ? topic.join(';') : topic) : '\0'); })) === null || _c === void 0 ? void 0 : _c.join('-')) !== null && _d !== void 0 ? _d : ''); -} - -var _a$3; -var slice = toolkit.createSlice({ - name: 'logs', - initialState: {}, - reducers: { - addListener: function (state, _a) { - var _b = _a.payload, chainId = _b.chainId, filter = _b.filter; - if (!state[chainId]) - state[chainId] = {}; - var key = filterToKey(filter); - if (!state[chainId][key]) - state[chainId][key] = { - listeners: 1, - }; - else - state[chainId][key].listeners++; - }, - fetchingLogs: function (state, _a) { - var e_1, _b; - var _c = _a.payload, chainId = _c.chainId, filters = _c.filters, blockNumber = _c.blockNumber; - if (!state[chainId]) - return; - try { - for (var filters_1 = __values(filters), filters_1_1 = filters_1.next(); !filters_1_1.done; filters_1_1 = filters_1.next()) { - var filter = filters_1_1.value; - var key = filterToKey(filter); - if (!state[chainId][key]) - continue; - state[chainId][key].fetchingBlockNumber = blockNumber; - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (filters_1_1 && !filters_1_1.done && (_b = filters_1.return)) _b.call(filters_1); - } - finally { if (e_1) throw e_1.error; } - } - }, - fetchedLogs: function (state, _a) { - var _b = _a.payload, chainId = _b.chainId, filter = _b.filter, results = _b.results; - if (!state[chainId]) - return; - var key = filterToKey(filter); - var fetchState = state[chainId][key]; - if (!fetchState || (fetchState.results && fetchState.results.blockNumber > results.blockNumber)) - return; - fetchState.results = results; - }, - fetchedLogsError: function (state, _a) { - var _b = _a.payload, chainId = _b.chainId, filter = _b.filter, blockNumber = _b.blockNumber; - if (!state[chainId]) - return; - var key = filterToKey(filter); - var fetchState = state[chainId][key]; - if (!fetchState || (fetchState.results && fetchState.results.blockNumber > blockNumber)) - return; - fetchState.results = { - blockNumber: blockNumber, - error: true, - }; - }, - removeListener: function (state, _a) { - var _b = _a.payload, chainId = _b.chainId, filter = _b.filter; - if (!state[chainId]) - return; - var key = filterToKey(filter); - if (!state[chainId][key]) - return; - state[chainId][key].listeners--; - }, - }, -}); -var logs = slice.reducer; -(_a$3 = slice.actions, _a$3.addListener); _a$3.removeListener; _a$3.fetchedLogs; _a$3.fetchedLogsError; _a$3.fetchingLogs; - -var Field$2; -(function (Field) { - Field["CURRENCY_A"] = "CURRENCY_A"; - Field["CURRENCY_B"] = "CURRENCY_B"; -})(Field$2 || (Field$2 = {})); -var typeInput$2 = toolkit.createAction('mint/typeInputMint'); -var resetMintState$1 = toolkit.createAction('mint/resetMintState'); - -var initialState$4 = { - independentField: Field$2.CURRENCY_A, - typedValue: '', - otherTypedValue: '', - startPriceTypedValue: '', - leftRangeTypedValue: '', - rightRangeTypedValue: '', -}; -var mint = toolkit.createReducer(initialState$4, function (builder) { - return builder - .addCase(resetMintState$1, function () { return initialState$4; }) - .addCase(typeInput$2, function (state, _a) { - var _b = _a.payload, field = _b.field, typedValue = _b.typedValue, noLiquidity = _b.noLiquidity; - if (noLiquidity) { - // they're typing into the field they've last typed in - if (field === state.independentField) { - return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); - } - // they're typing into a new field, store the other value - else { - return __assign(__assign({}, state), { independentField: field, typedValue: typedValue, otherTypedValue: state.typedValue }); - } - } - else { - return __assign(__assign({}, state), { independentField: field, typedValue: typedValue, otherTypedValue: '' }); - } - }); -}); - -var Field$1; -(function (Field) { - Field["CURRENCY_A"] = "CURRENCY_A"; - Field["CURRENCY_B"] = "CURRENCY_B"; -})(Field$1 || (Field$1 = {})); -var Bound; -(function (Bound) { - Bound["LOWER"] = "LOWER"; - Bound["UPPER"] = "UPPER"; -})(Bound || (Bound = {})); -var typeInput$1 = toolkit.createAction('mintV3/typeInputMint'); -var typeStartPriceInput = toolkit.createAction('mintV3/typeStartPriceInput'); -var typeLeftRangeInput = toolkit.createAction('mintV3/typeLeftRangeInput'); -var typeRightRangeInput = toolkit.createAction('mintV3/typeRightRangeInput'); -var resetMintState = toolkit.createAction('mintV3/resetMintState'); -var setFullRange = toolkit.createAction('mintV3/setFullRange'); - -var initialState$3 = { - independentField: Field$1.CURRENCY_A, - typedValue: '', - startPriceTypedValue: '', - leftRangeTypedValue: '', - rightRangeTypedValue: '', -}; -var mintV3 = toolkit.createReducer(initialState$3, function (builder) { - return builder - .addCase(resetMintState, function () { return initialState$3; }) - .addCase(setFullRange, function (state) { - return __assign(__assign({}, state), { leftRangeTypedValue: true, rightRangeTypedValue: true }); - }) - .addCase(typeStartPriceInput, function (state, _a) { - var typedValue = _a.payload.typedValue; - return __assign(__assign({}, state), { startPriceTypedValue: typedValue }); - }) - .addCase(typeLeftRangeInput, function (state, _a) { - var typedValue = _a.payload.typedValue; - return __assign(__assign({}, state), { leftRangeTypedValue: typedValue }); - }) - .addCase(typeRightRangeInput, function (state, _a) { - var typedValue = _a.payload.typedValue; - return __assign(__assign({}, state), { rightRangeTypedValue: typedValue }); - }) - .addCase(typeInput$1, function (state, _a) { - var _b = _a.payload, field = _b.field, typedValue = _b.typedValue, noLiquidity = _b.noLiquidity; - if (noLiquidity) { - // they're typing into the field they've last typed in - if (field === state.independentField) { - return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); - } - // they're typing into a new field, store the other value - else { - return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); - } - } - else { - return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); - } - }); -}); - -var protocols = [routerSdk.Protocol.V2, routerSdk.Protocol.V3]; -var DEFAULT_QUERY_PARAMS = { - protocols: protocols.map(function (p) { return p.toLowerCase(); }).join(','), - // example other params - // forceCrossProtocol: 'true', - // minSplits: '5', -}; -function getClientSideQuote(_a) { - var tokenInAddress = _a.tokenInAddress, tokenInChainId = _a.tokenInChainId, tokenInDecimals = _a.tokenInDecimals, tokenInSymbol = _a.tokenInSymbol, tokenOutAddress = _a.tokenOutAddress, tokenOutChainId = _a.tokenOutChainId, tokenOutDecimals = _a.tokenOutDecimals, tokenOutSymbol = _a.tokenOutSymbol, amount = _a.amount, type = _a.type; - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, Promise.resolve().then(function () { return index; })]; - case 1: return [2 /*return*/, (_b.sent()).getQuote({ - type: type, - chainId: tokenInChainId, - tokenIn: { - address: tokenInAddress, - chainId: tokenInChainId, - decimals: tokenInDecimals, - symbol: tokenInSymbol, - }, - tokenOut: { - address: tokenOutAddress, - chainId: tokenOutChainId, - decimals: tokenOutDecimals, - symbol: tokenOutSymbol, - }, - amount: amount, - }, { protocols: protocols })]; - } - }); - }); -} -var routingApi = react.createApi({ - reducerPath: 'routingApi', - baseQuery: react.fetchBaseQuery({ - baseUrl: 'https://api.uniswap.org/v1/', - }), - endpoints: function (build) { return ({ - getQuote: build.query({ - queryFn: function (args, _api, _extraOptions, fetch) { - return __awaiter(this, void 0, void 0, function () { - var tokenInAddress, tokenInChainId, tokenOutAddress, tokenOutChainId, amount, useClientSideRouter, type, result, query, e_1; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - tokenInAddress = args.tokenInAddress, tokenInChainId = args.tokenInChainId, tokenOutAddress = args.tokenOutAddress, tokenOutChainId = args.tokenOutChainId, amount = args.amount, useClientSideRouter = args.useClientSideRouter, type = args.type; - _a.label = 1; - case 1: - _a.trys.push([1, 6, , 7]); - if (!useClientSideRouter) return [3 /*break*/, 3]; - return [4 /*yield*/, getClientSideQuote(args)]; - case 2: - result = _a.sent(); - return [3 /*break*/, 5]; - case 3: - query = qs__default["default"].stringify(__assign(__assign({}, DEFAULT_QUERY_PARAMS), { tokenInAddress: tokenInAddress, tokenInChainId: tokenInChainId, tokenOutAddress: tokenOutAddress, tokenOutChainId: tokenOutChainId, amount: amount, type: type })); - return [4 /*yield*/, fetch("quote?" + query)]; - case 4: - result = _a.sent(); - _a.label = 5; - case 5: return [2 /*return*/, { data: result.data }]; - case 6: - e_1 = _a.sent(); - // TODO: fall back to client-side quoter when auto router fails. - // deprecate 'legacy' v2/v3 routers first. - return [2 /*return*/, { error: e_1 }]; - case 7: return [2 /*return*/]; - } - }); - }); - }, - keepUnusedDataFor: ms__default["default"](templateObject_1$5 || (templateObject_1$5 = __makeTemplateObject(["10s"], ["10s"]))), - extraOptions: { - maxRetries: 0, - }, - }), - }); }, -}); -var useGetQuoteQuery = routingApi.useGetQuoteQuery; -var templateObject_1$5; - -var Field; -(function (Field) { - Field["INPUT"] = "INPUT"; - Field["OUTPUT"] = "OUTPUT"; -})(Field || (Field = {})); -var selectCurrency = toolkit.createAction('swap/selectCurrency'); -var switchCurrencies = toolkit.createAction('swap/switchCurrencies'); -var typeInput = toolkit.createAction('swap/typeInput'); -var replaceSwapState = toolkit.createAction('swap/replaceSwapState'); -var setRecipient = toolkit.createAction('swap/setRecipient'); - -var CHAIN_DATA_ABI = [ - { - inputs: [], - name: 'latestAnswer', - outputs: [{ internalType: 'int256', name: '', type: 'int256' }], - stateMutability: 'view', - type: 'function', - }, -]; -/** - * Returns the price of 1 gas in WEI for the currently selected network using the chainlink fast gas price oracle - */ -function useGasPrice() { - var _a, _b; - var address = useENSAddress('fast-gas-gwei.data.eth').address; - var contract = useContract(address !== null && address !== void 0 ? address : undefined, CHAIN_DATA_ABI, false); - var resultStr = (_b = (_a = useSingleCallResult(contract, 'latestAnswer').result) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.toString(); - return typeof resultStr === 'string' ? JSBI__default["default"].BigInt(resultStr) : undefined; -} - -var V3_SWAP_DEFAULT_SLIPPAGE = new sdkCore.Percent(50, 10000); // .50% -var ONE_TENTHS_PERCENT = new sdkCore.Percent(10, 10000); // .10% -/** - * Return a guess of the gas cost used in computing slippage tolerance for a given trade - * @param trade the trade for which to _guess_ the amount of gas it would cost to execute - */ -function guesstimateGas(trade) { - if (!!trade) { - return 100000 + trade.swaps.reduce(function (memo, swap) { return swap.route.pools.length + memo; }, 0) * 30000; - } - return undefined; -} -var MIN_AUTO_SLIPPAGE_TOLERANCE = new sdkCore.Percent(5, 1000); // 0.5% -var MAX_AUTO_SLIPPAGE_TOLERANCE = new sdkCore.Percent(25, 100); // 25% -/** - * Returns slippage tolerance based on values from current trade, gas estimates from api, and active network. - */ -function useAutoSlippageTolerance(trade) { - var chainId = useActiveWeb3React().chainId; - var onL2 = chainId && L2_CHAIN_IDS.includes(chainId); - var outputDollarValue = useUSDCValue(trade === null || trade === void 0 ? void 0 : trade.outputAmount); - var nativeGasPrice = useGasPrice(); - var gasEstimate = guesstimateGas(trade); - var nativeCurrency = useNativeCurrency(); - var nativeCurrencyPrice = useUSDCPrice(nativeCurrency !== null && nativeCurrency !== void 0 ? nativeCurrency : undefined); - return React.useMemo(function () { - if (!trade || onL2) - return ONE_TENTHS_PERCENT; - var nativeGasCost = nativeGasPrice && typeof gasEstimate === 'number' - ? JSBI__default["default"].multiply(nativeGasPrice, JSBI__default["default"].BigInt(gasEstimate)) - : undefined; - var dollarGasCost = nativeCurrency && nativeGasCost && nativeCurrencyPrice - ? nativeCurrencyPrice.quote(sdkCore.CurrencyAmount.fromRawAmount(nativeCurrency, nativeGasCost)) - : undefined; - // if valid estimate from api and using api trade, use gas estimate from api - // NOTE - dont use gas estimate for L2s yet - need to verify accuracy - // if not, use local heuristic - var dollarCostToUse = chainId && SUPPORTED_GAS_ESTIMATE_CHAIN_IDS.includes(chainId) && (trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) - ? trade.gasUseEstimateUSD - : dollarGasCost; - if (outputDollarValue && dollarCostToUse) { - // the rationale is that a user will not want their trade to fail for a loss due to slippage that is less than - // the cost of the gas of the failed transaction - var fraction = dollarCostToUse.asFraction.divide(outputDollarValue.asFraction); - var result = new sdkCore.Percent(fraction.numerator, fraction.denominator); - if (result.greaterThan(MAX_AUTO_SLIPPAGE_TOLERANCE)) - return MAX_AUTO_SLIPPAGE_TOLERANCE; - if (result.lessThan(MIN_AUTO_SLIPPAGE_TOLERANCE)) - return MIN_AUTO_SLIPPAGE_TOLERANCE; - return result; - } - return V3_SWAP_DEFAULT_SLIPPAGE; - }, [trade, onL2, nativeGasPrice, gasEstimate, nativeCurrency, nativeCurrencyPrice, chainId, outputDollarValue]); -} - -/** - * Transforms a Routing API quote into an array of routes that can be used to create - * a `Trade`. - */ -function computeRoutes(currencyIn, currencyOut, tradeType, quoteResult) { - if (!quoteResult || !quoteResult.route || !currencyIn || !currencyOut) - return undefined; - if (quoteResult.route.length === 0) - return []; - var parsedTokenIn = parseToken(quoteResult.route[0][0].tokenIn); - var parsedTokenOut = parseToken(quoteResult.route[0][quoteResult.route[0].length - 1].tokenOut); - if (parsedTokenIn.address !== currencyIn.wrapped.address) - return undefined; - if (parsedTokenOut.address !== currencyOut.wrapped.address) - return undefined; - var parsedCurrencyIn = currencyIn.isNative ? nativeOnChain(currencyIn.chainId) : parsedTokenIn; - var parsedCurrencyOut = currencyOut.isNative ? nativeOnChain(currencyOut.chainId) : parsedTokenOut; - try { - return quoteResult.route.map(function (route) { - if (route.length === 0) { - throw new Error('Expected route to have at least one pair or pool'); - } - var rawAmountIn = route[0].amountIn; - var rawAmountOut = route[route.length - 1].amountOut; - if (!rawAmountIn || !rawAmountOut) { - throw new Error('Expected both amountIn and amountOut to be present'); - } - return { - routev3: isV3Route(route) ? new v3Sdk.Route(route.map(parsePool), parsedCurrencyIn, parsedCurrencyOut) : null, - routev2: !isV3Route(route) ? new v2Sdk.Route(route.map(parsePair), parsedCurrencyIn, parsedCurrencyOut) : null, - inputAmount: sdkCore.CurrencyAmount.fromRawAmount(parsedCurrencyIn, rawAmountIn), - outputAmount: sdkCore.CurrencyAmount.fromRawAmount(parsedCurrencyOut, rawAmountOut), - }; - }); - } - catch (e) { - // `Route` constructor may throw if inputs/outputs are temporarily out of sync - // (RTK-Query always returns the latest data which may not be the right inputs/outputs) - // This is not fatal and will fix itself in future render cycles - console.error(e); - return undefined; - } -} -function transformRoutesToTrade(route, tradeType, gasUseEstimateUSD) { - var _a, _b; - return new InterfaceTrade({ - v2Routes: (_a = route === null || route === void 0 ? void 0 : route.filter(function (r) { return r.routev2 !== null; }).map(function (_a) { - var routev2 = _a.routev2, inputAmount = _a.inputAmount, outputAmount = _a.outputAmount; - return ({ routev2: routev2, inputAmount: inputAmount, outputAmount: outputAmount }); - })) !== null && _a !== void 0 ? _a : [], - v3Routes: (_b = route === null || route === void 0 ? void 0 : route.filter(function (r) { return r.routev3 !== null; }).map(function (_a) { - var routev3 = _a.routev3, inputAmount = _a.inputAmount, outputAmount = _a.outputAmount; - return ({ routev3: routev3, inputAmount: inputAmount, outputAmount: outputAmount }); - })) !== null && _b !== void 0 ? _b : [], - tradeType: tradeType, - gasUseEstimateUSD: gasUseEstimateUSD, - }); -} -var parseToken = function (_a) { - var address = _a.address, chainId = _a.chainId, decimals = _a.decimals, symbol = _a.symbol; - return new sdkCore.Token(chainId, address, parseInt(decimals.toString()), symbol); -}; -var parsePool = function (_a) { - var fee = _a.fee, sqrtRatioX96 = _a.sqrtRatioX96, liquidity = _a.liquidity, tickCurrent = _a.tickCurrent, tokenIn = _a.tokenIn, tokenOut = _a.tokenOut; - return new v3Sdk.Pool(parseToken(tokenIn), parseToken(tokenOut), parseInt(fee), sqrtRatioX96, liquidity, parseInt(tickCurrent)); -}; -var parsePair = function (_a) { - var reserve0 = _a.reserve0, reserve1 = _a.reserve1; - return new v2Sdk.Pair(sdkCore.CurrencyAmount.fromRawAmount(parseToken(reserve0.token), reserve0.quotient), sdkCore.CurrencyAmount.fromRawAmount(parseToken(reserve1.token), reserve1.quotient)); -}; -function isV3Route(route) { - return route[0].type === 'v3-pool'; -} - -function useFreshData(data, dataBlockNumber, maxBlockAge) { - if (maxBlockAge === void 0) { maxBlockAge = 10; } - var localBlockNumber = useBlockNumber(); - if (!localBlockNumber) - return undefined; - if (localBlockNumber - dataBlockNumber > maxBlockAge) { - return undefined; - } - return data; -} -/** - * Returns query arguments for the Routing API query or undefined if the - * query should be skipped. - */ -function useRoutingAPIArguments(_a) { - var tokenIn = _a.tokenIn, tokenOut = _a.tokenOut, amount = _a.amount, tradeType = _a.tradeType; - var _b = __read(useClientSideRouter(), 1), clientSideRouter = _b[0]; - return React.useMemo(function () { - return !tokenIn || !tokenOut || !amount || tokenIn.equals(tokenOut) - ? undefined - : { - amount: amount.quotient.toString(), - tokenInAddress: tokenIn.wrapped.address, - tokenInChainId: tokenIn.wrapped.chainId, - tokenInDecimals: tokenIn.wrapped.decimals, - tokenInSymbol: tokenIn.wrapped.symbol, - tokenOutAddress: tokenOut.wrapped.address, - tokenOutChainId: tokenOut.wrapped.chainId, - tokenOutDecimals: tokenOut.wrapped.decimals, - tokenOutSymbol: tokenOut.wrapped.symbol, - useClientSideRouter: clientSideRouter, - type: (tradeType === sdkCore.TradeType.EXACT_INPUT ? 'exactIn' : 'exactOut'), - }; - }, [amount, clientSideRouter, tokenIn, tokenOut, tradeType]); -} -/** - * Returns the best trade by invoking the routing api or the smart order router on the client - * @param tradeType whether the swap is an exact in/out - * @param amountSpecified the exact amount to swap in/out - * @param otherCurrency the desired output/payment currency - */ -function useRoutingAPITrade(tradeType, amountSpecified, otherCurrency) { - var _a; - var _b = __read(React.useMemo(function () { - return tradeType === sdkCore.TradeType.EXACT_INPUT - ? [amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, otherCurrency] - : [otherCurrency, amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency]; - }, [amountSpecified, otherCurrency, tradeType]), 2), currencyIn = _b[0], currencyOut = _b[1]; - var queryArgs = useRoutingAPIArguments({ - tokenIn: currencyIn, - tokenOut: currencyOut, - amount: amountSpecified, - tradeType: tradeType, - }); - var _c = useGetQuoteQuery(queryArgs !== null && queryArgs !== void 0 ? queryArgs : react.skipToken, { - pollingInterval: ms__default["default"](templateObject_1$4 || (templateObject_1$4 = __makeTemplateObject(["15s"], ["15s"]))), - refetchOnFocus: true, - }), isLoading = _c.isLoading, isError = _c.isError, data = _c.data; - var quoteResult = useFreshData(data, Number(data === null || data === void 0 ? void 0 : data.blockNumber) || 0); - var route = React.useMemo(function () { return computeRoutes(currencyIn, currencyOut, tradeType, quoteResult); }, [currencyIn, currencyOut, quoteResult, tradeType]); - // get USD gas cost of trade in active chains stablecoin amount - var gasUseEstimateUSD = (_a = useStablecoinAmountFromFiatValue(quoteResult === null || quoteResult === void 0 ? void 0 : quoteResult.gasUseEstimateUSD)) !== null && _a !== void 0 ? _a : null; - return React.useMemo(function () { - if (!currencyIn || !currencyOut) { - return { - state: TradeState.INVALID, - trade: undefined, - }; - } - if (isLoading && !quoteResult) { - // only on first hook render - return { - state: TradeState.LOADING, - trade: undefined, - }; - } - var otherAmount = tradeType === sdkCore.TradeType.EXACT_INPUT - ? currencyOut && quoteResult - ? sdkCore.CurrencyAmount.fromRawAmount(currencyOut, quoteResult.quote) - : undefined - : currencyIn && quoteResult - ? sdkCore.CurrencyAmount.fromRawAmount(currencyIn, quoteResult.quote) - : undefined; - if (isError || !otherAmount || !route || route.length === 0 || !queryArgs) { - return { - state: TradeState.NO_ROUTE_FOUND, - trade: undefined, - }; - } - try { - var trade = transformRoutesToTrade(route, tradeType, gasUseEstimateUSD); - return { - // always return VALID regardless of isFetching status - state: TradeState.VALID, - trade: trade, - }; - } - catch (e) { - console.debug('transformRoutesToTrade failed: ', e); - return { state: TradeState.INVALID, trade: undefined }; - } - }, [currencyIn, currencyOut, isLoading, quoteResult, tradeType, isError, route, queryArgs, gasUseEstimateUSD]); -} -var templateObject_1$4; - -/** - * Returns the best v2+v3 trade for a desired swap. - * @param tradeType whether the swap is an exact in/out - * @param amountSpecified the exact amount to swap in/out - * @param otherCurrency the desired output/payment currency - */ -function useBestTrade(tradeType, amountSpecified, otherCurrency) { - var autoRouterSupported = useAutoRouterSupported(); - var isWindowVisible = useIsWindowVisible(); - var _a = __read(useDebounce(React.useMemo(function () { return [amountSpecified, otherCurrency]; }, [amountSpecified, otherCurrency]), 200), 2), debouncedAmount = _a[0], debouncedOtherCurrency = _a[1]; - var routingAPITrade = useRoutingAPITrade(tradeType, autoRouterSupported && isWindowVisible ? debouncedAmount : undefined, debouncedOtherCurrency); - var isLoading = amountSpecified !== undefined && debouncedAmount === undefined; - // consider trade debouncing when inputs/outputs do not match - var debouncing = routingAPITrade.trade && - amountSpecified && - (tradeType === sdkCore.TradeType.EXACT_INPUT - ? !routingAPITrade.trade.inputAmount.equalTo(amountSpecified) || - !amountSpecified.currency.equals(routingAPITrade.trade.inputAmount.currency) || - !(debouncedOtherCurrency === null || debouncedOtherCurrency === void 0 ? void 0 : debouncedOtherCurrency.equals(routingAPITrade.trade.outputAmount.currency)) - : !routingAPITrade.trade.outputAmount.equalTo(amountSpecified) || - !amountSpecified.currency.equals(routingAPITrade.trade.outputAmount.currency) || - !(debouncedOtherCurrency === null || debouncedOtherCurrency === void 0 ? void 0 : debouncedOtherCurrency.equals(routingAPITrade.trade.inputAmount.currency))); - var useFallback = !autoRouterSupported || (!debouncing && routingAPITrade.state === TradeState.NO_ROUTE_FOUND); - // only use client side router if routing api trade failed or is not supported - var bestV3Trade = useClientSideV3Trade(tradeType, useFallback ? debouncedAmount : undefined, useFallback ? debouncedOtherCurrency : undefined); - // only return gas estimate from api if routing api trade is used - return React.useMemo(function () { return (__assign(__assign(__assign({}, (useFallback ? bestV3Trade : routingAPITrade)), (debouncing ? { state: TradeState.SYNCING } : {})), (isLoading ? { state: TradeState.LOADING } : {}))); }, [bestV3Trade, debouncing, isLoading, routingAPITrade, useFallback]); -} - -function useSwapState() { - return useAppSelector(function (state) { return state.swap; }); -} -function useSwapActionHandlers() { - var dispatch = useAppDispatch(); - var onCurrencySelection = React.useCallback(function (field, currency) { - dispatch(selectCurrency({ - field: field, - currencyId: currency.isToken ? currency.address : currency.isNative ? 'ETH' : '', - })); - }, [dispatch]); - var onSwitchTokens = React.useCallback(function () { - dispatch(switchCurrencies()); - }, [dispatch]); - var onUserInput = React.useCallback(function (field, typedValue) { - dispatch(typeInput({ field: field, typedValue: typedValue })); - }, [dispatch]); - var onChangeRecipient = React.useCallback(function (recipient) { - dispatch(setRecipient({ recipient: recipient })); - }, [dispatch]); - return { - onSwitchTokens: onSwitchTokens, - onCurrencySelection: onCurrencySelection, - onUserInput: onUserInput, - onChangeRecipient: onChangeRecipient, - }; -} -var BAD_RECIPIENT_ADDRESSES = { - '0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f': true, - '0xf164fC0Ec4E93095b804a4795bBe1e041497b92a': true, - '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D': true, // v2 router 02 -}; -// from the current swap inputs, compute the best trade and return it. -function useDerivedSwapInfo() { - var _a, _b; - var account = useActiveWeb3React().account; - var _c = useSwapState(), independentField = _c.independentField, typedValue = _c.typedValue, _d = Field.INPUT, inputCurrencyId = _c[_d].currencyId, _e = Field.OUTPUT, outputCurrencyId = _c[_e].currencyId, recipient = _c.recipient; - var inputCurrency = useCurrency(inputCurrencyId); - var outputCurrency = useCurrency(outputCurrencyId); - var recipientLookup = useENS(recipient !== null && recipient !== void 0 ? recipient : undefined); - var to = (_a = (recipient === null ? account : recipientLookup.address)) !== null && _a !== void 0 ? _a : null; - var relevantTokenBalances = useCurrencyBalances(account !== null && account !== void 0 ? account : undefined, React.useMemo(function () { return [inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : undefined, outputCurrency !== null && outputCurrency !== void 0 ? outputCurrency : undefined]; }, [inputCurrency, outputCurrency])); - var isExactIn = independentField === Field.INPUT; - var parsedAmount = React.useMemo(function () { var _a; return tryParseCurrencyAmount(typedValue, (_a = (isExactIn ? inputCurrency : outputCurrency)) !== null && _a !== void 0 ? _a : undefined); }, [inputCurrency, isExactIn, outputCurrency, typedValue]); - var trade = useBestTrade(isExactIn ? sdkCore.TradeType.EXACT_INPUT : sdkCore.TradeType.EXACT_OUTPUT, parsedAmount, (_b = (isExactIn ? outputCurrency : inputCurrency)) !== null && _b !== void 0 ? _b : undefined); - var currencyBalances = React.useMemo(function () { - var _a; - return (_a = {}, - _a[Field.INPUT] = relevantTokenBalances[0], - _a[Field.OUTPUT] = relevantTokenBalances[1], - _a); - }, [relevantTokenBalances]); - var currencies = React.useMemo(function () { - var _a; - return (_a = {}, - _a[Field.INPUT] = inputCurrency, - _a[Field.OUTPUT] = outputCurrency, - _a); - }, [inputCurrency, outputCurrency]); - // allowed slippage is either auto slippage, or custom user defined slippage if auto slippage disabled - var autoSlippageTolerance = useAutoSlippageTolerance(trade.trade); - var allowedSlippage = useUserSlippageToleranceWithDefault(autoSlippageTolerance); - var inputError = React.useMemo(function () { - var _a; - var inputError; - if (!account) { - inputError = jsxRuntime.jsx(macro.Trans, { children: "Connect Wallet" }, void 0); - } - if (!currencies[Field.INPUT] || !currencies[Field.OUTPUT]) { - inputError = inputError !== null && inputError !== void 0 ? inputError : jsxRuntime.jsx(macro.Trans, { children: "Select a token" }, void 0); - } - if (!parsedAmount) { - inputError = inputError !== null && inputError !== void 0 ? inputError : jsxRuntime.jsx(macro.Trans, { children: "Enter an amount" }, void 0); - } - var formattedTo = isAddress(to); - if (!to || !formattedTo) { - inputError = inputError !== null && inputError !== void 0 ? inputError : jsxRuntime.jsx(macro.Trans, { children: "Enter a recipient" }, void 0); - } - else { - if (BAD_RECIPIENT_ADDRESSES[formattedTo]) { - inputError = inputError !== null && inputError !== void 0 ? inputError : jsxRuntime.jsx(macro.Trans, { children: "Invalid recipient" }, void 0); - } - } - // compare input balance to max input based on version - var _b = __read([currencyBalances[Field.INPUT], (_a = trade.trade) === null || _a === void 0 ? void 0 : _a.maximumAmountIn(allowedSlippage)], 2), balanceIn = _b[0], amountIn = _b[1]; - if (balanceIn && amountIn && balanceIn.lessThan(amountIn)) { - inputError = jsxRuntime.jsxs(macro.Trans, { children: ["Insufficient ", amountIn.currency.symbol, " balance"] }, void 0); - } - return inputError; - }, [account, allowedSlippage, currencies, currencyBalances, parsedAmount, to, trade.trade]); - return React.useMemo(function () { return ({ - currencies: currencies, - currencyBalances: currencyBalances, - parsedAmount: parsedAmount, - inputError: inputError, - trade: trade, - allowedSlippage: allowedSlippage, - }); }, [allowedSlippage, currencies, currencyBalances, inputError, parsedAmount, trade]); -} -function parseCurrencyFromURLParameter(urlParam) { - if (typeof urlParam === 'string') { - var valid = isAddress(urlParam); - if (valid) - return valid; - if (urlParam.toUpperCase() === 'ETH') - return 'ETH'; - } - return ''; -} -function parseTokenAmountURLParameter(urlParam) { - return typeof urlParam === 'string' && !isNaN(parseFloat(urlParam)) ? urlParam : ''; -} -function parseIndependentFieldURLParameter(urlParam) { - return typeof urlParam === 'string' && urlParam.toLowerCase() === 'output' ? Field.OUTPUT : Field.INPUT; -} -var ENS_NAME_REGEX = /^[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)?$/; -var ADDRESS_REGEX = /^0x[a-fA-F0-9]{40}$/; -function validatedRecipient(recipient) { - if (typeof recipient !== 'string') - return null; - var address = isAddress(recipient); - if (address) - return address; - if (ENS_NAME_REGEX.test(recipient)) - return recipient; - if (ADDRESS_REGEX.test(recipient)) - return recipient; - return null; -} -function queryParametersToSwapState(parsedQs) { - var _a; - var inputCurrency = parseCurrencyFromURLParameter(parsedQs.inputCurrency); - var outputCurrency = parseCurrencyFromURLParameter(parsedQs.outputCurrency); - if (inputCurrency === '' && outputCurrency === '') { - // default to ETH input - inputCurrency = 'ETH'; - } - else if (inputCurrency === outputCurrency) { - // clear output if identical - outputCurrency = ''; - } - var recipient = validatedRecipient(parsedQs.recipient); - return _a = {}, - _a[Field.INPUT] = { - currencyId: inputCurrency === '' ? null : inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : null, - }, - _a[Field.OUTPUT] = { - currencyId: outputCurrency === '' ? null : outputCurrency !== null && outputCurrency !== void 0 ? outputCurrency : null, - }, - _a.typedValue = parseTokenAmountURLParameter(parsedQs.exactAmount), - _a.independentField = parseIndependentFieldURLParameter(parsedQs.exactField), - _a.recipient = recipient, - _a; -} -// updates the swap state to use the defaults for a given network -function useDefaultsFromURLSearch() { - var chainId = useActiveWeb3React().chainId; - var dispatch = useAppDispatch(); - var parsedQs = useParsedQueryString(); - var _a = __read(React.useState(), 2), result = _a[0], setResult = _a[1]; - React.useEffect(function () { - var _a, _b; - if (!chainId) - return; - var parsed = queryParametersToSwapState(parsedQs); - var inputCurrencyId = (_a = parsed[Field.INPUT].currencyId) !== null && _a !== void 0 ? _a : undefined; - var outputCurrencyId = (_b = parsed[Field.OUTPUT].currencyId) !== null && _b !== void 0 ? _b : undefined; - dispatch(replaceSwapState({ - typedValue: parsed.typedValue, - field: parsed.independentField, - inputCurrencyId: inputCurrencyId, - outputCurrencyId: outputCurrencyId, - recipient: parsed.recipient, - })); - setResult({ inputCurrencyId: inputCurrencyId, outputCurrencyId: outputCurrencyId }); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [dispatch, chainId]); - return result; -} - -var initialState$2 = queryParametersToSwapState(parsedQueryString()); -var swap = toolkit.createReducer(initialState$2, function (builder) { - return builder - .addCase(replaceSwapState, function (state, _a) { - var _b; - var _c = _a.payload, typedValue = _c.typedValue, recipient = _c.recipient, field = _c.field, inputCurrencyId = _c.inputCurrencyId, outputCurrencyId = _c.outputCurrencyId; - return _b = {}, - _b[Field.INPUT] = { - currencyId: inputCurrencyId !== null && inputCurrencyId !== void 0 ? inputCurrencyId : null, - }, - _b[Field.OUTPUT] = { - currencyId: outputCurrencyId !== null && outputCurrencyId !== void 0 ? outputCurrencyId : null, - }, - _b.independentField = field, - _b.typedValue = typedValue, - _b.recipient = recipient, - _b; - }) - .addCase(selectCurrency, function (state, _a) { - var _b, _c; - var _d = _a.payload, currencyId = _d.currencyId, field = _d.field; - var otherField = field === Field.INPUT ? Field.OUTPUT : Field.INPUT; - if (currencyId === state[otherField].currencyId) { - // the case where we have to swap the order - return __assign(__assign({}, state), (_b = { independentField: state.independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT }, _b[field] = { currencyId: currencyId }, _b[otherField] = { currencyId: state[field].currencyId }, _b)); - } - else { - // the normal case - return __assign(__assign({}, state), (_c = {}, _c[field] = { currencyId: currencyId }, _c)); - } - }) - .addCase(switchCurrencies, function (state) { - var _a; - return __assign(__assign({}, state), (_a = { independentField: state.independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT }, _a[Field.INPUT] = { currencyId: state[Field.OUTPUT].currencyId }, _a[Field.OUTPUT] = { currencyId: state[Field.INPUT].currencyId }, _a)); - }) - .addCase(typeInput, function (state, _a) { - var _b = _a.payload, field = _b.field, typedValue = _b.typedValue; - return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); - }) - .addCase(setRecipient, function (state, _a) { - var recipient = _a.payload.recipient; - state.recipient = recipient; - }); -}); - -var now = function () { return new Date().getTime(); }; -var initialState$1 = {}; -var transactions = toolkit.createReducer(initialState$1, function (builder) { - return builder - .addCase(updateVersion, function (transactions) { - // in case there are any transactions in the store with the old format, remove them - Object.keys(transactions).forEach(function (chainId) { - var chainTransactions = transactions[chainId]; - Object.keys(chainTransactions).forEach(function (hash) { - if (!('info' in chainTransactions[hash])) { - // clear old transactions that don't have the right format - delete chainTransactions[hash]; - } - }); - }); - }) - .addCase(addTransaction, function (transactions, _a) { - var _b, _c; - var _d = _a.payload, chainId = _d.chainId, from = _d.from, hash = _d.hash, info = _d.info; - if ((_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash]) { - throw Error('Attempted to add existing transaction.'); - } - var txs = (_c = transactions[chainId]) !== null && _c !== void 0 ? _c : {}; - txs[hash] = { hash: hash, info: info, from: from, addedTime: now() }; - transactions[chainId] = txs; - }) - .addCase(clearAllTransactions, function (transactions, _a) { - var chainId = _a.payload.chainId; - if (!transactions[chainId]) - return; - transactions[chainId] = {}; - }) - .addCase(checkedTransaction, function (transactions, _a) { - var _b; - var _c = _a.payload, chainId = _c.chainId, hash = _c.hash, blockNumber = _c.blockNumber; - var tx = (_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash]; - if (!tx) { - return; - } - if (!tx.lastCheckedBlockNumber) { - tx.lastCheckedBlockNumber = blockNumber; - } - else { - tx.lastCheckedBlockNumber = Math.max(blockNumber, tx.lastCheckedBlockNumber); - } - }) - .addCase(finalizeTransaction, function (transactions, _a) { - var _b; - var _c = _a.payload, hash = _c.hash, chainId = _c.chainId, receipt = _c.receipt; - var tx = (_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash]; - if (!tx) { - return; - } - tx.receipt = receipt; - tx.confirmedTime = now(); - }); -}); - -var currentTimestamp = function () { return new Date().getTime(); }; -function pairKey(token0Address, token1Address) { - return token0Address + ";" + token1Address; -} -var initialState = { - matchesDarkMode: false, - userDarkMode: null, - userExpertMode: false, - userLocale: null, - userClientSideRouter: false, - userHideClosedPositions: false, - userSlippageTolerance: 'auto', - userSlippageToleranceHasBeenMigratedToAuto: true, - userDeadline: DEFAULT_DEADLINE_FROM_NOW, - tokens: {}, - pairs: {}, - timestamp: currentTimestamp(), - URLWarningVisible: true, - showSurveyPopup: undefined, -}; -var user = toolkit.createReducer(initialState, function (builder) { - return builder - .addCase(updateVersion, function (state) { - // slippage isnt being tracked in local storage, reset to default - // noinspection SuspiciousTypeOfGuard - if (typeof state.userSlippageTolerance !== 'number' || - !Number.isInteger(state.userSlippageTolerance) || - state.userSlippageTolerance < 0 || - state.userSlippageTolerance > 5000) { - state.userSlippageTolerance = 'auto'; - } - else { - if (!state.userSlippageToleranceHasBeenMigratedToAuto && - [10, 50, 100].indexOf(state.userSlippageTolerance) !== -1) { - state.userSlippageTolerance = 'auto'; - state.userSlippageToleranceHasBeenMigratedToAuto = true; - } - } - // deadline isnt being tracked in local storage, reset to default - // noinspection SuspiciousTypeOfGuard - if (typeof state.userDeadline !== 'number' || - !Number.isInteger(state.userDeadline) || - state.userDeadline < 60 || - state.userDeadline > 180 * 60) { - state.userDeadline = DEFAULT_DEADLINE_FROM_NOW; - } - state.lastUpdateVersionTimestamp = currentTimestamp(); - }) - .addCase(updateUserDarkMode, function (state, action) { - state.userDarkMode = action.payload.userDarkMode; - state.timestamp = currentTimestamp(); - }) - .addCase(updateMatchesDarkMode, function (state, action) { - state.matchesDarkMode = action.payload.matchesDarkMode; - state.timestamp = currentTimestamp(); - }) - .addCase(updateUserExpertMode, function (state, action) { - state.userExpertMode = action.payload.userExpertMode; - state.timestamp = currentTimestamp(); - }) - .addCase(updateUserLocale, function (state, action) { - state.userLocale = action.payload.userLocale; - state.timestamp = currentTimestamp(); - }) - .addCase(updateUserSlippageTolerance, function (state, action) { - state.userSlippageTolerance = action.payload.userSlippageTolerance; - state.timestamp = currentTimestamp(); - }) - .addCase(updateUserDeadline, function (state, action) { - state.userDeadline = action.payload.userDeadline; - state.timestamp = currentTimestamp(); - }) - .addCase(updateUserClientSideRouter, function (state, action) { - state.userClientSideRouter = action.payload.userClientSideRouter; - }) - .addCase(updateHideClosedPositions, function (state, action) { - state.userHideClosedPositions = action.payload.userHideClosedPositions; - }) - .addCase(updateShowSurveyPopup, function (state, action) { - state.showSurveyPopup = action.payload.showSurveyPopup; - }) - .addCase(addSerializedToken, function (state, _a) { - var serializedToken = _a.payload.serializedToken; - if (!state.tokens) { - state.tokens = {}; - } - state.tokens[serializedToken.chainId] = state.tokens[serializedToken.chainId] || {}; - state.tokens[serializedToken.chainId][serializedToken.address] = serializedToken; - state.timestamp = currentTimestamp(); - }) - .addCase(removeSerializedToken, function (state, _a) { - var _b = _a.payload, address = _b.address, chainId = _b.chainId; - if (!state.tokens) { - state.tokens = {}; - } - state.tokens[chainId] = state.tokens[chainId] || {}; - delete state.tokens[chainId][address]; - state.timestamp = currentTimestamp(); - }) - .addCase(addSerializedPair, function (state, _a) { - var serializedPair = _a.payload.serializedPair; - if (serializedPair.token0.chainId === serializedPair.token1.chainId && - serializedPair.token0.address !== serializedPair.token1.address) { - var chainId = serializedPair.token0.chainId; - state.pairs[chainId] = state.pairs[chainId] || {}; - state.pairs[chainId][pairKey(serializedPair.token0.address, serializedPair.token1.address)] = serializedPair; - } - state.timestamp = currentTimestamp(); - }) - .addCase(removeSerializedPair, function (state, _a) { - var _b = _a.payload, chainId = _b.chainId, tokenAAddress = _b.tokenAAddress, tokenBAddress = _b.tokenBAddress; - if (state.pairs[chainId]) { - // just delete both keys if either exists - delete state.pairs[chainId][pairKey(tokenAAddress, tokenBAddress)]; - delete state.pairs[chainId][pairKey(tokenBAddress, tokenAAddress)]; - } - state.timestamp = currentTimestamp(); - }); -}); - -var _a$2; -var PERSISTED_KEYS = ['user', 'transactions', 'lists']; -var store = toolkit.configureStore({ - reducer: (_a$2 = { - application: application, - user: user, - transactions: transactions, - swap: swap, - mint: mint, - mintV3: mintV3, - burn: burn, - burnV3: burnV3, - multicall: multicall.reducer, - lists: lists, - logs: logs - }, - _a$2[api.reducerPath] = api.reducer, - _a$2[routingApi.reducerPath] = routingApi.reducer, - _a$2), - middleware: function (getDefaultMiddleware) { - return getDefaultMiddleware({ thunk: true }) - .concat(api.middleware) - .concat(routingApi.middleware) - .concat(reduxLocalstorageSimple.save({ states: PERSISTED_KEYS, debounce: 1000 })); - }, - preloadedState: reduxLocalstorageSimple.load({ states: PERSISTED_KEYS, disableWarnings: process.env.NODE_ENV === 'test' }), -}); -store.dispatch(updateVersion()); -react.setupListeners(store.dispatch); - -var _a$1, _b$1, _c$1; -/** - * Given a locale string (e.g. from user agent), return the best match for corresponding SupportedLocale - * @param maybeSupportedLocale the fuzzy locale identifier - */ -function parseLocale(maybeSupportedLocale) { - if (typeof maybeSupportedLocale !== 'string') - return undefined; - var lowerMaybeSupportedLocale = maybeSupportedLocale.toLowerCase(); - return SUPPORTED_LOCALES.find(function (locale) { return locale.toLowerCase() === lowerMaybeSupportedLocale || locale.split('-')[0] === lowerMaybeSupportedLocale; }); -} -/** - * Returns the supported locale read from the user agent (navigator) - */ -function navigatorLocale() { - var _a; - if (!navigator.language) - return undefined; - var _b = __read(navigator.language.split('-'), 2), language = _b[0], region = _b[1]; - if (region) { - return (_a = parseLocale(language + "-" + region.toUpperCase())) !== null && _a !== void 0 ? _a : parseLocale(language); - } - return parseLocale(language); -} -function storeLocale() { - var _a; - return (_a = store.getState().user.userLocale) !== null && _a !== void 0 ? _a : undefined; -} -(_c$1 = (_b$1 = (_a$1 = parseLocale(parsedQueryString().lng)) !== null && _a$1 !== void 0 ? _a$1 : storeLocale()) !== null && _b$1 !== void 0 ? _b$1 : navigatorLocale()) !== null && _c$1 !== void 0 ? _c$1 : DEFAULT_LOCALE; -function useUrlLocale() { - var parsed = useParsedQueryString(); - return parseLocale(parsed.lng); -} -/** - * Returns the currently active locale, from a combination of user agent, query string, and user settings stored in redux - * Stores the query string locale in redux (if set) to persist across sessions - */ -function useActiveLocale() { - var urlLocale = useUrlLocale(); - var userLocale = useUserLocale(); - return React.useMemo(function () { var _a, _b; return (_b = (_a = urlLocale !== null && urlLocale !== void 0 ? urlLocale : userLocale) !== null && _a !== void 0 ? _a : navigatorLocale()) !== null && _b !== void 0 ? _b : DEFAULT_LOCALE; }, [urlLocale, userLocale]); -} - -function useLocationLinkProps(locale) { - var location = reactRouterDom.useLocation(); - var qs$1 = useParsedQueryString(); - var activeLocale = useActiveLocale(); - return React.useMemo(function () { - return !locale - ? {} - : { - to: __assign(__assign({}, location), { search: qs.stringify(__assign(__assign({}, qs$1), { lng: locale })) }), - onClick: function () { - ReactGA__default["default"].event({ - category: 'Localization', - action: 'Switch Locale', - label: activeLocale + " -> " + locale, - }); - }, - }; - }, [location, qs$1, activeLocale, locale]); -} - -var Container = styled__default["default"](ThemedText.Small)(templateObject_1$3 || (templateObject_1$3 = __makeTemplateObject(["\n opacity: 0.6;\n :hover {\n opacity: 1;\n }\n margin-top: 1rem !important;\n"], ["\n opacity: 0.6;\n :hover {\n opacity: 1;\n }\n margin-top: 1rem !important;\n"]))); -var useTargetLocale = function (activeLocale) { - var browserLocale = React.useMemo(function () { return navigatorLocale(); }, []); - if (browserLocale && (browserLocale !== DEFAULT_LOCALE || activeLocale !== DEFAULT_LOCALE)) { - if (activeLocale === browserLocale) { - return DEFAULT_LOCALE; - } - else { - return browserLocale; - } - } - return null; -}; -function SwitchLocaleLink() { - var activeLocale = useActiveLocale(); - var targetLocale = useTargetLocale(activeLocale); - var _a = useLocationLinkProps(targetLocale), to = _a.to, onClick = _a.onClick; - if (!targetLocale || !to) - return null; - return (jsxRuntime.jsx(Container, { children: jsxRuntime.jsxs(macro.Trans, { children: ["Uniswap available in:", ' ', jsxRuntime.jsx(StyledInternalLink, __assign({ onClick: onClick, to: to }, { children: LOCALE_LABEL[targetLocale] }), void 0)] }, void 0) }, void 0)); -} -var templateObject_1$3; - -function TokenWarningModal(_a) { - var isOpen = _a.isOpen, tokens = _a.tokens, onConfirm = _a.onConfirm, onDismiss = _a.onDismiss; - return (jsxRuntime.jsx(Modal, __assign({ isOpen: isOpen, onDismiss: onDismiss, maxHeight: 100 }, { children: jsxRuntime.jsx(ImportToken, { tokens: tokens, handleCurrencySelect: onConfirm }, void 0) }), void 0)); -} - -function useTokenAllowance(token, owner, spender) { - var contract = useTokenContract(token === null || token === void 0 ? void 0 : token.address, false); - var inputs = React.useMemo(function () { return [owner, spender]; }, [owner, spender]); - var allowance = useSingleCallResult(contract, 'allowance', inputs).result; - return React.useMemo(function () { return (token && allowance ? sdkCore.CurrencyAmount.fromRawAmount(token, allowance.toString()) : undefined); }, [token, allowance]); -} - -var ApprovalState; -(function (ApprovalState) { - ApprovalState["UNKNOWN"] = "UNKNOWN"; - ApprovalState["NOT_APPROVED"] = "NOT_APPROVED"; - ApprovalState["PENDING"] = "PENDING"; - ApprovalState["APPROVED"] = "APPROVED"; -})(ApprovalState || (ApprovalState = {})); -function useApprovalStateForSpender(amountToApprove, spender, useIsPendingApproval) { - var _a; - var account = useActiveWeb3React().account; - var token = ((_a = amountToApprove === null || amountToApprove === void 0 ? void 0 : amountToApprove.currency) === null || _a === void 0 ? void 0 : _a.isToken) ? amountToApprove.currency : undefined; - var currentAllowance = useTokenAllowance(token, account !== null && account !== void 0 ? account : undefined, spender); - var pendingApproval = useIsPendingApproval(token, spender); - return React.useMemo(function () { - if (!amountToApprove || !spender) - return ApprovalState.UNKNOWN; - if (amountToApprove.currency.isNative) - return ApprovalState.APPROVED; - // we might not have enough data to know whether or not we need to approve - if (!currentAllowance) - return ApprovalState.UNKNOWN; - // amountToApprove will be defined if currentAllowance is - return currentAllowance.lessThan(amountToApprove) - ? pendingApproval - ? ApprovalState.PENDING - : ApprovalState.NOT_APPROVED - : ApprovalState.APPROVED; - }, [amountToApprove, currentAllowance, pendingApproval, spender]); -} -function useApproval(amountToApprove, spender, useIsPendingApproval) { - var _this = this; - var _a; - var chainId = useActiveWeb3React().chainId; - var token = ((_a = amountToApprove === null || amountToApprove === void 0 ? void 0 : amountToApprove.currency) === null || _a === void 0 ? void 0 : _a.isToken) ? amountToApprove.currency : undefined; - // check the current approval status - var approvalState = useApprovalStateForSpender(amountToApprove, spender, useIsPendingApproval); - var tokenContract = useTokenContract(token === null || token === void 0 ? void 0 : token.address); - var approve = React.useCallback(function () { return __awaiter(_this, void 0, void 0, function () { - function logFailure(error) { - console.warn(((token === null || token === void 0 ? void 0 : token.symbol) || 'Token') + " approval failed:", error); - return; - } - var useExact, estimatedGas; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - // Bail early if there is an issue. - if (approvalState !== ApprovalState.NOT_APPROVED) { - return [2 /*return*/, logFailure('approve was called unnecessarily')]; - } - else if (!chainId) { - return [2 /*return*/, logFailure('no chainId')]; - } - else if (!token) { - return [2 /*return*/, logFailure('no token')]; - } - else if (!tokenContract) { - return [2 /*return*/, logFailure('tokenContract is null')]; - } - else if (!amountToApprove) { - return [2 /*return*/, logFailure('missing amount to approve')]; - } - else if (!spender) { - return [2 /*return*/, logFailure('no spender')]; - } - useExact = false; - return [4 /*yield*/, tokenContract.estimateGas.approve(spender, constants.MaxUint256).catch(function () { - // general fallback for tokens which restrict approval amounts - useExact = true; - return tokenContract.estimateGas.approve(spender, amountToApprove.quotient.toString()); - })]; - case 1: - estimatedGas = _a.sent(); - return [2 /*return*/, tokenContract - .approve(spender, useExact ? amountToApprove.quotient.toString() : constants.MaxUint256, { - gasLimit: calculateGasMargin(estimatedGas), - }) - .then(function (response) { return ({ - response: response, - tokenAddress: token.address, - spenderAddress: spender, - }); }) - .catch(function (error) { - logFailure(error); - throw error; - })]; - } - }); - }); }, [approvalState, token, tokenContract, amountToApprove, spender, chainId]); - return [approvalState, approve]; -} - -var SwapRouterVersion; -(function (SwapRouterVersion) { - SwapRouterVersion[SwapRouterVersion["V2"] = 0] = "V2"; - SwapRouterVersion[SwapRouterVersion["V3"] = 1] = "V3"; - SwapRouterVersion[SwapRouterVersion["V2V3"] = 2] = "V2V3"; -})(SwapRouterVersion || (SwapRouterVersion = {})); -/** - * Returns the swap router that will result in the least amount of txs (less gas) for a given swap. - * Heuristic: - * - if trade contains a single v2-only trade & V2 SwapRouter is approved: use V2 SwapRouter - * - if trade contains only v3 & V3 SwapRouter is approved: use V3 SwapRouter - * - else: approve and use V2+V3 SwapRouter - */ -function getTxOptimizedSwapRouter(_a) { - var onlyV2Routes = _a.onlyV2Routes, onlyV3Routes = _a.onlyV3Routes, tradeHasSplits = _a.tradeHasSplits, approvalStates = _a.approvalStates; - if ([approvalStates.v2, approvalStates.v3, approvalStates.v2V3].includes(ApprovalState.PENDING)) - return undefined; - if (approvalStates.v2V3 === ApprovalState.APPROVED) - return SwapRouterVersion.V2V3; - if (approvalStates.v2 === ApprovalState.APPROVED && onlyV2Routes && !tradeHasSplits) - return SwapRouterVersion.V2; - if (approvalStates.v3 === ApprovalState.APPROVED && onlyV3Routes) - return SwapRouterVersion.V3; - return SwapRouterVersion.V2V3; -} - -/** Returns approval state for all known swap routers */ -function useSwapApprovalStates(trade, allowedSlippage, useIsPendingApproval) { - var chainId = useActiveWeb3React().chainId; - var amountToApprove = React.useMemo(function () { return (trade && trade.inputAmount.currency.isToken ? trade.maximumAmountIn(allowedSlippage) : undefined); }, [trade, allowedSlippage]); - var v2RouterAddress = chainId ? V2_ROUTER_ADDRESS[chainId] : undefined; - var v3RouterAddress = chainId ? V3_ROUTER_ADDRESS[chainId] : undefined; - var swapRouterAddress = chainId ? SWAP_ROUTER_ADDRESSES[chainId] : undefined; - var v2 = useApprovalStateForSpender(amountToApprove, v2RouterAddress, useIsPendingApproval); - var v3 = useApprovalStateForSpender(amountToApprove, v3RouterAddress, useIsPendingApproval); - var v2V3 = useApprovalStateForSpender(amountToApprove, swapRouterAddress, useIsPendingApproval); - return React.useMemo(function () { return ({ v2: v2, v3: v3, v2V3: v2V3 }); }, [v2, v2V3, v3]); -} -function useSwapRouterAddress(trade) { - var chainId = useActiveWeb3React().chainId; - return React.useMemo(function () { - return chainId - ? trade instanceof v2Sdk.Trade - ? V2_ROUTER_ADDRESS[chainId] - : trade instanceof v3Sdk.Trade - ? V3_ROUTER_ADDRESS[chainId] - : SWAP_ROUTER_ADDRESSES[chainId] - : undefined; - }, [chainId, trade]); -} -// wraps useApproveCallback in the context of a swap -function useSwapApproval(trade, allowedSlippage, useIsPendingApproval) { - var amountToApprove = React.useMemo(function () { return (trade && trade.inputAmount.currency.isToken ? trade.maximumAmountIn(allowedSlippage) : undefined); }, [trade, allowedSlippage]); - var spender = useSwapRouterAddress(trade); - var approval = useApproval(amountToApprove, spender, useIsPendingApproval); - if (trade instanceof v2Sdk.Trade || trade instanceof v3Sdk.Trade) { - var approvalState = approval[0]; - invariant__default["default"](approvalState === ApprovalState.APPROVED, 'Trying to approve legacy router'); - } - return approval; -} -function useSwapApprovalOptimizedTrade(trade, allowedSlippage, useIsPendingApproval) { - var _a; - var onlyV2Routes = trade === null || trade === void 0 ? void 0 : trade.routes.every(function (route) { return route.protocol === routerSdk.Protocol.V2; }); - var onlyV3Routes = trade === null || trade === void 0 ? void 0 : trade.routes.every(function (route) { return route.protocol === routerSdk.Protocol.V3; }); - var tradeHasSplits = ((_a = trade === null || trade === void 0 ? void 0 : trade.routes.length) !== null && _a !== void 0 ? _a : 0) > 1; - var approvalStates = useSwapApprovalStates(trade, allowedSlippage, useIsPendingApproval); - var optimizedSwapRouter = React.useMemo(function () { return getTxOptimizedSwapRouter({ onlyV2Routes: onlyV2Routes, onlyV3Routes: onlyV3Routes, tradeHasSplits: tradeHasSplits, approvalStates: approvalStates }); }, [approvalStates, tradeHasSplits, onlyV2Routes, onlyV3Routes]); - return React.useMemo(function () { - if (!trade) - return undefined; - try { - switch (optimizedSwapRouter) { - case SwapRouterVersion.V2V3: - return trade; - case SwapRouterVersion.V2: - var pairs = trade.swaps[0].route.pools.filter(function (pool) { return pool instanceof v2Sdk.Pair; }); - var v2Route = new v2Sdk.Route(pairs, trade.inputAmount.currency, trade.outputAmount.currency); - return new v2Sdk.Trade(v2Route, trade.inputAmount, trade.tradeType); - case SwapRouterVersion.V3: - return v3Sdk.Trade.createUncheckedTradeWithMultipleRoutes({ - routes: trade.swaps.map(function (_a) { - var route = _a.route, inputAmount = _a.inputAmount, outputAmount = _a.outputAmount; - return ({ - route: new v3Sdk.Route(route.pools.filter(function (p) { return p instanceof v3Sdk.Pool; }), inputAmount.currency, outputAmount.currency), - inputAmount: inputAmount, - outputAmount: outputAmount, - }); - }), - tradeType: trade.tradeType, - }); - default: - return undefined; - } - } - catch (e) { - // TODO(#2989): remove try-catch - console.debug(e); - return undefined; - } - }, [trade, optimizedSwapRouter]); -} - -function useGetAndTrackApproval(getApproval) { - var addTransaction = useTransactionAdder(); - return React.useCallback(function () { - return getApproval().then(function (pending) { - if (pending) { - var response = pending.response, tokenAddress = pending.tokenAddress, spender = pending.spenderAddress; - addTransaction(response, { type: TransactionType.APPROVAL, tokenAddress: tokenAddress, spender: spender }); - } - }); - }, [addTransaction, getApproval]); -} -function useApprovalOptimizedTrade(trade, allowedSlippage) { - return useSwapApprovalOptimizedTrade(trade, allowedSlippage, useHasPendingApproval); -} -function useApproveCallbackFromTrade(trade, allowedSlippage) { - var _a = __read(useSwapApproval(trade, allowedSlippage, useHasPendingApproval), 2), approval = _a[0], getApproval = _a[1]; - return [approval, useGetAndTrackApproval(getApproval)]; -} - -function useIsArgentWallet() { - var _a, _b; - var account = useActiveWeb3React().account; - var argentWalletDetector = useArgentWalletDetectorContract(); - var inputs = React.useMemo(function () { return [account !== null && account !== void 0 ? account : undefined]; }, [account]); - var call = useSingleCallResult(argentWalletDetector, 'isArgentWallet', inputs, reduxMulticall.NEVER_RELOAD); - return (_b = (_a = call === null || call === void 0 ? void 0 : call.result) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : false; -} - -// combines the block timestamp with the user setting to give the deadline that should be used for any submitted transaction -function useTransactionDeadline() { - var chainId = useActiveWeb3React().chainId; - var ttl = useAppSelector(function (state) { return state.user.userDeadline; }); - var blockTimestamp = useCurrentBlockTimestamp(); - return React.useMemo(function () { - if (blockTimestamp && chainId && L2_CHAIN_IDS.includes(chainId)) - return blockTimestamp.add(L2_DEADLINE_FROM_NOW); - if (blockTimestamp && ttl) - return blockTimestamp.add(ttl); - return undefined; - }, [blockTimestamp, chainId, ttl]); -} - -var _a, _b, _c, _d, _e; -var PermitType; -(function (PermitType) { - PermitType[PermitType["AMOUNT"] = 1] = "AMOUNT"; - PermitType[PermitType["ALLOWED"] = 2] = "ALLOWED"; -})(PermitType || (PermitType = {})); -// 20 minutes to submit after signing -var PERMIT_VALIDITY_BUFFER = 20 * 60; -// todo: read this information from extensions on token lists or elsewhere (permit registry?) -var PERMITTABLE_TOKENS = { - 1: (_a = {}, - _a[USDC.address] = { type: PermitType.AMOUNT, name: 'USD Coin', version: '2' }, - _a[DAI.address] = { type: PermitType.ALLOWED, name: 'Dai Stablecoin', version: '1' }, - _a[UNI[1].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }, - _a), - 4: (_b = { - '0xc7AD46e0b8a400Bb3C915120d284AafbA8fc4735': { type: PermitType.ALLOWED, name: 'Dai Stablecoin', version: '1' } - }, - _b[UNI[4].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }, - _b), - 3: (_c = {}, - _c[UNI[3].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }, - _c['0x07865c6E87B9F70255377e024ace6630C1Eaa37F'] = { type: PermitType.AMOUNT, name: 'USD Coin', version: '2' }, - _c), - 5: (_d = {}, - _d[UNI[5].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }, - _d), - 42: (_e = {}, - _e[UNI[42].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }, - _e), -}; -var UseERC20PermitState; -(function (UseERC20PermitState) { - // returned for any reason, e.g. it is an argent wallet, or the currency does not support it - UseERC20PermitState[UseERC20PermitState["NOT_APPLICABLE"] = 0] = "NOT_APPLICABLE"; - UseERC20PermitState[UseERC20PermitState["LOADING"] = 1] = "LOADING"; - UseERC20PermitState[UseERC20PermitState["NOT_SIGNED"] = 2] = "NOT_SIGNED"; - UseERC20PermitState[UseERC20PermitState["SIGNED"] = 3] = "SIGNED"; -})(UseERC20PermitState || (UseERC20PermitState = {})); -var EIP712_DOMAIN_TYPE = [ - { name: 'name', type: 'string' }, - { name: 'version', type: 'string' }, - { name: 'chainId', type: 'uint256' }, - { name: 'verifyingContract', type: 'address' }, -]; -var EIP712_DOMAIN_TYPE_NO_VERSION = [ - { name: 'name', type: 'string' }, - { name: 'chainId', type: 'uint256' }, - { name: 'verifyingContract', type: 'address' }, -]; -var EIP2612_TYPE = [ - { name: 'owner', type: 'address' }, - { name: 'spender', type: 'address' }, - { name: 'value', type: 'uint256' }, - { name: 'nonce', type: 'uint256' }, - { name: 'deadline', type: 'uint256' }, -]; -var PERMIT_ALLOWED_TYPE = [ - { name: 'holder', type: 'address' }, - { name: 'spender', type: 'address' }, - { name: 'nonce', type: 'uint256' }, - { name: 'expiry', type: 'uint256' }, - { name: 'allowed', type: 'bool' }, -]; -function useERC20Permit(currencyAmount, spender, overridePermitInfo) { - var _a, _b; - var _c = useActiveWeb3React(), account = _c.account, chainId = _c.chainId, library = _c.library; - var transactionDeadline = useTransactionDeadline(); - var tokenAddress = ((_a = currencyAmount === null || currencyAmount === void 0 ? void 0 : currencyAmount.currency) === null || _a === void 0 ? void 0 : _a.isToken) ? currencyAmount.currency.address : undefined; - var eip2612Contract = useEIP2612Contract(tokenAddress); - var isArgentWallet = useIsArgentWallet(); - var nonceInputs = React.useMemo(function () { return [account !== null && account !== void 0 ? account : undefined]; }, [account]); - var tokenNonceState = useSingleCallResult(eip2612Contract, 'nonces', nonceInputs); - var permitInfo = overridePermitInfo !== null && overridePermitInfo !== void 0 ? overridePermitInfo : (chainId && tokenAddress ? (_b = PERMITTABLE_TOKENS[chainId]) === null || _b === void 0 ? void 0 : _b[tokenAddress] : undefined); - var _d = __read(React.useState(null), 2), signatureData = _d[0], setSignatureData = _d[1]; - return React.useMemo(function () { - var _a, _b; - if (isArgentWallet || - !currencyAmount || - !eip2612Contract || - !account || - !chainId || - !transactionDeadline || - !library || - !tokenNonceState.valid || - !tokenAddress || - !spender || - !permitInfo) { - return { - state: UseERC20PermitState.NOT_APPLICABLE, - signatureData: null, - gatherPermitSignature: null, - }; - } - var nonceNumber = (_b = (_a = tokenNonceState.result) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.toNumber(); - if (tokenNonceState.loading || typeof nonceNumber !== 'number') { - return { - state: UseERC20PermitState.LOADING, - signatureData: null, - gatherPermitSignature: null, - }; - } - var isSignatureDataValid = signatureData && - signatureData.owner === account && - signatureData.deadline >= transactionDeadline.toNumber() && - signatureData.tokenAddress === tokenAddress && - signatureData.nonce === nonceNumber && - signatureData.spender === spender && - ('allowed' in signatureData || JSBI__default["default"].equal(JSBI__default["default"].BigInt(signatureData.amount), currencyAmount.quotient)); - return { - state: isSignatureDataValid ? UseERC20PermitState.SIGNED : UseERC20PermitState.NOT_SIGNED, - signatureData: isSignatureDataValid ? signatureData : null, - gatherPermitSignature: function gatherPermitSignature() { - return __awaiter(this, void 0, void 0, function () { - var allowed, signatureDeadline, value, message, domain, data; - return __generator(this, function (_a) { - allowed = permitInfo.type === PermitType.ALLOWED; - signatureDeadline = transactionDeadline.toNumber() + PERMIT_VALIDITY_BUFFER; - value = currencyAmount.quotient.toString(); - message = allowed - ? { - holder: account, - spender: spender, - allowed: allowed, - nonce: nonceNumber, - expiry: signatureDeadline, - } - : { - owner: account, - spender: spender, - value: value, - nonce: nonceNumber, - deadline: signatureDeadline, - }; - domain = permitInfo.version - ? { - name: permitInfo.name, - version: permitInfo.version, - verifyingContract: tokenAddress, - chainId: chainId, - } - : { - name: permitInfo.name, - verifyingContract: tokenAddress, - chainId: chainId, - }; - data = JSON.stringify({ - types: { - EIP712Domain: permitInfo.version ? EIP712_DOMAIN_TYPE : EIP712_DOMAIN_TYPE_NO_VERSION, - Permit: allowed ? PERMIT_ALLOWED_TYPE : EIP2612_TYPE, - }, - domain: domain, - primaryType: 'Permit', - message: message, - }); - return [2 /*return*/, library - .send('eth_signTypedData_v4', [account, data]) - .then(bytes.splitSignature) - .then(function (signature) { - setSignatureData(__assign(__assign({ v: signature.v, r: signature.r, s: signature.s, deadline: signatureDeadline }, (allowed ? { allowed: allowed } : { amount: value })), { nonce: nonceNumber, chainId: chainId, owner: account, spender: spender, tokenAddress: tokenAddress, permitType: permitInfo.type })); - })]; - }); - }); - }, - }; - }, [ - currencyAmount, - eip2612Contract, - account, - chainId, - isArgentWallet, - transactionDeadline, - library, - tokenNonceState.loading, - tokenNonceState.valid, - tokenNonceState.result, - tokenAddress, - spender, - permitInfo, - signatureData, - ]); -} -({ - version: '1', - name: 'Uniswap V2', - type: PermitType.AMOUNT, -}); -function useERC20PermitFromTrade(trade, allowedSlippage) { - var chainId = useActiveWeb3React().chainId; - var swapRouterAddress = chainId - ? // v2 router does not support - trade instanceof v2Sdk.Trade - ? undefined - : trade instanceof v3Sdk.Trade - ? V3_ROUTER_ADDRESS[chainId] - : SWAP_ROUTER_ADDRESSES[chainId] - : undefined; - var amountToApprove = React.useMemo(function () { return (trade ? trade.maximumAmountIn(allowedSlippage) : undefined); }, [trade, allowedSlippage]); - return useERC20Permit(amountToApprove, swapRouterAddress, null); -} - -/** - * Returns true if the input currency or output currency cannot be traded in the interface - * @param currencyIn the input currency to check - * @param currencyOut the output currency to check - */ -function useIsSwapUnsupported(currencyIn, currencyOut) { - var unsupportedTokens = useUnsupportedTokens(); - return React.useMemo(function () { - if (!unsupportedTokens) { - return false; - } - var currencyInUnsupported = Boolean((currencyIn === null || currencyIn === void 0 ? void 0 : currencyIn.isToken) && unsupportedTokens[currencyIn.address]); - var currencyOutUnsupported = Boolean((currencyOut === null || currencyOut === void 0 ? void 0 : currencyOut.isToken) && unsupportedTokens[currencyOut.address]); - return currencyInUnsupported || currencyOutUnsupported; - }, [currencyIn, currencyOut, unsupportedTokens]); -} - -var ERC20_INTERFACE = new abi$6.Interface([ - { - constant: false, - inputs: [ - { name: '_spender', type: 'address' }, - { name: '_value', type: 'uint256' }, - ], - name: 'approve', - outputs: [{ name: '', type: 'bool' }], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, -]); -function approveAmountCalldata(amount, spender) { - if (!amount.currency.isToken) - throw new Error('Must call with an amount of token'); - var approveData = ERC20_INTERFACE.encodeFunctionData('approve', [spender, v3Sdk.toHex(amount.quotient)]); - return { - to: amount.currency.address, - data: approveData, - value: '0x0', - }; +var _a$8 +// Stablecoin amounts used when calculating spot price for a given currency. +// The amount is large enough to filter low liquidity pairs. +var STABLECOIN_AMOUNT_OUT = + ((_a$8 = {}), + (_a$8[SupportedChainId.MAINNET] = sdkCore.CurrencyAmount.fromRawAmount(USDC, 100000000000)), + (_a$8[SupportedChainId.ARBITRUM_ONE] = sdkCore.CurrencyAmount.fromRawAmount(USDC_ARBITRUM, 10000000000)), + (_a$8[SupportedChainId.OPTIMISM] = sdkCore.CurrencyAmount.fromRawAmount(DAI_OPTIMISM, 1e22)), + (_a$8[SupportedChainId.POLYGON] = sdkCore.CurrencyAmount.fromRawAmount(USDC_POLYGON, 10000000000)), + _a$8) +/** + * Returns the price in USDC of the input currency + * @param currency currency to compute the USDC price of + */ +function useUSDCPrice(currency) { + var chainId = currency === null || currency === void 0 ? void 0 : currency.chainId + var amountOut = chainId ? STABLECOIN_AMOUNT_OUT[chainId] : undefined + var stablecoin = amountOut === null || amountOut === void 0 ? void 0 : amountOut.currency + // TODO(#2808): remove dependency on useBestV2Trade + var v2USDCTrade = useBestV2Trade(sdkCore.TradeType.EXACT_OUTPUT, amountOut, currency, { + maxHops: 2, + }) + var v3USDCTrade = useClientSideV3Trade(sdkCore.TradeType.EXACT_OUTPUT, amountOut, currency) + return React.useMemo( + function () { + if (!currency || !stablecoin) { + return undefined + } + // handle usdc + if (currency === null || currency === void 0 ? void 0 : currency.wrapped.equals(stablecoin)) { + return new sdkCore.Price(stablecoin, stablecoin, '1', '1') + } + // use v2 price if available, v3 as fallback + if (v2USDCTrade) { + var _a = v2USDCTrade.route.midPrice, + numerator = _a.numerator, + denominator = _a.denominator + return new sdkCore.Price(currency, stablecoin, denominator, numerator) + } else if (v3USDCTrade.trade) { + var _b = v3USDCTrade.trade.routes[0].midPrice, + numerator = _b.numerator, + denominator = _b.denominator + return new sdkCore.Price(currency, stablecoin, denominator, numerator) + } + return undefined + }, + [currency, stablecoin, v2USDCTrade, v3USDCTrade.trade] + ) +} +function useUSDCValue(currencyAmount) { + var price = useUSDCPrice(currencyAmount === null || currencyAmount === void 0 ? void 0 : currencyAmount.currency) + return React.useMemo( + function () { + if (!price || !currencyAmount) return null + try { + return price.quote(currencyAmount) + } catch (error) { + return null + } + }, + [currencyAmount, price] + ) +} +/** + * + * @param fiatValue string representation of a USD amount + * @returns CurrencyAmount where currency is stablecoin on active chain + */ +function useStablecoinAmountFromFiatValue(fiatValue) { + var _a + var chainId = useActiveWeb3React().chainId + var stablecoin = chainId + ? (_a = STABLECOIN_AMOUNT_OUT[chainId]) === null || _a === void 0 + ? void 0 + : _a.currency + : undefined + if (fiatValue === null || fiatValue === undefined || !chainId || !stablecoin) { + return undefined + } + // trim for decimal precision when parsing + var parsedForDecimals = parseFloat(fiatValue).toFixed(stablecoin.decimals).toString() + try { + // parse USD string into CurrencyAmount based on stablecoin decimals + return tryParseCurrencyAmount(parsedForDecimals, stablecoin) + } catch (error) { + return undefined + } } -var ArgentWalletContractABI = [ - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "value", - type: "uint256" - }, - { - internalType: "bytes", - name: "data", - type: "bytes" - } - ], - name: "_transactions", - type: "tuple[]" - } - ], - name: "wc_multiCall", - outputs: [ - { - internalType: "bytes[]", - name: "", - type: "bytes[]" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "bytes32", - name: "_msgHash", - type: "bytes32" - }, - { - internalType: "bytes", - name: "_signature", - type: "bytes" - } - ], - name: "isValidSignature", - outputs: [ - { - internalType: "bytes4", - name: "", - type: "bytes4" - } - ], - stateMutability: "view", - type: "function" - } -]; - -function useArgentWalletContract() { - var account = useActiveWeb3React().account; - var isArgentWallet = useIsArgentWallet(); - return useContract(isArgentWallet ? account !== null && account !== void 0 ? account : undefined : undefined, ArgentWalletContractABI, true); -} - -var SwapCallbackState; -(function (SwapCallbackState) { - SwapCallbackState[SwapCallbackState["INVALID"] = 0] = "INVALID"; - SwapCallbackState[SwapCallbackState["LOADING"] = 1] = "LOADING"; - SwapCallbackState[SwapCallbackState["VALID"] = 2] = "VALID"; -})(SwapCallbackState || (SwapCallbackState = {})); -/** - * Returns the swap calls that can be used to make the trade - * @param trade trade to execute - * @param allowedSlippage user allowed slippage - * @param recipientAddressOrName the ENS name or address of the recipient of the swap output - * @param signatureData the signature data of the permit of the input token amount, if available - */ -function useSwapCallArguments(trade, // trade to execute, required -allowedSlippage, // in bips -recipientAddressOrName, // the ENS name or address of the recipient of the trade, or null if swap should be returned to sender -signatureData) { - var _a = useActiveWeb3React(), account = _a.account, chainId = _a.chainId, library = _a.library; - var recipientAddress = useENS(recipientAddressOrName).address; - var recipient = recipientAddressOrName === null ? account : recipientAddress; - var deadline = useTransactionDeadline(); - var routerContract = useV2RouterContract(); - var argentWalletContract = useArgentWalletContract(); - return React.useMemo(function () { - if (!trade || !recipient || !library || !account || !chainId || !deadline) - return []; - if (trade instanceof v2Sdk.Trade) { - if (!routerContract) - return []; - var swapMethods = []; - swapMethods.push(v2Sdk.Router.swapCallParameters(trade, { - feeOnTransfer: false, - allowedSlippage: allowedSlippage, - recipient: recipient, - deadline: deadline.toNumber(), - })); - if (trade.tradeType === sdkCore.TradeType.EXACT_INPUT) { - swapMethods.push(v2Sdk.Router.swapCallParameters(trade, { - feeOnTransfer: true, - allowedSlippage: allowedSlippage, - recipient: recipient, - deadline: deadline.toNumber(), - })); - } - return swapMethods.map(function (_a) { - var methodName = _a.methodName, args = _a.args, value = _a.value; - if (argentWalletContract && trade.inputAmount.currency.isToken) { - return { - address: argentWalletContract.address, - calldata: argentWalletContract.interface.encodeFunctionData('wc_multiCall', [ - [ - approveAmountCalldata(trade.maximumAmountIn(allowedSlippage), routerContract.address), - { - to: routerContract.address, - value: value, - data: routerContract.interface.encodeFunctionData(methodName, args), - }, - ], - ]), - value: '0x0', - }; - } - else { - return { - address: routerContract.address, - calldata: routerContract.interface.encodeFunctionData(methodName, args), - value: value, - }; - } - }); - } - else { - // swap options shared by v3 and v2+v3 swap routers - var sharedSwapOptions = __assign({ recipient: recipient, slippageTolerance: allowedSlippage }, (signatureData - ? { - inputTokenPermit: 'allowed' in signatureData - ? { - expiry: signatureData.deadline, - nonce: signatureData.nonce, - s: signatureData.s, - r: signatureData.r, - v: signatureData.v, - } - : { - deadline: signatureData.deadline, - amount: signatureData.amount, - s: signatureData.s, - r: signatureData.r, - v: signatureData.v, - }, - } - : {})); - var swapRouterAddress = chainId - ? trade instanceof v3Sdk.Trade - ? V3_ROUTER_ADDRESS[chainId] - : SWAP_ROUTER_ADDRESSES[chainId] - : undefined; - if (!swapRouterAddress) - return []; - var _a = trade instanceof v3Sdk.Trade - ? v3Sdk.SwapRouter.swapCallParameters(trade, __assign(__assign({}, sharedSwapOptions), { deadline: deadline.toString() })) - : routerSdk.SwapRouter.swapCallParameters(trade, __assign(__assign({}, sharedSwapOptions), { deadlineOrPreviousBlockhash: deadline.toString() })), value = _a.value, calldata = _a.calldata; - if (argentWalletContract && trade.inputAmount.currency.isToken) { - return [ - { - address: argentWalletContract.address, - calldata: argentWalletContract.interface.encodeFunctionData('wc_multiCall', [ - [ - approveAmountCalldata(trade.maximumAmountIn(allowedSlippage), swapRouterAddress), - { - to: swapRouterAddress, - value: value, - data: calldata, - }, - ], - ]), - value: '0x0', - }, - ]; - } - return [ - { - address: swapRouterAddress, - calldata: calldata, - value: value, - }, - ]; - } - }, [ - trade, - recipient, - library, - account, - chainId, - deadline, - routerContract, - allowedSlippage, - argentWalletContract, - signatureData, - ]); -} -/** - * This is hacking out the revert reason from the ethers provider thrown error however it can. - * This object seems to be undocumented by ethers. - * @param error an error from the ethers provider - */ -function swapErrorToUserReadableMessage(error) { - var _a, _b, _c, _d; - var reason; - while (Boolean(error)) { - reason = (_b = (_a = error.reason) !== null && _a !== void 0 ? _a : error.message) !== null && _b !== void 0 ? _b : reason; - error = (_c = error.error) !== null && _c !== void 0 ? _c : (_d = error.data) === null || _d === void 0 ? void 0 : _d.originalError; - } - if ((reason === null || reason === void 0 ? void 0 : reason.indexOf('execution reverted: ')) === 0) - reason = reason.substr('execution reverted: '.length); - switch (reason) { - case 'UniswapV2Router: EXPIRED': - return (jsxRuntime.jsx(macro.Trans, { children: "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low." }, void 0)); - case 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT': - case 'UniswapV2Router: EXCESSIVE_INPUT_AMOUNT': - return (jsxRuntime.jsx(macro.Trans, { children: "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance." }, void 0)); - case 'TransferHelper: TRANSFER_FROM_FAILED': - return jsxRuntime.jsx(macro.Trans, { children: "The input token cannot be transferred. There may be an issue with the input token." }, void 0); - case 'UniswapV2: TRANSFER_FAILED': - return jsxRuntime.jsx(macro.Trans, { children: "The output token cannot be transferred. There may be an issue with the output token." }, void 0); - case 'UniswapV2: K': - return (jsxRuntime.jsx(macro.Trans, { children: "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer." }, void 0)); - case 'Too little received': - case 'Too much requested': - case 'STF': - return (jsxRuntime.jsx(macro.Trans, { children: "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3." }, void 0)); - case 'TF': - return (jsxRuntime.jsx(macro.Trans, { children: "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3." }, void 0)); - default: - if ((reason === null || reason === void 0 ? void 0 : reason.indexOf('undefined is not an object')) !== -1) { - console.error(error, reason); - return (jsxRuntime.jsx(macro.Trans, { children: "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3." }, void 0)); - } - return (jsxRuntime.jsxs(macro.Trans, { children: ["Unknown error", reason ? ": \"" + reason + "\"" : '', ". Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3."] }, void 0)); - } -} -// returns a function that will execute a swap, if the parameters are all valid -// and the user has approved the slippage adjusted input amount for the trade -function useSwapCallback(trade, // trade to execute, required -allowedSlippage, // in bips -recipientAddressOrName, // the ENS name or address of the recipient of the trade, or null if swap should be returned to sender -signatureData) { - var _a = useActiveWeb3React(), account = _a.account, chainId = _a.chainId, library = _a.library; - var swapCalls = useSwapCallArguments(trade, allowedSlippage, recipientAddressOrName, signatureData); - var addTransaction = useTransactionAdder(); - var recipientAddress = useENS(recipientAddressOrName).address; - var recipient = recipientAddressOrName === null ? account : recipientAddress; - return React.useMemo(function () { - if (!trade || !library || !account || !chainId) { - return { state: SwapCallbackState.INVALID, callback: null, error: jsxRuntime.jsx(macro.Trans, { children: "Missing dependencies" }, void 0) }; - } - if (!recipient) { - if (recipientAddressOrName !== null) { - return { state: SwapCallbackState.INVALID, callback: null, error: jsxRuntime.jsx(macro.Trans, { children: "Invalid recipient" }, void 0) }; - } - else { - return { state: SwapCallbackState.LOADING, callback: null, error: null }; - } - } - return { - state: SwapCallbackState.VALID, - callback: function onSwap() { - return __awaiter(this, void 0, void 0, function () { - var estimatedCalls, bestCallOption, errorCalls, firstNoErrorCall, _a, address, calldata, value; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, Promise.all(swapCalls.map(function (call) { - var address = call.address, calldata = call.calldata, value = call.value; - var tx = !value || isZero(value) - ? { from: account, to: address, data: calldata } - : { - from: account, - to: address, - data: calldata, - value: value, - }; - return library - .estimateGas(tx) - .then(function (gasEstimate) { - return { - call: call, - gasEstimate: gasEstimate, - }; - }) - .catch(function (gasError) { - console.debug('Gas estimate failed, trying eth_call to extract error', call); - return library - .call(tx) - .then(function (result) { - console.debug('Unexpected successful call after failed estimate gas', call, gasError, result); - return { call: call, error: jsxRuntime.jsx(macro.Trans, { children: "Unexpected issue with estimating the gas. Please try again." }, void 0) }; - }) - .catch(function (callError) { - console.debug('Call threw error', call, callError); - return { call: call, error: swapErrorToUserReadableMessage(callError) }; - }); - }); - })) - // a successful estimation is a bignumber gas estimate and the next call is also a bignumber gas estimate - ]; - case 1: - estimatedCalls = _b.sent(); - bestCallOption = estimatedCalls.find(function (el, ix, list) { - return 'gasEstimate' in el && (ix === list.length - 1 || 'gasEstimate' in list[ix + 1]); - }); - // check if any calls errored with a recognizable error - if (!bestCallOption) { - errorCalls = estimatedCalls.filter(function (call) { return 'error' in call; }); - if (errorCalls.length > 0) - throw errorCalls[errorCalls.length - 1].error; - firstNoErrorCall = estimatedCalls.find(function (call) { return !('error' in call); }); - if (!firstNoErrorCall) - throw new Error(macro.t(templateObject_1$2 || (templateObject_1$2 = __makeTemplateObject(["Unexpected error. Could not estimate gas for the swap."], ["Unexpected error. Could not estimate gas for the swap."])))); - bestCallOption = firstNoErrorCall; - } - _a = bestCallOption.call, address = _a.address, calldata = _a.calldata, value = _a.value; - return [2 /*return*/, library - .getSigner() - .sendTransaction(__assign(__assign({ from: account, to: address, data: calldata }, ('gasEstimate' in bestCallOption ? { gasLimit: calculateGasMargin(bestCallOption.gasEstimate) } : {})), (value && !isZero(value) ? { value: value } : {}))) - .then(function (response) { - addTransaction(response, trade.tradeType === sdkCore.TradeType.EXACT_INPUT - ? { - type: TransactionType.SWAP, - tradeType: sdkCore.TradeType.EXACT_INPUT, - inputCurrencyId: currencyId(trade.inputAmount.currency), - inputCurrencyAmountRaw: trade.inputAmount.quotient.toString(), - expectedOutputCurrencyAmountRaw: trade.outputAmount.quotient.toString(), - outputCurrencyId: currencyId(trade.outputAmount.currency), - minimumOutputCurrencyAmountRaw: trade.minimumAmountOut(allowedSlippage).quotient.toString(), - } - : { - type: TransactionType.SWAP, - tradeType: sdkCore.TradeType.EXACT_OUTPUT, - inputCurrencyId: currencyId(trade.inputAmount.currency), - maximumInputCurrencyAmountRaw: trade.maximumAmountIn(allowedSlippage).quotient.toString(), - outputCurrencyId: currencyId(trade.outputAmount.currency), - outputCurrencyAmountRaw: trade.outputAmount.quotient.toString(), - expectedInputCurrencyAmountRaw: trade.inputAmount.quotient.toString(), - }); - return response.hash; - }) - .catch(function (error) { - // if the user rejected the tx, pass this along - if ((error === null || error === void 0 ? void 0 : error.code) === 4001) { - throw new Error(macro.t(templateObject_2 || (templateObject_2 = __makeTemplateObject(["Transaction rejected."], ["Transaction rejected."])))); - } - else { - // otherwise, the error was unexpected and we need to convey that - console.error("Swap failed", error, address, calldata, value); - throw new Error(macro.t(templateObject_3 || (templateObject_3 = __makeTemplateObject(["Swap failed: ", ""], ["Swap failed: ", ""])), swapErrorToUserReadableMessage(error))); - } - })]; - } - }); - }); - }, - error: null, - }; - }, [trade, library, account, chainId, recipient, recipientAddressOrName, swapCalls, addTransaction, allowedSlippage]); -} -var templateObject_1$2, templateObject_2, templateObject_3; - -var WrapType; -(function (WrapType) { - WrapType[WrapType["NOT_APPLICABLE"] = 0] = "NOT_APPLICABLE"; - WrapType[WrapType["WRAP"] = 1] = "WRAP"; - WrapType[WrapType["UNWRAP"] = 2] = "UNWRAP"; -})(WrapType || (WrapType = {})); -var NOT_APPLICABLE = { wrapType: WrapType.NOT_APPLICABLE }; -var WrapInputError; -(function (WrapInputError) { - WrapInputError[WrapInputError["NO_ERROR"] = 0] = "NO_ERROR"; - WrapInputError[WrapInputError["ENTER_NATIVE_AMOUNT"] = 1] = "ENTER_NATIVE_AMOUNT"; - WrapInputError[WrapInputError["ENTER_WRAPPED_AMOUNT"] = 2] = "ENTER_WRAPPED_AMOUNT"; - WrapInputError[WrapInputError["INSUFFICIENT_NATIVE_BALANCE"] = 3] = "INSUFFICIENT_NATIVE_BALANCE"; - WrapInputError[WrapInputError["INSUFFICIENT_WRAPPED_BALANCE"] = 4] = "INSUFFICIENT_WRAPPED_BALANCE"; -})(WrapInputError || (WrapInputError = {})); -function WrapErrorText(_a) { - var wrapInputError = _a.wrapInputError; - var native = useNativeCurrency(); - var wrapped = native === null || native === void 0 ? void 0 : native.wrapped; - switch (wrapInputError) { - case WrapInputError.NO_ERROR: - return null; - case WrapInputError.ENTER_NATIVE_AMOUNT: - return jsxRuntime.jsxs(macro.Trans, { children: ["Enter ", native === null || native === void 0 ? void 0 : native.symbol, " amount"] }, void 0); - case WrapInputError.ENTER_WRAPPED_AMOUNT: - return jsxRuntime.jsxs(macro.Trans, { children: ["Enter ", wrapped === null || wrapped === void 0 ? void 0 : wrapped.symbol, " amount"] }, void 0); - case WrapInputError.INSUFFICIENT_NATIVE_BALANCE: - return jsxRuntime.jsxs(macro.Trans, { children: ["Insufficient ", native === null || native === void 0 ? void 0 : native.symbol, " balance"] }, void 0); - case WrapInputError.INSUFFICIENT_WRAPPED_BALANCE: - return jsxRuntime.jsxs(macro.Trans, { children: ["Insufficient ", wrapped === null || wrapped === void 0 ? void 0 : wrapped.symbol, " balance"] }, void 0); - } -} -/** - * Given the selected input and output currency, return a wrap callback - * @param inputCurrency the selected input currency - * @param outputCurrency the selected output currency - * @param typedValue the user input value - */ -function useWrapCallback(inputCurrency, outputCurrency, typedValue) { - var _this = this; - var _a = useActiveWeb3React(), chainId = _a.chainId, account = _a.account; - var wethContract = useWETHContract(); - var balance = useCurrencyBalance(account !== null && account !== void 0 ? account : undefined, inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : undefined); - // we can always parse the amount typed as the input currency, since wrapping is 1:1 - var inputAmount = React.useMemo(function () { return tryParseCurrencyAmount(typedValue, inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : undefined); }, [inputCurrency, typedValue]); - var addTransaction = useTransactionAdder(); - return React.useMemo(function () { - if (!wethContract || !chainId || !inputCurrency || !outputCurrency) - return NOT_APPLICABLE; - var weth = WRAPPED_NATIVE_CURRENCY[chainId]; - if (!weth) - return NOT_APPLICABLE; - var hasInputAmount = Boolean(inputAmount === null || inputAmount === void 0 ? void 0 : inputAmount.greaterThan('0')); - var sufficientBalance = inputAmount && balance && !balance.lessThan(inputAmount); - if (inputCurrency.isNative && weth.equals(outputCurrency)) { - return { - wrapType: WrapType.WRAP, - execute: sufficientBalance && inputAmount - ? function () { return __awaiter(_this, void 0, void 0, function () { - var txReceipt, error_1; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - _a.trys.push([0, 2, , 3]); - return [4 /*yield*/, wethContract.deposit({ value: "0x" + inputAmount.quotient.toString(16) })]; - case 1: - txReceipt = _a.sent(); - addTransaction(txReceipt, { - type: TransactionType.WRAP, - unwrapped: false, - currencyAmountRaw: inputAmount === null || inputAmount === void 0 ? void 0 : inputAmount.quotient.toString(), - chainId: chainId, - }); - return [3 /*break*/, 3]; - case 2: - error_1 = _a.sent(); - console.error('Could not deposit', error_1); - return [3 /*break*/, 3]; - case 3: return [2 /*return*/]; - } - }); - }); } - : undefined, - inputError: sufficientBalance - ? undefined - : hasInputAmount - ? WrapInputError.INSUFFICIENT_NATIVE_BALANCE - : WrapInputError.ENTER_NATIVE_AMOUNT, - }; - } - else if (weth.equals(inputCurrency) && outputCurrency.isNative) { - return { - wrapType: WrapType.UNWRAP, - execute: sufficientBalance && inputAmount - ? function () { return __awaiter(_this, void 0, void 0, function () { - var txReceipt, error_2; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - _a.trys.push([0, 2, , 3]); - return [4 /*yield*/, wethContract.withdraw("0x" + inputAmount.quotient.toString(16))]; - case 1: - txReceipt = _a.sent(); - addTransaction(txReceipt, { - type: TransactionType.WRAP, - unwrapped: true, - currencyAmountRaw: inputAmount === null || inputAmount === void 0 ? void 0 : inputAmount.quotient.toString(), - chainId: chainId, - }); - return [3 /*break*/, 3]; - case 2: - error_2 = _a.sent(); - console.error('Could not withdraw', error_2); - return [3 /*break*/, 3]; - case 3: return [2 /*return*/]; - } - }); - }); } - : undefined, - inputError: sufficientBalance - ? undefined - : hasInputAmount - ? WrapInputError.INSUFFICIENT_WRAPPED_BALANCE - : WrapInputError.ENTER_WRAPPED_AMOUNT, - }; - } - else { - return NOT_APPLICABLE; - } - }, [wethContract, chainId, inputCurrency, outputCurrency, inputAmount, balance, addTransaction]); -} - -var MIN_NATIVE_CURRENCY_FOR_GAS = JSBI__default["default"].exponentiate(JSBI__default["default"].BigInt(10), JSBI__default["default"].BigInt(16)); // .01 ETH -/** - * Given some token amount, return the max that can be spent of it - * @param currencyAmount to return max of - */ -function maxAmountSpend(currencyAmount) { - if (!currencyAmount) - return undefined; - if (currencyAmount.currency.isNative) { - if (JSBI__default["default"].greaterThan(currencyAmount.quotient, MIN_NATIVE_CURRENCY_FOR_GAS)) { - return sdkCore.CurrencyAmount.fromRawAmount(currencyAmount.currency, JSBI__default["default"].subtract(currencyAmount.quotient, MIN_NATIVE_CURRENCY_FOR_GAS)); - } - else { - return sdkCore.CurrencyAmount.fromRawAmount(currencyAmount.currency, JSBI__default["default"].BigInt(0)); - } - } - return currencyAmount; -} - -var BodyWrapper = styled__default["default"].main(templateObject_1$1 || (templateObject_1$1 = __makeTemplateObject(["\n position: relative;\n margin-top: ", ";\n max-width: ", ";\n width: 100%;\n background: ", ";\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 border-radius: 24px;\n margin-top: 1rem;\n margin-left: auto;\n margin-right: auto;\n z-index: ", ";\n"], ["\n position: relative;\n margin-top: ", ";\n max-width: ", ";\n width: 100%;\n background: ", ";\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 border-radius: 24px;\n margin-top: 1rem;\n margin-left: auto;\n margin-right: auto;\n z-index: ", ";\n" - /** - * The styled container element that wraps the content of most pages and the tabs. - */ -])), function (_a) { - var margin = _a.margin; - return margin !== null && margin !== void 0 ? margin : '0px'; -}, function (_a) { - var maxWidth = _a.maxWidth; - return maxWidth !== null && maxWidth !== void 0 ? maxWidth : '480px'; -}, function (_a) { - var theme = _a.theme; - return theme.bg0; -}, Z_INDEX.deprecated_content); -/** - * The styled container element that wraps the content of most pages and the tabs. - */ -function AppBody(_a) { - var children = _a.children, rest = __rest(_a, ["children"]); - return jsxRuntime.jsx(BodyWrapper, __assign({}, rest, { children: children }), void 0); -} -var templateObject_1$1; - -var AlertWrapper = styled__default["default"].div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n max-width: 460px;\n width: 100%;\n"], ["\n max-width: 460px;\n width: 100%;\n"]))); -function Swap(_a) { - var _this = this; - var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l; - var history = _a.history; - var account = useActiveWeb3React().account; - var loadedUrlParams = useDefaultsFromURLSearch(); - // token warning stuff - var _m = __read([ - useCurrency(loadedUrlParams === null || loadedUrlParams === void 0 ? void 0 : loadedUrlParams.inputCurrencyId), - useCurrency(loadedUrlParams === null || loadedUrlParams === void 0 ? void 0 : loadedUrlParams.outputCurrencyId), - ], 2), loadedInputCurrency = _m[0], loadedOutputCurrency = _m[1]; - var _o = __read(React.useState(false), 2), dismissTokenWarning = _o[0], setDismissTokenWarning = _o[1]; - var urlLoadedTokens = React.useMemo(function () { var _a, _b; return (_b = (_a = [loadedInputCurrency, loadedOutputCurrency]) === null || _a === void 0 ? void 0 : _a.filter(function (c) { var _a; return (_a = c === null || c === void 0 ? void 0 : c.isToken) !== null && _a !== void 0 ? _a : false; })) !== null && _b !== void 0 ? _b : []; }, [loadedInputCurrency, loadedOutputCurrency]); - var handleConfirmTokenWarning = React.useCallback(function () { - setDismissTokenWarning(true); - }, []); - // dismiss warning if all imported tokens are in active lists - var defaultTokens = useAllTokens(); - var importTokensNotInDefault = React.useMemo(function () { - return urlLoadedTokens && - urlLoadedTokens.filter(function (token) { - return !Boolean(token.address in defaultTokens); - }); - }, [defaultTokens, urlLoadedTokens]); - var theme = React.useContext(styled.ThemeContext); - // toggle wallet when disconnected - var toggleWalletModal = useWalletModalToggle(); - // for expert mode - var _p = __read(useExpertModeManager(), 1), isExpertMode = _p[0]; - // swap state - var _q = useSwapState(), independentField = _q.independentField, typedValue = _q.typedValue, recipient = _q.recipient; - var _r = useDerivedSwapInfo(), _s = _r.trade, tradeState = _s.state, trade = _s.trade, allowedSlippage = _r.allowedSlippage, currencyBalances = _r.currencyBalances, parsedAmount = _r.parsedAmount, currencies = _r.currencies, swapInputError = _r.inputError; - var _t = useWrapCallback(currencies[Field.INPUT], currencies[Field.OUTPUT], typedValue), wrapType = _t.wrapType, onWrap = _t.execute, wrapInputError = _t.inputError; - var showWrap = wrapType !== WrapType.NOT_APPLICABLE; - var recipientAddress = useENSAddress(recipient).address; - var parsedAmounts = React.useMemo(function () { - var _a, _b; - return showWrap - ? (_a = {}, - _a[Field.INPUT] = parsedAmount, - _a[Field.OUTPUT] = parsedAmount, - _a) : (_b = {}, - _b[Field.INPUT] = independentField === Field.INPUT ? parsedAmount : trade === null || trade === void 0 ? void 0 : trade.inputAmount, - _b[Field.OUTPUT] = independentField === Field.OUTPUT ? parsedAmount : trade === null || trade === void 0 ? void 0 : trade.outputAmount, - _b); - }, [independentField, parsedAmount, showWrap, trade]); - var _u = __read(React.useMemo(function () { return [!(trade === null || trade === void 0 ? void 0 : trade.swaps), TradeState.LOADING === tradeState, TradeState.SYNCING === tradeState]; }, [trade, tradeState]), 3), routeNotFound = _u[0], routeIsLoading = _u[1], routeIsSyncing = _u[2]; - var fiatValueInput = useUSDCValue(parsedAmounts[Field.INPUT]); - var fiatValueOutput = useUSDCValue(parsedAmounts[Field.OUTPUT]); - var priceImpact = React.useMemo(function () { return (routeIsSyncing ? undefined : computeFiatValuePriceImpact(fiatValueInput, fiatValueOutput)); }, [fiatValueInput, fiatValueOutput, routeIsSyncing]); - var _v = useSwapActionHandlers(), onSwitchTokens = _v.onSwitchTokens, onCurrencySelection = _v.onCurrencySelection, onUserInput = _v.onUserInput, onChangeRecipient = _v.onChangeRecipient; - var isValid = !swapInputError; - var dependentField = independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT; - var handleTypeInput = React.useCallback(function (value) { - onUserInput(Field.INPUT, value); - }, [onUserInput]); - var handleTypeOutput = React.useCallback(function (value) { - onUserInput(Field.OUTPUT, value); - }, [onUserInput]); - // reset if they close warning without tokens in params - var handleDismissTokenWarning = React.useCallback(function () { - setDismissTokenWarning(true); - history.push('/swap/'); - }, [history]); - // modal and loading - var _w = __read(React.useState({ - showConfirm: false, - tradeToConfirm: undefined, - attemptingTxn: false, - swapErrorMessage: undefined, - txHash: undefined, - }), 2), _x = _w[0], showConfirm = _x.showConfirm, tradeToConfirm = _x.tradeToConfirm, swapErrorMessage = _x.swapErrorMessage, attemptingTxn = _x.attemptingTxn, txHash = _x.txHash, setSwapState = _w[1]; - var formattedAmounts = React.useMemo(function () { - var _a; - var _b, _c, _d, _e; - return (_a = {}, - _a[independentField] = typedValue, - _a[dependentField] = showWrap - ? (_c = (_b = parsedAmounts[independentField]) === null || _b === void 0 ? void 0 : _b.toExact()) !== null && _c !== void 0 ? _c : '' - : (_e = (_d = parsedAmounts[dependentField]) === null || _d === void 0 ? void 0 : _d.toSignificant(6)) !== null && _e !== void 0 ? _e : '', - _a); - }, [dependentField, independentField, parsedAmounts, showWrap, typedValue]); - var userHasSpecifiedInputOutput = Boolean(currencies[Field.INPUT] && currencies[Field.OUTPUT] && ((_b = parsedAmounts[independentField]) === null || _b === void 0 ? void 0 : _b.greaterThan(JSBI__default["default"].BigInt(0)))); - var approvalOptimizedTrade = useApprovalOptimizedTrade(trade, allowedSlippage); - var approvalOptimizedTradeString = approvalOptimizedTrade instanceof v2Sdk.Trade - ? 'V2SwapRouter' - : approvalOptimizedTrade instanceof v3Sdk.Trade - ? 'V3SwapRouter' - : 'SwapRouter'; - // check whether the user has approved the router on the input token - var _y = __read(useApproveCallbackFromTrade(approvalOptimizedTrade, allowedSlippage), 2), approvalState = _y[0], approveCallback = _y[1]; - var _z = useERC20PermitFromTrade(approvalOptimizedTrade, allowedSlippage), signatureState = _z.state, signatureData = _z.signatureData, gatherPermitSignature = _z.gatherPermitSignature; - var handleApprove = React.useCallback(function () { return __awaiter(_this, void 0, void 0, function () { - var error_1; - var _a; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - if (!(signatureState === UseERC20PermitState.NOT_SIGNED && gatherPermitSignature)) return [3 /*break*/, 7]; - _b.label = 1; - case 1: - _b.trys.push([1, 3, , 6]); - return [4 /*yield*/, gatherPermitSignature()]; - case 2: - _b.sent(); - return [3 /*break*/, 6]; - case 3: - error_1 = _b.sent(); - if (!((error_1 === null || error_1 === void 0 ? void 0 : error_1.code) !== 4001)) return [3 /*break*/, 5]; - return [4 /*yield*/, approveCallback()]; - case 4: - _b.sent(); - _b.label = 5; - case 5: return [3 /*break*/, 6]; - case 6: return [3 /*break*/, 9]; - case 7: return [4 /*yield*/, approveCallback()]; - case 8: - _b.sent(); - ReactGA__default["default"].event({ - category: 'Swap', - action: 'Approve', - label: [approvalOptimizedTradeString, (_a = approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 ? void 0 : approvalOptimizedTrade.inputAmount) === null || _a === void 0 ? void 0 : _a.currency.symbol].join('/'), - }); - _b.label = 9; - case 9: return [2 /*return*/]; - } - }); - }); }, [ - signatureState, - gatherPermitSignature, - approveCallback, - approvalOptimizedTradeString, - (_c = approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 ? void 0 : approvalOptimizedTrade.inputAmount) === null || _c === void 0 ? void 0 : _c.currency.symbol, - ]); - // check if user has gone through approval process, used to show two step buttons, reset on token change - var _0 = __read(React.useState(false), 2), approvalSubmitted = _0[0], setApprovalSubmitted = _0[1]; - // mark when a user has submitted an approval, reset onTokenSelection for input field - React.useEffect(function () { - if (approvalState === ApprovalState.PENDING) { - setApprovalSubmitted(true); - } - }, [approvalState, approvalSubmitted]); - var maxInputAmount = React.useMemo(function () { return maxAmountSpend(currencyBalances[Field.INPUT]); }, [currencyBalances]); - var showMaxButton = Boolean((maxInputAmount === null || maxInputAmount === void 0 ? void 0 : maxInputAmount.greaterThan(0)) && !((_d = parsedAmounts[Field.INPUT]) === null || _d === void 0 ? void 0 : _d.equalTo(maxInputAmount))); - // the callback to execute the swap - var _1 = useSwapCallback(approvalOptimizedTrade, allowedSlippage, recipient, signatureData), swapCallback = _1.callback, swapCallbackError = _1.error; - var handleSwap = React.useCallback(function () { - if (!swapCallback) { - return; - } - if (priceImpact && !confirmPriceImpactWithoutFee(priceImpact)) { - return; - } - setSwapState({ attemptingTxn: true, tradeToConfirm: tradeToConfirm, showConfirm: showConfirm, swapErrorMessage: undefined, txHash: undefined }); - swapCallback() - .then(function (hash) { - var _a, _b, _c, _d; - setSwapState({ attemptingTxn: false, tradeToConfirm: tradeToConfirm, showConfirm: showConfirm, swapErrorMessage: undefined, txHash: hash }); - ReactGA__default["default"].event({ - category: 'Swap', - action: recipient === null - ? 'Swap w/o Send' - : (recipientAddress !== null && recipientAddress !== void 0 ? recipientAddress : recipient) === account - ? 'Swap w/o Send + recipient' - : 'Swap w/ Send', - label: [ - approvalOptimizedTradeString, - (_b = (_a = approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 ? void 0 : approvalOptimizedTrade.inputAmount) === null || _a === void 0 ? void 0 : _a.currency) === null || _b === void 0 ? void 0 : _b.symbol, - (_d = (_c = approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 ? void 0 : approvalOptimizedTrade.outputAmount) === null || _c === void 0 ? void 0 : _c.currency) === null || _d === void 0 ? void 0 : _d.symbol, - 'MH', - ].join('/'), - }); - }) - .catch(function (error) { - setSwapState({ - attemptingTxn: false, - tradeToConfirm: tradeToConfirm, - showConfirm: showConfirm, - swapErrorMessage: error.message, - txHash: undefined, - }); - }); - }, [ - swapCallback, - priceImpact, - tradeToConfirm, - showConfirm, - recipient, - recipientAddress, - account, - approvalOptimizedTradeString, - (_f = (_e = approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 ? void 0 : approvalOptimizedTrade.inputAmount) === null || _e === void 0 ? void 0 : _e.currency) === null || _f === void 0 ? void 0 : _f.symbol, - (_h = (_g = approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 ? void 0 : approvalOptimizedTrade.outputAmount) === null || _g === void 0 ? void 0 : _g.currency) === null || _h === void 0 ? void 0 : _h.symbol, - ]); - // errors - var _2 = __read(React.useState(false), 2), showInverted = _2[0], setShowInverted = _2[1]; - // warnings on the greater of fiat value price impact and execution price impact - var priceImpactSeverity = React.useMemo(function () { - var executionPriceImpact = trade === null || trade === void 0 ? void 0 : trade.priceImpact; - return warningSeverity(executionPriceImpact && priceImpact - ? executionPriceImpact.greaterThan(priceImpact) - ? executionPriceImpact - : priceImpact - : executionPriceImpact !== null && executionPriceImpact !== void 0 ? executionPriceImpact : priceImpact); - }, [priceImpact, trade]); - var isArgentWallet = useIsArgentWallet(); - // show approve flow when: no error on inputs, not approved or pending, or approved in current session - // never show if price impact is above threshold in non expert mode - var showApproveFlow = !isArgentWallet && - !swapInputError && - (approvalState === ApprovalState.NOT_APPROVED || - approvalState === ApprovalState.PENDING || - (approvalSubmitted && approvalState === ApprovalState.APPROVED)) && - !(priceImpactSeverity > 3 && !isExpertMode); - var handleConfirmDismiss = React.useCallback(function () { - setSwapState({ showConfirm: false, tradeToConfirm: tradeToConfirm, attemptingTxn: attemptingTxn, swapErrorMessage: swapErrorMessage, txHash: txHash }); - // if there was a tx hash, we want to clear the input - if (txHash) { - onUserInput(Field.INPUT, ''); - } - }, [attemptingTxn, onUserInput, swapErrorMessage, tradeToConfirm, txHash]); - var handleAcceptChanges = React.useCallback(function () { - setSwapState({ tradeToConfirm: trade, swapErrorMessage: swapErrorMessage, txHash: txHash, attemptingTxn: attemptingTxn, showConfirm: showConfirm }); - }, [attemptingTxn, showConfirm, swapErrorMessage, trade, txHash]); - var handleInputSelect = React.useCallback(function (inputCurrency) { - setApprovalSubmitted(false); // reset 2 step UI for approvals - onCurrencySelection(Field.INPUT, inputCurrency); - }, [onCurrencySelection]); - var handleMaxInput = React.useCallback(function () { - maxInputAmount && onUserInput(Field.INPUT, maxInputAmount.toExact()); - ReactGA__default["default"].event({ - category: 'Swap', - action: 'Max', - }); - }, [maxInputAmount, onUserInput]); - var handleOutputSelect = React.useCallback(function (outputCurrency) { return onCurrencySelection(Field.OUTPUT, outputCurrency); }, [onCurrencySelection]); - var swapIsUnsupported = useIsSwapUnsupported(currencies[Field.INPUT], currencies[Field.OUTPUT]); - var priceImpactTooHigh = priceImpactSeverity > 3 && !isExpertMode; - return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(TokenWarningModal, { isOpen: importTokensNotInDefault.length > 0 && !dismissTokenWarning, tokens: importTokensNotInDefault, onConfirm: handleConfirmTokenWarning, onDismiss: handleDismissTokenWarning }, void 0), jsxRuntime.jsxs(AppBody, { children: [jsxRuntime.jsx(SwapHeader, { allowedSlippage: allowedSlippage }, void 0), jsxRuntime.jsxs(Wrapper$d, __assign({ id: "swap-page" }, { children: [jsxRuntime.jsx(ConfirmSwapModal, { isOpen: showConfirm, trade: trade, originalTrade: tradeToConfirm, onAcceptChanges: handleAcceptChanges, attemptingTxn: attemptingTxn, txHash: txHash, recipient: recipient, allowedSlippage: allowedSlippage, onConfirm: handleSwap, swapErrorMessage: swapErrorMessage, onDismiss: handleConfirmDismiss }, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: 'sm' }, { children: [jsxRuntime.jsxs("div", __assign({ style: { display: 'relative' } }, { children: [jsxRuntime.jsx(CurrencyInputPanel, { label: independentField === Field.OUTPUT && !showWrap ? jsxRuntime.jsx(macro.Trans, { children: "From (at most)" }, void 0) : jsxRuntime.jsx(macro.Trans, { children: "From" }, void 0), value: formattedAmounts[Field.INPUT], showMaxButton: showMaxButton, currency: currencies[Field.INPUT], onUserInput: handleTypeInput, onMax: handleMaxInput, fiatValue: fiatValueInput !== null && fiatValueInput !== void 0 ? fiatValueInput : undefined, onCurrencySelect: handleInputSelect, otherCurrency: currencies[Field.OUTPUT], showCommonBases: true, id: "swap-currency-input", loading: independentField === Field.OUTPUT && routeIsSyncing }, void 0), jsxRuntime.jsx(ArrowWrapper$1, __assign({ clickable: true }, { children: jsxRuntime.jsx(reactFeather.ArrowDown, { size: "16", onClick: function () { - setApprovalSubmitted(false); // reset 2 step UI for approvals - onSwitchTokens(); - }, color: currencies[Field.INPUT] && currencies[Field.OUTPUT] ? theme.text1 : theme.text3 }, void 0) }), void 0), jsxRuntime.jsx(CurrencyInputPanel, { value: formattedAmounts[Field.OUTPUT], onUserInput: handleTypeOutput, label: independentField === Field.INPUT && !showWrap ? jsxRuntime.jsx(macro.Trans, { children: "To (at least)" }, void 0) : jsxRuntime.jsx(macro.Trans, { children: "To" }, void 0), showMaxButton: false, hideBalance: false, fiatValue: fiatValueOutput !== null && fiatValueOutput !== void 0 ? fiatValueOutput : undefined, priceImpact: priceImpact, currency: currencies[Field.OUTPUT], onCurrencySelect: handleOutputSelect, otherCurrency: currencies[Field.INPUT], showCommonBases: true, id: "swap-currency-output", loading: independentField === Field.INPUT && routeIsSyncing }, void 0)] }), void 0), recipient !== null && !showWrap ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs(AutoRow, __assign({ justify: "space-between", style: { padding: '0 1rem' } }, { children: [jsxRuntime.jsx(ArrowWrapper$1, __assign({ clickable: false }, { children: jsxRuntime.jsx(reactFeather.ArrowDown, { size: "16", color: theme.text2 }, void 0) }), void 0), jsxRuntime.jsx(LinkStyledButton, __assign({ id: "remove-recipient-button", onClick: function () { return onChangeRecipient(null); } }, { children: jsxRuntime.jsx(macro.Trans, { children: "- Remove recipient" }, void 0) }), void 0)] }), void 0), jsxRuntime.jsx(AddressInputPanel, { id: "recipient", value: recipient, onChange: onChangeRecipient }, void 0)] }, void 0)) : null, !showWrap && userHasSpecifiedInputOutput && (trade || routeIsLoading || routeIsSyncing) && (jsxRuntime.jsx(SwapDetailsDropdown, { trade: trade, syncing: routeIsSyncing, loading: routeIsLoading, showInverted: showInverted, setShowInverted: setShowInverted, allowedSlippage: allowedSlippage }, void 0)), jsxRuntime.jsxs("div", { children: [swapIsUnsupported ? (jsxRuntime.jsx(ButtonPrimary, __assign({ disabled: true }, { children: jsxRuntime.jsx(ThemedText.Main, __assign({ mb: "4px" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Unsupported Asset" }, void 0) }), void 0) }), void 0)) : !account ? (jsxRuntime.jsx(ButtonLight, __assign({ onClick: toggleWalletModal }, { children: jsxRuntime.jsx(macro.Trans, { children: "Connect Wallet" }, void 0) }), void 0)) : showWrap ? (jsxRuntime.jsx(ButtonPrimary, __assign({ disabled: Boolean(wrapInputError), onClick: onWrap }, { children: wrapInputError ? (jsxRuntime.jsx(WrapErrorText, { wrapInputError: wrapInputError }, void 0)) : wrapType === WrapType.WRAP ? (jsxRuntime.jsx(macro.Trans, { children: "Wrap" }, void 0)) : wrapType === WrapType.UNWRAP ? (jsxRuntime.jsx(macro.Trans, { children: "Unwrap" }, void 0)) : null }), void 0)) : routeNotFound && userHasSpecifiedInputOutput && !routeIsLoading && !routeIsSyncing ? (jsxRuntime.jsx(GreyCard, __assign({ style: { textAlign: 'center' } }, { children: jsxRuntime.jsx(ThemedText.Main, __assign({ mb: "4px" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Insufficient liquidity for this trade." }, void 0) }), void 0) }), void 0)) : showApproveFlow ? (jsxRuntime.jsx(AutoRow, __assign({ style: { flexWrap: 'nowrap', width: '100%' } }, { children: jsxRuntime.jsxs(AutoColumn, __assign({ style: { width: '100%' }, gap: "12px" }, { children: [jsxRuntime.jsx(ButtonConfirmed, __assign({ onClick: handleApprove, disabled: approvalState !== ApprovalState.NOT_APPROVED || - approvalSubmitted || - signatureState === UseERC20PermitState.SIGNED, width: "100%", altDisabledStyle: approvalState === ApprovalState.PENDING, confirmed: approvalState === ApprovalState.APPROVED || signatureState === UseERC20PermitState.SIGNED }, { children: jsxRuntime.jsxs(AutoRow, __assign({ justify: "space-between", style: { flexWrap: 'nowrap' } }, { children: [jsxRuntime.jsxs("span", __assign({ style: { display: 'flex', alignItems: 'center' } }, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: currencies[Field.INPUT], size: '20px', style: { marginRight: '8px', flexShrink: 0 } }, void 0), approvalState === ApprovalState.APPROVED || signatureState === UseERC20PermitState.SIGNED ? (jsxRuntime.jsxs(macro.Trans, { children: ["You can now trade ", (_j = currencies[Field.INPUT]) === null || _j === void 0 ? void 0 : _j.symbol] }, void 0)) : (jsxRuntime.jsxs(macro.Trans, { children: ["Allow the Uniswap Protocol to use your ", (_k = currencies[Field.INPUT]) === null || _k === void 0 ? void 0 : _k.symbol] }, void 0))] }), void 0), approvalState === ApprovalState.PENDING ? (jsxRuntime.jsx(Loader, { stroke: "white" }, void 0)) : (approvalSubmitted && approvalState === ApprovalState.APPROVED) || - signatureState === UseERC20PermitState.SIGNED ? (jsxRuntime.jsx(reactFeather.CheckCircle, { size: "20", color: theme.green1 }, void 0)) : (jsxRuntime.jsx(MouseoverTooltip, __assign({ text: jsxRuntime.jsxs(macro.Trans, { children: ["You must give the Uniswap smart contracts permission to use your", ' ', (_l = currencies[Field.INPUT]) === null || _l === void 0 ? void 0 : _l.symbol, ". You only have to do this once per token."] }, void 0) }, { children: jsxRuntime.jsx(reactFeather.HelpCircle, { size: "20", color: 'white', style: { marginLeft: '8px' } }, void 0) }), void 0))] }), void 0) }), void 0), jsxRuntime.jsx(ButtonError, __assign({ onClick: function () { - if (isExpertMode) { - handleSwap(); - } - else { - setSwapState({ - tradeToConfirm: trade, - attemptingTxn: false, - swapErrorMessage: undefined, - showConfirm: true, - txHash: undefined, - }); - } - }, width: "100%", id: "swap-button", disabled: !isValid || - routeIsSyncing || - routeIsLoading || - (approvalState !== ApprovalState.APPROVED && signatureState !== UseERC20PermitState.SIGNED) || - priceImpactTooHigh, error: isValid && priceImpactSeverity > 2 }, { children: jsxRuntime.jsx(rebass.Text, __assign({ fontSize: 16, fontWeight: 500 }, { children: priceImpactTooHigh ? (jsxRuntime.jsx(macro.Trans, { children: "High Price Impact" }, void 0)) : trade && priceImpactSeverity > 2 ? (jsxRuntime.jsx(macro.Trans, { children: "Swap Anyway" }, void 0)) : (jsxRuntime.jsx(macro.Trans, { children: "Swap" }, void 0)) }), void 0) }), void 0)] }), void 0) }), void 0)) : (jsxRuntime.jsx(ButtonError, __assign({ onClick: function () { - if (isExpertMode) { - handleSwap(); - } - else { - setSwapState({ - tradeToConfirm: trade, - attemptingTxn: false, - swapErrorMessage: undefined, - showConfirm: true, - txHash: undefined, - }); - } - }, id: "swap-button", disabled: !isValid || routeIsSyncing || routeIsLoading || priceImpactTooHigh || !!swapCallbackError, error: isValid && priceImpactSeverity > 2 && !swapCallbackError }, { children: jsxRuntime.jsx(rebass.Text, __assign({ fontSize: 20, fontWeight: 500 }, { children: swapInputError ? (swapInputError) : routeIsSyncing || routeIsLoading ? (jsxRuntime.jsx(macro.Trans, { children: "Swap" }, void 0)) : priceImpactSeverity > 2 ? (jsxRuntime.jsx(macro.Trans, { children: "Swap Anyway" }, void 0)) : priceImpactTooHigh ? (jsxRuntime.jsx(macro.Trans, { children: "Price Impact Too High" }, void 0)) : (jsxRuntime.jsx(macro.Trans, { children: "Swap" }, void 0)) }), void 0) }), void 0)), isExpertMode && swapErrorMessage ? jsxRuntime.jsx(SwapCallbackError, { error: swapErrorMessage }, void 0) : null] }, void 0)] }), void 0)] }), void 0)] }, void 0), jsxRuntime.jsx(AlertWrapper, { children: jsxRuntime.jsx(NetworkAlert, {}, void 0) }, void 0), jsxRuntime.jsx(SwitchLocaleLink, {}, void 0), !swapIsUnsupported ? null : (jsxRuntime.jsx(UnsupportedCurrencyFooter, { show: swapIsUnsupported, currencies: [currencies[Field.INPUT], currencies[Field.OUTPUT]] }, void 0))] }, void 0)); -} -var templateObject_1; - -var $schema = "http://json-schema.org/draft-07/schema#"; -var $id = "https://uniswap.org/tokenlist.schema.json"; -var title = "Uniswap Token List"; -var description = "Schema for lists of tokens compatible with the Uniswap Interface"; -var definitions = { - Version: { - type: "object", - description: "The version of the list, used in change detection", - examples: [ - { - major: 1, - minor: 0, - patch: 0 - } - ], - additionalProperties: false, - properties: { - major: { - type: "integer", - description: "The major version of the list. Must be incremented when tokens are removed from the list or token addresses are changed.", - minimum: 0, - examples: [ - 1, - 2 - ] - }, - minor: { - type: "integer", - description: "The minor version of the list. Must be incremented when tokens are added to the list.", - minimum: 0, - examples: [ - 0, - 1 - ] - }, - patch: { - type: "integer", - description: "The patch version of the list. Must be incremented for any changes to the list.", - minimum: 0, - examples: [ - 0, - 1 - ] - } - }, - required: [ - "major", - "minor", - "patch" - ] - }, - TagIdentifier: { - type: "string", - description: "The unique identifier of a tag", - minLength: 1, - maxLength: 10, - pattern: "^[\\w]+$", - examples: [ - "compound", - "stablecoin" - ] - }, - ExtensionIdentifier: { - type: "string", - description: "The name of a token extension property", - minLength: 1, - maxLength: 40, - pattern: "^[\\w]+$", - examples: [ - "color", - "is_fee_on_transfer", - "aliases" - ] - }, - ExtensionMap: { - type: "object", - description: "An object containing any arbitrary or vendor-specific token metadata", - maxProperties: 10, - propertyNames: { - $ref: "#/definitions/ExtensionIdentifier" - }, - additionalProperties: { - $ref: "#/definitions/ExtensionValue" - }, - examples: [ - { - color: "#000000", - is_verified_by_me: true - }, - { - "x-bridged-addresses-by-chain": { - "1": { - bridgeAddress: "0x4200000000000000000000000000000000000010", - tokenAddress: "0x4200000000000000000000000000000000000010" - } - } - } - ] - }, - ExtensionPrimitiveValue: { - anyOf: [ - { - type: "string", - minLength: 1, - maxLength: 42, - examples: [ - "#00000" - ] - }, - { - type: "boolean", - examples: [ - true - ] - }, - { - type: "number", - examples: [ - 15 - ] - }, - { - type: "null" - } - ] - }, - ExtensionValue: { - anyOf: [ - { - $ref: "#/definitions/ExtensionPrimitiveValue" - }, - { - type: "object", - maxProperties: 10, - propertyNames: { - $ref: "#/definitions/ExtensionIdentifier" - }, - additionalProperties: { - $ref: "#/definitions/ExtensionValueInner0" - } - } - ] - }, - ExtensionValueInner0: { - anyOf: [ - { - $ref: "#/definitions/ExtensionPrimitiveValue" - }, - { - type: "object", - maxProperties: 10, - propertyNames: { - $ref: "#/definitions/ExtensionIdentifier" - }, - additionalProperties: { - $ref: "#/definitions/ExtensionValueInner1" - } - } - ] - }, - ExtensionValueInner1: { - anyOf: [ - { - $ref: "#/definitions/ExtensionPrimitiveValue" - } - ] - }, - TagDefinition: { - type: "object", - description: "Definition of a tag that can be associated with a token via its identifier", - additionalProperties: false, - properties: { - name: { - type: "string", - description: "The name of the tag", - pattern: "^[ \\w]+$", - minLength: 1, - maxLength: 20 - }, - description: { - type: "string", - description: "A user-friendly description of the tag", - pattern: "^[ \\w\\.,:]+$", - minLength: 1, - maxLength: 200 - } - }, - required: [ - "name", - "description" - ], - examples: [ - { - name: "Stablecoin", - description: "A token with value pegged to another asset" - } - ] - }, - TokenInfo: { - type: "object", - description: "Metadata for a single token in a token list", - additionalProperties: false, - properties: { - chainId: { - type: "integer", - description: "The chain ID of the Ethereum network where this token is deployed", - minimum: 1, - examples: [ - 1, - 42 - ] - }, - address: { - type: "string", - description: "The checksummed address of the token on the specified chain ID", - pattern: "^0x[a-fA-F0-9]{40}$", - examples: [ - "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48" - ] - }, - decimals: { - type: "integer", - description: "The number of decimals for the token balance", - minimum: 0, - maximum: 255, - examples: [ - 18 - ] - }, - name: { - type: "string", - description: "The name of the token", - minLength: 1, - maxLength: 40, - pattern: "^[ \\w.'+\\-%/À-ÖØ-öø-ÿ:&\\[\\]\\(\\)]+$", - examples: [ - "USD Coin" - ] - }, - symbol: { - type: "string", - description: "The symbol for the token; must be alphanumeric", - pattern: "^[a-zA-Z0-9+\\-%/$.]+$", - minLength: 1, - maxLength: 20, - examples: [ - "USDC" - ] - }, - logoURI: { - type: "string", - description: "A URI to the token logo asset; if not set, interface will attempt to find a logo based on the token address; suggest SVG or PNG of size 64x64", - format: "uri", - examples: [ - "ipfs://QmXfzKRvjZz3u5JRgC4v5mGVbm9ahrUiB4DgzHBsnWbTMM" - ] - }, - tags: { - type: "array", - description: "An array of tag identifiers associated with the token; tags are defined at the list level", - items: { - $ref: "#/definitions/TagIdentifier" - }, - maxItems: 10, - examples: [ - "stablecoin", - "compound" - ] - }, - extensions: { - $ref: "#/definitions/ExtensionMap" - } - }, - required: [ - "chainId", - "address", - "decimals", - "name", - "symbol" - ] - } -}; -var type = "object"; -var additionalProperties = false; +var StyledPriceContainer = styled__default['default'].button( + templateObject_1$N || + (templateObject_1$N = __makeTemplateObject( + [ + '\n background-color: transparent;\n border: none;\n cursor: pointer;\n align-items: center;\n justify-content: flex-start;\n padding: 0;\n grid-template-columns: 1fr auto;\n grid-gap: 0.25rem;\n display: flex;\n flex-direction: row;\n text-align: left;\n flex-wrap: wrap;\n padding: 8px 0;\n user-select: text;\n', + ], + [ + '\n background-color: transparent;\n border: none;\n cursor: pointer;\n align-items: center;\n justify-content: flex-start;\n padding: 0;\n grid-template-columns: 1fr auto;\n grid-gap: 0.25rem;\n display: flex;\n flex-direction: row;\n text-align: left;\n flex-wrap: wrap;\n padding: 8px 0;\n user-select: text;\n', + ] + )) +) +function TradePrice(_a) { + var _b, _c, _d, _e, _f, _g + var price = _a.price, + showInverted = _a.showInverted, + setShowInverted = _a.setShowInverted + var theme = React.useContext(styled.ThemeContext) + var usdcPrice = useUSDCPrice(showInverted ? price.baseCurrency : price.quoteCurrency) + var formattedPrice + try { + formattedPrice = showInverted + ? price.toSignificant(4) + : (_b = price.invert()) === null || _b === void 0 + ? void 0 + : _b.toSignificant(4) + } catch (error) { + formattedPrice = '0' + } + var label = showInverted + ? '' + ((_c = price.quoteCurrency) === null || _c === void 0 ? void 0 : _c.symbol) + : ((_d = price.baseCurrency) === null || _d === void 0 ? void 0 : _d.symbol) + ' ' + var labelInverted = showInverted + ? ((_e = price.baseCurrency) === null || _e === void 0 ? void 0 : _e.symbol) + ' ' + : '' + ((_f = price.quoteCurrency) === null || _f === void 0 ? void 0 : _f.symbol) + var flipPrice = React.useCallback( + function () { + return setShowInverted(!showInverted) + }, + [setShowInverted, showInverted] + ) + var text = ((_g = '1 ' + labelInverted + ' = ' + formattedPrice) !== null && _g !== void 0 ? _g : '-') + ' ' + label + return jsxRuntime.jsxs( + StyledPriceContainer, + __assign( + { + onClick(e) { + e.stopPropagation() // dont want this click to affect dropdowns / hovers + flipPrice() + }, + title: text, + }, + { + children: [ + jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, color: theme.text1 }, { children: text }), void 0), + ' ', + usdcPrice && + jsxRuntime.jsx( + ThemedText.DarkGray, + { + children: jsxRuntime.jsxs( + macro.Trans, + { children: ['($', usdcPrice.toSignificant(6, { groupSeparator: ',' }), ')'] }, + void 0 + ), + }, + void 0 + ), + ], + } + ), + void 0 + ) +} +var templateObject_1$N + +var Wrapper$d = styled__default['default'].div( + templateObject_1$M || + (templateObject_1$M = __makeTemplateObject( + ['\n position: relative;\n padding: 8px;\n'], + ['\n position: relative;\n padding: 8px;\n'] + )) +) +var ArrowWrapper$1 = styled__default['default'].div( + templateObject_3$p || + (templateObject_3$p = __makeTemplateObject( + [ + '\n padding: 4px;\n border-radius: 12px;\n height: 32px;\n width: 32px;\n position: relative;\n margin-top: -14px;\n margin-bottom: -14px;\n left: calc(50% - 16px);\n /* transform: rotate(90deg); */\n background-color: ', + ';\n border: 4px solid ', + ';\n z-index: 2;\n ', + '\n', + ], + [ + '\n padding: 4px;\n border-radius: 12px;\n height: 32px;\n width: 32px;\n position: relative;\n margin-top: -14px;\n margin-bottom: -14px;\n left: calc(50% - 16px);\n /* transform: rotate(90deg); */\n background-color: ', + ';\n border: 4px solid ', + ';\n z-index: 2;\n ', + '\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.bg1 + }, + function (_a) { + var theme = _a.theme + return theme.bg0 + }, + function (_a) { + var clickable = _a.clickable + return clickable + ? styled.css( + templateObject_2$w || + (templateObject_2$w = __makeTemplateObject( + ['\n :hover {\n cursor: pointer;\n opacity: 0.8;\n }\n '], + ['\n :hover {\n cursor: pointer;\n opacity: 0.8;\n }\n '] + )) + ) + : null + } +) +var SectionBreak = styled__default['default'].div( + templateObject_4$g || + (templateObject_4$g = __makeTemplateObject( + ['\n height: 1px;\n width: 100%;\n background-color: ', ';\n'], + ['\n height: 1px;\n width: 100%;\n background-color: ', ';\n'] + )), + function (_a) { + var theme = _a.theme + return theme.bg3 + } +) +var ErrorText = styled__default['default'](rebass.Text)( + templateObject_5$e || (templateObject_5$e = __makeTemplateObject(['\n color: ', ';\n'], ['\n color: ', ';\n'])), + function (_a) { + var theme = _a.theme, + severity = _a.severity + return severity === 3 || severity === 4 + ? theme.red1 + : severity === 2 + ? theme.yellow2 + : severity === 1 + ? theme.text1 + : theme.text2 + } +) +var TruncatedText = styled__default['default'](rebass.Text)( + templateObject_6$a || + (templateObject_6$a = __makeTemplateObject( + ['\n text-overflow: ellipsis;\n max-width: 220px;\n overflow: hidden;\n text-align: right;\n'], + [ + '\n text-overflow: ellipsis;\n max-width: 220px;\n overflow: hidden;\n text-align: right;\n', + // styles + ] + )) +) +// styles +styled__default['default'].span( + templateObject_7$9 || + (templateObject_7$9 = __makeTemplateObject( + [ + "\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 &::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", + ] + )) +) +var SwapCallbackErrorInner = styled__default['default'].div( + templateObject_8$6 || + (templateObject_8$6 = __makeTemplateObject( + [ + '\n background-color: ', + ';\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: ', + ';\n z-index: -1;\n p {\n padding: 0;\n margin: 0;\n font-weight: 500;\n }\n', + ], + [ + '\n background-color: ', + ';\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: ', + ';\n z-index: -1;\n p {\n padding: 0;\n margin: 0;\n font-weight: 500;\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return polished.transparentize(0.9, theme.red1) + }, + function (_a) { + var theme = _a.theme + return theme.red1 + } +) +var SwapCallbackErrorInnerAlertTriangle = styled__default['default'].div( + templateObject_9$6 || + (templateObject_9$6 = __makeTemplateObject( + [ + '\n background-color: ', + ';\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 background-color: ', + ';\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', + ] + )), + function (_a) { + var theme = _a.theme + return polished.transparentize(0.9, theme.red1) + } +) +function SwapCallbackError(_a) { + var error = _a.error + return jsxRuntime.jsxs( + SwapCallbackErrorInner, + { + children: [ + jsxRuntime.jsx( + SwapCallbackErrorInnerAlertTriangle, + { children: jsxRuntime.jsx(reactFeather.AlertTriangle, { size: 24 }, void 0) }, + void 0 + ), + jsxRuntime.jsx('p', __assign({ style: { wordBreak: 'break-word' } }, { children: error }), void 0), + ], + }, + void 0 + ) +} +var SwapShowAcceptChanges = styled__default['default'](AutoColumn)( + templateObject_10$5 || + (templateObject_10$5 = __makeTemplateObject( + ['\n background-color: ', ';\n color: ', ';\n padding: 0.5rem;\n border-radius: 12px;\n margin-top: 8px;\n'], + ['\n background-color: ', ';\n color: ', ';\n padding: 0.5rem;\n border-radius: 12px;\n margin-top: 8px;\n'] + )), + function (_a) { + var theme = _a.theme + return polished.transparentize(0.95, theme.primary3) + }, + function (_a) { + var theme = _a.theme + return theme.primaryText1 + } +) +styled__default['default'](ThemedText.Black)( + templateObject_11$4 || + (templateObject_11$4 = __makeTemplateObject( + ['\n border-bottom: 1px solid ', ';\n padding-bottom: 0.5rem;\n'], + ['\n border-bottom: 1px solid ', ';\n padding-bottom: 0.5rem;\n'] + )), + function (_a) { + var theme = _a.theme + return theme.bg2 + } +) +var ResponsiveTooltipContainer = styled__default['default'](TooltipContainer)( + templateObject_13$1 || + (templateObject_13$1 = __makeTemplateObject( + ['\n background-color: ', ';\n border: 1px solid ', ';\n padding: 1rem;\n width: ', ';\n\n ', '\n'], + ['\n background-color: ', ';\n border: 1px solid ', ';\n padding: 1rem;\n width: ', ';\n\n ', '\n'] + )), + function (_a) { + var theme = _a.theme + return theme.bg0 + }, + function (_a) { + var theme = _a.theme + return theme.bg2 + }, + function (_a) { + var width = _a.width + return width !== null && width !== void 0 ? width : 'auto' + }, + function (_a) { + var theme = _a.theme, + origin = _a.origin + return theme.mediaWidth.upToExtraSmall( + templateObject_12$4 || + (templateObject_12$4 = __makeTemplateObject( + ['\n transform: scale(0.8);\n transform-origin: ', ';\n '], + ['\n transform: scale(0.8);\n transform-origin: ', ';\n '] + )), + origin !== null && origin !== void 0 ? origin : 'top left' + ) + } +) +styled__default['default'](TradePrice)( + templateObject_14$1 || (templateObject_14$1 = __makeTemplateObject(['\n ', '\n'], ['\n ', '\n'])), + loadingOpacityMixin +) +var templateObject_1$M, + templateObject_2$w, + templateObject_3$p, + templateObject_4$g, + templateObject_5$e, + templateObject_6$a, + templateObject_7$9, + templateObject_8$6, + templateObject_9$6, + templateObject_10$5, + templateObject_11$4, + templateObject_12$4, + templateObject_13$1, + templateObject_14$1 + +/** + * Formatted version of price impact text with warning colors + */ +function FormattedPriceImpact(_a) { + var priceImpact = _a.priceImpact + return jsxRuntime.jsx( + ErrorText, + __assign( + { fontWeight: 500, fontSize: 14, severity: warningSeverity(priceImpact) }, + { children: priceImpact ? priceImpact.multiply(-1).toFixed(2) + '%' : '-' } + ), + void 0 + ) +} + +var StyledCard$1 = styled__default['default'](Card)( + templateObject_1$L || (templateObject_1$L = __makeTemplateObject(['\n padding: 0;\n'], ['\n padding: 0;\n'])) +) +function TextWithLoadingPlaceholder(_a) { + var syncing = _a.syncing, + width = _a.width, + children = _a.children + return syncing + ? jsxRuntime.jsx( + LoadingRows, + { children: jsxRuntime.jsx('div', { style: { height: '15px', width: width + 'px' } }, void 0) }, + void 0 + ) + : children +} +function AdvancedSwapDetails(_a) { + var trade = _a.trade, + allowedSlippage = _a.allowedSlippage, + _b = _a.syncing, + syncing = _b === void 0 ? false : _b + var theme = React.useContext(styled.ThemeContext) + var chainId = useActiveWeb3React().chainId + var _c = React.useMemo( + function () { + if (!trade) return { expectedOutputAmount: undefined, priceImpact: undefined } + var expectedOutputAmount = trade.outputAmount + var realizedLpFeePercent = computeRealizedLPFeePercent(trade) + var priceImpact = trade.priceImpact.subtract(realizedLpFeePercent) + return { expectedOutputAmount, priceImpact } + }, + [trade] + ), + expectedOutputAmount = _c.expectedOutputAmount, + priceImpact = _c.priceImpact + return !trade + ? null + : jsxRuntime.jsx( + StyledCard$1, + { + children: jsxRuntime.jsxs( + AutoColumn, + __assign( + { gap: '8px' }, + { + children: [ + jsxRuntime.jsxs( + RowBetween, + { + children: [ + jsxRuntime.jsx( + RowFixed, + { + children: jsxRuntime.jsx( + ThemedText.SubHeader, + __assign( + { color: theme.text1 }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'Expected Output' }, void 0) } + ), + void 0 + ), + }, + void 0 + ), + jsxRuntime.jsx( + TextWithLoadingPlaceholder, + __assign( + { syncing, width: 65 }, + { + children: jsxRuntime.jsx( + ThemedText.Black, + __assign( + { textAlign: 'right', fontSize: 14 }, + { + children: expectedOutputAmount + ? expectedOutputAmount.toSignificant(6) + + ' ' + + expectedOutputAmount.currency.symbol + : '-', + } + ), + void 0 + ), + } + ), + void 0 + ), + ], + }, + void 0 + ), + jsxRuntime.jsxs( + RowBetween, + { + children: [ + jsxRuntime.jsx( + RowFixed, + { + children: jsxRuntime.jsx( + ThemedText.SubHeader, + __assign( + { color: theme.text1 }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'Price Impact' }, void 0) } + ), + void 0 + ), + }, + void 0 + ), + jsxRuntime.jsx( + TextWithLoadingPlaceholder, + __assign( + { syncing, width: 50 }, + { + children: jsxRuntime.jsx( + ThemedText.Black, + __assign( + { textAlign: 'right', fontSize: 14 }, + { + children: jsxRuntime.jsx(FormattedPriceImpact, { priceImpact }, void 0), + } + ), + void 0 + ), + } + ), + void 0 + ), + ], + }, + void 0 + ), + jsxRuntime.jsx(Separator$1, {}, void 0), + jsxRuntime.jsxs( + RowBetween, + { + children: [ + jsxRuntime.jsx( + RowFixed, + __assign( + { style: { marginRight: '20px' } }, + { + children: jsxRuntime.jsxs( + ThemedText.SubHeader, + __assign( + { color: theme.text3 }, + { + children: [ + trade.tradeType === sdkCore.TradeType.EXACT_INPUT + ? jsxRuntime.jsx(macro.Trans, { children: 'Minimum received' }, void 0) + : jsxRuntime.jsx(macro.Trans, { children: 'Maximum sent' }, void 0), + ' ', + jsxRuntime.jsx(macro.Trans, { children: 'after slippage' }, void 0), + ' (', + allowedSlippage.toFixed(2), + '%)', + ], + } + ), + void 0 + ), + } + ), + void 0 + ), + jsxRuntime.jsx( + TextWithLoadingPlaceholder, + __assign( + { syncing, width: 70 }, + { + children: jsxRuntime.jsx( + ThemedText.Black, + __assign( + { textAlign: 'right', fontSize: 14, color: theme.text3 }, + { + children: + trade.tradeType === sdkCore.TradeType.EXACT_INPUT + ? trade.minimumAmountOut(allowedSlippage).toSignificant(6) + + ' ' + + trade.outputAmount.currency.symbol + : trade.maximumAmountIn(allowedSlippage).toSignificant(6) + + ' ' + + trade.inputAmount.currency.symbol, + } + ), + void 0 + ), + } + ), + void 0 + ), + ], + }, + void 0 + ), + !(trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) || + !chainId || + !SUPPORTED_GAS_ESTIMATE_CHAIN_IDS.includes(chainId) + ? null + : jsxRuntime.jsxs( + RowBetween, + { + children: [ + jsxRuntime.jsx( + ThemedText.SubHeader, + __assign( + { color: theme.text3 }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'Network Fee' }, void 0) } + ), + void 0 + ), + jsxRuntime.jsx( + TextWithLoadingPlaceholder, + __assign( + { syncing, width: 50 }, + { + children: jsxRuntime.jsxs( + ThemedText.Black, + __assign( + { textAlign: 'right', fontSize: 14, color: theme.text3 }, + { children: ['~$', trade.gasUseEstimateUSD.toFixed(2)] } + ), + void 0 + ), + } + ), + void 0 + ), + ], + }, + void 0 + ), + ], + } + ), + void 0 + ), + }, + void 0 + ) +} +var templateObject_1$L + +var _path$3, _line$1, _line2, _path2 + +function _extends$4() { + _extends$4 = + 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$4.apply(this, arguments) +} + +var SvgGasIcon = function SvgGasIcon(props) { + return /*#__PURE__*/ React__namespace.createElement( + 'svg', + _extends$4( + { + width: 16, + height: 16, + viewBox: '0 0 16 16', + fill: 'none', + xmlns: 'http://www.w3.org/2000/svg', + }, + props + ), + _path$3 || + (_path$3 = /*#__PURE__*/ React__namespace.createElement('path', { + d: 'M10.0047 9.26921H10.2714C11.0078 9.26921 11.6047 9.86617 11.6047 10.6025V12.1359C11.6047 12.7987 12.142 13.3359 12.8047 13.3359C13.4675 13.3359 14.0047 12.7995 14.0047 12.1367V5.22059C14.0047 4.86697 13.7758 4.56227 13.5258 4.31223L10.6714 1.33594M4.00472 2.00254H8.00472C8.7411 2.00254 9.33805 2.59949 9.33805 3.33587V14.0015H2.67139V3.33587C2.67139 2.59949 3.26834 2.00254 4.00472 2.00254ZM14.0047 5.33587C14.0047 6.07225 13.4078 6.66921 12.6714 6.66921C11.935 6.66921 11.3381 6.07225 11.3381 5.33587C11.3381 4.59949 11.935 4.00254 12.6714 4.00254C13.4078 4.00254 14.0047 4.59949 14.0047 5.33587Z', + stroke: 'white', + })), + _line$1 || + (_line$1 = /*#__PURE__*/ React__namespace.createElement('line', { + x1: 4, + y1: 9.99414, + x2: 8, + y2: 9.99414, + stroke: 'white', + })), + _line2 || + (_line2 = /*#__PURE__*/ React__namespace.createElement('line', { + x1: 4, + y1: 11.9941, + x2: 8, + y2: 11.9941, + stroke: 'white', + })), + _path2 || + (_path2 = /*#__PURE__*/ React__namespace.createElement('path', { + d: 'M4 8.16113H8', + stroke: 'white', + })) + ) +} + +var BadgeVariant +;(function (BadgeVariant) { + BadgeVariant['DEFAULT'] = 'DEFAULT' + BadgeVariant['NEGATIVE'] = 'NEGATIVE' + BadgeVariant['POSITIVE'] = 'POSITIVE' + BadgeVariant['PRIMARY'] = 'PRIMARY' + BadgeVariant['WARNING'] = 'WARNING' + BadgeVariant['WARNING_OUTLINE'] = 'WARNING_OUTLINE' +})(BadgeVariant || (BadgeVariant = {})) +function pickBackgroundColor(variant, theme) { + switch (variant) { + case BadgeVariant.NEGATIVE: + return theme.error + case BadgeVariant.POSITIVE: + return theme.success + case BadgeVariant.PRIMARY: + return theme.primary1 + case BadgeVariant.WARNING: + return theme.warning + case BadgeVariant.WARNING_OUTLINE: + return 'transparent' + default: + return theme.bg2 + } +} +function pickBorder(variant, theme) { + switch (variant) { + case BadgeVariant.WARNING_OUTLINE: + return '1px solid ' + theme.warning + default: + return 'unset' + } +} +function pickFontColor(variant, theme) { + switch (variant) { + case BadgeVariant.NEGATIVE: + return polished.readableColor(theme.error) + case BadgeVariant.POSITIVE: + return polished.readableColor(theme.success) + case BadgeVariant.WARNING: + return polished.readableColor(theme.warning) + case BadgeVariant.WARNING_OUTLINE: + return theme.warning + default: + return polished.readableColor(theme.bg2) + } +} +var Badge = styled__default['default'].div( + templateObject_1$K || + (templateObject_1$K = __makeTemplateObject( + [ + '\n align-items: center;\n background-color: ', + ';\n border: ', + ';\n border-radius: 0.5rem;\n color: ', + ';\n display: inline-flex;\n padding: 4px 6px;\n justify-content: center;\n font-weight: 500;\n', + ], + [ + '\n align-items: center;\n background-color: ', + ';\n border: ', + ';\n border-radius: 0.5rem;\n color: ', + ';\n display: inline-flex;\n padding: 4px 6px;\n justify-content: center;\n font-weight: 500;\n', + ] + )), + function (_a) { + var theme = _a.theme, + variant = _a.variant + return pickBackgroundColor(variant, theme) + }, + function (_a) { + var theme = _a.theme, + variant = _a.variant + return pickBorder(variant, theme) + }, + function (_a) { + var theme = _a.theme, + variant = _a.variant + return pickFontColor(variant, theme) + } +) +var templateObject_1$K + +function safeNamehash(name) { + if (name === undefined) return undefined + try { + return hash.namehash(name) + } catch (error) { + console.debug(error) + return undefined + } +} + +/** + * Returns true if the string value is zero in hex + * @param hexNumberString + */ +function isZero(hexNumberString) { + return /^0x0*$/.test(hexNumberString) +} + +/** + * Does a lookup for an ENS name to find its contenthash. + */ +function useENSContentHash(ensName) { + var _a + var ensNodeArgument = React.useMemo( + function () { + return [ensName === null ? undefined : safeNamehash(ensName)] + }, + [ensName] + ) + var registrarContract = useENSRegistrarContract(false) + var resolverAddressResult = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument) + var resolverAddress = (_a = resolverAddressResult.result) === null || _a === void 0 ? void 0 : _a[0] + var resolverContract = useENSResolverContract( + resolverAddress && isZero(resolverAddress) ? undefined : resolverAddress, + false + ) + var contenthash = useSingleCallResult(resolverContract, 'contenthash', ensNodeArgument) + return React.useMemo( + function () { + var _a, _b + return { + contenthash: + (_b = (_a = contenthash.result) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 + ? _b + : null, + loading: resolverAddressResult.loading || contenthash.loading, + } + }, + [contenthash.loading, contenthash.result, resolverAddressResult.loading] + ) +} + +function useHttpLocations(uri) { + var ens = React.useMemo( + function () { + return uri ? parseENSAddress(uri) : undefined + }, + [uri] + ) + var resolvedContentHash = useENSContentHash(ens === null || ens === void 0 ? void 0 : ens.ensName) + return React.useMemo( + function () { + if (ens) { + return resolvedContentHash.contenthash ? uriToHttp(contenthashToUri(resolvedContentHash.contenthash)) : [] + } else { + return uri ? uriToHttp(uri) : [] + } + }, + [ens, resolvedContentHash.contenthash, uri] + ) +} + +var MaticLogo = + 'data:image/svg+xml,%3Csvg%20width%3D%221024%22%20height%3D%221024%22%20viewBox%3D%220%200%201024%201024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Ccircle%20cx%3D%22512%22%20cy%3D%22512%22%20r%3D%22512%22%20fill%3D%22%238247E5%22%2F%3E%3Cpath%20d%3D%22M681.469%20402.456C669.189%20395.312%20653.224%20395.312%20639.716%20402.456L543.928%20457.228L478.842%20492.949L383.055%20547.721C370.774%20554.865%20354.81%20554.865%20341.301%20547.721L265.162%20504.856C252.882%20497.712%20244.286%20484.614%20244.286%20470.325V385.786C244.286%20371.498%20251.654%20358.4%20265.162%20351.256L340.073%20309.581C352.353%20302.437%20368.318%20302.437%20381.827%20309.581L456.737%20351.256C469.018%20358.4%20477.614%20371.498%20477.614%20385.786V440.558L542.7%20403.646V348.874C542.7%20334.586%20535.332%20321.488%20521.824%20314.344L383.055%20235.758C370.774%20228.614%20354.81%20228.614%20341.301%20235.758L200.076%20314.344C186.567%20321.488%20179.199%20334.586%20179.199%20348.874V507.237C179.199%20521.525%20186.567%20534.623%20200.076%20541.767L341.301%20620.353C353.582%20627.498%20369.546%20627.498%20383.055%20620.353L478.842%20566.772L543.928%20529.86L639.716%20476.279C651.996%20469.135%20667.961%20469.135%20681.469%20476.279L756.38%20517.953C768.66%20525.098%20777.257%20538.195%20777.257%20552.484V637.023C777.257%20651.312%20769.888%20664.409%20756.38%20671.553L681.469%20714.419C669.189%20721.563%20653.224%20721.563%20639.716%20714.419L564.805%20672.744C552.525%20665.6%20543.928%20652.502%20543.928%20638.214V583.442L478.842%20620.353V675.125C478.842%20689.414%20486.21%20702.512%20499.719%20709.656L640.944%20788.242C653.224%20795.386%20669.189%20795.386%20682.697%20788.242L823.922%20709.656C836.203%20702.512%20844.799%20689.414%20844.799%20675.125V516.763C844.799%20502.474%20837.431%20489.377%20823.922%20482.232L681.469%20402.456Z%22%20fill%3D%22white%22%2F%3E%3C%2Fsvg%3E' + +function chainIdToNetworkName(networkId) { + switch (networkId) { + case SupportedChainId.MAINNET: + return 'ethereum' + case SupportedChainId.ARBITRUM_ONE: + return 'arbitrum' + case SupportedChainId.OPTIMISM: + return 'optimism' + default: + return 'ethereum' + } +} +function getNativeLogoURI(chainId) { + if (chainId === void 0) { + chainId = SupportedChainId.MAINNET + } + switch (chainId) { + case SupportedChainId.POLYGON_MUMBAI: + case SupportedChainId.POLYGON: + return MaticLogo + default: + return EthereumLogo + } +} +function getTokenLogoURI(address, chainId) { + if (chainId === void 0) { + chainId = SupportedChainId.MAINNET + } + var networkName = chainIdToNetworkName(chainId) + var networksWithUrls = [SupportedChainId.ARBITRUM_ONE, SupportedChainId.MAINNET, SupportedChainId.OPTIMISM] + if (networksWithUrls.includes(chainId)) { + return ( + 'https://raw.githubusercontent.com/Uniswap/assets/master/blockchains/' + + networkName + + '/assets/' + + address + + '/logo.png' + ) + } +} +function useCurrencyLogoURIs(currency) { + var locations = useHttpLocations(currency instanceof WrappedTokenInfo ? currency.logoURI : undefined) + return React.useMemo( + function () { + var logoURIs = __spreadArray([], __read(locations), false) + if (currency) { + if (currency.isNative) { + logoURIs.push(getNativeLogoURI(currency.chainId)) + } else if (currency.isToken) { + var logoURI = getTokenLogoURI(currency.address, currency.chainId) + if (logoURI) { + logoURIs.push(logoURI) + } + } + } + return logoURIs + }, + [currency, locations] + ) +} + +function useTheme() { + return React.useContext(styled.ThemeContext) +} + +var BAD_SRCS = {} +/** + * Renders an image by sequentially trying a list of URIs, and then eventually a fallback triangle alert + */ +function Logo(_a) { + var srcs = _a.srcs, + alt = _a.alt, + style = _a.style, + rest = __rest(_a, ['srcs', 'alt', 'style']) + var _b = __read(React.useState(0), 2), + refresh = _b[1] + var theme = useTheme() + var src = srcs.find(function (src) { + return !BAD_SRCS[src] + }) + if (src) { + return jsxRuntime.jsx( + 'img', + __assign({}, rest, { + alt, + src, + style, + onError() { + if (src) BAD_SRCS[src] = true + refresh(function (i) { + return i + 1 + }) + }, + }), + void 0 + ) + } + return jsxRuntime.jsx( + reactFeather.Slash, + __assign({}, rest, { style: __assign(__assign({}, style), { color: theme.bg4 }) }), + void 0 + ) +} + +var StyledLogo$1 = styled__default['default'](Logo)( + templateObject_1$J || + (templateObject_1$J = __makeTemplateObject( + [ + '\n width: ', + ';\n height: ', + ';\n background: radial-gradient(white 50%, #ffffff00 calc(75% + 1px), #ffffff00 100%);\n border-radius: 50%;\n -mox-box-shadow: 0 0 1px ', + ';\n -webkit-box-shadow: 0 0 1px ', + ';\n box-shadow: 0 0 1px ', + ';\n border: 0px solid rgba(255, 255, 255, 0);\n', + ], + [ + '\n width: ', + ';\n height: ', + ';\n background: radial-gradient(white 50%, #ffffff00 calc(75% + 1px), #ffffff00 100%);\n border-radius: 50%;\n -mox-box-shadow: 0 0 1px ', + ';\n -webkit-box-shadow: 0 0 1px ', + ';\n box-shadow: 0 0 1px ', + ';\n border: 0px solid rgba(255, 255, 255, 0);\n', + ] + )), + function (_a) { + var size = _a.size + return size + }, + function (_a) { + var size = _a.size + return size + }, + function (_a) { + var native = _a.native + return native ? 'white' : 'black' + }, + function (_a) { + var native = _a.native + return native ? 'white' : 'black' + }, + function (_a) { + var native = _a.native + return native ? 'white' : 'black' + } +) +function CurrencyLogo(_a) { + var _b, _c + var currency = _a.currency, + _d = _a.size, + size = _d === void 0 ? '24px' : _d, + style = _a.style, + rest = __rest(_a, ['currency', 'size', 'style']) + var logoURIs = useCurrencyLogoURIs(currency) + return jsxRuntime.jsx( + StyledLogo$1, + __assign( + { + size, + native: + (_b = currency === null || currency === void 0 ? void 0 : currency.isNative) !== null && _b !== void 0 + ? _b + : false, + srcs: logoURIs, + alt: + ((_c = currency === null || currency === void 0 ? void 0 : currency.symbol) !== null && _c !== void 0 + ? _c + : 'token') + ' logo', + style, + }, + rest + ), + void 0 + ) +} +var templateObject_1$J + +var Wrapper$c = styled__default['default'].div( + templateObject_1$I || + (templateObject_1$I = __makeTemplateObject( + ['\n position: relative;\n display: flex;\n flex-direction: row;\n margin-left: ', ';\n'], + ['\n position: relative;\n display: flex;\n flex-direction: row;\n margin-left: ', ';\n'] + )), + function (_a) { + var sizeraw = _a.sizeraw, + margin = _a.margin + return margin && (sizeraw / 3 + 8).toString() + 'px' + } +) +var HigherLogo = styled__default['default'](CurrencyLogo)( + templateObject_2$v || (templateObject_2$v = __makeTemplateObject(['\n z-index: 2;\n'], ['\n z-index: 2;\n'])) +) +var CoveredLogo = styled__default['default'](CurrencyLogo)( + templateObject_3$o || + (templateObject_3$o = __makeTemplateObject( + ['\n position: absolute;\n left: ', ' !important;\n'], + ['\n position: absolute;\n left: ', ' !important;\n'] + )), + function (_a) { + var sizeraw = _a.sizeraw + return '-' + (sizeraw / 2).toString() + 'px' + } +) +function DoubleCurrencyLogo(_a) { + var currency0 = _a.currency0, + currency1 = _a.currency1, + _b = _a.size, + size = _b === void 0 ? 16 : _b, + _c = _a.margin, + margin = _c === void 0 ? false : _c + return jsxRuntime.jsxs( + Wrapper$c, + __assign( + { sizeraw: size, margin }, + { + children: [ + currency0 && jsxRuntime.jsx(HigherLogo, { currency: currency0, size: size.toString() + 'px' }, void 0), + currency1 && + jsxRuntime.jsx(CoveredLogo, { currency: currency1, size: size.toString() + 'px', sizeraw: size }, void 0), + ], + } + ), + void 0 + ) +} +var templateObject_1$I, templateObject_2$v, templateObject_3$o + +/** + * Returns a WrappedTokenInfo from the active token lists when possible, + * or the passed token otherwise. */ +function useTokenInfoFromActiveList(currency) { + var chainId = useActiveWeb3React().chainId + var activeList = useCombinedActiveList() + return React.useMemo( + function () { + if (!chainId) return + if (currency.isNative) return currency + try { + return activeList[chainId][currency.wrapped.address].token + } catch (e) { + return currency + } + }, + [activeList, chainId, currency] + ) +} + +var _line + +function _extends$3() { + _extends$3 = + 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$3.apply(this, arguments) +} + +var SvgDotLine = function SvgDotLine(props) { + return /*#__PURE__*/ React__namespace.createElement( + 'svg', + _extends$3( + { + width: '100%', + height: 35, + viewBox: '800 0 300 200', + xmlns: 'http://www.w3.org/2000/svg', + }, + props + ), + _line || + (_line = /*#__PURE__*/ React__namespace.createElement('line', { + x1: 0, + x2: 2000, + y1: 100, + y2: 100, + stroke: 'currentColor', + strokeWidth: 20, + strokeLinecap: 'round', + strokeDasharray: '1, 45', + })) + ) +} + +var Wrapper$b = styled__default['default'](rebass.Box)( + templateObject_1$H || + (templateObject_1$H = __makeTemplateObject( + ['\n align-items: center;\n width: 100%;\n'], + ['\n align-items: center;\n width: 100%;\n'] + )) +) +var RouteContainerRow = styled__default['default'](Row)( + templateObject_2$u || + (templateObject_2$u = __makeTemplateObject( + ['\n display: grid;\n grid-template-columns: 24px 1fr 24px;\n'], + ['\n display: grid;\n grid-template-columns: 24px 1fr 24px;\n'] + )) +) +var RouteRow = styled__default['default'](Row)( + templateObject_3$n || + (templateObject_3$n = __makeTemplateObject( + [ + '\n align-items: center;\n display: flex;\n justify-content: center;\n padding: 0.1rem 0.5rem;\n position: relative;\n', + ], + [ + '\n align-items: center;\n display: flex;\n justify-content: center;\n padding: 0.1rem 0.5rem;\n position: relative;\n', + ] + )) +) +var PoolBadge = styled__default['default'](Badge)( + templateObject_4$f || + (templateObject_4$f = __makeTemplateObject( + ['\n display: flex;\n padding: 4px 4px;\n'], + ['\n display: flex;\n padding: 4px 4px;\n'] + )) +) +var DottedLine = styled__default['default'].div( + templateObject_5$d || + (templateObject_5$d = __makeTemplateObject( + [ + '\n display: flex;\n align-items: center;\n position: absolute;\n width: calc(100%);\n z-index: 1;\n opacity: 0.5;\n', + ], + [ + '\n display: flex;\n align-items: center;\n position: absolute;\n width: calc(100%);\n z-index: 1;\n opacity: 0.5;\n', + ] + )) +) +var DotColor = styled__default['default'](SvgDotLine)( + templateObject_6$9 || + (templateObject_6$9 = __makeTemplateObject( + ['\n path {\n stroke: ', ';\n }\n'], + ['\n path {\n stroke: ', ';\n }\n'] + )), + function (_a) { + var theme = _a.theme + return theme.bg4 + } +) +var OpaqueBadge = styled__default['default'](Badge)( + templateObject_7$8 || + (templateObject_7$8 = __makeTemplateObject( + [ + '\n background-color: ', + ';\n border-radius: 8px;\n display: grid;\n font-size: 12px;\n grid-gap: 4px;\n grid-auto-flow: column;\n justify-content: start;\n padding: 4px 6px 4px 4px;\n z-index: ', + ';\n', + ], + [ + '\n background-color: ', + ';\n border-radius: 8px;\n display: grid;\n font-size: 12px;\n grid-gap: 4px;\n grid-auto-flow: column;\n justify-content: start;\n padding: 4px 6px 4px 4px;\n z-index: ', + ';\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.bg2 + }, + Z_INDEX.sticky +) +var ProtocolBadge = styled__default['default'](Badge)( + templateObject_8$5 || + (templateObject_8$5 = __makeTemplateObject( + [ + '\n background-color: ', + ';\n border-radius: 4px;\n color: ', + ';\n font-size: 10px;\n padding: 2px 4px;\n z-index: ', + ';\n', + ], + [ + '\n background-color: ', + ';\n border-radius: 4px;\n color: ', + ';\n font-size: 10px;\n padding: 2px 4px;\n z-index: ', + ';\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.bg3 + }, + function (_a) { + var theme = _a.theme + return theme.text2 + }, + Z_INDEX.sticky + 1 +) +var BadgeText = styled__default['default'](ThemedText.Small)( + templateObject_9$5 || + (templateObject_9$5 = __makeTemplateObject(['\n word-break: normal;\n'], ['\n word-break: normal;\n'])) +) +function RoutingDiagram(_a) { + var currencyIn = _a.currencyIn, + currencyOut = _a.currencyOut, + routes = _a.routes + var tokenIn = useTokenInfoFromActiveList(currencyIn) + var tokenOut = useTokenInfoFromActiveList(currencyOut) + return jsxRuntime.jsx( + Wrapper$b, + { + children: routes.map(function (entry, index) { + return jsxRuntime.jsxs( + RouteContainerRow, + { + children: [ + jsxRuntime.jsx(CurrencyLogo, { currency: tokenIn, size: '20px' }, void 0), + jsxRuntime.jsx(Route, { entry }, void 0), + jsxRuntime.jsx(CurrencyLogo, { currency: tokenOut, size: '20px' }, void 0), + ], + }, + index + ) + }), + }, + void 0 + ) +} +function Route(_a) { + var _b = _a.entry, + percent = _b.percent, + path = _b.path, + protocol = _b.protocol + return jsxRuntime.jsxs( + RouteRow, + { + children: [ + jsxRuntime.jsx(DottedLine, { children: jsxRuntime.jsx(DotColor, {}, void 0) }, void 0), + jsxRuntime.jsxs( + OpaqueBadge, + { + children: [ + jsxRuntime.jsx( + ProtocolBadge, + { + children: jsxRuntime.jsx( + BadgeText, + __assign({ fontSize: 12 }, { children: protocol.toUpperCase() }), + void 0 + ), + }, + void 0 + ), + jsxRuntime.jsxs( + BadgeText, + __assign({ fontSize: 14, style: { minWidth: 'auto' } }, { children: [percent.toSignificant(2), '%'] }), + void 0 + ), + ], + }, + void 0 + ), + jsxRuntime.jsx( + AutoRow, + __assign( + { gap: '1px', width: '100%', style: { justifyContent: 'space-evenly', zIndex: 2 } }, + { + children: path.map(function (_a, index) { + var _b = __read(_a, 3), + currency0 = _b[0], + currency1 = _b[1], + feeAmount = _b[2] + return jsxRuntime.jsx(Pool, { currency0, currency1, feeAmount }, index) + }), + } + ), + void 0 + ), + ], + }, + void 0 + ) +} +function Pool(_a) { + var currency0 = _a.currency0, + currency1 = _a.currency1, + feeAmount = _a.feeAmount + var tokenInfo0 = useTokenInfoFromActiveList(currency0) + var tokenInfo1 = useTokenInfoFromActiveList(currency1) + // TODO - link pool icon to info.uniswap.org via query params + return jsxRuntime.jsx( + MouseoverTooltip, + __assign( + { + text: jsxRuntime.jsxs( + macro.Trans, + { + children: [ + (tokenInfo0 === null || tokenInfo0 === void 0 ? void 0 : tokenInfo0.symbol) + + '/' + + (tokenInfo1 === null || tokenInfo1 === void 0 ? void 0 : tokenInfo1.symbol) + + ' ' + + feeAmount / 10000, + '% pool', + ], + }, + void 0 + ), + }, + { + children: jsxRuntime.jsxs( + PoolBadge, + { + children: [ + jsxRuntime.jsx( + rebass.Box, + __assign( + { margin: '0 4px 0 12px' }, + { + children: jsxRuntime.jsx( + DoubleCurrencyLogo, + { currency0: tokenInfo1, currency1: tokenInfo0, size: 20 }, + void 0 + ), + } + ), + void 0 + ), + jsxRuntime.jsxs( + ThemedText.Small, + __assign({ fontSize: 14 }, { children: [feeAmount / 10000, '%'] }), + void 0 + ), + ], + }, + void 0 + ), + } + ), + void 0 + ) +} +var templateObject_1$H, + templateObject_2$u, + templateObject_3$n, + templateObject_4$f, + templateObject_5$d, + templateObject_6$9, + templateObject_7$8, + templateObject_8$5, + templateObject_9$5 + +var AUTO_ROUTER_SUPPORTED_CHAINS = Object.values(smartOrderRouter.ChainId) + +function useAutoRouterSupported() { + var chainId = useActiveWeb3React().chainId + return Boolean(chainId && AUTO_ROUTER_SUPPORTED_CHAINS.includes(chainId)) +} + +var _defs, _path$2 + +function _extends$2() { + _extends$2 = + 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$2.apply(this, arguments) +} + +var SvgAutoRouter = function SvgAutoRouter(props) { + return /*#__PURE__*/ React__namespace.createElement( + 'svg', + _extends$2( + { + width: 23, + height: 20, + viewBox: '0 0 23 20', + fill: 'none', + xmlns: 'http://www.w3.org/2000/svg', + }, + props + ), + _defs || + (_defs = /*#__PURE__*/ React__namespace.createElement( + 'defs', + null, + /*#__PURE__*/ React__namespace.createElement( + 'linearGradient', + { + id: 'gradient1', + x1: 0, + y1: 0, + x2: 1, + y2: 0, + gradientTransform: 'rotate(95)', + }, + /*#__PURE__*/ React__namespace.createElement('stop', { + id: 'stop1', + offset: 0, + stopColor: '#2274E2', + }), + /*#__PURE__*/ React__namespace.createElement('stop', { + id: 'stop1', + offset: 0.5, + stopColor: '#2274E2', + }), + /*#__PURE__*/ React__namespace.createElement('stop', { + id: 'stop2', + offset: 1, + stopColor: '#3FB672', + }) + ) + )), + _path$2 || + (_path$2 = /*#__PURE__*/ React__namespace.createElement('path', { + d: 'M16 16C10 16 9 10 5 10M16 16C16 17.6569 17.3431 19 19 19C20.6569 19 22 17.6569 22 16C22 14.3431 20.6569 13 19 13C17.3431 13 16 14.3431 16 16ZM5 10C9 10 10 4 16 4M5 10H1.5M16 4C16 5.65685 17.3431 7 19 7C20.6569 7 22 5.65685 22 4C22 2.34315 20.6569 1 19 1C17.3431 1 16 2.34315 16 4Z', + strokeWidth: 2, + strokeLinecap: 'round', + strokeLinejoin: 'round', + stroke: 'url(#gradient1)', + })) + ) +} + +var _path$1 + +function _extends$1() { + _extends$1 = + 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$1.apply(this, arguments) +} + +var SvgStaticRoute = function SvgStaticRoute(props) { + return /*#__PURE__*/ React__namespace.createElement( + 'svg', + _extends$1( + { + width: 20, + height: 20, + viewBox: '0 0 20 22', + fill: 'none', + xmlns: 'http://www.w3.org/2000/svg', + }, + props + ), + _path$1 || + (_path$1 = /*#__PURE__*/ React__namespace.createElement('path', { + d: 'M19 18C19 18.5523 18.5523 19 18 19V21C19.6569 21 21 19.6569 21 18H19ZM18 19C17.4477 19 17 18.5523 17 18H15C15 19.6569 16.3431 21 18 21V19ZM17 18C17 17.4477 17.4477 17 18 17V15C16.3431 15 15 16.3431 15 18H17ZM18 17C18.5523 17 19 17.4477 19 18H21C21 16.3431 19.6569 15 18 15V17ZM8 7H16V5H8V7ZM16 11H8V13H16V11ZM8 19H16V17H8V19ZM4 15C4 17.2091 5.79086 19 8 19V17C6.89543 17 6 16.1046 6 15H4ZM8 11C5.79086 11 4 12.7909 4 15H6C6 13.8954 6.89543 13 8 13V11ZM18 9C18 10.1046 17.1046 11 16 11V13C18.2091 13 20 11.2091 20 9H18ZM16 7C17.1046 7 18 7.89543 18 9H20C20 6.79086 18.2091 5 16 5V7ZM7 6C7 6.55228 6.55228 7 6 7V9C7.65685 9 9 7.65685 9 6H7ZM6 7C5.44772 7 5 6.55228 5 6H3C3 7.65685 4.34315 9 6 9V7ZM5 6C5 5.44772 5.44772 5 6 5V3C4.34315 3 3 4.34315 3 6H5ZM6 5C6.55228 5 7 5.44772 7 6H9C9 4.34315 7.65685 3 6 3V5Z', + })) + ) +} + +var StyledAutoRouterIcon = styled__default['default'](SvgAutoRouter)( + templateObject_1$G || + (templateObject_1$G = __makeTemplateObject( + ['\n height: 16px;\n width: 16px;\n\n :hover {\n filter: brightness(1.3);\n }\n'], + ['\n height: 16px;\n width: 16px;\n\n :hover {\n filter: brightness(1.3);\n }\n'] + )) +) +var StyledStaticRouterIcon = styled__default['default'](SvgStaticRoute)( + templateObject_2$t || + (templateObject_2$t = __makeTemplateObject( + ['\n height: 16px;\n width: 16px;\n\n fill: ', ';\n\n :hover {\n filter: brightness(1.3);\n }\n'], + ['\n height: 16px;\n width: 16px;\n\n fill: ', ';\n\n :hover {\n filter: brightness(1.3);\n }\n'] + )), + function (_a) { + var theme = _a.theme + return theme.text3 + } +) +var StyledAutoRouterLabel = styled__default['default'](ThemedText.Black)( + templateObject_3$m || + (templateObject_3$m = __makeTemplateObject( + [ + '\n line-height: 1rem;\n\n /* fallback color */\n color: ', + ';\n\n @supports (-webkit-background-clip: text) and (-webkit-text-fill-color: transparent) {\n background-image: linear-gradient(90deg, #2172e5 0%, #54e521 163.16%);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n }\n', + ], + [ + '\n line-height: 1rem;\n\n /* fallback color */\n color: ', + ';\n\n @supports (-webkit-background-clip: text) and (-webkit-text-fill-color: transparent) {\n background-image: linear-gradient(90deg, #2172e5 0%, #54e521 163.16%);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.green1 + } +) +function AutoRouterLogo() { + var autoRouterSupported = useAutoRouterSupported() + return autoRouterSupported + ? jsxRuntime.jsx(StyledAutoRouterIcon, {}, void 0) + : jsxRuntime.jsx(StyledStaticRouterIcon, {}, void 0) +} +function AutoRouterLabel() { + var autoRouterSupported = useAutoRouterSupported() + return autoRouterSupported + ? jsxRuntime.jsx(StyledAutoRouterLabel, __assign({ fontSize: 14 }, { children: 'Auto Router' }), void 0) + : jsxRuntime.jsx( + ThemedText.Black, + __assign({ fontSize: 14 }, { children: jsxRuntime.jsx(macro.Trans, { children: 'Trade Route' }, void 0) }), + void 0 + ) +} +var templateObject_1$G, templateObject_2$t, templateObject_3$m + +var Wrapper$a = styled__default['default'](AutoColumn)( + templateObject_1$F || + (templateObject_1$F = __makeTemplateObject( + ['\n padding: ', ';\n border-radius: 16px;\n border: 1px solid ', ';\n cursor: pointer;\n'], + ['\n padding: ', ';\n border-radius: 16px;\n border: 1px solid ', ';\n cursor: pointer;\n'] + )), + function (_a) { + var fixedOpen = _a.fixedOpen + return fixedOpen ? '12px' : '12px 8px 12px 12px' + }, + function (_a) { + var theme = _a.theme, + fixedOpen = _a.fixedOpen + return fixedOpen ? 'transparent' : theme.bg2 + } +) +var OpenCloseIcon = styled__default['default'](reactFeather.Plus)( + templateObject_2$s || + (templateObject_2$s = __makeTemplateObject( + [ + '\n margin-left: 8px;\n height: 20px;\n stroke-width: 2px;\n transition: transform 0.1s;\n transform: ', + ';\n stroke: ', + ';\n cursor: pointer;\n :hover {\n opacity: 0.8;\n }\n', + ], + [ + '\n margin-left: 8px;\n height: 20px;\n stroke-width: 2px;\n transition: transform 0.1s;\n transform: ', + ';\n stroke: ', + ';\n cursor: pointer;\n :hover {\n opacity: 0.8;\n }\n', + ] + )), + function (_a) { + var open = _a.open + return open ? 'rotate(45deg)' : 'none' + }, + function (_a) { + var theme = _a.theme + return theme.text3 + } +) +var V2_DEFAULT_FEE_TIER = 3000 +var SwapRoute = React.memo(function SwapRoute(_a) { + var trade = _a.trade, + syncing = _a.syncing, + _b = _a.fixedOpen, + fixedOpen = _b === void 0 ? false : _b, + rest = __rest(_a, ['trade', 'syncing', 'fixedOpen']) + var autoRouterSupported = useAutoRouterSupported() + var routes = getTokenPath(trade) + var _c = __read(React.useState(false), 2), + open = _c[0], + setOpen = _c[1] + var chainId = useActiveWeb3React().chainId + var _d = __read(useDarkModeManager(), 1), + darkMode = _d[0] + var formattedGasPriceString = (trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) + ? trade.gasUseEstimateUSD.toFixed(2) === '0.00' + ? '<$0.01' + : '$' + trade.gasUseEstimateUSD.toFixed(2) + : undefined + return jsxRuntime.jsxs( + Wrapper$a, + __assign( + {}, + rest, + { darkMode, fixedOpen }, + { + children: [ + jsxRuntime.jsxs( + RowBetween, + __assign( + { + onClick() { + return setOpen(!open) + }, + }, + { + children: [ + jsxRuntime.jsxs( + AutoRow, + __assign( + { gap: '4px', width: 'auto' }, + { + children: [ + jsxRuntime.jsx(AutoRouterLogo, {}, void 0), + jsxRuntime.jsx(AutoRouterLabel, {}, void 0), + ], + } + ), + void 0 + ), + fixedOpen ? null : jsxRuntime.jsx(OpenCloseIcon, { open }, void 0), + ], + } + ), + void 0 + ), + jsxRuntime.jsx( + AnimatedDropdown, + __assign( + { open: open || fixedOpen }, + { + children: jsxRuntime.jsxs( + AutoRow, + __assign( + { gap: '4px', width: 'auto', style: { paddingTop: '12px', margin: 0 } }, + { + children: [ + syncing + ? jsxRuntime.jsx( + LoadingRows, + { + children: jsxRuntime.jsx('div', { style: { width: '400px', height: '30px' } }, void 0), + }, + void 0 + ) + : jsxRuntime.jsx( + RoutingDiagram, + { + currencyIn: trade.inputAmount.currency, + currencyOut: trade.outputAmount.currency, + routes, + }, + void 0 + ), + autoRouterSupported && + jsxRuntime.jsxs( + jsxRuntime.Fragment, + { + children: [ + jsxRuntime.jsx(Separator$1, {}, void 0), + syncing + ? jsxRuntime.jsx( + LoadingRows, + { + children: jsxRuntime.jsx( + 'div', + { style: { width: '250px', height: '15px' } }, + void 0 + ), + }, + void 0 + ) + : jsxRuntime.jsxs( + ThemedText.Main, + __assign( + { fontSize: 12, width: 400, margin: 0 }, + { + children: [ + (trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) && + chainId && + SUPPORTED_GAS_ESTIMATE_CHAIN_IDS.includes(chainId) + ? jsxRuntime.jsxs( + macro.Trans, + { + children: [ + 'Best price route costs ~', + formattedGasPriceString, + ' in gas. ', + ], + }, + void 0 + ) + : null, + ' ', + jsxRuntime.jsx( + macro.Trans, + { + children: + 'This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.', + }, + void 0 + ), + ], + } + ), + void 0 + ), + ], + }, + void 0 + ), + ], + } + ), + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ) +}) +function getTokenPath(trade) { + return trade.swaps.map(function (_a) { + var _b = _a.route, + tokenPath = _b.path, + pools = _b.pools, + protocol = _b.protocol, + inputAmount = _a.inputAmount, + outputAmount = _a.outputAmount + var portion = + trade.tradeType === sdkCore.TradeType.EXACT_INPUT + ? inputAmount.divide(trade.inputAmount) + : outputAmount.divide(trade.outputAmount) + var percent = new sdkCore.Percent(portion.numerator, portion.denominator) + var path = [] + for (var i = 0; i < pools.length; i++) { + var nextPool = pools[i] + var tokenIn = tokenPath[i] + var tokenOut = tokenPath[i + 1] + var entry = [tokenIn, tokenOut, nextPool instanceof v2Sdk.Pair ? V2_DEFAULT_FEE_TIER : nextPool.fee] + path.push(entry) + } + return { + percent, + path, + protocol, + } + }) +} +var templateObject_1$F, templateObject_2$s + +var GasWrapper = styled__default['default'](RowFixed)( + templateObject_1$E || + (templateObject_1$E = __makeTemplateObject( + [ + '\n border-radius: 8px;\n padding: 4px 6px;\n height: 24px;\n color: ', + ';\n background-color: ', + ';\n font-size: 14px;\n font-weight: 500;\n user-select: none;\n', + ], + [ + '\n border-radius: 8px;\n padding: 4px 6px;\n height: 24px;\n color: ', + ';\n background-color: ', + ';\n font-size: 14px;\n font-weight: 500;\n user-select: none;\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.text3 + }, + function (_a) { + var theme = _a.theme + return theme.bg1 + } +) +var StyledGasIcon = styled__default['default'](SvgGasIcon)( + templateObject_2$r || + (templateObject_2$r = __makeTemplateObject( + ['\n margin-right: 4px;\n height: 14px;\n & > * {\n stroke: ', ';\n }\n'], + ['\n margin-right: 4px;\n height: 14px;\n & > * {\n stroke: ', ';\n }\n'] + )), + function (_a) { + var theme = _a.theme + return theme.text3 + } +) +function GasEstimateBadge(_a) { + var _b + var trade = _a.trade, + loading = _a.loading, + showRoute = _a.showRoute, + disableHover = _a.disableHover + var formattedGasPriceString = (trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) + ? trade.gasUseEstimateUSD.toFixed(2) === '0.00' + ? '<$0.01' + : '$' + trade.gasUseEstimateUSD.toFixed(2) + : undefined + return jsxRuntime.jsx( + MouseoverTooltipContent, + __assign( + { + wrap: false, + disableHover, + content: loading + ? null + : jsxRuntime.jsx( + ResponsiveTooltipContainer, + __assign( + { + origin: 'top right', + style: { + padding: showRoute ? '0' : '12px', + border: 'none', + borderRadius: showRoute ? '16px' : '12px', + maxWidth: '400px', + }, + }, + { + children: showRoute + ? trade + ? jsxRuntime.jsx(SwapRoute, { trade, syncing: loading, fixedOpen: showRoute }, void 0) + : null + : jsxRuntime.jsxs( + AutoColumn, + __assign( + { gap: '4px', justify: 'center' }, + { + children: [ + jsxRuntime.jsx( + ThemedText.Main, + __assign( + { fontSize: '12px', textAlign: 'center' }, + { + children: jsxRuntime.jsx( + macro.Trans, + { children: 'Estimated network fee' }, + void 0 + ), + } + ), + void 0 + ), + jsxRuntime.jsx( + ThemedText.Body, + __assign( + { textAlign: 'center', fontWeight: 500, style: { userSelect: 'none' } }, + { + children: jsxRuntime.jsxs( + macro.Trans, + { + children: [ + '$', + (_b = + trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) === + null || _b === void 0 + ? void 0 + : _b.toFixed(2), + ], + }, + void 0 + ), + } + ), + void 0 + ), + jsxRuntime.jsx( + ThemedText.Main, + __assign( + { fontSize: '10px', textAlign: 'center', maxWidth: '140px', color: 'text3' }, + { + children: jsxRuntime.jsx( + macro.Trans, + { children: 'Estimate may differ due to your wallet gas settings' }, + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + } + ), + void 0 + ), + placement: 'bottom', + onOpen() { + return ReactGA__default['default'].event({ + category: 'Gas', + action: 'Gas Details Tooltip Open', + }) + }, + }, + { + children: jsxRuntime.jsx( + LoadingOpacityContainer, + __assign( + { $loading: loading }, + { + children: jsxRuntime.jsxs( + GasWrapper, + { + children: [ + jsxRuntime.jsx(StyledGasIcon, {}, void 0), + formattedGasPriceString !== null && formattedGasPriceString !== void 0 + ? formattedGasPriceString + : null, + ], + }, + void 0 + ), + } + ), + void 0 + ), + } + ), + void 0 + ) +} +var templateObject_1$E, templateObject_2$r + +var Wrapper$9 = styled__default['default'](Row)( + templateObject_1$D || + (templateObject_1$D = __makeTemplateObject( + ['\n width: 100%;\n justify-content: center;\n'], + ['\n width: 100%;\n justify-content: center;\n'] + )) +) +var StyledInfoIcon = styled__default['default'](reactFeather.Info)( + templateObject_2$q || + (templateObject_2$q = __makeTemplateObject( + ['\n height: 16px;\n width: 16px;\n margin-right: 4px;\n color: ', ';\n'], + ['\n height: 16px;\n width: 16px;\n margin-right: 4px;\n color: ', ';\n'] + )), + function (_a) { + var theme = _a.theme + return theme.text3 + } +) +var StyledCard = styled__default['default'](OutlineCard)( + templateObject_3$l || + (templateObject_3$l = __makeTemplateObject( + ['\n padding: 12px;\n border: 1px solid ', ';\n'], + ['\n padding: 12px;\n border: 1px solid ', ';\n'] + )), + function (_a) { + var theme = _a.theme + return theme.bg2 + } +) +var StyledHeaderRow = styled__default['default'](RowBetween)( + templateObject_4$e || + (templateObject_4$e = __makeTemplateObject( + [ + '\n padding: 4px 8px;\n border-radius: 12px;\n background-color: ', + ';\n align-items: center;\n cursor: ', + ';\n min-height: 40px;\n\n :hover {\n background-color: ', + ';\n }\n', + ], + [ + '\n padding: 4px 8px;\n border-radius: 12px;\n background-color: ', + ';\n align-items: center;\n cursor: ', + ';\n min-height: 40px;\n\n :hover {\n background-color: ', + ';\n }\n', + ] + )), + function (_a) { + var open = _a.open, + theme = _a.theme + return open ? theme.bg1 : 'transparent' + }, + function (_a) { + var disabled = _a.disabled + return disabled ? 'initial' : 'pointer' + }, + function (_a) { + var theme = _a.theme, + disabled = _a.disabled + return disabled ? theme.bg1 : polished.darken(0.015, theme.bg1) + } +) +var RotatingArrow = styled__default['default'](reactFeather.ChevronDown)( + templateObject_5$c || + (templateObject_5$c = __makeTemplateObject( + ['\n transform: ', ';\n transition: transform 0.1s linear;\n'], + ['\n transform: ', ';\n transition: transform 0.1s linear;\n'] + )), + function (_a) { + var open = _a.open + return open ? 'rotate(180deg)' : 'none' + } +) +var StyledPolling = styled__default['default'].div( + templateObject_7$7 || + (templateObject_7$7 = __makeTemplateObject( + [ + '\n display: flex;\n height: 16px;\n width: 16px;\n margin-right: 2px;\n margin-left: 10px;\n align-items: center;\n color: ', + ';\n transition: 250ms ease color;\n\n ', + '\n', + ], + [ + '\n display: flex;\n height: 16px;\n width: 16px;\n margin-right: 2px;\n margin-left: 10px;\n align-items: center;\n color: ', + ';\n transition: 250ms ease color;\n\n ', + '\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.text1 + }, + function (_a) { + var theme = _a.theme + return theme.mediaWidth.upToMedium( + templateObject_6$8 || + (templateObject_6$8 = __makeTemplateObject(['\n display: none;\n '], ['\n display: none;\n '])) + ) + } +) +var StyledPollingDot = styled__default['default'].div( + templateObject_8$4 || + (templateObject_8$4 = __makeTemplateObject( + [ + '\n width: 8px;\n height: 8px;\n min-height: 8px;\n min-width: 8px;\n border-radius: 50%;\n position: relative;\n background-color: ', + ';\n transition: 250ms ease background-color;\n', + ], + [ + '\n width: 8px;\n height: 8px;\n min-height: 8px;\n min-width: 8px;\n border-radius: 50%;\n position: relative;\n background-color: ', + ';\n transition: 250ms ease background-color;\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.bg2 + } +) +var rotate360 = styled.keyframes( + templateObject_9$4 || + (templateObject_9$4 = __makeTemplateObject( + ['\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n'], + ['\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n'] + )) +) +var Spinner = styled__default['default'].div( + templateObject_10$4 || + (templateObject_10$4 = __makeTemplateObject( + [ + '\n animation: ', + ' 1s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n transform: translateZ(0);\n border-top: 1px solid transparent;\n border-right: 1px solid transparent;\n border-bottom: 1px solid transparent;\n border-left: 2px solid ', + ';\n background: transparent;\n width: 14px;\n height: 14px;\n border-radius: 50%;\n position: relative;\n transition: 250ms ease border-color;\n left: -3px;\n top: -3px;\n', + ], + [ + '\n animation: ', + ' 1s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n transform: translateZ(0);\n border-top: 1px solid transparent;\n border-right: 1px solid transparent;\n border-bottom: 1px solid transparent;\n border-left: 2px solid ', + ';\n background: transparent;\n width: 14px;\n height: 14px;\n border-radius: 50%;\n position: relative;\n transition: 250ms ease border-color;\n left: -3px;\n top: -3px;\n', + ] + )), + rotate360, + function (_a) { + var theme = _a.theme + return theme.text1 + } +) +function SwapDetailsDropdown(_a) { + var trade = _a.trade, + syncing = _a.syncing, + loading = _a.loading, + showInverted = _a.showInverted, + setShowInverted = _a.setShowInverted, + allowedSlippage = _a.allowedSlippage + var theme = styled.useTheme() + var chainId = useActiveWeb3React().chainId + var _b = __read(React.useState(false), 2), + showDetails = _b[0], + setShowDetails = _b[1] + return jsxRuntime.jsx( + Wrapper$9, + { + children: jsxRuntime.jsxs( + AutoColumn, + __assign( + { gap: '8px', style: { width: '100%', marginBottom: '-8px' } }, + { + children: [ + jsxRuntime.jsxs( + StyledHeaderRow, + __assign( + { + onClick() { + return setShowDetails(!showDetails) + }, + disabled: !trade, + open: showDetails, + }, + { + children: [ + jsxRuntime.jsxs( + RowFixed, + __assign( + { style: { position: 'relative' } }, + { + children: [ + loading || syncing + ? jsxRuntime.jsx( + StyledPolling, + { + children: jsxRuntime.jsx( + StyledPollingDot, + { children: jsxRuntime.jsx(Spinner, {}, void 0) }, + void 0 + ), + }, + void 0 + ) + : jsxRuntime.jsx( + HideSmall, + { + children: jsxRuntime.jsx( + MouseoverTooltipContent, + __assign( + { + wrap: false, + content: jsxRuntime.jsx( + ResponsiveTooltipContainer, + __assign( + { origin: 'top right', style: { padding: '0' } }, + { + children: jsxRuntime.jsx( + Card, + __assign( + { padding: '12px' }, + { + children: jsxRuntime.jsx( + AdvancedSwapDetails, + { + trade, + allowedSlippage, + syncing, + }, + void 0 + ), + } + ), + void 0 + ), + } + ), + void 0 + ), + placement: 'bottom', + disableHover: showDetails, + }, + { + children: jsxRuntime.jsx( + StyledInfoIcon, + { color: trade ? theme.text3 : theme.bg3 }, + void 0 + ), + } + ), + void 0 + ), + }, + void 0 + ), + trade + ? jsxRuntime.jsx( + LoadingOpacityContainer, + __assign( + { $loading: syncing }, + { + children: jsxRuntime.jsx( + TradePrice, + { + price: trade.executionPrice, + showInverted, + setShowInverted, + }, + void 0 + ), + } + ), + void 0 + ) + : loading || syncing + ? jsxRuntime.jsx( + ThemedText.Main, + __assign( + { fontSize: 14 }, + { + children: jsxRuntime.jsx( + macro.Trans, + { children: 'Fetching best price...' }, + void 0 + ), + } + ), + void 0 + ) + : null, + ], + } + ), + void 0 + ), + jsxRuntime.jsxs( + RowFixed, + { + children: [ + !(trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) || + showDetails || + !chainId || + !SUPPORTED_GAS_ESTIMATE_CHAIN_IDS.includes(chainId) + ? null + : jsxRuntime.jsx( + GasEstimateBadge, + { + trade, + loading: syncing || loading, + showRoute: !showDetails, + disableHover: showDetails, + }, + void 0 + ), + jsxRuntime.jsx( + RotatingArrow, + { stroke: trade ? theme.text3 : theme.bg3, open: Boolean(trade && showDetails) }, + void 0 + ), + ], + }, + void 0 + ), + ], + } + ), + void 0 + ), + jsxRuntime.jsx( + AnimatedDropdown, + __assign( + { open: showDetails }, + { + children: jsxRuntime.jsxs( + AutoColumn, + __assign( + { gap: '8px', style: { padding: '0', paddingBottom: '8px' } }, + { + children: [ + trade + ? jsxRuntime.jsx( + StyledCard, + { + children: jsxRuntime.jsx( + AdvancedSwapDetails, + { trade, allowedSlippage, syncing }, + void 0 + ), + }, + void 0 + ) + : null, + trade ? jsxRuntime.jsx(SwapRoute, { trade, syncing }, void 0) : null, + ], + } + ), + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + }, + void 0 + ) +} +var templateObject_1$D, + templateObject_2$q, + templateObject_3$l, + templateObject_4$e, + templateObject_5$c, + templateObject_6$8, + templateObject_7$7, + templateObject_8$4, + templateObject_9$4, + templateObject_10$4 + +var BaseButton = styled__default['default'](styledComponents.Button)( + templateObject_1$C || + (templateObject_1$C = __makeTemplateObject( + [ + '\n padding: ', + ';\n width: ', + ';\n font-weight: 500;\n text-align: center;\n border-radius: ', + ';\n outline: none;\n border: 1px solid transparent;\n color: ', + ';\n text-decoration: none;\n display: flex;\n justify-content: center;\n flex-wrap: nowrap;\n align-items: center;\n cursor: pointer;\n position: relative;\n z-index: 1;\n &:disabled {\n opacity: 50%;\n cursor: auto;\n pointer-events: none;\n }\n\n will-change: transform;\n transition: transform 450ms ease;\n transform: perspective(1px) translateZ(0);\n\n > * {\n user-select: none;\n }\n\n > a {\n text-decoration: none;\n }\n', + ], + [ + '\n padding: ', + ';\n width: ', + ';\n font-weight: 500;\n text-align: center;\n border-radius: ', + ';\n outline: none;\n border: 1px solid transparent;\n color: ', + ';\n text-decoration: none;\n display: flex;\n justify-content: center;\n flex-wrap: nowrap;\n align-items: center;\n cursor: pointer;\n position: relative;\n z-index: 1;\n &:disabled {\n opacity: 50%;\n cursor: auto;\n pointer-events: none;\n }\n\n will-change: transform;\n transition: transform 450ms ease;\n transform: perspective(1px) translateZ(0);\n\n > * {\n user-select: none;\n }\n\n > a {\n text-decoration: none;\n }\n', + ] + )), + function (_a) { + var padding = _a.padding + return padding !== null && padding !== void 0 ? padding : '16px' + }, + function (_a) { + var width = _a.width + return width !== null && width !== void 0 ? width : '100%' + }, + function (_a) { + var $borderRadius = _a.$borderRadius + return $borderRadius !== null && $borderRadius !== void 0 ? $borderRadius : '20px' + }, + function (_a) { + var theme = _a.theme + return theme.text1 + } +) +var ButtonPrimary = styled__default['default'](BaseButton)( + templateObject_2$p || + (templateObject_2$p = __makeTemplateObject( + [ + '\n background-color: ', + ';\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:hover {\n background-color: ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:disabled {\n background-color: ', + ';\n color: ', + ';\n cursor: auto;\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n', + ], + [ + '\n background-color: ', + ';\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:hover {\n background-color: ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:disabled {\n background-color: ', + ';\n color: ', + ';\n cursor: auto;\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.primary1 + }, + function (_a) { + var theme = _a.theme + return polished.darken(0.05, theme.primary1) + }, + function (_a) { + var theme = _a.theme + return polished.darken(0.05, theme.primary1) + }, + function (_a) { + var theme = _a.theme + return polished.darken(0.05, theme.primary1) + }, + function (_a) { + var theme = _a.theme + return polished.darken(0.1, theme.primary1) + }, + function (_a) { + var theme = _a.theme + return polished.darken(0.1, theme.primary1) + }, + function (_a) { + var theme = _a.theme, + altDisabledStyle = _a.altDisabledStyle, + disabled = _a.disabled + return altDisabledStyle ? (disabled ? theme.primary1 : theme.bg2) : theme.bg2 + }, + function (_a) { + var altDisabledStyle = _a.altDisabledStyle, + disabled = _a.disabled, + theme = _a.theme + return altDisabledStyle ? (disabled ? theme.white : theme.text2) : theme.text2 + } +) +var ButtonLight = styled__default['default'](BaseButton)( + templateObject_3$k || + (templateObject_3$k = __makeTemplateObject( + [ + '\n background-color: ', + ';\n color: ', + ';\n font-size: 16px;\n font-weight: 500;\n &:focus {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:hover {\n background-color: ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n :disabled {\n opacity: 0.4;\n :hover {\n cursor: auto;\n background-color: ', + ';\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n }\n', + ], + [ + '\n background-color: ', + ';\n color: ', + ';\n font-size: 16px;\n font-weight: 500;\n &:focus {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:hover {\n background-color: ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n :disabled {\n opacity: 0.4;\n :hover {\n cursor: auto;\n background-color: ', + ';\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.primary5 + }, + function (_a) { + var theme = _a.theme + return theme.primaryText1 + }, + function (_a) { + var theme = _a.theme, + disabled = _a.disabled + return !disabled && polished.darken(0.03, theme.primary5) + }, + function (_a) { + var theme = _a.theme, + disabled = _a.disabled + return !disabled && polished.darken(0.03, theme.primary5) + }, + function (_a) { + var theme = _a.theme, + disabled = _a.disabled + return !disabled && polished.darken(0.03, theme.primary5) + }, + function (_a) { + var theme = _a.theme, + disabled = _a.disabled + return !disabled && polished.darken(0.05, theme.primary5) + }, + function (_a) { + var theme = _a.theme, + disabled = _a.disabled + return !disabled && polished.darken(0.05, theme.primary5) + }, + function (_a) { + var theme = _a.theme + return theme.primary5 + } +) +var ButtonGray = styled__default['default'](BaseButton)( + templateObject_4$d || + (templateObject_4$d = __makeTemplateObject( + [ + '\n background-color: ', + ';\n color: ', + ';\n font-size: 16px;\n font-weight: 500;\n\n &:hover {\n background-color: ', + ';\n }\n &:active {\n background-color: ', + ';\n }\n', + ], + [ + '\n background-color: ', + ';\n color: ', + ';\n font-size: 16px;\n font-weight: 500;\n\n &:hover {\n background-color: ', + ';\n }\n &:active {\n background-color: ', + ';\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.bg1 + }, + function (_a) { + var theme = _a.theme + return theme.text2 + }, + function (_a) { + var theme = _a.theme, + disabled = _a.disabled + return !disabled && polished.darken(0.05, theme.bg2) + }, + function (_a) { + var theme = _a.theme, + disabled = _a.disabled + return !disabled && polished.darken(0.1, theme.bg2) + } +) +styled__default['default'](BaseButton)( + templateObject_5$b || + (templateObject_5$b = __makeTemplateObject( + [ + '\n border: 1px solid ', + ';\n color: ', + ';\n background-color: transparent;\n font-size: 16px;\n border-radius: 12px;\n padding: ', + ';\n\n &:focus {\n box-shadow: 0 0 0 1pt ', + ';\n border: 1px solid ', + ';\n }\n &:hover {\n border: 1px solid ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', + ';\n border: 1px solid ', + ';\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n a:hover {\n text-decoration: none;\n }\n', + ], + [ + '\n border: 1px solid ', + ';\n color: ', + ';\n background-color: transparent;\n font-size: 16px;\n border-radius: 12px;\n padding: ', + ';\n\n &:focus {\n box-shadow: 0 0 0 1pt ', + ';\n border: 1px solid ', + ';\n }\n &:hover {\n border: 1px solid ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', + ';\n border: 1px solid ', + ';\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n a:hover {\n text-decoration: none;\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.primary4 + }, + function (_a) { + var theme = _a.theme + return theme.primary1 + }, + function (_a) { + var padding = _a.padding + return padding ? padding : '10px' + }, + function (_a) { + var theme = _a.theme + return theme.primary4 + }, + function (_a) { + var theme = _a.theme + return theme.primary3 + }, + function (_a) { + var theme = _a.theme + return theme.primary3 + }, + function (_a) { + var theme = _a.theme + return theme.primary4 + }, + function (_a) { + var theme = _a.theme + return theme.primary3 + } +) +var ButtonOutlined = styled__default['default'](BaseButton)( + templateObject_6$7 || + (templateObject_6$7 = __makeTemplateObject( + [ + '\n border: 1px solid ', + ';\n background-color: transparent;\n color: ', + ';\n &:focus {\n box-shadow: 0 0 0 1px ', + ';\n }\n &:hover {\n box-shadow: 0 0 0 1px ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1px ', + ';\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n', + ], + [ + '\n border: 1px solid ', + ';\n background-color: transparent;\n color: ', + ';\n &:focus {\n box-shadow: 0 0 0 1px ', + ';\n }\n &:hover {\n box-shadow: 0 0 0 1px ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1px ', + ';\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.bg2 + }, + function (_a) { + var theme = _a.theme + return theme.text1 + }, + function (_a) { + var theme = _a.theme + return theme.bg4 + }, + function (_a) { + var theme = _a.theme + return theme.bg4 + }, + function (_a) { + var theme = _a.theme + return theme.bg4 + } +) +styled__default['default'](BaseButton)( + templateObject_7$6 || + (templateObject_7$6 = __makeTemplateObject( + [ + '\n background-color: ', + ';\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:hover {\n background-color: ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:disabled {\n background-color: ', + ';\n opacity: 50%;\n cursor: auto;\n }\n', + ], + [ + '\n background-color: ', + ';\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:hover {\n background-color: ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:disabled {\n background-color: ', + ';\n opacity: 50%;\n cursor: auto;\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.yellow3 + }, + function (_a) { + var theme = _a.theme + return polished.darken(0.05, theme.yellow3) + }, + function (_a) { + var theme = _a.theme + return polished.darken(0.05, theme.yellow3) + }, + function (_a) { + var theme = _a.theme + return polished.darken(0.05, theme.yellow3) + }, + function (_a) { + var theme = _a.theme + return polished.darken(0.1, theme.yellow3) + }, + function (_a) { + var theme = _a.theme + return polished.darken(0.1, theme.yellow3) + }, + function (_a) { + var theme = _a.theme + return theme.yellow3 + } +) +var ButtonEmpty = styled__default['default'](BaseButton)( + templateObject_8$3 || + (templateObject_8$3 = __makeTemplateObject( + [ + '\n background-color: transparent;\n color: ', + ';\n display: flex;\n justify-content: center;\n align-items: center;\n\n &:focus {\n text-decoration: underline;\n }\n &:hover {\n text-decoration: none;\n }\n &:active {\n text-decoration: none;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n', + ], + [ + '\n background-color: transparent;\n color: ', + ';\n display: flex;\n justify-content: center;\n align-items: center;\n\n &:focus {\n text-decoration: underline;\n }\n &:hover {\n text-decoration: none;\n }\n &:active {\n text-decoration: none;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.primary1 + } +) +styled__default['default'](BaseButton)( + templateObject_9$3 || + (templateObject_9$3 = __makeTemplateObject( + [ + '\n padding: 0;\n width: fit-content;\n background: none;\n text-decoration: none;\n &:focus {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n text-decoration: underline;\n }\n &:hover {\n // text-decoration: underline;\n opacity: 0.9;\n }\n &:active {\n text-decoration: underline;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n', + ], + [ + '\n padding: 0;\n width: fit-content;\n background: none;\n text-decoration: none;\n &:focus {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n text-decoration: underline;\n }\n &:hover {\n // text-decoration: underline;\n opacity: 0.9;\n }\n &:active {\n text-decoration: underline;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n', + ] + )) +) +var ButtonConfirmedStyle = styled__default['default'](BaseButton)( + templateObject_10$3 || + (templateObject_10$3 = __makeTemplateObject( + [ + '\n background-color: ', + ';\n color: ', + ';\n /* border: 1px solid ', + '; */\n\n &:disabled {\n opacity: 50%;\n background-color: ', + ';\n color: ', + ';\n cursor: auto;\n }\n', + ], + [ + '\n background-color: ', + ';\n color: ', + ';\n /* border: 1px solid ', + '; */\n\n &:disabled {\n opacity: 50%;\n background-color: ', + ';\n color: ', + ';\n cursor: auto;\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.bg3 + }, + function (_a) { + var theme = _a.theme + return theme.text1 + }, + function (_a) { + var theme = _a.theme + return theme.green1 + }, + function (_a) { + var theme = _a.theme + return theme.bg2 + }, + function (_a) { + var theme = _a.theme + return theme.text2 + } +) +var ButtonErrorStyle = styled__default['default'](BaseButton)( + templateObject_11$3 || + (templateObject_11$3 = __makeTemplateObject( + [ + '\n background-color: ', + ';\n border: 1px solid ', + ';\n\n &:focus {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:hover {\n background-color: ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n box-shadow: none;\n background-color: ', + ';\n border: 1px solid ', + ';\n }\n', + ], + [ + '\n background-color: ', + ';\n border: 1px solid ', + ';\n\n &:focus {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:hover {\n background-color: ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n box-shadow: none;\n background-color: ', + ';\n border: 1px solid ', + ';\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.red1 + }, + function (_a) { + var theme = _a.theme + return theme.red1 + }, + function (_a) { + var theme = _a.theme + return polished.darken(0.05, theme.red1) + }, + function (_a) { + var theme = _a.theme + return polished.darken(0.05, theme.red1) + }, + function (_a) { + var theme = _a.theme + return polished.darken(0.05, theme.red1) + }, + function (_a) { + var theme = _a.theme + return polished.darken(0.1, theme.red1) + }, + function (_a) { + var theme = _a.theme + return polished.darken(0.1, theme.red1) + }, + function (_a) { + var theme = _a.theme + return theme.red1 + }, + function (_a) { + var theme = _a.theme + return theme.red1 + } +) +function ButtonConfirmed(_a) { + var confirmed = _a.confirmed, + altDisabledStyle = _a.altDisabledStyle, + rest = __rest(_a, ['confirmed', 'altDisabledStyle']) + if (confirmed) { + return jsxRuntime.jsx(ButtonConfirmedStyle, __assign({}, rest), void 0) + } else { + return jsxRuntime.jsx(ButtonPrimary, __assign({}, rest, { altDisabledStyle }), void 0) + } +} +function ButtonError(_a) { + var error = _a.error, + rest = __rest(_a, ['error']) + if (error) { + return jsxRuntime.jsx(ButtonErrorStyle, __assign({}, rest), void 0) + } else { + return jsxRuntime.jsx(ButtonPrimary, __assign({}, rest), void 0) + } +} +styled__default['default'](ButtonOutlined)( + templateObject_12$3 || + (templateObject_12$3 = __makeTemplateObject( + ['\n border: 1px solid;\n border-color: ', ';\n'], + ['\n border: 1px solid;\n border-color: ', ';\n'] + )), + function (_a) { + var theme = _a.theme + return theme.primary1 + } +) +styled__default['default'].div( + templateObject_13 || + (templateObject_13 = __makeTemplateObject( + [ + '\n height: 17px;\n width: 17px;\n border-radius: 50%;\n background-color: ', + ';\n display: flex;\n align-items: center;\n justify-content: center;\n', + ], + [ + '\n height: 17px;\n width: 17px;\n border-radius: 50%;\n background-color: ', + ';\n display: flex;\n align-items: center;\n justify-content: center;\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.primary1 + } +) +styled__default['default'].div( + templateObject_14 || + (templateObject_14 = __makeTemplateObject( + ['\n width: 20px;\n padding: 0 10px;\n position: absolute;\n top: 11px;\n right: 15px;\n'], + ['\n width: 20px;\n padding: 0 10px;\n position: absolute;\n top: 11px;\n right: 15px;\n'] + )) +) +styled__default['default'](reactFeather.Check)( + templateObject_15 || (templateObject_15 = __makeTemplateObject(['\n size: 13px;\n'], ['\n size: 13px;\n'])) +) +var templateObject_1$C, + templateObject_2$p, + templateObject_3$k, + templateObject_4$d, + templateObject_5$b, + templateObject_6$7, + templateObject_7$6, + templateObject_8$3, + templateObject_9$3, + templateObject_10$3, + templateObject_11$3, + templateObject_12$3, + templateObject_13, + templateObject_14, + templateObject_15 + +var parser = new uaParserJs.UAParser(window.navigator.userAgent) +var type$1 = parser.getDevice().type +parser.getResult() +var isMobile = type$1 === 'mobile' || type$1 === 'tablet' + +var AnimatedDialogOverlay = reactSpring.animated(dialog.DialogOverlay) +// eslint-disable-next-line @typescript-eslint/no-unused-vars +var StyledDialogOverlay = styled__default['default'](AnimatedDialogOverlay)( + templateObject_1$B || + (templateObject_1$B = __makeTemplateObject( + [ + '\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: ', + ';\n }\n', + ], + [ + '\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: ', + ';\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.modalBG + } +) +var AnimatedDialogContent = reactSpring.animated(dialog.DialogContent) +// destructure to not pass custom props to Dialog DOM element +// eslint-disable-next-line @typescript-eslint/no-unused-vars +var StyledDialogContent = styled__default['default'](function (_a) { + _a.minHeight + _a.maxHeight + _a.mobile + _a.isOpen + var rest = __rest(_a, ['minHeight', 'maxHeight', 'mobile', 'isOpen']) + return jsxRuntime.jsx(AnimatedDialogContent, __assign({}, rest), void 0) +}).attrs({ + 'aria-label': 'dialog', +})( + templateObject_7$5 || + (templateObject_7$5 = __makeTemplateObject( + [ + '\n overflow-y: auto;\n\n &[data-reach-dialog-content] {\n margin: 0 0 2rem 0;\n background-color: ', + ';\n border: 1px solid ', + ';\n box-shadow: 0 4px 8px 0 ', + ';\n padding: 0px;\n width: 50vw;\n overflow-y: auto;\n overflow-x: hidden;\n\n align-self: ', + ';\n\n max-width: 420px;\n ', + '\n ', + '\n display: flex;\n border-radius: 20px;\n ', + '\n ', + '\n }\n', + ], + [ + '\n overflow-y: auto;\n\n &[data-reach-dialog-content] {\n margin: 0 0 2rem 0;\n background-color: ', + ';\n border: 1px solid ', + ';\n box-shadow: 0 4px 8px 0 ', + ';\n padding: 0px;\n width: 50vw;\n overflow-y: auto;\n overflow-x: hidden;\n\n align-self: ', + ';\n\n max-width: 420px;\n ', + '\n ', + '\n display: flex;\n border-radius: 20px;\n ', + '\n ', + '\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.bg0 + }, + function (_a) { + var theme = _a.theme + return theme.bg1 + }, + function (_a) { + var theme = _a.theme + return polished.transparentize(0.95, theme.shadow1) + }, + function (_a) { + var mobile = _a.mobile + return mobile ? 'flex-end' : 'center' + }, + function (_a) { + var maxHeight = _a.maxHeight + return ( + maxHeight && + styled.css( + templateObject_2$o || + (templateObject_2$o = __makeTemplateObject( + ['\n max-height: ', 'vh;\n '], + ['\n max-height: ', 'vh;\n '] + )), + maxHeight + ) + ) + }, + function (_a) { + var minHeight = _a.minHeight + return ( + minHeight && + styled.css( + templateObject_3$j || + (templateObject_3$j = __makeTemplateObject( + ['\n min-height: ', 'vh;\n '], + ['\n min-height: ', 'vh;\n '] + )), + minHeight + ) + ) + }, + function (_a) { + var theme = _a.theme + return theme.mediaWidth.upToMedium( + templateObject_4$c || + (templateObject_4$c = __makeTemplateObject( + ['\n width: 65vw;\n margin: 0;\n '], + ['\n width: 65vw;\n margin: 0;\n '] + )) + ) + }, + function (_a) { + var theme = _a.theme, + mobile = _a.mobile + return theme.mediaWidth.upToSmall( + templateObject_6$6 || + (templateObject_6$6 = __makeTemplateObject( + ['\n width: 85vw;\n ', '\n '], + ['\n width: 85vw;\n ', '\n '] + )), + mobile && + styled.css( + templateObject_5$a || + (templateObject_5$a = __makeTemplateObject( + [ + '\n width: 100vw;\n border-radius: 20px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n ', + ], + [ + '\n width: 100vw;\n border-radius: 20px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n ', + ] + )) + ) + ) + } +) +function Modal(_a) { + var isOpen = _a.isOpen, + onDismiss = _a.onDismiss, + _b = _a.minHeight, + minHeight = _b === void 0 ? false : _b, + _c = _a.maxHeight, + maxHeight = _c === void 0 ? 90 : _c, + initialFocusRef = _a.initialFocusRef, + children = _a.children + var fadeTransition = reactSpring.useTransition(isOpen, null, { + config: { duration: 200 }, + from: { opacity: 0 }, + enter: { opacity: 1 }, + leave: { opacity: 0 }, + }) + var _d = __read( + reactSpring.useSpring(function () { + return { y: 0, config: { mass: 1, tension: 210, friction: 20 } } + }), + 2 + ), + y = _d[0].y, + set = _d[1] + var bind = reactUseGesture.useGesture({ + onDrag(state) { + set({ + y: state.down ? state.movement[1] : 0, + }) + if (state.movement[1] > 300 || (state.velocity > 3 && state.direction[1] > 0)) { + onDismiss() + } + }, + }) + return jsxRuntime.jsx( + jsxRuntime.Fragment, + { + children: fadeTransition.map(function (_a) { + var item = _a.item, + key = _a.key, + props = _a.props + return ( + item && + jsxRuntime.jsx( + StyledDialogOverlay, + __assign( + { + style: props, + onDismiss, + initialFocusRef, + unstable_lockFocusAcrossFrames: false, + }, + { + children: jsxRuntime.jsxs( + StyledDialogContent, + __assign( + {}, + isMobile + ? __assign(__assign({}, bind()), { + style: { + transform: y.interpolate(function (y) { + return 'translateY(' + (y > 0 ? y : 0) + 'px)' + }), + }, + }) + : {}, + { 'aria-label': 'dialog content', minHeight, maxHeight, mobile: isMobile }, + { + children: [ + !initialFocusRef && isMobile ? jsxRuntime.jsx('div', { tabIndex: 1 }, void 0) : null, + children, + ], + } + ), + void 0 + ), + } + ), + key + ) + ) + }), + }, + void 0 + ) +} +var templateObject_1$B, + templateObject_2$o, + templateObject_3$j, + templateObject_4$c, + templateObject_5$a, + templateObject_6$6, + templateObject_7$5 + +var _a$7 +var ETHERSCAN_PREFIXES = + ((_a$7 = {}), + (_a$7[SupportedChainId.MAINNET] = 'https://etherscan.io'), + (_a$7[SupportedChainId.ROPSTEN] = 'https://ropsten.etherscan.io'), + (_a$7[SupportedChainId.RINKEBY] = 'https://rinkeby.etherscan.io'), + (_a$7[SupportedChainId.GOERLI] = 'https://goerli.etherscan.io'), + (_a$7[SupportedChainId.KOVAN] = 'https://kovan.etherscan.io'), + (_a$7[SupportedChainId.OPTIMISM] = 'https://optimistic.etherscan.io'), + (_a$7[SupportedChainId.OPTIMISTIC_KOVAN] = 'https://kovan-optimistic.etherscan.io'), + (_a$7[SupportedChainId.POLYGON_MUMBAI] = 'https://mumbai.polygonscan.com'), + (_a$7[SupportedChainId.POLYGON] = 'https://polygonscan.com'), + _a$7) +var ExplorerDataType +;(function (ExplorerDataType) { + ExplorerDataType['TRANSACTION'] = 'transaction' + ExplorerDataType['TOKEN'] = 'token' + ExplorerDataType['ADDRESS'] = 'address' + ExplorerDataType['BLOCK'] = 'block' +})(ExplorerDataType || (ExplorerDataType = {})) +/** + * Return the explorer link for the given data and data type + * @param chainId the ID of the chain for which to return the data + * @param data the data to return a link for + * @param type the type of the data + */ +function getExplorerLink(chainId, data, type) { + var _a + if (chainId === SupportedChainId.ARBITRUM_ONE) { + switch (type) { + case ExplorerDataType.TRANSACTION: + return 'https://arbiscan.io/tx/' + data + case ExplorerDataType.ADDRESS: + case ExplorerDataType.TOKEN: + return 'https://arbiscan.io/address/' + data + case ExplorerDataType.BLOCK: + return 'https://arbiscan.io/block/' + data + default: + return 'https://arbiscan.io/' + } + } + if (chainId === SupportedChainId.ARBITRUM_RINKEBY) { + switch (type) { + case ExplorerDataType.TRANSACTION: + return 'https://rinkeby-explorer.arbitrum.io/tx/' + data + case ExplorerDataType.ADDRESS: + case ExplorerDataType.TOKEN: + return 'https://rinkeby-explorer.arbitrum.io/address/' + data + case ExplorerDataType.BLOCK: + return 'https://rinkeby-explorer.arbitrum.io/block/' + data + default: + return 'https://rinkeby-explorer.arbitrum.io/' + } + } + var prefix = (_a = ETHERSCAN_PREFIXES[chainId]) !== null && _a !== void 0 ? _a : 'https://etherscan.io' + switch (type) { + case ExplorerDataType.TRANSACTION: + return prefix + '/tx/' + data + case ExplorerDataType.TOKEN: + return prefix + '/token/' + data + case ExplorerDataType.BLOCK: + if (chainId === SupportedChainId.OPTIMISM || chainId === SupportedChainId.OPTIMISTIC_KOVAN) { + return prefix + '/tx/' + data + } + return prefix + '/block/' + data + case ExplorerDataType.ADDRESS: + return prefix + '/address/' + data + default: + return '' + prefix + } +} + +var DetailsFooter = styled__default['default'].div( + templateObject_1$A || + (templateObject_1$A = __makeTemplateObject( + [ + '\n padding-top: calc(16px + 2rem);\n padding-bottom: 20px;\n margin-left: auto;\n margin-right: auto;\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: ', + ';\n background-color: ', + ';\n z-index: ', + ';\n\n transform: ', + ';\n transition: transform 300ms ease-in-out;\n text-align: center;\n', + ], + [ + '\n padding-top: calc(16px + 2rem);\n padding-bottom: 20px;\n margin-left: auto;\n margin-right: auto;\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: ', + ';\n background-color: ', + ';\n z-index: ', + ';\n\n transform: ', + ';\n transition: transform 300ms ease-in-out;\n text-align: center;\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.text2 + }, + function (_a) { + var theme = _a.theme + return theme.advancedBG + }, + Z_INDEX.deprecated_zero, + function (_a) { + var show = _a.show + return show ? 'translateY(0%)' : 'translateY(-100%)' + } +) +var StyledButtonEmpty = styled__default['default'](ButtonEmpty)( + templateObject_2$n || + (templateObject_2$n = __makeTemplateObject(['\n text-decoration: none;\n'], ['\n text-decoration: none;\n'])) +) +var AddressText$1 = styled__default['default'](ThemedText.Blue)( + templateObject_4$b || + (templateObject_4$b = __makeTemplateObject( + ['\n font-size: 12px;\n\n ', '\n'], + ['\n font-size: 12px;\n\n ', '\n'] + )), + function (_a) { + var theme = _a.theme + return theme.mediaWidth.upToSmall( + templateObject_3$i || + (templateObject_3$i = __makeTemplateObject(['\n font-size: 10px;\n'], ['\n font-size: 10px;\n'])) + ) + } +) +function UnsupportedCurrencyFooter(_a) { + var show = _a.show, + currencies = _a.currencies + var chainId = useActiveWeb3React().chainId + var _b = __read(React.useState(false), 2), + showDetails = _b[0], + setShowDetails = _b[1] + var tokens = + chainId && currencies + ? currencies.map(function (currency) { + return currency === null || currency === void 0 ? void 0 : currency.wrapped + }) + : [] + var unsupportedTokens = useUnsupportedTokens() + return jsxRuntime.jsxs( + DetailsFooter, + __assign( + { show }, + { + children: [ + jsxRuntime.jsx( + Modal, + __assign( + { + isOpen: showDetails, + onDismiss() { + return setShowDetails(false) + }, + }, + { + children: jsxRuntime.jsx( + Card, + __assign( + { padding: '2rem' }, + { + children: jsxRuntime.jsxs( + AutoColumn, + __assign( + { gap: 'lg' }, + { + children: [ + jsxRuntime.jsxs( + RowBetween, + { + children: [ + jsxRuntime.jsx( + ThemedText.MediumHeader, + { + children: jsxRuntime.jsx( + macro.Trans, + { children: 'Unsupported Assets' }, + void 0 + ), + }, + void 0 + ), + jsxRuntime.jsx( + CloseIcon, + { + onClick() { + return setShowDetails(false) + }, + }, + void 0 + ), + ], + }, + void 0 + ), + tokens.map(function (token) { + var _a + return ( + token && + unsupportedTokens && + Object.keys(unsupportedTokens).includes(token.address) && + jsxRuntime.jsx( + OutlineCard, + { + children: jsxRuntime.jsxs( + AutoColumn, + __assign( + { gap: '10px' }, + { + children: [ + jsxRuntime.jsxs( + AutoRow, + __assign( + { gap: '5px', align: 'center' }, + { + children: [ + jsxRuntime.jsx( + CurrencyLogo, + { currency: token, size: '24px' }, + void 0 + ), + jsxRuntime.jsx( + ThemedText.Body, + __assign({ fontWeight: 500 }, { children: token.symbol }), + void 0 + ), + ], + } + ), + void 0 + ), + chainId && + jsxRuntime.jsx( + ExternalLink, + __assign( + { + href: getExplorerLink( + chainId, + token.address, + ExplorerDataType.ADDRESS + ), + }, + { + children: jsxRuntime.jsx( + AddressText$1, + { children: token.address }, + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + }, + (_a = token.address) === null || _a === void 0 ? void 0 : _a.concat('not-supported') + ) + ) + }), + jsxRuntime.jsx( + AutoColumn, + __assign( + { gap: 'lg' }, + { + children: jsxRuntime.jsx( + ThemedText.Body, + __assign( + { fontWeight: 500 }, + { + children: jsxRuntime.jsx( + macro.Trans, + { + children: + 'Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.', + }, + void 0 + ), + } + ), + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + } + ), + void 0 + ), + } + ), + void 0 + ), + jsxRuntime.jsx( + StyledButtonEmpty, + __assign( + { + padding: '0', + onClick() { + return setShowDetails(true) + }, + }, + { + children: jsxRuntime.jsx( + ThemedText.Blue, + { children: jsxRuntime.jsx(macro.Trans, { children: 'Read more about unsupported assets' }, void 0) }, + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ) +} +var templateObject_1$A, templateObject_2$n, templateObject_3$i, templateObject_4$b + +/** + * Does a lookup for an ENS name to find its address. + */ +function useENSAddress(ensName) { + var _a + var debouncedName = useDebounce(ensName, 200) + var ensNodeArgument = React.useMemo( + function () { + return [debouncedName === null ? undefined : safeNamehash(debouncedName)] + }, + [debouncedName] + ) + var registrarContract = useENSRegistrarContract(false) + var resolverAddress = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument) + var resolverAddressResult = (_a = resolverAddress.result) === null || _a === void 0 ? void 0 : _a[0] + var resolverContract = useENSResolverContract( + resolverAddressResult && !isZero(resolverAddressResult) ? resolverAddressResult : undefined, + false + ) + var addr = useSingleCallResult(resolverContract, 'addr', ensNodeArgument) + var changed = debouncedName !== ensName + return React.useMemo( + function () { + var _a, _b + return { + address: changed + ? null + : (_b = (_a = addr.result) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 + ? _b + : null, + loading: changed || resolverAddress.loading || addr.loading, + } + }, + [addr.loading, addr.result, changed, resolverAddress.loading] + ) +} + +/** + * Does a reverse lookup for an address to find its ENS name. + * Note this is not the same as looking up an ENS name to find an address. + */ +function useENSName(address) { + var _a, _b + var debouncedAddress = useDebounce(address, 200) + var ensNodeArgument = React.useMemo( + function () { + if (!debouncedAddress || !isAddress(debouncedAddress)) return [undefined] + return [hash.namehash(debouncedAddress.toLowerCase().substr(2) + '.addr.reverse')] + }, + [debouncedAddress] + ) + var registrarContract = useENSRegistrarContract(false) + var resolverAddress = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument) + var resolverAddressResult = (_a = resolverAddress.result) === null || _a === void 0 ? void 0 : _a[0] + var resolverContract = useENSResolverContract( + resolverAddressResult && !isZero(resolverAddressResult) ? resolverAddressResult : undefined, + false + ) + var nameCallRes = useSingleCallResult(resolverContract, 'name', ensNodeArgument) + var name = (_b = nameCallRes.result) === null || _b === void 0 ? void 0 : _b[0] + /* ENS does not enforce that an address owns a .eth domain before setting it as a reverse proxy + and recommends that you perform a match on the forward resolution + see: https://docs.ens.domains/dapp-developer-guide/resolving-names#reverse-resolution + */ + var fwdAddr = useENSAddress(name) + var checkedName = address === (fwdAddr === null || fwdAddr === void 0 ? void 0 : fwdAddr.address) ? name : null + var changed = debouncedAddress !== address + return React.useMemo( + function () { + return { + ENSName: changed ? null : checkedName, + loading: changed || resolverAddress.loading || nameCallRes.loading, + } + }, + [changed, nameCallRes.loading, checkedName, resolverAddress.loading] + ) +} + +/** + * Given a name or address, does a lookup to resolve to an address and name + * @param nameOrAddress ENS name or address + */ +function useENS(nameOrAddress) { + var validated = isAddress(nameOrAddress) + var reverseLookup = useENSName(validated ? validated : undefined) + var lookup = useENSAddress(nameOrAddress) + return React.useMemo( + function () { + return { + loading: reverseLookup.loading || lookup.loading, + address: validated ? validated : lookup.address, + name: reverseLookup.ENSName + ? reverseLookup.ENSName + : !validated && lookup.address + ? nameOrAddress || null + : null, + } + }, + [lookup.address, lookup.loading, nameOrAddress, reverseLookup.ENSName, reverseLookup.loading, validated] + ) +} + +var InputPanel$1 = styled__default['default'].div( + templateObject_1$z || + (templateObject_1$z = __makeTemplateObject( + [ + '\n ', + '\n position: relative;\n border-radius: 1.25rem;\n background-color: ', + ';\n z-index: 1;\n width: 100%;\n', + ], + [ + '\n ', + '\n position: relative;\n border-radius: 1.25rem;\n background-color: ', + ';\n z-index: 1;\n width: 100%;\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.flexColumnNoWrap + }, + function (_a) { + var theme = _a.theme + return theme.bg1 + } +) +var ContainerRow = styled__default['default'].div( + templateObject_2$m || + (templateObject_2$m = __makeTemplateObject( + [ + '\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 1.25rem;\n border: 1px solid ', + ';\n transition: border-color 300ms ', + ',\n color 500ms ', + ';\n background-color: ', + ';\n', + ], + [ + '\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 1.25rem;\n border: 1px solid ', + ';\n transition: border-color 300ms ', + ',\n color 500ms ', + ';\n background-color: ', + ';\n', + ] + )), + function (_a) { + var error = _a.error, + theme = _a.theme + return error ? theme.red1 : theme.bg2 + }, + function (_a) { + var error = _a.error + return error ? 'step-end' : 'step-start' + }, + function (_a) { + var error = _a.error + return error ? 'step-end' : 'step-start' + }, + function (_a) { + var theme = _a.theme + return theme.bg1 + } +) +var InputContainer = styled__default['default'].div( + templateObject_3$h || + (templateObject_3$h = __makeTemplateObject( + ['\n flex: 1;\n padding: 1rem;\n'], + ['\n flex: 1;\n padding: 1rem;\n'] + )) +) +var Input$2 = styled__default['default'].input( + templateObject_4$a || + (templateObject_4$a = __makeTemplateObject( + [ + '\n font-size: 1.25rem;\n outline: none;\n border: none;\n flex: 1 1 auto;\n width: 0;\n background-color: ', + ';\n transition: color 300ms ', + ';\n color: ', + ';\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 500;\n width: 100%;\n ::placeholder {\n color: ', + ';\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: ', + ';\n }\n', + ], + [ + '\n font-size: 1.25rem;\n outline: none;\n border: none;\n flex: 1 1 auto;\n width: 0;\n background-color: ', + ';\n transition: color 300ms ', + ';\n color: ', + ';\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 500;\n width: 100%;\n ::placeholder {\n color: ', + ';\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: ', + ';\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.bg1 + }, + function (_a) { + var error = _a.error + return error ? 'step-end' : 'step-start' + }, + function (_a) { + var error = _a.error, + theme = _a.theme + return error ? theme.red1 : theme.text1 + }, + function (_a) { + var theme = _a.theme + return theme.text4 + }, + function (_a) { + var theme = _a.theme + return theme.text4 + } +) +function AddressInputPanel(_a) { + var id = _a.id, + _b = _a.className, + className = _b === void 0 ? 'recipient-address-input' : _b, + label = _a.label, + placeholder = _a.placeholder, + value = _a.value, + onChange = _a.onChange + var chainId = useActiveWeb3React().chainId + var theme = React.useContext(styled.ThemeContext) + var _c = useENS(value), + address = _c.address, + loading = _c.loading, + name = _c.name + var handleInput = React.useCallback( + function (event) { + var input = event.target.value + var withoutSpaces = input.replace(/\s+/g, '') + onChange(withoutSpaces) + }, + [onChange] + ) + var error = Boolean(value.length > 0 && !loading && !address) + return jsxRuntime.jsx( + InputPanel$1, + __assign( + { id }, + { + children: jsxRuntime.jsx( + ContainerRow, + __assign( + { error }, + { + children: jsxRuntime.jsx( + InputContainer, + { + children: jsxRuntime.jsxs( + AutoColumn, + __assign( + { gap: 'md' }, + { + children: [ + jsxRuntime.jsxs( + RowBetween, + { + children: [ + jsxRuntime.jsx( + ThemedText.Black, + __assign( + { color: theme.text2, fontWeight: 500, fontSize: 14 }, + { + children: + label !== null && label !== void 0 + ? label + : jsxRuntime.jsx(macro.Trans, { children: 'Recipient' }, void 0), + } + ), + void 0 + ), + address && + chainId && + jsxRuntime.jsx( + ExternalLink, + __assign( + { + href: getExplorerLink( + chainId, + name !== null && name !== void 0 ? name : address, + ExplorerDataType.ADDRESS + ), + style: { fontSize: '14px' }, + }, + { + children: jsxRuntime.jsx( + macro.Trans, + { children: '(View on Explorer)' }, + void 0 + ), + } + ), + void 0 + ), + ], + }, + void 0 + ), + jsxRuntime.jsx( + Input$2, + { + className, + type: 'text', + autoComplete: 'off', + autoCorrect: 'off', + autoCapitalize: 'off', + spellCheck: 'false', + placeholder: + placeholder !== null && placeholder !== void 0 + ? placeholder + : macro.t( + templateObject_5$9 || + (templateObject_5$9 = __makeTemplateObject( + ['Wallet Address or ENS name'], + ['Wallet Address or ENS name'] + )) + ), + error, + pattern: '^(0x[a-fA-F0-9]{40})$', + onChange: handleInput, + value, + }, + void 0 + ), + ], + } + ), + void 0 + ), + }, + void 0 + ), + } + ), + void 0 + ), + } + ), + void 0 + ) +} +var templateObject_1$z, templateObject_2$m, templateObject_3$h, templateObject_4$a, templateObject_5$9 + +function formatCurrencyAmount(amount, sigFigs) { + if (!amount) { + return '-' + } + if (JSBI__default['default'].equal(amount.quotient, JSBI__default['default'].BigInt(0))) { + return '0' + } + if (amount.divide(amount.decimalScale).lessThan(new sdkCore.Fraction(1, 100000))) { + return '<0.00001' + } + return amount.toSignificant(sigFigs) +} + +var _path + +function _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) +} + +var SvgDropdown = function SvgDropdown(props) { + return /*#__PURE__*/ React__namespace.createElement( + 'svg', + _extends( + { + width: 12, + height: 7, + viewBox: '0 0 12 7', + fill: 'none', + xmlns: 'http://www.w3.org/2000/svg', + }, + props + ), + _path || + (_path = /*#__PURE__*/ React__namespace.createElement('path', { + d: 'M0.97168 1L6.20532 6L11.439 1', + stroke: '#AEAEAE', + })) + ) +} + +/** + * Returns the gas value plus a margin for unexpected or variable gas costs + * @param value the gas value to pad + */ +function calculateGasMargin(value) { + return value.mul(120).div(100) +} + +/** + * Be careful adding to this enum, always assign a unique value (typescript will not prevent duplicate values). + * These values is persisted in state and if you change the value it will cause errors + */ +var TransactionType +;(function (TransactionType) { + TransactionType[(TransactionType['APPROVAL'] = 0)] = 'APPROVAL' + TransactionType[(TransactionType['SWAP'] = 1)] = 'SWAP' + TransactionType[(TransactionType['DEPOSIT_LIQUIDITY_STAKING'] = 2)] = 'DEPOSIT_LIQUIDITY_STAKING' + TransactionType[(TransactionType['WITHDRAW_LIQUIDITY_STAKING'] = 3)] = 'WITHDRAW_LIQUIDITY_STAKING' + TransactionType[(TransactionType['CLAIM'] = 4)] = 'CLAIM' + TransactionType[(TransactionType['VOTE'] = 5)] = 'VOTE' + TransactionType[(TransactionType['DELEGATE'] = 6)] = 'DELEGATE' + TransactionType[(TransactionType['WRAP'] = 7)] = 'WRAP' + TransactionType[(TransactionType['CREATE_V3_POOL'] = 8)] = 'CREATE_V3_POOL' + TransactionType[(TransactionType['ADD_LIQUIDITY_V3_POOL'] = 9)] = 'ADD_LIQUIDITY_V3_POOL' + TransactionType[(TransactionType['ADD_LIQUIDITY_V2_POOL'] = 10)] = 'ADD_LIQUIDITY_V2_POOL' + TransactionType[(TransactionType['MIGRATE_LIQUIDITY_V3'] = 11)] = 'MIGRATE_LIQUIDITY_V3' + TransactionType[(TransactionType['COLLECT_FEES'] = 12)] = 'COLLECT_FEES' + TransactionType[(TransactionType['REMOVE_LIQUIDITY_V3'] = 13)] = 'REMOVE_LIQUIDITY_V3' + TransactionType[(TransactionType['SUBMIT_PROPOSAL'] = 14)] = 'SUBMIT_PROPOSAL' +})(TransactionType || (TransactionType = {})) +var addTransaction = toolkit.createAction('transactions/addTransaction') +var clearAllTransactions = toolkit.createAction('transactions/clearAllTransactions') +var finalizeTransaction = toolkit.createAction('transactions/finalizeTransaction') +var checkedTransaction = toolkit.createAction('transactions/checkedTransaction') + +var SUPPORTED_TRANSACTION_TYPES = [ + TransactionType.ADD_LIQUIDITY_V2_POOL, + TransactionType.ADD_LIQUIDITY_V3_POOL, + TransactionType.CREATE_V3_POOL, + TransactionType.REMOVE_LIQUIDITY_V3, + TransactionType.SWAP, +] +var FIREBASE_API_KEY = process.env.REACT_APP_FIREBASE_KEY +var firebaseEnabled = typeof FIREBASE_API_KEY !== 'undefined' +if (firebaseEnabled) initializeFirebase() +function useMonitoringEventCallback() { + var chainId = useActiveWeb3React().chainId + return React.useCallback( + function log(type, _a) { + var transactionResponse = _a.transactionResponse, + walletAddress = _a.walletAddress + return __awaiter(this, void 0, void 0, function () { + var db + return __generator(this, function (_b) { + if (!firebaseEnabled) return [2 /*return*/] + db = database.getDatabase() + if (!walletAddress) { + console.debug('Wallet address required to log monitoring events.') + return [2 /*return*/] + } + try { + database.push(database.ref(db, 'trm'), { + chainId, + origin: window.location.origin, + timestamp: Date.now(), + tx: transactionResponse, + type, + walletAddress, + }) + } catch (e) { + console.debug('Error adding document: ', e) + } + return [2 /*return*/] + }) + }) + }, + [chainId] + ) +} +function useTransactionMonitoringEventCallback() { + var account = useActiveWeb3React().account + var log = useMonitoringEventCallback() + return React.useCallback( + function (info, transactionResponse) { + if (SUPPORTED_TRANSACTION_TYPES.includes(info.type)) { + log(TransactionType[info.type], { + transactionResponse: (function (_a) { + var hash = _a.hash, + v = _a.v, + r = _a.r, + s = _a.s + return { hash, v, r, s } + })(transactionResponse), + walletAddress: account !== null && account !== void 0 ? account : undefined, + }) + } + }, + [account, log] + ) +} +function initializeFirebase() { + app.initializeApp({ + apiKey: process.env.REACT_APP_FIREBASE_KEY, + authDomain: 'interface-monitoring.firebaseapp.com', + databaseURL: 'https://interface-monitoring-default-rtdb.firebaseio.com', + projectId: 'interface-monitoring', + storageBucket: 'interface-monitoring.appspot.com', + messagingSenderId: '968187720053', + appId: '1:968187720053:web:acedf72dce629d470be33c', + }) +} + +// helper that can take a ethers library transaction response and add it to the list of transactions +function useTransactionAdder() { + var _a = useActiveWeb3React(), + chainId = _a.chainId, + account = _a.account + var dispatch = useAppDispatch() + var logMonitoringEvent = useTransactionMonitoringEventCallback() + return React.useCallback( + function (response, info) { + if (!account) return + if (!chainId) return + var hash = response.hash + if (!hash) { + throw Error('No transaction hash found.') + } + dispatch(addTransaction({ hash, from: account, info, chainId })) + logMonitoringEvent(info, response) + }, + [account, chainId, dispatch, logMonitoringEvent] + ) +} +// returns all the transactions for the current chain +function useAllTransactions() { + var _a + var chainId = useActiveWeb3React().chainId + var state = useAppSelector(function (state) { + return state.transactions + }) + return chainId ? ((_a = state[chainId]) !== null && _a !== void 0 ? _a : {}) : {} +} +function useTransaction(transactionHash) { + var allTransactions = useAllTransactions() + if (!transactionHash) { + return undefined + } + return allTransactions[transactionHash] +} +function useIsTransactionConfirmed(transactionHash) { + var transactions = useAllTransactions() + if (!transactionHash || !transactions[transactionHash]) return false + return Boolean(transactions[transactionHash].receipt) +} +/** + * Returns whether a transaction happened in the last day (86400 seconds * 1000 milliseconds / second) + * @param tx to check for recency + */ +function isTransactionRecent(tx) { + return new Date().getTime() - tx.addedTime < 86400000 +} +// returns whether a token has a pending approval transaction +function useHasPendingApproval(token, spender) { + var allTransactions = useAllTransactions() + return React.useMemo( + function () { + return ( + typeof (token === null || token === void 0 ? void 0 : token.address) === 'string' && + typeof spender === 'string' && + Object.keys(allTransactions).some(function (hash) { + var tx = allTransactions[hash] + if (!tx) return false + if (tx.receipt) { + return false + } else { + if (tx.info.type !== TransactionType.APPROVAL) return false + return tx.info.spender === spender && tx.info.tokenAddress === token.address && isTransactionRecent(tx) + } + }) + ) + }, + [allTransactions, spender, token === null || token === void 0 ? void 0 : token.address] + ) +} + +// gets the current timestamp from the blockchain +function useCurrentBlockTimestamp() { + var _a, _b + var multicall = useInterfaceMulticall() + return (_b = + (_a = useSingleCallResult(multicall, 'getCurrentBlockTimestamp')) === null || _a === void 0 + ? void 0 + : _a.result) === null || _b === void 0 + ? void 0 + : _b[0] +} + +new abi$6.Interface(abi$5) +;({ + 1: [ + { + tokens: [WRAPPED_NATIVE_CURRENCY[1], DAI], + stakingRewardAddress: '0xa1484C3aa22a66C62b77E0AE78E15258bd0cB711', + }, + { + tokens: [WRAPPED_NATIVE_CURRENCY[1], USDC], + stakingRewardAddress: '0x7FBa4B8Dc5E7616e59622806932DBea72537A56b', + }, + { + tokens: [WRAPPED_NATIVE_CURRENCY[1], USDT], + stakingRewardAddress: '0x6C3e4cb2E96B01F4b866965A91ed4437839A121a', + }, + { + tokens: [WRAPPED_NATIVE_CURRENCY[1], WBTC], + stakingRewardAddress: '0xCA35e32e7926b96A9988f61d510E038108d8068e', + }, + ], +}) + +// mimics useAllBalances +function useAllTokenBalances() { + var account = useActiveWeb3React().account + var allTokens = useAllTokens() + var allTokensArray = React.useMemo( + function () { + return Object.values(allTokens !== null && allTokens !== void 0 ? allTokens : {}) + }, + [allTokens] + ) + var balances = useTokenBalances(account !== null && account !== void 0 ? account : undefined, allTokensArray) + return balances !== null && balances !== void 0 ? balances : {} +} + +var StyledInput = styled__default['default'].input( + templateObject_1$y || + (templateObject_1$y = __makeTemplateObject( + [ + '\n color: ', + ';\n width: 0;\n position: relative;\n font-weight: 500;\n outline: none;\n border: none;\n flex: 1 1 auto;\n background-color: ', + ';\n font-size: ', + ';\n text-align: ', + ";\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 0px;\n -webkit-appearance: textfield;\n text-align: right;\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: ", + ';\n }\n', + ], + [ + '\n color: ', + ';\n width: 0;\n position: relative;\n font-weight: 500;\n outline: none;\n border: none;\n flex: 1 1 auto;\n background-color: ', + ';\n font-size: ', + ';\n text-align: ', + ";\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 0px;\n -webkit-appearance: textfield;\n text-align: right;\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: ", + ';\n }\n', + ] + )), + function (_a) { + var error = _a.error, + theme = _a.theme + return error ? theme.red1 : theme.text1 + }, + function (_a) { + var theme = _a.theme + return theme.bg1 + }, + function (_a) { + var fontSize = _a.fontSize + return fontSize !== null && fontSize !== void 0 ? fontSize : '28px' + }, + function (_a) { + var align = _a.align + return align && align + }, + function (_a) { + var theme = _a.theme + return theme.text4 + } +) +var inputRegex = RegExp('^\\d*(?:\\\\[.])?\\d*$') // match escaped "." characters via in a non-capturing group +var Input$1 = React__default['default'].memo(function InnerInput(_a) { + var value = _a.value, + onUserInput = _a.onUserInput, + placeholder = _a.placeholder, + prependSymbol = _a.prependSymbol, + rest = __rest(_a, ['value', 'onUserInput', 'placeholder', 'prependSymbol']) + var enforcer = function (nextUserInput) { + if (nextUserInput === '' || inputRegex.test(escapeRegExp(nextUserInput))) { + onUserInput(nextUserInput) + } + } + return jsxRuntime.jsx( + StyledInput, + __assign({}, rest, { + value: prependSymbol && value ? prependSymbol + value : value, + onChange(event) { + if (prependSymbol) { + var value_1 = event.target.value + // cut off prepended symbol + var formattedValue = value_1.toString().includes(prependSymbol) + ? value_1.toString().slice(1, value_1.toString().length + 1) + : value_1 + // replace commas with periods, because uniswap exclusively uses period as the decimal separator + enforcer(formattedValue.replace(/,/g, '.')) + } else { + enforcer(event.target.value.replace(/,/g, '.')) + } + }, + // universal input options + inputMode: 'decimal', + autoComplete: 'off', + autoCorrect: 'off', + // text-specific options + type: 'text', + pattern: '^[0-9]*[.,]?[0-9]*$', + placeholder: placeholder || '0.0', + minLength: 1, + maxLength: 79, + spellCheck: 'false', + }), + void 0 + ) +}) +var templateObject_1$y + +// modified from https://usehooks.com/usePrevious/ +function usePrevious(value) { + // The ref object is a generic container whose current property is mutable ... + // ... and can hold any value, similar to an instance property on a class + var ref = React.useRef() + // Store current value in ref + React.useEffect( + function () { + ref.current = value + }, + [value] + ) // Only re-run if value changes + // Return previous value (happens before update in useEffect above) + return ref.current +} + +/** + * Returns the last value of type T that passes a filter function + * @param value changing value + * @param filterFn function that determines whether a given value should be considered for the last value + */ +function useLast(value, filterFn) { + var _a = __read(React.useState(filterFn && filterFn(value) ? value : undefined), 2), + last = _a[0], + setLast = _a[1] + React.useEffect( + function () { + setLast(function (last) { + var shouldUse = filterFn ? filterFn(value) : true + if (shouldUse) return value + return last + }) + }, + [filterFn, value] + ) + return last +} + +function useOnClickOutside(node, handler) { + var handlerRef = React.useRef(handler) + React.useEffect( + function () { + handlerRef.current = handler + }, + [handler] + ) + React.useEffect( + function () { + var handleClickOutside = function (e) { + var _a, _b + if ( + (_b = (_a = node.current) === null || _a === void 0 ? void 0 : _a.contains(e.target)) !== null && + _b !== void 0 + ? _b + : false + ) { + return + } + if (handlerRef.current) handlerRef.current() + } + document.addEventListener('mousedown', handleClickOutside) + return function () { + document.removeEventListener('mousedown', handleClickOutside) + } + }, + [node] + ) +} + +function useToggle(initialState) { + if (initialState === void 0) { + initialState = false + } + var _a = __read(React.useState(initialState), 2), + state = _a[0], + setState = _a[1] + var toggle = React.useCallback(function () { + return setState(function (state) { + return !state + }) + }, []) + return [state, toggle] +} + +function currencyId(currency) { + if (currency.isNative) return 'ETH' + if (currency.isToken) return currency.address + throw new Error('invalid currency') +} + +var MobileWrapper = styled__default['default'](AutoColumn)( + templateObject_2$l || (templateObject_2$l = __makeTemplateObject(['\n ', ';\n'], ['\n ', ';\n'])), + function (_a) { + var theme = _a.theme + return theme.mediaWidth.upToSmall( + templateObject_1$x || + (templateObject_1$x = __makeTemplateObject(['\n display: none;\n '], ['\n display: none;\n '])) + ) + } +) +var BaseWrapper = styled__default['default'].div( + templateObject_3$g || + (templateObject_3$g = __makeTemplateObject( + [ + '\n border: 1px solid ', + ';\n border-radius: 10px;\n display: flex;\n padding: 6px;\n\n align-items: center;\n :hover {\n cursor: ', + ';\n background-color: ', + ';\n }\n\n color: ', + ';\n background-color: ', + ';\n filter: ', + ';\n', + ], + [ + '\n border: 1px solid ', + ';\n border-radius: 10px;\n display: flex;\n padding: 6px;\n\n align-items: center;\n :hover {\n cursor: ', + ';\n background-color: ', + ';\n }\n\n color: ', + ';\n background-color: ', + ';\n filter: ', + ';\n', + ] + )), + function (_a) { + var theme = _a.theme, + disable = _a.disable + return disable ? 'transparent' : theme.bg3 + }, + function (_a) { + var disable = _a.disable + return !disable && 'pointer' + }, + function (_a) { + var theme = _a.theme, + disable = _a.disable + return !disable && theme.bg2 + }, + function (_a) { + var theme = _a.theme, + disable = _a.disable + return disable && theme.text3 + }, + function (_a) { + var theme = _a.theme, + disable = _a.disable + return disable && theme.bg3 + }, + function (_a) { + var disable = _a.disable + return disable && 'grayscale(1)' + } +) +function CommonBases(_a) { + var _b + var chainId = _a.chainId, + onSelect = _a.onSelect, + selectedCurrency = _a.selectedCurrency + var bases = typeof chainId !== 'undefined' ? ((_b = COMMON_BASES[chainId]) !== null && _b !== void 0 ? _b : []) : [] + return bases.length > 0 + ? jsxRuntime.jsx( + MobileWrapper, + __assign( + { gap: 'md' }, + { + children: jsxRuntime.jsx( + AutoRow, + __assign( + { gap: '4px' }, + { + children: bases.map(function (currency) { + var isSelected = + selectedCurrency === null || selectedCurrency === void 0 + ? void 0 + : selectedCurrency.equals(currency) + return jsxRuntime.jsxs( + BaseWrapper, + __assign( + { + onClick() { + return !isSelected && onSelect(currency) + }, + disable: isSelected, + }, + { + children: [ + jsxRuntime.jsx(CurrencyLogoFromList, { currency }, void 0), + jsxRuntime.jsx( + rebass.Text, + __assign({ fontWeight: 500, fontSize: 16 }, { children: currency.symbol }), + void 0 + ), + ], + } + ), + currencyId(currency) + ) + }), + } + ), + void 0 + ), + } + ), + void 0 + ) + : null +} +/** helper component to retrieve a base currency from the active token lists */ +function CurrencyLogoFromList(_a) { + var currency = _a.currency + var token = useTokenInfoFromActiveList(currency) + return jsxRuntime.jsx(CurrencyLogo, { currency: token, style: { marginRight: 8 } }, void 0) +} +var templateObject_1$x, templateObject_2$l, templateObject_3$g + +var QuestionWrapper = styled__default['default'].div( + templateObject_1$w || + (templateObject_1$w = __makeTemplateObject( + [ + '\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0px;\n width: 18px;\n height: 18px;\n border: none;\n background: none;\n outline: none;\n cursor: default;\n border-radius: 36px;\n font-size: 12px;\n background-color: ', + ';\n color: ', + ';\n\n :hover,\n :focus {\n opacity: 0.7;\n }\n', + ], + [ + '\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0px;\n width: 18px;\n height: 18px;\n border: none;\n background: none;\n outline: none;\n cursor: default;\n border-radius: 36px;\n font-size: 12px;\n background-color: ', + ';\n color: ', + ';\n\n :hover,\n :focus {\n opacity: 0.7;\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.bg2 + }, + function (_a) { + var theme = _a.theme + return theme.text2 + } +) +var QuestionMark = styled__default['default'].span( + templateObject_2$k || + (templateObject_2$k = __makeTemplateObject(['\n font-size: 14px;\n'], ['\n font-size: 14px;\n'])) +) +function QuestionHelper(_a) { + var text = _a.text + var _b = __read(React.useState(false), 2), + show = _b[0], + setShow = _b[1] + var open = React.useCallback( + function () { + return setShow(true) + }, + [setShow] + ) + var close = React.useCallback( + function () { + return setShow(false) + }, + [setShow] + ) + return jsxRuntime.jsx( + 'span', + __assign( + { style: { marginLeft: 4, display: 'flex', alignItems: 'center' } }, + { + children: jsxRuntime.jsx( + Tooltip, + __assign( + { text, show }, + { + children: jsxRuntime.jsx( + QuestionWrapper, + __assign( + { onClick: open, onMouseEnter: open, onMouseLeave: close }, + { children: jsxRuntime.jsx(QuestionMark, { children: '?' }, void 0) } + ), + void 0 + ), + } + ), + void 0 + ), + } + ), + void 0 + ) +} +var templateObject_1$w, templateObject_2$k + +var TokenListLogo = + 'data:image/svg+xml,%3Csvg%20width%3D%22225%22%20height%3D%22225%22%20viewBox%3D%220%200%20225%20225%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M74.8125%20190.529C65.7561%20190.513%2055.5298%20183.748%2051.9715%20175.42L19.9417%20100.456C16.3834%2092.1277%2020.8404%2085.39%2029.8968%2085.4068L111.417%2085.5579C120.473%2085.5747%20130.699%2092.3395%20134.258%20100.668L166.288%20175.632C169.846%20183.96%20165.389%20190.697%20156.332%20190.681L74.8125%20190.529Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint0_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint1_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint2_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint3_radial%29%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M92.958%20165.95C82.7695%20165.931%2071.265%20158.321%2067.2619%20148.952L26.2489%2052.9632C22.2458%2043.5941%2027.26%2036.0143%2037.4485%2036.0332L141.832%2036.2266C152.02%2036.2455%20163.525%2043.8559%20167.528%2053.225L208.541%20149.214C212.544%20158.583%20207.53%20166.163%20197.341%20166.144L92.958%20165.95ZM71.3614%20148.959C74.475%20156.246%2083.4229%20162.166%2091.3473%20162.18L195.73%20162.374C203.655%20162.388%20207.555%20156.493%20204.441%20149.206L163.428%2053.2174C160.315%2045.9304%20151.367%2040.0111%20143.442%2039.9964L39.0592%2039.803C31.1349%2039.7883%2027.2349%2045.6837%2030.3485%2052.9708L71.3614%20148.959Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M68.565%2053.3425C81.1781%2053.3659%2095.4205%2062.7875%20100.376%2074.3862C105.332%2085.985%2099.1246%2095.3687%2086.5115%2095.3454C73.8984%2095.322%2059.6559%2085.9004%2054.7001%2074.3016C49.7443%2062.7028%2055.9518%2053.3191%2068.565%2053.3425Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M90.6891%20104.981C103.302%20105.004%20117.545%20114.425%20122.5%20126.024C127.456%20137.623%20121.249%20147.007%20108.636%20146.983C96.0225%20146.96%2081.7801%20137.538%2076.8243%20125.94C71.8685%20114.341%2078.076%20104.957%2090.6891%20104.981Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M147.538%20105.142C160.151%20105.166%20174.394%20114.587%20179.349%20126.186C184.305%20137.785%20178.098%20147.168%20165.485%20147.145C152.871%20147.122%20138.629%20137.7%20133.673%20126.101C128.717%20114.503%20134.925%20105.119%20147.538%20105.142Z%22%20fill%3D%22%23131313%22%2F%3E%3Cdefs%3E%3CradialGradient%20id%3D%22paint0_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%28134.41%2068.3006%29%20rotate%28-33.9533%29%20scale%2890.6795%2083.3208%29%22%3E%3Cstop%20offset%3D%220.661458%22%20stop-color%3D%22%23C4FCF8%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint1_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%2842.7873%20129.218%29%20rotate%28-24.1606%29%20scale%28213.359%20196.045%29%22%3E%3Cstop%20stop-color%3D%22%23FF0099%22%20stop-opacity%3D%220.9%22%2F%3E%3Cstop%20offset%3D%220.770833%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint2_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%28176.854%20148.655%29%20rotate%28-53.4908%29%20scale%28107.342%2098.6309%29%22%3E%3Cstop%20stop-color%3D%22%23FFEC43%22%2F%3E%3Cstop%20offset%3D%220.805707%22%20stop-color%3D%22%23FFF6A8%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint3_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%2857.5443%2053.4752%29%20rotate%2820.3896%29%20scale%28137.027%20125.907%29%22%3E%3Cstop%20offset%3D%220.125%22%20stop-color%3D%22%235886FE%22%20stop-opacity%3D%220.46%22%2F%3E%3Cstop%20offset%3D%220.673044%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3C%2Fdefs%3E%3C%2Fsvg%3E' + +var rotate = styled.keyframes( + templateObject_1$v || + (templateObject_1$v = __makeTemplateObject( + ['\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n'], + ['\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n'] + )) +) +var StyledSVG = styled__default['default'].svg( + templateObject_2$j || + (templateObject_2$j = __makeTemplateObject( + ['\n animation: 2s ', ' linear infinite;\n height: ', ';\n width: ', ';\n path {\n stroke: ', ';\n }\n'], + [ + '\n animation: 2s ', + ' linear infinite;\n height: ', + ';\n width: ', + ';\n path {\n stroke: ', + ';\n }\n', + /** + * Takes in custom size and stroke for circle color, default to primary color as fill, + * need ...rest for layered styles on top + */ + ] + )), + rotate, + function (_a) { + var size = _a.size + return size + }, + function (_a) { + var size = _a.size + return size + }, + function (_a) { + var stroke = _a.stroke, + theme = _a.theme + return stroke !== null && stroke !== void 0 ? stroke : theme.primary1 + } +) +/** + * Takes in custom size and stroke for circle color, default to primary color as fill, + * need ...rest for layered styles on top + */ +function Loader(_a) { + var _b = _a.size, + size = _b === void 0 ? '16px' : _b, + stroke = _a.stroke, + rest = __rest(_a, ['size', 'stroke']) + return jsxRuntime.jsx( + StyledSVG, + __assign({ viewBox: '0 0 24 24', fill: 'none', xmlns: 'http://www.w3.org/2000/svg', size, stroke }, rest, { + children: jsxRuntime.jsx( + 'path', + { + d: 'M12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22C17.5228 22 22 17.5228 22 12C22 9.27455 20.9097 6.80375 19.1414 5', + strokeWidth: '2.5', + strokeLinecap: 'round', + strokeLinejoin: 'round', + }, + void 0 + ), + }), + void 0 + ) +} +var templateObject_1$v, templateObject_2$j + +var StyledListLogo = styled__default['default'](Logo)( + templateObject_1$u || + (templateObject_1$u = __makeTemplateObject( + ['\n width: ', ';\n height: ', ';\n'], + ['\n width: ', ';\n height: ', ';\n'] + )), + function (_a) { + var size = _a.size + return size + }, + function (_a) { + var size = _a.size + return size + } +) +function ListLogo(_a) { + var logoURI = _a.logoURI, + style = _a.style, + _b = _a.size, + size = _b === void 0 ? '24px' : _b, + alt = _a.alt + var srcs = useHttpLocations(logoURI) + return jsxRuntime.jsx(StyledListLogo, { alt, size, srcs, style }, void 0) +} +var templateObject_1$u + +var TokenSection = styled__default['default'].div( + templateObject_1$t || + (templateObject_1$t = __makeTemplateObject( + [ + '\n padding: 4px 20px;\n height: 56px;\n display: grid;\n grid-template-columns: auto minmax(auto, 1fr) auto;\n grid-gap: 16px;\n align-items: center;\n\n opacity: ', + ';\n', + ], + [ + '\n padding: 4px 20px;\n height: 56px;\n display: grid;\n grid-template-columns: auto minmax(auto, 1fr) auto;\n grid-gap: 16px;\n align-items: center;\n\n opacity: ', + ';\n', + ] + )), + function (_a) { + var dim = _a.dim + return dim ? '0.4' : '1' + } +) +var CheckIcon = styled__default['default'](reactFeather.CheckCircle)( + templateObject_2$i || + (templateObject_2$i = __makeTemplateObject( + ['\n height: 16px;\n width: 16px;\n margin-right: 6px;\n stroke: ', ';\n'], + ['\n height: 16px;\n width: 16px;\n margin-right: 6px;\n stroke: ', ';\n'] + )), + function (_a) { + var theme = _a.theme + return theme.green1 + } +) +var NameOverflow = styled__default['default'].div( + templateObject_3$f || + (templateObject_3$f = __makeTemplateObject( + [ + '\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 140px;\n font-size: 12px;\n', + ], + [ + '\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 140px;\n font-size: 12px;\n', + ] + )) +) +function ImportRow(_a) { + var token = _a.token, + style = _a.style, + dim = _a.dim, + showImportView = _a.showImportView, + setImportToken = _a.setImportToken + var theme = useTheme() + // check if already active on list or local storage tokens + var isAdded = useIsUserAddedToken(token) + var isActive = useIsTokenActive(token) + var list = token instanceof WrappedTokenInfo ? token.list : undefined + return jsxRuntime.jsxs( + TokenSection, + __assign( + { style }, + { + children: [ + jsxRuntime.jsx( + CurrencyLogo, + { currency: token, size: '24px', style: { opacity: dim ? '0.6' : '1' } }, + void 0 + ), + jsxRuntime.jsxs( + AutoColumn, + __assign( + { gap: '4px', style: { opacity: dim ? '0.6' : '1' } }, + { + children: [ + jsxRuntime.jsxs( + AutoRow, + { + children: [ + jsxRuntime.jsx( + ThemedText.Body, + __assign({ fontWeight: 500 }, { children: token.symbol }), + void 0 + ), + jsxRuntime.jsx( + ThemedText.DarkGray, + __assign( + { ml: '8px', fontWeight: 300 }, + { + children: jsxRuntime.jsx( + NameOverflow, + __assign({ title: token.name }, { children: token.name }), + void 0 + ), + } + ), + void 0 + ), + ], + }, + void 0 + ), + list && + list.logoURI && + jsxRuntime.jsxs( + RowFixed, + { + children: [ + jsxRuntime.jsx( + ThemedText.Small, + __assign( + { mr: '4px', color: theme.text3 }, + { children: jsxRuntime.jsxs(macro.Trans, { children: ['via ', list.name, ' '] }, void 0) } + ), + void 0 + ), + jsxRuntime.jsx(ListLogo, { logoURI: list.logoURI, size: '12px' }, void 0), + ], + }, + void 0 + ), + ], + } + ), + void 0 + ), + !isActive && !isAdded + ? jsxRuntime.jsx( + ButtonPrimary, + __assign( + { + width: 'fit-content', + padding: '6px 12px', + fontWeight: 500, + fontSize: '14px', + onClick() { + setImportToken && setImportToken(token) + showImportView() + }, + }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'Import' }, void 0) } + ), + void 0 + ) + : jsxRuntime.jsxs( + RowFixed, + __assign( + { style: { minWidth: 'fit-content' } }, + { + children: [ + jsxRuntime.jsx(CheckIcon, {}, void 0), + jsxRuntime.jsx( + ThemedText.Main, + __assign( + { color: theme.green1 }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'Active' }, void 0) } + ), + void 0 + ), + ], + } + ), + void 0 + ), + ], + } + ), + void 0 + ) +} +var templateObject_1$t, templateObject_2$i, templateObject_3$f + +var TextDot = styled__default['default'].div( + templateObject_1$s || + (templateObject_1$s = __makeTemplateObject( + ['\n height: 3px;\n width: 3px;\n background-color: ', ';\n border-radius: 50%;\n'], + ['\n height: 3px;\n width: 3px;\n background-color: ', ';\n border-radius: 50%;\n'] + )), + function (_a) { + var theme = _a.theme + return theme.text2 + } +) +var Checkbox = styled__default['default'].input( + templateObject_2$h || + (templateObject_2$h = __makeTemplateObject( + ['\n border: 1px solid ', ';\n height: 20px;\n margin: 0;\n'], + ['\n border: 1px solid ', ';\n height: 20px;\n margin: 0;\n'] + )), + function (_a) { + var theme = _a.theme + return theme.red3 + } +) +var PaddedColumn = styled__default['default'](AutoColumn)( + templateObject_3$e || (templateObject_3$e = __makeTemplateObject(['\n padding: 20px;\n'], ['\n padding: 20px;\n'])) +) +var MenuItem = styled__default['default'](RowBetween)( + templateObject_4$9 || + (templateObject_4$9 = __makeTemplateObject( + [ + '\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: ', + ';\n pointer-events: ', + ';\n :hover {\n background-color: ', + ';\n }\n opacity: ', + ';\n', + ], + [ + '\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: ', + ';\n pointer-events: ', + ';\n :hover {\n background-color: ', + ';\n }\n opacity: ', + ';\n', + ] + )), + function (_a) { + var disabled = _a.disabled + return !disabled && 'pointer' + }, + function (_a) { + var disabled = _a.disabled + return disabled && 'none' + }, + function (_a) { + var theme = _a.theme, + disabled = _a.disabled + return !disabled && theme.bg2 + }, + function (_a) { + var disabled = _a.disabled, + selected = _a.selected + return disabled || selected ? 0.5 : 1 + } +) +var SearchInput = styled__default['default'].input( + templateObject_5$8 || + (templateObject_5$8 = __makeTemplateObject( + [ + '\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: ', + ';\n border-style: solid;\n border: 1px solid ', + ';\n -webkit-appearance: none;\n\n font-size: 18px;\n\n ::placeholder {\n color: ', + ';\n }\n transition: border 100ms;\n :focus {\n border: 1px solid ', + ';\n outline: none;\n }\n', + ], + [ + '\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: ', + ';\n border-style: solid;\n border: 1px solid ', + ';\n -webkit-appearance: none;\n\n font-size: 18px;\n\n ::placeholder {\n color: ', + ';\n }\n transition: border 100ms;\n :focus {\n border: 1px solid ', + ';\n outline: none;\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.text1 + }, + function (_a) { + var theme = _a.theme + return theme.bg3 + }, + function (_a) { + var theme = _a.theme + return theme.text3 + }, + function (_a) { + var theme = _a.theme + return theme.primary1 + } +) +var Separator = styled__default['default'].div( + templateObject_6$5 || + (templateObject_6$5 = __makeTemplateObject( + ['\n width: 100%;\n height: 1px;\n background-color: ', ';\n'], + ['\n width: 100%;\n height: 1px;\n background-color: ', ';\n'] + )), + function (_a) { + var theme = _a.theme + return theme.bg2 + } +) +var SeparatorDark = styled__default['default'].div( + templateObject_7$4 || + (templateObject_7$4 = __makeTemplateObject( + ['\n width: 100%;\n height: 1px;\n background-color: ', ';\n'], + ['\n width: 100%;\n height: 1px;\n background-color: ', ';\n'] + )), + function (_a) { + var theme = _a.theme + return theme.bg3 + } +) +var templateObject_1$s, + templateObject_2$h, + templateObject_3$e, + templateObject_4$9, + templateObject_5$8, + templateObject_6$5, + templateObject_7$4 + +function currencyKey(currency) { + return currency.isToken ? currency.address : 'ETHER' +} +var StyledBalanceText = styled__default['default'](rebass.Text)( + templateObject_1$r || + (templateObject_1$r = __makeTemplateObject( + ['\n white-space: nowrap;\n overflow: hidden;\n max-width: 5rem;\n text-overflow: ellipsis;\n'], + ['\n white-space: nowrap;\n overflow: hidden;\n max-width: 5rem;\n text-overflow: ellipsis;\n'] + )) +) +var Tag = styled__default['default'].div( + templateObject_2$g || + (templateObject_2$g = __makeTemplateObject( + [ + '\n background-color: ', + ';\n color: ', + ';\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 background-color: ', + ';\n color: ', + ';\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', + ] + )), + function (_a) { + var theme = _a.theme + return theme.bg3 + }, + function (_a) { + var theme = _a.theme + return theme.text2 + } +) +var FixedContentRow = styled__default['default'].div( + templateObject_3$d || + (templateObject_3$d = __makeTemplateObject( + ['\n padding: 4px 20px;\n height: 56px;\n display: grid;\n grid-gap: 16px;\n align-items: center;\n'], + ['\n padding: 4px 20px;\n height: 56px;\n display: grid;\n grid-gap: 16px;\n align-items: center;\n'] + )) +) +function Balance(_a) { + var balance = _a.balance + return jsxRuntime.jsx( + StyledBalanceText, + __assign({ title: balance.toExact() }, { children: balance.toSignificant(4) }), + void 0 + ) +} +var TagContainer = styled__default['default'].div( + templateObject_4$8 || + (templateObject_4$8 = __makeTemplateObject( + ['\n display: flex;\n justify-content: flex-end;\n'], + ['\n display: flex;\n justify-content: flex-end;\n'] + )) +) +var TokenListLogoWrapper = styled__default['default'].img( + templateObject_5$7 || (templateObject_5$7 = __makeTemplateObject(['\n height: 20px;\n'], ['\n height: 20px;\n'])) +) +function TokenTags(_a) { + var currency = _a.currency + if (!(currency instanceof WrappedTokenInfo)) { + return jsxRuntime.jsx('span', {}, void 0) + } + var tags = currency.tags + if (!tags || tags.length === 0) return jsxRuntime.jsx('span', {}, void 0) + var tag = tags[0] + return jsxRuntime.jsxs( + TagContainer, + { + children: [ + jsxRuntime.jsx( + MouseoverTooltip, + __assign({ text: tag.description }, { children: jsxRuntime.jsx(Tag, { children: tag.name }, tag.id) }), + void 0 + ), + tags.length > 1 + ? jsxRuntime.jsx( + MouseoverTooltip, + __assign( + { + text: tags + .slice(1) + .map(function (_a) { + var name = _a.name, + description = _a.description + return name + ': ' + description + }) + .join('; \n'), + }, + { children: jsxRuntime.jsx(Tag, { children: '...' }, void 0) } + ), + void 0 + ) + : null, + ], + }, + void 0 + ) +} +function CurrencyRow(_a) { + var currency = _a.currency, + onSelect = _a.onSelect, + isSelected = _a.isSelected, + otherSelected = _a.otherSelected, + style = _a.style, + showCurrencyAmount = _a.showCurrencyAmount + var account = useActiveWeb3React().account + var key = currencyKey(currency) + var selectedTokenList = useCombinedActiveList() + var isOnSelectedList = isTokenOnList(selectedTokenList, currency.isToken ? currency : undefined) + var customAdded = useIsUserAddedToken(currency) + var balance = useCurrencyBalance(account !== null && account !== void 0 ? account : undefined, currency) + // only show add or remove buttons if not on selected list + return jsxRuntime.jsxs( + MenuItem, + __assign( + { + style, + className: 'token-item-' + key, + onClick() { + return isSelected ? null : onSelect() + }, + disabled: isSelected, + selected: otherSelected, + }, + { + children: [ + jsxRuntime.jsx(CurrencyLogo, { currency, size: '24px' }, void 0), + jsxRuntime.jsxs( + Column, + { + children: [ + jsxRuntime.jsx( + rebass.Text, + __assign({ title: currency.name, fontWeight: 500 }, { children: currency.symbol }), + void 0 + ), + jsxRuntime.jsx( + ThemedText.DarkGray, + __assign( + { ml: '0px', fontSize: '12px', fontWeight: 300 }, + { + children: + !currency.isNative && !isOnSelectedList && customAdded + ? jsxRuntime.jsxs(macro.Trans, { children: [currency.name, ' \u2022 Added by user'] }, void 0) + : currency.name, + } + ), + void 0 + ), + ], + }, + void 0 + ), + jsxRuntime.jsx(TokenTags, { currency }, void 0), + showCurrencyAmount && + jsxRuntime.jsx( + RowFixed, + __assign( + { style: { justifySelf: 'flex-end' } }, + { + children: balance + ? jsxRuntime.jsx(Balance, { balance }, void 0) + : account + ? jsxRuntime.jsx(Loader, {}, void 0) + : null, + } + ), + void 0 + ), + ], + } + ), + void 0 + ) +} +var BREAK_LINE = 'BREAK' +function isBreakLine(x) { + return x === BREAK_LINE +} +function BreakLineComponent(_a) { + var style = _a.style + var theme = useTheme() + return jsxRuntime.jsx( + FixedContentRow, + __assign( + { style }, + { + children: jsxRuntime.jsx( + LightGreyCard, + __assign( + { padding: '8px 12px', $borderRadius: '8px' }, + { + children: jsxRuntime.jsxs( + RowBetween, + { + children: [ + jsxRuntime.jsxs( + RowFixed, + { + children: [ + jsxRuntime.jsx(TokenListLogoWrapper, { src: TokenListLogo }, void 0), + jsxRuntime.jsx( + ThemedText.Main, + __assign( + { ml: '6px', fontSize: '12px', color: theme.text1 }, + { + children: jsxRuntime.jsx( + macro.Trans, + { children: 'Expanded results from inactive Token Lists' }, + void 0 + ), + } + ), + void 0 + ), + ], + }, + void 0 + ), + jsxRuntime.jsx( + QuestionHelper, + { + text: jsxRuntime.jsx( + macro.Trans, + { + children: + 'Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.', + }, + void 0 + ), + }, + void 0 + ), + ], + }, + void 0 + ), + } + ), + void 0 + ), + } + ), + void 0 + ) +} +function CurrencyList(_a) { + var height = _a.height, + currencies = _a.currencies, + otherListTokens = _a.otherListTokens, + selectedCurrency = _a.selectedCurrency, + onCurrencySelect = _a.onCurrencySelect, + otherCurrency = _a.otherCurrency, + fixedListRef = _a.fixedListRef, + showImportView = _a.showImportView, + setImportToken = _a.setImportToken, + showCurrencyAmount = _a.showCurrencyAmount + var itemData = React.useMemo( + function () { + if ( + otherListTokens && + (otherListTokens === null || otherListTokens === void 0 ? void 0 : otherListTokens.length) > 0 + ) { + return __spreadArray( + __spreadArray(__spreadArray([], __read(currencies), false), [BREAK_LINE], false), + __read(otherListTokens), + false + ) + } + return currencies + }, + [currencies, otherListTokens] + ) + var Row = React.useCallback( + function TokenRow(_a) { + var data = _a.data, + index = _a.index, + style = _a.style + var row = data[index] + if (isBreakLine(row)) { + return jsxRuntime.jsx(BreakLineComponent, { style }, void 0) + } + var currency = row + var isSelected = Boolean(currency && selectedCurrency && selectedCurrency.equals(currency)) + var otherSelected = Boolean(currency && otherCurrency && otherCurrency.equals(currency)) + var handleSelect = function () { + return currency && onCurrencySelect(currency) + } + var token = currency === null || currency === void 0 ? void 0 : currency.wrapped + var showImport = index > currencies.length + if (showImport && token) { + return jsxRuntime.jsx(ImportRow, { style, token, showImportView, setImportToken, dim: true }, void 0) + } else if (currency) { + return jsxRuntime.jsx( + CurrencyRow, + { + style, + currency, + isSelected, + onSelect: handleSelect, + otherSelected, + showCurrencyAmount, + }, + void 0 + ) + } else { + return null + } + }, + [ + currencies.length, + onCurrencySelect, + otherCurrency, + selectedCurrency, + setImportToken, + showImportView, + showCurrencyAmount, + ] + ) + var itemKey = React.useCallback(function (index, data) { + var currency = data[index] + if (isBreakLine(currency)) return BREAK_LINE + return currencyKey(currency) + }, []) + return jsxRuntime.jsx( + reactWindow.FixedSizeList, + __assign( + { + height, + ref: fixedListRef, + width: '100%', + itemData, + itemCount: itemData.length, + itemSize: 56, + itemKey, + }, + { children: Row } + ), + void 0 + ) +} +var templateObject_1$r, templateObject_2$g, templateObject_3$d, templateObject_4$8, templateObject_5$7 + +var ContentWrapper = styled__default['default'](Column)( + templateObject_1$q || + (templateObject_1$q = __makeTemplateObject( + ['\n width: 100%;\n flex: 1 1;\n position: relative;\n'], + ['\n width: 100%;\n flex: 1 1;\n position: relative;\n'] + )) +) +var Footer$1 = styled__default['default'].div( + templateObject_2$f || + (templateObject_2$f = __makeTemplateObject( + [ + '\n width: 100%;\n border-radius: 20px;\n padding: 20px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n background-color: ', + ';\n border-top: 1px solid ', + ';\n', + ], + [ + '\n width: 100%;\n border-radius: 20px;\n padding: 20px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n background-color: ', + ';\n border-top: 1px solid ', + ';\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.bg1 + }, + function (_a) { + var theme = _a.theme + return theme.bg2 + } +) +function CurrencySearch(_a) { + var selectedCurrency = _a.selectedCurrency, + onCurrencySelect = _a.onCurrencySelect, + otherSelectedCurrency = _a.otherSelectedCurrency, + showCommonBases = _a.showCommonBases, + showCurrencyAmount = _a.showCurrencyAmount, + disableNonToken = _a.disableNonToken, + onDismiss = _a.onDismiss, + isOpen = _a.isOpen, + showManageView = _a.showManageView, + showImportView = _a.showImportView, + setImportToken = _a.setImportToken + var chainId = useActiveWeb3React().chainId + var theme = useTheme() + // refs for fixed size lists + var fixedList = React.useRef() + var _b = __read(React.useState(''), 2), + searchQuery = _b[0], + setSearchQuery = _b[1] + var debouncedQuery = useDebounce(searchQuery, 200) + var allTokens = useAllTokens() + // if they input an address, use it + var isAddressSearch = isAddress(debouncedQuery) + var searchToken = useToken(debouncedQuery) + var searchTokenIsAdded = useIsUserAddedToken(searchToken) + React.useEffect( + function () { + if (isAddressSearch) { + ReactGA__default['default'].event({ + category: 'Currency Select', + action: 'Search by address', + label: isAddressSearch, + }) + } + }, + [isAddressSearch] + ) + var filteredTokens = React.useMemo( + function () { + return Object.values(allTokens).filter(getTokenFilter(debouncedQuery)) + }, + [allTokens, debouncedQuery] + ) + var balances = useAllTokenBalances() + var sortedTokens = React.useMemo( + function () { + return filteredTokens.sort(tokenComparator.bind(null, balances)) + }, + [balances, filteredTokens] + ) + var filteredSortedTokens = useSortTokensByQuery(debouncedQuery, sortedTokens) + var native = useNativeCurrency() + var filteredSortedTokensWithETH = React.useMemo( + function () { + var _a, _b + if (!native) return filteredSortedTokens + var s = debouncedQuery.toLowerCase().trim() + if ( + ((_b = (_a = native.symbol) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === null || _b === void 0 + ? void 0 + : _b.indexOf(s)) !== -1 + ) { + return native ? __spreadArray([native], __read(filteredSortedTokens), false) : filteredSortedTokens + } + return filteredSortedTokens + }, + [debouncedQuery, native, filteredSortedTokens] + ) + var handleCurrencySelect = React.useCallback( + function (currency) { + onCurrencySelect(currency) + onDismiss() + }, + [onDismiss, onCurrencySelect] + ) + // clear the input on open + React.useEffect( + function () { + if (isOpen) setSearchQuery('') + }, + [isOpen] + ) + // manage focus on modal show + var inputRef = React.useRef() + var handleInput = React.useCallback(function (event) { + var _a + var input = event.target.value + var checksummedInput = isAddress(input) + setSearchQuery(checksummedInput || input) + ;(_a = fixedList.current) === null || _a === void 0 ? void 0 : _a.scrollTo(0) + }, []) + var handleEnter = React.useCallback( + function (e) { + var _a, _b + if (e.key === 'Enter') { + var s = debouncedQuery.toLowerCase().trim() + if ( + s === + ((_a = native === null || native === void 0 ? void 0 : native.symbol) === null || _a === void 0 + ? void 0 + : _a.toLowerCase()) + ) { + handleCurrencySelect(native) + } else if (filteredSortedTokensWithETH.length > 0) { + if ( + ((_b = filteredSortedTokensWithETH[0].symbol) === null || _b === void 0 ? void 0 : _b.toLowerCase()) === + debouncedQuery.trim().toLowerCase() || + filteredSortedTokensWithETH.length === 1 + ) { + handleCurrencySelect(filteredSortedTokensWithETH[0]) + } + } + } + }, + [debouncedQuery, native, filteredSortedTokensWithETH, handleCurrencySelect] + ) + // menu ui + var _c = __read(useToggle(false), 2), + open = _c[0], + toggle = _c[1] + var node = React.useRef() + useOnClickOutside(node, open ? toggle : undefined) + // if no results on main list, show option to expand into inactive + var filteredInactiveTokens = useSearchInactiveTokenLists( + filteredTokens.length === 0 || (debouncedQuery.length > 2 && !isAddressSearch) ? debouncedQuery : undefined + ) + return jsxRuntime.jsxs( + ContentWrapper, + { + children: [ + jsxRuntime.jsxs( + PaddedColumn, + __assign( + { gap: '16px' }, + { + children: [ + jsxRuntime.jsxs( + RowBetween, + { + children: [ + jsxRuntime.jsx( + rebass.Text, + __assign( + { fontWeight: 500, fontSize: 16 }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'Select a token' }, void 0) } + ), + void 0 + ), + jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0), + ], + }, + void 0 + ), + jsxRuntime.jsx( + Row, + { + children: jsxRuntime.jsx( + SearchInput, + { + type: 'text', + id: 'token-search-input', + placeholder: macro.t( + templateObject_3$c || + (templateObject_3$c = __makeTemplateObject( + ['Search name or paste address'], + ['Search name or paste address'] + )) + ), + autoComplete: 'off', + value: searchQuery, + ref: inputRef, + onChange: handleInput, + onKeyDown: handleEnter, + }, + void 0 + ), + }, + void 0 + ), + showCommonBases && + jsxRuntime.jsx(CommonBases, { chainId, onSelect: handleCurrencySelect, selectedCurrency }, void 0), + ], + } + ), + void 0 + ), + jsxRuntime.jsx(Separator, {}, void 0), + searchToken && !searchTokenIsAdded + ? jsxRuntime.jsx( + Column, + __assign( + { style: { padding: '20px 0', height: '100%' } }, + { + children: jsxRuntime.jsx(ImportRow, { token: searchToken, showImportView, setImportToken }, void 0), + } + ), + void 0 + ) + : (filteredSortedTokens === null || filteredSortedTokens === void 0 ? void 0 : filteredSortedTokens.length) > + 0 || + (filteredInactiveTokens === null || filteredInactiveTokens === void 0 + ? void 0 + : filteredInactiveTokens.length) > 0 + ? jsxRuntime.jsx( + 'div', + __assign( + { style: { flex: '1' } }, + { + children: jsxRuntime.jsx( + AutoSizer__default['default'], + __assign( + { disableWidth: true }, + { + children(_a) { + var height = _a.height + return jsxRuntime.jsx( + CurrencyList, + { + height, + currencies: disableNonToken ? filteredSortedTokens : filteredSortedTokensWithETH, + otherListTokens: filteredInactiveTokens, + onCurrencySelect: handleCurrencySelect, + otherCurrency: otherSelectedCurrency, + selectedCurrency, + fixedListRef: fixedList, + showImportView, + setImportToken, + showCurrencyAmount, + }, + void 0 + ) + }, + } + ), + void 0 + ), + } + ), + void 0 + ) + : jsxRuntime.jsx( + Column, + __assign( + { style: { padding: '20px', height: '100%' } }, + { + children: jsxRuntime.jsx( + ThemedText.Main, + __assign( + { color: theme.text3, textAlign: 'center', mb: '20px' }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'No results found.' }, void 0) } + ), + void 0 + ), + } + ), + void 0 + ), + jsxRuntime.jsx( + Footer$1, + { + children: jsxRuntime.jsx( + Row, + __assign( + { justify: 'center' }, + { + children: jsxRuntime.jsx( + ButtonText, + __assign( + { onClick: showManageView, color: theme.primary1, className: 'list-token-manage-button' }, + { + children: jsxRuntime.jsxs( + RowFixed, + { + children: [ + jsxRuntime.jsx( + IconWrapper, + __assign( + { size: '16px', marginRight: '6px', stroke: theme.primaryText1 }, + { children: jsxRuntime.jsx(reactFeather.Edit, {}, void 0) } + ), + void 0 + ), + jsxRuntime.jsx( + ThemedText.Main, + __assign( + { color: theme.primaryText1 }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'Manage Token Lists' }, void 0) } + ), + void 0 + ), + ], + }, + void 0 + ), + } + ), + void 0 + ), + } + ), + void 0 + ), + }, + void 0 + ), + ], + }, + void 0 + ) +} +var templateObject_1$q, templateObject_2$f, templateObject_3$c + +var UNISWAP_LOGO_URL = + 'data:image/svg+xml,%3Csvg%20width%3D%2214%22%20height%3D%2215%22%20viewBox%3D%220%200%2014%2015%22%20fill%3D%22black%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20style%3D%22mix-blend-mode%3Adarken%22%3E%3Cpath%20d%3D%22M4.15217%201.55141C3.96412%201.52242%203.95619%201.51902%204.04468%201.5055C4.21427%201.47958%204.61472%201.51491%204.89067%201.58012C5.53489%201.73232%206.12109%202.12221%206.74683%202.81466L6.91307%202.99862L7.15088%202.96062C8.15274%202.8006%209.17194%202.92778%2010.0244%203.31918C10.2589%203.42686%2010.6287%203.64121%2010.6749%203.69629C10.6896%203.71384%2010.7166%203.82684%2010.7349%203.94742C10.7982%204.36458%2010.7665%204.68434%2010.6382%204.92317C10.5683%205.05313%2010.5644%205.09432%2010.6114%205.20554C10.6489%205.2943%2010.7534%205.35999%2010.8569%205.35985C11.0687%205.35956%2011.2968%205.0192%2011.4024%204.54561L11.4444%204.3575L11.5275%204.45109C11.9835%204.96459%2012.3417%205.66488%2012.4032%206.16335L12.4192%206.29332L12.3426%206.17517C12.2107%205.97186%2012.0781%205.83346%2011.9084%205.72183C11.6024%205.52062%2011.2789%205.45215%2010.4222%205.40727C9.64839%205.36675%209.21045%205.30106%208.77621%205.16032C8.03738%204.9209%207.66493%204.60204%206.78729%203.4576C6.39748%202.94928%206.15654%202.66804%205.91687%202.44155C5.37228%201.92691%204.83716%201.65701%204.15217%201.55141Z%22%2F%3E%3Cpath%20d%3D%22M10.8494%202.68637C10.8689%202.34575%2010.9153%202.12108%2011.0088%201.9159C11.0458%201.83469%2011.0804%201.76822%2011.0858%201.76822C11.0911%201.76822%2011.075%201.82816%2011.05%201.90142C10.9821%202.10054%2010.9709%202.3729%2011.0177%202.68978C11.0771%203.09184%2011.1109%203.14985%2011.5385%203.58416C11.739%203.78788%2011.9723%204.0448%2012.0568%204.15511L12.2106%204.35568L12.0568%204.21234C11.8688%204.03705%2011.4364%203.6952%2011.3409%203.64633C11.2768%203.61356%2011.2673%203.61413%2011.2278%203.65321C11.1914%203.68922%2011.1837%203.74333%2011.1787%203.99915C11.1708%204.39786%2011.1161%204.65377%2010.9842%204.90965C10.9128%205.04805%2010.9015%205.01851%2010.9661%204.8623C11.0143%204.74566%2011.0192%204.69439%2011.0189%204.30842C11.0181%203.53291%2010.9255%203.34647%2010.3823%203.02709C10.2447%202.94618%2010.0179%202.8295%209.87839%202.76778C9.73887%202.70606%209.62805%202.6523%209.63208%202.64828C9.64746%202.63307%2010.1772%202.78675%2010.3905%202.86828C10.7077%202.98954%2010.76%203.00526%2010.7985%202.99063C10.8244%202.98082%2010.8369%202.90608%2010.8494%202.68637Z%22%2F%3E%3Cpath%20d%3D%22M4.51745%204.01304C4.13569%203.49066%203.89948%202.68973%203.95062%202.091L3.96643%201.90572L4.05333%201.92148C4.21652%201.95106%204.49789%202.05515%204.62964%202.13469C4.9912%202.35293%205.14773%202.64027%205.30697%203.37811C5.35362%203.59423%205.41482%203.8388%205.44298%203.9216C5.48831%204.05487%205.65962%204.36617%205.7989%204.56834C5.89922%204.71395%205.83258%204.78295%205.61082%204.76305C5.27215%204.73267%204.8134%204.41799%204.51745%204.01304Z%22%2F%3E%3Cpath%20d%3D%22M10.3863%207.90088C8.60224%207.18693%207.97389%206.56721%207.97389%205.52157C7.97389%205.36769%207.97922%205.24179%207.98571%205.24179C7.99221%205.24179%208.06124%205.29257%208.1391%205.35465C8.50088%205.64305%208.906%205.76623%2010.0275%205.92885C10.6875%206.02455%2011.0589%206.10185%2011.4015%206.21477C12.4904%206.57371%2013.1641%207.30212%2013.3248%208.29426C13.3715%208.58255%2013.3441%209.12317%2013.2684%209.4081C13.2087%209.63315%2013.0263%2010.0388%2012.9779%2010.0544C12.9645%2010.0587%2012.9514%2010.0076%2012.9479%209.93809C12.9296%209.56554%2012.7402%209.20285%2012.4221%208.93116C12.0604%208.62227%2011.5745%208.37633%2010.3863%207.90088Z%22%2F%3E%3Cpath%20d%3D%22M9.13385%208.19748C9.11149%208.06527%209.07272%207.89643%209.04769%207.82228L9.00217%207.68748L9.08672%207.7818C9.20374%207.91233%209.2962%208.07937%209.37457%208.30185C9.43438%208.47165%209.44111%208.52215%209.44066%208.79807C9.4402%209.06896%209.43273%209.12575%209.3775%209.27858C9.29042%209.51959%209.18233%209.69048%209.00097%209.87391C8.67507%2010.2036%208.25607%2010.3861%207.65143%2010.4618C7.54633%2010.4749%207.24%2010.4971%206.97069%2010.511C6.292%2010.5461%205.84531%2010.6186%205.44393%2010.7587C5.38623%2010.7788%205.3347%2010.7911%205.32947%2010.7859C5.31323%2010.7698%205.58651%2010.6079%205.81223%2010.4998C6.1305%2010.3474%206.44733%2010.2643%207.15719%2010.1468C7.50785%2010.0887%207.86998%2010.0183%207.96194%209.99029C8.83033%209.72566%209.27671%209.04276%209.13385%208.19748Z%22%2F%3E%3Cpath%20d%3D%22M9.95169%209.64109C9.71465%209.13463%209.66022%208.64564%209.79009%208.18961C9.80399%208.14088%209.82632%208.101%209.83976%208.101C9.85319%208.101%209.90913%208.13105%209.96404%208.16777C10.0733%208.24086%2010.2924%208.36395%2010.876%208.68023C11.6043%209.0749%2012.0196%209.3805%2012.302%209.72965C12.5493%2010.0354%2012.7023%2010.3837%2012.776%2010.8084C12.8177%2011.0489%2012.7932%2011.6277%2012.7311%2011.8699C12.5353%2012.6337%2012.0802%2013.2336%2011.4311%2013.5837C11.336%2013.635%2011.2506%2013.6771%2011.2414%2013.6773C11.2321%2013.6775%2011.2668%2013.5899%2011.3184%2013.4827C11.5367%2013.029%2011.5616%2012.5877%2011.3965%2012.0965C11.2954%2011.7957%2011.0893%2011.4287%2010.6732%2010.8084C10.1893%2010.0873%2010.0707%209.89539%209.95169%209.64109Z%22%2F%3E%3Cpath%20d%3D%22M3.25046%2012.3737C3.91252%2011.8181%204.73629%2011.4234%205.48666%2011.3022C5.81005%2011.25%206.34877%2011.2707%206.64823%2011.3469C7.12824%2011.469%207.55763%2011.7425%207.78094%2012.0683C7.99918%2012.3867%208.09281%2012.6642%208.19029%2013.2816C8.22875%2013.5252%208.27057%2013.7697%208.28323%2013.8251C8.35644%2014.1451%208.4989%2014.4008%208.67544%2014.5293C8.95583%2014.7333%209.43865%2014.7459%209.91362%2014.5618C9.99423%2014.5305%2010.0642%2014.5089%2010.0691%2014.5138C10.0864%2014.5308%209.84719%2014.6899%209.67847%2014.7737C9.45143%2014.8864%209.2709%2014.93%209.03102%2014.93C8.59601%2014.93%208.23486%2014.7101%207.9335%2014.2616C7.87419%2014.1733%207.7409%2013.909%207.63729%2013.6741C7.3191%2012.9528%207.16199%2012.7331%206.79255%2012.4926C6.47104%2012.2834%206.05641%2012.2459%205.74449%2012.3979C5.33475%2012.5976%205.22043%2013.118%205.51389%2013.4478C5.63053%2013.5789%205.84803%2013.6919%206.02588%2013.7139C6.35861%2013.7551%206.64455%2013.5035%206.64455%2013.1696C6.64455%2012.9528%206.56071%2012.8291%206.34966%2012.7344C6.0614%2012.6051%205.75156%2012.7562%205.75304%2013.0254C5.75368%2013.1402%205.80396%2013.2122%205.91971%2013.2643C5.99397%2013.2977%205.99569%2013.3003%205.93514%2013.2878C5.67066%2013.2333%205.6087%2012.9164%205.82135%2012.706C6.07667%2012.4535%206.60461%2012.5649%206.78591%2012.9097C6.86208%2013.0545%206.87092%2013.3429%206.80451%2013.517C6.6559%2013.9068%206.22256%2014.1117%205.78297%2014.0002C5.48368%2013.9242%205.36181%2013.842%205.00097%2013.4726C4.37395%2012.8306%204.13053%2012.7062%203.22657%2012.566L3.05335%2012.5391L3.25046%2012.3737Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M0.308383%200.883984C2.40235%203.40996%203.84457%204.45213%204.00484%204.67231C4.13717%204.85412%204.08737%205.01757%203.86067%205.14567C3.7346%205.21689%203.47541%205.28905%203.34564%205.28905C3.19887%205.28905%203.14847%205.23278%203.14847%205.23278C3.06337%205.15255%203.01544%205.16658%202.5784%204.39555C1.97166%203.45981%201.46389%202.68357%201.45004%202.67057C1.41801%202.64052%201.41856%202.64153%202.51654%204.59413C2.69394%205.0011%202.55182%205.15049%202.55182%205.20845C2.55182%205.32636%202.51946%205.38834%202.37311%205.55059C2.12914%205.8211%202.02008%206.12505%201.94135%206.7541C1.8531%207.45926%201.60492%207.95737%200.917156%208.80989C0.514562%209.30893%200.448686%209.4004%200.3471%209.60153C0.219144%209.85482%200.183961%209.99669%200.169701%2010.3165C0.154629%2010.6547%200.183983%2010.8732%200.287934%2011.1965C0.378939%2011.4796%200.473932%2011.6665%200.716778%2012.0403C0.926351%2012.3629%201.04702%2012.6027%201.04702%2012.6965C1.04702%2012.7711%201.06136%2012.7712%201.38611%2012.6983C2.16328%2012.5239%202.79434%2012.2171%203.14925%2011.8411C3.36891%2011.6084%203.42048%2011.4799%203.42215%2011.1611C3.42325%2010.9525%203.41587%2010.9088%203.35914%2010.7888C3.2668%2010.5935%203.09869%2010.4311%202.72817%2010.1794C2.2427%209.84953%202.03534%209.58398%201.97807%209.21878C1.93108%208.91913%201.98559%208.70771%202.25416%208.14825C2.53214%207.56916%202.60103%207.32239%202.64763%206.73869C2.67773%206.36158%202.71941%206.21286%202.82842%206.09348C2.94212%205.969%203.04447%205.92684%203.32584%205.88863C3.78457%205.82635%204.07667%205.70839%204.31677%205.48849C4.52505%205.29772%204.61221%205.11391%204.62558%204.8372L4.63574%204.62747L4.51934%204.49259C4.09783%204.00411%200.0261003%200.5%200.000160437%200.5C-0.00538105%200.5%200.133325%200.672804%200.308383%200.883984ZM1.28364%2010.6992C1.37894%2010.5314%201.3283%2010.3158%201.16889%2010.2104C1.01827%2010.1109%200.78428%2010.1578%200.78428%2010.2875C0.78428%2010.3271%200.806303%2010.3559%200.855937%2010.3813C0.939514%2010.424%200.945581%2010.4721%200.879823%2010.5703C0.81323%2010.6698%200.818604%2010.7573%200.894991%2010.8167C1.0181%2010.9125%201.19237%2010.8598%201.28364%2010.6992Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M4.92523%205.99865C4.70988%206.06439%204.50054%206.29124%204.43574%206.5291C4.39621%206.67421%204.41864%206.92875%204.47785%207.00736C4.57351%207.13433%204.66602%207.16778%204.91651%207.16603C5.40693%207.16263%205.83327%206.95358%205.88284%206.69224C5.92347%206.47801%205.73622%206.18112%205.4783%206.05078C5.34521%205.98355%205.06217%205.95688%204.92523%205.99865ZM5.49853%206.44422C5.57416%206.33741%205.54107%206.22198%205.41245%206.14391C5.1675%205.99525%204.79708%206.11827%204.79708%206.34826C4.79708%206.46274%204.99025%206.58765%205.16731%206.58765C5.28516%206.58765%205.44644%206.5178%205.49853%206.44422Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E' + +var _a$6 +var NETWORK_POLLING_INTERVALS = + ((_a$6 = {}), + (_a$6[SupportedChainId.ARBITRUM_ONE] = ms__default['default']( + templateObject_1$p || (templateObject_1$p = __makeTemplateObject(['1s'], ['1s'])) + )), + (_a$6[SupportedChainId.ARBITRUM_RINKEBY] = ms__default['default']( + templateObject_2$e || (templateObject_2$e = __makeTemplateObject(['1s'], ['1s'])) + )), + (_a$6[SupportedChainId.OPTIMISM] = ms__default['default']( + templateObject_3$b || (templateObject_3$b = __makeTemplateObject(['1s'], ['1s'])) + )), + (_a$6[SupportedChainId.OPTIMISTIC_KOVAN] = ms__default['default']( + templateObject_4$7 || (templateObject_4$7 = __makeTemplateObject(['1s'], ['1s'])) + )), + _a$6) +function getLibrary(provider) { + var library = new providers.Web3Provider( + provider, + typeof provider.chainId === 'number' + ? provider.chainId + : typeof provider.chainId === 'string' + ? parseInt(provider.chainId) + : 'any' + ) + library.pollingInterval = 15000 + library.detectNetwork().then(function (network) { + var networkPollingInterval = NETWORK_POLLING_INTERVALS[network.chainId] + if (networkPollingInterval) { + console.debug('Setting polling interval', networkPollingInterval) + library.pollingInterval = networkPollingInterval + } + }) + return library +} +var templateObject_1$p, templateObject_2$e, templateObject_3$b, templateObject_4$7 + +var OVERLAY_READY = 'OVERLAY_READY' +var CHAIN_ID_NETWORK_ARGUMENT = { + 1: undefined, + 3: 'ropsten', + 4: 'rinkeby', + 42: 'kovan', +} +var FortmaticConnector = /** @class */ (function (_super) { + __extends(FortmaticConnector, _super) + function FortmaticConnector() { + return (_super !== null && _super.apply(this, arguments)) || this + } + FortmaticConnector.prototype.activate = function () { + return __awaiter(this, void 0, void 0, function () { + var Fortmatic, _a, apiKey, chainId, provider, pollForOverlayReady, _b, account + var _this = this + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + if (!!this.fortmatic) return [3 /*break*/, 2] + return [ + 4 /*yield*/, + Promise.resolve().then(function () { + return fortmatic$1 + }), + ] + case 1: + Fortmatic = _c.sent().default + ;(_a = this), (apiKey = _a.apiKey), (chainId = _a.chainId) + if (chainId in CHAIN_ID_NETWORK_ARGUMENT) { + this.fortmatic = new Fortmatic(apiKey, CHAIN_ID_NETWORK_ARGUMENT[chainId]) + } else { + throw new Error('Unsupported network ID: ' + chainId) + } + _c.label = 2 + case 2: + provider = this.fortmatic.getProvider() + pollForOverlayReady = new Promise(function (resolve) { + var interval = setInterval(function () { + if (provider.overlayReady) { + clearInterval(interval) + _this.emit(OVERLAY_READY) + resolve() + } + }, 200) + }) + return [ + 4 /*yield*/, + Promise.all([ + provider.enable().then(function (accounts) { + return accounts[0] + }), + pollForOverlayReady, + ]), + ] + case 3: + ;(_b = __read.apply(void 0, [_c.sent(), 1])), (account = _b[0]) + return [2 /*return*/, { provider: this.fortmatic.getProvider(), chainId: this.chainId, account }] + } + }) + }) + } + return FortmaticConnector +})(fortmaticConnector.FortmaticConnector) + +var RequestError = /** @class */ (function (_super) { + __extends(RequestError, _super) + function RequestError(message, code, data) { + var _this = _super.call(this, message) || this + _this.code = code + _this.data = data + return _this + } + return RequestError +})(Error) +var MiniRpcProvider = /** @class */ (function () { + function MiniRpcProvider(connector, chainId, url, batchWaitTimeMs) { + var _this = this + this.isMetaMask = false + this.nextId = 1 + this.batchTimeoutId = null + this.batch = [] + this.clearBatch = function () { + return __awaiter(_this, void 0, void 0, function () { + var batch, response, json, byKey, json_1, json_1_1, result, _a, resolve, reject, method + var e_1, _b + var _this = this + var _c, _d, _e + return __generator(this, function (_f) { + switch (_f.label) { + case 0: + console.debug('Clearing batch', this.batch) + batch = this.batch + batch = batch.filter(function (b) { + if (b.request.method === 'wallet_switchEthereumChain') { + try { + _this.connector.changeChainId(parseInt(b.request.params[0].chainId)) + b.resolve({ id: b.request.id }) + } catch (error) { + b.reject(error) + } + return false + } + return true + }) + this.batch = [] + this.batchTimeoutId = null + _f.label = 1 + case 1: + _f.trys.push([1, 3, , 4]) + return [ + 4 /*yield*/, + fetch(this.url, { + method: 'POST', + headers: { 'content-type': 'application/json', accept: 'application/json' }, + body: JSON.stringify( + batch.map(function (item) { + return item.request + }) + ), + }), + ] + case 2: + response = _f.sent() + return [3 /*break*/, 4] + case 3: + _f.sent() + batch.forEach(function (_a) { + var reject = _a.reject + return reject(new Error('Failed to send batch call')) + }) + return [2 /*return*/] + case 4: + if (!response.ok) { + batch.forEach(function (_a) { + var reject = _a.reject + return reject(new RequestError(response.status + ': ' + response.statusText, -32000)) + }) + return [2 /*return*/] + } + _f.label = 5 + case 5: + _f.trys.push([5, 7, , 8]) + return [4 /*yield*/, response.json()] + case 6: + json = _f.sent() + return [3 /*break*/, 8] + case 7: + _f.sent() + batch.forEach(function (_a) { + var reject = _a.reject + return reject(new Error('Failed to parse JSON response')) + }) + return [2 /*return*/] + case 8: + byKey = batch.reduce(function (memo, current) { + memo[current.request.id] = current + return memo + }, {}) + try { + for (json_1 = __values(json), json_1_1 = json_1.next(); !json_1_1.done; json_1_1 = json_1.next()) { + result = json_1_1.value + ;(_a = byKey[result.id]), (resolve = _a.resolve), (reject = _a.reject), (method = _a.request.method) + if ('error' in result) { + reject( + new RequestError( + (_c = result === null || result === void 0 ? void 0 : result.error) === null || _c === void 0 + ? void 0 + : _c.message, + (_d = result === null || result === void 0 ? void 0 : result.error) === null || _d === void 0 + ? void 0 + : _d.code, + (_e = result === null || result === void 0 ? void 0 : result.error) === null || _e === void 0 + ? void 0 + : _e.data + ) + ) + } else if ('result' in result && resolve) { + resolve(result.result) + } else { + reject( + new RequestError( + 'Received unexpected JSON-RPC response to ' + method + ' request.', + -32000, + result + ) + ) + } + } + } catch (e_1_1) { + e_1 = { error: e_1_1 } + } finally { + try { + if (json_1_1 && !json_1_1.done && (_b = json_1.return)) _b.call(json_1) + } finally { + if (e_1) throw e_1.error + } + } + return [2 /*return*/] + } + }) + }) + } + this.sendAsync = function (request, callback) { + _this + .request(request.method, request.params) + .then(function (result) { + return callback(null, { jsonrpc: '2.0', id: request.id, result }) + }) + .catch(function (error) { + return callback(error, null) + }) + } + this.request = function (method, params) { + return __awaiter(_this, void 0, void 0, function () { + var promise + var _this = this + var _a + return __generator(this, function (_b) { + if (typeof method !== 'string') { + return [2 /*return*/, this.request(method.method, method.params)] + } + if (method === 'eth_chainId') { + return [2 /*return*/, '0x' + this.chainId.toString(16)] + } + promise = new Promise(function (resolve, reject) { + _this.batch.push({ + request: { + jsonrpc: '2.0', + id: _this.nextId++, + method, + params, + }, + resolve, + reject, + }) + }) + this.batchTimeoutId = + (_a = this.batchTimeoutId) !== null && _a !== void 0 + ? _a + : setTimeout(this.clearBatch, this.batchWaitTimeMs) + return [2 /*return*/, promise] + }) + }) + } + this.connector = connector + this.chainId = chainId + this.url = url + var parsed = new URL(url) + this.host = parsed.host + this.path = parsed.pathname + // how long to wait to batch calls + this.batchWaitTimeMs = batchWaitTimeMs !== null && batchWaitTimeMs !== void 0 ? batchWaitTimeMs : 50 + } + return MiniRpcProvider +})() +var NetworkConnector = /** @class */ (function (_super) { + __extends(NetworkConnector, _super) + function NetworkConnector(_a) { + var urls = _a.urls, + defaultChainId = _a.defaultChainId + var _this = this + invariant__default['default']( + defaultChainId || Object.keys(urls).length === 1, + 'defaultChainId is a required argument with >1 url' + ) + _this = + _super.call(this, { + supportedChainIds: Object.keys(urls).map(function (k) { + return Number(k) + }), + }) || this + _this.currentChainId = + defaultChainId !== null && defaultChainId !== void 0 ? defaultChainId : Number(Object.keys(urls)[0]) + _this.providers = Object.keys(urls).reduce(function (accumulator, chainId) { + accumulator[Number(chainId)] = new MiniRpcProvider(_this, Number(chainId), urls[Number(chainId)]) + return accumulator + }, {}) + return _this + } + Object.defineProperty(NetworkConnector.prototype, 'provider', { + get() { + return this.providers[this.currentChainId] + }, + enumerable: false, + configurable: true, + }) + NetworkConnector.prototype.activate = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [ + 2 /*return*/, + { provider: this.providers[this.currentChainId], chainId: this.currentChainId, account: null }, + ] + }) + }) + } + NetworkConnector.prototype.getProvider = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.providers[this.currentChainId]] + }) + }) + } + NetworkConnector.prototype.getChainId = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.currentChainId] + }) + }) + } + NetworkConnector.prototype.getAccount = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, null] + }) + }) + } + NetworkConnector.prototype.deactivate = function () { + return + } + /** + * Meant to be called only by MiniRpcProvider + * @param chainId the new chain id + */ + NetworkConnector.prototype.changeChainId = function (chainId) { + if (chainId in this.providers) { + this.currentChainId = chainId + this.emitUpdate({ + chainId, + account: null, + provider: this.providers[chainId], + }) + } else { + throw new Error('Unsupported chain ID: ' + chainId) + } + } + return NetworkConnector +})(abstractConnector.AbstractConnector) + +var FORMATIC_KEY = process.env.REACT_APP_FORTMATIC_KEY +var PORTIS_ID = process.env.REACT_APP_PORTIS_ID +var network = new NetworkConnector({ + urls: INFURA_NETWORK_URLS, + defaultChainId: 1, +}) +var networkLibrary +function getNetworkLibrary() { + return (networkLibrary = + networkLibrary !== null && networkLibrary !== void 0 ? networkLibrary : getLibrary(network.provider)) +} +new injectedConnector.InjectedConnector({ + supportedChainIds: ALL_SUPPORTED_CHAIN_IDS, +}) +new safeAppsWeb3React.SafeAppConnector() +new walletconnectConnector.WalletConnectConnector({ + supportedChainIds: ALL_SUPPORTED_CHAIN_IDS, + rpc: INFURA_NETWORK_URLS, + qrcode: true, +}) +// mainnet only +new FortmaticConnector({ + apiKey: FORMATIC_KEY !== null && FORMATIC_KEY !== void 0 ? FORMATIC_KEY : '', + chainId: 1, +}) +// mainnet only +new portisConnector.PortisConnector({ + dAppId: PORTIS_ID !== null && PORTIS_ID !== void 0 ? PORTIS_ID : '', + networks: [1], +}) +new walletlinkConnector.WalletLinkConnector({ + url: INFURA_NETWORK_URLS[SupportedChainId.MAINNET], + appName: 'Uniswap', + appLogoUrl: UNISWAP_LOGO_URL, + supportedChainIds: [SupportedChainId.MAINNET, SupportedChainId.POLYGON], +}) + +var fetchTokenList = { + pending: toolkit.createAction('lists/fetchTokenList/pending'), + fulfilled: toolkit.createAction('lists/fetchTokenList/fulfilled'), + rejected: toolkit.createAction('lists/fetchTokenList/rejected'), +} +// add and remove from list options +var addList = toolkit.createAction('lists/addList') +var removeList = toolkit.createAction('lists/removeList') +// select which lists to search across from loaded lists +var enableList = toolkit.createAction('lists/enableList') +var disableList = toolkit.createAction('lists/disableList') +// versioning +var acceptListUpdate = toolkit.createAction('lists/acceptListUpdate') + +function useFetchListCallback() { + var _this = this + var _a = useActiveWeb3React(), + chainId = _a.chainId, + library = _a.library + var dispatch = useAppDispatch() + var ensResolver = React.useCallback( + function (ensName) { + return __awaiter(_this, void 0, void 0, function () { + var networkLibrary, network + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!(!library || chainId !== 1)) return [3 /*break*/, 2] + networkLibrary = getNetworkLibrary() + return [4 /*yield*/, networkLibrary.getNetwork()] + case 1: + network = _a.sent() + if (networkLibrary && network.chainId === 1) { + return [2 /*return*/, resolveENSContentHash(ensName, networkLibrary)] + } + throw new Error('Could not construct mainnet ENS resolver') + case 2: + return [2 /*return*/, resolveENSContentHash(ensName, library)] + } + }) + }) + }, + [chainId, library] + ) + // note: prevent dispatch if using for list search or unsupported list + return React.useCallback( + function (listUrl, sendDispatch) { + if (sendDispatch === void 0) { + sendDispatch = true + } + return __awaiter(_this, void 0, void 0, function () { + var requestId + return __generator(this, function (_a) { + requestId = toolkit.nanoid() + sendDispatch && dispatch(fetchTokenList.pending({ requestId, url: listUrl })) + return [ + 2 /*return*/, + fetchTokenList$1(listUrl, ensResolver) + .then(function (tokenList) { + sendDispatch && dispatch(fetchTokenList.fulfilled({ url: listUrl, tokenList, requestId })) + return tokenList + }) + .catch(function (error) { + console.debug('Failed to get list at url ' + listUrl, error) + sendDispatch && + dispatch(fetchTokenList.rejected({ url: listUrl, requestId, errorMessage: error.message })) + throw error + }), + ] + }) + }) + }, + [dispatch, ensResolver] + ) +} + +var Wrapper$8 = styled__default['default'].div( + templateObject_1$o || + (templateObject_1$o = __makeTemplateObject( + ['\n position: relative;\n width: 100%;\n overflow: auto;\n'], + ['\n position: relative;\n width: 100%;\n overflow: auto;\n'] + )) +) +function ImportList(_a) { + var _b + var listURL = _a.listURL, + list = _a.list, + setModalView = _a.setModalView, + onDismiss = _a.onDismiss + var theme = useTheme() + var dispatch = useAppDispatch() + // user must accept + var _c = __read(React.useState(false), 2), + confirmed = _c[0], + setConfirmed = _c[1] + var lists = useAllLists() + var fetchList = useFetchListCallback() + // monitor is list is loading + var adding = Boolean((_b = lists[listURL]) === null || _b === void 0 ? void 0 : _b.loadingRequestId) + var _d = __read(React.useState(null), 2), + addError = _d[0], + setAddError = _d[1] + var handleAddList = React.useCallback( + function () { + if (adding) return + setAddError(null) + fetchList(listURL) + .then(function () { + ReactGA__default['default'].event({ + category: 'Lists', + action: 'Add List', + label: listURL, + }) + // turn list on + dispatch(enableList(listURL)) + // go back to lists + setModalView(CurrencyModalView.manage) + }) + .catch(function (error) { + ReactGA__default['default'].event({ + category: 'Lists', + action: 'Add List Failed', + label: listURL, + }) + setAddError(error.message) + dispatch(removeList(listURL)) + }) + }, + [adding, dispatch, fetchList, listURL, setModalView] + ) + return jsxRuntime.jsxs( + Wrapper$8, + { + children: [ + jsxRuntime.jsx( + PaddedColumn, + __assign( + { gap: '14px', style: { width: '100%', flex: '1 1' } }, + { + children: jsxRuntime.jsxs( + RowBetween, + { + children: [ + jsxRuntime.jsx( + reactFeather.ArrowLeft, + { + style: { cursor: 'pointer' }, + onClick() { + return setModalView(CurrencyModalView.manage) + }, + }, + void 0 + ), + jsxRuntime.jsx( + ThemedText.MediumHeader, + { children: jsxRuntime.jsx(macro.Trans, { children: 'Import List' }, void 0) }, + void 0 + ), + jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0), + ], + }, + void 0 + ), + } + ), + void 0 + ), + jsxRuntime.jsx(SectionBreak, {}, void 0), + jsxRuntime.jsx( + PaddedColumn, + __assign( + { gap: 'md' }, + { + children: jsxRuntime.jsxs( + AutoColumn, + __assign( + { gap: 'md' }, + { + children: [ + jsxRuntime.jsx( + Card, + __assign( + { backgroundColor: theme.bg2, padding: '12px 20px' }, + { + children: jsxRuntime.jsx( + RowBetween, + { + children: jsxRuntime.jsxs( + RowFixed, + { + children: [ + list.logoURI && + jsxRuntime.jsx(ListLogo, { logoURI: list.logoURI, size: '40px' }, void 0), + jsxRuntime.jsxs( + AutoColumn, + __assign( + { gap: 'sm', style: { marginLeft: '20px' } }, + { + children: [ + jsxRuntime.jsxs( + RowFixed, + { + children: [ + jsxRuntime.jsx( + ThemedText.Body, + __assign({ fontWeight: 600, mr: '6px' }, { children: list.name }), + void 0 + ), + jsxRuntime.jsx(TextDot, {}, void 0), + jsxRuntime.jsx( + ThemedText.Main, + __assign( + { fontSize: '16px', ml: '6px' }, + { + children: jsxRuntime.jsxs( + macro.Trans, + { children: [list.tokens.length, ' tokens'] }, + void 0 + ), + } + ), + void 0 + ), + ], + }, + void 0 + ), + jsxRuntime.jsx( + ExternalLink, + __assign( + { href: 'https://tokenlists.org/token-list?url=' + listURL }, + { + children: jsxRuntime.jsx( + ThemedText.Main, + __assign( + { fontSize: '12px', color: theme.blue1 }, + { children: listURL } + ), + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + ], + }, + void 0 + ), + }, + void 0 + ), + } + ), + void 0 + ), + jsxRuntime.jsxs( + Card, + __assign( + { style: { backgroundColor: polished.transparentize(0.8, theme.red1) } }, + { + children: [ + jsxRuntime.jsxs( + AutoColumn, + __assign( + { + justify: 'center', + style: { textAlign: 'center', gap: '16px', marginBottom: '12px' }, + }, + { + children: [ + jsxRuntime.jsx( + reactFeather.AlertTriangle, + { stroke: theme.red1, size: 32 }, + void 0 + ), + jsxRuntime.jsx( + ThemedText.Body, + __assign( + { fontWeight: 500, fontSize: 20, color: theme.red1 }, + { + children: jsxRuntime.jsx( + macro.Trans, + { children: 'Import at your own risk' }, + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + jsxRuntime.jsxs( + AutoColumn, + __assign( + { style: { textAlign: 'center', gap: '16px', marginBottom: '12px' } }, + { + children: [ + jsxRuntime.jsx( + ThemedText.Body, + __assign( + { fontWeight: 500, color: theme.red1 }, + { + children: jsxRuntime.jsx( + macro.Trans, + { + children: + 'By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.', + }, + void 0 + ), + } + ), + void 0 + ), + jsxRuntime.jsx( + ThemedText.Body, + __assign( + { fontWeight: 600, color: theme.red1 }, + { + children: jsxRuntime.jsx( + macro.Trans, + { + children: + 'If you purchase a token from this list, you may not be able to sell it back.', + }, + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + jsxRuntime.jsxs( + AutoRow, + __assign( + { + justify: 'center', + style: { cursor: 'pointer' }, + onClick() { + return setConfirmed(!confirmed) + }, + }, + { + children: [ + jsxRuntime.jsx( + Checkbox, + { + name: 'confirmed', + type: 'checkbox', + checked: confirmed, + onChange() { + return setConfirmed(!confirmed) + }, + }, + void 0 + ), + jsxRuntime.jsx( + ThemedText.Body, + __assign( + { ml: '10px', fontSize: '16px', color: theme.red1, fontWeight: 500 }, + { + children: jsxRuntime.jsx(macro.Trans, { children: 'I understand' }, void 0), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + jsxRuntime.jsx( + ButtonPrimary, + __assign( + { + disabled: !confirmed, + altDisabledStyle: true, + $borderRadius: '20px', + padding: '10px 1rem', + onClick: handleAddList, + }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'Import' }, void 0) } + ), + void 0 + ), + addError + ? jsxRuntime.jsx( + ThemedText.Error, + __assign( + { title: addError, style: { textOverflow: 'ellipsis', overflow: 'hidden' }, error: true }, + { children: addError } + ), + void 0 + ) + : null, + ], + } + ), + void 0 + ), + } + ), + void 0 + ), + ], + }, + void 0 + ) +} +var templateObject_1$o + +var WarningWrapper = styled__default['default'](Card)( + templateObject_1$n || + (templateObject_1$n = __makeTemplateObject( + ['\n background-color: ', ';\n width: fit-content;\n'], + ['\n background-color: ', ';\n width: fit-content;\n'] + )), + function (_a) { + var theme = _a.theme, + highWarning = _a.highWarning + return highWarning ? polished.transparentize(0.8, theme.red1) : polished.transparentize(0.8, theme.yellow2) + } +) +var AddressText = styled__default['default'](ThemedText.Blue)( + templateObject_3$a || + (templateObject_3$a = __makeTemplateObject( + ['\n font-size: 12px;\n word-break: break-all;\n\n ', '\n'], + ['\n font-size: 12px;\n word-break: break-all;\n\n ', '\n'] + )), + function (_a) { + var theme = _a.theme + return theme.mediaWidth.upToSmall( + templateObject_2$d || + (templateObject_2$d = __makeTemplateObject(['\n font-size: 10px;\n '], ['\n font-size: 10px;\n '])) + ) + } +) +var TokenImportCard = function (_a) { + var list = _a.list, + token = _a.token + var theme = styled.useTheme() + var chainId = useActiveWeb3React().chainId + return jsxRuntime.jsx( + Card, + __assign( + { backgroundColor: theme.bg2, padding: '2rem' }, + { + children: jsxRuntime.jsxs( + AutoColumn, + __assign( + { gap: '10px', justify: 'center' }, + { + children: [ + jsxRuntime.jsx(CurrencyLogo, { currency: token, size: '32px' }, void 0), + jsxRuntime.jsxs( + AutoColumn, + __assign( + { gap: '4px', justify: 'center' }, + { + children: [ + jsxRuntime.jsx( + ThemedText.Body, + __assign({ ml: '8px', mr: '8px', fontWeight: 500, fontSize: 20 }, { children: token.symbol }), + void 0 + ), + jsxRuntime.jsx( + ThemedText.DarkGray, + __assign({ fontWeight: 400, fontSize: 14 }, { children: token.name }), + void 0 + ), + ], + } + ), + void 0 + ), + chainId && + jsxRuntime.jsx( + ExternalLink, + __assign( + { href: getExplorerLink(chainId, token.address, ExplorerDataType.ADDRESS) }, + { + children: jsxRuntime.jsx( + AddressText, + __assign({ fontSize: 12 }, { children: token.address }), + void 0 + ), + } + ), + void 0 + ), + list !== undefined + ? jsxRuntime.jsxs( + RowFixed, + { + children: [ + list.logoURI && jsxRuntime.jsx(ListLogo, { logoURI: list.logoURI, size: '16px' }, void 0), + jsxRuntime.jsx( + ThemedText.Small, + __assign( + { ml: '6px', fontSize: 14, color: theme.text3 }, + { + children: jsxRuntime.jsxs( + macro.Trans, + { children: ['via ', list.name, ' token list'] }, + void 0 + ), + } + ), + void 0 + ), + ], + }, + void 0 + ) + : jsxRuntime.jsx( + WarningWrapper, + __assign( + { $borderRadius: '4px', padding: '4px', highWarning: true }, + { + children: jsxRuntime.jsxs( + RowFixed, + { + children: [ + jsxRuntime.jsx(reactFeather.AlertCircle, { stroke: theme.red1, size: '10px' }, void 0), + jsxRuntime.jsx( + ThemedText.Body, + __assign( + { color: theme.red1, ml: '4px', fontSize: '10px', fontWeight: 500 }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'Unknown Source' }, void 0) } + ), + void 0 + ), + ], + }, + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + } + ), + void 0 + ) +} +var templateObject_1$n, templateObject_2$d, templateObject_3$a + +var Wrapper$7 = styled__default['default'].div( + templateObject_1$m || + (templateObject_1$m = __makeTemplateObject( + [ + '\n align-items: center;\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n height: 100%;\n width: 100%;\n', + ], + [ + '\n align-items: center;\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n height: 100%;\n width: 100%;\n', + ] + )) +) +var Button = styled__default['default'](ButtonPrimary)( + templateObject_2$c || + (templateObject_2$c = __makeTemplateObject( + ['\n margin-top: 1em;\n padding: 10px 1em;\n'], + ['\n margin-top: 1em;\n padding: 10px 1em;\n'] + )) +) +var Content = styled__default['default'].div( + templateObject_3$9 || (templateObject_3$9 = __makeTemplateObject(['\n padding: 1em;\n'], ['\n padding: 1em;\n'])) +) +var Copy = styled__default['default'](ThemedText.Body)( + templateObject_4$6 || + (templateObject_4$6 = __makeTemplateObject( + ['\n text-align: center;\n margin: 0 2em 1em !important;\n font-weight: 400;\n font-size: 16px;\n'], + ['\n text-align: center;\n margin: 0 2em 1em !important;\n font-weight: 400;\n font-size: 16px;\n'] + )) +) +var Header = styled__default['default'].div( + templateObject_5$6 || + (templateObject_5$6 = __makeTemplateObject( + [ + '\n align-items: center;\n display: flex;\n gap: 14px;\n justify-content: space-between;\n padding: 20px;\n width: 100%;\n', + ], + [ + '\n align-items: center;\n display: flex;\n gap: 14px;\n justify-content: space-between;\n padding: 20px;\n width: 100%;\n', + ] + )) +) +var Icon = styled__default['default'](reactFeather.AlertCircle)( + templateObject_6$4 || + (templateObject_6$4 = __makeTemplateObject( + ['\n stroke: ', ';\n width: 48px;\n height: 48px;\n'], + ['\n stroke: ', ';\n width: 48px;\n height: 48px;\n'] + )), + function (_a) { + var theme = _a.theme + return theme.text2 + } +) +var BlockedToken = function (_a) { + var onBack = _a.onBack, + onDismiss = _a.onDismiss, + blockedTokens = _a.blockedTokens + return jsxRuntime.jsxs( + Wrapper$7, + { + children: [ + jsxRuntime.jsxs( + Header, + { + children: [ + onBack + ? jsxRuntime.jsx(reactFeather.ArrowLeft, { style: { cursor: 'pointer' }, onClick: onBack }, void 0) + : jsxRuntime.jsx('div', {}, void 0), + jsxRuntime.jsx( + ThemedText.MediumHeader, + { children: jsxRuntime.jsx(macro.Trans, { children: 'Token not supported' }, void 0) }, + void 0 + ), + onDismiss ? jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0) : jsxRuntime.jsx('div', {}, void 0), + ], + }, + void 0 + ), + jsxRuntime.jsx(Icon, {}, void 0), + jsxRuntime.jsxs( + Content, + { + children: [ + jsxRuntime.jsx( + Copy, + { + children: jsxRuntime.jsx( + macro.Trans, + { children: 'This token is not supported in the Uniswap Labs app' }, + void 0 + ), + }, + void 0 + ), + jsxRuntime.jsx(TokenImportCard, { token: blockedTokens[0] }, void 0), + jsxRuntime.jsx( + Button, + __assign({ disabled: true }, { children: jsxRuntime.jsx(macro.Trans, { children: 'Import' }, void 0) }), + void 0 + ), + ], + }, + void 0 + ), + ], + }, + void 0 + ) +} +var templateObject_1$m, + templateObject_2$c, + templateObject_3$9, + templateObject_4$6, + templateObject_5$6, + templateObject_6$4 + +var Wrapper$6 = styled__default['default'].div( + templateObject_1$l || + (templateObject_1$l = __makeTemplateObject( + ['\n position: relative;\n width: 100%;\n overflow: auto;\n'], + ['\n position: relative;\n width: 100%;\n overflow: auto;\n'] + )) +) +function ImportToken(props) { + var tokens = props.tokens, + list = props.list, + onBack = props.onBack, + onDismiss = props.onDismiss, + handleCurrencySelect = props.handleCurrencySelect + var theme = useTheme() + var addToken = useAddUserToken() + var unsupportedTokens = useUnsupportedTokens() + var unsupportedSet = new Set(Object.keys(unsupportedTokens)) + var intersection = new Set( + tokens.filter(function (token) { + return unsupportedSet.has(token.address) + }) + ) + if (intersection.size > 0) { + return jsxRuntime.jsx(BlockedToken, { onBack, onDismiss, blockedTokens: Array.from(intersection) }, void 0) + } + return jsxRuntime.jsxs( + Wrapper$6, + { + children: [ + jsxRuntime.jsx( + PaddedColumn, + __assign( + { gap: '14px', style: { width: '100%', flex: '1 1' } }, + { + children: jsxRuntime.jsxs( + RowBetween, + { + children: [ + onBack + ? jsxRuntime.jsx( + reactFeather.ArrowLeft, + { style: { cursor: 'pointer' }, onClick: onBack }, + void 0 + ) + : jsxRuntime.jsx('div', {}, void 0), + jsxRuntime.jsx( + ThemedText.MediumHeader, + { + children: jsxRuntime.jsx( + macro.Plural, + { value: tokens.length, one: 'Import token', other: 'Import tokens' }, + void 0 + ), + }, + void 0 + ), + onDismiss + ? jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0) + : jsxRuntime.jsx('div', {}, void 0), + ], + }, + void 0 + ), + } + ), + void 0 + ), + jsxRuntime.jsx(SectionBreak, {}, void 0), + jsxRuntime.jsxs( + AutoColumn, + __assign( + { gap: 'md', style: { marginBottom: '32px', padding: '1rem' } }, + { + children: [ + jsxRuntime.jsxs( + AutoColumn, + __assign( + { justify: 'center', style: { textAlign: 'center', gap: '16px', padding: '1rem' } }, + { + children: [ + jsxRuntime.jsx( + reactFeather.AlertCircle, + { size: 48, stroke: theme.text2, strokeWidth: 1 }, + void 0 + ), + jsxRuntime.jsx( + ThemedText.Body, + __assign( + { fontWeight: 400, fontSize: 16 }, + { + children: jsxRuntime.jsx( + macro.Trans, + { + children: + "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.", + }, + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + tokens.map(function (token) { + return jsxRuntime.jsx(TokenImportCard, { token, list }, 'import' + token.address) + }), + jsxRuntime.jsx( + ButtonPrimary, + __assign( + { + altDisabledStyle: true, + $borderRadius: '20px', + padding: '10px 1rem', + onClick() { + tokens.map(function (token) { + return addToken(token) + }) + handleCurrencySelect && handleCurrencySelect(tokens[0]) + }, + className: '.token-dismiss-button', + }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'Import' }, void 0) } + ), + void 0 + ), + ], + } + ), + void 0 + ), + ], + }, + void 0 + ) +} +var templateObject_1$l + +function getColorFromUriPath(uri) { + return __awaiter(this, void 0, void 0, function () { + var formattedPath, palette, detectedHex, AAscore + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + formattedPath = uriToHttp(uri)[0] + return [4 /*yield*/, Vibrant__default['default'].from(formattedPath).getPalette()] + case 1: + palette = _a.sent() + if (!(palette === null || palette === void 0 ? void 0 : palette.Vibrant)) { + return [2 /*return*/, null] + } + detectedHex = palette.Vibrant.hex + AAscore = wcagContrast.hex(detectedHex, '#FFF') + while (AAscore < 3) { + detectedHex = polished.shade(0.005, detectedHex) + AAscore = wcagContrast.hex(detectedHex, '#FFF') + } + return [2 /*return*/, detectedHex] + } + }) + }) +} +function useListColor(listImageUri) { + var _a = __read(React.useState('#2172E5'), 2), + color = _a[0], + setColor = _a[1] + React.useLayoutEffect( + function () { + var stale = false + if (listImageUri) { + getColorFromUriPath(listImageUri).then(function (color) { + if (!stale && color !== null) { + setColor(color) + } + }) + } + return function () { + stale = true + setColor('#2172E5') + } + }, + [listImageUri] + ) + return color +} + +function listVersionLabel(version) { + return 'v' + version.major + '.' + version.minor + '.' + version.patch +} + +var Wrapper$5 = styled__default['default'].button( + templateObject_1$k || + (templateObject_1$k = __makeTemplateObject( + [ + '\n border-radius: 20px;\n border: none;\n background: ', + ';\n display: flex;\n width: fit-content;\n cursor: pointer;\n outline: none;\n padding: 0.4rem 0.4rem;\n align-items: center;\n', + ], + [ + '\n border-radius: 20px;\n border: none;\n background: ', + ';\n display: flex;\n width: fit-content;\n cursor: pointer;\n outline: none;\n padding: 0.4rem 0.4rem;\n align-items: center;\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.bg1 + } +) +var ToggleElement$1 = styled__default['default'].span( + templateObject_2$b || + (templateObject_2$b = __makeTemplateObject( + [ + '\n border-radius: 50%;\n height: 24px;\n width: 24px;\n background-color: ', + ';\n :hover {\n opacity: 0.8;\n }\n', + ], + [ + '\n border-radius: 50%;\n height: 24px;\n width: 24px;\n background-color: ', + ';\n :hover {\n opacity: 0.8;\n }\n', + ] + )), + function (_a) { + var isActive = _a.isActive, + bgColor = _a.bgColor, + theme = _a.theme + return isActive ? bgColor : theme.bg4 + } +) +var StatusText = styled__default['default'](ThemedText.Main)( + templateObject_3$8 || + (templateObject_3$8 = __makeTemplateObject( + ['\n margin: 0 10px;\n width: 24px;\n color: ', ';\n'], + ['\n margin: 0 10px;\n width: 24px;\n color: ', ';\n'] + )), + function (_a) { + var theme = _a.theme, + isActive = _a.isActive + return isActive ? theme.text1 : theme.text3 + } +) +function ListToggle(_a) { + var id = _a.id, + isActive = _a.isActive, + bgColor = _a.bgColor, + toggle = _a.toggle + return jsxRuntime.jsxs( + Wrapper$5, + __assign( + { id, isActive, onClick: toggle }, + { + children: [ + isActive && + jsxRuntime.jsx( + StatusText, + __assign( + { fontWeight: '600', margin: '0 6px', isActive: true }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'ON' }, void 0) } + ), + void 0 + ), + jsxRuntime.jsx(ToggleElement$1, { isActive, bgColor }, void 0), + !isActive && + jsxRuntime.jsx( + StatusText, + __assign( + { fontWeight: '600', margin: '0 6px', isActive: false }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'OFF' }, void 0) } + ), + void 0 + ), + ], + } + ), + void 0 + ) +} +var templateObject_1$k, templateObject_2$b, templateObject_3$8 + +var Wrapper$4 = styled__default['default'](Column)( + templateObject_1$j || + (templateObject_1$j = __makeTemplateObject( + ['\n flex: 1;\n overflow-y: hidden;\n'], + ['\n flex: 1;\n overflow-y: hidden;\n'] + )) +) +var UnpaddedLinkStyledButton = styled__default['default'](LinkStyledButton)( + templateObject_2$a || + (templateObject_2$a = __makeTemplateObject( + ['\n padding: 0;\n font-size: 1rem;\n opacity: ', ';\n'], + ['\n padding: 0;\n font-size: 1rem;\n opacity: ', ';\n'] + )), + function (_a) { + var disabled = _a.disabled + return disabled ? '0.4' : '1' + } +) +var PopoverContainer = styled__default['default'].div( + templateObject_3$7 || + (templateObject_3$7 = __makeTemplateObject( + [ + '\n z-index: 100;\n visibility: ', + ';\n opacity: ', + ';\n transition: visibility 150ms linear, opacity 150ms linear;\n background: ', + ';\n border: 1px solid ', + ';\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: ', + ';\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 z-index: 100;\n visibility: ', + ';\n opacity: ', + ';\n transition: visibility 150ms linear, opacity 150ms linear;\n background: ', + ';\n border: 1px solid ', + ';\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: ', + ';\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', + ] + )), + function (props) { + return props.show ? 'visible' : 'hidden' + }, + function (props) { + return props.show ? 1 : 0 + }, + function (_a) { + var theme = _a.theme + return theme.bg2 + }, + function (_a) { + var theme = _a.theme + return theme.bg3 + }, + function (_a) { + var theme = _a.theme + return theme.text2 + } +) +var StyledMenu$1 = styled__default['default'].div( + templateObject_4$5 || + (templateObject_4$5 = __makeTemplateObject( + [ + '\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n', + ], + [ + '\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n', + ] + )) +) +var StyledTitleText = styled__default['default'].div( + templateObject_5$5 || + (templateObject_5$5 = __makeTemplateObject( + ['\n font-size: 16px;\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 600;\n color: ', ';\n'], + ['\n font-size: 16px;\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 600;\n color: ', ';\n'] + )), + function (_a) { + var theme = _a.theme, + active = _a.active + return active ? theme.white : theme.text2 + } +) +var StyledListUrlText = styled__default['default'](ThemedText.Main)( + templateObject_6$3 || + (templateObject_6$3 = __makeTemplateObject( + ['\n font-size: 12px;\n color: ', ';\n'], + ['\n font-size: 12px;\n color: ', ';\n'] + )), + function (_a) { + var theme = _a.theme, + active = _a.active + return active ? theme.white : theme.text2 + } +) +var RowWrapper = styled__default['default'](Row)( + templateObject_7$3 || + (templateObject_7$3 = __makeTemplateObject( + [ + '\n background-color: ', + ';\n opacity: ', + ';\n transition: 200ms;\n align-items: center;\n padding: 1rem;\n border-radius: 20px;\n', + ], + [ + '\n background-color: ', + ';\n opacity: ', + ';\n transition: 200ms;\n align-items: center;\n padding: 1rem;\n border-radius: 20px;\n', + ] + )), + function (_a) { + var bgColor = _a.bgColor, + active = _a.active, + theme = _a.theme + return active ? (bgColor !== null && bgColor !== void 0 ? bgColor : 'transparent') : theme.bg2 + }, + function (_a) { + var hasActiveTokens = _a.hasActiveTokens + return hasActiveTokens ? 1 : 0.4 + } +) +function listUrlRowHTMLId(listUrl) { + return 'list-row-' + listUrl.replace(/\./g, '-') +} +var ListRow = React.memo(function ListRow(_a) { + var listUrl = _a.listUrl + var chainId = useActiveWeb3React().chainId + var listsByUrl = useAppSelector(function (state) { + return state.lists.byUrl + }) + var dispatch = useAppDispatch() + var _b = listsByUrl[listUrl], + list = _b.current, + pending = _b.pendingUpdate + var activeTokensOnThisChain = React.useMemo( + function () { + if (!list || !chainId) { + return 0 + } + return list.tokens.reduce(function (acc, cur) { + return cur.chainId === chainId ? acc + 1 : acc + }, 0) + }, + [chainId, list] + ) + var theme = useTheme() + var listColor = useListColor(list === null || list === void 0 ? void 0 : list.logoURI) + var isActive = useIsListActive(listUrl) + var _c = __read(useToggle(false), 2), + open = _c[0], + toggle = _c[1] + var node = React.useRef() + var _d = __read(React.useState(), 2), + referenceElement = _d[0], + setReferenceElement = _d[1] + var _e = __read(React.useState(), 2), + popperElement = _e[0], + setPopperElement = _e[1] + var _f = reactPopper.usePopper(referenceElement, popperElement, { + placement: 'auto', + strategy: 'fixed', + modifiers: [{ name: 'offset', options: { offset: [8, 8] } }], + }), + styles = _f.styles, + attributes = _f.attributes + useOnClickOutside(node, open ? toggle : undefined) + var handleAcceptListUpdate = React.useCallback( + function () { + if (!pending) return + ReactGA__default['default'].event({ + category: 'Lists', + action: 'Update List from List Select', + label: listUrl, + }) + dispatch(acceptListUpdate(listUrl)) + }, + [dispatch, listUrl, pending] + ) + var handleRemoveList = React.useCallback( + function () { + ReactGA__default['default'].event({ + category: 'Lists', + action: 'Start Remove List', + label: listUrl, + }) + if ( + window.prompt( + macro.t( + templateObject_8$2 || + (templateObject_8$2 = __makeTemplateObject( + ['Please confirm you would like to remove this list by typing REMOVE'], + ['Please confirm you would like to remove this list by typing REMOVE'] + )) + ) + ) === 'REMOVE' + ) { + ReactGA__default['default'].event({ + category: 'Lists', + action: 'Confirm Remove List', + label: listUrl, + }) + dispatch(removeList(listUrl)) + } + }, + [dispatch, listUrl] + ) + var handleEnableList = React.useCallback( + function () { + ReactGA__default['default'].event({ + category: 'Lists', + action: 'Enable List', + label: listUrl, + }) + dispatch(enableList(listUrl)) + }, + [dispatch, listUrl] + ) + var handleDisableList = React.useCallback( + function () { + ReactGA__default['default'].event({ + category: 'Lists', + action: 'Disable List', + label: listUrl, + }) + dispatch(disableList(listUrl)) + }, + [dispatch, listUrl] + ) + if (!list) return null + return jsxRuntime.jsxs( + RowWrapper, + __assign( + { + active: isActive, + hasActiveTokens: activeTokensOnThisChain > 0, + bgColor: listColor, + id: listUrlRowHTMLId(listUrl), + }, + { + children: [ + list.logoURI + ? jsxRuntime.jsx( + ListLogo, + { size: '40px', style: { marginRight: '1rem' }, logoURI: list.logoURI, alt: list.name + ' list logo' }, + void 0 + ) + : jsxRuntime.jsx('div', { style: { width: '24px', height: '24px', marginRight: '1rem' } }, void 0), + jsxRuntime.jsxs( + Column, + __assign( + { style: { flex: '1' } }, + { + children: [ + jsxRuntime.jsx( + Row, + { + children: jsxRuntime.jsx( + StyledTitleText, + __assign({ active: isActive }, { children: list.name }), + void 0 + ), + }, + void 0 + ), + jsxRuntime.jsxs( + RowFixed, + __assign( + { mt: '4px' }, + { + children: [ + jsxRuntime.jsx( + StyledListUrlText, + __assign( + { active: isActive, mr: '6px' }, + { + children: jsxRuntime.jsxs( + macro.Trans, + { children: [activeTokensOnThisChain, ' tokens'] }, + void 0 + ), + } + ), + void 0 + ), + jsxRuntime.jsxs( + StyledMenu$1, + __assign( + { ref: node }, + { + children: [ + jsxRuntime.jsx( + ButtonEmpty, + __assign( + { onClick: toggle, ref: setReferenceElement, padding: '0' }, + { + children: jsxRuntime.jsx( + reactFeather.Settings, + { stroke: isActive ? theme.bg1 : theme.text1, size: 12 }, + void 0 + ), + } + ), + void 0 + ), + open && + jsxRuntime.jsxs( + PopoverContainer, + __assign( + { show: true, ref: setPopperElement, style: styles.popper }, + attributes.popper, + { + children: [ + jsxRuntime.jsx( + 'div', + { children: list && listVersionLabel(list.version) }, + void 0 + ), + jsxRuntime.jsx(SeparatorDark, {}, void 0), + jsxRuntime.jsx( + ExternalLink, + __assign( + { href: 'https://tokenlists.org/token-list?url=' + listUrl }, + { + children: jsxRuntime.jsx( + macro.Trans, + { children: 'View list' }, + void 0 + ), + } + ), + void 0 + ), + jsxRuntime.jsx( + UnpaddedLinkStyledButton, + __assign( + { + onClick: handleRemoveList, + disabled: Object.keys(listsByUrl).length === 1, + }, + { + children: jsxRuntime.jsx( + macro.Trans, + { children: 'Remove list' }, + void 0 + ), + } + ), + void 0 + ), + pending && + jsxRuntime.jsx( + UnpaddedLinkStyledButton, + __assign( + { onClick: handleAcceptListUpdate }, + { + children: jsxRuntime.jsx( + macro.Trans, + { children: 'Update list' }, + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + jsxRuntime.jsx( + ListToggle, + { + isActive, + bgColor: listColor, + toggle() { + isActive ? handleDisableList() : handleEnableList() + }, + }, + void 0 + ), + ], + } + ), + listUrl + ) +}) +var ListContainer = styled__default['default'].div( + templateObject_9$2 || + (templateObject_9$2 = __makeTemplateObject( + ['\n padding: 1rem;\n height: 100%;\n overflow: auto;\n flex: 1;\n'], + ['\n padding: 1rem;\n height: 100%;\n overflow: auto;\n flex: 1;\n'] + )) +) +function ManageLists(_a) { + var setModalView = _a.setModalView, + setImportList = _a.setImportList, + setListUrl = _a.setListUrl + var chainId = useActiveWeb3React().chainId + var theme = useTheme() + var _b = __read(React.useState(''), 2), + listUrlInput = _b[0], + setListUrlInput = _b[1] + var lists = useAllLists() + var tokenCountByListName = React.useMemo( + function () { + return Object.values(lists).reduce(function (acc, _a) { + var _b + var list = _a.current + if (!list) { + return acc + } + return __assign( + __assign({}, acc), + ((_b = {}), + (_b[list.name] = list.tokens.reduce(function (count, token) { + return token.chainId === chainId ? count + 1 : count + }, 0)), + _b) + ) + }, {}) + }, + [chainId, lists] + ) + // sort by active but only if not visible + var activeListUrls = useActiveListUrls() + var handleInput = React.useCallback(function (e) { + setListUrlInput(e.target.value) + }, []) + var fetchList = useFetchListCallback() + var validUrl = React.useMemo( + function () { + return uriToHttp(listUrlInput).length > 0 || Boolean(parseENSAddress(listUrlInput)) + }, + [listUrlInput] + ) + var sortedLists = React.useMemo( + function () { + var listUrls = Object.keys(lists) + return listUrls + .filter(function (listUrl) { + // only show loaded lists, hide unsupported lists + return Boolean(lists[listUrl].current) && !Boolean(UNSUPPORTED_LIST_URLS.includes(listUrl)) + }) + .sort(function (listUrlA, listUrlB) { + var listA = lists[listUrlA].current + var listB = lists[listUrlB].current + // first filter on active lists + if ( + (activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(listUrlA)) && + !(activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(listUrlB)) + ) { + return -1 + } + if ( + !(activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(listUrlA)) && + (activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(listUrlB)) + ) { + return 1 + } + if (listA && listB) { + if (tokenCountByListName[listA.name] > tokenCountByListName[listB.name]) { + return -1 + } + if (tokenCountByListName[listA.name] < tokenCountByListName[listB.name]) { + return 1 + } + return listA.name.toLowerCase() < listB.name.toLowerCase() + ? -1 + : listA.name.toLowerCase() === listB.name.toLowerCase() + ? 0 + : 1 + } + if (listA) return -1 + if (listB) return 1 + return 0 + }) + }, + [lists, activeListUrls, tokenCountByListName] + ) + // temporary fetched list for import flow + var _c = __read(React.useState(), 2), + tempList = _c[0], + setTempList = _c[1] + var _d = __read(React.useState(), 2), + addError = _d[0], + setAddError = _d[1] + React.useEffect( + function () { + function fetchTempList() { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + fetchList(listUrlInput, false) + .then(function (list) { + return setTempList(list) + }) + .catch(function () { + return setAddError( + macro.t( + templateObject_10$2 || + (templateObject_10$2 = __makeTemplateObject(['Error importing list'], ['Error importing list'])) + ) + ) + }) + return [2 /*return*/] + }) + }) + } + // if valid url, fetch details for card + if (validUrl) { + fetchTempList() + } else { + setTempList(undefined) + listUrlInput !== '' && + setAddError( + macro.t( + templateObject_11$2 || + (templateObject_11$2 = __makeTemplateObject( + ['Enter valid list location'], + ['Enter valid list location'] + )) + ) + ) + } + // reset error + if (listUrlInput === '') { + setAddError(undefined) + } + }, + [fetchList, listUrlInput, validUrl] + ) + // check if list is already imported + var isImported = Object.keys(lists).includes(listUrlInput) + // set list values and have parent modal switch to import list view + var handleImport = React.useCallback( + function () { + if (!tempList) return + setImportList(tempList) + setModalView(CurrencyModalView.importList) + setListUrl(listUrlInput) + }, + [listUrlInput, setImportList, setListUrl, setModalView, tempList] + ) + return jsxRuntime.jsxs( + Wrapper$4, + { + children: [ + jsxRuntime.jsxs( + PaddedColumn, + __assign( + { gap: '14px' }, + { + children: [ + jsxRuntime.jsx( + Row, + { + children: jsxRuntime.jsx( + SearchInput, + { + type: 'text', + id: 'list-add-input', + placeholder: macro.t( + templateObject_12$2 || + (templateObject_12$2 = __makeTemplateObject( + ['https:// or ipfs:// or ENS name'], + ['https:// or ipfs:// or ENS name'] + )) + ), + value: listUrlInput, + onChange: handleInput, + }, + void 0 + ), + }, + void 0 + ), + addError + ? jsxRuntime.jsx( + ThemedText.Error, + __assign( + { title: addError, style: { textOverflow: 'ellipsis', overflow: 'hidden' }, error: true }, + { children: addError } + ), + void 0 + ) + : null, + ], + } + ), + void 0 + ), + tempList && + jsxRuntime.jsx( + PaddedColumn, + __assign( + { style: { paddingTop: 0 } }, + { + children: jsxRuntime.jsx( + Card, + __assign( + { backgroundColor: theme.bg2, padding: '12px 20px' }, + { + children: jsxRuntime.jsxs( + RowBetween, + { + children: [ + jsxRuntime.jsxs( + RowFixed, + { + children: [ + tempList.logoURI && + jsxRuntime.jsx(ListLogo, { logoURI: tempList.logoURI, size: '40px' }, void 0), + jsxRuntime.jsxs( + AutoColumn, + __assign( + { gap: '4px', style: { marginLeft: '20px' } }, + { + children: [ + jsxRuntime.jsx( + ThemedText.Body, + __assign({ fontWeight: 600 }, { children: tempList.name }), + void 0 + ), + jsxRuntime.jsx( + ThemedText.Main, + __assign( + { fontSize: '12px' }, + { + children: jsxRuntime.jsxs( + macro.Trans, + { children: [tempList.tokens.length, ' tokens'] }, + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + ], + }, + void 0 + ), + isImported + ? jsxRuntime.jsxs( + RowFixed, + { + children: [ + jsxRuntime.jsx( + IconWrapper, + __assign( + { stroke: theme.text2, size: '16px', marginRight: '10px' }, + { children: jsxRuntime.jsx(reactFeather.CheckCircle, {}, void 0) } + ), + void 0 + ), + jsxRuntime.jsx( + ThemedText.Body, + __assign( + { color: theme.text2 }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'Loaded' }, void 0) } + ), + void 0 + ), + ], + }, + void 0 + ) + : jsxRuntime.jsx( + ButtonPrimary, + __assign( + { + style: { fontSize: '14px' }, + padding: '6px 8px', + width: 'fit-content', + onClick: handleImport, + }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'Import' }, void 0) } + ), + void 0 + ), + ], + }, + void 0 + ), + } + ), + void 0 + ), + } + ), + void 0 + ), + jsxRuntime.jsx(Separator, {}, void 0), + jsxRuntime.jsx( + ListContainer, + { + children: jsxRuntime.jsx( + AutoColumn, + __assign( + { gap: 'md' }, + { + children: sortedLists.map(function (listUrl) { + return jsxRuntime.jsx(ListRow, { listUrl }, listUrl) + }), + } + ), + void 0 + ), + }, + void 0 + ), + ], + }, + void 0 + ) +} +var templateObject_1$j, + templateObject_2$a, + templateObject_3$7, + templateObject_4$5, + templateObject_5$5, + templateObject_6$3, + templateObject_7$3, + templateObject_8$2, + templateObject_9$2, + templateObject_10$2, + templateObject_11$2, + templateObject_12$2 + +var Wrapper$3 = styled__default['default'].div( + templateObject_1$i || + (templateObject_1$i = __makeTemplateObject( + ['\n width: 100%;\n height: calc(100% - 60px);\n position: relative;\n padding-bottom: 80px;\n'], + ['\n width: 100%;\n height: calc(100% - 60px);\n position: relative;\n padding-bottom: 80px;\n'] + )) +) +var Footer = styled__default['default'].div( + templateObject_2$9 || + (templateObject_2$9 = __makeTemplateObject( + [ + '\n position: absolute;\n bottom: 0;\n width: 100%;\n border-radius: 20px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n border-top: 1px solid ', + ';\n padding: 20px;\n text-align: center;\n', + ], + [ + '\n position: absolute;\n bottom: 0;\n width: 100%;\n border-radius: 20px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n border-top: 1px solid ', + ';\n padding: 20px;\n text-align: center;\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.bg3 + } +) +function ManageTokens(_a) { + var setModalView = _a.setModalView, + setImportToken = _a.setImportToken + var chainId = useActiveWeb3React().chainId + var _b = __read(React.useState(''), 2), + searchQuery = _b[0], + setSearchQuery = _b[1] + var theme = useTheme() + // manage focus on modal show + var inputRef = React.useRef() + var handleInput = React.useCallback(function (event) { + var input = event.target.value + var checksummedInput = isAddress(input) + setSearchQuery(checksummedInput || input) + }, []) + // if they input an address, use it + var isAddressSearch = isAddress(searchQuery) + var searchToken = useToken(searchQuery) + // all tokens for local lisr + var userAddedTokens = useUserAddedTokens() + var removeToken = useRemoveUserAddedToken() + var handleRemoveAll = React.useCallback( + function () { + if (chainId && userAddedTokens) { + userAddedTokens.map(function (token) { + return removeToken(chainId, token.address) + }) + } + }, + [removeToken, userAddedTokens, chainId] + ) + var tokenList = React.useMemo( + function () { + return ( + chainId && + userAddedTokens.map(function (token) { + return jsxRuntime.jsxs( + RowBetween, + __assign( + { width: '100%' }, + { + children: [ + jsxRuntime.jsxs( + RowFixed, + { + children: [ + jsxRuntime.jsx(CurrencyLogo, { currency: token, size: '20px' }, void 0), + jsxRuntime.jsx( + ExternalLink, + __assign( + { href: getExplorerLink(chainId, token.address, ExplorerDataType.ADDRESS) }, + { + children: jsxRuntime.jsx( + ThemedText.Main, + __assign({ ml: '10px', fontWeight: 600 }, { children: token.symbol }), + void 0 + ), + } + ), + void 0 + ), + ], + }, + void 0 + ), + jsxRuntime.jsxs( + RowFixed, + { + children: [ + jsxRuntime.jsx( + TrashIcon, + { + onClick() { + return removeToken(chainId, token.address) + }, + }, + void 0 + ), + jsxRuntime.jsx( + ExternalLinkIcon, + { href: getExplorerLink(chainId, token.address, ExplorerDataType.ADDRESS) }, + void 0 + ), + ], + }, + void 0 + ), + ], + } + ), + token.address + ) + }) + ) + }, + [userAddedTokens, chainId, removeToken] + ) + return jsxRuntime.jsxs( + Wrapper$3, + { + children: [ + jsxRuntime.jsxs( + Column, + __assign( + { style: { width: '100%', height: '100%', flex: '1 1' } }, + { + children: [ + jsxRuntime.jsxs( + PaddedColumn, + __assign( + { gap: '14px' }, + { + children: [ + jsxRuntime.jsx( + Row, + { + children: jsxRuntime.jsx( + SearchInput, + { + type: 'text', + id: 'token-search-input', + placeholder: '0x0000', + value: searchQuery, + autoComplete: 'off', + ref: inputRef, + onChange: handleInput, + }, + void 0 + ), + }, + void 0 + ), + searchQuery !== '' && + !isAddressSearch && + jsxRuntime.jsx( + ThemedText.Error, + __assign( + { error: true }, + { + children: jsxRuntime.jsx( + macro.Trans, + { children: 'Enter valid token address' }, + void 0 + ), + } + ), + void 0 + ), + searchToken && + jsxRuntime.jsx( + Card, + __assign( + { backgroundColor: theme.bg2, padding: '10px 0' }, + { + children: jsxRuntime.jsx( + ImportRow, + { + token: searchToken, + showImportView() { + return setModalView(CurrencyModalView.importToken) + }, + setImportToken, + style: { height: 'fit-content' }, + }, + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + jsxRuntime.jsx(Separator, {}, void 0), + jsxRuntime.jsxs( + PaddedColumn, + __assign( + { gap: 'lg', style: { overflow: 'auto', marginBottom: '10px' } }, + { + children: [ + jsxRuntime.jsxs( + RowBetween, + { + children: [ + jsxRuntime.jsx( + ThemedText.Main, + __assign( + { fontWeight: 600 }, + { + children: jsxRuntime.jsxs( + macro.Trans, + { + children: [ + userAddedTokens === null || userAddedTokens === void 0 + ? void 0 + : userAddedTokens.length, + ' Custom Tokens', + ], + }, + void 0 + ), + } + ), + void 0 + ), + userAddedTokens.length > 0 && + jsxRuntime.jsx( + ButtonText, + __assign( + { onClick: handleRemoveAll }, + { + children: jsxRuntime.jsx( + ThemedText.Blue, + { children: jsxRuntime.jsx(macro.Trans, { children: 'Clear all' }, void 0) }, + void 0 + ), + } + ), + void 0 + ), + ], + }, + void 0 + ), + tokenList, + ], + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + jsxRuntime.jsx( + Footer, + { + children: jsxRuntime.jsx( + ThemedText.DarkGray, + { + children: jsxRuntime.jsx( + macro.Trans, + { children: 'Tip: Custom tokens are stored locally in your browser' }, + void 0 + ), + }, + void 0 + ), + }, + void 0 + ), + ], + }, + void 0 + ) +} +var templateObject_1$i, templateObject_2$9 + +var Wrapper$2 = styled__default['default'].div( + templateObject_1$h || + (templateObject_1$h = __makeTemplateObject( + ['\n width: 100%;\n position: relative;\n display: flex;\n flex-flow: column;\n'], + ['\n width: 100%;\n position: relative;\n display: flex;\n flex-flow: column;\n'] + )) +) +var ToggleWrapper = styled__default['default'](RowBetween)( + templateObject_2$8 || + (templateObject_2$8 = __makeTemplateObject( + ['\n background-color: ', ';\n border-radius: 12px;\n padding: 6px;\n'], + ['\n background-color: ', ';\n border-radius: 12px;\n padding: 6px;\n'] + )), + function (_a) { + var theme = _a.theme + return theme.bg3 + } +) +var ToggleOption = styled__default['default'].div( + templateObject_3$6 || + (templateObject_3$6 = __makeTemplateObject( + [ + '\n width: 48%;\n padding: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 12px;\n font-weight: 600;\n background-color: ', + ';\n color: ', + ';\n user-select: none;\n\n :hover {\n cursor: pointer;\n opacity: 0.7;\n }\n', + ], + [ + '\n width: 48%;\n padding: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 12px;\n font-weight: 600;\n background-color: ', + ';\n color: ', + ';\n user-select: none;\n\n :hover {\n cursor: pointer;\n opacity: 0.7;\n }\n', + ] + )), + function (_a) { + var theme = _a.theme, + active = _a.active + return active ? theme.bg1 : theme.bg3 + }, + function (_a) { + var theme = _a.theme, + active = _a.active + return active ? theme.text1 : theme.text2 + } +) +function Manage(_a) { + var onDismiss = _a.onDismiss, + setModalView = _a.setModalView, + setImportList = _a.setImportList, + setImportToken = _a.setImportToken, + setListUrl = _a.setListUrl + // toggle between tokens and lists + var _b = __read(React.useState(true), 2), + showLists = _b[0], + setShowLists = _b[1] + return jsxRuntime.jsxs( + Wrapper$2, + { + children: [ + jsxRuntime.jsx( + PaddedColumn, + { + children: jsxRuntime.jsxs( + RowBetween, + { + children: [ + jsxRuntime.jsx( + reactFeather.ArrowLeft, + { + style: { cursor: 'pointer' }, + onClick() { + return setModalView(CurrencyModalView.search) + }, + }, + void 0 + ), + jsxRuntime.jsx( + rebass.Text, + __assign( + { fontWeight: 500, fontSize: 20 }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'Manage' }, void 0) } + ), + void 0 + ), + jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0), + ], + }, + void 0 + ), + }, + void 0 + ), + jsxRuntime.jsx(Separator, {}, void 0), + jsxRuntime.jsx( + PaddedColumn, + __assign( + { style: { paddingBottom: 0 } }, + { + children: jsxRuntime.jsxs( + ToggleWrapper, + { + children: [ + jsxRuntime.jsx( + ToggleOption, + __assign( + { + onClick() { + return setShowLists(!showLists) + }, + active: showLists, + }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'Lists' }, void 0) } + ), + void 0 + ), + jsxRuntime.jsx( + ToggleOption, + __assign( + { + onClick() { + return setShowLists(!showLists) + }, + active: !showLists, + }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'Tokens' }, void 0) } + ), + void 0 + ), + ], + }, + void 0 + ), + } + ), + void 0 + ), + showLists + ? jsxRuntime.jsx(ManageLists, { setModalView, setImportList, setListUrl }, void 0) + : jsxRuntime.jsx(ManageTokens, { setModalView, setImportToken }, void 0), + ], + }, + void 0 + ) +} +var templateObject_1$h, templateObject_2$8, templateObject_3$6 + +var CurrencyModalView +;(function (CurrencyModalView) { + CurrencyModalView[(CurrencyModalView['search'] = 0)] = 'search' + CurrencyModalView[(CurrencyModalView['manage'] = 1)] = 'manage' + CurrencyModalView[(CurrencyModalView['importToken'] = 2)] = 'importToken' + CurrencyModalView[(CurrencyModalView['importList'] = 3)] = 'importList' +})(CurrencyModalView || (CurrencyModalView = {})) +function CurrencySearchModal(_a) { + var isOpen = _a.isOpen, + onDismiss = _a.onDismiss, + onCurrencySelect = _a.onCurrencySelect, + selectedCurrency = _a.selectedCurrency, + otherSelectedCurrency = _a.otherSelectedCurrency, + _b = _a.showCommonBases, + showCommonBases = _b === void 0 ? false : _b, + _c = _a.showCurrencyAmount, + showCurrencyAmount = _c === void 0 ? true : _c, + _d = _a.disableNonToken, + disableNonToken = _d === void 0 ? false : _d + var _e = __read(React.useState(CurrencyModalView.manage), 2), + modalView = _e[0], + setModalView = _e[1] + var lastOpen = useLast(isOpen) + React.useEffect( + function () { + if (isOpen && !lastOpen) { + setModalView(CurrencyModalView.search) + } + }, + [isOpen, lastOpen] + ) + var handleCurrencySelect = React.useCallback( + function (currency) { + onCurrencySelect(currency) + onDismiss() + }, + [onDismiss, onCurrencySelect] + ) + // for token import view + var prevView = usePrevious(modalView) + // used for import token flow + var _f = __read(React.useState(), 2), + importToken = _f[0], + setImportToken = _f[1] + // used for import list + var _g = __read(React.useState(), 2), + importList = _g[0], + setImportList = _g[1] + var _h = __read(React.useState(), 2), + listURL = _h[0], + setListUrl = _h[1] + var showImportView = React.useCallback( + function () { + return setModalView(CurrencyModalView.importToken) + }, + [setModalView] + ) + var showManageView = React.useCallback( + function () { + return setModalView(CurrencyModalView.manage) + }, + [setModalView] + ) + var handleBackImport = React.useCallback( + function () { + return setModalView(prevView && prevView !== CurrencyModalView.importToken ? prevView : CurrencyModalView.search) + }, + [setModalView, prevView] + ) + // change min height if not searching + var minHeight = modalView === CurrencyModalView.importToken || modalView === CurrencyModalView.importList ? 40 : 80 + var content = null + switch (modalView) { + case CurrencyModalView.search: + content = jsxRuntime.jsx( + CurrencySearch, + { + isOpen, + onDismiss, + onCurrencySelect: handleCurrencySelect, + selectedCurrency, + otherSelectedCurrency, + showCommonBases, + showCurrencyAmount, + disableNonToken, + showImportView, + setImportToken, + showManageView, + }, + void 0 + ) + break + case CurrencyModalView.importToken: + if (importToken) { + content = jsxRuntime.jsx( + ImportToken, + { + tokens: [importToken], + onDismiss, + list: importToken instanceof WrappedTokenInfo ? importToken.list : undefined, + onBack: handleBackImport, + handleCurrencySelect, + }, + void 0 + ) + } + break + case CurrencyModalView.importList: + if (importList && listURL) { + content = jsxRuntime.jsx(ImportList, { list: importList, listURL, onDismiss, setModalView }, void 0) + } + break + case CurrencyModalView.manage: + content = jsxRuntime.jsx( + Manage, + { + onDismiss, + setModalView, + setImportToken, + setImportList, + setListUrl, + }, + void 0 + ) + break + } + return jsxRuntime.jsx(Modal, __assign({ isOpen, onDismiss, maxHeight: 80, minHeight }, { children: content }), void 0) +} + +var TextWrapper = styled__default['default'].span( + templateObject_1$g || + (templateObject_1$g = __makeTemplateObject( + [ + '\n margin-left: ', + ';\n color: ', + ';\n font-size: ', + ';\n\n @media screen and (max-width: 600px) {\n font-size: ', + ';\n }\n', + ], + [ + '\n margin-left: ', + ';\n color: ', + ';\n font-size: ', + ';\n\n @media screen and (max-width: 600px) {\n font-size: ', + ';\n }\n', + ] + )), + function (_a) { + var margin = _a.margin + return margin && '4px' + }, + function (_a) { + var theme = _a.theme, + link = _a.link, + textColor = _a.textColor + return link ? theme.blue1 : textColor !== null && textColor !== void 0 ? textColor : theme.text1 + }, + function (_a) { + var fontSize = _a.fontSize + return fontSize !== null && fontSize !== void 0 ? fontSize : 'inherit' + }, + function (_a) { + var adjustSize = _a.adjustSize + return adjustSize && '12px' + } +) +var HoverInlineText = function (_a) { + var text = _a.text, + _b = _a.maxCharacters, + maxCharacters = _b === void 0 ? 20 : _b, + _c = _a.margin, + margin = _c === void 0 ? false : _c, + _d = _a.adjustSize, + adjustSize = _d === void 0 ? false : _d, + fontSize = _a.fontSize, + textColor = _a.textColor, + link = _a.link, + rest = __rest(_a, ['text', 'maxCharacters', 'margin', 'adjustSize', 'fontSize', 'textColor', 'link']) + var _e = __read(React.useState(false), 2), + showHover = _e[0], + setShowHover = _e[1] + if (!text) { + return jsxRuntime.jsx('span', {}, void 0) + } + if (text.length > maxCharacters) { + return jsxRuntime.jsx( + Tooltip, + __assign( + { text, show: showHover }, + { + children: jsxRuntime.jsx( + TextWrapper, + __assign( + { + onMouseEnter() { + return setShowHover(true) + }, + onMouseLeave() { + return setShowHover(false) + }, + margin, + adjustSize, + textColor, + link, + fontSize, + }, + rest, + { children: ' ' + text.slice(0, maxCharacters - 1) + '...' } + ), + void 0 + ), + } + ), + void 0 + ) + } + return jsxRuntime.jsx( + TextWrapper, + __assign({ margin, adjustSize, link, fontSize, textColor }, rest, { + children: text, + }), + void 0 + ) +} +var templateObject_1$g + +function FiatValue(_a) { + var fiatValue = _a.fiatValue, + priceImpact = _a.priceImpact + var theme = useTheme() + var priceImpactColor = React.useMemo( + function () { + if (!priceImpact) return undefined + if (priceImpact.lessThan('0')) return theme.green1 + var severity = warningSeverity(priceImpact) + if (severity < 1) return theme.text3 + if (severity < 3) return theme.yellow1 + return theme.red1 + }, + [priceImpact, theme.green1, theme.red1, theme.text3, theme.yellow1] + ) + return jsxRuntime.jsxs( + ThemedText.Body, + __assign( + { fontSize: 14, color: fiatValue ? theme.text3 : theme.text4 }, + { + children: [ + fiatValue + ? jsxRuntime.jsxs( + macro.Trans, + { + children: [ + '$', + jsxRuntime.jsx( + HoverInlineText, + { + text: + fiatValue === null || fiatValue === void 0 + ? void 0 + : fiatValue.toSignificant(6, { groupSeparator: ',' }), + textColor: fiatValue ? theme.text3 : theme.text4, + }, + void 0 + ), + ], + }, + void 0 + ) + : '', + priceImpact + ? jsxRuntime.jsxs( + 'span', + __assign( + { style: { color: priceImpactColor } }, + { + children: [ + ' ', + jsxRuntime.jsxs( + MouseoverTooltip, + __assign( + { + text: macro.t( + templateObject_1$f || + (templateObject_1$f = __makeTemplateObject( + ['The estimated difference between the USD values of input and output amounts.'], + ['The estimated difference between the USD values of input and output amounts.'] + )) + ), + }, + { + children: [ + '(', + jsxRuntime.jsxs( + macro.Trans, + { children: [priceImpact.multiply(-1).toSignificant(3), '%'] }, + void 0 + ), + ')', + ], + } + ), + void 0 + ), + ], + } + ), + void 0 + ) + : null, + ], + } + ), + void 0 + ) +} +var templateObject_1$f + +var InputPanel = styled__default['default'].div( + templateObject_1$e || + (templateObject_1$e = __makeTemplateObject( + [ + '\n ', + '\n position: relative;\n border-radius: ', + ';\n background-color: ', + ';\n z-index: 1;\n width: ', + ';\n transition: height 1s ease;\n will-change: height;\n', + ], + [ + '\n ', + '\n position: relative;\n border-radius: ', + ';\n background-color: ', + ';\n z-index: 1;\n width: ', + ';\n transition: height 1s ease;\n will-change: height;\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.flexColumnNoWrap + }, + function (_a) { + var hideInput = _a.hideInput + return hideInput ? '16px' : '20px' + }, + function (_a) { + var theme = _a.theme, + hideInput = _a.hideInput + return hideInput ? 'transparent' : theme.bg2 + }, + function (_a) { + var hideInput = _a.hideInput + return hideInput ? '100%' : 'initial' + } +) +var FixedContainer = styled__default['default'].div( + templateObject_2$7 || + (templateObject_2$7 = __makeTemplateObject( + [ + '\n width: 100%;\n height: 100%;\n position: absolute;\n border-radius: 20px;\n background-color: ', + ';\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 2;\n', + ], + [ + '\n width: 100%;\n height: 100%;\n position: absolute;\n border-radius: 20px;\n background-color: ', + ';\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 2;\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.bg2 + } +) +var Container$1 = styled__default['default'].div( + templateObject_3$5 || + (templateObject_3$5 = __makeTemplateObject( + [ + '\n border-radius: ', + ';\n border: 1px solid ', + ';\n background-color: ', + ';\n width: ', + ';\n :focus,\n :hover {\n border: 1px solid ', + ';\n }\n', + ], + [ + '\n border-radius: ', + ';\n border: 1px solid ', + ';\n background-color: ', + ';\n width: ', + ';\n :focus,\n :hover {\n border: 1px solid ', + ';\n }\n', + ] + )), + function (_a) { + var hideInput = _a.hideInput + return hideInput ? '16px' : '20px' + }, + function (_a) { + var theme = _a.theme + return theme.bg0 + }, + function (_a) { + var theme = _a.theme + return theme.bg1 + }, + function (_a) { + var hideInput = _a.hideInput + return hideInput ? '100%' : 'initial' + }, + function (_a) { + var theme = _a.theme, + hideInput = _a.hideInput + return hideInput ? ' transparent' : theme.bg3 + } +) +var CurrencySelect = styled__default['default'](ButtonGray)( + templateObject_4$4 || + (templateObject_4$4 = __makeTemplateObject( + [ + '\n align-items: center;\n background-color: ', + ';\n box-shadow: ', + ';\n box-shadow: 0px 6px 10px rgba(0, 0, 0, 0.075);\n color: ', + ';\n cursor: pointer;\n border-radius: 16px;\n outline: none;\n user-select: none;\n border: none;\n font-size: 24px;\n font-weight: 500;\n height: ', + ';\n width: ', + ';\n padding: 0 8px;\n justify-content: space-between;\n margin-left: ', + ';\n :focus,\n :hover {\n background-color: ', + ';\n }\n visibility: ', + ';\n', + ], + [ + '\n align-items: center;\n background-color: ', + ';\n box-shadow: ', + ';\n box-shadow: 0px 6px 10px rgba(0, 0, 0, 0.075);\n color: ', + ';\n cursor: pointer;\n border-radius: 16px;\n outline: none;\n user-select: none;\n border: none;\n font-size: 24px;\n font-weight: 500;\n height: ', + ';\n width: ', + ';\n padding: 0 8px;\n justify-content: space-between;\n margin-left: ', + ';\n :focus,\n :hover {\n background-color: ', + ';\n }\n visibility: ', + ';\n', + ] + )), + function (_a) { + var selected = _a.selected, + theme = _a.theme + return selected ? theme.bg2 : theme.primary1 + }, + function (_a) { + var selected = _a.selected + return selected ? 'none' : '0px 6px 10px rgba(0, 0, 0, 0.075)' + }, + function (_a) { + var selected = _a.selected, + theme = _a.theme + return selected ? theme.text1 : theme.white + }, + function (_a) { + var hideInput = _a.hideInput + return hideInput ? '2.8rem' : '2.4rem' + }, + function (_a) { + var hideInput = _a.hideInput + return hideInput ? '100%' : 'initial' + }, + function (_a) { + var hideInput = _a.hideInput + return hideInput ? '0' : '12px' + }, + function (_a) { + var selected = _a.selected, + theme = _a.theme + return selected ? theme.bg3 : polished.darken(0.05, theme.primary1) + }, + function (_a) { + var visible = _a.visible + return visible ? 'visible' : 'hidden' + } +) +var InputRow = styled__default['default'].div( + templateObject_5$4 || + (templateObject_5$4 = __makeTemplateObject( + ['\n ', '\n align-items: center;\n justify-content: space-between;\n padding: ', ';\n'], + ['\n ', '\n align-items: center;\n justify-content: space-between;\n padding: ', ';\n'] + )), + function (_a) { + var theme = _a.theme + return theme.flexRowNoWrap + }, + function (_a) { + var selected = _a.selected + return selected ? ' 1rem 1rem 0.75rem 1rem' : '1rem 1rem 1rem 1rem' + } +) +var LabelRow = styled__default['default'].div( + templateObject_6$2 || + (templateObject_6$2 = __makeTemplateObject( + [ + '\n ', + '\n align-items: center;\n color: ', + ';\n font-size: 0.75rem;\n line-height: 1rem;\n padding: 0 1rem 1rem;\n span:hover {\n cursor: pointer;\n color: ', + ';\n }\n', + ], + [ + '\n ', + '\n align-items: center;\n color: ', + ';\n font-size: 0.75rem;\n line-height: 1rem;\n padding: 0 1rem 1rem;\n span:hover {\n cursor: pointer;\n color: ', + ';\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.flexRowNoWrap + }, + function (_a) { + var theme = _a.theme + return theme.text1 + }, + function (_a) { + var theme = _a.theme + return polished.darken(0.2, theme.text2) + } +) +var FiatRow = styled__default['default'](LabelRow)( + templateObject_7$2 || + (templateObject_7$2 = __makeTemplateObject( + ['\n justify-content: flex-end;\n'], + ['\n justify-content: flex-end;\n'] + )) +) +var Aligner = styled__default['default'].span( + templateObject_8$1 || + (templateObject_8$1 = __makeTemplateObject( + ['\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n'], + ['\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n'] + )) +) +var StyledDropDown = styled__default['default'](SvgDropdown)( + templateObject_9$1 || + (templateObject_9$1 = __makeTemplateObject( + [ + '\n margin: 0 0.25rem 0 0.35rem;\n height: 35%;\n\n path {\n stroke: ', + ';\n stroke-width: 1.5px;\n }\n', + ], + [ + '\n margin: 0 0.25rem 0 0.35rem;\n height: 35%;\n\n path {\n stroke: ', + ';\n stroke-width: 1.5px;\n }\n', + ] + )), + function (_a) { + var selected = _a.selected, + theme = _a.theme + return selected ? theme.text1 : theme.white + } +) +var StyledTokenName = styled__default['default'].span( + templateObject_10$1 || + (templateObject_10$1 = __makeTemplateObject( + ['\n ', '\n font-size: ', ';\n'], + ['\n ', '\n font-size: ', ';\n'] + )), + function (_a) { + var active = _a.active + return active ? ' margin: 0 0.25rem 0 0.25rem;' : ' margin: 0 0.25rem 0 0.25rem;' + }, + function (_a) { + var active = _a.active + return active ? '18px' : '18px' + } +) +var StyledBalanceMax = styled__default['default'].button( + templateObject_11$1 || + (templateObject_11$1 = __makeTemplateObject( + [ + '\n background-color: transparent;\n background-color: ', + ';\n border: none;\n border-radius: 12px;\n color: ', + ';\n cursor: pointer;\n font-size: 11px;\n font-weight: 500;\n margin-left: 0.25rem;\n opacity: ', + ';\n padding: 4px 6px;\n pointer-events: ', + ';\n\n :hover {\n opacity: ', + ';\n }\n\n :focus {\n outline: none;\n }\n', + ], + [ + '\n background-color: transparent;\n background-color: ', + ';\n border: none;\n border-radius: 12px;\n color: ', + ';\n cursor: pointer;\n font-size: 11px;\n font-weight: 500;\n margin-left: 0.25rem;\n opacity: ', + ';\n padding: 4px 6px;\n pointer-events: ', + ';\n\n :hover {\n opacity: ', + ';\n }\n\n :focus {\n outline: none;\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.primary5 + }, + function (_a) { + var theme = _a.theme + return theme.primary1 + }, + function (_a) { + var disabled = _a.disabled + return !disabled ? 1 : 0.4 + }, + function (_a) { + var disabled = _a.disabled + return !disabled ? 'initial' : 'none' + }, + function (_a) { + var disabled = _a.disabled + return !disabled ? 0.8 : 0.4 + } +) +var StyledNumericalInput = styled__default['default'](Input$1)( + templateObject_12$1 || + (templateObject_12$1 = __makeTemplateObject( + ['\n ', ';\n text-align: left;\n'], + ['\n ', ';\n text-align: left;\n'] + )), + loadingOpacityMixin +) +function CurrencyInputPanel(_a) { + var value = _a.value, + onUserInput = _a.onUserInput, + onMax = _a.onMax, + showMaxButton = _a.showMaxButton, + onCurrencySelect = _a.onCurrencySelect, + currency = _a.currency, + otherCurrency = _a.otherCurrency, + id = _a.id, + showCommonBases = _a.showCommonBases, + showCurrencyAmount = _a.showCurrencyAmount, + disableNonToken = _a.disableNonToken, + renderBalance = _a.renderBalance, + fiatValue = _a.fiatValue, + priceImpact = _a.priceImpact, + _b = _a.hideBalance, + hideBalance = _b === void 0 ? false : _b, + _c = _a.pair, + pair = _c === void 0 ? null : _c, // used for double token logo + _d = _a.hideInput, // used for double token logo + hideInput = _d === void 0 ? false : _d, + _e = _a.locked, + locked = _e === void 0 ? false : _e, + _f = _a.loading, + loading = _f === void 0 ? false : _f, + rest = __rest(_a, [ + 'value', + 'onUserInput', + 'onMax', + 'showMaxButton', + 'onCurrencySelect', + 'currency', + 'otherCurrency', + 'id', + 'showCommonBases', + 'showCurrencyAmount', + 'disableNonToken', + 'renderBalance', + 'fiatValue', + 'priceImpact', + 'hideBalance', + 'pair', + 'hideInput', + 'locked', + 'loading', + ]) + var _g = __read(React.useState(false), 2), + modalOpen = _g[0], + setModalOpen = _g[1] + var account = useActiveWeb3React().account + var selectedCurrencyBalance = useCurrencyBalance( + account !== null && account !== void 0 ? account : undefined, + currency !== null && currency !== void 0 ? currency : undefined + ) + var theme = useTheme() + var handleDismissSearch = React.useCallback( + function () { + setModalOpen(false) + }, + [setModalOpen] + ) + return jsxRuntime.jsxs( + InputPanel, + __assign({ id, hideInput }, rest, { + children: [ + locked && + jsxRuntime.jsx( + FixedContainer, + { + children: jsxRuntime.jsxs( + AutoColumn, + __assign( + { gap: 'sm', justify: 'center' }, + { + children: [ + jsxRuntime.jsx(reactFeather.Lock, {}, void 0), + jsxRuntime.jsx( + ThemedText.Label, + __assign( + { fontSize: '12px', textAlign: 'center', padding: '0 12px' }, + { + children: jsxRuntime.jsx( + macro.Trans, + { + children: + 'The market price is outside your specified price range. Single-asset deposit only.', + }, + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + }, + void 0 + ), + jsxRuntime.jsxs( + Container$1, + __assign( + { hideInput }, + { + children: [ + jsxRuntime.jsxs( + InputRow, + __assign( + { style: hideInput ? { padding: '0', borderRadius: '8px' } : {}, selected: !onCurrencySelect }, + { + children: [ + !hideInput && + jsxRuntime.jsx( + StyledNumericalInput, + { + className: 'token-amount-input', + value, + onUserInput, + $loading: loading, + }, + void 0 + ), + jsxRuntime.jsx( + CurrencySelect, + __assign( + { + visible: currency !== undefined, + selected: !!currency, + hideInput, + className: 'open-currency-select-button', + onClick() { + if (onCurrencySelect) { + setModalOpen(true) + } + }, + }, + { + children: jsxRuntime.jsxs( + Aligner, + { + children: [ + jsxRuntime.jsxs( + RowFixed, + { + children: [ + pair + ? jsxRuntime.jsx( + 'span', + __assign( + { style: { marginRight: '0.5rem' } }, + { + children: jsxRuntime.jsx( + DoubleCurrencyLogo, + { + currency0: pair.token0, + currency1: pair.token1, + size: 24, + margin: true, + }, + void 0 + ), + } + ), + void 0 + ) + : currency + ? jsxRuntime.jsx( + CurrencyLogo, + { style: { marginRight: '0.5rem' }, currency, size: '24px' }, + void 0 + ) + : null, + pair + ? jsxRuntime.jsxs( + StyledTokenName, + __assign( + { className: 'pair-name-container' }, + { + children: [ + pair === null || pair === void 0 ? void 0 : pair.token0.symbol, + ':', + pair === null || pair === void 0 ? void 0 : pair.token1.symbol, + ], + } + ), + void 0 + ) + : jsxRuntime.jsx( + StyledTokenName, + __assign( + { + className: 'token-symbol-container', + active: Boolean(currency && currency.symbol), + }, + { + children: + (currency && currency.symbol && currency.symbol.length > 20 + ? currency.symbol.slice(0, 4) + + '...' + + currency.symbol.slice( + currency.symbol.length - 5, + currency.symbol.length + ) + : currency === null || currency === void 0 + ? void 0 + : currency.symbol) || + jsxRuntime.jsx( + macro.Trans, + { children: 'Select a token' }, + void 0 + ), + } + ), + void 0 + ), + ], + }, + void 0 + ), + onCurrencySelect && + jsxRuntime.jsx(StyledDropDown, { selected: !!currency }, void 0), + ], + }, + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + !hideInput && + !hideBalance && + currency && + jsxRuntime.jsx( + FiatRow, + { + children: jsxRuntime.jsxs( + RowBetween, + { + children: [ + jsxRuntime.jsx( + LoadingOpacityContainer, + __assign( + { $loading: loading }, + { + children: jsxRuntime.jsx(FiatValue, { fiatValue, priceImpact }, void 0), + } + ), + void 0 + ), + account + ? jsxRuntime.jsxs( + RowFixed, + __assign( + { style: { height: '17px' } }, + { + children: [ + jsxRuntime.jsx( + ThemedText.Body, + __assign( + { + onClick: onMax, + color: theme.text3, + fontWeight: 500, + fontSize: 14, + style: { display: 'inline', cursor: 'pointer' }, + }, + { + children: + !hideBalance && currency && selectedCurrencyBalance + ? renderBalance + ? renderBalance(selectedCurrencyBalance) + : jsxRuntime.jsxs( + macro.Trans, + { + children: [ + 'Balance: ', + formatCurrencyAmount(selectedCurrencyBalance, 4), + ], + }, + void 0 + ) + : null, + } + ), + void 0 + ), + showMaxButton && selectedCurrencyBalance + ? jsxRuntime.jsx( + StyledBalanceMax, + __assign( + { onClick: onMax }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'MAX' }, void 0) } + ), + void 0 + ) + : null, + ], + } + ), + void 0 + ) + : jsxRuntime.jsx('span', {}, void 0), + ], + }, + void 0 + ), + }, + void 0 + ), + ], + } + ), + void 0 + ), + onCurrencySelect && + jsxRuntime.jsx( + CurrencySearchModal, + { + isOpen: modalOpen, + onDismiss: handleDismissSearch, + onCurrencySelect, + selectedCurrency: currency, + otherSelectedCurrency: otherCurrency, + showCommonBases, + showCurrencyAmount, + disableNonToken, + }, + void 0 + ), + ], + }), + void 0 + ) +} +var templateObject_1$e, + templateObject_2$7, + templateObject_3$5, + templateObject_4$4, + templateObject_5$4, + templateObject_6$2, + templateObject_7$2, + templateObject_8$1, + templateObject_9$1, + templateObject_10$1, + templateObject_11$1, + templateObject_12$1 + +/** + * Given the price impact, get user confirmation. + * + * @param priceImpactWithoutFee price impact of the trade without the fee. + */ +function confirmPriceImpactWithoutFee(priceImpactWithoutFee) { + if (!priceImpactWithoutFee.lessThan(PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN)) { + return ( + window.prompt( + 'This swap has a price impact of at least ' + + PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN.toFixed(0) + + '%. Please type the word "confirm" to continue with this swap.' + ) === 'confirm' + ) + } else if (!priceImpactWithoutFee.lessThan(ALLOWED_PRICE_IMPACT_HIGH)) { + return window.confirm( + 'This swap has a price impact of at least ' + + ALLOWED_PRICE_IMPACT_HIGH.toFixed(0) + + '%. Please confirm that you would like to continue with this swap.' + ) + } + return true +} + +/** + * Returns true if the trade requires a confirmation of details before we can submit it + * @param args either a pair of V2 trades or a pair of V3 trades + */ +function tradeMeaningfullyDiffers() { + var args = [] + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i] + } + var _a = __read(args, 2), + tradeA = _a[0], + tradeB = _a[1] + return ( + tradeA.tradeType !== tradeB.tradeType || + !tradeA.inputAmount.currency.equals(tradeB.inputAmount.currency) || + !tradeA.inputAmount.equalTo(tradeB.inputAmount) || + !tradeA.outputAmount.currency.equals(tradeB.outputAmount.currency) || + !tradeA.outputAmount.equalTo(tradeB.outputAmount) + ) +} + +function useAddTokenToMetamask(currencyToAdd) { + var library = useActiveWeb3React().library + var token = currencyToAdd === null || currencyToAdd === void 0 ? void 0 : currencyToAdd.wrapped + var _a = __read(React.useState(), 2), + success = _a[0], + setSuccess = _a[1] + var logoURL = useCurrencyLogoURIs(token)[0] + var addToken = React.useCallback( + function () { + if (library && library.provider.isMetaMask && library.provider.request && token) { + library.provider + .request({ + method: 'wallet_watchAsset', + params: { + //@ts-ignore // need this for incorrect ethers provider type + type: 'ERC20', + options: { + address: token.address, + symbol: token.symbol, + decimals: token.decimals, + image: logoURL, + }, + }, + }) + .then(function (success) { + setSuccess(success) + }) + .catch(function () { + return setSuccess(false) + }) + } else { + setSuccess(false) + } + }, + [library, logoURL, token] + ) + return { addToken, success } +} + +var Circle$1 = + 'data:image/svg+xml,%3Csvg%20width%3D%2294%22%20height%3D%2294%22%20viewBox%3D%220%200%2094%2094%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%20%20%3Cpath%20d%3D%22M92%2047C92%2022.1472%2071.8528%202%2047%202C22.1472%202%202%2022.1472%202%2047C2%2071.8528%2022.1472%2092%2047%2092%22%20stroke%3D%22%232172E5%22%20stroke-width%3D%223%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E' + +var MetaMaskLogo = 'f89237c6bc3f84db.png' + +var VoteOption +;(function (VoteOption) { + VoteOption[(VoteOption['Against'] = 0)] = 'Against' + VoteOption[(VoteOption['For'] = 1)] = 'For' + VoteOption[(VoteOption['Abstain'] = 2)] = 'Abstain' +})(VoteOption || (VoteOption = {})) + +function formatAmount(amountRaw, decimals, sigFigs) { + return new sdkCore.Fraction( + amountRaw, + JSBI__default['default'].exponentiate( + JSBI__default['default'].BigInt(10), + JSBI__default['default'].BigInt(decimals) + ) + ).toSignificant(sigFigs) +} +function FormattedCurrencyAmount(_a) { + var rawAmount = _a.rawAmount, + symbol = _a.symbol, + decimals = _a.decimals, + sigFigs = _a.sigFigs + return jsxRuntime.jsxs( + jsxRuntime.Fragment, + { children: [formatAmount(rawAmount, decimals, sigFigs), ' ', symbol] }, + void 0 + ) +} +function FormattedCurrencyAmountManaged(_a) { + var _b + var rawAmount = _a.rawAmount, + currencyId = _a.currencyId, + _c = _a.sigFigs, + sigFigs = _c === void 0 ? 6 : _c + var currency = useCurrency(currencyId) + return currency + ? jsxRuntime.jsx( + FormattedCurrencyAmount, + { + rawAmount, + decimals: currency.decimals, + sigFigs, + symbol: (_b = currency.symbol) !== null && _b !== void 0 ? _b : '???', + }, + void 0 + ) + : null +} +function ClaimSummary(_a) { + var _b = _a.info, + recipient = _b.recipient, + uniAmountRaw = _b.uniAmountRaw + var ENSName = useENSName().ENSName + return typeof uniAmountRaw === 'string' + ? jsxRuntime.jsxs( + macro.Trans, + { + children: [ + 'Claim ', + jsxRuntime.jsx( + FormattedCurrencyAmount, + { rawAmount: uniAmountRaw, symbol: 'UNI', decimals: 18, sigFigs: 4 }, + void 0 + ), + ' for', + ' ', + ENSName !== null && ENSName !== void 0 ? ENSName : recipient, + ], + }, + void 0 + ) + : jsxRuntime.jsxs( + macro.Trans, + { children: ['Claim UNI reward for ', ENSName !== null && ENSName !== void 0 ? ENSName : recipient] }, + void 0 + ) +} +function SubmitProposalTransactionSummary(_) { + return jsxRuntime.jsx(macro.Trans, { children: 'Submit new proposal' }, void 0) +} +function ApprovalSummary(_a) { + var info = _a.info + var token = useToken(info.tokenAddress) + return jsxRuntime.jsxs( + macro.Trans, + { children: ['Approve ', token === null || token === void 0 ? void 0 : token.symbol] }, + void 0 + ) +} +function VoteSummary(_a) { + var info = _a.info + var proposalKey = info.governorAddress + '/' + info.proposalId + if (info.reason && info.reason.trim().length > 0) { + switch (info.decision) { + case VoteOption.For: + return jsxRuntime.jsxs(macro.Trans, { children: ['Vote for proposal ', proposalKey] }, void 0) + case VoteOption.Abstain: + return jsxRuntime.jsxs(macro.Trans, { children: ['Vote to abstain on proposal ', proposalKey] }, void 0) + case VoteOption.Against: + return jsxRuntime.jsxs(macro.Trans, { children: ['Vote against proposal ', proposalKey] }, void 0) + } + } else { + switch (info.decision) { + case VoteOption.For: + return jsxRuntime.jsxs( + macro.Trans, + { children: ['Vote for proposal ', proposalKey, ' with reason "', info.reason, '"'] }, + void 0 + ) + case VoteOption.Abstain: + return jsxRuntime.jsxs( + macro.Trans, + { children: ['Vote to abstain on proposal ', proposalKey, ' with reason "', info.reason, '"'] }, + void 0 + ) + case VoteOption.Against: + return jsxRuntime.jsxs( + macro.Trans, + { children: ['Vote against proposal ', proposalKey, ' with reason "', info.reason, '"'] }, + void 0 + ) + } + } +} +function DelegateSummary(_a) { + var delegatee = _a.info.delegatee + var ENSName = useENSName(delegatee).ENSName + return jsxRuntime.jsxs( + macro.Trans, + { children: ['Delegate voting power to ', ENSName !== null && ENSName !== void 0 ? ENSName : delegatee] }, + void 0 + ) +} +function WrapSummary(_a) { + var _b, _c, _d, _e, _f, _g + var _h = _a.info, + chainId = _h.chainId, + currencyAmountRaw = _h.currencyAmountRaw, + unwrapped = _h.unwrapped + var native = chainId ? nativeOnChain(chainId) : undefined + if (unwrapped) { + return jsxRuntime.jsxs( + macro.Trans, + { + children: [ + 'Unwrap', + ' ', + jsxRuntime.jsx( + FormattedCurrencyAmount, + { + rawAmount: currencyAmountRaw, + symbol: + (_c = + (_b = native === null || native === void 0 ? void 0 : native.wrapped) === null || _b === void 0 + ? void 0 + : _b.symbol) !== null && _c !== void 0 + ? _c + : 'WETH', + decimals: 18, + sigFigs: 6, + }, + void 0 + ), + ' ', + 'to ', + (_d = native === null || native === void 0 ? void 0 : native.symbol) !== null && _d !== void 0 ? _d : 'ETH', + ], + }, + void 0 + ) + } else { + return jsxRuntime.jsxs( + macro.Trans, + { + children: [ + 'Wrap', + ' ', + jsxRuntime.jsx( + FormattedCurrencyAmount, + { + rawAmount: currencyAmountRaw, + symbol: + (_e = native === null || native === void 0 ? void 0 : native.symbol) !== null && _e !== void 0 + ? _e + : 'ETH', + decimals: 18, + sigFigs: 6, + }, + void 0 + ), + ' ', + 'to ', + (_g = + (_f = native === null || native === void 0 ? void 0 : native.wrapped) === null || _f === void 0 + ? void 0 + : _f.symbol) !== null && _g !== void 0 + ? _g + : 'WETH', + ], + }, + void 0 + ) + } +} +function DepositLiquidityStakingSummary(_) { + // not worth rendering the tokens since you can should no longer deposit liquidity in the staking contracts + // todo: deprecate and delete the code paths that allow this, show user more information + return jsxRuntime.jsx(macro.Trans, { children: 'Deposit liquidity' }, void 0) +} +function WithdrawLiquidityStakingSummary(_) { + return jsxRuntime.jsx(macro.Trans, { children: 'Withdraw deposited liquidity' }, void 0) +} +function MigrateLiquidityToV3Summary(_a) { + var _b = _a.info, + baseCurrencyId = _b.baseCurrencyId, + quoteCurrencyId = _b.quoteCurrencyId + var baseCurrency = useCurrency(baseCurrencyId) + var quoteCurrency = useCurrency(quoteCurrencyId) + return jsxRuntime.jsxs( + macro.Trans, + { + children: [ + 'Migrate ', + baseCurrency === null || baseCurrency === void 0 ? void 0 : baseCurrency.symbol, + '/', + quoteCurrency === null || quoteCurrency === void 0 ? void 0 : quoteCurrency.symbol, + ' liquidity to V3', + ], + }, + void 0 + ) +} +function CreateV3PoolSummary(_a) { + var _b = _a.info, + quoteCurrencyId = _b.quoteCurrencyId, + baseCurrencyId = _b.baseCurrencyId + var baseCurrency = useCurrency(baseCurrencyId) + var quoteCurrency = useCurrency(quoteCurrencyId) + return jsxRuntime.jsxs( + macro.Trans, + { + children: [ + 'Create ', + baseCurrency === null || baseCurrency === void 0 ? void 0 : baseCurrency.symbol, + '/', + quoteCurrency === null || quoteCurrency === void 0 ? void 0 : quoteCurrency.symbol, + ' V3 pool', + ], + }, + void 0 + ) +} +function CollectFeesSummary(_a) { + var _b = _a.info, + currencyId0 = _b.currencyId0, + currencyId1 = _b.currencyId1 + var currency0 = useCurrency(currencyId0) + var currency1 = useCurrency(currencyId1) + return jsxRuntime.jsxs( + macro.Trans, + { + children: [ + 'Collect ', + currency0 === null || currency0 === void 0 ? void 0 : currency0.symbol, + '/', + currency1 === null || currency1 === void 0 ? void 0 : currency1.symbol, + ' fees', + ], + }, + void 0 + ) +} +function RemoveLiquidityV3Summary(_a) { + var _b = _a.info, + baseCurrencyId = _b.baseCurrencyId, + quoteCurrencyId = _b.quoteCurrencyId, + expectedAmountBaseRaw = _b.expectedAmountBaseRaw, + expectedAmountQuoteRaw = _b.expectedAmountQuoteRaw + return jsxRuntime.jsxs( + macro.Trans, + { + children: [ + 'Remove', + ' ', + jsxRuntime.jsx( + FormattedCurrencyAmountManaged, + { rawAmount: expectedAmountBaseRaw, currencyId: baseCurrencyId, sigFigs: 3 }, + void 0 + ), + ' and', + ' ', + jsxRuntime.jsx( + FormattedCurrencyAmountManaged, + { rawAmount: expectedAmountQuoteRaw, currencyId: quoteCurrencyId, sigFigs: 3 }, + void 0 + ), + ], + }, + void 0 + ) +} +function AddLiquidityV3PoolSummary(_a) { + var _b = _a.info, + createPool = _b.createPool, + quoteCurrencyId = _b.quoteCurrencyId, + baseCurrencyId = _b.baseCurrencyId + var baseCurrency = useCurrency(baseCurrencyId) + var quoteCurrency = useCurrency(quoteCurrencyId) + return createPool + ? jsxRuntime.jsxs( + macro.Trans, + { + children: [ + 'Create pool and add ', + baseCurrency === null || baseCurrency === void 0 ? void 0 : baseCurrency.symbol, + '/', + quoteCurrency === null || quoteCurrency === void 0 ? void 0 : quoteCurrency.symbol, + ' V3 liquidity', + ], + }, + void 0 + ) + : jsxRuntime.jsxs( + macro.Trans, + { + children: [ + 'Add ', + baseCurrency === null || baseCurrency === void 0 ? void 0 : baseCurrency.symbol, + '/', + quoteCurrency === null || quoteCurrency === void 0 ? void 0 : quoteCurrency.symbol, + ' V3 liquidity', + ], + }, + void 0 + ) +} +function AddLiquidityV2PoolSummary(_a) { + var _b = _a.info, + quoteCurrencyId = _b.quoteCurrencyId, + expectedAmountBaseRaw = _b.expectedAmountBaseRaw, + expectedAmountQuoteRaw = _b.expectedAmountQuoteRaw, + baseCurrencyId = _b.baseCurrencyId + return jsxRuntime.jsxs( + macro.Trans, + { + children: [ + 'Add ', + jsxRuntime.jsx( + FormattedCurrencyAmountManaged, + { rawAmount: expectedAmountBaseRaw, currencyId: baseCurrencyId, sigFigs: 3 }, + void 0 + ), + ' ', + 'and ', + jsxRuntime.jsx( + FormattedCurrencyAmountManaged, + { rawAmount: expectedAmountQuoteRaw, currencyId: quoteCurrencyId, sigFigs: 3 }, + void 0 + ), + ' ', + 'to Uniswap V2', + ], + }, + void 0 + ) +} +function SwapSummary(_a) { + var info = _a.info + if (info.tradeType === sdkCore.TradeType.EXACT_INPUT) { + return jsxRuntime.jsxs( + macro.Trans, + { + children: [ + 'Swap exactly', + ' ', + jsxRuntime.jsx( + FormattedCurrencyAmountManaged, + { rawAmount: info.inputCurrencyAmountRaw, currencyId: info.inputCurrencyId, sigFigs: 6 }, + void 0 + ), + ' ', + 'for', + ' ', + jsxRuntime.jsx( + FormattedCurrencyAmountManaged, + { rawAmount: info.expectedOutputCurrencyAmountRaw, currencyId: info.outputCurrencyId, sigFigs: 6 }, + void 0 + ), + ], + }, + void 0 + ) + } else { + return jsxRuntime.jsxs( + macro.Trans, + { + children: [ + 'Swap', + ' ', + jsxRuntime.jsx( + FormattedCurrencyAmountManaged, + { rawAmount: info.expectedInputCurrencyAmountRaw, currencyId: info.inputCurrencyId, sigFigs: 6 }, + void 0 + ), + ' ', + 'for exactly', + ' ', + jsxRuntime.jsx( + FormattedCurrencyAmountManaged, + { rawAmount: info.outputCurrencyAmountRaw, currencyId: info.outputCurrencyId, sigFigs: 6 }, + void 0 + ), + ], + }, + void 0 + ) + } +} +function TransactionSummary(_a) { + var info = _a.info + switch (info.type) { + case TransactionType.ADD_LIQUIDITY_V3_POOL: + return jsxRuntime.jsx(AddLiquidityV3PoolSummary, { info }, void 0) + case TransactionType.ADD_LIQUIDITY_V2_POOL: + return jsxRuntime.jsx(AddLiquidityV2PoolSummary, { info }, void 0) + case TransactionType.CLAIM: + return jsxRuntime.jsx(ClaimSummary, { info }, void 0) + case TransactionType.DEPOSIT_LIQUIDITY_STAKING: + return jsxRuntime.jsx(DepositLiquidityStakingSummary, { info }, void 0) + case TransactionType.WITHDRAW_LIQUIDITY_STAKING: + return jsxRuntime.jsx(WithdrawLiquidityStakingSummary, { info }, void 0) + case TransactionType.SWAP: + return jsxRuntime.jsx(SwapSummary, { info }, void 0) + case TransactionType.APPROVAL: + return jsxRuntime.jsx(ApprovalSummary, { info }, void 0) + case TransactionType.VOTE: + return jsxRuntime.jsx(VoteSummary, { info }, void 0) + case TransactionType.DELEGATE: + return jsxRuntime.jsx(DelegateSummary, { info }, void 0) + case TransactionType.WRAP: + return jsxRuntime.jsx(WrapSummary, { info }, void 0) + case TransactionType.CREATE_V3_POOL: + return jsxRuntime.jsx(CreateV3PoolSummary, { info }, void 0) + case TransactionType.MIGRATE_LIQUIDITY_V3: + return jsxRuntime.jsx(MigrateLiquidityToV3Summary, { info }, void 0) + case TransactionType.COLLECT_FEES: + return jsxRuntime.jsx(CollectFeesSummary, { info }, void 0) + case TransactionType.REMOVE_LIQUIDITY_V3: + return jsxRuntime.jsx(RemoveLiquidityV3Summary, { info }, void 0) + case TransactionType.SUBMIT_PROPOSAL: + return jsxRuntime.jsx(SubmitProposalTransactionSummary, { info }, void 0) + } +} + +var Wrapper$1 = styled__default['default'].div( + templateObject_1$d || + (templateObject_1$d = __makeTemplateObject( + ['\n height: 90px;\n width: 90px;\n'], + ['\n height: 90px;\n width: 90px;\n'] + )) +) +var dash = styled.keyframes( + templateObject_2$6 || + (templateObject_2$6 = __makeTemplateObject( + ['\n 0% {\n stroke-dashoffset: 1000;\n }\n 100% {\n stroke-dashoffset: 0;\n }\n'], + ['\n 0% {\n stroke-dashoffset: 1000;\n }\n 100% {\n stroke-dashoffset: 0;\n }\n'] + )) +) +var dashCheck = styled.keyframes( + templateObject_3$4 || + (templateObject_3$4 = __makeTemplateObject( + ['\n 0% {\n stroke-dashoffset: -100;\n }\n 100% {\n stroke-dashoffset: 900;\n }\n'], + ['\n 0% {\n stroke-dashoffset: -100;\n }\n 100% {\n stroke-dashoffset: 900;\n }\n'] + )) +) +var Circle = styled__default['default'].circle( + templateObject_4$3 || + (templateObject_4$3 = __makeTemplateObject( + [ + '\n stroke-dasharray: 1000;\n stroke-dashoffset: 0;\n -webkit-animation: ', + ' 0.9s ease-in-out;\n animation: ', + ' 0.9s ease-in-out;\n', + ], + [ + '\n stroke-dasharray: 1000;\n stroke-dashoffset: 0;\n -webkit-animation: ', + ' 0.9s ease-in-out;\n animation: ', + ' 0.9s ease-in-out;\n', + ] + )), + dash, + dash +) +var PolyLine = styled__default['default'].polyline( + templateObject_5$3 || + (templateObject_5$3 = __makeTemplateObject( + [ + '\n stroke-dasharray: 1000;\n stroke-dashoffset: 0;\n stroke-dashoffset: -100;\n -webkit-animation: ', + ' 0.9s 0.35s ease-in-out forwards;\n animation: ', + ' 0.9s 0.35s ease-in-out forwards;\n', + ], + [ + '\n stroke-dasharray: 1000;\n stroke-dashoffset: 0;\n stroke-dashoffset: -100;\n -webkit-animation: ', + ' 0.9s 0.35s ease-in-out forwards;\n animation: ', + ' 0.9s 0.35s ease-in-out forwards;\n', + ] + )), + dashCheck, + dashCheck +) +function AnimatedConfirmation() { + var theme = useTheme() + return jsxRuntime.jsx( + Wrapper$1, + __assign( + { className: 'w4rAnimated_checkmark' }, + { + children: jsxRuntime.jsxs( + 'svg', + __assign( + { version: '1.1', xmlns: 'http://www.w3.org/2000/svg', viewBox: '0 0 130.2 130.2' }, + { + children: [ + jsxRuntime.jsx( + Circle, + { + className: 'path circle', + fill: 'none', + stroke: theme.green1, + strokeWidth: '6', + strokeMiterlimit: '10', + cx: '65.1', + cy: '65.1', + r: '62.1', + }, + void 0 + ), + jsxRuntime.jsx( + PolyLine, + { + className: 'path check', + fill: 'none', + stroke: theme.green1, + strokeWidth: '6', + strokeLinecap: 'round', + strokeMiterlimit: '10', + points: '100.2,40.2 51.5,88.8 29.8,67.5 ', + }, + void 0 + ), + ], + } + ), + void 0 + ), + } + ), + void 0 + ) +} +var templateObject_1$d, templateObject_2$6, templateObject_3$4, templateObject_4$3, templateObject_5$3 + +var Wrapper = styled__default['default'].div( + templateObject_1$c || + (templateObject_1$c = __makeTemplateObject( + ['\n width: 100%;\n padding: 1rem;\n'], + ['\n width: 100%;\n padding: 1rem;\n'] + )) +) +var Section = styled__default['default'](AutoColumn)( + templateObject_2$5 || (templateObject_2$5 = __makeTemplateObject(['\n padding: ', ';\n'], ['\n padding: ', ';\n'])), + function (_a) { + var inline = _a.inline + return inline ? '0' : '0' + } +) +var BottomSection = styled__default['default'](Section)( + templateObject_3$3 || + (templateObject_3$3 = __makeTemplateObject( + ['\n border-bottom-left-radius: 20px;\n border-bottom-right-radius: 20px;\n'], + ['\n border-bottom-left-radius: 20px;\n border-bottom-right-radius: 20px;\n'] + )) +) +var ConfirmedIcon = styled__default['default'](ColumnCenter)( + templateObject_4$2 || (templateObject_4$2 = __makeTemplateObject(['\n padding: ', ';\n'], ['\n padding: ', ';\n'])), + function (_a) { + var inline = _a.inline + return inline ? '20px 0' : '32px 0;' + } +) +var StyledLogo = styled__default['default'].img( + templateObject_5$2 || + (templateObject_5$2 = __makeTemplateObject( + ['\n height: 16px;\n width: 16px;\n margin-left: 6px;\n'], + ['\n height: 16px;\n width: 16px;\n margin-left: 6px;\n'] + )) +) +function ConfirmationPendingContent(_a) { + var onDismiss = _a.onDismiss, + pendingText = _a.pendingText, + inline = _a.inline + return jsxRuntime.jsx( + Wrapper, + { + children: jsxRuntime.jsxs( + AutoColumn, + __assign( + { gap: 'md' }, + { + children: [ + !inline && + jsxRuntime.jsxs( + RowBetween, + { + children: [ + jsxRuntime.jsx('div', {}, void 0), + jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0), + ], + }, + void 0 + ), + jsxRuntime.jsx( + ConfirmedIcon, + __assign( + { inline }, + { + children: jsxRuntime.jsx( + CustomLightSpinner, + { src: Circle$1, alt: 'loader', size: inline ? '40px' : '90px' }, + void 0 + ), + } + ), + void 0 + ), + jsxRuntime.jsxs( + AutoColumn, + __assign( + { gap: '12px', justify: 'center' }, + { + children: [ + jsxRuntime.jsx( + rebass.Text, + __assign( + { fontWeight: 500, fontSize: 20, textAlign: 'center' }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'Waiting For Confirmation' }, void 0) } + ), + void 0 + ), + jsxRuntime.jsx( + rebass.Text, + __assign({ fontWeight: 400, fontSize: 16, textAlign: 'center' }, { children: pendingText }), + void 0 + ), + jsxRuntime.jsx( + rebass.Text, + __assign( + { + fontWeight: 500, + fontSize: 14, + color: '#565A69', + textAlign: 'center', + marginBottom: '12px', + }, + { + children: jsxRuntime.jsx( + macro.Trans, + { children: 'Confirm this transaction in your wallet' }, + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + }, + void 0 + ) +} +function TransactionSubmittedContent(_a) { + var _b + var onDismiss = _a.onDismiss, + chainId = _a.chainId, + hash = _a.hash, + currencyToAdd = _a.currencyToAdd, + inline = _a.inline + var theme = React.useContext(styled.ThemeContext) + var library = useActiveWeb3React().library + var _c = useAddTokenToMetamask(currencyToAdd), + addToken = _c.addToken, + success = _c.success + return jsxRuntime.jsx( + Wrapper, + { + children: jsxRuntime.jsxs( + Section, + __assign( + { inline }, + { + children: [ + !inline && + jsxRuntime.jsxs( + RowBetween, + { + children: [ + jsxRuntime.jsx('div', {}, void 0), + jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0), + ], + }, + void 0 + ), + jsxRuntime.jsx( + ConfirmedIcon, + __assign( + { inline }, + { + children: jsxRuntime.jsx( + reactFeather.ArrowUpCircle, + { strokeWidth: 0.5, size: inline ? '40px' : '90px', color: theme.primary1 }, + void 0 + ), + } + ), + void 0 + ), + jsxRuntime.jsxs( + AutoColumn, + __assign( + { gap: '12px', justify: 'center' }, + { + children: [ + jsxRuntime.jsx( + rebass.Text, + __assign( + { fontWeight: 500, fontSize: 20, textAlign: 'center' }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'Transaction Submitted' }, void 0) } + ), + void 0 + ), + chainId && + hash && + jsxRuntime.jsx( + ExternalLink, + __assign( + { href: getExplorerLink(chainId, hash, ExplorerDataType.TRANSACTION) }, + { + children: jsxRuntime.jsx( + rebass.Text, + __assign( + { fontWeight: 500, fontSize: 14, color: theme.primary1 }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'View on Explorer' }, void 0) } + ), + void 0 + ), + } + ), + void 0 + ), + currencyToAdd && + ((_b = library === null || library === void 0 ? void 0 : library.provider) === null || + _b === void 0 + ? void 0 + : _b.isMetaMask) && + jsxRuntime.jsx( + ButtonLight, + __assign( + { mt: '12px', padding: '6px 12px', width: 'fit-content', onClick: addToken }, + { + children: !success + ? jsxRuntime.jsx( + RowFixed, + { + children: jsxRuntime.jsxs( + macro.Trans, + { + children: [ + 'Add ', + currencyToAdd.symbol, + ' to Metamask ', + jsxRuntime.jsx(StyledLogo, { src: MetaMaskLogo }, void 0), + ], + }, + void 0 + ), + }, + void 0 + ) + : jsxRuntime.jsxs( + RowFixed, + { + children: [ + jsxRuntime.jsxs( + macro.Trans, + { children: ['Added ', currencyToAdd.symbol, ' '] }, + void 0 + ), + jsxRuntime.jsx( + reactFeather.CheckCircle, + { size: '16px', stroke: theme.green1, style: { marginLeft: '6px' } }, + void 0 + ), + ], + }, + void 0 + ), + } + ), + void 0 + ), + jsxRuntime.jsx( + ButtonPrimary, + __assign( + { onClick: onDismiss, style: { margin: '20px 0 0 0' } }, + { + children: jsxRuntime.jsx( + rebass.Text, + __assign( + { fontWeight: 500, fontSize: 20 }, + { + children: inline + ? jsxRuntime.jsx(macro.Trans, { children: 'Return' }, void 0) + : jsxRuntime.jsx(macro.Trans, { children: 'Close' }, void 0), + } + ), + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + }, + void 0 + ) +} +function ConfirmationModalContent(_a) { + var title = _a.title, + bottomContent = _a.bottomContent, + onDismiss = _a.onDismiss, + topContent = _a.topContent + return jsxRuntime.jsxs( + Wrapper, + { + children: [ + jsxRuntime.jsxs( + Section, + { + children: [ + jsxRuntime.jsxs( + RowBetween, + { + children: [ + jsxRuntime.jsx( + rebass.Text, + __assign({ fontWeight: 500, fontSize: 16 }, { children: title }), + void 0 + ), + jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0), + ], + }, + void 0 + ), + topContent(), + ], + }, + void 0 + ), + bottomContent && + jsxRuntime.jsx(BottomSection, __assign({ gap: '12px' }, { children: bottomContent() }), void 0), + ], + }, + void 0 + ) +} +function TransactionErrorContent(_a) { + var message = _a.message, + onDismiss = _a.onDismiss + var theme = React.useContext(styled.ThemeContext) + return jsxRuntime.jsxs( + Wrapper, + { + children: [ + jsxRuntime.jsxs( + Section, + { + children: [ + jsxRuntime.jsxs( + RowBetween, + { + children: [ + jsxRuntime.jsx( + rebass.Text, + __assign( + { fontWeight: 500, fontSize: 20 }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'Error' }, void 0) } + ), + void 0 + ), + jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0), + ], + }, + void 0 + ), + jsxRuntime.jsxs( + AutoColumn, + __assign( + { style: { marginTop: 20, padding: '2rem 0' }, gap: '24px', justify: 'center' }, + { + children: [ + jsxRuntime.jsx( + reactFeather.AlertTriangle, + { color: theme.red1, style: { strokeWidth: 1.5 }, size: 64 }, + void 0 + ), + jsxRuntime.jsx( + rebass.Text, + __assign( + { + fontWeight: 500, + fontSize: 16, + color: theme.red1, + style: { textAlign: 'center', width: '85%', wordBreak: 'break-word' }, + }, + { children: message } + ), + void 0 + ), + ], + } + ), + void 0 + ), + ], + }, + void 0 + ), + jsxRuntime.jsx( + BottomSection, + __assign( + { gap: '12px' }, + { + children: jsxRuntime.jsx( + ButtonPrimary, + __assign( + { onClick: onDismiss }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'Dismiss' }, void 0) } + ), + void 0 + ), + } + ), + void 0 + ), + ], + }, + void 0 + ) +} +function L2Content(_a) { + var _b + var onDismiss = _a.onDismiss, + chainId = _a.chainId, + hash = _a.hash, + pendingText = _a.pendingText, + inline = _a.inline + var theme = React.useContext(styled.ThemeContext) + var transaction = useTransaction(hash) + var confirmed = useIsTransactionConfirmed(hash) + var transactionSuccess = + ((_b = transaction === null || transaction === void 0 ? void 0 : transaction.receipt) === null || _b === void 0 + ? void 0 + : _b.status) === 1 + // convert unix time difference to seconds + var secondsToConfirm = (transaction === null || transaction === void 0 ? void 0 : transaction.confirmedTime) + ? (transaction.confirmedTime - transaction.addedTime) / 1000 + : undefined + var info = CHAIN_INFO[chainId] + return jsxRuntime.jsx( + Wrapper, + { + children: jsxRuntime.jsxs( + Section, + __assign( + { inline }, + { + children: [ + !inline && + jsxRuntime.jsxs( + RowBetween, + __assign( + { mb: '16px' }, + { + children: [ + jsxRuntime.jsx( + Badge, + { + children: jsxRuntime.jsxs( + RowFixed, + { + children: [ + jsxRuntime.jsx( + StyledLogo, + { src: info.logoUrl, style: { margin: '0 8px 0 0' } }, + void 0 + ), + info.label, + ], + }, + void 0 + ), + }, + void 0 + ), + jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0), + ], + } + ), + void 0 + ), + jsxRuntime.jsx( + ConfirmedIcon, + __assign( + { inline }, + { + children: confirmed + ? transactionSuccess + ? // + jsxRuntime.jsx(AnimatedConfirmation, {}, void 0) + : jsxRuntime.jsx( + reactFeather.AlertCircle, + { strokeWidth: 1, size: inline ? '40px' : '90px', color: theme.red1 }, + void 0 + ) + : jsxRuntime.jsx( + CustomLightSpinner, + { src: Circle$1, alt: 'loader', size: inline ? '40px' : '90px' }, + void 0 + ), + } + ), + void 0 + ), + jsxRuntime.jsxs( + AutoColumn, + __assign( + { gap: '12px', justify: 'center' }, + { + children: [ + jsxRuntime.jsx( + rebass.Text, + __assign( + { fontWeight: 500, fontSize: 20, textAlign: 'center' }, + { + children: !hash + ? jsxRuntime.jsx(macro.Trans, { children: 'Confirm transaction in wallet' }, void 0) + : !confirmed + ? jsxRuntime.jsx(macro.Trans, { children: 'Transaction Submitted' }, void 0) + : transactionSuccess + ? jsxRuntime.jsx(macro.Trans, { children: 'Success' }, void 0) + : jsxRuntime.jsx(macro.Trans, { children: 'Error' }, void 0), + } + ), + void 0 + ), + jsxRuntime.jsx( + rebass.Text, + __assign( + { fontWeight: 400, fontSize: 16, textAlign: 'center' }, + { + children: transaction + ? jsxRuntime.jsx(TransactionSummary, { info: transaction.info }, void 0) + : pendingText, + } + ), + void 0 + ), + chainId && hash + ? jsxRuntime.jsx( + ExternalLink, + __assign( + { href: getExplorerLink(chainId, hash, ExplorerDataType.TRANSACTION) }, + { + children: jsxRuntime.jsx( + rebass.Text, + __assign( + { fontWeight: 500, fontSize: 14, color: theme.primary1 }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'View on Explorer' }, void 0) } + ), + void 0 + ), + } + ), + void 0 + ) + : jsxRuntime.jsx('div', { style: { height: '17px' } }, void 0), + jsxRuntime.jsx( + rebass.Text, + __assign( + { color: theme.text3, style: { margin: '20px 0 0 0' }, fontSize: '14px' }, + { + children: !secondsToConfirm + ? jsxRuntime.jsx('div', { style: { height: '24px' } }, void 0) + : jsxRuntime.jsxs( + 'div', + { + children: [ + jsxRuntime.jsx(macro.Trans, { children: 'Transaction completed in ' }, void 0), + jsxRuntime.jsxs( + 'span', + __assign( + { style: { fontWeight: 500, marginLeft: '4px', color: theme.text1 } }, + { children: [secondsToConfirm, ' seconds \uD83C\uDF89'] } + ), + void 0 + ), + ], + }, + void 0 + ), + } + ), + void 0 + ), + jsxRuntime.jsx( + ButtonPrimary, + __assign( + { onClick: onDismiss, style: { margin: '4px 0 0 0' } }, + { + children: jsxRuntime.jsx( + rebass.Text, + __assign( + { fontWeight: 500, fontSize: 20 }, + { + children: inline + ? jsxRuntime.jsx(macro.Trans, { children: 'Return' }, void 0) + : jsxRuntime.jsx(macro.Trans, { children: 'Close' }, void 0), + } + ), + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + }, + void 0 + ) +} +function TransactionConfirmationModal(_a) { + var isOpen = _a.isOpen, + onDismiss = _a.onDismiss, + attemptingTxn = _a.attemptingTxn, + hash = _a.hash, + pendingText = _a.pendingText, + content = _a.content, + currencyToAdd = _a.currencyToAdd + var chainId = useActiveWeb3React().chainId + var isL2 = Boolean(chainId && L2_CHAIN_IDS.includes(chainId)) + if (!chainId) return null + // confirmation screen + return jsxRuntime.jsx( + Modal, + __assign( + { isOpen, onDismiss, maxHeight: 90 }, + { + children: + isL2 && (hash || attemptingTxn) + ? jsxRuntime.jsx(L2Content, { chainId, hash, onDismiss, pendingText }, void 0) + : attemptingTxn + ? jsxRuntime.jsx(ConfirmationPendingContent, { onDismiss, pendingText }, void 0) + : hash + ? jsxRuntime.jsx(TransactionSubmittedContent, { chainId, hash, onDismiss, currencyToAdd }, void 0) + : content(), + } + ), + void 0 + ) +} +var templateObject_1$c, templateObject_2$5, templateObject_3$3, templateObject_4$2, templateObject_5$2 + +function SwapModalFooter(_a) { + var onConfirm = _a.onConfirm, + swapErrorMessage = _a.swapErrorMessage, + disabledConfirm = _a.disabledConfirm + return jsxRuntime.jsx( + jsxRuntime.Fragment, + { + children: jsxRuntime.jsxs( + AutoRow, + { + children: [ + jsxRuntime.jsx( + ButtonError, + __assign( + { + onClick: onConfirm, + disabled: disabledConfirm, + style: { margin: '10px 0 0 0' }, + id: 'confirm-swap-or-send', + }, + { + children: jsxRuntime.jsx( + rebass.Text, + __assign( + { fontSize: 20, fontWeight: 500 }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'Confirm Swap' }, void 0) } + ), + void 0 + ), + } + ), + void 0 + ), + swapErrorMessage ? jsxRuntime.jsx(SwapCallbackError, { error: swapErrorMessage }, void 0) : null, + ], + }, + void 0 + ), + }, + void 0 + ) +} + +function computeFiatValuePriceImpact(fiatValueInput, fiatValueOutput) { + if (!fiatValueOutput || !fiatValueInput) return undefined + if (!fiatValueInput.currency.equals(fiatValueOutput.currency)) return undefined + if (JSBI__default['default'].equal(fiatValueInput.quotient, JSBI__default['default'].BigInt(0))) return undefined + var pct = ONE_HUNDRED_PERCENT.subtract(fiatValueOutput.divide(fiatValueInput)) + return new sdkCore.Percent(pct.numerator, pct.denominator) +} + +var ArrowWrapper = styled__default['default'].div( + templateObject_1$b || + (templateObject_1$b = __makeTemplateObject( + [ + '\n padding: 4px;\n border-radius: 12px;\n height: 32px;\n width: 32px;\n position: relative;\n margin-top: -18px;\n margin-bottom: -18px;\n left: calc(50% - 16px);\n display: flex;\n justify-content: center;\n align-items: center;\n background-color: ', + ';\n border: 4px solid;\n border-color: ', + ';\n z-index: 2;\n', + ], + [ + '\n padding: 4px;\n border-radius: 12px;\n height: 32px;\n width: 32px;\n position: relative;\n margin-top: -18px;\n margin-bottom: -18px;\n left: calc(50% - 16px);\n display: flex;\n justify-content: center;\n align-items: center;\n background-color: ', + ';\n border: 4px solid;\n border-color: ', + ';\n z-index: 2;\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.bg1 + }, + function (_a) { + var theme = _a.theme + return theme.bg0 + } +) +function SwapModalHeader(_a) { + var trade = _a.trade, + allowedSlippage = _a.allowedSlippage, + recipient = _a.recipient, + showAcceptChanges = _a.showAcceptChanges, + onAcceptChanges = _a.onAcceptChanges + var theme = React.useContext(styled.ThemeContext) + var _b = __read(React.useState(false), 2), + showInverted = _b[0], + setShowInverted = _b[1] + var fiatValueInput = useUSDCValue(trade.inputAmount) + var fiatValueOutput = useUSDCValue(trade.outputAmount) + return jsxRuntime.jsxs( + AutoColumn, + __assign( + { gap: '4px', style: { marginTop: '1rem' } }, + { + children: [ + jsxRuntime.jsx( + LightCard, + __assign( + { padding: '0.75rem 1rem' }, + { + children: jsxRuntime.jsxs( + AutoColumn, + __assign( + { gap: '8px' }, + { + children: [ + jsxRuntime.jsxs( + RowBetween, + __assign( + { align: 'center' }, + { + children: [ + jsxRuntime.jsx( + RowFixed, + __assign( + { gap: '0px' }, + { + children: jsxRuntime.jsx( + TruncatedText, + __assign( + { + fontSize: 24, + fontWeight: 500, + color: + showAcceptChanges && trade.tradeType === sdkCore.TradeType.EXACT_OUTPUT + ? theme.primary1 + : '', + }, + { children: trade.inputAmount.toSignificant(6) } + ), + void 0 + ), + } + ), + void 0 + ), + jsxRuntime.jsxs( + RowFixed, + __assign( + { gap: '0px' }, + { + children: [ + jsxRuntime.jsx( + CurrencyLogo, + { + currency: trade.inputAmount.currency, + size: '20px', + style: { marginRight: '12px' }, + }, + void 0 + ), + jsxRuntime.jsx( + rebass.Text, + __assign( + { fontSize: 20, fontWeight: 500 }, + { children: trade.inputAmount.currency.symbol } + ), + void 0 + ), + ], + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + jsxRuntime.jsx( + RowBetween, + { children: jsxRuntime.jsx(FiatValue, { fiatValue: fiatValueInput }, void 0) }, + void 0 + ), + ], + } + ), + void 0 + ), + } + ), + void 0 + ), + jsxRuntime.jsx( + ArrowWrapper, + { children: jsxRuntime.jsx(reactFeather.ArrowDown, { size: '16', color: theme.text2 }, void 0) }, + void 0 + ), + jsxRuntime.jsx( + LightCard, + __assign( + { padding: '0.75rem 1rem', style: { marginBottom: '0.25rem' } }, + { + children: jsxRuntime.jsxs( + AutoColumn, + __assign( + { gap: '8px' }, + { + children: [ + jsxRuntime.jsxs( + RowBetween, + __assign( + { align: 'flex-end' }, + { + children: [ + jsxRuntime.jsx( + RowFixed, + __assign( + { gap: '0px' }, + { + children: jsxRuntime.jsx( + TruncatedText, + __assign( + { fontSize: 24, fontWeight: 500 }, + { children: trade.outputAmount.toSignificant(6) } + ), + void 0 + ), + } + ), + void 0 + ), + jsxRuntime.jsxs( + RowFixed, + __assign( + { gap: '0px' }, + { + children: [ + jsxRuntime.jsx( + CurrencyLogo, + { + currency: trade.outputAmount.currency, + size: '20px', + style: { marginRight: '12px' }, + }, + void 0 + ), + jsxRuntime.jsx( + rebass.Text, + __assign( + { fontSize: 20, fontWeight: 500 }, + { children: trade.outputAmount.currency.symbol } + ), + void 0 + ), + ], + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + jsxRuntime.jsx( + RowBetween, + { + children: jsxRuntime.jsx( + ThemedText.Body, + __assign( + { fontSize: 14, color: theme.text3 }, + { + children: jsxRuntime.jsx( + FiatValue, + { + fiatValue: fiatValueOutput, + priceImpact: computeFiatValuePriceImpact(fiatValueInput, fiatValueOutput), + }, + void 0 + ), + } + ), + void 0 + ), + }, + void 0 + ), + ], + } + ), + void 0 + ), + } + ), + void 0 + ), + jsxRuntime.jsx( + RowBetween, + __assign( + { style: { marginTop: '0.25rem', padding: '0 1rem' } }, + { + children: jsxRuntime.jsx( + TradePrice, + { price: trade.executionPrice, showInverted, setShowInverted }, + void 0 + ), + } + ), + void 0 + ), + jsxRuntime.jsx( + LightCard, + __assign( + { style: { padding: '.75rem', marginTop: '0.5rem' } }, + { + children: jsxRuntime.jsx(AdvancedSwapDetails, { trade, allowedSlippage }, void 0), + } + ), + void 0 + ), + showAcceptChanges + ? jsxRuntime.jsx( + SwapShowAcceptChanges, + __assign( + { justify: 'flex-start', gap: '0px' }, + { + children: jsxRuntime.jsxs( + RowBetween, + { + children: [ + jsxRuntime.jsxs( + RowFixed, + { + children: [ + jsxRuntime.jsx( + reactFeather.AlertTriangle, + { size: 20, style: { marginRight: '8px', minWidth: 24 } }, + void 0 + ), + jsxRuntime.jsx( + ThemedText.Main, + __assign( + { color: theme.primary1 }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'Price Updated' }, void 0) } + ), + void 0 + ), + ], + }, + void 0 + ), + jsxRuntime.jsx( + ButtonPrimary, + __assign( + { + style: { + padding: '.5rem', + width: 'fit-content', + fontSize: '0.825rem', + borderRadius: '12px', + }, + onClick: onAcceptChanges, + }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'Accept' }, void 0) } + ), + void 0 + ), + ], + }, + void 0 + ), + } + ), + void 0 + ) + : null, + jsxRuntime.jsx( + AutoColumn, + __assign( + { justify: 'flex-start', gap: 'sm', style: { padding: '.75rem 1rem' } }, + { + children: + trade.tradeType === sdkCore.TradeType.EXACT_INPUT + ? jsxRuntime.jsx( + ThemedText.Italic, + __assign( + { fontWeight: 400, textAlign: 'left', style: { width: '100%' } }, + { + children: jsxRuntime.jsxs( + macro.Trans, + { + children: [ + 'Output is estimated. You will receive at least', + ' ', + jsxRuntime.jsxs( + 'b', + { + children: [ + trade.minimumAmountOut(allowedSlippage).toSignificant(6), + ' ', + trade.outputAmount.currency.symbol, + ], + }, + void 0 + ), + ' ', + 'or the transaction will revert.', + ], + }, + void 0 + ), + } + ), + void 0 + ) + : jsxRuntime.jsx( + ThemedText.Italic, + __assign( + { fontWeight: 400, textAlign: 'left', style: { width: '100%' } }, + { + children: jsxRuntime.jsxs( + macro.Trans, + { + children: [ + 'Input is estimated. You will sell at most', + ' ', + jsxRuntime.jsxs( + 'b', + { + children: [ + trade.maximumAmountIn(allowedSlippage).toSignificant(6), + ' ', + trade.inputAmount.currency.symbol, + ], + }, + void 0 + ), + ' ', + 'or the transaction will revert.', + ], + }, + void 0 + ), + } + ), + void 0 + ), + } + ), + void 0 + ), + recipient !== null + ? jsxRuntime.jsx( + AutoColumn, + __assign( + { justify: 'flex-start', gap: 'sm', style: { padding: '12px 0 0 0px' } }, + { + children: jsxRuntime.jsx( + ThemedText.Main, + { + children: jsxRuntime.jsxs( + macro.Trans, + { + children: [ + 'Output will be sent to', + ' ', + jsxRuntime.jsx( + 'b', + __assign( + { title: recipient }, + { children: isAddress(recipient) ? shortenAddress(recipient) : recipient } + ), + void 0 + ), + ], + }, + void 0 + ), + }, + void 0 + ), + } + ), + void 0 + ) + : null, + ], + } + ), + void 0 + ) +} +var templateObject_1$b + +function ConfirmSwapModal(_a) { + var _b, _c, _d, _e, _f, _g + var trade = _a.trade, + originalTrade = _a.originalTrade, + onAcceptChanges = _a.onAcceptChanges, + allowedSlippage = _a.allowedSlippage, + onConfirm = _a.onConfirm, + onDismiss = _a.onDismiss, + recipient = _a.recipient, + swapErrorMessage = _a.swapErrorMessage, + isOpen = _a.isOpen, + attemptingTxn = _a.attemptingTxn, + txHash = _a.txHash + var showAcceptChanges = React.useMemo( + function () { + return Boolean(trade && originalTrade && tradeMeaningfullyDiffers(trade, originalTrade)) + }, + [originalTrade, trade] + ) + var modalHeader = React.useCallback( + function () { + return trade + ? jsxRuntime.jsx( + SwapModalHeader, + { + trade, + allowedSlippage, + recipient, + showAcceptChanges, + onAcceptChanges, + }, + void 0 + ) + : null + }, + [allowedSlippage, onAcceptChanges, recipient, showAcceptChanges, trade] + ) + var modalBottom = React.useCallback( + function () { + return trade + ? jsxRuntime.jsx( + SwapModalFooter, + { + onConfirm, + trade, + disabledConfirm: showAcceptChanges, + swapErrorMessage, + }, + void 0 + ) + : null + }, + [onConfirm, showAcceptChanges, swapErrorMessage, trade] + ) + // text to show while loading + var pendingText = jsxRuntime.jsxs( + macro.Trans, + { + children: [ + 'Swapping ', + (_b = trade === null || trade === void 0 ? void 0 : trade.inputAmount) === null || _b === void 0 + ? void 0 + : _b.toSignificant(6), + ' ', + (_d = + (_c = trade === null || trade === void 0 ? void 0 : trade.inputAmount) === null || _c === void 0 + ? void 0 + : _c.currency) === null || _d === void 0 + ? void 0 + : _d.symbol, + ' for', + ' ', + (_e = trade === null || trade === void 0 ? void 0 : trade.outputAmount) === null || _e === void 0 + ? void 0 + : _e.toSignificant(6), + ' ', + (_g = + (_f = trade === null || trade === void 0 ? void 0 : trade.outputAmount) === null || _f === void 0 + ? void 0 + : _f.currency) === null || _g === void 0 + ? void 0 + : _g.symbol, + ], + }, + void 0 + ) + var confirmationContent = React.useCallback( + function () { + return swapErrorMessage + ? jsxRuntime.jsx(TransactionErrorContent, { onDismiss, message: swapErrorMessage }, void 0) + : jsxRuntime.jsx( + ConfirmationModalContent, + { + title: jsxRuntime.jsx(macro.Trans, { children: 'Confirm Swap' }, void 0), + onDismiss, + topContent: modalHeader, + bottomContent: modalBottom, + }, + void 0 + ) + }, + [onDismiss, modalBottom, modalHeader, swapErrorMessage] + ) + return jsxRuntime.jsx( + TransactionConfirmationModal, + { + isOpen, + onDismiss, + attemptingTxn, + hash: txHash, + content: confirmationContent, + pendingText, + currencyToAdd: trade === null || trade === void 0 ? void 0 : trade.outputAmount.currency, + }, + void 0 + ) +} + +var _a$5 +var ApplicationModal +;(function (ApplicationModal) { + ApplicationModal[(ApplicationModal['WALLET'] = 0)] = 'WALLET' + ApplicationModal[(ApplicationModal['SETTINGS'] = 1)] = 'SETTINGS' + ApplicationModal[(ApplicationModal['SELF_CLAIM'] = 2)] = 'SELF_CLAIM' + ApplicationModal[(ApplicationModal['ADDRESS_CLAIM'] = 3)] = 'ADDRESS_CLAIM' + ApplicationModal[(ApplicationModal['CLAIM_POPUP'] = 4)] = 'CLAIM_POPUP' + ApplicationModal[(ApplicationModal['MENU'] = 5)] = 'MENU' + ApplicationModal[(ApplicationModal['DELEGATE'] = 6)] = 'DELEGATE' + ApplicationModal[(ApplicationModal['VOTE'] = 7)] = 'VOTE' + ApplicationModal[(ApplicationModal['POOL_OVERVIEW_OPTIONS'] = 8)] = 'POOL_OVERVIEW_OPTIONS' + ApplicationModal[(ApplicationModal['NETWORK_SELECTOR'] = 9)] = 'NETWORK_SELECTOR' + ApplicationModal[(ApplicationModal['PRIVACY_POLICY'] = 10)] = 'PRIVACY_POLICY' +})(ApplicationModal || (ApplicationModal = {})) +var initialState$8 = { + chainId: null, + openModal: null, + popupList: [], +} +var applicationSlice = toolkit.createSlice({ + name: 'application', + initialState: initialState$8, + reducers: { + updateChainId(state, action) { + var chainId = action.payload.chainId + state.chainId = chainId + }, + setOpenModal(state, action) { + state.openModal = action.payload + }, + addPopup(state, _a) { + var _b = _a.payload, + content = _b.content, + key = _b.key, + _c = _b.removeAfterMs, + removeAfterMs = _c === void 0 ? DEFAULT_TXN_DISMISS_MS : _c + state.popupList = ( + key + ? state.popupList.filter(function (popup) { + return popup.key !== key + }) + : state.popupList + ).concat([ + { + key: key || toolkit.nanoid(), + show: true, + content, + removeAfterMs, + }, + ]) + }, + removePopup(state, _a) { + var key = _a.payload.key + state.popupList.forEach(function (p) { + if (p.key === key) { + p.show = false + } + }) + }, + }, +}) +;(_a$5 = applicationSlice.actions), _a$5.updateChainId +var setOpenModal = _a$5.setOpenModal +_a$5.addPopup +_a$5.removePopup +var application = applicationSlice.reducer + +function useModalOpen(modal) { + var openModal = useAppSelector(function (state) { + return state.application.openModal + }) + return openModal === modal +} +function useToggleModal(modal) { + var open = useModalOpen(modal) + var dispatch = useAppDispatch() + return React.useCallback( + function () { + return dispatch(setOpenModal(open ? null : modal)) + }, + [dispatch, modal, open] + ) +} +function useWalletModalToggle() { + return useToggleModal(ApplicationModal.WALLET) +} +function useToggleSettingsMenu() { + return useToggleModal(ApplicationModal.SETTINGS) +} + +var ToggleElement = styled__default['default'].span( + templateObject_1$a || + (templateObject_1$a = __makeTemplateObject( + [ + '\n padding: 0.25rem 0.6rem;\n border-radius: 9px;\n background: ', + ';\n color: ', + ';\n font-size: 14px;\n font-weight: ', + ';\n :hover {\n user-select: ', + ';\n background: ', + ';\n color: ', + ';\n }\n', + ], + [ + '\n padding: 0.25rem 0.6rem;\n border-radius: 9px;\n background: ', + ';\n color: ', + ';\n font-size: 14px;\n font-weight: ', + ';\n :hover {\n user-select: ', + ';\n background: ', + ';\n color: ', + ';\n }\n', + ] + )), + function (_a) { + var theme = _a.theme, + isActive = _a.isActive, + isOnSwitch = _a.isOnSwitch + return isActive ? (isOnSwitch ? theme.primary1 : theme.bg4) : 'none' + }, + function (_a) { + var theme = _a.theme, + isActive = _a.isActive + return isActive ? theme.white : theme.text2 + }, + function (_a) { + var isOnSwitch = _a.isOnSwitch + return isOnSwitch ? '500' : '400' + }, + function (_a) { + var isOnSwitch = _a.isOnSwitch + return isOnSwitch ? 'none' : 'initial' + }, + function (_a) { + var theme = _a.theme, + isActive = _a.isActive, + isOnSwitch = _a.isOnSwitch + return isActive ? (isOnSwitch ? polished.darken(0.05, theme.primary1) : polished.darken(0.05, theme.bg4)) : 'none' + }, + function (_a) { + var theme = _a.theme, + isActive = _a.isActive, + isOnSwitch = _a.isOnSwitch + return isActive ? (isOnSwitch ? theme.white : theme.white) : theme.text3 + } +) +var StyledToggle = styled__default['default'].button( + templateObject_2$4 || + (templateObject_2$4 = __makeTemplateObject( + [ + '\n border-radius: 12px;\n border: none;\n background: ', + ';\n display: flex;\n width: fit-content;\n cursor: pointer;\n outline: none;\n padding: 2px;\n', + ], + [ + '\n border-radius: 12px;\n border: none;\n background: ', + ';\n display: flex;\n width: fit-content;\n cursor: pointer;\n outline: none;\n padding: 2px;\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.bg0 + } +) +function Toggle(_a) { + var id = _a.id, + isActive = _a.isActive, + toggle = _a.toggle, + _b = _a.checked, + checked = _b === void 0 ? jsxRuntime.jsx(macro.Trans, { children: 'On' }, void 0) : _b, + _c = _a.unchecked, + unchecked = _c === void 0 ? jsxRuntime.jsx(macro.Trans, { children: 'Off' }, void 0) : _c + return jsxRuntime.jsxs( + StyledToggle, + __assign( + { id, isActive, onClick: toggle }, + { + children: [ + jsxRuntime.jsx(ToggleElement, __assign({ isActive, isOnSwitch: true }, { children: checked }), void 0), + jsxRuntime.jsx( + ToggleElement, + __assign({ isActive: !isActive, isOnSwitch: false }, { children: unchecked }), + void 0 + ), + ], + } + ), + void 0 + ) +} +var templateObject_1$a, templateObject_2$4 + +var SlippageError +;(function (SlippageError) { + SlippageError['InvalidInput'] = 'InvalidInput' +})(SlippageError || (SlippageError = {})) +var DeadlineError +;(function (DeadlineError) { + DeadlineError['InvalidInput'] = 'InvalidInput' +})(DeadlineError || (DeadlineError = {})) +var FancyButton = styled__default['default'].button( + templateObject_1$9 || + (templateObject_1$9 = __makeTemplateObject( + [ + '\n color: ', + ';\n align-items: center;\n height: 2rem;\n border-radius: 36px;\n font-size: 1rem;\n width: auto;\n min-width: 3.5rem;\n border: 1px solid ', + ';\n outline: none;\n background: ', + ';\n :hover {\n border: 1px solid ', + ';\n }\n :focus {\n border: 1px solid ', + ';\n }\n', + ], + [ + '\n color: ', + ';\n align-items: center;\n height: 2rem;\n border-radius: 36px;\n font-size: 1rem;\n width: auto;\n min-width: 3.5rem;\n border: 1px solid ', + ';\n outline: none;\n background: ', + ';\n :hover {\n border: 1px solid ', + ';\n }\n :focus {\n border: 1px solid ', + ';\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.text1 + }, + function (_a) { + var theme = _a.theme + return theme.bg3 + }, + function (_a) { + var theme = _a.theme + return theme.bg1 + }, + function (_a) { + var theme = _a.theme + return theme.bg4 + }, + function (_a) { + var theme = _a.theme + return theme.primary1 + } +) +var Option = styled__default['default'](FancyButton)( + templateObject_2$3 || + (templateObject_2$3 = __makeTemplateObject( + ['\n margin-right: 8px;\n :hover {\n cursor: pointer;\n }\n background-color: ', ';\n color: ', ';\n'], + ['\n margin-right: 8px;\n :hover {\n cursor: pointer;\n }\n background-color: ', ';\n color: ', ';\n'] + )), + function (_a) { + var active = _a.active, + theme = _a.theme + return active && theme.primary1 + }, + function (_a) { + var active = _a.active, + theme = _a.theme + return active ? theme.white : theme.text1 + } +) +var Input = styled__default['default'].input( + templateObject_3$2 || + (templateObject_3$2 = __makeTemplateObject( + [ + '\n background: ', + ';\n font-size: 16px;\n width: auto;\n outline: none;\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n }\n color: ', + ';\n text-align: right;\n', + ], + [ + '\n background: ', + ';\n font-size: 16px;\n width: auto;\n outline: none;\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n }\n color: ', + ';\n text-align: right;\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.bg1 + }, + function (_a) { + var theme = _a.theme, + color = _a.color + return color === 'red' ? theme.red1 : theme.text1 + } +) +var OptionCustom = styled__default['default'](FancyButton)( + templateObject_4$1 || + (templateObject_4$1 = __makeTemplateObject( + [ + '\n height: 2rem;\n position: relative;\n padding: 0 0.75rem;\n flex: 1;\n border: ', + ';\n :hover {\n border: ', + ';\n }\n\n input {\n width: 100%;\n height: 100%;\n border: 0px;\n border-radius: 2rem;\n }\n', + ], + [ + '\n height: 2rem;\n position: relative;\n padding: 0 0.75rem;\n flex: 1;\n border: ', + ';\n :hover {\n border: ', + ';\n }\n\n input {\n width: 100%;\n height: 100%;\n border: 0px;\n border-radius: 2rem;\n }\n', + ] + )), + function (_a) { + var theme = _a.theme, + active = _a.active, + warning = _a.warning + return active ? '1px solid ' + (warning ? theme.red1 : theme.primary1) : warning && '1px solid ' + theme.red1 + }, + function (_a) { + var theme = _a.theme, + active = _a.active, + warning = _a.warning + return active && '1px solid ' + (warning ? polished.darken(0.1, theme.red1) : polished.darken(0.1, theme.primary1)) + } +) +var SlippageEmojiContainer = styled__default['default'].span( + templateObject_6$1 || + (templateObject_6$1 = __makeTemplateObject(['\n color: #f3841e;\n ', '\n'], ['\n color: #f3841e;\n ', '\n'])), + function (_a) { + var theme = _a.theme + return theme.mediaWidth.upToSmall( + templateObject_5$1 || + (templateObject_5$1 = __makeTemplateObject(['\n display: none;\n '], ['\n display: none;\n '])) + ) + } +) +var THREE_DAYS_IN_SECONDS = + ms__default['default'](templateObject_7$1 || (templateObject_7$1 = __makeTemplateObject(['3 days'], ['3 days']))) / + 1000 +function TransactionSettings(_a) { + var placeholderSlippage = _a.placeholderSlippage + var chainId = useActiveWeb3React().chainId + var theme = React.useContext(styled.ThemeContext) + var userSlippageTolerance = useUserSlippageTolerance() + var setUserSlippageTolerance = useSetUserSlippageTolerance() + var _b = __read(useUserTransactionTTL(), 2), + deadline = _b[0], + setDeadline = _b[1] + var _c = __read(React.useState(''), 2), + slippageInput = _c[0], + setSlippageInput = _c[1] + var _d = __read(React.useState(false), 2), + slippageError = _d[0], + setSlippageError = _d[1] + var _e = __read(React.useState(''), 2), + deadlineInput = _e[0], + setDeadlineInput = _e[1] + var _f = __read(React.useState(false), 2), + deadlineError = _f[0], + setDeadlineError = _f[1] + function parseSlippageInput(value) { + // populate what the user typed and clear the error + setSlippageInput(value) + setSlippageError(false) + if (value.length === 0) { + setUserSlippageTolerance('auto') + } else { + var parsed = Math.floor(Number.parseFloat(value) * 100) + if (!Number.isInteger(parsed) || parsed < 0 || parsed > 5000) { + setUserSlippageTolerance('auto') + if (value !== '.') { + setSlippageError(SlippageError.InvalidInput) + } + } else { + setUserSlippageTolerance(new sdkCore.Percent(parsed, 10000)) + } + } + } + var tooLow = userSlippageTolerance !== 'auto' && userSlippageTolerance.lessThan(new sdkCore.Percent(5, 10000)) + var tooHigh = userSlippageTolerance !== 'auto' && userSlippageTolerance.greaterThan(new sdkCore.Percent(1, 100)) + function parseCustomDeadline(value) { + // populate what the user typed and clear the error + setDeadlineInput(value) + setDeadlineError(false) + if (value.length === 0) { + setDeadline(DEFAULT_DEADLINE_FROM_NOW) + } else { + try { + var parsed = Math.floor(Number.parseFloat(value) * 60) + if (!Number.isInteger(parsed) || parsed < 60 || parsed > THREE_DAYS_IN_SECONDS) { + setDeadlineError(DeadlineError.InvalidInput) + } else { + setDeadline(parsed) + } + } catch (error) { + console.error(error) + setDeadlineError(DeadlineError.InvalidInput) + } + } + } + var showCustomDeadlineRow = Boolean(chainId && !L2_CHAIN_IDS.includes(chainId)) + return jsxRuntime.jsxs( + AutoColumn, + __assign( + { gap: 'md' }, + { + children: [ + jsxRuntime.jsxs( + AutoColumn, + __assign( + { gap: 'sm' }, + { + children: [ + jsxRuntime.jsxs( + RowFixed, + { + children: [ + jsxRuntime.jsx( + ThemedText.Black, + __assign( + { fontWeight: 400, fontSize: 14, color: theme.text2 }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'Slippage tolerance' }, void 0) } + ), + void 0 + ), + jsxRuntime.jsx( + QuestionHelper, + { + text: jsxRuntime.jsx( + macro.Trans, + { + children: + 'Your transaction will revert if the price changes unfavorably by more than this percentage.', + }, + void 0 + ), + }, + void 0 + ), + ], + }, + void 0 + ), + jsxRuntime.jsxs( + RowBetween, + { + children: [ + jsxRuntime.jsx( + Option, + __assign( + { + onClick() { + parseSlippageInput('') + }, + active: userSlippageTolerance === 'auto', + }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'Auto' }, void 0) } + ), + void 0 + ), + jsxRuntime.jsx( + OptionCustom, + __assign( + { active: userSlippageTolerance !== 'auto', warning: !!slippageError, tabIndex: -1 }, + { + children: jsxRuntime.jsxs( + RowBetween, + { + children: [ + tooLow || tooHigh + ? jsxRuntime.jsx( + SlippageEmojiContainer, + { + children: jsxRuntime.jsx( + 'span', + __assign( + { role: 'img', 'aria-label': 'warning' }, + { children: '\u26A0\uFE0F' } + ), + void 0 + ), + }, + void 0 + ) + : null, + jsxRuntime.jsx( + Input, + { + placeholder: placeholderSlippage.toFixed(2), + value: + slippageInput.length > 0 + ? slippageInput + : userSlippageTolerance === 'auto' + ? '' + : userSlippageTolerance.toFixed(2), + onChange(e) { + return parseSlippageInput(e.target.value) + }, + onBlur() { + setSlippageInput('') + setSlippageError(false) + }, + color: slippageError ? 'red' : '', + }, + void 0 + ), + '%', + ], + }, + void 0 + ), + } + ), + void 0 + ), + ], + }, + void 0 + ), + slippageError || tooLow || tooHigh + ? jsxRuntime.jsx( + RowBetween, + __assign( + { + style: { + fontSize: '14px', + paddingTop: '7px', + color: slippageError ? 'red' : '#F3841E', + }, + }, + { + children: slippageError + ? jsxRuntime.jsx(macro.Trans, { children: 'Enter a valid slippage percentage' }, void 0) + : tooLow + ? jsxRuntime.jsx(macro.Trans, { children: 'Your transaction may fail' }, void 0) + : jsxRuntime.jsx(macro.Trans, { children: 'Your transaction may be frontrun' }, void 0), + } + ), + void 0 + ) + : null, + ], + } + ), + void 0 + ), + showCustomDeadlineRow && + jsxRuntime.jsxs( + AutoColumn, + __assign( + { gap: 'sm' }, + { + children: [ + jsxRuntime.jsxs( + RowFixed, + { + children: [ + jsxRuntime.jsx( + ThemedText.Black, + __assign( + { fontSize: 14, fontWeight: 400, color: theme.text2 }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'Transaction deadline' }, void 0) } + ), + void 0 + ), + jsxRuntime.jsx( + QuestionHelper, + { + text: jsxRuntime.jsx( + macro.Trans, + { + children: + 'Your transaction will revert if it is pending for more than this period of time.', + }, + void 0 + ), + }, + void 0 + ), + ], + }, + void 0 + ), + jsxRuntime.jsxs( + RowFixed, + { + children: [ + jsxRuntime.jsx( + OptionCustom, + __assign( + { style: { width: '80px' }, warning: !!deadlineError, tabIndex: -1 }, + { + children: jsxRuntime.jsx( + Input, + { + placeholder: (DEFAULT_DEADLINE_FROM_NOW / 60).toString(), + value: + deadlineInput.length > 0 + ? deadlineInput + : deadline === DEFAULT_DEADLINE_FROM_NOW + ? '' + : (deadline / 60).toString(), + onChange(e) { + return parseCustomDeadline(e.target.value) + }, + onBlur() { + setDeadlineInput('') + setDeadlineError(false) + }, + color: deadlineError ? 'red' : '', + }, + void 0 + ), + } + ), + void 0 + ), + jsxRuntime.jsx( + ThemedText.Body, + __assign( + { style: { paddingLeft: '8px' }, fontSize: 14 }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'minutes' }, void 0) } + ), + void 0 + ), + ], + }, + void 0 + ), + ], + } + ), + void 0 + ), + ], + } + ), + void 0 + ) +} +var templateObject_1$9, + templateObject_2$3, + templateObject_3$2, + templateObject_4$1, + templateObject_5$1, + templateObject_6$1, + templateObject_7$1 + +var StyledMenuIcon = styled__default['default'](reactFeather.Settings)( + templateObject_1$8 || + (templateObject_1$8 = __makeTemplateObject( + ['\n height: 20px;\n width: 20px;\n\n > * {\n stroke: ', ';\n }\n\n :hover {\n opacity: 0.7;\n }\n'], + ['\n height: 20px;\n width: 20px;\n\n > * {\n stroke: ', ';\n }\n\n :hover {\n opacity: 0.7;\n }\n'] + )), + function (_a) { + var theme = _a.theme + return theme.text1 + } +) +var StyledCloseIcon = styled__default['default'](reactFeather.X)( + templateObject_2$2 || + (templateObject_2$2 = __makeTemplateObject( + ['\n height: 20px;\n width: 20px;\n :hover {\n cursor: pointer;\n }\n\n > * {\n stroke: ', ';\n }\n'], + ['\n height: 20px;\n width: 20px;\n :hover {\n cursor: pointer;\n }\n\n > * {\n stroke: ', ';\n }\n'] + )), + function (_a) { + var theme = _a.theme + return theme.text1 + } +) +var StyledMenuButton = styled__default['default'].button( + templateObject_3$1 || + (templateObject_3$1 = __makeTemplateObject( + [ + '\n position: relative;\n width: 100%;\n height: 100%;\n border: none;\n background-color: transparent;\n margin: 0;\n padding: 0;\n border-radius: 0.5rem;\n height: 20px;\n\n :hover,\n :focus {\n cursor: pointer;\n outline: none;\n }\n', + ], + [ + '\n position: relative;\n width: 100%;\n height: 100%;\n border: none;\n background-color: transparent;\n margin: 0;\n padding: 0;\n border-radius: 0.5rem;\n height: 20px;\n\n :hover,\n :focus {\n cursor: pointer;\n outline: none;\n }\n', + ] + )) +) +var EmojiWrapper = styled__default['default'].div( + templateObject_4 || + (templateObject_4 = __makeTemplateObject( + ['\n position: absolute;\n bottom: -6px;\n right: 0px;\n font-size: 14px;\n'], + ['\n position: absolute;\n bottom: -6px;\n right: 0px;\n font-size: 14px;\n'] + )) +) +var StyledMenu = styled__default['default'].div( + templateObject_5 || + (templateObject_5 = __makeTemplateObject( + [ + '\n margin-left: 0.5rem;\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n text-align: left;\n', + ], + [ + '\n margin-left: 0.5rem;\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n text-align: left;\n', + ] + )) +) +var MenuFlyout = styled__default['default'].span( + templateObject_7 || + (templateObject_7 = __makeTemplateObject( + [ + '\n min-width: 20.125rem;\n background-color: ', + ';\n border: 1px solid ', + ';\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 border-radius: 12px;\n display: flex;\n flex-direction: column;\n font-size: 1rem;\n position: absolute;\n top: 2rem;\n right: 0rem;\n z-index: 100;\n\n ', + ';\n\n user-select: none;\n', + ], + [ + '\n min-width: 20.125rem;\n background-color: ', + ';\n border: 1px solid ', + ';\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 border-radius: 12px;\n display: flex;\n flex-direction: column;\n font-size: 1rem;\n position: absolute;\n top: 2rem;\n right: 0rem;\n z-index: 100;\n\n ', + ';\n\n user-select: none;\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.bg2 + }, + function (_a) { + var theme = _a.theme + return theme.bg3 + }, + function (_a) { + var theme = _a.theme + return theme.mediaWidth.upToMedium( + templateObject_6 || + (templateObject_6 = __makeTemplateObject( + ['\n min-width: 18.125rem;\n '], + ['\n min-width: 18.125rem;\n '] + )) + ) + } +) +var Break = styled__default['default'].div( + templateObject_8 || + (templateObject_8 = __makeTemplateObject( + ['\n width: 100%;\n height: 1px;\n background-color: ', ';\n'], + ['\n width: 100%;\n height: 1px;\n background-color: ', ';\n'] + )), + function (_a) { + var theme = _a.theme + return theme.bg3 + } +) +var ModalContentWrapper = styled__default['default'].div( + templateObject_9 || + (templateObject_9 = __makeTemplateObject( + [ + '\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 2rem 0;\n background-color: ', + ';\n border-radius: 20px;\n', + ], + [ + '\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 2rem 0;\n background-color: ', + ';\n border-radius: 20px;\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.bg2 + } +) +function SettingsTab(_a) { + var placeholderSlippage = _a.placeholderSlippage + var chainId = useActiveWeb3React().chainId + var node = React.useRef() + var open = useModalOpen(ApplicationModal.SETTINGS) + var toggle = useToggleSettingsMenu() + var theme = React.useContext(styled.ThemeContext) + var _b = __read(useExpertModeManager(), 2), + expertMode = _b[0], + toggleExpertMode = _b[1] + var _c = __read(useClientSideRouter(), 2), + clientSideRouter = _c[0], + setClientSideRouter = _c[1] + // show confirmation view before turning on + var _d = __read(React.useState(false), 2), + showConfirmation = _d[0], + setShowConfirmation = _d[1] + useOnClickOutside(node, open ? toggle : undefined) + return ( + // https://github.com/DefinitelyTyped/DefinitelyTyped/issues/30451 + jsxRuntime.jsxs( + StyledMenu, + __assign( + { ref: node }, + { + children: [ + jsxRuntime.jsx( + Modal, + __assign( + { + isOpen: showConfirmation, + onDismiss() { + return setShowConfirmation(false) + }, + maxHeight: 100, + }, + { + children: jsxRuntime.jsx( + ModalContentWrapper, + { + children: jsxRuntime.jsxs( + AutoColumn, + __assign( + { gap: 'lg' }, + { + children: [ + jsxRuntime.jsxs( + RowBetween, + __assign( + { style: { padding: '0 2rem' } }, + { + children: [ + jsxRuntime.jsx('div', {}, void 0), + jsxRuntime.jsx( + rebass.Text, + __assign( + { fontWeight: 500, fontSize: 20 }, + { + children: jsxRuntime.jsx( + macro.Trans, + { children: 'Are you sure?' }, + void 0 + ), + } + ), + void 0 + ), + jsxRuntime.jsx( + StyledCloseIcon, + { + onClick() { + return setShowConfirmation(false) + }, + }, + void 0 + ), + ], + } + ), + void 0 + ), + jsxRuntime.jsx(Break, {}, void 0), + jsxRuntime.jsxs( + AutoColumn, + __assign( + { gap: 'lg', style: { padding: '0 2rem' } }, + { + children: [ + jsxRuntime.jsx( + rebass.Text, + __assign( + { fontWeight: 500, fontSize: 20 }, + { + children: jsxRuntime.jsx( + macro.Trans, + { + children: + 'Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.', + }, + void 0 + ), + } + ), + void 0 + ), + jsxRuntime.jsx( + rebass.Text, + __assign( + { fontWeight: 600, fontSize: 20 }, + { + children: jsxRuntime.jsx( + macro.Trans, + { children: 'ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.' }, + void 0 + ), + } + ), + void 0 + ), + jsxRuntime.jsx( + ButtonError, + __assign( + { + error: true, + padding: '12px', + onClick() { + var confirmWord = macro.t( + templateObject_10 || + (templateObject_10 = __makeTemplateObject(['confirm'], ['confirm'])) + ) + if ( + window.prompt( + macro.t( + templateObject_11 || + (templateObject_11 = __makeTemplateObject( + ['Please type the word "', '" to enable expert mode.'], + ['Please type the word "', '" to enable expert mode.'] + )), + confirmWord + ) + ) === confirmWord + ) { + toggleExpertMode() + setShowConfirmation(false) + } + }, + }, + { + children: jsxRuntime.jsx( + rebass.Text, + __assign( + { fontSize: 20, fontWeight: 500, id: 'confirm-expert-mode' }, + { + children: jsxRuntime.jsx( + macro.Trans, + { children: 'Turn On Expert Mode' }, + void 0 + ), + } + ), + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + }, + void 0 + ), + } + ), + void 0 + ), + jsxRuntime.jsxs( + StyledMenuButton, + __assign( + { + onClick: toggle, + id: 'open-settings-dialog-button', + 'aria-label': macro.t( + templateObject_12 || + (templateObject_12 = __makeTemplateObject(['Transaction Settings'], ['Transaction Settings'])) + ), + }, + { + children: [ + jsxRuntime.jsx(StyledMenuIcon, {}, void 0), + expertMode + ? jsxRuntime.jsx( + EmojiWrapper, + { + children: jsxRuntime.jsx( + 'span', + __assign({ role: 'img', 'aria-label': 'wizard-icon' }, { children: '\uD83E\uDDD9' }), + void 0 + ), + }, + void 0 + ) + : null, + ], + } + ), + void 0 + ), + open && + jsxRuntime.jsx( + MenuFlyout, + { + children: jsxRuntime.jsxs( + AutoColumn, + __assign( + { gap: 'md', style: { padding: '1rem' } }, + { + children: [ + jsxRuntime.jsx( + rebass.Text, + __assign( + { fontWeight: 600, fontSize: 14 }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'Transaction Settings' }, void 0) } + ), + void 0 + ), + jsxRuntime.jsx(TransactionSettings, { placeholderSlippage }, void 0), + jsxRuntime.jsx( + rebass.Text, + __assign( + { fontWeight: 600, fontSize: 14 }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'Interface Settings' }, void 0) } + ), + void 0 + ), + chainId && + AUTO_ROUTER_SUPPORTED_CHAINS.includes(chainId) && + jsxRuntime.jsxs( + RowBetween, + { + children: [ + jsxRuntime.jsxs( + RowFixed, + { + children: [ + jsxRuntime.jsx( + ThemedText.Black, + __assign( + { fontWeight: 400, fontSize: 14, color: theme.text2 }, + { + children: jsxRuntime.jsx( + macro.Trans, + { children: 'Auto Router API' }, + void 0 + ), + } + ), + void 0 + ), + jsxRuntime.jsx( + QuestionHelper, + { + text: jsxRuntime.jsx( + macro.Trans, + { children: 'Use the Uniswap Labs API to get faster quotes.' }, + void 0 + ), + }, + void 0 + ), + ], + }, + void 0 + ), + jsxRuntime.jsx( + Toggle, + { + id: 'toggle-optimized-router-button', + isActive: !clientSideRouter, + toggle() { + ReactGA__default['default'].event({ + category: 'Routing', + action: clientSideRouter ? 'enable routing API' : 'disable routing API', + }) + setClientSideRouter(!clientSideRouter) + }, + }, + void 0 + ), + ], + }, + void 0 + ), + jsxRuntime.jsxs( + RowBetween, + { + children: [ + jsxRuntime.jsxs( + RowFixed, + { + children: [ + jsxRuntime.jsx( + ThemedText.Black, + __assign( + { fontWeight: 400, fontSize: 14, color: theme.text2 }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'Expert Mode' }, void 0) } + ), + void 0 + ), + jsxRuntime.jsx( + QuestionHelper, + { + text: jsxRuntime.jsx( + macro.Trans, + { + children: + 'Allow high price impact trades and skip the confirm screen. Use at your own risk.', + }, + void 0 + ), + }, + void 0 + ), + ], + }, + void 0 + ), + jsxRuntime.jsx( + Toggle, + { + id: 'toggle-expert-mode-button', + isActive: expertMode, + toggle: expertMode + ? function () { + toggleExpertMode() + setShowConfirmation(false) + } + : function () { + toggle() + setShowConfirmation(true) + }, + }, + void 0 + ), + ], + }, + void 0 + ), + ], + } + ), + void 0 + ), + }, + void 0 + ), + ], + } + ), + void 0 + ) + ) +} +var templateObject_1$8, + templateObject_2$2, + templateObject_3$1, + templateObject_4, + templateObject_5, + templateObject_6, + templateObject_7, + templateObject_8, + templateObject_9, + templateObject_10, + templateObject_11, + templateObject_12 + +var StyledSwapHeader = styled__default['default'].div( + templateObject_1$7 || + (templateObject_1$7 = __makeTemplateObject( + ['\n padding: 1rem 1.25rem 0.5rem 1.25rem;\n width: 100%;\n color: ', ';\n'], + ['\n padding: 1rem 1.25rem 0.5rem 1.25rem;\n width: 100%;\n color: ', ';\n'] + )), + function (_a) { + var theme = _a.theme + return theme.text2 + } +) +function SwapHeader(_a) { + var allowedSlippage = _a.allowedSlippage + return jsxRuntime.jsx( + StyledSwapHeader, + { + children: jsxRuntime.jsxs( + RowBetween, + { + children: [ + jsxRuntime.jsx( + RowFixed, + { + children: jsxRuntime.jsx( + ThemedText.Black, + __assign( + { fontWeight: 500, fontSize: 16, style: { marginRight: '8px' } }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'Swap' }, void 0) } + ), + void 0 + ), + }, + void 0 + ), + jsxRuntime.jsx( + RowFixed, + { children: jsxRuntime.jsx(SettingsTab, { placeholderSlippage: allowedSlippage }, void 0) }, + void 0 + ), + ], + }, + void 0 + ), + }, + void 0 + ) +} +var templateObject_1$7 + +function parsedQueryString(search) { + if (!search) { + // react-router-dom places search string in the hash + var hash = window.location.hash + search = hash.substr(hash.indexOf('?')) + } + return search && search.length > 1 ? qs.parse(search, { parseArrays: false, ignoreQueryPrefix: true }) : {} +} +function useParsedQueryString() { + var search = reactRouterDom.useLocation().search + return React.useMemo( + function () { + return parsedQueryString(search) + }, + [search] + ) +} + +var SUPPORTED_LOCALES = [ + // order as they appear in the language dropdown + 'en-US', + 'af-ZA', + 'ar-SA', + 'ca-ES', + 'cs-CZ', + 'da-DK', + 'de-DE', + 'el-GR', + 'es-ES', + 'fi-FI', + 'fr-FR', + 'he-IL', + 'hu-HU', + 'id-ID', + 'it-IT', + 'ja-JP', + 'ko-KR', + 'nl-NL', + 'no-NO', + 'pl-PL', + 'pt-BR', + 'pt-PT', + 'ro-RO', + 'ru-RU', + 'sr-SP', + 'sv-SE', + 'sw-TZ', + 'tr-TR', + 'uk-UA', + 'vi-VN', + 'zh-CN', + 'zh-TW', +] +var DEFAULT_LOCALE = 'en-US' +var LOCALE_LABEL = { + 'af-ZA': 'Afrikaans', + 'ar-SA': 'العربية', + 'ca-ES': 'Català', + 'cs-CZ': 'čeština', + 'da-DK': 'dansk', + 'de-DE': 'Deutsch', + 'el-GR': 'ελληνικά', + 'en-US': 'English', + 'es-ES': 'Español', + 'fi-FI': 'suomi', + 'fr-FR': 'français', + 'he-IL': 'עִברִית', + 'hu-HU': 'Magyar', + 'id-ID': 'bahasa Indonesia', + 'it-IT': 'Italiano', + 'ja-JP': '日本語', + 'ko-KR': '한국어', + 'nl-NL': 'Nederlands', + 'no-NO': 'norsk', + 'pl-PL': 'Polskie', + 'pt-BR': 'português', + 'pt-PT': 'português', + 'ro-RO': 'Română', + 'ru-RU': 'русский', + 'sr-SP': 'Српски', + 'sv-SE': 'svenska', + 'sw-TZ': 'Kiswahili', + 'tr-TR': 'Türkçe', + 'uk-UA': 'Український', + 'vi-VN': 'Tiếng Việt', + 'zh-CN': '简体中文', + 'zh-TW': '繁体中文', + pseudo: 'ƥƨèúδô', +} + +var Field$3 +;(function (Field) { + Field['LIQUIDITY_PERCENT'] = 'LIQUIDITY_PERCENT' + Field['LIQUIDITY'] = 'LIQUIDITY' + Field['CURRENCY_A'] = 'CURRENCY_A' + Field['CURRENCY_B'] = 'CURRENCY_B' +})(Field$3 || (Field$3 = {})) +var typeInput$3 = toolkit.createAction('burn/typeInputBurn') + +var initialState$7 = { + independentField: Field$3.LIQUIDITY_PERCENT, + typedValue: '0', +} +var burn = toolkit.createReducer(initialState$7, function (builder) { + return builder.addCase(typeInput$3, function (state, _a) { + var _b = _a.payload, + field = _b.field, + typedValue = _b.typedValue + return __assign(__assign({}, state), { independentField: field, typedValue }) + }) +}) + +var selectPercent = toolkit.createAction('burnV3/selectBurnPercent') + +var initialState$6 = { + percent: 0, +} +var burnV3 = toolkit.createReducer(initialState$6, function (builder) { + return builder.addCase(selectPercent, function (state, _a) { + var percent = _a.payload.percent + return __assign(__assign({}, state), { percent }) + }) +}) + +var _a$4 +// List of supported subgraphs. Note that the app currently only support one active subgraph at a time +var CHAIN_SUBGRAPH_URL = + ((_a$4 = {}), + (_a$4[SupportedChainId.MAINNET] = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3'), + (_a$4[SupportedChainId.RINKEBY] = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3'), + (_a$4[SupportedChainId.ARBITRUM_ONE] = 'https://api.thegraph.com/subgraphs/name/ianlapham/arbitrum-minimal'), + (_a$4[SupportedChainId.OPTIMISM] = 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-optimism-dev'), + (_a$4[SupportedChainId.POLYGON] = 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-v3-polygon'), + _a$4) +var api = react.createApi({ + reducerPath: 'dataApi', + baseQuery: graphqlRequestBaseQuery(), + endpoints(builder) { + return { + allV3Ticks: builder.query({ + query(_a) { + var poolAddress = _a.poolAddress, + _b = _a.skip, + skip = _b === void 0 ? 0 : _b + return { + document: graphqlRequest.gql( + templateObject_1$6 || + (templateObject_1$6 = __makeTemplateObject( + [ + '\n query allV3Ticks($poolAddress: String!, $skip: Int!) {\n ticks(first: 1000, skip: $skip, where: { poolAddress: $poolAddress }, orderBy: tickIdx) {\n tick: tickIdx\n liquidityNet\n price0\n price1\n }\n }\n ', + ], + [ + '\n query allV3Ticks($poolAddress: String!, $skip: Int!) {\n ticks(first: 1000, skip: $skip, where: { poolAddress: $poolAddress }, orderBy: tickIdx) {\n tick: tickIdx\n liquidityNet\n price0\n price1\n }\n }\n ', + ] + )) + ), + variables: { + poolAddress, + skip, + }, + } + }, + }), + feeTierDistribution: builder.query({ + query(_a) { + var token0 = _a.token0, + token1 = _a.token1 + return { + document: graphqlRequest.gql( + templateObject_2$1 || + (templateObject_2$1 = __makeTemplateObject( + [ + '\n query feeTierDistribution($token0: String!, $token1: String!) {\n _meta {\n block {\n number\n }\n }\n asToken0: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token0, token1: $token1 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n asToken1: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token1, token1: $token0 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n }\n ', + ], + [ + '\n query feeTierDistribution($token0: String!, $token1: String!) {\n _meta {\n block {\n number\n }\n }\n asToken0: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token0, token1: $token1 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n asToken1: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token1, token1: $token0 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n }\n ', + ] + )) + ), + variables: { + token0, + token1, + }, + } + }, + }), + } + }, +}) +// Graphql query client wrapper that builds a dynamic url based on chain id +function graphqlRequestBaseQuery() { + var _this = this + return function (_a, _b) { + var document = _a.document, + variables = _a.variables + var getState = _b.getState + return __awaiter(_this, void 0, void 0, function () { + var chainId, subgraphUrl, error_1, name_1, message, stack, request, response + var _c + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + chainId = getState().application.chainId + subgraphUrl = chainId ? CHAIN_SUBGRAPH_URL[chainId] : undefined + if (!subgraphUrl) { + return [ + 2 /*return*/, + { + error: { + name: 'UnsupportedChainId', + message: 'Subgraph queries against ChainId ' + chainId + ' are not supported.', + stack: '', + }, + }, + ] + } + _c = {} + return [4 /*yield*/, new graphqlRequest.GraphQLClient(subgraphUrl).request(document, variables)] + case 1: + return [2 /*return*/, ((_c.data = _d.sent()), (_c.meta = {}), _c)] + case 2: + error_1 = _d.sent() + if (error_1 instanceof graphqlRequest.ClientError) { + ;(name_1 = error_1.name), + (message = error_1.message), + (stack = error_1.stack), + (request = error_1.request), + (response = error_1.response) + return [ + 2 /*return*/, + { + error: { name: name_1, message, stack }, + meta: { request, response }, + }, + ] + } + throw error_1 + case 3: + return [2 /*return*/] + } + }) + }) + } +} +var templateObject_1$6, templateObject_2$1 + +// fired once when the app reloads but before the app renders +// allows any updates to be applied to store data loaded from localStorage +var updateVersion = toolkit.createAction('global/updateVersion') + +var NEW_LIST_STATE = { + error: null, + current: null, + loadingRequestId: null, + pendingUpdate: null, +} +var initialState$5 = { + lastInitializedDefaultListOfLists: DEFAULT_LIST_OF_LISTS, + byUrl: __assign( + {}, + DEFAULT_LIST_OF_LISTS.reduce(function (memo, listUrl) { + memo[listUrl] = NEW_LIST_STATE + return memo + }, {}) + ), + activeListUrls: DEFAULT_ACTIVE_LIST_URLS, +} +var lists = toolkit.createReducer(initialState$5, function (builder) { + return builder + .addCase(fetchTokenList.pending, function (state, _a) { + var _b, _c, _d, _e + var _f = _a.payload, + requestId = _f.requestId, + url = _f.url + var current = + (_c = (_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.current) !== null && _c !== void 0 + ? _c + : null + var pendingUpdate = + (_e = (_d = state.byUrl[url]) === null || _d === void 0 ? void 0 : _d.pendingUpdate) !== null && _e !== void 0 + ? _e + : null + state.byUrl[url] = { + current, + pendingUpdate, + loadingRequestId: requestId, + error: null, + } + }) + .addCase(fetchTokenList.fulfilled, function (state, _a) { + var _b, _c, _d + var _e = _a.payload, + requestId = _e.requestId, + tokenList = _e.tokenList, + url = _e.url + var current = (_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.current + var loadingRequestId = (_c = state.byUrl[url]) === null || _c === void 0 ? void 0 : _c.loadingRequestId + // no-op if update does nothing + if (current) { + var upgradeType = tokenLists.getVersionUpgrade(current.version, tokenList.version) + if (upgradeType === tokenLists.VersionUpgrade.NONE) return + if (loadingRequestId === null || loadingRequestId === requestId) { + state.byUrl[url] = { + current, + pendingUpdate: tokenList, + loadingRequestId: null, + error: null, + } + } + } else { + // activate if on default active + if (DEFAULT_ACTIVE_LIST_URLS.includes(url)) { + ;(_d = state.activeListUrls) === null || _d === void 0 ? void 0 : _d.push(url) + } + state.byUrl[url] = { + current: tokenList, + pendingUpdate: null, + loadingRequestId: null, + error: null, + } + } + }) + .addCase(fetchTokenList.rejected, function (state, _a) { + var _b + var _c = _a.payload, + url = _c.url, + requestId = _c.requestId, + errorMessage = _c.errorMessage + if (((_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.loadingRequestId) !== requestId) { + // no-op since it's not the latest request + return + } + state.byUrl[url] = { + current: state.byUrl[url].current ? state.byUrl[url].current : null, + pendingUpdate: null, + loadingRequestId: null, + error: errorMessage, + } + }) + .addCase(addList, function (state, _a) { + var url = _a.payload + if (!state.byUrl[url]) { + state.byUrl[url] = NEW_LIST_STATE + } + }) + .addCase(removeList, function (state, _a) { + var url = _a.payload + if (state.byUrl[url]) { + delete state.byUrl[url] + } + // remove list from active urls if needed + if (state.activeListUrls && state.activeListUrls.includes(url)) { + state.activeListUrls = state.activeListUrls.filter(function (u) { + return u !== url + }) + } + }) + .addCase(enableList, function (state, _a) { + var url = _a.payload + if (!state.byUrl[url]) { + state.byUrl[url] = NEW_LIST_STATE + } + if (state.activeListUrls && !state.activeListUrls.includes(url)) { + state.activeListUrls.push(url) + } + if (!state.activeListUrls) { + state.activeListUrls = [url] + } + }) + .addCase(disableList, function (state, _a) { + var url = _a.payload + if (state.activeListUrls && state.activeListUrls.includes(url)) { + state.activeListUrls = state.activeListUrls.filter(function (u) { + return u !== url + }) + } + }) + .addCase(acceptListUpdate, function (state, _a) { + var _b + var url = _a.payload + if (!((_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.pendingUpdate)) { + throw new Error('accept list update called without pending update') + } + state.byUrl[url] = __assign(__assign({}, state.byUrl[url]), { + current: state.byUrl[url].pendingUpdate, + pendingUpdate: null, + }) + }) + .addCase(updateVersion, function (state) { + // state loaded from localStorage, but new lists have never been initialized + if (!state.lastInitializedDefaultListOfLists) { + state.byUrl = initialState$5.byUrl + state.activeListUrls = initialState$5.activeListUrls + } else if (state.lastInitializedDefaultListOfLists) { + var lastInitializedSet_1 = state.lastInitializedDefaultListOfLists.reduce(function (s, l) { + return s.add(l) + }, new Set()) + var newListOfListsSet_1 = DEFAULT_LIST_OF_LISTS.reduce(function (s, l) { + return s.add(l) + }, new Set()) + DEFAULT_LIST_OF_LISTS.forEach(function (listUrl) { + if (!lastInitializedSet_1.has(listUrl)) { + state.byUrl[listUrl] = NEW_LIST_STATE + } + }) + state.lastInitializedDefaultListOfLists.forEach(function (listUrl) { + if (!newListOfListsSet_1.has(listUrl)) { + delete state.byUrl[listUrl] + } + }) + } + state.lastInitializedDefaultListOfLists = DEFAULT_LIST_OF_LISTS + // if no active lists, activate defaults + if (!state.activeListUrls) { + state.activeListUrls = DEFAULT_ACTIVE_LIST_URLS + // for each list on default list, initialize if needed + DEFAULT_ACTIVE_LIST_URLS.map(function (listUrl) { + if (!state.byUrl[listUrl]) { + state.byUrl[listUrl] = NEW_LIST_STATE + } + return true + }) + } + }) +}) + +/** + * Converts a filter to the corresponding string key + * @param filter the filter to convert + */ +function filterToKey(filter) { + var _a, _b, _c, _d + return ( + ((_a = filter.address) !== null && _a !== void 0 ? _a : '') + + ':' + + ((_d = + (_c = + (_b = filter.topics) === null || _b === void 0 + ? void 0 + : _b.map(function (topic) { + return topic ? (Array.isArray(topic) ? topic.join(';') : topic) : '\0' + })) === null || _c === void 0 + ? void 0 + : _c.join('-')) !== null && _d !== void 0 + ? _d + : '') + ) +} + +var _a$3 +var slice = toolkit.createSlice({ + name: 'logs', + initialState: {}, + reducers: { + addListener(state, _a) { + var _b = _a.payload, + chainId = _b.chainId, + filter = _b.filter + if (!state[chainId]) state[chainId] = {} + var key = filterToKey(filter) + if (!state[chainId][key]) + state[chainId][key] = { + listeners: 1, + } + else state[chainId][key].listeners++ + }, + fetchingLogs(state, _a) { + var e_1, _b + var _c = _a.payload, + chainId = _c.chainId, + filters = _c.filters, + blockNumber = _c.blockNumber + if (!state[chainId]) return + try { + for ( + var filters_1 = __values(filters), filters_1_1 = filters_1.next(); + !filters_1_1.done; + filters_1_1 = filters_1.next() + ) { + var filter = filters_1_1.value + var key = filterToKey(filter) + if (!state[chainId][key]) continue + state[chainId][key].fetchingBlockNumber = blockNumber + } + } catch (e_1_1) { + e_1 = { error: e_1_1 } + } finally { + try { + if (filters_1_1 && !filters_1_1.done && (_b = filters_1.return)) _b.call(filters_1) + } finally { + if (e_1) throw e_1.error + } + } + }, + fetchedLogs(state, _a) { + var _b = _a.payload, + chainId = _b.chainId, + filter = _b.filter, + results = _b.results + if (!state[chainId]) return + var key = filterToKey(filter) + var fetchState = state[chainId][key] + if (!fetchState || (fetchState.results && fetchState.results.blockNumber > results.blockNumber)) return + fetchState.results = results + }, + fetchedLogsError(state, _a) { + var _b = _a.payload, + chainId = _b.chainId, + filter = _b.filter, + blockNumber = _b.blockNumber + if (!state[chainId]) return + var key = filterToKey(filter) + var fetchState = state[chainId][key] + if (!fetchState || (fetchState.results && fetchState.results.blockNumber > blockNumber)) return + fetchState.results = { + blockNumber, + error: true, + } + }, + removeListener(state, _a) { + var _b = _a.payload, + chainId = _b.chainId, + filter = _b.filter + if (!state[chainId]) return + var key = filterToKey(filter) + if (!state[chainId][key]) return + state[chainId][key].listeners-- + }, + }, +}) +var logs = slice.reducer +;(_a$3 = slice.actions), _a$3.addListener +_a$3.removeListener +_a$3.fetchedLogs +_a$3.fetchedLogsError +_a$3.fetchingLogs + +var Field$2 +;(function (Field) { + Field['CURRENCY_A'] = 'CURRENCY_A' + Field['CURRENCY_B'] = 'CURRENCY_B' +})(Field$2 || (Field$2 = {})) +var typeInput$2 = toolkit.createAction('mint/typeInputMint') +var resetMintState$1 = toolkit.createAction('mint/resetMintState') + +var initialState$4 = { + independentField: Field$2.CURRENCY_A, + typedValue: '', + otherTypedValue: '', + startPriceTypedValue: '', + leftRangeTypedValue: '', + rightRangeTypedValue: '', +} +var mint = toolkit.createReducer(initialState$4, function (builder) { + return builder + .addCase(resetMintState$1, function () { + return initialState$4 + }) + .addCase(typeInput$2, function (state, _a) { + var _b = _a.payload, + field = _b.field, + typedValue = _b.typedValue, + noLiquidity = _b.noLiquidity + if (noLiquidity) { + // they're typing into the field they've last typed in + if (field === state.independentField) { + return __assign(__assign({}, state), { independentField: field, typedValue }) + } + // they're typing into a new field, store the other value + else { + return __assign(__assign({}, state), { + independentField: field, + typedValue, + otherTypedValue: state.typedValue, + }) + } + } else { + return __assign(__assign({}, state), { independentField: field, typedValue, otherTypedValue: '' }) + } + }) +}) + +var Field$1 +;(function (Field) { + Field['CURRENCY_A'] = 'CURRENCY_A' + Field['CURRENCY_B'] = 'CURRENCY_B' +})(Field$1 || (Field$1 = {})) +var Bound +;(function (Bound) { + Bound['LOWER'] = 'LOWER' + Bound['UPPER'] = 'UPPER' +})(Bound || (Bound = {})) +var typeInput$1 = toolkit.createAction('mintV3/typeInputMint') +var typeStartPriceInput = toolkit.createAction('mintV3/typeStartPriceInput') +var typeLeftRangeInput = toolkit.createAction('mintV3/typeLeftRangeInput') +var typeRightRangeInput = toolkit.createAction('mintV3/typeRightRangeInput') +var resetMintState = toolkit.createAction('mintV3/resetMintState') +var setFullRange = toolkit.createAction('mintV3/setFullRange') + +var initialState$3 = { + independentField: Field$1.CURRENCY_A, + typedValue: '', + startPriceTypedValue: '', + leftRangeTypedValue: '', + rightRangeTypedValue: '', +} +var mintV3 = toolkit.createReducer(initialState$3, function (builder) { + return builder + .addCase(resetMintState, function () { + return initialState$3 + }) + .addCase(setFullRange, function (state) { + return __assign(__assign({}, state), { leftRangeTypedValue: true, rightRangeTypedValue: true }) + }) + .addCase(typeStartPriceInput, function (state, _a) { + var typedValue = _a.payload.typedValue + return __assign(__assign({}, state), { startPriceTypedValue: typedValue }) + }) + .addCase(typeLeftRangeInput, function (state, _a) { + var typedValue = _a.payload.typedValue + return __assign(__assign({}, state), { leftRangeTypedValue: typedValue }) + }) + .addCase(typeRightRangeInput, function (state, _a) { + var typedValue = _a.payload.typedValue + return __assign(__assign({}, state), { rightRangeTypedValue: typedValue }) + }) + .addCase(typeInput$1, function (state, _a) { + var _b = _a.payload, + field = _b.field, + typedValue = _b.typedValue, + noLiquidity = _b.noLiquidity + if (noLiquidity) { + // they're typing into the field they've last typed in + if (field === state.independentField) { + return __assign(__assign({}, state), { independentField: field, typedValue }) + } + // they're typing into a new field, store the other value + else { + return __assign(__assign({}, state), { independentField: field, typedValue }) + } + } else { + return __assign(__assign({}, state), { independentField: field, typedValue }) + } + }) +}) + +var protocols = [routerSdk.Protocol.V2, routerSdk.Protocol.V3] +var DEFAULT_QUERY_PARAMS = { + protocols: protocols + .map(function (p) { + return p.toLowerCase() + }) + .join(','), + // example other params + // forceCrossProtocol: 'true', + // minSplits: '5', +} +function getClientSideQuote(_a) { + var tokenInAddress = _a.tokenInAddress, + tokenInChainId = _a.tokenInChainId, + tokenInDecimals = _a.tokenInDecimals, + tokenInSymbol = _a.tokenInSymbol, + tokenOutAddress = _a.tokenOutAddress, + tokenOutChainId = _a.tokenOutChainId, + tokenOutDecimals = _a.tokenOutDecimals, + tokenOutSymbol = _a.tokenOutSymbol, + amount = _a.amount, + type = _a.type + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + return [ + 4 /*yield*/, + Promise.resolve().then(function () { + return index + }), + ] + case 1: + return [ + 2 /*return*/, + _b.sent().getQuote( + { + type, + chainId: tokenInChainId, + tokenIn: { + address: tokenInAddress, + chainId: tokenInChainId, + decimals: tokenInDecimals, + symbol: tokenInSymbol, + }, + tokenOut: { + address: tokenOutAddress, + chainId: tokenOutChainId, + decimals: tokenOutDecimals, + symbol: tokenOutSymbol, + }, + amount, + }, + { protocols } + ), + ] + } + }) + }) +} +var routingApi = react.createApi({ + reducerPath: 'routingApi', + baseQuery: react.fetchBaseQuery({ + baseUrl: 'https://api.uniswap.org/v1/', + }), + endpoints(build) { + return { + getQuote: build.query({ + queryFn(args, _api, _extraOptions, fetch) { + return __awaiter(this, void 0, void 0, function () { + var tokenInAddress, + tokenInChainId, + tokenOutAddress, + tokenOutChainId, + amount, + useClientSideRouter, + type, + result, + query, + e_1 + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + ;(tokenInAddress = args.tokenInAddress), + (tokenInChainId = args.tokenInChainId), + (tokenOutAddress = args.tokenOutAddress), + (tokenOutChainId = args.tokenOutChainId), + (amount = args.amount), + (useClientSideRouter = args.useClientSideRouter), + (type = args.type) + _a.label = 1 + case 1: + _a.trys.push([1, 6, , 7]) + if (!useClientSideRouter) return [3 /*break*/, 3] + return [4 /*yield*/, getClientSideQuote(args)] + case 2: + result = _a.sent() + return [3 /*break*/, 5] + case 3: + query = qs__default['default'].stringify( + __assign(__assign({}, DEFAULT_QUERY_PARAMS), { + tokenInAddress, + tokenInChainId, + tokenOutAddress, + tokenOutChainId, + amount, + type, + }) + ) + return [4 /*yield*/, fetch('quote?' + query)] + case 4: + result = _a.sent() + _a.label = 5 + case 5: + return [2 /*return*/, { data: result.data }] + case 6: + e_1 = _a.sent() + // TODO: fall back to client-side quoter when auto router fails. + // deprecate 'legacy' v2/v3 routers first. + return [2 /*return*/, { error: e_1 }] + case 7: + return [2 /*return*/] + } + }) + }) + }, + keepUnusedDataFor: ms__default['default']( + templateObject_1$5 || (templateObject_1$5 = __makeTemplateObject(['10s'], ['10s'])) + ), + extraOptions: { + maxRetries: 0, + }, + }), + } + }, +}) +var useGetQuoteQuery = routingApi.useGetQuoteQuery +var templateObject_1$5 + +var Field +;(function (Field) { + Field['INPUT'] = 'INPUT' + Field['OUTPUT'] = 'OUTPUT' +})(Field || (Field = {})) +var selectCurrency = toolkit.createAction('swap/selectCurrency') +var switchCurrencies = toolkit.createAction('swap/switchCurrencies') +var typeInput = toolkit.createAction('swap/typeInput') +var replaceSwapState = toolkit.createAction('swap/replaceSwapState') +var setRecipient = toolkit.createAction('swap/setRecipient') + +var CHAIN_DATA_ABI = [ + { + inputs: [], + name: 'latestAnswer', + outputs: [{ internalType: 'int256', name: '', type: 'int256' }], + stateMutability: 'view', + type: 'function', + }, +] +/** + * Returns the price of 1 gas in WEI for the currently selected network using the chainlink fast gas price oracle + */ +function useGasPrice() { + var _a, _b + var address = useENSAddress('fast-gas-gwei.data.eth').address + var contract = useContract(address !== null && address !== void 0 ? address : undefined, CHAIN_DATA_ABI, false) + var resultStr = + (_b = (_a = useSingleCallResult(contract, 'latestAnswer').result) === null || _a === void 0 ? void 0 : _a[0]) === + null || _b === void 0 + ? void 0 + : _b.toString() + return typeof resultStr === 'string' ? JSBI__default['default'].BigInt(resultStr) : undefined +} + +var V3_SWAP_DEFAULT_SLIPPAGE = new sdkCore.Percent(50, 10000) // .50% +var ONE_TENTHS_PERCENT = new sdkCore.Percent(10, 10000) // .10% +/** + * Return a guess of the gas cost used in computing slippage tolerance for a given trade + * @param trade the trade for which to _guess_ the amount of gas it would cost to execute + */ +function guesstimateGas(trade) { + if (!!trade) { + return ( + 100000 + + trade.swaps.reduce(function (memo, swap) { + return swap.route.pools.length + memo + }, 0) * + 30000 + ) + } + return undefined +} +var MIN_AUTO_SLIPPAGE_TOLERANCE = new sdkCore.Percent(5, 1000) // 0.5% +var MAX_AUTO_SLIPPAGE_TOLERANCE = new sdkCore.Percent(25, 100) // 25% +/** + * Returns slippage tolerance based on values from current trade, gas estimates from api, and active network. + */ +function useAutoSlippageTolerance(trade) { + var chainId = useActiveWeb3React().chainId + var onL2 = chainId && L2_CHAIN_IDS.includes(chainId) + var outputDollarValue = useUSDCValue(trade === null || trade === void 0 ? void 0 : trade.outputAmount) + var nativeGasPrice = useGasPrice() + var gasEstimate = guesstimateGas(trade) + var nativeCurrency = useNativeCurrency() + var nativeCurrencyPrice = useUSDCPrice( + nativeCurrency !== null && nativeCurrency !== void 0 ? nativeCurrency : undefined + ) + return React.useMemo( + function () { + if (!trade || onL2) return ONE_TENTHS_PERCENT + var nativeGasCost = + nativeGasPrice && typeof gasEstimate === 'number' + ? JSBI__default['default'].multiply(nativeGasPrice, JSBI__default['default'].BigInt(gasEstimate)) + : undefined + var dollarGasCost = + nativeCurrency && nativeGasCost && nativeCurrencyPrice + ? nativeCurrencyPrice.quote(sdkCore.CurrencyAmount.fromRawAmount(nativeCurrency, nativeGasCost)) + : undefined + // if valid estimate from api and using api trade, use gas estimate from api + // NOTE - dont use gas estimate for L2s yet - need to verify accuracy + // if not, use local heuristic + var dollarCostToUse = + chainId && + SUPPORTED_GAS_ESTIMATE_CHAIN_IDS.includes(chainId) && + (trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) + ? trade.gasUseEstimateUSD + : dollarGasCost + if (outputDollarValue && dollarCostToUse) { + // the rationale is that a user will not want their trade to fail for a loss due to slippage that is less than + // the cost of the gas of the failed transaction + var fraction = dollarCostToUse.asFraction.divide(outputDollarValue.asFraction) + var result = new sdkCore.Percent(fraction.numerator, fraction.denominator) + if (result.greaterThan(MAX_AUTO_SLIPPAGE_TOLERANCE)) return MAX_AUTO_SLIPPAGE_TOLERANCE + if (result.lessThan(MIN_AUTO_SLIPPAGE_TOLERANCE)) return MIN_AUTO_SLIPPAGE_TOLERANCE + return result + } + return V3_SWAP_DEFAULT_SLIPPAGE + }, + [trade, onL2, nativeGasPrice, gasEstimate, nativeCurrency, nativeCurrencyPrice, chainId, outputDollarValue] + ) +} + +/** + * Transforms a Routing API quote into an array of routes that can be used to create + * a `Trade`. + */ +function computeRoutes(currencyIn, currencyOut, tradeType, quoteResult) { + if (!quoteResult || !quoteResult.route || !currencyIn || !currencyOut) return undefined + if (quoteResult.route.length === 0) return [] + var parsedTokenIn = parseToken(quoteResult.route[0][0].tokenIn) + var parsedTokenOut = parseToken(quoteResult.route[0][quoteResult.route[0].length - 1].tokenOut) + if (parsedTokenIn.address !== currencyIn.wrapped.address) return undefined + if (parsedTokenOut.address !== currencyOut.wrapped.address) return undefined + var parsedCurrencyIn = currencyIn.isNative ? nativeOnChain(currencyIn.chainId) : parsedTokenIn + var parsedCurrencyOut = currencyOut.isNative ? nativeOnChain(currencyOut.chainId) : parsedTokenOut + try { + return quoteResult.route.map(function (route) { + if (route.length === 0) { + throw new Error('Expected route to have at least one pair or pool') + } + var rawAmountIn = route[0].amountIn + var rawAmountOut = route[route.length - 1].amountOut + if (!rawAmountIn || !rawAmountOut) { + throw new Error('Expected both amountIn and amountOut to be present') + } + return { + routev3: isV3Route(route) ? new v3Sdk.Route(route.map(parsePool), parsedCurrencyIn, parsedCurrencyOut) : null, + routev2: !isV3Route(route) ? new v2Sdk.Route(route.map(parsePair), parsedCurrencyIn, parsedCurrencyOut) : null, + inputAmount: sdkCore.CurrencyAmount.fromRawAmount(parsedCurrencyIn, rawAmountIn), + outputAmount: sdkCore.CurrencyAmount.fromRawAmount(parsedCurrencyOut, rawAmountOut), + } + }) + } catch (e) { + // `Route` constructor may throw if inputs/outputs are temporarily out of sync + // (RTK-Query always returns the latest data which may not be the right inputs/outputs) + // This is not fatal and will fix itself in future render cycles + console.error(e) + return undefined + } +} +function transformRoutesToTrade(route, tradeType, gasUseEstimateUSD) { + var _a, _b + return new InterfaceTrade({ + v2Routes: + (_a = + route === null || route === void 0 + ? void 0 + : route + .filter(function (r) { + return r.routev2 !== null + }) + .map(function (_a) { + var routev2 = _a.routev2, + inputAmount = _a.inputAmount, + outputAmount = _a.outputAmount + return { routev2, inputAmount, outputAmount } + })) !== null && _a !== void 0 + ? _a + : [], + v3Routes: + (_b = + route === null || route === void 0 + ? void 0 + : route + .filter(function (r) { + return r.routev3 !== null + }) + .map(function (_a) { + var routev3 = _a.routev3, + inputAmount = _a.inputAmount, + outputAmount = _a.outputAmount + return { routev3, inputAmount, outputAmount } + })) !== null && _b !== void 0 + ? _b + : [], + tradeType, + gasUseEstimateUSD, + }) +} +var parseToken = function (_a) { + var address = _a.address, + chainId = _a.chainId, + decimals = _a.decimals, + symbol = _a.symbol + return new sdkCore.Token(chainId, address, parseInt(decimals.toString()), symbol) +} +var parsePool = function (_a) { + var fee = _a.fee, + sqrtRatioX96 = _a.sqrtRatioX96, + liquidity = _a.liquidity, + tickCurrent = _a.tickCurrent, + tokenIn = _a.tokenIn, + tokenOut = _a.tokenOut + return new v3Sdk.Pool( + parseToken(tokenIn), + parseToken(tokenOut), + parseInt(fee), + sqrtRatioX96, + liquidity, + parseInt(tickCurrent) + ) +} +var parsePair = function (_a) { + var reserve0 = _a.reserve0, + reserve1 = _a.reserve1 + return new v2Sdk.Pair( + sdkCore.CurrencyAmount.fromRawAmount(parseToken(reserve0.token), reserve0.quotient), + sdkCore.CurrencyAmount.fromRawAmount(parseToken(reserve1.token), reserve1.quotient) + ) +} +function isV3Route(route) { + return route[0].type === 'v3-pool' +} + +function useFreshData(data, dataBlockNumber, maxBlockAge) { + if (maxBlockAge === void 0) { + maxBlockAge = 10 + } + var localBlockNumber = useBlockNumber() + if (!localBlockNumber) return undefined + if (localBlockNumber - dataBlockNumber > maxBlockAge) { + return undefined + } + return data +} +/** + * Returns query arguments for the Routing API query or undefined if the + * query should be skipped. + */ +function useRoutingAPIArguments(_a) { + var tokenIn = _a.tokenIn, + tokenOut = _a.tokenOut, + amount = _a.amount, + tradeType = _a.tradeType + var _b = __read(useClientSideRouter(), 1), + clientSideRouter = _b[0] + return React.useMemo( + function () { + return !tokenIn || !tokenOut || !amount || tokenIn.equals(tokenOut) + ? undefined + : { + amount: amount.quotient.toString(), + tokenInAddress: tokenIn.wrapped.address, + tokenInChainId: tokenIn.wrapped.chainId, + tokenInDecimals: tokenIn.wrapped.decimals, + tokenInSymbol: tokenIn.wrapped.symbol, + tokenOutAddress: tokenOut.wrapped.address, + tokenOutChainId: tokenOut.wrapped.chainId, + tokenOutDecimals: tokenOut.wrapped.decimals, + tokenOutSymbol: tokenOut.wrapped.symbol, + useClientSideRouter: clientSideRouter, + type: tradeType === sdkCore.TradeType.EXACT_INPUT ? 'exactIn' : 'exactOut', + } + }, + [amount, clientSideRouter, tokenIn, tokenOut, tradeType] + ) +} +/** + * Returns the best trade by invoking the routing api or the smart order router on the client + * @param tradeType whether the swap is an exact in/out + * @param amountSpecified the exact amount to swap in/out + * @param otherCurrency the desired output/payment currency + */ +function useRoutingAPITrade(tradeType, amountSpecified, otherCurrency) { + var _a + var _b = __read( + React.useMemo( + function () { + return tradeType === sdkCore.TradeType.EXACT_INPUT + ? [ + amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, + otherCurrency, + ] + : [ + otherCurrency, + amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, + ] + }, + [amountSpecified, otherCurrency, tradeType] + ), + 2 + ), + currencyIn = _b[0], + currencyOut = _b[1] + var queryArgs = useRoutingAPIArguments({ + tokenIn: currencyIn, + tokenOut: currencyOut, + amount: amountSpecified, + tradeType, + }) + var _c = useGetQuoteQuery(queryArgs !== null && queryArgs !== void 0 ? queryArgs : react.skipToken, { + pollingInterval: ms__default['default']( + templateObject_1$4 || (templateObject_1$4 = __makeTemplateObject(['15s'], ['15s'])) + ), + refetchOnFocus: true, + }), + isLoading = _c.isLoading, + isError = _c.isError, + data = _c.data + var quoteResult = useFreshData(data, Number(data === null || data === void 0 ? void 0 : data.blockNumber) || 0) + var route = React.useMemo( + function () { + return computeRoutes(currencyIn, currencyOut, tradeType, quoteResult) + }, + [currencyIn, currencyOut, quoteResult, tradeType] + ) + // get USD gas cost of trade in active chains stablecoin amount + var gasUseEstimateUSD = + (_a = useStablecoinAmountFromFiatValue( + quoteResult === null || quoteResult === void 0 ? void 0 : quoteResult.gasUseEstimateUSD + )) !== null && _a !== void 0 + ? _a + : null + return React.useMemo( + function () { + if (!currencyIn || !currencyOut) { + return { + state: TradeState.INVALID, + trade: undefined, + } + } + if (isLoading && !quoteResult) { + // only on first hook render + return { + state: TradeState.LOADING, + trade: undefined, + } + } + var otherAmount = + tradeType === sdkCore.TradeType.EXACT_INPUT + ? currencyOut && quoteResult + ? sdkCore.CurrencyAmount.fromRawAmount(currencyOut, quoteResult.quote) + : undefined + : currencyIn && quoteResult + ? sdkCore.CurrencyAmount.fromRawAmount(currencyIn, quoteResult.quote) + : undefined + if (isError || !otherAmount || !route || route.length === 0 || !queryArgs) { + return { + state: TradeState.NO_ROUTE_FOUND, + trade: undefined, + } + } + try { + var trade = transformRoutesToTrade(route, tradeType, gasUseEstimateUSD) + return { + // always return VALID regardless of isFetching status + state: TradeState.VALID, + trade, + } + } catch (e) { + console.debug('transformRoutesToTrade failed: ', e) + return { state: TradeState.INVALID, trade: undefined } + } + }, + [currencyIn, currencyOut, isLoading, quoteResult, tradeType, isError, route, queryArgs, gasUseEstimateUSD] + ) +} +var templateObject_1$4 + +/** + * Returns the best v2+v3 trade for a desired swap. + * @param tradeType whether the swap is an exact in/out + * @param amountSpecified the exact amount to swap in/out + * @param otherCurrency the desired output/payment currency + */ +function useBestTrade(tradeType, amountSpecified, otherCurrency) { + var autoRouterSupported = useAutoRouterSupported() + var isWindowVisible = useIsWindowVisible() + var _a = __read( + useDebounce( + React.useMemo( + function () { + return [amountSpecified, otherCurrency] + }, + [amountSpecified, otherCurrency] + ), + 200 + ), + 2 + ), + debouncedAmount = _a[0], + debouncedOtherCurrency = _a[1] + var routingAPITrade = useRoutingAPITrade( + tradeType, + autoRouterSupported && isWindowVisible ? debouncedAmount : undefined, + debouncedOtherCurrency + ) + var isLoading = amountSpecified !== undefined && debouncedAmount === undefined + // consider trade debouncing when inputs/outputs do not match + var debouncing = + routingAPITrade.trade && + amountSpecified && + (tradeType === sdkCore.TradeType.EXACT_INPUT + ? !routingAPITrade.trade.inputAmount.equalTo(amountSpecified) || + !amountSpecified.currency.equals(routingAPITrade.trade.inputAmount.currency) || + !(debouncedOtherCurrency === null || debouncedOtherCurrency === void 0 + ? void 0 + : debouncedOtherCurrency.equals(routingAPITrade.trade.outputAmount.currency)) + : !routingAPITrade.trade.outputAmount.equalTo(amountSpecified) || + !amountSpecified.currency.equals(routingAPITrade.trade.outputAmount.currency) || + !(debouncedOtherCurrency === null || debouncedOtherCurrency === void 0 + ? void 0 + : debouncedOtherCurrency.equals(routingAPITrade.trade.inputAmount.currency))) + var useFallback = !autoRouterSupported || (!debouncing && routingAPITrade.state === TradeState.NO_ROUTE_FOUND) + // only use client side router if routing api trade failed or is not supported + var bestV3Trade = useClientSideV3Trade( + tradeType, + useFallback ? debouncedAmount : undefined, + useFallback ? debouncedOtherCurrency : undefined + ) + // only return gas estimate from api if routing api trade is used + return React.useMemo( + function () { + return __assign( + __assign( + __assign({}, useFallback ? bestV3Trade : routingAPITrade), + debouncing ? { state: TradeState.SYNCING } : {} + ), + isLoading ? { state: TradeState.LOADING } : {} + ) + }, + [bestV3Trade, debouncing, isLoading, routingAPITrade, useFallback] + ) +} + +function useSwapState() { + return useAppSelector(function (state) { + return state.swap + }) +} +function useSwapActionHandlers() { + var dispatch = useAppDispatch() + var onCurrencySelection = React.useCallback( + function (field, currency) { + dispatch( + selectCurrency({ + field, + currencyId: currency.isToken ? currency.address : currency.isNative ? 'ETH' : '', + }) + ) + }, + [dispatch] + ) + var onSwitchTokens = React.useCallback( + function () { + dispatch(switchCurrencies()) + }, + [dispatch] + ) + var onUserInput = React.useCallback( + function (field, typedValue) { + dispatch(typeInput({ field, typedValue })) + }, + [dispatch] + ) + var onChangeRecipient = React.useCallback( + function (recipient) { + dispatch(setRecipient({ recipient })) + }, + [dispatch] + ) + return { + onSwitchTokens, + onCurrencySelection, + onUserInput, + onChangeRecipient, + } +} +var BAD_RECIPIENT_ADDRESSES = { + '0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f': true, + '0xf164fC0Ec4E93095b804a4795bBe1e041497b92a': true, + '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D': true, // v2 router 02 +} +// from the current swap inputs, compute the best trade and return it. +function useDerivedSwapInfo() { + var _a, _b + var account = useActiveWeb3React().account + var _c = useSwapState(), + independentField = _c.independentField, + typedValue = _c.typedValue, + _d = Field.INPUT, + inputCurrencyId = _c[_d].currencyId, + _e = Field.OUTPUT, + outputCurrencyId = _c[_e].currencyId, + recipient = _c.recipient + var inputCurrency = useCurrency(inputCurrencyId) + var outputCurrency = useCurrency(outputCurrencyId) + var recipientLookup = useENS(recipient !== null && recipient !== void 0 ? recipient : undefined) + var to = (_a = recipient === null ? account : recipientLookup.address) !== null && _a !== void 0 ? _a : null + var relevantTokenBalances = useCurrencyBalances( + account !== null && account !== void 0 ? account : undefined, + React.useMemo( + function () { + return [ + inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : undefined, + outputCurrency !== null && outputCurrency !== void 0 ? outputCurrency : undefined, + ] + }, + [inputCurrency, outputCurrency] + ) + ) + var isExactIn = independentField === Field.INPUT + var parsedAmount = React.useMemo( + function () { + var _a + return tryParseCurrencyAmount( + typedValue, + (_a = isExactIn ? inputCurrency : outputCurrency) !== null && _a !== void 0 ? _a : undefined + ) + }, + [inputCurrency, isExactIn, outputCurrency, typedValue] + ) + var trade = useBestTrade( + isExactIn ? sdkCore.TradeType.EXACT_INPUT : sdkCore.TradeType.EXACT_OUTPUT, + parsedAmount, + (_b = isExactIn ? outputCurrency : inputCurrency) !== null && _b !== void 0 ? _b : undefined + ) + var currencyBalances = React.useMemo( + function () { + var _a + return (_a = {}), (_a[Field.INPUT] = relevantTokenBalances[0]), (_a[Field.OUTPUT] = relevantTokenBalances[1]), _a + }, + [relevantTokenBalances] + ) + var currencies = React.useMemo( + function () { + var _a + return (_a = {}), (_a[Field.INPUT] = inputCurrency), (_a[Field.OUTPUT] = outputCurrency), _a + }, + [inputCurrency, outputCurrency] + ) + // allowed slippage is either auto slippage, or custom user defined slippage if auto slippage disabled + var autoSlippageTolerance = useAutoSlippageTolerance(trade.trade) + var allowedSlippage = useUserSlippageToleranceWithDefault(autoSlippageTolerance) + var inputError = React.useMemo( + function () { + var _a + var inputError + if (!account) { + inputError = jsxRuntime.jsx(macro.Trans, { children: 'Connect Wallet' }, void 0) + } + if (!currencies[Field.INPUT] || !currencies[Field.OUTPUT]) { + inputError = + inputError !== null && inputError !== void 0 + ? inputError + : jsxRuntime.jsx(macro.Trans, { children: 'Select a token' }, void 0) + } + if (!parsedAmount) { + inputError = + inputError !== null && inputError !== void 0 + ? inputError + : jsxRuntime.jsx(macro.Trans, { children: 'Enter an amount' }, void 0) + } + var formattedTo = isAddress(to) + if (!to || !formattedTo) { + inputError = + inputError !== null && inputError !== void 0 + ? inputError + : jsxRuntime.jsx(macro.Trans, { children: 'Enter a recipient' }, void 0) + } else { + if (BAD_RECIPIENT_ADDRESSES[formattedTo]) { + inputError = + inputError !== null && inputError !== void 0 + ? inputError + : jsxRuntime.jsx(macro.Trans, { children: 'Invalid recipient' }, void 0) + } + } + // compare input balance to max input based on version + var _b = __read( + [ + currencyBalances[Field.INPUT], + (_a = trade.trade) === null || _a === void 0 ? void 0 : _a.maximumAmountIn(allowedSlippage), + ], + 2 + ), + balanceIn = _b[0], + amountIn = _b[1] + if (balanceIn && amountIn && balanceIn.lessThan(amountIn)) { + inputError = jsxRuntime.jsxs( + macro.Trans, + { children: ['Insufficient ', amountIn.currency.symbol, ' balance'] }, + void 0 + ) + } + return inputError + }, + [account, allowedSlippage, currencies, currencyBalances, parsedAmount, to, trade.trade] + ) + return React.useMemo( + function () { + return { + currencies, + currencyBalances, + parsedAmount, + inputError, + trade, + allowedSlippage, + } + }, + [allowedSlippage, currencies, currencyBalances, inputError, parsedAmount, trade] + ) +} +function parseCurrencyFromURLParameter(urlParam) { + if (typeof urlParam === 'string') { + var valid = isAddress(urlParam) + if (valid) return valid + if (urlParam.toUpperCase() === 'ETH') return 'ETH' + } + return '' +} +function parseTokenAmountURLParameter(urlParam) { + return typeof urlParam === 'string' && !isNaN(parseFloat(urlParam)) ? urlParam : '' +} +function parseIndependentFieldURLParameter(urlParam) { + return typeof urlParam === 'string' && urlParam.toLowerCase() === 'output' ? Field.OUTPUT : Field.INPUT +} +var ENS_NAME_REGEX = /^[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)?$/ +var ADDRESS_REGEX = /^0x[a-fA-F0-9]{40}$/ +function validatedRecipient(recipient) { + if (typeof recipient !== 'string') return null + var address = isAddress(recipient) + if (address) return address + if (ENS_NAME_REGEX.test(recipient)) return recipient + if (ADDRESS_REGEX.test(recipient)) return recipient + return null +} +function queryParametersToSwapState(parsedQs) { + var _a + var inputCurrency = parseCurrencyFromURLParameter(parsedQs.inputCurrency) + var outputCurrency = parseCurrencyFromURLParameter(parsedQs.outputCurrency) + if (inputCurrency === '' && outputCurrency === '') { + // default to ETH input + inputCurrency = 'ETH' + } else if (inputCurrency === outputCurrency) { + // clear output if identical + outputCurrency = '' + } + var recipient = validatedRecipient(parsedQs.recipient) + return ( + (_a = {}), + (_a[Field.INPUT] = { + currencyId: + inputCurrency === '' ? null : inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : null, + }), + (_a[Field.OUTPUT] = { + currencyId: + outputCurrency === '' ? null : outputCurrency !== null && outputCurrency !== void 0 ? outputCurrency : null, + }), + (_a.typedValue = parseTokenAmountURLParameter(parsedQs.exactAmount)), + (_a.independentField = parseIndependentFieldURLParameter(parsedQs.exactField)), + (_a.recipient = recipient), + _a + ) +} +// updates the swap state to use the defaults for a given network +function useDefaultsFromURLSearch() { + var chainId = useActiveWeb3React().chainId + var dispatch = useAppDispatch() + var parsedQs = useParsedQueryString() + var _a = __read(React.useState(), 2), + result = _a[0], + setResult = _a[1] + React.useEffect( + function () { + var _a, _b + if (!chainId) return + var parsed = queryParametersToSwapState(parsedQs) + var inputCurrencyId = (_a = parsed[Field.INPUT].currencyId) !== null && _a !== void 0 ? _a : undefined + var outputCurrencyId = (_b = parsed[Field.OUTPUT].currencyId) !== null && _b !== void 0 ? _b : undefined + dispatch( + replaceSwapState({ + typedValue: parsed.typedValue, + field: parsed.independentField, + inputCurrencyId, + outputCurrencyId, + recipient: parsed.recipient, + }) + ) + setResult({ inputCurrencyId, outputCurrencyId }) + // eslint-disable-next-line react-hooks/exhaustive-deps + }, + [dispatch, chainId] + ) + return result +} + +var initialState$2 = queryParametersToSwapState(parsedQueryString()) +var swap = toolkit.createReducer(initialState$2, function (builder) { + return builder + .addCase(replaceSwapState, function (state, _a) { + var _b + var _c = _a.payload, + typedValue = _c.typedValue, + recipient = _c.recipient, + field = _c.field, + inputCurrencyId = _c.inputCurrencyId, + outputCurrencyId = _c.outputCurrencyId + return ( + (_b = {}), + (_b[Field.INPUT] = { + currencyId: inputCurrencyId !== null && inputCurrencyId !== void 0 ? inputCurrencyId : null, + }), + (_b[Field.OUTPUT] = { + currencyId: outputCurrencyId !== null && outputCurrencyId !== void 0 ? outputCurrencyId : null, + }), + (_b.independentField = field), + (_b.typedValue = typedValue), + (_b.recipient = recipient), + _b + ) + }) + .addCase(selectCurrency, function (state, _a) { + var _b, _c + var _d = _a.payload, + currencyId = _d.currencyId, + field = _d.field + var otherField = field === Field.INPUT ? Field.OUTPUT : Field.INPUT + if (currencyId === state[otherField].currencyId) { + // the case where we have to swap the order + return __assign( + __assign({}, state), + ((_b = { independentField: state.independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT }), + (_b[field] = { currencyId }), + (_b[otherField] = { currencyId: state[field].currencyId }), + _b) + ) + } else { + // the normal case + return __assign(__assign({}, state), ((_c = {}), (_c[field] = { currencyId }), _c)) + } + }) + .addCase(switchCurrencies, function (state) { + var _a + return __assign( + __assign({}, state), + ((_a = { independentField: state.independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT }), + (_a[Field.INPUT] = { currencyId: state[Field.OUTPUT].currencyId }), + (_a[Field.OUTPUT] = { currencyId: state[Field.INPUT].currencyId }), + _a) + ) + }) + .addCase(typeInput, function (state, _a) { + var _b = _a.payload, + field = _b.field, + typedValue = _b.typedValue + return __assign(__assign({}, state), { independentField: field, typedValue }) + }) + .addCase(setRecipient, function (state, _a) { + var recipient = _a.payload.recipient + state.recipient = recipient + }) +}) + +var now = function () { + return new Date().getTime() +} +var initialState$1 = {} +var transactions = toolkit.createReducer(initialState$1, function (builder) { + return builder + .addCase(updateVersion, function (transactions) { + // in case there are any transactions in the store with the old format, remove them + Object.keys(transactions).forEach(function (chainId) { + var chainTransactions = transactions[chainId] + Object.keys(chainTransactions).forEach(function (hash) { + if (!('info' in chainTransactions[hash])) { + // clear old transactions that don't have the right format + delete chainTransactions[hash] + } + }) + }) + }) + .addCase(addTransaction, function (transactions, _a) { + var _b, _c + var _d = _a.payload, + chainId = _d.chainId, + from = _d.from, + hash = _d.hash, + info = _d.info + if ((_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash]) { + throw Error('Attempted to add existing transaction.') + } + var txs = (_c = transactions[chainId]) !== null && _c !== void 0 ? _c : {} + txs[hash] = { hash, info, from, addedTime: now() } + transactions[chainId] = txs + }) + .addCase(clearAllTransactions, function (transactions, _a) { + var chainId = _a.payload.chainId + if (!transactions[chainId]) return + transactions[chainId] = {} + }) + .addCase(checkedTransaction, function (transactions, _a) { + var _b + var _c = _a.payload, + chainId = _c.chainId, + hash = _c.hash, + blockNumber = _c.blockNumber + var tx = (_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash] + if (!tx) { + return + } + if (!tx.lastCheckedBlockNumber) { + tx.lastCheckedBlockNumber = blockNumber + } else { + tx.lastCheckedBlockNumber = Math.max(blockNumber, tx.lastCheckedBlockNumber) + } + }) + .addCase(finalizeTransaction, function (transactions, _a) { + var _b + var _c = _a.payload, + hash = _c.hash, + chainId = _c.chainId, + receipt = _c.receipt + var tx = (_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash] + if (!tx) { + return + } + tx.receipt = receipt + tx.confirmedTime = now() + }) +}) + +var currentTimestamp = function () { + return new Date().getTime() +} +function pairKey(token0Address, token1Address) { + return token0Address + ';' + token1Address +} +var initialState = { + matchesDarkMode: false, + userDarkMode: null, + userExpertMode: false, + userLocale: null, + userClientSideRouter: false, + userHideClosedPositions: false, + userSlippageTolerance: 'auto', + userSlippageToleranceHasBeenMigratedToAuto: true, + userDeadline: DEFAULT_DEADLINE_FROM_NOW, + tokens: {}, + pairs: {}, + timestamp: currentTimestamp(), + URLWarningVisible: true, + showSurveyPopup: undefined, +} +var user = toolkit.createReducer(initialState, function (builder) { + return builder + .addCase(updateVersion, function (state) { + // slippage isnt being tracked in local storage, reset to default + // noinspection SuspiciousTypeOfGuard + if ( + typeof state.userSlippageTolerance !== 'number' || + !Number.isInteger(state.userSlippageTolerance) || + state.userSlippageTolerance < 0 || + state.userSlippageTolerance > 5000 + ) { + state.userSlippageTolerance = 'auto' + } else { + if ( + !state.userSlippageToleranceHasBeenMigratedToAuto && + [10, 50, 100].indexOf(state.userSlippageTolerance) !== -1 + ) { + state.userSlippageTolerance = 'auto' + state.userSlippageToleranceHasBeenMigratedToAuto = true + } + } + // deadline isnt being tracked in local storage, reset to default + // noinspection SuspiciousTypeOfGuard + if ( + typeof state.userDeadline !== 'number' || + !Number.isInteger(state.userDeadline) || + state.userDeadline < 60 || + state.userDeadline > 180 * 60 + ) { + state.userDeadline = DEFAULT_DEADLINE_FROM_NOW + } + state.lastUpdateVersionTimestamp = currentTimestamp() + }) + .addCase(updateUserDarkMode, function (state, action) { + state.userDarkMode = action.payload.userDarkMode + state.timestamp = currentTimestamp() + }) + .addCase(updateMatchesDarkMode, function (state, action) { + state.matchesDarkMode = action.payload.matchesDarkMode + state.timestamp = currentTimestamp() + }) + .addCase(updateUserExpertMode, function (state, action) { + state.userExpertMode = action.payload.userExpertMode + state.timestamp = currentTimestamp() + }) + .addCase(updateUserLocale, function (state, action) { + state.userLocale = action.payload.userLocale + state.timestamp = currentTimestamp() + }) + .addCase(updateUserSlippageTolerance, function (state, action) { + state.userSlippageTolerance = action.payload.userSlippageTolerance + state.timestamp = currentTimestamp() + }) + .addCase(updateUserDeadline, function (state, action) { + state.userDeadline = action.payload.userDeadline + state.timestamp = currentTimestamp() + }) + .addCase(updateUserClientSideRouter, function (state, action) { + state.userClientSideRouter = action.payload.userClientSideRouter + }) + .addCase(updateHideClosedPositions, function (state, action) { + state.userHideClosedPositions = action.payload.userHideClosedPositions + }) + .addCase(updateShowSurveyPopup, function (state, action) { + state.showSurveyPopup = action.payload.showSurveyPopup + }) + .addCase(addSerializedToken, function (state, _a) { + var serializedToken = _a.payload.serializedToken + if (!state.tokens) { + state.tokens = {} + } + state.tokens[serializedToken.chainId] = state.tokens[serializedToken.chainId] || {} + state.tokens[serializedToken.chainId][serializedToken.address] = serializedToken + state.timestamp = currentTimestamp() + }) + .addCase(removeSerializedToken, function (state, _a) { + var _b = _a.payload, + address = _b.address, + chainId = _b.chainId + if (!state.tokens) { + state.tokens = {} + } + state.tokens[chainId] = state.tokens[chainId] || {} + delete state.tokens[chainId][address] + state.timestamp = currentTimestamp() + }) + .addCase(addSerializedPair, function (state, _a) { + var serializedPair = _a.payload.serializedPair + if ( + serializedPair.token0.chainId === serializedPair.token1.chainId && + serializedPair.token0.address !== serializedPair.token1.address + ) { + var chainId = serializedPair.token0.chainId + state.pairs[chainId] = state.pairs[chainId] || {} + state.pairs[chainId][pairKey(serializedPair.token0.address, serializedPair.token1.address)] = serializedPair + } + state.timestamp = currentTimestamp() + }) + .addCase(removeSerializedPair, function (state, _a) { + var _b = _a.payload, + chainId = _b.chainId, + tokenAAddress = _b.tokenAAddress, + tokenBAddress = _b.tokenBAddress + if (state.pairs[chainId]) { + // just delete both keys if either exists + delete state.pairs[chainId][pairKey(tokenAAddress, tokenBAddress)] + delete state.pairs[chainId][pairKey(tokenBAddress, tokenAAddress)] + } + state.timestamp = currentTimestamp() + }) +}) + +var _a$2 +var PERSISTED_KEYS = ['user', 'transactions', 'lists'] +var store = toolkit.configureStore({ + reducer: + ((_a$2 = { + application, + user, + transactions, + swap, + mint, + mintV3, + burn, + burnV3, + multicall: multicall.reducer, + lists, + logs, + }), + (_a$2[api.reducerPath] = api.reducer), + (_a$2[routingApi.reducerPath] = routingApi.reducer), + _a$2), + middleware(getDefaultMiddleware) { + return getDefaultMiddleware({ thunk: true }) + .concat(api.middleware) + .concat(routingApi.middleware) + .concat(reduxLocalstorageSimple.save({ states: PERSISTED_KEYS, debounce: 1000 })) + }, + preloadedState: reduxLocalstorageSimple.load({ + states: PERSISTED_KEYS, + disableWarnings: process.env.NODE_ENV === 'test', + }), +}) +store.dispatch(updateVersion()) +react.setupListeners(store.dispatch) + +var _a$1, _b$1, _c$1 +/** + * Given a locale string (e.g. from user agent), return the best match for corresponding SupportedLocale + * @param maybeSupportedLocale the fuzzy locale identifier + */ +function parseLocale(maybeSupportedLocale) { + if (typeof maybeSupportedLocale !== 'string') return undefined + var lowerMaybeSupportedLocale = maybeSupportedLocale.toLowerCase() + return SUPPORTED_LOCALES.find(function (locale) { + return locale.toLowerCase() === lowerMaybeSupportedLocale || locale.split('-')[0] === lowerMaybeSupportedLocale + }) +} +/** + * Returns the supported locale read from the user agent (navigator) + */ +function navigatorLocale() { + var _a + if (!navigator.language) return undefined + var _b = __read(navigator.language.split('-'), 2), + language = _b[0], + region = _b[1] + if (region) { + return (_a = parseLocale(language + '-' + region.toUpperCase())) !== null && _a !== void 0 + ? _a + : parseLocale(language) + } + return parseLocale(language) +} +function storeLocale() { + var _a + return (_a = store.getState().user.userLocale) !== null && _a !== void 0 ? _a : undefined +} +;(_c$1 = + (_b$1 = (_a$1 = parseLocale(parsedQueryString().lng)) !== null && _a$1 !== void 0 ? _a$1 : storeLocale()) !== null && + _b$1 !== void 0 + ? _b$1 + : navigatorLocale()) !== null && _c$1 !== void 0 + ? _c$1 + : DEFAULT_LOCALE +function useUrlLocale() { + var parsed = useParsedQueryString() + return parseLocale(parsed.lng) +} +/** + * Returns the currently active locale, from a combination of user agent, query string, and user settings stored in redux + * Stores the query string locale in redux (if set) to persist across sessions + */ +function useActiveLocale() { + var urlLocale = useUrlLocale() + var userLocale = useUserLocale() + return React.useMemo( + function () { + var _a, _b + return (_b = + (_a = urlLocale !== null && urlLocale !== void 0 ? urlLocale : userLocale) !== null && _a !== void 0 + ? _a + : navigatorLocale()) !== null && _b !== void 0 + ? _b + : DEFAULT_LOCALE + }, + [urlLocale, userLocale] + ) +} + +function useLocationLinkProps(locale) { + var location = reactRouterDom.useLocation() + var qs$1 = useParsedQueryString() + var activeLocale = useActiveLocale() + return React.useMemo( + function () { + return !locale + ? {} + : { + to: __assign(__assign({}, location), { + search: qs.stringify(__assign(__assign({}, qs$1), { lng: locale })), + }), + onClick() { + ReactGA__default['default'].event({ + category: 'Localization', + action: 'Switch Locale', + label: activeLocale + ' -> ' + locale, + }) + }, + } + }, + [location, qs$1, activeLocale, locale] + ) +} + +var Container = styled__default['default'](ThemedText.Small)( + templateObject_1$3 || + (templateObject_1$3 = __makeTemplateObject( + ['\n opacity: 0.6;\n :hover {\n opacity: 1;\n }\n margin-top: 1rem !important;\n'], + ['\n opacity: 0.6;\n :hover {\n opacity: 1;\n }\n margin-top: 1rem !important;\n'] + )) +) +var useTargetLocale = function (activeLocale) { + var browserLocale = React.useMemo(function () { + return navigatorLocale() + }, []) + if (browserLocale && (browserLocale !== DEFAULT_LOCALE || activeLocale !== DEFAULT_LOCALE)) { + if (activeLocale === browserLocale) { + return DEFAULT_LOCALE + } else { + return browserLocale + } + } + return null +} +function SwitchLocaleLink() { + var activeLocale = useActiveLocale() + var targetLocale = useTargetLocale(activeLocale) + var _a = useLocationLinkProps(targetLocale), + to = _a.to, + onClick = _a.onClick + if (!targetLocale || !to) return null + return jsxRuntime.jsx( + Container, + { + children: jsxRuntime.jsxs( + macro.Trans, + { + children: [ + 'Uniswap available in:', + ' ', + jsxRuntime.jsx( + StyledInternalLink, + __assign({ onClick, to }, { children: LOCALE_LABEL[targetLocale] }), + void 0 + ), + ], + }, + void 0 + ), + }, + void 0 + ) +} +var templateObject_1$3 + +function TokenWarningModal(_a) { + var isOpen = _a.isOpen, + tokens = _a.tokens, + onConfirm = _a.onConfirm, + onDismiss = _a.onDismiss + return jsxRuntime.jsx( + Modal, + __assign( + { isOpen, onDismiss, maxHeight: 100 }, + { children: jsxRuntime.jsx(ImportToken, { tokens, handleCurrencySelect: onConfirm }, void 0) } + ), + void 0 + ) +} + +function useTokenAllowance(token, owner, spender) { + var contract = useTokenContract(token === null || token === void 0 ? void 0 : token.address, false) + var inputs = React.useMemo( + function () { + return [owner, spender] + }, + [owner, spender] + ) + var allowance = useSingleCallResult(contract, 'allowance', inputs).result + return React.useMemo( + function () { + return token && allowance ? sdkCore.CurrencyAmount.fromRawAmount(token, allowance.toString()) : undefined + }, + [token, allowance] + ) +} + +var ApprovalState +;(function (ApprovalState) { + ApprovalState['UNKNOWN'] = 'UNKNOWN' + ApprovalState['NOT_APPROVED'] = 'NOT_APPROVED' + ApprovalState['PENDING'] = 'PENDING' + ApprovalState['APPROVED'] = 'APPROVED' +})(ApprovalState || (ApprovalState = {})) +function useApprovalStateForSpender(amountToApprove, spender, useIsPendingApproval) { + var _a + var account = useActiveWeb3React().account + var token = ( + (_a = amountToApprove === null || amountToApprove === void 0 ? void 0 : amountToApprove.currency) === null || + _a === void 0 + ? void 0 + : _a.isToken + ) + ? amountToApprove.currency + : undefined + var currentAllowance = useTokenAllowance(token, account !== null && account !== void 0 ? account : undefined, spender) + var pendingApproval = useIsPendingApproval(token, spender) + return React.useMemo( + function () { + if (!amountToApprove || !spender) return ApprovalState.UNKNOWN + if (amountToApprove.currency.isNative) return ApprovalState.APPROVED + // we might not have enough data to know whether or not we need to approve + if (!currentAllowance) return ApprovalState.UNKNOWN + // amountToApprove will be defined if currentAllowance is + return currentAllowance.lessThan(amountToApprove) + ? pendingApproval + ? ApprovalState.PENDING + : ApprovalState.NOT_APPROVED + : ApprovalState.APPROVED + }, + [amountToApprove, currentAllowance, pendingApproval, spender] + ) +} +function useApproval(amountToApprove, spender, useIsPendingApproval) { + var _this = this + var _a + var chainId = useActiveWeb3React().chainId + var token = ( + (_a = amountToApprove === null || amountToApprove === void 0 ? void 0 : amountToApprove.currency) === null || + _a === void 0 + ? void 0 + : _a.isToken + ) + ? amountToApprove.currency + : undefined + // check the current approval status + var approvalState = useApprovalStateForSpender(amountToApprove, spender, useIsPendingApproval) + var tokenContract = useTokenContract(token === null || token === void 0 ? void 0 : token.address) + var approve = React.useCallback( + function () { + return __awaiter(_this, void 0, void 0, function () { + function logFailure(error) { + console.warn( + ((token === null || token === void 0 ? void 0 : token.symbol) || 'Token') + ' approval failed:', + error + ) + return + } + var useExact, estimatedGas + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + // Bail early if there is an issue. + if (approvalState !== ApprovalState.NOT_APPROVED) { + return [2 /*return*/, logFailure('approve was called unnecessarily')] + } else if (!chainId) { + return [2 /*return*/, logFailure('no chainId')] + } else if (!token) { + return [2 /*return*/, logFailure('no token')] + } else if (!tokenContract) { + return [2 /*return*/, logFailure('tokenContract is null')] + } else if (!amountToApprove) { + return [2 /*return*/, logFailure('missing amount to approve')] + } else if (!spender) { + return [2 /*return*/, logFailure('no spender')] + } + useExact = false + return [ + 4 /*yield*/, + tokenContract.estimateGas.approve(spender, constants.MaxUint256).catch(function () { + // general fallback for tokens which restrict approval amounts + useExact = true + return tokenContract.estimateGas.approve(spender, amountToApprove.quotient.toString()) + }), + ] + case 1: + estimatedGas = _a.sent() + return [ + 2 /*return*/, + tokenContract + .approve(spender, useExact ? amountToApprove.quotient.toString() : constants.MaxUint256, { + gasLimit: calculateGasMargin(estimatedGas), + }) + .then(function (response) { + return { + response, + tokenAddress: token.address, + spenderAddress: spender, + } + }) + .catch(function (error) { + logFailure(error) + throw error + }), + ] + } + }) + }) + }, + [approvalState, token, tokenContract, amountToApprove, spender, chainId] + ) + return [approvalState, approve] +} + +var SwapRouterVersion +;(function (SwapRouterVersion) { + SwapRouterVersion[(SwapRouterVersion['V2'] = 0)] = 'V2' + SwapRouterVersion[(SwapRouterVersion['V3'] = 1)] = 'V3' + SwapRouterVersion[(SwapRouterVersion['V2V3'] = 2)] = 'V2V3' +})(SwapRouterVersion || (SwapRouterVersion = {})) +/** + * Returns the swap router that will result in the least amount of txs (less gas) for a given swap. + * Heuristic: + * - if trade contains a single v2-only trade & V2 SwapRouter is approved: use V2 SwapRouter + * - if trade contains only v3 & V3 SwapRouter is approved: use V3 SwapRouter + * - else: approve and use V2+V3 SwapRouter + */ +function getTxOptimizedSwapRouter(_a) { + var onlyV2Routes = _a.onlyV2Routes, + onlyV3Routes = _a.onlyV3Routes, + tradeHasSplits = _a.tradeHasSplits, + approvalStates = _a.approvalStates + if ([approvalStates.v2, approvalStates.v3, approvalStates.v2V3].includes(ApprovalState.PENDING)) return undefined + if (approvalStates.v2V3 === ApprovalState.APPROVED) return SwapRouterVersion.V2V3 + if (approvalStates.v2 === ApprovalState.APPROVED && onlyV2Routes && !tradeHasSplits) return SwapRouterVersion.V2 + if (approvalStates.v3 === ApprovalState.APPROVED && onlyV3Routes) return SwapRouterVersion.V3 + return SwapRouterVersion.V2V3 +} + +/** Returns approval state for all known swap routers */ +function useSwapApprovalStates(trade, allowedSlippage, useIsPendingApproval) { + var chainId = useActiveWeb3React().chainId + var amountToApprove = React.useMemo( + function () { + return trade && trade.inputAmount.currency.isToken ? trade.maximumAmountIn(allowedSlippage) : undefined + }, + [trade, allowedSlippage] + ) + var v2RouterAddress = chainId ? V2_ROUTER_ADDRESS[chainId] : undefined + var v3RouterAddress = chainId ? V3_ROUTER_ADDRESS[chainId] : undefined + var swapRouterAddress = chainId ? SWAP_ROUTER_ADDRESSES[chainId] : undefined + var v2 = useApprovalStateForSpender(amountToApprove, v2RouterAddress, useIsPendingApproval) + var v3 = useApprovalStateForSpender(amountToApprove, v3RouterAddress, useIsPendingApproval) + var v2V3 = useApprovalStateForSpender(amountToApprove, swapRouterAddress, useIsPendingApproval) + return React.useMemo( + function () { + return { v2, v3, v2V3 } + }, + [v2, v2V3, v3] + ) +} +function useSwapRouterAddress(trade) { + var chainId = useActiveWeb3React().chainId + return React.useMemo( + function () { + return chainId + ? trade instanceof v2Sdk.Trade + ? V2_ROUTER_ADDRESS[chainId] + : trade instanceof v3Sdk.Trade + ? V3_ROUTER_ADDRESS[chainId] + : SWAP_ROUTER_ADDRESSES[chainId] + : undefined + }, + [chainId, trade] + ) +} +// wraps useApproveCallback in the context of a swap +function useSwapApproval(trade, allowedSlippage, useIsPendingApproval) { + var amountToApprove = React.useMemo( + function () { + return trade && trade.inputAmount.currency.isToken ? trade.maximumAmountIn(allowedSlippage) : undefined + }, + [trade, allowedSlippage] + ) + var spender = useSwapRouterAddress(trade) + var approval = useApproval(amountToApprove, spender, useIsPendingApproval) + if (trade instanceof v2Sdk.Trade || trade instanceof v3Sdk.Trade) { + var approvalState = approval[0] + invariant__default['default'](approvalState === ApprovalState.APPROVED, 'Trying to approve legacy router') + } + return approval +} +function useSwapApprovalOptimizedTrade(trade, allowedSlippage, useIsPendingApproval) { + var _a + var onlyV2Routes = + trade === null || trade === void 0 + ? void 0 + : trade.routes.every(function (route) { + return route.protocol === routerSdk.Protocol.V2 + }) + var onlyV3Routes = + trade === null || trade === void 0 + ? void 0 + : trade.routes.every(function (route) { + return route.protocol === routerSdk.Protocol.V3 + }) + var tradeHasSplits = + ((_a = trade === null || trade === void 0 ? void 0 : trade.routes.length) !== null && _a !== void 0 ? _a : 0) > 1 + var approvalStates = useSwapApprovalStates(trade, allowedSlippage, useIsPendingApproval) + var optimizedSwapRouter = React.useMemo( + function () { + return getTxOptimizedSwapRouter({ + onlyV2Routes, + onlyV3Routes, + tradeHasSplits, + approvalStates, + }) + }, + [approvalStates, tradeHasSplits, onlyV2Routes, onlyV3Routes] + ) + return React.useMemo( + function () { + if (!trade) return undefined + try { + switch (optimizedSwapRouter) { + case SwapRouterVersion.V2V3: + return trade + case SwapRouterVersion.V2: + var pairs = trade.swaps[0].route.pools.filter(function (pool) { + return pool instanceof v2Sdk.Pair + }) + var v2Route = new v2Sdk.Route(pairs, trade.inputAmount.currency, trade.outputAmount.currency) + return new v2Sdk.Trade(v2Route, trade.inputAmount, trade.tradeType) + case SwapRouterVersion.V3: + return v3Sdk.Trade.createUncheckedTradeWithMultipleRoutes({ + routes: trade.swaps.map(function (_a) { + var route = _a.route, + inputAmount = _a.inputAmount, + outputAmount = _a.outputAmount + return { + route: new v3Sdk.Route( + route.pools.filter(function (p) { + return p instanceof v3Sdk.Pool + }), + inputAmount.currency, + outputAmount.currency + ), + inputAmount, + outputAmount, + } + }), + tradeType: trade.tradeType, + }) + default: + return undefined + } + } catch (e) { + // TODO(#2989): remove try-catch + console.debug(e) + return undefined + } + }, + [trade, optimizedSwapRouter] + ) +} + +function useGetAndTrackApproval(getApproval) { + var addTransaction = useTransactionAdder() + return React.useCallback( + function () { + return getApproval().then(function (pending) { + if (pending) { + var response = pending.response, + tokenAddress = pending.tokenAddress, + spender = pending.spenderAddress + addTransaction(response, { type: TransactionType.APPROVAL, tokenAddress, spender }) + } + }) + }, + [addTransaction, getApproval] + ) +} +function useApprovalOptimizedTrade(trade, allowedSlippage) { + return useSwapApprovalOptimizedTrade(trade, allowedSlippage, useHasPendingApproval) +} +function useApproveCallbackFromTrade(trade, allowedSlippage) { + var _a = __read(useSwapApproval(trade, allowedSlippage, useHasPendingApproval), 2), + approval = _a[0], + getApproval = _a[1] + return [approval, useGetAndTrackApproval(getApproval)] +} + +function useIsArgentWallet() { + var _a, _b + var account = useActiveWeb3React().account + var argentWalletDetector = useArgentWalletDetectorContract() + var inputs = React.useMemo( + function () { + return [account !== null && account !== void 0 ? account : undefined] + }, + [account] + ) + var call = useSingleCallResult(argentWalletDetector, 'isArgentWallet', inputs, reduxMulticall.NEVER_RELOAD) + return (_b = + (_a = call === null || call === void 0 ? void 0 : call.result) === null || _a === void 0 ? void 0 : _a[0]) !== + null && _b !== void 0 + ? _b + : false +} + +// combines the block timestamp with the user setting to give the deadline that should be used for any submitted transaction +function useTransactionDeadline() { + var chainId = useActiveWeb3React().chainId + var ttl = useAppSelector(function (state) { + return state.user.userDeadline + }) + var blockTimestamp = useCurrentBlockTimestamp() + return React.useMemo( + function () { + if (blockTimestamp && chainId && L2_CHAIN_IDS.includes(chainId)) return blockTimestamp.add(L2_DEADLINE_FROM_NOW) + if (blockTimestamp && ttl) return blockTimestamp.add(ttl) + return undefined + }, + [blockTimestamp, chainId, ttl] + ) +} + +var _a, _b, _c, _d, _e +var PermitType +;(function (PermitType) { + PermitType[(PermitType['AMOUNT'] = 1)] = 'AMOUNT' + PermitType[(PermitType['ALLOWED'] = 2)] = 'ALLOWED' +})(PermitType || (PermitType = {})) +// 20 minutes to submit after signing +var PERMIT_VALIDITY_BUFFER = 20 * 60 +// todo: read this information from extensions on token lists or elsewhere (permit registry?) +var PERMITTABLE_TOKENS = { + 1: + ((_a = {}), + (_a[USDC.address] = { type: PermitType.AMOUNT, name: 'USD Coin', version: '2' }), + (_a[DAI.address] = { type: PermitType.ALLOWED, name: 'Dai Stablecoin', version: '1' }), + (_a[UNI[1].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }), + _a), + 4: + ((_b = { + '0xc7AD46e0b8a400Bb3C915120d284AafbA8fc4735': { type: PermitType.ALLOWED, name: 'Dai Stablecoin', version: '1' }, + }), + (_b[UNI[4].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }), + _b), + 3: + ((_c = {}), + (_c[UNI[3].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }), + (_c['0x07865c6E87B9F70255377e024ace6630C1Eaa37F'] = { type: PermitType.AMOUNT, name: 'USD Coin', version: '2' }), + _c), + 5: ((_d = {}), (_d[UNI[5].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }), _d), + 42: ((_e = {}), (_e[UNI[42].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }), _e), +} +var UseERC20PermitState +;(function (UseERC20PermitState) { + // returned for any reason, e.g. it is an argent wallet, or the currency does not support it + UseERC20PermitState[(UseERC20PermitState['NOT_APPLICABLE'] = 0)] = 'NOT_APPLICABLE' + UseERC20PermitState[(UseERC20PermitState['LOADING'] = 1)] = 'LOADING' + UseERC20PermitState[(UseERC20PermitState['NOT_SIGNED'] = 2)] = 'NOT_SIGNED' + UseERC20PermitState[(UseERC20PermitState['SIGNED'] = 3)] = 'SIGNED' +})(UseERC20PermitState || (UseERC20PermitState = {})) +var EIP712_DOMAIN_TYPE = [ + { name: 'name', type: 'string' }, + { name: 'version', type: 'string' }, + { name: 'chainId', type: 'uint256' }, + { name: 'verifyingContract', type: 'address' }, +] +var EIP712_DOMAIN_TYPE_NO_VERSION = [ + { name: 'name', type: 'string' }, + { name: 'chainId', type: 'uint256' }, + { name: 'verifyingContract', type: 'address' }, +] +var EIP2612_TYPE = [ + { name: 'owner', type: 'address' }, + { name: 'spender', type: 'address' }, + { name: 'value', type: 'uint256' }, + { name: 'nonce', type: 'uint256' }, + { name: 'deadline', type: 'uint256' }, +] +var PERMIT_ALLOWED_TYPE = [ + { name: 'holder', type: 'address' }, + { name: 'spender', type: 'address' }, + { name: 'nonce', type: 'uint256' }, + { name: 'expiry', type: 'uint256' }, + { name: 'allowed', type: 'bool' }, +] +function useERC20Permit(currencyAmount, spender, overridePermitInfo) { + var _a, _b + var _c = useActiveWeb3React(), + account = _c.account, + chainId = _c.chainId, + library = _c.library + var transactionDeadline = useTransactionDeadline() + var tokenAddress = ( + (_a = currencyAmount === null || currencyAmount === void 0 ? void 0 : currencyAmount.currency) === null || + _a === void 0 + ? void 0 + : _a.isToken + ) + ? currencyAmount.currency.address + : undefined + var eip2612Contract = useEIP2612Contract(tokenAddress) + var isArgentWallet = useIsArgentWallet() + var nonceInputs = React.useMemo( + function () { + return [account !== null && account !== void 0 ? account : undefined] + }, + [account] + ) + var tokenNonceState = useSingleCallResult(eip2612Contract, 'nonces', nonceInputs) + var permitInfo = + overridePermitInfo !== null && overridePermitInfo !== void 0 + ? overridePermitInfo + : chainId && tokenAddress + ? (_b = PERMITTABLE_TOKENS[chainId]) === null || _b === void 0 + ? void 0 + : _b[tokenAddress] + : undefined + var _d = __read(React.useState(null), 2), + signatureData = _d[0], + setSignatureData = _d[1] + return React.useMemo( + function () { + var _a, _b + if ( + isArgentWallet || + !currencyAmount || + !eip2612Contract || + !account || + !chainId || + !transactionDeadline || + !library || + !tokenNonceState.valid || + !tokenAddress || + !spender || + !permitInfo + ) { + return { + state: UseERC20PermitState.NOT_APPLICABLE, + signatureData: null, + gatherPermitSignature: null, + } + } + var nonceNumber = + (_b = (_a = tokenNonceState.result) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 + ? void 0 + : _b.toNumber() + if (tokenNonceState.loading || typeof nonceNumber !== 'number') { + return { + state: UseERC20PermitState.LOADING, + signatureData: null, + gatherPermitSignature: null, + } + } + var isSignatureDataValid = + signatureData && + signatureData.owner === account && + signatureData.deadline >= transactionDeadline.toNumber() && + signatureData.tokenAddress === tokenAddress && + signatureData.nonce === nonceNumber && + signatureData.spender === spender && + ('allowed' in signatureData || + JSBI__default['default'].equal( + JSBI__default['default'].BigInt(signatureData.amount), + currencyAmount.quotient + )) + return { + state: isSignatureDataValid ? UseERC20PermitState.SIGNED : UseERC20PermitState.NOT_SIGNED, + signatureData: isSignatureDataValid ? signatureData : null, + gatherPermitSignature: function gatherPermitSignature() { + return __awaiter(this, void 0, void 0, function () { + var allowed, signatureDeadline, value, message, domain, data + return __generator(this, function (_a) { + allowed = permitInfo.type === PermitType.ALLOWED + signatureDeadline = transactionDeadline.toNumber() + PERMIT_VALIDITY_BUFFER + value = currencyAmount.quotient.toString() + message = allowed + ? { + holder: account, + spender, + allowed, + nonce: nonceNumber, + expiry: signatureDeadline, + } + : { + owner: account, + spender, + value, + nonce: nonceNumber, + deadline: signatureDeadline, + } + domain = permitInfo.version + ? { + name: permitInfo.name, + version: permitInfo.version, + verifyingContract: tokenAddress, + chainId, + } + : { + name: permitInfo.name, + verifyingContract: tokenAddress, + chainId, + } + data = JSON.stringify({ + types: { + EIP712Domain: permitInfo.version ? EIP712_DOMAIN_TYPE : EIP712_DOMAIN_TYPE_NO_VERSION, + Permit: allowed ? PERMIT_ALLOWED_TYPE : EIP2612_TYPE, + }, + domain, + primaryType: 'Permit', + message, + }) + return [ + 2 /*return*/, + library + .send('eth_signTypedData_v4', [account, data]) + .then(bytes.splitSignature) + .then(function (signature) { + setSignatureData( + __assign( + __assign( + { v: signature.v, r: signature.r, s: signature.s, deadline: signatureDeadline }, + allowed ? { allowed } : { amount: value } + ), + { + nonce: nonceNumber, + chainId, + owner: account, + spender, + tokenAddress, + permitType: permitInfo.type, + } + ) + ) + }), + ] + }) + }) + }, + } + }, + [ + currencyAmount, + eip2612Contract, + account, + chainId, + isArgentWallet, + transactionDeadline, + library, + tokenNonceState.loading, + tokenNonceState.valid, + tokenNonceState.result, + tokenAddress, + spender, + permitInfo, + signatureData, + ] + ) +} +;({ + version: '1', + name: 'Uniswap V2', + type: PermitType.AMOUNT, +}) +function useERC20PermitFromTrade(trade, allowedSlippage) { + var chainId = useActiveWeb3React().chainId + var swapRouterAddress = chainId + ? // v2 router does not support + trade instanceof v2Sdk.Trade + ? undefined + : trade instanceof v3Sdk.Trade + ? V3_ROUTER_ADDRESS[chainId] + : SWAP_ROUTER_ADDRESSES[chainId] + : undefined + var amountToApprove = React.useMemo( + function () { + return trade ? trade.maximumAmountIn(allowedSlippage) : undefined + }, + [trade, allowedSlippage] + ) + return useERC20Permit(amountToApprove, swapRouterAddress, null) +} + +/** + * Returns true if the input currency or output currency cannot be traded in the interface + * @param currencyIn the input currency to check + * @param currencyOut the output currency to check + */ +function useIsSwapUnsupported(currencyIn, currencyOut) { + var unsupportedTokens = useUnsupportedTokens() + return React.useMemo( + function () { + if (!unsupportedTokens) { + return false + } + var currencyInUnsupported = Boolean( + (currencyIn === null || currencyIn === void 0 ? void 0 : currencyIn.isToken) && + unsupportedTokens[currencyIn.address] + ) + var currencyOutUnsupported = Boolean( + (currencyOut === null || currencyOut === void 0 ? void 0 : currencyOut.isToken) && + unsupportedTokens[currencyOut.address] + ) + return currencyInUnsupported || currencyOutUnsupported + }, + [currencyIn, currencyOut, unsupportedTokens] + ) +} + +var ERC20_INTERFACE = new abi$6.Interface([ + { + constant: false, + inputs: [ + { name: '_spender', type: 'address' }, + { name: '_value', type: 'uint256' }, + ], + name: 'approve', + outputs: [{ name: '', type: 'bool' }], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, +]) +function approveAmountCalldata(amount, spender) { + if (!amount.currency.isToken) throw new Error('Must call with an amount of token') + var approveData = ERC20_INTERFACE.encodeFunctionData('approve', [spender, v3Sdk.toHex(amount.quotient)]) + return { + to: amount.currency.address, + data: approveData, + value: '0x0', + } +} + +var ArgentWalletContractABI = [ + { + inputs: [ + { + components: [ + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'value', + type: 'uint256', + }, + { + internalType: 'bytes', + name: 'data', + type: 'bytes', + }, + ], + name: '_transactions', + type: 'tuple[]', + }, + ], + name: 'wc_multiCall', + outputs: [ + { + internalType: 'bytes[]', + name: '', + type: 'bytes[]', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: '_msgHash', + type: 'bytes32', + }, + { + internalType: 'bytes', + name: '_signature', + type: 'bytes', + }, + ], + name: 'isValidSignature', + outputs: [ + { + internalType: 'bytes4', + name: '', + type: 'bytes4', + }, + ], + stateMutability: 'view', + type: 'function', + }, +] + +function useArgentWalletContract() { + var account = useActiveWeb3React().account + var isArgentWallet = useIsArgentWallet() + return useContract( + isArgentWallet ? (account !== null && account !== void 0 ? account : undefined) : undefined, + ArgentWalletContractABI, + true + ) +} + +var SwapCallbackState +;(function (SwapCallbackState) { + SwapCallbackState[(SwapCallbackState['INVALID'] = 0)] = 'INVALID' + SwapCallbackState[(SwapCallbackState['LOADING'] = 1)] = 'LOADING' + SwapCallbackState[(SwapCallbackState['VALID'] = 2)] = 'VALID' +})(SwapCallbackState || (SwapCallbackState = {})) +/** + * Returns the swap calls that can be used to make the trade + * @param trade trade to execute + * @param allowedSlippage user allowed slippage + * @param recipientAddressOrName the ENS name or address of the recipient of the swap output + * @param signatureData the signature data of the permit of the input token amount, if available + */ +function useSwapCallArguments( + trade, // trade to execute, required + allowedSlippage, // in bips + recipientAddressOrName, // the ENS name or address of the recipient of the trade, or null if swap should be returned to sender + signatureData +) { + var _a = useActiveWeb3React(), + account = _a.account, + chainId = _a.chainId, + library = _a.library + var recipientAddress = useENS(recipientAddressOrName).address + var recipient = recipientAddressOrName === null ? account : recipientAddress + var deadline = useTransactionDeadline() + var routerContract = useV2RouterContract() + var argentWalletContract = useArgentWalletContract() + return React.useMemo( + function () { + if (!trade || !recipient || !library || !account || !chainId || !deadline) return [] + if (trade instanceof v2Sdk.Trade) { + if (!routerContract) return [] + var swapMethods = [] + swapMethods.push( + v2Sdk.Router.swapCallParameters(trade, { + feeOnTransfer: false, + allowedSlippage, + recipient, + deadline: deadline.toNumber(), + }) + ) + if (trade.tradeType === sdkCore.TradeType.EXACT_INPUT) { + swapMethods.push( + v2Sdk.Router.swapCallParameters(trade, { + feeOnTransfer: true, + allowedSlippage, + recipient, + deadline: deadline.toNumber(), + }) + ) + } + return swapMethods.map(function (_a) { + var methodName = _a.methodName, + args = _a.args, + value = _a.value + if (argentWalletContract && trade.inputAmount.currency.isToken) { + return { + address: argentWalletContract.address, + calldata: argentWalletContract.interface.encodeFunctionData('wc_multiCall', [ + [ + approveAmountCalldata(trade.maximumAmountIn(allowedSlippage), routerContract.address), + { + to: routerContract.address, + value, + data: routerContract.interface.encodeFunctionData(methodName, args), + }, + ], + ]), + value: '0x0', + } + } else { + return { + address: routerContract.address, + calldata: routerContract.interface.encodeFunctionData(methodName, args), + value, + } + } + }) + } else { + // swap options shared by v3 and v2+v3 swap routers + var sharedSwapOptions = __assign( + { recipient, slippageTolerance: allowedSlippage }, + signatureData + ? { + inputTokenPermit: + 'allowed' in signatureData + ? { + expiry: signatureData.deadline, + nonce: signatureData.nonce, + s: signatureData.s, + r: signatureData.r, + v: signatureData.v, + } + : { + deadline: signatureData.deadline, + amount: signatureData.amount, + s: signatureData.s, + r: signatureData.r, + v: signatureData.v, + }, + } + : {} + ) + var swapRouterAddress = chainId + ? trade instanceof v3Sdk.Trade + ? V3_ROUTER_ADDRESS[chainId] + : SWAP_ROUTER_ADDRESSES[chainId] + : undefined + if (!swapRouterAddress) return [] + var _a = + trade instanceof v3Sdk.Trade + ? v3Sdk.SwapRouter.swapCallParameters( + trade, + __assign(__assign({}, sharedSwapOptions), { deadline: deadline.toString() }) + ) + : routerSdk.SwapRouter.swapCallParameters( + trade, + __assign(__assign({}, sharedSwapOptions), { deadlineOrPreviousBlockhash: deadline.toString() }) + ), + value = _a.value, + calldata = _a.calldata + if (argentWalletContract && trade.inputAmount.currency.isToken) { + return [ + { + address: argentWalletContract.address, + calldata: argentWalletContract.interface.encodeFunctionData('wc_multiCall', [ + [ + approveAmountCalldata(trade.maximumAmountIn(allowedSlippage), swapRouterAddress), + { + to: swapRouterAddress, + value, + data: calldata, + }, + ], + ]), + value: '0x0', + }, + ] + } + return [ + { + address: swapRouterAddress, + calldata, + value, + }, + ] + } + }, + [ + trade, + recipient, + library, + account, + chainId, + deadline, + routerContract, + allowedSlippage, + argentWalletContract, + signatureData, + ] + ) +} +/** + * This is hacking out the revert reason from the ethers provider thrown error however it can. + * This object seems to be undocumented by ethers. + * @param error an error from the ethers provider + */ +function swapErrorToUserReadableMessage(error) { + var _a, _b, _c, _d + var reason + while (Boolean(error)) { + reason = + (_b = (_a = error.reason) !== null && _a !== void 0 ? _a : error.message) !== null && _b !== void 0 ? _b : reason + error = + (_c = error.error) !== null && _c !== void 0 + ? _c + : (_d = error.data) === null || _d === void 0 + ? void 0 + : _d.originalError + } + if ((reason === null || reason === void 0 ? void 0 : reason.indexOf('execution reverted: ')) === 0) + reason = reason.substr('execution reverted: '.length) + switch (reason) { + case 'UniswapV2Router: EXPIRED': + return jsxRuntime.jsx( + macro.Trans, + { + children: + 'The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.', + }, + void 0 + ) + case 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT': + case 'UniswapV2Router: EXCESSIVE_INPUT_AMOUNT': + return jsxRuntime.jsx( + macro.Trans, + { + children: + 'This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.', + }, + void 0 + ) + case 'TransferHelper: TRANSFER_FROM_FAILED': + return jsxRuntime.jsx( + macro.Trans, + { children: 'The input token cannot be transferred. There may be an issue with the input token.' }, + void 0 + ) + case 'UniswapV2: TRANSFER_FAILED': + return jsxRuntime.jsx( + macro.Trans, + { children: 'The output token cannot be transferred. There may be an issue with the output token.' }, + void 0 + ) + case 'UniswapV2: K': + return jsxRuntime.jsx( + macro.Trans, + { + children: + 'The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.', + }, + void 0 + ) + case 'Too little received': + case 'Too much requested': + case 'STF': + return jsxRuntime.jsx( + macro.Trans, + { + children: + 'This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.', + }, + void 0 + ) + case 'TF': + return jsxRuntime.jsx( + macro.Trans, + { + children: + 'The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.', + }, + void 0 + ) + default: + if ((reason === null || reason === void 0 ? void 0 : reason.indexOf('undefined is not an object')) !== -1) { + console.error(error, reason) + return jsxRuntime.jsx( + macro.Trans, + { + children: + 'An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.', + }, + void 0 + ) + } + return jsxRuntime.jsxs( + macro.Trans, + { + children: [ + 'Unknown error', + reason ? ': "' + reason + '"' : '', + '. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.', + ], + }, + void 0 + ) + } +} +// returns a function that will execute a swap, if the parameters are all valid +// and the user has approved the slippage adjusted input amount for the trade +function useSwapCallback( + trade, // trade to execute, required + allowedSlippage, // in bips + recipientAddressOrName, // the ENS name or address of the recipient of the trade, or null if swap should be returned to sender + signatureData +) { + var _a = useActiveWeb3React(), + account = _a.account, + chainId = _a.chainId, + library = _a.library + var swapCalls = useSwapCallArguments(trade, allowedSlippage, recipientAddressOrName, signatureData) + var addTransaction = useTransactionAdder() + var recipientAddress = useENS(recipientAddressOrName).address + var recipient = recipientAddressOrName === null ? account : recipientAddress + return React.useMemo( + function () { + if (!trade || !library || !account || !chainId) { + return { + state: SwapCallbackState.INVALID, + callback: null, + error: jsxRuntime.jsx(macro.Trans, { children: 'Missing dependencies' }, void 0), + } + } + if (!recipient) { + if (recipientAddressOrName !== null) { + return { + state: SwapCallbackState.INVALID, + callback: null, + error: jsxRuntime.jsx(macro.Trans, { children: 'Invalid recipient' }, void 0), + } + } else { + return { state: SwapCallbackState.LOADING, callback: null, error: null } + } + } + return { + state: SwapCallbackState.VALID, + callback: function onSwap() { + return __awaiter(this, void 0, void 0, function () { + var estimatedCalls, bestCallOption, errorCalls, firstNoErrorCall, _a, address, calldata, value + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + return [ + 4 /*yield*/, + Promise.all( + swapCalls.map(function (call) { + var address = call.address, + calldata = call.calldata, + value = call.value + var tx = + !value || isZero(value) + ? { from: account, to: address, data: calldata } + : { + from: account, + to: address, + data: calldata, + value, + } + return library + .estimateGas(tx) + .then(function (gasEstimate) { + return { + call, + gasEstimate, + } + }) + .catch(function (gasError) { + console.debug('Gas estimate failed, trying eth_call to extract error', call) + return library + .call(tx) + .then(function (result) { + console.debug( + 'Unexpected successful call after failed estimate gas', + call, + gasError, + result + ) + return { + call, + error: jsxRuntime.jsx( + macro.Trans, + { children: 'Unexpected issue with estimating the gas. Please try again.' }, + void 0 + ), + } + }) + .catch(function (callError) { + console.debug('Call threw error', call, callError) + return { call, error: swapErrorToUserReadableMessage(callError) } + }) + }) + }) + ), + // a successful estimation is a bignumber gas estimate and the next call is also a bignumber gas estimate + ] + case 1: + estimatedCalls = _b.sent() + bestCallOption = estimatedCalls.find(function (el, ix, list) { + return 'gasEstimate' in el && (ix === list.length - 1 || 'gasEstimate' in list[ix + 1]) + }) + // check if any calls errored with a recognizable error + if (!bestCallOption) { + errorCalls = estimatedCalls.filter(function (call) { + return 'error' in call + }) + if (errorCalls.length > 0) throw errorCalls[errorCalls.length - 1].error + firstNoErrorCall = estimatedCalls.find(function (call) { + return !('error' in call) + }) + if (!firstNoErrorCall) + throw new Error( + macro.t( + templateObject_1$2 || + (templateObject_1$2 = __makeTemplateObject( + ['Unexpected error. Could not estimate gas for the swap.'], + ['Unexpected error. Could not estimate gas for the swap.'] + )) + ) + ) + bestCallOption = firstNoErrorCall + } + ;(_a = bestCallOption.call), (address = _a.address), (calldata = _a.calldata), (value = _a.value) + return [ + 2 /*return*/, + library + .getSigner() + .sendTransaction( + __assign( + __assign( + { from: account, to: address, data: calldata }, + 'gasEstimate' in bestCallOption + ? { gasLimit: calculateGasMargin(bestCallOption.gasEstimate) } + : {} + ), + value && !isZero(value) ? { value } : {} + ) + ) + .then(function (response) { + addTransaction( + response, + trade.tradeType === sdkCore.TradeType.EXACT_INPUT + ? { + type: TransactionType.SWAP, + tradeType: sdkCore.TradeType.EXACT_INPUT, + inputCurrencyId: currencyId(trade.inputAmount.currency), + inputCurrencyAmountRaw: trade.inputAmount.quotient.toString(), + expectedOutputCurrencyAmountRaw: trade.outputAmount.quotient.toString(), + outputCurrencyId: currencyId(trade.outputAmount.currency), + minimumOutputCurrencyAmountRaw: trade + .minimumAmountOut(allowedSlippage) + .quotient.toString(), + } + : { + type: TransactionType.SWAP, + tradeType: sdkCore.TradeType.EXACT_OUTPUT, + inputCurrencyId: currencyId(trade.inputAmount.currency), + maximumInputCurrencyAmountRaw: trade + .maximumAmountIn(allowedSlippage) + .quotient.toString(), + outputCurrencyId: currencyId(trade.outputAmount.currency), + outputCurrencyAmountRaw: trade.outputAmount.quotient.toString(), + expectedInputCurrencyAmountRaw: trade.inputAmount.quotient.toString(), + } + ) + return response.hash + }) + .catch(function (error) { + // if the user rejected the tx, pass this along + if ((error === null || error === void 0 ? void 0 : error.code) === 4001) { + throw new Error( + macro.t( + templateObject_2 || + (templateObject_2 = __makeTemplateObject( + ['Transaction rejected.'], + ['Transaction rejected.'] + )) + ) + ) + } else { + // otherwise, the error was unexpected and we need to convey that + console.error('Swap failed', error, address, calldata, value) + throw new Error( + macro.t( + templateObject_3 || + (templateObject_3 = __makeTemplateObject(['Swap failed: ', ''], ['Swap failed: ', ''])), + swapErrorToUserReadableMessage(error) + ) + ) + } + }), + ] + } + }) + }) + }, + error: null, + } + }, + [trade, library, account, chainId, recipient, recipientAddressOrName, swapCalls, addTransaction, allowedSlippage] + ) +} +var templateObject_1$2, templateObject_2, templateObject_3 + +var WrapType +;(function (WrapType) { + WrapType[(WrapType['NOT_APPLICABLE'] = 0)] = 'NOT_APPLICABLE' + WrapType[(WrapType['WRAP'] = 1)] = 'WRAP' + WrapType[(WrapType['UNWRAP'] = 2)] = 'UNWRAP' +})(WrapType || (WrapType = {})) +var NOT_APPLICABLE = { wrapType: WrapType.NOT_APPLICABLE } +var WrapInputError +;(function (WrapInputError) { + WrapInputError[(WrapInputError['NO_ERROR'] = 0)] = 'NO_ERROR' + WrapInputError[(WrapInputError['ENTER_NATIVE_AMOUNT'] = 1)] = 'ENTER_NATIVE_AMOUNT' + WrapInputError[(WrapInputError['ENTER_WRAPPED_AMOUNT'] = 2)] = 'ENTER_WRAPPED_AMOUNT' + WrapInputError[(WrapInputError['INSUFFICIENT_NATIVE_BALANCE'] = 3)] = 'INSUFFICIENT_NATIVE_BALANCE' + WrapInputError[(WrapInputError['INSUFFICIENT_WRAPPED_BALANCE'] = 4)] = 'INSUFFICIENT_WRAPPED_BALANCE' +})(WrapInputError || (WrapInputError = {})) +function WrapErrorText(_a) { + var wrapInputError = _a.wrapInputError + var native = useNativeCurrency() + var wrapped = native === null || native === void 0 ? void 0 : native.wrapped + switch (wrapInputError) { + case WrapInputError.NO_ERROR: + return null + case WrapInputError.ENTER_NATIVE_AMOUNT: + return jsxRuntime.jsxs( + macro.Trans, + { children: ['Enter ', native === null || native === void 0 ? void 0 : native.symbol, ' amount'] }, + void 0 + ) + case WrapInputError.ENTER_WRAPPED_AMOUNT: + return jsxRuntime.jsxs( + macro.Trans, + { children: ['Enter ', wrapped === null || wrapped === void 0 ? void 0 : wrapped.symbol, ' amount'] }, + void 0 + ) + case WrapInputError.INSUFFICIENT_NATIVE_BALANCE: + return jsxRuntime.jsxs( + macro.Trans, + { children: ['Insufficient ', native === null || native === void 0 ? void 0 : native.symbol, ' balance'] }, + void 0 + ) + case WrapInputError.INSUFFICIENT_WRAPPED_BALANCE: + return jsxRuntime.jsxs( + macro.Trans, + { children: ['Insufficient ', wrapped === null || wrapped === void 0 ? void 0 : wrapped.symbol, ' balance'] }, + void 0 + ) + } +} +/** + * Given the selected input and output currency, return a wrap callback + * @param inputCurrency the selected input currency + * @param outputCurrency the selected output currency + * @param typedValue the user input value + */ +function useWrapCallback(inputCurrency, outputCurrency, typedValue) { + var _this = this + var _a = useActiveWeb3React(), + chainId = _a.chainId, + account = _a.account + var wethContract = useWETHContract() + var balance = useCurrencyBalance( + account !== null && account !== void 0 ? account : undefined, + inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : undefined + ) + // we can always parse the amount typed as the input currency, since wrapping is 1:1 + var inputAmount = React.useMemo( + function () { + return tryParseCurrencyAmount( + typedValue, + inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : undefined + ) + }, + [inputCurrency, typedValue] + ) + var addTransaction = useTransactionAdder() + return React.useMemo( + function () { + if (!wethContract || !chainId || !inputCurrency || !outputCurrency) return NOT_APPLICABLE + var weth = WRAPPED_NATIVE_CURRENCY[chainId] + if (!weth) return NOT_APPLICABLE + var hasInputAmount = Boolean( + inputAmount === null || inputAmount === void 0 ? void 0 : inputAmount.greaterThan('0') + ) + var sufficientBalance = inputAmount && balance && !balance.lessThan(inputAmount) + if (inputCurrency.isNative && weth.equals(outputCurrency)) { + return { + wrapType: WrapType.WRAP, + execute: + sufficientBalance && inputAmount + ? function () { + return __awaiter(_this, void 0, void 0, function () { + var txReceipt, error_1 + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 2, , 3]) + return [ + 4 /*yield*/, + wethContract.deposit({ value: '0x' + inputAmount.quotient.toString(16) }), + ] + case 1: + txReceipt = _a.sent() + addTransaction(txReceipt, { + type: TransactionType.WRAP, + unwrapped: false, + currencyAmountRaw: + inputAmount === null || inputAmount === void 0 ? void 0 : inputAmount.quotient.toString(), + chainId, + }) + return [3 /*break*/, 3] + case 2: + error_1 = _a.sent() + console.error('Could not deposit', error_1) + return [3 /*break*/, 3] + case 3: + return [2 /*return*/] + } + }) + }) + } + : undefined, + inputError: sufficientBalance + ? undefined + : hasInputAmount + ? WrapInputError.INSUFFICIENT_NATIVE_BALANCE + : WrapInputError.ENTER_NATIVE_AMOUNT, + } + } else if (weth.equals(inputCurrency) && outputCurrency.isNative) { + return { + wrapType: WrapType.UNWRAP, + execute: + sufficientBalance && inputAmount + ? function () { + return __awaiter(_this, void 0, void 0, function () { + var txReceipt, error_2 + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 2, , 3]) + return [4 /*yield*/, wethContract.withdraw('0x' + inputAmount.quotient.toString(16))] + case 1: + txReceipt = _a.sent() + addTransaction(txReceipt, { + type: TransactionType.WRAP, + unwrapped: true, + currencyAmountRaw: + inputAmount === null || inputAmount === void 0 ? void 0 : inputAmount.quotient.toString(), + chainId, + }) + return [3 /*break*/, 3] + case 2: + error_2 = _a.sent() + console.error('Could not withdraw', error_2) + return [3 /*break*/, 3] + case 3: + return [2 /*return*/] + } + }) + }) + } + : undefined, + inputError: sufficientBalance + ? undefined + : hasInputAmount + ? WrapInputError.INSUFFICIENT_WRAPPED_BALANCE + : WrapInputError.ENTER_WRAPPED_AMOUNT, + } + } else { + return NOT_APPLICABLE + } + }, + [wethContract, chainId, inputCurrency, outputCurrency, inputAmount, balance, addTransaction] + ) +} + +var MIN_NATIVE_CURRENCY_FOR_GAS = JSBI__default['default'].exponentiate( + JSBI__default['default'].BigInt(10), + JSBI__default['default'].BigInt(16) +) // .01 ETH +/** + * Given some token amount, return the max that can be spent of it + * @param currencyAmount to return max of + */ +function maxAmountSpend(currencyAmount) { + if (!currencyAmount) return undefined + if (currencyAmount.currency.isNative) { + if (JSBI__default['default'].greaterThan(currencyAmount.quotient, MIN_NATIVE_CURRENCY_FOR_GAS)) { + return sdkCore.CurrencyAmount.fromRawAmount( + currencyAmount.currency, + JSBI__default['default'].subtract(currencyAmount.quotient, MIN_NATIVE_CURRENCY_FOR_GAS) + ) + } else { + return sdkCore.CurrencyAmount.fromRawAmount(currencyAmount.currency, JSBI__default['default'].BigInt(0)) + } + } + return currencyAmount +} + +var BodyWrapper = styled__default['default'].main( + templateObject_1$1 || + (templateObject_1$1 = __makeTemplateObject( + [ + '\n position: relative;\n margin-top: ', + ';\n max-width: ', + ';\n width: 100%;\n background: ', + ';\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 border-radius: 24px;\n margin-top: 1rem;\n margin-left: auto;\n margin-right: auto;\n z-index: ', + ';\n', + ], + [ + '\n position: relative;\n margin-top: ', + ';\n max-width: ', + ';\n width: 100%;\n background: ', + ';\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 border-radius: 24px;\n margin-top: 1rem;\n margin-left: auto;\n margin-right: auto;\n z-index: ', + ';\n', + /** + * The styled container element that wraps the content of most pages and the tabs. + */ + ] + )), + function (_a) { + var margin = _a.margin + return margin !== null && margin !== void 0 ? margin : '0px' + }, + function (_a) { + var maxWidth = _a.maxWidth + return maxWidth !== null && maxWidth !== void 0 ? maxWidth : '480px' + }, + function (_a) { + var theme = _a.theme + return theme.bg0 + }, + Z_INDEX.deprecated_content +) +/** + * The styled container element that wraps the content of most pages and the tabs. + */ +function AppBody(_a) { + var children = _a.children, + rest = __rest(_a, ['children']) + return jsxRuntime.jsx(BodyWrapper, __assign({}, rest, { children }), void 0) +} +var templateObject_1$1 + +var AlertWrapper = styled__default['default'].div( + templateObject_1 || + (templateObject_1 = __makeTemplateObject( + ['\n max-width: 460px;\n width: 100%;\n'], + ['\n max-width: 460px;\n width: 100%;\n'] + )) +) +function Swap(_a) { + var _this = this + var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l + var history = _a.history + var account = useActiveWeb3React().account + var loadedUrlParams = useDefaultsFromURLSearch() + // token warning stuff + var _m = __read( + [ + useCurrency(loadedUrlParams === null || loadedUrlParams === void 0 ? void 0 : loadedUrlParams.inputCurrencyId), + useCurrency(loadedUrlParams === null || loadedUrlParams === void 0 ? void 0 : loadedUrlParams.outputCurrencyId), + ], + 2 + ), + loadedInputCurrency = _m[0], + loadedOutputCurrency = _m[1] + var _o = __read(React.useState(false), 2), + dismissTokenWarning = _o[0], + setDismissTokenWarning = _o[1] + var urlLoadedTokens = React.useMemo( + function () { + var _a, _b + return (_b = + (_a = [loadedInputCurrency, loadedOutputCurrency]) === null || _a === void 0 + ? void 0 + : _a.filter(function (c) { + var _a + return (_a = c === null || c === void 0 ? void 0 : c.isToken) !== null && _a !== void 0 ? _a : false + })) !== null && _b !== void 0 + ? _b + : [] + }, + [loadedInputCurrency, loadedOutputCurrency] + ) + var handleConfirmTokenWarning = React.useCallback(function () { + setDismissTokenWarning(true) + }, []) + // dismiss warning if all imported tokens are in active lists + var defaultTokens = useAllTokens() + var importTokensNotInDefault = React.useMemo( + function () { + return ( + urlLoadedTokens && + urlLoadedTokens.filter(function (token) { + return !Boolean(token.address in defaultTokens) + }) + ) + }, + [defaultTokens, urlLoadedTokens] + ) + var theme = React.useContext(styled.ThemeContext) + // toggle wallet when disconnected + var toggleWalletModal = useWalletModalToggle() + // for expert mode + var _p = __read(useExpertModeManager(), 1), + isExpertMode = _p[0] + // swap state + var _q = useSwapState(), + independentField = _q.independentField, + typedValue = _q.typedValue, + recipient = _q.recipient + var _r = useDerivedSwapInfo(), + _s = _r.trade, + tradeState = _s.state, + trade = _s.trade, + allowedSlippage = _r.allowedSlippage, + currencyBalances = _r.currencyBalances, + parsedAmount = _r.parsedAmount, + currencies = _r.currencies, + swapInputError = _r.inputError + var _t = useWrapCallback(currencies[Field.INPUT], currencies[Field.OUTPUT], typedValue), + wrapType = _t.wrapType, + onWrap = _t.execute, + wrapInputError = _t.inputError + var showWrap = wrapType !== WrapType.NOT_APPLICABLE + var recipientAddress = useENSAddress(recipient).address + var parsedAmounts = React.useMemo( + function () { + var _a, _b + return showWrap + ? ((_a = {}), (_a[Field.INPUT] = parsedAmount), (_a[Field.OUTPUT] = parsedAmount), _a) + : ((_b = {}), + (_b[Field.INPUT] = + independentField === Field.INPUT + ? parsedAmount + : trade === null || trade === void 0 + ? void 0 + : trade.inputAmount), + (_b[Field.OUTPUT] = + independentField === Field.OUTPUT + ? parsedAmount + : trade === null || trade === void 0 + ? void 0 + : trade.outputAmount), + _b) + }, + [independentField, parsedAmount, showWrap, trade] + ) + var _u = __read( + React.useMemo( + function () { + return [ + !(trade === null || trade === void 0 ? void 0 : trade.swaps), + TradeState.LOADING === tradeState, + TradeState.SYNCING === tradeState, + ] + }, + [trade, tradeState] + ), + 3 + ), + routeNotFound = _u[0], + routeIsLoading = _u[1], + routeIsSyncing = _u[2] + var fiatValueInput = useUSDCValue(parsedAmounts[Field.INPUT]) + var fiatValueOutput = useUSDCValue(parsedAmounts[Field.OUTPUT]) + var priceImpact = React.useMemo( + function () { + return routeIsSyncing ? undefined : computeFiatValuePriceImpact(fiatValueInput, fiatValueOutput) + }, + [fiatValueInput, fiatValueOutput, routeIsSyncing] + ) + var _v = useSwapActionHandlers(), + onSwitchTokens = _v.onSwitchTokens, + onCurrencySelection = _v.onCurrencySelection, + onUserInput = _v.onUserInput, + onChangeRecipient = _v.onChangeRecipient + var isValid = !swapInputError + var dependentField = independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT + var handleTypeInput = React.useCallback( + function (value) { + onUserInput(Field.INPUT, value) + }, + [onUserInput] + ) + var handleTypeOutput = React.useCallback( + function (value) { + onUserInput(Field.OUTPUT, value) + }, + [onUserInput] + ) + // reset if they close warning without tokens in params + var handleDismissTokenWarning = React.useCallback( + function () { + setDismissTokenWarning(true) + history.push('/swap/') + }, + [history] + ) + // modal and loading + var _w = __read( + React.useState({ + showConfirm: false, + tradeToConfirm: undefined, + attemptingTxn: false, + swapErrorMessage: undefined, + txHash: undefined, + }), + 2 + ), + _x = _w[0], + showConfirm = _x.showConfirm, + tradeToConfirm = _x.tradeToConfirm, + swapErrorMessage = _x.swapErrorMessage, + attemptingTxn = _x.attemptingTxn, + txHash = _x.txHash, + setSwapState = _w[1] + var formattedAmounts = React.useMemo( + function () { + var _a + var _b, _c, _d, _e + return ( + (_a = {}), + (_a[independentField] = typedValue), + (_a[dependentField] = showWrap + ? (_c = (_b = parsedAmounts[independentField]) === null || _b === void 0 ? void 0 : _b.toExact()) !== null && + _c !== void 0 + ? _c + : '' + : (_e = (_d = parsedAmounts[dependentField]) === null || _d === void 0 ? void 0 : _d.toSignificant(6)) !== + null && _e !== void 0 + ? _e + : ''), + _a + ) + }, + [dependentField, independentField, parsedAmounts, showWrap, typedValue] + ) + var userHasSpecifiedInputOutput = Boolean( + currencies[Field.INPUT] && + currencies[Field.OUTPUT] && + ((_b = parsedAmounts[independentField]) === null || _b === void 0 + ? void 0 + : _b.greaterThan(JSBI__default['default'].BigInt(0))) + ) + var approvalOptimizedTrade = useApprovalOptimizedTrade(trade, allowedSlippage) + var approvalOptimizedTradeString = + approvalOptimizedTrade instanceof v2Sdk.Trade + ? 'V2SwapRouter' + : approvalOptimizedTrade instanceof v3Sdk.Trade + ? 'V3SwapRouter' + : 'SwapRouter' + // check whether the user has approved the router on the input token + var _y = __read(useApproveCallbackFromTrade(approvalOptimizedTrade, allowedSlippage), 2), + approvalState = _y[0], + approveCallback = _y[1] + var _z = useERC20PermitFromTrade(approvalOptimizedTrade, allowedSlippage), + signatureState = _z.state, + signatureData = _z.signatureData, + gatherPermitSignature = _z.gatherPermitSignature + var handleApprove = React.useCallback( + function () { + return __awaiter(_this, void 0, void 0, function () { + var error_1 + var _a + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + if (!(signatureState === UseERC20PermitState.NOT_SIGNED && gatherPermitSignature)) return [3 /*break*/, 7] + _b.label = 1 + case 1: + _b.trys.push([1, 3, , 6]) + return [4 /*yield*/, gatherPermitSignature()] + case 2: + _b.sent() + return [3 /*break*/, 6] + case 3: + error_1 = _b.sent() + if (!((error_1 === null || error_1 === void 0 ? void 0 : error_1.code) !== 4001)) return [3 /*break*/, 5] + return [4 /*yield*/, approveCallback()] + case 4: + _b.sent() + _b.label = 5 + case 5: + return [3 /*break*/, 6] + case 6: + return [3 /*break*/, 9] + case 7: + return [4 /*yield*/, approveCallback()] + case 8: + _b.sent() + ReactGA__default['default'].event({ + category: 'Swap', + action: 'Approve', + label: [ + approvalOptimizedTradeString, + (_a = + approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 + ? void 0 + : approvalOptimizedTrade.inputAmount) === null || _a === void 0 + ? void 0 + : _a.currency.symbol, + ].join('/'), + }) + _b.label = 9 + case 9: + return [2 /*return*/] + } + }) + }) + }, + [ + signatureState, + gatherPermitSignature, + approveCallback, + approvalOptimizedTradeString, + (_c = + approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 + ? void 0 + : approvalOptimizedTrade.inputAmount) === null || _c === void 0 + ? void 0 + : _c.currency.symbol, + ] + ) + // check if user has gone through approval process, used to show two step buttons, reset on token change + var _0 = __read(React.useState(false), 2), + approvalSubmitted = _0[0], + setApprovalSubmitted = _0[1] + // mark when a user has submitted an approval, reset onTokenSelection for input field + React.useEffect( + function () { + if (approvalState === ApprovalState.PENDING) { + setApprovalSubmitted(true) + } + }, + [approvalState, approvalSubmitted] + ) + var maxInputAmount = React.useMemo( + function () { + return maxAmountSpend(currencyBalances[Field.INPUT]) + }, + [currencyBalances] + ) + var showMaxButton = Boolean( + (maxInputAmount === null || maxInputAmount === void 0 ? void 0 : maxInputAmount.greaterThan(0)) && + !((_d = parsedAmounts[Field.INPUT]) === null || _d === void 0 ? void 0 : _d.equalTo(maxInputAmount)) + ) + // the callback to execute the swap + var _1 = useSwapCallback(approvalOptimizedTrade, allowedSlippage, recipient, signatureData), + swapCallback = _1.callback, + swapCallbackError = _1.error + var handleSwap = React.useCallback( + function () { + if (!swapCallback) { + return + } + if (priceImpact && !confirmPriceImpactWithoutFee(priceImpact)) { + return + } + setSwapState({ + attemptingTxn: true, + tradeToConfirm, + showConfirm, + swapErrorMessage: undefined, + txHash: undefined, + }) + swapCallback() + .then(function (hash) { + var _a, _b, _c, _d + setSwapState({ + attemptingTxn: false, + tradeToConfirm, + showConfirm, + swapErrorMessage: undefined, + txHash: hash, + }) + ReactGA__default['default'].event({ + category: 'Swap', + action: + recipient === null + ? 'Swap w/o Send' + : (recipientAddress !== null && recipientAddress !== void 0 ? recipientAddress : recipient) === account + ? 'Swap w/o Send + recipient' + : 'Swap w/ Send', + label: [ + approvalOptimizedTradeString, + (_b = + (_a = + approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 + ? void 0 + : approvalOptimizedTrade.inputAmount) === null || _a === void 0 + ? void 0 + : _a.currency) === null || _b === void 0 + ? void 0 + : _b.symbol, + (_d = + (_c = + approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 + ? void 0 + : approvalOptimizedTrade.outputAmount) === null || _c === void 0 + ? void 0 + : _c.currency) === null || _d === void 0 + ? void 0 + : _d.symbol, + 'MH', + ].join('/'), + }) + }) + .catch(function (error) { + setSwapState({ + attemptingTxn: false, + tradeToConfirm, + showConfirm, + swapErrorMessage: error.message, + txHash: undefined, + }) + }) + }, + [ + swapCallback, + priceImpact, + tradeToConfirm, + showConfirm, + recipient, + recipientAddress, + account, + approvalOptimizedTradeString, + (_f = + (_e = + approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 + ? void 0 + : approvalOptimizedTrade.inputAmount) === null || _e === void 0 + ? void 0 + : _e.currency) === null || _f === void 0 + ? void 0 + : _f.symbol, + (_h = + (_g = + approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 + ? void 0 + : approvalOptimizedTrade.outputAmount) === null || _g === void 0 + ? void 0 + : _g.currency) === null || _h === void 0 + ? void 0 + : _h.symbol, + ] + ) + // errors + var _2 = __read(React.useState(false), 2), + showInverted = _2[0], + setShowInverted = _2[1] + // warnings on the greater of fiat value price impact and execution price impact + var priceImpactSeverity = React.useMemo( + function () { + var executionPriceImpact = trade === null || trade === void 0 ? void 0 : trade.priceImpact + return warningSeverity( + executionPriceImpact && priceImpact + ? executionPriceImpact.greaterThan(priceImpact) + ? executionPriceImpact + : priceImpact + : executionPriceImpact !== null && executionPriceImpact !== void 0 + ? executionPriceImpact + : priceImpact + ) + }, + [priceImpact, trade] + ) + var isArgentWallet = useIsArgentWallet() + // show approve flow when: no error on inputs, not approved or pending, or approved in current session + // never show if price impact is above threshold in non expert mode + var showApproveFlow = + !isArgentWallet && + !swapInputError && + (approvalState === ApprovalState.NOT_APPROVED || + approvalState === ApprovalState.PENDING || + (approvalSubmitted && approvalState === ApprovalState.APPROVED)) && + !(priceImpactSeverity > 3 && !isExpertMode) + var handleConfirmDismiss = React.useCallback( + function () { + setSwapState({ + showConfirm: false, + tradeToConfirm, + attemptingTxn, + swapErrorMessage, + txHash, + }) + // if there was a tx hash, we want to clear the input + if (txHash) { + onUserInput(Field.INPUT, '') + } + }, + [attemptingTxn, onUserInput, swapErrorMessage, tradeToConfirm, txHash] + ) + var handleAcceptChanges = React.useCallback( + function () { + setSwapState({ + tradeToConfirm: trade, + swapErrorMessage, + txHash, + attemptingTxn, + showConfirm, + }) + }, + [attemptingTxn, showConfirm, swapErrorMessage, trade, txHash] + ) + var handleInputSelect = React.useCallback( + function (inputCurrency) { + setApprovalSubmitted(false) // reset 2 step UI for approvals + onCurrencySelection(Field.INPUT, inputCurrency) + }, + [onCurrencySelection] + ) + var handleMaxInput = React.useCallback( + function () { + maxInputAmount && onUserInput(Field.INPUT, maxInputAmount.toExact()) + ReactGA__default['default'].event({ + category: 'Swap', + action: 'Max', + }) + }, + [maxInputAmount, onUserInput] + ) + var handleOutputSelect = React.useCallback( + function (outputCurrency) { + return onCurrencySelection(Field.OUTPUT, outputCurrency) + }, + [onCurrencySelection] + ) + var swapIsUnsupported = useIsSwapUnsupported(currencies[Field.INPUT], currencies[Field.OUTPUT]) + var priceImpactTooHigh = priceImpactSeverity > 3 && !isExpertMode + return jsxRuntime.jsxs( + jsxRuntime.Fragment, + { + children: [ + jsxRuntime.jsx( + TokenWarningModal, + { + isOpen: importTokensNotInDefault.length > 0 && !dismissTokenWarning, + tokens: importTokensNotInDefault, + onConfirm: handleConfirmTokenWarning, + onDismiss: handleDismissTokenWarning, + }, + void 0 + ), + jsxRuntime.jsxs( + AppBody, + { + children: [ + jsxRuntime.jsx(SwapHeader, { allowedSlippage }, void 0), + jsxRuntime.jsxs( + Wrapper$d, + __assign( + { id: 'swap-page' }, + { + children: [ + jsxRuntime.jsx( + ConfirmSwapModal, + { + isOpen: showConfirm, + trade, + originalTrade: tradeToConfirm, + onAcceptChanges: handleAcceptChanges, + attemptingTxn, + txHash, + recipient, + allowedSlippage, + onConfirm: handleSwap, + swapErrorMessage, + onDismiss: handleConfirmDismiss, + }, + void 0 + ), + jsxRuntime.jsxs( + AutoColumn, + __assign( + { gap: 'sm' }, + { + children: [ + jsxRuntime.jsxs( + 'div', + __assign( + { style: { display: 'relative' } }, + { + children: [ + jsxRuntime.jsx( + CurrencyInputPanel, + { + label: + independentField === Field.OUTPUT && !showWrap + ? jsxRuntime.jsx(macro.Trans, { children: 'From (at most)' }, void 0) + : jsxRuntime.jsx(macro.Trans, { children: 'From' }, void 0), + value: formattedAmounts[Field.INPUT], + showMaxButton, + currency: currencies[Field.INPUT], + onUserInput: handleTypeInput, + onMax: handleMaxInput, + fiatValue: + fiatValueInput !== null && fiatValueInput !== void 0 + ? fiatValueInput + : undefined, + onCurrencySelect: handleInputSelect, + otherCurrency: currencies[Field.OUTPUT], + showCommonBases: true, + id: 'swap-currency-input', + loading: independentField === Field.OUTPUT && routeIsSyncing, + }, + void 0 + ), + jsxRuntime.jsx( + ArrowWrapper$1, + __assign( + { clickable: true }, + { + children: jsxRuntime.jsx( + reactFeather.ArrowDown, + { + size: '16', + onClick() { + setApprovalSubmitted(false) // reset 2 step UI for approvals + onSwitchTokens() + }, + color: + currencies[Field.INPUT] && currencies[Field.OUTPUT] + ? theme.text1 + : theme.text3, + }, + void 0 + ), + } + ), + void 0 + ), + jsxRuntime.jsx( + CurrencyInputPanel, + { + value: formattedAmounts[Field.OUTPUT], + onUserInput: handleTypeOutput, + label: + independentField === Field.INPUT && !showWrap + ? jsxRuntime.jsx(macro.Trans, { children: 'To (at least)' }, void 0) + : jsxRuntime.jsx(macro.Trans, { children: 'To' }, void 0), + showMaxButton: false, + hideBalance: false, + fiatValue: + fiatValueOutput !== null && fiatValueOutput !== void 0 + ? fiatValueOutput + : undefined, + priceImpact, + currency: currencies[Field.OUTPUT], + onCurrencySelect: handleOutputSelect, + otherCurrency: currencies[Field.INPUT], + showCommonBases: true, + id: 'swap-currency-output', + loading: independentField === Field.INPUT && routeIsSyncing, + }, + void 0 + ), + ], + } + ), + void 0 + ), + recipient !== null && !showWrap + ? jsxRuntime.jsxs( + jsxRuntime.Fragment, + { + children: [ + jsxRuntime.jsxs( + AutoRow, + __assign( + { justify: 'space-between', style: { padding: '0 1rem' } }, + { + children: [ + jsxRuntime.jsx( + ArrowWrapper$1, + __assign( + { clickable: false }, + { + children: jsxRuntime.jsx( + reactFeather.ArrowDown, + { size: '16', color: theme.text2 }, + void 0 + ), + } + ), + void 0 + ), + jsxRuntime.jsx( + LinkStyledButton, + __assign( + { + id: 'remove-recipient-button', + onClick() { + return onChangeRecipient(null) + }, + }, + { + children: jsxRuntime.jsx( + macro.Trans, + { children: '- Remove recipient' }, + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + jsxRuntime.jsx( + AddressInputPanel, + { id: 'recipient', value: recipient, onChange: onChangeRecipient }, + void 0 + ), + ], + }, + void 0 + ) + : null, + !showWrap && + userHasSpecifiedInputOutput && + (trade || routeIsLoading || routeIsSyncing) && + jsxRuntime.jsx( + SwapDetailsDropdown, + { + trade, + syncing: routeIsSyncing, + loading: routeIsLoading, + showInverted, + setShowInverted, + allowedSlippage, + }, + void 0 + ), + jsxRuntime.jsxs( + 'div', + { + children: [ + swapIsUnsupported + ? jsxRuntime.jsx( + ButtonPrimary, + __assign( + { disabled: true }, + { + children: jsxRuntime.jsx( + ThemedText.Main, + __assign( + { mb: '4px' }, + { + children: jsxRuntime.jsx( + macro.Trans, + { children: 'Unsupported Asset' }, + void 0 + ), + } + ), + void 0 + ), + } + ), + void 0 + ) + : !account + ? jsxRuntime.jsx( + ButtonLight, + __assign( + { onClick: toggleWalletModal }, + { + children: jsxRuntime.jsx( + macro.Trans, + { children: 'Connect Wallet' }, + void 0 + ), + } + ), + void 0 + ) + : showWrap + ? jsxRuntime.jsx( + ButtonPrimary, + __assign( + { disabled: Boolean(wrapInputError), onClick: onWrap }, + { + children: wrapInputError + ? jsxRuntime.jsx(WrapErrorText, { wrapInputError }, void 0) + : wrapType === WrapType.WRAP + ? jsxRuntime.jsx(macro.Trans, { children: 'Wrap' }, void 0) + : wrapType === WrapType.UNWRAP + ? jsxRuntime.jsx(macro.Trans, { children: 'Unwrap' }, void 0) + : null, + } + ), + void 0 + ) + : routeNotFound && + userHasSpecifiedInputOutput && + !routeIsLoading && + !routeIsSyncing + ? jsxRuntime.jsx( + GreyCard, + __assign( + { style: { textAlign: 'center' } }, + { + children: jsxRuntime.jsx( + ThemedText.Main, + __assign( + { mb: '4px' }, + { + children: jsxRuntime.jsx( + macro.Trans, + { children: 'Insufficient liquidity for this trade.' }, + void 0 + ), + } + ), + void 0 + ), + } + ), + void 0 + ) + : showApproveFlow + ? jsxRuntime.jsx( + AutoRow, + __assign( + { style: { flexWrap: 'nowrap', width: '100%' } }, + { + children: jsxRuntime.jsxs( + AutoColumn, + __assign( + { style: { width: '100%' }, gap: '12px' }, + { + children: [ + jsxRuntime.jsx( + ButtonConfirmed, + __assign( + { + onClick: handleApprove, + disabled: + approvalState !== ApprovalState.NOT_APPROVED || + approvalSubmitted || + signatureState === UseERC20PermitState.SIGNED, + width: '100%', + altDisabledStyle: approvalState === ApprovalState.PENDING, + confirmed: + approvalState === ApprovalState.APPROVED || + signatureState === UseERC20PermitState.SIGNED, + }, + { + children: jsxRuntime.jsxs( + AutoRow, + __assign( + { + justify: 'space-between', + style: { flexWrap: 'nowrap' }, + }, + { + children: [ + jsxRuntime.jsxs( + 'span', + __assign( + { + style: { + display: 'flex', + alignItems: 'center', + }, + }, + { + children: [ + jsxRuntime.jsx( + CurrencyLogo, + { + currency: currencies[Field.INPUT], + size: '20px', + style: { + marginRight: '8px', + flexShrink: 0, + }, + }, + void 0 + ), + approvalState === ApprovalState.APPROVED || + signatureState === + UseERC20PermitState.SIGNED + ? jsxRuntime.jsxs( + macro.Trans, + { + children: [ + 'You can now trade ', + (_j = currencies[Field.INPUT]) === + null || _j === void 0 + ? void 0 + : _j.symbol, + ], + }, + void 0 + ) + : jsxRuntime.jsxs( + macro.Trans, + { + children: [ + 'Allow the Uniswap Protocol to use your ', + (_k = currencies[Field.INPUT]) === + null || _k === void 0 + ? void 0 + : _k.symbol, + ], + }, + void 0 + ), + ], + } + ), + void 0 + ), + approvalState === ApprovalState.PENDING + ? jsxRuntime.jsx( + Loader, + { stroke: 'white' }, + void 0 + ) + : (approvalSubmitted && + approvalState === ApprovalState.APPROVED) || + signatureState === UseERC20PermitState.SIGNED + ? jsxRuntime.jsx( + reactFeather.CheckCircle, + { size: '20', color: theme.green1 }, + void 0 + ) + : jsxRuntime.jsx( + MouseoverTooltip, + __assign( + { + text: jsxRuntime.jsxs( + macro.Trans, + { + children: [ + 'You must give the Uniswap smart contracts permission to use your', + ' ', + (_l = currencies[Field.INPUT]) === + null || _l === void 0 + ? void 0 + : _l.symbol, + '. You only have to do this once per token.', + ], + }, + void 0 + ), + }, + { + children: jsxRuntime.jsx( + reactFeather.HelpCircle, + { + size: '20', + color: 'white', + style: { marginLeft: '8px' }, + }, + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + } + ), + void 0 + ), + jsxRuntime.jsx( + ButtonError, + __assign( + { + onClick() { + if (isExpertMode) { + handleSwap() + } else { + setSwapState({ + tradeToConfirm: trade, + attemptingTxn: false, + swapErrorMessage: undefined, + showConfirm: true, + txHash: undefined, + }) + } + }, + width: '100%', + id: 'swap-button', + disabled: + !isValid || + routeIsSyncing || + routeIsLoading || + (approvalState !== ApprovalState.APPROVED && + signatureState !== UseERC20PermitState.SIGNED) || + priceImpactTooHigh, + error: isValid && priceImpactSeverity > 2, + }, + { + children: jsxRuntime.jsx( + rebass.Text, + __assign( + { fontSize: 16, fontWeight: 500 }, + { + children: priceImpactTooHigh + ? jsxRuntime.jsx( + macro.Trans, + { children: 'High Price Impact' }, + void 0 + ) + : trade && priceImpactSeverity > 2 + ? jsxRuntime.jsx( + macro.Trans, + { children: 'Swap Anyway' }, + void 0 + ) + : jsxRuntime.jsx( + macro.Trans, + { children: 'Swap' }, + void 0 + ), + } + ), + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + } + ), + void 0 + ) + : jsxRuntime.jsx( + ButtonError, + __assign( + { + onClick() { + if (isExpertMode) { + handleSwap() + } else { + setSwapState({ + tradeToConfirm: trade, + attemptingTxn: false, + swapErrorMessage: undefined, + showConfirm: true, + txHash: undefined, + }) + } + }, + id: 'swap-button', + disabled: + !isValid || + routeIsSyncing || + routeIsLoading || + priceImpactTooHigh || + !!swapCallbackError, + error: isValid && priceImpactSeverity > 2 && !swapCallbackError, + }, + { + children: jsxRuntime.jsx( + rebass.Text, + __assign( + { fontSize: 20, fontWeight: 500 }, + { + children: swapInputError + ? swapInputError + : routeIsSyncing || routeIsLoading + ? jsxRuntime.jsx(macro.Trans, { children: 'Swap' }, void 0) + : priceImpactSeverity > 2 + ? jsxRuntime.jsx(macro.Trans, { children: 'Swap Anyway' }, void 0) + : priceImpactTooHigh + ? jsxRuntime.jsx( + macro.Trans, + { children: 'Price Impact Too High' }, + void 0 + ) + : jsxRuntime.jsx(macro.Trans, { children: 'Swap' }, void 0), + } + ), + void 0 + ), + } + ), + void 0 + ), + isExpertMode && swapErrorMessage + ? jsxRuntime.jsx(SwapCallbackError, { error: swapErrorMessage }, void 0) + : null, + ], + }, + void 0 + ), + ], + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + ], + }, + void 0 + ), + jsxRuntime.jsx(AlertWrapper, { children: jsxRuntime.jsx(NetworkAlert, {}, void 0) }, void 0), + jsxRuntime.jsx(SwitchLocaleLink, {}, void 0), + !swapIsUnsupported + ? null + : jsxRuntime.jsx( + UnsupportedCurrencyFooter, + { show: swapIsUnsupported, currencies: [currencies[Field.INPUT], currencies[Field.OUTPUT]] }, + void 0 + ), + ], + }, + void 0 + ) +} +var templateObject_1 + +var $schema = 'http://json-schema.org/draft-07/schema#' +var $id = 'https://uniswap.org/tokenlist.schema.json' +var title = 'Uniswap Token List' +var description = 'Schema for lists of tokens compatible with the Uniswap Interface' +var definitions = { + Version: { + type: 'object', + description: 'The version of the list, used in change detection', + examples: [ + { + major: 1, + minor: 0, + patch: 0, + }, + ], + additionalProperties: false, + properties: { + major: { + type: 'integer', + description: + 'The major version of the list. Must be incremented when tokens are removed from the list or token addresses are changed.', + minimum: 0, + examples: [1, 2], + }, + minor: { + type: 'integer', + description: 'The minor version of the list. Must be incremented when tokens are added to the list.', + minimum: 0, + examples: [0, 1], + }, + patch: { + type: 'integer', + description: 'The patch version of the list. Must be incremented for any changes to the list.', + minimum: 0, + examples: [0, 1], + }, + }, + required: ['major', 'minor', 'patch'], + }, + TagIdentifier: { + type: 'string', + description: 'The unique identifier of a tag', + minLength: 1, + maxLength: 10, + pattern: '^[\\w]+$', + examples: ['compound', 'stablecoin'], + }, + ExtensionIdentifier: { + type: 'string', + description: 'The name of a token extension property', + minLength: 1, + maxLength: 40, + pattern: '^[\\w]+$', + examples: ['color', 'is_fee_on_transfer', 'aliases'], + }, + ExtensionMap: { + type: 'object', + description: 'An object containing any arbitrary or vendor-specific token metadata', + maxProperties: 10, + propertyNames: { + $ref: '#/definitions/ExtensionIdentifier', + }, + additionalProperties: { + $ref: '#/definitions/ExtensionValue', + }, + examples: [ + { + color: '#000000', + is_verified_by_me: true, + }, + { + 'x-bridged-addresses-by-chain': { + 1: { + bridgeAddress: '0x4200000000000000000000000000000000000010', + tokenAddress: '0x4200000000000000000000000000000000000010', + }, + }, + }, + ], + }, + ExtensionPrimitiveValue: { + anyOf: [ + { + type: 'string', + minLength: 1, + maxLength: 42, + examples: ['#00000'], + }, + { + type: 'boolean', + examples: [true], + }, + { + type: 'number', + examples: [15], + }, + { + type: 'null', + }, + ], + }, + ExtensionValue: { + anyOf: [ + { + $ref: '#/definitions/ExtensionPrimitiveValue', + }, + { + type: 'object', + maxProperties: 10, + propertyNames: { + $ref: '#/definitions/ExtensionIdentifier', + }, + additionalProperties: { + $ref: '#/definitions/ExtensionValueInner0', + }, + }, + ], + }, + ExtensionValueInner0: { + anyOf: [ + { + $ref: '#/definitions/ExtensionPrimitiveValue', + }, + { + type: 'object', + maxProperties: 10, + propertyNames: { + $ref: '#/definitions/ExtensionIdentifier', + }, + additionalProperties: { + $ref: '#/definitions/ExtensionValueInner1', + }, + }, + ], + }, + ExtensionValueInner1: { + anyOf: [ + { + $ref: '#/definitions/ExtensionPrimitiveValue', + }, + ], + }, + TagDefinition: { + type: 'object', + description: 'Definition of a tag that can be associated with a token via its identifier', + additionalProperties: false, + properties: { + name: { + type: 'string', + description: 'The name of the tag', + pattern: '^[ \\w]+$', + minLength: 1, + maxLength: 20, + }, + description: { + type: 'string', + description: 'A user-friendly description of the tag', + pattern: '^[ \\w\\.,:]+$', + minLength: 1, + maxLength: 200, + }, + }, + required: ['name', 'description'], + examples: [ + { + name: 'Stablecoin', + description: 'A token with value pegged to another asset', + }, + ], + }, + TokenInfo: { + type: 'object', + description: 'Metadata for a single token in a token list', + additionalProperties: false, + properties: { + chainId: { + type: 'integer', + description: 'The chain ID of the Ethereum network where this token is deployed', + minimum: 1, + examples: [1, 42], + }, + address: { + type: 'string', + description: 'The checksummed address of the token on the specified chain ID', + pattern: '^0x[a-fA-F0-9]{40}$', + examples: ['0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'], + }, + decimals: { + type: 'integer', + description: 'The number of decimals for the token balance', + minimum: 0, + maximum: 255, + examples: [18], + }, + name: { + type: 'string', + description: 'The name of the token', + minLength: 1, + maxLength: 40, + pattern: "^[ \\w.'+\\-%/À-ÖØ-öø-ÿ:&\\[\\]\\(\\)]+$", + examples: ['USD Coin'], + }, + symbol: { + type: 'string', + description: 'The symbol for the token; must be alphanumeric', + pattern: '^[a-zA-Z0-9+\\-%/$.]+$', + minLength: 1, + maxLength: 20, + examples: ['USDC'], + }, + logoURI: { + type: 'string', + description: + 'A URI to the token logo asset; if not set, interface will attempt to find a logo based on the token address; suggest SVG or PNG of size 64x64', + format: 'uri', + examples: ['ipfs://QmXfzKRvjZz3u5JRgC4v5mGVbm9ahrUiB4DgzHBsnWbTMM'], + }, + tags: { + type: 'array', + description: 'An array of tag identifiers associated with the token; tags are defined at the list level', + items: { + $ref: '#/definitions/TagIdentifier', + }, + maxItems: 10, + examples: ['stablecoin', 'compound'], + }, + extensions: { + $ref: '#/definitions/ExtensionMap', + }, + }, + required: ['chainId', 'address', 'decimals', 'name', 'symbol'], + }, +} +var type = 'object' +var additionalProperties = false var properties = { - name: { - type: "string", - description: "The name of the token list", - minLength: 1, - maxLength: 20, - pattern: "^[\\w ]+$", - examples: [ - "My Token List" - ] - }, - timestamp: { - type: "string", - format: "date-time", - description: "The timestamp of this list version; i.e. when this immutable version of the list was created" - }, - version: { - $ref: "#/definitions/Version" - }, - tokens: { - type: "array", - description: "The list of tokens included in the list", - items: { - $ref: "#/definitions/TokenInfo" - }, - minItems: 1, - maxItems: 10000 - }, - keywords: { - type: "array", - description: "Keywords associated with the contents of the list; may be used in list discoverability", - items: { - type: "string", - description: "A keyword to describe the contents of the list", - minLength: 1, - maxLength: 20, - pattern: "^[\\w ]+$", - examples: [ - "compound", - "lending", - "personal tokens" - ] - }, - maxItems: 20, - uniqueItems: true - }, - tags: { - type: "object", - description: "A mapping of tag identifiers to their name and description", - propertyNames: { - $ref: "#/definitions/TagIdentifier" - }, - additionalProperties: { - $ref: "#/definitions/TagDefinition" - }, - maxProperties: 20, - examples: [ - { - stablecoin: { - name: "Stablecoin", - description: "A token with value pegged to another asset" - } - } - ] - }, - logoURI: { - type: "string", - description: "A URI for the logo of the token list; prefer SVG or PNG of size 256x256", - format: "uri", - examples: [ - "ipfs://QmXfzKRvjZz3u5JRgC4v5mGVbm9ahrUiB4DgzHBsnWbTMM" - ] - } -}; -var required = [ - "name", - "timestamp", - "version", - "tokens" -]; + name: { + type: 'string', + description: 'The name of the token list', + minLength: 1, + maxLength: 20, + pattern: '^[\\w ]+$', + examples: ['My Token List'], + }, + timestamp: { + type: 'string', + format: 'date-time', + description: 'The timestamp of this list version; i.e. when this immutable version of the list was created', + }, + version: { + $ref: '#/definitions/Version', + }, + tokens: { + type: 'array', + description: 'The list of tokens included in the list', + items: { + $ref: '#/definitions/TokenInfo', + }, + minItems: 1, + maxItems: 10000, + }, + keywords: { + type: 'array', + description: 'Keywords associated with the contents of the list; may be used in list discoverability', + items: { + type: 'string', + description: 'A keyword to describe the contents of the list', + minLength: 1, + maxLength: 20, + pattern: '^[\\w ]+$', + examples: ['compound', 'lending', 'personal tokens'], + }, + maxItems: 20, + uniqueItems: true, + }, + tags: { + type: 'object', + description: 'A mapping of tag identifiers to their name and description', + propertyNames: { + $ref: '#/definitions/TagIdentifier', + }, + additionalProperties: { + $ref: '#/definitions/TagDefinition', + }, + maxProperties: 20, + examples: [ + { + stablecoin: { + name: 'Stablecoin', + description: 'A token with value pegged to another asset', + }, + }, + ], + }, + logoURI: { + type: 'string', + description: 'A URI for the logo of the token list; prefer SVG or PNG of size 256x256', + format: 'uri', + examples: ['ipfs://QmXfzKRvjZz3u5JRgC4v5mGVbm9ahrUiB4DgzHBsnWbTMM'], + }, +} +var required = ['name', 'timestamp', 'version', 'tokens'] var tokenlist_schema = { - $schema: $schema, - $id: $id, - title: title, - description: description, - definitions: definitions, - type: type, - additionalProperties: additionalProperties, - properties: properties, - required: required -}; - -var tokenlist_schema$1 = /*#__PURE__*/Object.freeze({ - __proto__: null, - $schema: $schema, - $id: $id, - title: title, - description: description, - definitions: definitions, - type: type, - additionalProperties: additionalProperties, - properties: properties, - required: required, - 'default': tokenlist_schema -}); - -var fortmatic=function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n});},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0});},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=3)}([function(e,t){e.exports=function(e){return e&&e.__esModule?e:{default:e}};},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")};},function(e,t,r){function n(){return Math.floor(9e4*Math.random())+1e4}Object.defineProperty(t,"__esModule",{value:!0}),t.sendAsyncWrapper=function(e,t){var r=this;return new Promise(function(o,a){r.sendAsync({jsonrpc:"2.0",id:n(),method:e,params:t||[]},function(e,t){e?a(e):o(t.result);});})},t.sendFortmaticAsyncWrapper=function(e){var t=this;return new Promise(function(r,n){t.getProvider().sendFortmaticAsync(e,function(e,t){e?n(e):r(t?t.result:{});});})},t.randomId=n,t.findExistingResponse=function(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},t=new v(m);return t.params=[e],i.sendFortmaticAsyncWrapper.call(g,t)};};var v=function e(t,r){(0, o.default)(this,e),this.id=(0, i.randomId)(),this.method=t,this.params=r?[r]:[{}];};},function(e,t,r){var n=r(0);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=n(r(6)),a=n(r(9)),i=n(r(1)),s=n(r(10)),c=r(11),u=n(r(12)),l=r(2),f=function(){function e(t,r){if((0, i.default)(this,e),this.fortmaticClient=t,this.requests={},this.queue=[],this.account=null,this.network=null,this.isFortmatic=!0,this.overlayReady=!1,this.isLoggedIn=!1,this.postMessages={FORTMATIC_HANDLE_BATCH_REQUEST:"FORTMATIC_HANDLE_BATCH_REQUEST",FORTMATIC_HANDLE_REQUEST:"FORTMATIC_HANDLE_REQUEST",FORTMATIC_HANDLE_FORTMATIC_REQUEST:"FORTMATIC_HANDLE_FORTMATIC_REQUEST",FORTMATIC_HANDLE_RESPONSE:"FORTMATIC_HANDLE_RESPONSE",FORTMATIC_OVERLAY_READY:"FORTMATIC_OVERLAY_READY",FORTMATIC_SHOW_OVERLAY:"FORTMATIC_SHOW_OVERLAY",FORTMATIC_HIDE_OVERLAY:"FORTMATIC_HIDE_OVERLAY",FORTMATIC_USER_DENIED:"FORTMATIC_USER_DENIED",FORTMATIC_USER_LOGOUT:"FORTMATIC_USER_LOGOUT",FORTMATIC_UNAUTHORIZED_API_KEY:"FORTMATIC_UNAUTHORIZED_API_KEY"},!r.API_KEY)throw new Error("Please provide a Fortmatic API key that you acquired from the developer dashboard.");this.options={API_KEY:r.API_KEY,ETH_NETWORK:r.ETH_NETWORK,DOMAIN_ORIGIN:window.location?window.location.origin:"",version:c.version},this.queryParams=btoa(JSON.stringify(this.options)),this.constructPostMessage(),this.overlay=this.createOverlay(),this.listenMessage();}return (0, s.default)(e,[{key:"constructPostMessage",value:function(){var e=this;Object.keys(this.postMessages).map(function(t){e.postMessages[t]+="-".concat(e.queryParams);});}},{key:"createOverlay",value:function(){var e=this;return new Promise(function(t,r){var n=function(){if(function(){var t=!0,r=!1,n=void 0;try{for(var o,a=document.getElementsByClassName("fortmatic-iframe")[Symbol.iterator]();!(t=(o=a.next()).done);t=!0)if(o.value.src.includes(e.queryParams))return !1}catch(e){r=!0,n=e;}finally{try{t||null==a.return||a.return();}finally{if(r)throw n}}return !0}()){var r=document.createElement("style");r.innerHTML=u.default.css,r.type="text/css",document.head.appendChild(r);var n=document.createElement("iframe");n.className="fortmatic-iframe",n.src="".concat(e.fortmaticClient,"/send?params=").concat(e.queryParams),document.body.appendChild(n);var o=document.createElement("img");o.src="https://static.fortmatic.com/assets/trans.gif",document.body.appendChild(o),t({iframe:n});}else console.error("Fortmatic: Duplicate instances found.");};["loaded","interactive","complete"].indexOf(document.readyState)>-1?n():window.addEventListener("load",n.bind(e),!1);})}},{key:"showOverlay",value:function(){var e=(0, a.default)(o.default.mark(function e(){return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.overlay;case 2:e.sent.iframe.style.display="block";case 4:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"hideOverlay",value:function(){var e=(0, a.default)(o.default.mark(function e(){return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.overlay;case 2:e.sent.iframe.style.display="none";case 4:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"sendAsync",value:function(e,t){e.length>0?this.enqueue({payload:{id:(0, l.randomId)(),batch:e.map(function(e){return e.id=(0, l.randomId)(),e}),method:"eth_batchRequest"},cb:t}):this.enqueue({payload:e,cb:t});}},{key:"sendFortmaticAsync",value:function(e,t){this.enqueue({payload:e,cb:t,isNative:!0});}},{key:"send",value:function(e,t){if("string"==typeof e)return l.sendAsyncWrapper.call(this,e,t);if(!t){console.warn("Non-async web3 methods will be deprecated in web3 > 1.0, and are not supported by the Fortmatic provider. An async method to be used instead."),this.sendAsync(e,function(){});var r={};switch(e.method){case"eth_accounts":r=this.account?[this.account]:[];break;case"eth_coinbase":r=this.account;break;case"net_version":r=this.network||(this.options.API_KEY.startsWith("pk_live")?1:4);break;case"eth_uninstallFilter":r=!0;break;default:r={};}return {id:e.id,jsonrpc:e.jsonrpc,result:r}}this.sendAsync(e,t);}},{key:"enqueue",value:function(e){this.queue.push(e),this.overlayReady&&this.dequeue();}},{key:"dequeue",value:function(){var e=(0, a.default)(o.default.mark(function e(){var t,r,n,a=this;return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(0!==this.queue.length){e.next=2;break}return e.abrupt("return");case 2:if(!(t=this.queue.shift())){e.next=11;break}return r=t.payload,n=t.cb,r.id=(0, l.randomId)(),e.next=9,this.postMessage(t.isNative?this.postMessages.FORTMATIC_HANDLE_FORTMATIC_REQUEST:this.postMessages.FORTMATIC_HANDLE_REQUEST,t.payload);case 9:r.batch&&r.batch.length>0?(r.batch.forEach(function(e){a.requests[e.id]={parentId:r.id,payload:e,cb:function(e,t){var n=a.requests[r.id].batchResponse;if(e&&e.response&&!(0, l.findExistingResponse)(n,e.response.id))throw n.push({jsonrpc:"2.0",id:e.response.id,error:{code:e.response.code,message:e.response.message}}),a.requests[r.id].cb(null,n),e.response;if(t&&t.result&&!(0, l.findExistingResponse)(n,t.id))return n.push(t);throw new Error("Fortmatic: unexpected callback behavior")}};}),this.requests[r.id]={payload:r,cb:n,batchResponse:[]}):this.requests[r.id]={payload:r,cb:n},this.dequeue();case 11:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"postMessage",value:function(){var e=(0, a.default)(o.default.mark(function e(t,r){var n;return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.overlay;case 2:if(!(n=e.sent).iframe.contentWindow){e.next=7;break}n.iframe.contentWindow.postMessage({msgType:t,payload:r},"*"),e.next=8;break;case 7:throw new Error("Fortmatic: Modal is not ready.");case 8:case"end":return e.stop()}},e,this)}));return function(t,r){return e.apply(this,arguments)}}()},{key:"enable",value:function(){return l.sendAsyncWrapper.call(this,"eth_accounts")}},{key:"listenMessage",value:function(){var e=this;window.addEventListener("message",function(t){if(t.origin===e.fortmaticClient){var r=t.data.response?t.data.response.id:null;switch(t.data.msgType){case e.postMessages.FORTMATIC_OVERLAY_READY:e.overlayReady=!0,e.dequeue();break;case e.postMessages.FORTMATIC_HANDLE_RESPONSE:try{e.requests[r].cb(null,t.data.response);var n=e.requests[r].parentId;n&&e.requests[n].payload.batch.length===e.requests[n].batchResponse.length&&e.requests[n].cb(null,e.requests[n].batchResponse),"eth_accounts"===e.requests[r].payload.method?e.account=t.data.response.result[0]:"eth_coinbase"===e.requests[r].payload.method?e.account=t.data.response.result:"net_version"===e.requests[r].payload.method&&(e.network=t.data.response.result);}catch(e){}e.isLoggedIn=!0,e.dequeue();break;case e.postMessages.FORTMATIC_HIDE_OVERLAY:e.hideOverlay();break;case e.postMessages.FORTMATIC_SHOW_OVERLAY:e.showOverlay();break;case e.postMessages.FORTMATIC_USER_LOGOUT:e.account=null,e.network=null,e.isLoggedIn=!1;break;case e.postMessages.FORTMATIC_UNAUTHORIZED_API_KEY:throw e.overlayReady=!1,new Error("Given API key is not authorized to access the resource.");case e.postMessages.FORTMATIC_USER_DENIED:if(r){var o=t.data.response&&t.data.response.message?t.data.response.message:"Fortmatic: Modal was closed without executing action!",a=t.data.response&&t.data.response.code?t.data.response.code:1;e.requests[r].cb({message:o,code:a,response:t.data.response});}else e.queue.forEach(function(e){return e.cb({message:"Fortmatic: Modal was closed without executing action!",code:1})});e.dequeue();}}});}}]),e}();t.default=f;},function(e,t,r){e.exports=r(7);},function(e,t,r){var n=function(){return this||"object"==typeof self&&self}()||Function("return this")(),o=n.regeneratorRuntime&&Object.getOwnPropertyNames(n).indexOf("regeneratorRuntime")>=0,a=o&&n.regeneratorRuntime;if(n.regeneratorRuntime=void 0,e.exports=r(8),o)n.regeneratorRuntime=a;else try{delete n.regeneratorRuntime;}catch(e){n.regeneratorRuntime=void 0;}},function(e,t){!function(t){var r,n=Object.prototype,o=n.hasOwnProperty,a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",s=a.asyncIterator||"@@asyncIterator",c=a.toStringTag||"@@toStringTag",u="object"==typeof e,l=t.regeneratorRuntime;if(l)u&&(e.exports=l);else {(l=t.regeneratorRuntime=u?e.exports:{}).wrap=_;var f="suspendedStart",d="suspendedYield",h="executing",p="completed",m={},y={};y[i]=function(){return this};var v=Object.getPrototypeOf,g=v&&v(v(L([])));g&&g!==n&&o.call(g,i)&&(y=g);var b=A.prototype=w.prototype=Object.create(y);T.prototype=b.constructor=A,A.constructor=T,A[c]=T.displayName="GeneratorFunction",l.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return !!t&&(t===T||"GeneratorFunction"===(t.displayName||t.name))},l.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,A):(e.__proto__=A,c in e||(e[c]="GeneratorFunction")),e.prototype=Object.create(b),e},l.awrap=function(e){return {__await:e}},O(R.prototype),R.prototype[s]=function(){return this},l.AsyncIterator=R,l.async=function(e,t,r,n){var o=new R(_(e,t,r,n));return l.isGeneratorFunction(t)?o:o.next().then(function(e){return e.done?e.value:o.next()})},O(b),b[c]="Generator",b[i]=function(){return this},b.toString=function(){return "[object Generator]"},l.keys=function(e){var t=[];for(var r in e)t.push(r);return t.reverse(),function r(){for(;t.length;){var n=t.pop();if(n in e)return r.value=n,r.done=!1,r}return r.done=!0,r}},l.values=L,F.prototype={constructor:F,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=r,this.done=!1,this.delegate=null,this.method="next",this.arg=r,this.tryEntries.forEach(M),!e)for(var t in this)"t"===t.charAt(0)&&o.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=r);},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function n(n,o){return s.type="throw",s.arg=e,t.next=n,o&&(t.method="next",t.arg=r),!!o}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],s=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var c=o.call(i,"catchLoc"),u=o.call(i,"finallyLoc");if(c&&u){if(this.prev=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&o.call(n,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),M(r),m}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var o=n.arg;M(r);}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:L(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=r),m}};}function _(e,t,r,n){var o=t&&t.prototype instanceof w?t:w,a=Object.create(o.prototype),i=new F(n||[]);return a._invoke=function(e,t,r){var n=f;return function(o,a){if(n===h)throw new Error("Generator is already running");if(n===p){if("throw"===o)throw a;return k()}for(r.method=o,r.arg=a;;){var i=r.delegate;if(i){var s=I(i,r);if(s){if(s===m)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(n===f)throw n=p,r.arg;r.dispatchException(r.arg);}else "return"===r.method&&r.abrupt("return",r.arg);n=h;var c=E(e,t,r);if("normal"===c.type){if(n=r.done?p:d,c.arg===m)continue;return {value:c.arg,done:r.done}}"throw"===c.type&&(n=p,r.method="throw",r.arg=c.arg);}}}(e,r,i),a}function E(e,t,r){try{return {type:"normal",arg:e.call(t,r)}}catch(e){return {type:"throw",arg:e}}}function w(){}function T(){}function A(){}function O(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)};});}function R(e){var t;this._invoke=function(r,n){function a(){return new Promise(function(t,a){!function t(r,n,a,i){var s=E(e[r],e,n);if("throw"!==s.type){var c=s.arg,u=c.value;return u&&"object"==typeof u&&o.call(u,"__await")?Promise.resolve(u.__await).then(function(e){t("next",e,a,i);},function(e){t("throw",e,a,i);}):Promise.resolve(u).then(function(e){c.value=e,a(c);},function(e){return t("throw",e,a,i)})}i(s.arg);}(r,n,t,a);})}return t=t?t.then(a,a):a()};}function I(e,t){var n=e.iterator[t.method];if(n===r){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=r,I(e,t),"throw"===t.method))return m;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method");}return m}var o=E(n,e.iterator,t.arg);if("throw"===o.type)return t.method="throw",t.arg=o.arg,t.delegate=null,m;var a=o.arg;return a?a.done?(t[e.resultName]=a.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=r),t.delegate=null,m):a:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,m)}function x(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t);}function M(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t;}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(x,this),this.reset(!0);}function L(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n (https://fortmatic.com/)",license:"MIT",repository:{type:"git",url:"https://github.com/fortmatic/fortmatic-js"},keywords:["Auth","Login","Web3","Crypto","Ethereum","MetaMask","Wallet","Blockchain","Dapp"],homepage:"https://www.fortmatic.com",ava:{require:["@babel/register"],files:["test/**/*.spec.js"],babel:{testOptions:{presets:["@babel/env"],plugins:["@babel/plugin-proposal-function-bind","@babel/plugin-transform-runtime"]}},verbose:!0},nyc:{all:!1,"check-coverage":!0,"per-file":!0,lines:80,statements:80,functions:80,branches:80,include:["src/**/*.js"],exclude:["*/style.js"],require:[],reporter:["html","lcov"]},dependencies:{"@babel/runtime":"7.3.4"},devDependencies:{"@babel/core":"7.3.4","@babel/plugin-proposal-function-bind":"7.2.0","@babel/plugin-transform-modules-commonjs":"7.2.0","@babel/plugin-transform-runtime":"7.3.4","@babel/preset-env":"7.3.4","@babel/register":"7.0.0",ava:"2.2.0","babel-eslint":"10.0.1","babel-loader":"8.0.5",eslint:"5.9.0",lodash:"4.17.11",nyc:"13.1.0",sinon:"7.1.1",webpack:"4.26.1","webpack-cli":"3.1.2"}};},function(e,t,r){t.css="\n .fortmatic-iframe {\n display: none;\n position: fixed;\n top: 0;\n right: 0;\n width: 100%;\n height: 100%;\n border: none;\n border-radius: 0;\n z-index: 2147483647;\n }\n";}]); - -var fortmatic$1 = /*#__PURE__*/Object.freeze(/*#__PURE__*/_mergeNamespaces({ - __proto__: null, - 'default': fortmatic -}, [fortmatic])); - -// from routing-api (https://github.com/Uniswap/routing-api/blob/main/lib/handlers/quote/quote.ts#L243-L311) -function transformSwapRouteToGetQuoteResult(type, amount, _a) { - var e_1, _b; - var quote = _a.quote, quoteGasAdjusted = _a.quoteGasAdjusted, route = _a.route, estimatedGasUsed = _a.estimatedGasUsed, estimatedGasUsedQuoteToken = _a.estimatedGasUsedQuoteToken, estimatedGasUsedUSD = _a.estimatedGasUsedUSD, gasPriceWei = _a.gasPriceWei, methodParameters = _a.methodParameters, blockNumber = _a.blockNumber; - var routeResponse = []; - try { - for (var route_1 = __values(route), route_1_1 = route_1.next(); !route_1_1.done; route_1_1 = route_1.next()) { - var subRoute = route_1_1.value; - var amount_1 = subRoute.amount, quote_1 = subRoute.quote, tokenPath = subRoute.tokenPath; - if (subRoute.protocol === routerSdk.Protocol.V3) { - var pools = subRoute.route.pools; - var curRoute = []; - for (var i = 0; i < pools.length; i++) { - var nextPool = pools[i]; - var tokenIn = tokenPath[i]; - var tokenOut = tokenPath[i + 1]; - var edgeAmountIn = undefined; - if (i === 0) { - edgeAmountIn = type === 'exactIn' ? amount_1.quotient.toString() : quote_1.quotient.toString(); - } - var edgeAmountOut = undefined; - if (i === pools.length - 1) { - edgeAmountOut = type === 'exactIn' ? quote_1.quotient.toString() : amount_1.quotient.toString(); - } - curRoute.push({ - type: 'v3-pool', - tokenIn: { - chainId: tokenIn.chainId, - decimals: tokenIn.decimals, - address: tokenIn.address, - symbol: tokenIn.symbol, - }, - tokenOut: { - chainId: tokenOut.chainId, - decimals: tokenOut.decimals, - address: tokenOut.address, - symbol: tokenOut.symbol, - }, - fee: nextPool.fee.toString(), - liquidity: nextPool.liquidity.toString(), - sqrtRatioX96: nextPool.sqrtRatioX96.toString(), - tickCurrent: nextPool.tickCurrent.toString(), - amountIn: edgeAmountIn, - amountOut: edgeAmountOut, - }); - } - routeResponse.push(curRoute); - } - else if (subRoute.protocol === routerSdk.Protocol.V2) { - var pools = subRoute.route.pairs; - var curRoute = []; - for (var i = 0; i < pools.length; i++) { - var nextPool = pools[i]; - var tokenIn = tokenPath[i]; - var tokenOut = tokenPath[i + 1]; - var edgeAmountIn = undefined; - if (i === 0) { - edgeAmountIn = type === 'exactIn' ? amount_1.quotient.toString() : quote_1.quotient.toString(); - } - var edgeAmountOut = undefined; - if (i === pools.length - 1) { - edgeAmountOut = type === 'exactIn' ? quote_1.quotient.toString() : amount_1.quotient.toString(); - } - var reserve0 = nextPool.reserve0; - var reserve1 = nextPool.reserve1; - curRoute.push({ - type: 'v2-pool', - tokenIn: { - chainId: tokenIn.chainId, - decimals: tokenIn.decimals, - address: tokenIn.address, - symbol: tokenIn.symbol, - }, - tokenOut: { - chainId: tokenOut.chainId, - decimals: tokenOut.decimals, - address: tokenOut.address, - symbol: tokenOut.symbol, - }, - reserve0: { - token: { - chainId: reserve0.currency.wrapped.chainId, - decimals: reserve0.currency.wrapped.decimals, - address: reserve0.currency.wrapped.address, - symbol: reserve0.currency.wrapped.symbol, - }, - quotient: reserve0.quotient.toString(), - }, - reserve1: { - token: { - chainId: reserve1.currency.wrapped.chainId, - decimals: reserve1.currency.wrapped.decimals, - address: reserve1.currency.wrapped.address, - symbol: reserve1.currency.wrapped.symbol, - }, - quotient: reserve1.quotient.toString(), - }, - amountIn: edgeAmountIn, - amountOut: edgeAmountOut, - }); - } - routeResponse.push(curRoute); - } - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (route_1_1 && !route_1_1.done && (_b = route_1.return)) _b.call(route_1); - } - finally { if (e_1) throw e_1.error; } - } - var result = { - methodParameters: methodParameters, - blockNumber: blockNumber.toString(), - amount: amount.quotient.toString(), - amountDecimals: amount.toExact(), - quote: quote.quotient.toString(), - quoteDecimals: quote.toExact(), - quoteGasAdjusted: quoteGasAdjusted.quotient.toString(), - quoteGasAdjustedDecimals: quoteGasAdjusted.toExact(), - gasUseEstimateQuote: estimatedGasUsedQuoteToken.quotient.toString(), - gasUseEstimateQuoteDecimals: estimatedGasUsedQuoteToken.toExact(), - gasUseEstimate: estimatedGasUsed.toString(), - gasUseEstimateUSD: estimatedGasUsedUSD.toExact(), - gasPriceWei: gasPriceWei.toString(), - route: routeResponse, - routeString: smartOrderRouter.routeAmountsToString(route), - }; - return result; -} - -/** Minimal set of dependencies for the router to work locally. */ -function buildDependencies() { - var e_1, _a; - var dependenciesByChain = {}; - try { - for (var AUTO_ROUTER_SUPPORTED_CHAINS_1 = __values(AUTO_ROUTER_SUPPORTED_CHAINS), AUTO_ROUTER_SUPPORTED_CHAINS_1_1 = AUTO_ROUTER_SUPPORTED_CHAINS_1.next(); !AUTO_ROUTER_SUPPORTED_CHAINS_1_1.done; AUTO_ROUTER_SUPPORTED_CHAINS_1_1 = AUTO_ROUTER_SUPPORTED_CHAINS_1.next()) { - var chainId = AUTO_ROUTER_SUPPORTED_CHAINS_1_1.value; - var provider = new ethers.providers.JsonRpcProvider(INFURA_NETWORK_URLS[chainId]); - dependenciesByChain[chainId] = { - chainId: chainId, - provider: provider, - }; - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (AUTO_ROUTER_SUPPORTED_CHAINS_1_1 && !AUTO_ROUTER_SUPPORTED_CHAINS_1_1.done && (_a = AUTO_ROUTER_SUPPORTED_CHAINS_1.return)) _a.call(AUTO_ROUTER_SUPPORTED_CHAINS_1); - } - finally { if (e_1) throw e_1.error; } - } - return dependenciesByChain; -} -var GAMetric = /** @class */ (function (_super) { - __extends(GAMetric, _super); - function GAMetric() { - return _super !== null && _super.apply(this, arguments) || this; - } - GAMetric.prototype.putDimensions = function () { - return; - }; - GAMetric.prototype.putMetric = function (key, value, unit) { - ReactGA__default["default"].timing({ - category: 'Routing API', - variable: key + " | " + unit, - value: value, - label: 'client', - }); - }; - return GAMetric; -}(smartOrderRouter.IMetric)); -smartOrderRouter.setGlobalMetric(new GAMetric()); - -var routerParamsByChain = buildDependencies(); -function getQuote(_a, alphaRouterConfig) { - var type = _a.type, chainId = _a.chainId, tokenIn = _a.tokenIn, tokenOut = _a.tokenOut, amountRaw = _a.amount; - return __awaiter(this, void 0, void 0, function () { - var params, router, currencyIn, currencyOut, baseCurrency, quoteCurrency, amount, swapRoute; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - params = routerParamsByChain[chainId]; - if (!params) { - throw new Error('Router dependencies not initialized.'); - } - router = new smartOrderRouter.AlphaRouter(params); - currencyIn = new sdkCore.Token(tokenIn.chainId, tokenIn.address, tokenIn.decimals, tokenIn.symbol); - currencyOut = new sdkCore.Token(tokenOut.chainId, tokenOut.address, tokenOut.decimals, tokenOut.symbol); - baseCurrency = type === 'exactIn' ? currencyIn : currencyOut; - quoteCurrency = type === 'exactIn' ? currencyOut : currencyIn; - amount = sdkCore.CurrencyAmount.fromRawAmount(baseCurrency, JSBI__default["default"].BigInt(amountRaw)); - return [4 /*yield*/, router.route(amount, quoteCurrency, type === 'exactIn' ? sdkCore.TradeType.EXACT_INPUT : sdkCore.TradeType.EXACT_OUTPUT, - /*swapConfig=*/ undefined, alphaRouterConfig)]; - case 1: - swapRoute = _b.sent(); - if (!swapRoute) - throw new Error('Failed to generate client side quote'); - return [2 /*return*/, { data: transformSwapRouteToGetQuoteResult(type, amount, swapRoute) }]; - } - }); - }); -} - -var index = /*#__PURE__*/Object.freeze({ - __proto__: null, - getQuote: getQuote -}); - -exports.Swap = Swap; + $schema, + $id, + title, + description, + definitions, + type, + additionalProperties, + properties, + required, +} + +var tokenlist_schema$1 = /*#__PURE__*/ Object.freeze({ + __proto__: null, + $schema, + $id, + title, + description, + definitions, + type, + additionalProperties, + properties, + required, + default: tokenlist_schema, +}) + +var fortmatic = (function (e) { + var t = {} + function r(n) { + if (t[n]) return t[n].exports + var o = (t[n] = { i: n, l: !1, exports: {} }) + return e[n].call(o.exports, o, o.exports, r), (o.l = !0), o.exports + } + return ( + (r.m = e), + (r.c = t), + (r.d = function (e, t, n) { + r.o(e, t) || Object.defineProperty(e, t, { enumerable: !0, get: n }) + }), + (r.r = function (e) { + 'undefined' != typeof Symbol && + Symbol.toStringTag && + Object.defineProperty(e, Symbol.toStringTag, { value: 'Module' }), + Object.defineProperty(e, '__esModule', { value: !0 }) + }), + (r.t = function (e, t) { + if ((1 & t && (e = r(e)), 8 & t)) return e + if (4 & t && 'object' == typeof e && e && e.__esModule) return e + var n = Object.create(null) + if ((r.r(n), Object.defineProperty(n, 'default', { enumerable: !0, value: e }), 2 & t && 'string' != typeof e)) + for (var o in e) + r.d( + n, + o, + function (t) { + return e[t] + }.bind(null, o) + ) + return n + }), + (r.n = function (e) { + var t = + e && e.__esModule + ? function () { + return e.default + } + : function () { + return e + } + return r.d(t, 'a', t), t + }), + (r.o = function (e, t) { + return Object.prototype.hasOwnProperty.call(e, t) + }), + (r.p = ''), + r((r.s = 3)) + ) +})([ + function (e, t) { + e.exports = function (e) { + return e && e.__esModule ? e : { default: e } + } + }, + function (e, t) { + e.exports = function (e, t) { + if (!(e instanceof t)) throw new TypeError('Cannot call a class as a function') + } + }, + function (e, t, r) { + function n() { + return Math.floor(9e4 * Math.random()) + 1e4 + } + Object.defineProperty(t, '__esModule', { value: !0 }), + (t.sendAsyncWrapper = function (e, t) { + var r = this + return new Promise(function (o, a) { + r.sendAsync({ jsonrpc: '2.0', id: n(), method: e, params: t || [] }, function (e, t) { + e ? a(e) : o(t.result) + }) + }) + }), + (t.sendFortmaticAsyncWrapper = function (e) { + var t = this + return new Promise(function (r, n) { + t.getProvider().sendFortmaticAsync(e, function (e, t) { + e ? n(e) : r(t ? t.result : {}) + }) + }) + }), + (t.randomId = n), + (t.findExistingResponse = function (e, t) { + for (var r = 0; r < e.length; r++) if (e[r].id === t) return e[r] + return null + }) + }, + function (e, t, r) { + e.exports = r(4) + }, + function (e, t, r) { + var n = r(0), + o = n(r(1)), + a = n(r(5)), + i = r(2), + s = 'fm_composeSend', + c = 'fm_logout', + u = 'fm_get_balances', + l = 'fm_get_transactions', + f = 'fm_is_logged_in', + d = 'fm_accountSettings', + h = 'fm_deposit', + p = 'fm_get_user', + m = 'fm_configure', + y = {} + e.exports = function e(t, r, n) { + var g = this + if (((0, o.default)(this, e), (this.fortmaticClient = 'https://x2.fortmatic.com'), !t)) + throw new Error('Please provide a Fortmatic API key that you acquired from the developer dashboard.') + ;(this.apiKey = t), + (this.options = n), + (this.ethNetwork = r), + (this.queryParams = btoa(JSON.stringify({ API_KEY: t, ETH_NETWORK: r }))), + (this.transactions = { + send(e, t) { + var r = new v(s, { to: e.to, value: e.amount }) + g.getProvider().sendFortmaticAsync(r, t) + }, + }), + (this.getProvider = function () { + return ( + y['fortmatic-'.concat(g.queryParams)] || + (y['fortmatic-'.concat(g.queryParams)] = new a.default(g.fortmaticClient, { + API_KEY: t, + ETH_NETWORK: r, + })), + y['fortmatic-'.concat(g.queryParams)] + ) + }), + (this.user = { + login() { + return g.getProvider().enable() + }, + logout() { + ;(g.getProvider().account = null), (g.getProvider().network = null) + var e = new v(c) + return i.sendFortmaticAsyncWrapper.call(g, e) + }, + getUser() { + var e = new v(p) + return i.sendFortmaticAsyncWrapper.call(g, e) + }, + getBalances() { + var e = new v(u) + return i.sendFortmaticAsyncWrapper.call(g, e) + }, + getTransactions() { + var e = new v(l) + return i.sendFortmaticAsyncWrapper.call(g, e) + }, + isLoggedIn() { + var e = new v(f) + return i.sendFortmaticAsyncWrapper.call(g, e) + }, + settings() { + var e = new v(d) + return i.sendFortmaticAsyncWrapper.call(g, e) + }, + deposit(e) { + var t = new v(h, e) + return i.sendFortmaticAsyncWrapper.call(g, t) + }, + }), + (this.configure = function () { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + t = new v(m) + return (t.params = [e]), i.sendFortmaticAsyncWrapper.call(g, t) + }) + } + var v = function e(t, r) { + ;(0, o.default)(this, e), (this.id = (0, i.randomId)()), (this.method = t), (this.params = r ? [r] : [{}]) + } + }, + function (e, t, r) { + var n = r(0) + Object.defineProperty(t, '__esModule', { value: !0 }), (t.default = void 0) + var o = n(r(6)), + a = n(r(9)), + i = n(r(1)), + s = n(r(10)), + c = r(11), + u = n(r(12)), + l = r(2), + f = (function () { + function e(t, r) { + if ( + ((0, i.default)(this, e), + (this.fortmaticClient = t), + (this.requests = {}), + (this.queue = []), + (this.account = null), + (this.network = null), + (this.isFortmatic = !0), + (this.overlayReady = !1), + (this.isLoggedIn = !1), + (this.postMessages = { + FORTMATIC_HANDLE_BATCH_REQUEST: 'FORTMATIC_HANDLE_BATCH_REQUEST', + FORTMATIC_HANDLE_REQUEST: 'FORTMATIC_HANDLE_REQUEST', + FORTMATIC_HANDLE_FORTMATIC_REQUEST: 'FORTMATIC_HANDLE_FORTMATIC_REQUEST', + FORTMATIC_HANDLE_RESPONSE: 'FORTMATIC_HANDLE_RESPONSE', + FORTMATIC_OVERLAY_READY: 'FORTMATIC_OVERLAY_READY', + FORTMATIC_SHOW_OVERLAY: 'FORTMATIC_SHOW_OVERLAY', + FORTMATIC_HIDE_OVERLAY: 'FORTMATIC_HIDE_OVERLAY', + FORTMATIC_USER_DENIED: 'FORTMATIC_USER_DENIED', + FORTMATIC_USER_LOGOUT: 'FORTMATIC_USER_LOGOUT', + FORTMATIC_UNAUTHORIZED_API_KEY: 'FORTMATIC_UNAUTHORIZED_API_KEY', + }), + !r.API_KEY) + ) + throw new Error('Please provide a Fortmatic API key that you acquired from the developer dashboard.') + ;(this.options = { + API_KEY: r.API_KEY, + ETH_NETWORK: r.ETH_NETWORK, + DOMAIN_ORIGIN: window.location ? window.location.origin : '', + version: c.version, + }), + (this.queryParams = btoa(JSON.stringify(this.options))), + this.constructPostMessage(), + (this.overlay = this.createOverlay()), + this.listenMessage() + } + return ( + (0, s.default)(e, [ + { + key: 'constructPostMessage', + value() { + var e = this + Object.keys(this.postMessages).map(function (t) { + e.postMessages[t] += '-'.concat(e.queryParams) + }) + }, + }, + { + key: 'createOverlay', + value() { + var e = this + return new Promise(function (t, r) { + var n = function () { + if ( + (function () { + var t = !0, + r = !1, + n = void 0 + try { + for ( + var o, a = document.getElementsByClassName('fortmatic-iframe')[Symbol.iterator](); + !(t = (o = a.next()).done); + t = !0 + ) + if (o.value.src.includes(e.queryParams)) return !1 + } catch (e) { + ;(r = !0), (n = e) + } finally { + try { + t || null == a.return || a.return() + } finally { + if (r) throw n + } + } + return !0 + })() + ) { + var r = document.createElement('style') + ;(r.innerHTML = u.default.css), (r.type = 'text/css'), document.head.appendChild(r) + var n = document.createElement('iframe') + ;(n.className = 'fortmatic-iframe'), + (n.src = ''.concat(e.fortmaticClient, '/send?params=').concat(e.queryParams)), + document.body.appendChild(n) + var o = document.createElement('img') + ;(o.src = 'https://static.fortmatic.com/assets/trans.gif'), + document.body.appendChild(o), + t({ iframe: n }) + } else console.error('Fortmatic: Duplicate instances found.') + } + ;['loaded', 'interactive', 'complete'].indexOf(document.readyState) > -1 + ? n() + : window.addEventListener('load', n.bind(e), !1) + }) + }, + }, + { + key: 'showOverlay', + value: (function () { + var e = (0, a.default)( + o.default.mark(function e() { + return o.default.wrap( + function (e) { + for (;;) + switch ((e.prev = e.next)) { + case 0: + return (e.next = 2), this.overlay + case 2: + e.sent.iframe.style.display = 'block' + case 4: + case 'end': + return e.stop() + } + }, + e, + this + ) + }) + ) + return function () { + return e.apply(this, arguments) + } + })(), + }, + { + key: 'hideOverlay', + value: (function () { + var e = (0, a.default)( + o.default.mark(function e() { + return o.default.wrap( + function (e) { + for (;;) + switch ((e.prev = e.next)) { + case 0: + return (e.next = 2), this.overlay + case 2: + e.sent.iframe.style.display = 'none' + case 4: + case 'end': + return e.stop() + } + }, + e, + this + ) + }) + ) + return function () { + return e.apply(this, arguments) + } + })(), + }, + { + key: 'sendAsync', + value(e, t) { + e.length > 0 + ? this.enqueue({ + payload: { + id: (0, l.randomId)(), + batch: e.map(function (e) { + return (e.id = (0, l.randomId)()), e + }), + method: 'eth_batchRequest', + }, + cb: t, + }) + : this.enqueue({ payload: e, cb: t }) + }, + }, + { + key: 'sendFortmaticAsync', + value(e, t) { + this.enqueue({ payload: e, cb: t, isNative: !0 }) + }, + }, + { + key: 'send', + value(e, t) { + if ('string' == typeof e) return l.sendAsyncWrapper.call(this, e, t) + if (!t) { + console.warn( + 'Non-async web3 methods will be deprecated in web3 > 1.0, and are not supported by the Fortmatic provider. An async method to be used instead.' + ), + this.sendAsync(e, function () {}) + var r = {} + switch (e.method) { + case 'eth_accounts': + r = this.account ? [this.account] : [] + break + case 'eth_coinbase': + r = this.account + break + case 'net_version': + r = this.network || (this.options.API_KEY.startsWith('pk_live') ? 1 : 4) + break + case 'eth_uninstallFilter': + r = !0 + break + default: + r = {} + } + return { id: e.id, jsonrpc: e.jsonrpc, result: r } + } + this.sendAsync(e, t) + }, + }, + { + key: 'enqueue', + value(e) { + this.queue.push(e), this.overlayReady && this.dequeue() + }, + }, + { + key: 'dequeue', + value: (function () { + var e = (0, a.default)( + o.default.mark(function e() { + var t, + r, + n, + a = this + return o.default.wrap( + function (e) { + for (;;) + switch ((e.prev = e.next)) { + case 0: + if (0 !== this.queue.length) { + e.next = 2 + break + } + return e.abrupt('return') + case 2: + if (!(t = this.queue.shift())) { + e.next = 11 + break + } + return ( + (r = t.payload), + (n = t.cb), + (r.id = (0, l.randomId)()), + (e.next = 9), + this.postMessage( + t.isNative + ? this.postMessages.FORTMATIC_HANDLE_FORTMATIC_REQUEST + : this.postMessages.FORTMATIC_HANDLE_REQUEST, + t.payload + ) + ) + case 9: + r.batch && r.batch.length > 0 + ? (r.batch.forEach(function (e) { + a.requests[e.id] = { + parentId: r.id, + payload: e, + cb(e, t) { + var n = a.requests[r.id].batchResponse + if (e && e.response && !(0, l.findExistingResponse)(n, e.response.id)) + throw ( + (n.push({ + jsonrpc: '2.0', + id: e.response.id, + error: { code: e.response.code, message: e.response.message }, + }), + a.requests[r.id].cb(null, n), + e.response) + ) + if (t && t.result && !(0, l.findExistingResponse)(n, t.id)) return n.push(t) + throw new Error('Fortmatic: unexpected callback behavior') + }, + } + }), + (this.requests[r.id] = { payload: r, cb: n, batchResponse: [] })) + : (this.requests[r.id] = { payload: r, cb: n }), + this.dequeue() + case 11: + case 'end': + return e.stop() + } + }, + e, + this + ) + }) + ) + return function () { + return e.apply(this, arguments) + } + })(), + }, + { + key: 'postMessage', + value: (function () { + var e = (0, a.default)( + o.default.mark(function e(t, r) { + var n + return o.default.wrap( + function (e) { + for (;;) + switch ((e.prev = e.next)) { + case 0: + return (e.next = 2), this.overlay + case 2: + if (!(n = e.sent).iframe.contentWindow) { + e.next = 7 + break + } + n.iframe.contentWindow.postMessage({ msgType: t, payload: r }, '*'), (e.next = 8) + break + case 7: + throw new Error('Fortmatic: Modal is not ready.') + case 8: + case 'end': + return e.stop() + } + }, + e, + this + ) + }) + ) + return function (t, r) { + return e.apply(this, arguments) + } + })(), + }, + { + key: 'enable', + value() { + return l.sendAsyncWrapper.call(this, 'eth_accounts') + }, + }, + { + key: 'listenMessage', + value() { + var e = this + window.addEventListener('message', function (t) { + if (t.origin === e.fortmaticClient) { + var r = t.data.response ? t.data.response.id : null + switch (t.data.msgType) { + case e.postMessages.FORTMATIC_OVERLAY_READY: + ;(e.overlayReady = !0), e.dequeue() + break + case e.postMessages.FORTMATIC_HANDLE_RESPONSE: + try { + e.requests[r].cb(null, t.data.response) + var n = e.requests[r].parentId + n && + e.requests[n].payload.batch.length === e.requests[n].batchResponse.length && + e.requests[n].cb(null, e.requests[n].batchResponse), + 'eth_accounts' === e.requests[r].payload.method + ? (e.account = t.data.response.result[0]) + : 'eth_coinbase' === e.requests[r].payload.method + ? (e.account = t.data.response.result) + : 'net_version' === e.requests[r].payload.method && (e.network = t.data.response.result) + } catch (e) {} + ;(e.isLoggedIn = !0), e.dequeue() + break + case e.postMessages.FORTMATIC_HIDE_OVERLAY: + e.hideOverlay() + break + case e.postMessages.FORTMATIC_SHOW_OVERLAY: + e.showOverlay() + break + case e.postMessages.FORTMATIC_USER_LOGOUT: + ;(e.account = null), (e.network = null), (e.isLoggedIn = !1) + break + case e.postMessages.FORTMATIC_UNAUTHORIZED_API_KEY: + throw ( + ((e.overlayReady = !1), new Error('Given API key is not authorized to access the resource.')) + ) + case e.postMessages.FORTMATIC_USER_DENIED: + if (r) { + var o = + t.data.response && t.data.response.message + ? t.data.response.message + : 'Fortmatic: Modal was closed without executing action!', + a = t.data.response && t.data.response.code ? t.data.response.code : 1 + e.requests[r].cb({ message: o, code: a, response: t.data.response }) + } else + e.queue.forEach(function (e) { + return e.cb({ message: 'Fortmatic: Modal was closed without executing action!', code: 1 }) + }) + e.dequeue() + } + } + }) + }, + }, + ]), + e + ) + })() + t.default = f + }, + function (e, t, r) { + e.exports = r(7) + }, + function (e, t, r) { + var n = + (function () { + return this || ('object' == typeof self && self) + })() || Function('return this')(), + o = n.regeneratorRuntime && Object.getOwnPropertyNames(n).indexOf('regeneratorRuntime') >= 0, + a = o && n.regeneratorRuntime + if (((n.regeneratorRuntime = void 0), (e.exports = r(8)), o)) n.regeneratorRuntime = a + else + try { + delete n.regeneratorRuntime + } catch (e) { + n.regeneratorRuntime = void 0 + } + }, + function (e, t) { + !(function (t) { + var r, + n = Object.prototype, + o = n.hasOwnProperty, + a = 'function' == typeof Symbol ? Symbol : {}, + i = a.iterator || '@@iterator', + s = a.asyncIterator || '@@asyncIterator', + c = a.toStringTag || '@@toStringTag', + u = 'object' == typeof e, + l = t.regeneratorRuntime + if (l) u && (e.exports = l) + else { + ;(l = t.regeneratorRuntime = u ? e.exports : {}).wrap = _ + var f = 'suspendedStart', + d = 'suspendedYield', + h = 'executing', + p = 'completed', + m = {}, + y = {} + y[i] = function () { + return this + } + var v = Object.getPrototypeOf, + g = v && v(v(L([]))) + g && g !== n && o.call(g, i) && (y = g) + var b = (A.prototype = w.prototype = Object.create(y)) + ;(T.prototype = b.constructor = A), + (A.constructor = T), + (A[c] = T.displayName = 'GeneratorFunction'), + (l.isGeneratorFunction = function (e) { + var t = 'function' == typeof e && e.constructor + return !!t && (t === T || 'GeneratorFunction' === (t.displayName || t.name)) + }), + (l.mark = function (e) { + return ( + Object.setPrototypeOf + ? Object.setPrototypeOf(e, A) + : ((e.__proto__ = A), c in e || (e[c] = 'GeneratorFunction')), + (e.prototype = Object.create(b)), + e + ) + }), + (l.awrap = function (e) { + return { __await: e } + }), + O(R.prototype), + (R.prototype[s] = function () { + return this + }), + (l.AsyncIterator = R), + (l.async = function (e, t, r, n) { + var o = new R(_(e, t, r, n)) + return l.isGeneratorFunction(t) + ? o + : o.next().then(function (e) { + return e.done ? e.value : o.next() + }) + }), + O(b), + (b[c] = 'Generator'), + (b[i] = function () { + return this + }), + (b.toString = function () { + return '[object Generator]' + }), + (l.keys = function (e) { + var t = [] + for (var r in e) t.push(r) + return ( + t.reverse(), + function r() { + for (; t.length; ) { + var n = t.pop() + if (n in e) return (r.value = n), (r.done = !1), r + } + return (r.done = !0), r + } + ) + }), + (l.values = L), + (F.prototype = { + constructor: F, + reset(e) { + if ( + ((this.prev = 0), + (this.next = 0), + (this.sent = this._sent = r), + (this.done = !1), + (this.delegate = null), + (this.method = 'next'), + (this.arg = r), + this.tryEntries.forEach(M), + !e) + ) + for (var t in this) 't' === t.charAt(0) && o.call(this, t) && !isNaN(+t.slice(1)) && (this[t] = r) + }, + stop() { + this.done = !0 + var e = this.tryEntries[0].completion + if ('throw' === e.type) throw e.arg + return this.rval + }, + dispatchException(e) { + if (this.done) throw e + var t = this + function n(n, o) { + return (s.type = 'throw'), (s.arg = e), (t.next = n), o && ((t.method = 'next'), (t.arg = r)), !!o + } + for (var a = this.tryEntries.length - 1; a >= 0; --a) { + var i = this.tryEntries[a], + s = i.completion + if ('root' === i.tryLoc) return n('end') + if (i.tryLoc <= this.prev) { + var c = o.call(i, 'catchLoc'), + u = o.call(i, 'finallyLoc') + if (c && u) { + if (this.prev < i.catchLoc) return n(i.catchLoc, !0) + if (this.prev < i.finallyLoc) return n(i.finallyLoc) + } else if (c) { + if (this.prev < i.catchLoc) return n(i.catchLoc, !0) + } else { + if (!u) throw new Error('try statement without catch or finally') + if (this.prev < i.finallyLoc) return n(i.finallyLoc) + } + } + } + }, + abrupt(e, t) { + for (var r = this.tryEntries.length - 1; r >= 0; --r) { + var n = this.tryEntries[r] + if (n.tryLoc <= this.prev && o.call(n, 'finallyLoc') && this.prev < n.finallyLoc) { + var a = n + break + } + } + a && ('break' === e || 'continue' === e) && a.tryLoc <= t && t <= a.finallyLoc && (a = null) + var i = a ? a.completion : {} + return ( + (i.type = e), + (i.arg = t), + a ? ((this.method = 'next'), (this.next = a.finallyLoc), m) : this.complete(i) + ) + }, + complete(e, t) { + if ('throw' === e.type) throw e.arg + return ( + 'break' === e.type || 'continue' === e.type + ? (this.next = e.arg) + : 'return' === e.type + ? ((this.rval = this.arg = e.arg), (this.method = 'return'), (this.next = 'end')) + : 'normal' === e.type && t && (this.next = t), + m + ) + }, + finish(e) { + for (var t = this.tryEntries.length - 1; t >= 0; --t) { + var r = this.tryEntries[t] + if (r.finallyLoc === e) return this.complete(r.completion, r.afterLoc), M(r), m + } + }, + catch(e) { + for (var t = this.tryEntries.length - 1; t >= 0; --t) { + var r = this.tryEntries[t] + if (r.tryLoc === e) { + var n = r.completion + if ('throw' === n.type) { + var o = n.arg + M(r) + } + return o + } + } + throw new Error('illegal catch attempt') + }, + delegateYield(e, t, n) { + return ( + (this.delegate = { iterator: L(e), resultName: t, nextLoc: n }), + 'next' === this.method && (this.arg = r), + m + ) + }, + }) + } + function _(e, t, r, n) { + var o = t && t.prototype instanceof w ? t : w, + a = Object.create(o.prototype), + i = new F(n || []) + return ( + (a._invoke = (function (e, t, r) { + var n = f + return function (o, a) { + if (n === h) throw new Error('Generator is already running') + if (n === p) { + if ('throw' === o) throw a + return k() + } + for (r.method = o, r.arg = a; ; ) { + var i = r.delegate + if (i) { + var s = I(i, r) + if (s) { + if (s === m) continue + return s + } + } + if ('next' === r.method) r.sent = r._sent = r.arg + else if ('throw' === r.method) { + if (n === f) throw ((n = p), r.arg) + r.dispatchException(r.arg) + } else 'return' === r.method && r.abrupt('return', r.arg) + n = h + var c = E(e, t, r) + if ('normal' === c.type) { + if (((n = r.done ? p : d), c.arg === m)) continue + return { value: c.arg, done: r.done } + } + 'throw' === c.type && ((n = p), (r.method = 'throw'), (r.arg = c.arg)) + } + } + })(e, r, i)), + a + ) + } + function E(e, t, r) { + try { + return { type: 'normal', arg: e.call(t, r) } + } catch (e) { + return { type: 'throw', arg: e } + } + } + function w() {} + function T() {} + function A() {} + function O(e) { + ;['next', 'throw', 'return'].forEach(function (t) { + e[t] = function (e) { + return this._invoke(t, e) + } + }) + } + function R(e) { + var t + this._invoke = function (r, n) { + function a() { + return new Promise(function (t, a) { + !(function t(r, n, a, i) { + var s = E(e[r], e, n) + if ('throw' !== s.type) { + var c = s.arg, + u = c.value + return u && 'object' == typeof u && o.call(u, '__await') + ? Promise.resolve(u.__await).then( + function (e) { + t('next', e, a, i) + }, + function (e) { + t('throw', e, a, i) + } + ) + : Promise.resolve(u).then( + function (e) { + ;(c.value = e), a(c) + }, + function (e) { + return t('throw', e, a, i) + } + ) + } + i(s.arg) + })(r, n, t, a) + }) + } + return (t = t ? t.then(a, a) : a()) + } + } + function I(e, t) { + var n = e.iterator[t.method] + if (n === r) { + if (((t.delegate = null), 'throw' === t.method)) { + if (e.iterator.return && ((t.method = 'return'), (t.arg = r), I(e, t), 'throw' === t.method)) return m + ;(t.method = 'throw'), (t.arg = new TypeError("The iterator does not provide a 'throw' method")) + } + return m + } + var o = E(n, e.iterator, t.arg) + if ('throw' === o.type) return (t.method = 'throw'), (t.arg = o.arg), (t.delegate = null), m + var a = o.arg + return a + ? a.done + ? ((t[e.resultName] = a.value), + (t.next = e.nextLoc), + 'return' !== t.method && ((t.method = 'next'), (t.arg = r)), + (t.delegate = null), + m) + : a + : ((t.method = 'throw'), (t.arg = new TypeError('iterator result is not an object')), (t.delegate = null), m) + } + function x(e) { + var t = { tryLoc: e[0] } + 1 in e && (t.catchLoc = e[1]), 2 in e && ((t.finallyLoc = e[2]), (t.afterLoc = e[3])), this.tryEntries.push(t) + } + function M(e) { + var t = e.completion || {} + ;(t.type = 'normal'), delete t.arg, (e.completion = t) + } + function F(e) { + ;(this.tryEntries = [{ tryLoc: 'root' }]), e.forEach(x, this), this.reset(!0) + } + function L(e) { + if (e) { + var t = e[i] + if (t) return t.call(e) + if ('function' == typeof e.next) return e + if (!isNaN(e.length)) { + var n = -1, + a = function t() { + for (; ++n < e.length; ) if (o.call(e, n)) return (t.value = e[n]), (t.done = !1), t + return (t.value = r), (t.done = !0), t + } + return (a.next = a) + } + } + return { next: k } + } + function k() { + return { value: r, done: !0 } + } + })( + (function () { + return this || ('object' == typeof self && self) + })() || Function('return this')() + ) + }, + function (e, t) { + function r(e, t, r, n, o, a, i) { + try { + var s = e[a](i), + c = s.value + } catch (e) { + return void r(e) + } + s.done ? t(c) : Promise.resolve(c).then(n, o) + } + e.exports = function (e) { + return function () { + var t = this, + n = arguments + return new Promise(function (o, a) { + var i = e.apply(t, n) + function s(e) { + r(i, o, a, s, c, 'next', e) + } + function c(e) { + r(i, o, a, s, c, 'throw', e) + } + s(void 0) + }) + } + } + }, + function (e, t) { + function r(e, t) { + for (var r = 0; r < t.length; r++) { + var n = t[r] + ;(n.enumerable = n.enumerable || !1), + (n.configurable = !0), + 'value' in n && (n.writable = !0), + Object.defineProperty(e, n.key, n) + } + } + e.exports = function (e, t, n) { + return t && r(e.prototype, t), n && r(e, n), e + } + }, + function (e) { + e.exports = { + name: 'fortmatic', + version: '1.1.3', + description: 'Fortmatic Javascript SDK', + main: 'lib/fortmatic.js', + scripts: { + build: 'WEBPACK_ENV=production webpack', + 'build:dev': 'WEBPACK_ENV=development BABEL_ENV=development webpack --progress --colors --watch', + test: 'nyc --reporter=lcov --reporter=text-summary ava', + }, + author: 'Fortmatic (https://fortmatic.com/)', + license: 'MIT', + repository: { type: 'git', url: 'https://github.com/fortmatic/fortmatic-js' }, + keywords: ['Auth', 'Login', 'Web3', 'Crypto', 'Ethereum', 'MetaMask', 'Wallet', 'Blockchain', 'Dapp'], + homepage: 'https://www.fortmatic.com', + ava: { + require: ['@babel/register'], + files: ['test/**/*.spec.js'], + babel: { + testOptions: { + presets: ['@babel/env'], + plugins: ['@babel/plugin-proposal-function-bind', '@babel/plugin-transform-runtime'], + }, + }, + verbose: !0, + }, + nyc: { + all: !1, + 'check-coverage': !0, + 'per-file': !0, + lines: 80, + statements: 80, + functions: 80, + branches: 80, + include: ['src/**/*.js'], + exclude: ['*/style.js'], + require: [], + reporter: ['html', 'lcov'], + }, + dependencies: { '@babel/runtime': '7.3.4' }, + devDependencies: { + '@babel/core': '7.3.4', + '@babel/plugin-proposal-function-bind': '7.2.0', + '@babel/plugin-transform-modules-commonjs': '7.2.0', + '@babel/plugin-transform-runtime': '7.3.4', + '@babel/preset-env': '7.3.4', + '@babel/register': '7.0.0', + ava: '2.2.0', + 'babel-eslint': '10.0.1', + 'babel-loader': '8.0.5', + eslint: '5.9.0', + lodash: '4.17.11', + nyc: '13.1.0', + sinon: '7.1.1', + webpack: '4.26.1', + 'webpack-cli': '3.1.2', + }, + } + }, + function (e, t, r) { + t.css = + '\n .fortmatic-iframe {\n display: none;\n position: fixed;\n top: 0;\n right: 0;\n width: 100%;\n height: 100%;\n border: none;\n border-radius: 0;\n z-index: 2147483647;\n }\n' + }, +]) + +var fortmatic$1 = /*#__PURE__*/ Object.freeze( + /*#__PURE__*/ _mergeNamespaces( + { + __proto__: null, + default: fortmatic, + }, + [fortmatic] + ) +) + +// from routing-api (https://github.com/Uniswap/routing-api/blob/main/lib/handlers/quote/quote.ts#L243-L311) +function transformSwapRouteToGetQuoteResult(type, amount, _a) { + var e_1, _b + var quote = _a.quote, + quoteGasAdjusted = _a.quoteGasAdjusted, + route = _a.route, + estimatedGasUsed = _a.estimatedGasUsed, + estimatedGasUsedQuoteToken = _a.estimatedGasUsedQuoteToken, + estimatedGasUsedUSD = _a.estimatedGasUsedUSD, + gasPriceWei = _a.gasPriceWei, + methodParameters = _a.methodParameters, + blockNumber = _a.blockNumber + var routeResponse = [] + try { + for (var route_1 = __values(route), route_1_1 = route_1.next(); !route_1_1.done; route_1_1 = route_1.next()) { + var subRoute = route_1_1.value + var amount_1 = subRoute.amount, + quote_1 = subRoute.quote, + tokenPath = subRoute.tokenPath + if (subRoute.protocol === routerSdk.Protocol.V3) { + var pools = subRoute.route.pools + var curRoute = [] + for (var i = 0; i < pools.length; i++) { + var nextPool = pools[i] + var tokenIn = tokenPath[i] + var tokenOut = tokenPath[i + 1] + var edgeAmountIn = undefined + if (i === 0) { + edgeAmountIn = type === 'exactIn' ? amount_1.quotient.toString() : quote_1.quotient.toString() + } + var edgeAmountOut = undefined + if (i === pools.length - 1) { + edgeAmountOut = type === 'exactIn' ? quote_1.quotient.toString() : amount_1.quotient.toString() + } + curRoute.push({ + type: 'v3-pool', + tokenIn: { + chainId: tokenIn.chainId, + decimals: tokenIn.decimals, + address: tokenIn.address, + symbol: tokenIn.symbol, + }, + tokenOut: { + chainId: tokenOut.chainId, + decimals: tokenOut.decimals, + address: tokenOut.address, + symbol: tokenOut.symbol, + }, + fee: nextPool.fee.toString(), + liquidity: nextPool.liquidity.toString(), + sqrtRatioX96: nextPool.sqrtRatioX96.toString(), + tickCurrent: nextPool.tickCurrent.toString(), + amountIn: edgeAmountIn, + amountOut: edgeAmountOut, + }) + } + routeResponse.push(curRoute) + } else if (subRoute.protocol === routerSdk.Protocol.V2) { + var pools = subRoute.route.pairs + var curRoute = [] + for (var i = 0; i < pools.length; i++) { + var nextPool = pools[i] + var tokenIn = tokenPath[i] + var tokenOut = tokenPath[i + 1] + var edgeAmountIn = undefined + if (i === 0) { + edgeAmountIn = type === 'exactIn' ? amount_1.quotient.toString() : quote_1.quotient.toString() + } + var edgeAmountOut = undefined + if (i === pools.length - 1) { + edgeAmountOut = type === 'exactIn' ? quote_1.quotient.toString() : amount_1.quotient.toString() + } + var reserve0 = nextPool.reserve0 + var reserve1 = nextPool.reserve1 + curRoute.push({ + type: 'v2-pool', + tokenIn: { + chainId: tokenIn.chainId, + decimals: tokenIn.decimals, + address: tokenIn.address, + symbol: tokenIn.symbol, + }, + tokenOut: { + chainId: tokenOut.chainId, + decimals: tokenOut.decimals, + address: tokenOut.address, + symbol: tokenOut.symbol, + }, + reserve0: { + token: { + chainId: reserve0.currency.wrapped.chainId, + decimals: reserve0.currency.wrapped.decimals, + address: reserve0.currency.wrapped.address, + symbol: reserve0.currency.wrapped.symbol, + }, + quotient: reserve0.quotient.toString(), + }, + reserve1: { + token: { + chainId: reserve1.currency.wrapped.chainId, + decimals: reserve1.currency.wrapped.decimals, + address: reserve1.currency.wrapped.address, + symbol: reserve1.currency.wrapped.symbol, + }, + quotient: reserve1.quotient.toString(), + }, + amountIn: edgeAmountIn, + amountOut: edgeAmountOut, + }) + } + routeResponse.push(curRoute) + } + } + } catch (e_1_1) { + e_1 = { error: e_1_1 } + } finally { + try { + if (route_1_1 && !route_1_1.done && (_b = route_1.return)) _b.call(route_1) + } finally { + if (e_1) throw e_1.error + } + } + var result = { + methodParameters, + blockNumber: blockNumber.toString(), + amount: amount.quotient.toString(), + amountDecimals: amount.toExact(), + quote: quote.quotient.toString(), + quoteDecimals: quote.toExact(), + quoteGasAdjusted: quoteGasAdjusted.quotient.toString(), + quoteGasAdjustedDecimals: quoteGasAdjusted.toExact(), + gasUseEstimateQuote: estimatedGasUsedQuoteToken.quotient.toString(), + gasUseEstimateQuoteDecimals: estimatedGasUsedQuoteToken.toExact(), + gasUseEstimate: estimatedGasUsed.toString(), + gasUseEstimateUSD: estimatedGasUsedUSD.toExact(), + gasPriceWei: gasPriceWei.toString(), + route: routeResponse, + routeString: smartOrderRouter.routeAmountsToString(route), + } + return result +} + +/** Minimal set of dependencies for the router to work locally. */ +function buildDependencies() { + var e_1, _a + var dependenciesByChain = {} + try { + for ( + var AUTO_ROUTER_SUPPORTED_CHAINS_1 = __values(AUTO_ROUTER_SUPPORTED_CHAINS), + AUTO_ROUTER_SUPPORTED_CHAINS_1_1 = AUTO_ROUTER_SUPPORTED_CHAINS_1.next(); + !AUTO_ROUTER_SUPPORTED_CHAINS_1_1.done; + AUTO_ROUTER_SUPPORTED_CHAINS_1_1 = AUTO_ROUTER_SUPPORTED_CHAINS_1.next() + ) { + var chainId = AUTO_ROUTER_SUPPORTED_CHAINS_1_1.value + var provider = new ethers.providers.JsonRpcProvider(INFURA_NETWORK_URLS[chainId]) + dependenciesByChain[chainId] = { + chainId, + provider, + } + } + } catch (e_1_1) { + e_1 = { error: e_1_1 } + } finally { + try { + if ( + AUTO_ROUTER_SUPPORTED_CHAINS_1_1 && + !AUTO_ROUTER_SUPPORTED_CHAINS_1_1.done && + (_a = AUTO_ROUTER_SUPPORTED_CHAINS_1.return) + ) + _a.call(AUTO_ROUTER_SUPPORTED_CHAINS_1) + } finally { + if (e_1) throw e_1.error + } + } + return dependenciesByChain +} +var GAMetric = /** @class */ (function (_super) { + __extends(GAMetric, _super) + function GAMetric() { + return (_super !== null && _super.apply(this, arguments)) || this + } + GAMetric.prototype.putDimensions = function () { + return + } + GAMetric.prototype.putMetric = function (key, value, unit) { + ReactGA__default['default'].timing({ + category: 'Routing API', + variable: key + ' | ' + unit, + value, + label: 'client', + }) + } + return GAMetric +})(smartOrderRouter.IMetric) +smartOrderRouter.setGlobalMetric(new GAMetric()) + +var routerParamsByChain = buildDependencies() +function getQuote(_a, alphaRouterConfig) { + var type = _a.type, + chainId = _a.chainId, + tokenIn = _a.tokenIn, + tokenOut = _a.tokenOut, + amountRaw = _a.amount + return __awaiter(this, void 0, void 0, function () { + var params, router, currencyIn, currencyOut, baseCurrency, quoteCurrency, amount, swapRoute + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + params = routerParamsByChain[chainId] + if (!params) { + throw new Error('Router dependencies not initialized.') + } + router = new smartOrderRouter.AlphaRouter(params) + currencyIn = new sdkCore.Token(tokenIn.chainId, tokenIn.address, tokenIn.decimals, tokenIn.symbol) + currencyOut = new sdkCore.Token(tokenOut.chainId, tokenOut.address, tokenOut.decimals, tokenOut.symbol) + baseCurrency = type === 'exactIn' ? currencyIn : currencyOut + quoteCurrency = type === 'exactIn' ? currencyOut : currencyIn + amount = sdkCore.CurrencyAmount.fromRawAmount(baseCurrency, JSBI__default['default'].BigInt(amountRaw)) + return [ + 4 /*yield*/, + router.route( + amount, + quoteCurrency, + type === 'exactIn' ? sdkCore.TradeType.EXACT_INPUT : sdkCore.TradeType.EXACT_OUTPUT, + /*swapConfig=*/ undefined, + alphaRouterConfig + ), + ] + case 1: + swapRoute = _b.sent() + if (!swapRoute) throw new Error('Failed to generate client side quote') + return [2 /*return*/, { data: transformSwapRouteToGetQuoteResult(type, amount, swapRoute) }] + } + }) + }) +} + +var index = /*#__PURE__*/ Object.freeze({ + __proto__: null, + getQuote, +}) + +exports.Swap = Swap //# sourceMappingURL=snowflake.js.map From 093b7cfae077fca3dc63165feed6b5f65cb39acd Mon Sep 17 00:00:00 2001 From: David Wisner Date: Thu, 27 Jan 2022 21:02:38 +0800 Subject: [PATCH 06/15] update types and exports --- .eslintrc.json | 1 + dist2/snowflake.d.ts | 6 - dist2/snowflake.js | 3805 +++++++++++------ dist2/snowflake.js.map | 2 +- dist2/types/abis/types/commons.d.ts | 16 - .../ArgentWalletContract__factory.d.ts | 40 - .../ArgentWalletDetector__factory.d.ts | 46 - .../types/factories/Eip2612__factory.d.ts | 22 - .../factories/EnsPublicResolver__factory.d.ts | 52 - .../factories/EnsRegistrar__factory.d.ts | 52 - .../types/factories/Erc1155__factory.d.ts | 24 - .../factories/Erc20Bytes32__factory.d.ts | 19 - .../abis/types/factories/Erc20__factory.d.ts | 45 - .../abis/types/factories/Erc721__factory.d.ts | 22 - .../factories/GovernorBravo__factory.d.ts | 61 - .../abis/types/factories/Weth__factory.d.ts | 45 - dist2/types/abis/types/index.d.ts | 22 - .../types/components/AccountDetails/Copy.d.ts | 5 - .../AccountDetails/Transaction.d.ts | 4 - .../AccountDetails/TransactionSummary.d.ts | 5 - .../components/AccountDetails/index.d.ts | 10 - .../components/AddressInputPanel/index.d.ts | 9 - .../components/AnimatedDropdown/index.d.ts | 8 - dist2/types/components/Badge/RangeBadge.d.ts | 5 - dist2/types/components/Badge/index.d.ts | 17 - dist2/types/components/Blocklist/index.d.ts | 4 - dist2/types/components/Button/index.d.ts | 74 - dist2/types/components/Card/index.d.ts | 56 - dist2/types/components/Column/index.d.ts | 7 - dist2/types/components/Confetti/index.d.ts | 5 - .../CurrencyInputPanel/FiatValue.d.ts | 6 - .../components/CurrencyInputPanel/index.d.ts | 28 - .../types/components/CurrencyLogo/index.d.ts | 7 - dist2/types/components/DoubleLogo/index.d.ts | 10 - .../components/DowntimeWarning/index.d.ts | 5 - .../types/components/ErrorBoundary/index.d.ts | 11 - .../components/FeeSelector/FeeOption.d.ts | 13 - .../FeeSelector/FeeTierPercentageBadge.d.ts | 9 - dist2/types/components/FeeSelector/index.d.ts | 10 - .../types/components/FeeSelector/shared.d.ts | 8 - .../FormattedCurrencyAmount/index.d.ts | 6 - .../Header/ChainConnectivityWarning.d.ts | 2 - .../components/Header/HolidayOrnament.d.ts | 3 - .../components/Header/NetworkSelector.d.ts | 2 - dist2/types/components/Header/Polling.d.ts | 2 - dist2/types/components/Header/index.d.ts | 2 - .../components/HoverInlineText/index.d.ts | 11 - .../components/Identicon/StatusIcon.d.ts | 6 - dist2/types/components/Identicon/index.d.ts | 2 - .../InputStepCounter/InputStepCounter.d.ts | 19 - .../LiquidityChartRangeInput/Area.d.ts | 11 - .../LiquidityChartRangeInput/AxisBottom.d.ts | 7 - .../LiquidityChartRangeInput/Brush.d.ts | 14 - .../LiquidityChartRangeInput/Chart.d.ts | 5 - .../LiquidityChartRangeInput/Line.d.ts | 7 - .../LiquidityChartRangeInput/Zoom.d.ts | 14 - .../LiquidityChartRangeInput/hooks.d.ts | 14 - .../LiquidityChartRangeInput/index.d.ts | 18 - .../LiquidityChartRangeInput/svg.d.ts | 8 - .../LiquidityChartRangeInput/types.d.ts | 49 - dist2/types/components/ListLogo/index.d.ts | 7 - dist2/types/components/Loader/index.d.ts | 10 - dist2/types/components/Loader/styled.d.ts | 8 - dist2/types/components/Logo/index.d.ts | 10 - dist2/types/components/Menu/index.d.ts | 17 - dist2/types/components/Modal/index.d.ts | 11 - dist2/types/components/ModalViews/index.d.ts | 10 - .../components/NavigationTabs/index.d.ts | 17 - .../components/NetworkAlert/NetworkAlert.d.ts | 3 - .../components/NumericalInput/index.d.ts | 10 - dist2/types/components/Popover/index.d.ts | 9 - dist2/types/components/Popups/ClaimPopup.d.ts | 2 - .../Popups/FailedNetworkSwitchPopup.d.ts | 5 - dist2/types/components/Popups/PopupItem.d.ts | 7 - .../types/components/Popups/SurveyPopup.d.ts | 2 - .../components/Popups/TransactionPopup.d.ts | 4 - dist2/types/components/Popups/index.d.ts | 2 - .../types/components/PositionCard/Sushi.d.ts | 10 - dist2/types/components/PositionCard/V2.d.ts | 11 - .../types/components/PositionCard/index.d.ts | 20 - .../types/components/PositionList/index.d.ts | 9 - .../components/PositionListItem/index.d.ts | 15 - .../components/PositionPreview/index.d.ts | 12 - .../types/components/PrivacyPolicy/index.d.ts | 3 - .../types/components/ProgressSteps/index.d.ts | 17 - .../components/QuestionHelper/index.d.ts | 5 - .../RangeSelector/PresetsButtons.d.ts | 4 - .../types/components/RangeSelector/index.d.ts | 19 - dist2/types/components/RateToggle/index.d.ts | 7 - .../RoutingDiagram/RoutingDiagram.d.ts | 14 - dist2/types/components/Row/index.d.ts | 41 - .../components/SearchModal/BlockedToken.d.ts | 9 - .../components/SearchModal/CommonBases.d.ts | 7 - .../components/SearchModal/CurrencyList.d.ts | 16 - .../SearchModal/CurrencySearch.d.ts | 17 - .../SearchModal/CurrencySearchModal.d.ts | 20 - .../components/SearchModal/ImportList.d.ts | 11 - .../components/SearchModal/ImportRow.d.ts | 9 - .../components/SearchModal/ImportToken.d.ts | 12 - .../types/components/SearchModal/Manage.d.ts | 11 - .../components/SearchModal/ManageLists.d.ts | 8 - .../components/SearchModal/ManageTokens.d.ts | 7 - .../SearchModal/TokenImportCard.d.ts | 9 - .../types/components/SearchModal/styleds.d.ts | 18 - dist2/types/components/Settings/index.d.ts | 5 - dist2/types/components/Slider/index.d.ts | 11 - .../components/SwitchLocaleLink/index.d.ts | 2 - dist2/types/components/TextInput/index.d.ts | 15 - dist2/types/components/Toggle/ListToggle.d.ts | 9 - .../types/components/Toggle/MultiToggle.d.ts | 7 - dist2/types/components/Toggle/index.d.ts | 10 - .../components/TokenWarningModal/index.d.ts | 8 - dist2/types/components/Tooltip/index.d.ts | 16 - .../AnimatedConfirmation.d.ts | 2 - .../TransactionConfirmationModal/index.d.ts | 23 - .../components/TransactionSettings/index.d.ts | 7 - .../types/components/WalletModal/Option.d.ts | 13 - .../components/WalletModal/PendingView.d.ts | 8 - dist2/types/components/WalletModal/index.d.ts | 6 - .../components/Web3ReactManager/index.d.ts | 4 - dist2/types/components/Web3Status/index.d.ts | 2 - .../analytics/GoogleAnalyticsReporter.d.ts | 2 - dist2/types/components/analytics/index.d.ts | 1 - .../components/claim/AddressClaimModal.d.ts | 5 - dist2/types/components/claim/ClaimModal.d.ts | 2 - .../components/earn/ClaimRewardModal.d.ts | 9 - dist2/types/components/earn/PoolCard.d.ts | 5 - dist2/types/components/earn/StakingModal.d.ts | 11 - .../types/components/earn/UnstakingModal.d.ts | 9 - dist2/types/components/earn/styled.d.ts | 20 - .../components/swap/AdvancedSwapDetails.d.ts | 11 - .../components/swap/ConfirmSwapModal.d.ts | 17 - .../components/swap/FormattedPriceImpact.d.ts | 8 - .../components/swap/GasEstimateBadge.d.ts | 9 - dist2/types/components/swap/RouterLabel.d.ts | 3 - .../components/swap/SwapDetailsDropdown.d.ts | 13 - dist2/types/components/swap/SwapHeader.d.ts | 5 - .../components/swap/SwapModalFooter.d.ts | 9 - .../components/swap/SwapModalHeader.d.ts | 10 - dist2/types/components/swap/SwapRoute.d.ts | 10 - .../components/swap/SwapWarningDropdown.d.ts | 10 - dist2/types/components/swap/TradePrice.d.ts | 9 - .../swap/UnsupportedCurrencyFooter.d.ts | 6 - .../swap/confirmPriceImpactWithoutFee.d.ts | 7 - dist2/types/components/swap/styleds.d.ts | 454 -- .../types/components/vote/DelegateModal.d.ts | 8 - .../components/vote/ProposalEmptyState.d.ts | 2 - dist2/types/components/vote/VoteModal.d.ts | 10 - dist2/types/connectors/Fortmatic.d.ts | 9 - dist2/types/connectors/NetworkConnector.d.ts | 56 - dist2/types/connectors/index.d.ts | 16 - dist2/types/constants/addresses.d.ts | 32 - dist2/types/constants/chainInfo.d.ts | 52 - dist2/types/constants/chains.d.ts | 45 - dist2/types/constants/governance.d.ts | 7 - dist2/types/constants/lists.d.ts | 5 - dist2/types/constants/locales.d.ts | 601 --- dist2/types/constants/misc.d.ts | 21 - dist2/types/constants/proposals/index.d.ts | 4 - .../proposals/polygon_proposal_title.d.ts | 1 - .../uniswap_grants_proposal_description.d.ts | 1 - dist2/types/constants/routing.d.ts | 31 - dist2/types/constants/tokens.d.ts | 41 - dist2/types/constants/wallet.d.ts | 16 - dist2/types/hooks/Tokens.d.ts | 13 - dist2/types/hooks/useActiveLocale.d.ts | 11 - dist2/types/hooks/useActiveWeb3React.d.ts | 2 - dist2/types/hooks/useAddTokenToMetamask.d.ts | 5 - .../hooks/useAllCurrencyCombinations.d.ts | 2 - dist2/types/hooks/useAllV3Routes.d.ts | 11 - .../hooks/useApeModeQueryParamReader.d.ts | 1 - dist2/types/hooks/useApproveCallback.d.ts | 9 - .../types/hooks/useArgentWalletContract.d.ts | 2 - dist2/types/hooks/useAutoRouterSupported.d.ts | 1 - .../types/hooks/useAutoSlippageTolerance.d.ts | 6 - dist2/types/hooks/useBestTrade.d.ts | 12 - dist2/types/hooks/useBestV2Trade.d.ts | 11 - dist2/types/hooks/useClientSideV3Trade.d.ts | 12 - dist2/types/hooks/useColor.d.ts | 3 - dist2/types/hooks/useContract.d.ts | 30 - dist2/types/hooks/useCopyClipboard.d.ts | 1 - .../types/hooks/useCurrentBlockTimestamp.d.ts | 2 - dist2/types/hooks/useDebounce.d.ts | 5 - .../hooks/useDebouncedChangeHandler.d.ts | 7 - dist2/types/hooks/useDerivedPositionInfo.d.ts | 6 - dist2/types/hooks/useENS.d.ts | 9 - dist2/types/hooks/useENSAddress.d.ts | 7 - dist2/types/hooks/useENSAvatar.d.ts | 8 - dist2/types/hooks/useENSContentHash.d.ts | 7 - dist2/types/hooks/useENSName.d.ts | 8 - dist2/types/hooks/useERC20Permit.d.ts | 50 - dist2/types/hooks/useFeeTierDistribution.d.ts | 10 - dist2/types/hooks/useFetchListCallback.d.ts | 2 - dist2/types/hooks/useGasPrice.d.ts | 5 - dist2/types/hooks/useHttpLocations.d.ts | 1 - dist2/types/hooks/useIsArgentWallet.d.ts | 1 - dist2/types/hooks/useIsSwapUnsupported.d.ts | 7 - dist2/types/hooks/useIsTickAtLimit.d.ts | 5 - dist2/types/hooks/useIsWindowVisible.d.ts | 4 - dist2/types/hooks/useLast.d.ts | 6 - dist2/types/hooks/useLocationLinkProps.d.ts | 6 - dist2/types/hooks/useMachineTime.d.ts | 2 - .../hooks/useMonitoringEventCallback.d.ts | 4 - dist2/types/hooks/useOnClickOutside.d.ts | 2 - dist2/types/hooks/useParsedQueryString.d.ts | 3 - dist2/types/hooks/usePoolTickData.d.ts | 22 - dist2/types/hooks/usePools.d.ts | 10 - dist2/types/hooks/usePositionTokenURI.d.ts | 20 - dist2/types/hooks/usePrevious.d.ts | 1 - dist2/types/hooks/useSocksBalance.d.ts | 1 - dist2/types/hooks/useSwapCallArguments.d.ts | 21 - dist2/types/hooks/useSwapCallback.d.ts | 13 - dist2/types/hooks/useTheme.d.ts | 1 - dist2/types/hooks/useToggle.d.ts | 1 - dist2/types/hooks/useTokenAllowance.d.ts | 2 - .../hooks/useTokenInfoFromActiveList.d.ts | 5 - dist2/types/hooks/useTotalSupply.d.ts | 2 - dist2/types/hooks/useTransactionDeadline.d.ts | 2 - dist2/types/hooks/useUSDCPrice.d.ts | 16 - .../hooks/useV2LiquidityTokenPermit.d.ts | 6 - dist2/types/hooks/useV2Pairs.d.ts | 10 - dist2/types/hooks/useV3PositionFees.d.ts | 4 - dist2/types/hooks/useV3Positions.d.ts | 13 - dist2/types/hooks/useV3SwapPools.d.ts | 11 - dist2/types/hooks/useWindowSize.d.ts | 4 - dist2/types/hooks/useWrapCallback.d.ts | 29 - dist2/types/hooks/web3.d.ts | 6 - dist2/types/i18n.d.ts | 4 - dist2/types/index.d.ts | 5 - dist2/types/lib/assets/svg/Check.d.ts | 3 - dist2/types/lib/assets/svg/Expando.d.ts | 3 - dist2/types/lib/assets/svg/Logo.d.ts | 3 - dist2/types/lib/assets/svg/Spinner.d.ts | 3 - dist2/types/lib/components/ActionButton.d.ts | 29 - dist2/types/lib/components/Button.d.ts | 15 - dist2/types/lib/components/Column.d.ts | 13 - dist2/types/lib/components/Dialog.d.ts | 29 - .../lib/components/Error/ErrorBoundary.d.ts | 17 - .../lib/components/Error/ErrorDialog.d.ts | 18 - .../lib/components/Error/ErrorGenerator.d.ts | 2 - .../Error/WidgetsPropsValidator.d.ts | 3 - dist2/types/lib/components/Header.d.ts | 7 - dist2/types/lib/components/Input.d.ts | 15 - dist2/types/lib/components/Popover.d.ts | 11 - .../components/RecentTransactionsDialog.d.ts | 7 - dist2/types/lib/components/Row.d.ts | 14 - dist2/types/lib/components/Rule.d.ts | 5 - dist2/types/lib/components/Swap/Input.d.ts | 6 - dist2/types/lib/components/Swap/Output.d.ts | 23 - .../lib/components/Swap/ReverseButton.d.ts | 4 - .../lib/components/Swap/Settings.fixture.d.ts | 3 - .../Swap/Settings/MaxSlippageSelect.d.ts | 2 - .../components/Swap/Settings/MockToggle.d.ts | 2 - .../Swap/Settings/TransactionTtlInput.d.ts | 2 - .../components/Swap/Settings/components.d.ts | 10 - .../lib/components/Swap/Settings/index.d.ts | 5 - .../lib/components/Swap/Status.fixture.d.ts | 3 - .../components/Swap/Status/StatusDialog.d.ts | 8 - .../lib/components/Swap/Status/index.d.ts | 1 - .../lib/components/Swap/Summary.fixture.d.ts | 3 - .../lib/components/Swap/Summary/Details.d.ts | 9 - .../lib/components/Swap/Summary/Summary.d.ts | 9 - .../lib/components/Swap/Summary/index.d.ts | 11 - .../lib/components/Swap/Swap.fixture.d.ts | 3 - .../types/lib/components/Swap/SwapButton.d.ts | 6 - .../components/Swap/SwapPropValidator.d.ts | 5 - .../types/lib/components/Swap/TokenInput.d.ts | 13 - dist2/types/lib/components/Swap/Toolbar.d.ts | 4 - dist2/types/lib/components/Swap/index.d.ts | 17 - dist2/types/lib/components/Toggle.d.ts | 7 - dist2/types/lib/components/TokenImg.d.ts | 11 - .../lib/components/TokenSelect.fixture.d.ts | 2 - .../lib/components/TokenSelect/TokenBase.d.ts | 8 - .../components/TokenSelect/TokenButton.d.ts | 10 - .../components/TokenSelect/TokenOptions.d.ts | 12 - .../lib/components/TokenSelect/index.d.ts | 15 - dist2/types/lib/components/Tooltip.d.ts | 11 - dist2/types/lib/components/Wallet.d.ts | 4 - dist2/types/lib/components/Web3Provider.d.ts | 9 - dist2/types/lib/components/Widget.d.ts | 16 - dist2/types/lib/cosmos.decorator.d.ts | 4 - dist2/types/lib/cosmos/components/Widget.d.ts | 6 - dist2/types/lib/errors.d.ts | 3 - dist2/types/lib/hooks/multicall.d.ts | 9 - dist2/types/lib/hooks/swap/index.d.ts | 7 - .../hooks/swap/useSendSwapTransaction.d.ts | 16 - .../types/lib/hooks/swap/useSwapApproval.d.ts | 13 - .../types/lib/hooks/swap/useSwapCallback.d.ts | 19 - .../types/lib/hooks/swap/useSwapDefaults.d.ts | 9 - dist2/types/lib/hooks/swap/useSwapInfo.d.ts | 23 - dist2/types/lib/hooks/transactions/index.d.ts | 10 - .../types/lib/hooks/transactions/updater.d.ts | 24 - dist2/types/lib/hooks/useActiveWeb3React.d.ts | 12 - dist2/types/lib/hooks/useApproval.d.ts | 17 - dist2/types/lib/hooks/useBlockNumber.d.ts | 4 - dist2/types/lib/hooks/useCurrency.d.ts | 26 - dist2/types/lib/hooks/useCurrencyBalance.d.ts | 19 - dist2/types/lib/hooks/useCurrencyColor.d.ts | 3 - .../types/lib/hooks/useCurrencyLogoURIs.d.ts | 2 - dist2/types/lib/hooks/useInterval.d.ts | 7 - dist2/types/lib/hooks/useNativeCurrency.d.ts | 2 - dist2/types/lib/hooks/useNativeEvent.d.ts | 1 - dist2/types/lib/hooks/useScrollbar.d.ts | 5 - .../hooks/useTokenList/fetchTokenList.d.ts | 4 - .../lib/hooks/useTokenList/filtering.d.ts | 4 - dist2/types/lib/hooks/useTokenList/index.d.ts | 10 - .../lib/hooks/useTokenList/querying.d.ts | 2 - .../types/lib/hooks/useTokenList/sorting.d.ts | 7 - dist2/types/lib/hooks/useTokenList/utils.d.ts | 13 - .../hooks/useTokenList/validateTokenList.d.ts | 11 - dist2/types/lib/hooks/useUnmount.d.ts | 7 - dist2/types/lib/i18n.d.ts | 11 - dist2/types/lib/icons/index.d.ts | 80 - dist2/types/lib/index.d.ts | 6 - dist2/types/lib/state/atoms.d.ts | 11 - dist2/types/lib/state/multicall.d.ts | 47 - dist2/types/lib/state/settings.d.ts | 16 - dist2/types/lib/state/swap.d.ts | 29 - dist2/types/lib/state/transactions.d.ts | 54 - dist2/types/lib/state/web3.d.ts | 5 - dist2/types/lib/theme/dynamic.d.ts | 9 - dist2/types/lib/theme/index.d.ts | 40 - dist2/types/lib/theme/layer.d.ts | 5 - dist2/types/lib/theme/styled.d.ts | 8 - dist2/types/lib/theme/theme.d.ts | 31 - dist2/types/lib/theme/type.d.ts | 23 - dist2/types/lib/utils/contenthashToUri.d.ts | 6 - dist2/types/lib/utils/parseENSAddress.d.ts | 4 - .../lib/utils/resolveENSContentHash.d.ts | 7 - .../lib/utils/tryParseCurrencyAmount.d.ts | 6 - dist2/types/lib/utils/uriToHttp.d.ts | 5 - dist2/types/locales/af-ZA.d.ts | 593 --- dist2/types/locales/ar-SA.d.ts | 593 --- dist2/types/locales/ca-ES.d.ts | 593 --- dist2/types/locales/cs-CZ.d.ts | 593 --- dist2/types/locales/da-DK.d.ts | 593 --- dist2/types/locales/de-DE.d.ts | 593 --- dist2/types/locales/el-GR.d.ts | 593 --- dist2/types/locales/en-US.d.ts | 593 --- dist2/types/locales/es-ES.d.ts | 593 --- dist2/types/locales/fi-FI.d.ts | 593 --- dist2/types/locales/fr-FR.d.ts | 593 --- dist2/types/locales/he-IL.d.ts | 593 --- dist2/types/locales/hu-HU.d.ts | 593 --- dist2/types/locales/id-ID.d.ts | 593 --- dist2/types/locales/it-IT.d.ts | 593 --- dist2/types/locales/ja-JP.d.ts | 593 --- dist2/types/locales/ko-KR.d.ts | 593 --- dist2/types/locales/nl-NL.d.ts | 593 --- dist2/types/locales/no-NO.d.ts | 593 --- dist2/types/locales/pl-PL.d.ts | 593 --- dist2/types/locales/pseudo.d.ts | 1 - dist2/types/locales/pt-BR.d.ts | 593 --- dist2/types/locales/pt-PT.d.ts | 593 --- dist2/types/locales/ro-RO.d.ts | 593 --- dist2/types/locales/ru-RU.d.ts | 593 --- dist2/types/locales/sr-SP.d.ts | 593 --- dist2/types/locales/sv-SE.d.ts | 593 --- dist2/types/locales/sw-TZ.d.ts | 593 --- dist2/types/locales/tr-TR.d.ts | 593 --- dist2/types/locales/uk-UA.d.ts | 593 --- dist2/types/locales/vi-VN.d.ts | 593 --- dist2/types/locales/zh-CN.d.ts | 593 --- dist2/types/locales/zh-TW.d.ts | 593 --- dist2/types/pages/AddLiquidity/Review.d.ts | 17 - dist2/types/pages/AddLiquidity/index.d.ts | 8 - dist2/types/pages/AddLiquidity/redirects.d.ts | 7 - dist2/types/pages/AddLiquidity/styled.d.ts | 38 - .../AddLiquidityV2/ConfirmAddModalBottom.d.ts | 15 - .../pages/AddLiquidityV2/PoolPriceBar.d.ts | 11 - dist2/types/pages/AddLiquidityV2/index.d.ts | 6 - .../types/pages/AddLiquidityV2/redirects.d.ts | 6 - dist2/types/pages/App.d.ts | 2 - dist2/types/pages/AppBody.d.ts | 11 - .../CreateProposal/ProposalActionDetail.d.ts | 13 - .../ProposalActionSelector.d.ts | 17 - .../pages/CreateProposal/ProposalEditor.d.ts | 8 - .../ProposalSubmissionModal.d.ts | 6 - dist2/types/pages/CreateProposal/index.d.ts | 2 - dist2/types/pages/Earn/Countdown.d.ts | 4 - dist2/types/pages/Earn/Manage.d.ts | 6 - dist2/types/pages/Earn/index.d.ts | 2 - .../types/pages/MigrateV2/MigrateV2Pair.d.ts | 5 - dist2/types/pages/MigrateV2/index.d.ts | 2 - dist2/types/pages/Pool/CTACards.d.ts | 2 - dist2/types/pages/Pool/PositionPage.d.ts | 5 - dist2/types/pages/Pool/index.d.ts | 2 - dist2/types/pages/Pool/styleds.d.ts | 8 - dist2/types/pages/Pool/v2.d.ts | 2 - dist2/types/pages/PoolFinder/index.d.ts | 2 - dist2/types/pages/RemoveLiquidity/V3.d.ts | 5 - dist2/types/pages/RemoveLiquidity/index.d.ts | 6 - dist2/types/pages/RemoveLiquidity/styled.d.ts | 6 - dist2/types/pages/Swap/index.d.ts | 3 - dist2/types/pages/Swap/redirects.d.ts | 7 - dist2/types/pages/Vote/Landing.d.ts | 2 - dist2/types/pages/Vote/VotePage.d.ts | 6 - dist2/types/pages/Vote/index.d.ts | 2 - dist2/types/pages/Vote/styled.d.ts | 5 - dist2/types/pages/styled.d.ts | 1 - dist2/types/polyfills.d.ts | 1 - dist2/types/service-worker.d.ts | 2 - dist2/types/serviceWorkerRegistration.d.ts | 7 - dist2/types/setupTests.d.ts | 1 - dist2/types/snowflake.d.ts | 1 - dist2/types/state/application/hooks.d.ts | 15 - dist2/types/state/application/reducer.d.ts | 35 - dist2/types/state/application/updater.d.ts | 1 - dist2/types/state/burn/actions.d.ts | 10 - dist2/types/state/burn/hooks.d.ts | 19 - dist2/types/state/burn/reducer.d.ts | 7 - dist2/types/state/burn/v3/actions.d.ts | 3 - dist2/types/state/burn/v3/hooks.d.ts | 19 - dist2/types/state/burn/v3/reducer.d.ts | 5 - dist2/types/state/claim/hooks.d.ts | 18 - dist2/types/state/data/enhanced.d.ts | 42 - dist2/types/state/data/slice.d.ts | 16 - dist2/types/state/global/actions.d.ts | 1 - dist2/types/state/governance/hooks.d.ts | 57 - dist2/types/state/governance/types.d.ts | 5 - dist2/types/state/lists/actions.d.ts | 23 - dist2/types/state/lists/hooks.d.ts | 15 - dist2/types/state/lists/reducer.d.ts | 15 - dist2/types/state/lists/updater.d.ts | 1 - dist2/types/state/lists/wrappedTokenInfo.d.ts | 29 - dist2/types/state/logs/hooks.d.ts | 18 - dist2/types/state/logs/slice.d.ts | 42 - dist2/types/state/logs/updater.d.ts | 1 - dist2/types/state/logs/utils.d.ts | 21 - dist2/types/state/mint/actions.d.ts | 10 - dist2/types/state/mint/hooks.d.ts | 30 - dist2/types/state/mint/reducer.d.ts | 12 - dist2/types/state/mint/v3/actions.d.ts | 24 - dist2/types/state/mint/v3/hooks.d.ts | 54 - dist2/types/state/mint/v3/reducer.d.ts | 11 - dist2/types/state/mint/v3/utils.d.ts | 4 - .../clientSideSmartOrderRouter/constants.d.ts | 2 - .../dependencies.d.ts | 7 - .../clientSideSmartOrderRouter/index.d.ts | 23 - dist2/types/state/routing/slice.d.ts | 31 - dist2/types/state/routing/types.d.ts | 76 - .../state/routing/useRoutingAPITrade.d.ts | 12 - dist2/types/state/routing/utils.d.ts | 15 - dist2/types/state/stake/hooks.d.ts | 29 - dist2/types/state/swap/actions.d.ts | 23 - dist2/types/state/swap/hooks.d.ts | 34 - dist2/types/state/swap/reducer.d.ts | 14 - dist2/types/state/transactions/actions.d.ts | 154 - dist2/types/state/transactions/hooks.d.ts | 21 - dist2/types/state/transactions/reducer.d.ts | 18 - dist2/types/state/transactions/updater.d.ts | 2 - dist2/types/state/user/actions.d.ts | 54 - dist2/types/state/user/hooks.d.ts | 38 - dist2/types/state/user/reducer.d.ts | 30 - dist2/types/state/user/updater.d.ts | 1 - dist2/types/state/wallet/hooks.d.ts | 6 - .../types/theme/DarkModeQueryParamReader.d.ts | 2 - .../theme/RadialGradientByChainUpdater.d.ts | 1 - dist2/types/theme/components.d.ts | 37 - dist2/types/theme/index.d.ts | 50 - dist2/types/types/tuple.d.ts | 4 - dist2/types/types/v3/commons.d.ts | 16 - .../factories/IApproveAndCall__factory.d.ts | 41 - .../types/v3/factories/IERC1271__factory.d.ts | 22 - .../v3/factories/IERC20Metadata__factory.d.ts | 35 - .../v3/factories/IERC20Minimal__factory.d.ts | 35 - .../IERC20PermitAllowed__factory.d.ts | 18 - .../v3/factories/IERC721Permit__factory.d.ts | 35 - .../factories/IImmutableState__factory.d.ts | 18 - .../IMulticallExtended__factory.d.ts | 22 - .../v3/factories/IMulticall__factory.d.ts | 22 - .../INonfungiblePositionManager__factory.d.ts | 55 - ...gibleTokenPositionDescriptor__factory.d.ts | 22 - .../factories/IOracleSlippage__factory.d.ts | 18 - .../IPeripheryImmutableState__factory.d.ts | 18 - .../IPeripheryPaymentsExtended__factory.d.ts | 18 - ...pheryPaymentsWithFeeExtended__factory.d.ts | 18 - .../IPeripheryPaymentsWithFee__factory.d.ts | 18 - .../IPeripheryPayments__factory.d.ts | 18 - .../factories/IPoolInitializer__factory.d.ts | 22 - .../v3/factories/IQuoterV2__factory.d.ts | 41 - .../types/v3/factories/IQuoter__factory.d.ts | 22 - .../v3/factories/ISelfPermit__factory.d.ts | 18 - .../v3/factories/ISwapRouter02__factory.d.ts | 41 - .../v3/factories/ISwapRouter__factory.d.ts | 37 - .../v3/factories/ITickLens__factory.d.ts | 27 - .../factories/IUniswapV3Factory__factory.d.ts | 35 - .../IUniswapV3FlashCallback__factory.d.ts | 18 - .../IUniswapV3MintCallback__factory.d.ts | 18 - .../IUniswapV3PoolActions__factory.d.ts | 22 - .../IUniswapV3PoolDeployer__factory.d.ts | 18 - .../IUniswapV3PoolDerivedState__factory.d.ts | 22 - .../IUniswapV3PoolEvents__factory.d.ts | 18 - .../IUniswapV3PoolImmutables__factory.d.ts | 18 - .../IUniswapV3PoolOwnerActions__factory.d.ts | 22 - .../IUniswapV3PoolState__factory.d.ts | 22 - .../v3/factories/IUniswapV3Pool__factory.d.ts | 35 - .../factories/IUniswapV3Staker__factory.d.ts | 45 - .../IUniswapV3SwapCallback__factory.d.ts | 18 - .../v3/factories/IV2SwapRouter__factory.d.ts | 22 - .../v3/factories/IV3Migrator__factory.d.ts | 37 - .../v3/factories/IV3SwapRouter__factory.d.ts | 37 - .../types/v3/factories/IWETH9__factory.d.ts | 35 - .../v3/factories/NFTDescriptor__factory.d.ts | 37 - .../NonfungiblePositionManager__factory.d.ts | 83 - ...gibleTokenPositionDescriptor__factory.d.ts | 46 - .../v3/factories/PairFlash__factory.d.ts | 69 - .../types/v3/factories/QuoterV2__factory.d.ts | 61 - .../types/v3/factories/Quoter__factory.d.ts | 42 - .../v3/factories/SwapRouter02__factory.d.ts | 67 - .../v3/factories/SwapRouter__factory.d.ts | 67 - .../types/v3/factories/TickLens__factory.d.ts | 37 - .../UniswapInterfaceMulticall__factory.d.ts | 61 - .../factories/UniswapV3Factory__factory.d.ts | 52 - .../v3/factories/UniswapV3Pool__factory.d.ts | 52 - .../factories/UniswapV3Staker__factory.d.ts | 66 - .../v3/factories/V2SwapRouter__factory.d.ts | 28 - .../v3/factories/V3Migrator__factory.d.ts | 63 - .../v3/factories/V3SwapRouter__factory.d.ts | 43 - dist2/types/types/v3/index.d.ts | 114 - dist2/types/utils/anonymizeLink.d.ts | 6 - dist2/types/utils/approveAmountCalldata.d.ts | 6 - dist2/types/utils/calculateGasMargin.d.ts | 6 - .../types/utils/calculateSlippageAmount.d.ts | 3 - dist2/types/utils/chains.d.ts | 3 - .../utils/computeFiatValuePriceImpact.d.ts | 2 - .../types/utils/computeSurroundingTicks.d.ts | 3 - dist2/types/utils/computeUniCirculation.d.ts | 3 - .../types/utils/constructSameAddressMap.d.ts | 4 - dist2/types/utils/currencyId.d.ts | 2 - dist2/types/utils/formatCurrencyAmount.d.ts | 3 - dist2/types/utils/formatTickPrice.d.ts | 5 - dist2/types/utils/getExplorerLink.d.ts | 13 - dist2/types/utils/getLibrary.d.ts | 2 - dist2/types/utils/getTickToPrice.d.ts | 2 - .../types/utils/getTxOptimizedSwapRouter.d.ts | 23 - dist2/types/utils/index.d.ts | 11 - dist2/types/utils/isTradeBetter.d.ts | 3 - dist2/types/utils/isZero.d.ts | 5 - dist2/types/utils/listSort.d.ts | 1 - dist2/types/utils/listVersionLabel.d.ts | 2 - dist2/types/utils/maxAmountSpend.d.ts | 6 - dist2/types/utils/prices.d.ts | 7 - dist2/types/utils/retry.d.ts | 22 - dist2/types/utils/routes.d.ts | 1 - dist2/types/utils/safeNamehash.d.ts | 1 - dist2/types/utils/supportedChainId.d.ts | 5 - .../utils/swapErrorToUserReadableMessage.d.ts | 7 - dist2/types/utils/switchToNetwork.d.ts | 8 - .../types/utils/tradeMeaningFullyDiffer.d.ts | 7 - .../transformSwapRouteToGetQuoteResult.d.ts | 4 - dist2/types/utils/unwrappedToken.d.ts | 2 - dist2/types/utils/userAgent.d.ts | 2 - old-rollup.config.ts | 63 - package.json | 206 +- rollup.config.ts | 9 +- src/snowflake.ts | 1 - src/snowflake/Providers.tsx | 33 + src/snowflake/Updaters.tsx | 23 + src/snowflake/index.ts | 7 + tsconfig.json | 12 +- yarn.lock | 8 +- 562 files changed, 2696 insertions(+), 29104 deletions(-) delete mode 100644 dist2/snowflake.d.ts delete mode 100644 dist2/types/abis/types/commons.d.ts delete mode 100644 dist2/types/abis/types/factories/ArgentWalletContract__factory.d.ts delete mode 100644 dist2/types/abis/types/factories/ArgentWalletDetector__factory.d.ts delete mode 100644 dist2/types/abis/types/factories/Eip2612__factory.d.ts delete mode 100644 dist2/types/abis/types/factories/EnsPublicResolver__factory.d.ts delete mode 100644 dist2/types/abis/types/factories/EnsRegistrar__factory.d.ts delete mode 100644 dist2/types/abis/types/factories/Erc1155__factory.d.ts delete mode 100644 dist2/types/abis/types/factories/Erc20Bytes32__factory.d.ts delete mode 100644 dist2/types/abis/types/factories/Erc20__factory.d.ts delete mode 100644 dist2/types/abis/types/factories/Erc721__factory.d.ts delete mode 100644 dist2/types/abis/types/factories/GovernorBravo__factory.d.ts delete mode 100644 dist2/types/abis/types/factories/Weth__factory.d.ts delete mode 100644 dist2/types/abis/types/index.d.ts delete mode 100644 dist2/types/components/AccountDetails/Copy.d.ts delete mode 100644 dist2/types/components/AccountDetails/Transaction.d.ts delete mode 100644 dist2/types/components/AccountDetails/TransactionSummary.d.ts delete mode 100644 dist2/types/components/AccountDetails/index.d.ts delete mode 100644 dist2/types/components/AddressInputPanel/index.d.ts delete mode 100644 dist2/types/components/AnimatedDropdown/index.d.ts delete mode 100644 dist2/types/components/Badge/RangeBadge.d.ts delete mode 100644 dist2/types/components/Badge/index.d.ts delete mode 100644 dist2/types/components/Blocklist/index.d.ts delete mode 100644 dist2/types/components/Button/index.d.ts delete mode 100644 dist2/types/components/Card/index.d.ts delete mode 100644 dist2/types/components/Column/index.d.ts delete mode 100644 dist2/types/components/Confetti/index.d.ts delete mode 100644 dist2/types/components/CurrencyInputPanel/FiatValue.d.ts delete mode 100644 dist2/types/components/CurrencyInputPanel/index.d.ts delete mode 100644 dist2/types/components/CurrencyLogo/index.d.ts delete mode 100644 dist2/types/components/DoubleLogo/index.d.ts delete mode 100644 dist2/types/components/DowntimeWarning/index.d.ts delete mode 100644 dist2/types/components/ErrorBoundary/index.d.ts delete mode 100644 dist2/types/components/FeeSelector/FeeOption.d.ts delete mode 100644 dist2/types/components/FeeSelector/FeeTierPercentageBadge.d.ts delete mode 100644 dist2/types/components/FeeSelector/index.d.ts delete mode 100644 dist2/types/components/FeeSelector/shared.d.ts delete mode 100644 dist2/types/components/FormattedCurrencyAmount/index.d.ts delete mode 100644 dist2/types/components/Header/ChainConnectivityWarning.d.ts delete mode 100644 dist2/types/components/Header/HolidayOrnament.d.ts delete mode 100644 dist2/types/components/Header/NetworkSelector.d.ts delete mode 100644 dist2/types/components/Header/Polling.d.ts delete mode 100644 dist2/types/components/Header/index.d.ts delete mode 100644 dist2/types/components/HoverInlineText/index.d.ts delete mode 100644 dist2/types/components/Identicon/StatusIcon.d.ts delete mode 100644 dist2/types/components/Identicon/index.d.ts delete mode 100644 dist2/types/components/InputStepCounter/InputStepCounter.d.ts delete mode 100644 dist2/types/components/LiquidityChartRangeInput/Area.d.ts delete mode 100644 dist2/types/components/LiquidityChartRangeInput/AxisBottom.d.ts delete mode 100644 dist2/types/components/LiquidityChartRangeInput/Brush.d.ts delete mode 100644 dist2/types/components/LiquidityChartRangeInput/Chart.d.ts delete mode 100644 dist2/types/components/LiquidityChartRangeInput/Line.d.ts delete mode 100644 dist2/types/components/LiquidityChartRangeInput/Zoom.d.ts delete mode 100644 dist2/types/components/LiquidityChartRangeInput/hooks.d.ts delete mode 100644 dist2/types/components/LiquidityChartRangeInput/index.d.ts delete mode 100644 dist2/types/components/LiquidityChartRangeInput/svg.d.ts delete mode 100644 dist2/types/components/LiquidityChartRangeInput/types.d.ts delete mode 100644 dist2/types/components/ListLogo/index.d.ts delete mode 100644 dist2/types/components/Loader/index.d.ts delete mode 100644 dist2/types/components/Loader/styled.d.ts delete mode 100644 dist2/types/components/Logo/index.d.ts delete mode 100644 dist2/types/components/Menu/index.d.ts delete mode 100644 dist2/types/components/Modal/index.d.ts delete mode 100644 dist2/types/components/ModalViews/index.d.ts delete mode 100644 dist2/types/components/NavigationTabs/index.d.ts delete mode 100644 dist2/types/components/NetworkAlert/NetworkAlert.d.ts delete mode 100644 dist2/types/components/NumericalInput/index.d.ts delete mode 100644 dist2/types/components/Popover/index.d.ts delete mode 100644 dist2/types/components/Popups/ClaimPopup.d.ts delete mode 100644 dist2/types/components/Popups/FailedNetworkSwitchPopup.d.ts delete mode 100644 dist2/types/components/Popups/PopupItem.d.ts delete mode 100644 dist2/types/components/Popups/SurveyPopup.d.ts delete mode 100644 dist2/types/components/Popups/TransactionPopup.d.ts delete mode 100644 dist2/types/components/Popups/index.d.ts delete mode 100644 dist2/types/components/PositionCard/Sushi.d.ts delete mode 100644 dist2/types/components/PositionCard/V2.d.ts delete mode 100644 dist2/types/components/PositionCard/index.d.ts delete mode 100644 dist2/types/components/PositionList/index.d.ts delete mode 100644 dist2/types/components/PositionListItem/index.d.ts delete mode 100644 dist2/types/components/PositionPreview/index.d.ts delete mode 100644 dist2/types/components/PrivacyPolicy/index.d.ts delete mode 100644 dist2/types/components/ProgressSteps/index.d.ts delete mode 100644 dist2/types/components/QuestionHelper/index.d.ts delete mode 100644 dist2/types/components/RangeSelector/PresetsButtons.d.ts delete mode 100644 dist2/types/components/RangeSelector/index.d.ts delete mode 100644 dist2/types/components/RateToggle/index.d.ts delete mode 100644 dist2/types/components/RoutingDiagram/RoutingDiagram.d.ts delete mode 100644 dist2/types/components/Row/index.d.ts delete mode 100644 dist2/types/components/SearchModal/BlockedToken.d.ts delete mode 100644 dist2/types/components/SearchModal/CommonBases.d.ts delete mode 100644 dist2/types/components/SearchModal/CurrencyList.d.ts delete mode 100644 dist2/types/components/SearchModal/CurrencySearch.d.ts delete mode 100644 dist2/types/components/SearchModal/CurrencySearchModal.d.ts delete mode 100644 dist2/types/components/SearchModal/ImportList.d.ts delete mode 100644 dist2/types/components/SearchModal/ImportRow.d.ts delete mode 100644 dist2/types/components/SearchModal/ImportToken.d.ts delete mode 100644 dist2/types/components/SearchModal/Manage.d.ts delete mode 100644 dist2/types/components/SearchModal/ManageLists.d.ts delete mode 100644 dist2/types/components/SearchModal/ManageTokens.d.ts delete mode 100644 dist2/types/components/SearchModal/TokenImportCard.d.ts delete mode 100644 dist2/types/components/SearchModal/styleds.d.ts delete mode 100644 dist2/types/components/Settings/index.d.ts delete mode 100644 dist2/types/components/Slider/index.d.ts delete mode 100644 dist2/types/components/SwitchLocaleLink/index.d.ts delete mode 100644 dist2/types/components/TextInput/index.d.ts delete mode 100644 dist2/types/components/Toggle/ListToggle.d.ts delete mode 100644 dist2/types/components/Toggle/MultiToggle.d.ts delete mode 100644 dist2/types/components/Toggle/index.d.ts delete mode 100644 dist2/types/components/TokenWarningModal/index.d.ts delete mode 100644 dist2/types/components/Tooltip/index.d.ts delete mode 100644 dist2/types/components/TransactionConfirmationModal/AnimatedConfirmation.d.ts delete mode 100644 dist2/types/components/TransactionConfirmationModal/index.d.ts delete mode 100644 dist2/types/components/TransactionSettings/index.d.ts delete mode 100644 dist2/types/components/WalletModal/Option.d.ts delete mode 100644 dist2/types/components/WalletModal/PendingView.d.ts delete mode 100644 dist2/types/components/WalletModal/index.d.ts delete mode 100644 dist2/types/components/Web3ReactManager/index.d.ts delete mode 100644 dist2/types/components/Web3Status/index.d.ts delete mode 100644 dist2/types/components/analytics/GoogleAnalyticsReporter.d.ts delete mode 100644 dist2/types/components/analytics/index.d.ts delete mode 100644 dist2/types/components/claim/AddressClaimModal.d.ts delete mode 100644 dist2/types/components/claim/ClaimModal.d.ts delete mode 100644 dist2/types/components/earn/ClaimRewardModal.d.ts delete mode 100644 dist2/types/components/earn/PoolCard.d.ts delete mode 100644 dist2/types/components/earn/StakingModal.d.ts delete mode 100644 dist2/types/components/earn/UnstakingModal.d.ts delete mode 100644 dist2/types/components/earn/styled.d.ts delete mode 100644 dist2/types/components/swap/AdvancedSwapDetails.d.ts delete mode 100644 dist2/types/components/swap/ConfirmSwapModal.d.ts delete mode 100644 dist2/types/components/swap/FormattedPriceImpact.d.ts delete mode 100644 dist2/types/components/swap/GasEstimateBadge.d.ts delete mode 100644 dist2/types/components/swap/RouterLabel.d.ts delete mode 100644 dist2/types/components/swap/SwapDetailsDropdown.d.ts delete mode 100644 dist2/types/components/swap/SwapHeader.d.ts delete mode 100644 dist2/types/components/swap/SwapModalFooter.d.ts delete mode 100644 dist2/types/components/swap/SwapModalHeader.d.ts delete mode 100644 dist2/types/components/swap/SwapRoute.d.ts delete mode 100644 dist2/types/components/swap/SwapWarningDropdown.d.ts delete mode 100644 dist2/types/components/swap/TradePrice.d.ts delete mode 100644 dist2/types/components/swap/UnsupportedCurrencyFooter.d.ts delete mode 100644 dist2/types/components/swap/confirmPriceImpactWithoutFee.d.ts delete mode 100644 dist2/types/components/swap/styleds.d.ts delete mode 100644 dist2/types/components/vote/DelegateModal.d.ts delete mode 100644 dist2/types/components/vote/ProposalEmptyState.d.ts delete mode 100644 dist2/types/components/vote/VoteModal.d.ts delete mode 100644 dist2/types/connectors/Fortmatic.d.ts delete mode 100644 dist2/types/connectors/NetworkConnector.d.ts delete mode 100644 dist2/types/connectors/index.d.ts delete mode 100644 dist2/types/constants/addresses.d.ts delete mode 100644 dist2/types/constants/chainInfo.d.ts delete mode 100644 dist2/types/constants/chains.d.ts delete mode 100644 dist2/types/constants/governance.d.ts delete mode 100644 dist2/types/constants/lists.d.ts delete mode 100644 dist2/types/constants/locales.d.ts delete mode 100644 dist2/types/constants/misc.d.ts delete mode 100644 dist2/types/constants/proposals/index.d.ts delete mode 100644 dist2/types/constants/proposals/polygon_proposal_title.d.ts delete mode 100644 dist2/types/constants/proposals/uniswap_grants_proposal_description.d.ts delete mode 100644 dist2/types/constants/routing.d.ts delete mode 100644 dist2/types/constants/tokens.d.ts delete mode 100644 dist2/types/constants/wallet.d.ts delete mode 100644 dist2/types/hooks/Tokens.d.ts delete mode 100644 dist2/types/hooks/useActiveLocale.d.ts delete mode 100644 dist2/types/hooks/useActiveWeb3React.d.ts delete mode 100644 dist2/types/hooks/useAddTokenToMetamask.d.ts delete mode 100644 dist2/types/hooks/useAllCurrencyCombinations.d.ts delete mode 100644 dist2/types/hooks/useAllV3Routes.d.ts delete mode 100644 dist2/types/hooks/useApeModeQueryParamReader.d.ts delete mode 100644 dist2/types/hooks/useApproveCallback.d.ts delete mode 100644 dist2/types/hooks/useArgentWalletContract.d.ts delete mode 100644 dist2/types/hooks/useAutoRouterSupported.d.ts delete mode 100644 dist2/types/hooks/useAutoSlippageTolerance.d.ts delete mode 100644 dist2/types/hooks/useBestTrade.d.ts delete mode 100644 dist2/types/hooks/useBestV2Trade.d.ts delete mode 100644 dist2/types/hooks/useClientSideV3Trade.d.ts delete mode 100644 dist2/types/hooks/useColor.d.ts delete mode 100644 dist2/types/hooks/useContract.d.ts delete mode 100644 dist2/types/hooks/useCopyClipboard.d.ts delete mode 100644 dist2/types/hooks/useCurrentBlockTimestamp.d.ts delete mode 100644 dist2/types/hooks/useDebounce.d.ts delete mode 100644 dist2/types/hooks/useDebouncedChangeHandler.d.ts delete mode 100644 dist2/types/hooks/useDerivedPositionInfo.d.ts delete mode 100644 dist2/types/hooks/useENS.d.ts delete mode 100644 dist2/types/hooks/useENSAddress.d.ts delete mode 100644 dist2/types/hooks/useENSAvatar.d.ts delete mode 100644 dist2/types/hooks/useENSContentHash.d.ts delete mode 100644 dist2/types/hooks/useENSName.d.ts delete mode 100644 dist2/types/hooks/useERC20Permit.d.ts delete mode 100644 dist2/types/hooks/useFeeTierDistribution.d.ts delete mode 100644 dist2/types/hooks/useFetchListCallback.d.ts delete mode 100644 dist2/types/hooks/useGasPrice.d.ts delete mode 100644 dist2/types/hooks/useHttpLocations.d.ts delete mode 100644 dist2/types/hooks/useIsArgentWallet.d.ts delete mode 100644 dist2/types/hooks/useIsSwapUnsupported.d.ts delete mode 100644 dist2/types/hooks/useIsTickAtLimit.d.ts delete mode 100644 dist2/types/hooks/useIsWindowVisible.d.ts delete mode 100644 dist2/types/hooks/useLast.d.ts delete mode 100644 dist2/types/hooks/useLocationLinkProps.d.ts delete mode 100644 dist2/types/hooks/useMachineTime.d.ts delete mode 100644 dist2/types/hooks/useMonitoringEventCallback.d.ts delete mode 100644 dist2/types/hooks/useOnClickOutside.d.ts delete mode 100644 dist2/types/hooks/useParsedQueryString.d.ts delete mode 100644 dist2/types/hooks/usePoolTickData.d.ts delete mode 100644 dist2/types/hooks/usePools.d.ts delete mode 100644 dist2/types/hooks/usePositionTokenURI.d.ts delete mode 100644 dist2/types/hooks/usePrevious.d.ts delete mode 100644 dist2/types/hooks/useSocksBalance.d.ts delete mode 100644 dist2/types/hooks/useSwapCallArguments.d.ts delete mode 100644 dist2/types/hooks/useSwapCallback.d.ts delete mode 100644 dist2/types/hooks/useTheme.d.ts delete mode 100644 dist2/types/hooks/useToggle.d.ts delete mode 100644 dist2/types/hooks/useTokenAllowance.d.ts delete mode 100644 dist2/types/hooks/useTokenInfoFromActiveList.d.ts delete mode 100644 dist2/types/hooks/useTotalSupply.d.ts delete mode 100644 dist2/types/hooks/useTransactionDeadline.d.ts delete mode 100644 dist2/types/hooks/useUSDCPrice.d.ts delete mode 100644 dist2/types/hooks/useV2LiquidityTokenPermit.d.ts delete mode 100644 dist2/types/hooks/useV2Pairs.d.ts delete mode 100644 dist2/types/hooks/useV3PositionFees.d.ts delete mode 100644 dist2/types/hooks/useV3Positions.d.ts delete mode 100644 dist2/types/hooks/useV3SwapPools.d.ts delete mode 100644 dist2/types/hooks/useWindowSize.d.ts delete mode 100644 dist2/types/hooks/useWrapCallback.d.ts delete mode 100644 dist2/types/hooks/web3.d.ts delete mode 100644 dist2/types/i18n.d.ts delete mode 100644 dist2/types/index.d.ts delete mode 100644 dist2/types/lib/assets/svg/Check.d.ts delete mode 100644 dist2/types/lib/assets/svg/Expando.d.ts delete mode 100644 dist2/types/lib/assets/svg/Logo.d.ts delete mode 100644 dist2/types/lib/assets/svg/Spinner.d.ts delete mode 100644 dist2/types/lib/components/ActionButton.d.ts delete mode 100644 dist2/types/lib/components/Button.d.ts delete mode 100644 dist2/types/lib/components/Column.d.ts delete mode 100644 dist2/types/lib/components/Dialog.d.ts delete mode 100644 dist2/types/lib/components/Error/ErrorBoundary.d.ts delete mode 100644 dist2/types/lib/components/Error/ErrorDialog.d.ts delete mode 100644 dist2/types/lib/components/Error/ErrorGenerator.d.ts delete mode 100644 dist2/types/lib/components/Error/WidgetsPropsValidator.d.ts delete mode 100644 dist2/types/lib/components/Header.d.ts delete mode 100644 dist2/types/lib/components/Input.d.ts delete mode 100644 dist2/types/lib/components/Popover.d.ts delete mode 100644 dist2/types/lib/components/RecentTransactionsDialog.d.ts delete mode 100644 dist2/types/lib/components/Row.d.ts delete mode 100644 dist2/types/lib/components/Rule.d.ts delete mode 100644 dist2/types/lib/components/Swap/Input.d.ts delete mode 100644 dist2/types/lib/components/Swap/Output.d.ts delete mode 100644 dist2/types/lib/components/Swap/ReverseButton.d.ts delete mode 100644 dist2/types/lib/components/Swap/Settings.fixture.d.ts delete mode 100644 dist2/types/lib/components/Swap/Settings/MaxSlippageSelect.d.ts delete mode 100644 dist2/types/lib/components/Swap/Settings/MockToggle.d.ts delete mode 100644 dist2/types/lib/components/Swap/Settings/TransactionTtlInput.d.ts delete mode 100644 dist2/types/lib/components/Swap/Settings/components.d.ts delete mode 100644 dist2/types/lib/components/Swap/Settings/index.d.ts delete mode 100644 dist2/types/lib/components/Swap/Status.fixture.d.ts delete mode 100644 dist2/types/lib/components/Swap/Status/StatusDialog.d.ts delete mode 100644 dist2/types/lib/components/Swap/Status/index.d.ts delete mode 100644 dist2/types/lib/components/Swap/Summary.fixture.d.ts delete mode 100644 dist2/types/lib/components/Swap/Summary/Details.d.ts delete mode 100644 dist2/types/lib/components/Swap/Summary/Summary.d.ts delete mode 100644 dist2/types/lib/components/Swap/Summary/index.d.ts delete mode 100644 dist2/types/lib/components/Swap/Swap.fixture.d.ts delete mode 100644 dist2/types/lib/components/Swap/SwapButton.d.ts delete mode 100644 dist2/types/lib/components/Swap/SwapPropValidator.d.ts delete mode 100644 dist2/types/lib/components/Swap/TokenInput.d.ts delete mode 100644 dist2/types/lib/components/Swap/Toolbar.d.ts delete mode 100644 dist2/types/lib/components/Swap/index.d.ts delete mode 100644 dist2/types/lib/components/Toggle.d.ts delete mode 100644 dist2/types/lib/components/TokenImg.d.ts delete mode 100644 dist2/types/lib/components/TokenSelect.fixture.d.ts delete mode 100644 dist2/types/lib/components/TokenSelect/TokenBase.d.ts delete mode 100644 dist2/types/lib/components/TokenSelect/TokenButton.d.ts delete mode 100644 dist2/types/lib/components/TokenSelect/TokenOptions.d.ts delete mode 100644 dist2/types/lib/components/TokenSelect/index.d.ts delete mode 100644 dist2/types/lib/components/Tooltip.d.ts delete mode 100644 dist2/types/lib/components/Wallet.d.ts delete mode 100644 dist2/types/lib/components/Web3Provider.d.ts delete mode 100644 dist2/types/lib/components/Widget.d.ts delete mode 100644 dist2/types/lib/cosmos.decorator.d.ts delete mode 100644 dist2/types/lib/cosmos/components/Widget.d.ts delete mode 100644 dist2/types/lib/errors.d.ts delete mode 100644 dist2/types/lib/hooks/multicall.d.ts delete mode 100644 dist2/types/lib/hooks/swap/index.d.ts delete mode 100644 dist2/types/lib/hooks/swap/useSendSwapTransaction.d.ts delete mode 100644 dist2/types/lib/hooks/swap/useSwapApproval.d.ts delete mode 100644 dist2/types/lib/hooks/swap/useSwapCallback.d.ts delete mode 100644 dist2/types/lib/hooks/swap/useSwapDefaults.d.ts delete mode 100644 dist2/types/lib/hooks/swap/useSwapInfo.d.ts delete mode 100644 dist2/types/lib/hooks/transactions/index.d.ts delete mode 100644 dist2/types/lib/hooks/transactions/updater.d.ts delete mode 100644 dist2/types/lib/hooks/useActiveWeb3React.d.ts delete mode 100644 dist2/types/lib/hooks/useApproval.d.ts delete mode 100644 dist2/types/lib/hooks/useBlockNumber.d.ts delete mode 100644 dist2/types/lib/hooks/useCurrency.d.ts delete mode 100644 dist2/types/lib/hooks/useCurrencyBalance.d.ts delete mode 100644 dist2/types/lib/hooks/useCurrencyColor.d.ts delete mode 100644 dist2/types/lib/hooks/useCurrencyLogoURIs.d.ts delete mode 100644 dist2/types/lib/hooks/useInterval.d.ts delete mode 100644 dist2/types/lib/hooks/useNativeCurrency.d.ts delete mode 100644 dist2/types/lib/hooks/useNativeEvent.d.ts delete mode 100644 dist2/types/lib/hooks/useScrollbar.d.ts delete mode 100644 dist2/types/lib/hooks/useTokenList/fetchTokenList.d.ts delete mode 100644 dist2/types/lib/hooks/useTokenList/filtering.d.ts delete mode 100644 dist2/types/lib/hooks/useTokenList/index.d.ts delete mode 100644 dist2/types/lib/hooks/useTokenList/querying.d.ts delete mode 100644 dist2/types/lib/hooks/useTokenList/sorting.d.ts delete mode 100644 dist2/types/lib/hooks/useTokenList/utils.d.ts delete mode 100644 dist2/types/lib/hooks/useTokenList/validateTokenList.d.ts delete mode 100644 dist2/types/lib/hooks/useUnmount.d.ts delete mode 100644 dist2/types/lib/i18n.d.ts delete mode 100644 dist2/types/lib/icons/index.d.ts delete mode 100644 dist2/types/lib/index.d.ts delete mode 100644 dist2/types/lib/state/atoms.d.ts delete mode 100644 dist2/types/lib/state/multicall.d.ts delete mode 100644 dist2/types/lib/state/settings.d.ts delete mode 100644 dist2/types/lib/state/swap.d.ts delete mode 100644 dist2/types/lib/state/transactions.d.ts delete mode 100644 dist2/types/lib/state/web3.d.ts delete mode 100644 dist2/types/lib/theme/dynamic.d.ts delete mode 100644 dist2/types/lib/theme/index.d.ts delete mode 100644 dist2/types/lib/theme/layer.d.ts delete mode 100644 dist2/types/lib/theme/styled.d.ts delete mode 100644 dist2/types/lib/theme/theme.d.ts delete mode 100644 dist2/types/lib/theme/type.d.ts delete mode 100644 dist2/types/lib/utils/contenthashToUri.d.ts delete mode 100644 dist2/types/lib/utils/parseENSAddress.d.ts delete mode 100644 dist2/types/lib/utils/resolveENSContentHash.d.ts delete mode 100644 dist2/types/lib/utils/tryParseCurrencyAmount.d.ts delete mode 100644 dist2/types/lib/utils/uriToHttp.d.ts delete mode 100644 dist2/types/locales/af-ZA.d.ts delete mode 100644 dist2/types/locales/ar-SA.d.ts delete mode 100644 dist2/types/locales/ca-ES.d.ts delete mode 100644 dist2/types/locales/cs-CZ.d.ts delete mode 100644 dist2/types/locales/da-DK.d.ts delete mode 100644 dist2/types/locales/de-DE.d.ts delete mode 100644 dist2/types/locales/el-GR.d.ts delete mode 100644 dist2/types/locales/en-US.d.ts delete mode 100644 dist2/types/locales/es-ES.d.ts delete mode 100644 dist2/types/locales/fi-FI.d.ts delete mode 100644 dist2/types/locales/fr-FR.d.ts delete mode 100644 dist2/types/locales/he-IL.d.ts delete mode 100644 dist2/types/locales/hu-HU.d.ts delete mode 100644 dist2/types/locales/id-ID.d.ts delete mode 100644 dist2/types/locales/it-IT.d.ts delete mode 100644 dist2/types/locales/ja-JP.d.ts delete mode 100644 dist2/types/locales/ko-KR.d.ts delete mode 100644 dist2/types/locales/nl-NL.d.ts delete mode 100644 dist2/types/locales/no-NO.d.ts delete mode 100644 dist2/types/locales/pl-PL.d.ts delete mode 100644 dist2/types/locales/pseudo.d.ts delete mode 100644 dist2/types/locales/pt-BR.d.ts delete mode 100644 dist2/types/locales/pt-PT.d.ts delete mode 100644 dist2/types/locales/ro-RO.d.ts delete mode 100644 dist2/types/locales/ru-RU.d.ts delete mode 100644 dist2/types/locales/sr-SP.d.ts delete mode 100644 dist2/types/locales/sv-SE.d.ts delete mode 100644 dist2/types/locales/sw-TZ.d.ts delete mode 100644 dist2/types/locales/tr-TR.d.ts delete mode 100644 dist2/types/locales/uk-UA.d.ts delete mode 100644 dist2/types/locales/vi-VN.d.ts delete mode 100644 dist2/types/locales/zh-CN.d.ts delete mode 100644 dist2/types/locales/zh-TW.d.ts delete mode 100644 dist2/types/pages/AddLiquidity/Review.d.ts delete mode 100644 dist2/types/pages/AddLiquidity/index.d.ts delete mode 100644 dist2/types/pages/AddLiquidity/redirects.d.ts delete mode 100644 dist2/types/pages/AddLiquidity/styled.d.ts delete mode 100644 dist2/types/pages/AddLiquidityV2/ConfirmAddModalBottom.d.ts delete mode 100644 dist2/types/pages/AddLiquidityV2/PoolPriceBar.d.ts delete mode 100644 dist2/types/pages/AddLiquidityV2/index.d.ts delete mode 100644 dist2/types/pages/AddLiquidityV2/redirects.d.ts delete mode 100644 dist2/types/pages/App.d.ts delete mode 100644 dist2/types/pages/AppBody.d.ts delete mode 100644 dist2/types/pages/CreateProposal/ProposalActionDetail.d.ts delete mode 100644 dist2/types/pages/CreateProposal/ProposalActionSelector.d.ts delete mode 100644 dist2/types/pages/CreateProposal/ProposalEditor.d.ts delete mode 100644 dist2/types/pages/CreateProposal/ProposalSubmissionModal.d.ts delete mode 100644 dist2/types/pages/CreateProposal/index.d.ts delete mode 100644 dist2/types/pages/Earn/Countdown.d.ts delete mode 100644 dist2/types/pages/Earn/Manage.d.ts delete mode 100644 dist2/types/pages/Earn/index.d.ts delete mode 100644 dist2/types/pages/MigrateV2/MigrateV2Pair.d.ts delete mode 100644 dist2/types/pages/MigrateV2/index.d.ts delete mode 100644 dist2/types/pages/Pool/CTACards.d.ts delete mode 100644 dist2/types/pages/Pool/PositionPage.d.ts delete mode 100644 dist2/types/pages/Pool/index.d.ts delete mode 100644 dist2/types/pages/Pool/styleds.d.ts delete mode 100644 dist2/types/pages/Pool/v2.d.ts delete mode 100644 dist2/types/pages/PoolFinder/index.d.ts delete mode 100644 dist2/types/pages/RemoveLiquidity/V3.d.ts delete mode 100644 dist2/types/pages/RemoveLiquidity/index.d.ts delete mode 100644 dist2/types/pages/RemoveLiquidity/styled.d.ts delete mode 100644 dist2/types/pages/Swap/index.d.ts delete mode 100644 dist2/types/pages/Swap/redirects.d.ts delete mode 100644 dist2/types/pages/Vote/Landing.d.ts delete mode 100644 dist2/types/pages/Vote/VotePage.d.ts delete mode 100644 dist2/types/pages/Vote/index.d.ts delete mode 100644 dist2/types/pages/Vote/styled.d.ts delete mode 100644 dist2/types/pages/styled.d.ts delete mode 100644 dist2/types/polyfills.d.ts delete mode 100644 dist2/types/service-worker.d.ts delete mode 100644 dist2/types/serviceWorkerRegistration.d.ts delete mode 100644 dist2/types/setupTests.d.ts delete mode 100644 dist2/types/snowflake.d.ts delete mode 100644 dist2/types/state/application/hooks.d.ts delete mode 100644 dist2/types/state/application/reducer.d.ts delete mode 100644 dist2/types/state/application/updater.d.ts delete mode 100644 dist2/types/state/burn/actions.d.ts delete mode 100644 dist2/types/state/burn/hooks.d.ts delete mode 100644 dist2/types/state/burn/reducer.d.ts delete mode 100644 dist2/types/state/burn/v3/actions.d.ts delete mode 100644 dist2/types/state/burn/v3/hooks.d.ts delete mode 100644 dist2/types/state/burn/v3/reducer.d.ts delete mode 100644 dist2/types/state/claim/hooks.d.ts delete mode 100644 dist2/types/state/data/enhanced.d.ts delete mode 100644 dist2/types/state/data/slice.d.ts delete mode 100644 dist2/types/state/global/actions.d.ts delete mode 100644 dist2/types/state/governance/hooks.d.ts delete mode 100644 dist2/types/state/governance/types.d.ts delete mode 100644 dist2/types/state/lists/actions.d.ts delete mode 100644 dist2/types/state/lists/hooks.d.ts delete mode 100644 dist2/types/state/lists/reducer.d.ts delete mode 100644 dist2/types/state/lists/updater.d.ts delete mode 100644 dist2/types/state/lists/wrappedTokenInfo.d.ts delete mode 100644 dist2/types/state/logs/hooks.d.ts delete mode 100644 dist2/types/state/logs/slice.d.ts delete mode 100644 dist2/types/state/logs/updater.d.ts delete mode 100644 dist2/types/state/logs/utils.d.ts delete mode 100644 dist2/types/state/mint/actions.d.ts delete mode 100644 dist2/types/state/mint/hooks.d.ts delete mode 100644 dist2/types/state/mint/reducer.d.ts delete mode 100644 dist2/types/state/mint/v3/actions.d.ts delete mode 100644 dist2/types/state/mint/v3/hooks.d.ts delete mode 100644 dist2/types/state/mint/v3/reducer.d.ts delete mode 100644 dist2/types/state/mint/v3/utils.d.ts delete mode 100644 dist2/types/state/routing/clientSideSmartOrderRouter/constants.d.ts delete mode 100644 dist2/types/state/routing/clientSideSmartOrderRouter/dependencies.d.ts delete mode 100644 dist2/types/state/routing/clientSideSmartOrderRouter/index.d.ts delete mode 100644 dist2/types/state/routing/slice.d.ts delete mode 100644 dist2/types/state/routing/types.d.ts delete mode 100644 dist2/types/state/routing/useRoutingAPITrade.d.ts delete mode 100644 dist2/types/state/routing/utils.d.ts delete mode 100644 dist2/types/state/stake/hooks.d.ts delete mode 100644 dist2/types/state/swap/actions.d.ts delete mode 100644 dist2/types/state/swap/hooks.d.ts delete mode 100644 dist2/types/state/swap/reducer.d.ts delete mode 100644 dist2/types/state/transactions/actions.d.ts delete mode 100644 dist2/types/state/transactions/hooks.d.ts delete mode 100644 dist2/types/state/transactions/reducer.d.ts delete mode 100644 dist2/types/state/transactions/updater.d.ts delete mode 100644 dist2/types/state/user/actions.d.ts delete mode 100644 dist2/types/state/user/hooks.d.ts delete mode 100644 dist2/types/state/user/reducer.d.ts delete mode 100644 dist2/types/state/user/updater.d.ts delete mode 100644 dist2/types/state/wallet/hooks.d.ts delete mode 100644 dist2/types/theme/DarkModeQueryParamReader.d.ts delete mode 100644 dist2/types/theme/RadialGradientByChainUpdater.d.ts delete mode 100644 dist2/types/theme/components.d.ts delete mode 100644 dist2/types/theme/index.d.ts delete mode 100644 dist2/types/types/tuple.d.ts delete mode 100644 dist2/types/types/v3/commons.d.ts delete mode 100644 dist2/types/types/v3/factories/IApproveAndCall__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/IERC1271__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/IERC20Metadata__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/IERC20Minimal__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/IERC20PermitAllowed__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/IERC721Permit__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/IImmutableState__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/IMulticallExtended__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/IMulticall__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/INonfungiblePositionManager__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/INonfungibleTokenPositionDescriptor__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/IOracleSlippage__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/IPeripheryImmutableState__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/IPeripheryPaymentsExtended__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/IPeripheryPaymentsWithFeeExtended__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/IPeripheryPaymentsWithFee__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/IPeripheryPayments__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/IPoolInitializer__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/IQuoterV2__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/IQuoter__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/ISelfPermit__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/ISwapRouter02__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/ISwapRouter__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/ITickLens__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/IUniswapV3Factory__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/IUniswapV3FlashCallback__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/IUniswapV3MintCallback__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/IUniswapV3PoolActions__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/IUniswapV3PoolDeployer__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/IUniswapV3PoolDerivedState__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/IUniswapV3PoolEvents__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/IUniswapV3PoolImmutables__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/IUniswapV3PoolOwnerActions__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/IUniswapV3PoolState__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/IUniswapV3Pool__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/IUniswapV3Staker__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/IUniswapV3SwapCallback__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/IV2SwapRouter__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/IV3Migrator__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/IV3SwapRouter__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/IWETH9__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/NFTDescriptor__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/NonfungiblePositionManager__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/NonfungibleTokenPositionDescriptor__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/PairFlash__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/QuoterV2__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/Quoter__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/SwapRouter02__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/SwapRouter__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/TickLens__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/UniswapInterfaceMulticall__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/UniswapV3Factory__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/UniswapV3Pool__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/UniswapV3Staker__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/V2SwapRouter__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/V3Migrator__factory.d.ts delete mode 100644 dist2/types/types/v3/factories/V3SwapRouter__factory.d.ts delete mode 100644 dist2/types/types/v3/index.d.ts delete mode 100644 dist2/types/utils/anonymizeLink.d.ts delete mode 100644 dist2/types/utils/approveAmountCalldata.d.ts delete mode 100644 dist2/types/utils/calculateGasMargin.d.ts delete mode 100644 dist2/types/utils/calculateSlippageAmount.d.ts delete mode 100644 dist2/types/utils/chains.d.ts delete mode 100644 dist2/types/utils/computeFiatValuePriceImpact.d.ts delete mode 100644 dist2/types/utils/computeSurroundingTicks.d.ts delete mode 100644 dist2/types/utils/computeUniCirculation.d.ts delete mode 100644 dist2/types/utils/constructSameAddressMap.d.ts delete mode 100644 dist2/types/utils/currencyId.d.ts delete mode 100644 dist2/types/utils/formatCurrencyAmount.d.ts delete mode 100644 dist2/types/utils/formatTickPrice.d.ts delete mode 100644 dist2/types/utils/getExplorerLink.d.ts delete mode 100644 dist2/types/utils/getLibrary.d.ts delete mode 100644 dist2/types/utils/getTickToPrice.d.ts delete mode 100644 dist2/types/utils/getTxOptimizedSwapRouter.d.ts delete mode 100644 dist2/types/utils/index.d.ts delete mode 100644 dist2/types/utils/isTradeBetter.d.ts delete mode 100644 dist2/types/utils/isZero.d.ts delete mode 100644 dist2/types/utils/listSort.d.ts delete mode 100644 dist2/types/utils/listVersionLabel.d.ts delete mode 100644 dist2/types/utils/maxAmountSpend.d.ts delete mode 100644 dist2/types/utils/prices.d.ts delete mode 100644 dist2/types/utils/retry.d.ts delete mode 100644 dist2/types/utils/routes.d.ts delete mode 100644 dist2/types/utils/safeNamehash.d.ts delete mode 100644 dist2/types/utils/supportedChainId.d.ts delete mode 100644 dist2/types/utils/swapErrorToUserReadableMessage.d.ts delete mode 100644 dist2/types/utils/switchToNetwork.d.ts delete mode 100644 dist2/types/utils/tradeMeaningFullyDiffer.d.ts delete mode 100644 dist2/types/utils/transformSwapRouteToGetQuoteResult.d.ts delete mode 100644 dist2/types/utils/unwrappedToken.d.ts delete mode 100644 dist2/types/utils/userAgent.d.ts delete mode 100644 old-rollup.config.ts delete mode 100644 src/snowflake.ts create mode 100644 src/snowflake/Providers.tsx create mode 100644 src/snowflake/Updaters.tsx create mode 100644 src/snowflake/index.ts diff --git a/.eslintrc.json b/.eslintrc.json index e216e683e08..f8f7b32d3bd 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -53,6 +53,7 @@ "@typescript-eslint/ban-ts-ignore": "off", "@typescript-eslint/explicit-module-boundary-types": "off", "react/react-in-jsx-scope": "off", + "react/prop-types": "off", "object-shorthand": ["error", "always"], "no-restricted-imports": [ "error", diff --git a/dist2/snowflake.d.ts b/dist2/snowflake.d.ts deleted file mode 100644 index ae0e281987d..00000000000 --- a/dist2/snowflake.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -/// -import { RouteComponentProps } from 'react-router-dom'; - -declare function Swap({ history }: RouteComponentProps): JSX.Element; - -export { Swap }; diff --git a/dist2/snowflake.js b/dist2/snowflake.js index c79256bdd6d..6d2cd7d5094 100644 --- a/dist2/snowflake.js +++ b/dist2/snowflake.js @@ -65,6 +65,9 @@ var react = require('@reduxjs/toolkit/query/react'); var reduxLocalstorageSimple = require('redux-localstorage-simple'); var graphqlRequest = require('graphql-request'); var tokenLists = require('@uniswap/token-lists'); +var core$2 = require('@lingui/core'); +var react$1 = require('@lingui/react'); +var plurals$1 = require('make-plural/plurals'); var smartOrderRouter = require('@uniswap/smart-order-router'); var ethers = require('ethers/lib/ethers'); @@ -261,7 +264,7 @@ var optimismLogoUrl = "data:image/svg+xml,%3Csvg%20width%3D%22170%22%20height%3D var polygonMaticLogo = "data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20viewBox%3D%220%200%2038.4%2033.5%22%20style%3D%22enable-background%3Anew%200%200%2038.4%2033.5%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cstyle%20type%3D%22text%2Fcss%22%3E%20.st0%7Bfill%3A%238247E5%3B%7D%3C%2Fstyle%3E%3Cg%3E%20%3Cpath%20class%3D%22st0%22%20d%3D%22M29%2C10.2c-0.7-0.4-1.6-0.4-2.4%2C0L21%2C13.5l-3.8%2C2.1l-5.5%2C3.3c-0.7%2C0.4-1.6%2C0.4-2.4%2C0L5%2C16.3%20%20c-0.7-0.4-1.2-1.2-1.2-2.1v-5c0-0.8%2C0.4-1.6%2C1.2-2.1l4.3-2.5c0.7-0.4%2C1.6-0.4%2C2.4%2C0L16%2C7.2c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v3.3l3.8-2.2V7%20%20c0-0.8-0.4-1.6-1.2-2.1l-8-4.7c-0.7-0.4-1.6-0.4-2.4%2C0L1.2%2C5C0.4%2C5.4%2C0%2C6.2%2C0%2C7v9.4c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l5.5-3.2l3.8-2.2l5.5-3.2c0.7-0.4%2C1.6-0.4%2C2.4%2C0l4.3%2C2.5c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v5c0%2C0.8-0.4%2C1.6-1.2%2C2.1%20%20L29%2C28.8c-0.7%2C0.4-1.6%2C0.4-2.4%2C0l-4.3-2.5c-0.7-0.4-1.2-1.2-1.2-2.1V21l-3.8%2C2.2v3.3c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l8.1-4.7c0.7-0.4%2C1.2-1.2%2C1.2-2.1V17c0-0.8-0.4-1.6-1.2-2.1L29%2C10.2z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"; -var _a$g; +var _a$h; /** * List of all the networks supported by the Uniswap Interface */ @@ -279,19 +282,19 @@ var SupportedChainId; SupportedChainId[SupportedChainId["POLYGON"] = 137] = "POLYGON"; SupportedChainId[SupportedChainId["POLYGON_MUMBAI"] = 80001] = "POLYGON_MUMBAI"; })(SupportedChainId || (SupportedChainId = {})); -(_a$g = {}, - _a$g[SupportedChainId.MAINNET] = 'mainnet', - _a$g[SupportedChainId.ROPSTEN] = 'ropsten', - _a$g[SupportedChainId.RINKEBY] = 'rinkeby', - _a$g[SupportedChainId.GOERLI] = 'goerli', - _a$g[SupportedChainId.KOVAN] = 'kovan', - _a$g[SupportedChainId.POLYGON] = 'polygon', - _a$g[SupportedChainId.POLYGON_MUMBAI] = 'polygon_mumbai', - _a$g[SupportedChainId.ARBITRUM_ONE] = 'arbitrum', - _a$g[SupportedChainId.ARBITRUM_RINKEBY] = 'arbitrum_rinkeby', - _a$g[SupportedChainId.OPTIMISM] = 'optimism', - _a$g[SupportedChainId.OPTIMISTIC_KOVAN] = 'optimistic_kovan', - _a$g); +(_a$h = {}, + _a$h[SupportedChainId.MAINNET] = 'mainnet', + _a$h[SupportedChainId.ROPSTEN] = 'ropsten', + _a$h[SupportedChainId.RINKEBY] = 'rinkeby', + _a$h[SupportedChainId.GOERLI] = 'goerli', + _a$h[SupportedChainId.KOVAN] = 'kovan', + _a$h[SupportedChainId.POLYGON] = 'polygon', + _a$h[SupportedChainId.POLYGON_MUMBAI] = 'polygon_mumbai', + _a$h[SupportedChainId.ARBITRUM_ONE] = 'arbitrum', + _a$h[SupportedChainId.ARBITRUM_RINKEBY] = 'arbitrum_rinkeby', + _a$h[SupportedChainId.OPTIMISM] = 'optimism', + _a$h[SupportedChainId.OPTIMISTIC_KOVAN] = 'optimistic_kovan', + _a$h); /** * Array of all the supported chain IDs */ @@ -354,7 +357,7 @@ var DEFAULT_LIST_OF_LISTS = __spreadArray(__spreadArray([], __read(DEFAULT_LIST_ // default lists to be 'active' aka searched across var DEFAULT_ACTIVE_LIST_URLS = [UNI_LIST, GEMINI_LIST]; -var _a$f, _b$6; +var _a$g, _b$6; var INFURA_KEY = process.env.REACT_APP_INFURA_KEY; if (typeof INFURA_KEY === 'undefined') { throw new Error("REACT_APP_INFURA_KEY must be a defined environment variable"); @@ -362,19 +365,19 @@ if (typeof INFURA_KEY === 'undefined') { /** * These are the network URLs used by the interface when there is not another available source of chain data */ -var INFURA_NETWORK_URLS = (_a$f = {}, - _a$f[SupportedChainId.MAINNET] = "https://mainnet.infura.io/v3/" + INFURA_KEY, - _a$f[SupportedChainId.RINKEBY] = "https://rinkeby.infura.io/v3/" + INFURA_KEY, - _a$f[SupportedChainId.ROPSTEN] = "https://ropsten.infura.io/v3/" + INFURA_KEY, - _a$f[SupportedChainId.GOERLI] = "https://goerli.infura.io/v3/" + INFURA_KEY, - _a$f[SupportedChainId.KOVAN] = "https://kovan.infura.io/v3/" + INFURA_KEY, - _a$f[SupportedChainId.OPTIMISM] = "https://optimism-mainnet.infura.io/v3/" + INFURA_KEY, - _a$f[SupportedChainId.OPTIMISTIC_KOVAN] = "https://optimism-kovan.infura.io/v3/" + INFURA_KEY, - _a$f[SupportedChainId.ARBITRUM_ONE] = "https://arbitrum-mainnet.infura.io/v3/" + INFURA_KEY, - _a$f[SupportedChainId.ARBITRUM_RINKEBY] = "https://arbitrum-rinkeby.infura.io/v3/" + INFURA_KEY, - _a$f[SupportedChainId.POLYGON] = "https://polygon-mainnet.infura.io/v3/" + INFURA_KEY, - _a$f[SupportedChainId.POLYGON_MUMBAI] = "https://polygon-mumbai.infura.io/v3/" + INFURA_KEY, - _a$f); +var INFURA_NETWORK_URLS = (_a$g = {}, + _a$g[SupportedChainId.MAINNET] = "https://mainnet.infura.io/v3/" + INFURA_KEY, + _a$g[SupportedChainId.RINKEBY] = "https://rinkeby.infura.io/v3/" + INFURA_KEY, + _a$g[SupportedChainId.ROPSTEN] = "https://ropsten.infura.io/v3/" + INFURA_KEY, + _a$g[SupportedChainId.GOERLI] = "https://goerli.infura.io/v3/" + INFURA_KEY, + _a$g[SupportedChainId.KOVAN] = "https://kovan.infura.io/v3/" + INFURA_KEY, + _a$g[SupportedChainId.OPTIMISM] = "https://optimism-mainnet.infura.io/v3/" + INFURA_KEY, + _a$g[SupportedChainId.OPTIMISTIC_KOVAN] = "https://optimism-kovan.infura.io/v3/" + INFURA_KEY, + _a$g[SupportedChainId.ARBITRUM_ONE] = "https://arbitrum-mainnet.infura.io/v3/" + INFURA_KEY, + _a$g[SupportedChainId.ARBITRUM_RINKEBY] = "https://arbitrum-rinkeby.infura.io/v3/" + INFURA_KEY, + _a$g[SupportedChainId.POLYGON] = "https://polygon-mainnet.infura.io/v3/" + INFURA_KEY, + _a$g[SupportedChainId.POLYGON_MUMBAI] = "https://polygon-mumbai.infura.io/v3/" + INFURA_KEY, + _a$g); var NetworkType; (function (NetworkType) { NetworkType[NetworkType["L1"] = 0] = "L1"; @@ -443,7 +446,7 @@ var CHAIN_INFO = (_b$6 = {}, }, _b$6[SupportedChainId.OPTIMISM] = { networkType: NetworkType.L2, - blockWaitMsBeforeWarning: ms__default["default"](templateObject_1$X || (templateObject_1$X = __makeTemplateObject(["25m"], ["25m"]))), + blockWaitMsBeforeWarning: ms__default["default"](templateObject_1$Y || (templateObject_1$Y = __makeTemplateObject(["25m"], ["25m"]))), bridge: 'https://gateway.optimism.io/?chainId=1', defaultListUrl: OPTIMISM_LIST, docs: 'https://optimism.io/', @@ -460,7 +463,7 @@ var CHAIN_INFO = (_b$6 = {}, }, _b$6[SupportedChainId.OPTIMISTIC_KOVAN] = { networkType: NetworkType.L2, - blockWaitMsBeforeWarning: ms__default["default"](templateObject_2$E || (templateObject_2$E = __makeTemplateObject(["25m"], ["25m"]))), + blockWaitMsBeforeWarning: ms__default["default"](templateObject_2$F || (templateObject_2$F = __makeTemplateObject(["25m"], ["25m"]))), bridge: 'https://gateway.optimism.io/', defaultListUrl: OPTIMISM_LIST, docs: 'https://optimism.io/', @@ -477,7 +480,7 @@ var CHAIN_INFO = (_b$6 = {}, }, _b$6[SupportedChainId.ARBITRUM_ONE] = { networkType: NetworkType.L2, - blockWaitMsBeforeWarning: ms__default["default"](templateObject_3$x || (templateObject_3$x = __makeTemplateObject(["10m"], ["10m"]))), + blockWaitMsBeforeWarning: ms__default["default"](templateObject_3$y || (templateObject_3$y = __makeTemplateObject(["10m"], ["10m"]))), bridge: 'https://bridge.arbitrum.io/', docs: 'https://offchainlabs.com/', explorer: 'https://arbiscan.io/', @@ -536,7 +539,7 @@ var CHAIN_INFO = (_b$6 = {}, }, }, _b$6); -var templateObject_1$X, templateObject_2$E, templateObject_3$x, templateObject_4$n, templateObject_5$k, templateObject_6$e; +var templateObject_1$Y, templateObject_2$F, templateObject_3$y, templateObject_4$n, templateObject_5$k, templateObject_6$e; var NetworkContextName = 'NETWORK'; // 30 minutes, denominated in seconds @@ -544,6 +547,7 @@ var DEFAULT_DEADLINE_FROM_NOW = 60 * 30; var L2_DEADLINE_FROM_NOW = 60 * 5; // transaction popup dismisal amounts var DEFAULT_TXN_DISMISS_MS = 25000; +var L2_TXN_DISMISS_MS = 5000; // used for rewards deadlines JSBI__default["default"].BigInt(60 * 60 * 24 * 7); JSBI__default["default"].BigInt(0); @@ -593,14 +597,14 @@ function constructSameAddressMap(address, additionalNetworks) { }, {}); } -var _a$e, _b$5, _c$4, _d$3, _e$2, _f$1, _g$1, _h$1; +var _a$f, _b$5, _c$4, _d$3, _e$2, _f$1, _g$1, _h$1; var UNI_ADDRESS = constructSameAddressMap('0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984'); var MULTICALL_ADDRESS = __assign(__assign({}, constructSameAddressMap('0x1F98415757620B543A52E61c46B32eB19261F984', [ SupportedChainId.OPTIMISTIC_KOVAN, SupportedChainId.OPTIMISM, SupportedChainId.POLYGON_MUMBAI, SupportedChainId.POLYGON, -])), (_a$e = {}, _a$e[SupportedChainId.ARBITRUM_ONE] = '0xadF885960B47eA2CD9B55E6DAc6B42b7Cb2806dB', _a$e[SupportedChainId.ARBITRUM_RINKEBY] = '0xa501c031958F579dB7676fF1CE78AD305794d579', _a$e)); +])), (_a$f = {}, _a$f[SupportedChainId.ARBITRUM_ONE] = '0xadF885960B47eA2CD9B55E6DAc6B42b7Cb2806dB', _a$f[SupportedChainId.ARBITRUM_RINKEBY] = '0xa501c031958F579dB7676fF1CE78AD305794d579', _a$f)); var V2_FACTORY_ADDRESSES = constructSameAddressMap(v2Sdk.FACTORY_ADDRESS); var V2_ROUTER_ADDRESS = constructSameAddressMap('0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D'); var V3_ROUTER_ADDRESS = constructSameAddressMap('0xE592427A0AEce92De3Edee1F18E0157C05861564', [ @@ -686,7 +690,7 @@ constructSameAddressMap('0xA5644E29708357803b5A882D272c41cC0dF92B34', [ _h$1[SupportedChainId.ARBITRUM_RINKEBY] = '0xbfd8137f7d1516D3ea5cA83523914859ec47F573', _h$1); -var _a$d, _b$4; +var _a$e, _b$4; var AMPL = new sdkCore.Token(SupportedChainId.MAINNET, '0xD46bA6D942050d489DBd938a2C909A5d5039A161', 9, 'AMPL', 'Ampleforth'); var DAI = new sdkCore.Token(SupportedChainId.MAINNET, '0x6B175474E89094C44Da98b954EedeAC495271d0F', 18, 'DAI', 'Dai Stablecoin'); var DAI_ARBITRUM_ONE = new sdkCore.Token(SupportedChainId.ARBITRUM_ONE, '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', 18, 'DAI', 'Dai stable coin'); @@ -715,13 +719,13 @@ var rETH2 = new sdkCore.Token(SupportedChainId.MAINNET, '0x20BC832ca081b91433ff6 var SWISE = new sdkCore.Token(SupportedChainId.MAINNET, '0x48C3399719B582dD63eB5AADf12A40B4C3f52FA2', 18, 'SWISE', 'StakeWise'); var WETH_POLYGON_MUMBAI = new sdkCore.Token(SupportedChainId.POLYGON_MUMBAI, '0xa6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa', 18, 'WETH', 'Wrapped Ether'); var WETH_POLYGON = new sdkCore.Token(SupportedChainId.POLYGON, '0x7ceb23fd6bc0add59e62ac25578270cff1b9f619', 18, 'WETH', 'Wrapped Ether'); -var UNI = (_a$d = {}, - _a$d[SupportedChainId.MAINNET] = new sdkCore.Token(SupportedChainId.MAINNET, UNI_ADDRESS[1], 18, 'UNI', 'Uniswap'), - _a$d[SupportedChainId.RINKEBY] = new sdkCore.Token(SupportedChainId.RINKEBY, UNI_ADDRESS[4], 18, 'UNI', 'Uniswap'), - _a$d[SupportedChainId.ROPSTEN] = new sdkCore.Token(SupportedChainId.ROPSTEN, UNI_ADDRESS[3], 18, 'UNI', 'Uniswap'), - _a$d[SupportedChainId.GOERLI] = new sdkCore.Token(SupportedChainId.GOERLI, UNI_ADDRESS[5], 18, 'UNI', 'Uniswap'), - _a$d[SupportedChainId.KOVAN] = new sdkCore.Token(SupportedChainId.KOVAN, UNI_ADDRESS[42], 18, 'UNI', 'Uniswap'), - _a$d); +var UNI = (_a$e = {}, + _a$e[SupportedChainId.MAINNET] = new sdkCore.Token(SupportedChainId.MAINNET, UNI_ADDRESS[1], 18, 'UNI', 'Uniswap'), + _a$e[SupportedChainId.RINKEBY] = new sdkCore.Token(SupportedChainId.RINKEBY, UNI_ADDRESS[4], 18, 'UNI', 'Uniswap'), + _a$e[SupportedChainId.ROPSTEN] = new sdkCore.Token(SupportedChainId.ROPSTEN, UNI_ADDRESS[3], 18, 'UNI', 'Uniswap'), + _a$e[SupportedChainId.GOERLI] = new sdkCore.Token(SupportedChainId.GOERLI, UNI_ADDRESS[5], 18, 'UNI', 'Uniswap'), + _a$e[SupportedChainId.KOVAN] = new sdkCore.Token(SupportedChainId.KOVAN, UNI_ADDRESS[42], 18, 'UNI', 'Uniswap'), + _a$e); var WRAPPED_NATIVE_CURRENCY = __assign(__assign({}, sdkCore.WETH9), (_b$4 = {}, _b$4[SupportedChainId.OPTIMISM] = new sdkCore.Token(SupportedChainId.OPTIMISM, '0x4200000000000000000000000000000000000006', 18, 'WETH', 'Wrapped Ether'), _b$4[SupportedChainId.OPTIMISTIC_KOVAN] = new sdkCore.Token(SupportedChainId.OPTIMISTIC_KOVAN, '0x4200000000000000000000000000000000000006', 18, 'WETH', 'Wrapped Ether'), _b$4[SupportedChainId.ARBITRUM_ONE] = new sdkCore.Token(SupportedChainId.ARBITRUM_ONE, '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1', 18, 'WETH', 'Wrapped Ether'), _b$4[SupportedChainId.ARBITRUM_RINKEBY] = new sdkCore.Token(SupportedChainId.ARBITRUM_RINKEBY, '0xB47e6A5f8b33b3F17603C83a0535A9dcD7E32681', 18, 'WETH', 'Wrapped Ether'), _b$4[SupportedChainId.POLYGON] = new sdkCore.Token(SupportedChainId.POLYGON, '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270', 18, 'WMATIC', 'Wrapped MATIC'), _b$4[SupportedChainId.POLYGON_MUMBAI] = new sdkCore.Token(SupportedChainId.POLYGON_MUMBAI, '0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889', 18, 'WMATIC', 'Wrapped MATIC'), _b$4)); function isMatic(chainId) { return chainId === SupportedChainId.POLYGON_MUMBAI || chainId === SupportedChainId.POLYGON; @@ -778,26 +782,26 @@ function nativeOnChain(chainId) { : ExtendedEther.onChain(chainId))); } -var _a$c, _b$3, _c$3, _d$2, _e$1, _f, _g, _h; +var _a$d, _b$3, _c$3, _d$2, _e$1, _f, _g, _h; var WRAPPED_NATIVE_CURRENCIES_ONLY = Object.fromEntries(Object.entries(WRAPPED_NATIVE_CURRENCY).map(function (_a) { var _b = __read(_a, 2), key = _b[0], value = _b[1]; return [key, [value]]; })); // used to construct intermediary pairs for trading -var BASES_TO_CHECK_TRADES_AGAINST = __assign(__assign({}, WRAPPED_NATIVE_CURRENCIES_ONLY), (_a$c = {}, _a$c[SupportedChainId.MAINNET] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.MAINNET]), false), [DAI, USDC, USDT, WBTC], false), _a$c[SupportedChainId.OPTIMISM] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.OPTIMISM]), false), [ +var BASES_TO_CHECK_TRADES_AGAINST = __assign(__assign({}, WRAPPED_NATIVE_CURRENCIES_ONLY), (_a$d = {}, _a$d[SupportedChainId.MAINNET] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.MAINNET]), false), [DAI, USDC, USDT, WBTC], false), _a$d[SupportedChainId.OPTIMISM] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.OPTIMISM]), false), [ DAI_OPTIMISM, USDT_OPTIMISM, WBTC_OPTIMISM, -], false), _a$c[SupportedChainId.ARBITRUM_ONE] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.ARBITRUM_ONE]), false), [ +], false), _a$d[SupportedChainId.ARBITRUM_ONE] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.ARBITRUM_ONE]), false), [ DAI_ARBITRUM_ONE, USDT_ARBITRUM_ONE, WBTC_ARBITRUM_ONE, -], false), _a$c[SupportedChainId.POLYGON] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.POLYGON]), false), [ +], false), _a$d[SupportedChainId.POLYGON] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.POLYGON]), false), [ DAI_POLYGON, USDC_POLYGON, USDT_POLYGON, WETH_POLYGON, -], false), _a$c)); +], false), _a$d)); var ADDITIONAL_BASES = (_b$3 = {}, _b$3[SupportedChainId.MAINNET] = (_c$3 = { '0xF16E4d813f4DcfDe4c5b44f305c908742De84eF0': [ETH2X_FLI] @@ -5552,18 +5556,68 @@ function useIsWindowVisible() { return focused; } +function useBlock() { + var _a = useActiveWeb3React(), chainId = _a.chainId, library = _a.library; + var windowVisible = useIsWindowVisible(); + var _b = __read(React.useState({ chainId: chainId }), 2), state = _b[0], setState = _b[1]; + var onBlock = React.useCallback(function (block) { + setState(function (state) { + if (state.chainId === chainId) { + if (typeof state.block !== 'number') + return { chainId: chainId, block: block }; + return { chainId: chainId, block: Math.max(block, state.block) }; + } + return state; + }); + }, [chainId]); + React.useEffect(function () { + if (library && chainId && windowVisible) { + setState({ chainId: chainId }); + library + .getBlockNumber() + .then(onBlock) + .catch(function (error) { + console.error("Failed to get block number for chainId " + chainId, error); + }); + library.on('block', onBlock); + return function () { + library.removeListener('block', onBlock); + }; + } + return undefined; + }, [chainId, library, onBlock, windowVisible]); + var debouncedBlock = useDebounce(state.block, 100); + return state.block ? debouncedBlock : undefined; +} var blockAtom = jotai.atom(undefined); +function BlockUpdater() { + var setBlock = utils.useUpdateAtom(blockAtom); + var block = useBlock(); + React.useEffect(function () { + setBlock(block); + }, [block, setBlock]); + return null; +} /** Requires that BlockUpdater be installed in the DOM tree. */ function useBlockNumber() { var chainId = useActiveWeb3React().chainId; var block = utils.useAtomValue(blockAtom); return chainId ? block : undefined; +} +function useFastForwardBlockNumber() { + return utils.useUpdateAtom(blockAtom); } -var _a$b; +var _a$c; var multicall = reduxMulticall.createMulticall(); -var reducer = redux.combineReducers((_a$b = {}, _a$b[multicall.reducerPath] = multicall.reducer, _a$b)); -redux.createStore(reducer); +var reducer = redux.combineReducers((_a$c = {}, _a$c[multicall.reducerPath] = multicall.reducer, _a$c)); +redux.createStore(reducer); +function MulticallUpdater() { + var latestBlockNumber = useBlockNumber(); + var chainId = useActiveWeb3React().chainId; + var contract = useInterfaceMulticall(); + return jsxRuntime.jsx(multicall.Updater, { chainId: chainId, latestBlockNumber: latestBlockNumber, contract: contract }, void 0); +} function useMultipleContractSingleData() { var _a; @@ -7847,6 +7901,14 @@ function useDarkModeManager() { function useUserLocale() { return useAppSelector(function (state) { return state.user.userLocale; }); } +function useUserLocaleManager() { + var dispatch = useAppDispatch(); + var locale = useUserLocale(); + var setLocale = React.useCallback(function (newLocale) { + dispatch(updateUserLocale({ userLocale: newLocale })); + }, [dispatch]); + return [locale, setLocale]; +} function useIsExpertMode() { return useAppSelector(function (state) { return state.user.userExpertMode; }); } @@ -7969,12 +8031,12 @@ function anonymizeLink(href) { } } -var ButtonText = styled__default["default"].button(templateObject_1$W || (templateObject_1$W = __makeTemplateObject(["\n outline: none;\n border: none;\n font-size: inherit;\n padding: 0;\n margin: 0;\n background: none;\n cursor: pointer;\n\n :hover {\n opacity: 0.7;\n }\n\n :focus {\n text-decoration: underline;\n }\n"], ["\n outline: none;\n border: none;\n font-size: inherit;\n padding: 0;\n margin: 0;\n background: none;\n cursor: pointer;\n\n :hover {\n opacity: 0.7;\n }\n\n :focus {\n text-decoration: underline;\n }\n"]))); -var CloseIcon = styled__default["default"](reactFeather.X)(templateObject_2$D || (templateObject_2$D = __makeTemplateObject(["\n cursor: pointer;\n"], ["\n cursor: pointer;\n" +var ButtonText = styled__default["default"].button(templateObject_1$X || (templateObject_1$X = __makeTemplateObject(["\n outline: none;\n border: none;\n font-size: inherit;\n padding: 0;\n margin: 0;\n background: none;\n cursor: pointer;\n\n :hover {\n opacity: 0.7;\n }\n\n :focus {\n text-decoration: underline;\n }\n"], ["\n outline: none;\n border: none;\n font-size: inherit;\n padding: 0;\n margin: 0;\n background: none;\n cursor: pointer;\n\n :hover {\n opacity: 0.7;\n }\n\n :focus {\n text-decoration: underline;\n }\n"]))); +var CloseIcon = styled__default["default"](reactFeather.X)(templateObject_2$E || (templateObject_2$E = __makeTemplateObject(["\n cursor: pointer;\n"], ["\n cursor: pointer;\n" // for wrapper react feather icons ]))); // for wrapper react feather icons -var IconWrapper = styled__default["default"].div(templateObject_3$w || (templateObject_3$w = __makeTemplateObject(["\n display: flex;\n align-items: center;\n justify-content: center;\n width: ", ";\n height: ", ";\n margin-right: ", ";\n margin-left: ", ";\n & > * {\n stroke: ", ";\n }\n"], ["\n display: flex;\n align-items: center;\n justify-content: center;\n width: ", ";\n height: ", ";\n margin-right: ", ";\n margin-left: ", ";\n & > * {\n stroke: ", ";\n }\n" +var IconWrapper = styled__default["default"].div(templateObject_3$x || (templateObject_3$x = __makeTemplateObject(["\n display: flex;\n align-items: center;\n justify-content: center;\n width: ", ";\n height: ", ";\n margin-right: ", ";\n margin-left: ", ";\n & > * {\n stroke: ", ";\n }\n"], ["\n display: flex;\n align-items: center;\n justify-content: center;\n width: ", ";\n height: ", ";\n margin-right: ", ";\n margin-left: ", ";\n & > * {\n stroke: ", ";\n }\n" // A button that triggers some onClick result, but looks like a link. ])), function (_a) { var size = _a.size; @@ -8085,7 +8147,7 @@ var Separator$1 = styled__default["default"].div(templateObject_22 || (templateO var theme = _a.theme; return theme.bg2; }); -var templateObject_1$W, templateObject_2$D, templateObject_3$w, templateObject_4$m, templateObject_5$j, templateObject_6$d, templateObject_7$c, templateObject_8$9, templateObject_9$8, templateObject_10$6, templateObject_11$5, templateObject_12$5, templateObject_13$2, templateObject_14$2, templateObject_15$1, templateObject_16, templateObject_17, templateObject_18, templateObject_19, templateObject_20, templateObject_21, templateObject_22; +var templateObject_1$X, templateObject_2$E, templateObject_3$x, templateObject_4$m, templateObject_5$j, templateObject_6$d, templateObject_7$c, templateObject_8$9, templateObject_9$8, templateObject_10$6, templateObject_11$5, templateObject_12$5, templateObject_13$2, templateObject_14$2, templateObject_15$1, templateObject_16, templateObject_17, templateObject_18, templateObject_19, templateObject_20, templateObject_21, templateObject_22; var MEDIA_WIDTHS = { upToExtraSmall: 500, @@ -8108,10 +8170,84 @@ var Z_INDEX; Z_INDEX[Z_INDEX["popover"] = 1070] = "popover"; Z_INDEX[Z_INDEX["tooltip"] = 1080] = "tooltip"; })(Z_INDEX || (Z_INDEX = {})); -Object.keys(MEDIA_WIDTHS).reduce(function (accumulator, size) { - accumulator[size] = function (a, b, c) { return styled.css(templateObject_1$V || (templateObject_1$V = __makeTemplateObject(["\n @media (max-width: ", "px) {\n ", "\n }\n "], ["\n @media (max-width: ", "px) {\n ", "\n }\n "])), MEDIA_WIDTHS[size], styled.css(a, b, c)); }; +var mediaWidthTemplates = Object.keys(MEDIA_WIDTHS).reduce(function (accumulator, size) { + accumulator[size] = function (a, b, c) { return styled.css(templateObject_1$W || (templateObject_1$W = __makeTemplateObject(["\n @media (max-width: ", "px) {\n ", "\n }\n "], ["\n @media (max-width: ", "px) {\n ", "\n }\n "])), MEDIA_WIDTHS[size], styled.css(a, b, c)); }; return accumulator; }, {}); +var white = '#FFFFFF'; +var black = '#000000'; +function colors(darkMode) { + return { + darkMode: darkMode, + // base + white: white, + black: black, + // text + text1: darkMode ? '#FFFFFF' : '#000000', + text2: darkMode ? '#C3C5CB' : '#565A69', + text3: darkMode ? '#8F96AC' : '#6E727D', + text4: darkMode ? '#B2B9D2' : '#C3C5CB', + text5: darkMode ? '#2C2F36' : '#EDEEF2', + // backgrounds / greys + bg0: darkMode ? '#191B1F' : '#FFF', + bg1: darkMode ? '#212429' : '#F7F8FA', + bg2: darkMode ? '#2C2F36' : '#EDEEF2', + bg3: darkMode ? '#40444F' : '#CED0D9', + bg4: darkMode ? '#565A69' : '#888D9B', + bg5: darkMode ? '#6C7284' : '#888D9B', + bg6: darkMode ? '#1A2028' : '#6C7284', + //specialty colors + modalBG: darkMode ? 'rgba(0,0,0,.425)' : 'rgba(0,0,0,0.3)', + advancedBG: darkMode ? 'rgba(0,0,0,0.1)' : 'rgba(255,255,255,0.6)', + //primary colors + primary1: darkMode ? '#2172E5' : '#E8006F', + primary2: darkMode ? '#3680E7' : '#FF8CC3', + primary3: darkMode ? '#4D8FEA' : '#FF99C9', + primary4: darkMode ? '#376bad70' : '#F6DDE8', + primary5: darkMode ? '#153d6f70' : '#FDEAF1', + // color text + primaryText1: darkMode ? '#5090ea' : '#D50066', + // secondary colors + secondary1: darkMode ? '#2172E5' : '#E8006F', + secondary2: darkMode ? '#17000b26' : '#F6DDE8', + secondary3: darkMode ? '#17000b26' : '#FDEAF1', + // other + red1: darkMode ? '#FF4343' : '#DA2D2B', + red2: darkMode ? '#F82D3A' : '#DF1F38', + red3: '#D60000', + green1: darkMode ? '#27AE60' : '#007D35', + yellow1: '#E3A507', + yellow2: '#FF8F00', + yellow3: '#F3B71E', + blue1: darkMode ? '#2172E5' : '#0068FC', + blue2: darkMode ? '#5199FF' : '#0068FC', + error: darkMode ? '#FD4040' : '#DF1F38', + success: darkMode ? '#27AE60' : '#007D35', + warning: '#FF8F00', + // dont wanna forget these blue yet + blue4: darkMode ? '#153d6f70' : '#C4D9F8', + // blue5: darkMode ? '#153d6f70' : '#EBF4FF', + }; +} +function theme(darkMode) { + return __assign(__assign({}, colors(darkMode)), { grids: { + sm: 8, + md: 12, + lg: 24, + }, + //shadows + shadow1: darkMode ? '#000' : '#2F80ED', + // media queries + mediaWidth: mediaWidthTemplates, + // css snippets + flexColumnNoWrap: styled.css(templateObject_2$D || (templateObject_2$D = __makeTemplateObject(["\n display: flex;\n flex-flow: column nowrap;\n "], ["\n display: flex;\n flex-flow: column nowrap;\n "]))), flexRowNoWrap: styled.css(templateObject_3$w || (templateObject_3$w = __makeTemplateObject(["\n display: flex;\n flex-flow: row nowrap;\n "], ["\n display: flex;\n flex-flow: row nowrap;\n "]))) }); +} +function ThemeProvider(_a) { + var children = _a.children; + var darkMode = useIsDarkMode(); + var themeObject = React.useMemo(function () { return theme(darkMode); }, [darkMode]); + return jsxRuntime.jsx(styled.ThemeProvider, __assign({ theme: themeObject }, { children: children }), void 0); +} var TextWrapper$1 = styled__default["default"](rebass.Text)(templateObject_4$l || (templateObject_4$l = __makeTemplateObject(["\n color: ", ";\n"], ["\n color: ", ";\n" /** * Preset styles of the Rebass Text component @@ -8174,7 +8310,7 @@ var ThemedText = { return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: error ? 'red1' : 'text2' }, props), void 0); }, }; -styled.createGlobalStyle(templateObject_5$i || (templateObject_5$i = __makeTemplateObject(["\nhtml {\n color: ", ";\n background-color: ", " !important;\n}\n\na {\n color: ", "; \n}\n"], ["\nhtml {\n color: ", ";\n background-color: ", " !important;\n}\n\na {\n color: ", "; \n}\n"])), function (_a) { +var ThemedGlobalStyle = styled.createGlobalStyle(templateObject_5$i || (templateObject_5$i = __makeTemplateObject(["\nhtml {\n color: ", ";\n background-color: ", " !important;\n}\n\na {\n color: ", "; \n}\n"], ["\nhtml {\n color: ", ";\n background-color: ", " !important;\n}\n\na {\n color: ", "; \n}\n"])), function (_a) { var theme = _a.theme; return theme.text1; }, function (_a) { @@ -8184,9 +8320,9 @@ styled.createGlobalStyle(templateObject_5$i || (templateObject_5$i = __makeTempl var theme = _a.theme; return theme.blue1; }); -var templateObject_1$V, templateObject_4$l, templateObject_5$i; +var templateObject_1$W, templateObject_2$D, templateObject_3$w, templateObject_4$l, templateObject_5$i; -var Row = styled__default["default"](styledComponents.Box)(templateObject_1$U || (templateObject_1$U = __makeTemplateObject(["\n width: ", ";\n display: flex;\n padding: 0;\n align-items: ", ";\n justify-content: ", ";\n padding: ", ";\n border: ", ";\n border-radius: ", ";\n"], ["\n width: ", ";\n display: flex;\n padding: 0;\n align-items: ", ";\n justify-content: ", ";\n padding: ", ";\n border: ", ";\n border-radius: ", ";\n"])), function (_a) { +var Row = styled__default["default"](styledComponents.Box)(templateObject_1$V || (templateObject_1$V = __makeTemplateObject(["\n width: ", ";\n display: flex;\n padding: 0;\n align-items: ", ";\n justify-content: ", ";\n padding: ", ";\n border: ", ";\n border-radius: ", ";\n"], ["\n width: ", ";\n display: flex;\n padding: 0;\n align-items: ", ";\n justify-content: ", ";\n padding: ", ";\n border: ", ";\n border-radius: ", ";\n"])), function (_a) { var width = _a.width; return width !== null && width !== void 0 ? width : '100%'; }, function (_a) { @@ -8221,24 +8357,24 @@ var RowFixed = styled__default["default"](Row)(templateObject_5$h || (templateOb var gap = _a.gap; return gap && "-" + gap; }); -var templateObject_1$U, templateObject_2$C, templateObject_3$v, templateObject_4$k, templateObject_5$h; +var templateObject_1$V, templateObject_2$C, templateObject_3$v, templateObject_4$k, templateObject_5$h; -var _a$a, _b$2, _c$2, _d$1; -var L2Icon = styled__default["default"].img(templateObject_1$T || (templateObject_1$T = __makeTemplateObject(["\n width: 24px;\n height: 24px;\n margin-right: 16px;\n"], ["\n width: 24px;\n height: 24px;\n margin-right: 16px;\n"]))); +var _a$b, _b$2, _c$2, _d$1; +var L2Icon = styled__default["default"].img(templateObject_1$U || (templateObject_1$U = __makeTemplateObject(["\n width: 24px;\n height: 24px;\n margin-right: 16px;\n"], ["\n width: 24px;\n height: 24px;\n margin-right: 16px;\n"]))); styled__default["default"].div(templateObject_2$B || (templateObject_2$B = __makeTemplateObject(["\n align-items: center;\n display: flex;\n justify-content: flex-start;\n padding: 0 20px 20px 20px;\n"], ["\n align-items: center;\n display: flex;\n justify-content: flex-start;\n padding: 0 20px 20px 20px;\n"]))); var BodyText = styled__default["default"].div(templateObject_3$u || (templateObject_3$u = __makeTemplateObject(["\n color: ", ";\n display: flex;\n align-items: center;\n justify-content: flex-start;\n margin: 8px;\n font-size: 14px;\n"], ["\n color: ", ";\n display: flex;\n align-items: center;\n justify-content: flex-start;\n margin: 8px;\n font-size: 14px;\n"])), function (_a) { var color = _a.color; return color; }); var RootWrapper = styled__default["default"].div(templateObject_4$j || (templateObject_4$j = __makeTemplateObject(["\n position: relative;\n margin-top: 16px;\n"], ["\n position: relative;\n margin-top: 16px;\n"]))); -var SHOULD_SHOW_ALERT = (_a$a = {}, - _a$a[SupportedChainId.OPTIMISM] = true, - _a$a[SupportedChainId.OPTIMISTIC_KOVAN] = true, - _a$a[SupportedChainId.ARBITRUM_ONE] = true, - _a$a[SupportedChainId.ARBITRUM_RINKEBY] = true, - _a$a[SupportedChainId.POLYGON] = true, - _a$a[SupportedChainId.POLYGON_MUMBAI] = true, - _a$a); +var SHOULD_SHOW_ALERT = (_a$b = {}, + _a$b[SupportedChainId.OPTIMISM] = true, + _a$b[SupportedChainId.OPTIMISTIC_KOVAN] = true, + _a$b[SupportedChainId.ARBITRUM_ONE] = true, + _a$b[SupportedChainId.ARBITRUM_RINKEBY] = true, + _a$b[SupportedChainId.POLYGON] = true, + _a$b[SupportedChainId.POLYGON_MUMBAI] = true, + _a$b); var BG_COLORS_BY_DARK_MODE_AND_CHAIN_ID = { dark: (_b$2 = {}, _b$2[SupportedChainId.POLYGON] = 'radial-gradient(100% 93.36% at 0% 6.64%, rgba(160, 108, 247, 0.1) 0%, rgba(82, 32, 166, 0.1) 100%)', @@ -8288,7 +8424,7 @@ function NetworkAlert() { var textColor = TEXT_COLORS[chainId]; return bridge ? (jsxRuntime.jsx(RootWrapper, { children: jsxRuntime.jsx(ContentWrapper$1, __assign({ chainId: chainId, darkMode: darkMode, logoUrl: logoUrl }, { children: jsxRuntime.jsxs(LinkOutToBridge, __assign({ href: bridge }, { children: [jsxRuntime.jsxs(BodyText, __assign({ color: textColor }, { children: [jsxRuntime.jsx(L2Icon, { src: logoUrl }, void 0), jsxRuntime.jsxs(AutoRow, { children: [jsxRuntime.jsx(Header$1, { children: jsxRuntime.jsxs(macro.Trans, { children: [label, " token bridge"] }, void 0) }, void 0), jsxRuntime.jsx(HideSmall, { children: jsxRuntime.jsxs(macro.Trans, { children: ["Deposit tokens to the ", label, " network."] }, void 0) }, void 0)] }, void 0)] }), void 0), jsxRuntime.jsx(StyledArrowUpRight, { color: textColor }, void 0)] }), void 0) }), void 0) }, void 0)) : null; } -var templateObject_1$T, templateObject_2$B, templateObject_3$u, templateObject_4$j, templateObject_5$g, templateObject_6$c, templateObject_7$b, templateObject_8$8; +var templateObject_1$U, templateObject_2$B, templateObject_3$u, templateObject_4$j, templateObject_5$g, templateObject_6$c, templateObject_7$b, templateObject_8$8; /** * @param open conditional to show content or hide @@ -8310,7 +8446,7 @@ function AnimatedDropdown(_a) { return (jsxRuntime.jsx(reactSpring.animated.div, __assign({ style: __assign(__assign({}, props), { overflow: 'hidden', width: '100%', willChange: 'height' }) }, { children: jsxRuntime.jsx("div", __assign({ ref: ref }, { children: children }), void 0) }), void 0)); } -var Card = styled__default["default"](styledComponents.Box)(templateObject_1$S || (templateObject_1$S = __makeTemplateObject(["\n width: ", ";\n padding: ", ";\n border-radius: ", ";\n border: ", ";\n"], ["\n width: ", ";\n padding: ", ";\n border-radius: ", ";\n border: ", ";\n"])), function (_a) { +var Card = styled__default["default"](styledComponents.Box)(templateObject_1$T || (templateObject_1$T = __makeTemplateObject(["\n width: ", ";\n padding: ", ";\n border-radius: ", ";\n border: ", ";\n"], ["\n width: ", ";\n padding: ", ";\n border-radius: ", ";\n border: ", ";\n"])), function (_a) { var width = _a.width; return width !== null && width !== void 0 ? width : '100%'; }, function (_a) { @@ -8361,9 +8497,9 @@ styled__default["default"](Card)(templateObject_9$7 || (templateObject_9$7 = __m var theme = _a.theme; return theme.blue2; }); -var templateObject_1$S, templateObject_2$A, templateObject_3$t, templateObject_4$i, templateObject_5$f, templateObject_6$b, templateObject_7$a, templateObject_8$7, templateObject_9$7; +var templateObject_1$T, templateObject_2$A, templateObject_3$t, templateObject_4$i, templateObject_5$f, templateObject_6$b, templateObject_7$a, templateObject_8$7, templateObject_9$7; -var Column = styled__default["default"].div(templateObject_1$R || (templateObject_1$R = __makeTemplateObject(["\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n"], ["\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n"]))); +var Column = styled__default["default"].div(templateObject_1$S || (templateObject_1$S = __makeTemplateObject(["\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n"], ["\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n"]))); var ColumnCenter = styled__default["default"](Column)(templateObject_2$z || (templateObject_2$z = __makeTemplateObject(["\n width: 100%;\n align-items: center;\n"], ["\n width: 100%;\n align-items: center;\n"]))); var AutoColumn = styled__default["default"].div(templateObject_3$s || (templateObject_3$s = __makeTemplateObject(["\n display: grid;\n grid-auto-rows: auto;\n grid-row-gap: ", ";\n justify-items: ", ";\n"], ["\n display: grid;\n grid-auto-rows: auto;\n grid-row-gap: ", ";\n justify-items: ", ";\n"])), function (_a) { var gap = _a.gap; @@ -8372,9 +8508,9 @@ var AutoColumn = styled__default["default"].div(templateObject_3$s || (templateO var justify = _a.justify; return justify && justify; }); -var templateObject_1$R, templateObject_2$z, templateObject_3$s; +var templateObject_1$S, templateObject_2$z, templateObject_3$s; -var loadingAnimation = styled.keyframes(templateObject_1$Q || (templateObject_1$Q = __makeTemplateObject(["\n 0% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0% 50%;\n }\n"], ["\n 0% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0% 50%;\n }\n"]))); +var loadingAnimation = styled.keyframes(templateObject_1$R || (templateObject_1$R = __makeTemplateObject(["\n 0% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0% 50%;\n }\n"], ["\n 0% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0% 50%;\n }\n"]))); var LoadingRows = styled__default["default"].div(templateObject_2$y || (templateObject_2$y = __makeTemplateObject(["\n display: grid;\n\n & > div {\n animation: ", " 1.5s infinite;\n animation-fill-mode: both;\n background: linear-gradient(\n to left,\n ", " 25%,\n ", " 50%,\n ", " 75%\n );\n background-size: 400%;\n border-radius: 12px;\n height: 2.4em;\n will-change: background-position;\n }\n"], ["\n display: grid;\n\n & > div {\n animation: ", " 1.5s infinite;\n animation-fill-mode: both;\n background: linear-gradient(\n to left,\n ", " 25%,\n ", " 50%,\n ", " 75%\n );\n background-size: 400%;\n border-radius: 12px;\n height: 2.4em;\n will-change: background-position;\n }\n"])), loadingAnimation, function (_a) { var theme = _a.theme; return theme.bg1; @@ -8393,7 +8529,7 @@ var loadingOpacityMixin = styled.css(templateObject_3$r || (templateObject_3$r = return ($loading ? '0.4' : '1'); }); var LoadingOpacityContainer = styled__default["default"].div(templateObject_4$h || (templateObject_4$h = __makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), loadingOpacityMixin); -var templateObject_1$Q, templateObject_2$y, templateObject_3$r, templateObject_4$h; +var templateObject_1$R, templateObject_2$y, templateObject_3$r, templateObject_4$h; /** * Invokes callback repeatedly over an interval defined by the delay @@ -8424,7 +8560,7 @@ function useInterval(callback, delay, leading) { }, [delay, leading]); } -var PopoverContainer$1 = styled__default["default"].div(templateObject_1$P || (templateObject_1$P = __makeTemplateObject(["\n z-index: 9999;\n visibility: ", ";\n opacity: ", ";\n transition: visibility 150ms linear, opacity 150ms linear;\n color: ", ";\n"], ["\n z-index: 9999;\n visibility: ", ";\n opacity: ", ";\n transition: visibility 150ms linear, opacity 150ms linear;\n color: ", ";\n"])), function (props) { return (props.show ? 'visible' : 'hidden'); }, function (props) { return (props.show ? 1 : 0); }, function (_a) { +var PopoverContainer$1 = styled__default["default"].div(templateObject_1$Q || (templateObject_1$Q = __makeTemplateObject(["\n z-index: 9999;\n visibility: ", ";\n opacity: ", ";\n transition: visibility 150ms linear, opacity 150ms linear;\n color: ", ";\n"], ["\n z-index: 9999;\n visibility: ", ";\n opacity: ", ";\n transition: visibility 150ms linear, opacity 150ms linear;\n color: ", ";\n"])), function (props) { return (props.show ? 'visible' : 'hidden'); }, function (props) { return (props.show ? 1 : 0); }, function (_a) { var theme = _a.theme; return theme.text2; }); @@ -8458,9 +8594,9 @@ function Popover(_a) { useInterval(updateCallback, show ? 100 : null); return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(ReferenceElement, __assign({ ref: setReferenceElement }, { children: children }), void 0), jsxRuntime.jsx(Portal__default["default"], { children: jsxRuntime.jsxs(PopoverContainer$1, __assign({ show: show, ref: setPopperElement, style: styles.popper }, attributes.popper, { children: [content, jsxRuntime.jsx(Arrow, __assign({ className: "arrow-" + ((_c = (_b = attributes.popper) === null || _b === void 0 ? void 0 : _b['data-popper-placement']) !== null && _c !== void 0 ? _c : ''), ref: setArrowElement, style: styles.arrow }, attributes.arrow), void 0)] }), void 0) }, void 0)] }, void 0)); } -var templateObject_1$P, templateObject_2$x, templateObject_3$q; +var templateObject_1$Q, templateObject_2$x, templateObject_3$q; -var TooltipContainer = styled__default["default"].div(templateObject_1$O || (templateObject_1$O = __makeTemplateObject(["\n max-width: 256px;\n padding: 0.6rem 1rem;\n font-weight: 400;\n word-break: break-word;\n\n background: ", ";\n border-radius: 12px;\n border: 1px solid ", ";\n box-shadow: 0 4px 8px 0 ", ";\n"], ["\n max-width: 256px;\n padding: 0.6rem 1rem;\n font-weight: 400;\n word-break: break-word;\n\n background: ", ";\n border-radius: 12px;\n border: 1px solid ", ";\n box-shadow: 0 4px 8px 0 ", ";\n"])), function (_a) { +var TooltipContainer = styled__default["default"].div(templateObject_1$P || (templateObject_1$P = __makeTemplateObject(["\n max-width: 256px;\n padding: 0.6rem 1rem;\n font-weight: 400;\n word-break: break-word;\n\n background: ", ";\n border-radius: 12px;\n border: 1px solid ", ";\n box-shadow: 0 4px 8px 0 ", ";\n"], ["\n max-width: 256px;\n padding: 0.6rem 1rem;\n font-weight: 400;\n word-break: break-word;\n\n background: ", ";\n border-radius: 12px;\n border: 1px solid ", ";\n box-shadow: 0 4px 8px 0 ", ";\n"])), function (_a) { var theme = _a.theme; return theme.bg0; }, function (_a) { @@ -8495,7 +8631,7 @@ function MouseoverTooltipContent(_a) { var close = React.useCallback(function () { return setShow(false); }, [setShow]); return (jsxRuntime.jsx(TooltipContent, __assign({}, rest, { show: show, content: disableHover ? null : content }, { children: jsxRuntime.jsx("div", __assign({ style: { display: 'inline-block', lineHeight: 0, padding: '0.25rem' }, onMouseEnter: open, onMouseLeave: close }, { children: children }), void 0) }), void 0)); } -var templateObject_1$O; +var templateObject_1$P; var THIRTY_BIPS_FEE = new sdkCore.Percent(JSBI__default["default"].BigInt(30), JSBI__default["default"].BigInt(10000)); var INPUT_FRACTION_AFTER_FEE = ONE_HUNDRED_PERCENT.subtract(THIRTY_BIPS_FEE); @@ -9228,11 +9364,11 @@ function useAllV3Routes(currencyIn, currencyOut) { }, [chainId, currencyIn, currencyOut, pools, poolsLoading]); } -var _a$9; -var QUOTE_GAS_OVERRIDES = (_a$9 = {}, - _a$9[SupportedChainId.ARBITRUM_ONE] = 25000000, - _a$9[SupportedChainId.ARBITRUM_RINKEBY] = 25000000, - _a$9); +var _a$a; +var QUOTE_GAS_OVERRIDES = (_a$a = {}, + _a$a[SupportedChainId.ARBITRUM_ONE] = 25000000, + _a$a[SupportedChainId.ARBITRUM_RINKEBY] = 25000000, + _a$a); var DEFAULT_GAS_QUOTE = 2000000; /** * Returns the best v3 trade for a desired swap @@ -9335,15 +9471,15 @@ function useClientSideV3Trade(tradeType, amountSpecified, otherCurrency) { }, [amountSpecified, currencyIn, currencyOut, quotesResults, routes, routesLoading, tradeType]); } -var _a$8; +var _a$9; // Stablecoin amounts used when calculating spot price for a given currency. // The amount is large enough to filter low liquidity pairs. -var STABLECOIN_AMOUNT_OUT = (_a$8 = {}, - _a$8[SupportedChainId.MAINNET] = sdkCore.CurrencyAmount.fromRawAmount(USDC, 100000000000), - _a$8[SupportedChainId.ARBITRUM_ONE] = sdkCore.CurrencyAmount.fromRawAmount(USDC_ARBITRUM, 10000000000), - _a$8[SupportedChainId.OPTIMISM] = sdkCore.CurrencyAmount.fromRawAmount(DAI_OPTIMISM, 1e+22), - _a$8[SupportedChainId.POLYGON] = sdkCore.CurrencyAmount.fromRawAmount(USDC_POLYGON, 10000000000), - _a$8); +var STABLECOIN_AMOUNT_OUT = (_a$9 = {}, + _a$9[SupportedChainId.MAINNET] = sdkCore.CurrencyAmount.fromRawAmount(USDC, 100000000000), + _a$9[SupportedChainId.ARBITRUM_ONE] = sdkCore.CurrencyAmount.fromRawAmount(USDC_ARBITRUM, 10000000000), + _a$9[SupportedChainId.OPTIMISM] = sdkCore.CurrencyAmount.fromRawAmount(DAI_OPTIMISM, 1e+22), + _a$9[SupportedChainId.POLYGON] = sdkCore.CurrencyAmount.fromRawAmount(USDC_POLYGON, 10000000000), + _a$9); /** * Returns the price in USDC of the input currency * @param currency currency to compute the USDC price of @@ -9413,7 +9549,7 @@ function useStablecoinAmountFromFiatValue(fiatValue) { } } -var StyledPriceContainer = styled__default["default"].button(templateObject_1$N || (templateObject_1$N = __makeTemplateObject(["\n background-color: transparent;\n border: none;\n cursor: pointer;\n align-items: center;\n justify-content: flex-start;\n padding: 0;\n grid-template-columns: 1fr auto;\n grid-gap: 0.25rem;\n display: flex;\n flex-direction: row;\n text-align: left;\n flex-wrap: wrap;\n padding: 8px 0;\n user-select: text;\n"], ["\n background-color: transparent;\n border: none;\n cursor: pointer;\n align-items: center;\n justify-content: flex-start;\n padding: 0;\n grid-template-columns: 1fr auto;\n grid-gap: 0.25rem;\n display: flex;\n flex-direction: row;\n text-align: left;\n flex-wrap: wrap;\n padding: 8px 0;\n user-select: text;\n"]))); +var StyledPriceContainer = styled__default["default"].button(templateObject_1$O || (templateObject_1$O = __makeTemplateObject(["\n background-color: transparent;\n border: none;\n cursor: pointer;\n align-items: center;\n justify-content: flex-start;\n padding: 0;\n grid-template-columns: 1fr auto;\n grid-gap: 0.25rem;\n display: flex;\n flex-direction: row;\n text-align: left;\n flex-wrap: wrap;\n padding: 8px 0;\n user-select: text;\n"], ["\n background-color: transparent;\n border: none;\n cursor: pointer;\n align-items: center;\n justify-content: flex-start;\n padding: 0;\n grid-template-columns: 1fr auto;\n grid-gap: 0.25rem;\n display: flex;\n flex-direction: row;\n text-align: left;\n flex-wrap: wrap;\n padding: 8px 0;\n user-select: text;\n"]))); function TradePrice(_a) { var _b, _c, _d, _e, _f, _g; var price = _a.price, showInverted = _a.showInverted, setShowInverted = _a.setShowInverted; @@ -9435,9 +9571,9 @@ function TradePrice(_a) { flipPrice(); }, title: text }, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, color: theme.text1 }, { children: text }), void 0), ' ', usdcPrice && (jsxRuntime.jsx(ThemedText.DarkGray, { children: jsxRuntime.jsxs(macro.Trans, { children: ["($", usdcPrice.toSignificant(6, { groupSeparator: ',' }), ")"] }, void 0) }, void 0))] }), void 0)); } -var templateObject_1$N; +var templateObject_1$O; -var Wrapper$d = styled__default["default"].div(templateObject_1$M || (templateObject_1$M = __makeTemplateObject(["\n position: relative;\n padding: 8px;\n"], ["\n position: relative;\n padding: 8px;\n"]))); +var Wrapper$d = styled__default["default"].div(templateObject_1$N || (templateObject_1$N = __makeTemplateObject(["\n position: relative;\n padding: 8px;\n"], ["\n position: relative;\n padding: 8px;\n"]))); var ArrowWrapper$1 = styled__default["default"].div(templateObject_3$p || (templateObject_3$p = __makeTemplateObject(["\n padding: 4px;\n border-radius: 12px;\n height: 32px;\n width: 32px;\n position: relative;\n margin-top: -14px;\n margin-bottom: -14px;\n left: calc(50% - 16px);\n /* transform: rotate(90deg); */\n background-color: ", ";\n border: 4px solid ", ";\n z-index: 2;\n ", "\n"], ["\n padding: 4px;\n border-radius: 12px;\n height: 32px;\n width: 32px;\n position: relative;\n margin-top: -14px;\n margin-bottom: -14px;\n left: calc(50% - 16px);\n /* transform: rotate(90deg); */\n background-color: ", ";\n border: 4px solid ", ";\n z-index: 2;\n ", "\n"])), function (_a) { var theme = _a.theme; return theme.bg1; @@ -9508,7 +9644,7 @@ var ResponsiveTooltipContainer = styled__default["default"](TooltipContainer)(te return theme.mediaWidth.upToExtraSmall(templateObject_12$4 || (templateObject_12$4 = __makeTemplateObject(["\n transform: scale(0.8);\n transform-origin: ", ";\n "], ["\n transform: scale(0.8);\n transform-origin: ", ";\n "])), origin !== null && origin !== void 0 ? origin : 'top left'); }); styled__default["default"](TradePrice)(templateObject_14$1 || (templateObject_14$1 = __makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), loadingOpacityMixin); -var templateObject_1$M, templateObject_2$w, templateObject_3$p, templateObject_4$g, templateObject_5$e, templateObject_6$a, templateObject_7$9, templateObject_8$6, templateObject_9$6, templateObject_10$5, templateObject_11$4, templateObject_12$4, templateObject_13$1, templateObject_14$1; +var templateObject_1$N, templateObject_2$w, templateObject_3$p, templateObject_4$g, templateObject_5$e, templateObject_6$a, templateObject_7$9, templateObject_8$6, templateObject_9$6, templateObject_10$5, templateObject_11$4, templateObject_12$4, templateObject_13$1, templateObject_14$1; /** * Formatted version of price impact text with warning colors @@ -9518,7 +9654,7 @@ function FormattedPriceImpact(_a) { return (jsxRuntime.jsx(ErrorText, __assign({ fontWeight: 500, fontSize: 14, severity: warningSeverity(priceImpact) }, { children: priceImpact ? priceImpact.multiply(-1).toFixed(2) + "%" : '-' }), void 0)); } -var StyledCard$1 = styled__default["default"](Card)(templateObject_1$L || (templateObject_1$L = __makeTemplateObject(["\n padding: 0;\n"], ["\n padding: 0;\n"]))); +var StyledCard$1 = styled__default["default"](Card)(templateObject_1$M || (templateObject_1$M = __makeTemplateObject(["\n padding: 0;\n"], ["\n padding: 0;\n"]))); function TextWithLoadingPlaceholder(_a) { var syncing = _a.syncing, width = _a.width, children = _a.children; return syncing ? (jsxRuntime.jsx(LoadingRows, { children: jsxRuntime.jsx("div", { style: { height: '15px', width: width + "px" } }, void 0) }, void 0)) : (children); @@ -9541,7 +9677,7 @@ function AdvancedSwapDetails(_a) { ? trade.minimumAmountOut(allowedSlippage).toSignificant(6) + " " + trade.outputAmount.currency.symbol : trade.maximumAmountIn(allowedSlippage).toSignificant(6) + " " + trade.inputAmount.currency.symbol }), void 0) }), void 0)] }, void 0), !(trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) || !chainId || !SUPPORTED_GAS_ESTIMATE_CHAIN_IDS.includes(chainId) ? null : (jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(ThemedText.SubHeader, __assign({ color: theme.text3 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Network Fee" }, void 0) }), void 0), jsxRuntime.jsx(TextWithLoadingPlaceholder, __assign({ syncing: syncing, width: 50 }, { children: jsxRuntime.jsxs(ThemedText.Black, __assign({ textAlign: "right", fontSize: 14, color: theme.text3 }, { children: ["~$", trade.gasUseEstimateUSD.toFixed(2)] }), void 0) }), void 0)] }, void 0))] }), void 0) }, void 0)); } -var templateObject_1$L; +var templateObject_1$M; var _path$3, _line$1, _line2, _path2; @@ -9622,7 +9758,7 @@ function pickFontColor(variant, theme) { return polished.readableColor(theme.bg2); } } -var Badge = styled__default["default"].div(templateObject_1$K || (templateObject_1$K = __makeTemplateObject(["\n align-items: center;\n background-color: ", ";\n border: ", ";\n border-radius: 0.5rem;\n color: ", ";\n display: inline-flex;\n padding: 4px 6px;\n justify-content: center;\n font-weight: 500;\n"], ["\n align-items: center;\n background-color: ", ";\n border: ", ";\n border-radius: 0.5rem;\n color: ", ";\n display: inline-flex;\n padding: 4px 6px;\n justify-content: center;\n font-weight: 500;\n"])), function (_a) { +var Badge = styled__default["default"].div(templateObject_1$L || (templateObject_1$L = __makeTemplateObject(["\n align-items: center;\n background-color: ", ";\n border: ", ";\n border-radius: 0.5rem;\n color: ", ";\n display: inline-flex;\n padding: 4px 6px;\n justify-content: center;\n font-weight: 500;\n"], ["\n align-items: center;\n background-color: ", ";\n border: ", ";\n border-radius: 0.5rem;\n color: ", ";\n display: inline-flex;\n padding: 4px 6px;\n justify-content: center;\n font-weight: 500;\n"])), function (_a) { var theme = _a.theme, variant = _a.variant; return pickBackgroundColor(variant, theme); }, function (_a) { @@ -9632,7 +9768,7 @@ var Badge = styled__default["default"].div(templateObject_1$K || (templateObject var theme = _a.theme, variant = _a.variant; return pickFontColor(variant, theme); }); -var templateObject_1$K; +var templateObject_1$L; function safeNamehash(name) { if (name === undefined) @@ -9761,7 +9897,7 @@ function Logo(_a) { return jsxRuntime.jsx(reactFeather.Slash, __assign({}, rest, { style: __assign(__assign({}, style), { color: theme.bg4 }) }), void 0); } -var StyledLogo$1 = styled__default["default"](Logo)(templateObject_1$J || (templateObject_1$J = __makeTemplateObject(["\n width: ", ";\n height: ", ";\n background: radial-gradient(white 50%, #ffffff00 calc(75% + 1px), #ffffff00 100%);\n border-radius: 50%;\n -mox-box-shadow: 0 0 1px ", ";\n -webkit-box-shadow: 0 0 1px ", ";\n box-shadow: 0 0 1px ", ";\n border: 0px solid rgba(255, 255, 255, 0);\n"], ["\n width: ", ";\n height: ", ";\n background: radial-gradient(white 50%, #ffffff00 calc(75% + 1px), #ffffff00 100%);\n border-radius: 50%;\n -mox-box-shadow: 0 0 1px ", ";\n -webkit-box-shadow: 0 0 1px ", ";\n box-shadow: 0 0 1px ", ";\n border: 0px solid rgba(255, 255, 255, 0);\n"])), function (_a) { +var StyledLogo$1 = styled__default["default"](Logo)(templateObject_1$K || (templateObject_1$K = __makeTemplateObject(["\n width: ", ";\n height: ", ";\n background: radial-gradient(white 50%, #ffffff00 calc(75% + 1px), #ffffff00 100%);\n border-radius: 50%;\n -mox-box-shadow: 0 0 1px ", ";\n -webkit-box-shadow: 0 0 1px ", ";\n box-shadow: 0 0 1px ", ";\n border: 0px solid rgba(255, 255, 255, 0);\n"], ["\n width: ", ";\n height: ", ";\n background: radial-gradient(white 50%, #ffffff00 calc(75% + 1px), #ffffff00 100%);\n border-radius: 50%;\n -mox-box-shadow: 0 0 1px ", ";\n -webkit-box-shadow: 0 0 1px ", ";\n box-shadow: 0 0 1px ", ";\n border: 0px solid rgba(255, 255, 255, 0);\n"])), function (_a) { var size = _a.size; return size; }, function (_a) { @@ -9783,9 +9919,9 @@ function CurrencyLogo(_a) { var logoURIs = useCurrencyLogoURIs(currency); return (jsxRuntime.jsx(StyledLogo$1, __assign({ size: size, native: (_b = currency === null || currency === void 0 ? void 0 : currency.isNative) !== null && _b !== void 0 ? _b : false, srcs: logoURIs, alt: ((_c = currency === null || currency === void 0 ? void 0 : currency.symbol) !== null && _c !== void 0 ? _c : 'token') + " logo", style: style }, rest), void 0)); } -var templateObject_1$J; +var templateObject_1$K; -var Wrapper$c = styled__default["default"].div(templateObject_1$I || (templateObject_1$I = __makeTemplateObject(["\n position: relative;\n display: flex;\n flex-direction: row;\n margin-left: ", ";\n"], ["\n position: relative;\n display: flex;\n flex-direction: row;\n margin-left: ", ";\n"])), function (_a) { +var Wrapper$c = styled__default["default"].div(templateObject_1$J || (templateObject_1$J = __makeTemplateObject(["\n position: relative;\n display: flex;\n flex-direction: row;\n margin-left: ", ";\n"], ["\n position: relative;\n display: flex;\n flex-direction: row;\n margin-left: ", ";\n"])), function (_a) { var sizeraw = _a.sizeraw, margin = _a.margin; return margin && (sizeraw / 3 + 8).toString() + 'px'; }); @@ -9798,7 +9934,7 @@ function DoubleCurrencyLogo(_a) { var currency0 = _a.currency0, currency1 = _a.currency1, _b = _a.size, size = _b === void 0 ? 16 : _b, _c = _a.margin, margin = _c === void 0 ? false : _c; return (jsxRuntime.jsxs(Wrapper$c, __assign({ sizeraw: size, margin: margin }, { children: [currency0 && jsxRuntime.jsx(HigherLogo, { currency: currency0, size: size.toString() + 'px' }, void 0), currency1 && jsxRuntime.jsx(CoveredLogo, { currency: currency1, size: size.toString() + 'px', sizeraw: size }, void 0)] }), void 0)); } -var templateObject_1$I, templateObject_2$v, templateObject_3$o; +var templateObject_1$J, templateObject_2$v, templateObject_3$o; /** * Returns a WrappedTokenInfo from the active token lists when possible, @@ -9842,7 +9978,7 @@ var SvgDotLine = function SvgDotLine(props) { }))); }; -var Wrapper$b = styled__default["default"](rebass.Box)(templateObject_1$H || (templateObject_1$H = __makeTemplateObject(["\n align-items: center;\n width: 100%;\n"], ["\n align-items: center;\n width: 100%;\n"]))); +var Wrapper$b = styled__default["default"](rebass.Box)(templateObject_1$I || (templateObject_1$I = __makeTemplateObject(["\n align-items: center;\n width: 100%;\n"], ["\n align-items: center;\n width: 100%;\n"]))); var RouteContainerRow = styled__default["default"](Row)(templateObject_2$u || (templateObject_2$u = __makeTemplateObject(["\n display: grid;\n grid-template-columns: 24px 1fr 24px;\n"], ["\n display: grid;\n grid-template-columns: 24px 1fr 24px;\n"]))); var RouteRow = styled__default["default"](Row)(templateObject_3$n || (templateObject_3$n = __makeTemplateObject(["\n align-items: center;\n display: flex;\n justify-content: center;\n padding: 0.1rem 0.5rem;\n position: relative;\n"], ["\n align-items: center;\n display: flex;\n justify-content: center;\n padding: 0.1rem 0.5rem;\n position: relative;\n"]))); var PoolBadge = styled__default["default"](Badge)(templateObject_4$f || (templateObject_4$f = __makeTemplateObject(["\n display: flex;\n padding: 4px 4px;\n"], ["\n display: flex;\n padding: 4px 4px;\n"]))); @@ -9883,7 +10019,7 @@ function Pool(_a) { // TODO - link pool icon to info.uniswap.org via query params return (jsxRuntime.jsx(MouseoverTooltip, __assign({ text: jsxRuntime.jsxs(macro.Trans, { children: [(tokenInfo0 === null || tokenInfo0 === void 0 ? void 0 : tokenInfo0.symbol) + '/' + (tokenInfo1 === null || tokenInfo1 === void 0 ? void 0 : tokenInfo1.symbol) + ' ' + feeAmount / 10000, "% pool"] }, void 0) }, { children: jsxRuntime.jsxs(PoolBadge, { children: [jsxRuntime.jsx(rebass.Box, __assign({ margin: "0 4px 0 12px" }, { children: jsxRuntime.jsx(DoubleCurrencyLogo, { currency0: tokenInfo1, currency1: tokenInfo0, size: 20 }, void 0) }), void 0), jsxRuntime.jsxs(ThemedText.Small, __assign({ fontSize: 14 }, { children: [feeAmount / 10000, "%"] }), void 0)] }, void 0) }), void 0)); } -var templateObject_1$H, templateObject_2$u, templateObject_3$n, templateObject_4$f, templateObject_5$d, templateObject_6$9, templateObject_7$8, templateObject_8$5, templateObject_9$5; +var templateObject_1$I, templateObject_2$u, templateObject_3$n, templateObject_4$f, templateObject_5$d, templateObject_6$9, templateObject_7$8, templateObject_8$5, templateObject_9$5; var AUTO_ROUTER_SUPPORTED_CHAINS = Object.values(smartOrderRouter.ChainId); @@ -9947,7 +10083,7 @@ var SvgStaticRoute = function SvgStaticRoute(props) { }))); }; -var StyledAutoRouterIcon = styled__default["default"](SvgAutoRouter)(templateObject_1$G || (templateObject_1$G = __makeTemplateObject(["\n height: 16px;\n width: 16px;\n\n :hover {\n filter: brightness(1.3);\n }\n"], ["\n height: 16px;\n width: 16px;\n\n :hover {\n filter: brightness(1.3);\n }\n"]))); +var StyledAutoRouterIcon = styled__default["default"](SvgAutoRouter)(templateObject_1$H || (templateObject_1$H = __makeTemplateObject(["\n height: 16px;\n width: 16px;\n\n :hover {\n filter: brightness(1.3);\n }\n"], ["\n height: 16px;\n width: 16px;\n\n :hover {\n filter: brightness(1.3);\n }\n"]))); var StyledStaticRouterIcon = styled__default["default"](SvgStaticRoute)(templateObject_2$t || (templateObject_2$t = __makeTemplateObject(["\n height: 16px;\n width: 16px;\n\n fill: ", ";\n\n :hover {\n filter: brightness(1.3);\n }\n"], ["\n height: 16px;\n width: 16px;\n\n fill: ", ";\n\n :hover {\n filter: brightness(1.3);\n }\n"])), function (_a) { var theme = _a.theme; return theme.text3; @@ -9964,9 +10100,9 @@ function AutoRouterLabel() { var autoRouterSupported = useAutoRouterSupported(); return autoRouterSupported ? (jsxRuntime.jsx(StyledAutoRouterLabel, __assign({ fontSize: 14 }, { children: "Auto Router" }), void 0)) : (jsxRuntime.jsx(ThemedText.Black, __assign({ fontSize: 14 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Trade Route" }, void 0) }), void 0)); } -var templateObject_1$G, templateObject_2$t, templateObject_3$m; +var templateObject_1$H, templateObject_2$t, templateObject_3$m; -var Wrapper$a = styled__default["default"](AutoColumn)(templateObject_1$F || (templateObject_1$F = __makeTemplateObject(["\n padding: ", ";\n border-radius: 16px;\n border: 1px solid ", ";\n cursor: pointer;\n"], ["\n padding: ", ";\n border-radius: 16px;\n border: 1px solid ", ";\n cursor: pointer;\n"])), function (_a) { +var Wrapper$a = styled__default["default"](AutoColumn)(templateObject_1$G || (templateObject_1$G = __makeTemplateObject(["\n padding: ", ";\n border-radius: 16px;\n border: 1px solid ", ";\n cursor: pointer;\n"], ["\n padding: ", ";\n border-radius: 16px;\n border: 1px solid ", ";\n cursor: pointer;\n"])), function (_a) { var fixedOpen = _a.fixedOpen; return (fixedOpen ? '12px' : '12px 8px 12px 12px'); }, function (_a) { @@ -10021,9 +10157,9 @@ function getTokenPath(trade) { }; }); } -var templateObject_1$F, templateObject_2$s; +var templateObject_1$G, templateObject_2$s; -var GasWrapper = styled__default["default"](RowFixed)(templateObject_1$E || (templateObject_1$E = __makeTemplateObject(["\n border-radius: 8px;\n padding: 4px 6px;\n height: 24px;\n color: ", ";\n background-color: ", ";\n font-size: 14px;\n font-weight: 500;\n user-select: none;\n"], ["\n border-radius: 8px;\n padding: 4px 6px;\n height: 24px;\n color: ", ";\n background-color: ", ";\n font-size: 14px;\n font-weight: 500;\n user-select: none;\n"])), function (_a) { +var GasWrapper = styled__default["default"](RowFixed)(templateObject_1$F || (templateObject_1$F = __makeTemplateObject(["\n border-radius: 8px;\n padding: 4px 6px;\n height: 24px;\n color: ", ";\n background-color: ", ";\n font-size: 14px;\n font-weight: 500;\n user-select: none;\n"], ["\n border-radius: 8px;\n padding: 4px 6px;\n height: 24px;\n color: ", ";\n background-color: ", ";\n font-size: 14px;\n font-weight: 500;\n user-select: none;\n"])), function (_a) { var theme = _a.theme; return theme.text3; }, function (_a) { @@ -10054,9 +10190,9 @@ function GasEstimateBadge(_a) { }); } }, { children: jsxRuntime.jsx(LoadingOpacityContainer, __assign({ "$loading": loading }, { children: jsxRuntime.jsxs(GasWrapper, { children: [jsxRuntime.jsx(StyledGasIcon, {}, void 0), formattedGasPriceString !== null && formattedGasPriceString !== void 0 ? formattedGasPriceString : null] }, void 0) }), void 0) }), void 0)); } -var templateObject_1$E, templateObject_2$r; +var templateObject_1$F, templateObject_2$r; -var Wrapper$9 = styled__default["default"](Row)(templateObject_1$D || (templateObject_1$D = __makeTemplateObject(["\n width: 100%;\n justify-content: center;\n"], ["\n width: 100%;\n justify-content: center;\n"]))); +var Wrapper$9 = styled__default["default"](Row)(templateObject_1$E || (templateObject_1$E = __makeTemplateObject(["\n width: 100%;\n justify-content: center;\n"], ["\n width: 100%;\n justify-content: center;\n"]))); var StyledInfoIcon = styled__default["default"](reactFeather.Info)(templateObject_2$q || (templateObject_2$q = __makeTemplateObject(["\n height: 16px;\n width: 16px;\n margin-right: 4px;\n color: ", ";\n"], ["\n height: 16px;\n width: 16px;\n margin-right: 4px;\n color: ", ";\n"])), function (_a) { var theme = _a.theme; return theme.text3; @@ -10105,9 +10241,9 @@ function SwapDetailsDropdown(_a) { !chainId || !SUPPORTED_GAS_ESTIMATE_CHAIN_IDS.includes(chainId) ? null : (jsxRuntime.jsx(GasEstimateBadge, { trade: trade, loading: syncing || loading, showRoute: !showDetails, disableHover: showDetails }, void 0)), jsxRuntime.jsx(RotatingArrow, { stroke: trade ? theme.text3 : theme.bg3, open: Boolean(trade && showDetails) }, void 0)] }, void 0)] }), void 0), jsxRuntime.jsx(AnimatedDropdown, __assign({ open: showDetails }, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: '8px', style: { padding: '0', paddingBottom: '8px' } }, { children: [trade ? (jsxRuntime.jsx(StyledCard, { children: jsxRuntime.jsx(AdvancedSwapDetails, { trade: trade, allowedSlippage: allowedSlippage, syncing: syncing }, void 0) }, void 0)) : null, trade ? jsxRuntime.jsx(SwapRoute, { trade: trade, syncing: syncing }, void 0) : null] }), void 0) }), void 0)] }), void 0) }, void 0)); } -var templateObject_1$D, templateObject_2$q, templateObject_3$l, templateObject_4$e, templateObject_5$c, templateObject_6$8, templateObject_7$7, templateObject_8$4, templateObject_9$4, templateObject_10$4; +var templateObject_1$E, templateObject_2$q, templateObject_3$l, templateObject_4$e, templateObject_5$c, templateObject_6$8, templateObject_7$7, templateObject_8$4, templateObject_9$4, templateObject_10$4; -var BaseButton = styled__default["default"](styledComponents.Button)(templateObject_1$C || (templateObject_1$C = __makeTemplateObject(["\n padding: ", ";\n width: ", ";\n font-weight: 500;\n text-align: center;\n border-radius: ", ";\n outline: none;\n border: 1px solid transparent;\n color: ", ";\n text-decoration: none;\n display: flex;\n justify-content: center;\n flex-wrap: nowrap;\n align-items: center;\n cursor: pointer;\n position: relative;\n z-index: 1;\n &:disabled {\n opacity: 50%;\n cursor: auto;\n pointer-events: none;\n }\n\n will-change: transform;\n transition: transform 450ms ease;\n transform: perspective(1px) translateZ(0);\n\n > * {\n user-select: none;\n }\n\n > a {\n text-decoration: none;\n }\n"], ["\n padding: ", ";\n width: ", ";\n font-weight: 500;\n text-align: center;\n border-radius: ", ";\n outline: none;\n border: 1px solid transparent;\n color: ", ";\n text-decoration: none;\n display: flex;\n justify-content: center;\n flex-wrap: nowrap;\n align-items: center;\n cursor: pointer;\n position: relative;\n z-index: 1;\n &:disabled {\n opacity: 50%;\n cursor: auto;\n pointer-events: none;\n }\n\n will-change: transform;\n transition: transform 450ms ease;\n transform: perspective(1px) translateZ(0);\n\n > * {\n user-select: none;\n }\n\n > a {\n text-decoration: none;\n }\n"])), function (_a) { +var BaseButton = styled__default["default"](styledComponents.Button)(templateObject_1$D || (templateObject_1$D = __makeTemplateObject(["\n padding: ", ";\n width: ", ";\n font-weight: 500;\n text-align: center;\n border-radius: ", ";\n outline: none;\n border: 1px solid transparent;\n color: ", ";\n text-decoration: none;\n display: flex;\n justify-content: center;\n flex-wrap: nowrap;\n align-items: center;\n cursor: pointer;\n position: relative;\n z-index: 1;\n &:disabled {\n opacity: 50%;\n cursor: auto;\n pointer-events: none;\n }\n\n will-change: transform;\n transition: transform 450ms ease;\n transform: perspective(1px) translateZ(0);\n\n > * {\n user-select: none;\n }\n\n > a {\n text-decoration: none;\n }\n"], ["\n padding: ", ";\n width: ", ";\n font-weight: 500;\n text-align: center;\n border-radius: ", ";\n outline: none;\n border: 1px solid transparent;\n color: ", ";\n text-decoration: none;\n display: flex;\n justify-content: center;\n flex-wrap: nowrap;\n align-items: center;\n cursor: pointer;\n position: relative;\n z-index: 1;\n &:disabled {\n opacity: 50%;\n cursor: auto;\n pointer-events: none;\n }\n\n will-change: transform;\n transition: transform 450ms ease;\n transform: perspective(1px) translateZ(0);\n\n > * {\n user-select: none;\n }\n\n > a {\n text-decoration: none;\n }\n"])), function (_a) { var padding = _a.padding; return padding !== null && padding !== void 0 ? padding : '16px'; }, function (_a) { @@ -10323,7 +10459,7 @@ styled__default["default"].div(templateObject_13 || (templateObject_13 = __makeT }); styled__default["default"].div(templateObject_14 || (templateObject_14 = __makeTemplateObject(["\n width: 20px;\n padding: 0 10px;\n position: absolute;\n top: 11px;\n right: 15px;\n"], ["\n width: 20px;\n padding: 0 10px;\n position: absolute;\n top: 11px;\n right: 15px;\n"]))); styled__default["default"](reactFeather.Check)(templateObject_15 || (templateObject_15 = __makeTemplateObject(["\n size: 13px;\n"], ["\n size: 13px;\n"]))); -var templateObject_1$C, templateObject_2$p, templateObject_3$k, templateObject_4$d, templateObject_5$b, templateObject_6$7, templateObject_7$6, templateObject_8$3, templateObject_9$3, templateObject_10$3, templateObject_11$3, templateObject_12$3, templateObject_13, templateObject_14, templateObject_15; +var templateObject_1$D, templateObject_2$p, templateObject_3$k, templateObject_4$d, templateObject_5$b, templateObject_6$7, templateObject_7$6, templateObject_8$3, templateObject_9$3, templateObject_10$3, templateObject_11$3, templateObject_12$3, templateObject_13, templateObject_14, templateObject_15; var parser = new uaParserJs.UAParser(window.navigator.userAgent); var type$1 = parser.getDevice().type; @@ -10332,7 +10468,7 @@ var isMobile = type$1 === 'mobile' || type$1 === 'tablet'; var AnimatedDialogOverlay = reactSpring.animated(dialog.DialogOverlay); // eslint-disable-next-line @typescript-eslint/no-unused-vars -var StyledDialogOverlay = styled__default["default"](AnimatedDialogOverlay)(templateObject_1$B || (templateObject_1$B = __makeTemplateObject(["\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: ", ";\n }\n"], ["\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: ", ";\n }\n"])), function (_a) { +var StyledDialogOverlay = styled__default["default"](AnimatedDialogOverlay)(templateObject_1$C || (templateObject_1$C = __makeTemplateObject(["\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: ", ";\n }\n"], ["\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: ", ";\n }\n"])), function (_a) { var theme = _a.theme; return theme.modalBG; }); @@ -10394,20 +10530,20 @@ function Modal(_a) { ? __assign(__assign({}, bind()), { style: { transform: y.interpolate(function (y) { return "translateY(" + (y > 0 ? y : 0) + "px)"; }) } }) : {}), { "aria-label": "dialog content", minHeight: minHeight, maxHeight: maxHeight, mobile: isMobile }, { children: [!initialFocusRef && isMobile ? jsxRuntime.jsx("div", { tabIndex: 1 }, void 0) : null, children] }), void 0) }), key)); }) }, void 0)); } -var templateObject_1$B, templateObject_2$o, templateObject_3$j, templateObject_4$c, templateObject_5$a, templateObject_6$6, templateObject_7$5; +var templateObject_1$C, templateObject_2$o, templateObject_3$j, templateObject_4$c, templateObject_5$a, templateObject_6$6, templateObject_7$5; -var _a$7; -var ETHERSCAN_PREFIXES = (_a$7 = {}, - _a$7[SupportedChainId.MAINNET] = 'https://etherscan.io', - _a$7[SupportedChainId.ROPSTEN] = 'https://ropsten.etherscan.io', - _a$7[SupportedChainId.RINKEBY] = 'https://rinkeby.etherscan.io', - _a$7[SupportedChainId.GOERLI] = 'https://goerli.etherscan.io', - _a$7[SupportedChainId.KOVAN] = 'https://kovan.etherscan.io', - _a$7[SupportedChainId.OPTIMISM] = 'https://optimistic.etherscan.io', - _a$7[SupportedChainId.OPTIMISTIC_KOVAN] = 'https://kovan-optimistic.etherscan.io', - _a$7[SupportedChainId.POLYGON_MUMBAI] = 'https://mumbai.polygonscan.com', - _a$7[SupportedChainId.POLYGON] = 'https://polygonscan.com', - _a$7); +var _a$8; +var ETHERSCAN_PREFIXES = (_a$8 = {}, + _a$8[SupportedChainId.MAINNET] = 'https://etherscan.io', + _a$8[SupportedChainId.ROPSTEN] = 'https://ropsten.etherscan.io', + _a$8[SupportedChainId.RINKEBY] = 'https://rinkeby.etherscan.io', + _a$8[SupportedChainId.GOERLI] = 'https://goerli.etherscan.io', + _a$8[SupportedChainId.KOVAN] = 'https://kovan.etherscan.io', + _a$8[SupportedChainId.OPTIMISM] = 'https://optimistic.etherscan.io', + _a$8[SupportedChainId.OPTIMISTIC_KOVAN] = 'https://kovan-optimistic.etherscan.io', + _a$8[SupportedChainId.POLYGON_MUMBAI] = 'https://mumbai.polygonscan.com', + _a$8[SupportedChainId.POLYGON] = 'https://polygonscan.com', + _a$8); var ExplorerDataType; (function (ExplorerDataType) { ExplorerDataType["TRANSACTION"] = "transaction"; @@ -10467,7 +10603,7 @@ function getExplorerLink(chainId, data, type) { } } -var DetailsFooter = styled__default["default"].div(templateObject_1$A || (templateObject_1$A = __makeTemplateObject(["\n padding-top: calc(16px + 2rem);\n padding-bottom: 20px;\n margin-left: auto;\n margin-right: auto;\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: ", ";\n background-color: ", ";\n z-index: ", ";\n\n transform: ", ";\n transition: transform 300ms ease-in-out;\n text-align: center;\n"], ["\n padding-top: calc(16px + 2rem);\n padding-bottom: 20px;\n margin-left: auto;\n margin-right: auto;\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: ", ";\n background-color: ", ";\n z-index: ", ";\n\n transform: ", ";\n transition: transform 300ms ease-in-out;\n text-align: center;\n"])), function (_a) { +var DetailsFooter = styled__default["default"].div(templateObject_1$B || (templateObject_1$B = __makeTemplateObject(["\n padding-top: calc(16px + 2rem);\n padding-bottom: 20px;\n margin-left: auto;\n margin-right: auto;\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: ", ";\n background-color: ", ";\n z-index: ", ";\n\n transform: ", ";\n transition: transform 300ms ease-in-out;\n text-align: center;\n"], ["\n padding-top: calc(16px + 2rem);\n padding-bottom: 20px;\n margin-left: auto;\n margin-right: auto;\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: ", ";\n background-color: ", ";\n z-index: ", ";\n\n transform: ", ";\n transition: transform 300ms ease-in-out;\n text-align: center;\n"])), function (_a) { var theme = _a.theme; return theme.text2; }, function (_a) { @@ -10499,7 +10635,7 @@ function UnsupportedCurrencyFooter(_a) { Object.keys(unsupportedTokens).includes(token.address) && (jsxRuntime.jsx(OutlineCard, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "10px" }, { children: [jsxRuntime.jsxs(AutoRow, __assign({ gap: "5px", align: "center" }, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: token, size: '24px' }, void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 500 }, { children: token.symbol }), void 0)] }), void 0), chainId && (jsxRuntime.jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, token.address, ExplorerDataType.ADDRESS) }, { children: jsxRuntime.jsx(AddressText$1, { children: token.address }, void 0) }), void 0))] }), void 0) }, (_a = token.address) === null || _a === void 0 ? void 0 : _a.concat('not-supported')))); }), jsxRuntime.jsx(AutoColumn, __assign({ gap: "lg" }, { children: jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 500 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons." }, void 0) }), void 0) }), void 0)] }), void 0) }), void 0) }), void 0), jsxRuntime.jsx(StyledButtonEmpty, __assign({ padding: '0', onClick: function () { return setShowDetails(true); } }, { children: jsxRuntime.jsx(ThemedText.Blue, { children: jsxRuntime.jsx(macro.Trans, { children: "Read more about unsupported assets" }, void 0) }, void 0) }), void 0)] }), void 0)); } -var templateObject_1$A, templateObject_2$n, templateObject_3$i, templateObject_4$b; +var templateObject_1$B, templateObject_2$n, templateObject_3$i, templateObject_4$b; /** * Does a lookup for an ENS name to find its address. @@ -10569,400 +10705,585 @@ function useENS(nameOrAddress) { }); }, [lookup.address, lookup.loading, nameOrAddress, reverseLookup.ENSName, reverseLookup.loading, validated]); } -var InputPanel$1 = styled__default["default"].div(templateObject_1$z || (templateObject_1$z = __makeTemplateObject(["\n ", "\n position: relative;\n border-radius: 1.25rem;\n background-color: ", ";\n z-index: 1;\n width: 100%;\n"], ["\n ", "\n position: relative;\n border-radius: 1.25rem;\n background-color: ", ";\n z-index: 1;\n width: 100%;\n"])), function (_a) { - var theme = _a.theme; - return theme.flexColumnNoWrap; -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}); -var ContainerRow = styled__default["default"].div(templateObject_2$m || (templateObject_2$m = __makeTemplateObject(["\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 1.25rem;\n border: 1px solid ", ";\n transition: border-color 300ms ", ",\n color 500ms ", ";\n background-color: ", ";\n"], ["\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 1.25rem;\n border: 1px solid ", ";\n transition: border-color 300ms ", ",\n color 500ms ", ";\n background-color: ", ";\n"])), function (_a) { - var error = _a.error, theme = _a.theme; - return (error ? theme.red1 : theme.bg2); -}, function (_a) { - var error = _a.error; - return (error ? 'step-end' : 'step-start'); -}, function (_a) { - var error = _a.error; - return (error ? 'step-end' : 'step-start'); -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}); -var InputContainer = styled__default["default"].div(templateObject_3$h || (templateObject_3$h = __makeTemplateObject(["\n flex: 1;\n padding: 1rem;\n"], ["\n flex: 1;\n padding: 1rem;\n"]))); -var Input$2 = styled__default["default"].input(templateObject_4$a || (templateObject_4$a = __makeTemplateObject(["\n font-size: 1.25rem;\n outline: none;\n border: none;\n flex: 1 1 auto;\n width: 0;\n background-color: ", ";\n transition: color 300ms ", ";\n color: ", ";\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 500;\n width: 100%;\n ::placeholder {\n color: ", ";\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: ", ";\n }\n"], ["\n font-size: 1.25rem;\n outline: none;\n border: none;\n flex: 1 1 auto;\n width: 0;\n background-color: ", ";\n transition: color 300ms ", ";\n color: ", ";\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 500;\n width: 100%;\n ::placeholder {\n color: ", ";\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: ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var error = _a.error; - return (error ? 'step-end' : 'step-start'); -}, function (_a) { - var error = _a.error, theme = _a.theme; - return (error ? theme.red1 : theme.text1); -}, function (_a) { - var theme = _a.theme; - return theme.text4; -}, function (_a) { - var theme = _a.theme; - return theme.text4; -}); -function AddressInputPanel(_a) { - var id = _a.id, _b = _a.className, className = _b === void 0 ? 'recipient-address-input' : _b, label = _a.label, placeholder = _a.placeholder, value = _a.value, onChange = _a.onChange; - var chainId = useActiveWeb3React().chainId; - var theme = React.useContext(styled.ThemeContext); - var _c = useENS(value), address = _c.address, loading = _c.loading, name = _c.name; - var handleInput = React.useCallback(function (event) { - var input = event.target.value; - var withoutSpaces = input.replace(/\s+/g, ''); - onChange(withoutSpaces); - }, [onChange]); - var error = Boolean(value.length > 0 && !loading && !address); - return (jsxRuntime.jsx(InputPanel$1, __assign({ id: id }, { children: jsxRuntime.jsx(ContainerRow, __assign({ error: error }, { children: jsxRuntime.jsx(InputContainer, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "md" }, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(ThemedText.Black, __assign({ color: theme.text2, fontWeight: 500, fontSize: 14 }, { children: label !== null && label !== void 0 ? label : jsxRuntime.jsx(macro.Trans, { children: "Recipient" }, void 0) }), void 0), address && chainId && (jsxRuntime.jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, name !== null && name !== void 0 ? name : address, ExplorerDataType.ADDRESS), style: { fontSize: '14px' } }, { children: jsxRuntime.jsx(macro.Trans, { children: "(View on Explorer)" }, void 0) }), void 0))] }, void 0), jsxRuntime.jsx(Input$2, { className: className, type: "text", autoComplete: "off", autoCorrect: "off", autoCapitalize: "off", spellCheck: "false", placeholder: placeholder !== null && placeholder !== void 0 ? placeholder : macro.t(templateObject_5$9 || (templateObject_5$9 = __makeTemplateObject(["Wallet Address or ENS name"], ["Wallet Address or ENS name"]))), error: error, pattern: "^(0x[a-fA-F0-9]{40})$", onChange: handleInput, value: value }, void 0)] }), void 0) }, void 0) }), void 0) }), void 0)); -} -var templateObject_1$z, templateObject_2$m, templateObject_3$h, templateObject_4$a, templateObject_5$9; - -function formatCurrencyAmount(amount, sigFigs) { - if (!amount) { - return '-'; - } - if (JSBI__default["default"].equal(amount.quotient, JSBI__default["default"].BigInt(0))) { - return '0'; - } - if (amount.divide(amount.decimalScale).lessThan(new sdkCore.Fraction(1, 100000))) { - return '<0.00001'; - } - return amount.toSignificant(sigFigs); +var ERC20_INTERFACE = new abi$6.Interface([ + { + constant: false, + inputs: [ + { name: '_spender', type: 'address' }, + { name: '_value', type: 'uint256' }, + ], + name: 'approve', + outputs: [{ name: '', type: 'bool' }], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, +]); +function approveAmountCalldata(amount, spender) { + if (!amount.currency.isToken) + throw new Error('Must call with an amount of token'); + var approveData = ERC20_INTERFACE.encodeFunctionData('approve', [spender, v3Sdk.toHex(amount.quotient)]); + return { + to: amount.currency.address, + data: approveData, + value: '0x0', + }; } -var _path; - -function _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); } +var ArgentWalletContractABI = [ + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "_transactions", + type: "tuple[]" + } + ], + name: "wc_multiCall", + outputs: [ + { + internalType: "bytes[]", + name: "", + type: "bytes[]" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "_msgHash", + type: "bytes32" + }, + { + internalType: "bytes", + name: "_signature", + type: "bytes" + } + ], + name: "isValidSignature", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4" + } + ], + stateMutability: "view", + type: "function" + } +]; -var SvgDropdown = function SvgDropdown(props) { - return /*#__PURE__*/React__namespace.createElement("svg", _extends({ - width: 12, - height: 7, - viewBox: "0 0 12 7", - fill: "none", - xmlns: "http://www.w3.org/2000/svg" - }, props), _path || (_path = /*#__PURE__*/React__namespace.createElement("path", { - d: "M0.97168 1L6.20532 6L11.439 1", - stroke: "#AEAEAE" - }))); -}; +function useIsArgentWallet() { + var _a, _b; + var account = useActiveWeb3React().account; + var argentWalletDetector = useArgentWalletDetectorContract(); + var inputs = React.useMemo(function () { return [account !== null && account !== void 0 ? account : undefined]; }, [account]); + var call = useSingleCallResult(argentWalletDetector, 'isArgentWallet', inputs, reduxMulticall.NEVER_RELOAD); + return (_b = (_a = call === null || call === void 0 ? void 0 : call.result) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : false; +} -/** - * Returns the gas value plus a margin for unexpected or variable gas costs - * @param value the gas value to pad - */ -function calculateGasMargin(value) { - return value.mul(120).div(100); +function useArgentWalletContract() { + var account = useActiveWeb3React().account; + var isArgentWallet = useIsArgentWallet(); + return useContract(isArgentWallet ? account !== null && account !== void 0 ? account : undefined : undefined, ArgentWalletContractABI, true); } /** - * Be careful adding to this enum, always assign a unique value (typescript will not prevent duplicate values). - * These values is persisted in state and if you change the value it will cause errors + * Returns the swap calls that can be used to make the trade + * @param trade trade to execute + * @param allowedSlippage user allowed slippage + * @param recipientAddressOrName the ENS name or address of the recipient of the swap output + * @param signatureData the signature data of the permit of the input token amount, if available */ -var TransactionType; -(function (TransactionType) { - TransactionType[TransactionType["APPROVAL"] = 0] = "APPROVAL"; - TransactionType[TransactionType["SWAP"] = 1] = "SWAP"; - TransactionType[TransactionType["DEPOSIT_LIQUIDITY_STAKING"] = 2] = "DEPOSIT_LIQUIDITY_STAKING"; - TransactionType[TransactionType["WITHDRAW_LIQUIDITY_STAKING"] = 3] = "WITHDRAW_LIQUIDITY_STAKING"; - TransactionType[TransactionType["CLAIM"] = 4] = "CLAIM"; - TransactionType[TransactionType["VOTE"] = 5] = "VOTE"; - TransactionType[TransactionType["DELEGATE"] = 6] = "DELEGATE"; - TransactionType[TransactionType["WRAP"] = 7] = "WRAP"; - TransactionType[TransactionType["CREATE_V3_POOL"] = 8] = "CREATE_V3_POOL"; - TransactionType[TransactionType["ADD_LIQUIDITY_V3_POOL"] = 9] = "ADD_LIQUIDITY_V3_POOL"; - TransactionType[TransactionType["ADD_LIQUIDITY_V2_POOL"] = 10] = "ADD_LIQUIDITY_V2_POOL"; - TransactionType[TransactionType["MIGRATE_LIQUIDITY_V3"] = 11] = "MIGRATE_LIQUIDITY_V3"; - TransactionType[TransactionType["COLLECT_FEES"] = 12] = "COLLECT_FEES"; - TransactionType[TransactionType["REMOVE_LIQUIDITY_V3"] = 13] = "REMOVE_LIQUIDITY_V3"; - TransactionType[TransactionType["SUBMIT_PROPOSAL"] = 14] = "SUBMIT_PROPOSAL"; -})(TransactionType || (TransactionType = {})); -var addTransaction = toolkit.createAction('transactions/addTransaction'); -var clearAllTransactions = toolkit.createAction('transactions/clearAllTransactions'); -var finalizeTransaction = toolkit.createAction('transactions/finalizeTransaction'); -var checkedTransaction = toolkit.createAction('transactions/checkedTransaction'); - -var SUPPORTED_TRANSACTION_TYPES = [ - TransactionType.ADD_LIQUIDITY_V2_POOL, - TransactionType.ADD_LIQUIDITY_V3_POOL, - TransactionType.CREATE_V3_POOL, - TransactionType.REMOVE_LIQUIDITY_V3, - TransactionType.SWAP, -]; -var FIREBASE_API_KEY = process.env.REACT_APP_FIREBASE_KEY; -var firebaseEnabled = typeof FIREBASE_API_KEY !== 'undefined'; -if (firebaseEnabled) - initializeFirebase(); -function useMonitoringEventCallback() { - var chainId = useActiveWeb3React().chainId; - return React.useCallback(function log(type, _a) { - var transactionResponse = _a.transactionResponse, walletAddress = _a.walletAddress; - return __awaiter(this, void 0, void 0, function () { - var db; - return __generator(this, function (_b) { - if (!firebaseEnabled) - return [2 /*return*/]; - db = database.getDatabase(); - if (!walletAddress) { - console.debug('Wallet address required to log monitoring events.'); - return [2 /*return*/]; - } - try { - database.push(database.ref(db, 'trm'), { - chainId: chainId, - origin: window.location.origin, - timestamp: Date.now(), - tx: transactionResponse, - type: type, - walletAddress: walletAddress, - }); +function useSwapCallArguments(trade, allowedSlippage, recipientAddressOrName, signatureData, deadline) { + var _a = useActiveWeb3React(), account = _a.account, chainId = _a.chainId, library = _a.library; + var recipientAddress = useENS(recipientAddressOrName).address; + var recipient = recipientAddressOrName === null ? account : recipientAddress; + var routerContract = useV2RouterContract(); + var argentWalletContract = useArgentWalletContract(); + return React.useMemo(function () { + if (!trade || !recipient || !library || !account || !chainId || !deadline) + return []; + if (trade instanceof v2Sdk.Trade) { + if (!routerContract) + return []; + var swapMethods = []; + swapMethods.push(v2Sdk.Router.swapCallParameters(trade, { + feeOnTransfer: false, + allowedSlippage: allowedSlippage, + recipient: recipient, + deadline: deadline.toNumber(), + })); + if (trade.tradeType === sdkCore.TradeType.EXACT_INPUT) { + swapMethods.push(v2Sdk.Router.swapCallParameters(trade, { + feeOnTransfer: true, + allowedSlippage: allowedSlippage, + recipient: recipient, + deadline: deadline.toNumber(), + })); + } + return swapMethods.map(function (_a) { + var methodName = _a.methodName, args = _a.args, value = _a.value; + if (argentWalletContract && trade.inputAmount.currency.isToken) { + return { + address: argentWalletContract.address, + calldata: argentWalletContract.interface.encodeFunctionData('wc_multiCall', [ + [ + approveAmountCalldata(trade.maximumAmountIn(allowedSlippage), routerContract.address), + { + to: routerContract.address, + value: value, + data: routerContract.interface.encodeFunctionData(methodName, args), + }, + ], + ]), + value: '0x0', + }; } - catch (e) { - console.debug('Error adding document: ', e); + else { + return { + address: routerContract.address, + calldata: routerContract.interface.encodeFunctionData(methodName, args), + value: value, + }; } - return [2 /*return*/]; - }); - }); - }, [chainId]); -} -function useTransactionMonitoringEventCallback() { - var account = useActiveWeb3React().account; - var log = useMonitoringEventCallback(); - return React.useCallback(function (info, transactionResponse) { - if (SUPPORTED_TRANSACTION_TYPES.includes(info.type)) { - log(TransactionType[info.type], { - transactionResponse: (function (_a) { - var hash = _a.hash, v = _a.v, r = _a.r, s = _a.s; - return ({ hash: hash, v: v, r: r, s: s }); - })(transactionResponse), - walletAddress: account !== null && account !== void 0 ? account : undefined, }); } - }, [account, log]); -} -function initializeFirebase() { - app.initializeApp({ - apiKey: process.env.REACT_APP_FIREBASE_KEY, - authDomain: 'interface-monitoring.firebaseapp.com', - databaseURL: 'https://interface-monitoring-default-rtdb.firebaseio.com', - projectId: 'interface-monitoring', - storageBucket: 'interface-monitoring.appspot.com', - messagingSenderId: '968187720053', - appId: '1:968187720053:web:acedf72dce629d470be33c', - }); + else { + // swap options shared by v3 and v2+v3 swap routers + var sharedSwapOptions = __assign({ recipient: recipient, slippageTolerance: allowedSlippage }, (signatureData + ? { + inputTokenPermit: 'allowed' in signatureData + ? { + expiry: signatureData.deadline, + nonce: signatureData.nonce, + s: signatureData.s, + r: signatureData.r, + v: signatureData.v, + } + : { + deadline: signatureData.deadline, + amount: signatureData.amount, + s: signatureData.s, + r: signatureData.r, + v: signatureData.v, + }, + } + : {})); + var swapRouterAddress = chainId + ? trade instanceof v3Sdk.Trade + ? V3_ROUTER_ADDRESS[chainId] + : SWAP_ROUTER_ADDRESSES[chainId] + : undefined; + if (!swapRouterAddress) + return []; + var _a = trade instanceof v3Sdk.Trade + ? v3Sdk.SwapRouter.swapCallParameters(trade, __assign(__assign({}, sharedSwapOptions), { deadline: deadline.toString() })) + : routerSdk.SwapRouter.swapCallParameters(trade, __assign(__assign({}, sharedSwapOptions), { deadlineOrPreviousBlockhash: deadline.toString() })), value = _a.value, calldata = _a.calldata; + if (argentWalletContract && trade.inputAmount.currency.isToken) { + return [ + { + address: argentWalletContract.address, + calldata: argentWalletContract.interface.encodeFunctionData('wc_multiCall', [ + [ + approveAmountCalldata(trade.maximumAmountIn(allowedSlippage), swapRouterAddress), + { + to: swapRouterAddress, + value: value, + data: calldata, + }, + ], + ]), + value: '0x0', + }, + ]; + } + return [ + { + address: swapRouterAddress, + calldata: calldata, + value: value, + }, + ]; + } + }, [ + trade, + recipient, + library, + account, + chainId, + deadline, + routerContract, + allowedSlippage, + argentWalletContract, + signatureData, + ]); } -// helper that can take a ethers library transaction response and add it to the list of transactions -function useTransactionAdder() { - var _a = useActiveWeb3React(), chainId = _a.chainId, account = _a.account; - var dispatch = useAppDispatch(); - var logMonitoringEvent = useTransactionMonitoringEventCallback(); - return React.useCallback(function (response, info) { - if (!account) - return; - if (!chainId) - return; - var hash = response.hash; - if (!hash) { - throw Error('No transaction hash found.'); - } - dispatch(addTransaction({ hash: hash, from: account, info: info, chainId: chainId })); - logMonitoringEvent(info, response); - }, [account, chainId, dispatch, logMonitoringEvent]); -} -// returns all the transactions for the current chain -function useAllTransactions() { - var _a; - var chainId = useActiveWeb3React().chainId; - var state = useAppSelector(function (state) { return state.transactions; }); - return chainId ? (_a = state[chainId]) !== null && _a !== void 0 ? _a : {} : {}; -} -function useTransaction(transactionHash) { - var allTransactions = useAllTransactions(); - if (!transactionHash) { - return undefined; - } - return allTransactions[transactionHash]; -} -function useIsTransactionConfirmed(transactionHash) { - var transactions = useAllTransactions(); - if (!transactionHash || !transactions[transactionHash]) - return false; - return Boolean(transactions[transactionHash].receipt); -} /** - * Returns whether a transaction happened in the last day (86400 seconds * 1000 milliseconds / second) - * @param tx to check for recency + * Returns the gas value plus a margin for unexpected or variable gas costs + * @param value the gas value to pad */ -function isTransactionRecent(tx) { - return new Date().getTime() - tx.addedTime < 86400000; -} -// returns whether a token has a pending approval transaction -function useHasPendingApproval(token, spender) { - var allTransactions = useAllTransactions(); - return React.useMemo(function () { - return typeof (token === null || token === void 0 ? void 0 : token.address) === 'string' && - typeof spender === 'string' && - Object.keys(allTransactions).some(function (hash) { - var tx = allTransactions[hash]; - if (!tx) - return false; - if (tx.receipt) { - return false; - } - else { - if (tx.info.type !== TransactionType.APPROVAL) - return false; - return tx.info.spender === spender && tx.info.tokenAddress === token.address && isTransactionRecent(tx); - } - }); - }, [allTransactions, spender, token === null || token === void 0 ? void 0 : token.address]); -} - -// gets the current timestamp from the blockchain -function useCurrentBlockTimestamp() { - var _a, _b; - var multicall = useInterfaceMulticall(); - return (_b = (_a = useSingleCallResult(multicall, 'getCurrentBlockTimestamp')) === null || _a === void 0 ? void 0 : _a.result) === null || _b === void 0 ? void 0 : _b[0]; +function calculateGasMargin(value) { + return value.mul(120).div(100); } -new abi$6.Interface(abi$5); -({ - 1: [ - { - tokens: [WRAPPED_NATIVE_CURRENCY[1], DAI], - stakingRewardAddress: '0xa1484C3aa22a66C62b77E0AE78E15258bd0cB711', - }, - { - tokens: [WRAPPED_NATIVE_CURRENCY[1], USDC], - stakingRewardAddress: '0x7FBa4B8Dc5E7616e59622806932DBea72537A56b', - }, - { - tokens: [WRAPPED_NATIVE_CURRENCY[1], USDT], - stakingRewardAddress: '0x6C3e4cb2E96B01F4b866965A91ed4437839A121a', - }, - { - tokens: [WRAPPED_NATIVE_CURRENCY[1], WBTC], - stakingRewardAddress: '0xCA35e32e7926b96A9988f61d510E038108d8068e', - }, - ], -}); - -// mimics useAllBalances -function useAllTokenBalances() { - var account = useActiveWeb3React().account; - var allTokens = useAllTokens(); - var allTokensArray = React.useMemo(function () { return Object.values(allTokens !== null && allTokens !== void 0 ? allTokens : {}); }, [allTokens]); - var balances = useTokenBalances(account !== null && account !== void 0 ? account : undefined, allTokensArray); - return balances !== null && balances !== void 0 ? balances : {}; +/** + * This is hacking out the revert reason from the ethers provider thrown error however it can. + * This object seems to be undocumented by ethers. + * @param error an error from the ethers provider + */ +function swapErrorToUserReadableMessage(error) { + var _a, _b, _c, _d; + var reason; + while (Boolean(error)) { + reason = (_b = (_a = error.reason) !== null && _a !== void 0 ? _a : error.message) !== null && _b !== void 0 ? _b : reason; + error = (_c = error.error) !== null && _c !== void 0 ? _c : (_d = error.data) === null || _d === void 0 ? void 0 : _d.originalError; + } + if ((reason === null || reason === void 0 ? void 0 : reason.indexOf('execution reverted: ')) === 0) + reason = reason.substr('execution reverted: '.length); + switch (reason) { + case 'UniswapV2Router: EXPIRED': + return (jsxRuntime.jsx(macro.Trans, { children: "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low." }, void 0)); + case 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT': + case 'UniswapV2Router: EXCESSIVE_INPUT_AMOUNT': + return (jsxRuntime.jsx(macro.Trans, { children: "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance." }, void 0)); + case 'TransferHelper: TRANSFER_FROM_FAILED': + return jsxRuntime.jsx(macro.Trans, { children: "The input token cannot be transferred. There may be an issue with the input token." }, void 0); + case 'UniswapV2: TRANSFER_FAILED': + return jsxRuntime.jsx(macro.Trans, { children: "The output token cannot be transferred. There may be an issue with the output token." }, void 0); + case 'UniswapV2: K': + return (jsxRuntime.jsx(macro.Trans, { children: "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer." }, void 0)); + case 'Too little received': + case 'Too much requested': + case 'STF': + return (jsxRuntime.jsx(macro.Trans, { children: "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3." }, void 0)); + case 'TF': + return (jsxRuntime.jsx(macro.Trans, { children: "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3." }, void 0)); + default: + if ((reason === null || reason === void 0 ? void 0 : reason.indexOf('undefined is not an object')) !== -1) { + console.error(error, reason); + return (jsxRuntime.jsx(macro.Trans, { children: "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3." }, void 0)); + } + return (jsxRuntime.jsxs(macro.Trans, { children: ["Unknown error", reason ? ": \"" + reason + "\"" : '', ". Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3."] }, void 0)); + } } -var StyledInput = styled__default["default"].input(templateObject_1$y || (templateObject_1$y = __makeTemplateObject(["\n color: ", ";\n width: 0;\n position: relative;\n font-weight: 500;\n outline: none;\n border: none;\n flex: 1 1 auto;\n background-color: ", ";\n font-size: ", ";\n text-align: ", ";\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 0px;\n -webkit-appearance: textfield;\n text-align: right;\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: ", ";\n }\n"], ["\n color: ", ";\n width: 0;\n position: relative;\n font-weight: 500;\n outline: none;\n border: none;\n flex: 1 1 auto;\n background-color: ", ";\n font-size: ", ";\n text-align: ", ";\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 0px;\n -webkit-appearance: textfield;\n text-align: right;\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: ", ";\n }\n"])), function (_a) { - var error = _a.error, theme = _a.theme; - return (error ? theme.red1 : theme.text1); -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var fontSize = _a.fontSize; - return fontSize !== null && fontSize !== void 0 ? fontSize : '28px'; -}, function (_a) { - var align = _a.align; - return align && align; -}, function (_a) { - var theme = _a.theme; - return theme.text4; -}); -var inputRegex = RegExp("^\\d*(?:\\\\[.])?\\d*$"); // match escaped "." characters via in a non-capturing group -var Input$1 = React__default["default"].memo(function InnerInput(_a) { - var value = _a.value, onUserInput = _a.onUserInput, placeholder = _a.placeholder, prependSymbol = _a.prependSymbol, rest = __rest(_a, ["value", "onUserInput", "placeholder", "prependSymbol"]); - var enforcer = function (nextUserInput) { - if (nextUserInput === '' || inputRegex.test(escapeRegExp(nextUserInput))) { - onUserInput(nextUserInput); +// returns a function that will execute a swap, if the parameters are all valid +function useSendSwapTransaction(account, chainId, library, trade, // trade to execute, required +swapCalls) { + return React.useMemo(function () { + if (!trade || !library || !account || !chainId) { + return { callback: null }; } - }; - return (jsxRuntime.jsx(StyledInput, __assign({}, rest, { value: prependSymbol && value ? prependSymbol + value : value, onChange: function (event) { - if (prependSymbol) { - var value_1 = event.target.value; - // cut off prepended symbol - var formattedValue = value_1.toString().includes(prependSymbol) - ? value_1.toString().slice(1, value_1.toString().length + 1) - : value_1; - // replace commas with periods, because uniswap exclusively uses period as the decimal separator - enforcer(formattedValue.replace(/,/g, '.')); + return { + callback: function onSwap() { + return __awaiter(this, void 0, void 0, function () { + var estimatedCalls, bestCallOption, errorCalls, firstNoErrorCall, _a, address, calldata, value; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: return [4 /*yield*/, Promise.all(swapCalls.map(function (call) { + var address = call.address, calldata = call.calldata, value = call.value; + var tx = !value || isZero(value) + ? { from: account, to: address, data: calldata } + : { + from: account, + to: address, + data: calldata, + value: value, + }; + return library + .estimateGas(tx) + .then(function (gasEstimate) { + return { + call: call, + gasEstimate: gasEstimate, + }; + }) + .catch(function (gasError) { + console.debug('Gas estimate failed, trying eth_call to extract error', call); + return library + .call(tx) + .then(function (result) { + console.debug('Unexpected successful call after failed estimate gas', call, gasError, result); + return { call: call, error: jsxRuntime.jsx(macro.Trans, { children: "Unexpected issue with estimating the gas. Please try again." }, void 0) }; + }) + .catch(function (callError) { + console.debug('Call threw error', call, callError); + return { call: call, error: swapErrorToUserReadableMessage(callError) }; + }); + }); + })) + // a successful estimation is a bignumber gas estimate and the next call is also a bignumber gas estimate + ]; + case 1: + estimatedCalls = _b.sent(); + bestCallOption = estimatedCalls.find(function (el, ix, list) { + return 'gasEstimate' in el && (ix === list.length - 1 || 'gasEstimate' in list[ix + 1]); + }); + // check if any calls errored with a recognizable error + if (!bestCallOption) { + errorCalls = estimatedCalls.filter(function (call) { return 'error' in call; }); + if (errorCalls.length > 0) + throw errorCalls[errorCalls.length - 1].error; + firstNoErrorCall = estimatedCalls.find(function (call) { return !('error' in call); }); + if (!firstNoErrorCall) + throw new Error(macro.t(templateObject_1$A || (templateObject_1$A = __makeTemplateObject(["Unexpected error. Could not estimate gas for the swap."], ["Unexpected error. Could not estimate gas for the swap."])))); + bestCallOption = firstNoErrorCall; + } + _a = bestCallOption.call, address = _a.address, calldata = _a.calldata, value = _a.value; + return [2 /*return*/, library + .getSigner() + .sendTransaction(__assign(__assign({ from: account, to: address, data: calldata }, ('gasEstimate' in bestCallOption ? { gasLimit: calculateGasMargin(bestCallOption.gasEstimate) } : {})), (value && !isZero(value) ? { value: value } : {}))) + .then(function (response) { + return response; + }) + .catch(function (error) { + // if the user rejected the tx, pass this along + if ((error === null || error === void 0 ? void 0 : error.code) === 4001) { + throw new Error(macro.t(templateObject_2$m || (templateObject_2$m = __makeTemplateObject(["Transaction rejected."], ["Transaction rejected."])))); + } + else { + // otherwise, the error was unexpected and we need to convey that + console.error("Swap failed", error, address, calldata, value); + throw new Error(macro.t(templateObject_3$h || (templateObject_3$h = __makeTemplateObject(["Swap failed: ", ""], ["Swap failed: ", ""])), swapErrorToUserReadableMessage(error))); + } + })]; + } + }); + }); + }, + }; + }, [account, chainId, library, swapCalls, trade]); +} +var templateObject_1$A, templateObject_2$m, templateObject_3$h; + +var SwapCallbackState; +(function (SwapCallbackState) { + SwapCallbackState[SwapCallbackState["INVALID"] = 0] = "INVALID"; + SwapCallbackState[SwapCallbackState["LOADING"] = 1] = "LOADING"; + SwapCallbackState[SwapCallbackState["VALID"] = 2] = "VALID"; +})(SwapCallbackState || (SwapCallbackState = {})); +// returns a function that will execute a swap, if the parameters are all valid +// and the user has approved the slippage adjusted input amount for the trade +function useSwapCallback$1(trade, // trade to execute, required +allowedSlippage, // in bips +recipientAddressOrName, // the ENS name or address of the recipient of the trade, or null if swap should be returned to sender +signatureData, deadline) { + var _a = useActiveWeb3React(), account = _a.account, chainId = _a.chainId, library = _a.library; + var swapCalls = useSwapCallArguments(trade, allowedSlippage, recipientAddressOrName, signatureData, deadline); + var callback = useSendSwapTransaction(account, chainId, library, trade, swapCalls).callback; + var recipientAddress = useENS(recipientAddressOrName).address; + var recipient = recipientAddressOrName === null ? account : recipientAddress; + return React.useMemo(function () { + if (!trade || !library || !account || !chainId || !callback) { + return { state: SwapCallbackState.INVALID, callback: null, error: jsxRuntime.jsx(macro.Trans, { children: "Missing dependencies" }, void 0) }; + } + if (!recipient) { + if (recipientAddressOrName !== null) { + return { state: SwapCallbackState.INVALID, callback: null, error: jsxRuntime.jsx(macro.Trans, { children: "Invalid recipient" }, void 0) }; } else { - enforcer(event.target.value.replace(/,/g, '.')); + return { state: SwapCallbackState.LOADING, callback: null, error: null }; } - }, - // universal input options - inputMode: "decimal", autoComplete: "off", autoCorrect: "off", - // text-specific options - type: "text", pattern: "^[0-9]*[.,]?[0-9]*$", placeholder: placeholder || '0.0', minLength: 1, maxLength: 79, spellCheck: "false" }), void 0)); -}); -var templateObject_1$y; - -// modified from https://usehooks.com/usePrevious/ -function usePrevious(value) { - // The ref object is a generic container whose current property is mutable ... - // ... and can hold any value, similar to an instance property on a class - var ref = React.useRef(); - // Store current value in ref - React.useEffect(function () { - ref.current = value; - }, [value]); // Only re-run if value changes - // Return previous value (happens before update in useEffect above) - return ref.current; + } + return { + state: SwapCallbackState.VALID, + callback: function onSwap() { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, callback().then(function (response) { + return response; + })]; + }); + }); + }, + error: null, + }; + }, [trade, library, account, chainId, callback, recipient, recipientAddressOrName]); } /** - * Returns the last value of type T that passes a filter function - * @param value changing value - * @param filterFn function that determines whether a given value should be considered for the last value + * Be careful adding to this enum, always assign a unique value (typescript will not prevent duplicate values). + * These values is persisted in state and if you change the value it will cause errors */ -function useLast(value, filterFn) { - var _a = __read(React.useState(filterFn && filterFn(value) ? value : undefined), 2), last = _a[0], setLast = _a[1]; - React.useEffect(function () { - setLast(function (last) { - var shouldUse = filterFn ? filterFn(value) : true; - if (shouldUse) - return value; - return last; - }); - }, [filterFn, value]); - return last; -} - -function useOnClickOutside(node, handler) { - var handlerRef = React.useRef(handler); - React.useEffect(function () { - handlerRef.current = handler; - }, [handler]); - React.useEffect(function () { - var handleClickOutside = function (e) { - var _a, _b; - if ((_b = (_a = node.current) === null || _a === void 0 ? void 0 : _a.contains(e.target)) !== null && _b !== void 0 ? _b : false) { - return; - } - if (handlerRef.current) - handlerRef.current(); - }; - document.addEventListener('mousedown', handleClickOutside); - return function () { - document.removeEventListener('mousedown', handleClickOutside); - }; - }, [node]); +var TransactionType; +(function (TransactionType) { + TransactionType[TransactionType["APPROVAL"] = 0] = "APPROVAL"; + TransactionType[TransactionType["SWAP"] = 1] = "SWAP"; + TransactionType[TransactionType["DEPOSIT_LIQUIDITY_STAKING"] = 2] = "DEPOSIT_LIQUIDITY_STAKING"; + TransactionType[TransactionType["WITHDRAW_LIQUIDITY_STAKING"] = 3] = "WITHDRAW_LIQUIDITY_STAKING"; + TransactionType[TransactionType["CLAIM"] = 4] = "CLAIM"; + TransactionType[TransactionType["VOTE"] = 5] = "VOTE"; + TransactionType[TransactionType["DELEGATE"] = 6] = "DELEGATE"; + TransactionType[TransactionType["WRAP"] = 7] = "WRAP"; + TransactionType[TransactionType["CREATE_V3_POOL"] = 8] = "CREATE_V3_POOL"; + TransactionType[TransactionType["ADD_LIQUIDITY_V3_POOL"] = 9] = "ADD_LIQUIDITY_V3_POOL"; + TransactionType[TransactionType["ADD_LIQUIDITY_V2_POOL"] = 10] = "ADD_LIQUIDITY_V2_POOL"; + TransactionType[TransactionType["MIGRATE_LIQUIDITY_V3"] = 11] = "MIGRATE_LIQUIDITY_V3"; + TransactionType[TransactionType["COLLECT_FEES"] = 12] = "COLLECT_FEES"; + TransactionType[TransactionType["REMOVE_LIQUIDITY_V3"] = 13] = "REMOVE_LIQUIDITY_V3"; + TransactionType[TransactionType["SUBMIT_PROPOSAL"] = 14] = "SUBMIT_PROPOSAL"; +})(TransactionType || (TransactionType = {})); +var addTransaction = toolkit.createAction('transactions/addTransaction'); +var clearAllTransactions = toolkit.createAction('transactions/clearAllTransactions'); +var finalizeTransaction = toolkit.createAction('transactions/finalizeTransaction'); +var checkedTransaction = toolkit.createAction('transactions/checkedTransaction'); + +var SUPPORTED_TRANSACTION_TYPES = [ + TransactionType.ADD_LIQUIDITY_V2_POOL, + TransactionType.ADD_LIQUIDITY_V3_POOL, + TransactionType.CREATE_V3_POOL, + TransactionType.REMOVE_LIQUIDITY_V3, + TransactionType.SWAP, +]; +var FIREBASE_API_KEY = process.env.REACT_APP_FIREBASE_KEY; +var firebaseEnabled = typeof FIREBASE_API_KEY !== 'undefined'; +if (firebaseEnabled) + initializeFirebase(); +function useMonitoringEventCallback() { + var chainId = useActiveWeb3React().chainId; + return React.useCallback(function log(type, _a) { + var transactionResponse = _a.transactionResponse, walletAddress = _a.walletAddress; + return __awaiter(this, void 0, void 0, function () { + var db; + return __generator(this, function (_b) { + if (!firebaseEnabled) + return [2 /*return*/]; + db = database.getDatabase(); + if (!walletAddress) { + console.debug('Wallet address required to log monitoring events.'); + return [2 /*return*/]; + } + try { + database.push(database.ref(db, 'trm'), { + chainId: chainId, + origin: window.location.origin, + timestamp: Date.now(), + tx: transactionResponse, + type: type, + walletAddress: walletAddress, + }); + } + catch (e) { + console.debug('Error adding document: ', e); + } + return [2 /*return*/]; + }); + }); + }, [chainId]); +} +function useTransactionMonitoringEventCallback() { + var account = useActiveWeb3React().account; + var log = useMonitoringEventCallback(); + return React.useCallback(function (info, transactionResponse) { + if (SUPPORTED_TRANSACTION_TYPES.includes(info.type)) { + log(TransactionType[info.type], { + transactionResponse: (function (_a) { + var hash = _a.hash, v = _a.v, r = _a.r, s = _a.s; + return ({ hash: hash, v: v, r: r, s: s }); + })(transactionResponse), + walletAddress: account !== null && account !== void 0 ? account : undefined, + }); + } + }, [account, log]); +} +function initializeFirebase() { + app.initializeApp({ + apiKey: process.env.REACT_APP_FIREBASE_KEY, + authDomain: 'interface-monitoring.firebaseapp.com', + databaseURL: 'https://interface-monitoring-default-rtdb.firebaseio.com', + projectId: 'interface-monitoring', + storageBucket: 'interface-monitoring.appspot.com', + messagingSenderId: '968187720053', + appId: '1:968187720053:web:acedf72dce629d470be33c', + }); } -function useToggle(initialState) { - if (initialState === void 0) { initialState = false; } - var _a = __read(React.useState(initialState), 2), state = _a[0], setState = _a[1]; - var toggle = React.useCallback(function () { return setState(function (state) { return !state; }); }, []); - return [state, toggle]; +// helper that can take a ethers library transaction response and add it to the list of transactions +function useTransactionAdder() { + var _a = useActiveWeb3React(), chainId = _a.chainId, account = _a.account; + var dispatch = useAppDispatch(); + var logMonitoringEvent = useTransactionMonitoringEventCallback(); + return React.useCallback(function (response, info) { + if (!account) + return; + if (!chainId) + return; + var hash = response.hash; + if (!hash) { + throw Error('No transaction hash found.'); + } + dispatch(addTransaction({ hash: hash, from: account, info: info, chainId: chainId })); + logMonitoringEvent(info, response); + }, [account, chainId, dispatch, logMonitoringEvent]); +} +// returns all the transactions for the current chain +function useAllTransactions() { + var _a; + var chainId = useActiveWeb3React().chainId; + var state = useAppSelector(function (state) { return state.transactions; }); + return chainId ? (_a = state[chainId]) !== null && _a !== void 0 ? _a : {} : {}; +} +function useTransaction(transactionHash) { + var allTransactions = useAllTransactions(); + if (!transactionHash) { + return undefined; + } + return allTransactions[transactionHash]; +} +function useIsTransactionConfirmed(transactionHash) { + var transactions = useAllTransactions(); + if (!transactionHash || !transactions[transactionHash]) + return false; + return Boolean(transactions[transactionHash].receipt); +} +/** + * Returns whether a transaction happened in the last day (86400 seconds * 1000 milliseconds / second) + * @param tx to check for recency + */ +function isTransactionRecent(tx) { + return new Date().getTime() - tx.addedTime < 86400000; +} +// returns whether a token has a pending approval transaction +function useHasPendingApproval(token, spender) { + var allTransactions = useAllTransactions(); + return React.useMemo(function () { + return typeof (token === null || token === void 0 ? void 0 : token.address) === 'string' && + typeof spender === 'string' && + Object.keys(allTransactions).some(function (hash) { + var tx = allTransactions[hash]; + if (!tx) + return false; + if (tx.receipt) { + return false; + } + else { + if (tx.info.type !== TransactionType.APPROVAL) + return false; + return tx.info.spender === spender && tx.info.tokenAddress === token.address && isTransactionRecent(tx); + } + }); + }, [allTransactions, spender, token === null || token === void 0 ? void 0 : token.address]); } function currencyId(currency) { @@ -10973,32 +11294,319 @@ function currencyId(currency) { throw new Error('invalid currency'); } -var MobileWrapper = styled__default["default"](AutoColumn)(templateObject_2$l || (templateObject_2$l = __makeTemplateObject(["\n ", ";\n"], ["\n ", ";\n"])), function (_a) { +// gets the current timestamp from the blockchain +function useCurrentBlockTimestamp() { + var _a, _b; + var multicall = useInterfaceMulticall(); + return (_b = (_a = useSingleCallResult(multicall, 'getCurrentBlockTimestamp')) === null || _a === void 0 ? void 0 : _a.result) === null || _b === void 0 ? void 0 : _b[0]; +} + +// combines the block timestamp with the user setting to give the deadline that should be used for any submitted transaction +function useTransactionDeadline() { + var chainId = useActiveWeb3React().chainId; + var ttl = useAppSelector(function (state) { return state.user.userDeadline; }); + var blockTimestamp = useCurrentBlockTimestamp(); + return React.useMemo(function () { + if (blockTimestamp && chainId && L2_CHAIN_IDS.includes(chainId)) + return blockTimestamp.add(L2_DEADLINE_FROM_NOW); + if (blockTimestamp && ttl) + return blockTimestamp.add(ttl); + return undefined; + }, [blockTimestamp, chainId, ttl]); +} + +// eslint-disable-next-line no-restricted-imports +// returns a function that will execute a swap, if the parameters are all valid +// and the user has approved the slippage adjusted input amount for the trade +function useSwapCallback(trade, // trade to execute, required +allowedSlippage, // in bips +recipientAddressOrName, // the ENS name or address of the recipient of the trade, or null if swap should be returned to sender +signatureData) { + var account = useActiveWeb3React().account; + var deadline = useTransactionDeadline(); + var addTransaction = useTransactionAdder(); + var recipientAddress = useENS(recipientAddressOrName).address; + var recipient = recipientAddressOrName === null ? account : recipientAddress; + var _a = useSwapCallback$1(trade, allowedSlippage, recipient, signatureData, deadline), state = _a.state, libCallback = _a.callback, error = _a.error; + var callback = React.useMemo(function () { + if (!libCallback || !trade) { + return null; + } + return function () { + return libCallback().then(function (response) { + addTransaction(response, trade.tradeType === sdkCore.TradeType.EXACT_INPUT + ? { + type: TransactionType.SWAP, + tradeType: sdkCore.TradeType.EXACT_INPUT, + inputCurrencyId: currencyId(trade.inputAmount.currency), + inputCurrencyAmountRaw: trade.inputAmount.quotient.toString(), + expectedOutputCurrencyAmountRaw: trade.outputAmount.quotient.toString(), + outputCurrencyId: currencyId(trade.outputAmount.currency), + minimumOutputCurrencyAmountRaw: trade.minimumAmountOut(allowedSlippage).quotient.toString(), + } + : { + type: TransactionType.SWAP, + tradeType: sdkCore.TradeType.EXACT_OUTPUT, + inputCurrencyId: currencyId(trade.inputAmount.currency), + maximumInputCurrencyAmountRaw: trade.maximumAmountIn(allowedSlippage).quotient.toString(), + outputCurrencyId: currencyId(trade.outputAmount.currency), + outputCurrencyAmountRaw: trade.outputAmount.quotient.toString(), + expectedInputCurrencyAmountRaw: trade.inputAmount.quotient.toString(), + }); + return response.hash; + }); + }; + }, [addTransaction, allowedSlippage, libCallback, trade]); + return { + state: state, + callback: callback, + error: error, + }; +} + +var InputPanel$1 = styled__default["default"].div(templateObject_1$z || (templateObject_1$z = __makeTemplateObject(["\n ", "\n position: relative;\n border-radius: 1.25rem;\n background-color: ", ";\n z-index: 1;\n width: 100%;\n"], ["\n ", "\n position: relative;\n border-radius: 1.25rem;\n background-color: ", ";\n z-index: 1;\n width: 100%;\n"])), function (_a) { var theme = _a.theme; - return theme.mediaWidth.upToSmall(templateObject_1$x || (templateObject_1$x = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); + return theme.flexColumnNoWrap; +}, function (_a) { + var theme = _a.theme; + return theme.bg1; }); -var BaseWrapper = styled__default["default"].div(templateObject_3$g || (templateObject_3$g = __makeTemplateObject(["\n border: 1px solid ", ";\n border-radius: 10px;\n display: flex;\n padding: 6px;\n\n align-items: center;\n :hover {\n cursor: ", ";\n background-color: ", ";\n }\n\n color: ", ";\n background-color: ", ";\n filter: ", ";\n"], ["\n border: 1px solid ", ";\n border-radius: 10px;\n display: flex;\n padding: 6px;\n\n align-items: center;\n :hover {\n cursor: ", ";\n background-color: ", ";\n }\n\n color: ", ";\n background-color: ", ";\n filter: ", ";\n"])), function (_a) { - var theme = _a.theme, disable = _a.disable; - return (disable ? 'transparent' : theme.bg3); +var ContainerRow = styled__default["default"].div(templateObject_2$l || (templateObject_2$l = __makeTemplateObject(["\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 1.25rem;\n border: 1px solid ", ";\n transition: border-color 300ms ", ",\n color 500ms ", ";\n background-color: ", ";\n"], ["\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 1.25rem;\n border: 1px solid ", ";\n transition: border-color 300ms ", ",\n color 500ms ", ";\n background-color: ", ";\n"])), function (_a) { + var error = _a.error, theme = _a.theme; + return (error ? theme.red1 : theme.bg2); }, function (_a) { - var disable = _a.disable; - return !disable && 'pointer'; + var error = _a.error; + return (error ? 'step-end' : 'step-start'); }, function (_a) { - var theme = _a.theme, disable = _a.disable; - return !disable && theme.bg2; + var error = _a.error; + return (error ? 'step-end' : 'step-start'); }, function (_a) { - var theme = _a.theme, disable = _a.disable; - return disable && theme.text3; + var theme = _a.theme; + return theme.bg1; +}); +var InputContainer = styled__default["default"].div(templateObject_3$g || (templateObject_3$g = __makeTemplateObject(["\n flex: 1;\n padding: 1rem;\n"], ["\n flex: 1;\n padding: 1rem;\n"]))); +var Input$2 = styled__default["default"].input(templateObject_4$a || (templateObject_4$a = __makeTemplateObject(["\n font-size: 1.25rem;\n outline: none;\n border: none;\n flex: 1 1 auto;\n width: 0;\n background-color: ", ";\n transition: color 300ms ", ";\n color: ", ";\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 500;\n width: 100%;\n ::placeholder {\n color: ", ";\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: ", ";\n }\n"], ["\n font-size: 1.25rem;\n outline: none;\n border: none;\n flex: 1 1 auto;\n width: 0;\n background-color: ", ";\n transition: color 300ms ", ";\n color: ", ";\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 500;\n width: 100%;\n ::placeholder {\n color: ", ";\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: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.bg1; }, function (_a) { - var theme = _a.theme, disable = _a.disable; - return disable && theme.bg3; + var error = _a.error; + return (error ? 'step-end' : 'step-start'); }, function (_a) { - var disable = _a.disable; - return disable && 'grayscale(1)'; + var error = _a.error, theme = _a.theme; + return (error ? theme.red1 : theme.text1); +}, function (_a) { + var theme = _a.theme; + return theme.text4; +}, function (_a) { + var theme = _a.theme; + return theme.text4; }); -function CommonBases(_a) { - var _b; - var chainId = _a.chainId, onSelect = _a.onSelect, selectedCurrency = _a.selectedCurrency; +function AddressInputPanel(_a) { + var id = _a.id, _b = _a.className, className = _b === void 0 ? 'recipient-address-input' : _b, label = _a.label, placeholder = _a.placeholder, value = _a.value, onChange = _a.onChange; + var chainId = useActiveWeb3React().chainId; + var theme = React.useContext(styled.ThemeContext); + var _c = useENS(value), address = _c.address, loading = _c.loading, name = _c.name; + var handleInput = React.useCallback(function (event) { + var input = event.target.value; + var withoutSpaces = input.replace(/\s+/g, ''); + onChange(withoutSpaces); + }, [onChange]); + var error = Boolean(value.length > 0 && !loading && !address); + return (jsxRuntime.jsx(InputPanel$1, __assign({ id: id }, { children: jsxRuntime.jsx(ContainerRow, __assign({ error: error }, { children: jsxRuntime.jsx(InputContainer, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "md" }, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(ThemedText.Black, __assign({ color: theme.text2, fontWeight: 500, fontSize: 14 }, { children: label !== null && label !== void 0 ? label : jsxRuntime.jsx(macro.Trans, { children: "Recipient" }, void 0) }), void 0), address && chainId && (jsxRuntime.jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, name !== null && name !== void 0 ? name : address, ExplorerDataType.ADDRESS), style: { fontSize: '14px' } }, { children: jsxRuntime.jsx(macro.Trans, { children: "(View on Explorer)" }, void 0) }), void 0))] }, void 0), jsxRuntime.jsx(Input$2, { className: className, type: "text", autoComplete: "off", autoCorrect: "off", autoCapitalize: "off", spellCheck: "false", placeholder: placeholder !== null && placeholder !== void 0 ? placeholder : macro.t(templateObject_5$9 || (templateObject_5$9 = __makeTemplateObject(["Wallet Address or ENS name"], ["Wallet Address or ENS name"]))), error: error, pattern: "^(0x[a-fA-F0-9]{40})$", onChange: handleInput, value: value }, void 0)] }), void 0) }, void 0) }), void 0) }), void 0)); +} +var templateObject_1$z, templateObject_2$l, templateObject_3$g, templateObject_4$a, templateObject_5$9; + +function formatCurrencyAmount(amount, sigFigs) { + if (!amount) { + return '-'; + } + if (JSBI__default["default"].equal(amount.quotient, JSBI__default["default"].BigInt(0))) { + return '0'; + } + if (amount.divide(amount.decimalScale).lessThan(new sdkCore.Fraction(1, 100000))) { + return '<0.00001'; + } + return amount.toSignificant(sigFigs); +} + +var _path; + +function _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); } + +var SvgDropdown = function SvgDropdown(props) { + return /*#__PURE__*/React__namespace.createElement("svg", _extends({ + width: 12, + height: 7, + viewBox: "0 0 12 7", + fill: "none", + xmlns: "http://www.w3.org/2000/svg" + }, props), _path || (_path = /*#__PURE__*/React__namespace.createElement("path", { + d: "M0.97168 1L6.20532 6L11.439 1", + stroke: "#AEAEAE" + }))); +}; + +new abi$6.Interface(abi$5); +({ + 1: [ + { + tokens: [WRAPPED_NATIVE_CURRENCY[1], DAI], + stakingRewardAddress: '0xa1484C3aa22a66C62b77E0AE78E15258bd0cB711', + }, + { + tokens: [WRAPPED_NATIVE_CURRENCY[1], USDC], + stakingRewardAddress: '0x7FBa4B8Dc5E7616e59622806932DBea72537A56b', + }, + { + tokens: [WRAPPED_NATIVE_CURRENCY[1], USDT], + stakingRewardAddress: '0x6C3e4cb2E96B01F4b866965A91ed4437839A121a', + }, + { + tokens: [WRAPPED_NATIVE_CURRENCY[1], WBTC], + stakingRewardAddress: '0xCA35e32e7926b96A9988f61d510E038108d8068e', + }, + ], +}); + +// mimics useAllBalances +function useAllTokenBalances() { + var account = useActiveWeb3React().account; + var allTokens = useAllTokens(); + var allTokensArray = React.useMemo(function () { return Object.values(allTokens !== null && allTokens !== void 0 ? allTokens : {}); }, [allTokens]); + var balances = useTokenBalances(account !== null && account !== void 0 ? account : undefined, allTokensArray); + return balances !== null && balances !== void 0 ? balances : {}; +} + +var StyledInput = styled__default["default"].input(templateObject_1$y || (templateObject_1$y = __makeTemplateObject(["\n color: ", ";\n width: 0;\n position: relative;\n font-weight: 500;\n outline: none;\n border: none;\n flex: 1 1 auto;\n background-color: ", ";\n font-size: ", ";\n text-align: ", ";\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 0px;\n -webkit-appearance: textfield;\n text-align: right;\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: ", ";\n }\n"], ["\n color: ", ";\n width: 0;\n position: relative;\n font-weight: 500;\n outline: none;\n border: none;\n flex: 1 1 auto;\n background-color: ", ";\n font-size: ", ";\n text-align: ", ";\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 0px;\n -webkit-appearance: textfield;\n text-align: right;\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: ", ";\n }\n"])), function (_a) { + var error = _a.error, theme = _a.theme; + return (error ? theme.red1 : theme.text1); +}, function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var fontSize = _a.fontSize; + return fontSize !== null && fontSize !== void 0 ? fontSize : '28px'; +}, function (_a) { + var align = _a.align; + return align && align; +}, function (_a) { + var theme = _a.theme; + return theme.text4; +}); +var inputRegex = RegExp("^\\d*(?:\\\\[.])?\\d*$"); // match escaped "." characters via in a non-capturing group +var Input$1 = React__default["default"].memo(function InnerInput(_a) { + var value = _a.value, onUserInput = _a.onUserInput, placeholder = _a.placeholder, prependSymbol = _a.prependSymbol, rest = __rest(_a, ["value", "onUserInput", "placeholder", "prependSymbol"]); + var enforcer = function (nextUserInput) { + if (nextUserInput === '' || inputRegex.test(escapeRegExp(nextUserInput))) { + onUserInput(nextUserInput); + } + }; + return (jsxRuntime.jsx(StyledInput, __assign({}, rest, { value: prependSymbol && value ? prependSymbol + value : value, onChange: function (event) { + if (prependSymbol) { + var value_1 = event.target.value; + // cut off prepended symbol + var formattedValue = value_1.toString().includes(prependSymbol) + ? value_1.toString().slice(1, value_1.toString().length + 1) + : value_1; + // replace commas with periods, because uniswap exclusively uses period as the decimal separator + enforcer(formattedValue.replace(/,/g, '.')); + } + else { + enforcer(event.target.value.replace(/,/g, '.')); + } + }, + // universal input options + inputMode: "decimal", autoComplete: "off", autoCorrect: "off", + // text-specific options + type: "text", pattern: "^[0-9]*[.,]?[0-9]*$", placeholder: placeholder || '0.0', minLength: 1, maxLength: 79, spellCheck: "false" }), void 0)); +}); +var templateObject_1$y; + +// modified from https://usehooks.com/usePrevious/ +function usePrevious(value) { + // The ref object is a generic container whose current property is mutable ... + // ... and can hold any value, similar to an instance property on a class + var ref = React.useRef(); + // Store current value in ref + React.useEffect(function () { + ref.current = value; + }, [value]); // Only re-run if value changes + // Return previous value (happens before update in useEffect above) + return ref.current; +} + +/** + * Returns the last value of type T that passes a filter function + * @param value changing value + * @param filterFn function that determines whether a given value should be considered for the last value + */ +function useLast(value, filterFn) { + var _a = __read(React.useState(filterFn && filterFn(value) ? value : undefined), 2), last = _a[0], setLast = _a[1]; + React.useEffect(function () { + setLast(function (last) { + var shouldUse = filterFn ? filterFn(value) : true; + if (shouldUse) + return value; + return last; + }); + }, [filterFn, value]); + return last; +} + +function useOnClickOutside(node, handler) { + var handlerRef = React.useRef(handler); + React.useEffect(function () { + handlerRef.current = handler; + }, [handler]); + React.useEffect(function () { + var handleClickOutside = function (e) { + var _a, _b; + if ((_b = (_a = node.current) === null || _a === void 0 ? void 0 : _a.contains(e.target)) !== null && _b !== void 0 ? _b : false) { + return; + } + if (handlerRef.current) + handlerRef.current(); + }; + document.addEventListener('mousedown', handleClickOutside); + return function () { + document.removeEventListener('mousedown', handleClickOutside); + }; + }, [node]); +} + +function useToggle(initialState) { + if (initialState === void 0) { initialState = false; } + var _a = __read(React.useState(initialState), 2), state = _a[0], setState = _a[1]; + var toggle = React.useCallback(function () { return setState(function (state) { return !state; }); }, []); + return [state, toggle]; +} + +var MobileWrapper = styled__default["default"](AutoColumn)(templateObject_2$k || (templateObject_2$k = __makeTemplateObject(["\n ", ";\n"], ["\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToSmall(templateObject_1$x || (templateObject_1$x = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); +}); +var BaseWrapper = styled__default["default"].div(templateObject_3$f || (templateObject_3$f = __makeTemplateObject(["\n border: 1px solid ", ";\n border-radius: 10px;\n display: flex;\n padding: 6px;\n\n align-items: center;\n :hover {\n cursor: ", ";\n background-color: ", ";\n }\n\n color: ", ";\n background-color: ", ";\n filter: ", ";\n"], ["\n border: 1px solid ", ";\n border-radius: 10px;\n display: flex;\n padding: 6px;\n\n align-items: center;\n :hover {\n cursor: ", ";\n background-color: ", ";\n }\n\n color: ", ";\n background-color: ", ";\n filter: ", ";\n"])), function (_a) { + var theme = _a.theme, disable = _a.disable; + return (disable ? 'transparent' : theme.bg3); +}, function (_a) { + var disable = _a.disable; + return !disable && 'pointer'; +}, function (_a) { + var theme = _a.theme, disable = _a.disable; + return !disable && theme.bg2; +}, function (_a) { + var theme = _a.theme, disable = _a.disable; + return disable && theme.text3; +}, function (_a) { + var theme = _a.theme, disable = _a.disable; + return disable && theme.bg3; +}, function (_a) { + var disable = _a.disable; + return disable && 'grayscale(1)'; +}); +function CommonBases(_a) { + var _b; + var chainId = _a.chainId, onSelect = _a.onSelect, selectedCurrency = _a.selectedCurrency; var bases = typeof chainId !== 'undefined' ? (_b = COMMON_BASES[chainId]) !== null && _b !== void 0 ? _b : [] : []; return bases.length > 0 ? (jsxRuntime.jsx(MobileWrapper, __assign({ gap: "md" }, { children: jsxRuntime.jsx(AutoRow, __assign({ gap: "4px" }, { children: bases.map(function (currency) { var isSelected = selectedCurrency === null || selectedCurrency === void 0 ? void 0 : selectedCurrency.equals(currency); @@ -11011,7 +11619,7 @@ function CurrencyLogoFromList(_a) { var token = useTokenInfoFromActiveList(currency); return jsxRuntime.jsx(CurrencyLogo, { currency: token, style: { marginRight: 8 } }, void 0); } -var templateObject_1$x, templateObject_2$l, templateObject_3$g; +var templateObject_1$x, templateObject_2$k, templateObject_3$f; var QuestionWrapper = styled__default["default"].div(templateObject_1$w || (templateObject_1$w = __makeTemplateObject(["\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0px;\n width: 18px;\n height: 18px;\n border: none;\n background: none;\n outline: none;\n cursor: default;\n border-radius: 36px;\n font-size: 12px;\n background-color: ", ";\n color: ", ";\n\n :hover,\n :focus {\n opacity: 0.7;\n }\n"], ["\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0px;\n width: 18px;\n height: 18px;\n border: none;\n background: none;\n outline: none;\n cursor: default;\n border-radius: 36px;\n font-size: 12px;\n background-color: ", ";\n color: ", ";\n\n :hover,\n :focus {\n opacity: 0.7;\n }\n"])), function (_a) { var theme = _a.theme; @@ -11020,7 +11628,7 @@ var QuestionWrapper = styled__default["default"].div(templateObject_1$w || (temp var theme = _a.theme; return theme.text2; }); -var QuestionMark = styled__default["default"].span(templateObject_2$k || (templateObject_2$k = __makeTemplateObject(["\n font-size: 14px;\n"], ["\n font-size: 14px;\n"]))); +var QuestionMark = styled__default["default"].span(templateObject_2$j || (templateObject_2$j = __makeTemplateObject(["\n font-size: 14px;\n"], ["\n font-size: 14px;\n"]))); function QuestionHelper(_a) { var text = _a.text; var _b = __read(React.useState(false), 2), show = _b[0], setShow = _b[1]; @@ -11028,12 +11636,12 @@ function QuestionHelper(_a) { var close = React.useCallback(function () { return setShow(false); }, [setShow]); return (jsxRuntime.jsx("span", __assign({ style: { marginLeft: 4, display: 'flex', alignItems: 'center' } }, { children: jsxRuntime.jsx(Tooltip, __assign({ text: text, show: show }, { children: jsxRuntime.jsx(QuestionWrapper, __assign({ onClick: open, onMouseEnter: open, onMouseLeave: close }, { children: jsxRuntime.jsx(QuestionMark, { children: "?" }, void 0) }), void 0) }), void 0) }), void 0)); } -var templateObject_1$w, templateObject_2$k; +var templateObject_1$w, templateObject_2$j; var TokenListLogo = "data:image/svg+xml,%3Csvg%20width%3D%22225%22%20height%3D%22225%22%20viewBox%3D%220%200%20225%20225%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M74.8125%20190.529C65.7561%20190.513%2055.5298%20183.748%2051.9715%20175.42L19.9417%20100.456C16.3834%2092.1277%2020.8404%2085.39%2029.8968%2085.4068L111.417%2085.5579C120.473%2085.5747%20130.699%2092.3395%20134.258%20100.668L166.288%20175.632C169.846%20183.96%20165.389%20190.697%20156.332%20190.681L74.8125%20190.529Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint0_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint1_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint2_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint3_radial%29%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M92.958%20165.95C82.7695%20165.931%2071.265%20158.321%2067.2619%20148.952L26.2489%2052.9632C22.2458%2043.5941%2027.26%2036.0143%2037.4485%2036.0332L141.832%2036.2266C152.02%2036.2455%20163.525%2043.8559%20167.528%2053.225L208.541%20149.214C212.544%20158.583%20207.53%20166.163%20197.341%20166.144L92.958%20165.95ZM71.3614%20148.959C74.475%20156.246%2083.4229%20162.166%2091.3473%20162.18L195.73%20162.374C203.655%20162.388%20207.555%20156.493%20204.441%20149.206L163.428%2053.2174C160.315%2045.9304%20151.367%2040.0111%20143.442%2039.9964L39.0592%2039.803C31.1349%2039.7883%2027.2349%2045.6837%2030.3485%2052.9708L71.3614%20148.959Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M68.565%2053.3425C81.1781%2053.3659%2095.4205%2062.7875%20100.376%2074.3862C105.332%2085.985%2099.1246%2095.3687%2086.5115%2095.3454C73.8984%2095.322%2059.6559%2085.9004%2054.7001%2074.3016C49.7443%2062.7028%2055.9518%2053.3191%2068.565%2053.3425Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M90.6891%20104.981C103.302%20105.004%20117.545%20114.425%20122.5%20126.024C127.456%20137.623%20121.249%20147.007%20108.636%20146.983C96.0225%20146.96%2081.7801%20137.538%2076.8243%20125.94C71.8685%20114.341%2078.076%20104.957%2090.6891%20104.981Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M147.538%20105.142C160.151%20105.166%20174.394%20114.587%20179.349%20126.186C184.305%20137.785%20178.098%20147.168%20165.485%20147.145C152.871%20147.122%20138.629%20137.7%20133.673%20126.101C128.717%20114.503%20134.925%20105.119%20147.538%20105.142Z%22%20fill%3D%22%23131313%22%2F%3E%3Cdefs%3E%3CradialGradient%20id%3D%22paint0_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%28134.41%2068.3006%29%20rotate%28-33.9533%29%20scale%2890.6795%2083.3208%29%22%3E%3Cstop%20offset%3D%220.661458%22%20stop-color%3D%22%23C4FCF8%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint1_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%2842.7873%20129.218%29%20rotate%28-24.1606%29%20scale%28213.359%20196.045%29%22%3E%3Cstop%20stop-color%3D%22%23FF0099%22%20stop-opacity%3D%220.9%22%2F%3E%3Cstop%20offset%3D%220.770833%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint2_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%28176.854%20148.655%29%20rotate%28-53.4908%29%20scale%28107.342%2098.6309%29%22%3E%3Cstop%20stop-color%3D%22%23FFEC43%22%2F%3E%3Cstop%20offset%3D%220.805707%22%20stop-color%3D%22%23FFF6A8%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint3_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%2857.5443%2053.4752%29%20rotate%2820.3896%29%20scale%28137.027%20125.907%29%22%3E%3Cstop%20offset%3D%220.125%22%20stop-color%3D%22%235886FE%22%20stop-opacity%3D%220.46%22%2F%3E%3Cstop%20offset%3D%220.673044%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3C%2Fdefs%3E%3C%2Fsvg%3E"; var rotate = styled.keyframes(templateObject_1$v || (templateObject_1$v = __makeTemplateObject(["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"], ["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"]))); -var StyledSVG = styled__default["default"].svg(templateObject_2$j || (templateObject_2$j = __makeTemplateObject(["\n animation: 2s ", " linear infinite;\n height: ", ";\n width: ", ";\n path {\n stroke: ", ";\n }\n"], ["\n animation: 2s ", " linear infinite;\n height: ", ";\n width: ", ";\n path {\n stroke: ", ";\n }\n" +var StyledSVG = styled__default["default"].svg(templateObject_2$i || (templateObject_2$i = __makeTemplateObject(["\n animation: 2s ", " linear infinite;\n height: ", ";\n width: ", ";\n path {\n stroke: ", ";\n }\n"], ["\n animation: 2s ", " linear infinite;\n height: ", ";\n width: ", ";\n path {\n stroke: ", ";\n }\n" /** * Takes in custom size and stroke for circle color, default to primary color as fill, * need ...rest for layered styles on top @@ -11056,7 +11664,7 @@ function Loader(_a) { var _b = _a.size, size = _b === void 0 ? '16px' : _b, stroke = _a.stroke, rest = __rest(_a, ["size", "stroke"]); return (jsxRuntime.jsx(StyledSVG, __assign({ viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", size: size, stroke: stroke }, rest, { children: jsxRuntime.jsx("path", { d: "M12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22C17.5228 22 22 17.5228 22 12C22 9.27455 20.9097 6.80375 19.1414 5", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round" }, void 0) }), void 0)); } -var templateObject_1$v, templateObject_2$j; +var templateObject_1$v, templateObject_2$i; var StyledListLogo = styled__default["default"](Logo)(templateObject_1$u || (templateObject_1$u = __makeTemplateObject(["\n width: ", ";\n height: ", ";\n"], ["\n width: ", ";\n height: ", ";\n"])), function (_a) { var size = _a.size; @@ -11076,11 +11684,11 @@ var TokenSection = styled__default["default"].div(templateObject_1$t || (templat var dim = _a.dim; return (dim ? '0.4' : '1'); }); -var CheckIcon = styled__default["default"](reactFeather.CheckCircle)(templateObject_2$i || (templateObject_2$i = __makeTemplateObject(["\n height: 16px;\n width: 16px;\n margin-right: 6px;\n stroke: ", ";\n"], ["\n height: 16px;\n width: 16px;\n margin-right: 6px;\n stroke: ", ";\n"])), function (_a) { +var CheckIcon = styled__default["default"](reactFeather.CheckCircle)(templateObject_2$h || (templateObject_2$h = __makeTemplateObject(["\n height: 16px;\n width: 16px;\n margin-right: 6px;\n stroke: ", ";\n"], ["\n height: 16px;\n width: 16px;\n margin-right: 6px;\n stroke: ", ";\n"])), function (_a) { var theme = _a.theme; return theme.green1; }); -var NameOverflow = styled__default["default"].div(templateObject_3$f || (templateObject_3$f = __makeTemplateObject(["\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 140px;\n font-size: 12px;\n"], ["\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 140px;\n font-size: 12px;\n"]))); +var NameOverflow = styled__default["default"].div(templateObject_3$e || (templateObject_3$e = __makeTemplateObject(["\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 140px;\n font-size: 12px;\n"], ["\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 140px;\n font-size: 12px;\n"]))); function ImportRow(_a) { var token = _a.token, style = _a.style, dim = _a.dim, showImportView = _a.showImportView, setImportToken = _a.setImportToken; var theme = useTheme(); @@ -11093,17 +11701,17 @@ function ImportRow(_a) { showImportView(); } }, { children: jsxRuntime.jsx(macro.Trans, { children: "Import" }, void 0) }), void 0)) : (jsxRuntime.jsxs(RowFixed, __assign({ style: { minWidth: 'fit-content' } }, { children: [jsxRuntime.jsx(CheckIcon, {}, void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ color: theme.green1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Active" }, void 0) }), void 0)] }), void 0))] }), void 0)); } -var templateObject_1$t, templateObject_2$i, templateObject_3$f; +var templateObject_1$t, templateObject_2$h, templateObject_3$e; var TextDot = styled__default["default"].div(templateObject_1$s || (templateObject_1$s = __makeTemplateObject(["\n height: 3px;\n width: 3px;\n background-color: ", ";\n border-radius: 50%;\n"], ["\n height: 3px;\n width: 3px;\n background-color: ", ";\n border-radius: 50%;\n"])), function (_a) { var theme = _a.theme; return theme.text2; }); -var Checkbox = styled__default["default"].input(templateObject_2$h || (templateObject_2$h = __makeTemplateObject(["\n border: 1px solid ", ";\n height: 20px;\n margin: 0;\n"], ["\n border: 1px solid ", ";\n height: 20px;\n margin: 0;\n"])), function (_a) { +var Checkbox = styled__default["default"].input(templateObject_2$g || (templateObject_2$g = __makeTemplateObject(["\n border: 1px solid ", ";\n height: 20px;\n margin: 0;\n"], ["\n border: 1px solid ", ";\n height: 20px;\n margin: 0;\n"])), function (_a) { var theme = _a.theme; return theme.red3; }); -var PaddedColumn = styled__default["default"](AutoColumn)(templateObject_3$e || (templateObject_3$e = __makeTemplateObject(["\n padding: 20px;\n"], ["\n padding: 20px;\n"]))); +var PaddedColumn = styled__default["default"](AutoColumn)(templateObject_3$d || (templateObject_3$d = __makeTemplateObject(["\n padding: 20px;\n"], ["\n padding: 20px;\n"]))); var MenuItem = styled__default["default"](RowBetween)(templateObject_4$9 || (templateObject_4$9 = __makeTemplateObject(["\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: ", ";\n pointer-events: ", ";\n :hover {\n background-color: ", ";\n }\n opacity: ", ";\n"], ["\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: ", ";\n pointer-events: ", ";\n :hover {\n background-color: ", ";\n }\n opacity: ", ";\n"])), function (_a) { var disabled = _a.disabled; return !disabled && 'pointer'; @@ -11138,20 +11746,20 @@ var SeparatorDark = styled__default["default"].div(templateObject_7$4 || (templa var theme = _a.theme; return theme.bg3; }); -var templateObject_1$s, templateObject_2$h, templateObject_3$e, templateObject_4$9, templateObject_5$8, templateObject_6$5, templateObject_7$4; +var templateObject_1$s, templateObject_2$g, templateObject_3$d, templateObject_4$9, templateObject_5$8, templateObject_6$5, templateObject_7$4; function currencyKey(currency) { return currency.isToken ? currency.address : 'ETHER'; } var StyledBalanceText = styled__default["default"](rebass.Text)(templateObject_1$r || (templateObject_1$r = __makeTemplateObject(["\n white-space: nowrap;\n overflow: hidden;\n max-width: 5rem;\n text-overflow: ellipsis;\n"], ["\n white-space: nowrap;\n overflow: hidden;\n max-width: 5rem;\n text-overflow: ellipsis;\n"]))); -var Tag = styled__default["default"].div(templateObject_2$g || (templateObject_2$g = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\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 background-color: ", ";\n color: ", ";\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"])), function (_a) { +var Tag = styled__default["default"].div(templateObject_2$f || (templateObject_2$f = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\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 background-color: ", ";\n color: ", ";\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"])), function (_a) { var theme = _a.theme; return theme.bg3; }, function (_a) { var theme = _a.theme; return theme.text2; }); -var FixedContentRow = styled__default["default"].div(templateObject_3$d || (templateObject_3$d = __makeTemplateObject(["\n padding: 4px 20px;\n height: 56px;\n display: grid;\n grid-gap: 16px;\n align-items: center;\n"], ["\n padding: 4px 20px;\n height: 56px;\n display: grid;\n grid-gap: 16px;\n align-items: center;\n"]))); +var FixedContentRow = styled__default["default"].div(templateObject_3$c || (templateObject_3$c = __makeTemplateObject(["\n padding: 4px 20px;\n height: 56px;\n display: grid;\n grid-gap: 16px;\n align-items: center;\n"], ["\n padding: 4px 20px;\n height: 56px;\n display: grid;\n grid-gap: 16px;\n align-items: center;\n"]))); function Balance(_a) { var balance = _a.balance; return jsxRuntime.jsx(StyledBalanceText, __assign({ title: balance.toExact() }, { children: balance.toSignificant(4) }), void 0); @@ -11241,10 +11849,10 @@ function CurrencyList(_a) { }, []); return (jsxRuntime.jsx(reactWindow.FixedSizeList, __assign({ height: height, ref: fixedListRef, width: "100%", itemData: itemData, itemCount: itemData.length, itemSize: 56, itemKey: itemKey }, { children: Row }), void 0)); } -var templateObject_1$r, templateObject_2$g, templateObject_3$d, templateObject_4$8, templateObject_5$7; +var templateObject_1$r, templateObject_2$f, templateObject_3$c, templateObject_4$8, templateObject_5$7; var ContentWrapper = styled__default["default"](Column)(templateObject_1$q || (templateObject_1$q = __makeTemplateObject(["\n width: 100%;\n flex: 1 1;\n position: relative;\n"], ["\n width: 100%;\n flex: 1 1;\n position: relative;\n"]))); -var Footer$1 = styled__default["default"].div(templateObject_2$f || (templateObject_2$f = __makeTemplateObject(["\n width: 100%;\n border-radius: 20px;\n padding: 20px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n background-color: ", ";\n border-top: 1px solid ", ";\n"], ["\n width: 100%;\n border-radius: 20px;\n padding: 20px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n background-color: ", ";\n border-top: 1px solid ", ";\n"])), function (_a) { +var Footer$1 = styled__default["default"].div(templateObject_2$e || (templateObject_2$e = __makeTemplateObject(["\n width: 100%;\n border-radius: 20px;\n padding: 20px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n background-color: ", ";\n border-top: 1px solid ", ";\n"], ["\n width: 100%;\n border-radius: 20px;\n padding: 20px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n background-color: ", ";\n border-top: 1px solid ", ";\n"])), function (_a) { var theme = _a.theme; return theme.bg1; }, function (_a) { @@ -11331,22 +11939,22 @@ function CurrencySearch(_a) { useOnClickOutside(node, open ? toggle : undefined); // if no results on main list, show option to expand into inactive var filteredInactiveTokens = useSearchInactiveTokenLists(filteredTokens.length === 0 || (debouncedQuery.length > 2 && !isAddressSearch) ? debouncedQuery : undefined); - return (jsxRuntime.jsxs(ContentWrapper, { children: [jsxRuntime.jsxs(PaddedColumn, __assign({ gap: "16px" }, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 16 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Select a token" }, void 0) }), void 0), jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0)] }, void 0), jsxRuntime.jsx(Row, { children: jsxRuntime.jsx(SearchInput, { type: "text", id: "token-search-input", placeholder: macro.t(templateObject_3$c || (templateObject_3$c = __makeTemplateObject(["Search name or paste address"], ["Search name or paste address"]))), autoComplete: "off", value: searchQuery, ref: inputRef, onChange: handleInput, onKeyDown: handleEnter }, void 0) }, void 0), showCommonBases && (jsxRuntime.jsx(CommonBases, { chainId: chainId, onSelect: handleCurrencySelect, selectedCurrency: selectedCurrency }, void 0))] }), void 0), jsxRuntime.jsx(Separator, {}, void 0), searchToken && !searchTokenIsAdded ? (jsxRuntime.jsx(Column, __assign({ style: { padding: '20px 0', height: '100%' } }, { children: jsxRuntime.jsx(ImportRow, { token: searchToken, showImportView: showImportView, setImportToken: setImportToken }, void 0) }), void 0)) : (filteredSortedTokens === null || filteredSortedTokens === void 0 ? void 0 : filteredSortedTokens.length) > 0 || (filteredInactiveTokens === null || filteredInactiveTokens === void 0 ? void 0 : filteredInactiveTokens.length) > 0 ? (jsxRuntime.jsx("div", __assign({ style: { flex: '1' } }, { children: jsxRuntime.jsx(AutoSizer__default["default"], __assign({ disableWidth: true }, { children: function (_a) { + return (jsxRuntime.jsxs(ContentWrapper, { children: [jsxRuntime.jsxs(PaddedColumn, __assign({ gap: "16px" }, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 16 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Select a token" }, void 0) }), void 0), jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0)] }, void 0), jsxRuntime.jsx(Row, { children: jsxRuntime.jsx(SearchInput, { type: "text", id: "token-search-input", placeholder: macro.t(templateObject_3$b || (templateObject_3$b = __makeTemplateObject(["Search name or paste address"], ["Search name or paste address"]))), autoComplete: "off", value: searchQuery, ref: inputRef, onChange: handleInput, onKeyDown: handleEnter }, void 0) }, void 0), showCommonBases && (jsxRuntime.jsx(CommonBases, { chainId: chainId, onSelect: handleCurrencySelect, selectedCurrency: selectedCurrency }, void 0))] }), void 0), jsxRuntime.jsx(Separator, {}, void 0), searchToken && !searchTokenIsAdded ? (jsxRuntime.jsx(Column, __assign({ style: { padding: '20px 0', height: '100%' } }, { children: jsxRuntime.jsx(ImportRow, { token: searchToken, showImportView: showImportView, setImportToken: setImportToken }, void 0) }), void 0)) : (filteredSortedTokens === null || filteredSortedTokens === void 0 ? void 0 : filteredSortedTokens.length) > 0 || (filteredInactiveTokens === null || filteredInactiveTokens === void 0 ? void 0 : filteredInactiveTokens.length) > 0 ? (jsxRuntime.jsx("div", __assign({ style: { flex: '1' } }, { children: jsxRuntime.jsx(AutoSizer__default["default"], __assign({ disableWidth: true }, { children: function (_a) { var height = _a.height; return (jsxRuntime.jsx(CurrencyList, { height: height, currencies: disableNonToken ? filteredSortedTokens : filteredSortedTokensWithETH, otherListTokens: filteredInactiveTokens, onCurrencySelect: handleCurrencySelect, otherCurrency: otherSelectedCurrency, selectedCurrency: selectedCurrency, fixedListRef: fixedList, showImportView: showImportView, setImportToken: setImportToken, showCurrencyAmount: showCurrencyAmount }, void 0)); } }), void 0) }), void 0)) : (jsxRuntime.jsx(Column, __assign({ style: { padding: '20px', height: '100%' } }, { children: jsxRuntime.jsx(ThemedText.Main, __assign({ color: theme.text3, textAlign: "center", mb: "20px" }, { children: jsxRuntime.jsx(macro.Trans, { children: "No results found." }, void 0) }), void 0) }), void 0)), jsxRuntime.jsx(Footer$1, { children: jsxRuntime.jsx(Row, __assign({ justify: "center" }, { children: jsxRuntime.jsx(ButtonText, __assign({ onClick: showManageView, color: theme.primary1, className: "list-token-manage-button" }, { children: jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(IconWrapper, __assign({ size: "16px", marginRight: "6px", stroke: theme.primaryText1 }, { children: jsxRuntime.jsx(reactFeather.Edit, {}, void 0) }), void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ color: theme.primaryText1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Manage Token Lists" }, void 0) }), void 0)] }, void 0) }), void 0) }), void 0) }, void 0)] }, void 0)); } -var templateObject_1$q, templateObject_2$f, templateObject_3$c; +var templateObject_1$q, templateObject_2$e, templateObject_3$b; var UNISWAP_LOGO_URL = "data:image/svg+xml,%3Csvg%20width%3D%2214%22%20height%3D%2215%22%20viewBox%3D%220%200%2014%2015%22%20fill%3D%22black%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20style%3D%22mix-blend-mode%3Adarken%22%3E%3Cpath%20d%3D%22M4.15217%201.55141C3.96412%201.52242%203.95619%201.51902%204.04468%201.5055C4.21427%201.47958%204.61472%201.51491%204.89067%201.58012C5.53489%201.73232%206.12109%202.12221%206.74683%202.81466L6.91307%202.99862L7.15088%202.96062C8.15274%202.8006%209.17194%202.92778%2010.0244%203.31918C10.2589%203.42686%2010.6287%203.64121%2010.6749%203.69629C10.6896%203.71384%2010.7166%203.82684%2010.7349%203.94742C10.7982%204.36458%2010.7665%204.68434%2010.6382%204.92317C10.5683%205.05313%2010.5644%205.09432%2010.6114%205.20554C10.6489%205.2943%2010.7534%205.35999%2010.8569%205.35985C11.0687%205.35956%2011.2968%205.0192%2011.4024%204.54561L11.4444%204.3575L11.5275%204.45109C11.9835%204.96459%2012.3417%205.66488%2012.4032%206.16335L12.4192%206.29332L12.3426%206.17517C12.2107%205.97186%2012.0781%205.83346%2011.9084%205.72183C11.6024%205.52062%2011.2789%205.45215%2010.4222%205.40727C9.64839%205.36675%209.21045%205.30106%208.77621%205.16032C8.03738%204.9209%207.66493%204.60204%206.78729%203.4576C6.39748%202.94928%206.15654%202.66804%205.91687%202.44155C5.37228%201.92691%204.83716%201.65701%204.15217%201.55141Z%22%2F%3E%3Cpath%20d%3D%22M10.8494%202.68637C10.8689%202.34575%2010.9153%202.12108%2011.0088%201.9159C11.0458%201.83469%2011.0804%201.76822%2011.0858%201.76822C11.0911%201.76822%2011.075%201.82816%2011.05%201.90142C10.9821%202.10054%2010.9709%202.3729%2011.0177%202.68978C11.0771%203.09184%2011.1109%203.14985%2011.5385%203.58416C11.739%203.78788%2011.9723%204.0448%2012.0568%204.15511L12.2106%204.35568L12.0568%204.21234C11.8688%204.03705%2011.4364%203.6952%2011.3409%203.64633C11.2768%203.61356%2011.2673%203.61413%2011.2278%203.65321C11.1914%203.68922%2011.1837%203.74333%2011.1787%203.99915C11.1708%204.39786%2011.1161%204.65377%2010.9842%204.90965C10.9128%205.04805%2010.9015%205.01851%2010.9661%204.8623C11.0143%204.74566%2011.0192%204.69439%2011.0189%204.30842C11.0181%203.53291%2010.9255%203.34647%2010.3823%203.02709C10.2447%202.94618%2010.0179%202.8295%209.87839%202.76778C9.73887%202.70606%209.62805%202.6523%209.63208%202.64828C9.64746%202.63307%2010.1772%202.78675%2010.3905%202.86828C10.7077%202.98954%2010.76%203.00526%2010.7985%202.99063C10.8244%202.98082%2010.8369%202.90608%2010.8494%202.68637Z%22%2F%3E%3Cpath%20d%3D%22M4.51745%204.01304C4.13569%203.49066%203.89948%202.68973%203.95062%202.091L3.96643%201.90572L4.05333%201.92148C4.21652%201.95106%204.49789%202.05515%204.62964%202.13469C4.9912%202.35293%205.14773%202.64027%205.30697%203.37811C5.35362%203.59423%205.41482%203.8388%205.44298%203.9216C5.48831%204.05487%205.65962%204.36617%205.7989%204.56834C5.89922%204.71395%205.83258%204.78295%205.61082%204.76305C5.27215%204.73267%204.8134%204.41799%204.51745%204.01304Z%22%2F%3E%3Cpath%20d%3D%22M10.3863%207.90088C8.60224%207.18693%207.97389%206.56721%207.97389%205.52157C7.97389%205.36769%207.97922%205.24179%207.98571%205.24179C7.99221%205.24179%208.06124%205.29257%208.1391%205.35465C8.50088%205.64305%208.906%205.76623%2010.0275%205.92885C10.6875%206.02455%2011.0589%206.10185%2011.4015%206.21477C12.4904%206.57371%2013.1641%207.30212%2013.3248%208.29426C13.3715%208.58255%2013.3441%209.12317%2013.2684%209.4081C13.2087%209.63315%2013.0263%2010.0388%2012.9779%2010.0544C12.9645%2010.0587%2012.9514%2010.0076%2012.9479%209.93809C12.9296%209.56554%2012.7402%209.20285%2012.4221%208.93116C12.0604%208.62227%2011.5745%208.37633%2010.3863%207.90088Z%22%2F%3E%3Cpath%20d%3D%22M9.13385%208.19748C9.11149%208.06527%209.07272%207.89643%209.04769%207.82228L9.00217%207.68748L9.08672%207.7818C9.20374%207.91233%209.2962%208.07937%209.37457%208.30185C9.43438%208.47165%209.44111%208.52215%209.44066%208.79807C9.4402%209.06896%209.43273%209.12575%209.3775%209.27858C9.29042%209.51959%209.18233%209.69048%209.00097%209.87391C8.67507%2010.2036%208.25607%2010.3861%207.65143%2010.4618C7.54633%2010.4749%207.24%2010.4971%206.97069%2010.511C6.292%2010.5461%205.84531%2010.6186%205.44393%2010.7587C5.38623%2010.7788%205.3347%2010.7911%205.32947%2010.7859C5.31323%2010.7698%205.58651%2010.6079%205.81223%2010.4998C6.1305%2010.3474%206.44733%2010.2643%207.15719%2010.1468C7.50785%2010.0887%207.86998%2010.0183%207.96194%209.99029C8.83033%209.72566%209.27671%209.04276%209.13385%208.19748Z%22%2F%3E%3Cpath%20d%3D%22M9.95169%209.64109C9.71465%209.13463%209.66022%208.64564%209.79009%208.18961C9.80399%208.14088%209.82632%208.101%209.83976%208.101C9.85319%208.101%209.90913%208.13105%209.96404%208.16777C10.0733%208.24086%2010.2924%208.36395%2010.876%208.68023C11.6043%209.0749%2012.0196%209.3805%2012.302%209.72965C12.5493%2010.0354%2012.7023%2010.3837%2012.776%2010.8084C12.8177%2011.0489%2012.7932%2011.6277%2012.7311%2011.8699C12.5353%2012.6337%2012.0802%2013.2336%2011.4311%2013.5837C11.336%2013.635%2011.2506%2013.6771%2011.2414%2013.6773C11.2321%2013.6775%2011.2668%2013.5899%2011.3184%2013.4827C11.5367%2013.029%2011.5616%2012.5877%2011.3965%2012.0965C11.2954%2011.7957%2011.0893%2011.4287%2010.6732%2010.8084C10.1893%2010.0873%2010.0707%209.89539%209.95169%209.64109Z%22%2F%3E%3Cpath%20d%3D%22M3.25046%2012.3737C3.91252%2011.8181%204.73629%2011.4234%205.48666%2011.3022C5.81005%2011.25%206.34877%2011.2707%206.64823%2011.3469C7.12824%2011.469%207.55763%2011.7425%207.78094%2012.0683C7.99918%2012.3867%208.09281%2012.6642%208.19029%2013.2816C8.22875%2013.5252%208.27057%2013.7697%208.28323%2013.8251C8.35644%2014.1451%208.4989%2014.4008%208.67544%2014.5293C8.95583%2014.7333%209.43865%2014.7459%209.91362%2014.5618C9.99423%2014.5305%2010.0642%2014.5089%2010.0691%2014.5138C10.0864%2014.5308%209.84719%2014.6899%209.67847%2014.7737C9.45143%2014.8864%209.2709%2014.93%209.03102%2014.93C8.59601%2014.93%208.23486%2014.7101%207.9335%2014.2616C7.87419%2014.1733%207.7409%2013.909%207.63729%2013.6741C7.3191%2012.9528%207.16199%2012.7331%206.79255%2012.4926C6.47104%2012.2834%206.05641%2012.2459%205.74449%2012.3979C5.33475%2012.5976%205.22043%2013.118%205.51389%2013.4478C5.63053%2013.5789%205.84803%2013.6919%206.02588%2013.7139C6.35861%2013.7551%206.64455%2013.5035%206.64455%2013.1696C6.64455%2012.9528%206.56071%2012.8291%206.34966%2012.7344C6.0614%2012.6051%205.75156%2012.7562%205.75304%2013.0254C5.75368%2013.1402%205.80396%2013.2122%205.91971%2013.2643C5.99397%2013.2977%205.99569%2013.3003%205.93514%2013.2878C5.67066%2013.2333%205.6087%2012.9164%205.82135%2012.706C6.07667%2012.4535%206.60461%2012.5649%206.78591%2012.9097C6.86208%2013.0545%206.87092%2013.3429%206.80451%2013.517C6.6559%2013.9068%206.22256%2014.1117%205.78297%2014.0002C5.48368%2013.9242%205.36181%2013.842%205.00097%2013.4726C4.37395%2012.8306%204.13053%2012.7062%203.22657%2012.566L3.05335%2012.5391L3.25046%2012.3737Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M0.308383%200.883984C2.40235%203.40996%203.84457%204.45213%204.00484%204.67231C4.13717%204.85412%204.08737%205.01757%203.86067%205.14567C3.7346%205.21689%203.47541%205.28905%203.34564%205.28905C3.19887%205.28905%203.14847%205.23278%203.14847%205.23278C3.06337%205.15255%203.01544%205.16658%202.5784%204.39555C1.97166%203.45981%201.46389%202.68357%201.45004%202.67057C1.41801%202.64052%201.41856%202.64153%202.51654%204.59413C2.69394%205.0011%202.55182%205.15049%202.55182%205.20845C2.55182%205.32636%202.51946%205.38834%202.37311%205.55059C2.12914%205.8211%202.02008%206.12505%201.94135%206.7541C1.8531%207.45926%201.60492%207.95737%200.917156%208.80989C0.514562%209.30893%200.448686%209.4004%200.3471%209.60153C0.219144%209.85482%200.183961%209.99669%200.169701%2010.3165C0.154629%2010.6547%200.183983%2010.8732%200.287934%2011.1965C0.378939%2011.4796%200.473932%2011.6665%200.716778%2012.0403C0.926351%2012.3629%201.04702%2012.6027%201.04702%2012.6965C1.04702%2012.7711%201.06136%2012.7712%201.38611%2012.6983C2.16328%2012.5239%202.79434%2012.2171%203.14925%2011.8411C3.36891%2011.6084%203.42048%2011.4799%203.42215%2011.1611C3.42325%2010.9525%203.41587%2010.9088%203.35914%2010.7888C3.2668%2010.5935%203.09869%2010.4311%202.72817%2010.1794C2.2427%209.84953%202.03534%209.58398%201.97807%209.21878C1.93108%208.91913%201.98559%208.70771%202.25416%208.14825C2.53214%207.56916%202.60103%207.32239%202.64763%206.73869C2.67773%206.36158%202.71941%206.21286%202.82842%206.09348C2.94212%205.969%203.04447%205.92684%203.32584%205.88863C3.78457%205.82635%204.07667%205.70839%204.31677%205.48849C4.52505%205.29772%204.61221%205.11391%204.62558%204.8372L4.63574%204.62747L4.51934%204.49259C4.09783%204.00411%200.0261003%200.5%200.000160437%200.5C-0.00538105%200.5%200.133325%200.672804%200.308383%200.883984ZM1.28364%2010.6992C1.37894%2010.5314%201.3283%2010.3158%201.16889%2010.2104C1.01827%2010.1109%200.78428%2010.1578%200.78428%2010.2875C0.78428%2010.3271%200.806303%2010.3559%200.855937%2010.3813C0.939514%2010.424%200.945581%2010.4721%200.879823%2010.5703C0.81323%2010.6698%200.818604%2010.7573%200.894991%2010.8167C1.0181%2010.9125%201.19237%2010.8598%201.28364%2010.6992Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M4.92523%205.99865C4.70988%206.06439%204.50054%206.29124%204.43574%206.5291C4.39621%206.67421%204.41864%206.92875%204.47785%207.00736C4.57351%207.13433%204.66602%207.16778%204.91651%207.16603C5.40693%207.16263%205.83327%206.95358%205.88284%206.69224C5.92347%206.47801%205.73622%206.18112%205.4783%206.05078C5.34521%205.98355%205.06217%205.95688%204.92523%205.99865ZM5.49853%206.44422C5.57416%206.33741%205.54107%206.22198%205.41245%206.14391C5.1675%205.99525%204.79708%206.11827%204.79708%206.34826C4.79708%206.46274%204.99025%206.58765%205.16731%206.58765C5.28516%206.58765%205.44644%206.5178%205.49853%206.44422Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"; -var _a$6; -var NETWORK_POLLING_INTERVALS = (_a$6 = {}, - _a$6[SupportedChainId.ARBITRUM_ONE] = ms__default["default"](templateObject_1$p || (templateObject_1$p = __makeTemplateObject(["1s"], ["1s"]))), - _a$6[SupportedChainId.ARBITRUM_RINKEBY] = ms__default["default"](templateObject_2$e || (templateObject_2$e = __makeTemplateObject(["1s"], ["1s"]))), - _a$6[SupportedChainId.OPTIMISM] = ms__default["default"](templateObject_3$b || (templateObject_3$b = __makeTemplateObject(["1s"], ["1s"]))), - _a$6[SupportedChainId.OPTIMISTIC_KOVAN] = ms__default["default"](templateObject_4$7 || (templateObject_4$7 = __makeTemplateObject(["1s"], ["1s"]))), - _a$6); +var _a$7; +var NETWORK_POLLING_INTERVALS = (_a$7 = {}, + _a$7[SupportedChainId.ARBITRUM_ONE] = ms__default["default"](templateObject_1$p || (templateObject_1$p = __makeTemplateObject(["1s"], ["1s"]))), + _a$7[SupportedChainId.ARBITRUM_RINKEBY] = ms__default["default"](templateObject_2$d || (templateObject_2$d = __makeTemplateObject(["1s"], ["1s"]))), + _a$7[SupportedChainId.OPTIMISM] = ms__default["default"](templateObject_3$a || (templateObject_3$a = __makeTemplateObject(["1s"], ["1s"]))), + _a$7[SupportedChainId.OPTIMISTIC_KOVAN] = ms__default["default"](templateObject_4$7 || (templateObject_4$7 = __makeTemplateObject(["1s"], ["1s"]))), + _a$7); function getLibrary(provider) { var library = new providers.Web3Provider(provider, typeof provider.chainId === 'number' ? provider.chainId @@ -11363,7 +11971,7 @@ function getLibrary(provider) { }); return library; } -var templateObject_1$p, templateObject_2$e, templateObject_3$b, templateObject_4$7; +var templateObject_1$p, templateObject_2$d, templateObject_3$a, templateObject_4$7; var OVERLAY_READY = 'OVERLAY_READY'; var CHAIN_ID_NETWORK_ARGUMENT = { @@ -11791,9 +12399,9 @@ var WarningWrapper = styled__default["default"](Card)(templateObject_1$n || (tem var theme = _a.theme, highWarning = _a.highWarning; return highWarning ? polished.transparentize(0.8, theme.red1) : polished.transparentize(0.8, theme.yellow2); }); -var AddressText = styled__default["default"](ThemedText.Blue)(templateObject_3$a || (templateObject_3$a = __makeTemplateObject(["\n font-size: 12px;\n word-break: break-all;\n\n ", "\n"], ["\n font-size: 12px;\n word-break: break-all;\n\n ", "\n"])), function (_a) { +var AddressText = styled__default["default"](ThemedText.Blue)(templateObject_3$9 || (templateObject_3$9 = __makeTemplateObject(["\n font-size: 12px;\n word-break: break-all;\n\n ", "\n"], ["\n font-size: 12px;\n word-break: break-all;\n\n ", "\n"])), function (_a) { var theme = _a.theme; - return theme.mediaWidth.upToSmall(templateObject_2$d || (templateObject_2$d = __makeTemplateObject(["\n font-size: 10px;\n "], ["\n font-size: 10px;\n "]))); + return theme.mediaWidth.upToSmall(templateObject_2$c || (templateObject_2$c = __makeTemplateObject(["\n font-size: 10px;\n "], ["\n font-size: 10px;\n "]))); }); var TokenImportCard = function (_a) { var list = _a.list, token = _a.token; @@ -11801,11 +12409,11 @@ var TokenImportCard = function (_a) { var chainId = useActiveWeb3React().chainId; return (jsxRuntime.jsx(Card, __assign({ backgroundColor: theme.bg2, padding: "2rem" }, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "10px", justify: "center" }, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: token, size: '32px' }, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "4px", justify: "center" }, { children: [jsxRuntime.jsx(ThemedText.Body, __assign({ ml: "8px", mr: "8px", fontWeight: 500, fontSize: 20 }, { children: token.symbol }), void 0), jsxRuntime.jsx(ThemedText.DarkGray, __assign({ fontWeight: 400, fontSize: 14 }, { children: token.name }), void 0)] }), void 0), chainId && (jsxRuntime.jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, token.address, ExplorerDataType.ADDRESS) }, { children: jsxRuntime.jsx(AddressText, __assign({ fontSize: 12 }, { children: token.address }), void 0) }), void 0)), list !== undefined ? (jsxRuntime.jsxs(RowFixed, { children: [list.logoURI && jsxRuntime.jsx(ListLogo, { logoURI: list.logoURI, size: "16px" }, void 0), jsxRuntime.jsx(ThemedText.Small, __assign({ ml: "6px", fontSize: 14, color: theme.text3 }, { children: jsxRuntime.jsxs(macro.Trans, { children: ["via ", list.name, " token list"] }, void 0) }), void 0)] }, void 0)) : (jsxRuntime.jsx(WarningWrapper, __assign({ "$borderRadius": "4px", padding: "4px", highWarning: true }, { children: jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(reactFeather.AlertCircle, { stroke: theme.red1, size: "10px" }, void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ color: theme.red1, ml: "4px", fontSize: "10px", fontWeight: 500 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Unknown Source" }, void 0) }), void 0)] }, void 0) }), void 0))] }), void 0) }), void 0)); }; -var templateObject_1$n, templateObject_2$d, templateObject_3$a; +var templateObject_1$n, templateObject_2$c, templateObject_3$9; var Wrapper$7 = styled__default["default"].div(templateObject_1$m || (templateObject_1$m = __makeTemplateObject(["\n align-items: center;\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n height: 100%;\n width: 100%;\n"], ["\n align-items: center;\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n height: 100%;\n width: 100%;\n"]))); -var Button = styled__default["default"](ButtonPrimary)(templateObject_2$c || (templateObject_2$c = __makeTemplateObject(["\n margin-top: 1em;\n padding: 10px 1em;\n"], ["\n margin-top: 1em;\n padding: 10px 1em;\n"]))); -var Content = styled__default["default"].div(templateObject_3$9 || (templateObject_3$9 = __makeTemplateObject(["\n padding: 1em;\n"], ["\n padding: 1em;\n"]))); +var Button = styled__default["default"](ButtonPrimary)(templateObject_2$b || (templateObject_2$b = __makeTemplateObject(["\n margin-top: 1em;\n padding: 10px 1em;\n"], ["\n margin-top: 1em;\n padding: 10px 1em;\n"]))); +var Content = styled__default["default"].div(templateObject_3$8 || (templateObject_3$8 = __makeTemplateObject(["\n padding: 1em;\n"], ["\n padding: 1em;\n"]))); var Copy = styled__default["default"](ThemedText.Body)(templateObject_4$6 || (templateObject_4$6 = __makeTemplateObject(["\n text-align: center;\n margin: 0 2em 1em !important;\n font-weight: 400;\n font-size: 16px;\n"], ["\n text-align: center;\n margin: 0 2em 1em !important;\n font-weight: 400;\n font-size: 16px;\n"]))); var Header = styled__default["default"].div(templateObject_5$6 || (templateObject_5$6 = __makeTemplateObject(["\n align-items: center;\n display: flex;\n gap: 14px;\n justify-content: space-between;\n padding: 20px;\n width: 100%;\n"], ["\n align-items: center;\n display: flex;\n gap: 14px;\n justify-content: space-between;\n padding: 20px;\n width: 100%;\n"]))); var Icon = styled__default["default"](reactFeather.AlertCircle)(templateObject_6$4 || (templateObject_6$4 = __makeTemplateObject(["\n stroke: ", ";\n width: 48px;\n height: 48px;\n"], ["\n stroke: ", ";\n width: 48px;\n height: 48px;\n"])), function (_a) { @@ -11816,7 +12424,7 @@ var BlockedToken = function (_a) { var onBack = _a.onBack, onDismiss = _a.onDismiss, blockedTokens = _a.blockedTokens; return (jsxRuntime.jsxs(Wrapper$7, { children: [jsxRuntime.jsxs(Header, { children: [onBack ? jsxRuntime.jsx(reactFeather.ArrowLeft, { style: { cursor: 'pointer' }, onClick: onBack }, void 0) : jsxRuntime.jsx("div", {}, void 0), jsxRuntime.jsx(ThemedText.MediumHeader, { children: jsxRuntime.jsx(macro.Trans, { children: "Token not supported" }, void 0) }, void 0), onDismiss ? jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0) : jsxRuntime.jsx("div", {}, void 0)] }, void 0), jsxRuntime.jsx(Icon, {}, void 0), jsxRuntime.jsxs(Content, { children: [jsxRuntime.jsx(Copy, { children: jsxRuntime.jsx(macro.Trans, { children: "This token is not supported in the Uniswap Labs app" }, void 0) }, void 0), jsxRuntime.jsx(TokenImportCard, { token: blockedTokens[0] }, void 0), jsxRuntime.jsx(Button, __assign({ disabled: true }, { children: jsxRuntime.jsx(macro.Trans, { children: "Import" }, void 0) }), void 0)] }, void 0)] }, void 0)); }; -var templateObject_1$m, templateObject_2$c, templateObject_3$9, templateObject_4$6, templateObject_5$6, templateObject_6$4; +var templateObject_1$m, templateObject_2$b, templateObject_3$8, templateObject_4$6, templateObject_5$6, templateObject_6$4; var Wrapper$6 = styled__default["default"].div(templateObject_1$l || (templateObject_1$l = __makeTemplateObject(["\n position: relative;\n width: 100%;\n overflow: auto;\n"], ["\n position: relative;\n width: 100%;\n overflow: auto;\n"]))); function ImportToken(props) { @@ -11887,11 +12495,11 @@ var Wrapper$5 = styled__default["default"].button(templateObject_1$k || (templat var theme = _a.theme; return theme.bg1; }); -var ToggleElement$1 = styled__default["default"].span(templateObject_2$b || (templateObject_2$b = __makeTemplateObject(["\n border-radius: 50%;\n height: 24px;\n width: 24px;\n background-color: ", ";\n :hover {\n opacity: 0.8;\n }\n"], ["\n border-radius: 50%;\n height: 24px;\n width: 24px;\n background-color: ", ";\n :hover {\n opacity: 0.8;\n }\n"])), function (_a) { +var ToggleElement$1 = styled__default["default"].span(templateObject_2$a || (templateObject_2$a = __makeTemplateObject(["\n border-radius: 50%;\n height: 24px;\n width: 24px;\n background-color: ", ";\n :hover {\n opacity: 0.8;\n }\n"], ["\n border-radius: 50%;\n height: 24px;\n width: 24px;\n background-color: ", ";\n :hover {\n opacity: 0.8;\n }\n"])), function (_a) { var isActive = _a.isActive, bgColor = _a.bgColor, theme = _a.theme; return (isActive ? bgColor : theme.bg4); }); -var StatusText = styled__default["default"](ThemedText.Main)(templateObject_3$8 || (templateObject_3$8 = __makeTemplateObject(["\n margin: 0 10px;\n width: 24px;\n color: ", ";\n"], ["\n margin: 0 10px;\n width: 24px;\n color: ", ";\n"])), function (_a) { +var StatusText = styled__default["default"](ThemedText.Main)(templateObject_3$7 || (templateObject_3$7 = __makeTemplateObject(["\n margin: 0 10px;\n width: 24px;\n color: ", ";\n"], ["\n margin: 0 10px;\n width: 24px;\n color: ", ";\n"])), function (_a) { var theme = _a.theme, isActive = _a.isActive; return (isActive ? theme.text1 : theme.text3); }); @@ -11899,14 +12507,14 @@ function ListToggle(_a) { var id = _a.id, isActive = _a.isActive, bgColor = _a.bgColor, toggle = _a.toggle; return (jsxRuntime.jsxs(Wrapper$5, __assign({ id: id, isActive: isActive, onClick: toggle }, { children: [isActive && (jsxRuntime.jsx(StatusText, __assign({ fontWeight: "600", margin: "0 6px", isActive: true }, { children: jsxRuntime.jsx(macro.Trans, { children: "ON" }, void 0) }), void 0)), jsxRuntime.jsx(ToggleElement$1, { isActive: isActive, bgColor: bgColor }, void 0), !isActive && (jsxRuntime.jsx(StatusText, __assign({ fontWeight: "600", margin: "0 6px", isActive: false }, { children: jsxRuntime.jsx(macro.Trans, { children: "OFF" }, void 0) }), void 0))] }), void 0)); } -var templateObject_1$k, templateObject_2$b, templateObject_3$8; +var templateObject_1$k, templateObject_2$a, templateObject_3$7; var Wrapper$4 = styled__default["default"](Column)(templateObject_1$j || (templateObject_1$j = __makeTemplateObject(["\n flex: 1;\n overflow-y: hidden;\n"], ["\n flex: 1;\n overflow-y: hidden;\n"]))); -var UnpaddedLinkStyledButton = styled__default["default"](LinkStyledButton)(templateObject_2$a || (templateObject_2$a = __makeTemplateObject(["\n padding: 0;\n font-size: 1rem;\n opacity: ", ";\n"], ["\n padding: 0;\n font-size: 1rem;\n opacity: ", ";\n"])), function (_a) { +var UnpaddedLinkStyledButton = styled__default["default"](LinkStyledButton)(templateObject_2$9 || (templateObject_2$9 = __makeTemplateObject(["\n padding: 0;\n font-size: 1rem;\n opacity: ", ";\n"], ["\n padding: 0;\n font-size: 1rem;\n opacity: ", ";\n"])), function (_a) { var disabled = _a.disabled; return (disabled ? '0.4' : '1'); }); -var PopoverContainer = styled__default["default"].div(templateObject_3$7 || (templateObject_3$7 = __makeTemplateObject(["\n z-index: 100;\n visibility: ", ";\n opacity: ", ";\n transition: visibility 150ms linear, opacity 150ms linear;\n background: ", ";\n border: 1px solid ", ";\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: ", ";\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 z-index: 100;\n visibility: ", ";\n opacity: ", ";\n transition: visibility 150ms linear, opacity 150ms linear;\n background: ", ";\n border: 1px solid ", ";\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: ", ";\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"])), function (props) { return (props.show ? 'visible' : 'hidden'); }, function (props) { return (props.show ? 1 : 0); }, function (_a) { +var PopoverContainer = styled__default["default"].div(templateObject_3$6 || (templateObject_3$6 = __makeTemplateObject(["\n z-index: 100;\n visibility: ", ";\n opacity: ", ";\n transition: visibility 150ms linear, opacity 150ms linear;\n background: ", ";\n border: 1px solid ", ";\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: ", ";\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 z-index: 100;\n visibility: ", ";\n opacity: ", ";\n transition: visibility 150ms linear, opacity 150ms linear;\n background: ", ";\n border: 1px solid ", ";\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: ", ";\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"])), function (props) { return (props.show ? 'visible' : 'hidden'); }, function (props) { return (props.show ? 1 : 0); }, function (_a) { var theme = _a.theme; return theme.bg2; }, function (_a) { @@ -12109,10 +12717,10 @@ function ManageLists(_a) { }, [listUrlInput, setImportList, setListUrl, setModalView, tempList]); return (jsxRuntime.jsxs(Wrapper$4, { children: [jsxRuntime.jsxs(PaddedColumn, __assign({ gap: "14px" }, { children: [jsxRuntime.jsx(Row, { children: jsxRuntime.jsx(SearchInput, { type: "text", id: "list-add-input", placeholder: macro.t(templateObject_12$2 || (templateObject_12$2 = __makeTemplateObject(["https:// or ipfs:// or ENS name"], ["https:// or ipfs:// or ENS name"]))), value: listUrlInput, onChange: handleInput }, void 0) }, void 0), addError ? (jsxRuntime.jsx(ThemedText.Error, __assign({ title: addError, style: { textOverflow: 'ellipsis', overflow: 'hidden' }, error: true }, { children: addError }), void 0)) : null] }), void 0), tempList && (jsxRuntime.jsx(PaddedColumn, __assign({ style: { paddingTop: 0 } }, { children: jsxRuntime.jsx(Card, __assign({ backgroundColor: theme.bg2, padding: "12px 20px" }, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsxs(RowFixed, { children: [tempList.logoURI && jsxRuntime.jsx(ListLogo, { logoURI: tempList.logoURI, size: "40px" }, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "4px", style: { marginLeft: '20px' } }, { children: [jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 600 }, { children: tempList.name }), void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: '12px' }, { children: jsxRuntime.jsxs(macro.Trans, { children: [tempList.tokens.length, " tokens"] }, void 0) }), void 0)] }), void 0)] }, void 0), isImported ? (jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(IconWrapper, __assign({ stroke: theme.text2, size: "16px", marginRight: '10px' }, { children: jsxRuntime.jsx(reactFeather.CheckCircle, {}, void 0) }), void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ color: theme.text2 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Loaded" }, void 0) }), void 0)] }, void 0)) : (jsxRuntime.jsx(ButtonPrimary, __assign({ style: { fontSize: '14px' }, padding: "6px 8px", width: "fit-content", onClick: handleImport }, { children: jsxRuntime.jsx(macro.Trans, { children: "Import" }, void 0) }), void 0))] }, void 0) }), void 0) }), void 0)), jsxRuntime.jsx(Separator, {}, void 0), jsxRuntime.jsx(ListContainer, { children: jsxRuntime.jsx(AutoColumn, __assign({ gap: "md" }, { children: sortedLists.map(function (listUrl) { return (jsxRuntime.jsx(ListRow, { listUrl: listUrl }, listUrl)); }) }), void 0) }, void 0)] }, void 0)); } -var templateObject_1$j, templateObject_2$a, templateObject_3$7, templateObject_4$5, templateObject_5$5, templateObject_6$3, templateObject_7$3, templateObject_8$2, templateObject_9$2, templateObject_10$2, templateObject_11$2, templateObject_12$2; +var templateObject_1$j, templateObject_2$9, templateObject_3$6, templateObject_4$5, templateObject_5$5, templateObject_6$3, templateObject_7$3, templateObject_8$2, templateObject_9$2, templateObject_10$2, templateObject_11$2, templateObject_12$2; var Wrapper$3 = styled__default["default"].div(templateObject_1$i || (templateObject_1$i = __makeTemplateObject(["\n width: 100%;\n height: calc(100% - 60px);\n position: relative;\n padding-bottom: 80px;\n"], ["\n width: 100%;\n height: calc(100% - 60px);\n position: relative;\n padding-bottom: 80px;\n"]))); -var Footer = styled__default["default"].div(templateObject_2$9 || (templateObject_2$9 = __makeTemplateObject(["\n position: absolute;\n bottom: 0;\n width: 100%;\n border-radius: 20px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n border-top: 1px solid ", ";\n padding: 20px;\n text-align: center;\n"], ["\n position: absolute;\n bottom: 0;\n width: 100%;\n border-radius: 20px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n border-top: 1px solid ", ";\n padding: 20px;\n text-align: center;\n"])), function (_a) { +var Footer = styled__default["default"].div(templateObject_2$8 || (templateObject_2$8 = __makeTemplateObject(["\n position: absolute;\n bottom: 0;\n width: 100%;\n border-radius: 20px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n border-top: 1px solid ", ";\n padding: 20px;\n text-align: center;\n"], ["\n position: absolute;\n bottom: 0;\n width: 100%;\n border-radius: 20px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n border-top: 1px solid ", ";\n padding: 20px;\n text-align: center;\n"])), function (_a) { var theme = _a.theme; return theme.bg3; }); @@ -12147,14 +12755,14 @@ function ManageTokens(_a) { }, [userAddedTokens, chainId, removeToken]); return (jsxRuntime.jsxs(Wrapper$3, { children: [jsxRuntime.jsxs(Column, __assign({ style: { width: '100%', height: '100%', flex: '1 1' } }, { children: [jsxRuntime.jsxs(PaddedColumn, __assign({ gap: "14px" }, { children: [jsxRuntime.jsx(Row, { children: jsxRuntime.jsx(SearchInput, { type: "text", id: "token-search-input", placeholder: '0x0000', value: searchQuery, autoComplete: "off", ref: inputRef, onChange: handleInput }, void 0) }, void 0), searchQuery !== '' && !isAddressSearch && (jsxRuntime.jsx(ThemedText.Error, __assign({ error: true }, { children: jsxRuntime.jsx(macro.Trans, { children: "Enter valid token address" }, void 0) }), void 0)), searchToken && (jsxRuntime.jsx(Card, __assign({ backgroundColor: theme.bg2, padding: "10px 0" }, { children: jsxRuntime.jsx(ImportRow, { token: searchToken, showImportView: function () { return setModalView(CurrencyModalView.importToken); }, setImportToken: setImportToken, style: { height: 'fit-content' } }, void 0) }), void 0))] }), void 0), jsxRuntime.jsx(Separator, {}, void 0), jsxRuntime.jsxs(PaddedColumn, __assign({ gap: "lg", style: { overflow: 'auto', marginBottom: '10px' } }, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(ThemedText.Main, __assign({ fontWeight: 600 }, { children: jsxRuntime.jsxs(macro.Trans, { children: [userAddedTokens === null || userAddedTokens === void 0 ? void 0 : userAddedTokens.length, " Custom Tokens"] }, void 0) }), void 0), userAddedTokens.length > 0 && (jsxRuntime.jsx(ButtonText, __assign({ onClick: handleRemoveAll }, { children: jsxRuntime.jsx(ThemedText.Blue, { children: jsxRuntime.jsx(macro.Trans, { children: "Clear all" }, void 0) }, void 0) }), void 0))] }, void 0), tokenList] }), void 0)] }), void 0), jsxRuntime.jsx(Footer, { children: jsxRuntime.jsx(ThemedText.DarkGray, { children: jsxRuntime.jsx(macro.Trans, { children: "Tip: Custom tokens are stored locally in your browser" }, void 0) }, void 0) }, void 0)] }, void 0)); } -var templateObject_1$i, templateObject_2$9; +var templateObject_1$i, templateObject_2$8; var Wrapper$2 = styled__default["default"].div(templateObject_1$h || (templateObject_1$h = __makeTemplateObject(["\n width: 100%;\n position: relative;\n display: flex;\n flex-flow: column;\n"], ["\n width: 100%;\n position: relative;\n display: flex;\n flex-flow: column;\n"]))); -var ToggleWrapper = styled__default["default"](RowBetween)(templateObject_2$8 || (templateObject_2$8 = __makeTemplateObject(["\n background-color: ", ";\n border-radius: 12px;\n padding: 6px;\n"], ["\n background-color: ", ";\n border-radius: 12px;\n padding: 6px;\n"])), function (_a) { +var ToggleWrapper = styled__default["default"](RowBetween)(templateObject_2$7 || (templateObject_2$7 = __makeTemplateObject(["\n background-color: ", ";\n border-radius: 12px;\n padding: 6px;\n"], ["\n background-color: ", ";\n border-radius: 12px;\n padding: 6px;\n"])), function (_a) { var theme = _a.theme; return theme.bg3; }); -var ToggleOption = styled__default["default"].div(templateObject_3$6 || (templateObject_3$6 = __makeTemplateObject(["\n width: 48%;\n padding: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 12px;\n font-weight: 600;\n background-color: ", ";\n color: ", ";\n user-select: none;\n\n :hover {\n cursor: pointer;\n opacity: 0.7;\n }\n"], ["\n width: 48%;\n padding: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 12px;\n font-weight: 600;\n background-color: ", ";\n color: ", ";\n user-select: none;\n\n :hover {\n cursor: pointer;\n opacity: 0.7;\n }\n"])), function (_a) { +var ToggleOption = styled__default["default"].div(templateObject_3$5 || (templateObject_3$5 = __makeTemplateObject(["\n width: 48%;\n padding: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 12px;\n font-weight: 600;\n background-color: ", ";\n color: ", ";\n user-select: none;\n\n :hover {\n cursor: pointer;\n opacity: 0.7;\n }\n"], ["\n width: 48%;\n padding: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 12px;\n font-weight: 600;\n background-color: ", ";\n color: ", ";\n user-select: none;\n\n :hover {\n cursor: pointer;\n opacity: 0.7;\n }\n"])), function (_a) { var theme = _a.theme, active = _a.active; return (active ? theme.bg1 : theme.bg3); }, function (_a) { @@ -12167,7 +12775,7 @@ function Manage(_a) { var _b = __read(React.useState(true), 2), showLists = _b[0], setShowLists = _b[1]; return (jsxRuntime.jsxs(Wrapper$2, { children: [jsxRuntime.jsx(PaddedColumn, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(reactFeather.ArrowLeft, { style: { cursor: 'pointer' }, onClick: function () { return setModalView(CurrencyModalView.search); } }, void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Manage" }, void 0) }), void 0), jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0)] }, void 0) }, void 0), jsxRuntime.jsx(Separator, {}, void 0), jsxRuntime.jsx(PaddedColumn, __assign({ style: { paddingBottom: 0 } }, { children: jsxRuntime.jsxs(ToggleWrapper, { children: [jsxRuntime.jsx(ToggleOption, __assign({ onClick: function () { return setShowLists(!showLists); }, active: showLists }, { children: jsxRuntime.jsx(macro.Trans, { children: "Lists" }, void 0) }), void 0), jsxRuntime.jsx(ToggleOption, __assign({ onClick: function () { return setShowLists(!showLists); }, active: !showLists }, { children: jsxRuntime.jsx(macro.Trans, { children: "Tokens" }, void 0) }), void 0)] }, void 0) }), void 0), showLists ? (jsxRuntime.jsx(ManageLists, { setModalView: setModalView, setImportList: setImportList, setListUrl: setListUrl }, void 0)) : (jsxRuntime.jsx(ManageTokens, { setModalView: setModalView, setImportToken: setImportToken }, void 0))] }, void 0)); } -var templateObject_1$h, templateObject_2$8, templateObject_3$6; +var templateObject_1$h, templateObject_2$7, templateObject_3$5; var CurrencyModalView; (function (CurrencyModalView) { @@ -12281,11 +12889,11 @@ var InputPanel = styled__default["default"].div(templateObject_1$e || (templateO var hideInput = _a.hideInput; return (hideInput ? '100%' : 'initial'); }); -var FixedContainer = styled__default["default"].div(templateObject_2$7 || (templateObject_2$7 = __makeTemplateObject(["\n width: 100%;\n height: 100%;\n position: absolute;\n border-radius: 20px;\n background-color: ", ";\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 2;\n"], ["\n width: 100%;\n height: 100%;\n position: absolute;\n border-radius: 20px;\n background-color: ", ";\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 2;\n"])), function (_a) { +var FixedContainer = styled__default["default"].div(templateObject_2$6 || (templateObject_2$6 = __makeTemplateObject(["\n width: 100%;\n height: 100%;\n position: absolute;\n border-radius: 20px;\n background-color: ", ";\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 2;\n"], ["\n width: 100%;\n height: 100%;\n position: absolute;\n border-radius: 20px;\n background-color: ", ";\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 2;\n"])), function (_a) { var theme = _a.theme; return theme.bg2; }); -var Container$1 = styled__default["default"].div(templateObject_3$5 || (templateObject_3$5 = __makeTemplateObject(["\n border-radius: ", ";\n border: 1px solid ", ";\n background-color: ", ";\n width: ", ";\n :focus,\n :hover {\n border: 1px solid ", ";\n }\n"], ["\n border-radius: ", ";\n border: 1px solid ", ";\n background-color: ", ";\n width: ", ";\n :focus,\n :hover {\n border: 1px solid ", ";\n }\n"])), function (_a) { +var Container$1 = styled__default["default"].div(templateObject_3$4 || (templateObject_3$4 = __makeTemplateObject(["\n border-radius: ", ";\n border: 1px solid ", ";\n background-color: ", ";\n width: ", ";\n :focus,\n :hover {\n border: 1px solid ", ";\n }\n"], ["\n border-radius: ", ";\n border: 1px solid ", ";\n background-color: ", ";\n width: ", ";\n :focus,\n :hover {\n border: 1px solid ", ";\n }\n"])), function (_a) { var hideInput = _a.hideInput; return (hideInput ? '16px' : '20px'); }, function (_a) { @@ -12394,7 +13002,7 @@ function CurrencyInputPanel(_a) { currency.symbol.slice(currency.symbol.length - 5, currency.symbol.length) : currency === null || currency === void 0 ? void 0 : currency.symbol) || jsxRuntime.jsx(macro.Trans, { children: "Select a token" }, void 0) }), void 0))] }, void 0), onCurrencySelect && jsxRuntime.jsx(StyledDropDown, { selected: !!currency }, void 0)] }, void 0) }), void 0)] }), void 0), !hideInput && !hideBalance && currency && (jsxRuntime.jsx(FiatRow, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(LoadingOpacityContainer, __assign({ "$loading": loading }, { children: jsxRuntime.jsx(FiatValue, { fiatValue: fiatValue, priceImpact: priceImpact }, void 0) }), void 0), account ? (jsxRuntime.jsxs(RowFixed, __assign({ style: { height: '17px' } }, { children: [jsxRuntime.jsx(ThemedText.Body, __assign({ onClick: onMax, color: theme.text3, fontWeight: 500, fontSize: 14, style: { display: 'inline', cursor: 'pointer' } }, { children: !hideBalance && currency && selectedCurrencyBalance ? (renderBalance ? (renderBalance(selectedCurrencyBalance)) : (jsxRuntime.jsxs(macro.Trans, { children: ["Balance: ", formatCurrencyAmount(selectedCurrencyBalance, 4)] }, void 0))) : null }), void 0), showMaxButton && selectedCurrencyBalance ? (jsxRuntime.jsx(StyledBalanceMax, __assign({ onClick: onMax }, { children: jsxRuntime.jsx(macro.Trans, { children: "MAX" }, void 0) }), void 0)) : null] }), void 0)) : (jsxRuntime.jsx("span", {}, void 0))] }, void 0) }, void 0))] }), void 0), onCurrencySelect && (jsxRuntime.jsx(CurrencySearchModal, { isOpen: modalOpen, onDismiss: handleDismissSearch, onCurrencySelect: onCurrencySelect, selectedCurrency: currency, otherSelectedCurrency: otherCurrency, showCommonBases: showCommonBases, showCurrencyAmount: showCurrencyAmount, disableNonToken: disableNonToken }, void 0))] }), void 0)); } -var templateObject_1$e, templateObject_2$7, templateObject_3$5, templateObject_4$4, templateObject_5$4, templateObject_6$2, templateObject_7$2, templateObject_8$1, templateObject_9$1, templateObject_10$1, templateObject_11$1, templateObject_12$1; +var templateObject_1$e, templateObject_2$6, templateObject_3$4, templateObject_4$4, templateObject_5$4, templateObject_6$2, templateObject_7$2, templateObject_8$1, templateObject_9$1, templateObject_10$1, templateObject_11$1, templateObject_12$1; /** * Given the price impact, get user confirmation. @@ -12624,22 +13232,22 @@ function TransactionSummary(_a) { } var Wrapper$1 = styled__default["default"].div(templateObject_1$d || (templateObject_1$d = __makeTemplateObject(["\n height: 90px;\n width: 90px;\n"], ["\n height: 90px;\n width: 90px;\n"]))); -var dash = styled.keyframes(templateObject_2$6 || (templateObject_2$6 = __makeTemplateObject(["\n 0% {\n stroke-dashoffset: 1000;\n }\n 100% {\n stroke-dashoffset: 0;\n }\n"], ["\n 0% {\n stroke-dashoffset: 1000;\n }\n 100% {\n stroke-dashoffset: 0;\n }\n"]))); -var dashCheck = styled.keyframes(templateObject_3$4 || (templateObject_3$4 = __makeTemplateObject(["\n 0% {\n stroke-dashoffset: -100;\n }\n 100% {\n stroke-dashoffset: 900;\n }\n"], ["\n 0% {\n stroke-dashoffset: -100;\n }\n 100% {\n stroke-dashoffset: 900;\n }\n"]))); +var dash = styled.keyframes(templateObject_2$5 || (templateObject_2$5 = __makeTemplateObject(["\n 0% {\n stroke-dashoffset: 1000;\n }\n 100% {\n stroke-dashoffset: 0;\n }\n"], ["\n 0% {\n stroke-dashoffset: 1000;\n }\n 100% {\n stroke-dashoffset: 0;\n }\n"]))); +var dashCheck = styled.keyframes(templateObject_3$3 || (templateObject_3$3 = __makeTemplateObject(["\n 0% {\n stroke-dashoffset: -100;\n }\n 100% {\n stroke-dashoffset: 900;\n }\n"], ["\n 0% {\n stroke-dashoffset: -100;\n }\n 100% {\n stroke-dashoffset: 900;\n }\n"]))); var Circle = styled__default["default"].circle(templateObject_4$3 || (templateObject_4$3 = __makeTemplateObject(["\n stroke-dasharray: 1000;\n stroke-dashoffset: 0;\n -webkit-animation: ", " 0.9s ease-in-out;\n animation: ", " 0.9s ease-in-out;\n"], ["\n stroke-dasharray: 1000;\n stroke-dashoffset: 0;\n -webkit-animation: ", " 0.9s ease-in-out;\n animation: ", " 0.9s ease-in-out;\n"])), dash, dash); var PolyLine = styled__default["default"].polyline(templateObject_5$3 || (templateObject_5$3 = __makeTemplateObject(["\n stroke-dasharray: 1000;\n stroke-dashoffset: 0;\n stroke-dashoffset: -100;\n -webkit-animation: ", " 0.9s 0.35s ease-in-out forwards;\n animation: ", " 0.9s 0.35s ease-in-out forwards;\n"], ["\n stroke-dasharray: 1000;\n stroke-dashoffset: 0;\n stroke-dashoffset: -100;\n -webkit-animation: ", " 0.9s 0.35s ease-in-out forwards;\n animation: ", " 0.9s 0.35s ease-in-out forwards;\n"])), dashCheck, dashCheck); function AnimatedConfirmation() { var theme = useTheme(); return (jsxRuntime.jsx(Wrapper$1, __assign({ className: "w4rAnimated_checkmark" }, { children: jsxRuntime.jsxs("svg", __assign({ version: "1.1", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 130.2 130.2" }, { children: [jsxRuntime.jsx(Circle, { className: "path circle", fill: "none", stroke: theme.green1, strokeWidth: "6", strokeMiterlimit: "10", cx: "65.1", cy: "65.1", r: "62.1" }, void 0), jsxRuntime.jsx(PolyLine, { className: "path check", fill: "none", stroke: theme.green1, strokeWidth: "6", strokeLinecap: "round", strokeMiterlimit: "10", points: "100.2,40.2 51.5,88.8 29.8,67.5 " }, void 0)] }), void 0) }), void 0)); } -var templateObject_1$d, templateObject_2$6, templateObject_3$4, templateObject_4$3, templateObject_5$3; +var templateObject_1$d, templateObject_2$5, templateObject_3$3, templateObject_4$3, templateObject_5$3; var Wrapper = styled__default["default"].div(templateObject_1$c || (templateObject_1$c = __makeTemplateObject(["\n width: 100%;\n padding: 1rem;\n"], ["\n width: 100%;\n padding: 1rem;\n"]))); -var Section = styled__default["default"](AutoColumn)(templateObject_2$5 || (templateObject_2$5 = __makeTemplateObject(["\n padding: ", ";\n"], ["\n padding: ", ";\n"])), function (_a) { +var Section = styled__default["default"](AutoColumn)(templateObject_2$4 || (templateObject_2$4 = __makeTemplateObject(["\n padding: ", ";\n"], ["\n padding: ", ";\n"])), function (_a) { var inline = _a.inline; return (inline ? '0' : '0'); }); -var BottomSection = styled__default["default"](Section)(templateObject_3$3 || (templateObject_3$3 = __makeTemplateObject(["\n border-bottom-left-radius: 20px;\n border-bottom-right-radius: 20px;\n"], ["\n border-bottom-left-radius: 20px;\n border-bottom-right-radius: 20px;\n"]))); +var BottomSection = styled__default["default"](Section)(templateObject_3$2 || (templateObject_3$2 = __makeTemplateObject(["\n border-bottom-left-radius: 20px;\n border-bottom-right-radius: 20px;\n"], ["\n border-bottom-left-radius: 20px;\n border-bottom-right-radius: 20px;\n"]))); var ConfirmedIcon = styled__default["default"](ColumnCenter)(templateObject_4$2 || (templateObject_4$2 = __makeTemplateObject(["\n padding: ", ";\n"], ["\n padding: ", ";\n"])), function (_a) { var inline = _a.inline; return (inline ? '20px 0' : '32px 0;'); @@ -12691,7 +13299,7 @@ function TransactionConfirmationModal(_a) { // confirmation screen return (jsxRuntime.jsx(Modal, __assign({ isOpen: isOpen, onDismiss: onDismiss, maxHeight: 90 }, { children: isL2 && (hash || attemptingTxn) ? (jsxRuntime.jsx(L2Content, { chainId: chainId, hash: hash, onDismiss: onDismiss, pendingText: pendingText }, void 0)) : attemptingTxn ? (jsxRuntime.jsx(ConfirmationPendingContent, { onDismiss: onDismiss, pendingText: pendingText }, void 0)) : hash ? (jsxRuntime.jsx(TransactionSubmittedContent, { chainId: chainId, hash: hash, onDismiss: onDismiss, currencyToAdd: currencyToAdd }, void 0)) : (content()) }), void 0)); } -var templateObject_1$c, templateObject_2$5, templateObject_3$3, templateObject_4$2, templateObject_5$2; +var templateObject_1$c, templateObject_2$4, templateObject_3$2, templateObject_4$2, templateObject_5$2; function SwapModalFooter(_a) { var onConfirm = _a.onConfirm, swapErrorMessage = _a.swapErrorMessage, disabledConfirm = _a.disabledConfirm; @@ -12744,7 +13352,7 @@ function ConfirmSwapModal(_a) { return (jsxRuntime.jsx(TransactionConfirmationModal, { isOpen: isOpen, onDismiss: onDismiss, attemptingTxn: attemptingTxn, hash: txHash, content: confirmationContent, pendingText: pendingText, currencyToAdd: trade === null || trade === void 0 ? void 0 : trade.outputAmount.currency }, void 0)); } -var _a$5; +var _a$6; var ApplicationModal; (function (ApplicationModal) { ApplicationModal[ApplicationModal["WALLET"] = 0] = "WALLET"; @@ -12796,7 +13404,7 @@ var applicationSlice = toolkit.createSlice({ }, }, }); -(_a$5 = applicationSlice.actions, _a$5.updateChainId); var setOpenModal = _a$5.setOpenModal; _a$5.addPopup; _a$5.removePopup; +var updateChainId = (_a$6 = applicationSlice.actions, _a$6.updateChainId), setOpenModal = _a$6.setOpenModal, addPopup = _a$6.addPopup; _a$6.removePopup; var application = applicationSlice.reducer; function useModalOpen(modal) { @@ -12813,6 +13421,13 @@ function useWalletModalToggle() { } function useToggleSettingsMenu() { return useToggleModal(ApplicationModal.SETTINGS); +} +// returns a function that allows adding a popup +function useAddPopup() { + var dispatch = useAppDispatch(); + return React.useCallback(function (content, key, removeAfterMs) { + dispatch(addPopup({ content: content, key: key, removeAfterMs: removeAfterMs !== null && removeAfterMs !== void 0 ? removeAfterMs : DEFAULT_TXN_DISMISS_MS })); + }, [dispatch]); } var ToggleElement = styled__default["default"].span(templateObject_1$a || (templateObject_1$a = __makeTemplateObject(["\n padding: 0.25rem 0.6rem;\n border-radius: 9px;\n background: ", ";\n color: ", ";\n font-size: 14px;\n font-weight: ", ";\n :hover {\n user-select: ", ";\n background: ", ";\n color: ", ";\n }\n"], ["\n padding: 0.25rem 0.6rem;\n border-radius: 9px;\n background: ", ";\n color: ", ";\n font-size: 14px;\n font-weight: ", ";\n :hover {\n user-select: ", ";\n background: ", ";\n color: ", ";\n }\n"])), function (_a) { @@ -12834,7 +13449,7 @@ var ToggleElement = styled__default["default"].span(templateObject_1$a || (templ var theme = _a.theme, isActive = _a.isActive, isOnSwitch = _a.isOnSwitch; return (isActive ? (isOnSwitch ? theme.white : theme.white) : theme.text3); }); -var StyledToggle = styled__default["default"].button(templateObject_2$4 || (templateObject_2$4 = __makeTemplateObject(["\n border-radius: 12px;\n border: none;\n background: ", ";\n display: flex;\n width: fit-content;\n cursor: pointer;\n outline: none;\n padding: 2px;\n"], ["\n border-radius: 12px;\n border: none;\n background: ", ";\n display: flex;\n width: fit-content;\n cursor: pointer;\n outline: none;\n padding: 2px;\n"])), function (_a) { +var StyledToggle = styled__default["default"].button(templateObject_2$3 || (templateObject_2$3 = __makeTemplateObject(["\n border-radius: 12px;\n border: none;\n background: ", ";\n display: flex;\n width: fit-content;\n cursor: pointer;\n outline: none;\n padding: 2px;\n"], ["\n border-radius: 12px;\n border: none;\n background: ", ";\n display: flex;\n width: fit-content;\n cursor: pointer;\n outline: none;\n padding: 2px;\n"])), function (_a) { var theme = _a.theme; return theme.bg0; }); @@ -12842,7 +13457,7 @@ function Toggle(_a) { var id = _a.id, isActive = _a.isActive, toggle = _a.toggle, _b = _a.checked, checked = _b === void 0 ? jsxRuntime.jsx(macro.Trans, { children: "On" }, void 0) : _b, _c = _a.unchecked, unchecked = _c === void 0 ? jsxRuntime.jsx(macro.Trans, { children: "Off" }, void 0) : _c; return (jsxRuntime.jsxs(StyledToggle, __assign({ id: id, isActive: isActive, onClick: toggle }, { children: [jsxRuntime.jsx(ToggleElement, __assign({ isActive: isActive, isOnSwitch: true }, { children: checked }), void 0), jsxRuntime.jsx(ToggleElement, __assign({ isActive: !isActive, isOnSwitch: false }, { children: unchecked }), void 0)] }), void 0)); } -var templateObject_1$a, templateObject_2$4; +var templateObject_1$a, templateObject_2$3; var SlippageError; (function (SlippageError) { @@ -12868,14 +13483,14 @@ var FancyButton = styled__default["default"].button(templateObject_1$9 || (templ var theme = _a.theme; return theme.primary1; }); -var Option = styled__default["default"](FancyButton)(templateObject_2$3 || (templateObject_2$3 = __makeTemplateObject(["\n margin-right: 8px;\n :hover {\n cursor: pointer;\n }\n background-color: ", ";\n color: ", ";\n"], ["\n margin-right: 8px;\n :hover {\n cursor: pointer;\n }\n background-color: ", ";\n color: ", ";\n"])), function (_a) { +var Option = styled__default["default"](FancyButton)(templateObject_2$2 || (templateObject_2$2 = __makeTemplateObject(["\n margin-right: 8px;\n :hover {\n cursor: pointer;\n }\n background-color: ", ";\n color: ", ";\n"], ["\n margin-right: 8px;\n :hover {\n cursor: pointer;\n }\n background-color: ", ";\n color: ", ";\n"])), function (_a) { var active = _a.active, theme = _a.theme; return active && theme.primary1; }, function (_a) { var active = _a.active, theme = _a.theme; return (active ? theme.white : theme.text1); }); -var Input = styled__default["default"].input(templateObject_3$2 || (templateObject_3$2 = __makeTemplateObject(["\n background: ", ";\n font-size: 16px;\n width: auto;\n outline: none;\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n }\n color: ", ";\n text-align: right;\n"], ["\n background: ", ";\n font-size: 16px;\n width: auto;\n outline: none;\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n }\n color: ", ";\n text-align: right;\n"])), function (_a) { +var Input = styled__default["default"].input(templateObject_3$1 || (templateObject_3$1 = __makeTemplateObject(["\n background: ", ";\n font-size: 16px;\n width: auto;\n outline: none;\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n }\n color: ", ";\n text-align: right;\n"], ["\n background: ", ";\n font-size: 16px;\n width: auto;\n outline: none;\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n }\n color: ", ";\n text-align: right;\n"])), function (_a) { var theme = _a.theme; return theme.bg1; }, function (_a) { @@ -12973,17 +13588,17 @@ function TransactionSettings(_a) { setDeadlineError(false); }, color: deadlineError ? 'red' : '' }, void 0) }), void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ style: { paddingLeft: '8px' }, fontSize: 14 }, { children: jsxRuntime.jsx(macro.Trans, { children: "minutes" }, void 0) }), void 0)] }, void 0)] }), void 0))] }), void 0)); } -var templateObject_1$9, templateObject_2$3, templateObject_3$2, templateObject_4$1, templateObject_5$1, templateObject_6$1, templateObject_7$1; +var templateObject_1$9, templateObject_2$2, templateObject_3$1, templateObject_4$1, templateObject_5$1, templateObject_6$1, templateObject_7$1; var StyledMenuIcon = styled__default["default"](reactFeather.Settings)(templateObject_1$8 || (templateObject_1$8 = __makeTemplateObject(["\n height: 20px;\n width: 20px;\n\n > * {\n stroke: ", ";\n }\n\n :hover {\n opacity: 0.7;\n }\n"], ["\n height: 20px;\n width: 20px;\n\n > * {\n stroke: ", ";\n }\n\n :hover {\n opacity: 0.7;\n }\n"])), function (_a) { var theme = _a.theme; return theme.text1; }); -var StyledCloseIcon = styled__default["default"](reactFeather.X)(templateObject_2$2 || (templateObject_2$2 = __makeTemplateObject(["\n height: 20px;\n width: 20px;\n :hover {\n cursor: pointer;\n }\n\n > * {\n stroke: ", ";\n }\n"], ["\n height: 20px;\n width: 20px;\n :hover {\n cursor: pointer;\n }\n\n > * {\n stroke: ", ";\n }\n"])), function (_a) { +var StyledCloseIcon = styled__default["default"](reactFeather.X)(templateObject_2$1 || (templateObject_2$1 = __makeTemplateObject(["\n height: 20px;\n width: 20px;\n :hover {\n cursor: pointer;\n }\n\n > * {\n stroke: ", ";\n }\n"], ["\n height: 20px;\n width: 20px;\n :hover {\n cursor: pointer;\n }\n\n > * {\n stroke: ", ";\n }\n"])), function (_a) { var theme = _a.theme; return theme.text1; }); -var StyledMenuButton = styled__default["default"].button(templateObject_3$1 || (templateObject_3$1 = __makeTemplateObject(["\n position: relative;\n width: 100%;\n height: 100%;\n border: none;\n background-color: transparent;\n margin: 0;\n padding: 0;\n border-radius: 0.5rem;\n height: 20px;\n\n :hover,\n :focus {\n cursor: pointer;\n outline: none;\n }\n"], ["\n position: relative;\n width: 100%;\n height: 100%;\n border: none;\n background-color: transparent;\n margin: 0;\n padding: 0;\n border-radius: 0.5rem;\n height: 20px;\n\n :hover,\n :focus {\n cursor: pointer;\n outline: none;\n }\n"]))); +var StyledMenuButton = styled__default["default"].button(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n position: relative;\n width: 100%;\n height: 100%;\n border: none;\n background-color: transparent;\n margin: 0;\n padding: 0;\n border-radius: 0.5rem;\n height: 20px;\n\n :hover,\n :focus {\n cursor: pointer;\n outline: none;\n }\n"], ["\n position: relative;\n width: 100%;\n height: 100%;\n border: none;\n background-color: transparent;\n margin: 0;\n padding: 0;\n border-radius: 0.5rem;\n height: 20px;\n\n :hover,\n :focus {\n cursor: pointer;\n outline: none;\n }\n"]))); var EmojiWrapper = styled__default["default"].div(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n position: absolute;\n bottom: -6px;\n right: 0px;\n font-size: 14px;\n"], ["\n position: absolute;\n bottom: -6px;\n right: 0px;\n font-size: 14px;\n"]))); var StyledMenu = styled__default["default"].div(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n margin-left: 0.5rem;\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n text-align: left;\n"], ["\n margin-left: 0.5rem;\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n text-align: left;\n"]))); var MenuFlyout = styled__default["default"].span(templateObject_7 || (templateObject_7 = __makeTemplateObject(["\n min-width: 20.125rem;\n background-color: ", ";\n border: 1px solid ", ";\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 border-radius: 12px;\n display: flex;\n flex-direction: column;\n font-size: 1rem;\n position: absolute;\n top: 2rem;\n right: 0rem;\n z-index: 100;\n\n ", ";\n\n user-select: none;\n"], ["\n min-width: 20.125rem;\n background-color: ", ";\n border: 1px solid ", ";\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 border-radius: 12px;\n display: flex;\n flex-direction: column;\n font-size: 1rem;\n position: absolute;\n top: 2rem;\n right: 0rem;\n z-index: 100;\n\n ", ";\n\n user-select: none;\n"])), function (_a) { @@ -13040,7 +13655,7 @@ function SettingsTab(_a) { setShowConfirmation(true); } }, void 0)] }, void 0)] }), void 0) }, void 0))] }), void 0)); } -var templateObject_1$8, templateObject_2$2, templateObject_3$1, templateObject_4, templateObject_5, templateObject_6, templateObject_7, templateObject_8, templateObject_9, templateObject_10, templateObject_11, templateObject_12; +var templateObject_1$8, templateObject_2$1, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7, templateObject_8, templateObject_9, templateObject_10, templateObject_11, templateObject_12; var StyledSwapHeader = styled__default["default"].div(templateObject_1$7 || (templateObject_1$7 = __makeTemplateObject(["\n padding: 1rem 1.25rem 0.5rem 1.25rem;\n width: 100%;\n color: ", ";\n"], ["\n padding: 1rem 1.25rem 0.5rem 1.25rem;\n width: 100%;\n color: ", ";\n"])), function (_a) { var theme = _a.theme; @@ -13065,6 +13680,15 @@ function useParsedQueryString() { return React.useMemo(function () { return parsedQueryString(search); }, [search]); } +/*eslint-disable*/ + +var enUS={messages:{"$-":"$-","$<0/>":"$<0/>","${0}":["$",["0"]],"(${0})":["($",["0"],")"],"(View on Explorer)":"(View on Explorer)","(clear all)":"(clear all)","(edit)":"(edit)","- Remove recipient":"- Remove recipient","0 UNI / week":"0 UNI / week","25%":"25%","50%":"50%","75%":"75%","<0/> All Proposals":"<0/> All Proposals","<0/> Votes":"<0/> Votes","<0>Account analytics and accrued fees<1> ↗ ":"<0>Account analytics and accrued fees<1> ↗ ","<0>Current Price:<1><2/><3>{0} per {1}":["<0>Current Price:<1><2/><3>",["0"]," per ",["1"],""],"<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.":"<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.","<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.":"<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.","<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.":"<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.","<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.":"<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.","<0>Unlock voting to prepare for the next proposal.":"<0>Unlock voting to prepare for the next proposal.","<0>🎉 Welcome to team Unicorn :) <1>🎉":"<0>🎉 Welcome to team Unicorn :) <1>🎉","A minimum threshold of 0.25% of the total UNI supply is required to submit proposals":"A minimum threshold of 0.25% of the total UNI supply is required to submit proposals","About":"About","Accept":"Accept","Account":"Account","Active":"Active","Add":"Add","Add <0/> and <1/> to Uniswap V2":"Add <0/> and <1/> to Uniswap V2","Add Delegate +":"Add Delegate +","Add Liquidity":"Add Liquidity","Add V2 Liquidity":"Add V2 Liquidity","Add liquidity.":"Add liquidity.","Add more liquidity":"Add more liquidity","Add {0} to Metamask <0/>":["Add ",["0"]," to Metamask <0/>"],"Add {0}-{1} liquidity":["Add ",["0"],"-",["1"]," liquidity"],"Add {0}/{1} V3 liquidity":["Add ",["0"],"/",["1"]," V3 liquidity"],"Added {0}":["Added ",["0"]],"Address has no available claim":"Address has no available claim","Against":"Against","Allow LP token migration":"Allow LP token migration","Allow high price impact trades and skip the confirm screen. Use at your own risk.":"Allow high price impact trades and skip the confirm screen. Use at your own risk.","Allow the Uniswap Protocol to use your {0}":["Allow the Uniswap Protocol to use your ",["0"]],"Allowed":"Allowed","Amount":"Amount","An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.":"An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.","Approval pending <0/>":"Approval pending <0/>","Approve":"Approve","Approve Token":"Approve Token","Approve {0}":["Approve ",["0"]],"Approve {0} first":["Approve ",["0"]," first"],"Approved":"Approved","Approving":"Approving","Approving {0}":["Approving ",["0"]],"Arbiscan":"Arbiscan","Arbitrum Bridge":"Arbitrum Bridge","Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.":"Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.","Are you sure?":"Are you sure?","As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI":"As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI","At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.":["At least ",["0"]," ",["1"]," and ",["2"]," ",["3"]," will be refunded to your wallet due to selected price range."],"Auto":"Auto","Auto Router API":"Auto Router API","Available to deposit: {0}":["Available to deposit: ",["0"]],"Balance: {0}":["Balance: ",["0"]],"Best for exotic pairs.":"Best for exotic pairs.","Best for most pairs.":"Best for most pairs.","Best for stable pairs.":"Best for stable pairs.","Best for very stable pairs.":"Best for very stable pairs.","Best price route costs ~{formattedGasPriceString} in gas.":["Best price route costs ~",["formattedGasPriceString"]," in gas."],"Blocked address":"Blocked address","Bridge":"Bridge","By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.":"By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.","By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.":"By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.","By connecting a wallet, you agree to Uniswap Labs’ <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.":"By connecting a wallet, you agree to Uniswap Labs’ <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.","Canceled":"Canceled","Change":"Change","Charts":"Charts","Check network status":"Check network status","Check out our v3 LP walkthrough and migration guides.":"Check out our v3 LP walkthrough and migration guides.","Claim":"Claim","Claim <0/> for {0}":["Claim <0/> for ",["0"]],"Claim UNI":"Claim UNI","Claim UNI Token":"Claim UNI Token","Claim UNI reward for {0}":["Claim UNI reward for ",["0"]],"Claim fees":"Claim fees","Claim your UNI tokens":"Claim your UNI tokens","Claimed":"Claimed","Claimed UNI!":"Claimed UNI!","Claimed!":"Claimed!","Claiming":"Claiming","Claiming UNI":"Claiming UNI","Claiming {0} UNI":["Claiming ",["0"]," UNI"],"Clear All":"Clear All","Clear all":"Clear all","Close":"Close","Closed":"Closed","Collect":"Collect","Collect as WETH":"Collect as WETH","Collect fees":"Collect fees","Collect {0}/{1} fees":["Collect ",["0"],"/",["1"]," fees"],"Collected":"Collected","Collecting":"Collecting","Collecting fees":"Collecting fees","Collecting fees will withdraw currently available fees for you.":"Collecting fees will withdraw currently available fees for you.","Confirm":"Confirm","Confirm Supply":"Confirm Supply","Confirm Swap":"Confirm Swap","Confirm swap":"Confirm swap","Confirm this transaction in your wallet":"Confirm this transaction in your wallet","Confirm transaction in wallet":"Confirm transaction in wallet","Connect Wallet":"Connect Wallet","Connect a wallet":"Connect a wallet","Connect to a wallet to find pools":"Connect to a wallet to find pools","Connect to a wallet to view your V2 liquidity.":"Connect to a wallet to view your V2 liquidity.","Connect to a wallet to view your liquidity.":"Connect to a wallet to view your liquidity.","Connect wallet to swap":"Connect wallet to swap","Connected with {name}":["Connected with ",["name"]],"Copied":"Copied","Copy Address":"Copy Address","Create Pool & Supply":"Create Pool & Supply","Create Proposal":"Create Proposal","Create a pair":"Create a pair","Create a pool":"Create a pool","Create an issue on GitHub":"Create an issue on GitHub","Create pool and add {0}/{1} V3 liquidity":["Create pool and add ",["0"],"/",["1"]," V3 liquidity"],"Create pool.":"Create pool.","Create {0}/{1} V3 pool":["Create ",["0"],"/",["1"]," V3 pool"],"Current price":"Current price","Current {0} Price:":["Current ",["0"]," Price:"],"Custom":"Custom","Dark Theme":"Dark Theme","Defeated":"Defeated","Delegate Votes":"Delegate Votes","Delegate voting power to {0}":["Delegate voting power to ",["0"]],"Delegated to:":"Delegated to:","Delegating votes":"Delegating votes","Deposit":"Deposit","Deposit Amounts":"Deposit Amounts","Deposit UNI-V2 LP Tokens":"Deposit UNI-V2 LP Tokens","Deposit liquidity":"Deposit liquidity","Deposit tokens to the {label} network.":["Deposit tokens to the ",["label"]," network."],"Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.":"Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.","Deposited liquidity:":"Deposited liquidity:","Deposited {0} UNI-V2":["Deposited ",["0"]," UNI-V2"],"Depositing Liquidity":"Depositing Liquidity","Description":"Description","Detailed":"Detailed","Details":"Details","Disconnect":"Disconnect","Discord":"Discord","Dismiss":"Dismiss","Docs":"Docs","Don’t see one of your v2 positions? <0>Import it.":"Don’t see one of your v2 positions? <0>Import it.","Earned UNI tokens represent voting shares in Uniswap governance.":"Earned UNI tokens represent voting shares in Uniswap governance.","Edit":"Edit","Efficiency Comparison":"Efficiency Comparison","Enter a percent":"Enter a percent","Enter a recipient":"Enter a recipient","Enter a valid slippage percentage":"Enter a valid slippage percentage","Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.":"Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.","Enter an amount":"Enter an amount","Enter valid list location":"Enter valid list location","Enter valid token address":"Enter valid token address","Enter {0} amount":["Enter ",["0"]," amount"],"Error":"Error","Error connecting":"Error connecting","Error connecting. Try refreshing the page.":"Error connecting. Try refreshing the page.","Error details":"Error details","Error importing list":"Error importing list","Estimate may differ due to your wallet gas settings":"Estimate may differ due to your wallet gas settings","Estimated network fee":"Estimated network fee","Etherscan":"Etherscan","Executed":"Executed","Expanded results from inactive Token Lists":"Expanded results from inactive Token Lists","Expected Output":"Expected Output","Expert Mode":"Expert Mode","Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.":"Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.","Expired":"Expired","Explore Uniswap Analytics.":"Explore Uniswap Analytics.","Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.":["Failed to switch networks from the Uniswap Interface. In order to use Uniswap on ",["0"],", you must change the network in your wallet."],"Fee Tier":"Fee Tier","Fee tier":"Fee tier","Fetching best price...":"Fetching best price...","Fetching best price…":"Fetching best price…","For":"For","For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.":"For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.","From":"From","From (at most)":"From (at most)","Full Range":"Full Range","Full range positions may earn less fees than concentrated positions. Learn more <0>here.":"Full range positions may earn less fees than concentrated positions. Learn more <0>here.","Get support on Discord":"Get support on Discord","Help Center":"Help Center","Hide":"Hide","Hide closed positions":"Hide closed positions","High Price Impact":"High Price Impact","How this app uses APIs":"How this app uses APIs","I understand":"I understand","If you purchase a token from this list, you may not be able to sell it back.":"If you purchase a token from this list, you may not be able to sell it back.","Import":"Import","Import List":"Import List","Import Pool":"Import Pool","Import V2 Pool":"Import V2 Pool","Import at your own risk":"Import at your own risk","In range":"In range","Increase Liquidity":"Increase Liquidity","Initial prices and pool share":"Initial prices and pool share","Initializing...":"Initializing...","Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.":["Input is estimated. You will sell at most <0>",["0"]," ",["1"]," or the transaction will revert."],"Install Metamask":"Install Metamask","Insufficient liquidity for this trade.":"Insufficient liquidity for this trade.","Insufficient {0}":["Insufficient ",["0"]],"Insufficient {0} balance":["Insufficient ",["0"]," balance"],"Interface Settings":"Interface Settings","Invalid pair":"Invalid pair","Invalid pair.":"Invalid pair.","Invalid price input":"Invalid price input","Invalid range selected. The min price must be lower than the max price.":"Invalid range selected. The min price must be lower than the max price.","Invalid recipient":"Invalid recipient","Language":"Language","Learn":"Learn","Learn about providing liquidity":"Learn about providing liquidity","Learn more":"Learn more","Legal & Privacy":"Legal & Privacy","Light Theme":"Light Theme","Liquidity":"Liquidity","Liquidity data not available.":"Liquidity data not available.","Liquidity provider rewards":"Liquidity provider rewards","Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.":"Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.","Lists":"Lists","Loaded":"Loaded","Loading":"Loading","MAX":"MAX","Manage":"Manage","Manage Liquidity in Rewards Pool":"Manage Liquidity in Rewards Pool","Manage Token Lists":"Manage Token Lists","Manage this pool.":"Manage this pool.","Max":"Max","Max Price":"Max Price","Max price":"Max price","Max slippage":"Max slippage","Max:":"Max:","Maximum sent":"Maximum sent","Menu":"Menu","Migrate":"Migrate","Migrate Liquidity to V3":"Migrate Liquidity to V3","Migrate V2 Liquidity":"Migrate V2 Liquidity","Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.":"Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.","Migrate {0}/{1} liquidity to V3":["Migrate ",["0"],"/",["1"]," liquidity to V3"],"Migrating":"Migrating","Min Price":"Min Price","Min price":"Min price","Min:":"Min:","Minimum received":"Minimum received","Missing dependencies":"Missing dependencies","Mock Toggle":"Mock Toggle","More":"More","Network Fee":"Network Fee","Network Warning":"Network Warning","Network fees exceed 50% of the swap amount!":"Network fees exceed 50% of the swap amount!","New Position":"New Position","No V2 Liquidity found.":"No V2 Liquidity found.","No active pools":"No active pools","No data":"No data","No description.":"No description.","No liquidity found.":"No liquidity found.","No pool found.":"No pool found.","No proposals found.":"No proposals found.","No results found.":"No results found.","Not created":"Not created","OFF":"OFF","ON":"ON","ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.":"ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.","Off":"Off","On":"On","Once you are happy with the rate click supply to review.":"Once you are happy with the rate click supply to review.","Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.":["Only UNI votes that were self delegated or delegated to another address before block ",["0"]," are eligible for voting."],"Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.":"Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.","Optimism Gateway":"Optimism Gateway","Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.":"Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.","Optimistic Etherscan":"Optimistic Etherscan","Out of range":"Out of range","Output is estimated.":"Output is estimated.","Output is estimated. If the price changes by more than {0}% your transaction will revert.":["Output is estimated. If the price changes by more than ",["0"],"% your transaction will revert."],"Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.":["Output is estimated. You will receive at least <0>",["0"]," ",["1"]," or the transaction will revert."],"Output will be sent to <0>{0}":["Output will be sent to <0>",["0"],""],"Owner":"Owner","Participating pools":"Participating pools","Pending":"Pending","Please confirm you would like to remove this list by typing REMOVE":"Please confirm you would like to remove this list by typing REMOVE","Please connect to Layer 1 Ethereum":"Please connect to Layer 1 Ethereum","Please connect to a supported network in the dropdown menu or in your wallet.":"Please connect to a supported network in the dropdown menu or in your wallet.","Please type the word \"{confirmWord}\" to enable expert mode.":["Please type the word \"",["confirmWord"],"\" to enable expert mode."],"Polygon Bridge":"Polygon Bridge","Polygonscan":"Polygonscan","Pool":"Pool","Pool Found!":"Pool Found!","Pool Rate":"Pool Rate","Pool rate":"Pool rate","Pool tokens in rewards pool:":"Pool tokens in rewards pool:","Pooled {0}:":["Pooled ",["0"],":"],"Pools Overview":"Pools Overview","Preview":"Preview","Price":"Price","Price Difference:":"Price Difference:","Price Impact":"Price Impact","Price Impact Too High":"Price Impact Too High","Price Updated":"Price Updated","Price impact":"Price impact","Price range":"Price range","Price updated":"Price updated","Price:":"Price:","Prices and pool share":"Prices and pool share","Proposal":"Proposal","Proposal Submitted":"Proposal Submitted","Proposal Title":"Proposal Title","Proposals":"Proposals","Proposals submitted by community members will appear here.":"Proposals submitted by community members will appear here.","Proposed Action":"Proposed Action","Proposer":"Proposer","Protocol Disclaimer":"Protocol Disclaimer","Queued":"Queued","Rates":"Rates","Read more about UNI":"Read more about UNI","Read more about Uniswap governance":"Read more about Uniswap governance","Read more about providing liquidity":"Read more about providing liquidity","Read more about unsupported assets":"Read more about unsupported assets","Recent Transactions":"Recent Transactions","Recent transactions":"Recent transactions","Recipient":"Recipient","Reload the page":"Reload the page","Remove":"Remove","Remove <0/> and <1/>":"Remove <0/> and <1/>","Remove Amount":"Remove Amount","Remove Delegate":"Remove Delegate","Remove Liquidity":"Remove Liquidity","Remove list":"Remove list","Removing {0} {1} and {2} {3}":["Removing ",["0"]," ",["1"]," and ",["2"]," ",["3"]],"Removing {0} {1} and{2} {3}":["Removing ",["0"]," ",["1"]," and",["2"]," ",["3"]],"Request Features":"Request Features","Reset":"Reset","Return":"Return","Review swap":"Review swap","Search by token name or address":"Search by token name or address","Search name or paste address":"Search name or paste address","Select Pair":"Select Pair","Select a network":"Select a network","Select a token":"Select a token","Select a token to find your v2 liquidity.":"Select a token to find your v2 liquidity.","Select an action":"Select an action","Selected Range":"Selected Range","Self":"Self","Self Delegate":"Self Delegate","Set Price Range":"Set Price Range","Set Starting Price":"Set Starting Price","Settings":"Settings","Share of Pool":"Share of Pool","Share of Pool:":"Share of Pool:","Show Portis":"Show Portis","Show closed positions":"Show closed positions","Simple":"Simple","Slippage tolerance":"Slippage tolerance","Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.":"Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.","Something went wrong":"Something went wrong","Something went wrong.":"Something went wrong.","Step 1. Get UNI-V2 Liquidity tokens":"Step 1. Get UNI-V2 Liquidity tokens","Submit new proposal":"Submit new proposal","Submitting Proposal":"Submitting Proposal","Submitting Vote":"Submitting Vote","Succeeded":"Succeeded","Success":"Success","Supply":"Supply","Supplying {0} {1} and {2} {3}":["Supplying ",["0"]," ",["1"]," and ",["2"]," ",["3"]],"Swap":"Swap","Swap <0/> for exactly <1/>":"Swap <0/> for exactly <1/>","Swap Anyway":"Swap Anyway","Swap details":"Swap details","Swap exactly <0/> for <1/>":"Swap exactly <0/> for <1/>","Swap failed: {0}":["Swap failed: ",["0"]],"Swap summary":"Swap summary","Swapping {0} {1} for {2} {3}":["Swapping ",["0"]," ",["1"]," for ",["2"]," ",["3"]],"Take a 10 minute survey to help us improve your experience in the Uniswap app.":"Take a 10 minute survey to help us improve your experience in the Uniswap app.","Tell us what you think ↗":"Tell us what you think ↗","Thanks for being part of the Uniswap community <0/>":"Thanks for being part of the Uniswap community <0/>","The % you will earn in fees.":"The % you will earn in fees.","The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.":"The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.","The app fetches blockchain data from The Graph’s hosted service.":"The app fetches blockchain data from The Graph’s hosted service.","The app fetches on-chain data and constructs contract calls with an Infura API.":"The app fetches on-chain data and constructs contract calls with an Infura API.","The app fetches the optimal trade route from a Uniswap Labs server.":"The app fetches the optimal trade route from a Uniswap Labs server.","The app logs anonymized usage statistics in order to improve over time.":"The app logs anonymized usage statistics in order to improve over time.","The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.":"The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.","The cost of sending this transaction is more than half of the value of the input amount.":"The cost of sending this transaction is more than half of the value of the input amount.","The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.":"The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.","The estimated difference between the USD values of input and output amounts.":"The estimated difference between the USD values of input and output amounts.","The input token cannot be transferred. There may be an issue with the input token.":"The input token cannot be transferred. There may be an issue with the input token.","The market price is outside your specified price range. Single-asset deposit only.":"The market price is outside your specified price range. Single-asset deposit only.","The most recent block number on this network. Prices update on every block.":"The most recent block number on this network. Prices update on every block.","The output token cannot be transferred. There may be an issue with the output token.":"The output token cannot be transferred. There may be an issue with the output token.","The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.":"The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.","The price of this pool is outside of your selected range. Your position is not currently earning fees.":"The price of this pool is outside of your selected range. Your position is not currently earning fees.","The price of this pool is within your selected range. Your position is currently earning fees.":"The price of this pool is within your selected range. Your position is currently earning fees.","The ratio of tokens you add will set the price of this pool.":"The ratio of tokens you add will set the price of this pool.","The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.":"The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.","There is no liquidity data.":"There is no liquidity data.","This app uses the following third-party APIs:":"This app uses the following third-party APIs:","This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.":"This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.","This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.":"This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.","This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.":"This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.","This token is not supported in the Uniswap Labs app":"This token is not supported in the Uniswap Labs app","This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the":["This tool will safely migrate your ",["0"]," liquidity to V3. The process is completely trustless thanks to the"],"This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.":"This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.","This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.":"This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.","Tip: Custom tokens are stored locally in your browser":"Tip: Custom tokens are stored locally in your browser","To":"To","To (at least)":"To (at least)","Token not supported":"Token not supported","Tokens":"Tokens","Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.":"Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.","Top pools":"Top pools","Total deposited":"Total deposited","Total deposits":"Total deposits","Trade Route":"Trade Route","Trading":"Trading","Transaction Settings":"Transaction Settings","Transaction Submitted":"Transaction Submitted","Transaction completed in":"Transaction completed in","Transaction deadline":"Transaction deadline","Transaction pending":"Transaction pending","Transaction rejected.":"Transaction rejected.","Transaction submitted":"Transaction submitted","Transfer Token":"Transfer Token","Try Again":"Try Again","Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.":"Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.","Turn On Expert Mode":"Turn On Expert Mode","UNI has arrived":"UNI has arrived","UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.":"UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.","UNI {0}/{1} Burned":["UNI ",["0"],"/",["1"]," Burned"],"UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.":["UNI-V2 LP tokens are required. Once you've added liquidity to the ",["0"],"-",["1"]," pool you can stake your liquidity tokens on this page."],"UNI-V2 {0}-{1}":["UNI-V2 ",["0"],"-",["1"]],"Unclaimed UNI":"Unclaimed UNI","Unclaimed fees":"Unclaimed fees","Undetermined":"Undetermined","Unexpected error. Could not estimate gas for the swap.":"Unexpected error. Could not estimate gas for the swap.","Unexpected issue with estimating the gas. Please try again.":"Unexpected issue with estimating the gas. Please try again.","Uniswap Governance":"Uniswap Governance","Uniswap Labs' Terms of Service":"Uniswap Labs' Terms of Service","Uniswap available in: <0>{0}":["Uniswap available in: <0>",["0"],""],"Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.":"Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.","Uniswap liquidity mining":"Uniswap liquidity mining","Uniswap migration contract↗":"Uniswap migration contract↗","Unknown Source":"Unknown Source","Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.":["Unknown error",["0"],". Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3."],"Unlock Votes":"Unlock Votes","Unlock Voting":"Unlock Voting","Unlocking Votes":"Unlocking Votes","Unsupported Asset":"Unsupported Asset","Unsupported Assets":"Unsupported Assets","Unsupported network–switch to another to trade.":"Unsupported network–switch to another to trade.","Untitled":"Untitled","Unwrap":"Unwrap","Unwrap <0/> to {0}":["Unwrap <0/> to ",["0"]],"Update Delegation":"Update Delegation","Update list":"Update list","Use the Uniswap Labs API to get faster quotes.":"Use the Uniswap Labs API to get faster quotes.","User":"User","V2 is not available on Layer 2. Switch to Layer 1 Ethereum.":"V2 is not available on Layer 2. Switch to Layer 1 Ethereum.","V2 liquidity":"V2 liquidity","V3 {0} Price:":["V3 ",["0"]," Price:"],"View accrued fees and analytics<0>↗":"View accrued fees and analytics<0>↗","View list":"View list","View on Etherscan":"View on Etherscan","View on Explorer":"View on Explorer","View transaction on Explorer":"View transaction on Explorer","Vote":"Vote","Vote Against":"Vote Against","Vote For":"Vote For","Vote against proposal {proposalId}":["Vote against proposal ",["proposalId"]],"Vote against proposal {proposalKey}":["Vote against proposal ",["proposalKey"]],"Vote against proposal {proposalKey} with reason \"{0}\"":["Vote against proposal ",["proposalKey"]," with reason \"",["0"],"\""],"Vote for proposal {proposalId}":["Vote for proposal ",["proposalId"]],"Vote for proposal {proposalKey}":["Vote for proposal ",["proposalKey"]],"Vote for proposal {proposalKey} with reason \"{0}\"":["Vote for proposal ",["proposalKey"]," with reason \"",["0"],"\""],"Vote to abstain on proposal {proposalId}":["Vote to abstain on proposal ",["proposalId"]],"Vote to abstain on proposal {proposalKey}":["Vote to abstain on proposal ",["proposalKey"]],"Vote to abstain on proposal {proposalKey} with reason \"{0}\"":["Vote to abstain on proposal ",["proposalKey"]," with reason \"",["0"],"\""],"Voting ended {0}":["Voting ended ",["0"]],"Voting ends approximately {0}":["Voting ends approximately ",["0"]],"Voting starts approximately {0}":["Voting starts approximately ",["0"]],"Waiting For Confirmation":"Waiting For Confirmation","Wallet Address or ENS name":"Wallet Address or ENS name","Weekly Rewards":"Weekly Rewards","Welcome to team Unicorn :)":"Welcome to team Unicorn :)","When you claim without withdrawing your liquidity remains in the mining pool.":"When you claim without withdrawing your liquidity remains in the mining pool.","When you withdraw, the contract will automagically claim UNI on your behalf!":"When you withdraw, the contract will automagically claim UNI on your behalf!","When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.":"When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.","Withdraw":"Withdraw","Withdraw & Claim":"Withdraw & Claim","Withdraw deposited liquidity":"Withdraw deposited liquidity","Withdrawing {0} UNI-V2":["Withdrawing ",["0"]," UNI-V2"],"Withdrew UNI-V2!":"Withdrew UNI-V2!","Wrap":"Wrap","Wrap <0/> to {0}":["Wrap <0/> to ",["0"]],"Wrong Network":"Wrong Network","You already have an active or pending proposal":"You already have an active or pending proposal","You are creating a pool":"You are creating a pool","You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.":["You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current ",["0"]," price."],"You are the first liquidity provider.":"You are the first liquidity provider.","You can either vote on each proposal yourself or delegate your votes to a third party.":"You can either vote on each proposal yourself or delegate your votes to a third party.","You can now trade {0}":["You can now trade ",["0"]],"You don't have enough votes to submit a proposal":"You don't have enough votes to submit a proposal","You don’t have liquidity in this pool yet.":"You don’t have liquidity in this pool yet.","You may have lost your network connection, or {label} might be down right now.":["You may have lost your network connection, or ",["label"]," might be down right now."],"You may have lost your network connection.":"You may have lost your network connection.","You might consider waiting until the network fees go down to complete this transaction.":"You might consider waiting until the network fees go down to complete this transaction.","You must connect an account.":"You must connect an account.","You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.":["You must give the Uniswap smart contracts permission to use your ",["0"],". You only have to do this once per token."],"You must have {formattedProposalThreshold} votes to submit a proposal":["You must have ",["formattedProposalThreshold"]," votes to submit a proposal"],"You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.":"You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.","You will also collect fees earned from this position.":"You will also collect fees earned from this position.","You will receive":"You will receive","You will receive at least {0} {1} or the transaction will revert.":["You will receive at least ",["0"]," ",["1"]," or the transaction will revert."],"You will send at most {0} {1} or the transaction will revert.":["You will send at most ",["0"]," ",["1"]," or the transaction will revert."],"Your V2 liquidity":"Your V2 liquidity","Your active V3 liquidity positions will appear here.":"Your active V3 liquidity positions will appear here.","Your liquidity deposits":"Your liquidity deposits","Your pool share:":"Your pool share:","Your position":"Your position","Your position has 0 liquidity, and is not earning fees.":"Your position has 0 liquidity, and is not earning fees.","Your position will appear here.":"Your position will appear here.","Your position will be 100% composed of {0} at this price":["Your position will be 100% composed of ",["0"]," at this price"],"Your position will be 100% {0} at this price.":["Your position will be 100% ",["0"]," at this price."],"Your position will not earn fees or be used in trades until the market price moves into your range.":"Your position will not earn fees or be used in trades until the market price moves into your range.","Your positions":"Your positions","Your rate":"Your rate","Your total pool tokens:":"Your total pool tokens:","Your transaction cost will be much higher as it includes the gas to create the pool.":"Your transaction cost will be much higher as it includes the gas to create the pool.","Your transaction may be frontrun":"Your transaction may be frontrun","Your transaction may fail":"Your transaction may fail","Your transaction will revert if it has been pending for longer than this period of time.":"Your transaction will revert if it has been pending for longer than this period of time.","Your transaction will revert if it is pending for more than this period of time.":"Your transaction will revert if it is pending for more than this period of time.","Your transaction will revert if the price changes unfavorably by more than this percentage.":"Your transaction will revert if the price changes unfavorably by more than this percentage.","Your transactions will appear here...":"Your transactions will appear here...","Your unclaimed UNI":"Your unclaimed UNI","after slippage":"after slippage","confirm":"confirm","for {0}":["for ",["0"]],"gwei":"gwei","has socks emoji":"has socks emoji","here.":"here.","https:// or ipfs:// or ENS name":"https:// or ipfs:// or ENS name","minutes":"minutes","via {0}":["via ",["0"]],"via {0} token list":["via ",["0"]," token list"],"{0, plural, one {Import token} other {Import tokens}}":[["0","plural",{one:"Import token",other:"Import tokens"}]],"{0}":[["0"]],"{0} %":[["0"]," %"],"{0} <0/> per <1/>":[["0"]," <0/> per <1/>"],"{0} Custom Tokens":[["0"]," Custom Tokens"],"{0} Deposited":[["0"]," Deposited"],"{0} ETH":[["0"]," ETH"],"{0} Fees Earned:":[["0"]," Fees Earned:"],"{0} Pending":[["0"]," Pending"],"{0} UNI":[["0"]," UNI"],"{0} UNI / week":[["0"]," UNI / week"],"{0} UNI-V2":[["0"]," UNI-V2"],"{0} UNI-V2 LP tokens available":[["0"]," UNI-V2 LP tokens available"],"{0} Votes":[["0"]," Votes"],"{0} per {1}":[["0"]," per ",["1"]],"{0} tokens":[["0"]," tokens"],"{0} {1} Price:":[["0"]," ",["1"]," Price:"],"{0} {nativeCurrencySymbol}":[["0"]," ",["nativeCurrencySymbol"]],"{0} • Added by user":[["0"]," • Added by user"],"{0}%":[["0"],"%"],"{0}% fee tier":[["0"],"% fee tier"],"{0}% pool":[["0"],"% pool"],"{0}% select":[["0"],"% select"],"{0}-{1} Liquidity Mining":[["0"],"-",["1"]," Liquidity Mining"],"{0}/{1} LP NFT":[["0"],"/",["1"]," LP NFT"],"{0}/{1} LP Tokens":[["0"],"/",["1"]," LP Tokens"],"{SOCKS_AMOUNT} UNI":[["SOCKS_AMOUNT"]," UNI"],"{USER_AMOUNT} UNI":[["USER_AMOUNT"]," UNI"],"{activeTokensOnThisChain} tokens":[["activeTokensOnThisChain"]," tokens"],"{integrator} fee":[["integrator"]," fee"],"{label} token bridge":[["label"]," token bridge"],"{min}m {sec}s":[["min"],"m ",["sec"],"s"],"{percentForSlider}%":[["percentForSlider"],"%"],"{sec}s":[["sec"],"s"],"{tokenB} per {tokenA}":[["tokenB"]," per ",["tokenA"]],"← Back to Pools Overview":"← Back to Pools Overview"}}; + +var enUS$1 = /*#__PURE__*/Object.freeze(/*#__PURE__*/_mergeNamespaces({ + __proto__: null, + 'default': enUS +}, [enUS])); + var SUPPORTED_LOCALES = [ // order as they appear in the language dropdown 'en-US', @@ -13101,6 +13725,7 @@ var SUPPORTED_LOCALES = [ 'zh-TW', ]; var DEFAULT_LOCALE = 'en-US'; +var DEFAULT_CATALOG = enUS$1; var LOCALE_LABEL = { 'af-ZA': 'Afrikaans', 'ar-SA': 'العربية', @@ -13169,16 +13794,16 @@ var burnV3 = toolkit.createReducer(initialState$6, function (builder) { }); }); -var _a$4; +var _a$5; // List of supported subgraphs. Note that the app currently only support one active subgraph at a time -var CHAIN_SUBGRAPH_URL = (_a$4 = {}, - _a$4[SupportedChainId.MAINNET] = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3', - _a$4[SupportedChainId.RINKEBY] = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3', - _a$4[SupportedChainId.ARBITRUM_ONE] = 'https://api.thegraph.com/subgraphs/name/ianlapham/arbitrum-minimal', - _a$4[SupportedChainId.OPTIMISM] = 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-optimism-dev', - _a$4[SupportedChainId.POLYGON] = 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-v3-polygon', - _a$4); -var api = react.createApi({ +var CHAIN_SUBGRAPH_URL = (_a$5 = {}, + _a$5[SupportedChainId.MAINNET] = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3', + _a$5[SupportedChainId.RINKEBY] = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3', + _a$5[SupportedChainId.ARBITRUM_ONE] = 'https://api.thegraph.com/subgraphs/name/ianlapham/arbitrum-minimal', + _a$5[SupportedChainId.OPTIMISM] = 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-optimism-dev', + _a$5[SupportedChainId.POLYGON] = 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-v3-polygon', + _a$5); +var api$1 = react.createApi({ reducerPath: 'dataApi', baseQuery: graphqlRequestBaseQuery(), endpoints: function (builder) { return ({ @@ -13198,7 +13823,7 @@ var api = react.createApi({ query: function (_a) { var token0 = _a.token0, token1 = _a.token1; return ({ - document: graphqlRequest.gql(templateObject_2$1 || (templateObject_2$1 = __makeTemplateObject(["\n query feeTierDistribution($token0: String!, $token1: String!) {\n _meta {\n block {\n number\n }\n }\n asToken0: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token0, token1: $token1 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n asToken1: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token1, token1: $token0 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n }\n "], ["\n query feeTierDistribution($token0: String!, $token1: String!) {\n _meta {\n block {\n number\n }\n }\n asToken0: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token0, token1: $token1 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n asToken1: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token1, token1: $token0 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n }\n "]))), + document: graphqlRequest.gql(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n query feeTierDistribution($token0: String!, $token1: String!) {\n _meta {\n block {\n number\n }\n }\n asToken0: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token0, token1: $token1 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n asToken1: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token1, token1: $token0 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n }\n "], ["\n query feeTierDistribution($token0: String!, $token1: String!) {\n _meta {\n block {\n number\n }\n }\n asToken0: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token0, token1: $token1 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n asToken1: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token1, token1: $token0 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n }\n "]))), variables: { token0: token0, token1: token1, @@ -13248,7 +13873,7 @@ function graphqlRequestBaseQuery() { }); }; } -var templateObject_1$6, templateObject_2$1; +var templateObject_1$6, templateObject_2; // fired once when the app reloads but before the app renders // allows any updates to be applied to store data loaded from localStorage @@ -13412,9 +14037,29 @@ var lists = toolkit.createReducer(initialState$5, function (builder) { function filterToKey(filter) { var _a, _b, _c, _d; return ((_a = filter.address) !== null && _a !== void 0 ? _a : '') + ":" + ((_d = (_c = (_b = filter.topics) === null || _b === void 0 ? void 0 : _b.map(function (topic) { return (topic ? (Array.isArray(topic) ? topic.join(';') : topic) : '\0'); })) === null || _c === void 0 ? void 0 : _c.join('-')) !== null && _d !== void 0 ? _d : ''); +} +/** + * Convert a filter key to the corresponding filter + * @param key key to convert + */ +function keyToFilter(key) { + var pcs = key.split(':'); + var address = pcs[0]; + var topics = pcs[1].split('-').map(function (topic) { + if (topic === '\0') + return null; + var parts = topic.split(';'); + if (parts.length === 1) + return parts[0]; + return parts; + }); + return { + address: address.length === 0 ? undefined : address, + topics: topics, + }; } -var _a$3; +var _a$4; var slice = toolkit.createSlice({ name: 'logs', initialState: {}, @@ -13488,7 +14133,7 @@ var slice = toolkit.createSlice({ }, }); var logs = slice.reducer; -(_a$3 = slice.actions, _a$3.addListener); _a$3.removeListener; _a$3.fetchedLogs; _a$3.fetchedLogsError; _a$3.fetchingLogs; +(_a$4 = slice.actions, _a$4.addListener); _a$4.removeListener; var fetchedLogs = _a$4.fetchedLogs, fetchedLogsError = _a$4.fetchedLogsError, fetchingLogs = _a$4.fetchingLogs; var Field$2; (function (Field) { @@ -14367,10 +15012,10 @@ var user = toolkit.createReducer(initialState, function (builder) { }); }); -var _a$2; +var _a$3; var PERSISTED_KEYS = ['user', 'transactions', 'lists']; var store = toolkit.configureStore({ - reducer: (_a$2 = { + reducer: (_a$3 = { application: application, user: user, transactions: transactions, @@ -14383,12 +15028,12 @@ var store = toolkit.configureStore({ lists: lists, logs: logs }, - _a$2[api.reducerPath] = api.reducer, - _a$2[routingApi.reducerPath] = routingApi.reducer, - _a$2), + _a$3[api$1.reducerPath] = api$1.reducer, + _a$3[routingApi.reducerPath] = routingApi.reducer, + _a$3), middleware: function (getDefaultMiddleware) { return getDefaultMiddleware({ thunk: true }) - .concat(api.middleware) + .concat(api$1.middleware) .concat(routingApi.middleware) .concat(reduxLocalstorageSimple.save({ states: PERSISTED_KEYS, debounce: 1000 })); }, @@ -14397,7 +15042,7 @@ var store = toolkit.configureStore({ store.dispatch(updateVersion()); react.setupListeners(store.dispatch); -var _a$1, _b$1, _c$1; +var _a$2, _b$1, _c$1; /** * Given a locale string (e.g. from user agent), return the best match for corresponding SupportedLocale * @param maybeSupportedLocale the fuzzy locale identifier @@ -14425,7 +15070,7 @@ function storeLocale() { var _a; return (_a = store.getState().user.userLocale) !== null && _a !== void 0 ? _a : undefined; } -(_c$1 = (_b$1 = (_a$1 = parseLocale(parsedQueryString().lng)) !== null && _a$1 !== void 0 ? _a$1 : storeLocale()) !== null && _b$1 !== void 0 ? _b$1 : navigatorLocale()) !== null && _c$1 !== void 0 ? _c$1 : DEFAULT_LOCALE; +var initialLocale = (_c$1 = (_b$1 = (_a$2 = parseLocale(parsedQueryString().lng)) !== null && _a$2 !== void 0 ? _a$2 : storeLocale()) !== null && _b$1 !== void 0 ? _b$1 : navigatorLocale()) !== null && _c$1 !== void 0 ? _c$1 : DEFAULT_LOCALE; function useUrlLocale() { var parsed = useParsedQueryString(); return parseLocale(parsed.lng); @@ -14707,648 +15352,219 @@ function useApprovalOptimizedTrade(trade, allowedSlippage) { function useApproveCallbackFromTrade(trade, allowedSlippage) { var _a = __read(useSwapApproval(trade, allowedSlippage, useHasPendingApproval), 2), approval = _a[0], getApproval = _a[1]; return [approval, useGetAndTrackApproval(getApproval)]; -} - -function useIsArgentWallet() { - var _a, _b; - var account = useActiveWeb3React().account; - var argentWalletDetector = useArgentWalletDetectorContract(); - var inputs = React.useMemo(function () { return [account !== null && account !== void 0 ? account : undefined]; }, [account]); - var call = useSingleCallResult(argentWalletDetector, 'isArgentWallet', inputs, reduxMulticall.NEVER_RELOAD); - return (_b = (_a = call === null || call === void 0 ? void 0 : call.result) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : false; -} - -// combines the block timestamp with the user setting to give the deadline that should be used for any submitted transaction -function useTransactionDeadline() { - var chainId = useActiveWeb3React().chainId; - var ttl = useAppSelector(function (state) { return state.user.userDeadline; }); - var blockTimestamp = useCurrentBlockTimestamp(); - return React.useMemo(function () { - if (blockTimestamp && chainId && L2_CHAIN_IDS.includes(chainId)) - return blockTimestamp.add(L2_DEADLINE_FROM_NOW); - if (blockTimestamp && ttl) - return blockTimestamp.add(ttl); - return undefined; - }, [blockTimestamp, chainId, ttl]); -} - -var _a, _b, _c, _d, _e; -var PermitType; -(function (PermitType) { - PermitType[PermitType["AMOUNT"] = 1] = "AMOUNT"; - PermitType[PermitType["ALLOWED"] = 2] = "ALLOWED"; -})(PermitType || (PermitType = {})); -// 20 minutes to submit after signing -var PERMIT_VALIDITY_BUFFER = 20 * 60; -// todo: read this information from extensions on token lists or elsewhere (permit registry?) -var PERMITTABLE_TOKENS = { - 1: (_a = {}, - _a[USDC.address] = { type: PermitType.AMOUNT, name: 'USD Coin', version: '2' }, - _a[DAI.address] = { type: PermitType.ALLOWED, name: 'Dai Stablecoin', version: '1' }, - _a[UNI[1].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }, - _a), - 4: (_b = { - '0xc7AD46e0b8a400Bb3C915120d284AafbA8fc4735': { type: PermitType.ALLOWED, name: 'Dai Stablecoin', version: '1' } - }, - _b[UNI[4].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }, - _b), - 3: (_c = {}, - _c[UNI[3].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }, - _c['0x07865c6E87B9F70255377e024ace6630C1Eaa37F'] = { type: PermitType.AMOUNT, name: 'USD Coin', version: '2' }, - _c), - 5: (_d = {}, - _d[UNI[5].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }, - _d), - 42: (_e = {}, - _e[UNI[42].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }, - _e), -}; -var UseERC20PermitState; -(function (UseERC20PermitState) { - // returned for any reason, e.g. it is an argent wallet, or the currency does not support it - UseERC20PermitState[UseERC20PermitState["NOT_APPLICABLE"] = 0] = "NOT_APPLICABLE"; - UseERC20PermitState[UseERC20PermitState["LOADING"] = 1] = "LOADING"; - UseERC20PermitState[UseERC20PermitState["NOT_SIGNED"] = 2] = "NOT_SIGNED"; - UseERC20PermitState[UseERC20PermitState["SIGNED"] = 3] = "SIGNED"; -})(UseERC20PermitState || (UseERC20PermitState = {})); -var EIP712_DOMAIN_TYPE = [ - { name: 'name', type: 'string' }, - { name: 'version', type: 'string' }, - { name: 'chainId', type: 'uint256' }, - { name: 'verifyingContract', type: 'address' }, -]; -var EIP712_DOMAIN_TYPE_NO_VERSION = [ - { name: 'name', type: 'string' }, - { name: 'chainId', type: 'uint256' }, - { name: 'verifyingContract', type: 'address' }, -]; -var EIP2612_TYPE = [ - { name: 'owner', type: 'address' }, - { name: 'spender', type: 'address' }, - { name: 'value', type: 'uint256' }, - { name: 'nonce', type: 'uint256' }, - { name: 'deadline', type: 'uint256' }, -]; -var PERMIT_ALLOWED_TYPE = [ - { name: 'holder', type: 'address' }, - { name: 'spender', type: 'address' }, - { name: 'nonce', type: 'uint256' }, - { name: 'expiry', type: 'uint256' }, - { name: 'allowed', type: 'bool' }, -]; -function useERC20Permit(currencyAmount, spender, overridePermitInfo) { - var _a, _b; - var _c = useActiveWeb3React(), account = _c.account, chainId = _c.chainId, library = _c.library; - var transactionDeadline = useTransactionDeadline(); - var tokenAddress = ((_a = currencyAmount === null || currencyAmount === void 0 ? void 0 : currencyAmount.currency) === null || _a === void 0 ? void 0 : _a.isToken) ? currencyAmount.currency.address : undefined; - var eip2612Contract = useEIP2612Contract(tokenAddress); - var isArgentWallet = useIsArgentWallet(); - var nonceInputs = React.useMemo(function () { return [account !== null && account !== void 0 ? account : undefined]; }, [account]); - var tokenNonceState = useSingleCallResult(eip2612Contract, 'nonces', nonceInputs); - var permitInfo = overridePermitInfo !== null && overridePermitInfo !== void 0 ? overridePermitInfo : (chainId && tokenAddress ? (_b = PERMITTABLE_TOKENS[chainId]) === null || _b === void 0 ? void 0 : _b[tokenAddress] : undefined); - var _d = __read(React.useState(null), 2), signatureData = _d[0], setSignatureData = _d[1]; - return React.useMemo(function () { - var _a, _b; - if (isArgentWallet || - !currencyAmount || - !eip2612Contract || - !account || - !chainId || - !transactionDeadline || - !library || - !tokenNonceState.valid || - !tokenAddress || - !spender || - !permitInfo) { - return { - state: UseERC20PermitState.NOT_APPLICABLE, - signatureData: null, - gatherPermitSignature: null, - }; - } - var nonceNumber = (_b = (_a = tokenNonceState.result) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.toNumber(); - if (tokenNonceState.loading || typeof nonceNumber !== 'number') { - return { - state: UseERC20PermitState.LOADING, - signatureData: null, - gatherPermitSignature: null, - }; - } - var isSignatureDataValid = signatureData && - signatureData.owner === account && - signatureData.deadline >= transactionDeadline.toNumber() && - signatureData.tokenAddress === tokenAddress && - signatureData.nonce === nonceNumber && - signatureData.spender === spender && - ('allowed' in signatureData || JSBI__default["default"].equal(JSBI__default["default"].BigInt(signatureData.amount), currencyAmount.quotient)); - return { - state: isSignatureDataValid ? UseERC20PermitState.SIGNED : UseERC20PermitState.NOT_SIGNED, - signatureData: isSignatureDataValid ? signatureData : null, - gatherPermitSignature: function gatherPermitSignature() { - return __awaiter(this, void 0, void 0, function () { - var allowed, signatureDeadline, value, message, domain, data; - return __generator(this, function (_a) { - allowed = permitInfo.type === PermitType.ALLOWED; - signatureDeadline = transactionDeadline.toNumber() + PERMIT_VALIDITY_BUFFER; - value = currencyAmount.quotient.toString(); - message = allowed - ? { - holder: account, - spender: spender, - allowed: allowed, - nonce: nonceNumber, - expiry: signatureDeadline, - } - : { - owner: account, - spender: spender, - value: value, - nonce: nonceNumber, - deadline: signatureDeadline, - }; - domain = permitInfo.version - ? { - name: permitInfo.name, - version: permitInfo.version, - verifyingContract: tokenAddress, - chainId: chainId, - } - : { - name: permitInfo.name, - verifyingContract: tokenAddress, - chainId: chainId, - }; - data = JSON.stringify({ - types: { - EIP712Domain: permitInfo.version ? EIP712_DOMAIN_TYPE : EIP712_DOMAIN_TYPE_NO_VERSION, - Permit: allowed ? PERMIT_ALLOWED_TYPE : EIP2612_TYPE, - }, - domain: domain, - primaryType: 'Permit', - message: message, - }); - return [2 /*return*/, library - .send('eth_signTypedData_v4', [account, data]) - .then(bytes.splitSignature) - .then(function (signature) { - setSignatureData(__assign(__assign({ v: signature.v, r: signature.r, s: signature.s, deadline: signatureDeadline }, (allowed ? { allowed: allowed } : { amount: value })), { nonce: nonceNumber, chainId: chainId, owner: account, spender: spender, tokenAddress: tokenAddress, permitType: permitInfo.type })); - })]; - }); - }); - }, - }; - }, [ - currencyAmount, - eip2612Contract, - account, - chainId, - isArgentWallet, - transactionDeadline, - library, - tokenNonceState.loading, - tokenNonceState.valid, - tokenNonceState.result, - tokenAddress, - spender, - permitInfo, - signatureData, - ]); -} -({ - version: '1', - name: 'Uniswap V2', - type: PermitType.AMOUNT, -}); -function useERC20PermitFromTrade(trade, allowedSlippage) { - var chainId = useActiveWeb3React().chainId; - var swapRouterAddress = chainId - ? // v2 router does not support - trade instanceof v2Sdk.Trade - ? undefined - : trade instanceof v3Sdk.Trade - ? V3_ROUTER_ADDRESS[chainId] - : SWAP_ROUTER_ADDRESSES[chainId] - : undefined; - var amountToApprove = React.useMemo(function () { return (trade ? trade.maximumAmountIn(allowedSlippage) : undefined); }, [trade, allowedSlippage]); - return useERC20Permit(amountToApprove, swapRouterAddress, null); -} - -/** - * Returns true if the input currency or output currency cannot be traded in the interface - * @param currencyIn the input currency to check - * @param currencyOut the output currency to check - */ -function useIsSwapUnsupported(currencyIn, currencyOut) { - var unsupportedTokens = useUnsupportedTokens(); - return React.useMemo(function () { - if (!unsupportedTokens) { - return false; - } - var currencyInUnsupported = Boolean((currencyIn === null || currencyIn === void 0 ? void 0 : currencyIn.isToken) && unsupportedTokens[currencyIn.address]); - var currencyOutUnsupported = Boolean((currencyOut === null || currencyOut === void 0 ? void 0 : currencyOut.isToken) && unsupportedTokens[currencyOut.address]); - return currencyInUnsupported || currencyOutUnsupported; - }, [currencyIn, currencyOut, unsupportedTokens]); -} - -var ERC20_INTERFACE = new abi$6.Interface([ - { - constant: false, - inputs: [ - { name: '_spender', type: 'address' }, - { name: '_value', type: 'uint256' }, - ], - name: 'approve', - outputs: [{ name: '', type: 'bool' }], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, -]); -function approveAmountCalldata(amount, spender) { - if (!amount.currency.isToken) - throw new Error('Must call with an amount of token'); - var approveData = ERC20_INTERFACE.encodeFunctionData('approve', [spender, v3Sdk.toHex(amount.quotient)]); - return { - to: amount.currency.address, - data: approveData, - value: '0x0', - }; -} - -var ArgentWalletContractABI = [ - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "value", - type: "uint256" - }, - { - internalType: "bytes", - name: "data", - type: "bytes" - } - ], - name: "_transactions", - type: "tuple[]" - } - ], - name: "wc_multiCall", - outputs: [ - { - internalType: "bytes[]", - name: "", - type: "bytes[]" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "bytes32", - name: "_msgHash", - type: "bytes32" - }, - { - internalType: "bytes", - name: "_signature", - type: "bytes" - } - ], - name: "isValidSignature", - outputs: [ - { - internalType: "bytes4", - name: "", - type: "bytes4" - } - ], - stateMutability: "view", - type: "function" - } -]; - -function useArgentWalletContract() { - var account = useActiveWeb3React().account; - var isArgentWallet = useIsArgentWallet(); - return useContract(isArgentWallet ? account !== null && account !== void 0 ? account : undefined : undefined, ArgentWalletContractABI, true); -} - -var SwapCallbackState; -(function (SwapCallbackState) { - SwapCallbackState[SwapCallbackState["INVALID"] = 0] = "INVALID"; - SwapCallbackState[SwapCallbackState["LOADING"] = 1] = "LOADING"; - SwapCallbackState[SwapCallbackState["VALID"] = 2] = "VALID"; -})(SwapCallbackState || (SwapCallbackState = {})); -/** - * Returns the swap calls that can be used to make the trade - * @param trade trade to execute - * @param allowedSlippage user allowed slippage - * @param recipientAddressOrName the ENS name or address of the recipient of the swap output - * @param signatureData the signature data of the permit of the input token amount, if available - */ -function useSwapCallArguments(trade, // trade to execute, required -allowedSlippage, // in bips -recipientAddressOrName, // the ENS name or address of the recipient of the trade, or null if swap should be returned to sender -signatureData) { - var _a = useActiveWeb3React(), account = _a.account, chainId = _a.chainId, library = _a.library; - var recipientAddress = useENS(recipientAddressOrName).address; - var recipient = recipientAddressOrName === null ? account : recipientAddress; - var deadline = useTransactionDeadline(); - var routerContract = useV2RouterContract(); - var argentWalletContract = useArgentWalletContract(); - return React.useMemo(function () { - if (!trade || !recipient || !library || !account || !chainId || !deadline) - return []; - if (trade instanceof v2Sdk.Trade) { - if (!routerContract) - return []; - var swapMethods = []; - swapMethods.push(v2Sdk.Router.swapCallParameters(trade, { - feeOnTransfer: false, - allowedSlippage: allowedSlippage, - recipient: recipient, - deadline: deadline.toNumber(), - })); - if (trade.tradeType === sdkCore.TradeType.EXACT_INPUT) { - swapMethods.push(v2Sdk.Router.swapCallParameters(trade, { - feeOnTransfer: true, - allowedSlippage: allowedSlippage, - recipient: recipient, - deadline: deadline.toNumber(), - })); - } - return swapMethods.map(function (_a) { - var methodName = _a.methodName, args = _a.args, value = _a.value; - if (argentWalletContract && trade.inputAmount.currency.isToken) { - return { - address: argentWalletContract.address, - calldata: argentWalletContract.interface.encodeFunctionData('wc_multiCall', [ - [ - approveAmountCalldata(trade.maximumAmountIn(allowedSlippage), routerContract.address), - { - to: routerContract.address, - value: value, - data: routerContract.interface.encodeFunctionData(methodName, args), - }, - ], - ]), - value: '0x0', - }; - } - else { - return { - address: routerContract.address, - calldata: routerContract.interface.encodeFunctionData(methodName, args), - value: value, - }; - } - }); - } - else { - // swap options shared by v3 and v2+v3 swap routers - var sharedSwapOptions = __assign({ recipient: recipient, slippageTolerance: allowedSlippage }, (signatureData - ? { - inputTokenPermit: 'allowed' in signatureData - ? { - expiry: signatureData.deadline, - nonce: signatureData.nonce, - s: signatureData.s, - r: signatureData.r, - v: signatureData.v, - } - : { - deadline: signatureData.deadline, - amount: signatureData.amount, - s: signatureData.s, - r: signatureData.r, - v: signatureData.v, - }, - } - : {})); - var swapRouterAddress = chainId - ? trade instanceof v3Sdk.Trade - ? V3_ROUTER_ADDRESS[chainId] - : SWAP_ROUTER_ADDRESSES[chainId] - : undefined; - if (!swapRouterAddress) - return []; - var _a = trade instanceof v3Sdk.Trade - ? v3Sdk.SwapRouter.swapCallParameters(trade, __assign(__assign({}, sharedSwapOptions), { deadline: deadline.toString() })) - : routerSdk.SwapRouter.swapCallParameters(trade, __assign(__assign({}, sharedSwapOptions), { deadlineOrPreviousBlockhash: deadline.toString() })), value = _a.value, calldata = _a.calldata; - if (argentWalletContract && trade.inputAmount.currency.isToken) { - return [ - { - address: argentWalletContract.address, - calldata: argentWalletContract.interface.encodeFunctionData('wc_multiCall', [ - [ - approveAmountCalldata(trade.maximumAmountIn(allowedSlippage), swapRouterAddress), - { - to: swapRouterAddress, - value: value, - data: calldata, - }, - ], - ]), - value: '0x0', - }, - ]; - } - return [ - { - address: swapRouterAddress, - calldata: calldata, - value: value, - }, - ]; - } - }, [ - trade, - recipient, - library, - account, - chainId, - deadline, - routerContract, - allowedSlippage, - argentWalletContract, - signatureData, - ]); -} -/** - * This is hacking out the revert reason from the ethers provider thrown error however it can. - * This object seems to be undocumented by ethers. - * @param error an error from the ethers provider - */ -function swapErrorToUserReadableMessage(error) { - var _a, _b, _c, _d; - var reason; - while (Boolean(error)) { - reason = (_b = (_a = error.reason) !== null && _a !== void 0 ? _a : error.message) !== null && _b !== void 0 ? _b : reason; - error = (_c = error.error) !== null && _c !== void 0 ? _c : (_d = error.data) === null || _d === void 0 ? void 0 : _d.originalError; - } - if ((reason === null || reason === void 0 ? void 0 : reason.indexOf('execution reverted: ')) === 0) - reason = reason.substr('execution reverted: '.length); - switch (reason) { - case 'UniswapV2Router: EXPIRED': - return (jsxRuntime.jsx(macro.Trans, { children: "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low." }, void 0)); - case 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT': - case 'UniswapV2Router: EXCESSIVE_INPUT_AMOUNT': - return (jsxRuntime.jsx(macro.Trans, { children: "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance." }, void 0)); - case 'TransferHelper: TRANSFER_FROM_FAILED': - return jsxRuntime.jsx(macro.Trans, { children: "The input token cannot be transferred. There may be an issue with the input token." }, void 0); - case 'UniswapV2: TRANSFER_FAILED': - return jsxRuntime.jsx(macro.Trans, { children: "The output token cannot be transferred. There may be an issue with the output token." }, void 0); - case 'UniswapV2: K': - return (jsxRuntime.jsx(macro.Trans, { children: "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer." }, void 0)); - case 'Too little received': - case 'Too much requested': - case 'STF': - return (jsxRuntime.jsx(macro.Trans, { children: "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3." }, void 0)); - case 'TF': - return (jsxRuntime.jsx(macro.Trans, { children: "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3." }, void 0)); - default: - if ((reason === null || reason === void 0 ? void 0 : reason.indexOf('undefined is not an object')) !== -1) { - console.error(error, reason); - return (jsxRuntime.jsx(macro.Trans, { children: "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3." }, void 0)); - } - return (jsxRuntime.jsxs(macro.Trans, { children: ["Unknown error", reason ? ": \"" + reason + "\"" : '', ". Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3."] }, void 0)); - } -} -// returns a function that will execute a swap, if the parameters are all valid -// and the user has approved the slippage adjusted input amount for the trade -function useSwapCallback(trade, // trade to execute, required -allowedSlippage, // in bips -recipientAddressOrName, // the ENS name or address of the recipient of the trade, or null if swap should be returned to sender -signatureData) { - var _a = useActiveWeb3React(), account = _a.account, chainId = _a.chainId, library = _a.library; - var swapCalls = useSwapCallArguments(trade, allowedSlippage, recipientAddressOrName, signatureData); - var addTransaction = useTransactionAdder(); - var recipientAddress = useENS(recipientAddressOrName).address; - var recipient = recipientAddressOrName === null ? account : recipientAddress; +} + +var _a$1, _b, _c, _d, _e; +var PermitType; +(function (PermitType) { + PermitType[PermitType["AMOUNT"] = 1] = "AMOUNT"; + PermitType[PermitType["ALLOWED"] = 2] = "ALLOWED"; +})(PermitType || (PermitType = {})); +// 20 minutes to submit after signing +var PERMIT_VALIDITY_BUFFER = 20 * 60; +// todo: read this information from extensions on token lists or elsewhere (permit registry?) +var PERMITTABLE_TOKENS = { + 1: (_a$1 = {}, + _a$1[USDC.address] = { type: PermitType.AMOUNT, name: 'USD Coin', version: '2' }, + _a$1[DAI.address] = { type: PermitType.ALLOWED, name: 'Dai Stablecoin', version: '1' }, + _a$1[UNI[1].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }, + _a$1), + 4: (_b = { + '0xc7AD46e0b8a400Bb3C915120d284AafbA8fc4735': { type: PermitType.ALLOWED, name: 'Dai Stablecoin', version: '1' } + }, + _b[UNI[4].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }, + _b), + 3: (_c = {}, + _c[UNI[3].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }, + _c['0x07865c6E87B9F70255377e024ace6630C1Eaa37F'] = { type: PermitType.AMOUNT, name: 'USD Coin', version: '2' }, + _c), + 5: (_d = {}, + _d[UNI[5].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }, + _d), + 42: (_e = {}, + _e[UNI[42].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }, + _e), +}; +var UseERC20PermitState; +(function (UseERC20PermitState) { + // returned for any reason, e.g. it is an argent wallet, or the currency does not support it + UseERC20PermitState[UseERC20PermitState["NOT_APPLICABLE"] = 0] = "NOT_APPLICABLE"; + UseERC20PermitState[UseERC20PermitState["LOADING"] = 1] = "LOADING"; + UseERC20PermitState[UseERC20PermitState["NOT_SIGNED"] = 2] = "NOT_SIGNED"; + UseERC20PermitState[UseERC20PermitState["SIGNED"] = 3] = "SIGNED"; +})(UseERC20PermitState || (UseERC20PermitState = {})); +var EIP712_DOMAIN_TYPE = [ + { name: 'name', type: 'string' }, + { name: 'version', type: 'string' }, + { name: 'chainId', type: 'uint256' }, + { name: 'verifyingContract', type: 'address' }, +]; +var EIP712_DOMAIN_TYPE_NO_VERSION = [ + { name: 'name', type: 'string' }, + { name: 'chainId', type: 'uint256' }, + { name: 'verifyingContract', type: 'address' }, +]; +var EIP2612_TYPE = [ + { name: 'owner', type: 'address' }, + { name: 'spender', type: 'address' }, + { name: 'value', type: 'uint256' }, + { name: 'nonce', type: 'uint256' }, + { name: 'deadline', type: 'uint256' }, +]; +var PERMIT_ALLOWED_TYPE = [ + { name: 'holder', type: 'address' }, + { name: 'spender', type: 'address' }, + { name: 'nonce', type: 'uint256' }, + { name: 'expiry', type: 'uint256' }, + { name: 'allowed', type: 'bool' }, +]; +function useERC20Permit(currencyAmount, spender, transactionDeadline, overridePermitInfo) { + var _a, _b; + var _c = useActiveWeb3React(), account = _c.account, chainId = _c.chainId, library = _c.library; + var tokenAddress = ((_a = currencyAmount === null || currencyAmount === void 0 ? void 0 : currencyAmount.currency) === null || _a === void 0 ? void 0 : _a.isToken) ? currencyAmount.currency.address : undefined; + var eip2612Contract = useEIP2612Contract(tokenAddress); + var isArgentWallet = useIsArgentWallet(); + var nonceInputs = React.useMemo(function () { return [account !== null && account !== void 0 ? account : undefined]; }, [account]); + var tokenNonceState = useSingleCallResult(eip2612Contract, 'nonces', nonceInputs); + var permitInfo = overridePermitInfo !== null && overridePermitInfo !== void 0 ? overridePermitInfo : (chainId && tokenAddress ? (_b = PERMITTABLE_TOKENS[chainId]) === null || _b === void 0 ? void 0 : _b[tokenAddress] : undefined); + var _d = __read(React.useState(null), 2), signatureData = _d[0], setSignatureData = _d[1]; return React.useMemo(function () { - if (!trade || !library || !account || !chainId) { - return { state: SwapCallbackState.INVALID, callback: null, error: jsxRuntime.jsx(macro.Trans, { children: "Missing dependencies" }, void 0) }; + var _a, _b; + if (isArgentWallet || + !currencyAmount || + !eip2612Contract || + !account || + !chainId || + !transactionDeadline || + !library || + !tokenNonceState.valid || + !tokenAddress || + !spender || + !permitInfo) { + return { + state: UseERC20PermitState.NOT_APPLICABLE, + signatureData: null, + gatherPermitSignature: null, + }; } - if (!recipient) { - if (recipientAddressOrName !== null) { - return { state: SwapCallbackState.INVALID, callback: null, error: jsxRuntime.jsx(macro.Trans, { children: "Invalid recipient" }, void 0) }; - } - else { - return { state: SwapCallbackState.LOADING, callback: null, error: null }; - } + var nonceNumber = (_b = (_a = tokenNonceState.result) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.toNumber(); + if (tokenNonceState.loading || typeof nonceNumber !== 'number') { + return { + state: UseERC20PermitState.LOADING, + signatureData: null, + gatherPermitSignature: null, + }; } + var isSignatureDataValid = signatureData && + signatureData.owner === account && + signatureData.deadline >= transactionDeadline.toNumber() && + signatureData.tokenAddress === tokenAddress && + signatureData.nonce === nonceNumber && + signatureData.spender === spender && + ('allowed' in signatureData || JSBI__default["default"].equal(JSBI__default["default"].BigInt(signatureData.amount), currencyAmount.quotient)); return { - state: SwapCallbackState.VALID, - callback: function onSwap() { + state: isSignatureDataValid ? UseERC20PermitState.SIGNED : UseERC20PermitState.NOT_SIGNED, + signatureData: isSignatureDataValid ? signatureData : null, + gatherPermitSignature: function gatherPermitSignature() { return __awaiter(this, void 0, void 0, function () { - var estimatedCalls, bestCallOption, errorCalls, firstNoErrorCall, _a, address, calldata, value; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, Promise.all(swapCalls.map(function (call) { - var address = call.address, calldata = call.calldata, value = call.value; - var tx = !value || isZero(value) - ? { from: account, to: address, data: calldata } - : { - from: account, - to: address, - data: calldata, - value: value, - }; - return library - .estimateGas(tx) - .then(function (gasEstimate) { - return { - call: call, - gasEstimate: gasEstimate, - }; - }) - .catch(function (gasError) { - console.debug('Gas estimate failed, trying eth_call to extract error', call); - return library - .call(tx) - .then(function (result) { - console.debug('Unexpected successful call after failed estimate gas', call, gasError, result); - return { call: call, error: jsxRuntime.jsx(macro.Trans, { children: "Unexpected issue with estimating the gas. Please try again." }, void 0) }; - }) - .catch(function (callError) { - console.debug('Call threw error', call, callError); - return { call: call, error: swapErrorToUserReadableMessage(callError) }; - }); - }); - })) - // a successful estimation is a bignumber gas estimate and the next call is also a bignumber gas estimate - ]; - case 1: - estimatedCalls = _b.sent(); - bestCallOption = estimatedCalls.find(function (el, ix, list) { - return 'gasEstimate' in el && (ix === list.length - 1 || 'gasEstimate' in list[ix + 1]); - }); - // check if any calls errored with a recognizable error - if (!bestCallOption) { - errorCalls = estimatedCalls.filter(function (call) { return 'error' in call; }); - if (errorCalls.length > 0) - throw errorCalls[errorCalls.length - 1].error; - firstNoErrorCall = estimatedCalls.find(function (call) { return !('error' in call); }); - if (!firstNoErrorCall) - throw new Error(macro.t(templateObject_1$2 || (templateObject_1$2 = __makeTemplateObject(["Unexpected error. Could not estimate gas for the swap."], ["Unexpected error. Could not estimate gas for the swap."])))); - bestCallOption = firstNoErrorCall; - } - _a = bestCallOption.call, address = _a.address, calldata = _a.calldata, value = _a.value; - return [2 /*return*/, library - .getSigner() - .sendTransaction(__assign(__assign({ from: account, to: address, data: calldata }, ('gasEstimate' in bestCallOption ? { gasLimit: calculateGasMargin(bestCallOption.gasEstimate) } : {})), (value && !isZero(value) ? { value: value } : {}))) - .then(function (response) { - addTransaction(response, trade.tradeType === sdkCore.TradeType.EXACT_INPUT - ? { - type: TransactionType.SWAP, - tradeType: sdkCore.TradeType.EXACT_INPUT, - inputCurrencyId: currencyId(trade.inputAmount.currency), - inputCurrencyAmountRaw: trade.inputAmount.quotient.toString(), - expectedOutputCurrencyAmountRaw: trade.outputAmount.quotient.toString(), - outputCurrencyId: currencyId(trade.outputAmount.currency), - minimumOutputCurrencyAmountRaw: trade.minimumAmountOut(allowedSlippage).quotient.toString(), - } - : { - type: TransactionType.SWAP, - tradeType: sdkCore.TradeType.EXACT_OUTPUT, - inputCurrencyId: currencyId(trade.inputAmount.currency), - maximumInputCurrencyAmountRaw: trade.maximumAmountIn(allowedSlippage).quotient.toString(), - outputCurrencyId: currencyId(trade.outputAmount.currency), - outputCurrencyAmountRaw: trade.outputAmount.quotient.toString(), - expectedInputCurrencyAmountRaw: trade.inputAmount.quotient.toString(), - }); - return response.hash; - }) - .catch(function (error) { - // if the user rejected the tx, pass this along - if ((error === null || error === void 0 ? void 0 : error.code) === 4001) { - throw new Error(macro.t(templateObject_2 || (templateObject_2 = __makeTemplateObject(["Transaction rejected."], ["Transaction rejected."])))); - } - else { - // otherwise, the error was unexpected and we need to convey that - console.error("Swap failed", error, address, calldata, value); - throw new Error(macro.t(templateObject_3 || (templateObject_3 = __makeTemplateObject(["Swap failed: ", ""], ["Swap failed: ", ""])), swapErrorToUserReadableMessage(error))); - } - })]; - } + var allowed, signatureDeadline, value, message, domain, data; + return __generator(this, function (_a) { + allowed = permitInfo.type === PermitType.ALLOWED; + signatureDeadline = transactionDeadline.toNumber() + PERMIT_VALIDITY_BUFFER; + value = currencyAmount.quotient.toString(); + message = allowed + ? { + holder: account, + spender: spender, + allowed: allowed, + nonce: nonceNumber, + expiry: signatureDeadline, + } + : { + owner: account, + spender: spender, + value: value, + nonce: nonceNumber, + deadline: signatureDeadline, + }; + domain = permitInfo.version + ? { + name: permitInfo.name, + version: permitInfo.version, + verifyingContract: tokenAddress, + chainId: chainId, + } + : { + name: permitInfo.name, + verifyingContract: tokenAddress, + chainId: chainId, + }; + data = JSON.stringify({ + types: { + EIP712Domain: permitInfo.version ? EIP712_DOMAIN_TYPE : EIP712_DOMAIN_TYPE_NO_VERSION, + Permit: allowed ? PERMIT_ALLOWED_TYPE : EIP2612_TYPE, + }, + domain: domain, + primaryType: 'Permit', + message: message, + }); + return [2 /*return*/, library + .send('eth_signTypedData_v4', [account, data]) + .then(bytes.splitSignature) + .then(function (signature) { + setSignatureData(__assign(__assign({ v: signature.v, r: signature.r, s: signature.s, deadline: signatureDeadline }, (allowed ? { allowed: allowed } : { amount: value })), { nonce: nonceNumber, chainId: chainId, owner: account, spender: spender, tokenAddress: tokenAddress, permitType: permitInfo.type })); + })]; }); }); }, - error: null, }; - }, [trade, library, account, chainId, recipient, recipientAddressOrName, swapCalls, addTransaction, allowedSlippage]); + }, [ + currencyAmount, + eip2612Contract, + account, + chainId, + isArgentWallet, + transactionDeadline, + library, + tokenNonceState.loading, + tokenNonceState.valid, + tokenNonceState.result, + tokenAddress, + spender, + permitInfo, + signatureData, + ]); } -var templateObject_1$2, templateObject_2, templateObject_3; +function useERC20PermitFromTrade(trade, allowedSlippage, transactionDeadline) { + var chainId = useActiveWeb3React().chainId; + var swapRouterAddress = chainId + ? // v2 router does not support + trade instanceof v2Sdk.Trade + ? undefined + : trade instanceof v3Sdk.Trade + ? V3_ROUTER_ADDRESS[chainId] + : SWAP_ROUTER_ADDRESSES[chainId] + : undefined; + var amountToApprove = React.useMemo(function () { return (trade ? trade.maximumAmountIn(allowedSlippage) : undefined); }, [trade, allowedSlippage]); + return useERC20Permit(amountToApprove, swapRouterAddress, transactionDeadline, null); +} + +/** + * Returns true if the input currency or output currency cannot be traded in the interface + * @param currencyIn the input currency to check + * @param currencyOut the output currency to check + */ +function useIsSwapUnsupported(currencyIn, currencyOut) { + var unsupportedTokens = useUnsupportedTokens(); + return React.useMemo(function () { + if (!unsupportedTokens) { + return false; + } + var currencyInUnsupported = Boolean((currencyIn === null || currencyIn === void 0 ? void 0 : currencyIn.isToken) && unsupportedTokens[currencyIn.address]); + var currencyOutUnsupported = Boolean((currencyOut === null || currencyOut === void 0 ? void 0 : currencyOut.isToken) && unsupportedTokens[currencyOut.address]); + return currencyInUnsupported || currencyOutUnsupported; + }, [currencyIn, currencyOut, unsupportedTokens]); +} var WrapType; (function (WrapType) { @@ -15501,7 +15717,7 @@ function maxAmountSpend(currencyAmount) { return currencyAmount; } -var BodyWrapper = styled__default["default"].main(templateObject_1$1 || (templateObject_1$1 = __makeTemplateObject(["\n position: relative;\n margin-top: ", ";\n max-width: ", ";\n width: 100%;\n background: ", ";\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 border-radius: 24px;\n margin-top: 1rem;\n margin-left: auto;\n margin-right: auto;\n z-index: ", ";\n"], ["\n position: relative;\n margin-top: ", ";\n max-width: ", ";\n width: 100%;\n background: ", ";\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 border-radius: 24px;\n margin-top: 1rem;\n margin-left: auto;\n margin-right: auto;\n z-index: ", ";\n" +var BodyWrapper = styled__default["default"].main(templateObject_1$2 || (templateObject_1$2 = __makeTemplateObject(["\n position: relative;\n margin-top: ", ";\n max-width: ", ";\n width: 100%;\n background: ", ";\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 border-radius: 24px;\n margin-top: 1rem;\n margin-left: auto;\n margin-right: auto;\n z-index: ", ";\n"], ["\n position: relative;\n margin-top: ", ";\n max-width: ", ";\n width: 100%;\n background: ", ";\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 border-radius: 24px;\n margin-top: 1rem;\n margin-left: auto;\n margin-right: auto;\n z-index: ", ";\n" /** * The styled container element that wraps the content of most pages and the tabs. */ @@ -15522,9 +15738,9 @@ function AppBody(_a) { var children = _a.children, rest = __rest(_a, ["children"]); return jsxRuntime.jsx(BodyWrapper, __assign({}, rest, { children: children }), void 0); } -var templateObject_1$1; +var templateObject_1$2; -var AlertWrapper = styled__default["default"].div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n max-width: 460px;\n width: 100%;\n"], ["\n max-width: 460px;\n width: 100%;\n"]))); +var AlertWrapper = styled__default["default"].div(templateObject_1$1 || (templateObject_1$1 = __makeTemplateObject(["\n max-width: 460px;\n width: 100%;\n"], ["\n max-width: 460px;\n width: 100%;\n"]))); function Swap(_a) { var _this = this; var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l; @@ -15616,7 +15832,8 @@ function Swap(_a) { : 'SwapRouter'; // check whether the user has approved the router on the input token var _y = __read(useApproveCallbackFromTrade(approvalOptimizedTrade, allowedSlippage), 2), approvalState = _y[0], approveCallback = _y[1]; - var _z = useERC20PermitFromTrade(approvalOptimizedTrade, allowedSlippage), signatureState = _z.state, signatureData = _z.signatureData, gatherPermitSignature = _z.gatherPermitSignature; + var transactionDeadline = useTransactionDeadline(); + var _z = useERC20PermitFromTrade(approvalOptimizedTrade, allowedSlippage, transactionDeadline), signatureState = _z.state, signatureData = _z.signatureData, gatherPermitSignature = _z.gatherPermitSignature; var handleApprove = React.useCallback(function () { return __awaiter(_this, void 0, void 0, function () { var error_1; var _a; @@ -15801,8 +16018,1126 @@ function Swap(_a) { } }, id: "swap-button", disabled: !isValid || routeIsSyncing || routeIsLoading || priceImpactTooHigh || !!swapCallbackError, error: isValid && priceImpactSeverity > 2 && !swapCallbackError }, { children: jsxRuntime.jsx(rebass.Text, __assign({ fontSize: 20, fontWeight: 500 }, { children: swapInputError ? (swapInputError) : routeIsSyncing || routeIsLoading ? (jsxRuntime.jsx(macro.Trans, { children: "Swap" }, void 0)) : priceImpactSeverity > 2 ? (jsxRuntime.jsx(macro.Trans, { children: "Swap Anyway" }, void 0)) : priceImpactTooHigh ? (jsxRuntime.jsx(macro.Trans, { children: "Price Impact Too High" }, void 0)) : (jsxRuntime.jsx(macro.Trans, { children: "Swap" }, void 0)) }), void 0) }), void 0)), isExpertMode && swapErrorMessage ? jsxRuntime.jsx(SwapCallbackError, { error: swapErrorMessage }, void 0) : null] }, void 0)] }), void 0)] }), void 0)] }, void 0), jsxRuntime.jsx(AlertWrapper, { children: jsxRuntime.jsx(NetworkAlert, {}, void 0) }, void 0), jsxRuntime.jsx(SwitchLocaleLink, {}, void 0), !swapIsUnsupported ? null : (jsxRuntime.jsx(UnsupportedCurrencyFooter, { show: swapIsUnsupported, currencies: [currencies[Field.INPUT], currencies[Field.OUTPUT]] }, void 0))] }, void 0)); } +var templateObject_1$1; + +// This optional code is used to register a service worker. +// register() is not called by default. +// This lets the app load faster on subsequent visits in production, and gives +// it offline capabilities. However, it also means that developers (and users) +// will only see deployed updates on subsequent visits to a page, after all the +// existing tabs open on the page have been closed, since previously cached +// resources are updated in the background. +// To learn more about the benefits of this model and instructions on how to +// opt-in, read https://cra.link/PWA +var isLocalhost = Boolean(window.location.hostname === 'localhost' || + // [::1] is the IPv6 localhost address. + window.location.hostname === '[::1]' || + // 127.0.0.0/8 are considered localhost for IPv4. + window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)); +function registerValidSW(swUrl, config) { + navigator.serviceWorker + .register(swUrl) + .then(function (registration) { + registration.onupdatefound = function () { + var installingWorker = registration.installing; + if (installingWorker == null) { + return; + } + installingWorker.onstatechange = function () { + if (installingWorker.state === 'installed') { + if (navigator.serviceWorker.controller) { + // At this point, the updated precached content has been fetched, + // but the previous service worker will still serve the older + // content until all client tabs are closed. + console.log('New content is available and will be used when all ' + + 'tabs for this page are closed. See https://cra.link/PWA.'); + // Execute callback + if (config && config.onUpdate) { + config.onUpdate(registration); + } + } + else { + // At this point, everything has been precached. + // It's the perfect time to display a + // "Content is cached for offline use." message. + console.log('Content is cached for offline use.'); + // Execute callback + if (config && config.onSuccess) { + config.onSuccess(registration); + } + } + } + }; + }; + }) + .catch(function (error) { + console.error('Error during service worker registration:', error); + }); +} +function checkValidServiceWorker(swUrl, config) { + // Check if the service worker can be found. If it can't reload the page. + fetch(swUrl, { + headers: { 'Service-Worker': 'script' }, + }) + .then(function (response) { + // Ensure service worker exists, and that we really are getting a JS file. + var contentType = response.headers.get('content-type'); + if (response.status === 404 || (contentType != null && contentType.indexOf('javascript') === -1)) { + // No service worker found. Probably a different app. Reload the page. + navigator.serviceWorker.ready.then(function (registration) { + registration.unregister().then(function () { + window.location.reload(); + }); + }); + } + else { + // Service worker found. Proceed as normal. + registerValidSW(swUrl, config); + } + }) + .catch(function () { + console.log('No internet connection found. App is running in offline mode.'); + }); +} +function register(config) { + if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { + // The URL constructor is available in all browsers that support SW. + var publicUrl = new URL(process.env.PUBLIC_URL, window.location.href); + if (publicUrl.origin !== window.location.origin) { + // Our service worker won't work if PUBLIC_URL is on a different origin + // from what our page is served on. This might happen if a CDN is used to + // serve assets; see https://github.com/facebook/create-react-app/issues/2374 + return; + } + window.addEventListener('load', function () { + var swUrl = process.env.PUBLIC_URL + "/service-worker.js"; + if (isLocalhost) { + // This is running on localhost. Let's check if a service worker still exists or not. + checkValidServiceWorker(swUrl, config); + // Add some additional logging to localhost, pointing developers to the + // service worker/PWA documentation. + navigator.serviceWorker.ready.then(function () { + console.log('This web app is being served cache-first by a service ' + + 'worker. To learn more, visit https://cra.link/PWA'); + }); + } + else { + // Is not localhost. Just register service worker + registerValidSW(swUrl, config); + } + }); + } +} +function unregister() { + if ('serviceWorker' in navigator) { + navigator.serviceWorker.ready + .then(function (registration) { + registration.unregister(); + }) + .catch(function (error) { + console.error(error.message); + }); + } +} + +var serviceWorkerRegistration = /*#__PURE__*/Object.freeze({ + __proto__: null, + register: register, + unregister: unregister +}); + +// SDN OFAC addresses +var BLOCKED_ADDRESSES = [ + '0x7Db418b5D567A4e0E8c59Ad71BE1FcE48f3E6107', + '0x72a5843cc08275C8171E582972Aa4fDa8C397B2A', + '0x7F19720A857F834887FC9A7bC0a0fBe7Fc7f8102', + '0xA7e5d5A720f06526557c513402f2e6B5fA20b008', + '0x1da5821544e25c636c1417Ba96Ade4Cf6D2f9B5A', + '0x9F4cda013E354b8fC285BF4b9A60460cEe7f7Ea9', + '0x19Aa5Fe80D33a56D56c78e82eA5E50E5d80b4Dff', + '0x2f389cE8bD8ff92De3402FFCe4691d17fC4f6535', + '0xe7aa314c77F4233C18C6CC84384A9247c0cf367B', + '0x7F367cC41522cE07553e823bf3be79A889DEbe1B', + '0xd882cFc20F52f2599D84b8e8D58C7FB62cfE344b', + '0x901bb9583b24D97e995513C6778dc6888AB6870e', + '0x8576aCC5C05D6Ce88f4e49bf65BdF0C62F91353C', + '0xC8a65Fadf0e0dDAf421F28FEAb69Bf6E2E589963', + '0x308eD4B7b49797e1A98D3818bFF6fe5385410370', + '0x67d40EE1A85bf4a4Bb7Ffae16De985e8427B', + '0x6f1ca141a28907f78ebaa64fb83a9088b02a83', + '0x6acdfba02d390b97ac2b2d42a63e85293bcc1', + '0x48549a34ae37b12f6a30566245176994e17c6', + '0x5512d943ed1f7c8a43f3435c85f7ab68b30121', + '0xc455f7fd3e0e12afd51fba5c106909934d8a0e', + '0x3cbded43efdaf0fc77b9c55f6fc9988fcc9b757d', + '0x67d40EE1A85bf4a4Bb7Ffae16De985e8427B6b45', + '0x6f1ca141a28907f78ebaa64fb83a9088b02a8352', + '0x6acdfba02d390b97ac2b2d42a63e85293bcc160e', + '0x48549a34ae37b12f6a30566245176994e17c6b4a', + '0x5512d943ed1f7c8a43f3435c85f7ab68b30121b0', + '0xc455f7fd3e0e12afd51fba5c106909934d8a0e4a', +]; +function Blocklist(_a) { + var children = _a.children; + var account = useActiveWeb3React().account; + var blocked = React.useMemo(function () { return Boolean(account && BLOCKED_ADDRESSES.indexOf(account) !== -1); }, [account]); + if (blocked) { + return (jsxRuntime.jsx("div", { children: jsxRuntime.jsx(macro.Trans, { children: "Blocked address" }, void 0) }, void 0)); + } + return jsxRuntime.jsx(jsxRuntime.Fragment, { children: children }, void 0); +} + +var plurals = { + 'af-ZA': plurals$1.af, + 'ar-SA': plurals$1.ar, + 'ca-ES': plurals$1.ca, + 'cs-CZ': plurals$1.cs, + 'da-DK': plurals$1.da, + 'de-DE': plurals$1.de, + 'el-GR': plurals$1.el, + 'en-US': plurals$1.en, + 'es-ES': plurals$1.es, + 'fi-FI': plurals$1.fi, + 'fr-FR': plurals$1.fr, + 'he-IL': plurals$1.he, + 'hu-HU': plurals$1.hu, + 'id-ID': plurals$1.id, + 'it-IT': plurals$1.it, + 'ja-JP': plurals$1.ja, + 'ko-KR': plurals$1.ko, + 'nl-NL': plurals$1.nl, + 'no-NO': plurals$1.no, + 'pl-PL': plurals$1.pl, + 'pt-BR': plurals$1.pt, + 'pt-PT': plurals$1.pt, + 'ro-RO': plurals$1.ro, + 'ru-RU': plurals$1.ru, + 'sr-SP': plurals$1.sr, + 'sv-SE': plurals$1.sv, + 'sw-TZ': plurals$1.sw, + 'tr-TR': plurals$1.tr, + 'uk-UA': plurals$1.uk, + 'vi-VN': plurals$1.vi, + 'zh-CN': plurals$1.zh, + 'zh-TW': plurals$1.zh, + pseudo: plurals$1.en, +}; +function dynamicActivate(locale) { + return __awaiter(this, void 0, void 0, function () { + var catalog, _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + core$2.i18n.loadLocaleData(locale, { plurals: function () { return plurals[locale]; } }); + if (!(locale === DEFAULT_LOCALE)) return [3 /*break*/, 1]; + _a = DEFAULT_CATALOG; + return [3 /*break*/, 3]; + case 1: return [4 /*yield*/, (function (t) { return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require(t)); }); })("locales/" + locale)]; + case 2: + _a = _b.sent(); + _b.label = 3; + case 3: + catalog = _a; + core$2.i18n.load(locale, catalog.messages); + core$2.i18n.activate(locale); + return [2 /*return*/]; + } + }); + }); +} +function Provider(_a) { + var locale = _a.locale, _b = _a.forceRenderAfterLocaleChange, forceRenderAfterLocaleChange = _b === void 0 ? true : _b, onActivate = _a.onActivate, children = _a.children; + React.useEffect(function () { + dynamicActivate(locale) + .then(function () { return onActivate === null || onActivate === void 0 ? void 0 : onActivate(locale); }) + .catch(function (error) { + console.error('Failed to activate locale', locale, error); + }); + }, [locale, onActivate]); + return (jsxRuntime.jsx(react$1.I18nProvider, __assign({ forceRenderOnLocaleChange: forceRenderAfterLocaleChange, i18n: core$2.i18n }, { children: children }), void 0)); +} + +dynamicActivate(initialLocale); +function LanguageProvider(_a) { + var children = _a.children; + var locale = useActiveLocale(); + var _b = __read(useUserLocaleManager(), 2), setUserLocale = _b[1]; + var onActivate = React.useCallback(function (locale) { + document.documentElement.setAttribute('lang', locale); + setUserLocale(locale); // stores the selected locale to persist across sessions + }, [setUserLocale]); + return (jsxRuntime.jsx(Provider, __assign({ locale: locale, forceRenderAfterLocaleChange: false, onActivate: onActivate }, { children: children }), void 0)); +} + +var Bundle_OrderBy; +(function (Bundle_OrderBy) { + Bundle_OrderBy["Id"] = "id"; + Bundle_OrderBy["EthPriceUsd"] = "ethPriceUSD"; +})(Bundle_OrderBy || (Bundle_OrderBy = {})); +var Burn_OrderBy; +(function (Burn_OrderBy) { + Burn_OrderBy["Id"] = "id"; + Burn_OrderBy["Transaction"] = "transaction"; + Burn_OrderBy["Pool"] = "pool"; + Burn_OrderBy["Token0"] = "token0"; + Burn_OrderBy["Token1"] = "token1"; + Burn_OrderBy["Timestamp"] = "timestamp"; + Burn_OrderBy["Owner"] = "owner"; + Burn_OrderBy["Origin"] = "origin"; + Burn_OrderBy["Amount"] = "amount"; + Burn_OrderBy["Amount0"] = "amount0"; + Burn_OrderBy["Amount1"] = "amount1"; + Burn_OrderBy["AmountUsd"] = "amountUSD"; + Burn_OrderBy["TickLower"] = "tickLower"; + Burn_OrderBy["TickUpper"] = "tickUpper"; + Burn_OrderBy["LogIndex"] = "logIndex"; +})(Burn_OrderBy || (Burn_OrderBy = {})); +var Collect_OrderBy; +(function (Collect_OrderBy) { + Collect_OrderBy["Id"] = "id"; + Collect_OrderBy["Transaction"] = "transaction"; + Collect_OrderBy["Timestamp"] = "timestamp"; + Collect_OrderBy["Pool"] = "pool"; + Collect_OrderBy["Owner"] = "owner"; + Collect_OrderBy["Amount0"] = "amount0"; + Collect_OrderBy["Amount1"] = "amount1"; + Collect_OrderBy["AmountUsd"] = "amountUSD"; + Collect_OrderBy["TickLower"] = "tickLower"; + Collect_OrderBy["TickUpper"] = "tickUpper"; + Collect_OrderBy["LogIndex"] = "logIndex"; +})(Collect_OrderBy || (Collect_OrderBy = {})); +var Factory_OrderBy; +(function (Factory_OrderBy) { + Factory_OrderBy["Id"] = "id"; + Factory_OrderBy["PoolCount"] = "poolCount"; + Factory_OrderBy["TxCount"] = "txCount"; + Factory_OrderBy["TotalVolumeUsd"] = "totalVolumeUSD"; + Factory_OrderBy["TotalVolumeEth"] = "totalVolumeETH"; + Factory_OrderBy["TotalFeesUsd"] = "totalFeesUSD"; + Factory_OrderBy["TotalFeesEth"] = "totalFeesETH"; + Factory_OrderBy["UntrackedVolumeUsd"] = "untrackedVolumeUSD"; + Factory_OrderBy["TotalValueLockedUsd"] = "totalValueLockedUSD"; + Factory_OrderBy["TotalValueLockedEth"] = "totalValueLockedETH"; + Factory_OrderBy["TotalValueLockedUsdUntracked"] = "totalValueLockedUSDUntracked"; + Factory_OrderBy["TotalValueLockedEthUntracked"] = "totalValueLockedETHUntracked"; + Factory_OrderBy["Owner"] = "owner"; +})(Factory_OrderBy || (Factory_OrderBy = {})); +var Flash_OrderBy; +(function (Flash_OrderBy) { + Flash_OrderBy["Id"] = "id"; + Flash_OrderBy["Transaction"] = "transaction"; + Flash_OrderBy["Timestamp"] = "timestamp"; + Flash_OrderBy["Pool"] = "pool"; + Flash_OrderBy["Sender"] = "sender"; + Flash_OrderBy["Recipient"] = "recipient"; + Flash_OrderBy["Amount0"] = "amount0"; + Flash_OrderBy["Amount1"] = "amount1"; + Flash_OrderBy["AmountUsd"] = "amountUSD"; + Flash_OrderBy["Amount0Paid"] = "amount0Paid"; + Flash_OrderBy["Amount1Paid"] = "amount1Paid"; + Flash_OrderBy["LogIndex"] = "logIndex"; +})(Flash_OrderBy || (Flash_OrderBy = {})); +var Mint_OrderBy; +(function (Mint_OrderBy) { + Mint_OrderBy["Id"] = "id"; + Mint_OrderBy["Transaction"] = "transaction"; + Mint_OrderBy["Timestamp"] = "timestamp"; + Mint_OrderBy["Pool"] = "pool"; + Mint_OrderBy["Token0"] = "token0"; + Mint_OrderBy["Token1"] = "token1"; + Mint_OrderBy["Owner"] = "owner"; + Mint_OrderBy["Sender"] = "sender"; + Mint_OrderBy["Origin"] = "origin"; + Mint_OrderBy["Amount"] = "amount"; + Mint_OrderBy["Amount0"] = "amount0"; + Mint_OrderBy["Amount1"] = "amount1"; + Mint_OrderBy["AmountUsd"] = "amountUSD"; + Mint_OrderBy["TickLower"] = "tickLower"; + Mint_OrderBy["TickUpper"] = "tickUpper"; + Mint_OrderBy["LogIndex"] = "logIndex"; +})(Mint_OrderBy || (Mint_OrderBy = {})); +var OrderDirection; +(function (OrderDirection) { + OrderDirection["Asc"] = "asc"; + OrderDirection["Desc"] = "desc"; +})(OrderDirection || (OrderDirection = {})); +var PoolDayData_OrderBy; +(function (PoolDayData_OrderBy) { + PoolDayData_OrderBy["Id"] = "id"; + PoolDayData_OrderBy["Date"] = "date"; + PoolDayData_OrderBy["Pool"] = "pool"; + PoolDayData_OrderBy["Liquidity"] = "liquidity"; + PoolDayData_OrderBy["SqrtPrice"] = "sqrtPrice"; + PoolDayData_OrderBy["Token0Price"] = "token0Price"; + PoolDayData_OrderBy["Token1Price"] = "token1Price"; + PoolDayData_OrderBy["Tick"] = "tick"; + PoolDayData_OrderBy["FeeGrowthGlobal0X128"] = "feeGrowthGlobal0X128"; + PoolDayData_OrderBy["FeeGrowthGlobal1X128"] = "feeGrowthGlobal1X128"; + PoolDayData_OrderBy["TvlUsd"] = "tvlUSD"; + PoolDayData_OrderBy["VolumeToken0"] = "volumeToken0"; + PoolDayData_OrderBy["VolumeToken1"] = "volumeToken1"; + PoolDayData_OrderBy["VolumeUsd"] = "volumeUSD"; + PoolDayData_OrderBy["FeesUsd"] = "feesUSD"; + PoolDayData_OrderBy["TxCount"] = "txCount"; + PoolDayData_OrderBy["Open"] = "open"; + PoolDayData_OrderBy["High"] = "high"; + PoolDayData_OrderBy["Low"] = "low"; + PoolDayData_OrderBy["Close"] = "close"; +})(PoolDayData_OrderBy || (PoolDayData_OrderBy = {})); +var PoolHourData_OrderBy; +(function (PoolHourData_OrderBy) { + PoolHourData_OrderBy["Id"] = "id"; + PoolHourData_OrderBy["PeriodStartUnix"] = "periodStartUnix"; + PoolHourData_OrderBy["Pool"] = "pool"; + PoolHourData_OrderBy["Liquidity"] = "liquidity"; + PoolHourData_OrderBy["SqrtPrice"] = "sqrtPrice"; + PoolHourData_OrderBy["Token0Price"] = "token0Price"; + PoolHourData_OrderBy["Token1Price"] = "token1Price"; + PoolHourData_OrderBy["Tick"] = "tick"; + PoolHourData_OrderBy["FeeGrowthGlobal0X128"] = "feeGrowthGlobal0X128"; + PoolHourData_OrderBy["FeeGrowthGlobal1X128"] = "feeGrowthGlobal1X128"; + PoolHourData_OrderBy["TvlUsd"] = "tvlUSD"; + PoolHourData_OrderBy["VolumeToken0"] = "volumeToken0"; + PoolHourData_OrderBy["VolumeToken1"] = "volumeToken1"; + PoolHourData_OrderBy["VolumeUsd"] = "volumeUSD"; + PoolHourData_OrderBy["FeesUsd"] = "feesUSD"; + PoolHourData_OrderBy["TxCount"] = "txCount"; + PoolHourData_OrderBy["Open"] = "open"; + PoolHourData_OrderBy["High"] = "high"; + PoolHourData_OrderBy["Low"] = "low"; + PoolHourData_OrderBy["Close"] = "close"; +})(PoolHourData_OrderBy || (PoolHourData_OrderBy = {})); +var Pool_OrderBy; +(function (Pool_OrderBy) { + Pool_OrderBy["Id"] = "id"; + Pool_OrderBy["CreatedAtTimestamp"] = "createdAtTimestamp"; + Pool_OrderBy["CreatedAtBlockNumber"] = "createdAtBlockNumber"; + Pool_OrderBy["Token0"] = "token0"; + Pool_OrderBy["Token1"] = "token1"; + Pool_OrderBy["FeeTier"] = "feeTier"; + Pool_OrderBy["Liquidity"] = "liquidity"; + Pool_OrderBy["SqrtPrice"] = "sqrtPrice"; + Pool_OrderBy["FeeGrowthGlobal0X128"] = "feeGrowthGlobal0X128"; + Pool_OrderBy["FeeGrowthGlobal1X128"] = "feeGrowthGlobal1X128"; + Pool_OrderBy["Token0Price"] = "token0Price"; + Pool_OrderBy["Token1Price"] = "token1Price"; + Pool_OrderBy["Tick"] = "tick"; + Pool_OrderBy["ObservationIndex"] = "observationIndex"; + Pool_OrderBy["VolumeToken0"] = "volumeToken0"; + Pool_OrderBy["VolumeToken1"] = "volumeToken1"; + Pool_OrderBy["VolumeUsd"] = "volumeUSD"; + Pool_OrderBy["UntrackedVolumeUsd"] = "untrackedVolumeUSD"; + Pool_OrderBy["FeesUsd"] = "feesUSD"; + Pool_OrderBy["TxCount"] = "txCount"; + Pool_OrderBy["CollectedFeesToken0"] = "collectedFeesToken0"; + Pool_OrderBy["CollectedFeesToken1"] = "collectedFeesToken1"; + Pool_OrderBy["CollectedFeesUsd"] = "collectedFeesUSD"; + Pool_OrderBy["TotalValueLockedToken0"] = "totalValueLockedToken0"; + Pool_OrderBy["TotalValueLockedToken1"] = "totalValueLockedToken1"; + Pool_OrderBy["TotalValueLockedEth"] = "totalValueLockedETH"; + Pool_OrderBy["TotalValueLockedUsd"] = "totalValueLockedUSD"; + Pool_OrderBy["TotalValueLockedUsdUntracked"] = "totalValueLockedUSDUntracked"; + Pool_OrderBy["LiquidityProviderCount"] = "liquidityProviderCount"; + Pool_OrderBy["PoolHourData"] = "poolHourData"; + Pool_OrderBy["PoolDayData"] = "poolDayData"; + Pool_OrderBy["Mints"] = "mints"; + Pool_OrderBy["Burns"] = "burns"; + Pool_OrderBy["Swaps"] = "swaps"; + Pool_OrderBy["Collects"] = "collects"; + Pool_OrderBy["Ticks"] = "ticks"; +})(Pool_OrderBy || (Pool_OrderBy = {})); +var PositionSnapshot_OrderBy; +(function (PositionSnapshot_OrderBy) { + PositionSnapshot_OrderBy["Id"] = "id"; + PositionSnapshot_OrderBy["Owner"] = "owner"; + PositionSnapshot_OrderBy["Pool"] = "pool"; + PositionSnapshot_OrderBy["Position"] = "position"; + PositionSnapshot_OrderBy["BlockNumber"] = "blockNumber"; + PositionSnapshot_OrderBy["Timestamp"] = "timestamp"; + PositionSnapshot_OrderBy["Liquidity"] = "liquidity"; + PositionSnapshot_OrderBy["DepositedToken0"] = "depositedToken0"; + PositionSnapshot_OrderBy["DepositedToken1"] = "depositedToken1"; + PositionSnapshot_OrderBy["WithdrawnToken0"] = "withdrawnToken0"; + PositionSnapshot_OrderBy["WithdrawnToken1"] = "withdrawnToken1"; + PositionSnapshot_OrderBy["CollectedFeesToken0"] = "collectedFeesToken0"; + PositionSnapshot_OrderBy["CollectedFeesToken1"] = "collectedFeesToken1"; + PositionSnapshot_OrderBy["Transaction"] = "transaction"; + PositionSnapshot_OrderBy["FeeGrowthInside0LastX128"] = "feeGrowthInside0LastX128"; + PositionSnapshot_OrderBy["FeeGrowthInside1LastX128"] = "feeGrowthInside1LastX128"; +})(PositionSnapshot_OrderBy || (PositionSnapshot_OrderBy = {})); +var Position_OrderBy; +(function (Position_OrderBy) { + Position_OrderBy["Id"] = "id"; + Position_OrderBy["Owner"] = "owner"; + Position_OrderBy["Pool"] = "pool"; + Position_OrderBy["Token0"] = "token0"; + Position_OrderBy["Token1"] = "token1"; + Position_OrderBy["TickLower"] = "tickLower"; + Position_OrderBy["TickUpper"] = "tickUpper"; + Position_OrderBy["Liquidity"] = "liquidity"; + Position_OrderBy["DepositedToken0"] = "depositedToken0"; + Position_OrderBy["DepositedToken1"] = "depositedToken1"; + Position_OrderBy["WithdrawnToken0"] = "withdrawnToken0"; + Position_OrderBy["WithdrawnToken1"] = "withdrawnToken1"; + Position_OrderBy["CollectedFeesToken0"] = "collectedFeesToken0"; + Position_OrderBy["CollectedFeesToken1"] = "collectedFeesToken1"; + Position_OrderBy["Transaction"] = "transaction"; + Position_OrderBy["FeeGrowthInside0LastX128"] = "feeGrowthInside0LastX128"; + Position_OrderBy["FeeGrowthInside1LastX128"] = "feeGrowthInside1LastX128"; +})(Position_OrderBy || (Position_OrderBy = {})); +var Swap_OrderBy; +(function (Swap_OrderBy) { + Swap_OrderBy["Id"] = "id"; + Swap_OrderBy["Transaction"] = "transaction"; + Swap_OrderBy["Timestamp"] = "timestamp"; + Swap_OrderBy["Pool"] = "pool"; + Swap_OrderBy["Token0"] = "token0"; + Swap_OrderBy["Token1"] = "token1"; + Swap_OrderBy["Sender"] = "sender"; + Swap_OrderBy["Recipient"] = "recipient"; + Swap_OrderBy["Origin"] = "origin"; + Swap_OrderBy["Amount0"] = "amount0"; + Swap_OrderBy["Amount1"] = "amount1"; + Swap_OrderBy["AmountUsd"] = "amountUSD"; + Swap_OrderBy["SqrtPriceX96"] = "sqrtPriceX96"; + Swap_OrderBy["Tick"] = "tick"; + Swap_OrderBy["LogIndex"] = "logIndex"; +})(Swap_OrderBy || (Swap_OrderBy = {})); +var TickDayData_OrderBy; +(function (TickDayData_OrderBy) { + TickDayData_OrderBy["Id"] = "id"; + TickDayData_OrderBy["Date"] = "date"; + TickDayData_OrderBy["Pool"] = "pool"; + TickDayData_OrderBy["Tick"] = "tick"; + TickDayData_OrderBy["LiquidityGross"] = "liquidityGross"; + TickDayData_OrderBy["LiquidityNet"] = "liquidityNet"; + TickDayData_OrderBy["VolumeToken0"] = "volumeToken0"; + TickDayData_OrderBy["VolumeToken1"] = "volumeToken1"; + TickDayData_OrderBy["VolumeUsd"] = "volumeUSD"; + TickDayData_OrderBy["FeesUsd"] = "feesUSD"; + TickDayData_OrderBy["FeeGrowthOutside0X128"] = "feeGrowthOutside0X128"; + TickDayData_OrderBy["FeeGrowthOutside1X128"] = "feeGrowthOutside1X128"; +})(TickDayData_OrderBy || (TickDayData_OrderBy = {})); +var TickHourData_OrderBy; +(function (TickHourData_OrderBy) { + TickHourData_OrderBy["Id"] = "id"; + TickHourData_OrderBy["PeriodStartUnix"] = "periodStartUnix"; + TickHourData_OrderBy["Pool"] = "pool"; + TickHourData_OrderBy["Tick"] = "tick"; + TickHourData_OrderBy["LiquidityGross"] = "liquidityGross"; + TickHourData_OrderBy["LiquidityNet"] = "liquidityNet"; + TickHourData_OrderBy["VolumeToken0"] = "volumeToken0"; + TickHourData_OrderBy["VolumeToken1"] = "volumeToken1"; + TickHourData_OrderBy["VolumeUsd"] = "volumeUSD"; + TickHourData_OrderBy["FeesUsd"] = "feesUSD"; +})(TickHourData_OrderBy || (TickHourData_OrderBy = {})); +var Tick_OrderBy; +(function (Tick_OrderBy) { + Tick_OrderBy["Id"] = "id"; + Tick_OrderBy["PoolAddress"] = "poolAddress"; + Tick_OrderBy["TickIdx"] = "tickIdx"; + Tick_OrderBy["Pool"] = "pool"; + Tick_OrderBy["LiquidityGross"] = "liquidityGross"; + Tick_OrderBy["LiquidityNet"] = "liquidityNet"; + Tick_OrderBy["Price0"] = "price0"; + Tick_OrderBy["Price1"] = "price1"; + Tick_OrderBy["VolumeToken0"] = "volumeToken0"; + Tick_OrderBy["VolumeToken1"] = "volumeToken1"; + Tick_OrderBy["VolumeUsd"] = "volumeUSD"; + Tick_OrderBy["UntrackedVolumeUsd"] = "untrackedVolumeUSD"; + Tick_OrderBy["FeesUsd"] = "feesUSD"; + Tick_OrderBy["CollectedFeesToken0"] = "collectedFeesToken0"; + Tick_OrderBy["CollectedFeesToken1"] = "collectedFeesToken1"; + Tick_OrderBy["CollectedFeesUsd"] = "collectedFeesUSD"; + Tick_OrderBy["CreatedAtTimestamp"] = "createdAtTimestamp"; + Tick_OrderBy["CreatedAtBlockNumber"] = "createdAtBlockNumber"; + Tick_OrderBy["LiquidityProviderCount"] = "liquidityProviderCount"; + Tick_OrderBy["FeeGrowthOutside0X128"] = "feeGrowthOutside0X128"; + Tick_OrderBy["FeeGrowthOutside1X128"] = "feeGrowthOutside1X128"; +})(Tick_OrderBy || (Tick_OrderBy = {})); +var TokenDayData_OrderBy; +(function (TokenDayData_OrderBy) { + TokenDayData_OrderBy["Id"] = "id"; + TokenDayData_OrderBy["Date"] = "date"; + TokenDayData_OrderBy["Token"] = "token"; + TokenDayData_OrderBy["Volume"] = "volume"; + TokenDayData_OrderBy["VolumeUsd"] = "volumeUSD"; + TokenDayData_OrderBy["UntrackedVolumeUsd"] = "untrackedVolumeUSD"; + TokenDayData_OrderBy["TotalValueLocked"] = "totalValueLocked"; + TokenDayData_OrderBy["TotalValueLockedUsd"] = "totalValueLockedUSD"; + TokenDayData_OrderBy["PriceUsd"] = "priceUSD"; + TokenDayData_OrderBy["FeesUsd"] = "feesUSD"; + TokenDayData_OrderBy["Open"] = "open"; + TokenDayData_OrderBy["High"] = "high"; + TokenDayData_OrderBy["Low"] = "low"; + TokenDayData_OrderBy["Close"] = "close"; +})(TokenDayData_OrderBy || (TokenDayData_OrderBy = {})); +var TokenHourData_OrderBy; +(function (TokenHourData_OrderBy) { + TokenHourData_OrderBy["Id"] = "id"; + TokenHourData_OrderBy["PeriodStartUnix"] = "periodStartUnix"; + TokenHourData_OrderBy["Token"] = "token"; + TokenHourData_OrderBy["Volume"] = "volume"; + TokenHourData_OrderBy["VolumeUsd"] = "volumeUSD"; + TokenHourData_OrderBy["UntrackedVolumeUsd"] = "untrackedVolumeUSD"; + TokenHourData_OrderBy["TotalValueLocked"] = "totalValueLocked"; + TokenHourData_OrderBy["TotalValueLockedUsd"] = "totalValueLockedUSD"; + TokenHourData_OrderBy["PriceUsd"] = "priceUSD"; + TokenHourData_OrderBy["FeesUsd"] = "feesUSD"; + TokenHourData_OrderBy["Open"] = "open"; + TokenHourData_OrderBy["High"] = "high"; + TokenHourData_OrderBy["Low"] = "low"; + TokenHourData_OrderBy["Close"] = "close"; +})(TokenHourData_OrderBy || (TokenHourData_OrderBy = {})); +var Token_OrderBy; +(function (Token_OrderBy) { + Token_OrderBy["Id"] = "id"; + Token_OrderBy["Symbol"] = "symbol"; + Token_OrderBy["Name"] = "name"; + Token_OrderBy["Decimals"] = "decimals"; + Token_OrderBy["TotalSupply"] = "totalSupply"; + Token_OrderBy["Volume"] = "volume"; + Token_OrderBy["VolumeUsd"] = "volumeUSD"; + Token_OrderBy["UntrackedVolumeUsd"] = "untrackedVolumeUSD"; + Token_OrderBy["FeesUsd"] = "feesUSD"; + Token_OrderBy["TxCount"] = "txCount"; + Token_OrderBy["PoolCount"] = "poolCount"; + Token_OrderBy["TotalValueLocked"] = "totalValueLocked"; + Token_OrderBy["TotalValueLockedUsd"] = "totalValueLockedUSD"; + Token_OrderBy["TotalValueLockedUsdUntracked"] = "totalValueLockedUSDUntracked"; + Token_OrderBy["DerivedEth"] = "derivedETH"; + Token_OrderBy["WhitelistPools"] = "whitelistPools"; + Token_OrderBy["TokenDayData"] = "tokenDayData"; +})(Token_OrderBy || (Token_OrderBy = {})); +var Transaction_OrderBy; +(function (Transaction_OrderBy) { + Transaction_OrderBy["Id"] = "id"; + Transaction_OrderBy["BlockNumber"] = "blockNumber"; + Transaction_OrderBy["Timestamp"] = "timestamp"; + Transaction_OrderBy["GasUsed"] = "gasUsed"; + Transaction_OrderBy["GasPrice"] = "gasPrice"; + Transaction_OrderBy["Mints"] = "mints"; + Transaction_OrderBy["Burns"] = "burns"; + Transaction_OrderBy["Swaps"] = "swaps"; + Transaction_OrderBy["Flashed"] = "flashed"; + Transaction_OrderBy["Collects"] = "collects"; +})(Transaction_OrderBy || (Transaction_OrderBy = {})); +var UniswapDayData_OrderBy; +(function (UniswapDayData_OrderBy) { + UniswapDayData_OrderBy["Id"] = "id"; + UniswapDayData_OrderBy["Date"] = "date"; + UniswapDayData_OrderBy["VolumeEth"] = "volumeETH"; + UniswapDayData_OrderBy["VolumeUsd"] = "volumeUSD"; + UniswapDayData_OrderBy["VolumeUsdUntracked"] = "volumeUSDUntracked"; + UniswapDayData_OrderBy["FeesUsd"] = "feesUSD"; + UniswapDayData_OrderBy["TxCount"] = "txCount"; + UniswapDayData_OrderBy["TvlUsd"] = "tvlUSD"; +})(UniswapDayData_OrderBy || (UniswapDayData_OrderBy = {})); +var _SubgraphErrorPolicy_; +(function (_SubgraphErrorPolicy_) { + /** Data will be returned even if the subgraph has indexing errors */ + _SubgraphErrorPolicy_["Allow"] = "allow"; + /** If the subgraph has indexing errors, data will be omitted. The default. */ + _SubgraphErrorPolicy_["Deny"] = "deny"; +})(_SubgraphErrorPolicy_ || (_SubgraphErrorPolicy_ = {})); +var AllV3TicksDocument = "\n query allV3Ticks($poolAddress: String!, $skip: Int!) {\n ticks(\n first: 1000\n skip: $skip\n where: {poolAddress: $poolAddress}\n orderBy: tickIdx\n ) {\n tick: tickIdx\n liquidityNet\n price0\n price1\n }\n}\n "; +var FeeTierDistributionDocument = "\n query feeTierDistribution($token0: String!, $token1: String!) {\n _meta {\n block {\n number\n }\n }\n asToken0: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: {token0: $token0, token1: $token1}\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n asToken1: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: {token0: $token1, token1: $token0}\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n}\n "; +var injectedRtkApi = api$1.injectEndpoints({ + endpoints: function (build) { return ({ + allV3Ticks: build.query({ + query: function (variables) { return ({ document: AllV3TicksDocument, variables: variables }); } + }), + feeTierDistribution: build.query({ + query: function (variables) { return ({ document: FeeTierDistributionDocument, variables: variables }); } + }), + }); }, +}); +injectedRtkApi.useAllV3TicksQuery; injectedRtkApi.useLazyAllV3TicksQuery; injectedRtkApi.useFeeTierDistributionQuery; injectedRtkApi.useLazyFeeTierDistributionQuery; + +// tag that should be applied to queries that need to be invalidated when the chain changes +var CHAIN_TAG = 'Chain'; +// enhanced api to provide/invalidate tags +var api = injectedRtkApi.enhanceEndpoints({ + addTagTypes: [CHAIN_TAG], + endpoints: { + allV3Ticks: { + providesTags: [CHAIN_TAG], + }, + feeTierDistribution: { + providesTags: [CHAIN_TAG], + }, + }, +}); +api.useAllV3TicksQuery; api.useFeeTierDistributionQuery; + +/** + * Returns the input chain ID if chain is supported. If not, return undefined + * @param chainId a chain ID, which will be returned if it is a supported chain ID + */ +function supportedChainId(chainId) { + if (chainId in SupportedChainId) { + return chainId; + } + return undefined; +} + +function useQueryCacheInvalidator() { + var dispatch = useAppDispatch(); + // subscribe to `chainId` changes in the redux store rather than Web3 + // this will ensure that when `invalidateTags` is called, the latest + // `chainId` is available in redux to build the subgraph url + var chainId = useAppSelector(function (state) { return state.application.chainId; }); + React.useEffect(function () { + dispatch(api.util.invalidateTags([CHAIN_TAG])); + }, [chainId, dispatch]); +} +function Updater$5() { + var _a = useActiveWeb3React(), chainId = _a.chainId, library = _a.library; + var dispatch = useAppDispatch(); + var windowVisible = useIsWindowVisible(); + var _b = __read(React.useState(chainId), 2), activeChainId = _b[0], setActiveChainId = _b[1]; + useQueryCacheInvalidator(); + React.useEffect(function () { + if (library && chainId && windowVisible) { + setActiveChainId(chainId); + } + }, [dispatch, chainId, library, windowVisible]); + var debouncedChainId = useDebounce(activeChainId, 100); + React.useEffect(function () { + var _a; + var chainId = debouncedChainId ? (_a = supportedChainId(debouncedChainId)) !== null && _a !== void 0 ? _a : null : null; + dispatch(updateChainId({ chainId: chainId })); + }, [dispatch, debouncedChainId]); + return null; +} + +function Updater$4() { + var _a = useActiveWeb3React(), chainId = _a.chainId, library = _a.library; + var dispatch = useAppDispatch(); + var isWindowVisible = useIsWindowVisible(); + // get all loaded lists, and the active urls + var lists = useAllLists(); + var activeListUrls = useActiveListUrls(); + var fetchList = useFetchListCallback(); + var fetchAllListsCallback = React.useCallback(function () { + if (!isWindowVisible) + return; + Object.keys(lists).forEach(function (url) { + return fetchList(url).catch(function (error) { return console.debug('interval list fetching error', error); }); + }); + }, [fetchList, isWindowVisible, lists]); + React.useEffect(function () { + if (chainId && [SupportedChainId.OPTIMISM, SupportedChainId.OPTIMISTIC_KOVAN].includes(chainId)) { + dispatch(enableList(OPTIMISM_LIST)); + } + if (chainId && [SupportedChainId.ARBITRUM_ONE, SupportedChainId.ARBITRUM_RINKEBY].includes(chainId)) { + dispatch(enableList(ARBITRUM_LIST)); + } + }, [chainId, dispatch]); + // fetch all lists every 10 minutes, but only after we initialize library + useInterval(fetchAllListsCallback, library ? 1000 * 60 * 10 : null); + // whenever a list is not loaded and not loading, try again to load it + React.useEffect(function () { + Object.keys(lists).forEach(function (listUrl) { + var list = lists[listUrl]; + if (!list.current && !list.loadingRequestId && !list.error) { + fetchList(listUrl).catch(function (error) { return console.debug('list added fetching error', error); }); + } + }); + }, [dispatch, fetchList, library, lists]); + // if any lists from unsupported lists are loaded, check them too (in case new updates since last visit) + React.useEffect(function () { + UNSUPPORTED_LIST_URLS.forEach(function (listUrl) { + var list = lists[listUrl]; + if (!list || (!list.current && !list.loadingRequestId && !list.error)) { + fetchList(listUrl).catch(function (error) { return console.debug('list added fetching error', error); }); + } + }); + }, [dispatch, fetchList, library, lists]); + // automatically update lists if versions are minor/patch + React.useEffect(function () { + Object.keys(lists).forEach(function (listUrl) { + var list = lists[listUrl]; + if (list.current && list.pendingUpdate) { + var bump = tokenLists.getVersionUpgrade(list.current.version, list.pendingUpdate.version); + switch (bump) { + case tokenLists.VersionUpgrade.NONE: + throw new Error('unexpected no version bump'); + case tokenLists.VersionUpgrade.PATCH: + case tokenLists.VersionUpgrade.MINOR: + var min = tokenLists.minVersionBump(list.current.tokens, list.pendingUpdate.tokens); + // automatically update minor/patch as long as bump matches the min update + if (bump >= min) { + dispatch(acceptListUpdate(listUrl)); + } + else { + console.error("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"); + } + break; + // update any active or inactive lists + case tokenLists.VersionUpgrade.MAJOR: + dispatch(acceptListUpdate(listUrl)); + } + } + }); + }, [dispatch, lists, activeListUrls]); + return null; +} + +function Updater$3() { + var dispatch = useAppDispatch(); + var state = useAppSelector(function (state) { return state.logs; }); + var _a = useActiveWeb3React(), chainId = _a.chainId, library = _a.library; + var blockNumber = useBlockNumber(); + var filtersNeedFetch = React.useMemo(function () { + if (!chainId || typeof blockNumber !== 'number') + return []; + var active = state[chainId]; + if (!active) + return []; + return Object.keys(active) + .filter(function (key) { + var _a = active[key], fetchingBlockNumber = _a.fetchingBlockNumber, results = _a.results, listeners = _a.listeners; + if (listeners === 0) + return false; + if (typeof fetchingBlockNumber === 'number' && fetchingBlockNumber >= blockNumber) + return false; + if (results && typeof results.blockNumber === 'number' && results.blockNumber >= blockNumber) + return false; + return true; + }) + .map(function (key) { return keyToFilter(key); }); + }, [blockNumber, chainId, state]); + React.useEffect(function () { + if (!library || !chainId || typeof blockNumber !== 'number' || filtersNeedFetch.length === 0) + return; + dispatch(fetchingLogs({ chainId: chainId, filters: filtersNeedFetch, blockNumber: blockNumber })); + filtersNeedFetch.forEach(function (filter) { + library + .getLogs(__assign(__assign({}, filter), { fromBlock: 0, toBlock: blockNumber })) + .then(function (logs) { + dispatch(fetchedLogs({ + chainId: chainId, + filter: filter, + results: { logs: logs, blockNumber: blockNumber }, + })); + }) + .catch(function (error) { + console.error('Failed to get logs', filter, error); + dispatch(fetchedLogsError({ + chainId: chainId, + filter: filter, + blockNumber: blockNumber, + })); + }); + }); + }, [blockNumber, chainId, dispatch, filtersNeedFetch, library]); + return null; +} + +function wait(ms) { + return new Promise(function (resolve) { return setTimeout(resolve, ms); }); +} +function waitRandom(min, max) { + return wait(min + Math.round(Math.random() * Math.max(0, max - min))); +} +/** + * This error is thrown if the function is cancelled before completing + */ +var CancelledError = /** @class */ (function (_super) { + __extends(CancelledError, _super); + function CancelledError() { + var _this = _super.call(this, 'Cancelled') || this; + _this.isCancelledError = true; + return _this; + } + return CancelledError; +}(Error)); +/** + * Throw this error if the function should retry + */ +var RetryableError = /** @class */ (function (_super) { + __extends(RetryableError, _super); + function RetryableError() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.isRetryableError = true; + return _this; + } + return RetryableError; +}(Error)); +/** + * Retries the function that returns the promise until the promise successfully resolves up to n retries + * @param fn function to retry + * @param n how many times to retry + * @param minWait min wait between retries in ms + * @param maxWait max wait between retries in ms + */ +function retry(fn, _a) { + var _this = this; + var n = _a.n, minWait = _a.minWait, maxWait = _a.maxWait; + var completed = false; + var rejectCancelled; + var promise = new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () { + var result, error_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + rejectCancelled = reject; + _a.label = 1; + case 1: + result = void 0; + _a.label = 2; + case 2: + _a.trys.push([2, 4, , 5]); + return [4 /*yield*/, fn()]; + case 3: + result = _a.sent(); + if (!completed) { + resolve(result); + completed = true; + } + return [3 /*break*/, 7]; + case 4: + error_1 = _a.sent(); + if (completed) { + return [3 /*break*/, 7]; + } + if (n <= 0 || !error_1.isRetryableError) { + reject(error_1); + completed = true; + return [3 /*break*/, 7]; + } + n--; + return [3 /*break*/, 5]; + case 5: return [4 /*yield*/, waitRandom(minWait, maxWait)]; + case 6: + _a.sent(); + return [3 /*break*/, 1]; + case 7: return [2 /*return*/]; + } + }); + }); }); + return { + promise: promise, + cancel: function () { + if (completed) + return; + completed = true; + rejectCancelled(new CancelledError()); + }, + }; +} + +var _a; +function shouldCheck(lastBlockNumber, tx) { + if (tx.receipt) + return false; + if (!tx.lastCheckedBlockNumber) + return true; + var blocksSinceCheck = lastBlockNumber - tx.lastCheckedBlockNumber; + if (blocksSinceCheck < 1) + return false; + var minutesPending = (new Date().getTime() - tx.addedTime) / ms__default["default"](templateObject_1 || (templateObject_1 = __makeTemplateObject(["1m"], ["1m"]))); + if (minutesPending > 60) { + // every 10 blocks if pending longer than an hour + return blocksSinceCheck > 9; + } + else if (minutesPending > 5) { + // every 3 blocks if pending longer than 5 minutes + return blocksSinceCheck > 2; + } + else { + // otherwise every block + return true; + } +} +var RETRY_OPTIONS_BY_CHAIN_ID = (_a = {}, + _a[SupportedChainId.ARBITRUM_ONE] = { n: 10, minWait: 250, maxWait: 1000 }, + _a[SupportedChainId.ARBITRUM_RINKEBY] = { n: 10, minWait: 250, maxWait: 1000 }, + _a[SupportedChainId.OPTIMISTIC_KOVAN] = { n: 10, minWait: 250, maxWait: 1000 }, + _a[SupportedChainId.OPTIMISM] = { n: 10, minWait: 250, maxWait: 1000 }, + _a); +var DEFAULT_RETRY_OPTIONS = { n: 1, minWait: 0, maxWait: 0 }; +function Updater$2(_a) { + var pendingTransactions = _a.pendingTransactions, onCheck = _a.onCheck, onReceipt = _a.onReceipt; + var _b = useActiveWeb3React(), chainId = _b.chainId, library = _b.library; + var lastBlockNumber = useBlockNumber(); + var fastForwardBlockNumber = useFastForwardBlockNumber(); + var getReceipt = React.useCallback(function (hash) { + var _a; + if (!library || !chainId) + throw new Error('No library or chainId'); + var retryOptions = (_a = RETRY_OPTIONS_BY_CHAIN_ID[chainId]) !== null && _a !== void 0 ? _a : DEFAULT_RETRY_OPTIONS; + return retry(function () { + return library.getTransactionReceipt(hash).then(function (receipt) { + if (receipt === null) { + console.debug("Retrying tranasaction receipt for " + hash); + throw new RetryableError(); + } + return receipt; + }); + }, retryOptions); + }, [chainId, library]); + React.useEffect(function () { + if (!chainId || !library || !lastBlockNumber) + return; + var cancels = Object.keys(pendingTransactions) + .filter(function (hash) { return shouldCheck(lastBlockNumber, pendingTransactions[hash]); }) + .map(function (hash) { + var _a = getReceipt(hash), promise = _a.promise, cancel = _a.cancel; + promise + .then(function (receipt) { + if (receipt) { + onReceipt({ chainId: chainId, hash: hash, receipt: receipt }); + } + else { + onCheck({ chainId: chainId, hash: hash, blockNumber: lastBlockNumber }); + } + }) + .catch(function (error) { + if (!error.isCancelledError) { + console.warn("Failed to get transaction receipt for " + hash, error); + } + }); + return cancel; + }); + return function () { + cancels.forEach(function (cancel) { return cancel(); }); + }; + }, [chainId, library, lastBlockNumber, getReceipt, fastForwardBlockNumber, onReceipt, onCheck, pendingTransactions]); + return null; +} var templateObject_1; +function Updater$1() { + var chainId = useActiveWeb3React().chainId; + var addPopup = useAddPopup(); + // speed up popup dismisall time if on L2 + var isL2 = Boolean(chainId && L2_CHAIN_IDS.includes(chainId)); + var dispatch = useAppDispatch(); + var onCheck = React.useCallback(function (_a) { + var chainId = _a.chainId, hash = _a.hash, blockNumber = _a.blockNumber; + return dispatch(checkedTransaction({ chainId: chainId, hash: hash, blockNumber: blockNumber })); + }, [dispatch]); + var onReceipt = React.useCallback(function (_a) { + var chainId = _a.chainId, hash = _a.hash, receipt = _a.receipt; + dispatch(finalizeTransaction({ + chainId: chainId, + hash: hash, + receipt: { + blockHash: receipt.blockHash, + blockNumber: receipt.blockNumber, + contractAddress: receipt.contractAddress, + from: receipt.from, + status: receipt.status, + to: receipt.to, + transactionHash: receipt.transactionHash, + transactionIndex: receipt.transactionIndex, + }, + })); + addPopup({ + txn: { hash: hash }, + }, hash, isL2 ? L2_TXN_DISMISS_MS : DEFAULT_TXN_DISMISS_MS); + }, [addPopup, dispatch, isL2]); + var state = useAppSelector(function (state) { return state.transactions; }); + var pendingTransactions = React.useMemo(function () { var _a; return (chainId ? (_a = state[chainId]) !== null && _a !== void 0 ? _a : {} : {}); }, [chainId, state]); + return jsxRuntime.jsx(Updater$2, { pendingTransactions: pendingTransactions, onCheck: onCheck, onReceipt: onReceipt }, void 0); +} + +function Updater() { + var dispatch = useAppDispatch(); + // keep dark mode in sync with the system + React.useEffect(function () { + var darkHandler = function (match) { + dispatch(updateMatchesDarkMode({ matchesDarkMode: match.matches })); + }; + var match = window === null || window === void 0 ? void 0 : window.matchMedia('(prefers-color-scheme: dark)'); + dispatch(updateMatchesDarkMode({ matchesDarkMode: match.matches })); + if (match === null || match === void 0 ? void 0 : match.addListener) { + match === null || match === void 0 ? void 0 : match.addListener(darkHandler); + } + else if (match === null || match === void 0 ? void 0 : match.addEventListener) { + match === null || match === void 0 ? void 0 : match.addEventListener('change', darkHandler); + } + return function () { + if (match === null || match === void 0 ? void 0 : match.removeListener) { + match === null || match === void 0 ? void 0 : match.removeListener(darkHandler); + } + else if (match === null || match === void 0 ? void 0 : match.removeEventListener) { + match === null || match === void 0 ? void 0 : match.removeEventListener('change', darkHandler); + } + }; + }, [dispatch]); + return null; +} + +var initialStyles = { + width: '200vw', + height: '200vh', + transform: 'translate(-50vw, -100vh)', + backgroundBlendMode: '', +}; +var backgroundResetStyles = { + width: '100vw', + height: '100vh', + transform: 'unset', + backgroundBlendMode: '', +}; +var backgroundRadialGradientElement = document.getElementById('background-radial-gradient'); +var setBackground = function (newValues) { + return Object.entries(newValues).forEach(function (_a) { + var _b = __read(_a, 2), key = _b[0], value = _b[1]; + if (backgroundRadialGradientElement) { + backgroundRadialGradientElement.style[key] = value; + } + }); +}; +function RadialGradientByChainUpdater() { + var chainId = useActiveWeb3React().chainId; + var _a = __read(useDarkModeManager(), 1), darkMode = _a[0]; + // manage background color + React.useEffect(function () { + if (!backgroundRadialGradientElement) { + return; + } + switch (chainId) { + case SupportedChainId.ARBITRUM_ONE: + case SupportedChainId.ARBITRUM_RINKEBY: + setBackground(backgroundResetStyles); + var arbitrumLightGradient = 'radial-gradient(150% 100% at 50% 0%, #CDE8FB 0%, #FCF3F9 50%, #FFFFFF 100%)'; + var arbitrumDarkGradient = 'radial-gradient(150% 100% at 50% 0%, #0A294B 0%, #221E30 50%, #1F2128 100%)'; + backgroundRadialGradientElement.style.background = darkMode ? arbitrumDarkGradient : arbitrumLightGradient; + break; + case SupportedChainId.OPTIMISM: + case SupportedChainId.OPTIMISTIC_KOVAN: + setBackground(backgroundResetStyles); + var optimismLightGradient = 'radial-gradient(150% 100% at 50% 0%, #FFFBF2 2%, #FFF4F9 53%, #FFFFFF 100%)'; + var optimismDarkGradient = 'radial-gradient(150% 100% at 50% 0%, #3E2E38 2%, #2C1F2D 53%, #1F2128 100%)'; + backgroundRadialGradientElement.style.background = darkMode ? optimismDarkGradient : optimismLightGradient; + break; + case SupportedChainId.POLYGON: + case SupportedChainId.POLYGON_MUMBAI: + setBackground(backgroundResetStyles); + var polygonLightGradient = 'radial-gradient(153.32% 100% at 47.26% 0%, rgba(130, 71, 229, 0.0864) 0%, rgba(0, 41, 255, 0.06) 48.19%, rgba(0, 41, 255, 0.012) 100%), #FFFFFF'; + var polygonDarkGradient = 'radial-gradient(150.6% 98.22% at 48.06% 0%, rgba(130, 71, 229, 0.6) 0%, rgba(200, 168, 255, 0) 100%), #1F2128'; + backgroundRadialGradientElement.style.background = darkMode ? polygonDarkGradient : polygonLightGradient; + backgroundRadialGradientElement.style.backgroundBlendMode = darkMode ? 'overlay,normal' : 'multiply,normal'; + break; + default: + setBackground(initialStyles); + backgroundRadialGradientElement.style.background = ''; + } + }, [darkMode, chainId]); + return null; +} + +function Updaters() { + return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(RadialGradientByChainUpdater, {}, void 0), jsxRuntime.jsx(Updater$4, {}, void 0), jsxRuntime.jsx(Updater, {}, void 0), jsxRuntime.jsx(Updater$5, {}, void 0), jsxRuntime.jsx(Updater$1, {}, void 0), jsxRuntime.jsx(BlockUpdater, {}, void 0), jsxRuntime.jsx(MulticallUpdater, {}, void 0), jsxRuntime.jsx(Updater$3, {}, void 0)] }, void 0)); +} + +var Web3ProviderNetwork = core.createWeb3ReactRoot(NetworkContextName); +var Providers = function (props) { return (jsxRuntime.jsx(reactRedux.Provider, __assign({ store: store }, { children: jsxRuntime.jsx(reactRouterDom.HashRouter, { children: jsxRuntime.jsx(LanguageProvider, { children: jsxRuntime.jsx(core.Web3ReactProvider, __assign({ getLibrary: getLibrary }, { children: jsxRuntime.jsx(Web3ProviderNetwork, __assign({ getLibrary: getLibrary }, { children: jsxRuntime.jsxs(Blocklist, { children: [jsxRuntime.jsx(Updaters, {}, void 0), jsxRuntime.jsxs(ThemeProvider, { children: [jsxRuntime.jsx(ThemedGlobalStyle, {}, void 0), props.children] }, void 0)] }, void 0) }), void 0) }), void 0) }, void 0) }, void 0) }), void 0)); }; + var $schema = "http://json-schema.org/draft-07/schema#"; var $id = "https://uniswap.org/tokenlist.schema.json"; var title = "Uniswap Token List"; @@ -16410,5 +17745,9 @@ var index = /*#__PURE__*/Object.freeze({ getQuote: getQuote }); +exports.INFURA_NETWORK_URLS = INFURA_NETWORK_URLS; +exports.Providers = Providers; exports.Swap = Swap; +exports.Updaters = Updaters; +exports.serviceWorkerRegistration = serviceWorkerRegistration; //# sourceMappingURL=snowflake.js.map diff --git a/dist2/snowflake.js.map b/dist2/snowflake.js.map index 10de2655b69..959d7862ad2 100644 --- a/dist2/snowflake.js.map +++ b/dist2/snowflake.js.map @@ -1 +1 @@ -{"version":3,"file":"snowflake.js","sources":["../src/assets/images/ethereum-logo.png","../src/assets/svg/arbitrum_logo.svg","../src/assets/svg/optimistic_ethereum.svg","../src/assets/svg/polygon-matic-logo.svg","../src/assets/images/gas-icon.svg","../src/assets/svg/matic-token-icon.svg","../src/assets/svg/dot_line.svg","../src/assets/svg/auto_router.svg","../src/assets/svg/static_route.svg","../src/assets/images/dropdown.svg","../src/assets/svg/tokenlist.svg","../src/assets/svg/logo.svg","../src/assets/images/blue-loader.svg","../src/assets/images/metamask.png","../node_modules/fortmatic/lib/fortmatic.js"],"sourcesContent":["export default \"data:image/png;base64,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\"","export default \"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20viewBox%3D%220%200%20470.287%20514.251%22%20enable-background%3D%22new%200%200%20470.287%20514.251%22%20xml%3Aspace%3D%22preserve%22%3E%3Cg%20id%3D%22Background%22%3E%3C%2Fg%3E%3Cg%20id%3D%22Logos_and_symbols%22%3E%20%3Cg%20id%3D%22SYMBOL_VER_3%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_4_3_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_1_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_1_%22%3E%20%20%3Cg%20id%3D%22_x31_-3%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_14_%22%3E%20%20%20%3Cpath%20fill%3D%22%232D374B%22%20d%3D%22M291.134%2C237.469l35.654-60.5l96.103%2C149.684l0.046%2C28.727l-0.313-197.672%20%20%20%20c-0.228-4.832-2.794-9.252-6.887-11.859L242.715%2C46.324c-4.045-1.99-9.18-1.967-13.22%2C0.063c-0.546%2C0.272-1.06%2C0.57-1.548%2C0.895%20%20%20%20l-0.604%2C0.379L59.399%2C144.983l-0.651%2C0.296c-0.838%2C0.385-1.686%2C0.875-2.48%2C1.444c-3.185%2C2.283-5.299%2C5.66-5.983%2C9.448%20%20%20%20c-0.103%2C0.574-0.179%2C1.158-0.214%2C1.749l0.264%2C161.083l89.515-138.745c11.271-18.397%2C35.825-24.323%2C58.62-24.001l26.753%2C0.706%20%20%20%20L67.588%2C409.765l18.582%2C10.697L245.692%2C157.22l70.51-0.256L157.091%2C426.849l66.306%2C38.138l7.922%2C4.556%20%20%20%20c3.351%2C1.362%2C7.302%2C1.431%2C10.681%2C0.21l175.453-101.678l-33.544%2C19.438L291.134%2C237.469z%20M304.736%2C433.395l-66.969-105.108%20%20%20%20l40.881-69.371l87.952%2C138.628L304.736%2C433.395z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%2328A0F0%22%20points%3D%22237.768%2C328.286%20304.736%2C433.395%20366.601%2C397.543%20278.648%2C258.915%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2328A0F0%22%20d%3D%22M422.937%2C355.379l-0.046-28.727l-96.103-149.684l-35.654%2C60.5l92.774%2C150.043l33.544-19.438%20%20%20%20c3.29-2.673%2C5.281-6.594%2C5.49-10.825L422.937%2C355.379z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23FFFFFF%22%20d%3D%22M20.219%2C382.469l47.369%2C27.296l157.634-252.801l-26.753-0.706c-22.795-0.322-47.35%2C5.604-58.62%2C24.001%20%20%20%20L50.334%2C319.004l-30.115%2C46.271V382.469z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%23FFFFFF%22%20points%3D%22316.202%2C156.964%20245.692%2C157.22%2086.17%2C420.462%20141.928%2C452.565%20157.091%2C426.849%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2396BEDC%22%20d%3D%22M452.65%2C156.601c-0.59-14.746-8.574-28.245-21.08-36.104L256.28%2C19.692%20%20%20%20c-12.371-6.229-27.825-6.237-40.218-0.004c-1.465%2C0.739-170.465%2C98.752-170.465%2C98.752c-2.339%2C1.122-4.592%2C2.458-6.711%2C3.975%20%20%20%20c-11.164%2C8.001-17.969%2C20.435-18.668%2C34.095v208.765l30.115-46.271L50.07%2C157.921c0.035-0.589%2C0.109-1.169%2C0.214-1.741%20%20%20%20c0.681-3.79%2C2.797-7.171%2C5.983-9.456c0.795-0.569%2C172.682-100.064%2C173.228-100.337c4.04-2.029%2C9.175-2.053%2C13.22-0.063%20%20%20%20l173.022%2C99.523c4.093%2C2.607%2C6.659%2C7.027%2C6.887%2C11.859v199.542c-0.209%2C4.231-1.882%2C8.152-5.172%2C10.825l-33.544%2C19.438%20%20%20%20l-17.308%2C10.031l-61.864%2C35.852l-62.737%2C36.357c-3.379%2C1.221-7.33%2C1.152-10.681-0.21l-74.228-42.693l-15.163%2C25.717%20%20%20%20l66.706%2C38.406c2.206%2C1.255%2C4.171%2C2.367%2C5.784%2C3.272c2.497%2C1.4%2C4.199%2C2.337%2C4.8%2C2.629c4.741%2C2.303%2C11.563%2C3.643%2C17.71%2C3.643%20%20%20%20c5.636%2C0%2C11.132-1.035%2C16.332-3.072l182.225-105.531c10.459-8.104%2C16.612-20.325%2C17.166-33.564V156.601z%22%2F%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_13_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_6_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_3_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_15_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_3_%22%3E%20%20%20%3Cg%20id%3D%22_x33__7_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic%22%3E%20%20%20%3Cg%20id%3D%22_x33__3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_10_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x34__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_2_%22%3E%20%20%20%3Cg%20id%3D%22_x33__6_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_2_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_11_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_5_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_12_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_1_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_9_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_2_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol_1_%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_1_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_7_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_8_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Monochromatic_1_%22%3E%20%20%3Cg%20id%3D%22_x33__4_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%22170%22%20height%3D%22168%22%20viewBox%3D%220%200%20170%20168%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20clip-path%3D%22url%28%23clip0%29%22%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF505F%22%2F%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF0320%22%2F%3E%3Cpath%20d%3D%22M85.05%200C132.022%200%20170.1%2037.8949%20170.1%2084.6407C170.1%20131.386%200%20131.386%200%2084.6407C0%2037.8949%2038.0782%200%2085.05%200Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.665%2064.0394L112.444%2012.3742L89.0263%2078.9477L144.665%2064.0394Z%22%20fill%3D%22%23FF4E65%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.777%2064.215L112.444%2012.3742L165.349%2058.4347L143.777%2064.215Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.551%2063.613L142.479%20124.467L88.912%2078.5213L144.551%2063.613Z%22%20fill%3D%22%23D0001A%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.663%2063.7886L142.479%20124.467L165.235%2058.0083L143.663%2063.7886Z%22%20fill%3D%22%23FF697B%22%2F%3E%3C%2Fg%3E%3Cdefs%3E%3CclipPath%20id%3D%22clip0%22%3E%3Crect%20width%3D%22170%22%20height%3D%22168%22%20fill%3D%22white%22%2F%3E%3C%2FclipPath%3E%3C%2Fdefs%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20viewBox%3D%220%200%2038.4%2033.5%22%20style%3D%22enable-background%3Anew%200%200%2038.4%2033.5%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cstyle%20type%3D%22text%2Fcss%22%3E%20.st0%7Bfill%3A%238247E5%3B%7D%3C%2Fstyle%3E%3Cg%3E%20%3Cpath%20class%3D%22st0%22%20d%3D%22M29%2C10.2c-0.7-0.4-1.6-0.4-2.4%2C0L21%2C13.5l-3.8%2C2.1l-5.5%2C3.3c-0.7%2C0.4-1.6%2C0.4-2.4%2C0L5%2C16.3%20%20c-0.7-0.4-1.2-1.2-1.2-2.1v-5c0-0.8%2C0.4-1.6%2C1.2-2.1l4.3-2.5c0.7-0.4%2C1.6-0.4%2C2.4%2C0L16%2C7.2c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v3.3l3.8-2.2V7%20%20c0-0.8-0.4-1.6-1.2-2.1l-8-4.7c-0.7-0.4-1.6-0.4-2.4%2C0L1.2%2C5C0.4%2C5.4%2C0%2C6.2%2C0%2C7v9.4c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l5.5-3.2l3.8-2.2l5.5-3.2c0.7-0.4%2C1.6-0.4%2C2.4%2C0l4.3%2C2.5c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v5c0%2C0.8-0.4%2C1.6-1.2%2C2.1%20%20L29%2C28.8c-0.7%2C0.4-1.6%2C0.4-2.4%2C0l-4.3-2.5c-0.7-0.4-1.2-1.2-1.2-2.1V21l-3.8%2C2.2v3.3c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l8.1-4.7c0.7-0.4%2C1.2-1.2%2C1.2-2.1V17c0-0.8-0.4-1.6-1.2-2.1L29%2C10.2z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M10.0047%209.26921H10.2714C11.0078%209.26921%2011.6047%209.86617%2011.6047%2010.6025V12.1359C11.6047%2012.7987%2012.142%2013.3359%2012.8047%2013.3359C13.4675%2013.3359%2014.0047%2012.7995%2014.0047%2012.1367V5.22059C14.0047%204.86697%2013.7758%204.56227%2013.5258%204.31223L10.6714%201.33594M4.00472%202.00254H8.00472C8.7411%202.00254%209.33805%202.59949%209.33805%203.33587V14.0015H2.67139V3.33587C2.67139%202.59949%203.26834%202.00254%204.00472%202.00254ZM14.0047%205.33587C14.0047%206.07225%2013.4078%206.66921%2012.6714%206.66921C11.935%206.66921%2011.3381%206.07225%2011.3381%205.33587C11.3381%204.59949%2011.935%204.00254%2012.6714%204.00254C13.4078%204.00254%2014.0047%204.59949%2014.0047%205.33587Z%22%20stroke%3D%22white%22%2F%3E%3Cline%20x1%3D%224%22%20y1%3D%229.99414%22%20x2%3D%228%22%20y2%3D%229.99414%22%20stroke%3D%22white%22%2F%3E%3Cline%20x1%3D%224%22%20y1%3D%2211.9941%22%20x2%3D%228%22%20y2%3D%2211.9941%22%20stroke%3D%22white%22%2F%3E%3Cpath%20d%3D%22M4%208.16113H8%22%20stroke%3D%22white%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%221024%22%20height%3D%221024%22%20viewBox%3D%220%200%201024%201024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Ccircle%20cx%3D%22512%22%20cy%3D%22512%22%20r%3D%22512%22%20fill%3D%22%238247E5%22%2F%3E%3Cpath%20d%3D%22M681.469%20402.456C669.189%20395.312%20653.224%20395.312%20639.716%20402.456L543.928%20457.228L478.842%20492.949L383.055%20547.721C370.774%20554.865%20354.81%20554.865%20341.301%20547.721L265.162%20504.856C252.882%20497.712%20244.286%20484.614%20244.286%20470.325V385.786C244.286%20371.498%20251.654%20358.4%20265.162%20351.256L340.073%20309.581C352.353%20302.437%20368.318%20302.437%20381.827%20309.581L456.737%20351.256C469.018%20358.4%20477.614%20371.498%20477.614%20385.786V440.558L542.7%20403.646V348.874C542.7%20334.586%20535.332%20321.488%20521.824%20314.344L383.055%20235.758C370.774%20228.614%20354.81%20228.614%20341.301%20235.758L200.076%20314.344C186.567%20321.488%20179.199%20334.586%20179.199%20348.874V507.237C179.199%20521.525%20186.567%20534.623%20200.076%20541.767L341.301%20620.353C353.582%20627.498%20369.546%20627.498%20383.055%20620.353L478.842%20566.772L543.928%20529.86L639.716%20476.279C651.996%20469.135%20667.961%20469.135%20681.469%20476.279L756.38%20517.953C768.66%20525.098%20777.257%20538.195%20777.257%20552.484V637.023C777.257%20651.312%20769.888%20664.409%20756.38%20671.553L681.469%20714.419C669.189%20721.563%20653.224%20721.563%20639.716%20714.419L564.805%20672.744C552.525%20665.6%20543.928%20652.502%20543.928%20638.214V583.442L478.842%20620.353V675.125C478.842%20689.414%20486.21%20702.512%20499.719%20709.656L640.944%20788.242C653.224%20795.386%20669.189%20795.386%20682.697%20788.242L823.922%20709.656C836.203%20702.512%20844.799%20689.414%20844.799%20675.125V516.763C844.799%20502.474%20837.431%20489.377%20823.922%20482.232L681.469%20402.456Z%22%20fill%3D%22white%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%22100%25%22%20height%3D%2235%22%20%20viewBox%3D%22800%200%20300%20200%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%20%20%20%20%3Cline%20x1%3D%220%22%20x2%3D%222000%22%20y1%3D%22100%22%20y2%3D%22100%22%20stroke%3D%22currentColor%22%20stroke-width%3D%2220%22%20stroke-linecap%3D%22round%22%20stroke-dasharray%3D%221%2C%2045%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2223%22%20height%3D%2220%22%20viewBox%3D%220%200%2023%2020%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cdefs%3E%20%3ClinearGradient%20id%3D%22gradient1%22%20x1%3D%220%22%20y1%3D%220%22%20x2%3D%221%22%20y2%3D%220%22%20gradientTransform%3D%22rotate%2895%29%22%3E%20%20%20%20%3Cstop%20id%3D%22stop1%22%20offset%3D%220%22%20stop-color%3D%22%232274E2%22%2F%3E%20%20%20%20%3Cstop%20id%3D%22stop1%22%20offset%3D%220.5%22%20stop-color%3D%22%232274E2%22%2F%3E%20%20%20%20%3Cstop%20id%3D%22stop2%22%20offset%3D%221%22%20stop-color%3D%22%233FB672%22%20%2F%3E%20%20%3C%2FlinearGradient%3E%20%20%3C%2Fdefs%3E%3Cpath%20d%3D%22M16%2016C10%2016%209%2010%205%2010M16%2016C16%2017.6569%2017.3431%2019%2019%2019C20.6569%2019%2022%2017.6569%2022%2016C22%2014.3431%2020.6569%2013%2019%2013C17.3431%2013%2016%2014.3431%2016%2016ZM5%2010C9%2010%2010%204%2016%204M5%2010H1.5M16%204C16%205.65685%2017.3431%207%2019%207C20.6569%207%2022%205.65685%2022%204C22%202.34315%2020.6569%201%2019%201C17.3431%201%2016%202.34315%2016%204Z%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20stroke%3D%22url%28%23gradient1%29%22%20%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2022%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M19%2018C19%2018.5523%2018.5523%2019%2018%2019V21C19.6569%2021%2021%2019.6569%2021%2018H19ZM18%2019C17.4477%2019%2017%2018.5523%2017%2018H15C15%2019.6569%2016.3431%2021%2018%2021V19ZM17%2018C17%2017.4477%2017.4477%2017%2018%2017V15C16.3431%2015%2015%2016.3431%2015%2018H17ZM18%2017C18.5523%2017%2019%2017.4477%2019%2018H21C21%2016.3431%2019.6569%2015%2018%2015V17ZM8%207H16V5H8V7ZM16%2011H8V13H16V11ZM8%2019H16V17H8V19ZM4%2015C4%2017.2091%205.79086%2019%208%2019V17C6.89543%2017%206%2016.1046%206%2015H4ZM8%2011C5.79086%2011%204%2012.7909%204%2015H6C6%2013.8954%206.89543%2013%208%2013V11ZM18%209C18%2010.1046%2017.1046%2011%2016%2011V13C18.2091%2013%2020%2011.2091%2020%209H18ZM16%207C17.1046%207%2018%207.89543%2018%209H20C20%206.79086%2018.2091%205%2016%205V7ZM7%206C7%206.55228%206.55228%207%206%207V9C7.65685%209%209%207.65685%209%206H7ZM6%207C5.44772%207%205%206.55228%205%206H3C3%207.65685%204.34315%209%206%209V7ZM5%206C5%205.44772%205.44772%205%206%205V3C4.34315%203%203%204.34315%203%206H5ZM6%205C6.55228%205%207%205.44772%207%206H9C9%204.34315%207.65685%203%206%203V5Z%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%227%22%20viewBox%3D%220%200%2012%207%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%20%20%20%20%3Cpath%20d%3D%22M0.97168%201L6.20532%206L11.439%201%22%20stroke%3D%22%23AEAEAE%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%22225%22%20height%3D%22225%22%20viewBox%3D%220%200%20225%20225%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M74.8125%20190.529C65.7561%20190.513%2055.5298%20183.748%2051.9715%20175.42L19.9417%20100.456C16.3834%2092.1277%2020.8404%2085.39%2029.8968%2085.4068L111.417%2085.5579C120.473%2085.5747%20130.699%2092.3395%20134.258%20100.668L166.288%20175.632C169.846%20183.96%20165.389%20190.697%20156.332%20190.681L74.8125%20190.529Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint0_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint1_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint2_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint3_radial%29%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M92.958%20165.95C82.7695%20165.931%2071.265%20158.321%2067.2619%20148.952L26.2489%2052.9632C22.2458%2043.5941%2027.26%2036.0143%2037.4485%2036.0332L141.832%2036.2266C152.02%2036.2455%20163.525%2043.8559%20167.528%2053.225L208.541%20149.214C212.544%20158.583%20207.53%20166.163%20197.341%20166.144L92.958%20165.95ZM71.3614%20148.959C74.475%20156.246%2083.4229%20162.166%2091.3473%20162.18L195.73%20162.374C203.655%20162.388%20207.555%20156.493%20204.441%20149.206L163.428%2053.2174C160.315%2045.9304%20151.367%2040.0111%20143.442%2039.9964L39.0592%2039.803C31.1349%2039.7883%2027.2349%2045.6837%2030.3485%2052.9708L71.3614%20148.959Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M68.565%2053.3425C81.1781%2053.3659%2095.4205%2062.7875%20100.376%2074.3862C105.332%2085.985%2099.1246%2095.3687%2086.5115%2095.3454C73.8984%2095.322%2059.6559%2085.9004%2054.7001%2074.3016C49.7443%2062.7028%2055.9518%2053.3191%2068.565%2053.3425Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M90.6891%20104.981C103.302%20105.004%20117.545%20114.425%20122.5%20126.024C127.456%20137.623%20121.249%20147.007%20108.636%20146.983C96.0225%20146.96%2081.7801%20137.538%2076.8243%20125.94C71.8685%20114.341%2078.076%20104.957%2090.6891%20104.981Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M147.538%20105.142C160.151%20105.166%20174.394%20114.587%20179.349%20126.186C184.305%20137.785%20178.098%20147.168%20165.485%20147.145C152.871%20147.122%20138.629%20137.7%20133.673%20126.101C128.717%20114.503%20134.925%20105.119%20147.538%20105.142Z%22%20fill%3D%22%23131313%22%2F%3E%3Cdefs%3E%3CradialGradient%20id%3D%22paint0_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%28134.41%2068.3006%29%20rotate%28-33.9533%29%20scale%2890.6795%2083.3208%29%22%3E%3Cstop%20offset%3D%220.661458%22%20stop-color%3D%22%23C4FCF8%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint1_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%2842.7873%20129.218%29%20rotate%28-24.1606%29%20scale%28213.359%20196.045%29%22%3E%3Cstop%20stop-color%3D%22%23FF0099%22%20stop-opacity%3D%220.9%22%2F%3E%3Cstop%20offset%3D%220.770833%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint2_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%28176.854%20148.655%29%20rotate%28-53.4908%29%20scale%28107.342%2098.6309%29%22%3E%3Cstop%20stop-color%3D%22%23FFEC43%22%2F%3E%3Cstop%20offset%3D%220.805707%22%20stop-color%3D%22%23FFF6A8%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint3_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%2857.5443%2053.4752%29%20rotate%2820.3896%29%20scale%28137.027%20125.907%29%22%3E%3Cstop%20offset%3D%220.125%22%20stop-color%3D%22%235886FE%22%20stop-opacity%3D%220.46%22%2F%3E%3Cstop%20offset%3D%220.673044%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3C%2Fdefs%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2214%22%20height%3D%2215%22%20viewBox%3D%220%200%2014%2015%22%20fill%3D%22black%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20style%3D%22mix-blend-mode%3Adarken%22%3E%3Cpath%20d%3D%22M4.15217%201.55141C3.96412%201.52242%203.95619%201.51902%204.04468%201.5055C4.21427%201.47958%204.61472%201.51491%204.89067%201.58012C5.53489%201.73232%206.12109%202.12221%206.74683%202.81466L6.91307%202.99862L7.15088%202.96062C8.15274%202.8006%209.17194%202.92778%2010.0244%203.31918C10.2589%203.42686%2010.6287%203.64121%2010.6749%203.69629C10.6896%203.71384%2010.7166%203.82684%2010.7349%203.94742C10.7982%204.36458%2010.7665%204.68434%2010.6382%204.92317C10.5683%205.05313%2010.5644%205.09432%2010.6114%205.20554C10.6489%205.2943%2010.7534%205.35999%2010.8569%205.35985C11.0687%205.35956%2011.2968%205.0192%2011.4024%204.54561L11.4444%204.3575L11.5275%204.45109C11.9835%204.96459%2012.3417%205.66488%2012.4032%206.16335L12.4192%206.29332L12.3426%206.17517C12.2107%205.97186%2012.0781%205.83346%2011.9084%205.72183C11.6024%205.52062%2011.2789%205.45215%2010.4222%205.40727C9.64839%205.36675%209.21045%205.30106%208.77621%205.16032C8.03738%204.9209%207.66493%204.60204%206.78729%203.4576C6.39748%202.94928%206.15654%202.66804%205.91687%202.44155C5.37228%201.92691%204.83716%201.65701%204.15217%201.55141Z%22%2F%3E%3Cpath%20d%3D%22M10.8494%202.68637C10.8689%202.34575%2010.9153%202.12108%2011.0088%201.9159C11.0458%201.83469%2011.0804%201.76822%2011.0858%201.76822C11.0911%201.76822%2011.075%201.82816%2011.05%201.90142C10.9821%202.10054%2010.9709%202.3729%2011.0177%202.68978C11.0771%203.09184%2011.1109%203.14985%2011.5385%203.58416C11.739%203.78788%2011.9723%204.0448%2012.0568%204.15511L12.2106%204.35568L12.0568%204.21234C11.8688%204.03705%2011.4364%203.6952%2011.3409%203.64633C11.2768%203.61356%2011.2673%203.61413%2011.2278%203.65321C11.1914%203.68922%2011.1837%203.74333%2011.1787%203.99915C11.1708%204.39786%2011.1161%204.65377%2010.9842%204.90965C10.9128%205.04805%2010.9015%205.01851%2010.9661%204.8623C11.0143%204.74566%2011.0192%204.69439%2011.0189%204.30842C11.0181%203.53291%2010.9255%203.34647%2010.3823%203.02709C10.2447%202.94618%2010.0179%202.8295%209.87839%202.76778C9.73887%202.70606%209.62805%202.6523%209.63208%202.64828C9.64746%202.63307%2010.1772%202.78675%2010.3905%202.86828C10.7077%202.98954%2010.76%203.00526%2010.7985%202.99063C10.8244%202.98082%2010.8369%202.90608%2010.8494%202.68637Z%22%2F%3E%3Cpath%20d%3D%22M4.51745%204.01304C4.13569%203.49066%203.89948%202.68973%203.95062%202.091L3.96643%201.90572L4.05333%201.92148C4.21652%201.95106%204.49789%202.05515%204.62964%202.13469C4.9912%202.35293%205.14773%202.64027%205.30697%203.37811C5.35362%203.59423%205.41482%203.8388%205.44298%203.9216C5.48831%204.05487%205.65962%204.36617%205.7989%204.56834C5.89922%204.71395%205.83258%204.78295%205.61082%204.76305C5.27215%204.73267%204.8134%204.41799%204.51745%204.01304Z%22%2F%3E%3Cpath%20d%3D%22M10.3863%207.90088C8.60224%207.18693%207.97389%206.56721%207.97389%205.52157C7.97389%205.36769%207.97922%205.24179%207.98571%205.24179C7.99221%205.24179%208.06124%205.29257%208.1391%205.35465C8.50088%205.64305%208.906%205.76623%2010.0275%205.92885C10.6875%206.02455%2011.0589%206.10185%2011.4015%206.21477C12.4904%206.57371%2013.1641%207.30212%2013.3248%208.29426C13.3715%208.58255%2013.3441%209.12317%2013.2684%209.4081C13.2087%209.63315%2013.0263%2010.0388%2012.9779%2010.0544C12.9645%2010.0587%2012.9514%2010.0076%2012.9479%209.93809C12.9296%209.56554%2012.7402%209.20285%2012.4221%208.93116C12.0604%208.62227%2011.5745%208.37633%2010.3863%207.90088Z%22%2F%3E%3Cpath%20d%3D%22M9.13385%208.19748C9.11149%208.06527%209.07272%207.89643%209.04769%207.82228L9.00217%207.68748L9.08672%207.7818C9.20374%207.91233%209.2962%208.07937%209.37457%208.30185C9.43438%208.47165%209.44111%208.52215%209.44066%208.79807C9.4402%209.06896%209.43273%209.12575%209.3775%209.27858C9.29042%209.51959%209.18233%209.69048%209.00097%209.87391C8.67507%2010.2036%208.25607%2010.3861%207.65143%2010.4618C7.54633%2010.4749%207.24%2010.4971%206.97069%2010.511C6.292%2010.5461%205.84531%2010.6186%205.44393%2010.7587C5.38623%2010.7788%205.3347%2010.7911%205.32947%2010.7859C5.31323%2010.7698%205.58651%2010.6079%205.81223%2010.4998C6.1305%2010.3474%206.44733%2010.2643%207.15719%2010.1468C7.50785%2010.0887%207.86998%2010.0183%207.96194%209.99029C8.83033%209.72566%209.27671%209.04276%209.13385%208.19748Z%22%2F%3E%3Cpath%20d%3D%22M9.95169%209.64109C9.71465%209.13463%209.66022%208.64564%209.79009%208.18961C9.80399%208.14088%209.82632%208.101%209.83976%208.101C9.85319%208.101%209.90913%208.13105%209.96404%208.16777C10.0733%208.24086%2010.2924%208.36395%2010.876%208.68023C11.6043%209.0749%2012.0196%209.3805%2012.302%209.72965C12.5493%2010.0354%2012.7023%2010.3837%2012.776%2010.8084C12.8177%2011.0489%2012.7932%2011.6277%2012.7311%2011.8699C12.5353%2012.6337%2012.0802%2013.2336%2011.4311%2013.5837C11.336%2013.635%2011.2506%2013.6771%2011.2414%2013.6773C11.2321%2013.6775%2011.2668%2013.5899%2011.3184%2013.4827C11.5367%2013.029%2011.5616%2012.5877%2011.3965%2012.0965C11.2954%2011.7957%2011.0893%2011.4287%2010.6732%2010.8084C10.1893%2010.0873%2010.0707%209.89539%209.95169%209.64109Z%22%2F%3E%3Cpath%20d%3D%22M3.25046%2012.3737C3.91252%2011.8181%204.73629%2011.4234%205.48666%2011.3022C5.81005%2011.25%206.34877%2011.2707%206.64823%2011.3469C7.12824%2011.469%207.55763%2011.7425%207.78094%2012.0683C7.99918%2012.3867%208.09281%2012.6642%208.19029%2013.2816C8.22875%2013.5252%208.27057%2013.7697%208.28323%2013.8251C8.35644%2014.1451%208.4989%2014.4008%208.67544%2014.5293C8.95583%2014.7333%209.43865%2014.7459%209.91362%2014.5618C9.99423%2014.5305%2010.0642%2014.5089%2010.0691%2014.5138C10.0864%2014.5308%209.84719%2014.6899%209.67847%2014.7737C9.45143%2014.8864%209.2709%2014.93%209.03102%2014.93C8.59601%2014.93%208.23486%2014.7101%207.9335%2014.2616C7.87419%2014.1733%207.7409%2013.909%207.63729%2013.6741C7.3191%2012.9528%207.16199%2012.7331%206.79255%2012.4926C6.47104%2012.2834%206.05641%2012.2459%205.74449%2012.3979C5.33475%2012.5976%205.22043%2013.118%205.51389%2013.4478C5.63053%2013.5789%205.84803%2013.6919%206.02588%2013.7139C6.35861%2013.7551%206.64455%2013.5035%206.64455%2013.1696C6.64455%2012.9528%206.56071%2012.8291%206.34966%2012.7344C6.0614%2012.6051%205.75156%2012.7562%205.75304%2013.0254C5.75368%2013.1402%205.80396%2013.2122%205.91971%2013.2643C5.99397%2013.2977%205.99569%2013.3003%205.93514%2013.2878C5.67066%2013.2333%205.6087%2012.9164%205.82135%2012.706C6.07667%2012.4535%206.60461%2012.5649%206.78591%2012.9097C6.86208%2013.0545%206.87092%2013.3429%206.80451%2013.517C6.6559%2013.9068%206.22256%2014.1117%205.78297%2014.0002C5.48368%2013.9242%205.36181%2013.842%205.00097%2013.4726C4.37395%2012.8306%204.13053%2012.7062%203.22657%2012.566L3.05335%2012.5391L3.25046%2012.3737Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M0.308383%200.883984C2.40235%203.40996%203.84457%204.45213%204.00484%204.67231C4.13717%204.85412%204.08737%205.01757%203.86067%205.14567C3.7346%205.21689%203.47541%205.28905%203.34564%205.28905C3.19887%205.28905%203.14847%205.23278%203.14847%205.23278C3.06337%205.15255%203.01544%205.16658%202.5784%204.39555C1.97166%203.45981%201.46389%202.68357%201.45004%202.67057C1.41801%202.64052%201.41856%202.64153%202.51654%204.59413C2.69394%205.0011%202.55182%205.15049%202.55182%205.20845C2.55182%205.32636%202.51946%205.38834%202.37311%205.55059C2.12914%205.8211%202.02008%206.12505%201.94135%206.7541C1.8531%207.45926%201.60492%207.95737%200.917156%208.80989C0.514562%209.30893%200.448686%209.4004%200.3471%209.60153C0.219144%209.85482%200.183961%209.99669%200.169701%2010.3165C0.154629%2010.6547%200.183983%2010.8732%200.287934%2011.1965C0.378939%2011.4796%200.473932%2011.6665%200.716778%2012.0403C0.926351%2012.3629%201.04702%2012.6027%201.04702%2012.6965C1.04702%2012.7711%201.06136%2012.7712%201.38611%2012.6983C2.16328%2012.5239%202.79434%2012.2171%203.14925%2011.8411C3.36891%2011.6084%203.42048%2011.4799%203.42215%2011.1611C3.42325%2010.9525%203.41587%2010.9088%203.35914%2010.7888C3.2668%2010.5935%203.09869%2010.4311%202.72817%2010.1794C2.2427%209.84953%202.03534%209.58398%201.97807%209.21878C1.93108%208.91913%201.98559%208.70771%202.25416%208.14825C2.53214%207.56916%202.60103%207.32239%202.64763%206.73869C2.67773%206.36158%202.71941%206.21286%202.82842%206.09348C2.94212%205.969%203.04447%205.92684%203.32584%205.88863C3.78457%205.82635%204.07667%205.70839%204.31677%205.48849C4.52505%205.29772%204.61221%205.11391%204.62558%204.8372L4.63574%204.62747L4.51934%204.49259C4.09783%204.00411%200.0261003%200.5%200.000160437%200.5C-0.00538105%200.5%200.133325%200.672804%200.308383%200.883984ZM1.28364%2010.6992C1.37894%2010.5314%201.3283%2010.3158%201.16889%2010.2104C1.01827%2010.1109%200.78428%2010.1578%200.78428%2010.2875C0.78428%2010.3271%200.806303%2010.3559%200.855937%2010.3813C0.939514%2010.424%200.945581%2010.4721%200.879823%2010.5703C0.81323%2010.6698%200.818604%2010.7573%200.894991%2010.8167C1.0181%2010.9125%201.19237%2010.8598%201.28364%2010.6992Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M4.92523%205.99865C4.70988%206.06439%204.50054%206.29124%204.43574%206.5291C4.39621%206.67421%204.41864%206.92875%204.47785%207.00736C4.57351%207.13433%204.66602%207.16778%204.91651%207.16603C5.40693%207.16263%205.83327%206.95358%205.88284%206.69224C5.92347%206.47801%205.73622%206.18112%205.4783%206.05078C5.34521%205.98355%205.06217%205.95688%204.92523%205.99865ZM5.49853%206.44422C5.57416%206.33741%205.54107%206.22198%205.41245%206.14391C5.1675%205.99525%204.79708%206.11827%204.79708%206.34826C4.79708%206.46274%204.99025%206.58765%205.16731%206.58765C5.28516%206.58765%205.44644%206.5178%205.49853%206.44422Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2294%22%20height%3D%2294%22%20viewBox%3D%220%200%2094%2094%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%20%20%3Cpath%20d%3D%22M92%2047C92%2022.1472%2071.8528%202%2047%202C22.1472%202%202%2022.1472%202%2047C2%2071.8528%2022.1472%2092%2047%2092%22%20stroke%3D%22%232172E5%22%20stroke-width%3D%223%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E\"","export default \"f89237c6bc3f84db.png\"","module.exports=function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,\"a\",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p=\"\",r(r.s=3)}([function(e,t){e.exports=function(e){return e&&e.__esModule?e:{default:e}}},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}},function(e,t,r){\"use strict\";function n(){return Math.floor(9e4*Math.random())+1e4}Object.defineProperty(t,\"__esModule\",{value:!0}),t.sendAsyncWrapper=function(e,t){var r=this;return new Promise(function(o,a){r.sendAsync({jsonrpc:\"2.0\",id:n(),method:e,params:t||[]},function(e,t){e?a(e):o(t.result)})})},t.sendFortmaticAsyncWrapper=function(e){var t=this;return new Promise(function(r,n){t.getProvider().sendFortmaticAsync(e,function(e,t){e?n(e):r(t?t.result:{})})})},t.randomId=n,t.findExistingResponse=function(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},t=new v(m);return t.params=[e],i.sendFortmaticAsyncWrapper.call(g,t)}};var v=function e(t,r){(0,o.default)(this,e),this.id=(0,i.randomId)(),this.method=t,this.params=r?[r]:[{}]}},function(e,t,r){\"use strict\";var n=r(0);Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var o=n(r(6)),a=n(r(9)),i=n(r(1)),s=n(r(10)),c=r(11),u=n(r(12)),l=r(2),f=function(){function e(t,r){if((0,i.default)(this,e),this.fortmaticClient=t,this.requests={},this.queue=[],this.account=null,this.network=null,this.isFortmatic=!0,this.overlayReady=!1,this.isLoggedIn=!1,this.postMessages={FORTMATIC_HANDLE_BATCH_REQUEST:\"FORTMATIC_HANDLE_BATCH_REQUEST\",FORTMATIC_HANDLE_REQUEST:\"FORTMATIC_HANDLE_REQUEST\",FORTMATIC_HANDLE_FORTMATIC_REQUEST:\"FORTMATIC_HANDLE_FORTMATIC_REQUEST\",FORTMATIC_HANDLE_RESPONSE:\"FORTMATIC_HANDLE_RESPONSE\",FORTMATIC_OVERLAY_READY:\"FORTMATIC_OVERLAY_READY\",FORTMATIC_SHOW_OVERLAY:\"FORTMATIC_SHOW_OVERLAY\",FORTMATIC_HIDE_OVERLAY:\"FORTMATIC_HIDE_OVERLAY\",FORTMATIC_USER_DENIED:\"FORTMATIC_USER_DENIED\",FORTMATIC_USER_LOGOUT:\"FORTMATIC_USER_LOGOUT\",FORTMATIC_UNAUTHORIZED_API_KEY:\"FORTMATIC_UNAUTHORIZED_API_KEY\"},!r.API_KEY)throw new Error(\"Please provide a Fortmatic API key that you acquired from the developer dashboard.\");this.options={API_KEY:r.API_KEY,ETH_NETWORK:r.ETH_NETWORK,DOMAIN_ORIGIN:window.location?window.location.origin:\"\",version:c.version},this.queryParams=btoa(JSON.stringify(this.options)),this.constructPostMessage(),this.overlay=this.createOverlay(),this.listenMessage()}return(0,s.default)(e,[{key:\"constructPostMessage\",value:function(){var e=this;Object.keys(this.postMessages).map(function(t){e.postMessages[t]+=\"-\".concat(e.queryParams)})}},{key:\"createOverlay\",value:function(){var e=this;return new Promise(function(t,r){var n=function(){if(function(){var t=!0,r=!1,n=void 0;try{for(var o,a=document.getElementsByClassName(\"fortmatic-iframe\")[Symbol.iterator]();!(t=(o=a.next()).done);t=!0)if(o.value.src.includes(e.queryParams))return!1}catch(e){r=!0,n=e}finally{try{t||null==a.return||a.return()}finally{if(r)throw n}}return!0}()){var r=document.createElement(\"style\");r.innerHTML=u.default.css,r.type=\"text/css\",document.head.appendChild(r);var n=document.createElement(\"iframe\");n.className=\"fortmatic-iframe\",n.src=\"\".concat(e.fortmaticClient,\"/send?params=\").concat(e.queryParams),document.body.appendChild(n);var o=document.createElement(\"img\");o.src=\"https://static.fortmatic.com/assets/trans.gif\",document.body.appendChild(o),t({iframe:n})}else console.error(\"Fortmatic: Duplicate instances found.\")};[\"loaded\",\"interactive\",\"complete\"].indexOf(document.readyState)>-1?n():window.addEventListener(\"load\",n.bind(e),!1)})}},{key:\"showOverlay\",value:function(){var e=(0,a.default)(o.default.mark(function e(){return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.overlay;case 2:e.sent.iframe.style.display=\"block\";case 4:case\"end\":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:\"hideOverlay\",value:function(){var e=(0,a.default)(o.default.mark(function e(){return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.overlay;case 2:e.sent.iframe.style.display=\"none\";case 4:case\"end\":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:\"sendAsync\",value:function(e,t){e.length>0?this.enqueue({payload:{id:(0,l.randomId)(),batch:e.map(function(e){return e.id=(0,l.randomId)(),e}),method:\"eth_batchRequest\"},cb:t}):this.enqueue({payload:e,cb:t})}},{key:\"sendFortmaticAsync\",value:function(e,t){this.enqueue({payload:e,cb:t,isNative:!0})}},{key:\"send\",value:function(e,t){if(\"string\"==typeof e)return l.sendAsyncWrapper.call(this,e,t);if(!t){console.warn(\"Non-async web3 methods will be deprecated in web3 > 1.0, and are not supported by the Fortmatic provider. An async method to be used instead.\"),this.sendAsync(e,function(){});var r={};switch(e.method){case\"eth_accounts\":r=this.account?[this.account]:[];break;case\"eth_coinbase\":r=this.account;break;case\"net_version\":r=this.network||(this.options.API_KEY.startsWith(\"pk_live\")?1:4);break;case\"eth_uninstallFilter\":r=!0;break;default:r={}}return{id:e.id,jsonrpc:e.jsonrpc,result:r}}this.sendAsync(e,t)}},{key:\"enqueue\",value:function(e){this.queue.push(e),this.overlayReady&&this.dequeue()}},{key:\"dequeue\",value:function(){var e=(0,a.default)(o.default.mark(function e(){var t,r,n,a=this;return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(0!==this.queue.length){e.next=2;break}return e.abrupt(\"return\");case 2:if(!(t=this.queue.shift())){e.next=11;break}return r=t.payload,n=t.cb,r.id=(0,l.randomId)(),e.next=9,this.postMessage(t.isNative?this.postMessages.FORTMATIC_HANDLE_FORTMATIC_REQUEST:this.postMessages.FORTMATIC_HANDLE_REQUEST,t.payload);case 9:r.batch&&r.batch.length>0?(r.batch.forEach(function(e){a.requests[e.id]={parentId:r.id,payload:e,cb:function(e,t){var n=a.requests[r.id].batchResponse;if(e&&e.response&&!(0,l.findExistingResponse)(n,e.response.id))throw n.push({jsonrpc:\"2.0\",id:e.response.id,error:{code:e.response.code,message:e.response.message}}),a.requests[r.id].cb(null,n),e.response;if(t&&t.result&&!(0,l.findExistingResponse)(n,t.id))return n.push(t);throw new Error(\"Fortmatic: unexpected callback behavior\")}}}),this.requests[r.id]={payload:r,cb:n,batchResponse:[]}):this.requests[r.id]={payload:r,cb:n},this.dequeue();case 11:case\"end\":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:\"postMessage\",value:function(){var e=(0,a.default)(o.default.mark(function e(t,r){var n;return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.overlay;case 2:if(!(n=e.sent).iframe.contentWindow){e.next=7;break}n.iframe.contentWindow.postMessage({msgType:t,payload:r},\"*\"),e.next=8;break;case 7:throw new Error(\"Fortmatic: Modal is not ready.\");case 8:case\"end\":return e.stop()}},e,this)}));return function(t,r){return e.apply(this,arguments)}}()},{key:\"enable\",value:function(){return l.sendAsyncWrapper.call(this,\"eth_accounts\")}},{key:\"listenMessage\",value:function(){var e=this;window.addEventListener(\"message\",function(t){if(t.origin===e.fortmaticClient){var r=t.data.response?t.data.response.id:null;switch(t.data.msgType){case e.postMessages.FORTMATIC_OVERLAY_READY:e.overlayReady=!0,e.dequeue();break;case e.postMessages.FORTMATIC_HANDLE_RESPONSE:try{e.requests[r].cb(null,t.data.response);var n=e.requests[r].parentId;n&&e.requests[n].payload.batch.length===e.requests[n].batchResponse.length&&e.requests[n].cb(null,e.requests[n].batchResponse),\"eth_accounts\"===e.requests[r].payload.method?e.account=t.data.response.result[0]:\"eth_coinbase\"===e.requests[r].payload.method?e.account=t.data.response.result:\"net_version\"===e.requests[r].payload.method&&(e.network=t.data.response.result)}catch(e){}e.isLoggedIn=!0,e.dequeue();break;case e.postMessages.FORTMATIC_HIDE_OVERLAY:e.hideOverlay();break;case e.postMessages.FORTMATIC_SHOW_OVERLAY:e.showOverlay();break;case e.postMessages.FORTMATIC_USER_LOGOUT:e.account=null,e.network=null,e.isLoggedIn=!1;break;case e.postMessages.FORTMATIC_UNAUTHORIZED_API_KEY:throw e.overlayReady=!1,new Error(\"Given API key is not authorized to access the resource.\");case e.postMessages.FORTMATIC_USER_DENIED:if(r){var o=t.data.response&&t.data.response.message?t.data.response.message:\"Fortmatic: Modal was closed without executing action!\",a=t.data.response&&t.data.response.code?t.data.response.code:1;e.requests[r].cb({message:o,code:a,response:t.data.response})}else e.queue.forEach(function(e){return e.cb({message:\"Fortmatic: Modal was closed without executing action!\",code:1})});e.dequeue()}}})}}]),e}();t.default=f},function(e,t,r){e.exports=r(7)},function(e,t,r){var n=function(){return this||\"object\"==typeof self&&self}()||Function(\"return this\")(),o=n.regeneratorRuntime&&Object.getOwnPropertyNames(n).indexOf(\"regeneratorRuntime\")>=0,a=o&&n.regeneratorRuntime;if(n.regeneratorRuntime=void 0,e.exports=r(8),o)n.regeneratorRuntime=a;else try{delete n.regeneratorRuntime}catch(e){n.regeneratorRuntime=void 0}},function(e,t){!function(t){\"use strict\";var r,n=Object.prototype,o=n.hasOwnProperty,a=\"function\"==typeof Symbol?Symbol:{},i=a.iterator||\"@@iterator\",s=a.asyncIterator||\"@@asyncIterator\",c=a.toStringTag||\"@@toStringTag\",u=\"object\"==typeof e,l=t.regeneratorRuntime;if(l)u&&(e.exports=l);else{(l=t.regeneratorRuntime=u?e.exports:{}).wrap=_;var f=\"suspendedStart\",d=\"suspendedYield\",h=\"executing\",p=\"completed\",m={},y={};y[i]=function(){return this};var v=Object.getPrototypeOf,g=v&&v(v(L([])));g&&g!==n&&o.call(g,i)&&(y=g);var b=A.prototype=w.prototype=Object.create(y);T.prototype=b.constructor=A,A.constructor=T,A[c]=T.displayName=\"GeneratorFunction\",l.isGeneratorFunction=function(e){var t=\"function\"==typeof e&&e.constructor;return!!t&&(t===T||\"GeneratorFunction\"===(t.displayName||t.name))},l.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,A):(e.__proto__=A,c in e||(e[c]=\"GeneratorFunction\")),e.prototype=Object.create(b),e},l.awrap=function(e){return{__await:e}},O(R.prototype),R.prototype[s]=function(){return this},l.AsyncIterator=R,l.async=function(e,t,r,n){var o=new R(_(e,t,r,n));return l.isGeneratorFunction(t)?o:o.next().then(function(e){return e.done?e.value:o.next()})},O(b),b[c]=\"Generator\",b[i]=function(){return this},b.toString=function(){return\"[object Generator]\"},l.keys=function(e){var t=[];for(var r in e)t.push(r);return t.reverse(),function r(){for(;t.length;){var n=t.pop();if(n in e)return r.value=n,r.done=!1,r}return r.done=!0,r}},l.values=L,F.prototype={constructor:F,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=r,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=r,this.tryEntries.forEach(M),!e)for(var t in this)\"t\"===t.charAt(0)&&o.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=r)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if(\"throw\"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function n(n,o){return s.type=\"throw\",s.arg=e,t.next=n,o&&(t.method=\"next\",t.arg=r),!!o}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],s=i.completion;if(\"root\"===i.tryLoc)return n(\"end\");if(i.tryLoc<=this.prev){var c=o.call(i,\"catchLoc\"),u=o.call(i,\"finallyLoc\");if(c&&u){if(this.prev=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&o.call(n,\"finallyLoc\")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),M(r),m}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if(\"throw\"===n.type){var o=n.arg;M(r)}return o}}throw new Error(\"illegal catch attempt\")},delegateYield:function(e,t,n){return this.delegate={iterator:L(e),resultName:t,nextLoc:n},\"next\"===this.method&&(this.arg=r),m}}}function _(e,t,r,n){var o=t&&t.prototype instanceof w?t:w,a=Object.create(o.prototype),i=new F(n||[]);return a._invoke=function(e,t,r){var n=f;return function(o,a){if(n===h)throw new Error(\"Generator is already running\");if(n===p){if(\"throw\"===o)throw a;return k()}for(r.method=o,r.arg=a;;){var i=r.delegate;if(i){var s=I(i,r);if(s){if(s===m)continue;return s}}if(\"next\"===r.method)r.sent=r._sent=r.arg;else if(\"throw\"===r.method){if(n===f)throw n=p,r.arg;r.dispatchException(r.arg)}else\"return\"===r.method&&r.abrupt(\"return\",r.arg);n=h;var c=E(e,t,r);if(\"normal\"===c.type){if(n=r.done?p:d,c.arg===m)continue;return{value:c.arg,done:r.done}}\"throw\"===c.type&&(n=p,r.method=\"throw\",r.arg=c.arg)}}}(e,r,i),a}function E(e,t,r){try{return{type:\"normal\",arg:e.call(t,r)}}catch(e){return{type:\"throw\",arg:e}}}function w(){}function T(){}function A(){}function O(e){[\"next\",\"throw\",\"return\"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function R(e){var t;this._invoke=function(r,n){function a(){return new Promise(function(t,a){!function t(r,n,a,i){var s=E(e[r],e,n);if(\"throw\"!==s.type){var c=s.arg,u=c.value;return u&&\"object\"==typeof u&&o.call(u,\"__await\")?Promise.resolve(u.__await).then(function(e){t(\"next\",e,a,i)},function(e){t(\"throw\",e,a,i)}):Promise.resolve(u).then(function(e){c.value=e,a(c)},function(e){return t(\"throw\",e,a,i)})}i(s.arg)}(r,n,t,a)})}return t=t?t.then(a,a):a()}}function I(e,t){var n=e.iterator[t.method];if(n===r){if(t.delegate=null,\"throw\"===t.method){if(e.iterator.return&&(t.method=\"return\",t.arg=r,I(e,t),\"throw\"===t.method))return m;t.method=\"throw\",t.arg=new TypeError(\"The iterator does not provide a 'throw' method\")}return m}var o=E(n,e.iterator,t.arg);if(\"throw\"===o.type)return t.method=\"throw\",t.arg=o.arg,t.delegate=null,m;var a=o.arg;return a?a.done?(t[e.resultName]=a.value,t.next=e.nextLoc,\"return\"!==t.method&&(t.method=\"next\",t.arg=r),t.delegate=null,m):a:(t.method=\"throw\",t.arg=new TypeError(\"iterator result is not an object\"),t.delegate=null,m)}function x(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function M(e){var t=e.completion||{};t.type=\"normal\",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:\"root\"}],e.forEach(x,this),this.reset(!0)}function L(e){if(e){var t=e[i];if(t)return t.call(e);if(\"function\"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n (https://fortmatic.com/)\",license:\"MIT\",repository:{type:\"git\",url:\"https://github.com/fortmatic/fortmatic-js\"},keywords:[\"Auth\",\"Login\",\"Web3\",\"Crypto\",\"Ethereum\",\"MetaMask\",\"Wallet\",\"Blockchain\",\"Dapp\"],homepage:\"https://www.fortmatic.com\",ava:{require:[\"@babel/register\"],files:[\"test/**/*.spec.js\"],babel:{testOptions:{presets:[\"@babel/env\"],plugins:[\"@babel/plugin-proposal-function-bind\",\"@babel/plugin-transform-runtime\"]}},verbose:!0},nyc:{all:!1,\"check-coverage\":!0,\"per-file\":!0,lines:80,statements:80,functions:80,branches:80,include:[\"src/**/*.js\"],exclude:[\"*/style.js\"],require:[],reporter:[\"html\",\"lcov\"]},dependencies:{\"@babel/runtime\":\"7.3.4\"},devDependencies:{\"@babel/core\":\"7.3.4\",\"@babel/plugin-proposal-function-bind\":\"7.2.0\",\"@babel/plugin-transform-modules-commonjs\":\"7.2.0\",\"@babel/plugin-transform-runtime\":\"7.3.4\",\"@babel/preset-env\":\"7.3.4\",\"@babel/register\":\"7.0.0\",ava:\"2.2.0\",\"babel-eslint\":\"10.0.1\",\"babel-loader\":\"8.0.5\",eslint:\"5.9.0\",lodash:\"4.17.11\",nyc:\"13.1.0\",sinon:\"7.1.1\",webpack:\"4.26.1\",\"webpack-cli\":\"3.1.2\"}}},function(e,t,r){\"use strict\";t.css=\"\\n .fortmatic-iframe {\\n display: none;\\n position: fixed;\\n top: 0;\\n right: 0;\\n width: 100%;\\n height: 100%;\\n border: none;\\n border-radius: 0;\\n z-index: 2147483647;\\n }\\n\"}]);"],"names":["_path","_line","_extends","React"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mBAAe;;AC+Lf,sBAAe,0kPAA0kP;;ACvIzlP,sBAAe,0sDAA0sD;;AC7BztD,uBAAe,k3CAAk3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACwFD,oBAAe,0tLAA0tL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9DzuL,uBAAe,qmTAAqmT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpBpnT,eAAe,mcAAmc;;ACvBld,mBAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICAf,SAAc,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CA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"} \ No newline at end of file +{"version":3,"file":"snowflake.js","sources":["../src/assets/images/ethereum-logo.png","../src/assets/svg/arbitrum_logo.svg","../src/assets/svg/optimistic_ethereum.svg","../src/assets/svg/polygon-matic-logo.svg","../src/assets/images/gas-icon.svg","../src/assets/svg/matic-token-icon.svg","../src/assets/svg/dot_line.svg","../src/assets/svg/auto_router.svg","../src/assets/svg/static_route.svg","../src/assets/images/dropdown.svg","../src/assets/svg/tokenlist.svg","../src/assets/svg/logo.svg","../src/assets/images/blue-loader.svg","../src/assets/images/metamask.png","../src/locales/en-US.js","../node_modules/fortmatic/lib/fortmatic.js"],"sourcesContent":["export default \"data:image/png;base64,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\"","export default \"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20viewBox%3D%220%200%20470.287%20514.251%22%20enable-background%3D%22new%200%200%20470.287%20514.251%22%20xml%3Aspace%3D%22preserve%22%3E%3Cg%20id%3D%22Background%22%3E%3C%2Fg%3E%3Cg%20id%3D%22Logos_and_symbols%22%3E%20%3Cg%20id%3D%22SYMBOL_VER_3%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_4_3_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_1_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_1_%22%3E%20%20%3Cg%20id%3D%22_x31_-3%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_14_%22%3E%20%20%20%3Cpath%20fill%3D%22%232D374B%22%20d%3D%22M291.134%2C237.469l35.654-60.5l96.103%2C149.684l0.046%2C28.727l-0.313-197.672%20%20%20%20c-0.228-4.832-2.794-9.252-6.887-11.859L242.715%2C46.324c-4.045-1.99-9.18-1.967-13.22%2C0.063c-0.546%2C0.272-1.06%2C0.57-1.548%2C0.895%20%20%20%20l-0.604%2C0.379L59.399%2C144.983l-0.651%2C0.296c-0.838%2C0.385-1.686%2C0.875-2.48%2C1.444c-3.185%2C2.283-5.299%2C5.66-5.983%2C9.448%20%20%20%20c-0.103%2C0.574-0.179%2C1.158-0.214%2C1.749l0.264%2C161.083l89.515-138.745c11.271-18.397%2C35.825-24.323%2C58.62-24.001l26.753%2C0.706%20%20%20%20L67.588%2C409.765l18.582%2C10.697L245.692%2C157.22l70.51-0.256L157.091%2C426.849l66.306%2C38.138l7.922%2C4.556%20%20%20%20c3.351%2C1.362%2C7.302%2C1.431%2C10.681%2C0.21l175.453-101.678l-33.544%2C19.438L291.134%2C237.469z%20M304.736%2C433.395l-66.969-105.108%20%20%20%20l40.881-69.371l87.952%2C138.628L304.736%2C433.395z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%2328A0F0%22%20points%3D%22237.768%2C328.286%20304.736%2C433.395%20366.601%2C397.543%20278.648%2C258.915%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2328A0F0%22%20d%3D%22M422.937%2C355.379l-0.046-28.727l-96.103-149.684l-35.654%2C60.5l92.774%2C150.043l33.544-19.438%20%20%20%20c3.29-2.673%2C5.281-6.594%2C5.49-10.825L422.937%2C355.379z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23FFFFFF%22%20d%3D%22M20.219%2C382.469l47.369%2C27.296l157.634-252.801l-26.753-0.706c-22.795-0.322-47.35%2C5.604-58.62%2C24.001%20%20%20%20L50.334%2C319.004l-30.115%2C46.271V382.469z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%23FFFFFF%22%20points%3D%22316.202%2C156.964%20245.692%2C157.22%2086.17%2C420.462%20141.928%2C452.565%20157.091%2C426.849%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2396BEDC%22%20d%3D%22M452.65%2C156.601c-0.59-14.746-8.574-28.245-21.08-36.104L256.28%2C19.692%20%20%20%20c-12.371-6.229-27.825-6.237-40.218-0.004c-1.465%2C0.739-170.465%2C98.752-170.465%2C98.752c-2.339%2C1.122-4.592%2C2.458-6.711%2C3.975%20%20%20%20c-11.164%2C8.001-17.969%2C20.435-18.668%2C34.095v208.765l30.115-46.271L50.07%2C157.921c0.035-0.589%2C0.109-1.169%2C0.214-1.741%20%20%20%20c0.681-3.79%2C2.797-7.171%2C5.983-9.456c0.795-0.569%2C172.682-100.064%2C173.228-100.337c4.04-2.029%2C9.175-2.053%2C13.22-0.063%20%20%20%20l173.022%2C99.523c4.093%2C2.607%2C6.659%2C7.027%2C6.887%2C11.859v199.542c-0.209%2C4.231-1.882%2C8.152-5.172%2C10.825l-33.544%2C19.438%20%20%20%20l-17.308%2C10.031l-61.864%2C35.852l-62.737%2C36.357c-3.379%2C1.221-7.33%2C1.152-10.681-0.21l-74.228-42.693l-15.163%2C25.717%20%20%20%20l66.706%2C38.406c2.206%2C1.255%2C4.171%2C2.367%2C5.784%2C3.272c2.497%2C1.4%2C4.199%2C2.337%2C4.8%2C2.629c4.741%2C2.303%2C11.563%2C3.643%2C17.71%2C3.643%20%20%20%20c5.636%2C0%2C11.132-1.035%2C16.332-3.072l182.225-105.531c10.459-8.104%2C16.612-20.325%2C17.166-33.564V156.601z%22%2F%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_13_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_6_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_3_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_15_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_3_%22%3E%20%20%20%3Cg%20id%3D%22_x33__7_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic%22%3E%20%20%20%3Cg%20id%3D%22_x33__3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_10_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x34__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_2_%22%3E%20%20%20%3Cg%20id%3D%22_x33__6_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_2_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_11_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_5_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_12_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_1_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_9_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_2_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol_1_%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_1_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_7_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_8_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Monochromatic_1_%22%3E%20%20%3Cg%20id%3D%22_x33__4_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%22170%22%20height%3D%22168%22%20viewBox%3D%220%200%20170%20168%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20clip-path%3D%22url%28%23clip0%29%22%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF505F%22%2F%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF0320%22%2F%3E%3Cpath%20d%3D%22M85.05%200C132.022%200%20170.1%2037.8949%20170.1%2084.6407C170.1%20131.386%200%20131.386%200%2084.6407C0%2037.8949%2038.0782%200%2085.05%200Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.665%2064.0394L112.444%2012.3742L89.0263%2078.9477L144.665%2064.0394Z%22%20fill%3D%22%23FF4E65%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.777%2064.215L112.444%2012.3742L165.349%2058.4347L143.777%2064.215Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.551%2063.613L142.479%20124.467L88.912%2078.5213L144.551%2063.613Z%22%20fill%3D%22%23D0001A%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.663%2063.7886L142.479%20124.467L165.235%2058.0083L143.663%2063.7886Z%22%20fill%3D%22%23FF697B%22%2F%3E%3C%2Fg%3E%3Cdefs%3E%3CclipPath%20id%3D%22clip0%22%3E%3Crect%20width%3D%22170%22%20height%3D%22168%22%20fill%3D%22white%22%2F%3E%3C%2FclipPath%3E%3C%2Fdefs%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20viewBox%3D%220%200%2038.4%2033.5%22%20style%3D%22enable-background%3Anew%200%200%2038.4%2033.5%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cstyle%20type%3D%22text%2Fcss%22%3E%20.st0%7Bfill%3A%238247E5%3B%7D%3C%2Fstyle%3E%3Cg%3E%20%3Cpath%20class%3D%22st0%22%20d%3D%22M29%2C10.2c-0.7-0.4-1.6-0.4-2.4%2C0L21%2C13.5l-3.8%2C2.1l-5.5%2C3.3c-0.7%2C0.4-1.6%2C0.4-2.4%2C0L5%2C16.3%20%20c-0.7-0.4-1.2-1.2-1.2-2.1v-5c0-0.8%2C0.4-1.6%2C1.2-2.1l4.3-2.5c0.7-0.4%2C1.6-0.4%2C2.4%2C0L16%2C7.2c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v3.3l3.8-2.2V7%20%20c0-0.8-0.4-1.6-1.2-2.1l-8-4.7c-0.7-0.4-1.6-0.4-2.4%2C0L1.2%2C5C0.4%2C5.4%2C0%2C6.2%2C0%2C7v9.4c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l5.5-3.2l3.8-2.2l5.5-3.2c0.7-0.4%2C1.6-0.4%2C2.4%2C0l4.3%2C2.5c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v5c0%2C0.8-0.4%2C1.6-1.2%2C2.1%20%20L29%2C28.8c-0.7%2C0.4-1.6%2C0.4-2.4%2C0l-4.3-2.5c-0.7-0.4-1.2-1.2-1.2-2.1V21l-3.8%2C2.2v3.3c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l8.1-4.7c0.7-0.4%2C1.2-1.2%2C1.2-2.1V17c0-0.8-0.4-1.6-1.2-2.1L29%2C10.2z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M10.0047%209.26921H10.2714C11.0078%209.26921%2011.6047%209.86617%2011.6047%2010.6025V12.1359C11.6047%2012.7987%2012.142%2013.3359%2012.8047%2013.3359C13.4675%2013.3359%2014.0047%2012.7995%2014.0047%2012.1367V5.22059C14.0047%204.86697%2013.7758%204.56227%2013.5258%204.31223L10.6714%201.33594M4.00472%202.00254H8.00472C8.7411%202.00254%209.33805%202.59949%209.33805%203.33587V14.0015H2.67139V3.33587C2.67139%202.59949%203.26834%202.00254%204.00472%202.00254ZM14.0047%205.33587C14.0047%206.07225%2013.4078%206.66921%2012.6714%206.66921C11.935%206.66921%2011.3381%206.07225%2011.3381%205.33587C11.3381%204.59949%2011.935%204.00254%2012.6714%204.00254C13.4078%204.00254%2014.0047%204.59949%2014.0047%205.33587Z%22%20stroke%3D%22white%22%2F%3E%3Cline%20x1%3D%224%22%20y1%3D%229.99414%22%20x2%3D%228%22%20y2%3D%229.99414%22%20stroke%3D%22white%22%2F%3E%3Cline%20x1%3D%224%22%20y1%3D%2211.9941%22%20x2%3D%228%22%20y2%3D%2211.9941%22%20stroke%3D%22white%22%2F%3E%3Cpath%20d%3D%22M4%208.16113H8%22%20stroke%3D%22white%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%221024%22%20height%3D%221024%22%20viewBox%3D%220%200%201024%201024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Ccircle%20cx%3D%22512%22%20cy%3D%22512%22%20r%3D%22512%22%20fill%3D%22%238247E5%22%2F%3E%3Cpath%20d%3D%22M681.469%20402.456C669.189%20395.312%20653.224%20395.312%20639.716%20402.456L543.928%20457.228L478.842%20492.949L383.055%20547.721C370.774%20554.865%20354.81%20554.865%20341.301%20547.721L265.162%20504.856C252.882%20497.712%20244.286%20484.614%20244.286%20470.325V385.786C244.286%20371.498%20251.654%20358.4%20265.162%20351.256L340.073%20309.581C352.353%20302.437%20368.318%20302.437%20381.827%20309.581L456.737%20351.256C469.018%20358.4%20477.614%20371.498%20477.614%20385.786V440.558L542.7%20403.646V348.874C542.7%20334.586%20535.332%20321.488%20521.824%20314.344L383.055%20235.758C370.774%20228.614%20354.81%20228.614%20341.301%20235.758L200.076%20314.344C186.567%20321.488%20179.199%20334.586%20179.199%20348.874V507.237C179.199%20521.525%20186.567%20534.623%20200.076%20541.767L341.301%20620.353C353.582%20627.498%20369.546%20627.498%20383.055%20620.353L478.842%20566.772L543.928%20529.86L639.716%20476.279C651.996%20469.135%20667.961%20469.135%20681.469%20476.279L756.38%20517.953C768.66%20525.098%20777.257%20538.195%20777.257%20552.484V637.023C777.257%20651.312%20769.888%20664.409%20756.38%20671.553L681.469%20714.419C669.189%20721.563%20653.224%20721.563%20639.716%20714.419L564.805%20672.744C552.525%20665.6%20543.928%20652.502%20543.928%20638.214V583.442L478.842%20620.353V675.125C478.842%20689.414%20486.21%20702.512%20499.719%20709.656L640.944%20788.242C653.224%20795.386%20669.189%20795.386%20682.697%20788.242L823.922%20709.656C836.203%20702.512%20844.799%20689.414%20844.799%20675.125V516.763C844.799%20502.474%20837.431%20489.377%20823.922%20482.232L681.469%20402.456Z%22%20fill%3D%22white%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%22100%25%22%20height%3D%2235%22%20%20viewBox%3D%22800%200%20300%20200%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%20%20%20%20%3Cline%20x1%3D%220%22%20x2%3D%222000%22%20y1%3D%22100%22%20y2%3D%22100%22%20stroke%3D%22currentColor%22%20stroke-width%3D%2220%22%20stroke-linecap%3D%22round%22%20stroke-dasharray%3D%221%2C%2045%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2223%22%20height%3D%2220%22%20viewBox%3D%220%200%2023%2020%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cdefs%3E%20%3ClinearGradient%20id%3D%22gradient1%22%20x1%3D%220%22%20y1%3D%220%22%20x2%3D%221%22%20y2%3D%220%22%20gradientTransform%3D%22rotate%2895%29%22%3E%20%20%20%20%3Cstop%20id%3D%22stop1%22%20offset%3D%220%22%20stop-color%3D%22%232274E2%22%2F%3E%20%20%20%20%3Cstop%20id%3D%22stop1%22%20offset%3D%220.5%22%20stop-color%3D%22%232274E2%22%2F%3E%20%20%20%20%3Cstop%20id%3D%22stop2%22%20offset%3D%221%22%20stop-color%3D%22%233FB672%22%20%2F%3E%20%20%3C%2FlinearGradient%3E%20%20%3C%2Fdefs%3E%3Cpath%20d%3D%22M16%2016C10%2016%209%2010%205%2010M16%2016C16%2017.6569%2017.3431%2019%2019%2019C20.6569%2019%2022%2017.6569%2022%2016C22%2014.3431%2020.6569%2013%2019%2013C17.3431%2013%2016%2014.3431%2016%2016ZM5%2010C9%2010%2010%204%2016%204M5%2010H1.5M16%204C16%205.65685%2017.3431%207%2019%207C20.6569%207%2022%205.65685%2022%204C22%202.34315%2020.6569%201%2019%201C17.3431%201%2016%202.34315%2016%204Z%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20stroke%3D%22url%28%23gradient1%29%22%20%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2022%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M19%2018C19%2018.5523%2018.5523%2019%2018%2019V21C19.6569%2021%2021%2019.6569%2021%2018H19ZM18%2019C17.4477%2019%2017%2018.5523%2017%2018H15C15%2019.6569%2016.3431%2021%2018%2021V19ZM17%2018C17%2017.4477%2017.4477%2017%2018%2017V15C16.3431%2015%2015%2016.3431%2015%2018H17ZM18%2017C18.5523%2017%2019%2017.4477%2019%2018H21C21%2016.3431%2019.6569%2015%2018%2015V17ZM8%207H16V5H8V7ZM16%2011H8V13H16V11ZM8%2019H16V17H8V19ZM4%2015C4%2017.2091%205.79086%2019%208%2019V17C6.89543%2017%206%2016.1046%206%2015H4ZM8%2011C5.79086%2011%204%2012.7909%204%2015H6C6%2013.8954%206.89543%2013%208%2013V11ZM18%209C18%2010.1046%2017.1046%2011%2016%2011V13C18.2091%2013%2020%2011.2091%2020%209H18ZM16%207C17.1046%207%2018%207.89543%2018%209H20C20%206.79086%2018.2091%205%2016%205V7ZM7%206C7%206.55228%206.55228%207%206%207V9C7.65685%209%209%207.65685%209%206H7ZM6%207C5.44772%207%205%206.55228%205%206H3C3%207.65685%204.34315%209%206%209V7ZM5%206C5%205.44772%205.44772%205%206%205V3C4.34315%203%203%204.34315%203%206H5ZM6%205C6.55228%205%207%205.44772%207%206H9C9%204.34315%207.65685%203%206%203V5Z%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%227%22%20viewBox%3D%220%200%2012%207%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%20%20%20%20%3Cpath%20d%3D%22M0.97168%201L6.20532%206L11.439%201%22%20stroke%3D%22%23AEAEAE%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%22225%22%20height%3D%22225%22%20viewBox%3D%220%200%20225%20225%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M74.8125%20190.529C65.7561%20190.513%2055.5298%20183.748%2051.9715%20175.42L19.9417%20100.456C16.3834%2092.1277%2020.8404%2085.39%2029.8968%2085.4068L111.417%2085.5579C120.473%2085.5747%20130.699%2092.3395%20134.258%20100.668L166.288%20175.632C169.846%20183.96%20165.389%20190.697%20156.332%20190.681L74.8125%20190.529Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint0_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint1_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint2_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint3_radial%29%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M92.958%20165.95C82.7695%20165.931%2071.265%20158.321%2067.2619%20148.952L26.2489%2052.9632C22.2458%2043.5941%2027.26%2036.0143%2037.4485%2036.0332L141.832%2036.2266C152.02%2036.2455%20163.525%2043.8559%20167.528%2053.225L208.541%20149.214C212.544%20158.583%20207.53%20166.163%20197.341%20166.144L92.958%20165.95ZM71.3614%20148.959C74.475%20156.246%2083.4229%20162.166%2091.3473%20162.18L195.73%20162.374C203.655%20162.388%20207.555%20156.493%20204.441%20149.206L163.428%2053.2174C160.315%2045.9304%20151.367%2040.0111%20143.442%2039.9964L39.0592%2039.803C31.1349%2039.7883%2027.2349%2045.6837%2030.3485%2052.9708L71.3614%20148.959Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M68.565%2053.3425C81.1781%2053.3659%2095.4205%2062.7875%20100.376%2074.3862C105.332%2085.985%2099.1246%2095.3687%2086.5115%2095.3454C73.8984%2095.322%2059.6559%2085.9004%2054.7001%2074.3016C49.7443%2062.7028%2055.9518%2053.3191%2068.565%2053.3425Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M90.6891%20104.981C103.302%20105.004%20117.545%20114.425%20122.5%20126.024C127.456%20137.623%20121.249%20147.007%20108.636%20146.983C96.0225%20146.96%2081.7801%20137.538%2076.8243%20125.94C71.8685%20114.341%2078.076%20104.957%2090.6891%20104.981Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M147.538%20105.142C160.151%20105.166%20174.394%20114.587%20179.349%20126.186C184.305%20137.785%20178.098%20147.168%20165.485%20147.145C152.871%20147.122%20138.629%20137.7%20133.673%20126.101C128.717%20114.503%20134.925%20105.119%20147.538%20105.142Z%22%20fill%3D%22%23131313%22%2F%3E%3Cdefs%3E%3CradialGradient%20id%3D%22paint0_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%28134.41%2068.3006%29%20rotate%28-33.9533%29%20scale%2890.6795%2083.3208%29%22%3E%3Cstop%20offset%3D%220.661458%22%20stop-color%3D%22%23C4FCF8%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint1_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%2842.7873%20129.218%29%20rotate%28-24.1606%29%20scale%28213.359%20196.045%29%22%3E%3Cstop%20stop-color%3D%22%23FF0099%22%20stop-opacity%3D%220.9%22%2F%3E%3Cstop%20offset%3D%220.770833%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint2_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%28176.854%20148.655%29%20rotate%28-53.4908%29%20scale%28107.342%2098.6309%29%22%3E%3Cstop%20stop-color%3D%22%23FFEC43%22%2F%3E%3Cstop%20offset%3D%220.805707%22%20stop-color%3D%22%23FFF6A8%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint3_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%2857.5443%2053.4752%29%20rotate%2820.3896%29%20scale%28137.027%20125.907%29%22%3E%3Cstop%20offset%3D%220.125%22%20stop-color%3D%22%235886FE%22%20stop-opacity%3D%220.46%22%2F%3E%3Cstop%20offset%3D%220.673044%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3C%2Fdefs%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2214%22%20height%3D%2215%22%20viewBox%3D%220%200%2014%2015%22%20fill%3D%22black%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20style%3D%22mix-blend-mode%3Adarken%22%3E%3Cpath%20d%3D%22M4.15217%201.55141C3.96412%201.52242%203.95619%201.51902%204.04468%201.5055C4.21427%201.47958%204.61472%201.51491%204.89067%201.58012C5.53489%201.73232%206.12109%202.12221%206.74683%202.81466L6.91307%202.99862L7.15088%202.96062C8.15274%202.8006%209.17194%202.92778%2010.0244%203.31918C10.2589%203.42686%2010.6287%203.64121%2010.6749%203.69629C10.6896%203.71384%2010.7166%203.82684%2010.7349%203.94742C10.7982%204.36458%2010.7665%204.68434%2010.6382%204.92317C10.5683%205.05313%2010.5644%205.09432%2010.6114%205.20554C10.6489%205.2943%2010.7534%205.35999%2010.8569%205.35985C11.0687%205.35956%2011.2968%205.0192%2011.4024%204.54561L11.4444%204.3575L11.5275%204.45109C11.9835%204.96459%2012.3417%205.66488%2012.4032%206.16335L12.4192%206.29332L12.3426%206.17517C12.2107%205.97186%2012.0781%205.83346%2011.9084%205.72183C11.6024%205.52062%2011.2789%205.45215%2010.4222%205.40727C9.64839%205.36675%209.21045%205.30106%208.77621%205.16032C8.03738%204.9209%207.66493%204.60204%206.78729%203.4576C6.39748%202.94928%206.15654%202.66804%205.91687%202.44155C5.37228%201.92691%204.83716%201.65701%204.15217%201.55141Z%22%2F%3E%3Cpath%20d%3D%22M10.8494%202.68637C10.8689%202.34575%2010.9153%202.12108%2011.0088%201.9159C11.0458%201.83469%2011.0804%201.76822%2011.0858%201.76822C11.0911%201.76822%2011.075%201.82816%2011.05%201.90142C10.9821%202.10054%2010.9709%202.3729%2011.0177%202.68978C11.0771%203.09184%2011.1109%203.14985%2011.5385%203.58416C11.739%203.78788%2011.9723%204.0448%2012.0568%204.15511L12.2106%204.35568L12.0568%204.21234C11.8688%204.03705%2011.4364%203.6952%2011.3409%203.64633C11.2768%203.61356%2011.2673%203.61413%2011.2278%203.65321C11.1914%203.68922%2011.1837%203.74333%2011.1787%203.99915C11.1708%204.39786%2011.1161%204.65377%2010.9842%204.90965C10.9128%205.04805%2010.9015%205.01851%2010.9661%204.8623C11.0143%204.74566%2011.0192%204.69439%2011.0189%204.30842C11.0181%203.53291%2010.9255%203.34647%2010.3823%203.02709C10.2447%202.94618%2010.0179%202.8295%209.87839%202.76778C9.73887%202.70606%209.62805%202.6523%209.63208%202.64828C9.64746%202.63307%2010.1772%202.78675%2010.3905%202.86828C10.7077%202.98954%2010.76%203.00526%2010.7985%202.99063C10.8244%202.98082%2010.8369%202.90608%2010.8494%202.68637Z%22%2F%3E%3Cpath%20d%3D%22M4.51745%204.01304C4.13569%203.49066%203.89948%202.68973%203.95062%202.091L3.96643%201.90572L4.05333%201.92148C4.21652%201.95106%204.49789%202.05515%204.62964%202.13469C4.9912%202.35293%205.14773%202.64027%205.30697%203.37811C5.35362%203.59423%205.41482%203.8388%205.44298%203.9216C5.48831%204.05487%205.65962%204.36617%205.7989%204.56834C5.89922%204.71395%205.83258%204.78295%205.61082%204.76305C5.27215%204.73267%204.8134%204.41799%204.51745%204.01304Z%22%2F%3E%3Cpath%20d%3D%22M10.3863%207.90088C8.60224%207.18693%207.97389%206.56721%207.97389%205.52157C7.97389%205.36769%207.97922%205.24179%207.98571%205.24179C7.99221%205.24179%208.06124%205.29257%208.1391%205.35465C8.50088%205.64305%208.906%205.76623%2010.0275%205.92885C10.6875%206.02455%2011.0589%206.10185%2011.4015%206.21477C12.4904%206.57371%2013.1641%207.30212%2013.3248%208.29426C13.3715%208.58255%2013.3441%209.12317%2013.2684%209.4081C13.2087%209.63315%2013.0263%2010.0388%2012.9779%2010.0544C12.9645%2010.0587%2012.9514%2010.0076%2012.9479%209.93809C12.9296%209.56554%2012.7402%209.20285%2012.4221%208.93116C12.0604%208.62227%2011.5745%208.37633%2010.3863%207.90088Z%22%2F%3E%3Cpath%20d%3D%22M9.13385%208.19748C9.11149%208.06527%209.07272%207.89643%209.04769%207.82228L9.00217%207.68748L9.08672%207.7818C9.20374%207.91233%209.2962%208.07937%209.37457%208.30185C9.43438%208.47165%209.44111%208.52215%209.44066%208.79807C9.4402%209.06896%209.43273%209.12575%209.3775%209.27858C9.29042%209.51959%209.18233%209.69048%209.00097%209.87391C8.67507%2010.2036%208.25607%2010.3861%207.65143%2010.4618C7.54633%2010.4749%207.24%2010.4971%206.97069%2010.511C6.292%2010.5461%205.84531%2010.6186%205.44393%2010.7587C5.38623%2010.7788%205.3347%2010.7911%205.32947%2010.7859C5.31323%2010.7698%205.58651%2010.6079%205.81223%2010.4998C6.1305%2010.3474%206.44733%2010.2643%207.15719%2010.1468C7.50785%2010.0887%207.86998%2010.0183%207.96194%209.99029C8.83033%209.72566%209.27671%209.04276%209.13385%208.19748Z%22%2F%3E%3Cpath%20d%3D%22M9.95169%209.64109C9.71465%209.13463%209.66022%208.64564%209.79009%208.18961C9.80399%208.14088%209.82632%208.101%209.83976%208.101C9.85319%208.101%209.90913%208.13105%209.96404%208.16777C10.0733%208.24086%2010.2924%208.36395%2010.876%208.68023C11.6043%209.0749%2012.0196%209.3805%2012.302%209.72965C12.5493%2010.0354%2012.7023%2010.3837%2012.776%2010.8084C12.8177%2011.0489%2012.7932%2011.6277%2012.7311%2011.8699C12.5353%2012.6337%2012.0802%2013.2336%2011.4311%2013.5837C11.336%2013.635%2011.2506%2013.6771%2011.2414%2013.6773C11.2321%2013.6775%2011.2668%2013.5899%2011.3184%2013.4827C11.5367%2013.029%2011.5616%2012.5877%2011.3965%2012.0965C11.2954%2011.7957%2011.0893%2011.4287%2010.6732%2010.8084C10.1893%2010.0873%2010.0707%209.89539%209.95169%209.64109Z%22%2F%3E%3Cpath%20d%3D%22M3.25046%2012.3737C3.91252%2011.8181%204.73629%2011.4234%205.48666%2011.3022C5.81005%2011.25%206.34877%2011.2707%206.64823%2011.3469C7.12824%2011.469%207.55763%2011.7425%207.78094%2012.0683C7.99918%2012.3867%208.09281%2012.6642%208.19029%2013.2816C8.22875%2013.5252%208.27057%2013.7697%208.28323%2013.8251C8.35644%2014.1451%208.4989%2014.4008%208.67544%2014.5293C8.95583%2014.7333%209.43865%2014.7459%209.91362%2014.5618C9.99423%2014.5305%2010.0642%2014.5089%2010.0691%2014.5138C10.0864%2014.5308%209.84719%2014.6899%209.67847%2014.7737C9.45143%2014.8864%209.2709%2014.93%209.03102%2014.93C8.59601%2014.93%208.23486%2014.7101%207.9335%2014.2616C7.87419%2014.1733%207.7409%2013.909%207.63729%2013.6741C7.3191%2012.9528%207.16199%2012.7331%206.79255%2012.4926C6.47104%2012.2834%206.05641%2012.2459%205.74449%2012.3979C5.33475%2012.5976%205.22043%2013.118%205.51389%2013.4478C5.63053%2013.5789%205.84803%2013.6919%206.02588%2013.7139C6.35861%2013.7551%206.64455%2013.5035%206.64455%2013.1696C6.64455%2012.9528%206.56071%2012.8291%206.34966%2012.7344C6.0614%2012.6051%205.75156%2012.7562%205.75304%2013.0254C5.75368%2013.1402%205.80396%2013.2122%205.91971%2013.2643C5.99397%2013.2977%205.99569%2013.3003%205.93514%2013.2878C5.67066%2013.2333%205.6087%2012.9164%205.82135%2012.706C6.07667%2012.4535%206.60461%2012.5649%206.78591%2012.9097C6.86208%2013.0545%206.87092%2013.3429%206.80451%2013.517C6.6559%2013.9068%206.22256%2014.1117%205.78297%2014.0002C5.48368%2013.9242%205.36181%2013.842%205.00097%2013.4726C4.37395%2012.8306%204.13053%2012.7062%203.22657%2012.566L3.05335%2012.5391L3.25046%2012.3737Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M0.308383%200.883984C2.40235%203.40996%203.84457%204.45213%204.00484%204.67231C4.13717%204.85412%204.08737%205.01757%203.86067%205.14567C3.7346%205.21689%203.47541%205.28905%203.34564%205.28905C3.19887%205.28905%203.14847%205.23278%203.14847%205.23278C3.06337%205.15255%203.01544%205.16658%202.5784%204.39555C1.97166%203.45981%201.46389%202.68357%201.45004%202.67057C1.41801%202.64052%201.41856%202.64153%202.51654%204.59413C2.69394%205.0011%202.55182%205.15049%202.55182%205.20845C2.55182%205.32636%202.51946%205.38834%202.37311%205.55059C2.12914%205.8211%202.02008%206.12505%201.94135%206.7541C1.8531%207.45926%201.60492%207.95737%200.917156%208.80989C0.514562%209.30893%200.448686%209.4004%200.3471%209.60153C0.219144%209.85482%200.183961%209.99669%200.169701%2010.3165C0.154629%2010.6547%200.183983%2010.8732%200.287934%2011.1965C0.378939%2011.4796%200.473932%2011.6665%200.716778%2012.0403C0.926351%2012.3629%201.04702%2012.6027%201.04702%2012.6965C1.04702%2012.7711%201.06136%2012.7712%201.38611%2012.6983C2.16328%2012.5239%202.79434%2012.2171%203.14925%2011.8411C3.36891%2011.6084%203.42048%2011.4799%203.42215%2011.1611C3.42325%2010.9525%203.41587%2010.9088%203.35914%2010.7888C3.2668%2010.5935%203.09869%2010.4311%202.72817%2010.1794C2.2427%209.84953%202.03534%209.58398%201.97807%209.21878C1.93108%208.91913%201.98559%208.70771%202.25416%208.14825C2.53214%207.56916%202.60103%207.32239%202.64763%206.73869C2.67773%206.36158%202.71941%206.21286%202.82842%206.09348C2.94212%205.969%203.04447%205.92684%203.32584%205.88863C3.78457%205.82635%204.07667%205.70839%204.31677%205.48849C4.52505%205.29772%204.61221%205.11391%204.62558%204.8372L4.63574%204.62747L4.51934%204.49259C4.09783%204.00411%200.0261003%200.5%200.000160437%200.5C-0.00538105%200.5%200.133325%200.672804%200.308383%200.883984ZM1.28364%2010.6992C1.37894%2010.5314%201.3283%2010.3158%201.16889%2010.2104C1.01827%2010.1109%200.78428%2010.1578%200.78428%2010.2875C0.78428%2010.3271%200.806303%2010.3559%200.855937%2010.3813C0.939514%2010.424%200.945581%2010.4721%200.879823%2010.5703C0.81323%2010.6698%200.818604%2010.7573%200.894991%2010.8167C1.0181%2010.9125%201.19237%2010.8598%201.28364%2010.6992Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M4.92523%205.99865C4.70988%206.06439%204.50054%206.29124%204.43574%206.5291C4.39621%206.67421%204.41864%206.92875%204.47785%207.00736C4.57351%207.13433%204.66602%207.16778%204.91651%207.16603C5.40693%207.16263%205.83327%206.95358%205.88284%206.69224C5.92347%206.47801%205.73622%206.18112%205.4783%206.05078C5.34521%205.98355%205.06217%205.95688%204.92523%205.99865ZM5.49853%206.44422C5.57416%206.33741%205.54107%206.22198%205.41245%206.14391C5.1675%205.99525%204.79708%206.11827%204.79708%206.34826C4.79708%206.46274%204.99025%206.58765%205.16731%206.58765C5.28516%206.58765%205.44644%206.5178%205.49853%206.44422Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2294%22%20height%3D%2294%22%20viewBox%3D%220%200%2094%2094%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%20%20%3Cpath%20d%3D%22M92%2047C92%2022.1472%2071.8528%202%2047%202C22.1472%202%202%2022.1472%202%2047C2%2071.8528%2022.1472%2092%2047%2092%22%20stroke%3D%22%232172E5%22%20stroke-width%3D%223%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E\"","export default \"f89237c6bc3f84db.png\"","/*eslint-disable*/module.exports={messages:{\"$-\":\"$-\",\"$<0/>\":\"$<0/>\",\"${0}\":[\"$\",[\"0\"]],\"(${0})\":[\"($\",[\"0\"],\")\"],\"(View on Explorer)\":\"(View on Explorer)\",\"(clear all)\":\"(clear all)\",\"(edit)\":\"(edit)\",\"- Remove recipient\":\"- Remove recipient\",\"0 UNI / week\":\"0 UNI / week\",\"25%\":\"25%\",\"50%\":\"50%\",\"75%\":\"75%\",\"<0/> All Proposals\":\"<0/> All Proposals\",\"<0/> Votes\":\"<0/> Votes\",\"<0>Account analytics and accrued fees<1> ↗ \":\"<0>Account analytics and accrued fees<1> ↗ \",\"<0>Current Price:<1><2/><3>{0} per {1}\":[\"<0>Current Price:<1><2/><3>\",[\"0\"],\" per \",[\"1\"],\"\"],\"<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.\":\"<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.\",\"<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.\":\"<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.\",\"<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.\":\"<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.\",\"<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.\":\"<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.\",\"<0>Unlock voting to prepare for the next proposal.\":\"<0>Unlock voting to prepare for the next proposal.\",\"<0>🎉 Welcome to team Unicorn :) <1>🎉\":\"<0>🎉 Welcome to team Unicorn :) <1>🎉\",\"A minimum threshold of 0.25% of the total UNI supply is required to submit proposals\":\"A minimum threshold of 0.25% of the total UNI supply is required to submit proposals\",\"About\":\"About\",\"Accept\":\"Accept\",\"Account\":\"Account\",\"Active\":\"Active\",\"Add\":\"Add\",\"Add <0/> and <1/> to Uniswap V2\":\"Add <0/> and <1/> to Uniswap V2\",\"Add Delegate +\":\"Add Delegate +\",\"Add Liquidity\":\"Add Liquidity\",\"Add V2 Liquidity\":\"Add V2 Liquidity\",\"Add liquidity.\":\"Add liquidity.\",\"Add more liquidity\":\"Add more liquidity\",\"Add {0} to Metamask <0/>\":[\"Add \",[\"0\"],\" to Metamask <0/>\"],\"Add {0}-{1} liquidity\":[\"Add \",[\"0\"],\"-\",[\"1\"],\" liquidity\"],\"Add {0}/{1} V3 liquidity\":[\"Add \",[\"0\"],\"/\",[\"1\"],\" V3 liquidity\"],\"Added {0}\":[\"Added \",[\"0\"]],\"Address has no available claim\":\"Address has no available claim\",\"Against\":\"Against\",\"Allow LP token migration\":\"Allow LP token migration\",\"Allow high price impact trades and skip the confirm screen. Use at your own risk.\":\"Allow high price impact trades and skip the confirm screen. Use at your own risk.\",\"Allow the Uniswap Protocol to use your {0}\":[\"Allow the Uniswap Protocol to use your \",[\"0\"]],\"Allowed\":\"Allowed\",\"Amount\":\"Amount\",\"An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.\":\"An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.\",\"Approval pending <0/>\":\"Approval pending <0/>\",\"Approve\":\"Approve\",\"Approve Token\":\"Approve Token\",\"Approve {0}\":[\"Approve \",[\"0\"]],\"Approve {0} first\":[\"Approve \",[\"0\"],\" first\"],\"Approved\":\"Approved\",\"Approving\":\"Approving\",\"Approving {0}\":[\"Approving \",[\"0\"]],\"Arbiscan\":\"Arbiscan\",\"Arbitrum Bridge\":\"Arbitrum Bridge\",\"Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.\":\"Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.\",\"Are you sure?\":\"Are you sure?\",\"As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI\":\"As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI\",\"At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.\":[\"At least \",[\"0\"],\" \",[\"1\"],\" and \",[\"2\"],\" \",[\"3\"],\" will be refunded to your wallet due to selected price range.\"],\"Auto\":\"Auto\",\"Auto Router API\":\"Auto Router API\",\"Available to deposit: {0}\":[\"Available to deposit: \",[\"0\"]],\"Balance: {0}\":[\"Balance: \",[\"0\"]],\"Best for exotic pairs.\":\"Best for exotic pairs.\",\"Best for most pairs.\":\"Best for most pairs.\",\"Best for stable pairs.\":\"Best for stable pairs.\",\"Best for very stable pairs.\":\"Best for very stable pairs.\",\"Best price route costs ~{formattedGasPriceString} in gas.\":[\"Best price route costs ~\",[\"formattedGasPriceString\"],\" in gas.\"],\"Blocked address\":\"Blocked address\",\"Bridge\":\"Bridge\",\"By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.\":\"By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.\",\"By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.\":\"By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.\",\"By connecting a wallet, you agree to Uniswap Labs’ <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.\":\"By connecting a wallet, you agree to Uniswap Labs’ <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.\",\"Canceled\":\"Canceled\",\"Change\":\"Change\",\"Charts\":\"Charts\",\"Check network status\":\"Check network status\",\"Check out our v3 LP walkthrough and migration guides.\":\"Check out our v3 LP walkthrough and migration guides.\",\"Claim\":\"Claim\",\"Claim <0/> for {0}\":[\"Claim <0/> for \",[\"0\"]],\"Claim UNI\":\"Claim UNI\",\"Claim UNI Token\":\"Claim UNI Token\",\"Claim UNI reward for {0}\":[\"Claim UNI reward for \",[\"0\"]],\"Claim fees\":\"Claim fees\",\"Claim your UNI tokens\":\"Claim your UNI tokens\",\"Claimed\":\"Claimed\",\"Claimed UNI!\":\"Claimed UNI!\",\"Claimed!\":\"Claimed!\",\"Claiming\":\"Claiming\",\"Claiming UNI\":\"Claiming UNI\",\"Claiming {0} UNI\":[\"Claiming \",[\"0\"],\" UNI\"],\"Clear All\":\"Clear All\",\"Clear all\":\"Clear all\",\"Close\":\"Close\",\"Closed\":\"Closed\",\"Collect\":\"Collect\",\"Collect as WETH\":\"Collect as WETH\",\"Collect fees\":\"Collect fees\",\"Collect {0}/{1} fees\":[\"Collect \",[\"0\"],\"/\",[\"1\"],\" fees\"],\"Collected\":\"Collected\",\"Collecting\":\"Collecting\",\"Collecting fees\":\"Collecting fees\",\"Collecting fees will withdraw currently available fees for you.\":\"Collecting fees will withdraw currently available fees for you.\",\"Confirm\":\"Confirm\",\"Confirm Supply\":\"Confirm Supply\",\"Confirm Swap\":\"Confirm Swap\",\"Confirm swap\":\"Confirm swap\",\"Confirm this transaction in your wallet\":\"Confirm this transaction in your wallet\",\"Confirm transaction in wallet\":\"Confirm transaction in wallet\",\"Connect Wallet\":\"Connect Wallet\",\"Connect a wallet\":\"Connect a wallet\",\"Connect to a wallet to find pools\":\"Connect to a wallet to find pools\",\"Connect to a wallet to view your V2 liquidity.\":\"Connect to a wallet to view your V2 liquidity.\",\"Connect to a wallet to view your liquidity.\":\"Connect to a wallet to view your liquidity.\",\"Connect wallet to swap\":\"Connect wallet to swap\",\"Connected with {name}\":[\"Connected with \",[\"name\"]],\"Copied\":\"Copied\",\"Copy Address\":\"Copy Address\",\"Create Pool & Supply\":\"Create Pool & Supply\",\"Create Proposal\":\"Create Proposal\",\"Create a pair\":\"Create a pair\",\"Create a pool\":\"Create a pool\",\"Create an issue on GitHub\":\"Create an issue on GitHub\",\"Create pool and add {0}/{1} V3 liquidity\":[\"Create pool and add \",[\"0\"],\"/\",[\"1\"],\" V3 liquidity\"],\"Create pool.\":\"Create pool.\",\"Create {0}/{1} V3 pool\":[\"Create \",[\"0\"],\"/\",[\"1\"],\" V3 pool\"],\"Current price\":\"Current price\",\"Current {0} Price:\":[\"Current \",[\"0\"],\" Price:\"],\"Custom\":\"Custom\",\"Dark Theme\":\"Dark Theme\",\"Defeated\":\"Defeated\",\"Delegate Votes\":\"Delegate Votes\",\"Delegate voting power to {0}\":[\"Delegate voting power to \",[\"0\"]],\"Delegated to:\":\"Delegated to:\",\"Delegating votes\":\"Delegating votes\",\"Deposit\":\"Deposit\",\"Deposit Amounts\":\"Deposit Amounts\",\"Deposit UNI-V2 LP Tokens\":\"Deposit UNI-V2 LP Tokens\",\"Deposit liquidity\":\"Deposit liquidity\",\"Deposit tokens to the {label} network.\":[\"Deposit tokens to the \",[\"label\"],\" network.\"],\"Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.\":\"Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.\",\"Deposited liquidity:\":\"Deposited liquidity:\",\"Deposited {0} UNI-V2\":[\"Deposited \",[\"0\"],\" UNI-V2\"],\"Depositing Liquidity\":\"Depositing Liquidity\",\"Description\":\"Description\",\"Detailed\":\"Detailed\",\"Details\":\"Details\",\"Disconnect\":\"Disconnect\",\"Discord\":\"Discord\",\"Dismiss\":\"Dismiss\",\"Docs\":\"Docs\",\"Don’t see one of your v2 positions? <0>Import it.\":\"Don’t see one of your v2 positions? <0>Import it.\",\"Earned UNI tokens represent voting shares in Uniswap governance.\":\"Earned UNI tokens represent voting shares in Uniswap governance.\",\"Edit\":\"Edit\",\"Efficiency Comparison\":\"Efficiency Comparison\",\"Enter a percent\":\"Enter a percent\",\"Enter a recipient\":\"Enter a recipient\",\"Enter a valid slippage percentage\":\"Enter a valid slippage percentage\",\"Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.\":\"Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.\",\"Enter an amount\":\"Enter an amount\",\"Enter valid list location\":\"Enter valid list location\",\"Enter valid token address\":\"Enter valid token address\",\"Enter {0} amount\":[\"Enter \",[\"0\"],\" amount\"],\"Error\":\"Error\",\"Error connecting\":\"Error connecting\",\"Error connecting. Try refreshing the page.\":\"Error connecting. Try refreshing the page.\",\"Error details\":\"Error details\",\"Error importing list\":\"Error importing list\",\"Estimate may differ due to your wallet gas settings\":\"Estimate may differ due to your wallet gas settings\",\"Estimated network fee\":\"Estimated network fee\",\"Etherscan\":\"Etherscan\",\"Executed\":\"Executed\",\"Expanded results from inactive Token Lists\":\"Expanded results from inactive Token Lists\",\"Expected Output\":\"Expected Output\",\"Expert Mode\":\"Expert Mode\",\"Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.\":\"Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.\",\"Expired\":\"Expired\",\"Explore Uniswap Analytics.\":\"Explore Uniswap Analytics.\",\"Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.\":[\"Failed to switch networks from the Uniswap Interface. In order to use Uniswap on \",[\"0\"],\", you must change the network in your wallet.\"],\"Fee Tier\":\"Fee Tier\",\"Fee tier\":\"Fee tier\",\"Fetching best price...\":\"Fetching best price...\",\"Fetching best price…\":\"Fetching best price…\",\"For\":\"For\",\"For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.\":\"For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.\",\"From\":\"From\",\"From (at most)\":\"From (at most)\",\"Full Range\":\"Full Range\",\"Full range positions may earn less fees than concentrated positions. Learn more <0>here.\":\"Full range positions may earn less fees than concentrated positions. Learn more <0>here.\",\"Get support on Discord\":\"Get support on Discord\",\"Help Center\":\"Help Center\",\"Hide\":\"Hide\",\"Hide closed positions\":\"Hide closed positions\",\"High Price Impact\":\"High Price Impact\",\"How this app uses APIs\":\"How this app uses APIs\",\"I understand\":\"I understand\",\"If you purchase a token from this list, you may not be able to sell it back.\":\"If you purchase a token from this list, you may not be able to sell it back.\",\"Import\":\"Import\",\"Import List\":\"Import List\",\"Import Pool\":\"Import Pool\",\"Import V2 Pool\":\"Import V2 Pool\",\"Import at your own risk\":\"Import at your own risk\",\"In range\":\"In range\",\"Increase Liquidity\":\"Increase Liquidity\",\"Initial prices and pool share\":\"Initial prices and pool share\",\"Initializing...\":\"Initializing...\",\"Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.\":[\"Input is estimated. You will sell at most <0>\",[\"0\"],\" \",[\"1\"],\" or the transaction will revert.\"],\"Install Metamask\":\"Install Metamask\",\"Insufficient liquidity for this trade.\":\"Insufficient liquidity for this trade.\",\"Insufficient {0}\":[\"Insufficient \",[\"0\"]],\"Insufficient {0} balance\":[\"Insufficient \",[\"0\"],\" balance\"],\"Interface Settings\":\"Interface Settings\",\"Invalid pair\":\"Invalid pair\",\"Invalid pair.\":\"Invalid pair.\",\"Invalid price input\":\"Invalid price input\",\"Invalid range selected. The min price must be lower than the max price.\":\"Invalid range selected. The min price must be lower than the max price.\",\"Invalid recipient\":\"Invalid recipient\",\"Language\":\"Language\",\"Learn\":\"Learn\",\"Learn about providing liquidity\":\"Learn about providing liquidity\",\"Learn more\":\"Learn more\",\"Legal & Privacy\":\"Legal & Privacy\",\"Light Theme\":\"Light Theme\",\"Liquidity\":\"Liquidity\",\"Liquidity data not available.\":\"Liquidity data not available.\",\"Liquidity provider rewards\":\"Liquidity provider rewards\",\"Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.\":\"Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.\",\"Lists\":\"Lists\",\"Loaded\":\"Loaded\",\"Loading\":\"Loading\",\"MAX\":\"MAX\",\"Manage\":\"Manage\",\"Manage Liquidity in Rewards Pool\":\"Manage Liquidity in Rewards Pool\",\"Manage Token Lists\":\"Manage Token Lists\",\"Manage this pool.\":\"Manage this pool.\",\"Max\":\"Max\",\"Max Price\":\"Max Price\",\"Max price\":\"Max price\",\"Max slippage\":\"Max slippage\",\"Max:\":\"Max:\",\"Maximum sent\":\"Maximum sent\",\"Menu\":\"Menu\",\"Migrate\":\"Migrate\",\"Migrate Liquidity to V3\":\"Migrate Liquidity to V3\",\"Migrate V2 Liquidity\":\"Migrate V2 Liquidity\",\"Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.\":\"Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.\",\"Migrate {0}/{1} liquidity to V3\":[\"Migrate \",[\"0\"],\"/\",[\"1\"],\" liquidity to V3\"],\"Migrating\":\"Migrating\",\"Min Price\":\"Min Price\",\"Min price\":\"Min price\",\"Min:\":\"Min:\",\"Minimum received\":\"Minimum received\",\"Missing dependencies\":\"Missing dependencies\",\"Mock Toggle\":\"Mock Toggle\",\"More\":\"More\",\"Network Fee\":\"Network Fee\",\"Network Warning\":\"Network Warning\",\"Network fees exceed 50% of the swap amount!\":\"Network fees exceed 50% of the swap amount!\",\"New Position\":\"New Position\",\"No V2 Liquidity found.\":\"No V2 Liquidity found.\",\"No active pools\":\"No active pools\",\"No data\":\"No data\",\"No description.\":\"No description.\",\"No liquidity found.\":\"No liquidity found.\",\"No pool found.\":\"No pool found.\",\"No proposals found.\":\"No proposals found.\",\"No results found.\":\"No results found.\",\"Not created\":\"Not created\",\"OFF\":\"OFF\",\"ON\":\"ON\",\"ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.\":\"ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.\",\"Off\":\"Off\",\"On\":\"On\",\"Once you are happy with the rate click supply to review.\":\"Once you are happy with the rate click supply to review.\",\"Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.\":[\"Only UNI votes that were self delegated or delegated to another address before block \",[\"0\"],\" are eligible for voting.\"],\"Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.\":\"Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.\",\"Optimism Gateway\":\"Optimism Gateway\",\"Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.\":\"Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.\",\"Optimistic Etherscan\":\"Optimistic Etherscan\",\"Out of range\":\"Out of range\",\"Output is estimated.\":\"Output is estimated.\",\"Output is estimated. If the price changes by more than {0}% your transaction will revert.\":[\"Output is estimated. If the price changes by more than \",[\"0\"],\"% your transaction will revert.\"],\"Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.\":[\"Output is estimated. You will receive at least <0>\",[\"0\"],\" \",[\"1\"],\" or the transaction will revert.\"],\"Output will be sent to <0>{0}\":[\"Output will be sent to <0>\",[\"0\"],\"\"],\"Owner\":\"Owner\",\"Participating pools\":\"Participating pools\",\"Pending\":\"Pending\",\"Please confirm you would like to remove this list by typing REMOVE\":\"Please confirm you would like to remove this list by typing REMOVE\",\"Please connect to Layer 1 Ethereum\":\"Please connect to Layer 1 Ethereum\",\"Please connect to a supported network in the dropdown menu or in your wallet.\":\"Please connect to a supported network in the dropdown menu or in your wallet.\",\"Please type the word \\\"{confirmWord}\\\" to enable expert mode.\":[\"Please type the word \\\"\",[\"confirmWord\"],\"\\\" to enable expert mode.\"],\"Polygon Bridge\":\"Polygon Bridge\",\"Polygonscan\":\"Polygonscan\",\"Pool\":\"Pool\",\"Pool Found!\":\"Pool Found!\",\"Pool Rate\":\"Pool Rate\",\"Pool rate\":\"Pool rate\",\"Pool tokens in rewards pool:\":\"Pool tokens in rewards pool:\",\"Pooled {0}:\":[\"Pooled \",[\"0\"],\":\"],\"Pools Overview\":\"Pools Overview\",\"Preview\":\"Preview\",\"Price\":\"Price\",\"Price Difference:\":\"Price Difference:\",\"Price Impact\":\"Price Impact\",\"Price Impact Too High\":\"Price Impact Too High\",\"Price Updated\":\"Price Updated\",\"Price impact\":\"Price impact\",\"Price range\":\"Price range\",\"Price updated\":\"Price updated\",\"Price:\":\"Price:\",\"Prices and pool share\":\"Prices and pool share\",\"Proposal\":\"Proposal\",\"Proposal Submitted\":\"Proposal Submitted\",\"Proposal Title\":\"Proposal Title\",\"Proposals\":\"Proposals\",\"Proposals submitted by community members will appear here.\":\"Proposals submitted by community members will appear here.\",\"Proposed Action\":\"Proposed Action\",\"Proposer\":\"Proposer\",\"Protocol Disclaimer\":\"Protocol Disclaimer\",\"Queued\":\"Queued\",\"Rates\":\"Rates\",\"Read more about UNI\":\"Read more about UNI\",\"Read more about Uniswap governance\":\"Read more about Uniswap governance\",\"Read more about providing liquidity\":\"Read more about providing liquidity\",\"Read more about unsupported assets\":\"Read more about unsupported assets\",\"Recent Transactions\":\"Recent Transactions\",\"Recent transactions\":\"Recent transactions\",\"Recipient\":\"Recipient\",\"Reload the page\":\"Reload the page\",\"Remove\":\"Remove\",\"Remove <0/> and <1/>\":\"Remove <0/> and <1/>\",\"Remove Amount\":\"Remove Amount\",\"Remove Delegate\":\"Remove Delegate\",\"Remove Liquidity\":\"Remove Liquidity\",\"Remove list\":\"Remove list\",\"Removing {0} {1} and {2} {3}\":[\"Removing \",[\"0\"],\" \",[\"1\"],\" and \",[\"2\"],\" \",[\"3\"]],\"Removing {0} {1} and{2} {3}\":[\"Removing \",[\"0\"],\" \",[\"1\"],\" and\",[\"2\"],\" \",[\"3\"]],\"Request Features\":\"Request Features\",\"Reset\":\"Reset\",\"Return\":\"Return\",\"Review swap\":\"Review swap\",\"Search by token name or address\":\"Search by token name or address\",\"Search name or paste address\":\"Search name or paste address\",\"Select Pair\":\"Select Pair\",\"Select a network\":\"Select a network\",\"Select a token\":\"Select a token\",\"Select a token to find your v2 liquidity.\":\"Select a token to find your v2 liquidity.\",\"Select an action\":\"Select an action\",\"Selected Range\":\"Selected Range\",\"Self\":\"Self\",\"Self Delegate\":\"Self Delegate\",\"Set Price Range\":\"Set Price Range\",\"Set Starting Price\":\"Set Starting Price\",\"Settings\":\"Settings\",\"Share of Pool\":\"Share of Pool\",\"Share of Pool:\":\"Share of Pool:\",\"Show Portis\":\"Show Portis\",\"Show closed positions\":\"Show closed positions\",\"Simple\":\"Simple\",\"Slippage tolerance\":\"Slippage tolerance\",\"Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.\":\"Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.\",\"Something went wrong\":\"Something went wrong\",\"Something went wrong.\":\"Something went wrong.\",\"Step 1. Get UNI-V2 Liquidity tokens\":\"Step 1. Get UNI-V2 Liquidity tokens\",\"Submit new proposal\":\"Submit new proposal\",\"Submitting Proposal\":\"Submitting Proposal\",\"Submitting Vote\":\"Submitting Vote\",\"Succeeded\":\"Succeeded\",\"Success\":\"Success\",\"Supply\":\"Supply\",\"Supplying {0} {1} and {2} {3}\":[\"Supplying \",[\"0\"],\" \",[\"1\"],\" and \",[\"2\"],\" \",[\"3\"]],\"Swap\":\"Swap\",\"Swap <0/> for exactly <1/>\":\"Swap <0/> for exactly <1/>\",\"Swap Anyway\":\"Swap Anyway\",\"Swap details\":\"Swap details\",\"Swap exactly <0/> for <1/>\":\"Swap exactly <0/> for <1/>\",\"Swap failed: {0}\":[\"Swap failed: \",[\"0\"]],\"Swap summary\":\"Swap summary\",\"Swapping {0} {1} for {2} {3}\":[\"Swapping \",[\"0\"],\" \",[\"1\"],\" for \",[\"2\"],\" \",[\"3\"]],\"Take a 10 minute survey to help us improve your experience in the Uniswap app.\":\"Take a 10 minute survey to help us improve your experience in the Uniswap app.\",\"Tell us what you think ↗\":\"Tell us what you think ↗\",\"Thanks for being part of the Uniswap community <0/>\":\"Thanks for being part of the Uniswap community <0/>\",\"The % you will earn in fees.\":\"The % you will earn in fees.\",\"The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.\":\"The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.\",\"The app fetches blockchain data from The Graph’s hosted service.\":\"The app fetches blockchain data from The Graph’s hosted service.\",\"The app fetches on-chain data and constructs contract calls with an Infura API.\":\"The app fetches on-chain data and constructs contract calls with an Infura API.\",\"The app fetches the optimal trade route from a Uniswap Labs server.\":\"The app fetches the optimal trade route from a Uniswap Labs server.\",\"The app logs anonymized usage statistics in order to improve over time.\":\"The app logs anonymized usage statistics in order to improve over time.\",\"The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.\":\"The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.\",\"The cost of sending this transaction is more than half of the value of the input amount.\":\"The cost of sending this transaction is more than half of the value of the input amount.\",\"The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.\":\"The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.\",\"The estimated difference between the USD values of input and output amounts.\":\"The estimated difference between the USD values of input and output amounts.\",\"The input token cannot be transferred. There may be an issue with the input token.\":\"The input token cannot be transferred. There may be an issue with the input token.\",\"The market price is outside your specified price range. Single-asset deposit only.\":\"The market price is outside your specified price range. Single-asset deposit only.\",\"The most recent block number on this network. Prices update on every block.\":\"The most recent block number on this network. Prices update on every block.\",\"The output token cannot be transferred. There may be an issue with the output token.\":\"The output token cannot be transferred. There may be an issue with the output token.\",\"The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.\":\"The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.\",\"The price of this pool is outside of your selected range. Your position is not currently earning fees.\":\"The price of this pool is outside of your selected range. Your position is not currently earning fees.\",\"The price of this pool is within your selected range. Your position is currently earning fees.\":\"The price of this pool is within your selected range. Your position is currently earning fees.\",\"The ratio of tokens you add will set the price of this pool.\":\"The ratio of tokens you add will set the price of this pool.\",\"The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.\":\"The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.\",\"There is no liquidity data.\":\"There is no liquidity data.\",\"This app uses the following third-party APIs:\":\"This app uses the following third-party APIs:\",\"This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.\":\"This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.\",\"This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.\":\"This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.\",\"This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.\":\"This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.\",\"This token is not supported in the Uniswap Labs app\":\"This token is not supported in the Uniswap Labs app\",\"This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the\":[\"This tool will safely migrate your \",[\"0\"],\" liquidity to V3. The process is completely trustless thanks to the\"],\"This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.\":\"This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.\",\"This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.\":\"This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.\",\"Tip: Custom tokens are stored locally in your browser\":\"Tip: Custom tokens are stored locally in your browser\",\"To\":\"To\",\"To (at least)\":\"To (at least)\",\"Token not supported\":\"Token not supported\",\"Tokens\":\"Tokens\",\"Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.\":\"Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.\",\"Top pools\":\"Top pools\",\"Total deposited\":\"Total deposited\",\"Total deposits\":\"Total deposits\",\"Trade Route\":\"Trade Route\",\"Trading\":\"Trading\",\"Transaction Settings\":\"Transaction Settings\",\"Transaction Submitted\":\"Transaction Submitted\",\"Transaction completed in\":\"Transaction completed in\",\"Transaction deadline\":\"Transaction deadline\",\"Transaction pending\":\"Transaction pending\",\"Transaction rejected.\":\"Transaction rejected.\",\"Transaction submitted\":\"Transaction submitted\",\"Transfer Token\":\"Transfer Token\",\"Try Again\":\"Try Again\",\"Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.\":\"Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.\",\"Turn On Expert Mode\":\"Turn On Expert Mode\",\"UNI has arrived\":\"UNI has arrived\",\"UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.\":\"UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.\",\"UNI {0}/{1} Burned\":[\"UNI \",[\"0\"],\"/\",[\"1\"],\" Burned\"],\"UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.\":[\"UNI-V2 LP tokens are required. Once you've added liquidity to the \",[\"0\"],\"-\",[\"1\"],\" pool you can stake your liquidity tokens on this page.\"],\"UNI-V2 {0}-{1}\":[\"UNI-V2 \",[\"0\"],\"-\",[\"1\"]],\"Unclaimed UNI\":\"Unclaimed UNI\",\"Unclaimed fees\":\"Unclaimed fees\",\"Undetermined\":\"Undetermined\",\"Unexpected error. Could not estimate gas for the swap.\":\"Unexpected error. Could not estimate gas for the swap.\",\"Unexpected issue with estimating the gas. Please try again.\":\"Unexpected issue with estimating the gas. Please try again.\",\"Uniswap Governance\":\"Uniswap Governance\",\"Uniswap Labs' Terms of Service\":\"Uniswap Labs' Terms of Service\",\"Uniswap available in: <0>{0}\":[\"Uniswap available in: <0>\",[\"0\"],\"\"],\"Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.\":\"Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.\",\"Uniswap liquidity mining\":\"Uniswap liquidity mining\",\"Uniswap migration contract↗\":\"Uniswap migration contract↗\",\"Unknown Source\":\"Unknown Source\",\"Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.\":[\"Unknown error\",[\"0\"],\". Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.\"],\"Unlock Votes\":\"Unlock Votes\",\"Unlock Voting\":\"Unlock Voting\",\"Unlocking Votes\":\"Unlocking Votes\",\"Unsupported Asset\":\"Unsupported Asset\",\"Unsupported Assets\":\"Unsupported Assets\",\"Unsupported network–switch to another to trade.\":\"Unsupported network–switch to another to trade.\",\"Untitled\":\"Untitled\",\"Unwrap\":\"Unwrap\",\"Unwrap <0/> to {0}\":[\"Unwrap <0/> to \",[\"0\"]],\"Update Delegation\":\"Update Delegation\",\"Update list\":\"Update list\",\"Use the Uniswap Labs API to get faster quotes.\":\"Use the Uniswap Labs API to get faster quotes.\",\"User\":\"User\",\"V2 is not available on Layer 2. Switch to Layer 1 Ethereum.\":\"V2 is not available on Layer 2. Switch to Layer 1 Ethereum.\",\"V2 liquidity\":\"V2 liquidity\",\"V3 {0} Price:\":[\"V3 \",[\"0\"],\" Price:\"],\"View accrued fees and analytics<0>↗\":\"View accrued fees and analytics<0>↗\",\"View list\":\"View list\",\"View on Etherscan\":\"View on Etherscan\",\"View on Explorer\":\"View on Explorer\",\"View transaction on Explorer\":\"View transaction on Explorer\",\"Vote\":\"Vote\",\"Vote Against\":\"Vote Against\",\"Vote For\":\"Vote For\",\"Vote against proposal {proposalId}\":[\"Vote against proposal \",[\"proposalId\"]],\"Vote against proposal {proposalKey}\":[\"Vote against proposal \",[\"proposalKey\"]],\"Vote against proposal {proposalKey} with reason \\\"{0}\\\"\":[\"Vote against proposal \",[\"proposalKey\"],\" with reason \\\"\",[\"0\"],\"\\\"\"],\"Vote for proposal {proposalId}\":[\"Vote for proposal \",[\"proposalId\"]],\"Vote for proposal {proposalKey}\":[\"Vote for proposal \",[\"proposalKey\"]],\"Vote for proposal {proposalKey} with reason \\\"{0}\\\"\":[\"Vote for proposal \",[\"proposalKey\"],\" with reason \\\"\",[\"0\"],\"\\\"\"],\"Vote to abstain on proposal {proposalId}\":[\"Vote to abstain on proposal \",[\"proposalId\"]],\"Vote to abstain on proposal {proposalKey}\":[\"Vote to abstain on proposal \",[\"proposalKey\"]],\"Vote to abstain on proposal {proposalKey} with reason \\\"{0}\\\"\":[\"Vote to abstain on proposal \",[\"proposalKey\"],\" with reason \\\"\",[\"0\"],\"\\\"\"],\"Voting ended {0}\":[\"Voting ended \",[\"0\"]],\"Voting ends approximately {0}\":[\"Voting ends approximately \",[\"0\"]],\"Voting starts approximately {0}\":[\"Voting starts approximately \",[\"0\"]],\"Waiting For Confirmation\":\"Waiting For Confirmation\",\"Wallet Address or ENS name\":\"Wallet Address or ENS name\",\"Weekly Rewards\":\"Weekly Rewards\",\"Welcome to team Unicorn :)\":\"Welcome to team Unicorn :)\",\"When you claim without withdrawing your liquidity remains in the mining pool.\":\"When you claim without withdrawing your liquidity remains in the mining pool.\",\"When you withdraw, the contract will automagically claim UNI on your behalf!\":\"When you withdraw, the contract will automagically claim UNI on your behalf!\",\"When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.\":\"When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.\",\"Withdraw\":\"Withdraw\",\"Withdraw & Claim\":\"Withdraw & Claim\",\"Withdraw deposited liquidity\":\"Withdraw deposited liquidity\",\"Withdrawing {0} UNI-V2\":[\"Withdrawing \",[\"0\"],\" UNI-V2\"],\"Withdrew UNI-V2!\":\"Withdrew UNI-V2!\",\"Wrap\":\"Wrap\",\"Wrap <0/> to {0}\":[\"Wrap <0/> to \",[\"0\"]],\"Wrong Network\":\"Wrong Network\",\"You already have an active or pending proposal\":\"You already have an active or pending proposal\",\"You are creating a pool\":\"You are creating a pool\",\"You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.\":[\"You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current \",[\"0\"],\" price.\"],\"You are the first liquidity provider.\":\"You are the first liquidity provider.\",\"You can either vote on each proposal yourself or delegate your votes to a third party.\":\"You can either vote on each proposal yourself or delegate your votes to a third party.\",\"You can now trade {0}\":[\"You can now trade \",[\"0\"]],\"You don't have enough votes to submit a proposal\":\"You don't have enough votes to submit a proposal\",\"You don’t have liquidity in this pool yet.\":\"You don’t have liquidity in this pool yet.\",\"You may have lost your network connection, or {label} might be down right now.\":[\"You may have lost your network connection, or \",[\"label\"],\" might be down right now.\"],\"You may have lost your network connection.\":\"You may have lost your network connection.\",\"You might consider waiting until the network fees go down to complete this transaction.\":\"You might consider waiting until the network fees go down to complete this transaction.\",\"You must connect an account.\":\"You must connect an account.\",\"You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.\":[\"You must give the Uniswap smart contracts permission to use your \",[\"0\"],\". You only have to do this once per token.\"],\"You must have {formattedProposalThreshold} votes to submit a proposal\":[\"You must have \",[\"formattedProposalThreshold\"],\" votes to submit a proposal\"],\"You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.\":\"You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.\",\"You will also collect fees earned from this position.\":\"You will also collect fees earned from this position.\",\"You will receive\":\"You will receive\",\"You will receive at least {0} {1} or the transaction will revert.\":[\"You will receive at least \",[\"0\"],\" \",[\"1\"],\" or the transaction will revert.\"],\"You will send at most {0} {1} or the transaction will revert.\":[\"You will send at most \",[\"0\"],\" \",[\"1\"],\" or the transaction will revert.\"],\"Your V2 liquidity\":\"Your V2 liquidity\",\"Your active V3 liquidity positions will appear here.\":\"Your active V3 liquidity positions will appear here.\",\"Your liquidity deposits\":\"Your liquidity deposits\",\"Your pool share:\":\"Your pool share:\",\"Your position\":\"Your position\",\"Your position has 0 liquidity, and is not earning fees.\":\"Your position has 0 liquidity, and is not earning fees.\",\"Your position will appear here.\":\"Your position will appear here.\",\"Your position will be 100% composed of {0} at this price\":[\"Your position will be 100% composed of \",[\"0\"],\" at this price\"],\"Your position will be 100% {0} at this price.\":[\"Your position will be 100% \",[\"0\"],\" at this price.\"],\"Your position will not earn fees or be used in trades until the market price moves into your range.\":\"Your position will not earn fees or be used in trades until the market price moves into your range.\",\"Your positions\":\"Your positions\",\"Your rate\":\"Your rate\",\"Your total pool tokens:\":\"Your total pool tokens:\",\"Your transaction cost will be much higher as it includes the gas to create the pool.\":\"Your transaction cost will be much higher as it includes the gas to create the pool.\",\"Your transaction may be frontrun\":\"Your transaction may be frontrun\",\"Your transaction may fail\":\"Your transaction may fail\",\"Your transaction will revert if it has been pending for longer than this period of time.\":\"Your transaction will revert if it has been pending for longer than this period of time.\",\"Your transaction will revert if it is pending for more than this period of time.\":\"Your transaction will revert if it is pending for more than this period of time.\",\"Your transaction will revert if the price changes unfavorably by more than this percentage.\":\"Your transaction will revert if the price changes unfavorably by more than this percentage.\",\"Your transactions will appear here...\":\"Your transactions will appear here...\",\"Your unclaimed UNI\":\"Your unclaimed UNI\",\"after slippage\":\"after slippage\",\"confirm\":\"confirm\",\"for {0}\":[\"for \",[\"0\"]],\"gwei\":\"gwei\",\"has socks emoji\":\"has socks emoji\",\"here.\":\"here.\",\"https:// or ipfs:// or ENS name\":\"https:// or ipfs:// or ENS name\",\"minutes\":\"minutes\",\"via {0}\":[\"via \",[\"0\"]],\"via {0} token list\":[\"via \",[\"0\"],\" token list\"],\"{0, plural, one {Import token} other {Import tokens}}\":[[\"0\",\"plural\",{one:\"Import token\",other:\"Import tokens\"}]],\"{0}\":[[\"0\"]],\"{0} %\":[[\"0\"],\" %\"],\"{0} <0/> per <1/>\":[[\"0\"],\" <0/> per <1/>\"],\"{0} Custom Tokens\":[[\"0\"],\" Custom Tokens\"],\"{0} Deposited\":[[\"0\"],\" Deposited\"],\"{0} ETH\":[[\"0\"],\" ETH\"],\"{0} Fees Earned:\":[[\"0\"],\" Fees Earned:\"],\"{0} Pending\":[[\"0\"],\" Pending\"],\"{0} UNI\":[[\"0\"],\" UNI\"],\"{0} UNI / week\":[[\"0\"],\" UNI / week\"],\"{0} UNI-V2\":[[\"0\"],\" UNI-V2\"],\"{0} UNI-V2 LP tokens available\":[[\"0\"],\" UNI-V2 LP tokens available\"],\"{0} Votes\":[[\"0\"],\" Votes\"],\"{0} per {1}\":[[\"0\"],\" per \",[\"1\"]],\"{0} tokens\":[[\"0\"],\" tokens\"],\"{0} {1} Price:\":[[\"0\"],\" \",[\"1\"],\" Price:\"],\"{0} {nativeCurrencySymbol}\":[[\"0\"],\" \",[\"nativeCurrencySymbol\"]],\"{0} • Added by user\":[[\"0\"],\" • Added by user\"],\"{0}%\":[[\"0\"],\"%\"],\"{0}% fee tier\":[[\"0\"],\"% fee tier\"],\"{0}% pool\":[[\"0\"],\"% pool\"],\"{0}% select\":[[\"0\"],\"% select\"],\"{0}-{1} Liquidity Mining\":[[\"0\"],\"-\",[\"1\"],\" Liquidity Mining\"],\"{0}/{1} LP NFT\":[[\"0\"],\"/\",[\"1\"],\" LP NFT\"],\"{0}/{1} LP Tokens\":[[\"0\"],\"/\",[\"1\"],\" LP Tokens\"],\"{SOCKS_AMOUNT} UNI\":[[\"SOCKS_AMOUNT\"],\" UNI\"],\"{USER_AMOUNT} UNI\":[[\"USER_AMOUNT\"],\" UNI\"],\"{activeTokensOnThisChain} tokens\":[[\"activeTokensOnThisChain\"],\" tokens\"],\"{integrator} fee\":[[\"integrator\"],\" fee\"],\"{label} token bridge\":[[\"label\"],\" token bridge\"],\"{min}m {sec}s\":[[\"min\"],\"m \",[\"sec\"],\"s\"],\"{percentForSlider}%\":[[\"percentForSlider\"],\"%\"],\"{sec}s\":[[\"sec\"],\"s\"],\"{tokenB} per {tokenA}\":[[\"tokenB\"],\" per \",[\"tokenA\"]],\"← Back to Pools Overview\":\"← Back to Pools Overview\"}};","module.exports=function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,\"a\",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p=\"\",r(r.s=3)}([function(e,t){e.exports=function(e){return e&&e.__esModule?e:{default:e}}},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}},function(e,t,r){\"use strict\";function n(){return Math.floor(9e4*Math.random())+1e4}Object.defineProperty(t,\"__esModule\",{value:!0}),t.sendAsyncWrapper=function(e,t){var r=this;return new Promise(function(o,a){r.sendAsync({jsonrpc:\"2.0\",id:n(),method:e,params:t||[]},function(e,t){e?a(e):o(t.result)})})},t.sendFortmaticAsyncWrapper=function(e){var t=this;return new Promise(function(r,n){t.getProvider().sendFortmaticAsync(e,function(e,t){e?n(e):r(t?t.result:{})})})},t.randomId=n,t.findExistingResponse=function(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},t=new v(m);return t.params=[e],i.sendFortmaticAsyncWrapper.call(g,t)}};var v=function e(t,r){(0,o.default)(this,e),this.id=(0,i.randomId)(),this.method=t,this.params=r?[r]:[{}]}},function(e,t,r){\"use strict\";var n=r(0);Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var o=n(r(6)),a=n(r(9)),i=n(r(1)),s=n(r(10)),c=r(11),u=n(r(12)),l=r(2),f=function(){function e(t,r){if((0,i.default)(this,e),this.fortmaticClient=t,this.requests={},this.queue=[],this.account=null,this.network=null,this.isFortmatic=!0,this.overlayReady=!1,this.isLoggedIn=!1,this.postMessages={FORTMATIC_HANDLE_BATCH_REQUEST:\"FORTMATIC_HANDLE_BATCH_REQUEST\",FORTMATIC_HANDLE_REQUEST:\"FORTMATIC_HANDLE_REQUEST\",FORTMATIC_HANDLE_FORTMATIC_REQUEST:\"FORTMATIC_HANDLE_FORTMATIC_REQUEST\",FORTMATIC_HANDLE_RESPONSE:\"FORTMATIC_HANDLE_RESPONSE\",FORTMATIC_OVERLAY_READY:\"FORTMATIC_OVERLAY_READY\",FORTMATIC_SHOW_OVERLAY:\"FORTMATIC_SHOW_OVERLAY\",FORTMATIC_HIDE_OVERLAY:\"FORTMATIC_HIDE_OVERLAY\",FORTMATIC_USER_DENIED:\"FORTMATIC_USER_DENIED\",FORTMATIC_USER_LOGOUT:\"FORTMATIC_USER_LOGOUT\",FORTMATIC_UNAUTHORIZED_API_KEY:\"FORTMATIC_UNAUTHORIZED_API_KEY\"},!r.API_KEY)throw new Error(\"Please provide a Fortmatic API key that you acquired from the developer dashboard.\");this.options={API_KEY:r.API_KEY,ETH_NETWORK:r.ETH_NETWORK,DOMAIN_ORIGIN:window.location?window.location.origin:\"\",version:c.version},this.queryParams=btoa(JSON.stringify(this.options)),this.constructPostMessage(),this.overlay=this.createOverlay(),this.listenMessage()}return(0,s.default)(e,[{key:\"constructPostMessage\",value:function(){var e=this;Object.keys(this.postMessages).map(function(t){e.postMessages[t]+=\"-\".concat(e.queryParams)})}},{key:\"createOverlay\",value:function(){var e=this;return new Promise(function(t,r){var n=function(){if(function(){var t=!0,r=!1,n=void 0;try{for(var o,a=document.getElementsByClassName(\"fortmatic-iframe\")[Symbol.iterator]();!(t=(o=a.next()).done);t=!0)if(o.value.src.includes(e.queryParams))return!1}catch(e){r=!0,n=e}finally{try{t||null==a.return||a.return()}finally{if(r)throw n}}return!0}()){var r=document.createElement(\"style\");r.innerHTML=u.default.css,r.type=\"text/css\",document.head.appendChild(r);var n=document.createElement(\"iframe\");n.className=\"fortmatic-iframe\",n.src=\"\".concat(e.fortmaticClient,\"/send?params=\").concat(e.queryParams),document.body.appendChild(n);var o=document.createElement(\"img\");o.src=\"https://static.fortmatic.com/assets/trans.gif\",document.body.appendChild(o),t({iframe:n})}else console.error(\"Fortmatic: Duplicate instances found.\")};[\"loaded\",\"interactive\",\"complete\"].indexOf(document.readyState)>-1?n():window.addEventListener(\"load\",n.bind(e),!1)})}},{key:\"showOverlay\",value:function(){var e=(0,a.default)(o.default.mark(function e(){return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.overlay;case 2:e.sent.iframe.style.display=\"block\";case 4:case\"end\":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:\"hideOverlay\",value:function(){var e=(0,a.default)(o.default.mark(function e(){return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.overlay;case 2:e.sent.iframe.style.display=\"none\";case 4:case\"end\":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:\"sendAsync\",value:function(e,t){e.length>0?this.enqueue({payload:{id:(0,l.randomId)(),batch:e.map(function(e){return e.id=(0,l.randomId)(),e}),method:\"eth_batchRequest\"},cb:t}):this.enqueue({payload:e,cb:t})}},{key:\"sendFortmaticAsync\",value:function(e,t){this.enqueue({payload:e,cb:t,isNative:!0})}},{key:\"send\",value:function(e,t){if(\"string\"==typeof e)return l.sendAsyncWrapper.call(this,e,t);if(!t){console.warn(\"Non-async web3 methods will be deprecated in web3 > 1.0, and are not supported by the Fortmatic provider. An async method to be used instead.\"),this.sendAsync(e,function(){});var r={};switch(e.method){case\"eth_accounts\":r=this.account?[this.account]:[];break;case\"eth_coinbase\":r=this.account;break;case\"net_version\":r=this.network||(this.options.API_KEY.startsWith(\"pk_live\")?1:4);break;case\"eth_uninstallFilter\":r=!0;break;default:r={}}return{id:e.id,jsonrpc:e.jsonrpc,result:r}}this.sendAsync(e,t)}},{key:\"enqueue\",value:function(e){this.queue.push(e),this.overlayReady&&this.dequeue()}},{key:\"dequeue\",value:function(){var e=(0,a.default)(o.default.mark(function e(){var t,r,n,a=this;return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(0!==this.queue.length){e.next=2;break}return e.abrupt(\"return\");case 2:if(!(t=this.queue.shift())){e.next=11;break}return r=t.payload,n=t.cb,r.id=(0,l.randomId)(),e.next=9,this.postMessage(t.isNative?this.postMessages.FORTMATIC_HANDLE_FORTMATIC_REQUEST:this.postMessages.FORTMATIC_HANDLE_REQUEST,t.payload);case 9:r.batch&&r.batch.length>0?(r.batch.forEach(function(e){a.requests[e.id]={parentId:r.id,payload:e,cb:function(e,t){var n=a.requests[r.id].batchResponse;if(e&&e.response&&!(0,l.findExistingResponse)(n,e.response.id))throw n.push({jsonrpc:\"2.0\",id:e.response.id,error:{code:e.response.code,message:e.response.message}}),a.requests[r.id].cb(null,n),e.response;if(t&&t.result&&!(0,l.findExistingResponse)(n,t.id))return n.push(t);throw new Error(\"Fortmatic: unexpected callback behavior\")}}}),this.requests[r.id]={payload:r,cb:n,batchResponse:[]}):this.requests[r.id]={payload:r,cb:n},this.dequeue();case 11:case\"end\":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:\"postMessage\",value:function(){var e=(0,a.default)(o.default.mark(function e(t,r){var n;return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.overlay;case 2:if(!(n=e.sent).iframe.contentWindow){e.next=7;break}n.iframe.contentWindow.postMessage({msgType:t,payload:r},\"*\"),e.next=8;break;case 7:throw new Error(\"Fortmatic: Modal is not ready.\");case 8:case\"end\":return e.stop()}},e,this)}));return function(t,r){return e.apply(this,arguments)}}()},{key:\"enable\",value:function(){return l.sendAsyncWrapper.call(this,\"eth_accounts\")}},{key:\"listenMessage\",value:function(){var e=this;window.addEventListener(\"message\",function(t){if(t.origin===e.fortmaticClient){var r=t.data.response?t.data.response.id:null;switch(t.data.msgType){case e.postMessages.FORTMATIC_OVERLAY_READY:e.overlayReady=!0,e.dequeue();break;case e.postMessages.FORTMATIC_HANDLE_RESPONSE:try{e.requests[r].cb(null,t.data.response);var n=e.requests[r].parentId;n&&e.requests[n].payload.batch.length===e.requests[n].batchResponse.length&&e.requests[n].cb(null,e.requests[n].batchResponse),\"eth_accounts\"===e.requests[r].payload.method?e.account=t.data.response.result[0]:\"eth_coinbase\"===e.requests[r].payload.method?e.account=t.data.response.result:\"net_version\"===e.requests[r].payload.method&&(e.network=t.data.response.result)}catch(e){}e.isLoggedIn=!0,e.dequeue();break;case e.postMessages.FORTMATIC_HIDE_OVERLAY:e.hideOverlay();break;case e.postMessages.FORTMATIC_SHOW_OVERLAY:e.showOverlay();break;case e.postMessages.FORTMATIC_USER_LOGOUT:e.account=null,e.network=null,e.isLoggedIn=!1;break;case e.postMessages.FORTMATIC_UNAUTHORIZED_API_KEY:throw e.overlayReady=!1,new Error(\"Given API key is not authorized to access the resource.\");case e.postMessages.FORTMATIC_USER_DENIED:if(r){var o=t.data.response&&t.data.response.message?t.data.response.message:\"Fortmatic: Modal was closed without executing action!\",a=t.data.response&&t.data.response.code?t.data.response.code:1;e.requests[r].cb({message:o,code:a,response:t.data.response})}else e.queue.forEach(function(e){return e.cb({message:\"Fortmatic: Modal was closed without executing action!\",code:1})});e.dequeue()}}})}}]),e}();t.default=f},function(e,t,r){e.exports=r(7)},function(e,t,r){var n=function(){return this||\"object\"==typeof self&&self}()||Function(\"return this\")(),o=n.regeneratorRuntime&&Object.getOwnPropertyNames(n).indexOf(\"regeneratorRuntime\")>=0,a=o&&n.regeneratorRuntime;if(n.regeneratorRuntime=void 0,e.exports=r(8),o)n.regeneratorRuntime=a;else try{delete n.regeneratorRuntime}catch(e){n.regeneratorRuntime=void 0}},function(e,t){!function(t){\"use strict\";var r,n=Object.prototype,o=n.hasOwnProperty,a=\"function\"==typeof Symbol?Symbol:{},i=a.iterator||\"@@iterator\",s=a.asyncIterator||\"@@asyncIterator\",c=a.toStringTag||\"@@toStringTag\",u=\"object\"==typeof e,l=t.regeneratorRuntime;if(l)u&&(e.exports=l);else{(l=t.regeneratorRuntime=u?e.exports:{}).wrap=_;var f=\"suspendedStart\",d=\"suspendedYield\",h=\"executing\",p=\"completed\",m={},y={};y[i]=function(){return this};var v=Object.getPrototypeOf,g=v&&v(v(L([])));g&&g!==n&&o.call(g,i)&&(y=g);var b=A.prototype=w.prototype=Object.create(y);T.prototype=b.constructor=A,A.constructor=T,A[c]=T.displayName=\"GeneratorFunction\",l.isGeneratorFunction=function(e){var t=\"function\"==typeof e&&e.constructor;return!!t&&(t===T||\"GeneratorFunction\"===(t.displayName||t.name))},l.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,A):(e.__proto__=A,c in e||(e[c]=\"GeneratorFunction\")),e.prototype=Object.create(b),e},l.awrap=function(e){return{__await:e}},O(R.prototype),R.prototype[s]=function(){return this},l.AsyncIterator=R,l.async=function(e,t,r,n){var o=new R(_(e,t,r,n));return l.isGeneratorFunction(t)?o:o.next().then(function(e){return e.done?e.value:o.next()})},O(b),b[c]=\"Generator\",b[i]=function(){return this},b.toString=function(){return\"[object Generator]\"},l.keys=function(e){var t=[];for(var r in e)t.push(r);return t.reverse(),function r(){for(;t.length;){var n=t.pop();if(n in e)return r.value=n,r.done=!1,r}return r.done=!0,r}},l.values=L,F.prototype={constructor:F,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=r,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=r,this.tryEntries.forEach(M),!e)for(var t in this)\"t\"===t.charAt(0)&&o.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=r)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if(\"throw\"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function n(n,o){return s.type=\"throw\",s.arg=e,t.next=n,o&&(t.method=\"next\",t.arg=r),!!o}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],s=i.completion;if(\"root\"===i.tryLoc)return n(\"end\");if(i.tryLoc<=this.prev){var c=o.call(i,\"catchLoc\"),u=o.call(i,\"finallyLoc\");if(c&&u){if(this.prev=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&o.call(n,\"finallyLoc\")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),M(r),m}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if(\"throw\"===n.type){var o=n.arg;M(r)}return o}}throw new Error(\"illegal catch attempt\")},delegateYield:function(e,t,n){return this.delegate={iterator:L(e),resultName:t,nextLoc:n},\"next\"===this.method&&(this.arg=r),m}}}function _(e,t,r,n){var o=t&&t.prototype instanceof w?t:w,a=Object.create(o.prototype),i=new F(n||[]);return a._invoke=function(e,t,r){var n=f;return function(o,a){if(n===h)throw new Error(\"Generator is already running\");if(n===p){if(\"throw\"===o)throw a;return k()}for(r.method=o,r.arg=a;;){var i=r.delegate;if(i){var s=I(i,r);if(s){if(s===m)continue;return s}}if(\"next\"===r.method)r.sent=r._sent=r.arg;else if(\"throw\"===r.method){if(n===f)throw n=p,r.arg;r.dispatchException(r.arg)}else\"return\"===r.method&&r.abrupt(\"return\",r.arg);n=h;var c=E(e,t,r);if(\"normal\"===c.type){if(n=r.done?p:d,c.arg===m)continue;return{value:c.arg,done:r.done}}\"throw\"===c.type&&(n=p,r.method=\"throw\",r.arg=c.arg)}}}(e,r,i),a}function E(e,t,r){try{return{type:\"normal\",arg:e.call(t,r)}}catch(e){return{type:\"throw\",arg:e}}}function w(){}function T(){}function A(){}function O(e){[\"next\",\"throw\",\"return\"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function R(e){var t;this._invoke=function(r,n){function a(){return new Promise(function(t,a){!function t(r,n,a,i){var s=E(e[r],e,n);if(\"throw\"!==s.type){var c=s.arg,u=c.value;return u&&\"object\"==typeof u&&o.call(u,\"__await\")?Promise.resolve(u.__await).then(function(e){t(\"next\",e,a,i)},function(e){t(\"throw\",e,a,i)}):Promise.resolve(u).then(function(e){c.value=e,a(c)},function(e){return t(\"throw\",e,a,i)})}i(s.arg)}(r,n,t,a)})}return t=t?t.then(a,a):a()}}function I(e,t){var n=e.iterator[t.method];if(n===r){if(t.delegate=null,\"throw\"===t.method){if(e.iterator.return&&(t.method=\"return\",t.arg=r,I(e,t),\"throw\"===t.method))return m;t.method=\"throw\",t.arg=new TypeError(\"The iterator does not provide a 'throw' method\")}return m}var o=E(n,e.iterator,t.arg);if(\"throw\"===o.type)return t.method=\"throw\",t.arg=o.arg,t.delegate=null,m;var a=o.arg;return a?a.done?(t[e.resultName]=a.value,t.next=e.nextLoc,\"return\"!==t.method&&(t.method=\"next\",t.arg=r),t.delegate=null,m):a:(t.method=\"throw\",t.arg=new TypeError(\"iterator result is not an object\"),t.delegate=null,m)}function x(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function M(e){var t=e.completion||{};t.type=\"normal\",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:\"root\"}],e.forEach(x,this),this.reset(!0)}function L(e){if(e){var t=e[i];if(t)return t.call(e);if(\"function\"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n (https://fortmatic.com/)\",license:\"MIT\",repository:{type:\"git\",url:\"https://github.com/fortmatic/fortmatic-js\"},keywords:[\"Auth\",\"Login\",\"Web3\",\"Crypto\",\"Ethereum\",\"MetaMask\",\"Wallet\",\"Blockchain\",\"Dapp\"],homepage:\"https://www.fortmatic.com\",ava:{require:[\"@babel/register\"],files:[\"test/**/*.spec.js\"],babel:{testOptions:{presets:[\"@babel/env\"],plugins:[\"@babel/plugin-proposal-function-bind\",\"@babel/plugin-transform-runtime\"]}},verbose:!0},nyc:{all:!1,\"check-coverage\":!0,\"per-file\":!0,lines:80,statements:80,functions:80,branches:80,include:[\"src/**/*.js\"],exclude:[\"*/style.js\"],require:[],reporter:[\"html\",\"lcov\"]},dependencies:{\"@babel/runtime\":\"7.3.4\"},devDependencies:{\"@babel/core\":\"7.3.4\",\"@babel/plugin-proposal-function-bind\":\"7.2.0\",\"@babel/plugin-transform-modules-commonjs\":\"7.2.0\",\"@babel/plugin-transform-runtime\":\"7.3.4\",\"@babel/preset-env\":\"7.3.4\",\"@babel/register\":\"7.0.0\",ava:\"2.2.0\",\"babel-eslint\":\"10.0.1\",\"babel-loader\":\"8.0.5\",eslint:\"5.9.0\",lodash:\"4.17.11\",nyc:\"13.1.0\",sinon:\"7.1.1\",webpack:\"4.26.1\",\"webpack-cli\":\"3.1.2\"}}},function(e,t,r){\"use strict\";t.css=\"\\n .fortmatic-iframe {\\n display: none;\\n position: fixed;\\n top: 0;\\n right: 0;\\n width: 100%;\\n height: 100%;\\n border: none;\\n border-radius: 0;\\n z-index: 2147483647;\\n }\\n\"}]);"],"names":["_path","_line","_extends","React"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mBAAe;;AC+Lf,sBAAe,0kPAA0kP;;ACvIzlP,sBAAe,0sDAA0sD;;AC7BztD,uBAAe,k3CAAk3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpBpnT,eAAe,mcAAmc;;ACvBld,mBAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICAn/wC,SAAc,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAA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"} \ No newline at end of file diff --git a/dist2/types/abis/types/commons.d.ts b/dist2/types/abis/types/commons.d.ts deleted file mode 100644 index fbb82635f1f..00000000000 --- a/dist2/types/abis/types/commons.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { EventFilter, Event } from "ethers"; -import { Result } from "@ethersproject/abi"; -export interface TypedEventFilter<_EventArgsArray, _EventArgsObject> extends EventFilter { -} -export interface TypedEvent extends Event { - args: EventArgs; -} -export declare type TypedListener, EventArgsObject> = (...listenerArg: [ - ...EventArgsArray, - TypedEvent -]) => void; -export declare type MinEthersFactory = { - deploy(...a: ARGS[]): Promise; -}; -export declare type GetContractTypeFromFactory = F extends MinEthersFactory ? C : never; -export declare type GetARGsTypeFromFactory = F extends MinEthersFactory ? Parameters : never; diff --git a/dist2/types/abis/types/factories/ArgentWalletContract__factory.d.ts b/dist2/types/abis/types/factories/ArgentWalletContract__factory.d.ts deleted file mode 100644 index af199c61bc7..00000000000 --- a/dist2/types/abis/types/factories/ArgentWalletContract__factory.d.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { ArgentWalletContract, ArgentWalletContractInterface } from "../ArgentWalletContract"; -export declare class ArgentWalletContract__factory { - static readonly abi: ({ - inputs: { - components: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - } | { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - })[]; - static createInterface(): ArgentWalletContractInterface; - static connect(address: string, signerOrProvider: Signer | Provider): ArgentWalletContract; -} diff --git a/dist2/types/abis/types/factories/ArgentWalletDetector__factory.d.ts b/dist2/types/abis/types/factories/ArgentWalletDetector__factory.d.ts deleted file mode 100644 index fc017d66041..00000000000 --- a/dist2/types/abis/types/factories/ArgentWalletDetector__factory.d.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { ArgentWalletDetector, ArgentWalletDetectorInterface } from "../ArgentWalletDetector"; -export declare class ArgentWalletDetector__factory { - static readonly abi: ({ - inputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - anonymous?: undefined; - name?: undefined; - outputs?: undefined; - } | { - anonymous: boolean; - inputs: { - indexed: boolean; - internalType: string; - name: string; - type: string; - }[]; - name: string; - type: string; - stateMutability?: undefined; - outputs?: undefined; - } | { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - anonymous?: undefined; - })[]; - static createInterface(): ArgentWalletDetectorInterface; - static connect(address: string, signerOrProvider: Signer | Provider): ArgentWalletDetector; -} diff --git a/dist2/types/abis/types/factories/Eip2612__factory.d.ts b/dist2/types/abis/types/factories/Eip2612__factory.d.ts deleted file mode 100644 index 3db8b297f03..00000000000 --- a/dist2/types/abis/types/factories/Eip2612__factory.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { Eip2612, Eip2612Interface } from "../Eip2612"; -export declare class Eip2612__factory { - static readonly abi: { - constant: boolean; - inputs: { - name: string; - type: string; - }[]; - name: string; - outputs: { - name: string; - type: string; - }[]; - payable: boolean; - stateMutability: string; - type: string; - }[]; - static createInterface(): Eip2612Interface; - static connect(address: string, signerOrProvider: Signer | Provider): Eip2612; -} diff --git a/dist2/types/abis/types/factories/EnsPublicResolver__factory.d.ts b/dist2/types/abis/types/factories/EnsPublicResolver__factory.d.ts deleted file mode 100644 index 9b2bbd80e3d..00000000000 --- a/dist2/types/abis/types/factories/EnsPublicResolver__factory.d.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { EnsPublicResolver, EnsPublicResolverInterface } from "../EnsPublicResolver"; -export declare class EnsPublicResolver__factory { - static readonly abi: ({ - inputs: { - internalType: string; - name: string; - type: string; - }[]; - payable: boolean; - stateMutability: string; - type: string; - anonymous?: undefined; - name?: undefined; - constant?: undefined; - outputs?: undefined; - } | { - anonymous: boolean; - inputs: { - indexed: boolean; - internalType: string; - name: string; - type: string; - }[]; - name: string; - type: string; - payable?: undefined; - stateMutability?: undefined; - constant?: undefined; - outputs?: undefined; - } | { - constant: boolean; - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - payable: boolean; - stateMutability: string; - type: string; - anonymous?: undefined; - })[]; - static createInterface(): EnsPublicResolverInterface; - static connect(address: string, signerOrProvider: Signer | Provider): EnsPublicResolver; -} diff --git a/dist2/types/abis/types/factories/EnsRegistrar__factory.d.ts b/dist2/types/abis/types/factories/EnsRegistrar__factory.d.ts deleted file mode 100644 index 3cea77158f1..00000000000 --- a/dist2/types/abis/types/factories/EnsRegistrar__factory.d.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { EnsRegistrar, EnsRegistrarInterface } from "../EnsRegistrar"; -export declare class EnsRegistrar__factory { - static readonly abi: ({ - inputs: { - internalType: string; - name: string; - type: string; - }[]; - payable: boolean; - stateMutability: string; - type: string; - anonymous?: undefined; - name?: undefined; - constant?: undefined; - outputs?: undefined; - } | { - anonymous: boolean; - inputs: { - indexed: boolean; - internalType: string; - name: string; - type: string; - }[]; - name: string; - type: string; - payable?: undefined; - stateMutability?: undefined; - constant?: undefined; - outputs?: undefined; - } | { - constant: boolean; - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - payable: boolean; - stateMutability: string; - type: string; - anonymous?: undefined; - })[]; - static createInterface(): EnsRegistrarInterface; - static connect(address: string, signerOrProvider: Signer | Provider): EnsRegistrar; -} diff --git a/dist2/types/abis/types/factories/Erc1155__factory.d.ts b/dist2/types/abis/types/factories/Erc1155__factory.d.ts deleted file mode 100644 index 73baaa6b55d..00000000000 --- a/dist2/types/abis/types/factories/Erc1155__factory.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { Erc1155, Erc1155Interface } from "../Erc1155"; -export declare class Erc1155__factory { - static readonly abi: { - constant: boolean; - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - payable: boolean; - stateMutability: string; - type: string; - }[]; - static createInterface(): Erc1155Interface; - static connect(address: string, signerOrProvider: Signer | Provider): Erc1155; -} diff --git a/dist2/types/abis/types/factories/Erc20Bytes32__factory.d.ts b/dist2/types/abis/types/factories/Erc20Bytes32__factory.d.ts deleted file mode 100644 index 5d6bc468642..00000000000 --- a/dist2/types/abis/types/factories/Erc20Bytes32__factory.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { Erc20Bytes32, Erc20Bytes32Interface } from "../Erc20Bytes32"; -export declare class Erc20Bytes32__factory { - static readonly abi: { - constant: boolean; - inputs: never[]; - name: string; - outputs: { - name: string; - type: string; - }[]; - payable: boolean; - stateMutability: string; - type: string; - }[]; - static createInterface(): Erc20Bytes32Interface; - static connect(address: string, signerOrProvider: Signer | Provider): Erc20Bytes32; -} diff --git a/dist2/types/abis/types/factories/Erc20__factory.d.ts b/dist2/types/abis/types/factories/Erc20__factory.d.ts deleted file mode 100644 index 554b75acee9..00000000000 --- a/dist2/types/abis/types/factories/Erc20__factory.d.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { Erc20, Erc20Interface } from "../Erc20"; -export declare class Erc20__factory { - static readonly abi: ({ - constant: boolean; - inputs: { - name: string; - type: string; - }[]; - name: string; - outputs: { - name: string; - type: string; - }[]; - payable: boolean; - stateMutability: string; - type: string; - anonymous?: undefined; - } | { - payable: boolean; - stateMutability: string; - type: string; - constant?: undefined; - inputs?: undefined; - name?: undefined; - outputs?: undefined; - anonymous?: undefined; - } | { - anonymous: boolean; - inputs: { - indexed: boolean; - name: string; - type: string; - }[]; - name: string; - type: string; - constant?: undefined; - outputs?: undefined; - payable?: undefined; - stateMutability?: undefined; - })[]; - static createInterface(): Erc20Interface; - static connect(address: string, signerOrProvider: Signer | Provider): Erc20; -} diff --git a/dist2/types/abis/types/factories/Erc721__factory.d.ts b/dist2/types/abis/types/factories/Erc721__factory.d.ts deleted file mode 100644 index 8fe0731bbd1..00000000000 --- a/dist2/types/abis/types/factories/Erc721__factory.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { Erc721, Erc721Interface } from "../Erc721"; -export declare class Erc721__factory { - static readonly abi: { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - }[]; - static createInterface(): Erc721Interface; - static connect(address: string, signerOrProvider: Signer | Provider): Erc721; -} diff --git a/dist2/types/abis/types/factories/GovernorBravo__factory.d.ts b/dist2/types/abis/types/factories/GovernorBravo__factory.d.ts deleted file mode 100644 index 9ca8bd61bcc..00000000000 --- a/dist2/types/abis/types/factories/GovernorBravo__factory.d.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { GovernorBravo, GovernorBravoInterface } from "../GovernorBravo"; -export declare class GovernorBravo__factory { - static readonly abi: ({ - anonymous: boolean; - inputs: { - indexed: boolean; - internalType: string; - name: string; - type: string; - }[]; - name: string; - type: string; - constant?: undefined; - outputs?: undefined; - payable?: undefined; - stateMutability?: undefined; - } | { - constant: boolean; - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - payable: boolean; - stateMutability: string; - type: string; - anonymous?: undefined; - } | { - constant: boolean; - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - components: { - internalType: string; - name: string; - type: string; - }[]; - internalType: string; - name: string; - type: string; - }[]; - payable: boolean; - stateMutability: string; - type: string; - anonymous?: undefined; - })[]; - static createInterface(): GovernorBravoInterface; - static connect(address: string, signerOrProvider: Signer | Provider): GovernorBravo; -} diff --git a/dist2/types/abis/types/factories/Weth__factory.d.ts b/dist2/types/abis/types/factories/Weth__factory.d.ts deleted file mode 100644 index 04c7bcd914c..00000000000 --- a/dist2/types/abis/types/factories/Weth__factory.d.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { Weth, WethInterface } from "../Weth"; -export declare class Weth__factory { - static readonly abi: ({ - constant: boolean; - inputs: { - name: string; - type: string; - }[]; - name: string; - outputs: { - name: string; - type: string; - }[]; - payable: boolean; - stateMutability: string; - type: string; - anonymous?: undefined; - } | { - payable: boolean; - stateMutability: string; - type: string; - constant?: undefined; - inputs?: undefined; - name?: undefined; - outputs?: undefined; - anonymous?: undefined; - } | { - anonymous: boolean; - inputs: { - indexed: boolean; - name: string; - type: string; - }[]; - name: string; - type: string; - constant?: undefined; - outputs?: undefined; - payable?: undefined; - stateMutability?: undefined; - })[]; - static createInterface(): WethInterface; - static connect(address: string, signerOrProvider: Signer | Provider): Weth; -} diff --git a/dist2/types/abis/types/index.d.ts b/dist2/types/abis/types/index.d.ts deleted file mode 100644 index 0f11f26eb49..00000000000 --- a/dist2/types/abis/types/index.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -export type { ArgentWalletContract } from "./ArgentWalletContract"; -export type { ArgentWalletDetector } from "./ArgentWalletDetector"; -export type { Eip2612 } from "./Eip2612"; -export type { EnsPublicResolver } from "./EnsPublicResolver"; -export type { EnsRegistrar } from "./EnsRegistrar"; -export type { Erc1155 } from "./Erc1155"; -export type { Erc20Bytes32 } from "./Erc20Bytes32"; -export type { Erc20 } from "./Erc20"; -export type { Erc721 } from "./Erc721"; -export type { GovernorBravo } from "./GovernorBravo"; -export type { Weth } from "./Weth"; -export { ArgentWalletContract__factory } from "./factories/ArgentWalletContract__factory"; -export { ArgentWalletDetector__factory } from "./factories/ArgentWalletDetector__factory"; -export { Eip2612__factory } from "./factories/Eip2612__factory"; -export { EnsPublicResolver__factory } from "./factories/EnsPublicResolver__factory"; -export { EnsRegistrar__factory } from "./factories/EnsRegistrar__factory"; -export { Erc1155__factory } from "./factories/Erc1155__factory"; -export { Erc20Bytes32__factory } from "./factories/Erc20Bytes32__factory"; -export { Erc20__factory } from "./factories/Erc20__factory"; -export { Erc721__factory } from "./factories/Erc721__factory"; -export { GovernorBravo__factory } from "./factories/GovernorBravo__factory"; -export { Weth__factory } from "./factories/Weth__factory"; diff --git a/dist2/types/components/AccountDetails/Copy.d.ts b/dist2/types/components/AccountDetails/Copy.d.ts deleted file mode 100644 index 353684f4677..00000000000 --- a/dist2/types/components/AccountDetails/Copy.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import React from 'react'; -export default function CopyHelper(props: { - toCopy: string; - children?: React.ReactNode; -}): JSX.Element; diff --git a/dist2/types/components/AccountDetails/Transaction.d.ts b/dist2/types/components/AccountDetails/Transaction.d.ts deleted file mode 100644 index 292d3b5d01a..00000000000 --- a/dist2/types/components/AccountDetails/Transaction.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -/// -export default function Transaction({ hash }: { - hash: string; -}): JSX.Element | null; diff --git a/dist2/types/components/AccountDetails/TransactionSummary.d.ts b/dist2/types/components/AccountDetails/TransactionSummary.d.ts deleted file mode 100644 index aa79b269737..00000000000 --- a/dist2/types/components/AccountDetails/TransactionSummary.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/// -import { TransactionInfo } from '../../state/transactions/actions'; -export declare function TransactionSummary({ info }: { - info: TransactionInfo; -}): JSX.Element; diff --git a/dist2/types/components/AccountDetails/index.d.ts b/dist2/types/components/AccountDetails/index.d.ts deleted file mode 100644 index 54fab84b683..00000000000 --- a/dist2/types/components/AccountDetails/index.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -/// -interface AccountDetailsProps { - toggleWalletModal: () => void; - pendingTransactions: string[]; - confirmedTransactions: string[]; - ENSName?: string; - openOptions: () => void; -} -export default function AccountDetails({ toggleWalletModal, pendingTransactions, confirmedTransactions, ENSName, openOptions, }: AccountDetailsProps): JSX.Element; -export {}; diff --git a/dist2/types/components/AddressInputPanel/index.d.ts b/dist2/types/components/AddressInputPanel/index.d.ts deleted file mode 100644 index 737d50e1730..00000000000 --- a/dist2/types/components/AddressInputPanel/index.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { ReactNode } from 'react'; -export default function AddressInputPanel({ id, className, label, placeholder, value, onChange, }: { - id?: string; - className?: string; - label?: ReactNode; - placeholder?: string; - value: string; - onChange: (value: string) => void; -}): JSX.Element; diff --git a/dist2/types/components/AnimatedDropdown/index.d.ts b/dist2/types/components/AnimatedDropdown/index.d.ts deleted file mode 100644 index 300fd7f3552..00000000000 --- a/dist2/types/components/AnimatedDropdown/index.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -/// -/** - * @param open conditional to show content or hide - * @returns Wrapper to smoothly hide and expand content - */ -export default function AnimatedDropdown({ open, children }: React.PropsWithChildren<{ - open: boolean; -}>): JSX.Element; diff --git a/dist2/types/components/Badge/RangeBadge.d.ts b/dist2/types/components/Badge/RangeBadge.d.ts deleted file mode 100644 index 322c015ec42..00000000000 --- a/dist2/types/components/Badge/RangeBadge.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/// -export default function RangeBadge({ removed, inRange, }: { - removed: boolean | undefined; - inRange: boolean | undefined; -}): JSX.Element; diff --git a/dist2/types/components/Badge/index.d.ts b/dist2/types/components/Badge/index.d.ts deleted file mode 100644 index dd0f7b6cc6f..00000000000 --- a/dist2/types/components/Badge/index.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -/// -import { DefaultTheme } from 'styled-components/macro'; -export declare enum BadgeVariant { - DEFAULT = "DEFAULT", - NEGATIVE = "NEGATIVE", - POSITIVE = "POSITIVE", - PRIMARY = "PRIMARY", - WARNING = "WARNING", - WARNING_OUTLINE = "WARNING_OUTLINE" -} -interface BadgeProps { - variant?: BadgeVariant; -} -declare const Badge: import("styled-components").StyledComponent<"div", DefaultTheme, BadgeProps & { - children?: import("react").ReactNode; -}, never>; -export default Badge; diff --git a/dist2/types/components/Blocklist/index.d.ts b/dist2/types/components/Blocklist/index.d.ts deleted file mode 100644 index a877e1c2bf5..00000000000 --- a/dist2/types/components/Blocklist/index.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { ReactNode } from 'react'; -export default function Blocklist({ children }: { - children: ReactNode; -}): JSX.Element; diff --git a/dist2/types/components/Button/index.d.ts b/dist2/types/components/Button/index.d.ts deleted file mode 100644 index 31eb9e3a1e9..00000000000 --- a/dist2/types/components/Button/index.d.ts +++ /dev/null @@ -1,74 +0,0 @@ -/// -import { ButtonProps as ButtonPropsOriginal } from 'rebass/styled-components'; -declare type ButtonProps = Omit; -export declare const BaseButton: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { - padding?: string | undefined; - width?: string | undefined; - $borderRadius?: string | undefined; - altDisabledStyle?: boolean | undefined; -} & ButtonProps, never>; -export declare const ButtonPrimary: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { - padding?: string | undefined; - width?: string | undefined; - $borderRadius?: string | undefined; - altDisabledStyle?: boolean | undefined; -} & ButtonProps, never>; -export declare const ButtonLight: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { - padding?: string | undefined; - width?: string | undefined; - $borderRadius?: string | undefined; - altDisabledStyle?: boolean | undefined; -} & ButtonProps, never>; -export declare const ButtonGray: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { - padding?: string | undefined; - width?: string | undefined; - $borderRadius?: string | undefined; - altDisabledStyle?: boolean | undefined; -} & ButtonProps, never>; -export declare const ButtonSecondary: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { - padding?: string | undefined; - width?: string | undefined; - $borderRadius?: string | undefined; - altDisabledStyle?: boolean | undefined; -} & ButtonProps, never>; -export declare const ButtonOutlined: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { - padding?: string | undefined; - width?: string | undefined; - $borderRadius?: string | undefined; - altDisabledStyle?: boolean | undefined; -} & ButtonProps, never>; -export declare const ButtonYellow: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { - padding?: string | undefined; - width?: string | undefined; - $borderRadius?: string | undefined; - altDisabledStyle?: boolean | undefined; -} & ButtonProps, never>; -export declare const ButtonEmpty: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { - padding?: string | undefined; - width?: string | undefined; - $borderRadius?: string | undefined; - altDisabledStyle?: boolean | undefined; -} & ButtonProps, never>; -export declare const ButtonText: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { - padding?: string | undefined; - width?: string | undefined; - $borderRadius?: string | undefined; - altDisabledStyle?: boolean | undefined; -} & ButtonProps, never>; -export declare function ButtonConfirmed({ confirmed, altDisabledStyle, ...rest }: { - confirmed?: boolean; - altDisabledStyle?: boolean; -} & ButtonProps): JSX.Element; -export declare function ButtonError({ error, ...rest }: { - error?: boolean; -} & ButtonProps): JSX.Element; -export declare function ButtonDropdown({ disabled, children, ...rest }: { - disabled?: boolean; -} & ButtonProps): JSX.Element; -export declare function ButtonDropdownLight({ disabled, children, ...rest }: { - disabled?: boolean; -} & ButtonProps): JSX.Element; -export declare function ButtonRadioChecked({ active, children, ...rest }: { - active?: boolean; -} & ButtonProps): JSX.Element; -export {}; diff --git a/dist2/types/components/Card/index.d.ts b/dist2/types/components/Card/index.d.ts deleted file mode 100644 index ad1ef9bd51f..00000000000 --- a/dist2/types/components/Card/index.d.ts +++ /dev/null @@ -1,56 +0,0 @@ -/// -declare const Card: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { - width?: string | undefined; - padding?: string | undefined; - border?: string | undefined; - $borderRadius?: string | undefined; -}, never>; -export default Card; -export declare const LightCard: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { - width?: string | undefined; - padding?: string | undefined; - border?: string | undefined; - $borderRadius?: string | undefined; -}, never>; -export declare const LightGreyCard: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { - width?: string | undefined; - padding?: string | undefined; - border?: string | undefined; - $borderRadius?: string | undefined; -}, never>; -export declare const GreyCard: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { - width?: string | undefined; - padding?: string | undefined; - border?: string | undefined; - $borderRadius?: string | undefined; -}, never>; -export declare const DarkGreyCard: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { - width?: string | undefined; - padding?: string | undefined; - border?: string | undefined; - $borderRadius?: string | undefined; -}, never>; -export declare const DarkCard: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { - width?: string | undefined; - padding?: string | undefined; - border?: string | undefined; - $borderRadius?: string | undefined; -}, never>; -export declare const OutlineCard: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { - width?: string | undefined; - padding?: string | undefined; - border?: string | undefined; - $borderRadius?: string | undefined; -}, never>; -export declare const YellowCard: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { - width?: string | undefined; - padding?: string | undefined; - border?: string | undefined; - $borderRadius?: string | undefined; -}, never>; -export declare const BlueCard: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { - width?: string | undefined; - padding?: string | undefined; - border?: string | undefined; - $borderRadius?: string | undefined; -}, never>; diff --git a/dist2/types/components/Column/index.d.ts b/dist2/types/components/Column/index.d.ts deleted file mode 100644 index 454ccdfb709..00000000000 --- a/dist2/types/components/Column/index.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -declare const Column: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; -export declare const ColumnCenter: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; -export declare const AutoColumn: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, { - gap?: string | undefined; - justify?: "end" | "space-between" | "stretch" | "center" | "flex-end" | "flex-start" | "start" | undefined; -}, never>; -export default Column; diff --git a/dist2/types/components/Confetti/index.d.ts b/dist2/types/components/Confetti/index.d.ts deleted file mode 100644 index 8964c5c73b6..00000000000 --- a/dist2/types/components/Confetti/index.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/// -export default function Confetti({ start, variant }: { - start: boolean; - variant?: string; -}): JSX.Element | null; diff --git a/dist2/types/components/CurrencyInputPanel/FiatValue.d.ts b/dist2/types/components/CurrencyInputPanel/FiatValue.d.ts deleted file mode 100644 index acb386c2fb5..00000000000 --- a/dist2/types/components/CurrencyInputPanel/FiatValue.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -/// -import { Currency, CurrencyAmount, Percent } from '@uniswap/sdk-core'; -export declare function FiatValue({ fiatValue, priceImpact, }: { - fiatValue: CurrencyAmount | null | undefined; - priceImpact?: Percent; -}): JSX.Element; diff --git a/dist2/types/components/CurrencyInputPanel/index.d.ts b/dist2/types/components/CurrencyInputPanel/index.d.ts deleted file mode 100644 index 820fb0f6853..00000000000 --- a/dist2/types/components/CurrencyInputPanel/index.d.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { Currency, CurrencyAmount, Percent, Token } from '@uniswap/sdk-core'; -import { Pair } from '@uniswap/v2-sdk'; -import { ReactNode } from 'react'; -interface CurrencyInputPanelProps { - value: string; - onUserInput: (value: string) => void; - onMax?: () => void; - showMaxButton: boolean; - label?: ReactNode; - onCurrencySelect?: (currency: Currency) => void; - currency?: Currency | null; - hideBalance?: boolean; - pair?: Pair | null; - hideInput?: boolean; - otherCurrency?: Currency | null; - fiatValue?: CurrencyAmount | null; - priceImpact?: Percent; - id: string; - showCommonBases?: boolean; - showCurrencyAmount?: boolean; - disableNonToken?: boolean; - renderBalance?: (amount: CurrencyAmount) => ReactNode; - locked?: boolean; - loading?: boolean; -} -export default function CurrencyInputPanel({ value, onUserInput, onMax, showMaxButton, onCurrencySelect, currency, otherCurrency, id, showCommonBases, showCurrencyAmount, disableNonToken, renderBalance, fiatValue, priceImpact, hideBalance, pair, // used for double token logo -hideInput, locked, loading, ...rest }: CurrencyInputPanelProps): JSX.Element; -export {}; diff --git a/dist2/types/components/CurrencyLogo/index.d.ts b/dist2/types/components/CurrencyLogo/index.d.ts deleted file mode 100644 index 93a5955e841..00000000000 --- a/dist2/types/components/CurrencyLogo/index.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Currency } from '@uniswap/sdk-core'; -import React from 'react'; -export default function CurrencyLogo({ currency, size, style, ...rest }: { - currency?: Currency | null; - size?: string; - style?: React.CSSProperties; -}): JSX.Element; diff --git a/dist2/types/components/DoubleLogo/index.d.ts b/dist2/types/components/DoubleLogo/index.d.ts deleted file mode 100644 index e43bbecab99..00000000000 --- a/dist2/types/components/DoubleLogo/index.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -/// -import { Currency } from '@uniswap/sdk-core'; -interface DoubleCurrencyLogoProps { - margin?: boolean; - size?: number; - currency0?: Currency; - currency1?: Currency; -} -export default function DoubleCurrencyLogo({ currency0, currency1, size, margin, }: DoubleCurrencyLogoProps): JSX.Element; -export {}; diff --git a/dist2/types/components/DowntimeWarning/index.d.ts b/dist2/types/components/DowntimeWarning/index.d.ts deleted file mode 100644 index 8a1770ca2f8..00000000000 --- a/dist2/types/components/DowntimeWarning/index.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/// -/** - * Shows a downtime warning for the network if it's relevant - */ -export default function DowntimeWarning(): JSX.Element | null; diff --git a/dist2/types/components/ErrorBoundary/index.d.ts b/dist2/types/components/ErrorBoundary/index.d.ts deleted file mode 100644 index 93a208747c6..00000000000 --- a/dist2/types/components/ErrorBoundary/index.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import React, { ErrorInfo } from 'react'; -declare type ErrorBoundaryState = { - error: Error | null; -}; -export default class ErrorBoundary extends React.Component { - constructor(props: unknown); - static getDerivedStateFromError(error: Error): ErrorBoundaryState; - componentDidCatch(error: Error, errorInfo: ErrorInfo): void; - render(): React.ReactNode; -} -export {}; diff --git a/dist2/types/components/FeeSelector/FeeOption.d.ts b/dist2/types/components/FeeSelector/FeeOption.d.ts deleted file mode 100644 index 1837a05f6c5..00000000000 --- a/dist2/types/components/FeeSelector/FeeOption.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -/// -import { FeeAmount } from '@uniswap/v3-sdk'; -import { useFeeTierDistribution } from 'hooks/useFeeTierDistribution'; -import { PoolState } from 'hooks/usePools'; -interface FeeOptionProps { - feeAmount: FeeAmount; - active: boolean; - distributions: ReturnType['distributions']; - poolState: PoolState; - onClick: () => void; -} -export declare function FeeOption({ feeAmount, active, poolState, distributions, onClick }: FeeOptionProps): JSX.Element; -export {}; diff --git a/dist2/types/components/FeeSelector/FeeTierPercentageBadge.d.ts b/dist2/types/components/FeeSelector/FeeTierPercentageBadge.d.ts deleted file mode 100644 index 6a2c8e91223..00000000000 --- a/dist2/types/components/FeeSelector/FeeTierPercentageBadge.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -/// -import { FeeAmount } from '@uniswap/v3-sdk'; -import { useFeeTierDistribution } from 'hooks/useFeeTierDistribution'; -import { PoolState } from 'hooks/usePools'; -export declare function FeeTierPercentageBadge({ feeAmount, distributions, poolState, }: { - feeAmount: FeeAmount; - distributions: ReturnType['distributions']; - poolState: PoolState; -}): JSX.Element; diff --git a/dist2/types/components/FeeSelector/index.d.ts b/dist2/types/components/FeeSelector/index.d.ts deleted file mode 100644 index 77c5fe90712..00000000000 --- a/dist2/types/components/FeeSelector/index.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -/// -import { Currency } from '@uniswap/sdk-core'; -import { FeeAmount } from '@uniswap/v3-sdk'; -export default function FeeSelector({ disabled, feeAmount, handleFeePoolSelect, currencyA, currencyB, }: { - disabled?: boolean; - feeAmount?: FeeAmount; - handleFeePoolSelect: (feeAmount: FeeAmount) => void; - currencyA?: Currency | undefined; - currencyB?: Currency | undefined; -}): JSX.Element; diff --git a/dist2/types/components/FeeSelector/shared.d.ts b/dist2/types/components/FeeSelector/shared.d.ts deleted file mode 100644 index 3a4e8e6274e..00000000000 --- a/dist2/types/components/FeeSelector/shared.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { FeeAmount } from '@uniswap/v3-sdk'; -import { SupportedChainId } from 'constants/chains'; -import { ReactNode } from 'react'; -export declare const FEE_AMOUNT_DETAIL: Record; diff --git a/dist2/types/components/FormattedCurrencyAmount/index.d.ts b/dist2/types/components/FormattedCurrencyAmount/index.d.ts deleted file mode 100644 index b6ab9502343..00000000000 --- a/dist2/types/components/FormattedCurrencyAmount/index.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -/// -import { Currency, CurrencyAmount } from '@uniswap/sdk-core'; -export default function FormattedCurrencyAmount({ currencyAmount, significantDigits, }: { - currencyAmount: CurrencyAmount; - significantDigits?: number; -}): JSX.Element; diff --git a/dist2/types/components/Header/ChainConnectivityWarning.d.ts b/dist2/types/components/Header/ChainConnectivityWarning.d.ts deleted file mode 100644 index c9deac4829e..00000000000 --- a/dist2/types/components/Header/ChainConnectivityWarning.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -export declare function ChainConnectivityWarning(): JSX.Element; diff --git a/dist2/types/components/Header/HolidayOrnament.d.ts b/dist2/types/components/Header/HolidayOrnament.d.ts deleted file mode 100644 index 72ddbc3414d..00000000000 --- a/dist2/types/components/Header/HolidayOrnament.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { ReactElement } from 'react'; -declare const HolidayOrnament: () => ReactElement>; -export default HolidayOrnament; diff --git a/dist2/types/components/Header/NetworkSelector.d.ts b/dist2/types/components/Header/NetworkSelector.d.ts deleted file mode 100644 index edaf6033d8b..00000000000 --- a/dist2/types/components/Header/NetworkSelector.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -export default function NetworkSelector(): JSX.Element | null; diff --git a/dist2/types/components/Header/Polling.d.ts b/dist2/types/components/Header/Polling.d.ts deleted file mode 100644 index d458ddfc273..00000000000 --- a/dist2/types/components/Header/Polling.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -export default function Polling(): JSX.Element; diff --git a/dist2/types/components/Header/index.d.ts b/dist2/types/components/Header/index.d.ts deleted file mode 100644 index 573e642a3c0..00000000000 --- a/dist2/types/components/Header/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -export default function Header(): JSX.Element; diff --git a/dist2/types/components/HoverInlineText/index.d.ts b/dist2/types/components/HoverInlineText/index.d.ts deleted file mode 100644 index 67d3a9c2324..00000000000 --- a/dist2/types/components/HoverInlineText/index.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -/// -declare const HoverInlineText: ({ text, maxCharacters, margin, adjustSize, fontSize, textColor, link, ...rest }: { - text?: string | undefined; - maxCharacters?: number | undefined; - margin?: boolean | undefined; - adjustSize?: boolean | undefined; - fontSize?: string | undefined; - textColor?: string | undefined; - link?: boolean | undefined; -}) => JSX.Element; -export default HoverInlineText; diff --git a/dist2/types/components/Identicon/StatusIcon.d.ts b/dist2/types/components/Identicon/StatusIcon.d.ts deleted file mode 100644 index f13388ca19a..00000000000 --- a/dist2/types/components/Identicon/StatusIcon.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -/// -import { AbstractConnector } from '@web3-react/abstract-connector'; -import { Connector } from 'widgets-web3-react/types'; -export default function StatusIcon({ connector }: { - connector: AbstractConnector | Connector; -}): JSX.Element | null; diff --git a/dist2/types/components/Identicon/index.d.ts b/dist2/types/components/Identicon/index.d.ts deleted file mode 100644 index b3fecc924f0..00000000000 --- a/dist2/types/components/Identicon/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -export default function Identicon(): JSX.Element; diff --git a/dist2/types/components/InputStepCounter/InputStepCounter.d.ts b/dist2/types/components/InputStepCounter/InputStepCounter.d.ts deleted file mode 100644 index 5f488a42662..00000000000 --- a/dist2/types/components/InputStepCounter/InputStepCounter.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { FeeAmount } from '@uniswap/v3-sdk'; -import { ReactNode } from 'react'; -interface StepCounterProps { - value: string; - onUserInput: (value: string) => void; - decrement: () => string; - increment: () => string; - decrementDisabled?: boolean; - incrementDisabled?: boolean; - feeAmount?: FeeAmount; - label?: string; - width?: string; - locked?: boolean; - title: ReactNode; - tokenA: string | undefined; - tokenB: string | undefined; -} -declare const StepCounter: ({ value, decrement, increment, decrementDisabled, incrementDisabled, width, locked, onUserInput, title, tokenA, tokenB, }: StepCounterProps) => JSX.Element; -export default StepCounter; diff --git a/dist2/types/components/LiquidityChartRangeInput/Area.d.ts b/dist2/types/components/LiquidityChartRangeInput/Area.d.ts deleted file mode 100644 index 476c349ccf6..00000000000 --- a/dist2/types/components/LiquidityChartRangeInput/Area.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -/// -import { ScaleLinear } from 'd3'; -import { ChartEntry } from './types'; -export declare const Area: ({ series, xScale, yScale, xValue, yValue, fill, }: { - series: ChartEntry[]; - xScale: ScaleLinear; - yScale: ScaleLinear; - xValue: (d: ChartEntry) => number; - yValue: (d: ChartEntry) => number; - fill?: string | undefined; -}) => JSX.Element; diff --git a/dist2/types/components/LiquidityChartRangeInput/AxisBottom.d.ts b/dist2/types/components/LiquidityChartRangeInput/AxisBottom.d.ts deleted file mode 100644 index c3a866ac580..00000000000 --- a/dist2/types/components/LiquidityChartRangeInput/AxisBottom.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -/// -import { ScaleLinear } from 'd3'; -export declare const AxisBottom: ({ xScale, innerHeight, offset, }: { - xScale: ScaleLinear; - innerHeight: number; - offset?: number | undefined; -}) => JSX.Element; diff --git a/dist2/types/components/LiquidityChartRangeInput/Brush.d.ts b/dist2/types/components/LiquidityChartRangeInput/Brush.d.ts deleted file mode 100644 index d36dd5da09e..00000000000 --- a/dist2/types/components/LiquidityChartRangeInput/Brush.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -/// -import { ScaleLinear } from 'd3'; -export declare const Brush: ({ id, xScale, interactive, brushLabelValue, brushExtent, setBrushExtent, innerWidth, innerHeight, westHandleColor, eastHandleColor, }: { - id: string; - xScale: ScaleLinear; - interactive: boolean; - brushLabelValue: (d: 'w' | 'e', x: number) => string; - brushExtent: [number, number]; - setBrushExtent: (extent: [number, number], mode: string | undefined) => void; - innerWidth: number; - innerHeight: number; - westHandleColor: string; - eastHandleColor: string; -}) => JSX.Element; diff --git a/dist2/types/components/LiquidityChartRangeInput/Chart.d.ts b/dist2/types/components/LiquidityChartRangeInput/Chart.d.ts deleted file mode 100644 index 7cbe2840652..00000000000 --- a/dist2/types/components/LiquidityChartRangeInput/Chart.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/// -import { ChartEntry, LiquidityChartRangeInputProps } from './types'; -export declare const xAccessor: (d: ChartEntry) => number; -export declare const yAccessor: (d: ChartEntry) => number; -export declare function Chart({ id, data: { series, current }, ticksAtLimit, styles, dimensions: { width, height }, margins, interactive, brushDomain, brushLabels, onBrushDomainChange, zoomLevels, }: LiquidityChartRangeInputProps): JSX.Element; diff --git a/dist2/types/components/LiquidityChartRangeInput/Line.d.ts b/dist2/types/components/LiquidityChartRangeInput/Line.d.ts deleted file mode 100644 index a5db2172ab0..00000000000 --- a/dist2/types/components/LiquidityChartRangeInput/Line.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -/// -import { ScaleLinear } from 'd3'; -export declare const Line: ({ value, xScale, innerHeight, }: { - value: number; - xScale: ScaleLinear; - innerHeight: number; -}) => JSX.Element; diff --git a/dist2/types/components/LiquidityChartRangeInput/Zoom.d.ts b/dist2/types/components/LiquidityChartRangeInput/Zoom.d.ts deleted file mode 100644 index 0c9567bd5e6..00000000000 --- a/dist2/types/components/LiquidityChartRangeInput/Zoom.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -/// -import { ScaleLinear, ZoomTransform } from 'd3'; -import { ZoomLevels } from './types'; -export declare const ZoomOverlay: import("styled-components").StyledComponent<"rect", import("styled-components").DefaultTheme, {}, never>; -export default function Zoom({ svg, xScale, setZoom, width, height, resetBrush, showResetButton, zoomLevels, }: { - svg: SVGElement | null; - xScale: ScaleLinear; - setZoom: (transform: ZoomTransform) => void; - width: number; - height: number; - resetBrush: () => void; - showResetButton: boolean; - zoomLevels: ZoomLevels; -}): JSX.Element; diff --git a/dist2/types/components/LiquidityChartRangeInput/hooks.d.ts b/dist2/types/components/LiquidityChartRangeInput/hooks.d.ts deleted file mode 100644 index 5c0490a1426..00000000000 --- a/dist2/types/components/LiquidityChartRangeInput/hooks.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Currency } from '@uniswap/sdk-core'; -import { FeeAmount } from '@uniswap/v3-sdk'; -import { ChartEntry } from './types'; -export declare function useDensityChartData({ currencyA, currencyB, feeAmount, }: { - currencyA: Currency | undefined; - currencyB: Currency | undefined; - feeAmount: FeeAmount | undefined; -}): { - isLoading: boolean; - isUninitialized: boolean; - isError: boolean; - error: any; - formattedData: ChartEntry[] | undefined; -}; diff --git a/dist2/types/components/LiquidityChartRangeInput/index.d.ts b/dist2/types/components/LiquidityChartRangeInput/index.d.ts deleted file mode 100644 index fb1c3dbaede..00000000000 --- a/dist2/types/components/LiquidityChartRangeInput/index.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -/// -import { Currency, Price, Token } from '@uniswap/sdk-core'; -import { FeeAmount } from '@uniswap/v3-sdk'; -import { Bound } from 'state/mint/v3/actions'; -export default function LiquidityChartRangeInput({ currencyA, currencyB, feeAmount, ticksAtLimit, price, priceLower, priceUpper, onLeftRangeInput, onRightRangeInput, interactive, }: { - currencyA: Currency | undefined; - currencyB: Currency | undefined; - feeAmount?: FeeAmount; - ticksAtLimit: { - [bound in Bound]?: boolean | undefined; - }; - price: number | undefined; - priceLower?: Price; - priceUpper?: Price; - onLeftRangeInput: (typedValue: string) => void; - onRightRangeInput: (typedValue: string) => void; - interactive: boolean; -}): JSX.Element; diff --git a/dist2/types/components/LiquidityChartRangeInput/svg.d.ts b/dist2/types/components/LiquidityChartRangeInput/svg.d.ts deleted file mode 100644 index 6706394299b..00000000000 --- a/dist2/types/components/LiquidityChartRangeInput/svg.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -/// -export declare const brushHandlePath: (height: number) => string; -export declare const brushHandleAccentPath: () => string; -export declare const OffScreenHandle: ({ color, size, margin, }: { - color: string; - size?: number | undefined; - margin?: number | undefined; -}) => JSX.Element; diff --git a/dist2/types/components/LiquidityChartRangeInput/types.d.ts b/dist2/types/components/LiquidityChartRangeInput/types.d.ts deleted file mode 100644 index fed3dab3c68..00000000000 --- a/dist2/types/components/LiquidityChartRangeInput/types.d.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { Bound } from 'state/mint/v3/actions'; -export interface ChartEntry { - activeLiquidity: number; - price0: number; -} -export interface Dimensions { - width: number; - height: number; -} -export interface Margins { - top: number; - right: number; - bottom: number; - left: number; -} -export interface ZoomLevels { - initialMin: number; - initialMax: number; - min: number; - max: number; -} -export interface LiquidityChartRangeInputProps { - id?: string; - data: { - series: ChartEntry[]; - current: number; - }; - ticksAtLimit: { - [bound in Bound]?: boolean | undefined; - }; - styles: { - area: { - selection: string; - }; - brush: { - handle: { - west: string; - east: string; - }; - }; - }; - dimensions: Dimensions; - margins: Margins; - interactive?: boolean; - brushLabels: (d: 'w' | 'e', x: number) => string; - brushDomain: [number, number] | undefined; - onBrushDomainChange: (domain: [number, number], mode: string | undefined) => void; - zoomLevels: ZoomLevels; -} diff --git a/dist2/types/components/ListLogo/index.d.ts b/dist2/types/components/ListLogo/index.d.ts deleted file mode 100644 index 1f1f079201d..00000000000 --- a/dist2/types/components/ListLogo/index.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import React from 'react'; -export default function ListLogo({ logoURI, style, size, alt, }: { - logoURI: string; - size?: string; - style?: React.CSSProperties; - alt?: string; -}): JSX.Element; diff --git a/dist2/types/components/Loader/index.d.ts b/dist2/types/components/Loader/index.d.ts deleted file mode 100644 index 0f28f56bdde..00000000000 --- a/dist2/types/components/Loader/index.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -/// -/** - * Takes in custom size and stroke for circle color, default to primary color as fill, - * need ...rest for layered styles on top - */ -export default function Loader({ size, stroke, ...rest }: { - size?: string; - stroke?: string; - [k: string]: any; -}): JSX.Element; diff --git a/dist2/types/components/Loader/styled.d.ts b/dist2/types/components/Loader/styled.d.ts deleted file mode 100644 index e76fc5db6f4..00000000000 --- a/dist2/types/components/Loader/styled.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -export declare const loadingAnimation: import("styled-components").Keyframes; -export declare const LoadingRows: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; -export declare const loadingOpacityMixin: import("styled-components").FlattenInterpolation>; -export declare const LoadingOpacityContainer: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, { - $loading: boolean; -}, never>; diff --git a/dist2/types/components/Logo/index.d.ts b/dist2/types/components/Logo/index.d.ts deleted file mode 100644 index 8fafa262199..00000000000 --- a/dist2/types/components/Logo/index.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -/// -import { ImageProps } from 'rebass'; -interface LogoProps extends Pick { - srcs: string[]; -} -/** - * Renders an image by sequentially trying a list of URIs, and then eventually a fallback triangle alert - */ -export default function Logo({ srcs, alt, style, ...rest }: LogoProps): JSX.Element; -export {}; diff --git a/dist2/types/components/Menu/index.d.ts b/dist2/types/components/Menu/index.d.ts deleted file mode 100644 index 2b7aced3e88..00000000000 --- a/dist2/types/components/Menu/index.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -export declare enum FlyoutAlignment { - LEFT = "LEFT", - RIGHT = "RIGHT" -} -export default function Menu(): JSX.Element; -interface NewMenuProps { - flyoutAlignment?: FlyoutAlignment; - ToggleUI?: React.FunctionComponent; - menuItems: { - content: any; - link: string; - external: boolean; - }[]; -} -export declare const NewMenu: ({ flyoutAlignment, ToggleUI, menuItems, ...rest }: NewMenuProps) => JSX.Element; -export {}; diff --git a/dist2/types/components/Modal/index.d.ts b/dist2/types/components/Modal/index.d.ts deleted file mode 100644 index b0b888e30ab..00000000000 --- a/dist2/types/components/Modal/index.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import React from 'react'; -interface ModalProps { - isOpen: boolean; - onDismiss: () => void; - minHeight?: number | false; - maxHeight?: number; - initialFocusRef?: React.RefObject; - children?: React.ReactNode; -} -export default function Modal({ isOpen, onDismiss, minHeight, maxHeight, initialFocusRef, children, }: ModalProps): JSX.Element; -export {}; diff --git a/dist2/types/components/ModalViews/index.d.ts b/dist2/types/components/ModalViews/index.d.ts deleted file mode 100644 index 44fe5a8718b..00000000000 --- a/dist2/types/components/ModalViews/index.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -/// -export declare function LoadingView({ children, onDismiss }: { - children: any; - onDismiss: () => void; -}): JSX.Element; -export declare function SubmittedView({ children, onDismiss, hash, }: { - children: any; - onDismiss: () => void; - hash: string | undefined; -}): JSX.Element; diff --git a/dist2/types/components/NavigationTabs/index.d.ts b/dist2/types/components/NavigationTabs/index.d.ts deleted file mode 100644 index be4f8fac18d..00000000000 --- a/dist2/types/components/NavigationTabs/index.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { Percent } from '@uniswap/sdk-core'; -import { ReactNode } from 'react'; -export declare function SwapPoolTabs({ active }: { - active: 'swap' | 'pool'; -}): JSX.Element; -export declare function FindPoolTabs({ origin }: { - origin: string; -}): JSX.Element; -export declare function AddRemoveTabs({ adding, creating, defaultSlippage, positionID, children, }: { - adding: boolean; - creating: boolean; - defaultSlippage: Percent; - positionID?: string | undefined; - showBackLink?: boolean; - children?: ReactNode | undefined; -}): JSX.Element; -export declare function CreateProposalTabs(): JSX.Element; diff --git a/dist2/types/components/NetworkAlert/NetworkAlert.d.ts b/dist2/types/components/NetworkAlert/NetworkAlert.d.ts deleted file mode 100644 index cafc4df98c0..00000000000 --- a/dist2/types/components/NetworkAlert/NetworkAlert.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -export declare const Controls: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; -export declare function NetworkAlert(): JSX.Element | null; diff --git a/dist2/types/components/NumericalInput/index.d.ts b/dist2/types/components/NumericalInput/index.d.ts deleted file mode 100644 index 5a70ee343d5..00000000000 --- a/dist2/types/components/NumericalInput/index.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import React from 'react'; -export declare const Input: React.NamedExoticComponent<{ - value: string | number; - onUserInput: (input: string) => void; - error?: boolean | undefined; - fontSize?: string | undefined; - align?: "left" | "right" | undefined; - prependSymbol?: string | undefined; -} & Omit, "ref" | "onChange" | "as">>; -export default Input; diff --git a/dist2/types/components/Popover/index.d.ts b/dist2/types/components/Popover/index.d.ts deleted file mode 100644 index 11d864ac4ce..00000000000 --- a/dist2/types/components/Popover/index.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Placement } from '@popperjs/core'; -import React from 'react'; -export interface PopoverProps { - content: React.ReactNode; - show: boolean; - children: React.ReactNode; - placement?: Placement; -} -export default function Popover({ content, show, children, placement }: PopoverProps): JSX.Element; diff --git a/dist2/types/components/Popups/ClaimPopup.d.ts b/dist2/types/components/Popups/ClaimPopup.d.ts deleted file mode 100644 index 182c525361b..00000000000 --- a/dist2/types/components/Popups/ClaimPopup.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -export default function ClaimPopup(): JSX.Element; diff --git a/dist2/types/components/Popups/FailedNetworkSwitchPopup.d.ts b/dist2/types/components/Popups/FailedNetworkSwitchPopup.d.ts deleted file mode 100644 index 7f1d8a0bde1..00000000000 --- a/dist2/types/components/Popups/FailedNetworkSwitchPopup.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/// -import { SupportedChainId } from 'constants/chains'; -export default function FailedNetworkSwitchPopup({ chainId }: { - chainId: SupportedChainId; -}): JSX.Element; diff --git a/dist2/types/components/Popups/PopupItem.d.ts b/dist2/types/components/Popups/PopupItem.d.ts deleted file mode 100644 index 6089457b48e..00000000000 --- a/dist2/types/components/Popups/PopupItem.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -/// -import { PopupContent } from '../../state/application/reducer'; -export default function PopupItem({ removeAfterMs, content, popKey, }: { - removeAfterMs: number | null; - content: PopupContent; - popKey: string; -}): JSX.Element; diff --git a/dist2/types/components/Popups/SurveyPopup.d.ts b/dist2/types/components/Popups/SurveyPopup.d.ts deleted file mode 100644 index 16ab612ae79..00000000000 --- a/dist2/types/components/Popups/SurveyPopup.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -export default function SurveyPopup(): JSX.Element; diff --git a/dist2/types/components/Popups/TransactionPopup.d.ts b/dist2/types/components/Popups/TransactionPopup.d.ts deleted file mode 100644 index 21832e5535c..00000000000 --- a/dist2/types/components/Popups/TransactionPopup.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -/// -export default function TransactionPopup({ hash }: { - hash: string; -}): JSX.Element | null; diff --git a/dist2/types/components/Popups/index.d.ts b/dist2/types/components/Popups/index.d.ts deleted file mode 100644 index 07f76c89a2c..00000000000 --- a/dist2/types/components/Popups/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -export default function Popups(): JSX.Element; diff --git a/dist2/types/components/PositionCard/Sushi.d.ts b/dist2/types/components/PositionCard/Sushi.d.ts deleted file mode 100644 index 2fe46d44704..00000000000 --- a/dist2/types/components/PositionCard/Sushi.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -/// -import { Token } from '@uniswap/sdk-core'; -interface PositionCardProps { - tokenA: Token; - tokenB: Token; - liquidityToken: Token; - border?: string; -} -export default function SushiPositionCard({ tokenA, tokenB, liquidityToken, border }: PositionCardProps): JSX.Element; -export {}; diff --git a/dist2/types/components/PositionCard/V2.d.ts b/dist2/types/components/PositionCard/V2.d.ts deleted file mode 100644 index 50337973ed4..00000000000 --- a/dist2/types/components/PositionCard/V2.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -/// -import { CurrencyAmount, Token } from '@uniswap/sdk-core'; -import { Pair } from '@uniswap/v2-sdk'; -interface PositionCardProps { - pair: Pair; - showUnwrapped?: boolean; - border?: string; - stakedBalance?: CurrencyAmount; -} -export default function V2PositionCard({ pair, border, stakedBalance }: PositionCardProps): JSX.Element; -export {}; diff --git a/dist2/types/components/PositionCard/index.d.ts b/dist2/types/components/PositionCard/index.d.ts deleted file mode 100644 index a30afd8fe88..00000000000 --- a/dist2/types/components/PositionCard/index.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -/// -import { CurrencyAmount, Token } from '@uniswap/sdk-core'; -import { Pair } from '@uniswap/v2-sdk'; -export declare const FixedHeightRow: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { - width?: string | undefined; - align?: string | undefined; - justify?: string | undefined; - padding?: string | undefined; - border?: string | undefined; - borderRadius?: string | undefined; -}, never>; -interface PositionCardProps { - pair: Pair; - showUnwrapped?: boolean; - border?: string; - stakedBalance?: CurrencyAmount; -} -export declare function MinimalPositionCard({ pair, showUnwrapped, border }: PositionCardProps): JSX.Element; -export default function FullPositionCard({ pair, border, stakedBalance }: PositionCardProps): JSX.Element; -export {}; diff --git a/dist2/types/components/PositionList/index.d.ts b/dist2/types/components/PositionList/index.d.ts deleted file mode 100644 index b87bea2dbc0..00000000000 --- a/dist2/types/components/PositionList/index.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import React from 'react'; -import { PositionDetails } from 'types/position'; -declare type PositionListProps = React.PropsWithChildren<{ - positions: PositionDetails[]; - setUserHideClosedPositions: any; - userHideClosedPositions: boolean; -}>; -export default function PositionList({ positions, setUserHideClosedPositions, userHideClosedPositions, }: PositionListProps): JSX.Element; -export {}; diff --git a/dist2/types/components/PositionListItem/index.d.ts b/dist2/types/components/PositionListItem/index.d.ts deleted file mode 100644 index c1eeca56fac..00000000000 --- a/dist2/types/components/PositionListItem/index.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -/// -import { Price, Token } from '@uniswap/sdk-core'; -import { Position } from '@uniswap/v3-sdk'; -import { PositionDetails } from 'types/position'; -interface PositionListItemProps { - positionDetails: PositionDetails; -} -export declare function getPriceOrderingFromPositionForUI(position?: Position): { - priceLower?: Price; - priceUpper?: Price; - quote?: Token; - base?: Token; -}; -export default function PositionListItem({ positionDetails }: PositionListItemProps): JSX.Element; -export {}; diff --git a/dist2/types/components/PositionPreview/index.d.ts b/dist2/types/components/PositionPreview/index.d.ts deleted file mode 100644 index dd0bcecea28..00000000000 --- a/dist2/types/components/PositionPreview/index.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Currency } from '@uniswap/sdk-core'; -import { Position } from '@uniswap/v3-sdk'; -import { ReactNode } from 'react'; -export declare const PositionPreview: ({ position, title, inRange, baseCurrencyDefault, ticksAtLimit, }: { - position: Position; - title?: ReactNode; - inRange: boolean; - baseCurrencyDefault?: Currency | undefined; - ticksAtLimit: { - [bound: string]: boolean | undefined; - }; -}) => JSX.Element; diff --git a/dist2/types/components/PrivacyPolicy/index.d.ts b/dist2/types/components/PrivacyPolicy/index.d.ts deleted file mode 100644 index 8764a519bf3..00000000000 --- a/dist2/types/components/PrivacyPolicy/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -export declare function PrivacyPolicyModal(): JSX.Element; -export declare function PrivacyPolicy(): JSX.Element; diff --git a/dist2/types/components/ProgressSteps/index.d.ts b/dist2/types/components/ProgressSteps/index.d.ts deleted file mode 100644 index d424c7286c7..00000000000 --- a/dist2/types/components/ProgressSteps/index.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -/// -interface ProgressCirclesProps { - steps: boolean[]; - disabled?: boolean; -} -/** - * Based on array of steps, create a step counter of circles. - * A circle can be enabled, disabled, or confirmed. States are derived - * from previous step. - * - * An extra circle is added to represent the ability to swap, add, or remove. - * This step will never be marked as complete (because no 'txn done' state in body ui). - * - * @param steps array of booleans where true means step is complete - */ -export default function ProgressCircles({ steps, disabled, ...rest }: ProgressCirclesProps): JSX.Element; -export {}; diff --git a/dist2/types/components/QuestionHelper/index.d.ts b/dist2/types/components/QuestionHelper/index.d.ts deleted file mode 100644 index 0f44eb7a0ca..00000000000 --- a/dist2/types/components/QuestionHelper/index.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { ReactNode } from 'react'; -export default function QuestionHelper({ text }: { - text: ReactNode; - size?: number; -}): JSX.Element; diff --git a/dist2/types/components/RangeSelector/PresetsButtons.d.ts b/dist2/types/components/RangeSelector/PresetsButtons.d.ts deleted file mode 100644 index 9521ad15e5c..00000000000 --- a/dist2/types/components/RangeSelector/PresetsButtons.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -/// -export default function PresetsButtons({ setFullRange }: { - setFullRange: () => void; -}): JSX.Element; diff --git a/dist2/types/components/RangeSelector/index.d.ts b/dist2/types/components/RangeSelector/index.d.ts deleted file mode 100644 index 5c70a464d49..00000000000 --- a/dist2/types/components/RangeSelector/index.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -/// -import { Currency, Price, Token } from '@uniswap/sdk-core'; -import { Bound } from 'state/mint/v3/actions'; -export default function RangeSelector({ priceLower, priceUpper, onLeftRangeInput, onRightRangeInput, getDecrementLower, getIncrementLower, getDecrementUpper, getIncrementUpper, currencyA, currencyB, feeAmount, ticksAtLimit, }: { - priceLower?: Price; - priceUpper?: Price; - getDecrementLower: () => string; - getIncrementLower: () => string; - getDecrementUpper: () => string; - getIncrementUpper: () => string; - onLeftRangeInput: (typedValue: string) => void; - onRightRangeInput: (typedValue: string) => void; - currencyA?: Currency | null; - currencyB?: Currency | null; - feeAmount?: number; - ticksAtLimit: { - [bound in Bound]?: boolean | undefined; - }; -}): JSX.Element; diff --git a/dist2/types/components/RateToggle/index.d.ts b/dist2/types/components/RateToggle/index.d.ts deleted file mode 100644 index 3ae49b3737b..00000000000 --- a/dist2/types/components/RateToggle/index.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -/// -import { Currency } from '@uniswap/sdk-core'; -export default function RateToggle({ currencyA, currencyB, handleRateToggle, }: { - currencyA: Currency; - currencyB: Currency; - handleRateToggle: () => void; -}): JSX.Element | null; diff --git a/dist2/types/components/RoutingDiagram/RoutingDiagram.d.ts b/dist2/types/components/RoutingDiagram/RoutingDiagram.d.ts deleted file mode 100644 index c396fa9d08a..00000000000 --- a/dist2/types/components/RoutingDiagram/RoutingDiagram.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -/// -import { Protocol } from '@uniswap/router-sdk'; -import { Currency, Percent } from '@uniswap/sdk-core'; -import { FeeAmount } from '@uniswap/v3-sdk'; -export interface RoutingDiagramEntry { - percent: Percent; - path: [Currency, Currency, FeeAmount][]; - protocol: Protocol; -} -export default function RoutingDiagram({ currencyIn, currencyOut, routes, }: { - currencyIn: Currency; - currencyOut: Currency; - routes: RoutingDiagramEntry[]; -}): JSX.Element; diff --git a/dist2/types/components/Row/index.d.ts b/dist2/types/components/Row/index.d.ts deleted file mode 100644 index f40be67e24d..00000000000 --- a/dist2/types/components/Row/index.d.ts +++ /dev/null @@ -1,41 +0,0 @@ -/// -declare const Row: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { - width?: string | undefined; - align?: string | undefined; - justify?: string | undefined; - padding?: string | undefined; - border?: string | undefined; - borderRadius?: string | undefined; -}, never>; -export declare const RowBetween: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { - width?: string | undefined; - align?: string | undefined; - justify?: string | undefined; - padding?: string | undefined; - border?: string | undefined; - borderRadius?: string | undefined; -}, never>; -export declare const RowFlat: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; -export declare const AutoRow: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { - width?: string | undefined; - align?: string | undefined; - justify?: string | undefined; - padding?: string | undefined; - border?: string | undefined; - borderRadius?: string | undefined; -} & { - gap?: string | undefined; - justify?: string | undefined; -}, never>; -export declare const RowFixed: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { - width?: string | undefined; - align?: string | undefined; - justify?: string | undefined; - padding?: string | undefined; - border?: string | undefined; - borderRadius?: string | undefined; -} & { - gap?: string | undefined; - justify?: string | undefined; -}, never>; -export default Row; diff --git a/dist2/types/components/SearchModal/BlockedToken.d.ts b/dist2/types/components/SearchModal/BlockedToken.d.ts deleted file mode 100644 index b298f4745f5..00000000000 --- a/dist2/types/components/SearchModal/BlockedToken.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -/// -import { Token } from '@uniswap/sdk-core'; -interface BlockedTokenProps { - onBack: (() => void) | undefined; - onDismiss: (() => void) | undefined; - blockedTokens: Token[]; -} -declare const BlockedToken: ({ onBack, onDismiss, blockedTokens }: BlockedTokenProps) => JSX.Element; -export default BlockedToken; diff --git a/dist2/types/components/SearchModal/CommonBases.d.ts b/dist2/types/components/SearchModal/CommonBases.d.ts deleted file mode 100644 index 4e3d9137987..00000000000 --- a/dist2/types/components/SearchModal/CommonBases.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -/// -import { Currency } from '@uniswap/sdk-core'; -export default function CommonBases({ chainId, onSelect, selectedCurrency, }: { - chainId?: number; - selectedCurrency?: Currency | null; - onSelect: (currency: Currency) => void; -}): JSX.Element | null; diff --git a/dist2/types/components/SearchModal/CurrencyList.d.ts b/dist2/types/components/SearchModal/CurrencyList.d.ts deleted file mode 100644 index 2cbbb3f4d43..00000000000 --- a/dist2/types/components/SearchModal/CurrencyList.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Currency, Token } from '@uniswap/sdk-core'; -import { MutableRefObject } from 'react'; -import { FixedSizeList } from 'react-window'; -import { WrappedTokenInfo } from '../../state/lists/wrappedTokenInfo'; -export default function CurrencyList({ height, currencies, otherListTokens, selectedCurrency, onCurrencySelect, otherCurrency, fixedListRef, showImportView, setImportToken, showCurrencyAmount, }: { - height: number; - currencies: Currency[]; - otherListTokens?: WrappedTokenInfo[]; - selectedCurrency?: Currency | null; - onCurrencySelect: (currency: Currency) => void; - otherCurrency?: Currency | null; - fixedListRef?: MutableRefObject; - showImportView: () => void; - setImportToken: (token: Token) => void; - showCurrencyAmount?: boolean; -}): JSX.Element; diff --git a/dist2/types/components/SearchModal/CurrencySearch.d.ts b/dist2/types/components/SearchModal/CurrencySearch.d.ts deleted file mode 100644 index a575bb30251..00000000000 --- a/dist2/types/components/SearchModal/CurrencySearch.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -/// -import { Currency, Token } from '@uniswap/sdk-core'; -interface CurrencySearchProps { - isOpen: boolean; - onDismiss: () => void; - selectedCurrency?: Currency | null; - onCurrencySelect: (currency: Currency) => void; - otherSelectedCurrency?: Currency | null; - showCommonBases?: boolean; - showCurrencyAmount?: boolean; - disableNonToken?: boolean; - showManageView: () => void; - showImportView: () => void; - setImportToken: (token: Token) => void; -} -export declare function CurrencySearch({ selectedCurrency, onCurrencySelect, otherSelectedCurrency, showCommonBases, showCurrencyAmount, disableNonToken, onDismiss, isOpen, showManageView, showImportView, setImportToken, }: CurrencySearchProps): JSX.Element; -export {}; diff --git a/dist2/types/components/SearchModal/CurrencySearchModal.d.ts b/dist2/types/components/SearchModal/CurrencySearchModal.d.ts deleted file mode 100644 index 34702203bbc..00000000000 --- a/dist2/types/components/SearchModal/CurrencySearchModal.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -/// -import { Currency } from '@uniswap/sdk-core'; -interface CurrencySearchModalProps { - isOpen: boolean; - onDismiss: () => void; - selectedCurrency?: Currency | null; - onCurrencySelect: (currency: Currency) => void; - otherSelectedCurrency?: Currency | null; - showCommonBases?: boolean; - showCurrencyAmount?: boolean; - disableNonToken?: boolean; -} -export declare enum CurrencyModalView { - search = 0, - manage = 1, - importToken = 2, - importList = 3 -} -export default function CurrencySearchModal({ isOpen, onDismiss, onCurrencySelect, selectedCurrency, otherSelectedCurrency, showCommonBases, showCurrencyAmount, disableNonToken, }: CurrencySearchModalProps): JSX.Element; -export {}; diff --git a/dist2/types/components/SearchModal/ImportList.d.ts b/dist2/types/components/SearchModal/ImportList.d.ts deleted file mode 100644 index cdcc31dc088..00000000000 --- a/dist2/types/components/SearchModal/ImportList.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -/// -import { TokenList } from '@uniswap/token-lists'; -import { CurrencyModalView } from './CurrencySearchModal'; -interface ImportProps { - listURL: string; - list: TokenList; - onDismiss: () => void; - setModalView: (view: CurrencyModalView) => void; -} -export declare function ImportList({ listURL, list, setModalView, onDismiss }: ImportProps): JSX.Element; -export {}; diff --git a/dist2/types/components/SearchModal/ImportRow.d.ts b/dist2/types/components/SearchModal/ImportRow.d.ts deleted file mode 100644 index 04e84e7ff55..00000000000 --- a/dist2/types/components/SearchModal/ImportRow.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Token } from '@uniswap/sdk-core'; -import { CSSProperties } from 'react'; -export default function ImportRow({ token, style, dim, showImportView, setImportToken, }: { - token: Token; - style?: CSSProperties; - dim?: boolean; - showImportView: () => void; - setImportToken: (token: Token) => void; -}): JSX.Element; diff --git a/dist2/types/components/SearchModal/ImportToken.d.ts b/dist2/types/components/SearchModal/ImportToken.d.ts deleted file mode 100644 index 1b4cac68da6..00000000000 --- a/dist2/types/components/SearchModal/ImportToken.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -/// -import { Currency, Token } from '@uniswap/sdk-core'; -import { TokenList } from '@uniswap/token-lists'; -interface ImportProps { - tokens: Token[]; - list?: TokenList; - onBack?: () => void; - onDismiss?: () => void; - handleCurrencySelect?: (currency: Currency) => void; -} -export declare function ImportToken(props: ImportProps): JSX.Element; -export {}; diff --git a/dist2/types/components/SearchModal/Manage.d.ts b/dist2/types/components/SearchModal/Manage.d.ts deleted file mode 100644 index 1f60f2d915e..00000000000 --- a/dist2/types/components/SearchModal/Manage.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -/// -import { Token } from '@uniswap/sdk-core'; -import { TokenList } from '@uniswap/token-lists'; -import { CurrencyModalView } from './CurrencySearchModal'; -export default function Manage({ onDismiss, setModalView, setImportList, setImportToken, setListUrl, }: { - onDismiss: () => void; - setModalView: (view: CurrencyModalView) => void; - setImportToken: (token: Token) => void; - setImportList: (list: TokenList) => void; - setListUrl: (url: string) => void; -}): JSX.Element; diff --git a/dist2/types/components/SearchModal/ManageLists.d.ts b/dist2/types/components/SearchModal/ManageLists.d.ts deleted file mode 100644 index 68632b1672e..00000000000 --- a/dist2/types/components/SearchModal/ManageLists.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -/// -import { TokenList } from '@uniswap/token-lists'; -import { CurrencyModalView } from './CurrencySearchModal'; -export declare function ManageLists({ setModalView, setImportList, setListUrl, }: { - setModalView: (view: CurrencyModalView) => void; - setImportList: (list: TokenList) => void; - setListUrl: (url: string) => void; -}): JSX.Element; diff --git a/dist2/types/components/SearchModal/ManageTokens.d.ts b/dist2/types/components/SearchModal/ManageTokens.d.ts deleted file mode 100644 index 88a5f0097fa..00000000000 --- a/dist2/types/components/SearchModal/ManageTokens.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -/// -import { Token } from '@uniswap/sdk-core'; -import { CurrencyModalView } from './CurrencySearchModal'; -export default function ManageTokens({ setModalView, setImportToken, }: { - setModalView: (view: CurrencyModalView) => void; - setImportToken: (token: Token) => void; -}): JSX.Element; diff --git a/dist2/types/components/SearchModal/TokenImportCard.d.ts b/dist2/types/components/SearchModal/TokenImportCard.d.ts deleted file mode 100644 index 44e1e1b8f29..00000000000 --- a/dist2/types/components/SearchModal/TokenImportCard.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -/// -import { Token } from '@uniswap/sdk-core'; -import { TokenList } from '@uniswap/token-lists'; -interface TokenImportCardProps { - list?: TokenList; - token: Token; -} -declare const TokenImportCard: ({ list, token }: TokenImportCardProps) => JSX.Element; -export default TokenImportCard; diff --git a/dist2/types/components/SearchModal/styleds.d.ts b/dist2/types/components/SearchModal/styleds.d.ts deleted file mode 100644 index 48407adbf01..00000000000 --- a/dist2/types/components/SearchModal/styleds.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -/// -export declare const TextDot: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; -export declare const Checkbox: import("styled-components").StyledComponent<"input", import("styled-components").DefaultTheme, {}, never>; -export declare const PaddedColumn: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, { - gap?: string | undefined; - justify?: "end" | "space-between" | "stretch" | "center" | "flex-end" | "flex-start" | "start" | undefined; -}, never>; -export declare const MenuItem: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { - width?: string | undefined; - align?: string | undefined; - justify?: string | undefined; - padding?: string | undefined; - border?: string | undefined; - borderRadius?: string | undefined; -}, never>; -export declare const SearchInput: import("styled-components").StyledComponent<"input", import("styled-components").DefaultTheme, {}, never>; -export declare const Separator: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; -export declare const SeparatorDark: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; diff --git a/dist2/types/components/Settings/index.d.ts b/dist2/types/components/Settings/index.d.ts deleted file mode 100644 index ee16ae4aa2b..00000000000 --- a/dist2/types/components/Settings/index.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/// -import { Percent } from '@uniswap/sdk-core'; -export default function SettingsTab({ placeholderSlippage }: { - placeholderSlippage: Percent; -}): JSX.Element; diff --git a/dist2/types/components/Slider/index.d.ts b/dist2/types/components/Slider/index.d.ts deleted file mode 100644 index 0ca82a6d3aa..00000000000 --- a/dist2/types/components/Slider/index.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -/// -interface InputSliderProps { - value: number; - onChange: (value: number) => void; - step?: number; - min?: number; - max?: number; - size?: number; -} -export default function Slider({ value, onChange, min, step, max, size, ...rest }: InputSliderProps): JSX.Element; -export {}; diff --git a/dist2/types/components/SwitchLocaleLink/index.d.ts b/dist2/types/components/SwitchLocaleLink/index.d.ts deleted file mode 100644 index 2aa88b94700..00000000000 --- a/dist2/types/components/SwitchLocaleLink/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -export declare function SwitchLocaleLink(): JSX.Element | null; diff --git a/dist2/types/components/TextInput/index.d.ts b/dist2/types/components/TextInput/index.d.ts deleted file mode 100644 index 74fec2513af..00000000000 --- a/dist2/types/components/TextInput/index.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -import React from 'react'; -export declare const TextInput: ({ className, value, onUserInput, placeholder, fontSize, }: { - className?: string | undefined; - value: string; - onUserInput: (value: string) => void; - placeholder: string; - fontSize: string; -}) => JSX.Element; -export declare const ResizingTextArea: React.MemoExoticComponent<({ className, value, onUserInput, placeholder, fontSize, }: { - className?: string | undefined; - value: string; - onUserInput: (value: string) => void; - placeholder: string; - fontSize: string; -}) => JSX.Element>; diff --git a/dist2/types/components/Toggle/ListToggle.d.ts b/dist2/types/components/Toggle/ListToggle.d.ts deleted file mode 100644 index c829ca07567..00000000000 --- a/dist2/types/components/Toggle/ListToggle.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -/// -interface ToggleProps { - id?: string; - isActive: boolean; - bgColor: string; - toggle: () => void; -} -export default function ListToggle({ id, isActive, bgColor, toggle }: ToggleProps): JSX.Element; -export {}; diff --git a/dist2/types/components/Toggle/MultiToggle.d.ts b/dist2/types/components/Toggle/MultiToggle.d.ts deleted file mode 100644 index 7cd8fc5cc44..00000000000 --- a/dist2/types/components/Toggle/MultiToggle.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -export declare const ToggleWrapper: import("styled-components").StyledComponent<"button", import("styled-components").DefaultTheme, { - width?: string | undefined; -}, never>; -export declare const ToggleElement: import("styled-components").StyledComponent<"span", import("styled-components").DefaultTheme, { - isActive?: boolean | undefined; - fontSize?: string | undefined; -}, never>; diff --git a/dist2/types/components/Toggle/index.d.ts b/dist2/types/components/Toggle/index.d.ts deleted file mode 100644 index 068b44ce2c4..00000000000 --- a/dist2/types/components/Toggle/index.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { ReactNode } from 'react'; -interface ToggleProps { - id?: string; - isActive: boolean; - toggle: () => void; - checked?: ReactNode; - unchecked?: ReactNode; -} -export default function Toggle({ id, isActive, toggle, checked, unchecked, }: ToggleProps): JSX.Element; -export {}; diff --git a/dist2/types/components/TokenWarningModal/index.d.ts b/dist2/types/components/TokenWarningModal/index.d.ts deleted file mode 100644 index 1e1a40bc53c..00000000000 --- a/dist2/types/components/TokenWarningModal/index.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -/// -import { Token } from '@uniswap/sdk-core'; -export default function TokenWarningModal({ isOpen, tokens, onConfirm, onDismiss, }: { - isOpen: boolean; - tokens: Token[]; - onConfirm: () => void; - onDismiss: () => void; -}): JSX.Element; diff --git a/dist2/types/components/Tooltip/index.d.ts b/dist2/types/components/Tooltip/index.d.ts deleted file mode 100644 index 4b891a09dce..00000000000 --- a/dist2/types/components/Tooltip/index.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { ReactNode } from 'react'; -import { PopoverProps } from '../Popover'; -export declare const TooltipContainer: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; -interface TooltipProps extends Omit { - text: ReactNode; -} -interface TooltipContentProps extends Omit { - content: ReactNode; - onOpen?: () => void; - wrap?: boolean; - disableHover?: boolean; -} -export default function Tooltip({ text, ...rest }: TooltipProps): JSX.Element; -export declare function MouseoverTooltip({ children, ...rest }: Omit): JSX.Element; -export declare function MouseoverTooltipContent({ content, children, onOpen: openCallback, disableHover, ...rest }: Omit): JSX.Element; -export {}; diff --git a/dist2/types/components/TransactionConfirmationModal/AnimatedConfirmation.d.ts b/dist2/types/components/TransactionConfirmationModal/AnimatedConfirmation.d.ts deleted file mode 100644 index 41f6ab876b1..00000000000 --- a/dist2/types/components/TransactionConfirmationModal/AnimatedConfirmation.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -export default function AnimatedConfirmation(): JSX.Element; diff --git a/dist2/types/components/TransactionConfirmationModal/index.d.ts b/dist2/types/components/TransactionConfirmationModal/index.d.ts deleted file mode 100644 index a2b8d7ce6ec..00000000000 --- a/dist2/types/components/TransactionConfirmationModal/index.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Currency } from '@uniswap/sdk-core'; -import { ReactNode } from 'react'; -export declare function ConfirmationModalContent({ title, bottomContent, onDismiss, topContent, }: { - title: ReactNode; - onDismiss: () => void; - topContent: () => ReactNode; - bottomContent?: () => ReactNode | undefined; -}): JSX.Element; -export declare function TransactionErrorContent({ message, onDismiss }: { - message: ReactNode; - onDismiss: () => void; -}): JSX.Element; -interface ConfirmationModalProps { - isOpen: boolean; - onDismiss: () => void; - hash: string | undefined; - content: () => ReactNode; - attemptingTxn: boolean; - pendingText: ReactNode; - currencyToAdd?: Currency | undefined; -} -export default function TransactionConfirmationModal({ isOpen, onDismiss, attemptingTxn, hash, pendingText, content, currencyToAdd, }: ConfirmationModalProps): JSX.Element | null; -export {}; diff --git a/dist2/types/components/TransactionSettings/index.d.ts b/dist2/types/components/TransactionSettings/index.d.ts deleted file mode 100644 index 77fd8c92fdb..00000000000 --- a/dist2/types/components/TransactionSettings/index.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -/// -import { Percent } from '@uniswap/sdk-core'; -interface TransactionSettingsProps { - placeholderSlippage: Percent; -} -export default function TransactionSettings({ placeholderSlippage }: TransactionSettingsProps): JSX.Element; -export {}; diff --git a/dist2/types/components/WalletModal/Option.d.ts b/dist2/types/components/WalletModal/Option.d.ts deleted file mode 100644 index cac54d476d8..00000000000 --- a/dist2/types/components/WalletModal/Option.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import React from 'react'; -export default function Option({ link, clickable, size, onClick, color, header, subheader, icon, active, id, }: { - link?: string | null; - clickable?: boolean; - size?: number | null; - onClick?: null | (() => void); - color: string; - header: React.ReactNode; - subheader: React.ReactNode | null; - icon: string; - active?: boolean; - id: string; -}): JSX.Element; diff --git a/dist2/types/components/WalletModal/PendingView.d.ts b/dist2/types/components/WalletModal/PendingView.d.ts deleted file mode 100644 index 8e4e685f919..00000000000 --- a/dist2/types/components/WalletModal/PendingView.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -/// -import { AbstractConnector } from '@web3-react/abstract-connector'; -export default function PendingView({ connector, error, setPendingError, tryActivation, }: { - connector?: AbstractConnector; - error?: boolean; - setPendingError: (error: boolean) => void; - tryActivation: (connector: AbstractConnector) => void; -}): JSX.Element; diff --git a/dist2/types/components/WalletModal/index.d.ts b/dist2/types/components/WalletModal/index.d.ts deleted file mode 100644 index 1bb2047a04e..00000000000 --- a/dist2/types/components/WalletModal/index.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -/// -export default function WalletModal({ pendingTransactions, confirmedTransactions, ENSName, }: { - pendingTransactions: string[]; - confirmedTransactions: string[]; - ENSName?: string; -}): JSX.Element; diff --git a/dist2/types/components/Web3ReactManager/index.d.ts b/dist2/types/components/Web3ReactManager/index.d.ts deleted file mode 100644 index f54f45f4fee..00000000000 --- a/dist2/types/components/Web3ReactManager/index.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -/// -export default function Web3ReactManager({ children }: { - children: JSX.Element; -}): JSX.Element; diff --git a/dist2/types/components/Web3Status/index.d.ts b/dist2/types/components/Web3Status/index.d.ts deleted file mode 100644 index 14179bd71c0..00000000000 --- a/dist2/types/components/Web3Status/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -export default function Web3Status(): JSX.Element; diff --git a/dist2/types/components/analytics/GoogleAnalyticsReporter.d.ts b/dist2/types/components/analytics/GoogleAnalyticsReporter.d.ts deleted file mode 100644 index 0d797b2348f..00000000000 --- a/dist2/types/components/analytics/GoogleAnalyticsReporter.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { RouteComponentProps } from 'react-router-dom'; -export default function GoogleAnalyticsReporter({ location: { pathname, search } }: RouteComponentProps): null; diff --git a/dist2/types/components/analytics/index.d.ts b/dist2/types/components/analytics/index.d.ts deleted file mode 100644 index cb0ff5c3b54..00000000000 --- a/dist2/types/components/analytics/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/dist2/types/components/claim/AddressClaimModal.d.ts b/dist2/types/components/claim/AddressClaimModal.d.ts deleted file mode 100644 index 2cb0311246e..00000000000 --- a/dist2/types/components/claim/AddressClaimModal.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/// -export default function AddressClaimModal({ isOpen, onDismiss }: { - isOpen: boolean; - onDismiss: () => void; -}): JSX.Element; diff --git a/dist2/types/components/claim/ClaimModal.d.ts b/dist2/types/components/claim/ClaimModal.d.ts deleted file mode 100644 index 5135efda31a..00000000000 --- a/dist2/types/components/claim/ClaimModal.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -export default function ClaimModal(): JSX.Element; diff --git a/dist2/types/components/earn/ClaimRewardModal.d.ts b/dist2/types/components/earn/ClaimRewardModal.d.ts deleted file mode 100644 index 19ce7ba55ed..00000000000 --- a/dist2/types/components/earn/ClaimRewardModal.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -/// -import { StakingInfo } from '../../state/stake/hooks'; -interface StakingModalProps { - isOpen: boolean; - onDismiss: () => void; - stakingInfo: StakingInfo; -} -export default function ClaimRewardModal({ isOpen, onDismiss, stakingInfo }: StakingModalProps): JSX.Element; -export {}; diff --git a/dist2/types/components/earn/PoolCard.d.ts b/dist2/types/components/earn/PoolCard.d.ts deleted file mode 100644 index 2d818ee791a..00000000000 --- a/dist2/types/components/earn/PoolCard.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/// -import { StakingInfo } from '../../state/stake/hooks'; -export default function PoolCard({ stakingInfo }: { - stakingInfo: StakingInfo; -}): JSX.Element; diff --git a/dist2/types/components/earn/StakingModal.d.ts b/dist2/types/components/earn/StakingModal.d.ts deleted file mode 100644 index 6a5397e4553..00000000000 --- a/dist2/types/components/earn/StakingModal.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -/// -import { CurrencyAmount, Token } from '@uniswap/sdk-core'; -import { StakingInfo } from '../../state/stake/hooks'; -interface StakingModalProps { - isOpen: boolean; - onDismiss: () => void; - stakingInfo: StakingInfo; - userLiquidityUnstaked: CurrencyAmount | undefined; -} -export default function StakingModal({ isOpen, onDismiss, stakingInfo, userLiquidityUnstaked }: StakingModalProps): JSX.Element; -export {}; diff --git a/dist2/types/components/earn/UnstakingModal.d.ts b/dist2/types/components/earn/UnstakingModal.d.ts deleted file mode 100644 index 43a1e25b705..00000000000 --- a/dist2/types/components/earn/UnstakingModal.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -/// -import { StakingInfo } from '../../state/stake/hooks'; -interface StakingModalProps { - isOpen: boolean; - onDismiss: () => void; - stakingInfo: StakingInfo; -} -export default function UnstakingModal({ isOpen, onDismiss, stakingInfo }: StakingModalProps): JSX.Element; -export {}; diff --git a/dist2/types/components/earn/styled.d.ts b/dist2/types/components/earn/styled.d.ts deleted file mode 100644 index 6f83720d015..00000000000 --- a/dist2/types/components/earn/styled.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -export declare const DataCard: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, { - gap?: string | undefined; - justify?: "end" | "space-between" | "stretch" | "center" | "flex-end" | "flex-start" | "start" | undefined; -} & { - disabled?: boolean | undefined; -}, never>; -export declare const CardBGImage: import("styled-components").StyledComponent<"span", import("styled-components").DefaultTheme, { - desaturate?: boolean | undefined; -}, never>; -export declare const CardBGImageSmaller: import("styled-components").StyledComponent<"span", import("styled-components").DefaultTheme, { - desaturate?: boolean | undefined; -}, never>; -export declare const CardNoise: import("styled-components").StyledComponent<"span", import("styled-components").DefaultTheme, {}, never>; -export declare const CardSection: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, { - gap?: string | undefined; - justify?: "end" | "space-between" | "stretch" | "center" | "flex-end" | "flex-start" | "start" | undefined; -} & { - disabled?: boolean | undefined; -}, never>; -export declare const Break: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; diff --git a/dist2/types/components/swap/AdvancedSwapDetails.d.ts b/dist2/types/components/swap/AdvancedSwapDetails.d.ts deleted file mode 100644 index 32c3f500799..00000000000 --- a/dist2/types/components/swap/AdvancedSwapDetails.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -/// -import { Currency, Percent, TradeType } from '@uniswap/sdk-core'; -import { InterfaceTrade } from 'state/routing/types'; -interface AdvancedSwapDetailsProps { - trade?: InterfaceTrade; - allowedSlippage: Percent; - syncing?: boolean; - hideRouteDiagram?: boolean; -} -export declare function AdvancedSwapDetails({ trade, allowedSlippage, syncing }: AdvancedSwapDetailsProps): JSX.Element | null; -export {}; diff --git a/dist2/types/components/swap/ConfirmSwapModal.d.ts b/dist2/types/components/swap/ConfirmSwapModal.d.ts deleted file mode 100644 index 0f893becab1..00000000000 --- a/dist2/types/components/swap/ConfirmSwapModal.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { Trade } from '@uniswap/router-sdk'; -import { Currency, Percent, TradeType } from '@uniswap/sdk-core'; -import { ReactNode } from 'react'; -import { InterfaceTrade } from 'state/routing/types'; -export default function ConfirmSwapModal({ trade, originalTrade, onAcceptChanges, allowedSlippage, onConfirm, onDismiss, recipient, swapErrorMessage, isOpen, attemptingTxn, txHash, }: { - isOpen: boolean; - trade: InterfaceTrade | undefined; - originalTrade: Trade | undefined; - attemptingTxn: boolean; - txHash: string | undefined; - recipient: string | null; - allowedSlippage: Percent; - onAcceptChanges: () => void; - onConfirm: () => void; - swapErrorMessage: ReactNode | undefined; - onDismiss: () => void; -}): JSX.Element; diff --git a/dist2/types/components/swap/FormattedPriceImpact.d.ts b/dist2/types/components/swap/FormattedPriceImpact.d.ts deleted file mode 100644 index 4844d233108..00000000000 --- a/dist2/types/components/swap/FormattedPriceImpact.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -/// -import { Percent } from '@uniswap/sdk-core'; -/** - * Formatted version of price impact text with warning colors - */ -export default function FormattedPriceImpact({ priceImpact }: { - priceImpact?: Percent; -}): JSX.Element; diff --git a/dist2/types/components/swap/GasEstimateBadge.d.ts b/dist2/types/components/swap/GasEstimateBadge.d.ts deleted file mode 100644 index f4d4fffbd40..00000000000 --- a/dist2/types/components/swap/GasEstimateBadge.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -/// -import { Currency, TradeType } from '@uniswap/sdk-core'; -import { InterfaceTrade } from 'state/routing/types'; -export default function GasEstimateBadge({ trade, loading, showRoute, disableHover, }: { - trade: InterfaceTrade | undefined | null; - loading: boolean; - showRoute?: boolean; - disableHover?: boolean; -}): JSX.Element; diff --git a/dist2/types/components/swap/RouterLabel.d.ts b/dist2/types/components/swap/RouterLabel.d.ts deleted file mode 100644 index 4825082cc34..00000000000 --- a/dist2/types/components/swap/RouterLabel.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -export declare function AutoRouterLogo(): JSX.Element; -export declare function AutoRouterLabel(): JSX.Element; diff --git a/dist2/types/components/swap/SwapDetailsDropdown.d.ts b/dist2/types/components/swap/SwapDetailsDropdown.d.ts deleted file mode 100644 index b607a462f87..00000000000 --- a/dist2/types/components/swap/SwapDetailsDropdown.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -/// -import { Currency, Percent, TradeType } from '@uniswap/sdk-core'; -import { InterfaceTrade } from 'state/routing/types'; -interface SwapDetailsInlineProps { - trade: InterfaceTrade | undefined; - syncing: boolean; - loading: boolean; - showInverted: boolean; - setShowInverted: React.Dispatch>; - allowedSlippage: Percent; -} -export default function SwapDetailsDropdown({ trade, syncing, loading, showInverted, setShowInverted, allowedSlippage, }: SwapDetailsInlineProps): JSX.Element; -export {}; diff --git a/dist2/types/components/swap/SwapHeader.d.ts b/dist2/types/components/swap/SwapHeader.d.ts deleted file mode 100644 index a597e2cf105..00000000000 --- a/dist2/types/components/swap/SwapHeader.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/// -import { Percent } from '@uniswap/sdk-core'; -export default function SwapHeader({ allowedSlippage }: { - allowedSlippage: Percent; -}): JSX.Element; diff --git a/dist2/types/components/swap/SwapModalFooter.d.ts b/dist2/types/components/swap/SwapModalFooter.d.ts deleted file mode 100644 index 94c6ad35029..00000000000 --- a/dist2/types/components/swap/SwapModalFooter.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Trade } from '@uniswap/router-sdk'; -import { Currency, TradeType } from '@uniswap/sdk-core'; -import { ReactNode } from 'react'; -export default function SwapModalFooter({ onConfirm, swapErrorMessage, disabledConfirm, }: { - trade: Trade; - onConfirm: () => void; - swapErrorMessage: ReactNode | undefined; - disabledConfirm: boolean; -}): JSX.Element; diff --git a/dist2/types/components/swap/SwapModalHeader.d.ts b/dist2/types/components/swap/SwapModalHeader.d.ts deleted file mode 100644 index cbedb7a4d3e..00000000000 --- a/dist2/types/components/swap/SwapModalHeader.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -/// -import { Currency, Percent, TradeType } from '@uniswap/sdk-core'; -import { InterfaceTrade } from 'state/routing/types'; -export default function SwapModalHeader({ trade, allowedSlippage, recipient, showAcceptChanges, onAcceptChanges, }: { - trade: InterfaceTrade; - allowedSlippage: Percent; - recipient: string | null; - showAcceptChanges: boolean; - onAcceptChanges: () => void; -}): JSX.Element; diff --git a/dist2/types/components/swap/SwapRoute.d.ts b/dist2/types/components/swap/SwapRoute.d.ts deleted file mode 100644 index 58240798840..00000000000 --- a/dist2/types/components/swap/SwapRoute.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -/// -import { Currency, TradeType } from '@uniswap/sdk-core'; -import { InterfaceTrade } from 'state/routing/types'; -interface SwapRouteProps extends React.HTMLAttributes { - trade: InterfaceTrade; - syncing: boolean; - fixedOpen?: boolean; -} -declare const _default: import("react").NamedExoticComponent; -export default _default; diff --git a/dist2/types/components/swap/SwapWarningDropdown.d.ts b/dist2/types/components/swap/SwapWarningDropdown.d.ts deleted file mode 100644 index 7ae95382c16..00000000000 --- a/dist2/types/components/swap/SwapWarningDropdown.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -/// -import { Currency, CurrencyAmount, Token, TradeType } from '@uniswap/sdk-core'; -import { InterfaceTrade } from 'state/routing/types'; -/** - * @returns Dropdown card for showing edge case warnings outside of button - */ -export default function SwapWarningDropdown({ fiatValueInput, trade, }: { - fiatValueInput: CurrencyAmount | null; - trade: InterfaceTrade | undefined; -}): JSX.Element | null; diff --git a/dist2/types/components/swap/TradePrice.d.ts b/dist2/types/components/swap/TradePrice.d.ts deleted file mode 100644 index 76e5e610ce3..00000000000 --- a/dist2/types/components/swap/TradePrice.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -/// -import { Currency, Price } from '@uniswap/sdk-core'; -interface TradePriceProps { - price: Price; - showInverted: boolean; - setShowInverted: (showInverted: boolean) => void; -} -export default function TradePrice({ price, showInverted, setShowInverted }: TradePriceProps): JSX.Element; -export {}; diff --git a/dist2/types/components/swap/UnsupportedCurrencyFooter.d.ts b/dist2/types/components/swap/UnsupportedCurrencyFooter.d.ts deleted file mode 100644 index 33663c38f09..00000000000 --- a/dist2/types/components/swap/UnsupportedCurrencyFooter.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -/// -import { Currency } from '@uniswap/sdk-core'; -export default function UnsupportedCurrencyFooter({ show, currencies, }: { - show: boolean; - currencies: (Currency | undefined | null)[]; -}): JSX.Element; diff --git a/dist2/types/components/swap/confirmPriceImpactWithoutFee.d.ts b/dist2/types/components/swap/confirmPriceImpactWithoutFee.d.ts deleted file mode 100644 index 2c63e412ec8..00000000000 --- a/dist2/types/components/swap/confirmPriceImpactWithoutFee.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Percent } from '@uniswap/sdk-core'; -/** - * Given the price impact, get user confirmation. - * - * @param priceImpactWithoutFee price impact of the trade without the fee. - */ -export default function confirmPriceImpactWithoutFee(priceImpactWithoutFee: Percent): boolean; diff --git a/dist2/types/components/swap/styleds.d.ts b/dist2/types/components/swap/styleds.d.ts deleted file mode 100644 index 281f6d77f1c..00000000000 --- a/dist2/types/components/swap/styleds.d.ts +++ /dev/null @@ -1,454 +0,0 @@ -import { ReactNode } from 'react'; -import TradePrice from './TradePrice'; -export declare const Wrapper: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; -export declare const ArrowWrapper: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, { - clickable: boolean; -}, never>; -export declare const SectionBreak: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; -export declare const ErrorText: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, { - severity?: 0 | 1 | 2 | 3 | 4 | undefined; -}, never>; -export declare const TruncatedText: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, {}, never>; -export declare const Dots: import("styled-components").StyledComponent<"span", import("styled-components").DefaultTheme, {}, never>; -export declare function SwapCallbackError({ error }: { - error: ReactNode; -}): JSX.Element; -export declare const SwapShowAcceptChanges: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, { - gap?: string | undefined; - justify?: "end" | "space-between" | "stretch" | "center" | "flex-end" | "flex-start" | "start" | undefined; -}, never>; -export declare const TransactionDetailsLabel: import("styled-components").StyledComponent<(props: { - name?: string | undefined; - label?: string | undefined; - min?: string | number | undefined; - value?: string | number | readonly string[] | undefined; - data?: string | undefined; - nonce?: string | undefined; - type?: string | undefined; - target?: string | undefined; - resource?: string | undefined; - key?: import("react").Key | null | undefined; - id?: string | undefined; - src?: string | undefined; - results?: number | undefined; - list?: string | undefined; - hidden?: boolean | undefined; - ref?: import("react").Ref | undefined; - cite?: string | undefined; - form?: string | undefined; - p?: import("styled-system").ResponsiveValue>> | undefined; - slot?: string | undefined; - span?: number | undefined; - style?: import("react").CSSProperties | undefined; - summary?: string | undefined; - title?: string | undefined; - pattern?: string | undefined; - children?: ReactNode; - size?: import("styled-system").ResponsiveValue, Required>> | undefined; - content?: string | undefined; - headers?: string | undefined; - integrity?: string | undefined; - method?: string | undefined; - default?: boolean | undefined; - color?: import("styled-system").ResponsiveValue>> | undefined; - minLength?: number | undefined; - required?: boolean | undefined; - lang?: string | undefined; - className?: string | undefined; - height?: import("styled-system").ResponsiveValue, Required>> | undefined; - max?: string | number | undefined; - media?: string | undefined; - width?: import("styled-system").ResponsiveValue, Required>> | undefined; - role?: import("react").AriaRole | undefined; - tabIndex?: number | undefined; - crossOrigin?: string | undefined; - display?: import("styled-system").ResponsiveValue>> | undefined; - fontFamily?: import("styled-system").ResponsiveValue>> | undefined; - fontSize?: import("styled-system").ResponsiveValue>> | undefined; - fontStyle?: import("styled-system").ResponsiveValue>> | undefined; - fontWeight?: import("styled-system").ResponsiveValue>> | undefined; - href?: string | undefined; - letterSpacing?: import("styled-system").ResponsiveValue>> | undefined; - opacity?: import("styled-system").ResponsiveValue>> | undefined; - order?: import("styled-system").ResponsiveValue>> | undefined; - overflow?: import("styled-system").ResponsiveValue>> | undefined; - 'aria-activedescendant'?: string | undefined; - 'aria-atomic'?: (boolean | "true" | "false") | undefined; - 'aria-autocomplete'?: "list" | "none" | "both" | "inline" | undefined; - 'aria-busy'?: (boolean | "true" | "false") | undefined; - 'aria-checked'?: boolean | "true" | "false" | "mixed" | undefined; - 'aria-colcount'?: number | undefined; - 'aria-colindex'?: number | undefined; - 'aria-colspan'?: number | undefined; - 'aria-controls'?: string | undefined; - 'aria-current'?: boolean | "time" | "true" | "false" | "page" | "location" | "step" | "date" | undefined; - 'aria-describedby'?: string | undefined; - 'aria-details'?: string | undefined; - 'aria-disabled'?: (boolean | "true" | "false") | undefined; - 'aria-dropeffect'?: "execute" | "link" | "copy" | "none" | "move" | "popup" | undefined; - 'aria-errormessage'?: string | undefined; - 'aria-expanded'?: (boolean | "true" | "false") | undefined; - 'aria-flowto'?: string | undefined; - 'aria-grabbed'?: (boolean | "true" | "false") | undefined; - 'aria-haspopup'?: boolean | "dialog" | "menu" | "grid" | "listbox" | "tree" | "true" | "false" | undefined; - 'aria-hidden'?: (boolean | "true" | "false") | undefined; - 'aria-invalid'?: boolean | "true" | "false" | "grammar" | "spelling" | undefined; - 'aria-keyshortcuts'?: string | undefined; - 'aria-label'?: string | undefined; - 'aria-labelledby'?: string | undefined; - 'aria-level'?: number | undefined; - 'aria-live'?: "off" | "assertive" | "polite" | undefined; - 'aria-modal'?: (boolean | "true" | "false") | undefined; - 'aria-multiline'?: (boolean | "true" | "false") | undefined; - 'aria-multiselectable'?: (boolean | "true" | "false") | undefined; - 'aria-orientation'?: "horizontal" | "vertical" | undefined; - 'aria-owns'?: string | undefined; - 'aria-placeholder'?: string | undefined; - 'aria-posinset'?: number | undefined; - 'aria-pressed'?: boolean | "true" | "false" | "mixed" | undefined; - 'aria-readonly'?: (boolean | "true" | "false") | undefined; - 'aria-relevant'?: "text" | "all" | "additions" | "additions removals" | "additions text" | "removals" | "removals additions" | "removals text" | "text additions" | "text removals" | undefined; - 'aria-required'?: (boolean | "true" | "false") | undefined; - 'aria-roledescription'?: string | undefined; - 'aria-rowcount'?: number | undefined; - 'aria-rowindex'?: number | undefined; - 'aria-rowspan'?: number | undefined; - 'aria-selected'?: (boolean | "true" | "false") | undefined; - 'aria-setsize'?: number | undefined; - 'aria-sort'?: "other" | "none" | "ascending" | "descending" | undefined; - 'aria-valuemax'?: number | undefined; - 'aria-valuemin'?: number | undefined; - 'aria-valuenow'?: number | undefined; - 'aria-valuetext'?: string | undefined; - dangerouslySetInnerHTML?: { - __html: string; - } | undefined; - onCopy?: import("react").ClipboardEventHandler | undefined; - onCopyCapture?: import("react").ClipboardEventHandler | undefined; - onCut?: import("react").ClipboardEventHandler | undefined; - onCutCapture?: import("react").ClipboardEventHandler | undefined; - onPaste?: import("react").ClipboardEventHandler | undefined; - onPasteCapture?: import("react").ClipboardEventHandler | undefined; - onCompositionEnd?: import("react").CompositionEventHandler | undefined; - onCompositionEndCapture?: import("react").CompositionEventHandler | undefined; - onCompositionStart?: import("react").CompositionEventHandler | undefined; - onCompositionStartCapture?: import("react").CompositionEventHandler | undefined; - onCompositionUpdate?: import("react").CompositionEventHandler | undefined; - onCompositionUpdateCapture?: import("react").CompositionEventHandler | undefined; - onFocus?: import("react").FocusEventHandler | undefined; - onFocusCapture?: import("react").FocusEventHandler | undefined; - onBlur?: import("react").FocusEventHandler | undefined; - onBlurCapture?: import("react").FocusEventHandler | undefined; - onChange?: import("react").FormEventHandler | undefined; - onChangeCapture?: import("react").FormEventHandler | undefined; - onBeforeInput?: import("react").FormEventHandler | undefined; - onBeforeInputCapture?: import("react").FormEventHandler | undefined; - onInput?: import("react").FormEventHandler | undefined; - onInputCapture?: import("react").FormEventHandler | undefined; - onReset?: import("react").FormEventHandler | undefined; - onResetCapture?: import("react").FormEventHandler | undefined; - onSubmit?: import("react").FormEventHandler | undefined; - onSubmitCapture?: import("react").FormEventHandler | undefined; - onInvalid?: import("react").FormEventHandler | undefined; - onInvalidCapture?: import("react").FormEventHandler | undefined; - onLoad?: import("react").ReactEventHandler | undefined; - onLoadCapture?: import("react").ReactEventHandler | undefined; - onError?: import("react").ReactEventHandler | undefined; - onErrorCapture?: import("react").ReactEventHandler | undefined; - onKeyDown?: import("react").KeyboardEventHandler | undefined; - onKeyDownCapture?: import("react").KeyboardEventHandler | undefined; - onKeyPress?: import("react").KeyboardEventHandler | undefined; - onKeyPressCapture?: import("react").KeyboardEventHandler | undefined; - onKeyUp?: import("react").KeyboardEventHandler | undefined; - onKeyUpCapture?: import("react").KeyboardEventHandler | undefined; - onAbort?: import("react").ReactEventHandler | undefined; - onAbortCapture?: import("react").ReactEventHandler | undefined; - onCanPlay?: import("react").ReactEventHandler | undefined; - onCanPlayCapture?: import("react").ReactEventHandler | undefined; - onCanPlayThrough?: import("react").ReactEventHandler | undefined; - onCanPlayThroughCapture?: import("react").ReactEventHandler | undefined; - onDurationChange?: import("react").ReactEventHandler | undefined; - onDurationChangeCapture?: import("react").ReactEventHandler | undefined; - onEmptied?: import("react").ReactEventHandler | undefined; - onEmptiedCapture?: import("react").ReactEventHandler | undefined; - onEncrypted?: import("react").ReactEventHandler | undefined; - onEncryptedCapture?: import("react").ReactEventHandler | undefined; - onEnded?: import("react").ReactEventHandler | undefined; - onEndedCapture?: import("react").ReactEventHandler | undefined; - onLoadedData?: import("react").ReactEventHandler | undefined; - onLoadedDataCapture?: import("react").ReactEventHandler | undefined; - onLoadedMetadata?: import("react").ReactEventHandler | undefined; - onLoadedMetadataCapture?: import("react").ReactEventHandler | undefined; - onLoadStart?: import("react").ReactEventHandler | undefined; - onLoadStartCapture?: import("react").ReactEventHandler | undefined; - onPause?: import("react").ReactEventHandler | undefined; - onPauseCapture?: import("react").ReactEventHandler | undefined; - onPlay?: import("react").ReactEventHandler | undefined; - onPlayCapture?: import("react").ReactEventHandler | undefined; - onPlaying?: import("react").ReactEventHandler | undefined; - onPlayingCapture?: import("react").ReactEventHandler | undefined; - onProgress?: import("react").ReactEventHandler | undefined; - onProgressCapture?: import("react").ReactEventHandler | undefined; - onRateChange?: import("react").ReactEventHandler | undefined; - onRateChangeCapture?: import("react").ReactEventHandler | undefined; - onSeeked?: import("react").ReactEventHandler | undefined; - onSeekedCapture?: import("react").ReactEventHandler | undefined; - onSeeking?: import("react").ReactEventHandler | undefined; - onSeekingCapture?: import("react").ReactEventHandler | undefined; - onStalled?: import("react").ReactEventHandler | undefined; - onStalledCapture?: import("react").ReactEventHandler | undefined; - onSuspend?: import("react").ReactEventHandler | undefined; - onSuspendCapture?: import("react").ReactEventHandler | undefined; - onTimeUpdate?: import("react").ReactEventHandler | undefined; - onTimeUpdateCapture?: import("react").ReactEventHandler | undefined; - onVolumeChange?: import("react").ReactEventHandler | undefined; - onVolumeChangeCapture?: import("react").ReactEventHandler | undefined; - onWaiting?: import("react").ReactEventHandler | undefined; - onWaitingCapture?: import("react").ReactEventHandler | undefined; - onAuxClick?: import("react").MouseEventHandler | undefined; - onAuxClickCapture?: import("react").MouseEventHandler | undefined; - onClick?: import("react").MouseEventHandler | undefined; - onClickCapture?: import("react").MouseEventHandler | undefined; - onContextMenu?: import("react").MouseEventHandler | undefined; - onContextMenuCapture?: import("react").MouseEventHandler | undefined; - onDoubleClick?: import("react").MouseEventHandler | undefined; - onDoubleClickCapture?: import("react").MouseEventHandler | undefined; - onDrag?: import("react").DragEventHandler | undefined; - onDragCapture?: import("react").DragEventHandler | undefined; - onDragEnd?: import("react").DragEventHandler | undefined; - onDragEndCapture?: import("react").DragEventHandler | undefined; - onDragEnter?: import("react").DragEventHandler | undefined; - onDragEnterCapture?: import("react").DragEventHandler | undefined; - onDragExit?: import("react").DragEventHandler | undefined; - onDragExitCapture?: import("react").DragEventHandler | undefined; - onDragLeave?: import("react").DragEventHandler | undefined; - onDragLeaveCapture?: import("react").DragEventHandler | undefined; - onDragOver?: import("react").DragEventHandler | undefined; - onDragOverCapture?: import("react").DragEventHandler | undefined; - onDragStart?: import("react").DragEventHandler | undefined; - onDragStartCapture?: import("react").DragEventHandler | undefined; - onDrop?: import("react").DragEventHandler | undefined; - onDropCapture?: import("react").DragEventHandler | undefined; - onMouseDown?: import("react").MouseEventHandler | undefined; - onMouseDownCapture?: import("react").MouseEventHandler | undefined; - onMouseEnter?: import("react").MouseEventHandler | undefined; - onMouseLeave?: import("react").MouseEventHandler | undefined; - onMouseMove?: import("react").MouseEventHandler | undefined; - onMouseMoveCapture?: import("react").MouseEventHandler | undefined; - onMouseOut?: import("react").MouseEventHandler | undefined; - onMouseOutCapture?: import("react").MouseEventHandler | undefined; - onMouseOver?: import("react").MouseEventHandler | undefined; - onMouseOverCapture?: import("react").MouseEventHandler | undefined; - onMouseUp?: import("react").MouseEventHandler | undefined; - onMouseUpCapture?: import("react").MouseEventHandler | undefined; - onSelect?: import("react").ReactEventHandler | undefined; - onSelectCapture?: import("react").ReactEventHandler | undefined; - onTouchCancel?: import("react").TouchEventHandler | undefined; - onTouchCancelCapture?: import("react").TouchEventHandler | undefined; - onTouchEnd?: import("react").TouchEventHandler | undefined; - onTouchEndCapture?: import("react").TouchEventHandler | undefined; - onTouchMove?: import("react").TouchEventHandler | undefined; - onTouchMoveCapture?: import("react").TouchEventHandler | undefined; - onTouchStart?: import("react").TouchEventHandler | undefined; - onTouchStartCapture?: import("react").TouchEventHandler | undefined; - onPointerDown?: import("react").PointerEventHandler | undefined; - onPointerDownCapture?: import("react").PointerEventHandler | undefined; - onPointerMove?: import("react").PointerEventHandler | undefined; - onPointerMoveCapture?: import("react").PointerEventHandler | undefined; - onPointerUp?: import("react").PointerEventHandler | undefined; - onPointerUpCapture?: import("react").PointerEventHandler | undefined; - onPointerCancel?: import("react").PointerEventHandler | undefined; - onPointerCancelCapture?: import("react").PointerEventHandler | undefined; - onPointerEnter?: import("react").PointerEventHandler | undefined; - onPointerEnterCapture?: import("react").PointerEventHandler | undefined; - onPointerLeave?: import("react").PointerEventHandler | undefined; - onPointerLeaveCapture?: import("react").PointerEventHandler | undefined; - onPointerOver?: import("react").PointerEventHandler | undefined; - onPointerOverCapture?: import("react").PointerEventHandler | undefined; - onPointerOut?: import("react").PointerEventHandler | undefined; - onPointerOutCapture?: import("react").PointerEventHandler | undefined; - onGotPointerCapture?: import("react").PointerEventHandler | undefined; - onGotPointerCaptureCapture?: import("react").PointerEventHandler | undefined; - onLostPointerCapture?: import("react").PointerEventHandler | undefined; - onLostPointerCaptureCapture?: import("react").PointerEventHandler | undefined; - onScroll?: import("react").UIEventHandler | undefined; - onScrollCapture?: import("react").UIEventHandler | undefined; - onWheel?: import("react").WheelEventHandler | undefined; - onWheelCapture?: import("react").WheelEventHandler | undefined; - onAnimationStart?: import("react").AnimationEventHandler | undefined; - onAnimationStartCapture?: import("react").AnimationEventHandler | undefined; - onAnimationEnd?: import("react").AnimationEventHandler | undefined; - onAnimationEndCapture?: import("react").AnimationEventHandler | undefined; - onAnimationIteration?: import("react").AnimationEventHandler | undefined; - onAnimationIterationCapture?: import("react").AnimationEventHandler | undefined; - onTransitionEnd?: import("react").TransitionEventHandler | undefined; - onTransitionEndCapture?: import("react").TransitionEventHandler | undefined; - start?: number | undefined; - flex?: import("styled-system").ResponsiveValue, Required>> | undefined; - wrap?: string | undefined; - open?: boolean | undefined; - padding?: import("styled-system").ResponsiveValue>> | undefined; - multiple?: boolean | undefined; - disabled?: boolean | undefined; - as?: import("react").ElementType | undefined; - defaultChecked?: boolean | undefined; - defaultValue?: string | number | readonly string[] | undefined; - suppressContentEditableWarning?: boolean | undefined; - suppressHydrationWarning?: boolean | undefined; - accessKey?: string | undefined; - contentEditable?: "inherit" | (boolean | "true" | "false") | undefined; - contextMenu?: string | undefined; - dir?: string | undefined; - draggable?: (boolean | "true" | "false") | undefined; - placeholder?: string | undefined; - spellCheck?: (boolean | "true" | "false") | undefined; - translate?: "no" | "yes" | undefined; - radioGroup?: string | undefined; - about?: string | undefined; - datatype?: string | undefined; - inlist?: any; - prefix?: string | undefined; - property?: string | undefined; - typeof?: string | undefined; - vocab?: string | undefined; - autoCapitalize?: string | undefined; - autoCorrect?: string | undefined; - autoSave?: string | undefined; - itemProp?: string | undefined; - itemScope?: boolean | undefined; - itemType?: string | undefined; - itemID?: string | undefined; - itemRef?: string | undefined; - security?: string | undefined; - unselectable?: "on" | "off" | undefined; - inputMode?: "text" | "search" | "url" | "none" | "tel" | "email" | "numeric" | "decimal" | undefined; - is?: string | undefined; - marginRight?: import("styled-system").ResponsiveValue>> | undefined; - marginLeft?: import("styled-system").ResponsiveValue>> | undefined; - autoFocus?: boolean | undefined; - formAction?: string | undefined; - formEncType?: string | undefined; - formMethod?: string | undefined; - formNoValidate?: boolean | undefined; - formTarget?: string | undefined; - download?: any; - hrefLang?: string | undefined; - rel?: string | undefined; - step?: string | number | undefined; - alt?: string | undefined; - sizes?: string | undefined; - srcSet?: string | undefined; - useMap?: string | undefined; - async?: boolean | undefined; - accept?: string | undefined; - acceptCharset?: string | undefined; - action?: string | undefined; - allowFullScreen?: boolean | undefined; - allowTransparency?: boolean | undefined; - autoComplete?: string | undefined; - autoPlay?: boolean | undefined; - capture?: string | boolean | undefined; - cellPadding?: string | number | undefined; - cellSpacing?: string | number | undefined; - charSet?: string | undefined; - challenge?: string | undefined; - checked?: boolean | undefined; - classID?: string | undefined; - cols?: number | undefined; - colSpan?: number | undefined; - controls?: boolean | undefined; - coords?: string | undefined; - dateTime?: string | undefined; - defer?: boolean | undefined; - encType?: string | undefined; - frameBorder?: string | number | undefined; - high?: number | undefined; - htmlFor?: string | undefined; - httpEquiv?: string | undefined; - keyParams?: string | undefined; - keyType?: string | undefined; - kind?: string | undefined; - loop?: boolean | undefined; - low?: number | undefined; - manifest?: string | undefined; - marginHeight?: number | undefined; - marginWidth?: number | undefined; - maxLength?: number | undefined; - mediaGroup?: string | undefined; - muted?: boolean | undefined; - noValidate?: boolean | undefined; - optimum?: number | undefined; - playsInline?: boolean | undefined; - poster?: string | undefined; - preload?: string | undefined; - readOnly?: boolean | undefined; - reversed?: boolean | undefined; - rows?: number | undefined; - rowSpan?: number | undefined; - sandbox?: string | undefined; - scope?: string | undefined; - scoped?: boolean | undefined; - scrolling?: string | undefined; - seamless?: boolean | undefined; - selected?: boolean | undefined; - shape?: string | undefined; - srcDoc?: string | undefined; - srcLang?: string | undefined; - wmode?: string | undefined; - variant?: import("styled-system").ResponsiveValue>> | undefined; - tx?: string | undefined; - m?: import("styled-system").ResponsiveValue>> | undefined; - margin?: import("styled-system").ResponsiveValue>> | undefined; - mt?: import("styled-system").ResponsiveValue>> | undefined; - marginTop?: import("styled-system").ResponsiveValue>> | undefined; - mr?: import("styled-system").ResponsiveValue>> | undefined; - mb?: import("styled-system").ResponsiveValue>> | undefined; - marginBottom?: import("styled-system").ResponsiveValue>> | undefined; - ml?: import("styled-system").ResponsiveValue>> | undefined; - mx?: import("styled-system").ResponsiveValue>> | undefined; - marginX?: import("styled-system").ResponsiveValue>> | undefined; - my?: import("styled-system").ResponsiveValue>> | undefined; - marginY?: import("styled-system").ResponsiveValue>> | undefined; - pt?: import("styled-system").ResponsiveValue>> | undefined; - paddingTop?: import("styled-system").ResponsiveValue>> | undefined; - pr?: import("styled-system").ResponsiveValue>> | undefined; - paddingRight?: import("styled-system").ResponsiveValue>> | undefined; - pb?: import("styled-system").ResponsiveValue>> | undefined; - paddingBottom?: import("styled-system").ResponsiveValue>> | undefined; - pl?: import("styled-system").ResponsiveValue>> | undefined; - paddingLeft?: import("styled-system").ResponsiveValue>> | undefined; - px?: import("styled-system").ResponsiveValue>> | undefined; - paddingX?: import("styled-system").ResponsiveValue>> | undefined; - py?: import("styled-system").ResponsiveValue>> | undefined; - paddingY?: import("styled-system").ResponsiveValue>> | undefined; - minWidth?: import("styled-system").ResponsiveValue, Required>> | undefined; - minHeight?: import("styled-system").ResponsiveValue, Required>> | undefined; - maxWidth?: import("styled-system").ResponsiveValue, Required>> | undefined; - maxHeight?: import("styled-system").ResponsiveValue, Required>> | undefined; - verticalAlign?: import("styled-system").ResponsiveValue, Required>> | undefined; - overflowX?: import("styled-system").ResponsiveValue>> | undefined; - overflowY?: import("styled-system").ResponsiveValue>> | undefined; - lineHeight?: import("styled-system").ResponsiveValue>> | undefined; - textAlign?: import("styled-system").ResponsiveValue>> | undefined; - bg?: import("styled-system").ResponsiveValue>> | undefined; - backgroundColor?: import("styled-system").ResponsiveValue>> | undefined; - alignItems?: import("styled-system").ResponsiveValue>> | undefined; - alignContent?: import("styled-system").ResponsiveValue>> | undefined; - justifyItems?: import("styled-system").ResponsiveValue>> | undefined; - justifyContent?: import("styled-system").ResponsiveValue>> | undefined; - flexWrap?: import("styled-system").ResponsiveValue>> | undefined; - flexDirection?: import("styled-system").ResponsiveValue>> | undefined; - flexGrow?: import("styled-system").ResponsiveValue>> | undefined; - flexShrink?: import("styled-system").ResponsiveValue>> | undefined; - flexBasis?: import("styled-system").ResponsiveValue, Required>> | undefined; - justifySelf?: import("styled-system").ResponsiveValue>> | undefined; - alignSelf?: import("styled-system").ResponsiveValue>> | undefined; - sx?: import("rebass").SxStyleProp | undefined; -}) => JSX.Element, import("styled-components").DefaultTheme, {}, never>; -export declare const ResponsiveTooltipContainer: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, { - origin?: string | undefined; - width?: string | undefined; -}, never>; -export declare const StyledTradePrice: import("styled-components").StyledComponent; diff --git a/dist2/types/components/vote/DelegateModal.d.ts b/dist2/types/components/vote/DelegateModal.d.ts deleted file mode 100644 index 1a70e9d5429..00000000000 --- a/dist2/types/components/vote/DelegateModal.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { ReactNode } from 'react'; -interface VoteModalProps { - isOpen: boolean; - onDismiss: () => void; - title: ReactNode; -} -export default function DelegateModal({ isOpen, onDismiss, title }: VoteModalProps): JSX.Element; -export {}; diff --git a/dist2/types/components/vote/ProposalEmptyState.d.ts b/dist2/types/components/vote/ProposalEmptyState.d.ts deleted file mode 100644 index e84de5b1d9f..00000000000 --- a/dist2/types/components/vote/ProposalEmptyState.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -export default function ProposalEmptyState(): JSX.Element; diff --git a/dist2/types/components/vote/VoteModal.d.ts b/dist2/types/components/vote/VoteModal.d.ts deleted file mode 100644 index 57e96ee093c..00000000000 --- a/dist2/types/components/vote/VoteModal.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -/// -import { VoteOption } from '../../state/governance/types'; -interface VoteModalProps { - isOpen: boolean; - onDismiss: () => void; - voteOption: VoteOption | undefined; - proposalId: string | undefined; -} -export default function VoteModal({ isOpen, onDismiss, proposalId, voteOption }: VoteModalProps): JSX.Element; -export {}; diff --git a/dist2/types/connectors/Fortmatic.d.ts b/dist2/types/connectors/Fortmatic.d.ts deleted file mode 100644 index 9e4468c90fc..00000000000 --- a/dist2/types/connectors/Fortmatic.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { FortmaticConnector as FortmaticConnectorCore } from '@web3-react/fortmatic-connector'; -export declare const OVERLAY_READY = "OVERLAY_READY"; -export declare class FortmaticConnector extends FortmaticConnectorCore { - activate(): Promise<{ - provider: any; - chainId: any; - account: any; - }>; -} diff --git a/dist2/types/connectors/NetworkConnector.d.ts b/dist2/types/connectors/NetworkConnector.d.ts deleted file mode 100644 index c2f33f60cf9..00000000000 --- a/dist2/types/connectors/NetworkConnector.d.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { AbstractConnector } from '@web3-react/abstract-connector'; -import { ConnectorUpdate } from '@web3-react/types'; -interface NetworkConnectorArguments { - urls: { - [chainId: number]: string; - }; - defaultChainId?: number; -} -declare type AsyncSendable = { - isMetaMask?: boolean; - host?: string; - path?: string; - sendAsync?: (request: any, callback: (error: any, response: any) => void) => void; - send?: (request: any, callback: (error: any, response: any) => void) => void; -}; -declare class MiniRpcProvider implements AsyncSendable { - readonly isMetaMask: false; - readonly chainId: number; - readonly url: string; - readonly host: string; - readonly path: string; - readonly batchWaitTimeMs: number; - private readonly connector; - private nextId; - private batchTimeoutId; - private batch; - constructor(connector: NetworkConnector, chainId: number, url: string, batchWaitTimeMs?: number); - readonly clearBatch: () => Promise; - readonly sendAsync: (request: { - jsonrpc: '2.0'; - id: number | string | null; - method: string; - params?: unknown[] | Record; - }, callback: (error: any, response: any) => void) => void; - readonly request: (method: string | { - method: string; - params: unknown[]; - }, params?: unknown[] | Record | undefined) => Promise; -} -export declare class NetworkConnector extends AbstractConnector { - private readonly providers; - private currentChainId; - constructor({ urls, defaultChainId }: NetworkConnectorArguments); - get provider(): MiniRpcProvider; - activate(): Promise; - getProvider(): Promise; - getChainId(): Promise; - getAccount(): Promise; - deactivate(): void; - /** - * Meant to be called only by MiniRpcProvider - * @param chainId the new chain id - */ - changeChainId(chainId: number): void; -} -export {}; diff --git a/dist2/types/connectors/index.d.ts b/dist2/types/connectors/index.d.ts deleted file mode 100644 index f97333f9ef6..00000000000 --- a/dist2/types/connectors/index.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Web3Provider } from '@ethersproject/providers'; -import { SafeAppConnector } from '@gnosis.pm/safe-apps-web3-react'; -import { InjectedConnector } from '@web3-react/injected-connector'; -import { PortisConnector } from '@web3-react/portis-connector'; -import { WalletConnectConnector } from '@web3-react/walletconnect-connector'; -import { WalletLinkConnector } from '@web3-react/walletlink-connector'; -import { FortmaticConnector } from './Fortmatic'; -import { NetworkConnector } from './NetworkConnector'; -export declare const network: NetworkConnector; -export declare function getNetworkLibrary(): Web3Provider; -export declare const injected: InjectedConnector; -export declare const gnosisSafe: SafeAppConnector; -export declare const walletconnect: WalletConnectConnector; -export declare const fortmatic: FortmaticConnector; -export declare const portis: PortisConnector; -export declare const walletlink: WalletLinkConnector; diff --git a/dist2/types/constants/addresses.d.ts b/dist2/types/constants/addresses.d.ts deleted file mode 100644 index a79ed50fdfa..00000000000 --- a/dist2/types/constants/addresses.d.ts +++ /dev/null @@ -1,32 +0,0 @@ -declare type AddressMap = { - [chainId: number]: string; -}; -export declare const UNI_ADDRESS: AddressMap; -export declare const MULTICALL_ADDRESS: AddressMap; -export declare const V2_FACTORY_ADDRESSES: AddressMap; -export declare const V2_ROUTER_ADDRESS: AddressMap; -export declare const V3_ROUTER_ADDRESS: AddressMap; -export declare const SWAP_ROUTER_ADDRESSES: AddressMap; -/** - * The oldest V0 governance address - */ -export declare const GOVERNANCE_ALPHA_V0_ADDRESSES: AddressMap; -/** - * The older V1 governance address - */ -export declare const GOVERNANCE_ALPHA_V1_ADDRESSES: AddressMap; -/** - * The latest governor bravo that is currently admin of timelock - */ -export declare const GOVERNANCE_BRAVO_ADDRESSES: AddressMap; -export declare const TIMELOCK_ADDRESS: AddressMap; -export declare const MERKLE_DISTRIBUTOR_ADDRESS: AddressMap; -export declare const ARGENT_WALLET_DETECTOR_ADDRESS: AddressMap; -export declare const V3_CORE_FACTORY_ADDRESSES: AddressMap; -export declare const QUOTER_ADDRESSES: AddressMap; -export declare const NONFUNGIBLE_POSITION_MANAGER_ADDRESSES: AddressMap; -export declare const ENS_REGISTRAR_ADDRESSES: AddressMap; -export declare const SOCKS_CONTROLLER_ADDRESSES: AddressMap; -export declare const V3_MIGRATOR_ADDRESSES: AddressMap; -export declare const TICK_LENS_ADDRESSES: AddressMap; -export {}; diff --git a/dist2/types/constants/chainInfo.d.ts b/dist2/types/constants/chainInfo.d.ts deleted file mode 100644 index 5b4a2d151a9..00000000000 --- a/dist2/types/constants/chainInfo.d.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { SupportedChainId, SupportedL1ChainId, SupportedL2ChainId } from './chains'; -/** - * These are the network URLs used by the interface when there is not another available source of chain data - */ -export declare const INFURA_NETWORK_URLS: { - [key in SupportedChainId]: string; -}; -/** - * This is used to call the add network RPC - */ -interface AddNetworkInfo { - readonly rpcUrl: string; - readonly nativeCurrency: { - name: string; - symbol: string; - decimals: number; - }; -} -export declare enum NetworkType { - L1 = 0, - L2 = 1 -} -interface BaseChainInfo { - readonly networkType: NetworkType; - readonly blockWaitMsBeforeWarning?: number; - readonly docs: string; - readonly bridge?: string; - readonly explorer: string; - readonly infoLink: string; - readonly logoUrl: string; - readonly label: string; - readonly helpCenterUrl?: string; - readonly addNetworkInfo: AddNetworkInfo; -} -export interface L1ChainInfo extends BaseChainInfo { - readonly networkType: NetworkType.L1; -} -export interface L2ChainInfo extends BaseChainInfo { - readonly networkType: NetworkType.L2; - readonly bridge: string; - readonly statusPage?: string; - readonly defaultListUrl: string; -} -export declare type ChainInfoMap = { - readonly [chainId: number]: L1ChainInfo | L2ChainInfo; -} & { - readonly [chainId in SupportedL2ChainId]: L2ChainInfo; -} & { - readonly [chainId in SupportedL1ChainId]: L1ChainInfo; -}; -export declare const CHAIN_INFO: ChainInfoMap; -export {}; diff --git a/dist2/types/constants/chains.d.ts b/dist2/types/constants/chains.d.ts deleted file mode 100644 index 3552bc970bd..00000000000 --- a/dist2/types/constants/chains.d.ts +++ /dev/null @@ -1,45 +0,0 @@ -/** - * List of all the networks supported by the Uniswap Interface - */ -export declare enum SupportedChainId { - MAINNET = 1, - ROPSTEN = 3, - RINKEBY = 4, - GOERLI = 5, - KOVAN = 42, - ARBITRUM_ONE = 42161, - ARBITRUM_RINKEBY = 421611, - OPTIMISM = 10, - OPTIMISTIC_KOVAN = 69, - POLYGON = 137, - POLYGON_MUMBAI = 80001 -} -export declare const CHAIN_IDS_TO_NAMES: { - 1: string; - 3: string; - 4: string; - 5: string; - 42: string; - 137: string; - 80001: string; - 42161: string; - 421611: string; - 10: string; - 69: string; -}; -/** - * Array of all the supported chain IDs - */ -export declare const ALL_SUPPORTED_CHAIN_IDS: SupportedChainId[]; -export declare const SUPPORTED_GAS_ESTIMATE_CHAIN_IDS: SupportedChainId[]; -/** - * All the chain IDs that are running the Ethereum protocol. - */ -export declare const L1_CHAIN_IDS: readonly [SupportedChainId.MAINNET, SupportedChainId.ROPSTEN, SupportedChainId.RINKEBY, SupportedChainId.GOERLI, SupportedChainId.KOVAN, SupportedChainId.POLYGON, SupportedChainId.POLYGON_MUMBAI]; -export declare type SupportedL1ChainId = typeof L1_CHAIN_IDS[number]; -/** - * Controls some L2 specific behavior, e.g. slippage tolerance, special UI behavior. - * The expectation is that all of these networks have immediate transaction confirmation. - */ -export declare const L2_CHAIN_IDS: readonly [SupportedChainId.ARBITRUM_ONE, SupportedChainId.ARBITRUM_RINKEBY, SupportedChainId.OPTIMISM, SupportedChainId.OPTIMISTIC_KOVAN]; -export declare type SupportedL2ChainId = typeof L2_CHAIN_IDS[number]; diff --git a/dist2/types/constants/governance.d.ts b/dist2/types/constants/governance.d.ts deleted file mode 100644 index e644180e38f..00000000000 --- a/dist2/types/constants/governance.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -export declare const COMMON_CONTRACT_NAMES: Record; -export declare const DEFAULT_AVERAGE_BLOCK_TIME_IN_SECS = 13; -export declare const AVERAGE_BLOCK_TIME_IN_SECS: { - [chainId: number]: number; -}; diff --git a/dist2/types/constants/lists.d.ts b/dist2/types/constants/lists.d.ts deleted file mode 100644 index acccc739c3e..00000000000 --- a/dist2/types/constants/lists.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export declare const ARBITRUM_LIST = "https://bridge.arbitrum.io/token-list-42161.json"; -export declare const OPTIMISM_LIST = "https://static.optimism.io/optimism.tokenlist.json"; -export declare const UNSUPPORTED_LIST_URLS: string[]; -export declare const DEFAULT_LIST_OF_LISTS: string[]; -export declare const DEFAULT_ACTIVE_LIST_URLS: string[]; diff --git a/dist2/types/constants/locales.d.ts b/dist2/types/constants/locales.d.ts deleted file mode 100644 index 511e5591a79..00000000000 --- a/dist2/types/constants/locales.d.ts +++ /dev/null @@ -1,601 +0,0 @@ -export declare const SUPPORTED_LOCALES: readonly ["en-US", "af-ZA", "ar-SA", "ca-ES", "cs-CZ", "da-DK", "de-DE", "el-GR", "es-ES", "fi-FI", "fr-FR", "he-IL", "hu-HU", "id-ID", "it-IT", "ja-JP", "ko-KR", "nl-NL", "no-NO", "pl-PL", "pt-BR", "pt-PT", "ro-RO", "ru-RU", "sr-SP", "sv-SE", "sw-TZ", "tr-TR", "uk-UA", "vi-VN", "zh-CN", "zh-TW"]; -export declare type SupportedLocale = typeof SUPPORTED_LOCALES[number] | 'pseudo'; -export declare const DEFAULT_LOCALE: SupportedLocale; -export declare const DEFAULT_CATALOG: { - messages: { - "$-": string; - "$<0/>": string; - "${0}": (string | string[])[]; - "(${0})": (string | string[])[]; - "(View on Explorer)": string; - "(clear all)": string; - "(edit)": string; - "- Remove recipient": string; - "0 UNI / week": string; - "25%": string; - "50%": string; - "75%": string; - "<0/> All Proposals": string; - "<0/> Votes": string; - "<0>Account analytics and accrued fees<1> \u2197 ": string; - "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; - "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; - "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; - "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; - "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; - "<0>Unlock voting to prepare for the next proposal.": string; - "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; - "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; - About: string; - Accept: string; - Account: string; - Active: string; - Add: string; - "Add <0/> and <1/> to Uniswap V2": string; - "Add Delegate +": string; - "Add Liquidity": string; - "Add V2 Liquidity": string; - "Add liquidity.": string; - "Add more liquidity": string; - "Add {0} to Metamask <0/>": (string | string[])[]; - "Add {0}-{1} liquidity": (string | string[])[]; - "Add {0}/{1} V3 liquidity": (string | string[])[]; - "Added {0}": (string | string[])[]; - "Address has no available claim": string; - Against: string; - "Allow LP token migration": string; - "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; - "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; - Allowed: string; - Amount: string; - "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Approval pending <0/>": string; - Approve: string; - "Approve Token": string; - "Approve {0}": (string | string[])[]; - "Approve {0} first": (string | string[])[]; - Approved: string; - Approving: string; - "Approving {0}": (string | string[])[]; - Arbiscan: string; - "Arbitrum Bridge": string; - "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Are you sure?": string; - "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; - "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; - Auto: string; - "Auto Router API": string; - "Available to deposit: {0}": (string | string[])[]; - "Balance: {0}": (string | string[])[]; - "Best for exotic pairs.": string; - "Best for most pairs.": string; - "Best for stable pairs.": string; - "Best for very stable pairs.": string; - "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; - "Blocked address": string; - Bridge: string; - "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; - "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; - Canceled: string; - Change: string; - Charts: string; - "Check network status": string; - "Check out our v3 LP walkthrough and migration guides.": string; - Claim: string; - "Claim <0/> for {0}": (string | string[])[]; - "Claim UNI": string; - "Claim UNI Token": string; - "Claim UNI reward for {0}": (string | string[])[]; - "Claim fees": string; - "Claim your UNI tokens": string; - Claimed: string; - "Claimed UNI!": string; - "Claimed!": string; - Claiming: string; - "Claiming UNI": string; - "Claiming {0} UNI": (string | string[])[]; - "Clear All": string; - "Clear all": string; - Close: string; - Closed: string; - Collect: string; - "Collect as WETH": string; - "Collect fees": string; - "Collect {0}/{1} fees": (string | string[])[]; - Collected: string; - Collecting: string; - "Collecting fees": string; - "Collecting fees will withdraw currently available fees for you.": string; - Confirm: string; - "Confirm Supply": string; - "Confirm Swap": string; - "Confirm swap": string; - "Confirm this transaction in your wallet": string; - "Confirm transaction in wallet": string; - "Connect Wallet": string; - "Connect a wallet": string; - "Connect to a wallet to find pools": string; - "Connect to a wallet to view your V2 liquidity.": string; - "Connect to a wallet to view your liquidity.": string; - "Connect wallet to swap": string; - "Connected with {name}": (string | string[])[]; - Copied: string; - "Copy Address": string; - "Create Pool & Supply": string; - "Create Proposal": string; - "Create a pair": string; - "Create a pool": string; - "Create an issue on GitHub": string; - "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; - "Create pool.": string; - "Create {0}/{1} V3 pool": (string | string[])[]; - "Current price": string; - "Current {0} Price:": (string | string[])[]; - Custom: string; - "Dark Theme": string; - Defeated: string; - "Delegate Votes": string; - "Delegate voting power to {0}": (string | string[])[]; - "Delegated to:": string; - "Delegating votes": string; - Deposit: string; - "Deposit Amounts": string; - "Deposit UNI-V2 LP Tokens": string; - "Deposit liquidity": string; - "Deposit tokens to the {label} network.": (string | string[])[]; - "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; - "Deposited liquidity:": string; - "Deposited {0} UNI-V2": (string | string[])[]; - "Depositing Liquidity": string; - Description: string; - Detailed: string; - Details: string; - Disconnect: string; - Discord: string; - Dismiss: string; - Docs: string; - "Don\u2019t see one of your v2 positions? <0>Import it.": string; - "Earned UNI tokens represent voting shares in Uniswap governance.": string; - Edit: string; - "Efficiency Comparison": string; - "Enter a percent": string; - "Enter a recipient": string; - "Enter a valid slippage percentage": string; - "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; - "Enter an amount": string; - "Enter valid list location": string; - "Enter valid token address": string; - "Enter {0} amount": (string | string[])[]; - Error: string; - "Error connecting": string; - "Error connecting. Try refreshing the page.": string; - "Error details": string; - "Error importing list": string; - "Estimate may differ due to your wallet gas settings": string; - "Estimated network fee": string; - Etherscan: string; - Executed: string; - "Expanded results from inactive Token Lists": string; - "Expected Output": string; - "Expert Mode": string; - "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; - Expired: string; - "Explore Uniswap Analytics.": string; - "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; - "Fee Tier": string; - "Fee tier": string; - "Fetching best price...": string; - "Fetching best price\u2026": string; - For: string; - "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; - From: string; - "From (at most)": string; - "Full Range": string; - "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; - "Get support on Discord": string; - "Help Center": string; - Hide: string; - "Hide closed positions": string; - "High Price Impact": string; - "How this app uses APIs": string; - "I understand": string; - "If you purchase a token from this list, you may not be able to sell it back.": string; - Import: string; - "Import List": string; - "Import Pool": string; - "Import V2 Pool": string; - "Import at your own risk": string; - "In range": string; - "Increase Liquidity": string; - "Initial prices and pool share": string; - "Initializing...": string; - "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Install Metamask": string; - "Insufficient liquidity for this trade.": string; - "Insufficient {0}": (string | string[])[]; - "Insufficient {0} balance": (string | string[])[]; - "Interface Settings": string; - "Invalid pair": string; - "Invalid pair.": string; - "Invalid price input": string; - "Invalid range selected. The min price must be lower than the max price.": string; - "Invalid recipient": string; - Language: string; - Learn: string; - "Learn about providing liquidity": string; - "Learn more": string; - "Legal & Privacy": string; - "Light Theme": string; - Liquidity: string; - "Liquidity data not available.": string; - "Liquidity provider rewards": string; - "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - Lists: string; - Loaded: string; - Loading: string; - MAX: string; - Manage: string; - "Manage Liquidity in Rewards Pool": string; - "Manage Token Lists": string; - "Manage this pool.": string; - Max: string; - "Max Price": string; - "Max price": string; - "Max slippage": string; - "Max:": string; - "Maximum sent": string; - Menu: string; - Migrate: string; - "Migrate Liquidity to V3": string; - "Migrate V2 Liquidity": string; - "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; - "Migrate {0}/{1} liquidity to V3": (string | string[])[]; - Migrating: string; - "Min Price": string; - "Min price": string; - "Min:": string; - "Minimum received": string; - "Missing dependencies": string; - "Mock Toggle": string; - More: string; - "Network Fee": string; - "Network Warning": string; - "Network fees exceed 50% of the swap amount!": string; - "New Position": string; - "No V2 Liquidity found.": string; - "No active pools": string; - "No data": string; - "No description.": string; - "No liquidity found.": string; - "No pool found.": string; - "No proposals found.": string; - "No results found.": string; - "Not created": string; - OFF: string; - ON: string; - "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; - Off: string; - On: string; - "Once you are happy with the rate click supply to review.": string; - "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; - "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; - "Optimism Gateway": string; - "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Optimistic Etherscan": string; - "Out of range": string; - "Output is estimated.": string; - "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; - "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Output will be sent to <0>{0}": (string | string[])[]; - Owner: string; - "Participating pools": string; - Pending: string; - "Please confirm you would like to remove this list by typing REMOVE": string; - "Please connect to Layer 1 Ethereum": string; - "Please connect to a supported network in the dropdown menu or in your wallet.": string; - "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; - "Polygon Bridge": string; - Polygonscan: string; - Pool: string; - "Pool Found!": string; - "Pool Rate": string; - "Pool rate": string; - "Pool tokens in rewards pool:": string; - "Pooled {0}:": (string | string[])[]; - "Pools Overview": string; - Preview: string; - Price: string; - "Price Difference:": string; - "Price Impact": string; - "Price Impact Too High": string; - "Price Updated": string; - "Price impact": string; - "Price range": string; - "Price updated": string; - "Price:": string; - "Prices and pool share": string; - Proposal: string; - "Proposal Submitted": string; - "Proposal Title": string; - Proposals: string; - "Proposals submitted by community members will appear here.": string; - "Proposed Action": string; - Proposer: string; - "Protocol Disclaimer": string; - Queued: string; - Rates: string; - "Read more about UNI": string; - "Read more about Uniswap governance": string; - "Read more about providing liquidity": string; - "Read more about unsupported assets": string; - "Recent Transactions": string; - "Recent transactions": string; - Recipient: string; - "Reload the page": string; - Remove: string; - "Remove <0/> and <1/>": string; - "Remove Amount": string; - "Remove Delegate": string; - "Remove Liquidity": string; - "Remove list": string; - "Removing {0} {1} and {2} {3}": (string | string[])[]; - "Removing {0} {1} and{2} {3}": (string | string[])[]; - "Request Features": string; - Reset: string; - Return: string; - "Review swap": string; - "Search by token name or address": string; - "Search name or paste address": string; - "Select Pair": string; - "Select a network": string; - "Select a token": string; - "Select a token to find your v2 liquidity.": string; - "Select an action": string; - "Selected Range": string; - Self: string; - "Self Delegate": string; - "Set Price Range": string; - "Set Starting Price": string; - Settings: string; - "Share of Pool": string; - "Share of Pool:": string; - "Show Portis": string; - "Show closed positions": string; - Simple: string; - "Slippage tolerance": string; - "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; - "Something went wrong": string; - "Something went wrong.": string; - "Step 1. Get UNI-V2 Liquidity tokens": string; - "Submit new proposal": string; - "Submitting Proposal": string; - "Submitting Vote": string; - Succeeded: string; - Success: string; - Supply: string; - "Supplying {0} {1} and {2} {3}": (string | string[])[]; - Swap: string; - "Swap <0/> for exactly <1/>": string; - "Swap Anyway": string; - "Swap details": string; - "Swap exactly <0/> for <1/>": string; - "Swap failed: {0}": (string | string[])[]; - "Swap summary": string; - "Swapping {0} {1} for {2} {3}": (string | string[])[]; - "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; - "Tell us what you think \u2197": string; - "Thanks for being part of the Uniswap community <0/>": string; - "The % you will earn in fees.": string; - "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; - "The app fetches blockchain data from The Graph\u2019s hosted service.": string; - "The app fetches on-chain data and constructs contract calls with an Infura API.": string; - "The app fetches the optimal trade route from a Uniswap Labs server.": string; - "The app logs anonymized usage statistics in order to improve over time.": string; - "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; - "The cost of sending this transaction is more than half of the value of the input amount.": string; - "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; - "The estimated difference between the USD values of input and output amounts.": string; - "The input token cannot be transferred. There may be an issue with the input token.": string; - "The market price is outside your specified price range. Single-asset deposit only.": string; - "The most recent block number on this network. Prices update on every block.": string; - "The output token cannot be transferred. There may be an issue with the output token.": string; - "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; - "The price of this pool is within your selected range. Your position is currently earning fees.": string; - "The ratio of tokens you add will set the price of this pool.": string; - "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; - "There is no liquidity data.": string; - "This app uses the following third-party APIs:": string; - "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; - "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; - "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; - "This token is not supported in the Uniswap Labs app": string; - "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; - "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; - "Tip: Custom tokens are stored locally in your browser": string; - To: string; - "To (at least)": string; - "Token not supported": string; - Tokens: string; - "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; - "Top pools": string; - "Total deposited": string; - "Total deposits": string; - "Trade Route": string; - Trading: string; - "Transaction Settings": string; - "Transaction Submitted": string; - "Transaction completed in": string; - "Transaction deadline": string; - "Transaction pending": string; - "Transaction rejected.": string; - "Transaction submitted": string; - "Transfer Token": string; - "Try Again": string; - "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Turn On Expert Mode": string; - "UNI has arrived": string; - "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; - "UNI {0}/{1} Burned": (string | string[])[]; - "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; - "UNI-V2 {0}-{1}": (string | string[])[]; - "Unclaimed UNI": string; - "Unclaimed fees": string; - Undetermined: string; - "Unexpected error. Could not estimate gas for the swap.": string; - "Unexpected issue with estimating the gas. Please try again.": string; - "Uniswap Governance": string; - "Uniswap Labs' Terms of Service": string; - "Uniswap available in: <0>{0}": (string | string[])[]; - "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; - "Uniswap liquidity mining": string; - "Uniswap migration contract\u2197": string; - "Unknown Source": string; - "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; - "Unlock Votes": string; - "Unlock Voting": string; - "Unlocking Votes": string; - "Unsupported Asset": string; - "Unsupported Assets": string; - "Unsupported network\u2013switch to another to trade.": string; - Untitled: string; - Unwrap: string; - "Unwrap <0/> to {0}": (string | string[])[]; - "Update Delegation": string; - "Update list": string; - "Use the Uniswap Labs API to get faster quotes.": string; - User: string; - "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; - "V2 liquidity": string; - "V3 {0} Price:": (string | string[])[]; - "View accrued fees and analytics<0>\u2197": string; - "View list": string; - "View on Etherscan": string; - "View on Explorer": string; - "View transaction on Explorer": string; - Vote: string; - "Vote Against": string; - "Vote For": string; - "Vote against proposal {proposalId}": (string | string[])[]; - "Vote against proposal {proposalKey}": (string | string[])[]; - "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote for proposal {proposalId}": (string | string[])[]; - "Vote for proposal {proposalKey}": (string | string[])[]; - "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote to abstain on proposal {proposalId}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Voting ended {0}": (string | string[])[]; - "Voting ends approximately {0}": (string | string[])[]; - "Voting starts approximately {0}": (string | string[])[]; - "Waiting For Confirmation": string; - "Wallet Address or ENS name": string; - "Weekly Rewards": string; - "Welcome to team Unicorn :)": string; - "When you claim without withdrawing your liquidity remains in the mining pool.": string; - "When you withdraw, the contract will automagically claim UNI on your behalf!": string; - "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; - Withdraw: string; - "Withdraw & Claim": string; - "Withdraw deposited liquidity": string; - "Withdrawing {0} UNI-V2": (string | string[])[]; - "Withdrew UNI-V2!": string; - Wrap: string; - "Wrap <0/> to {0}": (string | string[])[]; - "Wrong Network": string; - "You already have an active or pending proposal": string; - "You are creating a pool": string; - "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; - "You are the first liquidity provider.": string; - "You can either vote on each proposal yourself or delegate your votes to a third party.": string; - "You can now trade {0}": (string | string[])[]; - "You don't have enough votes to submit a proposal": string; - "You don\u2019t have liquidity in this pool yet.": string; - "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; - "You may have lost your network connection.": string; - "You might consider waiting until the network fees go down to complete this transaction.": string; - "You must connect an account.": string; - "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; - "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; - "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; - "You will also collect fees earned from this position.": string; - "You will receive": string; - "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; - "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; - "Your V2 liquidity": string; - "Your active V3 liquidity positions will appear here.": string; - "Your liquidity deposits": string; - "Your pool share:": string; - "Your position": string; - "Your position has 0 liquidity, and is not earning fees.": string; - "Your position will appear here.": string; - "Your position will be 100% composed of {0} at this price": (string | string[])[]; - "Your position will be 100% {0} at this price.": (string | string[])[]; - "Your position will not earn fees or be used in trades until the market price moves into your range.": string; - "Your positions": string; - "Your rate": string; - "Your total pool tokens:": string; - "Your transaction cost will be much higher as it includes the gas to create the pool.": string; - "Your transaction may be frontrun": string; - "Your transaction may fail": string; - "Your transaction will revert if it has been pending for longer than this period of time.": string; - "Your transaction will revert if it is pending for more than this period of time.": string; - "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; - "Your transactions will appear here...": string; - "Your unclaimed UNI": string; - "after slippage": string; - confirm: string; - "for {0}": (string | string[])[]; - gwei: string; - "has socks emoji": string; - "here.": string; - "https:// or ipfs:// or ENS name": string; - minutes: string; - "via {0}": (string | string[])[]; - "via {0} token list": (string | string[])[]; - "{0, plural, one {Import token} other {Import tokens}}": (string | { - one: string; - other: string; - })[][]; - "{0}": string[][]; - "{0} %": (string | string[])[]; - "{0} <0/> per <1/>": (string | string[])[]; - "{0} Custom Tokens": (string | string[])[]; - "{0} Deposited": (string | string[])[]; - "{0} ETH": (string | string[])[]; - "{0} Fees Earned:": (string | string[])[]; - "{0} Pending": (string | string[])[]; - "{0} UNI": (string | string[])[]; - "{0} UNI / week": (string | string[])[]; - "{0} UNI-V2": (string | string[])[]; - "{0} UNI-V2 LP tokens available": (string | string[])[]; - "{0} Votes": (string | string[])[]; - "{0} per {1}": (string | string[])[]; - "{0} tokens": (string | string[])[]; - "{0} {1} Price:": (string | string[])[]; - "{0} {nativeCurrencySymbol}": (string | string[])[]; - "{0} \u2022 Added by user": (string | string[])[]; - "{0}%": (string | string[])[]; - "{0}% fee tier": (string | string[])[]; - "{0}% pool": (string | string[])[]; - "{0}% select": (string | string[])[]; - "{0}-{1} Liquidity Mining": (string | string[])[]; - "{0}/{1} LP NFT": (string | string[])[]; - "{0}/{1} LP Tokens": (string | string[])[]; - "{SOCKS_AMOUNT} UNI": (string | string[])[]; - "{USER_AMOUNT} UNI": (string | string[])[]; - "{activeTokensOnThisChain} tokens": (string | string[])[]; - "{integrator} fee": (string | string[])[]; - "{label} token bridge": (string | string[])[]; - "{min}m {sec}s": (string | string[])[]; - "{percentForSlider}%": (string | string[])[]; - "{sec}s": (string | string[])[]; - "{tokenB} per {tokenA}": (string | string[])[]; - "\u2190 Back to Pools Overview": string; - }; -}; -export declare const LOCALE_LABEL: { - [locale in SupportedLocale]: string; -}; diff --git a/dist2/types/constants/misc.d.ts b/dist2/types/constants/misc.d.ts deleted file mode 100644 index 099f63ecbd1..00000000000 --- a/dist2/types/constants/misc.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Percent } from '@uniswap/sdk-core'; -import JSBI from 'jsbi'; -export declare const ZERO_ADDRESS = "0x0000000000000000000000000000000000000000"; -export declare const NetworkContextName = "NETWORK"; -export declare const IS_IN_IFRAME: boolean; -export declare const DEFAULT_DEADLINE_FROM_NOW: number; -export declare const L2_DEADLINE_FROM_NOW: number; -export declare const DEFAULT_TXN_DISMISS_MS = 25000; -export declare const L2_TXN_DISMISS_MS = 5000; -export declare const BIG_INT_SECONDS_IN_WEEK: JSBI; -export declare const BIG_INT_ZERO: JSBI; -export declare const ONE_BIPS: Percent; -export declare const ALLOWED_PRICE_IMPACT_LOW: Percent; -export declare const ALLOWED_PRICE_IMPACT_MEDIUM: Percent; -export declare const ALLOWED_PRICE_IMPACT_HIGH: Percent; -export declare const PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN: Percent; -export declare const BLOCKED_PRICE_IMPACT_NON_EXPERT: Percent; -export declare const BETTER_TRADE_LESS_HOPS_THRESHOLD: Percent; -export declare const ZERO_PERCENT: Percent; -export declare const TWO_PERCENT: Percent; -export declare const ONE_HUNDRED_PERCENT: Percent; diff --git a/dist2/types/constants/proposals/index.d.ts b/dist2/types/constants/proposals/index.d.ts deleted file mode 100644 index a65a67f9c77..00000000000 --- a/dist2/types/constants/proposals/index.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -export declare const UNISWAP_GRANTS_START_BLOCK = 11473815; -export declare const BRAVO_START_BLOCK = 13059344; -export declare const ONE_BIP_START_BLOCK = 13551293; -export declare const POLYGON_START_BLOCK = 13786993; diff --git a/dist2/types/constants/proposals/polygon_proposal_title.d.ts b/dist2/types/constants/proposals/polygon_proposal_title.d.ts deleted file mode 100644 index 4de675a3082..00000000000 --- a/dist2/types/constants/proposals/polygon_proposal_title.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare const POLYGON_PROPOSAL_TITLE = "Should Uniswap v3 be deployed to Polygon?"; diff --git a/dist2/types/constants/proposals/uniswap_grants_proposal_description.d.ts b/dist2/types/constants/proposals/uniswap_grants_proposal_description.d.ts deleted file mode 100644 index 0ca54d3f337..00000000000 --- a/dist2/types/constants/proposals/uniswap_grants_proposal_description.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare const UNISWAP_GRANTS_PROPOSAL_DESCRIPTION = "# Uniswap Grants Program v0.1\n\n*co-authored with [Ken Ng](https://twitter.com/nkennethk?lang=en)*\n\n## Summary:\n\n**This post outlines a framework for funding Uniswap ecosystem development with grants from the[ UNI Community Treasury](https://uniswap.org/blog/uni/).** The program starts small\u2014sponsoring hackathons, [for example](https://gov.uniswap.org/c/proposal-discussion/5)\u2014but could grow in significance over time (with renewals approved by governance) to fund core protocol development. Grants administration is a subjective process that cannot be easily automated, and thus we propose a nimble committee of 6 members \u20141 lead and 5 reviewers\u2014to deliver an efficient, predictable process to applicants, such that funding can be administered without having to put each application to a vote. We propose the program start with an initial cap of $750K per quarter and a limit of 2 quarters before renewal\u2014a sum that we feel is appropriate for an MVP relative to the size of the treasury that UNI token holders are entrusted with allocating.\n\n**Purpose:**\n\n**The mission of the UGP is to provide valuable resources to help grow the Uniswap ecosystem.** Through public discourse and inbound applications, the community will get first-hand exposure to identify and respond to the most pressing needs of the ecosystem, as well as the ability to support innovative projects expanding the capabilities of Uniswap. By rewarding talent early with developer incentives, bounties, and infrastructure support, UGP acts as a catalyst for growth and helps to maintain Uniswap as a nexus for DeFi on Ethereum.\n\n**Quarterly Budget:**\n\n* Max quarterly budget of up to $750k\n* Budget and caps to be assessed every six months\n\n**Grant Allocation Committee:**\n\n* Of 6 committee members: 1 lead and 5 reviewers\n* Each committee has a term of 2 quarters (6 months) after which the program needs to be renewed by UNI governance\n* Committee functions as a 4 of 5 multi-sig\n\n**Committee Members**\n\nWhile the goals and priorities of the grant program will be thoroughly discussed and reviewed by the community through public discourse, **the decision to start UGP by operating as a small committee is to ensure that the application and decision process will be efficient and predictable, so applicants have clear objectives and timely decisions.**\n\nStarting with just six members enables the committee to efficiently fund projects with tight feedback loops and rapid iterations. The purpose of this committee would be to test the hypothesis that the Grants Program can successfully provide value for the UNI ecosystem before scaling the program.\n\n**We suggest the grants program is administered by a single lead. Here we propose Kenneth Ng, a co-author of this post**. Ken has helped grow the Ethereum Foundation Grants Program over the last two years in establishing high level priorities and adapting for the ecosystems needs.\n\n**The other 5 committee members should be thought of as \u201Creviewers\u201D \u2014 UNI community members who will keep the grants program functional by ensuring Ken is leading effectively and, of course, not absconding with funds.** Part of the reviewers job is to hold the program accountable for success (defined below) and/or return any excess funds to the UNI treasury. Reviewers are not compensated as part of this proposal as we expect their time commitment to be minimal. Compensation for the lead role is discussed below, as we expect this to be a labor intensive role.\n\n**Program Lead:** [Ken Ng](https://twitter.com/nkennethk?lang=en) (HL Creative Corp)\n*Ecosystem Support Program at the Ethereum Foundation*\n\n1. Reviewer: [Jesse Walden](https://twitter.com/jessewldn) (o/b/o Unofficial LLC dba [Variant Fund](http://twitter.com/variantfund))\n*Founder and Investor at Variant Fund (holds UNI)*\n\n2. Reviewer: [Monet Supply](https://twitter.com/MonetSupply)\n*Risk Analyst at MakerDAO*\n\n3. Reviewer: [Robert Leshner](https://twitter.com/rleshner)\n*Founder and CEO of Compound Finance*\n\n4. Reviewer: [Kain Warwick](https://twitter.com/kaiynne)\n*Founder of Synthetix*\n\n5. Reviewer: [Ashleigh Schap](https://twitter.com/ashleighschap)\n*Growth Lead, Uniswap (Company)*\n\n## Methodology\n\n**1.1 Budget**\n\nThis proposal recommends a max cap of $750K per quarter, with the ability to reevaluate biannually at each epoch (two fiscal quarters). While the UGP Grants Committee will be the decision makers around individual grants, respective budgets, roadmaps, and milestones, any top-level changes to UGP including epochs and max cap, will require full community quorum (4% approval).\n\nThe UGP will be funded by the UNI treasury according to the[ release schedule](https://uniswap.org/blog/uni/) set out by the Uniswap team, whereby 43% of the UNI treasury is released over a four-year timeline. In Year 1 this will total to 172,000,000 UNI (~$344M as of writing).\n\nTaking into consideration the current landscape of ecosystem funding across Ethereum, the community would be hard-pressed to allocate even 5% of Year 1\u2019s treasury. For context Gitcoin CLR Round 7 distributed $725k ($450k in matched) across 857 projects and YTD, Moloch has granted just under $200k but in contrast, the EF has committed to somewhere in the 8 figure range.\n\n**1.2 Committee Compensation**\n\nOperating a successful grants program takes considerable time and effort. Take, for instance, the EF Ecosystem Support Program, which has awarded grants since 2018, consists of an internal team at the Foundation as well as an ever increasing roster of community advisors in order to keep expanding and adapting to best serve the needs of the Ethereum ecosystem. While the structure of the allocation committee has six members, we propose that only the lead will be remunerated for their work in establishing the initial processes, vetting applications, and managing the program overall as this role is expected to be time consuming if the program is to be succesful. We propose that the other committee members be unpaid UNI ecosystem stakeholders who have an interest in seeing the protocol ecosystem continue to operate and grow.\n\n**We propose the lead be compensated 25 UNI/hr (approximately $100 USD at time of this writing) capped at 30 hours/week. This compensation, along with the quarterly budget, will be allocated to the UGP multisig from the UNI treasury**. In keeping with the committee\u2019s commitment to the community, hours and duties will be logged publicly and transparently .\n\n**2.1 Priorities**\n\nInitially, the program aims to start narrow in scope, funding peripheral ecosystem initiatives, such as targeted bounties, hackathon sponsorships, and other low-stakes means of building out the Uniswap developer ecosystem. Over time, if the program proves effective, the grant allocations can grow in scope to include, for example, improved frontends, trading interfaces, and eventually, core protocol development.\n\n![|624x199](upload://vNP0APCOjiwQMurCmYI47cTLklc.png)\n\nWith the initial priorities in mind, some effective measures for quick successes might look like:\n\n* Total number of projects funded\n* Quarterly increase in applications\n* Project engagement post-event/funding\n* Overall community engagement/sentiment\n\n**2.2 Timeline**\n\nIn keeping with the fast pace of the UNI ecosystem, we organize time in epochs, or two calendar quarters. Each epoch will see two funding rounds, one per quarter, after which the community can review and create proposals to improve or revamp the program as they deem fit.\n\n**![|624x245](upload://n56TSh5X3mt4TSqVVMFhbnZM0eM.png)**\n\n**Rolling Wave 1 & 2 Applications**\n\n* Starting in Q1 2021, UGP will start accepting applications for events looking for support in the form of bounties or prizes that in parallel can be proactively sourced. During these first two waves of funding projects, the allocation committee lead can begin laying out guardrails for continued funding\n\n* Considering the immediate feedback loops for the first epoch, we expect these allocation decisions to be discussed and reviewed by the larger community. Should this not be of value, the community can submit a formal governance proposal to change any piece of UGP that was not effective\n\n**Wave 3 & Beyond**\n\n* Beginning with Wave 3, there should have been enough time with impactful projects funded to be considered for follow-on funding, should it make sense. In the same vein, projects within scope will be expanded to also include those working on integrations and and other key components.\n\n* Beyond the second epoch, as the community helps to review and help adapt UGP to be most effective, the scope will continue to grow in order to accommodate the state of the ecosystem including that of core protocol improvements\n\n## Conclusion:\n\n**If this proposal is successfully approved, UGP will start accepting applications on a rolling basis beginning at the start of 2021.** With the phases and priorities laid out above, UGP will aim to make a significant impact by catalyzing growth and innovation in the UNI ecosystem.\n\n**This program is meant to be the simplest possible MVP of a Uniswap Ecosystem Grants initiative.** While the multi-sig committee comes with trust assumptions about the members, our hope is the community will approve this limited engagement to get the ball rolling in an efficient structure. **After the first epoch (2 fiscal quarters) the burden of proof will be on UGP to show empirical evidence that the program is worth continuing in its existing form and will submit to governance to renew treasury funding.**\n\nIf this program proves successful, we hope it will inspire others to follow suit and create their own funding committees for allocating treasury capital\u2014ideally with different specializations.\n"; diff --git a/dist2/types/constants/routing.d.ts b/dist2/types/constants/routing.d.ts deleted file mode 100644 index ae1ef4713a5..00000000000 --- a/dist2/types/constants/routing.d.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { Currency, Token } from '@uniswap/sdk-core'; -declare type ChainTokenList = { - readonly [chainId: number]: Token[]; -}; -declare type ChainCurrencyList = { - readonly [chainId: number]: Currency[]; -}; -export declare const BASES_TO_CHECK_TRADES_AGAINST: ChainTokenList; -export declare const ADDITIONAL_BASES: { - [chainId: number]: { - [tokenAddress: string]: Token[]; - }; -}; -/** - * Some tokens can only be swapped via certain pairs, so we override the list of bases that are considered for these - * tokens. - */ -export declare const CUSTOM_BASES: { - [chainId: number]: { - [tokenAddress: string]: Token[]; - }; -}; -/** - * Shows up in the currency select for swap and add liquidity - */ -export declare const COMMON_BASES: ChainCurrencyList; -export declare const BASES_TO_TRACK_LIQUIDITY_FOR: ChainTokenList; -export declare const PINNED_PAIRS: { - readonly [chainId: number]: [Token, Token][]; -}; -export {}; diff --git a/dist2/types/constants/tokens.d.ts b/dist2/types/constants/tokens.d.ts deleted file mode 100644 index 005e16d0547..00000000000 --- a/dist2/types/constants/tokens.d.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { Ether, NativeCurrency, Token } from '@uniswap/sdk-core'; -export declare const AMPL: Token; -export declare const DAI: Token; -export declare const DAI_ARBITRUM_ONE: Token; -export declare const DAI_OPTIMISM: Token; -export declare const USDC: Token; -export declare const USDC_ARBITRUM: Token; -export declare const USDC_POLYGON: Token; -export declare const DAI_POLYGON: Token; -export declare const USDT_POLYGON: Token; -export declare const WBTC_POLYGON: Token; -export declare const USDC_OPTIMISM: Token; -export declare const USDT: Token; -export declare const USDT_ARBITRUM_ONE: Token; -export declare const USDT_OPTIMISM: Token; -export declare const WBTC: Token; -export declare const WBTC_ARBITRUM_ONE: Token; -export declare const WBTC_OPTIMISM: Token; -export declare const FEI: Token; -export declare const TRIBE: Token; -export declare const FRAX: Token; -export declare const FXS: Token; -export declare const renBTC: Token; -export declare const ETH2X_FLI: Token; -export declare const sETH2: Token; -export declare const rETH2: Token; -export declare const SWISE: Token; -export declare const WETH_POLYGON_MUMBAI: Token; -export declare const WETH_POLYGON: Token; -export declare const UNI: { - [chainId: number]: Token; -}; -export declare const WRAPPED_NATIVE_CURRENCY: { - [chainId: number]: Token; -}; -export declare class ExtendedEther extends Ether { - get wrapped(): Token; - private static _cachedExtendedEther; - static onChain(chainId: number): ExtendedEther; -} -export declare function nativeOnChain(chainId: number): NativeCurrency; diff --git a/dist2/types/constants/wallet.d.ts b/dist2/types/constants/wallet.d.ts deleted file mode 100644 index ef43dbee524..00000000000 --- a/dist2/types/constants/wallet.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { AbstractConnector } from '@web3-react/abstract-connector'; -interface WalletInfo { - connector?: AbstractConnector; - name: string; - iconURL: string; - description: string; - href: string | null; - color: string; - primary?: true; - mobile?: true; - mobileOnly?: true; -} -export declare const SUPPORTED_WALLETS: { - [key: string]: WalletInfo; -}; -export {}; diff --git a/dist2/types/hooks/Tokens.d.ts b/dist2/types/hooks/Tokens.d.ts deleted file mode 100644 index b113e21f132..00000000000 --- a/dist2/types/hooks/Tokens.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Currency, Token } from '@uniswap/sdk-core'; -import { WrappedTokenInfo } from '../state/lists/wrappedTokenInfo'; -export declare function useAllTokens(): { - [address: string]: Token; -}; -export declare function useUnsupportedTokens(): { - [address: string]: Token; -}; -export declare function useSearchInactiveTokenLists(search: string | undefined, minResults?: number): WrappedTokenInfo[]; -export declare function useIsTokenActive(token: Token | undefined | null): boolean; -export declare function useIsUserAddedToken(currency: Currency | undefined | null): boolean; -export declare function useToken(tokenAddress?: string | null): Token | null | undefined; -export declare function useCurrency(currencyId?: string | null): Currency | null | undefined; diff --git a/dist2/types/hooks/useActiveLocale.d.ts b/dist2/types/hooks/useActiveLocale.d.ts deleted file mode 100644 index 62f76e10cdb..00000000000 --- a/dist2/types/hooks/useActiveLocale.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { SupportedLocale } from 'constants/locales'; -/** - * Returns the supported locale read from the user agent (navigator) - */ -export declare function navigatorLocale(): SupportedLocale | undefined; -export declare const initialLocale: SupportedLocale; -/** - * Returns the currently active locale, from a combination of user agent, query string, and user settings stored in redux - * Stores the query string locale in redux (if set) to persist across sessions - */ -export declare function useActiveLocale(): SupportedLocale; diff --git a/dist2/types/hooks/useActiveWeb3React.d.ts b/dist2/types/hooks/useActiveWeb3React.d.ts deleted file mode 100644 index 349f26e036e..00000000000 --- a/dist2/types/hooks/useActiveWeb3React.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { Web3Provider } from '@ethersproject/providers'; -export default function useActiveWeb3React(): import("@web3-react/core/dist/types").Web3ReactContextInterface; diff --git a/dist2/types/hooks/useAddTokenToMetamask.d.ts b/dist2/types/hooks/useAddTokenToMetamask.d.ts deleted file mode 100644 index 87626a92dd3..00000000000 --- a/dist2/types/hooks/useAddTokenToMetamask.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Currency } from '@uniswap/sdk-core'; -export default function useAddTokenToMetamask(currencyToAdd: Currency | undefined): { - addToken: () => void; - success: boolean | undefined; -}; diff --git a/dist2/types/hooks/useAllCurrencyCombinations.d.ts b/dist2/types/hooks/useAllCurrencyCombinations.d.ts deleted file mode 100644 index 173910ec4d6..00000000000 --- a/dist2/types/hooks/useAllCurrencyCombinations.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { Currency, Token } from '@uniswap/sdk-core'; -export declare function useAllCurrencyCombinations(currencyA?: Currency, currencyB?: Currency): [Token, Token][]; diff --git a/dist2/types/hooks/useAllV3Routes.d.ts b/dist2/types/hooks/useAllV3Routes.d.ts deleted file mode 100644 index 7022d3a71ad..00000000000 --- a/dist2/types/hooks/useAllV3Routes.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Currency } from '@uniswap/sdk-core'; -import { Route } from '@uniswap/v3-sdk'; -/** - * Returns all the routes from an input currency to an output currency - * @param currencyIn the input currency - * @param currencyOut the output currency - */ -export declare function useAllV3Routes(currencyIn?: Currency, currencyOut?: Currency): { - loading: boolean; - routes: Route[]; -}; diff --git a/dist2/types/hooks/useApeModeQueryParamReader.d.ts b/dist2/types/hooks/useApeModeQueryParamReader.d.ts deleted file mode 100644 index 7afea7a467d..00000000000 --- a/dist2/types/hooks/useApeModeQueryParamReader.d.ts +++ /dev/null @@ -1 +0,0 @@ -export default function ApeModeQueryParamReader(): null; diff --git a/dist2/types/hooks/useApproveCallback.d.ts b/dist2/types/hooks/useApproveCallback.d.ts deleted file mode 100644 index a57c9aa45b9..00000000000 --- a/dist2/types/hooks/useApproveCallback.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Trade } from '@uniswap/router-sdk'; -import { Currency, CurrencyAmount, Percent, TradeType } from '@uniswap/sdk-core'; -import { Trade as V2Trade } from '@uniswap/v2-sdk'; -import { Trade as V3Trade } from '@uniswap/v3-sdk'; -import { ApprovalState } from 'lib/hooks/useApproval'; -export { ApprovalState } from 'lib/hooks/useApproval'; -export declare function useApproveCallback(amountToApprove?: CurrencyAmount, spender?: string): [ApprovalState, () => Promise]; -export declare function useApprovalOptimizedTrade(trade: Trade | undefined, allowedSlippage: Percent): V2Trade | Trade | V3Trade | undefined; -export declare function useApproveCallbackFromTrade(trade: V2Trade | V3Trade | Trade | undefined, allowedSlippage: Percent): [ApprovalState, () => Promise]; diff --git a/dist2/types/hooks/useArgentWalletContract.d.ts b/dist2/types/hooks/useArgentWalletContract.d.ts deleted file mode 100644 index d33dfc11255..00000000000 --- a/dist2/types/hooks/useArgentWalletContract.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { ArgentWalletContract } from '../abis/types'; -export declare function useArgentWalletContract(): ArgentWalletContract | null; diff --git a/dist2/types/hooks/useAutoRouterSupported.d.ts b/dist2/types/hooks/useAutoRouterSupported.d.ts deleted file mode 100644 index fdbf0c64fe6..00000000000 --- a/dist2/types/hooks/useAutoRouterSupported.d.ts +++ /dev/null @@ -1 +0,0 @@ -export default function useAutoRouterSupported(): boolean; diff --git a/dist2/types/hooks/useAutoSlippageTolerance.d.ts b/dist2/types/hooks/useAutoSlippageTolerance.d.ts deleted file mode 100644 index abb77e38ba3..00000000000 --- a/dist2/types/hooks/useAutoSlippageTolerance.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Currency, Percent, TradeType } from '@uniswap/sdk-core'; -import { InterfaceTrade } from 'state/routing/types'; -/** - * Returns slippage tolerance based on values from current trade, gas estimates from api, and active network. - */ -export default function useAutoSlippageTolerance(trade: InterfaceTrade | undefined): Percent; diff --git a/dist2/types/hooks/useBestTrade.d.ts b/dist2/types/hooks/useBestTrade.d.ts deleted file mode 100644 index 1fb57b6ee82..00000000000 --- a/dist2/types/hooks/useBestTrade.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Currency, CurrencyAmount, TradeType } from '@uniswap/sdk-core'; -import { InterfaceTrade, TradeState } from 'state/routing/types'; -/** - * Returns the best v2+v3 trade for a desired swap. - * @param tradeType whether the swap is an exact in/out - * @param amountSpecified the exact amount to swap in/out - * @param otherCurrency the desired output/payment currency - */ -export declare function useBestTrade(tradeType: TradeType, amountSpecified?: CurrencyAmount, otherCurrency?: Currency): { - state: TradeState; - trade: InterfaceTrade | undefined; -}; diff --git a/dist2/types/hooks/useBestV2Trade.d.ts b/dist2/types/hooks/useBestV2Trade.d.ts deleted file mode 100644 index 018e91ff21d..00000000000 --- a/dist2/types/hooks/useBestV2Trade.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Currency, CurrencyAmount, TradeType } from '@uniswap/sdk-core'; -import { Trade } from '@uniswap/v2-sdk'; -/** - * Returns the best v2 trade for a desired swap - * @param tradeType whether the swap is an exact in/out - * @param amountSpecified the exact amount to swap in/out - * @param otherCurrency the desired output/payment currency - */ -export declare function useBestV2Trade(tradeType: TradeType.EXACT_INPUT | TradeType.EXACT_OUTPUT, amountSpecified?: CurrencyAmount, otherCurrency?: Currency, { maxHops }?: { - maxHops?: number | undefined; -}): Trade | null; diff --git a/dist2/types/hooks/useClientSideV3Trade.d.ts b/dist2/types/hooks/useClientSideV3Trade.d.ts deleted file mode 100644 index 4c4d6aacc39..00000000000 --- a/dist2/types/hooks/useClientSideV3Trade.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Currency, CurrencyAmount, TradeType } from '@uniswap/sdk-core'; -import { InterfaceTrade, TradeState } from 'state/routing/types'; -/** - * Returns the best v3 trade for a desired swap - * @param tradeType whether the swap is an exact in/out - * @param amountSpecified the exact amount to swap in/out - * @param otherCurrency the desired output/payment currency - */ -export declare function useClientSideV3Trade(tradeType: TTradeType, amountSpecified?: CurrencyAmount, otherCurrency?: Currency): { - state: TradeState; - trade: InterfaceTrade | undefined; -}; diff --git a/dist2/types/hooks/useColor.d.ts b/dist2/types/hooks/useColor.d.ts deleted file mode 100644 index e867661bc76..00000000000 --- a/dist2/types/hooks/useColor.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { Token } from '@uniswap/sdk-core'; -export declare function useColor(token?: Token): string; -export declare function useListColor(listImageUri?: string): string; diff --git a/dist2/types/hooks/useContract.d.ts b/dist2/types/hooks/useContract.d.ts deleted file mode 100644 index e0bd40cb12f..00000000000 --- a/dist2/types/hooks/useContract.d.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Contract } from '@ethersproject/contracts'; -import { ArgentWalletDetector, EnsPublicResolver, EnsRegistrar, Erc20, Erc721, Erc1155, Weth } from 'abis/types'; -import { NonfungiblePositionManager, Quoter, TickLens, UniswapInterfaceMulticall } from 'types/v3'; -import { V3Migrator } from 'types/v3/V3Migrator'; -export declare function useContract(addressOrAddressMap: string | { - [chainId: number]: string; -} | undefined, ABI: any, withSignerIfPossible?: boolean): T | null; -export declare function useV2MigratorContract(): V3Migrator | null; -export declare function useTokenContract(tokenAddress?: string, withSignerIfPossible?: boolean): Erc20 | null; -export declare function useWETHContract(withSignerIfPossible?: boolean): Weth | null; -export declare function useERC721Contract(nftAddress?: string): Erc721 | null; -export declare function useERC1155Contract(nftAddress?: string): Erc1155 | null; -export declare function useArgentWalletDetectorContract(): ArgentWalletDetector | null; -export declare function useENSRegistrarContract(withSignerIfPossible?: boolean): EnsRegistrar | null; -export declare function useENSResolverContract(address: string | undefined, withSignerIfPossible?: boolean): EnsPublicResolver | null; -export declare function useBytes32TokenContract(tokenAddress?: string, withSignerIfPossible?: boolean): Contract | null; -export declare function useEIP2612Contract(tokenAddress?: string): Contract | null; -export declare function usePairContract(pairAddress?: string, withSignerIfPossible?: boolean): Contract | null; -export declare function useV2RouterContract(): Contract | null; -export declare function useInterfaceMulticall(): UniswapInterfaceMulticall; -export declare function useMerkleDistributorContract(): Contract | null; -export declare function useGovernanceV0Contract(): Contract | null; -export declare function useGovernanceV1Contract(): Contract | null; -export declare function useGovernanceBravoContract(): Contract | null; -export declare const useLatestGovernanceContract: typeof useGovernanceBravoContract; -export declare function useUniContract(): Contract | null; -export declare function useStakingContract(stakingAddress?: string, withSignerIfPossible?: boolean): Contract | null; -export declare function useV3NFTPositionManagerContract(withSignerIfPossible?: boolean): NonfungiblePositionManager | null; -export declare function useV3Quoter(): Quoter | null; -export declare function useTickLens(): TickLens | null; diff --git a/dist2/types/hooks/useCopyClipboard.d.ts b/dist2/types/hooks/useCopyClipboard.d.ts deleted file mode 100644 index 6360e3d4fd7..00000000000 --- a/dist2/types/hooks/useCopyClipboard.d.ts +++ /dev/null @@ -1 +0,0 @@ -export default function useCopyClipboard(timeout?: number): [boolean, (toCopy: string) => void]; diff --git a/dist2/types/hooks/useCurrentBlockTimestamp.d.ts b/dist2/types/hooks/useCurrentBlockTimestamp.d.ts deleted file mode 100644 index ba8a3393eea..00000000000 --- a/dist2/types/hooks/useCurrentBlockTimestamp.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { BigNumber } from '@ethersproject/bignumber'; -export default function useCurrentBlockTimestamp(): BigNumber | undefined; diff --git a/dist2/types/hooks/useDebounce.d.ts b/dist2/types/hooks/useDebounce.d.ts deleted file mode 100644 index 8db27679830..00000000000 --- a/dist2/types/hooks/useDebounce.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/** - * Debounces updates to a value. - * Non-primitives *must* wrap the value in useMemo, or the value will be updated due to referential inequality. - */ -export default function useDebounce(value: T, delay: number): T; diff --git a/dist2/types/hooks/useDebouncedChangeHandler.d.ts b/dist2/types/hooks/useDebouncedChangeHandler.d.ts deleted file mode 100644 index 83f498fe76b..00000000000 --- a/dist2/types/hooks/useDebouncedChangeHandler.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Easy way to debounce the handling of a rapidly changing value, e.g. a changing slider input - * @param value value that is rapidly changing - * @param onChange change handler that should receive the debounced updates to the value - * @param debouncedMs how long we should wait for changes to be applied - */ -export default function useDebouncedChangeHandler(value: T, onChange: (newValue: T) => void, debouncedMs?: number): [T, (value: T) => void]; diff --git a/dist2/types/hooks/useDerivedPositionInfo.d.ts b/dist2/types/hooks/useDerivedPositionInfo.d.ts deleted file mode 100644 index 59b925d76fc..00000000000 --- a/dist2/types/hooks/useDerivedPositionInfo.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Pool, Position } from '@uniswap/v3-sdk'; -import { PositionDetails } from 'types/position'; -export declare function useDerivedPositionInfo(positionDetails: PositionDetails | undefined): { - position: Position | undefined; - pool: Pool | undefined; -}; diff --git a/dist2/types/hooks/useENS.d.ts b/dist2/types/hooks/useENS.d.ts deleted file mode 100644 index 9b44be51bff..00000000000 --- a/dist2/types/hooks/useENS.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Given a name or address, does a lookup to resolve to an address and name - * @param nameOrAddress ENS name or address - */ -export default function useENS(nameOrAddress?: string | null): { - loading: boolean; - address: string | null; - name: string | null; -}; diff --git a/dist2/types/hooks/useENSAddress.d.ts b/dist2/types/hooks/useENSAddress.d.ts deleted file mode 100644 index cb222b71bad..00000000000 --- a/dist2/types/hooks/useENSAddress.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Does a lookup for an ENS name to find its address. - */ -export default function useENSAddress(ensName?: string | null): { - loading: boolean; - address: string | null; -}; diff --git a/dist2/types/hooks/useENSAvatar.d.ts b/dist2/types/hooks/useENSAvatar.d.ts deleted file mode 100644 index 3c4c6bcfa6b..00000000000 --- a/dist2/types/hooks/useENSAvatar.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -/** - * Returns the ENS avatar URI, if available. - * Spec: https://gist.github.com/Arachnid/9db60bd75277969ee1689c8742b75182. - */ -export default function useENSAvatar(address?: string, enforceOwnership?: boolean): { - avatar: string | null; - loading: boolean; -}; diff --git a/dist2/types/hooks/useENSContentHash.d.ts b/dist2/types/hooks/useENSContentHash.d.ts deleted file mode 100644 index 9170a7d7616..00000000000 --- a/dist2/types/hooks/useENSContentHash.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Does a lookup for an ENS name to find its contenthash. - */ -export default function useENSContentHash(ensName?: string | null): { - loading: boolean; - contenthash: string | null; -}; diff --git a/dist2/types/hooks/useENSName.d.ts b/dist2/types/hooks/useENSName.d.ts deleted file mode 100644 index ce5e919aea8..00000000000 --- a/dist2/types/hooks/useENSName.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -/** - * Does a reverse lookup for an address to find its ENS name. - * Note this is not the same as looking up an ENS name to find an address. - */ -export default function useENSName(address?: string): { - ENSName: string | null; - loading: boolean; -}; diff --git a/dist2/types/hooks/useERC20Permit.d.ts b/dist2/types/hooks/useERC20Permit.d.ts deleted file mode 100644 index 6d5d29d401a..00000000000 --- a/dist2/types/hooks/useERC20Permit.d.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { BigNumber } from '@ethersproject/bignumber'; -import { Trade } from '@uniswap/router-sdk'; -import { Currency, CurrencyAmount, Percent, TradeType } from '@uniswap/sdk-core'; -import { Trade as V2Trade } from '@uniswap/v2-sdk'; -import { Trade as V3Trade } from '@uniswap/v3-sdk'; -export declare enum PermitType { - AMOUNT = 1, - ALLOWED = 2 -} -export interface PermitInfo { - type: PermitType; - name: string; - version?: string; -} -export declare enum UseERC20PermitState { - NOT_APPLICABLE = 0, - LOADING = 1, - NOT_SIGNED = 2, - SIGNED = 3 -} -interface BaseSignatureData { - v: number; - r: string; - s: string; - deadline: number; - nonce: number; - owner: string; - spender: string; - chainId: number; - tokenAddress: string; - permitType: PermitType; -} -interface StandardSignatureData extends BaseSignatureData { - amount: string; -} -interface AllowedSignatureData extends BaseSignatureData { - allowed: true; -} -export declare type SignatureData = StandardSignatureData | AllowedSignatureData; -export declare function useERC20Permit(currencyAmount: CurrencyAmount | null | undefined, spender: string | null | undefined, transactionDeadline: BigNumber | undefined, overridePermitInfo: PermitInfo | undefined | null): { - signatureData: SignatureData | null; - state: UseERC20PermitState; - gatherPermitSignature: null | (() => Promise); -}; -export declare function useERC20PermitFromTrade(trade: V2Trade | V3Trade | Trade | undefined, allowedSlippage: Percent, transactionDeadline: BigNumber | undefined): { - signatureData: SignatureData | null; - state: UseERC20PermitState; - gatherPermitSignature: (() => Promise) | null; -}; -export {}; diff --git a/dist2/types/hooks/useFeeTierDistribution.d.ts b/dist2/types/hooks/useFeeTierDistribution.d.ts deleted file mode 100644 index 7c72b048e05..00000000000 --- a/dist2/types/hooks/useFeeTierDistribution.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Currency } from '@uniswap/sdk-core'; -import { FeeAmount } from '@uniswap/v3-sdk'; -interface FeeTierDistribution { - isLoading: boolean; - isError: boolean; - largestUsageFeeTier?: FeeAmount | undefined; - distributions?: Record; -} -export declare function useFeeTierDistribution(currencyA: Currency | undefined, currencyB: Currency | undefined): FeeTierDistribution; -export {}; diff --git a/dist2/types/hooks/useFetchListCallback.d.ts b/dist2/types/hooks/useFetchListCallback.d.ts deleted file mode 100644 index 594192d326b..00000000000 --- a/dist2/types/hooks/useFetchListCallback.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { TokenList } from '@uniswap/token-lists'; -export declare function useFetchListCallback(): (listUrl: string, sendDispatch?: boolean) => Promise; diff --git a/dist2/types/hooks/useGasPrice.d.ts b/dist2/types/hooks/useGasPrice.d.ts deleted file mode 100644 index 8e1c7d26094..00000000000 --- a/dist2/types/hooks/useGasPrice.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import JSBI from 'jsbi'; -/** - * Returns the price of 1 gas in WEI for the currently selected network using the chainlink fast gas price oracle - */ -export default function useGasPrice(): JSBI | undefined; diff --git a/dist2/types/hooks/useHttpLocations.d.ts b/dist2/types/hooks/useHttpLocations.d.ts deleted file mode 100644 index ab597735d38..00000000000 --- a/dist2/types/hooks/useHttpLocations.d.ts +++ /dev/null @@ -1 +0,0 @@ -export default function useHttpLocations(uri: string | undefined): string[]; diff --git a/dist2/types/hooks/useIsArgentWallet.d.ts b/dist2/types/hooks/useIsArgentWallet.d.ts deleted file mode 100644 index 9ad8e150d67..00000000000 --- a/dist2/types/hooks/useIsArgentWallet.d.ts +++ /dev/null @@ -1 +0,0 @@ -export default function useIsArgentWallet(): boolean; diff --git a/dist2/types/hooks/useIsSwapUnsupported.d.ts b/dist2/types/hooks/useIsSwapUnsupported.d.ts deleted file mode 100644 index f9d7a5b1763..00000000000 --- a/dist2/types/hooks/useIsSwapUnsupported.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Currency } from '@uniswap/sdk-core'; -/** - * Returns true if the input currency or output currency cannot be traded in the interface - * @param currencyIn the input currency to check - * @param currencyOut the output currency to check - */ -export declare function useIsSwapUnsupported(currencyIn?: Currency | null, currencyOut?: Currency | null): boolean; diff --git a/dist2/types/hooks/useIsTickAtLimit.d.ts b/dist2/types/hooks/useIsTickAtLimit.d.ts deleted file mode 100644 index 1067d8f7a01..00000000000 --- a/dist2/types/hooks/useIsTickAtLimit.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { FeeAmount } from '@uniswap/v3-sdk'; -export default function useIsTickAtLimit(feeAmount: FeeAmount | undefined, tickLower: number | undefined, tickUpper: number | undefined): { - LOWER: boolean | undefined; - UPPER: boolean | undefined; -}; diff --git a/dist2/types/hooks/useIsWindowVisible.d.ts b/dist2/types/hooks/useIsWindowVisible.d.ts deleted file mode 100644 index 9ea6082eea7..00000000000 --- a/dist2/types/hooks/useIsWindowVisible.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Returns whether the window is currently visible to the user. - */ -export default function useIsWindowVisible(): boolean; diff --git a/dist2/types/hooks/useLast.d.ts b/dist2/types/hooks/useLast.d.ts deleted file mode 100644 index ed525b31cdd..00000000000 --- a/dist2/types/hooks/useLast.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Returns the last value of type T that passes a filter function - * @param value changing value - * @param filterFn function that determines whether a given value should be considered for the last value - */ -export default function useLast(value: T | undefined | null, filterFn?: (value: T | null | undefined) => boolean): T | null | undefined; diff --git a/dist2/types/hooks/useLocationLinkProps.d.ts b/dist2/types/hooks/useLocationLinkProps.d.ts deleted file mode 100644 index 774efeed206..00000000000 --- a/dist2/types/hooks/useLocationLinkProps.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { SupportedLocale } from 'constants/locales'; -import { LocationDescriptor } from 'history'; -export declare function useLocationLinkProps(locale: SupportedLocale | null): { - to?: LocationDescriptor; - onClick?: () => void; -}; diff --git a/dist2/types/hooks/useMachineTime.d.ts b/dist2/types/hooks/useMachineTime.d.ts deleted file mode 100644 index 251b86134ec..00000000000 --- a/dist2/types/hooks/useMachineTime.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -declare const useMachineTimeMs: (updateInterval: number) => number; -export default useMachineTimeMs; diff --git a/dist2/types/hooks/useMonitoringEventCallback.d.ts b/dist2/types/hooks/useMonitoringEventCallback.d.ts deleted file mode 100644 index d0caae9ba0a..00000000000 --- a/dist2/types/hooks/useMonitoringEventCallback.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { TransactionResponse } from '@ethersproject/providers'; -import { TransactionInfo } from 'state/transactions/actions'; -export declare function useTransactionMonitoringEventCallback(): (info: TransactionInfo, transactionResponse: TransactionResponse) => void; -export declare function useWalletConnectMonitoringEventCallback(): (walletAddress: any) => void; diff --git a/dist2/types/hooks/useOnClickOutside.d.ts b/dist2/types/hooks/useOnClickOutside.d.ts deleted file mode 100644 index 371b4ca4a62..00000000000 --- a/dist2/types/hooks/useOnClickOutside.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { RefObject } from 'react'; -export declare function useOnClickOutside(node: RefObject, handler: undefined | (() => void)): void; diff --git a/dist2/types/hooks/useParsedQueryString.d.ts b/dist2/types/hooks/useParsedQueryString.d.ts deleted file mode 100644 index dbd75ccdd0a..00000000000 --- a/dist2/types/hooks/useParsedQueryString.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { ParsedQs } from 'qs'; -export declare function parsedQueryString(search?: string): ParsedQs; -export default function useParsedQueryString(): ParsedQs; diff --git a/dist2/types/hooks/usePoolTickData.d.ts b/dist2/types/hooks/usePoolTickData.d.ts deleted file mode 100644 index cb5e3d41704..00000000000 --- a/dist2/types/hooks/usePoolTickData.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Currency } from '@uniswap/sdk-core'; -import { FeeAmount } from '@uniswap/v3-sdk'; -import JSBI from 'jsbi'; -export interface TickData { - tick: number; - liquidityNet: JSBI; - liquidityGross: JSBI; -} -export interface TickProcessed { - tick: number; - liquidityActive: JSBI; - liquidityNet: JSBI; - price0: string; -} -export declare function usePoolActiveLiquidity(currencyA: Currency | undefined, currencyB: Currency | undefined, feeAmount: FeeAmount | undefined): { - isLoading: boolean; - isUninitialized: boolean; - isError: boolean; - error: any; - activeTick: number | undefined; - data: TickProcessed[] | undefined; -}; diff --git a/dist2/types/hooks/usePools.d.ts b/dist2/types/hooks/usePools.d.ts deleted file mode 100644 index 0ef32d42f56..00000000000 --- a/dist2/types/hooks/usePools.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Currency } from '@uniswap/sdk-core'; -import { FeeAmount, Pool } from '@uniswap/v3-sdk'; -export declare enum PoolState { - LOADING = 0, - NOT_EXISTS = 1, - EXISTS = 2, - INVALID = 3 -} -export declare function usePools(poolKeys: [Currency | undefined, Currency | undefined, FeeAmount | undefined][]): [PoolState, Pool | null][]; -export declare function usePool(currencyA: Currency | undefined, currencyB: Currency | undefined, feeAmount: FeeAmount | undefined): [PoolState, Pool | null]; diff --git a/dist2/types/hooks/usePositionTokenURI.d.ts b/dist2/types/hooks/usePositionTokenURI.d.ts deleted file mode 100644 index 21890bdf1b3..00000000000 --- a/dist2/types/hooks/usePositionTokenURI.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { BigNumber } from '@ethersproject/bignumber'; -import JSBI from 'jsbi'; -declare type TokenId = number | JSBI | BigNumber; -declare type UsePositionTokenURIResult = { - valid: true; - loading: false; - result: { - name: string; - description: string; - image: string; - }; -} | { - valid: false; - loading: false; -} | { - valid: true; - loading: true; -}; -export declare function usePositionTokenURI(tokenId: TokenId | undefined): UsePositionTokenURIResult; -export {}; diff --git a/dist2/types/hooks/usePrevious.d.ts b/dist2/types/hooks/usePrevious.d.ts deleted file mode 100644 index ae7baab6c92..00000000000 --- a/dist2/types/hooks/usePrevious.d.ts +++ /dev/null @@ -1 +0,0 @@ -export default function usePrevious(value: T): T | undefined; diff --git a/dist2/types/hooks/useSocksBalance.d.ts b/dist2/types/hooks/useSocksBalance.d.ts deleted file mode 100644 index cc1d96bd990..00000000000 --- a/dist2/types/hooks/useSocksBalance.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare function useHasSocks(): boolean | undefined; diff --git a/dist2/types/hooks/useSwapCallArguments.d.ts b/dist2/types/hooks/useSwapCallArguments.d.ts deleted file mode 100644 index a291cc4c261..00000000000 --- a/dist2/types/hooks/useSwapCallArguments.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { BigNumber } from '@ethersproject/bignumber'; -import { Trade } from '@uniswap/router-sdk'; -import { Currency, Percent, TradeType } from '@uniswap/sdk-core'; -import { Trade as V2Trade } from '@uniswap/v2-sdk'; -import { Trade as V3Trade } from '@uniswap/v3-sdk'; -import { SignatureData } from './useERC20Permit'; -export declare type AnyTrade = V2Trade | V3Trade | Trade; -interface SwapCall { - address: string; - calldata: string; - value: string; -} -/** - * Returns the swap calls that can be used to make the trade - * @param trade trade to execute - * @param allowedSlippage user allowed slippage - * @param recipientAddressOrName the ENS name or address of the recipient of the swap output - * @param signatureData the signature data of the permit of the input token amount, if available - */ -export declare function useSwapCallArguments(trade: AnyTrade | undefined, allowedSlippage: Percent, recipientAddressOrName: string | null | undefined, signatureData: SignatureData | null | undefined, deadline: BigNumber | undefined): SwapCall[]; -export {}; diff --git a/dist2/types/hooks/useSwapCallback.d.ts b/dist2/types/hooks/useSwapCallback.d.ts deleted file mode 100644 index f5907287065..00000000000 --- a/dist2/types/hooks/useSwapCallback.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Percent } from '@uniswap/sdk-core'; -import { SwapCallbackState } from 'lib/hooks/swap/useSwapCallback'; -import { ReactNode } from 'react'; -import { SignatureData } from './useERC20Permit'; -import { AnyTrade } from './useSwapCallArguments'; -export declare function useSwapCallback(trade: AnyTrade | undefined, // trade to execute, required -allowedSlippage: Percent, // in bips -recipientAddressOrName: string | null, // the ENS name or address of the recipient of the trade, or null if swap should be returned to sender -signatureData: SignatureData | undefined | null): { - state: SwapCallbackState; - callback: null | (() => Promise); - error: ReactNode | null; -}; diff --git a/dist2/types/hooks/useTheme.d.ts b/dist2/types/hooks/useTheme.d.ts deleted file mode 100644 index 5702d34f93f..00000000000 --- a/dist2/types/hooks/useTheme.d.ts +++ /dev/null @@ -1 +0,0 @@ -export default function useTheme(): import("styled-components").DefaultTheme; diff --git a/dist2/types/hooks/useToggle.d.ts b/dist2/types/hooks/useToggle.d.ts deleted file mode 100644 index e3cf108e96c..00000000000 --- a/dist2/types/hooks/useToggle.d.ts +++ /dev/null @@ -1 +0,0 @@ -export default function useToggle(initialState?: boolean): [boolean, () => void]; diff --git a/dist2/types/hooks/useTokenAllowance.d.ts b/dist2/types/hooks/useTokenAllowance.d.ts deleted file mode 100644 index 38400b803df..00000000000 --- a/dist2/types/hooks/useTokenAllowance.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { CurrencyAmount, Token } from '@uniswap/sdk-core'; -export declare function useTokenAllowance(token?: Token, owner?: string, spender?: string): CurrencyAmount | undefined; diff --git a/dist2/types/hooks/useTokenInfoFromActiveList.d.ts b/dist2/types/hooks/useTokenInfoFromActiveList.d.ts deleted file mode 100644 index b23981566ae..00000000000 --- a/dist2/types/hooks/useTokenInfoFromActiveList.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Currency } from '@uniswap/sdk-core'; -/** - * Returns a WrappedTokenInfo from the active token lists when possible, - * or the passed token otherwise. */ -export declare function useTokenInfoFromActiveList(currency: Currency): import("@uniswap/sdk-core").Token | import("@uniswap/sdk-core").NativeCurrency | import("../state/lists/wrappedTokenInfo").WrappedTokenInfo | undefined; diff --git a/dist2/types/hooks/useTotalSupply.d.ts b/dist2/types/hooks/useTotalSupply.d.ts deleted file mode 100644 index 7853f19e996..00000000000 --- a/dist2/types/hooks/useTotalSupply.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { Currency, CurrencyAmount, Token } from '@uniswap/sdk-core'; -export declare function useTotalSupply(token?: Currency): CurrencyAmount | undefined; diff --git a/dist2/types/hooks/useTransactionDeadline.d.ts b/dist2/types/hooks/useTransactionDeadline.d.ts deleted file mode 100644 index 585b553234b..00000000000 --- a/dist2/types/hooks/useTransactionDeadline.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { BigNumber } from '@ethersproject/bignumber'; -export default function useTransactionDeadline(): BigNumber | undefined; diff --git a/dist2/types/hooks/useUSDCPrice.d.ts b/dist2/types/hooks/useUSDCPrice.d.ts deleted file mode 100644 index 1db8e767ed2..00000000000 --- a/dist2/types/hooks/useUSDCPrice.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Currency, CurrencyAmount, Price, Token } from '@uniswap/sdk-core'; -export declare const STABLECOIN_AMOUNT_OUT: { - [chainId: number]: CurrencyAmount; -}; -/** - * Returns the price in USDC of the input currency - * @param currency currency to compute the USDC price of - */ -export default function useUSDCPrice(currency?: Currency): Price | undefined; -export declare function useUSDCValue(currencyAmount: CurrencyAmount | undefined | null): CurrencyAmount | null; -/** - * - * @param fiatValue string representation of a USD amount - * @returns CurrencyAmount where currency is stablecoin on active chain - */ -export declare function useStablecoinAmountFromFiatValue(fiatValue: string | null | undefined): CurrencyAmount | undefined; diff --git a/dist2/types/hooks/useV2LiquidityTokenPermit.d.ts b/dist2/types/hooks/useV2LiquidityTokenPermit.d.ts deleted file mode 100644 index 431d402adb0..00000000000 --- a/dist2/types/hooks/useV2LiquidityTokenPermit.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { CurrencyAmount, Token } from '@uniswap/sdk-core'; -export declare function useV2LiquidityTokenPermit(liquidityAmount: CurrencyAmount | null | undefined, spender: string | null | undefined): { - signatureData: import("./useERC20Permit").SignatureData | null; - state: import("./useERC20Permit").UseERC20PermitState; - gatherPermitSignature: (() => Promise) | null; -}; diff --git a/dist2/types/hooks/useV2Pairs.d.ts b/dist2/types/hooks/useV2Pairs.d.ts deleted file mode 100644 index cf17170d341..00000000000 --- a/dist2/types/hooks/useV2Pairs.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Currency } from '@uniswap/sdk-core'; -import { Pair } from '@uniswap/v2-sdk'; -export declare enum PairState { - LOADING = 0, - NOT_EXISTS = 1, - EXISTS = 2, - INVALID = 3 -} -export declare function useV2Pairs(currencies: [Currency | undefined, Currency | undefined][]): [PairState, Pair | null][]; -export declare function useV2Pair(tokenA?: Currency, tokenB?: Currency): [PairState, Pair | null]; diff --git a/dist2/types/hooks/useV3PositionFees.d.ts b/dist2/types/hooks/useV3PositionFees.d.ts deleted file mode 100644 index 1e40e2c2853..00000000000 --- a/dist2/types/hooks/useV3PositionFees.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { BigNumber } from '@ethersproject/bignumber'; -import { Currency, CurrencyAmount } from '@uniswap/sdk-core'; -import { Pool } from '@uniswap/v3-sdk'; -export declare function useV3PositionFees(pool?: Pool, tokenId?: BigNumber, asWETH?: boolean): [CurrencyAmount, CurrencyAmount] | [undefined, undefined]; diff --git a/dist2/types/hooks/useV3Positions.d.ts b/dist2/types/hooks/useV3Positions.d.ts deleted file mode 100644 index e8ddc666368..00000000000 --- a/dist2/types/hooks/useV3Positions.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { BigNumber } from '@ethersproject/bignumber'; -import { PositionDetails } from 'types/position'; -interface UseV3PositionsResults { - loading: boolean; - positions: PositionDetails[] | undefined; -} -interface UseV3PositionResults { - loading: boolean; - position: PositionDetails | undefined; -} -export declare function useV3PositionFromTokenId(tokenId: BigNumber | undefined): UseV3PositionResults; -export declare function useV3Positions(account: string | null | undefined): UseV3PositionsResults; -export {}; diff --git a/dist2/types/hooks/useV3SwapPools.d.ts b/dist2/types/hooks/useV3SwapPools.d.ts deleted file mode 100644 index dc79b76bce0..00000000000 --- a/dist2/types/hooks/useV3SwapPools.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Currency } from '@uniswap/sdk-core'; -import { Pool } from '@uniswap/v3-sdk'; -/** - * Returns all the existing pools that should be considered for swapping between an input currency and an output currency - * @param currencyIn the input currency - * @param currencyOut the output currency - */ -export declare function useV3SwapPools(currencyIn?: Currency, currencyOut?: Currency): { - pools: Pool[]; - loading: boolean; -}; diff --git a/dist2/types/hooks/useWindowSize.d.ts b/dist2/types/hooks/useWindowSize.d.ts deleted file mode 100644 index 55596ab3ccd..00000000000 --- a/dist2/types/hooks/useWindowSize.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -export declare function useWindowSize(): { - width: number | undefined; - height: number | undefined; -}; diff --git a/dist2/types/hooks/useWrapCallback.d.ts b/dist2/types/hooks/useWrapCallback.d.ts deleted file mode 100644 index 27e22fc0ed0..00000000000 --- a/dist2/types/hooks/useWrapCallback.d.ts +++ /dev/null @@ -1,29 +0,0 @@ -/// -import { Currency } from '@uniswap/sdk-core'; -export declare enum WrapType { - NOT_APPLICABLE = 0, - WRAP = 1, - UNWRAP = 2 -} -declare enum WrapInputError { - NO_ERROR = 0, - ENTER_NATIVE_AMOUNT = 1, - ENTER_WRAPPED_AMOUNT = 2, - INSUFFICIENT_NATIVE_BALANCE = 3, - INSUFFICIENT_WRAPPED_BALANCE = 4 -} -export declare function WrapErrorText({ wrapInputError }: { - wrapInputError: WrapInputError; -}): JSX.Element | null; -/** - * Given the selected input and output currency, return a wrap callback - * @param inputCurrency the selected input currency - * @param outputCurrency the selected output currency - * @param typedValue the user input value - */ -export default function useWrapCallback(inputCurrency: Currency | undefined | null, outputCurrency: Currency | undefined | null, typedValue: string | undefined): { - wrapType: WrapType; - execute?: undefined | (() => Promise); - inputError?: WrapInputError; -}; -export {}; diff --git a/dist2/types/hooks/web3.d.ts b/dist2/types/hooks/web3.d.ts deleted file mode 100644 index b389050b736..00000000000 --- a/dist2/types/hooks/web3.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -export declare function useEagerConnect(): boolean; -/** - * Use for network and injected - logs user in - * and out after checking what network theyre on - */ -export declare function useInactiveListener(suppress?: boolean): void; diff --git a/dist2/types/i18n.d.ts b/dist2/types/i18n.d.ts deleted file mode 100644 index 22fd671b977..00000000000 --- a/dist2/types/i18n.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { ReactNode } from 'react'; -export declare function LanguageProvider({ children }: { - children: ReactNode; -}): JSX.Element; diff --git a/dist2/types/index.d.ts b/dist2/types/index.d.ts deleted file mode 100644 index 9f6a2850ee7..00000000000 --- a/dist2/types/index.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import '@reach/dialog/styles.css'; -import 'inter-ui'; -import 'polyfills'; -import 'components/analytics'; -export { INFURA_NETWORK_URLS } from 'constants/chainInfo'; diff --git a/dist2/types/lib/assets/svg/Check.d.ts b/dist2/types/lib/assets/svg/Check.d.ts deleted file mode 100644 index af0693b2c0f..00000000000 --- a/dist2/types/lib/assets/svg/Check.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import * as React from 'react'; -declare function SvgCheck(props: React.SVGProps): JSX.Element; -export default SvgCheck; diff --git a/dist2/types/lib/assets/svg/Expando.d.ts b/dist2/types/lib/assets/svg/Expando.d.ts deleted file mode 100644 index bb4b29d481c..00000000000 --- a/dist2/types/lib/assets/svg/Expando.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import * as React from 'react'; -declare function SvgExpando(props: React.SVGProps): JSX.Element; -export default SvgExpando; diff --git a/dist2/types/lib/assets/svg/Logo.d.ts b/dist2/types/lib/assets/svg/Logo.d.ts deleted file mode 100644 index 8e2c1a71e66..00000000000 --- a/dist2/types/lib/assets/svg/Logo.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import * as React from 'react'; -declare function SvgLogo(props: React.SVGProps): JSX.Element; -export default SvgLogo; diff --git a/dist2/types/lib/assets/svg/Spinner.d.ts b/dist2/types/lib/assets/svg/Spinner.d.ts deleted file mode 100644 index 4e50904cb2a..00000000000 --- a/dist2/types/lib/assets/svg/Spinner.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import * as React from 'react'; -declare function SvgSpinner(props: React.SVGProps): JSX.Element; -export default SvgSpinner; diff --git a/dist2/types/lib/components/ActionButton.d.ts b/dist2/types/lib/components/ActionButton.d.ts deleted file mode 100644 index 0021320908c..00000000000 --- a/dist2/types/lib/components/ActionButton.d.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Icon } from 'lib/icons'; -import { Color } from 'lib/theme'; -import { ReactNode } from 'react'; -export declare const Overlay: import("styled-components").StyledComponent<"div", import("../theme/theme").ComputedTheme, { - color?: keyof import("lib/theme").Colors | undefined; - align?: string | undefined; - justify?: string | undefined; - pad?: number | undefined; - gap?: number | undefined; - flex?: true | undefined; - grow?: true | "first" | "last" | undefined; - children?: ReactNode; - theme: import("lib/theme").Theme; -} & { - update?: boolean | undefined; -}, never>; -export interface ActionButtonProps { - color?: Color; - disabled?: boolean; - update?: { - message: ReactNode; - action: ReactNode; - icon?: Icon; - }; - onClick: () => void; - onUpdate?: () => void; - children: ReactNode; -} -export default function ActionButton({ color, disabled, update, onClick, onUpdate, children, }: ActionButtonProps): JSX.Element; diff --git a/dist2/types/lib/components/Button.d.ts b/dist2/types/lib/components/Button.d.ts deleted file mode 100644 index a8837f6ba58..00000000000 --- a/dist2/types/lib/components/Button.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Icon } from 'lib/icons'; -import { ComponentProps } from 'react'; -export declare const BaseButton: import("styled-components").StyledComponent<"button", import("../theme/theme").ComputedTheme, {}, never>; -declare const _default: import("styled-components").StyledComponent<"button", import("../theme/theme").ComputedTheme, { - color?: keyof import("lib/theme").Colors | undefined; -}, never>; -export default _default; -export declare const TextButton: import("styled-components").StyledComponent<"button", import("../theme/theme").ComputedTheme, { - color?: keyof import("lib/theme").Colors | undefined; -}, never>; -interface IconButtonProps { - icon: Icon; - iconProps?: ComponentProps; -} -export declare function IconButton({ icon: Icon, iconProps, ...props }: IconButtonProps & ComponentProps): JSX.Element; diff --git a/dist2/types/lib/components/Column.d.ts b/dist2/types/lib/components/Column.d.ts deleted file mode 100644 index 597b77b7605..00000000000 --- a/dist2/types/lib/components/Column.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Theme } from 'lib/theme'; -declare const Column: import("styled-components").StyledComponent<"div", import("../theme/theme").ComputedTheme, { - align?: string | undefined; - color?: keyof import("lib/theme").Colors | undefined; - justify?: string | undefined; - gap?: number | undefined; - padded?: true | undefined; - flex?: true | undefined; - grow?: true | undefined; - theme: Theme; - css?: import("styled-components").FlattenInterpolation> | undefined; -}, never>; -export default Column; diff --git a/dist2/types/lib/components/Dialog.d.ts b/dist2/types/lib/components/Dialog.d.ts deleted file mode 100644 index cdd6ba93aac..00000000000 --- a/dist2/types/lib/components/Dialog.d.ts +++ /dev/null @@ -1,29 +0,0 @@ -import 'wicg-inert'; -import { Color } from 'lib/theme'; -import { ReactElement, ReactNode } from 'react'; -declare global { - interface HTMLElement { - inert?: boolean; - } -} -interface ProviderProps { - value: HTMLElement | null; - children: ReactNode; -} -export declare function Provider({ value, children }: ProviderProps): JSX.Element; -interface HeaderProps { - title?: ReactElement; - ruled?: boolean; - children?: ReactNode; -} -export declare function Header({ title, children, ruled }: HeaderProps): JSX.Element; -export declare const Modal: import("styled-components").StyledComponent<"div", import("../theme/theme").ComputedTheme, { - color: Color; -}, never>; -interface DialogProps { - color: Color; - children: ReactNode; - onClose?: () => void; -} -export default function Dialog({ color, children, onClose }: DialogProps): import("react").ReactPortal | null; -export {}; diff --git a/dist2/types/lib/components/Error/ErrorBoundary.d.ts b/dist2/types/lib/components/Error/ErrorBoundary.d.ts deleted file mode 100644 index e510cbe9d95..00000000000 --- a/dist2/types/lib/components/Error/ErrorBoundary.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import React, { ErrorInfo } from 'react'; -export declare type ErrorHandler = (error: Error, info: ErrorInfo) => void; -interface ErrorBoundaryProps { - onError?: ErrorHandler; -} -declare type ErrorBoundaryState = { - error: Error | null; -}; -export default class ErrorBoundary extends React.Component { - constructor(props: ErrorBoundaryProps); - static getDerivedStateFromError(error: Error): { - error: Error; - }; - componentDidCatch(error: Error, errorInfo: ErrorInfo): void; - render(): React.ReactNode; -} -export {}; diff --git a/dist2/types/lib/components/Error/ErrorDialog.d.ts b/dist2/types/lib/components/Error/ErrorDialog.d.ts deleted file mode 100644 index b03289584f2..00000000000 --- a/dist2/types/lib/components/Error/ErrorDialog.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Icon } from 'lib/icons'; -import { Color } from 'lib/theme'; -import { ReactNode } from 'react'; -interface StatusHeaderProps { - icon: Icon; - iconColor?: Color; - iconSize?: number; - children: ReactNode; -} -export declare function StatusHeader({ icon: Icon, iconColor, iconSize, children }: StatusHeaderProps): JSX.Element; -interface ErrorDialogProps { - header?: ReactNode; - error: Error; - action: ReactNode; - onAction: () => void; -} -export default function ErrorDialog({ header, error, action, onAction }: ErrorDialogProps): JSX.Element; -export {}; diff --git a/dist2/types/lib/components/Error/ErrorGenerator.d.ts b/dist2/types/lib/components/Error/ErrorGenerator.d.ts deleted file mode 100644 index 47dd9838787..00000000000 --- a/dist2/types/lib/components/Error/ErrorGenerator.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { SwapWidgetProps } from 'lib/index'; -export default function ErrorGenerator(swapWidgetProps: SwapWidgetProps): null; diff --git a/dist2/types/lib/components/Error/WidgetsPropsValidator.d.ts b/dist2/types/lib/components/Error/WidgetsPropsValidator.d.ts deleted file mode 100644 index a4e08e824b5..00000000000 --- a/dist2/types/lib/components/Error/WidgetsPropsValidator.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { WidgetProps } from 'lib/components/Widget'; -import { PropsWithChildren } from 'react'; -export default function WidgetsPropsValidator(props: PropsWithChildren): JSX.Element; diff --git a/dist2/types/lib/components/Header.d.ts b/dist2/types/lib/components/Header.d.ts deleted file mode 100644 index 20e0acd5972..00000000000 --- a/dist2/types/lib/components/Header.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { ReactElement, ReactNode } from 'react'; -export interface HeaderProps { - title?: ReactElement; - logo?: boolean; - children: ReactNode; -} -export default function Header({ title, logo, children }: HeaderProps): JSX.Element; diff --git a/dist2/types/lib/components/Input.d.ts b/dist2/types/lib/components/Input.d.ts deleted file mode 100644 index fcdf5b0d5a4..00000000000 --- a/dist2/types/lib/components/Input.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { HTMLProps } from 'react'; -declare const Input: import("styled-components").StyledComponent<"input", import("../theme/theme").ComputedTheme, {}, never>; -export default Input; -interface StringInputProps extends Omit, 'onChange' | 'as' | 'value'> { - value: string; - onChange: (input: string) => void; -} -export declare const StringInput: import("react").ForwardRefExoticComponent & import("react").RefAttributes>; -interface NumericInputProps extends Omit, 'onChange' | 'as' | 'value'> { - value: string; - onChange: (input: string) => void; -} -export declare const IntegerInput: import("react").ForwardRefExoticComponent & import("react").RefAttributes>; -export declare const DecimalInput: import("react").ForwardRefExoticComponent & import("react").RefAttributes>; -export declare const inputCss: import("styled-components").FlattenInterpolation>; diff --git a/dist2/types/lib/components/Popover.d.ts b/dist2/types/lib/components/Popover.d.ts deleted file mode 100644 index 2bf711591c4..00000000000 --- a/dist2/types/lib/components/Popover.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Placement } from '@popperjs/core'; -import React from 'react'; -export declare const BoundaryProvider: React.Provider; -export interface PopoverProps { - content: React.ReactNode; - show: boolean; - children: React.ReactNode; - placement: Placement; - contained?: true; -} -export default function Popover({ content, show, children, placement, contained }: PopoverProps): JSX.Element; diff --git a/dist2/types/lib/components/RecentTransactionsDialog.d.ts b/dist2/types/lib/components/RecentTransactionsDialog.d.ts deleted file mode 100644 index 1a49021739e..00000000000 --- a/dist2/types/lib/components/RecentTransactionsDialog.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -/// -export declare enum TransactionStatus { - SUCCESS = 0, - ERROR = 1, - PENDING = 2 -} -export default function RecentTransactionsDialog(): JSX.Element; diff --git a/dist2/types/lib/components/Row.d.ts b/dist2/types/lib/components/Row.d.ts deleted file mode 100644 index 8fd1a815ce1..00000000000 --- a/dist2/types/lib/components/Row.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Theme } from 'lib/theme'; -import { ReactNode } from 'react'; -declare const Row: import("styled-components").StyledComponent<"div", import("../theme/theme").ComputedTheme, { - color?: keyof import("lib/theme").Colors | undefined; - align?: string | undefined; - justify?: string | undefined; - pad?: number | undefined; - gap?: number | undefined; - flex?: true | undefined; - grow?: true | "first" | "last" | undefined; - children?: ReactNode; - theme: Theme; -}, never>; -export default Row; diff --git a/dist2/types/lib/components/Rule.d.ts b/dist2/types/lib/components/Rule.d.ts deleted file mode 100644 index 8f3ca133139..00000000000 --- a/dist2/types/lib/components/Rule.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare const Rule: import("styled-components").StyledComponent<"hr", import("../theme/theme").ComputedTheme, { - padded?: true | undefined; - scrollingEdge?: "bottom" | "top" | undefined; -}, never>; -export default Rule; diff --git a/dist2/types/lib/components/Swap/Input.d.ts b/dist2/types/lib/components/Swap/Input.d.ts deleted file mode 100644 index 73f23b977bf..00000000000 --- a/dist2/types/lib/components/Swap/Input.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -/// -interface InputProps { - disabled?: boolean; -} -export default function Input({ disabled }: InputProps): JSX.Element; -export {}; diff --git a/dist2/types/lib/components/Swap/Output.d.ts b/dist2/types/lib/components/Swap/Output.d.ts deleted file mode 100644 index b581f62bb64..00000000000 --- a/dist2/types/lib/components/Swap/Output.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { ReactNode } from 'react'; -export declare const colorAtom: import("jotai").Atom & { - write: (get: { - (atom: import("jotai").Atom>): Value; - (atom: import("jotai").Atom>): Value_1; - (atom: import("jotai").Atom): Value_2 extends Promise ? V : Value_2; - } & { - (atom: import("jotai").Atom>, unstable_promise: true): Value_3 | Promise; - (atom: import("jotai").Atom>, unstable_promise: true): Value_4 | Promise; - }, set: { - >(atom: import("jotai").WritableAtom): Result; - >(atom: import("jotai").WritableAtom, update: Update): Result_1; - }, update: string | ((prev: string | undefined) => string | undefined) | undefined) => void; - onMount?: ( string | undefined) | undefined) => void>(setAtom: S) => void | (() => void)) | undefined; -} & { - init: string | undefined; -}; -interface OutputProps { - disabled?: boolean; - children: ReactNode; -} -export default function Output({ disabled, children }: OutputProps): JSX.Element; -export {}; diff --git a/dist2/types/lib/components/Swap/ReverseButton.d.ts b/dist2/types/lib/components/Swap/ReverseButton.d.ts deleted file mode 100644 index 16a800a371d..00000000000 --- a/dist2/types/lib/components/Swap/ReverseButton.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -/// -export default function ReverseButton({ disabled }: { - disabled?: boolean; -}): JSX.Element; diff --git a/dist2/types/lib/components/Swap/Settings.fixture.d.ts b/dist2/types/lib/components/Swap/Settings.fixture.d.ts deleted file mode 100644 index 5c4fa1761e2..00000000000 --- a/dist2/types/lib/components/Swap/Settings.fixture.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -declare const _default: JSX.Element; -export default _default; diff --git a/dist2/types/lib/components/Swap/Settings/MaxSlippageSelect.d.ts b/dist2/types/lib/components/Swap/Settings/MaxSlippageSelect.d.ts deleted file mode 100644 index 10f222bc381..00000000000 --- a/dist2/types/lib/components/Swap/Settings/MaxSlippageSelect.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -export default function MaxSlippageSelect(): JSX.Element; diff --git a/dist2/types/lib/components/Swap/Settings/MockToggle.d.ts b/dist2/types/lib/components/Swap/Settings/MockToggle.d.ts deleted file mode 100644 index d578da35c70..00000000000 --- a/dist2/types/lib/components/Swap/Settings/MockToggle.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -export default function MockToggle(): JSX.Element; diff --git a/dist2/types/lib/components/Swap/Settings/TransactionTtlInput.d.ts b/dist2/types/lib/components/Swap/Settings/TransactionTtlInput.d.ts deleted file mode 100644 index 2f71b9e83ad..00000000000 --- a/dist2/types/lib/components/Swap/Settings/TransactionTtlInput.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -export default function TransactionTtlInput(): JSX.Element; diff --git a/dist2/types/lib/components/Swap/Settings/components.d.ts b/dist2/types/lib/components/Swap/Settings/components.d.ts deleted file mode 100644 index 2f4c9e9a483..00000000000 --- a/dist2/types/lib/components/Swap/Settings/components.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { ReactNode } from 'react'; -import { AnyStyledComponent } from 'styled-components'; -export declare const optionCss: (selected: boolean) => import("styled-components").FlattenInterpolation>; -export declare function value(Value: AnyStyledComponent): import("styled-components").StyledComponent; -interface LabelProps { - name: ReactNode; - tooltip?: ReactNode; -} -export declare function Label({ name, tooltip }: LabelProps): JSX.Element; -export {}; diff --git a/dist2/types/lib/components/Swap/Settings/index.d.ts b/dist2/types/lib/components/Swap/Settings/index.d.ts deleted file mode 100644 index e59995ad5c9..00000000000 --- a/dist2/types/lib/components/Swap/Settings/index.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/// -export declare function SettingsDialog(): JSX.Element; -export default function Settings({ disabled }: { - disabled?: boolean; -}): JSX.Element; diff --git a/dist2/types/lib/components/Swap/Status.fixture.d.ts b/dist2/types/lib/components/Swap/Status.fixture.d.ts deleted file mode 100644 index 5c4fa1761e2..00000000000 --- a/dist2/types/lib/components/Swap/Status.fixture.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -declare const _default: JSX.Element; -export default _default; diff --git a/dist2/types/lib/components/Swap/Status/StatusDialog.d.ts b/dist2/types/lib/components/Swap/Status/StatusDialog.d.ts deleted file mode 100644 index 2bdd692a0f7..00000000000 --- a/dist2/types/lib/components/Swap/Status/StatusDialog.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -/// -import { SwapTransactionInfo, Transaction } from 'lib/state/transactions'; -interface TransactionStatusProps { - tx: Transaction; - onClose: () => void; -} -export default function TransactionStatusDialog({ tx, onClose }: TransactionStatusProps): JSX.Element; -export {}; diff --git a/dist2/types/lib/components/Swap/Status/index.d.ts b/dist2/types/lib/components/Swap/Status/index.d.ts deleted file mode 100644 index 03a0f00c93c..00000000000 --- a/dist2/types/lib/components/Swap/Status/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as StatusDialog } from './StatusDialog'; diff --git a/dist2/types/lib/components/Swap/Summary.fixture.d.ts b/dist2/types/lib/components/Swap/Summary.fixture.d.ts deleted file mode 100644 index 5c4fa1761e2..00000000000 --- a/dist2/types/lib/components/Swap/Summary.fixture.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -declare const _default: JSX.Element; -export default _default; diff --git a/dist2/types/lib/components/Swap/Summary/Details.d.ts b/dist2/types/lib/components/Swap/Summary/Details.d.ts deleted file mode 100644 index 06763586812..00000000000 --- a/dist2/types/lib/components/Swap/Summary/Details.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -/// -import { Trade } from '@uniswap/router-sdk'; -import { Currency, Percent, TradeType } from '@uniswap/sdk-core'; -interface DetailsProps { - trade: Trade; - allowedSlippage: Percent; -} -export default function Details({ trade, allowedSlippage }: DetailsProps): JSX.Element; -export {}; diff --git a/dist2/types/lib/components/Swap/Summary/Summary.d.ts b/dist2/types/lib/components/Swap/Summary/Summary.d.ts deleted file mode 100644 index f5684507d53..00000000000 --- a/dist2/types/lib/components/Swap/Summary/Summary.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -/// -import { Currency, CurrencyAmount } from '@uniswap/sdk-core'; -interface SummaryProps { - input: CurrencyAmount; - output: CurrencyAmount; - usdc?: boolean; -} -export default function Summary({ input, output, usdc }: SummaryProps): JSX.Element; -export {}; diff --git a/dist2/types/lib/components/Swap/Summary/index.d.ts b/dist2/types/lib/components/Swap/Summary/index.d.ts deleted file mode 100644 index 692682be9de..00000000000 --- a/dist2/types/lib/components/Swap/Summary/index.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -/// -import { Trade } from '@uniswap/router-sdk'; -import { Currency, Percent, TradeType } from '@uniswap/sdk-core'; -import Summary from './Summary'; -export default Summary; -interface SummaryDialogProps { - trade: Trade; - allowedSlippage: Percent; - onConfirm: () => void; -} -export declare function SummaryDialog({ trade, allowedSlippage, onConfirm }: SummaryDialogProps): JSX.Element | null; diff --git a/dist2/types/lib/components/Swap/Swap.fixture.d.ts b/dist2/types/lib/components/Swap/Swap.fixture.d.ts deleted file mode 100644 index 5c4fa1761e2..00000000000 --- a/dist2/types/lib/components/Swap/Swap.fixture.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -declare const _default: JSX.Element; -export default _default; diff --git a/dist2/types/lib/components/Swap/SwapButton.d.ts b/dist2/types/lib/components/Swap/SwapButton.d.ts deleted file mode 100644 index c8c920e4d5c..00000000000 --- a/dist2/types/lib/components/Swap/SwapButton.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -/// -interface SwapButtonProps { - disabled?: boolean; -} -export default function SwapButton({ disabled }: SwapButtonProps): JSX.Element; -export {}; diff --git a/dist2/types/lib/components/Swap/SwapPropValidator.d.ts b/dist2/types/lib/components/Swap/SwapPropValidator.d.ts deleted file mode 100644 index 134fb63b69c..00000000000 --- a/dist2/types/lib/components/Swap/SwapPropValidator.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { SwapProps } from 'lib/components/Swap'; -import { PropsWithChildren } from 'react'; -declare type ValidatorProps = PropsWithChildren; -export default function SwapPropValidator(props: ValidatorProps): JSX.Element; -export {}; diff --git a/dist2/types/lib/components/Swap/TokenInput.d.ts b/dist2/types/lib/components/Swap/TokenInput.d.ts deleted file mode 100644 index ac946e623be..00000000000 --- a/dist2/types/lib/components/Swap/TokenInput.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Currency } from '@uniswap/sdk-core'; -import { ReactNode } from 'react'; -interface TokenInputProps { - currency?: Currency; - amount: string; - disabled?: boolean; - onMax?: () => void; - onChangeInput: (input: string) => void; - onChangeCurrency: (currency: Currency) => void; - children: ReactNode; -} -export default function TokenInput({ currency, amount, disabled, onMax, onChangeInput, onChangeCurrency, children, }: TokenInputProps): JSX.Element; -export {}; diff --git a/dist2/types/lib/components/Swap/Toolbar.d.ts b/dist2/types/lib/components/Swap/Toolbar.d.ts deleted file mode 100644 index 1e392192002..00000000000 --- a/dist2/types/lib/components/Swap/Toolbar.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -/// -export default function Toolbar({ disabled }: { - disabled?: boolean; -}): JSX.Element; diff --git a/dist2/types/lib/components/Swap/index.d.ts b/dist2/types/lib/components/Swap/index.d.ts deleted file mode 100644 index 43b8f698115..00000000000 --- a/dist2/types/lib/components/Swap/index.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -/// -import { TokenInfo } from '@uniswap/token-lists'; -export declare type DefaultAddress = string | { - [chainId: number]: string | 'NATIVE'; -} | 'NATIVE'; -export interface SwapProps { - tokenList?: string | TokenInfo[]; - defaultInputAddress?: DefaultAddress; - defaultInputAmount?: string; - defaultOutputAddress?: DefaultAddress; - defaultOutputAmount?: string; - convenienceFee?: number; - convenienceFeeRecipient?: string | { - [chainId: number]: string; - }; -} -export default function Swap(props: SwapProps): JSX.Element; diff --git a/dist2/types/lib/components/Toggle.d.ts b/dist2/types/lib/components/Toggle.d.ts deleted file mode 100644 index a4c3baabd6b..00000000000 --- a/dist2/types/lib/components/Toggle.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -/// -interface ToggleProps { - checked: boolean; - onToggle: () => void; -} -export default function Toggle({ checked, onToggle }: ToggleProps): JSX.Element; -export {}; diff --git a/dist2/types/lib/components/TokenImg.d.ts b/dist2/types/lib/components/TokenImg.d.ts deleted file mode 100644 index e2f7803a5a3..00000000000 --- a/dist2/types/lib/components/TokenImg.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -/// -import { Currency } from '@uniswap/sdk-core'; -interface TokenImgProps { - className?: string; - token: Currency; -} -declare function TokenImg({ className, token }: TokenImgProps): JSX.Element; -declare const _default: import("styled-components").StyledComponent; -export default _default; diff --git a/dist2/types/lib/components/TokenSelect.fixture.d.ts b/dist2/types/lib/components/TokenSelect.fixture.d.ts deleted file mode 100644 index 2fd2fc0f568..00000000000 --- a/dist2/types/lib/components/TokenSelect.fixture.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -export default function Fixture(): JSX.Element; diff --git a/dist2/types/lib/components/TokenSelect/TokenBase.d.ts b/dist2/types/lib/components/TokenSelect/TokenBase.d.ts deleted file mode 100644 index 52cf93ce796..00000000000 --- a/dist2/types/lib/components/TokenSelect/TokenBase.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -/// -import { Currency } from '@uniswap/sdk-core'; -interface TokenBaseProps { - value: Currency; - onClick: (value: Currency) => void; -} -export default function TokenBase({ value, onClick }: TokenBaseProps): JSX.Element; -export {}; diff --git a/dist2/types/lib/components/TokenSelect/TokenButton.d.ts b/dist2/types/lib/components/TokenSelect/TokenButton.d.ts deleted file mode 100644 index ef749495f02..00000000000 --- a/dist2/types/lib/components/TokenSelect/TokenButton.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -/// -import { Currency } from '@uniswap/sdk-core'; -interface TokenButtonProps { - value?: Currency; - collapsed: boolean; - disabled?: boolean; - onClick: () => void; -} -export default function TokenButton({ value, collapsed, disabled, onClick }: TokenButtonProps): JSX.Element; -export {}; diff --git a/dist2/types/lib/components/TokenSelect/TokenOptions.d.ts b/dist2/types/lib/components/TokenSelect/TokenOptions.d.ts deleted file mode 100644 index b1ec4cabc11..00000000000 --- a/dist2/types/lib/components/TokenSelect/TokenOptions.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Currency } from '@uniswap/sdk-core'; -import { KeyboardEvent } from 'react'; -interface TokenOptionsHandle { - onKeyDown: (e: KeyboardEvent) => void; - blur: () => void; -} -interface TokenOptionsProps { - tokens: Currency[]; - onSelect: (token: Currency) => void; -} -declare const TokenOptions: import("react").ForwardRefExoticComponent>; -export default TokenOptions; diff --git a/dist2/types/lib/components/TokenSelect/index.d.ts b/dist2/types/lib/components/TokenSelect/index.d.ts deleted file mode 100644 index 8986ce5f391..00000000000 --- a/dist2/types/lib/components/TokenSelect/index.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -/// -import { Currency } from '@uniswap/sdk-core'; -interface TokenSelectDialogProps { - value?: Currency; - onSelect: (token: Currency) => void; -} -export declare function TokenSelectDialog({ value, onSelect }: TokenSelectDialogProps): JSX.Element; -interface TokenSelectProps { - value?: Currency; - collapsed: boolean; - disabled?: boolean; - onSelect: (value: Currency) => void; -} -export default function TokenSelect({ value, collapsed, disabled, onSelect }: TokenSelectProps): JSX.Element; -export {}; diff --git a/dist2/types/lib/components/Tooltip.d.ts b/dist2/types/lib/components/Tooltip.d.ts deleted file mode 100644 index 8be6e4ef0f4..00000000000 --- a/dist2/types/lib/components/Tooltip.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Placement } from '@popperjs/core'; -import { Icon } from 'lib/icons'; -import { ReactNode } from 'react'; -interface TooltipInterface { - icon?: Icon; - children: ReactNode; - placement: Placement; - contained?: true; -} -export default function Tooltip({ icon: Icon, children, placement, contained, }: TooltipInterface): JSX.Element; -export {}; diff --git a/dist2/types/lib/components/Wallet.d.ts b/dist2/types/lib/components/Wallet.d.ts deleted file mode 100644 index 5e8313c0e4d..00000000000 --- a/dist2/types/lib/components/Wallet.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -/// -export default function Wallet({ disabled }: { - disabled?: boolean; -}): JSX.Element | null; diff --git a/dist2/types/lib/components/Web3Provider.d.ts b/dist2/types/lib/components/Web3Provider.d.ts deleted file mode 100644 index 9e8c6100935..00000000000 --- a/dist2/types/lib/components/Web3Provider.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { ReactNode } from 'react'; -import { Provider as EthProvider } from 'widgets-web3-react/types'; -interface Web3ProviderProps { - jsonRpcEndpoint?: string; - provider?: EthProvider; - children: ReactNode; -} -export default function Web3Provider({ jsonRpcEndpoint, provider, children }: Web3ProviderProps): JSX.Element; -export {}; diff --git a/dist2/types/lib/components/Widget.d.ts b/dist2/types/lib/components/Widget.d.ts deleted file mode 100644 index 6126d1b3677..00000000000 --- a/dist2/types/lib/components/Widget.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { SupportedLocale } from 'constants/locales'; -import { Theme } from 'lib/theme'; -import { PropsWithChildren } from 'react'; -import { Provider as EthProvider } from 'widgets-web3-react/types'; -import { ErrorHandler } from './Error/ErrorBoundary'; -export declare type WidgetProps = { - theme?: Theme; - locale?: SupportedLocale; - provider?: EthProvider; - jsonRpcEndpoint?: string; - width?: string | number; - dialog?: HTMLElement | null; - className?: string; - onError?: ErrorHandler; -}; -export default function Widget(props: PropsWithChildren): JSX.Element; diff --git a/dist2/types/lib/cosmos.decorator.d.ts b/dist2/types/lib/cosmos.decorator.d.ts deleted file mode 100644 index 23ed708c483..00000000000 --- a/dist2/types/lib/cosmos.decorator.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { JSXElementConstructor, ReactElement } from 'react'; -export default function WidgetDecorator({ children, }: { - children: ReactElement>; -}): JSX.Element; diff --git a/dist2/types/lib/cosmos/components/Widget.d.ts b/dist2/types/lib/cosmos/components/Widget.d.ts deleted file mode 100644 index 33412bd8eba..00000000000 --- a/dist2/types/lib/cosmos/components/Widget.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { ReactNode } from 'react'; -import { MetaMask } from 'widgets-web3-react/metamask'; -export declare const metaMask: MetaMask; -export default function Wrapper({ children }: { - children: ReactNode; -}): JSX.Element; diff --git a/dist2/types/lib/errors.d.ts b/dist2/types/lib/errors.d.ts deleted file mode 100644 index b055d2150f2..00000000000 --- a/dist2/types/lib/errors.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -export declare class IntegrationError extends Error { - constructor(message: string); -} diff --git a/dist2/types/lib/hooks/multicall.d.ts b/dist2/types/lib/hooks/multicall.d.ts deleted file mode 100644 index 16b1ae99eb6..00000000000 --- a/dist2/types/lib/hooks/multicall.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import multicall from 'lib/state/multicall'; -import { SkipFirst } from 'types/tuple'; -export type { CallStateResult } from '@uniswap/redux-multicall'; -export { NEVER_RELOAD } from '@uniswap/redux-multicall'; -declare type SkipFirstTwoParams any> = SkipFirst, 2>; -export declare function useMultipleContractSingleData(...args: SkipFirstTwoParams): import("@uniswap/redux-multicall").CallState[]; -export declare function useSingleCallResult(...args: SkipFirstTwoParams): import("@uniswap/redux-multicall").CallState; -export declare function useSingleContractMultipleData(...args: SkipFirstTwoParams): import("@uniswap/redux-multicall").CallState[]; -export declare function useSingleContractWithCallData(...args: SkipFirstTwoParams): import("@uniswap/redux-multicall").CallState[]; diff --git a/dist2/types/lib/hooks/swap/index.d.ts b/dist2/types/lib/hooks/swap/index.d.ts deleted file mode 100644 index 536335a16d3..00000000000 --- a/dist2/types/lib/hooks/swap/index.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Currency } from '@uniswap/sdk-core'; -import { Field } from 'lib/state/swap'; -export { default as useSwapInfo } from './useSwapInfo'; -export declare const amountAtom: import("jotai").WritableAtom; -export declare function useSwitchSwapCurrencies(): () => void; -export declare function useSwapCurrency(field: Field): [Currency | undefined, (currency?: Currency) => void]; -export declare function useSwapAmount(field: Field): [string | undefined, (amount: string) => void]; diff --git a/dist2/types/lib/hooks/swap/useSendSwapTransaction.d.ts b/dist2/types/lib/hooks/swap/useSendSwapTransaction.d.ts deleted file mode 100644 index 64d7d323bc4..00000000000 --- a/dist2/types/lib/hooks/swap/useSendSwapTransaction.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { TransactionResponse, Web3Provider } from '@ethersproject/providers'; -import { Trade } from '@uniswap/router-sdk'; -import { Currency, TradeType } from '@uniswap/sdk-core'; -import { Trade as V2Trade } from '@uniswap/v2-sdk'; -import { Trade as V3Trade } from '@uniswap/v3-sdk'; -declare type AnyTrade = V2Trade | V3Trade | Trade; -interface SwapCall { - address: string; - calldata: string; - value: string; -} -export default function useSendSwapTransaction(account: string | null | undefined, chainId: number | undefined, library: Web3Provider | undefined, trade: AnyTrade | undefined, // trade to execute, required -swapCalls: SwapCall[]): { - callback: null | (() => Promise); -}; -export {}; diff --git a/dist2/types/lib/hooks/swap/useSwapApproval.d.ts b/dist2/types/lib/hooks/swap/useSwapApproval.d.ts deleted file mode 100644 index e0c9ba9becc..00000000000 --- a/dist2/types/lib/hooks/swap/useSwapApproval.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Trade } from '@uniswap/router-sdk'; -import { Currency, Percent, Token, TradeType } from '@uniswap/sdk-core'; -import { Trade as V2Trade } from '@uniswap/v2-sdk'; -import { Trade as V3Trade } from '@uniswap/v3-sdk'; -import { ApprovalState } from '../useApproval'; -export { ApprovalState } from '../useApproval'; -export declare function useSwapRouterAddress(trade: V2Trade | V3Trade | Trade | undefined): string | undefined; -export default function useSwapApproval(trade: V2Trade | V3Trade | Trade | undefined, allowedSlippage: Percent, useIsPendingApproval: (token?: Token, spender?: string) => boolean): [ApprovalState, () => Promise<{ - response: import("@ethersproject/abstract-provider").TransactionResponse; - tokenAddress: string; - spenderAddress: string; -} | undefined>]; -export declare function useSwapApprovalOptimizedTrade(trade: Trade | undefined, allowedSlippage: Percent, useIsPendingApproval: (token?: Token, spender?: string) => boolean): V2Trade | V3Trade | Trade | undefined; diff --git a/dist2/types/lib/hooks/swap/useSwapCallback.d.ts b/dist2/types/lib/hooks/swap/useSwapCallback.d.ts deleted file mode 100644 index b8d7d94f274..00000000000 --- a/dist2/types/lib/hooks/swap/useSwapCallback.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { BigNumber } from '@ethersproject/bignumber'; -import { TransactionResponse } from '@ethersproject/providers'; -import { Percent } from '@uniswap/sdk-core'; -import { SignatureData } from 'hooks/useERC20Permit'; -import { AnyTrade } from 'hooks/useSwapCallArguments'; -import { ReactNode } from 'react'; -export declare enum SwapCallbackState { - INVALID = 0, - LOADING = 1, - VALID = 2 -} -export declare function useSwapCallback(trade: AnyTrade | undefined, // trade to execute, required -allowedSlippage: Percent, // in bips -recipientAddressOrName: string | null | undefined, // the ENS name or address of the recipient of the trade, or null if swap should be returned to sender -signatureData: SignatureData | null | undefined, deadline: BigNumber | undefined): { - state: SwapCallbackState; - callback: null | (() => Promise); - error: ReactNode | null; -}; diff --git a/dist2/types/lib/hooks/swap/useSwapDefaults.d.ts b/dist2/types/lib/hooks/swap/useSwapDefaults.d.ts deleted file mode 100644 index 60870c9a023..00000000000 --- a/dist2/types/lib/hooks/swap/useSwapDefaults.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { DefaultAddress } from 'lib/components/Swap'; -interface UseSwapDefaultsArgs { - defaultInputAddress?: DefaultAddress; - defaultInputAmount?: string; - defaultOutputAddress?: DefaultAddress; - defaultOutputAmount?: string; -} -export default function useSwapDefaults({ defaultInputAddress, defaultInputAmount, defaultOutputAddress, defaultOutputAmount, }: UseSwapDefaultsArgs): void; -export {}; diff --git a/dist2/types/lib/hooks/swap/useSwapInfo.d.ts b/dist2/types/lib/hooks/swap/useSwapInfo.d.ts deleted file mode 100644 index 42f0298059d..00000000000 --- a/dist2/types/lib/hooks/swap/useSwapInfo.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Currency, CurrencyAmount, Percent, TradeType } from '@uniswap/sdk-core'; -import { Field } from 'lib/state/swap'; -import { InterfaceTrade, TradeState } from 'state/routing/types'; -interface SwapInfo { - currencies: { - [field in Field]?: Currency; - }; - currencyBalances: { - [field in Field]?: CurrencyAmount; - }; - currencyAmounts: { - [field in Field]?: CurrencyAmount; - }; - trade: { - trade?: InterfaceTrade; - state: TradeState; - }; - allowedSlippage: Percent; -} -export declare function SwapInfoUpdater(): null; -/** Requires that SwapInfoUpdater be installed in the DOM tree. **/ -export default function useSwapInfo(): SwapInfo; -export {}; diff --git a/dist2/types/lib/hooks/transactions/index.d.ts b/dist2/types/lib/hooks/transactions/index.d.ts deleted file mode 100644 index dbd5a0574bb..00000000000 --- a/dist2/types/lib/hooks/transactions/index.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -/// -import { Token } from '@uniswap/sdk-core'; -import { Transaction, TransactionInfo } from 'lib/state/transactions'; -export declare function usePendingTransactions(): { - [hash: string]: Transaction; -}; -export declare function useAddTransaction(): (info: TransactionInfo) => void; -/** Returns the hash of a pending approval transaction, if it exists. */ -export declare function usePendingApproval(token?: Token, spender?: string): string | undefined; -export declare function TransactionsUpdater(): JSX.Element; diff --git a/dist2/types/lib/hooks/transactions/updater.d.ts b/dist2/types/lib/hooks/transactions/updater.d.ts deleted file mode 100644 index a10352fa162..00000000000 --- a/dist2/types/lib/hooks/transactions/updater.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { TransactionReceipt } from '@ethersproject/abstract-provider'; -interface Transaction { - addedTime: number; - receipt?: unknown; - lastCheckedBlockNumber?: number; -} -export declare function shouldCheck(lastBlockNumber: number, tx: Transaction): boolean; -interface UpdaterProps { - pendingTransactions: { - [hash: string]: Transaction; - }; - onCheck: (tx: { - chainId: number; - hash: string; - blockNumber: number; - }) => void; - onReceipt: (tx: { - chainId: number; - hash: string; - receipt: TransactionReceipt; - }) => void; -} -export default function Updater({ pendingTransactions, onCheck, onReceipt }: UpdaterProps): null; -export {}; diff --git a/dist2/types/lib/hooks/useActiveWeb3React.d.ts b/dist2/types/lib/hooks/useActiveWeb3React.d.ts deleted file mode 100644 index 293c9484215..00000000000 --- a/dist2/types/lib/hooks/useActiveWeb3React.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Web3ReactState } from 'lib/state/web3'; -import { Web3ReactHooks } from 'widgets-web3-react/core'; -export declare function useActiveWeb3ReactState(): Web3ReactState; -export declare function useActiveWeb3ReactHooks(): Web3ReactHooks; -export default function useActiveWeb3React(): { - connector: import("widgets-web3-react/types").Connector; - library: import("@ethersproject/providers").Web3Provider | undefined; - chainId: number | undefined; - account: string | undefined; - active: boolean; - error: Error | undefined; -}; diff --git a/dist2/types/lib/hooks/useApproval.d.ts b/dist2/types/lib/hooks/useApproval.d.ts deleted file mode 100644 index 407f8978791..00000000000 --- a/dist2/types/lib/hooks/useApproval.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { TransactionResponse } from '@ethersproject/providers'; -import { Currency, CurrencyAmount, Token } from '@uniswap/sdk-core'; -export declare enum ApprovalState { - UNKNOWN = "UNKNOWN", - NOT_APPROVED = "NOT_APPROVED", - PENDING = "PENDING", - APPROVED = "APPROVED" -} -export declare function useApprovalStateForSpender(amountToApprove: CurrencyAmount | undefined, spender: string | undefined, useIsPendingApproval: (token?: Token, spender?: string) => boolean): ApprovalState; -export declare function useApproval(amountToApprove: CurrencyAmount | undefined, spender: string | undefined, useIsPendingApproval: (token?: Token, spender?: string) => boolean): [ - ApprovalState, - () => Promise<{ - response: TransactionResponse; - tokenAddress: string; - spenderAddress: string; - } | undefined> -]; diff --git a/dist2/types/lib/hooks/useBlockNumber.d.ts b/dist2/types/lib/hooks/useBlockNumber.d.ts deleted file mode 100644 index ddc1a124e86..00000000000 --- a/dist2/types/lib/hooks/useBlockNumber.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -export declare function BlockUpdater(): null; -/** Requires that BlockUpdater be installed in the DOM tree. */ -export default function useBlockNumber(): number | undefined; -export declare function useFastForwardBlockNumber(): (block: number) => void; diff --git a/dist2/types/lib/hooks/useCurrency.d.ts b/dist2/types/lib/hooks/useCurrency.d.ts deleted file mode 100644 index 72d12dbdde3..00000000000 --- a/dist2/types/lib/hooks/useCurrency.d.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Currency, Token } from '@uniswap/sdk-core'; -import { TokenMap } from './useTokenList'; -/** - * Returns a Token from the tokenAddress. - * Returns null if token is loading or null was passed. - * Returns undefined if tokenAddress is invalid or token does not exist. - */ -export declare function useTokenFromMap(tokens: TokenMap, tokenAddress?: string | null): Token | null | undefined; -/** - * Returns a Token from the tokenAddress. - * Returns null if token is loading or null was passed. - * Returns undefined if tokenAddress is invalid or token does not exist. - */ -export declare function useToken(tokenAddress?: string | null): Token | null | undefined; -/** - * Returns a Currency from the currencyId. - * Returns null if currency is loading or null was passed. - * Returns undefined if currencyId is invalid or token does not exist. - */ -export declare function useCurrencyFromMap(tokens: TokenMap, currencyId?: string | null): Currency | null | undefined; -/** - * Returns a Currency from the currencyId. - * Returns null if currency is loading or null was passed. - * Returns undefined if currencyId is invalid or token does not exist. - */ -export default function useCurrency(currencyId?: string | null): Currency | null | undefined; diff --git a/dist2/types/lib/hooks/useCurrencyBalance.d.ts b/dist2/types/lib/hooks/useCurrencyBalance.d.ts deleted file mode 100644 index 5d6125f85f9..00000000000 --- a/dist2/types/lib/hooks/useCurrencyBalance.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Currency, CurrencyAmount, Token } from '@uniswap/sdk-core'; -/** - * Returns a map of the given addresses to their eventually consistent ETH balances. - */ -export declare function useNativeCurrencyBalances(uncheckedAddresses?: (string | undefined)[]): { - [address: string]: CurrencyAmount | undefined; -}; -/** - * Returns a map of token addresses to their eventually consistent token balances for a single account. - */ -export declare function useTokenBalancesWithLoadingIndicator(address?: string, tokens?: (Token | undefined)[]): [{ - [tokenAddress: string]: CurrencyAmount | undefined; -}, boolean]; -export declare function useTokenBalances(address?: string, tokens?: (Token | undefined)[]): { - [tokenAddress: string]: CurrencyAmount | undefined; -}; -export declare function useTokenBalance(account?: string, token?: Token): CurrencyAmount | undefined; -export declare function useCurrencyBalances(account?: string, currencies?: (Currency | undefined)[]): (CurrencyAmount | undefined)[]; -export default function useCurrencyBalance(account?: string, currency?: Currency): CurrencyAmount | undefined; diff --git a/dist2/types/lib/hooks/useCurrencyColor.d.ts b/dist2/types/lib/hooks/useCurrencyColor.d.ts deleted file mode 100644 index ca480dfeaa1..00000000000 --- a/dist2/types/lib/hooks/useCurrencyColor.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { Currency } from '@uniswap/sdk-core'; -export declare function usePrefetchCurrencyColor(token?: Currency): void; -export default function useCurrencyColor(token?: Currency): string | undefined; diff --git a/dist2/types/lib/hooks/useCurrencyLogoURIs.d.ts b/dist2/types/lib/hooks/useCurrencyLogoURIs.d.ts deleted file mode 100644 index 02927663e41..00000000000 --- a/dist2/types/lib/hooks/useCurrencyLogoURIs.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { Currency } from '@uniswap/sdk-core'; -export default function useCurrencyLogoURIs(currency?: Currency | null): string[]; diff --git a/dist2/types/lib/hooks/useInterval.d.ts b/dist2/types/lib/hooks/useInterval.d.ts deleted file mode 100644 index 56cd5f3250a..00000000000 --- a/dist2/types/lib/hooks/useInterval.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Invokes callback repeatedly over an interval defined by the delay - * @param callback - * @param delay if null, the callback will not be invoked - * @param leading if true, the callback will be invoked immediately (on the leading edge); otherwise, it will be invoked after delay - */ -export default function useInterval(callback: () => void, delay: null | number, leading?: boolean): void; diff --git a/dist2/types/lib/hooks/useNativeCurrency.d.ts b/dist2/types/lib/hooks/useNativeCurrency.d.ts deleted file mode 100644 index 7f53cceee6c..00000000000 --- a/dist2/types/lib/hooks/useNativeCurrency.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { NativeCurrency } from '@uniswap/sdk-core'; -export default function useNativeCurrency(): NativeCurrency; diff --git a/dist2/types/lib/hooks/useNativeEvent.d.ts b/dist2/types/lib/hooks/useNativeEvent.d.ts deleted file mode 100644 index 2bf361862ad..00000000000 --- a/dist2/types/lib/hooks/useNativeEvent.d.ts +++ /dev/null @@ -1 +0,0 @@ -export default function useNativeEvent(element: HTMLElement | null, ...eventListener: Parameters): void; diff --git a/dist2/types/lib/hooks/useScrollbar.d.ts b/dist2/types/lib/hooks/useScrollbar.d.ts deleted file mode 100644 index 3c070fc6b53..00000000000 --- a/dist2/types/lib/hooks/useScrollbar.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -interface ScrollbarOptions { - padded?: boolean; -} -export default function useScrollbar(element: HTMLElement | null, { padded }?: ScrollbarOptions): import("styled-components").FlattenInterpolation>; -export {}; diff --git a/dist2/types/lib/hooks/useTokenList/fetchTokenList.d.ts b/dist2/types/lib/hooks/useTokenList/fetchTokenList.d.ts deleted file mode 100644 index 005348a0601..00000000000 --- a/dist2/types/lib/hooks/useTokenList/fetchTokenList.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import type { TokenList } from '@uniswap/token-lists'; -export declare const DEFAULT_TOKEN_LIST = "https://gateway.ipfs.io/ipns/tokens.uniswap.org"; -/** Fetches and validates a token list. */ -export default function fetchTokenList(listUrl: string, resolveENSContentHash: (ensName: string) => Promise): Promise; diff --git a/dist2/types/lib/hooks/useTokenList/filtering.d.ts b/dist2/types/lib/hooks/useTokenList/filtering.d.ts deleted file mode 100644 index 82ff3cb5720..00000000000 --- a/dist2/types/lib/hooks/useTokenList/filtering.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { NativeCurrency, Token } from '@uniswap/sdk-core'; -import { TokenInfo } from '@uniswap/token-lists'; -/** Creates a filter function that filters tokens that do not match the query. */ -export declare function getTokenFilter(query: string): (token: T | NativeCurrency) => boolean; diff --git a/dist2/types/lib/hooks/useTokenList/index.d.ts b/dist2/types/lib/hooks/useTokenList/index.d.ts deleted file mode 100644 index 5ca14c093d6..00000000000 --- a/dist2/types/lib/hooks/useTokenList/index.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Token } from '@uniswap/sdk-core'; -import { TokenInfo } from '@uniswap/token-lists'; -import { WrappedTokenInfo } from 'state/lists/wrappedTokenInfo'; -export { DEFAULT_TOKEN_LIST } from './fetchTokenList'; -export default function useTokenList(list?: string | TokenInfo[]): WrappedTokenInfo[]; -export declare type TokenMap = { - [address: string]: Token; -}; -export declare function useTokenMap(): TokenMap; -export declare function useQueryTokenList(query: string): (import("@uniswap/sdk-core").NativeCurrency | WrappedTokenInfo)[]; diff --git a/dist2/types/lib/hooks/useTokenList/querying.d.ts b/dist2/types/lib/hooks/useTokenList/querying.d.ts deleted file mode 100644 index ac3c94aba1d..00000000000 --- a/dist2/types/lib/hooks/useTokenList/querying.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { WrappedTokenInfo } from 'state/lists/wrappedTokenInfo'; -export declare function useQueryTokens(query: string, tokens: WrappedTokenInfo[]): (import("@uniswap/sdk-core").NativeCurrency | WrappedTokenInfo)[]; diff --git a/dist2/types/lib/hooks/useTokenList/sorting.d.ts b/dist2/types/lib/hooks/useTokenList/sorting.d.ts deleted file mode 100644 index 533613fe334..00000000000 --- a/dist2/types/lib/hooks/useTokenList/sorting.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Token } from '@uniswap/sdk-core'; -import { TokenInfo } from '@uniswap/token-lists'; -import { useTokenBalances } from 'state/wallet/hooks'; -/** Sorts tokens by currency amount (descending), then symbol (ascending). */ -export declare function tokenComparator(balances: ReturnType, a: Token, b: Token): 1 | -1; -/** Sorts tokens by query, giving precedence to exact matches and partial matches. */ -export declare function useSortTokensByQuery(query: string, tokens?: T[]): T[]; diff --git a/dist2/types/lib/hooks/useTokenList/utils.d.ts b/dist2/types/lib/hooks/useTokenList/utils.d.ts deleted file mode 100644 index 8cc586c4623..00000000000 --- a/dist2/types/lib/hooks/useTokenList/utils.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { TokenInfo, TokenList } from '@uniswap/token-lists'; -import { WrappedTokenInfo } from 'state/lists/wrappedTokenInfo'; -declare type TokenMap = Readonly<{ - [tokenAddress: string]: { - token: WrappedTokenInfo; - list?: TokenList; - }; -}>; -export declare type ChainTokenMap = Readonly<{ - [chainId: number]: TokenMap; -}>; -export declare function tokensToChainTokenMap(tokens: TokenList | TokenInfo[]): ChainTokenMap; -export {}; diff --git a/dist2/types/lib/hooks/useTokenList/validateTokenList.d.ts b/dist2/types/lib/hooks/useTokenList/validateTokenList.d.ts deleted file mode 100644 index cf8ba766751..00000000000 --- a/dist2/types/lib/hooks/useTokenList/validateTokenList.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { TokenInfo, TokenList } from '@uniswap/token-lists'; -/** - * Validates an array of tokens. - * @param json the TokenInfo[] to validate - */ -export declare function validateTokens(json: TokenInfo[]): Promise; -/** - * Validates a token list. - * @param json the TokenList to validate - */ -export default function validateTokenList(json: TokenList): Promise; diff --git a/dist2/types/lib/hooks/useUnmount.d.ts b/dist2/types/lib/hooks/useUnmount.d.ts deleted file mode 100644 index 4e42d90ddaa..00000000000 --- a/dist2/types/lib/hooks/useUnmount.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { RefObject } from 'react'; -export declare const UNMOUNTING = "unmounting"; -/** - * Delays a node's unmounting so that an animation may be applied. - * An animation *must* be applied, or the node will not unmount. - */ -export default function useUnmount(node: RefObject): void; diff --git a/dist2/types/lib/i18n.d.ts b/dist2/types/lib/i18n.d.ts deleted file mode 100644 index 2e59f6d0d4d..00000000000 --- a/dist2/types/lib/i18n.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { SupportedLocale } from 'constants/locales'; -import { ReactNode } from 'react'; -export declare function dynamicActivate(locale: SupportedLocale): Promise; -interface ProviderProps { - locale: SupportedLocale; - forceRenderAfterLocaleChange?: boolean; - onActivate?: (locale: SupportedLocale) => void; - children: ReactNode; -} -export declare function Provider({ locale, forceRenderAfterLocaleChange, onActivate, children }: ProviderProps): JSX.Element; -export {}; diff --git a/dist2/types/lib/icons/index.d.ts b/dist2/types/lib/icons/index.d.ts deleted file mode 100644 index 5d27ecc037d..00000000000 --- a/dist2/types/lib/icons/index.d.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { Color } from 'lib/theme'; -import { FunctionComponent, SVGProps } from 'react'; -import { Icon as FeatherIcon } from 'react-feather'; -declare type SVGIcon = FunctionComponent>; -declare function icon(Icon: FeatherIcon | SVGIcon): import("styled-components").StyledComponent; -export declare type Icon = ReturnType; -export declare const largeIconCss: import("styled-components").FlattenInterpolation>; -interface LargeIconProps { - icon: Icon; - color?: Color; - size?: number; - className?: string; -} -export declare function LargeIcon({ icon: Icon, color, size, className }: LargeIconProps): JSX.Element; -export declare const AlertTriangle: import("styled-components").StyledComponent; -export declare const ArrowDown: import("styled-components").StyledComponent; -export declare const ArrowRight: import("styled-components").StyledComponent; -export declare const ArrowUp: import("styled-components").StyledComponent; -export declare const CheckCircle: import("styled-components").StyledComponent; -export declare const ChevronDown: import("styled-components").StyledComponent; -export declare const Clock: import("styled-components").StyledComponent; -export declare const CreditCard: import("styled-components").StyledComponent; -export declare const HelpCircle: import("styled-components").StyledComponent; -export declare const Info: import("styled-components").StyledComponent; -export declare const Link: import("styled-components").StyledComponent; -export declare const Settings: import("styled-components").StyledComponent; -export declare const Slash: import("styled-components").StyledComponent; -export declare const Trash2: import("styled-components").StyledComponent; -export declare const X: import("styled-components").StyledComponent; -export declare const Check: import("styled-components").StyledComponent; -export declare const Expando: import("styled-components").StyledComponent; -export declare const Logo: import("styled-components").StyledComponent; -export declare const Spinner: import("styled-components").StyledComponent; -export {}; diff --git a/dist2/types/lib/index.d.ts b/dist2/types/lib/index.d.ts deleted file mode 100644 index c33ec002efe..00000000000 --- a/dist2/types/lib/index.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -/// -import { SwapProps } from './components/Swap'; -import { WidgetProps } from './components/Widget'; -declare type SwapWidgetProps = SwapProps & WidgetProps; -export declare function SwapWidget(props: SwapWidgetProps): JSX.Element; -export {}; diff --git a/dist2/types/lib/state/atoms.d.ts b/dist2/types/lib/state/atoms.d.ts deleted file mode 100644 index 2d9068c66da..00000000000 --- a/dist2/types/lib/state/atoms.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Draft } from 'immer'; -import { WritableAtom } from 'jotai'; -/** - * Creates a derived atom whose value is the picked object property. - * By default, the setter acts as a primitive atom's, changing the original atom. - * A custom setter may also be passed, which uses an Immer Draft so that it may be mutated directly. - */ -export declare function pickAtom, Update>(anAtom: WritableAtom, key: Key, setter: (draft: Draft[Key], update: Update) => Draft[Key]): WritableAtom; -export declare function pickAtom, Update extends Value[Key]>(anAtom: WritableAtom, key: Key, setter?: (draft: Draft[Key], update: Update) => Draft[Key]): WritableAtom; -/** Sets a togglable atom to invert its state at the next render. */ -export declare function setTogglable(draft: boolean): boolean; diff --git a/dist2/types/lib/state/multicall.d.ts b/dist2/types/lib/state/multicall.d.ts deleted file mode 100644 index 69ed9ebe367..00000000000 --- a/dist2/types/lib/state/multicall.d.ts +++ /dev/null @@ -1,47 +0,0 @@ -/// -declare const multicall: { - reducerPath: string; - reducer: import("redux").Reducer; - actions: import("@reduxjs/toolkit").CaseReducerActions<{ - addMulticallListeners: (state: import("immer/dist/internal").WritableDraft, action: { - payload: import("@uniswap/redux-multicall").MulticallListenerPayload; - type: string; - }) => void; - removeMulticallListeners: (state: import("immer/dist/internal").WritableDraft, action: { - payload: import("@uniswap/redux-multicall").MulticallListenerPayload; - type: string; - }) => void; - fetchingMulticallResults: (state: import("immer/dist/internal").WritableDraft, action: { - payload: import("@uniswap/redux-multicall").MulticallFetchingPayload; - type: string; - }) => void; - errorFetchingMulticallResults: (state: import("immer/dist/internal").WritableDraft, action: { - payload: import("@uniswap/redux-multicall").MulticallFetchingPayload; - type: string; - }) => void; - updateMulticallResults: (state: import("immer/dist/internal").WritableDraft, action: { - payload: import("@uniswap/redux-multicall").MulticallResultsPayload; - type: string; - }) => void; - }>; - hooks: { - useMultipleContractSingleData: (chainId: number | undefined, latestBlockNumber: number | undefined, addresses: (string | undefined)[], contractInterface: import("@ethersproject/abi").Interface, methodName: string, callInputs?: (string | number | import("ethers").BigNumber | (string | number | import("ethers").BigNumber)[] | undefined)[] | undefined, options?: (Partial & { - gasRequired?: number | undefined; - }) | undefined) => import("@uniswap/redux-multicall").CallState[]; - useSingleContractMultipleData: (chainId: number | undefined, latestBlockNumber: number | undefined, contract: import("ethers").Contract | null | undefined, methodName: string, callInputs: ((string | number | import("ethers").BigNumber | (string | number | import("ethers").BigNumber)[] | undefined)[] | undefined)[], options?: (Partial & { - gasRequired?: number | undefined; - }) | undefined) => import("@uniswap/redux-multicall").CallState[]; - useSingleContractWithCallData: (chainId: number | undefined, latestBlockNumber: number | undefined, contract: import("ethers").Contract | null | undefined, callDatas: string[], options?: (Partial & { - gasRequired?: number | undefined; - }) | undefined) => import("@uniswap/redux-multicall").CallState[]; - useSingleCallResult: (chainId: number | undefined, latestBlockNumber: number | undefined, contract: import("ethers").Contract | null | undefined, methodName: string, inputs?: (string | number | import("ethers").BigNumber | (string | number | import("ethers").BigNumber)[] | undefined)[] | undefined, options?: (Partial & { - gasRequired?: number | undefined; - }) | undefined) => import("@uniswap/redux-multicall").CallState; - }; - Updater: (props: Pick) => JSX.Element; -}; -export declare const store: import("redux").Store; -export default multicall; -export declare function MulticallUpdater(): JSX.Element; diff --git a/dist2/types/lib/state/settings.d.ts b/dist2/types/lib/state/settings.d.ts deleted file mode 100644 index d1c995e57d9..00000000000 --- a/dist2/types/lib/state/settings.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Percent } from '@uniswap/sdk-core'; -export declare const TRANSACTION_TTL_DEFAULT = 40; -interface Settings { - maxSlippage: Percent | 'auto'; - transactionTtl: number | undefined; - integratorFee: number | undefined; - mockTogglable: boolean; - clientSideRouter: boolean; -} -export declare const settingsAtom: import("jotai").WritableAtom Settings), void>; -export declare const maxSlippageAtom: import("jotai").WritableAtom; -export declare const transactionTtlAtom: import("jotai").WritableAtom; -export declare const integratorFeeAtom: import("jotai").WritableAtom; -export declare const mockTogglableAtom: import("jotai").WritableAtom; -export declare const clientSideRouterAtom: import("jotai").WritableAtom; -export {}; diff --git a/dist2/types/lib/state/swap.d.ts b/dist2/types/lib/state/swap.d.ts deleted file mode 100644 index 61bddc515f3..00000000000 --- a/dist2/types/lib/state/swap.d.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Currency } from '@uniswap/sdk-core'; -export declare enum Field { - INPUT = "INPUT", - OUTPUT = "OUTPUT" -} -export interface Swap { - independentField: Field; - amount: string; - [Field.INPUT]?: Currency; - [Field.OUTPUT]?: Currency; -} -export declare const swapAtom: import("jotai").WritableAtom) => void), void>; -export declare const independentFieldAtom: import("jotai").WritableAtom; -export declare const displayTxHashAtom: import("jotai").Atom & { - write: (get: { - (atom: import("jotai").Atom>): Value; - (atom: import("jotai").Atom>): Value_1; - (atom: import("jotai").Atom): Value_2 extends Promise ? V : Value_2; - } & { - (atom: import("jotai").Atom>, unstable_promise: true): Value_3 | Promise; - (atom: import("jotai").Atom>, unstable_promise: true): Value_4 | Promise; - }, set: { - >(atom: import("jotai").WritableAtom): Result; - >(atom: import("jotai").WritableAtom, update: Update): Result_1; - }, update: string | ((prev: string | undefined) => string | undefined) | undefined) => void; - onMount?: ( string | undefined) | undefined) => void>(setAtom: S) => void | (() => void)) | undefined; -} & { - init: string | undefined; -}; diff --git a/dist2/types/lib/state/transactions.d.ts b/dist2/types/lib/state/transactions.d.ts deleted file mode 100644 index d7b474eae36..00000000000 --- a/dist2/types/lib/state/transactions.d.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { TransactionReceipt, TransactionResponse } from '@ethersproject/abstract-provider'; -import { TradeType } from '@uniswap/sdk-core'; -export declare enum TransactionType { - APPROVAL = 0, - SWAP = 1 -} -interface BaseTransactionInfo { - type: TransactionType; - response: TransactionResponse; -} -export interface ApprovalTransactionInfo extends BaseTransactionInfo { - type: TransactionType.APPROVAL; - tokenAddress: string; - spenderAddress: string; -} -export interface SwapTransactionInfo extends BaseTransactionInfo { - type: TransactionType.SWAP; - tradeType: TradeType; - inputCurrencyAddress: string; - outputCurrencyAddress: string; -} -export interface InputSwapTransactionInfo extends SwapTransactionInfo { - tradeType: TradeType.EXACT_INPUT; - inputCurrencyAmount: string; - expectedOutputCurrencyAmount: string; - minimumOutputCurrencyAmount: string; -} -export interface OutputSwapTransactionInfo extends SwapTransactionInfo { - tradeType: TradeType.EXACT_OUTPUT; - outputCurrencyAmount: string; - expectedInputCurrencyAmount: string; - maximumInputCurrencyAmount: string; -} -export declare type TransactionInfo = ApprovalTransactionInfo | SwapTransactionInfo; -export interface Transaction { - addedTime: number; - lastCheckedBlockNumber?: number; - receipt?: TransactionReceipt; - info: T; -} -export declare const transactionsAtom: import("jotai").WritableAtom<{ - [chainId: string]: { - [hash: string]: Transaction; - }; -}, { - [chainId: string]: { - [hash: string]: Transaction; - }; -} | ((draft: import("immer/dist/internal").WritableDraft<{ - [chainId: string]: { - [hash: string]: Transaction; - }; -}>) => void), void>; -export {}; diff --git a/dist2/types/lib/state/web3.d.ts b/dist2/types/lib/state/web3.d.ts deleted file mode 100644 index d8df4e582f9..00000000000 --- a/dist2/types/lib/state/web3.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Web3ReactHooks } from 'widgets-web3-react/core'; -import { Connector } from 'widgets-web3-react/types'; -export declare type Web3ReactState = [Connector, Web3ReactHooks]; -export declare const urlAtom: import("jotai").WritableAtom Web3ReactState)), void>; -export declare const injectedAtom: import("jotai").WritableAtom Web3ReactState)), void>; diff --git a/dist2/types/lib/theme/dynamic.d.ts b/dist2/types/lib/theme/dynamic.d.ts deleted file mode 100644 index 5cb3ed723dd..00000000000 --- a/dist2/types/lib/theme/dynamic.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { ReactNode } from 'react'; -import { ComputedTheme } from './theme'; -export declare function getDynamicTheme(theme: ComputedTheme, color: string): ComputedTheme; -interface DynamicThemeProviderProps { - color?: string; - children: ReactNode; -} -export declare function DynamicThemeProvider({ color, children }: DynamicThemeProviderProps): JSX.Element; -export {}; diff --git a/dist2/types/lib/theme/index.d.ts b/dist2/types/lib/theme/index.d.ts deleted file mode 100644 index 78d6ff5e752..00000000000 --- a/dist2/types/lib/theme/index.d.ts +++ /dev/null @@ -1,40 +0,0 @@ -import '../assets/fonts.scss'; -import { ReactNode } from 'react'; -import styled from './styled'; -import { Colors, Theme } from './theme'; -export type { Color, Colors, Theme } from './theme'; -export default styled; -export * from './dynamic'; -export * from './layer'; -export * from './styled'; -export * as ThemedText from './type'; -export declare const lightTheme: Colors; -export declare const darkTheme: Colors; -export declare const defaultTheme: { - accent: string; - container: string; - module: string; - interactive: string; - outline: string; - dialog: string; - primary: string; - secondary: string; - hint: string; - onInteractive: string; - active: string; - success: string; - warning: string; - error: string; - currentColor: "currentColor"; - borderRadius: number; - fontFamily: string; - fontFamilyVariable: string; - fontFamilyCode: string; - tokenColorExtraction: boolean; -}; -export declare function useSystemTheme(): Colors; -interface ThemeProviderProps { - theme?: Theme; - children: ReactNode; -} -export declare function ThemeProvider({ theme, children }: ThemeProviderProps): JSX.Element; diff --git a/dist2/types/lib/theme/layer.d.ts b/dist2/types/lib/theme/layer.d.ts deleted file mode 100644 index 5a101e7c033..00000000000 --- a/dist2/types/lib/theme/layer.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export declare enum Layer { - OVERLAY = 100, - DIALOG = 1000, - TOOLTIP = 2000 -} diff --git a/dist2/types/lib/theme/styled.d.ts b/dist2/types/lib/theme/styled.d.ts deleted file mode 100644 index 5fc81be6285..00000000000 --- a/dist2/types/lib/theme/styled.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { keyframes as styledKeyframes, ThemedBaseStyledInterface, ThemedCssFunction, ThemeProviderComponent } from 'styled-components/macro'; -import { ComputedTheme } from './theme'; -declare const _default: ThemedBaseStyledInterface; -export default _default; -export declare const css: ThemedCssFunction; -export declare const keyframes: typeof styledKeyframes; -export declare const useTheme: () => ComputedTheme; -export declare const ThemedProvider: ThemeProviderComponent; diff --git a/dist2/types/lib/theme/theme.d.ts b/dist2/types/lib/theme/theme.d.ts deleted file mode 100644 index 8be6bdfbb2e..00000000000 --- a/dist2/types/lib/theme/theme.d.ts +++ /dev/null @@ -1,31 +0,0 @@ -export interface Colors { - accent: string; - container: string; - module: string; - interactive: string; - outline: string; - dialog: string; - primary: string; - secondary: string; - hint: string; - onInteractive: string; - active: string; - success: string; - warning: string; - error: string; - currentColor: 'currentColor'; -} -export declare type Color = keyof Colors; -export interface Attributes { - borderRadius: boolean | number; - fontFamily: string; - fontFamilyVariable: string; - fontFamilyCode: string; - tokenColorExtraction: boolean; -} -export interface Theme extends Partial, Partial { -} -export interface ComputedTheme extends Omit, Colors { - borderRadius: number; - onHover: (color: string) => string; -} diff --git a/dist2/types/lib/theme/type.d.ts b/dist2/types/lib/theme/type.d.ts deleted file mode 100644 index 5a7693ae0ed..00000000000 --- a/dist2/types/lib/theme/type.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -/// -import { TextProps as TextPropsWithCss } from 'rebass'; -import { Color } from './theme'; -declare type TextProps = Omit & { - color?: Color; -}; -export declare function H1(props: TextProps): JSX.Element; -export declare function H2(props: TextProps): JSX.Element; -export declare function H3(props: TextProps): JSX.Element; -export declare function Subhead1(props: TextProps): JSX.Element; -export declare function Subhead2(props: TextProps): JSX.Element; -export declare function Body1(props: TextProps): JSX.Element; -export declare function Body2(props: TextProps): JSX.Element; -export declare function Caption(props: TextProps): JSX.Element; -export declare function Badge(props: TextProps): JSX.Element; -export declare function ButtonLarge(props: TextProps): JSX.Element; -export declare function ButtonMedium(props: TextProps): JSX.Element; -export declare function ButtonSmall(props: TextProps): JSX.Element; -export declare function TransitionButton(props: TextProps & { - buttonSize: 'small' | 'medium' | 'large'; -}): JSX.Element; -export declare function Code(props: TextProps): JSX.Element; -export {}; diff --git a/dist2/types/lib/utils/contenthashToUri.d.ts b/dist2/types/lib/utils/contenthashToUri.d.ts deleted file mode 100644 index ae9419f4ef8..00000000000 --- a/dist2/types/lib/utils/contenthashToUri.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -export declare function hexToUint8Array(hex: string): Uint8Array; -/** - * Returns the URI representation of the content hash for supported codecs - * @param contenthash to decode - */ -export default function contenthashToUri(contenthash: string): string; diff --git a/dist2/types/lib/utils/parseENSAddress.d.ts b/dist2/types/lib/utils/parseENSAddress.d.ts deleted file mode 100644 index 02ec8581e22..00000000000 --- a/dist2/types/lib/utils/parseENSAddress.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -export default function parseENSAddress(ensAddress: string): { - ensName: string; - ensPath: string | undefined; -} | undefined; diff --git a/dist2/types/lib/utils/resolveENSContentHash.d.ts b/dist2/types/lib/utils/resolveENSContentHash.d.ts deleted file mode 100644 index 67fd282e457..00000000000 --- a/dist2/types/lib/utils/resolveENSContentHash.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Provider } from '@ethersproject/abstract-provider'; -/** - * Fetches and decodes the result of an ENS contenthash lookup on mainnet to a URI - * @param ensName to resolve - * @param provider provider to use to fetch the data - */ -export default function resolveENSContentHash(ensName: string, provider: Provider): Promise; diff --git a/dist2/types/lib/utils/tryParseCurrencyAmount.d.ts b/dist2/types/lib/utils/tryParseCurrencyAmount.d.ts deleted file mode 100644 index 308726213c3..00000000000 --- a/dist2/types/lib/utils/tryParseCurrencyAmount.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Currency, CurrencyAmount } from '@uniswap/sdk-core'; -/** - * Parses a CurrencyAmount from the passed string. - * Returns the CurrencyAmount, or undefined if parsing fails. - */ -export default function tryParseCurrencyAmount(value?: string, currency?: T): CurrencyAmount | undefined; diff --git a/dist2/types/lib/utils/uriToHttp.d.ts b/dist2/types/lib/utils/uriToHttp.d.ts deleted file mode 100644 index 165928135bf..00000000000 --- a/dist2/types/lib/utils/uriToHttp.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/** - * Given a URI that may be ipfs, ipns, http, https, ar, or data protocol, return the fetch-able http(s) URLs for the same content - * @param uri to convert to fetch-able http url - */ -export default function uriToHttp(uri: string): string[]; diff --git a/dist2/types/locales/af-ZA.d.ts b/dist2/types/locales/af-ZA.d.ts deleted file mode 100644 index 75120e0e5c9..00000000000 --- a/dist2/types/locales/af-ZA.d.ts +++ /dev/null @@ -1,593 +0,0 @@ -export const messages: { - "$-": string; - "$<0/>": string; - "${0}": (string | string[])[]; - "(${0})": (string | string[])[]; - "(View on Explorer)": string; - "(clear all)": string; - "(edit)": string; - "- Remove recipient": string; - "0 UNI / week": string; - "25%": string; - "50%": string; - "75%": string; - "<0/> All Proposals": string; - "<0/> Votes": string; - "<0>Account analytics and accrued fees<1> \u2197 ": string; - "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; - "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; - "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; - "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; - "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; - "<0>Unlock voting to prepare for the next proposal.": string; - "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; - "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; - About: string; - Accept: string; - Account: string; - Active: string; - Add: string; - "Add <0/> and <1/> to Uniswap V2": string; - "Add Delegate +": string; - "Add Liquidity": string; - "Add V2 Liquidity": string; - "Add liquidity.": string; - "Add more liquidity": string; - "Add {0} to Metamask <0/>": (string | string[])[]; - "Add {0}-{1} liquidity": (string | string[])[]; - "Add {0}/{1} V3 liquidity": (string | string[])[]; - "Added {0}": (string | string[])[]; - "Address has no available claim": string; - Against: string; - "Allow LP token migration": string; - "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; - "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; - Allowed: string; - Amount: string; - "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Approval pending <0/>": string; - Approve: string; - "Approve Token": string; - "Approve {0}": (string | string[])[]; - "Approve {0} first": (string | string[])[]; - Approved: string; - Approving: string; - "Approving {0}": (string | string[])[]; - Arbiscan: string; - "Arbitrum Bridge": string; - "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Are you sure?": string; - "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; - "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; - Auto: string; - "Auto Router API": string; - "Available to deposit: {0}": (string | string[])[]; - "Balance: {0}": (string | string[])[]; - "Best for exotic pairs.": string; - "Best for most pairs.": string; - "Best for stable pairs.": string; - "Best for very stable pairs.": string; - "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; - "Blocked address": string; - Bridge: string; - "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; - "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; - Canceled: string; - Change: string; - Charts: string; - "Check network status": string; - "Check out our v3 LP walkthrough and migration guides.": string; - Claim: string; - "Claim <0/> for {0}": (string | string[])[]; - "Claim UNI": string; - "Claim UNI Token": string; - "Claim UNI reward for {0}": (string | string[])[]; - "Claim fees": string; - "Claim your UNI tokens": string; - Claimed: string; - "Claimed UNI!": string; - "Claimed!": string; - Claiming: string; - "Claiming UNI": string; - "Claiming {0} UNI": (string | string[])[]; - "Clear All": string; - "Clear all": string; - Close: string; - Closed: string; - Collect: string; - "Collect as WETH": string; - "Collect fees": string; - "Collect {0}/{1} fees": (string | string[])[]; - Collected: string; - Collecting: string; - "Collecting fees": string; - "Collecting fees will withdraw currently available fees for you.": string; - Confirm: string; - "Confirm Supply": string; - "Confirm Swap": string; - "Confirm swap": string; - "Confirm this transaction in your wallet": string; - "Confirm transaction in wallet": string; - "Connect Wallet": string; - "Connect a wallet": string; - "Connect to a wallet to find pools": string; - "Connect to a wallet to view your V2 liquidity.": string; - "Connect to a wallet to view your liquidity.": string; - "Connect wallet to swap": string; - "Connected with {name}": (string | string[])[]; - Copied: string; - "Copy Address": string; - "Create Pool & Supply": string; - "Create Proposal": string; - "Create a pair": string; - "Create a pool": string; - "Create an issue on GitHub": string; - "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; - "Create pool.": string; - "Create {0}/{1} V3 pool": (string | string[])[]; - "Current price": string; - "Current {0} Price:": (string | string[])[]; - Custom: string; - "Dark Theme": string; - Defeated: string; - "Delegate Votes": string; - "Delegate voting power to {0}": (string | string[])[]; - "Delegated to:": string; - "Delegating votes": string; - Deposit: string; - "Deposit Amounts": string; - "Deposit UNI-V2 LP Tokens": string; - "Deposit liquidity": string; - "Deposit tokens to the {label} network.": (string | string[])[]; - "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; - "Deposited liquidity:": string; - "Deposited {0} UNI-V2": (string | string[])[]; - "Depositing Liquidity": string; - Description: string; - Detailed: string; - Details: string; - Disconnect: string; - Discord: string; - Dismiss: string; - Docs: string; - "Don\u2019t see one of your v2 positions? <0>Import it.": string; - "Earned UNI tokens represent voting shares in Uniswap governance.": string; - Edit: string; - "Efficiency Comparison": string; - "Enter a percent": string; - "Enter a recipient": string; - "Enter a valid slippage percentage": string; - "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; - "Enter an amount": string; - "Enter valid list location": string; - "Enter valid token address": string; - "Enter {0} amount": (string | string[])[]; - Error: string; - "Error connecting": string; - "Error connecting. Try refreshing the page.": string; - "Error details": string; - "Error importing list": string; - "Estimate may differ due to your wallet gas settings": string; - "Estimated network fee": string; - Etherscan: string; - Executed: string; - "Expanded results from inactive Token Lists": string; - "Expected Output": string; - "Expert Mode": string; - "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; - Expired: string; - "Explore Uniswap Analytics.": string; - "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; - "Fee Tier": string; - "Fee tier": string; - "Fetching best price...": string; - "Fetching best price\u2026": string; - For: string; - "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; - From: string; - "From (at most)": string; - "Full Range": string; - "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; - "Get support on Discord": string; - "Help Center": string; - Hide: string; - "Hide closed positions": string; - "High Price Impact": string; - "How this app uses APIs": string; - "I understand": string; - "If you purchase a token from this list, you may not be able to sell it back.": string; - Import: string; - "Import List": string; - "Import Pool": string; - "Import V2 Pool": string; - "Import at your own risk": string; - "In range": string; - "Increase Liquidity": string; - "Initial prices and pool share": string; - "Initializing...": string; - "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Install Metamask": string; - "Insufficient liquidity for this trade.": string; - "Insufficient {0}": (string | string[])[]; - "Insufficient {0} balance": (string | string[])[]; - "Interface Settings": string; - "Invalid pair": string; - "Invalid pair.": string; - "Invalid price input": string; - "Invalid range selected. The min price must be lower than the max price.": string; - "Invalid recipient": string; - Language: string; - Learn: string; - "Learn about providing liquidity": string; - "Learn more": string; - "Legal & Privacy": string; - "Light Theme": string; - Liquidity: string; - "Liquidity data not available.": string; - "Liquidity provider rewards": string; - "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - Lists: string; - Loaded: string; - Loading: string; - MAX: string; - Manage: string; - "Manage Liquidity in Rewards Pool": string; - "Manage Token Lists": string; - "Manage this pool.": string; - Max: string; - "Max Price": string; - "Max price": string; - "Max slippage": string; - "Max:": string; - "Maximum sent": string; - Menu: string; - Migrate: string; - "Migrate Liquidity to V3": string; - "Migrate V2 Liquidity": string; - "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; - "Migrate {0}/{1} liquidity to V3": (string | string[])[]; - Migrating: string; - "Min Price": string; - "Min price": string; - "Min:": string; - "Minimum received": string; - "Missing dependencies": string; - "Mock Toggle": string; - More: string; - "Network Fee": string; - "Network Warning": string; - "Network fees exceed 50% of the swap amount!": string; - "New Position": string; - "No V2 Liquidity found.": string; - "No active pools": string; - "No data": string; - "No description.": string; - "No liquidity found.": string; - "No pool found.": string; - "No proposals found.": string; - "No results found.": string; - "Not created": string; - OFF: string; - ON: string; - "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; - Off: string; - On: string; - "Once you are happy with the rate click supply to review.": string; - "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; - "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; - "Optimism Gateway": string; - "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Optimistic Etherscan": string; - "Out of range": string; - "Output is estimated.": string; - "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; - "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Output will be sent to <0>{0}": (string | string[])[]; - Owner: string; - "Participating pools": string; - Pending: string; - "Please confirm you would like to remove this list by typing REMOVE": string; - "Please connect to Layer 1 Ethereum": string; - "Please connect to a supported network in the dropdown menu or in your wallet.": string; - "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; - "Polygon Bridge": string; - Polygonscan: string; - Pool: string; - "Pool Found!": string; - "Pool Rate": string; - "Pool rate": string; - "Pool tokens in rewards pool:": string; - "Pooled {0}:": (string | string[])[]; - "Pools Overview": string; - Preview: string; - Price: string; - "Price Difference:": string; - "Price Impact": string; - "Price Impact Too High": string; - "Price Updated": string; - "Price impact": string; - "Price range": string; - "Price updated": string; - "Price:": string; - "Prices and pool share": string; - Proposal: string; - "Proposal Submitted": string; - "Proposal Title": string; - Proposals: string; - "Proposals submitted by community members will appear here.": string; - "Proposed Action": string; - Proposer: string; - "Protocol Disclaimer": string; - Queued: string; - Rates: string; - "Read more about UNI": string; - "Read more about Uniswap governance": string; - "Read more about providing liquidity": string; - "Read more about unsupported assets": string; - "Recent Transactions": string; - "Recent transactions": string; - Recipient: string; - "Reload the page": string; - Remove: string; - "Remove <0/> and <1/>": string; - "Remove Amount": string; - "Remove Delegate": string; - "Remove Liquidity": string; - "Remove list": string; - "Removing {0} {1} and {2} {3}": (string | string[])[]; - "Removing {0} {1} and{2} {3}": (string | string[])[]; - "Request Features": string; - Reset: string; - Return: string; - "Review swap": string; - "Search by token name or address": string; - "Search name or paste address": string; - "Select Pair": string; - "Select a network": string; - "Select a token": string; - "Select a token to find your v2 liquidity.": string; - "Select an action": string; - "Selected Range": string; - Self: string; - "Self Delegate": string; - "Set Price Range": string; - "Set Starting Price": string; - Settings: string; - "Share of Pool": string; - "Share of Pool:": string; - "Show Portis": string; - "Show closed positions": string; - Simple: string; - "Slippage tolerance": string; - "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; - "Something went wrong": string; - "Something went wrong.": string; - "Step 1. Get UNI-V2 Liquidity tokens": string; - "Submit new proposal": string; - "Submitting Proposal": string; - "Submitting Vote": string; - Succeeded: string; - Success: string; - Supply: string; - "Supplying {0} {1} and {2} {3}": (string | string[])[]; - Swap: string; - "Swap <0/> for exactly <1/>": string; - "Swap Anyway": string; - "Swap details": string; - "Swap exactly <0/> for <1/>": string; - "Swap failed: {0}": (string | string[])[]; - "Swap summary": string; - "Swapping {0} {1} for {2} {3}": (string | string[])[]; - "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; - "Tell us what you think \u2197": string; - "Thanks for being part of the Uniswap community <0/>": string; - "The % you will earn in fees.": string; - "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; - "The app fetches blockchain data from The Graph\u2019s hosted service.": string; - "The app fetches on-chain data and constructs contract calls with an Infura API.": string; - "The app fetches the optimal trade route from a Uniswap Labs server.": string; - "The app logs anonymized usage statistics in order to improve over time.": string; - "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; - "The cost of sending this transaction is more than half of the value of the input amount.": string; - "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; - "The estimated difference between the USD values of input and output amounts.": string; - "The input token cannot be transferred. There may be an issue with the input token.": string; - "The market price is outside your specified price range. Single-asset deposit only.": string; - "The most recent block number on this network. Prices update on every block.": string; - "The output token cannot be transferred. There may be an issue with the output token.": string; - "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; - "The price of this pool is within your selected range. Your position is currently earning fees.": string; - "The ratio of tokens you add will set the price of this pool.": string; - "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; - "There is no liquidity data.": string; - "This app uses the following third-party APIs:": string; - "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; - "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; - "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; - "This token is not supported in the Uniswap Labs app": string; - "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; - "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; - "Tip: Custom tokens are stored locally in your browser": string; - To: string; - "To (at least)": string; - "Token not supported": string; - Tokens: string; - "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; - "Top pools": string; - "Total deposited": string; - "Total deposits": string; - "Trade Route": string; - Trading: string; - "Transaction Settings": string; - "Transaction Submitted": string; - "Transaction completed in": string; - "Transaction deadline": string; - "Transaction pending": string; - "Transaction rejected.": string; - "Transaction submitted": string; - "Transfer Token": string; - "Try Again": string; - "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Turn On Expert Mode": string; - "UNI has arrived": string; - "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; - "UNI {0}/{1} Burned": (string | string[])[]; - "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; - "UNI-V2 {0}-{1}": (string | string[])[]; - "Unclaimed UNI": string; - "Unclaimed fees": string; - Undetermined: string; - "Unexpected error. Could not estimate gas for the swap.": string; - "Unexpected issue with estimating the gas. Please try again.": string; - "Uniswap Governance": string; - "Uniswap Labs' Terms of Service": string; - "Uniswap available in: <0>{0}": (string | string[])[]; - "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; - "Uniswap liquidity mining": string; - "Uniswap migration contract\u2197": string; - "Unknown Source": string; - "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; - "Unlock Votes": string; - "Unlock Voting": string; - "Unlocking Votes": string; - "Unsupported Asset": string; - "Unsupported Assets": string; - "Unsupported network\u2013switch to another to trade.": string; - Untitled: string; - Unwrap: string; - "Unwrap <0/> to {0}": (string | string[])[]; - "Update Delegation": string; - "Update list": string; - "Use the Uniswap Labs API to get faster quotes.": string; - User: string; - "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; - "V2 liquidity": string; - "V3 {0} Price:": (string | string[])[]; - "View accrued fees and analytics<0>\u2197": string; - "View list": string; - "View on Etherscan": string; - "View on Explorer": string; - "View transaction on Explorer": string; - Vote: string; - "Vote Against": string; - "Vote For": string; - "Vote against proposal {proposalId}": (string | string[])[]; - "Vote against proposal {proposalKey}": (string | string[])[]; - "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote for proposal {proposalId}": (string | string[])[]; - "Vote for proposal {proposalKey}": (string | string[])[]; - "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote to abstain on proposal {proposalId}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Voting ended {0}": (string | string[])[]; - "Voting ends approximately {0}": (string | string[])[]; - "Voting starts approximately {0}": (string | string[])[]; - "Waiting For Confirmation": string; - "Wallet Address or ENS name": string; - "Weekly Rewards": string; - "Welcome to team Unicorn :)": string; - "When you claim without withdrawing your liquidity remains in the mining pool.": string; - "When you withdraw, the contract will automagically claim UNI on your behalf!": string; - "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; - Withdraw: string; - "Withdraw & Claim": string; - "Withdraw deposited liquidity": string; - "Withdrawing {0} UNI-V2": (string | string[])[]; - "Withdrew UNI-V2!": string; - Wrap: string; - "Wrap <0/> to {0}": (string | string[])[]; - "Wrong Network": string; - "You already have an active or pending proposal": string; - "You are creating a pool": string; - "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; - "You are the first liquidity provider.": string; - "You can either vote on each proposal yourself or delegate your votes to a third party.": string; - "You can now trade {0}": (string | string[])[]; - "You don't have enough votes to submit a proposal": string; - "You don\u2019t have liquidity in this pool yet.": string; - "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; - "You may have lost your network connection.": string; - "You might consider waiting until the network fees go down to complete this transaction.": string; - "You must connect an account.": string; - "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; - "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; - "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; - "You will also collect fees earned from this position.": string; - "You will receive": string; - "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; - "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; - "Your V2 liquidity": string; - "Your active V3 liquidity positions will appear here.": string; - "Your liquidity deposits": string; - "Your pool share:": string; - "Your position": string; - "Your position has 0 liquidity, and is not earning fees.": string; - "Your position will appear here.": string; - "Your position will be 100% composed of {0} at this price": (string | string[])[]; - "Your position will be 100% {0} at this price.": (string | string[])[]; - "Your position will not earn fees or be used in trades until the market price moves into your range.": string; - "Your positions": string; - "Your rate": string; - "Your total pool tokens:": string; - "Your transaction cost will be much higher as it includes the gas to create the pool.": string; - "Your transaction may be frontrun": string; - "Your transaction may fail": string; - "Your transaction will revert if it has been pending for longer than this period of time.": string; - "Your transaction will revert if it is pending for more than this period of time.": string; - "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; - "Your transactions will appear here...": string; - "Your unclaimed UNI": string; - "after slippage": string; - confirm: string; - "for {0}": (string | string[])[]; - gwei: string; - "has socks emoji": string; - "here.": string; - "https:// or ipfs:// or ENS name": string; - minutes: string; - "via {0}": (string | string[])[]; - "via {0} token list": (string | string[])[]; - "{0, plural, one {Import token} other {Import tokens}}": (string | { - one: string; - other: string; - })[][]; - "{0}": string[][]; - "{0} %": (string | string[])[]; - "{0} <0/> per <1/>": (string | string[])[]; - "{0} Custom Tokens": (string | string[])[]; - "{0} Deposited": (string | string[])[]; - "{0} ETH": (string | string[])[]; - "{0} Fees Earned:": (string | string[])[]; - "{0} Pending": (string | string[])[]; - "{0} UNI": (string | string[])[]; - "{0} UNI / week": (string | string[])[]; - "{0} UNI-V2": (string | string[])[]; - "{0} UNI-V2 LP tokens available": (string | string[])[]; - "{0} Votes": (string | string[])[]; - "{0} per {1}": (string | string[])[]; - "{0} tokens": (string | string[])[]; - "{0} {1} Price:": (string | string[])[]; - "{0} {nativeCurrencySymbol}": (string | string[])[]; - "{0} \u2022 Added by user": (string | string[])[]; - "{0}%": (string | string[])[]; - "{0}% fee tier": (string | string[])[]; - "{0}% pool": (string | string[])[]; - "{0}% select": (string | string[])[]; - "{0}-{1} Liquidity Mining": (string | string[])[]; - "{0}/{1} LP NFT": (string | string[])[]; - "{0}/{1} LP Tokens": (string | string[])[]; - "{SOCKS_AMOUNT} UNI": (string | string[])[]; - "{USER_AMOUNT} UNI": (string | string[])[]; - "{activeTokensOnThisChain} tokens": (string | string[])[]; - "{integrator} fee": (string | string[])[]; - "{label} token bridge": (string | string[])[]; - "{min}m {sec}s": (string | string[])[]; - "{percentForSlider}%": (string | string[])[]; - "{sec}s": (string | string[])[]; - "{tokenB} per {tokenA}": (string | string[])[]; - "\u2190 Back to Pools Overview": string; -}; diff --git a/dist2/types/locales/ar-SA.d.ts b/dist2/types/locales/ar-SA.d.ts deleted file mode 100644 index 75120e0e5c9..00000000000 --- a/dist2/types/locales/ar-SA.d.ts +++ /dev/null @@ -1,593 +0,0 @@ -export const messages: { - "$-": string; - "$<0/>": string; - "${0}": (string | string[])[]; - "(${0})": (string | string[])[]; - "(View on Explorer)": string; - "(clear all)": string; - "(edit)": string; - "- Remove recipient": string; - "0 UNI / week": string; - "25%": string; - "50%": string; - "75%": string; - "<0/> All Proposals": string; - "<0/> Votes": string; - "<0>Account analytics and accrued fees<1> \u2197 ": string; - "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; - "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; - "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; - "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; - "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; - "<0>Unlock voting to prepare for the next proposal.": string; - "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; - "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; - About: string; - Accept: string; - Account: string; - Active: string; - Add: string; - "Add <0/> and <1/> to Uniswap V2": string; - "Add Delegate +": string; - "Add Liquidity": string; - "Add V2 Liquidity": string; - "Add liquidity.": string; - "Add more liquidity": string; - "Add {0} to Metamask <0/>": (string | string[])[]; - "Add {0}-{1} liquidity": (string | string[])[]; - "Add {0}/{1} V3 liquidity": (string | string[])[]; - "Added {0}": (string | string[])[]; - "Address has no available claim": string; - Against: string; - "Allow LP token migration": string; - "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; - "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; - Allowed: string; - Amount: string; - "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Approval pending <0/>": string; - Approve: string; - "Approve Token": string; - "Approve {0}": (string | string[])[]; - "Approve {0} first": (string | string[])[]; - Approved: string; - Approving: string; - "Approving {0}": (string | string[])[]; - Arbiscan: string; - "Arbitrum Bridge": string; - "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Are you sure?": string; - "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; - "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; - Auto: string; - "Auto Router API": string; - "Available to deposit: {0}": (string | string[])[]; - "Balance: {0}": (string | string[])[]; - "Best for exotic pairs.": string; - "Best for most pairs.": string; - "Best for stable pairs.": string; - "Best for very stable pairs.": string; - "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; - "Blocked address": string; - Bridge: string; - "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; - "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; - Canceled: string; - Change: string; - Charts: string; - "Check network status": string; - "Check out our v3 LP walkthrough and migration guides.": string; - Claim: string; - "Claim <0/> for {0}": (string | string[])[]; - "Claim UNI": string; - "Claim UNI Token": string; - "Claim UNI reward for {0}": (string | string[])[]; - "Claim fees": string; - "Claim your UNI tokens": string; - Claimed: string; - "Claimed UNI!": string; - "Claimed!": string; - Claiming: string; - "Claiming UNI": string; - "Claiming {0} UNI": (string | string[])[]; - "Clear All": string; - "Clear all": string; - Close: string; - Closed: string; - Collect: string; - "Collect as WETH": string; - "Collect fees": string; - "Collect {0}/{1} fees": (string | string[])[]; - Collected: string; - Collecting: string; - "Collecting fees": string; - "Collecting fees will withdraw currently available fees for you.": string; - Confirm: string; - "Confirm Supply": string; - "Confirm Swap": string; - "Confirm swap": string; - "Confirm this transaction in your wallet": string; - "Confirm transaction in wallet": string; - "Connect Wallet": string; - "Connect a wallet": string; - "Connect to a wallet to find pools": string; - "Connect to a wallet to view your V2 liquidity.": string; - "Connect to a wallet to view your liquidity.": string; - "Connect wallet to swap": string; - "Connected with {name}": (string | string[])[]; - Copied: string; - "Copy Address": string; - "Create Pool & Supply": string; - "Create Proposal": string; - "Create a pair": string; - "Create a pool": string; - "Create an issue on GitHub": string; - "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; - "Create pool.": string; - "Create {0}/{1} V3 pool": (string | string[])[]; - "Current price": string; - "Current {0} Price:": (string | string[])[]; - Custom: string; - "Dark Theme": string; - Defeated: string; - "Delegate Votes": string; - "Delegate voting power to {0}": (string | string[])[]; - "Delegated to:": string; - "Delegating votes": string; - Deposit: string; - "Deposit Amounts": string; - "Deposit UNI-V2 LP Tokens": string; - "Deposit liquidity": string; - "Deposit tokens to the {label} network.": (string | string[])[]; - "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; - "Deposited liquidity:": string; - "Deposited {0} UNI-V2": (string | string[])[]; - "Depositing Liquidity": string; - Description: string; - Detailed: string; - Details: string; - Disconnect: string; - Discord: string; - Dismiss: string; - Docs: string; - "Don\u2019t see one of your v2 positions? <0>Import it.": string; - "Earned UNI tokens represent voting shares in Uniswap governance.": string; - Edit: string; - "Efficiency Comparison": string; - "Enter a percent": string; - "Enter a recipient": string; - "Enter a valid slippage percentage": string; - "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; - "Enter an amount": string; - "Enter valid list location": string; - "Enter valid token address": string; - "Enter {0} amount": (string | string[])[]; - Error: string; - "Error connecting": string; - "Error connecting. Try refreshing the page.": string; - "Error details": string; - "Error importing list": string; - "Estimate may differ due to your wallet gas settings": string; - "Estimated network fee": string; - Etherscan: string; - Executed: string; - "Expanded results from inactive Token Lists": string; - "Expected Output": string; - "Expert Mode": string; - "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; - Expired: string; - "Explore Uniswap Analytics.": string; - "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; - "Fee Tier": string; - "Fee tier": string; - "Fetching best price...": string; - "Fetching best price\u2026": string; - For: string; - "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; - From: string; - "From (at most)": string; - "Full Range": string; - "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; - "Get support on Discord": string; - "Help Center": string; - Hide: string; - "Hide closed positions": string; - "High Price Impact": string; - "How this app uses APIs": string; - "I understand": string; - "If you purchase a token from this list, you may not be able to sell it back.": string; - Import: string; - "Import List": string; - "Import Pool": string; - "Import V2 Pool": string; - "Import at your own risk": string; - "In range": string; - "Increase Liquidity": string; - "Initial prices and pool share": string; - "Initializing...": string; - "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Install Metamask": string; - "Insufficient liquidity for this trade.": string; - "Insufficient {0}": (string | string[])[]; - "Insufficient {0} balance": (string | string[])[]; - "Interface Settings": string; - "Invalid pair": string; - "Invalid pair.": string; - "Invalid price input": string; - "Invalid range selected. The min price must be lower than the max price.": string; - "Invalid recipient": string; - Language: string; - Learn: string; - "Learn about providing liquidity": string; - "Learn more": string; - "Legal & Privacy": string; - "Light Theme": string; - Liquidity: string; - "Liquidity data not available.": string; - "Liquidity provider rewards": string; - "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - Lists: string; - Loaded: string; - Loading: string; - MAX: string; - Manage: string; - "Manage Liquidity in Rewards Pool": string; - "Manage Token Lists": string; - "Manage this pool.": string; - Max: string; - "Max Price": string; - "Max price": string; - "Max slippage": string; - "Max:": string; - "Maximum sent": string; - Menu: string; - Migrate: string; - "Migrate Liquidity to V3": string; - "Migrate V2 Liquidity": string; - "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; - "Migrate {0}/{1} liquidity to V3": (string | string[])[]; - Migrating: string; - "Min Price": string; - "Min price": string; - "Min:": string; - "Minimum received": string; - "Missing dependencies": string; - "Mock Toggle": string; - More: string; - "Network Fee": string; - "Network Warning": string; - "Network fees exceed 50% of the swap amount!": string; - "New Position": string; - "No V2 Liquidity found.": string; - "No active pools": string; - "No data": string; - "No description.": string; - "No liquidity found.": string; - "No pool found.": string; - "No proposals found.": string; - "No results found.": string; - "Not created": string; - OFF: string; - ON: string; - "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; - Off: string; - On: string; - "Once you are happy with the rate click supply to review.": string; - "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; - "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; - "Optimism Gateway": string; - "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Optimistic Etherscan": string; - "Out of range": string; - "Output is estimated.": string; - "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; - "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Output will be sent to <0>{0}": (string | string[])[]; - Owner: string; - "Participating pools": string; - Pending: string; - "Please confirm you would like to remove this list by typing REMOVE": string; - "Please connect to Layer 1 Ethereum": string; - "Please connect to a supported network in the dropdown menu or in your wallet.": string; - "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; - "Polygon Bridge": string; - Polygonscan: string; - Pool: string; - "Pool Found!": string; - "Pool Rate": string; - "Pool rate": string; - "Pool tokens in rewards pool:": string; - "Pooled {0}:": (string | string[])[]; - "Pools Overview": string; - Preview: string; - Price: string; - "Price Difference:": string; - "Price Impact": string; - "Price Impact Too High": string; - "Price Updated": string; - "Price impact": string; - "Price range": string; - "Price updated": string; - "Price:": string; - "Prices and pool share": string; - Proposal: string; - "Proposal Submitted": string; - "Proposal Title": string; - Proposals: string; - "Proposals submitted by community members will appear here.": string; - "Proposed Action": string; - Proposer: string; - "Protocol Disclaimer": string; - Queued: string; - Rates: string; - "Read more about UNI": string; - "Read more about Uniswap governance": string; - "Read more about providing liquidity": string; - "Read more about unsupported assets": string; - "Recent Transactions": string; - "Recent transactions": string; - Recipient: string; - "Reload the page": string; - Remove: string; - "Remove <0/> and <1/>": string; - "Remove Amount": string; - "Remove Delegate": string; - "Remove Liquidity": string; - "Remove list": string; - "Removing {0} {1} and {2} {3}": (string | string[])[]; - "Removing {0} {1} and{2} {3}": (string | string[])[]; - "Request Features": string; - Reset: string; - Return: string; - "Review swap": string; - "Search by token name or address": string; - "Search name or paste address": string; - "Select Pair": string; - "Select a network": string; - "Select a token": string; - "Select a token to find your v2 liquidity.": string; - "Select an action": string; - "Selected Range": string; - Self: string; - "Self Delegate": string; - "Set Price Range": string; - "Set Starting Price": string; - Settings: string; - "Share of Pool": string; - "Share of Pool:": string; - "Show Portis": string; - "Show closed positions": string; - Simple: string; - "Slippage tolerance": string; - "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; - "Something went wrong": string; - "Something went wrong.": string; - "Step 1. Get UNI-V2 Liquidity tokens": string; - "Submit new proposal": string; - "Submitting Proposal": string; - "Submitting Vote": string; - Succeeded: string; - Success: string; - Supply: string; - "Supplying {0} {1} and {2} {3}": (string | string[])[]; - Swap: string; - "Swap <0/> for exactly <1/>": string; - "Swap Anyway": string; - "Swap details": string; - "Swap exactly <0/> for <1/>": string; - "Swap failed: {0}": (string | string[])[]; - "Swap summary": string; - "Swapping {0} {1} for {2} {3}": (string | string[])[]; - "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; - "Tell us what you think \u2197": string; - "Thanks for being part of the Uniswap community <0/>": string; - "The % you will earn in fees.": string; - "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; - "The app fetches blockchain data from The Graph\u2019s hosted service.": string; - "The app fetches on-chain data and constructs contract calls with an Infura API.": string; - "The app fetches the optimal trade route from a Uniswap Labs server.": string; - "The app logs anonymized usage statistics in order to improve over time.": string; - "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; - "The cost of sending this transaction is more than half of the value of the input amount.": string; - "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; - "The estimated difference between the USD values of input and output amounts.": string; - "The input token cannot be transferred. There may be an issue with the input token.": string; - "The market price is outside your specified price range. Single-asset deposit only.": string; - "The most recent block number on this network. Prices update on every block.": string; - "The output token cannot be transferred. There may be an issue with the output token.": string; - "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; - "The price of this pool is within your selected range. Your position is currently earning fees.": string; - "The ratio of tokens you add will set the price of this pool.": string; - "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; - "There is no liquidity data.": string; - "This app uses the following third-party APIs:": string; - "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; - "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; - "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; - "This token is not supported in the Uniswap Labs app": string; - "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; - "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; - "Tip: Custom tokens are stored locally in your browser": string; - To: string; - "To (at least)": string; - "Token not supported": string; - Tokens: string; - "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; - "Top pools": string; - "Total deposited": string; - "Total deposits": string; - "Trade Route": string; - Trading: string; - "Transaction Settings": string; - "Transaction Submitted": string; - "Transaction completed in": string; - "Transaction deadline": string; - "Transaction pending": string; - "Transaction rejected.": string; - "Transaction submitted": string; - "Transfer Token": string; - "Try Again": string; - "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Turn On Expert Mode": string; - "UNI has arrived": string; - "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; - "UNI {0}/{1} Burned": (string | string[])[]; - "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; - "UNI-V2 {0}-{1}": (string | string[])[]; - "Unclaimed UNI": string; - "Unclaimed fees": string; - Undetermined: string; - "Unexpected error. Could not estimate gas for the swap.": string; - "Unexpected issue with estimating the gas. Please try again.": string; - "Uniswap Governance": string; - "Uniswap Labs' Terms of Service": string; - "Uniswap available in: <0>{0}": (string | string[])[]; - "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; - "Uniswap liquidity mining": string; - "Uniswap migration contract\u2197": string; - "Unknown Source": string; - "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; - "Unlock Votes": string; - "Unlock Voting": string; - "Unlocking Votes": string; - "Unsupported Asset": string; - "Unsupported Assets": string; - "Unsupported network\u2013switch to another to trade.": string; - Untitled: string; - Unwrap: string; - "Unwrap <0/> to {0}": (string | string[])[]; - "Update Delegation": string; - "Update list": string; - "Use the Uniswap Labs API to get faster quotes.": string; - User: string; - "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; - "V2 liquidity": string; - "V3 {0} Price:": (string | string[])[]; - "View accrued fees and analytics<0>\u2197": string; - "View list": string; - "View on Etherscan": string; - "View on Explorer": string; - "View transaction on Explorer": string; - Vote: string; - "Vote Against": string; - "Vote For": string; - "Vote against proposal {proposalId}": (string | string[])[]; - "Vote against proposal {proposalKey}": (string | string[])[]; - "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote for proposal {proposalId}": (string | string[])[]; - "Vote for proposal {proposalKey}": (string | string[])[]; - "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote to abstain on proposal {proposalId}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Voting ended {0}": (string | string[])[]; - "Voting ends approximately {0}": (string | string[])[]; - "Voting starts approximately {0}": (string | string[])[]; - "Waiting For Confirmation": string; - "Wallet Address or ENS name": string; - "Weekly Rewards": string; - "Welcome to team Unicorn :)": string; - "When you claim without withdrawing your liquidity remains in the mining pool.": string; - "When you withdraw, the contract will automagically claim UNI on your behalf!": string; - "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; - Withdraw: string; - "Withdraw & Claim": string; - "Withdraw deposited liquidity": string; - "Withdrawing {0} UNI-V2": (string | string[])[]; - "Withdrew UNI-V2!": string; - Wrap: string; - "Wrap <0/> to {0}": (string | string[])[]; - "Wrong Network": string; - "You already have an active or pending proposal": string; - "You are creating a pool": string; - "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; - "You are the first liquidity provider.": string; - "You can either vote on each proposal yourself or delegate your votes to a third party.": string; - "You can now trade {0}": (string | string[])[]; - "You don't have enough votes to submit a proposal": string; - "You don\u2019t have liquidity in this pool yet.": string; - "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; - "You may have lost your network connection.": string; - "You might consider waiting until the network fees go down to complete this transaction.": string; - "You must connect an account.": string; - "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; - "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; - "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; - "You will also collect fees earned from this position.": string; - "You will receive": string; - "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; - "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; - "Your V2 liquidity": string; - "Your active V3 liquidity positions will appear here.": string; - "Your liquidity deposits": string; - "Your pool share:": string; - "Your position": string; - "Your position has 0 liquidity, and is not earning fees.": string; - "Your position will appear here.": string; - "Your position will be 100% composed of {0} at this price": (string | string[])[]; - "Your position will be 100% {0} at this price.": (string | string[])[]; - "Your position will not earn fees or be used in trades until the market price moves into your range.": string; - "Your positions": string; - "Your rate": string; - "Your total pool tokens:": string; - "Your transaction cost will be much higher as it includes the gas to create the pool.": string; - "Your transaction may be frontrun": string; - "Your transaction may fail": string; - "Your transaction will revert if it has been pending for longer than this period of time.": string; - "Your transaction will revert if it is pending for more than this period of time.": string; - "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; - "Your transactions will appear here...": string; - "Your unclaimed UNI": string; - "after slippage": string; - confirm: string; - "for {0}": (string | string[])[]; - gwei: string; - "has socks emoji": string; - "here.": string; - "https:// or ipfs:// or ENS name": string; - minutes: string; - "via {0}": (string | string[])[]; - "via {0} token list": (string | string[])[]; - "{0, plural, one {Import token} other {Import tokens}}": (string | { - one: string; - other: string; - })[][]; - "{0}": string[][]; - "{0} %": (string | string[])[]; - "{0} <0/> per <1/>": (string | string[])[]; - "{0} Custom Tokens": (string | string[])[]; - "{0} Deposited": (string | string[])[]; - "{0} ETH": (string | string[])[]; - "{0} Fees Earned:": (string | string[])[]; - "{0} Pending": (string | string[])[]; - "{0} UNI": (string | string[])[]; - "{0} UNI / week": (string | string[])[]; - "{0} UNI-V2": (string | string[])[]; - "{0} UNI-V2 LP tokens available": (string | string[])[]; - "{0} Votes": (string | string[])[]; - "{0} per {1}": (string | string[])[]; - "{0} tokens": (string | string[])[]; - "{0} {1} Price:": (string | string[])[]; - "{0} {nativeCurrencySymbol}": (string | string[])[]; - "{0} \u2022 Added by user": (string | string[])[]; - "{0}%": (string | string[])[]; - "{0}% fee tier": (string | string[])[]; - "{0}% pool": (string | string[])[]; - "{0}% select": (string | string[])[]; - "{0}-{1} Liquidity Mining": (string | string[])[]; - "{0}/{1} LP NFT": (string | string[])[]; - "{0}/{1} LP Tokens": (string | string[])[]; - "{SOCKS_AMOUNT} UNI": (string | string[])[]; - "{USER_AMOUNT} UNI": (string | string[])[]; - "{activeTokensOnThisChain} tokens": (string | string[])[]; - "{integrator} fee": (string | string[])[]; - "{label} token bridge": (string | string[])[]; - "{min}m {sec}s": (string | string[])[]; - "{percentForSlider}%": (string | string[])[]; - "{sec}s": (string | string[])[]; - "{tokenB} per {tokenA}": (string | string[])[]; - "\u2190 Back to Pools Overview": string; -}; diff --git a/dist2/types/locales/ca-ES.d.ts b/dist2/types/locales/ca-ES.d.ts deleted file mode 100644 index 75120e0e5c9..00000000000 --- a/dist2/types/locales/ca-ES.d.ts +++ /dev/null @@ -1,593 +0,0 @@ -export const messages: { - "$-": string; - "$<0/>": string; - "${0}": (string | string[])[]; - "(${0})": (string | string[])[]; - "(View on Explorer)": string; - "(clear all)": string; - "(edit)": string; - "- Remove recipient": string; - "0 UNI / week": string; - "25%": string; - "50%": string; - "75%": string; - "<0/> All Proposals": string; - "<0/> Votes": string; - "<0>Account analytics and accrued fees<1> \u2197 ": string; - "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; - "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; - "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; - "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; - "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; - "<0>Unlock voting to prepare for the next proposal.": string; - "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; - "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; - About: string; - Accept: string; - Account: string; - Active: string; - Add: string; - "Add <0/> and <1/> to Uniswap V2": string; - "Add Delegate +": string; - "Add Liquidity": string; - "Add V2 Liquidity": string; - "Add liquidity.": string; - "Add more liquidity": string; - "Add {0} to Metamask <0/>": (string | string[])[]; - "Add {0}-{1} liquidity": (string | string[])[]; - "Add {0}/{1} V3 liquidity": (string | string[])[]; - "Added {0}": (string | string[])[]; - "Address has no available claim": string; - Against: string; - "Allow LP token migration": string; - "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; - "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; - Allowed: string; - Amount: string; - "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Approval pending <0/>": string; - Approve: string; - "Approve Token": string; - "Approve {0}": (string | string[])[]; - "Approve {0} first": (string | string[])[]; - Approved: string; - Approving: string; - "Approving {0}": (string | string[])[]; - Arbiscan: string; - "Arbitrum Bridge": string; - "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Are you sure?": string; - "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; - "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; - Auto: string; - "Auto Router API": string; - "Available to deposit: {0}": (string | string[])[]; - "Balance: {0}": (string | string[])[]; - "Best for exotic pairs.": string; - "Best for most pairs.": string; - "Best for stable pairs.": string; - "Best for very stable pairs.": string; - "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; - "Blocked address": string; - Bridge: string; - "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; - "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; - Canceled: string; - Change: string; - Charts: string; - "Check network status": string; - "Check out our v3 LP walkthrough and migration guides.": string; - Claim: string; - "Claim <0/> for {0}": (string | string[])[]; - "Claim UNI": string; - "Claim UNI Token": string; - "Claim UNI reward for {0}": (string | string[])[]; - "Claim fees": string; - "Claim your UNI tokens": string; - Claimed: string; - "Claimed UNI!": string; - "Claimed!": string; - Claiming: string; - "Claiming UNI": string; - "Claiming {0} UNI": (string | string[])[]; - "Clear All": string; - "Clear all": string; - Close: string; - Closed: string; - Collect: string; - "Collect as WETH": string; - "Collect fees": string; - "Collect {0}/{1} fees": (string | string[])[]; - Collected: string; - Collecting: string; - "Collecting fees": string; - "Collecting fees will withdraw currently available fees for you.": string; - Confirm: string; - "Confirm Supply": string; - "Confirm Swap": string; - "Confirm swap": string; - "Confirm this transaction in your wallet": string; - "Confirm transaction in wallet": string; - "Connect Wallet": string; - "Connect a wallet": string; - "Connect to a wallet to find pools": string; - "Connect to a wallet to view your V2 liquidity.": string; - "Connect to a wallet to view your liquidity.": string; - "Connect wallet to swap": string; - "Connected with {name}": (string | string[])[]; - Copied: string; - "Copy Address": string; - "Create Pool & Supply": string; - "Create Proposal": string; - "Create a pair": string; - "Create a pool": string; - "Create an issue on GitHub": string; - "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; - "Create pool.": string; - "Create {0}/{1} V3 pool": (string | string[])[]; - "Current price": string; - "Current {0} Price:": (string | string[])[]; - Custom: string; - "Dark Theme": string; - Defeated: string; - "Delegate Votes": string; - "Delegate voting power to {0}": (string | string[])[]; - "Delegated to:": string; - "Delegating votes": string; - Deposit: string; - "Deposit Amounts": string; - "Deposit UNI-V2 LP Tokens": string; - "Deposit liquidity": string; - "Deposit tokens to the {label} network.": (string | string[])[]; - "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; - "Deposited liquidity:": string; - "Deposited {0} UNI-V2": (string | string[])[]; - "Depositing Liquidity": string; - Description: string; - Detailed: string; - Details: string; - Disconnect: string; - Discord: string; - Dismiss: string; - Docs: string; - "Don\u2019t see one of your v2 positions? <0>Import it.": string; - "Earned UNI tokens represent voting shares in Uniswap governance.": string; - Edit: string; - "Efficiency Comparison": string; - "Enter a percent": string; - "Enter a recipient": string; - "Enter a valid slippage percentage": string; - "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; - "Enter an amount": string; - "Enter valid list location": string; - "Enter valid token address": string; - "Enter {0} amount": (string | string[])[]; - Error: string; - "Error connecting": string; - "Error connecting. Try refreshing the page.": string; - "Error details": string; - "Error importing list": string; - "Estimate may differ due to your wallet gas settings": string; - "Estimated network fee": string; - Etherscan: string; - Executed: string; - "Expanded results from inactive Token Lists": string; - "Expected Output": string; - "Expert Mode": string; - "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; - Expired: string; - "Explore Uniswap Analytics.": string; - "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; - "Fee Tier": string; - "Fee tier": string; - "Fetching best price...": string; - "Fetching best price\u2026": string; - For: string; - "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; - From: string; - "From (at most)": string; - "Full Range": string; - "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; - "Get support on Discord": string; - "Help Center": string; - Hide: string; - "Hide closed positions": string; - "High Price Impact": string; - "How this app uses APIs": string; - "I understand": string; - "If you purchase a token from this list, you may not be able to sell it back.": string; - Import: string; - "Import List": string; - "Import Pool": string; - "Import V2 Pool": string; - "Import at your own risk": string; - "In range": string; - "Increase Liquidity": string; - "Initial prices and pool share": string; - "Initializing...": string; - "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Install Metamask": string; - "Insufficient liquidity for this trade.": string; - "Insufficient {0}": (string | string[])[]; - "Insufficient {0} balance": (string | string[])[]; - "Interface Settings": string; - "Invalid pair": string; - "Invalid pair.": string; - "Invalid price input": string; - "Invalid range selected. The min price must be lower than the max price.": string; - "Invalid recipient": string; - Language: string; - Learn: string; - "Learn about providing liquidity": string; - "Learn more": string; - "Legal & Privacy": string; - "Light Theme": string; - Liquidity: string; - "Liquidity data not available.": string; - "Liquidity provider rewards": string; - "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - Lists: string; - Loaded: string; - Loading: string; - MAX: string; - Manage: string; - "Manage Liquidity in Rewards Pool": string; - "Manage Token Lists": string; - "Manage this pool.": string; - Max: string; - "Max Price": string; - "Max price": string; - "Max slippage": string; - "Max:": string; - "Maximum sent": string; - Menu: string; - Migrate: string; - "Migrate Liquidity to V3": string; - "Migrate V2 Liquidity": string; - "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; - "Migrate {0}/{1} liquidity to V3": (string | string[])[]; - Migrating: string; - "Min Price": string; - "Min price": string; - "Min:": string; - "Minimum received": string; - "Missing dependencies": string; - "Mock Toggle": string; - More: string; - "Network Fee": string; - "Network Warning": string; - "Network fees exceed 50% of the swap amount!": string; - "New Position": string; - "No V2 Liquidity found.": string; - "No active pools": string; - "No data": string; - "No description.": string; - "No liquidity found.": string; - "No pool found.": string; - "No proposals found.": string; - "No results found.": string; - "Not created": string; - OFF: string; - ON: string; - "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; - Off: string; - On: string; - "Once you are happy with the rate click supply to review.": string; - "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; - "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; - "Optimism Gateway": string; - "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Optimistic Etherscan": string; - "Out of range": string; - "Output is estimated.": string; - "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; - "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Output will be sent to <0>{0}": (string | string[])[]; - Owner: string; - "Participating pools": string; - Pending: string; - "Please confirm you would like to remove this list by typing REMOVE": string; - "Please connect to Layer 1 Ethereum": string; - "Please connect to a supported network in the dropdown menu or in your wallet.": string; - "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; - "Polygon Bridge": string; - Polygonscan: string; - Pool: string; - "Pool Found!": string; - "Pool Rate": string; - "Pool rate": string; - "Pool tokens in rewards pool:": string; - "Pooled {0}:": (string | string[])[]; - "Pools Overview": string; - Preview: string; - Price: string; - "Price Difference:": string; - "Price Impact": string; - "Price Impact Too High": string; - "Price Updated": string; - "Price impact": string; - "Price range": string; - "Price updated": string; - "Price:": string; - "Prices and pool share": string; - Proposal: string; - "Proposal Submitted": string; - "Proposal Title": string; - Proposals: string; - "Proposals submitted by community members will appear here.": string; - "Proposed Action": string; - Proposer: string; - "Protocol Disclaimer": string; - Queued: string; - Rates: string; - "Read more about UNI": string; - "Read more about Uniswap governance": string; - "Read more about providing liquidity": string; - "Read more about unsupported assets": string; - "Recent Transactions": string; - "Recent transactions": string; - Recipient: string; - "Reload the page": string; - Remove: string; - "Remove <0/> and <1/>": string; - "Remove Amount": string; - "Remove Delegate": string; - "Remove Liquidity": string; - "Remove list": string; - "Removing {0} {1} and {2} {3}": (string | string[])[]; - "Removing {0} {1} and{2} {3}": (string | string[])[]; - "Request Features": string; - Reset: string; - Return: string; - "Review swap": string; - "Search by token name or address": string; - "Search name or paste address": string; - "Select Pair": string; - "Select a network": string; - "Select a token": string; - "Select a token to find your v2 liquidity.": string; - "Select an action": string; - "Selected Range": string; - Self: string; - "Self Delegate": string; - "Set Price Range": string; - "Set Starting Price": string; - Settings: string; - "Share of Pool": string; - "Share of Pool:": string; - "Show Portis": string; - "Show closed positions": string; - Simple: string; - "Slippage tolerance": string; - "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; - "Something went wrong": string; - "Something went wrong.": string; - "Step 1. Get UNI-V2 Liquidity tokens": string; - "Submit new proposal": string; - "Submitting Proposal": string; - "Submitting Vote": string; - Succeeded: string; - Success: string; - Supply: string; - "Supplying {0} {1} and {2} {3}": (string | string[])[]; - Swap: string; - "Swap <0/> for exactly <1/>": string; - "Swap Anyway": string; - "Swap details": string; - "Swap exactly <0/> for <1/>": string; - "Swap failed: {0}": (string | string[])[]; - "Swap summary": string; - "Swapping {0} {1} for {2} {3}": (string | string[])[]; - "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; - "Tell us what you think \u2197": string; - "Thanks for being part of the Uniswap community <0/>": string; - "The % you will earn in fees.": string; - "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; - "The app fetches blockchain data from The Graph\u2019s hosted service.": string; - "The app fetches on-chain data and constructs contract calls with an Infura API.": string; - "The app fetches the optimal trade route from a Uniswap Labs server.": string; - "The app logs anonymized usage statistics in order to improve over time.": string; - "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; - "The cost of sending this transaction is more than half of the value of the input amount.": string; - "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; - "The estimated difference between the USD values of input and output amounts.": string; - "The input token cannot be transferred. There may be an issue with the input token.": string; - "The market price is outside your specified price range. Single-asset deposit only.": string; - "The most recent block number on this network. Prices update on every block.": string; - "The output token cannot be transferred. There may be an issue with the output token.": string; - "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; - "The price of this pool is within your selected range. Your position is currently earning fees.": string; - "The ratio of tokens you add will set the price of this pool.": string; - "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; - "There is no liquidity data.": string; - "This app uses the following third-party APIs:": string; - "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; - "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; - "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; - "This token is not supported in the Uniswap Labs app": string; - "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; - "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; - "Tip: Custom tokens are stored locally in your browser": string; - To: string; - "To (at least)": string; - "Token not supported": string; - Tokens: string; - "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; - "Top pools": string; - "Total deposited": string; - "Total deposits": string; - "Trade Route": string; - Trading: string; - "Transaction Settings": string; - "Transaction Submitted": string; - "Transaction completed in": string; - "Transaction deadline": string; - "Transaction pending": string; - "Transaction rejected.": string; - "Transaction submitted": string; - "Transfer Token": string; - "Try Again": string; - "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Turn On Expert Mode": string; - "UNI has arrived": string; - "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; - "UNI {0}/{1} Burned": (string | string[])[]; - "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; - "UNI-V2 {0}-{1}": (string | string[])[]; - "Unclaimed UNI": string; - "Unclaimed fees": string; - Undetermined: string; - "Unexpected error. Could not estimate gas for the swap.": string; - "Unexpected issue with estimating the gas. Please try again.": string; - "Uniswap Governance": string; - "Uniswap Labs' Terms of Service": string; - "Uniswap available in: <0>{0}": (string | string[])[]; - "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; - "Uniswap liquidity mining": string; - "Uniswap migration contract\u2197": string; - "Unknown Source": string; - "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; - "Unlock Votes": string; - "Unlock Voting": string; - "Unlocking Votes": string; - "Unsupported Asset": string; - "Unsupported Assets": string; - "Unsupported network\u2013switch to another to trade.": string; - Untitled: string; - Unwrap: string; - "Unwrap <0/> to {0}": (string | string[])[]; - "Update Delegation": string; - "Update list": string; - "Use the Uniswap Labs API to get faster quotes.": string; - User: string; - "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; - "V2 liquidity": string; - "V3 {0} Price:": (string | string[])[]; - "View accrued fees and analytics<0>\u2197": string; - "View list": string; - "View on Etherscan": string; - "View on Explorer": string; - "View transaction on Explorer": string; - Vote: string; - "Vote Against": string; - "Vote For": string; - "Vote against proposal {proposalId}": (string | string[])[]; - "Vote against proposal {proposalKey}": (string | string[])[]; - "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote for proposal {proposalId}": (string | string[])[]; - "Vote for proposal {proposalKey}": (string | string[])[]; - "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote to abstain on proposal {proposalId}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Voting ended {0}": (string | string[])[]; - "Voting ends approximately {0}": (string | string[])[]; - "Voting starts approximately {0}": (string | string[])[]; - "Waiting For Confirmation": string; - "Wallet Address or ENS name": string; - "Weekly Rewards": string; - "Welcome to team Unicorn :)": string; - "When you claim without withdrawing your liquidity remains in the mining pool.": string; - "When you withdraw, the contract will automagically claim UNI on your behalf!": string; - "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; - Withdraw: string; - "Withdraw & Claim": string; - "Withdraw deposited liquidity": string; - "Withdrawing {0} UNI-V2": (string | string[])[]; - "Withdrew UNI-V2!": string; - Wrap: string; - "Wrap <0/> to {0}": (string | string[])[]; - "Wrong Network": string; - "You already have an active or pending proposal": string; - "You are creating a pool": string; - "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; - "You are the first liquidity provider.": string; - "You can either vote on each proposal yourself or delegate your votes to a third party.": string; - "You can now trade {0}": (string | string[])[]; - "You don't have enough votes to submit a proposal": string; - "You don\u2019t have liquidity in this pool yet.": string; - "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; - "You may have lost your network connection.": string; - "You might consider waiting until the network fees go down to complete this transaction.": string; - "You must connect an account.": string; - "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; - "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; - "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; - "You will also collect fees earned from this position.": string; - "You will receive": string; - "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; - "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; - "Your V2 liquidity": string; - "Your active V3 liquidity positions will appear here.": string; - "Your liquidity deposits": string; - "Your pool share:": string; - "Your position": string; - "Your position has 0 liquidity, and is not earning fees.": string; - "Your position will appear here.": string; - "Your position will be 100% composed of {0} at this price": (string | string[])[]; - "Your position will be 100% {0} at this price.": (string | string[])[]; - "Your position will not earn fees or be used in trades until the market price moves into your range.": string; - "Your positions": string; - "Your rate": string; - "Your total pool tokens:": string; - "Your transaction cost will be much higher as it includes the gas to create the pool.": string; - "Your transaction may be frontrun": string; - "Your transaction may fail": string; - "Your transaction will revert if it has been pending for longer than this period of time.": string; - "Your transaction will revert if it is pending for more than this period of time.": string; - "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; - "Your transactions will appear here...": string; - "Your unclaimed UNI": string; - "after slippage": string; - confirm: string; - "for {0}": (string | string[])[]; - gwei: string; - "has socks emoji": string; - "here.": string; - "https:// or ipfs:// or ENS name": string; - minutes: string; - "via {0}": (string | string[])[]; - "via {0} token list": (string | string[])[]; - "{0, plural, one {Import token} other {Import tokens}}": (string | { - one: string; - other: string; - })[][]; - "{0}": string[][]; - "{0} %": (string | string[])[]; - "{0} <0/> per <1/>": (string | string[])[]; - "{0} Custom Tokens": (string | string[])[]; - "{0} Deposited": (string | string[])[]; - "{0} ETH": (string | string[])[]; - "{0} Fees Earned:": (string | string[])[]; - "{0} Pending": (string | string[])[]; - "{0} UNI": (string | string[])[]; - "{0} UNI / week": (string | string[])[]; - "{0} UNI-V2": (string | string[])[]; - "{0} UNI-V2 LP tokens available": (string | string[])[]; - "{0} Votes": (string | string[])[]; - "{0} per {1}": (string | string[])[]; - "{0} tokens": (string | string[])[]; - "{0} {1} Price:": (string | string[])[]; - "{0} {nativeCurrencySymbol}": (string | string[])[]; - "{0} \u2022 Added by user": (string | string[])[]; - "{0}%": (string | string[])[]; - "{0}% fee tier": (string | string[])[]; - "{0}% pool": (string | string[])[]; - "{0}% select": (string | string[])[]; - "{0}-{1} Liquidity Mining": (string | string[])[]; - "{0}/{1} LP NFT": (string | string[])[]; - "{0}/{1} LP Tokens": (string | string[])[]; - "{SOCKS_AMOUNT} UNI": (string | string[])[]; - "{USER_AMOUNT} UNI": (string | string[])[]; - "{activeTokensOnThisChain} tokens": (string | string[])[]; - "{integrator} fee": (string | string[])[]; - "{label} token bridge": (string | string[])[]; - "{min}m {sec}s": (string | string[])[]; - "{percentForSlider}%": (string | string[])[]; - "{sec}s": (string | string[])[]; - "{tokenB} per {tokenA}": (string | string[])[]; - "\u2190 Back to Pools Overview": string; -}; diff --git a/dist2/types/locales/cs-CZ.d.ts b/dist2/types/locales/cs-CZ.d.ts deleted file mode 100644 index 75120e0e5c9..00000000000 --- a/dist2/types/locales/cs-CZ.d.ts +++ /dev/null @@ -1,593 +0,0 @@ -export const messages: { - "$-": string; - "$<0/>": string; - "${0}": (string | string[])[]; - "(${0})": (string | string[])[]; - "(View on Explorer)": string; - "(clear all)": string; - "(edit)": string; - "- Remove recipient": string; - "0 UNI / week": string; - "25%": string; - "50%": string; - "75%": string; - "<0/> All Proposals": string; - "<0/> Votes": string; - "<0>Account analytics and accrued fees<1> \u2197 ": string; - "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; - "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; - "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; - "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; - "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; - "<0>Unlock voting to prepare for the next proposal.": string; - "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; - "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; - About: string; - Accept: string; - Account: string; - Active: string; - Add: string; - "Add <0/> and <1/> to Uniswap V2": string; - "Add Delegate +": string; - "Add Liquidity": string; - "Add V2 Liquidity": string; - "Add liquidity.": string; - "Add more liquidity": string; - "Add {0} to Metamask <0/>": (string | string[])[]; - "Add {0}-{1} liquidity": (string | string[])[]; - "Add {0}/{1} V3 liquidity": (string | string[])[]; - "Added {0}": (string | string[])[]; - "Address has no available claim": string; - Against: string; - "Allow LP token migration": string; - "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; - "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; - Allowed: string; - Amount: string; - "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Approval pending <0/>": string; - Approve: string; - "Approve Token": string; - "Approve {0}": (string | string[])[]; - "Approve {0} first": (string | string[])[]; - Approved: string; - Approving: string; - "Approving {0}": (string | string[])[]; - Arbiscan: string; - "Arbitrum Bridge": string; - "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Are you sure?": string; - "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; - "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; - Auto: string; - "Auto Router API": string; - "Available to deposit: {0}": (string | string[])[]; - "Balance: {0}": (string | string[])[]; - "Best for exotic pairs.": string; - "Best for most pairs.": string; - "Best for stable pairs.": string; - "Best for very stable pairs.": string; - "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; - "Blocked address": string; - Bridge: string; - "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; - "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; - Canceled: string; - Change: string; - Charts: string; - "Check network status": string; - "Check out our v3 LP walkthrough and migration guides.": string; - Claim: string; - "Claim <0/> for {0}": (string | string[])[]; - "Claim UNI": string; - "Claim UNI Token": string; - "Claim UNI reward for {0}": (string | string[])[]; - "Claim fees": string; - "Claim your UNI tokens": string; - Claimed: string; - "Claimed UNI!": string; - "Claimed!": string; - Claiming: string; - "Claiming UNI": string; - "Claiming {0} UNI": (string | string[])[]; - "Clear All": string; - "Clear all": string; - Close: string; - Closed: string; - Collect: string; - "Collect as WETH": string; - "Collect fees": string; - "Collect {0}/{1} fees": (string | string[])[]; - Collected: string; - Collecting: string; - "Collecting fees": string; - "Collecting fees will withdraw currently available fees for you.": string; - Confirm: string; - "Confirm Supply": string; - "Confirm Swap": string; - "Confirm swap": string; - "Confirm this transaction in your wallet": string; - "Confirm transaction in wallet": string; - "Connect Wallet": string; - "Connect a wallet": string; - "Connect to a wallet to find pools": string; - "Connect to a wallet to view your V2 liquidity.": string; - "Connect to a wallet to view your liquidity.": string; - "Connect wallet to swap": string; - "Connected with {name}": (string | string[])[]; - Copied: string; - "Copy Address": string; - "Create Pool & Supply": string; - "Create Proposal": string; - "Create a pair": string; - "Create a pool": string; - "Create an issue on GitHub": string; - "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; - "Create pool.": string; - "Create {0}/{1} V3 pool": (string | string[])[]; - "Current price": string; - "Current {0} Price:": (string | string[])[]; - Custom: string; - "Dark Theme": string; - Defeated: string; - "Delegate Votes": string; - "Delegate voting power to {0}": (string | string[])[]; - "Delegated to:": string; - "Delegating votes": string; - Deposit: string; - "Deposit Amounts": string; - "Deposit UNI-V2 LP Tokens": string; - "Deposit liquidity": string; - "Deposit tokens to the {label} network.": (string | string[])[]; - "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; - "Deposited liquidity:": string; - "Deposited {0} UNI-V2": (string | string[])[]; - "Depositing Liquidity": string; - Description: string; - Detailed: string; - Details: string; - Disconnect: string; - Discord: string; - Dismiss: string; - Docs: string; - "Don\u2019t see one of your v2 positions? <0>Import it.": string; - "Earned UNI tokens represent voting shares in Uniswap governance.": string; - Edit: string; - "Efficiency Comparison": string; - "Enter a percent": string; - "Enter a recipient": string; - "Enter a valid slippage percentage": string; - "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; - "Enter an amount": string; - "Enter valid list location": string; - "Enter valid token address": string; - "Enter {0} amount": (string | string[])[]; - Error: string; - "Error connecting": string; - "Error connecting. Try refreshing the page.": string; - "Error details": string; - "Error importing list": string; - "Estimate may differ due to your wallet gas settings": string; - "Estimated network fee": string; - Etherscan: string; - Executed: string; - "Expanded results from inactive Token Lists": string; - "Expected Output": string; - "Expert Mode": string; - "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; - Expired: string; - "Explore Uniswap Analytics.": string; - "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; - "Fee Tier": string; - "Fee tier": string; - "Fetching best price...": string; - "Fetching best price\u2026": string; - For: string; - "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; - From: string; - "From (at most)": string; - "Full Range": string; - "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; - "Get support on Discord": string; - "Help Center": string; - Hide: string; - "Hide closed positions": string; - "High Price Impact": string; - "How this app uses APIs": string; - "I understand": string; - "If you purchase a token from this list, you may not be able to sell it back.": string; - Import: string; - "Import List": string; - "Import Pool": string; - "Import V2 Pool": string; - "Import at your own risk": string; - "In range": string; - "Increase Liquidity": string; - "Initial prices and pool share": string; - "Initializing...": string; - "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Install Metamask": string; - "Insufficient liquidity for this trade.": string; - "Insufficient {0}": (string | string[])[]; - "Insufficient {0} balance": (string | string[])[]; - "Interface Settings": string; - "Invalid pair": string; - "Invalid pair.": string; - "Invalid price input": string; - "Invalid range selected. The min price must be lower than the max price.": string; - "Invalid recipient": string; - Language: string; - Learn: string; - "Learn about providing liquidity": string; - "Learn more": string; - "Legal & Privacy": string; - "Light Theme": string; - Liquidity: string; - "Liquidity data not available.": string; - "Liquidity provider rewards": string; - "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - Lists: string; - Loaded: string; - Loading: string; - MAX: string; - Manage: string; - "Manage Liquidity in Rewards Pool": string; - "Manage Token Lists": string; - "Manage this pool.": string; - Max: string; - "Max Price": string; - "Max price": string; - "Max slippage": string; - "Max:": string; - "Maximum sent": string; - Menu: string; - Migrate: string; - "Migrate Liquidity to V3": string; - "Migrate V2 Liquidity": string; - "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; - "Migrate {0}/{1} liquidity to V3": (string | string[])[]; - Migrating: string; - "Min Price": string; - "Min price": string; - "Min:": string; - "Minimum received": string; - "Missing dependencies": string; - "Mock Toggle": string; - More: string; - "Network Fee": string; - "Network Warning": string; - "Network fees exceed 50% of the swap amount!": string; - "New Position": string; - "No V2 Liquidity found.": string; - "No active pools": string; - "No data": string; - "No description.": string; - "No liquidity found.": string; - "No pool found.": string; - "No proposals found.": string; - "No results found.": string; - "Not created": string; - OFF: string; - ON: string; - "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; - Off: string; - On: string; - "Once you are happy with the rate click supply to review.": string; - "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; - "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; - "Optimism Gateway": string; - "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Optimistic Etherscan": string; - "Out of range": string; - "Output is estimated.": string; - "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; - "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Output will be sent to <0>{0}": (string | string[])[]; - Owner: string; - "Participating pools": string; - Pending: string; - "Please confirm you would like to remove this list by typing REMOVE": string; - "Please connect to Layer 1 Ethereum": string; - "Please connect to a supported network in the dropdown menu or in your wallet.": string; - "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; - "Polygon Bridge": string; - Polygonscan: string; - Pool: string; - "Pool Found!": string; - "Pool Rate": string; - "Pool rate": string; - "Pool tokens in rewards pool:": string; - "Pooled {0}:": (string | string[])[]; - "Pools Overview": string; - Preview: string; - Price: string; - "Price Difference:": string; - "Price Impact": string; - "Price Impact Too High": string; - "Price Updated": string; - "Price impact": string; - "Price range": string; - "Price updated": string; - "Price:": string; - "Prices and pool share": string; - Proposal: string; - "Proposal Submitted": string; - "Proposal Title": string; - Proposals: string; - "Proposals submitted by community members will appear here.": string; - "Proposed Action": string; - Proposer: string; - "Protocol Disclaimer": string; - Queued: string; - Rates: string; - "Read more about UNI": string; - "Read more about Uniswap governance": string; - "Read more about providing liquidity": string; - "Read more about unsupported assets": string; - "Recent Transactions": string; - "Recent transactions": string; - Recipient: string; - "Reload the page": string; - Remove: string; - "Remove <0/> and <1/>": string; - "Remove Amount": string; - "Remove Delegate": string; - "Remove Liquidity": string; - "Remove list": string; - "Removing {0} {1} and {2} {3}": (string | string[])[]; - "Removing {0} {1} and{2} {3}": (string | string[])[]; - "Request Features": string; - Reset: string; - Return: string; - "Review swap": string; - "Search by token name or address": string; - "Search name or paste address": string; - "Select Pair": string; - "Select a network": string; - "Select a token": string; - "Select a token to find your v2 liquidity.": string; - "Select an action": string; - "Selected Range": string; - Self: string; - "Self Delegate": string; - "Set Price Range": string; - "Set Starting Price": string; - Settings: string; - "Share of Pool": string; - "Share of Pool:": string; - "Show Portis": string; - "Show closed positions": string; - Simple: string; - "Slippage tolerance": string; - "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; - "Something went wrong": string; - "Something went wrong.": string; - "Step 1. Get UNI-V2 Liquidity tokens": string; - "Submit new proposal": string; - "Submitting Proposal": string; - "Submitting Vote": string; - Succeeded: string; - Success: string; - Supply: string; - "Supplying {0} {1} and {2} {3}": (string | string[])[]; - Swap: string; - "Swap <0/> for exactly <1/>": string; - "Swap Anyway": string; - "Swap details": string; - "Swap exactly <0/> for <1/>": string; - "Swap failed: {0}": (string | string[])[]; - "Swap summary": string; - "Swapping {0} {1} for {2} {3}": (string | string[])[]; - "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; - "Tell us what you think \u2197": string; - "Thanks for being part of the Uniswap community <0/>": string; - "The % you will earn in fees.": string; - "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; - "The app fetches blockchain data from The Graph\u2019s hosted service.": string; - "The app fetches on-chain data and constructs contract calls with an Infura API.": string; - "The app fetches the optimal trade route from a Uniswap Labs server.": string; - "The app logs anonymized usage statistics in order to improve over time.": string; - "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; - "The cost of sending this transaction is more than half of the value of the input amount.": string; - "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; - "The estimated difference between the USD values of input and output amounts.": string; - "The input token cannot be transferred. There may be an issue with the input token.": string; - "The market price is outside your specified price range. Single-asset deposit only.": string; - "The most recent block number on this network. Prices update on every block.": string; - "The output token cannot be transferred. There may be an issue with the output token.": string; - "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; - "The price of this pool is within your selected range. Your position is currently earning fees.": string; - "The ratio of tokens you add will set the price of this pool.": string; - "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; - "There is no liquidity data.": string; - "This app uses the following third-party APIs:": string; - "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; - "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; - "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; - "This token is not supported in the Uniswap Labs app": string; - "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; - "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; - "Tip: Custom tokens are stored locally in your browser": string; - To: string; - "To (at least)": string; - "Token not supported": string; - Tokens: string; - "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; - "Top pools": string; - "Total deposited": string; - "Total deposits": string; - "Trade Route": string; - Trading: string; - "Transaction Settings": string; - "Transaction Submitted": string; - "Transaction completed in": string; - "Transaction deadline": string; - "Transaction pending": string; - "Transaction rejected.": string; - "Transaction submitted": string; - "Transfer Token": string; - "Try Again": string; - "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Turn On Expert Mode": string; - "UNI has arrived": string; - "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; - "UNI {0}/{1} Burned": (string | string[])[]; - "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; - "UNI-V2 {0}-{1}": (string | string[])[]; - "Unclaimed UNI": string; - "Unclaimed fees": string; - Undetermined: string; - "Unexpected error. Could not estimate gas for the swap.": string; - "Unexpected issue with estimating the gas. Please try again.": string; - "Uniswap Governance": string; - "Uniswap Labs' Terms of Service": string; - "Uniswap available in: <0>{0}": (string | string[])[]; - "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; - "Uniswap liquidity mining": string; - "Uniswap migration contract\u2197": string; - "Unknown Source": string; - "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; - "Unlock Votes": string; - "Unlock Voting": string; - "Unlocking Votes": string; - "Unsupported Asset": string; - "Unsupported Assets": string; - "Unsupported network\u2013switch to another to trade.": string; - Untitled: string; - Unwrap: string; - "Unwrap <0/> to {0}": (string | string[])[]; - "Update Delegation": string; - "Update list": string; - "Use the Uniswap Labs API to get faster quotes.": string; - User: string; - "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; - "V2 liquidity": string; - "V3 {0} Price:": (string | string[])[]; - "View accrued fees and analytics<0>\u2197": string; - "View list": string; - "View on Etherscan": string; - "View on Explorer": string; - "View transaction on Explorer": string; - Vote: string; - "Vote Against": string; - "Vote For": string; - "Vote against proposal {proposalId}": (string | string[])[]; - "Vote against proposal {proposalKey}": (string | string[])[]; - "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote for proposal {proposalId}": (string | string[])[]; - "Vote for proposal {proposalKey}": (string | string[])[]; - "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote to abstain on proposal {proposalId}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Voting ended {0}": (string | string[])[]; - "Voting ends approximately {0}": (string | string[])[]; - "Voting starts approximately {0}": (string | string[])[]; - "Waiting For Confirmation": string; - "Wallet Address or ENS name": string; - "Weekly Rewards": string; - "Welcome to team Unicorn :)": string; - "When you claim without withdrawing your liquidity remains in the mining pool.": string; - "When you withdraw, the contract will automagically claim UNI on your behalf!": string; - "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; - Withdraw: string; - "Withdraw & Claim": string; - "Withdraw deposited liquidity": string; - "Withdrawing {0} UNI-V2": (string | string[])[]; - "Withdrew UNI-V2!": string; - Wrap: string; - "Wrap <0/> to {0}": (string | string[])[]; - "Wrong Network": string; - "You already have an active or pending proposal": string; - "You are creating a pool": string; - "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; - "You are the first liquidity provider.": string; - "You can either vote on each proposal yourself or delegate your votes to a third party.": string; - "You can now trade {0}": (string | string[])[]; - "You don't have enough votes to submit a proposal": string; - "You don\u2019t have liquidity in this pool yet.": string; - "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; - "You may have lost your network connection.": string; - "You might consider waiting until the network fees go down to complete this transaction.": string; - "You must connect an account.": string; - "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; - "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; - "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; - "You will also collect fees earned from this position.": string; - "You will receive": string; - "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; - "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; - "Your V2 liquidity": string; - "Your active V3 liquidity positions will appear here.": string; - "Your liquidity deposits": string; - "Your pool share:": string; - "Your position": string; - "Your position has 0 liquidity, and is not earning fees.": string; - "Your position will appear here.": string; - "Your position will be 100% composed of {0} at this price": (string | string[])[]; - "Your position will be 100% {0} at this price.": (string | string[])[]; - "Your position will not earn fees or be used in trades until the market price moves into your range.": string; - "Your positions": string; - "Your rate": string; - "Your total pool tokens:": string; - "Your transaction cost will be much higher as it includes the gas to create the pool.": string; - "Your transaction may be frontrun": string; - "Your transaction may fail": string; - "Your transaction will revert if it has been pending for longer than this period of time.": string; - "Your transaction will revert if it is pending for more than this period of time.": string; - "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; - "Your transactions will appear here...": string; - "Your unclaimed UNI": string; - "after slippage": string; - confirm: string; - "for {0}": (string | string[])[]; - gwei: string; - "has socks emoji": string; - "here.": string; - "https:// or ipfs:// or ENS name": string; - minutes: string; - "via {0}": (string | string[])[]; - "via {0} token list": (string | string[])[]; - "{0, plural, one {Import token} other {Import tokens}}": (string | { - one: string; - other: string; - })[][]; - "{0}": string[][]; - "{0} %": (string | string[])[]; - "{0} <0/> per <1/>": (string | string[])[]; - "{0} Custom Tokens": (string | string[])[]; - "{0} Deposited": (string | string[])[]; - "{0} ETH": (string | string[])[]; - "{0} Fees Earned:": (string | string[])[]; - "{0} Pending": (string | string[])[]; - "{0} UNI": (string | string[])[]; - "{0} UNI / week": (string | string[])[]; - "{0} UNI-V2": (string | string[])[]; - "{0} UNI-V2 LP tokens available": (string | string[])[]; - "{0} Votes": (string | string[])[]; - "{0} per {1}": (string | string[])[]; - "{0} tokens": (string | string[])[]; - "{0} {1} Price:": (string | string[])[]; - "{0} {nativeCurrencySymbol}": (string | string[])[]; - "{0} \u2022 Added by user": (string | string[])[]; - "{0}%": (string | string[])[]; - "{0}% fee tier": (string | string[])[]; - "{0}% pool": (string | string[])[]; - "{0}% select": (string | string[])[]; - "{0}-{1} Liquidity Mining": (string | string[])[]; - "{0}/{1} LP NFT": (string | string[])[]; - "{0}/{1} LP Tokens": (string | string[])[]; - "{SOCKS_AMOUNT} UNI": (string | string[])[]; - "{USER_AMOUNT} UNI": (string | string[])[]; - "{activeTokensOnThisChain} tokens": (string | string[])[]; - "{integrator} fee": (string | string[])[]; - "{label} token bridge": (string | string[])[]; - "{min}m {sec}s": (string | string[])[]; - "{percentForSlider}%": (string | string[])[]; - "{sec}s": (string | string[])[]; - "{tokenB} per {tokenA}": (string | string[])[]; - "\u2190 Back to Pools Overview": string; -}; diff --git a/dist2/types/locales/da-DK.d.ts b/dist2/types/locales/da-DK.d.ts deleted file mode 100644 index 75120e0e5c9..00000000000 --- a/dist2/types/locales/da-DK.d.ts +++ /dev/null @@ -1,593 +0,0 @@ -export const messages: { - "$-": string; - "$<0/>": string; - "${0}": (string | string[])[]; - "(${0})": (string | string[])[]; - "(View on Explorer)": string; - "(clear all)": string; - "(edit)": string; - "- Remove recipient": string; - "0 UNI / week": string; - "25%": string; - "50%": string; - "75%": string; - "<0/> All Proposals": string; - "<0/> Votes": string; - "<0>Account analytics and accrued fees<1> \u2197 ": string; - "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; - "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; - "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; - "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; - "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; - "<0>Unlock voting to prepare for the next proposal.": string; - "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; - "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; - About: string; - Accept: string; - Account: string; - Active: string; - Add: string; - "Add <0/> and <1/> to Uniswap V2": string; - "Add Delegate +": string; - "Add Liquidity": string; - "Add V2 Liquidity": string; - "Add liquidity.": string; - "Add more liquidity": string; - "Add {0} to Metamask <0/>": (string | string[])[]; - "Add {0}-{1} liquidity": (string | string[])[]; - "Add {0}/{1} V3 liquidity": (string | string[])[]; - "Added {0}": (string | string[])[]; - "Address has no available claim": string; - Against: string; - "Allow LP token migration": string; - "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; - "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; - Allowed: string; - Amount: string; - "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Approval pending <0/>": string; - Approve: string; - "Approve Token": string; - "Approve {0}": (string | string[])[]; - "Approve {0} first": (string | string[])[]; - Approved: string; - Approving: string; - "Approving {0}": (string | string[])[]; - Arbiscan: string; - "Arbitrum Bridge": string; - "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Are you sure?": string; - "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; - "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; - Auto: string; - "Auto Router API": string; - "Available to deposit: {0}": (string | string[])[]; - "Balance: {0}": (string | string[])[]; - "Best for exotic pairs.": string; - "Best for most pairs.": string; - "Best for stable pairs.": string; - "Best for very stable pairs.": string; - "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; - "Blocked address": string; - Bridge: string; - "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; - "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; - Canceled: string; - Change: string; - Charts: string; - "Check network status": string; - "Check out our v3 LP walkthrough and migration guides.": string; - Claim: string; - "Claim <0/> for {0}": (string | string[])[]; - "Claim UNI": string; - "Claim UNI Token": string; - "Claim UNI reward for {0}": (string | string[])[]; - "Claim fees": string; - "Claim your UNI tokens": string; - Claimed: string; - "Claimed UNI!": string; - "Claimed!": string; - Claiming: string; - "Claiming UNI": string; - "Claiming {0} UNI": (string | string[])[]; - "Clear All": string; - "Clear all": string; - Close: string; - Closed: string; - Collect: string; - "Collect as WETH": string; - "Collect fees": string; - "Collect {0}/{1} fees": (string | string[])[]; - Collected: string; - Collecting: string; - "Collecting fees": string; - "Collecting fees will withdraw currently available fees for you.": string; - Confirm: string; - "Confirm Supply": string; - "Confirm Swap": string; - "Confirm swap": string; - "Confirm this transaction in your wallet": string; - "Confirm transaction in wallet": string; - "Connect Wallet": string; - "Connect a wallet": string; - "Connect to a wallet to find pools": string; - "Connect to a wallet to view your V2 liquidity.": string; - "Connect to a wallet to view your liquidity.": string; - "Connect wallet to swap": string; - "Connected with {name}": (string | string[])[]; - Copied: string; - "Copy Address": string; - "Create Pool & Supply": string; - "Create Proposal": string; - "Create a pair": string; - "Create a pool": string; - "Create an issue on GitHub": string; - "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; - "Create pool.": string; - "Create {0}/{1} V3 pool": (string | string[])[]; - "Current price": string; - "Current {0} Price:": (string | string[])[]; - Custom: string; - "Dark Theme": string; - Defeated: string; - "Delegate Votes": string; - "Delegate voting power to {0}": (string | string[])[]; - "Delegated to:": string; - "Delegating votes": string; - Deposit: string; - "Deposit Amounts": string; - "Deposit UNI-V2 LP Tokens": string; - "Deposit liquidity": string; - "Deposit tokens to the {label} network.": (string | string[])[]; - "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; - "Deposited liquidity:": string; - "Deposited {0} UNI-V2": (string | string[])[]; - "Depositing Liquidity": string; - Description: string; - Detailed: string; - Details: string; - Disconnect: string; - Discord: string; - Dismiss: string; - Docs: string; - "Don\u2019t see one of your v2 positions? <0>Import it.": string; - "Earned UNI tokens represent voting shares in Uniswap governance.": string; - Edit: string; - "Efficiency Comparison": string; - "Enter a percent": string; - "Enter a recipient": string; - "Enter a valid slippage percentage": string; - "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; - "Enter an amount": string; - "Enter valid list location": string; - "Enter valid token address": string; - "Enter {0} amount": (string | string[])[]; - Error: string; - "Error connecting": string; - "Error connecting. Try refreshing the page.": string; - "Error details": string; - "Error importing list": string; - "Estimate may differ due to your wallet gas settings": string; - "Estimated network fee": string; - Etherscan: string; - Executed: string; - "Expanded results from inactive Token Lists": string; - "Expected Output": string; - "Expert Mode": string; - "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; - Expired: string; - "Explore Uniswap Analytics.": string; - "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; - "Fee Tier": string; - "Fee tier": string; - "Fetching best price...": string; - "Fetching best price\u2026": string; - For: string; - "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; - From: string; - "From (at most)": string; - "Full Range": string; - "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; - "Get support on Discord": string; - "Help Center": string; - Hide: string; - "Hide closed positions": string; - "High Price Impact": string; - "How this app uses APIs": string; - "I understand": string; - "If you purchase a token from this list, you may not be able to sell it back.": string; - Import: string; - "Import List": string; - "Import Pool": string; - "Import V2 Pool": string; - "Import at your own risk": string; - "In range": string; - "Increase Liquidity": string; - "Initial prices and pool share": string; - "Initializing...": string; - "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Install Metamask": string; - "Insufficient liquidity for this trade.": string; - "Insufficient {0}": (string | string[])[]; - "Insufficient {0} balance": (string | string[])[]; - "Interface Settings": string; - "Invalid pair": string; - "Invalid pair.": string; - "Invalid price input": string; - "Invalid range selected. The min price must be lower than the max price.": string; - "Invalid recipient": string; - Language: string; - Learn: string; - "Learn about providing liquidity": string; - "Learn more": string; - "Legal & Privacy": string; - "Light Theme": string; - Liquidity: string; - "Liquidity data not available.": string; - "Liquidity provider rewards": string; - "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - Lists: string; - Loaded: string; - Loading: string; - MAX: string; - Manage: string; - "Manage Liquidity in Rewards Pool": string; - "Manage Token Lists": string; - "Manage this pool.": string; - Max: string; - "Max Price": string; - "Max price": string; - "Max slippage": string; - "Max:": string; - "Maximum sent": string; - Menu: string; - Migrate: string; - "Migrate Liquidity to V3": string; - "Migrate V2 Liquidity": string; - "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; - "Migrate {0}/{1} liquidity to V3": (string | string[])[]; - Migrating: string; - "Min Price": string; - "Min price": string; - "Min:": string; - "Minimum received": string; - "Missing dependencies": string; - "Mock Toggle": string; - More: string; - "Network Fee": string; - "Network Warning": string; - "Network fees exceed 50% of the swap amount!": string; - "New Position": string; - "No V2 Liquidity found.": string; - "No active pools": string; - "No data": string; - "No description.": string; - "No liquidity found.": string; - "No pool found.": string; - "No proposals found.": string; - "No results found.": string; - "Not created": string; - OFF: string; - ON: string; - "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; - Off: string; - On: string; - "Once you are happy with the rate click supply to review.": string; - "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; - "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; - "Optimism Gateway": string; - "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Optimistic Etherscan": string; - "Out of range": string; - "Output is estimated.": string; - "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; - "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Output will be sent to <0>{0}": (string | string[])[]; - Owner: string; - "Participating pools": string; - Pending: string; - "Please confirm you would like to remove this list by typing REMOVE": string; - "Please connect to Layer 1 Ethereum": string; - "Please connect to a supported network in the dropdown menu or in your wallet.": string; - "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; - "Polygon Bridge": string; - Polygonscan: string; - Pool: string; - "Pool Found!": string; - "Pool Rate": string; - "Pool rate": string; - "Pool tokens in rewards pool:": string; - "Pooled {0}:": (string | string[])[]; - "Pools Overview": string; - Preview: string; - Price: string; - "Price Difference:": string; - "Price Impact": string; - "Price Impact Too High": string; - "Price Updated": string; - "Price impact": string; - "Price range": string; - "Price updated": string; - "Price:": string; - "Prices and pool share": string; - Proposal: string; - "Proposal Submitted": string; - "Proposal Title": string; - Proposals: string; - "Proposals submitted by community members will appear here.": string; - "Proposed Action": string; - Proposer: string; - "Protocol Disclaimer": string; - Queued: string; - Rates: string; - "Read more about UNI": string; - "Read more about Uniswap governance": string; - "Read more about providing liquidity": string; - "Read more about unsupported assets": string; - "Recent Transactions": string; - "Recent transactions": string; - Recipient: string; - "Reload the page": string; - Remove: string; - "Remove <0/> and <1/>": string; - "Remove Amount": string; - "Remove Delegate": string; - "Remove Liquidity": string; - "Remove list": string; - "Removing {0} {1} and {2} {3}": (string | string[])[]; - "Removing {0} {1} and{2} {3}": (string | string[])[]; - "Request Features": string; - Reset: string; - Return: string; - "Review swap": string; - "Search by token name or address": string; - "Search name or paste address": string; - "Select Pair": string; - "Select a network": string; - "Select a token": string; - "Select a token to find your v2 liquidity.": string; - "Select an action": string; - "Selected Range": string; - Self: string; - "Self Delegate": string; - "Set Price Range": string; - "Set Starting Price": string; - Settings: string; - "Share of Pool": string; - "Share of Pool:": string; - "Show Portis": string; - "Show closed positions": string; - Simple: string; - "Slippage tolerance": string; - "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; - "Something went wrong": string; - "Something went wrong.": string; - "Step 1. Get UNI-V2 Liquidity tokens": string; - "Submit new proposal": string; - "Submitting Proposal": string; - "Submitting Vote": string; - Succeeded: string; - Success: string; - Supply: string; - "Supplying {0} {1} and {2} {3}": (string | string[])[]; - Swap: string; - "Swap <0/> for exactly <1/>": string; - "Swap Anyway": string; - "Swap details": string; - "Swap exactly <0/> for <1/>": string; - "Swap failed: {0}": (string | string[])[]; - "Swap summary": string; - "Swapping {0} {1} for {2} {3}": (string | string[])[]; - "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; - "Tell us what you think \u2197": string; - "Thanks for being part of the Uniswap community <0/>": string; - "The % you will earn in fees.": string; - "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; - "The app fetches blockchain data from The Graph\u2019s hosted service.": string; - "The app fetches on-chain data and constructs contract calls with an Infura API.": string; - "The app fetches the optimal trade route from a Uniswap Labs server.": string; - "The app logs anonymized usage statistics in order to improve over time.": string; - "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; - "The cost of sending this transaction is more than half of the value of the input amount.": string; - "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; - "The estimated difference between the USD values of input and output amounts.": string; - "The input token cannot be transferred. There may be an issue with the input token.": string; - "The market price is outside your specified price range. Single-asset deposit only.": string; - "The most recent block number on this network. Prices update on every block.": string; - "The output token cannot be transferred. There may be an issue with the output token.": string; - "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; - "The price of this pool is within your selected range. Your position is currently earning fees.": string; - "The ratio of tokens you add will set the price of this pool.": string; - "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; - "There is no liquidity data.": string; - "This app uses the following third-party APIs:": string; - "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; - "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; - "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; - "This token is not supported in the Uniswap Labs app": string; - "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; - "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; - "Tip: Custom tokens are stored locally in your browser": string; - To: string; - "To (at least)": string; - "Token not supported": string; - Tokens: string; - "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; - "Top pools": string; - "Total deposited": string; - "Total deposits": string; - "Trade Route": string; - Trading: string; - "Transaction Settings": string; - "Transaction Submitted": string; - "Transaction completed in": string; - "Transaction deadline": string; - "Transaction pending": string; - "Transaction rejected.": string; - "Transaction submitted": string; - "Transfer Token": string; - "Try Again": string; - "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Turn On Expert Mode": string; - "UNI has arrived": string; - "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; - "UNI {0}/{1} Burned": (string | string[])[]; - "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; - "UNI-V2 {0}-{1}": (string | string[])[]; - "Unclaimed UNI": string; - "Unclaimed fees": string; - Undetermined: string; - "Unexpected error. Could not estimate gas for the swap.": string; - "Unexpected issue with estimating the gas. Please try again.": string; - "Uniswap Governance": string; - "Uniswap Labs' Terms of Service": string; - "Uniswap available in: <0>{0}": (string | string[])[]; - "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; - "Uniswap liquidity mining": string; - "Uniswap migration contract\u2197": string; - "Unknown Source": string; - "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; - "Unlock Votes": string; - "Unlock Voting": string; - "Unlocking Votes": string; - "Unsupported Asset": string; - "Unsupported Assets": string; - "Unsupported network\u2013switch to another to trade.": string; - Untitled: string; - Unwrap: string; - "Unwrap <0/> to {0}": (string | string[])[]; - "Update Delegation": string; - "Update list": string; - "Use the Uniswap Labs API to get faster quotes.": string; - User: string; - "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; - "V2 liquidity": string; - "V3 {0} Price:": (string | string[])[]; - "View accrued fees and analytics<0>\u2197": string; - "View list": string; - "View on Etherscan": string; - "View on Explorer": string; - "View transaction on Explorer": string; - Vote: string; - "Vote Against": string; - "Vote For": string; - "Vote against proposal {proposalId}": (string | string[])[]; - "Vote against proposal {proposalKey}": (string | string[])[]; - "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote for proposal {proposalId}": (string | string[])[]; - "Vote for proposal {proposalKey}": (string | string[])[]; - "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote to abstain on proposal {proposalId}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Voting ended {0}": (string | string[])[]; - "Voting ends approximately {0}": (string | string[])[]; - "Voting starts approximately {0}": (string | string[])[]; - "Waiting For Confirmation": string; - "Wallet Address or ENS name": string; - "Weekly Rewards": string; - "Welcome to team Unicorn :)": string; - "When you claim without withdrawing your liquidity remains in the mining pool.": string; - "When you withdraw, the contract will automagically claim UNI on your behalf!": string; - "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; - Withdraw: string; - "Withdraw & Claim": string; - "Withdraw deposited liquidity": string; - "Withdrawing {0} UNI-V2": (string | string[])[]; - "Withdrew UNI-V2!": string; - Wrap: string; - "Wrap <0/> to {0}": (string | string[])[]; - "Wrong Network": string; - "You already have an active or pending proposal": string; - "You are creating a pool": string; - "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; - "You are the first liquidity provider.": string; - "You can either vote on each proposal yourself or delegate your votes to a third party.": string; - "You can now trade {0}": (string | string[])[]; - "You don't have enough votes to submit a proposal": string; - "You don\u2019t have liquidity in this pool yet.": string; - "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; - "You may have lost your network connection.": string; - "You might consider waiting until the network fees go down to complete this transaction.": string; - "You must connect an account.": string; - "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; - "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; - "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; - "You will also collect fees earned from this position.": string; - "You will receive": string; - "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; - "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; - "Your V2 liquidity": string; - "Your active V3 liquidity positions will appear here.": string; - "Your liquidity deposits": string; - "Your pool share:": string; - "Your position": string; - "Your position has 0 liquidity, and is not earning fees.": string; - "Your position will appear here.": string; - "Your position will be 100% composed of {0} at this price": (string | string[])[]; - "Your position will be 100% {0} at this price.": (string | string[])[]; - "Your position will not earn fees or be used in trades until the market price moves into your range.": string; - "Your positions": string; - "Your rate": string; - "Your total pool tokens:": string; - "Your transaction cost will be much higher as it includes the gas to create the pool.": string; - "Your transaction may be frontrun": string; - "Your transaction may fail": string; - "Your transaction will revert if it has been pending for longer than this period of time.": string; - "Your transaction will revert if it is pending for more than this period of time.": string; - "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; - "Your transactions will appear here...": string; - "Your unclaimed UNI": string; - "after slippage": string; - confirm: string; - "for {0}": (string | string[])[]; - gwei: string; - "has socks emoji": string; - "here.": string; - "https:// or ipfs:// or ENS name": string; - minutes: string; - "via {0}": (string | string[])[]; - "via {0} token list": (string | string[])[]; - "{0, plural, one {Import token} other {Import tokens}}": (string | { - one: string; - other: string; - })[][]; - "{0}": string[][]; - "{0} %": (string | string[])[]; - "{0} <0/> per <1/>": (string | string[])[]; - "{0} Custom Tokens": (string | string[])[]; - "{0} Deposited": (string | string[])[]; - "{0} ETH": (string | string[])[]; - "{0} Fees Earned:": (string | string[])[]; - "{0} Pending": (string | string[])[]; - "{0} UNI": (string | string[])[]; - "{0} UNI / week": (string | string[])[]; - "{0} UNI-V2": (string | string[])[]; - "{0} UNI-V2 LP tokens available": (string | string[])[]; - "{0} Votes": (string | string[])[]; - "{0} per {1}": (string | string[])[]; - "{0} tokens": (string | string[])[]; - "{0} {1} Price:": (string | string[])[]; - "{0} {nativeCurrencySymbol}": (string | string[])[]; - "{0} \u2022 Added by user": (string | string[])[]; - "{0}%": (string | string[])[]; - "{0}% fee tier": (string | string[])[]; - "{0}% pool": (string | string[])[]; - "{0}% select": (string | string[])[]; - "{0}-{1} Liquidity Mining": (string | string[])[]; - "{0}/{1} LP NFT": (string | string[])[]; - "{0}/{1} LP Tokens": (string | string[])[]; - "{SOCKS_AMOUNT} UNI": (string | string[])[]; - "{USER_AMOUNT} UNI": (string | string[])[]; - "{activeTokensOnThisChain} tokens": (string | string[])[]; - "{integrator} fee": (string | string[])[]; - "{label} token bridge": (string | string[])[]; - "{min}m {sec}s": (string | string[])[]; - "{percentForSlider}%": (string | string[])[]; - "{sec}s": (string | string[])[]; - "{tokenB} per {tokenA}": (string | string[])[]; - "\u2190 Back to Pools Overview": string; -}; diff --git a/dist2/types/locales/de-DE.d.ts b/dist2/types/locales/de-DE.d.ts deleted file mode 100644 index 75120e0e5c9..00000000000 --- a/dist2/types/locales/de-DE.d.ts +++ /dev/null @@ -1,593 +0,0 @@ -export const messages: { - "$-": string; - "$<0/>": string; - "${0}": (string | string[])[]; - "(${0})": (string | string[])[]; - "(View on Explorer)": string; - "(clear all)": string; - "(edit)": string; - "- Remove recipient": string; - "0 UNI / week": string; - "25%": string; - "50%": string; - "75%": string; - "<0/> All Proposals": string; - "<0/> Votes": string; - "<0>Account analytics and accrued fees<1> \u2197 ": string; - "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; - "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; - "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; - "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; - "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; - "<0>Unlock voting to prepare for the next proposal.": string; - "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; - "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; - About: string; - Accept: string; - Account: string; - Active: string; - Add: string; - "Add <0/> and <1/> to Uniswap V2": string; - "Add Delegate +": string; - "Add Liquidity": string; - "Add V2 Liquidity": string; - "Add liquidity.": string; - "Add more liquidity": string; - "Add {0} to Metamask <0/>": (string | string[])[]; - "Add {0}-{1} liquidity": (string | string[])[]; - "Add {0}/{1} V3 liquidity": (string | string[])[]; - "Added {0}": (string | string[])[]; - "Address has no available claim": string; - Against: string; - "Allow LP token migration": string; - "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; - "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; - Allowed: string; - Amount: string; - "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Approval pending <0/>": string; - Approve: string; - "Approve Token": string; - "Approve {0}": (string | string[])[]; - "Approve {0} first": (string | string[])[]; - Approved: string; - Approving: string; - "Approving {0}": (string | string[])[]; - Arbiscan: string; - "Arbitrum Bridge": string; - "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Are you sure?": string; - "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; - "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; - Auto: string; - "Auto Router API": string; - "Available to deposit: {0}": (string | string[])[]; - "Balance: {0}": (string | string[])[]; - "Best for exotic pairs.": string; - "Best for most pairs.": string; - "Best for stable pairs.": string; - "Best for very stable pairs.": string; - "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; - "Blocked address": string; - Bridge: string; - "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; - "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; - Canceled: string; - Change: string; - Charts: string; - "Check network status": string; - "Check out our v3 LP walkthrough and migration guides.": string; - Claim: string; - "Claim <0/> for {0}": (string | string[])[]; - "Claim UNI": string; - "Claim UNI Token": string; - "Claim UNI reward for {0}": (string | string[])[]; - "Claim fees": string; - "Claim your UNI tokens": string; - Claimed: string; - "Claimed UNI!": string; - "Claimed!": string; - Claiming: string; - "Claiming UNI": string; - "Claiming {0} UNI": (string | string[])[]; - "Clear All": string; - "Clear all": string; - Close: string; - Closed: string; - Collect: string; - "Collect as WETH": string; - "Collect fees": string; - "Collect {0}/{1} fees": (string | string[])[]; - Collected: string; - Collecting: string; - "Collecting fees": string; - "Collecting fees will withdraw currently available fees for you.": string; - Confirm: string; - "Confirm Supply": string; - "Confirm Swap": string; - "Confirm swap": string; - "Confirm this transaction in your wallet": string; - "Confirm transaction in wallet": string; - "Connect Wallet": string; - "Connect a wallet": string; - "Connect to a wallet to find pools": string; - "Connect to a wallet to view your V2 liquidity.": string; - "Connect to a wallet to view your liquidity.": string; - "Connect wallet to swap": string; - "Connected with {name}": (string | string[])[]; - Copied: string; - "Copy Address": string; - "Create Pool & Supply": string; - "Create Proposal": string; - "Create a pair": string; - "Create a pool": string; - "Create an issue on GitHub": string; - "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; - "Create pool.": string; - "Create {0}/{1} V3 pool": (string | string[])[]; - "Current price": string; - "Current {0} Price:": (string | string[])[]; - Custom: string; - "Dark Theme": string; - Defeated: string; - "Delegate Votes": string; - "Delegate voting power to {0}": (string | string[])[]; - "Delegated to:": string; - "Delegating votes": string; - Deposit: string; - "Deposit Amounts": string; - "Deposit UNI-V2 LP Tokens": string; - "Deposit liquidity": string; - "Deposit tokens to the {label} network.": (string | string[])[]; - "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; - "Deposited liquidity:": string; - "Deposited {0} UNI-V2": (string | string[])[]; - "Depositing Liquidity": string; - Description: string; - Detailed: string; - Details: string; - Disconnect: string; - Discord: string; - Dismiss: string; - Docs: string; - "Don\u2019t see one of your v2 positions? <0>Import it.": string; - "Earned UNI tokens represent voting shares in Uniswap governance.": string; - Edit: string; - "Efficiency Comparison": string; - "Enter a percent": string; - "Enter a recipient": string; - "Enter a valid slippage percentage": string; - "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; - "Enter an amount": string; - "Enter valid list location": string; - "Enter valid token address": string; - "Enter {0} amount": (string | string[])[]; - Error: string; - "Error connecting": string; - "Error connecting. Try refreshing the page.": string; - "Error details": string; - "Error importing list": string; - "Estimate may differ due to your wallet gas settings": string; - "Estimated network fee": string; - Etherscan: string; - Executed: string; - "Expanded results from inactive Token Lists": string; - "Expected Output": string; - "Expert Mode": string; - "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; - Expired: string; - "Explore Uniswap Analytics.": string; - "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; - "Fee Tier": string; - "Fee tier": string; - "Fetching best price...": string; - "Fetching best price\u2026": string; - For: string; - "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; - From: string; - "From (at most)": string; - "Full Range": string; - "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; - "Get support on Discord": string; - "Help Center": string; - Hide: string; - "Hide closed positions": string; - "High Price Impact": string; - "How this app uses APIs": string; - "I understand": string; - "If you purchase a token from this list, you may not be able to sell it back.": string; - Import: string; - "Import List": string; - "Import Pool": string; - "Import V2 Pool": string; - "Import at your own risk": string; - "In range": string; - "Increase Liquidity": string; - "Initial prices and pool share": string; - "Initializing...": string; - "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Install Metamask": string; - "Insufficient liquidity for this trade.": string; - "Insufficient {0}": (string | string[])[]; - "Insufficient {0} balance": (string | string[])[]; - "Interface Settings": string; - "Invalid pair": string; - "Invalid pair.": string; - "Invalid price input": string; - "Invalid range selected. The min price must be lower than the max price.": string; - "Invalid recipient": string; - Language: string; - Learn: string; - "Learn about providing liquidity": string; - "Learn more": string; - "Legal & Privacy": string; - "Light Theme": string; - Liquidity: string; - "Liquidity data not available.": string; - "Liquidity provider rewards": string; - "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - Lists: string; - Loaded: string; - Loading: string; - MAX: string; - Manage: string; - "Manage Liquidity in Rewards Pool": string; - "Manage Token Lists": string; - "Manage this pool.": string; - Max: string; - "Max Price": string; - "Max price": string; - "Max slippage": string; - "Max:": string; - "Maximum sent": string; - Menu: string; - Migrate: string; - "Migrate Liquidity to V3": string; - "Migrate V2 Liquidity": string; - "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; - "Migrate {0}/{1} liquidity to V3": (string | string[])[]; - Migrating: string; - "Min Price": string; - "Min price": string; - "Min:": string; - "Minimum received": string; - "Missing dependencies": string; - "Mock Toggle": string; - More: string; - "Network Fee": string; - "Network Warning": string; - "Network fees exceed 50% of the swap amount!": string; - "New Position": string; - "No V2 Liquidity found.": string; - "No active pools": string; - "No data": string; - "No description.": string; - "No liquidity found.": string; - "No pool found.": string; - "No proposals found.": string; - "No results found.": string; - "Not created": string; - OFF: string; - ON: string; - "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; - Off: string; - On: string; - "Once you are happy with the rate click supply to review.": string; - "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; - "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; - "Optimism Gateway": string; - "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Optimistic Etherscan": string; - "Out of range": string; - "Output is estimated.": string; - "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; - "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Output will be sent to <0>{0}": (string | string[])[]; - Owner: string; - "Participating pools": string; - Pending: string; - "Please confirm you would like to remove this list by typing REMOVE": string; - "Please connect to Layer 1 Ethereum": string; - "Please connect to a supported network in the dropdown menu or in your wallet.": string; - "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; - "Polygon Bridge": string; - Polygonscan: string; - Pool: string; - "Pool Found!": string; - "Pool Rate": string; - "Pool rate": string; - "Pool tokens in rewards pool:": string; - "Pooled {0}:": (string | string[])[]; - "Pools Overview": string; - Preview: string; - Price: string; - "Price Difference:": string; - "Price Impact": string; - "Price Impact Too High": string; - "Price Updated": string; - "Price impact": string; - "Price range": string; - "Price updated": string; - "Price:": string; - "Prices and pool share": string; - Proposal: string; - "Proposal Submitted": string; - "Proposal Title": string; - Proposals: string; - "Proposals submitted by community members will appear here.": string; - "Proposed Action": string; - Proposer: string; - "Protocol Disclaimer": string; - Queued: string; - Rates: string; - "Read more about UNI": string; - "Read more about Uniswap governance": string; - "Read more about providing liquidity": string; - "Read more about unsupported assets": string; - "Recent Transactions": string; - "Recent transactions": string; - Recipient: string; - "Reload the page": string; - Remove: string; - "Remove <0/> and <1/>": string; - "Remove Amount": string; - "Remove Delegate": string; - "Remove Liquidity": string; - "Remove list": string; - "Removing {0} {1} and {2} {3}": (string | string[])[]; - "Removing {0} {1} and{2} {3}": (string | string[])[]; - "Request Features": string; - Reset: string; - Return: string; - "Review swap": string; - "Search by token name or address": string; - "Search name or paste address": string; - "Select Pair": string; - "Select a network": string; - "Select a token": string; - "Select a token to find your v2 liquidity.": string; - "Select an action": string; - "Selected Range": string; - Self: string; - "Self Delegate": string; - "Set Price Range": string; - "Set Starting Price": string; - Settings: string; - "Share of Pool": string; - "Share of Pool:": string; - "Show Portis": string; - "Show closed positions": string; - Simple: string; - "Slippage tolerance": string; - "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; - "Something went wrong": string; - "Something went wrong.": string; - "Step 1. Get UNI-V2 Liquidity tokens": string; - "Submit new proposal": string; - "Submitting Proposal": string; - "Submitting Vote": string; - Succeeded: string; - Success: string; - Supply: string; - "Supplying {0} {1} and {2} {3}": (string | string[])[]; - Swap: string; - "Swap <0/> for exactly <1/>": string; - "Swap Anyway": string; - "Swap details": string; - "Swap exactly <0/> for <1/>": string; - "Swap failed: {0}": (string | string[])[]; - "Swap summary": string; - "Swapping {0} {1} for {2} {3}": (string | string[])[]; - "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; - "Tell us what you think \u2197": string; - "Thanks for being part of the Uniswap community <0/>": string; - "The % you will earn in fees.": string; - "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; - "The app fetches blockchain data from The Graph\u2019s hosted service.": string; - "The app fetches on-chain data and constructs contract calls with an Infura API.": string; - "The app fetches the optimal trade route from a Uniswap Labs server.": string; - "The app logs anonymized usage statistics in order to improve over time.": string; - "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; - "The cost of sending this transaction is more than half of the value of the input amount.": string; - "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; - "The estimated difference between the USD values of input and output amounts.": string; - "The input token cannot be transferred. There may be an issue with the input token.": string; - "The market price is outside your specified price range. Single-asset deposit only.": string; - "The most recent block number on this network. Prices update on every block.": string; - "The output token cannot be transferred. There may be an issue with the output token.": string; - "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; - "The price of this pool is within your selected range. Your position is currently earning fees.": string; - "The ratio of tokens you add will set the price of this pool.": string; - "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; - "There is no liquidity data.": string; - "This app uses the following third-party APIs:": string; - "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; - "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; - "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; - "This token is not supported in the Uniswap Labs app": string; - "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; - "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; - "Tip: Custom tokens are stored locally in your browser": string; - To: string; - "To (at least)": string; - "Token not supported": string; - Tokens: string; - "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; - "Top pools": string; - "Total deposited": string; - "Total deposits": string; - "Trade Route": string; - Trading: string; - "Transaction Settings": string; - "Transaction Submitted": string; - "Transaction completed in": string; - "Transaction deadline": string; - "Transaction pending": string; - "Transaction rejected.": string; - "Transaction submitted": string; - "Transfer Token": string; - "Try Again": string; - "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Turn On Expert Mode": string; - "UNI has arrived": string; - "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; - "UNI {0}/{1} Burned": (string | string[])[]; - "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; - "UNI-V2 {0}-{1}": (string | string[])[]; - "Unclaimed UNI": string; - "Unclaimed fees": string; - Undetermined: string; - "Unexpected error. Could not estimate gas for the swap.": string; - "Unexpected issue with estimating the gas. Please try again.": string; - "Uniswap Governance": string; - "Uniswap Labs' Terms of Service": string; - "Uniswap available in: <0>{0}": (string | string[])[]; - "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; - "Uniswap liquidity mining": string; - "Uniswap migration contract\u2197": string; - "Unknown Source": string; - "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; - "Unlock Votes": string; - "Unlock Voting": string; - "Unlocking Votes": string; - "Unsupported Asset": string; - "Unsupported Assets": string; - "Unsupported network\u2013switch to another to trade.": string; - Untitled: string; - Unwrap: string; - "Unwrap <0/> to {0}": (string | string[])[]; - "Update Delegation": string; - "Update list": string; - "Use the Uniswap Labs API to get faster quotes.": string; - User: string; - "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; - "V2 liquidity": string; - "V3 {0} Price:": (string | string[])[]; - "View accrued fees and analytics<0>\u2197": string; - "View list": string; - "View on Etherscan": string; - "View on Explorer": string; - "View transaction on Explorer": string; - Vote: string; - "Vote Against": string; - "Vote For": string; - "Vote against proposal {proposalId}": (string | string[])[]; - "Vote against proposal {proposalKey}": (string | string[])[]; - "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote for proposal {proposalId}": (string | string[])[]; - "Vote for proposal {proposalKey}": (string | string[])[]; - "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote to abstain on proposal {proposalId}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Voting ended {0}": (string | string[])[]; - "Voting ends approximately {0}": (string | string[])[]; - "Voting starts approximately {0}": (string | string[])[]; - "Waiting For Confirmation": string; - "Wallet Address or ENS name": string; - "Weekly Rewards": string; - "Welcome to team Unicorn :)": string; - "When you claim without withdrawing your liquidity remains in the mining pool.": string; - "When you withdraw, the contract will automagically claim UNI on your behalf!": string; - "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; - Withdraw: string; - "Withdraw & Claim": string; - "Withdraw deposited liquidity": string; - "Withdrawing {0} UNI-V2": (string | string[])[]; - "Withdrew UNI-V2!": string; - Wrap: string; - "Wrap <0/> to {0}": (string | string[])[]; - "Wrong Network": string; - "You already have an active or pending proposal": string; - "You are creating a pool": string; - "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; - "You are the first liquidity provider.": string; - "You can either vote on each proposal yourself or delegate your votes to a third party.": string; - "You can now trade {0}": (string | string[])[]; - "You don't have enough votes to submit a proposal": string; - "You don\u2019t have liquidity in this pool yet.": string; - "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; - "You may have lost your network connection.": string; - "You might consider waiting until the network fees go down to complete this transaction.": string; - "You must connect an account.": string; - "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; - "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; - "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; - "You will also collect fees earned from this position.": string; - "You will receive": string; - "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; - "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; - "Your V2 liquidity": string; - "Your active V3 liquidity positions will appear here.": string; - "Your liquidity deposits": string; - "Your pool share:": string; - "Your position": string; - "Your position has 0 liquidity, and is not earning fees.": string; - "Your position will appear here.": string; - "Your position will be 100% composed of {0} at this price": (string | string[])[]; - "Your position will be 100% {0} at this price.": (string | string[])[]; - "Your position will not earn fees or be used in trades until the market price moves into your range.": string; - "Your positions": string; - "Your rate": string; - "Your total pool tokens:": string; - "Your transaction cost will be much higher as it includes the gas to create the pool.": string; - "Your transaction may be frontrun": string; - "Your transaction may fail": string; - "Your transaction will revert if it has been pending for longer than this period of time.": string; - "Your transaction will revert if it is pending for more than this period of time.": string; - "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; - "Your transactions will appear here...": string; - "Your unclaimed UNI": string; - "after slippage": string; - confirm: string; - "for {0}": (string | string[])[]; - gwei: string; - "has socks emoji": string; - "here.": string; - "https:// or ipfs:// or ENS name": string; - minutes: string; - "via {0}": (string | string[])[]; - "via {0} token list": (string | string[])[]; - "{0, plural, one {Import token} other {Import tokens}}": (string | { - one: string; - other: string; - })[][]; - "{0}": string[][]; - "{0} %": (string | string[])[]; - "{0} <0/> per <1/>": (string | string[])[]; - "{0} Custom Tokens": (string | string[])[]; - "{0} Deposited": (string | string[])[]; - "{0} ETH": (string | string[])[]; - "{0} Fees Earned:": (string | string[])[]; - "{0} Pending": (string | string[])[]; - "{0} UNI": (string | string[])[]; - "{0} UNI / week": (string | string[])[]; - "{0} UNI-V2": (string | string[])[]; - "{0} UNI-V2 LP tokens available": (string | string[])[]; - "{0} Votes": (string | string[])[]; - "{0} per {1}": (string | string[])[]; - "{0} tokens": (string | string[])[]; - "{0} {1} Price:": (string | string[])[]; - "{0} {nativeCurrencySymbol}": (string | string[])[]; - "{0} \u2022 Added by user": (string | string[])[]; - "{0}%": (string | string[])[]; - "{0}% fee tier": (string | string[])[]; - "{0}% pool": (string | string[])[]; - "{0}% select": (string | string[])[]; - "{0}-{1} Liquidity Mining": (string | string[])[]; - "{0}/{1} LP NFT": (string | string[])[]; - "{0}/{1} LP Tokens": (string | string[])[]; - "{SOCKS_AMOUNT} UNI": (string | string[])[]; - "{USER_AMOUNT} UNI": (string | string[])[]; - "{activeTokensOnThisChain} tokens": (string | string[])[]; - "{integrator} fee": (string | string[])[]; - "{label} token bridge": (string | string[])[]; - "{min}m {sec}s": (string | string[])[]; - "{percentForSlider}%": (string | string[])[]; - "{sec}s": (string | string[])[]; - "{tokenB} per {tokenA}": (string | string[])[]; - "\u2190 Back to Pools Overview": string; -}; diff --git a/dist2/types/locales/el-GR.d.ts b/dist2/types/locales/el-GR.d.ts deleted file mode 100644 index 75120e0e5c9..00000000000 --- a/dist2/types/locales/el-GR.d.ts +++ /dev/null @@ -1,593 +0,0 @@ -export const messages: { - "$-": string; - "$<0/>": string; - "${0}": (string | string[])[]; - "(${0})": (string | string[])[]; - "(View on Explorer)": string; - "(clear all)": string; - "(edit)": string; - "- Remove recipient": string; - "0 UNI / week": string; - "25%": string; - "50%": string; - "75%": string; - "<0/> All Proposals": string; - "<0/> Votes": string; - "<0>Account analytics and accrued fees<1> \u2197 ": string; - "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; - "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; - "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; - "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; - "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; - "<0>Unlock voting to prepare for the next proposal.": string; - "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; - "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; - About: string; - Accept: string; - Account: string; - Active: string; - Add: string; - "Add <0/> and <1/> to Uniswap V2": string; - "Add Delegate +": string; - "Add Liquidity": string; - "Add V2 Liquidity": string; - "Add liquidity.": string; - "Add more liquidity": string; - "Add {0} to Metamask <0/>": (string | string[])[]; - "Add {0}-{1} liquidity": (string | string[])[]; - "Add {0}/{1} V3 liquidity": (string | string[])[]; - "Added {0}": (string | string[])[]; - "Address has no available claim": string; - Against: string; - "Allow LP token migration": string; - "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; - "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; - Allowed: string; - Amount: string; - "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Approval pending <0/>": string; - Approve: string; - "Approve Token": string; - "Approve {0}": (string | string[])[]; - "Approve {0} first": (string | string[])[]; - Approved: string; - Approving: string; - "Approving {0}": (string | string[])[]; - Arbiscan: string; - "Arbitrum Bridge": string; - "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Are you sure?": string; - "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; - "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; - Auto: string; - "Auto Router API": string; - "Available to deposit: {0}": (string | string[])[]; - "Balance: {0}": (string | string[])[]; - "Best for exotic pairs.": string; - "Best for most pairs.": string; - "Best for stable pairs.": string; - "Best for very stable pairs.": string; - "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; - "Blocked address": string; - Bridge: string; - "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; - "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; - Canceled: string; - Change: string; - Charts: string; - "Check network status": string; - "Check out our v3 LP walkthrough and migration guides.": string; - Claim: string; - "Claim <0/> for {0}": (string | string[])[]; - "Claim UNI": string; - "Claim UNI Token": string; - "Claim UNI reward for {0}": (string | string[])[]; - "Claim fees": string; - "Claim your UNI tokens": string; - Claimed: string; - "Claimed UNI!": string; - "Claimed!": string; - Claiming: string; - "Claiming UNI": string; - "Claiming {0} UNI": (string | string[])[]; - "Clear All": string; - "Clear all": string; - Close: string; - Closed: string; - Collect: string; - "Collect as WETH": string; - "Collect fees": string; - "Collect {0}/{1} fees": (string | string[])[]; - Collected: string; - Collecting: string; - "Collecting fees": string; - "Collecting fees will withdraw currently available fees for you.": string; - Confirm: string; - "Confirm Supply": string; - "Confirm Swap": string; - "Confirm swap": string; - "Confirm this transaction in your wallet": string; - "Confirm transaction in wallet": string; - "Connect Wallet": string; - "Connect a wallet": string; - "Connect to a wallet to find pools": string; - "Connect to a wallet to view your V2 liquidity.": string; - "Connect to a wallet to view your liquidity.": string; - "Connect wallet to swap": string; - "Connected with {name}": (string | string[])[]; - Copied: string; - "Copy Address": string; - "Create Pool & Supply": string; - "Create Proposal": string; - "Create a pair": string; - "Create a pool": string; - "Create an issue on GitHub": string; - "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; - "Create pool.": string; - "Create {0}/{1} V3 pool": (string | string[])[]; - "Current price": string; - "Current {0} Price:": (string | string[])[]; - Custom: string; - "Dark Theme": string; - Defeated: string; - "Delegate Votes": string; - "Delegate voting power to {0}": (string | string[])[]; - "Delegated to:": string; - "Delegating votes": string; - Deposit: string; - "Deposit Amounts": string; - "Deposit UNI-V2 LP Tokens": string; - "Deposit liquidity": string; - "Deposit tokens to the {label} network.": (string | string[])[]; - "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; - "Deposited liquidity:": string; - "Deposited {0} UNI-V2": (string | string[])[]; - "Depositing Liquidity": string; - Description: string; - Detailed: string; - Details: string; - Disconnect: string; - Discord: string; - Dismiss: string; - Docs: string; - "Don\u2019t see one of your v2 positions? <0>Import it.": string; - "Earned UNI tokens represent voting shares in Uniswap governance.": string; - Edit: string; - "Efficiency Comparison": string; - "Enter a percent": string; - "Enter a recipient": string; - "Enter a valid slippage percentage": string; - "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; - "Enter an amount": string; - "Enter valid list location": string; - "Enter valid token address": string; - "Enter {0} amount": (string | string[])[]; - Error: string; - "Error connecting": string; - "Error connecting. Try refreshing the page.": string; - "Error details": string; - "Error importing list": string; - "Estimate may differ due to your wallet gas settings": string; - "Estimated network fee": string; - Etherscan: string; - Executed: string; - "Expanded results from inactive Token Lists": string; - "Expected Output": string; - "Expert Mode": string; - "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; - Expired: string; - "Explore Uniswap Analytics.": string; - "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; - "Fee Tier": string; - "Fee tier": string; - "Fetching best price...": string; - "Fetching best price\u2026": string; - For: string; - "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; - From: string; - "From (at most)": string; - "Full Range": string; - "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; - "Get support on Discord": string; - "Help Center": string; - Hide: string; - "Hide closed positions": string; - "High Price Impact": string; - "How this app uses APIs": string; - "I understand": string; - "If you purchase a token from this list, you may not be able to sell it back.": string; - Import: string; - "Import List": string; - "Import Pool": string; - "Import V2 Pool": string; - "Import at your own risk": string; - "In range": string; - "Increase Liquidity": string; - "Initial prices and pool share": string; - "Initializing...": string; - "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Install Metamask": string; - "Insufficient liquidity for this trade.": string; - "Insufficient {0}": (string | string[])[]; - "Insufficient {0} balance": (string | string[])[]; - "Interface Settings": string; - "Invalid pair": string; - "Invalid pair.": string; - "Invalid price input": string; - "Invalid range selected. The min price must be lower than the max price.": string; - "Invalid recipient": string; - Language: string; - Learn: string; - "Learn about providing liquidity": string; - "Learn more": string; - "Legal & Privacy": string; - "Light Theme": string; - Liquidity: string; - "Liquidity data not available.": string; - "Liquidity provider rewards": string; - "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - Lists: string; - Loaded: string; - Loading: string; - MAX: string; - Manage: string; - "Manage Liquidity in Rewards Pool": string; - "Manage Token Lists": string; - "Manage this pool.": string; - Max: string; - "Max Price": string; - "Max price": string; - "Max slippage": string; - "Max:": string; - "Maximum sent": string; - Menu: string; - Migrate: string; - "Migrate Liquidity to V3": string; - "Migrate V2 Liquidity": string; - "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; - "Migrate {0}/{1} liquidity to V3": (string | string[])[]; - Migrating: string; - "Min Price": string; - "Min price": string; - "Min:": string; - "Minimum received": string; - "Missing dependencies": string; - "Mock Toggle": string; - More: string; - "Network Fee": string; - "Network Warning": string; - "Network fees exceed 50% of the swap amount!": string; - "New Position": string; - "No V2 Liquidity found.": string; - "No active pools": string; - "No data": string; - "No description.": string; - "No liquidity found.": string; - "No pool found.": string; - "No proposals found.": string; - "No results found.": string; - "Not created": string; - OFF: string; - ON: string; - "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; - Off: string; - On: string; - "Once you are happy with the rate click supply to review.": string; - "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; - "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; - "Optimism Gateway": string; - "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Optimistic Etherscan": string; - "Out of range": string; - "Output is estimated.": string; - "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; - "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Output will be sent to <0>{0}": (string | string[])[]; - Owner: string; - "Participating pools": string; - Pending: string; - "Please confirm you would like to remove this list by typing REMOVE": string; - "Please connect to Layer 1 Ethereum": string; - "Please connect to a supported network in the dropdown menu or in your wallet.": string; - "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; - "Polygon Bridge": string; - Polygonscan: string; - Pool: string; - "Pool Found!": string; - "Pool Rate": string; - "Pool rate": string; - "Pool tokens in rewards pool:": string; - "Pooled {0}:": (string | string[])[]; - "Pools Overview": string; - Preview: string; - Price: string; - "Price Difference:": string; - "Price Impact": string; - "Price Impact Too High": string; - "Price Updated": string; - "Price impact": string; - "Price range": string; - "Price updated": string; - "Price:": string; - "Prices and pool share": string; - Proposal: string; - "Proposal Submitted": string; - "Proposal Title": string; - Proposals: string; - "Proposals submitted by community members will appear here.": string; - "Proposed Action": string; - Proposer: string; - "Protocol Disclaimer": string; - Queued: string; - Rates: string; - "Read more about UNI": string; - "Read more about Uniswap governance": string; - "Read more about providing liquidity": string; - "Read more about unsupported assets": string; - "Recent Transactions": string; - "Recent transactions": string; - Recipient: string; - "Reload the page": string; - Remove: string; - "Remove <0/> and <1/>": string; - "Remove Amount": string; - "Remove Delegate": string; - "Remove Liquidity": string; - "Remove list": string; - "Removing {0} {1} and {2} {3}": (string | string[])[]; - "Removing {0} {1} and{2} {3}": (string | string[])[]; - "Request Features": string; - Reset: string; - Return: string; - "Review swap": string; - "Search by token name or address": string; - "Search name or paste address": string; - "Select Pair": string; - "Select a network": string; - "Select a token": string; - "Select a token to find your v2 liquidity.": string; - "Select an action": string; - "Selected Range": string; - Self: string; - "Self Delegate": string; - "Set Price Range": string; - "Set Starting Price": string; - Settings: string; - "Share of Pool": string; - "Share of Pool:": string; - "Show Portis": string; - "Show closed positions": string; - Simple: string; - "Slippage tolerance": string; - "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; - "Something went wrong": string; - "Something went wrong.": string; - "Step 1. Get UNI-V2 Liquidity tokens": string; - "Submit new proposal": string; - "Submitting Proposal": string; - "Submitting Vote": string; - Succeeded: string; - Success: string; - Supply: string; - "Supplying {0} {1} and {2} {3}": (string | string[])[]; - Swap: string; - "Swap <0/> for exactly <1/>": string; - "Swap Anyway": string; - "Swap details": string; - "Swap exactly <0/> for <1/>": string; - "Swap failed: {0}": (string | string[])[]; - "Swap summary": string; - "Swapping {0} {1} for {2} {3}": (string | string[])[]; - "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; - "Tell us what you think \u2197": string; - "Thanks for being part of the Uniswap community <0/>": string; - "The % you will earn in fees.": string; - "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; - "The app fetches blockchain data from The Graph\u2019s hosted service.": string; - "The app fetches on-chain data and constructs contract calls with an Infura API.": string; - "The app fetches the optimal trade route from a Uniswap Labs server.": string; - "The app logs anonymized usage statistics in order to improve over time.": string; - "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; - "The cost of sending this transaction is more than half of the value of the input amount.": string; - "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; - "The estimated difference between the USD values of input and output amounts.": string; - "The input token cannot be transferred. There may be an issue with the input token.": string; - "The market price is outside your specified price range. Single-asset deposit only.": string; - "The most recent block number on this network. Prices update on every block.": string; - "The output token cannot be transferred. There may be an issue with the output token.": string; - "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; - "The price of this pool is within your selected range. Your position is currently earning fees.": string; - "The ratio of tokens you add will set the price of this pool.": string; - "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; - "There is no liquidity data.": string; - "This app uses the following third-party APIs:": string; - "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; - "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; - "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; - "This token is not supported in the Uniswap Labs app": string; - "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; - "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; - "Tip: Custom tokens are stored locally in your browser": string; - To: string; - "To (at least)": string; - "Token not supported": string; - Tokens: string; - "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; - "Top pools": string; - "Total deposited": string; - "Total deposits": string; - "Trade Route": string; - Trading: string; - "Transaction Settings": string; - "Transaction Submitted": string; - "Transaction completed in": string; - "Transaction deadline": string; - "Transaction pending": string; - "Transaction rejected.": string; - "Transaction submitted": string; - "Transfer Token": string; - "Try Again": string; - "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Turn On Expert Mode": string; - "UNI has arrived": string; - "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; - "UNI {0}/{1} Burned": (string | string[])[]; - "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; - "UNI-V2 {0}-{1}": (string | string[])[]; - "Unclaimed UNI": string; - "Unclaimed fees": string; - Undetermined: string; - "Unexpected error. Could not estimate gas for the swap.": string; - "Unexpected issue with estimating the gas. Please try again.": string; - "Uniswap Governance": string; - "Uniswap Labs' Terms of Service": string; - "Uniswap available in: <0>{0}": (string | string[])[]; - "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; - "Uniswap liquidity mining": string; - "Uniswap migration contract\u2197": string; - "Unknown Source": string; - "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; - "Unlock Votes": string; - "Unlock Voting": string; - "Unlocking Votes": string; - "Unsupported Asset": string; - "Unsupported Assets": string; - "Unsupported network\u2013switch to another to trade.": string; - Untitled: string; - Unwrap: string; - "Unwrap <0/> to {0}": (string | string[])[]; - "Update Delegation": string; - "Update list": string; - "Use the Uniswap Labs API to get faster quotes.": string; - User: string; - "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; - "V2 liquidity": string; - "V3 {0} Price:": (string | string[])[]; - "View accrued fees and analytics<0>\u2197": string; - "View list": string; - "View on Etherscan": string; - "View on Explorer": string; - "View transaction on Explorer": string; - Vote: string; - "Vote Against": string; - "Vote For": string; - "Vote against proposal {proposalId}": (string | string[])[]; - "Vote against proposal {proposalKey}": (string | string[])[]; - "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote for proposal {proposalId}": (string | string[])[]; - "Vote for proposal {proposalKey}": (string | string[])[]; - "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote to abstain on proposal {proposalId}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Voting ended {0}": (string | string[])[]; - "Voting ends approximately {0}": (string | string[])[]; - "Voting starts approximately {0}": (string | string[])[]; - "Waiting For Confirmation": string; - "Wallet Address or ENS name": string; - "Weekly Rewards": string; - "Welcome to team Unicorn :)": string; - "When you claim without withdrawing your liquidity remains in the mining pool.": string; - "When you withdraw, the contract will automagically claim UNI on your behalf!": string; - "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; - Withdraw: string; - "Withdraw & Claim": string; - "Withdraw deposited liquidity": string; - "Withdrawing {0} UNI-V2": (string | string[])[]; - "Withdrew UNI-V2!": string; - Wrap: string; - "Wrap <0/> to {0}": (string | string[])[]; - "Wrong Network": string; - "You already have an active or pending proposal": string; - "You are creating a pool": string; - "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; - "You are the first liquidity provider.": string; - "You can either vote on each proposal yourself or delegate your votes to a third party.": string; - "You can now trade {0}": (string | string[])[]; - "You don't have enough votes to submit a proposal": string; - "You don\u2019t have liquidity in this pool yet.": string; - "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; - "You may have lost your network connection.": string; - "You might consider waiting until the network fees go down to complete this transaction.": string; - "You must connect an account.": string; - "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; - "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; - "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; - "You will also collect fees earned from this position.": string; - "You will receive": string; - "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; - "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; - "Your V2 liquidity": string; - "Your active V3 liquidity positions will appear here.": string; - "Your liquidity deposits": string; - "Your pool share:": string; - "Your position": string; - "Your position has 0 liquidity, and is not earning fees.": string; - "Your position will appear here.": string; - "Your position will be 100% composed of {0} at this price": (string | string[])[]; - "Your position will be 100% {0} at this price.": (string | string[])[]; - "Your position will not earn fees or be used in trades until the market price moves into your range.": string; - "Your positions": string; - "Your rate": string; - "Your total pool tokens:": string; - "Your transaction cost will be much higher as it includes the gas to create the pool.": string; - "Your transaction may be frontrun": string; - "Your transaction may fail": string; - "Your transaction will revert if it has been pending for longer than this period of time.": string; - "Your transaction will revert if it is pending for more than this period of time.": string; - "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; - "Your transactions will appear here...": string; - "Your unclaimed UNI": string; - "after slippage": string; - confirm: string; - "for {0}": (string | string[])[]; - gwei: string; - "has socks emoji": string; - "here.": string; - "https:// or ipfs:// or ENS name": string; - minutes: string; - "via {0}": (string | string[])[]; - "via {0} token list": (string | string[])[]; - "{0, plural, one {Import token} other {Import tokens}}": (string | { - one: string; - other: string; - })[][]; - "{0}": string[][]; - "{0} %": (string | string[])[]; - "{0} <0/> per <1/>": (string | string[])[]; - "{0} Custom Tokens": (string | string[])[]; - "{0} Deposited": (string | string[])[]; - "{0} ETH": (string | string[])[]; - "{0} Fees Earned:": (string | string[])[]; - "{0} Pending": (string | string[])[]; - "{0} UNI": (string | string[])[]; - "{0} UNI / week": (string | string[])[]; - "{0} UNI-V2": (string | string[])[]; - "{0} UNI-V2 LP tokens available": (string | string[])[]; - "{0} Votes": (string | string[])[]; - "{0} per {1}": (string | string[])[]; - "{0} tokens": (string | string[])[]; - "{0} {1} Price:": (string | string[])[]; - "{0} {nativeCurrencySymbol}": (string | string[])[]; - "{0} \u2022 Added by user": (string | string[])[]; - "{0}%": (string | string[])[]; - "{0}% fee tier": (string | string[])[]; - "{0}% pool": (string | string[])[]; - "{0}% select": (string | string[])[]; - "{0}-{1} Liquidity Mining": (string | string[])[]; - "{0}/{1} LP NFT": (string | string[])[]; - "{0}/{1} LP Tokens": (string | string[])[]; - "{SOCKS_AMOUNT} UNI": (string | string[])[]; - "{USER_AMOUNT} UNI": (string | string[])[]; - "{activeTokensOnThisChain} tokens": (string | string[])[]; - "{integrator} fee": (string | string[])[]; - "{label} token bridge": (string | string[])[]; - "{min}m {sec}s": (string | string[])[]; - "{percentForSlider}%": (string | string[])[]; - "{sec}s": (string | string[])[]; - "{tokenB} per {tokenA}": (string | string[])[]; - "\u2190 Back to Pools Overview": string; -}; diff --git a/dist2/types/locales/en-US.d.ts b/dist2/types/locales/en-US.d.ts deleted file mode 100644 index 75120e0e5c9..00000000000 --- a/dist2/types/locales/en-US.d.ts +++ /dev/null @@ -1,593 +0,0 @@ -export const messages: { - "$-": string; - "$<0/>": string; - "${0}": (string | string[])[]; - "(${0})": (string | string[])[]; - "(View on Explorer)": string; - "(clear all)": string; - "(edit)": string; - "- Remove recipient": string; - "0 UNI / week": string; - "25%": string; - "50%": string; - "75%": string; - "<0/> All Proposals": string; - "<0/> Votes": string; - "<0>Account analytics and accrued fees<1> \u2197 ": string; - "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; - "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; - "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; - "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; - "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; - "<0>Unlock voting to prepare for the next proposal.": string; - "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; - "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; - About: string; - Accept: string; - Account: string; - Active: string; - Add: string; - "Add <0/> and <1/> to Uniswap V2": string; - "Add Delegate +": string; - "Add Liquidity": string; - "Add V2 Liquidity": string; - "Add liquidity.": string; - "Add more liquidity": string; - "Add {0} to Metamask <0/>": (string | string[])[]; - "Add {0}-{1} liquidity": (string | string[])[]; - "Add {0}/{1} V3 liquidity": (string | string[])[]; - "Added {0}": (string | string[])[]; - "Address has no available claim": string; - Against: string; - "Allow LP token migration": string; - "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; - "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; - Allowed: string; - Amount: string; - "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Approval pending <0/>": string; - Approve: string; - "Approve Token": string; - "Approve {0}": (string | string[])[]; - "Approve {0} first": (string | string[])[]; - Approved: string; - Approving: string; - "Approving {0}": (string | string[])[]; - Arbiscan: string; - "Arbitrum Bridge": string; - "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Are you sure?": string; - "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; - "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; - Auto: string; - "Auto Router API": string; - "Available to deposit: {0}": (string | string[])[]; - "Balance: {0}": (string | string[])[]; - "Best for exotic pairs.": string; - "Best for most pairs.": string; - "Best for stable pairs.": string; - "Best for very stable pairs.": string; - "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; - "Blocked address": string; - Bridge: string; - "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; - "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; - Canceled: string; - Change: string; - Charts: string; - "Check network status": string; - "Check out our v3 LP walkthrough and migration guides.": string; - Claim: string; - "Claim <0/> for {0}": (string | string[])[]; - "Claim UNI": string; - "Claim UNI Token": string; - "Claim UNI reward for {0}": (string | string[])[]; - "Claim fees": string; - "Claim your UNI tokens": string; - Claimed: string; - "Claimed UNI!": string; - "Claimed!": string; - Claiming: string; - "Claiming UNI": string; - "Claiming {0} UNI": (string | string[])[]; - "Clear All": string; - "Clear all": string; - Close: string; - Closed: string; - Collect: string; - "Collect as WETH": string; - "Collect fees": string; - "Collect {0}/{1} fees": (string | string[])[]; - Collected: string; - Collecting: string; - "Collecting fees": string; - "Collecting fees will withdraw currently available fees for you.": string; - Confirm: string; - "Confirm Supply": string; - "Confirm Swap": string; - "Confirm swap": string; - "Confirm this transaction in your wallet": string; - "Confirm transaction in wallet": string; - "Connect Wallet": string; - "Connect a wallet": string; - "Connect to a wallet to find pools": string; - "Connect to a wallet to view your V2 liquidity.": string; - "Connect to a wallet to view your liquidity.": string; - "Connect wallet to swap": string; - "Connected with {name}": (string | string[])[]; - Copied: string; - "Copy Address": string; - "Create Pool & Supply": string; - "Create Proposal": string; - "Create a pair": string; - "Create a pool": string; - "Create an issue on GitHub": string; - "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; - "Create pool.": string; - "Create {0}/{1} V3 pool": (string | string[])[]; - "Current price": string; - "Current {0} Price:": (string | string[])[]; - Custom: string; - "Dark Theme": string; - Defeated: string; - "Delegate Votes": string; - "Delegate voting power to {0}": (string | string[])[]; - "Delegated to:": string; - "Delegating votes": string; - Deposit: string; - "Deposit Amounts": string; - "Deposit UNI-V2 LP Tokens": string; - "Deposit liquidity": string; - "Deposit tokens to the {label} network.": (string | string[])[]; - "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; - "Deposited liquidity:": string; - "Deposited {0} UNI-V2": (string | string[])[]; - "Depositing Liquidity": string; - Description: string; - Detailed: string; - Details: string; - Disconnect: string; - Discord: string; - Dismiss: string; - Docs: string; - "Don\u2019t see one of your v2 positions? <0>Import it.": string; - "Earned UNI tokens represent voting shares in Uniswap governance.": string; - Edit: string; - "Efficiency Comparison": string; - "Enter a percent": string; - "Enter a recipient": string; - "Enter a valid slippage percentage": string; - "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; - "Enter an amount": string; - "Enter valid list location": string; - "Enter valid token address": string; - "Enter {0} amount": (string | string[])[]; - Error: string; - "Error connecting": string; - "Error connecting. Try refreshing the page.": string; - "Error details": string; - "Error importing list": string; - "Estimate may differ due to your wallet gas settings": string; - "Estimated network fee": string; - Etherscan: string; - Executed: string; - "Expanded results from inactive Token Lists": string; - "Expected Output": string; - "Expert Mode": string; - "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; - Expired: string; - "Explore Uniswap Analytics.": string; - "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; - "Fee Tier": string; - "Fee tier": string; - "Fetching best price...": string; - "Fetching best price\u2026": string; - For: string; - "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; - From: string; - "From (at most)": string; - "Full Range": string; - "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; - "Get support on Discord": string; - "Help Center": string; - Hide: string; - "Hide closed positions": string; - "High Price Impact": string; - "How this app uses APIs": string; - "I understand": string; - "If you purchase a token from this list, you may not be able to sell it back.": string; - Import: string; - "Import List": string; - "Import Pool": string; - "Import V2 Pool": string; - "Import at your own risk": string; - "In range": string; - "Increase Liquidity": string; - "Initial prices and pool share": string; - "Initializing...": string; - "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Install Metamask": string; - "Insufficient liquidity for this trade.": string; - "Insufficient {0}": (string | string[])[]; - "Insufficient {0} balance": (string | string[])[]; - "Interface Settings": string; - "Invalid pair": string; - "Invalid pair.": string; - "Invalid price input": string; - "Invalid range selected. The min price must be lower than the max price.": string; - "Invalid recipient": string; - Language: string; - Learn: string; - "Learn about providing liquidity": string; - "Learn more": string; - "Legal & Privacy": string; - "Light Theme": string; - Liquidity: string; - "Liquidity data not available.": string; - "Liquidity provider rewards": string; - "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - Lists: string; - Loaded: string; - Loading: string; - MAX: string; - Manage: string; - "Manage Liquidity in Rewards Pool": string; - "Manage Token Lists": string; - "Manage this pool.": string; - Max: string; - "Max Price": string; - "Max price": string; - "Max slippage": string; - "Max:": string; - "Maximum sent": string; - Menu: string; - Migrate: string; - "Migrate Liquidity to V3": string; - "Migrate V2 Liquidity": string; - "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; - "Migrate {0}/{1} liquidity to V3": (string | string[])[]; - Migrating: string; - "Min Price": string; - "Min price": string; - "Min:": string; - "Minimum received": string; - "Missing dependencies": string; - "Mock Toggle": string; - More: string; - "Network Fee": string; - "Network Warning": string; - "Network fees exceed 50% of the swap amount!": string; - "New Position": string; - "No V2 Liquidity found.": string; - "No active pools": string; - "No data": string; - "No description.": string; - "No liquidity found.": string; - "No pool found.": string; - "No proposals found.": string; - "No results found.": string; - "Not created": string; - OFF: string; - ON: string; - "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; - Off: string; - On: string; - "Once you are happy with the rate click supply to review.": string; - "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; - "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; - "Optimism Gateway": string; - "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Optimistic Etherscan": string; - "Out of range": string; - "Output is estimated.": string; - "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; - "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Output will be sent to <0>{0}": (string | string[])[]; - Owner: string; - "Participating pools": string; - Pending: string; - "Please confirm you would like to remove this list by typing REMOVE": string; - "Please connect to Layer 1 Ethereum": string; - "Please connect to a supported network in the dropdown menu or in your wallet.": string; - "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; - "Polygon Bridge": string; - Polygonscan: string; - Pool: string; - "Pool Found!": string; - "Pool Rate": string; - "Pool rate": string; - "Pool tokens in rewards pool:": string; - "Pooled {0}:": (string | string[])[]; - "Pools Overview": string; - Preview: string; - Price: string; - "Price Difference:": string; - "Price Impact": string; - "Price Impact Too High": string; - "Price Updated": string; - "Price impact": string; - "Price range": string; - "Price updated": string; - "Price:": string; - "Prices and pool share": string; - Proposal: string; - "Proposal Submitted": string; - "Proposal Title": string; - Proposals: string; - "Proposals submitted by community members will appear here.": string; - "Proposed Action": string; - Proposer: string; - "Protocol Disclaimer": string; - Queued: string; - Rates: string; - "Read more about UNI": string; - "Read more about Uniswap governance": string; - "Read more about providing liquidity": string; - "Read more about unsupported assets": string; - "Recent Transactions": string; - "Recent transactions": string; - Recipient: string; - "Reload the page": string; - Remove: string; - "Remove <0/> and <1/>": string; - "Remove Amount": string; - "Remove Delegate": string; - "Remove Liquidity": string; - "Remove list": string; - "Removing {0} {1} and {2} {3}": (string | string[])[]; - "Removing {0} {1} and{2} {3}": (string | string[])[]; - "Request Features": string; - Reset: string; - Return: string; - "Review swap": string; - "Search by token name or address": string; - "Search name or paste address": string; - "Select Pair": string; - "Select a network": string; - "Select a token": string; - "Select a token to find your v2 liquidity.": string; - "Select an action": string; - "Selected Range": string; - Self: string; - "Self Delegate": string; - "Set Price Range": string; - "Set Starting Price": string; - Settings: string; - "Share of Pool": string; - "Share of Pool:": string; - "Show Portis": string; - "Show closed positions": string; - Simple: string; - "Slippage tolerance": string; - "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; - "Something went wrong": string; - "Something went wrong.": string; - "Step 1. Get UNI-V2 Liquidity tokens": string; - "Submit new proposal": string; - "Submitting Proposal": string; - "Submitting Vote": string; - Succeeded: string; - Success: string; - Supply: string; - "Supplying {0} {1} and {2} {3}": (string | string[])[]; - Swap: string; - "Swap <0/> for exactly <1/>": string; - "Swap Anyway": string; - "Swap details": string; - "Swap exactly <0/> for <1/>": string; - "Swap failed: {0}": (string | string[])[]; - "Swap summary": string; - "Swapping {0} {1} for {2} {3}": (string | string[])[]; - "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; - "Tell us what you think \u2197": string; - "Thanks for being part of the Uniswap community <0/>": string; - "The % you will earn in fees.": string; - "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; - "The app fetches blockchain data from The Graph\u2019s hosted service.": string; - "The app fetches on-chain data and constructs contract calls with an Infura API.": string; - "The app fetches the optimal trade route from a Uniswap Labs server.": string; - "The app logs anonymized usage statistics in order to improve over time.": string; - "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; - "The cost of sending this transaction is more than half of the value of the input amount.": string; - "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; - "The estimated difference between the USD values of input and output amounts.": string; - "The input token cannot be transferred. There may be an issue with the input token.": string; - "The market price is outside your specified price range. Single-asset deposit only.": string; - "The most recent block number on this network. Prices update on every block.": string; - "The output token cannot be transferred. There may be an issue with the output token.": string; - "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; - "The price of this pool is within your selected range. Your position is currently earning fees.": string; - "The ratio of tokens you add will set the price of this pool.": string; - "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; - "There is no liquidity data.": string; - "This app uses the following third-party APIs:": string; - "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; - "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; - "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; - "This token is not supported in the Uniswap Labs app": string; - "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; - "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; - "Tip: Custom tokens are stored locally in your browser": string; - To: string; - "To (at least)": string; - "Token not supported": string; - Tokens: string; - "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; - "Top pools": string; - "Total deposited": string; - "Total deposits": string; - "Trade Route": string; - Trading: string; - "Transaction Settings": string; - "Transaction Submitted": string; - "Transaction completed in": string; - "Transaction deadline": string; - "Transaction pending": string; - "Transaction rejected.": string; - "Transaction submitted": string; - "Transfer Token": string; - "Try Again": string; - "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Turn On Expert Mode": string; - "UNI has arrived": string; - "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; - "UNI {0}/{1} Burned": (string | string[])[]; - "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; - "UNI-V2 {0}-{1}": (string | string[])[]; - "Unclaimed UNI": string; - "Unclaimed fees": string; - Undetermined: string; - "Unexpected error. Could not estimate gas for the swap.": string; - "Unexpected issue with estimating the gas. Please try again.": string; - "Uniswap Governance": string; - "Uniswap Labs' Terms of Service": string; - "Uniswap available in: <0>{0}": (string | string[])[]; - "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; - "Uniswap liquidity mining": string; - "Uniswap migration contract\u2197": string; - "Unknown Source": string; - "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; - "Unlock Votes": string; - "Unlock Voting": string; - "Unlocking Votes": string; - "Unsupported Asset": string; - "Unsupported Assets": string; - "Unsupported network\u2013switch to another to trade.": string; - Untitled: string; - Unwrap: string; - "Unwrap <0/> to {0}": (string | string[])[]; - "Update Delegation": string; - "Update list": string; - "Use the Uniswap Labs API to get faster quotes.": string; - User: string; - "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; - "V2 liquidity": string; - "V3 {0} Price:": (string | string[])[]; - "View accrued fees and analytics<0>\u2197": string; - "View list": string; - "View on Etherscan": string; - "View on Explorer": string; - "View transaction on Explorer": string; - Vote: string; - "Vote Against": string; - "Vote For": string; - "Vote against proposal {proposalId}": (string | string[])[]; - "Vote against proposal {proposalKey}": (string | string[])[]; - "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote for proposal {proposalId}": (string | string[])[]; - "Vote for proposal {proposalKey}": (string | string[])[]; - "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote to abstain on proposal {proposalId}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Voting ended {0}": (string | string[])[]; - "Voting ends approximately {0}": (string | string[])[]; - "Voting starts approximately {0}": (string | string[])[]; - "Waiting For Confirmation": string; - "Wallet Address or ENS name": string; - "Weekly Rewards": string; - "Welcome to team Unicorn :)": string; - "When you claim without withdrawing your liquidity remains in the mining pool.": string; - "When you withdraw, the contract will automagically claim UNI on your behalf!": string; - "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; - Withdraw: string; - "Withdraw & Claim": string; - "Withdraw deposited liquidity": string; - "Withdrawing {0} UNI-V2": (string | string[])[]; - "Withdrew UNI-V2!": string; - Wrap: string; - "Wrap <0/> to {0}": (string | string[])[]; - "Wrong Network": string; - "You already have an active or pending proposal": string; - "You are creating a pool": string; - "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; - "You are the first liquidity provider.": string; - "You can either vote on each proposal yourself or delegate your votes to a third party.": string; - "You can now trade {0}": (string | string[])[]; - "You don't have enough votes to submit a proposal": string; - "You don\u2019t have liquidity in this pool yet.": string; - "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; - "You may have lost your network connection.": string; - "You might consider waiting until the network fees go down to complete this transaction.": string; - "You must connect an account.": string; - "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; - "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; - "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; - "You will also collect fees earned from this position.": string; - "You will receive": string; - "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; - "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; - "Your V2 liquidity": string; - "Your active V3 liquidity positions will appear here.": string; - "Your liquidity deposits": string; - "Your pool share:": string; - "Your position": string; - "Your position has 0 liquidity, and is not earning fees.": string; - "Your position will appear here.": string; - "Your position will be 100% composed of {0} at this price": (string | string[])[]; - "Your position will be 100% {0} at this price.": (string | string[])[]; - "Your position will not earn fees or be used in trades until the market price moves into your range.": string; - "Your positions": string; - "Your rate": string; - "Your total pool tokens:": string; - "Your transaction cost will be much higher as it includes the gas to create the pool.": string; - "Your transaction may be frontrun": string; - "Your transaction may fail": string; - "Your transaction will revert if it has been pending for longer than this period of time.": string; - "Your transaction will revert if it is pending for more than this period of time.": string; - "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; - "Your transactions will appear here...": string; - "Your unclaimed UNI": string; - "after slippage": string; - confirm: string; - "for {0}": (string | string[])[]; - gwei: string; - "has socks emoji": string; - "here.": string; - "https:// or ipfs:// or ENS name": string; - minutes: string; - "via {0}": (string | string[])[]; - "via {0} token list": (string | string[])[]; - "{0, plural, one {Import token} other {Import tokens}}": (string | { - one: string; - other: string; - })[][]; - "{0}": string[][]; - "{0} %": (string | string[])[]; - "{0} <0/> per <1/>": (string | string[])[]; - "{0} Custom Tokens": (string | string[])[]; - "{0} Deposited": (string | string[])[]; - "{0} ETH": (string | string[])[]; - "{0} Fees Earned:": (string | string[])[]; - "{0} Pending": (string | string[])[]; - "{0} UNI": (string | string[])[]; - "{0} UNI / week": (string | string[])[]; - "{0} UNI-V2": (string | string[])[]; - "{0} UNI-V2 LP tokens available": (string | string[])[]; - "{0} Votes": (string | string[])[]; - "{0} per {1}": (string | string[])[]; - "{0} tokens": (string | string[])[]; - "{0} {1} Price:": (string | string[])[]; - "{0} {nativeCurrencySymbol}": (string | string[])[]; - "{0} \u2022 Added by user": (string | string[])[]; - "{0}%": (string | string[])[]; - "{0}% fee tier": (string | string[])[]; - "{0}% pool": (string | string[])[]; - "{0}% select": (string | string[])[]; - "{0}-{1} Liquidity Mining": (string | string[])[]; - "{0}/{1} LP NFT": (string | string[])[]; - "{0}/{1} LP Tokens": (string | string[])[]; - "{SOCKS_AMOUNT} UNI": (string | string[])[]; - "{USER_AMOUNT} UNI": (string | string[])[]; - "{activeTokensOnThisChain} tokens": (string | string[])[]; - "{integrator} fee": (string | string[])[]; - "{label} token bridge": (string | string[])[]; - "{min}m {sec}s": (string | string[])[]; - "{percentForSlider}%": (string | string[])[]; - "{sec}s": (string | string[])[]; - "{tokenB} per {tokenA}": (string | string[])[]; - "\u2190 Back to Pools Overview": string; -}; diff --git a/dist2/types/locales/es-ES.d.ts b/dist2/types/locales/es-ES.d.ts deleted file mode 100644 index 261a7fbd1ca..00000000000 --- a/dist2/types/locales/es-ES.d.ts +++ /dev/null @@ -1,593 +0,0 @@ -export const messages: { - "$-": string; - "$<0/>": string; - "${0}": (string | string[])[]; - "(${0})": (string | string[])[]; - "(View on Explorer)": string; - "(clear all)": string; - "(edit)": string; - "- Remove recipient": string; - "0 UNI / week": string; - "25%": string; - "50%": string; - "75%": string; - "<0/> All Proposals": string; - "<0/> Votes": string; - "<0>Account analytics and accrued fees<1> \u2197 ": string; - "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; - "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; - "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; - "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; - "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; - "<0>Unlock voting to prepare for the next proposal.": string; - "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; - "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; - About: string; - Accept: string; - Account: string; - Active: string; - Add: string; - "Add <0/> and <1/> to Uniswap V2": string; - "Add Delegate +": string; - "Add Liquidity": string; - "Add V2 Liquidity": string; - "Add liquidity.": string; - "Add more liquidity": string; - "Add {0} to Metamask <0/>": (string | string[])[]; - "Add {0}-{1} liquidity": (string | string[])[]; - "Add {0}/{1} V3 liquidity": (string | string[])[]; - "Added {0}": (string | string[])[]; - "Address has no available claim": string; - Against: string; - "Allow LP token migration": string; - "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; - "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; - Allowed: string; - Amount: string; - "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Approval pending <0/>": string; - Approve: string; - "Approve Token": string; - "Approve {0}": (string | string[])[]; - "Approve {0} first": (string | string[])[]; - Approved: string; - Approving: string; - "Approving {0}": (string | string[])[]; - Arbiscan: string; - "Arbitrum Bridge": string; - "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Are you sure?": string; - "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; - "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; - Auto: string; - "Auto Router API": string; - "Available to deposit: {0}": (string | string[])[]; - "Balance: {0}": (string | string[])[]; - "Best for exotic pairs.": string; - "Best for most pairs.": string; - "Best for stable pairs.": string; - "Best for very stable pairs.": string; - "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; - "Blocked address": string; - Bridge: string; - "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; - "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; - Canceled: string; - Change: string; - Charts: string; - "Check network status": string; - "Check out our v3 LP walkthrough and migration guides.": string; - Claim: string; - "Claim <0/> for {0}": (string | string[])[]; - "Claim UNI": string; - "Claim UNI Token": string; - "Claim UNI reward for {0}": (string | string[])[]; - "Claim fees": string; - "Claim your UNI tokens": string; - Claimed: string; - "Claimed UNI!": string; - "Claimed!": string; - Claiming: string; - "Claiming UNI": string; - "Claiming {0} UNI": (string | string[])[]; - "Clear All": string; - "Clear all": string; - Close: string; - Closed: string; - Collect: string; - "Collect as WETH": string; - "Collect fees": string; - "Collect {0}/{1} fees": (string | string[])[]; - Collected: string; - Collecting: string; - "Collecting fees": string; - "Collecting fees will withdraw currently available fees for you.": string; - Confirm: string; - "Confirm Supply": string; - "Confirm Swap": string; - "Confirm swap": string; - "Confirm this transaction in your wallet": string; - "Confirm transaction in wallet": string; - "Connect Wallet": string; - "Connect a wallet": string; - "Connect to a wallet to find pools": string; - "Connect to a wallet to view your V2 liquidity.": string; - "Connect to a wallet to view your liquidity.": string; - "Connect wallet to swap": string; - "Connected with {name}": (string | string[])[]; - Copied: string; - "Copy Address": string; - "Create Pool & Supply": string; - "Create Proposal": string; - "Create a pair": string; - "Create a pool": string; - "Create an issue on GitHub": string; - "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; - "Create pool.": string; - "Create {0}/{1} V3 pool": (string | string[])[]; - "Current price": string; - "Current {0} Price:": (string | string[])[]; - Custom: string; - "Dark Theme": string; - Defeated: string; - "Delegate Votes": string; - "Delegate voting power to {0}": (string | string[])[]; - "Delegated to:": string; - "Delegating votes": string; - Deposit: string; - "Deposit Amounts": string; - "Deposit UNI-V2 LP Tokens": string; - "Deposit liquidity": string; - "Deposit tokens to the {label} network.": (string | string[])[]; - "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; - "Deposited liquidity:": string; - "Deposited {0} UNI-V2": (string | string[])[]; - "Depositing Liquidity": string; - Description: string; - Detailed: string; - Details: string; - Disconnect: string; - Discord: string; - Dismiss: string; - Docs: string; - "Don\u2019t see one of your v2 positions? <0>Import it.": string; - "Earned UNI tokens represent voting shares in Uniswap governance.": string; - Edit: string; - "Efficiency Comparison": string; - "Enter a percent": string; - "Enter a recipient": string; - "Enter a valid slippage percentage": string; - "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; - "Enter an amount": string; - "Enter valid list location": string; - "Enter valid token address": string; - "Enter {0} amount": (string | string[])[]; - Error: string; - "Error connecting": string; - "Error connecting. Try refreshing the page.": string; - "Error details": string; - "Error importing list": string; - "Estimate may differ due to your wallet gas settings": string; - "Estimated network fee": string; - Etherscan: string; - Executed: string; - "Expanded results from inactive Token Lists": string; - "Expected Output": string; - "Expert Mode": string; - "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; - Expired: string; - "Explore Uniswap Analytics.": string; - "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; - "Fee Tier": string; - "Fee tier": string; - "Fetching best price...": string; - "Fetching best price\u2026": string; - For: string; - "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; - From: string; - "From (at most)": string; - "Full Range": string; - "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; - "Get support on Discord": string; - "Help Center": string; - Hide: string; - "Hide closed positions": string; - "High Price Impact": string; - "How this app uses APIs": string; - "I understand": string; - "If you purchase a token from this list, you may not be able to sell it back.": string; - Import: string; - "Import List": string; - "Import Pool": string; - "Import V2 Pool": string; - "Import at your own risk": string; - "In range": string; - "Increase Liquidity": string; - "Initial prices and pool share": string; - "Initializing...": string; - "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Install Metamask": string; - "Insufficient liquidity for this trade.": string; - "Insufficient {0}": (string | string[])[]; - "Insufficient {0} balance": (string | string[])[]; - "Interface Settings": string; - "Invalid pair": string; - "Invalid pair.": string; - "Invalid price input": string; - "Invalid range selected. The min price must be lower than the max price.": string; - "Invalid recipient": string; - Language: string; - Learn: string; - "Learn about providing liquidity": string; - "Learn more": string; - "Legal & Privacy": string; - "Light Theme": string; - Liquidity: string; - "Liquidity data not available.": string; - "Liquidity provider rewards": string; - "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - Lists: string; - Loaded: string; - Loading: string; - MAX: string; - Manage: string; - "Manage Liquidity in Rewards Pool": string; - "Manage Token Lists": string; - "Manage this pool.": string; - Max: string; - "Max Price": string; - "Max price": string; - "Max slippage": string; - "Max:": string; - "Maximum sent": string; - Menu: string; - Migrate: string; - "Migrate Liquidity to V3": string; - "Migrate V2 Liquidity": string; - "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; - "Migrate {0}/{1} liquidity to V3": (string | string[])[]; - Migrating: string; - "Min Price": string; - "Min price": string; - "Min:": string; - "Minimum received": string; - "Missing dependencies": string; - "Mock Toggle": string; - More: string; - "Network Fee": string; - "Network Warning": string; - "Network fees exceed 50% of the swap amount!": string; - "New Position": string; - "No V2 Liquidity found.": string; - "No active pools": string; - "No data": string; - "No description.": string; - "No liquidity found.": string; - "No pool found.": string; - "No proposals found.": string; - "No results found.": string; - "Not created": string; - OFF: string; - ON: string; - "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; - Off: string; - On: string; - "Once you are happy with the rate click supply to review.": string; - "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; - "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; - "Optimism Gateway": string; - "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Optimistic Etherscan": string; - "Out of range": string; - "Output is estimated.": string; - "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; - "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Output will be sent to <0>{0}": (string | string[])[]; - Owner: string; - "Participating pools": string; - Pending: string; - "Please confirm you would like to remove this list by typing REMOVE": string; - "Please connect to Layer 1 Ethereum": string; - "Please connect to a supported network in the dropdown menu or in your wallet.": string; - "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; - "Polygon Bridge": string; - Polygonscan: string; - Pool: string; - "Pool Found!": string; - "Pool Rate": string; - "Pool rate": string; - "Pool tokens in rewards pool:": string; - "Pooled {0}:": (string | string[])[]; - "Pools Overview": string; - Preview: string; - Price: string; - "Price Difference:": string; - "Price Impact": string; - "Price Impact Too High": string; - "Price Updated": string; - "Price impact": string; - "Price range": string; - "Price updated": string; - "Price:": string; - "Prices and pool share": string; - Proposal: string; - "Proposal Submitted": string; - "Proposal Title": string; - Proposals: string; - "Proposals submitted by community members will appear here.": string; - "Proposed Action": string; - Proposer: string; - "Protocol Disclaimer": string; - Queued: string; - Rates: string; - "Read more about UNI": string; - "Read more about Uniswap governance": string; - "Read more about providing liquidity": string; - "Read more about unsupported assets": string; - "Recent Transactions": string; - "Recent transactions": string; - Recipient: string; - "Reload the page": string; - Remove: string; - "Remove <0/> and <1/>": string; - "Remove Amount": string; - "Remove Delegate": string; - "Remove Liquidity": string; - "Remove list": string; - "Removing {0} {1} and {2} {3}": (string | string[])[]; - "Removing {0} {1} and{2} {3}": (string | string[])[]; - "Request Features": string; - Reset: string; - Return: string; - "Review swap": string; - "Search by token name or address": string; - "Search name or paste address": string; - "Select Pair": string; - "Select a network": string; - "Select a token": string; - "Select a token to find your v2 liquidity.": string; - "Select an action": string; - "Selected Range": string; - Self: string; - "Self Delegate": string; - "Set Price Range": string; - "Set Starting Price": string; - Settings: string; - "Share of Pool": string; - "Share of Pool:": string; - "Show Portis": string; - "Show closed positions": string; - Simple: string; - "Slippage tolerance": string; - "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; - "Something went wrong": string; - "Something went wrong.": string; - "Step 1. Get UNI-V2 Liquidity tokens": string; - "Submit new proposal": string; - "Submitting Proposal": string; - "Submitting Vote": string; - Succeeded: string; - Success: string; - Supply: string; - "Supplying {0} {1} and {2} {3}": (string | string[])[]; - Swap: string; - "Swap <0/> for exactly <1/>": string; - "Swap Anyway": string; - "Swap details": string; - "Swap exactly <0/> for <1/>": string; - "Swap failed: {0}": (string | string[])[]; - "Swap summary": string; - "Swapping {0} {1} for {2} {3}": (string | string[])[]; - "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; - "Tell us what you think \u2197": string; - "Thanks for being part of the Uniswap community <0/>": string; - "The % you will earn in fees.": string; - "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; - "The app fetches blockchain data from The Graph\u2019s hosted service.": string; - "The app fetches on-chain data and constructs contract calls with an Infura API.": string; - "The app fetches the optimal trade route from a Uniswap Labs server.": string; - "The app logs anonymized usage statistics in order to improve over time.": string; - "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; - "The cost of sending this transaction is more than half of the value of the input amount.": string; - "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; - "The estimated difference between the USD values of input and output amounts.": string; - "The input token cannot be transferred. There may be an issue with the input token.": string; - "The market price is outside your specified price range. Single-asset deposit only.": string; - "The most recent block number on this network. Prices update on every block.": string; - "The output token cannot be transferred. There may be an issue with the output token.": string; - "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; - "The price of this pool is within your selected range. Your position is currently earning fees.": string; - "The ratio of tokens you add will set the price of this pool.": string; - "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; - "There is no liquidity data.": string; - "This app uses the following third-party APIs:": string; - "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; - "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; - "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; - "This token is not supported in the Uniswap Labs app": string; - "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; - "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; - "Tip: Custom tokens are stored locally in your browser": string; - To: string; - "To (at least)": string; - "Token not supported": string; - Tokens: string; - "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; - "Top pools": string; - "Total deposited": string; - "Total deposits": string; - "Trade Route": string; - Trading: string; - "Transaction Settings": string; - "Transaction Submitted": string; - "Transaction completed in": string; - "Transaction deadline": string; - "Transaction pending": string; - "Transaction rejected.": string; - "Transaction submitted": string; - "Transfer Token": string; - "Try Again": string; - "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Turn On Expert Mode": string; - "UNI has arrived": string; - "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; - "UNI {0}/{1} Burned": (string | string[])[]; - "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; - "UNI-V2 {0}-{1}": (string | string[])[]; - "Unclaimed UNI": string; - "Unclaimed fees": string; - Undetermined: string; - "Unexpected error. Could not estimate gas for the swap.": string; - "Unexpected issue with estimating the gas. Please try again.": string; - "Uniswap Governance": string; - "Uniswap Labs' Terms of Service": string; - "Uniswap available in: <0>{0}": (string | string[])[]; - "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; - "Uniswap liquidity mining": string; - "Uniswap migration contract\u2197": string; - "Unknown Source": string; - "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; - "Unlock Votes": string; - "Unlock Voting": string; - "Unlocking Votes": string; - "Unsupported Asset": string; - "Unsupported Assets": string; - "Unsupported network\u2013switch to another to trade.": string; - Untitled: string; - Unwrap: string; - "Unwrap <0/> to {0}": (string | string[])[]; - "Update Delegation": string; - "Update list": string; - "Use the Uniswap Labs API to get faster quotes.": string; - User: string; - "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; - "V2 liquidity": string; - "V3 {0} Price:": (string | string[])[]; - "View accrued fees and analytics<0>\u2197": string; - "View list": string; - "View on Etherscan": string; - "View on Explorer": string; - "View transaction on Explorer": string; - Vote: string; - "Vote Against": string; - "Vote For": string; - "Vote against proposal {proposalId}": (string | string[])[]; - "Vote against proposal {proposalKey}": (string | string[])[]; - "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote for proposal {proposalId}": (string | string[])[]; - "Vote for proposal {proposalKey}": (string | string[])[]; - "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote to abstain on proposal {proposalId}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Voting ended {0}": (string | string[])[]; - "Voting ends approximately {0}": (string | string[])[]; - "Voting starts approximately {0}": (string | string[])[]; - "Waiting For Confirmation": string; - "Wallet Address or ENS name": string; - "Weekly Rewards": string; - "Welcome to team Unicorn :)": string; - "When you claim without withdrawing your liquidity remains in the mining pool.": string; - "When you withdraw, the contract will automagically claim UNI on your behalf!": string; - "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; - Withdraw: string; - "Withdraw & Claim": string; - "Withdraw deposited liquidity": string; - "Withdrawing {0} UNI-V2": (string | string[])[]; - "Withdrew UNI-V2!": string; - Wrap: string; - "Wrap <0/> to {0}": (string | string[])[]; - "Wrong Network": string; - "You already have an active or pending proposal": string; - "You are creating a pool": string; - "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; - "You are the first liquidity provider.": string; - "You can either vote on each proposal yourself or delegate your votes to a third party.": string; - "You can now trade {0}": (string | string[])[]; - "You don't have enough votes to submit a proposal": string; - "You don\u2019t have liquidity in this pool yet.": string; - "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; - "You may have lost your network connection.": string; - "You might consider waiting until the network fees go down to complete this transaction.": string; - "You must connect an account.": string; - "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; - "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; - "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; - "You will also collect fees earned from this position.": string; - "You will receive": string; - "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; - "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; - "Your V2 liquidity": string; - "Your active V3 liquidity positions will appear here.": string; - "Your liquidity deposits": string; - "Your pool share:": string; - "Your position": string; - "Your position has 0 liquidity, and is not earning fees.": string; - "Your position will appear here.": string; - "Your position will be 100% composed of {0} at this price": (string | string[])[]; - "Your position will be 100% {0} at this price.": (string | string[])[]; - "Your position will not earn fees or be used in trades until the market price moves into your range.": string; - "Your positions": string; - "Your rate": string; - "Your total pool tokens:": string; - "Your transaction cost will be much higher as it includes the gas to create the pool.": string; - "Your transaction may be frontrun": string; - "Your transaction may fail": string; - "Your transaction will revert if it has been pending for longer than this period of time.": string; - "Your transaction will revert if it is pending for more than this period of time.": string; - "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; - "Your transactions will appear here...": string; - "Your unclaimed UNI": string; - "after slippage": string; - confirm: string; - "for {0}": (string | string[])[]; - gwei: string; - "has socks emoji": string; - "here.": string; - "https:// or ipfs:// or ENS name": string; - minutes: string; - "via {0}": (string | string[])[]; - "via {0} token list": (string | string[])[]; - "{0, plural, one {Import token} other {Import tokens}}": (string | { - one: string; - other: string; - })[][]; - "{0}": string[][]; - "{0} %": (string | string[])[]; - "{0} <0/> per <1/>": (string | string[])[]; - "{0} Custom Tokens": (string | string[])[]; - "{0} Deposited": (string | string[])[]; - "{0} ETH": (string | string[])[]; - "{0} Fees Earned:": (string | string[])[]; - "{0} Pending": (string | string[])[]; - "{0} UNI": (string | string[])[]; - "{0} UNI / week": (string | string[])[]; - "{0} UNI-V2": (string | string[])[]; - "{0} UNI-V2 LP tokens available": (string | string[])[]; - "{0} Votes": (string | string[])[]; - "{0} per {1}": (string | string[])[]; - "{0} tokens": (string | string[])[]; - "{0} {1} Price:": (string | string[])[]; - "{0} {nativeCurrencySymbol}": (string | string[])[]; - "{0} \u2022 Added by user": (string | string[])[]; - "{0}%": (string | string[])[]; - "{0}% fee tier": (string | string[])[]; - "{0}% pool": (string | string[])[]; - "{0}% select": (string | string[])[]; - "{0}-{1} Liquidity Mining": (string | string[])[]; - "{0}/{1} LP NFT": (string | string[])[]; - "{0}/{1} LP Tokens": (string | string[])[]; - "{SOCKS_AMOUNT} UNI": (string | string[])[]; - "{USER_AMOUNT} UNI": (string | string[])[]; - "{activeTokensOnThisChain} tokens": (string | string[])[]; - "{integrator} fee": (string | string[])[]; - "{label} token bridge": (string | string[])[]; - "{min}m {sec}s": (string | string[])[]; - "{percentForSlider}%": (string | string[])[]; - "{sec}s": string[][]; - "{tokenB} per {tokenA}": (string | string[])[]; - "\u2190 Back to Pools Overview": string; -}; diff --git a/dist2/types/locales/fi-FI.d.ts b/dist2/types/locales/fi-FI.d.ts deleted file mode 100644 index 75120e0e5c9..00000000000 --- a/dist2/types/locales/fi-FI.d.ts +++ /dev/null @@ -1,593 +0,0 @@ -export const messages: { - "$-": string; - "$<0/>": string; - "${0}": (string | string[])[]; - "(${0})": (string | string[])[]; - "(View on Explorer)": string; - "(clear all)": string; - "(edit)": string; - "- Remove recipient": string; - "0 UNI / week": string; - "25%": string; - "50%": string; - "75%": string; - "<0/> All Proposals": string; - "<0/> Votes": string; - "<0>Account analytics and accrued fees<1> \u2197 ": string; - "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; - "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; - "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; - "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; - "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; - "<0>Unlock voting to prepare for the next proposal.": string; - "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; - "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; - About: string; - Accept: string; - Account: string; - Active: string; - Add: string; - "Add <0/> and <1/> to Uniswap V2": string; - "Add Delegate +": string; - "Add Liquidity": string; - "Add V2 Liquidity": string; - "Add liquidity.": string; - "Add more liquidity": string; - "Add {0} to Metamask <0/>": (string | string[])[]; - "Add {0}-{1} liquidity": (string | string[])[]; - "Add {0}/{1} V3 liquidity": (string | string[])[]; - "Added {0}": (string | string[])[]; - "Address has no available claim": string; - Against: string; - "Allow LP token migration": string; - "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; - "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; - Allowed: string; - Amount: string; - "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Approval pending <0/>": string; - Approve: string; - "Approve Token": string; - "Approve {0}": (string | string[])[]; - "Approve {0} first": (string | string[])[]; - Approved: string; - Approving: string; - "Approving {0}": (string | string[])[]; - Arbiscan: string; - "Arbitrum Bridge": string; - "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Are you sure?": string; - "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; - "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; - Auto: string; - "Auto Router API": string; - "Available to deposit: {0}": (string | string[])[]; - "Balance: {0}": (string | string[])[]; - "Best for exotic pairs.": string; - "Best for most pairs.": string; - "Best for stable pairs.": string; - "Best for very stable pairs.": string; - "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; - "Blocked address": string; - Bridge: string; - "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; - "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; - Canceled: string; - Change: string; - Charts: string; - "Check network status": string; - "Check out our v3 LP walkthrough and migration guides.": string; - Claim: string; - "Claim <0/> for {0}": (string | string[])[]; - "Claim UNI": string; - "Claim UNI Token": string; - "Claim UNI reward for {0}": (string | string[])[]; - "Claim fees": string; - "Claim your UNI tokens": string; - Claimed: string; - "Claimed UNI!": string; - "Claimed!": string; - Claiming: string; - "Claiming UNI": string; - "Claiming {0} UNI": (string | string[])[]; - "Clear All": string; - "Clear all": string; - Close: string; - Closed: string; - Collect: string; - "Collect as WETH": string; - "Collect fees": string; - "Collect {0}/{1} fees": (string | string[])[]; - Collected: string; - Collecting: string; - "Collecting fees": string; - "Collecting fees will withdraw currently available fees for you.": string; - Confirm: string; - "Confirm Supply": string; - "Confirm Swap": string; - "Confirm swap": string; - "Confirm this transaction in your wallet": string; - "Confirm transaction in wallet": string; - "Connect Wallet": string; - "Connect a wallet": string; - "Connect to a wallet to find pools": string; - "Connect to a wallet to view your V2 liquidity.": string; - "Connect to a wallet to view your liquidity.": string; - "Connect wallet to swap": string; - "Connected with {name}": (string | string[])[]; - Copied: string; - "Copy Address": string; - "Create Pool & Supply": string; - "Create Proposal": string; - "Create a pair": string; - "Create a pool": string; - "Create an issue on GitHub": string; - "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; - "Create pool.": string; - "Create {0}/{1} V3 pool": (string | string[])[]; - "Current price": string; - "Current {0} Price:": (string | string[])[]; - Custom: string; - "Dark Theme": string; - Defeated: string; - "Delegate Votes": string; - "Delegate voting power to {0}": (string | string[])[]; - "Delegated to:": string; - "Delegating votes": string; - Deposit: string; - "Deposit Amounts": string; - "Deposit UNI-V2 LP Tokens": string; - "Deposit liquidity": string; - "Deposit tokens to the {label} network.": (string | string[])[]; - "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; - "Deposited liquidity:": string; - "Deposited {0} UNI-V2": (string | string[])[]; - "Depositing Liquidity": string; - Description: string; - Detailed: string; - Details: string; - Disconnect: string; - Discord: string; - Dismiss: string; - Docs: string; - "Don\u2019t see one of your v2 positions? <0>Import it.": string; - "Earned UNI tokens represent voting shares in Uniswap governance.": string; - Edit: string; - "Efficiency Comparison": string; - "Enter a percent": string; - "Enter a recipient": string; - "Enter a valid slippage percentage": string; - "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; - "Enter an amount": string; - "Enter valid list location": string; - "Enter valid token address": string; - "Enter {0} amount": (string | string[])[]; - Error: string; - "Error connecting": string; - "Error connecting. Try refreshing the page.": string; - "Error details": string; - "Error importing list": string; - "Estimate may differ due to your wallet gas settings": string; - "Estimated network fee": string; - Etherscan: string; - Executed: string; - "Expanded results from inactive Token Lists": string; - "Expected Output": string; - "Expert Mode": string; - "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; - Expired: string; - "Explore Uniswap Analytics.": string; - "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; - "Fee Tier": string; - "Fee tier": string; - "Fetching best price...": string; - "Fetching best price\u2026": string; - For: string; - "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; - From: string; - "From (at most)": string; - "Full Range": string; - "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; - "Get support on Discord": string; - "Help Center": string; - Hide: string; - "Hide closed positions": string; - "High Price Impact": string; - "How this app uses APIs": string; - "I understand": string; - "If you purchase a token from this list, you may not be able to sell it back.": string; - Import: string; - "Import List": string; - "Import Pool": string; - "Import V2 Pool": string; - "Import at your own risk": string; - "In range": string; - "Increase Liquidity": string; - "Initial prices and pool share": string; - "Initializing...": string; - "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Install Metamask": string; - "Insufficient liquidity for this trade.": string; - "Insufficient {0}": (string | string[])[]; - "Insufficient {0} balance": (string | string[])[]; - "Interface Settings": string; - "Invalid pair": string; - "Invalid pair.": string; - "Invalid price input": string; - "Invalid range selected. The min price must be lower than the max price.": string; - "Invalid recipient": string; - Language: string; - Learn: string; - "Learn about providing liquidity": string; - "Learn more": string; - "Legal & Privacy": string; - "Light Theme": string; - Liquidity: string; - "Liquidity data not available.": string; - "Liquidity provider rewards": string; - "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - Lists: string; - Loaded: string; - Loading: string; - MAX: string; - Manage: string; - "Manage Liquidity in Rewards Pool": string; - "Manage Token Lists": string; - "Manage this pool.": string; - Max: string; - "Max Price": string; - "Max price": string; - "Max slippage": string; - "Max:": string; - "Maximum sent": string; - Menu: string; - Migrate: string; - "Migrate Liquidity to V3": string; - "Migrate V2 Liquidity": string; - "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; - "Migrate {0}/{1} liquidity to V3": (string | string[])[]; - Migrating: string; - "Min Price": string; - "Min price": string; - "Min:": string; - "Minimum received": string; - "Missing dependencies": string; - "Mock Toggle": string; - More: string; - "Network Fee": string; - "Network Warning": string; - "Network fees exceed 50% of the swap amount!": string; - "New Position": string; - "No V2 Liquidity found.": string; - "No active pools": string; - "No data": string; - "No description.": string; - "No liquidity found.": string; - "No pool found.": string; - "No proposals found.": string; - "No results found.": string; - "Not created": string; - OFF: string; - ON: string; - "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; - Off: string; - On: string; - "Once you are happy with the rate click supply to review.": string; - "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; - "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; - "Optimism Gateway": string; - "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Optimistic Etherscan": string; - "Out of range": string; - "Output is estimated.": string; - "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; - "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Output will be sent to <0>{0}": (string | string[])[]; - Owner: string; - "Participating pools": string; - Pending: string; - "Please confirm you would like to remove this list by typing REMOVE": string; - "Please connect to Layer 1 Ethereum": string; - "Please connect to a supported network in the dropdown menu or in your wallet.": string; - "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; - "Polygon Bridge": string; - Polygonscan: string; - Pool: string; - "Pool Found!": string; - "Pool Rate": string; - "Pool rate": string; - "Pool tokens in rewards pool:": string; - "Pooled {0}:": (string | string[])[]; - "Pools Overview": string; - Preview: string; - Price: string; - "Price Difference:": string; - "Price Impact": string; - "Price Impact Too High": string; - "Price Updated": string; - "Price impact": string; - "Price range": string; - "Price updated": string; - "Price:": string; - "Prices and pool share": string; - Proposal: string; - "Proposal Submitted": string; - "Proposal Title": string; - Proposals: string; - "Proposals submitted by community members will appear here.": string; - "Proposed Action": string; - Proposer: string; - "Protocol Disclaimer": string; - Queued: string; - Rates: string; - "Read more about UNI": string; - "Read more about Uniswap governance": string; - "Read more about providing liquidity": string; - "Read more about unsupported assets": string; - "Recent Transactions": string; - "Recent transactions": string; - Recipient: string; - "Reload the page": string; - Remove: string; - "Remove <0/> and <1/>": string; - "Remove Amount": string; - "Remove Delegate": string; - "Remove Liquidity": string; - "Remove list": string; - "Removing {0} {1} and {2} {3}": (string | string[])[]; - "Removing {0} {1} and{2} {3}": (string | string[])[]; - "Request Features": string; - Reset: string; - Return: string; - "Review swap": string; - "Search by token name or address": string; - "Search name or paste address": string; - "Select Pair": string; - "Select a network": string; - "Select a token": string; - "Select a token to find your v2 liquidity.": string; - "Select an action": string; - "Selected Range": string; - Self: string; - "Self Delegate": string; - "Set Price Range": string; - "Set Starting Price": string; - Settings: string; - "Share of Pool": string; - "Share of Pool:": string; - "Show Portis": string; - "Show closed positions": string; - Simple: string; - "Slippage tolerance": string; - "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; - "Something went wrong": string; - "Something went wrong.": string; - "Step 1. Get UNI-V2 Liquidity tokens": string; - "Submit new proposal": string; - "Submitting Proposal": string; - "Submitting Vote": string; - Succeeded: string; - Success: string; - Supply: string; - "Supplying {0} {1} and {2} {3}": (string | string[])[]; - Swap: string; - "Swap <0/> for exactly <1/>": string; - "Swap Anyway": string; - "Swap details": string; - "Swap exactly <0/> for <1/>": string; - "Swap failed: {0}": (string | string[])[]; - "Swap summary": string; - "Swapping {0} {1} for {2} {3}": (string | string[])[]; - "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; - "Tell us what you think \u2197": string; - "Thanks for being part of the Uniswap community <0/>": string; - "The % you will earn in fees.": string; - "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; - "The app fetches blockchain data from The Graph\u2019s hosted service.": string; - "The app fetches on-chain data and constructs contract calls with an Infura API.": string; - "The app fetches the optimal trade route from a Uniswap Labs server.": string; - "The app logs anonymized usage statistics in order to improve over time.": string; - "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; - "The cost of sending this transaction is more than half of the value of the input amount.": string; - "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; - "The estimated difference between the USD values of input and output amounts.": string; - "The input token cannot be transferred. There may be an issue with the input token.": string; - "The market price is outside your specified price range. Single-asset deposit only.": string; - "The most recent block number on this network. Prices update on every block.": string; - "The output token cannot be transferred. There may be an issue with the output token.": string; - "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; - "The price of this pool is within your selected range. Your position is currently earning fees.": string; - "The ratio of tokens you add will set the price of this pool.": string; - "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; - "There is no liquidity data.": string; - "This app uses the following third-party APIs:": string; - "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; - "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; - "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; - "This token is not supported in the Uniswap Labs app": string; - "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; - "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; - "Tip: Custom tokens are stored locally in your browser": string; - To: string; - "To (at least)": string; - "Token not supported": string; - Tokens: string; - "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; - "Top pools": string; - "Total deposited": string; - "Total deposits": string; - "Trade Route": string; - Trading: string; - "Transaction Settings": string; - "Transaction Submitted": string; - "Transaction completed in": string; - "Transaction deadline": string; - "Transaction pending": string; - "Transaction rejected.": string; - "Transaction submitted": string; - "Transfer Token": string; - "Try Again": string; - "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Turn On Expert Mode": string; - "UNI has arrived": string; - "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; - "UNI {0}/{1} Burned": (string | string[])[]; - "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; - "UNI-V2 {0}-{1}": (string | string[])[]; - "Unclaimed UNI": string; - "Unclaimed fees": string; - Undetermined: string; - "Unexpected error. Could not estimate gas for the swap.": string; - "Unexpected issue with estimating the gas. Please try again.": string; - "Uniswap Governance": string; - "Uniswap Labs' Terms of Service": string; - "Uniswap available in: <0>{0}": (string | string[])[]; - "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; - "Uniswap liquidity mining": string; - "Uniswap migration contract\u2197": string; - "Unknown Source": string; - "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; - "Unlock Votes": string; - "Unlock Voting": string; - "Unlocking Votes": string; - "Unsupported Asset": string; - "Unsupported Assets": string; - "Unsupported network\u2013switch to another to trade.": string; - Untitled: string; - Unwrap: string; - "Unwrap <0/> to {0}": (string | string[])[]; - "Update Delegation": string; - "Update list": string; - "Use the Uniswap Labs API to get faster quotes.": string; - User: string; - "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; - "V2 liquidity": string; - "V3 {0} Price:": (string | string[])[]; - "View accrued fees and analytics<0>\u2197": string; - "View list": string; - "View on Etherscan": string; - "View on Explorer": string; - "View transaction on Explorer": string; - Vote: string; - "Vote Against": string; - "Vote For": string; - "Vote against proposal {proposalId}": (string | string[])[]; - "Vote against proposal {proposalKey}": (string | string[])[]; - "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote for proposal {proposalId}": (string | string[])[]; - "Vote for proposal {proposalKey}": (string | string[])[]; - "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote to abstain on proposal {proposalId}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Voting ended {0}": (string | string[])[]; - "Voting ends approximately {0}": (string | string[])[]; - "Voting starts approximately {0}": (string | string[])[]; - "Waiting For Confirmation": string; - "Wallet Address or ENS name": string; - "Weekly Rewards": string; - "Welcome to team Unicorn :)": string; - "When you claim without withdrawing your liquidity remains in the mining pool.": string; - "When you withdraw, the contract will automagically claim UNI on your behalf!": string; - "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; - Withdraw: string; - "Withdraw & Claim": string; - "Withdraw deposited liquidity": string; - "Withdrawing {0} UNI-V2": (string | string[])[]; - "Withdrew UNI-V2!": string; - Wrap: string; - "Wrap <0/> to {0}": (string | string[])[]; - "Wrong Network": string; - "You already have an active or pending proposal": string; - "You are creating a pool": string; - "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; - "You are the first liquidity provider.": string; - "You can either vote on each proposal yourself or delegate your votes to a third party.": string; - "You can now trade {0}": (string | string[])[]; - "You don't have enough votes to submit a proposal": string; - "You don\u2019t have liquidity in this pool yet.": string; - "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; - "You may have lost your network connection.": string; - "You might consider waiting until the network fees go down to complete this transaction.": string; - "You must connect an account.": string; - "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; - "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; - "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; - "You will also collect fees earned from this position.": string; - "You will receive": string; - "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; - "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; - "Your V2 liquidity": string; - "Your active V3 liquidity positions will appear here.": string; - "Your liquidity deposits": string; - "Your pool share:": string; - "Your position": string; - "Your position has 0 liquidity, and is not earning fees.": string; - "Your position will appear here.": string; - "Your position will be 100% composed of {0} at this price": (string | string[])[]; - "Your position will be 100% {0} at this price.": (string | string[])[]; - "Your position will not earn fees or be used in trades until the market price moves into your range.": string; - "Your positions": string; - "Your rate": string; - "Your total pool tokens:": string; - "Your transaction cost will be much higher as it includes the gas to create the pool.": string; - "Your transaction may be frontrun": string; - "Your transaction may fail": string; - "Your transaction will revert if it has been pending for longer than this period of time.": string; - "Your transaction will revert if it is pending for more than this period of time.": string; - "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; - "Your transactions will appear here...": string; - "Your unclaimed UNI": string; - "after slippage": string; - confirm: string; - "for {0}": (string | string[])[]; - gwei: string; - "has socks emoji": string; - "here.": string; - "https:// or ipfs:// or ENS name": string; - minutes: string; - "via {0}": (string | string[])[]; - "via {0} token list": (string | string[])[]; - "{0, plural, one {Import token} other {Import tokens}}": (string | { - one: string; - other: string; - })[][]; - "{0}": string[][]; - "{0} %": (string | string[])[]; - "{0} <0/> per <1/>": (string | string[])[]; - "{0} Custom Tokens": (string | string[])[]; - "{0} Deposited": (string | string[])[]; - "{0} ETH": (string | string[])[]; - "{0} Fees Earned:": (string | string[])[]; - "{0} Pending": (string | string[])[]; - "{0} UNI": (string | string[])[]; - "{0} UNI / week": (string | string[])[]; - "{0} UNI-V2": (string | string[])[]; - "{0} UNI-V2 LP tokens available": (string | string[])[]; - "{0} Votes": (string | string[])[]; - "{0} per {1}": (string | string[])[]; - "{0} tokens": (string | string[])[]; - "{0} {1} Price:": (string | string[])[]; - "{0} {nativeCurrencySymbol}": (string | string[])[]; - "{0} \u2022 Added by user": (string | string[])[]; - "{0}%": (string | string[])[]; - "{0}% fee tier": (string | string[])[]; - "{0}% pool": (string | string[])[]; - "{0}% select": (string | string[])[]; - "{0}-{1} Liquidity Mining": (string | string[])[]; - "{0}/{1} LP NFT": (string | string[])[]; - "{0}/{1} LP Tokens": (string | string[])[]; - "{SOCKS_AMOUNT} UNI": (string | string[])[]; - "{USER_AMOUNT} UNI": (string | string[])[]; - "{activeTokensOnThisChain} tokens": (string | string[])[]; - "{integrator} fee": (string | string[])[]; - "{label} token bridge": (string | string[])[]; - "{min}m {sec}s": (string | string[])[]; - "{percentForSlider}%": (string | string[])[]; - "{sec}s": (string | string[])[]; - "{tokenB} per {tokenA}": (string | string[])[]; - "\u2190 Back to Pools Overview": string; -}; diff --git a/dist2/types/locales/fr-FR.d.ts b/dist2/types/locales/fr-FR.d.ts deleted file mode 100644 index 75120e0e5c9..00000000000 --- a/dist2/types/locales/fr-FR.d.ts +++ /dev/null @@ -1,593 +0,0 @@ -export const messages: { - "$-": string; - "$<0/>": string; - "${0}": (string | string[])[]; - "(${0})": (string | string[])[]; - "(View on Explorer)": string; - "(clear all)": string; - "(edit)": string; - "- Remove recipient": string; - "0 UNI / week": string; - "25%": string; - "50%": string; - "75%": string; - "<0/> All Proposals": string; - "<0/> Votes": string; - "<0>Account analytics and accrued fees<1> \u2197 ": string; - "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; - "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; - "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; - "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; - "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; - "<0>Unlock voting to prepare for the next proposal.": string; - "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; - "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; - About: string; - Accept: string; - Account: string; - Active: string; - Add: string; - "Add <0/> and <1/> to Uniswap V2": string; - "Add Delegate +": string; - "Add Liquidity": string; - "Add V2 Liquidity": string; - "Add liquidity.": string; - "Add more liquidity": string; - "Add {0} to Metamask <0/>": (string | string[])[]; - "Add {0}-{1} liquidity": (string | string[])[]; - "Add {0}/{1} V3 liquidity": (string | string[])[]; - "Added {0}": (string | string[])[]; - "Address has no available claim": string; - Against: string; - "Allow LP token migration": string; - "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; - "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; - Allowed: string; - Amount: string; - "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Approval pending <0/>": string; - Approve: string; - "Approve Token": string; - "Approve {0}": (string | string[])[]; - "Approve {0} first": (string | string[])[]; - Approved: string; - Approving: string; - "Approving {0}": (string | string[])[]; - Arbiscan: string; - "Arbitrum Bridge": string; - "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Are you sure?": string; - "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; - "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; - Auto: string; - "Auto Router API": string; - "Available to deposit: {0}": (string | string[])[]; - "Balance: {0}": (string | string[])[]; - "Best for exotic pairs.": string; - "Best for most pairs.": string; - "Best for stable pairs.": string; - "Best for very stable pairs.": string; - "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; - "Blocked address": string; - Bridge: string; - "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; - "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; - Canceled: string; - Change: string; - Charts: string; - "Check network status": string; - "Check out our v3 LP walkthrough and migration guides.": string; - Claim: string; - "Claim <0/> for {0}": (string | string[])[]; - "Claim UNI": string; - "Claim UNI Token": string; - "Claim UNI reward for {0}": (string | string[])[]; - "Claim fees": string; - "Claim your UNI tokens": string; - Claimed: string; - "Claimed UNI!": string; - "Claimed!": string; - Claiming: string; - "Claiming UNI": string; - "Claiming {0} UNI": (string | string[])[]; - "Clear All": string; - "Clear all": string; - Close: string; - Closed: string; - Collect: string; - "Collect as WETH": string; - "Collect fees": string; - "Collect {0}/{1} fees": (string | string[])[]; - Collected: string; - Collecting: string; - "Collecting fees": string; - "Collecting fees will withdraw currently available fees for you.": string; - Confirm: string; - "Confirm Supply": string; - "Confirm Swap": string; - "Confirm swap": string; - "Confirm this transaction in your wallet": string; - "Confirm transaction in wallet": string; - "Connect Wallet": string; - "Connect a wallet": string; - "Connect to a wallet to find pools": string; - "Connect to a wallet to view your V2 liquidity.": string; - "Connect to a wallet to view your liquidity.": string; - "Connect wallet to swap": string; - "Connected with {name}": (string | string[])[]; - Copied: string; - "Copy Address": string; - "Create Pool & Supply": string; - "Create Proposal": string; - "Create a pair": string; - "Create a pool": string; - "Create an issue on GitHub": string; - "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; - "Create pool.": string; - "Create {0}/{1} V3 pool": (string | string[])[]; - "Current price": string; - "Current {0} Price:": (string | string[])[]; - Custom: string; - "Dark Theme": string; - Defeated: string; - "Delegate Votes": string; - "Delegate voting power to {0}": (string | string[])[]; - "Delegated to:": string; - "Delegating votes": string; - Deposit: string; - "Deposit Amounts": string; - "Deposit UNI-V2 LP Tokens": string; - "Deposit liquidity": string; - "Deposit tokens to the {label} network.": (string | string[])[]; - "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; - "Deposited liquidity:": string; - "Deposited {0} UNI-V2": (string | string[])[]; - "Depositing Liquidity": string; - Description: string; - Detailed: string; - Details: string; - Disconnect: string; - Discord: string; - Dismiss: string; - Docs: string; - "Don\u2019t see one of your v2 positions? <0>Import it.": string; - "Earned UNI tokens represent voting shares in Uniswap governance.": string; - Edit: string; - "Efficiency Comparison": string; - "Enter a percent": string; - "Enter a recipient": string; - "Enter a valid slippage percentage": string; - "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; - "Enter an amount": string; - "Enter valid list location": string; - "Enter valid token address": string; - "Enter {0} amount": (string | string[])[]; - Error: string; - "Error connecting": string; - "Error connecting. Try refreshing the page.": string; - "Error details": string; - "Error importing list": string; - "Estimate may differ due to your wallet gas settings": string; - "Estimated network fee": string; - Etherscan: string; - Executed: string; - "Expanded results from inactive Token Lists": string; - "Expected Output": string; - "Expert Mode": string; - "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; - Expired: string; - "Explore Uniswap Analytics.": string; - "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; - "Fee Tier": string; - "Fee tier": string; - "Fetching best price...": string; - "Fetching best price\u2026": string; - For: string; - "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; - From: string; - "From (at most)": string; - "Full Range": string; - "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; - "Get support on Discord": string; - "Help Center": string; - Hide: string; - "Hide closed positions": string; - "High Price Impact": string; - "How this app uses APIs": string; - "I understand": string; - "If you purchase a token from this list, you may not be able to sell it back.": string; - Import: string; - "Import List": string; - "Import Pool": string; - "Import V2 Pool": string; - "Import at your own risk": string; - "In range": string; - "Increase Liquidity": string; - "Initial prices and pool share": string; - "Initializing...": string; - "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Install Metamask": string; - "Insufficient liquidity for this trade.": string; - "Insufficient {0}": (string | string[])[]; - "Insufficient {0} balance": (string | string[])[]; - "Interface Settings": string; - "Invalid pair": string; - "Invalid pair.": string; - "Invalid price input": string; - "Invalid range selected. The min price must be lower than the max price.": string; - "Invalid recipient": string; - Language: string; - Learn: string; - "Learn about providing liquidity": string; - "Learn more": string; - "Legal & Privacy": string; - "Light Theme": string; - Liquidity: string; - "Liquidity data not available.": string; - "Liquidity provider rewards": string; - "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - Lists: string; - Loaded: string; - Loading: string; - MAX: string; - Manage: string; - "Manage Liquidity in Rewards Pool": string; - "Manage Token Lists": string; - "Manage this pool.": string; - Max: string; - "Max Price": string; - "Max price": string; - "Max slippage": string; - "Max:": string; - "Maximum sent": string; - Menu: string; - Migrate: string; - "Migrate Liquidity to V3": string; - "Migrate V2 Liquidity": string; - "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; - "Migrate {0}/{1} liquidity to V3": (string | string[])[]; - Migrating: string; - "Min Price": string; - "Min price": string; - "Min:": string; - "Minimum received": string; - "Missing dependencies": string; - "Mock Toggle": string; - More: string; - "Network Fee": string; - "Network Warning": string; - "Network fees exceed 50% of the swap amount!": string; - "New Position": string; - "No V2 Liquidity found.": string; - "No active pools": string; - "No data": string; - "No description.": string; - "No liquidity found.": string; - "No pool found.": string; - "No proposals found.": string; - "No results found.": string; - "Not created": string; - OFF: string; - ON: string; - "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; - Off: string; - On: string; - "Once you are happy with the rate click supply to review.": string; - "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; - "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; - "Optimism Gateway": string; - "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Optimistic Etherscan": string; - "Out of range": string; - "Output is estimated.": string; - "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; - "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Output will be sent to <0>{0}": (string | string[])[]; - Owner: string; - "Participating pools": string; - Pending: string; - "Please confirm you would like to remove this list by typing REMOVE": string; - "Please connect to Layer 1 Ethereum": string; - "Please connect to a supported network in the dropdown menu or in your wallet.": string; - "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; - "Polygon Bridge": string; - Polygonscan: string; - Pool: string; - "Pool Found!": string; - "Pool Rate": string; - "Pool rate": string; - "Pool tokens in rewards pool:": string; - "Pooled {0}:": (string | string[])[]; - "Pools Overview": string; - Preview: string; - Price: string; - "Price Difference:": string; - "Price Impact": string; - "Price Impact Too High": string; - "Price Updated": string; - "Price impact": string; - "Price range": string; - "Price updated": string; - "Price:": string; - "Prices and pool share": string; - Proposal: string; - "Proposal Submitted": string; - "Proposal Title": string; - Proposals: string; - "Proposals submitted by community members will appear here.": string; - "Proposed Action": string; - Proposer: string; - "Protocol Disclaimer": string; - Queued: string; - Rates: string; - "Read more about UNI": string; - "Read more about Uniswap governance": string; - "Read more about providing liquidity": string; - "Read more about unsupported assets": string; - "Recent Transactions": string; - "Recent transactions": string; - Recipient: string; - "Reload the page": string; - Remove: string; - "Remove <0/> and <1/>": string; - "Remove Amount": string; - "Remove Delegate": string; - "Remove Liquidity": string; - "Remove list": string; - "Removing {0} {1} and {2} {3}": (string | string[])[]; - "Removing {0} {1} and{2} {3}": (string | string[])[]; - "Request Features": string; - Reset: string; - Return: string; - "Review swap": string; - "Search by token name or address": string; - "Search name or paste address": string; - "Select Pair": string; - "Select a network": string; - "Select a token": string; - "Select a token to find your v2 liquidity.": string; - "Select an action": string; - "Selected Range": string; - Self: string; - "Self Delegate": string; - "Set Price Range": string; - "Set Starting Price": string; - Settings: string; - "Share of Pool": string; - "Share of Pool:": string; - "Show Portis": string; - "Show closed positions": string; - Simple: string; - "Slippage tolerance": string; - "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; - "Something went wrong": string; - "Something went wrong.": string; - "Step 1. Get UNI-V2 Liquidity tokens": string; - "Submit new proposal": string; - "Submitting Proposal": string; - "Submitting Vote": string; - Succeeded: string; - Success: string; - Supply: string; - "Supplying {0} {1} and {2} {3}": (string | string[])[]; - Swap: string; - "Swap <0/> for exactly <1/>": string; - "Swap Anyway": string; - "Swap details": string; - "Swap exactly <0/> for <1/>": string; - "Swap failed: {0}": (string | string[])[]; - "Swap summary": string; - "Swapping {0} {1} for {2} {3}": (string | string[])[]; - "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; - "Tell us what you think \u2197": string; - "Thanks for being part of the Uniswap community <0/>": string; - "The % you will earn in fees.": string; - "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; - "The app fetches blockchain data from The Graph\u2019s hosted service.": string; - "The app fetches on-chain data and constructs contract calls with an Infura API.": string; - "The app fetches the optimal trade route from a Uniswap Labs server.": string; - "The app logs anonymized usage statistics in order to improve over time.": string; - "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; - "The cost of sending this transaction is more than half of the value of the input amount.": string; - "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; - "The estimated difference between the USD values of input and output amounts.": string; - "The input token cannot be transferred. There may be an issue with the input token.": string; - "The market price is outside your specified price range. Single-asset deposit only.": string; - "The most recent block number on this network. Prices update on every block.": string; - "The output token cannot be transferred. There may be an issue with the output token.": string; - "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; - "The price of this pool is within your selected range. Your position is currently earning fees.": string; - "The ratio of tokens you add will set the price of this pool.": string; - "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; - "There is no liquidity data.": string; - "This app uses the following third-party APIs:": string; - "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; - "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; - "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; - "This token is not supported in the Uniswap Labs app": string; - "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; - "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; - "Tip: Custom tokens are stored locally in your browser": string; - To: string; - "To (at least)": string; - "Token not supported": string; - Tokens: string; - "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; - "Top pools": string; - "Total deposited": string; - "Total deposits": string; - "Trade Route": string; - Trading: string; - "Transaction Settings": string; - "Transaction Submitted": string; - "Transaction completed in": string; - "Transaction deadline": string; - "Transaction pending": string; - "Transaction rejected.": string; - "Transaction submitted": string; - "Transfer Token": string; - "Try Again": string; - "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Turn On Expert Mode": string; - "UNI has arrived": string; - "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; - "UNI {0}/{1} Burned": (string | string[])[]; - "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; - "UNI-V2 {0}-{1}": (string | string[])[]; - "Unclaimed UNI": string; - "Unclaimed fees": string; - Undetermined: string; - "Unexpected error. Could not estimate gas for the swap.": string; - "Unexpected issue with estimating the gas. Please try again.": string; - "Uniswap Governance": string; - "Uniswap Labs' Terms of Service": string; - "Uniswap available in: <0>{0}": (string | string[])[]; - "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; - "Uniswap liquidity mining": string; - "Uniswap migration contract\u2197": string; - "Unknown Source": string; - "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; - "Unlock Votes": string; - "Unlock Voting": string; - "Unlocking Votes": string; - "Unsupported Asset": string; - "Unsupported Assets": string; - "Unsupported network\u2013switch to another to trade.": string; - Untitled: string; - Unwrap: string; - "Unwrap <0/> to {0}": (string | string[])[]; - "Update Delegation": string; - "Update list": string; - "Use the Uniswap Labs API to get faster quotes.": string; - User: string; - "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; - "V2 liquidity": string; - "V3 {0} Price:": (string | string[])[]; - "View accrued fees and analytics<0>\u2197": string; - "View list": string; - "View on Etherscan": string; - "View on Explorer": string; - "View transaction on Explorer": string; - Vote: string; - "Vote Against": string; - "Vote For": string; - "Vote against proposal {proposalId}": (string | string[])[]; - "Vote against proposal {proposalKey}": (string | string[])[]; - "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote for proposal {proposalId}": (string | string[])[]; - "Vote for proposal {proposalKey}": (string | string[])[]; - "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote to abstain on proposal {proposalId}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Voting ended {0}": (string | string[])[]; - "Voting ends approximately {0}": (string | string[])[]; - "Voting starts approximately {0}": (string | string[])[]; - "Waiting For Confirmation": string; - "Wallet Address or ENS name": string; - "Weekly Rewards": string; - "Welcome to team Unicorn :)": string; - "When you claim without withdrawing your liquidity remains in the mining pool.": string; - "When you withdraw, the contract will automagically claim UNI on your behalf!": string; - "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; - Withdraw: string; - "Withdraw & Claim": string; - "Withdraw deposited liquidity": string; - "Withdrawing {0} UNI-V2": (string | string[])[]; - "Withdrew UNI-V2!": string; - Wrap: string; - "Wrap <0/> to {0}": (string | string[])[]; - "Wrong Network": string; - "You already have an active or pending proposal": string; - "You are creating a pool": string; - "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; - "You are the first liquidity provider.": string; - "You can either vote on each proposal yourself or delegate your votes to a third party.": string; - "You can now trade {0}": (string | string[])[]; - "You don't have enough votes to submit a proposal": string; - "You don\u2019t have liquidity in this pool yet.": string; - "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; - "You may have lost your network connection.": string; - "You might consider waiting until the network fees go down to complete this transaction.": string; - "You must connect an account.": string; - "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; - "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; - "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; - "You will also collect fees earned from this position.": string; - "You will receive": string; - "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; - "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; - "Your V2 liquidity": string; - "Your active V3 liquidity positions will appear here.": string; - "Your liquidity deposits": string; - "Your pool share:": string; - "Your position": string; - "Your position has 0 liquidity, and is not earning fees.": string; - "Your position will appear here.": string; - "Your position will be 100% composed of {0} at this price": (string | string[])[]; - "Your position will be 100% {0} at this price.": (string | string[])[]; - "Your position will not earn fees or be used in trades until the market price moves into your range.": string; - "Your positions": string; - "Your rate": string; - "Your total pool tokens:": string; - "Your transaction cost will be much higher as it includes the gas to create the pool.": string; - "Your transaction may be frontrun": string; - "Your transaction may fail": string; - "Your transaction will revert if it has been pending for longer than this period of time.": string; - "Your transaction will revert if it is pending for more than this period of time.": string; - "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; - "Your transactions will appear here...": string; - "Your unclaimed UNI": string; - "after slippage": string; - confirm: string; - "for {0}": (string | string[])[]; - gwei: string; - "has socks emoji": string; - "here.": string; - "https:// or ipfs:// or ENS name": string; - minutes: string; - "via {0}": (string | string[])[]; - "via {0} token list": (string | string[])[]; - "{0, plural, one {Import token} other {Import tokens}}": (string | { - one: string; - other: string; - })[][]; - "{0}": string[][]; - "{0} %": (string | string[])[]; - "{0} <0/> per <1/>": (string | string[])[]; - "{0} Custom Tokens": (string | string[])[]; - "{0} Deposited": (string | string[])[]; - "{0} ETH": (string | string[])[]; - "{0} Fees Earned:": (string | string[])[]; - "{0} Pending": (string | string[])[]; - "{0} UNI": (string | string[])[]; - "{0} UNI / week": (string | string[])[]; - "{0} UNI-V2": (string | string[])[]; - "{0} UNI-V2 LP tokens available": (string | string[])[]; - "{0} Votes": (string | string[])[]; - "{0} per {1}": (string | string[])[]; - "{0} tokens": (string | string[])[]; - "{0} {1} Price:": (string | string[])[]; - "{0} {nativeCurrencySymbol}": (string | string[])[]; - "{0} \u2022 Added by user": (string | string[])[]; - "{0}%": (string | string[])[]; - "{0}% fee tier": (string | string[])[]; - "{0}% pool": (string | string[])[]; - "{0}% select": (string | string[])[]; - "{0}-{1} Liquidity Mining": (string | string[])[]; - "{0}/{1} LP NFT": (string | string[])[]; - "{0}/{1} LP Tokens": (string | string[])[]; - "{SOCKS_AMOUNT} UNI": (string | string[])[]; - "{USER_AMOUNT} UNI": (string | string[])[]; - "{activeTokensOnThisChain} tokens": (string | string[])[]; - "{integrator} fee": (string | string[])[]; - "{label} token bridge": (string | string[])[]; - "{min}m {sec}s": (string | string[])[]; - "{percentForSlider}%": (string | string[])[]; - "{sec}s": (string | string[])[]; - "{tokenB} per {tokenA}": (string | string[])[]; - "\u2190 Back to Pools Overview": string; -}; diff --git a/dist2/types/locales/he-IL.d.ts b/dist2/types/locales/he-IL.d.ts deleted file mode 100644 index 75120e0e5c9..00000000000 --- a/dist2/types/locales/he-IL.d.ts +++ /dev/null @@ -1,593 +0,0 @@ -export const messages: { - "$-": string; - "$<0/>": string; - "${0}": (string | string[])[]; - "(${0})": (string | string[])[]; - "(View on Explorer)": string; - "(clear all)": string; - "(edit)": string; - "- Remove recipient": string; - "0 UNI / week": string; - "25%": string; - "50%": string; - "75%": string; - "<0/> All Proposals": string; - "<0/> Votes": string; - "<0>Account analytics and accrued fees<1> \u2197 ": string; - "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; - "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; - "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; - "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; - "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; - "<0>Unlock voting to prepare for the next proposal.": string; - "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; - "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; - About: string; - Accept: string; - Account: string; - Active: string; - Add: string; - "Add <0/> and <1/> to Uniswap V2": string; - "Add Delegate +": string; - "Add Liquidity": string; - "Add V2 Liquidity": string; - "Add liquidity.": string; - "Add more liquidity": string; - "Add {0} to Metamask <0/>": (string | string[])[]; - "Add {0}-{1} liquidity": (string | string[])[]; - "Add {0}/{1} V3 liquidity": (string | string[])[]; - "Added {0}": (string | string[])[]; - "Address has no available claim": string; - Against: string; - "Allow LP token migration": string; - "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; - "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; - Allowed: string; - Amount: string; - "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Approval pending <0/>": string; - Approve: string; - "Approve Token": string; - "Approve {0}": (string | string[])[]; - "Approve {0} first": (string | string[])[]; - Approved: string; - Approving: string; - "Approving {0}": (string | string[])[]; - Arbiscan: string; - "Arbitrum Bridge": string; - "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Are you sure?": string; - "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; - "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; - Auto: string; - "Auto Router API": string; - "Available to deposit: {0}": (string | string[])[]; - "Balance: {0}": (string | string[])[]; - "Best for exotic pairs.": string; - "Best for most pairs.": string; - "Best for stable pairs.": string; - "Best for very stable pairs.": string; - "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; - "Blocked address": string; - Bridge: string; - "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; - "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; - Canceled: string; - Change: string; - Charts: string; - "Check network status": string; - "Check out our v3 LP walkthrough and migration guides.": string; - Claim: string; - "Claim <0/> for {0}": (string | string[])[]; - "Claim UNI": string; - "Claim UNI Token": string; - "Claim UNI reward for {0}": (string | string[])[]; - "Claim fees": string; - "Claim your UNI tokens": string; - Claimed: string; - "Claimed UNI!": string; - "Claimed!": string; - Claiming: string; - "Claiming UNI": string; - "Claiming {0} UNI": (string | string[])[]; - "Clear All": string; - "Clear all": string; - Close: string; - Closed: string; - Collect: string; - "Collect as WETH": string; - "Collect fees": string; - "Collect {0}/{1} fees": (string | string[])[]; - Collected: string; - Collecting: string; - "Collecting fees": string; - "Collecting fees will withdraw currently available fees for you.": string; - Confirm: string; - "Confirm Supply": string; - "Confirm Swap": string; - "Confirm swap": string; - "Confirm this transaction in your wallet": string; - "Confirm transaction in wallet": string; - "Connect Wallet": string; - "Connect a wallet": string; - "Connect to a wallet to find pools": string; - "Connect to a wallet to view your V2 liquidity.": string; - "Connect to a wallet to view your liquidity.": string; - "Connect wallet to swap": string; - "Connected with {name}": (string | string[])[]; - Copied: string; - "Copy Address": string; - "Create Pool & Supply": string; - "Create Proposal": string; - "Create a pair": string; - "Create a pool": string; - "Create an issue on GitHub": string; - "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; - "Create pool.": string; - "Create {0}/{1} V3 pool": (string | string[])[]; - "Current price": string; - "Current {0} Price:": (string | string[])[]; - Custom: string; - "Dark Theme": string; - Defeated: string; - "Delegate Votes": string; - "Delegate voting power to {0}": (string | string[])[]; - "Delegated to:": string; - "Delegating votes": string; - Deposit: string; - "Deposit Amounts": string; - "Deposit UNI-V2 LP Tokens": string; - "Deposit liquidity": string; - "Deposit tokens to the {label} network.": (string | string[])[]; - "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; - "Deposited liquidity:": string; - "Deposited {0} UNI-V2": (string | string[])[]; - "Depositing Liquidity": string; - Description: string; - Detailed: string; - Details: string; - Disconnect: string; - Discord: string; - Dismiss: string; - Docs: string; - "Don\u2019t see one of your v2 positions? <0>Import it.": string; - "Earned UNI tokens represent voting shares in Uniswap governance.": string; - Edit: string; - "Efficiency Comparison": string; - "Enter a percent": string; - "Enter a recipient": string; - "Enter a valid slippage percentage": string; - "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; - "Enter an amount": string; - "Enter valid list location": string; - "Enter valid token address": string; - "Enter {0} amount": (string | string[])[]; - Error: string; - "Error connecting": string; - "Error connecting. Try refreshing the page.": string; - "Error details": string; - "Error importing list": string; - "Estimate may differ due to your wallet gas settings": string; - "Estimated network fee": string; - Etherscan: string; - Executed: string; - "Expanded results from inactive Token Lists": string; - "Expected Output": string; - "Expert Mode": string; - "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; - Expired: string; - "Explore Uniswap Analytics.": string; - "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; - "Fee Tier": string; - "Fee tier": string; - "Fetching best price...": string; - "Fetching best price\u2026": string; - For: string; - "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; - From: string; - "From (at most)": string; - "Full Range": string; - "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; - "Get support on Discord": string; - "Help Center": string; - Hide: string; - "Hide closed positions": string; - "High Price Impact": string; - "How this app uses APIs": string; - "I understand": string; - "If you purchase a token from this list, you may not be able to sell it back.": string; - Import: string; - "Import List": string; - "Import Pool": string; - "Import V2 Pool": string; - "Import at your own risk": string; - "In range": string; - "Increase Liquidity": string; - "Initial prices and pool share": string; - "Initializing...": string; - "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Install Metamask": string; - "Insufficient liquidity for this trade.": string; - "Insufficient {0}": (string | string[])[]; - "Insufficient {0} balance": (string | string[])[]; - "Interface Settings": string; - "Invalid pair": string; - "Invalid pair.": string; - "Invalid price input": string; - "Invalid range selected. The min price must be lower than the max price.": string; - "Invalid recipient": string; - Language: string; - Learn: string; - "Learn about providing liquidity": string; - "Learn more": string; - "Legal & Privacy": string; - "Light Theme": string; - Liquidity: string; - "Liquidity data not available.": string; - "Liquidity provider rewards": string; - "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - Lists: string; - Loaded: string; - Loading: string; - MAX: string; - Manage: string; - "Manage Liquidity in Rewards Pool": string; - "Manage Token Lists": string; - "Manage this pool.": string; - Max: string; - "Max Price": string; - "Max price": string; - "Max slippage": string; - "Max:": string; - "Maximum sent": string; - Menu: string; - Migrate: string; - "Migrate Liquidity to V3": string; - "Migrate V2 Liquidity": string; - "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; - "Migrate {0}/{1} liquidity to V3": (string | string[])[]; - Migrating: string; - "Min Price": string; - "Min price": string; - "Min:": string; - "Minimum received": string; - "Missing dependencies": string; - "Mock Toggle": string; - More: string; - "Network Fee": string; - "Network Warning": string; - "Network fees exceed 50% of the swap amount!": string; - "New Position": string; - "No V2 Liquidity found.": string; - "No active pools": string; - "No data": string; - "No description.": string; - "No liquidity found.": string; - "No pool found.": string; - "No proposals found.": string; - "No results found.": string; - "Not created": string; - OFF: string; - ON: string; - "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; - Off: string; - On: string; - "Once you are happy with the rate click supply to review.": string; - "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; - "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; - "Optimism Gateway": string; - "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Optimistic Etherscan": string; - "Out of range": string; - "Output is estimated.": string; - "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; - "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Output will be sent to <0>{0}": (string | string[])[]; - Owner: string; - "Participating pools": string; - Pending: string; - "Please confirm you would like to remove this list by typing REMOVE": string; - "Please connect to Layer 1 Ethereum": string; - "Please connect to a supported network in the dropdown menu or in your wallet.": string; - "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; - "Polygon Bridge": string; - Polygonscan: string; - Pool: string; - "Pool Found!": string; - "Pool Rate": string; - "Pool rate": string; - "Pool tokens in rewards pool:": string; - "Pooled {0}:": (string | string[])[]; - "Pools Overview": string; - Preview: string; - Price: string; - "Price Difference:": string; - "Price Impact": string; - "Price Impact Too High": string; - "Price Updated": string; - "Price impact": string; - "Price range": string; - "Price updated": string; - "Price:": string; - "Prices and pool share": string; - Proposal: string; - "Proposal Submitted": string; - "Proposal Title": string; - Proposals: string; - "Proposals submitted by community members will appear here.": string; - "Proposed Action": string; - Proposer: string; - "Protocol Disclaimer": string; - Queued: string; - Rates: string; - "Read more about UNI": string; - "Read more about Uniswap governance": string; - "Read more about providing liquidity": string; - "Read more about unsupported assets": string; - "Recent Transactions": string; - "Recent transactions": string; - Recipient: string; - "Reload the page": string; - Remove: string; - "Remove <0/> and <1/>": string; - "Remove Amount": string; - "Remove Delegate": string; - "Remove Liquidity": string; - "Remove list": string; - "Removing {0} {1} and {2} {3}": (string | string[])[]; - "Removing {0} {1} and{2} {3}": (string | string[])[]; - "Request Features": string; - Reset: string; - Return: string; - "Review swap": string; - "Search by token name or address": string; - "Search name or paste address": string; - "Select Pair": string; - "Select a network": string; - "Select a token": string; - "Select a token to find your v2 liquidity.": string; - "Select an action": string; - "Selected Range": string; - Self: string; - "Self Delegate": string; - "Set Price Range": string; - "Set Starting Price": string; - Settings: string; - "Share of Pool": string; - "Share of Pool:": string; - "Show Portis": string; - "Show closed positions": string; - Simple: string; - "Slippage tolerance": string; - "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; - "Something went wrong": string; - "Something went wrong.": string; - "Step 1. Get UNI-V2 Liquidity tokens": string; - "Submit new proposal": string; - "Submitting Proposal": string; - "Submitting Vote": string; - Succeeded: string; - Success: string; - Supply: string; - "Supplying {0} {1} and {2} {3}": (string | string[])[]; - Swap: string; - "Swap <0/> for exactly <1/>": string; - "Swap Anyway": string; - "Swap details": string; - "Swap exactly <0/> for <1/>": string; - "Swap failed: {0}": (string | string[])[]; - "Swap summary": string; - "Swapping {0} {1} for {2} {3}": (string | string[])[]; - "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; - "Tell us what you think \u2197": string; - "Thanks for being part of the Uniswap community <0/>": string; - "The % you will earn in fees.": string; - "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; - "The app fetches blockchain data from The Graph\u2019s hosted service.": string; - "The app fetches on-chain data and constructs contract calls with an Infura API.": string; - "The app fetches the optimal trade route from a Uniswap Labs server.": string; - "The app logs anonymized usage statistics in order to improve over time.": string; - "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; - "The cost of sending this transaction is more than half of the value of the input amount.": string; - "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; - "The estimated difference between the USD values of input and output amounts.": string; - "The input token cannot be transferred. There may be an issue with the input token.": string; - "The market price is outside your specified price range. Single-asset deposit only.": string; - "The most recent block number on this network. Prices update on every block.": string; - "The output token cannot be transferred. There may be an issue with the output token.": string; - "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; - "The price of this pool is within your selected range. Your position is currently earning fees.": string; - "The ratio of tokens you add will set the price of this pool.": string; - "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; - "There is no liquidity data.": string; - "This app uses the following third-party APIs:": string; - "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; - "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; - "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; - "This token is not supported in the Uniswap Labs app": string; - "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; - "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; - "Tip: Custom tokens are stored locally in your browser": string; - To: string; - "To (at least)": string; - "Token not supported": string; - Tokens: string; - "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; - "Top pools": string; - "Total deposited": string; - "Total deposits": string; - "Trade Route": string; - Trading: string; - "Transaction Settings": string; - "Transaction Submitted": string; - "Transaction completed in": string; - "Transaction deadline": string; - "Transaction pending": string; - "Transaction rejected.": string; - "Transaction submitted": string; - "Transfer Token": string; - "Try Again": string; - "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Turn On Expert Mode": string; - "UNI has arrived": string; - "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; - "UNI {0}/{1} Burned": (string | string[])[]; - "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; - "UNI-V2 {0}-{1}": (string | string[])[]; - "Unclaimed UNI": string; - "Unclaimed fees": string; - Undetermined: string; - "Unexpected error. Could not estimate gas for the swap.": string; - "Unexpected issue with estimating the gas. Please try again.": string; - "Uniswap Governance": string; - "Uniswap Labs' Terms of Service": string; - "Uniswap available in: <0>{0}": (string | string[])[]; - "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; - "Uniswap liquidity mining": string; - "Uniswap migration contract\u2197": string; - "Unknown Source": string; - "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; - "Unlock Votes": string; - "Unlock Voting": string; - "Unlocking Votes": string; - "Unsupported Asset": string; - "Unsupported Assets": string; - "Unsupported network\u2013switch to another to trade.": string; - Untitled: string; - Unwrap: string; - "Unwrap <0/> to {0}": (string | string[])[]; - "Update Delegation": string; - "Update list": string; - "Use the Uniswap Labs API to get faster quotes.": string; - User: string; - "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; - "V2 liquidity": string; - "V3 {0} Price:": (string | string[])[]; - "View accrued fees and analytics<0>\u2197": string; - "View list": string; - "View on Etherscan": string; - "View on Explorer": string; - "View transaction on Explorer": string; - Vote: string; - "Vote Against": string; - "Vote For": string; - "Vote against proposal {proposalId}": (string | string[])[]; - "Vote against proposal {proposalKey}": (string | string[])[]; - "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote for proposal {proposalId}": (string | string[])[]; - "Vote for proposal {proposalKey}": (string | string[])[]; - "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote to abstain on proposal {proposalId}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Voting ended {0}": (string | string[])[]; - "Voting ends approximately {0}": (string | string[])[]; - "Voting starts approximately {0}": (string | string[])[]; - "Waiting For Confirmation": string; - "Wallet Address or ENS name": string; - "Weekly Rewards": string; - "Welcome to team Unicorn :)": string; - "When you claim without withdrawing your liquidity remains in the mining pool.": string; - "When you withdraw, the contract will automagically claim UNI on your behalf!": string; - "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; - Withdraw: string; - "Withdraw & Claim": string; - "Withdraw deposited liquidity": string; - "Withdrawing {0} UNI-V2": (string | string[])[]; - "Withdrew UNI-V2!": string; - Wrap: string; - "Wrap <0/> to {0}": (string | string[])[]; - "Wrong Network": string; - "You already have an active or pending proposal": string; - "You are creating a pool": string; - "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; - "You are the first liquidity provider.": string; - "You can either vote on each proposal yourself or delegate your votes to a third party.": string; - "You can now trade {0}": (string | string[])[]; - "You don't have enough votes to submit a proposal": string; - "You don\u2019t have liquidity in this pool yet.": string; - "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; - "You may have lost your network connection.": string; - "You might consider waiting until the network fees go down to complete this transaction.": string; - "You must connect an account.": string; - "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; - "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; - "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; - "You will also collect fees earned from this position.": string; - "You will receive": string; - "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; - "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; - "Your V2 liquidity": string; - "Your active V3 liquidity positions will appear here.": string; - "Your liquidity deposits": string; - "Your pool share:": string; - "Your position": string; - "Your position has 0 liquidity, and is not earning fees.": string; - "Your position will appear here.": string; - "Your position will be 100% composed of {0} at this price": (string | string[])[]; - "Your position will be 100% {0} at this price.": (string | string[])[]; - "Your position will not earn fees or be used in trades until the market price moves into your range.": string; - "Your positions": string; - "Your rate": string; - "Your total pool tokens:": string; - "Your transaction cost will be much higher as it includes the gas to create the pool.": string; - "Your transaction may be frontrun": string; - "Your transaction may fail": string; - "Your transaction will revert if it has been pending for longer than this period of time.": string; - "Your transaction will revert if it is pending for more than this period of time.": string; - "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; - "Your transactions will appear here...": string; - "Your unclaimed UNI": string; - "after slippage": string; - confirm: string; - "for {0}": (string | string[])[]; - gwei: string; - "has socks emoji": string; - "here.": string; - "https:// or ipfs:// or ENS name": string; - minutes: string; - "via {0}": (string | string[])[]; - "via {0} token list": (string | string[])[]; - "{0, plural, one {Import token} other {Import tokens}}": (string | { - one: string; - other: string; - })[][]; - "{0}": string[][]; - "{0} %": (string | string[])[]; - "{0} <0/> per <1/>": (string | string[])[]; - "{0} Custom Tokens": (string | string[])[]; - "{0} Deposited": (string | string[])[]; - "{0} ETH": (string | string[])[]; - "{0} Fees Earned:": (string | string[])[]; - "{0} Pending": (string | string[])[]; - "{0} UNI": (string | string[])[]; - "{0} UNI / week": (string | string[])[]; - "{0} UNI-V2": (string | string[])[]; - "{0} UNI-V2 LP tokens available": (string | string[])[]; - "{0} Votes": (string | string[])[]; - "{0} per {1}": (string | string[])[]; - "{0} tokens": (string | string[])[]; - "{0} {1} Price:": (string | string[])[]; - "{0} {nativeCurrencySymbol}": (string | string[])[]; - "{0} \u2022 Added by user": (string | string[])[]; - "{0}%": (string | string[])[]; - "{0}% fee tier": (string | string[])[]; - "{0}% pool": (string | string[])[]; - "{0}% select": (string | string[])[]; - "{0}-{1} Liquidity Mining": (string | string[])[]; - "{0}/{1} LP NFT": (string | string[])[]; - "{0}/{1} LP Tokens": (string | string[])[]; - "{SOCKS_AMOUNT} UNI": (string | string[])[]; - "{USER_AMOUNT} UNI": (string | string[])[]; - "{activeTokensOnThisChain} tokens": (string | string[])[]; - "{integrator} fee": (string | string[])[]; - "{label} token bridge": (string | string[])[]; - "{min}m {sec}s": (string | string[])[]; - "{percentForSlider}%": (string | string[])[]; - "{sec}s": (string | string[])[]; - "{tokenB} per {tokenA}": (string | string[])[]; - "\u2190 Back to Pools Overview": string; -}; diff --git a/dist2/types/locales/hu-HU.d.ts b/dist2/types/locales/hu-HU.d.ts deleted file mode 100644 index 8d764f84636..00000000000 --- a/dist2/types/locales/hu-HU.d.ts +++ /dev/null @@ -1,593 +0,0 @@ -export const messages: { - "$-": string; - "$<0/>": string; - "${0}": (string | string[])[]; - "(${0})": (string | string[])[]; - "(View on Explorer)": string; - "(clear all)": string; - "(edit)": string; - "- Remove recipient": string; - "0 UNI / week": string; - "25%": string; - "50%": string; - "75%": string; - "<0/> All Proposals": string; - "<0/> Votes": string; - "<0>Account analytics and accrued fees<1> \u2197 ": string; - "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; - "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; - "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; - "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; - "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; - "<0>Unlock voting to prepare for the next proposal.": string; - "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; - "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; - About: string; - Accept: string; - Account: string; - Active: string; - Add: string; - "Add <0/> and <1/> to Uniswap V2": string; - "Add Delegate +": string; - "Add Liquidity": string; - "Add V2 Liquidity": string; - "Add liquidity.": string; - "Add more liquidity": string; - "Add {0} to Metamask <0/>": (string | string[])[]; - "Add {0}-{1} liquidity": (string | string[])[]; - "Add {0}/{1} V3 liquidity": (string | string[])[]; - "Added {0}": (string | string[])[]; - "Address has no available claim": string; - Against: string; - "Allow LP token migration": string; - "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; - "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; - Allowed: string; - Amount: string; - "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Approval pending <0/>": string; - Approve: string; - "Approve Token": string; - "Approve {0}": (string | string[])[]; - "Approve {0} first": (string | string[])[]; - Approved: string; - Approving: string; - "Approving {0}": (string | string[])[]; - Arbiscan: string; - "Arbitrum Bridge": string; - "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Are you sure?": string; - "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; - "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; - Auto: string; - "Auto Router API": string; - "Available to deposit: {0}": (string | string[])[]; - "Balance: {0}": (string | string[])[]; - "Best for exotic pairs.": string; - "Best for most pairs.": string; - "Best for stable pairs.": string; - "Best for very stable pairs.": string; - "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; - "Blocked address": string; - Bridge: string; - "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; - "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; - Canceled: string; - Change: string; - Charts: string; - "Check network status": string; - "Check out our v3 LP walkthrough and migration guides.": string; - Claim: string; - "Claim <0/> for {0}": (string | string[])[]; - "Claim UNI": string; - "Claim UNI Token": string; - "Claim UNI reward for {0}": (string | string[])[]; - "Claim fees": string; - "Claim your UNI tokens": string; - Claimed: string; - "Claimed UNI!": string; - "Claimed!": string; - Claiming: string; - "Claiming UNI": string; - "Claiming {0} UNI": (string | string[])[]; - "Clear All": string; - "Clear all": string; - Close: string; - Closed: string; - Collect: string; - "Collect as WETH": string; - "Collect fees": string; - "Collect {0}/{1} fees": (string | string[])[]; - Collected: string; - Collecting: string; - "Collecting fees": string; - "Collecting fees will withdraw currently available fees for you.": string; - Confirm: string; - "Confirm Supply": string; - "Confirm Swap": string; - "Confirm swap": string; - "Confirm this transaction in your wallet": string; - "Confirm transaction in wallet": string; - "Connect Wallet": string; - "Connect a wallet": string; - "Connect to a wallet to find pools": string; - "Connect to a wallet to view your V2 liquidity.": string; - "Connect to a wallet to view your liquidity.": string; - "Connect wallet to swap": string; - "Connected with {name}": (string | string[])[]; - Copied: string; - "Copy Address": string; - "Create Pool & Supply": string; - "Create Proposal": string; - "Create a pair": string; - "Create a pool": string; - "Create an issue on GitHub": string; - "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; - "Create pool.": string; - "Create {0}/{1} V3 pool": (string | string[])[]; - "Current price": string; - "Current {0} Price:": (string | string[])[]; - Custom: string; - "Dark Theme": string; - Defeated: string; - "Delegate Votes": string; - "Delegate voting power to {0}": (string | string[])[]; - "Delegated to:": string; - "Delegating votes": string; - Deposit: string; - "Deposit Amounts": string; - "Deposit UNI-V2 LP Tokens": string; - "Deposit liquidity": string; - "Deposit tokens to the {label} network.": (string | string[])[]; - "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; - "Deposited liquidity:": string; - "Deposited {0} UNI-V2": (string | string[])[]; - "Depositing Liquidity": string; - Description: string; - Detailed: string; - Details: string; - Disconnect: string; - Discord: string; - Dismiss: string; - Docs: string; - "Don\u2019t see one of your v2 positions? <0>Import it.": string; - "Earned UNI tokens represent voting shares in Uniswap governance.": string; - Edit: string; - "Efficiency Comparison": string; - "Enter a percent": string; - "Enter a recipient": string; - "Enter a valid slippage percentage": string; - "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; - "Enter an amount": string; - "Enter valid list location": string; - "Enter valid token address": string; - "Enter {0} amount": (string | string[])[]; - Error: string; - "Error connecting": string; - "Error connecting. Try refreshing the page.": string; - "Error details": string; - "Error importing list": string; - "Estimate may differ due to your wallet gas settings": string; - "Estimated network fee": string; - Etherscan: string; - Executed: string; - "Expanded results from inactive Token Lists": string; - "Expected Output": string; - "Expert Mode": string; - "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; - Expired: string; - "Explore Uniswap Analytics.": string; - "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; - "Fee Tier": string; - "Fee tier": string; - "Fetching best price...": string; - "Fetching best price\u2026": string; - For: string; - "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; - From: string; - "From (at most)": string; - "Full Range": string; - "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; - "Get support on Discord": string; - "Help Center": string; - Hide: string; - "Hide closed positions": string; - "High Price Impact": string; - "How this app uses APIs": string; - "I understand": string; - "If you purchase a token from this list, you may not be able to sell it back.": string; - Import: string; - "Import List": string; - "Import Pool": string; - "Import V2 Pool": string; - "Import at your own risk": string; - "In range": string; - "Increase Liquidity": string; - "Initial prices and pool share": string; - "Initializing...": string; - "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Install Metamask": string; - "Insufficient liquidity for this trade.": string; - "Insufficient {0}": (string | string[])[]; - "Insufficient {0} balance": (string | string[])[]; - "Interface Settings": string; - "Invalid pair": string; - "Invalid pair.": string; - "Invalid price input": string; - "Invalid range selected. The min price must be lower than the max price.": string; - "Invalid recipient": string; - Language: string; - Learn: string; - "Learn about providing liquidity": string; - "Learn more": string; - "Legal & Privacy": string; - "Light Theme": string; - Liquidity: string; - "Liquidity data not available.": string; - "Liquidity provider rewards": string; - "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - Lists: string; - Loaded: string; - Loading: string; - MAX: string; - Manage: string; - "Manage Liquidity in Rewards Pool": string; - "Manage Token Lists": string; - "Manage this pool.": string; - Max: string; - "Max Price": string; - "Max price": string; - "Max slippage": string; - "Max:": string; - "Maximum sent": string; - Menu: string; - Migrate: string; - "Migrate Liquidity to V3": string; - "Migrate V2 Liquidity": string; - "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; - "Migrate {0}/{1} liquidity to V3": (string | string[])[]; - Migrating: string; - "Min Price": string; - "Min price": string; - "Min:": string; - "Minimum received": string; - "Missing dependencies": string; - "Mock Toggle": string; - More: string; - "Network Fee": string; - "Network Warning": string; - "Network fees exceed 50% of the swap amount!": string; - "New Position": string; - "No V2 Liquidity found.": string; - "No active pools": string; - "No data": string; - "No description.": string; - "No liquidity found.": string; - "No pool found.": string; - "No proposals found.": string; - "No results found.": string; - "Not created": string; - OFF: string; - ON: string; - "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; - Off: string; - On: string; - "Once you are happy with the rate click supply to review.": string; - "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; - "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; - "Optimism Gateway": string; - "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Optimistic Etherscan": string; - "Out of range": string; - "Output is estimated.": string; - "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; - "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Output will be sent to <0>{0}": (string | string[])[]; - Owner: string; - "Participating pools": string; - Pending: string; - "Please confirm you would like to remove this list by typing REMOVE": string; - "Please connect to Layer 1 Ethereum": string; - "Please connect to a supported network in the dropdown menu or in your wallet.": string; - "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; - "Polygon Bridge": string; - Polygonscan: string; - Pool: string; - "Pool Found!": string; - "Pool Rate": string; - "Pool rate": string; - "Pool tokens in rewards pool:": string; - "Pooled {0}:": (string | string[])[]; - "Pools Overview": string; - Preview: string; - Price: string; - "Price Difference:": string; - "Price Impact": string; - "Price Impact Too High": string; - "Price Updated": string; - "Price impact": string; - "Price range": string; - "Price updated": string; - "Price:": string; - "Prices and pool share": string; - Proposal: string; - "Proposal Submitted": string; - "Proposal Title": string; - Proposals: string; - "Proposals submitted by community members will appear here.": string; - "Proposed Action": string; - Proposer: string; - "Protocol Disclaimer": string; - Queued: string; - Rates: string; - "Read more about UNI": string; - "Read more about Uniswap governance": string; - "Read more about providing liquidity": string; - "Read more about unsupported assets": string; - "Recent Transactions": string; - "Recent transactions": string; - Recipient: string; - "Reload the page": string; - Remove: string; - "Remove <0/> and <1/>": string; - "Remove Amount": string; - "Remove Delegate": string; - "Remove Liquidity": string; - "Remove list": string; - "Removing {0} {1} and {2} {3}": (string | string[])[]; - "Removing {0} {1} and{2} {3}": (string | string[])[]; - "Request Features": string; - Reset: string; - Return: string; - "Review swap": string; - "Search by token name or address": string; - "Search name or paste address": string; - "Select Pair": string; - "Select a network": string; - "Select a token": string; - "Select a token to find your v2 liquidity.": string; - "Select an action": string; - "Selected Range": string; - Self: string; - "Self Delegate": string; - "Set Price Range": string; - "Set Starting Price": string; - Settings: string; - "Share of Pool": string; - "Share of Pool:": string; - "Show Portis": string; - "Show closed positions": string; - Simple: string; - "Slippage tolerance": string; - "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; - "Something went wrong": string; - "Something went wrong.": string; - "Step 1. Get UNI-V2 Liquidity tokens": string; - "Submit new proposal": string; - "Submitting Proposal": string; - "Submitting Vote": string; - Succeeded: string; - Success: string; - Supply: string; - "Supplying {0} {1} and {2} {3}": (string | string[])[]; - Swap: string; - "Swap <0/> for exactly <1/>": string; - "Swap Anyway": string; - "Swap details": string; - "Swap exactly <0/> for <1/>": string; - "Swap failed: {0}": (string | string[])[]; - "Swap summary": string; - "Swapping {0} {1} for {2} {3}": (string | string[])[]; - "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; - "Tell us what you think \u2197": string; - "Thanks for being part of the Uniswap community <0/>": string; - "The % you will earn in fees.": string; - "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; - "The app fetches blockchain data from The Graph\u2019s hosted service.": string; - "The app fetches on-chain data and constructs contract calls with an Infura API.": string; - "The app fetches the optimal trade route from a Uniswap Labs server.": string; - "The app logs anonymized usage statistics in order to improve over time.": string; - "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; - "The cost of sending this transaction is more than half of the value of the input amount.": string; - "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; - "The estimated difference between the USD values of input and output amounts.": string; - "The input token cannot be transferred. There may be an issue with the input token.": string; - "The market price is outside your specified price range. Single-asset deposit only.": string; - "The most recent block number on this network. Prices update on every block.": string; - "The output token cannot be transferred. There may be an issue with the output token.": string; - "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; - "The price of this pool is within your selected range. Your position is currently earning fees.": string; - "The ratio of tokens you add will set the price of this pool.": string; - "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; - "There is no liquidity data.": string; - "This app uses the following third-party APIs:": string; - "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; - "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; - "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; - "This token is not supported in the Uniswap Labs app": string; - "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; - "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; - "Tip: Custom tokens are stored locally in your browser": string; - To: string; - "To (at least)": string; - "Token not supported": string; - Tokens: string; - "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; - "Top pools": string; - "Total deposited": string; - "Total deposits": string; - "Trade Route": string; - Trading: string; - "Transaction Settings": string; - "Transaction Submitted": string; - "Transaction completed in": string; - "Transaction deadline": string; - "Transaction pending": string; - "Transaction rejected.": string; - "Transaction submitted": string; - "Transfer Token": string; - "Try Again": string; - "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Turn On Expert Mode": string; - "UNI has arrived": string; - "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; - "UNI {0}/{1} Burned": (string | string[])[]; - "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; - "UNI-V2 {0}-{1}": (string | string[])[]; - "Unclaimed UNI": string; - "Unclaimed fees": string; - Undetermined: string; - "Unexpected error. Could not estimate gas for the swap.": string; - "Unexpected issue with estimating the gas. Please try again.": string; - "Uniswap Governance": string; - "Uniswap Labs' Terms of Service": string; - "Uniswap available in: <0>{0}": (string | string[])[]; - "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; - "Uniswap liquidity mining": string; - "Uniswap migration contract\u2197": string; - "Unknown Source": string; - "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; - "Unlock Votes": string; - "Unlock Voting": string; - "Unlocking Votes": string; - "Unsupported Asset": string; - "Unsupported Assets": string; - "Unsupported network\u2013switch to another to trade.": string; - Untitled: string; - Unwrap: string; - "Unwrap <0/> to {0}": (string | string[])[]; - "Update Delegation": string; - "Update list": string; - "Use the Uniswap Labs API to get faster quotes.": string; - User: string; - "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; - "V2 liquidity": string; - "V3 {0} Price:": (string | string[])[]; - "View accrued fees and analytics<0>\u2197": string; - "View list": string; - "View on Etherscan": string; - "View on Explorer": string; - "View transaction on Explorer": string; - Vote: string; - "Vote Against": string; - "Vote For": string; - "Vote against proposal {proposalId}": (string | string[])[]; - "Vote against proposal {proposalKey}": (string | string[])[]; - "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote for proposal {proposalId}": (string | string[])[]; - "Vote for proposal {proposalKey}": (string | string[])[]; - "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote to abstain on proposal {proposalId}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Voting ended {0}": (string | string[])[]; - "Voting ends approximately {0}": (string | string[])[]; - "Voting starts approximately {0}": (string | string[])[]; - "Waiting For Confirmation": string; - "Wallet Address or ENS name": string; - "Weekly Rewards": string; - "Welcome to team Unicorn :)": string; - "When you claim without withdrawing your liquidity remains in the mining pool.": string; - "When you withdraw, the contract will automagically claim UNI on your behalf!": string; - "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; - Withdraw: string; - "Withdraw & Claim": string; - "Withdraw deposited liquidity": string; - "Withdrawing {0} UNI-V2": (string | string[])[]; - "Withdrew UNI-V2!": string; - Wrap: string; - "Wrap <0/> to {0}": (string | string[])[]; - "Wrong Network": string; - "You already have an active or pending proposal": string; - "You are creating a pool": string; - "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; - "You are the first liquidity provider.": string; - "You can either vote on each proposal yourself or delegate your votes to a third party.": string; - "You can now trade {0}": (string | string[])[]; - "You don't have enough votes to submit a proposal": string; - "You don\u2019t have liquidity in this pool yet.": string; - "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; - "You may have lost your network connection.": string; - "You might consider waiting until the network fees go down to complete this transaction.": string; - "You must connect an account.": string; - "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; - "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; - "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; - "You will also collect fees earned from this position.": string; - "You will receive": string; - "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; - "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; - "Your V2 liquidity": string; - "Your active V3 liquidity positions will appear here.": string; - "Your liquidity deposits": string; - "Your pool share:": string; - "Your position": string; - "Your position has 0 liquidity, and is not earning fees.": string; - "Your position will appear here.": string; - "Your position will be 100% composed of {0} at this price": (string | string[])[]; - "Your position will be 100% {0} at this price.": (string | string[])[]; - "Your position will not earn fees or be used in trades until the market price moves into your range.": string; - "Your positions": string; - "Your rate": string; - "Your total pool tokens:": string; - "Your transaction cost will be much higher as it includes the gas to create the pool.": string; - "Your transaction may be frontrun": string; - "Your transaction may fail": string; - "Your transaction will revert if it has been pending for longer than this period of time.": string; - "Your transaction will revert if it is pending for more than this period of time.": string; - "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; - "Your transactions will appear here...": string; - "Your unclaimed UNI": string; - "after slippage": string; - confirm: string; - "for {0}": string[][]; - gwei: string; - "has socks emoji": string; - "here.": string; - "https:// or ipfs:// or ENS name": string; - minutes: string; - "via {0}": (string | string[])[]; - "via {0} token list": (string | string[])[]; - "{0, plural, one {Import token} other {Import tokens}}": (string | { - one: string; - other: string; - })[][]; - "{0}": string[][]; - "{0} %": (string | string[])[]; - "{0} <0/> per <1/>": (string | string[])[]; - "{0} Custom Tokens": (string | string[])[]; - "{0} Deposited": (string | string[])[]; - "{0} ETH": (string | string[])[]; - "{0} Fees Earned:": (string | string[])[]; - "{0} Pending": (string | string[])[]; - "{0} UNI": (string | string[])[]; - "{0} UNI / week": (string | string[])[]; - "{0} UNI-V2": (string | string[])[]; - "{0} UNI-V2 LP tokens available": (string | string[])[]; - "{0} Votes": (string | string[])[]; - "{0} per {1}": (string | string[])[]; - "{0} tokens": (string | string[])[]; - "{0} {1} Price:": (string | string[])[]; - "{0} {nativeCurrencySymbol}": (string | string[])[]; - "{0} \u2022 Added by user": (string | string[])[]; - "{0}%": (string | string[])[]; - "{0}% fee tier": (string | string[])[]; - "{0}% pool": (string | string[])[]; - "{0}% select": (string | string[])[]; - "{0}-{1} Liquidity Mining": (string | string[])[]; - "{0}/{1} LP NFT": (string | string[])[]; - "{0}/{1} LP Tokens": (string | string[])[]; - "{SOCKS_AMOUNT} UNI": (string | string[])[]; - "{USER_AMOUNT} UNI": (string | string[])[]; - "{activeTokensOnThisChain} tokens": (string | string[])[]; - "{integrator} fee": (string | string[])[]; - "{label} token bridge": (string | string[])[]; - "{min}m {sec}s": (string | string[])[]; - "{percentForSlider}%": (string | string[])[]; - "{sec}s": (string | string[])[]; - "{tokenB} per {tokenA}": (string | string[])[]; - "\u2190 Back to Pools Overview": string; -}; diff --git a/dist2/types/locales/id-ID.d.ts b/dist2/types/locales/id-ID.d.ts deleted file mode 100644 index 75120e0e5c9..00000000000 --- a/dist2/types/locales/id-ID.d.ts +++ /dev/null @@ -1,593 +0,0 @@ -export const messages: { - "$-": string; - "$<0/>": string; - "${0}": (string | string[])[]; - "(${0})": (string | string[])[]; - "(View on Explorer)": string; - "(clear all)": string; - "(edit)": string; - "- Remove recipient": string; - "0 UNI / week": string; - "25%": string; - "50%": string; - "75%": string; - "<0/> All Proposals": string; - "<0/> Votes": string; - "<0>Account analytics and accrued fees<1> \u2197 ": string; - "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; - "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; - "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; - "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; - "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; - "<0>Unlock voting to prepare for the next proposal.": string; - "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; - "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; - About: string; - Accept: string; - Account: string; - Active: string; - Add: string; - "Add <0/> and <1/> to Uniswap V2": string; - "Add Delegate +": string; - "Add Liquidity": string; - "Add V2 Liquidity": string; - "Add liquidity.": string; - "Add more liquidity": string; - "Add {0} to Metamask <0/>": (string | string[])[]; - "Add {0}-{1} liquidity": (string | string[])[]; - "Add {0}/{1} V3 liquidity": (string | string[])[]; - "Added {0}": (string | string[])[]; - "Address has no available claim": string; - Against: string; - "Allow LP token migration": string; - "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; - "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; - Allowed: string; - Amount: string; - "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Approval pending <0/>": string; - Approve: string; - "Approve Token": string; - "Approve {0}": (string | string[])[]; - "Approve {0} first": (string | string[])[]; - Approved: string; - Approving: string; - "Approving {0}": (string | string[])[]; - Arbiscan: string; - "Arbitrum Bridge": string; - "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Are you sure?": string; - "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; - "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; - Auto: string; - "Auto Router API": string; - "Available to deposit: {0}": (string | string[])[]; - "Balance: {0}": (string | string[])[]; - "Best for exotic pairs.": string; - "Best for most pairs.": string; - "Best for stable pairs.": string; - "Best for very stable pairs.": string; - "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; - "Blocked address": string; - Bridge: string; - "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; - "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; - Canceled: string; - Change: string; - Charts: string; - "Check network status": string; - "Check out our v3 LP walkthrough and migration guides.": string; - Claim: string; - "Claim <0/> for {0}": (string | string[])[]; - "Claim UNI": string; - "Claim UNI Token": string; - "Claim UNI reward for {0}": (string | string[])[]; - "Claim fees": string; - "Claim your UNI tokens": string; - Claimed: string; - "Claimed UNI!": string; - "Claimed!": string; - Claiming: string; - "Claiming UNI": string; - "Claiming {0} UNI": (string | string[])[]; - "Clear All": string; - "Clear all": string; - Close: string; - Closed: string; - Collect: string; - "Collect as WETH": string; - "Collect fees": string; - "Collect {0}/{1} fees": (string | string[])[]; - Collected: string; - Collecting: string; - "Collecting fees": string; - "Collecting fees will withdraw currently available fees for you.": string; - Confirm: string; - "Confirm Supply": string; - "Confirm Swap": string; - "Confirm swap": string; - "Confirm this transaction in your wallet": string; - "Confirm transaction in wallet": string; - "Connect Wallet": string; - "Connect a wallet": string; - "Connect to a wallet to find pools": string; - "Connect to a wallet to view your V2 liquidity.": string; - "Connect to a wallet to view your liquidity.": string; - "Connect wallet to swap": string; - "Connected with {name}": (string | string[])[]; - Copied: string; - "Copy Address": string; - "Create Pool & Supply": string; - "Create Proposal": string; - "Create a pair": string; - "Create a pool": string; - "Create an issue on GitHub": string; - "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; - "Create pool.": string; - "Create {0}/{1} V3 pool": (string | string[])[]; - "Current price": string; - "Current {0} Price:": (string | string[])[]; - Custom: string; - "Dark Theme": string; - Defeated: string; - "Delegate Votes": string; - "Delegate voting power to {0}": (string | string[])[]; - "Delegated to:": string; - "Delegating votes": string; - Deposit: string; - "Deposit Amounts": string; - "Deposit UNI-V2 LP Tokens": string; - "Deposit liquidity": string; - "Deposit tokens to the {label} network.": (string | string[])[]; - "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; - "Deposited liquidity:": string; - "Deposited {0} UNI-V2": (string | string[])[]; - "Depositing Liquidity": string; - Description: string; - Detailed: string; - Details: string; - Disconnect: string; - Discord: string; - Dismiss: string; - Docs: string; - "Don\u2019t see one of your v2 positions? <0>Import it.": string; - "Earned UNI tokens represent voting shares in Uniswap governance.": string; - Edit: string; - "Efficiency Comparison": string; - "Enter a percent": string; - "Enter a recipient": string; - "Enter a valid slippage percentage": string; - "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; - "Enter an amount": string; - "Enter valid list location": string; - "Enter valid token address": string; - "Enter {0} amount": (string | string[])[]; - Error: string; - "Error connecting": string; - "Error connecting. Try refreshing the page.": string; - "Error details": string; - "Error importing list": string; - "Estimate may differ due to your wallet gas settings": string; - "Estimated network fee": string; - Etherscan: string; - Executed: string; - "Expanded results from inactive Token Lists": string; - "Expected Output": string; - "Expert Mode": string; - "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; - Expired: string; - "Explore Uniswap Analytics.": string; - "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; - "Fee Tier": string; - "Fee tier": string; - "Fetching best price...": string; - "Fetching best price\u2026": string; - For: string; - "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; - From: string; - "From (at most)": string; - "Full Range": string; - "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; - "Get support on Discord": string; - "Help Center": string; - Hide: string; - "Hide closed positions": string; - "High Price Impact": string; - "How this app uses APIs": string; - "I understand": string; - "If you purchase a token from this list, you may not be able to sell it back.": string; - Import: string; - "Import List": string; - "Import Pool": string; - "Import V2 Pool": string; - "Import at your own risk": string; - "In range": string; - "Increase Liquidity": string; - "Initial prices and pool share": string; - "Initializing...": string; - "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Install Metamask": string; - "Insufficient liquidity for this trade.": string; - "Insufficient {0}": (string | string[])[]; - "Insufficient {0} balance": (string | string[])[]; - "Interface Settings": string; - "Invalid pair": string; - "Invalid pair.": string; - "Invalid price input": string; - "Invalid range selected. The min price must be lower than the max price.": string; - "Invalid recipient": string; - Language: string; - Learn: string; - "Learn about providing liquidity": string; - "Learn more": string; - "Legal & Privacy": string; - "Light Theme": string; - Liquidity: string; - "Liquidity data not available.": string; - "Liquidity provider rewards": string; - "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - Lists: string; - Loaded: string; - Loading: string; - MAX: string; - Manage: string; - "Manage Liquidity in Rewards Pool": string; - "Manage Token Lists": string; - "Manage this pool.": string; - Max: string; - "Max Price": string; - "Max price": string; - "Max slippage": string; - "Max:": string; - "Maximum sent": string; - Menu: string; - Migrate: string; - "Migrate Liquidity to V3": string; - "Migrate V2 Liquidity": string; - "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; - "Migrate {0}/{1} liquidity to V3": (string | string[])[]; - Migrating: string; - "Min Price": string; - "Min price": string; - "Min:": string; - "Minimum received": string; - "Missing dependencies": string; - "Mock Toggle": string; - More: string; - "Network Fee": string; - "Network Warning": string; - "Network fees exceed 50% of the swap amount!": string; - "New Position": string; - "No V2 Liquidity found.": string; - "No active pools": string; - "No data": string; - "No description.": string; - "No liquidity found.": string; - "No pool found.": string; - "No proposals found.": string; - "No results found.": string; - "Not created": string; - OFF: string; - ON: string; - "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; - Off: string; - On: string; - "Once you are happy with the rate click supply to review.": string; - "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; - "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; - "Optimism Gateway": string; - "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Optimistic Etherscan": string; - "Out of range": string; - "Output is estimated.": string; - "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; - "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Output will be sent to <0>{0}": (string | string[])[]; - Owner: string; - "Participating pools": string; - Pending: string; - "Please confirm you would like to remove this list by typing REMOVE": string; - "Please connect to Layer 1 Ethereum": string; - "Please connect to a supported network in the dropdown menu or in your wallet.": string; - "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; - "Polygon Bridge": string; - Polygonscan: string; - Pool: string; - "Pool Found!": string; - "Pool Rate": string; - "Pool rate": string; - "Pool tokens in rewards pool:": string; - "Pooled {0}:": (string | string[])[]; - "Pools Overview": string; - Preview: string; - Price: string; - "Price Difference:": string; - "Price Impact": string; - "Price Impact Too High": string; - "Price Updated": string; - "Price impact": string; - "Price range": string; - "Price updated": string; - "Price:": string; - "Prices and pool share": string; - Proposal: string; - "Proposal Submitted": string; - "Proposal Title": string; - Proposals: string; - "Proposals submitted by community members will appear here.": string; - "Proposed Action": string; - Proposer: string; - "Protocol Disclaimer": string; - Queued: string; - Rates: string; - "Read more about UNI": string; - "Read more about Uniswap governance": string; - "Read more about providing liquidity": string; - "Read more about unsupported assets": string; - "Recent Transactions": string; - "Recent transactions": string; - Recipient: string; - "Reload the page": string; - Remove: string; - "Remove <0/> and <1/>": string; - "Remove Amount": string; - "Remove Delegate": string; - "Remove Liquidity": string; - "Remove list": string; - "Removing {0} {1} and {2} {3}": (string | string[])[]; - "Removing {0} {1} and{2} {3}": (string | string[])[]; - "Request Features": string; - Reset: string; - Return: string; - "Review swap": string; - "Search by token name or address": string; - "Search name or paste address": string; - "Select Pair": string; - "Select a network": string; - "Select a token": string; - "Select a token to find your v2 liquidity.": string; - "Select an action": string; - "Selected Range": string; - Self: string; - "Self Delegate": string; - "Set Price Range": string; - "Set Starting Price": string; - Settings: string; - "Share of Pool": string; - "Share of Pool:": string; - "Show Portis": string; - "Show closed positions": string; - Simple: string; - "Slippage tolerance": string; - "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; - "Something went wrong": string; - "Something went wrong.": string; - "Step 1. Get UNI-V2 Liquidity tokens": string; - "Submit new proposal": string; - "Submitting Proposal": string; - "Submitting Vote": string; - Succeeded: string; - Success: string; - Supply: string; - "Supplying {0} {1} and {2} {3}": (string | string[])[]; - Swap: string; - "Swap <0/> for exactly <1/>": string; - "Swap Anyway": string; - "Swap details": string; - "Swap exactly <0/> for <1/>": string; - "Swap failed: {0}": (string | string[])[]; - "Swap summary": string; - "Swapping {0} {1} for {2} {3}": (string | string[])[]; - "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; - "Tell us what you think \u2197": string; - "Thanks for being part of the Uniswap community <0/>": string; - "The % you will earn in fees.": string; - "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; - "The app fetches blockchain data from The Graph\u2019s hosted service.": string; - "The app fetches on-chain data and constructs contract calls with an Infura API.": string; - "The app fetches the optimal trade route from a Uniswap Labs server.": string; - "The app logs anonymized usage statistics in order to improve over time.": string; - "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; - "The cost of sending this transaction is more than half of the value of the input amount.": string; - "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; - "The estimated difference between the USD values of input and output amounts.": string; - "The input token cannot be transferred. There may be an issue with the input token.": string; - "The market price is outside your specified price range. Single-asset deposit only.": string; - "The most recent block number on this network. Prices update on every block.": string; - "The output token cannot be transferred. There may be an issue with the output token.": string; - "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; - "The price of this pool is within your selected range. Your position is currently earning fees.": string; - "The ratio of tokens you add will set the price of this pool.": string; - "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; - "There is no liquidity data.": string; - "This app uses the following third-party APIs:": string; - "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; - "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; - "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; - "This token is not supported in the Uniswap Labs app": string; - "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; - "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; - "Tip: Custom tokens are stored locally in your browser": string; - To: string; - "To (at least)": string; - "Token not supported": string; - Tokens: string; - "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; - "Top pools": string; - "Total deposited": string; - "Total deposits": string; - "Trade Route": string; - Trading: string; - "Transaction Settings": string; - "Transaction Submitted": string; - "Transaction completed in": string; - "Transaction deadline": string; - "Transaction pending": string; - "Transaction rejected.": string; - "Transaction submitted": string; - "Transfer Token": string; - "Try Again": string; - "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Turn On Expert Mode": string; - "UNI has arrived": string; - "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; - "UNI {0}/{1} Burned": (string | string[])[]; - "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; - "UNI-V2 {0}-{1}": (string | string[])[]; - "Unclaimed UNI": string; - "Unclaimed fees": string; - Undetermined: string; - "Unexpected error. Could not estimate gas for the swap.": string; - "Unexpected issue with estimating the gas. Please try again.": string; - "Uniswap Governance": string; - "Uniswap Labs' Terms of Service": string; - "Uniswap available in: <0>{0}": (string | string[])[]; - "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; - "Uniswap liquidity mining": string; - "Uniswap migration contract\u2197": string; - "Unknown Source": string; - "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; - "Unlock Votes": string; - "Unlock Voting": string; - "Unlocking Votes": string; - "Unsupported Asset": string; - "Unsupported Assets": string; - "Unsupported network\u2013switch to another to trade.": string; - Untitled: string; - Unwrap: string; - "Unwrap <0/> to {0}": (string | string[])[]; - "Update Delegation": string; - "Update list": string; - "Use the Uniswap Labs API to get faster quotes.": string; - User: string; - "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; - "V2 liquidity": string; - "V3 {0} Price:": (string | string[])[]; - "View accrued fees and analytics<0>\u2197": string; - "View list": string; - "View on Etherscan": string; - "View on Explorer": string; - "View transaction on Explorer": string; - Vote: string; - "Vote Against": string; - "Vote For": string; - "Vote against proposal {proposalId}": (string | string[])[]; - "Vote against proposal {proposalKey}": (string | string[])[]; - "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote for proposal {proposalId}": (string | string[])[]; - "Vote for proposal {proposalKey}": (string | string[])[]; - "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote to abstain on proposal {proposalId}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Voting ended {0}": (string | string[])[]; - "Voting ends approximately {0}": (string | string[])[]; - "Voting starts approximately {0}": (string | string[])[]; - "Waiting For Confirmation": string; - "Wallet Address or ENS name": string; - "Weekly Rewards": string; - "Welcome to team Unicorn :)": string; - "When you claim without withdrawing your liquidity remains in the mining pool.": string; - "When you withdraw, the contract will automagically claim UNI on your behalf!": string; - "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; - Withdraw: string; - "Withdraw & Claim": string; - "Withdraw deposited liquidity": string; - "Withdrawing {0} UNI-V2": (string | string[])[]; - "Withdrew UNI-V2!": string; - Wrap: string; - "Wrap <0/> to {0}": (string | string[])[]; - "Wrong Network": string; - "You already have an active or pending proposal": string; - "You are creating a pool": string; - "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; - "You are the first liquidity provider.": string; - "You can either vote on each proposal yourself or delegate your votes to a third party.": string; - "You can now trade {0}": (string | string[])[]; - "You don't have enough votes to submit a proposal": string; - "You don\u2019t have liquidity in this pool yet.": string; - "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; - "You may have lost your network connection.": string; - "You might consider waiting until the network fees go down to complete this transaction.": string; - "You must connect an account.": string; - "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; - "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; - "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; - "You will also collect fees earned from this position.": string; - "You will receive": string; - "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; - "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; - "Your V2 liquidity": string; - "Your active V3 liquidity positions will appear here.": string; - "Your liquidity deposits": string; - "Your pool share:": string; - "Your position": string; - "Your position has 0 liquidity, and is not earning fees.": string; - "Your position will appear here.": string; - "Your position will be 100% composed of {0} at this price": (string | string[])[]; - "Your position will be 100% {0} at this price.": (string | string[])[]; - "Your position will not earn fees or be used in trades until the market price moves into your range.": string; - "Your positions": string; - "Your rate": string; - "Your total pool tokens:": string; - "Your transaction cost will be much higher as it includes the gas to create the pool.": string; - "Your transaction may be frontrun": string; - "Your transaction may fail": string; - "Your transaction will revert if it has been pending for longer than this period of time.": string; - "Your transaction will revert if it is pending for more than this period of time.": string; - "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; - "Your transactions will appear here...": string; - "Your unclaimed UNI": string; - "after slippage": string; - confirm: string; - "for {0}": (string | string[])[]; - gwei: string; - "has socks emoji": string; - "here.": string; - "https:// or ipfs:// or ENS name": string; - minutes: string; - "via {0}": (string | string[])[]; - "via {0} token list": (string | string[])[]; - "{0, plural, one {Import token} other {Import tokens}}": (string | { - one: string; - other: string; - })[][]; - "{0}": string[][]; - "{0} %": (string | string[])[]; - "{0} <0/> per <1/>": (string | string[])[]; - "{0} Custom Tokens": (string | string[])[]; - "{0} Deposited": (string | string[])[]; - "{0} ETH": (string | string[])[]; - "{0} Fees Earned:": (string | string[])[]; - "{0} Pending": (string | string[])[]; - "{0} UNI": (string | string[])[]; - "{0} UNI / week": (string | string[])[]; - "{0} UNI-V2": (string | string[])[]; - "{0} UNI-V2 LP tokens available": (string | string[])[]; - "{0} Votes": (string | string[])[]; - "{0} per {1}": (string | string[])[]; - "{0} tokens": (string | string[])[]; - "{0} {1} Price:": (string | string[])[]; - "{0} {nativeCurrencySymbol}": (string | string[])[]; - "{0} \u2022 Added by user": (string | string[])[]; - "{0}%": (string | string[])[]; - "{0}% fee tier": (string | string[])[]; - "{0}% pool": (string | string[])[]; - "{0}% select": (string | string[])[]; - "{0}-{1} Liquidity Mining": (string | string[])[]; - "{0}/{1} LP NFT": (string | string[])[]; - "{0}/{1} LP Tokens": (string | string[])[]; - "{SOCKS_AMOUNT} UNI": (string | string[])[]; - "{USER_AMOUNT} UNI": (string | string[])[]; - "{activeTokensOnThisChain} tokens": (string | string[])[]; - "{integrator} fee": (string | string[])[]; - "{label} token bridge": (string | string[])[]; - "{min}m {sec}s": (string | string[])[]; - "{percentForSlider}%": (string | string[])[]; - "{sec}s": (string | string[])[]; - "{tokenB} per {tokenA}": (string | string[])[]; - "\u2190 Back to Pools Overview": string; -}; diff --git a/dist2/types/locales/it-IT.d.ts b/dist2/types/locales/it-IT.d.ts deleted file mode 100644 index 75120e0e5c9..00000000000 --- a/dist2/types/locales/it-IT.d.ts +++ /dev/null @@ -1,593 +0,0 @@ -export const messages: { - "$-": string; - "$<0/>": string; - "${0}": (string | string[])[]; - "(${0})": (string | string[])[]; - "(View on Explorer)": string; - "(clear all)": string; - "(edit)": string; - "- Remove recipient": string; - "0 UNI / week": string; - "25%": string; - "50%": string; - "75%": string; - "<0/> All Proposals": string; - "<0/> Votes": string; - "<0>Account analytics and accrued fees<1> \u2197 ": string; - "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; - "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; - "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; - "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; - "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; - "<0>Unlock voting to prepare for the next proposal.": string; - "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; - "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; - About: string; - Accept: string; - Account: string; - Active: string; - Add: string; - "Add <0/> and <1/> to Uniswap V2": string; - "Add Delegate +": string; - "Add Liquidity": string; - "Add V2 Liquidity": string; - "Add liquidity.": string; - "Add more liquidity": string; - "Add {0} to Metamask <0/>": (string | string[])[]; - "Add {0}-{1} liquidity": (string | string[])[]; - "Add {0}/{1} V3 liquidity": (string | string[])[]; - "Added {0}": (string | string[])[]; - "Address has no available claim": string; - Against: string; - "Allow LP token migration": string; - "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; - "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; - Allowed: string; - Amount: string; - "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Approval pending <0/>": string; - Approve: string; - "Approve Token": string; - "Approve {0}": (string | string[])[]; - "Approve {0} first": (string | string[])[]; - Approved: string; - Approving: string; - "Approving {0}": (string | string[])[]; - Arbiscan: string; - "Arbitrum Bridge": string; - "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Are you sure?": string; - "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; - "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; - Auto: string; - "Auto Router API": string; - "Available to deposit: {0}": (string | string[])[]; - "Balance: {0}": (string | string[])[]; - "Best for exotic pairs.": string; - "Best for most pairs.": string; - "Best for stable pairs.": string; - "Best for very stable pairs.": string; - "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; - "Blocked address": string; - Bridge: string; - "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; - "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; - Canceled: string; - Change: string; - Charts: string; - "Check network status": string; - "Check out our v3 LP walkthrough and migration guides.": string; - Claim: string; - "Claim <0/> for {0}": (string | string[])[]; - "Claim UNI": string; - "Claim UNI Token": string; - "Claim UNI reward for {0}": (string | string[])[]; - "Claim fees": string; - "Claim your UNI tokens": string; - Claimed: string; - "Claimed UNI!": string; - "Claimed!": string; - Claiming: string; - "Claiming UNI": string; - "Claiming {0} UNI": (string | string[])[]; - "Clear All": string; - "Clear all": string; - Close: string; - Closed: string; - Collect: string; - "Collect as WETH": string; - "Collect fees": string; - "Collect {0}/{1} fees": (string | string[])[]; - Collected: string; - Collecting: string; - "Collecting fees": string; - "Collecting fees will withdraw currently available fees for you.": string; - Confirm: string; - "Confirm Supply": string; - "Confirm Swap": string; - "Confirm swap": string; - "Confirm this transaction in your wallet": string; - "Confirm transaction in wallet": string; - "Connect Wallet": string; - "Connect a wallet": string; - "Connect to a wallet to find pools": string; - "Connect to a wallet to view your V2 liquidity.": string; - "Connect to a wallet to view your liquidity.": string; - "Connect wallet to swap": string; - "Connected with {name}": (string | string[])[]; - Copied: string; - "Copy Address": string; - "Create Pool & Supply": string; - "Create Proposal": string; - "Create a pair": string; - "Create a pool": string; - "Create an issue on GitHub": string; - "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; - "Create pool.": string; - "Create {0}/{1} V3 pool": (string | string[])[]; - "Current price": string; - "Current {0} Price:": (string | string[])[]; - Custom: string; - "Dark Theme": string; - Defeated: string; - "Delegate Votes": string; - "Delegate voting power to {0}": (string | string[])[]; - "Delegated to:": string; - "Delegating votes": string; - Deposit: string; - "Deposit Amounts": string; - "Deposit UNI-V2 LP Tokens": string; - "Deposit liquidity": string; - "Deposit tokens to the {label} network.": (string | string[])[]; - "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; - "Deposited liquidity:": string; - "Deposited {0} UNI-V2": (string | string[])[]; - "Depositing Liquidity": string; - Description: string; - Detailed: string; - Details: string; - Disconnect: string; - Discord: string; - Dismiss: string; - Docs: string; - "Don\u2019t see one of your v2 positions? <0>Import it.": string; - "Earned UNI tokens represent voting shares in Uniswap governance.": string; - Edit: string; - "Efficiency Comparison": string; - "Enter a percent": string; - "Enter a recipient": string; - "Enter a valid slippage percentage": string; - "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; - "Enter an amount": string; - "Enter valid list location": string; - "Enter valid token address": string; - "Enter {0} amount": (string | string[])[]; - Error: string; - "Error connecting": string; - "Error connecting. Try refreshing the page.": string; - "Error details": string; - "Error importing list": string; - "Estimate may differ due to your wallet gas settings": string; - "Estimated network fee": string; - Etherscan: string; - Executed: string; - "Expanded results from inactive Token Lists": string; - "Expected Output": string; - "Expert Mode": string; - "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; - Expired: string; - "Explore Uniswap Analytics.": string; - "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; - "Fee Tier": string; - "Fee tier": string; - "Fetching best price...": string; - "Fetching best price\u2026": string; - For: string; - "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; - From: string; - "From (at most)": string; - "Full Range": string; - "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; - "Get support on Discord": string; - "Help Center": string; - Hide: string; - "Hide closed positions": string; - "High Price Impact": string; - "How this app uses APIs": string; - "I understand": string; - "If you purchase a token from this list, you may not be able to sell it back.": string; - Import: string; - "Import List": string; - "Import Pool": string; - "Import V2 Pool": string; - "Import at your own risk": string; - "In range": string; - "Increase Liquidity": string; - "Initial prices and pool share": string; - "Initializing...": string; - "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Install Metamask": string; - "Insufficient liquidity for this trade.": string; - "Insufficient {0}": (string | string[])[]; - "Insufficient {0} balance": (string | string[])[]; - "Interface Settings": string; - "Invalid pair": string; - "Invalid pair.": string; - "Invalid price input": string; - "Invalid range selected. The min price must be lower than the max price.": string; - "Invalid recipient": string; - Language: string; - Learn: string; - "Learn about providing liquidity": string; - "Learn more": string; - "Legal & Privacy": string; - "Light Theme": string; - Liquidity: string; - "Liquidity data not available.": string; - "Liquidity provider rewards": string; - "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - Lists: string; - Loaded: string; - Loading: string; - MAX: string; - Manage: string; - "Manage Liquidity in Rewards Pool": string; - "Manage Token Lists": string; - "Manage this pool.": string; - Max: string; - "Max Price": string; - "Max price": string; - "Max slippage": string; - "Max:": string; - "Maximum sent": string; - Menu: string; - Migrate: string; - "Migrate Liquidity to V3": string; - "Migrate V2 Liquidity": string; - "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; - "Migrate {0}/{1} liquidity to V3": (string | string[])[]; - Migrating: string; - "Min Price": string; - "Min price": string; - "Min:": string; - "Minimum received": string; - "Missing dependencies": string; - "Mock Toggle": string; - More: string; - "Network Fee": string; - "Network Warning": string; - "Network fees exceed 50% of the swap amount!": string; - "New Position": string; - "No V2 Liquidity found.": string; - "No active pools": string; - "No data": string; - "No description.": string; - "No liquidity found.": string; - "No pool found.": string; - "No proposals found.": string; - "No results found.": string; - "Not created": string; - OFF: string; - ON: string; - "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; - Off: string; - On: string; - "Once you are happy with the rate click supply to review.": string; - "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; - "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; - "Optimism Gateway": string; - "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Optimistic Etherscan": string; - "Out of range": string; - "Output is estimated.": string; - "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; - "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Output will be sent to <0>{0}": (string | string[])[]; - Owner: string; - "Participating pools": string; - Pending: string; - "Please confirm you would like to remove this list by typing REMOVE": string; - "Please connect to Layer 1 Ethereum": string; - "Please connect to a supported network in the dropdown menu or in your wallet.": string; - "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; - "Polygon Bridge": string; - Polygonscan: string; - Pool: string; - "Pool Found!": string; - "Pool Rate": string; - "Pool rate": string; - "Pool tokens in rewards pool:": string; - "Pooled {0}:": (string | string[])[]; - "Pools Overview": string; - Preview: string; - Price: string; - "Price Difference:": string; - "Price Impact": string; - "Price Impact Too High": string; - "Price Updated": string; - "Price impact": string; - "Price range": string; - "Price updated": string; - "Price:": string; - "Prices and pool share": string; - Proposal: string; - "Proposal Submitted": string; - "Proposal Title": string; - Proposals: string; - "Proposals submitted by community members will appear here.": string; - "Proposed Action": string; - Proposer: string; - "Protocol Disclaimer": string; - Queued: string; - Rates: string; - "Read more about UNI": string; - "Read more about Uniswap governance": string; - "Read more about providing liquidity": string; - "Read more about unsupported assets": string; - "Recent Transactions": string; - "Recent transactions": string; - Recipient: string; - "Reload the page": string; - Remove: string; - "Remove <0/> and <1/>": string; - "Remove Amount": string; - "Remove Delegate": string; - "Remove Liquidity": string; - "Remove list": string; - "Removing {0} {1} and {2} {3}": (string | string[])[]; - "Removing {0} {1} and{2} {3}": (string | string[])[]; - "Request Features": string; - Reset: string; - Return: string; - "Review swap": string; - "Search by token name or address": string; - "Search name or paste address": string; - "Select Pair": string; - "Select a network": string; - "Select a token": string; - "Select a token to find your v2 liquidity.": string; - "Select an action": string; - "Selected Range": string; - Self: string; - "Self Delegate": string; - "Set Price Range": string; - "Set Starting Price": string; - Settings: string; - "Share of Pool": string; - "Share of Pool:": string; - "Show Portis": string; - "Show closed positions": string; - Simple: string; - "Slippage tolerance": string; - "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; - "Something went wrong": string; - "Something went wrong.": string; - "Step 1. Get UNI-V2 Liquidity tokens": string; - "Submit new proposal": string; - "Submitting Proposal": string; - "Submitting Vote": string; - Succeeded: string; - Success: string; - Supply: string; - "Supplying {0} {1} and {2} {3}": (string | string[])[]; - Swap: string; - "Swap <0/> for exactly <1/>": string; - "Swap Anyway": string; - "Swap details": string; - "Swap exactly <0/> for <1/>": string; - "Swap failed: {0}": (string | string[])[]; - "Swap summary": string; - "Swapping {0} {1} for {2} {3}": (string | string[])[]; - "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; - "Tell us what you think \u2197": string; - "Thanks for being part of the Uniswap community <0/>": string; - "The % you will earn in fees.": string; - "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; - "The app fetches blockchain data from The Graph\u2019s hosted service.": string; - "The app fetches on-chain data and constructs contract calls with an Infura API.": string; - "The app fetches the optimal trade route from a Uniswap Labs server.": string; - "The app logs anonymized usage statistics in order to improve over time.": string; - "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; - "The cost of sending this transaction is more than half of the value of the input amount.": string; - "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; - "The estimated difference between the USD values of input and output amounts.": string; - "The input token cannot be transferred. There may be an issue with the input token.": string; - "The market price is outside your specified price range. Single-asset deposit only.": string; - "The most recent block number on this network. Prices update on every block.": string; - "The output token cannot be transferred. There may be an issue with the output token.": string; - "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; - "The price of this pool is within your selected range. Your position is currently earning fees.": string; - "The ratio of tokens you add will set the price of this pool.": string; - "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; - "There is no liquidity data.": string; - "This app uses the following third-party APIs:": string; - "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; - "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; - "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; - "This token is not supported in the Uniswap Labs app": string; - "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; - "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; - "Tip: Custom tokens are stored locally in your browser": string; - To: string; - "To (at least)": string; - "Token not supported": string; - Tokens: string; - "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; - "Top pools": string; - "Total deposited": string; - "Total deposits": string; - "Trade Route": string; - Trading: string; - "Transaction Settings": string; - "Transaction Submitted": string; - "Transaction completed in": string; - "Transaction deadline": string; - "Transaction pending": string; - "Transaction rejected.": string; - "Transaction submitted": string; - "Transfer Token": string; - "Try Again": string; - "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Turn On Expert Mode": string; - "UNI has arrived": string; - "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; - "UNI {0}/{1} Burned": (string | string[])[]; - "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; - "UNI-V2 {0}-{1}": (string | string[])[]; - "Unclaimed UNI": string; - "Unclaimed fees": string; - Undetermined: string; - "Unexpected error. Could not estimate gas for the swap.": string; - "Unexpected issue with estimating the gas. Please try again.": string; - "Uniswap Governance": string; - "Uniswap Labs' Terms of Service": string; - "Uniswap available in: <0>{0}": (string | string[])[]; - "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; - "Uniswap liquidity mining": string; - "Uniswap migration contract\u2197": string; - "Unknown Source": string; - "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; - "Unlock Votes": string; - "Unlock Voting": string; - "Unlocking Votes": string; - "Unsupported Asset": string; - "Unsupported Assets": string; - "Unsupported network\u2013switch to another to trade.": string; - Untitled: string; - Unwrap: string; - "Unwrap <0/> to {0}": (string | string[])[]; - "Update Delegation": string; - "Update list": string; - "Use the Uniswap Labs API to get faster quotes.": string; - User: string; - "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; - "V2 liquidity": string; - "V3 {0} Price:": (string | string[])[]; - "View accrued fees and analytics<0>\u2197": string; - "View list": string; - "View on Etherscan": string; - "View on Explorer": string; - "View transaction on Explorer": string; - Vote: string; - "Vote Against": string; - "Vote For": string; - "Vote against proposal {proposalId}": (string | string[])[]; - "Vote against proposal {proposalKey}": (string | string[])[]; - "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote for proposal {proposalId}": (string | string[])[]; - "Vote for proposal {proposalKey}": (string | string[])[]; - "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote to abstain on proposal {proposalId}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Voting ended {0}": (string | string[])[]; - "Voting ends approximately {0}": (string | string[])[]; - "Voting starts approximately {0}": (string | string[])[]; - "Waiting For Confirmation": string; - "Wallet Address or ENS name": string; - "Weekly Rewards": string; - "Welcome to team Unicorn :)": string; - "When you claim without withdrawing your liquidity remains in the mining pool.": string; - "When you withdraw, the contract will automagically claim UNI on your behalf!": string; - "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; - Withdraw: string; - "Withdraw & Claim": string; - "Withdraw deposited liquidity": string; - "Withdrawing {0} UNI-V2": (string | string[])[]; - "Withdrew UNI-V2!": string; - Wrap: string; - "Wrap <0/> to {0}": (string | string[])[]; - "Wrong Network": string; - "You already have an active or pending proposal": string; - "You are creating a pool": string; - "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; - "You are the first liquidity provider.": string; - "You can either vote on each proposal yourself or delegate your votes to a third party.": string; - "You can now trade {0}": (string | string[])[]; - "You don't have enough votes to submit a proposal": string; - "You don\u2019t have liquidity in this pool yet.": string; - "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; - "You may have lost your network connection.": string; - "You might consider waiting until the network fees go down to complete this transaction.": string; - "You must connect an account.": string; - "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; - "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; - "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; - "You will also collect fees earned from this position.": string; - "You will receive": string; - "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; - "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; - "Your V2 liquidity": string; - "Your active V3 liquidity positions will appear here.": string; - "Your liquidity deposits": string; - "Your pool share:": string; - "Your position": string; - "Your position has 0 liquidity, and is not earning fees.": string; - "Your position will appear here.": string; - "Your position will be 100% composed of {0} at this price": (string | string[])[]; - "Your position will be 100% {0} at this price.": (string | string[])[]; - "Your position will not earn fees or be used in trades until the market price moves into your range.": string; - "Your positions": string; - "Your rate": string; - "Your total pool tokens:": string; - "Your transaction cost will be much higher as it includes the gas to create the pool.": string; - "Your transaction may be frontrun": string; - "Your transaction may fail": string; - "Your transaction will revert if it has been pending for longer than this period of time.": string; - "Your transaction will revert if it is pending for more than this period of time.": string; - "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; - "Your transactions will appear here...": string; - "Your unclaimed UNI": string; - "after slippage": string; - confirm: string; - "for {0}": (string | string[])[]; - gwei: string; - "has socks emoji": string; - "here.": string; - "https:// or ipfs:// or ENS name": string; - minutes: string; - "via {0}": (string | string[])[]; - "via {0} token list": (string | string[])[]; - "{0, plural, one {Import token} other {Import tokens}}": (string | { - one: string; - other: string; - })[][]; - "{0}": string[][]; - "{0} %": (string | string[])[]; - "{0} <0/> per <1/>": (string | string[])[]; - "{0} Custom Tokens": (string | string[])[]; - "{0} Deposited": (string | string[])[]; - "{0} ETH": (string | string[])[]; - "{0} Fees Earned:": (string | string[])[]; - "{0} Pending": (string | string[])[]; - "{0} UNI": (string | string[])[]; - "{0} UNI / week": (string | string[])[]; - "{0} UNI-V2": (string | string[])[]; - "{0} UNI-V2 LP tokens available": (string | string[])[]; - "{0} Votes": (string | string[])[]; - "{0} per {1}": (string | string[])[]; - "{0} tokens": (string | string[])[]; - "{0} {1} Price:": (string | string[])[]; - "{0} {nativeCurrencySymbol}": (string | string[])[]; - "{0} \u2022 Added by user": (string | string[])[]; - "{0}%": (string | string[])[]; - "{0}% fee tier": (string | string[])[]; - "{0}% pool": (string | string[])[]; - "{0}% select": (string | string[])[]; - "{0}-{1} Liquidity Mining": (string | string[])[]; - "{0}/{1} LP NFT": (string | string[])[]; - "{0}/{1} LP Tokens": (string | string[])[]; - "{SOCKS_AMOUNT} UNI": (string | string[])[]; - "{USER_AMOUNT} UNI": (string | string[])[]; - "{activeTokensOnThisChain} tokens": (string | string[])[]; - "{integrator} fee": (string | string[])[]; - "{label} token bridge": (string | string[])[]; - "{min}m {sec}s": (string | string[])[]; - "{percentForSlider}%": (string | string[])[]; - "{sec}s": (string | string[])[]; - "{tokenB} per {tokenA}": (string | string[])[]; - "\u2190 Back to Pools Overview": string; -}; diff --git a/dist2/types/locales/ja-JP.d.ts b/dist2/types/locales/ja-JP.d.ts deleted file mode 100644 index 75120e0e5c9..00000000000 --- a/dist2/types/locales/ja-JP.d.ts +++ /dev/null @@ -1,593 +0,0 @@ -export const messages: { - "$-": string; - "$<0/>": string; - "${0}": (string | string[])[]; - "(${0})": (string | string[])[]; - "(View on Explorer)": string; - "(clear all)": string; - "(edit)": string; - "- Remove recipient": string; - "0 UNI / week": string; - "25%": string; - "50%": string; - "75%": string; - "<0/> All Proposals": string; - "<0/> Votes": string; - "<0>Account analytics and accrued fees<1> \u2197 ": string; - "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; - "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; - "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; - "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; - "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; - "<0>Unlock voting to prepare for the next proposal.": string; - "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; - "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; - About: string; - Accept: string; - Account: string; - Active: string; - Add: string; - "Add <0/> and <1/> to Uniswap V2": string; - "Add Delegate +": string; - "Add Liquidity": string; - "Add V2 Liquidity": string; - "Add liquidity.": string; - "Add more liquidity": string; - "Add {0} to Metamask <0/>": (string | string[])[]; - "Add {0}-{1} liquidity": (string | string[])[]; - "Add {0}/{1} V3 liquidity": (string | string[])[]; - "Added {0}": (string | string[])[]; - "Address has no available claim": string; - Against: string; - "Allow LP token migration": string; - "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; - "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; - Allowed: string; - Amount: string; - "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Approval pending <0/>": string; - Approve: string; - "Approve Token": string; - "Approve {0}": (string | string[])[]; - "Approve {0} first": (string | string[])[]; - Approved: string; - Approving: string; - "Approving {0}": (string | string[])[]; - Arbiscan: string; - "Arbitrum Bridge": string; - "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Are you sure?": string; - "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; - "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; - Auto: string; - "Auto Router API": string; - "Available to deposit: {0}": (string | string[])[]; - "Balance: {0}": (string | string[])[]; - "Best for exotic pairs.": string; - "Best for most pairs.": string; - "Best for stable pairs.": string; - "Best for very stable pairs.": string; - "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; - "Blocked address": string; - Bridge: string; - "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; - "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; - Canceled: string; - Change: string; - Charts: string; - "Check network status": string; - "Check out our v3 LP walkthrough and migration guides.": string; - Claim: string; - "Claim <0/> for {0}": (string | string[])[]; - "Claim UNI": string; - "Claim UNI Token": string; - "Claim UNI reward for {0}": (string | string[])[]; - "Claim fees": string; - "Claim your UNI tokens": string; - Claimed: string; - "Claimed UNI!": string; - "Claimed!": string; - Claiming: string; - "Claiming UNI": string; - "Claiming {0} UNI": (string | string[])[]; - "Clear All": string; - "Clear all": string; - Close: string; - Closed: string; - Collect: string; - "Collect as WETH": string; - "Collect fees": string; - "Collect {0}/{1} fees": (string | string[])[]; - Collected: string; - Collecting: string; - "Collecting fees": string; - "Collecting fees will withdraw currently available fees for you.": string; - Confirm: string; - "Confirm Supply": string; - "Confirm Swap": string; - "Confirm swap": string; - "Confirm this transaction in your wallet": string; - "Confirm transaction in wallet": string; - "Connect Wallet": string; - "Connect a wallet": string; - "Connect to a wallet to find pools": string; - "Connect to a wallet to view your V2 liquidity.": string; - "Connect to a wallet to view your liquidity.": string; - "Connect wallet to swap": string; - "Connected with {name}": (string | string[])[]; - Copied: string; - "Copy Address": string; - "Create Pool & Supply": string; - "Create Proposal": string; - "Create a pair": string; - "Create a pool": string; - "Create an issue on GitHub": string; - "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; - "Create pool.": string; - "Create {0}/{1} V3 pool": (string | string[])[]; - "Current price": string; - "Current {0} Price:": (string | string[])[]; - Custom: string; - "Dark Theme": string; - Defeated: string; - "Delegate Votes": string; - "Delegate voting power to {0}": (string | string[])[]; - "Delegated to:": string; - "Delegating votes": string; - Deposit: string; - "Deposit Amounts": string; - "Deposit UNI-V2 LP Tokens": string; - "Deposit liquidity": string; - "Deposit tokens to the {label} network.": (string | string[])[]; - "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; - "Deposited liquidity:": string; - "Deposited {0} UNI-V2": (string | string[])[]; - "Depositing Liquidity": string; - Description: string; - Detailed: string; - Details: string; - Disconnect: string; - Discord: string; - Dismiss: string; - Docs: string; - "Don\u2019t see one of your v2 positions? <0>Import it.": string; - "Earned UNI tokens represent voting shares in Uniswap governance.": string; - Edit: string; - "Efficiency Comparison": string; - "Enter a percent": string; - "Enter a recipient": string; - "Enter a valid slippage percentage": string; - "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; - "Enter an amount": string; - "Enter valid list location": string; - "Enter valid token address": string; - "Enter {0} amount": (string | string[])[]; - Error: string; - "Error connecting": string; - "Error connecting. Try refreshing the page.": string; - "Error details": string; - "Error importing list": string; - "Estimate may differ due to your wallet gas settings": string; - "Estimated network fee": string; - Etherscan: string; - Executed: string; - "Expanded results from inactive Token Lists": string; - "Expected Output": string; - "Expert Mode": string; - "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; - Expired: string; - "Explore Uniswap Analytics.": string; - "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; - "Fee Tier": string; - "Fee tier": string; - "Fetching best price...": string; - "Fetching best price\u2026": string; - For: string; - "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; - From: string; - "From (at most)": string; - "Full Range": string; - "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; - "Get support on Discord": string; - "Help Center": string; - Hide: string; - "Hide closed positions": string; - "High Price Impact": string; - "How this app uses APIs": string; - "I understand": string; - "If you purchase a token from this list, you may not be able to sell it back.": string; - Import: string; - "Import List": string; - "Import Pool": string; - "Import V2 Pool": string; - "Import at your own risk": string; - "In range": string; - "Increase Liquidity": string; - "Initial prices and pool share": string; - "Initializing...": string; - "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Install Metamask": string; - "Insufficient liquidity for this trade.": string; - "Insufficient {0}": (string | string[])[]; - "Insufficient {0} balance": (string | string[])[]; - "Interface Settings": string; - "Invalid pair": string; - "Invalid pair.": string; - "Invalid price input": string; - "Invalid range selected. The min price must be lower than the max price.": string; - "Invalid recipient": string; - Language: string; - Learn: string; - "Learn about providing liquidity": string; - "Learn more": string; - "Legal & Privacy": string; - "Light Theme": string; - Liquidity: string; - "Liquidity data not available.": string; - "Liquidity provider rewards": string; - "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - Lists: string; - Loaded: string; - Loading: string; - MAX: string; - Manage: string; - "Manage Liquidity in Rewards Pool": string; - "Manage Token Lists": string; - "Manage this pool.": string; - Max: string; - "Max Price": string; - "Max price": string; - "Max slippage": string; - "Max:": string; - "Maximum sent": string; - Menu: string; - Migrate: string; - "Migrate Liquidity to V3": string; - "Migrate V2 Liquidity": string; - "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; - "Migrate {0}/{1} liquidity to V3": (string | string[])[]; - Migrating: string; - "Min Price": string; - "Min price": string; - "Min:": string; - "Minimum received": string; - "Missing dependencies": string; - "Mock Toggle": string; - More: string; - "Network Fee": string; - "Network Warning": string; - "Network fees exceed 50% of the swap amount!": string; - "New Position": string; - "No V2 Liquidity found.": string; - "No active pools": string; - "No data": string; - "No description.": string; - "No liquidity found.": string; - "No pool found.": string; - "No proposals found.": string; - "No results found.": string; - "Not created": string; - OFF: string; - ON: string; - "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; - Off: string; - On: string; - "Once you are happy with the rate click supply to review.": string; - "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; - "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; - "Optimism Gateway": string; - "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Optimistic Etherscan": string; - "Out of range": string; - "Output is estimated.": string; - "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; - "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Output will be sent to <0>{0}": (string | string[])[]; - Owner: string; - "Participating pools": string; - Pending: string; - "Please confirm you would like to remove this list by typing REMOVE": string; - "Please connect to Layer 1 Ethereum": string; - "Please connect to a supported network in the dropdown menu or in your wallet.": string; - "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; - "Polygon Bridge": string; - Polygonscan: string; - Pool: string; - "Pool Found!": string; - "Pool Rate": string; - "Pool rate": string; - "Pool tokens in rewards pool:": string; - "Pooled {0}:": (string | string[])[]; - "Pools Overview": string; - Preview: string; - Price: string; - "Price Difference:": string; - "Price Impact": string; - "Price Impact Too High": string; - "Price Updated": string; - "Price impact": string; - "Price range": string; - "Price updated": string; - "Price:": string; - "Prices and pool share": string; - Proposal: string; - "Proposal Submitted": string; - "Proposal Title": string; - Proposals: string; - "Proposals submitted by community members will appear here.": string; - "Proposed Action": string; - Proposer: string; - "Protocol Disclaimer": string; - Queued: string; - Rates: string; - "Read more about UNI": string; - "Read more about Uniswap governance": string; - "Read more about providing liquidity": string; - "Read more about unsupported assets": string; - "Recent Transactions": string; - "Recent transactions": string; - Recipient: string; - "Reload the page": string; - Remove: string; - "Remove <0/> and <1/>": string; - "Remove Amount": string; - "Remove Delegate": string; - "Remove Liquidity": string; - "Remove list": string; - "Removing {0} {1} and {2} {3}": (string | string[])[]; - "Removing {0} {1} and{2} {3}": (string | string[])[]; - "Request Features": string; - Reset: string; - Return: string; - "Review swap": string; - "Search by token name or address": string; - "Search name or paste address": string; - "Select Pair": string; - "Select a network": string; - "Select a token": string; - "Select a token to find your v2 liquidity.": string; - "Select an action": string; - "Selected Range": string; - Self: string; - "Self Delegate": string; - "Set Price Range": string; - "Set Starting Price": string; - Settings: string; - "Share of Pool": string; - "Share of Pool:": string; - "Show Portis": string; - "Show closed positions": string; - Simple: string; - "Slippage tolerance": string; - "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; - "Something went wrong": string; - "Something went wrong.": string; - "Step 1. Get UNI-V2 Liquidity tokens": string; - "Submit new proposal": string; - "Submitting Proposal": string; - "Submitting Vote": string; - Succeeded: string; - Success: string; - Supply: string; - "Supplying {0} {1} and {2} {3}": (string | string[])[]; - Swap: string; - "Swap <0/> for exactly <1/>": string; - "Swap Anyway": string; - "Swap details": string; - "Swap exactly <0/> for <1/>": string; - "Swap failed: {0}": (string | string[])[]; - "Swap summary": string; - "Swapping {0} {1} for {2} {3}": (string | string[])[]; - "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; - "Tell us what you think \u2197": string; - "Thanks for being part of the Uniswap community <0/>": string; - "The % you will earn in fees.": string; - "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; - "The app fetches blockchain data from The Graph\u2019s hosted service.": string; - "The app fetches on-chain data and constructs contract calls with an Infura API.": string; - "The app fetches the optimal trade route from a Uniswap Labs server.": string; - "The app logs anonymized usage statistics in order to improve over time.": string; - "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; - "The cost of sending this transaction is more than half of the value of the input amount.": string; - "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; - "The estimated difference between the USD values of input and output amounts.": string; - "The input token cannot be transferred. There may be an issue with the input token.": string; - "The market price is outside your specified price range. Single-asset deposit only.": string; - "The most recent block number on this network. Prices update on every block.": string; - "The output token cannot be transferred. There may be an issue with the output token.": string; - "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; - "The price of this pool is within your selected range. Your position is currently earning fees.": string; - "The ratio of tokens you add will set the price of this pool.": string; - "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; - "There is no liquidity data.": string; - "This app uses the following third-party APIs:": string; - "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; - "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; - "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; - "This token is not supported in the Uniswap Labs app": string; - "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; - "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; - "Tip: Custom tokens are stored locally in your browser": string; - To: string; - "To (at least)": string; - "Token not supported": string; - Tokens: string; - "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; - "Top pools": string; - "Total deposited": string; - "Total deposits": string; - "Trade Route": string; - Trading: string; - "Transaction Settings": string; - "Transaction Submitted": string; - "Transaction completed in": string; - "Transaction deadline": string; - "Transaction pending": string; - "Transaction rejected.": string; - "Transaction submitted": string; - "Transfer Token": string; - "Try Again": string; - "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Turn On Expert Mode": string; - "UNI has arrived": string; - "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; - "UNI {0}/{1} Burned": (string | string[])[]; - "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; - "UNI-V2 {0}-{1}": (string | string[])[]; - "Unclaimed UNI": string; - "Unclaimed fees": string; - Undetermined: string; - "Unexpected error. Could not estimate gas for the swap.": string; - "Unexpected issue with estimating the gas. Please try again.": string; - "Uniswap Governance": string; - "Uniswap Labs' Terms of Service": string; - "Uniswap available in: <0>{0}": (string | string[])[]; - "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; - "Uniswap liquidity mining": string; - "Uniswap migration contract\u2197": string; - "Unknown Source": string; - "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; - "Unlock Votes": string; - "Unlock Voting": string; - "Unlocking Votes": string; - "Unsupported Asset": string; - "Unsupported Assets": string; - "Unsupported network\u2013switch to another to trade.": string; - Untitled: string; - Unwrap: string; - "Unwrap <0/> to {0}": (string | string[])[]; - "Update Delegation": string; - "Update list": string; - "Use the Uniswap Labs API to get faster quotes.": string; - User: string; - "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; - "V2 liquidity": string; - "V3 {0} Price:": (string | string[])[]; - "View accrued fees and analytics<0>\u2197": string; - "View list": string; - "View on Etherscan": string; - "View on Explorer": string; - "View transaction on Explorer": string; - Vote: string; - "Vote Against": string; - "Vote For": string; - "Vote against proposal {proposalId}": (string | string[])[]; - "Vote against proposal {proposalKey}": (string | string[])[]; - "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote for proposal {proposalId}": (string | string[])[]; - "Vote for proposal {proposalKey}": (string | string[])[]; - "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote to abstain on proposal {proposalId}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Voting ended {0}": (string | string[])[]; - "Voting ends approximately {0}": (string | string[])[]; - "Voting starts approximately {0}": (string | string[])[]; - "Waiting For Confirmation": string; - "Wallet Address or ENS name": string; - "Weekly Rewards": string; - "Welcome to team Unicorn :)": string; - "When you claim without withdrawing your liquidity remains in the mining pool.": string; - "When you withdraw, the contract will automagically claim UNI on your behalf!": string; - "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; - Withdraw: string; - "Withdraw & Claim": string; - "Withdraw deposited liquidity": string; - "Withdrawing {0} UNI-V2": (string | string[])[]; - "Withdrew UNI-V2!": string; - Wrap: string; - "Wrap <0/> to {0}": (string | string[])[]; - "Wrong Network": string; - "You already have an active or pending proposal": string; - "You are creating a pool": string; - "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; - "You are the first liquidity provider.": string; - "You can either vote on each proposal yourself or delegate your votes to a third party.": string; - "You can now trade {0}": (string | string[])[]; - "You don't have enough votes to submit a proposal": string; - "You don\u2019t have liquidity in this pool yet.": string; - "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; - "You may have lost your network connection.": string; - "You might consider waiting until the network fees go down to complete this transaction.": string; - "You must connect an account.": string; - "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; - "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; - "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; - "You will also collect fees earned from this position.": string; - "You will receive": string; - "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; - "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; - "Your V2 liquidity": string; - "Your active V3 liquidity positions will appear here.": string; - "Your liquidity deposits": string; - "Your pool share:": string; - "Your position": string; - "Your position has 0 liquidity, and is not earning fees.": string; - "Your position will appear here.": string; - "Your position will be 100% composed of {0} at this price": (string | string[])[]; - "Your position will be 100% {0} at this price.": (string | string[])[]; - "Your position will not earn fees or be used in trades until the market price moves into your range.": string; - "Your positions": string; - "Your rate": string; - "Your total pool tokens:": string; - "Your transaction cost will be much higher as it includes the gas to create the pool.": string; - "Your transaction may be frontrun": string; - "Your transaction may fail": string; - "Your transaction will revert if it has been pending for longer than this period of time.": string; - "Your transaction will revert if it is pending for more than this period of time.": string; - "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; - "Your transactions will appear here...": string; - "Your unclaimed UNI": string; - "after slippage": string; - confirm: string; - "for {0}": (string | string[])[]; - gwei: string; - "has socks emoji": string; - "here.": string; - "https:// or ipfs:// or ENS name": string; - minutes: string; - "via {0}": (string | string[])[]; - "via {0} token list": (string | string[])[]; - "{0, plural, one {Import token} other {Import tokens}}": (string | { - one: string; - other: string; - })[][]; - "{0}": string[][]; - "{0} %": (string | string[])[]; - "{0} <0/> per <1/>": (string | string[])[]; - "{0} Custom Tokens": (string | string[])[]; - "{0} Deposited": (string | string[])[]; - "{0} ETH": (string | string[])[]; - "{0} Fees Earned:": (string | string[])[]; - "{0} Pending": (string | string[])[]; - "{0} UNI": (string | string[])[]; - "{0} UNI / week": (string | string[])[]; - "{0} UNI-V2": (string | string[])[]; - "{0} UNI-V2 LP tokens available": (string | string[])[]; - "{0} Votes": (string | string[])[]; - "{0} per {1}": (string | string[])[]; - "{0} tokens": (string | string[])[]; - "{0} {1} Price:": (string | string[])[]; - "{0} {nativeCurrencySymbol}": (string | string[])[]; - "{0} \u2022 Added by user": (string | string[])[]; - "{0}%": (string | string[])[]; - "{0}% fee tier": (string | string[])[]; - "{0}% pool": (string | string[])[]; - "{0}% select": (string | string[])[]; - "{0}-{1} Liquidity Mining": (string | string[])[]; - "{0}/{1} LP NFT": (string | string[])[]; - "{0}/{1} LP Tokens": (string | string[])[]; - "{SOCKS_AMOUNT} UNI": (string | string[])[]; - "{USER_AMOUNT} UNI": (string | string[])[]; - "{activeTokensOnThisChain} tokens": (string | string[])[]; - "{integrator} fee": (string | string[])[]; - "{label} token bridge": (string | string[])[]; - "{min}m {sec}s": (string | string[])[]; - "{percentForSlider}%": (string | string[])[]; - "{sec}s": (string | string[])[]; - "{tokenB} per {tokenA}": (string | string[])[]; - "\u2190 Back to Pools Overview": string; -}; diff --git a/dist2/types/locales/ko-KR.d.ts b/dist2/types/locales/ko-KR.d.ts deleted file mode 100644 index 75120e0e5c9..00000000000 --- a/dist2/types/locales/ko-KR.d.ts +++ /dev/null @@ -1,593 +0,0 @@ -export const messages: { - "$-": string; - "$<0/>": string; - "${0}": (string | string[])[]; - "(${0})": (string | string[])[]; - "(View on Explorer)": string; - "(clear all)": string; - "(edit)": string; - "- Remove recipient": string; - "0 UNI / week": string; - "25%": string; - "50%": string; - "75%": string; - "<0/> All Proposals": string; - "<0/> Votes": string; - "<0>Account analytics and accrued fees<1> \u2197 ": string; - "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; - "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; - "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; - "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; - "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; - "<0>Unlock voting to prepare for the next proposal.": string; - "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; - "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; - About: string; - Accept: string; - Account: string; - Active: string; - Add: string; - "Add <0/> and <1/> to Uniswap V2": string; - "Add Delegate +": string; - "Add Liquidity": string; - "Add V2 Liquidity": string; - "Add liquidity.": string; - "Add more liquidity": string; - "Add {0} to Metamask <0/>": (string | string[])[]; - "Add {0}-{1} liquidity": (string | string[])[]; - "Add {0}/{1} V3 liquidity": (string | string[])[]; - "Added {0}": (string | string[])[]; - "Address has no available claim": string; - Against: string; - "Allow LP token migration": string; - "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; - "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; - Allowed: string; - Amount: string; - "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Approval pending <0/>": string; - Approve: string; - "Approve Token": string; - "Approve {0}": (string | string[])[]; - "Approve {0} first": (string | string[])[]; - Approved: string; - Approving: string; - "Approving {0}": (string | string[])[]; - Arbiscan: string; - "Arbitrum Bridge": string; - "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Are you sure?": string; - "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; - "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; - Auto: string; - "Auto Router API": string; - "Available to deposit: {0}": (string | string[])[]; - "Balance: {0}": (string | string[])[]; - "Best for exotic pairs.": string; - "Best for most pairs.": string; - "Best for stable pairs.": string; - "Best for very stable pairs.": string; - "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; - "Blocked address": string; - Bridge: string; - "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; - "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; - Canceled: string; - Change: string; - Charts: string; - "Check network status": string; - "Check out our v3 LP walkthrough and migration guides.": string; - Claim: string; - "Claim <0/> for {0}": (string | string[])[]; - "Claim UNI": string; - "Claim UNI Token": string; - "Claim UNI reward for {0}": (string | string[])[]; - "Claim fees": string; - "Claim your UNI tokens": string; - Claimed: string; - "Claimed UNI!": string; - "Claimed!": string; - Claiming: string; - "Claiming UNI": string; - "Claiming {0} UNI": (string | string[])[]; - "Clear All": string; - "Clear all": string; - Close: string; - Closed: string; - Collect: string; - "Collect as WETH": string; - "Collect fees": string; - "Collect {0}/{1} fees": (string | string[])[]; - Collected: string; - Collecting: string; - "Collecting fees": string; - "Collecting fees will withdraw currently available fees for you.": string; - Confirm: string; - "Confirm Supply": string; - "Confirm Swap": string; - "Confirm swap": string; - "Confirm this transaction in your wallet": string; - "Confirm transaction in wallet": string; - "Connect Wallet": string; - "Connect a wallet": string; - "Connect to a wallet to find pools": string; - "Connect to a wallet to view your V2 liquidity.": string; - "Connect to a wallet to view your liquidity.": string; - "Connect wallet to swap": string; - "Connected with {name}": (string | string[])[]; - Copied: string; - "Copy Address": string; - "Create Pool & Supply": string; - "Create Proposal": string; - "Create a pair": string; - "Create a pool": string; - "Create an issue on GitHub": string; - "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; - "Create pool.": string; - "Create {0}/{1} V3 pool": (string | string[])[]; - "Current price": string; - "Current {0} Price:": (string | string[])[]; - Custom: string; - "Dark Theme": string; - Defeated: string; - "Delegate Votes": string; - "Delegate voting power to {0}": (string | string[])[]; - "Delegated to:": string; - "Delegating votes": string; - Deposit: string; - "Deposit Amounts": string; - "Deposit UNI-V2 LP Tokens": string; - "Deposit liquidity": string; - "Deposit tokens to the {label} network.": (string | string[])[]; - "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; - "Deposited liquidity:": string; - "Deposited {0} UNI-V2": (string | string[])[]; - "Depositing Liquidity": string; - Description: string; - Detailed: string; - Details: string; - Disconnect: string; - Discord: string; - Dismiss: string; - Docs: string; - "Don\u2019t see one of your v2 positions? <0>Import it.": string; - "Earned UNI tokens represent voting shares in Uniswap governance.": string; - Edit: string; - "Efficiency Comparison": string; - "Enter a percent": string; - "Enter a recipient": string; - "Enter a valid slippage percentage": string; - "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; - "Enter an amount": string; - "Enter valid list location": string; - "Enter valid token address": string; - "Enter {0} amount": (string | string[])[]; - Error: string; - "Error connecting": string; - "Error connecting. Try refreshing the page.": string; - "Error details": string; - "Error importing list": string; - "Estimate may differ due to your wallet gas settings": string; - "Estimated network fee": string; - Etherscan: string; - Executed: string; - "Expanded results from inactive Token Lists": string; - "Expected Output": string; - "Expert Mode": string; - "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; - Expired: string; - "Explore Uniswap Analytics.": string; - "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; - "Fee Tier": string; - "Fee tier": string; - "Fetching best price...": string; - "Fetching best price\u2026": string; - For: string; - "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; - From: string; - "From (at most)": string; - "Full Range": string; - "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; - "Get support on Discord": string; - "Help Center": string; - Hide: string; - "Hide closed positions": string; - "High Price Impact": string; - "How this app uses APIs": string; - "I understand": string; - "If you purchase a token from this list, you may not be able to sell it back.": string; - Import: string; - "Import List": string; - "Import Pool": string; - "Import V2 Pool": string; - "Import at your own risk": string; - "In range": string; - "Increase Liquidity": string; - "Initial prices and pool share": string; - "Initializing...": string; - "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Install Metamask": string; - "Insufficient liquidity for this trade.": string; - "Insufficient {0}": (string | string[])[]; - "Insufficient {0} balance": (string | string[])[]; - "Interface Settings": string; - "Invalid pair": string; - "Invalid pair.": string; - "Invalid price input": string; - "Invalid range selected. The min price must be lower than the max price.": string; - "Invalid recipient": string; - Language: string; - Learn: string; - "Learn about providing liquidity": string; - "Learn more": string; - "Legal & Privacy": string; - "Light Theme": string; - Liquidity: string; - "Liquidity data not available.": string; - "Liquidity provider rewards": string; - "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - Lists: string; - Loaded: string; - Loading: string; - MAX: string; - Manage: string; - "Manage Liquidity in Rewards Pool": string; - "Manage Token Lists": string; - "Manage this pool.": string; - Max: string; - "Max Price": string; - "Max price": string; - "Max slippage": string; - "Max:": string; - "Maximum sent": string; - Menu: string; - Migrate: string; - "Migrate Liquidity to V3": string; - "Migrate V2 Liquidity": string; - "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; - "Migrate {0}/{1} liquidity to V3": (string | string[])[]; - Migrating: string; - "Min Price": string; - "Min price": string; - "Min:": string; - "Minimum received": string; - "Missing dependencies": string; - "Mock Toggle": string; - More: string; - "Network Fee": string; - "Network Warning": string; - "Network fees exceed 50% of the swap amount!": string; - "New Position": string; - "No V2 Liquidity found.": string; - "No active pools": string; - "No data": string; - "No description.": string; - "No liquidity found.": string; - "No pool found.": string; - "No proposals found.": string; - "No results found.": string; - "Not created": string; - OFF: string; - ON: string; - "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; - Off: string; - On: string; - "Once you are happy with the rate click supply to review.": string; - "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; - "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; - "Optimism Gateway": string; - "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Optimistic Etherscan": string; - "Out of range": string; - "Output is estimated.": string; - "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; - "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Output will be sent to <0>{0}": (string | string[])[]; - Owner: string; - "Participating pools": string; - Pending: string; - "Please confirm you would like to remove this list by typing REMOVE": string; - "Please connect to Layer 1 Ethereum": string; - "Please connect to a supported network in the dropdown menu or in your wallet.": string; - "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; - "Polygon Bridge": string; - Polygonscan: string; - Pool: string; - "Pool Found!": string; - "Pool Rate": string; - "Pool rate": string; - "Pool tokens in rewards pool:": string; - "Pooled {0}:": (string | string[])[]; - "Pools Overview": string; - Preview: string; - Price: string; - "Price Difference:": string; - "Price Impact": string; - "Price Impact Too High": string; - "Price Updated": string; - "Price impact": string; - "Price range": string; - "Price updated": string; - "Price:": string; - "Prices and pool share": string; - Proposal: string; - "Proposal Submitted": string; - "Proposal Title": string; - Proposals: string; - "Proposals submitted by community members will appear here.": string; - "Proposed Action": string; - Proposer: string; - "Protocol Disclaimer": string; - Queued: string; - Rates: string; - "Read more about UNI": string; - "Read more about Uniswap governance": string; - "Read more about providing liquidity": string; - "Read more about unsupported assets": string; - "Recent Transactions": string; - "Recent transactions": string; - Recipient: string; - "Reload the page": string; - Remove: string; - "Remove <0/> and <1/>": string; - "Remove Amount": string; - "Remove Delegate": string; - "Remove Liquidity": string; - "Remove list": string; - "Removing {0} {1} and {2} {3}": (string | string[])[]; - "Removing {0} {1} and{2} {3}": (string | string[])[]; - "Request Features": string; - Reset: string; - Return: string; - "Review swap": string; - "Search by token name or address": string; - "Search name or paste address": string; - "Select Pair": string; - "Select a network": string; - "Select a token": string; - "Select a token to find your v2 liquidity.": string; - "Select an action": string; - "Selected Range": string; - Self: string; - "Self Delegate": string; - "Set Price Range": string; - "Set Starting Price": string; - Settings: string; - "Share of Pool": string; - "Share of Pool:": string; - "Show Portis": string; - "Show closed positions": string; - Simple: string; - "Slippage tolerance": string; - "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; - "Something went wrong": string; - "Something went wrong.": string; - "Step 1. Get UNI-V2 Liquidity tokens": string; - "Submit new proposal": string; - "Submitting Proposal": string; - "Submitting Vote": string; - Succeeded: string; - Success: string; - Supply: string; - "Supplying {0} {1} and {2} {3}": (string | string[])[]; - Swap: string; - "Swap <0/> for exactly <1/>": string; - "Swap Anyway": string; - "Swap details": string; - "Swap exactly <0/> for <1/>": string; - "Swap failed: {0}": (string | string[])[]; - "Swap summary": string; - "Swapping {0} {1} for {2} {3}": (string | string[])[]; - "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; - "Tell us what you think \u2197": string; - "Thanks for being part of the Uniswap community <0/>": string; - "The % you will earn in fees.": string; - "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; - "The app fetches blockchain data from The Graph\u2019s hosted service.": string; - "The app fetches on-chain data and constructs contract calls with an Infura API.": string; - "The app fetches the optimal trade route from a Uniswap Labs server.": string; - "The app logs anonymized usage statistics in order to improve over time.": string; - "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; - "The cost of sending this transaction is more than half of the value of the input amount.": string; - "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; - "The estimated difference between the USD values of input and output amounts.": string; - "The input token cannot be transferred. There may be an issue with the input token.": string; - "The market price is outside your specified price range. Single-asset deposit only.": string; - "The most recent block number on this network. Prices update on every block.": string; - "The output token cannot be transferred. There may be an issue with the output token.": string; - "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; - "The price of this pool is within your selected range. Your position is currently earning fees.": string; - "The ratio of tokens you add will set the price of this pool.": string; - "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; - "There is no liquidity data.": string; - "This app uses the following third-party APIs:": string; - "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; - "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; - "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; - "This token is not supported in the Uniswap Labs app": string; - "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; - "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; - "Tip: Custom tokens are stored locally in your browser": string; - To: string; - "To (at least)": string; - "Token not supported": string; - Tokens: string; - "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; - "Top pools": string; - "Total deposited": string; - "Total deposits": string; - "Trade Route": string; - Trading: string; - "Transaction Settings": string; - "Transaction Submitted": string; - "Transaction completed in": string; - "Transaction deadline": string; - "Transaction pending": string; - "Transaction rejected.": string; - "Transaction submitted": string; - "Transfer Token": string; - "Try Again": string; - "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Turn On Expert Mode": string; - "UNI has arrived": string; - "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; - "UNI {0}/{1} Burned": (string | string[])[]; - "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; - "UNI-V2 {0}-{1}": (string | string[])[]; - "Unclaimed UNI": string; - "Unclaimed fees": string; - Undetermined: string; - "Unexpected error. Could not estimate gas for the swap.": string; - "Unexpected issue with estimating the gas. Please try again.": string; - "Uniswap Governance": string; - "Uniswap Labs' Terms of Service": string; - "Uniswap available in: <0>{0}": (string | string[])[]; - "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; - "Uniswap liquidity mining": string; - "Uniswap migration contract\u2197": string; - "Unknown Source": string; - "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; - "Unlock Votes": string; - "Unlock Voting": string; - "Unlocking Votes": string; - "Unsupported Asset": string; - "Unsupported Assets": string; - "Unsupported network\u2013switch to another to trade.": string; - Untitled: string; - Unwrap: string; - "Unwrap <0/> to {0}": (string | string[])[]; - "Update Delegation": string; - "Update list": string; - "Use the Uniswap Labs API to get faster quotes.": string; - User: string; - "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; - "V2 liquidity": string; - "V3 {0} Price:": (string | string[])[]; - "View accrued fees and analytics<0>\u2197": string; - "View list": string; - "View on Etherscan": string; - "View on Explorer": string; - "View transaction on Explorer": string; - Vote: string; - "Vote Against": string; - "Vote For": string; - "Vote against proposal {proposalId}": (string | string[])[]; - "Vote against proposal {proposalKey}": (string | string[])[]; - "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote for proposal {proposalId}": (string | string[])[]; - "Vote for proposal {proposalKey}": (string | string[])[]; - "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote to abstain on proposal {proposalId}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Voting ended {0}": (string | string[])[]; - "Voting ends approximately {0}": (string | string[])[]; - "Voting starts approximately {0}": (string | string[])[]; - "Waiting For Confirmation": string; - "Wallet Address or ENS name": string; - "Weekly Rewards": string; - "Welcome to team Unicorn :)": string; - "When you claim without withdrawing your liquidity remains in the mining pool.": string; - "When you withdraw, the contract will automagically claim UNI on your behalf!": string; - "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; - Withdraw: string; - "Withdraw & Claim": string; - "Withdraw deposited liquidity": string; - "Withdrawing {0} UNI-V2": (string | string[])[]; - "Withdrew UNI-V2!": string; - Wrap: string; - "Wrap <0/> to {0}": (string | string[])[]; - "Wrong Network": string; - "You already have an active or pending proposal": string; - "You are creating a pool": string; - "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; - "You are the first liquidity provider.": string; - "You can either vote on each proposal yourself or delegate your votes to a third party.": string; - "You can now trade {0}": (string | string[])[]; - "You don't have enough votes to submit a proposal": string; - "You don\u2019t have liquidity in this pool yet.": string; - "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; - "You may have lost your network connection.": string; - "You might consider waiting until the network fees go down to complete this transaction.": string; - "You must connect an account.": string; - "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; - "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; - "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; - "You will also collect fees earned from this position.": string; - "You will receive": string; - "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; - "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; - "Your V2 liquidity": string; - "Your active V3 liquidity positions will appear here.": string; - "Your liquidity deposits": string; - "Your pool share:": string; - "Your position": string; - "Your position has 0 liquidity, and is not earning fees.": string; - "Your position will appear here.": string; - "Your position will be 100% composed of {0} at this price": (string | string[])[]; - "Your position will be 100% {0} at this price.": (string | string[])[]; - "Your position will not earn fees or be used in trades until the market price moves into your range.": string; - "Your positions": string; - "Your rate": string; - "Your total pool tokens:": string; - "Your transaction cost will be much higher as it includes the gas to create the pool.": string; - "Your transaction may be frontrun": string; - "Your transaction may fail": string; - "Your transaction will revert if it has been pending for longer than this period of time.": string; - "Your transaction will revert if it is pending for more than this period of time.": string; - "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; - "Your transactions will appear here...": string; - "Your unclaimed UNI": string; - "after slippage": string; - confirm: string; - "for {0}": (string | string[])[]; - gwei: string; - "has socks emoji": string; - "here.": string; - "https:// or ipfs:// or ENS name": string; - minutes: string; - "via {0}": (string | string[])[]; - "via {0} token list": (string | string[])[]; - "{0, plural, one {Import token} other {Import tokens}}": (string | { - one: string; - other: string; - })[][]; - "{0}": string[][]; - "{0} %": (string | string[])[]; - "{0} <0/> per <1/>": (string | string[])[]; - "{0} Custom Tokens": (string | string[])[]; - "{0} Deposited": (string | string[])[]; - "{0} ETH": (string | string[])[]; - "{0} Fees Earned:": (string | string[])[]; - "{0} Pending": (string | string[])[]; - "{0} UNI": (string | string[])[]; - "{0} UNI / week": (string | string[])[]; - "{0} UNI-V2": (string | string[])[]; - "{0} UNI-V2 LP tokens available": (string | string[])[]; - "{0} Votes": (string | string[])[]; - "{0} per {1}": (string | string[])[]; - "{0} tokens": (string | string[])[]; - "{0} {1} Price:": (string | string[])[]; - "{0} {nativeCurrencySymbol}": (string | string[])[]; - "{0} \u2022 Added by user": (string | string[])[]; - "{0}%": (string | string[])[]; - "{0}% fee tier": (string | string[])[]; - "{0}% pool": (string | string[])[]; - "{0}% select": (string | string[])[]; - "{0}-{1} Liquidity Mining": (string | string[])[]; - "{0}/{1} LP NFT": (string | string[])[]; - "{0}/{1} LP Tokens": (string | string[])[]; - "{SOCKS_AMOUNT} UNI": (string | string[])[]; - "{USER_AMOUNT} UNI": (string | string[])[]; - "{activeTokensOnThisChain} tokens": (string | string[])[]; - "{integrator} fee": (string | string[])[]; - "{label} token bridge": (string | string[])[]; - "{min}m {sec}s": (string | string[])[]; - "{percentForSlider}%": (string | string[])[]; - "{sec}s": (string | string[])[]; - "{tokenB} per {tokenA}": (string | string[])[]; - "\u2190 Back to Pools Overview": string; -}; diff --git a/dist2/types/locales/nl-NL.d.ts b/dist2/types/locales/nl-NL.d.ts deleted file mode 100644 index 75120e0e5c9..00000000000 --- a/dist2/types/locales/nl-NL.d.ts +++ /dev/null @@ -1,593 +0,0 @@ -export const messages: { - "$-": string; - "$<0/>": string; - "${0}": (string | string[])[]; - "(${0})": (string | string[])[]; - "(View on Explorer)": string; - "(clear all)": string; - "(edit)": string; - "- Remove recipient": string; - "0 UNI / week": string; - "25%": string; - "50%": string; - "75%": string; - "<0/> All Proposals": string; - "<0/> Votes": string; - "<0>Account analytics and accrued fees<1> \u2197 ": string; - "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; - "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; - "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; - "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; - "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; - "<0>Unlock voting to prepare for the next proposal.": string; - "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; - "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; - About: string; - Accept: string; - Account: string; - Active: string; - Add: string; - "Add <0/> and <1/> to Uniswap V2": string; - "Add Delegate +": string; - "Add Liquidity": string; - "Add V2 Liquidity": string; - "Add liquidity.": string; - "Add more liquidity": string; - "Add {0} to Metamask <0/>": (string | string[])[]; - "Add {0}-{1} liquidity": (string | string[])[]; - "Add {0}/{1} V3 liquidity": (string | string[])[]; - "Added {0}": (string | string[])[]; - "Address has no available claim": string; - Against: string; - "Allow LP token migration": string; - "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; - "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; - Allowed: string; - Amount: string; - "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Approval pending <0/>": string; - Approve: string; - "Approve Token": string; - "Approve {0}": (string | string[])[]; - "Approve {0} first": (string | string[])[]; - Approved: string; - Approving: string; - "Approving {0}": (string | string[])[]; - Arbiscan: string; - "Arbitrum Bridge": string; - "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Are you sure?": string; - "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; - "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; - Auto: string; - "Auto Router API": string; - "Available to deposit: {0}": (string | string[])[]; - "Balance: {0}": (string | string[])[]; - "Best for exotic pairs.": string; - "Best for most pairs.": string; - "Best for stable pairs.": string; - "Best for very stable pairs.": string; - "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; - "Blocked address": string; - Bridge: string; - "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; - "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; - Canceled: string; - Change: string; - Charts: string; - "Check network status": string; - "Check out our v3 LP walkthrough and migration guides.": string; - Claim: string; - "Claim <0/> for {0}": (string | string[])[]; - "Claim UNI": string; - "Claim UNI Token": string; - "Claim UNI reward for {0}": (string | string[])[]; - "Claim fees": string; - "Claim your UNI tokens": string; - Claimed: string; - "Claimed UNI!": string; - "Claimed!": string; - Claiming: string; - "Claiming UNI": string; - "Claiming {0} UNI": (string | string[])[]; - "Clear All": string; - "Clear all": string; - Close: string; - Closed: string; - Collect: string; - "Collect as WETH": string; - "Collect fees": string; - "Collect {0}/{1} fees": (string | string[])[]; - Collected: string; - Collecting: string; - "Collecting fees": string; - "Collecting fees will withdraw currently available fees for you.": string; - Confirm: string; - "Confirm Supply": string; - "Confirm Swap": string; - "Confirm swap": string; - "Confirm this transaction in your wallet": string; - "Confirm transaction in wallet": string; - "Connect Wallet": string; - "Connect a wallet": string; - "Connect to a wallet to find pools": string; - "Connect to a wallet to view your V2 liquidity.": string; - "Connect to a wallet to view your liquidity.": string; - "Connect wallet to swap": string; - "Connected with {name}": (string | string[])[]; - Copied: string; - "Copy Address": string; - "Create Pool & Supply": string; - "Create Proposal": string; - "Create a pair": string; - "Create a pool": string; - "Create an issue on GitHub": string; - "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; - "Create pool.": string; - "Create {0}/{1} V3 pool": (string | string[])[]; - "Current price": string; - "Current {0} Price:": (string | string[])[]; - Custom: string; - "Dark Theme": string; - Defeated: string; - "Delegate Votes": string; - "Delegate voting power to {0}": (string | string[])[]; - "Delegated to:": string; - "Delegating votes": string; - Deposit: string; - "Deposit Amounts": string; - "Deposit UNI-V2 LP Tokens": string; - "Deposit liquidity": string; - "Deposit tokens to the {label} network.": (string | string[])[]; - "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; - "Deposited liquidity:": string; - "Deposited {0} UNI-V2": (string | string[])[]; - "Depositing Liquidity": string; - Description: string; - Detailed: string; - Details: string; - Disconnect: string; - Discord: string; - Dismiss: string; - Docs: string; - "Don\u2019t see one of your v2 positions? <0>Import it.": string; - "Earned UNI tokens represent voting shares in Uniswap governance.": string; - Edit: string; - "Efficiency Comparison": string; - "Enter a percent": string; - "Enter a recipient": string; - "Enter a valid slippage percentage": string; - "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; - "Enter an amount": string; - "Enter valid list location": string; - "Enter valid token address": string; - "Enter {0} amount": (string | string[])[]; - Error: string; - "Error connecting": string; - "Error connecting. Try refreshing the page.": string; - "Error details": string; - "Error importing list": string; - "Estimate may differ due to your wallet gas settings": string; - "Estimated network fee": string; - Etherscan: string; - Executed: string; - "Expanded results from inactive Token Lists": string; - "Expected Output": string; - "Expert Mode": string; - "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; - Expired: string; - "Explore Uniswap Analytics.": string; - "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; - "Fee Tier": string; - "Fee tier": string; - "Fetching best price...": string; - "Fetching best price\u2026": string; - For: string; - "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; - From: string; - "From (at most)": string; - "Full Range": string; - "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; - "Get support on Discord": string; - "Help Center": string; - Hide: string; - "Hide closed positions": string; - "High Price Impact": string; - "How this app uses APIs": string; - "I understand": string; - "If you purchase a token from this list, you may not be able to sell it back.": string; - Import: string; - "Import List": string; - "Import Pool": string; - "Import V2 Pool": string; - "Import at your own risk": string; - "In range": string; - "Increase Liquidity": string; - "Initial prices and pool share": string; - "Initializing...": string; - "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Install Metamask": string; - "Insufficient liquidity for this trade.": string; - "Insufficient {0}": (string | string[])[]; - "Insufficient {0} balance": (string | string[])[]; - "Interface Settings": string; - "Invalid pair": string; - "Invalid pair.": string; - "Invalid price input": string; - "Invalid range selected. The min price must be lower than the max price.": string; - "Invalid recipient": string; - Language: string; - Learn: string; - "Learn about providing liquidity": string; - "Learn more": string; - "Legal & Privacy": string; - "Light Theme": string; - Liquidity: string; - "Liquidity data not available.": string; - "Liquidity provider rewards": string; - "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - Lists: string; - Loaded: string; - Loading: string; - MAX: string; - Manage: string; - "Manage Liquidity in Rewards Pool": string; - "Manage Token Lists": string; - "Manage this pool.": string; - Max: string; - "Max Price": string; - "Max price": string; - "Max slippage": string; - "Max:": string; - "Maximum sent": string; - Menu: string; - Migrate: string; - "Migrate Liquidity to V3": string; - "Migrate V2 Liquidity": string; - "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; - "Migrate {0}/{1} liquidity to V3": (string | string[])[]; - Migrating: string; - "Min Price": string; - "Min price": string; - "Min:": string; - "Minimum received": string; - "Missing dependencies": string; - "Mock Toggle": string; - More: string; - "Network Fee": string; - "Network Warning": string; - "Network fees exceed 50% of the swap amount!": string; - "New Position": string; - "No V2 Liquidity found.": string; - "No active pools": string; - "No data": string; - "No description.": string; - "No liquidity found.": string; - "No pool found.": string; - "No proposals found.": string; - "No results found.": string; - "Not created": string; - OFF: string; - ON: string; - "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; - Off: string; - On: string; - "Once you are happy with the rate click supply to review.": string; - "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; - "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; - "Optimism Gateway": string; - "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Optimistic Etherscan": string; - "Out of range": string; - "Output is estimated.": string; - "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; - "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Output will be sent to <0>{0}": (string | string[])[]; - Owner: string; - "Participating pools": string; - Pending: string; - "Please confirm you would like to remove this list by typing REMOVE": string; - "Please connect to Layer 1 Ethereum": string; - "Please connect to a supported network in the dropdown menu or in your wallet.": string; - "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; - "Polygon Bridge": string; - Polygonscan: string; - Pool: string; - "Pool Found!": string; - "Pool Rate": string; - "Pool rate": string; - "Pool tokens in rewards pool:": string; - "Pooled {0}:": (string | string[])[]; - "Pools Overview": string; - Preview: string; - Price: string; - "Price Difference:": string; - "Price Impact": string; - "Price Impact Too High": string; - "Price Updated": string; - "Price impact": string; - "Price range": string; - "Price updated": string; - "Price:": string; - "Prices and pool share": string; - Proposal: string; - "Proposal Submitted": string; - "Proposal Title": string; - Proposals: string; - "Proposals submitted by community members will appear here.": string; - "Proposed Action": string; - Proposer: string; - "Protocol Disclaimer": string; - Queued: string; - Rates: string; - "Read more about UNI": string; - "Read more about Uniswap governance": string; - "Read more about providing liquidity": string; - "Read more about unsupported assets": string; - "Recent Transactions": string; - "Recent transactions": string; - Recipient: string; - "Reload the page": string; - Remove: string; - "Remove <0/> and <1/>": string; - "Remove Amount": string; - "Remove Delegate": string; - "Remove Liquidity": string; - "Remove list": string; - "Removing {0} {1} and {2} {3}": (string | string[])[]; - "Removing {0} {1} and{2} {3}": (string | string[])[]; - "Request Features": string; - Reset: string; - Return: string; - "Review swap": string; - "Search by token name or address": string; - "Search name or paste address": string; - "Select Pair": string; - "Select a network": string; - "Select a token": string; - "Select a token to find your v2 liquidity.": string; - "Select an action": string; - "Selected Range": string; - Self: string; - "Self Delegate": string; - "Set Price Range": string; - "Set Starting Price": string; - Settings: string; - "Share of Pool": string; - "Share of Pool:": string; - "Show Portis": string; - "Show closed positions": string; - Simple: string; - "Slippage tolerance": string; - "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; - "Something went wrong": string; - "Something went wrong.": string; - "Step 1. Get UNI-V2 Liquidity tokens": string; - "Submit new proposal": string; - "Submitting Proposal": string; - "Submitting Vote": string; - Succeeded: string; - Success: string; - Supply: string; - "Supplying {0} {1} and {2} {3}": (string | string[])[]; - Swap: string; - "Swap <0/> for exactly <1/>": string; - "Swap Anyway": string; - "Swap details": string; - "Swap exactly <0/> for <1/>": string; - "Swap failed: {0}": (string | string[])[]; - "Swap summary": string; - "Swapping {0} {1} for {2} {3}": (string | string[])[]; - "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; - "Tell us what you think \u2197": string; - "Thanks for being part of the Uniswap community <0/>": string; - "The % you will earn in fees.": string; - "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; - "The app fetches blockchain data from The Graph\u2019s hosted service.": string; - "The app fetches on-chain data and constructs contract calls with an Infura API.": string; - "The app fetches the optimal trade route from a Uniswap Labs server.": string; - "The app logs anonymized usage statistics in order to improve over time.": string; - "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; - "The cost of sending this transaction is more than half of the value of the input amount.": string; - "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; - "The estimated difference between the USD values of input and output amounts.": string; - "The input token cannot be transferred. There may be an issue with the input token.": string; - "The market price is outside your specified price range. Single-asset deposit only.": string; - "The most recent block number on this network. Prices update on every block.": string; - "The output token cannot be transferred. There may be an issue with the output token.": string; - "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; - "The price of this pool is within your selected range. Your position is currently earning fees.": string; - "The ratio of tokens you add will set the price of this pool.": string; - "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; - "There is no liquidity data.": string; - "This app uses the following third-party APIs:": string; - "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; - "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; - "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; - "This token is not supported in the Uniswap Labs app": string; - "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; - "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; - "Tip: Custom tokens are stored locally in your browser": string; - To: string; - "To (at least)": string; - "Token not supported": string; - Tokens: string; - "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; - "Top pools": string; - "Total deposited": string; - "Total deposits": string; - "Trade Route": string; - Trading: string; - "Transaction Settings": string; - "Transaction Submitted": string; - "Transaction completed in": string; - "Transaction deadline": string; - "Transaction pending": string; - "Transaction rejected.": string; - "Transaction submitted": string; - "Transfer Token": string; - "Try Again": string; - "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Turn On Expert Mode": string; - "UNI has arrived": string; - "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; - "UNI {0}/{1} Burned": (string | string[])[]; - "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; - "UNI-V2 {0}-{1}": (string | string[])[]; - "Unclaimed UNI": string; - "Unclaimed fees": string; - Undetermined: string; - "Unexpected error. Could not estimate gas for the swap.": string; - "Unexpected issue with estimating the gas. Please try again.": string; - "Uniswap Governance": string; - "Uniswap Labs' Terms of Service": string; - "Uniswap available in: <0>{0}": (string | string[])[]; - "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; - "Uniswap liquidity mining": string; - "Uniswap migration contract\u2197": string; - "Unknown Source": string; - "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; - "Unlock Votes": string; - "Unlock Voting": string; - "Unlocking Votes": string; - "Unsupported Asset": string; - "Unsupported Assets": string; - "Unsupported network\u2013switch to another to trade.": string; - Untitled: string; - Unwrap: string; - "Unwrap <0/> to {0}": (string | string[])[]; - "Update Delegation": string; - "Update list": string; - "Use the Uniswap Labs API to get faster quotes.": string; - User: string; - "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; - "V2 liquidity": string; - "V3 {0} Price:": (string | string[])[]; - "View accrued fees and analytics<0>\u2197": string; - "View list": string; - "View on Etherscan": string; - "View on Explorer": string; - "View transaction on Explorer": string; - Vote: string; - "Vote Against": string; - "Vote For": string; - "Vote against proposal {proposalId}": (string | string[])[]; - "Vote against proposal {proposalKey}": (string | string[])[]; - "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote for proposal {proposalId}": (string | string[])[]; - "Vote for proposal {proposalKey}": (string | string[])[]; - "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote to abstain on proposal {proposalId}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Voting ended {0}": (string | string[])[]; - "Voting ends approximately {0}": (string | string[])[]; - "Voting starts approximately {0}": (string | string[])[]; - "Waiting For Confirmation": string; - "Wallet Address or ENS name": string; - "Weekly Rewards": string; - "Welcome to team Unicorn :)": string; - "When you claim without withdrawing your liquidity remains in the mining pool.": string; - "When you withdraw, the contract will automagically claim UNI on your behalf!": string; - "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; - Withdraw: string; - "Withdraw & Claim": string; - "Withdraw deposited liquidity": string; - "Withdrawing {0} UNI-V2": (string | string[])[]; - "Withdrew UNI-V2!": string; - Wrap: string; - "Wrap <0/> to {0}": (string | string[])[]; - "Wrong Network": string; - "You already have an active or pending proposal": string; - "You are creating a pool": string; - "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; - "You are the first liquidity provider.": string; - "You can either vote on each proposal yourself or delegate your votes to a third party.": string; - "You can now trade {0}": (string | string[])[]; - "You don't have enough votes to submit a proposal": string; - "You don\u2019t have liquidity in this pool yet.": string; - "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; - "You may have lost your network connection.": string; - "You might consider waiting until the network fees go down to complete this transaction.": string; - "You must connect an account.": string; - "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; - "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; - "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; - "You will also collect fees earned from this position.": string; - "You will receive": string; - "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; - "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; - "Your V2 liquidity": string; - "Your active V3 liquidity positions will appear here.": string; - "Your liquidity deposits": string; - "Your pool share:": string; - "Your position": string; - "Your position has 0 liquidity, and is not earning fees.": string; - "Your position will appear here.": string; - "Your position will be 100% composed of {0} at this price": (string | string[])[]; - "Your position will be 100% {0} at this price.": (string | string[])[]; - "Your position will not earn fees or be used in trades until the market price moves into your range.": string; - "Your positions": string; - "Your rate": string; - "Your total pool tokens:": string; - "Your transaction cost will be much higher as it includes the gas to create the pool.": string; - "Your transaction may be frontrun": string; - "Your transaction may fail": string; - "Your transaction will revert if it has been pending for longer than this period of time.": string; - "Your transaction will revert if it is pending for more than this period of time.": string; - "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; - "Your transactions will appear here...": string; - "Your unclaimed UNI": string; - "after slippage": string; - confirm: string; - "for {0}": (string | string[])[]; - gwei: string; - "has socks emoji": string; - "here.": string; - "https:// or ipfs:// or ENS name": string; - minutes: string; - "via {0}": (string | string[])[]; - "via {0} token list": (string | string[])[]; - "{0, plural, one {Import token} other {Import tokens}}": (string | { - one: string; - other: string; - })[][]; - "{0}": string[][]; - "{0} %": (string | string[])[]; - "{0} <0/> per <1/>": (string | string[])[]; - "{0} Custom Tokens": (string | string[])[]; - "{0} Deposited": (string | string[])[]; - "{0} ETH": (string | string[])[]; - "{0} Fees Earned:": (string | string[])[]; - "{0} Pending": (string | string[])[]; - "{0} UNI": (string | string[])[]; - "{0} UNI / week": (string | string[])[]; - "{0} UNI-V2": (string | string[])[]; - "{0} UNI-V2 LP tokens available": (string | string[])[]; - "{0} Votes": (string | string[])[]; - "{0} per {1}": (string | string[])[]; - "{0} tokens": (string | string[])[]; - "{0} {1} Price:": (string | string[])[]; - "{0} {nativeCurrencySymbol}": (string | string[])[]; - "{0} \u2022 Added by user": (string | string[])[]; - "{0}%": (string | string[])[]; - "{0}% fee tier": (string | string[])[]; - "{0}% pool": (string | string[])[]; - "{0}% select": (string | string[])[]; - "{0}-{1} Liquidity Mining": (string | string[])[]; - "{0}/{1} LP NFT": (string | string[])[]; - "{0}/{1} LP Tokens": (string | string[])[]; - "{SOCKS_AMOUNT} UNI": (string | string[])[]; - "{USER_AMOUNT} UNI": (string | string[])[]; - "{activeTokensOnThisChain} tokens": (string | string[])[]; - "{integrator} fee": (string | string[])[]; - "{label} token bridge": (string | string[])[]; - "{min}m {sec}s": (string | string[])[]; - "{percentForSlider}%": (string | string[])[]; - "{sec}s": (string | string[])[]; - "{tokenB} per {tokenA}": (string | string[])[]; - "\u2190 Back to Pools Overview": string; -}; diff --git a/dist2/types/locales/no-NO.d.ts b/dist2/types/locales/no-NO.d.ts deleted file mode 100644 index 75120e0e5c9..00000000000 --- a/dist2/types/locales/no-NO.d.ts +++ /dev/null @@ -1,593 +0,0 @@ -export const messages: { - "$-": string; - "$<0/>": string; - "${0}": (string | string[])[]; - "(${0})": (string | string[])[]; - "(View on Explorer)": string; - "(clear all)": string; - "(edit)": string; - "- Remove recipient": string; - "0 UNI / week": string; - "25%": string; - "50%": string; - "75%": string; - "<0/> All Proposals": string; - "<0/> Votes": string; - "<0>Account analytics and accrued fees<1> \u2197 ": string; - "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; - "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; - "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; - "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; - "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; - "<0>Unlock voting to prepare for the next proposal.": string; - "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; - "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; - About: string; - Accept: string; - Account: string; - Active: string; - Add: string; - "Add <0/> and <1/> to Uniswap V2": string; - "Add Delegate +": string; - "Add Liquidity": string; - "Add V2 Liquidity": string; - "Add liquidity.": string; - "Add more liquidity": string; - "Add {0} to Metamask <0/>": (string | string[])[]; - "Add {0}-{1} liquidity": (string | string[])[]; - "Add {0}/{1} V3 liquidity": (string | string[])[]; - "Added {0}": (string | string[])[]; - "Address has no available claim": string; - Against: string; - "Allow LP token migration": string; - "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; - "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; - Allowed: string; - Amount: string; - "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Approval pending <0/>": string; - Approve: string; - "Approve Token": string; - "Approve {0}": (string | string[])[]; - "Approve {0} first": (string | string[])[]; - Approved: string; - Approving: string; - "Approving {0}": (string | string[])[]; - Arbiscan: string; - "Arbitrum Bridge": string; - "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Are you sure?": string; - "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; - "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; - Auto: string; - "Auto Router API": string; - "Available to deposit: {0}": (string | string[])[]; - "Balance: {0}": (string | string[])[]; - "Best for exotic pairs.": string; - "Best for most pairs.": string; - "Best for stable pairs.": string; - "Best for very stable pairs.": string; - "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; - "Blocked address": string; - Bridge: string; - "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; - "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; - Canceled: string; - Change: string; - Charts: string; - "Check network status": string; - "Check out our v3 LP walkthrough and migration guides.": string; - Claim: string; - "Claim <0/> for {0}": (string | string[])[]; - "Claim UNI": string; - "Claim UNI Token": string; - "Claim UNI reward for {0}": (string | string[])[]; - "Claim fees": string; - "Claim your UNI tokens": string; - Claimed: string; - "Claimed UNI!": string; - "Claimed!": string; - Claiming: string; - "Claiming UNI": string; - "Claiming {0} UNI": (string | string[])[]; - "Clear All": string; - "Clear all": string; - Close: string; - Closed: string; - Collect: string; - "Collect as WETH": string; - "Collect fees": string; - "Collect {0}/{1} fees": (string | string[])[]; - Collected: string; - Collecting: string; - "Collecting fees": string; - "Collecting fees will withdraw currently available fees for you.": string; - Confirm: string; - "Confirm Supply": string; - "Confirm Swap": string; - "Confirm swap": string; - "Confirm this transaction in your wallet": string; - "Confirm transaction in wallet": string; - "Connect Wallet": string; - "Connect a wallet": string; - "Connect to a wallet to find pools": string; - "Connect to a wallet to view your V2 liquidity.": string; - "Connect to a wallet to view your liquidity.": string; - "Connect wallet to swap": string; - "Connected with {name}": (string | string[])[]; - Copied: string; - "Copy Address": string; - "Create Pool & Supply": string; - "Create Proposal": string; - "Create a pair": string; - "Create a pool": string; - "Create an issue on GitHub": string; - "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; - "Create pool.": string; - "Create {0}/{1} V3 pool": (string | string[])[]; - "Current price": string; - "Current {0} Price:": (string | string[])[]; - Custom: string; - "Dark Theme": string; - Defeated: string; - "Delegate Votes": string; - "Delegate voting power to {0}": (string | string[])[]; - "Delegated to:": string; - "Delegating votes": string; - Deposit: string; - "Deposit Amounts": string; - "Deposit UNI-V2 LP Tokens": string; - "Deposit liquidity": string; - "Deposit tokens to the {label} network.": (string | string[])[]; - "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; - "Deposited liquidity:": string; - "Deposited {0} UNI-V2": (string | string[])[]; - "Depositing Liquidity": string; - Description: string; - Detailed: string; - Details: string; - Disconnect: string; - Discord: string; - Dismiss: string; - Docs: string; - "Don\u2019t see one of your v2 positions? <0>Import it.": string; - "Earned UNI tokens represent voting shares in Uniswap governance.": string; - Edit: string; - "Efficiency Comparison": string; - "Enter a percent": string; - "Enter a recipient": string; - "Enter a valid slippage percentage": string; - "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; - "Enter an amount": string; - "Enter valid list location": string; - "Enter valid token address": string; - "Enter {0} amount": (string | string[])[]; - Error: string; - "Error connecting": string; - "Error connecting. Try refreshing the page.": string; - "Error details": string; - "Error importing list": string; - "Estimate may differ due to your wallet gas settings": string; - "Estimated network fee": string; - Etherscan: string; - Executed: string; - "Expanded results from inactive Token Lists": string; - "Expected Output": string; - "Expert Mode": string; - "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; - Expired: string; - "Explore Uniswap Analytics.": string; - "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; - "Fee Tier": string; - "Fee tier": string; - "Fetching best price...": string; - "Fetching best price\u2026": string; - For: string; - "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; - From: string; - "From (at most)": string; - "Full Range": string; - "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; - "Get support on Discord": string; - "Help Center": string; - Hide: string; - "Hide closed positions": string; - "High Price Impact": string; - "How this app uses APIs": string; - "I understand": string; - "If you purchase a token from this list, you may not be able to sell it back.": string; - Import: string; - "Import List": string; - "Import Pool": string; - "Import V2 Pool": string; - "Import at your own risk": string; - "In range": string; - "Increase Liquidity": string; - "Initial prices and pool share": string; - "Initializing...": string; - "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Install Metamask": string; - "Insufficient liquidity for this trade.": string; - "Insufficient {0}": (string | string[])[]; - "Insufficient {0} balance": (string | string[])[]; - "Interface Settings": string; - "Invalid pair": string; - "Invalid pair.": string; - "Invalid price input": string; - "Invalid range selected. The min price must be lower than the max price.": string; - "Invalid recipient": string; - Language: string; - Learn: string; - "Learn about providing liquidity": string; - "Learn more": string; - "Legal & Privacy": string; - "Light Theme": string; - Liquidity: string; - "Liquidity data not available.": string; - "Liquidity provider rewards": string; - "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - Lists: string; - Loaded: string; - Loading: string; - MAX: string; - Manage: string; - "Manage Liquidity in Rewards Pool": string; - "Manage Token Lists": string; - "Manage this pool.": string; - Max: string; - "Max Price": string; - "Max price": string; - "Max slippage": string; - "Max:": string; - "Maximum sent": string; - Menu: string; - Migrate: string; - "Migrate Liquidity to V3": string; - "Migrate V2 Liquidity": string; - "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; - "Migrate {0}/{1} liquidity to V3": (string | string[])[]; - Migrating: string; - "Min Price": string; - "Min price": string; - "Min:": string; - "Minimum received": string; - "Missing dependencies": string; - "Mock Toggle": string; - More: string; - "Network Fee": string; - "Network Warning": string; - "Network fees exceed 50% of the swap amount!": string; - "New Position": string; - "No V2 Liquidity found.": string; - "No active pools": string; - "No data": string; - "No description.": string; - "No liquidity found.": string; - "No pool found.": string; - "No proposals found.": string; - "No results found.": string; - "Not created": string; - OFF: string; - ON: string; - "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; - Off: string; - On: string; - "Once you are happy with the rate click supply to review.": string; - "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; - "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; - "Optimism Gateway": string; - "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Optimistic Etherscan": string; - "Out of range": string; - "Output is estimated.": string; - "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; - "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Output will be sent to <0>{0}": (string | string[])[]; - Owner: string; - "Participating pools": string; - Pending: string; - "Please confirm you would like to remove this list by typing REMOVE": string; - "Please connect to Layer 1 Ethereum": string; - "Please connect to a supported network in the dropdown menu or in your wallet.": string; - "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; - "Polygon Bridge": string; - Polygonscan: string; - Pool: string; - "Pool Found!": string; - "Pool Rate": string; - "Pool rate": string; - "Pool tokens in rewards pool:": string; - "Pooled {0}:": (string | string[])[]; - "Pools Overview": string; - Preview: string; - Price: string; - "Price Difference:": string; - "Price Impact": string; - "Price Impact Too High": string; - "Price Updated": string; - "Price impact": string; - "Price range": string; - "Price updated": string; - "Price:": string; - "Prices and pool share": string; - Proposal: string; - "Proposal Submitted": string; - "Proposal Title": string; - Proposals: string; - "Proposals submitted by community members will appear here.": string; - "Proposed Action": string; - Proposer: string; - "Protocol Disclaimer": string; - Queued: string; - Rates: string; - "Read more about UNI": string; - "Read more about Uniswap governance": string; - "Read more about providing liquidity": string; - "Read more about unsupported assets": string; - "Recent Transactions": string; - "Recent transactions": string; - Recipient: string; - "Reload the page": string; - Remove: string; - "Remove <0/> and <1/>": string; - "Remove Amount": string; - "Remove Delegate": string; - "Remove Liquidity": string; - "Remove list": string; - "Removing {0} {1} and {2} {3}": (string | string[])[]; - "Removing {0} {1} and{2} {3}": (string | string[])[]; - "Request Features": string; - Reset: string; - Return: string; - "Review swap": string; - "Search by token name or address": string; - "Search name or paste address": string; - "Select Pair": string; - "Select a network": string; - "Select a token": string; - "Select a token to find your v2 liquidity.": string; - "Select an action": string; - "Selected Range": string; - Self: string; - "Self Delegate": string; - "Set Price Range": string; - "Set Starting Price": string; - Settings: string; - "Share of Pool": string; - "Share of Pool:": string; - "Show Portis": string; - "Show closed positions": string; - Simple: string; - "Slippage tolerance": string; - "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; - "Something went wrong": string; - "Something went wrong.": string; - "Step 1. Get UNI-V2 Liquidity tokens": string; - "Submit new proposal": string; - "Submitting Proposal": string; - "Submitting Vote": string; - Succeeded: string; - Success: string; - Supply: string; - "Supplying {0} {1} and {2} {3}": (string | string[])[]; - Swap: string; - "Swap <0/> for exactly <1/>": string; - "Swap Anyway": string; - "Swap details": string; - "Swap exactly <0/> for <1/>": string; - "Swap failed: {0}": (string | string[])[]; - "Swap summary": string; - "Swapping {0} {1} for {2} {3}": (string | string[])[]; - "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; - "Tell us what you think \u2197": string; - "Thanks for being part of the Uniswap community <0/>": string; - "The % you will earn in fees.": string; - "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; - "The app fetches blockchain data from The Graph\u2019s hosted service.": string; - "The app fetches on-chain data and constructs contract calls with an Infura API.": string; - "The app fetches the optimal trade route from a Uniswap Labs server.": string; - "The app logs anonymized usage statistics in order to improve over time.": string; - "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; - "The cost of sending this transaction is more than half of the value of the input amount.": string; - "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; - "The estimated difference between the USD values of input and output amounts.": string; - "The input token cannot be transferred. There may be an issue with the input token.": string; - "The market price is outside your specified price range. Single-asset deposit only.": string; - "The most recent block number on this network. Prices update on every block.": string; - "The output token cannot be transferred. There may be an issue with the output token.": string; - "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; - "The price of this pool is within your selected range. Your position is currently earning fees.": string; - "The ratio of tokens you add will set the price of this pool.": string; - "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; - "There is no liquidity data.": string; - "This app uses the following third-party APIs:": string; - "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; - "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; - "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; - "This token is not supported in the Uniswap Labs app": string; - "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; - "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; - "Tip: Custom tokens are stored locally in your browser": string; - To: string; - "To (at least)": string; - "Token not supported": string; - Tokens: string; - "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; - "Top pools": string; - "Total deposited": string; - "Total deposits": string; - "Trade Route": string; - Trading: string; - "Transaction Settings": string; - "Transaction Submitted": string; - "Transaction completed in": string; - "Transaction deadline": string; - "Transaction pending": string; - "Transaction rejected.": string; - "Transaction submitted": string; - "Transfer Token": string; - "Try Again": string; - "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Turn On Expert Mode": string; - "UNI has arrived": string; - "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; - "UNI {0}/{1} Burned": (string | string[])[]; - "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; - "UNI-V2 {0}-{1}": (string | string[])[]; - "Unclaimed UNI": string; - "Unclaimed fees": string; - Undetermined: string; - "Unexpected error. Could not estimate gas for the swap.": string; - "Unexpected issue with estimating the gas. Please try again.": string; - "Uniswap Governance": string; - "Uniswap Labs' Terms of Service": string; - "Uniswap available in: <0>{0}": (string | string[])[]; - "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; - "Uniswap liquidity mining": string; - "Uniswap migration contract\u2197": string; - "Unknown Source": string; - "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; - "Unlock Votes": string; - "Unlock Voting": string; - "Unlocking Votes": string; - "Unsupported Asset": string; - "Unsupported Assets": string; - "Unsupported network\u2013switch to another to trade.": string; - Untitled: string; - Unwrap: string; - "Unwrap <0/> to {0}": (string | string[])[]; - "Update Delegation": string; - "Update list": string; - "Use the Uniswap Labs API to get faster quotes.": string; - User: string; - "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; - "V2 liquidity": string; - "V3 {0} Price:": (string | string[])[]; - "View accrued fees and analytics<0>\u2197": string; - "View list": string; - "View on Etherscan": string; - "View on Explorer": string; - "View transaction on Explorer": string; - Vote: string; - "Vote Against": string; - "Vote For": string; - "Vote against proposal {proposalId}": (string | string[])[]; - "Vote against proposal {proposalKey}": (string | string[])[]; - "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote for proposal {proposalId}": (string | string[])[]; - "Vote for proposal {proposalKey}": (string | string[])[]; - "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote to abstain on proposal {proposalId}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Voting ended {0}": (string | string[])[]; - "Voting ends approximately {0}": (string | string[])[]; - "Voting starts approximately {0}": (string | string[])[]; - "Waiting For Confirmation": string; - "Wallet Address or ENS name": string; - "Weekly Rewards": string; - "Welcome to team Unicorn :)": string; - "When you claim without withdrawing your liquidity remains in the mining pool.": string; - "When you withdraw, the contract will automagically claim UNI on your behalf!": string; - "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; - Withdraw: string; - "Withdraw & Claim": string; - "Withdraw deposited liquidity": string; - "Withdrawing {0} UNI-V2": (string | string[])[]; - "Withdrew UNI-V2!": string; - Wrap: string; - "Wrap <0/> to {0}": (string | string[])[]; - "Wrong Network": string; - "You already have an active or pending proposal": string; - "You are creating a pool": string; - "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; - "You are the first liquidity provider.": string; - "You can either vote on each proposal yourself or delegate your votes to a third party.": string; - "You can now trade {0}": (string | string[])[]; - "You don't have enough votes to submit a proposal": string; - "You don\u2019t have liquidity in this pool yet.": string; - "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; - "You may have lost your network connection.": string; - "You might consider waiting until the network fees go down to complete this transaction.": string; - "You must connect an account.": string; - "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; - "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; - "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; - "You will also collect fees earned from this position.": string; - "You will receive": string; - "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; - "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; - "Your V2 liquidity": string; - "Your active V3 liquidity positions will appear here.": string; - "Your liquidity deposits": string; - "Your pool share:": string; - "Your position": string; - "Your position has 0 liquidity, and is not earning fees.": string; - "Your position will appear here.": string; - "Your position will be 100% composed of {0} at this price": (string | string[])[]; - "Your position will be 100% {0} at this price.": (string | string[])[]; - "Your position will not earn fees or be used in trades until the market price moves into your range.": string; - "Your positions": string; - "Your rate": string; - "Your total pool tokens:": string; - "Your transaction cost will be much higher as it includes the gas to create the pool.": string; - "Your transaction may be frontrun": string; - "Your transaction may fail": string; - "Your transaction will revert if it has been pending for longer than this period of time.": string; - "Your transaction will revert if it is pending for more than this period of time.": string; - "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; - "Your transactions will appear here...": string; - "Your unclaimed UNI": string; - "after slippage": string; - confirm: string; - "for {0}": (string | string[])[]; - gwei: string; - "has socks emoji": string; - "here.": string; - "https:// or ipfs:// or ENS name": string; - minutes: string; - "via {0}": (string | string[])[]; - "via {0} token list": (string | string[])[]; - "{0, plural, one {Import token} other {Import tokens}}": (string | { - one: string; - other: string; - })[][]; - "{0}": string[][]; - "{0} %": (string | string[])[]; - "{0} <0/> per <1/>": (string | string[])[]; - "{0} Custom Tokens": (string | string[])[]; - "{0} Deposited": (string | string[])[]; - "{0} ETH": (string | string[])[]; - "{0} Fees Earned:": (string | string[])[]; - "{0} Pending": (string | string[])[]; - "{0} UNI": (string | string[])[]; - "{0} UNI / week": (string | string[])[]; - "{0} UNI-V2": (string | string[])[]; - "{0} UNI-V2 LP tokens available": (string | string[])[]; - "{0} Votes": (string | string[])[]; - "{0} per {1}": (string | string[])[]; - "{0} tokens": (string | string[])[]; - "{0} {1} Price:": (string | string[])[]; - "{0} {nativeCurrencySymbol}": (string | string[])[]; - "{0} \u2022 Added by user": (string | string[])[]; - "{0}%": (string | string[])[]; - "{0}% fee tier": (string | string[])[]; - "{0}% pool": (string | string[])[]; - "{0}% select": (string | string[])[]; - "{0}-{1} Liquidity Mining": (string | string[])[]; - "{0}/{1} LP NFT": (string | string[])[]; - "{0}/{1} LP Tokens": (string | string[])[]; - "{SOCKS_AMOUNT} UNI": (string | string[])[]; - "{USER_AMOUNT} UNI": (string | string[])[]; - "{activeTokensOnThisChain} tokens": (string | string[])[]; - "{integrator} fee": (string | string[])[]; - "{label} token bridge": (string | string[])[]; - "{min}m {sec}s": (string | string[])[]; - "{percentForSlider}%": (string | string[])[]; - "{sec}s": (string | string[])[]; - "{tokenB} per {tokenA}": (string | string[])[]; - "\u2190 Back to Pools Overview": string; -}; diff --git a/dist2/types/locales/pl-PL.d.ts b/dist2/types/locales/pl-PL.d.ts deleted file mode 100644 index 261a7fbd1ca..00000000000 --- a/dist2/types/locales/pl-PL.d.ts +++ /dev/null @@ -1,593 +0,0 @@ -export const messages: { - "$-": string; - "$<0/>": string; - "${0}": (string | string[])[]; - "(${0})": (string | string[])[]; - "(View on Explorer)": string; - "(clear all)": string; - "(edit)": string; - "- Remove recipient": string; - "0 UNI / week": string; - "25%": string; - "50%": string; - "75%": string; - "<0/> All Proposals": string; - "<0/> Votes": string; - "<0>Account analytics and accrued fees<1> \u2197 ": string; - "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; - "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; - "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; - "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; - "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; - "<0>Unlock voting to prepare for the next proposal.": string; - "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; - "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; - About: string; - Accept: string; - Account: string; - Active: string; - Add: string; - "Add <0/> and <1/> to Uniswap V2": string; - "Add Delegate +": string; - "Add Liquidity": string; - "Add V2 Liquidity": string; - "Add liquidity.": string; - "Add more liquidity": string; - "Add {0} to Metamask <0/>": (string | string[])[]; - "Add {0}-{1} liquidity": (string | string[])[]; - "Add {0}/{1} V3 liquidity": (string | string[])[]; - "Added {0}": (string | string[])[]; - "Address has no available claim": string; - Against: string; - "Allow LP token migration": string; - "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; - "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; - Allowed: string; - Amount: string; - "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Approval pending <0/>": string; - Approve: string; - "Approve Token": string; - "Approve {0}": (string | string[])[]; - "Approve {0} first": (string | string[])[]; - Approved: string; - Approving: string; - "Approving {0}": (string | string[])[]; - Arbiscan: string; - "Arbitrum Bridge": string; - "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Are you sure?": string; - "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; - "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; - Auto: string; - "Auto Router API": string; - "Available to deposit: {0}": (string | string[])[]; - "Balance: {0}": (string | string[])[]; - "Best for exotic pairs.": string; - "Best for most pairs.": string; - "Best for stable pairs.": string; - "Best for very stable pairs.": string; - "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; - "Blocked address": string; - Bridge: string; - "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; - "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; - Canceled: string; - Change: string; - Charts: string; - "Check network status": string; - "Check out our v3 LP walkthrough and migration guides.": string; - Claim: string; - "Claim <0/> for {0}": (string | string[])[]; - "Claim UNI": string; - "Claim UNI Token": string; - "Claim UNI reward for {0}": (string | string[])[]; - "Claim fees": string; - "Claim your UNI tokens": string; - Claimed: string; - "Claimed UNI!": string; - "Claimed!": string; - Claiming: string; - "Claiming UNI": string; - "Claiming {0} UNI": (string | string[])[]; - "Clear All": string; - "Clear all": string; - Close: string; - Closed: string; - Collect: string; - "Collect as WETH": string; - "Collect fees": string; - "Collect {0}/{1} fees": (string | string[])[]; - Collected: string; - Collecting: string; - "Collecting fees": string; - "Collecting fees will withdraw currently available fees for you.": string; - Confirm: string; - "Confirm Supply": string; - "Confirm Swap": string; - "Confirm swap": string; - "Confirm this transaction in your wallet": string; - "Confirm transaction in wallet": string; - "Connect Wallet": string; - "Connect a wallet": string; - "Connect to a wallet to find pools": string; - "Connect to a wallet to view your V2 liquidity.": string; - "Connect to a wallet to view your liquidity.": string; - "Connect wallet to swap": string; - "Connected with {name}": (string | string[])[]; - Copied: string; - "Copy Address": string; - "Create Pool & Supply": string; - "Create Proposal": string; - "Create a pair": string; - "Create a pool": string; - "Create an issue on GitHub": string; - "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; - "Create pool.": string; - "Create {0}/{1} V3 pool": (string | string[])[]; - "Current price": string; - "Current {0} Price:": (string | string[])[]; - Custom: string; - "Dark Theme": string; - Defeated: string; - "Delegate Votes": string; - "Delegate voting power to {0}": (string | string[])[]; - "Delegated to:": string; - "Delegating votes": string; - Deposit: string; - "Deposit Amounts": string; - "Deposit UNI-V2 LP Tokens": string; - "Deposit liquidity": string; - "Deposit tokens to the {label} network.": (string | string[])[]; - "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; - "Deposited liquidity:": string; - "Deposited {0} UNI-V2": (string | string[])[]; - "Depositing Liquidity": string; - Description: string; - Detailed: string; - Details: string; - Disconnect: string; - Discord: string; - Dismiss: string; - Docs: string; - "Don\u2019t see one of your v2 positions? <0>Import it.": string; - "Earned UNI tokens represent voting shares in Uniswap governance.": string; - Edit: string; - "Efficiency Comparison": string; - "Enter a percent": string; - "Enter a recipient": string; - "Enter a valid slippage percentage": string; - "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; - "Enter an amount": string; - "Enter valid list location": string; - "Enter valid token address": string; - "Enter {0} amount": (string | string[])[]; - Error: string; - "Error connecting": string; - "Error connecting. Try refreshing the page.": string; - "Error details": string; - "Error importing list": string; - "Estimate may differ due to your wallet gas settings": string; - "Estimated network fee": string; - Etherscan: string; - Executed: string; - "Expanded results from inactive Token Lists": string; - "Expected Output": string; - "Expert Mode": string; - "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; - Expired: string; - "Explore Uniswap Analytics.": string; - "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; - "Fee Tier": string; - "Fee tier": string; - "Fetching best price...": string; - "Fetching best price\u2026": string; - For: string; - "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; - From: string; - "From (at most)": string; - "Full Range": string; - "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; - "Get support on Discord": string; - "Help Center": string; - Hide: string; - "Hide closed positions": string; - "High Price Impact": string; - "How this app uses APIs": string; - "I understand": string; - "If you purchase a token from this list, you may not be able to sell it back.": string; - Import: string; - "Import List": string; - "Import Pool": string; - "Import V2 Pool": string; - "Import at your own risk": string; - "In range": string; - "Increase Liquidity": string; - "Initial prices and pool share": string; - "Initializing...": string; - "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Install Metamask": string; - "Insufficient liquidity for this trade.": string; - "Insufficient {0}": (string | string[])[]; - "Insufficient {0} balance": (string | string[])[]; - "Interface Settings": string; - "Invalid pair": string; - "Invalid pair.": string; - "Invalid price input": string; - "Invalid range selected. The min price must be lower than the max price.": string; - "Invalid recipient": string; - Language: string; - Learn: string; - "Learn about providing liquidity": string; - "Learn more": string; - "Legal & Privacy": string; - "Light Theme": string; - Liquidity: string; - "Liquidity data not available.": string; - "Liquidity provider rewards": string; - "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - Lists: string; - Loaded: string; - Loading: string; - MAX: string; - Manage: string; - "Manage Liquidity in Rewards Pool": string; - "Manage Token Lists": string; - "Manage this pool.": string; - Max: string; - "Max Price": string; - "Max price": string; - "Max slippage": string; - "Max:": string; - "Maximum sent": string; - Menu: string; - Migrate: string; - "Migrate Liquidity to V3": string; - "Migrate V2 Liquidity": string; - "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; - "Migrate {0}/{1} liquidity to V3": (string | string[])[]; - Migrating: string; - "Min Price": string; - "Min price": string; - "Min:": string; - "Minimum received": string; - "Missing dependencies": string; - "Mock Toggle": string; - More: string; - "Network Fee": string; - "Network Warning": string; - "Network fees exceed 50% of the swap amount!": string; - "New Position": string; - "No V2 Liquidity found.": string; - "No active pools": string; - "No data": string; - "No description.": string; - "No liquidity found.": string; - "No pool found.": string; - "No proposals found.": string; - "No results found.": string; - "Not created": string; - OFF: string; - ON: string; - "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; - Off: string; - On: string; - "Once you are happy with the rate click supply to review.": string; - "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; - "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; - "Optimism Gateway": string; - "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Optimistic Etherscan": string; - "Out of range": string; - "Output is estimated.": string; - "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; - "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Output will be sent to <0>{0}": (string | string[])[]; - Owner: string; - "Participating pools": string; - Pending: string; - "Please confirm you would like to remove this list by typing REMOVE": string; - "Please connect to Layer 1 Ethereum": string; - "Please connect to a supported network in the dropdown menu or in your wallet.": string; - "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; - "Polygon Bridge": string; - Polygonscan: string; - Pool: string; - "Pool Found!": string; - "Pool Rate": string; - "Pool rate": string; - "Pool tokens in rewards pool:": string; - "Pooled {0}:": (string | string[])[]; - "Pools Overview": string; - Preview: string; - Price: string; - "Price Difference:": string; - "Price Impact": string; - "Price Impact Too High": string; - "Price Updated": string; - "Price impact": string; - "Price range": string; - "Price updated": string; - "Price:": string; - "Prices and pool share": string; - Proposal: string; - "Proposal Submitted": string; - "Proposal Title": string; - Proposals: string; - "Proposals submitted by community members will appear here.": string; - "Proposed Action": string; - Proposer: string; - "Protocol Disclaimer": string; - Queued: string; - Rates: string; - "Read more about UNI": string; - "Read more about Uniswap governance": string; - "Read more about providing liquidity": string; - "Read more about unsupported assets": string; - "Recent Transactions": string; - "Recent transactions": string; - Recipient: string; - "Reload the page": string; - Remove: string; - "Remove <0/> and <1/>": string; - "Remove Amount": string; - "Remove Delegate": string; - "Remove Liquidity": string; - "Remove list": string; - "Removing {0} {1} and {2} {3}": (string | string[])[]; - "Removing {0} {1} and{2} {3}": (string | string[])[]; - "Request Features": string; - Reset: string; - Return: string; - "Review swap": string; - "Search by token name or address": string; - "Search name or paste address": string; - "Select Pair": string; - "Select a network": string; - "Select a token": string; - "Select a token to find your v2 liquidity.": string; - "Select an action": string; - "Selected Range": string; - Self: string; - "Self Delegate": string; - "Set Price Range": string; - "Set Starting Price": string; - Settings: string; - "Share of Pool": string; - "Share of Pool:": string; - "Show Portis": string; - "Show closed positions": string; - Simple: string; - "Slippage tolerance": string; - "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; - "Something went wrong": string; - "Something went wrong.": string; - "Step 1. Get UNI-V2 Liquidity tokens": string; - "Submit new proposal": string; - "Submitting Proposal": string; - "Submitting Vote": string; - Succeeded: string; - Success: string; - Supply: string; - "Supplying {0} {1} and {2} {3}": (string | string[])[]; - Swap: string; - "Swap <0/> for exactly <1/>": string; - "Swap Anyway": string; - "Swap details": string; - "Swap exactly <0/> for <1/>": string; - "Swap failed: {0}": (string | string[])[]; - "Swap summary": string; - "Swapping {0} {1} for {2} {3}": (string | string[])[]; - "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; - "Tell us what you think \u2197": string; - "Thanks for being part of the Uniswap community <0/>": string; - "The % you will earn in fees.": string; - "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; - "The app fetches blockchain data from The Graph\u2019s hosted service.": string; - "The app fetches on-chain data and constructs contract calls with an Infura API.": string; - "The app fetches the optimal trade route from a Uniswap Labs server.": string; - "The app logs anonymized usage statistics in order to improve over time.": string; - "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; - "The cost of sending this transaction is more than half of the value of the input amount.": string; - "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; - "The estimated difference between the USD values of input and output amounts.": string; - "The input token cannot be transferred. There may be an issue with the input token.": string; - "The market price is outside your specified price range. Single-asset deposit only.": string; - "The most recent block number on this network. Prices update on every block.": string; - "The output token cannot be transferred. There may be an issue with the output token.": string; - "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; - "The price of this pool is within your selected range. Your position is currently earning fees.": string; - "The ratio of tokens you add will set the price of this pool.": string; - "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; - "There is no liquidity data.": string; - "This app uses the following third-party APIs:": string; - "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; - "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; - "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; - "This token is not supported in the Uniswap Labs app": string; - "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; - "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; - "Tip: Custom tokens are stored locally in your browser": string; - To: string; - "To (at least)": string; - "Token not supported": string; - Tokens: string; - "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; - "Top pools": string; - "Total deposited": string; - "Total deposits": string; - "Trade Route": string; - Trading: string; - "Transaction Settings": string; - "Transaction Submitted": string; - "Transaction completed in": string; - "Transaction deadline": string; - "Transaction pending": string; - "Transaction rejected.": string; - "Transaction submitted": string; - "Transfer Token": string; - "Try Again": string; - "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Turn On Expert Mode": string; - "UNI has arrived": string; - "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; - "UNI {0}/{1} Burned": (string | string[])[]; - "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; - "UNI-V2 {0}-{1}": (string | string[])[]; - "Unclaimed UNI": string; - "Unclaimed fees": string; - Undetermined: string; - "Unexpected error. Could not estimate gas for the swap.": string; - "Unexpected issue with estimating the gas. Please try again.": string; - "Uniswap Governance": string; - "Uniswap Labs' Terms of Service": string; - "Uniswap available in: <0>{0}": (string | string[])[]; - "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; - "Uniswap liquidity mining": string; - "Uniswap migration contract\u2197": string; - "Unknown Source": string; - "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; - "Unlock Votes": string; - "Unlock Voting": string; - "Unlocking Votes": string; - "Unsupported Asset": string; - "Unsupported Assets": string; - "Unsupported network\u2013switch to another to trade.": string; - Untitled: string; - Unwrap: string; - "Unwrap <0/> to {0}": (string | string[])[]; - "Update Delegation": string; - "Update list": string; - "Use the Uniswap Labs API to get faster quotes.": string; - User: string; - "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; - "V2 liquidity": string; - "V3 {0} Price:": (string | string[])[]; - "View accrued fees and analytics<0>\u2197": string; - "View list": string; - "View on Etherscan": string; - "View on Explorer": string; - "View transaction on Explorer": string; - Vote: string; - "Vote Against": string; - "Vote For": string; - "Vote against proposal {proposalId}": (string | string[])[]; - "Vote against proposal {proposalKey}": (string | string[])[]; - "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote for proposal {proposalId}": (string | string[])[]; - "Vote for proposal {proposalKey}": (string | string[])[]; - "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote to abstain on proposal {proposalId}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Voting ended {0}": (string | string[])[]; - "Voting ends approximately {0}": (string | string[])[]; - "Voting starts approximately {0}": (string | string[])[]; - "Waiting For Confirmation": string; - "Wallet Address or ENS name": string; - "Weekly Rewards": string; - "Welcome to team Unicorn :)": string; - "When you claim without withdrawing your liquidity remains in the mining pool.": string; - "When you withdraw, the contract will automagically claim UNI on your behalf!": string; - "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; - Withdraw: string; - "Withdraw & Claim": string; - "Withdraw deposited liquidity": string; - "Withdrawing {0} UNI-V2": (string | string[])[]; - "Withdrew UNI-V2!": string; - Wrap: string; - "Wrap <0/> to {0}": (string | string[])[]; - "Wrong Network": string; - "You already have an active or pending proposal": string; - "You are creating a pool": string; - "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; - "You are the first liquidity provider.": string; - "You can either vote on each proposal yourself or delegate your votes to a third party.": string; - "You can now trade {0}": (string | string[])[]; - "You don't have enough votes to submit a proposal": string; - "You don\u2019t have liquidity in this pool yet.": string; - "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; - "You may have lost your network connection.": string; - "You might consider waiting until the network fees go down to complete this transaction.": string; - "You must connect an account.": string; - "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; - "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; - "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; - "You will also collect fees earned from this position.": string; - "You will receive": string; - "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; - "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; - "Your V2 liquidity": string; - "Your active V3 liquidity positions will appear here.": string; - "Your liquidity deposits": string; - "Your pool share:": string; - "Your position": string; - "Your position has 0 liquidity, and is not earning fees.": string; - "Your position will appear here.": string; - "Your position will be 100% composed of {0} at this price": (string | string[])[]; - "Your position will be 100% {0} at this price.": (string | string[])[]; - "Your position will not earn fees or be used in trades until the market price moves into your range.": string; - "Your positions": string; - "Your rate": string; - "Your total pool tokens:": string; - "Your transaction cost will be much higher as it includes the gas to create the pool.": string; - "Your transaction may be frontrun": string; - "Your transaction may fail": string; - "Your transaction will revert if it has been pending for longer than this period of time.": string; - "Your transaction will revert if it is pending for more than this period of time.": string; - "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; - "Your transactions will appear here...": string; - "Your unclaimed UNI": string; - "after slippage": string; - confirm: string; - "for {0}": (string | string[])[]; - gwei: string; - "has socks emoji": string; - "here.": string; - "https:// or ipfs:// or ENS name": string; - minutes: string; - "via {0}": (string | string[])[]; - "via {0} token list": (string | string[])[]; - "{0, plural, one {Import token} other {Import tokens}}": (string | { - one: string; - other: string; - })[][]; - "{0}": string[][]; - "{0} %": (string | string[])[]; - "{0} <0/> per <1/>": (string | string[])[]; - "{0} Custom Tokens": (string | string[])[]; - "{0} Deposited": (string | string[])[]; - "{0} ETH": (string | string[])[]; - "{0} Fees Earned:": (string | string[])[]; - "{0} Pending": (string | string[])[]; - "{0} UNI": (string | string[])[]; - "{0} UNI / week": (string | string[])[]; - "{0} UNI-V2": (string | string[])[]; - "{0} UNI-V2 LP tokens available": (string | string[])[]; - "{0} Votes": (string | string[])[]; - "{0} per {1}": (string | string[])[]; - "{0} tokens": (string | string[])[]; - "{0} {1} Price:": (string | string[])[]; - "{0} {nativeCurrencySymbol}": (string | string[])[]; - "{0} \u2022 Added by user": (string | string[])[]; - "{0}%": (string | string[])[]; - "{0}% fee tier": (string | string[])[]; - "{0}% pool": (string | string[])[]; - "{0}% select": (string | string[])[]; - "{0}-{1} Liquidity Mining": (string | string[])[]; - "{0}/{1} LP NFT": (string | string[])[]; - "{0}/{1} LP Tokens": (string | string[])[]; - "{SOCKS_AMOUNT} UNI": (string | string[])[]; - "{USER_AMOUNT} UNI": (string | string[])[]; - "{activeTokensOnThisChain} tokens": (string | string[])[]; - "{integrator} fee": (string | string[])[]; - "{label} token bridge": (string | string[])[]; - "{min}m {sec}s": (string | string[])[]; - "{percentForSlider}%": (string | string[])[]; - "{sec}s": string[][]; - "{tokenB} per {tokenA}": (string | string[])[]; - "\u2190 Back to Pools Overview": string; -}; diff --git a/dist2/types/locales/pseudo.d.ts b/dist2/types/locales/pseudo.d.ts deleted file mode 100644 index 79753c9213e..00000000000 --- a/dist2/types/locales/pseudo.d.ts +++ /dev/null @@ -1 +0,0 @@ -export const messages: {}; diff --git a/dist2/types/locales/pt-BR.d.ts b/dist2/types/locales/pt-BR.d.ts deleted file mode 100644 index 76cde7152f5..00000000000 --- a/dist2/types/locales/pt-BR.d.ts +++ /dev/null @@ -1,593 +0,0 @@ -export const messages: { - "$-": string; - "$<0/>": string; - "${0}": (string | string[])[]; - "(${0})": (string | string[])[]; - "(View on Explorer)": string; - "(clear all)": string; - "(edit)": string; - "- Remove recipient": string; - "0 UNI / week": string; - "25%": string; - "50%": string; - "75%": string; - "<0/> All Proposals": string; - "<0/> Votes": string; - "<0>Account analytics and accrued fees<1> \u2197 ": string; - "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; - "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; - "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; - "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; - "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; - "<0>Unlock voting to prepare for the next proposal.": string; - "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; - "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; - About: string; - Accept: string; - Account: string; - Active: string; - Add: string; - "Add <0/> and <1/> to Uniswap V2": string; - "Add Delegate +": string; - "Add Liquidity": string; - "Add V2 Liquidity": string; - "Add liquidity.": string; - "Add more liquidity": string; - "Add {0} to Metamask <0/>": (string | string[])[]; - "Add {0}-{1} liquidity": (string | string[])[]; - "Add {0}/{1} V3 liquidity": (string | string[])[]; - "Added {0}": (string | string[])[]; - "Address has no available claim": string; - Against: string; - "Allow LP token migration": string; - "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; - "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; - Allowed: string; - Amount: string; - "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Approval pending <0/>": string; - Approve: string; - "Approve Token": string; - "Approve {0}": (string | string[])[]; - "Approve {0} first": (string | string[])[]; - Approved: string; - Approving: string; - "Approving {0}": (string | string[])[]; - Arbiscan: string; - "Arbitrum Bridge": string; - "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Are you sure?": string; - "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; - "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; - Auto: string; - "Auto Router API": string; - "Available to deposit: {0}": (string | string[])[]; - "Balance: {0}": (string | string[])[]; - "Best for exotic pairs.": string; - "Best for most pairs.": string; - "Best for stable pairs.": string; - "Best for very stable pairs.": string; - "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; - "Blocked address": string; - Bridge: string; - "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; - "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; - Canceled: string; - Change: string; - Charts: string; - "Check network status": string; - "Check out our v3 LP walkthrough and migration guides.": string; - Claim: string; - "Claim <0/> for {0}": (string | string[])[]; - "Claim UNI": string; - "Claim UNI Token": string; - "Claim UNI reward for {0}": (string | string[])[]; - "Claim fees": string; - "Claim your UNI tokens": string; - Claimed: string; - "Claimed UNI!": string; - "Claimed!": string; - Claiming: string; - "Claiming UNI": (string | string[])[]; - "Claiming {0} UNI": (string | string[])[]; - "Clear All": string; - "Clear all": string; - Close: string; - Closed: string; - Collect: string; - "Collect as WETH": string; - "Collect fees": string; - "Collect {0}/{1} fees": (string | string[])[]; - Collected: string; - Collecting: string; - "Collecting fees": string; - "Collecting fees will withdraw currently available fees for you.": string; - Confirm: string; - "Confirm Supply": string; - "Confirm Swap": string; - "Confirm swap": string; - "Confirm this transaction in your wallet": string; - "Confirm transaction in wallet": string; - "Connect Wallet": string; - "Connect a wallet": string; - "Connect to a wallet to find pools": string; - "Connect to a wallet to view your V2 liquidity.": string; - "Connect to a wallet to view your liquidity.": string; - "Connect wallet to swap": string; - "Connected with {name}": (string | string[])[]; - Copied: string; - "Copy Address": string; - "Create Pool & Supply": string; - "Create Proposal": string; - "Create a pair": string; - "Create a pool": string; - "Create an issue on GitHub": string; - "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; - "Create pool.": string; - "Create {0}/{1} V3 pool": (string | string[])[]; - "Current price": string; - "Current {0} Price:": (string | string[])[]; - Custom: string; - "Dark Theme": string; - Defeated: string; - "Delegate Votes": string; - "Delegate voting power to {0}": (string | string[])[]; - "Delegated to:": string; - "Delegating votes": string; - Deposit: string; - "Deposit Amounts": string; - "Deposit UNI-V2 LP Tokens": string; - "Deposit liquidity": string; - "Deposit tokens to the {label} network.": (string | string[])[]; - "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; - "Deposited liquidity:": string; - "Deposited {0} UNI-V2": (string | string[])[]; - "Depositing Liquidity": string; - Description: string; - Detailed: string; - Details: string; - Disconnect: string; - Discord: string; - Dismiss: string; - Docs: string; - "Don\u2019t see one of your v2 positions? <0>Import it.": string; - "Earned UNI tokens represent voting shares in Uniswap governance.": string; - Edit: string; - "Efficiency Comparison": string; - "Enter a percent": string; - "Enter a recipient": string; - "Enter a valid slippage percentage": string; - "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; - "Enter an amount": string; - "Enter valid list location": string; - "Enter valid token address": string; - "Enter {0} amount": (string | string[])[]; - Error: string; - "Error connecting": string; - "Error connecting. Try refreshing the page.": string; - "Error details": string; - "Error importing list": string; - "Estimate may differ due to your wallet gas settings": string; - "Estimated network fee": string; - Etherscan: string; - Executed: string; - "Expanded results from inactive Token Lists": string; - "Expected Output": string; - "Expert Mode": string; - "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; - Expired: string; - "Explore Uniswap Analytics.": string; - "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; - "Fee Tier": string; - "Fee tier": string; - "Fetching best price...": string; - "Fetching best price\u2026": string; - For: string; - "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; - From: string; - "From (at most)": string; - "Full Range": string; - "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; - "Get support on Discord": string; - "Help Center": string; - Hide: string; - "Hide closed positions": string; - "High Price Impact": string; - "How this app uses APIs": string; - "I understand": string; - "If you purchase a token from this list, you may not be able to sell it back.": string; - Import: string; - "Import List": string; - "Import Pool": string; - "Import V2 Pool": string; - "Import at your own risk": string; - "In range": string; - "Increase Liquidity": string; - "Initial prices and pool share": string; - "Initializing...": string; - "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Install Metamask": string; - "Insufficient liquidity for this trade.": string; - "Insufficient {0}": (string | string[])[]; - "Insufficient {0} balance": (string | string[])[]; - "Interface Settings": string; - "Invalid pair": string; - "Invalid pair.": string; - "Invalid price input": string; - "Invalid range selected. The min price must be lower than the max price.": string; - "Invalid recipient": string; - Language: string; - Learn: string; - "Learn about providing liquidity": string; - "Learn more": string; - "Legal & Privacy": string; - "Light Theme": string; - Liquidity: string; - "Liquidity data not available.": string; - "Liquidity provider rewards": string; - "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - Lists: string; - Loaded: string; - Loading: string; - MAX: string; - Manage: string; - "Manage Liquidity in Rewards Pool": string; - "Manage Token Lists": string; - "Manage this pool.": string; - Max: string; - "Max Price": string; - "Max price": string; - "Max slippage": string; - "Max:": string; - "Maximum sent": string; - Menu: string; - Migrate: string; - "Migrate Liquidity to V3": string; - "Migrate V2 Liquidity": string; - "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; - "Migrate {0}/{1} liquidity to V3": (string | string[])[]; - Migrating: string; - "Min Price": string; - "Min price": string; - "Min:": string; - "Minimum received": string; - "Missing dependencies": string; - "Mock Toggle": string; - More: string; - "Network Fee": string; - "Network Warning": string; - "Network fees exceed 50% of the swap amount!": string; - "New Position": string; - "No V2 Liquidity found.": string; - "No active pools": string; - "No data": string; - "No description.": string; - "No liquidity found.": string; - "No pool found.": string; - "No proposals found.": string; - "No results found.": string; - "Not created": string; - OFF: string; - ON: string; - "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; - Off: string; - On: string; - "Once you are happy with the rate click supply to review.": string; - "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; - "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; - "Optimism Gateway": string; - "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Optimistic Etherscan": string; - "Out of range": string; - "Output is estimated.": string; - "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; - "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Output will be sent to <0>{0}": (string | string[])[]; - Owner: string; - "Participating pools": string; - Pending: string; - "Please confirm you would like to remove this list by typing REMOVE": string; - "Please connect to Layer 1 Ethereum": string; - "Please connect to a supported network in the dropdown menu or in your wallet.": string; - "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; - "Polygon Bridge": string; - Polygonscan: string; - Pool: string; - "Pool Found!": string; - "Pool Rate": string; - "Pool rate": string; - "Pool tokens in rewards pool:": string; - "Pooled {0}:": (string | string[])[]; - "Pools Overview": string; - Preview: string; - Price: string; - "Price Difference:": string; - "Price Impact": string; - "Price Impact Too High": string; - "Price Updated": string; - "Price impact": string; - "Price range": string; - "Price updated": string; - "Price:": string; - "Prices and pool share": string; - Proposal: string; - "Proposal Submitted": string; - "Proposal Title": string; - Proposals: string; - "Proposals submitted by community members will appear here.": string; - "Proposed Action": string; - Proposer: string; - "Protocol Disclaimer": string; - Queued: string; - Rates: string; - "Read more about UNI": string; - "Read more about Uniswap governance": string; - "Read more about providing liquidity": string; - "Read more about unsupported assets": string; - "Recent Transactions": string; - "Recent transactions": string; - Recipient: string; - "Reload the page": string; - Remove: string; - "Remove <0/> and <1/>": string; - "Remove Amount": string; - "Remove Delegate": string; - "Remove Liquidity": string; - "Remove list": string; - "Removing {0} {1} and {2} {3}": (string | string[])[]; - "Removing {0} {1} and{2} {3}": (string | string[])[]; - "Request Features": string; - Reset: string; - Return: string; - "Review swap": string; - "Search by token name or address": string; - "Search name or paste address": string; - "Select Pair": string; - "Select a network": string; - "Select a token": string; - "Select a token to find your v2 liquidity.": string; - "Select an action": string; - "Selected Range": string; - Self: string; - "Self Delegate": string; - "Set Price Range": string; - "Set Starting Price": string; - Settings: string; - "Share of Pool": string; - "Share of Pool:": string; - "Show Portis": string; - "Show closed positions": string; - Simple: string; - "Slippage tolerance": string; - "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; - "Something went wrong": string; - "Something went wrong.": string; - "Step 1. Get UNI-V2 Liquidity tokens": string; - "Submit new proposal": string; - "Submitting Proposal": string; - "Submitting Vote": string; - Succeeded: string; - Success: string; - Supply: string; - "Supplying {0} {1} and {2} {3}": (string | string[])[]; - Swap: string; - "Swap <0/> for exactly <1/>": string; - "Swap Anyway": string; - "Swap details": string; - "Swap exactly <0/> for <1/>": string; - "Swap failed: {0}": (string | string[])[]; - "Swap summary": string; - "Swapping {0} {1} for {2} {3}": (string | string[])[]; - "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; - "Tell us what you think \u2197": string; - "Thanks for being part of the Uniswap community <0/>": string; - "The % you will earn in fees.": string; - "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; - "The app fetches blockchain data from The Graph\u2019s hosted service.": string; - "The app fetches on-chain data and constructs contract calls with an Infura API.": string; - "The app fetches the optimal trade route from a Uniswap Labs server.": string; - "The app logs anonymized usage statistics in order to improve over time.": string; - "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; - "The cost of sending this transaction is more than half of the value of the input amount.": string; - "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; - "The estimated difference between the USD values of input and output amounts.": string; - "The input token cannot be transferred. There may be an issue with the input token.": string; - "The market price is outside your specified price range. Single-asset deposit only.": string; - "The most recent block number on this network. Prices update on every block.": string; - "The output token cannot be transferred. There may be an issue with the output token.": string; - "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; - "The price of this pool is within your selected range. Your position is currently earning fees.": string; - "The ratio of tokens you add will set the price of this pool.": string; - "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; - "There is no liquidity data.": string; - "This app uses the following third-party APIs:": string; - "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; - "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; - "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; - "This token is not supported in the Uniswap Labs app": string; - "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; - "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; - "Tip: Custom tokens are stored locally in your browser": string; - To: string; - "To (at least)": string; - "Token not supported": string; - Tokens: string; - "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; - "Top pools": string; - "Total deposited": string; - "Total deposits": string; - "Trade Route": string; - Trading: string; - "Transaction Settings": string; - "Transaction Submitted": string; - "Transaction completed in": string; - "Transaction deadline": string; - "Transaction pending": string; - "Transaction rejected.": string; - "Transaction submitted": string; - "Transfer Token": string; - "Try Again": string; - "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Turn On Expert Mode": string; - "UNI has arrived": string; - "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; - "UNI {0}/{1} Burned": (string | string[])[]; - "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; - "UNI-V2 {0}-{1}": (string | string[])[]; - "Unclaimed UNI": string; - "Unclaimed fees": string; - Undetermined: string; - "Unexpected error. Could not estimate gas for the swap.": string; - "Unexpected issue with estimating the gas. Please try again.": string; - "Uniswap Governance": string; - "Uniswap Labs' Terms of Service": string; - "Uniswap available in: <0>{0}": (string | string[])[]; - "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; - "Uniswap liquidity mining": string; - "Uniswap migration contract\u2197": string; - "Unknown Source": string; - "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; - "Unlock Votes": string; - "Unlock Voting": string; - "Unlocking Votes": string; - "Unsupported Asset": string; - "Unsupported Assets": string; - "Unsupported network\u2013switch to another to trade.": string; - Untitled: string; - Unwrap: string; - "Unwrap <0/> to {0}": (string | string[])[]; - "Update Delegation": string; - "Update list": string; - "Use the Uniswap Labs API to get faster quotes.": string; - User: string; - "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; - "V2 liquidity": string; - "V3 {0} Price:": (string | string[])[]; - "View accrued fees and analytics<0>\u2197": string; - "View list": string; - "View on Etherscan": string; - "View on Explorer": string; - "View transaction on Explorer": string; - Vote: string; - "Vote Against": string; - "Vote For": string; - "Vote against proposal {proposalId}": (string | string[])[]; - "Vote against proposal {proposalKey}": (string | string[])[]; - "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote for proposal {proposalId}": (string | string[])[]; - "Vote for proposal {proposalKey}": (string | string[])[]; - "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote to abstain on proposal {proposalId}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Voting ended {0}": (string | string[])[]; - "Voting ends approximately {0}": (string | string[])[]; - "Voting starts approximately {0}": (string | string[])[]; - "Waiting For Confirmation": string; - "Wallet Address or ENS name": string; - "Weekly Rewards": string; - "Welcome to team Unicorn :)": string; - "When you claim without withdrawing your liquidity remains in the mining pool.": string; - "When you withdraw, the contract will automagically claim UNI on your behalf!": string; - "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; - Withdraw: string; - "Withdraw & Claim": string; - "Withdraw deposited liquidity": string; - "Withdrawing {0} UNI-V2": (string | string[])[]; - "Withdrew UNI-V2!": string; - Wrap: string; - "Wrap <0/> to {0}": (string | string[])[]; - "Wrong Network": string; - "You already have an active or pending proposal": string; - "You are creating a pool": string; - "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; - "You are the first liquidity provider.": string; - "You can either vote on each proposal yourself or delegate your votes to a third party.": string; - "You can now trade {0}": (string | string[])[]; - "You don't have enough votes to submit a proposal": string; - "You don\u2019t have liquidity in this pool yet.": string; - "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; - "You may have lost your network connection.": string; - "You might consider waiting until the network fees go down to complete this transaction.": string; - "You must connect an account.": string; - "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; - "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; - "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; - "You will also collect fees earned from this position.": string; - "You will receive": string; - "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; - "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; - "Your V2 liquidity": string; - "Your active V3 liquidity positions will appear here.": string; - "Your liquidity deposits": string; - "Your pool share:": string; - "Your position": string; - "Your position has 0 liquidity, and is not earning fees.": string; - "Your position will appear here.": string; - "Your position will be 100% composed of {0} at this price": (string | string[])[]; - "Your position will be 100% {0} at this price.": (string | string[])[]; - "Your position will not earn fees or be used in trades until the market price moves into your range.": string; - "Your positions": string; - "Your rate": string; - "Your total pool tokens:": string; - "Your transaction cost will be much higher as it includes the gas to create the pool.": string; - "Your transaction may be frontrun": string; - "Your transaction may fail": string; - "Your transaction will revert if it has been pending for longer than this period of time.": string; - "Your transaction will revert if it is pending for more than this period of time.": string; - "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; - "Your transactions will appear here...": string; - "Your unclaimed UNI": string; - "after slippage": string; - confirm: string; - "for {0}": (string | string[])[]; - gwei: string; - "has socks emoji": string; - "here.": string; - "https:// or ipfs:// or ENS name": string; - minutes: string; - "via {0}": (string | string[])[]; - "via {0} token list": (string | string[])[]; - "{0, plural, one {Import token} other {Import tokens}}": (string | { - one: string; - other: string; - })[][]; - "{0}": string[][]; - "{0} %": (string | string[])[]; - "{0} <0/> per <1/>": (string | string[])[]; - "{0} Custom Tokens": (string | string[])[]; - "{0} Deposited": (string | string[])[]; - "{0} ETH": (string | string[])[]; - "{0} Fees Earned:": (string | string[])[]; - "{0} Pending": (string | string[])[]; - "{0} UNI": (string | string[])[]; - "{0} UNI / week": (string | string[])[]; - "{0} UNI-V2": (string | string[])[]; - "{0} UNI-V2 LP tokens available": (string | string[])[]; - "{0} Votes": (string | string[])[]; - "{0} per {1}": (string | string[])[]; - "{0} tokens": (string | string[])[]; - "{0} {1} Price:": (string | string[])[]; - "{0} {nativeCurrencySymbol}": (string | string[])[]; - "{0} \u2022 Added by user": (string | string[])[]; - "{0}%": (string | string[])[]; - "{0}% fee tier": (string | string[])[]; - "{0}% pool": (string | string[])[]; - "{0}% select": (string | string[])[]; - "{0}-{1} Liquidity Mining": (string | string[])[]; - "{0}/{1} LP NFT": (string | string[])[]; - "{0}/{1} LP Tokens": (string | string[])[]; - "{SOCKS_AMOUNT} UNI": (string | string[])[]; - "{USER_AMOUNT} UNI": (string | string[])[]; - "{activeTokensOnThisChain} tokens": (string | string[])[]; - "{integrator} fee": (string | string[])[]; - "{label} token bridge": (string | string[])[]; - "{min}m {sec}s": (string | string[])[]; - "{percentForSlider}%": (string | string[])[]; - "{sec}s": (string | string[])[]; - "{tokenB} per {tokenA}": (string | string[])[]; - "\u2190 Back to Pools Overview": string; -}; diff --git a/dist2/types/locales/pt-PT.d.ts b/dist2/types/locales/pt-PT.d.ts deleted file mode 100644 index 75120e0e5c9..00000000000 --- a/dist2/types/locales/pt-PT.d.ts +++ /dev/null @@ -1,593 +0,0 @@ -export const messages: { - "$-": string; - "$<0/>": string; - "${0}": (string | string[])[]; - "(${0})": (string | string[])[]; - "(View on Explorer)": string; - "(clear all)": string; - "(edit)": string; - "- Remove recipient": string; - "0 UNI / week": string; - "25%": string; - "50%": string; - "75%": string; - "<0/> All Proposals": string; - "<0/> Votes": string; - "<0>Account analytics and accrued fees<1> \u2197 ": string; - "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; - "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; - "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; - "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; - "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; - "<0>Unlock voting to prepare for the next proposal.": string; - "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; - "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; - About: string; - Accept: string; - Account: string; - Active: string; - Add: string; - "Add <0/> and <1/> to Uniswap V2": string; - "Add Delegate +": string; - "Add Liquidity": string; - "Add V2 Liquidity": string; - "Add liquidity.": string; - "Add more liquidity": string; - "Add {0} to Metamask <0/>": (string | string[])[]; - "Add {0}-{1} liquidity": (string | string[])[]; - "Add {0}/{1} V3 liquidity": (string | string[])[]; - "Added {0}": (string | string[])[]; - "Address has no available claim": string; - Against: string; - "Allow LP token migration": string; - "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; - "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; - Allowed: string; - Amount: string; - "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Approval pending <0/>": string; - Approve: string; - "Approve Token": string; - "Approve {0}": (string | string[])[]; - "Approve {0} first": (string | string[])[]; - Approved: string; - Approving: string; - "Approving {0}": (string | string[])[]; - Arbiscan: string; - "Arbitrum Bridge": string; - "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Are you sure?": string; - "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; - "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; - Auto: string; - "Auto Router API": string; - "Available to deposit: {0}": (string | string[])[]; - "Balance: {0}": (string | string[])[]; - "Best for exotic pairs.": string; - "Best for most pairs.": string; - "Best for stable pairs.": string; - "Best for very stable pairs.": string; - "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; - "Blocked address": string; - Bridge: string; - "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; - "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; - Canceled: string; - Change: string; - Charts: string; - "Check network status": string; - "Check out our v3 LP walkthrough and migration guides.": string; - Claim: string; - "Claim <0/> for {0}": (string | string[])[]; - "Claim UNI": string; - "Claim UNI Token": string; - "Claim UNI reward for {0}": (string | string[])[]; - "Claim fees": string; - "Claim your UNI tokens": string; - Claimed: string; - "Claimed UNI!": string; - "Claimed!": string; - Claiming: string; - "Claiming UNI": string; - "Claiming {0} UNI": (string | string[])[]; - "Clear All": string; - "Clear all": string; - Close: string; - Closed: string; - Collect: string; - "Collect as WETH": string; - "Collect fees": string; - "Collect {0}/{1} fees": (string | string[])[]; - Collected: string; - Collecting: string; - "Collecting fees": string; - "Collecting fees will withdraw currently available fees for you.": string; - Confirm: string; - "Confirm Supply": string; - "Confirm Swap": string; - "Confirm swap": string; - "Confirm this transaction in your wallet": string; - "Confirm transaction in wallet": string; - "Connect Wallet": string; - "Connect a wallet": string; - "Connect to a wallet to find pools": string; - "Connect to a wallet to view your V2 liquidity.": string; - "Connect to a wallet to view your liquidity.": string; - "Connect wallet to swap": string; - "Connected with {name}": (string | string[])[]; - Copied: string; - "Copy Address": string; - "Create Pool & Supply": string; - "Create Proposal": string; - "Create a pair": string; - "Create a pool": string; - "Create an issue on GitHub": string; - "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; - "Create pool.": string; - "Create {0}/{1} V3 pool": (string | string[])[]; - "Current price": string; - "Current {0} Price:": (string | string[])[]; - Custom: string; - "Dark Theme": string; - Defeated: string; - "Delegate Votes": string; - "Delegate voting power to {0}": (string | string[])[]; - "Delegated to:": string; - "Delegating votes": string; - Deposit: string; - "Deposit Amounts": string; - "Deposit UNI-V2 LP Tokens": string; - "Deposit liquidity": string; - "Deposit tokens to the {label} network.": (string | string[])[]; - "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; - "Deposited liquidity:": string; - "Deposited {0} UNI-V2": (string | string[])[]; - "Depositing Liquidity": string; - Description: string; - Detailed: string; - Details: string; - Disconnect: string; - Discord: string; - Dismiss: string; - Docs: string; - "Don\u2019t see one of your v2 positions? <0>Import it.": string; - "Earned UNI tokens represent voting shares in Uniswap governance.": string; - Edit: string; - "Efficiency Comparison": string; - "Enter a percent": string; - "Enter a recipient": string; - "Enter a valid slippage percentage": string; - "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; - "Enter an amount": string; - "Enter valid list location": string; - "Enter valid token address": string; - "Enter {0} amount": (string | string[])[]; - Error: string; - "Error connecting": string; - "Error connecting. Try refreshing the page.": string; - "Error details": string; - "Error importing list": string; - "Estimate may differ due to your wallet gas settings": string; - "Estimated network fee": string; - Etherscan: string; - Executed: string; - "Expanded results from inactive Token Lists": string; - "Expected Output": string; - "Expert Mode": string; - "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; - Expired: string; - "Explore Uniswap Analytics.": string; - "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; - "Fee Tier": string; - "Fee tier": string; - "Fetching best price...": string; - "Fetching best price\u2026": string; - For: string; - "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; - From: string; - "From (at most)": string; - "Full Range": string; - "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; - "Get support on Discord": string; - "Help Center": string; - Hide: string; - "Hide closed positions": string; - "High Price Impact": string; - "How this app uses APIs": string; - "I understand": string; - "If you purchase a token from this list, you may not be able to sell it back.": string; - Import: string; - "Import List": string; - "Import Pool": string; - "Import V2 Pool": string; - "Import at your own risk": string; - "In range": string; - "Increase Liquidity": string; - "Initial prices and pool share": string; - "Initializing...": string; - "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Install Metamask": string; - "Insufficient liquidity for this trade.": string; - "Insufficient {0}": (string | string[])[]; - "Insufficient {0} balance": (string | string[])[]; - "Interface Settings": string; - "Invalid pair": string; - "Invalid pair.": string; - "Invalid price input": string; - "Invalid range selected. The min price must be lower than the max price.": string; - "Invalid recipient": string; - Language: string; - Learn: string; - "Learn about providing liquidity": string; - "Learn more": string; - "Legal & Privacy": string; - "Light Theme": string; - Liquidity: string; - "Liquidity data not available.": string; - "Liquidity provider rewards": string; - "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - Lists: string; - Loaded: string; - Loading: string; - MAX: string; - Manage: string; - "Manage Liquidity in Rewards Pool": string; - "Manage Token Lists": string; - "Manage this pool.": string; - Max: string; - "Max Price": string; - "Max price": string; - "Max slippage": string; - "Max:": string; - "Maximum sent": string; - Menu: string; - Migrate: string; - "Migrate Liquidity to V3": string; - "Migrate V2 Liquidity": string; - "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; - "Migrate {0}/{1} liquidity to V3": (string | string[])[]; - Migrating: string; - "Min Price": string; - "Min price": string; - "Min:": string; - "Minimum received": string; - "Missing dependencies": string; - "Mock Toggle": string; - More: string; - "Network Fee": string; - "Network Warning": string; - "Network fees exceed 50% of the swap amount!": string; - "New Position": string; - "No V2 Liquidity found.": string; - "No active pools": string; - "No data": string; - "No description.": string; - "No liquidity found.": string; - "No pool found.": string; - "No proposals found.": string; - "No results found.": string; - "Not created": string; - OFF: string; - ON: string; - "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; - Off: string; - On: string; - "Once you are happy with the rate click supply to review.": string; - "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; - "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; - "Optimism Gateway": string; - "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Optimistic Etherscan": string; - "Out of range": string; - "Output is estimated.": string; - "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; - "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Output will be sent to <0>{0}": (string | string[])[]; - Owner: string; - "Participating pools": string; - Pending: string; - "Please confirm you would like to remove this list by typing REMOVE": string; - "Please connect to Layer 1 Ethereum": string; - "Please connect to a supported network in the dropdown menu or in your wallet.": string; - "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; - "Polygon Bridge": string; - Polygonscan: string; - Pool: string; - "Pool Found!": string; - "Pool Rate": string; - "Pool rate": string; - "Pool tokens in rewards pool:": string; - "Pooled {0}:": (string | string[])[]; - "Pools Overview": string; - Preview: string; - Price: string; - "Price Difference:": string; - "Price Impact": string; - "Price Impact Too High": string; - "Price Updated": string; - "Price impact": string; - "Price range": string; - "Price updated": string; - "Price:": string; - "Prices and pool share": string; - Proposal: string; - "Proposal Submitted": string; - "Proposal Title": string; - Proposals: string; - "Proposals submitted by community members will appear here.": string; - "Proposed Action": string; - Proposer: string; - "Protocol Disclaimer": string; - Queued: string; - Rates: string; - "Read more about UNI": string; - "Read more about Uniswap governance": string; - "Read more about providing liquidity": string; - "Read more about unsupported assets": string; - "Recent Transactions": string; - "Recent transactions": string; - Recipient: string; - "Reload the page": string; - Remove: string; - "Remove <0/> and <1/>": string; - "Remove Amount": string; - "Remove Delegate": string; - "Remove Liquidity": string; - "Remove list": string; - "Removing {0} {1} and {2} {3}": (string | string[])[]; - "Removing {0} {1} and{2} {3}": (string | string[])[]; - "Request Features": string; - Reset: string; - Return: string; - "Review swap": string; - "Search by token name or address": string; - "Search name or paste address": string; - "Select Pair": string; - "Select a network": string; - "Select a token": string; - "Select a token to find your v2 liquidity.": string; - "Select an action": string; - "Selected Range": string; - Self: string; - "Self Delegate": string; - "Set Price Range": string; - "Set Starting Price": string; - Settings: string; - "Share of Pool": string; - "Share of Pool:": string; - "Show Portis": string; - "Show closed positions": string; - Simple: string; - "Slippage tolerance": string; - "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; - "Something went wrong": string; - "Something went wrong.": string; - "Step 1. Get UNI-V2 Liquidity tokens": string; - "Submit new proposal": string; - "Submitting Proposal": string; - "Submitting Vote": string; - Succeeded: string; - Success: string; - Supply: string; - "Supplying {0} {1} and {2} {3}": (string | string[])[]; - Swap: string; - "Swap <0/> for exactly <1/>": string; - "Swap Anyway": string; - "Swap details": string; - "Swap exactly <0/> for <1/>": string; - "Swap failed: {0}": (string | string[])[]; - "Swap summary": string; - "Swapping {0} {1} for {2} {3}": (string | string[])[]; - "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; - "Tell us what you think \u2197": string; - "Thanks for being part of the Uniswap community <0/>": string; - "The % you will earn in fees.": string; - "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; - "The app fetches blockchain data from The Graph\u2019s hosted service.": string; - "The app fetches on-chain data and constructs contract calls with an Infura API.": string; - "The app fetches the optimal trade route from a Uniswap Labs server.": string; - "The app logs anonymized usage statistics in order to improve over time.": string; - "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; - "The cost of sending this transaction is more than half of the value of the input amount.": string; - "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; - "The estimated difference between the USD values of input and output amounts.": string; - "The input token cannot be transferred. There may be an issue with the input token.": string; - "The market price is outside your specified price range. Single-asset deposit only.": string; - "The most recent block number on this network. Prices update on every block.": string; - "The output token cannot be transferred. There may be an issue with the output token.": string; - "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; - "The price of this pool is within your selected range. Your position is currently earning fees.": string; - "The ratio of tokens you add will set the price of this pool.": string; - "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; - "There is no liquidity data.": string; - "This app uses the following third-party APIs:": string; - "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; - "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; - "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; - "This token is not supported in the Uniswap Labs app": string; - "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; - "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; - "Tip: Custom tokens are stored locally in your browser": string; - To: string; - "To (at least)": string; - "Token not supported": string; - Tokens: string; - "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; - "Top pools": string; - "Total deposited": string; - "Total deposits": string; - "Trade Route": string; - Trading: string; - "Transaction Settings": string; - "Transaction Submitted": string; - "Transaction completed in": string; - "Transaction deadline": string; - "Transaction pending": string; - "Transaction rejected.": string; - "Transaction submitted": string; - "Transfer Token": string; - "Try Again": string; - "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Turn On Expert Mode": string; - "UNI has arrived": string; - "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; - "UNI {0}/{1} Burned": (string | string[])[]; - "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; - "UNI-V2 {0}-{1}": (string | string[])[]; - "Unclaimed UNI": string; - "Unclaimed fees": string; - Undetermined: string; - "Unexpected error. Could not estimate gas for the swap.": string; - "Unexpected issue with estimating the gas. Please try again.": string; - "Uniswap Governance": string; - "Uniswap Labs' Terms of Service": string; - "Uniswap available in: <0>{0}": (string | string[])[]; - "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; - "Uniswap liquidity mining": string; - "Uniswap migration contract\u2197": string; - "Unknown Source": string; - "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; - "Unlock Votes": string; - "Unlock Voting": string; - "Unlocking Votes": string; - "Unsupported Asset": string; - "Unsupported Assets": string; - "Unsupported network\u2013switch to another to trade.": string; - Untitled: string; - Unwrap: string; - "Unwrap <0/> to {0}": (string | string[])[]; - "Update Delegation": string; - "Update list": string; - "Use the Uniswap Labs API to get faster quotes.": string; - User: string; - "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; - "V2 liquidity": string; - "V3 {0} Price:": (string | string[])[]; - "View accrued fees and analytics<0>\u2197": string; - "View list": string; - "View on Etherscan": string; - "View on Explorer": string; - "View transaction on Explorer": string; - Vote: string; - "Vote Against": string; - "Vote For": string; - "Vote against proposal {proposalId}": (string | string[])[]; - "Vote against proposal {proposalKey}": (string | string[])[]; - "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote for proposal {proposalId}": (string | string[])[]; - "Vote for proposal {proposalKey}": (string | string[])[]; - "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote to abstain on proposal {proposalId}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Voting ended {0}": (string | string[])[]; - "Voting ends approximately {0}": (string | string[])[]; - "Voting starts approximately {0}": (string | string[])[]; - "Waiting For Confirmation": string; - "Wallet Address or ENS name": string; - "Weekly Rewards": string; - "Welcome to team Unicorn :)": string; - "When you claim without withdrawing your liquidity remains in the mining pool.": string; - "When you withdraw, the contract will automagically claim UNI on your behalf!": string; - "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; - Withdraw: string; - "Withdraw & Claim": string; - "Withdraw deposited liquidity": string; - "Withdrawing {0} UNI-V2": (string | string[])[]; - "Withdrew UNI-V2!": string; - Wrap: string; - "Wrap <0/> to {0}": (string | string[])[]; - "Wrong Network": string; - "You already have an active or pending proposal": string; - "You are creating a pool": string; - "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; - "You are the first liquidity provider.": string; - "You can either vote on each proposal yourself or delegate your votes to a third party.": string; - "You can now trade {0}": (string | string[])[]; - "You don't have enough votes to submit a proposal": string; - "You don\u2019t have liquidity in this pool yet.": string; - "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; - "You may have lost your network connection.": string; - "You might consider waiting until the network fees go down to complete this transaction.": string; - "You must connect an account.": string; - "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; - "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; - "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; - "You will also collect fees earned from this position.": string; - "You will receive": string; - "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; - "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; - "Your V2 liquidity": string; - "Your active V3 liquidity positions will appear here.": string; - "Your liquidity deposits": string; - "Your pool share:": string; - "Your position": string; - "Your position has 0 liquidity, and is not earning fees.": string; - "Your position will appear here.": string; - "Your position will be 100% composed of {0} at this price": (string | string[])[]; - "Your position will be 100% {0} at this price.": (string | string[])[]; - "Your position will not earn fees or be used in trades until the market price moves into your range.": string; - "Your positions": string; - "Your rate": string; - "Your total pool tokens:": string; - "Your transaction cost will be much higher as it includes the gas to create the pool.": string; - "Your transaction may be frontrun": string; - "Your transaction may fail": string; - "Your transaction will revert if it has been pending for longer than this period of time.": string; - "Your transaction will revert if it is pending for more than this period of time.": string; - "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; - "Your transactions will appear here...": string; - "Your unclaimed UNI": string; - "after slippage": string; - confirm: string; - "for {0}": (string | string[])[]; - gwei: string; - "has socks emoji": string; - "here.": string; - "https:// or ipfs:// or ENS name": string; - minutes: string; - "via {0}": (string | string[])[]; - "via {0} token list": (string | string[])[]; - "{0, plural, one {Import token} other {Import tokens}}": (string | { - one: string; - other: string; - })[][]; - "{0}": string[][]; - "{0} %": (string | string[])[]; - "{0} <0/> per <1/>": (string | string[])[]; - "{0} Custom Tokens": (string | string[])[]; - "{0} Deposited": (string | string[])[]; - "{0} ETH": (string | string[])[]; - "{0} Fees Earned:": (string | string[])[]; - "{0} Pending": (string | string[])[]; - "{0} UNI": (string | string[])[]; - "{0} UNI / week": (string | string[])[]; - "{0} UNI-V2": (string | string[])[]; - "{0} UNI-V2 LP tokens available": (string | string[])[]; - "{0} Votes": (string | string[])[]; - "{0} per {1}": (string | string[])[]; - "{0} tokens": (string | string[])[]; - "{0} {1} Price:": (string | string[])[]; - "{0} {nativeCurrencySymbol}": (string | string[])[]; - "{0} \u2022 Added by user": (string | string[])[]; - "{0}%": (string | string[])[]; - "{0}% fee tier": (string | string[])[]; - "{0}% pool": (string | string[])[]; - "{0}% select": (string | string[])[]; - "{0}-{1} Liquidity Mining": (string | string[])[]; - "{0}/{1} LP NFT": (string | string[])[]; - "{0}/{1} LP Tokens": (string | string[])[]; - "{SOCKS_AMOUNT} UNI": (string | string[])[]; - "{USER_AMOUNT} UNI": (string | string[])[]; - "{activeTokensOnThisChain} tokens": (string | string[])[]; - "{integrator} fee": (string | string[])[]; - "{label} token bridge": (string | string[])[]; - "{min}m {sec}s": (string | string[])[]; - "{percentForSlider}%": (string | string[])[]; - "{sec}s": (string | string[])[]; - "{tokenB} per {tokenA}": (string | string[])[]; - "\u2190 Back to Pools Overview": string; -}; diff --git a/dist2/types/locales/ro-RO.d.ts b/dist2/types/locales/ro-RO.d.ts deleted file mode 100644 index 75120e0e5c9..00000000000 --- a/dist2/types/locales/ro-RO.d.ts +++ /dev/null @@ -1,593 +0,0 @@ -export const messages: { - "$-": string; - "$<0/>": string; - "${0}": (string | string[])[]; - "(${0})": (string | string[])[]; - "(View on Explorer)": string; - "(clear all)": string; - "(edit)": string; - "- Remove recipient": string; - "0 UNI / week": string; - "25%": string; - "50%": string; - "75%": string; - "<0/> All Proposals": string; - "<0/> Votes": string; - "<0>Account analytics and accrued fees<1> \u2197 ": string; - "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; - "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; - "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; - "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; - "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; - "<0>Unlock voting to prepare for the next proposal.": string; - "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; - "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; - About: string; - Accept: string; - Account: string; - Active: string; - Add: string; - "Add <0/> and <1/> to Uniswap V2": string; - "Add Delegate +": string; - "Add Liquidity": string; - "Add V2 Liquidity": string; - "Add liquidity.": string; - "Add more liquidity": string; - "Add {0} to Metamask <0/>": (string | string[])[]; - "Add {0}-{1} liquidity": (string | string[])[]; - "Add {0}/{1} V3 liquidity": (string | string[])[]; - "Added {0}": (string | string[])[]; - "Address has no available claim": string; - Against: string; - "Allow LP token migration": string; - "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; - "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; - Allowed: string; - Amount: string; - "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Approval pending <0/>": string; - Approve: string; - "Approve Token": string; - "Approve {0}": (string | string[])[]; - "Approve {0} first": (string | string[])[]; - Approved: string; - Approving: string; - "Approving {0}": (string | string[])[]; - Arbiscan: string; - "Arbitrum Bridge": string; - "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Are you sure?": string; - "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; - "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; - Auto: string; - "Auto Router API": string; - "Available to deposit: {0}": (string | string[])[]; - "Balance: {0}": (string | string[])[]; - "Best for exotic pairs.": string; - "Best for most pairs.": string; - "Best for stable pairs.": string; - "Best for very stable pairs.": string; - "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; - "Blocked address": string; - Bridge: string; - "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; - "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; - Canceled: string; - Change: string; - Charts: string; - "Check network status": string; - "Check out our v3 LP walkthrough and migration guides.": string; - Claim: string; - "Claim <0/> for {0}": (string | string[])[]; - "Claim UNI": string; - "Claim UNI Token": string; - "Claim UNI reward for {0}": (string | string[])[]; - "Claim fees": string; - "Claim your UNI tokens": string; - Claimed: string; - "Claimed UNI!": string; - "Claimed!": string; - Claiming: string; - "Claiming UNI": string; - "Claiming {0} UNI": (string | string[])[]; - "Clear All": string; - "Clear all": string; - Close: string; - Closed: string; - Collect: string; - "Collect as WETH": string; - "Collect fees": string; - "Collect {0}/{1} fees": (string | string[])[]; - Collected: string; - Collecting: string; - "Collecting fees": string; - "Collecting fees will withdraw currently available fees for you.": string; - Confirm: string; - "Confirm Supply": string; - "Confirm Swap": string; - "Confirm swap": string; - "Confirm this transaction in your wallet": string; - "Confirm transaction in wallet": string; - "Connect Wallet": string; - "Connect a wallet": string; - "Connect to a wallet to find pools": string; - "Connect to a wallet to view your V2 liquidity.": string; - "Connect to a wallet to view your liquidity.": string; - "Connect wallet to swap": string; - "Connected with {name}": (string | string[])[]; - Copied: string; - "Copy Address": string; - "Create Pool & Supply": string; - "Create Proposal": string; - "Create a pair": string; - "Create a pool": string; - "Create an issue on GitHub": string; - "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; - "Create pool.": string; - "Create {0}/{1} V3 pool": (string | string[])[]; - "Current price": string; - "Current {0} Price:": (string | string[])[]; - Custom: string; - "Dark Theme": string; - Defeated: string; - "Delegate Votes": string; - "Delegate voting power to {0}": (string | string[])[]; - "Delegated to:": string; - "Delegating votes": string; - Deposit: string; - "Deposit Amounts": string; - "Deposit UNI-V2 LP Tokens": string; - "Deposit liquidity": string; - "Deposit tokens to the {label} network.": (string | string[])[]; - "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; - "Deposited liquidity:": string; - "Deposited {0} UNI-V2": (string | string[])[]; - "Depositing Liquidity": string; - Description: string; - Detailed: string; - Details: string; - Disconnect: string; - Discord: string; - Dismiss: string; - Docs: string; - "Don\u2019t see one of your v2 positions? <0>Import it.": string; - "Earned UNI tokens represent voting shares in Uniswap governance.": string; - Edit: string; - "Efficiency Comparison": string; - "Enter a percent": string; - "Enter a recipient": string; - "Enter a valid slippage percentage": string; - "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; - "Enter an amount": string; - "Enter valid list location": string; - "Enter valid token address": string; - "Enter {0} amount": (string | string[])[]; - Error: string; - "Error connecting": string; - "Error connecting. Try refreshing the page.": string; - "Error details": string; - "Error importing list": string; - "Estimate may differ due to your wallet gas settings": string; - "Estimated network fee": string; - Etherscan: string; - Executed: string; - "Expanded results from inactive Token Lists": string; - "Expected Output": string; - "Expert Mode": string; - "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; - Expired: string; - "Explore Uniswap Analytics.": string; - "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; - "Fee Tier": string; - "Fee tier": string; - "Fetching best price...": string; - "Fetching best price\u2026": string; - For: string; - "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; - From: string; - "From (at most)": string; - "Full Range": string; - "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; - "Get support on Discord": string; - "Help Center": string; - Hide: string; - "Hide closed positions": string; - "High Price Impact": string; - "How this app uses APIs": string; - "I understand": string; - "If you purchase a token from this list, you may not be able to sell it back.": string; - Import: string; - "Import List": string; - "Import Pool": string; - "Import V2 Pool": string; - "Import at your own risk": string; - "In range": string; - "Increase Liquidity": string; - "Initial prices and pool share": string; - "Initializing...": string; - "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Install Metamask": string; - "Insufficient liquidity for this trade.": string; - "Insufficient {0}": (string | string[])[]; - "Insufficient {0} balance": (string | string[])[]; - "Interface Settings": string; - "Invalid pair": string; - "Invalid pair.": string; - "Invalid price input": string; - "Invalid range selected. The min price must be lower than the max price.": string; - "Invalid recipient": string; - Language: string; - Learn: string; - "Learn about providing liquidity": string; - "Learn more": string; - "Legal & Privacy": string; - "Light Theme": string; - Liquidity: string; - "Liquidity data not available.": string; - "Liquidity provider rewards": string; - "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - Lists: string; - Loaded: string; - Loading: string; - MAX: string; - Manage: string; - "Manage Liquidity in Rewards Pool": string; - "Manage Token Lists": string; - "Manage this pool.": string; - Max: string; - "Max Price": string; - "Max price": string; - "Max slippage": string; - "Max:": string; - "Maximum sent": string; - Menu: string; - Migrate: string; - "Migrate Liquidity to V3": string; - "Migrate V2 Liquidity": string; - "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; - "Migrate {0}/{1} liquidity to V3": (string | string[])[]; - Migrating: string; - "Min Price": string; - "Min price": string; - "Min:": string; - "Minimum received": string; - "Missing dependencies": string; - "Mock Toggle": string; - More: string; - "Network Fee": string; - "Network Warning": string; - "Network fees exceed 50% of the swap amount!": string; - "New Position": string; - "No V2 Liquidity found.": string; - "No active pools": string; - "No data": string; - "No description.": string; - "No liquidity found.": string; - "No pool found.": string; - "No proposals found.": string; - "No results found.": string; - "Not created": string; - OFF: string; - ON: string; - "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; - Off: string; - On: string; - "Once you are happy with the rate click supply to review.": string; - "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; - "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; - "Optimism Gateway": string; - "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Optimistic Etherscan": string; - "Out of range": string; - "Output is estimated.": string; - "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; - "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Output will be sent to <0>{0}": (string | string[])[]; - Owner: string; - "Participating pools": string; - Pending: string; - "Please confirm you would like to remove this list by typing REMOVE": string; - "Please connect to Layer 1 Ethereum": string; - "Please connect to a supported network in the dropdown menu or in your wallet.": string; - "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; - "Polygon Bridge": string; - Polygonscan: string; - Pool: string; - "Pool Found!": string; - "Pool Rate": string; - "Pool rate": string; - "Pool tokens in rewards pool:": string; - "Pooled {0}:": (string | string[])[]; - "Pools Overview": string; - Preview: string; - Price: string; - "Price Difference:": string; - "Price Impact": string; - "Price Impact Too High": string; - "Price Updated": string; - "Price impact": string; - "Price range": string; - "Price updated": string; - "Price:": string; - "Prices and pool share": string; - Proposal: string; - "Proposal Submitted": string; - "Proposal Title": string; - Proposals: string; - "Proposals submitted by community members will appear here.": string; - "Proposed Action": string; - Proposer: string; - "Protocol Disclaimer": string; - Queued: string; - Rates: string; - "Read more about UNI": string; - "Read more about Uniswap governance": string; - "Read more about providing liquidity": string; - "Read more about unsupported assets": string; - "Recent Transactions": string; - "Recent transactions": string; - Recipient: string; - "Reload the page": string; - Remove: string; - "Remove <0/> and <1/>": string; - "Remove Amount": string; - "Remove Delegate": string; - "Remove Liquidity": string; - "Remove list": string; - "Removing {0} {1} and {2} {3}": (string | string[])[]; - "Removing {0} {1} and{2} {3}": (string | string[])[]; - "Request Features": string; - Reset: string; - Return: string; - "Review swap": string; - "Search by token name or address": string; - "Search name or paste address": string; - "Select Pair": string; - "Select a network": string; - "Select a token": string; - "Select a token to find your v2 liquidity.": string; - "Select an action": string; - "Selected Range": string; - Self: string; - "Self Delegate": string; - "Set Price Range": string; - "Set Starting Price": string; - Settings: string; - "Share of Pool": string; - "Share of Pool:": string; - "Show Portis": string; - "Show closed positions": string; - Simple: string; - "Slippage tolerance": string; - "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; - "Something went wrong": string; - "Something went wrong.": string; - "Step 1. Get UNI-V2 Liquidity tokens": string; - "Submit new proposal": string; - "Submitting Proposal": string; - "Submitting Vote": string; - Succeeded: string; - Success: string; - Supply: string; - "Supplying {0} {1} and {2} {3}": (string | string[])[]; - Swap: string; - "Swap <0/> for exactly <1/>": string; - "Swap Anyway": string; - "Swap details": string; - "Swap exactly <0/> for <1/>": string; - "Swap failed: {0}": (string | string[])[]; - "Swap summary": string; - "Swapping {0} {1} for {2} {3}": (string | string[])[]; - "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; - "Tell us what you think \u2197": string; - "Thanks for being part of the Uniswap community <0/>": string; - "The % you will earn in fees.": string; - "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; - "The app fetches blockchain data from The Graph\u2019s hosted service.": string; - "The app fetches on-chain data and constructs contract calls with an Infura API.": string; - "The app fetches the optimal trade route from a Uniswap Labs server.": string; - "The app logs anonymized usage statistics in order to improve over time.": string; - "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; - "The cost of sending this transaction is more than half of the value of the input amount.": string; - "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; - "The estimated difference between the USD values of input and output amounts.": string; - "The input token cannot be transferred. There may be an issue with the input token.": string; - "The market price is outside your specified price range. Single-asset deposit only.": string; - "The most recent block number on this network. Prices update on every block.": string; - "The output token cannot be transferred. There may be an issue with the output token.": string; - "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; - "The price of this pool is within your selected range. Your position is currently earning fees.": string; - "The ratio of tokens you add will set the price of this pool.": string; - "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; - "There is no liquidity data.": string; - "This app uses the following third-party APIs:": string; - "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; - "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; - "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; - "This token is not supported in the Uniswap Labs app": string; - "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; - "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; - "Tip: Custom tokens are stored locally in your browser": string; - To: string; - "To (at least)": string; - "Token not supported": string; - Tokens: string; - "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; - "Top pools": string; - "Total deposited": string; - "Total deposits": string; - "Trade Route": string; - Trading: string; - "Transaction Settings": string; - "Transaction Submitted": string; - "Transaction completed in": string; - "Transaction deadline": string; - "Transaction pending": string; - "Transaction rejected.": string; - "Transaction submitted": string; - "Transfer Token": string; - "Try Again": string; - "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Turn On Expert Mode": string; - "UNI has arrived": string; - "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; - "UNI {0}/{1} Burned": (string | string[])[]; - "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; - "UNI-V2 {0}-{1}": (string | string[])[]; - "Unclaimed UNI": string; - "Unclaimed fees": string; - Undetermined: string; - "Unexpected error. Could not estimate gas for the swap.": string; - "Unexpected issue with estimating the gas. Please try again.": string; - "Uniswap Governance": string; - "Uniswap Labs' Terms of Service": string; - "Uniswap available in: <0>{0}": (string | string[])[]; - "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; - "Uniswap liquidity mining": string; - "Uniswap migration contract\u2197": string; - "Unknown Source": string; - "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; - "Unlock Votes": string; - "Unlock Voting": string; - "Unlocking Votes": string; - "Unsupported Asset": string; - "Unsupported Assets": string; - "Unsupported network\u2013switch to another to trade.": string; - Untitled: string; - Unwrap: string; - "Unwrap <0/> to {0}": (string | string[])[]; - "Update Delegation": string; - "Update list": string; - "Use the Uniswap Labs API to get faster quotes.": string; - User: string; - "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; - "V2 liquidity": string; - "V3 {0} Price:": (string | string[])[]; - "View accrued fees and analytics<0>\u2197": string; - "View list": string; - "View on Etherscan": string; - "View on Explorer": string; - "View transaction on Explorer": string; - Vote: string; - "Vote Against": string; - "Vote For": string; - "Vote against proposal {proposalId}": (string | string[])[]; - "Vote against proposal {proposalKey}": (string | string[])[]; - "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote for proposal {proposalId}": (string | string[])[]; - "Vote for proposal {proposalKey}": (string | string[])[]; - "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote to abstain on proposal {proposalId}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Voting ended {0}": (string | string[])[]; - "Voting ends approximately {0}": (string | string[])[]; - "Voting starts approximately {0}": (string | string[])[]; - "Waiting For Confirmation": string; - "Wallet Address or ENS name": string; - "Weekly Rewards": string; - "Welcome to team Unicorn :)": string; - "When you claim without withdrawing your liquidity remains in the mining pool.": string; - "When you withdraw, the contract will automagically claim UNI on your behalf!": string; - "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; - Withdraw: string; - "Withdraw & Claim": string; - "Withdraw deposited liquidity": string; - "Withdrawing {0} UNI-V2": (string | string[])[]; - "Withdrew UNI-V2!": string; - Wrap: string; - "Wrap <0/> to {0}": (string | string[])[]; - "Wrong Network": string; - "You already have an active or pending proposal": string; - "You are creating a pool": string; - "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; - "You are the first liquidity provider.": string; - "You can either vote on each proposal yourself or delegate your votes to a third party.": string; - "You can now trade {0}": (string | string[])[]; - "You don't have enough votes to submit a proposal": string; - "You don\u2019t have liquidity in this pool yet.": string; - "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; - "You may have lost your network connection.": string; - "You might consider waiting until the network fees go down to complete this transaction.": string; - "You must connect an account.": string; - "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; - "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; - "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; - "You will also collect fees earned from this position.": string; - "You will receive": string; - "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; - "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; - "Your V2 liquidity": string; - "Your active V3 liquidity positions will appear here.": string; - "Your liquidity deposits": string; - "Your pool share:": string; - "Your position": string; - "Your position has 0 liquidity, and is not earning fees.": string; - "Your position will appear here.": string; - "Your position will be 100% composed of {0} at this price": (string | string[])[]; - "Your position will be 100% {0} at this price.": (string | string[])[]; - "Your position will not earn fees or be used in trades until the market price moves into your range.": string; - "Your positions": string; - "Your rate": string; - "Your total pool tokens:": string; - "Your transaction cost will be much higher as it includes the gas to create the pool.": string; - "Your transaction may be frontrun": string; - "Your transaction may fail": string; - "Your transaction will revert if it has been pending for longer than this period of time.": string; - "Your transaction will revert if it is pending for more than this period of time.": string; - "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; - "Your transactions will appear here...": string; - "Your unclaimed UNI": string; - "after slippage": string; - confirm: string; - "for {0}": (string | string[])[]; - gwei: string; - "has socks emoji": string; - "here.": string; - "https:// or ipfs:// or ENS name": string; - minutes: string; - "via {0}": (string | string[])[]; - "via {0} token list": (string | string[])[]; - "{0, plural, one {Import token} other {Import tokens}}": (string | { - one: string; - other: string; - })[][]; - "{0}": string[][]; - "{0} %": (string | string[])[]; - "{0} <0/> per <1/>": (string | string[])[]; - "{0} Custom Tokens": (string | string[])[]; - "{0} Deposited": (string | string[])[]; - "{0} ETH": (string | string[])[]; - "{0} Fees Earned:": (string | string[])[]; - "{0} Pending": (string | string[])[]; - "{0} UNI": (string | string[])[]; - "{0} UNI / week": (string | string[])[]; - "{0} UNI-V2": (string | string[])[]; - "{0} UNI-V2 LP tokens available": (string | string[])[]; - "{0} Votes": (string | string[])[]; - "{0} per {1}": (string | string[])[]; - "{0} tokens": (string | string[])[]; - "{0} {1} Price:": (string | string[])[]; - "{0} {nativeCurrencySymbol}": (string | string[])[]; - "{0} \u2022 Added by user": (string | string[])[]; - "{0}%": (string | string[])[]; - "{0}% fee tier": (string | string[])[]; - "{0}% pool": (string | string[])[]; - "{0}% select": (string | string[])[]; - "{0}-{1} Liquidity Mining": (string | string[])[]; - "{0}/{1} LP NFT": (string | string[])[]; - "{0}/{1} LP Tokens": (string | string[])[]; - "{SOCKS_AMOUNT} UNI": (string | string[])[]; - "{USER_AMOUNT} UNI": (string | string[])[]; - "{activeTokensOnThisChain} tokens": (string | string[])[]; - "{integrator} fee": (string | string[])[]; - "{label} token bridge": (string | string[])[]; - "{min}m {sec}s": (string | string[])[]; - "{percentForSlider}%": (string | string[])[]; - "{sec}s": (string | string[])[]; - "{tokenB} per {tokenA}": (string | string[])[]; - "\u2190 Back to Pools Overview": string; -}; diff --git a/dist2/types/locales/ru-RU.d.ts b/dist2/types/locales/ru-RU.d.ts deleted file mode 100644 index 75120e0e5c9..00000000000 --- a/dist2/types/locales/ru-RU.d.ts +++ /dev/null @@ -1,593 +0,0 @@ -export const messages: { - "$-": string; - "$<0/>": string; - "${0}": (string | string[])[]; - "(${0})": (string | string[])[]; - "(View on Explorer)": string; - "(clear all)": string; - "(edit)": string; - "- Remove recipient": string; - "0 UNI / week": string; - "25%": string; - "50%": string; - "75%": string; - "<0/> All Proposals": string; - "<0/> Votes": string; - "<0>Account analytics and accrued fees<1> \u2197 ": string; - "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; - "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; - "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; - "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; - "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; - "<0>Unlock voting to prepare for the next proposal.": string; - "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; - "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; - About: string; - Accept: string; - Account: string; - Active: string; - Add: string; - "Add <0/> and <1/> to Uniswap V2": string; - "Add Delegate +": string; - "Add Liquidity": string; - "Add V2 Liquidity": string; - "Add liquidity.": string; - "Add more liquidity": string; - "Add {0} to Metamask <0/>": (string | string[])[]; - "Add {0}-{1} liquidity": (string | string[])[]; - "Add {0}/{1} V3 liquidity": (string | string[])[]; - "Added {0}": (string | string[])[]; - "Address has no available claim": string; - Against: string; - "Allow LP token migration": string; - "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; - "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; - Allowed: string; - Amount: string; - "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Approval pending <0/>": string; - Approve: string; - "Approve Token": string; - "Approve {0}": (string | string[])[]; - "Approve {0} first": (string | string[])[]; - Approved: string; - Approving: string; - "Approving {0}": (string | string[])[]; - Arbiscan: string; - "Arbitrum Bridge": string; - "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Are you sure?": string; - "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; - "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; - Auto: string; - "Auto Router API": string; - "Available to deposit: {0}": (string | string[])[]; - "Balance: {0}": (string | string[])[]; - "Best for exotic pairs.": string; - "Best for most pairs.": string; - "Best for stable pairs.": string; - "Best for very stable pairs.": string; - "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; - "Blocked address": string; - Bridge: string; - "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; - "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; - Canceled: string; - Change: string; - Charts: string; - "Check network status": string; - "Check out our v3 LP walkthrough and migration guides.": string; - Claim: string; - "Claim <0/> for {0}": (string | string[])[]; - "Claim UNI": string; - "Claim UNI Token": string; - "Claim UNI reward for {0}": (string | string[])[]; - "Claim fees": string; - "Claim your UNI tokens": string; - Claimed: string; - "Claimed UNI!": string; - "Claimed!": string; - Claiming: string; - "Claiming UNI": string; - "Claiming {0} UNI": (string | string[])[]; - "Clear All": string; - "Clear all": string; - Close: string; - Closed: string; - Collect: string; - "Collect as WETH": string; - "Collect fees": string; - "Collect {0}/{1} fees": (string | string[])[]; - Collected: string; - Collecting: string; - "Collecting fees": string; - "Collecting fees will withdraw currently available fees for you.": string; - Confirm: string; - "Confirm Supply": string; - "Confirm Swap": string; - "Confirm swap": string; - "Confirm this transaction in your wallet": string; - "Confirm transaction in wallet": string; - "Connect Wallet": string; - "Connect a wallet": string; - "Connect to a wallet to find pools": string; - "Connect to a wallet to view your V2 liquidity.": string; - "Connect to a wallet to view your liquidity.": string; - "Connect wallet to swap": string; - "Connected with {name}": (string | string[])[]; - Copied: string; - "Copy Address": string; - "Create Pool & Supply": string; - "Create Proposal": string; - "Create a pair": string; - "Create a pool": string; - "Create an issue on GitHub": string; - "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; - "Create pool.": string; - "Create {0}/{1} V3 pool": (string | string[])[]; - "Current price": string; - "Current {0} Price:": (string | string[])[]; - Custom: string; - "Dark Theme": string; - Defeated: string; - "Delegate Votes": string; - "Delegate voting power to {0}": (string | string[])[]; - "Delegated to:": string; - "Delegating votes": string; - Deposit: string; - "Deposit Amounts": string; - "Deposit UNI-V2 LP Tokens": string; - "Deposit liquidity": string; - "Deposit tokens to the {label} network.": (string | string[])[]; - "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; - "Deposited liquidity:": string; - "Deposited {0} UNI-V2": (string | string[])[]; - "Depositing Liquidity": string; - Description: string; - Detailed: string; - Details: string; - Disconnect: string; - Discord: string; - Dismiss: string; - Docs: string; - "Don\u2019t see one of your v2 positions? <0>Import it.": string; - "Earned UNI tokens represent voting shares in Uniswap governance.": string; - Edit: string; - "Efficiency Comparison": string; - "Enter a percent": string; - "Enter a recipient": string; - "Enter a valid slippage percentage": string; - "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; - "Enter an amount": string; - "Enter valid list location": string; - "Enter valid token address": string; - "Enter {0} amount": (string | string[])[]; - Error: string; - "Error connecting": string; - "Error connecting. Try refreshing the page.": string; - "Error details": string; - "Error importing list": string; - "Estimate may differ due to your wallet gas settings": string; - "Estimated network fee": string; - Etherscan: string; - Executed: string; - "Expanded results from inactive Token Lists": string; - "Expected Output": string; - "Expert Mode": string; - "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; - Expired: string; - "Explore Uniswap Analytics.": string; - "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; - "Fee Tier": string; - "Fee tier": string; - "Fetching best price...": string; - "Fetching best price\u2026": string; - For: string; - "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; - From: string; - "From (at most)": string; - "Full Range": string; - "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; - "Get support on Discord": string; - "Help Center": string; - Hide: string; - "Hide closed positions": string; - "High Price Impact": string; - "How this app uses APIs": string; - "I understand": string; - "If you purchase a token from this list, you may not be able to sell it back.": string; - Import: string; - "Import List": string; - "Import Pool": string; - "Import V2 Pool": string; - "Import at your own risk": string; - "In range": string; - "Increase Liquidity": string; - "Initial prices and pool share": string; - "Initializing...": string; - "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Install Metamask": string; - "Insufficient liquidity for this trade.": string; - "Insufficient {0}": (string | string[])[]; - "Insufficient {0} balance": (string | string[])[]; - "Interface Settings": string; - "Invalid pair": string; - "Invalid pair.": string; - "Invalid price input": string; - "Invalid range selected. The min price must be lower than the max price.": string; - "Invalid recipient": string; - Language: string; - Learn: string; - "Learn about providing liquidity": string; - "Learn more": string; - "Legal & Privacy": string; - "Light Theme": string; - Liquidity: string; - "Liquidity data not available.": string; - "Liquidity provider rewards": string; - "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - Lists: string; - Loaded: string; - Loading: string; - MAX: string; - Manage: string; - "Manage Liquidity in Rewards Pool": string; - "Manage Token Lists": string; - "Manage this pool.": string; - Max: string; - "Max Price": string; - "Max price": string; - "Max slippage": string; - "Max:": string; - "Maximum sent": string; - Menu: string; - Migrate: string; - "Migrate Liquidity to V3": string; - "Migrate V2 Liquidity": string; - "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; - "Migrate {0}/{1} liquidity to V3": (string | string[])[]; - Migrating: string; - "Min Price": string; - "Min price": string; - "Min:": string; - "Minimum received": string; - "Missing dependencies": string; - "Mock Toggle": string; - More: string; - "Network Fee": string; - "Network Warning": string; - "Network fees exceed 50% of the swap amount!": string; - "New Position": string; - "No V2 Liquidity found.": string; - "No active pools": string; - "No data": string; - "No description.": string; - "No liquidity found.": string; - "No pool found.": string; - "No proposals found.": string; - "No results found.": string; - "Not created": string; - OFF: string; - ON: string; - "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; - Off: string; - On: string; - "Once you are happy with the rate click supply to review.": string; - "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; - "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; - "Optimism Gateway": string; - "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Optimistic Etherscan": string; - "Out of range": string; - "Output is estimated.": string; - "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; - "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Output will be sent to <0>{0}": (string | string[])[]; - Owner: string; - "Participating pools": string; - Pending: string; - "Please confirm you would like to remove this list by typing REMOVE": string; - "Please connect to Layer 1 Ethereum": string; - "Please connect to a supported network in the dropdown menu or in your wallet.": string; - "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; - "Polygon Bridge": string; - Polygonscan: string; - Pool: string; - "Pool Found!": string; - "Pool Rate": string; - "Pool rate": string; - "Pool tokens in rewards pool:": string; - "Pooled {0}:": (string | string[])[]; - "Pools Overview": string; - Preview: string; - Price: string; - "Price Difference:": string; - "Price Impact": string; - "Price Impact Too High": string; - "Price Updated": string; - "Price impact": string; - "Price range": string; - "Price updated": string; - "Price:": string; - "Prices and pool share": string; - Proposal: string; - "Proposal Submitted": string; - "Proposal Title": string; - Proposals: string; - "Proposals submitted by community members will appear here.": string; - "Proposed Action": string; - Proposer: string; - "Protocol Disclaimer": string; - Queued: string; - Rates: string; - "Read more about UNI": string; - "Read more about Uniswap governance": string; - "Read more about providing liquidity": string; - "Read more about unsupported assets": string; - "Recent Transactions": string; - "Recent transactions": string; - Recipient: string; - "Reload the page": string; - Remove: string; - "Remove <0/> and <1/>": string; - "Remove Amount": string; - "Remove Delegate": string; - "Remove Liquidity": string; - "Remove list": string; - "Removing {0} {1} and {2} {3}": (string | string[])[]; - "Removing {0} {1} and{2} {3}": (string | string[])[]; - "Request Features": string; - Reset: string; - Return: string; - "Review swap": string; - "Search by token name or address": string; - "Search name or paste address": string; - "Select Pair": string; - "Select a network": string; - "Select a token": string; - "Select a token to find your v2 liquidity.": string; - "Select an action": string; - "Selected Range": string; - Self: string; - "Self Delegate": string; - "Set Price Range": string; - "Set Starting Price": string; - Settings: string; - "Share of Pool": string; - "Share of Pool:": string; - "Show Portis": string; - "Show closed positions": string; - Simple: string; - "Slippage tolerance": string; - "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; - "Something went wrong": string; - "Something went wrong.": string; - "Step 1. Get UNI-V2 Liquidity tokens": string; - "Submit new proposal": string; - "Submitting Proposal": string; - "Submitting Vote": string; - Succeeded: string; - Success: string; - Supply: string; - "Supplying {0} {1} and {2} {3}": (string | string[])[]; - Swap: string; - "Swap <0/> for exactly <1/>": string; - "Swap Anyway": string; - "Swap details": string; - "Swap exactly <0/> for <1/>": string; - "Swap failed: {0}": (string | string[])[]; - "Swap summary": string; - "Swapping {0} {1} for {2} {3}": (string | string[])[]; - "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; - "Tell us what you think \u2197": string; - "Thanks for being part of the Uniswap community <0/>": string; - "The % you will earn in fees.": string; - "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; - "The app fetches blockchain data from The Graph\u2019s hosted service.": string; - "The app fetches on-chain data and constructs contract calls with an Infura API.": string; - "The app fetches the optimal trade route from a Uniswap Labs server.": string; - "The app logs anonymized usage statistics in order to improve over time.": string; - "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; - "The cost of sending this transaction is more than half of the value of the input amount.": string; - "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; - "The estimated difference between the USD values of input and output amounts.": string; - "The input token cannot be transferred. There may be an issue with the input token.": string; - "The market price is outside your specified price range. Single-asset deposit only.": string; - "The most recent block number on this network. Prices update on every block.": string; - "The output token cannot be transferred. There may be an issue with the output token.": string; - "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; - "The price of this pool is within your selected range. Your position is currently earning fees.": string; - "The ratio of tokens you add will set the price of this pool.": string; - "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; - "There is no liquidity data.": string; - "This app uses the following third-party APIs:": string; - "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; - "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; - "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; - "This token is not supported in the Uniswap Labs app": string; - "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; - "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; - "Tip: Custom tokens are stored locally in your browser": string; - To: string; - "To (at least)": string; - "Token not supported": string; - Tokens: string; - "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; - "Top pools": string; - "Total deposited": string; - "Total deposits": string; - "Trade Route": string; - Trading: string; - "Transaction Settings": string; - "Transaction Submitted": string; - "Transaction completed in": string; - "Transaction deadline": string; - "Transaction pending": string; - "Transaction rejected.": string; - "Transaction submitted": string; - "Transfer Token": string; - "Try Again": string; - "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Turn On Expert Mode": string; - "UNI has arrived": string; - "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; - "UNI {0}/{1} Burned": (string | string[])[]; - "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; - "UNI-V2 {0}-{1}": (string | string[])[]; - "Unclaimed UNI": string; - "Unclaimed fees": string; - Undetermined: string; - "Unexpected error. Could not estimate gas for the swap.": string; - "Unexpected issue with estimating the gas. Please try again.": string; - "Uniswap Governance": string; - "Uniswap Labs' Terms of Service": string; - "Uniswap available in: <0>{0}": (string | string[])[]; - "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; - "Uniswap liquidity mining": string; - "Uniswap migration contract\u2197": string; - "Unknown Source": string; - "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; - "Unlock Votes": string; - "Unlock Voting": string; - "Unlocking Votes": string; - "Unsupported Asset": string; - "Unsupported Assets": string; - "Unsupported network\u2013switch to another to trade.": string; - Untitled: string; - Unwrap: string; - "Unwrap <0/> to {0}": (string | string[])[]; - "Update Delegation": string; - "Update list": string; - "Use the Uniswap Labs API to get faster quotes.": string; - User: string; - "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; - "V2 liquidity": string; - "V3 {0} Price:": (string | string[])[]; - "View accrued fees and analytics<0>\u2197": string; - "View list": string; - "View on Etherscan": string; - "View on Explorer": string; - "View transaction on Explorer": string; - Vote: string; - "Vote Against": string; - "Vote For": string; - "Vote against proposal {proposalId}": (string | string[])[]; - "Vote against proposal {proposalKey}": (string | string[])[]; - "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote for proposal {proposalId}": (string | string[])[]; - "Vote for proposal {proposalKey}": (string | string[])[]; - "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote to abstain on proposal {proposalId}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Voting ended {0}": (string | string[])[]; - "Voting ends approximately {0}": (string | string[])[]; - "Voting starts approximately {0}": (string | string[])[]; - "Waiting For Confirmation": string; - "Wallet Address or ENS name": string; - "Weekly Rewards": string; - "Welcome to team Unicorn :)": string; - "When you claim without withdrawing your liquidity remains in the mining pool.": string; - "When you withdraw, the contract will automagically claim UNI on your behalf!": string; - "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; - Withdraw: string; - "Withdraw & Claim": string; - "Withdraw deposited liquidity": string; - "Withdrawing {0} UNI-V2": (string | string[])[]; - "Withdrew UNI-V2!": string; - Wrap: string; - "Wrap <0/> to {0}": (string | string[])[]; - "Wrong Network": string; - "You already have an active or pending proposal": string; - "You are creating a pool": string; - "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; - "You are the first liquidity provider.": string; - "You can either vote on each proposal yourself or delegate your votes to a third party.": string; - "You can now trade {0}": (string | string[])[]; - "You don't have enough votes to submit a proposal": string; - "You don\u2019t have liquidity in this pool yet.": string; - "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; - "You may have lost your network connection.": string; - "You might consider waiting until the network fees go down to complete this transaction.": string; - "You must connect an account.": string; - "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; - "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; - "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; - "You will also collect fees earned from this position.": string; - "You will receive": string; - "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; - "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; - "Your V2 liquidity": string; - "Your active V3 liquidity positions will appear here.": string; - "Your liquidity deposits": string; - "Your pool share:": string; - "Your position": string; - "Your position has 0 liquidity, and is not earning fees.": string; - "Your position will appear here.": string; - "Your position will be 100% composed of {0} at this price": (string | string[])[]; - "Your position will be 100% {0} at this price.": (string | string[])[]; - "Your position will not earn fees or be used in trades until the market price moves into your range.": string; - "Your positions": string; - "Your rate": string; - "Your total pool tokens:": string; - "Your transaction cost will be much higher as it includes the gas to create the pool.": string; - "Your transaction may be frontrun": string; - "Your transaction may fail": string; - "Your transaction will revert if it has been pending for longer than this period of time.": string; - "Your transaction will revert if it is pending for more than this period of time.": string; - "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; - "Your transactions will appear here...": string; - "Your unclaimed UNI": string; - "after slippage": string; - confirm: string; - "for {0}": (string | string[])[]; - gwei: string; - "has socks emoji": string; - "here.": string; - "https:// or ipfs:// or ENS name": string; - minutes: string; - "via {0}": (string | string[])[]; - "via {0} token list": (string | string[])[]; - "{0, plural, one {Import token} other {Import tokens}}": (string | { - one: string; - other: string; - })[][]; - "{0}": string[][]; - "{0} %": (string | string[])[]; - "{0} <0/> per <1/>": (string | string[])[]; - "{0} Custom Tokens": (string | string[])[]; - "{0} Deposited": (string | string[])[]; - "{0} ETH": (string | string[])[]; - "{0} Fees Earned:": (string | string[])[]; - "{0} Pending": (string | string[])[]; - "{0} UNI": (string | string[])[]; - "{0} UNI / week": (string | string[])[]; - "{0} UNI-V2": (string | string[])[]; - "{0} UNI-V2 LP tokens available": (string | string[])[]; - "{0} Votes": (string | string[])[]; - "{0} per {1}": (string | string[])[]; - "{0} tokens": (string | string[])[]; - "{0} {1} Price:": (string | string[])[]; - "{0} {nativeCurrencySymbol}": (string | string[])[]; - "{0} \u2022 Added by user": (string | string[])[]; - "{0}%": (string | string[])[]; - "{0}% fee tier": (string | string[])[]; - "{0}% pool": (string | string[])[]; - "{0}% select": (string | string[])[]; - "{0}-{1} Liquidity Mining": (string | string[])[]; - "{0}/{1} LP NFT": (string | string[])[]; - "{0}/{1} LP Tokens": (string | string[])[]; - "{SOCKS_AMOUNT} UNI": (string | string[])[]; - "{USER_AMOUNT} UNI": (string | string[])[]; - "{activeTokensOnThisChain} tokens": (string | string[])[]; - "{integrator} fee": (string | string[])[]; - "{label} token bridge": (string | string[])[]; - "{min}m {sec}s": (string | string[])[]; - "{percentForSlider}%": (string | string[])[]; - "{sec}s": (string | string[])[]; - "{tokenB} per {tokenA}": (string | string[])[]; - "\u2190 Back to Pools Overview": string; -}; diff --git a/dist2/types/locales/sr-SP.d.ts b/dist2/types/locales/sr-SP.d.ts deleted file mode 100644 index 75120e0e5c9..00000000000 --- a/dist2/types/locales/sr-SP.d.ts +++ /dev/null @@ -1,593 +0,0 @@ -export const messages: { - "$-": string; - "$<0/>": string; - "${0}": (string | string[])[]; - "(${0})": (string | string[])[]; - "(View on Explorer)": string; - "(clear all)": string; - "(edit)": string; - "- Remove recipient": string; - "0 UNI / week": string; - "25%": string; - "50%": string; - "75%": string; - "<0/> All Proposals": string; - "<0/> Votes": string; - "<0>Account analytics and accrued fees<1> \u2197 ": string; - "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; - "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; - "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; - "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; - "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; - "<0>Unlock voting to prepare for the next proposal.": string; - "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; - "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; - About: string; - Accept: string; - Account: string; - Active: string; - Add: string; - "Add <0/> and <1/> to Uniswap V2": string; - "Add Delegate +": string; - "Add Liquidity": string; - "Add V2 Liquidity": string; - "Add liquidity.": string; - "Add more liquidity": string; - "Add {0} to Metamask <0/>": (string | string[])[]; - "Add {0}-{1} liquidity": (string | string[])[]; - "Add {0}/{1} V3 liquidity": (string | string[])[]; - "Added {0}": (string | string[])[]; - "Address has no available claim": string; - Against: string; - "Allow LP token migration": string; - "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; - "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; - Allowed: string; - Amount: string; - "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Approval pending <0/>": string; - Approve: string; - "Approve Token": string; - "Approve {0}": (string | string[])[]; - "Approve {0} first": (string | string[])[]; - Approved: string; - Approving: string; - "Approving {0}": (string | string[])[]; - Arbiscan: string; - "Arbitrum Bridge": string; - "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Are you sure?": string; - "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; - "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; - Auto: string; - "Auto Router API": string; - "Available to deposit: {0}": (string | string[])[]; - "Balance: {0}": (string | string[])[]; - "Best for exotic pairs.": string; - "Best for most pairs.": string; - "Best for stable pairs.": string; - "Best for very stable pairs.": string; - "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; - "Blocked address": string; - Bridge: string; - "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; - "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; - Canceled: string; - Change: string; - Charts: string; - "Check network status": string; - "Check out our v3 LP walkthrough and migration guides.": string; - Claim: string; - "Claim <0/> for {0}": (string | string[])[]; - "Claim UNI": string; - "Claim UNI Token": string; - "Claim UNI reward for {0}": (string | string[])[]; - "Claim fees": string; - "Claim your UNI tokens": string; - Claimed: string; - "Claimed UNI!": string; - "Claimed!": string; - Claiming: string; - "Claiming UNI": string; - "Claiming {0} UNI": (string | string[])[]; - "Clear All": string; - "Clear all": string; - Close: string; - Closed: string; - Collect: string; - "Collect as WETH": string; - "Collect fees": string; - "Collect {0}/{1} fees": (string | string[])[]; - Collected: string; - Collecting: string; - "Collecting fees": string; - "Collecting fees will withdraw currently available fees for you.": string; - Confirm: string; - "Confirm Supply": string; - "Confirm Swap": string; - "Confirm swap": string; - "Confirm this transaction in your wallet": string; - "Confirm transaction in wallet": string; - "Connect Wallet": string; - "Connect a wallet": string; - "Connect to a wallet to find pools": string; - "Connect to a wallet to view your V2 liquidity.": string; - "Connect to a wallet to view your liquidity.": string; - "Connect wallet to swap": string; - "Connected with {name}": (string | string[])[]; - Copied: string; - "Copy Address": string; - "Create Pool & Supply": string; - "Create Proposal": string; - "Create a pair": string; - "Create a pool": string; - "Create an issue on GitHub": string; - "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; - "Create pool.": string; - "Create {0}/{1} V3 pool": (string | string[])[]; - "Current price": string; - "Current {0} Price:": (string | string[])[]; - Custom: string; - "Dark Theme": string; - Defeated: string; - "Delegate Votes": string; - "Delegate voting power to {0}": (string | string[])[]; - "Delegated to:": string; - "Delegating votes": string; - Deposit: string; - "Deposit Amounts": string; - "Deposit UNI-V2 LP Tokens": string; - "Deposit liquidity": string; - "Deposit tokens to the {label} network.": (string | string[])[]; - "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; - "Deposited liquidity:": string; - "Deposited {0} UNI-V2": (string | string[])[]; - "Depositing Liquidity": string; - Description: string; - Detailed: string; - Details: string; - Disconnect: string; - Discord: string; - Dismiss: string; - Docs: string; - "Don\u2019t see one of your v2 positions? <0>Import it.": string; - "Earned UNI tokens represent voting shares in Uniswap governance.": string; - Edit: string; - "Efficiency Comparison": string; - "Enter a percent": string; - "Enter a recipient": string; - "Enter a valid slippage percentage": string; - "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; - "Enter an amount": string; - "Enter valid list location": string; - "Enter valid token address": string; - "Enter {0} amount": (string | string[])[]; - Error: string; - "Error connecting": string; - "Error connecting. Try refreshing the page.": string; - "Error details": string; - "Error importing list": string; - "Estimate may differ due to your wallet gas settings": string; - "Estimated network fee": string; - Etherscan: string; - Executed: string; - "Expanded results from inactive Token Lists": string; - "Expected Output": string; - "Expert Mode": string; - "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; - Expired: string; - "Explore Uniswap Analytics.": string; - "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; - "Fee Tier": string; - "Fee tier": string; - "Fetching best price...": string; - "Fetching best price\u2026": string; - For: string; - "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; - From: string; - "From (at most)": string; - "Full Range": string; - "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; - "Get support on Discord": string; - "Help Center": string; - Hide: string; - "Hide closed positions": string; - "High Price Impact": string; - "How this app uses APIs": string; - "I understand": string; - "If you purchase a token from this list, you may not be able to sell it back.": string; - Import: string; - "Import List": string; - "Import Pool": string; - "Import V2 Pool": string; - "Import at your own risk": string; - "In range": string; - "Increase Liquidity": string; - "Initial prices and pool share": string; - "Initializing...": string; - "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Install Metamask": string; - "Insufficient liquidity for this trade.": string; - "Insufficient {0}": (string | string[])[]; - "Insufficient {0} balance": (string | string[])[]; - "Interface Settings": string; - "Invalid pair": string; - "Invalid pair.": string; - "Invalid price input": string; - "Invalid range selected. The min price must be lower than the max price.": string; - "Invalid recipient": string; - Language: string; - Learn: string; - "Learn about providing liquidity": string; - "Learn more": string; - "Legal & Privacy": string; - "Light Theme": string; - Liquidity: string; - "Liquidity data not available.": string; - "Liquidity provider rewards": string; - "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - Lists: string; - Loaded: string; - Loading: string; - MAX: string; - Manage: string; - "Manage Liquidity in Rewards Pool": string; - "Manage Token Lists": string; - "Manage this pool.": string; - Max: string; - "Max Price": string; - "Max price": string; - "Max slippage": string; - "Max:": string; - "Maximum sent": string; - Menu: string; - Migrate: string; - "Migrate Liquidity to V3": string; - "Migrate V2 Liquidity": string; - "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; - "Migrate {0}/{1} liquidity to V3": (string | string[])[]; - Migrating: string; - "Min Price": string; - "Min price": string; - "Min:": string; - "Minimum received": string; - "Missing dependencies": string; - "Mock Toggle": string; - More: string; - "Network Fee": string; - "Network Warning": string; - "Network fees exceed 50% of the swap amount!": string; - "New Position": string; - "No V2 Liquidity found.": string; - "No active pools": string; - "No data": string; - "No description.": string; - "No liquidity found.": string; - "No pool found.": string; - "No proposals found.": string; - "No results found.": string; - "Not created": string; - OFF: string; - ON: string; - "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; - Off: string; - On: string; - "Once you are happy with the rate click supply to review.": string; - "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; - "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; - "Optimism Gateway": string; - "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Optimistic Etherscan": string; - "Out of range": string; - "Output is estimated.": string; - "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; - "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Output will be sent to <0>{0}": (string | string[])[]; - Owner: string; - "Participating pools": string; - Pending: string; - "Please confirm you would like to remove this list by typing REMOVE": string; - "Please connect to Layer 1 Ethereum": string; - "Please connect to a supported network in the dropdown menu or in your wallet.": string; - "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; - "Polygon Bridge": string; - Polygonscan: string; - Pool: string; - "Pool Found!": string; - "Pool Rate": string; - "Pool rate": string; - "Pool tokens in rewards pool:": string; - "Pooled {0}:": (string | string[])[]; - "Pools Overview": string; - Preview: string; - Price: string; - "Price Difference:": string; - "Price Impact": string; - "Price Impact Too High": string; - "Price Updated": string; - "Price impact": string; - "Price range": string; - "Price updated": string; - "Price:": string; - "Prices and pool share": string; - Proposal: string; - "Proposal Submitted": string; - "Proposal Title": string; - Proposals: string; - "Proposals submitted by community members will appear here.": string; - "Proposed Action": string; - Proposer: string; - "Protocol Disclaimer": string; - Queued: string; - Rates: string; - "Read more about UNI": string; - "Read more about Uniswap governance": string; - "Read more about providing liquidity": string; - "Read more about unsupported assets": string; - "Recent Transactions": string; - "Recent transactions": string; - Recipient: string; - "Reload the page": string; - Remove: string; - "Remove <0/> and <1/>": string; - "Remove Amount": string; - "Remove Delegate": string; - "Remove Liquidity": string; - "Remove list": string; - "Removing {0} {1} and {2} {3}": (string | string[])[]; - "Removing {0} {1} and{2} {3}": (string | string[])[]; - "Request Features": string; - Reset: string; - Return: string; - "Review swap": string; - "Search by token name or address": string; - "Search name or paste address": string; - "Select Pair": string; - "Select a network": string; - "Select a token": string; - "Select a token to find your v2 liquidity.": string; - "Select an action": string; - "Selected Range": string; - Self: string; - "Self Delegate": string; - "Set Price Range": string; - "Set Starting Price": string; - Settings: string; - "Share of Pool": string; - "Share of Pool:": string; - "Show Portis": string; - "Show closed positions": string; - Simple: string; - "Slippage tolerance": string; - "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; - "Something went wrong": string; - "Something went wrong.": string; - "Step 1. Get UNI-V2 Liquidity tokens": string; - "Submit new proposal": string; - "Submitting Proposal": string; - "Submitting Vote": string; - Succeeded: string; - Success: string; - Supply: string; - "Supplying {0} {1} and {2} {3}": (string | string[])[]; - Swap: string; - "Swap <0/> for exactly <1/>": string; - "Swap Anyway": string; - "Swap details": string; - "Swap exactly <0/> for <1/>": string; - "Swap failed: {0}": (string | string[])[]; - "Swap summary": string; - "Swapping {0} {1} for {2} {3}": (string | string[])[]; - "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; - "Tell us what you think \u2197": string; - "Thanks for being part of the Uniswap community <0/>": string; - "The % you will earn in fees.": string; - "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; - "The app fetches blockchain data from The Graph\u2019s hosted service.": string; - "The app fetches on-chain data and constructs contract calls with an Infura API.": string; - "The app fetches the optimal trade route from a Uniswap Labs server.": string; - "The app logs anonymized usage statistics in order to improve over time.": string; - "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; - "The cost of sending this transaction is more than half of the value of the input amount.": string; - "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; - "The estimated difference between the USD values of input and output amounts.": string; - "The input token cannot be transferred. There may be an issue with the input token.": string; - "The market price is outside your specified price range. Single-asset deposit only.": string; - "The most recent block number on this network. Prices update on every block.": string; - "The output token cannot be transferred. There may be an issue with the output token.": string; - "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; - "The price of this pool is within your selected range. Your position is currently earning fees.": string; - "The ratio of tokens you add will set the price of this pool.": string; - "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; - "There is no liquidity data.": string; - "This app uses the following third-party APIs:": string; - "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; - "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; - "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; - "This token is not supported in the Uniswap Labs app": string; - "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; - "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; - "Tip: Custom tokens are stored locally in your browser": string; - To: string; - "To (at least)": string; - "Token not supported": string; - Tokens: string; - "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; - "Top pools": string; - "Total deposited": string; - "Total deposits": string; - "Trade Route": string; - Trading: string; - "Transaction Settings": string; - "Transaction Submitted": string; - "Transaction completed in": string; - "Transaction deadline": string; - "Transaction pending": string; - "Transaction rejected.": string; - "Transaction submitted": string; - "Transfer Token": string; - "Try Again": string; - "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Turn On Expert Mode": string; - "UNI has arrived": string; - "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; - "UNI {0}/{1} Burned": (string | string[])[]; - "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; - "UNI-V2 {0}-{1}": (string | string[])[]; - "Unclaimed UNI": string; - "Unclaimed fees": string; - Undetermined: string; - "Unexpected error. Could not estimate gas for the swap.": string; - "Unexpected issue with estimating the gas. Please try again.": string; - "Uniswap Governance": string; - "Uniswap Labs' Terms of Service": string; - "Uniswap available in: <0>{0}": (string | string[])[]; - "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; - "Uniswap liquidity mining": string; - "Uniswap migration contract\u2197": string; - "Unknown Source": string; - "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; - "Unlock Votes": string; - "Unlock Voting": string; - "Unlocking Votes": string; - "Unsupported Asset": string; - "Unsupported Assets": string; - "Unsupported network\u2013switch to another to trade.": string; - Untitled: string; - Unwrap: string; - "Unwrap <0/> to {0}": (string | string[])[]; - "Update Delegation": string; - "Update list": string; - "Use the Uniswap Labs API to get faster quotes.": string; - User: string; - "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; - "V2 liquidity": string; - "V3 {0} Price:": (string | string[])[]; - "View accrued fees and analytics<0>\u2197": string; - "View list": string; - "View on Etherscan": string; - "View on Explorer": string; - "View transaction on Explorer": string; - Vote: string; - "Vote Against": string; - "Vote For": string; - "Vote against proposal {proposalId}": (string | string[])[]; - "Vote against proposal {proposalKey}": (string | string[])[]; - "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote for proposal {proposalId}": (string | string[])[]; - "Vote for proposal {proposalKey}": (string | string[])[]; - "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote to abstain on proposal {proposalId}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Voting ended {0}": (string | string[])[]; - "Voting ends approximately {0}": (string | string[])[]; - "Voting starts approximately {0}": (string | string[])[]; - "Waiting For Confirmation": string; - "Wallet Address or ENS name": string; - "Weekly Rewards": string; - "Welcome to team Unicorn :)": string; - "When you claim without withdrawing your liquidity remains in the mining pool.": string; - "When you withdraw, the contract will automagically claim UNI on your behalf!": string; - "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; - Withdraw: string; - "Withdraw & Claim": string; - "Withdraw deposited liquidity": string; - "Withdrawing {0} UNI-V2": (string | string[])[]; - "Withdrew UNI-V2!": string; - Wrap: string; - "Wrap <0/> to {0}": (string | string[])[]; - "Wrong Network": string; - "You already have an active or pending proposal": string; - "You are creating a pool": string; - "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; - "You are the first liquidity provider.": string; - "You can either vote on each proposal yourself or delegate your votes to a third party.": string; - "You can now trade {0}": (string | string[])[]; - "You don't have enough votes to submit a proposal": string; - "You don\u2019t have liquidity in this pool yet.": string; - "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; - "You may have lost your network connection.": string; - "You might consider waiting until the network fees go down to complete this transaction.": string; - "You must connect an account.": string; - "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; - "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; - "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; - "You will also collect fees earned from this position.": string; - "You will receive": string; - "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; - "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; - "Your V2 liquidity": string; - "Your active V3 liquidity positions will appear here.": string; - "Your liquidity deposits": string; - "Your pool share:": string; - "Your position": string; - "Your position has 0 liquidity, and is not earning fees.": string; - "Your position will appear here.": string; - "Your position will be 100% composed of {0} at this price": (string | string[])[]; - "Your position will be 100% {0} at this price.": (string | string[])[]; - "Your position will not earn fees or be used in trades until the market price moves into your range.": string; - "Your positions": string; - "Your rate": string; - "Your total pool tokens:": string; - "Your transaction cost will be much higher as it includes the gas to create the pool.": string; - "Your transaction may be frontrun": string; - "Your transaction may fail": string; - "Your transaction will revert if it has been pending for longer than this period of time.": string; - "Your transaction will revert if it is pending for more than this period of time.": string; - "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; - "Your transactions will appear here...": string; - "Your unclaimed UNI": string; - "after slippage": string; - confirm: string; - "for {0}": (string | string[])[]; - gwei: string; - "has socks emoji": string; - "here.": string; - "https:// or ipfs:// or ENS name": string; - minutes: string; - "via {0}": (string | string[])[]; - "via {0} token list": (string | string[])[]; - "{0, plural, one {Import token} other {Import tokens}}": (string | { - one: string; - other: string; - })[][]; - "{0}": string[][]; - "{0} %": (string | string[])[]; - "{0} <0/> per <1/>": (string | string[])[]; - "{0} Custom Tokens": (string | string[])[]; - "{0} Deposited": (string | string[])[]; - "{0} ETH": (string | string[])[]; - "{0} Fees Earned:": (string | string[])[]; - "{0} Pending": (string | string[])[]; - "{0} UNI": (string | string[])[]; - "{0} UNI / week": (string | string[])[]; - "{0} UNI-V2": (string | string[])[]; - "{0} UNI-V2 LP tokens available": (string | string[])[]; - "{0} Votes": (string | string[])[]; - "{0} per {1}": (string | string[])[]; - "{0} tokens": (string | string[])[]; - "{0} {1} Price:": (string | string[])[]; - "{0} {nativeCurrencySymbol}": (string | string[])[]; - "{0} \u2022 Added by user": (string | string[])[]; - "{0}%": (string | string[])[]; - "{0}% fee tier": (string | string[])[]; - "{0}% pool": (string | string[])[]; - "{0}% select": (string | string[])[]; - "{0}-{1} Liquidity Mining": (string | string[])[]; - "{0}/{1} LP NFT": (string | string[])[]; - "{0}/{1} LP Tokens": (string | string[])[]; - "{SOCKS_AMOUNT} UNI": (string | string[])[]; - "{USER_AMOUNT} UNI": (string | string[])[]; - "{activeTokensOnThisChain} tokens": (string | string[])[]; - "{integrator} fee": (string | string[])[]; - "{label} token bridge": (string | string[])[]; - "{min}m {sec}s": (string | string[])[]; - "{percentForSlider}%": (string | string[])[]; - "{sec}s": (string | string[])[]; - "{tokenB} per {tokenA}": (string | string[])[]; - "\u2190 Back to Pools Overview": string; -}; diff --git a/dist2/types/locales/sv-SE.d.ts b/dist2/types/locales/sv-SE.d.ts deleted file mode 100644 index 75120e0e5c9..00000000000 --- a/dist2/types/locales/sv-SE.d.ts +++ /dev/null @@ -1,593 +0,0 @@ -export const messages: { - "$-": string; - "$<0/>": string; - "${0}": (string | string[])[]; - "(${0})": (string | string[])[]; - "(View on Explorer)": string; - "(clear all)": string; - "(edit)": string; - "- Remove recipient": string; - "0 UNI / week": string; - "25%": string; - "50%": string; - "75%": string; - "<0/> All Proposals": string; - "<0/> Votes": string; - "<0>Account analytics and accrued fees<1> \u2197 ": string; - "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; - "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; - "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; - "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; - "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; - "<0>Unlock voting to prepare for the next proposal.": string; - "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; - "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; - About: string; - Accept: string; - Account: string; - Active: string; - Add: string; - "Add <0/> and <1/> to Uniswap V2": string; - "Add Delegate +": string; - "Add Liquidity": string; - "Add V2 Liquidity": string; - "Add liquidity.": string; - "Add more liquidity": string; - "Add {0} to Metamask <0/>": (string | string[])[]; - "Add {0}-{1} liquidity": (string | string[])[]; - "Add {0}/{1} V3 liquidity": (string | string[])[]; - "Added {0}": (string | string[])[]; - "Address has no available claim": string; - Against: string; - "Allow LP token migration": string; - "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; - "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; - Allowed: string; - Amount: string; - "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Approval pending <0/>": string; - Approve: string; - "Approve Token": string; - "Approve {0}": (string | string[])[]; - "Approve {0} first": (string | string[])[]; - Approved: string; - Approving: string; - "Approving {0}": (string | string[])[]; - Arbiscan: string; - "Arbitrum Bridge": string; - "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Are you sure?": string; - "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; - "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; - Auto: string; - "Auto Router API": string; - "Available to deposit: {0}": (string | string[])[]; - "Balance: {0}": (string | string[])[]; - "Best for exotic pairs.": string; - "Best for most pairs.": string; - "Best for stable pairs.": string; - "Best for very stable pairs.": string; - "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; - "Blocked address": string; - Bridge: string; - "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; - "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; - Canceled: string; - Change: string; - Charts: string; - "Check network status": string; - "Check out our v3 LP walkthrough and migration guides.": string; - Claim: string; - "Claim <0/> for {0}": (string | string[])[]; - "Claim UNI": string; - "Claim UNI Token": string; - "Claim UNI reward for {0}": (string | string[])[]; - "Claim fees": string; - "Claim your UNI tokens": string; - Claimed: string; - "Claimed UNI!": string; - "Claimed!": string; - Claiming: string; - "Claiming UNI": string; - "Claiming {0} UNI": (string | string[])[]; - "Clear All": string; - "Clear all": string; - Close: string; - Closed: string; - Collect: string; - "Collect as WETH": string; - "Collect fees": string; - "Collect {0}/{1} fees": (string | string[])[]; - Collected: string; - Collecting: string; - "Collecting fees": string; - "Collecting fees will withdraw currently available fees for you.": string; - Confirm: string; - "Confirm Supply": string; - "Confirm Swap": string; - "Confirm swap": string; - "Confirm this transaction in your wallet": string; - "Confirm transaction in wallet": string; - "Connect Wallet": string; - "Connect a wallet": string; - "Connect to a wallet to find pools": string; - "Connect to a wallet to view your V2 liquidity.": string; - "Connect to a wallet to view your liquidity.": string; - "Connect wallet to swap": string; - "Connected with {name}": (string | string[])[]; - Copied: string; - "Copy Address": string; - "Create Pool & Supply": string; - "Create Proposal": string; - "Create a pair": string; - "Create a pool": string; - "Create an issue on GitHub": string; - "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; - "Create pool.": string; - "Create {0}/{1} V3 pool": (string | string[])[]; - "Current price": string; - "Current {0} Price:": (string | string[])[]; - Custom: string; - "Dark Theme": string; - Defeated: string; - "Delegate Votes": string; - "Delegate voting power to {0}": (string | string[])[]; - "Delegated to:": string; - "Delegating votes": string; - Deposit: string; - "Deposit Amounts": string; - "Deposit UNI-V2 LP Tokens": string; - "Deposit liquidity": string; - "Deposit tokens to the {label} network.": (string | string[])[]; - "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; - "Deposited liquidity:": string; - "Deposited {0} UNI-V2": (string | string[])[]; - "Depositing Liquidity": string; - Description: string; - Detailed: string; - Details: string; - Disconnect: string; - Discord: string; - Dismiss: string; - Docs: string; - "Don\u2019t see one of your v2 positions? <0>Import it.": string; - "Earned UNI tokens represent voting shares in Uniswap governance.": string; - Edit: string; - "Efficiency Comparison": string; - "Enter a percent": string; - "Enter a recipient": string; - "Enter a valid slippage percentage": string; - "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; - "Enter an amount": string; - "Enter valid list location": string; - "Enter valid token address": string; - "Enter {0} amount": (string | string[])[]; - Error: string; - "Error connecting": string; - "Error connecting. Try refreshing the page.": string; - "Error details": string; - "Error importing list": string; - "Estimate may differ due to your wallet gas settings": string; - "Estimated network fee": string; - Etherscan: string; - Executed: string; - "Expanded results from inactive Token Lists": string; - "Expected Output": string; - "Expert Mode": string; - "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; - Expired: string; - "Explore Uniswap Analytics.": string; - "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; - "Fee Tier": string; - "Fee tier": string; - "Fetching best price...": string; - "Fetching best price\u2026": string; - For: string; - "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; - From: string; - "From (at most)": string; - "Full Range": string; - "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; - "Get support on Discord": string; - "Help Center": string; - Hide: string; - "Hide closed positions": string; - "High Price Impact": string; - "How this app uses APIs": string; - "I understand": string; - "If you purchase a token from this list, you may not be able to sell it back.": string; - Import: string; - "Import List": string; - "Import Pool": string; - "Import V2 Pool": string; - "Import at your own risk": string; - "In range": string; - "Increase Liquidity": string; - "Initial prices and pool share": string; - "Initializing...": string; - "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Install Metamask": string; - "Insufficient liquidity for this trade.": string; - "Insufficient {0}": (string | string[])[]; - "Insufficient {0} balance": (string | string[])[]; - "Interface Settings": string; - "Invalid pair": string; - "Invalid pair.": string; - "Invalid price input": string; - "Invalid range selected. The min price must be lower than the max price.": string; - "Invalid recipient": string; - Language: string; - Learn: string; - "Learn about providing liquidity": string; - "Learn more": string; - "Legal & Privacy": string; - "Light Theme": string; - Liquidity: string; - "Liquidity data not available.": string; - "Liquidity provider rewards": string; - "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - Lists: string; - Loaded: string; - Loading: string; - MAX: string; - Manage: string; - "Manage Liquidity in Rewards Pool": string; - "Manage Token Lists": string; - "Manage this pool.": string; - Max: string; - "Max Price": string; - "Max price": string; - "Max slippage": string; - "Max:": string; - "Maximum sent": string; - Menu: string; - Migrate: string; - "Migrate Liquidity to V3": string; - "Migrate V2 Liquidity": string; - "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; - "Migrate {0}/{1} liquidity to V3": (string | string[])[]; - Migrating: string; - "Min Price": string; - "Min price": string; - "Min:": string; - "Minimum received": string; - "Missing dependencies": string; - "Mock Toggle": string; - More: string; - "Network Fee": string; - "Network Warning": string; - "Network fees exceed 50% of the swap amount!": string; - "New Position": string; - "No V2 Liquidity found.": string; - "No active pools": string; - "No data": string; - "No description.": string; - "No liquidity found.": string; - "No pool found.": string; - "No proposals found.": string; - "No results found.": string; - "Not created": string; - OFF: string; - ON: string; - "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; - Off: string; - On: string; - "Once you are happy with the rate click supply to review.": string; - "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; - "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; - "Optimism Gateway": string; - "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Optimistic Etherscan": string; - "Out of range": string; - "Output is estimated.": string; - "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; - "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Output will be sent to <0>{0}": (string | string[])[]; - Owner: string; - "Participating pools": string; - Pending: string; - "Please confirm you would like to remove this list by typing REMOVE": string; - "Please connect to Layer 1 Ethereum": string; - "Please connect to a supported network in the dropdown menu or in your wallet.": string; - "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; - "Polygon Bridge": string; - Polygonscan: string; - Pool: string; - "Pool Found!": string; - "Pool Rate": string; - "Pool rate": string; - "Pool tokens in rewards pool:": string; - "Pooled {0}:": (string | string[])[]; - "Pools Overview": string; - Preview: string; - Price: string; - "Price Difference:": string; - "Price Impact": string; - "Price Impact Too High": string; - "Price Updated": string; - "Price impact": string; - "Price range": string; - "Price updated": string; - "Price:": string; - "Prices and pool share": string; - Proposal: string; - "Proposal Submitted": string; - "Proposal Title": string; - Proposals: string; - "Proposals submitted by community members will appear here.": string; - "Proposed Action": string; - Proposer: string; - "Protocol Disclaimer": string; - Queued: string; - Rates: string; - "Read more about UNI": string; - "Read more about Uniswap governance": string; - "Read more about providing liquidity": string; - "Read more about unsupported assets": string; - "Recent Transactions": string; - "Recent transactions": string; - Recipient: string; - "Reload the page": string; - Remove: string; - "Remove <0/> and <1/>": string; - "Remove Amount": string; - "Remove Delegate": string; - "Remove Liquidity": string; - "Remove list": string; - "Removing {0} {1} and {2} {3}": (string | string[])[]; - "Removing {0} {1} and{2} {3}": (string | string[])[]; - "Request Features": string; - Reset: string; - Return: string; - "Review swap": string; - "Search by token name or address": string; - "Search name or paste address": string; - "Select Pair": string; - "Select a network": string; - "Select a token": string; - "Select a token to find your v2 liquidity.": string; - "Select an action": string; - "Selected Range": string; - Self: string; - "Self Delegate": string; - "Set Price Range": string; - "Set Starting Price": string; - Settings: string; - "Share of Pool": string; - "Share of Pool:": string; - "Show Portis": string; - "Show closed positions": string; - Simple: string; - "Slippage tolerance": string; - "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; - "Something went wrong": string; - "Something went wrong.": string; - "Step 1. Get UNI-V2 Liquidity tokens": string; - "Submit new proposal": string; - "Submitting Proposal": string; - "Submitting Vote": string; - Succeeded: string; - Success: string; - Supply: string; - "Supplying {0} {1} and {2} {3}": (string | string[])[]; - Swap: string; - "Swap <0/> for exactly <1/>": string; - "Swap Anyway": string; - "Swap details": string; - "Swap exactly <0/> for <1/>": string; - "Swap failed: {0}": (string | string[])[]; - "Swap summary": string; - "Swapping {0} {1} for {2} {3}": (string | string[])[]; - "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; - "Tell us what you think \u2197": string; - "Thanks for being part of the Uniswap community <0/>": string; - "The % you will earn in fees.": string; - "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; - "The app fetches blockchain data from The Graph\u2019s hosted service.": string; - "The app fetches on-chain data and constructs contract calls with an Infura API.": string; - "The app fetches the optimal trade route from a Uniswap Labs server.": string; - "The app logs anonymized usage statistics in order to improve over time.": string; - "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; - "The cost of sending this transaction is more than half of the value of the input amount.": string; - "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; - "The estimated difference between the USD values of input and output amounts.": string; - "The input token cannot be transferred. There may be an issue with the input token.": string; - "The market price is outside your specified price range. Single-asset deposit only.": string; - "The most recent block number on this network. Prices update on every block.": string; - "The output token cannot be transferred. There may be an issue with the output token.": string; - "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; - "The price of this pool is within your selected range. Your position is currently earning fees.": string; - "The ratio of tokens you add will set the price of this pool.": string; - "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; - "There is no liquidity data.": string; - "This app uses the following third-party APIs:": string; - "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; - "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; - "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; - "This token is not supported in the Uniswap Labs app": string; - "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; - "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; - "Tip: Custom tokens are stored locally in your browser": string; - To: string; - "To (at least)": string; - "Token not supported": string; - Tokens: string; - "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; - "Top pools": string; - "Total deposited": string; - "Total deposits": string; - "Trade Route": string; - Trading: string; - "Transaction Settings": string; - "Transaction Submitted": string; - "Transaction completed in": string; - "Transaction deadline": string; - "Transaction pending": string; - "Transaction rejected.": string; - "Transaction submitted": string; - "Transfer Token": string; - "Try Again": string; - "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Turn On Expert Mode": string; - "UNI has arrived": string; - "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; - "UNI {0}/{1} Burned": (string | string[])[]; - "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; - "UNI-V2 {0}-{1}": (string | string[])[]; - "Unclaimed UNI": string; - "Unclaimed fees": string; - Undetermined: string; - "Unexpected error. Could not estimate gas for the swap.": string; - "Unexpected issue with estimating the gas. Please try again.": string; - "Uniswap Governance": string; - "Uniswap Labs' Terms of Service": string; - "Uniswap available in: <0>{0}": (string | string[])[]; - "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; - "Uniswap liquidity mining": string; - "Uniswap migration contract\u2197": string; - "Unknown Source": string; - "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; - "Unlock Votes": string; - "Unlock Voting": string; - "Unlocking Votes": string; - "Unsupported Asset": string; - "Unsupported Assets": string; - "Unsupported network\u2013switch to another to trade.": string; - Untitled: string; - Unwrap: string; - "Unwrap <0/> to {0}": (string | string[])[]; - "Update Delegation": string; - "Update list": string; - "Use the Uniswap Labs API to get faster quotes.": string; - User: string; - "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; - "V2 liquidity": string; - "V3 {0} Price:": (string | string[])[]; - "View accrued fees and analytics<0>\u2197": string; - "View list": string; - "View on Etherscan": string; - "View on Explorer": string; - "View transaction on Explorer": string; - Vote: string; - "Vote Against": string; - "Vote For": string; - "Vote against proposal {proposalId}": (string | string[])[]; - "Vote against proposal {proposalKey}": (string | string[])[]; - "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote for proposal {proposalId}": (string | string[])[]; - "Vote for proposal {proposalKey}": (string | string[])[]; - "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote to abstain on proposal {proposalId}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Voting ended {0}": (string | string[])[]; - "Voting ends approximately {0}": (string | string[])[]; - "Voting starts approximately {0}": (string | string[])[]; - "Waiting For Confirmation": string; - "Wallet Address or ENS name": string; - "Weekly Rewards": string; - "Welcome to team Unicorn :)": string; - "When you claim without withdrawing your liquidity remains in the mining pool.": string; - "When you withdraw, the contract will automagically claim UNI on your behalf!": string; - "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; - Withdraw: string; - "Withdraw & Claim": string; - "Withdraw deposited liquidity": string; - "Withdrawing {0} UNI-V2": (string | string[])[]; - "Withdrew UNI-V2!": string; - Wrap: string; - "Wrap <0/> to {0}": (string | string[])[]; - "Wrong Network": string; - "You already have an active or pending proposal": string; - "You are creating a pool": string; - "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; - "You are the first liquidity provider.": string; - "You can either vote on each proposal yourself or delegate your votes to a third party.": string; - "You can now trade {0}": (string | string[])[]; - "You don't have enough votes to submit a proposal": string; - "You don\u2019t have liquidity in this pool yet.": string; - "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; - "You may have lost your network connection.": string; - "You might consider waiting until the network fees go down to complete this transaction.": string; - "You must connect an account.": string; - "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; - "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; - "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; - "You will also collect fees earned from this position.": string; - "You will receive": string; - "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; - "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; - "Your V2 liquidity": string; - "Your active V3 liquidity positions will appear here.": string; - "Your liquidity deposits": string; - "Your pool share:": string; - "Your position": string; - "Your position has 0 liquidity, and is not earning fees.": string; - "Your position will appear here.": string; - "Your position will be 100% composed of {0} at this price": (string | string[])[]; - "Your position will be 100% {0} at this price.": (string | string[])[]; - "Your position will not earn fees or be used in trades until the market price moves into your range.": string; - "Your positions": string; - "Your rate": string; - "Your total pool tokens:": string; - "Your transaction cost will be much higher as it includes the gas to create the pool.": string; - "Your transaction may be frontrun": string; - "Your transaction may fail": string; - "Your transaction will revert if it has been pending for longer than this period of time.": string; - "Your transaction will revert if it is pending for more than this period of time.": string; - "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; - "Your transactions will appear here...": string; - "Your unclaimed UNI": string; - "after slippage": string; - confirm: string; - "for {0}": (string | string[])[]; - gwei: string; - "has socks emoji": string; - "here.": string; - "https:// or ipfs:// or ENS name": string; - minutes: string; - "via {0}": (string | string[])[]; - "via {0} token list": (string | string[])[]; - "{0, plural, one {Import token} other {Import tokens}}": (string | { - one: string; - other: string; - })[][]; - "{0}": string[][]; - "{0} %": (string | string[])[]; - "{0} <0/> per <1/>": (string | string[])[]; - "{0} Custom Tokens": (string | string[])[]; - "{0} Deposited": (string | string[])[]; - "{0} ETH": (string | string[])[]; - "{0} Fees Earned:": (string | string[])[]; - "{0} Pending": (string | string[])[]; - "{0} UNI": (string | string[])[]; - "{0} UNI / week": (string | string[])[]; - "{0} UNI-V2": (string | string[])[]; - "{0} UNI-V2 LP tokens available": (string | string[])[]; - "{0} Votes": (string | string[])[]; - "{0} per {1}": (string | string[])[]; - "{0} tokens": (string | string[])[]; - "{0} {1} Price:": (string | string[])[]; - "{0} {nativeCurrencySymbol}": (string | string[])[]; - "{0} \u2022 Added by user": (string | string[])[]; - "{0}%": (string | string[])[]; - "{0}% fee tier": (string | string[])[]; - "{0}% pool": (string | string[])[]; - "{0}% select": (string | string[])[]; - "{0}-{1} Liquidity Mining": (string | string[])[]; - "{0}/{1} LP NFT": (string | string[])[]; - "{0}/{1} LP Tokens": (string | string[])[]; - "{SOCKS_AMOUNT} UNI": (string | string[])[]; - "{USER_AMOUNT} UNI": (string | string[])[]; - "{activeTokensOnThisChain} tokens": (string | string[])[]; - "{integrator} fee": (string | string[])[]; - "{label} token bridge": (string | string[])[]; - "{min}m {sec}s": (string | string[])[]; - "{percentForSlider}%": (string | string[])[]; - "{sec}s": (string | string[])[]; - "{tokenB} per {tokenA}": (string | string[])[]; - "\u2190 Back to Pools Overview": string; -}; diff --git a/dist2/types/locales/sw-TZ.d.ts b/dist2/types/locales/sw-TZ.d.ts deleted file mode 100644 index 75120e0e5c9..00000000000 --- a/dist2/types/locales/sw-TZ.d.ts +++ /dev/null @@ -1,593 +0,0 @@ -export const messages: { - "$-": string; - "$<0/>": string; - "${0}": (string | string[])[]; - "(${0})": (string | string[])[]; - "(View on Explorer)": string; - "(clear all)": string; - "(edit)": string; - "- Remove recipient": string; - "0 UNI / week": string; - "25%": string; - "50%": string; - "75%": string; - "<0/> All Proposals": string; - "<0/> Votes": string; - "<0>Account analytics and accrued fees<1> \u2197 ": string; - "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; - "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; - "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; - "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; - "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; - "<0>Unlock voting to prepare for the next proposal.": string; - "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; - "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; - About: string; - Accept: string; - Account: string; - Active: string; - Add: string; - "Add <0/> and <1/> to Uniswap V2": string; - "Add Delegate +": string; - "Add Liquidity": string; - "Add V2 Liquidity": string; - "Add liquidity.": string; - "Add more liquidity": string; - "Add {0} to Metamask <0/>": (string | string[])[]; - "Add {0}-{1} liquidity": (string | string[])[]; - "Add {0}/{1} V3 liquidity": (string | string[])[]; - "Added {0}": (string | string[])[]; - "Address has no available claim": string; - Against: string; - "Allow LP token migration": string; - "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; - "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; - Allowed: string; - Amount: string; - "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Approval pending <0/>": string; - Approve: string; - "Approve Token": string; - "Approve {0}": (string | string[])[]; - "Approve {0} first": (string | string[])[]; - Approved: string; - Approving: string; - "Approving {0}": (string | string[])[]; - Arbiscan: string; - "Arbitrum Bridge": string; - "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Are you sure?": string; - "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; - "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; - Auto: string; - "Auto Router API": string; - "Available to deposit: {0}": (string | string[])[]; - "Balance: {0}": (string | string[])[]; - "Best for exotic pairs.": string; - "Best for most pairs.": string; - "Best for stable pairs.": string; - "Best for very stable pairs.": string; - "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; - "Blocked address": string; - Bridge: string; - "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; - "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; - Canceled: string; - Change: string; - Charts: string; - "Check network status": string; - "Check out our v3 LP walkthrough and migration guides.": string; - Claim: string; - "Claim <0/> for {0}": (string | string[])[]; - "Claim UNI": string; - "Claim UNI Token": string; - "Claim UNI reward for {0}": (string | string[])[]; - "Claim fees": string; - "Claim your UNI tokens": string; - Claimed: string; - "Claimed UNI!": string; - "Claimed!": string; - Claiming: string; - "Claiming UNI": string; - "Claiming {0} UNI": (string | string[])[]; - "Clear All": string; - "Clear all": string; - Close: string; - Closed: string; - Collect: string; - "Collect as WETH": string; - "Collect fees": string; - "Collect {0}/{1} fees": (string | string[])[]; - Collected: string; - Collecting: string; - "Collecting fees": string; - "Collecting fees will withdraw currently available fees for you.": string; - Confirm: string; - "Confirm Supply": string; - "Confirm Swap": string; - "Confirm swap": string; - "Confirm this transaction in your wallet": string; - "Confirm transaction in wallet": string; - "Connect Wallet": string; - "Connect a wallet": string; - "Connect to a wallet to find pools": string; - "Connect to a wallet to view your V2 liquidity.": string; - "Connect to a wallet to view your liquidity.": string; - "Connect wallet to swap": string; - "Connected with {name}": (string | string[])[]; - Copied: string; - "Copy Address": string; - "Create Pool & Supply": string; - "Create Proposal": string; - "Create a pair": string; - "Create a pool": string; - "Create an issue on GitHub": string; - "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; - "Create pool.": string; - "Create {0}/{1} V3 pool": (string | string[])[]; - "Current price": string; - "Current {0} Price:": (string | string[])[]; - Custom: string; - "Dark Theme": string; - Defeated: string; - "Delegate Votes": string; - "Delegate voting power to {0}": (string | string[])[]; - "Delegated to:": string; - "Delegating votes": string; - Deposit: string; - "Deposit Amounts": string; - "Deposit UNI-V2 LP Tokens": string; - "Deposit liquidity": string; - "Deposit tokens to the {label} network.": (string | string[])[]; - "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; - "Deposited liquidity:": string; - "Deposited {0} UNI-V2": (string | string[])[]; - "Depositing Liquidity": string; - Description: string; - Detailed: string; - Details: string; - Disconnect: string; - Discord: string; - Dismiss: string; - Docs: string; - "Don\u2019t see one of your v2 positions? <0>Import it.": string; - "Earned UNI tokens represent voting shares in Uniswap governance.": string; - Edit: string; - "Efficiency Comparison": string; - "Enter a percent": string; - "Enter a recipient": string; - "Enter a valid slippage percentage": string; - "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; - "Enter an amount": string; - "Enter valid list location": string; - "Enter valid token address": string; - "Enter {0} amount": (string | string[])[]; - Error: string; - "Error connecting": string; - "Error connecting. Try refreshing the page.": string; - "Error details": string; - "Error importing list": string; - "Estimate may differ due to your wallet gas settings": string; - "Estimated network fee": string; - Etherscan: string; - Executed: string; - "Expanded results from inactive Token Lists": string; - "Expected Output": string; - "Expert Mode": string; - "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; - Expired: string; - "Explore Uniswap Analytics.": string; - "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; - "Fee Tier": string; - "Fee tier": string; - "Fetching best price...": string; - "Fetching best price\u2026": string; - For: string; - "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; - From: string; - "From (at most)": string; - "Full Range": string; - "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; - "Get support on Discord": string; - "Help Center": string; - Hide: string; - "Hide closed positions": string; - "High Price Impact": string; - "How this app uses APIs": string; - "I understand": string; - "If you purchase a token from this list, you may not be able to sell it back.": string; - Import: string; - "Import List": string; - "Import Pool": string; - "Import V2 Pool": string; - "Import at your own risk": string; - "In range": string; - "Increase Liquidity": string; - "Initial prices and pool share": string; - "Initializing...": string; - "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Install Metamask": string; - "Insufficient liquidity for this trade.": string; - "Insufficient {0}": (string | string[])[]; - "Insufficient {0} balance": (string | string[])[]; - "Interface Settings": string; - "Invalid pair": string; - "Invalid pair.": string; - "Invalid price input": string; - "Invalid range selected. The min price must be lower than the max price.": string; - "Invalid recipient": string; - Language: string; - Learn: string; - "Learn about providing liquidity": string; - "Learn more": string; - "Legal & Privacy": string; - "Light Theme": string; - Liquidity: string; - "Liquidity data not available.": string; - "Liquidity provider rewards": string; - "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - Lists: string; - Loaded: string; - Loading: string; - MAX: string; - Manage: string; - "Manage Liquidity in Rewards Pool": string; - "Manage Token Lists": string; - "Manage this pool.": string; - Max: string; - "Max Price": string; - "Max price": string; - "Max slippage": string; - "Max:": string; - "Maximum sent": string; - Menu: string; - Migrate: string; - "Migrate Liquidity to V3": string; - "Migrate V2 Liquidity": string; - "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; - "Migrate {0}/{1} liquidity to V3": (string | string[])[]; - Migrating: string; - "Min Price": string; - "Min price": string; - "Min:": string; - "Minimum received": string; - "Missing dependencies": string; - "Mock Toggle": string; - More: string; - "Network Fee": string; - "Network Warning": string; - "Network fees exceed 50% of the swap amount!": string; - "New Position": string; - "No V2 Liquidity found.": string; - "No active pools": string; - "No data": string; - "No description.": string; - "No liquidity found.": string; - "No pool found.": string; - "No proposals found.": string; - "No results found.": string; - "Not created": string; - OFF: string; - ON: string; - "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; - Off: string; - On: string; - "Once you are happy with the rate click supply to review.": string; - "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; - "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; - "Optimism Gateway": string; - "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Optimistic Etherscan": string; - "Out of range": string; - "Output is estimated.": string; - "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; - "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Output will be sent to <0>{0}": (string | string[])[]; - Owner: string; - "Participating pools": string; - Pending: string; - "Please confirm you would like to remove this list by typing REMOVE": string; - "Please connect to Layer 1 Ethereum": string; - "Please connect to a supported network in the dropdown menu or in your wallet.": string; - "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; - "Polygon Bridge": string; - Polygonscan: string; - Pool: string; - "Pool Found!": string; - "Pool Rate": string; - "Pool rate": string; - "Pool tokens in rewards pool:": string; - "Pooled {0}:": (string | string[])[]; - "Pools Overview": string; - Preview: string; - Price: string; - "Price Difference:": string; - "Price Impact": string; - "Price Impact Too High": string; - "Price Updated": string; - "Price impact": string; - "Price range": string; - "Price updated": string; - "Price:": string; - "Prices and pool share": string; - Proposal: string; - "Proposal Submitted": string; - "Proposal Title": string; - Proposals: string; - "Proposals submitted by community members will appear here.": string; - "Proposed Action": string; - Proposer: string; - "Protocol Disclaimer": string; - Queued: string; - Rates: string; - "Read more about UNI": string; - "Read more about Uniswap governance": string; - "Read more about providing liquidity": string; - "Read more about unsupported assets": string; - "Recent Transactions": string; - "Recent transactions": string; - Recipient: string; - "Reload the page": string; - Remove: string; - "Remove <0/> and <1/>": string; - "Remove Amount": string; - "Remove Delegate": string; - "Remove Liquidity": string; - "Remove list": string; - "Removing {0} {1} and {2} {3}": (string | string[])[]; - "Removing {0} {1} and{2} {3}": (string | string[])[]; - "Request Features": string; - Reset: string; - Return: string; - "Review swap": string; - "Search by token name or address": string; - "Search name or paste address": string; - "Select Pair": string; - "Select a network": string; - "Select a token": string; - "Select a token to find your v2 liquidity.": string; - "Select an action": string; - "Selected Range": string; - Self: string; - "Self Delegate": string; - "Set Price Range": string; - "Set Starting Price": string; - Settings: string; - "Share of Pool": string; - "Share of Pool:": string; - "Show Portis": string; - "Show closed positions": string; - Simple: string; - "Slippage tolerance": string; - "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; - "Something went wrong": string; - "Something went wrong.": string; - "Step 1. Get UNI-V2 Liquidity tokens": string; - "Submit new proposal": string; - "Submitting Proposal": string; - "Submitting Vote": string; - Succeeded: string; - Success: string; - Supply: string; - "Supplying {0} {1} and {2} {3}": (string | string[])[]; - Swap: string; - "Swap <0/> for exactly <1/>": string; - "Swap Anyway": string; - "Swap details": string; - "Swap exactly <0/> for <1/>": string; - "Swap failed: {0}": (string | string[])[]; - "Swap summary": string; - "Swapping {0} {1} for {2} {3}": (string | string[])[]; - "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; - "Tell us what you think \u2197": string; - "Thanks for being part of the Uniswap community <0/>": string; - "The % you will earn in fees.": string; - "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; - "The app fetches blockchain data from The Graph\u2019s hosted service.": string; - "The app fetches on-chain data and constructs contract calls with an Infura API.": string; - "The app fetches the optimal trade route from a Uniswap Labs server.": string; - "The app logs anonymized usage statistics in order to improve over time.": string; - "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; - "The cost of sending this transaction is more than half of the value of the input amount.": string; - "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; - "The estimated difference between the USD values of input and output amounts.": string; - "The input token cannot be transferred. There may be an issue with the input token.": string; - "The market price is outside your specified price range. Single-asset deposit only.": string; - "The most recent block number on this network. Prices update on every block.": string; - "The output token cannot be transferred. There may be an issue with the output token.": string; - "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; - "The price of this pool is within your selected range. Your position is currently earning fees.": string; - "The ratio of tokens you add will set the price of this pool.": string; - "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; - "There is no liquidity data.": string; - "This app uses the following third-party APIs:": string; - "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; - "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; - "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; - "This token is not supported in the Uniswap Labs app": string; - "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; - "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; - "Tip: Custom tokens are stored locally in your browser": string; - To: string; - "To (at least)": string; - "Token not supported": string; - Tokens: string; - "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; - "Top pools": string; - "Total deposited": string; - "Total deposits": string; - "Trade Route": string; - Trading: string; - "Transaction Settings": string; - "Transaction Submitted": string; - "Transaction completed in": string; - "Transaction deadline": string; - "Transaction pending": string; - "Transaction rejected.": string; - "Transaction submitted": string; - "Transfer Token": string; - "Try Again": string; - "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Turn On Expert Mode": string; - "UNI has arrived": string; - "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; - "UNI {0}/{1} Burned": (string | string[])[]; - "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; - "UNI-V2 {0}-{1}": (string | string[])[]; - "Unclaimed UNI": string; - "Unclaimed fees": string; - Undetermined: string; - "Unexpected error. Could not estimate gas for the swap.": string; - "Unexpected issue with estimating the gas. Please try again.": string; - "Uniswap Governance": string; - "Uniswap Labs' Terms of Service": string; - "Uniswap available in: <0>{0}": (string | string[])[]; - "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; - "Uniswap liquidity mining": string; - "Uniswap migration contract\u2197": string; - "Unknown Source": string; - "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; - "Unlock Votes": string; - "Unlock Voting": string; - "Unlocking Votes": string; - "Unsupported Asset": string; - "Unsupported Assets": string; - "Unsupported network\u2013switch to another to trade.": string; - Untitled: string; - Unwrap: string; - "Unwrap <0/> to {0}": (string | string[])[]; - "Update Delegation": string; - "Update list": string; - "Use the Uniswap Labs API to get faster quotes.": string; - User: string; - "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; - "V2 liquidity": string; - "V3 {0} Price:": (string | string[])[]; - "View accrued fees and analytics<0>\u2197": string; - "View list": string; - "View on Etherscan": string; - "View on Explorer": string; - "View transaction on Explorer": string; - Vote: string; - "Vote Against": string; - "Vote For": string; - "Vote against proposal {proposalId}": (string | string[])[]; - "Vote against proposal {proposalKey}": (string | string[])[]; - "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote for proposal {proposalId}": (string | string[])[]; - "Vote for proposal {proposalKey}": (string | string[])[]; - "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote to abstain on proposal {proposalId}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Voting ended {0}": (string | string[])[]; - "Voting ends approximately {0}": (string | string[])[]; - "Voting starts approximately {0}": (string | string[])[]; - "Waiting For Confirmation": string; - "Wallet Address or ENS name": string; - "Weekly Rewards": string; - "Welcome to team Unicorn :)": string; - "When you claim without withdrawing your liquidity remains in the mining pool.": string; - "When you withdraw, the contract will automagically claim UNI on your behalf!": string; - "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; - Withdraw: string; - "Withdraw & Claim": string; - "Withdraw deposited liquidity": string; - "Withdrawing {0} UNI-V2": (string | string[])[]; - "Withdrew UNI-V2!": string; - Wrap: string; - "Wrap <0/> to {0}": (string | string[])[]; - "Wrong Network": string; - "You already have an active or pending proposal": string; - "You are creating a pool": string; - "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; - "You are the first liquidity provider.": string; - "You can either vote on each proposal yourself or delegate your votes to a third party.": string; - "You can now trade {0}": (string | string[])[]; - "You don't have enough votes to submit a proposal": string; - "You don\u2019t have liquidity in this pool yet.": string; - "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; - "You may have lost your network connection.": string; - "You might consider waiting until the network fees go down to complete this transaction.": string; - "You must connect an account.": string; - "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; - "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; - "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; - "You will also collect fees earned from this position.": string; - "You will receive": string; - "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; - "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; - "Your V2 liquidity": string; - "Your active V3 liquidity positions will appear here.": string; - "Your liquidity deposits": string; - "Your pool share:": string; - "Your position": string; - "Your position has 0 liquidity, and is not earning fees.": string; - "Your position will appear here.": string; - "Your position will be 100% composed of {0} at this price": (string | string[])[]; - "Your position will be 100% {0} at this price.": (string | string[])[]; - "Your position will not earn fees or be used in trades until the market price moves into your range.": string; - "Your positions": string; - "Your rate": string; - "Your total pool tokens:": string; - "Your transaction cost will be much higher as it includes the gas to create the pool.": string; - "Your transaction may be frontrun": string; - "Your transaction may fail": string; - "Your transaction will revert if it has been pending for longer than this period of time.": string; - "Your transaction will revert if it is pending for more than this period of time.": string; - "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; - "Your transactions will appear here...": string; - "Your unclaimed UNI": string; - "after slippage": string; - confirm: string; - "for {0}": (string | string[])[]; - gwei: string; - "has socks emoji": string; - "here.": string; - "https:// or ipfs:// or ENS name": string; - minutes: string; - "via {0}": (string | string[])[]; - "via {0} token list": (string | string[])[]; - "{0, plural, one {Import token} other {Import tokens}}": (string | { - one: string; - other: string; - })[][]; - "{0}": string[][]; - "{0} %": (string | string[])[]; - "{0} <0/> per <1/>": (string | string[])[]; - "{0} Custom Tokens": (string | string[])[]; - "{0} Deposited": (string | string[])[]; - "{0} ETH": (string | string[])[]; - "{0} Fees Earned:": (string | string[])[]; - "{0} Pending": (string | string[])[]; - "{0} UNI": (string | string[])[]; - "{0} UNI / week": (string | string[])[]; - "{0} UNI-V2": (string | string[])[]; - "{0} UNI-V2 LP tokens available": (string | string[])[]; - "{0} Votes": (string | string[])[]; - "{0} per {1}": (string | string[])[]; - "{0} tokens": (string | string[])[]; - "{0} {1} Price:": (string | string[])[]; - "{0} {nativeCurrencySymbol}": (string | string[])[]; - "{0} \u2022 Added by user": (string | string[])[]; - "{0}%": (string | string[])[]; - "{0}% fee tier": (string | string[])[]; - "{0}% pool": (string | string[])[]; - "{0}% select": (string | string[])[]; - "{0}-{1} Liquidity Mining": (string | string[])[]; - "{0}/{1} LP NFT": (string | string[])[]; - "{0}/{1} LP Tokens": (string | string[])[]; - "{SOCKS_AMOUNT} UNI": (string | string[])[]; - "{USER_AMOUNT} UNI": (string | string[])[]; - "{activeTokensOnThisChain} tokens": (string | string[])[]; - "{integrator} fee": (string | string[])[]; - "{label} token bridge": (string | string[])[]; - "{min}m {sec}s": (string | string[])[]; - "{percentForSlider}%": (string | string[])[]; - "{sec}s": (string | string[])[]; - "{tokenB} per {tokenA}": (string | string[])[]; - "\u2190 Back to Pools Overview": string; -}; diff --git a/dist2/types/locales/tr-TR.d.ts b/dist2/types/locales/tr-TR.d.ts deleted file mode 100644 index 75120e0e5c9..00000000000 --- a/dist2/types/locales/tr-TR.d.ts +++ /dev/null @@ -1,593 +0,0 @@ -export const messages: { - "$-": string; - "$<0/>": string; - "${0}": (string | string[])[]; - "(${0})": (string | string[])[]; - "(View on Explorer)": string; - "(clear all)": string; - "(edit)": string; - "- Remove recipient": string; - "0 UNI / week": string; - "25%": string; - "50%": string; - "75%": string; - "<0/> All Proposals": string; - "<0/> Votes": string; - "<0>Account analytics and accrued fees<1> \u2197 ": string; - "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; - "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; - "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; - "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; - "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; - "<0>Unlock voting to prepare for the next proposal.": string; - "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; - "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; - About: string; - Accept: string; - Account: string; - Active: string; - Add: string; - "Add <0/> and <1/> to Uniswap V2": string; - "Add Delegate +": string; - "Add Liquidity": string; - "Add V2 Liquidity": string; - "Add liquidity.": string; - "Add more liquidity": string; - "Add {0} to Metamask <0/>": (string | string[])[]; - "Add {0}-{1} liquidity": (string | string[])[]; - "Add {0}/{1} V3 liquidity": (string | string[])[]; - "Added {0}": (string | string[])[]; - "Address has no available claim": string; - Against: string; - "Allow LP token migration": string; - "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; - "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; - Allowed: string; - Amount: string; - "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Approval pending <0/>": string; - Approve: string; - "Approve Token": string; - "Approve {0}": (string | string[])[]; - "Approve {0} first": (string | string[])[]; - Approved: string; - Approving: string; - "Approving {0}": (string | string[])[]; - Arbiscan: string; - "Arbitrum Bridge": string; - "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Are you sure?": string; - "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; - "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; - Auto: string; - "Auto Router API": string; - "Available to deposit: {0}": (string | string[])[]; - "Balance: {0}": (string | string[])[]; - "Best for exotic pairs.": string; - "Best for most pairs.": string; - "Best for stable pairs.": string; - "Best for very stable pairs.": string; - "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; - "Blocked address": string; - Bridge: string; - "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; - "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; - Canceled: string; - Change: string; - Charts: string; - "Check network status": string; - "Check out our v3 LP walkthrough and migration guides.": string; - Claim: string; - "Claim <0/> for {0}": (string | string[])[]; - "Claim UNI": string; - "Claim UNI Token": string; - "Claim UNI reward for {0}": (string | string[])[]; - "Claim fees": string; - "Claim your UNI tokens": string; - Claimed: string; - "Claimed UNI!": string; - "Claimed!": string; - Claiming: string; - "Claiming UNI": string; - "Claiming {0} UNI": (string | string[])[]; - "Clear All": string; - "Clear all": string; - Close: string; - Closed: string; - Collect: string; - "Collect as WETH": string; - "Collect fees": string; - "Collect {0}/{1} fees": (string | string[])[]; - Collected: string; - Collecting: string; - "Collecting fees": string; - "Collecting fees will withdraw currently available fees for you.": string; - Confirm: string; - "Confirm Supply": string; - "Confirm Swap": string; - "Confirm swap": string; - "Confirm this transaction in your wallet": string; - "Confirm transaction in wallet": string; - "Connect Wallet": string; - "Connect a wallet": string; - "Connect to a wallet to find pools": string; - "Connect to a wallet to view your V2 liquidity.": string; - "Connect to a wallet to view your liquidity.": string; - "Connect wallet to swap": string; - "Connected with {name}": (string | string[])[]; - Copied: string; - "Copy Address": string; - "Create Pool & Supply": string; - "Create Proposal": string; - "Create a pair": string; - "Create a pool": string; - "Create an issue on GitHub": string; - "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; - "Create pool.": string; - "Create {0}/{1} V3 pool": (string | string[])[]; - "Current price": string; - "Current {0} Price:": (string | string[])[]; - Custom: string; - "Dark Theme": string; - Defeated: string; - "Delegate Votes": string; - "Delegate voting power to {0}": (string | string[])[]; - "Delegated to:": string; - "Delegating votes": string; - Deposit: string; - "Deposit Amounts": string; - "Deposit UNI-V2 LP Tokens": string; - "Deposit liquidity": string; - "Deposit tokens to the {label} network.": (string | string[])[]; - "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; - "Deposited liquidity:": string; - "Deposited {0} UNI-V2": (string | string[])[]; - "Depositing Liquidity": string; - Description: string; - Detailed: string; - Details: string; - Disconnect: string; - Discord: string; - Dismiss: string; - Docs: string; - "Don\u2019t see one of your v2 positions? <0>Import it.": string; - "Earned UNI tokens represent voting shares in Uniswap governance.": string; - Edit: string; - "Efficiency Comparison": string; - "Enter a percent": string; - "Enter a recipient": string; - "Enter a valid slippage percentage": string; - "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; - "Enter an amount": string; - "Enter valid list location": string; - "Enter valid token address": string; - "Enter {0} amount": (string | string[])[]; - Error: string; - "Error connecting": string; - "Error connecting. Try refreshing the page.": string; - "Error details": string; - "Error importing list": string; - "Estimate may differ due to your wallet gas settings": string; - "Estimated network fee": string; - Etherscan: string; - Executed: string; - "Expanded results from inactive Token Lists": string; - "Expected Output": string; - "Expert Mode": string; - "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; - Expired: string; - "Explore Uniswap Analytics.": string; - "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; - "Fee Tier": string; - "Fee tier": string; - "Fetching best price...": string; - "Fetching best price\u2026": string; - For: string; - "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; - From: string; - "From (at most)": string; - "Full Range": string; - "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; - "Get support on Discord": string; - "Help Center": string; - Hide: string; - "Hide closed positions": string; - "High Price Impact": string; - "How this app uses APIs": string; - "I understand": string; - "If you purchase a token from this list, you may not be able to sell it back.": string; - Import: string; - "Import List": string; - "Import Pool": string; - "Import V2 Pool": string; - "Import at your own risk": string; - "In range": string; - "Increase Liquidity": string; - "Initial prices and pool share": string; - "Initializing...": string; - "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Install Metamask": string; - "Insufficient liquidity for this trade.": string; - "Insufficient {0}": (string | string[])[]; - "Insufficient {0} balance": (string | string[])[]; - "Interface Settings": string; - "Invalid pair": string; - "Invalid pair.": string; - "Invalid price input": string; - "Invalid range selected. The min price must be lower than the max price.": string; - "Invalid recipient": string; - Language: string; - Learn: string; - "Learn about providing liquidity": string; - "Learn more": string; - "Legal & Privacy": string; - "Light Theme": string; - Liquidity: string; - "Liquidity data not available.": string; - "Liquidity provider rewards": string; - "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - Lists: string; - Loaded: string; - Loading: string; - MAX: string; - Manage: string; - "Manage Liquidity in Rewards Pool": string; - "Manage Token Lists": string; - "Manage this pool.": string; - Max: string; - "Max Price": string; - "Max price": string; - "Max slippage": string; - "Max:": string; - "Maximum sent": string; - Menu: string; - Migrate: string; - "Migrate Liquidity to V3": string; - "Migrate V2 Liquidity": string; - "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; - "Migrate {0}/{1} liquidity to V3": (string | string[])[]; - Migrating: string; - "Min Price": string; - "Min price": string; - "Min:": string; - "Minimum received": string; - "Missing dependencies": string; - "Mock Toggle": string; - More: string; - "Network Fee": string; - "Network Warning": string; - "Network fees exceed 50% of the swap amount!": string; - "New Position": string; - "No V2 Liquidity found.": string; - "No active pools": string; - "No data": string; - "No description.": string; - "No liquidity found.": string; - "No pool found.": string; - "No proposals found.": string; - "No results found.": string; - "Not created": string; - OFF: string; - ON: string; - "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; - Off: string; - On: string; - "Once you are happy with the rate click supply to review.": string; - "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; - "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; - "Optimism Gateway": string; - "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Optimistic Etherscan": string; - "Out of range": string; - "Output is estimated.": string; - "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; - "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Output will be sent to <0>{0}": (string | string[])[]; - Owner: string; - "Participating pools": string; - Pending: string; - "Please confirm you would like to remove this list by typing REMOVE": string; - "Please connect to Layer 1 Ethereum": string; - "Please connect to a supported network in the dropdown menu or in your wallet.": string; - "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; - "Polygon Bridge": string; - Polygonscan: string; - Pool: string; - "Pool Found!": string; - "Pool Rate": string; - "Pool rate": string; - "Pool tokens in rewards pool:": string; - "Pooled {0}:": (string | string[])[]; - "Pools Overview": string; - Preview: string; - Price: string; - "Price Difference:": string; - "Price Impact": string; - "Price Impact Too High": string; - "Price Updated": string; - "Price impact": string; - "Price range": string; - "Price updated": string; - "Price:": string; - "Prices and pool share": string; - Proposal: string; - "Proposal Submitted": string; - "Proposal Title": string; - Proposals: string; - "Proposals submitted by community members will appear here.": string; - "Proposed Action": string; - Proposer: string; - "Protocol Disclaimer": string; - Queued: string; - Rates: string; - "Read more about UNI": string; - "Read more about Uniswap governance": string; - "Read more about providing liquidity": string; - "Read more about unsupported assets": string; - "Recent Transactions": string; - "Recent transactions": string; - Recipient: string; - "Reload the page": string; - Remove: string; - "Remove <0/> and <1/>": string; - "Remove Amount": string; - "Remove Delegate": string; - "Remove Liquidity": string; - "Remove list": string; - "Removing {0} {1} and {2} {3}": (string | string[])[]; - "Removing {0} {1} and{2} {3}": (string | string[])[]; - "Request Features": string; - Reset: string; - Return: string; - "Review swap": string; - "Search by token name or address": string; - "Search name or paste address": string; - "Select Pair": string; - "Select a network": string; - "Select a token": string; - "Select a token to find your v2 liquidity.": string; - "Select an action": string; - "Selected Range": string; - Self: string; - "Self Delegate": string; - "Set Price Range": string; - "Set Starting Price": string; - Settings: string; - "Share of Pool": string; - "Share of Pool:": string; - "Show Portis": string; - "Show closed positions": string; - Simple: string; - "Slippage tolerance": string; - "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; - "Something went wrong": string; - "Something went wrong.": string; - "Step 1. Get UNI-V2 Liquidity tokens": string; - "Submit new proposal": string; - "Submitting Proposal": string; - "Submitting Vote": string; - Succeeded: string; - Success: string; - Supply: string; - "Supplying {0} {1} and {2} {3}": (string | string[])[]; - Swap: string; - "Swap <0/> for exactly <1/>": string; - "Swap Anyway": string; - "Swap details": string; - "Swap exactly <0/> for <1/>": string; - "Swap failed: {0}": (string | string[])[]; - "Swap summary": string; - "Swapping {0} {1} for {2} {3}": (string | string[])[]; - "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; - "Tell us what you think \u2197": string; - "Thanks for being part of the Uniswap community <0/>": string; - "The % you will earn in fees.": string; - "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; - "The app fetches blockchain data from The Graph\u2019s hosted service.": string; - "The app fetches on-chain data and constructs contract calls with an Infura API.": string; - "The app fetches the optimal trade route from a Uniswap Labs server.": string; - "The app logs anonymized usage statistics in order to improve over time.": string; - "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; - "The cost of sending this transaction is more than half of the value of the input amount.": string; - "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; - "The estimated difference between the USD values of input and output amounts.": string; - "The input token cannot be transferred. There may be an issue with the input token.": string; - "The market price is outside your specified price range. Single-asset deposit only.": string; - "The most recent block number on this network. Prices update on every block.": string; - "The output token cannot be transferred. There may be an issue with the output token.": string; - "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; - "The price of this pool is within your selected range. Your position is currently earning fees.": string; - "The ratio of tokens you add will set the price of this pool.": string; - "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; - "There is no liquidity data.": string; - "This app uses the following third-party APIs:": string; - "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; - "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; - "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; - "This token is not supported in the Uniswap Labs app": string; - "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; - "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; - "Tip: Custom tokens are stored locally in your browser": string; - To: string; - "To (at least)": string; - "Token not supported": string; - Tokens: string; - "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; - "Top pools": string; - "Total deposited": string; - "Total deposits": string; - "Trade Route": string; - Trading: string; - "Transaction Settings": string; - "Transaction Submitted": string; - "Transaction completed in": string; - "Transaction deadline": string; - "Transaction pending": string; - "Transaction rejected.": string; - "Transaction submitted": string; - "Transfer Token": string; - "Try Again": string; - "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Turn On Expert Mode": string; - "UNI has arrived": string; - "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; - "UNI {0}/{1} Burned": (string | string[])[]; - "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; - "UNI-V2 {0}-{1}": (string | string[])[]; - "Unclaimed UNI": string; - "Unclaimed fees": string; - Undetermined: string; - "Unexpected error. Could not estimate gas for the swap.": string; - "Unexpected issue with estimating the gas. Please try again.": string; - "Uniswap Governance": string; - "Uniswap Labs' Terms of Service": string; - "Uniswap available in: <0>{0}": (string | string[])[]; - "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; - "Uniswap liquidity mining": string; - "Uniswap migration contract\u2197": string; - "Unknown Source": string; - "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; - "Unlock Votes": string; - "Unlock Voting": string; - "Unlocking Votes": string; - "Unsupported Asset": string; - "Unsupported Assets": string; - "Unsupported network\u2013switch to another to trade.": string; - Untitled: string; - Unwrap: string; - "Unwrap <0/> to {0}": (string | string[])[]; - "Update Delegation": string; - "Update list": string; - "Use the Uniswap Labs API to get faster quotes.": string; - User: string; - "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; - "V2 liquidity": string; - "V3 {0} Price:": (string | string[])[]; - "View accrued fees and analytics<0>\u2197": string; - "View list": string; - "View on Etherscan": string; - "View on Explorer": string; - "View transaction on Explorer": string; - Vote: string; - "Vote Against": string; - "Vote For": string; - "Vote against proposal {proposalId}": (string | string[])[]; - "Vote against proposal {proposalKey}": (string | string[])[]; - "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote for proposal {proposalId}": (string | string[])[]; - "Vote for proposal {proposalKey}": (string | string[])[]; - "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote to abstain on proposal {proposalId}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Voting ended {0}": (string | string[])[]; - "Voting ends approximately {0}": (string | string[])[]; - "Voting starts approximately {0}": (string | string[])[]; - "Waiting For Confirmation": string; - "Wallet Address or ENS name": string; - "Weekly Rewards": string; - "Welcome to team Unicorn :)": string; - "When you claim without withdrawing your liquidity remains in the mining pool.": string; - "When you withdraw, the contract will automagically claim UNI on your behalf!": string; - "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; - Withdraw: string; - "Withdraw & Claim": string; - "Withdraw deposited liquidity": string; - "Withdrawing {0} UNI-V2": (string | string[])[]; - "Withdrew UNI-V2!": string; - Wrap: string; - "Wrap <0/> to {0}": (string | string[])[]; - "Wrong Network": string; - "You already have an active or pending proposal": string; - "You are creating a pool": string; - "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; - "You are the first liquidity provider.": string; - "You can either vote on each proposal yourself or delegate your votes to a third party.": string; - "You can now trade {0}": (string | string[])[]; - "You don't have enough votes to submit a proposal": string; - "You don\u2019t have liquidity in this pool yet.": string; - "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; - "You may have lost your network connection.": string; - "You might consider waiting until the network fees go down to complete this transaction.": string; - "You must connect an account.": string; - "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; - "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; - "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; - "You will also collect fees earned from this position.": string; - "You will receive": string; - "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; - "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; - "Your V2 liquidity": string; - "Your active V3 liquidity positions will appear here.": string; - "Your liquidity deposits": string; - "Your pool share:": string; - "Your position": string; - "Your position has 0 liquidity, and is not earning fees.": string; - "Your position will appear here.": string; - "Your position will be 100% composed of {0} at this price": (string | string[])[]; - "Your position will be 100% {0} at this price.": (string | string[])[]; - "Your position will not earn fees or be used in trades until the market price moves into your range.": string; - "Your positions": string; - "Your rate": string; - "Your total pool tokens:": string; - "Your transaction cost will be much higher as it includes the gas to create the pool.": string; - "Your transaction may be frontrun": string; - "Your transaction may fail": string; - "Your transaction will revert if it has been pending for longer than this period of time.": string; - "Your transaction will revert if it is pending for more than this period of time.": string; - "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; - "Your transactions will appear here...": string; - "Your unclaimed UNI": string; - "after slippage": string; - confirm: string; - "for {0}": (string | string[])[]; - gwei: string; - "has socks emoji": string; - "here.": string; - "https:// or ipfs:// or ENS name": string; - minutes: string; - "via {0}": (string | string[])[]; - "via {0} token list": (string | string[])[]; - "{0, plural, one {Import token} other {Import tokens}}": (string | { - one: string; - other: string; - })[][]; - "{0}": string[][]; - "{0} %": (string | string[])[]; - "{0} <0/> per <1/>": (string | string[])[]; - "{0} Custom Tokens": (string | string[])[]; - "{0} Deposited": (string | string[])[]; - "{0} ETH": (string | string[])[]; - "{0} Fees Earned:": (string | string[])[]; - "{0} Pending": (string | string[])[]; - "{0} UNI": (string | string[])[]; - "{0} UNI / week": (string | string[])[]; - "{0} UNI-V2": (string | string[])[]; - "{0} UNI-V2 LP tokens available": (string | string[])[]; - "{0} Votes": (string | string[])[]; - "{0} per {1}": (string | string[])[]; - "{0} tokens": (string | string[])[]; - "{0} {1} Price:": (string | string[])[]; - "{0} {nativeCurrencySymbol}": (string | string[])[]; - "{0} \u2022 Added by user": (string | string[])[]; - "{0}%": (string | string[])[]; - "{0}% fee tier": (string | string[])[]; - "{0}% pool": (string | string[])[]; - "{0}% select": (string | string[])[]; - "{0}-{1} Liquidity Mining": (string | string[])[]; - "{0}/{1} LP NFT": (string | string[])[]; - "{0}/{1} LP Tokens": (string | string[])[]; - "{SOCKS_AMOUNT} UNI": (string | string[])[]; - "{USER_AMOUNT} UNI": (string | string[])[]; - "{activeTokensOnThisChain} tokens": (string | string[])[]; - "{integrator} fee": (string | string[])[]; - "{label} token bridge": (string | string[])[]; - "{min}m {sec}s": (string | string[])[]; - "{percentForSlider}%": (string | string[])[]; - "{sec}s": (string | string[])[]; - "{tokenB} per {tokenA}": (string | string[])[]; - "\u2190 Back to Pools Overview": string; -}; diff --git a/dist2/types/locales/uk-UA.d.ts b/dist2/types/locales/uk-UA.d.ts deleted file mode 100644 index 75120e0e5c9..00000000000 --- a/dist2/types/locales/uk-UA.d.ts +++ /dev/null @@ -1,593 +0,0 @@ -export const messages: { - "$-": string; - "$<0/>": string; - "${0}": (string | string[])[]; - "(${0})": (string | string[])[]; - "(View on Explorer)": string; - "(clear all)": string; - "(edit)": string; - "- Remove recipient": string; - "0 UNI / week": string; - "25%": string; - "50%": string; - "75%": string; - "<0/> All Proposals": string; - "<0/> Votes": string; - "<0>Account analytics and accrued fees<1> \u2197 ": string; - "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; - "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; - "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; - "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; - "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; - "<0>Unlock voting to prepare for the next proposal.": string; - "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; - "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; - About: string; - Accept: string; - Account: string; - Active: string; - Add: string; - "Add <0/> and <1/> to Uniswap V2": string; - "Add Delegate +": string; - "Add Liquidity": string; - "Add V2 Liquidity": string; - "Add liquidity.": string; - "Add more liquidity": string; - "Add {0} to Metamask <0/>": (string | string[])[]; - "Add {0}-{1} liquidity": (string | string[])[]; - "Add {0}/{1} V3 liquidity": (string | string[])[]; - "Added {0}": (string | string[])[]; - "Address has no available claim": string; - Against: string; - "Allow LP token migration": string; - "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; - "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; - Allowed: string; - Amount: string; - "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Approval pending <0/>": string; - Approve: string; - "Approve Token": string; - "Approve {0}": (string | string[])[]; - "Approve {0} first": (string | string[])[]; - Approved: string; - Approving: string; - "Approving {0}": (string | string[])[]; - Arbiscan: string; - "Arbitrum Bridge": string; - "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Are you sure?": string; - "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; - "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; - Auto: string; - "Auto Router API": string; - "Available to deposit: {0}": (string | string[])[]; - "Balance: {0}": (string | string[])[]; - "Best for exotic pairs.": string; - "Best for most pairs.": string; - "Best for stable pairs.": string; - "Best for very stable pairs.": string; - "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; - "Blocked address": string; - Bridge: string; - "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; - "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; - Canceled: string; - Change: string; - Charts: string; - "Check network status": string; - "Check out our v3 LP walkthrough and migration guides.": string; - Claim: string; - "Claim <0/> for {0}": (string | string[])[]; - "Claim UNI": string; - "Claim UNI Token": string; - "Claim UNI reward for {0}": (string | string[])[]; - "Claim fees": string; - "Claim your UNI tokens": string; - Claimed: string; - "Claimed UNI!": string; - "Claimed!": string; - Claiming: string; - "Claiming UNI": string; - "Claiming {0} UNI": (string | string[])[]; - "Clear All": string; - "Clear all": string; - Close: string; - Closed: string; - Collect: string; - "Collect as WETH": string; - "Collect fees": string; - "Collect {0}/{1} fees": (string | string[])[]; - Collected: string; - Collecting: string; - "Collecting fees": string; - "Collecting fees will withdraw currently available fees for you.": string; - Confirm: string; - "Confirm Supply": string; - "Confirm Swap": string; - "Confirm swap": string; - "Confirm this transaction in your wallet": string; - "Confirm transaction in wallet": string; - "Connect Wallet": string; - "Connect a wallet": string; - "Connect to a wallet to find pools": string; - "Connect to a wallet to view your V2 liquidity.": string; - "Connect to a wallet to view your liquidity.": string; - "Connect wallet to swap": string; - "Connected with {name}": (string | string[])[]; - Copied: string; - "Copy Address": string; - "Create Pool & Supply": string; - "Create Proposal": string; - "Create a pair": string; - "Create a pool": string; - "Create an issue on GitHub": string; - "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; - "Create pool.": string; - "Create {0}/{1} V3 pool": (string | string[])[]; - "Current price": string; - "Current {0} Price:": (string | string[])[]; - Custom: string; - "Dark Theme": string; - Defeated: string; - "Delegate Votes": string; - "Delegate voting power to {0}": (string | string[])[]; - "Delegated to:": string; - "Delegating votes": string; - Deposit: string; - "Deposit Amounts": string; - "Deposit UNI-V2 LP Tokens": string; - "Deposit liquidity": string; - "Deposit tokens to the {label} network.": (string | string[])[]; - "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; - "Deposited liquidity:": string; - "Deposited {0} UNI-V2": (string | string[])[]; - "Depositing Liquidity": string; - Description: string; - Detailed: string; - Details: string; - Disconnect: string; - Discord: string; - Dismiss: string; - Docs: string; - "Don\u2019t see one of your v2 positions? <0>Import it.": string; - "Earned UNI tokens represent voting shares in Uniswap governance.": string; - Edit: string; - "Efficiency Comparison": string; - "Enter a percent": string; - "Enter a recipient": string; - "Enter a valid slippage percentage": string; - "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; - "Enter an amount": string; - "Enter valid list location": string; - "Enter valid token address": string; - "Enter {0} amount": (string | string[])[]; - Error: string; - "Error connecting": string; - "Error connecting. Try refreshing the page.": string; - "Error details": string; - "Error importing list": string; - "Estimate may differ due to your wallet gas settings": string; - "Estimated network fee": string; - Etherscan: string; - Executed: string; - "Expanded results from inactive Token Lists": string; - "Expected Output": string; - "Expert Mode": string; - "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; - Expired: string; - "Explore Uniswap Analytics.": string; - "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; - "Fee Tier": string; - "Fee tier": string; - "Fetching best price...": string; - "Fetching best price\u2026": string; - For: string; - "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; - From: string; - "From (at most)": string; - "Full Range": string; - "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; - "Get support on Discord": string; - "Help Center": string; - Hide: string; - "Hide closed positions": string; - "High Price Impact": string; - "How this app uses APIs": string; - "I understand": string; - "If you purchase a token from this list, you may not be able to sell it back.": string; - Import: string; - "Import List": string; - "Import Pool": string; - "Import V2 Pool": string; - "Import at your own risk": string; - "In range": string; - "Increase Liquidity": string; - "Initial prices and pool share": string; - "Initializing...": string; - "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Install Metamask": string; - "Insufficient liquidity for this trade.": string; - "Insufficient {0}": (string | string[])[]; - "Insufficient {0} balance": (string | string[])[]; - "Interface Settings": string; - "Invalid pair": string; - "Invalid pair.": string; - "Invalid price input": string; - "Invalid range selected. The min price must be lower than the max price.": string; - "Invalid recipient": string; - Language: string; - Learn: string; - "Learn about providing liquidity": string; - "Learn more": string; - "Legal & Privacy": string; - "Light Theme": string; - Liquidity: string; - "Liquidity data not available.": string; - "Liquidity provider rewards": string; - "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - Lists: string; - Loaded: string; - Loading: string; - MAX: string; - Manage: string; - "Manage Liquidity in Rewards Pool": string; - "Manage Token Lists": string; - "Manage this pool.": string; - Max: string; - "Max Price": string; - "Max price": string; - "Max slippage": string; - "Max:": string; - "Maximum sent": string; - Menu: string; - Migrate: string; - "Migrate Liquidity to V3": string; - "Migrate V2 Liquidity": string; - "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; - "Migrate {0}/{1} liquidity to V3": (string | string[])[]; - Migrating: string; - "Min Price": string; - "Min price": string; - "Min:": string; - "Minimum received": string; - "Missing dependencies": string; - "Mock Toggle": string; - More: string; - "Network Fee": string; - "Network Warning": string; - "Network fees exceed 50% of the swap amount!": string; - "New Position": string; - "No V2 Liquidity found.": string; - "No active pools": string; - "No data": string; - "No description.": string; - "No liquidity found.": string; - "No pool found.": string; - "No proposals found.": string; - "No results found.": string; - "Not created": string; - OFF: string; - ON: string; - "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; - Off: string; - On: string; - "Once you are happy with the rate click supply to review.": string; - "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; - "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; - "Optimism Gateway": string; - "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Optimistic Etherscan": string; - "Out of range": string; - "Output is estimated.": string; - "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; - "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Output will be sent to <0>{0}": (string | string[])[]; - Owner: string; - "Participating pools": string; - Pending: string; - "Please confirm you would like to remove this list by typing REMOVE": string; - "Please connect to Layer 1 Ethereum": string; - "Please connect to a supported network in the dropdown menu or in your wallet.": string; - "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; - "Polygon Bridge": string; - Polygonscan: string; - Pool: string; - "Pool Found!": string; - "Pool Rate": string; - "Pool rate": string; - "Pool tokens in rewards pool:": string; - "Pooled {0}:": (string | string[])[]; - "Pools Overview": string; - Preview: string; - Price: string; - "Price Difference:": string; - "Price Impact": string; - "Price Impact Too High": string; - "Price Updated": string; - "Price impact": string; - "Price range": string; - "Price updated": string; - "Price:": string; - "Prices and pool share": string; - Proposal: string; - "Proposal Submitted": string; - "Proposal Title": string; - Proposals: string; - "Proposals submitted by community members will appear here.": string; - "Proposed Action": string; - Proposer: string; - "Protocol Disclaimer": string; - Queued: string; - Rates: string; - "Read more about UNI": string; - "Read more about Uniswap governance": string; - "Read more about providing liquidity": string; - "Read more about unsupported assets": string; - "Recent Transactions": string; - "Recent transactions": string; - Recipient: string; - "Reload the page": string; - Remove: string; - "Remove <0/> and <1/>": string; - "Remove Amount": string; - "Remove Delegate": string; - "Remove Liquidity": string; - "Remove list": string; - "Removing {0} {1} and {2} {3}": (string | string[])[]; - "Removing {0} {1} and{2} {3}": (string | string[])[]; - "Request Features": string; - Reset: string; - Return: string; - "Review swap": string; - "Search by token name or address": string; - "Search name or paste address": string; - "Select Pair": string; - "Select a network": string; - "Select a token": string; - "Select a token to find your v2 liquidity.": string; - "Select an action": string; - "Selected Range": string; - Self: string; - "Self Delegate": string; - "Set Price Range": string; - "Set Starting Price": string; - Settings: string; - "Share of Pool": string; - "Share of Pool:": string; - "Show Portis": string; - "Show closed positions": string; - Simple: string; - "Slippage tolerance": string; - "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; - "Something went wrong": string; - "Something went wrong.": string; - "Step 1. Get UNI-V2 Liquidity tokens": string; - "Submit new proposal": string; - "Submitting Proposal": string; - "Submitting Vote": string; - Succeeded: string; - Success: string; - Supply: string; - "Supplying {0} {1} and {2} {3}": (string | string[])[]; - Swap: string; - "Swap <0/> for exactly <1/>": string; - "Swap Anyway": string; - "Swap details": string; - "Swap exactly <0/> for <1/>": string; - "Swap failed: {0}": (string | string[])[]; - "Swap summary": string; - "Swapping {0} {1} for {2} {3}": (string | string[])[]; - "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; - "Tell us what you think \u2197": string; - "Thanks for being part of the Uniswap community <0/>": string; - "The % you will earn in fees.": string; - "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; - "The app fetches blockchain data from The Graph\u2019s hosted service.": string; - "The app fetches on-chain data and constructs contract calls with an Infura API.": string; - "The app fetches the optimal trade route from a Uniswap Labs server.": string; - "The app logs anonymized usage statistics in order to improve over time.": string; - "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; - "The cost of sending this transaction is more than half of the value of the input amount.": string; - "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; - "The estimated difference between the USD values of input and output amounts.": string; - "The input token cannot be transferred. There may be an issue with the input token.": string; - "The market price is outside your specified price range. Single-asset deposit only.": string; - "The most recent block number on this network. Prices update on every block.": string; - "The output token cannot be transferred. There may be an issue with the output token.": string; - "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; - "The price of this pool is within your selected range. Your position is currently earning fees.": string; - "The ratio of tokens you add will set the price of this pool.": string; - "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; - "There is no liquidity data.": string; - "This app uses the following third-party APIs:": string; - "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; - "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; - "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; - "This token is not supported in the Uniswap Labs app": string; - "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; - "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; - "Tip: Custom tokens are stored locally in your browser": string; - To: string; - "To (at least)": string; - "Token not supported": string; - Tokens: string; - "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; - "Top pools": string; - "Total deposited": string; - "Total deposits": string; - "Trade Route": string; - Trading: string; - "Transaction Settings": string; - "Transaction Submitted": string; - "Transaction completed in": string; - "Transaction deadline": string; - "Transaction pending": string; - "Transaction rejected.": string; - "Transaction submitted": string; - "Transfer Token": string; - "Try Again": string; - "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Turn On Expert Mode": string; - "UNI has arrived": string; - "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; - "UNI {0}/{1} Burned": (string | string[])[]; - "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; - "UNI-V2 {0}-{1}": (string | string[])[]; - "Unclaimed UNI": string; - "Unclaimed fees": string; - Undetermined: string; - "Unexpected error. Could not estimate gas for the swap.": string; - "Unexpected issue with estimating the gas. Please try again.": string; - "Uniswap Governance": string; - "Uniswap Labs' Terms of Service": string; - "Uniswap available in: <0>{0}": (string | string[])[]; - "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; - "Uniswap liquidity mining": string; - "Uniswap migration contract\u2197": string; - "Unknown Source": string; - "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; - "Unlock Votes": string; - "Unlock Voting": string; - "Unlocking Votes": string; - "Unsupported Asset": string; - "Unsupported Assets": string; - "Unsupported network\u2013switch to another to trade.": string; - Untitled: string; - Unwrap: string; - "Unwrap <0/> to {0}": (string | string[])[]; - "Update Delegation": string; - "Update list": string; - "Use the Uniswap Labs API to get faster quotes.": string; - User: string; - "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; - "V2 liquidity": string; - "V3 {0} Price:": (string | string[])[]; - "View accrued fees and analytics<0>\u2197": string; - "View list": string; - "View on Etherscan": string; - "View on Explorer": string; - "View transaction on Explorer": string; - Vote: string; - "Vote Against": string; - "Vote For": string; - "Vote against proposal {proposalId}": (string | string[])[]; - "Vote against proposal {proposalKey}": (string | string[])[]; - "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote for proposal {proposalId}": (string | string[])[]; - "Vote for proposal {proposalKey}": (string | string[])[]; - "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote to abstain on proposal {proposalId}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Voting ended {0}": (string | string[])[]; - "Voting ends approximately {0}": (string | string[])[]; - "Voting starts approximately {0}": (string | string[])[]; - "Waiting For Confirmation": string; - "Wallet Address or ENS name": string; - "Weekly Rewards": string; - "Welcome to team Unicorn :)": string; - "When you claim without withdrawing your liquidity remains in the mining pool.": string; - "When you withdraw, the contract will automagically claim UNI on your behalf!": string; - "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; - Withdraw: string; - "Withdraw & Claim": string; - "Withdraw deposited liquidity": string; - "Withdrawing {0} UNI-V2": (string | string[])[]; - "Withdrew UNI-V2!": string; - Wrap: string; - "Wrap <0/> to {0}": (string | string[])[]; - "Wrong Network": string; - "You already have an active or pending proposal": string; - "You are creating a pool": string; - "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; - "You are the first liquidity provider.": string; - "You can either vote on each proposal yourself or delegate your votes to a third party.": string; - "You can now trade {0}": (string | string[])[]; - "You don't have enough votes to submit a proposal": string; - "You don\u2019t have liquidity in this pool yet.": string; - "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; - "You may have lost your network connection.": string; - "You might consider waiting until the network fees go down to complete this transaction.": string; - "You must connect an account.": string; - "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; - "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; - "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; - "You will also collect fees earned from this position.": string; - "You will receive": string; - "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; - "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; - "Your V2 liquidity": string; - "Your active V3 liquidity positions will appear here.": string; - "Your liquidity deposits": string; - "Your pool share:": string; - "Your position": string; - "Your position has 0 liquidity, and is not earning fees.": string; - "Your position will appear here.": string; - "Your position will be 100% composed of {0} at this price": (string | string[])[]; - "Your position will be 100% {0} at this price.": (string | string[])[]; - "Your position will not earn fees or be used in trades until the market price moves into your range.": string; - "Your positions": string; - "Your rate": string; - "Your total pool tokens:": string; - "Your transaction cost will be much higher as it includes the gas to create the pool.": string; - "Your transaction may be frontrun": string; - "Your transaction may fail": string; - "Your transaction will revert if it has been pending for longer than this period of time.": string; - "Your transaction will revert if it is pending for more than this period of time.": string; - "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; - "Your transactions will appear here...": string; - "Your unclaimed UNI": string; - "after slippage": string; - confirm: string; - "for {0}": (string | string[])[]; - gwei: string; - "has socks emoji": string; - "here.": string; - "https:// or ipfs:// or ENS name": string; - minutes: string; - "via {0}": (string | string[])[]; - "via {0} token list": (string | string[])[]; - "{0, plural, one {Import token} other {Import tokens}}": (string | { - one: string; - other: string; - })[][]; - "{0}": string[][]; - "{0} %": (string | string[])[]; - "{0} <0/> per <1/>": (string | string[])[]; - "{0} Custom Tokens": (string | string[])[]; - "{0} Deposited": (string | string[])[]; - "{0} ETH": (string | string[])[]; - "{0} Fees Earned:": (string | string[])[]; - "{0} Pending": (string | string[])[]; - "{0} UNI": (string | string[])[]; - "{0} UNI / week": (string | string[])[]; - "{0} UNI-V2": (string | string[])[]; - "{0} UNI-V2 LP tokens available": (string | string[])[]; - "{0} Votes": (string | string[])[]; - "{0} per {1}": (string | string[])[]; - "{0} tokens": (string | string[])[]; - "{0} {1} Price:": (string | string[])[]; - "{0} {nativeCurrencySymbol}": (string | string[])[]; - "{0} \u2022 Added by user": (string | string[])[]; - "{0}%": (string | string[])[]; - "{0}% fee tier": (string | string[])[]; - "{0}% pool": (string | string[])[]; - "{0}% select": (string | string[])[]; - "{0}-{1} Liquidity Mining": (string | string[])[]; - "{0}/{1} LP NFT": (string | string[])[]; - "{0}/{1} LP Tokens": (string | string[])[]; - "{SOCKS_AMOUNT} UNI": (string | string[])[]; - "{USER_AMOUNT} UNI": (string | string[])[]; - "{activeTokensOnThisChain} tokens": (string | string[])[]; - "{integrator} fee": (string | string[])[]; - "{label} token bridge": (string | string[])[]; - "{min}m {sec}s": (string | string[])[]; - "{percentForSlider}%": (string | string[])[]; - "{sec}s": (string | string[])[]; - "{tokenB} per {tokenA}": (string | string[])[]; - "\u2190 Back to Pools Overview": string; -}; diff --git a/dist2/types/locales/vi-VN.d.ts b/dist2/types/locales/vi-VN.d.ts deleted file mode 100644 index 75120e0e5c9..00000000000 --- a/dist2/types/locales/vi-VN.d.ts +++ /dev/null @@ -1,593 +0,0 @@ -export const messages: { - "$-": string; - "$<0/>": string; - "${0}": (string | string[])[]; - "(${0})": (string | string[])[]; - "(View on Explorer)": string; - "(clear all)": string; - "(edit)": string; - "- Remove recipient": string; - "0 UNI / week": string; - "25%": string; - "50%": string; - "75%": string; - "<0/> All Proposals": string; - "<0/> Votes": string; - "<0>Account analytics and accrued fees<1> \u2197 ": string; - "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; - "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; - "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; - "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; - "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; - "<0>Unlock voting to prepare for the next proposal.": string; - "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; - "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; - About: string; - Accept: string; - Account: string; - Active: string; - Add: string; - "Add <0/> and <1/> to Uniswap V2": string; - "Add Delegate +": string; - "Add Liquidity": string; - "Add V2 Liquidity": string; - "Add liquidity.": string; - "Add more liquidity": string; - "Add {0} to Metamask <0/>": (string | string[])[]; - "Add {0}-{1} liquidity": (string | string[])[]; - "Add {0}/{1} V3 liquidity": (string | string[])[]; - "Added {0}": (string | string[])[]; - "Address has no available claim": string; - Against: string; - "Allow LP token migration": string; - "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; - "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; - Allowed: string; - Amount: string; - "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Approval pending <0/>": string; - Approve: string; - "Approve Token": string; - "Approve {0}": (string | string[])[]; - "Approve {0} first": (string | string[])[]; - Approved: string; - Approving: string; - "Approving {0}": (string | string[])[]; - Arbiscan: string; - "Arbitrum Bridge": string; - "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Are you sure?": string; - "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; - "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; - Auto: string; - "Auto Router API": string; - "Available to deposit: {0}": (string | string[])[]; - "Balance: {0}": (string | string[])[]; - "Best for exotic pairs.": string; - "Best for most pairs.": string; - "Best for stable pairs.": string; - "Best for very stable pairs.": string; - "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; - "Blocked address": string; - Bridge: string; - "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; - "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; - Canceled: string; - Change: string; - Charts: string; - "Check network status": string; - "Check out our v3 LP walkthrough and migration guides.": string; - Claim: string; - "Claim <0/> for {0}": (string | string[])[]; - "Claim UNI": string; - "Claim UNI Token": string; - "Claim UNI reward for {0}": (string | string[])[]; - "Claim fees": string; - "Claim your UNI tokens": string; - Claimed: string; - "Claimed UNI!": string; - "Claimed!": string; - Claiming: string; - "Claiming UNI": string; - "Claiming {0} UNI": (string | string[])[]; - "Clear All": string; - "Clear all": string; - Close: string; - Closed: string; - Collect: string; - "Collect as WETH": string; - "Collect fees": string; - "Collect {0}/{1} fees": (string | string[])[]; - Collected: string; - Collecting: string; - "Collecting fees": string; - "Collecting fees will withdraw currently available fees for you.": string; - Confirm: string; - "Confirm Supply": string; - "Confirm Swap": string; - "Confirm swap": string; - "Confirm this transaction in your wallet": string; - "Confirm transaction in wallet": string; - "Connect Wallet": string; - "Connect a wallet": string; - "Connect to a wallet to find pools": string; - "Connect to a wallet to view your V2 liquidity.": string; - "Connect to a wallet to view your liquidity.": string; - "Connect wallet to swap": string; - "Connected with {name}": (string | string[])[]; - Copied: string; - "Copy Address": string; - "Create Pool & Supply": string; - "Create Proposal": string; - "Create a pair": string; - "Create a pool": string; - "Create an issue on GitHub": string; - "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; - "Create pool.": string; - "Create {0}/{1} V3 pool": (string | string[])[]; - "Current price": string; - "Current {0} Price:": (string | string[])[]; - Custom: string; - "Dark Theme": string; - Defeated: string; - "Delegate Votes": string; - "Delegate voting power to {0}": (string | string[])[]; - "Delegated to:": string; - "Delegating votes": string; - Deposit: string; - "Deposit Amounts": string; - "Deposit UNI-V2 LP Tokens": string; - "Deposit liquidity": string; - "Deposit tokens to the {label} network.": (string | string[])[]; - "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; - "Deposited liquidity:": string; - "Deposited {0} UNI-V2": (string | string[])[]; - "Depositing Liquidity": string; - Description: string; - Detailed: string; - Details: string; - Disconnect: string; - Discord: string; - Dismiss: string; - Docs: string; - "Don\u2019t see one of your v2 positions? <0>Import it.": string; - "Earned UNI tokens represent voting shares in Uniswap governance.": string; - Edit: string; - "Efficiency Comparison": string; - "Enter a percent": string; - "Enter a recipient": string; - "Enter a valid slippage percentage": string; - "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; - "Enter an amount": string; - "Enter valid list location": string; - "Enter valid token address": string; - "Enter {0} amount": (string | string[])[]; - Error: string; - "Error connecting": string; - "Error connecting. Try refreshing the page.": string; - "Error details": string; - "Error importing list": string; - "Estimate may differ due to your wallet gas settings": string; - "Estimated network fee": string; - Etherscan: string; - Executed: string; - "Expanded results from inactive Token Lists": string; - "Expected Output": string; - "Expert Mode": string; - "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; - Expired: string; - "Explore Uniswap Analytics.": string; - "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; - "Fee Tier": string; - "Fee tier": string; - "Fetching best price...": string; - "Fetching best price\u2026": string; - For: string; - "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; - From: string; - "From (at most)": string; - "Full Range": string; - "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; - "Get support on Discord": string; - "Help Center": string; - Hide: string; - "Hide closed positions": string; - "High Price Impact": string; - "How this app uses APIs": string; - "I understand": string; - "If you purchase a token from this list, you may not be able to sell it back.": string; - Import: string; - "Import List": string; - "Import Pool": string; - "Import V2 Pool": string; - "Import at your own risk": string; - "In range": string; - "Increase Liquidity": string; - "Initial prices and pool share": string; - "Initializing...": string; - "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Install Metamask": string; - "Insufficient liquidity for this trade.": string; - "Insufficient {0}": (string | string[])[]; - "Insufficient {0} balance": (string | string[])[]; - "Interface Settings": string; - "Invalid pair": string; - "Invalid pair.": string; - "Invalid price input": string; - "Invalid range selected. The min price must be lower than the max price.": string; - "Invalid recipient": string; - Language: string; - Learn: string; - "Learn about providing liquidity": string; - "Learn more": string; - "Legal & Privacy": string; - "Light Theme": string; - Liquidity: string; - "Liquidity data not available.": string; - "Liquidity provider rewards": string; - "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - Lists: string; - Loaded: string; - Loading: string; - MAX: string; - Manage: string; - "Manage Liquidity in Rewards Pool": string; - "Manage Token Lists": string; - "Manage this pool.": string; - Max: string; - "Max Price": string; - "Max price": string; - "Max slippage": string; - "Max:": string; - "Maximum sent": string; - Menu: string; - Migrate: string; - "Migrate Liquidity to V3": string; - "Migrate V2 Liquidity": string; - "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; - "Migrate {0}/{1} liquidity to V3": (string | string[])[]; - Migrating: string; - "Min Price": string; - "Min price": string; - "Min:": string; - "Minimum received": string; - "Missing dependencies": string; - "Mock Toggle": string; - More: string; - "Network Fee": string; - "Network Warning": string; - "Network fees exceed 50% of the swap amount!": string; - "New Position": string; - "No V2 Liquidity found.": string; - "No active pools": string; - "No data": string; - "No description.": string; - "No liquidity found.": string; - "No pool found.": string; - "No proposals found.": string; - "No results found.": string; - "Not created": string; - OFF: string; - ON: string; - "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; - Off: string; - On: string; - "Once you are happy with the rate click supply to review.": string; - "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; - "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; - "Optimism Gateway": string; - "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Optimistic Etherscan": string; - "Out of range": string; - "Output is estimated.": string; - "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; - "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Output will be sent to <0>{0}": (string | string[])[]; - Owner: string; - "Participating pools": string; - Pending: string; - "Please confirm you would like to remove this list by typing REMOVE": string; - "Please connect to Layer 1 Ethereum": string; - "Please connect to a supported network in the dropdown menu or in your wallet.": string; - "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; - "Polygon Bridge": string; - Polygonscan: string; - Pool: string; - "Pool Found!": string; - "Pool Rate": string; - "Pool rate": string; - "Pool tokens in rewards pool:": string; - "Pooled {0}:": (string | string[])[]; - "Pools Overview": string; - Preview: string; - Price: string; - "Price Difference:": string; - "Price Impact": string; - "Price Impact Too High": string; - "Price Updated": string; - "Price impact": string; - "Price range": string; - "Price updated": string; - "Price:": string; - "Prices and pool share": string; - Proposal: string; - "Proposal Submitted": string; - "Proposal Title": string; - Proposals: string; - "Proposals submitted by community members will appear here.": string; - "Proposed Action": string; - Proposer: string; - "Protocol Disclaimer": string; - Queued: string; - Rates: string; - "Read more about UNI": string; - "Read more about Uniswap governance": string; - "Read more about providing liquidity": string; - "Read more about unsupported assets": string; - "Recent Transactions": string; - "Recent transactions": string; - Recipient: string; - "Reload the page": string; - Remove: string; - "Remove <0/> and <1/>": string; - "Remove Amount": string; - "Remove Delegate": string; - "Remove Liquidity": string; - "Remove list": string; - "Removing {0} {1} and {2} {3}": (string | string[])[]; - "Removing {0} {1} and{2} {3}": (string | string[])[]; - "Request Features": string; - Reset: string; - Return: string; - "Review swap": string; - "Search by token name or address": string; - "Search name or paste address": string; - "Select Pair": string; - "Select a network": string; - "Select a token": string; - "Select a token to find your v2 liquidity.": string; - "Select an action": string; - "Selected Range": string; - Self: string; - "Self Delegate": string; - "Set Price Range": string; - "Set Starting Price": string; - Settings: string; - "Share of Pool": string; - "Share of Pool:": string; - "Show Portis": string; - "Show closed positions": string; - Simple: string; - "Slippage tolerance": string; - "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; - "Something went wrong": string; - "Something went wrong.": string; - "Step 1. Get UNI-V2 Liquidity tokens": string; - "Submit new proposal": string; - "Submitting Proposal": string; - "Submitting Vote": string; - Succeeded: string; - Success: string; - Supply: string; - "Supplying {0} {1} and {2} {3}": (string | string[])[]; - Swap: string; - "Swap <0/> for exactly <1/>": string; - "Swap Anyway": string; - "Swap details": string; - "Swap exactly <0/> for <1/>": string; - "Swap failed: {0}": (string | string[])[]; - "Swap summary": string; - "Swapping {0} {1} for {2} {3}": (string | string[])[]; - "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; - "Tell us what you think \u2197": string; - "Thanks for being part of the Uniswap community <0/>": string; - "The % you will earn in fees.": string; - "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; - "The app fetches blockchain data from The Graph\u2019s hosted service.": string; - "The app fetches on-chain data and constructs contract calls with an Infura API.": string; - "The app fetches the optimal trade route from a Uniswap Labs server.": string; - "The app logs anonymized usage statistics in order to improve over time.": string; - "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; - "The cost of sending this transaction is more than half of the value of the input amount.": string; - "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; - "The estimated difference between the USD values of input and output amounts.": string; - "The input token cannot be transferred. There may be an issue with the input token.": string; - "The market price is outside your specified price range. Single-asset deposit only.": string; - "The most recent block number on this network. Prices update on every block.": string; - "The output token cannot be transferred. There may be an issue with the output token.": string; - "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; - "The price of this pool is within your selected range. Your position is currently earning fees.": string; - "The ratio of tokens you add will set the price of this pool.": string; - "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; - "There is no liquidity data.": string; - "This app uses the following third-party APIs:": string; - "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; - "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; - "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; - "This token is not supported in the Uniswap Labs app": string; - "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; - "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; - "Tip: Custom tokens are stored locally in your browser": string; - To: string; - "To (at least)": string; - "Token not supported": string; - Tokens: string; - "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; - "Top pools": string; - "Total deposited": string; - "Total deposits": string; - "Trade Route": string; - Trading: string; - "Transaction Settings": string; - "Transaction Submitted": string; - "Transaction completed in": string; - "Transaction deadline": string; - "Transaction pending": string; - "Transaction rejected.": string; - "Transaction submitted": string; - "Transfer Token": string; - "Try Again": string; - "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Turn On Expert Mode": string; - "UNI has arrived": string; - "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; - "UNI {0}/{1} Burned": (string | string[])[]; - "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; - "UNI-V2 {0}-{1}": (string | string[])[]; - "Unclaimed UNI": string; - "Unclaimed fees": string; - Undetermined: string; - "Unexpected error. Could not estimate gas for the swap.": string; - "Unexpected issue with estimating the gas. Please try again.": string; - "Uniswap Governance": string; - "Uniswap Labs' Terms of Service": string; - "Uniswap available in: <0>{0}": (string | string[])[]; - "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; - "Uniswap liquidity mining": string; - "Uniswap migration contract\u2197": string; - "Unknown Source": string; - "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; - "Unlock Votes": string; - "Unlock Voting": string; - "Unlocking Votes": string; - "Unsupported Asset": string; - "Unsupported Assets": string; - "Unsupported network\u2013switch to another to trade.": string; - Untitled: string; - Unwrap: string; - "Unwrap <0/> to {0}": (string | string[])[]; - "Update Delegation": string; - "Update list": string; - "Use the Uniswap Labs API to get faster quotes.": string; - User: string; - "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; - "V2 liquidity": string; - "V3 {0} Price:": (string | string[])[]; - "View accrued fees and analytics<0>\u2197": string; - "View list": string; - "View on Etherscan": string; - "View on Explorer": string; - "View transaction on Explorer": string; - Vote: string; - "Vote Against": string; - "Vote For": string; - "Vote against proposal {proposalId}": (string | string[])[]; - "Vote against proposal {proposalKey}": (string | string[])[]; - "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote for proposal {proposalId}": (string | string[])[]; - "Vote for proposal {proposalKey}": (string | string[])[]; - "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote to abstain on proposal {proposalId}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Voting ended {0}": (string | string[])[]; - "Voting ends approximately {0}": (string | string[])[]; - "Voting starts approximately {0}": (string | string[])[]; - "Waiting For Confirmation": string; - "Wallet Address or ENS name": string; - "Weekly Rewards": string; - "Welcome to team Unicorn :)": string; - "When you claim without withdrawing your liquidity remains in the mining pool.": string; - "When you withdraw, the contract will automagically claim UNI on your behalf!": string; - "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; - Withdraw: string; - "Withdraw & Claim": string; - "Withdraw deposited liquidity": string; - "Withdrawing {0} UNI-V2": (string | string[])[]; - "Withdrew UNI-V2!": string; - Wrap: string; - "Wrap <0/> to {0}": (string | string[])[]; - "Wrong Network": string; - "You already have an active or pending proposal": string; - "You are creating a pool": string; - "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; - "You are the first liquidity provider.": string; - "You can either vote on each proposal yourself or delegate your votes to a third party.": string; - "You can now trade {0}": (string | string[])[]; - "You don't have enough votes to submit a proposal": string; - "You don\u2019t have liquidity in this pool yet.": string; - "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; - "You may have lost your network connection.": string; - "You might consider waiting until the network fees go down to complete this transaction.": string; - "You must connect an account.": string; - "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; - "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; - "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; - "You will also collect fees earned from this position.": string; - "You will receive": string; - "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; - "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; - "Your V2 liquidity": string; - "Your active V3 liquidity positions will appear here.": string; - "Your liquidity deposits": string; - "Your pool share:": string; - "Your position": string; - "Your position has 0 liquidity, and is not earning fees.": string; - "Your position will appear here.": string; - "Your position will be 100% composed of {0} at this price": (string | string[])[]; - "Your position will be 100% {0} at this price.": (string | string[])[]; - "Your position will not earn fees or be used in trades until the market price moves into your range.": string; - "Your positions": string; - "Your rate": string; - "Your total pool tokens:": string; - "Your transaction cost will be much higher as it includes the gas to create the pool.": string; - "Your transaction may be frontrun": string; - "Your transaction may fail": string; - "Your transaction will revert if it has been pending for longer than this period of time.": string; - "Your transaction will revert if it is pending for more than this period of time.": string; - "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; - "Your transactions will appear here...": string; - "Your unclaimed UNI": string; - "after slippage": string; - confirm: string; - "for {0}": (string | string[])[]; - gwei: string; - "has socks emoji": string; - "here.": string; - "https:// or ipfs:// or ENS name": string; - minutes: string; - "via {0}": (string | string[])[]; - "via {0} token list": (string | string[])[]; - "{0, plural, one {Import token} other {Import tokens}}": (string | { - one: string; - other: string; - })[][]; - "{0}": string[][]; - "{0} %": (string | string[])[]; - "{0} <0/> per <1/>": (string | string[])[]; - "{0} Custom Tokens": (string | string[])[]; - "{0} Deposited": (string | string[])[]; - "{0} ETH": (string | string[])[]; - "{0} Fees Earned:": (string | string[])[]; - "{0} Pending": (string | string[])[]; - "{0} UNI": (string | string[])[]; - "{0} UNI / week": (string | string[])[]; - "{0} UNI-V2": (string | string[])[]; - "{0} UNI-V2 LP tokens available": (string | string[])[]; - "{0} Votes": (string | string[])[]; - "{0} per {1}": (string | string[])[]; - "{0} tokens": (string | string[])[]; - "{0} {1} Price:": (string | string[])[]; - "{0} {nativeCurrencySymbol}": (string | string[])[]; - "{0} \u2022 Added by user": (string | string[])[]; - "{0}%": (string | string[])[]; - "{0}% fee tier": (string | string[])[]; - "{0}% pool": (string | string[])[]; - "{0}% select": (string | string[])[]; - "{0}-{1} Liquidity Mining": (string | string[])[]; - "{0}/{1} LP NFT": (string | string[])[]; - "{0}/{1} LP Tokens": (string | string[])[]; - "{SOCKS_AMOUNT} UNI": (string | string[])[]; - "{USER_AMOUNT} UNI": (string | string[])[]; - "{activeTokensOnThisChain} tokens": (string | string[])[]; - "{integrator} fee": (string | string[])[]; - "{label} token bridge": (string | string[])[]; - "{min}m {sec}s": (string | string[])[]; - "{percentForSlider}%": (string | string[])[]; - "{sec}s": (string | string[])[]; - "{tokenB} per {tokenA}": (string | string[])[]; - "\u2190 Back to Pools Overview": string; -}; diff --git a/dist2/types/locales/zh-CN.d.ts b/dist2/types/locales/zh-CN.d.ts deleted file mode 100644 index 75120e0e5c9..00000000000 --- a/dist2/types/locales/zh-CN.d.ts +++ /dev/null @@ -1,593 +0,0 @@ -export const messages: { - "$-": string; - "$<0/>": string; - "${0}": (string | string[])[]; - "(${0})": (string | string[])[]; - "(View on Explorer)": string; - "(clear all)": string; - "(edit)": string; - "- Remove recipient": string; - "0 UNI / week": string; - "25%": string; - "50%": string; - "75%": string; - "<0/> All Proposals": string; - "<0/> Votes": string; - "<0>Account analytics and accrued fees<1> \u2197 ": string; - "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; - "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; - "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; - "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; - "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; - "<0>Unlock voting to prepare for the next proposal.": string; - "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; - "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; - About: string; - Accept: string; - Account: string; - Active: string; - Add: string; - "Add <0/> and <1/> to Uniswap V2": string; - "Add Delegate +": string; - "Add Liquidity": string; - "Add V2 Liquidity": string; - "Add liquidity.": string; - "Add more liquidity": string; - "Add {0} to Metamask <0/>": (string | string[])[]; - "Add {0}-{1} liquidity": (string | string[])[]; - "Add {0}/{1} V3 liquidity": (string | string[])[]; - "Added {0}": (string | string[])[]; - "Address has no available claim": string; - Against: string; - "Allow LP token migration": string; - "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; - "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; - Allowed: string; - Amount: string; - "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Approval pending <0/>": string; - Approve: string; - "Approve Token": string; - "Approve {0}": (string | string[])[]; - "Approve {0} first": (string | string[])[]; - Approved: string; - Approving: string; - "Approving {0}": (string | string[])[]; - Arbiscan: string; - "Arbitrum Bridge": string; - "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Are you sure?": string; - "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; - "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; - Auto: string; - "Auto Router API": string; - "Available to deposit: {0}": (string | string[])[]; - "Balance: {0}": (string | string[])[]; - "Best for exotic pairs.": string; - "Best for most pairs.": string; - "Best for stable pairs.": string; - "Best for very stable pairs.": string; - "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; - "Blocked address": string; - Bridge: string; - "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; - "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; - Canceled: string; - Change: string; - Charts: string; - "Check network status": string; - "Check out our v3 LP walkthrough and migration guides.": string; - Claim: string; - "Claim <0/> for {0}": (string | string[])[]; - "Claim UNI": string; - "Claim UNI Token": string; - "Claim UNI reward for {0}": (string | string[])[]; - "Claim fees": string; - "Claim your UNI tokens": string; - Claimed: string; - "Claimed UNI!": string; - "Claimed!": string; - Claiming: string; - "Claiming UNI": string; - "Claiming {0} UNI": (string | string[])[]; - "Clear All": string; - "Clear all": string; - Close: string; - Closed: string; - Collect: string; - "Collect as WETH": string; - "Collect fees": string; - "Collect {0}/{1} fees": (string | string[])[]; - Collected: string; - Collecting: string; - "Collecting fees": string; - "Collecting fees will withdraw currently available fees for you.": string; - Confirm: string; - "Confirm Supply": string; - "Confirm Swap": string; - "Confirm swap": string; - "Confirm this transaction in your wallet": string; - "Confirm transaction in wallet": string; - "Connect Wallet": string; - "Connect a wallet": string; - "Connect to a wallet to find pools": string; - "Connect to a wallet to view your V2 liquidity.": string; - "Connect to a wallet to view your liquidity.": string; - "Connect wallet to swap": string; - "Connected with {name}": (string | string[])[]; - Copied: string; - "Copy Address": string; - "Create Pool & Supply": string; - "Create Proposal": string; - "Create a pair": string; - "Create a pool": string; - "Create an issue on GitHub": string; - "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; - "Create pool.": string; - "Create {0}/{1} V3 pool": (string | string[])[]; - "Current price": string; - "Current {0} Price:": (string | string[])[]; - Custom: string; - "Dark Theme": string; - Defeated: string; - "Delegate Votes": string; - "Delegate voting power to {0}": (string | string[])[]; - "Delegated to:": string; - "Delegating votes": string; - Deposit: string; - "Deposit Amounts": string; - "Deposit UNI-V2 LP Tokens": string; - "Deposit liquidity": string; - "Deposit tokens to the {label} network.": (string | string[])[]; - "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; - "Deposited liquidity:": string; - "Deposited {0} UNI-V2": (string | string[])[]; - "Depositing Liquidity": string; - Description: string; - Detailed: string; - Details: string; - Disconnect: string; - Discord: string; - Dismiss: string; - Docs: string; - "Don\u2019t see one of your v2 positions? <0>Import it.": string; - "Earned UNI tokens represent voting shares in Uniswap governance.": string; - Edit: string; - "Efficiency Comparison": string; - "Enter a percent": string; - "Enter a recipient": string; - "Enter a valid slippage percentage": string; - "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; - "Enter an amount": string; - "Enter valid list location": string; - "Enter valid token address": string; - "Enter {0} amount": (string | string[])[]; - Error: string; - "Error connecting": string; - "Error connecting. Try refreshing the page.": string; - "Error details": string; - "Error importing list": string; - "Estimate may differ due to your wallet gas settings": string; - "Estimated network fee": string; - Etherscan: string; - Executed: string; - "Expanded results from inactive Token Lists": string; - "Expected Output": string; - "Expert Mode": string; - "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; - Expired: string; - "Explore Uniswap Analytics.": string; - "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; - "Fee Tier": string; - "Fee tier": string; - "Fetching best price...": string; - "Fetching best price\u2026": string; - For: string; - "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; - From: string; - "From (at most)": string; - "Full Range": string; - "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; - "Get support on Discord": string; - "Help Center": string; - Hide: string; - "Hide closed positions": string; - "High Price Impact": string; - "How this app uses APIs": string; - "I understand": string; - "If you purchase a token from this list, you may not be able to sell it back.": string; - Import: string; - "Import List": string; - "Import Pool": string; - "Import V2 Pool": string; - "Import at your own risk": string; - "In range": string; - "Increase Liquidity": string; - "Initial prices and pool share": string; - "Initializing...": string; - "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Install Metamask": string; - "Insufficient liquidity for this trade.": string; - "Insufficient {0}": (string | string[])[]; - "Insufficient {0} balance": (string | string[])[]; - "Interface Settings": string; - "Invalid pair": string; - "Invalid pair.": string; - "Invalid price input": string; - "Invalid range selected. The min price must be lower than the max price.": string; - "Invalid recipient": string; - Language: string; - Learn: string; - "Learn about providing liquidity": string; - "Learn more": string; - "Legal & Privacy": string; - "Light Theme": string; - Liquidity: string; - "Liquidity data not available.": string; - "Liquidity provider rewards": string; - "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - Lists: string; - Loaded: string; - Loading: string; - MAX: string; - Manage: string; - "Manage Liquidity in Rewards Pool": string; - "Manage Token Lists": string; - "Manage this pool.": string; - Max: string; - "Max Price": string; - "Max price": string; - "Max slippage": string; - "Max:": string; - "Maximum sent": string; - Menu: string; - Migrate: string; - "Migrate Liquidity to V3": string; - "Migrate V2 Liquidity": string; - "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; - "Migrate {0}/{1} liquidity to V3": (string | string[])[]; - Migrating: string; - "Min Price": string; - "Min price": string; - "Min:": string; - "Minimum received": string; - "Missing dependencies": string; - "Mock Toggle": string; - More: string; - "Network Fee": string; - "Network Warning": string; - "Network fees exceed 50% of the swap amount!": string; - "New Position": string; - "No V2 Liquidity found.": string; - "No active pools": string; - "No data": string; - "No description.": string; - "No liquidity found.": string; - "No pool found.": string; - "No proposals found.": string; - "No results found.": string; - "Not created": string; - OFF: string; - ON: string; - "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; - Off: string; - On: string; - "Once you are happy with the rate click supply to review.": string; - "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; - "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; - "Optimism Gateway": string; - "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Optimistic Etherscan": string; - "Out of range": string; - "Output is estimated.": string; - "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; - "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Output will be sent to <0>{0}": (string | string[])[]; - Owner: string; - "Participating pools": string; - Pending: string; - "Please confirm you would like to remove this list by typing REMOVE": string; - "Please connect to Layer 1 Ethereum": string; - "Please connect to a supported network in the dropdown menu or in your wallet.": string; - "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; - "Polygon Bridge": string; - Polygonscan: string; - Pool: string; - "Pool Found!": string; - "Pool Rate": string; - "Pool rate": string; - "Pool tokens in rewards pool:": string; - "Pooled {0}:": (string | string[])[]; - "Pools Overview": string; - Preview: string; - Price: string; - "Price Difference:": string; - "Price Impact": string; - "Price Impact Too High": string; - "Price Updated": string; - "Price impact": string; - "Price range": string; - "Price updated": string; - "Price:": string; - "Prices and pool share": string; - Proposal: string; - "Proposal Submitted": string; - "Proposal Title": string; - Proposals: string; - "Proposals submitted by community members will appear here.": string; - "Proposed Action": string; - Proposer: string; - "Protocol Disclaimer": string; - Queued: string; - Rates: string; - "Read more about UNI": string; - "Read more about Uniswap governance": string; - "Read more about providing liquidity": string; - "Read more about unsupported assets": string; - "Recent Transactions": string; - "Recent transactions": string; - Recipient: string; - "Reload the page": string; - Remove: string; - "Remove <0/> and <1/>": string; - "Remove Amount": string; - "Remove Delegate": string; - "Remove Liquidity": string; - "Remove list": string; - "Removing {0} {1} and {2} {3}": (string | string[])[]; - "Removing {0} {1} and{2} {3}": (string | string[])[]; - "Request Features": string; - Reset: string; - Return: string; - "Review swap": string; - "Search by token name or address": string; - "Search name or paste address": string; - "Select Pair": string; - "Select a network": string; - "Select a token": string; - "Select a token to find your v2 liquidity.": string; - "Select an action": string; - "Selected Range": string; - Self: string; - "Self Delegate": string; - "Set Price Range": string; - "Set Starting Price": string; - Settings: string; - "Share of Pool": string; - "Share of Pool:": string; - "Show Portis": string; - "Show closed positions": string; - Simple: string; - "Slippage tolerance": string; - "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; - "Something went wrong": string; - "Something went wrong.": string; - "Step 1. Get UNI-V2 Liquidity tokens": string; - "Submit new proposal": string; - "Submitting Proposal": string; - "Submitting Vote": string; - Succeeded: string; - Success: string; - Supply: string; - "Supplying {0} {1} and {2} {3}": (string | string[])[]; - Swap: string; - "Swap <0/> for exactly <1/>": string; - "Swap Anyway": string; - "Swap details": string; - "Swap exactly <0/> for <1/>": string; - "Swap failed: {0}": (string | string[])[]; - "Swap summary": string; - "Swapping {0} {1} for {2} {3}": (string | string[])[]; - "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; - "Tell us what you think \u2197": string; - "Thanks for being part of the Uniswap community <0/>": string; - "The % you will earn in fees.": string; - "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; - "The app fetches blockchain data from The Graph\u2019s hosted service.": string; - "The app fetches on-chain data and constructs contract calls with an Infura API.": string; - "The app fetches the optimal trade route from a Uniswap Labs server.": string; - "The app logs anonymized usage statistics in order to improve over time.": string; - "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; - "The cost of sending this transaction is more than half of the value of the input amount.": string; - "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; - "The estimated difference between the USD values of input and output amounts.": string; - "The input token cannot be transferred. There may be an issue with the input token.": string; - "The market price is outside your specified price range. Single-asset deposit only.": string; - "The most recent block number on this network. Prices update on every block.": string; - "The output token cannot be transferred. There may be an issue with the output token.": string; - "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; - "The price of this pool is within your selected range. Your position is currently earning fees.": string; - "The ratio of tokens you add will set the price of this pool.": string; - "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; - "There is no liquidity data.": string; - "This app uses the following third-party APIs:": string; - "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; - "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; - "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; - "This token is not supported in the Uniswap Labs app": string; - "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; - "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; - "Tip: Custom tokens are stored locally in your browser": string; - To: string; - "To (at least)": string; - "Token not supported": string; - Tokens: string; - "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; - "Top pools": string; - "Total deposited": string; - "Total deposits": string; - "Trade Route": string; - Trading: string; - "Transaction Settings": string; - "Transaction Submitted": string; - "Transaction completed in": string; - "Transaction deadline": string; - "Transaction pending": string; - "Transaction rejected.": string; - "Transaction submitted": string; - "Transfer Token": string; - "Try Again": string; - "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Turn On Expert Mode": string; - "UNI has arrived": string; - "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; - "UNI {0}/{1} Burned": (string | string[])[]; - "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; - "UNI-V2 {0}-{1}": (string | string[])[]; - "Unclaimed UNI": string; - "Unclaimed fees": string; - Undetermined: string; - "Unexpected error. Could not estimate gas for the swap.": string; - "Unexpected issue with estimating the gas. Please try again.": string; - "Uniswap Governance": string; - "Uniswap Labs' Terms of Service": string; - "Uniswap available in: <0>{0}": (string | string[])[]; - "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; - "Uniswap liquidity mining": string; - "Uniswap migration contract\u2197": string; - "Unknown Source": string; - "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; - "Unlock Votes": string; - "Unlock Voting": string; - "Unlocking Votes": string; - "Unsupported Asset": string; - "Unsupported Assets": string; - "Unsupported network\u2013switch to another to trade.": string; - Untitled: string; - Unwrap: string; - "Unwrap <0/> to {0}": (string | string[])[]; - "Update Delegation": string; - "Update list": string; - "Use the Uniswap Labs API to get faster quotes.": string; - User: string; - "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; - "V2 liquidity": string; - "V3 {0} Price:": (string | string[])[]; - "View accrued fees and analytics<0>\u2197": string; - "View list": string; - "View on Etherscan": string; - "View on Explorer": string; - "View transaction on Explorer": string; - Vote: string; - "Vote Against": string; - "Vote For": string; - "Vote against proposal {proposalId}": (string | string[])[]; - "Vote against proposal {proposalKey}": (string | string[])[]; - "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote for proposal {proposalId}": (string | string[])[]; - "Vote for proposal {proposalKey}": (string | string[])[]; - "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote to abstain on proposal {proposalId}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Voting ended {0}": (string | string[])[]; - "Voting ends approximately {0}": (string | string[])[]; - "Voting starts approximately {0}": (string | string[])[]; - "Waiting For Confirmation": string; - "Wallet Address or ENS name": string; - "Weekly Rewards": string; - "Welcome to team Unicorn :)": string; - "When you claim without withdrawing your liquidity remains in the mining pool.": string; - "When you withdraw, the contract will automagically claim UNI on your behalf!": string; - "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; - Withdraw: string; - "Withdraw & Claim": string; - "Withdraw deposited liquidity": string; - "Withdrawing {0} UNI-V2": (string | string[])[]; - "Withdrew UNI-V2!": string; - Wrap: string; - "Wrap <0/> to {0}": (string | string[])[]; - "Wrong Network": string; - "You already have an active or pending proposal": string; - "You are creating a pool": string; - "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; - "You are the first liquidity provider.": string; - "You can either vote on each proposal yourself or delegate your votes to a third party.": string; - "You can now trade {0}": (string | string[])[]; - "You don't have enough votes to submit a proposal": string; - "You don\u2019t have liquidity in this pool yet.": string; - "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; - "You may have lost your network connection.": string; - "You might consider waiting until the network fees go down to complete this transaction.": string; - "You must connect an account.": string; - "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; - "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; - "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; - "You will also collect fees earned from this position.": string; - "You will receive": string; - "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; - "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; - "Your V2 liquidity": string; - "Your active V3 liquidity positions will appear here.": string; - "Your liquidity deposits": string; - "Your pool share:": string; - "Your position": string; - "Your position has 0 liquidity, and is not earning fees.": string; - "Your position will appear here.": string; - "Your position will be 100% composed of {0} at this price": (string | string[])[]; - "Your position will be 100% {0} at this price.": (string | string[])[]; - "Your position will not earn fees or be used in trades until the market price moves into your range.": string; - "Your positions": string; - "Your rate": string; - "Your total pool tokens:": string; - "Your transaction cost will be much higher as it includes the gas to create the pool.": string; - "Your transaction may be frontrun": string; - "Your transaction may fail": string; - "Your transaction will revert if it has been pending for longer than this period of time.": string; - "Your transaction will revert if it is pending for more than this period of time.": string; - "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; - "Your transactions will appear here...": string; - "Your unclaimed UNI": string; - "after slippage": string; - confirm: string; - "for {0}": (string | string[])[]; - gwei: string; - "has socks emoji": string; - "here.": string; - "https:// or ipfs:// or ENS name": string; - minutes: string; - "via {0}": (string | string[])[]; - "via {0} token list": (string | string[])[]; - "{0, plural, one {Import token} other {Import tokens}}": (string | { - one: string; - other: string; - })[][]; - "{0}": string[][]; - "{0} %": (string | string[])[]; - "{0} <0/> per <1/>": (string | string[])[]; - "{0} Custom Tokens": (string | string[])[]; - "{0} Deposited": (string | string[])[]; - "{0} ETH": (string | string[])[]; - "{0} Fees Earned:": (string | string[])[]; - "{0} Pending": (string | string[])[]; - "{0} UNI": (string | string[])[]; - "{0} UNI / week": (string | string[])[]; - "{0} UNI-V2": (string | string[])[]; - "{0} UNI-V2 LP tokens available": (string | string[])[]; - "{0} Votes": (string | string[])[]; - "{0} per {1}": (string | string[])[]; - "{0} tokens": (string | string[])[]; - "{0} {1} Price:": (string | string[])[]; - "{0} {nativeCurrencySymbol}": (string | string[])[]; - "{0} \u2022 Added by user": (string | string[])[]; - "{0}%": (string | string[])[]; - "{0}% fee tier": (string | string[])[]; - "{0}% pool": (string | string[])[]; - "{0}% select": (string | string[])[]; - "{0}-{1} Liquidity Mining": (string | string[])[]; - "{0}/{1} LP NFT": (string | string[])[]; - "{0}/{1} LP Tokens": (string | string[])[]; - "{SOCKS_AMOUNT} UNI": (string | string[])[]; - "{USER_AMOUNT} UNI": (string | string[])[]; - "{activeTokensOnThisChain} tokens": (string | string[])[]; - "{integrator} fee": (string | string[])[]; - "{label} token bridge": (string | string[])[]; - "{min}m {sec}s": (string | string[])[]; - "{percentForSlider}%": (string | string[])[]; - "{sec}s": (string | string[])[]; - "{tokenB} per {tokenA}": (string | string[])[]; - "\u2190 Back to Pools Overview": string; -}; diff --git a/dist2/types/locales/zh-TW.d.ts b/dist2/types/locales/zh-TW.d.ts deleted file mode 100644 index 75120e0e5c9..00000000000 --- a/dist2/types/locales/zh-TW.d.ts +++ /dev/null @@ -1,593 +0,0 @@ -export const messages: { - "$-": string; - "$<0/>": string; - "${0}": (string | string[])[]; - "(${0})": (string | string[])[]; - "(View on Explorer)": string; - "(clear all)": string; - "(edit)": string; - "- Remove recipient": string; - "0 UNI / week": string; - "25%": string; - "50%": string; - "75%": string; - "<0/> All Proposals": string; - "<0/> Votes": string; - "<0>Account analytics and accrued fees<1> \u2197 ": string; - "<0>Current Price:<1><2/><3>{0} per {1}": (string | string[])[]; - "<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.": string; - "<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.": string; - "<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.": string; - "<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.": string; - "<0>Unlock voting to prepare for the next proposal.": string; - "<0>\uD83C\uDF89 Welcome to team Unicorn :) <1>\uD83C\uDF89": string; - "A minimum threshold of 0.25% of the total UNI supply is required to submit proposals": string; - About: string; - Accept: string; - Account: string; - Active: string; - Add: string; - "Add <0/> and <1/> to Uniswap V2": string; - "Add Delegate +": string; - "Add Liquidity": string; - "Add V2 Liquidity": string; - "Add liquidity.": string; - "Add more liquidity": string; - "Add {0} to Metamask <0/>": (string | string[])[]; - "Add {0}-{1} liquidity": (string | string[])[]; - "Add {0}/{1} V3 liquidity": (string | string[])[]; - "Added {0}": (string | string[])[]; - "Address has no available claim": string; - Against: string; - "Allow LP token migration": string; - "Allow high price impact trades and skip the confirm screen. Use at your own risk.": string; - "Allow the Uniswap Protocol to use your {0}": (string | string[])[]; - Allowed: string; - Amount: string; - "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Approval pending <0/>": string; - Approve: string; - "Approve Token": string; - "Approve {0}": (string | string[])[]; - "Approve {0} first": (string | string[])[]; - Approved: string; - Approving: string; - "Approving {0}": (string | string[])[]; - Arbiscan: string; - "Arbitrum Bridge": string; - "Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Are you sure?": string; - "As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI": string; - "At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.": (string | string[])[]; - Auto: string; - "Auto Router API": string; - "Available to deposit: {0}": (string | string[])[]; - "Balance: {0}": (string | string[])[]; - "Best for exotic pairs.": string; - "Best for most pairs.": string; - "Best for stable pairs.": string; - "Best for very stable pairs.": string; - "Best price route costs ~{formattedGasPriceString} in gas.": (string | string[])[]; - "Blocked address": string; - Bridge: string; - "By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.": string; - "By connecting a wallet, you agree to Uniswap Labs\u2019 <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.": string; - Canceled: string; - Change: string; - Charts: string; - "Check network status": string; - "Check out our v3 LP walkthrough and migration guides.": string; - Claim: string; - "Claim <0/> for {0}": (string | string[])[]; - "Claim UNI": string; - "Claim UNI Token": string; - "Claim UNI reward for {0}": (string | string[])[]; - "Claim fees": string; - "Claim your UNI tokens": string; - Claimed: string; - "Claimed UNI!": string; - "Claimed!": string; - Claiming: string; - "Claiming UNI": string; - "Claiming {0} UNI": (string | string[])[]; - "Clear All": string; - "Clear all": string; - Close: string; - Closed: string; - Collect: string; - "Collect as WETH": string; - "Collect fees": string; - "Collect {0}/{1} fees": (string | string[])[]; - Collected: string; - Collecting: string; - "Collecting fees": string; - "Collecting fees will withdraw currently available fees for you.": string; - Confirm: string; - "Confirm Supply": string; - "Confirm Swap": string; - "Confirm swap": string; - "Confirm this transaction in your wallet": string; - "Confirm transaction in wallet": string; - "Connect Wallet": string; - "Connect a wallet": string; - "Connect to a wallet to find pools": string; - "Connect to a wallet to view your V2 liquidity.": string; - "Connect to a wallet to view your liquidity.": string; - "Connect wallet to swap": string; - "Connected with {name}": (string | string[])[]; - Copied: string; - "Copy Address": string; - "Create Pool & Supply": string; - "Create Proposal": string; - "Create a pair": string; - "Create a pool": string; - "Create an issue on GitHub": string; - "Create pool and add {0}/{1} V3 liquidity": (string | string[])[]; - "Create pool.": string; - "Create {0}/{1} V3 pool": (string | string[])[]; - "Current price": string; - "Current {0} Price:": (string | string[])[]; - Custom: string; - "Dark Theme": string; - Defeated: string; - "Delegate Votes": string; - "Delegate voting power to {0}": (string | string[])[]; - "Delegated to:": string; - "Delegating votes": string; - Deposit: string; - "Deposit Amounts": string; - "Deposit UNI-V2 LP Tokens": string; - "Deposit liquidity": string; - "Deposit tokens to the {label} network.": (string | string[])[]; - "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.": string; - "Deposited liquidity:": string; - "Deposited {0} UNI-V2": (string | string[])[]; - "Depositing Liquidity": string; - Description: string; - Detailed: string; - Details: string; - Disconnect: string; - Discord: string; - Dismiss: string; - Docs: string; - "Don\u2019t see one of your v2 positions? <0>Import it.": string; - "Earned UNI tokens represent voting shares in Uniswap governance.": string; - Edit: string; - "Efficiency Comparison": string; - "Enter a percent": string; - "Enter a recipient": string; - "Enter a valid slippage percentage": string; - "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.": string; - "Enter an amount": string; - "Enter valid list location": string; - "Enter valid token address": string; - "Enter {0} amount": (string | string[])[]; - Error: string; - "Error connecting": string; - "Error connecting. Try refreshing the page.": string; - "Error details": string; - "Error importing list": string; - "Estimate may differ due to your wallet gas settings": string; - "Estimated network fee": string; - Etherscan: string; - Executed: string; - "Expanded results from inactive Token Lists": string; - "Expected Output": string; - "Expert Mode": string; - "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.": string; - Expired: string; - "Explore Uniswap Analytics.": string; - "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.": (string | string[])[]; - "Fee Tier": string; - "Fee tier": string; - "Fetching best price...": string; - "Fetching best price\u2026": string; - For: string; - "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.": string; - From: string; - "From (at most)": string; - "Full Range": string; - "Full range positions may earn less fees than concentrated positions. Learn more <0>here.": string; - "Get support on Discord": string; - "Help Center": string; - Hide: string; - "Hide closed positions": string; - "High Price Impact": string; - "How this app uses APIs": string; - "I understand": string; - "If you purchase a token from this list, you may not be able to sell it back.": string; - Import: string; - "Import List": string; - "Import Pool": string; - "Import V2 Pool": string; - "Import at your own risk": string; - "In range": string; - "Increase Liquidity": string; - "Initial prices and pool share": string; - "Initializing...": string; - "Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Install Metamask": string; - "Insufficient liquidity for this trade.": string; - "Insufficient {0}": (string | string[])[]; - "Insufficient {0} balance": (string | string[])[]; - "Interface Settings": string; - "Invalid pair": string; - "Invalid pair.": string; - "Invalid price input": string; - "Invalid range selected. The min price must be lower than the max price.": string; - "Invalid recipient": string; - Language: string; - Learn: string; - "Learn about providing liquidity": string; - "Learn more": string; - "Legal & Privacy": string; - "Light Theme": string; - Liquidity: string; - "Liquidity data not available.": string; - "Liquidity provider rewards": string; - "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.": string; - Lists: string; - Loaded: string; - Loading: string; - MAX: string; - Manage: string; - "Manage Liquidity in Rewards Pool": string; - "Manage Token Lists": string; - "Manage this pool.": string; - Max: string; - "Max Price": string; - "Max price": string; - "Max slippage": string; - "Max:": string; - "Maximum sent": string; - Menu: string; - Migrate: string; - "Migrate Liquidity to V3": string; - "Migrate V2 Liquidity": string; - "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.": string; - "Migrate {0}/{1} liquidity to V3": (string | string[])[]; - Migrating: string; - "Min Price": string; - "Min price": string; - "Min:": string; - "Minimum received": string; - "Missing dependencies": string; - "Mock Toggle": string; - More: string; - "Network Fee": string; - "Network Warning": string; - "Network fees exceed 50% of the swap amount!": string; - "New Position": string; - "No V2 Liquidity found.": string; - "No active pools": string; - "No data": string; - "No description.": string; - "No liquidity found.": string; - "No pool found.": string; - "No proposals found.": string; - "No results found.": string; - "Not created": string; - OFF: string; - ON: string; - "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.": string; - Off: string; - On: string; - "Once you are happy with the rate click supply to review.": string; - "Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.": (string | string[])[]; - "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.": string; - "Optimism Gateway": string; - "Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.": string; - "Optimistic Etherscan": string; - "Out of range": string; - "Output is estimated.": string; - "Output is estimated. If the price changes by more than {0}% your transaction will revert.": (string | string[])[]; - "Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.": (string | string[])[]; - "Output will be sent to <0>{0}": (string | string[])[]; - Owner: string; - "Participating pools": string; - Pending: string; - "Please confirm you would like to remove this list by typing REMOVE": string; - "Please connect to Layer 1 Ethereum": string; - "Please connect to a supported network in the dropdown menu or in your wallet.": string; - "Please type the word \"{confirmWord}\" to enable expert mode.": (string | string[])[]; - "Polygon Bridge": string; - Polygonscan: string; - Pool: string; - "Pool Found!": string; - "Pool Rate": string; - "Pool rate": string; - "Pool tokens in rewards pool:": string; - "Pooled {0}:": (string | string[])[]; - "Pools Overview": string; - Preview: string; - Price: string; - "Price Difference:": string; - "Price Impact": string; - "Price Impact Too High": string; - "Price Updated": string; - "Price impact": string; - "Price range": string; - "Price updated": string; - "Price:": string; - "Prices and pool share": string; - Proposal: string; - "Proposal Submitted": string; - "Proposal Title": string; - Proposals: string; - "Proposals submitted by community members will appear here.": string; - "Proposed Action": string; - Proposer: string; - "Protocol Disclaimer": string; - Queued: string; - Rates: string; - "Read more about UNI": string; - "Read more about Uniswap governance": string; - "Read more about providing liquidity": string; - "Read more about unsupported assets": string; - "Recent Transactions": string; - "Recent transactions": string; - Recipient: string; - "Reload the page": string; - Remove: string; - "Remove <0/> and <1/>": string; - "Remove Amount": string; - "Remove Delegate": string; - "Remove Liquidity": string; - "Remove list": string; - "Removing {0} {1} and {2} {3}": (string | string[])[]; - "Removing {0} {1} and{2} {3}": (string | string[])[]; - "Request Features": string; - Reset: string; - Return: string; - "Review swap": string; - "Search by token name or address": string; - "Search name or paste address": string; - "Select Pair": string; - "Select a network": string; - "Select a token": string; - "Select a token to find your v2 liquidity.": string; - "Select an action": string; - "Selected Range": string; - Self: string; - "Self Delegate": string; - "Set Price Range": string; - "Set Starting Price": string; - Settings: string; - "Share of Pool": string; - "Share of Pool:": string; - "Show Portis": string; - "Show closed positions": string; - Simple: string; - "Slippage tolerance": string; - "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.": string; - "Something went wrong": string; - "Something went wrong.": string; - "Step 1. Get UNI-V2 Liquidity tokens": string; - "Submit new proposal": string; - "Submitting Proposal": string; - "Submitting Vote": string; - Succeeded: string; - Success: string; - Supply: string; - "Supplying {0} {1} and {2} {3}": (string | string[])[]; - Swap: string; - "Swap <0/> for exactly <1/>": string; - "Swap Anyway": string; - "Swap details": string; - "Swap exactly <0/> for <1/>": string; - "Swap failed: {0}": (string | string[])[]; - "Swap summary": string; - "Swapping {0} {1} for {2} {3}": (string | string[])[]; - "Take a 10 minute survey to help us improve your experience in the Uniswap app.": string; - "Tell us what you think \u2197": string; - "Thanks for being part of the Uniswap community <0/>": string; - "The % you will earn in fees.": string; - "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.": string; - "The app fetches blockchain data from The Graph\u2019s hosted service.": string; - "The app fetches on-chain data and constructs contract calls with an Infura API.": string; - "The app fetches the optimal trade route from a Uniswap Labs server.": string; - "The app logs anonymized usage statistics in order to improve over time.": string; - "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.": string; - "The cost of sending this transaction is more than half of the value of the input amount.": string; - "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.": string; - "The estimated difference between the USD values of input and output amounts.": string; - "The input token cannot be transferred. There may be an issue with the input token.": string; - "The market price is outside your specified price range. Single-asset deposit only.": string; - "The most recent block number on this network. Prices update on every block.": string; - "The output token cannot be transferred. There may be an issue with the output token.": string; - "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "The price of this pool is outside of your selected range. Your position is not currently earning fees.": string; - "The price of this pool is within your selected range. Your position is currently earning fees.": string; - "The ratio of tokens you add will set the price of this pool.": string; - "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.": string; - "There is no liquidity data.": string; - "This app uses the following third-party APIs:": string; - "This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.": string; - "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.": string; - "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.": string; - "This token is not supported in the Uniswap Labs app": string; - "This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the": (string | string[])[]; - "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.": string; - "Tip: Custom tokens are stored locally in your browser": string; - To: string; - "To (at least)": string; - "Token not supported": string; - Tokens: string; - "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.": string; - "Top pools": string; - "Total deposited": string; - "Total deposits": string; - "Trade Route": string; - Trading: string; - "Transaction Settings": string; - "Transaction Submitted": string; - "Transaction completed in": string; - "Transaction deadline": string; - "Transaction pending": string; - "Transaction rejected.": string; - "Transaction submitted": string; - "Transfer Token": string; - "Try Again": string; - "Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.": string; - "Turn On Expert Mode": string; - "UNI has arrived": string; - "UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.": string; - "UNI {0}/{1} Burned": (string | string[])[]; - "UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.": (string | string[])[]; - "UNI-V2 {0}-{1}": (string | string[])[]; - "Unclaimed UNI": string; - "Unclaimed fees": string; - Undetermined: string; - "Unexpected error. Could not estimate gas for the swap.": string; - "Unexpected issue with estimating the gas. Please try again.": string; - "Uniswap Governance": string; - "Uniswap Labs' Terms of Service": string; - "Uniswap available in: <0>{0}": (string | string[])[]; - "Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.": string; - "Uniswap liquidity mining": string; - "Uniswap migration contract\u2197": string; - "Unknown Source": string; - "Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.": (string | string[])[]; - "Unlock Votes": string; - "Unlock Voting": string; - "Unlocking Votes": string; - "Unsupported Asset": string; - "Unsupported Assets": string; - "Unsupported network\u2013switch to another to trade.": string; - Untitled: string; - Unwrap: string; - "Unwrap <0/> to {0}": (string | string[])[]; - "Update Delegation": string; - "Update list": string; - "Use the Uniswap Labs API to get faster quotes.": string; - User: string; - "V2 is not available on Layer 2. Switch to Layer 1 Ethereum.": string; - "V2 liquidity": string; - "V3 {0} Price:": (string | string[])[]; - "View accrued fees and analytics<0>\u2197": string; - "View list": string; - "View on Etherscan": string; - "View on Explorer": string; - "View transaction on Explorer": string; - Vote: string; - "Vote Against": string; - "Vote For": string; - "Vote against proposal {proposalId}": (string | string[])[]; - "Vote against proposal {proposalKey}": (string | string[])[]; - "Vote against proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote for proposal {proposalId}": (string | string[])[]; - "Vote for proposal {proposalKey}": (string | string[])[]; - "Vote for proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Vote to abstain on proposal {proposalId}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey}": (string | string[])[]; - "Vote to abstain on proposal {proposalKey} with reason \"{0}\"": (string | string[])[]; - "Voting ended {0}": (string | string[])[]; - "Voting ends approximately {0}": (string | string[])[]; - "Voting starts approximately {0}": (string | string[])[]; - "Waiting For Confirmation": string; - "Wallet Address or ENS name": string; - "Weekly Rewards": string; - "Welcome to team Unicorn :)": string; - "When you claim without withdrawing your liquidity remains in the mining pool.": string; - "When you withdraw, the contract will automagically claim UNI on your behalf!": string; - "When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.": string; - Withdraw: string; - "Withdraw & Claim": string; - "Withdraw deposited liquidity": string; - "Withdrawing {0} UNI-V2": (string | string[])[]; - "Withdrew UNI-V2!": string; - Wrap: string; - "Wrap <0/> to {0}": (string | string[])[]; - "Wrong Network": string; - "You already have an active or pending proposal": string; - "You are creating a pool": string; - "You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.": (string | string[])[]; - "You are the first liquidity provider.": string; - "You can either vote on each proposal yourself or delegate your votes to a third party.": string; - "You can now trade {0}": (string | string[])[]; - "You don't have enough votes to submit a proposal": string; - "You don\u2019t have liquidity in this pool yet.": string; - "You may have lost your network connection, or {label} might be down right now.": (string | string[])[]; - "You may have lost your network connection.": string; - "You might consider waiting until the network fees go down to complete this transaction.": string; - "You must connect an account.": string; - "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.": (string | string[])[]; - "You must have {formattedProposalThreshold} votes to submit a proposal": (string | string[])[]; - "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.": string; - "You will also collect fees earned from this position.": string; - "You will receive": string; - "You will receive at least {0} {1} or the transaction will revert.": (string | string[])[]; - "You will send at most {0} {1} or the transaction will revert.": (string | string[])[]; - "Your V2 liquidity": string; - "Your active V3 liquidity positions will appear here.": string; - "Your liquidity deposits": string; - "Your pool share:": string; - "Your position": string; - "Your position has 0 liquidity, and is not earning fees.": string; - "Your position will appear here.": string; - "Your position will be 100% composed of {0} at this price": (string | string[])[]; - "Your position will be 100% {0} at this price.": (string | string[])[]; - "Your position will not earn fees or be used in trades until the market price moves into your range.": string; - "Your positions": string; - "Your rate": string; - "Your total pool tokens:": string; - "Your transaction cost will be much higher as it includes the gas to create the pool.": string; - "Your transaction may be frontrun": string; - "Your transaction may fail": string; - "Your transaction will revert if it has been pending for longer than this period of time.": string; - "Your transaction will revert if it is pending for more than this period of time.": string; - "Your transaction will revert if the price changes unfavorably by more than this percentage.": string; - "Your transactions will appear here...": string; - "Your unclaimed UNI": string; - "after slippage": string; - confirm: string; - "for {0}": (string | string[])[]; - gwei: string; - "has socks emoji": string; - "here.": string; - "https:// or ipfs:// or ENS name": string; - minutes: string; - "via {0}": (string | string[])[]; - "via {0} token list": (string | string[])[]; - "{0, plural, one {Import token} other {Import tokens}}": (string | { - one: string; - other: string; - })[][]; - "{0}": string[][]; - "{0} %": (string | string[])[]; - "{0} <0/> per <1/>": (string | string[])[]; - "{0} Custom Tokens": (string | string[])[]; - "{0} Deposited": (string | string[])[]; - "{0} ETH": (string | string[])[]; - "{0} Fees Earned:": (string | string[])[]; - "{0} Pending": (string | string[])[]; - "{0} UNI": (string | string[])[]; - "{0} UNI / week": (string | string[])[]; - "{0} UNI-V2": (string | string[])[]; - "{0} UNI-V2 LP tokens available": (string | string[])[]; - "{0} Votes": (string | string[])[]; - "{0} per {1}": (string | string[])[]; - "{0} tokens": (string | string[])[]; - "{0} {1} Price:": (string | string[])[]; - "{0} {nativeCurrencySymbol}": (string | string[])[]; - "{0} \u2022 Added by user": (string | string[])[]; - "{0}%": (string | string[])[]; - "{0}% fee tier": (string | string[])[]; - "{0}% pool": (string | string[])[]; - "{0}% select": (string | string[])[]; - "{0}-{1} Liquidity Mining": (string | string[])[]; - "{0}/{1} LP NFT": (string | string[])[]; - "{0}/{1} LP Tokens": (string | string[])[]; - "{SOCKS_AMOUNT} UNI": (string | string[])[]; - "{USER_AMOUNT} UNI": (string | string[])[]; - "{activeTokensOnThisChain} tokens": (string | string[])[]; - "{integrator} fee": (string | string[])[]; - "{label} token bridge": (string | string[])[]; - "{min}m {sec}s": (string | string[])[]; - "{percentForSlider}%": (string | string[])[]; - "{sec}s": (string | string[])[]; - "{tokenB} per {tokenA}": (string | string[])[]; - "\u2190 Back to Pools Overview": string; -}; diff --git a/dist2/types/pages/AddLiquidity/Review.d.ts b/dist2/types/pages/AddLiquidity/Review.d.ts deleted file mode 100644 index 6488da1035e..00000000000 --- a/dist2/types/pages/AddLiquidity/Review.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -/// -import { Currency, CurrencyAmount, Price } from '@uniswap/sdk-core'; -import { Position } from '@uniswap/v3-sdk'; -import { Bound, Field } from '../../state/mint/v3/actions'; -export declare function Review({ position, outOfRange, ticksAtLimit, }: { - position?: Position; - existingPosition?: Position; - parsedAmounts: { - [field in Field]?: CurrencyAmount; - }; - priceLower?: Price; - priceUpper?: Price; - outOfRange: boolean; - ticksAtLimit: { - [bound in Bound]?: boolean | undefined; - }; -}): JSX.Element; diff --git a/dist2/types/pages/AddLiquidity/index.d.ts b/dist2/types/pages/AddLiquidity/index.d.ts deleted file mode 100644 index 6e71b58d105..00000000000 --- a/dist2/types/pages/AddLiquidity/index.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -/// -import { RouteComponentProps } from 'react-router-dom'; -export default function AddLiquidity({ match: { params: { currencyIdA, currencyIdB, feeAmount: feeAmountFromUrl, tokenId }, }, history, }: RouteComponentProps<{ - currencyIdA?: string; - currencyIdB?: string; - feeAmount?: string; - tokenId?: string; -}>): JSX.Element; diff --git a/dist2/types/pages/AddLiquidity/redirects.d.ts b/dist2/types/pages/AddLiquidity/redirects.d.ts deleted file mode 100644 index 1f09b02e7e3..00000000000 --- a/dist2/types/pages/AddLiquidity/redirects.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -/// -import { RouteComponentProps } from 'react-router-dom'; -export declare function RedirectDuplicateTokenIds(props: RouteComponentProps<{ - currencyIdA: string; - currencyIdB: string; - feeAmount?: string; -}>): JSX.Element; diff --git a/dist2/types/pages/AddLiquidity/styled.d.ts b/dist2/types/pages/AddLiquidity/styled.d.ts deleted file mode 100644 index 635dfbc4621..00000000000 --- a/dist2/types/pages/AddLiquidity/styled.d.ts +++ /dev/null @@ -1,38 +0,0 @@ -/// -import CurrencyInputPanel from 'components/CurrencyInputPanel'; -export declare const PageWrapper: import("styled-components").StyledComponent<"main", import("styled-components").DefaultTheme, { - margin?: string | undefined; - maxWidth?: string | undefined; -} & { - wide: boolean; -}, never>; -export declare const Wrapper: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; -export declare const ScrollablePage: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; -export declare const DynamicSection: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, { - gap?: string | undefined; - justify?: "end" | "space-between" | "stretch" | "center" | "flex-end" | "flex-start" | "start" | undefined; -} & { - disabled?: boolean | undefined; -}, never>; -export declare const CurrencyDropdown: import("styled-components").StyledComponent; -export declare const StyledInput: import("styled-components").StyledComponent void; - error?: boolean | undefined; - fontSize?: string | undefined; - align?: "left" | "right" | undefined; - prependSymbol?: string | undefined; -} & Omit, "ref" | "onChange" | "as">>, import("styled-components").DefaultTheme, {}, never>; -export declare const ResponsiveTwoColumns: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, { - wide: boolean; -}, never>; -export declare const RightContainer: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, { - gap?: string | undefined; - justify?: "end" | "space-between" | "stretch" | "center" | "flex-end" | "flex-start" | "start" | undefined; -}, never>; -export declare const StackedContainer: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; -export declare const StackedItem: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, { - zIndex?: number | undefined; -}, never>; -export declare const MediumOnly: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; -export declare const HideMedium: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; diff --git a/dist2/types/pages/AddLiquidityV2/ConfirmAddModalBottom.d.ts b/dist2/types/pages/AddLiquidityV2/ConfirmAddModalBottom.d.ts deleted file mode 100644 index f84d3469262..00000000000 --- a/dist2/types/pages/AddLiquidityV2/ConfirmAddModalBottom.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -/// -import { Currency, CurrencyAmount, Fraction, Percent } from '@uniswap/sdk-core'; -import { Field } from '../../state/mint/actions'; -export declare function ConfirmAddModalBottom({ noLiquidity, price, currencies, parsedAmounts, poolTokenPercentage, onAdd, }: { - noLiquidity?: boolean; - price?: Fraction; - currencies: { - [field in Field]?: Currency; - }; - parsedAmounts: { - [field in Field]?: CurrencyAmount; - }; - poolTokenPercentage?: Percent; - onAdd: () => void; -}): JSX.Element; diff --git a/dist2/types/pages/AddLiquidityV2/PoolPriceBar.d.ts b/dist2/types/pages/AddLiquidityV2/PoolPriceBar.d.ts deleted file mode 100644 index bcd5584bfae..00000000000 --- a/dist2/types/pages/AddLiquidityV2/PoolPriceBar.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -/// -import { Currency, Percent, Price } from '@uniswap/sdk-core'; -import { Field } from '../../state/mint/actions'; -export declare function PoolPriceBar({ currencies, noLiquidity, poolTokenPercentage, price, }: { - currencies: { - [field in Field]?: Currency; - }; - noLiquidity?: boolean; - poolTokenPercentage?: Percent; - price?: Price; -}): JSX.Element; diff --git a/dist2/types/pages/AddLiquidityV2/index.d.ts b/dist2/types/pages/AddLiquidityV2/index.d.ts deleted file mode 100644 index 118d921530e..00000000000 --- a/dist2/types/pages/AddLiquidityV2/index.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -/// -import { RouteComponentProps } from 'react-router-dom'; -export default function AddLiquidity({ match: { params: { currencyIdA, currencyIdB }, }, history, }: RouteComponentProps<{ - currencyIdA?: string; - currencyIdB?: string; -}>): JSX.Element; diff --git a/dist2/types/pages/AddLiquidityV2/redirects.d.ts b/dist2/types/pages/AddLiquidityV2/redirects.d.ts deleted file mode 100644 index e701bf0af1e..00000000000 --- a/dist2/types/pages/AddLiquidityV2/redirects.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -/// -import { RouteComponentProps } from 'react-router-dom'; -export declare function RedirectDuplicateTokenIdsV2(props: RouteComponentProps<{ - currencyIdA: string; - currencyIdB: string; -}>): JSX.Element; diff --git a/dist2/types/pages/App.d.ts b/dist2/types/pages/App.d.ts deleted file mode 100644 index 699671919a5..00000000000 --- a/dist2/types/pages/App.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -export default function App(): JSX.Element; diff --git a/dist2/types/pages/AppBody.d.ts b/dist2/types/pages/AppBody.d.ts deleted file mode 100644 index 43d83fded0a..00000000000 --- a/dist2/types/pages/AppBody.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import React from 'react'; -export declare const BodyWrapper: import("styled-components").StyledComponent<"main", import("styled-components").DefaultTheme, { - margin?: string | undefined; - maxWidth?: string | undefined; -}, never>; -/** - * The styled container element that wraps the content of most pages and the tabs. - */ -export default function AppBody({ children, ...rest }: { - children: React.ReactNode; -}): JSX.Element; diff --git a/dist2/types/pages/CreateProposal/ProposalActionDetail.d.ts b/dist2/types/pages/CreateProposal/ProposalActionDetail.d.ts deleted file mode 100644 index 3a05a098f40..00000000000 --- a/dist2/types/pages/CreateProposal/ProposalActionDetail.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -/// -import { Currency } from '@uniswap/sdk-core'; -import { ProposalAction } from './ProposalActionSelector'; -export declare const ProposalActionDetail: ({ className, proposalAction, currency, amount, toAddress, onCurrencySelect, onAmountInput, onToAddressInput, }: { - className?: string | undefined; - proposalAction: ProposalAction; - currency: Currency | undefined; - amount: string; - toAddress: string; - onCurrencySelect: (currency: Currency) => void; - onAmountInput: (amount: string) => void; - onToAddressInput: (address: string) => void; -}) => JSX.Element; diff --git a/dist2/types/pages/CreateProposal/ProposalActionSelector.d.ts b/dist2/types/pages/CreateProposal/ProposalActionSelector.d.ts deleted file mode 100644 index 2c96159fa7f..00000000000 --- a/dist2/types/pages/CreateProposal/ProposalActionSelector.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -/// -export declare enum ProposalAction { - TRANSFER_TOKEN = "Transfer Token", - APPROVE_TOKEN = "Approve Token" -} -interface ProposalActionSelectorModalProps { - isOpen: boolean; - onDismiss: () => void; - onProposalActionSelect: (proposalAction: ProposalAction) => void; -} -export declare const ProposalActionSelector: ({ className, onClick, proposalAction, }: { - className?: string | undefined; - onClick: () => void; - proposalAction: ProposalAction; -}) => JSX.Element; -export declare function ProposalActionSelectorModal({ isOpen, onDismiss, onProposalActionSelect, }: ProposalActionSelectorModalProps): JSX.Element; -export {}; diff --git a/dist2/types/pages/CreateProposal/ProposalEditor.d.ts b/dist2/types/pages/CreateProposal/ProposalEditor.d.ts deleted file mode 100644 index 0f7cdf7ed82..00000000000 --- a/dist2/types/pages/CreateProposal/ProposalEditor.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -/// -export declare const ProposalEditor: ({ className, title, body, onTitleInput, onBodyInput, }: { - className?: string | undefined; - title: string; - body: string; - onTitleInput: (title: string) => void; - onBodyInput: (body: string) => void; -}) => JSX.Element; diff --git a/dist2/types/pages/CreateProposal/ProposalSubmissionModal.d.ts b/dist2/types/pages/CreateProposal/ProposalSubmissionModal.d.ts deleted file mode 100644 index dc03ce2fe40..00000000000 --- a/dist2/types/pages/CreateProposal/ProposalSubmissionModal.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -/// -export declare const ProposalSubmissionModal: ({ isOpen, hash, onDismiss, }: { - isOpen: boolean; - hash: string | undefined; - onDismiss: () => void; -}) => JSX.Element; diff --git a/dist2/types/pages/CreateProposal/index.d.ts b/dist2/types/pages/CreateProposal/index.d.ts deleted file mode 100644 index a05bade2c50..00000000000 --- a/dist2/types/pages/CreateProposal/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -export default function CreateProposal(): JSX.Element; diff --git a/dist2/types/pages/Earn/Countdown.d.ts b/dist2/types/pages/Earn/Countdown.d.ts deleted file mode 100644 index ffa214d3271..00000000000 --- a/dist2/types/pages/Earn/Countdown.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -/// -export declare function Countdown({ exactEnd }: { - exactEnd?: Date; -}): JSX.Element; diff --git a/dist2/types/pages/Earn/Manage.d.ts b/dist2/types/pages/Earn/Manage.d.ts deleted file mode 100644 index a96156de94e..00000000000 --- a/dist2/types/pages/Earn/Manage.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -/// -import { RouteComponentProps } from 'react-router-dom'; -export default function Manage({ match: { params: { currencyIdA, currencyIdB }, }, }: RouteComponentProps<{ - currencyIdA: string; - currencyIdB: string; -}>): JSX.Element; diff --git a/dist2/types/pages/Earn/index.d.ts b/dist2/types/pages/Earn/index.d.ts deleted file mode 100644 index dfae0370851..00000000000 --- a/dist2/types/pages/Earn/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -export default function Earn(): JSX.Element; diff --git a/dist2/types/pages/MigrateV2/MigrateV2Pair.d.ts b/dist2/types/pages/MigrateV2/MigrateV2Pair.d.ts deleted file mode 100644 index d12eb7c483a..00000000000 --- a/dist2/types/pages/MigrateV2/MigrateV2Pair.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/// -import { RouteComponentProps } from 'react-router'; -export default function MigrateV2Pair({ match: { params: { address }, }, }: RouteComponentProps<{ - address: string; -}>): JSX.Element; diff --git a/dist2/types/pages/MigrateV2/index.d.ts b/dist2/types/pages/MigrateV2/index.d.ts deleted file mode 100644 index 94633adbef3..00000000000 --- a/dist2/types/pages/MigrateV2/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -export default function MigrateV2(): JSX.Element; diff --git a/dist2/types/pages/Pool/CTACards.d.ts b/dist2/types/pages/Pool/CTACards.d.ts deleted file mode 100644 index a1b81ceebdc..00000000000 --- a/dist2/types/pages/Pool/CTACards.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -export default function CTACards(): JSX.Element; diff --git a/dist2/types/pages/Pool/PositionPage.d.ts b/dist2/types/pages/Pool/PositionPage.d.ts deleted file mode 100644 index 84c7b09ba25..00000000000 --- a/dist2/types/pages/Pool/PositionPage.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/// -import { RouteComponentProps } from 'react-router-dom'; -export declare function PositionPage({ match: { params: { tokenId: tokenIdFromUrl }, }, }: RouteComponentProps<{ - tokenId?: string; -}>): JSX.Element; diff --git a/dist2/types/pages/Pool/index.d.ts b/dist2/types/pages/Pool/index.d.ts deleted file mode 100644 index 696ae071c7f..00000000000 --- a/dist2/types/pages/Pool/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -export default function Pool(): JSX.Element; diff --git a/dist2/types/pages/Pool/styleds.d.ts b/dist2/types/pages/Pool/styleds.d.ts deleted file mode 100644 index 925820595f5..00000000000 --- a/dist2/types/pages/Pool/styleds.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -/// -export declare const Wrapper: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; -export declare const ClickableText: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, {}, never>; -export declare const MaxButton: import("styled-components").StyledComponent<"button", import("styled-components").DefaultTheme, { - width: string; -}, never>; -export declare const Dots: import("styled-components").StyledComponent<"span", import("styled-components").DefaultTheme, {}, never>; -export declare const LoadingRows: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; diff --git a/dist2/types/pages/Pool/v2.d.ts b/dist2/types/pages/Pool/v2.d.ts deleted file mode 100644 index 696ae071c7f..00000000000 --- a/dist2/types/pages/Pool/v2.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -export default function Pool(): JSX.Element; diff --git a/dist2/types/pages/PoolFinder/index.d.ts b/dist2/types/pages/PoolFinder/index.d.ts deleted file mode 100644 index cd96abfa6ef..00000000000 --- a/dist2/types/pages/PoolFinder/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -export default function PoolFinder(): JSX.Element; diff --git a/dist2/types/pages/RemoveLiquidity/V3.d.ts b/dist2/types/pages/RemoveLiquidity/V3.d.ts deleted file mode 100644 index c24f7e4f224..00000000000 --- a/dist2/types/pages/RemoveLiquidity/V3.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/// -import { RouteComponentProps } from 'react-router-dom'; -export default function RemoveLiquidityV3({ location, match: { params: { tokenId }, }, }: RouteComponentProps<{ - tokenId: string; -}>): JSX.Element; diff --git a/dist2/types/pages/RemoveLiquidity/index.d.ts b/dist2/types/pages/RemoveLiquidity/index.d.ts deleted file mode 100644 index 398605c54cb..00000000000 --- a/dist2/types/pages/RemoveLiquidity/index.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -/// -import { RouteComponentProps } from 'react-router'; -export default function RemoveLiquidity({ history, match: { params: { currencyIdA, currencyIdB }, }, }: RouteComponentProps<{ - currencyIdA: string; - currencyIdB: string; -}>): JSX.Element; diff --git a/dist2/types/pages/RemoveLiquidity/styled.d.ts b/dist2/types/pages/RemoveLiquidity/styled.d.ts deleted file mode 100644 index 09e497ed9dc..00000000000 --- a/dist2/types/pages/RemoveLiquidity/styled.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -/// -export declare const Wrapper: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; -export declare const SmallMaxButton: import("styled-components").StyledComponent<"button", import("styled-components").DefaultTheme, { - width: string; -}, never>; -export declare const ResponsiveHeaderText: import("styled-components").StyledComponent, import("styled-components").DefaultTheme, {}, never>; diff --git a/dist2/types/pages/Swap/index.d.ts b/dist2/types/pages/Swap/index.d.ts deleted file mode 100644 index b74fc614d02..00000000000 --- a/dist2/types/pages/Swap/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -import { RouteComponentProps } from 'react-router-dom'; -export default function Swap({ history }: RouteComponentProps): JSX.Element; diff --git a/dist2/types/pages/Swap/redirects.d.ts b/dist2/types/pages/Swap/redirects.d.ts deleted file mode 100644 index 27027f027ea..00000000000 --- a/dist2/types/pages/Swap/redirects.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -/// -import { RouteComponentProps } from 'react-router-dom'; -export declare function RedirectPathToSwapOnly({ location }: RouteComponentProps): JSX.Element; -export declare function RedirectToSwap(props: RouteComponentProps<{ - outputCurrency: string; -}>): JSX.Element; -export declare function OpenClaimAddressModalAndRedirectToSwap(props: RouteComponentProps): JSX.Element; diff --git a/dist2/types/pages/Vote/Landing.d.ts b/dist2/types/pages/Vote/Landing.d.ts deleted file mode 100644 index ae54cd6a552..00000000000 --- a/dist2/types/pages/Vote/Landing.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -export default function Landing(): JSX.Element; diff --git a/dist2/types/pages/Vote/VotePage.d.ts b/dist2/types/pages/Vote/VotePage.d.ts deleted file mode 100644 index 14364ad28a7..00000000000 --- a/dist2/types/pages/Vote/VotePage.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -/// -import { RouteComponentProps } from 'react-router-dom'; -export default function VotePage({ match: { params: { governorIndex, id }, }, }: RouteComponentProps<{ - governorIndex: string; - id: string; -}>): JSX.Element; diff --git a/dist2/types/pages/Vote/index.d.ts b/dist2/types/pages/Vote/index.d.ts deleted file mode 100644 index e0b6ed395d9..00000000000 --- a/dist2/types/pages/Vote/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -export default function Vote(): JSX.Element; diff --git a/dist2/types/pages/Vote/styled.d.ts b/dist2/types/pages/Vote/styled.d.ts deleted file mode 100644 index cda7f08a434..00000000000 --- a/dist2/types/pages/Vote/styled.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/// -import { ProposalState } from '../../state/governance/hooks'; -export declare function ProposalStatus({ status }: { - status: ProposalState; -}): JSX.Element; diff --git a/dist2/types/pages/styled.d.ts b/dist2/types/pages/styled.d.ts deleted file mode 100644 index f78fe33607b..00000000000 --- a/dist2/types/pages/styled.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare const IframeBodyWrapper: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; diff --git a/dist2/types/polyfills.d.ts b/dist2/types/polyfills.d.ts deleted file mode 100644 index fcc8d56270b..00000000000 --- a/dist2/types/polyfills.d.ts +++ /dev/null @@ -1 +0,0 @@ -import 'polyfill-object.fromentries'; diff --git a/dist2/types/service-worker.d.ts b/dist2/types/service-worker.d.ts deleted file mode 100644 index 67dd33d605f..00000000000 --- a/dist2/types/service-worker.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -export {}; diff --git a/dist2/types/serviceWorkerRegistration.d.ts b/dist2/types/serviceWorkerRegistration.d.ts deleted file mode 100644 index c6724c325ff..00000000000 --- a/dist2/types/serviceWorkerRegistration.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -declare type Config = { - onSuccess?: (registration: ServiceWorkerRegistration) => void; - onUpdate?: (registration: ServiceWorkerRegistration) => void; -}; -export declare function register(config?: Config): void; -export declare function unregister(): void; -export {}; diff --git a/dist2/types/setupTests.d.ts b/dist2/types/setupTests.d.ts deleted file mode 100644 index 7b0828bfa80..00000000000 --- a/dist2/types/setupTests.d.ts +++ /dev/null @@ -1 +0,0 @@ -import '@testing-library/jest-dom'; diff --git a/dist2/types/snowflake.d.ts b/dist2/types/snowflake.d.ts deleted file mode 100644 index 2f8196a1641..00000000000 --- a/dist2/types/snowflake.d.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as Swap } from './pages/Swap'; diff --git a/dist2/types/state/application/hooks.d.ts b/dist2/types/state/application/hooks.d.ts deleted file mode 100644 index 236de2a5041..00000000000 --- a/dist2/types/state/application/hooks.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { AppState } from '../index'; -import { ApplicationModal, PopupContent } from './reducer'; -export declare function useModalOpen(modal: ApplicationModal): boolean; -export declare function useToggleModal(modal: ApplicationModal): () => void; -export declare function useWalletModalToggle(): () => void; -export declare function useToggleSettingsMenu(): () => void; -export declare function useShowClaimPopup(): boolean; -export declare function useToggleShowClaimPopup(): () => void; -export declare function useToggleSelfClaimModal(): () => void; -export declare function useToggleDelegateModal(): () => void; -export declare function useToggleVoteModal(): () => void; -export declare function useTogglePrivacyPolicy(): () => void; -export declare function useAddPopup(): (content: PopupContent, key?: string, removeAfterMs?: number) => void; -export declare function useRemovePopup(): (key: string) => void; -export declare function useActivePopups(): AppState['application']['popupList']; diff --git a/dist2/types/state/application/reducer.d.ts b/dist2/types/state/application/reducer.d.ts deleted file mode 100644 index 81e95bd7330..00000000000 --- a/dist2/types/state/application/reducer.d.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { SupportedChainId } from '../../constants/chains'; -export declare type PopupContent = { - txn: { - hash: string; - }; -} | { - failedSwitchNetwork: SupportedChainId; -}; -export declare enum ApplicationModal { - WALLET = 0, - SETTINGS = 1, - SELF_CLAIM = 2, - ADDRESS_CLAIM = 3, - CLAIM_POPUP = 4, - MENU = 5, - DELEGATE = 6, - VOTE = 7, - POOL_OVERVIEW_OPTIONS = 8, - NETWORK_SELECTOR = 9, - PRIVACY_POLICY = 10 -} -declare type PopupList = Array<{ - key: string; - show: boolean; - content: PopupContent; - removeAfterMs: number | null; -}>; -export interface ApplicationState { - readonly chainId: number | null; - readonly openModal: ApplicationModal | null; - readonly popupList: PopupList; -} -export declare const updateChainId: import("@reduxjs/toolkit").ActionCreatorWithPayload, setOpenModal: import("@reduxjs/toolkit").ActionCreatorWithPayload, addPopup: import("@reduxjs/toolkit").ActionCreatorWithPayload, removePopup: import("@reduxjs/toolkit").ActionCreatorWithPayload; -declare const _default: import("redux").Reducer; -export default _default; diff --git a/dist2/types/state/application/updater.d.ts b/dist2/types/state/application/updater.d.ts deleted file mode 100644 index b91977cb6ee..00000000000 --- a/dist2/types/state/application/updater.d.ts +++ /dev/null @@ -1 +0,0 @@ -export default function Updater(): null; diff --git a/dist2/types/state/burn/actions.d.ts b/dist2/types/state/burn/actions.d.ts deleted file mode 100644 index 96617c5bdf2..00000000000 --- a/dist2/types/state/burn/actions.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -export declare enum Field { - LIQUIDITY_PERCENT = "LIQUIDITY_PERCENT", - LIQUIDITY = "LIQUIDITY", - CURRENCY_A = "CURRENCY_A", - CURRENCY_B = "CURRENCY_B" -} -export declare const typeInput: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ - field: Field; - typedValue: string; -}, string>; diff --git a/dist2/types/state/burn/hooks.d.ts b/dist2/types/state/burn/hooks.d.ts deleted file mode 100644 index e650beb8682..00000000000 --- a/dist2/types/state/burn/hooks.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Currency, CurrencyAmount, Percent, Token } from '@uniswap/sdk-core'; -import { Pair } from '@uniswap/v2-sdk'; -import { ReactNode } from 'react'; -import { AppState } from '../index'; -import { Field } from './actions'; -export declare function useBurnState(): AppState['burn']; -export declare function useDerivedBurnInfo(currencyA: Currency | undefined, currencyB: Currency | undefined): { - pair?: Pair | null; - parsedAmounts: { - [Field.LIQUIDITY_PERCENT]: Percent; - [Field.LIQUIDITY]?: CurrencyAmount; - [Field.CURRENCY_A]?: CurrencyAmount; - [Field.CURRENCY_B]?: CurrencyAmount; - }; - error?: ReactNode; -}; -export declare function useBurnActionHandlers(): { - onUserInput: (field: Field, typedValue: string) => void; -}; diff --git a/dist2/types/state/burn/reducer.d.ts b/dist2/types/state/burn/reducer.d.ts deleted file mode 100644 index d0746d7f1eb..00000000000 --- a/dist2/types/state/burn/reducer.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Field } from './actions'; -interface BurnState { - readonly independentField: Field; - readonly typedValue: string; -} -declare const _default: import("redux").Reducer; -export default _default; diff --git a/dist2/types/state/burn/v3/actions.d.ts b/dist2/types/state/burn/v3/actions.d.ts deleted file mode 100644 index 9d98b90237d..00000000000 --- a/dist2/types/state/burn/v3/actions.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -export declare const selectPercent: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ - percent: number; -}, string>; diff --git a/dist2/types/state/burn/v3/hooks.d.ts b/dist2/types/state/burn/v3/hooks.d.ts deleted file mode 100644 index f43956ddef3..00000000000 --- a/dist2/types/state/burn/v3/hooks.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Currency, CurrencyAmount, Percent } from '@uniswap/sdk-core'; -import { Position } from '@uniswap/v3-sdk'; -import { ReactNode } from 'react'; -import { PositionDetails } from 'types/position'; -import { AppState } from '../../index'; -export declare function useBurnV3State(): AppState['burnV3']; -export declare function useDerivedV3BurnInfo(position?: PositionDetails, asWETH?: boolean): { - position?: Position; - liquidityPercentage?: Percent; - liquidityValue0?: CurrencyAmount; - liquidityValue1?: CurrencyAmount; - feeValue0?: CurrencyAmount; - feeValue1?: CurrencyAmount; - outOfRange: boolean; - error?: ReactNode; -}; -export declare function useBurnV3ActionHandlers(): { - onPercentSelect: (percent: number) => void; -}; diff --git a/dist2/types/state/burn/v3/reducer.d.ts b/dist2/types/state/burn/v3/reducer.d.ts deleted file mode 100644 index e7a25868b3a..00000000000 --- a/dist2/types/state/burn/v3/reducer.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -interface BurnV3State { - readonly percent: number; -} -declare const _default: import("redux").Reducer; -export default _default; diff --git a/dist2/types/state/claim/hooks.d.ts b/dist2/types/state/claim/hooks.d.ts deleted file mode 100644 index 6569b8ff1f0..00000000000 --- a/dist2/types/state/claim/hooks.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { CurrencyAmount, Token } from '@uniswap/sdk-core'; -interface UserClaimData { - index: number; - amount: string; - proof: string[]; - flags?: { - isSOCKS: boolean; - isLP: boolean; - isUser: boolean; - }; -} -export declare function useUserClaimData(account: string | null | undefined): UserClaimData | null; -export declare function useUserHasAvailableClaim(account: string | null | undefined): boolean; -export declare function useUserUnclaimedAmount(account: string | null | undefined): CurrencyAmount | undefined; -export declare function useClaimCallback(account: string | null | undefined): { - claimCallback: () => Promise; -}; -export {}; diff --git a/dist2/types/state/data/enhanced.d.ts b/dist2/types/state/data/enhanced.d.ts deleted file mode 100644 index 8fbc190d6d5..00000000000 --- a/dist2/types/state/data/enhanced.d.ts +++ /dev/null @@ -1,42 +0,0 @@ -export declare const CHAIN_TAG = "Chain"; -export declare const api: import("@reduxjs/toolkit/dist/query").Api, Partial>, {}>, import("@reduxjs/toolkit/dist/query/endpointDefinitions").ReplaceTagTypes<{ - allV3Ticks: import("@reduxjs/toolkit/dist/query").QueryDefinition, Partial>, {}>, never, any, string>; - feeTierDistribution: import("@reduxjs/toolkit/dist/query").QueryDefinition, Partial>, {}>, never, any, string>; -} & { - allV3Ticks: import("@reduxjs/toolkit/dist/query").QueryDefinition, import("@reduxjs/toolkit/dist/query").BaseQueryFn<{ - document: string | import("graphql").DocumentNode; - variables?: any; - }, unknown, Pick, Partial>, {}>, never, import("./generated").AllV3TicksQuery, string>; - feeTierDistribution: import("@reduxjs/toolkit/dist/query").QueryDefinition, import("@reduxjs/toolkit/dist/query").BaseQueryFn<{ - document: string | import("graphql").DocumentNode; - variables?: any; - }, unknown, Pick, Partial>, {}>, never, import("./generated").FeeTierDistributionQuery, string>; -}, "Chain">, "dataApi", "Chain", typeof import("@reduxjs/toolkit/dist/query/core/module").coreModuleName | typeof import("@reduxjs/toolkit/dist/query/react/module").reactHooksModuleName>; -export declare const useAllV3TicksQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseQuery, import("@reduxjs/toolkit/dist/query").BaseQueryFn<{ - document: string | import("graphql").DocumentNode; - variables?: any; -}, unknown, Pick, Partial>, {}>, "Chain", any, string>>, useFeeTierDistributionQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseQuery, import("@reduxjs/toolkit/dist/query").BaseQueryFn<{ - document: string | import("graphql").DocumentNode; - variables?: any; -}, unknown, Pick, Partial>, {}>, "Chain", any, string>>; diff --git a/dist2/types/state/data/slice.d.ts b/dist2/types/state/data/slice.d.ts deleted file mode 100644 index 55543151dfe..00000000000 --- a/dist2/types/state/data/slice.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { BaseQueryFn } from '@reduxjs/toolkit/query'; -import { DocumentNode } from 'graphql'; -import { ClientError } from 'graphql-request'; -export declare const api: import("@reduxjs/toolkit/query").Api, Partial>, {}>, { - allV3Ticks: import("@reduxjs/toolkit/query").QueryDefinition, Partial>, {}>, never, any, string>; - feeTierDistribution: import("@reduxjs/toolkit/query").QueryDefinition, Partial>, {}>, never, any, string>; -}, "dataApi", never, typeof import("@reduxjs/toolkit/dist/query/core/module").coreModuleName | typeof import("@reduxjs/toolkit/dist/query/react/module").reactHooksModuleName>; diff --git a/dist2/types/state/global/actions.d.ts b/dist2/types/state/global/actions.d.ts deleted file mode 100644 index 5b4f703e5e2..00000000000 --- a/dist2/types/state/global/actions.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare const updateVersion: import("@reduxjs/toolkit").ActionCreatorWithoutPayload; diff --git a/dist2/types/state/governance/hooks.d.ts b/dist2/types/state/governance/hooks.d.ts deleted file mode 100644 index 14bb973ef46..00000000000 --- a/dist2/types/state/governance/hooks.d.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { CurrencyAmount, Token } from '@uniswap/sdk-core'; -import { VoteOption } from './types'; -interface ProposalDetail { - target: string; - functionSig: string; - callData: string; -} -export interface ProposalData { - id: string; - title: string; - description: string; - proposer: string; - status: ProposalState; - forCount: number; - againstCount: number; - startBlock: number; - endBlock: number; - details: ProposalDetail[]; - governorIndex: number; -} -export interface CreateProposalData { - targets: string[]; - values: string[]; - signatures: string[]; - calldatas: string[]; - description: string; -} -export declare enum ProposalState { - UNDETERMINED = -1, - PENDING = 0, - ACTIVE = 1, - CANCELED = 2, - DEFEATED = 3, - SUCCEEDED = 4, - QUEUED = 5, - EXPIRED = 6, - EXECUTED = 7 -} -export declare function useAllProposalData(): { - data: ProposalData[]; - loading: boolean; -}; -export declare function useProposalData(governorIndex: number, id: string): ProposalData | undefined; -export declare function useUserDelegatee(): string; -export declare function useUserVotes(): { - loading: boolean; - votes: CurrencyAmount | undefined; -}; -export declare function useUserVotesAsOfBlock(block: number | undefined): CurrencyAmount | undefined; -export declare function useDelegateCallback(): (delegatee: string | undefined) => undefined | Promise; -export declare function useVoteCallback(): { - voteCallback: (proposalId: string | undefined, voteOption: VoteOption) => undefined | Promise; -}; -export declare function useCreateProposalCallback(): (createProposalData: CreateProposalData | undefined) => undefined | Promise; -export declare function useLatestProposalId(address: string | undefined): string | undefined; -export declare function useProposalThreshold(): CurrencyAmount | undefined; -export {}; diff --git a/dist2/types/state/governance/types.d.ts b/dist2/types/state/governance/types.d.ts deleted file mode 100644 index f92f19a1a64..00000000000 --- a/dist2/types/state/governance/types.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export declare enum VoteOption { - Against = 0, - For = 1, - Abstain = 2 -} diff --git a/dist2/types/state/lists/actions.d.ts b/dist2/types/state/lists/actions.d.ts deleted file mode 100644 index cc00f5fb237..00000000000 --- a/dist2/types/state/lists/actions.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { ActionCreatorWithPayload } from '@reduxjs/toolkit'; -import { TokenList } from '@uniswap/token-lists'; -export declare const fetchTokenList: Readonly<{ - pending: ActionCreatorWithPayload<{ - url: string; - requestId: string; - }>; - fulfilled: ActionCreatorWithPayload<{ - url: string; - tokenList: TokenList; - requestId: string; - }>; - rejected: ActionCreatorWithPayload<{ - url: string; - errorMessage: string; - requestId: string; - }>; -}>; -export declare const addList: ActionCreatorWithPayload; -export declare const removeList: ActionCreatorWithPayload; -export declare const enableList: ActionCreatorWithPayload; -export declare const disableList: ActionCreatorWithPayload; -export declare const acceptListUpdate: ActionCreatorWithPayload; diff --git a/dist2/types/state/lists/hooks.d.ts b/dist2/types/state/lists/hooks.d.ts deleted file mode 100644 index c3f81b3469f..00000000000 --- a/dist2/types/state/lists/hooks.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { ChainTokenMap } from 'lib/hooks/useTokenList/utils'; -import { AppState } from '../index'; -export declare type TokenAddressMap = ChainTokenMap; -export declare function useAllLists(): AppState['lists']['byUrl']; -/** - * Combine the tokens in map2 with the tokens on map1, where tokens on map1 take precedence - * @param map1 the base token map - * @param map2 the map of additioanl tokens to add to the base map - */ -export declare function combineMaps(map1: TokenAddressMap, map2: TokenAddressMap): TokenAddressMap; -export declare function useActiveListUrls(): string[] | undefined; -export declare function useInactiveListUrls(): string[]; -export declare function useCombinedActiveList(): TokenAddressMap; -export declare function useUnsupportedTokenList(): TokenAddressMap; -export declare function useIsListActive(url: string): boolean; diff --git a/dist2/types/state/lists/reducer.d.ts b/dist2/types/state/lists/reducer.d.ts deleted file mode 100644 index bdf7c5e2f59..00000000000 --- a/dist2/types/state/lists/reducer.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { TokenList } from '@uniswap/token-lists'; -export interface ListsState { - readonly byUrl: { - readonly [url: string]: { - readonly current: TokenList | null; - readonly pendingUpdate: TokenList | null; - readonly loadingRequestId: string | null; - readonly error: string | null; - }; - }; - readonly lastInitializedDefaultListOfLists?: string[]; - readonly activeListUrls: string[] | undefined; -} -declare const _default: import("redux").Reducer; -export default _default; diff --git a/dist2/types/state/lists/updater.d.ts b/dist2/types/state/lists/updater.d.ts deleted file mode 100644 index b91977cb6ee..00000000000 --- a/dist2/types/state/lists/updater.d.ts +++ /dev/null @@ -1 +0,0 @@ -export default function Updater(): null; diff --git a/dist2/types/state/lists/wrappedTokenInfo.d.ts b/dist2/types/state/lists/wrappedTokenInfo.d.ts deleted file mode 100644 index 581c43431b3..00000000000 --- a/dist2/types/state/lists/wrappedTokenInfo.d.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Currency, Token } from '@uniswap/sdk-core'; -import { Tags, TokenInfo, TokenList } from '@uniswap/token-lists'; -declare type TagDetails = Tags[keyof Tags]; -interface TagInfo extends TagDetails { - id: string; -} -/** - * Token instances created from token info on a token list. - */ -export declare class WrappedTokenInfo implements Token { - readonly isNative: false; - readonly isToken: true; - readonly list?: TokenList; - readonly tokenInfo: TokenInfo; - constructor(tokenInfo: TokenInfo, list?: TokenList); - private _checksummedAddress; - get address(): string; - get chainId(): number; - get decimals(): number; - get name(): string; - get symbol(): string; - get logoURI(): string | undefined; - private _tags; - get tags(): TagInfo[]; - equals(other: Currency): boolean; - sortsBefore(other: Token): boolean; - get wrapped(): Token; -} -export {}; diff --git a/dist2/types/state/logs/hooks.d.ts b/dist2/types/state/logs/hooks.d.ts deleted file mode 100644 index 94735293264..00000000000 --- a/dist2/types/state/logs/hooks.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { EventFilter, Log } from './utils'; -export declare enum LogsState { - INVALID = 0, - LOADING = 1, - SYNCING = 2, - ERROR = 3, - SYNCED = 4 -} -export interface UseLogsResult { - logs: Log[] | undefined; - state: LogsState; -} -/** - * Returns the logs for the given filter as of the latest block, re-fetching from the library every block. - * @param filter The logs filter, without `blockHash`, `fromBlock` or `toBlock` defined. - * The filter parameter should _always_ be memoized, or else will trigger constant refetching - */ -export declare function useLogs(filter: EventFilter | undefined): UseLogsResult; diff --git a/dist2/types/state/logs/slice.d.ts b/dist2/types/state/logs/slice.d.ts deleted file mode 100644 index ffd263c618d..00000000000 --- a/dist2/types/state/logs/slice.d.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { EventFilter, Log } from './utils'; -export interface LogsState { - [chainId: number]: { - [filterKey: string]: { - listeners: number; - fetchingBlockNumber?: number; - results?: { - blockNumber: number; - logs: Log[]; - error?: undefined; - } | { - blockNumber: number; - logs?: undefined; - error: true; - }; - }; - }; -} -declare const _default: import("redux").Reducer; -export default _default; -export declare const addListener: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ - chainId: number; - filter: EventFilter; -}, string>, removeListener: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ - chainId: number; - filter: EventFilter; -}, string>, fetchedLogs: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ - chainId: number; - filter: EventFilter; - results: { - blockNumber: number; - logs: Log[]; - }; -}, string>, fetchedLogsError: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ - chainId: number; - blockNumber: number; - filter: EventFilter; -}, string>, fetchingLogs: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ - chainId: number; - filters: EventFilter[]; - blockNumber: number; -}, string>; diff --git a/dist2/types/state/logs/updater.d.ts b/dist2/types/state/logs/updater.d.ts deleted file mode 100644 index b91977cb6ee..00000000000 --- a/dist2/types/state/logs/updater.d.ts +++ /dev/null @@ -1 +0,0 @@ -export default function Updater(): null; diff --git a/dist2/types/state/logs/utils.d.ts b/dist2/types/state/logs/utils.d.ts deleted file mode 100644 index 1416cda31c3..00000000000 --- a/dist2/types/state/logs/utils.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -export interface EventFilter { - address?: string; - topics?: Array | null>; -} -export interface Log { - topics: Array; - data: string; - transactionIndex: number; - logIndex: number; - blockNumber: number; -} -/** - * Converts a filter to the corresponding string key - * @param filter the filter to convert - */ -export declare function filterToKey(filter: EventFilter): string; -/** - * Convert a filter key to the corresponding filter - * @param key key to convert - */ -export declare function keyToFilter(key: string): EventFilter; diff --git a/dist2/types/state/mint/actions.d.ts b/dist2/types/state/mint/actions.d.ts deleted file mode 100644 index f4c05e6ce2a..00000000000 --- a/dist2/types/state/mint/actions.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -export declare enum Field { - CURRENCY_A = "CURRENCY_A", - CURRENCY_B = "CURRENCY_B" -} -export declare const typeInput: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ - field: Field; - typedValue: string; - noLiquidity: boolean; -}, string>; -export declare const resetMintState: import("@reduxjs/toolkit").ActionCreatorWithoutPayload; diff --git a/dist2/types/state/mint/hooks.d.ts b/dist2/types/state/mint/hooks.d.ts deleted file mode 100644 index aa8e00a005d..00000000000 --- a/dist2/types/state/mint/hooks.d.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Currency, CurrencyAmount, Percent, Price, Token } from '@uniswap/sdk-core'; -import { Pair } from '@uniswap/v2-sdk'; -import { ReactNode } from 'react'; -import { PairState } from '../../hooks/useV2Pairs'; -import { AppState } from '../index'; -import { Field } from './actions'; -export declare function useMintState(): AppState['mint']; -export declare function useMintActionHandlers(noLiquidity: boolean | undefined): { - onFieldAInput: (typedValue: string) => void; - onFieldBInput: (typedValue: string) => void; -}; -export declare function useDerivedMintInfo(currencyA: Currency | undefined, currencyB: Currency | undefined): { - dependentField: Field; - currencies: { - [field in Field]?: Currency; - }; - pair?: Pair | null; - pairState: PairState; - currencyBalances: { - [field in Field]?: CurrencyAmount; - }; - parsedAmounts: { - [field in Field]?: CurrencyAmount; - }; - price?: Price; - noLiquidity?: boolean; - liquidityMinted?: CurrencyAmount; - poolTokenPercentage?: Percent; - error?: ReactNode; -}; diff --git a/dist2/types/state/mint/reducer.d.ts b/dist2/types/state/mint/reducer.d.ts deleted file mode 100644 index 7a9a0353f0e..00000000000 --- a/dist2/types/state/mint/reducer.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Field } from './actions'; -export interface MintState { - readonly independentField: Field; - readonly typedValue: string; - readonly otherTypedValue: string; - readonly startPriceTypedValue: string; - readonly leftRangeTypedValue: string; - readonly rightRangeTypedValue: string; -} -export declare const initialState: MintState; -declare const _default: import("redux").Reducer; -export default _default; diff --git a/dist2/types/state/mint/v3/actions.d.ts b/dist2/types/state/mint/v3/actions.d.ts deleted file mode 100644 index e1d5eaa10be..00000000000 --- a/dist2/types/state/mint/v3/actions.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -export declare enum Field { - CURRENCY_A = "CURRENCY_A", - CURRENCY_B = "CURRENCY_B" -} -export declare enum Bound { - LOWER = "LOWER", - UPPER = "UPPER" -} -export declare const typeInput: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ - field: Field; - typedValue: string; - noLiquidity: boolean; -}, string>; -export declare const typeStartPriceInput: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ - typedValue: string; -}, string>; -export declare const typeLeftRangeInput: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ - typedValue: string; -}, string>; -export declare const typeRightRangeInput: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ - typedValue: string; -}, string>; -export declare const resetMintState: import("@reduxjs/toolkit").ActionCreatorWithoutPayload; -export declare const setFullRange: import("@reduxjs/toolkit").ActionCreatorWithoutPayload; diff --git a/dist2/types/state/mint/v3/hooks.d.ts b/dist2/types/state/mint/v3/hooks.d.ts deleted file mode 100644 index 74e0730aa6a..00000000000 --- a/dist2/types/state/mint/v3/hooks.d.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { Currency, CurrencyAmount, Price, Token } from '@uniswap/sdk-core'; -import { FeeAmount, Pool, Position } from '@uniswap/v3-sdk'; -import { ReactNode } from 'react'; -import { PoolState } from '../../../hooks/usePools'; -import { AppState } from '../../index'; -import { Bound, Field } from './actions'; -export declare function useV3MintState(): AppState['mintV3']; -export declare function useV3MintActionHandlers(noLiquidity: boolean | undefined): { - onFieldAInput: (typedValue: string) => void; - onFieldBInput: (typedValue: string) => void; - onLeftRangeInput: (typedValue: string) => void; - onRightRangeInput: (typedValue: string) => void; - onStartPriceInput: (typedValue: string) => void; -}; -export declare function useV3DerivedMintInfo(currencyA?: Currency, currencyB?: Currency, feeAmount?: FeeAmount, baseCurrency?: Currency, existingPosition?: Position): { - pool?: Pool | null; - poolState: PoolState; - ticks: { - [bound in Bound]?: number | undefined; - }; - price?: Price; - pricesAtTicks: { - [bound in Bound]?: Price | undefined; - }; - currencies: { - [field in Field]?: Currency; - }; - currencyBalances: { - [field in Field]?: CurrencyAmount; - }; - dependentField: Field; - parsedAmounts: { - [field in Field]?: CurrencyAmount; - }; - position: Position | undefined; - noLiquidity?: boolean; - errorMessage?: ReactNode; - invalidPool: boolean; - outOfRange: boolean; - invalidRange: boolean; - depositADisabled: boolean; - depositBDisabled: boolean; - invertPrice: boolean; - ticksAtLimit: { - [bound in Bound]?: boolean | undefined; - }; -}; -export declare function useRangeHopCallbacks(baseCurrency: Currency | undefined, quoteCurrency: Currency | undefined, feeAmount: FeeAmount | undefined, tickLower: number | undefined, tickUpper: number | undefined, pool?: Pool | undefined | null): { - getDecrementLower: () => string; - getIncrementLower: () => string; - getDecrementUpper: () => string; - getIncrementUpper: () => string; - getSetFullRange: () => void; -}; diff --git a/dist2/types/state/mint/v3/reducer.d.ts b/dist2/types/state/mint/v3/reducer.d.ts deleted file mode 100644 index b8efefed2f5..00000000000 --- a/dist2/types/state/mint/v3/reducer.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Field } from './actions'; -export declare type FullRange = true; -interface MintState { - readonly independentField: Field; - readonly typedValue: string; - readonly startPriceTypedValue: string; - readonly leftRangeTypedValue: string | FullRange; - readonly rightRangeTypedValue: string | FullRange; -} -declare const _default: import("redux").Reducer; -export default _default; diff --git a/dist2/types/state/mint/v3/utils.d.ts b/dist2/types/state/mint/v3/utils.d.ts deleted file mode 100644 index fcabec5e1f8..00000000000 --- a/dist2/types/state/mint/v3/utils.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { Price, Token } from '@uniswap/sdk-core'; -import { FeeAmount } from '@uniswap/v3-sdk'; -export declare function tryParsePrice(baseToken?: Token, quoteToken?: Token, value?: string): Price | undefined; -export declare function tryParseTick(baseToken?: Token, quoteToken?: Token, feeAmount?: FeeAmount, value?: string): number | undefined; diff --git a/dist2/types/state/routing/clientSideSmartOrderRouter/constants.d.ts b/dist2/types/state/routing/clientSideSmartOrderRouter/constants.d.ts deleted file mode 100644 index 1cd4e0d7ed4..00000000000 --- a/dist2/types/state/routing/clientSideSmartOrderRouter/constants.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { ChainId } from '@uniswap/smart-order-router'; -export declare const AUTO_ROUTER_SUPPORTED_CHAINS: ChainId[]; diff --git a/dist2/types/state/routing/clientSideSmartOrderRouter/dependencies.d.ts b/dist2/types/state/routing/clientSideSmartOrderRouter/dependencies.d.ts deleted file mode 100644 index 5475b84b2db..00000000000 --- a/dist2/types/state/routing/clientSideSmartOrderRouter/dependencies.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { AlphaRouterParams } from '@uniswap/smart-order-router'; -import { SupportedChainId } from 'constants/chains'; -export declare type Dependencies = { - [chainId in SupportedChainId]?: AlphaRouterParams; -}; -/** Minimal set of dependencies for the router to work locally. */ -export declare function buildDependencies(): Dependencies; diff --git a/dist2/types/state/routing/clientSideSmartOrderRouter/index.d.ts b/dist2/types/state/routing/clientSideSmartOrderRouter/index.d.ts deleted file mode 100644 index f37ba29461b..00000000000 --- a/dist2/types/state/routing/clientSideSmartOrderRouter/index.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { BigintIsh } from '@uniswap/sdk-core'; -import { AlphaRouterConfig, ChainId } from '@uniswap/smart-order-router'; -import { GetQuoteResult } from 'state/routing/types'; -export declare function getQuote({ type, chainId, tokenIn, tokenOut, amount: amountRaw, }: { - type: 'exactIn' | 'exactOut'; - chainId: ChainId; - tokenIn: { - address: string; - chainId: number; - decimals: number; - symbol?: string; - }; - tokenOut: { - address: string; - chainId: number; - decimals: number; - symbol?: string; - }; - amount: BigintIsh; -}, alphaRouterConfig: Partial): Promise<{ - data: GetQuoteResult; - error?: unknown; -}>; diff --git a/dist2/types/state/routing/slice.d.ts b/dist2/types/state/routing/slice.d.ts deleted file mode 100644 index 164d3c9a1c1..00000000000 --- a/dist2/types/state/routing/slice.d.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { FetchBaseQueryError } from '@reduxjs/toolkit/query/react'; -import { ChainId } from '@uniswap/smart-order-router'; -import { GetQuoteResult } from './types'; -export declare const routingApi: import("@reduxjs/toolkit/query/react").Api, { - getQuote: import("@reduxjs/toolkit/query/react").QueryDefinition<{ - tokenInAddress: string; - tokenInChainId: ChainId; - tokenInDecimals: number; - tokenInSymbol?: string | undefined; - tokenOutAddress: string; - tokenOutChainId: ChainId; - tokenOutDecimals: number; - tokenOutSymbol?: string | undefined; - amount: string; - useClientSideRouter: boolean; - type: 'exactIn' | 'exactOut'; - }, import("@reduxjs/toolkit/query/react").BaseQueryFn, never, GetQuoteResult, string>; -}, "routingApi", never, typeof import("@reduxjs/toolkit/dist/query/core/module").coreModuleName | typeof import("@reduxjs/toolkit/dist/query/react/module").reactHooksModuleName>; -export declare const useGetQuoteQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseQuery, never, GetQuoteResult, string>>; diff --git a/dist2/types/state/routing/types.d.ts b/dist2/types/state/routing/types.d.ts deleted file mode 100644 index 1d9a1939ff4..00000000000 --- a/dist2/types/state/routing/types.d.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { Trade } from '@uniswap/router-sdk'; -import { Currency, CurrencyAmount, Token, TradeType } from '@uniswap/sdk-core'; -import { Route as V2Route } from '@uniswap/v2-sdk'; -import { Route as V3Route } from '@uniswap/v3-sdk'; -export declare enum TradeState { - LOADING = 0, - INVALID = 1, - NO_ROUTE_FOUND = 2, - VALID = 3, - SYNCING = 4 -} -export declare type TokenInRoute = Pick; -export declare type V3PoolInRoute = { - type: 'v3-pool'; - tokenIn: TokenInRoute; - tokenOut: TokenInRoute; - sqrtRatioX96: string; - liquidity: string; - tickCurrent: string; - fee: string; - amountIn?: string; - amountOut?: string; - address?: string; -}; -export declare type V2Reserve = { - token: TokenInRoute; - quotient: string; -}; -export declare type V2PoolInRoute = { - type: 'v2-pool'; - tokenIn: TokenInRoute; - tokenOut: TokenInRoute; - reserve0: V2Reserve; - reserve1: V2Reserve; - amountIn?: string; - amountOut?: string; - address?: string; -}; -export interface GetQuoteResult { - quoteId?: string; - blockNumber: string; - amount: string; - amountDecimals: string; - gasPriceWei: string; - gasUseEstimate: string; - gasUseEstimateQuote: string; - gasUseEstimateQuoteDecimals: string; - gasUseEstimateUSD: string; - methodParameters?: { - calldata: string; - value: string; - }; - quote: string; - quoteDecimals: string; - quoteGasAdjusted: string; - quoteGasAdjustedDecimals: string; - route: Array; - routeString: string; -} -export declare class InterfaceTrade extends Trade { - gasUseEstimateUSD: CurrencyAmount | null | undefined; - constructor({ gasUseEstimateUSD, ...routes }: { - gasUseEstimateUSD?: CurrencyAmount | undefined | null; - v2Routes: { - routev2: V2Route; - inputAmount: CurrencyAmount; - outputAmount: CurrencyAmount; - }[]; - v3Routes: { - routev3: V3Route; - inputAmount: CurrencyAmount; - outputAmount: CurrencyAmount; - }[]; - tradeType: TTradeType; - }); -} diff --git a/dist2/types/state/routing/useRoutingAPITrade.d.ts b/dist2/types/state/routing/useRoutingAPITrade.d.ts deleted file mode 100644 index b4d68ded679..00000000000 --- a/dist2/types/state/routing/useRoutingAPITrade.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Currency, CurrencyAmount, TradeType } from '@uniswap/sdk-core'; -import { InterfaceTrade, TradeState } from './types'; -/** - * Returns the best trade by invoking the routing api or the smart order router on the client - * @param tradeType whether the swap is an exact in/out - * @param amountSpecified the exact amount to swap in/out - * @param otherCurrency the desired output/payment currency - */ -export declare function useRoutingAPITrade(tradeType: TTradeType, amountSpecified?: CurrencyAmount, otherCurrency?: Currency): { - state: TradeState; - trade: InterfaceTrade | undefined; -}; diff --git a/dist2/types/state/routing/utils.d.ts b/dist2/types/state/routing/utils.d.ts deleted file mode 100644 index 30809c33dc8..00000000000 --- a/dist2/types/state/routing/utils.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Currency, CurrencyAmount, Token, TradeType } from '@uniswap/sdk-core'; -import { Route as V2Route } from '@uniswap/v2-sdk'; -import { Route as V3Route } from '@uniswap/v3-sdk'; -import { GetQuoteResult, InterfaceTrade } from './types'; -/** - * Transforms a Routing API quote into an array of routes that can be used to create - * a `Trade`. - */ -export declare function computeRoutes(currencyIn: Currency | undefined, currencyOut: Currency | undefined, tradeType: TradeType, quoteResult: Pick | undefined): { - routev3: V3Route | null; - routev2: V2Route | null; - inputAmount: CurrencyAmount; - outputAmount: CurrencyAmount; -}[] | undefined; -export declare function transformRoutesToTrade(route: ReturnType, tradeType: TTradeType, gasUseEstimateUSD?: CurrencyAmount | null): InterfaceTrade; diff --git a/dist2/types/state/stake/hooks.d.ts b/dist2/types/state/stake/hooks.d.ts deleted file mode 100644 index f510be70890..00000000000 --- a/dist2/types/state/stake/hooks.d.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { CurrencyAmount, Token } from '@uniswap/sdk-core'; -import { Pair } from '@uniswap/v2-sdk'; -import { ReactNode } from 'react'; -export declare const STAKING_GENESIS = 1600387200; -export declare const REWARDS_DURATION_DAYS = 60; -export declare const STAKING_REWARDS_INFO: { - [chainId: number]: { - tokens: [Token, Token]; - stakingRewardAddress: string; - }[]; -}; -export interface StakingInfo { - stakingRewardAddress: string; - tokens: [Token, Token]; - stakedAmount: CurrencyAmount; - earnedAmount: CurrencyAmount; - totalStakedAmount: CurrencyAmount; - totalRewardRate: CurrencyAmount; - rewardRate: CurrencyAmount; - periodFinish: Date | undefined; - active: boolean; - getHypotheticalRewardRate: (stakedAmount: CurrencyAmount, totalStakedAmount: CurrencyAmount, totalRewardRate: CurrencyAmount) => CurrencyAmount; -} -export declare function useStakingInfo(pairToFilterBy?: Pair | null): StakingInfo[]; -export declare function useTotalUniEarned(): CurrencyAmount | undefined; -export declare function useDerivedStakeInfo(typedValue: string, stakingToken: Token | undefined, userLiquidityUnstaked: CurrencyAmount | undefined): { - parsedAmount?: CurrencyAmount; - error?: ReactNode; -}; diff --git a/dist2/types/state/swap/actions.d.ts b/dist2/types/state/swap/actions.d.ts deleted file mode 100644 index 03d574d9fae..00000000000 --- a/dist2/types/state/swap/actions.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -export declare enum Field { - INPUT = "INPUT", - OUTPUT = "OUTPUT" -} -export declare const selectCurrency: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ - field: Field; - currencyId: string; -}, string>; -export declare const switchCurrencies: import("@reduxjs/toolkit").ActionCreatorWithoutPayload; -export declare const typeInput: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ - field: Field; - typedValue: string; -}, string>; -export declare const replaceSwapState: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ - field: Field; - typedValue: string; - inputCurrencyId?: string | undefined; - outputCurrencyId?: string | undefined; - recipient: string | null; -}, string>; -export declare const setRecipient: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ - recipient: string | null; -}, string>; diff --git a/dist2/types/state/swap/hooks.d.ts b/dist2/types/state/swap/hooks.d.ts deleted file mode 100644 index a0be76f5d76..00000000000 --- a/dist2/types/state/swap/hooks.d.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { Currency, CurrencyAmount, Percent, TradeType } from '@uniswap/sdk-core'; -import { ParsedQs } from 'qs'; -import { ReactNode } from 'react'; -import { InterfaceTrade, TradeState } from 'state/routing/types'; -import { AppState } from '../index'; -import { Field } from './actions'; -import { SwapState } from './reducer'; -export declare function useSwapState(): AppState['swap']; -export declare function useSwapActionHandlers(): { - onCurrencySelection: (field: Field, currency: Currency) => void; - onSwitchTokens: () => void; - onUserInput: (field: Field, typedValue: string) => void; - onChangeRecipient: (recipient: string | null) => void; -}; -export declare function useDerivedSwapInfo(): { - currencies: { - [field in Field]?: Currency | null; - }; - currencyBalances: { - [field in Field]?: CurrencyAmount; - }; - parsedAmount: CurrencyAmount | undefined; - inputError?: ReactNode; - trade: { - trade: InterfaceTrade | undefined; - state: TradeState; - }; - allowedSlippage: Percent; -}; -export declare function queryParametersToSwapState(parsedQs: ParsedQs): SwapState; -export declare function useDefaultsFromURLSearch(): { - inputCurrencyId: string | undefined; - outputCurrencyId: string | undefined; -} | undefined; diff --git a/dist2/types/state/swap/reducer.d.ts b/dist2/types/state/swap/reducer.d.ts deleted file mode 100644 index 951b835bc67..00000000000 --- a/dist2/types/state/swap/reducer.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Field } from './actions'; -export interface SwapState { - readonly independentField: Field; - readonly typedValue: string; - readonly [Field.INPUT]: { - readonly currencyId: string | undefined | null; - }; - readonly [Field.OUTPUT]: { - readonly currencyId: string | undefined | null; - }; - readonly recipient: string | null; -} -declare const _default: import("redux").Reducer; -export default _default; diff --git a/dist2/types/state/transactions/actions.d.ts b/dist2/types/state/transactions/actions.d.ts deleted file mode 100644 index 45173dc5167..00000000000 --- a/dist2/types/state/transactions/actions.d.ts +++ /dev/null @@ -1,154 +0,0 @@ -import { TradeType } from '@uniswap/sdk-core'; -import { VoteOption } from '../governance/types'; -export interface SerializableTransactionReceipt { - to: string; - from: string; - contractAddress: string; - transactionIndex: number; - blockHash: string; - transactionHash: string; - blockNumber: number; - status?: number; -} -/** - * Be careful adding to this enum, always assign a unique value (typescript will not prevent duplicate values). - * These values is persisted in state and if you change the value it will cause errors - */ -export declare enum TransactionType { - APPROVAL = 0, - SWAP = 1, - DEPOSIT_LIQUIDITY_STAKING = 2, - WITHDRAW_LIQUIDITY_STAKING = 3, - CLAIM = 4, - VOTE = 5, - DELEGATE = 6, - WRAP = 7, - CREATE_V3_POOL = 8, - ADD_LIQUIDITY_V3_POOL = 9, - ADD_LIQUIDITY_V2_POOL = 10, - MIGRATE_LIQUIDITY_V3 = 11, - COLLECT_FEES = 12, - REMOVE_LIQUIDITY_V3 = 13, - SUBMIT_PROPOSAL = 14 -} -export interface BaseTransactionInfo { - type: TransactionType; -} -export interface VoteTransactionInfo extends BaseTransactionInfo { - type: TransactionType.VOTE; - governorAddress: string; - proposalId: number; - decision: VoteOption; - reason: string; -} -export interface DelegateTransactionInfo extends BaseTransactionInfo { - type: TransactionType.DELEGATE; - delegatee: string; -} -export interface ApproveTransactionInfo extends BaseTransactionInfo { - type: TransactionType.APPROVAL; - tokenAddress: string; - spender: string; -} -interface BaseSwapTransactionInfo extends BaseTransactionInfo { - type: TransactionType.SWAP; - tradeType: TradeType; - inputCurrencyId: string; - outputCurrencyId: string; -} -export interface ExactInputSwapTransactionInfo extends BaseSwapTransactionInfo { - tradeType: TradeType.EXACT_INPUT; - inputCurrencyAmountRaw: string; - expectedOutputCurrencyAmountRaw: string; - minimumOutputCurrencyAmountRaw: string; -} -export interface ExactOutputSwapTransactionInfo extends BaseSwapTransactionInfo { - tradeType: TradeType.EXACT_OUTPUT; - outputCurrencyAmountRaw: string; - expectedInputCurrencyAmountRaw: string; - maximumInputCurrencyAmountRaw: string; -} -export interface DepositLiquidityStakingTransactionInfo { - type: TransactionType.DEPOSIT_LIQUIDITY_STAKING; - token0Address: string; - token1Address: string; -} -export interface WithdrawLiquidityStakingTransactionInfo { - type: TransactionType.WITHDRAW_LIQUIDITY_STAKING; - token0Address: string; - token1Address: string; -} -export interface WrapTransactionInfo { - type: TransactionType.WRAP; - unwrapped: boolean; - currencyAmountRaw: string; - chainId?: number; -} -export interface ClaimTransactionInfo { - type: TransactionType.CLAIM; - recipient: string; - uniAmountRaw?: string; -} -export interface CreateV3PoolTransactionInfo { - type: TransactionType.CREATE_V3_POOL; - baseCurrencyId: string; - quoteCurrencyId: string; -} -export interface AddLiquidityV3PoolTransactionInfo { - type: TransactionType.ADD_LIQUIDITY_V3_POOL; - createPool: boolean; - baseCurrencyId: string; - quoteCurrencyId: string; - feeAmount: number; - expectedAmountBaseRaw: string; - expectedAmountQuoteRaw: string; -} -export interface AddLiquidityV2PoolTransactionInfo { - type: TransactionType.ADD_LIQUIDITY_V2_POOL; - baseCurrencyId: string; - quoteCurrencyId: string; - expectedAmountBaseRaw: string; - expectedAmountQuoteRaw: string; -} -export interface MigrateV2LiquidityToV3TransactionInfo { - type: TransactionType.MIGRATE_LIQUIDITY_V3; - baseCurrencyId: string; - quoteCurrencyId: string; - isFork: boolean; -} -export interface CollectFeesTransactionInfo { - type: TransactionType.COLLECT_FEES; - currencyId0: string; - currencyId1: string; -} -export interface RemoveLiquidityV3TransactionInfo { - type: TransactionType.REMOVE_LIQUIDITY_V3; - baseCurrencyId: string; - quoteCurrencyId: string; - expectedAmountBaseRaw: string; - expectedAmountQuoteRaw: string; -} -export interface SubmitProposalTransactionInfo { - type: TransactionType.SUBMIT_PROPOSAL; -} -export declare type TransactionInfo = ApproveTransactionInfo | ExactOutputSwapTransactionInfo | ExactInputSwapTransactionInfo | ClaimTransactionInfo | VoteTransactionInfo | DelegateTransactionInfo | DepositLiquidityStakingTransactionInfo | WithdrawLiquidityStakingTransactionInfo | WrapTransactionInfo | CreateV3PoolTransactionInfo | AddLiquidityV3PoolTransactionInfo | AddLiquidityV2PoolTransactionInfo | MigrateV2LiquidityToV3TransactionInfo | CollectFeesTransactionInfo | RemoveLiquidityV3TransactionInfo | SubmitProposalTransactionInfo; -export declare const addTransaction: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ - chainId: number; - hash: string; - from: string; - info: TransactionInfo; -}, string>; -export declare const clearAllTransactions: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ - chainId: number; -}, string>; -export declare const finalizeTransaction: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ - chainId: number; - hash: string; - receipt: SerializableTransactionReceipt; -}, string>; -export declare const checkedTransaction: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ - chainId: number; - hash: string; - blockNumber: number; -}, string>; -export {}; diff --git a/dist2/types/state/transactions/hooks.d.ts b/dist2/types/state/transactions/hooks.d.ts deleted file mode 100644 index 88699e0f2e7..00000000000 --- a/dist2/types/state/transactions/hooks.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { TransactionResponse } from '@ethersproject/providers'; -import { Token } from '@uniswap/sdk-core'; -import { TransactionInfo } from './actions'; -import { TransactionDetails } from './reducer'; -export declare function useTransactionAdder(): (response: TransactionResponse, info: TransactionInfo) => void; -export declare function useAllTransactions(): { - [txHash: string]: TransactionDetails; -}; -export declare function useTransaction(transactionHash?: string): TransactionDetails | undefined; -export declare function useIsTransactionPending(transactionHash?: string): boolean; -export declare function useIsTransactionConfirmed(transactionHash?: string): boolean; -/** - * Returns whether a transaction happened in the last day (86400 seconds * 1000 milliseconds / second) - * @param tx to check for recency - */ -export declare function isTransactionRecent(tx: TransactionDetails): boolean; -export declare function useHasPendingApproval(token?: Token, spender?: string): boolean; -export declare function useUserHasSubmittedClaim(account?: string): { - claimSubmitted: boolean; - claimTxn: TransactionDetails | undefined; -}; diff --git a/dist2/types/state/transactions/reducer.d.ts b/dist2/types/state/transactions/reducer.d.ts deleted file mode 100644 index cbe25a5de07..00000000000 --- a/dist2/types/state/transactions/reducer.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { SerializableTransactionReceipt, TransactionInfo } from './actions'; -export interface TransactionDetails { - hash: string; - receipt?: SerializableTransactionReceipt; - lastCheckedBlockNumber?: number; - addedTime: number; - confirmedTime?: number; - from: string; - info: TransactionInfo; -} -export interface TransactionState { - [chainId: number]: { - [txHash: string]: TransactionDetails; - }; -} -export declare const initialState: TransactionState; -declare const _default: import("redux").Reducer; -export default _default; diff --git a/dist2/types/state/transactions/updater.d.ts b/dist2/types/state/transactions/updater.d.ts deleted file mode 100644 index d1883e2693b..00000000000 --- a/dist2/types/state/transactions/updater.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -export default function Updater(): JSX.Element; diff --git a/dist2/types/state/user/actions.d.ts b/dist2/types/state/user/actions.d.ts deleted file mode 100644 index 5d594bf7c64..00000000000 --- a/dist2/types/state/user/actions.d.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { SupportedLocale } from 'constants/locales'; -export interface SerializedToken { - chainId: number; - address: string; - decimals: number; - symbol?: string; - name?: string; -} -export interface SerializedPair { - token0: SerializedToken; - token1: SerializedToken; -} -export declare const updateMatchesDarkMode: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ - matchesDarkMode: boolean; -}, string>; -export declare const updateUserDarkMode: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ - userDarkMode: boolean; -}, string>; -export declare const updateUserExpertMode: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ - userExpertMode: boolean; -}, string>; -export declare const updateUserLocale: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ - userLocale: SupportedLocale; -}, string>; -export declare const updateShowSurveyPopup: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ - showSurveyPopup: boolean; -}, string>; -export declare const updateUserClientSideRouter: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ - userClientSideRouter: boolean; -}, string>; -export declare const updateHideClosedPositions: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ - userHideClosedPositions: boolean; -}, string>; -export declare const updateUserSlippageTolerance: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ - userSlippageTolerance: number | 'auto'; -}, string>; -export declare const updateUserDeadline: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ - userDeadline: number; -}, string>; -export declare const addSerializedToken: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ - serializedToken: SerializedToken; -}, string>; -export declare const removeSerializedToken: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ - chainId: number; - address: string; -}, string>; -export declare const addSerializedPair: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ - serializedPair: SerializedPair; -}, string>; -export declare const removeSerializedPair: import("@reduxjs/toolkit").ActionCreatorWithPayload<{ - chainId: number; - tokenAAddress: string; - tokenBAddress: string; -}, string>; diff --git a/dist2/types/state/user/hooks.d.ts b/dist2/types/state/user/hooks.d.ts deleted file mode 100644 index 4de57a33992..00000000000 --- a/dist2/types/state/user/hooks.d.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { Percent, Token } from '@uniswap/sdk-core'; -import { Pair } from '@uniswap/v2-sdk'; -import { SupportedLocale } from 'constants/locales'; -export declare function useIsDarkMode(): boolean; -export declare function useDarkModeManager(): [boolean, () => void]; -export declare function useUserLocale(): SupportedLocale | null; -export declare function useUserLocaleManager(): [SupportedLocale | null, (newLocale: SupportedLocale) => void]; -export declare function useIsExpertMode(): boolean; -export declare function useExpertModeManager(): [boolean, () => void]; -export declare function useShowSurveyPopup(): [boolean | undefined, (showPopup: boolean) => void]; -export declare function useClientSideRouter(): [boolean, (userClientSideRouter: boolean) => void]; -export declare function useSetUserSlippageTolerance(): (slippageTolerance: Percent | 'auto') => void; -/** - * Return the user's slippage tolerance, from the redux store, and a function to update the slippage tolerance - */ -export declare function useUserSlippageTolerance(): Percent | 'auto'; -export declare function useUserHideClosedPositions(): [boolean, (newHideClosedPositions: boolean) => void]; -/** - * Same as above but replaces the auto with a default value - * @param defaultSlippageTolerance the default value to replace auto with - */ -export declare function useUserSlippageToleranceWithDefault(defaultSlippageTolerance: Percent): Percent; -export declare function useUserTransactionTTL(): [number, (slippage: number) => void]; -export declare function useAddUserToken(): (token: Token) => void; -export declare function useRemoveUserAddedToken(): (chainId: number, address: string) => void; -export declare function useUserAddedTokens(): Token[]; -export declare function usePairAdder(): (pair: Pair) => void; -export declare function useURLWarningVisible(): boolean; -/** - * Given two tokens return the liquidity token that represents its liquidity shares - * @param tokenA one of the two tokens - * @param tokenB the other token - */ -export declare function toV2LiquidityToken([tokenA, tokenB]: [Token, Token]): Token; -/** - * Returns all the pairs of tokens that are tracked by the user for the current chain ID. - */ -export declare function useTrackedTokenPairs(): [Token, Token][]; diff --git a/dist2/types/state/user/reducer.d.ts b/dist2/types/state/user/reducer.d.ts deleted file mode 100644 index 1fb01db088f..00000000000 --- a/dist2/types/state/user/reducer.d.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { SupportedLocale } from 'constants/locales'; -import { SerializedPair, SerializedToken } from './actions'; -export interface UserState { - lastUpdateVersionTimestamp?: number; - matchesDarkMode: boolean; - userDarkMode: boolean | null; - userLocale: SupportedLocale | null; - userExpertMode: boolean; - userClientSideRouter: boolean; - userHideClosedPositions: boolean; - userSlippageTolerance: number | 'auto'; - userSlippageToleranceHasBeenMigratedToAuto: boolean; - userDeadline: number; - tokens: { - [chainId: number]: { - [address: string]: SerializedToken; - }; - }; - pairs: { - [chainId: number]: { - [key: string]: SerializedPair; - }; - }; - timestamp: number; - URLWarningVisible: boolean; - showSurveyPopup: boolean | undefined; -} -export declare const initialState: UserState; -declare const _default: import("redux").Reducer; -export default _default; diff --git a/dist2/types/state/user/updater.d.ts b/dist2/types/state/user/updater.d.ts deleted file mode 100644 index b91977cb6ee..00000000000 --- a/dist2/types/state/user/updater.d.ts +++ /dev/null @@ -1 +0,0 @@ -export default function Updater(): null; diff --git a/dist2/types/state/wallet/hooks.d.ts b/dist2/types/state/wallet/hooks.d.ts deleted file mode 100644 index 09614d558ef..00000000000 --- a/dist2/types/state/wallet/hooks.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { CurrencyAmount, Token } from '@uniswap/sdk-core'; -export { default as useCurrencyBalance, useCurrencyBalances, useNativeCurrencyBalances, useTokenBalance, useTokenBalances, useTokenBalancesWithLoadingIndicator, } from 'lib/hooks/useCurrencyBalance'; -export declare function useAllTokenBalances(): { - [tokenAddress: string]: CurrencyAmount | undefined; -}; -export declare function useAggregateUniBalance(): CurrencyAmount | undefined; diff --git a/dist2/types/theme/DarkModeQueryParamReader.d.ts b/dist2/types/theme/DarkModeQueryParamReader.d.ts deleted file mode 100644 index dbf737386f4..00000000000 --- a/dist2/types/theme/DarkModeQueryParamReader.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { RouteComponentProps } from 'react-router-dom'; -export default function DarkModeQueryParamReader({ location: { search } }: RouteComponentProps): null; diff --git a/dist2/types/theme/RadialGradientByChainUpdater.d.ts b/dist2/types/theme/RadialGradientByChainUpdater.d.ts deleted file mode 100644 index a95bde4206f..00000000000 --- a/dist2/types/theme/RadialGradientByChainUpdater.d.ts +++ /dev/null @@ -1 +0,0 @@ -export default function RadialGradientByChainUpdater(): null; diff --git a/dist2/types/theme/components.d.ts b/dist2/types/theme/components.d.ts deleted file mode 100644 index 36309781f0d..00000000000 --- a/dist2/types/theme/components.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { HTMLProps } from 'react'; -import { Link } from 'react-router-dom'; -export declare const ButtonText: import("styled-components").StyledComponent<"button", import("styled-components").DefaultTheme, {}, never>; -export declare const CloseIcon: import("styled-components").StyledComponent void; -}, never>; -export declare const IconWrapper: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, { - stroke?: string | undefined; - size?: string | undefined; - marginRight?: string | undefined; - marginLeft?: string | undefined; -}, never>; -export declare const LinkStyledButton: import("styled-components").StyledComponent<"button", import("styled-components").DefaultTheme, { - disabled?: boolean | undefined; -}, never>; -export declare const StyledInternalLink: import("styled-components").StyledComponent; -export declare const TrashIcon: import("styled-components").StyledComponent; -export declare const UniTokenAnimated: import("styled-components").StyledComponent<"img", import("styled-components").DefaultTheme, {}, never>; -/** - * Outbound link that handles firing google analytics events - */ -export declare function ExternalLink({ target, href, rel, ...rest }: Omit, 'as' | 'ref' | 'onClick'> & { - href: string; -}): JSX.Element; -export declare function ExternalLinkIcon({ target, href, rel, ...rest }: Omit, 'as' | 'ref' | 'onClick'> & { - href: string; -}): JSX.Element; -export declare function BackArrow({ to }: { - to: string; -}): JSX.Element; -export declare const CustomLightSpinner: import("styled-components").StyledComponent<"img", import("styled-components").DefaultTheme, { - size: string; -}, never>; -export declare const HideSmall: import("styled-components").StyledComponent<"span", import("styled-components").DefaultTheme, {}, never>; -export declare const HideExtraSmall: import("styled-components").StyledComponent<"span", import("styled-components").DefaultTheme, {}, never>; -export declare const SmallOnly: import("styled-components").StyledComponent<"span", import("styled-components").DefaultTheme, {}, never>; -export declare const Separator: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>; diff --git a/dist2/types/theme/index.d.ts b/dist2/types/theme/index.d.ts deleted file mode 100644 index c7f7818cc4c..00000000000 --- a/dist2/types/theme/index.d.ts +++ /dev/null @@ -1,50 +0,0 @@ -import React from 'react'; -import { TextProps as TextPropsOriginal } from 'rebass'; -import { DefaultTheme } from 'styled-components/macro'; -export * from './components'; -declare type TextProps = Omit; -export declare const MEDIA_WIDTHS: { - upToExtraSmall: number; - upToSmall: number; - upToMedium: number; - upToLarge: number; -}; -export declare enum Z_INDEX { - deprecated_zero = 0, - deprecated_content = 1, - dropdown = 1000, - sticky = 1020, - fixed = 1030, - modalBackdrop = 1040, - offcanvas = 1050, - modal = 1060, - popover = 1070, - tooltip = 1080 -} -export default function ThemeProvider({ children }: { - children: React.ReactNode; -}): JSX.Element; -/** - * Preset styles of the Rebass Text component - */ -export declare const ThemedText: { - Main(props: TextProps): JSX.Element; - Link(props: TextProps): JSX.Element; - Label(props: TextProps): JSX.Element; - Black(props: TextProps): JSX.Element; - White(props: TextProps): JSX.Element; - Body(props: TextProps): JSX.Element; - LargeHeader(props: TextProps): JSX.Element; - MediumHeader(props: TextProps): JSX.Element; - SubHeader(props: TextProps): JSX.Element; - Small(props: TextProps): JSX.Element; - Blue(props: TextProps): JSX.Element; - Yellow(props: TextProps): JSX.Element; - DarkGray(props: TextProps): JSX.Element; - Gray(props: TextProps): JSX.Element; - Italic(props: TextProps): JSX.Element; - Error({ error, ...props }: { - error: boolean; - } & TextProps): JSX.Element; -}; -export declare const ThemedGlobalStyle: import("styled-components").GlobalStyleComponent<{}, DefaultTheme>; diff --git a/dist2/types/types/tuple.d.ts b/dist2/types/types/tuple.d.ts deleted file mode 100644 index 829e60dbff5..00000000000 --- a/dist2/types/types/tuple.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -export declare type TupleSplit = O['length'] extends N ? [O, T] : T extends readonly [infer F, ...infer R] ? TupleSplit : [O, T]; -export declare type TakeFirst = TupleSplit[0]; -export declare type SkipFirst = TupleSplit[1]; -export declare type NonNullable = T extends null | undefined ? never : T; diff --git a/dist2/types/types/v3/commons.d.ts b/dist2/types/types/v3/commons.d.ts deleted file mode 100644 index fbb82635f1f..00000000000 --- a/dist2/types/types/v3/commons.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { EventFilter, Event } from "ethers"; -import { Result } from "@ethersproject/abi"; -export interface TypedEventFilter<_EventArgsArray, _EventArgsObject> extends EventFilter { -} -export interface TypedEvent extends Event { - args: EventArgs; -} -export declare type TypedListener, EventArgsObject> = (...listenerArg: [ - ...EventArgsArray, - TypedEvent -]) => void; -export declare type MinEthersFactory = { - deploy(...a: ARGS[]): Promise; -}; -export declare type GetContractTypeFromFactory = F extends MinEthersFactory ? C : never; -export declare type GetARGsTypeFromFactory = F extends MinEthersFactory ? Parameters : never; diff --git a/dist2/types/types/v3/factories/IApproveAndCall__factory.d.ts b/dist2/types/types/v3/factories/IApproveAndCall__factory.d.ts deleted file mode 100644 index ced5b912e4f..00000000000 --- a/dist2/types/types/v3/factories/IApproveAndCall__factory.d.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { IApproveAndCall, IApproveAndCallInterface } from "../IApproveAndCall"; -export declare class IApproveAndCall__factory { - static readonly abi: ({ - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - } | { - inputs: { - components: { - internalType: string; - name: string; - type: string; - }[]; - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - })[]; - static createInterface(): IApproveAndCallInterface; - static connect(address: string, signerOrProvider: Signer | Provider): IApproveAndCall; -} diff --git a/dist2/types/types/v3/factories/IERC1271__factory.d.ts b/dist2/types/types/v3/factories/IERC1271__factory.d.ts deleted file mode 100644 index 4562379cebe..00000000000 --- a/dist2/types/types/v3/factories/IERC1271__factory.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { IERC1271, IERC1271Interface } from "../IERC1271"; -export declare class IERC1271__factory { - static readonly abi: { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - }[]; - static createInterface(): IERC1271Interface; - static connect(address: string, signerOrProvider: Signer | Provider): IERC1271; -} diff --git a/dist2/types/types/v3/factories/IERC20Metadata__factory.d.ts b/dist2/types/types/v3/factories/IERC20Metadata__factory.d.ts deleted file mode 100644 index 53bb5aec292..00000000000 --- a/dist2/types/types/v3/factories/IERC20Metadata__factory.d.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { IERC20Metadata, IERC20MetadataInterface } from "../IERC20Metadata"; -export declare class IERC20Metadata__factory { - static readonly abi: ({ - anonymous: boolean; - inputs: { - indexed: boolean; - internalType: string; - name: string; - type: string; - }[]; - name: string; - type: string; - outputs?: undefined; - stateMutability?: undefined; - } | { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - anonymous?: undefined; - })[]; - static createInterface(): IERC20MetadataInterface; - static connect(address: string, signerOrProvider: Signer | Provider): IERC20Metadata; -} diff --git a/dist2/types/types/v3/factories/IERC20Minimal__factory.d.ts b/dist2/types/types/v3/factories/IERC20Minimal__factory.d.ts deleted file mode 100644 index 7c0c55192ab..00000000000 --- a/dist2/types/types/v3/factories/IERC20Minimal__factory.d.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { IERC20Minimal, IERC20MinimalInterface } from "../IERC20Minimal"; -export declare class IERC20Minimal__factory { - static readonly abi: ({ - anonymous: boolean; - inputs: { - indexed: boolean; - internalType: string; - name: string; - type: string; - }[]; - name: string; - type: string; - outputs?: undefined; - stateMutability?: undefined; - } | { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - anonymous?: undefined; - })[]; - static createInterface(): IERC20MinimalInterface; - static connect(address: string, signerOrProvider: Signer | Provider): IERC20Minimal; -} diff --git a/dist2/types/types/v3/factories/IERC20PermitAllowed__factory.d.ts b/dist2/types/types/v3/factories/IERC20PermitAllowed__factory.d.ts deleted file mode 100644 index 41677f64bb8..00000000000 --- a/dist2/types/types/v3/factories/IERC20PermitAllowed__factory.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { IERC20PermitAllowed, IERC20PermitAllowedInterface } from "../IERC20PermitAllowed"; -export declare class IERC20PermitAllowed__factory { - static readonly abi: { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: never[]; - stateMutability: string; - type: string; - }[]; - static createInterface(): IERC20PermitAllowedInterface; - static connect(address: string, signerOrProvider: Signer | Provider): IERC20PermitAllowed; -} diff --git a/dist2/types/types/v3/factories/IERC721Permit__factory.d.ts b/dist2/types/types/v3/factories/IERC721Permit__factory.d.ts deleted file mode 100644 index f2f16933e54..00000000000 --- a/dist2/types/types/v3/factories/IERC721Permit__factory.d.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { IERC721Permit, IERC721PermitInterface } from "../IERC721Permit"; -export declare class IERC721Permit__factory { - static readonly abi: ({ - anonymous: boolean; - inputs: { - indexed: boolean; - internalType: string; - name: string; - type: string; - }[]; - name: string; - type: string; - outputs?: undefined; - stateMutability?: undefined; - } | { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - anonymous?: undefined; - })[]; - static createInterface(): IERC721PermitInterface; - static connect(address: string, signerOrProvider: Signer | Provider): IERC721Permit; -} diff --git a/dist2/types/types/v3/factories/IImmutableState__factory.d.ts b/dist2/types/types/v3/factories/IImmutableState__factory.d.ts deleted file mode 100644 index de38ce60118..00000000000 --- a/dist2/types/types/v3/factories/IImmutableState__factory.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { IImmutableState, IImmutableStateInterface } from "../IImmutableState"; -export declare class IImmutableState__factory { - static readonly abi: { - inputs: never[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - }[]; - static createInterface(): IImmutableStateInterface; - static connect(address: string, signerOrProvider: Signer | Provider): IImmutableState; -} diff --git a/dist2/types/types/v3/factories/IMulticallExtended__factory.d.ts b/dist2/types/types/v3/factories/IMulticallExtended__factory.d.ts deleted file mode 100644 index d778c6d1d8f..00000000000 --- a/dist2/types/types/v3/factories/IMulticallExtended__factory.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { IMulticallExtended, IMulticallExtendedInterface } from "../IMulticallExtended"; -export declare class IMulticallExtended__factory { - static readonly abi: { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - }[]; - static createInterface(): IMulticallExtendedInterface; - static connect(address: string, signerOrProvider: Signer | Provider): IMulticallExtended; -} diff --git a/dist2/types/types/v3/factories/IMulticall__factory.d.ts b/dist2/types/types/v3/factories/IMulticall__factory.d.ts deleted file mode 100644 index 184fc3399d7..00000000000 --- a/dist2/types/types/v3/factories/IMulticall__factory.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { IMulticall, IMulticallInterface } from "../IMulticall"; -export declare class IMulticall__factory { - static readonly abi: { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - }[]; - static createInterface(): IMulticallInterface; - static connect(address: string, signerOrProvider: Signer | Provider): IMulticall; -} diff --git a/dist2/types/types/v3/factories/INonfungiblePositionManager__factory.d.ts b/dist2/types/types/v3/factories/INonfungiblePositionManager__factory.d.ts deleted file mode 100644 index f6190ed9c79..00000000000 --- a/dist2/types/types/v3/factories/INonfungiblePositionManager__factory.d.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { INonfungiblePositionManager, INonfungiblePositionManagerInterface } from "../INonfungiblePositionManager"; -export declare class INonfungiblePositionManager__factory { - static readonly abi: ({ - anonymous: boolean; - inputs: { - indexed: boolean; - internalType: string; - name: string; - type: string; - }[]; - name: string; - type: string; - outputs?: undefined; - stateMutability?: undefined; - } | { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - anonymous?: undefined; - } | { - inputs: { - components: { - internalType: string; - name: string; - type: string; - }[]; - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - anonymous?: undefined; - })[]; - static createInterface(): INonfungiblePositionManagerInterface; - static connect(address: string, signerOrProvider: Signer | Provider): INonfungiblePositionManager; -} diff --git a/dist2/types/types/v3/factories/INonfungibleTokenPositionDescriptor__factory.d.ts b/dist2/types/types/v3/factories/INonfungibleTokenPositionDescriptor__factory.d.ts deleted file mode 100644 index d7a32e1078d..00000000000 --- a/dist2/types/types/v3/factories/INonfungibleTokenPositionDescriptor__factory.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { INonfungibleTokenPositionDescriptor, INonfungibleTokenPositionDescriptorInterface } from "../INonfungibleTokenPositionDescriptor"; -export declare class INonfungibleTokenPositionDescriptor__factory { - static readonly abi: { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - }[]; - static createInterface(): INonfungibleTokenPositionDescriptorInterface; - static connect(address: string, signerOrProvider: Signer | Provider): INonfungibleTokenPositionDescriptor; -} diff --git a/dist2/types/types/v3/factories/IOracleSlippage__factory.d.ts b/dist2/types/types/v3/factories/IOracleSlippage__factory.d.ts deleted file mode 100644 index b7e5bc00443..00000000000 --- a/dist2/types/types/v3/factories/IOracleSlippage__factory.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { IOracleSlippage, IOracleSlippageInterface } from "../IOracleSlippage"; -export declare class IOracleSlippage__factory { - static readonly abi: { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: never[]; - stateMutability: string; - type: string; - }[]; - static createInterface(): IOracleSlippageInterface; - static connect(address: string, signerOrProvider: Signer | Provider): IOracleSlippage; -} diff --git a/dist2/types/types/v3/factories/IPeripheryImmutableState__factory.d.ts b/dist2/types/types/v3/factories/IPeripheryImmutableState__factory.d.ts deleted file mode 100644 index 8a05531e16a..00000000000 --- a/dist2/types/types/v3/factories/IPeripheryImmutableState__factory.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { IPeripheryImmutableState, IPeripheryImmutableStateInterface } from "../IPeripheryImmutableState"; -export declare class IPeripheryImmutableState__factory { - static readonly abi: { - inputs: never[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - }[]; - static createInterface(): IPeripheryImmutableStateInterface; - static connect(address: string, signerOrProvider: Signer | Provider): IPeripheryImmutableState; -} diff --git a/dist2/types/types/v3/factories/IPeripheryPaymentsExtended__factory.d.ts b/dist2/types/types/v3/factories/IPeripheryPaymentsExtended__factory.d.ts deleted file mode 100644 index c7398f0dbac..00000000000 --- a/dist2/types/types/v3/factories/IPeripheryPaymentsExtended__factory.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { IPeripheryPaymentsExtended, IPeripheryPaymentsExtendedInterface } from "../IPeripheryPaymentsExtended"; -export declare class IPeripheryPaymentsExtended__factory { - static readonly abi: { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: never[]; - stateMutability: string; - type: string; - }[]; - static createInterface(): IPeripheryPaymentsExtendedInterface; - static connect(address: string, signerOrProvider: Signer | Provider): IPeripheryPaymentsExtended; -} diff --git a/dist2/types/types/v3/factories/IPeripheryPaymentsWithFeeExtended__factory.d.ts b/dist2/types/types/v3/factories/IPeripheryPaymentsWithFeeExtended__factory.d.ts deleted file mode 100644 index d871da4d11b..00000000000 --- a/dist2/types/types/v3/factories/IPeripheryPaymentsWithFeeExtended__factory.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { IPeripheryPaymentsWithFeeExtended, IPeripheryPaymentsWithFeeExtendedInterface } from "../IPeripheryPaymentsWithFeeExtended"; -export declare class IPeripheryPaymentsWithFeeExtended__factory { - static readonly abi: { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: never[]; - stateMutability: string; - type: string; - }[]; - static createInterface(): IPeripheryPaymentsWithFeeExtendedInterface; - static connect(address: string, signerOrProvider: Signer | Provider): IPeripheryPaymentsWithFeeExtended; -} diff --git a/dist2/types/types/v3/factories/IPeripheryPaymentsWithFee__factory.d.ts b/dist2/types/types/v3/factories/IPeripheryPaymentsWithFee__factory.d.ts deleted file mode 100644 index da4a9c82be4..00000000000 --- a/dist2/types/types/v3/factories/IPeripheryPaymentsWithFee__factory.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { IPeripheryPaymentsWithFee, IPeripheryPaymentsWithFeeInterface } from "../IPeripheryPaymentsWithFee"; -export declare class IPeripheryPaymentsWithFee__factory { - static readonly abi: { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: never[]; - stateMutability: string; - type: string; - }[]; - static createInterface(): IPeripheryPaymentsWithFeeInterface; - static connect(address: string, signerOrProvider: Signer | Provider): IPeripheryPaymentsWithFee; -} diff --git a/dist2/types/types/v3/factories/IPeripheryPayments__factory.d.ts b/dist2/types/types/v3/factories/IPeripheryPayments__factory.d.ts deleted file mode 100644 index 53324c7278c..00000000000 --- a/dist2/types/types/v3/factories/IPeripheryPayments__factory.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { IPeripheryPayments, IPeripheryPaymentsInterface } from "../IPeripheryPayments"; -export declare class IPeripheryPayments__factory { - static readonly abi: { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: never[]; - stateMutability: string; - type: string; - }[]; - static createInterface(): IPeripheryPaymentsInterface; - static connect(address: string, signerOrProvider: Signer | Provider): IPeripheryPayments; -} diff --git a/dist2/types/types/v3/factories/IPoolInitializer__factory.d.ts b/dist2/types/types/v3/factories/IPoolInitializer__factory.d.ts deleted file mode 100644 index 62901585ec8..00000000000 --- a/dist2/types/types/v3/factories/IPoolInitializer__factory.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { IPoolInitializer, IPoolInitializerInterface } from "../IPoolInitializer"; -export declare class IPoolInitializer__factory { - static readonly abi: { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - }[]; - static createInterface(): IPoolInitializerInterface; - static connect(address: string, signerOrProvider: Signer | Provider): IPoolInitializer; -} diff --git a/dist2/types/types/v3/factories/IQuoterV2__factory.d.ts b/dist2/types/types/v3/factories/IQuoterV2__factory.d.ts deleted file mode 100644 index 2505a92f877..00000000000 --- a/dist2/types/types/v3/factories/IQuoterV2__factory.d.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { IQuoterV2, IQuoterV2Interface } from "../IQuoterV2"; -export declare class IQuoterV2__factory { - static readonly abi: ({ - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - } | { - inputs: { - components: { - internalType: string; - name: string; - type: string; - }[]; - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - })[]; - static createInterface(): IQuoterV2Interface; - static connect(address: string, signerOrProvider: Signer | Provider): IQuoterV2; -} diff --git a/dist2/types/types/v3/factories/IQuoter__factory.d.ts b/dist2/types/types/v3/factories/IQuoter__factory.d.ts deleted file mode 100644 index a2630bcb961..00000000000 --- a/dist2/types/types/v3/factories/IQuoter__factory.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { IQuoter, IQuoterInterface } from "../IQuoter"; -export declare class IQuoter__factory { - static readonly abi: { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - }[]; - static createInterface(): IQuoterInterface; - static connect(address: string, signerOrProvider: Signer | Provider): IQuoter; -} diff --git a/dist2/types/types/v3/factories/ISelfPermit__factory.d.ts b/dist2/types/types/v3/factories/ISelfPermit__factory.d.ts deleted file mode 100644 index 7f25b0cdb2f..00000000000 --- a/dist2/types/types/v3/factories/ISelfPermit__factory.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { ISelfPermit, ISelfPermitInterface } from "../ISelfPermit"; -export declare class ISelfPermit__factory { - static readonly abi: { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: never[]; - stateMutability: string; - type: string; - }[]; - static createInterface(): ISelfPermitInterface; - static connect(address: string, signerOrProvider: Signer | Provider): ISelfPermit; -} diff --git a/dist2/types/types/v3/factories/ISwapRouter02__factory.d.ts b/dist2/types/types/v3/factories/ISwapRouter02__factory.d.ts deleted file mode 100644 index e847f149986..00000000000 --- a/dist2/types/types/v3/factories/ISwapRouter02__factory.d.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { ISwapRouter02, ISwapRouter02Interface } from "../ISwapRouter02"; -export declare class ISwapRouter02__factory { - static readonly abi: ({ - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - } | { - inputs: { - components: { - internalType: string; - name: string; - type: string; - }[]; - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - })[]; - static createInterface(): ISwapRouter02Interface; - static connect(address: string, signerOrProvider: Signer | Provider): ISwapRouter02; -} diff --git a/dist2/types/types/v3/factories/ISwapRouter__factory.d.ts b/dist2/types/types/v3/factories/ISwapRouter__factory.d.ts deleted file mode 100644 index cd4eeabb067..00000000000 --- a/dist2/types/types/v3/factories/ISwapRouter__factory.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { ISwapRouter, ISwapRouterInterface } from "../ISwapRouter"; -export declare class ISwapRouter__factory { - static readonly abi: ({ - inputs: { - components: { - internalType: string; - name: string; - type: string; - }[]; - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - } | { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: never[]; - stateMutability: string; - type: string; - })[]; - static createInterface(): ISwapRouterInterface; - static connect(address: string, signerOrProvider: Signer | Provider): ISwapRouter; -} diff --git a/dist2/types/types/v3/factories/ITickLens__factory.d.ts b/dist2/types/types/v3/factories/ITickLens__factory.d.ts deleted file mode 100644 index 79f2c5704d0..00000000000 --- a/dist2/types/types/v3/factories/ITickLens__factory.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { ITickLens, ITickLensInterface } from "../ITickLens"; -export declare class ITickLens__factory { - static readonly abi: { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - components: { - internalType: string; - name: string; - type: string; - }[]; - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - }[]; - static createInterface(): ITickLensInterface; - static connect(address: string, signerOrProvider: Signer | Provider): ITickLens; -} diff --git a/dist2/types/types/v3/factories/IUniswapV3Factory__factory.d.ts b/dist2/types/types/v3/factories/IUniswapV3Factory__factory.d.ts deleted file mode 100644 index 0d28d64d978..00000000000 --- a/dist2/types/types/v3/factories/IUniswapV3Factory__factory.d.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { IUniswapV3Factory, IUniswapV3FactoryInterface } from "../IUniswapV3Factory"; -export declare class IUniswapV3Factory__factory { - static readonly abi: ({ - anonymous: boolean; - inputs: { - indexed: boolean; - internalType: string; - name: string; - type: string; - }[]; - name: string; - type: string; - outputs?: undefined; - stateMutability?: undefined; - } | { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - anonymous?: undefined; - })[]; - static createInterface(): IUniswapV3FactoryInterface; - static connect(address: string, signerOrProvider: Signer | Provider): IUniswapV3Factory; -} diff --git a/dist2/types/types/v3/factories/IUniswapV3FlashCallback__factory.d.ts b/dist2/types/types/v3/factories/IUniswapV3FlashCallback__factory.d.ts deleted file mode 100644 index c4256ca5718..00000000000 --- a/dist2/types/types/v3/factories/IUniswapV3FlashCallback__factory.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { IUniswapV3FlashCallback, IUniswapV3FlashCallbackInterface } from "../IUniswapV3FlashCallback"; -export declare class IUniswapV3FlashCallback__factory { - static readonly abi: { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: never[]; - stateMutability: string; - type: string; - }[]; - static createInterface(): IUniswapV3FlashCallbackInterface; - static connect(address: string, signerOrProvider: Signer | Provider): IUniswapV3FlashCallback; -} diff --git a/dist2/types/types/v3/factories/IUniswapV3MintCallback__factory.d.ts b/dist2/types/types/v3/factories/IUniswapV3MintCallback__factory.d.ts deleted file mode 100644 index 4c7746b831e..00000000000 --- a/dist2/types/types/v3/factories/IUniswapV3MintCallback__factory.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { IUniswapV3MintCallback, IUniswapV3MintCallbackInterface } from "../IUniswapV3MintCallback"; -export declare class IUniswapV3MintCallback__factory { - static readonly abi: { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: never[]; - stateMutability: string; - type: string; - }[]; - static createInterface(): IUniswapV3MintCallbackInterface; - static connect(address: string, signerOrProvider: Signer | Provider): IUniswapV3MintCallback; -} diff --git a/dist2/types/types/v3/factories/IUniswapV3PoolActions__factory.d.ts b/dist2/types/types/v3/factories/IUniswapV3PoolActions__factory.d.ts deleted file mode 100644 index 778125ea623..00000000000 --- a/dist2/types/types/v3/factories/IUniswapV3PoolActions__factory.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { IUniswapV3PoolActions, IUniswapV3PoolActionsInterface } from "../IUniswapV3PoolActions"; -export declare class IUniswapV3PoolActions__factory { - static readonly abi: { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - }[]; - static createInterface(): IUniswapV3PoolActionsInterface; - static connect(address: string, signerOrProvider: Signer | Provider): IUniswapV3PoolActions; -} diff --git a/dist2/types/types/v3/factories/IUniswapV3PoolDeployer__factory.d.ts b/dist2/types/types/v3/factories/IUniswapV3PoolDeployer__factory.d.ts deleted file mode 100644 index f72ec47cedc..00000000000 --- a/dist2/types/types/v3/factories/IUniswapV3PoolDeployer__factory.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { IUniswapV3PoolDeployer, IUniswapV3PoolDeployerInterface } from "../IUniswapV3PoolDeployer"; -export declare class IUniswapV3PoolDeployer__factory { - static readonly abi: { - inputs: never[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - }[]; - static createInterface(): IUniswapV3PoolDeployerInterface; - static connect(address: string, signerOrProvider: Signer | Provider): IUniswapV3PoolDeployer; -} diff --git a/dist2/types/types/v3/factories/IUniswapV3PoolDerivedState__factory.d.ts b/dist2/types/types/v3/factories/IUniswapV3PoolDerivedState__factory.d.ts deleted file mode 100644 index beeefdbd84e..00000000000 --- a/dist2/types/types/v3/factories/IUniswapV3PoolDerivedState__factory.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { IUniswapV3PoolDerivedState, IUniswapV3PoolDerivedStateInterface } from "../IUniswapV3PoolDerivedState"; -export declare class IUniswapV3PoolDerivedState__factory { - static readonly abi: { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - }[]; - static createInterface(): IUniswapV3PoolDerivedStateInterface; - static connect(address: string, signerOrProvider: Signer | Provider): IUniswapV3PoolDerivedState; -} diff --git a/dist2/types/types/v3/factories/IUniswapV3PoolEvents__factory.d.ts b/dist2/types/types/v3/factories/IUniswapV3PoolEvents__factory.d.ts deleted file mode 100644 index 2e7a45d088e..00000000000 --- a/dist2/types/types/v3/factories/IUniswapV3PoolEvents__factory.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { IUniswapV3PoolEvents, IUniswapV3PoolEventsInterface } from "../IUniswapV3PoolEvents"; -export declare class IUniswapV3PoolEvents__factory { - static readonly abi: { - anonymous: boolean; - inputs: { - indexed: boolean; - internalType: string; - name: string; - type: string; - }[]; - name: string; - type: string; - }[]; - static createInterface(): IUniswapV3PoolEventsInterface; - static connect(address: string, signerOrProvider: Signer | Provider): IUniswapV3PoolEvents; -} diff --git a/dist2/types/types/v3/factories/IUniswapV3PoolImmutables__factory.d.ts b/dist2/types/types/v3/factories/IUniswapV3PoolImmutables__factory.d.ts deleted file mode 100644 index 50c7e866a7f..00000000000 --- a/dist2/types/types/v3/factories/IUniswapV3PoolImmutables__factory.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { IUniswapV3PoolImmutables, IUniswapV3PoolImmutablesInterface } from "../IUniswapV3PoolImmutables"; -export declare class IUniswapV3PoolImmutables__factory { - static readonly abi: { - inputs: never[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - }[]; - static createInterface(): IUniswapV3PoolImmutablesInterface; - static connect(address: string, signerOrProvider: Signer | Provider): IUniswapV3PoolImmutables; -} diff --git a/dist2/types/types/v3/factories/IUniswapV3PoolOwnerActions__factory.d.ts b/dist2/types/types/v3/factories/IUniswapV3PoolOwnerActions__factory.d.ts deleted file mode 100644 index 6608be339cd..00000000000 --- a/dist2/types/types/v3/factories/IUniswapV3PoolOwnerActions__factory.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { IUniswapV3PoolOwnerActions, IUniswapV3PoolOwnerActionsInterface } from "../IUniswapV3PoolOwnerActions"; -export declare class IUniswapV3PoolOwnerActions__factory { - static readonly abi: { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - }[]; - static createInterface(): IUniswapV3PoolOwnerActionsInterface; - static connect(address: string, signerOrProvider: Signer | Provider): IUniswapV3PoolOwnerActions; -} diff --git a/dist2/types/types/v3/factories/IUniswapV3PoolState__factory.d.ts b/dist2/types/types/v3/factories/IUniswapV3PoolState__factory.d.ts deleted file mode 100644 index f1208b0e3b0..00000000000 --- a/dist2/types/types/v3/factories/IUniswapV3PoolState__factory.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { IUniswapV3PoolState, IUniswapV3PoolStateInterface } from "../IUniswapV3PoolState"; -export declare class IUniswapV3PoolState__factory { - static readonly abi: { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - }[]; - static createInterface(): IUniswapV3PoolStateInterface; - static connect(address: string, signerOrProvider: Signer | Provider): IUniswapV3PoolState; -} diff --git a/dist2/types/types/v3/factories/IUniswapV3Pool__factory.d.ts b/dist2/types/types/v3/factories/IUniswapV3Pool__factory.d.ts deleted file mode 100644 index 4277f4edeb5..00000000000 --- a/dist2/types/types/v3/factories/IUniswapV3Pool__factory.d.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { IUniswapV3Pool, IUniswapV3PoolInterface } from "../IUniswapV3Pool"; -export declare class IUniswapV3Pool__factory { - static readonly abi: ({ - anonymous: boolean; - inputs: { - indexed: boolean; - internalType: string; - name: string; - type: string; - }[]; - name: string; - type: string; - outputs?: undefined; - stateMutability?: undefined; - } | { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - anonymous?: undefined; - })[]; - static createInterface(): IUniswapV3PoolInterface; - static connect(address: string, signerOrProvider: Signer | Provider): IUniswapV3Pool; -} diff --git a/dist2/types/types/v3/factories/IUniswapV3Staker__factory.d.ts b/dist2/types/types/v3/factories/IUniswapV3Staker__factory.d.ts deleted file mode 100644 index a612a78dcee..00000000000 --- a/dist2/types/types/v3/factories/IUniswapV3Staker__factory.d.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { IUniswapV3Staker, IUniswapV3StakerInterface } from "../IUniswapV3Staker"; -export declare class IUniswapV3Staker__factory { - static readonly abi: ({ - anonymous: boolean; - inputs: { - indexed: boolean; - internalType: string; - name: string; - type: string; - }[]; - name: string; - type: string; - outputs?: undefined; - stateMutability?: undefined; - } | { - inputs: ({ - components: { - internalType: string; - name: string; - type: string; - }[]; - internalType: string; - name: string; - type: string; - } | { - internalType: string; - name: string; - type: string; - components?: undefined; - })[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - anonymous?: undefined; - })[]; - static createInterface(): IUniswapV3StakerInterface; - static connect(address: string, signerOrProvider: Signer | Provider): IUniswapV3Staker; -} diff --git a/dist2/types/types/v3/factories/IUniswapV3SwapCallback__factory.d.ts b/dist2/types/types/v3/factories/IUniswapV3SwapCallback__factory.d.ts deleted file mode 100644 index 8bfb65b0f11..00000000000 --- a/dist2/types/types/v3/factories/IUniswapV3SwapCallback__factory.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { IUniswapV3SwapCallback, IUniswapV3SwapCallbackInterface } from "../IUniswapV3SwapCallback"; -export declare class IUniswapV3SwapCallback__factory { - static readonly abi: { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: never[]; - stateMutability: string; - type: string; - }[]; - static createInterface(): IUniswapV3SwapCallbackInterface; - static connect(address: string, signerOrProvider: Signer | Provider): IUniswapV3SwapCallback; -} diff --git a/dist2/types/types/v3/factories/IV2SwapRouter__factory.d.ts b/dist2/types/types/v3/factories/IV2SwapRouter__factory.d.ts deleted file mode 100644 index 740d7900223..00000000000 --- a/dist2/types/types/v3/factories/IV2SwapRouter__factory.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { IV2SwapRouter, IV2SwapRouterInterface } from "../IV2SwapRouter"; -export declare class IV2SwapRouter__factory { - static readonly abi: { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - }[]; - static createInterface(): IV2SwapRouterInterface; - static connect(address: string, signerOrProvider: Signer | Provider): IV2SwapRouter; -} diff --git a/dist2/types/types/v3/factories/IV3Migrator__factory.d.ts b/dist2/types/types/v3/factories/IV3Migrator__factory.d.ts deleted file mode 100644 index 052401db9f1..00000000000 --- a/dist2/types/types/v3/factories/IV3Migrator__factory.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { IV3Migrator, IV3MigratorInterface } from "../IV3Migrator"; -export declare class IV3Migrator__factory { - static readonly abi: ({ - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - } | { - inputs: { - components: { - internalType: string; - name: string; - type: string; - }[]; - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: never[]; - stateMutability: string; - type: string; - })[]; - static createInterface(): IV3MigratorInterface; - static connect(address: string, signerOrProvider: Signer | Provider): IV3Migrator; -} diff --git a/dist2/types/types/v3/factories/IV3SwapRouter__factory.d.ts b/dist2/types/types/v3/factories/IV3SwapRouter__factory.d.ts deleted file mode 100644 index cc1ed16afc1..00000000000 --- a/dist2/types/types/v3/factories/IV3SwapRouter__factory.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { IV3SwapRouter, IV3SwapRouterInterface } from "../IV3SwapRouter"; -export declare class IV3SwapRouter__factory { - static readonly abi: ({ - inputs: { - components: { - internalType: string; - name: string; - type: string; - }[]; - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - } | { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: never[]; - stateMutability: string; - type: string; - })[]; - static createInterface(): IV3SwapRouterInterface; - static connect(address: string, signerOrProvider: Signer | Provider): IV3SwapRouter; -} diff --git a/dist2/types/types/v3/factories/IWETH9__factory.d.ts b/dist2/types/types/v3/factories/IWETH9__factory.d.ts deleted file mode 100644 index 37ab3b3883b..00000000000 --- a/dist2/types/types/v3/factories/IWETH9__factory.d.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { IWETH9, IWETH9Interface } from "../IWETH9"; -export declare class IWETH9__factory { - static readonly abi: ({ - anonymous: boolean; - inputs: { - indexed: boolean; - internalType: string; - name: string; - type: string; - }[]; - name: string; - type: string; - outputs?: undefined; - stateMutability?: undefined; - } | { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - anonymous?: undefined; - })[]; - static createInterface(): IWETH9Interface; - static connect(address: string, signerOrProvider: Signer | Provider): IWETH9; -} diff --git a/dist2/types/types/v3/factories/NFTDescriptor__factory.d.ts b/dist2/types/types/v3/factories/NFTDescriptor__factory.d.ts deleted file mode 100644 index 733ab1f98e7..00000000000 --- a/dist2/types/types/v3/factories/NFTDescriptor__factory.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Signer, ContractFactory, Overrides } from "ethers"; -import { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { NFTDescriptor, NFTDescriptorInterface } from "../NFTDescriptor"; -export declare class NFTDescriptor__factory extends ContractFactory { - constructor(signer?: Signer); - deploy(overrides?: Overrides & { - from?: string | Promise; - }): Promise; - getDeployTransaction(overrides?: Overrides & { - from?: string | Promise; - }): TransactionRequest; - attach(address: string): NFTDescriptor; - connect(signer: Signer): NFTDescriptor__factory; - static readonly bytecode = "0x615fdd610026600b82828239805160001a60731461001957fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c8063c49917d71461003a575b600080fd5b61004d610048366004613f08565b610063565b60405161005a919061464a565b60405180910390f35b6060600061007e83610079856101800151610170565b6103d1565b905060006100b2610092856060015161048c565b61009f866080015161048c565b6100ad876101a00151610644565b61065a565b905060006101006100c6866000015161068c565b6100d3876080015161048c565b6100e08860200151610644565b6100ed8960400151610644565b6100fb8a6101800151610170565b610767565b905060006101156101108761079d565b6109d8565b90506101458484848460405160200161013194939291906142c5565b6040516020818303038152906040526109d8565b6040516020016101559190614605565b6040516020818303038152906040529450505050505b919050565b606062ffffff82166101b6575060408051808201909152600281527f3025000000000000000000000000000000000000000000000000000000000000602082015261016b565b816000805b62ffffff8316156102065760ff8116156101d7576001016101f0565b600a62ffffff84160662ffffff166000146101f0576001015b600190910190600a62ffffff84160492506101bb565b61020e613e02565b60006005841061030357600060046102298660ff8716610b5d565b1015610236576001610239565b60005b60ff908116915061024d9085166001610b5d565b610258866005610b5d565b106102845761027f61026e60ff86166001610b5d565b610279876005610b5d565b90610b5d565b610287565b60005b60ff8516608085018190529092506102a6906001906102799085610bba565b60ff90811660a085015260808401516102cd9183916102c791166001610b5d565b90610bba565b60ff90811660408501526102f59082906102c7906102ee9088166001610bba565b8590610bba565b60ff16602084015250610373565b61030e600585610b5d565b60026080840181905290915061032c90600190610279908490610bba565b60ff90811660a084015261034e906103479085166002610bba565b8290610bba565b60ff1660208301819052610363906002610b5d565b60ff166040830152600160c08301525b6103926103838560ff8616610b5d565b62ffffff891690600a0a610c14565b8252600160e0830152600484116103aa5760006103b5565b6103b5846004610b5d565b60ff1660608301526103c682610c7b565b979650505050505050565b6060816103e1846060015161048c565b6103ee856080015161048c565b6104278660e00151156104065786610120015161040d565b8661010001515b8761016001518860c001518960a001518a60e00151610ea7565b6104608760e001511561043f57876101000151610446565b8761012001515b8861016001518960c001518a60a001518b60e00151610ea7565b6040516020016104749594939291906143ec565b60405160208183030381529060405290505b92915050565b6060816000805b82518160ff1610156104f057828160ff16815181106104ae57fe5b6020910101517fff0000000000000000000000000000000000000000000000000000000000000016601160f91b14156104e8576001909101905b600101610493565b5060ff81161561063c5760008160ff1683510167ffffffffffffffff8111801561051957600080fd5b506040519080825280601f01601f191660200182016040528015610544576020820181803683370190505b5090506000805b84518160ff16101561062f57848160ff168151811061056657fe5b6020910101517fff0000000000000000000000000000000000000000000000000000000000000016601160f91b14156105e4577f5c000000000000000000000000000000000000000000000000000000000000008383806001019450815181106105cc57fe5b60200101906001600160f81b031916908160001a9053505b848160ff16815181106105f357fe5b602001015160f81c60f81b83838060010194508151811061061057fe5b60200101906001600160f81b031916908160001a90535060010161054b565b508194505050505061016b565b509192915050565b60606104866001600160a01b0383166014610fd1565b6060838383866040516020016106739493929190614179565b60405160208183030381529060405290505b9392505050565b6060816106b157506040805180820190915260018152600360fc1b602082015261016b565b8160005b81156106c957600101600a820491506106b5565b60008167ffffffffffffffff811180156106e257600080fd5b506040519080825280601f01601f19166020018201604052801561070d576020820181803683370190505b50859350905060001982015b831561075e57600a840660300160f81b8282806001900393508151811061073c57fe5b60200101906001600160f81b031916908160001a905350600a84049350610719565b50949350505050565b606083858484896040516020016107829594939291906144ed565b60405160208183030381529060405290505b95945050505050565b60606000604051806102a001604052806107ba8560200151610644565b81526020016107cc8560400151610644565b8152602001846101a001516001600160a01b031681526020018460600151815260200184608001518152602001610807856101800151610170565b815260200184610100015160020b815260200184610120015160020b815260200184610160015160020b8152602001610850856101000151866101200151876101400151611159565b60000b81526020018460000151815260200161087a85602001516001600160a01b03166088611190565b815260200161089785604001516001600160a01b03166088611190565b81526020016108b485602001516001600160a01b03166000611190565b81526020016108d185604001516001600160a01b03166000611190565b81526020016109046108f686602001516001600160a01b03166010886000015161119f565b600060ff60106101126111bf565b815260200161093761092986604001516001600160a01b03166010886000015161119f565b600060ff60646101e46111bf565b815260200161095c6108f686602001516001600160a01b03166020886000015161119f565b815260200161098161092986604001516001600160a01b03166020886000015161119f565b81526020016109a66108f686602001516001600160a01b03166030886000015161119f565b81526020016109cb61092986604001516001600160a01b03166030886000015161119f565b9052905061068581611207565b60608151600014156109f9575060408051602081019091526000815261016b565b600060405180606001604052806040815260200161526b60409139905060006003845160020181610a2657fe5b04600402905060008160200167ffffffffffffffff81118015610a4857600080fd5b506040519080825280601f01601f191660200182016040528015610a73576020820181803683370190505b509050818152600183018586518101602084015b81831015610ae15760039283018051603f601282901c811687015160f890811b8552600c83901c8216880151811b6001860152600683901c8216880151811b60028601529116860151901b93820193909352600401610a87565b600389510660018114610afb5760028114610b2757610b4f565b7f3d3d000000000000000000000000000000000000000000000000000000000000600119830152610b4f565b7f3d000000000000000000000000000000000000000000000000000000000000006000198301525b509398975050505050505050565b600082821115610bb4576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600082820183811015610685576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000808211610c6a576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381610c7357fe5b049392505050565b60606000826020015160ff1667ffffffffffffffff81118015610c9d57600080fd5b506040519080825280601f01601f191660200182016040528015610cc8576020820181803683370190505b5090508260e0015115610d1e577f250000000000000000000000000000000000000000000000000000000000000081600183510381518110610d0657fe5b60200101906001600160f81b031916908160001a9053505b8260c0015115610d7b57600360fc1b81600081518110610d3a57fe5b60200101906001600160f81b031916908160001a905350601760f91b81600181518110610d6357fe5b60200101906001600160f81b031916908160001a9053505b608083015160ff165b60a0840151610d979060ff166001610bba565b811015610dce57603060f81b828281518110610daf57fe5b60200101906001600160f81b031916908160001a905350600101610d84565b505b825115610486576000836060015160ff16118015610dfb5750826060015160ff16836040015160ff16145b15610e3e5760408301805160ff600019820181169092528251601760f91b92849216908110610e2657fe5b60200101906001600160f81b031916908160001a9053505b8251610e5090603090600a9006610bba565b60f81b818460400180518091906001900360ff1660ff1681525060ff1681518110610e7757fe5b60200101906001600160f81b031916908160001a905350600a8360000181815181610e9e57fe5b04905250610dd0565b606084600281900b620d89e71981610ebb57fe5b050260020b8660020b1415610f15578115610ef1576040518060400160405280600381526020016209a82b60eb1b815250610f0e565b6040518060400160405280600381526020016226a4a760e91b8152505b9050610794565b84600281900b620d89e881610f2657fe5b050260020b8660020b1415610f7c578115610f5c576040518060400160405280600381526020016226a4a760e91b815250610f0e565b5060408051808201909152600381526209a82b60eb1b6020820152610794565b6000610f8787611496565b90508215610fbe57610fbb78010000000000000000000000000000000000000000000000006001600160a01b038316610c14565b90505b610fc98186866117e4565b915050610794565b606060008260020260020167ffffffffffffffff81118015610ff257600080fd5b506040519080825280601f01601f19166020018201604052801561101d576020820181803683370190505b509050600360fc1b8160008151811061103257fe5b60200101906001600160f81b031916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061107757fe5b60200101906001600160f81b031916908160001a905350600160028402015b6001811115611105577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106110ce57fe5b1a60f81b8282815181106110de57fe5b60200101906001600160f81b031916908160001a90535060049490941c9360001901611096565b508315610685576040805162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015290519081900360640190fd5b60008360020b8260020b12156111725750600019610685565b8260020b8260020b131561118857506001610685565b506000610685565b606061068583831c60036119b2565b600060ff826111ae8686611a79565b02816111b657fe5b06949350505050565b60606111fd6111f8846102c76111d5888a610b5d565b6111f26111e2888a610b5d565b6111ec8d8d610b5d565b90611a80565b90610c14565b61068c565b9695505050505050565b606061121282611ad9565b61122e836000015184602001518560600151866080015161218d565b611245846060015185608001518660a001516124b8565b6112638560c001518660e00151876101000151886101200151612608565b61128361127487610140015161068c565b8760c001518860e0015161295b565b6112968761014001518860400151612d8c565b6040516020018087805190602001908083835b602083106112c85780518252601f1990920191602091820191016112a9565b51815160209384036101000a600019018019909216911617905289519190930192890191508083835b602083106113105780518252601f1990920191602091820191016112f1565b51815160209384036101000a600019018019909216911617905288519190930192880191508083835b602083106113585780518252601f199092019160209182019101611339565b51815160209384036101000a600019018019909216911617905287519190930192870191508083835b602083106113a05780518252601f199092019160209182019101611381565b51815160209384036101000a600019018019909216911617905286519190930192860191508083835b602083106113e85780518252601f1990920191602091820191016113c9565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106114305780518252601f199092019160209182019101611411565b5181516020939093036101000a60001901801990911692169190911790527f3c2f7376673e000000000000000000000000000000000000000000000000000092019182525060408051808303601919018152600690920190529998505050505050505050565b60008060008360020b126114ad578260020b6114b5565b8260020b6000035b9050620d89e881111561150f576040805162461bcd60e51b815260206004820152600160248201527f5400000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60006001821661152357600160801b611535565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615611569576ffff97272373d413259a46990580e213a0260801c5b6004821615611588576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b60088216156115a7576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b60108216156115c6576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156115e5576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615611604576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615611623576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615611643576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615611663576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615611683576ff3392b0822b70005940c7a398e4b70f30260801c5b6108008216156116a3576fe7159475a2c29b7443b29c7fa6e889d90260801c5b6110008216156116c3576fd097f3bdfd2022b8845ad8f792aa58250260801c5b6120008216156116e3576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615611703576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615611723576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615611744576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615611764576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615611783576d2216e584f5fa1ea926041bedfe980260801c5b620800008216156117a0576b048a170391f7dc42444e8fa20260801c5b60008460020b13156117bb5780600019816117b757fe5b0490505b6401000000008106156117cf5760016117d2565b60005b60ff16602082901c0192505050919050565b606060006117f3858585612e04565b9050600061180b828368010000000000000000612f06565b90506c010000000000000000000000008210801561184c576118458272047bf19673df52e37f2410011d100000000000600160801b612f06565b9150611861565b61185e82620186a0600160801b612f06565b91505b8160005b811561187957600101600a82049150611865565b6000190160008061188a8684612fb5565b91509150801561189b576001909201915b6118a3613e02565b8515611910576118c26118ba602b60ff8716610b5d565b600790610bba565b60ff9081166020830152600260808301526118e8906001906102c790602b908816610b5d565b60ff90811660a0830152602082015161190391166001610b5d565b60ff166040820152611987565b60098460ff16106119595761192960ff85166004610b5d565b60ff166020820181905260056080830152611945906001610b5d565b60ff1660a082015260046040820152611987565b6006602082015260056040820181905261197e906001906102c79060ff881690610b5d565b60ff1660608201525b82815285151560c0820152600060e08201526119a281610c7b565b9c9b505050505050505050505050565b606060008260020267ffffffffffffffff811180156119d057600080fd5b506040519080825280601f01601f1916602001820160405280156119fb576020820181803683370190505b5080519091505b8015611a71577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110611a3757fe5b1a60f81b826001830381518110611a4a57fe5b60200101906001600160f81b031916908160001a90535060049490941c9360001901611a02565b509392505050565b1c60ff1690565b600082611a8f57506000610486565b82820282848281611a9c57fe5b04146106855760405162461bcd60e51b815260040180806020018281038252602181526020018061548a6021913960400191505060405180910390fd5b6060611b6e82610160015160405160200180806150446081913960810182805190602001908083835b60208310611b215780518252601f199092019160209182019101611b02565b6001836020036101000a038019825116818451168082178552505050505050905001806813979f1e17b9bb339f60b91b8152506009019150506040516020818303038152906040526109d8565b611cda836101e001518461020001518561018001516040516020018080614b816063913960630184805190602001908083835b60208310611bc05780518252601f199092019160209182019101611ba1565b51815160209384036101000a600019018019909216911617905265272063793d2760d01b919093019081528551600690910192860191508083835b60208310611c1a5780518252601f199092019160209182019101611bfb565b51815160209384036101000a60001901801990921691161790527f2720723d273132307078272066696c6c3d272300000000000000000000000000919093019081528451601390910192850191508083835b60208310611c8b5780518252601f199092019160209182019101611c6c565b6001836020036101000a038019825116818451168082178552505050505050905001806813979f1e17b9bb339f60b91b81525060090193505050506040516020818303038152906040526109d8565b611d2b846102200151856102400151866101a001516040516020018080614b8160639139606301848051906020019080838360208310611bc05780518252601f199092019160209182019101611ba1565b611e4a856102600151866102800151876101c001516040516020018080614b816063913960630184805190602001908083835b60208310611d7d5780518252601f199092019160209182019101611d5e565b51815160209384036101000a600019018019909216911617905265272063793d2760d01b919093019081528551600690910192860191508083835b60208310611dd75780518252601f199092019160209182019101611db8565b51815160001960209485036101000a019081169019919091161790527f2720723d273130307078272066696c6c3d272300000000000000000000000000939091019283528451601390930192908501915080838360208310611c8b5780518252601f199092019160209182019101611c6c565b6101608601516040516020018060566148fc8239605601602c6152ab82397f3c646566733e0000000000000000000000000000000000000000000000000000602c820152603201604b614ff98239604b0186805190602001908083835b60208310611ec65780518252601f199092019160209182019101611ea7565b6001836020036101000a03801982511681845116808217855250505050505090500180615b31603e9139603e0185805190602001908083835b60208310611f1e5780518252601f199092019160209182019101611eff565b6001836020036101000a038019825116818451168082178552505050505050905001806150c5603e9139603e0184805190602001908083835b60208310611f765780518252601f199092019160209182019101611f57565b5181516020939093036101000a60001901801990911692169190911790527f22202f3e00000000000000000000000000000000000000000000000000000000920191825250600401603b6147f48239603b0183805190602001908083835b60208310611ff35780518252601f199092019160209182019101611fd4565b6001836020036101000a03801982511681845116808217855250505050505090500180614c4160999139609901607f6156e28239607f016088615aa982396088016041614cda8239604101605d615c698239605d01607261578e8239607201604961475d823960490160be614f3b823960be016071614a0d8239607101607561562582396075016066614d1b823960660160a46152d7823960a4016085615b6f82397f3c6720636c69702d706174683d2275726c2823636f726e65727329223e00000060858201527f3c726563742066696c6c3d22000000000000000000000000000000000000000060a2820152825160ae9091019060208401908083835b602083106121115780518252601f1990920191602091820191016120f2565b6001836020036101000a03801982511681845116808217855250505050505090500180614d8160319139603101604e6147a68239604e01605d614be48239605d01604161522a8239604101605261510382396052016075615bf48239607501955050505050506040516020818303038152906040529050919050565b60608382858488878a896040516020018080615d4c60259139602501607d614ebe8239607d0189805190602001908083835b602083106121de5780518252601f1990920191602091820191016121bf565b51815160209384036101000a600019018019909216911617905264010714051160dd1b919093019081528a516005909101928b0191508083835b602083106122375780518252601f199092019160209182019101612218565b6001836020036101000a03801982511681845116808217855250505050505090500180614db2607991396079016086615cc6823960860187805190602001908083835b602083106122995780518252601f19909201916020918201910161227a565b51815160209384036101000a600019018019909216911617905264010714051160dd1b919093019081528851600590910192890191508083835b602083106122f25780518252601f1990920191602091820191016122d3565b6001836020036101000a0380198251168184511680821785525050505050509050018061498860859139608501607b6159178239607b0185805190602001908083835b602083106123545780518252601f199092019160209182019101612335565b51815160209384036101000a600019018019909216911617905264010714051160dd1b919093019081528651600590910192870191508083835b602083106123ad5780518252601f19909201916020918201910161238e565b6001836020036101000a03801982511681845116808217855250505050505090500180614ad2605d9139605d0160a3615582823960a30183805190602001908083835b6020831061240f5780518252601f1990920191602091820191016123f0565b51815160209384036101000a600019018019909216911617905264010714051160dd1b919093019081528451600590910192850191508083835b602083106124685780518252601f199092019160209182019101612449565b6001836020036101000a038019825116818451168082178552505050505050905001806146d2608b9139608b01985050505050505050506040516020818303038152906040529050949350505050565b6060838383604051602001808061482f60cd913960cd0184805190602001908083835b602083106124fa5780518252601f1990920191602091820191016124db565b6001836020036101000a03801982511681845116808217855250505050505090500180602f60f81b81525060010183805190602001908083835b602083106125535780518252601f199092019160209182019101612534565b6001836020036101000a03801982511681845116808217855250505050505090500180615ef56077913960770182805190602001908083835b602083106125ab5780518252601f19909201916020918201910161258c565b5181516020939093036101000a60001901801990911692169190911790526a1e17ba32bc3a1f1e17b39f60a91b920191825250600b016073615d958239607301935050505060405160208183030381529060405290509392505050565b606060008260000b60011461269a578260000b6000191461265e576040518060400160405280600581526020017f236e6f6e65000000000000000000000000000000000000000000000000000000815250612695565b6040518060400160405280600a81526020017f23666164652d646f776e000000000000000000000000000000000000000000008152505b6126d1565b6040518060400160405280600881526020017f23666164652d75700000000000000000000000000000000000000000000000008152505b905060006126e0878787613026565b9050818183836126ef88613274565b60405160200180807f3c67206d61736b3d2275726c2800000000000000000000000000000000000000815250600d0186805190602001908083835b602083106127495780518252601f19909201916020918201910161272a565b5181516020939093036101000a600019018019909116921691909117905261149160f11b920191825250600201607761537b823960770185805190602001908083835b602083106127ab5780518252601f19909201916020918201910161278c565b6001836020036101000a03801982511681845116808217855250505050505090500180614a7e60549139605401807f3c2f673e3c67206d61736b3d2275726c2800000000000000000000000000000081525060110184805190602001908083835b6020831061282b5780518252601f19909201916020918201910161280c565b5181516020939093036101000a600019018019909116921691909117905261149160f11b92019182525060020160296153f2823960290160456154458239604501807f3c7061746820643d22000000000000000000000000000000000000000000000081525060090183805190602001908083835b602083106128bf5780518252601f1990920191602091820191016128a0565b6001836020036101000a0380198251168184511680821785525050505050509050018061569a6048913960480182805190602001908083835b602083106129175780518252601f1990920191602091820191016128f8565b6001836020036101000a0380198251168184511680821785525050505050509050019550505050505060405160208183030381529060405292505050949350505050565b6060600061296884613748565b9050600061297584613748565b865183518251929350600490910191600a91820191016000806129988a8a613852565b915091506129ab8560040160070261068c565b8b6129bb8660040160070261068c565b896129cb8760040160070261068c565b8a87876040516020018080615761602d9139602d01806c1e3932b1ba103bb4b23a341e9160991b815250600d0189805190602001908083835b60208310612a235780518252601f199092019160209182019101612a04565b6001836020036101000a03801982511681845116808217855250505050505090500180615155603d9139603d01608d615e088239608d0188805190602001908083835b60208310612a855780518252601f199092019160209182019101612a66565b5181516020939093036101000a60001901801990911692169190911790526a1e17ba32bc3a1f1e17b39f60a91b920191825250600b01602d615fa48239602d01806c1e3932b1ba103bb4b23a341e9160991b815250600d0187805190602001908083835b60208310612b085780518252601f199092019160209182019101612ae9565b6001836020036101000a03801982511681845116808217855250505050505090500180615155603d9139603d016093614e2b823960930186805190602001908083835b60208310612b6a5780518252601f199092019160209182019101612b4b565b5181516020939093036101000a60001901801990911692169190911790526a1e17ba32bc3a1f1e17b39f60a91b920191825250600b01602d614b2f8239602d01806c1e3932b1ba103bb4b23a341e9160991b815250600d0185805190602001908083835b60208310612bed5780518252601f199092019160209182019101612bce565b6001836020036101000a03801982511681845116808217855250505050505090500180615155603d9139603d016093615992823960930184805190602001908083835b60208310612c4f5780518252601f199092019160209182019101612c30565b6001836020036101000a03801982511681845116808217855250505050505090500180615f6c603891396038016060615e958239606001606461551e82396064016025614b5c823960250183805190602001908083835b60208310612cc55780518252601f199092019160209182019101612ca6565b51815160209384036101000a60001901801990921691161790527f70782c2000000000000000000000000000000000000000000000000000000000919093019081528451600490910192850191508083835b60208310612d365780518252601f199092019160209182019101612d17565b6001836020036101000a0380198251168184511680821785525050505050509050018061495260369139603601985050505050505050506040516020818303038152906040529750505050505050509392505050565b6060612d988383613c83565b15612dee5760405160200180608d61588a8239608d0160736154ab823960730160716151b98239607101608a6158008239608a016084615a25823960840190506040516020818303038152906040529050610486565b5060408051602081019091526000815292915050565b600080612e1f612e1a60ff868116908616613ce6565b613d4b565b9050600081118015612e32575060128111155b15612ef3578260ff168460ff161115612e9c57612e66612e53826002610c14565b6001600160a01b03871690600a0a611a80565b91506002810660011415612e9757612e94827003298b075b4b6a5240945790619b37fd4a600160801b612f06565b91505b612eee565b612ebd612eaa826002610c14565b6001600160a01b03871690600a0a610c14565b91506002810660011415612eee57612eeb82600160801b7003298b075b4b6a5240945790619b37fd4a612f06565b91505b611a71565b50506001600160a01b0390921692915050565b6000808060001985870986860292508281109083900303905080612f3c5760008411612f3157600080fd5b508290049050610685565b808411612f4857600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b600080600060058460ff161115612fdd57612fda8560ff600419870116600a0a610c14565b94505b60006004600a8706119050612ff386600a610c14565b95508015613002578560010195505b85620186a0141561301857600a86049550600191505b5084925090505b9250929050565b606060008260020b85850360020b8161303b57fe5b05905060048160020b13613086576040518060400160405280601a81526020017f4d312031433431203431203130352031303520313435203134350000000000008152509150611a71565b60088160020b136130ce576040518060400160405280601981526020017f4d312031433333203439203937203131332031343520313435000000000000008152509150611a71565b60108160020b13613116576040518060400160405280601981526020017f4d312031433333203537203839203131332031343520313435000000000000008152509150611a71565b60208160020b1361315e576040518060400160405280601981526020017f4d312031433235203635203831203132312031343520313435000000000000008152509150611a71565b60408160020b136131a6576040518060400160405280601981526020017f4d312031433137203733203733203132392031343520313435000000000000008152509150611a71565b60808160020b136131ee576040518060400160405280601881526020017f4d312031433920383120363520313337203134352031343500000000000000008152509150611a71565b6101008160020b13613237576040518060400160405280601a81526020017f4d31203143312038392035372e352031343520313435203134350000000000008152509150611a71565b505060408051808201909152601881527f4d3120314331203937203439203134352031343520313435000000000000000060208201529392505050565b604080518082018252600281527f37330000000000000000000000000000000000000000000000000000000000006020808301919091528251808401845260038082527f313930000000000000000000000000000000000000000000000000000000000082840152845180860186528181527f32313700000000000000000000000000000000000000000000000000000000008185015285518087019096529085527f3333340000000000000000000000000000000000000000000000000000000000928501929092526060939091906001600087900b148061335b57508560000b600019145b15613552578560000b600019146133725781613374565b835b8660000b600019146133865781613388565b835b8760000b6000191461339a578361339c565b855b8860000b600019146133ae57836133b0565b855b60405160200180806b1e31b4b931b6329031bc1e9160a11b815250600c0185805190602001908083835b602083106133f95780518252601f1990920191602091820191016133da565b51815160209384036101000a600019018019909216911617905267383c111031bc9e9160c11b919093019081528651600890910192870191508083835b602083106134555780518252601f199092019160209182019101613436565b6001836020036101000a038019825116818451168082178552505050505050905001806151926027913960270183805190602001908083835b602083106134ad5780518252601f19909201916020918201910161348e565b51815160209384036101000a600019018019909216911617905267383c111031bc9e9160c11b919093019081528451600890910192850191508083835b602083106135095780518252601f1990920191602091820191016134ea565b6001836020036101000a0380198251168184511680821785525050505050509050018061541b602a9139602a01945050505050604051602081830303815290604052945061373f565b8383838360405160200180806b1e31b4b931b6329031bc1e9160a11b815250600c0185805190602001908083835b6020831061359f5780518252601f199092019160209182019101613580565b51815160209384036101000a600019018019909216911617905267383c111031bc9e9160c11b919093019081528651600890910192870191508083835b602083106135fb5780518252601f1990920191602091820191016135dc565b51815160209384036101000a60001901801990921691161790527f70782220723d22347078222066696c6c3d22776869746522202f3e0000000000919093019081526b1e31b4b931b6329031bc1e9160a11b601b8201528551602790910192860191508083835b602083106136815780518252601f199092019160209182019101613662565b51815160209384036101000a600019018019909216911617905267383c111031bc9e9160c11b919093019081528451600890910192850191508083835b602083106136dd5780518252601f1990920191602091820191016136be565b6001836020036101000a038019825116818451168082178552505050505050905001807f70782220723d22347078222066696c6c3d22776869746522202f3e0000000000815250601b0194505050505060405160208183030381529060405294505b50505050919050565b6060600060405180602001604052806000815250905060008360020b121561378e5782600019029250604051806040016040528060018152602001602d60f81b81525090505b8061379b8460020b61068c565b6040516020018083805190602001908083835b602083106137cd5780518252601f1990920191602091820191016137ae565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106138155780518252601f1990920191602091820191016137f6565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052915050919050565b60608060006002858501810b0590506201e847198160020b12156138ca57604051806040016040528060018152602001600760fb1b8152506040518060400160405280600181526020017f3700000000000000000000000000000000000000000000000000000000000000815250925092505061301f565b620124f7198160020b121561393357604051806040016040528060018152602001600760fb1b8152506040518060400160405280600481526020017f31302e3500000000000000000000000000000000000000000000000000000000815250925092505061301f565b6161a7198160020b121561399b57604051806040016040528060018152602001600760fb1b8152506040518060400160405280600581526020017f31342e3235000000000000000000000000000000000000000000000000000000815250925092505061301f565b611387198160020b1215613a04576040518060400160405280600281526020017f313000000000000000000000000000000000000000000000000000000000000081525060405180604001604052806002815260200161062760f31b815250925092505061301f565b60008160020b1215613a6b576040518060400160405280600281526020017f313100000000000000000000000000000000000000000000000000000000000081525060405180604001604052806002815260200161323160f01b815250925092505061301f565b6113888160020b1215613aee576040518060400160405280600281526020017f31330000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f3233000000000000000000000000000000000000000000000000000000000000815250925092505061301f565b6161a88160020b1215613b71576040518060400160405280600281526020017f31350000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f3235000000000000000000000000000000000000000000000000000000000000815250925092505061301f565b620124f88160020b1215613bda5760405180604001604052806002815260200161062760f31b8152506040518060400160405280600281526020017f3236000000000000000000000000000000000000000000000000000000000000815250925092505061301f565b6201e8488160020b1215613c285760405180604001604052806002815260200161323160f01b81525060405180604001604052806002815260200161323760f01b815250925092505061301f565b6040518060400160405280600281526020017f323400000000000000000000000000000000000000000000000000000000000081525060405180604001604052806002815260200161323760f01b815250925092505061301f565b6040805160208082018590526bffffffffffffffffffffffff19606085901b16828401528251603481840301815260549092019092528051910120600090613cca84613d62565b60020260010160ff1660001981613cdd57fe5b04119392505050565b6000818303818312801590613cfb5750838113155b80613d105750600083128015613d1057508381135b6106855760405162461bcd60e51b8152600401808060200182810382526024815260200180615d716024913960400191505060405180910390fd5b600080821215613d5e5781600003610486565b5090565b6000808211613d7057600080fd5b600160801b8210613d8357608091821c91015b680100000000000000008210613d9b57604091821c91015b6401000000008210613daf57602091821c91015b620100008210613dc157601091821c91015b6101008210613dd257600891821c91015b60108210613de257600491821c91015b60048210613df257600291821c91015b6002821061016b57600101919050565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915290565b80356001600160a01b038116811461016b57600080fd5b8035801515811461016b57600080fd5b8035600281900b811461016b57600080fd5b600082601f830112613e8f578081fd5b813567ffffffffffffffff811115613ea357fe5b613eb6601f8201601f191660200161467d565b818152846020838601011115613eca578283fd5b816020850160208301379081016020019190915292915050565b803562ffffff8116811461016b57600080fd5b803560ff8116811461016b57600080fd5b600060208284031215613f19578081fd5b813567ffffffffffffffff80821115613f30578283fd5b81840191506101c0808387031215613f46578384fd5b613f4f8161467d565b905082358152613f6160208401613e46565b6020820152613f7260408401613e46565b6040820152606083013582811115613f88578485fd5b613f9487828601613e7f565b606083015250608083013582811115613fab578485fd5b613fb787828601613e7f565b608083015250613fc960a08401613ef7565b60a0820152613fda60c08401613ef7565b60c0820152613feb60e08401613e5d565b60e08201526101009150614000828401613e6d565b828201526101209150614014828401613e6d565b828201526101409150614028828401613e6d565b82820152610160915061403c828401613e6d565b828201526101809150614050828401613ee4565b828201526101a09150614064828401613e46565b91810191909152949350505050565b600081516140858185602086016146a1565b9290920192915050565b7fe29aa0efb88f20444953434c41494d45523a204475652064696c6967656e636581527f20697320696d7065726174697665207768656e20617373657373696e6720746860208201527f6973204e46542e204d616b65207375726520746f6b656e20616464726573736560408201527f73206d617463682074686520657870656374656420746f6b656e732c2061732060608201527f746f6b656e2073796d626f6c73206d617920626520696d6974617465642e00006080820152609e0190565b7f5c6e5c6e00000000000000000000000000000000000000000000000000000000815260040190565b60007f54686973204e465420726570726573656e74732061206c69717569646974792082527f706f736974696f6e20696e206120556e69737761702056332000000000000000602083015285516141d7816039850160208a016146a1565b602d60f81b60399184019182015285516141f881603a840160208a016146a1565b7f20706f6f6c2e2000000000000000000000000000000000000000000000000000603a92909101918201527f546865206f776e6572206f662074686973204e46542063616e206d6f6469667960418201527f206f722072656465656d2074686520706f736974696f6e2e5c6e00000000000060618201527f5c6e506f6f6c20416464726573733a2000000000000000000000000000000000607b82015284516142a881608b8401602089016146a1565b612e3760f11b608b92909101918201526103c6608d820185614073565b60007f7b226e616d65223a220000000000000000000000000000000000000000000000825285516142fd816009850160208a016146a1565b7f222c20226465736372697074696f6e223a220000000000000000000000000000600991840191820152855161433a81601b840160208a016146a1565b855191019061435081601b8401602089016146a1565b7f222c2022696d616765223a202200000000000000000000000000000000000000601b92909101918201527f646174613a696d6167652f7376672b786d6c3b6261736536342c000000000000602882015283516143b48160428401602088016146a1565b7f227d000000000000000000000000000000000000000000000000000000000000604292909101918201526044019695505050505050565b60007f556e6973776170202d20000000000000000000000000000000000000000000008252865161442481600a850160208b016146a1565b80830190507f202d20000000000000000000000000000000000000000000000000000000000080600a830152875161446381600d850160208c016146a1565b602f60f81b600d9390910192830152865161448581600e850160208b016146a1565b600e92019182015284516144a08160118401602089016146a1565b7f3c3e0000000000000000000000000000000000000000000000000000000000006011929091019182015283516144de8160138401602088016146a1565b01601301979650505050505050565b60007f20416464726573733a2000000000000000000000000000000000000000000000808352875161452681600a860160208c016146a1565b612e3760f11b600a91850191820152875161454881600c840160208c016146a1565b01600c810191909152855190614565826016830160208a016146a1565b8181019150507f5c6e46656520546965723a200000000000000000000000000000000000000000601682015284516145a48160228401602089016146a1565b7f5c6e546f6b656e2049443a2000000000000000000000000000000000000000006022929091019182015283516145e281602e8401602088016146a1565b6145f86145f3602e83850101614150565b61408f565b9998505050505050505050565b60007f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000008252825161463d81601d8501602087016146a1565b91909101601d0192915050565b60006020825282518060208401526146698160408501602087016146a1565b601f01601f19169190910160400192915050565b60405181810167ffffffffffffffff8111828210171561469957fe5b604052919050565b60005b838110156146bc5781810151838201526020016146a4565b838111156146cb576000848401525b5050505056fe203c616e696d6174652061646469746976653d2273756d22206174747269627574654e616d653d2273746172744f6666736574222066726f6d3d2230252220746f3d22313030252220626567696e3d22307322206475723d223330732220726570656174436f756e743d22696e646566696e69746522202f3e3c2f74657874506174683e3c2f746578743e3c73746f70206f66667365743d222e39222073746f702d636f6c6f723d227768697465222073746f702d6f7061636974793d223022202f3e3c2f6c696e6561724772616469656e743e3c72656374207374796c653d2266696c7465723a2075726c28236631292220783d223070782220793d22307078222077696474683d22323930707822206865696768743d22353030707822202f3e3c6665496d61676520726573756c743d2270332220786c696e6b3a687265663d22646174613a696d6167652f7376672b786d6c3b6261736536342c3c67206d61736b3d2275726c2823666164652d73796d626f6c29223e3c726563742066696c6c3d226e6f6e652220783d223070782220793d22307078222077696474683d22323930707822206865696768743d22323030707822202f3e203c7465787420793d22373070782220783d2233327078222066696c6c3d2277686974652220666f6e742d66616d696c793d2227436f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d7765696768743d223230302220666f6e742d73697a653d2233367078223e3c7376672077696474683d2232393022206865696768743d22353030222076696577426f783d2230203020323930203530302220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f7376672270782c2030707829222063783d22307078222063793d223070782220723d22347078222066696c6c3d227768697465222f3e3c2f673e203c616e696d6174652061646469746976653d2273756d22206174747269627574654e616d653d2273746172744f6666736574222066726f6d3d2230252220746f3d22313030252220626567696e3d22307322206475723d223330732220726570656174436f756e743d22696e646566696e69746522202f3e203c2f74657874506174683e3c6d61736b2069643d22666164652d757022206d61736b436f6e74656e74556e6974733d226f626a656374426f756e64696e67426f78223e3c726563742077696474683d223122206865696768743d2231222066696c6c3d2275726c2823677261642d75702922202f3e3c2f6d61736b3e22207374726f6b653d227267626128302c302c302c302e332922207374726f6b652d77696474683d2233327078222066696c6c3d226e6f6e6522207374726f6b652d6c696e656361703d22726f756e6422202f3e203c616e696d6174652061646469746976653d2273756d22206174747269627574654e616d653d2273746172744f6666736574222066726f6d3d2230252220746f3d22313030252220626567696e3d22307322206475723d2233307322203c67207374796c653d227472616e73666f726d3a7472616e736c61746528323970782c20343434707829223e3c636972636c65207374796c653d227472616e73666f726d3a7472616e736c6174653364283c7376672077696474683d2732393027206865696768743d27353030272076696577426f783d2730203020323930203530302720786d6c6e733d27687474703a2f2f7777772e77332e6f72672f323030302f737667273e3c636972636c652063783d27203c67207374796c653d2266696c7465723a75726c2823746f702d726567696f6e2d626c7572293b207472616e73666f726d3a7363616c6528312e35293b207472616e73666f726d2d6f726967696e3a63656e74657220746f703b223e22202f3e3c6665426c656e64206d6f64653d226f7665726c61792220696e3d2270302220696e323d22703122202f3e3c6665426c656e64206d6f64653d226578636c7573696f6e2220696e323d22703222202f3e3c6665426c656e64206d6f64653d226f7665726c61792220696e323d2270332220726573756c743d22626c656e644f757422202f3e3c6665476175737369616e426c7572203c706174682069643d226d696e696d61702220643d224d3233342034343443323334203435372e393439203234322e323120343633203235332034363322202f3e3c6d61736b2069643d226e6f6e6522206d61736b436f6e74656e74556e6974733d226f626a656374426f756e64696e67426f78223e3c726563742077696474683d223122206865696768743d2231222066696c6c3d22776869746522202f3e3c2f6d61736b3e2220783d223070782220793d22307078222077696474683d22323930707822206865696768743d22353030707822202f3e203c616e696d6174652061646469746976653d2273756d22206174747269627574654e616d653d2273746172744f6666736574222066726f6d3d2230252220746f3d22313030252220626567696e3d22307322206475723d223330732220726570656174436f756e743d22696e646566696e69746522202f3e3c7465787420783d22313270782220793d22313770782220666f6e742d66616d696c793d2227436f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d73697a653d2231327078222066696c6c3d227768697465223e3c747370616e2066696c6c3d2272676261283235352c3235352c3235352c302e3629223e4d696e205469636b3a203c2f747370616e3e3c74657874506174682073746172744f66667365743d222d31303025222066696c6c3d2277686974652220666f6e742d66616d696c793d2227436f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d73697a653d22313070782220786c696e6b3a687265663d2223746578742d706174682d61223e3c6c696e6561724772616469656e742069643d22677261642d646f776e222078313d2230222078323d2231222079313d2230222079323d2231223e3c73746f70206f66667365743d22302e30222073746f702d636f6c6f723d227768697465222073746f702d6f7061636974793d223122202f3e3c73746f70206f66667365743d22302e39222073746f702d636f6c6f723d227768697465222073746f702d6f7061636974793d223022202f3e3c2f6c696e6561724772616469656e743e3c66696c7465722069643d226631223e3c6665496d61676520726573756c743d2270302220786c696e6b3a687265663d22646174613a696d6167652f7376672b786d6c3b6261736536342c3c7376672077696474683d2732393027206865696768743d27353030272076696577426f783d2730203020323930203530302720786d6c6e733d27687474703a2f2f7777772e77332e6f72672f323030302f737667273e3c726563742077696474683d27323930707827206865696768743d273530307078272066696c6c3d2723222f3e3c6665496d61676520726573756c743d2270322220786c696e6b3a687265663d22646174613a696d6167652f7376672b786d6c3b6261736536342c3c656c6c697073652063783d22353025222063793d22307078222072783d223138307078222072793d223132307078222066696c6c3d222330303022206f7061636974793d22302e383522202f3e3c2f673e707822206865696768743d2232367078222072783d22387078222072793d22387078222066696c6c3d227267626128302c302c302c302e362922202f3e70782220723d22347078222066696c6c3d22776869746522202f3e3c636972636c652063783d2231312e333437384c32342031324c31342e343334312031322e363532324c32322e333932332031384c31332e373831392031332e373831394c31382032322e333932334c31322e363532322031342e343334314c31322032344c31312e333437382031342e343334314c362032322e33393c726563742066696c6c3d226e6f6e652220783d223070782220793d22307078222077696474683d22323930707822206865696768743d22353030707822202f3e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f20786d6c6e733a786c696e6b3d27687474703a2f2f7777772e77332e6f72672f313939392f786c696e6b273e3c6c696e6561724772616469656e742069643d22677261642d73796d626f6c223e3c73746f70206f66667365743d22302e37222073746f702d636f6c6f723d227768697465222073746f702d6f7061636974793d223122202f3e3c73746f70206f66667365743d222e3935222073746f702d636f6c6f723d227768697465222073746f702d6f7061636974793d223022202f3e3c2f6c696e6561724772616469656e743e207374796c653d227472616e73666f726d3a7472616e736c61746528373270782c313839707829223e3c7265637420783d222d313670782220793d222d31367078222077696474683d22313830707822206865696768743d223138307078222066696c6c3d226e6f6e6522202f3e3c7061746820643d22207374796c653d227472616e73666f726d3a7472616e736c61746528373270782c313839707829223e70782220723d2232347078222066696c6c3d226e6f6e6522207374726f6b653d22776869746522202f3e3c7265637420783d222d313670782220793d222d31367078222077696474683d22313830707822206865696768743d223138307078222066696c6c3d226e6f6e6522202f3e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f773c673e3c70617468207374796c653d227472616e73666f726d3a7472616e736c617465283670782c367078292220643d224d313220304c31322e3635323220392e35363538374c313820312e363037374c31332e373831392031302e323138314c32322e3339323320364c31342e34333431203c70617468207374726f6b652d6c696e656361703d22726f756e642220643d224d38203943382e30303030342032322e393439342031362e32303939203238203237203238222066696c6c3d226e6f6e6522207374726f6b653d22776869746522202f3e20726570656174436f756e743d22696e646566696e69746522202f3e3c2f74657874506174683e3c74657874506174682073746172744f66667365743d222d353025222066696c6c3d2277686974652220666f6e742d66616d696c793d2227436f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d73697a653d22313070782220786c696e6b3a687265663d2223746578742d706174682d61223e3c6d61736b2069643d22666164652d646f776e22206d61736b436f6e74656e74556e6974733d226f626a656374426f756e64696e67426f78223e3c726563742077696474683d223122206865696768743d2231222066696c6c3d2275726c2823677261642d646f776e2922202f3e3c2f6d61736b3e22207374726f6b653d2272676261283235352c3235352c3235352c3129222066696c6c3d226e6f6e6522207374726f6b652d6c696e656361703d22726f756e6422202f3e3c2f673e696e3d22626c656e644f75742220737464446576696174696f6e3d22343222202f3e3c2f66696c7465723e203c636c6970506174682069643d22636f726e657273223e3c726563742077696474683d2232393022206865696768743d22353030222072783d223432222072793d22343222202f3e3c2f636c6970506174683e203c67207374796c653d227472616e73666f726d3a7472616e736c61746528323970782c20333834707829223e3c6c696e6561724772616469656e742069643d22677261642d7570222078313d2231222078323d2230222079313d2231222079323d2230223e3c73746f70206f66667365743d22302e30222073746f702d636f6c6f723d227768697465222073746f702d6f7061636974793d223122202f3e32334c31302e323138312031332e373831394c312e363037372031384c392e35363538372031322e363532324c302031324c392e35363538372031312e333437384c312e3630373720364c31302e323138312031302e323138314c3620312e363037374c31312e3334373820392e35363538374c313220305a222066696c6c3d22776869746522202f3e3c67207374796c653d227472616e73666f726d3a7472616e736c6174652832323670782c20333932707829223e3c726563742077696474683d223336707822206865696768743d2233367078222072783d22387078222072793d22387078222066696c6c3d226e6f6e6522207374726f6b653d2272676261283235352c3235352c3235352c302e322922202f3e3c74657874506174682073746172744f66667365743d22353025222066696c6c3d2277686974652220666f6e742d66616d696c793d2227436f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d73697a653d22313070782220786c696e6b3a687265663d2223746578742d706174682d61223e3c7465787420783d22313270782220793d22313770782220666f6e742d66616d696c793d2227436f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d73697a653d2231327078222066696c6c3d227768697465223e3c747370616e2066696c6c3d2272676261283235352c3235352c3235352c302e3629223e4d6178205469636b3a203c2f747370616e3e3c616e696d6174655472616e73666f726d206174747269627574654e616d653d227472616e73666f726d2220747970653d22726f74617465222066726f6d3d22302031382031382220746f3d2233363020313820313822206475723d223130732220726570656174436f756e743d22696e646566696e697465222f3e3c2f673e3c2f673e3c706174682069643d22746578742d706174682d612220643d224d34302031322048323530204132382032382030203020312032373820343020563436302041323820323820302030203120323530203438382048343020413238203238203020302031203132203436302056343020413238203238203020302031203430203132207a22202f3e222f3e3c6665496d61676520726573756c743d2270312220786c696e6b3a687265663d22646174613a696d6167652f7376672b786d6c3b6261736536342c3c6d61736b2069643d22666164652d73796d626f6c22206d61736b436f6e74656e74556e6974733d227573657253706163654f6e557365223e3c726563742077696474683d22323930707822206865696768743d223230307078222066696c6c3d2275726c2823677261642d73796d626f6c2922202f3e3c2f6d61736b3e3c2f646566733e3c7265637420783d22302220793d2230222077696474683d2232393022206865696768743d22353030222072783d223432222072793d223432222066696c6c3d227267626128302c302c302c302922207374726f6b653d2272676261283235352c3235352c3235352c302e322922202f3e3c2f673e3c66696c7465722069643d22746f702d726567696f6e2d626c7572223e3c6665476175737369616e426c757220696e3d22536f75726365477261706869632220737464446576696174696f6e3d22323422202f3e3c2f66696c7465723e3c2f74657874506174683e203c74657874506174682073746172744f66667365743d223025222066696c6c3d2277686974652220666f6e742d66616d696c793d2227436f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d73697a653d22313070782220786c696e6b3a687265663d2223746578742d706174682d61223e3c7465787420746578742d72656e646572696e673d226f7074696d697a655370656564223e5369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f773c7265637420783d2231362220793d223136222077696474683d2232353822206865696768743d22343638222072783d223236222072793d223236222066696c6c3d227267626128302c302c302c302922207374726f6b653d2272676261283235352c3235352c3235352c302e322922202f3e3c7465787420783d22313270782220793d22313770782220666f6e742d66616d696c793d2227436f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d73697a653d2231327078222066696c6c3d227768697465223e3c747370616e2066696c6c3d2272676261283235352c3235352c3235352c302e3629223e49443a203c2f747370616e3e3c726563742077696474683d223336707822206865696768743d2233367078222072783d22387078222072793d22387078222066696c6c3d226e6f6e6522207374726f6b653d2272676261283235352c3235352c3235352c302e322922202f3e3c2f746578743e3c7465787420793d2231313570782220783d2233327078222066696c6c3d2277686974652220666f6e742d66616d696c793d2227436f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d7765696768743d223230302220666f6e742d73697a653d2233367078223e3c2f746578743e3c2f673e3c67207374796c653d227472616e73666f726d3a7472616e736c6174652832323670782c20343333707829223e203c67207374796c653d227472616e73666f726d3a7472616e736c61746528323970782c20343134707829223ea164736f6c6343000706000a"; - static readonly abi: { - inputs: { - components: { - internalType: string; - name: string; - type: string; - }[]; - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - }[]; - static createInterface(): NFTDescriptorInterface; - static connect(address: string, signerOrProvider: Signer | Provider): NFTDescriptor; -} diff --git a/dist2/types/types/v3/factories/NonfungiblePositionManager__factory.d.ts b/dist2/types/types/v3/factories/NonfungiblePositionManager__factory.d.ts deleted file mode 100644 index 26e308959b3..00000000000 --- a/dist2/types/types/v3/factories/NonfungiblePositionManager__factory.d.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { Signer, ContractFactory, Overrides } from "ethers"; -import { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { NonfungiblePositionManager, NonfungiblePositionManagerInterface } from "../NonfungiblePositionManager"; -export declare class NonfungiblePositionManager__factory extends ContractFactory { - constructor(signer?: Signer); - deploy(_factory: string, _WETH9: string, _tokenDescriptor_: string, overrides?: Overrides & { - from?: string | Promise; - }): Promise; - getDeployTransaction(_factory: string, _WETH9: string, _tokenDescriptor_: string, overrides?: Overrides & { - from?: string | Promise; - }): TransactionRequest; - attach(address: string): NonfungiblePositionManager; - connect(signer: Signer): NonfungiblePositionManager__factory; - static readonly bytecode = "0x610120604052600d80546001600160b01b0319166001176001600160b01b0316600160b01b1790553480156200003457600080fd5b50604051620062e9380380620062e98339810160408190526200005791620002db565b82826040518060400160405280601b81526020017f556e697377617020563320506f736974696f6e73204e46542d563100000000008152506040518060400160405280600a815260200169554e492d56332d504f5360b01b815250604051806040016040528060018152602001603160f81b8152508282620000e66301ffc9a760e01b6200018d60201b60201c565b8151620000fb90600690602085019062000212565b5080516200011190600790602084019062000212565b50620001246380ac58cd60e01b6200018d565b62000136635b5e139f60e01b6200018d565b6200014863780e9d6360e01b6200018d565b50508251602093840120608052805192019190912060a052506001600160601b0319606092831b811660c05290821b811660e05291901b166101005250620003249050565b6001600160e01b03198082161415620001ed576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826200024a576000855562000295565b82601f106200026557805160ff191683800117855562000295565b8280016001018555821562000295579182015b828111156200029557825182559160200191906001019062000278565b50620002a3929150620002a7565b5090565b5b80821115620002a35760008155600101620002a8565b80516001600160a01b0381168114620002d657600080fd5b919050565b600080600060608486031215620002f0578283fd5b620002fb84620002be565b92506200030b60208501620002be565b91506200031b60408501620002be565b90509250925092565b60805160a05160c05160601c60e05160601c6101005160601c615f40620003a960003980612a835250806102995280611718528061180e52806118965280613e5d5280613ea35280613f17525080610aa75280610dde5280610ea55280612a1d5280612b235280612e4452806136e15250806114ff5250806114de5250615f406000f3fe6080604052600436106102895760003560e01c80636352211e11610153578063ac9650d8116100cb578063d34879971161007f578063e985e9c511610064578063e985e9c5146106f5578063f3995c6714610715578063fc6f7865146107285761030d565b8063d3487997146106c2578063df2ab5bb146106e25761030d565b8063c2e3140a116100b0578063c2e3140a1461067a578063c45a01551461068d578063c87b56dd146106a25761030d565b8063ac9650d81461063a578063b88d4fde1461065a5761030d565b8063883164561161012257806399fbab881161010757806399fbab88146105cf578063a22cb46514610607578063a4a78f0c146106275761030d565b8063883164561461059757806395d89b41146105ba5761030d565b80636352211e1461052f5780636c0360eb1461054f57806370a08231146105645780637ac2ff7b146105845761030d565b806323b872dd1161020157806342966c68116101b557806349404b7c1161019a57806349404b7c146104e75780634aa4a4fc146104fa5780634f6ccce71461050f5761030d565b806342966c68146104c15780634659a494146104d45761030d565b806330adf81f116101e657806330adf81f146104775780633644e5151461048c57806342842e0e146104a15761030d565b806323b872dd146104375780632f745c59146104575761030d565b80630c49ccbe1161025857806313ead5621161023d57806313ead562146103e057806318160ddd146103f3578063219f5d17146104155761030d565b80630c49ccbe146103b757806312210e8a146103d85761030d565b806301ffc9a71461031257806306fdde0314610348578063081812fc1461036a578063095ea7b3146103975761030d565b3661030d57336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461030b576040805162461bcd60e51b815260206004820152600960248201527f4e6f742057455448390000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b600080fd5b34801561031e57600080fd5b5061033261032d3660046153a6565b61073b565b60405161033f919061591e565b60405180910390f35b34801561035457600080fd5b5061035d610776565b60405161033f9190615971565b34801561037657600080fd5b5061038a6103853660046156b8565b61080c565b60405161033f91906157e2565b3480156103a357600080fd5b5061030b6103b2366004615270565b610868565b6103ca6103c5366004615483565b61093e565b60405161033f929190615b42565b61030b610daa565b61038a6103ee366004615103565b610dbc565b3480156103ff57600080fd5b506104086110c9565b60405161033f9190615929565b610428610423366004615494565b6110da565b60405161033f93929190615afd565b34801561044357600080fd5b5061030b61045236600461515c565b611413565b34801561046357600080fd5b50610408610472366004615270565b61146a565b34801561048357600080fd5b50610408611495565b34801561049857600080fd5b506104086114b9565b3480156104ad57600080fd5b5061030b6104bc36600461515c565b611577565b61030b6104cf3660046156b8565b611592565b61030b6104e23660046152dc565b611661565b61030b6104f53660046156d0565b611714565b34801561050657600080fd5b5061038a611894565b34801561051b57600080fd5b5061040861052a3660046156b8565b6118b8565b34801561053b57600080fd5b5061038a61054a3660046156b8565b6118ce565b34801561055b57600080fd5b5061035d6118f6565b34801561057057600080fd5b5061040861057f3660046150af565b6118fb565b61030b6105923660046152dc565b611963565b6105aa6105a5366004615550565b611e0f565b60405161033f9493929190615b1e565b3480156105c657600080fd5b5061035d612370565b3480156105db57600080fd5b506105ef6105ea3660046156b8565b6123d1565b60405161033f9c9b9a99989796959493929190615b50565b34801561061357600080fd5b5061030b610622366004615243565b612600565b61030b6106353660046152dc565b612723565b61064d610648366004615337565b6127d5565b60405161033f91906158a0565b34801561066657600080fd5b5061030b61067536600461519c565b612915565b61030b6106883660046152dc565b612973565b34801561069957600080fd5b5061038a612a1b565b3480156106ae57600080fd5b5061035d6106bd3660046156b8565b612a3f565b3480156106ce57600080fd5b5061030b6106dd366004615717565b612b0e565b61030b6106f036600461529b565b612b8c565b34801561070157600080fd5b506103326107103660046150cb565b612c6f565b61030b6107233660046152dc565b612c9d565b6103ca61073636600461546c565b612d28565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526020819052604090205460ff165b919050565b60068054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108025780601f106107d757610100808354040283529160200191610802565b820191906000526020600020905b8154815290600101906020018083116107e557829003601f168201915b5050505050905090565b600061081782613246565b61083c5760405162461bcd60e51b8152600401610833906159bb565b60405180910390fd5b506000908152600c60205260409020546c0100000000000000000000000090046001600160a01b031690565b6000610873826118ce565b9050806001600160a01b0316836001600160a01b031614156108c65760405162461bcd60e51b8152600401808060200182810382526021815260200180615ee26021913960400191505060405180910390fd5b806001600160a01b03166108d8613253565b6001600160a01b031614806108f457506108f481610710613253565b61092f5760405162461bcd60e51b8152600401808060200182810382526038815260200180615e0c6038913960400191505060405180910390fd5b6109398383613257565b505050565b600080823561094d33826132db565b6109695760405162461bcd60e51b815260040161083390615984565b836080013580610977613377565b11156109ca576040805162461bcd60e51b815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b60006109dc6040870160208801615562565b6001600160801b0316116109ef57600080fd5b84356000908152600c602090815260409182902060018101549092600160801b9091046001600160801b031691610a2a918901908901615562565b6001600160801b0316816001600160801b03161015610a4857600080fd5b60018281015469ffffffffffffffffffff166000908152600b60209081526040808320815160608101835281546001600160a01b039081168252919095015490811692850192909252600160a01b90910462ffffff1690830152610acc7f00000000000000000000000000000000000000000000000000000000000000008361337b565b60018501549091506001600160a01b0382169063a34123a7906a01000000000000000000008104600290810b91600160681b9004900b610b1260408e0160208f01615562565b6040518463ffffffff1660e01b8152600401610b309392919061594b565b6040805180830381600087803b158015610b4957600080fd5b505af1158015610b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8191906156f4565b909850965060408901358810801590610b9e575088606001358710155b610bba5760405162461bcd60e51b815260040161083390615a18565b6001840154600090610bea9030906a01000000000000000000008104600290810b91600160681b9004900b613477565b9050600080836001600160a01b031663514ea4bf846040518263ffffffff1660e01b8152600401610c1b9190615929565b60a06040518083038186803b158015610c3357600080fd5b505afa158015610c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6b91906155ac565b50509250925050610c9087600201548303876001600160801b0316600160801b6134d1565b6004880180546fffffffffffffffffffffffffffffffff198116928e016001600160801b039182160181169290921790556003880154610cda91908303908816600160801b6134d1565b6004880180546001600160801b03808216938e01600160801b9283900482160116029190911790556002870182905560038701819055610d2060408d0160208e01615562565b86038760010160106101000a8154816001600160801b0302191690836001600160801b031602179055508b600001357f26f6a048ee9138f2c0ce266f322cb99228e8d619ae2bff30c67f8dcf9d2377b48d6020016020810190610d839190615562565b8d8d604051610d9493929190615afd565b60405180910390a2505050505050505050915091565b4715610dba57610dba3347613580565b565b6000836001600160a01b0316856001600160a01b031610610ddc57600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631698ee828686866040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018262ffffff168152602001935050505060206040518083038186803b158015610e6757600080fd5b505afa158015610e7b573d6000803e3d6000fd5b505050506040513d6020811015610e9157600080fd5b505190506001600160a01b038116610fe0577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a16712958686866040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018262ffffff1681526020019350505050602060405180830381600087803b158015610f3057600080fd5b505af1158015610f44573d6000803e3d6000fd5b505050506040513d6020811015610f5a57600080fd5b5051604080517ff637731d0000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015291519293509083169163f637731d9160248082019260009290919082900301818387803b158015610fc357600080fd5b505af1158015610fd7573d6000803e3d6000fd5b505050506110c1565b6000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561101b57600080fd5b505afa15801561102f573d6000803e3d6000fd5b505050506040513d60e081101561104557600080fd5b505190506001600160a01b0381166110bf57816001600160a01b031663f637731d846040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156110a657600080fd5b505af11580156110ba573d6000803e3d6000fd5b505050505b505b949350505050565b60006110d56002613689565b905090565b60008060008360a00135806110ed613377565b1115611140576040805162461bcd60e51b815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b84356000908152600c6020908152604080832060018082015469ffffffffffffffffffff81168652600b855283862084516060808201875282546001600160a01b039081168352929094015480831682890190815262ffffff600160a01b9092048216838901908152885161014081018a528451861681529151909416818a01529251168287015230828501526a01000000000000000000008304600290810b810b608080850191909152600160681b909404810b900b60a0830152958c013560c0820152938b013560e0850152908a0135610100840152890135610120830152929061122c90613694565b6001870154939a50919850965091506000906112669030906a01000000000000000000008104600290810b91600160681b9004900b613477565b9050600080836001600160a01b031663514ea4bf846040518263ffffffff1660e01b81526004016112979190615929565b60a06040518083038186803b1580156112af57600080fd5b505afa1580156112c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e791906155ac565b50509250925050611323866002015483038760010160109054906101000a90046001600160801b03166001600160801b0316600160801b6134d1565b6004870180546001600160801b0380821690930183166fffffffffffffffffffffffffffffffff19909116179055600387015460018801546113739291840391600160801b9182900416906134d1565b6004870180546001600160801b03600160801b80830482169094018116840291811691909117909155600288018490556003880183905560018801805483810483168e018316909302929091169190911790556040518b35907f3067048beee31b25b2f1681f88dac838c8bba36af25bfb2b7cf7473a5847e35f906113fd908d908d908d90615afd565b60405180910390a2505050505050509193909250565b61142461141e613253565b826132db565b61145f5760405162461bcd60e51b8152600401808060200182810382526031815260200180615f036031913960400191505060405180910390fd5b6109398383836138cf565b6001600160a01b038216600090815260016020526040812061148c9083613a1b565b90505b92915050565b7f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad81565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611526613a27565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b031681526020019550505050505060405160208183030381529060405280519060200120905090565b61093983838360405180602001604052806000815250612915565b8061159d33826132db565b6115b95760405162461bcd60e51b815260040161083390615984565b6000828152600c602052604090206001810154600160801b90046001600160801b03161580156115f4575060048101546001600160801b0316155b801561161257506004810154600160801b90046001600160801b0316155b61162e5760405162461bcd60e51b815260040161083390615a86565b6000838152600c602052604081208181556001810182905560028101829055600381018290556004015561093983613a2b565b604080517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e4810183905290516001600160a01b03881691638fcbaf0c9161010480830192600092919082900301818387803b1580156116f457600080fd5b505af1158015611708573d6000803e3d6000fd5b50505050505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561178357600080fd5b505afa158015611797573d6000803e3d6000fd5b505050506040513d60208110156117ad57600080fd5b5051905082811015611806576040805162461bcd60e51b815260206004820152601260248201527f496e73756666696369656e742057455448390000000000000000000000000000604482015290519081900360640190fd5b8015610939577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561187257600080fd5b505af1158015611886573d6000803e3d6000fd5b505050506109398282613580565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806118c6600284613af8565b509392505050565b600061148f82604051806060016040528060298152602001615e6e6029913960029190613b16565b606090565b60006001600160a01b0382166119425760405162461bcd60e51b815260040180806020018281038252602a815260200180615e44602a913960400191505060405180910390fd5b6001600160a01b038216600090815260016020526040902061148f90613689565b8361196c613377565b11156119bf576040805162461bcd60e51b815260206004820152600e60248201527f5065726d69742065787069726564000000000000000000000000000000000000604482015290519081900360640190fd5b60006119c96114b9565b7f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad88886119f581613b23565b604080516020808201969096526001600160a01b03909416848201526060840192909252608083015260a08083018a90528151808403909101815260c0830182528051908401207f190100000000000000000000000000000000000000000000000000000000000060e084015260e283019490945261010280830194909452805180830390940184526101229091019052815191012090506000611a98876118ce565b9050806001600160a01b0316886001600160a01b03161415611aeb5760405162461bcd60e51b8152600401808060200182810382526027815260200180615d6f6027913960400191505060405180910390fd5b611af481613b62565b15611ccf576040805160208082018790528183018690527fff0000000000000000000000000000000000000000000000000000000000000060f889901b16606083015282516041818403018152606183018085527f1626ba7e0000000000000000000000000000000000000000000000000000000090526065830186815260858401948552815160a585015281516001600160a01b03871695631626ba7e958995919260c59091019185019080838360005b83811015611bbe578181015183820152602001611ba6565b50505050905090810190601f168015611beb5780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b158015611c0957600080fd5b505afa158015611c1d573d6000803e3d6000fd5b505050506040513d6020811015611c3357600080fd5b50517fffffffff00000000000000000000000000000000000000000000000000000000167f1626ba7e0000000000000000000000000000000000000000000000000000000014611cca576040805162461bcd60e51b815260206004820152600c60248201527f556e617574686f72697a65640000000000000000000000000000000000000000604482015290519081900360640190fd5b611dfb565b600060018387878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611d2b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611d93576040805162461bcd60e51b815260206004820152601160248201527f496e76616c6964207369676e6174757265000000000000000000000000000000604482015290519081900360640190fd5b816001600160a01b0316816001600160a01b031614611df9576040805162461bcd60e51b815260206004820152600c60248201527f556e617574686f72697a65640000000000000000000000000000000000000000604482015290519081900360640190fd5b505b611e058888613257565b5050505050505050565b60008060008084610140013580611e24613377565b1115611e77576040805162461bcd60e51b815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b604080516101408101909152600090611f439080611e9860208b018b6150af565b6001600160a01b03168152602001896020016020810190611eb991906150af565b6001600160a01b03168152602001611ed760608b0160408c0161569e565b62ffffff168152306020820152604001611ef760808b0160608c016153e6565b60020b8152602001611f0f60a08b0160808c016153e6565b60020b81526020018960a0013581526020018960c0013581526020018960e001358152602001896101000135815250613694565b92975090955093509050611fb7611f6261014089016101208a016150af565b600d80547fffffffffffffffffffff000000000000000000000000000000000000000000008116600175ffffffffffffffffffffffffffffffffffffffffffff92831690810190921617909155975087613b68565b6000611fe230611fcd60808b0160608c016153e6565b611fdd60a08c0160808d016153e6565b613477565b9050600080836001600160a01b031663514ea4bf846040518263ffffffff1660e01b81526004016120139190615929565b60a06040518083038186803b15801561202b57600080fd5b505afa15801561203f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206391906155ac565b5050925092505060006120dc8560405180606001604052808e600001602081019061208e91906150af565b6001600160a01b031681526020018e60200160208101906120af91906150af565b6001600160a01b031681526020018e60400160208101906120d0919061569e565b62ffffff169052613c96565b905060405180610140016040528060006bffffffffffffffffffffffff16815260200160006001600160a01b031681526020018269ffffffffffffffffffff1681526020018c606001602081019061213491906153e6565b60020b815260200161214c60a08e0160808f016153e6565b60020b81526020018a6001600160801b0316815260200184815260200183815260200160006001600160801b0316815260200160006001600160801b0316815250600c60008c815260200190815260200160002060008201518160000160006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550602082015181600001600c6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160006101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff160217905550606082015181600101600a6101000a81548162ffffff021916908360020b62ffffff160217905550608082015181600101600d6101000a81548162ffffff021916908360020b62ffffff16021790555060a08201518160010160106101000a8154816001600160801b0302191690836001600160801b0316021790555060c0820151816002015560e082015181600301556101008201518160040160006101000a8154816001600160801b0302191690836001600160801b031602179055506101208201518160040160106101000a8154816001600160801b0302191690836001600160801b03160217905550905050897f3067048beee31b25b2f1681f88dac838c8bba36af25bfb2b7cf7473a5847e35f8a8a8a60405161235b93929190615afd565b60405180910390a25050505050509193509193565b60078054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108025780601f106107d757610100808354040283529160200191610802565b6000818152600c6020908152604080832081516101408101835281546bffffffffffffffffffffffff811682526001600160a01b036c010000000000000000000000009091041693810193909352600181015469ffffffffffffffffffff81169284018390526a01000000000000000000008104600290810b810b810b6060860152600160681b8204810b810b810b60808601526001600160801b03600160801b92839004811660a08701529083015460c0860152600383015460e0860152600490920154808316610100860152041661012083015282918291829182918291829182918291829182918291906124da5760405162461bcd60e51b815260040161083390615a4f565b6000600b6000836040015169ffffffffffffffffffff1669ffffffffffffffffffff1681526020019081526020016000206040518060600160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820160149054906101000a900462ffffff1662ffffff1662ffffff1681525050905081600001518260200151826000015183602001518460400151866060015187608001518860a001518960c001518a60e001518b61010001518c61012001519d509d509d509d509d509d509d509d509d509d509d509d50505091939597999b5091939597999b565b612608613253565b6001600160a01b0316826001600160a01b0316141561266e576040805162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b806005600061267b613253565b6001600160a01b0390811682526020808301939093526040918201600090812091871680825291909352912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016921515929092179091556126dd613253565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051600019916001600160a01b0389169163dd62ed3e91604480820192602092909190829003018186803b15801561278d57600080fd5b505afa1580156127a1573d6000803e3d6000fd5b505050506040513d60208110156127b757600080fd5b505110156127cd576127cd868686868686611661565b505050505050565b60608167ffffffffffffffff811180156127ee57600080fd5b5060405190808252806020026020018201604052801561282257816020015b606081526020019060019003908161280d5790505b50905060005b8281101561290e576000803086868581811061284057fe5b90506020028101906128529190615bef565b6040516128609291906157d2565b600060405180830381855af49150503d806000811461289b576040519150601f19603f3d011682016040523d82523d6000602084013e6128a0565b606091505b5091509150816128ec576044815110156128b957600080fd5b600481019050808060200190518101906128d39190615402565b60405162461bcd60e51b81526004016108339190615971565b808484815181106128f957fe5b60209081029190910101525050600101612828565b5092915050565b612926612920613253565b836132db565b6129615760405162461bcd60e51b8152600401808060200182810382526031815260200180615f036031913960400191505060405180910390fd5b61296d84848484613de6565b50505050565b604080517fdd62ed3e000000000000000000000000000000000000000000000000000000008152336004820152306024820152905186916001600160a01b0389169163dd62ed3e91604480820192602092909190829003018186803b1580156129db57600080fd5b505afa1580156129ef573d6000803e3d6000fd5b505050506040513d6020811015612a0557600080fd5b505110156127cd576127cd868686868686612c9d565b7f000000000000000000000000000000000000000000000000000000000000000081565b6060612a4a82613246565b612a5357600080fd5b6040517fe9dc63750000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e9dc637590612aba9030908690600401615932565b60006040518083038186803b158015612ad257600080fd5b505afa158015612ae6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261148f9190810190615402565b6000612b1c828401846154a5565b9050612b4c7f00000000000000000000000000000000000000000000000000000000000000008260000151613e38565b508415612b67578051516020820151612b6791903388613e5b565b8315612b8557612b8581600001516020015182602001513387613e5b565b5050505050565b6000836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612bdb57600080fd5b505afa158015612bef573d6000803e3d6000fd5b505050506040513d6020811015612c0557600080fd5b5051905082811015612c5e576040805162461bcd60e51b815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b801561296d5761296d848383613feb565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b604080517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c4810183905290516001600160a01b0388169163d505accf9160e480830192600092919082900301818387803b1580156116f457600080fd5b6000808235612d3733826132db565b612d535760405162461bcd60e51b815260040161083390615984565b6000612d656060860160408701615562565b6001600160801b03161180612d9257506000612d876080860160608701615562565b6001600160801b0316115b612d9b57600080fd5b600080612dae60408701602088016150af565b6001600160a01b031614612dd157612dcc60408601602087016150af565b612dd3565b305b85356000908152600c6020908152604080832060018082015469ffffffffffffffffffff168552600b8452828520835160608101855281546001600160a01b039081168252919092015490811694820194909452600160a01b90930462ffffff169183019190915292935090612e697f00000000000000000000000000000000000000000000000000000000000000008361337b565b600484015460018501549192506001600160801b0380821692600160801b92839004821692900416156130865760018501546040517fa34123a70000000000000000000000000000000000000000000000000000000081526001600160a01b0385169163a34123a791612f00916a01000000000000000000008104600290810b92600160681b909204900b9060009060040161594b565b6040805180830381600087803b158015612f1957600080fd5b505af1158015612f2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f5191906156f4565b5050600185015460009081906001600160a01b0386169063514ea4bf90612f969030906a01000000000000000000008104600290810b91600160681b9004900b613477565b6040518263ffffffff1660e01b8152600401612fb29190615929565b60a06040518083038186803b158015612fca57600080fd5b505afa158015612fde573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300291906155ac565b5050925092505061303e876002015483038860010160109054906101000a90046001600160801b03166001600160801b0316600160801b6134d1565b84019350613077876003015482038860010160109054906101000a90046001600160801b03166001600160801b0316600160801b6134d1565b60028801929092556003870155015b6000806001600160801b0384166130a360608e0160408f01615562565b6001600160801b0316116130c6576130c160608d0160408e01615562565b6130c8565b835b836001600160801b03168d60600160208101906130e59190615562565b6001600160801b0316116131085761310360808e0160608f01615562565b61310a565b835b60018901546040517f4f1eb3d80000000000000000000000000000000000000000000000000000000081529294509092506001600160a01b03871691634f1eb3d89161317d918c916a01000000000000000000008104600290810b92600160681b909204900b9088908890600401615839565b6040805180830381600087803b15801561319657600080fd5b505af11580156131aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131ce919061557e565b6004890180546fffffffffffffffffffffffffffffffff196001600160801b03918216600160801b878a0384160217168689038216179091556040519281169d50169a508c35907f40d0efd1a53d60ecbf40971b9daf7dc90178c3aadc7aab1765632738fa8b8f0190610d94908b9086908690615876565b600061148f60028361417b565b3390565b6000818152600c6020526040902080546bffffffffffffffffffffffff166c010000000000000000000000006001600160a01b0385169081029190911790915581906132a2826118ce565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006132e682613246565b6133215760405162461bcd60e51b815260040180806020018281038252602c815260200180615de0602c913960400191505060405180910390fd5b600061332c836118ce565b9050806001600160a01b0316846001600160a01b031614806133675750836001600160a01b031661335c8461080c565b6001600160a01b0316145b806110c157506110c18185612c6f565b4290565b600081602001516001600160a01b031682600001516001600160a01b0316106133a357600080fd5b50805160208083015160409384015184516001600160a01b0394851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b6bffffffffffffffffffffffff191660a183015260b58201939093527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d5808301919091528251808303909101815260f5909101909152805191012090565b604080516bffffffffffffffffffffffff19606086901b16602080830191909152600285810b60e890811b60348501529085900b901b60378301528251601a818403018152603a90920190925280519101205b9392505050565b600080806000198587098686029250828110908390030390508061350757600084116134fc57600080fd5b5082900490506134ca565b80841161351357600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106135cc5780518252601f1990920191602091820191016135ad565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461362e576040519150601f19603f3d011682016040523d82523d6000602084013e613633565b606091505b5050905080610939576040805162461bcd60e51b815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600061148f82614187565b6000806000806000604051806060016040528087600001516001600160a01b0316815260200187602001516001600160a01b03168152602001876040015162ffffff1681525090506137067f00000000000000000000000000000000000000000000000000000000000000008261337b565b91506000826001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561374357600080fd5b505afa158015613757573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061377b919061560d565b50505050505090506000613792886080015161418b565b905060006137a38960a0015161418b565b90506137ba8383838c60c001518d60e001516144d9565b9750505050816001600160a01b0316633c8a7d8d876060015188608001518960a00151896040518060400160405280888152602001336001600160a01b031681525060405160200161380c9190615abd565b6040516020818303038152906040526040518663ffffffff1660e01b815260040161383b9594939291906157f6565b6040805180830381600087803b15801561385457600080fd5b505af1158015613868573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061388c91906156f4565b610100880151919550935084108015906138ab57508561012001518310155b6138c75760405162461bcd60e51b815260040161083390615a18565b509193509193565b826001600160a01b03166138e2826118ce565b6001600160a01b0316146139275760405162461bcd60e51b8152600401808060200182810382526029815260200180615eb96029913960400191505060405180910390fd5b6001600160a01b03821661396c5760405162461bcd60e51b8152600401808060200182810382526024815260200180615d966024913960400191505060405180910390fd5b613977838383610939565b613982600082613257565b6001600160a01b03831660009081526001602052604090206139a4908261459d565b506001600160a01b03821660009081526001602052604090206139c790826145a9565b506139d4600282846145b5565b5080826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061148c83836145cb565b4690565b6000613a36826118ce565b9050613a4481600084610939565b613a4f600083613257565b6000828152600860205260409020546002600019610100600184161502019091160415613a8d576000828152600860205260408120613a8d9161501f565b6001600160a01b0381166000908152600160205260409020613aaf908361459d565b50613abb60028361462f565b5060405182906000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6000808080613b07868661463b565b909450925050505b9250929050565b60006110c18484846146b6565b6000908152600c6020526040902080546bffffffffffffffffffffffff19811660016bffffffffffffffffffffffff9283169081019092161790915590565b3b151590565b6001600160a01b038216613bc3576040805162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b613bcc81613246565b15613c1e576040805162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b613c2a60008383610939565b6001600160a01b0382166000908152600160205260409020613c4c90826145a9565b50613c59600282846145b5565b5060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001600160a01b0382166000908152600a602052604090205469ffffffffffffffffffff168061148f5750600d8054600169ffffffffffffffffffff76010000000000000000000000000000000000000000000080840482168381019092160275ffffffffffffffffffffffffffffffffffffffffffff909316929092179092556001600160a01b038085166000908152600a6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffff000000000000000000001686179055848352600b825291829020865181549085167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617825591870151950180549287015162ffffff16600160a01b027fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff969094169290911691909117939093161790915592915050565b613df18484846138cf565b613dfd84848484614780565b61296d5760405162461bcd60e51b8152600401808060200182810382526032815260200180615d3d6032913960400191505060405180910390fd5b6000613e44838361337b565b9050336001600160a01b0382161461148f57600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316148015613e9c5750804710155b15613fbe577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613efc57600080fd5b505af1158015613f10573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015613f8c57600080fd5b505af1158015613fa0573d6000803e3d6000fd5b505050506040513d6020811015613fb657600080fd5b5061296d9050565b6001600160a01b038316301415613fdf57613fda848383613feb565b61296d565b61296d8484848461495c565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b602083106140955780518252601f199092019160209182019101614076565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146140f7576040519150601f19603f3d011682016040523d82523d6000602084013e6140fc565b606091505b509150915081801561412a57508051158061412a575080806020019051602081101561412757600080fd5b50515b612b85576040805162461bcd60e51b815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600061148c8383614af4565b5490565b60008060008360020b126141a2578260020b6141aa565b8260020b6000035b9050620d89e8811115614204576040805162461bcd60e51b815260206004820152600160248201527f5400000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60006001821661421857600160801b61422a565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff169050600282161561425e576ffff97272373d413259a46990580e213a0260801c5b600482161561427d576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b600882161561429c576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b60108216156142bb576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156142da576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156142f9576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615614318576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615614338576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615614358576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615614378576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615614398576fe7159475a2c29b7443b29c7fa6e889d90260801c5b6110008216156143b8576fd097f3bdfd2022b8845ad8f792aa58250260801c5b6120008216156143d8576fa9f746462d870fdf8a65dc1f90e061e50260801c5b6140008216156143f8576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615614418576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615614439576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615614459576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615614478576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615614495576b048a170391f7dc42444e8fa20260801c5b60008460020b13156144b05780600019816144ac57fe5b0490505b6401000000008106156144c45760016144c7565b60005b60ff16602082901c0192505050919050565b6000836001600160a01b0316856001600160a01b031611156144f9579293925b846001600160a01b0316866001600160a01b0316116145245761451d858585614b0c565b9050614594565b836001600160a01b0316866001600160a01b0316101561458657600061454b878686614b0c565b9050600061455a878986614b78565b9050806001600160801b0316826001600160801b03161061457b578061457d565b815b92505050614594565b614591858584614b78565b90505b95945050505050565b600061148c8383614bbe565b600061148c8383614c84565b60006110c184846001600160a01b038516614cce565b8154600090821061460d5760405162461bcd60e51b8152600401808060200182810382526022815260200180615d1b6022913960400191505060405180910390fd5b82600001828154811061461c57fe5b9060005260206000200154905092915050565b600061148c8383614d65565b81546000908190831061467f5760405162461bcd60e51b8152600401808060200182810382526022815260200180615e976022913960400191505060405180910390fd5b600084600001848154811061469057fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b600082815260018401602052604081205482816147515760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156147165781810151838201526020016146fe565b50505050905090810190601f1680156147435780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5084600001600182038154811061476457fe5b9060005260206000209060020201600101549150509392505050565b6000614794846001600160a01b0316613b62565b6147a0575060016110c1565b60006148f17f150b7a02000000000000000000000000000000000000000000000000000000006147ce613253565b88878760405160240180856001600160a01b03168152602001846001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561483557818101518382015260200161481d565b50505050905090810190601f1680156148625780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051806060016040528060328152602001615d3d603291396001600160a01b0388169190614e39565b9050600081806020019051602081101561490a57600080fd5b50517fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001492505050949350505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000178152925182516000948594938a169392918291908083835b60208310614a0e5780518252601f1990920191602091820191016149ef565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614a70576040519150601f19603f3d011682016040523d82523d6000602084013e614a75565b606091505b5091509150818015614aa3575080511580614aa35750808060200190516020811015614aa057600080fd5b50515b6127cd576040805162461bcd60e51b815260206004820152600360248201527f5354460000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60009081526001919091016020526040902054151590565b6000826001600160a01b0316846001600160a01b03161115614b2c579192915b6000614b58856001600160a01b0316856001600160a01b03166c010000000000000000000000006134d1565b9050614594614b7384838888036001600160a01b03166134d1565b614e48565b6000826001600160a01b0316846001600160a01b03161115614b98579192915b6110c1614b73836c010000000000000000000000008787036001600160a01b03166134d1565b60008181526001830160205260408120548015614c7a5783546000198083019190810190600090879083908110614bf157fe5b9060005260206000200154905080876000018481548110614c0e57fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080614c3e57fe5b6001900381819060005260206000200160009055905586600101600087815260200190815260200160002060009055600194505050505061148f565b600091505061148f565b6000614c908383614af4565b614cc65750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561148f565b50600061148f565b600082815260018401602052604081205480614d335750506040805180820182528381526020808201848152865460018181018955600089815284812095516002909302909501918255915190820155865486845281880190925292909120556134ca565b82856000016001830381548110614d4657fe5b90600052602060002090600202016001018190555060009150506134ca565b60008181526001830160205260408120548015614c7a5783546000198083019190810190600090879083908110614d9857fe5b9060005260206000209060020201905080876000018481548110614db857fe5b600091825260208083208454600290930201918255600193840154918401919091558354825289830190526040902090840190558654879080614df757fe5b600082815260208082206002600019909401938402018281556001908101839055929093558881528982019092526040822091909155945061148f9350505050565b60606110c18484600085614e5e565b806001600160801b038116811461077157600080fd5b606082471015614e9f5760405162461bcd60e51b8152600401808060200182810382526026815260200180615dba6026913960400191505060405180910390fd5b614ea885613b62565b614ef9576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b60208310614f375780518252601f199092019160209182019101614f18565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614f99576040519150601f19603f3d011682016040523d82523d6000602084013e614f9e565b606091505b5091509150614fae828286614fb9565b979650505050505050565b60608315614fc85750816134ca565b825115614fd85782518084602001fd5b60405162461bcd60e51b81526020600482018181528451602484015284518593919283926044019190850190808383600083156147165781810151838201526020016146fe565b50805460018160011615610100020316600290046000825580601f106150455750615063565b601f0160209004906000526020600020908101906150639190615066565b50565b5b8082111561507b5760008155600101615067565b5090565b803561077181615cc4565b805161ffff8116811461077157600080fd5b803562ffffff8116811461077157600080fd5b6000602082840312156150c0578081fd5b81356134ca81615cc4565b600080604083850312156150dd578081fd5b82356150e881615cc4565b915060208301356150f881615cc4565b809150509250929050565b60008060008060808587031215615118578182fd5b843561512381615cc4565b9350602085013561513381615cc4565b92506151416040860161509c565b9150606085013561515181615cc4565b939692955090935050565b600080600060608486031215615170578081fd5b833561517b81615cc4565b9250602084013561518b81615cc4565b929592945050506040919091013590565b600080600080608085870312156151b1578182fd5b84356151bc81615cc4565b935060208501356151cc81615cc4565b925060408501359150606085013567ffffffffffffffff8111156151ee578182fd5b8501601f810187136151fe578182fd5b803561521161520c82615c76565b615c52565b818152886020838501011115615225578384fd5b81602084016020830137908101602001929092525092959194509250565b60008060408385031215615255578182fd5b823561526081615cc4565b915060208301356150f881615cd9565b60008060408385031215615282578182fd5b823561528d81615cc4565b946020939093013593505050565b6000806000606084860312156152af578081fd5b83356152ba81615cc4565b92506020840135915060408401356152d181615cc4565b809150509250925092565b60008060008060008060c087890312156152f4578384fd5b86356152ff81615cc4565b95506020870135945060408701359350606087013561531d81615d0b565b9598949750929560808101359460a0909101359350915050565b60008060208385031215615349578182fd5b823567ffffffffffffffff80821115615360578384fd5b818501915085601f830112615373578384fd5b813581811115615381578485fd5b8660208083028501011115615394578485fd5b60209290920196919550909350505050565b6000602082840312156153b7578081fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146134ca578182fd5b6000602082840312156153f7578081fd5b81356134ca81615ce7565b600060208284031215615413578081fd5b815167ffffffffffffffff811115615429578182fd5b8201601f81018413615439578182fd5b805161544761520c82615c76565b81815285602083850101111561545b578384fd5b614594826020830160208601615c98565b60006080828403121561547d578081fd5b50919050565b600060a0828403121561547d578081fd5b600060c0828403121561547d578081fd5b600081830360808112156154b7578182fd5b6040516040810167ffffffffffffffff82821081831117156154d557fe5b8160405260608412156154e6578485fd5b60a08301935081841081851117156154fa57fe5b50826040528435925061550c83615cc4565b91825260208401359161551e83615cc4565b8260608301526155306040860161509c565b608083015281526155436060850161507f565b6020820152949350505050565b6000610160828403121561547d578081fd5b600060208284031215615573578081fd5b81356134ca81615cf6565b60008060408385031215615590578182fd5b825161559b81615cf6565b60208401519092506150f881615cf6565b600080600080600060a086880312156155c3578283fd5b85516155ce81615cf6565b80955050602086015193506040860151925060608601516155ee81615cf6565b60808701519092506155ff81615cf6565b809150509295509295909350565b600080600080600080600060e0888a031215615627578485fd5b875161563281615cc4565b602089015190975061564381615ce7565b95506156516040890161508a565b945061565f6060890161508a565b935061566d6080890161508a565b925060a088015161567d81615d0b565b60c089015190925061568e81615cd9565b8091505092959891949750929550565b6000602082840312156156af578081fd5b61148c8261509c565b6000602082840312156156c9578081fd5b5035919050565b600080604083850312156156e2578182fd5b8235915060208301356150f881615cc4565b60008060408385031215615706578182fd5b505080516020909101519092909150565b6000806000806060858703121561572c578182fd5b8435935060208501359250604085013567ffffffffffffffff80821115615751578384fd5b818701915087601f830112615764578384fd5b813581811115615772578485fd5b886020828501011115615783578485fd5b95989497505060200194505050565b600081518084526157aa816020860160208601615c98565b601f01601f19169290920160200192915050565b60020b9052565b6001600160801b03169052565b6000828483379101908152919050565b6001600160a01b0391909116815260200190565b60006001600160a01b03871682528560020b60208301528460020b60408301526001600160801b038416606083015260a06080830152614fae60a0830184615792565b6001600160a01b03959095168552600293840b60208601529190920b60408401526001600160801b03918216606084015216608082015260a00190565b6001600160a01b039390931683526001600160801b03918216602084015216604082015260600190565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015615911577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526158ff858351615792565b945092850192908501906001016158c5565b5092979650505050505050565b901515815260200190565b90815260200190565b6001600160a01b03929092168252602082015260400190565b600293840b81529190920b60208201526001600160801b03909116604082015260600190565b60006020825261148c6020830184615792565b6020808252600c908201527f4e6f7420617070726f7665640000000000000000000000000000000000000000604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201527f697374656e7420746f6b656e0000000000000000000000000000000000000000606082015260800190565b60208082526014908201527f507269636520736c69707061676520636865636b000000000000000000000000604082015260600190565b60208082526010908201527f496e76616c696420746f6b656e20494400000000000000000000000000000000604082015260600190565b6020808252600b908201527f4e6f7420636c6561726564000000000000000000000000000000000000000000604082015260600190565b815180516001600160a01b03908116835260208083015182168185015260409283015162ffffff1692840192909252920151909116606082015260800190565b6001600160801b039390931683526020830191909152604082015260600190565b9384526001600160801b039290921660208401526040830152606082015260800190565b918252602082015260400190565b6bffffffffffffffffffffffff8d1681526001600160a01b038c811660208301528b811660408301528a16606082015262ffffff89166080820152600288900b60a08201526101808101615ba760c08301896157be565b615bb460e08301886157c5565b8561010083015284610120830152615bd06101408301856157c5565b615bde6101608301846157c5565b9d9c50505050505050505050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615c23578283fd5b83018035915067ffffffffffffffff821115615c3d578283fd5b602001915036819003821315613b0f57600080fd5b60405181810167ffffffffffffffff81118282101715615c6e57fe5b604052919050565b600067ffffffffffffffff821115615c8a57fe5b50601f01601f191660200190565b60005b83811015615cb3578181015183820152602001615c9b565b8381111561296d5750506000910152565b6001600160a01b038116811461506357600080fd5b801515811461506357600080fd5b8060020b811461506357600080fd5b6001600160801b038116811461506357600080fd5b60ff8116811461506357600080fdfe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724552433732315065726d69743a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e7366657220746f20746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c4552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e64734552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564a164736f6c6343000706000a"; - static readonly abi: ({ - inputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - anonymous?: undefined; - name?: undefined; - outputs?: undefined; - } | { - anonymous: boolean; - inputs: { - indexed: boolean; - internalType: string; - name: string; - type: string; - }[]; - name: string; - type: string; - stateMutability?: undefined; - outputs?: undefined; - } | { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - anonymous?: undefined; - } | { - inputs: { - components: { - internalType: string; - name: string; - type: string; - }[]; - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - anonymous?: undefined; - } | { - stateMutability: string; - type: string; - inputs?: undefined; - anonymous?: undefined; - name?: undefined; - outputs?: undefined; - })[]; - static createInterface(): NonfungiblePositionManagerInterface; - static connect(address: string, signerOrProvider: Signer | Provider): NonfungiblePositionManager; -} diff --git a/dist2/types/types/v3/factories/NonfungibleTokenPositionDescriptor__factory.d.ts b/dist2/types/types/v3/factories/NonfungibleTokenPositionDescriptor__factory.d.ts deleted file mode 100644 index 19e42701ac5..00000000000 --- a/dist2/types/types/v3/factories/NonfungibleTokenPositionDescriptor__factory.d.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { Signer, BytesLike, ContractFactory, Overrides } from "ethers"; -import { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { NonfungibleTokenPositionDescriptor, NonfungibleTokenPositionDescriptorInterface } from "../NonfungibleTokenPositionDescriptor"; -export declare class NonfungibleTokenPositionDescriptor__factory extends ContractFactory { - constructor(linkLibraryAddresses: NonfungibleTokenPositionDescriptorLibraryAddresses, signer?: Signer); - static linkBytecode(linkLibraryAddresses: NonfungibleTokenPositionDescriptorLibraryAddresses): string; - deploy(_WETH9: string, _nativeCurrencyLabelBytes: BytesLike, overrides?: Overrides & { - from?: string | Promise; - }): Promise; - getDeployTransaction(_WETH9: string, _nativeCurrencyLabelBytes: BytesLike, overrides?: Overrides & { - from?: string | Promise; - }): TransactionRequest; - attach(address: string): NonfungibleTokenPositionDescriptor; - connect(signer: Signer): NonfungibleTokenPositionDescriptor__factory; - static readonly bytecode = "0x60c060405234801561001057600080fd5b5060405161158038038061158083398101604081905261002f9161004a565b60609190911b6001600160601b03191660805260a052610082565b6000806040838503121561005c578182fd5b82516001600160a01b0381168114610072578283fd5b6020939093015192949293505050565b60805160601c60a0516114bf6100c16000398061028f52806102c35280610377525080610107528061014c528061061a528061066e52506114bf6000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c8063a18246e211610050578063a18246e2146100d5578063b7af3cdc146100dd578063e9dc6375146100f257610072565b80634aa4a4fc146100775780637e5af771146100955780639d7b0ea8146100b5575b600080fd5b61007f610105565b60405161008c9190611311565b60405180910390f35b6100a86100a3366004611017565b610129565b60405161008c9190611325565b6100c86100c3366004611057565b610148565b60405161008c9190611330565b6100c861028d565b6100e56102b1565b60405161008c9190611339565b6100e5610100366004611057565b6103d7565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006101358383610148565b61013f8584610148565b13949350505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316141561018d5750606319610287565b8160011415610283576001600160a01b03831673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4814156101c4575061012c610287565b6001600160a01b03831673dac17f958d2ee523a2206206994597c13d831ec714156101f1575060c8610287565b6001600160a01b038316736b175474e89094c44da98b954eedeac495271d0f141561021e57506064610287565b6001600160a01b038316738daebade922df735c38c80c7ebd708af50815faa141561024c575060c719610287565b6001600160a01b038316732260fac5e5542a773aa44fbcfedf7c193bc2c599141561027b575061012b19610287565b506000610287565b5060005b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b606060005b60208110801561031657507f000000000000000000000000000000000000000000000000000000000000000081602081106102ed57fe5b1a60f81b7fff000000000000000000000000000000000000000000000000000000000000001615155b15610323576001016102b6565b60008167ffffffffffffffff8111801561033c57600080fd5b506040519080825280601f01601f191660200182016040528015610367576020820181803683370190505b50905060005b828110156103d0577f000000000000000000000000000000000000000000000000000000000000000081602081106103a157fe5b1a60f81b8282815181106103b157fe5b60200101906001600160f81b031916908160001a90535060010161036d565b5091505090565b60606000806000806000876001600160a01b03166399fbab88886040518263ffffffff1660e01b815260040161040d9190611330565b6101806040518083038186803b15801561042657600080fd5b505afa15801561043a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045e91906111dc565b5050505050965096509650965096505050600061051c896001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156104ad57600080fd5b505afa1580156104c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e59190610ff4565b6040518060600160405280896001600160a01b03168152602001886001600160a01b031681526020018762ffffff168152506108e7565b9050600061052d87876100a36109e3565b90506000811561053d578761053f565b865b90506000821561054f5787610551565b885b90506000846001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561058e57600080fd5b505afa1580156105a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c69190611133565b505050505091505073__$cea9be979eee3d87fb124d6cbb244bb0b5$__63c49917d7604051806101c001604052808f8152602001866001600160a01b03168152602001856001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b03161461065f5761065a876109e7565b610667565b6106676102b1565b81526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b0316146106b3576106ae866109e7565b6106bb565b6106bb6102b1565b8152602001866001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156106f957600080fd5b505afa15801561070d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073191906111c2565b60ff168152602001856001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561077257600080fd5b505afa158015610786573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107aa91906111c2565b60ff16815260200187151581526020018a60020b81526020018960020b81526020018460020b8152602001886001600160a01b031663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561080e57600080fd5b505afa158015610822573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108469190611082565b60020b81526020018b62ffffff168152602001886001600160a01b03168152506040518263ffffffff1660e01b8152600401610882919061134c565b60006040518083038186803b15801561089a57600080fd5b505af41580156108ae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108d6919081019061109c565b9d9c50505050505050505050505050565b600081602001516001600160a01b031682600001516001600160a01b03161061090f57600080fd5b50805160208083015160409384015184516001600160a01b0394851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b6bffffffffffffffffffffffff191660a183015260b58201939093527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d5808301919091528251808303909101815260f5909101909152805191012090565b4690565b60606000610a15837f95d89b4100000000000000000000000000000000000000000000000000000000610a3a565b9050805160001415610a3257610a2a83610c8f565b915050610a35565b90505b919050565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000085161781529151815160609360009384936001600160a01b03891693919290918291908083835b60208310610ad35780518252601f199092019160209182019101610ab4565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114610b33576040519150601f19603f3d011682016040523d82523d6000602084013e610b38565b606091505b5091509150811580610b4957508051155b15610b67576040518060200160405280600081525092505050610287565b805160201415610b9f576000818060200190516020811015610b8857600080fd5b50519050610b9581610c9c565b9350505050610287565b604081511115610c7757808060200190516020811015610bbe57600080fd5b8101908080516040519392919084640100000000821115610bde57600080fd5b908301906020820185811115610bf357600080fd5b8251640100000000811182820188101715610c0d57600080fd5b82525081516020918201929091019080838360005b83811015610c3a578181015183820152602001610c22565b50505050905090810190601f168015610c675780820380516001836020036101000a031916815260200191505b5060405250505092505050610287565b50506040805160208101909152600081529392505050565b6060610a32826006610ddc565b604080516020808252818301909252606091600091906020820181803683370190505090506000805b6020811015610d3e576000858260208110610cdc57fe5b1a60f81b90507fff00000000000000000000000000000000000000000000000000000000000000811615610d355780848481518110610d1757fe5b60200101906001600160f81b031916908160001a9053506001909201915b50600101610cc5565b5060008167ffffffffffffffff81118015610d5857600080fd5b506040519080825280601f01601f191660200182016040528015610d83576020820181803683370190505b50905060005b82811015610dd357838181518110610d9d57fe5b602001015160f81c60f81b828281518110610db457fe5b60200101906001600160f81b031916908160001a905350600101610d89565b50949350505050565b606060028206158015610def5750600082115b8015610dfc575060288211155b610e6757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f41646472657373537472696e675574696c3a20494e56414c49445f4c454e0000604482015290519081900360640190fd5b60008267ffffffffffffffff81118015610e8057600080fd5b506040519080825280601f01601f191660200182016040528015610eab576020820181803683370190505b5090506001600160a01b03841660005b60028504811015610f4f57600860138290030282901c600f600482901c1660f082168203610ee882610f59565b868560020281518110610ef757fe5b60200101906001600160f81b031916908160001a905350610f1781610f59565b868560020260010181518110610f2957fe5b60200101906001600160f81b031916908160001a9053505060019092019150610ebb9050565b5090949350505050565b6000600a8260ff161015610f7457506030810160f81b610a35565b506037810160f81b610a35565b8051610a358161149a565b8051600281900b8114610a3557600080fd5b80516fffffffffffffffffffffffffffffffff81168114610a3557600080fd5b805161ffff81168114610a3557600080fd5b805162ffffff81168114610a3557600080fd5b805160ff81168114610a3557600080fd5b600060208284031215611005578081fd5b81516110108161149a565b9392505050565b60008060006060848603121561102b578182fd5b83356110368161149a565b925060208401356110468161149a565b929592945050506040919091013590565b60008060408385031215611069578182fd5b82356110748161149a565b946020939093013593505050565b600060208284031215611093578081fd5b61101082610f8c565b6000602082840312156110ad578081fd5b815167ffffffffffffffff808211156110c4578283fd5b818401915084601f8301126110d7578283fd5b8151818111156110e357fe5b604051601f8201601f19168101602001838111828210171561110157fe5b604052818152838201602001871015611118578485fd5b61112982602083016020870161146a565b9695505050505050565b600080600080600080600060e0888a03121561114d578283fd5b87516111588161149a565b965061116660208901610f8c565b955061117460408901610fbe565b945061118260608901610fbe565b935061119060808901610fbe565b925061119e60a08901610fe3565b915060c088015180151581146111b2578182fd5b8091505092959891949750929550565b6000602082840312156111d3578081fd5b61101082610fe3565b6000806000806000806000806000806000806101808d8f0312156111fe578485fd5b8c516bffffffffffffffffffffffff81168114611219578586fd5b9b5061122760208e01610f81565b9a5061123560408e01610f81565b995061124360608e01610f81565b985061125160808e01610fd0565b975061125f60a08e01610f8c565b965061126d60c08e01610f8c565b955061127b60e08e01610f9e565b94506101008d015193506101208d0151925061129a6101408e01610f9e565b91506112a96101608e01610f9e565b90509295989b509295989b509295989b565b6001600160a01b03169052565b15159052565b60020b9052565b600081518084526112ed81602086016020860161146a565b601f01601f19169290920160200192915050565b62ffffff169052565b60ff169052565b6001600160a01b0391909116815260200190565b901515815260200190565b90815260200190565b60006020825261101060208301846112d5565b60006020825282516020830152602083015161136b60408401826112bb565b50604083015161137e60608401826112bb565b5060608301516101c080608085015261139b6101e08501836112d5565b91506080850151601f198584030160a08601526113b883826112d5565b92505060a08501516113cd60c086018261130a565b5060c08501516113e060e086018261130a565b5060e08501516101006113f5818701836112c8565b8601519050610120611409868201836112ce565b860151905061014061141d868201836112ce565b8601519050610160611431868201836112ce565b8601519050610180611445868201836112ce565b86015190506101a061145986820183611301565b8601519050610f4f858301826112bb565b60005b8381101561148557818101518382015260200161146d565b83811115611494576000848401525b50505050565b6001600160a01b03811681146114af57600080fd5b5056fea164736f6c6343000706000a"; - static readonly abi: ({ - inputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - name?: undefined; - outputs?: undefined; - } | { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - })[]; - static createInterface(): NonfungibleTokenPositionDescriptorInterface; - static connect(address: string, signerOrProvider: Signer | Provider): NonfungibleTokenPositionDescriptor; -} -export interface NonfungibleTokenPositionDescriptorLibraryAddresses { - ["contracts/libraries/NFTDescriptor.sol:NFTDescriptor"]: string; -} diff --git a/dist2/types/types/v3/factories/PairFlash__factory.d.ts b/dist2/types/types/v3/factories/PairFlash__factory.d.ts deleted file mode 100644 index 8b44505e75f..00000000000 --- a/dist2/types/types/v3/factories/PairFlash__factory.d.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { Signer, ContractFactory, Overrides } from "ethers"; -import { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { PairFlash, PairFlashInterface } from "../PairFlash"; -export declare class PairFlash__factory extends ContractFactory { - constructor(signer?: Signer); - deploy(_swapRouter: string, _factory: string, _WETH9: string, overrides?: Overrides & { - from?: string | Promise; - }): Promise; - getDeployTransaction(_swapRouter: string, _factory: string, _WETH9: string, overrides?: Overrides & { - from?: string | Promise; - }): TransactionRequest; - attach(address: string): PairFlash; - connect(signer: Signer): PairFlash__factory; - static readonly bytecode = "0x60e06040523480156200001157600080fd5b5060405162001a9338038062001a9383398101604081905262000034916200005c565b6001600160601b0319606092831b811660805290821b811660a05291901b1660c052620000c8565b60008060006060848603121562000071578283fd5b83516200007e81620000af565b60208501519093506200009181620000af565b6040850151909250620000a481620000af565b809150509250925092565b6001600160a01b0381168114620000c557600080fd5b50565b60805160601c60a05160601c60c05160601c61195a6200013960003980610573528061074b528061077852806108c85280610976525080609c528061038b52806104b5528061054f52806110f0528061115052806111d1525080610267528061059752806106eb525061195a6000f3fe60806040526004361061007f5760003560e01c8063c31c9c071161004e578063c31c9c0714610195578063c45a0155146101aa578063df2ab5bb146101bf578063e9cbafb0146101d25761012a565b806312210e8a1461012f5780632384463b1461013757806349404b7c146101575780634aa4a4fc1461016a5761012a565b3661012a573373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461012857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742057455448390000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b600080fd5b6101286101f2565b34801561014357600080fd5b5061012861015236600461161f565b610204565b6101286101653660046116d2565b610387565b34801561017657600080fd5b5061017f61054d565b60405161018c9190611781565b60405180910390f35b3480156101a157600080fd5b5061017f610571565b3480156101b657600080fd5b5061017f610595565b6101286101cd3660046114e8565b6105b9565b3480156101de57600080fd5b506101286101ed3660046116fd565b6106d6565b4715610202576102023347610a73565b565b60006040518060600160405280836000015173ffffffffffffffffffffffffffffffffffffffff168152602001836020015173ffffffffffffffffffffffffffffffffffffffff168152602001836040015162ffffff168152509050600061028c7f000000000000000000000000000000000000000000000000000000000000000083610bc1565b90508073ffffffffffffffffffffffffffffffffffffffff1663490e6cbc30856060015186608001516040518060c0016040528089606001518152602001896080015181526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018881526020018960a0015162ffffff1681526020018960c0015162ffffff1681525060405160200161032291906118bb565b6040516020818303038152906040526040518563ffffffff1660e01b815260040161035094939291906117a2565b600060405180830381600087803b15801561036a57600080fd5b505af115801561037e573d6000803e3d6000fd5b50505050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561041057600080fd5b505afa158015610424573d6000803e3d6000fd5b505050506040513d602081101561043a57600080fd5b50519050828110156104ad57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e742057455448390000000000000000000000000000604482015290519081900360640190fd5b8015610548577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561052657600080fd5b505af115801561053a573d6000803e3d6000fd5b505050506105488282610a73565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561062257600080fd5b505afa158015610636573d6000803e3d6000fd5b505050506040513d602081101561064c57600080fd5b50519050828110156106bf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b80156106d0576106d0848383610cf7565b50505050565b60006106e482840184611523565b90506107147f00000000000000000000000000000000000000000000000000000000000000008260600151610ed3565b506060810151805160209091015182516000906107319089610f09565b90506000610743856020015189610f09565b9050610774837f00000000000000000000000000000000000000000000000000000000000000008760200151610f19565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663414bf3896040518061010001604052808773ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff168152602001896080015162ffffff1681526020013073ffffffffffffffffffffffffffffffffffffffff16815260200142815260200189602001518152602001868152602001600073ffffffffffffffffffffffffffffffffffffffff168152506040518263ffffffff1660e01b815260040161086e919061183f565b602060405180830381600087803b15801561088857600080fd5b505af115801561089c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c091906116ba565b90506108f1857f00000000000000000000000000000000000000000000000000000000000000008860000151610f19565b604080516101008101825273ffffffffffffffffffffffffffffffffffffffff8781168252868116602083015260a08981015162ffffff168385015230606084015242608084015289519083015260c08201859052600060e0830181905292517f414bf3890000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000009091169163414bf389916109ac919060040161183f565b602060405180830381600087803b1580156109c657600080fd5b505af11580156109da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fe91906116ba565b90508315610a1257610a12863033876110ee565b8215610a2457610a24853033866110ee565b83821115610a455760008483039050610a4387308a60400151846110ee565b505b82811115610a665760008382039050610a6486308a60400151846110ee565b505b5050505050505050505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b60208310610aea57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610aad565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114610b4c576040519150601f19603f3d011682016040523d82523d6000602084013e610b51565b606091505b505090508061054857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1610610c0357600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d5808301919091528251808303909101815260f5909101909152805191012090565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b60208310610dcc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d8f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610e2e576040519150601f19603f3d011682016040523d82523d6000602084013e610e33565b606091505b5091509150818015610e61575080511580610e615750808060200190516020811015610e5e57600080fd5b50515b610ecc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b5050505050565b6000610edf8383610bc1565b90503373ffffffffffffffffffffffffffffffffffffffff821614610f0357600080fd5b92915050565b80820182811015610f0357600080fd5b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b3000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b60208310610fee57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fb1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611050576040519150601f19603f3d011682016040523d82523d6000602084013e611055565b606091505b5091509150818015611083575080511580611083575080806020019051602081101561108057600080fd5b50515b610ecc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5341000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156111495750804710155b15611292577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156111b657600080fd5b505af11580156111ca573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561126057600080fd5b505af1158015611274573d6000803e3d6000fd5b505050506040513d602081101561128a57600080fd5b506106d09050565b73ffffffffffffffffffffffffffffffffffffffff83163014156112c0576112bb848383610cf7565b6106d0565b6106d0848484846040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000178152925182516000948594938a169392918291908083835b602083106113a457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611367565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611406576040519150601f19603f3d011682016040523d82523d6000602084013e61140b565b606091505b5091509150818015611439575080511580611439575080806020019051602081101561143657600080fd5b50515b6114a457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354460000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b505050505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146114d057600080fd5b919050565b803562ffffff811681146114d057600080fd5b6000806000606084860312156114fc578283fd5b611505846114ac565b92506020840135915061151a604085016114ac565b90509250925092565b6000818303610100811215611536578182fd5b6040805160c0810167ffffffffffffffff828210818311171561155557fe5b81845286358352602087013560208401526115718488016114ac565b8484015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0860112156115a4578586fd5b8351945060608501915084821081831117156115bc57fe5b5082526115cb606086016114ac565b83526115d9608086016114ac565b60208401526115ea60a086016114d5565b8284015282606082015261160060c086016114d5565b608082015261161160e086016114d5565b60a082015295945050505050565b600060e08284031215611630578081fd5b60405160e0810181811067ffffffffffffffff8211171561164d57fe5b604052611659836114ac565b8152611667602084016114ac565b6020820152611678604084016114d5565b6040820152606083013560608201526080830135608082015261169d60a084016114d5565b60a08201526116ae60c084016114d5565b60c08201529392505050565b6000602082840312156116cb578081fd5b5051919050565b600080604083850312156116e4578182fd5b823591506116f4602084016114ac565b90509250929050565b60008060008060608587031215611712578081fd5b8435935060208501359250604085013567ffffffffffffffff80821115611737578283fd5b818701915087601f83011261174a578283fd5b813581811115611758578384fd5b886020828501011115611769578384fd5b95989497505060200194505050565b62ffffff169052565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8616825260208581840152846040840152608060608401528351806080850152825b818110156117f75785810183015185820160a0015282016117db565b81811115611808578360a083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160a0019695505050505050565b60006101008201905073ffffffffffffffffffffffffffffffffffffffff80845116835280602085015116602084015262ffffff60408501511660408401528060608501511660608401526080840151608084015260a084015160a084015260c084015160c08401528060e08501511660e08401525092915050565b6000610100820190508251825260208301516020830152604083015173ffffffffffffffffffffffffffffffffffffffff8082166040850152606085015191508082511660608501528060208301511660808501525062ffffff60408201511660a084015250608083015161193360c0840182611778565b5060a083015161194660e0840182611778565b509291505056fea164736f6c6343000706000a"; - static readonly abi: ({ - inputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - name?: undefined; - outputs?: undefined; - } | { - inputs: never[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - } | { - inputs: { - components: { - internalType: string; - name: string; - type: string; - }[]; - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: never[]; - stateMutability: string; - type: string; - } | { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: never[]; - stateMutability: string; - type: string; - } | { - stateMutability: string; - type: string; - inputs?: undefined; - name?: undefined; - outputs?: undefined; - })[]; - static createInterface(): PairFlashInterface; - static connect(address: string, signerOrProvider: Signer | Provider): PairFlash; -} diff --git a/dist2/types/types/v3/factories/QuoterV2__factory.d.ts b/dist2/types/types/v3/factories/QuoterV2__factory.d.ts deleted file mode 100644 index 81a3e2ad345..00000000000 --- a/dist2/types/types/v3/factories/QuoterV2__factory.d.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Signer, ContractFactory, Overrides } from "ethers"; -import { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { QuoterV2, QuoterV2Interface } from "../QuoterV2"; -export declare class QuoterV2__factory extends ContractFactory { - constructor(signer?: Signer); - deploy(_factory: string, _WETH9: string, overrides?: Overrides & { - from?: string | Promise; - }): Promise; - getDeployTransaction(_factory: string, _WETH9: string, overrides?: Overrides & { - from?: string | Promise; - }): TransactionRequest; - attach(address: string): QuoterV2; - connect(signer: Signer): QuoterV2__factory; - static readonly bytecode = "0x60c06040523480156200001157600080fd5b506040516200212c3803806200212c833981016040819052620000349162000070565b6001600160601b0319606092831b8116608052911b1660a052620000a7565b80516001600160a01b03811681146200006b57600080fd5b919050565b6000806040838503121562000083578182fd5b6200008e8362000053565b91506200009e6020840162000053565b90509250929050565b60805160601c60a05160601c612051620000db60003980610321525080610577528061095d5280610b9252506120516000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063c45a01551161005b578063c45a0155146100e6578063c6a5026a146100ee578063cdca175314610101578063fa461e33146101145761007d565b80632f80bb1d146100825780634aa4a4fc146100ae578063bd21704a146100c3575b600080fd5b610095610090366004611b2b565b610129565b6040516100a59493929190611eac565b60405180910390f35b6100b661031f565b6040516100a59190611def565b6100d66100d1366004611c49565b610343565b6040516100a59493929190611f54565b6100b6610575565b6100d66100fc366004611c49565b610599565b61009561010f366004611b2b565b610754565b610127610122366004611b91565b61092c565b005b6000606080600061013986610ae8565b67ffffffffffffffff8111801561014f57600080fd5b50604051908082528060200260200182016040528015610179578160200160208202803683370190505b50925061018586610ae8565b67ffffffffffffffff8111801561019b57600080fd5b506040519080825280602002602001820160405280156101c5578160200160208202803683370190505b50915060005b60008060006101d98a610b17565b92509250925060008060008061025c6040518060a001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff1681526020018f81526020018762ffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815250610343565b9350935093509350828b898151811061027157fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818a89815181106102b857fe5b63ffffffff90921660209283029190910190910152929b50968201966001909601958b926102e58e610b48565b156102fa576102f38e610b50565b9d5061030a565b8c9b505050505050505050610316565b505050505050506101cb565b92959194509250565b7f000000000000000000000000000000000000000000000000000000000000000081565b60208101518151606083015160009283928392839273ffffffffffffffffffffffffffffffffffffffff808216908416109284926103819290610b8b565b9050866080015173ffffffffffffffffffffffffffffffffffffffff16600014156103af5760408701516000555b60005a90508173ffffffffffffffffffffffffffffffffffffffff1663128acb0830856103df8c60400151610bc9565b6000038c6080015173ffffffffffffffffffffffffffffffffffffffff1660001461040e578c60800151610434565b8761042d5773fffd8963efd1fc6a506488495d951d5263988d25610434565b6401000276a45b8d602001518e606001518f6000015160405160200161045593929190611d89565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401610484959493929190611e10565b6040805180830381600087803b15801561049d57600080fd5b505af19250505080156104eb575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526104e891810190611b6e565b60015b610568573d808015610519576040519150601f19603f3d011682016040523d82523d6000602084013e61051e565b606091505b505a82039450886080015173ffffffffffffffffffffffffffffffffffffffff166000141561054c57600080555b610557818487610bfb565b97509750975097505050505061056e565b50505050505b9193509193565b7f000000000000000000000000000000000000000000000000000000000000000081565b60208101518151606083015160009283928392839273ffffffffffffffffffffffffffffffffffffffff808216908416109284926105d79290610b8b565b905060005a90508173ffffffffffffffffffffffffffffffffffffffff1663128acb0830856106098c60400151610bc9565b60808d015173ffffffffffffffffffffffffffffffffffffffff1615610633578c60800151610659565b876106525773fffd8963efd1fc6a506488495d951d5263988d25610659565b6401000276a45b8d600001518e606001518f6020015160405160200161067a93929190611d89565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016106a9959493929190611e10565b6040805180830381600087803b1580156106c257600080fd5b505af1925050508015610710575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261070d91810190611b6e565b60015b610568573d80801561073e576040519150601f19603f3d011682016040523d82523d6000602084013e610743565b606091505b505a82039450610557818487610bfb565b6000606080600061076486610ae8565b67ffffffffffffffff8111801561077a57600080fd5b506040519080825280602002602001820160405280156107a4578160200160208202803683370190505b5092506107b086610ae8565b67ffffffffffffffff811180156107c657600080fd5b506040519080825280602002602001820160405280156107f0578160200160208202803683370190505b50915060005b60008060006108048a610b17565b9250925092506000806000806108876040518060a001604052808973ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018f81526020018762ffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815250610599565b9350935093509350828b898151811061089c57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818a89815181106108e357fe5b63ffffffff90921660209283029190910190910152929b50968201966001909601958b926109108e610b48565b156102fa5761091e8e610b50565b9d50505050505050506107f6565b600083138061093b5750600082135b61094457600080fd5b600080600061095284610b17565b9250925092506109847f0000000000000000000000000000000000000000000000000000000000000000848484610ccf565b5060008060008089136109ca578573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1610888a6000036109ff565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161089896000035b9250925092506000610a12878787610b8b565b90506000808273ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015610a5d57600080fd5b505afa158015610a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a959190611c6b565b5050505050915091508515610abb57604051848152826020820152816040820152606081fd5b60005415610ad1576000548414610ad157600080fd5b604051858152826020820152816040820152606081fd5b805160177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec909101045b919050565b60008080610b258482610cee565b9250610b32846014610dee565b9050610b3f846017610cee565b91509193909250565b516042111590565b8051606090610b859083906017907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe901610ede565b92915050565b6000610bc17f0000000000000000000000000000000000000000000000000000000000000000610bbc8686866110c5565b611142565b949350505050565b60007f80000000000000000000000000000000000000000000000000000000000000008210610bf757600080fd5b5090565b6000806000806000808773ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015610c4a57600080fd5b505afa158015610c5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c829190611c6b565b50939650610c9794508d935061127892505050565b91975095509050610cbf73ffffffffffffffffffffffffffffffffffffffff89168383611339565b9350869250505093509350935093565b6000610ce585610ce08686866110c5565b611991565b95945050505050565b600081826014011015610d6257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f416464726573735f6f766572666c6f770000000000000000000000000000604482015290519081900360640190fd5b8160140183511015610dd557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e64730000000000000000000000604482015290519081900360640190fd5b5001602001516c01000000000000000000000000900490565b600081826003011015610e6257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b8160030183511015610ed557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e6473000000000000000000000000604482015290519081900360640190fd5b50016003015190565b60608182601f011015610f5257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b828284011015610fc357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b8183018451101561103557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015290519081900360640190fd5b60608215801561105457604051915060008252602082016040526110bc565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561108d578051835260209283019201611075565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b6110cd6119fa565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161115611105579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161061118457600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d5808301919091528251808303909101815260f5909101909152805191012090565b60008060008351606014611318576044845110156112cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c290611e75565b60405180910390fd5b600484019350838060200190518101906112e59190611bdf565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c29190611e62565b8380602001905181019061132c9190611d02565b9250925092509193909250565b60008060008060008060008060088b73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561138d57600080fd5b505afa1580156113a1573d6000803e3d6000fd5b505050506040513d60208110156113b757600080fd5b5051600290810b908c900b816113c957fe5b0560020b901d905060006101008c73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561141c57600080fd5b505afa158015611430573d6000803e3d6000fd5b505050506040513d602081101561144657600080fd5b5051600290810b908d900b8161145857fe5b0560020b8161146357fe5b079050600060088d73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156114b057600080fd5b505afa1580156114c4573d6000803e3d6000fd5b505050506040513d60208110156114da57600080fd5b5051600290810b908d900b816114ec57fe5b0560020b901d905060006101008e73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561153f57600080fd5b505afa158015611553573d6000803e3d6000fd5b505050506040513d602081101561156957600080fd5b5051600290810b908e900b8161157b57fe5b0560020b8161158657fe5b07905060008160ff166001901b8f73ffffffffffffffffffffffffffffffffffffffff16635339c296856040518263ffffffff1660e01b8152600401808260010b815260200191505060206040518083038186803b1580156115e757600080fd5b505afa1580156115fb573d6000803e3d6000fd5b505050506040513d602081101561161157600080fd5b5051161180156116a457508d73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561166257600080fd5b505afa158015611676573d6000803e3d6000fd5b505050506040513d602081101561168c57600080fd5b5051600290810b908d900b8161169e57fe5b0760020b155b80156116b557508b60020b8d60020b135b945060008360ff166001901b8f73ffffffffffffffffffffffffffffffffffffffff16635339c296876040518263ffffffff1660e01b8152600401808260010b815260200191505060206040518083038186803b15801561171557600080fd5b505afa158015611729573d6000803e3d6000fd5b505050506040513d602081101561173f57600080fd5b5051161180156117d257508d73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561179057600080fd5b505afa1580156117a4573d6000803e3d6000fd5b505050506040513d60208110156117ba57600080fd5b5051600290810b908e900b816117cc57fe5b0760020b155b80156117e357508b60020b8d60020b125b95508160010b8460010b128061180f57508160010b8460010b14801561180f57508060ff168360ff1611155b1561182557839950829750819850809650611832565b8199508097508398508296505b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff87161b9150505b8560010b8760010b13611969578560010b8760010b14156118a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff858103161c165b6000818c73ffffffffffffffffffffffffffffffffffffffff16635339c2968a6040518263ffffffff1660e01b8152600401808260010b815260200191505060206040518083038186803b1580156118fa57600080fd5b505afa15801561190e573d6000803e3d6000fd5b505050506040513d602081101561192457600080fd5b5051169050611932816119c1565b61ffff16989098019750506001909501947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61185e565b8115611976576001880397505b8215611983576001880397505b505050505050509392505050565b600061199d8383611142565b90503373ffffffffffffffffffffffffffffffffffffffff821614610b8557600080fd5b6000805b8215610b85577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8301909216916001016119c5565b604080516060810182526000808252602082018190529181019190915290565b600082601f830112611a2a578081fd5b8135611a3d611a3882611faf565b611f8b565b818152846020838601011115611a51578283fd5b816020850160208301379081016020019190915292915050565b8051600281900b8114610b1257600080fd5b600060a08284031215611a8e578081fd5b60405160a0810181811067ffffffffffffffff82111715611aab57fe5b6040529050808235611abc8161201f565b81526020830135611acc8161201f565b602082015260408381013590820152606083013562ffffff81168114611af157600080fd5b6060820152611b0260808401611b0e565b60808201525092915050565b8035610b128161201f565b805161ffff81168114610b1257600080fd5b60008060408385031215611b3d578182fd5b823567ffffffffffffffff811115611b53578283fd5b611b5f85828601611a1a565b95602094909401359450505050565b60008060408385031215611b80578182fd5b505080516020909101519092909150565b600080600060608486031215611ba5578081fd5b8335925060208401359150604084013567ffffffffffffffff811115611bc9578182fd5b611bd586828701611a1a565b9150509250925092565b600060208284031215611bf0578081fd5b815167ffffffffffffffff811115611c06578182fd5b8201601f81018413611c16578182fd5b8051611c24611a3882611faf565b818152856020838501011115611c38578384fd5b610ce5826020830160208601611fef565b600060a08284031215611c5a578081fd5b611c648383611a7d565b9392505050565b600080600080600080600060e0888a031215611c85578283fd5b8751611c908161201f565b9650611c9e60208901611a6b565b9550611cac60408901611b19565b9450611cba60608901611b19565b9350611cc860808901611b19565b925060a088015160ff81168114611cdd578283fd5b60c08901519092508015158114611cf2578182fd5b8091505092959891949750929550565b600080600060608486031215611d16578081fd5b835192506020840151611d288161201f565b9150611d3660408501611a6b565b90509250925092565b60008151808452611d57816020860160208601611fef565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116825260e89390931b7fffffff0000000000000000000000000000000000000000000000000000000000166014820152921b166017820152602b0190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a06080830152611e5760a0830184611d3f565b979650505050505050565b600060208252611c646020830184611d3f565b60208082526010908201527f556e6578706563746564206572726f7200000000000000000000000000000000604082015260600190565b600060808201868352602060808185015281875180845260a0860191508289019350845b81811015611f0257845173ffffffffffffffffffffffffffffffffffffffff1683529383019391830191600101611ed0565b505084810360408601528651808252908201925081870190845b81811015611f3e57825163ffffffff1685529383019391830191600101611f1c565b5050505060609290920192909252949350505050565b93845273ffffffffffffffffffffffffffffffffffffffff92909216602084015263ffffffff166040830152606082015260800190565b60405181810167ffffffffffffffff81118282101715611fa757fe5b604052919050565b600067ffffffffffffffff821115611fc357fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b8381101561200a578181015183820152602001611ff2565b83811115612019576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461204157600080fd5b5056fea164736f6c6343000706000a"; - static readonly abi: ({ - inputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - name?: undefined; - outputs?: undefined; - } | { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - } | { - inputs: { - components: { - internalType: string; - name: string; - type: string; - }[]; - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - })[]; - static createInterface(): QuoterV2Interface; - static connect(address: string, signerOrProvider: Signer | Provider): QuoterV2; -} diff --git a/dist2/types/types/v3/factories/Quoter__factory.d.ts b/dist2/types/types/v3/factories/Quoter__factory.d.ts deleted file mode 100644 index fbe0a91abc2..00000000000 --- a/dist2/types/types/v3/factories/Quoter__factory.d.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { Signer, ContractFactory, Overrides } from "ethers"; -import { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { Quoter, QuoterInterface } from "../Quoter"; -export declare class Quoter__factory extends ContractFactory { - constructor(signer?: Signer); - deploy(_factory: string, _WETH9: string, overrides?: Overrides & { - from?: string | Promise; - }): Promise; - getDeployTransaction(_factory: string, _WETH9: string, overrides?: Overrides & { - from?: string | Promise; - }): TransactionRequest; - attach(address: string): Quoter; - connect(signer: Signer): Quoter__factory; - static readonly bytecode = "0x60c060405234801561001057600080fd5b506040516112e53803806112e583398101604081905261002f91610069565b6001600160601b0319606092831b8116608052911b1660a05261009b565b80516001600160a01b038116811461006457600080fd5b919050565b6000806040838503121561007b578182fd5b6100848361004d565b91506100926020840161004d565b90509250929050565b60805160601c60a05160601c6112176100ce60003980610342525080610366528061058652806106d552506112176000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063c45a01551161005b578063c45a0155146100d3578063cdca1753146100db578063f7729d43146100ee578063fa461e33146101015761007d565b80632f80bb1d1461008257806330d07f21146100ab5780634aa4a4fc146100be575b600080fd5b610095610090366004610e9e565b610116565b6040516100a29190611148565b60405180910390f35b6100956100b9366004610e30565b61017b565b6100c6610340565b6040516100a29190611084565b6100c6610364565b6100956100e9366004610e9e565b610388565b6100956100fc366004610e30565b6103d6565b61011461010f366004610f04565b610555565b005b60005b600061012484610660565b9050600080600061013487610668565b92509250925061014882848389600061017b565b955083156101605761015987610699565b965061016c565b85945050505050610175565b50505050610119565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff808616878216109083166101a65760008490555b6101b18787876106ce565b73ffffffffffffffffffffffffffffffffffffffff1663128acb0830836101d78861070c565b60000373ffffffffffffffffffffffffffffffffffffffff8816156101fc5787610222565b8561021b5773fffd8963efd1fc6a506488495d951d5263988d25610222565b6401000276a45b8b8b8e6040516020016102379392919061101e565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016102669594939291906110a5565b6040805180830381600087803b15801561027f57600080fd5b505af19250505080156102cd575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526102ca91810190610ee1565b60015b610333573d8080156102fb576040519150601f19603f3d011682016040523d82523d6000602084013e610300565b606091505b5073ffffffffffffffffffffffffffffffffffffffff841661032157600080555b61032a8161073e565b92505050610337565b5050505b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60005b600061039684610660565b905060008060006103a687610668565b9250925092506103ba8383838960006103d6565b95508315610160576103cb87610699565b96505050505061038b565b600073ffffffffffffffffffffffffffffffffffffffff808616908716106103ff8787876106ce565b73ffffffffffffffffffffffffffffffffffffffff1663128acb0830836104258861070c565b73ffffffffffffffffffffffffffffffffffffffff881615610447578761046d565b856104665773fffd8963efd1fc6a506488495d951d5263988d2561046d565b6401000276a45b8c8b8d6040516020016104829392919061101e565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016104b19594939291906110a5565b6040805180830381600087803b1580156104ca57600080fd5b505af1925050508015610518575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261051591810190610ee1565b60015b610333573d808015610546576040519150601f19603f3d011682016040523d82523d6000602084013e61054b565b606091505b5061032a8161073e565b60008313806105645750600082135b61056d57600080fd5b600080600061057b84610668565b9250925092506105ad7f00000000000000000000000000000000000000000000000000000000000000008484846107ef565b5060008060008089136105f3578573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1610888a600003610628565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161089896000035b925092509250821561063f57604051818152602081fd5b6000541561065557600054811461065557600080fd5b604051828152602081fd5b516042111590565b600080806106768482610805565b9250610683846014610905565b9050610690846017610805565b91509193909250565b80516060906101759083906017907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9016109f5565b60006107047f00000000000000000000000000000000000000000000000000000000000000006106ff868686610bdc565b610c59565b949350505050565b60007f8000000000000000000000000000000000000000000000000000000000000000821061073a57600080fd5b5090565b600081516020146107db5760448251101561078e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078590611111565b60405180910390fd5b600482019150818060200190518101906107a89190610f52565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078591906110f7565b818060200190518101906101759190610fbc565b600061033785610800868686610bdc565b610d8f565b60008182601401101561087957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f416464726573735f6f766572666c6f770000000000000000000000000000604482015290519081900360640190fd5b81601401835110156108ec57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e64730000000000000000000000604482015290519081900360640190fd5b5001602001516c01000000000000000000000000900490565b60008182600301101561097957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b81600301835110156109ec57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e6473000000000000000000000000604482015290519081900360640190fd5b50016003015190565b60608182601f011015610a6957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b828284011015610ada57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b81830184511015610b4c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015290519081900360640190fd5b606082158015610b6b5760405191506000825260208201604052610bd3565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015610ba4578051835260209283019201610b8c565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b610be4610dbf565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161115610c1c579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1610610c9b57600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d5808301919091528251808303909101815260f5909101909152805191012090565b6000610d9b8383610c59565b90503373ffffffffffffffffffffffffffffffffffffffff82161461017557600080fd5b604080516060810182526000808252602082018190529181019190915290565b600082601f830112610def578081fd5b8135610e02610dfd82611175565b611151565b818152846020838601011115610e16578283fd5b816020850160208301379081016020019190915292915050565b600080600080600060a08688031215610e47578081fd5b8535610e52816111e5565b94506020860135610e62816111e5565b9350604086013562ffffff81168114610e79578182fd5b9250606086013591506080860135610e90816111e5565b809150509295509295909350565b60008060408385031215610eb0578182fd5b823567ffffffffffffffff811115610ec6578283fd5b610ed285828601610ddf565b95602094909401359450505050565b60008060408385031215610ef3578182fd5b505080516020909101519092909150565b600080600060608486031215610f18578283fd5b8335925060208401359150604084013567ffffffffffffffff811115610f3c578182fd5b610f4886828701610ddf565b9150509250925092565b600060208284031215610f63578081fd5b815167ffffffffffffffff811115610f79578182fd5b8201601f81018413610f89578182fd5b8051610f97610dfd82611175565b818152856020838501011115610fab578384fd5b6103378260208301602086016111b5565b600060208284031215610fcd578081fd5b5051919050565b60008151808452610fec8160208601602086016111b5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116825260e89390931b7fffffff0000000000000000000000000000000000000000000000000000000000166014820152921b166017820152602b0190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a060808301526110ec60a0830184610fd4565b979650505050505050565b60006020825261110a6020830184610fd4565b9392505050565b60208082526010908201527f556e6578706563746564206572726f7200000000000000000000000000000000604082015260600190565b90815260200190565b60405181810167ffffffffffffffff8111828210171561116d57fe5b604052919050565b600067ffffffffffffffff82111561118957fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b838110156111d05781810151838201526020016111b8565b838111156111df576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461120757600080fd5b5056fea164736f6c6343000706000a"; - static readonly abi: ({ - inputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - name?: undefined; - outputs?: undefined; - } | { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - })[]; - static createInterface(): QuoterInterface; - static connect(address: string, signerOrProvider: Signer | Provider): Quoter; -} diff --git a/dist2/types/types/v3/factories/SwapRouter02__factory.d.ts b/dist2/types/types/v3/factories/SwapRouter02__factory.d.ts deleted file mode 100644 index 98b82afa402..00000000000 --- a/dist2/types/types/v3/factories/SwapRouter02__factory.d.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { Signer, ContractFactory, Overrides } from "ethers"; -import { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { SwapRouter02, SwapRouter02Interface } from "../SwapRouter02"; -export declare class SwapRouter02__factory extends ContractFactory { - constructor(signer?: Signer); - deploy(_factoryV2: string, factoryV3: string, _positionManager: string, _WETH9: string, overrides?: Overrides & { - from?: string | Promise; - }): Promise; - getDeployTransaction(_factoryV2: string, factoryV3: string, _positionManager: string, _WETH9: string, overrides?: Overrides & { - from?: string | Promise; - }): TransactionRequest; - attach(address: string): SwapRouter02; - connect(signer: Signer): SwapRouter02__factory; - static readonly bytecode = "0x6101006040526000196000553480156200001857600080fd5b5060405162006135380380620061358339810160408190526200003b9162000087565b6001600160601b0319606094851b811660805291841b821660a05291831b811660c052911b1660e052620000e3565b80516001600160a01b03811681146200008257600080fd5b919050565b600080600080608085870312156200009d578384fd5b620000a8856200006a565b9350620000b8602086016200006a565b9250620000c8604086016200006a565b9150620000d8606086016200006a565b905092959194509250565b60805160601c60a05160601c60c05160601c60e05160601c615fb162000184600039806102c15280610b3c52806112ad52806113d7528061147e52806116af52806117d95280612d8f5280612def5280612e70525080611e4c52806124df5280613cdb52508061166f5280611b1a5280611e9c52806132a6525080610c625280610d365280610fe2528061164b5280612fc252806131855250615fb16000f3fe6080604052600436106102a45760003560e01c80639b2c0a371161016e578063dee00f35116100cb578063f100b2051161007f578063f2d5d56b11610064578063f2d5d56b1461066e578063f3995c6714610681578063fa461e33146106945761034f565b8063f100b2051461063b578063f25801a71461064e5761034f565b8063e0e189a0116100b0578063e0e189a0146105f5578063e90a182f14610608578063efdeed8e1461061b5761034f565b8063dee00f35146105b5578063df2ab5bb146105e25761034f565b8063b858183f11610122578063c45a015511610107578063c45a01551461057a578063cab372ce1461058f578063d4ef38de146105a25761034f565b8063b858183f14610554578063c2e3140a146105675761034f565b8063ab3fdd5011610153578063ab3fdd501461051b578063ac9650d81461052e578063b3a2af13146105415761034f565b80639b2c0a37146104f5578063a4a78f0c146105085761034f565b8063472b43f31161021c578063571ac8b0116101d0578063639d71a9116101b5578063639d71a9146104b857806368e0d4e1146104cb578063791b98bc146104e05761034f565b8063571ac8b0146104925780635ae401dc146104a55761034f565b80634961699711610201578063496169971461044a5780634aa4a4fc1461045d5780635023b4df1461047f5761034f565b8063472b43f31461042457806349404b7c146104375761034f565b80631c58db4f116102735780633068c554116102585780633068c554146103eb57806342712a67146103fe5780634659a494146104115761034f565b80631c58db4f146103b85780631f0464d1146103cb5761034f565b806304e45aaf1461035457806309b813461461037d57806311ed56c91461039057806312210e8a146103b05761034f565b3661034f573373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461034d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742057455448390000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b600080fd5b610367610362366004615543565b6106b4565b6040516103749190615dfd565b60405180910390f35b61036761038b3660046155de565b61083c565b6103a361039e366004615638565b61091c565b6040516103749190615b7a565b61034d610b28565b61034d6103c63660046157bb565b610b3a565b6103de6103d93660046152a7565b610bbe565b6040516103749190615afc565b61034d6103f93660046150d8565b610c48565b61036761040c366004615885565b610c5b565b61034d61041f366004615121565b610e35565b610367610432366004615885565b610ef5565b61034d6104453660046157eb565b6112a9565b61034d6104583660046157bb565b61146f565b34801561046957600080fd5b5061047261147c565b6040516103749190615a3c565b61036761048d366004615616565b6114a0565b61034d6104a0366004614feb565b611589565b6103de6104b33660046152a7565b6115bc565b61034d6104c6366004614feb565b611635565b3480156104d757600080fd5b50610472611649565b3480156104ec57600080fd5b5061047261166d565b61034d61050336600461581a565b611691565b61034d610516366004615121565b6118a7565b61034d610529366004614feb565b61197c565b6103de61053c36600461517c565b6119ba565b6103a361054f3660046152f1565b611b14565b61036761056236600461549d565b611bd2565b61034d610575366004615121565b611d95565b34801561058657600080fd5b50610472611e4a565b61034d61059d366004614feb565b611990565b61034d6105b0366004615858565b611e6e565b3480156105c157600080fd5b506105d56105d036600461500e565b611e7a565b6040516103749190615b8d565b61034d6105f0366004615039565b612027565b61034d61060336600461507a565b61213e565b61034d61061636600461500e565b6122a4565b34801561062757600080fd5b5061034d6106363660046151bc565b6122b3565b6103a3610649366004615627565b612305565b34801561065a57600080fd5b5061034d610669366004615324565b6123a5565b61034d61067c36600461500e565b6123f6565b61034d61068f366004615121565b612402565b3480156106a057600080fd5b5061034d6106af3660046153b8565b61249a565b600080600083608001511415610771575081516040517f70a0823100000000000000000000000000000000000000000000000000000000815260019173ffffffffffffffffffffffffffffffffffffffff16906370a082319061071b903090600401615a3c565b60206040518083038186803b15801561073357600080fd5b505afa158015610747573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076b91906157d3565b60808401525b6107ed836080015184606001518560c001516040518060400160405280886000015189604001518a602001516040516020016107af939291906159aa565b6040516020818303038152906040528152602001866107ce57336107d0565b305b73ffffffffffffffffffffffffffffffffffffffff1690526125de565b91508260a00151821015610836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c7d565b60405180910390fd5b50919050565b60006108b0604083018035906108559060208601614feb565b604080518082019091526000908061086d8880615e41565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252503360209091015261278f565b505060005460608201358111156108f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c0f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600055919050565b604080516101608101909152606090610b20907f8831645600000000000000000000000000000000000000000000000000000000908061095f6020870187614feb565b73ffffffffffffffffffffffffffffffffffffffff16815260200185602001602081019061098d9190614feb565b73ffffffffffffffffffffffffffffffffffffffff1681526020016109b860608701604088016157a1565b62ffffff1681526020016109d26080870160608801615379565b60020b81526020016109ea60a0870160808801615379565b60020b8152602090810190610a0a90610a0590880188614feb565b612976565b8152602001610a25866020016020810190610a059190614feb565b815260a0860135602082015260c08601356040820152606001610a4f610100870160e08801614feb565b73ffffffffffffffffffffffffffffffffffffffff1681526020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff815250604051602401610a9e9190615cf8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611b14565b90505b919050565b4715610b3857610b383347612a1b565b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610ba257600080fd5b505af1158015610bb6573d6000803e3d6000fd5b505050505050565b60608380600143034014610c3357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f426c6f636b686173680000000000000000000000000000000000000000000000604482015290519081900360640190fd5b610c3d84846119ba565b91505b509392505050565b610c55848433858561213e565b50505050565b6000610cbb7f000000000000000000000000000000000000000000000000000000000000000087868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612b6992505050565b600081518110610cc757fe5b6020026020010151905084811115610d0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c0f565b610da484846000818110610d1b57fe5b9050602002016020810190610d309190614feb565b33610d9e7f000000000000000000000000000000000000000000000000000000000000000088886000818110610d6257fe5b9050602002016020810190610d779190614feb565b89896001818110610d8457fe5b9050602002016020810190610d999190614feb565b612ca2565b84612d8d565b73ffffffffffffffffffffffffffffffffffffffff821660011415610dcb57339150610dee565b73ffffffffffffffffffffffffffffffffffffffff821660021415610dee573091505b610e2c848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250869250612f6b915050565b95945050505050565b604080517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e48101839052905173ffffffffffffffffffffffffffffffffffffffff881691638fcbaf0c9161010480830192600092919082900301818387803b158015610ed557600080fd5b505af1158015610ee9573d6000803e3d6000fd5b50505050505050505050565b60008086610fab575060018484600081610f0b57fe5b9050602002016020810190610f209190614feb565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f589190615a3c565b60206040518083038186803b158015610f7057600080fd5b505afa158015610f84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa891906157d3565b96505b61103685856000818110610fbb57fe5b9050602002016020810190610fd09190614feb565b82610fdb5733610fdd565b305b6110307f00000000000000000000000000000000000000000000000000000000000000008989600081811061100e57fe5b90506020020160208101906110239190614feb565b8a8a6001818110610d8457fe5b8a612d8d565b73ffffffffffffffffffffffffffffffffffffffff83166001141561105d57339250611080565b73ffffffffffffffffffffffffffffffffffffffff831660021415611080573092505b600085857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181106110b057fe5b90506020020160208101906110c59190614feb565b73ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b81526004016110fd9190615a3c565b60206040518083038186803b15801561111557600080fd5b505afa158015611129573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114d91906157d3565b905061118d868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250889250612f6b915050565b6112628187877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181106111bf57fe5b90506020020160208101906111d49190614feb565b73ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b815260040161120c9190615a3c565b60206040518083038186803b15801561122457600080fd5b505afa158015611238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125c91906157d3565b90613270565b92508683101561129e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c7d565b505095945050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561133257600080fd5b505afa158015611346573d6000803e3d6000fd5b505050506040513d602081101561135c57600080fd5b50519050828110156113cf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e742057455448390000000000000000000000000000604482015290519081900360640190fd5b801561146a577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561144857600080fd5b505af115801561145c573d6000803e3d6000fd5b5050505061146a8282612a1b565b505050565b61147981336112a9565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000611549608083018035906114b99060608601614feb565b6114c960e0860160c08701614feb565b60405180604001604052808760200160208101906114e79190614feb565b6114f760608a0160408b016157a1565b61150460208b018b614feb565b604051602001611516939291906159aa565b60405160208183030381529060405281526020013373ffffffffffffffffffffffffffffffffffffffff1681525061278f565b90508160a001358111156108f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c0f565b6115b3817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613280565b61147957600080fd5b606083806115c86133cc565b1115610c3357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b611640816000613280565b61158957600080fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000821180156116a2575060648211155b6116ab57600080fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561173457600080fd5b505afa158015611748573d6000803e3d6000fd5b505050506040513d602081101561175e57600080fd5b50519050848110156117d157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e742057455448390000000000000000000000000000604482015290519081900360640190fd5b80156118a0577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561184a57600080fd5b505af115801561185e573d6000803e3d6000fd5b50505050600061271061187a85846133d090919063ffffffff16565b8161188157fe5b0490508015611894576118948382612a1b565b610bb685828403612a1b565b5050505050565b604080517fdd62ed3e00000000000000000000000000000000000000000000000000000000815233600482015230602482015290517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b15801561193c57600080fd5b505afa158015611950573d6000803e3d6000fd5b505050506040513d602081101561196657600080fd5b50511015610bb657610bb6868686868686610e35565b611987816000613280565b61199057600080fd5b6115b3817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe613280565b60608167ffffffffffffffff811180156119d357600080fd5b50604051908082528060200260200182016040528015611a0757816020015b60608152602001906001900390816119f25790505b50905060005b82811015611b0d5760008030868685818110611a2557fe5b9050602002810190611a379190615e41565b604051611a45929190615a10565b600060405180830381855af49150503d8060008114611a80576040519150601f19603f3d011682016040523d82523d6000602084013e611a85565b606091505b509150915081611aeb57604481511015611a9e57600080fd5b60048101905080806020019051810190611ab89190615433565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d9190615b7a565b80848481518110611af857fe5b60209081029190910101525050600101611a0d565b5092915050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1683604051611b5d9190615a20565b6000604051808303816000865af19150503d8060008114611b9a576040519150601f19603f3d011682016040523d82523d6000602084013e611b9f565b606091505b50925090508061083657604482511015611bb857600080fd5b60048201915081806020019051810190611ab89190615433565b600080600083604001511415611ca357600190506000611bf584600001516133f4565b50506040517f70a0823100000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff8216906370a0823190611c4c903090600401615a3c565b60206040518083038186803b158015611c6457600080fd5b505afa158015611c78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c9c91906157d3565b6040850152505b600081611cb05733611cb2565b305b90505b6000611cc48560000151613425565b9050611d1d856040015182611cdd578660200151611cdf565b305b60006040518060400160405280611cf98b6000015161342d565b81526020018773ffffffffffffffffffffffffffffffffffffffff168152506125de565b60408601528015611d3d578451309250611d369061343c565b8552611d4a565b8460400151935050611d50565b50611cb5565b8360600151831015611d8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c7d565b5050919050565b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051869173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b158015611e0a57600080fd5b505afa158015611e1e573d6000803e3d6000fd5b505050506040513d6020811015611e3457600080fd5b50511015610bb657610bb6868686868686612402565b7f000000000000000000000000000000000000000000000000000000000000000081565b61146a83338484611691565b6000818373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e307f00000000000000000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b8152600401611ed8929190615a5d565b60206040518083038186803b158015611ef057600080fd5b505afa158015611f04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2891906157d3565b10611f3557506000612021565b611f5f837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613280565b15611f6c57506001612021565b611f96837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe613280565b15611fa357506002612021565b611fae836000613280565b611fb757600080fd5b611fe1837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613280565b15611fee57506003612021565b612018837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe613280565b1561034f575060045b92915050565b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561209057600080fd5b505afa1580156120a4573d6000803e3d6000fd5b505050506040513d60208110156120ba57600080fd5b505190508281101561212d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b8015610c5557610c55848383613471565b60008211801561214f575060648211155b61215857600080fd5b60008573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156121c157600080fd5b505afa1580156121d5573d6000803e3d6000fd5b505050506040513d60208110156121eb57600080fd5b505190508481101561225e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b8015610bb657600061271061227383866133d0565b8161227a57fe5b049050801561228e5761228e878483613471565b61229b8786838503613471565b50505050505050565b6122af828233612027565b5050565b6000806122c1868685613646565b915091508362ffffff1681830312610bb6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c46565b6060610b2063219f5d1760e01b6040518060c001604052808560400135815260200161233d866000016020810190610a059190614feb565b8152602001612358866020016020810190610a059190614feb565b815260200185606001358152602001856080013581526020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff815250604051602401610a9e9190615cb4565b6000806123b28584613859565b915091508362ffffff16818303126118a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c46565b6122af82333084613ae1565b604080517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c48101839052905173ffffffffffffffffffffffffffffffffffffffff88169163d505accf9160e480830192600092919082900301818387803b158015610ed557600080fd5b60008413806124a95750600083135b6124b257600080fd5b60006124c08284018461564a565b905060008060006124d484600001516133f4565b9250925092506125067f0000000000000000000000000000000000000000000000000000000000000000848484613cbe565b5060008060008a13612547578473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161089612578565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16108a5b915091508115612597576125928587602001513384612d8d565b610ee9565b85516125a290613425565b156125c75785516125b29061343c565b86526125c1813360008961278f565b50610ee9565b80600081905550610ee98487602001513384612d8d565b600073ffffffffffffffffffffffffffffffffffffffff8416600114156126075733935061262a565b73ffffffffffffffffffffffffffffffffffffffff84166002141561262a573093505b600080600061263c85600001516133f4565b9194509250905073ffffffffffffffffffffffffffffffffffffffff8083169084161060008061266d868686613cd4565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088b856126938f613d12565b73ffffffffffffffffffffffffffffffffffffffff8e16156126b5578d6126db565b876126d45773fffd8963efd1fc6a506488495d951d5263988d256126db565b6401000276a45b8d6040516020016126ec9190615da6565b6040516020818303038152906040526040518663ffffffff1660e01b815260040161271b959493929190615a84565b6040805180830381600087803b15801561273457600080fd5b505af1158015612748573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061276c9190615395565b915091508261277b578161277d565b805b6000039b9a5050505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8416600114156127b8573393506127db565b73ffffffffffffffffffffffffffffffffffffffff8416600214156127db573093505b60008060006127ed85600001516133f4565b9194509250905073ffffffffffffffffffffffffffffffffffffffff8084169083161060008061281e858786613cd4565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088b856128448f613d12565b60000373ffffffffffffffffffffffffffffffffffffffff8e1615612869578d61288f565b876128885773fffd8963efd1fc6a506488495d951d5263988d2561288f565b6401000276a45b8d6040516020016128a09190615da6565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016128cf959493929190615a84565b6040805180830381600087803b1580156128e857600080fd5b505af11580156128fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129209190615395565b9150915060008361293557818360000361293b565b82826000035b909850905073ffffffffffffffffffffffffffffffffffffffff8a16612967578b811461296757600080fd5b50505050505050949350505050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8316906370a08231906129cb903090600401615a3c565b60206040518083038186803b1580156129e357600080fd5b505afa1580156129f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2091906157d3565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b60208310612a9257805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612a55565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612af4576040519150601f19603f3d011682016040523d82523d6000602084013e612af9565b606091505b505090508061146a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6060600282511015612b7a57600080fd5b815167ffffffffffffffff81118015612b9257600080fd5b50604051908082528060200260200182016040528015612bbc578160200160208202803683370190505b5090508281600183510381518110612bd057fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b8015610c4057600080612c3d87866001860381518110612c1c57fe5b6020026020010151878681518110612c3057fe5b6020026020010151613d44565b91509150612c5f848481518110612c5057fe5b60200260200101518383613e2c565b846001850381518110612c6e57fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01612c00565b6000806000612cb18585613f02565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612de85750804710155b15612f31577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e5557600080fd5b505af1158015612e69573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612eff57600080fd5b505af1158015612f13573d6000803e3d6000fd5b505050506040513d6020811015612f2957600080fd5b50610c559050565b73ffffffffffffffffffffffffffffffffffffffff8316301415612f5f57612f5a848383613471565b610c55565b610c5584848484613ae1565b60005b600183510381101561146a57600080848381518110612f8957fe5b6020026020010151858460010181518110612fa057fe5b6020026020010151915091506000612fb88383613f02565b5090506000612fe87f00000000000000000000000000000000000000000000000000000000000000008585612ca2565b90506000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561303657600080fd5b505afa15801561304a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061306e91906156da565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691506000808773ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16146130d05782846130d3565b83835b91509150613114828b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b815260040161120c9190615a3c565b9550613121868383613fa7565b9450505050506000808573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161461316557826000613169565b6000835b91509150600060028c51038a10613180578a6131c1565b6131c17f0000000000000000000000000000000000000000000000000000000000000000898e8d600201815181106131b457fe5b6020026020010151612ca2565b604080516000815260208101918290527f022c0d9f0000000000000000000000000000000000000000000000000000000090915290915073ffffffffffffffffffffffffffffffffffffffff87169063022c0d9f906132299086908690869060248101615e06565b600060405180830381600087803b15801561324357600080fd5b505af1158015613257573d6000803e3d6000fd5b50506001909b019a50612f6e9950505050505050505050565b8082038281111561202157600080fd5b60008060008473ffffffffffffffffffffffffffffffffffffffff1663095ea7b360e01b7f0000000000000000000000000000000000000000000000000000000000000000866040516024016132d7929190615ad6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516133609190615a20565b6000604051808303816000865af19150503d806000811461339d576040519150601f19603f3d011682016040523d82523d6000602084013e6133a2565b606091505b5091509150818015610e2c575080511580610e2c575080806020019051810190610e2c919061528d565b4290565b60008215806133eb575050818102818382816133e857fe5b04145b61202157600080fd5b60008080613402848261407d565b925061340f84601461417d565b905061341c84601761407d565b91509193909250565b516042111590565b6060610b20826000602b61426d565b8051606090610b209083906017907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe90161426d565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b6020831061354657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613509565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146135a8576040519150601f19603f3d011682016040523d82523d6000602084013e6135ad565b606091505b50915091508180156135db5750805115806135db57508080602001905160208110156135d857600080fd5b50515b6118a057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600080835185511461365757600080fd5b6000855167ffffffffffffffff8111801561367157600080fd5b506040519080825280602002602001820160405280156136ab57816020015b613698614e34565b8152602001906001900390816136905790505b5090506000865167ffffffffffffffff811180156136c857600080fd5b5060405190808252806020026020018201604052801561370257816020015b6136ef614e34565b8152602001906001900390816136e75790505b50905060005b8751811015613832576000806137318a848151811061372357fe5b602002602001015189613859565b9150915061373e82614454565b85848151811061374a57fe5b60200260200101516000019060020b908160020b8152505061376b81614454565b84848151811061377757fe5b60200260200101516000019060020b908160020b8152505088838151811061379b57fe5b60200260200101518584815181106137af57fe5b6020026020010151602001906fffffffffffffffffffffffffffffffff1690816fffffffffffffffffffffffffffffffff16815250508883815181106137f157fe5b602002602001015184848151811061380557fe5b6020908102919091018101516fffffffffffffffffffffffffffffffff9092169101525050600101613708565b5061383c82614465565b60020b935061384a81614465565b60020b92505050935093915050565b6000806000806138688661454d565b90506000805b82811015613a865760008060006138848b6133f4565b9250925092506000613897848484613cd4565b905060008063ffffffff8d166138c0576138b083614578565b600291820b9350900b9050613962565b6138ca838e614810565b8160020b915050809250508273ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561391b57600080fd5b505afa15801561392f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139539190615715565b50505060029290920b93505050505b600189038714156139a3578473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161099506139b2565b6139ac8e61343c565b9d508597505b6000871580613a5357508673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1610613a23578673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1610613a53565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16105b90508015613a68579b82019b9a81019a613a73565b828d039c50818c039b505b50506001909501945061386e9350505050565b5082613ad7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850294507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff840293505b5050509250929050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000178152925182516000948594938a169392918291908083835b60208310613bbe57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613b81565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613c20576040519150601f19603f3d011682016040523d82523d6000602084013e613c25565b606091505b5091509150818015613c53575080511580613c535750808060200190516020811015613c5057600080fd5b50515b610bb657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354460000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000610e2c85613ccf868686614c41565b614cbe565b6000613d0a7f0000000000000000000000000000000000000000000000000000000000000000613d05868686614c41565b614cee565b949350505050565b60007f80000000000000000000000000000000000000000000000000000000000000008210613d4057600080fd5b5090565b6000806000613d538585613f02565b509050600080613d64888888612ca2565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613da957600080fd5b505afa158015613dbd573d6000803e3d6000fd5b505050506040513d6060811015613dd357600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff87811690841614613e1a578082613e1d565b81815b90999098509650505050505050565b6000808411613e9c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f494e53554646494349454e545f4f55545055545f414d4f554e54000000000000604482015290519081900360640190fd5b600083118015613eac5750600082115b613eb557600080fd5b6000613ecd6103e8613ec786886133d0565b906133d0565b90506000613ee16103e5613ec78689613270565b9050613ef86001828481613ef157fe5b0490614e24565b9695505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613f3e57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610613f78578284613f7b565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216613fa057600080fd5b9250929050565b600080841161401757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f494e53554646494349454e545f494e5055545f414d4f554e5400000000000000604482015290519081900360640190fd5b6000831180156140275750600082115b61403057600080fd5b600061403e856103e56133d0565b9050600061404c82856133d0565b9050600061406683614060886103e86133d0565b90614e24565b905080828161407157fe5b04979650505050505050565b6000818260140110156140f157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f416464726573735f6f766572666c6f770000000000000000000000000000604482015290519081900360640190fd5b816014018351101561416457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e64730000000000000000000000604482015290519081900360640190fd5b5001602001516c01000000000000000000000000900490565b6000818260030110156141f157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b816003018351101561426457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e6473000000000000000000000000604482015290519081900360640190fd5b50016003015190565b60608182601f0110156142e157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b82828401101561435257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b818301845110156143c457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015290519081900360640190fd5b6060821580156143e3576040519150600082526020820160405261444b565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561441c578051835260209283019201614404565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b80600281900b8114610b2357600080fd5b6000806000805b84518110156144fa5784818151811061448157fe5b6020026020010151602001516fffffffffffffffffffffffffffffffff168582815181106144ab57fe5b60200260200101516000015160020b02830192508481815181106144cb57fe5b6020026020010151602001516fffffffffffffffffffffffffffffffff1682019150808060010191505061446c565b5080828161450457fe5b05925060008212801561451f575080828161451b57fe5b0715155b15611d8e5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01919050565b5160177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec9091010490565b6000806000808473ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b1580156145c457600080fd5b505afa1580156145d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145fc9190615715565b50939750919550935050600161ffff84161191506146489050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615bd8565b6000808673ffffffffffffffffffffffffffffffffffffffff1663252c09d7856040518263ffffffff1660e01b81526004016146849190615dee565b60806040518083038186803b15801561469c57600080fd5b505afa1580156146b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146d491906158e0565b5050915091506146e26133cc565b63ffffffff168263ffffffff16146146fc57849550614807565b60008361ffff1660018561ffff168761ffff1601038161471857fe5b06905060008060008a73ffffffffffffffffffffffffffffffffffffffff1663252c09d7856040518263ffffffff1660e01b81526004016147599190615dfd565b60806040518083038186803b15801561477157600080fd5b505afa158015614785573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147a991906158e0565b93505092509250806147e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615ba1565b82860363ffffffff811683870360060b816147fe57fe5b059a5050505050505b50505050915091565b60008063ffffffff831661488557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f4250000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60408051600280825260608201835260009260208301908036833701905050905083816000815181106148b457fe5b602002602001019063ffffffff16908163ffffffff16815250506000816001815181106148dd57fe5b63ffffffff9092166020928302919091018201526040517f883bdbfd00000000000000000000000000000000000000000000000000000000815260048101828152835160248301528351600093849373ffffffffffffffffffffffffffffffffffffffff8b169363883bdbfd9388939192839260449091019185820191028083838b5b83811015614978578181015183820152602001614960565b505050509050019250505060006040518083038186803b15801561499b57600080fd5b505afa1580156149af573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160409081528110156149f657600080fd5b8101908080516040519392919084640100000000821115614a1657600080fd5b908301906020820185811115614a2b57600080fd5b8251866020820283011164010000000082111715614a4857600080fd5b82525081516020918201928201910280838360005b83811015614a75578181015183820152602001614a5d565b5050505090500160405260200180516040519392919084640100000000821115614a9e57600080fd5b908301906020820185811115614ab357600080fd5b8251866020820283011164010000000082111715614ad057600080fd5b82525081516020918201928201910280838360005b83811015614afd578181015183820152602001614ae5565b5050505090500160405250505091509150600082600081518110614b1d57fe5b602002602001015183600181518110614b3257fe5b6020026020010151039050600082600081518110614b4c57fe5b602002602001015183600181518110614b6157fe5b60200260200101510390508763ffffffff168260060b81614b7e57fe5b05965060008260060b128015614ba857508763ffffffff168260060b81614ba157fe5b0760060b15155b15614bd3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909601955b63ffffffff881673ffffffffffffffffffffffffffffffffffffffff0277ffffffffffffffffffffffffffffffffffffffff00000000602083901b1677ffffffffffffffffffffffffffffffffffffffffffffffff821681614c3157fe5b0496505050505050509250929050565b614c49614e4b565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161115614c81579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b6000614cca8383614cee565b90503373ffffffffffffffffffffffffffffffffffffffff82161461202157600080fd5b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1610614d3057600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d5808301919091528251808303909101815260f5909101909152805191012090565b8082018281101561202157600080fd5b604080518082019091526000808252602082015290565b604080516060810182526000808252602082018190529181019190915290565b8035610b2381615f52565b60008083601f840112614e87578182fd5b50813567ffffffffffffffff811115614e9e578182fd5b6020830191508360208083028501011115613fa057600080fd5b600082601f830112614ec8578081fd5b81356020614edd614ed883615ec8565b615ea4565b8281528181019085830183850287018401881015614ef9578586fd5b855b85811015614f345781356fffffffffffffffffffffffffffffffff81168114614f22578788fd5b84529284019290840190600101614efb565b5090979650505050505050565b80518015158114610b2357600080fd5b600082601f830112614f61578081fd5b8135614f6f614ed882615ee6565b818152846020838601011115614f83578283fd5b816020850160208301379081016020019190915292915050565b80516dffffffffffffffffffffffffffff81168114610b2357600080fd5b805161ffff81168114610b2357600080fd5b803562ffffff81168114610b2357600080fd5b8035610b2381615f83565b600060208284031215614ffc578081fd5b813561500781615f52565b9392505050565b60008060408385031215615020578081fd5b823561502b81615f52565b946020939093013593505050565b60008060006060848603121561504d578081fd5b833561505881615f52565b925060208401359150604084013561506f81615f52565b809150509250925092565b600080600080600060a08688031215615091578283fd5b853561509c81615f52565b94506020860135935060408601356150b381615f52565b92506060860135915060808601356150ca81615f52565b809150509295509295909350565b600080600080608085870312156150ed578182fd5b84356150f881615f52565b93506020850135925060408501359150606085013561511681615f52565b939692955090935050565b60008060008060008060c08789031215615139578384fd5b863561514481615f52565b95506020870135945060408701359350606087013561516281615f95565b9598949750929560808101359460a0909101359350915050565b6000806020838503121561518e578182fd5b823567ffffffffffffffff8111156151a4578283fd5b6151b085828601614e76565b90969095509350505050565b600080600080608085870312156151d1578182fd5b843567ffffffffffffffff808211156151e8578384fd5b818701915087601f8301126151fb578384fd5b8135602061520b614ed883615ec8565b82815281810190858301885b858110156152405761522e8e8684358b0101614f51565b84529284019290840190600101615217565b50909950505088013592505080821115615258578384fd5b5061526587828801614eb8565b93505061527460408601614fcd565b915061528260608601614fe0565b905092959194509250565b60006020828403121561529e578081fd5b61500782614f41565b6000806000604084860312156152bb578081fd5b83359250602084013567ffffffffffffffff8111156152d8578182fd5b6152e486828701614e76565b9497909650939450505050565b600060208284031215615302578081fd5b813567ffffffffffffffff811115615318578182fd5b613d0a84828501614f51565b600080600060608486031215615338578081fd5b833567ffffffffffffffff81111561534e578182fd5b61535a86828701614f51565b93505061536960208501614fcd565b9150604084013561506f81615f83565b60006020828403121561538a578081fd5b813561500781615f74565b600080604083850312156153a7578182fd5b505080516020909101519092909150565b600080600080606085870312156153cd578182fd5b8435935060208501359250604085013567ffffffffffffffff808211156153f2578384fd5b818701915087601f830112615405578384fd5b813581811115615413578485fd5b886020828501011115615424578485fd5b95989497505060200194505050565b600060208284031215615444578081fd5b815167ffffffffffffffff81111561545a578182fd5b8201601f8101841361546a578182fd5b8051615478614ed882615ee6565b81815285602083850101111561548c578384fd5b610e2c826020830160208601615f26565b6000602082840312156154ae578081fd5b813567ffffffffffffffff808211156154c5578283fd5b90830190608082860312156154d8578283fd5b6040516080810181811083821117156154ed57fe5b6040528235828111156154fe578485fd5b61550a87828601614f51565b8252506020830135915061551d82615f52565b816020820152604083013560408201526060830135606082015280935050505092915050565b600060e08284031215615554578081fd5b60405160e0810181811067ffffffffffffffff8211171561557157fe5b60405261557d83614e6b565b815261558b60208401614e6b565b602082015261559c60408401614fcd565b60408201526155ad60608401614e6b565b60608201526080830135608082015260a083013560a08201526155d260c08401614e6b565b60c08201529392505050565b6000602082840312156155ef578081fd5b813567ffffffffffffffff811115615605578182fd5b820160808185031215615007578182fd5b600060e08284031215610836578081fd5b600060a08284031215610836578081fd5b60006101008284031215610836578081fd5b60006020828403121561565b578081fd5b813567ffffffffffffffff80821115615672578283fd5b9083019060408286031215615685578283fd5b60405160408101818110838211171561569a57fe5b6040528235828111156156ab578485fd5b6156b787828601614f51565b825250602083013592506156ca83615f52565b6020810192909252509392505050565b6000806000606084860312156156ee578081fd5b6156f784614f9d565b925061570560208501614f9d565b9150604084015161506f81615f83565b600080600080600080600060e0888a03121561572f578485fd5b875161573a81615f52565b602089015190975061574b81615f74565b955061575960408901614fbb565b945061576760608901614fbb565b935061577560808901614fbb565b925060a088015161578581615f95565b915061579360c08901614f41565b905092959891949750929550565b6000602082840312156157b2578081fd5b61500782614fcd565b6000602082840312156157cc578081fd5b5035919050565b6000602082840312156157e4578081fd5b5051919050565b600080604083850312156157fd578182fd5b82359150602083013561580f81615f52565b809150509250929050565b6000806000806080858703121561582f578182fd5b84359350602085013561584181615f52565b925060408501359150606085013561511681615f52565b60008060006060848603121561586c578081fd5b8335925060208401359150604084013561506f81615f52565b60008060008060006080868803121561589c578283fd5b8535945060208601359350604086013567ffffffffffffffff8111156158c0578384fd5b6158cc88828901614e76565b90945092505060608601356150ca81615f52565b600080600080608085870312156158f5578182fd5b845161590081615f83565b8094505060208501518060060b8114615917578283fd5b604086015190935061592881615f52565b915061528260608601614f41565b73ffffffffffffffffffffffffffffffffffffffff169052565b60008151808452615968816020860160208601615f26565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60020b9052565b62ffffff169052565b606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116825260e89390931b7fffffff0000000000000000000000000000000000000000000000000000000000166014820152921b166017820152602b0190565b6000828483379101908152919050565b60008251615a32818460208701615f26565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a06080830152615acb60a0830184615950565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015615b6d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452615b5b858351615950565b94509285019290850190600101615b21565b5092979650505050505050565b6000602082526150076020830184615950565b6020810160058310615b9b57fe5b91905290565b60208082526003908201527f4f4e490000000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526003908201527f4e454f0000000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526012908201527f546f6f206d756368207265717565737465640000000000000000000000000000604082015260600190565b60208082526002908201527f5444000000000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526013908201527f546f6f206c6974746c6520726563656976656400000000000000000000000000604082015260600190565b600060c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b600061016082019050615d0c828451615936565b6020830151615d1e6020840182615936565b506040830151615d3160408401826159a1565b506060830151615d44606084018261599a565b506080830151615d57608084018261599a565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151615d9582850182615936565b505061014092830151919092015290565b600060208252825160406020840152615dc26060840182615950565b905073ffffffffffffffffffffffffffffffffffffffff60208501511660408401528091505092915050565b61ffff91909116815260200190565b90815260200190565b600085825284602083015273ffffffffffffffffffffffffffffffffffffffff8416604083015260806060830152613ef86080830184615950565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615e75578283fd5b83018035915067ffffffffffffffff821115615e8f578283fd5b602001915036819003821315613fa057600080fd5b60405181810167ffffffffffffffff81118282101715615ec057fe5b604052919050565b600067ffffffffffffffff821115615edc57fe5b5060209081020190565b600067ffffffffffffffff821115615efa57fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b83811015615f41578181015183820152602001615f29565b83811115610c555750506000910152565b73ffffffffffffffffffffffffffffffffffffffff8116811461147957600080fd5b8060020b811461147957600080fd5b63ffffffff8116811461147957600080fd5b60ff8116811461147957600080fdfea164736f6c6343000706000a"; - static readonly abi: ({ - inputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - name?: undefined; - outputs?: undefined; - } | { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - } | { - inputs: { - components: { - internalType: string; - name: string; - type: string; - }[]; - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - } | { - stateMutability: string; - type: string; - inputs?: undefined; - name?: undefined; - outputs?: undefined; - })[]; - static createInterface(): SwapRouter02Interface; - static connect(address: string, signerOrProvider: Signer | Provider): SwapRouter02; -} diff --git a/dist2/types/types/v3/factories/SwapRouter__factory.d.ts b/dist2/types/types/v3/factories/SwapRouter__factory.d.ts deleted file mode 100644 index a8e7a00c2c1..00000000000 --- a/dist2/types/types/v3/factories/SwapRouter__factory.d.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { Signer, ContractFactory, Overrides } from "ethers"; -import { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { SwapRouter, SwapRouterInterface } from "../SwapRouter"; -export declare class SwapRouter__factory extends ContractFactory { - constructor(signer?: Signer); - deploy(_factory: string, _WETH9: string, overrides?: Overrides & { - from?: string | Promise; - }): Promise; - getDeployTransaction(_factory: string, _WETH9: string, overrides?: Overrides & { - from?: string | Promise; - }): TransactionRequest; - attach(address: string): SwapRouter; - connect(signer: Signer): SwapRouter__factory; - static readonly bytecode = "0x60c06040526000196000553480156200001757600080fd5b506040516200302f3803806200302f8339810160408190526200003a9162000076565b6001600160601b0319606092831b8116608052911b1660a052620000ad565b80516001600160a01b03811681146200007157600080fd5b919050565b6000806040838503121562000089578182fd5b620000948362000059565b9150620000a46020840162000059565b90509250929050565b60805160601c60a05160601c612f26620001096000398061012f528061058352806106ad5280610747528061078752806108b15280611c435280611ca35280611d24525080610dc6528061140c5280611e265250612f266000f3fe6080604052600436106101125760003560e01c8063c04b8d59116100a5578063df2ab5bb11610074578063f28c049811610059578063f28c0498146102f5578063f3995c6714610308578063fa461e331461031b576101bd565b8063df2ab5bb146102cf578063e0e189a0146102e2576101bd565b8063c04b8d5914610281578063c2e3140a14610294578063c45a0155146102a7578063db3e2198146102bc576101bd565b80634aa4a4fc116100e15780634aa4a4fc146102195780639b2c0a371461023b578063a4a78f0c1461024e578063ac9650d814610261576101bd565b806312210e8a146101c2578063414bf389146101ca5780634659a494146101f357806349404b7c14610206576101bd565b366101bd573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146101bb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742057455448390000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b600080fd5b6101bb61033b565b6101dd6101d83660046129f8565b61034d565b6040516101ea9190612df1565b60405180910390f35b6101bb610201366004612776565b6104bf565b6101bb610214366004612aff565b61057f565b34801561022557600080fd5b5061022e610745565b6040516101ea9190612c37565b6101bb610249366004612b2e565b610769565b6101bb61025c366004612776565b610981565b61027461026f3660046127d6565b610a56565b6040516101ea9190612caa565b6101dd61028f36600461294d565b610bb0565b6101bb6102a2366004612776565b610d0f565b3480156102b357600080fd5b5061022e610dc4565b6101dd6102ca3660046129f8565b610de8565b6101bb6102dd3660046126d7565b610f78565b6101bb6102f0366004612718565b611095565b6101dd610303366004612a14565b6111fb565b6101bb610316366004612776565b61132f565b34801561032757600080fd5b506101bb610336366004612868565b6113c7565b471561034b5761034b334761150e565b565b600081608001358061035d61165c565b11156103ca57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b61047060a08401356103e260808601606087016126b4565b6103f3610100870160e088016126b4565b604080518082019091528061040b60208a018a6126b4565b61041b60608b0160408c01612adc565b61042b60408c0160208d016126b4565b60405160200161043d93929190612bc1565b60405160208183030381529060405281526020013373ffffffffffffffffffffffffffffffffffffffff16815250611660565b91508260c001358210156104b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b090612d72565b60405180910390fd5b50919050565b604080517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e48101839052905173ffffffffffffffffffffffffffffffffffffffff881691638fcbaf0c9161010480830192600092919082900301818387803b15801561055f57600080fd5b505af1158015610573573d6000803e3d6000fd5b50505050505050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561060857600080fd5b505afa15801561061c573d6000803e3d6000fd5b505050506040513d602081101561063257600080fd5b50519050828110156106a557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e742057455448390000000000000000000000000000604482015290519081900360640190fd5b8015610740577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561071e57600080fd5b505af1158015610732573d6000803e3d6000fd5b50505050610740828261150e565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008211801561077a575060648211155b61078357600080fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561080c57600080fd5b505afa158015610820573d6000803e3d6000fd5b505050506040513d602081101561083657600080fd5b50519050848110156108a957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e742057455448390000000000000000000000000000604482015290519081900360640190fd5b801561097a577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561092257600080fd5b505af1158015610936573d6000803e3d6000fd5b50505050600061271061095285846117e690919063ffffffff16565b8161095957fe5b049050801561096c5761096c838261150e565b6109788582840361150e565b505b5050505050565b604080517fdd62ed3e00000000000000000000000000000000000000000000000000000000815233600482015230602482015290517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b158015610a1657600080fd5b505afa158015610a2a573d6000803e3d6000fd5b505050506040513d6020811015610a4057600080fd5b50511015610978576109788686868686866104bf565b60608167ffffffffffffffff81118015610a6f57600080fd5b50604051908082528060200260200182016040528015610aa357816020015b6060815260200190600190039081610a8e5790505b50905060005b82811015610ba95760008030868685818110610ac157fe5b9050602002810190610ad39190612dfa565b604051610ae1929190612c27565b600060405180830381855af49150503d8060008114610b1c576040519150601f19603f3d011682016040523d82523d6000602084013e610b21565b606091505b509150915081610b8757604481511015610b3a57600080fd5b60048101905080806020019051810190610b5491906128e3565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b09190612d28565b80848481518110610b9457fe5b60209081029190910101525050600101610aa9565b5092915050565b6000816040015180610bc061165c565b1115610c2d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b335b6000610c3e8560000151611810565b9050610c97856060015182610c57578660200151610c59565b305b60006040518060400160405280610c738b6000015161181c565b81526020018773ffffffffffffffffffffffffffffffffffffffff16815250611660565b60608601528015610cb7578451309250610cb09061182b565b8552610cc4565b8460600151935050610cca565b50610c2f565b8360800151831015610d08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b090612d72565b5050919050565b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051869173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b158015610d8457600080fd5b505afa158015610d98573d6000803e3d6000fd5b505050506040513d6020811015610dae57600080fd5b505110156109785761097886868686868661132f565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000816080013580610df861165c565b1115610e6557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b610f0e60a0840135610e7d60808601606087016126b4565b610e8e610100870160e088016126b4565b6040518060400160405280886020016020810190610eac91906126b4565b610ebc60608b0160408c01612adc565b610ec960208c018c6126b4565b604051602001610edb93929190612bc1565b60405160208183030381529060405281526020013373ffffffffffffffffffffffffffffffffffffffff16815250611860565b91508260c00135821115610f4e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b090612d3b565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600055919050565b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610fe157600080fd5b505afa158015610ff5573d6000803e3d6000fd5b505050506040513d602081101561100b57600080fd5b505190508281101561107e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b801561108f5761108f848383611a1c565b50505050565b6000821180156110a6575060648211155b6110af57600080fd5b60008573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561111857600080fd5b505afa15801561112c573d6000803e3d6000fd5b505050506040513d602081101561114257600080fd5b50519050848110156111b557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b80156109785760006127106111ca83866117e6565b816111d157fe5b04905080156111e5576111e5878483611a1c565b6111f28786838503611a1c565b50505050505050565b600081604001358061120b61165c565b111561127857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b6112eb606084013561129060408601602087016126b4565b60408051808201909152600090806112a88980612dfa565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525033602090910152611860565b5060005491508260800135821115610f4e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b090612d3b565b604080517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c48101839052905173ffffffffffffffffffffffffffffffffffffffff88169163d505accf9160e480830192600092919082900301818387803b15801561055f57600080fd5b60008413806113d65750600083135b6113df57600080fd5b60006113ed82840184612a4c565b905060008060006114018460000151611bf1565b9250925092506114337f0000000000000000000000000000000000000000000000000000000000000000848484611c22565b5060008060008a13611474578473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610896114a5565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16108a5b9150915081156114c4576114bf8587602001513384611c41565b610573565b85516114cf90611810565b156114f45785516114df9061182b565b86526114ee8133600089611860565b50610573565b806000819055508394506105738587602001513384611c41565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b6020831061158557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611548565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146115e7576040519150601f19603f3d011682016040523d82523d6000602084013e6115ec565b606091505b505090508061074057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b4290565b600073ffffffffffffffffffffffffffffffffffffffff8416611681573093505b60008060006116938560000151611bf1565b9194509250905073ffffffffffffffffffffffffffffffffffffffff808316908416106000806116c4868686611e1f565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088b856116ea8f611e5d565b73ffffffffffffffffffffffffffffffffffffffff8e161561170c578d611732565b8761172b5773fffd8963efd1fc6a506488495d951d5263988d25611732565b6401000276a45b8d6040516020016117439190612da9565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401611772959493929190612c58565b6040805180830381600087803b15801561178b57600080fd5b505af115801561179f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c39190612845565b91509150826117d257816117d4565b805b6000039b9a5050505050505050505050565b6000821580611801575050818102818382816117fe57fe5b04145b61180a57600080fd5b92915050565b8051604211155b919050565b606061180a826000602b611e8f565b805160609061180a9083906017907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe901611e8f565b600073ffffffffffffffffffffffffffffffffffffffff8416611881573093505b60008060006118938560000151611bf1565b9194509250905073ffffffffffffffffffffffffffffffffffffffff808416908316106000806118c4858786611e1f565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088b856118ea8f611e5d565b60000373ffffffffffffffffffffffffffffffffffffffff8e161561190f578d611935565b8761192e5773fffd8963efd1fc6a506488495d951d5263988d25611935565b6401000276a45b8d6040516020016119469190612da9565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401611975959493929190612c58565b6040805180830381600087803b15801561198e57600080fd5b505af11580156119a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c69190612845565b915091506000836119db5781836000036119e1565b82826000035b909850905073ffffffffffffffffffffffffffffffffffffffff8a16611a0d578b8114611a0d57600080fd5b50505050505050949350505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b60208310611af157805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611ab4565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b53576040519150601f19603f3d011682016040523d82523d6000602084013e611b58565b606091505b5091509150818015611b86575080511580611b865750808060200190516020811015611b8357600080fd5b50515b61097a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60008080611bff8482612076565b9250611c0c846014612176565b9050611c19846017612076565b91509193909250565b6000611c3885611c33868686612266565b6122e3565b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611c9c5750804710155b15611de5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d0957600080fd5b505af1158015611d1d573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611db357600080fd5b505af1158015611dc7573d6000803e3d6000fd5b505050506040513d6020811015611ddd57600080fd5b5061108f9050565b73ffffffffffffffffffffffffffffffffffffffff8316301415611e1357611e0e848383611a1c565b61108f565b61108f84848484612313565b6000611e557f0000000000000000000000000000000000000000000000000000000000000000611e50868686612266565b6124f0565b949350505050565b60007f80000000000000000000000000000000000000000000000000000000000000008210611e8b57600080fd5b5090565b60608182601f011015611f0357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b828284011015611f7457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b81830184511015611fe657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015290519081900360640190fd5b606082158015612005576040519150600082526020820160405261206d565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561203e578051835260209283019201612026565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b6000818260140110156120ea57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f416464726573735f6f766572666c6f770000000000000000000000000000604482015290519081900360640190fd5b816014018351101561215d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e64730000000000000000000000604482015290519081900360640190fd5b5001602001516c01000000000000000000000000900490565b6000818260030110156121ea57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b816003018351101561225d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e6473000000000000000000000000604482015290519081900360640190fd5b50016003015190565b61226e612626565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1611156122a6579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b60006122ef83836124f0565b90503373ffffffffffffffffffffffffffffffffffffffff82161461180a57600080fd5b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000178152925182516000948594938a169392918291908083835b602083106123f057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016123b3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612452576040519150601f19603f3d011682016040523d82523d6000602084013e612457565b606091505b5091509150818015612485575080511580612485575080806020019051602081101561248257600080fd5b50515b61097857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354460000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161061253257600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d5808301919091528251808303909101815260f5909101909152805191012090565b604080516060810182526000808252602082018190529181019190915290565b803561181781612ef4565b600082601f830112612661578081fd5b813561267461266f82612e88565b612e64565b818152846020838601011115612688578283fd5b816020850160208301379081016020019190915292915050565b600061010082840312156104b9578081fd5b6000602082840312156126c5578081fd5b81356126d081612ef4565b9392505050565b6000806000606084860312156126eb578182fd5b83356126f681612ef4565b925060208401359150604084013561270d81612ef4565b809150509250925092565b600080600080600060a0868803121561272f578081fd5b853561273a81612ef4565b945060208601359350604086013561275181612ef4565b925060608601359150608086013561276881612ef4565b809150509295509295909350565b60008060008060008060c0878903121561278e578081fd5b863561279981612ef4565b95506020870135945060408701359350606087013560ff811681146127bc578182fd5b9598949750929560808101359460a0909101359350915050565b600080602083850312156127e8578182fd5b823567ffffffffffffffff808211156127ff578384fd5b818501915085601f830112612812578384fd5b813581811115612820578485fd5b8660208083028501011115612833578485fd5b60209290920196919550909350505050565b60008060408385031215612857578182fd5b505080516020909101519092909150565b6000806000806060858703121561287d578182fd5b8435935060208501359250604085013567ffffffffffffffff808211156128a2578384fd5b818701915087601f8301126128b5578384fd5b8135818111156128c3578485fd5b8860208285010111156128d4578485fd5b95989497505060200194505050565b6000602082840312156128f4578081fd5b815167ffffffffffffffff81111561290a578182fd5b8201601f8101841361291a578182fd5b805161292861266f82612e88565b81815285602083850101111561293c578384fd5b611c38826020830160208601612ec8565b60006020828403121561295e578081fd5b813567ffffffffffffffff80821115612975578283fd5b9083019060a08286031215612988578283fd5b60405160a08101818110838211171561299d57fe5b6040528235828111156129ae578485fd5b6129ba87828601612651565b8252506129c960208401612646565b602082015260408301356040820152606083013560608201526080830135608082015280935050505092915050565b60006101008284031215612a0a578081fd5b6126d083836126a2565b600060208284031215612a25578081fd5b813567ffffffffffffffff811115612a3b578182fd5b820160a081850312156126d0578182fd5b600060208284031215612a5d578081fd5b813567ffffffffffffffff80821115612a74578283fd5b9083019060408286031215612a87578283fd5b604051604081018181108382111715612a9c57fe5b604052823582811115612aad578485fd5b612ab987828601612651565b82525060208301359250612acc83612ef4565b6020810192909252509392505050565b600060208284031215612aed578081fd5b813562ffffff811681146126d0578182fd5b60008060408385031215612b11578182fd5b823591506020830135612b2381612ef4565b809150509250929050565b60008060008060808587031215612b43578182fd5b843593506020850135612b5581612ef4565b9250604085013591506060850135612b6c81612ef4565b939692955090935050565b60008151808452612b8f816020860160208601612ec8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116825260e89390931b7fffffff0000000000000000000000000000000000000000000000000000000000166014820152921b166017820152602b0190565b6000828483379101908152919050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a06080830152612c9f60a0830184612b77565b979650505050505050565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015612d1b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452612d09858351612b77565b94509285019290850190600101612ccf565b5092979650505050505050565b6000602082526126d06020830184612b77565b60208082526012908201527f546f6f206d756368207265717565737465640000000000000000000000000000604082015260600190565b60208082526013908201527f546f6f206c6974746c6520726563656976656400000000000000000000000000604082015260600190565b600060208252825160406020840152612dc56060840182612b77565b905073ffffffffffffffffffffffffffffffffffffffff60208501511660408401528091505092915050565b90815260200190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612e2e578283fd5b83018035915067ffffffffffffffff821115612e48578283fd5b602001915036819003821315612e5d57600080fd5b9250929050565b60405181810167ffffffffffffffff81118282101715612e8057fe5b604052919050565b600067ffffffffffffffff821115612e9c57fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b83811015612ee3578181015183820152602001612ecb565b8381111561108f5750506000910152565b73ffffffffffffffffffffffffffffffffffffffff81168114612f1657600080fd5b5056fea164736f6c6343000706000a"; - static readonly abi: ({ - inputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - name?: undefined; - outputs?: undefined; - } | { - inputs: { - components: { - internalType: string; - name: string; - type: string; - }[]; - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - } | { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - } | { - stateMutability: string; - type: string; - inputs?: undefined; - name?: undefined; - outputs?: undefined; - })[]; - static createInterface(): SwapRouterInterface; - static connect(address: string, signerOrProvider: Signer | Provider): SwapRouter; -} diff --git a/dist2/types/types/v3/factories/TickLens__factory.d.ts b/dist2/types/types/v3/factories/TickLens__factory.d.ts deleted file mode 100644 index 9c3b78310c0..00000000000 --- a/dist2/types/types/v3/factories/TickLens__factory.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Signer, ContractFactory, Overrides } from "ethers"; -import { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { TickLens, TickLensInterface } from "../TickLens"; -export declare class TickLens__factory extends ContractFactory { - constructor(signer?: Signer); - deploy(overrides?: Overrides & { - from?: string | Promise; - }): Promise; - getDeployTransaction(overrides?: Overrides & { - from?: string | Promise; - }): TransactionRequest; - attach(address: string): TickLens; - connect(signer: Signer): TickLens__factory; - static readonly bytecode = "0x608060405234801561001057600080fd5b50610569806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063351fb47814610030575b600080fd5b61004361003e36600461037c565b610059565b60405161005091906104aa565b60405180910390f35b606060008373ffffffffffffffffffffffffffffffffffffffff16635339c296846040518263ffffffff1660e01b8152600401610096919061051b565b60206040518083038186803b1580156100ae57600080fd5b505afa1580156100c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e69190610492565b90506000805b610100811015610110576001811b831615610108576001909101905b6001016100ec565b5060008573ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561015957600080fd5b505afa15801561016d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061019191906103ba565b90508167ffffffffffffffff811180156101aa57600080fd5b506040519080825280602002602001820160405280156101e457816020015b6101d1610328565b8152602001906001900390816101c95790505b50935060005b61010081101561031e576001811b841615610316576040517ff30dba93000000000000000000000000000000000000000000000000000000008152600187900b60020b60081b8201830290600090819073ffffffffffffffffffffffffffffffffffffffff8b169063f30dba9390610266908690600401610529565b6101006040518083038186803b15801561027f57600080fd5b505afa158015610293573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102b791906103e2565b5050505050509150915060405180606001604052808460020b815260200182600f0b8152602001836fffffffffffffffffffffffffffffffff168152508887600190039750878151811061030757fe5b60200260200101819052505050505b6001016101ea565b5050505092915050565b604080516060810182526000808252602082018190529181019190915290565b8051801515811461035857600080fd5b919050565b805161035881610537565b805163ffffffff8116811461035857600080fd5b6000806040838503121561038e578182fd5b823561039981610537565b91506020830135600181900b81146103af578182fd5b809150509250929050565b6000602082840312156103cb578081fd5b81518060020b81146103db578182fd5b9392505050565b600080600080600080600080610100898b0312156103fe578384fd5b88516fffffffffffffffffffffffffffffffff8116811461041d578485fd5b80985050602089015180600f0b8114610434578485fd5b80975050604089015195506060890151945060808901518060060b8114610459578485fd5b935061046760a08a0161035d565b925061047560c08a01610368565b915061048360e08a01610348565b90509295985092959890939650565b6000602082840312156104a3578081fd5b5051919050565b602080825282518282018190526000919060409081850190868401855b8281101561050e578151805160020b855286810151600f0b878601528501516fffffffffffffffffffffffffffffffff1685850152606090930192908501906001016104c7565b5091979650505050505050565b60019190910b815260200190565b60029190910b815260200190565b73ffffffffffffffffffffffffffffffffffffffff8116811461055957600080fd5b5056fea164736f6c6343000706000a"; - static readonly abi: { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - components: { - internalType: string; - name: string; - type: string; - }[]; - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - }[]; - static createInterface(): TickLensInterface; - static connect(address: string, signerOrProvider: Signer | Provider): TickLens; -} diff --git a/dist2/types/types/v3/factories/UniswapInterfaceMulticall__factory.d.ts b/dist2/types/types/v3/factories/UniswapInterfaceMulticall__factory.d.ts deleted file mode 100644 index 86a7878e91d..00000000000 --- a/dist2/types/types/v3/factories/UniswapInterfaceMulticall__factory.d.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Signer, ContractFactory, Overrides } from "ethers"; -import { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { UniswapInterfaceMulticall, UniswapInterfaceMulticallInterface } from "../UniswapInterfaceMulticall"; -export declare class UniswapInterfaceMulticall__factory extends ContractFactory { - constructor(signer?: Signer); - deploy(overrides?: Overrides & { - from?: string | Promise; - }): Promise; - getDeployTransaction(overrides?: Overrides & { - from?: string | Promise; - }): TransactionRequest; - attach(address: string): UniswapInterfaceMulticall; - connect(signer: Signer): UniswapInterfaceMulticall__factory; - static readonly bytecode = "0x608060405234801561001057600080fd5b50610567806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630f28c97d146100465780631749e1e3146100645780634d2301cc14610085575b600080fd5b61004e610098565b60405161005b919061041f565b60405180910390f35b6100776100723660046102a7565b61009c565b60405161005b929190610428565b61004e610093366004610286565b610220565b4290565b8051439060609067ffffffffffffffff811180156100b957600080fd5b506040519080825280602002602001820160405280156100f357816020015b6100e061023a565b8152602001906001900390816100d85790505b50905060005b835181101561021a57600080600086848151811061011357fe5b60200260200101516000015187858151811061012b57fe5b60200260200101516020015188868151811061014357fe5b60200260200101516040015192509250925060005a90506000808573ffffffffffffffffffffffffffffffffffffffff1685856040516101839190610403565b60006040518083038160008787f1925050503d80600081146101c1576040519150601f19603f3d011682016040523d82523d6000602084013e6101c6565b606091505b509150915060005a8403905060405180606001604052808415158152602001828152602001838152508989815181106101fb57fe5b60200260200101819052505050505050505080806001019150506100f9565b50915091565b73ffffffffffffffffffffffffffffffffffffffff163190565b604051806060016040528060001515815260200160008152602001606081525090565b803573ffffffffffffffffffffffffffffffffffffffff8116811461028157600080fd5b919050565b600060208284031215610297578081fd5b6102a08261025d565b9392505050565b600060208083850312156102b9578182fd5b823567ffffffffffffffff808211156102d0578384fd5b818501915085601f8301126102e3578384fd5b8135818111156102ef57fe5b6102fc8485830201610506565b81815284810190848601875b848110156103f457813587017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0606081838f03011215610346578a8bfd5b60408051606081018181108b8211171561035c57fe5b8252610369848d0161025d565b8152818401358c82015260608401358a811115610384578d8efd5b8085019450508e603f850112610398578c8dfd5b8b8401358a8111156103a657fe5b6103b68d85601f84011601610506565b93508084528f838287010111156103cb578d8efd5b808386018e86013783018c018d9052908101919091528552509287019290870190600101610308565b50909998505050505050505050565b6000825161041581846020870161052a565b9190910192915050565b90815260200190565b600060408083018584526020828186015281865180845260609350838701915083838202880101838901875b838110156104f6578983037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa001855281518051151584528681015187850152880151888401889052805188850181905260806104b582828801858c0161052a565b96880196601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01694909401909301925090850190600101610454565b50909a9950505050505050505050565b60405181810167ffffffffffffffff8111828210171561052257fe5b604052919050565b60005b8381101561054557818101518382015260200161052d565b83811115610554576000848401525b5050505056fea164736f6c6343000706000a"; - static readonly abi: ({ - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - } | { - inputs: { - components: { - internalType: string; - name: string; - type: string; - }[]; - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: ({ - internalType: string; - name: string; - type: string; - components?: undefined; - } | { - components: { - internalType: string; - name: string; - type: string; - }[]; - internalType: string; - name: string; - type: string; - })[]; - stateMutability: string; - type: string; - })[]; - static createInterface(): UniswapInterfaceMulticallInterface; - static connect(address: string, signerOrProvider: Signer | Provider): UniswapInterfaceMulticall; -} diff --git a/dist2/types/types/v3/factories/UniswapV3Factory__factory.d.ts b/dist2/types/types/v3/factories/UniswapV3Factory__factory.d.ts deleted file mode 100644 index 91ac8364e34..00000000000 --- a/dist2/types/types/v3/factories/UniswapV3Factory__factory.d.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { Signer, ContractFactory, Overrides } from "ethers"; -import { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { UniswapV3Factory, UniswapV3FactoryInterface } from "../UniswapV3Factory"; -export declare class UniswapV3Factory__factory extends ContractFactory { - constructor(signer?: Signer); - deploy(overrides?: Overrides & { - from?: string | Promise; - }): Promise; - getDeployTransaction(overrides?: Overrides & { - from?: string | Promise; - }): TransactionRequest; - attach(address: string): UniswapV3Factory; - connect(signer: Signer): UniswapV3Factory__factory; - static readonly bytecode = "0x60a060405234801561001057600080fd5b503060601b608052600380546001600160a01b031916339081179091556040516000907fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c908290a36101f4600081815260046020527ffb8cf1d12598d1a039dd1d106665851a96aadf67d0d9ed76fceea282119208b7805462ffffff1916600a90811790915560405190929160008051602061614b83398151915291a3610bb8600081815260046020527f72dffa9b822156d9cf4b0090fa0b656bcb9cc2b2c60eb6acfc20a34f54b31743805462ffffff1916603c90811790915560405190929160008051602061614b83398151915291a3612710600081815260046020527f8cc740d51daa94ff54f33bd779c2d20149f524c340519b49181be5a08615f829805462ffffff191660c890811790915560405190929160008051602061614b83398151915291a360805160601c615fd7610174600039806105515250615fd76000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063890357301161005b578063890357301461013b5780638a7c195f146101855780638da5cb5b146101b0578063a1671295146101b85761007d565b806313af4035146100825780631698ee82146100aa57806322afcccb14610102575b600080fd5b6100a86004803603602081101561009857600080fd5b50356001600160a01b03166101f4565b005b6100e6600480360360608110156100c057600080fd5b5080356001600160a01b03908116916020810135909116906040013562ffffff16610267565b604080516001600160a01b039092168252519081900360200190f35b6101246004803603602081101561011857600080fd5b503562ffffff16610293565b6040805160029290920b8252519081900360200190f35b6101436102a8565b604080516001600160a01b0396871681529486166020860152929094168383015262ffffff16606083015260029290920b608082015290519081900360a00190f35b6100a86004803603604081101561019b57600080fd5b5062ffffff813516906020013560020b6102de565b6100e66103a1565b6100e6600480360360608110156101ce57600080fd5b5080356001600160a01b03908116916020810135909116906040013562ffffff166103b0565b6003546001600160a01b0316331461020b57600080fd5b6003546040516001600160a01b038084169216907fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c90600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b60056020908152600093845260408085208252928452828420905282529020546001600160a01b031681565b60046020526000908152604090205460020b81565b600054600154600280546001600160a01b03938416939283169281169162ffffff600160a01b83041691600160b81b9004900b85565b6003546001600160a01b031633146102f557600080fd5b620f42408262ffffff161061030957600080fd5b60008160020b13801561032057506140008160020b125b61032957600080fd5b62ffffff8216600090815260046020526040902054600290810b900b1561034f57600080fd5b62ffffff828116600081815260046020526040808220805462ffffff1916600287900b958616179055517fc66a3fdf07232cdd185febcc6579d408c241b47ae2f9907d84be655141eeaecc9190a35050565b6003546001600160a01b031681565b60006103ba610546565b826001600160a01b0316846001600160a01b031614156103d957600080fd5b600080846001600160a01b0316866001600160a01b0316106103fc5784866103ff565b85855b90925090506001600160a01b03821661041757600080fd5b62ffffff8416600090815260046020526040902054600290810b9081900b61043e57600080fd5b6001600160a01b0383811660009081526005602090815260408083208685168452825280832062ffffff8a168452909152902054161561047d57600080fd5b61048a308484888561057d565b6001600160a01b03808516600081815260056020818152604080842089871680865290835281852062ffffff8e168087529084528286208054988a166001600160a01b0319998a1681179091558287529484528286208787528452828620818752845294829020805490971684179096558051600289900b815291820192909252815195995091947f783cca1c0412dd0d695e784568c96da2e9c22ff989357a2e8b1d9b2b4e6b71189281900390910190a45050509392505050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461057b57600080fd5b565b6040805160a0810182526001600160a01b03878116808352878216602080850182905292881684860181905262ffffff888116606080880182905260028a810b6080998a01819052600080546001600160a01b03199081169099178155600180548a1689179055825490981686177fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff16600160a01b8502177fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff16600160b81b91830b9095160293909317909255875180870194909452838801929092528281019190915285518083039091018152930193849052825192909101919091209091610686906106f5565b8190604051809103906000f59050801580156106a6573d6000803e3d6000fd5b50600080546001600160a01b0319908116909155600180549091169055600280547fffffffffffff00000000000000000000000000000000000000000000000000001690559695505050505050565b6158c8806107038339019056fe6101606040523480156200001257600080fd5b503060601b60805260408051630890357360e41b81529051600091339163890357309160048082019260a092909190829003018186803b1580156200005657600080fd5b505afa1580156200006b573d6000803e3d6000fd5b505050506040513d60a08110156200008257600080fd5b508051602080830151604084015160608086015160809096015160e896871b6001600160e81b0319166101005291811b6001600160601b031990811660e05292811b831660c0529390931b1660a052600282810b900b90921b610120529150620000f79082906200010f811b62002b8417901c565b60801b6001600160801b03191661014052506200017d565b60008082600281900b620d89e719816200012557fe5b05029050600083600281900b620d89e8816200013d57fe5b0502905060008460020b83830360020b816200015557fe5b0560010190508062ffffff166001600160801b038016816200017357fe5b0495945050505050565b60805160601c60a05160601c60c05160601c60e05160601c6101005160e81c6101205160e81c6101405160801c61567e6200024a60003980611fee5280614b5f5280614b96525080610c0052806128fd5280614bca5280614bfc525080610cef52806119cb5280611a0252806129455250806111c75280611a855280611ef4528061244452806129215280613e6b5250806108d252806112f55280611a545280611e8e52806123be5280613d2252508061207b528061227d52806128d9525080612bfb525061567e6000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c806370cf754a116100ee578063c45a015511610097578063ddca3f4311610071578063ddca3f4314610800578063f305839914610820578063f30dba9314610828578063f637731d146108aa576101ae565b8063c45a0155146107d1578063d0c93a7c146107d9578063d21220a7146107f8576101ae565b8063883bdbfd116100c8578063883bdbfd14610633578063a34123a71461073c578063a38807f214610776576101ae565b806370cf754a146105c65780638206a4d1146105ce57806385b66729146105f6576101ae565b80633850c7bd1161015b578063490e6cbc11610135578063490e6cbc146104705780634f1eb3d8146104fc578063514ea4bf1461054d5780635339c296146105a6576101ae565b80633850c7bd1461035b5780633c8a7d8d146103b45780634614131914610456576101ae565b80631ad8b03b1161018c5780631ad8b03b146102aa578063252c09d7146102e157806332148f6714610338576101ae565b80630dfe1681146101b3578063128acb08146101d75780631a68650214610286575b600080fd5b6101bb6108d0565b604080516001600160a01b039092168252519081900360200190f35b61026d600480360360a08110156101ed57600080fd5b6001600160a01b0382358116926020810135151592604082013592606083013516919081019060a08101608082013564010000000081111561022e57600080fd5b82018360208201111561024057600080fd5b8035906020019184600183028401116401000000008311171561026257600080fd5b5090925090506108f4565b6040805192835260208301919091528051918290030190f35b61028e6114ad565b604080516001600160801b039092168252519081900360200190f35b6102b26114bc565b60405180836001600160801b03168152602001826001600160801b031681526020019250505060405180910390f35b6102fe600480360360208110156102f757600080fd5b50356114d6565b6040805163ffffffff909516855260069390930b60208501526001600160a01b039091168383015215156060830152519081900360800190f35b6103596004803603602081101561034e57600080fd5b503561ffff1661151c565b005b610363611616565b604080516001600160a01b03909816885260029690960b602088015261ffff9485168787015292841660608701529216608085015260ff90911660a0840152151560c0830152519081900360e00190f35b61026d600480360360a08110156103ca57600080fd5b6001600160a01b03823516916020810135600290810b92604083013590910b916001600160801b036060820135169181019060a08101608082013564010000000081111561041757600080fd5b82018360208201111561042957600080fd5b8035906020019184600183028401116401000000008311171561044b57600080fd5b509092509050611666565b61045e611922565b60408051918252519081900360200190f35b6103596004803603608081101561048657600080fd5b6001600160a01b0382351691602081013591604082013591908101906080810160608201356401000000008111156104bd57600080fd5b8201836020820111156104cf57600080fd5b803590602001918460018302840111640100000000831117156104f157600080fd5b509092509050611928565b6102b2600480360360a081101561051257600080fd5b506001600160a01b03813516906020810135600290810b91604081013590910b906001600160801b0360608201358116916080013516611d83565b61056a6004803603602081101561056357600080fd5b5035611f9d565b604080516001600160801b0396871681526020810195909552848101939093529084166060840152909216608082015290519081900360a00190f35b61045e600480360360208110156105bc57600080fd5b503560010b611fda565b61028e611fec565b610359600480360360408110156105e457600080fd5b5060ff81358116916020013516612010565b6102b26004803603606081101561060c57600080fd5b506001600160a01b03813516906001600160801b036020820135811691604001351661220f565b6106a36004803603602081101561064957600080fd5b81019060208101813564010000000081111561066457600080fd5b82018360208201111561067657600080fd5b8035906020019184602083028401116401000000008311171561069857600080fd5b5090925090506124dc565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156106e75781810151838201526020016106cf565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561072657818101518382015260200161070e565b5050505090500194505050505060405180910390f35b61026d6004803603606081101561075257600080fd5b508035600290810b91602081013590910b90604001356001600160801b0316612569565b6107a06004803603604081101561078c57600080fd5b508035600290810b9160200135900b6126e0565b6040805160069490940b84526001600160a01b03909216602084015263ffffffff1682820152519081900360600190f35b6101bb6128d7565b6107e16128fb565b6040805160029290920b8252519081900360200190f35b6101bb61291f565b610808612943565b6040805162ffffff9092168252519081900360200190f35b61045e612967565b6108486004803603602081101561083e57600080fd5b503560020b61296d565b604080516001600160801b039099168952600f9790970b602089015287870195909552606087019390935260069190910b60808601526001600160a01b031660a085015263ffffffff1660c0840152151560e083015251908190036101000190f35b610359600480360360208110156108c057600080fd5b50356001600160a01b03166129db565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806108ff612bf0565b85610936576040805162461bcd60e51b8152602060048201526002602482015261415360f01b604482015290519081900360640190fd5b6040805160e0810182526000546001600160a01b0381168252600160a01b8104600290810b810b900b602083015261ffff600160b81b8204811693830193909352600160c81b810483166060830152600160d81b8104909216608082015260ff600160e81b8304811660a0830152600160f01b909204909116151560c082018190526109ef576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b87610a3a5780600001516001600160a01b0316866001600160a01b0316118015610a35575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038716105b610a6c565b80600001516001600160a01b0316866001600160a01b0316108015610a6c57506401000276a36001600160a01b038716115b610aa3576040805162461bcd60e51b815260206004820152600360248201526214d41360ea1b604482015290519081900360640190fd5b6000805460ff60f01b191681556040805160c08101909152808a610ad25760048460a0015160ff16901c610ae5565b60108460a0015160ff1681610ae357fe5b065b60ff1681526004546001600160801b03166020820152604001610b06612c27565b63ffffffff168152602001600060060b815260200160006001600160a01b031681526020016000151581525090506000808913905060006040518060e001604052808b81526020016000815260200185600001516001600160a01b03168152602001856020015160020b81526020018c610b8257600254610b86565b6001545b815260200160006001600160801b0316815260200184602001516001600160801b031681525090505b805115801590610bd55750886001600160a01b031681604001516001600160a01b031614155b15610f9f57610be261560e565b60408201516001600160a01b031681526060820151610c25906006907f00000000000000000000000000000000000000000000000000000000000000008f612c2b565b15156040830152600290810b810b60208301819052620d89e719910b1215610c5657620d89e7196020820152610c75565b6020810151620d89e860029190910b1315610c7557620d89e860208201525b610c828160200151612d6d565b6001600160a01b031660608201526040820151610d13908d610cbc578b6001600160a01b031683606001516001600160a01b031611610cd6565b8b6001600160a01b031683606001516001600160a01b0316105b610ce4578260600151610ce6565b8b5b60c085015185517f000000000000000000000000000000000000000000000000000000000000000061309f565b60c085015260a084015260808301526001600160a01b031660408301528215610d7557610d498160c00151826080015101613291565b825103825260a0810151610d6b90610d6090613291565b6020840151906132a7565b6020830152610db0565b610d828160a00151613291565b825101825260c08101516080820151610daa91610d9f9101613291565b6020840151906132c3565b60208301525b835160ff1615610df6576000846000015160ff168260c0015181610dd057fe5b60c0840180519290910491829003905260a0840180519091016001600160801b03169052505b60c08201516001600160801b031615610e3557610e298160c00151600160801b8460c001516001600160801b03166132d9565b60808301805190910190525b80606001516001600160a01b031682604001516001600160a01b03161415610f5e57806040015115610f35578360a00151610ebf57610e9d846040015160008760200151886040015188602001518a606001516008613389909695949392919063ffffffff16565b6001600160a01b03166080860152600690810b900b6060850152600160a08501525b6000610f0b82602001518e610ed657600154610edc565b84608001515b8f610eeb578560800151610eef565b6002545b608089015160608a015160408b0151600595949392919061351c565b90508c15610f17576000035b610f258360c00151826135ef565b6001600160801b031660c0840152505b8b610f44578060200151610f4d565b60018160200151035b600290810b900b6060830152610f99565b80600001516001600160a01b031682604001516001600160a01b031614610f9957610f8c82604001516136a5565b600290810b900b60608301525b50610baf565b836020015160020b816060015160020b1461107a57600080610fed86604001518660400151886020015188602001518a606001518b6080015160086139d1909695949392919063ffffffff16565b604085015160608601516000805461ffff60c81b1916600160c81b61ffff958616021761ffff60b81b1916600160b81b95909416949094029290921762ffffff60a01b1916600160a01b62ffffff60029490940b93909316929092029190911773ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03909116179055506110ac9050565b60408101516000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039092169190911790555b8060c001516001600160801b031683602001516001600160801b0316146110f25760c0810151600480546001600160801b0319166001600160801b039092169190911790555b8a1561114257608081015160015560a08101516001600160801b03161561113d5760a0810151600380546001600160801b031981166001600160801b03918216909301169190911790555b611188565b608081015160025560a08101516001600160801b0316156111885760a0810151600380546001600160801b03808216600160801b92839004821690940116029190911790555b8115158b1515146111a157602081015181518b036111ae565b80600001518a0381602001515b90965094508a156112e75760008512156111f0576111f07f00000000000000000000000000000000000000000000000000000000000000008d87600003613b86565b60006111fa613cd4565b9050336001600160a01b031663fa461e3388888c8c6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b15801561127e57600080fd5b505af1158015611292573d6000803e3d6000fd5b5050505061129e613cd4565b6112a88289613e0d565b11156112e1576040805162461bcd60e51b815260206004820152600360248201526249494160e81b604482015290519081900360640190fd5b50611411565b600086121561131e5761131e7f00000000000000000000000000000000000000000000000000000000000000008d88600003613b86565b6000611328613e1d565b9050336001600160a01b031663fa461e3388888c8c6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b1580156113ac57600080fd5b505af11580156113c0573d6000803e3d6000fd5b505050506113cc613e1d565b6113d68288613e0d565b111561140f576040805162461bcd60e51b815260206004820152600360248201526249494160e81b604482015290519081900360640190fd5b505b60408082015160c083015160608085015184518b8152602081018b90526001600160a01b03948516818701526001600160801b039093169183019190915260020b60808201529151908e169133917fc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca679181900360a00190a350506000805460ff60f01b1916600160f01b17905550919890975095505050505050565b6004546001600160801b031681565b6003546001600160801b0380821691600160801b90041682565b60088161ffff81106114e757600080fd5b015463ffffffff81169150640100000000810460060b90600160581b81046001600160a01b031690600160f81b900460ff1684565b600054600160f01b900460ff16611560576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b19169055611575612bf0565b60008054600160d81b900461ffff169061159160088385613eb5565b6000805461ffff808416600160d81b810261ffff60d81b19909316929092179092559192508316146115fe576040805161ffff80851682528316602082015281517fac49e518f90a358f652e4400164f05a5d8f7e35e7747279bc3a93dbf584e125a929181900390910190a15b50506000805460ff60f01b1916600160f01b17905550565b6000546001600160a01b03811690600160a01b810460020b9061ffff600160b81b8204811691600160c81b8104821691600160d81b8204169060ff600160e81b8204811691600160f01b90041687565b600080548190600160f01b900460ff166116ad576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b191690556001600160801b0385166116cd57600080fd5b60008061171b60405180608001604052808c6001600160a01b031681526020018b60020b81526020018a60020b81526020016117118a6001600160801b0316613f58565b600f0b9052613f69565b9250925050819350809250600080600086111561173d5761173a613cd4565b91505b841561174e5761174b613e1d565b90505b336001600160a01b031663d348799787878b8b6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b1580156117d057600080fd5b505af11580156117e4573d6000803e3d6000fd5b50505050600086111561183b576117f9613cd4565b6118038388613e0d565b111561183b576040805162461bcd60e51b815260206004820152600260248201526104d360f41b604482015290519081900360640190fd5b841561188b57611849613e1d565b6118538287613e0d565b111561188b576040805162461bcd60e51b81526020600482015260026024820152614d3160f01b604482015290519081900360640190fd5b8960020b8b60020b8d6001600160a01b03167f7a53080ba414158be7ec69b987b5fb7d07dee101fe85488f0853ae16239d0bde338d8b8b60405180856001600160a01b03168152602001846001600160801b0316815260200183815260200182815260200194505050505060405180910390a450506000805460ff60f01b1916600160f01b17905550919890975095505050505050565b60025481565b600054600160f01b900460ff1661196c576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b19169055611981612bf0565b6004546001600160801b0316806119c3576040805162461bcd60e51b81526020600482015260016024820152601360fa1b604482015290519081900360640190fd5b60006119f8867f000000000000000000000000000000000000000000000000000000000000000062ffffff16620f42406141a9565b90506000611a2f867f000000000000000000000000000000000000000000000000000000000000000062ffffff16620f42406141a9565b90506000611a3b613cd4565b90506000611a47613e1d565b90508815611a7a57611a7a7f00000000000000000000000000000000000000000000000000000000000000008b8b613b86565b8715611aab57611aab7f00000000000000000000000000000000000000000000000000000000000000008b8a613b86565b336001600160a01b031663e9cbafb085858a8a6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b158015611b2d57600080fd5b505af1158015611b41573d6000803e3d6000fd5b505050506000611b4f613cd4565b90506000611b5b613e1d565b905081611b688588613e0d565b1115611ba0576040805162461bcd60e51b8152602060048201526002602482015261046360f41b604482015290519081900360640190fd5b80611bab8487613e0d565b1115611be3576040805162461bcd60e51b8152602060048201526002602482015261463160f01b604482015290519081900360640190fd5b8382038382038115611c725760008054600160e81b9004600f16908115611c16578160ff168481611c1057fe5b04611c19565b60005b90506001600160801b03811615611c4c57600380546001600160801b038082168401166001600160801b03199091161790555b611c66818503600160801b8d6001600160801b03166132d9565b60018054909101905550505b8015611cfd5760008054600160e81b900460041c600f16908115611ca2578160ff168381611c9c57fe5b04611ca5565b60005b90506001600160801b03811615611cd757600380546001600160801b03600160801b8083048216850182160291161790555b611cf1818403600160801b8d6001600160801b03166132d9565b60028054909101905550505b8d6001600160a01b0316336001600160a01b03167fbdbdb71d7860376ba52b25a5028beea23581364a40522f6bcfb86bb1f2dca6338f8f86866040518085815260200184815260200183815260200182815260200194505050505060405180910390a350506000805460ff60f01b1916600160f01b179055505050505050505050505050565b600080548190600160f01b900460ff16611dca576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b19168155611de460073389896141e3565b60038101549091506001600160801b0390811690861611611e055784611e14565b60038101546001600160801b03165b60038201549093506001600160801b03600160801b909104811690851611611e3c5783611e52565b6003810154600160801b90046001600160801b03165b91506001600160801b03831615611eb7576003810180546001600160801b031981166001600160801b03918216869003821617909155611eb7907f0000000000000000000000000000000000000000000000000000000000000000908a908616613b86565b6001600160801b03821615611f1d576003810180546001600160801b03600160801b808304821686900382160291811691909117909155611f1d907f0000000000000000000000000000000000000000000000000000000000000000908a908516613b86565b604080516001600160a01b038a1681526001600160801b0380861660208301528416818301529051600288810b92908a900b9133917f70935338e69775456a85ddef226c395fb668b63fa0115f5f20610b388e6ca9c0919081900360600190a4506000805460ff60f01b1916600160f01b17905590969095509350505050565b60076020526000908152604090208054600182015460028301546003909301546001600160801b0392831693919281811691600160801b90041685565b60066020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600054600160f01b900460ff16612054576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b1916905560408051638da5cb5b60e01b815290516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691638da5cb5b916004808301926020929190829003018186803b1580156120c157600080fd5b505afa1580156120d5573d6000803e3d6000fd5b505050506040513d60208110156120eb57600080fd5b50516001600160a01b0316331461210157600080fd5b60ff82161580612124575060048260ff16101580156121245750600a8260ff1611155b801561214e575060ff8116158061214e575060048160ff161015801561214e5750600a8160ff1611155b61215757600080fd5b60008054610ff0600484901b16840160ff908116600160e81b9081027fffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841617909355919004167f973d8d92bb299f4af6ce49b52a8adb85ae46b9f214c4c4fc06ac77401237b1336010826040805160ff9390920683168252600f600486901c16602083015286831682820152918516606082015290519081900360800190a150506000805460ff60f01b1916600160f01b17905550565b600080548190600160f01b900460ff16612256576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b1916905560408051638da5cb5b60e01b815290516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691638da5cb5b916004808301926020929190829003018186803b1580156122c357600080fd5b505afa1580156122d7573d6000803e3d6000fd5b505050506040513d60208110156122ed57600080fd5b50516001600160a01b0316331461230357600080fd5b6003546001600160801b039081169085161161231f578361232c565b6003546001600160801b03165b6003549092506001600160801b03600160801b9091048116908416116123525782612366565b600354600160801b90046001600160801b03165b90506001600160801b038216156123e7576003546001600160801b038381169116141561239557600019909101905b600380546001600160801b031981166001600160801b039182168590038216179091556123e7907f00000000000000000000000000000000000000000000000000000000000000009087908516613b86565b6001600160801b0381161561246d576003546001600160801b03828116600160801b90920416141561241857600019015b600380546001600160801b03600160801b80830482168590038216029181169190911790915561246d907f00000000000000000000000000000000000000000000000000000000000000009087908416613b86565b604080516001600160801b0380851682528316602082015281516001600160a01b0388169233927f596b573906218d3411850b26a6b437d6c4522fdb43d2d2386263f86d50b8b151929081900390910190a36000805460ff60f01b1916600160f01b1790559094909350915050565b6060806124e7612bf0565b61255e6124f2612c27565b858580806020026020016040519081016040528093929190818152602001838360200280828437600092018290525054600454600896959450600160a01b820460020b935061ffff600160b81b8304811693506001600160801b0390911691600160c81b900416614247565b915091509250929050565b600080548190600160f01b900460ff166125b0576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b1916815560408051608081018252338152600288810b602083015287900b918101919091528190819061260990606081016125fc6001600160801b038a16613f58565b600003600f0b9052613f69565b925092509250816000039450806000039350600085118061262a5750600084115b15612669576003830180546001600160801b038082168089018216600160801b93849004831689019092169092029091176001600160801b0319161790555b604080516001600160801b0388168152602081018790528082018690529051600289810b92908b900b9133917f0c396cd989a39f4459b5fa1aed6a9a8dcdbc45908acfd67e028cd568da98982c919081900360600190a450506000805460ff60f01b1916600160f01b179055509094909350915050565b60008060006126ed612bf0565b6126f785856143a1565b600285810b810b60009081526005602052604080822087840b90930b825281206003830154600681900b9367010000000000000082046001600160a01b0316928492600160d81b810463ffffffff169284929091600160f81b900460ff168061275f57600080fd5b6003820154600681900b985067010000000000000081046001600160a01b03169650600160d81b810463ffffffff169450600160f81b900460ff16806127a457600080fd5b50506040805160e0810182526000546001600160a01b0381168252600160a01b8104600290810b810b810b6020840181905261ffff600160b81b8404811695850195909552600160c81b830485166060850152600160d81b8304909416608084015260ff600160e81b8304811660a0850152600160f01b909204909116151560c08301529093508e810b91900b1215905061284d575093909403965090039350900390506128d0565b8a60020b816020015160020b12156128c1576000612869612c27565b602083015160408401516004546060860151939450600093849361289f936008938893879392916001600160801b031690613389565b9a9003989098039b5050949096039290920396509091030392506128d0915050565b50949093039650039350900390505b9250925092565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60015481565b60056020526000908152604090208054600182015460028301546003909301546001600160801b03831693600160801b909304600f0b9290600681900b9067010000000000000081046001600160a01b031690600160d81b810463ffffffff1690600160f81b900460ff1688565b6000546001600160a01b031615612a1e576040805162461bcd60e51b8152602060048201526002602482015261414960f01b604482015290519081900360640190fd5b6000612a29826136a5565b9050600080612a41612a39612c27565b60089061446a565b6040805160e0810182526001600160a01b038816808252600288810b6020808501829052600085870181905261ffff898116606088018190529089166080880181905260a08801839052600160c0909801979097528154600160f01b73ffffffffffffffffffffffffffffffffffffffff19909116871762ffffff60a01b1916600160a01b62ffffff9787900b9790971696909602959095177fffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffff16600160c81b9091021761ffff60d81b1916600160d81b909602959095177fff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1692909217909355835191825281019190915281519395509193507f98636036cb66a9c19a37435efc1e90142190214e8abeb821bdba3f2990dd4c9592918290030190a150505050565b60008082600281900b620d89e71981612b9957fe5b05029050600083600281900b620d89e881612bb057fe5b0502905060008460020b83830360020b81612bc757fe5b0560010190508062ffffff166001600160801b03801681612be457fe5b0493505050505b919050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612c2557600080fd5b565b4290565b60008060008460020b8660020b81612c3f57fe5b05905060008660020b128015612c6657508460020b8660020b81612c5f57fe5b0760020b15155b15612c7057600019015b8315612ce557600080612c82836144b6565b600182810b810b600090815260208d9052604090205460ff83169190911b80016000190190811680151597509294509092509085612cc757888360ff16860302612cda565b88612cd1826144c8565b840360ff168603025b965050505050612d63565b600080612cf4836001016144b6565b91509150600060018260ff166001901b031990506000818b60008660010b60010b8152602001908152602001600020541690508060001415955085612d4657888360ff0360ff16866001010102612d5c565b8883612d5183614568565b0360ff168660010101025b9650505050505b5094509492505050565b60008060008360020b12612d84578260020b612d8c565b8260020b6000035b9050620d89e8811115612dca576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b600060018216612dde57600160801b612df0565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615612e24576ffff97272373d413259a46990580e213a0260801c5b6004821615612e43576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615612e62576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615612e81576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615612ea0576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615612ebf576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615612ede576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615612efe576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615612f1e576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615612f3e576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615612f5e576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615612f7e576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615612f9e576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615612fbe576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615612fde576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615612fff576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b6202000082161561301f576e5d6af8dedb81196699c329225ee6040260801c5b6204000082161561303e576d2216e584f5fa1ea926041bedfe980260801c5b6208000082161561305b576b048a170391f7dc42444e8fa20260801c5b60008460020b131561307657806000198161307257fe5b0490505b64010000000081061561308a57600161308d565b60005b60ff16602082901c0192505050919050565b60008080806001600160a01b03808916908a1610158187128015906131245760006130d88989620f42400362ffffff16620f42406132d9565b9050826130f1576130ec8c8c8c6001614652565b6130fe565b6130fe8b8d8c60016146cd565b955085811061310f578a965061311e565b61311b8c8b838661478a565b96505b5061316e565b8161313b576131368b8b8b60006146cd565b613148565b6131488a8c8b6000614652565b935083886000031061315c5789955061316e565b61316b8b8a8a600003856147d6565b95505b6001600160a01b038a81169087161482156131d15780801561318d5750815b6131a35761319e878d8c60016146cd565b6131a5565b855b95508080156131b2575081155b6131c8576131c3878d8c6000614652565b6131ca565b845b945061321b565b8080156131db5750815b6131f1576131ec8c888c6001614652565b6131f3565b855b9550808015613200575081155b613216576132118c888c60006146cd565b613218565b845b94505b8115801561322b57508860000385115b15613237578860000394505b81801561325657508a6001600160a01b0316876001600160a01b031614155b15613265578589039350613282565b61327f868962ffffff168a620f42400362ffffff166141a9565b93505b50505095509550955095915050565b6000600160ff1b82106132a357600080fd5b5090565b808203828113156000831215146132bd57600080fd5b92915050565b818101828112156000831215146132bd57600080fd5b600080806000198587098686029250828110908390030390508061330f576000841161330457600080fd5b508290049050613382565b80841161331b57600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150505b9392505050565b60008063ffffffff8716613430576000898661ffff1661ffff81106133aa57fe5b60408051608081018252919092015463ffffffff8082168084526401000000008304600690810b810b900b6020850152600160581b83046001600160a01b031694840194909452600160f81b90910460ff16151560608301529092508a161461341c57613419818a8988614822565b90505b806020015181604001519250925050613510565b8688036000806134458c8c858c8c8c8c6148d2565b91509150816000015163ffffffff168363ffffffff161415613477578160200151826040015194509450505050613510565b805163ffffffff8481169116141561349f578060200151816040015194509450505050613510565b8151815160208085015190840151918390039286039163ffffffff80841692908516910360060b816134cd57fe5b05028460200151018263ffffffff168263ffffffff1686604001518660400151036001600160a01b031602816134ff57fe5b048560400151019650965050505050505b97509795505050505050565b600295860b860b60009081526020979097526040909620600181018054909503909455938301805490920390915560038201805463ffffffff600160d81b6001600160a01b036701000000000000008085048216909603169094027fffffffffff0000000000000000000000000000000000000000ffffffffffffff90921691909117600681810b90960390950b66ffffffffffffff1666ffffffffffffff199095169490941782810485169095039093160263ffffffff60d81b1990931692909217905554600160801b9004600f0b90565b60008082600f0b121561365457826001600160801b03168260000384039150816001600160801b03161061364f576040805162461bcd60e51b81526020600482015260026024820152614c5360f01b604482015290519081900360640190fd5b6132bd565b826001600160801b03168284019150816001600160801b031610156132bd576040805162461bcd60e51b81526020600482015260026024820152614c4160f01b604482015290519081900360640190fd5b60006401000276a36001600160a01b038316108015906136e1575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b613716576040805162461bcd60e51b81526020600482015260016024820152602960f91b604482015290519081900360640190fd5b77ffffffffffffffffffffffffffffffffffffffff00000000602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c979088119617909417909217179091171717608081106137b757607f810383901c91506137c1565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b146139c257886001600160a01b03166139a682612d6d565b6001600160a01b031611156139bb57816139bd565b805b6139c4565b815b9998505050505050505050565b6000806000898961ffff1661ffff81106139e757fe5b60408051608081018252919092015463ffffffff8082168084526401000000008304600690810b810b900b6020850152600160581b83046001600160a01b031694840194909452600160f81b90910460ff161515606083015290925089161415613a575788859250925050613510565b8461ffff168461ffff16118015613a7857506001850361ffff168961ffff16145b15613a8557839150613a89565b8491505b8161ffff168960010161ffff1681613a9d57fe5b069250613aac81898989614822565b8a8461ffff1661ffff8110613abd57fe5b825191018054602084015160408501516060909501511515600160f81b027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001600160a01b03909616600160581b027fff0000000000000000000000000000000000000000ffffffffffffffffffffff60069390930b66ffffffffffffff16640100000000026affffffffffffff000000001963ffffffff90971663ffffffff199095169490941795909516929092171692909217929092161790555097509795505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1781529251825160009485949389169392918291908083835b60208310613c025780518252601f199092019160209182019101613be3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613c64576040519150601f19603f3d011682016040523d82523d6000602084013e613c69565b606091505b5091509150818015613c97575080511580613c975750808060200190516020811015613c9457600080fd5b50515b613ccd576040805162461bcd60e51b81526020600482015260026024820152612a2360f11b604482015290519081900360640190fd5b5050505050565b604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b17815291518151600093849384936001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693919290918291908083835b60208310613d6d5780518252601f199092019160209182019101613d4e565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114613dcd576040519150601f19603f3d011682016040523d82523d6000602084013e613dd2565b606091505b5091509150818015613de657506020815110155b613def57600080fd5b808060200190516020811015613e0457600080fd5b50519250505090565b808201828110156132bd57600080fd5b604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b17815291518151600093849384936001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016939192909182919080838360208310613d6d5780518252601f199092019160209182019101613d4e565b6000808361ffff1611613ef3576040805162461bcd60e51b81526020600482015260016024820152604960f81b604482015290519081900360640190fd5b8261ffff168261ffff1611613f09575081613382565b825b8261ffff168161ffff161015613f4f576001858261ffff1661ffff8110613f2e57fe5b01805463ffffffff191663ffffffff92909216919091179055600101613f0b565b50909392505050565b80600f81900b8114612beb57600080fd5b6000806000613f76612bf0565b613f88846020015185604001516143a1565b6040805160e0810182526000546001600160a01b0381168252600160a01b8104600290810b810b900b602080840182905261ffff600160b81b8404811685870152600160c81b84048116606080870191909152600160d81b8504909116608086015260ff600160e81b8504811660a0870152600160f01b909404909316151560c08501528851908901519489015192890151939461402c9491939092909190614acf565b93508460600151600f0b6000146141a157846020015160020b816020015160020b12156140815761407a6140638660200151612d6d565b6140708760400151612d6d565b8760600151614c84565b92506141a1565b846040015160020b816020015160020b12156141775760045460408201516001600160801b03909116906140d3906140b7612c27565b60208501516060860151608087015160089493929187916139d1565b6000805461ffff60c81b1916600160c81b61ffff938416021761ffff60b81b1916600160b81b939092169290920217905581516040870151614123919061411990612d6d565b8860600151614c84565b93506141416141358760200151612d6d565b83516060890151614cc8565b92506141518187606001516135ef565b600480546001600160801b0319166001600160801b0392909216919091179055506141a1565b61419e6141878660200151612d6d565b6141948760400151612d6d565b8760600151614cc8565b91505b509193909250565b60006141b68484846132d9565b9050600082806141c257fe5b84860911156133825760001981106141d957600080fd5b6001019392505050565b6040805160609490941b6bffffffffffffffffffffffff1916602080860191909152600293840b60e890811b60348701529290930b90911b60378401528051808403601a018152603a90930181528251928201929092206000908152929052902090565b60608060008361ffff1611614287576040805162461bcd60e51b81526020600482015260016024820152604960f81b604482015290519081900360640190fd5b865167ffffffffffffffff8111801561429f57600080fd5b506040519080825280602002602001820160405280156142c9578160200160208202803683370190505b509150865167ffffffffffffffff811180156142e457600080fd5b5060405190808252806020026020018201604052801561430e578160200160208202803683370190505b50905060005b87518110156143945761433f8a8a8a848151811061432e57fe5b60200260200101518a8a8a8a613389565b84838151811061434b57fe5b6020026020010184848151811061435e57fe5b60200260200101826001600160a01b03166001600160a01b03168152508260060b60060b81525050508080600101915050614314565b5097509795505050505050565b8060020b8260020b126143e1576040805162461bcd60e51b8152602060048201526003602482015262544c5560e81b604482015290519081900360640190fd5b620d89e719600283900b1215614424576040805162461bcd60e51b8152602060048201526003602482015262544c4d60e81b604482015290519081900360640190fd5b620d89e8600282900b1315614466576040805162461bcd60e51b815260206004820152600360248201526254554d60e81b604482015290519081900360640190fd5b5050565b6040805160808101825263ffffffff9283168082526000602083018190529282019290925260016060909101819052835463ffffffff1916909117909116600160f81b17909155908190565b60020b600881901d9161010090910790565b60008082116144d657600080fd5b600160801b82106144e957608091821c91015b68010000000000000000821061450157604091821c91015b640100000000821061451557602091821c91015b62010000821061452757601091821c91015b610100821061453857600891821c91015b6010821061454857600491821c91015b6004821061455857600291821c91015b60028210612beb57600101919050565b600080821161457657600080fd5b5060ff6001600160801b0382161561459157607f1901614599565b608082901c91505b67ffffffffffffffff8216156145b257603f19016145ba565b604082901c91505b63ffffffff8216156145cf57601f19016145d7565b602082901c91505b61ffff8216156145ea57600f19016145f2565b601082901c91505b60ff821615614604576007190161460c565b600882901c91505b600f82161561461e5760031901614626565b600482901c91505b60038216156146385760011901614640565b600282901c91505b6001821615612beb5760001901919050565b6000836001600160a01b0316856001600160a01b03161115614672579293925b8161469f5761469a836001600160801b03168686036001600160a01b0316600160601b6132d9565b6146c2565b6146c2836001600160801b03168686036001600160a01b0316600160601b6141a9565b90505b949350505050565b6000836001600160a01b0316856001600160a01b031611156146ed579293925b7bffffffffffffffffffffffffffffffff000000000000000000000000606084901b166001600160a01b03868603811690871661472957600080fd5b8361475957866001600160a01b031661474c8383896001600160a01b03166132d9565b8161475357fe5b0461477f565b61477f6147708383896001600160a01b03166141a9565b886001600160a01b0316614cf7565b979650505050505050565b600080856001600160a01b0316116147a157600080fd5b6000846001600160801b0316116147b757600080fd5b816147c95761469a8585856001614d02565b6146c28585856001614de3565b600080856001600160a01b0316116147ed57600080fd5b6000846001600160801b03161161480357600080fd5b816148155761469a8585856000614de3565b6146c28585856000614d02565b61482a61564a565b600085600001518503905060405180608001604052808663ffffffff1681526020018263ffffffff168660020b0288602001510160060b81526020016000856001600160801b03161161487e576001614880565b845b6001600160801b031673ffffffff00000000000000000000000000000000608085901b16816148ab57fe5b048860400151016001600160a01b0316815260200160011515815250915050949350505050565b6148da61564a565b6148e261564a565b888561ffff1661ffff81106148f357fe5b60408051608081018252919092015463ffffffff81168083526401000000008204600690810b810b900b6020840152600160581b82046001600160a01b031693830193909352600160f81b900460ff1615156060820152925061495890899089614ed8565b15614990578663ffffffff16826000015163ffffffff16141561497a57613510565b8161498783898988614822565b91509150613510565b888361ffff168660010161ffff16816149a557fe5b0661ffff1661ffff81106149b557fe5b60408051608081018252929091015463ffffffff811683526401000000008104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b90910416151560608201819052909250614a6c57604080516080810182528a5463ffffffff811682526401000000008104600690810b810b900b6020830152600160581b81046001600160a01b031692820192909252600160f81b90910460ff161515606082015291505b614a7b88836000015189614ed8565b614ab2576040805162461bcd60e51b815260206004820152600360248201526213d31160ea1b604482015290519081900360640190fd5b614abf8989898887614f9b565b9150915097509795505050505050565b6000614ade60078787876141e3565b60015460025491925090600080600f87900b15614c24576000614aff612c27565b6000805460045492935090918291614b499160089186918591600160a01b810460020b9161ffff600160b81b83048116926001600160801b0390921691600160c81b900416613389565b9092509050614b8360058d8b8d8b8b87898b60007f000000000000000000000000000000000000000000000000000000000000000061513b565b9450614bba60058c8b8d8b8b87898b60017f000000000000000000000000000000000000000000000000000000000000000061513b565b93508415614bee57614bee60068d7f0000000000000000000000000000000000000000000000000000000000000000615325565b8315614c2057614c2060068c7f0000000000000000000000000000000000000000000000000000000000000000615325565b5050505b600080614c3660058c8c8b8a8a61538b565b9092509050614c47878a8484615437565b600089600f0b1215614c75578315614c6457614c6460058c6155cc565b8215614c7557614c7560058b6155cc565b50505050505095945050505050565b60008082600f0b12614caa57614ca5614ca085858560016146cd565b613291565b6146c5565b614cbd614ca085858560000360006146cd565b600003949350505050565b60008082600f0b12614ce457614ca5614ca08585856001614652565b614cbd614ca08585856000036000614652565b808204910615150190565b60008115614d755760006001600160a01b03841115614d3857614d3384600160601b876001600160801b03166132d9565b614d50565b6001600160801b038516606085901b81614d4e57fe5b045b9050614d6d614d686001600160a01b03881683613e0d565b6155f8565b9150506146c5565b60006001600160a01b03841115614da357614d9e84600160601b876001600160801b03166141a9565b614dba565b614dba606085901b6001600160801b038716614cf7565b905080866001600160a01b031611614dd157600080fd5b6001600160a01b0386160390506146c5565b600082614df15750836146c5565b7bffffffffffffffffffffffffffffffff000000000000000000000000606085901b168215614e91576001600160a01b03861684810290858281614e3157fe5b041415614e6257818101828110614e6057614e5683896001600160a01b0316836141a9565b93505050506146c5565b505b614e8882614e83878a6001600160a01b03168681614e7c57fe5b0490613e0d565b614cf7565b925050506146c5565b6001600160a01b03861684810290858281614ea857fe5b04148015614eb557508082115b614ebe57600080fd5b808203614e56614d68846001600160a01b038b16846141a9565b60008363ffffffff168363ffffffff1611158015614f0257508363ffffffff168263ffffffff1611155b15614f1e578163ffffffff168363ffffffff1611159050613382565b60008463ffffffff168463ffffffff1611614f46578363ffffffff1664010000000001614f4e565b8363ffffffff165b64ffffffffff16905060008563ffffffff168463ffffffff1611614f7f578363ffffffff1664010000000001614f87565b8363ffffffff165b64ffffffffff169091111595945050505050565b614fa361564a565b614fab61564a565b60008361ffff168560010161ffff1681614fc157fe5b0661ffff169050600060018561ffff16830103905060005b506002818301048961ffff87168281614fee57fe5b0661ffff8110614ffa57fe5b60408051608081018252929091015463ffffffff811683526401000000008104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b9091041615156060820181905290955061506557806001019250614fd9565b898661ffff16826001018161507657fe5b0661ffff811061508257fe5b60408051608081018252929091015463ffffffff811683526401000000008104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b909104161515606082015285519094506000906150ed908b908b614ed8565b905080801561510657506151068a8a8760000151614ed8565b15615111575061512e565b8061512157600182039250615128565b8160010193505b50614fd9565b5050509550959350505050565b60028a810b900b600090815260208c90526040812080546001600160801b031682615166828d6135ef565b9050846001600160801b0316816001600160801b031611156151b4576040805162461bcd60e51b81526020600482015260026024820152614c4f60f01b604482015290519081900360640190fd5b6001600160801b03828116159082161581141594501561528a578c60020b8e60020b1361525a57600183018b9055600283018a90556003830180547fffffffffff0000000000000000000000000000000000000000ffffffffffffff166701000000000000006001600160a01b038c16021766ffffffffffffff191666ffffffffffffff60068b900b161763ffffffff60d81b1916600160d81b63ffffffff8a16021790555b6003830180547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600160f81b1790555b82546001600160801b0319166001600160801b038216178355856152d35782546152ce906152c990600160801b9004600f90810b810b908f900b6132c3565b613f58565b6152f4565b82546152f4906152c990600160801b9004600f90810b810b908f900b6132a7565b8354600f9190910b6001600160801b03908116600160801b0291161790925550909c9b505050505050505050505050565b8060020b8260020b8161533457fe5b0760020b1561534257600080fd5b60008061535d8360020b8560020b8161535757fe5b056144b6565b600191820b820b60009081526020979097526040909620805460ff9097169190911b90951890945550505050565b600285810b80820b60009081526020899052604080822088850b850b83529082209193849391929184918291908a900b126153d1575050600182015460028301546153e4565b8360010154880391508360020154870390505b6000808b60020b8b60020b121561540657505060018301546002840154615419565b84600101548a0391508460020154890390505b92909803979097039b96909503949094039850939650505050505050565b6040805160a08101825285546001600160801b0390811682526001870154602083015260028701549282019290925260038601548083166060830152600160801b900490911660808201526000600f85900b6154d65781516001600160801b03166154ce576040805162461bcd60e51b815260206004820152600260248201526104e560f41b604482015290519081900360640190fd5b5080516154e5565b81516154e290866135ef565b90505b60006155098360200151860384600001516001600160801b0316600160801b6132d9565b9050600061552f8460400151860385600001516001600160801b0316600160801b6132d9565b905086600f0b6000146155565787546001600160801b0319166001600160801b0384161788555b60018801869055600288018590556001600160801b03821615158061558457506000816001600160801b0316115b156155c2576003880180546001600160801b031981166001600160801b039182168501821617808216600160801b9182900483168501909216021790555b5050505050505050565b600290810b810b6000908152602092909252604082208281556001810183905590810182905560030155565b806001600160a01b0381168114612beb57600080fd5b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b6040805160808101825260008082526020820181905291810182905260608101919091529056fea164736f6c6343000706000aa164736f6c6343000706000ac66a3fdf07232cdd185febcc6579d408c241b47ae2f9907d84be655141eeaecc"; - static readonly abi: ({ - inputs: never[]; - stateMutability: string; - type: string; - anonymous?: undefined; - name?: undefined; - outputs?: undefined; - } | { - anonymous: boolean; - inputs: { - indexed: boolean; - internalType: string; - name: string; - type: string; - }[]; - name: string; - type: string; - stateMutability?: undefined; - outputs?: undefined; - } | { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - anonymous?: undefined; - })[]; - static createInterface(): UniswapV3FactoryInterface; - static connect(address: string, signerOrProvider: Signer | Provider): UniswapV3Factory; -} diff --git a/dist2/types/types/v3/factories/UniswapV3Pool__factory.d.ts b/dist2/types/types/v3/factories/UniswapV3Pool__factory.d.ts deleted file mode 100644 index 8c8cc3ddc6e..00000000000 --- a/dist2/types/types/v3/factories/UniswapV3Pool__factory.d.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { Signer, ContractFactory, Overrides } from "ethers"; -import { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { UniswapV3Pool, UniswapV3PoolInterface } from "../UniswapV3Pool"; -export declare class UniswapV3Pool__factory extends ContractFactory { - constructor(signer?: Signer); - deploy(overrides?: Overrides & { - from?: string | Promise; - }): Promise; - getDeployTransaction(overrides?: Overrides & { - from?: string | Promise; - }): TransactionRequest; - attach(address: string): UniswapV3Pool; - connect(signer: Signer): UniswapV3Pool__factory; - static readonly bytecode = "0x6101606040523480156200001257600080fd5b503060601b60805260408051630890357360e41b81529051600091339163890357309160048082019260a092909190829003018186803b1580156200005657600080fd5b505afa1580156200006b573d6000803e3d6000fd5b505050506040513d60a08110156200008257600080fd5b508051602080830151604084015160608086015160809096015160e896871b6001600160e81b0319166101005291811b6001600160601b031990811660e05292811b831660c0529390931b1660a052600282810b900b90921b610120529150620000f79082906200010f811b62002b8417901c565b60801b6001600160801b03191661014052506200017d565b60008082600281900b620d89e719816200012557fe5b05029050600083600281900b620d89e8816200013d57fe5b0502905060008460020b83830360020b816200015557fe5b0560010190508062ffffff166001600160801b038016816200017357fe5b0495945050505050565b60805160601c60a05160601c60c05160601c60e05160601c6101005160e81c6101205160e81c6101405160801c61567e6200024a60003980611fee5280614b5f5280614b96525080610c0052806128fd5280614bca5280614bfc525080610cef52806119cb5280611a0252806129455250806111c75280611a855280611ef4528061244452806129215280613e6b5250806108d252806112f55280611a545280611e8e52806123be5280613d2252508061207b528061227d52806128d9525080612bfb525061567e6000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c806370cf754a116100ee578063c45a015511610097578063ddca3f4311610071578063ddca3f4314610800578063f305839914610820578063f30dba9314610828578063f637731d146108aa576101ae565b8063c45a0155146107d1578063d0c93a7c146107d9578063d21220a7146107f8576101ae565b8063883bdbfd116100c8578063883bdbfd14610633578063a34123a71461073c578063a38807f214610776576101ae565b806370cf754a146105c65780638206a4d1146105ce57806385b66729146105f6576101ae565b80633850c7bd1161015b578063490e6cbc11610135578063490e6cbc146104705780634f1eb3d8146104fc578063514ea4bf1461054d5780635339c296146105a6576101ae565b80633850c7bd1461035b5780633c8a7d8d146103b45780634614131914610456576101ae565b80631ad8b03b1161018c5780631ad8b03b146102aa578063252c09d7146102e157806332148f6714610338576101ae565b80630dfe1681146101b3578063128acb08146101d75780631a68650214610286575b600080fd5b6101bb6108d0565b604080516001600160a01b039092168252519081900360200190f35b61026d600480360360a08110156101ed57600080fd5b6001600160a01b0382358116926020810135151592604082013592606083013516919081019060a08101608082013564010000000081111561022e57600080fd5b82018360208201111561024057600080fd5b8035906020019184600183028401116401000000008311171561026257600080fd5b5090925090506108f4565b6040805192835260208301919091528051918290030190f35b61028e6114ad565b604080516001600160801b039092168252519081900360200190f35b6102b26114bc565b60405180836001600160801b03168152602001826001600160801b031681526020019250505060405180910390f35b6102fe600480360360208110156102f757600080fd5b50356114d6565b6040805163ffffffff909516855260069390930b60208501526001600160a01b039091168383015215156060830152519081900360800190f35b6103596004803603602081101561034e57600080fd5b503561ffff1661151c565b005b610363611616565b604080516001600160a01b03909816885260029690960b602088015261ffff9485168787015292841660608701529216608085015260ff90911660a0840152151560c0830152519081900360e00190f35b61026d600480360360a08110156103ca57600080fd5b6001600160a01b03823516916020810135600290810b92604083013590910b916001600160801b036060820135169181019060a08101608082013564010000000081111561041757600080fd5b82018360208201111561042957600080fd5b8035906020019184600183028401116401000000008311171561044b57600080fd5b509092509050611666565b61045e611922565b60408051918252519081900360200190f35b6103596004803603608081101561048657600080fd5b6001600160a01b0382351691602081013591604082013591908101906080810160608201356401000000008111156104bd57600080fd5b8201836020820111156104cf57600080fd5b803590602001918460018302840111640100000000831117156104f157600080fd5b509092509050611928565b6102b2600480360360a081101561051257600080fd5b506001600160a01b03813516906020810135600290810b91604081013590910b906001600160801b0360608201358116916080013516611d83565b61056a6004803603602081101561056357600080fd5b5035611f9d565b604080516001600160801b0396871681526020810195909552848101939093529084166060840152909216608082015290519081900360a00190f35b61045e600480360360208110156105bc57600080fd5b503560010b611fda565b61028e611fec565b610359600480360360408110156105e457600080fd5b5060ff81358116916020013516612010565b6102b26004803603606081101561060c57600080fd5b506001600160a01b03813516906001600160801b036020820135811691604001351661220f565b6106a36004803603602081101561064957600080fd5b81019060208101813564010000000081111561066457600080fd5b82018360208201111561067657600080fd5b8035906020019184602083028401116401000000008311171561069857600080fd5b5090925090506124dc565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156106e75781810151838201526020016106cf565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561072657818101518382015260200161070e565b5050505090500194505050505060405180910390f35b61026d6004803603606081101561075257600080fd5b508035600290810b91602081013590910b90604001356001600160801b0316612569565b6107a06004803603604081101561078c57600080fd5b508035600290810b9160200135900b6126e0565b6040805160069490940b84526001600160a01b03909216602084015263ffffffff1682820152519081900360600190f35b6101bb6128d7565b6107e16128fb565b6040805160029290920b8252519081900360200190f35b6101bb61291f565b610808612943565b6040805162ffffff9092168252519081900360200190f35b61045e612967565b6108486004803603602081101561083e57600080fd5b503560020b61296d565b604080516001600160801b039099168952600f9790970b602089015287870195909552606087019390935260069190910b60808601526001600160a01b031660a085015263ffffffff1660c0840152151560e083015251908190036101000190f35b610359600480360360208110156108c057600080fd5b50356001600160a01b03166129db565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806108ff612bf0565b85610936576040805162461bcd60e51b8152602060048201526002602482015261415360f01b604482015290519081900360640190fd5b6040805160e0810182526000546001600160a01b0381168252600160a01b8104600290810b810b900b602083015261ffff600160b81b8204811693830193909352600160c81b810483166060830152600160d81b8104909216608082015260ff600160e81b8304811660a0830152600160f01b909204909116151560c082018190526109ef576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b87610a3a5780600001516001600160a01b0316866001600160a01b0316118015610a35575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038716105b610a6c565b80600001516001600160a01b0316866001600160a01b0316108015610a6c57506401000276a36001600160a01b038716115b610aa3576040805162461bcd60e51b815260206004820152600360248201526214d41360ea1b604482015290519081900360640190fd5b6000805460ff60f01b191681556040805160c08101909152808a610ad25760048460a0015160ff16901c610ae5565b60108460a0015160ff1681610ae357fe5b065b60ff1681526004546001600160801b03166020820152604001610b06612c27565b63ffffffff168152602001600060060b815260200160006001600160a01b031681526020016000151581525090506000808913905060006040518060e001604052808b81526020016000815260200185600001516001600160a01b03168152602001856020015160020b81526020018c610b8257600254610b86565b6001545b815260200160006001600160801b0316815260200184602001516001600160801b031681525090505b805115801590610bd55750886001600160a01b031681604001516001600160a01b031614155b15610f9f57610be261560e565b60408201516001600160a01b031681526060820151610c25906006907f00000000000000000000000000000000000000000000000000000000000000008f612c2b565b15156040830152600290810b810b60208301819052620d89e719910b1215610c5657620d89e7196020820152610c75565b6020810151620d89e860029190910b1315610c7557620d89e860208201525b610c828160200151612d6d565b6001600160a01b031660608201526040820151610d13908d610cbc578b6001600160a01b031683606001516001600160a01b031611610cd6565b8b6001600160a01b031683606001516001600160a01b0316105b610ce4578260600151610ce6565b8b5b60c085015185517f000000000000000000000000000000000000000000000000000000000000000061309f565b60c085015260a084015260808301526001600160a01b031660408301528215610d7557610d498160c00151826080015101613291565b825103825260a0810151610d6b90610d6090613291565b6020840151906132a7565b6020830152610db0565b610d828160a00151613291565b825101825260c08101516080820151610daa91610d9f9101613291565b6020840151906132c3565b60208301525b835160ff1615610df6576000846000015160ff168260c0015181610dd057fe5b60c0840180519290910491829003905260a0840180519091016001600160801b03169052505b60c08201516001600160801b031615610e3557610e298160c00151600160801b8460c001516001600160801b03166132d9565b60808301805190910190525b80606001516001600160a01b031682604001516001600160a01b03161415610f5e57806040015115610f35578360a00151610ebf57610e9d846040015160008760200151886040015188602001518a606001516008613389909695949392919063ffffffff16565b6001600160a01b03166080860152600690810b900b6060850152600160a08501525b6000610f0b82602001518e610ed657600154610edc565b84608001515b8f610eeb578560800151610eef565b6002545b608089015160608a015160408b0151600595949392919061351c565b90508c15610f17576000035b610f258360c00151826135ef565b6001600160801b031660c0840152505b8b610f44578060200151610f4d565b60018160200151035b600290810b900b6060830152610f99565b80600001516001600160a01b031682604001516001600160a01b031614610f9957610f8c82604001516136a5565b600290810b900b60608301525b50610baf565b836020015160020b816060015160020b1461107a57600080610fed86604001518660400151886020015188602001518a606001518b6080015160086139d1909695949392919063ffffffff16565b604085015160608601516000805461ffff60c81b1916600160c81b61ffff958616021761ffff60b81b1916600160b81b95909416949094029290921762ffffff60a01b1916600160a01b62ffffff60029490940b93909316929092029190911773ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03909116179055506110ac9050565b60408101516000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039092169190911790555b8060c001516001600160801b031683602001516001600160801b0316146110f25760c0810151600480546001600160801b0319166001600160801b039092169190911790555b8a1561114257608081015160015560a08101516001600160801b03161561113d5760a0810151600380546001600160801b031981166001600160801b03918216909301169190911790555b611188565b608081015160025560a08101516001600160801b0316156111885760a0810151600380546001600160801b03808216600160801b92839004821690940116029190911790555b8115158b1515146111a157602081015181518b036111ae565b80600001518a0381602001515b90965094508a156112e75760008512156111f0576111f07f00000000000000000000000000000000000000000000000000000000000000008d87600003613b86565b60006111fa613cd4565b9050336001600160a01b031663fa461e3388888c8c6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b15801561127e57600080fd5b505af1158015611292573d6000803e3d6000fd5b5050505061129e613cd4565b6112a88289613e0d565b11156112e1576040805162461bcd60e51b815260206004820152600360248201526249494160e81b604482015290519081900360640190fd5b50611411565b600086121561131e5761131e7f00000000000000000000000000000000000000000000000000000000000000008d88600003613b86565b6000611328613e1d565b9050336001600160a01b031663fa461e3388888c8c6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b1580156113ac57600080fd5b505af11580156113c0573d6000803e3d6000fd5b505050506113cc613e1d565b6113d68288613e0d565b111561140f576040805162461bcd60e51b815260206004820152600360248201526249494160e81b604482015290519081900360640190fd5b505b60408082015160c083015160608085015184518b8152602081018b90526001600160a01b03948516818701526001600160801b039093169183019190915260020b60808201529151908e169133917fc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca679181900360a00190a350506000805460ff60f01b1916600160f01b17905550919890975095505050505050565b6004546001600160801b031681565b6003546001600160801b0380821691600160801b90041682565b60088161ffff81106114e757600080fd5b015463ffffffff81169150640100000000810460060b90600160581b81046001600160a01b031690600160f81b900460ff1684565b600054600160f01b900460ff16611560576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b19169055611575612bf0565b60008054600160d81b900461ffff169061159160088385613eb5565b6000805461ffff808416600160d81b810261ffff60d81b19909316929092179092559192508316146115fe576040805161ffff80851682528316602082015281517fac49e518f90a358f652e4400164f05a5d8f7e35e7747279bc3a93dbf584e125a929181900390910190a15b50506000805460ff60f01b1916600160f01b17905550565b6000546001600160a01b03811690600160a01b810460020b9061ffff600160b81b8204811691600160c81b8104821691600160d81b8204169060ff600160e81b8204811691600160f01b90041687565b600080548190600160f01b900460ff166116ad576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b191690556001600160801b0385166116cd57600080fd5b60008061171b60405180608001604052808c6001600160a01b031681526020018b60020b81526020018a60020b81526020016117118a6001600160801b0316613f58565b600f0b9052613f69565b9250925050819350809250600080600086111561173d5761173a613cd4565b91505b841561174e5761174b613e1d565b90505b336001600160a01b031663d348799787878b8b6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b1580156117d057600080fd5b505af11580156117e4573d6000803e3d6000fd5b50505050600086111561183b576117f9613cd4565b6118038388613e0d565b111561183b576040805162461bcd60e51b815260206004820152600260248201526104d360f41b604482015290519081900360640190fd5b841561188b57611849613e1d565b6118538287613e0d565b111561188b576040805162461bcd60e51b81526020600482015260026024820152614d3160f01b604482015290519081900360640190fd5b8960020b8b60020b8d6001600160a01b03167f7a53080ba414158be7ec69b987b5fb7d07dee101fe85488f0853ae16239d0bde338d8b8b60405180856001600160a01b03168152602001846001600160801b0316815260200183815260200182815260200194505050505060405180910390a450506000805460ff60f01b1916600160f01b17905550919890975095505050505050565b60025481565b600054600160f01b900460ff1661196c576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b19169055611981612bf0565b6004546001600160801b0316806119c3576040805162461bcd60e51b81526020600482015260016024820152601360fa1b604482015290519081900360640190fd5b60006119f8867f000000000000000000000000000000000000000000000000000000000000000062ffffff16620f42406141a9565b90506000611a2f867f000000000000000000000000000000000000000000000000000000000000000062ffffff16620f42406141a9565b90506000611a3b613cd4565b90506000611a47613e1d565b90508815611a7a57611a7a7f00000000000000000000000000000000000000000000000000000000000000008b8b613b86565b8715611aab57611aab7f00000000000000000000000000000000000000000000000000000000000000008b8a613b86565b336001600160a01b031663e9cbafb085858a8a6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b158015611b2d57600080fd5b505af1158015611b41573d6000803e3d6000fd5b505050506000611b4f613cd4565b90506000611b5b613e1d565b905081611b688588613e0d565b1115611ba0576040805162461bcd60e51b8152602060048201526002602482015261046360f41b604482015290519081900360640190fd5b80611bab8487613e0d565b1115611be3576040805162461bcd60e51b8152602060048201526002602482015261463160f01b604482015290519081900360640190fd5b8382038382038115611c725760008054600160e81b9004600f16908115611c16578160ff168481611c1057fe5b04611c19565b60005b90506001600160801b03811615611c4c57600380546001600160801b038082168401166001600160801b03199091161790555b611c66818503600160801b8d6001600160801b03166132d9565b60018054909101905550505b8015611cfd5760008054600160e81b900460041c600f16908115611ca2578160ff168381611c9c57fe5b04611ca5565b60005b90506001600160801b03811615611cd757600380546001600160801b03600160801b8083048216850182160291161790555b611cf1818403600160801b8d6001600160801b03166132d9565b60028054909101905550505b8d6001600160a01b0316336001600160a01b03167fbdbdb71d7860376ba52b25a5028beea23581364a40522f6bcfb86bb1f2dca6338f8f86866040518085815260200184815260200183815260200182815260200194505050505060405180910390a350506000805460ff60f01b1916600160f01b179055505050505050505050505050565b600080548190600160f01b900460ff16611dca576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b19168155611de460073389896141e3565b60038101549091506001600160801b0390811690861611611e055784611e14565b60038101546001600160801b03165b60038201549093506001600160801b03600160801b909104811690851611611e3c5783611e52565b6003810154600160801b90046001600160801b03165b91506001600160801b03831615611eb7576003810180546001600160801b031981166001600160801b03918216869003821617909155611eb7907f0000000000000000000000000000000000000000000000000000000000000000908a908616613b86565b6001600160801b03821615611f1d576003810180546001600160801b03600160801b808304821686900382160291811691909117909155611f1d907f0000000000000000000000000000000000000000000000000000000000000000908a908516613b86565b604080516001600160a01b038a1681526001600160801b0380861660208301528416818301529051600288810b92908a900b9133917f70935338e69775456a85ddef226c395fb668b63fa0115f5f20610b388e6ca9c0919081900360600190a4506000805460ff60f01b1916600160f01b17905590969095509350505050565b60076020526000908152604090208054600182015460028301546003909301546001600160801b0392831693919281811691600160801b90041685565b60066020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600054600160f01b900460ff16612054576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b1916905560408051638da5cb5b60e01b815290516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691638da5cb5b916004808301926020929190829003018186803b1580156120c157600080fd5b505afa1580156120d5573d6000803e3d6000fd5b505050506040513d60208110156120eb57600080fd5b50516001600160a01b0316331461210157600080fd5b60ff82161580612124575060048260ff16101580156121245750600a8260ff1611155b801561214e575060ff8116158061214e575060048160ff161015801561214e5750600a8160ff1611155b61215757600080fd5b60008054610ff0600484901b16840160ff908116600160e81b9081027fffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841617909355919004167f973d8d92bb299f4af6ce49b52a8adb85ae46b9f214c4c4fc06ac77401237b1336010826040805160ff9390920683168252600f600486901c16602083015286831682820152918516606082015290519081900360800190a150506000805460ff60f01b1916600160f01b17905550565b600080548190600160f01b900460ff16612256576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b1916905560408051638da5cb5b60e01b815290516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691638da5cb5b916004808301926020929190829003018186803b1580156122c357600080fd5b505afa1580156122d7573d6000803e3d6000fd5b505050506040513d60208110156122ed57600080fd5b50516001600160a01b0316331461230357600080fd5b6003546001600160801b039081169085161161231f578361232c565b6003546001600160801b03165b6003549092506001600160801b03600160801b9091048116908416116123525782612366565b600354600160801b90046001600160801b03165b90506001600160801b038216156123e7576003546001600160801b038381169116141561239557600019909101905b600380546001600160801b031981166001600160801b039182168590038216179091556123e7907f00000000000000000000000000000000000000000000000000000000000000009087908516613b86565b6001600160801b0381161561246d576003546001600160801b03828116600160801b90920416141561241857600019015b600380546001600160801b03600160801b80830482168590038216029181169190911790915561246d907f00000000000000000000000000000000000000000000000000000000000000009087908416613b86565b604080516001600160801b0380851682528316602082015281516001600160a01b0388169233927f596b573906218d3411850b26a6b437d6c4522fdb43d2d2386263f86d50b8b151929081900390910190a36000805460ff60f01b1916600160f01b1790559094909350915050565b6060806124e7612bf0565b61255e6124f2612c27565b858580806020026020016040519081016040528093929190818152602001838360200280828437600092018290525054600454600896959450600160a01b820460020b935061ffff600160b81b8304811693506001600160801b0390911691600160c81b900416614247565b915091509250929050565b600080548190600160f01b900460ff166125b0576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b1916815560408051608081018252338152600288810b602083015287900b918101919091528190819061260990606081016125fc6001600160801b038a16613f58565b600003600f0b9052613f69565b925092509250816000039450806000039350600085118061262a5750600084115b15612669576003830180546001600160801b038082168089018216600160801b93849004831689019092169092029091176001600160801b0319161790555b604080516001600160801b0388168152602081018790528082018690529051600289810b92908b900b9133917f0c396cd989a39f4459b5fa1aed6a9a8dcdbc45908acfd67e028cd568da98982c919081900360600190a450506000805460ff60f01b1916600160f01b179055509094909350915050565b60008060006126ed612bf0565b6126f785856143a1565b600285810b810b60009081526005602052604080822087840b90930b825281206003830154600681900b9367010000000000000082046001600160a01b0316928492600160d81b810463ffffffff169284929091600160f81b900460ff168061275f57600080fd5b6003820154600681900b985067010000000000000081046001600160a01b03169650600160d81b810463ffffffff169450600160f81b900460ff16806127a457600080fd5b50506040805160e0810182526000546001600160a01b0381168252600160a01b8104600290810b810b810b6020840181905261ffff600160b81b8404811695850195909552600160c81b830485166060850152600160d81b8304909416608084015260ff600160e81b8304811660a0850152600160f01b909204909116151560c08301529093508e810b91900b1215905061284d575093909403965090039350900390506128d0565b8a60020b816020015160020b12156128c1576000612869612c27565b602083015160408401516004546060860151939450600093849361289f936008938893879392916001600160801b031690613389565b9a9003989098039b5050949096039290920396509091030392506128d0915050565b50949093039650039350900390505b9250925092565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60015481565b60056020526000908152604090208054600182015460028301546003909301546001600160801b03831693600160801b909304600f0b9290600681900b9067010000000000000081046001600160a01b031690600160d81b810463ffffffff1690600160f81b900460ff1688565b6000546001600160a01b031615612a1e576040805162461bcd60e51b8152602060048201526002602482015261414960f01b604482015290519081900360640190fd5b6000612a29826136a5565b9050600080612a41612a39612c27565b60089061446a565b6040805160e0810182526001600160a01b038816808252600288810b6020808501829052600085870181905261ffff898116606088018190529089166080880181905260a08801839052600160c0909801979097528154600160f01b73ffffffffffffffffffffffffffffffffffffffff19909116871762ffffff60a01b1916600160a01b62ffffff9787900b9790971696909602959095177fffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffff16600160c81b9091021761ffff60d81b1916600160d81b909602959095177fff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1692909217909355835191825281019190915281519395509193507f98636036cb66a9c19a37435efc1e90142190214e8abeb821bdba3f2990dd4c9592918290030190a150505050565b60008082600281900b620d89e71981612b9957fe5b05029050600083600281900b620d89e881612bb057fe5b0502905060008460020b83830360020b81612bc757fe5b0560010190508062ffffff166001600160801b03801681612be457fe5b0493505050505b919050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612c2557600080fd5b565b4290565b60008060008460020b8660020b81612c3f57fe5b05905060008660020b128015612c6657508460020b8660020b81612c5f57fe5b0760020b15155b15612c7057600019015b8315612ce557600080612c82836144b6565b600182810b810b600090815260208d9052604090205460ff83169190911b80016000190190811680151597509294509092509085612cc757888360ff16860302612cda565b88612cd1826144c8565b840360ff168603025b965050505050612d63565b600080612cf4836001016144b6565b91509150600060018260ff166001901b031990506000818b60008660010b60010b8152602001908152602001600020541690508060001415955085612d4657888360ff0360ff16866001010102612d5c565b8883612d5183614568565b0360ff168660010101025b9650505050505b5094509492505050565b60008060008360020b12612d84578260020b612d8c565b8260020b6000035b9050620d89e8811115612dca576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b600060018216612dde57600160801b612df0565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615612e24576ffff97272373d413259a46990580e213a0260801c5b6004821615612e43576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615612e62576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615612e81576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615612ea0576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615612ebf576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615612ede576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615612efe576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615612f1e576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615612f3e576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615612f5e576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615612f7e576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615612f9e576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615612fbe576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615612fde576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615612fff576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b6202000082161561301f576e5d6af8dedb81196699c329225ee6040260801c5b6204000082161561303e576d2216e584f5fa1ea926041bedfe980260801c5b6208000082161561305b576b048a170391f7dc42444e8fa20260801c5b60008460020b131561307657806000198161307257fe5b0490505b64010000000081061561308a57600161308d565b60005b60ff16602082901c0192505050919050565b60008080806001600160a01b03808916908a1610158187128015906131245760006130d88989620f42400362ffffff16620f42406132d9565b9050826130f1576130ec8c8c8c6001614652565b6130fe565b6130fe8b8d8c60016146cd565b955085811061310f578a965061311e565b61311b8c8b838661478a565b96505b5061316e565b8161313b576131368b8b8b60006146cd565b613148565b6131488a8c8b6000614652565b935083886000031061315c5789955061316e565b61316b8b8a8a600003856147d6565b95505b6001600160a01b038a81169087161482156131d15780801561318d5750815b6131a35761319e878d8c60016146cd565b6131a5565b855b95508080156131b2575081155b6131c8576131c3878d8c6000614652565b6131ca565b845b945061321b565b8080156131db5750815b6131f1576131ec8c888c6001614652565b6131f3565b855b9550808015613200575081155b613216576132118c888c60006146cd565b613218565b845b94505b8115801561322b57508860000385115b15613237578860000394505b81801561325657508a6001600160a01b0316876001600160a01b031614155b15613265578589039350613282565b61327f868962ffffff168a620f42400362ffffff166141a9565b93505b50505095509550955095915050565b6000600160ff1b82106132a357600080fd5b5090565b808203828113156000831215146132bd57600080fd5b92915050565b818101828112156000831215146132bd57600080fd5b600080806000198587098686029250828110908390030390508061330f576000841161330457600080fd5b508290049050613382565b80841161331b57600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150505b9392505050565b60008063ffffffff8716613430576000898661ffff1661ffff81106133aa57fe5b60408051608081018252919092015463ffffffff8082168084526401000000008304600690810b810b900b6020850152600160581b83046001600160a01b031694840194909452600160f81b90910460ff16151560608301529092508a161461341c57613419818a8988614822565b90505b806020015181604001519250925050613510565b8688036000806134458c8c858c8c8c8c6148d2565b91509150816000015163ffffffff168363ffffffff161415613477578160200151826040015194509450505050613510565b805163ffffffff8481169116141561349f578060200151816040015194509450505050613510565b8151815160208085015190840151918390039286039163ffffffff80841692908516910360060b816134cd57fe5b05028460200151018263ffffffff168263ffffffff1686604001518660400151036001600160a01b031602816134ff57fe5b048560400151019650965050505050505b97509795505050505050565b600295860b860b60009081526020979097526040909620600181018054909503909455938301805490920390915560038201805463ffffffff600160d81b6001600160a01b036701000000000000008085048216909603169094027fffffffffff0000000000000000000000000000000000000000ffffffffffffff90921691909117600681810b90960390950b66ffffffffffffff1666ffffffffffffff199095169490941782810485169095039093160263ffffffff60d81b1990931692909217905554600160801b9004600f0b90565b60008082600f0b121561365457826001600160801b03168260000384039150816001600160801b03161061364f576040805162461bcd60e51b81526020600482015260026024820152614c5360f01b604482015290519081900360640190fd5b6132bd565b826001600160801b03168284019150816001600160801b031610156132bd576040805162461bcd60e51b81526020600482015260026024820152614c4160f01b604482015290519081900360640190fd5b60006401000276a36001600160a01b038316108015906136e1575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b613716576040805162461bcd60e51b81526020600482015260016024820152602960f91b604482015290519081900360640190fd5b77ffffffffffffffffffffffffffffffffffffffff00000000602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c979088119617909417909217179091171717608081106137b757607f810383901c91506137c1565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b146139c257886001600160a01b03166139a682612d6d565b6001600160a01b031611156139bb57816139bd565b805b6139c4565b815b9998505050505050505050565b6000806000898961ffff1661ffff81106139e757fe5b60408051608081018252919092015463ffffffff8082168084526401000000008304600690810b810b900b6020850152600160581b83046001600160a01b031694840194909452600160f81b90910460ff161515606083015290925089161415613a575788859250925050613510565b8461ffff168461ffff16118015613a7857506001850361ffff168961ffff16145b15613a8557839150613a89565b8491505b8161ffff168960010161ffff1681613a9d57fe5b069250613aac81898989614822565b8a8461ffff1661ffff8110613abd57fe5b825191018054602084015160408501516060909501511515600160f81b027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001600160a01b03909616600160581b027fff0000000000000000000000000000000000000000ffffffffffffffffffffff60069390930b66ffffffffffffff16640100000000026affffffffffffff000000001963ffffffff90971663ffffffff199095169490941795909516929092171692909217929092161790555097509795505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1781529251825160009485949389169392918291908083835b60208310613c025780518252601f199092019160209182019101613be3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613c64576040519150601f19603f3d011682016040523d82523d6000602084013e613c69565b606091505b5091509150818015613c97575080511580613c975750808060200190516020811015613c9457600080fd5b50515b613ccd576040805162461bcd60e51b81526020600482015260026024820152612a2360f11b604482015290519081900360640190fd5b5050505050565b604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b17815291518151600093849384936001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693919290918291908083835b60208310613d6d5780518252601f199092019160209182019101613d4e565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114613dcd576040519150601f19603f3d011682016040523d82523d6000602084013e613dd2565b606091505b5091509150818015613de657506020815110155b613def57600080fd5b808060200190516020811015613e0457600080fd5b50519250505090565b808201828110156132bd57600080fd5b604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b17815291518151600093849384936001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016939192909182919080838360208310613d6d5780518252601f199092019160209182019101613d4e565b6000808361ffff1611613ef3576040805162461bcd60e51b81526020600482015260016024820152604960f81b604482015290519081900360640190fd5b8261ffff168261ffff1611613f09575081613382565b825b8261ffff168161ffff161015613f4f576001858261ffff1661ffff8110613f2e57fe5b01805463ffffffff191663ffffffff92909216919091179055600101613f0b565b50909392505050565b80600f81900b8114612beb57600080fd5b6000806000613f76612bf0565b613f88846020015185604001516143a1565b6040805160e0810182526000546001600160a01b0381168252600160a01b8104600290810b810b900b602080840182905261ffff600160b81b8404811685870152600160c81b84048116606080870191909152600160d81b8504909116608086015260ff600160e81b8504811660a0870152600160f01b909404909316151560c08501528851908901519489015192890151939461402c9491939092909190614acf565b93508460600151600f0b6000146141a157846020015160020b816020015160020b12156140815761407a6140638660200151612d6d565b6140708760400151612d6d565b8760600151614c84565b92506141a1565b846040015160020b816020015160020b12156141775760045460408201516001600160801b03909116906140d3906140b7612c27565b60208501516060860151608087015160089493929187916139d1565b6000805461ffff60c81b1916600160c81b61ffff938416021761ffff60b81b1916600160b81b939092169290920217905581516040870151614123919061411990612d6d565b8860600151614c84565b93506141416141358760200151612d6d565b83516060890151614cc8565b92506141518187606001516135ef565b600480546001600160801b0319166001600160801b0392909216919091179055506141a1565b61419e6141878660200151612d6d565b6141948760400151612d6d565b8760600151614cc8565b91505b509193909250565b60006141b68484846132d9565b9050600082806141c257fe5b84860911156133825760001981106141d957600080fd5b6001019392505050565b6040805160609490941b6bffffffffffffffffffffffff1916602080860191909152600293840b60e890811b60348701529290930b90911b60378401528051808403601a018152603a90930181528251928201929092206000908152929052902090565b60608060008361ffff1611614287576040805162461bcd60e51b81526020600482015260016024820152604960f81b604482015290519081900360640190fd5b865167ffffffffffffffff8111801561429f57600080fd5b506040519080825280602002602001820160405280156142c9578160200160208202803683370190505b509150865167ffffffffffffffff811180156142e457600080fd5b5060405190808252806020026020018201604052801561430e578160200160208202803683370190505b50905060005b87518110156143945761433f8a8a8a848151811061432e57fe5b60200260200101518a8a8a8a613389565b84838151811061434b57fe5b6020026020010184848151811061435e57fe5b60200260200101826001600160a01b03166001600160a01b03168152508260060b60060b81525050508080600101915050614314565b5097509795505050505050565b8060020b8260020b126143e1576040805162461bcd60e51b8152602060048201526003602482015262544c5560e81b604482015290519081900360640190fd5b620d89e719600283900b1215614424576040805162461bcd60e51b8152602060048201526003602482015262544c4d60e81b604482015290519081900360640190fd5b620d89e8600282900b1315614466576040805162461bcd60e51b815260206004820152600360248201526254554d60e81b604482015290519081900360640190fd5b5050565b6040805160808101825263ffffffff9283168082526000602083018190529282019290925260016060909101819052835463ffffffff1916909117909116600160f81b17909155908190565b60020b600881901d9161010090910790565b60008082116144d657600080fd5b600160801b82106144e957608091821c91015b68010000000000000000821061450157604091821c91015b640100000000821061451557602091821c91015b62010000821061452757601091821c91015b610100821061453857600891821c91015b6010821061454857600491821c91015b6004821061455857600291821c91015b60028210612beb57600101919050565b600080821161457657600080fd5b5060ff6001600160801b0382161561459157607f1901614599565b608082901c91505b67ffffffffffffffff8216156145b257603f19016145ba565b604082901c91505b63ffffffff8216156145cf57601f19016145d7565b602082901c91505b61ffff8216156145ea57600f19016145f2565b601082901c91505b60ff821615614604576007190161460c565b600882901c91505b600f82161561461e5760031901614626565b600482901c91505b60038216156146385760011901614640565b600282901c91505b6001821615612beb5760001901919050565b6000836001600160a01b0316856001600160a01b03161115614672579293925b8161469f5761469a836001600160801b03168686036001600160a01b0316600160601b6132d9565b6146c2565b6146c2836001600160801b03168686036001600160a01b0316600160601b6141a9565b90505b949350505050565b6000836001600160a01b0316856001600160a01b031611156146ed579293925b7bffffffffffffffffffffffffffffffff000000000000000000000000606084901b166001600160a01b03868603811690871661472957600080fd5b8361475957866001600160a01b031661474c8383896001600160a01b03166132d9565b8161475357fe5b0461477f565b61477f6147708383896001600160a01b03166141a9565b886001600160a01b0316614cf7565b979650505050505050565b600080856001600160a01b0316116147a157600080fd5b6000846001600160801b0316116147b757600080fd5b816147c95761469a8585856001614d02565b6146c28585856001614de3565b600080856001600160a01b0316116147ed57600080fd5b6000846001600160801b03161161480357600080fd5b816148155761469a8585856000614de3565b6146c28585856000614d02565b61482a61564a565b600085600001518503905060405180608001604052808663ffffffff1681526020018263ffffffff168660020b0288602001510160060b81526020016000856001600160801b03161161487e576001614880565b845b6001600160801b031673ffffffff00000000000000000000000000000000608085901b16816148ab57fe5b048860400151016001600160a01b0316815260200160011515815250915050949350505050565b6148da61564a565b6148e261564a565b888561ffff1661ffff81106148f357fe5b60408051608081018252919092015463ffffffff81168083526401000000008204600690810b810b900b6020840152600160581b82046001600160a01b031693830193909352600160f81b900460ff1615156060820152925061495890899089614ed8565b15614990578663ffffffff16826000015163ffffffff16141561497a57613510565b8161498783898988614822565b91509150613510565b888361ffff168660010161ffff16816149a557fe5b0661ffff1661ffff81106149b557fe5b60408051608081018252929091015463ffffffff811683526401000000008104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b90910416151560608201819052909250614a6c57604080516080810182528a5463ffffffff811682526401000000008104600690810b810b900b6020830152600160581b81046001600160a01b031692820192909252600160f81b90910460ff161515606082015291505b614a7b88836000015189614ed8565b614ab2576040805162461bcd60e51b815260206004820152600360248201526213d31160ea1b604482015290519081900360640190fd5b614abf8989898887614f9b565b9150915097509795505050505050565b6000614ade60078787876141e3565b60015460025491925090600080600f87900b15614c24576000614aff612c27565b6000805460045492935090918291614b499160089186918591600160a01b810460020b9161ffff600160b81b83048116926001600160801b0390921691600160c81b900416613389565b9092509050614b8360058d8b8d8b8b87898b60007f000000000000000000000000000000000000000000000000000000000000000061513b565b9450614bba60058c8b8d8b8b87898b60017f000000000000000000000000000000000000000000000000000000000000000061513b565b93508415614bee57614bee60068d7f0000000000000000000000000000000000000000000000000000000000000000615325565b8315614c2057614c2060068c7f0000000000000000000000000000000000000000000000000000000000000000615325565b5050505b600080614c3660058c8c8b8a8a61538b565b9092509050614c47878a8484615437565b600089600f0b1215614c75578315614c6457614c6460058c6155cc565b8215614c7557614c7560058b6155cc565b50505050505095945050505050565b60008082600f0b12614caa57614ca5614ca085858560016146cd565b613291565b6146c5565b614cbd614ca085858560000360006146cd565b600003949350505050565b60008082600f0b12614ce457614ca5614ca08585856001614652565b614cbd614ca08585856000036000614652565b808204910615150190565b60008115614d755760006001600160a01b03841115614d3857614d3384600160601b876001600160801b03166132d9565b614d50565b6001600160801b038516606085901b81614d4e57fe5b045b9050614d6d614d686001600160a01b03881683613e0d565b6155f8565b9150506146c5565b60006001600160a01b03841115614da357614d9e84600160601b876001600160801b03166141a9565b614dba565b614dba606085901b6001600160801b038716614cf7565b905080866001600160a01b031611614dd157600080fd5b6001600160a01b0386160390506146c5565b600082614df15750836146c5565b7bffffffffffffffffffffffffffffffff000000000000000000000000606085901b168215614e91576001600160a01b03861684810290858281614e3157fe5b041415614e6257818101828110614e6057614e5683896001600160a01b0316836141a9565b93505050506146c5565b505b614e8882614e83878a6001600160a01b03168681614e7c57fe5b0490613e0d565b614cf7565b925050506146c5565b6001600160a01b03861684810290858281614ea857fe5b04148015614eb557508082115b614ebe57600080fd5b808203614e56614d68846001600160a01b038b16846141a9565b60008363ffffffff168363ffffffff1611158015614f0257508363ffffffff168263ffffffff1611155b15614f1e578163ffffffff168363ffffffff1611159050613382565b60008463ffffffff168463ffffffff1611614f46578363ffffffff1664010000000001614f4e565b8363ffffffff165b64ffffffffff16905060008563ffffffff168463ffffffff1611614f7f578363ffffffff1664010000000001614f87565b8363ffffffff165b64ffffffffff169091111595945050505050565b614fa361564a565b614fab61564a565b60008361ffff168560010161ffff1681614fc157fe5b0661ffff169050600060018561ffff16830103905060005b506002818301048961ffff87168281614fee57fe5b0661ffff8110614ffa57fe5b60408051608081018252929091015463ffffffff811683526401000000008104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b9091041615156060820181905290955061506557806001019250614fd9565b898661ffff16826001018161507657fe5b0661ffff811061508257fe5b60408051608081018252929091015463ffffffff811683526401000000008104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b909104161515606082015285519094506000906150ed908b908b614ed8565b905080801561510657506151068a8a8760000151614ed8565b15615111575061512e565b8061512157600182039250615128565b8160010193505b50614fd9565b5050509550959350505050565b60028a810b900b600090815260208c90526040812080546001600160801b031682615166828d6135ef565b9050846001600160801b0316816001600160801b031611156151b4576040805162461bcd60e51b81526020600482015260026024820152614c4f60f01b604482015290519081900360640190fd5b6001600160801b03828116159082161581141594501561528a578c60020b8e60020b1361525a57600183018b9055600283018a90556003830180547fffffffffff0000000000000000000000000000000000000000ffffffffffffff166701000000000000006001600160a01b038c16021766ffffffffffffff191666ffffffffffffff60068b900b161763ffffffff60d81b1916600160d81b63ffffffff8a16021790555b6003830180547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600160f81b1790555b82546001600160801b0319166001600160801b038216178355856152d35782546152ce906152c990600160801b9004600f90810b810b908f900b6132c3565b613f58565b6152f4565b82546152f4906152c990600160801b9004600f90810b810b908f900b6132a7565b8354600f9190910b6001600160801b03908116600160801b0291161790925550909c9b505050505050505050505050565b8060020b8260020b8161533457fe5b0760020b1561534257600080fd5b60008061535d8360020b8560020b8161535757fe5b056144b6565b600191820b820b60009081526020979097526040909620805460ff9097169190911b90951890945550505050565b600285810b80820b60009081526020899052604080822088850b850b83529082209193849391929184918291908a900b126153d1575050600182015460028301546153e4565b8360010154880391508360020154870390505b6000808b60020b8b60020b121561540657505060018301546002840154615419565b84600101548a0391508460020154890390505b92909803979097039b96909503949094039850939650505050505050565b6040805160a08101825285546001600160801b0390811682526001870154602083015260028701549282019290925260038601548083166060830152600160801b900490911660808201526000600f85900b6154d65781516001600160801b03166154ce576040805162461bcd60e51b815260206004820152600260248201526104e560f41b604482015290519081900360640190fd5b5080516154e5565b81516154e290866135ef565b90505b60006155098360200151860384600001516001600160801b0316600160801b6132d9565b9050600061552f8460400151860385600001516001600160801b0316600160801b6132d9565b905086600f0b6000146155565787546001600160801b0319166001600160801b0384161788555b60018801869055600288018590556001600160801b03821615158061558457506000816001600160801b0316115b156155c2576003880180546001600160801b031981166001600160801b039182168501821617808216600160801b9182900483168501909216021790555b5050505050505050565b600290810b810b6000908152602092909252604082208281556001810183905590810182905560030155565b806001600160a01b0381168114612beb57600080fd5b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b6040805160808101825260008082526020820181905291810182905260608101919091529056fea164736f6c6343000706000a"; - static readonly abi: ({ - inputs: never[]; - stateMutability: string; - type: string; - anonymous?: undefined; - name?: undefined; - outputs?: undefined; - } | { - anonymous: boolean; - inputs: { - indexed: boolean; - internalType: string; - name: string; - type: string; - }[]; - name: string; - type: string; - stateMutability?: undefined; - outputs?: undefined; - } | { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - anonymous?: undefined; - })[]; - static createInterface(): UniswapV3PoolInterface; - static connect(address: string, signerOrProvider: Signer | Provider): UniswapV3Pool; -} diff --git a/dist2/types/types/v3/factories/UniswapV3Staker__factory.d.ts b/dist2/types/types/v3/factories/UniswapV3Staker__factory.d.ts deleted file mode 100644 index cf92d7941d0..00000000000 --- a/dist2/types/types/v3/factories/UniswapV3Staker__factory.d.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { Signer, BigNumberish, ContractFactory, Overrides } from "ethers"; -import { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { UniswapV3Staker, UniswapV3StakerInterface } from "../UniswapV3Staker"; -export declare class UniswapV3Staker__factory extends ContractFactory { - constructor(signer?: Signer); - deploy(_factory: string, _nonfungiblePositionManager: string, _maxIncentiveStartLeadTime: BigNumberish, _maxIncentiveDuration: BigNumberish, overrides?: Overrides & { - from?: string | Promise; - }): Promise; - getDeployTransaction(_factory: string, _nonfungiblePositionManager: string, _maxIncentiveStartLeadTime: BigNumberish, _maxIncentiveDuration: BigNumberish, overrides?: Overrides & { - from?: string | Promise; - }): TransactionRequest; - attach(address: string): UniswapV3Staker; - connect(signer: Signer): UniswapV3Staker__factory; - static readonly bytecode = "0x6101006040523480156200001257600080fd5b5060405162003ba338038062003ba383398101604081905262000035916200005e565b6001600160601b0319606094851b81166080529290931b90911660a05260c05260e052620000c3565b6000806000806080858703121562000074578384fd5b84516200008181620000aa565b60208601519094506200009481620000aa565b6040860151606090960151949790965092505050565b6001600160a01b0381168114620000c057600080fd5b50565b60805160601c60a05160601c60c05160e051613a816200012260003980610bbd5280610cfa5250806103b15280610c595250806103ed52806104525280610b4852806110555280611ad552508061124c5280611ab45250613a816000f3fe6080604052600436106101295760003560e01c8063b02c43d0116100a5578063c45a015511610074578063e70b9e2711610059578063e70b9e271461034f578063f2d2909b1461036f578063f549ab421461038f57610129565b8063c45a01551461030c578063d953186e1461032157610129565b8063b02c43d01461026c578063b44a27221461029c578063b5ada6e4146102be578063c36c1ea5146102de57610129565b80633c423f0b116100fc5780635cc5e3d9116100e15780635cc5e3d9146101fd578063607777951461021d578063ac9650d81461024c57610129565b80633c423f0b146101c85780633dc0714b146101e857610129565b806301b754401461012e578063150b7a021461015957806326bfee04146101865780632f2d783d146101a8575b600080fd5b34801561013a57600080fd5b506101436103af565b60405161015091906138b9565b60405180910390f35b34801561016557600080fd5b5061017961017436600461273f565b6103d3565b6040516101509190612db4565b34801561019257600080fd5b506101a66101a1366004612a9c565b61071c565b005b3480156101b457600080fd5b506101436101c3366004612946565b61084a565b3480156101d457600080fd5b506101a66101e3366004612ac0565b610928565b3480156101f457600080fd5b50610143610bbb565b34801561020957600080fd5b506101a6610218366004612a72565b610bdf565b34801561022957600080fd5b5061023d6102383660046128f6565b610e10565b604051610150939291906138e6565b61025f61025a3660046127d9565b610e67565b6040516101509190612d36565b34801561027857600080fd5b5061028c6102873660046128f6565b610fc1565b6040516101509493929190612cf5565b3480156102a857600080fd5b506102b1611053565b6040516101509190612de1565b3480156102ca57600080fd5b506101436102d9366004612a57565b611077565b3480156102ea57600080fd5b506102fe6102f9366004612b52565b6111c5565b604051610150929190613881565b34801561031857600080fd5b506102b161124a565b34801561032d57600080fd5b5061034161033c366004612a72565b61126e565b6040516101509291906138c2565b34801561035b57600080fd5b5061014361036a36600461290e565b611493565b34801561037b57600080fd5b506101a661038a366004612a72565b6114b0565b34801561039b57600080fd5b506101a66103aa366004612a72565b61151b565b7f000000000000000000000000000000000000000000000000000000000000000081565b60003373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461044d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104449061375a565b60405180910390fd5b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166399fbab88876040518263ffffffff1660e01b81526004016104a991906138b9565b6101806040518083038186803b1580156104c257600080fd5b505afa1580156104d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104fa9190612b73565b505050505096509650505050505060405180608001604052808873ffffffffffffffffffffffffffffffffffffffff168152602001600065ffffffffffff1681526020018360020b81526020018260020b8152506001600088815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548165ffffffffffff021916908365ffffffffffff160217905550604082015181600001601a6101000a81548162ffffff021916908360020b62ffffff160217905550606082015181600001601d6101000a81548162ffffff021916908360020b62ffffff1602179055509050508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff16877fcdfc765b85e1048bee3c6a0f9d1c91fc7c4631f5fe5745a55fc6843db5c3260f60405160405180910390a483156106ef5760a08414156106ab576106a66106a085870187612a57565b87611964565b6106ef565b60006106b985870187612848565b905060005b81518110156106ec576106e48282815181106106d657fe5b602002602001015189611964565b6001016106be565b50505b507f150b7a0200000000000000000000000000000000000000000000000000000000979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116610769576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044490613183565b60008281526001602052604090205473ffffffffffffffffffffffffffffffffffffffff163381146107c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044490612e86565b60008381526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff868116918217909255915191929084169186917fcdfc765b85e1048bee3c6a0f9d1c91fc7c4631f5fe5745a55fc6843db5c3260f91a4505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360209081526040808320338452909152902054811580159061088957508082105b156108915750805b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602090815260408083203384529091529020805482900390556108d3848483611ed1565b8273ffffffffffffffffffffffffffffffffffffffff167f106f923f993c2149d49b4255ff723acafa1f2d94393f561d3eda32ae348f72418260405161091991906138b9565b60405180910390a29392505050565b73ffffffffffffffffffffffffffffffffffffffff8216301415610978576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610444906137b7565b6000838152600160209081526040918290208251608081018452905473ffffffffffffffffffffffffffffffffffffffff8116825265ffffffffffff740100000000000000000000000000000000000000008204169282018390527a0100000000000000000000000000000000000000000000000000008104600290810b810b810b948301949094527d0100000000000000000000000000000000000000000000000000000000009004830b830b90920b606083015215610a65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044490613046565b805173ffffffffffffffffffffffffffffffffffffffff163314610ab5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044490613481565b6000848152600160205260408082208290558251905173ffffffffffffffffffffffffffffffffffffffff9091169086907fcdfc765b85e1048bee3c6a0f9d1c91fc7c4631f5fe5745a55fc6843db5c3260f908490a46040517fb88d4fde00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b88d4fde90610b83903090879089908890600401612cac565b600060405180830381600087803b158015610b9d57600080fd5b505af1158015610bb1573d6000803e3d6000fd5b5050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008111610c19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610444906135be565b8160400151421115610c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610444906131e0565b7f0000000000000000000000000000000000000000000000000000000000000000428360400151031115610cb7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104449061361b565b8160600151826040015110610cf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610444906136d7565b7f000000000000000000000000000000000000000000000000000000000000000082604001518360600151031115610d5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044490613679565b6000610d67836120ad565b60008181526020819052604090208054840190558351909150610d8c903330856120de565b826020015173ffffffffffffffffffffffffffffffffffffffff16836000015173ffffffffffffffffffffffffffffffffffffffff167fa876344e28d4b5191ad03bc0d43f740e3695827ab0faccac739930b915ef8b0285604001518660600151876080015187604051610e039493929190613920565b60405180910390a3505050565b6000602081905290815260409020805460019091015473ffffffffffffffffffffffffffffffffffffffff8116907401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1683565b60608167ffffffffffffffff81118015610e8057600080fd5b50604051908082528060200260200182016040528015610eb457816020015b6060815260200190600190039081610e9f5790505b50905060005b82811015610fba5760008030868685818110610ed257fe5b9050602002810190610ee49190613951565b604051610ef2929190612c9c565b600060405180830381855af49150503d8060008114610f2d576040519150601f19603f3d011682016040523d82523d6000602084013e610f32565b606091505b509150915081610f9857604481511015610f4b57600080fd5b60048101905080806020019051810190610f6591906129df565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104449190612e16565b80848481518110610fa557fe5b60209081029190910101525050600101610eba565b5092915050565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff81169065ffffffffffff74010000000000000000000000000000000000000000820416907a0100000000000000000000000000000000000000000000000000008104600290810b917d0100000000000000000000000000000000000000000000000000000000009004900b84565b7f000000000000000000000000000000000000000000000000000000000000000081565b600081606001514210156110b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044490612f66565b60006110c2836120ad565b6000818152602081905260409020805493509091508261110e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044490612e29565b60018101547401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1615611170576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610444906134de565b6000815583516080850151611186919085611ed1565b817f65124e6175aa9904f40735e87e2a37c76e87a609b855287bb4d1aba8257d9763846040516111b691906138b9565b60405180910390a25050919050565b60008281526002602090815260408083208484529091529020805473ffffffffffffffffffffffffffffffffffffffff8116916bffffffffffffffffffffffff740100000000000000000000000000000000000000009092048216918214156112425760018101546fffffffffffffffffffffffffffffffff1691505b509250929050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600061127c856120ad565b905060008061128b86846111c5565b915091506000816fffffffffffffffffffffffffffffffff16116112db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044490612f09565b60008681526001602081815260408084208151608081018352905473ffffffffffffffffffffffffffffffffffffffff80821683527401000000000000000000000000000000000000000080830465ffffffffffff16848701527a0100000000000000000000000000000000000000000000000000008304600290810b810b810b8587019081527d010000000000000000000000000000000000000000000000000000000000909404810b810b900b60608086019182528c8a52898852868a2087519182018852805482529098015480841689890152919091046bffffffffffffffffffffffff1687860152948e01519151945193517fa38807f200000000000000000000000000000000000000000000000000000000815292969491169263a38807f29261140e929190600401612e02565b60606040518083038186803b15801561142657600080fd5b505afa15801561143a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145e9190612986565b50915050611482826000015183602001518c604001518d60600151888a87426122c3565b909b909a5098505050505050505050565b600360209081526000928352604080842090915290825290205481565b60008181526001602052604090205473ffffffffffffffffffffffffffffffffffffffff16331461150d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044490613561565b6115178282611964565b5050565b6000818152600160209081526040918290208251608081018452905473ffffffffffffffffffffffffffffffffffffffff8116825265ffffffffffff74010000000000000000000000000000000000000000820416928201929092527a0100000000000000000000000000000000000000000000000000008204600290810b810b810b938201939093527d010000000000000000000000000000000000000000000000000000000000909104820b820b90910b60608083019190915283015142101561163157805173ffffffffffffffffffffffffffffffffffffffff163314611631576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104449061331e565b600061163c846120ad565b905060008061164b85846111c5565b91509150806fffffffffffffffffffffffffffffffff166000141561169c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044490612fe9565b600083815260208181526040808320888452600180845282852080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff65ffffffffffff740100000000000000000000000000000000000000008084048216830190911681027fffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffff9093169290921790925591830180546bffffffffffffffffffffffff848204811690930190921690920273ffffffffffffffffffffffffffffffffffffffff91821617909155928a01518883015160608a015193517fa38807f2000000000000000000000000000000000000000000000000000000008152929594919091169263a38807f2926117b7929190600401612e02565b60606040518083038186803b1580156117cf57600080fd5b505afa1580156117e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118079190612986565b508354600185015460408c015160608d0151939550600094508493611848939273ffffffffffffffffffffffffffffffffffffffff169190898b89426122c3565b6001860180547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff9182168401821617909155865483900387558c51811660009081526003602090815260408083208e5190941683529281528282208054860190558d8252600281528282208c8352905290812090815591935091506bffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff87161061192a576001810180547fffffffffffffffffffffffffffffffff000000000000000000000000000000001690555b60405188908b907fe1ba67e807ae0efa0a9549f9520ddc15c27f0a4dae2bc045e800ca66a940778f90600090a35050505050505050505050565b81604001514210156119a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610444906133a1565b816060015142106119df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044490613126565b60006119ea836120ad565b600081815260208190526040902054909150611a32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610444906132c1565b60008281526002602090815260408083208484529091529020547401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1615611aa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610444906130c9565b600080600080611afa7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000088612345565b9350935093509350866020015173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614611b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610444906133fe565b6000816fffffffffffffffffffffffffffffffff1611611bb7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044490613263565b6000868152600160208181526040808420805465ffffffffffff740100000000000000000000000000000000000000008083048216870190911681027fffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffff9092169190911790915589855291849052808420830180546bffffffffffffffffffffffff848204811690950190941690920273ffffffffffffffffffffffffffffffffffffffff93841617909155517fa38807f20000000000000000000000000000000000000000000000000000000081529086169063a38807f290611ca19087908790600401612e02565b60606040518083038186803b158015611cb957600080fd5b505afa158015611ccd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf19190612986565b509150506bffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff831610611e0a576040805160608101825273ffffffffffffffffffffffffffffffffffffffff80841682526bffffffffffffffffffffffff60208084018281526fffffffffffffffffffffffffffffffff80891686880190815260008f8152600285528881208f82529094529690922094518554915190931674010000000000000000000000000000000000000000029284167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617909216178255915160019091018054919092167fffffffffffffffffffffffffffffffff00000000000000000000000000000000909116179055611e8e565b6000878152600260209081526040808320898452909152902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8381169190911716740100000000000000000000000000000000000000006bffffffffffffffffffffffff8516021790555b85877f3fe90ccd0a34e28f2b4b7a1e8323415ed9dd595f4eec5dfd461d18c2df336dbd84604051611ebf9190613864565b60405180910390a35050505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b60208310611fa657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611f69565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612008576040519150601f19603f3d011682016040523d82523d6000602084013e61200d565b606091505b509150915081801561203b57508051158061203b575080806020019051602081101561203857600080fd5b50515b6120a657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b5050505050565b6000816040516020016120c09190613814565b6040516020818303038152906040528051906020012090505b919050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000178152925182516000948594938a169392918291908083835b602083106121bb57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161217e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461221d576040519150601f19603f3d011682016040523d82523d6000602084013e612222565b606091505b5091509150818015612250575080511580612250575080806020019051602081101561224d57600080fd5b50515b6122bb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354460000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b505050505050565b600080878310156122d057fe5b508383036fffffffffffffffffffffffffffffffff861602600073ffffffffffffffffffffffffffffffffffffffff8a1660808a61230e8b8861244e565b03901b0390506123358b8373ffffffffffffffffffffffffffffffffffffffff1683612467565b9250509850989650505050505050565b60008060008060008060008873ffffffffffffffffffffffffffffffffffffffff166399fbab88896040518263ffffffff1660e01b8152600401808281526020019150506101806040518083038186803b1580156123a257600080fd5b505afa1580156123b6573d6000803e3d6000fd5b505050506040513d6101808110156123cd57600080fd5b50604080820151606080840151608085015160a086015160c087015160e0909701518651948501875273ffffffffffffffffffffffffffffffffffffffff80871686528416602086015262ffffff8316968501969096529b50949950929750909550909350909150612440908b90612534565b965050505093509350935093565b60008183101561245e5781612460565b825b9392505050565b600080807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff858709868602925082811090839003039050806124bb57600084116124b057600080fd5b508290049050612460565b8084116124c757600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161061257657600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d5808301919091528251808303909101815260f5909101909152805191012090565b80516120d981613a4f565b8051600281900b81146120d957600080fd5b600060a08284031215612698578081fd5b60405160a0810181811067ffffffffffffffff821117156126b557fe5b60405290508082356126c681613a4f565b815260208301356126d681613a4f565b80602083015250604083013560408201526060830135606082015260808301356126ff81613a4f565b6080919091015292915050565b80516fffffffffffffffffffffffffffffffff811681146120d957600080fd5b805162ffffff811681146120d957600080fd5b600080600080600060808688031215612756578081fd5b853561276181613a4f565b9450602086013561277181613a4f565b935060408601359250606086013567ffffffffffffffff80821115612794578283fd5b818801915088601f8301126127a7578283fd5b8135818111156127b5578384fd5b8960208285010111156127c6578384fd5b9699959850939650602001949392505050565b600080602083850312156127eb578182fd5b823567ffffffffffffffff80821115612802578384fd5b818501915085601f830112612815578384fd5b813581811115612823578485fd5b8660208083028501011115612836578485fd5b60209290920196919550909350505050565b6000602080838503121561285a578182fd5b823567ffffffffffffffff80821115612871578384fd5b818501915085601f830112612884578384fd5b81358181111561289057fe5b61289d84858302016139bb565b818152848101925083850160a0808402860187018a10156128bc578788fd5b8795505b838610156128e8576128d28a83612687565b85526001959095019493860193908101906128c0565b509098975050505050505050565b600060208284031215612907578081fd5b5035919050565b60008060408385031215612920578182fd5b823561292b81613a4f565b9150602083013561293b81613a4f565b809150509250929050565b60008060006060848603121561295a578081fd5b833561296581613a4f565b9250602084013561297581613a4f565b929592945050506040919091013590565b60008060006060848603121561299a578081fd5b83518060060b81146129aa578182fd5b60208501519093506129bb81613a4f565b604085015190925063ffffffff811681146129d4578182fd5b809150509250925092565b6000602082840312156129f0578081fd5b815167ffffffffffffffff811115612a06578182fd5b8201601f81018413612a16578182fd5b8051612a29612a24826139df565b6139bb565b818152856020838501011115612a3d578384fd5b612a4e826020830160208601613a1f565b95945050505050565b600060a08284031215612a68578081fd5b6124608383612687565b60008060c08385031215612a84578182fd5b612a8e8484612687565b9460a0939093013593505050565b60008060408385031215612aae578182fd5b82359150602083013561293b81613a4f565b600080600060608486031215612ad4578081fd5b833592506020840135612ae681613a4f565b9150604084013567ffffffffffffffff811115612b01578182fd5b8401601f81018613612b11578182fd5b8035612b1f612a24826139df565b818152876020838501011115612b33578384fd5b8160208401602083013783602083830101528093505050509250925092565b60008060408385031215612b64578182fd5b50508035926020909101359150565b6000806000806000806000806000806000806101808d8f031215612b9557898afd5b8c516bffffffffffffffffffffffff81168114612bb0578a8bfd5b9b50612bbe60208e0161266a565b9a50612bcc60408e0161266a565b9950612bda60608e0161266a565b9850612be860808e0161272c565b9750612bf660a08e01612675565b9650612c0460c08e01612675565b9550612c1260e08e0161270c565b94506101008d015193506101208d01519250612c316101408e0161270c565b9150612c406101608e0161270c565b90509295989b509295989b509295989b565b60008151808452612c6a816020860160208601613a1f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000828483379101908152919050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612ceb6080830184612c52565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff94909416845265ffffffffffff929092166020840152600290810b60408401520b606082015260800190565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015612da7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452612d95858351612c52565b94509285019290850190600101612d5b565b5092979650505050505050565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600292830b8152910b602082015260400190565b6000602082526124606020830184612c52565b60208082526032908201527f556e697377617056335374616b65723a3a656e64496e63656e746976653a206e60408201527f6f20726566756e6420617661696c61626c650000000000000000000000000000606082015260800190565b60208082526045908201527f556e697377617056335374616b65723a3a7472616e736665724465706f73697460408201527f3a2063616e206f6e6c792062652063616c6c6564206279206465706f7369742060608201527f6f776e6572000000000000000000000000000000000000000000000000000000608082015260a00190565b60208082526034908201527f556e697377617056335374616b65723a3a676574526577617264496e666f3a2060408201527f7374616b6520646f6573206e6f74206578697374000000000000000000000000606082015260800190565b60208082526043908201527f556e697377617056335374616b65723a3a656e64496e63656e746976653a206360408201527f616e6e6f7420656e6420696e63656e74697665206265666f726520656e64207460608201527f696d650000000000000000000000000000000000000000000000000000000000608082015260a00190565b60208082526033908201527f556e697377617056335374616b65723a3a756e7374616b65546f6b656e3a207360408201527f74616b6520646f6573206e6f7420657869737400000000000000000000000000606082015260800190565b60208082526042908201527f556e697377617056335374616b65723a3a7769746864726177546f6b656e3a2060408201527f63616e6e6f7420776974686472617720746f6b656e207768696c65207374616b60608201527f6564000000000000000000000000000000000000000000000000000000000000608082015260a00190565b60208082526031908201527f556e697377617056335374616b65723a3a7374616b65546f6b656e3a20746f6b60408201527f656e20616c7265616479207374616b6564000000000000000000000000000000606082015260800190565b6020808252602c908201527f556e697377617056335374616b65723a3a7374616b65546f6b656e3a20696e6360408201527f656e7469766520656e6465640000000000000000000000000000000000000000606082015260800190565b6020808252603c908201527f556e697377617056335374616b65723a3a7472616e736665724465706f73697460408201527f3a20696e76616c6964207472616e7366657220726563697069656e7400000000606082015260800190565b60208082526049908201527f556e697377617056335374616b65723a3a637265617465496e63656e7469766560408201527f3a2073746172742074696d65206d757374206265206e6f77206f7220696e207460608201527f6865206675747572650000000000000000000000000000000000000000000000608082015260a00190565b602080825260409082018190527f556e697377617056335374616b65723a3a7374616b65546f6b656e3a2063616e908201527f6e6f74207374616b6520746f6b656e20776974682030206c6971756964697479606082015260800190565b60208082526033908201527f556e697377617056335374616b65723a3a7374616b65546f6b656e3a206e6f6e60408201527f2d6578697374656e7420696e63656e7469766500000000000000000000000000606082015260800190565b60208082526056908201527f556e697377617056335374616b65723a3a756e7374616b65546f6b656e3a206f60408201527f6e6c79206f776e65722063616e20776974686472617720746f6b656e2062656660608201527f6f726520696e63656e7469766520656e642074696d6500000000000000000000608082015260a00190565b60208082526032908201527f556e697377617056335374616b65723a3a7374616b65546f6b656e3a20696e6360408201527f656e74697665206e6f7420737461727465640000000000000000000000000000606082015260800190565b60208082526041908201527f556e697377617056335374616b65723a3a7374616b65546f6b656e3a20746f6b60408201527f656e20706f6f6c206973206e6f742074686520696e63656e7469766520706f6f60608201527f6c00000000000000000000000000000000000000000000000000000000000000608082015260a00190565b6020808252603d908201527f556e697377617056335374616b65723a3a7769746864726177546f6b656e3a2060408201527f6f6e6c79206f776e65722063616e20776974686472617720746f6b656e000000606082015260800190565b6020808252604d908201527f556e697377617056335374616b65723a3a656e64496e63656e746976653a206360408201527f616e6e6f7420656e6420696e63656e74697665207768696c65206465706f736960608201527f747320617265207374616b656400000000000000000000000000000000000000608082015260a00190565b60208082526037908201527f556e697377617056335374616b65723a3a7374616b65546f6b656e3a206f6e6c60408201527f79206f776e65722063616e207374616b6520746f6b656e000000000000000000606082015260800190565b60208082526039908201527f556e697377617056335374616b65723a3a637265617465496e63656e7469766560408201527f3a20726577617264206d75737420626520706f73697469766500000000000000606082015260800190565b602080825260409082018190527f556e697377617056335374616b65723a3a637265617465496e63656e74697665908201527f3a2073746172742074696d6520746f6f2066617220696e746f20667574757265606082015260800190565b602080825260409082018190527f556e697377617056335374616b65723a3a637265617465496e63656e74697665908201527f3a20696e63656e74697665206475726174696f6e20697320746f6f206c6f6e67606082015260800190565b60208082526044908201527f556e697377617056335374616b65723a3a637265617465496e63656e7469766560408201527f3a2073746172742074696d65206d757374206265206265666f726520656e642060608201527f74696d6500000000000000000000000000000000000000000000000000000000608082015260a00190565b60208082526032908201527f556e697377617056335374616b65723a3a6f6e4552433732315265636569766560408201527f643a206e6f74206120756e697633206e66740000000000000000000000000000606082015260800190565b60208082526039908201527f556e697377617056335374616b65723a3a7769746864726177546f6b656e3a2060408201527f63616e6e6f7420776974686472617720746f207374616b657200000000000000606082015260800190565b815173ffffffffffffffffffffffffffffffffffffffff90811682526020808401518216908301526040808401519083015260608084015190830152608092830151169181019190915260a00190565b6fffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff9290921682526fffffffffffffffffffffffffffffffff16602082015260400190565b90815260200190565b91825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b92835273ffffffffffffffffffffffffffffffffffffffff9190911660208301526bffffffffffffffffffffffff16604082015260600190565b938452602084019290925273ffffffffffffffffffffffffffffffffffffffff166040830152606082015260800190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613985578283fd5b83018035915067ffffffffffffffff82111561399f578283fd5b6020019150368190038213156139b457600080fd5b9250929050565b60405181810167ffffffffffffffff811182821017156139d757fe5b604052919050565b600067ffffffffffffffff8211156139f357fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b83811015613a3a578181015183820152602001613a22565b83811115613a49576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff81168114613a7157600080fd5b5056fea164736f6c6343000706000a"; - static readonly abi: ({ - inputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - anonymous?: undefined; - name?: undefined; - outputs?: undefined; - } | { - anonymous: boolean; - inputs: { - indexed: boolean; - internalType: string; - name: string; - type: string; - }[]; - name: string; - type: string; - stateMutability?: undefined; - outputs?: undefined; - } | { - inputs: ({ - components: { - internalType: string; - name: string; - type: string; - }[]; - internalType: string; - name: string; - type: string; - } | { - internalType: string; - name: string; - type: string; - components?: undefined; - })[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - anonymous?: undefined; - })[]; - static createInterface(): UniswapV3StakerInterface; - static connect(address: string, signerOrProvider: Signer | Provider): UniswapV3Staker; -} diff --git a/dist2/types/types/v3/factories/V2SwapRouter__factory.d.ts b/dist2/types/types/v3/factories/V2SwapRouter__factory.d.ts deleted file mode 100644 index a49a27fee62..00000000000 --- a/dist2/types/types/v3/factories/V2SwapRouter__factory.d.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { V2SwapRouter, V2SwapRouterInterface } from "../V2SwapRouter"; -export declare class V2SwapRouter__factory { - static readonly abi: ({ - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - } | { - stateMutability: string; - type: string; - inputs?: undefined; - name?: undefined; - outputs?: undefined; - })[]; - static createInterface(): V2SwapRouterInterface; - static connect(address: string, signerOrProvider: Signer | Provider): V2SwapRouter; -} diff --git a/dist2/types/types/v3/factories/V3Migrator__factory.d.ts b/dist2/types/types/v3/factories/V3Migrator__factory.d.ts deleted file mode 100644 index f12fc5b83ba..00000000000 --- a/dist2/types/types/v3/factories/V3Migrator__factory.d.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { Signer, ContractFactory, Overrides } from "ethers"; -import { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { V3Migrator, V3MigratorInterface } from "../V3Migrator"; -export declare class V3Migrator__factory extends ContractFactory { - constructor(signer?: Signer); - deploy(_factory: string, _WETH9: string, _nonfungiblePositionManager: string, overrides?: Overrides & { - from?: string | Promise; - }): Promise; - getDeployTransaction(_factory: string, _WETH9: string, _nonfungiblePositionManager: string, overrides?: Overrides & { - from?: string | Promise; - }): TransactionRequest; - attach(address: string): V3Migrator; - connect(signer: Signer): V3Migrator__factory; - static readonly bytecode = "0x60e06040523480156200001157600080fd5b5060405162001f4238038062001f42833981016040819052620000349162000079565b6001600160601b0319606093841b811660805291831b821660a05290911b1660c052620000c2565b80516001600160a01b03811681146200007457600080fd5b919050565b6000806000606084860312156200008e578283fd5b62000099846200005c565b9250620000a9602085016200005c565b9150620000b9604085016200005c565b90509250925092565b60805160601c60a05160601c60c05160601c611e146200012e6000398061090d5280610c4c5280610c865280610cb05280610e8d52508060d252806106b25280610ee65280610f70528061105852806110e2525080610269528061036452806109e65250611e146000f3fe6080604052600436106100b55760003560e01c8063b44a272211610069578063c45a01551161004e578063c45a0155146101e5578063d44f2bf2146101fa578063f3995c671461021a57610134565b8063b44a2722146101bd578063c2e3140a146101d257610134565b80634aa4a4fc1161009a5780634aa4a4fc14610175578063a4a78f0c1461018a578063ac9650d81461019d57610134565b806313ead562146101395780634659a4941461016257610134565b36610134573373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012990611c15565b60405180910390fd5b005b600080fd5b61014c610147366004611788565b61022d565b6040516101599190611afb565b60405180910390f35b6101326101703660046117e1565b6105f0565b34801561018157600080fd5b5061014c6106b0565b6101326101983660046117e1565b6106d4565b6101b06101ab36600461183a565b6107b1565b6040516101599190611b4d565b3480156101c957600080fd5b5061014c61090b565b6101326101e03660046117e1565b61092f565b3480156101f157600080fd5b5061014c6109e4565b34801561020657600080fd5b506101326102153660046119b7565b610a08565b6101326102283660046117e1565b611176565b60008373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161061026757600080fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631698ee828686866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018262ffffff168152602001935050505060206040518083038186803b15801561031957600080fd5b505afa15801561032d573d6000803e3d6000fd5b505050506040513d602081101561034357600080fd5b5051905073ffffffffffffffffffffffffffffffffffffffff81166104d3577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a16712958686866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018262ffffff1681526020019350505050602060405180830381600087803b15801561041657600080fd5b505af115801561042a573d6000803e3d6000fd5b505050506040513d602081101561044057600080fd5b5051604080517ff637731d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015291519293509083169163f637731d9160248082019260009290919082900301818387803b1580156104b657600080fd5b505af11580156104ca573d6000803e3d6000fd5b505050506105e8565b60008173ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561051b57600080fd5b505afa15801561052f573d6000803e3d6000fd5b505050506040513d60e081101561054557600080fd5b5051905073ffffffffffffffffffffffffffffffffffffffff81166105e6578173ffffffffffffffffffffffffffffffffffffffff1663f637731d846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156105cd57600080fd5b505af11580156105e1573d6000803e3d6000fd5b505050505b505b949350505050565b604080517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e48101839052905173ffffffffffffffffffffffffffffffffffffffff881691638fcbaf0c9161010480830192600092919082900301818387803b15801561069057600080fd5b505af11580156106a4573d6000803e3d6000fd5b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b604080517fdd62ed3e00000000000000000000000000000000000000000000000000000000815233600482015230602482015290517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b15801561076957600080fd5b505afa15801561077d573d6000803e3d6000fd5b505050506040513d602081101561079357600080fd5b505110156107a9576107a98686868686866105f0565b505050505050565b60608167ffffffffffffffff811180156107ca57600080fd5b506040519080825280602002602001820160405280156107fe57816020015b60608152602001906001900390816107e95790505b50905060005b82811015610904576000803086868581811061081c57fe5b905060200281019061082e9190611d3a565b60405161083c929190611aeb565b600060405180830381855af49150503d8060008114610877576040519150601f19603f3d011682016040523d82523d6000602084013e61087c565b606091505b5091509150816108e25760448151101561089557600080fd5b600481019050808060200190518101906108af9190611902565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101299190611bcb565b808484815181106108ef57fe5b60209081029190910101525050600101610804565b5092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051869173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b1580156109a457600080fd5b505afa1580156109b8573d6000803e3d6000fd5b505050506040513d60208110156109ce57600080fd5b505110156107a9576107a9868686868686611176565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610a1a6060830160408401611a5d565b60ff1611610a54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012990611bde565b6064610a666060830160408401611a5d565b60ff161115610aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012990611c4c565b610aae6020820182611765565b73ffffffffffffffffffffffffffffffffffffffff166323b872dd33610ad76020850185611765565b84602001356040518463ffffffff1660e01b8152600401610afa93929190611b1c565b602060405180830381600087803b158015610b1457600080fd5b505af1158015610b28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4c91906118c5565b50600080610b5d6020840184611765565b73ffffffffffffffffffffffffffffffffffffffff166389afcb44306040518263ffffffff1660e01b8152600401610b959190611afb565b6040805180830381600087803b158015610bae57600080fd5b505af1158015610bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be69190611a3a565b909250905060006064610c0c610c026060870160408801611a5d565b859060ff1661120e565b81610c1357fe5b04905060006064610c2d610c026060880160408901611a5d565b81610c3457fe5b049050610c71610c4a6080870160608801611765565b7f000000000000000000000000000000000000000000000000000000000000000084611238565b610cab610c8460a0870160808801611765565b7f000000000000000000000000000000000000000000000000000000000000000083611238565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663883164566040518061016001604052808a6060016020810190610d099190611765565b73ffffffffffffffffffffffffffffffffffffffff168152602001610d3460a08c0160808d01611765565b73ffffffffffffffffffffffffffffffffffffffff168152602001610d5f60c08c0160a08d016119cf565b62ffffff168152602001610d7960e08c0160c08d016118e1565b60020b8152602001610d926101008c0160e08d016118e1565b60020b815260208101889052604081018790526101008b013560608201526101208b0135608082015260a001610dd06101608c016101408d01611765565b73ffffffffffffffffffffffffffffffffffffffff1681526020018a61016001358152506040518263ffffffff1660e01b8152600401610e109190611c83565b608060405180830381600087803b158015610e2a57600080fd5b505af1158015610e3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6291906119e9565b935093505050858210156110025783821015610eb357610eb3610e8b6080890160608a01611765565b7f00000000000000000000000000000000000000000000000000000000000000006000611238565b818603610ec86101a089016101808a016118a9565b8015610f2e575073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016610f1660808a0160608b01611765565b73ffffffffffffffffffffffffffffffffffffffff16145b15610fe6576040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632e1a7d4d90610fa5908490600401611d31565b600060405180830381600087803b158015610fbf57600080fd5b505af1158015610fd3573d6000803e3d6000fd5b50505050610fe13382611414565b611000565b611000610ff960808a0160608b01611765565b3383611567565b505b8481101561116d578281101561102557611025610e8b60a0890160808a01611765565b80850361103a6101a089016101808a016118a9565b80156110a0575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661108860a08a0160808b01611765565b73ffffffffffffffffffffffffffffffffffffffff16145b15611158576040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632e1a7d4d90611117908490600401611d31565b600060405180830381600087803b15801561113157600080fd5b505af1158015611145573d6000803e3d6000fd5b505050506111533382611414565b61116b565b61116b610ff960a08a0160808b01611765565b505b50505050505050565b604080517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c48101839052905173ffffffffffffffffffffffffffffffffffffffff88169163d505accf9160e480830192600092919082900301818387803b15801561069057600080fd5b60008215806112295750508181028183828161122657fe5b04145b61123257600080fd5b92915050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b3000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b6020831061130d57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016112d0565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461136f576040519150601f19603f3d011682016040523d82523d6000602084013e611374565b606091505b50915091508180156113a25750805115806113a2575080806020019051602081101561139f57600080fd5b50515b61140d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5341000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b5050505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b6020831061148b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161144e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146114ed576040519150601f19603f3d011682016040523d82523d6000602084013e6114f2565b606091505b505090508061156257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b6020831061163c57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016115ff565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461169e576040519150601f19603f3d011682016040523d82523d6000602084013e6116a3565b606091505b50915091508180156116d15750805115806116d157508080602001905160208110156116ce57600080fd5b50515b61140d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b803562ffffff8116811461174f57600080fd5b919050565b803560ff8116811461174f57600080fd5b600060208284031215611776578081fd5b813561178181611dd4565b9392505050565b6000806000806080858703121561179d578283fd5b84356117a881611dd4565b935060208501356117b881611dd4565b92506117c66040860161173c565b915060608501356117d681611dd4565b939692955090935050565b60008060008060008060c087890312156117f9578182fd5b863561180481611dd4565b9550602087013594506040870135935061182060608801611754565b92506080870135915060a087013590509295509295509295565b6000806020838503121561184c578182fd5b823567ffffffffffffffff80821115611863578384fd5b818501915085601f830112611876578384fd5b813581811115611884578485fd5b8660208083028501011115611897578485fd5b60209290920196919550909350505050565b6000602082840312156118ba578081fd5b813561178181611df9565b6000602082840312156118d6578081fd5b815161178181611df9565b6000602082840312156118f2578081fd5b81358060020b8114611781578182fd5b600060208284031215611913578081fd5b815167ffffffffffffffff8082111561192a578283fd5b818401915084601f83011261193d578283fd5b81518181111561194957fe5b60405160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116820101818110848211171561198557fe5b60405281815283820160200187101561199c578485fd5b6119ad826020830160208701611da4565b9695505050505050565b60006101a082840312156119c9578081fd5b50919050565b6000602082840312156119e0578081fd5b6117818261173c565b600080600080608085870312156119fe578384fd5b8451935060208501516fffffffffffffffffffffffffffffffff81168114611a24578384fd5b6040860151606090960151949790965092505050565b60008060408385031215611a4c578182fd5b505080516020909101519092909150565b600060208284031215611a6e578081fd5b61178182611754565b73ffffffffffffffffffffffffffffffffffffffff169052565b60008151808452611aa9816020860160208601611da4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60020b9052565b62ffffff169052565b6000828483379101908152919050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015611bbe577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452611bac858351611a91565b94509285019290850190600101611b72565b5092979650505050505050565b6000602082526117816020830184611a91565b60208082526014908201527f50657263656e7461676520746f6f20736d616c6c000000000000000000000000604082015260600190565b60208082526009908201527f4e6f742057455448390000000000000000000000000000000000000000000000604082015260600190565b60208082526014908201527f50657263656e7461676520746f6f206c61726765000000000000000000000000604082015260600190565b600061016082019050611c97828451611a77565b6020830151611ca96020840182611a77565b506040830151611cbc6040840182611ae2565b506060830151611ccf6060840182611adb565b506080830151611ce26080840182611adb565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151611d2082850182611a77565b505061014092830151919092015290565b90815260200190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611d6e578283fd5b83018035915067ffffffffffffffff821115611d88578283fd5b602001915036819003821315611d9d57600080fd5b9250929050565b60005b83811015611dbf578181015183820152602001611da7565b83811115611dce576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611df657600080fd5b50565b8015158114611df657600080fdfea164736f6c6343000706000a"; - static readonly abi: ({ - inputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - name?: undefined; - outputs?: undefined; - } | { - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - } | { - inputs: { - components: { - internalType: string; - name: string; - type: string; - }[]; - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: never[]; - stateMutability: string; - type: string; - } | { - stateMutability: string; - type: string; - inputs?: undefined; - name?: undefined; - outputs?: undefined; - })[]; - static createInterface(): V3MigratorInterface; - static connect(address: string, signerOrProvider: Signer | Provider): V3Migrator; -} diff --git a/dist2/types/types/v3/factories/V3SwapRouter__factory.d.ts b/dist2/types/types/v3/factories/V3SwapRouter__factory.d.ts deleted file mode 100644 index 5eb7438a199..00000000000 --- a/dist2/types/types/v3/factories/V3SwapRouter__factory.d.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { V3SwapRouter, V3SwapRouterInterface } from "../V3SwapRouter"; -export declare class V3SwapRouter__factory { - static readonly abi: ({ - inputs: { - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: never[]; - stateMutability: string; - type: string; - } | { - inputs: { - components: { - internalType: string; - name: string; - type: string; - }[]; - internalType: string; - name: string; - type: string; - }[]; - name: string; - outputs: { - internalType: string; - name: string; - type: string; - }[]; - stateMutability: string; - type: string; - } | { - stateMutability: string; - type: string; - inputs?: undefined; - name?: undefined; - outputs?: undefined; - })[]; - static createInterface(): V3SwapRouterInterface; - static connect(address: string, signerOrProvider: Signer | Provider): V3SwapRouter; -} diff --git a/dist2/types/types/v3/index.d.ts b/dist2/types/types/v3/index.d.ts deleted file mode 100644 index 971fa33a897..00000000000 --- a/dist2/types/types/v3/index.d.ts +++ /dev/null @@ -1,114 +0,0 @@ -export type { IApproveAndCall } from "./IApproveAndCall"; -export type { IImmutableState } from "./IImmutableState"; -export type { IMulticallExtended } from "./IMulticallExtended"; -export type { IOracleSlippage } from "./IOracleSlippage"; -export type { IPeripheryPaymentsExtended } from "./IPeripheryPaymentsExtended"; -export type { IPeripheryPaymentsWithFeeExtended } from "./IPeripheryPaymentsWithFeeExtended"; -export type { IQuoter } from "./IQuoter"; -export type { IQuoterV2 } from "./IQuoterV2"; -export type { ISwapRouter02 } from "./ISwapRouter02"; -export type { IV2SwapRouter } from "./IV2SwapRouter"; -export type { IV3SwapRouter } from "./IV3SwapRouter"; -export type { Quoter } from "./Quoter"; -export type { QuoterV2 } from "./QuoterV2"; -export type { SwapRouter02 } from "./SwapRouter02"; -export type { V2SwapRouter } from "./V2SwapRouter"; -export type { V3SwapRouter } from "./V3SwapRouter"; -export type { IUniswapV3FlashCallback } from "./IUniswapV3FlashCallback"; -export type { IUniswapV3MintCallback } from "./IUniswapV3MintCallback"; -export type { IUniswapV3SwapCallback } from "./IUniswapV3SwapCallback"; -export type { IERC20Minimal } from "./IERC20Minimal"; -export type { IUniswapV3Factory } from "./IUniswapV3Factory"; -export type { IUniswapV3Pool } from "./IUniswapV3Pool"; -export type { IUniswapV3PoolDeployer } from "./IUniswapV3PoolDeployer"; -export type { IUniswapV3PoolActions } from "./IUniswapV3PoolActions"; -export type { IUniswapV3PoolDerivedState } from "./IUniswapV3PoolDerivedState"; -export type { IUniswapV3PoolEvents } from "./IUniswapV3PoolEvents"; -export type { IUniswapV3PoolImmutables } from "./IUniswapV3PoolImmutables"; -export type { IUniswapV3PoolOwnerActions } from "./IUniswapV3PoolOwnerActions"; -export type { IUniswapV3PoolState } from "./IUniswapV3PoolState"; -export type { UniswapV3Factory } from "./UniswapV3Factory"; -export type { UniswapV3Pool } from "./UniswapV3Pool"; -export type { PairFlash } from "./PairFlash"; -export type { IERC1271 } from "./IERC1271"; -export type { IERC20PermitAllowed } from "./IERC20PermitAllowed"; -export type { IWETH9 } from "./IWETH9"; -export type { IERC20Metadata } from "./IERC20Metadata"; -export type { IERC721Permit } from "./IERC721Permit"; -export type { IMulticall } from "./IMulticall"; -export type { INonfungiblePositionManager } from "./INonfungiblePositionManager"; -export type { INonfungibleTokenPositionDescriptor } from "./INonfungibleTokenPositionDescriptor"; -export type { IPeripheryImmutableState } from "./IPeripheryImmutableState"; -export type { IPeripheryPayments } from "./IPeripheryPayments"; -export type { IPeripheryPaymentsWithFee } from "./IPeripheryPaymentsWithFee"; -export type { IPoolInitializer } from "./IPoolInitializer"; -export type { ISelfPermit } from "./ISelfPermit"; -export type { ISwapRouter } from "./ISwapRouter"; -export type { ITickLens } from "./ITickLens"; -export type { IV3Migrator } from "./IV3Migrator"; -export type { TickLens } from "./TickLens"; -export type { UniswapInterfaceMulticall } from "./UniswapInterfaceMulticall"; -export type { NFTDescriptor } from "./NFTDescriptor"; -export type { NonfungiblePositionManager } from "./NonfungiblePositionManager"; -export type { NonfungibleTokenPositionDescriptor } from "./NonfungibleTokenPositionDescriptor"; -export type { SwapRouter } from "./SwapRouter"; -export type { V3Migrator } from "./V3Migrator"; -export type { IUniswapV3Staker } from "./IUniswapV3Staker"; -export type { UniswapV3Staker } from "./UniswapV3Staker"; -export { IApproveAndCall__factory } from "./factories/IApproveAndCall__factory"; -export { IImmutableState__factory } from "./factories/IImmutableState__factory"; -export { IMulticallExtended__factory } from "./factories/IMulticallExtended__factory"; -export { IOracleSlippage__factory } from "./factories/IOracleSlippage__factory"; -export { IPeripheryPaymentsExtended__factory } from "./factories/IPeripheryPaymentsExtended__factory"; -export { IPeripheryPaymentsWithFeeExtended__factory } from "./factories/IPeripheryPaymentsWithFeeExtended__factory"; -export { IQuoter__factory } from "./factories/IQuoter__factory"; -export { IQuoterV2__factory } from "./factories/IQuoterV2__factory"; -export { ISwapRouter02__factory } from "./factories/ISwapRouter02__factory"; -export { IV2SwapRouter__factory } from "./factories/IV2SwapRouter__factory"; -export { IV3SwapRouter__factory } from "./factories/IV3SwapRouter__factory"; -export { Quoter__factory } from "./factories/Quoter__factory"; -export { QuoterV2__factory } from "./factories/QuoterV2__factory"; -export { SwapRouter02__factory } from "./factories/SwapRouter02__factory"; -export { V2SwapRouter__factory } from "./factories/V2SwapRouter__factory"; -export { V3SwapRouter__factory } from "./factories/V3SwapRouter__factory"; -export { IUniswapV3FlashCallback__factory } from "./factories/IUniswapV3FlashCallback__factory"; -export { IUniswapV3MintCallback__factory } from "./factories/IUniswapV3MintCallback__factory"; -export { IUniswapV3SwapCallback__factory } from "./factories/IUniswapV3SwapCallback__factory"; -export { IERC20Minimal__factory } from "./factories/IERC20Minimal__factory"; -export { IUniswapV3Factory__factory } from "./factories/IUniswapV3Factory__factory"; -export { IUniswapV3Pool__factory } from "./factories/IUniswapV3Pool__factory"; -export { IUniswapV3PoolDeployer__factory } from "./factories/IUniswapV3PoolDeployer__factory"; -export { IUniswapV3PoolActions__factory } from "./factories/IUniswapV3PoolActions__factory"; -export { IUniswapV3PoolDerivedState__factory } from "./factories/IUniswapV3PoolDerivedState__factory"; -export { IUniswapV3PoolEvents__factory } from "./factories/IUniswapV3PoolEvents__factory"; -export { IUniswapV3PoolImmutables__factory } from "./factories/IUniswapV3PoolImmutables__factory"; -export { IUniswapV3PoolOwnerActions__factory } from "./factories/IUniswapV3PoolOwnerActions__factory"; -export { IUniswapV3PoolState__factory } from "./factories/IUniswapV3PoolState__factory"; -export { UniswapV3Factory__factory } from "./factories/UniswapV3Factory__factory"; -export { UniswapV3Pool__factory } from "./factories/UniswapV3Pool__factory"; -export { PairFlash__factory } from "./factories/PairFlash__factory"; -export { IERC1271__factory } from "./factories/IERC1271__factory"; -export { IERC20PermitAllowed__factory } from "./factories/IERC20PermitAllowed__factory"; -export { IWETH9__factory } from "./factories/IWETH9__factory"; -export { IERC20Metadata__factory } from "./factories/IERC20Metadata__factory"; -export { IERC721Permit__factory } from "./factories/IERC721Permit__factory"; -export { IMulticall__factory } from "./factories/IMulticall__factory"; -export { INonfungiblePositionManager__factory } from "./factories/INonfungiblePositionManager__factory"; -export { INonfungibleTokenPositionDescriptor__factory } from "./factories/INonfungibleTokenPositionDescriptor__factory"; -export { IPeripheryImmutableState__factory } from "./factories/IPeripheryImmutableState__factory"; -export { IPeripheryPayments__factory } from "./factories/IPeripheryPayments__factory"; -export { IPeripheryPaymentsWithFee__factory } from "./factories/IPeripheryPaymentsWithFee__factory"; -export { IPoolInitializer__factory } from "./factories/IPoolInitializer__factory"; -export { ISelfPermit__factory } from "./factories/ISelfPermit__factory"; -export { ISwapRouter__factory } from "./factories/ISwapRouter__factory"; -export { ITickLens__factory } from "./factories/ITickLens__factory"; -export { IV3Migrator__factory } from "./factories/IV3Migrator__factory"; -export { TickLens__factory } from "./factories/TickLens__factory"; -export { UniswapInterfaceMulticall__factory } from "./factories/UniswapInterfaceMulticall__factory"; -export { NFTDescriptor__factory } from "./factories/NFTDescriptor__factory"; -export { NonfungiblePositionManager__factory } from "./factories/NonfungiblePositionManager__factory"; -export { NonfungibleTokenPositionDescriptor__factory } from "./factories/NonfungibleTokenPositionDescriptor__factory"; -export { SwapRouter__factory } from "./factories/SwapRouter__factory"; -export { V3Migrator__factory } from "./factories/V3Migrator__factory"; -export { IUniswapV3Staker__factory } from "./factories/IUniswapV3Staker__factory"; -export { UniswapV3Staker__factory } from "./factories/UniswapV3Staker__factory"; diff --git a/dist2/types/utils/anonymizeLink.d.ts b/dist2/types/utils/anonymizeLink.d.ts deleted file mode 100644 index 58d2cb8237c..00000000000 --- a/dist2/types/utils/anonymizeLink.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Returns the anonymized version of the given href, i.e. one that does not leak user information - * @param href the link to anonymize, i.e. remove any personal data from - * @return string anonymized version of the given href - */ -export declare function anonymizeLink(href: string): string; diff --git a/dist2/types/utils/approveAmountCalldata.d.ts b/dist2/types/utils/approveAmountCalldata.d.ts deleted file mode 100644 index 1af5d2fe19c..00000000000 --- a/dist2/types/utils/approveAmountCalldata.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Currency, CurrencyAmount } from '@uniswap/sdk-core'; -export default function approveAmountCalldata(amount: CurrencyAmount, spender: string): { - to: string; - data: string; - value: '0x0'; -}; diff --git a/dist2/types/utils/calculateGasMargin.d.ts b/dist2/types/utils/calculateGasMargin.d.ts deleted file mode 100644 index bf6ddf3cbcd..00000000000 --- a/dist2/types/utils/calculateGasMargin.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { BigNumber } from '@ethersproject/bignumber'; -/** - * Returns the gas value plus a margin for unexpected or variable gas costs - * @param value the gas value to pad - */ -export declare function calculateGasMargin(value: BigNumber): BigNumber; diff --git a/dist2/types/utils/calculateSlippageAmount.d.ts b/dist2/types/utils/calculateSlippageAmount.d.ts deleted file mode 100644 index 02e91c3c864..00000000000 --- a/dist2/types/utils/calculateSlippageAmount.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { Currency, CurrencyAmount, Percent } from '@uniswap/sdk-core'; -import JSBI from 'jsbi'; -export declare function calculateSlippageAmount(value: CurrencyAmount, slippage: Percent): [JSBI, JSBI]; diff --git a/dist2/types/utils/chains.d.ts b/dist2/types/utils/chains.d.ts deleted file mode 100644 index 26df63b7e2b..00000000000 --- a/dist2/types/utils/chains.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { SupportedL1ChainId, SupportedL2ChainId } from 'constants/chains'; -export declare function isL1ChainId(chainId: number | undefined): chainId is SupportedL1ChainId; -export declare function isL2ChainId(chainId: number | undefined): chainId is SupportedL2ChainId; diff --git a/dist2/types/utils/computeFiatValuePriceImpact.d.ts b/dist2/types/utils/computeFiatValuePriceImpact.d.ts deleted file mode 100644 index 8082536d5d2..00000000000 --- a/dist2/types/utils/computeFiatValuePriceImpact.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { CurrencyAmount, Percent, Token } from '@uniswap/sdk-core'; -export declare function computeFiatValuePriceImpact(fiatValueInput: CurrencyAmount | undefined | null, fiatValueOutput: CurrencyAmount | undefined | null): Percent | undefined; diff --git a/dist2/types/utils/computeSurroundingTicks.d.ts b/dist2/types/utils/computeSurroundingTicks.d.ts deleted file mode 100644 index 1a0271564a2..00000000000 --- a/dist2/types/utils/computeSurroundingTicks.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { Token } from '@uniswap/sdk-core'; -import { TickData, TickProcessed } from 'hooks/usePoolTickData'; -export default function computeSurroundingTicks(token0: Token, token1: Token, activeTickProcessed: TickProcessed, sortedTickData: TickData[], pivot: number, ascending: boolean): TickProcessed[]; diff --git a/dist2/types/utils/computeUniCirculation.d.ts b/dist2/types/utils/computeUniCirculation.d.ts deleted file mode 100644 index 1d9690e0820..00000000000 --- a/dist2/types/utils/computeUniCirculation.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { BigNumber } from '@ethersproject/bignumber'; -import { CurrencyAmount, Token } from '@uniswap/sdk-core'; -export declare function computeUniCirculation(uni: Token, blockTimestamp: BigNumber, unclaimedUni: CurrencyAmount | undefined): CurrencyAmount; diff --git a/dist2/types/utils/constructSameAddressMap.d.ts b/dist2/types/utils/constructSameAddressMap.d.ts deleted file mode 100644 index 561a13ec8ee..00000000000 --- a/dist2/types/utils/constructSameAddressMap.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { SupportedChainId } from '../constants/chains'; -export declare function constructSameAddressMap(address: T, additionalNetworks?: SupportedChainId[]): { - [chainId: number]: T; -}; diff --git a/dist2/types/utils/currencyId.d.ts b/dist2/types/utils/currencyId.d.ts deleted file mode 100644 index 1f2ca9b231d..00000000000 --- a/dist2/types/utils/currencyId.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { Currency } from '@uniswap/sdk-core'; -export declare function currencyId(currency: Currency): string; diff --git a/dist2/types/utils/formatCurrencyAmount.d.ts b/dist2/types/utils/formatCurrencyAmount.d.ts deleted file mode 100644 index cee1658aca8..00000000000 --- a/dist2/types/utils/formatCurrencyAmount.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { Currency, CurrencyAmount, Price } from '@uniswap/sdk-core'; -export declare function formatCurrencyAmount(amount: CurrencyAmount | undefined, sigFigs: number): string; -export declare function formatPrice(price: Price | undefined, sigFigs: number): string; diff --git a/dist2/types/utils/formatTickPrice.d.ts b/dist2/types/utils/formatTickPrice.d.ts deleted file mode 100644 index 7104b57d893..00000000000 --- a/dist2/types/utils/formatTickPrice.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Price, Token } from '@uniswap/sdk-core'; -import { Bound } from '../state/mint/v3/actions'; -export declare function formatTickPrice(price: Price | undefined, atLimit: { - [bound in Bound]?: boolean | undefined; -}, direction: Bound, placeholder?: string): string; diff --git a/dist2/types/utils/getExplorerLink.d.ts b/dist2/types/utils/getExplorerLink.d.ts deleted file mode 100644 index f31378386ef..00000000000 --- a/dist2/types/utils/getExplorerLink.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -export declare enum ExplorerDataType { - TRANSACTION = "transaction", - TOKEN = "token", - ADDRESS = "address", - BLOCK = "block" -} -/** - * Return the explorer link for the given data and data type - * @param chainId the ID of the chain for which to return the data - * @param data the data to return a link for - * @param type the type of the data - */ -export declare function getExplorerLink(chainId: number, data: string, type: ExplorerDataType): string; diff --git a/dist2/types/utils/getLibrary.d.ts b/dist2/types/utils/getLibrary.d.ts deleted file mode 100644 index 7901b744d5a..00000000000 --- a/dist2/types/utils/getLibrary.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { Web3Provider } from '@ethersproject/providers'; -export default function getLibrary(provider: any): Web3Provider; diff --git a/dist2/types/utils/getTickToPrice.d.ts b/dist2/types/utils/getTickToPrice.d.ts deleted file mode 100644 index ca53e208d58..00000000000 --- a/dist2/types/utils/getTickToPrice.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { Price, Token } from '@uniswap/sdk-core'; -export declare function getTickToPrice(baseToken?: Token, quoteToken?: Token, tick?: number): Price | undefined; diff --git a/dist2/types/utils/getTxOptimizedSwapRouter.d.ts b/dist2/types/utils/getTxOptimizedSwapRouter.d.ts deleted file mode 100644 index efef8642079..00000000000 --- a/dist2/types/utils/getTxOptimizedSwapRouter.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { ApprovalState } from 'lib/hooks/useApproval'; -export declare enum SwapRouterVersion { - V2 = 0, - V3 = 1, - V2V3 = 2 -} -/** - * Returns the swap router that will result in the least amount of txs (less gas) for a given swap. - * Heuristic: - * - if trade contains a single v2-only trade & V2 SwapRouter is approved: use V2 SwapRouter - * - if trade contains only v3 & V3 SwapRouter is approved: use V3 SwapRouter - * - else: approve and use V2+V3 SwapRouter - */ -export declare function getTxOptimizedSwapRouter({ onlyV2Routes, onlyV3Routes, tradeHasSplits, approvalStates, }: { - onlyV2Routes: boolean | undefined; - onlyV3Routes: boolean | undefined; - tradeHasSplits: boolean | undefined; - approvalStates: { - v2: ApprovalState; - v3: ApprovalState; - v2V3: ApprovalState; - }; -}): SwapRouterVersion | undefined; diff --git a/dist2/types/utils/index.d.ts b/dist2/types/utils/index.d.ts deleted file mode 100644 index 992db2940e3..00000000000 --- a/dist2/types/utils/index.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Contract } from '@ethersproject/contracts'; -import { Web3Provider } from '@ethersproject/providers'; -import { Token } from '@uniswap/sdk-core'; -import { FeeAmount } from '@uniswap/v3-sdk'; -import { ChainTokenMap } from 'lib/hooks/useTokenList/utils'; -export declare function isAddress(value: any): string | false; -export declare function shortenAddress(address: string, chars?: number): string; -export declare function getContract(address: string, ABI: any, library: Web3Provider, account?: string): Contract; -export declare function escapeRegExp(string: string): string; -export declare function isTokenOnList(chainTokenMap: ChainTokenMap, token?: Token): boolean; -export declare function formattedFeeAmount(feeAmount: FeeAmount): number; diff --git a/dist2/types/utils/isTradeBetter.d.ts b/dist2/types/utils/isTradeBetter.d.ts deleted file mode 100644 index fce0b10eee2..00000000000 --- a/dist2/types/utils/isTradeBetter.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { Currency, Percent, TradeType } from '@uniswap/sdk-core'; -import { Trade as V2Trade } from '@uniswap/v2-sdk'; -export declare function isTradeBetter(tradeA: V2Trade | undefined | null, tradeB: V2Trade | undefined | null, minimumDelta?: Percent): boolean | undefined; diff --git a/dist2/types/utils/isZero.d.ts b/dist2/types/utils/isZero.d.ts deleted file mode 100644 index 7afe966870e..00000000000 --- a/dist2/types/utils/isZero.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/** - * Returns true if the string value is zero in hex - * @param hexNumberString - */ -export default function isZero(hexNumberString: string): boolean; diff --git a/dist2/types/utils/listSort.d.ts b/dist2/types/utils/listSort.d.ts deleted file mode 100644 index 88b581cd680..00000000000 --- a/dist2/types/utils/listSort.d.ts +++ /dev/null @@ -1 +0,0 @@ -export default function sortByListPriority(urlA: string, urlB: string): number; diff --git a/dist2/types/utils/listVersionLabel.d.ts b/dist2/types/utils/listVersionLabel.d.ts deleted file mode 100644 index c1dcc4ce78b..00000000000 --- a/dist2/types/utils/listVersionLabel.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { Version } from '@uniswap/token-lists'; -export default function listVersionLabel(version: Version): string; diff --git a/dist2/types/utils/maxAmountSpend.d.ts b/dist2/types/utils/maxAmountSpend.d.ts deleted file mode 100644 index 6ac3c298b2e..00000000000 --- a/dist2/types/utils/maxAmountSpend.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Currency, CurrencyAmount } from '@uniswap/sdk-core'; -/** - * Given some token amount, return the max that can be spent of it - * @param currencyAmount to return max of - */ -export declare function maxAmountSpend(currencyAmount?: CurrencyAmount): CurrencyAmount | undefined; diff --git a/dist2/types/utils/prices.d.ts b/dist2/types/utils/prices.d.ts deleted file mode 100644 index a259afc479d..00000000000 --- a/dist2/types/utils/prices.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Trade } from '@uniswap/router-sdk'; -import { Currency, CurrencyAmount, Percent, TradeType } from '@uniswap/sdk-core'; -export declare function computeRealizedLPFeePercent(trade: Trade): Percent; -export declare function computeRealizedLPFeeAmount(trade?: Trade | null): CurrencyAmount | undefined; -declare type WarningSeverity = 0 | 1 | 2 | 3 | 4; -export declare function warningSeverity(priceImpact: Percent | undefined): WarningSeverity; -export {}; diff --git a/dist2/types/utils/retry.d.ts b/dist2/types/utils/retry.d.ts deleted file mode 100644 index ed1a406020e..00000000000 --- a/dist2/types/utils/retry.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -/** - * Throw this error if the function should retry - */ -export declare class RetryableError extends Error { - isRetryableError: true; -} -export interface RetryOptions { - n: number; - minWait: number; - maxWait: number; -} -/** - * Retries the function that returns the promise until the promise successfully resolves up to n retries - * @param fn function to retry - * @param n how many times to retry - * @param minWait min wait between retries in ms - * @param maxWait max wait between retries in ms - */ -export declare function retry(fn: () => Promise, { n, minWait, maxWait }: RetryOptions): { - promise: Promise; - cancel: () => void; -}; diff --git a/dist2/types/utils/routes.d.ts b/dist2/types/utils/routes.d.ts deleted file mode 100644 index debf923389c..00000000000 --- a/dist2/types/utils/routes.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare const replaceURLParam: (search: string, param: string, newValue: string) => string; diff --git a/dist2/types/utils/safeNamehash.d.ts b/dist2/types/utils/safeNamehash.d.ts deleted file mode 100644 index 852b9452229..00000000000 --- a/dist2/types/utils/safeNamehash.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare function safeNamehash(name?: string): string | undefined; diff --git a/dist2/types/utils/supportedChainId.d.ts b/dist2/types/utils/supportedChainId.d.ts deleted file mode 100644 index 26345016a40..00000000000 --- a/dist2/types/utils/supportedChainId.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/** - * Returns the input chain ID if chain is supported. If not, return undefined - * @param chainId a chain ID, which will be returned if it is a supported chain ID - */ -export declare function supportedChainId(chainId: number): number | undefined; diff --git a/dist2/types/utils/swapErrorToUserReadableMessage.d.ts b/dist2/types/utils/swapErrorToUserReadableMessage.d.ts deleted file mode 100644 index 071e3004bd9..00000000000 --- a/dist2/types/utils/swapErrorToUserReadableMessage.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { ReactNode } from 'react'; -/** - * This is hacking out the revert reason from the ethers provider thrown error however it can. - * This object seems to be undocumented by ethers. - * @param error an error from the ethers provider - */ -export declare function swapErrorToUserReadableMessage(error: any): ReactNode; diff --git a/dist2/types/utils/switchToNetwork.d.ts b/dist2/types/utils/switchToNetwork.d.ts deleted file mode 100644 index f47db5d6bb5..00000000000 --- a/dist2/types/utils/switchToNetwork.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Web3Provider } from '@ethersproject/providers'; -import { SupportedChainId } from 'constants/chains'; -interface SwitchNetworkArguments { - library: Web3Provider; - chainId: SupportedChainId; -} -export declare function switchToNetwork({ library, chainId }: SwitchNetworkArguments): Promise; -export {}; diff --git a/dist2/types/utils/tradeMeaningFullyDiffer.d.ts b/dist2/types/utils/tradeMeaningFullyDiffer.d.ts deleted file mode 100644 index 95a9458a8d6..00000000000 --- a/dist2/types/utils/tradeMeaningFullyDiffer.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Trade } from '@uniswap/router-sdk'; -import { Currency, TradeType } from '@uniswap/sdk-core'; -/** - * Returns true if the trade requires a confirmation of details before we can submit it - * @param args either a pair of V2 trades or a pair of V3 trades - */ -export declare function tradeMeaningfullyDiffers(...args: [Trade, Trade]): boolean; diff --git a/dist2/types/utils/transformSwapRouteToGetQuoteResult.d.ts b/dist2/types/utils/transformSwapRouteToGetQuoteResult.d.ts deleted file mode 100644 index ccc06972190..00000000000 --- a/dist2/types/utils/transformSwapRouteToGetQuoteResult.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { Currency, CurrencyAmount } from '@uniswap/sdk-core'; -import { SwapRoute } from '@uniswap/smart-order-router'; -import { GetQuoteResult } from 'state/routing/types'; -export declare function transformSwapRouteToGetQuoteResult(type: 'exactIn' | 'exactOut', amount: CurrencyAmount, { quote, quoteGasAdjusted, route, estimatedGasUsed, estimatedGasUsedQuoteToken, estimatedGasUsedUSD, gasPriceWei, methodParameters, blockNumber, }: SwapRoute): GetQuoteResult; diff --git a/dist2/types/utils/unwrappedToken.d.ts b/dist2/types/utils/unwrappedToken.d.ts deleted file mode 100644 index d27e94513fd..00000000000 --- a/dist2/types/utils/unwrappedToken.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { Currency } from '@uniswap/sdk-core'; -export declare function unwrappedToken(currency: Currency): Currency; diff --git a/dist2/types/utils/userAgent.d.ts b/dist2/types/utils/userAgent.d.ts deleted file mode 100644 index 0cc77c56a89..00000000000 --- a/dist2/types/utils/userAgent.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export declare const userAgent: import("ua-parser-js").IResult; -export declare const isMobile: boolean; diff --git a/old-rollup.config.ts b/old-rollup.config.ts deleted file mode 100644 index 7da55cde6f8..00000000000 --- a/old-rollup.config.ts +++ /dev/null @@ -1,63 +0,0 @@ -/** - * Bundles the widgets library, which is released independently of the interface application. - * This library lives in src/lib, but shares code with the interface application. - */ - -import eslint from '@rollup/plugin-eslint' -import json from '@rollup/plugin-json' -import replace from '@rollup/plugin-replace' -import url from '@rollup/plugin-url' -import svgr from '@svgr/rollup' -import dts from 'rollup-plugin-dts' -import sass from 'rollup-plugin-scss' -import typescript from 'rollup-plugin-typescript2' - -import { dependencies } from './package.json' - -const deps = Object.keys(dependencies) - -const replacements = { - 'process.env.REACT_APP_IS_WIDGET': true, -} - -const library = { - input: 'src/lib/index.tsx', - output: [ - { - file: 'dist/widgets.js', - format: 'cjs', - inlineDynamicImports: true, - sourcemap: true, - }, - { - file: 'dist/widgets.esm.js', - format: 'esm', - inlineDynamicImports: true, - sourcemap: true, - }, - ], - // necessary because some nested imports (eg jotai/*) would otherwise not resolve. - external: (source: string) => Boolean(deps.find((dep) => source === dep || source.startsWith(dep + '/'))), - plugins: [ - eslint({ include: ['**/*.js', '**/*.jsx', '**/*.ts', '**/*.tsx'] }), - json(), // imports json - replace({ ...replacements, preventAssignment: true }), - url(), // imports files (including svgs) as data URIs - svgr({ exportType: 'named', svgo: false }), // imports svgs as React components - sass(), // imports sass styles - typescript({ tsconfig: './tsconfig.lib.json', useTsconfigDeclarationDir: true }), - ], -} - -const typings = { - input: 'dist/dts/lib/index.d.ts', - output: { - file: 'dist/widgets.d.ts', - format: 'es', - }, - external: (source: string) => source.endsWith('.scss'), - plugins: [dts({ compilerOptions: { baseUrl: 'dist/dts' } })], -} - -const config = [library, typings] -export default config diff --git a/package.json b/package.json index db9afbe993a..75609c355ba 100644 --- a/package.json +++ b/package.json @@ -9,122 +9,6 @@ ], "version": "1.0.1", "private": false, - "devDependencies": { - "@ethersproject/experimental": "^5.4.0", - "@gnosis.pm/safe-apps-web3-react": "^0.6.0", - "@graphql-codegen/cli": "1.21.5", - "@graphql-codegen/typescript": "1.22.3", - "@graphql-codegen/typescript-operations": "^1.18.2", - "@graphql-codegen/typescript-rtk-query": "^1.1.1", - "@lingui/cli": "^3.9.0", - "@metamask/jazzicon": "^2.0.0", - "@reach/dialog": "^0.10.3", - "@reach/portal": "^0.10.3", - "@react-hook/window-scroll": "^1.3.0", - "@reduxjs/toolkit": "^1.6.1", - "@rollup/plugin-babel": "^5.3.0", - "@rollup/plugin-commonjs": "^21.0.1", - "@rollup/plugin-eslint": "^8.0.1", - "@rollup/plugin-json": "^4.1.0", - "@rollup/plugin-node-resolve": "^13.1.3", - "@rollup/plugin-replace": "^3.0.1", - "@rollup/plugin-url": "^6.1.0", - "@svgr/rollup": "^6.2.0", - "@testing-library/jest-dom": "^5.14.1", - "@testing-library/react": "^12.0.0", - "@testing-library/react-hooks": "^7.0.2", - "@typechain/ethers-v5": "^7.0.0", - "@types/array.prototype.flat": "^1.2.1", - "@types/array.prototype.flatmap": "^1.2.2", - "@types/d3": "^6.7.1", - "@types/jest": "^25.2.1", - "@types/lingui__core": "^2.7.1", - "@types/lingui__macro": "^2.7.4", - "@types/lingui__react": "^2.8.3", - "@types/ms.macro": "^2.0.0", - "@types/multicodec": "^1.0.0", - "@types/node": "^13.13.5", - "@types/qs": "^6.9.2", - "@types/react": "^17.0.2", - "@types/react-dom": "^17.0.1", - "@types/react-redux": "^7.1.16", - "@types/react-router-dom": "^5.0.0", - "@types/react-virtualized-auto-sizer": "^1.0.0", - "@types/react-window": "^1.8.2", - "@types/rebass": "^4.0.7", - "@types/styled-components": "^5.1.0", - "@types/testing-library__cypress": "^5.0.5", - "@types/ua-parser-js": "^0.7.35", - "@types/wcag-contrast": "^3.0.0", - "@typescript-eslint/eslint-plugin": "^4.1.0", - "@typescript-eslint/parser": "^4.1.0", - "@uniswap/default-token-list": "^3.0.0", - "@uniswap/governance": "^1.0.2", - "@uniswap/liquidity-staker": "^1.0.2", - "@uniswap/merkle-distributor": "1.0.1", - "@uniswap/smart-order-router": "^2.5.10", - "@uniswap/v2-core": "1.0.0", - "@uniswap/v2-periphery": "^1.1.0-beta.0", - "@uniswap/v3-core": "1.0.0", - "@uniswap/v3-periphery": "^1.1.1", - "@web3-react/fortmatic-connector": "^6.0.9", - "@web3-react/injected-connector": "^6.0.7", - "@web3-react/portis-connector": "^6.0.9", - "@web3-react/walletconnect-connector": "^7.0.2-alpha.0", - "@web3-react/walletlink-connector": "^6.2.8", - "array.prototype.flat": "^1.2.4", - "array.prototype.flatmap": "^1.2.4", - "copy-to-clipboard": "^3.2.0", - "cross-env": "^7.0.3", - "cypress": "^7.7.0", - "d3": "^7.0.0", - "eslint": "^7.11.0", - "eslint-config-prettier": "^6.11.0", - "eslint-plugin-better-styled-components": "^1.1.2", - "eslint-plugin-prettier": "^3.1.3", - "eslint-plugin-react": "^7.19.0", - "eslint-plugin-react-hooks": "^4.0.0", - "eslint-plugin-simple-import-sort": "^7.0.0", - "eslint-plugin-unused-imports": "^2.0.0", - "firebase": "^9.1.3", - "graphql": "^15.5.0", - "graphql-request": "^3.4.0", - "inter-ui": "^3.13.1", - "jest-styled-components": "^7.0.5", - "polyfill-object.fromentries": "^1.0.1", - "prettier": "^2.2.1", - "qs": "^6.9.4", - "react-confetti": "^6.0.0", - "react-cosmos": "^5.6.6", - "react-ga": "^2.5.7", - "react-is": "^17.0.2", - "react-markdown": "^4.3.1", - "react-router-dom": "^5.0.0", - "react-scripts": "^4.0.3", - "react-spring": "^8.0.27", - "react-use-gesture": "^6.0.14", - "redux-localstorage-simple": "^2.3.1", - "rollup": "^2.63.0", - "rollup-plugin-dts": "^4.1.0", - "rollup-plugin-peer-deps-external": "^2.2.4", - "rollup-plugin-postcss": "^4.0.2", - "rollup-plugin-scss": "^3.0.0", - "rollup-plugin-terser": "^7.0.2", - "rollup-plugin-typescript2": "^0.31.1", - "sass": "^1.45.1", - "serve": "^11.3.2", - "start-server-and-test": "^1.11.0", - "typechain": "^5.0.0", - "typescript": "^4.2.3", - "ua-parser-js": "^0.7.28", - "use-count-up": "^2.2.5", - "use-resize-observer": "^8.0.0", - "wcag-contrast": "^3.0.0", - "web-vitals": "^2.1.0", - "workbox-core": "^6.1.0", - "workbox-precaching": "^6.1.0", - "workbox-routing": "^6.1.0" - }, "resolutions": { "@walletconnect/ethereum-provider": "1.7.1" }, @@ -144,7 +28,7 @@ "test:e2e": "start-server-and-test 'serve build -l 3000' http://localhost:3000 'cypress run --record'", "widgets:start": "cosmos", "widgets:build": "rollup --config --failAfterWarnings --configPlugin typescript2", - "snowflake:build": "rollup --config --configPlugin typescript2", + "snowflake:build": "rollup --config rollup.config.ts --configPlugin typescript2", "build:tsc": "tsc" }, "browserslist": { @@ -169,6 +53,7 @@ "@ethersproject/bytes": "^5.4.0", "@ethersproject/constants": "^5.4.0", "@ethersproject/contracts": "^5.4.1", + "@ethersproject/experimental": "^5.4.0", "@ethersproject/hash": "^5.4.0", "@ethersproject/providers": "^5.4.5", "@ethersproject/solidity": "^5.4.0", @@ -177,56 +62,17 @@ "@ethersproject/wallet": "^5.4.0", "@fontsource/ibm-plex-mono": "^4.5.1", "@fontsource/inter": "^4.5.1", - "@lingui/core": "^3.9.0", - "@lingui/macro": "^3.9.0", - "@lingui/react": "^3.9.0", - "@popperjs/core": "^2.4.4", - "@types/rollup-plugin-peer-deps-external": "^2.2.1", - "@uniswap/redux-multicall": "^1.0.0", - "@uniswap/router-sdk": "^1.0.3", - "@uniswap/sdk-core": "^3.0.1", - "@uniswap/token-lists": "^1.0.0-beta.27", - "@uniswap/v2-sdk": "^3.0.1", - "@uniswap/v3-sdk": "^3.7.1", - "@web3-react/core": "^6.0.9", - "ajv": "^6.12.3", - "cids": "^1.0.0", - "immer": "^9.0.6", - "jotai": "^1.3.7", - "jsbi": "^3.1.4", - "make-plural": "^7.0.0", - "ms.macro": "^2.0.0", - "multicodec": "^3.0.1", - "multihashes": "^4.0.2", - "node-vibrant": "^3.2.1-alpha.1", - "polished": "^3.3.2", - "popper-max-size-modifier": "^0.2.0", - "react": "^17.0.1", - "react-dom": "^17.0.1", - "react-feather": "^2.0.8", - "react-popper": "^2.2.3", - "react-redux": "^7.2.2", - "react-virtualized-auto-sizer": "^1.0.2", - "react-window": "^1.8.5", - "rebass": "^4.0.7", - "redux": "^4.1.2", - "styled-components": "^5.3.0", - "tiny-invariant": "^1.2.0", - "wicg-inert": "^3.1.1", - "widgets-web3-react/core": "npm:@web3-react/core@8.0.16-alpha.0", - "widgets-web3-react/eip1193": "npm:@web3-react/eip1193@8.0.16-alpha.0", - "widgets-web3-react/empty": "npm:@web3-react/empty@8.0.17-alpha.0", - "widgets-web3-react/metamask": "npm:@web3-react/metamask@8.0.16-alpha.0", - "widgets-web3-react/types": "npm:@web3-react/types@8.0.16-alpha.0", - "widgets-web3-react/url": "npm:@web3-react/url@8.0.17-alpha.0", - "@ethersproject/experimental": "^5.4.0", "@gnosis.pm/safe-apps-web3-react": "^0.6.0", "@graphql-codegen/cli": "1.21.5", "@graphql-codegen/typescript": "1.22.3", "@graphql-codegen/typescript-operations": "^1.18.2", "@graphql-codegen/typescript-rtk-query": "^1.1.1", "@lingui/cli": "^3.9.0", + "@lingui/core": "^3.9.0", + "@lingui/macro": "^3.9.0", + "@lingui/react": "^3.9.0", "@metamask/jazzicon": "^2.0.0", + "@popperjs/core": "^2.4.4", "@reach/dialog": "^0.10.3", "@reach/portal": "^0.10.3", "@react-hook/window-scroll": "^1.3.0", @@ -261,6 +107,7 @@ "@types/react-virtualized-auto-sizer": "^1.0.0", "@types/react-window": "^1.8.2", "@types/rebass": "^4.0.7", + "@types/rollup-plugin-peer-deps-external": "^2.2.1", "@types/styled-components": "^5.1.0", "@types/testing-library__cypress": "^5.0.5", "@types/ua-parser-js": "^0.7.35", @@ -271,18 +118,27 @@ "@uniswap/governance": "^1.0.2", "@uniswap/liquidity-staker": "^1.0.2", "@uniswap/merkle-distributor": "1.0.1", + "@uniswap/redux-multicall": "^1.0.0", + "@uniswap/router-sdk": "^1.0.3", + "@uniswap/sdk-core": "^3.0.1", "@uniswap/smart-order-router": "^2.5.10", + "@uniswap/token-lists": "^1.0.0-beta.27", "@uniswap/v2-core": "1.0.0", "@uniswap/v2-periphery": "^1.1.0-beta.0", + "@uniswap/v2-sdk": "^3.0.1", "@uniswap/v3-core": "1.0.0", "@uniswap/v3-periphery": "^1.1.1", + "@uniswap/v3-sdk": "^3.7.1", + "@web3-react/core": "^6.0.9", "@web3-react/fortmatic-connector": "^6.0.9", "@web3-react/injected-connector": "^6.0.7", "@web3-react/portis-connector": "^6.0.9", "@web3-react/walletconnect-connector": "^7.0.2-alpha.0", "@web3-react/walletlink-connector": "^6.2.8", + "ajv": "^6.12.3", "array.prototype.flat": "^1.2.4", "array.prototype.flatmap": "^1.2.4", + "cids": "^1.0.0", "copy-to-clipboard": "^3.2.0", "cross-env": "^7.0.3", "cypress": "^7.7.0", @@ -298,22 +154,41 @@ "firebase": "^9.1.3", "graphql": "^15.5.0", "graphql-request": "^3.4.0", + "immer": "^9.0.6", "inter-ui": "^3.13.1", "jest-styled-components": "^7.0.5", + "jotai": "^1.3.7", + "jsbi": "^3.1.4", + "make-plural": "^7.0.0", + "ms.macro": "^2.0.0", + "multicodec": "^3.0.1", + "multihashes": "^4.0.2", + "node-vibrant": "^3.2.1-alpha.1", + "polished": "^3.3.2", "polyfill-object.fromentries": "^1.0.1", + "popper-max-size-modifier": "^0.2.0", "prettier": "^2.2.1", "qs": "^6.9.4", + "react": "^17.0.1", "react-confetti": "^6.0.0", "react-cosmos": "^5.6.6", + "react-dom": "^17.0.1", + "react-feather": "^2.0.8", "react-ga": "^2.5.7", "react-is": "^17.0.2", "react-markdown": "^4.3.1", + "react-popper": "^2.2.3", + "react-redux": "^7.2.2", "react-router-dom": "^5.0.0", "react-scripts": "^4.0.3", "react-spring": "^8.0.27", "react-use-gesture": "^6.0.14", + "react-virtualized-auto-sizer": "^1.0.2", + "react-window": "^1.8.5", + "rebass": "^4.0.7", + "redux": "^4.1.2", "redux-localstorage-simple": "^2.3.1", - "rollup": "^2.63.0", + "rollup": "^2.66.1", "rollup-plugin-dts": "^4.1.0", "rollup-plugin-peer-deps-external": "^2.2.4", "rollup-plugin-postcss": "^4.0.2", @@ -323,6 +198,8 @@ "sass": "^1.45.1", "serve": "^11.3.2", "start-server-and-test": "^1.11.0", + "styled-components": "^5.3.0", + "tiny-invariant": "^1.2.0", "typechain": "^5.0.0", "typescript": "^4.2.3", "ua-parser-js": "^0.7.28", @@ -330,6 +207,13 @@ "use-resize-observer": "^8.0.0", "wcag-contrast": "^3.0.0", "web-vitals": "^2.1.0", + "wicg-inert": "^3.1.1", + "widgets-web3-react/core": "npm:@web3-react/core@8.0.16-alpha.0", + "widgets-web3-react/eip1193": "npm:@web3-react/eip1193@8.0.16-alpha.0", + "widgets-web3-react/empty": "npm:@web3-react/empty@8.0.17-alpha.0", + "widgets-web3-react/metamask": "npm:@web3-react/metamask@8.0.16-alpha.0", + "widgets-web3-react/types": "npm:@web3-react/types@8.0.16-alpha.0", + "widgets-web3-react/url": "npm:@web3-react/url@8.0.17-alpha.0", "workbox-core": "^6.1.0", "workbox-precaching": "^6.1.0", "workbox-routing": "^6.1.0" diff --git a/rollup.config.ts b/rollup.config.ts index 8078aab46c8..ced2c024106 100644 --- a/rollup.config.ts +++ b/rollup.config.ts @@ -32,7 +32,7 @@ const replacements = { // const ignore = ['styled-components'] const library = { - input: 'src/snowflake.ts', + input: 'src/snowflake/index.ts', output: [ { file: 'dist2/snowflake.js', @@ -49,11 +49,10 @@ const library = { ], // necessary because some nested imports (eg jotai/*) would otherwise not resolve. // external: (source: string) => Boolean(deps.find((dep) => source === dep || source.startsWith(dep + '/'))), - // external: ['styled-components'], // external: (source: string) => ignore.includes(source), plugins: [ // external(), - eslint({ include: ['**/*.js', '**/*.jsx', '**/*.ts', '**/*.tsx'] }), + // eslint({ include: ['**/*.js', '**/*.jsx', '**/*.ts', '**/*.tsx'] }), replace({ ...replacements, preventAssignment: true }), typescript({ tsconfig: './tsconfig.json', useTsconfigDeclarationDir: true }), @@ -86,7 +85,7 @@ const typings = { plugins: [dts({ compilerOptions: { baseUrl: 'dist2/types' } })], } -const config = [library, typings] +// const config = [library, typings] // const config = [library] -export default config +export default library diff --git a/src/snowflake.ts b/src/snowflake.ts deleted file mode 100644 index 967b576e09d..00000000000 --- a/src/snowflake.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as Swap } from './pages/Swap' diff --git a/src/snowflake/Providers.tsx b/src/snowflake/Providers.tsx new file mode 100644 index 00000000000..d649f010aa5 --- /dev/null +++ b/src/snowflake/Providers.tsx @@ -0,0 +1,33 @@ +import { FunctionComponent } from 'react' +import { createWeb3ReactRoot, Web3ReactProvider } from '@web3-react/core' +import { Provider } from 'react-redux' +import { HashRouter } from 'react-router-dom' +import Blocklist from '../components/Blocklist' +import { NetworkContextName } from '../constants/misc' +import { LanguageProvider } from '../i18n' +import store from '../state' +import ThemeProvider, { ThemedGlobalStyle } from '../theme' +import getLibrary from '../utils/getLibrary' +import { Updaters } from './Updaters' + +const Web3ProviderNetwork = createWeb3ReactRoot(NetworkContextName) + +export const Providers: FunctionComponent = (props) => ( + + + + + + + + + + {props.children} + + + + + + + +) diff --git a/src/snowflake/Updaters.tsx b/src/snowflake/Updaters.tsx new file mode 100644 index 00000000000..2b460e019cd --- /dev/null +++ b/src/snowflake/Updaters.tsx @@ -0,0 +1,23 @@ +import { BlockUpdater } from 'lib/hooks/useBlockNumber' +import { MulticallUpdater } from 'lib/state/multicall' +import ApplicationUpdater from '../state/application/updater' +import ListsUpdater from '../state/lists/updater' +import LogsUpdater from '../state/logs/updater' +import TransactionUpdater from '../state/transactions/updater' +import UserUpdater from '../state/user/updater' +import RadialGradientByChainUpdater from '../theme/RadialGradientByChainUpdater' + +export function Updaters() { + return ( + <> + + + + + + + + + + ) +} diff --git a/src/snowflake/index.ts b/src/snowflake/index.ts new file mode 100644 index 00000000000..8556f6a5742 --- /dev/null +++ b/src/snowflake/index.ts @@ -0,0 +1,7 @@ +// snowflake exports + +export { default as Swap } from '../pages/Swap' +export * as serviceWorkerRegistration from '../serviceWorkerRegistration' +export * from './Providers' +export * from './Updaters' +export { INFURA_NETWORK_URLS } from 'constants/chainInfo' diff --git a/tsconfig.json b/tsconfig.json index d28b310287d..113e5ab28bc 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,12 +2,12 @@ "extends": "./tsconfig.base.json", "compilerOptions": { "jsx": "react-jsx", - "baseUrl": "src", - "outDir": "dist2", - "moduleResolution": "node", - "declaration": true, - "declarationDir": "dist2/types", - "emitDeclarationOnly": true + "baseUrl": "src" + // "outDir": "dist2", + // "moduleResolution": "node", + // "declaration": true, + // "declarationDir": "dist2/types", + // "emitDeclarationOnly": true }, "exclude": ["node_modules", "cypress", "src/**/*.test.*"], "include": ["src/**/*"] diff --git a/yarn.lock b/yarn.lock index 771b04209e7..65d004e1e37 100644 --- a/yarn.lock +++ b/yarn.lock @@ -19057,10 +19057,10 @@ rollup@^1.31.1: "@types/node" "*" acorn "^7.1.0" -rollup@^2.63.0: - version "2.63.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.63.0.tgz#fe2f7fec2133f3fab9e022b9ac245628d817c6bb" - integrity sha512-nps0idjmD+NXl6OREfyYXMn/dar3WGcyKn+KBzPdaLecub3x/LrId0wUcthcr8oZUAcZAR8NKcfGGFlNgGL1kQ== +rollup@^2.66.1: + version "2.66.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.66.1.tgz#366b0404de353c4331d538c3ad2963934fcb4937" + integrity sha512-crSgLhSkLMnKr4s9iZ/1qJCplgAgrRY+igWv8KhG/AjKOJ0YX/WpmANyn8oxrw+zenF3BXWDLa7Xl/QZISH+7w== optionalDependencies: fsevents "~2.3.2" From 69d46bf3c6283ae8248be591fc9f12ba1a86e463 Mon Sep 17 00:00:00 2001 From: David Wisner Date: Fri, 28 Jan 2022 12:13:14 +0800 Subject: [PATCH 07/15] update build --- dist2/055f83ffb7252729.svg | 9 + dist2/10f062d02df4af77.png | Bin 0 -> 226315 bytes dist2/c2cd04251aa24c34.png | Bin 0 -> 422655 bytes dist2/d13f13f5694ec91f.svg | 9 + dist2/f158a440053a5ad2.png | Bin 0 -> 685688 bytes dist2/snowflake.js | 60923 ++++++++++++----------------------- dist2/snowflake.js.map | 2 +- src/snowflake/App.tsx | 86 + src/snowflake/AppBody.tsx | 25 + src/snowflake/index.ts | 1 + src/snowflake/styled.tsx | 12 + 11 files changed, 20589 insertions(+), 40478 deletions(-) create mode 100644 dist2/055f83ffb7252729.svg create mode 100644 dist2/10f062d02df4af77.png create mode 100644 dist2/c2cd04251aa24c34.png create mode 100644 dist2/d13f13f5694ec91f.svg create mode 100644 dist2/f158a440053a5ad2.png create mode 100644 src/snowflake/App.tsx create mode 100644 src/snowflake/AppBody.tsx create mode 100644 src/snowflake/styled.tsx diff --git a/dist2/055f83ffb7252729.svg b/dist2/055f83ffb7252729.svg new file mode 100644 index 00000000000..953202dc6a5 --- /dev/null +++ b/dist2/055f83ffb7252729.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/dist2/10f062d02df4af77.png b/dist2/10f062d02df4af77.png new file mode 100644 index 0000000000000000000000000000000000000000..09e9137752f4bd8a802fb7719e2a4eb7be0d0dd3 GIT binary patch literal 226315 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

18O_7QLX{k+0pZqX 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�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.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

qD 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%0AoxnW`*`oBB|sKTpSovmz;=Ahyjq~?#5 zvODF}QIpjATKEPg^aMgBZ}Q&;vhV}t5UzK!OKiw}nN-!00>dFi|B8O$y{!3dm8(+7 zd^(j?cG40=k@tnP4+H&tjK~4n1t^ zZmkgk@#GLFF__U_g@#<5-&NV}n2{@dfS}=T#;X+F)Eg($45^gBAa5Cz=IiVynN(`5 zC70O7Y$nqO2a9?qjLm8#euWDI^&RIbF0Z|gEwnmFAISGrh_kmxMX3#{-DC`my~<$i61l0m*6y3Hz1KtN%_6q(GsN!bj;MiF?(WUEPFYEQQa6!p;#RSDhMGer)B#@IEt8neL}V zY)rIz?{=4)So9~Xu>r`w-dw(qZV{S0|mezCnOp#%-q5ws@kQ)G?G+7 zKyddKB+t2qJQ2kJNj^!W$k6AdSB0)mFQ<<|Q9=JxNa{?@R!^e|Ayq*I86EPg%4N+Z zY?e+nq!Xp&kw`cjZk=H$x|oN#fS(>YhbDN%@in3LHlm-3n7J~|`;cmF_TY5DFH$n3 z^;qL{uwV67@=Y+itYR>ffNDqx!MN@3Z5W7?Pl?^&#AP6G1BN8CYEvk#VbgCj_}aDW zv1VA7N=QX5KfKP4B5#_iU|Jb@qbQ5AoVGC-otsKE0b<>ge?2ipkk|o}*jH12SacC6 zgks}Dfr3TOXLM_RuH4|<##>_6W~lV!0fir{EU=jz7omt(8SAYadGQPL9fLJwvRF0q zdcqV3>cNgVGpW2s!{Ny~e-PaT+Z=G!#iO6GmbfG9mtdtJs^~3VFSDiholts@K={Mg zB~}BEaaHC<8#skiay8wi9t9+Fr5+w{FopOrG)ChWXS$OXhllTFc~5$uv{JeMFhZ)k zUz`1h%Icqvp}aAROY(`K=eo;!!$)B7HDUtbUVRq(2~JcTi&D+xm#R09?_?<}zu~Zh zdjvA5*^A)ZW7b4xE3vJyHmoh$YUHnp{w+1tX3>_-hc3X(<tgN)VD(v3- z#)t3KWNC`LYt1#x`e75SIwk7v4<<ny`wY?G73(=dFZeoaJ!MLw#sD<|}&TX0G6YquQgs zfqd<|ZHT0w!hOaVYjftlqtz2!I3Yig2zU+~Zbz5S{AYL6$Kf3~LIBFG&~sBa#M?~_ zM2gREfV!}bH?DlTcClD6*a3e`iA#9y0srgw~M7%|eF(66719x@i%lHN6mrDKDKY<0l;P?R9;}(G4}@>Afx0fC-ud zF>D@R9)mCn!75y`RU~tv30j2;TF2a^3~|z9OiH^mH*f{`#0=FKNSqT}xP*3p%kD>G z;445ET$lZ$g`?E3MoQ05J9MfH-gX3ZthKfmJ)!^+Hmtl2OSIBJ8}S8H0m9I%DKl}h zvAI64cU3X;(!I~6S$f9~#c1tqLIwL0+c_w8JeKY0{)nxp`Kz&KRMyED-s%+?R!_)9 zv52GEdo#t$CVe-KH7lM<Z1A`c;I;3@} zg^ffF>G@2SsyS+L+%c0X8R5|L*3sTLLi%o~v=Z7GoqD`RjQP)StMqEOp>tXqhyOQ= zrC~5?vS+|H%nC|L{@T7D{{84uvd`vol#f}6<5dgYO=w!wH#C(uvUN1s`W4Yyguftl zk%ih((StifsnfYBo9+}=A5QW}C+wknL|1e@(@oaIDb!Phg4Uf+EM4yoZ;GytSRm>H zgJs%86^o%rIc9$L>Wpc3CO!eGq<}*0Wfr`X5;{;l)K~cfD>dQoTa7`-i3q0qklI=; zOGhn5O(#QI3-BVdLp+uutic;7&|}59;^YhgbaBh$Wx19y-!}X2WqW||L1A7?nm4)X7>AY5Z}Y_Ec!*1A7a;2< z76M>JiF>6ru12f5qonr32qVUceyp1F4%78?kB>7}bF(&ziCod?iMTJg!T=h(=`1@z zAqn&@%v{BIJt|fe(&g6aw~wr2g}HBGEXt7MhR@H>hXs7h5rBnxO)Lkljm-cok-=~- zMxhx_S1EZ?E1Fpk?D0U3yyNAm1Z#J7KNgEc4M;F$m%LN5Zw3VonWc7g9NXv$gsZYp zqYd18extT~C~Q;sn4Rd56DnZ)$h8xG*c~r3qrK8FUqO4@i@gDFV@M6- zB}+*@GuotC0Ovlglm*Wd#@?YeU~F;Gcl zJOe9i4{&j6dw5rATd675*Hvb0qPHK_>*}%HwRW_V~vhGmeQ)(pLl|Hjz7iM54F<{m|Sn##&0vXZABEN}V;(ak% ze`LSL&!W%o-RaD{O_r&#ovSGGkp5ksJ0t7Z>5-nwsiM{9%Z7?a9uE8@-8)H1jt2?s z&x-rHu>$g>j4TUL3dBF!X4ZI;(J4Zh3X~~)qEqs)hzNT)Ek;i-Np`rBXQ^6It=S*M zYa9|YFq!p)kGISCIc(==$)R1gT9BlqWZ1-8gI-91&i-enX9K$5Qe0gW>e$d4pwP)~ zhaoEnTtf95;Fk)DRYqnjx$LvZvpQ}5L&CooQKuVGD7qsnTNIA_yS_#9bB*+;t{!E4 z3vxTAB>k4fB8mmSvB6pPXjRE&s9Y3A4kk;vssHpHl;Sn3Y&9r?cD$NeIo)vy2(B6w z<|XkH95b$0yQ&{IFHg*6wLsFosTS)gw^d7c4x4lup8TX#%d(ije!7WXc=iBQiA~1g zL(xdD`pL#7BMbCnbFs74zn%0Z!>#Jf9}-dL$GFQawma7N*tF8$QBT&pjWxEe_)4#4HV_oj4q7J2Fyn_xb`vV}u0hN0Qk{lEVit!;e# ze6v~L=l*P1nfXzFq8YEeTn%O4@G3h9XP2$NbNF^4s+TSpOCA>Bz38n`Yj2Hd&P;+1 z9!~a@P^*D<_^R31+fs5_ByoXTS!P-BKmIFScF%;?Xxw2|I=tgRJF8Npua97})KbosG4dkXn(`qaBdT&1`;M48SNkGnaf<9(-eGMl6ys%Zn0XhwCA&< z*mvyLFwG`$orNxdo=GzK5{D_DiTF(n&N=@}Zd28C3~+2yh@1MXbSK#&^>I2W?i5t2 zEDGDNESfkqX@choGnH;=7OgtR=^T^l@OL`AFFTHdMJV@e-Hb=~I!?Rbj(mMMA~0BB zBmMl|p}fd3#TNZum4RKYvGHgK;HjVa4Xb;@vC+IMAsa7JK8_0!AMr^Rg%l4f#+Zwz z9T`jqdozFsHo`Xts%bJkf}1GeDfmTWe|c-|Pfgvtk%E@Nv=}1%Si*8+pcs|K&JHUpp{A8RKn356|Z;e4trASL>tCR_R5l zGCTSyC(m4kOV)knfQf^|YjTniWG_y{e*zWhpv3_g>l|U8p#3%r^((+Fb#x<+5)B`@ zpWmM5djO(9N}GA}?s^3X$F=VoKJ^`N?hX{*P?+~5QtQsR>u)rt6|5Y?ECu>D8c?7C zw$hFZ0!9e9YgS6rwJHzILrHU$f@5**v#tGv1zTz2`<_XDtz%)@wIU0Pi*M{VF;>+Z z>dyU)SOQmS?g(8Q?6MtQf(>ARUy6Q!plYVj$*26Nz}G{9Az8gA5~rRJ>*3kk~C4%{@xACz|G!Rr;7suKSGN3}$UMw^+vJ$Ym>!tlm<9 zuIcP+h;*p*Z7@dXJ`a8)LOt zE=kjcgdi^}NXO%C@gvp01D65qK`)QC5`GxPo84hPFxLSr7VcX^=ji%Y*s4i|>+nqrG3)E&>V zPrHv{ZsGO`Q64OaZNzA%9PJ(XyfYa9))cqr!abvpJJFiN>nvJHsU=6Z6-fnzfvo=U zipz(naS|eL;gZ@b(N^70=rb51#~xAn;HpYNiM(5>H;-+wx5FgZWA$p;5nDB}iPJSqaGK9WQFgRY|z@s5s^d_PR~!A67B)bQH3&__I6H zzi%*-9xbt*JaYW$VbHyZqr@J%^km1mA}h;EbV`v1`oQHTp+?H#Gm~PYuMu}j8Q*|S z{yn!`MMV02xK>J4XYrp6DL2(f-NfyP5b}ej)A`M`(e(o#$+PI>bKwnf9JkKu5jh#k z4(pRaT3U-C+);Xy_&i2xs^ zL%#?b#wY+K`Y~Ailz)t6JNfIvHlSvH&qjq za~|nIZ%3Nn55=%3h?8@2QHt*lF7_I(Zf5gh89e|A)#1U+T{b%F3TT#ieTz^xJzy7W zx)2Bp#e$Z_J&Df`4)x@+m&2$!*hM5LAP^ceWR`92YJ5|&>=*6{`u_aA-tE=_VDoZs1=cy{lw>VN<-5wcjborYs(-Q(qMVVNy`Yr8`NY&DcXpqW4zlNI z^ej#^Y4$&${sLl+m+`msZz&wbs}o-uh!psaqip4d7>TEXlMMG>?igbjCx4jOsHc&HgZ|nlg)s6BKBsLfA)Ma;eQ*;UKNsF`^HHajcol&&g^tnKOa zwM7(}1qC}Rt!8S!R#$3jyGfJXr6o&@C+*cKCDz0V_oeGyPYh)nmpLgoD$_#a8IOA- z%>-c7b5I!JF+T}mq{If-uC-gE; zY5&d;3c<~u$mnww!r8-ra}}N<@M^#0@u>s{Ivr=NHWa9cpe!VsN{$-95`PI80JZ!d zGdCsd|Eaq3wV9dm1B-fO-g9n zGx$#jb_wlNVQO1;Las6_2O|=YrQ;GNXNIWX-+vlhQDaK1D>9HFM3v2Vn7) zX6iTwVL;t^r)7jP&DJQ@Qv!-c|Cg-E;_4i#+OlDKip8aND?Wr`#x_1MV7dL9zLdH7Dd-cbd%3Oh)_MN+=o{#j#O@qQ=8vqcQ zS-z>h;gYj!fHP+z8aZE`7k%RP)raJS%&_xXUK6kJIo&?qH@jz5LY++D2>yfdk!h@| z;bLBj6F7EQp-m`A*72M!l*y-z*p%o#P|2ciOd&avn5yGHl6mZq)}K~2 z2{aaEdOx9}zsmddETw1Y^ro~K@{AK3nCK`t1~?04xgv{oOIjp${H63^@v*v5d-{SP zb`Z7`rRi}AaHZ7WSgd628TehWf}hzBT(_Qtw#yelMo4C8rbt5G2z*>*E0TcLUol)KgnTM zj&ETfkRV_I#Du$d>|+tc;pjgJgPi)efn3#F^ke*SNJW>HT(fhtiFV@%Pfi5Cgwc=o zhuTx1nqI5ZYOv@9B>L8chraxG4y`i0nHn>!(_f1we5Ue(qw||?_Yn=_Gq*v8o(?l; z^>bpsKr3~cYk>{u@hojg^J{CJ(zQ~Em0X2?zsxa!17+%MOt@O5)StxB^=JRzl#{p` z7+Xq77cr~O?!ham-lJOSMl<0n<1klTYwWu|U1iZqs(FIqYUp7*Q(8W#;I%vJU=y(Q}tMG<4B8wO$rt(_cMpPDW#{Y zA6Gr3Vxxm?CzokZ2>G%vawA0?AO>b5AK<*^j%Vx4_4|PTUirpf&~Q=Z{Yr9NG|XOM zSWE)T2ED**La&mwPpsXo1~pVQk?-Gcu2%G|hBs=zx?;?Q21n*?C@rfqc0TNz{> z8C^Q;!X=@*XV&v%>Z`(ayY=%8+ePvUPdD7npKU^0bx&P?7AEbP3e-HCYrkt)1h}#k zzW)iY1^)-A%%Rs%lxgVUCh|7d4TyL_Y4fw~-SnFWs6G5dB#gfu3DyVMt>z%DxA(By zzBe6BuB~|k|7EwvvZ)#1T^#}bafqbX;oN}vmG`tdY<1ozMC~2{)ld3(@XonWoWOS} zE0-Cx-xQa(474rpP=!ZCgfIE?8OXBx*?eb`)_bs&FCc|BDxums$Nny7aQ^XYLDqILn!y1NRZ z3NUQFQgBB;j^-RTC^F2#djS|YGF8opCxewp)*KvGY#ea2FoZrQe+zU~LL}O+{5F{7>vwL+&ZVZHqWOC#4~p&s-P8 z9h5T8nD?0n=F7f6N9%V^_Uof~FZ9=n1~-tjo$~#DTp_EJy1XdTqtCW1m^oSPCJDMf zMN~uj{$ss7Vm2kLQ1lltmQp_gsnHBSf18EWpS(sJdvXJXpA&=8GJeS zkj;p22+)--EXFo6DbBVFH!}9?bhCUtE~>K|Ox);I?S*uu&= zt~peN?Hil(42y-M_*8voabNbN@lWB>cR#O!M91&>u)R@0i>&((pj&A3o88{w9^Yfy zODw+s9^4&&Q)1;$y<>x9Aq=%7#jomJGZDkdS`=8#1jjxws#@w}&>L+i)>T9?2&>ErMIB^&0S3)QGwCkTb4m9_#hNTXg0MF>!b)#?AB!zdb zOSD!GU+l8l>2i6qWTarW^?!c+s(H#>6sQ+ja#C`m*}BtZFgD=B`0-zkl%N8Eo9Ssk zL3z=57@N1H#U`~&{;36E$MOfErEi-xG3A)+86=lP3t#9iP_E4Jtu#m5Vuj?IV-HKw z)|%#N5qIFnheSOvo(S5JYb60CihSQj1+u5P&@7(2NZ4+d}^`b1xK*s(Cv!=>q zjOyv{l)Y;~D7@dS%I}QV2(SEaDuqt1ZBI)0^L~3owAu_GWPpr$vt>`xW3xlw&P)60 z`T}6{&uV2%?9W-P1SW(=^)V%eIwVe3=S<4FC_#|2aKG6qBS~S8zF4Q|p?SlE zKS`9$sDYZauzts6pI$dSo=I=Z)DV2|X_b@6iURMMJf%v+7oF~#z@{u(cu$2wQ8=q3 z$@RliO5nY0dzQ9Z&wy6G0^Kz3+gK^6l^UYsaEzn57pH7Yt^~glW90!)CbVaF!M4d^q(D})1uXiRq8vIe zLweqS}M|F*J`o%Zp4=o`c-AC@<(#b*Pb zn1jLrizj?uBFU3`@A4@WE^F}g1F5|mB(7}m-|A8-K&YcL6cp+HHS~`9{`%`o5N){J z)rVaI<&!E9MP`TIlTZ0i3fHyBMJ?q$Ru zG92P8gvlQJnL^!a++jNM`a%21jk-w`(9h7WWNUo~TRpp8s|G7Uqfb85%X;;~pS33h zTjh|SaEGygCx|56g4}^|Ijr&0YmmQ)okqG+9QjyEq1U%1R3_+~(kbqP=7{qdshhCQ zKKHz(LvoOHoc>0|{$SL2mEj1#*V3K@qlr9eE?y4WoEiRU>kY)ckPB!mKc4HTZ@^ZU zD1+9S812m_S~^r8)=o9Z#ni;dlA+H_>{qO0&$qA?A8pc(E7i60;>M%#p@V=RIkS6{*Zz9i^;TRY{!OY^PqSvQ+; zx+ixb*rWcqX8X$N#AK6Q_jU8xqaEyKH;!e6120pM0}I2_wd{j*n+!AS=xc)gLq99g z4x?;blzH=A3MY9YcWN6j9K`<1&a*n+wVrykfc<71H*1}jHolg%e#L1NIWgIdw>@Q{ zhf#=P&?q+;CVlama<3P`^v;{4hedpad<8GYY(QtO0ReK6dtV);ykr?qVjcQW>rP6)ke7K3@U z_~zk7tE#iyuwkt+rk4>Rv8GdWcY>7|2yT75xy! zld@84C?}pfFvt!#ywkds(^M<6w6P}pyw=7%4Qmw<9c0O|zc$=gX#5GD_J}k`9kZ@2 z;ojRYixVB*nF|#;oEO&V3p3_RDgZ}7xW6?%aBIOt41VK-o=4{$*|=jp-%bWJ^MEHXljgbVQot z^_2|DOUtN-NgYkF2X?O*#lm5?wkPL;YjW*0iky2?SjK@8X-QsDgoxN2S zq<5-nIhG+dnmMorB7}VE^@G>yo%V!Vs4+nsZ43~sLeOO=)wG|O_hC18?piE~*l&%` z1#y@NV@RJB^(bSKsh|CwbNbG#ZEEbQI?KJ`3AQsad8h}`#*vs7?Tf}*Tl%(C359o% zW31;v1w@lKQ@rj8R2C& zZp}_ro}KlR^}b)T3?hdn!tFZQEXIN25nq7E->%2^wg|61v5A*PChWd7!m-BBNBhI9 zhq{LSVS8ELK3p}NPk4oR{RT%joonM7x#`!~POXf2(G?$z0;4gn<{I?LGqNtW2@yr{ zJ~sCGeJz+4>IfsX%IwCTCRcncq+bWw*nO3?0jy8rx4&NeA2*~*iUwCL_s?6BX*dO@WJ8qHkmCyAw;iMbf`-GW6I^IPsS&ZV7 z@J&_P^x;aHQSSQAMO+p$A5dqP}pI zi76Yl5yf9ugTT4s^_sUAC%wZt$%(n2%UA6e|}lgdcyuf|H5qT zo6TZr;p|~M(6ihJ8nsQoIh4|QBk$jOhHAl;P|Wt+u_PPTbBz_L(mZ)`pMiF3kjtmK zS}sM*LwR$w;ybQT#sb!P(d2!ix|cMYiP!jv5KDW`LM>u57|a}j17XaBm^XU2%y{qG zWifwOuduCdYl(;)X+zR&t5&*iybXc$rBLodBU-d{#h~@*W9-b4WjXJV?A%0W0SS3F z7Lw^AZF)jdto+ZLj+FApNeJ`uQ|Q8mWvEJG2)2^l4hEF}CZVh)#Mo7MdeCNynQb~f zR60D_@dlh@Aw<`rVS%e9#vE~}@wm5DAI!fIc;hdPR+m5e0hAky|JvYZe)!RIDq6pSy^j0s*p?YE2VZs_~~?(G(dZ-o@HEHJ0-@^G!ma&s+htc^tG$a zjb7{5U?BnW{R+~NICMN0f4Ctu0o>0s^LToR`~rusUyOp5l?6&2gkfW=D-Ps3w6O0I zA1BBE^@ucGnB(;*M1QGdqq`2xfZ)9+vvp(NUmfM329E#~Q*^=WCd1EQj^3!JQC_A{ zlqyvy5ro*4d($nb%)kRQTfEz3u6+3*C~*?%`;EGvwsc&X1P$*P;fpe}5?Oyc!ml^l zShrFq)ouY9Uxn7)HhH!&@)_*?jF0N-Gi5#UCfS7@%&Omp(y@3vypP|0aNh!GkL!tz zV%)u>KE**$X5GJyYQk+`zGSE>@f#YxKWqD|?3sD&TSK3&3GJSmGWKsh$>)g~S`8R{ zF=>CQ;XrQ?)(PiuHI&fF)RwcvoIAkqBt+HWdO&=FS(4E2ZmD%JqmdBN+by;kHnZh>A&iP zMn2CB(rXkGBzWBBI9`K1D{eT7Hlf%-J5=e9cRzAS=`soehgXJ0N;KHyOUPTG!BD?0 zfk~9O=moGN!k|Z!LxJlUWD{k*E1bFwL6Z7W4+Zdhyc?4vNB4h7i`Ug+g%ATCipaEc zTnZ@|YCXVWjcvSec}%}N?HtB^CjNcdbqG$YzvgaoVt|L>)<6fG+iNwkER z20pwsVxX0IoFs}Fi|qt+EQ7<#d+)J`aV?}w&SMxi`;>-VPU;zpr#{EwZ(N7>GyPd; zP=Jkc7ZF$WpFbY?j7THV`{dF*E>@VSa^nMfTG~)sd3iL)cfY^qC3Bav77^ zF2MHBK9bE)O0>DM@&1j)G6xjqT^N3lyd~S$v85c~!CnM2x;%u=amonyA=P9F1~n6{ zzruCzQA+d}1-nYaE6N}$6u654YnAwAN~XZsE6OOc(Zd9%F;yiox<#d7M{bDOmjaR^daWKZApD>biIGuQxQ+#xFjqJL2`(Es5*S(mR9^z;F zHqP}|eLlt}(^L-VcK?&f{Ko_64;=p=m=pLh4)GD_jIO8_(6i0B^$j8zZ;I9T?70mp zXY4>x9@`)c?qe&gB{*2RQHI6H(asqkPOHx^S3QS8H)hd)(%+0@|NYJ8otF#X*Ky)r zHx{=wIko!jP5#1om4SL+C7$HIr2l7Y_yge}%8+FMHD?L2Zkhba4Uzr%ozXQ=wr6## zdxI9UXuB1jcGmV2FEm|-3Rd=nbhYTq})|Xz7 z6z6sVDttlcySik7CKJ{J?2@KP=Q; z13{ERTg%$-#3Y6F7T#ooV%l9dOkXhyZ%Qq@TaSYly>|9RyLeJ?T+kGOhm<585rSAU;KM!VJ`W%e%jsBDrqP%Zj>1fc%}9;F^V3htR1QvO?c zLzBFW{wNLvVb*M%5=H0#fadhCczH9$O%_RG4`@gjeA7$QG&3I;KT$HUt#iZpfgK~* zxI#rXc`em8J{|G6>BE%Xqgp0zEeUpGv{Fj_T5F5cr#3^Mx^GOy|2Au~dd8Kvkdydy zq<=FChs#$?){EET`N6eF20^5*PNa;PQuG2$9M_oKV6jT8^!ug-^&c+Hn_ZwTJ5qO* zjgMeeU&k>xOjMsV<`k3Mt$Etn@dlam#bZgm6TQe=eZQJY5=NX5-ExxBRQmYC`?j|4 zzIb11H6WNvhvKn{0q}WLoaI(fi1zB@{ZNK$BcH(hBroRM^;p`lj}ZJ(jGEP(uMGw4 z5L+aS5)Nce2O~lysc2)$B0X$k*D=V+Hu9+SHDK?lBU>g>%H>X6qId@RMQPW7ubq;D ztx^}dG)Uz&RDU&?G7u~}2_1X^f^5m%kW+5uWFG?IvlyeDWHVP1VLt|$Yl*5Md++kS zMdnlF7#WpyHC49;uEth>vb{%s^hKcnR_!+7Z(A>eP?nWM-!;Yiic^4Qjr)y*g6PO4 z#Aep}xtu6lkB+}YwJu1{aJs@TGlxBa=#Z>!0f8LY`wG>>JPy1}dvTPpY4NrKay6=DVmLIjsjt5thYL>XNDq`YFa;U*otHG zZM|30tIqH=ZsOE9O(wRz8za7Jv3|(=Po;Ga$#NIw8hh3ySwt#HGhIG8NugN_+SV>j zuUuXc6ZHuC`Ps6wevPutqECDMrei}BfmwBUT)>}`DT||3LGDjoWV2BBY7ItBuBx4(^U#~~W0Gyhxf~Zr!?u>FYDi`kadbj)G>7h3 zXg>1w)K|!yi@^~uNlB22GY72^sZ^~cHOnMs1Ui&yIWer5&{9A;^~uG>pJ}4&ckGJ= z`6ZUT!VB%#FFAv(@m$v=cOsmbhC|T`>gA9I85X&4q56gO)1zJh^7gn@F{6x^dWEiD zsnMi#iG2KTs(+2SC#k9f#hMQ>4x4@wY{^07V&GX(EmfQE&r7%TK>ob7(LqlHWUcLV zr+t6Vli(Yv=?PzYs;05bk~n#3n;0SMN8dBYCK(2nozQ(-GQ827qW&9~9Y7}dO~Z?} zAPvmGQ)Zy@tV67=l|OvBcaDwBJ%mumCtQ3=Yp2>dTDIu8dNLnR7Na>j-DU+}93#r_ zBoI+3P+!9uZ;F~GMik2C&%Wx~!xmT`tS3+=#CDHOKIkkbV^d`l>&OMCqXbvH0aLp| zo+O<|8-mMCs9iKSED4lO-|tzrLzH*yNvRq1;>SjL-jV1if@qG4Ts~qoD6ij`g5RV3 z88tWGcKux$Q{_8e%$8ZG8O?Ax{3p^=VSI=;9rl(K3`6#zU{9LN-1lpykU(r z@PvATsqV0|RQjj2`ag!Ul(SwPgc!0~`$r=i9#7=h#rU)oqh6PO)>ek8JsQmIBTx6c zC)KzbFkxZmW4)N2>gwrFdkg=@^5~NoFwy>qd%yFmj#=#zp zCZR_6f*Vuy&!-olS4BT#7-?kZyt^rc@Lb^X4n1DrEGKlaqrp7&1IpYZbIUv1X`L7l zJd;=&w~8b6Xq`w*^g5y^=P*#-gIb}B(k?g_EDJkf@Zb9YFw2$4XpoUC@u-XYZiSXw zR3-XJMz=0_Lu9VXG~H)k1O3&GGF_B}t#E##Q%R{(dMEjuNg>~YHl*z+v&zxDMQRT* zJf-RI9lpbASAEYj-PE|BtzrtmVHyZK3AIKfG8_7ReC4GZ^yW6=N>FLPw}SI7k88V@~y_J(>@^%iahG6L35YxlNZF0>UeUe)8@7w zlF|l!(G+w9*vVEUbfMayU=yMrJK=FAAP8K6NJ1)f#iJ=#D>DZ>3wI_!3 zQp3}O`z(Z}^Zt(-Y*xduKOZ^S*Q3p>JvyrTS31fB#RivYmA}hC&Ro>)sj(&%ouI7K?xB zidOks=1LZNwB|s4IazX`b?DTLq#!EjvT>2hGPF2aiBX#XF<}lzl-%;gpEHx#p9>F7%8U>#=t#}j<(($_b-iO*!bN5!W~qIiQ0 z>O=GPlsL}R9EC}|ZhuM9<;7_`pWVTv)bS>Nxl?z1^AtIXrAFM!PCKiVqGfUzh&+x8 z)K(2Jr3$U_oPR$x?De1VhLj0=e zO*z2(Lng|!en8Ab-6Oa>3Vrd&i$$cVa7QfLl1ZORw?K&rPT&p_MJw4ypTLx6g~vf~eSWvgcRP)FES+RJHQcPN`Sg z1U_#B_ty4)N_A$f^qE2H@ zTL7FDyVhem+%=d43S)tnnq&dSSSRa1mYLvhlba{t-cYNzNNCph~q8|`BHPswqk^#+Kzv8W2^7u=|?ufRGCZ}Od~ zzE{@&_A8E9bGwh24f07b6H;+HFq~4uMTjz(l~O^F(K|SFZ&^E`@}vOpuWgaDIJG$5WJ+=d8>ungM>!}tgP;lo>7q?PLsgZKWg&H-i9GeoiTt*)39$dOQsr4D#!EA> z*+~e}q1rQp!ofUht;wb~JtMF+WfAax$xEZ6o+&nbb2J@bp7u)yA6E2nCYu6#fnuEX zj8(&fC*@S|;rCHb^`%PSZ4}{wvCfxOHo$CUUGteaM{{!mK|+8>+onY4NIqYdtuqP| z_sYPaCNGs>%`&7*YH54V77-^8p0;P#Z;KVmtk>uj+LeGKWqW(Z^10&I>Cch44gH1wmXDxENE2U9e zF8&@^di z-&NOt8)ac~?zvVRg3Ulo7+nxb&#io#*?wTqeEu<^_S~+xL}htHjMKW`L#(uUWi^)hYOMH^2NjLm%R4oKV>%5kUx#pXjZ0}MepjW_?4YI zyAgfh(h=NrlwY_23C*6aI&tah=-N>M(jsbG`TR!EsyF>g z9=4h z7l58D!@mU<`C_f&%3A6A`y}sz6^sm5p(zp*W>^%f%gDAai=N1Fd1{t|Km>4>#$5%@ zqKPJ#aj8dhpq-$>+u z)<*7ln4bs(3{s-?Jzzm<{}jSnd*_2_Os0JRMZtxd+h;MNT&P2AP7z`&CeRG*ODE$qC=8U= zW|guIS}D`lda(Yxk$1JDd1E1^vit#|4=q$lV(idLXhaSy{BO5NB0*ASHIeqoDe&BOxZ#rqrZZ%hBqfj`LV)?mM#i`00+GZD%Vr!xU3Ox5)}aTiKKo+TU8*GHCxG ze+4+EsFMcxLWO(Ap`g$&pKs2!T&lTe+f)OrHHO)v)}yPPrO9OH0-m>Ag;8oX9Qx!K z>ArR*c~>~F<&eTR3N&qZ(dmK}iywnktBj6@f|s4hj2KR$d8Uex_5%)^ZW8)~lRcgN zo8Y7oID1~WeUS0Ch(NMq@Dvx1ovFBxa_b2DdGt4V2Ux?*Eb}_mlKMtIM?(#Q!guLF zZcFS~FNR0p<>Z8#PZj^ayr(Nt2$egrIyqK4^~DM~WYOxAOvMcqc&3F^MYS*)>6e^3 zU%N1jZwsCFDD-zN)+%flo+w|V4r-3wVPCOQ5A zyXwWx8vWHy6}!brInX<>Wl$aeHml zTs3MPg)F_bUi^@hGQ#ATRcQvriAqC7TDc0t?m9Gf&eu5O;{Qz?R6Z6dz@HC}u_^zD zMUQ$zA?&aGOb0On7UX{Yq?Na)cSuimyB~l#*38SUb4*}g*ylXePaqCFFwpvpM5yvp zO7<7avbU&>{pQ?j?T<{6zJ(RXvrG)Bv4uFx=V)K+Lr$K#A&sS!0G(F0dSWro3-zx&wOs z&(iI{Z*@;VHL1CLvfn6Jy7sj6^Xuid)x!S5EXa3Sc}G-=Y>jnTx=rD9a0*8&y=M5$ z{sOP^J&p695qRhY*E-xY{@W{}Nem$^S9iXiscogg3o-wE+hb-74hvY=-)un`x-mw5 zZF-}xmH3iPVf5eqQ7p9ibS`F8Tvf@<``(xSy(q%IRh13R4SP(#Vzv-~UbN8E31=`}?H&AAx*k3_VS7HREYMp!Ua2kqRX}OAm`z>UmAPgR5 zesGu0?J?tq&@R+|J6EXF1Q(``*Sg|@B@dyCUodJ6#ftp2pai9HYbz(qiuSbOIh zGNg2rTMbuvX+N2#A@*=8huAo7h0yu=@Rh#Gg;v{f?%)73b>%jB5bc)#GY8&HJIkCOGnrGu1vvbwa9VnY0dZGBGLR{ zi|N}Yc3)|R((i~i_vC>p9RMFrO;pQHZzHnyyP-ydO>Brr%5!gy#v+gnk@uu_giG7g z+uKY6l^cx_GtaDOqQ8ULOCk5M@4Y=C9$16m1YUC~|48EkM zn0*-HLu*Xen%5i+$5@R@A?C&!XB8?85i69$6QTF1)1Q9O{~5nCZWAy8Q9d1vNiibG zfC|b1RUEmYqAwd{&|F{qadNcd@H&A@-O8}WsQ$CXN@=mQtP?Zp_DuMW!v?~l>b??^ z8TSJGaw6UNC}S!m+g77-`FnA!*6hbT`qjWd=2mnt7V$?Q1^HE&5 zDTQRknsWdX2I3K^BLKE2vRmhtbOG7IK9Bsk)h2$M-l1__%9s4rIlt0!Yh>neNU#4iX(}V-?zl5wUFAC@iur_ z$I88FQw~eVV4Q5mInhNXH7Du3{UznEC9w>TUPGbayQ#v!J=(6iGaXsKvnX8fN){{L z28MZxF}ZsFxwHK2L>x(nv3hF4R|!$2X2(T$)X}T+Q-e1U$2qpPnws{BzV==>#%Er9 zqZvX#Tw#{ytJ>a=&pQDLU?^5Wojg+mI<=JJaG6LvA9r&sJ-be4m1TU=7rBi2!`!g{ z57r{t0}jn1cNHS_eQ`??-s2v}4uy1((fgcB_sON&l34}ozYOwbN>Vt#^vM$R0MUVq zC^BiVrghmOV(C127_2%Rx&Xh4v5cZ0&sd@s_NAca!h`m;OrF~C8cHLWUIydrbC5?; zvt#c3R^k3M>PyN38V%S+8Q{Aee0y z&Cx7EABuoS4vp2T7@1>3L1!O``IUkC4luf3O*~LNDqk%+`WK8=+l(s`}WmjZlonE`>uH?z&BJn2! z(D#SqI@yL%`mCL`HZXp+l_5KZtge{OrC4i>u+22C&!!FX2krlg#QPz_iuK|}$$m-6 z42P^yGTc_qMBSU-aSWoD)))vRzOz_uVrd|%wU6=+Fs}F64X^)Qp=V%=Wu6_anK%vV z7Fc%pC?m&Y@x3MEp0wsR|3ILX&JNc19W(5IR&2m+*L|k@(8{XZOxyR<5v0Mv3`^Ks zq-bA1?nP_8VuZPK0{%2OIa-d!EL?N|xDNN-M85u9mX&hENsUg{oT+pGF6LVn3%9k% zKzLAe{y^>D96P!AuGT7YQGvg}hu5_m#%5IsRUy{o89D)@Jd+uD&>O;o0nC@v$atwy z+Qy^`bg*Y(rr<9Vees0-!L|FApY~{_)ttAU%$#IfML`b~4gN_180JE0&xztsvTml* zd2g{3RzdLw6^AS(iAC@s$-BM_p_fF2Y}coG4>GU=DnyIZR$l^I#T3-5zA(Eqhh~mX zGWsXBus3AeM7kbkDfifP(SM9DpRHYf|&hnF#4i=!wk5J^PxkR4yTaatw1jB6s!%@koF#EhIoO5SqjB$x9BDU*yy2Tl}k=i0*(;ohw4A>rbIsU2pJb zY1D9uGWvti>h^En(%Tk>nufm}cT6P+u=<86C3K25XKkzW`#diU07vfU!PO6Vycgfd z_ItU)gTih>-b>-A#zfevwmdpi>8o>Vj+TQOT3Zr?&(2a<5+L+=i6q;C8JHIl+m@8B zH}S<8lZvh^)B<`CUIx@iHC(FYyfM zwHe~kWcm?otc@Ot*;znUCdfRdc6_(V4$t)khq&|-*y?j%3pQJQ&#-|S^x}=|@9+IYrca+e?Ep%}VJLqasl&re% zqIJqLDVYkN<)?CN*O~$0!XAjdt5vab-0;yj$#{JAB+owO(o<|Jph-i+z;X)ld?>Mu zhOa%uNEXktzMlDp;0Y~!O5bV{>5B(pAa=tYROq5oHRI z-q!EQLa)^BLR8Y#Jc1|mu3o0at&;s#*77)s-wg^G>yIo}Z`N2!)weMIN={(`_`;Ux zP+M-uqtC!s@Ntd5 z%8RG8yRO<4+D31B6l^1d@1ML@HluXG4qE#_1U}?D`f{)hr9A0eXQiNJ-ZGR>#rFQ$ zL)QAu*t>>Hm~uuvT7%89yWsFnDNWs|U*pKi1`L4LD)8#66{vx7GJr#x=m4vuGhCuq?md1jVBPs zi*+DMn-ZEs@71^Y`Y2J`kuI%XOv>7cbk5Z_>nDVye31z}OB6?)9m5)>JZU4tbZTWK1+CvWC(5=j(_h3C` zGI15G$^H`9qu;X~_O?TD+kb1Es^TKNq?Y9bMx!lVzUHTZ)jZL88O!*Z{AbUKJHKa# zRlj4K0lR>g-q3&1ni8;ZnaV&7{higND3vCn3WP076oZ2Hy3+I@qyqk1OWz5 zQ*xqoi4p;){TgC>V&a(AjIYhb92WK}7M+(eDwb|CxoXfuu)YiO*$BWBubF#xzLVM0 zV~!1_8!7CrAzCq!#%gtbj4{q>u5c^*w>2hovny>t51B55wxu2(j2e-63&DH=WEmq1 zA6~{GQh2C>n+jBvaqX%47yT6NyEAg`ofN(^loI+6!(+wNa#Gc@^KWDBgj~oDjCrq_Oz|y;uQ1olInJ3ZLL-HmDWB!4ywjW zdXIF$JWS>b5(ad9l! zc}TE70x_IyJVGZtgDp>8lfpdXC&`NJ1h&2JuzVnVIl$F#R(!3*T?QZJr3^y7UznTx zNZK{adANHxUB*IKS3QuES?%29R&50x|q(U}+YoG;9*^aYY2Cv1}Gwx0B3eB(T zHV!Wt&7n!cDma=(gsbl=(vQcnk%4ww7OEIzYZBrsxRXs2BUeK(ub*k7S3esx#8cTx zhJHoHL5S0*PIKzwX+nUU1Y$-u1W7^k2B)gKbkLOiet`7h_z5ajX*YdcyY)~#@xHHK zG-Ro}B}4un3$rwyl%{f(h{wZN)=eQ~^?r*p?{*gDTh)XjcH_s^&OyL3zU_DBJ&Vt%{WD+Fo?Hpupuci>Tjqwo`_Y!3^HC# zTXBhQx)c_@ZsQI}m;4aOHHUyG7xN&w6&=M|k>w0JZh=F&c02TdTrWmw(?xWMM6Sph z52Hx2F>9VzoBd*_9&i`EIN@ZW*|=7AAO6Ea>NsB({>j^QEy;}>!S)^=7(ctQK{EKF z|NlOzvKkoNthuFJ>vZIegX^x&a+!D8E<*@}&W6k%ik>E`a<>J@(l0*$wTKf{_1=6Z z)E#1ILI{?ilKBxrjNVWVDq^0kC3!)*hac#<>AVBiYA|%HrFB}+|DPUFyPs)vi0_Xq zUsjfC83OtUW|e@G9p@gZuzk79ZG_Ra-!WGQub(Z}h`GE1;>K5A2Ly>Rq zlHPNJb|u2`>32-4#Mj|Lw3+J-M0QP4a@Tq*Ia`=G?4FPcZ4lroP?<`SIhHAs zNWkznC{jqQi$`Uv$X!5M>;~3tTn8&i4@L8C>VUBX7x>hNrb<{F_r0eivH>Ux4<3So zZF=io1j>3P52NvI3-f(Ga%=P#F$BFP;TT9)gk^*-ldX9a?~AA4Qq7lHhN`4dRkqF? zwM<6qZL&SlVk&53=qXTC4J-fmzX~5jlGEH!MtS$ zDOl#pn^nD-OPV5I z@*}pCy9QNc2ve=Bl_avYE@F?iX_h!jlxy{kw8Uo)+o}f{UxN&hrlxKq?Hdinnz)^M zvgpR_A&sg{8&YXwrTbI7{WWNW@xhta+Eyt-fKi^_8Zwlq-~-E!%va`?Qw^S*R#lZ%oEZ|3{?v8MU-TWtTz4WLsr_PbcI5hzN-HqtxZ|N3O&cgSy47tasJiBu1o`0C<7%taxR0lF3MECWiA?fcK__84d44Z7|Fk!F0xGDU!QbOuJ8~-lg!Z8?Dr&|MsL1F5_bA9uM*`XJ??{} z+~jiid@H#C%N?roUlWEA$obn@oa{b`ybEK&$8n}y!>aOj9EuWwxt55UjBCjjF)xh&O<-g=pA~Lhw~uB(hQ%{qw2?t#zyb6mWSugYm-H} z`{5zGy4|+tOC{-q*PTr=PNaM1S~-=k=Iq56MMrrz6s?cZzY@}(uNUL}Uzu2?JyN{T z`__4C|Kml>4dK93E^94#Uk)_80B~!|sTP#S6u)MUH&*aDTqvev4)~F!SK8Yqt2OxQ z;RJFo@KB{ett?ydWcuCG87&v3mrSb&9k7#crT1bNS?&NF|1vA?R0cA?yina!mw$;Z zQWfRGc&;%Oe_?_X#))3z957gMJsghAsit((e+}7}bB~*ExNq;QMuguHR$)0*tBlBM z#NnSCbCfB}oE%jPP1fBEH&`XkR%?JGzP z*HfFKAw#7#nPWs1@IhvRHQMDPZI2;=Yi-QnGvg2g*ncK+oqRUrT(ofn)0U+Y#A5U* zRw@|s#F;3k7Z!mlJHgouAm#87c?Ui6sB^S=%*4)iL}KM2ytTDL$oIlo$^Z~tYpCAO zS1CzLJ93}PC06ev25>`GyBNIwdt#4a*!f{CTtM3{w00VkZ{$=aFB+B}LqlwP9>*?@IqoH$Qa*-XW@!;b?BB!v7T{fi+Pr_x9Gtv$Fl6 zTf1*=Gh8w!--OnmGfO+#oQCIDHNj=>J8YK0zQo_hv)q10GhQm3lHw?qLIy8f%wUt! zV1Ewna-!*0Vg)*DiX0NjyeeRIijVy%dhd(ixC z%n$nFsaUuV;jFYio$)A|4msg$xU_E@-a=O;mmOC|Cu1{RemD0K>5L0&#B*A#tp#-j zJUPdbi|}o>C>l0q4_63+6k|b7GRec&YqpIUhvwA+{wXTz&=gJ9wYf}-Dd}CVdVS9G z!A_N&76LxDH~Be+(LC?p-yd*$0@SBHAy!y!YfrZ}lU{y95OSeLj~tq;)t~aJJ;kwH z%z9+*6ZK<~4<)^>S(xwLHNKnNO7?T=I{%`v{9~`6vZyWBqo~p$7IcdqpLVV&lVlQT zw|Y&fi@t_;>}aOO3AHBw8reE7)lyolWcrH|GYD+@uB|!Am$wyc1Q{1it1=0Dca=P= zIiV!%93#H%}+3HoTfu@UNUu=CF5=>sP(6(c`d+g8R zg7`#*4@cU2o>GpM`QC@_^W82@a%k=TwIgBNJLz&B$u3R3q>*!cnYvnxT;;h^;tmmX z3uTWSQ?(`iBwLHuSApTsb-mE6{nmBK35EC+7c`(;uN|u@ndn?f>~x}!r7avtnVdis z@QgsGc`Puou`C_>!xb0`Mcc{MOktfE1fkr0eix&386p4*xBm<**PdV0T`J zX3kI%eY3u zVnv%@#2AJ2eANY;edl{OG@l2SH$s{Z82o<~8L8G3Bl z%=hYw(mBY6ga2)gQ{Z@-lTi*iNKfFzJX`SXY42YhYawhhTAQ&73{%;v0aDRaZ>v79 zFj(&NX0{F=xuFP=MUy53tF&nc7i9o846%_xI62q?&;ULT_sIhUvdWpm)OG#sh3|@W zhT8BfC}4wGooPUpd}_LV3?2N6`&&^WisQem5_%)H_ovmRxSsGKvnBX}v%e;}aKUvE&0C56h)~L{&ET z#td1nGiwZq(`j)il|V?Bsa3RfN6+}Wr_AVS{HmLXHr=3tB;vKc~6xa+?}2!1;8y_R}Qx@eUn(9$lVf#m=XR_%8a)1N&*p#NK=itcAJV75^Uh&Ix z65Rw+FCklRO!~>#hl#!06YtKXscft(2#=3(joO@6m0bg` zAa)Z_o5Sf~r_l|=Xf0dEa{y`Hw!uQjt!Qm!{@2Xnn1Cxv%h`(TAl3c?%$i9!=u*}u zCnrkR6*eZaC77DHgQSBgZbrSdnxWNl7wY8-+ry&sU4r&^4~VCooCPh)c4ba_m)6qg zUOy{>yF#r+DK}u+D7`$1wd^im7fNRglV9Tffn;6ximXF|T~32+)Q7Q4c$Pk%K-_n{ zOF92M1C<#tY$}7Oitem@@TaGJqVEELjjT@XckFpNo!nEL?9W0fK=f?#hm3yR+WbICs{;h#86@Wb$5i=PS~Ul}0o;GVOywx@K!szY zS}@PS-Putn#VdC1p~v5?sRQEDiiQz!N8aEMb`w3c94`m@(4I8YQbLE_;!yL|lM;(k zeGRXI*I?3%N-|n*c)l88BbeSTA_aDmN~yPoJf(H=b+@|xa5K!i(HDaoLWsw66wKei z+k|of)bnWc`G4hoCuz+7;jj^pqnZ_4tOfP^4aFfL+BG%O>lyJu`;pD~VUGrXQUh6< zWXmP$9@(|}n{Ff3l=sSlKTNg)T-{$tBk>U-%6b#jzwpvDtv$%A`s%uxzhJXBS8wBM zrRz0vXp?Cuc6kKz#8$-|=}Eqv@074(2Y#_{MVL$NcsOQl@|n|hs*yYniVGh%mDDU* zcgxTtZfsR}SGo^1M0m_5JA%}(SXZY|)}t5Ms?GlRO%N3j1d3cbmux8bQJu%DLSn5| z9|l&GK~bRCF3&)TCCGTAR)#_pxWAn22*llb;iIXaR7=h)_4puZO7YcyR!Ctc+y%Op zdu<=o1`FsIumZH$uk0XqW%^n11#5gSb45rwSX;fe`maA8Z^%@vu~UbZ)7FdQ%^jaF zf#9U|G5LR|S7Lr=u>h>@380n_kJ5n*xk1y&=8Y5JSqC5^ z1h;z=Cwi^^IQ&h(5H=K_eW;>wJ@=e-Vqx*fwDM`*UWt!&?D^xSgQC+wLaLHkz z|Lo8LNzw1SFgt`qP;4XrUe@A+S24nq8@JBF$~eV{OyT#x7}n{%D$bSggPO z&ur|Kg%e;;N8DG%65k9E`O1}=kLuT*YG;Rck6fkjdI8m39kbG^mBA66Urc z?hR994-SDOBt=!VSAH!5QSi6w)Stc&rUQH~_=x)=1;2iB1Xk(Jif&2U-oCluf=?wrt@CmkrwA zklWK&Yvc5WbRu#)4cEM)>=3(1DRq0#g=oIR1*SOr;5j8q-&~mE0;Vb<{hf(G%Py?X znf1pM>kj1tPIfFHw_U8l|F%)7!3W^0t;Q|GV!_xz5(1<6V|Q28d}ufF2I`h4660Q} z_X=YTT*udpnt8C5-io-@`}UV|-?4HIUY>9HlIM+2S6!tYwV0iU`S1w!|n?>jn-72S#Ygzscko6Hi7Qd{0?6zX%wX+)QsG9MEa}G&2A@r}i z^GbKGUd`yqW}8!mR293hgXLSSq}_rR;M)WFM_<(n8ww|axkysZ1=}ch1S&Ezv*$Kz zdadn5Z;Mhhx&b;3#EVEk!7bs)Oy-@69d?#^y`N4N^=RN`7W_?_7bXiGXoQshXk?1fbvR$eCfHbz%t82(@nA_-sS0X;Gf69lmH-IopCApA z3n3u^SM*W*wARg)7==Hkt2J?sQ*V=V~K`^MFtS$~@?V{>Yr@`KSow^jlCt zWg>hx^E%NF(ItmvJiKU*^E9oz_wVh|pDRd9hWa#?0KdTPT|+R=xR%2LHOf^I(-)qx%%_ED zA}k(8+oiU3%~cU(wq4fqHDQ%=OxSN2gv5=y8GDiuAZ~2Uhe}2TV58>+_+lSvjwVv1 zU#Dy8oC}~&zD1Is&5Qrz5CE1y;FW^qpFQ{52h|vN8=FWIy~RvDQ!Q2W#)f! za4;AxUXq^FCrZMiaGG`-{=$L}Xtv&PgQ>y|g<)Oiqyo=$nOX?eh|u?rce zwoB^t_Z9|$OG@1*eW=5}x28%nw(${lkuH)n@mi6U#-`;9US}(^;_um%40gzX6@d7e zqx+?{B2J+Am&u4f9c|vVM)Ztw)P}hzhf@d!zVIW8B?J6C#-P=|VX;U4WVtTT70HUM5Dqeg|21CPsG)+v`|&E1={pjaIA6C}7SfZiwz47dgp}jGDB1 zSA^Lpc5TS6A?RzI6BPd9kn`(Ri}F@&w>z;ZQF`tMZUQHT>(Jt59!mEdMRzV-=pHKy z7I{Ex1ul&HmWjja*N?^>RoQr2>7QL;ONW5?MJo_{IUe7KhKkMGaYKK;gH&ve6>vB&MsDW6c%ae>fu#Q zehvFJdl@v7DP*B~+4RYBQcw_?rDGg5Gw8ifRQNE$tO)%|<;{nhDLl!fZZ9=BAZa}% zEK4$iR4=uZue2SAK;SqRSg$vo0u!s$?uvi+CZ%>l)Qc(PJ9&Xl^yiqL0bX z&xy~K>O}3ihiXBlc~B5?QAE{s3WoB+ZvN;(<`0r*;IgyyC|KWe7fx|@ha7tOLhnED zwI+TRdWN|9V~McJt}zN-42G8P3(pt0a7~%f5rmL#qRyR~jcC%S;Fh9VwH(*79~TQW zD<~ce)-N84nK+@4m>;IxyUm$uT=b(-gy?aDDx5R00c-ZV2(TX#cH4-F+jsmlS*-^R zJC)2&iX}B=eEHEDrM4{9RaBaCj$jI!&sRmWk_ClI-nQIPJrx`(WS-{Z6!VNl3w3Hy z$G@-9+;5M#CNgsQ3$e0OOCwKOtA#9ND zDpa-SExxM%fc+myGN>vcHC zG;DLPCf$tH#DwX-&&#Pi%6P6$sBTcSigDj;rws>W>O30=>d1)s*Myet8qmdEh6%!Z zycFAx7UsrBO9B+@#{ZlTaQM(Z!3U%P-lqKAYXf`JNO-G3`tcKe&;8hdpQ3KLgyhKl z;VqyC?|P~`3Ch<9jfo8x-Ms>3-j$NRjJU-;l;wc0J??_(H?h`-%;*4VR9v1u^!zsK z%uqSpJWI(>odSJta?o71vYmKutwqN?Cxd?prOU#~tS8X!%;Zbr`zum*(=tEyi*}(0 zXb&8v;|}U!2iaBERa2(Z{(cwpe0TU$xg+T5BSU&G13%(4Y7#NCKSbwey86>(2QqJw zz7(y^TCh^V68iU#sI_3ttN_;%onX(d10zHIZx9IS9h0+N{T&6*Y|R{S2|;h*F92ix z`$LsYVYPp4ACpd0B@%2S6_*&w=)?O5VCfp?+!5NlY_hnpxg+=?^r;=iPuv|YqI9x` zk;0A|*Fq{?y%Cs%D5&P(*&1Uga_GFQhd;*@g0mFS)$_d}4$3?cpeT1)^sLTyQG)M| z(M_SgGS{KCKCw<}5t>Vq+qKeYIje{MnuFQSGG;Zc@|&h)C+TuQ&Ygfjag8=drB3BA)jy|7^Zm+ z*|iU+4=ll9 zE3FNzd^g2j^aEPk#)C{|hJL+L+f7vnod4MW2&bQ(>#a1_B%&L63{Fq>@%XY4|H**< zM+JzpeN2-V2~gO@sqzmqDgQ%;P5rS~SeAzie`y?k<<~DI4!tGKTaB!~Y1+#6*)EJa z<};h?MK;z>E7()*jR+Wmn%R`e!ONkB)ei&xAiU?J6{QE>^xC zYj+?8bqWb|(owX@QR9uUQd*@--@-ED1skjO@+{U-xoJ}jM_;$njVkzk1zjp&46Iem zX5C5BdXdgrlLvX@uwN`X7tNlQ`+fjGr{;l7e%j;y&7Klnp%&qsHi4NR6vts=^u5Ib z>e3)6*fnxx;@^`h$+VaUi zB$q(~wHww~4%Wm9Rb~T-UI}Vpc2nKW3eOi4gV8g#3w5A{3mdmwQJcDluIjH67c2bK61DYb&cd%xlbLNWiD- znEUg?WVv_{%%zAJ*5+H=vcIADqiDt@(<1s9EW0WK5R`TP(W)rK7(H_pEM&V1VA3;M z!(d0;R>ld|*8?e2YOH@yts88~|L)L);%BO9V#W>Z2HcsBllFL?hC`RXD{J`FtB;E+ zjQY}IxqJPXU_wV8j|HH*uBT;EYR^s5$@P^^46v{8Vh)E@5+INr*IN37vjwE!-2&Y` z7f4V#M~vgShAuM`M+Hex$lCNev8OEtRsatznUKQgckH?HKISb}Ti@uqiGEvaD9(;b zs8!&*Su`i^4^i&;xAid8dCPTl+gNX9p7biQLJ?4eH8bO^K=Co3ib$KS_>*RI^En-n zqw2G(?mW93ryzgZ&LNUf93mNROMl_UTHZHfSx;N#hVFM_pZm1Xmj87~a0bnPd!dOaoae%OjGj-T1IkzkSE`mJ4{(2NFx^r9ydwFJi3 zzj0Zo37xH&X?LdCbjV20>pcYZKA*m0z>*+{6+J#c$iFyO7%zD-KgvF9d=_&4n?t1h zY7f(k>YVFpC0=yJ1t-*w|23;5F$Fi*u={I3O8uJm$|u_U5%>McF;^-b_i=+&+aECW zti{x0rTKPo~m|AEEI zAt^jQ|KRuLZjaL%k@FOl#Aq4rQWW6BkyQVc#WEw|lso+1!45+8eN~g2LhYhl$%-!% z$)lGj6ID+(gArqh^2R2kiM5M*03Twp_mLyM&X7jYI3|z+peAs_j9qKyiSgLhkXTc) zk9yO~*UlOY9;qrvgOkJNbc@u+y5^lm61Ma=mb(c_zhl^x}K+P~sQ+9S@ zZ#UHb2BJ4_m3c3VP{-LudtOTK(4!M5O|vAgn4S3#TOD?2SUu5ovYKg>9)!|$L|2Vd zl1hxB>)C(JwYMoB{4~yUyK7YH#J@d$1z^9{9v#qXIDESmDpYm(J}R8u=XzfyMjZV$dolA+O=wVPBI ze`n<bJ&q<<8CEERn61I1g*p#UWCdM?_40hA zs*^jAFUB=WciuNR&Y*x0&c(}vA#Z~btz;lM^tyQ;EG?16wf}s0SuvJRmNTCw$kuPc z&80KkL4uvFO-I9T42XDDy$8T4AO^Yxtct+J@WrvTznRQxm{nf0CNs9SH+Ya}Alb-R za6=8M?l!V>X2DtExBWn@s_$C%+gGdmWXG*zXIqr=iC7y`51ca@KtGD(3s%d?%8Sx# zBWM$Q?KdTtCi&1hcqAN3bFQY)KN~KPy*}o>X(-OR6F{M}yOa6%$1AJ&Wuf2ymfF}3 zfBU8%DZ%-3)%^GoUw3!rXZT)q1BT(gLIvk1tCeAs({{QW3`9#KN_I&NybZ8%V*`v7 zrB+mKt{@ZTv@ryW4kQz2%urJv+CeiSZWUSaHAISN<;r5(gsk7B z8~?4F2BT9<1Z9E!jPi@tb6YzdZEw^ZrTep$n>oV7CxO8>DaP z@B>o}fGnocYsHX@(JN?F)EaH*4W>hfmbyb{(Y{P;#F0QpJ^S|9hWGda>_nArwIh;irnsnq@=W`<9`Ir9Gv-@rZ z>9%s=ELd-#03lek=v)Td%z#KW$EUO^HG{6o>mBC;K>@2Y1)wzfUWgug*t>)kr@Xuu zaf=e7O;$p*h|5AKUt~RRDJ}4VZyHFp5(m)n7Oer1mScHK#R>eX&M@K&wN9Qj^O2RX z3)w}^d@^zvJa@!CD?-C5+h$qbr-N5FO_7NO?3%pyB-xKsVZ-5rSo^@grRH97N|+!e zwhD0UN0OUlnBJx_2y&rJFkx0hQre&ZtLM`=MCzZ-OT@L6-O zu4gWwc+=guBjgQW~VbcgYh2!{AFQ=dI9j%zu-wztXAiJR+(9=$D-h5!B zOV|n=@FdOt+kIc}^Q-zS)4G0s@I&d_l{3607MbAvc@-J5@=jL|U6K)Na}7Se44=`4 z{H}B9xWjYXm~n$?)#5$7t3Lj>ES6Kg?62<#Q(Y;r2wp9W84DyBaNk<`UjGy+!N2~- zVr_HJhUpElK{mmb>H7_8w7ESmH232WtOCn^bc>C+_TMAvL1X{JWtang+95@pqAG^5q%YYm6!7>rqw zd5EO0iaI{6uhFxAfTZOoh3e`(p4|imHP@p>+>r_pfoHrieF(gY(&anPdfec9s`mOa zoIvdJ*S`4FyCyR2U9+^27sZ<%N0LQl=g_Mm4Ag8YU-ZCr0&BP505|+t-5IChcKSva zfT(SRti>-Ex8lZSZ_5i;z|kFxf4yh@-?e}5k=${AVFRY=&#L84H?hVKd?;(JhEj_k zjJYCA1K-(XMlZ@Djt6W(pFW`Emm(pW5ra9>vTU0`&zh+~R*&1@oN->~hIs;&GGZ2e z9=FGCWqNOD5tr|#&!m*K;cQq(&bi&G+iOa=a_dZ!KQjdLw)lLGQBt7w$kP6RbaTy} z`pJz-BYLU+LhYzN=SttPRDEQNQY3i@bG*|VKzSWc4k!M6==L~^{ZJNCO!ID>|)o;n6w8n;_ zEtx&^sd&>*4h}P0tf?pgR0eWjN))6M(DCaze%wB#rTOHJWjy=hNrcExt$KND5Bb?zkk43cWRq04*yFaiPkChqA6>xOqygB-|IuR(L}( zl$#;f$4?Tpy;=_!Rr>vf%{Y$=0G@&8%-U}y%6p-V%r+1Z{L)tc1N7M0v74k zxOeYh$${MS0NN8u7x zVYKJ7tUgSUqyXdPjVBCn%v$Ju_B=E7_aYI`frorit`axSwbL{6JpRLhuB7KzY;*DE z5L&g-d!d`1Ef!+0IX_`iUFCbf5y!gYYkcN8w6M=cD>c#L){v9H_`xywRvAr$(iN5p zY-DhzigT-rY=8|Ky{52Df=V23ra1;J6y%>N>lZqMx!WroWkY37;*iZyH{SDTZU_)7 zb`A4jOfM{BzZ9H_G4dO-J!bkQMF*lpmK#*L#!*jl?iVLxdu%z(Gli=m$!~l z3r|g+T_TmJsnZ`^wVMh)TB{wN(?7y?dT?Z9)GgY*#e#mPtIBbRQGdBb+YE+6@0 zO3x8G;~bDHwKzbN)I|t&KDg8BOL@*CeLgso3aOSEqF!6YW~uBB>WS_)gk|f>c;fb zJByX#HB6xJ!pds6ppf(G@s;i|2YvMWTZw=7>MM%{(ss|6e~rEuiEVk2tbZ_MkwYz3 zb(2TvPcfYnVxp7Lpt4E`0x#Tm>ruzTYOE}o<-B8kRcu<&SlSrB%VJ~JjLNjWOumTf z`6(a$iprp{nh0(IF9mKj?6L-)qxE-ax%jbxxrY2!Y3QDr=8kAV^R=Ix^r&d~8m}ta8O(IcNR-tSx zJv{1EV`XLM&291V`9p;`r7z*4p5H>1BwaDOO8AcHA_w35cI|Jc&VuykaV(9P)YDMC z;VxW0O%}vnFar?3RV!j z!7B)W-;A(ydq@*82AhX=Ei(Lbi-p+7`2%i{=owQT^zk^b#d7*KwYrf!92RjvPH(zp z1}P%|*k0yzu=ir;tuwdS!?Pa!4?9Ui^hsKM)=hLJp{;#pUwzGPwDO`m57k~CH3qIV ztWzWjNoOXyjwEsdiOzK*#Y6TehA`&X3-xNJ2C8i4W^+x7X@bol*sp(oH%(^lfEeF)Ln zp&!iFjX>r+Dl%}oN-USYOriXt#iDynrs0DwQv-{|=gk42#dXFg(?(#cj{?Wuf0w%< zpKoNfFEuE9RSML|U0H+7C^-sj%Gi9QtY@Gyw@%&+q`!kj;1u0c17T!rL!2uaad^N8z7r1Tw7|Lye3U+9acIz1tEsGV5G>WDq4~HrGM!%V*q#6NsQK6?~z$? zx|LbTI_&H@z;z4qKv(ZQ;_;n+x`vsBH0PfQ3=U>zkhiU#vXP$%;#ZCW-|e;Z)JMWh z4{Un#(9y4#2pehefdw1Lh>5}ZUB@{D3O*)LTSzZKx_(;kv8*Ggs+Glrk_K|9Yr?=z zhPRteiJ#5zV5#no2V=MrOkm8Ved@US{Aoea@a-%_f3|{8b^y0v*1C9k_zvJ0 zN37M$I_p-8r4*w%cTj>B(#ba<>931&xogMK zOIu0$#u4&RvEyU>IY*Z2-k0^9J@dOcUsRSAr(*aTiU;C(H%whl`YVg|4{K(%CLUfJ z-f}`ah~qHHPHTs_xIVmazN}Mv^wAe>+SrVEst4MnfrCp#;OYclBuOI4T5_}|-+1T9 zLAo2thj|9OU|-^-K!4gKYa3}bo3)lu*&SMq@aMD3xs8@UHa+hUT01$mB_U)n5-L+@ zzt@ z3)bt_e!JEkkEh%8adN+VY?Bj*mwoErXlLn2UY_{DN4#xO4p*3?_b_<&n85h4&{julV2uxd3331WT)UGw-4#VfKXNwD}%4xw{yApUYNTv~yu+%&m2U zex=*K#35UoN{sgd*c%&w`JtdziZ2q;d(Rgz{6T5*Z~D$YcBw$w)r2f|15ih|hHi)( zVX?eY;?IVURzLH2*oB;7Y02Qa(6Yl8IOc=q?Evn%_jhh+SbqQOzCsX905%&L9y0gI z5-HlHZJnk)Z*3CDXsc9UAWEw`Q9}2uR{DN&vF84)j3>bUYu!4AF3J<<+lfJ~BP!E7 zvy^6E5PF32BU6ES6Hw__Vh4w+)$dq>ZlC(spi>>ojIMUG;s9iCq0R${WthqbAxUVf1s` ze~z}3b-?T*_)Xi7mEEg+j9;{j(BrWP=9=p^gO%+HCP@CLF<@Js_uLRoHHe6dnt=e$ z{1Nt{nVYrezCBztYHf#h-mN-D0@H` z8GojeJl0yNJc{DgDvdGz5znv|zY;N=fpvYSu)5<^s4s@Dvc0onYJxt%9}Uf`;;)Av z)f)31Mc&FQpq8BbR2)780=9Q%YgXoG{<|(6rA-Ek)Tf5?9yHi!1g8{BL6b0YbGW5; zk{0su7O8R$?Y9Av@_yE8V2CutQ?ED%KT^>OKb%A5B#W&D2fG77k}lHJRyb=+(`5b1 z5igR(EZMDS(q%(H&H)F;;LI`rNs!$`wZ0ZJ+(hhVIcFO=jyh(lWG|q4wz2uZuz=X< zu#d)IR%?xJFvGH1F;F_ma$ran+_~e?#I+0dJNuK7{iBM7Tm8o8FoeX&nN|EO=B$R2 z--N7L6S?VO!KocZwsa;xUg(b1F)j+6>zfn*JT)%J(M1FY8z+VU!Or(XedH<*?R%n2 zGlZ>f0Oc>EW#IrpSe3eas3HUklMGpD*L23Lw=eS;dLj+6bKH!=S!lCHD{Pr14Td zsC_!GNiUb@&UEYw5AKNJ&jarViO{y*gKV76tuERH;+|?0`c=ws*E9!M$c_Sv-kasQ zRz%+Czl&oXYGH)R4$d4RL=;}Q*JP7r^y3cVxDnwXIH}vP5e?rGQc9y^R#q%Ci$F!P zR?ST0elV?U9LI`AB|f~)9=fld#nPNJ$zfy6 zm9ihR&EnTg!j|gz4w|d_L_FqFc82Am#KuP=!wlxrYo!6wN9AJU`mQZ&E$ABZ(tj7Z z)N3O)3lcS(8u*6u)L{8Gl(<{i$3eQdxlj$G6nfZzU!|uLd(wmJeCn78GUN|Zfnf8) zwqX_h2%tm}qxw9cUU_M>vyZdhime6#)C2K6YI0bEe5$L0q_v;Occfb8_#)}L>hK6i z*I`ka%*cFtt5TOE&6imOLjN0O@8t*17Xi!KucnjBq>UhXFPBNJ%4R<%^>ArBV882> zNx?qjO7y9x#THOW6B4^KMyW1{jh;i_^ycBOmhK}~$MHT;{eJ4?(|c+q9Qj#8zirpW zsn;s8mr-QmH@eLhnUrSzg`EOt(E5Ux?LIJysTJ7fKh1drQtW0AjXeCZ&W#O+l3Ho| zs#Pn@@7OCiIqja5VzV;Hi)}AAGCzX#%K~J8XcG&6eP*#nD}S$Ge<8kE<`c+ei7(iu z?e9x=*2=7aUt<<$Q+1reo|<=^z`d&$D@e}1hg8}8nh9?J_EX@h(Q_H_;rT4@H+;Hb zi#45M+;{*(TPCi_W1Sko0=e6GW1w0eRQV-Yc^bA+5P7ZO%dtVPTri4^ zO%u75cRwZJXLD8Uv%fdjrF_rQt5bZL`O2c5n*QrX34YIAP-Iy%j7Iq_?APOuR=&Eh z)`F;!>5Z`^N*>S-#udCsnaaUQ$d8;rQA_4{g2m!N=fr;jAufWOb~6^QfyMdM8>u~I zK)I?#b%o&|T*N1;-kL|mSD)pKTLB(UAJnEqIyjaZB1uy{wD1Olwj1?Adm5kVTrg~Y zGFb|pP@PmyrXT+gh?nG@z2=gS$wo_dzunuC9_@n|e_KrmLExt#hc2zh%zYZvvJ^L9 zWnPLo9NJrpcV>Hoe@02%*~utBI-Sp3Y|7IChpxN%kB4?DGbnY;;EU4 zy{Yb{b)OkXo>)zYe2u?l$g>KZdhDCa3`tfT$DJzZQW~Nz*`c`)q4thS)45ta_8`zu zs>4xmm2>3*{Mdgp;<-s7=go4FS}aPrgYzn-Lcy(>3&Ij{I#8vy{zjOg-_B&I;8sAx6~rwt%wV`H8Qfrva*gvP!DjF z{%u0=fuopLq+ZULFmN;3TfTz3s|Y`|NiiY4qoAv%I306j&9(~Qpn?Gf43~s64j%A4 z-9D4ZkN*$AVDW20Kvyl&TG@xBJnDy0=~K_5lRCrWEosT2-UsrrPAmsQ-*n z{vH>dqC4CoM_|N>md27E{AC~2F{rzHPiU>wwUu#y&@3}#WZ$#%4^!{+o6wt${WFu* zfyZS^dEh^H5M(EUD73&0V8L{>I`5@Aja{J%lZcyZ0bGUIP;igtL z3IW_>?rkGORV{4%uOQzTWcr6HZtdH{1gX|R->wxL9CJ$e?i63b4T>)^Fcvkq&IB z?24;&C`xy1{VlQ;RV>+)bzqBSQ(b02n81?|HoCqiJ5eW9D3MXh(!ka^&WQjgd_6p6 z)oNdps=29&SBr8z=X#rRJPRua$}Y1hYmlNbp4f;g@|Es@b?a+tG=kR#r@=$3$_mD% zeFoqQRPJi@k4hCqPXv|#6oxJpaBxI!_^QGL2@QTYWBbB(hWlf$Q1hU-ZOfL(9`45q z;ecQJU-y8YJVgI4xy3j9b7XDwY|3Ezhv>vF+p8^D$>Es5vcuuZJimd$7%mRvAa03m z{h?Rbo2NOVANk)kJ1IVvvE{K0`%oYs6`z(#nw?$>;2b@iB%+Z2im&+Yq z>_lG0gGO-Ce_0M_gWbLGMLm|Hj1g+YkyCRhROkOZ)mp`Hpm^=7^4w%U=A`jZ+m4)2 zRG=2Bn?4jzclENPj|;h z32sUmTZ(7YcC||UIgFIf<{ z(5#QHcTHz`^*V4yUoZFm@?6B^s_!!jwKP31*pMLci4haE_}xyuP>JGxw@ilzt_myi zDdEszDkm;gU{{yK_d8IV~0;a58X9Wy8cW>f$7ziN{Frp z&09T-UkzA)9Hb<~>`IP^H{ix8Y`m1+>8j7SbZwK|@8IJf-vElSghy4j;{ed#lJOBc;5YW$=pU{eA?@loOX@u*cTorJmS9wsPtYGg{F|* z$yu3CYTjK!#A`_N87@4ud=v@3RJxC#OmPIExD|q|TS7#fX@^84aaX_cd$!4HEd(ec!2rEi=PxrDAupbvc-Dzu-NnzljK&6uSxPF9CwdezxMOtD%l-s-LB z#Mh&kzlI7_cRF|f8WBA=-toRA9n1tT{csd1$TDkkk*wicVs24-nhB70(D;hlDoFb` zt$qYo-CScnE?_;ec@0jj9Y;$R3TyajRk&S^V|NriH{||$if-i%F<>|xh5ukB2$UnI zR>o^!msdP2me&2l}WCs z8A^UKmcF49m4z*qvYipIq+jsteg2jw(vx??enMDcd=dt%JKHON7<%v0yDb?P3`}}m zOR?7oYY&~}LI0)iL_bZn&O29?SF`?*Z6@23>!JUqjj2uQ^DGp6RN6|##S_s-Msd1x z)};>K{}5eOWB~3yZNSx2>OgB^FvW%nTT;ge;LD1U5@rjACAV!BE;7|s^6pdx+G>Dy z<6wm00i~mvxW~V1ZoJCDfM7XMX=X*c?8%ub~ICH<7)t>RacRt-MqoanF?ad&>)@(*(T4y;Si z%BHZMLo!NHrcL)`v5Y=8t#cMM5J-ycFe7zhB4qN(Dgv~%S(Un7WUQ=VU&5@w1>ZwN zH=;aU8D|IB=w9omavJ!lz3}{5ib7Go9PrDMQSg!n^K8@TEIq2W=F2A8x|>CD3{e@h zp)yy@Nw)lxbU;?h1DDvMu~1TN$42?%Jl@rwzxsLtT}Dj?xb-jS47nJj)Xc=V*XJ z*OH7UvS!X5{+<`KPxY*-O=gc{`5+PAf6_xXb0A0mdqkwizI`7Ud)U15o=jW`%_V4O zxr?!>XTuJVOY@x2&u4KggS)

fa5dD?8&6bIKv(7SvUKb;vAYZuHHS&ialprE=F! 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 {$QHe~bx!bnQUyPbPN@w^8~gM) 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 )5DX5f3^4~L$fp95 z9h1~yaZhg{)v^Bu4|SV?NJz*4#M-pDN0j9ysLh5U#ona-8JfDm*(1#X&+#O;hk5R| z`f=)jy!fA7(SkP2B@a%1u{7>WWiFi^iIcJY2Jh#P%wMSz0HDd0?!R*tdNrx7;i*GH zY27gaqs(@3>gP3$(wqU{nWaw=GCdjcKX(sXYdISf(|K$(Z9qhs$j*X$-1d(qaruN^ z+rsR@>joa)*#jNLI5}xUr5BR1>ftp*Dz6T2jK8^^iz!&#EVQJ47`A?~Xe;N=6^>Tv z2o-HWZ-fFdmfhU+84zWo<`$opN6KnER@leM)KbXy}8S zFuqc%1axzoP9B-O3Xz1j_3D|o&36kWp>+SSwig{H?A6B_x@DB(;A4yBdfEhA* zP&6DNUp5Q-C?O~i5pUyO>a8KLxRqWa=#S26JW!)``H7_@DrZ)fz{yeu5{00x%U5;# z^*lPCwp_fTGQ}?8lJ_$x?yV3IbY*rI-_D7bK@f0?2xTyq!|X8SD08b;OXR9JWf%p| zn{~g+sG5xzT8^j7gzvsxR_Ahc+Wn~^Gc<*KB}2b}xYvRQ}34O?A6+00y*7 zYK+rimv>vBvdz1?6BC8e*-hU~R~iDya8l;f052V)Ez~~eiuv652P#3#Hot!=Pp$d% zbikM3vFpjEMb?7LvT}QReAX^wi%NamGv^W5SOKH;SMUyr_&@3ijxS(zKS22Q`VECs zw8>LY*cM*aoa@N5Q3$cVuB(Guj~7F$_+a-7z1!A!NfdelLOu6KF;&y{b^68|o4<$# z?+wu?82t32A4?8lj>T;AZG}~`u^CM(SbWcC6wsAawS5@0C6E7=BZ8}P6S5d8YTpmB ze-fcONe~5-TXYn1DwATjWcViz0a&ah1^Zz=qZvePosu#So;&m8V`2R*rr2H-J5BKU+ zvPiaX1HLH%W+lh%D~SK}tGGU1oF^^6<#APdLj?O36&M|)EUbF%OI^*hxXhoqg^G{O z(p1gG`{@&I8)iL#k0@X<1Y~5;$8M7lmwUPG;Fh4PxDLPqZ^bsY+?rk^r2-=>vr*K2 zRFm|$pkh)ci?f=XAx3Zkl@MaoBvzOCWOVP+O>QxB(KbUjV znEgJ=v@Ulrc-;~?#N_Tosz7L6qNpFQx}RT{&E%$vYJw@AYoo)=BrU=fn5_~*s_GuZ zELTvz(2}V2vZ9e?s=t{&1rxUlEvYmgQbVD69Ey@uuzE+-T~4a(#C4TTiz&z}U^oO$ zR6iS)yny(YISGj@tE6wm&fzTkrAe=9*83<5ysOJ^Z91tBM?l zX_2cgmW{fADXOazX+lZ_v4SNtbm^f^KL|=^T1xSoyRNvXFeMz=3~*w-D^WpaIuzq= zY!V!?j5Gs>87dYk;M0K?_iF0Py@LW@eQG%uNKV(u2%S%P+7WH))DVIR4G@w9?VwM2{o9PQajs7JkIU`ecj05|z*g0TD05 zB7VUkYS21ImkE~T{q3^vvO8N6A%rUJ&MAG!L%J*{RuPM3@(faBVG9gr2CFqi;n+kS!fmCLh+ z;E#!e+%YM9EbER55DwaRXN^NnqzWjPsXFS5!wZOHy{M1B=Q|JAL}bx#V3gw4-SNLL zs9OuBh;McYv!lMl__gnq)C8dN@Idg6H;28dgBNmlBEw4Rn*{DHajDLX%De}ABwU2y zha+=>J;oa=lLz!XX-%v(a)XG61ga!vmb9?+1Ol~xUuG@4a&$VHw=VlWCp^p`{f7#L zU1GkAOsvX-Zh1bUfYQ2IcfLo+oHw(~5yP3gqJ*9^ATP}HSOyvlyD0_Y4-fg4?gvN> z&&-A9G_i4h4>N;Q9*1qh&I4Y65`9hti`HD3Wat5Y9-Lx2Wk0uNDdywAWme+un!={e zqB6nhurM9y6dhQ>44Ap46sf5ypARu2PB!3=8T=c~212V$O7orc^pSq15O3a{PZ>%O z538ji_yrNhP$r0HIMLcRQyq^SGAsHT z9_p@(9CNpSTQ@wC6!=SDInD}BfyytGHvsu&P>v>oS>W_i3W3|LOTQo?%gy|3Zobeg z7w)W-(UkyFC$YZp$L-f%UNk#KboaFQn}vqHmM_J{SvKg289Ra5#-73#&U`OQoS_<{ zelhvW2HAk~uSPmxUj1ZjOQg6!Wu>b-bZcM~<(O4PoO!X00w_P6=#~yT*KnNz$sLq0 zg{tmTBN9b}E@_fniU7q+8#*Bm2f_{qS|PMBY#E+#9@Cnv6JjjE#W^vGwLyuIXtwzbzaYioDN~yP%D1gtRPTK}B zL#-(Iy&cYtwp{bJAVgc`&E;mSL0S;S9TwWwX^B?t_4asa7B?Sz(L%0wEii)1hp|Ge zx|6-Hfz(l{eA)ZENrmgTufL?owE^rFZ+qSt9bQtI zmK=sWj%1{Wee^65&w2K3kLuH0Qo%JJ*`klwG-MO`u}{~y34%(JJ6S7tnM#jepMH-OrN}iQ z(y;#A==ZsL5?|54M3&3vo1Lqq$}Fn$Q-owe6{EB7Hv#eGcoK44R|{2#+K54`&5e=J z_jHpLo3OZt<9->+*BK^djGv%#GB5Z8uuoy|m2v-lFC*C6N$^QKhw%H$jH@Ar$=NEs?s=*R- zI?`~dMv4EsVc#yb>+f7{4(IAy1>0^PzA|dIj*-A!a3meYvC9p5uGK2+$wVM>g;d^s zAld*kokDw8M3^+8!YhIyhj`P|gk=+2GusdxsK*RPvt~^4pr_7;q^Qqz971R;EA4eT zsmAES)R6LQYC2d$nB@N6U5%KV+|XY+0L(mICQjOStZ%E|*=1zNGMY$4v1`z6GE?t58C8;w)5H(rEU^-EJjV zCwhcUPe;g`0#!I{Z@-?!>{r*6M`PH9sM~cvxt+{o0IFI4fUcVK$w@V^1N$ z_zL~~3<9;<2WwC%?GCpFP2e#BkKHa&aZSt^lk;<1OepgZmrRvMUJ*4oB(Dj38PRn< zWQ@Rx4_~pSEn#2gZp}t>-~eh9ikJem5AjEc#xe5w=A@!QRp=a0ONO5(a3}fGFq8?4 zfXmd5^mVS2L;a!wgzyQh9(Z@^HL7?njOb%z=m*AVIRmHz@!j%N_|&^R*NTwWmkwMo z&=^Wdc2kI-$L)#|`_@ga080xngwiu4nOf(dlf(6n{Nty_H>ZPiLXeSm<|S8}`*~L|=M>;c9IE!q@ zo~_SFzGt>#!%@<*zqy1L)>I2@2of$!cXW$p+TEl2o9ty`3ED?mB1eQ@UcY1V-^8iv zMM941=kP%1CY*eyMmmOYDR91EUey#x!8rzvGo1Eob9C8!Ty3T`u}44JGb;wjYeV7) zTWi?&>ffovC{-vxX;N`bTq$2vopD7m_?kBXhD&C(%R%wuZn|u|-r;*Dezbo+qzMT$3!$wQGI4%~ zsB?IlwLVgPh3m4z1f4FYxi~yWi^xM-y-W2#t9tZq65LD-KQncx zXtwG@+aOc`%6&|n7TB|He~qQQ+!vp|>L9dCtFKrkmCDQvuZ`t6OK>z zQXa|wnqbk;bX!``m1Np)$G-;&tZ7Q?h9$sZI!t!88>w_Yoh$PcKNS|)*etrr^YhYV ziuXnV@UG$McxaeAKA9mv>o?aCO8Zvjv4SJ0L9Bm$obo`<5{z34$(X~msf|;R(R1s7 zkW;11UE&1E77JwQ%@gjffv5RNC47RC9+$h*eOo3Z%SAX;S>Dh&OJ+`d)r`Gn?ty=j zOL3LMhxmlG7|G+x!SQQ&<5!vo6Oo+{rFy^u8(*V9r}9}q>1O4U!B-|rWHvvztjJ2c zO?^lmLh3+27wab?Q%5&blR19CycA&|w&K@(q`IcWyJ%Ed8`^!IWo{cYYv%(CKc%&w zl9Xk7VY!QK$)ar0Bg_!rEcd*?Tbj!S%qVr3>=0$=0sh_)JnX;7c9@Km9YiUGRwfVa za1t8z`m9LfT%GGM7lQjhS|(ncsWeEVpyS^ittFjO;_5}xh~ve=u0;8>l?NZwZ0`uX zu@hoq-YE^h98DBQwBC%Rr*65sHc&_QPC>-ICz{T-`-HxQd+|jtOa6_+SC@32Z|w zdZJ8<<~MlcBPvOC2J=J+^EHW{=@A*lJ^GERQ#*0TKV+6!mQNgKdiwuWGzQ8l^G-#p zxJ;SE`>&kLNOcqKtpn*yyqm#>}3e=v~OXB|1$rFiMXc{q~d4i|jyJ zM<;OS3ior{2NTt-OuP$jxr=H@mIrg7jn@hnRj zYte|7km9Szf~p*pV;^VQD>++xD|q}@J|M|ueei85I8f`bNwBG4bZsv2A_ecu>0Nxg1Om>3FKKno$UO?SsN*mV)6#mP7Z z1|yMb68dqJtbn9JH)% zK0uxpS{-uyDlebFT3?q)jr92elGkiJPeON}dse(f8D-CvbQvN0jq`O_z29?sB2q^x-}~m>(6WWXf@40M<5SVluNVU>Quj zQFojf^#E`MX?zL}haG>2v>CLFlPai34j~PZZ~(lZ)pa~`e*(vG{Y{)>XbFpcRo|BA zYDElxtcMXkad&gucY9ogm+6J~LeiSL{pYZ_0+ zaA7vfH&UpG`G)7G-*MikN%4eS68URNTCtn&eAaG@BAO?;s;5VU3B|KkIgK!VPg^5! zhC+Je=ugDy-_eX_ihk}BI$dM4ve8~C)Q)qPes)56T5A$oj#o#hF?ro%JQLS1(zr+c z1Y|t{Uv&Kb2*qCnnva!K5}<_BYNS?ho;w`PSBZ|8@Uhed1N3qFQL}h{_ZT$Vgkf9f zrFC#?5Fz1Ye6QX(D#|UtNa$E-AwAFOV_nFo8wx5=?HkS}{7C|MmspWa%3UK(yo;#Q zkTLWVDPQB)-z3f``sFcO!8HELSOk`9PV2_&sa)OM>7pyAgnA2~P50s+Mx^X?ZixH% z(C_dMf}8bg;zSij6cyJvLF5_&R^t|K?1ceQC=Fg??U2DS0djI$r-n+k829y4rIkHq zJkoQ;v_IVJ;n+z{rBRntVI_FX(WhL zmi(i@6k1AI;tJc|eW8K2$wuJ1>1I*`E7W0JrH`<+t_fX=>s&)l;g47KD6mM!;#F$o z&8!$`m>gRg3@r_JTiEP%}H1N*FTF zPKQMpn|n}R%n^sH3&Pp~e5;1+5JE;Wl%Ov4mQkFG#I)_ox|y{e>XP3+vCOwj5?P*Y zR>erzgoX$m^3Xchdk%WB@v`SYZ6m@y6^-&NkcZ&-mdz#+7qmPgEyl=2w~1*#MYahC z5v?LQZ`P0o#7ve>N=eccIFgr({h2%txqER(QUz7t^sg$_*i2IExe14MN6m2iL;SP= zQ~U!zRSoC!e)l+EIv3c6Ehsv+E`*aBo%Jv0CIi6Zq~p5s;Vrs ze*KMs=(@+Ku;Ka-DziMsLi=Crdf8kL`O+vF86eAjlb7$|q|M+Nq9I$OKL9lbx+1W!Phynq;IE@6;gdCU0&gT3RUN^*VQOY)VO1)XldCEKKy#I=pFD zl>EN=83^sA(vI*OJ)tB~$_S#PxQ!Q$UMWCtu)Zp!6Q!#V(HJKmA~?en2(23WDIxw# z?aJRKC7vu4yP}5mG0ZnD1@+(w!4j!R!&<6w$vnewUOna>3=Qc*ivmxpbs5^G72L~n zi1>kMGKYl0*B1?d#?MbSneTAKQQ$QxI3ml(yid(RldbK=^xTn3e?`e=N)d5ZY`;si)dTS7i-&>_b&m4HkD z+5%cJb)BH6-#!*O7^CVWlS z26;Xrxv!IMM5;r)nqI>>LeUF^7APAhdt^zA^EVRj66E8J?t4s{ku+(D#p7uFTB94Q zPRLM-E@e?;@}hS&uYClis52(Mn?#?Pq+Q%ujoOhAWwkS)shQ0Qkp?7?MaB4zKX!|; z-NP5_XYv3nZsI4i>Ny-`aMp_*x3jq*Aj~C{Eh*G*8%3BJ)Aa6QXqJF~rxY-d1MKqm z2;@*MKaz-D12JcIYM>9Bovydi&|h+U;?D*910Zdgh4V76NoaFod?I=H-Z;vN+jx{0 zS)cC4lVF_?5!b#C(am9AKNn||n)(HVhd6vzX5aHU?k)}XYRq-kLKM;GOce__mb7H! z_@ui8^W^Q~B1E@Nl}D&6SnX4g%tX$N7?|7#J&!eav$OyYxJOQa3gM8{2Z0@YxrQ@!}zQbS7$ zyW_(%sEfn8Jv`FDGD7q{d1;oJQ$lF7>0%Yu0ot8{5KFKD!QOKrz@t6b} z0)fm2FK82FdDAyprdJP^`bNH;ALO@EEX!r4^H@-X?pe{)S>6|Q5x?zpgp%0~(?OM2 z4TtzhmdE@WAt^3npm2g4(;8fKuc;HJTDV9C!He7luMhTX-{8y=o@8#rgzZBVs_v12+63(r%-@`s)S~1%(=|VjG59+v;Bg&GwD%61?T&;{}cg-s>H6%#1Hfv!v}MP&(CT&nz;1%uF6CI$>qXAeOeso5tP za4ii&Be<>5eu1hnQuoV*0LvcVJ-`e(?LwusL{1}*4W6+w_(79WU>H}JU)w#+z`&OF zoYiMz{L-i9teFZW7m*XU)@oAtWCFWHTl`6md4rXZOIcL$?Hns5j4Q+?D2dRm%KS^C zDIzmOeLt#ts_HvzYbFDS3!Lh8&&s4Kp**E=<^1H;J>+b6#gp&wyK^P=7paD%RXm;n zP%bt-l{%=IstM>TR*wHwfTe)zQ=d!1bx%Kho$hwx`

^1uw{C2HyPB0`XFfy>lL*n&-j0wzD? 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 R{LfF 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

PLrgF8-Q3|NSOt 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

d= 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 aC@j#XWqt8;3}E1Y4@!y2i`EDm2K^sm7M4%| literal 0 HcmV?d00001 diff --git a/dist2/d13f13f5694ec91f.svg b/dist2/d13f13f5694ec91f.svg new file mode 100644 index 00000000000..04e9f49b0c8 --- /dev/null +++ b/dist2/d13f13f5694ec91f.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/dist2/f158a440053a5ad2.png b/dist2/f158a440053a5ad2.png new file mode 100644 index 0000000000000000000000000000000000000000..33a64890cb0b0f9bf1b4bbe042c075a2334e4b3e GIT binary patch literal 685688 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

CwMS!~_q8ih2YR$N34WRa*KE*N3 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

@Y4)LsTu7rre;2AHY*CGt`MuB^i5 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%0D{W_D@(dmA$hfMwn0@ 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�t(;!BP=_f9G;~+)o8wSBf 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%0D{FDtu#hTXRVK;vE(FAS~I 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⪚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≪R;;SF+!4Cd3}pKP7J%F~r`%j!Xz(JEz~v0KGJ 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 literal 0 HcmV?d00001 diff --git a/dist2/snowflake.js b/dist2/snowflake.js index 4df9aedadc1..9a417e1e042 100644 --- a/dist2/snowflake.js +++ b/dist2/snowflake.js @@ -1,71 +1,78 @@ -<<<<<<< HEAD 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var jsxRuntime = require('react/jsx-runtime'); +var styled = require('styled-components/macro'); +var React = require('react'); +var reactRedux = require('react-redux'); +var toolkit = require('@reduxjs/toolkit'); +var qs = require('qs'); +var reactRouterDom = require('react-router-dom'); +var address = require('@ethersproject/address'); var macro = require('@lingui/macro'); -var v2Sdk = require('@uniswap/v2-sdk'); -var v3Sdk = require('@uniswap/v3-sdk'); var core = require('@web3-react/core'); var sdkCore = require('@uniswap/sdk-core'); var JSBI = require('jsbi'); -var reactFeather = require('react-feather'); -var React = require('react'); -var reactRedux = require('react-redux'); -var bytes = require('@ethersproject/bytes'); -var strings = require('@ethersproject/strings'); -var address = require('@ethersproject/address'); +var rebass = require('rebass'); var constants = require('@ethersproject/constants'); var contracts = require('@ethersproject/contracts'); var jotai = require('jotai'); var utils = require('jotai/utils'); var reduxMulticall = require('@uniswap/redux-multicall'); +var v2Sdk = require('@uniswap/v2-sdk'); +var v3Sdk = require('@uniswap/v3-sdk'); var redux = require('redux'); +var hash = require('@ethersproject/hash'); +var app = require('firebase/app'); +var database = require('firebase/database'); +var bytes = require('@ethersproject/bytes'); +var strings = require('@ethersproject/strings'); var core$1 = require('widgets-web3-react/core'); var empty = require('widgets-web3-react/empty'); -var hash = require('@ethersproject/hash'); var CID = require('cids'); var multicodec = require('multicodec'); var multihashes = require('multihashes'); -var abi$6 = require('@ethersproject/abi'); -var toolkit = require('@reduxjs/toolkit'); -var styled = require('styled-components/macro'); -var rebass = require('rebass'); +var abi$7 = require('@ethersproject/abi'); +var reactFeather = require('react-feather'); var ReactGA = require('react-ga'); -var reactRouterDom = require('react-router-dom'); var styledComponents = require('rebass/styled-components'); -var reactSpring = require('react-spring'); -var useResizeObserver = require('use-resize-observer'); var polished = require('polished'); -var Portal = require('@reach/portal'); -var reactPopper = require('react-popper'); -var units = require('@ethersproject/units'); -var routerSdk = require('@uniswap/router-sdk'); +var ReactConfetti = require('react-confetti'); var dialog = require('@reach/dialog'); +var reactSpring = require('react-spring'); var reactUseGesture = require('react-use-gesture'); var uaParserJs = require('ua-parser-js'); -var app = require('firebase/app'); -var database = require('firebase/database'); -var AutoSizer = require('react-virtualized-auto-sizer'); -var reactWindow = require('react-window'); +var react = require('@reduxjs/toolkit/query/react'); +var reduxLocalstorageSimple = require('redux-localstorage-simple'); +var graphqlRequest = require('graphql-request'); +var tokenLists = require('@uniswap/token-lists'); +var routerSdk = require('@uniswap/router-sdk'); +var ms = require('ms.macro'); +var units = require('@ethersproject/units'); +var useScrollPosition = require('@react-hook/window-scroll'); +var Portal = require('@reach/portal'); +var reactPopper = require('react-popper'); var safeAppsWeb3React = require('@gnosis.pm/safe-apps-web3-react'); var injectedConnector = require('@web3-react/injected-connector'); var portisConnector = require('@web3-react/portis-connector'); var walletconnectConnector = require('@web3-react/walletconnect-connector'); var walletlinkConnector = require('@web3-react/walletlink-connector'); var providers = require('@ethersproject/providers'); -var ms = require('ms.macro'); var fortmaticConnector = require('@web3-react/fortmatic-connector'); var abstractConnector = require('@web3-react/abstract-connector'); var invariant = require('tiny-invariant'); +var clone$1 = require('clone'); +var colorConvert = require('color-convert'); +var colorString = require('color-string'); +var bignumber = require('@ethersproject/bignumber'); +var copy = require('copy-to-clipboard'); +var web = require('react-spring/web'); +var useResizeObserver = require('use-resize-observer'); +var AutoSizer = require('react-virtualized-auto-sizer'); +var reactWindow = require('react-window'); var Vibrant = require('node-vibrant/lib/bundle'); var wcagContrast = require('wcag-contrast'); -var qs = require('qs'); -var react = require('@reduxjs/toolkit/query/react'); -var reduxLocalstorageSimple = require('redux-localstorage-simple'); -var graphqlRequest = require('graphql-request'); -var tokenLists = require('@uniswap/token-lists'); var core$2 = require('@lingui/core'); var react$1 = require('@lingui/react'); var plurals$1 = require('make-plural/plurals'); @@ -73,318 +80,59 @@ var smartOrderRouter = require('@uniswap/smart-order-router'); var ethers = require('ethers/lib/ethers'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } -======= -Object.defineProperty(exports, '__esModule', { value: true }) - -var jsxRuntime = require('react/jsx-runtime') -var macro = require('@lingui/macro') -var v2Sdk = require('@uniswap/v2-sdk') -var v3Sdk = require('@uniswap/v3-sdk') -var core = require('@web3-react/core') -var sdkCore = require('@uniswap/sdk-core') -var JSBI = require('jsbi') -var reactFeather = require('react-feather') -var React = require('react') -var reactRedux = require('react-redux') -var bytes = require('@ethersproject/bytes') -var strings = require('@ethersproject/strings') -var address = require('@ethersproject/address') -var constants = require('@ethersproject/constants') -var contracts = require('@ethersproject/contracts') -var jotai = require('jotai') -var utils = require('jotai/utils') -var reduxMulticall = require('@uniswap/redux-multicall') -var redux = require('redux') -var core$1 = require('widgets-web3-react/core') -var empty = require('widgets-web3-react/empty') -var hash = require('@ethersproject/hash') -var CID = require('cids') -var multicodec = require('multicodec') -var multihashes = require('multihashes') -var abi$6 = require('@ethersproject/abi') -var toolkit = require('@reduxjs/toolkit') -var styled = require('styled-components/macro') -var rebass = require('rebass') -var ReactGA = require('react-ga') -var reactRouterDom = require('react-router-dom') -var styledComponents = require('rebass/styled-components') -var reactSpring = require('react-spring') -var useResizeObserver = require('use-resize-observer') -var polished = require('polished') -var Portal = require('@reach/portal') -var reactPopper = require('react-popper') -var units = require('@ethersproject/units') -var routerSdk = require('@uniswap/router-sdk') -var dialog = require('@reach/dialog') -var reactUseGesture = require('react-use-gesture') -var uaParserJs = require('ua-parser-js') -var app = require('firebase/app') -var database = require('firebase/database') -var AutoSizer = require('react-virtualized-auto-sizer') -var reactWindow = require('react-window') -var safeAppsWeb3React = require('@gnosis.pm/safe-apps-web3-react') -var injectedConnector = require('@web3-react/injected-connector') -var portisConnector = require('@web3-react/portis-connector') -var walletconnectConnector = require('@web3-react/walletconnect-connector') -var walletlinkConnector = require('@web3-react/walletlink-connector') -var providers = require('@ethersproject/providers') -var ms = require('ms.macro') -var fortmaticConnector = require('@web3-react/fortmatic-connector') -var abstractConnector = require('@web3-react/abstract-connector') -var invariant = require('tiny-invariant') -var Vibrant = require('node-vibrant/lib/bundle') -var wcagContrast = require('wcag-contrast') -var qs = require('qs') -var react = require('@reduxjs/toolkit/query/react') -var reduxLocalstorageSimple = require('redux-localstorage-simple') -var graphqlRequest = require('graphql-request') -var tokenLists = require('@uniswap/token-lists') -var smartOrderRouter = require('@uniswap/smart-order-router') -var ethers = require('ethers/lib/ethers') - -function _interopDefaultLegacy(e) { - return e && typeof e === 'object' && 'default' in e ? e : { default: e } -} ->>>>>>> ee1338c81a2c73d9938e225b8b96abd2fc298260 function _interopNamespace(e) { - if (e && e.__esModule) return e - var n = Object.create(null) - if (e) { - Object.keys(e).forEach(function (k) { - if (k !== 'default') { - var d = Object.getOwnPropertyDescriptor(e, k) - Object.defineProperty( - n, - k, - d.get - ? d - : { - enumerable: true, - get() { - return e[k] - }, - } - ) - } - }) - } - n['default'] = e - return Object.freeze(n) -} - -function _mergeNamespaces(n, m) { - m.forEach(function (e) { - e && - typeof e !== 'string' && - !Array.isArray(e) && - Object.keys(e).forEach(function (k) { - if (k !== 'default' && !(k in n)) { - var d = Object.getOwnPropertyDescriptor(e, k) - Object.defineProperty( - n, - k, - d.get - ? d - : { - enumerable: true, - get() { - return e[k] - }, - } - ) - } - }) - }) - return Object.freeze(n) -} - -var JSBI__default = /*#__PURE__*/ _interopDefaultLegacy(JSBI) -var React__namespace = /*#__PURE__*/ _interopNamespace(React) -var React__default = /*#__PURE__*/ _interopDefaultLegacy(React) -var CID__default = /*#__PURE__*/ _interopDefaultLegacy(CID) -var styled__default = /*#__PURE__*/ _interopDefaultLegacy(styled) -var ReactGA__default = /*#__PURE__*/ _interopDefaultLegacy(ReactGA) -var useResizeObserver__default = /*#__PURE__*/ _interopDefaultLegacy(useResizeObserver) -var Portal__default = /*#__PURE__*/ _interopDefaultLegacy(Portal) -var AutoSizer__default = /*#__PURE__*/ _interopDefaultLegacy(AutoSizer) -var ms__default = /*#__PURE__*/ _interopDefaultLegacy(ms) -var invariant__default = /*#__PURE__*/ _interopDefaultLegacy(invariant) -var Vibrant__default = /*#__PURE__*/ _interopDefaultLegacy(Vibrant) -var qs__default = /*#__PURE__*/ _interopDefaultLegacy(qs) - -/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */ -/* global Reflect, Promise */ - -var extendStatics = function (d, b) { - extendStatics = - Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && - function (d, b) { - d.__proto__ = b - }) || - function (d, b) { - for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p] - } - return extendStatics(d, b) -} - -function __extends(d, b) { - if (typeof b !== 'function' && b !== null) - throw new TypeError('Class extends value ' + String(b) + ' is not a constructor or null') - extendStatics(d, b) - function __() { - this.constructor = d - } - d.prototype = b === null ? Object.create(b) : ((__.prototype = b.prototype), new __()) -} - -var __assign = function () { - __assign = - Object.assign || - function __assign(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i] - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p] - } - return t - } - return __assign.apply(this, arguments) -} - -function __rest(s, e) { - var t = {} - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p] - if (s != null && typeof Object.getOwnPropertySymbols === 'function') - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]] - } - return t -} - -function __awaiter(thisArg, _arguments, P, generator) { - function adopt(value) { - return value instanceof P - ? value - : new P(function (resolve) { - resolve(value) - }) - } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { - try { - step(generator.next(value)) - } catch (e) { - reject(e) - } - } - function rejected(value) { - try { - step(generator['throw'](value)) - } catch (e) { - reject(e) - } - } - function step(result) { - result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected) + if (e && e.__esModule) return e; + var n = Object.create(null); + if (e) { + Object.keys(e).forEach(function (k) { + if (k !== 'default') { + var d = Object.getOwnPropertyDescriptor(e, k); + Object.defineProperty(n, k, d.get ? d : { + enumerable: true, + get: function () { return e[k]; } + }); + } + }); } - step((generator = generator.apply(thisArg, _arguments || [])).next()) - }) + n["default"] = e; + return Object.freeze(n); } -function __generator(thisArg, body) { - var _ = { - label: 0, - sent() { - if (t[0] & 1) throw t[1] - return t[1] - }, - trys: [], - ops: [], - }, - f, - y, - t, - g - return ( - (g = { next: verb(0), throw: verb(1), return: verb(2) }), - typeof Symbol === 'function' && - (g[Symbol.iterator] = function () { - return this - }), - g - ) - function verb(n) { - return function (v) { - return step([n, v]) - } - } - function step(op) { - if (f) throw new TypeError('Generator is already executing.') - while (_) - try { - if ( - ((f = 1), - y && - (t = op[0] & 2 ? y['return'] : op[0] ? y['throw'] || ((t = y['return']) && t.call(y), 0) : y.next) && - !(t = t.call(y, op[1])).done) - ) - return t - if (((y = 0), t)) op = [op[0] & 2, t.value] - switch (op[0]) { - case 0: - case 1: - t = op - break - case 4: - _.label++ - return { value: op[1], done: false } - case 5: - _.label++ - y = op[1] - op = [0] - continue - case 7: - op = _.ops.pop() - _.trys.pop() - continue - default: - if (!((t = _.trys), (t = t.length > 0 && t[t.length - 1])) && (op[0] === 6 || op[0] === 2)) { - _ = 0 - continue +function _mergeNamespaces(n, m) { + m.forEach(function (e) { + e && typeof e !== 'string' && !Array.isArray(e) && Object.keys(e).forEach(function (k) { + if (k !== 'default' && !(k in n)) { + var d = Object.getOwnPropertyDescriptor(e, k); + Object.defineProperty(n, k, d.get ? d : { + enumerable: true, + get: function () { return e[k]; } + }); } -<<<<<<< HEAD }); }); return Object.freeze(n); } -var JSBI__default = /*#__PURE__*/_interopDefaultLegacy(JSBI); -var React__namespace = /*#__PURE__*/_interopNamespace(React); +var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled); var React__default = /*#__PURE__*/_interopDefaultLegacy(React); +var React__namespace = /*#__PURE__*/_interopNamespace(React); +var qs__default = /*#__PURE__*/_interopDefaultLegacy(qs); +var JSBI__default = /*#__PURE__*/_interopDefaultLegacy(JSBI); var CID__default = /*#__PURE__*/_interopDefaultLegacy(CID); -var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled); var ReactGA__default = /*#__PURE__*/_interopDefaultLegacy(ReactGA); -var useResizeObserver__default = /*#__PURE__*/_interopDefaultLegacy(useResizeObserver); -var Portal__default = /*#__PURE__*/_interopDefaultLegacy(Portal); -var AutoSizer__default = /*#__PURE__*/_interopDefaultLegacy(AutoSizer); +var ReactConfetti__default = /*#__PURE__*/_interopDefaultLegacy(ReactConfetti); var ms__default = /*#__PURE__*/_interopDefaultLegacy(ms); +var useScrollPosition__default = /*#__PURE__*/_interopDefaultLegacy(useScrollPosition); +var Portal__default = /*#__PURE__*/_interopDefaultLegacy(Portal); var invariant__default = /*#__PURE__*/_interopDefaultLegacy(invariant); +var clone__namespace = /*#__PURE__*/_interopNamespace(clone$1); +var colorConvert__namespace = /*#__PURE__*/_interopNamespace(colorConvert); +var colorString__namespace = /*#__PURE__*/_interopNamespace(colorString); +var copy__default = /*#__PURE__*/_interopDefaultLegacy(copy); +var useResizeObserver__default = /*#__PURE__*/_interopDefaultLegacy(useResizeObserver); +var AutoSizer__default = /*#__PURE__*/_interopDefaultLegacy(AutoSizer); var Vibrant__default = /*#__PURE__*/_interopDefaultLegacy(Vibrant); -var qs__default = /*#__PURE__*/_interopDefaultLegacy(qs); /*! ***************************************************************************** Copyright (c) Microsoft Corporation. @@ -522,5915 +270,367 @@ function __makeTemplateObject(cooked, raw) { return cooked; } -var EthereumLogo = "data:image/png;base64,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"; +var rotate$2 = styled.keyframes(templateObject_1$1n || (templateObject_1$1n = __makeTemplateObject(["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"], ["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"]))); +var StyledSVG = styled__default["default"].svg(templateObject_2$11 || (templateObject_2$11 = __makeTemplateObject(["\n animation: 2s ", " linear infinite;\n height: ", ";\n width: ", ";\n path {\n stroke: ", ";\n }\n"], ["\n animation: 2s ", " linear infinite;\n height: ", ";\n width: ", ";\n path {\n stroke: ", ";\n }\n" + /** + * Takes in custom size and stroke for circle color, default to primary color as fill, + * need ...rest for layered styles on top + */ +])), rotate$2, function (_a) { + var size = _a.size; + return size; +}, function (_a) { + var size = _a.size; + return size; +}, function (_a) { + var stroke = _a.stroke, theme = _a.theme; + return stroke !== null && stroke !== void 0 ? stroke : theme.primary1; +}); +/** + * Takes in custom size and stroke for circle color, default to primary color as fill, + * need ...rest for layered styles on top + */ +function Loader(_a) { + var _b = _a.size, size = _b === void 0 ? '16px' : _b, stroke = _a.stroke, rest = __rest(_a, ["size", "stroke"]); + return (jsxRuntime.jsx(StyledSVG, __assign({ viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", size: size, stroke: stroke }, rest, { children: jsxRuntime.jsx("path", { d: "M12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22C17.5228 22 22 17.5228 22 12C22 9.27455 20.9097 6.80375 19.1414 5", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round" }, void 0) }), void 0)); +} +var templateObject_1$1n, templateObject_2$11; -var arbitrumLogoUrl = "data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20viewBox%3D%220%200%20470.287%20514.251%22%20enable-background%3D%22new%200%200%20470.287%20514.251%22%20xml%3Aspace%3D%22preserve%22%3E%3Cg%20id%3D%22Background%22%3E%3C%2Fg%3E%3Cg%20id%3D%22Logos_and_symbols%22%3E%20%3Cg%20id%3D%22SYMBOL_VER_3%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_4_3_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_1_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_1_%22%3E%20%20%3Cg%20id%3D%22_x31_-3%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_14_%22%3E%20%20%20%3Cpath%20fill%3D%22%232D374B%22%20d%3D%22M291.134%2C237.469l35.654-60.5l96.103%2C149.684l0.046%2C28.727l-0.313-197.672%20%20%20%20c-0.228-4.832-2.794-9.252-6.887-11.859L242.715%2C46.324c-4.045-1.99-9.18-1.967-13.22%2C0.063c-0.546%2C0.272-1.06%2C0.57-1.548%2C0.895%20%20%20%20l-0.604%2C0.379L59.399%2C144.983l-0.651%2C0.296c-0.838%2C0.385-1.686%2C0.875-2.48%2C1.444c-3.185%2C2.283-5.299%2C5.66-5.983%2C9.448%20%20%20%20c-0.103%2C0.574-0.179%2C1.158-0.214%2C1.749l0.264%2C161.083l89.515-138.745c11.271-18.397%2C35.825-24.323%2C58.62-24.001l26.753%2C0.706%20%20%20%20L67.588%2C409.765l18.582%2C10.697L245.692%2C157.22l70.51-0.256L157.091%2C426.849l66.306%2C38.138l7.922%2C4.556%20%20%20%20c3.351%2C1.362%2C7.302%2C1.431%2C10.681%2C0.21l175.453-101.678l-33.544%2C19.438L291.134%2C237.469z%20M304.736%2C433.395l-66.969-105.108%20%20%20%20l40.881-69.371l87.952%2C138.628L304.736%2C433.395z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%2328A0F0%22%20points%3D%22237.768%2C328.286%20304.736%2C433.395%20366.601%2C397.543%20278.648%2C258.915%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2328A0F0%22%20d%3D%22M422.937%2C355.379l-0.046-28.727l-96.103-149.684l-35.654%2C60.5l92.774%2C150.043l33.544-19.438%20%20%20%20c3.29-2.673%2C5.281-6.594%2C5.49-10.825L422.937%2C355.379z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23FFFFFF%22%20d%3D%22M20.219%2C382.469l47.369%2C27.296l157.634-252.801l-26.753-0.706c-22.795-0.322-47.35%2C5.604-58.62%2C24.001%20%20%20%20L50.334%2C319.004l-30.115%2C46.271V382.469z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%23FFFFFF%22%20points%3D%22316.202%2C156.964%20245.692%2C157.22%2086.17%2C420.462%20141.928%2C452.565%20157.091%2C426.849%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2396BEDC%22%20d%3D%22M452.65%2C156.601c-0.59-14.746-8.574-28.245-21.08-36.104L256.28%2C19.692%20%20%20%20c-12.371-6.229-27.825-6.237-40.218-0.004c-1.465%2C0.739-170.465%2C98.752-170.465%2C98.752c-2.339%2C1.122-4.592%2C2.458-6.711%2C3.975%20%20%20%20c-11.164%2C8.001-17.969%2C20.435-18.668%2C34.095v208.765l30.115-46.271L50.07%2C157.921c0.035-0.589%2C0.109-1.169%2C0.214-1.741%20%20%20%20c0.681-3.79%2C2.797-7.171%2C5.983-9.456c0.795-0.569%2C172.682-100.064%2C173.228-100.337c4.04-2.029%2C9.175-2.053%2C13.22-0.063%20%20%20%20l173.022%2C99.523c4.093%2C2.607%2C6.659%2C7.027%2C6.887%2C11.859v199.542c-0.209%2C4.231-1.882%2C8.152-5.172%2C10.825l-33.544%2C19.438%20%20%20%20l-17.308%2C10.031l-61.864%2C35.852l-62.737%2C36.357c-3.379%2C1.221-7.33%2C1.152-10.681-0.21l-74.228-42.693l-15.163%2C25.717%20%20%20%20l66.706%2C38.406c2.206%2C1.255%2C4.171%2C2.367%2C5.784%2C3.272c2.497%2C1.4%2C4.199%2C2.337%2C4.8%2C2.629c4.741%2C2.303%2C11.563%2C3.643%2C17.71%2C3.643%20%20%20%20c5.636%2C0%2C11.132-1.035%2C16.332-3.072l182.225-105.531c10.459-8.104%2C16.612-20.325%2C17.166-33.564V156.601z%22%2F%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_13_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_6_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_3_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_15_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_3_%22%3E%20%20%20%3Cg%20id%3D%22_x33__7_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic%22%3E%20%20%20%3Cg%20id%3D%22_x33__3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_10_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x34__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_2_%22%3E%20%20%20%3Cg%20id%3D%22_x33__6_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_2_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_11_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_5_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_12_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_1_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_9_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_2_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol_1_%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_1_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_7_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_8_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Monochromatic_1_%22%3E%20%20%3Cg%20id%3D%22_x33__4_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E"; +var useAppDispatch = function () { return reactRedux.useDispatch(); }; +var useAppSelector = reactRedux.useSelector; -var optimismLogoUrl = "data:image/svg+xml,%3Csvg%20width%3D%22170%22%20height%3D%22168%22%20viewBox%3D%220%200%20170%20168%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20clip-path%3D%22url%28%23clip0%29%22%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF505F%22%2F%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF0320%22%2F%3E%3Cpath%20d%3D%22M85.05%200C132.022%200%20170.1%2037.8949%20170.1%2084.6407C170.1%20131.386%200%20131.386%200%2084.6407C0%2037.8949%2038.0782%200%2085.05%200Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.665%2064.0394L112.444%2012.3742L89.0263%2078.9477L144.665%2064.0394Z%22%20fill%3D%22%23FF4E65%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.777%2064.215L112.444%2012.3742L165.349%2058.4347L143.777%2064.215Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.551%2063.613L142.479%20124.467L88.912%2078.5213L144.551%2063.613Z%22%20fill%3D%22%23D0001A%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.663%2063.7886L142.479%20124.467L165.235%2058.0083L143.663%2063.7886Z%22%20fill%3D%22%23FF697B%22%2F%3E%3C%2Fg%3E%3Cdefs%3E%3CclipPath%20id%3D%22clip0%22%3E%3Crect%20width%3D%22170%22%20height%3D%22168%22%20fill%3D%22white%22%2F%3E%3C%2FclipPath%3E%3C%2Fdefs%3E%3C%2Fsvg%3E"; +var updateMatchesDarkMode = toolkit.createAction('user/updateMatchesDarkMode'); +var updateUserDarkMode = toolkit.createAction('user/updateUserDarkMode'); +var updateUserExpertMode = toolkit.createAction('user/updateUserExpertMode'); +var updateUserLocale = toolkit.createAction('user/updateUserLocale'); +var updateShowSurveyPopup = toolkit.createAction('user/updateShowSurveyPopup'); +var updateUserClientSideRouter = toolkit.createAction('user/updateUserClientSideRouter'); +var updateHideClosedPositions = toolkit.createAction('user/hideClosedPositions'); +var updateUserSlippageTolerance = toolkit.createAction('user/updateUserSlippageTolerance'); +var updateUserDeadline = toolkit.createAction('user/updateUserDeadline'); +var addSerializedToken = toolkit.createAction('user/addSerializedToken'); +var removeSerializedToken = toolkit.createAction('user/removeSerializedToken'); +var addSerializedPair = toolkit.createAction('user/addSerializedPair'); +var removeSerializedPair = toolkit.createAction('user/removeSerializedPair'); -var polygonMaticLogo = "data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20viewBox%3D%220%200%2038.4%2033.5%22%20style%3D%22enable-background%3Anew%200%200%2038.4%2033.5%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cstyle%20type%3D%22text%2Fcss%22%3E%20.st0%7Bfill%3A%238247E5%3B%7D%3C%2Fstyle%3E%3Cg%3E%20%3Cpath%20class%3D%22st0%22%20d%3D%22M29%2C10.2c-0.7-0.4-1.6-0.4-2.4%2C0L21%2C13.5l-3.8%2C2.1l-5.5%2C3.3c-0.7%2C0.4-1.6%2C0.4-2.4%2C0L5%2C16.3%20%20c-0.7-0.4-1.2-1.2-1.2-2.1v-5c0-0.8%2C0.4-1.6%2C1.2-2.1l4.3-2.5c0.7-0.4%2C1.6-0.4%2C2.4%2C0L16%2C7.2c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v3.3l3.8-2.2V7%20%20c0-0.8-0.4-1.6-1.2-2.1l-8-4.7c-0.7-0.4-1.6-0.4-2.4%2C0L1.2%2C5C0.4%2C5.4%2C0%2C6.2%2C0%2C7v9.4c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l5.5-3.2l3.8-2.2l5.5-3.2c0.7-0.4%2C1.6-0.4%2C2.4%2C0l4.3%2C2.5c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v5c0%2C0.8-0.4%2C1.6-1.2%2C2.1%20%20L29%2C28.8c-0.7%2C0.4-1.6%2C0.4-2.4%2C0l-4.3-2.5c-0.7-0.4-1.2-1.2-1.2-2.1V21l-3.8%2C2.2v3.3c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l8.1-4.7c0.7-0.4%2C1.2-1.2%2C1.2-2.1V17c0-0.8-0.4-1.6-1.2-2.1L29%2C10.2z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"; +function parsedQueryString(search) { + if (!search) { + // react-router-dom places search string in the hash + var hash = window.location.hash; + search = hash.substr(hash.indexOf('?')); + } + return search && search.length > 1 ? qs.parse(search, { parseArrays: false, ignoreQueryPrefix: true }) : {}; +} +function useParsedQueryString() { + var search = reactRouterDom.useLocation().search; + return React.useMemo(function () { return parsedQueryString(search); }, [search]); +} + +function ApeModeQueryParamReader() { + useApeModeQueryParamReader(); + return null; +} +function useApeModeQueryParamReader() { + var dispatch = useAppDispatch(); + var ape = useParsedQueryString().ape; + React.useEffect(function () { + if (typeof ape !== 'string') + return; + if (ape === '' || ape.toLowerCase() === 'true') { + dispatch(updateUserExpertMode({ userExpertMode: true })); + } + }); +} + +var NetworkContextName = 'NETWORK'; +var IS_IN_IFRAME = window.parent !== window; +// 30 minutes, denominated in seconds +var DEFAULT_DEADLINE_FROM_NOW = 60 * 30; +var L2_DEADLINE_FROM_NOW = 60 * 5; +// transaction popup dismisal amounts +var DEFAULT_TXN_DISMISS_MS = 25000; +var L2_TXN_DISMISS_MS = 5000; +// used for rewards deadlines +JSBI__default["default"].BigInt(60 * 60 * 24 * 7); +JSBI__default["default"].BigInt(0); +// one basis JSBI.BigInt +var BIPS_BASE = JSBI__default["default"].BigInt(10000); +new sdkCore.Percent(JSBI__default["default"].BigInt(1), BIPS_BASE); +// used for warning states +var ALLOWED_PRICE_IMPACT_LOW = new sdkCore.Percent(JSBI__default["default"].BigInt(100), BIPS_BASE); // 1% +var ALLOWED_PRICE_IMPACT_MEDIUM = new sdkCore.Percent(JSBI__default["default"].BigInt(300), BIPS_BASE); // 3% +var ALLOWED_PRICE_IMPACT_HIGH = new sdkCore.Percent(JSBI__default["default"].BigInt(500), BIPS_BASE); // 5% +// if the price slippage exceeds this number, force the user to type 'confirm' to execute +var PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN = new sdkCore.Percent(JSBI__default["default"].BigInt(1000), BIPS_BASE); // 10% +// for non expert mode disable swaps above this +var BLOCKED_PRICE_IMPACT_NON_EXPERT = new sdkCore.Percent(JSBI__default["default"].BigInt(1500), BIPS_BASE); // 15% +var BETTER_TRADE_LESS_HOPS_THRESHOLD = new sdkCore.Percent(JSBI__default["default"].BigInt(50), BIPS_BASE); +var ZERO_PERCENT = new sdkCore.Percent('0'); +new sdkCore.Percent(JSBI__default["default"].BigInt(200), BIPS_BASE); +var ONE_HUNDRED_PERCENT = new sdkCore.Percent('1'); + +function useActiveWeb3React() { + // if (false) { + // return useWidgetsWeb3React() + // } + var interfaceContext = core.useWeb3React(); + var interfaceNetworkContext = core.useWeb3React(NetworkContextName); + if (interfaceContext.active) { + return interfaceContext; + } + return interfaceNetworkContext; +} + +var Circle$1 = "data:image/svg+xml,%3Csvg%20width%3D%2294%22%20height%3D%2294%22%20viewBox%3D%220%200%2094%2094%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%20%20%3Cpath%20d%3D%22M92%2047C92%2022.1472%2071.8528%202%2047%202C22.1472%202%202%2022.1472%202%2047C2%2071.8528%2022.1472%2092%2047%2092%22%20stroke%3D%22%232172E5%22%20stroke-width%3D%223%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E"; + +var tokenLogo = "data:image/png;base64,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"; + +// returns the checksummed address if the address is valid, otherwise returns false +function isAddress(value) { + try { + return address.getAddress(value); + } + catch (_a) { + return false; + } +} +// shorten the checksummed version of the input address to have 0x + 4 characters at start and end +function shortenAddress(address, chars) { + if (chars === void 0) { chars = 4; } + var parsed = isAddress(address); + if (!parsed) { + throw Error("Invalid 'address' parameter '" + address + "'."); + } + return parsed.substring(0, chars + 2) + "..." + parsed.substring(42 - chars); +} +// account is not optional +function getSigner(library, account) { + return library.getSigner(account).connectUnchecked(); +} +// account is optional +function getProviderOrSigner(library, account) { + return account ? getSigner(library, account) : library; +} +// account is optional +function getContract(address, ABI, library, account) { + if (!isAddress(address) || address === constants.AddressZero) { + throw Error("Invalid 'address' parameter '" + address + "'."); + } + return new contracts.Contract(address, ABI, getProviderOrSigner(library, account)); +} +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} +function isTokenOnList(chainTokenMap, token) { + var _a; + return Boolean((token === null || token === void 0 ? void 0 : token.isToken) && ((_a = chainTokenMap[token.chainId]) === null || _a === void 0 ? void 0 : _a[token.address])); +} -var _a$h; /** - * List of all the networks supported by the Uniswap Interface + * Debounces updates to a value. + * Non-primitives *must* wrap the value in useMemo, or the value will be updated due to referential inequality. */ -var SupportedChainId; -(function (SupportedChainId) { - SupportedChainId[SupportedChainId["MAINNET"] = 1] = "MAINNET"; - SupportedChainId[SupportedChainId["ROPSTEN"] = 3] = "ROPSTEN"; - SupportedChainId[SupportedChainId["RINKEBY"] = 4] = "RINKEBY"; - SupportedChainId[SupportedChainId["GOERLI"] = 5] = "GOERLI"; - SupportedChainId[SupportedChainId["KOVAN"] = 42] = "KOVAN"; - SupportedChainId[SupportedChainId["ARBITRUM_ONE"] = 42161] = "ARBITRUM_ONE"; - SupportedChainId[SupportedChainId["ARBITRUM_RINKEBY"] = 421611] = "ARBITRUM_RINKEBY"; - SupportedChainId[SupportedChainId["OPTIMISM"] = 10] = "OPTIMISM"; - SupportedChainId[SupportedChainId["OPTIMISTIC_KOVAN"] = 69] = "OPTIMISTIC_KOVAN"; - SupportedChainId[SupportedChainId["POLYGON"] = 137] = "POLYGON"; - SupportedChainId[SupportedChainId["POLYGON_MUMBAI"] = 80001] = "POLYGON_MUMBAI"; -})(SupportedChainId || (SupportedChainId = {})); -(_a$h = {}, - _a$h[SupportedChainId.MAINNET] = 'mainnet', - _a$h[SupportedChainId.ROPSTEN] = 'ropsten', - _a$h[SupportedChainId.RINKEBY] = 'rinkeby', - _a$h[SupportedChainId.GOERLI] = 'goerli', - _a$h[SupportedChainId.KOVAN] = 'kovan', - _a$h[SupportedChainId.POLYGON] = 'polygon', - _a$h[SupportedChainId.POLYGON_MUMBAI] = 'polygon_mumbai', - _a$h[SupportedChainId.ARBITRUM_ONE] = 'arbitrum', - _a$h[SupportedChainId.ARBITRUM_RINKEBY] = 'arbitrum_rinkeby', - _a$h[SupportedChainId.OPTIMISM] = 'optimism', - _a$h[SupportedChainId.OPTIMISTIC_KOVAN] = 'optimistic_kovan', - _a$h); -/** - * Array of all the supported chain IDs - */ -var ALL_SUPPORTED_CHAIN_IDS = Object.values(SupportedChainId).filter(function (id) { return typeof id === 'number'; }); -var SUPPORTED_GAS_ESTIMATE_CHAIN_IDS = [SupportedChainId.MAINNET, SupportedChainId.POLYGON]; -/** - * All the chain IDs that are running the Ethereum protocol. - */ -[ - SupportedChainId.MAINNET, - SupportedChainId.ROPSTEN, - SupportedChainId.RINKEBY, - SupportedChainId.GOERLI, - SupportedChainId.KOVAN, - SupportedChainId.POLYGON, - SupportedChainId.POLYGON_MUMBAI, -]; -/** - * Controls some L2 specific behavior, e.g. slippage tolerance, special UI behavior. - * The expectation is that all of these networks have immediate transaction confirmation. - */ -var L2_CHAIN_IDS = [ - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, -]; - -var UNI_LIST = 'https://tokens.uniswap.org'; -var AAVE_LIST = 'tokenlist.aave.eth'; -var BA_LIST = 'https://raw.githubusercontent.com/The-Blockchain-Association/sec-notice-list/master/ba-sec-list.json'; -var CMC_ALL_LIST = 'https://api.coinmarketcap.com/data-api/v3/uniswap/all.json'; -var COINGECKO_LIST = 'https://tokens.coingecko.com/uniswap/all.json'; -var COMPOUND_LIST = 'https://raw.githubusercontent.com/compound-finance/token-list/master/compound.tokenlist.json'; -var GEMINI_LIST = 'https://www.gemini.com/uniswap/manifest.json'; -var ARBITRUM_LIST = 'https://bridge.arbitrum.io/token-list-42161.json'; -var KLEROS_LIST = 't2crtokens.eth'; -var OPTIMISM_LIST = 'https://static.optimism.io/optimism.tokenlist.json'; -var ROLL_LIST = 'https://app.tryroll.com/tokens.json'; -var SET_LIST = 'https://raw.githubusercontent.com/SetProtocol/uniswap-tokenlist/main/set.tokenlist.json'; -var WRAPPED_LIST = 'wrapped.tokensoft.eth'; -var UNSUPPORTED_LIST_URLS = [BA_LIST]; -// this is the default list of lists that are exposed to users -// lower index == higher priority for token import -var DEFAULT_LIST_OF_LISTS_TO_DISPLAY = [ - UNI_LIST, - COMPOUND_LIST, - AAVE_LIST, - CMC_ALL_LIST, - COINGECKO_LIST, - KLEROS_LIST, - GEMINI_LIST, - WRAPPED_LIST, - SET_LIST, - ROLL_LIST, - ARBITRUM_LIST, - OPTIMISM_LIST, -]; -var DEFAULT_LIST_OF_LISTS = __spreadArray(__spreadArray([], __read(DEFAULT_LIST_OF_LISTS_TO_DISPLAY), false), __read(UNSUPPORTED_LIST_URLS), false); -// default lists to be 'active' aka searched across -var DEFAULT_ACTIVE_LIST_URLS = [UNI_LIST, GEMINI_LIST]; +// modified from https://usehooks.com/useDebounce/ +function useDebounce(value, delay) { + var _a = __read(React.useState(value), 2), debouncedValue = _a[0], setDebouncedValue = _a[1]; + React.useEffect(function () { + // Update debounced value after delay + var handler = setTimeout(function () { + setDebouncedValue(value); + }, delay); + // Cancel the timeout if value changes (also on delay change or unmount) + // This is how we prevent debounced value from updating if value is changed ... + // .. within the delay period. Timeout gets cleared and restarted. + return function () { + clearTimeout(handler); + }; + }, [value, delay]); + return debouncedValue; +} -var _a$g, _b$6; -var INFURA_KEY = process.env.REACT_APP_INFURA_KEY; -if (typeof INFURA_KEY === 'undefined') { - throw new Error("REACT_APP_INFURA_KEY must be a defined environment variable"); +var VISIBILITY_STATE_SUPPORTED = 'visibilityState' in document; +function isWindowVisible() { + return !VISIBILITY_STATE_SUPPORTED || document.visibilityState !== 'hidden'; } /** - * These are the network URLs used by the interface when there is not another available source of chain data + * Returns whether the window is currently visible to the user. */ -var INFURA_NETWORK_URLS = (_a$g = {}, - _a$g[SupportedChainId.MAINNET] = "https://mainnet.infura.io/v3/" + INFURA_KEY, - _a$g[SupportedChainId.RINKEBY] = "https://rinkeby.infura.io/v3/" + INFURA_KEY, - _a$g[SupportedChainId.ROPSTEN] = "https://ropsten.infura.io/v3/" + INFURA_KEY, - _a$g[SupportedChainId.GOERLI] = "https://goerli.infura.io/v3/" + INFURA_KEY, - _a$g[SupportedChainId.KOVAN] = "https://kovan.infura.io/v3/" + INFURA_KEY, - _a$g[SupportedChainId.OPTIMISM] = "https://optimism-mainnet.infura.io/v3/" + INFURA_KEY, - _a$g[SupportedChainId.OPTIMISTIC_KOVAN] = "https://optimism-kovan.infura.io/v3/" + INFURA_KEY, - _a$g[SupportedChainId.ARBITRUM_ONE] = "https://arbitrum-mainnet.infura.io/v3/" + INFURA_KEY, - _a$g[SupportedChainId.ARBITRUM_RINKEBY] = "https://arbitrum-rinkeby.infura.io/v3/" + INFURA_KEY, - _a$g[SupportedChainId.POLYGON] = "https://polygon-mainnet.infura.io/v3/" + INFURA_KEY, - _a$g[SupportedChainId.POLYGON_MUMBAI] = "https://polygon-mumbai.infura.io/v3/" + INFURA_KEY, - _a$g); -var NetworkType; -(function (NetworkType) { - NetworkType[NetworkType["L1"] = 0] = "L1"; - NetworkType[NetworkType["L2"] = 1] = "L2"; -})(NetworkType || (NetworkType = {})); -var CHAIN_INFO = (_b$6 = {}, - _b$6[SupportedChainId.MAINNET] = { - networkType: NetworkType.L1, - docs: 'https://docs.uniswap.org/', - explorer: 'https://etherscan.io/', - infoLink: 'https://info.uniswap.org/#/', - label: 'Ethereum', - logoUrl: EthereumLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, - rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.MAINNET], - }, - }, - _b$6[SupportedChainId.RINKEBY] = { - networkType: NetworkType.L1, - docs: 'https://docs.uniswap.org/', - explorer: 'https://rinkeby.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/', - label: 'Rinkeby', - logoUrl: EthereumLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Rinkeby Ether', symbol: 'rETH', decimals: 18 }, - rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.RINKEBY], - }, - }, - _b$6[SupportedChainId.ROPSTEN] = { - networkType: NetworkType.L1, - docs: 'https://docs.uniswap.org/', - explorer: 'https://ropsten.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/', - label: 'Ropsten', - logoUrl: EthereumLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Ropsten Ether', symbol: 'ropETH', decimals: 18 }, - rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.ROPSTEN], - }, - }, - _b$6[SupportedChainId.KOVAN] = { - networkType: NetworkType.L1, - docs: 'https://docs.uniswap.org/', - explorer: 'https://kovan.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/', - label: 'Kovan', - logoUrl: EthereumLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Kovan Ether', symbol: 'kovETH', decimals: 18 }, - rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.KOVAN], - }, - }, - _b$6[SupportedChainId.GOERLI] = { - networkType: NetworkType.L1, - docs: 'https://docs.uniswap.org/', - explorer: 'https://goerli.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/', - label: 'Görli', - logoUrl: EthereumLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Görli Ether', symbol: 'görETH', decimals: 18 }, - rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.GOERLI], - }, - }, - _b$6[SupportedChainId.OPTIMISM] = { - networkType: NetworkType.L2, - blockWaitMsBeforeWarning: ms__default["default"](templateObject_1$Y || (templateObject_1$Y = __makeTemplateObject(["25m"], ["25m"]))), - bridge: 'https://gateway.optimism.io/?chainId=1', - defaultListUrl: OPTIMISM_LIST, - docs: 'https://optimism.io/', - explorer: 'https://optimistic.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/optimism/', - label: 'Optimism', - logoUrl: optimismLogoUrl, - statusPage: 'https://optimism.io/status', - helpCenterUrl: 'https://help.uniswap.org/en/collections/3137778-uniswap-on-optimistic-ethereum-oξ', - addNetworkInfo: { - nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, - rpcUrl: 'https://mainnet.optimism.io', - }, - }, - _b$6[SupportedChainId.OPTIMISTIC_KOVAN] = { - networkType: NetworkType.L2, - blockWaitMsBeforeWarning: ms__default["default"](templateObject_2$F || (templateObject_2$F = __makeTemplateObject(["25m"], ["25m"]))), - bridge: 'https://gateway.optimism.io/', - defaultListUrl: OPTIMISM_LIST, - docs: 'https://optimism.io/', - explorer: 'https://optimistic.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/optimism/', - label: 'Optimistic Kovan', - logoUrl: optimismLogoUrl, - statusPage: 'https://optimism.io/status', - helpCenterUrl: 'https://help.uniswap.org/en/collections/3137778-uniswap-on-optimistic-ethereum-oξ', - addNetworkInfo: { - nativeCurrency: { name: 'Optimistic Kovan Ether', symbol: 'kovOpETH', decimals: 18 }, - rpcUrl: 'https://kovan.optimism.io', - }, - }, - _b$6[SupportedChainId.ARBITRUM_ONE] = { - networkType: NetworkType.L2, - blockWaitMsBeforeWarning: ms__default["default"](templateObject_3$y || (templateObject_3$y = __makeTemplateObject(["10m"], ["10m"]))), - bridge: 'https://bridge.arbitrum.io/', - docs: 'https://offchainlabs.com/', - explorer: 'https://arbiscan.io/', - infoLink: 'https://info.uniswap.org/#/arbitrum', - label: 'Arbitrum', - logoUrl: arbitrumLogoUrl, - defaultListUrl: ARBITRUM_LIST, - helpCenterUrl: 'https://help.uniswap.org/en/collections/3137787-uniswap-on-arbitrum', - addNetworkInfo: { - nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, - rpcUrl: 'https://arb1.arbitrum.io/rpc', - }, - }, - _b$6[SupportedChainId.ARBITRUM_RINKEBY] = { - networkType: NetworkType.L2, - blockWaitMsBeforeWarning: ms__default["default"](templateObject_4$n || (templateObject_4$n = __makeTemplateObject(["10m"], ["10m"]))), - bridge: 'https://bridge.arbitrum.io/', - docs: 'https://offchainlabs.com/', - explorer: 'https://rinkeby-explorer.arbitrum.io/', - infoLink: 'https://info.uniswap.org/#/arbitrum/', - label: 'Arbitrum Rinkeby', - logoUrl: arbitrumLogoUrl, - defaultListUrl: ARBITRUM_LIST, - helpCenterUrl: 'https://help.uniswap.org/en/collections/3137787-uniswap-on-arbitrum', - addNetworkInfo: { - nativeCurrency: { name: 'Rinkeby Arbitrum Ether', symbol: 'rinkArbETH', decimals: 18 }, - rpcUrl: 'https://rinkeby.arbitrum.io/rpc', - }, - }, - _b$6[SupportedChainId.POLYGON] = { - networkType: NetworkType.L1, - blockWaitMsBeforeWarning: ms__default["default"](templateObject_5$k || (templateObject_5$k = __makeTemplateObject(["10m"], ["10m"]))), - bridge: 'https://wallet.polygon.technology/bridge', - docs: 'https://polygon.io/', - explorer: 'https://polygonscan.com/', - infoLink: 'https://info.uniswap.org/#/polygon/', - label: 'Polygon', - logoUrl: polygonMaticLogo, - addNetworkInfo: { - rpcUrl: 'https://polygon-rpc.com/', - nativeCurrency: { name: 'Polygon Matic', symbol: 'MATIC', decimals: 18 }, - }, - }, - _b$6[SupportedChainId.POLYGON_MUMBAI] = { - networkType: NetworkType.L1, - blockWaitMsBeforeWarning: ms__default["default"](templateObject_6$e || (templateObject_6$e = __makeTemplateObject(["10m"], ["10m"]))), - bridge: 'https://wallet.polygon.technology/bridge', - docs: 'https://polygon.io/', - explorer: 'https://mumbai.polygonscan.com/', - infoLink: 'https://info.uniswap.org/#/polygon/', - label: 'Polygon Mumbai', - logoUrl: polygonMaticLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Polygon Mumbai Matic', symbol: 'mMATIC', decimals: 18 }, - rpcUrl: 'https://rpc-endpoints.superfluid.dev/mumbai', - }, - }, - _b$6); -var templateObject_1$Y, templateObject_2$F, templateObject_3$y, templateObject_4$n, templateObject_5$k, templateObject_6$e; - -var NetworkContextName = 'NETWORK'; -// 30 minutes, denominated in seconds -var DEFAULT_DEADLINE_FROM_NOW = 60 * 30; -var L2_DEADLINE_FROM_NOW = 60 * 5; -// transaction popup dismisal amounts -var DEFAULT_TXN_DISMISS_MS = 25000; -var L2_TXN_DISMISS_MS = 5000; -// used for rewards deadlines -JSBI__default["default"].BigInt(60 * 60 * 24 * 7); -JSBI__default["default"].BigInt(0); -// one basis JSBI.BigInt -var BIPS_BASE = JSBI__default["default"].BigInt(10000); -new sdkCore.Percent(JSBI__default["default"].BigInt(1), BIPS_BASE); -// used for warning states -var ALLOWED_PRICE_IMPACT_LOW = new sdkCore.Percent(JSBI__default["default"].BigInt(100), BIPS_BASE); // 1% -var ALLOWED_PRICE_IMPACT_MEDIUM = new sdkCore.Percent(JSBI__default["default"].BigInt(300), BIPS_BASE); // 3% -var ALLOWED_PRICE_IMPACT_HIGH = new sdkCore.Percent(JSBI__default["default"].BigInt(500), BIPS_BASE); // 5% -// if the price slippage exceeds this number, force the user to type 'confirm' to execute -var PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN = new sdkCore.Percent(JSBI__default["default"].BigInt(1000), BIPS_BASE); // 10% -// for non expert mode disable swaps above this -var BLOCKED_PRICE_IMPACT_NON_EXPERT = new sdkCore.Percent(JSBI__default["default"].BigInt(1500), BIPS_BASE); // 15% -var BETTER_TRADE_LESS_HOPS_THRESHOLD = new sdkCore.Percent(JSBI__default["default"].BigInt(50), BIPS_BASE); -var ZERO_PERCENT = new sdkCore.Percent('0'); -new sdkCore.Percent(JSBI__default["default"].BigInt(200), BIPS_BASE); -var ONE_HUNDRED_PERCENT = new sdkCore.Percent('1'); - -function useActiveWeb3React() { - // if (false) { - // return useWidgetsWeb3React() - // } - var interfaceContext = core.useWeb3React(); - var interfaceNetworkContext = core.useWeb3React(NetworkContextName); - if (interfaceContext.active) { - return interfaceContext; - } - return interfaceNetworkContext; +function useIsWindowVisible() { + var _a = __read(React.useState(isWindowVisible()), 2), focused = _a[0], setFocused = _a[1]; + var listener = React.useCallback(function () { + setFocused(isWindowVisible()); + }, [setFocused]); + React.useEffect(function () { + if (!VISIBILITY_STATE_SUPPORTED) + return undefined; + document.addEventListener('visibilitychange', listener); + return function () { + document.removeEventListener('visibilitychange', listener); + }; + }, [listener]); + return focused; } -var useAppDispatch = function () { return reactRedux.useDispatch(); }; -var useAppSelector = reactRedux.useSelector; - -var DEFAULT_NETWORKS = [ - SupportedChainId.MAINNET, - SupportedChainId.ROPSTEN, - SupportedChainId.RINKEBY, - SupportedChainId.GOERLI, - SupportedChainId.KOVAN, -]; -function constructSameAddressMap(address, additionalNetworks) { - if (additionalNetworks === void 0) { additionalNetworks = []; } - return DEFAULT_NETWORKS.concat(additionalNetworks).reduce(function (memo, chainId) { - memo[chainId] = address; - return memo; - }, {}); +function useBlock() { + var _a = useActiveWeb3React(), chainId = _a.chainId, library = _a.library; + var windowVisible = useIsWindowVisible(); + var _b = __read(React.useState({ chainId: chainId }), 2), state = _b[0], setState = _b[1]; + var onBlock = React.useCallback(function (block) { + setState(function (state) { + if (state.chainId === chainId) { + if (typeof state.block !== 'number') + return { chainId: chainId, block: block }; + return { chainId: chainId, block: Math.max(block, state.block) }; + } + return state; + }); + }, [chainId]); + React.useEffect(function () { + if (library && chainId && windowVisible) { + setState({ chainId: chainId }); + library + .getBlockNumber() + .then(onBlock) + .catch(function (error) { + console.error("Failed to get block number for chainId " + chainId, error); + }); + library.on('block', onBlock); + return function () { + library.removeListener('block', onBlock); + }; + } + return undefined; + }, [chainId, library, onBlock, windowVisible]); + var debouncedBlock = useDebounce(state.block, 100); + return state.block ? debouncedBlock : undefined; +} +var blockAtom = jotai.atom(undefined); +function BlockUpdater() { + var setBlock = utils.useUpdateAtom(blockAtom); + var block = useBlock(); + React.useEffect(function () { + setBlock(block); + }, [block, setBlock]); + return null; +} +/** Requires that BlockUpdater be installed in the DOM tree. */ +function useBlockNumber() { + var chainId = useActiveWeb3React().chainId; + var block = utils.useAtomValue(blockAtom); + return chainId ? block : undefined; +} +function useFastForwardBlockNumber() { + return utils.useUpdateAtom(blockAtom); } -var _a$f, _b$5, _c$4, _d$3, _e$2, _f$1, _g$1, _h$1; -var UNI_ADDRESS = constructSameAddressMap('0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984'); -var MULTICALL_ADDRESS = __assign(__assign({}, constructSameAddressMap('0x1F98415757620B543A52E61c46B32eB19261F984', [ - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.OPTIMISM, - SupportedChainId.POLYGON_MUMBAI, - SupportedChainId.POLYGON, -])), (_a$f = {}, _a$f[SupportedChainId.ARBITRUM_ONE] = '0xadF885960B47eA2CD9B55E6DAc6B42b7Cb2806dB', _a$f[SupportedChainId.ARBITRUM_RINKEBY] = '0xa501c031958F579dB7676fF1CE78AD305794d579', _a$f)); -var V2_FACTORY_ADDRESSES = constructSameAddressMap(v2Sdk.FACTORY_ADDRESS); -var V2_ROUTER_ADDRESS = constructSameAddressMap('0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D'); -var V3_ROUTER_ADDRESS = constructSameAddressMap('0xE592427A0AEce92De3Edee1F18E0157C05861564', [ - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON, - SupportedChainId.POLYGON_MUMBAI, -]); -var SWAP_ROUTER_ADDRESSES = constructSameAddressMap('0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45', [ - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON, - SupportedChainId.POLYGON_MUMBAI, -]); -/** - * The oldest V0 governance address - */ -constructSameAddressMap('0x5e4be8Bc9637f0EAA1A755019e06A68ce081D58F'); -/** - * The older V1 governance address - */ -(_b$5 = {}, - _b$5[SupportedChainId.MAINNET] = '0xC4e172459f1E7939D522503B81AFAaC1014CE6F6', - _b$5); -/** - * The latest governor bravo that is currently admin of timelock - */ -(_c$4 = {}, - _c$4[SupportedChainId.MAINNET] = '0x408ED6354d4973f66138C91495F2f2FCbd8724C3', - _c$4); -constructSameAddressMap('0x1a9C8182C09F50C8318d769245beA52c32BE35BC'); -(_d$3 = {}, - _d$3[SupportedChainId.MAINNET] = '0x090D4613473dEE047c3f2706764f49E0821D256e', - _d$3); -var ARGENT_WALLET_DETECTOR_ADDRESS = (_e$2 = {}, - _e$2[SupportedChainId.MAINNET] = '0xeca4B0bDBf7c55E9b7925919d03CbF8Dc82537E8', - _e$2); -var V3_CORE_FACTORY_ADDRESSES = constructSameAddressMap(v3Sdk.FACTORY_ADDRESS, [ - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON_MUMBAI, - SupportedChainId.POLYGON, -]); -var QUOTER_ADDRESSES = constructSameAddressMap('0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6', [ - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON_MUMBAI, - SupportedChainId.POLYGON, -]); -constructSameAddressMap('0xC36442b4a4522E871399CD717aBDD847Ab11FE88', [ - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON_MUMBAI, - SupportedChainId.POLYGON, -]); -var ENS_REGISTRAR_ADDRESSES = (_f$1 = {}, - _f$1[SupportedChainId.MAINNET] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', - _f$1[SupportedChainId.ROPSTEN] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', - _f$1[SupportedChainId.GOERLI] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', - _f$1[SupportedChainId.RINKEBY] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', - _f$1); -(_g$1 = {}, - _g$1[SupportedChainId.MAINNET] = '0x65770b5283117639760beA3F867b69b3697a91dd', - _g$1); -constructSameAddressMap('0xA5644E29708357803b5A882D272c41cC0dF92B34', [ - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON_MUMBAI, - SupportedChainId.POLYGON, -]); -(_h$1 = {}, - _h$1[SupportedChainId.ARBITRUM_ONE] = '0xbfd8137f7d1516D3ea5cA83523914859ec47F573', - _h$1[SupportedChainId.ARBITRUM_RINKEBY] = '0xbfd8137f7d1516D3ea5cA83523914859ec47F573', - _h$1); - -var _a$e, _b$4; -var AMPL = new sdkCore.Token(SupportedChainId.MAINNET, '0xD46bA6D942050d489DBd938a2C909A5d5039A161', 9, 'AMPL', 'Ampleforth'); -var DAI = new sdkCore.Token(SupportedChainId.MAINNET, '0x6B175474E89094C44Da98b954EedeAC495271d0F', 18, 'DAI', 'Dai Stablecoin'); -var DAI_ARBITRUM_ONE = new sdkCore.Token(SupportedChainId.ARBITRUM_ONE, '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', 18, 'DAI', 'Dai stable coin'); -var DAI_OPTIMISM = new sdkCore.Token(SupportedChainId.OPTIMISM, '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', 18, 'DAI', 'Dai stable coin'); -var USDC = new sdkCore.Token(SupportedChainId.MAINNET, '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', 6, 'USDC', 'USD//C'); -var USDC_ARBITRUM = new sdkCore.Token(SupportedChainId.ARBITRUM_ONE, '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8', 6, 'USDC', 'USD//C'); -var USDC_POLYGON = new sdkCore.Token(SupportedChainId.POLYGON, '0x2791bca1f2de4661ed88a30c99a7a9449aa84174', 6, 'USDC', 'USD//C'); -var DAI_POLYGON = new sdkCore.Token(SupportedChainId.POLYGON, '0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063', 18, 'DAI', 'Dai Stablecoin'); -var USDT_POLYGON = new sdkCore.Token(SupportedChainId.POLYGON, '0xc2132d05d31c914a87c6611c10748aeb04b58e8f', 6, 'USDT', 'Tether USD'); -var WBTC_POLYGON = new sdkCore.Token(SupportedChainId.POLYGON, '0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6', 8, 'WBTC', 'Wrapped BTC'); -var USDC_OPTIMISM = new sdkCore.Token(SupportedChainId.OPTIMISM, '0x7F5c764cBc14f9669B88837ca1490cCa17c31607', 6, 'USDC', 'USD//C'); -var USDT = new sdkCore.Token(SupportedChainId.MAINNET, '0xdAC17F958D2ee523a2206206994597C13D831ec7', 6, 'USDT', 'Tether USD'); -var USDT_ARBITRUM_ONE = new sdkCore.Token(SupportedChainId.ARBITRUM_ONE, '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9', 6, 'USDT', 'Tether USD'); -var USDT_OPTIMISM = new sdkCore.Token(SupportedChainId.OPTIMISM, '0x94b008aA00579c1307B0EF2c499aD98a8ce58e58', 6, 'USDT', 'Tether USD'); -var WBTC = new sdkCore.Token(SupportedChainId.MAINNET, '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', 8, 'WBTC', 'Wrapped BTC'); -var WBTC_ARBITRUM_ONE = new sdkCore.Token(SupportedChainId.ARBITRUM_ONE, '0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f', 8, 'WBTC', 'Wrapped BTC'); -var WBTC_OPTIMISM = new sdkCore.Token(SupportedChainId.OPTIMISM, '0x68f180fcCe6836688e9084f035309E29Bf0A2095', 8, 'WBTC', 'Wrapped BTC'); -var FEI = new sdkCore.Token(SupportedChainId.MAINNET, '0x956F47F50A910163D8BF957Cf5846D573E7f87CA', 18, 'FEI', 'Fei USD'); -var TRIBE = new sdkCore.Token(SupportedChainId.MAINNET, '0xc7283b66Eb1EB5FB86327f08e1B5816b0720212B', 18, 'TRIBE', 'Tribe'); -var FRAX = new sdkCore.Token(SupportedChainId.MAINNET, '0x853d955aCEf822Db058eb8505911ED77F175b99e', 18, 'FRAX', 'Frax'); -var FXS = new sdkCore.Token(SupportedChainId.MAINNET, '0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0', 18, 'FXS', 'Frax Share'); -var renBTC = new sdkCore.Token(SupportedChainId.MAINNET, '0xEB4C2781e4ebA804CE9a9803C67d0893436bB27D', 8, 'renBTC', 'renBTC'); -var ETH2X_FLI = new sdkCore.Token(SupportedChainId.MAINNET, '0xAa6E8127831c9DE45ae56bB1b0d4D4Da6e5665BD', 18, 'ETH2x-FLI', 'ETH 2x Flexible Leverage Index'); -var sETH2 = new sdkCore.Token(SupportedChainId.MAINNET, '0xFe2e637202056d30016725477c5da089Ab0A043A', 18, 'sETH2', 'StakeWise Staked ETH2'); -var rETH2 = new sdkCore.Token(SupportedChainId.MAINNET, '0x20BC832ca081b91433ff6c17f85701B6e92486c5', 18, 'rETH2', 'StakeWise Reward ETH2'); -var SWISE = new sdkCore.Token(SupportedChainId.MAINNET, '0x48C3399719B582dD63eB5AADf12A40B4C3f52FA2', 18, 'SWISE', 'StakeWise'); -var WETH_POLYGON_MUMBAI = new sdkCore.Token(SupportedChainId.POLYGON_MUMBAI, '0xa6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa', 18, 'WETH', 'Wrapped Ether'); -var WETH_POLYGON = new sdkCore.Token(SupportedChainId.POLYGON, '0x7ceb23fd6bc0add59e62ac25578270cff1b9f619', 18, 'WETH', 'Wrapped Ether'); -var UNI = (_a$e = {}, - _a$e[SupportedChainId.MAINNET] = new sdkCore.Token(SupportedChainId.MAINNET, UNI_ADDRESS[1], 18, 'UNI', 'Uniswap'), - _a$e[SupportedChainId.RINKEBY] = new sdkCore.Token(SupportedChainId.RINKEBY, UNI_ADDRESS[4], 18, 'UNI', 'Uniswap'), - _a$e[SupportedChainId.ROPSTEN] = new sdkCore.Token(SupportedChainId.ROPSTEN, UNI_ADDRESS[3], 18, 'UNI', 'Uniswap'), - _a$e[SupportedChainId.GOERLI] = new sdkCore.Token(SupportedChainId.GOERLI, UNI_ADDRESS[5], 18, 'UNI', 'Uniswap'), - _a$e[SupportedChainId.KOVAN] = new sdkCore.Token(SupportedChainId.KOVAN, UNI_ADDRESS[42], 18, 'UNI', 'Uniswap'), - _a$e); -var WRAPPED_NATIVE_CURRENCY = __assign(__assign({}, sdkCore.WETH9), (_b$4 = {}, _b$4[SupportedChainId.OPTIMISM] = new sdkCore.Token(SupportedChainId.OPTIMISM, '0x4200000000000000000000000000000000000006', 18, 'WETH', 'Wrapped Ether'), _b$4[SupportedChainId.OPTIMISTIC_KOVAN] = new sdkCore.Token(SupportedChainId.OPTIMISTIC_KOVAN, '0x4200000000000000000000000000000000000006', 18, 'WETH', 'Wrapped Ether'), _b$4[SupportedChainId.ARBITRUM_ONE] = new sdkCore.Token(SupportedChainId.ARBITRUM_ONE, '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1', 18, 'WETH', 'Wrapped Ether'), _b$4[SupportedChainId.ARBITRUM_RINKEBY] = new sdkCore.Token(SupportedChainId.ARBITRUM_RINKEBY, '0xB47e6A5f8b33b3F17603C83a0535A9dcD7E32681', 18, 'WETH', 'Wrapped Ether'), _b$4[SupportedChainId.POLYGON] = new sdkCore.Token(SupportedChainId.POLYGON, '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270', 18, 'WMATIC', 'Wrapped MATIC'), _b$4[SupportedChainId.POLYGON_MUMBAI] = new sdkCore.Token(SupportedChainId.POLYGON_MUMBAI, '0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889', 18, 'WMATIC', 'Wrapped MATIC'), _b$4)); -function isMatic(chainId) { - return chainId === SupportedChainId.POLYGON_MUMBAI || chainId === SupportedChainId.POLYGON; -} -var MaticNativeCurrency = /** @class */ (function (_super) { - __extends(MaticNativeCurrency, _super); - function MaticNativeCurrency(chainId) { - var _this = this; - if (!isMatic(chainId)) - throw new Error('Not matic'); - _this = _super.call(this, chainId, 18, 'MATIC', 'Polygon Matic') || this; - return _this; - } - MaticNativeCurrency.prototype.equals = function (other) { - return other.isNative && other.chainId === this.chainId; - }; - Object.defineProperty(MaticNativeCurrency.prototype, "wrapped", { - get: function () { - if (!isMatic(this.chainId)) - throw new Error('Not matic'); - return WRAPPED_NATIVE_CURRENCY[this.chainId]; - }, - enumerable: false, - configurable: true - }); - return MaticNativeCurrency; -}(sdkCore.NativeCurrency)); -var ExtendedEther = /** @class */ (function (_super) { - __extends(ExtendedEther, _super); - function ExtendedEther() { - return _super !== null && _super.apply(this, arguments) || this; - } - Object.defineProperty(ExtendedEther.prototype, "wrapped", { - get: function () { - if (this.chainId in WRAPPED_NATIVE_CURRENCY) - return WRAPPED_NATIVE_CURRENCY[this.chainId]; - throw new Error('Unsupported chain ID'); - }, - enumerable: false, - configurable: true - }); - ExtendedEther.onChain = function (chainId) { - var _a; - return (_a = this._cachedExtendedEther[chainId]) !== null && _a !== void 0 ? _a : (this._cachedExtendedEther[chainId] = new ExtendedEther(chainId)); - }; - ExtendedEther._cachedExtendedEther = {}; - return ExtendedEther; -}(sdkCore.Ether)); -var cachedNativeCurrency = {}; -function nativeOnChain(chainId) { - var _a; - return ((_a = cachedNativeCurrency[chainId]) !== null && _a !== void 0 ? _a : (cachedNativeCurrency[chainId] = isMatic(chainId) - ? new MaticNativeCurrency(chainId) - : ExtendedEther.onChain(chainId))); -} - -var _a$d, _b$3, _c$3, _d$2, _e$1, _f, _g, _h; -var WRAPPED_NATIVE_CURRENCIES_ONLY = Object.fromEntries(Object.entries(WRAPPED_NATIVE_CURRENCY).map(function (_a) { - var _b = __read(_a, 2), key = _b[0], value = _b[1]; - return [key, [value]]; -})); -// used to construct intermediary pairs for trading -var BASES_TO_CHECK_TRADES_AGAINST = __assign(__assign({}, WRAPPED_NATIVE_CURRENCIES_ONLY), (_a$d = {}, _a$d[SupportedChainId.MAINNET] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.MAINNET]), false), [DAI, USDC, USDT, WBTC], false), _a$d[SupportedChainId.OPTIMISM] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.OPTIMISM]), false), [ - DAI_OPTIMISM, - USDT_OPTIMISM, - WBTC_OPTIMISM, -], false), _a$d[SupportedChainId.ARBITRUM_ONE] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.ARBITRUM_ONE]), false), [ - DAI_ARBITRUM_ONE, - USDT_ARBITRUM_ONE, - WBTC_ARBITRUM_ONE, -], false), _a$d[SupportedChainId.POLYGON] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.POLYGON]), false), [ - DAI_POLYGON, - USDC_POLYGON, - USDT_POLYGON, - WETH_POLYGON, -], false), _a$d)); -var ADDITIONAL_BASES = (_b$3 = {}, - _b$3[SupportedChainId.MAINNET] = (_c$3 = { - '0xF16E4d813f4DcfDe4c5b44f305c908742De84eF0': [ETH2X_FLI] - }, - _c$3[rETH2.address] = [sETH2], - _c$3[SWISE.address] = [sETH2], - _c$3[FEI.address] = [TRIBE], - _c$3[TRIBE.address] = [FEI], - _c$3[FRAX.address] = [FXS], - _c$3[FXS.address] = [FRAX], - _c$3[WBTC.address] = [renBTC], - _c$3[renBTC.address] = [WBTC], - _c$3), - _b$3); -/** - * Some tokens can only be swapped via certain pairs, so we override the list of bases that are considered for these - * tokens. - */ -var CUSTOM_BASES = (_d$2 = {}, - _d$2[SupportedChainId.MAINNET] = (_e$1 = {}, - _e$1[AMPL.address] = [DAI, WRAPPED_NATIVE_CURRENCY[SupportedChainId.MAINNET]], - _e$1), - _d$2); -/** - * Shows up in the currency select for swap and add liquidity - */ -var COMMON_BASES = (_f = {}, - _f[SupportedChainId.MAINNET] = [ - nativeOnChain(SupportedChainId.MAINNET), - DAI, - USDC, - USDT, - WBTC, - WRAPPED_NATIVE_CURRENCY[SupportedChainId.MAINNET], - ], - _f[SupportedChainId.ROPSTEN] = [ - nativeOnChain(SupportedChainId.ROPSTEN), - WRAPPED_NATIVE_CURRENCY[SupportedChainId.ROPSTEN], - ], - _f[SupportedChainId.RINKEBY] = [ - nativeOnChain(SupportedChainId.RINKEBY), - WRAPPED_NATIVE_CURRENCY[SupportedChainId.RINKEBY], - ], - _f[SupportedChainId.GOERLI] = [nativeOnChain(SupportedChainId.GOERLI), WRAPPED_NATIVE_CURRENCY[SupportedChainId.GOERLI]], - _f[SupportedChainId.KOVAN] = [nativeOnChain(SupportedChainId.KOVAN), WRAPPED_NATIVE_CURRENCY[SupportedChainId.KOVAN]], - _f[SupportedChainId.ARBITRUM_ONE] = [ - nativeOnChain(SupportedChainId.ARBITRUM_ONE), - DAI_ARBITRUM_ONE, - USDC_ARBITRUM, - USDT_ARBITRUM_ONE, - WBTC_ARBITRUM_ONE, - WRAPPED_NATIVE_CURRENCY[SupportedChainId.ARBITRUM_ONE], - ], - _f[SupportedChainId.ARBITRUM_RINKEBY] = [ - nativeOnChain(SupportedChainId.ARBITRUM_RINKEBY), - WRAPPED_NATIVE_CURRENCY[SupportedChainId.ARBITRUM_RINKEBY], - ], - _f[SupportedChainId.OPTIMISM] = [ - nativeOnChain(SupportedChainId.OPTIMISM), - DAI_OPTIMISM, - USDC_OPTIMISM, - USDT_OPTIMISM, - WBTC_OPTIMISM, - ], - _f[SupportedChainId.OPTIMISTIC_KOVAN] = [nativeOnChain(SupportedChainId.OPTIMISTIC_KOVAN)], - _f[SupportedChainId.POLYGON] = [ - nativeOnChain(SupportedChainId.POLYGON), - WETH_POLYGON, - USDC_POLYGON, - DAI_POLYGON, - USDT_POLYGON, - WBTC_POLYGON, - ], - _f[SupportedChainId.POLYGON_MUMBAI] = [ - nativeOnChain(SupportedChainId.POLYGON_MUMBAI), - WRAPPED_NATIVE_CURRENCY[SupportedChainId.POLYGON_MUMBAI], - WETH_POLYGON_MUMBAI, - ], - _f); -// used to construct the list of all pairs we consider by default in the frontend -__assign(__assign({}, WRAPPED_NATIVE_CURRENCIES_ONLY), (_g = {}, _g[SupportedChainId.MAINNET] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.MAINNET]), false), [DAI, USDC, USDT, WBTC], false), _g)); -(_h = {}, - _h[SupportedChainId.MAINNET] = [ - [ - new sdkCore.Token(SupportedChainId.MAINNET, '0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643', 8, 'cDAI', 'Compound Dai'), - new sdkCore.Token(SupportedChainId.MAINNET, '0x39AA39c021dfbaE8faC545936693aC917d5E7563', 8, 'cUSDC', 'Compound USD Coin'), - ], - [USDC, USDT], - [DAI, USDT], - ], - _h); -======= - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { - _.label = op[1] - break - } - if (op[0] === 6 && _.label < t[1]) { - _.label = t[1] - t = op - break - } - if (t && _.label < t[2]) { - _.label = t[2] - _.ops.push(op) - break - } - if (t[2]) _.ops.pop() - _.trys.pop() - continue - } - op = body.call(thisArg, _) - } catch (e) { - op = [6, e] - y = 0 - } finally { - f = t = 0 - } - if (op[0] & 5) throw op[1] - return { value: op[0] ? op[1] : void 0, done: true } - } -} - -function __values(o) { - var s = typeof Symbol === 'function' && Symbol.iterator, - m = s && o[s], - i = 0 - if (m) return m.call(o) - if (o && typeof o.length === 'number') - return { - next() { - if (o && i >= o.length) o = void 0 - return { value: o && o[i++], done: !o } - }, - } - throw new TypeError(s ? 'Object is not iterable.' : 'Symbol.iterator is not defined.') -} - -function __read(o, n) { - var m = typeof Symbol === 'function' && o[Symbol.iterator] - if (!m) return o - var i = m.call(o), - r, - ar = [], - e - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value) - } catch (error) { - e = { error } - } finally { - try { - if (r && !r.done && (m = i['return'])) m.call(i) - } finally { - if (e) throw e.error - } - } - return ar -} - -function __spreadArray(to, from, pack) { - if (pack || arguments.length === 2) - for (var i = 0, l = from.length, ar; i < l; i++) { - if (ar || !(i in from)) { - if (!ar) ar = Array.prototype.slice.call(from, 0, i) - ar[i] = from[i] - } - } - return to.concat(ar || Array.prototype.slice.call(from)) -} - -function __makeTemplateObject(cooked, raw) { - if (Object.defineProperty) { - Object.defineProperty(cooked, 'raw', { value: raw }) - } else { - cooked.raw = raw - } - return cooked -} - -var EthereumLogo = - 'data:image/png;base64,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' - -var arbitrumLogoUrl = - 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20viewBox%3D%220%200%20470.287%20514.251%22%20enable-background%3D%22new%200%200%20470.287%20514.251%22%20xml%3Aspace%3D%22preserve%22%3E%3Cg%20id%3D%22Background%22%3E%3C%2Fg%3E%3Cg%20id%3D%22Logos_and_symbols%22%3E%20%3Cg%20id%3D%22SYMBOL_VER_3%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_4_3_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_1_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_1_%22%3E%20%20%3Cg%20id%3D%22_x31_-3%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_14_%22%3E%20%20%20%3Cpath%20fill%3D%22%232D374B%22%20d%3D%22M291.134%2C237.469l35.654-60.5l96.103%2C149.684l0.046%2C28.727l-0.313-197.672%20%20%20%20c-0.228-4.832-2.794-9.252-6.887-11.859L242.715%2C46.324c-4.045-1.99-9.18-1.967-13.22%2C0.063c-0.546%2C0.272-1.06%2C0.57-1.548%2C0.895%20%20%20%20l-0.604%2C0.379L59.399%2C144.983l-0.651%2C0.296c-0.838%2C0.385-1.686%2C0.875-2.48%2C1.444c-3.185%2C2.283-5.299%2C5.66-5.983%2C9.448%20%20%20%20c-0.103%2C0.574-0.179%2C1.158-0.214%2C1.749l0.264%2C161.083l89.515-138.745c11.271-18.397%2C35.825-24.323%2C58.62-24.001l26.753%2C0.706%20%20%20%20L67.588%2C409.765l18.582%2C10.697L245.692%2C157.22l70.51-0.256L157.091%2C426.849l66.306%2C38.138l7.922%2C4.556%20%20%20%20c3.351%2C1.362%2C7.302%2C1.431%2C10.681%2C0.21l175.453-101.678l-33.544%2C19.438L291.134%2C237.469z%20M304.736%2C433.395l-66.969-105.108%20%20%20%20l40.881-69.371l87.952%2C138.628L304.736%2C433.395z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%2328A0F0%22%20points%3D%22237.768%2C328.286%20304.736%2C433.395%20366.601%2C397.543%20278.648%2C258.915%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2328A0F0%22%20d%3D%22M422.937%2C355.379l-0.046-28.727l-96.103-149.684l-35.654%2C60.5l92.774%2C150.043l33.544-19.438%20%20%20%20c3.29-2.673%2C5.281-6.594%2C5.49-10.825L422.937%2C355.379z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23FFFFFF%22%20d%3D%22M20.219%2C382.469l47.369%2C27.296l157.634-252.801l-26.753-0.706c-22.795-0.322-47.35%2C5.604-58.62%2C24.001%20%20%20%20L50.334%2C319.004l-30.115%2C46.271V382.469z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%23FFFFFF%22%20points%3D%22316.202%2C156.964%20245.692%2C157.22%2086.17%2C420.462%20141.928%2C452.565%20157.091%2C426.849%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2396BEDC%22%20d%3D%22M452.65%2C156.601c-0.59-14.746-8.574-28.245-21.08-36.104L256.28%2C19.692%20%20%20%20c-12.371-6.229-27.825-6.237-40.218-0.004c-1.465%2C0.739-170.465%2C98.752-170.465%2C98.752c-2.339%2C1.122-4.592%2C2.458-6.711%2C3.975%20%20%20%20c-11.164%2C8.001-17.969%2C20.435-18.668%2C34.095v208.765l30.115-46.271L50.07%2C157.921c0.035-0.589%2C0.109-1.169%2C0.214-1.741%20%20%20%20c0.681-3.79%2C2.797-7.171%2C5.983-9.456c0.795-0.569%2C172.682-100.064%2C173.228-100.337c4.04-2.029%2C9.175-2.053%2C13.22-0.063%20%20%20%20l173.022%2C99.523c4.093%2C2.607%2C6.659%2C7.027%2C6.887%2C11.859v199.542c-0.209%2C4.231-1.882%2C8.152-5.172%2C10.825l-33.544%2C19.438%20%20%20%20l-17.308%2C10.031l-61.864%2C35.852l-62.737%2C36.357c-3.379%2C1.221-7.33%2C1.152-10.681-0.21l-74.228-42.693l-15.163%2C25.717%20%20%20%20l66.706%2C38.406c2.206%2C1.255%2C4.171%2C2.367%2C5.784%2C3.272c2.497%2C1.4%2C4.199%2C2.337%2C4.8%2C2.629c4.741%2C2.303%2C11.563%2C3.643%2C17.71%2C3.643%20%20%20%20c5.636%2C0%2C11.132-1.035%2C16.332-3.072l182.225-105.531c10.459-8.104%2C16.612-20.325%2C17.166-33.564V156.601z%22%2F%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_13_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_6_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_3_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_15_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_3_%22%3E%20%20%20%3Cg%20id%3D%22_x33__7_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic%22%3E%20%20%20%3Cg%20id%3D%22_x33__3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_10_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x34__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_2_%22%3E%20%20%20%3Cg%20id%3D%22_x33__6_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_2_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_11_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_5_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_12_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_1_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_9_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_2_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol_1_%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_1_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_7_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_8_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Monochromatic_1_%22%3E%20%20%3Cg%20id%3D%22_x33__4_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E' - -var optimismLogoUrl = - 'data:image/svg+xml,%3Csvg%20width%3D%22170%22%20height%3D%22168%22%20viewBox%3D%220%200%20170%20168%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20clip-path%3D%22url%28%23clip0%29%22%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF505F%22%2F%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF0320%22%2F%3E%3Cpath%20d%3D%22M85.05%200C132.022%200%20170.1%2037.8949%20170.1%2084.6407C170.1%20131.386%200%20131.386%200%2084.6407C0%2037.8949%2038.0782%200%2085.05%200Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.665%2064.0394L112.444%2012.3742L89.0263%2078.9477L144.665%2064.0394Z%22%20fill%3D%22%23FF4E65%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.777%2064.215L112.444%2012.3742L165.349%2058.4347L143.777%2064.215Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.551%2063.613L142.479%20124.467L88.912%2078.5213L144.551%2063.613Z%22%20fill%3D%22%23D0001A%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.663%2063.7886L142.479%20124.467L165.235%2058.0083L143.663%2063.7886Z%22%20fill%3D%22%23FF697B%22%2F%3E%3C%2Fg%3E%3Cdefs%3E%3CclipPath%20id%3D%22clip0%22%3E%3Crect%20width%3D%22170%22%20height%3D%22168%22%20fill%3D%22white%22%2F%3E%3C%2FclipPath%3E%3C%2Fdefs%3E%3C%2Fsvg%3E' - -var polygonMaticLogo = - 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20viewBox%3D%220%200%2038.4%2033.5%22%20style%3D%22enable-background%3Anew%200%200%2038.4%2033.5%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cstyle%20type%3D%22text%2Fcss%22%3E%20.st0%7Bfill%3A%238247E5%3B%7D%3C%2Fstyle%3E%3Cg%3E%20%3Cpath%20class%3D%22st0%22%20d%3D%22M29%2C10.2c-0.7-0.4-1.6-0.4-2.4%2C0L21%2C13.5l-3.8%2C2.1l-5.5%2C3.3c-0.7%2C0.4-1.6%2C0.4-2.4%2C0L5%2C16.3%20%20c-0.7-0.4-1.2-1.2-1.2-2.1v-5c0-0.8%2C0.4-1.6%2C1.2-2.1l4.3-2.5c0.7-0.4%2C1.6-0.4%2C2.4%2C0L16%2C7.2c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v3.3l3.8-2.2V7%20%20c0-0.8-0.4-1.6-1.2-2.1l-8-4.7c-0.7-0.4-1.6-0.4-2.4%2C0L1.2%2C5C0.4%2C5.4%2C0%2C6.2%2C0%2C7v9.4c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l5.5-3.2l3.8-2.2l5.5-3.2c0.7-0.4%2C1.6-0.4%2C2.4%2C0l4.3%2C2.5c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v5c0%2C0.8-0.4%2C1.6-1.2%2C2.1%20%20L29%2C28.8c-0.7%2C0.4-1.6%2C0.4-2.4%2C0l-4.3-2.5c-0.7-0.4-1.2-1.2-1.2-2.1V21l-3.8%2C2.2v3.3c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l8.1-4.7c0.7-0.4%2C1.2-1.2%2C1.2-2.1V17c0-0.8-0.4-1.6-1.2-2.1L29%2C10.2z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E' - -var _a$g -/** - * List of all the networks supported by the Uniswap Interface - */ -var SupportedChainId -;(function (SupportedChainId) { - SupportedChainId[(SupportedChainId['MAINNET'] = 1)] = 'MAINNET' - SupportedChainId[(SupportedChainId['ROPSTEN'] = 3)] = 'ROPSTEN' - SupportedChainId[(SupportedChainId['RINKEBY'] = 4)] = 'RINKEBY' - SupportedChainId[(SupportedChainId['GOERLI'] = 5)] = 'GOERLI' - SupportedChainId[(SupportedChainId['KOVAN'] = 42)] = 'KOVAN' - SupportedChainId[(SupportedChainId['ARBITRUM_ONE'] = 42161)] = 'ARBITRUM_ONE' - SupportedChainId[(SupportedChainId['ARBITRUM_RINKEBY'] = 421611)] = 'ARBITRUM_RINKEBY' - SupportedChainId[(SupportedChainId['OPTIMISM'] = 10)] = 'OPTIMISM' - SupportedChainId[(SupportedChainId['OPTIMISTIC_KOVAN'] = 69)] = 'OPTIMISTIC_KOVAN' - SupportedChainId[(SupportedChainId['POLYGON'] = 137)] = 'POLYGON' - SupportedChainId[(SupportedChainId['POLYGON_MUMBAI'] = 80001)] = 'POLYGON_MUMBAI' -})(SupportedChainId || (SupportedChainId = {})) -;(_a$g = {}), - (_a$g[SupportedChainId.MAINNET] = 'mainnet'), - (_a$g[SupportedChainId.ROPSTEN] = 'ropsten'), - (_a$g[SupportedChainId.RINKEBY] = 'rinkeby'), - (_a$g[SupportedChainId.GOERLI] = 'goerli'), - (_a$g[SupportedChainId.KOVAN] = 'kovan'), - (_a$g[SupportedChainId.POLYGON] = 'polygon'), - (_a$g[SupportedChainId.POLYGON_MUMBAI] = 'polygon_mumbai'), - (_a$g[SupportedChainId.ARBITRUM_ONE] = 'arbitrum'), - (_a$g[SupportedChainId.ARBITRUM_RINKEBY] = 'arbitrum_rinkeby'), - (_a$g[SupportedChainId.OPTIMISM] = 'optimism'), - (_a$g[SupportedChainId.OPTIMISTIC_KOVAN] = 'optimistic_kovan'), - _a$g -/** - * Array of all the supported chain IDs - */ -var ALL_SUPPORTED_CHAIN_IDS = Object.values(SupportedChainId).filter(function (id) { - return typeof id === 'number' -}) -var SUPPORTED_GAS_ESTIMATE_CHAIN_IDS = [SupportedChainId.MAINNET, SupportedChainId.POLYGON] -/** - * All the chain IDs that are running the Ethereum protocol. - */ -;[ - SupportedChainId.MAINNET, - SupportedChainId.ROPSTEN, - SupportedChainId.RINKEBY, - SupportedChainId.GOERLI, - SupportedChainId.KOVAN, - SupportedChainId.POLYGON, - SupportedChainId.POLYGON_MUMBAI, -] -/** - * Controls some L2 specific behavior, e.g. slippage tolerance, special UI behavior. - * The expectation is that all of these networks have immediate transaction confirmation. - */ -var L2_CHAIN_IDS = [ - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, -] - -var UNI_LIST = 'https://tokens.uniswap.org' -var AAVE_LIST = 'tokenlist.aave.eth' -var BA_LIST = 'https://raw.githubusercontent.com/The-Blockchain-Association/sec-notice-list/master/ba-sec-list.json' -var CMC_ALL_LIST = 'https://api.coinmarketcap.com/data-api/v3/uniswap/all.json' -var COINGECKO_LIST = 'https://tokens.coingecko.com/uniswap/all.json' -var COMPOUND_LIST = 'https://raw.githubusercontent.com/compound-finance/token-list/master/compound.tokenlist.json' -var GEMINI_LIST = 'https://www.gemini.com/uniswap/manifest.json' -var ARBITRUM_LIST = 'https://bridge.arbitrum.io/token-list-42161.json' -var KLEROS_LIST = 't2crtokens.eth' -var OPTIMISM_LIST = 'https://static.optimism.io/optimism.tokenlist.json' -var ROLL_LIST = 'https://app.tryroll.com/tokens.json' -var SET_LIST = 'https://raw.githubusercontent.com/SetProtocol/uniswap-tokenlist/main/set.tokenlist.json' -var WRAPPED_LIST = 'wrapped.tokensoft.eth' -var UNSUPPORTED_LIST_URLS = [BA_LIST] -// this is the default list of lists that are exposed to users -// lower index == higher priority for token import -var DEFAULT_LIST_OF_LISTS_TO_DISPLAY = [ - UNI_LIST, - COMPOUND_LIST, - AAVE_LIST, - CMC_ALL_LIST, - COINGECKO_LIST, - KLEROS_LIST, - GEMINI_LIST, - WRAPPED_LIST, - SET_LIST, - ROLL_LIST, - ARBITRUM_LIST, - OPTIMISM_LIST, -] -var DEFAULT_LIST_OF_LISTS = __spreadArray( - __spreadArray([], __read(DEFAULT_LIST_OF_LISTS_TO_DISPLAY), false), - __read(UNSUPPORTED_LIST_URLS), - false -) -// default lists to be 'active' aka searched across -var DEFAULT_ACTIVE_LIST_URLS = [UNI_LIST, GEMINI_LIST] - -var _a$f, _b$6 -var INFURA_KEY = process.env.REACT_APP_INFURA_KEY -if (typeof INFURA_KEY === 'undefined') { - throw new Error('REACT_APP_INFURA_KEY must be a defined environment variable') -} -/** - * These are the network URLs used by the interface when there is not another available source of chain data - */ -var INFURA_NETWORK_URLS = - ((_a$f = {}), - (_a$f[SupportedChainId.MAINNET] = 'https://mainnet.infura.io/v3/' + INFURA_KEY), - (_a$f[SupportedChainId.RINKEBY] = 'https://rinkeby.infura.io/v3/' + INFURA_KEY), - (_a$f[SupportedChainId.ROPSTEN] = 'https://ropsten.infura.io/v3/' + INFURA_KEY), - (_a$f[SupportedChainId.GOERLI] = 'https://goerli.infura.io/v3/' + INFURA_KEY), - (_a$f[SupportedChainId.KOVAN] = 'https://kovan.infura.io/v3/' + INFURA_KEY), - (_a$f[SupportedChainId.OPTIMISM] = 'https://optimism-mainnet.infura.io/v3/' + INFURA_KEY), - (_a$f[SupportedChainId.OPTIMISTIC_KOVAN] = 'https://optimism-kovan.infura.io/v3/' + INFURA_KEY), - (_a$f[SupportedChainId.ARBITRUM_ONE] = 'https://arbitrum-mainnet.infura.io/v3/' + INFURA_KEY), - (_a$f[SupportedChainId.ARBITRUM_RINKEBY] = 'https://arbitrum-rinkeby.infura.io/v3/' + INFURA_KEY), - (_a$f[SupportedChainId.POLYGON] = 'https://polygon-mainnet.infura.io/v3/' + INFURA_KEY), - (_a$f[SupportedChainId.POLYGON_MUMBAI] = 'https://polygon-mumbai.infura.io/v3/' + INFURA_KEY), - _a$f) -var NetworkType -;(function (NetworkType) { - NetworkType[(NetworkType['L1'] = 0)] = 'L1' - NetworkType[(NetworkType['L2'] = 1)] = 'L2' -})(NetworkType || (NetworkType = {})) -var CHAIN_INFO = - ((_b$6 = {}), - (_b$6[SupportedChainId.MAINNET] = { - networkType: NetworkType.L1, - docs: 'https://docs.uniswap.org/', - explorer: 'https://etherscan.io/', - infoLink: 'https://info.uniswap.org/#/', - label: 'Ethereum', - logoUrl: EthereumLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, - rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.MAINNET], - }, - }), - (_b$6[SupportedChainId.RINKEBY] = { - networkType: NetworkType.L1, - docs: 'https://docs.uniswap.org/', - explorer: 'https://rinkeby.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/', - label: 'Rinkeby', - logoUrl: EthereumLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Rinkeby Ether', symbol: 'rETH', decimals: 18 }, - rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.RINKEBY], - }, - }), - (_b$6[SupportedChainId.ROPSTEN] = { - networkType: NetworkType.L1, - docs: 'https://docs.uniswap.org/', - explorer: 'https://ropsten.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/', - label: 'Ropsten', - logoUrl: EthereumLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Ropsten Ether', symbol: 'ropETH', decimals: 18 }, - rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.ROPSTEN], - }, - }), - (_b$6[SupportedChainId.KOVAN] = { - networkType: NetworkType.L1, - docs: 'https://docs.uniswap.org/', - explorer: 'https://kovan.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/', - label: 'Kovan', - logoUrl: EthereumLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Kovan Ether', symbol: 'kovETH', decimals: 18 }, - rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.KOVAN], - }, - }), - (_b$6[SupportedChainId.GOERLI] = { - networkType: NetworkType.L1, - docs: 'https://docs.uniswap.org/', - explorer: 'https://goerli.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/', - label: 'Görli', - logoUrl: EthereumLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Görli Ether', symbol: 'görETH', decimals: 18 }, - rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.GOERLI], - }, - }), - (_b$6[SupportedChainId.OPTIMISM] = { - networkType: NetworkType.L2, - blockWaitMsBeforeWarning: ms__default['default']( - templateObject_1$X || (templateObject_1$X = __makeTemplateObject(['25m'], ['25m'])) - ), - bridge: 'https://gateway.optimism.io/?chainId=1', - defaultListUrl: OPTIMISM_LIST, - docs: 'https://optimism.io/', - explorer: 'https://optimistic.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/optimism/', - label: 'Optimism', - logoUrl: optimismLogoUrl, - statusPage: 'https://optimism.io/status', - helpCenterUrl: 'https://help.uniswap.org/en/collections/3137778-uniswap-on-optimistic-ethereum-oξ', - addNetworkInfo: { - nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, - rpcUrl: 'https://mainnet.optimism.io', - }, - }), - (_b$6[SupportedChainId.OPTIMISTIC_KOVAN] = { - networkType: NetworkType.L2, - blockWaitMsBeforeWarning: ms__default['default']( - templateObject_2$E || (templateObject_2$E = __makeTemplateObject(['25m'], ['25m'])) - ), - bridge: 'https://gateway.optimism.io/', - defaultListUrl: OPTIMISM_LIST, - docs: 'https://optimism.io/', - explorer: 'https://optimistic.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/optimism/', - label: 'Optimistic Kovan', - logoUrl: optimismLogoUrl, - statusPage: 'https://optimism.io/status', - helpCenterUrl: 'https://help.uniswap.org/en/collections/3137778-uniswap-on-optimistic-ethereum-oξ', - addNetworkInfo: { - nativeCurrency: { name: 'Optimistic Kovan Ether', symbol: 'kovOpETH', decimals: 18 }, - rpcUrl: 'https://kovan.optimism.io', - }, - }), - (_b$6[SupportedChainId.ARBITRUM_ONE] = { - networkType: NetworkType.L2, - blockWaitMsBeforeWarning: ms__default['default']( - templateObject_3$x || (templateObject_3$x = __makeTemplateObject(['10m'], ['10m'])) - ), - bridge: 'https://bridge.arbitrum.io/', - docs: 'https://offchainlabs.com/', - explorer: 'https://arbiscan.io/', - infoLink: 'https://info.uniswap.org/#/arbitrum', - label: 'Arbitrum', - logoUrl: arbitrumLogoUrl, - defaultListUrl: ARBITRUM_LIST, - helpCenterUrl: 'https://help.uniswap.org/en/collections/3137787-uniswap-on-arbitrum', - addNetworkInfo: { - nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, - rpcUrl: 'https://arb1.arbitrum.io/rpc', - }, - }), - (_b$6[SupportedChainId.ARBITRUM_RINKEBY] = { - networkType: NetworkType.L2, - blockWaitMsBeforeWarning: ms__default['default']( - templateObject_4$n || (templateObject_4$n = __makeTemplateObject(['10m'], ['10m'])) - ), - bridge: 'https://bridge.arbitrum.io/', - docs: 'https://offchainlabs.com/', - explorer: 'https://rinkeby-explorer.arbitrum.io/', - infoLink: 'https://info.uniswap.org/#/arbitrum/', - label: 'Arbitrum Rinkeby', - logoUrl: arbitrumLogoUrl, - defaultListUrl: ARBITRUM_LIST, - helpCenterUrl: 'https://help.uniswap.org/en/collections/3137787-uniswap-on-arbitrum', - addNetworkInfo: { - nativeCurrency: { name: 'Rinkeby Arbitrum Ether', symbol: 'rinkArbETH', decimals: 18 }, - rpcUrl: 'https://rinkeby.arbitrum.io/rpc', - }, - }), - (_b$6[SupportedChainId.POLYGON] = { - networkType: NetworkType.L1, - blockWaitMsBeforeWarning: ms__default['default']( - templateObject_5$k || (templateObject_5$k = __makeTemplateObject(['10m'], ['10m'])) - ), - bridge: 'https://wallet.polygon.technology/bridge', - docs: 'https://polygon.io/', - explorer: 'https://polygonscan.com/', - infoLink: 'https://info.uniswap.org/#/polygon/', - label: 'Polygon', - logoUrl: polygonMaticLogo, - addNetworkInfo: { - rpcUrl: 'https://polygon-rpc.com/', - nativeCurrency: { name: 'Polygon Matic', symbol: 'MATIC', decimals: 18 }, - }, - }), - (_b$6[SupportedChainId.POLYGON_MUMBAI] = { - networkType: NetworkType.L1, - blockWaitMsBeforeWarning: ms__default['default']( - templateObject_6$e || (templateObject_6$e = __makeTemplateObject(['10m'], ['10m'])) - ), - bridge: 'https://wallet.polygon.technology/bridge', - docs: 'https://polygon.io/', - explorer: 'https://mumbai.polygonscan.com/', - infoLink: 'https://info.uniswap.org/#/polygon/', - label: 'Polygon Mumbai', - logoUrl: polygonMaticLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Polygon Mumbai Matic', symbol: 'mMATIC', decimals: 18 }, - rpcUrl: 'https://rpc-endpoints.superfluid.dev/mumbai', - }, - }), - _b$6) -var templateObject_1$X, - templateObject_2$E, - templateObject_3$x, - templateObject_4$n, - templateObject_5$k, - templateObject_6$e - -var NetworkContextName = 'NETWORK' -// 30 minutes, denominated in seconds -var DEFAULT_DEADLINE_FROM_NOW = 60 * 30 -var L2_DEADLINE_FROM_NOW = 60 * 5 -// transaction popup dismisal amounts -var DEFAULT_TXN_DISMISS_MS = 25000 -// used for rewards deadlines -JSBI__default['default'].BigInt(60 * 60 * 24 * 7) -JSBI__default['default'].BigInt(0) -// one basis JSBI.BigInt -var BIPS_BASE = JSBI__default['default'].BigInt(10000) -new sdkCore.Percent(JSBI__default['default'].BigInt(1), BIPS_BASE) -// used for warning states -var ALLOWED_PRICE_IMPACT_LOW = new sdkCore.Percent(JSBI__default['default'].BigInt(100), BIPS_BASE) // 1% -var ALLOWED_PRICE_IMPACT_MEDIUM = new sdkCore.Percent(JSBI__default['default'].BigInt(300), BIPS_BASE) // 3% -var ALLOWED_PRICE_IMPACT_HIGH = new sdkCore.Percent(JSBI__default['default'].BigInt(500), BIPS_BASE) // 5% -// if the price slippage exceeds this number, force the user to type 'confirm' to execute -var PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN = new sdkCore.Percent(JSBI__default['default'].BigInt(1000), BIPS_BASE) // 10% -// for non expert mode disable swaps above this -var BLOCKED_PRICE_IMPACT_NON_EXPERT = new sdkCore.Percent(JSBI__default['default'].BigInt(1500), BIPS_BASE) // 15% -var BETTER_TRADE_LESS_HOPS_THRESHOLD = new sdkCore.Percent(JSBI__default['default'].BigInt(50), BIPS_BASE) -var ZERO_PERCENT = new sdkCore.Percent('0') -new sdkCore.Percent(JSBI__default['default'].BigInt(200), BIPS_BASE) -var ONE_HUNDRED_PERCENT = new sdkCore.Percent('1') - -function useActiveWeb3React() { - // if (false) { - // return useWidgetsWeb3React() - // } - var interfaceContext = core.useWeb3React() - var interfaceNetworkContext = core.useWeb3React(NetworkContextName) - if (interfaceContext.active) { - return interfaceContext - } - return interfaceNetworkContext -} - -var useAppDispatch = function () { - return reactRedux.useDispatch() -} -var useAppSelector = reactRedux.useSelector - -var DEFAULT_NETWORKS = [ - SupportedChainId.MAINNET, - SupportedChainId.ROPSTEN, - SupportedChainId.RINKEBY, - SupportedChainId.GOERLI, - SupportedChainId.KOVAN, -] -function constructSameAddressMap(address, additionalNetworks) { - if (additionalNetworks === void 0) { - additionalNetworks = [] - } - return DEFAULT_NETWORKS.concat(additionalNetworks).reduce(function (memo, chainId) { - memo[chainId] = address - return memo - }, {}) -} - -var _a$e, _b$5, _c$4, _d$3, _e$2, _f$1, _g$1, _h$1 -var UNI_ADDRESS = constructSameAddressMap('0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984') -var MULTICALL_ADDRESS = __assign( - __assign( - {}, - constructSameAddressMap('0x1F98415757620B543A52E61c46B32eB19261F984', [ - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.OPTIMISM, - SupportedChainId.POLYGON_MUMBAI, - SupportedChainId.POLYGON, - ]) - ), - ((_a$e = {}), - (_a$e[SupportedChainId.ARBITRUM_ONE] = '0xadF885960B47eA2CD9B55E6DAc6B42b7Cb2806dB'), - (_a$e[SupportedChainId.ARBITRUM_RINKEBY] = '0xa501c031958F579dB7676fF1CE78AD305794d579'), - _a$e) -) -var V2_FACTORY_ADDRESSES = constructSameAddressMap(v2Sdk.FACTORY_ADDRESS) -var V2_ROUTER_ADDRESS = constructSameAddressMap('0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D') -var V3_ROUTER_ADDRESS = constructSameAddressMap('0xE592427A0AEce92De3Edee1F18E0157C05861564', [ - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON, - SupportedChainId.POLYGON_MUMBAI, -]) -var SWAP_ROUTER_ADDRESSES = constructSameAddressMap('0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45', [ - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON, - SupportedChainId.POLYGON_MUMBAI, -]) -/** - * The oldest V0 governance address - */ -constructSameAddressMap('0x5e4be8Bc9637f0EAA1A755019e06A68ce081D58F') -/** - * The older V1 governance address - */ -;(_b$5 = {}), (_b$5[SupportedChainId.MAINNET] = '0xC4e172459f1E7939D522503B81AFAaC1014CE6F6'), _b$5 -/** - * The latest governor bravo that is currently admin of timelock - */ -;(_c$4 = {}), (_c$4[SupportedChainId.MAINNET] = '0x408ED6354d4973f66138C91495F2f2FCbd8724C3'), _c$4 -constructSameAddressMap('0x1a9C8182C09F50C8318d769245beA52c32BE35BC') -;(_d$3 = {}), (_d$3[SupportedChainId.MAINNET] = '0x090D4613473dEE047c3f2706764f49E0821D256e'), _d$3 -var ARGENT_WALLET_DETECTOR_ADDRESS = - ((_e$2 = {}), (_e$2[SupportedChainId.MAINNET] = '0xeca4B0bDBf7c55E9b7925919d03CbF8Dc82537E8'), _e$2) -var V3_CORE_FACTORY_ADDRESSES = constructSameAddressMap(v3Sdk.FACTORY_ADDRESS, [ - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON_MUMBAI, - SupportedChainId.POLYGON, -]) -var QUOTER_ADDRESSES = constructSameAddressMap('0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6', [ - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON_MUMBAI, - SupportedChainId.POLYGON, -]) -constructSameAddressMap('0xC36442b4a4522E871399CD717aBDD847Ab11FE88', [ - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON_MUMBAI, - SupportedChainId.POLYGON, -]) -var ENS_REGISTRAR_ADDRESSES = - ((_f$1 = {}), - (_f$1[SupportedChainId.MAINNET] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'), - (_f$1[SupportedChainId.ROPSTEN] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'), - (_f$1[SupportedChainId.GOERLI] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'), - (_f$1[SupportedChainId.RINKEBY] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'), - _f$1) -;(_g$1 = {}), (_g$1[SupportedChainId.MAINNET] = '0x65770b5283117639760beA3F867b69b3697a91dd'), _g$1 -constructSameAddressMap('0xA5644E29708357803b5A882D272c41cC0dF92B34', [ - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON_MUMBAI, - SupportedChainId.POLYGON, -]) -;(_h$1 = {}), - (_h$1[SupportedChainId.ARBITRUM_ONE] = '0xbfd8137f7d1516D3ea5cA83523914859ec47F573'), - (_h$1[SupportedChainId.ARBITRUM_RINKEBY] = '0xbfd8137f7d1516D3ea5cA83523914859ec47F573'), - _h$1 - -var _a$d, _b$4 -var AMPL = new sdkCore.Token( - SupportedChainId.MAINNET, - '0xD46bA6D942050d489DBd938a2C909A5d5039A161', - 9, - 'AMPL', - 'Ampleforth' -) -var DAI = new sdkCore.Token( - SupportedChainId.MAINNET, - '0x6B175474E89094C44Da98b954EedeAC495271d0F', - 18, - 'DAI', - 'Dai Stablecoin' -) -var DAI_ARBITRUM_ONE = new sdkCore.Token( - SupportedChainId.ARBITRUM_ONE, - '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', - 18, - 'DAI', - 'Dai stable coin' -) -var DAI_OPTIMISM = new sdkCore.Token( - SupportedChainId.OPTIMISM, - '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', - 18, - 'DAI', - 'Dai stable coin' -) -var USDC = new sdkCore.Token( - SupportedChainId.MAINNET, - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', - 6, - 'USDC', - 'USD//C' -) -var USDC_ARBITRUM = new sdkCore.Token( - SupportedChainId.ARBITRUM_ONE, - '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8', - 6, - 'USDC', - 'USD//C' -) -var USDC_POLYGON = new sdkCore.Token( - SupportedChainId.POLYGON, - '0x2791bca1f2de4661ed88a30c99a7a9449aa84174', - 6, - 'USDC', - 'USD//C' -) -var DAI_POLYGON = new sdkCore.Token( - SupportedChainId.POLYGON, - '0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063', - 18, - 'DAI', - 'Dai Stablecoin' -) -var USDT_POLYGON = new sdkCore.Token( - SupportedChainId.POLYGON, - '0xc2132d05d31c914a87c6611c10748aeb04b58e8f', - 6, - 'USDT', - 'Tether USD' -) -var WBTC_POLYGON = new sdkCore.Token( - SupportedChainId.POLYGON, - '0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6', - 8, - 'WBTC', - 'Wrapped BTC' -) -var USDC_OPTIMISM = new sdkCore.Token( - SupportedChainId.OPTIMISM, - '0x7F5c764cBc14f9669B88837ca1490cCa17c31607', - 6, - 'USDC', - 'USD//C' -) -var USDT = new sdkCore.Token( - SupportedChainId.MAINNET, - '0xdAC17F958D2ee523a2206206994597C13D831ec7', - 6, - 'USDT', - 'Tether USD' -) -var USDT_ARBITRUM_ONE = new sdkCore.Token( - SupportedChainId.ARBITRUM_ONE, - '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9', - 6, - 'USDT', - 'Tether USD' -) -var USDT_OPTIMISM = new sdkCore.Token( - SupportedChainId.OPTIMISM, - '0x94b008aA00579c1307B0EF2c499aD98a8ce58e58', - 6, - 'USDT', - 'Tether USD' -) -var WBTC = new sdkCore.Token( - SupportedChainId.MAINNET, - '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', - 8, - 'WBTC', - 'Wrapped BTC' -) -var WBTC_ARBITRUM_ONE = new sdkCore.Token( - SupportedChainId.ARBITRUM_ONE, - '0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f', - 8, - 'WBTC', - 'Wrapped BTC' -) -var WBTC_OPTIMISM = new sdkCore.Token( - SupportedChainId.OPTIMISM, - '0x68f180fcCe6836688e9084f035309E29Bf0A2095', - 8, - 'WBTC', - 'Wrapped BTC' -) -var FEI = new sdkCore.Token( - SupportedChainId.MAINNET, - '0x956F47F50A910163D8BF957Cf5846D573E7f87CA', - 18, - 'FEI', - 'Fei USD' -) -var TRIBE = new sdkCore.Token( - SupportedChainId.MAINNET, - '0xc7283b66Eb1EB5FB86327f08e1B5816b0720212B', - 18, - 'TRIBE', - 'Tribe' -) -var FRAX = new sdkCore.Token(SupportedChainId.MAINNET, '0x853d955aCEf822Db058eb8505911ED77F175b99e', 18, 'FRAX', 'Frax') -var FXS = new sdkCore.Token( - SupportedChainId.MAINNET, - '0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0', - 18, - 'FXS', - 'Frax Share' -) -var renBTC = new sdkCore.Token( - SupportedChainId.MAINNET, - '0xEB4C2781e4ebA804CE9a9803C67d0893436bB27D', - 8, - 'renBTC', - 'renBTC' -) -var ETH2X_FLI = new sdkCore.Token( - SupportedChainId.MAINNET, - '0xAa6E8127831c9DE45ae56bB1b0d4D4Da6e5665BD', - 18, - 'ETH2x-FLI', - 'ETH 2x Flexible Leverage Index' -) -var sETH2 = new sdkCore.Token( - SupportedChainId.MAINNET, - '0xFe2e637202056d30016725477c5da089Ab0A043A', - 18, - 'sETH2', - 'StakeWise Staked ETH2' -) -var rETH2 = new sdkCore.Token( - SupportedChainId.MAINNET, - '0x20BC832ca081b91433ff6c17f85701B6e92486c5', - 18, - 'rETH2', - 'StakeWise Reward ETH2' -) -var SWISE = new sdkCore.Token( - SupportedChainId.MAINNET, - '0x48C3399719B582dD63eB5AADf12A40B4C3f52FA2', - 18, - 'SWISE', - 'StakeWise' -) -var WETH_POLYGON_MUMBAI = new sdkCore.Token( - SupportedChainId.POLYGON_MUMBAI, - '0xa6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa', - 18, - 'WETH', - 'Wrapped Ether' -) -var WETH_POLYGON = new sdkCore.Token( - SupportedChainId.POLYGON, - '0x7ceb23fd6bc0add59e62ac25578270cff1b9f619', - 18, - 'WETH', - 'Wrapped Ether' -) -var UNI = - ((_a$d = {}), - (_a$d[SupportedChainId.MAINNET] = new sdkCore.Token(SupportedChainId.MAINNET, UNI_ADDRESS[1], 18, 'UNI', 'Uniswap')), - (_a$d[SupportedChainId.RINKEBY] = new sdkCore.Token(SupportedChainId.RINKEBY, UNI_ADDRESS[4], 18, 'UNI', 'Uniswap')), - (_a$d[SupportedChainId.ROPSTEN] = new sdkCore.Token(SupportedChainId.ROPSTEN, UNI_ADDRESS[3], 18, 'UNI', 'Uniswap')), - (_a$d[SupportedChainId.GOERLI] = new sdkCore.Token(SupportedChainId.GOERLI, UNI_ADDRESS[5], 18, 'UNI', 'Uniswap')), - (_a$d[SupportedChainId.KOVAN] = new sdkCore.Token(SupportedChainId.KOVAN, UNI_ADDRESS[42], 18, 'UNI', 'Uniswap')), - _a$d) -var WRAPPED_NATIVE_CURRENCY = __assign( - __assign({}, sdkCore.WETH9), - ((_b$4 = {}), - (_b$4[SupportedChainId.OPTIMISM] = new sdkCore.Token( - SupportedChainId.OPTIMISM, - '0x4200000000000000000000000000000000000006', - 18, - 'WETH', - 'Wrapped Ether' - )), - (_b$4[SupportedChainId.OPTIMISTIC_KOVAN] = new sdkCore.Token( - SupportedChainId.OPTIMISTIC_KOVAN, - '0x4200000000000000000000000000000000000006', - 18, - 'WETH', - 'Wrapped Ether' - )), - (_b$4[SupportedChainId.ARBITRUM_ONE] = new sdkCore.Token( - SupportedChainId.ARBITRUM_ONE, - '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1', - 18, - 'WETH', - 'Wrapped Ether' - )), - (_b$4[SupportedChainId.ARBITRUM_RINKEBY] = new sdkCore.Token( - SupportedChainId.ARBITRUM_RINKEBY, - '0xB47e6A5f8b33b3F17603C83a0535A9dcD7E32681', - 18, - 'WETH', - 'Wrapped Ether' - )), - (_b$4[SupportedChainId.POLYGON] = new sdkCore.Token( - SupportedChainId.POLYGON, - '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270', - 18, - 'WMATIC', - 'Wrapped MATIC' - )), - (_b$4[SupportedChainId.POLYGON_MUMBAI] = new sdkCore.Token( - SupportedChainId.POLYGON_MUMBAI, - '0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889', - 18, - 'WMATIC', - 'Wrapped MATIC' - )), - _b$4) -) -function isMatic(chainId) { - return chainId === SupportedChainId.POLYGON_MUMBAI || chainId === SupportedChainId.POLYGON -} -var MaticNativeCurrency = /** @class */ (function (_super) { - __extends(MaticNativeCurrency, _super) - function MaticNativeCurrency(chainId) { - var _this = this - if (!isMatic(chainId)) throw new Error('Not matic') - _this = _super.call(this, chainId, 18, 'MATIC', 'Polygon Matic') || this - return _this - } - MaticNativeCurrency.prototype.equals = function (other) { - return other.isNative && other.chainId === this.chainId - } - Object.defineProperty(MaticNativeCurrency.prototype, 'wrapped', { - get() { - if (!isMatic(this.chainId)) throw new Error('Not matic') - return WRAPPED_NATIVE_CURRENCY[this.chainId] - }, - enumerable: false, - configurable: true, - }) - return MaticNativeCurrency -})(sdkCore.NativeCurrency) -var ExtendedEther = /** @class */ (function (_super) { - __extends(ExtendedEther, _super) - function ExtendedEther() { - return (_super !== null && _super.apply(this, arguments)) || this - } - Object.defineProperty(ExtendedEther.prototype, 'wrapped', { - get() { - if (this.chainId in WRAPPED_NATIVE_CURRENCY) return WRAPPED_NATIVE_CURRENCY[this.chainId] - throw new Error('Unsupported chain ID') - }, - enumerable: false, - configurable: true, - }) - ExtendedEther.onChain = function (chainId) { - var _a - return (_a = this._cachedExtendedEther[chainId]) !== null && _a !== void 0 - ? _a - : (this._cachedExtendedEther[chainId] = new ExtendedEther(chainId)) - } - ExtendedEther._cachedExtendedEther = {} - return ExtendedEther -})(sdkCore.Ether) -var cachedNativeCurrency = {} -function nativeOnChain(chainId) { - var _a - return (_a = cachedNativeCurrency[chainId]) !== null && _a !== void 0 - ? _a - : (cachedNativeCurrency[chainId] = isMatic(chainId) - ? new MaticNativeCurrency(chainId) - : ExtendedEther.onChain(chainId)) -} - -var _a$c, _b$3, _c$3, _d$2, _e$1, _f, _g, _h -var WRAPPED_NATIVE_CURRENCIES_ONLY = Object.fromEntries( - Object.entries(WRAPPED_NATIVE_CURRENCY).map(function (_a) { - var _b = __read(_a, 2), - key = _b[0], - value = _b[1] - return [key, [value]] - }) -) -// used to construct intermediary pairs for trading -var BASES_TO_CHECK_TRADES_AGAINST = __assign( - __assign({}, WRAPPED_NATIVE_CURRENCIES_ONLY), - ((_a$c = {}), - (_a$c[SupportedChainId.MAINNET] = __spreadArray( - __spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.MAINNET]), false), - [DAI, USDC, USDT, WBTC], - false - )), - (_a$c[SupportedChainId.OPTIMISM] = __spreadArray( - __spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.OPTIMISM]), false), - [DAI_OPTIMISM, USDT_OPTIMISM, WBTC_OPTIMISM], - false - )), - (_a$c[SupportedChainId.ARBITRUM_ONE] = __spreadArray( - __spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.ARBITRUM_ONE]), false), - [DAI_ARBITRUM_ONE, USDT_ARBITRUM_ONE, WBTC_ARBITRUM_ONE], - false - )), - (_a$c[SupportedChainId.POLYGON] = __spreadArray( - __spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.POLYGON]), false), - [DAI_POLYGON, USDC_POLYGON, USDT_POLYGON, WETH_POLYGON], - false - )), - _a$c) -) -var ADDITIONAL_BASES = - ((_b$3 = {}), - (_b$3[SupportedChainId.MAINNET] = - ((_c$3 = { - '0xF16E4d813f4DcfDe4c5b44f305c908742De84eF0': [ETH2X_FLI], - }), - (_c$3[rETH2.address] = [sETH2]), - (_c$3[SWISE.address] = [sETH2]), - (_c$3[FEI.address] = [TRIBE]), - (_c$3[TRIBE.address] = [FEI]), - (_c$3[FRAX.address] = [FXS]), - (_c$3[FXS.address] = [FRAX]), - (_c$3[WBTC.address] = [renBTC]), - (_c$3[renBTC.address] = [WBTC]), - _c$3)), - _b$3) -/** - * Some tokens can only be swapped via certain pairs, so we override the list of bases that are considered for these - * tokens. - */ -var CUSTOM_BASES = - ((_d$2 = {}), - (_d$2[SupportedChainId.MAINNET] = - ((_e$1 = {}), (_e$1[AMPL.address] = [DAI, WRAPPED_NATIVE_CURRENCY[SupportedChainId.MAINNET]]), _e$1)), - _d$2) -/** - * Shows up in the currency select for swap and add liquidity - */ -var COMMON_BASES = - ((_f = {}), - (_f[SupportedChainId.MAINNET] = [ - nativeOnChain(SupportedChainId.MAINNET), - DAI, - USDC, - USDT, - WBTC, - WRAPPED_NATIVE_CURRENCY[SupportedChainId.MAINNET], - ]), - (_f[SupportedChainId.ROPSTEN] = [ - nativeOnChain(SupportedChainId.ROPSTEN), - WRAPPED_NATIVE_CURRENCY[SupportedChainId.ROPSTEN], - ]), - (_f[SupportedChainId.RINKEBY] = [ - nativeOnChain(SupportedChainId.RINKEBY), - WRAPPED_NATIVE_CURRENCY[SupportedChainId.RINKEBY], - ]), - (_f[SupportedChainId.GOERLI] = [ - nativeOnChain(SupportedChainId.GOERLI), - WRAPPED_NATIVE_CURRENCY[SupportedChainId.GOERLI], - ]), - (_f[SupportedChainId.KOVAN] = [ - nativeOnChain(SupportedChainId.KOVAN), - WRAPPED_NATIVE_CURRENCY[SupportedChainId.KOVAN], - ]), - (_f[SupportedChainId.ARBITRUM_ONE] = [ - nativeOnChain(SupportedChainId.ARBITRUM_ONE), - DAI_ARBITRUM_ONE, - USDC_ARBITRUM, - USDT_ARBITRUM_ONE, - WBTC_ARBITRUM_ONE, - WRAPPED_NATIVE_CURRENCY[SupportedChainId.ARBITRUM_ONE], - ]), - (_f[SupportedChainId.ARBITRUM_RINKEBY] = [ - nativeOnChain(SupportedChainId.ARBITRUM_RINKEBY), - WRAPPED_NATIVE_CURRENCY[SupportedChainId.ARBITRUM_RINKEBY], - ]), - (_f[SupportedChainId.OPTIMISM] = [ - nativeOnChain(SupportedChainId.OPTIMISM), - DAI_OPTIMISM, - USDC_OPTIMISM, - USDT_OPTIMISM, - WBTC_OPTIMISM, - ]), - (_f[SupportedChainId.OPTIMISTIC_KOVAN] = [nativeOnChain(SupportedChainId.OPTIMISTIC_KOVAN)]), - (_f[SupportedChainId.POLYGON] = [ - nativeOnChain(SupportedChainId.POLYGON), - WETH_POLYGON, - USDC_POLYGON, - DAI_POLYGON, - USDT_POLYGON, - WBTC_POLYGON, - ]), - (_f[SupportedChainId.POLYGON_MUMBAI] = [ - nativeOnChain(SupportedChainId.POLYGON_MUMBAI), - WRAPPED_NATIVE_CURRENCY[SupportedChainId.POLYGON_MUMBAI], - WETH_POLYGON_MUMBAI, - ]), - _f) -// used to construct the list of all pairs we consider by default in the frontend -__assign( - __assign({}, WRAPPED_NATIVE_CURRENCIES_ONLY), - ((_g = {}), - (_g[SupportedChainId.MAINNET] = __spreadArray( - __spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.MAINNET]), false), - [DAI, USDC, USDT, WBTC], - false - )), - _g) -) -;(_h = {}), - (_h[SupportedChainId.MAINNET] = [ - [ - new sdkCore.Token( - SupportedChainId.MAINNET, - '0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643', - 8, - 'cDAI', - 'Compound Dai' - ), - new sdkCore.Token( - SupportedChainId.MAINNET, - '0x39AA39c021dfbaE8faC545936693aC917d5E7563', - 8, - 'cUSDC', - 'Compound USD Coin' - ), - ], - [USDC, USDT], - [DAI, USDT], - ]), - _h ->>>>>>> ee1338c81a2c73d9938e225b8b96abd2fc298260 - -var abi$5 = [ - { - inputs: [ - { - internalType: 'address', - name: '_rewardsDistribution', - type: 'address', - }, - { - internalType: 'address', - name: '_rewardsToken', - type: 'address', - }, - { - internalType: 'address', - name: '_stakingToken', - type: 'address', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'constructor', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'reward', - type: 'uint256', - }, - ], - name: 'RewardAdded', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'user', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'reward', - type: 'uint256', - }, - ], - name: 'RewardPaid', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'user', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'Staked', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'user', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'Withdrawn', - type: 'event', - }, - { - constant: true, - inputs: [ - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'balanceOf', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'earned', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [], - name: 'exit', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [], - name: 'getReward', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'getRewardForDuration', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'lastTimeRewardApplicable', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'lastUpdateTime', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'uint256', - name: 'reward', - type: 'uint256', - }, - ], - name: 'notifyRewardAmount', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'periodFinish', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'rewardPerToken', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'rewardPerTokenStored', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'rewardRate', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'rewards', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'rewardsDistribution', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'rewardsDuration', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'rewardsToken', - outputs: [ - { - internalType: 'contract IERC20', - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'stake', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - { - internalType: 'uint8', - name: 'v', - type: 'uint8', - }, - { - internalType: 'bytes32', - name: 'r', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 's', - type: 'bytes32', - }, - ], - name: 'stakeWithPermit', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'stakingToken', - outputs: [ - { - internalType: 'contract IERC20', - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'totalSupply', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'userRewardPerTokenPaid', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'withdraw', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, -] - -var abi$4 = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'Approval', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'sender', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount0', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount1', - type: 'uint256', - }, - { - indexed: true, - internalType: 'address', - name: 'to', - type: 'address', - }, - ], - name: 'Burn', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'sender', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount0', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount1', - type: 'uint256', - }, - ], - name: 'Mint', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'sender', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount0In', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount1In', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount0Out', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount1Out', - type: 'uint256', - }, - { - indexed: true, - internalType: 'address', - name: 'to', - type: 'address', - }, - ], - name: 'Swap', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint112', - name: 'reserve0', - type: 'uint112', - }, - { - indexed: false, - internalType: 'uint112', - name: 'reserve1', - type: 'uint112', - }, - ], - name: 'Sync', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'from', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'to', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'Transfer', - type: 'event', - }, - { - constant: true, - inputs: [], - name: 'DOMAIN_SEPARATOR', - outputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'MINIMUM_LIQUIDITY', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'pure', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'PERMIT_TYPEHASH', - outputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - ], - payable: false, - stateMutability: 'pure', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - ], - name: 'allowance', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'approve', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'balanceOf', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'address', - name: 'to', - type: 'address', - }, - ], - name: 'burn', - outputs: [ - { - internalType: 'uint256', - name: 'amount0', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amount1', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'decimals', - outputs: [ - { - internalType: 'uint8', - name: '', - type: 'uint8', - }, - ], - payable: false, - stateMutability: 'pure', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'factory', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'getReserves', - outputs: [ - { - internalType: 'uint112', - name: 'reserve0', - type: 'uint112', - }, - { - internalType: 'uint112', - name: 'reserve1', - type: 'uint112', - }, - { - internalType: 'uint32', - name: 'blockTimestampLast', - type: 'uint32', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'initialize', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'kLast', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'address', - name: 'to', - type: 'address', - }, - ], - name: 'mint', - outputs: [ - { - internalType: 'uint256', - name: 'liquidity', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'name', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - payable: false, - stateMutability: 'pure', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'nonces', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - { - internalType: 'uint8', - name: 'v', - type: 'uint8', - }, - { - internalType: 'bytes32', - name: 'r', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 's', - type: 'bytes32', - }, - ], - name: 'permit', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'price0CumulativeLast', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'price1CumulativeLast', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'address', - name: 'to', - type: 'address', - }, - ], - name: 'skim', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'uint256', - name: 'amount0Out', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amount1Out', - type: 'uint256', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'bytes', - name: 'data', - type: 'bytes', - }, - ], - name: 'swap', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'symbol', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - payable: false, - stateMutability: 'pure', - type: 'function', - }, - { - constant: false, - inputs: [], - name: 'sync', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'token0', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'token1', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'totalSupply', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'transfer', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'address', - name: 'from', - type: 'address', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'transferFrom', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, -] - -var abi$3 = [ - { - inputs: [], - name: 'WETH', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'pure', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'tokenA', - type: 'address', - }, - { - internalType: 'address', - name: 'tokenB', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amountADesired', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountBDesired', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountAMin', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountBMin', - type: 'uint256', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - ], - name: 'addLiquidity', - outputs: [ - { - internalType: 'uint256', - name: 'amountA', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountB', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'liquidity', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'token', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amountTokenDesired', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountTokenMin', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountETHMin', - type: 'uint256', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - ], - name: 'addLiquidityETH', - outputs: [ - { - internalType: 'uint256', - name: 'amountToken', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountETH', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'liquidity', - type: 'uint256', - }, - ], - stateMutability: 'payable', - type: 'function', - }, - { - inputs: [], - name: 'factory', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'pure', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountOut', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'reserveIn', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'reserveOut', - type: 'uint256', - }, - ], - name: 'getAmountIn', - outputs: [ - { - internalType: 'uint256', - name: 'amountIn', - type: 'uint256', - }, - ], - stateMutability: 'pure', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountIn', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'reserveIn', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'reserveOut', - type: 'uint256', - }, - ], - name: 'getAmountOut', - outputs: [ - { - internalType: 'uint256', - name: 'amountOut', - type: 'uint256', - }, - ], - stateMutability: 'pure', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountOut', - type: 'uint256', - }, - { - internalType: 'address[]', - name: 'path', - type: 'address[]', - }, - ], - name: 'getAmountsIn', - outputs: [ - { - internalType: 'uint256[]', - name: 'amounts', - type: 'uint256[]', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountIn', - type: 'uint256', - }, - { - internalType: 'address[]', - name: 'path', - type: 'address[]', - }, - ], - name: 'getAmountsOut', - outputs: [ - { - internalType: 'uint256[]', - name: 'amounts', - type: 'uint256[]', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountA', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'reserveA', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'reserveB', - type: 'uint256', - }, - ], - name: 'quote', - outputs: [ - { - internalType: 'uint256', - name: 'amountB', - type: 'uint256', - }, - ], - stateMutability: 'pure', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'tokenA', - type: 'address', - }, - { - internalType: 'address', - name: 'tokenB', - type: 'address', - }, - { - internalType: 'uint256', - name: 'liquidity', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountAMin', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountBMin', - type: 'uint256', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - ], - name: 'removeLiquidity', - outputs: [ - { - internalType: 'uint256', - name: 'amountA', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountB', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'token', - type: 'address', - }, - { - internalType: 'uint256', - name: 'liquidity', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountTokenMin', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountETHMin', - type: 'uint256', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - ], - name: 'removeLiquidityETH', - outputs: [ - { - internalType: 'uint256', - name: 'amountToken', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountETH', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'token', - type: 'address', - }, - { - internalType: 'uint256', - name: 'liquidity', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountTokenMin', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountETHMin', - type: 'uint256', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - ], - name: 'removeLiquidityETHSupportingFeeOnTransferTokens', - outputs: [ - { - internalType: 'uint256', - name: 'amountETH', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'token', - type: 'address', - }, - { - internalType: 'uint256', - name: 'liquidity', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountTokenMin', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountETHMin', - type: 'uint256', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - { - internalType: 'bool', - name: 'approveMax', - type: 'bool', - }, - { - internalType: 'uint8', - name: 'v', - type: 'uint8', - }, - { - internalType: 'bytes32', - name: 'r', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 's', - type: 'bytes32', - }, - ], - name: 'removeLiquidityETHWithPermit', - outputs: [ - { - internalType: 'uint256', - name: 'amountToken', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountETH', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'token', - type: 'address', - }, - { - internalType: 'uint256', - name: 'liquidity', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountTokenMin', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountETHMin', - type: 'uint256', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - { - internalType: 'bool', - name: 'approveMax', - type: 'bool', - }, - { - internalType: 'uint8', - name: 'v', - type: 'uint8', - }, - { - internalType: 'bytes32', - name: 'r', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 's', - type: 'bytes32', - }, - ], - name: 'removeLiquidityETHWithPermitSupportingFeeOnTransferTokens', - outputs: [ - { - internalType: 'uint256', - name: 'amountETH', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'tokenA', - type: 'address', - }, - { - internalType: 'address', - name: 'tokenB', - type: 'address', - }, - { - internalType: 'uint256', - name: 'liquidity', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountAMin', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountBMin', - type: 'uint256', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - { - internalType: 'bool', - name: 'approveMax', - type: 'bool', - }, - { - internalType: 'uint8', - name: 'v', - type: 'uint8', - }, - { - internalType: 'bytes32', - name: 'r', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 's', - type: 'bytes32', - }, - ], - name: 'removeLiquidityWithPermit', - outputs: [ - { - internalType: 'uint256', - name: 'amountA', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountB', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountOut', - type: 'uint256', - }, - { - internalType: 'address[]', - name: 'path', - type: 'address[]', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - ], - name: 'swapETHForExactTokens', - outputs: [ - { - internalType: 'uint256[]', - name: 'amounts', - type: 'uint256[]', - }, - ], - stateMutability: 'payable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountOutMin', - type: 'uint256', - }, - { - internalType: 'address[]', - name: 'path', - type: 'address[]', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - ], - name: 'swapExactETHForTokens', - outputs: [ - { - internalType: 'uint256[]', - name: 'amounts', - type: 'uint256[]', - }, - ], - stateMutability: 'payable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountOutMin', - type: 'uint256', - }, - { - internalType: 'address[]', - name: 'path', - type: 'address[]', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - ], - name: 'swapExactETHForTokensSupportingFeeOnTransferTokens', - outputs: [], - stateMutability: 'payable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountIn', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountOutMin', - type: 'uint256', - }, - { - internalType: 'address[]', - name: 'path', - type: 'address[]', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - ], - name: 'swapExactTokensForETH', - outputs: [ - { - internalType: 'uint256[]', - name: 'amounts', - type: 'uint256[]', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountIn', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountOutMin', - type: 'uint256', - }, - { - internalType: 'address[]', - name: 'path', - type: 'address[]', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - ], - name: 'swapExactTokensForETHSupportingFeeOnTransferTokens', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountIn', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountOutMin', - type: 'uint256', - }, - { - internalType: 'address[]', - name: 'path', - type: 'address[]', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - ], - name: 'swapExactTokensForTokens', - outputs: [ - { - internalType: 'uint256[]', - name: 'amounts', - type: 'uint256[]', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountIn', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountOutMin', - type: 'uint256', - }, - { - internalType: 'address[]', - name: 'path', - type: 'address[]', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - ], - name: 'swapExactTokensForTokensSupportingFeeOnTransferTokens', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountOut', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountInMax', - type: 'uint256', - }, - { - internalType: 'address[]', - name: 'path', - type: 'address[]', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - ], - name: 'swapTokensForExactETH', - outputs: [ - { - internalType: 'uint256[]', - name: 'amounts', - type: 'uint256[]', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountOut', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountInMax', - type: 'uint256', - }, - { - internalType: 'address[]', - name: 'path', - type: 'address[]', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - ], - name: 'swapTokensForExactTokens', - outputs: [ - { - internalType: 'uint256[]', - name: 'amounts', - type: 'uint256[]', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, -] - -var abi$2 = [ - { - inputs: [ - { - internalType: 'address', - name: '_factory', - type: 'address', - }, - { - internalType: 'address', - name: '_WETH9', - type: 'address', - }, - ], - stateMutability: 'nonpayable', - type: 'constructor', - }, - { - inputs: [], - name: 'WETH9', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'factory', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes', - name: 'path', - type: 'bytes', - }, - { - internalType: 'uint256', - name: 'amountIn', - type: 'uint256', - }, - ], - name: 'quoteExactInput', - outputs: [ - { - internalType: 'uint256', - name: 'amountOut', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'tokenIn', - type: 'address', - }, - { - internalType: 'address', - name: 'tokenOut', - type: 'address', - }, - { - internalType: 'uint24', - name: 'fee', - type: 'uint24', - }, - { - internalType: 'uint256', - name: 'amountIn', - type: 'uint256', - }, - { - internalType: 'uint160', - name: 'sqrtPriceLimitX96', - type: 'uint160', - }, - ], - name: 'quoteExactInputSingle', - outputs: [ - { - internalType: 'uint256', - name: 'amountOut', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes', - name: 'path', - type: 'bytes', - }, - { - internalType: 'uint256', - name: 'amountOut', - type: 'uint256', - }, - ], - name: 'quoteExactOutput', - outputs: [ - { - internalType: 'uint256', - name: 'amountIn', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'tokenIn', - type: 'address', - }, - { - internalType: 'address', - name: 'tokenOut', - type: 'address', - }, - { - internalType: 'uint24', - name: 'fee', - type: 'uint24', - }, - { - internalType: 'uint256', - name: 'amountOut', - type: 'uint256', - }, - { - internalType: 'uint160', - name: 'sqrtPriceLimitX96', - type: 'uint160', - }, - ], - name: 'quoteExactOutputSingle', - outputs: [ - { - internalType: 'uint256', - name: 'amountIn', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'int256', - name: 'amount0Delta', - type: 'int256', - }, - { - internalType: 'int256', - name: 'amount1Delta', - type: 'int256', - }, - { - internalType: 'bytes', - name: 'path', - type: 'bytes', - }, - ], - name: 'uniswapV3SwapCallback', - outputs: [], - stateMutability: 'view', - type: 'function', - }, -] - -var abi$1 = [ - { - inputs: [], - name: 'getCurrentBlockTimestamp', - outputs: [ - { - internalType: 'uint256', - name: 'timestamp', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'addr', - type: 'address', - }, - ], - name: 'getEthBalance', - outputs: [ - { - internalType: 'uint256', - name: 'balance', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - components: [ - { - internalType: 'address', - name: 'target', - type: 'address', - }, - { - internalType: 'uint256', - name: 'gasLimit', - type: 'uint256', - }, - { - internalType: 'bytes', - name: 'callData', - type: 'bytes', - }, - ], - internalType: 'struct UniswapInterfaceMulticall.Call[]', - name: 'calls', - type: 'tuple[]', - }, - ], - name: 'multicall', - outputs: [ - { - internalType: 'uint256', - name: 'blockNumber', - type: 'uint256', - }, - { - components: [ - { - internalType: 'bool', - name: 'success', - type: 'bool', - }, - { - internalType: 'uint256', - name: 'gasUsed', - type: 'uint256', - }, - { - internalType: 'bytes', - name: 'returnData', - type: 'bytes', - }, - ], - internalType: 'struct UniswapInterfaceMulticall.Result[]', - name: 'returnData', - type: 'tuple[]', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, -] - -var ARGENT_WALLET_DETECTOR_ABI = [ - { - inputs: [ - { - internalType: 'bytes32[]', - name: '_codes', - type: 'bytes32[]', - }, - { - internalType: 'address[]', - name: '_implementations', - type: 'address[]', - }, - ], - stateMutability: 'nonpayable', - type: 'constructor', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'code', - type: 'bytes32', - }, - ], - name: 'CodeAdded', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'implementation', - type: 'address', - }, - ], - name: 'ImplementationAdded', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: '_newOwner', - type: 'address', - }, - ], - name: 'OwnerChanged', - type: 'event', - }, - { - inputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - ], - name: 'acceptedCodes', - outputs: [ - { - internalType: 'bool', - name: 'exists', - type: 'bool', - }, - { - internalType: 'uint128', - name: 'index', - type: 'uint128', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'acceptedImplementations', - outputs: [ - { - internalType: 'bool', - name: 'exists', - type: 'bool', - }, - { - internalType: 'uint128', - name: 'index', - type: 'uint128', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes32', - name: '_code', - type: 'bytes32', - }, - ], - name: 'addCode', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_argentWallet', - type: 'address', - }, - ], - name: 'addCodeAndImplementationFromWallet', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_impl', - type: 'address', - }, - ], - name: 'addImplementation', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_newOwner', - type: 'address', - }, - ], - name: 'changeOwner', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'getCodes', - outputs: [ - { - internalType: 'bytes32[]', - name: '', - type: 'bytes32[]', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'getImplementations', - outputs: [ - { - internalType: 'address[]', - name: '', - type: 'address[]', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_wallet', - type: 'address', - }, - ], - name: 'isArgentWallet', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'owner', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, -] - -var EIP_2612 = [ - { - constant: true, - inputs: [ - { - name: 'owner', - type: 'address', - }, - ], - name: 'nonces', - outputs: [ - { - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'DOMAIN_SEPARATOR', - outputs: [ - { - name: '', - type: 'bytes32', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, -] - -var ENS_PUBLIC_RESOLVER_ABI = [ - { - inputs: [ - { - internalType: 'contract ENS', - name: '_ens', - type: 'address', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'constructor', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: true, - internalType: 'uint256', - name: 'contentType', - type: 'uint256', - }, - ], - name: 'ABIChanged', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: false, - internalType: 'address', - name: 'a', - type: 'address', - }, - ], - name: 'AddrChanged', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: false, - internalType: 'uint256', - name: 'coinType', - type: 'uint256', - }, - { - indexed: false, - internalType: 'bytes', - name: 'newAddress', - type: 'bytes', - }, - ], - name: 'AddressChanged', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'target', - type: 'address', - }, - { - indexed: false, - internalType: 'bool', - name: 'isAuthorised', - type: 'bool', - }, - ], - name: 'AuthorisationChanged', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: false, - internalType: 'bytes', - name: 'hash', - type: 'bytes', - }, - ], - name: 'ContenthashChanged', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: false, - internalType: 'bytes', - name: 'name', - type: 'bytes', - }, - { - indexed: false, - internalType: 'uint16', - name: 'resource', - type: 'uint16', - }, - { - indexed: false, - internalType: 'bytes', - name: 'record', - type: 'bytes', - }, - ], - name: 'DNSRecordChanged', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: false, - internalType: 'bytes', - name: 'name', - type: 'bytes', - }, - { - indexed: false, - internalType: 'uint16', - name: 'resource', - type: 'uint16', - }, - ], - name: 'DNSRecordDeleted', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - ], - name: 'DNSZoneCleared', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: true, - internalType: 'bytes4', - name: 'interfaceID', - type: 'bytes4', - }, - { - indexed: false, - internalType: 'address', - name: 'implementer', - type: 'address', - }, - ], - name: 'InterfaceChanged', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: false, - internalType: 'string', - name: 'name', - type: 'string', - }, - ], - name: 'NameChanged', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: false, - internalType: 'bytes32', - name: 'x', - type: 'bytes32', - }, - { - indexed: false, - internalType: 'bytes32', - name: 'y', - type: 'bytes32', - }, - ], - name: 'PubkeyChanged', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: true, - internalType: 'string', - name: 'indexedKey', - type: 'string', - }, - { - indexed: false, - internalType: 'string', - name: 'key', - type: 'string', - }, - ], - name: 'TextChanged', - type: 'event', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'uint256', - name: 'contentTypes', - type: 'uint256', - }, - ], - name: 'ABI', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - { - internalType: 'bytes', - name: '', - type: 'bytes', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - ], - name: 'addr', - outputs: [ - { - internalType: 'address payable', - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - { - internalType: 'address', - name: '', - type: 'address', - }, - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'authorisations', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - ], - name: 'clearDNSZone', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - ], - name: 'contenthash', - outputs: [ - { - internalType: 'bytes', - name: '', - type: 'bytes', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 'name', - type: 'bytes32', - }, - { - internalType: 'uint16', - name: 'resource', - type: 'uint16', - }, - ], - name: 'dnsRecord', - outputs: [ - { - internalType: 'bytes', - name: '', - type: 'bytes', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 'name', - type: 'bytes32', - }, - ], - name: 'hasDNSRecords', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'bytes4', - name: 'interfaceID', - type: 'bytes4', - }, - ], - name: 'interfaceImplementer', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - ], - name: 'name', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - ], - name: 'pubkey', - outputs: [ - { - internalType: 'bytes32', - name: 'x', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 'y', - type: 'bytes32', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'uint256', - name: 'contentType', - type: 'uint256', - }, - { - internalType: 'bytes', - name: 'data', - type: 'bytes', - }, - ], - name: 'setABI', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'uint256', - name: 'coinType', - type: 'uint256', - }, - { - internalType: 'bytes', - name: 'a', - type: 'bytes', - }, - ], - name: 'setAddr', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'address', - name: 'a', - type: 'address', - }, - ], - name: 'setAddr', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'address', - name: 'target', - type: 'address', - }, - { - internalType: 'bool', - name: 'isAuthorised', - type: 'bool', - }, - ], - name: 'setAuthorisation', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'bytes', - name: 'hash', - type: 'bytes', - }, - ], - name: 'setContenthash', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'bytes', - name: 'data', - type: 'bytes', - }, - ], - name: 'setDNSRecords', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'bytes4', - name: 'interfaceID', - type: 'bytes4', - }, - { - internalType: 'address', - name: 'implementer', - type: 'address', - }, - ], - name: 'setInterface', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'string', - name: 'name', - type: 'string', - }, - ], - name: 'setName', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 'x', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 'y', - type: 'bytes32', - }, - ], - name: 'setPubkey', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'string', - name: 'key', - type: 'string', - }, - { - internalType: 'string', - name: 'value', - type: 'string', - }, - ], - name: 'setText', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes4', - name: 'interfaceID', - type: 'bytes4', - }, - ], - name: 'supportsInterface', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'pure', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'string', - name: 'key', - type: 'string', - }, - ], - name: 'text', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, -] - -var ENS_ABI = [ - { - inputs: [ - { - internalType: 'contract ENS', - name: '_old', - type: 'address', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'constructor', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'operator', - type: 'address', - }, - { - indexed: false, - internalType: 'bool', - name: 'approved', - type: 'bool', - }, - ], - name: 'ApprovalForAll', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: true, - internalType: 'bytes32', - name: 'label', - type: 'bytes32', - }, - { - indexed: false, - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'NewOwner', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: false, - internalType: 'address', - name: 'resolver', - type: 'address', - }, - ], - name: 'NewResolver', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: false, - internalType: 'uint64', - name: 'ttl', - type: 'uint64', - }, - ], - name: 'NewTTL', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: false, - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'Transfer', - type: 'event', - }, - { - constant: true, - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - internalType: 'address', - name: 'operator', - type: 'address', - }, - ], - name: 'isApprovedForAll', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'old', - outputs: [ - { - internalType: 'contract ENS', - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - ], - name: 'owner', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - ], - name: 'recordExists', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - ], - name: 'resolver', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'address', - name: 'operator', - type: 'address', - }, - { - internalType: 'bool', - name: 'approved', - type: 'bool', - }, - ], - name: 'setApprovalForAll', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'setOwner', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - internalType: 'address', - name: 'resolver', - type: 'address', - }, - { - internalType: 'uint64', - name: 'ttl', - type: 'uint64', - }, - ], - name: 'setRecord', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'address', - name: 'resolver', - type: 'address', - }, - ], - name: 'setResolver', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 'label', - type: 'bytes32', - }, - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'setSubnodeOwner', - outputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 'label', - type: 'bytes32', - }, - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - internalType: 'address', - name: 'resolver', - type: 'address', - }, - { - internalType: 'uint64', - name: 'ttl', - type: 'uint64', - }, - ], - name: 'setSubnodeRecord', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'uint64', - name: 'ttl', - type: 'uint64', - }, - ], - name: 'setTTL', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - ], - name: 'ttl', - outputs: [ - { - internalType: 'uint64', - name: '', - type: 'uint64', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, -] - -var ERC20ABI = [ - { - constant: true, - inputs: [], - name: 'name', - outputs: [ - { - name: '', - type: 'string', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - name: '_spender', - type: 'address', - }, - { - name: '_value', - type: 'uint256', - }, - ], - name: 'approve', - outputs: [ - { - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'totalSupply', - outputs: [ - { - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - name: '_from', - type: 'address', - }, - { - name: '_to', - type: 'address', - }, - { - name: '_value', - type: 'uint256', - }, - ], - name: 'transferFrom', - outputs: [ - { - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'decimals', - outputs: [ - { - name: '', - type: 'uint8', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - name: '_owner', - type: 'address', - }, - ], - name: 'balanceOf', - outputs: [ - { - name: 'balance', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'symbol', - outputs: [ - { - name: '', - type: 'string', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - name: '_to', - type: 'address', - }, - { - name: '_value', - type: 'uint256', - }, - ], - name: 'transfer', - outputs: [ - { - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [ - { - name: '_owner', - type: 'address', - }, - { - name: '_spender', - type: 'address', - }, - ], - name: 'allowance', - outputs: [ - { - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - payable: true, - stateMutability: 'payable', - type: 'fallback', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: 'owner', - type: 'address', - }, - { - indexed: true, - name: 'spender', - type: 'address', - }, - { - indexed: false, - name: 'value', - type: 'uint256', - }, - ], - name: 'Approval', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: 'from', - type: 'address', - }, - { - indexed: true, - name: 'to', - type: 'address', - }, - { - indexed: false, - name: 'value', - type: 'uint256', - }, - ], - name: 'Transfer', - type: 'event', - }, -] - -var ERC20_BYTES32_ABI = [ - { - constant: true, - inputs: [], - name: 'name', - outputs: [ - { - name: '', - type: 'bytes32', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'symbol', - outputs: [ - { - name: '', - type: 'bytes32', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, -] - -var WETH_ABI = [ -<<<<<<< HEAD - { - constant: true, - inputs: [ - ], - name: "name", - outputs: [ - { - name: "", - type: "string" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, +var abi$6 = [ { - constant: false, inputs: [ { - name: "guy", + internalType: "address", + name: "_rewardsDistribution", type: "address" }, { - name: "wad", - type: "uint256" - } - ], - name: "approve", - outputs: [ + internalType: "address", + name: "_rewardsToken", + type: "address" + }, { - name: "", - type: "bool" + internalType: "address", + name: "_stakingToken", + type: "address" } ], payable: false, stateMutability: "nonpayable", - type: "function" + type: "constructor" }, { - constant: true, + anonymous: false, inputs: [ - ], - name: "totalSupply", - outputs: [ { - name: "", + indexed: false, + internalType: "uint256", + name: "reward", type: "uint256" } ], - payable: false, - stateMutability: "view", - type: "function" + name: "RewardAdded", + type: "event" }, { - constant: false, + anonymous: false, inputs: [ { - name: "src", - type: "address" - }, - { - name: "dst", + indexed: true, + internalType: "address", + name: "user", type: "address" }, { - name: "wad", + indexed: false, + internalType: "uint256", + name: "reward", type: "uint256" } ], - name: "transferFrom", - outputs: [ - { - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" + name: "RewardPaid", + type: "event" }, { - constant: false, + anonymous: false, inputs: [ { - name: "wad", + indexed: true, + internalType: "address", + name: "user", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "amount", type: "uint256" } ], - name: "withdraw", - outputs: [ + name: "Staked", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "user", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256" + } ], - payable: false, - stateMutability: "nonpayable", - type: "function" + name: "Withdrawn", + type: "event" }, { constant: true, inputs: [ + { + internalType: "address", + name: "account", + type: "address" + } ], - name: "decimals", + name: "balanceOf", outputs: [ { + internalType: "uint256", name: "", - type: "uint8" + type: "uint256" } ], payable: false, @@ -6441,13 +641,15 @@ var WETH_ABI = [ constant: true, inputs: [ { - name: "", + internalType: "address", + name: "account", type: "address" } ], - name: "balanceOf", + name: "earned", outputs: [ { + internalType: "uint256", name: "", type: "uint256" } @@ -6456,15 +658,38 @@ var WETH_ABI = [ stateMutability: "view", type: "function" }, + { + constant: false, + inputs: [ + ], + name: "exit", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + ], + name: "getReward", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, { constant: true, inputs: [ ], - name: "symbol", + name: "getRewardForDuration", outputs: [ { + internalType: "uint256", name: "", - type: "string" + type: "uint256" } ], payable: false, @@ -6472,54 +697,93 @@ var WETH_ABI = [ type: "function" }, { - constant: false, + constant: true, inputs: [ + ], + name: "lastTimeRewardApplicable", + outputs: [ { - name: "dst", - type: "address" - }, - { - name: "wad", + internalType: "uint256", + name: "", type: "uint256" } ], - name: "transfer", + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "lastUpdateTime", outputs: [ { + internalType: "uint256", name: "", - type: "bool" + type: "uint256" } ], payable: false, - stateMutability: "nonpayable", + stateMutability: "view", type: "function" }, { constant: false, inputs: [ + { + internalType: "uint256", + name: "reward", + type: "uint256" + } ], - name: "deposit", + name: "notifyRewardAmount", outputs: [ ], - payable: true, - stateMutability: "payable", + payable: false, + stateMutability: "nonpayable", type: "function" }, { constant: true, inputs: [ + ], + name: "periodFinish", + outputs: [ { + internalType: "uint256", name: "", - type: "address" - }, + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "rewardPerToken", + outputs: [ { + internalType: "uint256", name: "", - type: "address" + type: "uint256" } ], - name: "allowance", + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "rewardPerTokenStored", outputs: [ { + internalType: "uint256", name: "", type: "uint256" } @@ -6529,33178 +793,20202 @@ var WETH_ABI = [ type: "function" }, { - payable: true, - stateMutability: "payable", - type: "fallback" + constant: true, + inputs: [ + ], + name: "rewardRate", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" }, { - anonymous: false, + constant: true, inputs: [ { - indexed: true, - name: "src", - type: "address" - }, - { - indexed: true, - name: "guy", + internalType: "address", + name: "", type: "address" - }, + } + ], + name: "rewards", + outputs: [ { - indexed: false, - name: "wad", + internalType: "uint256", + name: "", type: "uint256" } ], - name: "Approval", - type: "event" + payable: false, + stateMutability: "view", + type: "function" }, { - anonymous: false, + constant: true, inputs: [ + ], + name: "rewardsDistribution", + outputs: [ { - indexed: true, - name: "src", - type: "address" - }, - { - indexed: true, - name: "dst", + internalType: "address", + name: "", type: "address" - }, + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "rewardsDuration", + outputs: [ { - indexed: false, - name: "wad", + internalType: "uint256", + name: "", type: "uint256" } ], - name: "Transfer", - type: "event" + payable: false, + stateMutability: "view", + type: "function" }, { - anonymous: false, + constant: true, inputs: [ + ], + name: "rewardsToken", + outputs: [ { - indexed: true, - name: "dst", + internalType: "contract IERC20", + name: "", type: "address" - }, + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ { - indexed: false, - name: "wad", + internalType: "uint256", + name: "amount", type: "uint256" } ], - name: "Deposit", - type: "event" + name: "stake", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" }, { - anonymous: false, + constant: false, inputs: [ { - indexed: true, - name: "src", - type: "address" + internalType: "uint256", + name: "amount", + type: "uint256" }, { - indexed: false, - name: "wad", + internalType: "uint256", + name: "deadline", type: "uint256" + }, + { + internalType: "uint8", + name: "v", + type: "uint8" + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32" } ], - name: "Withdrawal", - type: "event" - } -]; - -// returns the checksummed address if the address is valid, otherwise returns false -function isAddress(value) { - try { - return address.getAddress(value); - } - catch (_a) { - return false; - } -} -// shorten the checksummed version of the input address to have 0x + 4 characters at start and end -function shortenAddress(address, chars) { - if (chars === void 0) { chars = 4; } - var parsed = isAddress(address); - if (!parsed) { - throw Error("Invalid 'address' parameter '" + address + "'."); - } - return parsed.substring(0, chars + 2) + "..." + parsed.substring(42 - chars); -} -// account is not optional -function getSigner(library, account) { - return library.getSigner(account).connectUnchecked(); -} -// account is optional -function getProviderOrSigner(library, account) { - return account ? getSigner(library, account) : library; -} -// account is optional -function getContract(address, ABI, library, account) { - if (!isAddress(address) || address === constants.AddressZero) { - throw Error("Invalid 'address' parameter '" + address + "'."); - } - return new contracts.Contract(address, ABI, getProviderOrSigner(library, account)); -} -function escapeRegExp(string) { - return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string -} -function isTokenOnList(chainTokenMap, token) { - var _a; - return Boolean((token === null || token === void 0 ? void 0 : token.isToken) && ((_a = chainTokenMap[token.chainId]) === null || _a === void 0 ? void 0 : _a[token.address])); -} - -// returns null on errors -function useContract(addressOrAddressMap, ABI, withSignerIfPossible) { - if (withSignerIfPossible === void 0) { withSignerIfPossible = true; } - var _a = useActiveWeb3React(), library = _a.library, account = _a.account, chainId = _a.chainId; - return React.useMemo(function () { - if (!addressOrAddressMap || !ABI || !library || !chainId) - return null; - var address; - if (typeof addressOrAddressMap === 'string') - address = addressOrAddressMap; - else - address = addressOrAddressMap[chainId]; - if (!address) - return null; - try { - return getContract(address, ABI, library, withSignerIfPossible && account ? account : undefined); - } - catch (error) { - console.error('Failed to get contract', error); - return null; - } - }, [addressOrAddressMap, ABI, library, chainId, withSignerIfPossible, account]); -} -function useTokenContract(tokenAddress, withSignerIfPossible) { - return useContract(tokenAddress, ERC20ABI, withSignerIfPossible); -} -function useWETHContract(withSignerIfPossible) { - var _a; - var chainId = useActiveWeb3React().chainId; - return useContract(chainId ? (_a = WRAPPED_NATIVE_CURRENCY[chainId]) === null || _a === void 0 ? void 0 : _a.address : undefined, WETH_ABI, withSignerIfPossible); -} -function useArgentWalletDetectorContract() { - return useContract(ARGENT_WALLET_DETECTOR_ADDRESS, ARGENT_WALLET_DETECTOR_ABI, false); -} -function useENSRegistrarContract(withSignerIfPossible) { - return useContract(ENS_REGISTRAR_ADDRESSES, ENS_ABI, withSignerIfPossible); -} -function useENSResolverContract(address, withSignerIfPossible) { - return useContract(address, ENS_PUBLIC_RESOLVER_ABI, withSignerIfPossible); -} -function useBytes32TokenContract(tokenAddress, withSignerIfPossible) { - return useContract(tokenAddress, ERC20_BYTES32_ABI, withSignerIfPossible); -} -function useEIP2612Contract(tokenAddress) { - return useContract(tokenAddress, EIP_2612, false); -} -function useV2RouterContract() { - return useContract(V2_ROUTER_ADDRESS, abi$3, true); -} -function useInterfaceMulticall() { - return useContract(MULTICALL_ADDRESS, abi$1, false); -} -function useV3Quoter() { - return useContract(QUOTER_ADDRESSES, abi$2); -} - -/** - * Debounces updates to a value. - * Non-primitives *must* wrap the value in useMemo, or the value will be updated due to referential inequality. - */ -// modified from https://usehooks.com/useDebounce/ -function useDebounce(value, delay) { - var _a = __read(React.useState(value), 2), debouncedValue = _a[0], setDebouncedValue = _a[1]; - React.useEffect(function () { - // Update debounced value after delay - var handler = setTimeout(function () { - setDebouncedValue(value); - }, delay); - // Cancel the timeout if value changes (also on delay change or unmount) - // This is how we prevent debounced value from updating if value is changed ... - // .. within the delay period. Timeout gets cleared and restarted. - return function () { - clearTimeout(handler); - }; - }, [value, delay]); - return debouncedValue; -} - -var VISIBILITY_STATE_SUPPORTED = 'visibilityState' in document; -function isWindowVisible() { - return !VISIBILITY_STATE_SUPPORTED || document.visibilityState !== 'hidden'; -} -/** - * Returns whether the window is currently visible to the user. - */ -function useIsWindowVisible() { - var _a = __read(React.useState(isWindowVisible()), 2), focused = _a[0], setFocused = _a[1]; - var listener = React.useCallback(function () { - setFocused(isWindowVisible()); - }, [setFocused]); - React.useEffect(function () { - if (!VISIBILITY_STATE_SUPPORTED) - return undefined; - document.addEventListener('visibilitychange', listener); - return function () { - document.removeEventListener('visibilitychange', listener); - }; - }, [listener]); - return focused; -} + name: "stakeWithPermit", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "stakingToken", + outputs: [ + { + internalType: "contract IERC20", + name: "", + type: "address" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "totalSupply", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "userRewardPerTokenPaid", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "withdraw", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + } +]; -function useBlock() { - var _a = useActiveWeb3React(), chainId = _a.chainId, library = _a.library; - var windowVisible = useIsWindowVisible(); - var _b = __read(React.useState({ chainId: chainId }), 2), state = _b[0], setState = _b[1]; - var onBlock = React.useCallback(function (block) { - setState(function (state) { - if (state.chainId === chainId) { - if (typeof state.block !== 'number') - return { chainId: chainId, block: block }; - return { chainId: chainId, block: Math.max(block, state.block) }; - } - return state; - }); - }, [chainId]); - React.useEffect(function () { - if (library && chainId && windowVisible) { - setState({ chainId: chainId }); - library - .getBlockNumber() - .then(onBlock) - .catch(function (error) { - console.error("Failed to get block number for chainId " + chainId, error); - }); - library.on('block', onBlock); - return function () { - library.removeListener('block', onBlock); - }; - } - return undefined; - }, [chainId, library, onBlock, windowVisible]); - var debouncedBlock = useDebounce(state.block, 100); - return state.block ? debouncedBlock : undefined; -} -var blockAtom = jotai.atom(undefined); -function BlockUpdater() { - var setBlock = utils.useUpdateAtom(blockAtom); - var block = useBlock(); - React.useEffect(function () { - setBlock(block); - }, [block, setBlock]); - return null; -} -/** Requires that BlockUpdater be installed in the DOM tree. */ -function useBlockNumber() { - var chainId = useActiveWeb3React().chainId; - var block = utils.useAtomValue(blockAtom); - return chainId ? block : undefined; -} -function useFastForwardBlockNumber() { - return utils.useUpdateAtom(blockAtom); -} - -var _a$c; -var multicall = reduxMulticall.createMulticall(); -var reducer = redux.combineReducers((_a$c = {}, _a$c[multicall.reducerPath] = multicall.reducer, _a$c)); -redux.createStore(reducer); -function MulticallUpdater() { - var latestBlockNumber = useBlockNumber(); - var chainId = useActiveWeb3React().chainId; - var contract = useInterfaceMulticall(); - return jsxRuntime.jsx(multicall.Updater, { chainId: chainId, latestBlockNumber: latestBlockNumber, contract: contract }, void 0); -} - -function useMultipleContractSingleData() { - var _a; - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var _b = useCallContext(), chainId = _b.chainId, latestBlock = _b.latestBlock; - return (_a = multicall.hooks).useMultipleContractSingleData.apply(_a, __spreadArray([chainId, latestBlock], __read(args), false)); -} -function useSingleCallResult() { - var _a; - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var _b = useCallContext(), chainId = _b.chainId, latestBlock = _b.latestBlock; - return (_a = multicall.hooks).useSingleCallResult.apply(_a, __spreadArray([chainId, latestBlock], __read(args), false)); -} -function useSingleContractMultipleData() { - var _a; - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var _b = useCallContext(), chainId = _b.chainId, latestBlock = _b.latestBlock; - return (_a = multicall.hooks).useSingleContractMultipleData.apply(_a, __spreadArray([chainId, latestBlock], __read(args), false)); -} -function useSingleContractWithCallData() { - var _a; - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var _b = useCallContext(), chainId = _b.chainId, latestBlock = _b.latestBlock; - return (_a = multicall.hooks).useSingleContractWithCallData.apply(_a, __spreadArray([chainId, latestBlock], __read(args), false)); -} -function useCallContext() { - var chainId = useActiveWeb3React().chainId; - var latestBlock = useBlockNumber(); - return { chainId: chainId, latestBlock: latestBlock }; -} - -function useNativeCurrency() { - var chainId = useActiveWeb3React().chainId; - return React.useMemo(function () { - return chainId - ? nativeOnChain(chainId) - : // display mainnet when not connected - nativeOnChain(SupportedChainId.MAINNET); - }, [chainId]); -} - -var EMPTY_CONNECTOR = core$1.initializeConnector(function () { return empty.EMPTY; }); -utils.atomWithDefault(function () { return EMPTY_CONNECTOR; }); -utils.atomWithDefault(function () { return EMPTY_CONNECTOR; }); - -var REGISTRAR_ABI = [ - { - constant: true, - inputs: [ - { - name: 'node', - type: 'bytes32', - }, - ], - name: 'resolver', - outputs: [ - { - name: 'resolverAddress', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, -]; -var REGISTRAR_ADDRESS = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'; -var RESOLVER_ABI = [ - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - ], - name: 'contenthash', - outputs: [ - { - internalType: 'bytes', - name: '', - type: 'bytes', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, -]; -// cache the resolver contracts since most of them are the public resolver -function resolverContract(resolverAddress, provider) { - return new contracts.Contract(resolverAddress, RESOLVER_ABI, provider); -} -/** - * Fetches and decodes the result of an ENS contenthash lookup on mainnet to a URI - * @param ensName to resolve - * @param provider provider to use to fetch the data - */ -function resolveENSContentHash(ensName, provider) { - return __awaiter(this, void 0, void 0, function () { - var ensRegistrarContract, hash$1, resolverAddress; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - ensRegistrarContract = new contracts.Contract(REGISTRAR_ADDRESS, REGISTRAR_ABI, provider); - hash$1 = hash.namehash(ensName); - return [4 /*yield*/, ensRegistrarContract.resolver(hash$1)]; - case 1: - resolverAddress = _a.sent(); - return [2 /*return*/, resolverContract(resolverAddress, provider).contenthash(hash$1)]; - } - }); - }); -} +var abi$5 = [ + { + inputs: [ + { + internalType: "address", + name: "token_", + type: "address" + }, + { + internalType: "bytes32", + name: "merkleRoot_", + type: "bytes32" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint256", + name: "index", + type: "uint256" + }, + { + indexed: false, + internalType: "address", + name: "account", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "Claimed", + type: "event" + }, + { + inputs: [ + { + internalType: "uint256", + name: "index", + type: "uint256" + }, + { + internalType: "address", + name: "account", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + }, + { + internalType: "bytes32[]", + name: "merkleProof", + type: "bytes32[]" + } + ], + name: "claim", + outputs: [ + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "index", + type: "uint256" + } + ], + name: "isClaimed", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + ], + name: "merkleRoot", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + ], + name: "token", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + } +]; -function hexToUint8Array(hex) { - hex = hex.startsWith('0x') ? hex.substr(2) : hex; - if (hex.length % 2 !== 0) - throw new Error('hex must have length that is multiple of 2'); - var arr = new Uint8Array(hex.length / 2); - for (var i = 0; i < arr.length; i++) { - arr[i] = parseInt(hex.substr(i * 2, 2), 16); - } - return arr; -} -var UTF_8_DECODER = new TextDecoder('utf-8'); -/** - * Returns the URI representation of the content hash for supported codecs - * @param contenthash to decode - */ -function contenthashToUri(contenthash) { - var data = hexToUint8Array(contenthash); - var codec = multicodec.getNameFromData(data); - switch (codec) { - case 'ipfs-ns': { - var unprefixedData = multicodec.rmPrefix(data); - var cid = new CID__default["default"](unprefixedData); - return "ipfs://" + multihashes.toB58String(cid.multihash); - } - case 'ipns-ns': { - var unprefixedData = multicodec.rmPrefix(data); - var cid = new CID__default["default"](unprefixedData); - var multihash = multihashes.decode(cid.multihash); - if (multihash.name === 'identity') { - return "ipns://" + UTF_8_DECODER.decode(multihash.digest).trim(); - } - else { - return "ipns://" + multihashes.toB58String(cid.multihash); - } - } - default: - throw new Error("Unrecognized codec: " + codec); - } -} - -var ENS_NAME_REGEX$1 = /^(([a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\.)+)eth(\/.*)?$/; -function parseENSAddress(ensAddress) { - var match = ensAddress.match(ENS_NAME_REGEX$1); - if (!match) - return undefined; - return { ensName: match[1].toLowerCase() + "eth", ensPath: match[4] }; -} - -/** - * Given a URI that may be ipfs, ipns, http, https, ar, or data protocol, return the fetch-able http(s) URLs for the same content - * @param uri to convert to fetch-able http url - */ -function uriToHttp(uri) { - var _a, _b, _c; - var protocol = uri.split(':')[0].toLowerCase(); - switch (protocol) { - case 'data': - return [uri]; - case 'https': - return [uri]; - case 'http': - return ['https' + uri.substr(4), uri]; - case 'ipfs': - var hash = (_a = uri.match(/^ipfs:(\/\/)?(.*)$/i)) === null || _a === void 0 ? void 0 : _a[2]; - return ["https://cloudflare-ipfs.com/ipfs/" + hash + "/", "https://ipfs.io/ipfs/" + hash + "/"]; - case 'ipns': - var name_1 = (_b = uri.match(/^ipns:(\/\/)?(.*)$/i)) === null || _b === void 0 ? void 0 : _b[2]; - return ["https://cloudflare-ipfs.com/ipns/" + name_1 + "/", "https://ipfs.io/ipns/" + name_1 + "/"]; - case 'ar': - var tx = (_c = uri.match(/^ar:(\/\/)?(.*)$/i)) === null || _c === void 0 ? void 0 : _c[2]; - return ["https://arweave.net/" + tx]; - default: - return []; - } -} - -var ValidationSchema; -(function (ValidationSchema) { - ValidationSchema["LIST"] = "list"; - ValidationSchema["TOKENS"] = "tokens"; -})(ValidationSchema || (ValidationSchema = {})); -var validator = new Promise(function (resolve) { return __awaiter(void 0, void 0, void 0, function () { - var _a, ajv, schema, validator; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, Promise.all([Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('ajv')); }), Promise.resolve().then(function () { return tokenlist_schema$1; })])]; - case 1: - _a = __read.apply(void 0, [_b.sent(), 2]), ajv = _a[0], schema = _a[1]; - validator = new ajv.default({ allErrors: true }) - .addSchema(schema, ValidationSchema.LIST) - // Adds a meta scheme of Pick - .addSchema(__assign(__assign({}, schema), { $id: schema.$id + '#tokens', required: ['tokens'] }), ValidationSchema.TOKENS); - resolve(validator); - return [2 /*return*/]; - } - }); -}); }); -function getValidationErrors(validate) { - var _a, _b; - return ((_b = (_a = validate === null || validate === void 0 ? void 0 : validate.errors) === null || _a === void 0 ? void 0 : _a.map(function (error) { return [error.dataPath, error.message].filter(Boolean).join(' '); }).join('; ')) !== null && _b !== void 0 ? _b : 'unknown error'); -} -/** - * Validates a token list. - * @param json the TokenList to validate - */ -function validateTokenList(json) { - return __awaiter(this, void 0, void 0, function () { - var validate; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, validator]; - case 1: - validate = (_a.sent()).getSchema(ValidationSchema.LIST); - if (validate === null || validate === void 0 ? void 0 : validate(json)) { - return [2 /*return*/, json]; - } - throw new Error("Token list failed validation: " + getValidationErrors(validate)); - } - }); - }); -} - -var listCache = new Map(); -/** Fetches and validates a token list. */ -function fetchTokenList$1(listUrl, resolveENSContentHash) { - var _a; - return __awaiter(this, void 0, void 0, function () { - var cached, urls, parsedENS, contentHashUri, error_1, message, translatedUri, message, i, url, isLast, response, error_2, message, message, json, list; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - cached = listCache === null || listCache === void 0 ? void 0 : listCache.get(listUrl) // avoid spurious re-fetches - ; - if (cached) { - return [2 /*return*/, cached]; - } - parsedENS = parseENSAddress(listUrl); - if (!parsedENS) return [3 /*break*/, 5]; - contentHashUri = void 0; - _b.label = 1; - case 1: - _b.trys.push([1, 3, , 4]); - return [4 /*yield*/, resolveENSContentHash(parsedENS.ensName)]; - case 2: - contentHashUri = _b.sent(); - return [3 /*break*/, 4]; - case 3: - error_1 = _b.sent(); - message = "failed to resolve ENS name: " + parsedENS.ensName; - console.debug(message, error_1); - throw new Error(message); - case 4: - translatedUri = void 0; - try { - translatedUri = contenthashToUri(contentHashUri); - } - catch (error) { - message = "failed to translate contenthash to URI: " + contentHashUri; - console.debug(message, error); - throw new Error(message); - } - urls = uriToHttp("" + translatedUri + ((_a = parsedENS.ensPath) !== null && _a !== void 0 ? _a : '')); - return [3 /*break*/, 6]; - case 5: - urls = uriToHttp(listUrl); - _b.label = 6; - case 6: - i = 0; - _b.label = 7; - case 7: - if (!(i < urls.length)) return [3 /*break*/, 15]; - url = urls[i]; - isLast = i === urls.length - 1; - response = void 0; - _b.label = 8; - case 8: - _b.trys.push([8, 10, , 11]); - return [4 /*yield*/, fetch(url, { credentials: 'omit' })]; - case 9: - response = _b.sent(); - return [3 /*break*/, 11]; - case 10: - error_2 = _b.sent(); - message = "failed to fetch list: " + listUrl; - console.debug(message, error_2); - if (isLast) - throw new Error(message); - return [3 /*break*/, 14]; - case 11: - if (!response.ok) { - message = "failed to fetch list: " + listUrl; - console.debug(message, response.statusText); - if (isLast) - throw new Error(message); - return [3 /*break*/, 14]; - } - return [4 /*yield*/, response.json()]; - case 12: - json = _b.sent(); - return [4 /*yield*/, validateTokenList(json)]; - case 13: - list = _b.sent(); - listCache === null || listCache === void 0 ? void 0 : listCache.set(listUrl, list); - return [2 /*return*/, list]; - case 14: - i++; - return [3 /*break*/, 7]; - case 15: throw new Error('Unrecognized list URL protocol.'); - } - }); - }); -} - -/** - * Returns a map of the given addresses to their eventually consistent ETH balances. - */ -function useNativeCurrencyBalances(uncheckedAddresses) { - var chainId = useActiveWeb3React().chainId; - var multicallContract = useInterfaceMulticall(); - var validAddressInputs = React.useMemo(function () { - return uncheckedAddresses - ? uncheckedAddresses - .map(isAddress) - .filter(function (a) { return a !== false; }) - .sort() - .map(function (addr) { return [addr]; }) - : []; - }, [uncheckedAddresses]); - var results = useSingleContractMultipleData(multicallContract, 'getEthBalance', validAddressInputs); - return React.useMemo(function () { - return validAddressInputs.reduce(function (memo, _a, i) { - var _b, _c; - var _d = __read(_a, 1), address = _d[0]; - var value = (_c = (_b = results === null || results === void 0 ? void 0 : results[i]) === null || _b === void 0 ? void 0 : _b.result) === null || _c === void 0 ? void 0 : _c[0]; - if (value && chainId) - memo[address] = sdkCore.CurrencyAmount.fromRawAmount(nativeOnChain(chainId), JSBI__default["default"].BigInt(value.toString())); - return memo; - }, {}); - }, [validAddressInputs, chainId, results]); -} -var ERC20Interface = new abi$6.Interface(ERC20ABI); -var tokenBalancesGasRequirement = { gasRequired: 125000 }; -/** - * Returns a map of token addresses to their eventually consistent token balances for a single account. - */ -function useTokenBalancesWithLoadingIndicator(address, tokens) { - var validatedTokens = React.useMemo(function () { var _a; return (_a = tokens === null || tokens === void 0 ? void 0 : tokens.filter(function (t) { return isAddress(t === null || t === void 0 ? void 0 : t.address) !== false; })) !== null && _a !== void 0 ? _a : []; }, [tokens]); - var validatedTokenAddresses = React.useMemo(function () { return validatedTokens.map(function (vt) { return vt.address; }); }, [validatedTokens]); - var balances = useMultipleContractSingleData(validatedTokenAddresses, ERC20Interface, 'balanceOf', React.useMemo(function () { return [address]; }, [address]), tokenBalancesGasRequirement); - var anyLoading = React.useMemo(function () { return balances.some(function (callState) { return callState.loading; }); }, [balances]); - return React.useMemo(function () { return [ - address && validatedTokens.length > 0 - ? validatedTokens.reduce(function (memo, token, i) { - var _a, _b; - var value = (_b = (_a = balances === null || balances === void 0 ? void 0 : balances[i]) === null || _a === void 0 ? void 0 : _a.result) === null || _b === void 0 ? void 0 : _b[0]; - var amount = value ? JSBI__default["default"].BigInt(value.toString()) : undefined; - if (amount) { - memo[token.address] = sdkCore.CurrencyAmount.fromRawAmount(token, amount); - } - return memo; - }, {}) - : {}, - anyLoading, - ]; }, [address, validatedTokens, anyLoading, balances]); -} -function useTokenBalances(address, tokens) { - return useTokenBalancesWithLoadingIndicator(address, tokens)[0]; -} -function useCurrencyBalances(account, currencies) { - var tokens = React.useMemo(function () { var _a; return (_a = currencies === null || currencies === void 0 ? void 0 : currencies.filter(function (currency) { var _a; return (_a = currency === null || currency === void 0 ? void 0 : currency.isToken) !== null && _a !== void 0 ? _a : false; })) !== null && _a !== void 0 ? _a : []; }, [currencies]); - var tokenBalances = useTokenBalances(account, tokens); - var containsETH = React.useMemo(function () { var _a; return (_a = currencies === null || currencies === void 0 ? void 0 : currencies.some(function (currency) { return currency === null || currency === void 0 ? void 0 : currency.isNative; })) !== null && _a !== void 0 ? _a : false; }, [currencies]); - var ethBalance = useNativeCurrencyBalances(React.useMemo(function () { return (containsETH ? [account] : []); }, [containsETH, account])); - return React.useMemo(function () { - var _a; - return (_a = currencies === null || currencies === void 0 ? void 0 : currencies.map(function (currency) { - if (!account || !currency) - return undefined; - if (currency.isToken) - return tokenBalances[currency.address]; - if (currency.isNative) - return ethBalance[account]; - return undefined; - })) !== null && _a !== void 0 ? _a : []; - }, [account, currencies, ethBalance, tokenBalances]); -} -function useCurrencyBalance(account, currency) { - return useCurrencyBalances(account, React.useMemo(function () { return [currency]; }, [currency]))[0]; -} - -var alwaysTrue = function () { return true; }; -/** Creates a filter function that filters tokens that do not match the query. */ -function getTokenFilter(query) { - var searchingAddress = isAddress(query); - if (searchingAddress) { - var address_1 = searchingAddress.toLowerCase(); - return function (t) { return 'address' in t && address_1 === t.address.toLowerCase(); }; - } - var queryParts = query - .toLowerCase() - .split(/\s+/) - .filter(function (s) { return s.length > 0; }); - if (queryParts.length === 0) - return alwaysTrue; - var match = function (s) { - var parts = s - .toLowerCase() - .split(/\s+/) - .filter(function (s) { return s.length > 0; }); - return queryParts.every(function (p) { return p.length === 0 || parts.some(function (sp) { return sp.startsWith(p) || sp.endsWith(p); }); }); - }; - return function (_a) { - var name = _a.name, symbol = _a.symbol; - return Boolean((symbol && match(symbol)) || (name && match(name))); - }; -} - -/** Sorts currency amounts (descending). */ -function balanceComparator(a, b) { - if (a && b) { - return a.greaterThan(b) ? -1 : a.equalTo(b) ? 0 : 1; - } - else if (a === null || a === void 0 ? void 0 : a.greaterThan('0')) { - return -1; - } - else if (b === null || b === void 0 ? void 0 : b.greaterThan('0')) { - return 1; - } - return 0; -} -/** Sorts tokens by currency amount (descending), then symbol (ascending). */ -function tokenComparator(balances, a, b) { - // Sorts by balances - var balanceComparison = balanceComparator(balances[a.address], balances[b.address]); - if (balanceComparison !== 0) - return balanceComparison; - // Sorts by symbol - if (a.symbol && b.symbol) { - return a.symbol.toLowerCase() < b.symbol.toLowerCase() ? -1 : 1; - } - return -1; -} -/** Sorts tokens by query, giving precedence to exact matches and partial matches. */ -function useSortTokensByQuery(query, tokens) { - return React.useMemo(function () { - if (!tokens) { - return []; - } - var matches = query - .toLowerCase() - .split(/\s+/) - .filter(function (s) { return s.length > 0; }); - if (matches.length > 1) { - return tokens; - } - var exactMatches = []; - var symbolSubtrings = []; - var rest = []; - // sort tokens by exact match -> subtring on symbol match -> rest - tokens.map(function (token) { - var _a, _b; - if (((_a = token.symbol) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === matches[0]) { - return exactMatches.push(token); - } - else if ((_b = token.symbol) === null || _b === void 0 ? void 0 : _b.toLowerCase().startsWith(query.toLowerCase().trim())) { - return symbolSubtrings.push(token); - } - else { - return rest.push(token); - } - }); - return __spreadArray(__spreadArray(__spreadArray([], __read(exactMatches), false), __read(symbolSubtrings), false), __read(rest), false); - }, [tokens, query]); -} - -/** - * Token instances created from token info on a token list. - */ -var WrappedTokenInfo = /** @class */ (function () { - function WrappedTokenInfo(tokenInfo, list) { - this.isNative = false; - this.isToken = true; - this._checksummedAddress = null; - this._tags = null; - this.tokenInfo = tokenInfo; - this.list = list; - } - Object.defineProperty(WrappedTokenInfo.prototype, "address", { - get: function () { - if (this._checksummedAddress) - return this._checksummedAddress; - var checksummedAddress = isAddress(this.tokenInfo.address); - if (!checksummedAddress) - throw new Error("Invalid token address: " + this.tokenInfo.address); - return (this._checksummedAddress = checksummedAddress); - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(WrappedTokenInfo.prototype, "chainId", { - get: function () { - return this.tokenInfo.chainId; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(WrappedTokenInfo.prototype, "decimals", { - get: function () { - return this.tokenInfo.decimals; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(WrappedTokenInfo.prototype, "name", { - get: function () { - return this.tokenInfo.name; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(WrappedTokenInfo.prototype, "symbol", { - get: function () { - return this.tokenInfo.symbol; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(WrappedTokenInfo.prototype, "logoURI", { - get: function () { - return this.tokenInfo.logoURI; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(WrappedTokenInfo.prototype, "tags", { - get: function () { - var _a; - if (this._tags !== null) - return this._tags; - if (!this.tokenInfo.tags) - return (this._tags = []); - var listTags = (_a = this.list) === null || _a === void 0 ? void 0 : _a.tags; - if (!listTags) - return (this._tags = []); - return (this._tags = this.tokenInfo.tags.map(function (tagId) { - return __assign(__assign({}, listTags[tagId]), { id: tagId }); - })); - }, - enumerable: false, - configurable: true - }); - WrappedTokenInfo.prototype.equals = function (other) { - return other.chainId === this.chainId && other.isToken && other.address.toLowerCase() === this.address.toLowerCase(); - }; - WrappedTokenInfo.prototype.sortsBefore = function (other) { - if (this.equals(other)) - throw new Error('Addresses should not be equal'); - return this.address.toLowerCase() < other.address.toLowerCase(); - }; - Object.defineProperty(WrappedTokenInfo.prototype, "wrapped", { - get: function () { - return this; - }, - enumerable: false, - configurable: true - }); - return WrappedTokenInfo; -}()); - -var mapCache = typeof WeakMap !== 'undefined' ? new WeakMap() : null; -function tokensToChainTokenMap(tokens) { - var cached = mapCache === null || mapCache === void 0 ? void 0 : mapCache.get(tokens); - if (cached) - return cached; - var _a = __read(Array.isArray(tokens) ? [undefined, tokens] : [tokens, tokens.tokens], 2), list = _a[0], infos = _a[1]; - var map = infos.reduce(function (map, info) { - var _a; - var token = new WrappedTokenInfo(info, list); - if (((_a = map[token.chainId]) === null || _a === void 0 ? void 0 : _a[token.address]) !== undefined) { - console.warn("Duplicate token skipped: " + token.address); - return map; - } - if (!map[token.chainId]) { - map[token.chainId] = {}; - } - map[token.chainId][token.address] = { token: token, list: list }; - return map; - }, {}); - mapCache === null || mapCache === void 0 ? void 0 : mapCache.set(tokens, map); - return map; -} - -jotai.atom({}); - -// parse a name or symbol from a token response -var BYTES32_REGEX = /^0x[a-fA-F0-9]{64}$/; -function parseStringOrBytes32(str, bytes32, defaultValue) { - return str && str.length > 0 - ? str - : // need to check for proper bytes string and valid terminator - bytes32 && BYTES32_REGEX.test(bytes32) && bytes.arrayify(bytes32)[31] === 0 - ? strings.parseBytes32String(bytes32) - : defaultValue; -} -/** - * Returns a Token from the tokenAddress. - * Returns null if token is loading or null was passed. - * Returns undefined if tokenAddress is invalid or token does not exist. - */ -function useTokenFromMap(tokens, tokenAddress) { - var chainId = useActiveWeb3React().chainId; - var address = isAddress(tokenAddress); - var tokenContract = useTokenContract(address ? address : undefined, false); - var tokenContractBytes32 = useBytes32TokenContract(address ? address : undefined, false); - var token = address ? tokens[address] : undefined; - var tokenName = useSingleCallResult(token ? undefined : tokenContract, 'name', undefined, reduxMulticall.NEVER_RELOAD); - var tokenNameBytes32 = useSingleCallResult(token ? undefined : tokenContractBytes32, 'name', undefined, reduxMulticall.NEVER_RELOAD); - var symbol = useSingleCallResult(token ? undefined : tokenContract, 'symbol', undefined, reduxMulticall.NEVER_RELOAD); - var symbolBytes32 = useSingleCallResult(token ? undefined : tokenContractBytes32, 'symbol', undefined, reduxMulticall.NEVER_RELOAD); - var decimals = useSingleCallResult(token ? undefined : tokenContract, 'decimals', undefined, reduxMulticall.NEVER_RELOAD); - return React.useMemo(function () { - var _a, _b, _c, _d; - if (token) - return token; - if (tokenAddress === null) - return null; - if (!chainId || !address) - return undefined; - if (decimals.loading || symbol.loading || tokenName.loading) - return null; - if (decimals.result) { - return new sdkCore.Token(chainId, address, decimals.result[0], parseStringOrBytes32((_a = symbol.result) === null || _a === void 0 ? void 0 : _a[0], (_b = symbolBytes32.result) === null || _b === void 0 ? void 0 : _b[0], 'UNKNOWN'), parseStringOrBytes32((_c = tokenName.result) === null || _c === void 0 ? void 0 : _c[0], (_d = tokenNameBytes32.result) === null || _d === void 0 ? void 0 : _d[0], 'Unknown Token')); - } - return undefined; - }, [ - address, - chainId, - decimals.loading, - decimals.result, - symbol.loading, - symbol.result, - symbolBytes32.result, - token, - tokenAddress, - tokenName.loading, - tokenName.result, - tokenNameBytes32.result, - ]); -} -/** - * Returns a Currency from the currencyId. - * Returns null if currency is loading or null was passed. - * Returns undefined if currencyId is invalid or token does not exist. - */ -function useCurrencyFromMap(tokens, currencyId) { - var _a; - var nativeCurrency = useNativeCurrency(); - var isNative = Boolean(nativeCurrency && (currencyId === null || currencyId === void 0 ? void 0 : currencyId.toUpperCase()) === 'ETH'); - var token = useTokenFromMap(tokens, isNative ? undefined : currencyId); - if (currencyId === null || currencyId === undefined) - return currencyId; - // this case so we use our builtin wrapped token instead of wrapped tokens on token lists - var wrappedNative = nativeCurrency === null || nativeCurrency === void 0 ? void 0 : nativeCurrency.wrapped; - if (((_a = wrappedNative === null || wrappedNative === void 0 ? void 0 : wrappedNative.address) === null || _a === void 0 ? void 0 : _a.toUpperCase()) === (currencyId === null || currencyId === void 0 ? void 0 : currencyId.toUpperCase())) - return wrappedNative; - return isNative ? nativeCurrency : token; -} - -var DEFAULT_LIST_PRIORITIES = DEFAULT_LIST_OF_LISTS.reduce(function (memo, listUrl, index) { - memo[listUrl] = index + 1; - return memo; -}, {}); -// use ordering of default list of lists to assign priority -function sortByListPriority(urlA, urlB) { - if (DEFAULT_LIST_PRIORITIES[urlA] && DEFAULT_LIST_PRIORITIES[urlB]) { - return DEFAULT_LIST_PRIORITIES[urlA] - DEFAULT_LIST_PRIORITIES[urlB]; - } - return 0; -} - -var name$1 = "Broken Token List"; -var timestamp$1 = "2021-01-05T20:47:02.923Z"; -======= - { - constant: true, - inputs: [], - name: 'name', - outputs: [ - { - name: '', - type: 'string', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - name: 'guy', - type: 'address', - }, - { - name: 'wad', - type: 'uint256', - }, - ], - name: 'approve', - outputs: [ - { - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'totalSupply', - outputs: [ - { - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - name: 'src', - type: 'address', - }, - { - name: 'dst', - type: 'address', - }, - { - name: 'wad', - type: 'uint256', - }, - ], - name: 'transferFrom', - outputs: [ - { - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - name: 'wad', - type: 'uint256', - }, - ], - name: 'withdraw', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'decimals', - outputs: [ - { - name: '', - type: 'uint8', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - name: '', - type: 'address', - }, - ], - name: 'balanceOf', - outputs: [ - { - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'symbol', - outputs: [ - { - name: '', - type: 'string', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - name: 'dst', - type: 'address', - }, - { - name: 'wad', - type: 'uint256', - }, - ], - name: 'transfer', - outputs: [ - { - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [], - name: 'deposit', - outputs: [], - payable: true, - stateMutability: 'payable', - type: 'function', - }, - { - constant: true, - inputs: [ - { - name: '', - type: 'address', - }, - { - name: '', - type: 'address', - }, - ], - name: 'allowance', - outputs: [ - { - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - payable: true, - stateMutability: 'payable', - type: 'fallback', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: 'src', - type: 'address', - }, - { - indexed: true, - name: 'guy', - type: 'address', - }, - { - indexed: false, - name: 'wad', - type: 'uint256', - }, - ], - name: 'Approval', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: 'src', - type: 'address', - }, - { - indexed: true, - name: 'dst', - type: 'address', - }, - { - indexed: false, - name: 'wad', - type: 'uint256', - }, - ], - name: 'Transfer', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: 'dst', - type: 'address', - }, - { - indexed: false, - name: 'wad', - type: 'uint256', - }, - ], - name: 'Deposit', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: 'src', - type: 'address', - }, - { - indexed: false, - name: 'wad', - type: 'uint256', - }, - ], - name: 'Withdrawal', - type: 'event', - }, -] - -// returns the checksummed address if the address is valid, otherwise returns false -function isAddress(value) { - try { - return address.getAddress(value) - } catch (_a) { - return false - } -} -// shorten the checksummed version of the input address to have 0x + 4 characters at start and end -function shortenAddress(address, chars) { - if (chars === void 0) { - chars = 4 - } - var parsed = isAddress(address) - if (!parsed) { - throw Error("Invalid 'address' parameter '" + address + "'.") - } - return parsed.substring(0, chars + 2) + '...' + parsed.substring(42 - chars) -} -// account is not optional -function getSigner(library, account) { - return library.getSigner(account).connectUnchecked() -} -// account is optional -function getProviderOrSigner(library, account) { - return account ? getSigner(library, account) : library -} -// account is optional -function getContract(address, ABI, library, account) { - if (!isAddress(address) || address === constants.AddressZero) { - throw Error("Invalid 'address' parameter '" + address + "'.") - } - return new contracts.Contract(address, ABI, getProviderOrSigner(library, account)) -} -function escapeRegExp(string) { - return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') // $& means the whole matched string -} -function isTokenOnList(chainTokenMap, token) { - var _a - return Boolean( - (token === null || token === void 0 ? void 0 : token.isToken) && - ((_a = chainTokenMap[token.chainId]) === null || _a === void 0 ? void 0 : _a[token.address]) - ) -} - -// returns null on errors -function useContract(addressOrAddressMap, ABI, withSignerIfPossible) { - if (withSignerIfPossible === void 0) { - withSignerIfPossible = true - } - var _a = useActiveWeb3React(), - library = _a.library, - account = _a.account, - chainId = _a.chainId - return React.useMemo( - function () { - if (!addressOrAddressMap || !ABI || !library || !chainId) return null - var address - if (typeof addressOrAddressMap === 'string') address = addressOrAddressMap - else address = addressOrAddressMap[chainId] - if (!address) return null - try { - return getContract(address, ABI, library, withSignerIfPossible && account ? account : undefined) - } catch (error) { - console.error('Failed to get contract', error) - return null - } - }, - [addressOrAddressMap, ABI, library, chainId, withSignerIfPossible, account] - ) -} -function useTokenContract(tokenAddress, withSignerIfPossible) { - return useContract(tokenAddress, ERC20ABI, withSignerIfPossible) -} -function useWETHContract(withSignerIfPossible) { - var _a - var chainId = useActiveWeb3React().chainId - return useContract( - chainId ? ((_a = WRAPPED_NATIVE_CURRENCY[chainId]) === null || _a === void 0 ? void 0 : _a.address) : undefined, - WETH_ABI, - withSignerIfPossible - ) -} -function useArgentWalletDetectorContract() { - return useContract(ARGENT_WALLET_DETECTOR_ADDRESS, ARGENT_WALLET_DETECTOR_ABI, false) -} -function useENSRegistrarContract(withSignerIfPossible) { - return useContract(ENS_REGISTRAR_ADDRESSES, ENS_ABI, withSignerIfPossible) -} -function useENSResolverContract(address, withSignerIfPossible) { - return useContract(address, ENS_PUBLIC_RESOLVER_ABI, withSignerIfPossible) -} -function useBytes32TokenContract(tokenAddress, withSignerIfPossible) { - return useContract(tokenAddress, ERC20_BYTES32_ABI, withSignerIfPossible) -} -function useEIP2612Contract(tokenAddress) { - return useContract(tokenAddress, EIP_2612, false) -} -function useV2RouterContract() { - return useContract(V2_ROUTER_ADDRESS, abi$3, true) -} -function useInterfaceMulticall() { - return useContract(MULTICALL_ADDRESS, abi$1, false) -} -function useV3Quoter() { - return useContract(QUOTER_ADDRESSES, abi$2) -} - -/** - * Debounces updates to a value. - * Non-primitives *must* wrap the value in useMemo, or the value will be updated due to referential inequality. - */ -// modified from https://usehooks.com/useDebounce/ -function useDebounce(value, delay) { - var _a = __read(React.useState(value), 2), - debouncedValue = _a[0], - setDebouncedValue = _a[1] - React.useEffect( - function () { - // Update debounced value after delay - var handler = setTimeout(function () { - setDebouncedValue(value) - }, delay) - // Cancel the timeout if value changes (also on delay change or unmount) - // This is how we prevent debounced value from updating if value is changed ... - // .. within the delay period. Timeout gets cleared and restarted. - return function () { - clearTimeout(handler) - } - }, - [value, delay] - ) - return debouncedValue -} - -var VISIBILITY_STATE_SUPPORTED = 'visibilityState' in document -function isWindowVisible() { - return !VISIBILITY_STATE_SUPPORTED || document.visibilityState !== 'hidden' -} -/** - * Returns whether the window is currently visible to the user. - */ -function useIsWindowVisible() { - var _a = __read(React.useState(isWindowVisible()), 2), - focused = _a[0], - setFocused = _a[1] - var listener = React.useCallback( - function () { - setFocused(isWindowVisible()) - }, - [setFocused] - ) - React.useEffect( - function () { - if (!VISIBILITY_STATE_SUPPORTED) return undefined - document.addEventListener('visibilitychange', listener) - return function () { - document.removeEventListener('visibilitychange', listener) - } - }, - [listener] - ) - return focused -} - -var blockAtom = jotai.atom(undefined) -/** Requires that BlockUpdater be installed in the DOM tree. */ -function useBlockNumber() { - var chainId = useActiveWeb3React().chainId - var block = utils.useAtomValue(blockAtom) - return chainId ? block : undefined -} - -var _a$b -var multicall = reduxMulticall.createMulticall() -var reducer = redux.combineReducers(((_a$b = {}), (_a$b[multicall.reducerPath] = multicall.reducer), _a$b)) -redux.createStore(reducer) - -function useMultipleContractSingleData() { - var _a - var args = [] - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i] - } - var _b = useCallContext(), - chainId = _b.chainId, - latestBlock = _b.latestBlock - return (_a = multicall.hooks).useMultipleContractSingleData.apply( - _a, - __spreadArray([chainId, latestBlock], __read(args), false) - ) -} -function useSingleCallResult() { - var _a - var args = [] - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i] - } - var _b = useCallContext(), - chainId = _b.chainId, - latestBlock = _b.latestBlock - return (_a = multicall.hooks).useSingleCallResult.apply( - _a, - __spreadArray([chainId, latestBlock], __read(args), false) - ) -} -function useSingleContractMultipleData() { - var _a - var args = [] - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i] - } - var _b = useCallContext(), - chainId = _b.chainId, - latestBlock = _b.latestBlock - return (_a = multicall.hooks).useSingleContractMultipleData.apply( - _a, - __spreadArray([chainId, latestBlock], __read(args), false) - ) -} -function useSingleContractWithCallData() { - var _a - var args = [] - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i] - } - var _b = useCallContext(), - chainId = _b.chainId, - latestBlock = _b.latestBlock - return (_a = multicall.hooks).useSingleContractWithCallData.apply( - _a, - __spreadArray([chainId, latestBlock], __read(args), false) - ) -} -function useCallContext() { - var chainId = useActiveWeb3React().chainId - var latestBlock = useBlockNumber() - return { chainId, latestBlock } -} - -function useNativeCurrency() { - var chainId = useActiveWeb3React().chainId - return React.useMemo( - function () { - return chainId - ? nativeOnChain(chainId) - : // display mainnet when not connected - nativeOnChain(SupportedChainId.MAINNET) - }, - [chainId] - ) -} - -var EMPTY_CONNECTOR = core$1.initializeConnector(function () { - return empty.EMPTY -}) -utils.atomWithDefault(function () { - return EMPTY_CONNECTOR -}) -utils.atomWithDefault(function () { - return EMPTY_CONNECTOR -}) - -var REGISTRAR_ABI = [ - { - constant: true, - inputs: [ - { - name: 'node', - type: 'bytes32', - }, - ], - name: 'resolver', - outputs: [ - { - name: 'resolverAddress', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, -] -var REGISTRAR_ADDRESS = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e' -var RESOLVER_ABI = [ - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - ], - name: 'contenthash', - outputs: [ - { - internalType: 'bytes', - name: '', - type: 'bytes', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, -] -// cache the resolver contracts since most of them are the public resolver -function resolverContract(resolverAddress, provider) { - return new contracts.Contract(resolverAddress, RESOLVER_ABI, provider) -} -/** - * Fetches and decodes the result of an ENS contenthash lookup on mainnet to a URI - * @param ensName to resolve - * @param provider provider to use to fetch the data - */ -function resolveENSContentHash(ensName, provider) { - return __awaiter(this, void 0, void 0, function () { - var ensRegistrarContract, hash$1, resolverAddress - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - ensRegistrarContract = new contracts.Contract(REGISTRAR_ADDRESS, REGISTRAR_ABI, provider) - hash$1 = hash.namehash(ensName) - return [4 /*yield*/, ensRegistrarContract.resolver(hash$1)] - case 1: - resolverAddress = _a.sent() - return [2 /*return*/, resolverContract(resolverAddress, provider).contenthash(hash$1)] - } - }) - }) -} - -function hexToUint8Array(hex) { - hex = hex.startsWith('0x') ? hex.substr(2) : hex - if (hex.length % 2 !== 0) throw new Error('hex must have length that is multiple of 2') - var arr = new Uint8Array(hex.length / 2) - for (var i = 0; i < arr.length; i++) { - arr[i] = parseInt(hex.substr(i * 2, 2), 16) - } - return arr -} -var UTF_8_DECODER = new TextDecoder('utf-8') -/** - * Returns the URI representation of the content hash for supported codecs - * @param contenthash to decode - */ -function contenthashToUri(contenthash) { - var data = hexToUint8Array(contenthash) - var codec = multicodec.getNameFromData(data) - switch (codec) { - case 'ipfs-ns': { - var unprefixedData = multicodec.rmPrefix(data) - var cid = new CID__default['default'](unprefixedData) - return 'ipfs://' + multihashes.toB58String(cid.multihash) - } - case 'ipns-ns': { - var unprefixedData = multicodec.rmPrefix(data) - var cid = new CID__default['default'](unprefixedData) - var multihash = multihashes.decode(cid.multihash) - if (multihash.name === 'identity') { - return 'ipns://' + UTF_8_DECODER.decode(multihash.digest).trim() - } else { - return 'ipns://' + multihashes.toB58String(cid.multihash) - } - } - default: - throw new Error('Unrecognized codec: ' + codec) - } -} - -var ENS_NAME_REGEX$1 = /^(([a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\.)+)eth(\/.*)?$/ -function parseENSAddress(ensAddress) { - var match = ensAddress.match(ENS_NAME_REGEX$1) - if (!match) return undefined - return { ensName: match[1].toLowerCase() + 'eth', ensPath: match[4] } -} - -/** - * Given a URI that may be ipfs, ipns, http, https, ar, or data protocol, return the fetch-able http(s) URLs for the same content - * @param uri to convert to fetch-able http url - */ -function uriToHttp(uri) { - var _a, _b, _c - var protocol = uri.split(':')[0].toLowerCase() - switch (protocol) { - case 'data': - return [uri] - case 'https': - return [uri] - case 'http': - return ['https' + uri.substr(4), uri] - case 'ipfs': - var hash = (_a = uri.match(/^ipfs:(\/\/)?(.*)$/i)) === null || _a === void 0 ? void 0 : _a[2] - return ['https://cloudflare-ipfs.com/ipfs/' + hash + '/', 'https://ipfs.io/ipfs/' + hash + '/'] - case 'ipns': - var name_1 = (_b = uri.match(/^ipns:(\/\/)?(.*)$/i)) === null || _b === void 0 ? void 0 : _b[2] - return ['https://cloudflare-ipfs.com/ipns/' + name_1 + '/', 'https://ipfs.io/ipns/' + name_1 + '/'] - case 'ar': - var tx = (_c = uri.match(/^ar:(\/\/)?(.*)$/i)) === null || _c === void 0 ? void 0 : _c[2] - return ['https://arweave.net/' + tx] - default: - return [] - } -} - -var ValidationSchema -;(function (ValidationSchema) { - ValidationSchema['LIST'] = 'list' - ValidationSchema['TOKENS'] = 'tokens' -})(ValidationSchema || (ValidationSchema = {})) -var validator = new Promise(function (resolve) { - return __awaiter(void 0, void 0, void 0, function () { - var _a, ajv, schema, validator - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - return [ - 4 /*yield*/, - Promise.all([ - Promise.resolve().then(function () { - return /*#__PURE__*/ _interopNamespace(require('ajv')) - }), - Promise.resolve().then(function () { - return tokenlist_schema$1 - }), - ]), - ] - case 1: - ;(_a = __read.apply(void 0, [_b.sent(), 2])), (ajv = _a[0]), (schema = _a[1]) - validator = new ajv.default({ allErrors: true }) - .addSchema(schema, ValidationSchema.LIST) - // Adds a meta scheme of Pick - .addSchema( - __assign(__assign({}, schema), { $id: schema.$id + '#tokens', required: ['tokens'] }), - ValidationSchema.TOKENS - ) - resolve(validator) - return [2 /*return*/] - } - }) - }) -}) -function getValidationErrors(validate) { - var _a, _b - return (_b = - (_a = validate === null || validate === void 0 ? void 0 : validate.errors) === null || _a === void 0 - ? void 0 - : _a - .map(function (error) { - return [error.dataPath, error.message].filter(Boolean).join(' ') - }) - .join('; ')) !== null && _b !== void 0 - ? _b - : 'unknown error' -} -/** - * Validates a token list. - * @param json the TokenList to validate - */ -function validateTokenList(json) { - return __awaiter(this, void 0, void 0, function () { - var validate - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - return [4 /*yield*/, validator] - case 1: - validate = _a.sent().getSchema(ValidationSchema.LIST) - if (validate === null || validate === void 0 ? void 0 : validate(json)) { - return [2 /*return*/, json] - } - throw new Error('Token list failed validation: ' + getValidationErrors(validate)) - } - }) - }) -} - -var listCache = new Map() -/** Fetches and validates a token list. */ -function fetchTokenList$1(listUrl, resolveENSContentHash) { - var _a - return __awaiter(this, void 0, void 0, function () { - var cached, - urls, - parsedENS, - contentHashUri, - error_1, - message, - translatedUri, - message, - i, - url, - isLast, - response, - error_2, - message, - message, - json, - list - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - cached = listCache === null || listCache === void 0 ? void 0 : listCache.get(listUrl) // avoid spurious re-fetches - if (cached) { - return [2 /*return*/, cached] - } - parsedENS = parseENSAddress(listUrl) - if (!parsedENS) return [3 /*break*/, 5] - contentHashUri = void 0 - _b.label = 1 - case 1: - _b.trys.push([1, 3, , 4]) - return [4 /*yield*/, resolveENSContentHash(parsedENS.ensName)] - case 2: - contentHashUri = _b.sent() - return [3 /*break*/, 4] - case 3: - error_1 = _b.sent() - message = 'failed to resolve ENS name: ' + parsedENS.ensName - console.debug(message, error_1) - throw new Error(message) - case 4: - translatedUri = void 0 - try { - translatedUri = contenthashToUri(contentHashUri) - } catch (error) { - message = 'failed to translate contenthash to URI: ' + contentHashUri - console.debug(message, error) - throw new Error(message) - } - urls = uriToHttp('' + translatedUri + ((_a = parsedENS.ensPath) !== null && _a !== void 0 ? _a : '')) - return [3 /*break*/, 6] - case 5: - urls = uriToHttp(listUrl) - _b.label = 6 - case 6: - i = 0 - _b.label = 7 - case 7: - if (!(i < urls.length)) return [3 /*break*/, 15] - url = urls[i] - isLast = i === urls.length - 1 - response = void 0 - _b.label = 8 - case 8: - _b.trys.push([8, 10, , 11]) - return [4 /*yield*/, fetch(url, { credentials: 'omit' })] - case 9: - response = _b.sent() - return [3 /*break*/, 11] - case 10: - error_2 = _b.sent() - message = 'failed to fetch list: ' + listUrl - console.debug(message, error_2) - if (isLast) throw new Error(message) - return [3 /*break*/, 14] - case 11: - if (!response.ok) { - message = 'failed to fetch list: ' + listUrl - console.debug(message, response.statusText) - if (isLast) throw new Error(message) - return [3 /*break*/, 14] - } - return [4 /*yield*/, response.json()] - case 12: - json = _b.sent() - return [4 /*yield*/, validateTokenList(json)] - case 13: - list = _b.sent() - listCache === null || listCache === void 0 ? void 0 : listCache.set(listUrl, list) - return [2 /*return*/, list] - case 14: - i++ - return [3 /*break*/, 7] - case 15: - throw new Error('Unrecognized list URL protocol.') - } - }) - }) -} - -/** - * Returns a map of the given addresses to their eventually consistent ETH balances. - */ -function useNativeCurrencyBalances(uncheckedAddresses) { - var chainId = useActiveWeb3React().chainId - var multicallContract = useInterfaceMulticall() - var validAddressInputs = React.useMemo( - function () { - return uncheckedAddresses - ? uncheckedAddresses - .map(isAddress) - .filter(function (a) { - return a !== false - }) - .sort() - .map(function (addr) { - return [addr] - }) - : [] - }, - [uncheckedAddresses] - ) - var results = useSingleContractMultipleData(multicallContract, 'getEthBalance', validAddressInputs) - return React.useMemo( - function () { - return validAddressInputs.reduce(function (memo, _a, i) { - var _b, _c - var _d = __read(_a, 1), - address = _d[0] - var value = - (_c = - (_b = results === null || results === void 0 ? void 0 : results[i]) === null || _b === void 0 - ? void 0 - : _b.result) === null || _c === void 0 - ? void 0 - : _c[0] - if (value && chainId) - memo[address] = sdkCore.CurrencyAmount.fromRawAmount( - nativeOnChain(chainId), - JSBI__default['default'].BigInt(value.toString()) - ) - return memo - }, {}) - }, - [validAddressInputs, chainId, results] - ) -} -var ERC20Interface = new abi$6.Interface(ERC20ABI) -var tokenBalancesGasRequirement = { gasRequired: 125000 } -/** - * Returns a map of token addresses to their eventually consistent token balances for a single account. - */ -function useTokenBalancesWithLoadingIndicator(address, tokens) { - var validatedTokens = React.useMemo( - function () { - var _a - return (_a = - tokens === null || tokens === void 0 - ? void 0 - : tokens.filter(function (t) { - return isAddress(t === null || t === void 0 ? void 0 : t.address) !== false - })) !== null && _a !== void 0 - ? _a - : [] - }, - [tokens] - ) - var validatedTokenAddresses = React.useMemo( - function () { - return validatedTokens.map(function (vt) { - return vt.address - }) - }, - [validatedTokens] - ) - var balances = useMultipleContractSingleData( - validatedTokenAddresses, - ERC20Interface, - 'balanceOf', - React.useMemo( - function () { - return [address] - }, - [address] - ), - tokenBalancesGasRequirement - ) - var anyLoading = React.useMemo( - function () { - return balances.some(function (callState) { - return callState.loading - }) - }, - [balances] - ) - return React.useMemo( - function () { - return [ - address && validatedTokens.length > 0 - ? validatedTokens.reduce(function (memo, token, i) { - var _a, _b - var value = - (_b = - (_a = balances === null || balances === void 0 ? void 0 : balances[i]) === null || _a === void 0 - ? void 0 - : _a.result) === null || _b === void 0 - ? void 0 - : _b[0] - var amount = value ? JSBI__default['default'].BigInt(value.toString()) : undefined - if (amount) { - memo[token.address] = sdkCore.CurrencyAmount.fromRawAmount(token, amount) - } - return memo - }, {}) - : {}, - anyLoading, - ] - }, - [address, validatedTokens, anyLoading, balances] - ) -} -function useTokenBalances(address, tokens) { - return useTokenBalancesWithLoadingIndicator(address, tokens)[0] -} -function useCurrencyBalances(account, currencies) { - var tokens = React.useMemo( - function () { - var _a - return (_a = - currencies === null || currencies === void 0 - ? void 0 - : currencies.filter(function (currency) { - var _a - return (_a = currency === null || currency === void 0 ? void 0 : currency.isToken) !== null && - _a !== void 0 - ? _a - : false - })) !== null && _a !== void 0 - ? _a - : [] - }, - [currencies] - ) - var tokenBalances = useTokenBalances(account, tokens) - var containsETH = React.useMemo( - function () { - var _a - return (_a = - currencies === null || currencies === void 0 - ? void 0 - : currencies.some(function (currency) { - return currency === null || currency === void 0 ? void 0 : currency.isNative - })) !== null && _a !== void 0 - ? _a - : false - }, - [currencies] - ) - var ethBalance = useNativeCurrencyBalances( - React.useMemo( - function () { - return containsETH ? [account] : [] - }, - [containsETH, account] - ) - ) - return React.useMemo( - function () { - var _a - return (_a = - currencies === null || currencies === void 0 - ? void 0 - : currencies.map(function (currency) { - if (!account || !currency) return undefined - if (currency.isToken) return tokenBalances[currency.address] - if (currency.isNative) return ethBalance[account] - return undefined - })) !== null && _a !== void 0 - ? _a - : [] - }, - [account, currencies, ethBalance, tokenBalances] - ) -} -function useCurrencyBalance(account, currency) { - return useCurrencyBalances( - account, - React.useMemo( - function () { - return [currency] - }, - [currency] - ) - )[0] -} - -var alwaysTrue = function () { - return true -} -/** Creates a filter function that filters tokens that do not match the query. */ -function getTokenFilter(query) { - var searchingAddress = isAddress(query) - if (searchingAddress) { - var address_1 = searchingAddress.toLowerCase() - return function (t) { - return 'address' in t && address_1 === t.address.toLowerCase() - } - } - var queryParts = query - .toLowerCase() - .split(/\s+/) - .filter(function (s) { - return s.length > 0 - }) - if (queryParts.length === 0) return alwaysTrue - var match = function (s) { - var parts = s - .toLowerCase() - .split(/\s+/) - .filter(function (s) { - return s.length > 0 - }) - return queryParts.every(function (p) { - return ( - p.length === 0 || - parts.some(function (sp) { - return sp.startsWith(p) || sp.endsWith(p) - }) - ) - }) - } - return function (_a) { - var name = _a.name, - symbol = _a.symbol - return Boolean((symbol && match(symbol)) || (name && match(name))) - } -} - -/** Sorts currency amounts (descending). */ -function balanceComparator(a, b) { - if (a && b) { - return a.greaterThan(b) ? -1 : a.equalTo(b) ? 0 : 1 - } else if (a === null || a === void 0 ? void 0 : a.greaterThan('0')) { - return -1 - } else if (b === null || b === void 0 ? void 0 : b.greaterThan('0')) { - return 1 - } - return 0 -} -/** Sorts tokens by currency amount (descending), then symbol (ascending). */ -function tokenComparator(balances, a, b) { - // Sorts by balances - var balanceComparison = balanceComparator(balances[a.address], balances[b.address]) - if (balanceComparison !== 0) return balanceComparison - // Sorts by symbol - if (a.symbol && b.symbol) { - return a.symbol.toLowerCase() < b.symbol.toLowerCase() ? -1 : 1 - } - return -1 -} -/** Sorts tokens by query, giving precedence to exact matches and partial matches. */ -function useSortTokensByQuery(query, tokens) { - return React.useMemo( - function () { - if (!tokens) { - return [] - } - var matches = query - .toLowerCase() - .split(/\s+/) - .filter(function (s) { - return s.length > 0 - }) - if (matches.length > 1) { - return tokens - } - var exactMatches = [] - var symbolSubtrings = [] - var rest = [] - // sort tokens by exact match -> subtring on symbol match -> rest - tokens.map(function (token) { - var _a, _b - if (((_a = token.symbol) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === matches[0]) { - return exactMatches.push(token) - } else if ( - (_b = token.symbol) === null || _b === void 0 - ? void 0 - : _b.toLowerCase().startsWith(query.toLowerCase().trim()) - ) { - return symbolSubtrings.push(token) - } else { - return rest.push(token) - } - }) - return __spreadArray( - __spreadArray(__spreadArray([], __read(exactMatches), false), __read(symbolSubtrings), false), - __read(rest), - false - ) - }, - [tokens, query] - ) -} - -/** - * Token instances created from token info on a token list. - */ -var WrappedTokenInfo = /** @class */ (function () { - function WrappedTokenInfo(tokenInfo, list) { - this.isNative = false - this.isToken = true - this._checksummedAddress = null - this._tags = null - this.tokenInfo = tokenInfo - this.list = list - } - Object.defineProperty(WrappedTokenInfo.prototype, 'address', { - get() { - if (this._checksummedAddress) return this._checksummedAddress - var checksummedAddress = isAddress(this.tokenInfo.address) - if (!checksummedAddress) throw new Error('Invalid token address: ' + this.tokenInfo.address) - return (this._checksummedAddress = checksummedAddress) - }, - enumerable: false, - configurable: true, - }) - Object.defineProperty(WrappedTokenInfo.prototype, 'chainId', { - get() { - return this.tokenInfo.chainId - }, - enumerable: false, - configurable: true, - }) - Object.defineProperty(WrappedTokenInfo.prototype, 'decimals', { - get() { - return this.tokenInfo.decimals - }, - enumerable: false, - configurable: true, - }) - Object.defineProperty(WrappedTokenInfo.prototype, 'name', { - get() { - return this.tokenInfo.name - }, - enumerable: false, - configurable: true, - }) - Object.defineProperty(WrappedTokenInfo.prototype, 'symbol', { - get() { - return this.tokenInfo.symbol - }, - enumerable: false, - configurable: true, - }) - Object.defineProperty(WrappedTokenInfo.prototype, 'logoURI', { - get() { - return this.tokenInfo.logoURI - }, - enumerable: false, - configurable: true, - }) - Object.defineProperty(WrappedTokenInfo.prototype, 'tags', { - get() { - var _a - if (this._tags !== null) return this._tags - if (!this.tokenInfo.tags) return (this._tags = []) - var listTags = (_a = this.list) === null || _a === void 0 ? void 0 : _a.tags - if (!listTags) return (this._tags = []) - return (this._tags = this.tokenInfo.tags.map(function (tagId) { - return __assign(__assign({}, listTags[tagId]), { id: tagId }) - })) - }, - enumerable: false, - configurable: true, - }) - WrappedTokenInfo.prototype.equals = function (other) { - return other.chainId === this.chainId && other.isToken && other.address.toLowerCase() === this.address.toLowerCase() - } - WrappedTokenInfo.prototype.sortsBefore = function (other) { - if (this.equals(other)) throw new Error('Addresses should not be equal') - return this.address.toLowerCase() < other.address.toLowerCase() - } - Object.defineProperty(WrappedTokenInfo.prototype, 'wrapped', { - get() { - return this - }, - enumerable: false, - configurable: true, - }) - return WrappedTokenInfo -})() - -var mapCache = typeof WeakMap !== 'undefined' ? new WeakMap() : null -function tokensToChainTokenMap(tokens) { - var cached = mapCache === null || mapCache === void 0 ? void 0 : mapCache.get(tokens) - if (cached) return cached - var _a = __read(Array.isArray(tokens) ? [undefined, tokens] : [tokens, tokens.tokens], 2), - list = _a[0], - infos = _a[1] - var map = infos.reduce(function (map, info) { - var _a - var token = new WrappedTokenInfo(info, list) - if (((_a = map[token.chainId]) === null || _a === void 0 ? void 0 : _a[token.address]) !== undefined) { - console.warn('Duplicate token skipped: ' + token.address) - return map - } - if (!map[token.chainId]) { - map[token.chainId] = {} - } - map[token.chainId][token.address] = { token, list } - return map - }, {}) - mapCache === null || mapCache === void 0 ? void 0 : mapCache.set(tokens, map) - return map -} - -jotai.atom({}) - -// parse a name or symbol from a token response -var BYTES32_REGEX = /^0x[a-fA-F0-9]{64}$/ -function parseStringOrBytes32(str, bytes32, defaultValue) { - return str && str.length > 0 - ? str - : // need to check for proper bytes string and valid terminator - bytes32 && BYTES32_REGEX.test(bytes32) && bytes.arrayify(bytes32)[31] === 0 - ? strings.parseBytes32String(bytes32) - : defaultValue -} -/** - * Returns a Token from the tokenAddress. - * Returns null if token is loading or null was passed. - * Returns undefined if tokenAddress is invalid or token does not exist. - */ -function useTokenFromMap(tokens, tokenAddress) { - var chainId = useActiveWeb3React().chainId - var address = isAddress(tokenAddress) - var tokenContract = useTokenContract(address ? address : undefined, false) - var tokenContractBytes32 = useBytes32TokenContract(address ? address : undefined, false) - var token = address ? tokens[address] : undefined - var tokenName = useSingleCallResult(token ? undefined : tokenContract, 'name', undefined, reduxMulticall.NEVER_RELOAD) - var tokenNameBytes32 = useSingleCallResult( - token ? undefined : tokenContractBytes32, - 'name', - undefined, - reduxMulticall.NEVER_RELOAD - ) - var symbol = useSingleCallResult(token ? undefined : tokenContract, 'symbol', undefined, reduxMulticall.NEVER_RELOAD) - var symbolBytes32 = useSingleCallResult( - token ? undefined : tokenContractBytes32, - 'symbol', - undefined, - reduxMulticall.NEVER_RELOAD - ) - var decimals = useSingleCallResult( - token ? undefined : tokenContract, - 'decimals', - undefined, - reduxMulticall.NEVER_RELOAD - ) - return React.useMemo( - function () { - var _a, _b, _c, _d - if (token) return token - if (tokenAddress === null) return null - if (!chainId || !address) return undefined - if (decimals.loading || symbol.loading || tokenName.loading) return null - if (decimals.result) { - return new sdkCore.Token( - chainId, - address, - decimals.result[0], - parseStringOrBytes32( - (_a = symbol.result) === null || _a === void 0 ? void 0 : _a[0], - (_b = symbolBytes32.result) === null || _b === void 0 ? void 0 : _b[0], - 'UNKNOWN' - ), - parseStringOrBytes32( - (_c = tokenName.result) === null || _c === void 0 ? void 0 : _c[0], - (_d = tokenNameBytes32.result) === null || _d === void 0 ? void 0 : _d[0], - 'Unknown Token' - ) - ) - } - return undefined - }, - [ - address, - chainId, - decimals.loading, - decimals.result, - symbol.loading, - symbol.result, - symbolBytes32.result, - token, - tokenAddress, - tokenName.loading, - tokenName.result, - tokenNameBytes32.result, - ] - ) -} -/** - * Returns a Currency from the currencyId. - * Returns null if currency is loading or null was passed. - * Returns undefined if currencyId is invalid or token does not exist. - */ -function useCurrencyFromMap(tokens, currencyId) { - var _a - var nativeCurrency = useNativeCurrency() - var isNative = Boolean( - nativeCurrency && (currencyId === null || currencyId === void 0 ? void 0 : currencyId.toUpperCase()) === 'ETH' - ) - var token = useTokenFromMap(tokens, isNative ? undefined : currencyId) - if (currencyId === null || currencyId === undefined) return currencyId - // this case so we use our builtin wrapped token instead of wrapped tokens on token lists - var wrappedNative = nativeCurrency === null || nativeCurrency === void 0 ? void 0 : nativeCurrency.wrapped - if ( - ((_a = wrappedNative === null || wrappedNative === void 0 ? void 0 : wrappedNative.address) === null || - _a === void 0 - ? void 0 - : _a.toUpperCase()) === (currencyId === null || currencyId === void 0 ? void 0 : currencyId.toUpperCase()) - ) - return wrappedNative - return isNative ? nativeCurrency : token -} - -var DEFAULT_LIST_PRIORITIES = DEFAULT_LIST_OF_LISTS.reduce(function (memo, listUrl, index) { - memo[listUrl] = index + 1 - return memo -}, {}) -// use ordering of default list of lists to assign priority -function sortByListPriority(urlA, urlB) { - if (DEFAULT_LIST_PRIORITIES[urlA] && DEFAULT_LIST_PRIORITIES[urlB]) { - return DEFAULT_LIST_PRIORITIES[urlA] - DEFAULT_LIST_PRIORITIES[urlB] - } - return 0 -} - -var name$1 = 'Broken Token List' -var timestamp$1 = '2021-01-05T20:47:02.923Z' ->>>>>>> ee1338c81a2c73d9938e225b8b96abd2fc298260 -var version$1 = { - major: 1, - minor: 0, - patch: 0, -} -var tags$1 = {} -var logoURI$1 = 'ipfs://QmNa8mQkrNKp1WEEeGjFezDmDeodkWRevGFN8JCV7b4Xir' -var keywords$1 = ['uniswap', 'broken'] -var tokens$1 = [ - { - name: 'UNI HODL', - address: '0x4bf5dc91E2555449293D7824028Eb8Fe5879B689', - symbol: 'UniH', - decimals: 18, - chainId: 1, - logoURI: '', - }, -] -var BROKEN_LIST = { - name: name$1, - timestamp: timestamp$1, - version: version$1, - tags: tags$1, - logoURI: logoURI$1, - keywords: keywords$1, - tokens: tokens$1, -} - -var name = 'Unsupported Tokens' -var timestamp = '2021-01-05T20:47:02.923Z' -var version = { - major: 1, - minor: 0, - patch: 0, -} -var tags = {} -var logoURI = 'ipfs://QmNa8mQkrNKp1WEEeGjFezDmDeodkWRevGFN8JCV7b4Xir' -var keywords = ['uniswap', 'unsupported'] -var tokens = [ - { - name: 'Gold Tether', - address: '0x4922a015c4407F87432B179bb209e125432E4a2A', - symbol: 'XAUt', - decimals: 6, - chainId: 1, - logoURI: - 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4922a015c4407F87432B179bb209e125432E4a2A/logo.png', - }, - { - name: 'Grump Cat', - address: '0x93B2FfF814FCaEFFB01406e80B4Ecd89Ca6A021b', - symbol: 'GRUMPY', - decimals: 9, - chainId: 1, - logoURI: - 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4922a015c4407F87432B179bb209e125432E4a2A/logo.png', - }, - { - name: 'apeUSD-UMA Synthetic USD (Dec 2021)', - address: '0xfA5e27893aee4805283D86e4283Da64F8c72dd56', - symbol: 'apeUSD-UMA-DEC21', - decimals: 18, - chainId: 1, - logoURI: '', - }, - { - chainId: 1, - address: '0xc6b11850241c5127eab73af4b6c68bc267cbbff4', - name: 'oWETHp Put 360 DEC2520', - symbol: 'oWETH-360P-12/25/20', - decimals: 7, - }, - { - chainId: 1, - name: 'oYFIp Put 25000 OCT0220', - address: '0x452b421be5b30f0c6ad8c3f03c06bdaab4f5c56c', - symbol: 'oYFI-25000P-10/02/20', - decimals: 7, - }, - { - chainId: 1, - name: 'oWETHp Put 360 OCT3020', - address: '0x0578779e746d7186253a36cf651ea786acfcf087', - symbol: 'oWETH-360P-10/30/20', - decimals: 7, - }, - { - chainId: 1, - name: 'ETHc Call 500 OCT3020', - address: '0xf9aba2e43fb19184408ea3b572a0fd672946f87b', - symbol: 'oETH-500C-10/30/20', - decimals: 6, - }, - { - chainId: 1, - name: 'oBALp Put 22 OCT0220', - address: '0xdb0991dfc7e828b5a2837dc82d68e16490562c8d', - symbol: 'oBAL-22P-10/02/20', - decimals: 7, - }, - { - chainId: 1, - name: 'oCOMPp Put 150 SEP2520', - address: '0xe951ebe6b4420ab3f4844cf36dedd263d095b416', - symbol: 'oCOMP-150P-09/25/20', - decimals: 7, - }, - { - chainId: 1, - name: 'oCRVp Put 3 SEP252020', - address: '0x9215bd49b59748419eac6bad9dbe247df06ebdb9', - symbol: 'oCRV-3P-09/25/20', - decimals: 7, - }, - { - chainId: 1, - name: 'oETHp Put 180 SEP2520', - address: '0xE3A2c34Fa2F59ffa95C4ACd1E5663633d45Bc3AD', - symbol: 'oETH-180P-09/25/20', - decimals: 7, - }, - { - chainId: 1, - name: 'oETHc Call 400 SEP2520', - address: '0x05977EBC26825C0CD6097E0Ad7204721516711Eb', - symbol: 'oETH-400C-09/25/20', - decimals: 7, - }, - { - chainId: 1, - name: 'oWETHp Put 380 SEP1820', - address: '0x31f88266301b08631f9f0e33fd5c43c2a5d1e5b2', - symbol: 'oWETH-380P-09/18/20', - decimals: 7, - }, - { - chainId: 1, - name: 'oYFIp Put 8500 SEP1820', - address: '0xd1cec2f67fdc4c60e0963515dfc3343f31e32e47', - symbol: 'oYFI-8500P-09/18/20', - decimals: 7, - }, - { - chainId: 1, - name: 'oWETHp Put 370 SEP1120', - address: '0x15844029b2c2bf24506e9937739a9a912f1e4354', - symbol: 'oWETH-370P-09/11/20', - decimals: 7, - }, - { - chainId: 1, - name: 'oWETHp Put 400 SEP0420', - address: '0x5562c33c383f6386be4f6dcdbd35a3a99bbcfde6', - symbol: 'oWETH-400P-09/04/20', - decimals: 7, - }, - { - chainId: 1, - name: 'oETHp Put 200 AUG2820', - address: '0x3CBFC1397deF0602c2d211c70A1c0c38CEDB5448', - symbol: 'oWETH-400P-09/04/20', - decimals: 7, - }, - { - chainId: 1, - name: 'Opyn cDai Insurance', - symbol: 'ocDai', - address: '0x98cc3bd6af1880fcfda17ac477b2f612980e5e33', - decimals: 8, - }, - { - chainId: 1, - name: 'Opyn cUSDC Insurance', - symbol: 'ocUSDC', - address: '0x8ED9f862363fFdFD3a07546e618214b6D59F03d4', - decimals: 8, - }, - { - chainId: 1, - address: '0x176C674Ee533C6139B0dc8b458D72A93dCB3e705', - symbol: 'iAAVE', - name: 'Synth Inverse Aave', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iAAVE.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0x8A8079c7149B8A1611e5C5d978DCA3bE16545F83', - symbol: 'iADA', - name: 'Synth Inverse Cardano', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iADA.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0xAFD870F32CE54EfdBF677466B612bf8ad164454B', - symbol: 'iBNB', - name: 'Synth Inverse Binance Coin', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iBNB.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0xD6014EA05BDe904448B743833dDF07c3C7837481', - symbol: 'iBTC', - name: 'Synth Inverse Bitcoin', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iBTC.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0x336213e1DDFC69f4701Fc3F86F4ef4A160c1159d', - symbol: 'iCEX', - name: 'Synth Inverse Centralised Exchange Index', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iCEX.svg', - tags: ['index', 'inverse', 'synth'], - }, - { - chainId: 1, - address: '0x6345728B1ccE16E6f8C509950b5c84FFF88530d9', - symbol: 'iCOMP', - name: 'Synth Inverse Compound', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iCOMP.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0xCB98f42221b2C251A4E74A1609722eE09f0cc08E', - symbol: 'iDASH', - name: 'Synth Inverse Dash', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDASH.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0x14d10003807AC60d07BB0ba82cAeaC8d2087c157', - symbol: 'iDEFI', - name: 'Synth Inverse DeFi Index', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDEFI.svg', - tags: ['index', 'inverse', 'synth'], - }, - { - chainId: 1, - address: '0x46a97629C9C1F58De6EC18C7F536e7E6d6A6ecDe', - symbol: 'iDOT', - name: 'Synth Inverse Polkadot', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDOT.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0xF4EebDD0704021eF2a6Bbe993fdf93030Cd784b4', - symbol: 'iEOS', - name: 'Synth Inverse EOS', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iEOS.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0xd50c1746D835d2770dDA3703B69187bFfeB14126', - symbol: 'iETC', - name: 'Synth Inverse Ethereum Classic', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iETC.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0xA9859874e1743A32409f75bB11549892138BBA1E', - symbol: 'iETH', - name: 'Synth Inverse Ether', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iETH.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0x2d7aC061fc3db53c39fe1607fB8cec1B2C162B01', - symbol: 'iLINK', - name: 'Synth Inverse Chainlink', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iLINK.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0x79da1431150C9b82D2E5dfc1C68B33216846851e', - symbol: 'iLTC', - name: 'Synth Inverse Litecoin', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iLTC.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0xA5a5DF41883Cdc00c4cCC6E8097130535399d9a3', - symbol: 'iOIL', - name: 'Synth Inverse Perpetual Oil Futures', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iOIL.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0x0fEd38108bdb8e62ef7b5680E8E0726E2F29e0De', - symbol: 'iREN', - name: 'Synth Inverse Ren', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iREN.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0xC5807183a9661A533CB08CbC297594a0B864dc12', - symbol: 'iTRX', - name: 'Synth Inverse TRON', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iTRX.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0x36A00FF9072570eF4B9292117850B8FE08d96cce', - symbol: 'iUNI', - name: 'Synth Inverse Uniswap', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iUNI.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0x4AdF728E2Df4945082cDD6053869f51278fae196', - symbol: 'iXMR', - name: 'Synth Inverse Monero', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXMR.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0x27269b3e45A4D3E79A3D6BFeE0C8fB13d0D711A6', - symbol: 'iXRP', - name: 'Synth Inverse Ripple', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXRP.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0x8deef89058090ac5655A99EEB451a4f9183D1678', - symbol: 'iXTZ', - name: 'Synth Inverse Tezos', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXTZ.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0x592244301CeA952d6daB2fdC1fE6bd9E53917306', - symbol: 'iYFI', - name: 'Synth Inverse yearn.finance', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iYFI.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0xcD39b5434a0A92cf47D1F567a7dF84bE356814F0', - symbol: 's1INCH', - name: 'Synth 1inch', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/s1INCH.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x7537AAe01f3B218DAE75e10d952473823F961B87', - symbol: 'sAAPL', - name: 'Synth Apple', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAAPL.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xd2dF355C19471c8bd7D8A3aa27Ff4e26A21b4076', - symbol: 'sAAVE', - name: 'Synth Aave', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAAVE.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xe36E2D3c7c34281FA3bC737950a68571736880A1', - symbol: 'sADA', - name: 'Synth Cardano', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sADA.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x9CF7E61853ea30A41b02169391b393B901eac457', - symbol: 'sAMZN', - name: 'Synth Amazon', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAMZN.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xF48e200EAF9906362BB1442fca31e0835773b8B4', - symbol: 'sAUD', - name: 'Synth Australian Dollars', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAUD.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x617aeCB6137B5108D1E7D4918e3725C8cEbdB848', - symbol: 'sBNB', - name: 'Synth Binance Coin', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sBNB.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xfE18be6b3Bd88A2D2A7f928d00292E7a9963CfC6', - symbol: 'sBTC', - name: 'Synth Bitcoin', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sBTC.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xeABACD844A196D7Faf3CE596edeBF9900341B420', - symbol: 'sCEX', - name: 'Synth Centralised Exchange Index', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCEX.svg', - tags: ['index', 'synth'], - }, - { - chainId: 1, - address: '0x0F83287FF768D1c1e17a42F44d644D7F22e8ee1d', - symbol: 'sCHF', - name: 'Synth Swiss Franc', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCHF.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x9EeF4CA7aB9fa8bc0650127341C2d3F707a40f8A', - symbol: 'sCOIN', - name: 'Synth Coinbase', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCOIN.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xEb029507d3e043DD6C87F2917C4E82B902c35618', - symbol: 'sCOMP', - name: 'Synth Compound', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCOMP.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xD38aEb759891882e78E957c80656572503D8c1B1', - symbol: 'sCRV', - name: 'Synth Curve DAO Token', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCRV.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xfE33ae95A9f0DA8A845aF33516EDc240DCD711d6', - symbol: 'sDASH', - name: 'Synth Dash', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDASH.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xe1aFe1Fd76Fd88f78cBf599ea1846231B8bA3B6B', - symbol: 'sDEFI', - name: 'Synth DeFi Index', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDEFI.svg', - tags: ['index', 'synth'], - }, - { - chainId: 1, - address: '0x1715AC0743102BF5Cd58EfBB6Cf2dC2685d967b6', - symbol: 'sDOT', - name: 'Synth Polkadot', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDOT.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x88C8Cf3A212c0369698D13FE98Fcb76620389841', - symbol: 'sEOS', - name: 'Synth EOS', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sEOS.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x22602469d704BfFb0936c7A7cfcD18f7aA269375', - symbol: 'sETC', - name: 'Synth Ethereum Classic', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sETC.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x5e74C9036fb86BD7eCdcb084a0673EFc32eA31cb', - symbol: 'sETH', - name: 'Synth Ether', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sETH.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xD71eCFF9342A5Ced620049e616c5035F1dB98620', - symbol: 'sEUR', - name: 'Synth Euros', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sEUR.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xf50B5e535F62a56A9BD2d8e2434204E726c027Fa', - symbol: 'sFB', - name: 'Synth Facebook', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sFB.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x23348160D7f5aca21195dF2b70f28Fce2B0be9fC', - symbol: 'sFTSE', - name: 'Synth FTSE 100 Index', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sFTSE.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x97fe22E7341a0Cd8Db6F6C021A24Dc8f4DAD855F', - symbol: 'sGBP', - name: 'Synth Pound Sterling', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sGBP.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xC63B8ECCE56aB9C46184eC6aB85e4771fEa4c8AD', - symbol: 'sGOOG', - name: 'Synth Alphabet', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sGOOG.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xF6b1C627e95BFc3c1b4c9B825a032Ff0fBf3e07d', - symbol: 'sJPY', - name: 'Synth Japanese Yen', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sJPY.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x269895a3dF4D73b077Fc823dD6dA1B95f72Aaf9B', - symbol: 'sKRW', - name: 'Synth South Korean Won', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sKRW.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xbBC455cb4F1B9e4bFC4B73970d360c8f032EfEE6', - symbol: 'sLINK', - name: 'Synth Chainlink', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sLINK.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xC14103C2141E842e228FBaC594579e798616ce7A', - symbol: 'sLTC', - name: 'Synth Litecoin', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sLTC.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x745a824D6aBBD236AA794b5530062778A6Ad7523', - symbol: 'sMSFT', - name: 'Synth Microsoft', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sMSFT.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x5A7E3c07604EB515C16b36cd51906a65f021F609', - symbol: 'sNFLX', - name: 'Synth Netflix', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sNFLX.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x757de3ac6B830a931eF178C6634c5C551773155c', - symbol: 'sNIKKEI', - name: 'Synth Nikkei 225 Index', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sNIKKEI.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x6d16cF3EC5F763d4d99cB0B0b110eefD93B11B56', - symbol: 'sOIL', - name: 'Synth Perpetual Oil Futures', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sOIL.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xD31533E8d0f3DF62060e94B3F1318137bB6E3525', - symbol: 'sREN', - name: 'Synth Ren', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sREN.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x0352557B007A4Aae1511C114409b932F06F9E2f4', - symbol: 'sRUNE', - name: 'Synth THORChain', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sRUNE.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xf2E08356588EC5cd9E437552Da87C0076b4970B0', - symbol: 'sTRX', - name: 'Synth TRON', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sTRX.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x918dA91Ccbc32B7a6A0cc4eCd5987bbab6E31e6D', - symbol: 'sTSLA', - name: 'Synth Tesla', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sTSLA.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x30635297E450b930f8693297eBa160D9e6c8eBcf', - symbol: 'sUNI', - name: 'Synth Uniswap', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sUNI.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x6A22e5e94388464181578Aa7A6B869e00fE27846', - symbol: 'sXAG', - name: 'Synth Silver Ounce', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXAG.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x261EfCdD24CeA98652B9700800a13DfBca4103fF', - symbol: 'sXAU', - name: 'Synth Gold Ounce', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXAU.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x5299d6F7472DCc137D7f3C4BcfBBB514BaBF341A', - symbol: 'sXMR', - name: 'Synth Monero', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXMR.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xa2B0fDe6D710e201d0d608e924A484d1A5fEd57c', - symbol: 'sXRP', - name: 'Synth Ripple', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXRP.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x2e59005c5c0f0a4D77CcA82653d48b46322EE5Cd', - symbol: 'sXTZ', - name: 'Synth Tezos', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXTZ.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x992058B7DB08F9734d84485bfbC243C4ee6954A7', - symbol: 'sYFI', - name: 'Synth yearn.finance', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sYFI.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x81ab848898b5ffD3354dbbEfb333D5D183eEDcB5', - name: 'yUSD Synthetic Expiring 1 September 2020', - symbol: 'yUSDSEP20', - decimals: 18, - }, - { - chainId: 1, - address: '0xB2FdD60AD80ca7bA89B9BAb3b5336c2601C020b4', - name: 'yUSD Synthetic Expiring 1 October 2020', - symbol: 'yUSDOCT20', - decimals: 18, - }, - { - chainId: 1, - address: '0x208d174775dc39fe18b1b374972f77ddec6c0f73', - name: 'uUSDrBTC Synthetic Expiring 1 Oct 2020', - symbol: 'uUSDrBTC-OCT', - decimals: 18, - }, - { - chainId: 1, - address: '0xf06ddacf71e2992e2122a1a0168c6967afdf63ce', - name: 'uUSDrBTC Synthetic Expiring 31 Dec 2020', - symbol: 'uUSDrBTC-DEC', - decimals: 18, - }, - { - chainId: 1, - address: '0xd16c79c8a39d44b2f3eb45d2019cd6a42b03e2a9', - name: 'uUSDwETH Synthetic Expiring 31 Dec 2020', - symbol: 'uUSDwETH-DEC', - decimals: 18, - }, - { - chainId: 1, - address: '0x3d995510f8d82c2ea341845932b5ddde0bead9a3', - name: 'uGAS-JAN21 Token Expiring 31 Jan 2021', - symbol: 'uGAS-JAN21', - decimals: 18, - }, - { - chainId: 1, - address: '0x90f802c7e8fb5d40b0de583e34c065a3bd2020d8', - name: 'YD-ETH-MAR21 Token Expiring 31 Mar 2021', - symbol: 'YD-ETH-MAR21', - decimals: 18, - }, - { - chainId: 1, - address: '0x002f0b1a71c5730cf2f4da1970a889207bdb6d0d', - name: 'YD-BTC-MAR21 Token Expiring 31 Mar 2021', - symbol: 'YD-BTC-MAR21', - decimals: 18, - }, - { - chainId: 1, - address: '0x1062ad0e59fa67fa0b27369113098cc941dd0d5f', - name: 'UMA 35 Call Expirying 30 Apr 2021', - symbol: 'UMAc35-0421', - decimals: 18, - }, - { - chainId: 1, - address: '0xf93340b1a3adf7eedcaec25fae8171d4b736e89f', - name: 'pxUSD Synthetic USD Expiring 1 April 2021', - symbol: 'pxUSD_MAR2021', - decimals: 18, - }, - { - chainId: 1, - address: '0x84bd083b1c8bf929f39c98bc17cf518f40154f58', - name: 'Mario Cash Synthetic Token Expiring 15 January 2021', - symbol: 'Mario Cash-JAN-2021', - decimals: 18, - }, - { - chainId: 1, - address: '0x81fab276aec924fbde190cf379783526d413cf70', - name: 'uGAS-FEB21 Token Expiring 28 Feb 2021', - symbol: 'uGAS-FEB21', - decimals: 18, - }, - { - chainId: 1, - address: '0x4e110603e70b0b5f1c403ee543b37e1f1244cf28', - name: 'uGAS-MAR21 Token Expiring 31 Mar 2021', - symbol: 'uGAS-MAR21', - decimals: 18, - }, - { - chainId: 1, - address: '0xcf55a7f92d5e0c6683debbc1fc20c0a6e056df13', - name: 'Zelda Elastic Cash', - symbol: 'Zelda Elastic Cash', - decimals: 18, - }, - { - chainId: 1, - address: '0x654eebac62240e6c56bab5f6adf7cfa74a894510', - name: 'Zelda Spring Nuts Cash', - symbol: 'Zelda Spring Nuts Cash', - decimals: 18, - }, - { - chainId: 1, - address: '0xa48920cc1ad85d8ea13af5d7be180c0338c306dd', - name: 'Zelda Summer Nuts Cash', - symbol: 'Zelda Summer Nuts Cash', - decimals: 18, - }, - { - chainId: 1, - address: '0x249a198d59b57fda5dda90630febc86fd8c7594c', - name: 'Zelda Whirlwind Cash', - symbol: 'Zelda Whirlwind Cash', - decimals: 18, - }, - { - chainId: 1, - address: '0x5ed1406873c9eb91f6f9a67ac4e152387c1132e7', - name: 'Zelda Reinforced Cash', - symbol: 'Zelda Reinforced Cash', - decimals: 18, - }, - { - chainId: 1, - address: '0x8104c9f13118320eefe5fbea8a44d600b85981ef', - name: 'Mini Mario Summer Cash', - symbol: 'Mini Mario Summer Cash', - decimals: 18, - }, - { - chainId: 1, - address: '0x69746c719e59674b147df25f50e7cfa0673cb625', - name: 'Mini Mario Spring Cash', - symbol: 'Mini Mario Spring Cash', - decimals: 18, - }, - { - chainId: 1, - address: '0x6b1257641d18791141f025eab36fb567c4b564ff', - name: 'Bitcoin Dominance Token 31 March 2021', - symbol: 'BTCDOM-MAR2021', - decimals: 18, - }, - { - chainId: 1, - address: '0x4e83b6287588a96321b2661c5e041845ff7814af', - name: 'Altcoin Dominance Token 31 March 2021', - symbol: 'ALTDOM-MAR2021', - decimals: 18, - }, - { - chainId: 1, - address: '0x59fec83ec709c893aedd1a144cf1828eb04127cd', - name: 'pxGOLD Synthetic GOLD Expiring 31 May 2021', - symbol: 'pxGOLD_MAY2021', - decimals: 18, - }, - { - chainId: 1, - address: '0x89337BFb7938804c3776C9FB921EccAf5ab76758', - name: 'Compound Annualized Rate Future Expiring 28 March 2021', - symbol: 'CAR-USDC-MAR21', - decimals: 18, - }, - { - chainId: 1, - address: '0xec58d3aefc9aaa2e0036fa65f70d569f49d9d1ed', - name: 'uSTONKS Index Token April 2021', - symbol: 'uSTONKS_APR21', - decimals: 6, - }, - { - chainId: 1, - address: '0xa6B9d7E3d76cF23549293Fb22c488E0Ea591A44e', - name: 'uGAS-JUN21 Token Expiring 30 Jun 2021', - symbol: 'uGAS-JUN21', - decimals: 18, - }, - { - chainId: 1, - address: '0xe813b65da6c38a04591aed3f082d32db7d53c382', - name: 'Yield Dollar [WETH Dec 2021]', - symbol: 'YD-ETH-DEC21', - decimals: 18, - }, - { - chainId: 1, - address: '0x4b606e9eb2228c70f44453afe5a73e1fea258ce1', - name: 'pxUSD Synthetic USD Expiring 31 Mar 2022', - symbol: 'pxUSD_MAR2022', - decimals: 18, - }, - { - chainId: 1, - address: '0x5247c0db4044fb6f97f32c7e1b48758019a5a912', - name: 'pxGOLD Synthetic Gold Expiring 31 Mar 2022', - symbol: 'pxGOLD_MAR2022', - decimals: 18, - }, - { - chainId: 1, - address: '0x56fb1acaff95c0b6ebcd17c8361a63d98b1a5a11', - name: 'uForex CNYUSD Synthetic Token April 2021', - symbol: 'uCNYUSD-APR', - decimals: 6, - }, - { - chainId: 1, - address: '0xd49fa405dce086c65d66ca1ca41f8e98583812b4', - name: 'uForex EURUSD Synthetic Token April 2021', - symbol: 'uEURUSD-APR', - decimals: 6, - }, - { - chainId: 1, - address: '0x29dddacba3b231ee8d673dd0f0fa759ea145561b', - name: 'DEFI_PULSE_TOTAL_TVL Synthetic Token Expiring 15 April 2021', - symbol: 'TVL_ALL_APRIL15', - decimals: 6, - }, - { - chainId: 1, - address: '0xcbe430927370e95b4b10cfc702c6017ec7abefc3', - name: 'Yield Dollar [WETH Jun 2021]', - symbol: 'YD-ETH-JUN21', - decimals: 18, - }, - { - chainId: 1, - address: '0x4b7fb448df91c8ed973494f8c8c4f12daf3a8521', - name: 'Yield Dollar [renBTC Jun 2021]', - symbol: 'YD-BTC-JUN21', - decimals: 8, - }, - { - chainId: 1, - address: '0x3108c33b6fb38efedaefd8b5f7ca01d5f5c7372d', - name: 'Yield Dollar UMA 21', - symbol: 'yUMA21', - decimals: 18, - }, - { - chainId: 1, - address: '0x0cae9e4d663793c2a2A0b211c1Cf4bBca2B9cAa7', - name: 'Mirrored Amazon', - symbol: 'MAMZN', - decimals: 18, - }, - { - chainId: 1, - address: '0x31c63146a635EB7465e5853020b39713AC356991', - name: 'M US Oil', - symbol: 'MUSO', - decimals: 18, - }, - { - chainId: 1, - address: '0x59A921Db27Dd6d4d974745B7FfC5c33932653442', - name: 'M Google', - symbol: 'MGOOGL', - decimals: 18, - }, - { - chainId: 1, - address: '0xf72FCd9DCF0190923Fadd44811E240Ef4533fc86', - name: 'Mirrored ProShares', - symbol: 'MVIXY', - decimals: 18, - }, - { - chainId: 1, - address: '0x56aA298a19C93c6801FDde870fA63EF75Cc0aF72', - name: 'Mirrored Alibaba', - symbol: 'MBABA', - decimals: 18, - }, - { - chainId: 1, - address: '0x0e99cC0535BB6251F6679Fa6E65d6d3b430e840B', - name: 'Mirrored Facebook', - symbol: 'MFB', - decimals: 18, - }, - { - chainId: 1, - address: '0x13B02c8dE71680e71F0820c996E4bE43c2F57d15', - name: 'Mirrored Invesco QQ', - symbol: 'MQQQ', - decimals: 18, - }, - { - chainId: 1, - address: '0x41BbEDd7286dAab5910a1f15d12CBda839852BD7', - name: 'Mirrored Microsoft', - symbol: 'MMSFT', - decimals: 18, - }, - { - chainId: 1, - address: '0x9d1555d8cB3C846Bb4f7D5B1B1080872c3166676', - name: 'Mirrored iShares Si', - symbol: 'MSLV', - decimals: 18, - }, - { - chainId: 1, - address: '0x21cA39943E91d704678F5D00b6616650F066fD63', - name: 'Mirrored Tesla', - symbol: 'MTSLA', - decimals: 18, - }, - { - chainId: 1, - address: '0xe82bbB62fA81d0701643d1675FB50ec52fD3Df92', - name: 'DYDX Token', - symbol: 'DYDX', - decimals: 18, - }, - { - chainId: 10, - address: '0xE405de8F52ba7559f9df3C368500B6E6ae6Cee49', - name: 'sETH', - symbol: 'Synth Ether', - decimals: 18, - }, - { - chainId: 10, - address: '0x298B9B95708152ff6968aafd889c6586e9169f1D', - name: 'sBTC', - symbol: 'Synth Bitcoin', - decimals: 18, - }, - { - chainId: 10, - address: '0xc5Db22719A06418028A40A9B5E9A7c02959D0d08', - name: 'sLINK', - symbol: 'Synth Link', - decimals: 18, - }, - { - chainId: 1, - address: '0x6B60eE11b73230045cF9095E6e43AE9Ea638e172', - name: 'Shatner', - symbol: 'SHAT', - decimals: 18, - }, - { - chainId: 1, - address: '0x7277a44D1325D81Ac58893002a1B40a41bea43fe', - name: 'FAANG Index', - symbol: 'FAANG', - decimals: 18, - }, - { - chainId: 1, - address: '0x76175599887730786bdA1545D0D7AcE8737fEBB1', - name: 'ENS DAO', - symbol: 'ENS', - decimals: 18, - }, - { - chainId: 1, - address: '0xa82AA729AE2F0d78e961D66db53949e27a9E866d', - name: 'BMEX', - symbol: 'BMEX', - decimals: 18, - }, -] -var UNSUPPORTED_TOKEN_LIST = { -<<<<<<< HEAD - name: name, - timestamp: timestamp, - version: version, - tags: tags, - logoURI: logoURI, - keywords: keywords, - tokens: tokens -}; - -function useAllLists() { - return useAppSelector(function (state) { return state.lists.byUrl; }); -} -/** - * Combine the tokens in map2 with the tokens on map1, where tokens on map1 take precedence - * @param map1 the base token map - * @param map2 the map of additioanl tokens to add to the base map - */ -function combineMaps(map1, map2) { - var chainIds = Object.keys(Object.keys(map1) - .concat(Object.keys(map2)) - .reduce(function (memo, value) { - memo[value] = true; - return memo; - }, {})).map(function (id) { return parseInt(id); }); - return chainIds.reduce(function (memo, chainId) { - memo[chainId] = __assign(__assign({}, map2[chainId]), map1[chainId]); - return memo; - }, {}); -} -// merge tokens contained within lists from urls -function useCombinedTokenMapFromUrls(urls) { - var lists = useAllLists(); - return React.useMemo(function () { - if (!urls) - return {}; - return (urls - .slice() - // sort by priority so top priority goes last - .sort(sortByListPriority) - .reduce(function (allTokens, currentUrl) { - var _a; - var current = (_a = lists[currentUrl]) === null || _a === void 0 ? void 0 : _a.current; - if (!current) - return allTokens; - try { - return combineMaps(allTokens, tokensToChainTokenMap(current)); - } - catch (error) { - console.error('Could not show token list due to error', error); - return allTokens; - } - }, {})); - }, [lists, urls]); -} -// filter out unsupported lists -function useActiveListUrls() { - var activeListUrls = useAppSelector(function (state) { return state.lists.activeListUrls; }); - return React.useMemo(function () { return activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.filter(function (url) { return !UNSUPPORTED_LIST_URLS.includes(url); }); }, [activeListUrls]); -} -function useInactiveListUrls() { - var lists = useAllLists(); - var allActiveListUrls = useActiveListUrls(); - return React.useMemo(function () { return Object.keys(lists).filter(function (url) { return !(allActiveListUrls === null || allActiveListUrls === void 0 ? void 0 : allActiveListUrls.includes(url)) && !UNSUPPORTED_LIST_URLS.includes(url); }); }, [lists, allActiveListUrls]); -} -// get all the tokens from active lists, combine with local default tokens -function useCombinedActiveList() { - var activeListUrls = useActiveListUrls(); - var activeTokens = useCombinedTokenMapFromUrls(activeListUrls); - return activeTokens; -} -// list of tokens not supported on interface for various reasons, used to show warnings and prevent swaps and adds -function useUnsupportedTokenList() { - // get hard-coded broken tokens - var brokenListMap = React.useMemo(function () { return tokensToChainTokenMap(BROKEN_LIST); }, []); - // get hard-coded list of unsupported tokens - var localUnsupportedListMap = React.useMemo(function () { return tokensToChainTokenMap(UNSUPPORTED_TOKEN_LIST); }, []); - // get dynamic list of unsupported tokens - var loadedUnsupportedListMap = useCombinedTokenMapFromUrls(UNSUPPORTED_LIST_URLS); - // format into one token address map - return React.useMemo(function () { return combineMaps(brokenListMap, combineMaps(localUnsupportedListMap, loadedUnsupportedListMap)); }, [brokenListMap, localUnsupportedListMap, loadedUnsupportedListMap]); -} -function useIsListActive(url) { - var activeListUrls = useActiveListUrls(); - return Boolean(activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(url)); -} - -// reduce token map into standard address <-> Token mapping, optionally include user added tokens -function useTokensFromMap(tokenMap, includeUserAdded) { - var chainId = useActiveWeb3React().chainId; - var userAddedTokens = useUserAddedTokens(); - return React.useMemo(function () { - var _a; - if (!chainId) - return {}; - // reduce to just tokens - var mapWithoutUrls = Object.keys((_a = tokenMap[chainId]) !== null && _a !== void 0 ? _a : {}).reduce(function (newMap, address) { - newMap[address] = tokenMap[chainId][address].token; - return newMap; - }, {}); - if (includeUserAdded) { - return (userAddedTokens - // reduce into all ALL_TOKENS filtered by the current chain - .reduce(function (tokenMap, token) { - tokenMap[token.address] = token; - return tokenMap; - }, __assign({}, mapWithoutUrls))); - } - return mapWithoutUrls; - }, [chainId, userAddedTokens, tokenMap, includeUserAdded]); -} -function useAllTokens() { - var allTokens = useCombinedActiveList(); - return useTokensFromMap(allTokens, true); -} -function useUnsupportedTokens() { - var chainId = useActiveWeb3React().chainId; - var listsByUrl = useAllLists(); - var unsupportedTokensMap = useUnsupportedTokenList(); - var unsupportedTokens = useTokensFromMap(unsupportedTokensMap, false); - // checks the default L2 lists to see if `bridgeInfo` has an L1 address value that is unsupported - var l2InferredBlockedTokens = React.useMemo(function () { - if (!chainId || !L2_CHAIN_IDS.includes(chainId)) { - return {}; - } - if (!listsByUrl) { - return {}; - } - var listUrl = CHAIN_INFO[chainId].defaultListUrl; - var list = listsByUrl[listUrl].current; - if (!list) { - return {}; - } - var unsupportedSet = new Set(Object.keys(unsupportedTokens)); - return list.tokens.reduce(function (acc, tokenInfo) { - var _a; - var _b; - var bridgeInfo = (_b = tokenInfo.extensions) === null || _b === void 0 ? void 0 : _b.bridgeInfo; - if (bridgeInfo && - bridgeInfo[SupportedChainId.MAINNET] && - bridgeInfo[SupportedChainId.MAINNET].tokenAddress && - unsupportedSet.has(bridgeInfo[SupportedChainId.MAINNET].tokenAddress)) { - var address = bridgeInfo[SupportedChainId.MAINNET].tokenAddress; - // don't rely on decimals--it's possible that a token could be bridged w/ different decimals on the L2 - return __assign(__assign({}, acc), (_a = {}, _a[address] = new sdkCore.Token(SupportedChainId.MAINNET, address, tokenInfo.decimals), _a)); - } - return acc; - }, {}); - }, [chainId, listsByUrl, unsupportedTokens]); - return __assign(__assign({}, unsupportedTokens), l2InferredBlockedTokens); -} -function useSearchInactiveTokenLists(search, minResults) { - if (minResults === void 0) { minResults = 10; } - var lists = useAllLists(); - var inactiveUrls = useInactiveListUrls(); - var chainId = useActiveWeb3React().chainId; - var activeTokens = useAllTokens(); - return React.useMemo(function () { - var e_1, _a, e_2, _b; - if (!search || search.trim().length === 0) - return []; - var tokenFilter = getTokenFilter(search); - var result = []; - var addressSet = {}; - try { - for (var inactiveUrls_1 = __values(inactiveUrls), inactiveUrls_1_1 = inactiveUrls_1.next(); !inactiveUrls_1_1.done; inactiveUrls_1_1 = inactiveUrls_1.next()) { - var url = inactiveUrls_1_1.value; - var list = lists[url].current; - if (!list) - continue; - try { - for (var _c = (e_2 = void 0, __values(list.tokens)), _d = _c.next(); !_d.done; _d = _c.next()) { - var tokenInfo = _d.value; - if (tokenInfo.chainId === chainId && tokenFilter(tokenInfo)) { - var wrapped = new WrappedTokenInfo(tokenInfo, list); - if (!(wrapped.address in activeTokens) && !addressSet[wrapped.address]) { - addressSet[wrapped.address] = true; - result.push(wrapped); - if (result.length >= minResults) - return result; - } - } - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (_d && !_d.done && (_b = _c.return)) _b.call(_c); - } - finally { if (e_2) throw e_2.error; } - } - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (inactiveUrls_1_1 && !inactiveUrls_1_1.done && (_a = inactiveUrls_1.return)) _a.call(inactiveUrls_1); - } - finally { if (e_1) throw e_1.error; } - } - return result; - }, [activeTokens, chainId, inactiveUrls, lists, minResults, search]); -} -function useIsTokenActive(token) { - var activeTokens = useAllTokens(); - if (!activeTokens || !token) { - return false; - } - return !!activeTokens[token.address]; -} -// Check if currency is included in custom list from user storage -function useIsUserAddedToken(currency) { - var userAddedTokens = useUserAddedTokens(); - if (!currency) { - return false; - } - return !!userAddedTokens.find(function (token) { return currency.equals(token); }); -} -// undefined if invalid or does not exist -// null if loading or null was passed -// otherwise returns the token -function useToken(tokenAddress) { - var tokens = useAllTokens(); - return useTokenFromMap(tokens, tokenAddress); -} -function useCurrency(currencyId) { - var tokens = useAllTokens(); - return useCurrencyFromMap(tokens, currencyId); -} - -var updateMatchesDarkMode = toolkit.createAction('user/updateMatchesDarkMode'); -var updateUserDarkMode = toolkit.createAction('user/updateUserDarkMode'); -var updateUserExpertMode = toolkit.createAction('user/updateUserExpertMode'); -var updateUserLocale = toolkit.createAction('user/updateUserLocale'); -var updateShowSurveyPopup = toolkit.createAction('user/updateShowSurveyPopup'); -var updateUserClientSideRouter = toolkit.createAction('user/updateUserClientSideRouter'); -var updateHideClosedPositions = toolkit.createAction('user/hideClosedPositions'); -var updateUserSlippageTolerance = toolkit.createAction('user/updateUserSlippageTolerance'); -var updateUserDeadline = toolkit.createAction('user/updateUserDeadline'); -var addSerializedToken = toolkit.createAction('user/addSerializedToken'); -var removeSerializedToken = toolkit.createAction('user/removeSerializedToken'); -var addSerializedPair = toolkit.createAction('user/addSerializedPair'); -var removeSerializedPair = toolkit.createAction('user/removeSerializedPair'); - -function serializeToken(token) { - return { - chainId: token.chainId, - address: token.address, - decimals: token.decimals, - symbol: token.symbol, - name: token.name, - }; -} -function deserializeToken(serializedToken) { - return new sdkCore.Token(serializedToken.chainId, serializedToken.address, serializedToken.decimals, serializedToken.symbol, serializedToken.name); -} -function useIsDarkMode() { - var _a = useAppSelector(function (_a) { - var _b = _a.user, matchesDarkMode = _b.matchesDarkMode, userDarkMode = _b.userDarkMode; - return ({ - userDarkMode: userDarkMode, - matchesDarkMode: matchesDarkMode, - }); - }, reactRedux.shallowEqual), userDarkMode = _a.userDarkMode, matchesDarkMode = _a.matchesDarkMode; - return userDarkMode === null ? matchesDarkMode : userDarkMode; -} -function useDarkModeManager() { - var dispatch = useAppDispatch(); - var darkMode = useIsDarkMode(); - var toggleSetDarkMode = React.useCallback(function () { - dispatch(updateUserDarkMode({ userDarkMode: !darkMode })); - }, [darkMode, dispatch]); - return [darkMode, toggleSetDarkMode]; -} -function useUserLocale() { - return useAppSelector(function (state) { return state.user.userLocale; }); -} -function useUserLocaleManager() { - var dispatch = useAppDispatch(); - var locale = useUserLocale(); - var setLocale = React.useCallback(function (newLocale) { - dispatch(updateUserLocale({ userLocale: newLocale })); - }, [dispatch]); - return [locale, setLocale]; -} -function useIsExpertMode() { - return useAppSelector(function (state) { return state.user.userExpertMode; }); -} -function useExpertModeManager() { - var dispatch = useAppDispatch(); - var expertMode = useIsExpertMode(); - var toggleSetExpertMode = React.useCallback(function () { - dispatch(updateUserExpertMode({ userExpertMode: !expertMode })); - }, [expertMode, dispatch]); - return [expertMode, toggleSetExpertMode]; -} -function useClientSideRouter() { - var dispatch = useAppDispatch(); - var clientSideRouter = useAppSelector(function (state) { return Boolean(state.user.userClientSideRouter); }); - var setClientSideRouter = React.useCallback(function (newClientSideRouter) { - dispatch(updateUserClientSideRouter({ userClientSideRouter: newClientSideRouter })); - }, [dispatch]); - return [clientSideRouter, setClientSideRouter]; -} -function useSetUserSlippageTolerance() { - var dispatch = useAppDispatch(); - return React.useCallback(function (userSlippageTolerance) { - var value; - try { - value = - userSlippageTolerance === 'auto' ? 'auto' : JSBI__default["default"].toNumber(userSlippageTolerance.multiply(10000).quotient); - } - catch (error) { - value = 'auto'; - } - dispatch(updateUserSlippageTolerance({ - userSlippageTolerance: value, - })); - }, [dispatch]); -} -/** - * Return the user's slippage tolerance, from the redux store, and a function to update the slippage tolerance - */ -function useUserSlippageTolerance() { - var userSlippageTolerance = useAppSelector(function (state) { - return state.user.userSlippageTolerance; - }); - return React.useMemo(function () { return (userSlippageTolerance === 'auto' ? 'auto' : new sdkCore.Percent(userSlippageTolerance, 10000)); }, [userSlippageTolerance]); -} -/** - * Same as above but replaces the auto with a default value - * @param defaultSlippageTolerance the default value to replace auto with - */ -function useUserSlippageToleranceWithDefault(defaultSlippageTolerance) { - var allowedSlippage = useUserSlippageTolerance(); - return React.useMemo(function () { return (allowedSlippage === 'auto' ? defaultSlippageTolerance : allowedSlippage); }, [allowedSlippage, defaultSlippageTolerance]); -} -function useUserTransactionTTL() { - var chainId = useActiveWeb3React().chainId; - var dispatch = useAppDispatch(); - var userDeadline = useAppSelector(function (state) { return state.user.userDeadline; }); - var onL2 = Boolean(chainId && L2_CHAIN_IDS.includes(chainId)); - var deadline = onL2 ? L2_DEADLINE_FROM_NOW : userDeadline; - var setUserDeadline = React.useCallback(function (userDeadline) { - dispatch(updateUserDeadline({ userDeadline: userDeadline })); - }, [dispatch]); - return [deadline, setUserDeadline]; -} -function useAddUserToken() { - var dispatch = useAppDispatch(); - return React.useCallback(function (token) { - dispatch(addSerializedToken({ serializedToken: serializeToken(token) })); - }, [dispatch]); -} -function useRemoveUserAddedToken() { - var dispatch = useAppDispatch(); - return React.useCallback(function (chainId, address) { - dispatch(removeSerializedToken({ chainId: chainId, address: address })); - }, [dispatch]); -} -function useUserAddedTokens() { - var chainId = useActiveWeb3React().chainId; - var serializedTokensMap = useAppSelector(function (_a) { - var tokens = _a.user.tokens; - return tokens; - }); - return React.useMemo(function () { - if (!chainId) - return []; - var tokenMap = (serializedTokensMap === null || serializedTokensMap === void 0 ? void 0 : serializedTokensMap[chainId]) - ? Object.values(serializedTokensMap[chainId]).map(deserializeToken) - : []; - return tokenMap; - }, [serializedTokensMap, chainId]); -} - -var EXPLORER_HOSTNAMES = { - 'etherscan.io': true, - 'ropsten.etherscan.io': true, - 'rinkeby.etherscan.io': true, - 'kovan.etherscan.io': true, - 'goerli.etherscan.io': true, - 'optimistic.etherscan.io': true, - 'kovan-optimistic.etherscan.io': true, - 'rinkeby-explorer.arbitrum.io': true, - 'arbiscan.io': true, -}; -/** - * Returns the anonymized version of the given href, i.e. one that does not leak user information - * @param href the link to anonymize, i.e. remove any personal data from - * @return string anonymized version of the given href - */ -function anonymizeLink(href) { - try { - var url = new URL(href); - if (EXPLORER_HOSTNAMES[url.hostname]) { - var pathPieces = url.pathname.split('/'); - var anonymizedPath = pathPieces.map(function (pc) { return (/0x[a-fA-F0-9]+/.test(pc) ? '***' : pc); }).join('/'); - return url.protocol + "//" + url.hostname + anonymizedPath; - } - return href; - } - catch (error) { - return href; - } -} - -var ButtonText = styled__default["default"].button(templateObject_1$X || (templateObject_1$X = __makeTemplateObject(["\n outline: none;\n border: none;\n font-size: inherit;\n padding: 0;\n margin: 0;\n background: none;\n cursor: pointer;\n\n :hover {\n opacity: 0.7;\n }\n\n :focus {\n text-decoration: underline;\n }\n"], ["\n outline: none;\n border: none;\n font-size: inherit;\n padding: 0;\n margin: 0;\n background: none;\n cursor: pointer;\n\n :hover {\n opacity: 0.7;\n }\n\n :focus {\n text-decoration: underline;\n }\n"]))); -var CloseIcon = styled__default["default"](reactFeather.X)(templateObject_2$E || (templateObject_2$E = __makeTemplateObject(["\n cursor: pointer;\n"], ["\n cursor: pointer;\n" - // for wrapper react feather icons -]))); -// for wrapper react feather icons -var IconWrapper = styled__default["default"].div(templateObject_3$x || (templateObject_3$x = __makeTemplateObject(["\n display: flex;\n align-items: center;\n justify-content: center;\n width: ", ";\n height: ", ";\n margin-right: ", ";\n margin-left: ", ";\n & > * {\n stroke: ", ";\n }\n"], ["\n display: flex;\n align-items: center;\n justify-content: center;\n width: ", ";\n height: ", ";\n margin-right: ", ";\n margin-left: ", ";\n & > * {\n stroke: ", ";\n }\n" - // A button that triggers some onClick result, but looks like a link. -])), function (_a) { - var size = _a.size; - return size !== null && size !== void 0 ? size : '20px'; -}, function (_a) { - var size = _a.size; - return size !== null && size !== void 0 ? size : '20px'; -}, function (_a) { - var marginRight = _a.marginRight; - return marginRight !== null && marginRight !== void 0 ? marginRight : 0; -}, function (_a) { - var marginLeft = _a.marginLeft; - return marginLeft !== null && marginLeft !== void 0 ? marginLeft : 0; -}, function (_a) { - var theme = _a.theme, stroke = _a.stroke; - return stroke !== null && stroke !== void 0 ? stroke : theme.blue1; -}); -// A button that triggers some onClick result, but looks like a link. -var LinkStyledButton = styled__default["default"].button(templateObject_4$m || (templateObject_4$m = __makeTemplateObject(["\n border: none;\n text-decoration: none;\n background: none;\n\n cursor: ", ";\n color: ", ";\n font-weight: 500;\n\n :hover {\n text-decoration: ", ";\n }\n\n :focus {\n outline: none;\n text-decoration: ", ";\n }\n\n :active {\n text-decoration: none;\n }\n"], ["\n border: none;\n text-decoration: none;\n background: none;\n\n cursor: ", ";\n color: ", ";\n font-weight: 500;\n\n :hover {\n text-decoration: ", ";\n }\n\n :focus {\n outline: none;\n text-decoration: ", ";\n }\n\n :active {\n text-decoration: none;\n }\n" - // An internal link from the react-router-dom library that is correctly styled -])), function (_a) { - var disabled = _a.disabled; - return (disabled ? 'default' : 'pointer'); -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return (disabled ? theme.text2 : theme.primary1); -}, function (_a) { - var disabled = _a.disabled; - return (disabled ? null : 'underline'); -}, function (_a) { - var disabled = _a.disabled; - return (disabled ? null : 'underline'); -}); -// An internal link from the react-router-dom library that is correctly styled -var StyledInternalLink = styled__default["default"](reactRouterDom.Link)(templateObject_5$j || (templateObject_5$j = __makeTemplateObject(["\n text-decoration: none;\n cursor: pointer;\n color: ", ";\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 text-decoration: none;\n cursor: pointer;\n color: ", ";\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"])), function (_a) { - var theme = _a.theme; - return theme.primary1; -}); -var StyledLink = styled__default["default"].a(templateObject_6$d || (templateObject_6$d = __makeTemplateObject(["\n text-decoration: none;\n cursor: pointer;\n color: ", ";\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 text-decoration: none;\n cursor: pointer;\n color: ", ";\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"])), function (_a) { - var theme = _a.theme; - return theme.primary1; -}); -var LinkIconWrapper = styled__default["default"].a(templateObject_7$c || (templateObject_7$c = __makeTemplateObject(["\n text-decoration: none;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n text-decoration: none;\n opacity: 0.7;\n }\n\n :focus {\n outline: none;\n text-decoration: none;\n }\n\n :active {\n text-decoration: none;\n }\n"], ["\n text-decoration: none;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n text-decoration: none;\n opacity: 0.7;\n }\n\n :focus {\n outline: none;\n text-decoration: none;\n }\n\n :active {\n text-decoration: none;\n }\n"]))); -var LinkIcon = styled__default["default"](reactFeather.ExternalLink)(templateObject_8$9 || (templateObject_8$9 = __makeTemplateObject(["\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ", ";\n"], ["\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.blue1; -}); -var TrashIcon = styled__default["default"](reactFeather.Trash)(templateObject_9$8 || (templateObject_9$8 = __makeTemplateObject(["\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ", ";\n\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n opacity: 0.7;\n }\n"], ["\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ", ";\n\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n opacity: 0.7;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.text3; -}); -var rotateImg = styled.keyframes(templateObject_10$6 || (templateObject_10$6 = __makeTemplateObject(["\n 0% {\n transform: perspective(1000px) rotateY(0deg);\n }\n\n 100% {\n transform: perspective(1000px) rotateY(360deg);\n }\n"], ["\n 0% {\n transform: perspective(1000px) rotateY(0deg);\n }\n\n 100% {\n transform: perspective(1000px) rotateY(360deg);\n }\n"]))); -styled__default["default"].img(templateObject_11$5 || (templateObject_11$5 = __makeTemplateObject(["\n animation: ", " 5s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n padding: 2rem 0 0 0;\n filter: drop-shadow(0px 2px 4px rgba(0, 0, 0, 0.15));\n"], ["\n animation: ", " 5s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n padding: 2rem 0 0 0;\n filter: drop-shadow(0px 2px 4px rgba(0, 0, 0, 0.15));\n"])), rotateImg); -function handleClickExternalLink(event) { - var _a = event.currentTarget, target = _a.target, href = _a.href; - var anonymizedHref = anonymizeLink(href); - // don't prevent default, don't redirect if it's a new tab - if (target === '_blank' || event.ctrlKey || event.metaKey) { - ReactGA__default["default"].outboundLink({ label: anonymizedHref }, function () { - console.debug('Fired outbound link event', anonymizedHref); - }); - } - else { - event.preventDefault(); - // send a ReactGA event and then trigger a location change - ReactGA__default["default"].outboundLink({ label: anonymizedHref }, function () { - window.location.href = anonymizedHref; - }); - } -} -/** - * Outbound link that handles firing google analytics events - */ -function ExternalLink(_a) { - var _b = _a.target, target = _b === void 0 ? '_blank' : _b, href = _a.href, _c = _a.rel, rel = _c === void 0 ? 'noopener noreferrer' : _c, rest = __rest(_a, ["target", "href", "rel"]); - return jsxRuntime.jsx(StyledLink, __assign({ target: target, rel: rel, href: href, onClick: handleClickExternalLink }, rest), void 0); -} -function ExternalLinkIcon(_a) { - var _b = _a.target, target = _b === void 0 ? '_blank' : _b, href = _a.href, _c = _a.rel, rel = _c === void 0 ? 'noopener noreferrer' : _c, rest = __rest(_a, ["target", "href", "rel"]); - return (jsxRuntime.jsx(LinkIconWrapper, __assign({ target: target, rel: rel, href: href, onClick: handleClickExternalLink }, rest, { children: jsxRuntime.jsx(LinkIcon, {}, void 0) }), void 0)); -} -var rotate$1 = styled.keyframes(templateObject_12$5 || (templateObject_12$5 = __makeTemplateObject(["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"], ["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"]))); -var Spinner$1 = styled__default["default"].img(templateObject_13$2 || (templateObject_13$2 = __makeTemplateObject(["\n animation: 2s ", " linear infinite;\n width: 16px;\n height: 16px;\n"], ["\n animation: 2s ", " linear infinite;\n width: 16px;\n height: 16px;\n"])), rotate$1); -styled__default["default"](StyledInternalLink)(templateObject_14$2 || (templateObject_14$2 = __makeTemplateObject(["\n color: ", ";\n"], ["\n color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.text1; -}); -var CustomLightSpinner = styled__default["default"](Spinner$1)(templateObject_15$1 || (templateObject_15$1 = __makeTemplateObject(["\n height: ", ";\n width: ", ";\n"], ["\n height: ", ";\n width: ", ";\n"])), function (_a) { - var size = _a.size; - return size; -}, function (_a) { - var size = _a.size; - return size; -}); -var HideSmall = styled__default["default"].span(templateObject_17 || (templateObject_17 = __makeTemplateObject(["\n ", ";\n"], ["\n ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToSmall(templateObject_16 || (templateObject_16 = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); -}); -styled__default["default"].span(templateObject_19 || (templateObject_19 = __makeTemplateObject(["\n ", ";\n"], ["\n ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToExtraSmall(templateObject_18 || (templateObject_18 = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); -}); -styled__default["default"].span(templateObject_21 || (templateObject_21 = __makeTemplateObject(["\n display: none;\n ", ";\n"], ["\n display: none;\n ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToSmall(templateObject_20 || (templateObject_20 = __makeTemplateObject(["\n display: block;\n "], ["\n display: block;\n "]))); -}); -var Separator$1 = styled__default["default"].div(templateObject_22 || (templateObject_22 = __makeTemplateObject(["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"], ["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}); -var templateObject_1$X, templateObject_2$E, templateObject_3$x, templateObject_4$m, templateObject_5$j, templateObject_6$d, templateObject_7$c, templateObject_8$9, templateObject_9$8, templateObject_10$6, templateObject_11$5, templateObject_12$5, templateObject_13$2, templateObject_14$2, templateObject_15$1, templateObject_16, templateObject_17, templateObject_18, templateObject_19, templateObject_20, templateObject_21, templateObject_22; - -var MEDIA_WIDTHS = { - upToExtraSmall: 500, - upToSmall: 720, - upToMedium: 960, - upToLarge: 1280, -}; -// Migrating to a standard z-index system https://getbootstrap.com/docs/5.0/layout/z-index/ -// Please avoid using deprecated numbers -var Z_INDEX; -(function (Z_INDEX) { - Z_INDEX[Z_INDEX["deprecated_zero"] = 0] = "deprecated_zero"; - Z_INDEX[Z_INDEX["deprecated_content"] = 1] = "deprecated_content"; - Z_INDEX[Z_INDEX["dropdown"] = 1000] = "dropdown"; - Z_INDEX[Z_INDEX["sticky"] = 1020] = "sticky"; - Z_INDEX[Z_INDEX["fixed"] = 1030] = "fixed"; - Z_INDEX[Z_INDEX["modalBackdrop"] = 1040] = "modalBackdrop"; - Z_INDEX[Z_INDEX["offcanvas"] = 1050] = "offcanvas"; - Z_INDEX[Z_INDEX["modal"] = 1060] = "modal"; - Z_INDEX[Z_INDEX["popover"] = 1070] = "popover"; - Z_INDEX[Z_INDEX["tooltip"] = 1080] = "tooltip"; -})(Z_INDEX || (Z_INDEX = {})); -var mediaWidthTemplates = Object.keys(MEDIA_WIDTHS).reduce(function (accumulator, size) { - accumulator[size] = function (a, b, c) { return styled.css(templateObject_1$W || (templateObject_1$W = __makeTemplateObject(["\n @media (max-width: ", "px) {\n ", "\n }\n "], ["\n @media (max-width: ", "px) {\n ", "\n }\n "])), MEDIA_WIDTHS[size], styled.css(a, b, c)); }; - return accumulator; -}, {}); -var white = '#FFFFFF'; -var black = '#000000'; -function colors(darkMode) { - return { - darkMode: darkMode, - // base - white: white, - black: black, - // text - text1: darkMode ? '#FFFFFF' : '#000000', - text2: darkMode ? '#C3C5CB' : '#565A69', - text3: darkMode ? '#8F96AC' : '#6E727D', - text4: darkMode ? '#B2B9D2' : '#C3C5CB', - text5: darkMode ? '#2C2F36' : '#EDEEF2', - // backgrounds / greys - bg0: darkMode ? '#191B1F' : '#FFF', - bg1: darkMode ? '#212429' : '#F7F8FA', - bg2: darkMode ? '#2C2F36' : '#EDEEF2', - bg3: darkMode ? '#40444F' : '#CED0D9', - bg4: darkMode ? '#565A69' : '#888D9B', - bg5: darkMode ? '#6C7284' : '#888D9B', - bg6: darkMode ? '#1A2028' : '#6C7284', - //specialty colors - modalBG: darkMode ? 'rgba(0,0,0,.425)' : 'rgba(0,0,0,0.3)', - advancedBG: darkMode ? 'rgba(0,0,0,0.1)' : 'rgba(255,255,255,0.6)', - //primary colors - primary1: darkMode ? '#2172E5' : '#E8006F', - primary2: darkMode ? '#3680E7' : '#FF8CC3', - primary3: darkMode ? '#4D8FEA' : '#FF99C9', - primary4: darkMode ? '#376bad70' : '#F6DDE8', - primary5: darkMode ? '#153d6f70' : '#FDEAF1', - // color text - primaryText1: darkMode ? '#5090ea' : '#D50066', - // secondary colors - secondary1: darkMode ? '#2172E5' : '#E8006F', - secondary2: darkMode ? '#17000b26' : '#F6DDE8', - secondary3: darkMode ? '#17000b26' : '#FDEAF1', - // other - red1: darkMode ? '#FF4343' : '#DA2D2B', - red2: darkMode ? '#F82D3A' : '#DF1F38', - red3: '#D60000', - green1: darkMode ? '#27AE60' : '#007D35', - yellow1: '#E3A507', - yellow2: '#FF8F00', - yellow3: '#F3B71E', - blue1: darkMode ? '#2172E5' : '#0068FC', - blue2: darkMode ? '#5199FF' : '#0068FC', - error: darkMode ? '#FD4040' : '#DF1F38', - success: darkMode ? '#27AE60' : '#007D35', - warning: '#FF8F00', - // dont wanna forget these blue yet - blue4: darkMode ? '#153d6f70' : '#C4D9F8', - // blue5: darkMode ? '#153d6f70' : '#EBF4FF', - }; -} -function theme(darkMode) { - return __assign(__assign({}, colors(darkMode)), { grids: { - sm: 8, - md: 12, - lg: 24, - }, - //shadows - shadow1: darkMode ? '#000' : '#2F80ED', - // media queries - mediaWidth: mediaWidthTemplates, - // css snippets - flexColumnNoWrap: styled.css(templateObject_2$D || (templateObject_2$D = __makeTemplateObject(["\n display: flex;\n flex-flow: column nowrap;\n "], ["\n display: flex;\n flex-flow: column nowrap;\n "]))), flexRowNoWrap: styled.css(templateObject_3$w || (templateObject_3$w = __makeTemplateObject(["\n display: flex;\n flex-flow: row nowrap;\n "], ["\n display: flex;\n flex-flow: row nowrap;\n "]))) }); -} -function ThemeProvider(_a) { - var children = _a.children; - var darkMode = useIsDarkMode(); - var themeObject = React.useMemo(function () { return theme(darkMode); }, [darkMode]); - return jsxRuntime.jsx(styled.ThemeProvider, __assign({ theme: themeObject }, { children: children }), void 0); -} -var TextWrapper$1 = styled__default["default"](rebass.Text)(templateObject_4$l || (templateObject_4$l = __makeTemplateObject(["\n color: ", ";\n"], ["\n color: ", ";\n" - /** - * Preset styles of the Rebass Text component - */ -])), function (_a) { - var color = _a.color, theme = _a.theme; - return theme[color]; -}); -/** - * Preset styles of the Rebass Text component - */ -var ThemedText = { - Main: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text2' }, props), void 0); - }, - Link: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'primary1' }, props), void 0); - }, - Label: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 600, color: 'text1' }, props), void 0); - }, - Black: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text1' }, props), void 0); - }, - White: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'white' }, props), void 0); - }, - Body: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 400, fontSize: 16, color: 'text1' }, props), void 0); - }, - LargeHeader: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 600, fontSize: 24 }, props), void 0); - }, - MediumHeader: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, fontSize: 20 }, props), void 0); - }, - SubHeader: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 400, fontSize: 14 }, props), void 0); - }, - Small: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, fontSize: 11 }, props), void 0); - }, - Blue: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'blue1' }, props), void 0); - }, - Yellow: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'yellow3' }, props), void 0); - }, - DarkGray: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text3' }, props), void 0); - }, - Gray: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'bg3' }, props), void 0); - }, - Italic: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, fontSize: 12, fontStyle: 'italic', color: 'text2' }, props), void 0); - }, - Error: function (_a) { - var error = _a.error, props = __rest(_a, ["error"]); - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: error ? 'red1' : 'text2' }, props), void 0); - }, -}; -var ThemedGlobalStyle = styled.createGlobalStyle(templateObject_5$i || (templateObject_5$i = __makeTemplateObject(["\nhtml {\n color: ", ";\n background-color: ", " !important;\n}\n\na {\n color: ", "; \n}\n"], ["\nhtml {\n color: ", ";\n background-color: ", " !important;\n}\n\na {\n color: ", "; \n}\n"])), function (_a) { - var theme = _a.theme; - return theme.text1; -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var theme = _a.theme; - return theme.blue1; -}); -var templateObject_1$W, templateObject_2$D, templateObject_3$w, templateObject_4$l, templateObject_5$i; - -var Row = styled__default["default"](styledComponents.Box)(templateObject_1$V || (templateObject_1$V = __makeTemplateObject(["\n width: ", ";\n display: flex;\n padding: 0;\n align-items: ", ";\n justify-content: ", ";\n padding: ", ";\n border: ", ";\n border-radius: ", ";\n"], ["\n width: ", ";\n display: flex;\n padding: 0;\n align-items: ", ";\n justify-content: ", ";\n padding: ", ";\n border: ", ";\n border-radius: ", ";\n"])), function (_a) { - var width = _a.width; - return width !== null && width !== void 0 ? width : '100%'; -}, function (_a) { - var align = _a.align; - return align !== null && align !== void 0 ? align : 'center'; -}, function (_a) { - var justify = _a.justify; - return justify !== null && justify !== void 0 ? justify : 'flex-start'; -}, function (_a) { - var padding = _a.padding; - return padding; -}, function (_a) { - var border = _a.border; - return border; -}, function (_a) { - var borderRadius = _a.borderRadius; - return borderRadius; -}); -var RowBetween = styled__default["default"](Row)(templateObject_2$C || (templateObject_2$C = __makeTemplateObject(["\n justify-content: space-between;\n"], ["\n justify-content: space-between;\n"]))); -styled__default["default"].div(templateObject_3$v || (templateObject_3$v = __makeTemplateObject(["\n display: flex;\n align-items: flex-end;\n"], ["\n display: flex;\n align-items: flex-end;\n"]))); -var AutoRow = styled__default["default"](Row)(templateObject_4$k || (templateObject_4$k = __makeTemplateObject(["\n flex-wrap: wrap;\n margin: ", ";\n justify-content: ", ";\n\n & > * {\n margin: ", " !important;\n }\n"], ["\n flex-wrap: wrap;\n margin: ", ";\n justify-content: ", ";\n\n & > * {\n margin: ", " !important;\n }\n"])), function (_a) { - var gap = _a.gap; - return gap && "-" + gap; -}, function (_a) { - var justify = _a.justify; - return justify && justify; -}, function (_a) { - var gap = _a.gap; - return gap; -}); -var RowFixed = styled__default["default"](Row)(templateObject_5$h || (templateObject_5$h = __makeTemplateObject(["\n width: fit-content;\n margin: ", ";\n"], ["\n width: fit-content;\n margin: ", ";\n"])), function (_a) { - var gap = _a.gap; - return gap && "-" + gap; -}); -var templateObject_1$V, templateObject_2$C, templateObject_3$v, templateObject_4$k, templateObject_5$h; - -var _a$b, _b$2, _c$2, _d$1; -var L2Icon = styled__default["default"].img(templateObject_1$U || (templateObject_1$U = __makeTemplateObject(["\n width: 24px;\n height: 24px;\n margin-right: 16px;\n"], ["\n width: 24px;\n height: 24px;\n margin-right: 16px;\n"]))); -styled__default["default"].div(templateObject_2$B || (templateObject_2$B = __makeTemplateObject(["\n align-items: center;\n display: flex;\n justify-content: flex-start;\n padding: 0 20px 20px 20px;\n"], ["\n align-items: center;\n display: flex;\n justify-content: flex-start;\n padding: 0 20px 20px 20px;\n"]))); -var BodyText = styled__default["default"].div(templateObject_3$u || (templateObject_3$u = __makeTemplateObject(["\n color: ", ";\n display: flex;\n align-items: center;\n justify-content: flex-start;\n margin: 8px;\n font-size: 14px;\n"], ["\n color: ", ";\n display: flex;\n align-items: center;\n justify-content: flex-start;\n margin: 8px;\n font-size: 14px;\n"])), function (_a) { - var color = _a.color; - return color; -}); -var RootWrapper = styled__default["default"].div(templateObject_4$j || (templateObject_4$j = __makeTemplateObject(["\n position: relative;\n margin-top: 16px;\n"], ["\n position: relative;\n margin-top: 16px;\n"]))); -var SHOULD_SHOW_ALERT = (_a$b = {}, - _a$b[SupportedChainId.OPTIMISM] = true, - _a$b[SupportedChainId.OPTIMISTIC_KOVAN] = true, - _a$b[SupportedChainId.ARBITRUM_ONE] = true, - _a$b[SupportedChainId.ARBITRUM_RINKEBY] = true, - _a$b[SupportedChainId.POLYGON] = true, - _a$b[SupportedChainId.POLYGON_MUMBAI] = true, - _a$b); -var BG_COLORS_BY_DARK_MODE_AND_CHAIN_ID = { - dark: (_b$2 = {}, - _b$2[SupportedChainId.POLYGON] = 'radial-gradient(100% 93.36% at 0% 6.64%, rgba(160, 108, 247, 0.1) 0%, rgba(82, 32, 166, 0.1) 100%)', - _b$2[SupportedChainId.POLYGON_MUMBAI] = 'radial-gradient(100% 93.36% at 0% 6.64%, rgba(160, 108, 247, 0.1) 0%, rgba(82, 32, 166, 0.1) 100%)', - _b$2[SupportedChainId.OPTIMISM] = 'radial-gradient(948% 292% at 42% 0%, rgba(255, 58, 212, 0.01) 0%, rgba(255, 255, 255, 0.04) 100%),radial-gradient(98% 96% at 2% 0%, rgba(255, 39, 39, 0.01) 0%, rgba(235, 0, 255, 0.01) 96%)', - _b$2[SupportedChainId.OPTIMISTIC_KOVAN] = 'radial-gradient(948% 292% at 42% 0%, rgba(255, 58, 212, 0.04) 0%, rgba(255, 255, 255, 0.04) 100%),radial-gradient(98% 96% at 2% 0%, rgba(255, 39, 39, 0.04) 0%, rgba(235, 0, 255, 0.01 96%)', - _b$2[SupportedChainId.ARBITRUM_ONE] = 'radial-gradient(285% 8200% at 30% 50%, rgba(40, 160, 240, 0.01) 0%, rgba(219, 255, 0, 0) 100%),radial-gradient(75% 75% at 0% 0%, rgba(150, 190, 220, 0.05) 0%, rgba(33, 114, 229, 0.05) 100%), hsla(0, 0%, 100%, 0.05)', - _b$2[SupportedChainId.ARBITRUM_RINKEBY] = 'radial-gradient(285% 8200% at 30% 50%, rgba(40, 160, 240, 0.05) 0%, rgba(219, 255, 0, 0) 100%),radial-gradient(75% 75% at 0% 0%, rgba(150, 190, 220, 0.05) 0%, rgba(33, 114, 229, 0.1) 100%), hsla(0, 0%, 100%, 0.05)', - _b$2), - light: (_c$2 = {}, - _c$2[SupportedChainId.POLYGON] = 'radial-gradient(182.71% 205.59% at 2.81% 7.69%, rgba(130, 71, 229, 0.2) 0%, rgba(167, 202, 255, 0.2) 100%)', - _c$2[SupportedChainId.POLYGON_MUMBAI] = 'radial-gradient(182.71% 205.59% at 2.81% 7.69%, rgba(130, 71, 229, 0.2) 0%, rgba(167, 202, 255, 0.2) 100%)', - _c$2[SupportedChainId.OPTIMISM] = 'radial-gradient(92% 105% at 50% 7%, rgba(255, 58, 212, 0.04) 0%, rgba(255, 255, 255, 0.03) 100%),radial-gradient(100% 97% at 0% 12%, rgba(235, 0, 255, 0.1) 0%, rgba(243, 19, 19, 0.1) 100%), hsla(0, 0%, 100%, 0.1)', - _c$2[SupportedChainId.OPTIMISTIC_KOVAN] = 'radial-gradient(92% 105% at 50% 7%, rgba(255, 58, 212, 0.04) 0%, rgba(255, 255, 255, 0.03) 100%),radial-gradient(100% 97% at 0% 12%, rgba(235, 0, 255, 0.1) 0%, rgba(243, 19, 19, 0.1) 100%), hsla(0, 0%, 100%, 0.1)', - _c$2[SupportedChainId.ARBITRUM_ONE] = 'radial-gradient(285% 8200% at 30% 50%, rgba(40, 160, 240, 0.1) 0%, rgba(219, 255, 0, 0) 100%),radial-gradient(circle at top left, hsla(206, 50%, 75%, 0.01), hsla(215, 79%, 51%, 0.12)), hsla(0, 0%, 100%, 0.1)', - _c$2[SupportedChainId.ARBITRUM_RINKEBY] = 'radial-gradient(285% 8200% at 30% 50%, rgba(40, 160, 240, 0.1) 0%, rgba(219, 255, 0, 0) 100%),radial-gradient(circle at top left, hsla(206, 50%, 75%, 0.01), hsla(215, 79%, 51%, 0.12)), hsla(0, 0%, 100%, 0.1)', - _c$2), -}; -var ContentWrapper$1 = styled__default["default"].div(templateObject_5$g || (templateObject_5$g = __makeTemplateObject(["\n background: ", ";\n border-radius: 20px;\n display: flex;\n flex-direction: row;\n overflow: hidden;\n position: relative;\n width: 100%;\n\n :before {\n background-image: url(", ");\n background-repeat: no-repeat;\n background-size: 300px;\n content: '';\n height: 300px;\n opacity: 0.1;\n position: absolute;\n transform: rotate(25deg) translate(-90px, -40px);\n width: 300px;\n z-index: -1;\n }\n"], ["\n background: ", ";\n border-radius: 20px;\n display: flex;\n flex-direction: row;\n overflow: hidden;\n position: relative;\n width: 100%;\n\n :before {\n background-image: url(", ");\n background-repeat: no-repeat;\n background-size: 300px;\n content: '';\n height: 300px;\n opacity: 0.1;\n position: absolute;\n transform: rotate(25deg) translate(-90px, -40px);\n width: 300px;\n z-index: -1;\n }\n"])), function (_a) { - var chainId = _a.chainId, darkMode = _a.darkMode; - return BG_COLORS_BY_DARK_MODE_AND_CHAIN_ID[darkMode ? 'dark' : 'light'][chainId]; -}, function (_a) { - var logoUrl = _a.logoUrl; - return logoUrl; -}); -var Header$1 = styled__default["default"].h2(templateObject_6$c || (templateObject_6$c = __makeTemplateObject(["\n font-weight: 600;\n font-size: 16px;\n margin: 0;\n"], ["\n font-weight: 600;\n font-size: 16px;\n margin: 0;\n"]))); -var LinkOutToBridge = styled__default["default"](ExternalLink)(templateObject_7$b || (templateObject_7$b = __makeTemplateObject(["\n align-items: center;\n border-radius: 8px;\n color: white;\n display: flex;\n font-size: 16px;\n justify-content: space-between;\n padding: 6px 8px;\n margin-right: 12px;\n text-decoration: none !important;\n width: 100%;\n"], ["\n align-items: center;\n border-radius: 8px;\n color: white;\n display: flex;\n font-size: 16px;\n justify-content: space-between;\n padding: 6px 8px;\n margin-right: 12px;\n text-decoration: none !important;\n width: 100%;\n"]))); -var StyledArrowUpRight = styled__default["default"](reactFeather.ArrowUpRight)(templateObject_8$8 || (templateObject_8$8 = __makeTemplateObject(["\n margin-left: 12px;\n width: 24px;\n height: 24px;\n"], ["\n margin-left: 12px;\n width: 24px;\n height: 24px;\n"]))); -var TEXT_COLORS = (_d$1 = {}, - _d$1[SupportedChainId.POLYGON] = 'rgba(130, 71, 229)', - _d$1[SupportedChainId.POLYGON_MUMBAI] = 'rgba(130, 71, 229)', - _d$1[SupportedChainId.OPTIMISM] = '#ff3856', - _d$1[SupportedChainId.OPTIMISTIC_KOVAN] = '#ff3856', - _d$1[SupportedChainId.ARBITRUM_ONE] = '#0490ed', - _d$1[SupportedChainId.ARBITRUM_RINKEBY] = '#0490ed', - _d$1); -function shouldShowAlert(chainId) { - return Boolean(chainId && SHOULD_SHOW_ALERT[chainId]); -} -function NetworkAlert() { - var chainId = useActiveWeb3React().chainId; - var _a = __read(useDarkModeManager(), 1), darkMode = _a[0]; - if (!shouldShowAlert(chainId)) { - return null; - } - var _b = CHAIN_INFO[chainId], label = _b.label, logoUrl = _b.logoUrl, bridge = _b.bridge; - var textColor = TEXT_COLORS[chainId]; - return bridge ? (jsxRuntime.jsx(RootWrapper, { children: jsxRuntime.jsx(ContentWrapper$1, __assign({ chainId: chainId, darkMode: darkMode, logoUrl: logoUrl }, { children: jsxRuntime.jsxs(LinkOutToBridge, __assign({ href: bridge }, { children: [jsxRuntime.jsxs(BodyText, __assign({ color: textColor }, { children: [jsxRuntime.jsx(L2Icon, { src: logoUrl }, void 0), jsxRuntime.jsxs(AutoRow, { children: [jsxRuntime.jsx(Header$1, { children: jsxRuntime.jsxs(macro.Trans, { children: [label, " token bridge"] }, void 0) }, void 0), jsxRuntime.jsx(HideSmall, { children: jsxRuntime.jsxs(macro.Trans, { children: ["Deposit tokens to the ", label, " network."] }, void 0) }, void 0)] }, void 0)] }), void 0), jsxRuntime.jsx(StyledArrowUpRight, { color: textColor }, void 0)] }), void 0) }), void 0) }, void 0)) : null; -} -var templateObject_1$U, templateObject_2$B, templateObject_3$u, templateObject_4$j, templateObject_5$g, templateObject_6$c, templateObject_7$b, templateObject_8$8; - -/** - * @param open conditional to show content or hide - * @returns Wrapper to smoothly hide and expand content - */ -function AnimatedDropdown(_a) { - var open = _a.open, children = _a.children; - var _b = useResizeObserver__default["default"](), ref = _b.ref, height = _b.height; - var props = reactSpring.useSpring({ - height: open ? height !== null && height !== void 0 ? height : 0 : 0, - config: { - mass: 1.2, - tension: 300, - friction: 20, - clamp: true, - velocity: 0.01, - }, - }); - return (jsxRuntime.jsx(reactSpring.animated.div, __assign({ style: __assign(__assign({}, props), { overflow: 'hidden', width: '100%', willChange: 'height' }) }, { children: jsxRuntime.jsx("div", __assign({ ref: ref }, { children: children }), void 0) }), void 0)); -} - -var Card = styled__default["default"](styledComponents.Box)(templateObject_1$T || (templateObject_1$T = __makeTemplateObject(["\n width: ", ";\n padding: ", ";\n border-radius: ", ";\n border: ", ";\n"], ["\n width: ", ";\n padding: ", ";\n border-radius: ", ";\n border: ", ";\n"])), function (_a) { - var width = _a.width; - return width !== null && width !== void 0 ? width : '100%'; -}, function (_a) { - var padding = _a.padding; - return padding !== null && padding !== void 0 ? padding : '1rem'; -}, function (_a) { - var $borderRadius = _a.$borderRadius; - return $borderRadius !== null && $borderRadius !== void 0 ? $borderRadius : '16px'; -}, function (_a) { - var border = _a.border; - return border; -}); -var LightCard = styled__default["default"](Card)(templateObject_2$A || (templateObject_2$A = __makeTemplateObject(["\n border: 1px solid ", ";\n background-color: ", ";\n"], ["\n border: 1px solid ", ";\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}); -var LightGreyCard = styled__default["default"](Card)(templateObject_3$t || (templateObject_3$t = __makeTemplateObject(["\n background-color: ", ";\n"], ["\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}); -var GreyCard = styled__default["default"](Card)(templateObject_4$i || (templateObject_4$i = __makeTemplateObject(["\n background-color: ", ";\n"], ["\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg3; -}); -styled__default["default"](Card)(templateObject_5$f || (templateObject_5$f = __makeTemplateObject(["\n background-color: ", ";\n"], ["\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}); -styled__default["default"](Card)(templateObject_6$b || (templateObject_6$b = __makeTemplateObject(["\n background-color: ", ";\n"], ["\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg0; -}); -var OutlineCard = styled__default["default"](Card)(templateObject_7$a || (templateObject_7$a = __makeTemplateObject(["\n border: 1px solid ", ";\n"], ["\n border: 1px solid ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg3; -}); -styled__default["default"](Card)(templateObject_8$7 || (templateObject_8$7 = __makeTemplateObject(["\n background-color: rgba(243, 132, 30, 0.05);\n color: ", ";\n font-weight: 500;\n"], ["\n background-color: rgba(243, 132, 30, 0.05);\n color: ", ";\n font-weight: 500;\n"])), function (_a) { - var theme = _a.theme; - return theme.yellow3; -}); -styled__default["default"](Card)(templateObject_9$7 || (templateObject_9$7 = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n border-radius: 12px;\n"], ["\n background-color: ", ";\n color: ", ";\n border-radius: 12px;\n"])), function (_a) { - var theme = _a.theme; - return theme.primary5; -}, function (_a) { - var theme = _a.theme; - return theme.blue2; -}); -var templateObject_1$T, templateObject_2$A, templateObject_3$t, templateObject_4$i, templateObject_5$f, templateObject_6$b, templateObject_7$a, templateObject_8$7, templateObject_9$7; - -var Column = styled__default["default"].div(templateObject_1$S || (templateObject_1$S = __makeTemplateObject(["\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n"], ["\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n"]))); -var ColumnCenter = styled__default["default"](Column)(templateObject_2$z || (templateObject_2$z = __makeTemplateObject(["\n width: 100%;\n align-items: center;\n"], ["\n width: 100%;\n align-items: center;\n"]))); -var AutoColumn = styled__default["default"].div(templateObject_3$s || (templateObject_3$s = __makeTemplateObject(["\n display: grid;\n grid-auto-rows: auto;\n grid-row-gap: ", ";\n justify-items: ", ";\n"], ["\n display: grid;\n grid-auto-rows: auto;\n grid-row-gap: ", ";\n justify-items: ", ";\n"])), function (_a) { - var gap = _a.gap; - return (gap === 'sm' && '8px') || (gap === 'md' && '12px') || (gap === 'lg' && '24px') || gap; -}, function (_a) { - var justify = _a.justify; - return justify && justify; -}); -var templateObject_1$S, templateObject_2$z, templateObject_3$s; - -var loadingAnimation = styled.keyframes(templateObject_1$R || (templateObject_1$R = __makeTemplateObject(["\n 0% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0% 50%;\n }\n"], ["\n 0% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0% 50%;\n }\n"]))); -var LoadingRows = styled__default["default"].div(templateObject_2$y || (templateObject_2$y = __makeTemplateObject(["\n display: grid;\n\n & > div {\n animation: ", " 1.5s infinite;\n animation-fill-mode: both;\n background: linear-gradient(\n to left,\n ", " 25%,\n ", " 50%,\n ", " 75%\n );\n background-size: 400%;\n border-radius: 12px;\n height: 2.4em;\n will-change: background-position;\n }\n"], ["\n display: grid;\n\n & > div {\n animation: ", " 1.5s infinite;\n animation-fill-mode: both;\n background: linear-gradient(\n to left,\n ", " 25%,\n ", " 50%,\n ", " 75%\n );\n background-size: 400%;\n border-radius: 12px;\n height: 2.4em;\n will-change: background-position;\n }\n"])), loadingAnimation, function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var theme = _a.theme; - return theme.bg2; -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}); -var loadingOpacityMixin = styled.css(templateObject_3$r || (templateObject_3$r = __makeTemplateObject(["\n filter: ", ";\n opacity: ", ";\n transition: opacity 0.2s ease-in-out;\n"], ["\n filter: ", ";\n opacity: ", ";\n transition: opacity 0.2s ease-in-out;\n"])), function (_a) { - var $loading = _a.$loading; - return ($loading ? 'grayscale(1)' : 'none'); -}, function (_a) { - var $loading = _a.$loading; - return ($loading ? '0.4' : '1'); -}); -var LoadingOpacityContainer = styled__default["default"].div(templateObject_4$h || (templateObject_4$h = __makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), loadingOpacityMixin); -var templateObject_1$R, templateObject_2$y, templateObject_3$r, templateObject_4$h; - -/** - * Invokes callback repeatedly over an interval defined by the delay - * @param callback - * @param delay if null, the callback will not be invoked - * @param leading if true, the callback will be invoked immediately (on the leading edge); otherwise, it will be invoked after delay - */ -function useInterval(callback, delay, leading) { - if (leading === void 0) { leading = true; } - var savedCallback = React.useRef(); - // Remember the latest callback. - React.useEffect(function () { - savedCallback.current = callback; - }, [callback]); - // Set up the interval. - React.useEffect(function () { - function tick() { - var current = savedCallback.current; - current && current(); - } - if (delay !== null) { - if (leading) - tick(); - var id_1 = setInterval(tick, delay); - return function () { return clearInterval(id_1); }; - } - return; - }, [delay, leading]); -} - -var PopoverContainer$1 = styled__default["default"].div(templateObject_1$Q || (templateObject_1$Q = __makeTemplateObject(["\n z-index: 9999;\n visibility: ", ";\n opacity: ", ";\n transition: visibility 150ms linear, opacity 150ms linear;\n color: ", ";\n"], ["\n z-index: 9999;\n visibility: ", ";\n opacity: ", ";\n transition: visibility 150ms linear, opacity 150ms linear;\n color: ", ";\n"])), function (props) { return (props.show ? 'visible' : 'hidden'); }, function (props) { return (props.show ? 1 : 0); }, function (_a) { - var theme = _a.theme; - return theme.text2; -}); -var ReferenceElement = styled__default["default"].div(templateObject_2$x || (templateObject_2$x = __makeTemplateObject(["\n display: inline-block;\n"], ["\n display: inline-block;\n"]))); -var Arrow = styled__default["default"].div(templateObject_3$q || (templateObject_3$q = __makeTemplateObject(["\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 ", ";\n transform: rotate(45deg);\n background: ", ";\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 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 ", ";\n transform: rotate(45deg);\n background: ", ";\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"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}, function (_a) { - var theme = _a.theme; - return theme.bg0; -}); -function Popover(_a) { - var _b, _c; - var content = _a.content, show = _a.show, children = _a.children, _d = _a.placement, placement = _d === void 0 ? 'auto' : _d; - var _e = __read(React.useState(null), 2), referenceElement = _e[0], setReferenceElement = _e[1]; - var _f = __read(React.useState(null), 2), popperElement = _f[0], setPopperElement = _f[1]; - var _g = __read(React.useState(null), 2), arrowElement = _g[0], setArrowElement = _g[1]; - var options = React.useMemo(function () { return ({ - placement: placement, - strategy: 'fixed', - modifiers: [ - { name: 'offset', options: { offset: [8, 8] } }, - { name: 'arrow', options: { element: arrowElement } }, - { name: 'preventOverflow', options: { padding: 8 } }, - ], - }); }, [arrowElement, placement]); - var _h = reactPopper.usePopper(referenceElement, popperElement, options), styles = _h.styles, update = _h.update, attributes = _h.attributes; - var updateCallback = React.useCallback(function () { - update && update(); - }, [update]); - useInterval(updateCallback, show ? 100 : null); - return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(ReferenceElement, __assign({ ref: setReferenceElement }, { children: children }), void 0), jsxRuntime.jsx(Portal__default["default"], { children: jsxRuntime.jsxs(PopoverContainer$1, __assign({ show: show, ref: setPopperElement, style: styles.popper }, attributes.popper, { children: [content, jsxRuntime.jsx(Arrow, __assign({ className: "arrow-" + ((_c = (_b = attributes.popper) === null || _b === void 0 ? void 0 : _b['data-popper-placement']) !== null && _c !== void 0 ? _c : ''), ref: setArrowElement, style: styles.arrow }, attributes.arrow), void 0)] }), void 0) }, void 0)] }, void 0)); -} -var templateObject_1$Q, templateObject_2$x, templateObject_3$q; - -var TooltipContainer = styled__default["default"].div(templateObject_1$P || (templateObject_1$P = __makeTemplateObject(["\n max-width: 256px;\n padding: 0.6rem 1rem;\n font-weight: 400;\n word-break: break-word;\n\n background: ", ";\n border-radius: 12px;\n border: 1px solid ", ";\n box-shadow: 0 4px 8px 0 ", ";\n"], ["\n max-width: 256px;\n padding: 0.6rem 1rem;\n font-weight: 400;\n word-break: break-word;\n\n background: ", ";\n border-radius: 12px;\n border: 1px solid ", ";\n box-shadow: 0 4px 8px 0 ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg0; -}, function (_a) { - var theme = _a.theme; - return theme.bg2; -}, function (_a) { - var theme = _a.theme; - return polished.transparentize(0.9, theme.shadow1); -}); -function Tooltip(_a) { - var text = _a.text, rest = __rest(_a, ["text"]); - return jsxRuntime.jsx(Popover, __assign({ content: jsxRuntime.jsx(TooltipContainer, { children: text }, void 0) }, rest), void 0); -} -function TooltipContent(_a) { - var content = _a.content, _b = _a.wrap, wrap = _b === void 0 ? false : _b, rest = __rest(_a, ["content", "wrap"]); - return jsxRuntime.jsx(Popover, __assign({ content: wrap ? jsxRuntime.jsx(TooltipContainer, { children: content }, void 0) : content }, rest), void 0); -} -function MouseoverTooltip(_a) { - var children = _a.children, rest = __rest(_a, ["children"]); - var _b = __read(React.useState(false), 2), show = _b[0], setShow = _b[1]; - var open = React.useCallback(function () { return setShow(true); }, [setShow]); - var close = React.useCallback(function () { return setShow(false); }, [setShow]); - return (jsxRuntime.jsx(Tooltip, __assign({}, rest, { show: show }, { children: jsxRuntime.jsx("div", __assign({ onMouseEnter: open, onMouseLeave: close }, { children: children }), void 0) }), void 0)); -} -function MouseoverTooltipContent(_a) { - var content = _a.content, children = _a.children, _b = _a.onOpen, openCallback = _b === void 0 ? undefined : _b, disableHover = _a.disableHover, rest = __rest(_a, ["content", "children", "onOpen", "disableHover"]); - var _c = __read(React.useState(false), 2), show = _c[0], setShow = _c[1]; - var open = React.useCallback(function () { - setShow(true); - openCallback === null || openCallback === void 0 ? void 0 : openCallback(); - }, [openCallback]); - var close = React.useCallback(function () { return setShow(false); }, [setShow]); - return (jsxRuntime.jsx(TooltipContent, __assign({}, rest, { show: show, content: disableHover ? null : content }, { children: jsxRuntime.jsx("div", __assign({ style: { display: 'inline-block', lineHeight: 0, padding: '0.25rem' }, onMouseEnter: open, onMouseLeave: close }, { children: children }), void 0) }), void 0)); -} -var templateObject_1$P; - -var THIRTY_BIPS_FEE = new sdkCore.Percent(JSBI__default["default"].BigInt(30), JSBI__default["default"].BigInt(10000)); -var INPUT_FRACTION_AFTER_FEE = ONE_HUNDRED_PERCENT.subtract(THIRTY_BIPS_FEE); -// computes realized lp fee as a percent -function computeRealizedLPFeePercent(trade) { - var e_1, _a; - var percent; - // Since routes are either all v2 or all v3 right now, calculate separately - if (trade.swaps[0].route.pools instanceof v2Sdk.Pair) { - // for each hop in our trade, take away the x*y=k price impact from 0.3% fees - // e.g. for 3 tokens/2 hops: 1 - ((1 - .03) * (1-.03)) - percent = ONE_HUNDRED_PERCENT.subtract(trade.swaps.reduce(function (currentFee) { return currentFee.multiply(INPUT_FRACTION_AFTER_FEE); }, ONE_HUNDRED_PERCENT)); - } - else { - percent = ZERO_PERCENT; - try { - for (var _b = __values(trade.swaps), _c = _b.next(); !_c.done; _c = _b.next()) { - var swap = _c.value; - var _d = swap.inputAmount.divide(trade.inputAmount), numerator = _d.numerator, denominator = _d.denominator; - var overallPercent = new sdkCore.Percent(numerator, denominator); - var routeRealizedLPFeePercent = overallPercent.multiply(ONE_HUNDRED_PERCENT.subtract(swap.route.pools.reduce(function (currentFee, pool) { - var fee = pool instanceof v2Sdk.Pair - ? // not currently possible given protocol check above, but not fatal - v3Sdk.FeeAmount.MEDIUM - : pool.fee; - return currentFee.multiply(ONE_HUNDRED_PERCENT.subtract(new sdkCore.Fraction(fee, 1000000))); - }, ONE_HUNDRED_PERCENT))); - percent = percent.add(routeRealizedLPFeePercent); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_1) throw e_1.error; } - } - } - return new sdkCore.Percent(percent.numerator, percent.denominator); -} -var IMPACT_TIERS = [ - BLOCKED_PRICE_IMPACT_NON_EXPERT, - ALLOWED_PRICE_IMPACT_HIGH, - ALLOWED_PRICE_IMPACT_MEDIUM, - ALLOWED_PRICE_IMPACT_LOW, -]; -function warningSeverity(priceImpact) { - var e_2, _a; - if (!priceImpact) - return 4; - var impact = IMPACT_TIERS.length; - try { - for (var IMPACT_TIERS_1 = __values(IMPACT_TIERS), IMPACT_TIERS_1_1 = IMPACT_TIERS_1.next(); !IMPACT_TIERS_1_1.done; IMPACT_TIERS_1_1 = IMPACT_TIERS_1.next()) { - var impactLevel = IMPACT_TIERS_1_1.value; - if (impactLevel.lessThan(priceImpact)) - return impact; - impact--; - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (IMPACT_TIERS_1_1 && !IMPACT_TIERS_1_1.done && (_a = IMPACT_TIERS_1.return)) _a.call(IMPACT_TIERS_1); - } - finally { if (e_2) throw e_2.error; } - } - return 0; -} - -/** - * Parses a CurrencyAmount from the passed string. - * Returns the CurrencyAmount, or undefined if parsing fails. - */ -function tryParseCurrencyAmount(value, currency) { - if (!value || !currency) { - return undefined; - } - try { - var typedValueParsed = units.parseUnits(value, currency.decimals).toString(); - if (typedValueParsed !== '0') { - return sdkCore.CurrencyAmount.fromRawAmount(currency, JSBI__default["default"].BigInt(typedValueParsed)); - } - } - catch (error) { - // fails if the user specifies too many decimal places of precision (or maybe exceed max uint?) - console.debug("Failed to parse input amount: \"" + value + "\"", error); - } - return undefined; -} - -// returns whether tradeB is better than tradeA by at least a threshold percentage amount -// only used by v2 hooks -function isTradeBetter(tradeA, tradeB, minimumDelta) { - if (minimumDelta === void 0) { minimumDelta = ZERO_PERCENT; } - if (tradeA && !tradeB) - return false; - if (tradeB && !tradeA) - return true; - if (!tradeA || !tradeB) - return undefined; - if (tradeA.tradeType !== tradeB.tradeType || - !tradeA.inputAmount.currency.equals(tradeB.inputAmount.currency) || - !tradeA.outputAmount.currency.equals(tradeB.outputAmount.currency)) { - throw new Error('Comparing incomparable trades'); - } - if (minimumDelta.equalTo(ZERO_PERCENT)) { - return tradeA.executionPrice.lessThan(tradeB.executionPrice); - } - else { - return tradeA.executionPrice.asFraction - .multiply(minimumDelta.add(ONE_HUNDRED_PERCENT)) - .lessThan(tradeB.executionPrice); - } -} - -function useAllCurrencyCombinations(currencyA, currencyB) { - var chainId = currencyA === null || currencyA === void 0 ? void 0 : currencyA.chainId; - var _a = __read(chainId ? [currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped, currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped] : [undefined, undefined], 2), tokenA = _a[0], tokenB = _a[1]; - var bases = React.useMemo(function () { - var _a, _b, _c, _d, _e; - if (!chainId || chainId !== (tokenB === null || tokenB === void 0 ? void 0 : tokenB.chainId)) - return []; - var common = (_a = BASES_TO_CHECK_TRADES_AGAINST[chainId]) !== null && _a !== void 0 ? _a : []; - var additionalA = tokenA ? (_c = (_b = ADDITIONAL_BASES[chainId]) === null || _b === void 0 ? void 0 : _b[tokenA.address]) !== null && _c !== void 0 ? _c : [] : []; - var additionalB = tokenB ? (_e = (_d = ADDITIONAL_BASES[chainId]) === null || _d === void 0 ? void 0 : _d[tokenB.address]) !== null && _e !== void 0 ? _e : [] : []; - return __spreadArray(__spreadArray(__spreadArray([], __read(common), false), __read(additionalA), false), __read(additionalB), false); - }, [chainId, tokenA, tokenB]); - var basePairs = React.useMemo(function () { - return bases - .flatMap(function (base) { return bases.map(function (otherBase) { return [base, otherBase]; }); }) - // though redundant with the first filter below, that expression runs more often, so this is probably worthwhile - .filter(function (_a) { - var _b = __read(_a, 2), t0 = _b[0], t1 = _b[1]; - return !t0.equals(t1); - }); - }, [bases]); - return React.useMemo(function () { - return tokenA && tokenB - ? __spreadArray(__spreadArray(__spreadArray([ - // the direct pair - [tokenA, tokenB] - ], __read(bases.map(function (base) { return [tokenA, base]; })), false), __read(bases.map(function (base) { return [tokenB, base]; })), false), __read(basePairs), false).filter(function (_a) { - var _b = __read(_a, 2), t0 = _b[0], t1 = _b[1]; - return !t0.equals(t1); - }) - // filter out duplicate pairs - .filter(function (_a, i, otherPairs) { - var _b = __read(_a, 2), t0 = _b[0], t1 = _b[1]; - // find the first index in the array at which there are the same 2 tokens as the current - var firstIndexInOtherPairs = otherPairs.findIndex(function (_a) { - var _b = __read(_a, 2), t0Other = _b[0], t1Other = _b[1]; - return (t0.equals(t0Other) && t1.equals(t1Other)) || (t0.equals(t1Other) && t1.equals(t0Other)); - }); - // only accept the first occurrence of the same 2 tokens - return firstIndexInOtherPairs === i; - }) - // optionally filter out some pairs for tokens with custom bases defined - .filter(function (_a) { - var _b = __read(_a, 2), tokenA = _b[0], tokenB = _b[1]; - if (!chainId) - return true; - var customBases = CUSTOM_BASES[chainId]; - var customBasesA = customBases === null || customBases === void 0 ? void 0 : customBases[tokenA.address]; - var customBasesB = customBases === null || customBases === void 0 ? void 0 : customBases[tokenB.address]; - if (!customBasesA && !customBasesB) - return true; - if (customBasesA && !customBasesA.find(function (base) { return tokenB.equals(base); })) - return false; - if (customBasesB && !customBasesB.find(function (base) { return tokenA.equals(base); })) - return false; - return true; - }) - : []; - }, [tokenA, tokenB, bases, basePairs, chainId]); -} - -var PAIR_INTERFACE = new abi$6.Interface(abi$4); -var PairState; -(function (PairState) { - PairState[PairState["LOADING"] = 0] = "LOADING"; - PairState[PairState["NOT_EXISTS"] = 1] = "NOT_EXISTS"; - PairState[PairState["EXISTS"] = 2] = "EXISTS"; - PairState[PairState["INVALID"] = 3] = "INVALID"; -})(PairState || (PairState = {})); -function useV2Pairs(currencies) { - var tokens = React.useMemo(function () { return currencies.map(function (_a) { - var _b = __read(_a, 2), currencyA = _b[0], currencyB = _b[1]; - return [currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped, currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped]; - }); }, [currencies]); - var pairAddresses = React.useMemo(function () { - return tokens.map(function (_a) { - var _b = __read(_a, 2), tokenA = _b[0], tokenB = _b[1]; - return tokenA && - tokenB && - tokenA.chainId === tokenB.chainId && - !tokenA.equals(tokenB) && - V2_FACTORY_ADDRESSES[tokenA.chainId] - ? v2Sdk.computePairAddress({ factoryAddress: V2_FACTORY_ADDRESSES[tokenA.chainId], tokenA: tokenA, tokenB: tokenB }) - : undefined; - }); - }, [tokens]); - var results = useMultipleContractSingleData(pairAddresses, PAIR_INTERFACE, 'getReserves'); - return React.useMemo(function () { - return results.map(function (result, i) { - var reserves = result.result, loading = result.loading; - var tokenA = tokens[i][0]; - var tokenB = tokens[i][1]; - if (loading) - return [PairState.LOADING, null]; - if (!tokenA || !tokenB || tokenA.equals(tokenB)) - return [PairState.INVALID, null]; - if (!reserves) - return [PairState.NOT_EXISTS, null]; - var reserve0 = reserves.reserve0, reserve1 = reserves.reserve1; - var _a = __read(tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA], 2), token0 = _a[0], token1 = _a[1]; - return [ - PairState.EXISTS, - new v2Sdk.Pair(sdkCore.CurrencyAmount.fromRawAmount(token0, reserve0.toString()), sdkCore.CurrencyAmount.fromRawAmount(token1, reserve1.toString())), - ]; - }); - }, [results, tokens]); -} - -function useAllCommonPairs(currencyA, currencyB) { - var allCurrencyCombinations = useAllCurrencyCombinations(currencyA, currencyB); - var allPairs = useV2Pairs(allCurrencyCombinations); - return React.useMemo(function () { - return Object.values(allPairs - // filter out invalid pairs - .filter(function (result) { return Boolean(result[0] === PairState.EXISTS && result[1]); }) - .map(function (_a) { - var _b = __read(_a, 2), pair = _b[1]; - return pair; - })); - }, [allPairs]); -} -var MAX_HOPS = 3; -/** - * Returns the best v2 trade for a desired swap - * @param tradeType whether the swap is an exact in/out - * @param amountSpecified the exact amount to swap in/out - * @param otherCurrency the desired output/payment currency - */ -function useBestV2Trade(tradeType, amountSpecified, otherCurrency, _a) { - var _b = _a === void 0 ? {} : _a, _c = _b.maxHops, maxHops = _c === void 0 ? MAX_HOPS : _c; - var _d = __read(React.useMemo(function () { - return tradeType === sdkCore.TradeType.EXACT_INPUT - ? [amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, otherCurrency] - : [otherCurrency, amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency]; - }, [tradeType, amountSpecified, otherCurrency]), 2), currencyIn = _d[0], currencyOut = _d[1]; - var allowedPairs = useAllCommonPairs(currencyIn, currencyOut); - return React.useMemo(function () { - var _a, _b, _c, _d; - if (amountSpecified && currencyIn && currencyOut && allowedPairs.length > 0) { - if (maxHops === 1) { - var options = { maxHops: 1, maxNumResults: 1 }; - if (tradeType === sdkCore.TradeType.EXACT_INPUT) { - var amountIn = amountSpecified; - return (_a = v2Sdk.Trade.bestTradeExactIn(allowedPairs, amountIn, currencyOut, options)[0]) !== null && _a !== void 0 ? _a : null; - } - else { - var amountOut = amountSpecified; - return (_b = v2Sdk.Trade.bestTradeExactOut(allowedPairs, currencyIn, amountOut, options)[0]) !== null && _b !== void 0 ? _b : null; - } - } - // search through trades with varying hops, find best trade out of them - var bestTradeSoFar = null; - for (var i = 1; i <= maxHops; i++) { - var options = { maxHops: i, maxNumResults: 1 }; - var currentTrade = void 0; - if (tradeType === sdkCore.TradeType.EXACT_INPUT) { - var amountIn = amountSpecified; - currentTrade = (_c = v2Sdk.Trade.bestTradeExactIn(allowedPairs, amountIn, currencyOut, options)[0]) !== null && _c !== void 0 ? _c : null; - } - else { - var amountOut = amountSpecified; - currentTrade = (_d = v2Sdk.Trade.bestTradeExactOut(allowedPairs, currencyIn, amountOut, options)[0]) !== null && _d !== void 0 ? _d : null; - } - // if current trade is best yet, save it - if (isTradeBetter(bestTradeSoFar, currentTrade, BETTER_TRADE_LESS_HOPS_THRESHOLD)) { - bestTradeSoFar = currentTrade; - } - } - return bestTradeSoFar; - } - return null; - }, [tradeType, amountSpecified, currencyIn, currencyOut, allowedPairs, maxHops]); -} - -var TradeState; -(function (TradeState) { - TradeState[TradeState["LOADING"] = 0] = "LOADING"; - TradeState[TradeState["INVALID"] = 1] = "INVALID"; - TradeState[TradeState["NO_ROUTE_FOUND"] = 2] = "NO_ROUTE_FOUND"; - TradeState[TradeState["VALID"] = 3] = "VALID"; - TradeState[TradeState["SYNCING"] = 4] = "SYNCING"; -})(TradeState || (TradeState = {})); -var InterfaceTrade = /** @class */ (function (_super) { - __extends(InterfaceTrade, _super); - function InterfaceTrade(_a) { - var gasUseEstimateUSD = _a.gasUseEstimateUSD, routes = __rest(_a, ["gasUseEstimateUSD"]); - var _this = _super.call(this, routes) || this; - _this.gasUseEstimateUSD = gasUseEstimateUSD; - return _this; - } - return InterfaceTrade; -}(routerSdk.Trade)); - -var abi = [ - { - inputs: [ - ], - name: "feeGrowthGlobal0X128", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - ], - name: "feeGrowthGlobal1X128", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - ], - name: "liquidity", - outputs: [ - { - internalType: "uint128", - name: "", - type: "uint128" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "index", - type: "uint256" - } - ], - name: "observations", - outputs: [ - { - internalType: "uint32", - name: "blockTimestamp", - type: "uint32" - }, - { - internalType: "int56", - name: "tickCumulative", - type: "int56" - }, - { - internalType: "uint160", - name: "secondsPerLiquidityCumulativeX128", - type: "uint160" - }, - { - internalType: "bool", - name: "initialized", - type: "bool" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "bytes32", - name: "key", - type: "bytes32" - } - ], - name: "positions", - outputs: [ - { - internalType: "uint128", - name: "_liquidity", - type: "uint128" - }, - { - internalType: "uint256", - name: "feeGrowthInside0LastX128", - type: "uint256" - }, - { - internalType: "uint256", - name: "feeGrowthInside1LastX128", - type: "uint256" - }, - { - internalType: "uint128", - name: "tokensOwed0", - type: "uint128" - }, - { - internalType: "uint128", - name: "tokensOwed1", - type: "uint128" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - ], - name: "protocolFees", - outputs: [ - { - internalType: "uint128", - name: "token0", - type: "uint128" - }, - { - internalType: "uint128", - name: "token1", - type: "uint128" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - ], - name: "slot0", - outputs: [ - { - internalType: "uint160", - name: "sqrtPriceX96", - type: "uint160" - }, - { - internalType: "int24", - name: "tick", - type: "int24" - }, - { - internalType: "uint16", - name: "observationIndex", - type: "uint16" - }, - { - internalType: "uint16", - name: "observationCardinality", - type: "uint16" - }, - { - internalType: "uint16", - name: "observationCardinalityNext", - type: "uint16" - }, - { - internalType: "uint8", - name: "feeProtocol", - type: "uint8" - }, - { - internalType: "bool", - name: "unlocked", - type: "bool" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "int16", - name: "wordPosition", - type: "int16" - } - ], - name: "tickBitmap", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "int24", - name: "tick", - type: "int24" - } - ], - name: "ticks", - outputs: [ - { - internalType: "uint128", - name: "liquidityGross", - type: "uint128" - }, - { - internalType: "int128", - name: "liquidityNet", - type: "int128" - }, - { - internalType: "uint256", - name: "feeGrowthOutside0X128", - type: "uint256" - }, - { - internalType: "uint256", - name: "feeGrowthOutside1X128", - type: "uint256" - }, - { - internalType: "int56", - name: "tickCumulativeOutside", - type: "int56" - }, - { - internalType: "uint160", - name: "secondsPerLiquidityOutsideX128", - type: "uint160" - }, - { - internalType: "uint32", - name: "secondsOutside", - type: "uint32" - }, - { - internalType: "bool", - name: "initialized", - type: "bool" - } - ], - stateMutability: "view", - type: "function" - } -]; - -var POOL_STATE_INTERFACE = new abi$6.Interface(abi); -var PoolState; -(function (PoolState) { - PoolState[PoolState["LOADING"] = 0] = "LOADING"; - PoolState[PoolState["NOT_EXISTS"] = 1] = "NOT_EXISTS"; - PoolState[PoolState["EXISTS"] = 2] = "EXISTS"; - PoolState[PoolState["INVALID"] = 3] = "INVALID"; -})(PoolState || (PoolState = {})); -function usePools(poolKeys) { - var chainId = useActiveWeb3React().chainId; - var transformed = React.useMemo(function () { - return poolKeys.map(function (_a) { - var _b = __read(_a, 3), currencyA = _b[0], currencyB = _b[1], feeAmount = _b[2]; - if (!chainId || !currencyA || !currencyB || !feeAmount) - return null; - var tokenA = currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped; - var tokenB = currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped; - if (!tokenA || !tokenB || tokenA.equals(tokenB)) - return null; - var _c = __read(tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA], 2), token0 = _c[0], token1 = _c[1]; - return [token0, token1, feeAmount]; - }); - }, [chainId, poolKeys]); - var poolAddresses = React.useMemo(function () { - var v3CoreFactoryAddress = chainId && V3_CORE_FACTORY_ADDRESSES[chainId]; - return transformed.map(function (value) { - if (!v3CoreFactoryAddress || !value) - return undefined; - return v3Sdk.computePoolAddress({ - factoryAddress: v3CoreFactoryAddress, - tokenA: value[0], - tokenB: value[1], - fee: value[2], - }); - }); - }, [chainId, transformed]); - var slot0s = useMultipleContractSingleData(poolAddresses, POOL_STATE_INTERFACE, 'slot0'); - var liquidities = useMultipleContractSingleData(poolAddresses, POOL_STATE_INTERFACE, 'liquidity'); - return React.useMemo(function () { - return poolKeys.map(function (_key, index) { - var _a; - var _b = __read((_a = transformed[index]) !== null && _a !== void 0 ? _a : [], 3), token0 = _b[0], token1 = _b[1], fee = _b[2]; - if (!token0 || !token1 || !fee) - return [PoolState.INVALID, null]; - var _c = slot0s[index], slot0 = _c.result, slot0Loading = _c.loading, slot0Valid = _c.valid; - var _d = liquidities[index], liquidity = _d.result, liquidityLoading = _d.loading, liquidityValid = _d.valid; - if (!slot0Valid || !liquidityValid) - return [PoolState.INVALID, null]; - if (slot0Loading || liquidityLoading) - return [PoolState.LOADING, null]; - if (!slot0 || !liquidity) - return [PoolState.NOT_EXISTS, null]; - if (!slot0.sqrtPriceX96 || slot0.sqrtPriceX96.eq(0)) - return [PoolState.NOT_EXISTS, null]; - try { - return [PoolState.EXISTS, new v3Sdk.Pool(token0, token1, fee, slot0.sqrtPriceX96, liquidity[0], slot0.tick)]; - } - catch (error) { - console.error('Error when constructing the pool', error); - return [PoolState.NOT_EXISTS, null]; - } - }); - }, [liquidities, poolKeys, slot0s, transformed]); -} - -/** - * Returns all the existing pools that should be considered for swapping between an input currency and an output currency - * @param currencyIn the input currency - * @param currencyOut the output currency - */ -function useV3SwapPools(currencyIn, currencyOut) { - var chainId = useActiveWeb3React().chainId; - var allCurrencyCombinations = useAllCurrencyCombinations(currencyIn, currencyOut); - var allCurrencyCombinationsWithAllFees = React.useMemo(function () { - return allCurrencyCombinations.reduce(function (list, _a) { - var _b = __read(_a, 2), tokenA = _b[0], tokenB = _b[1]; - return chainId === SupportedChainId.MAINNET - ? list.concat([ - [tokenA, tokenB, v3Sdk.FeeAmount.LOW], - [tokenA, tokenB, v3Sdk.FeeAmount.MEDIUM], - [tokenA, tokenB, v3Sdk.FeeAmount.HIGH], - ]) - : list.concat([ - [tokenA, tokenB, v3Sdk.FeeAmount.LOWEST], - [tokenA, tokenB, v3Sdk.FeeAmount.LOW], - [tokenA, tokenB, v3Sdk.FeeAmount.MEDIUM], - [tokenA, tokenB, v3Sdk.FeeAmount.HIGH], - ]); - }, []); - }, [allCurrencyCombinations, chainId]); - var pools = usePools(allCurrencyCombinationsWithAllFees); - return React.useMemo(function () { - return { - pools: pools - .filter(function (tuple) { - return tuple[0] === PoolState.EXISTS && tuple[1] !== null; - }) - .map(function (_a) { - var _b = __read(_a, 2), pool = _b[1]; - return pool; - }), - loading: pools.some(function (_a) { - var _b = __read(_a, 1), state = _b[0]; - return state === PoolState.LOADING; - }), - }; - }, [pools]); -} - -/** - * Returns true if poolA is equivalent to poolB - * @param poolA one of the two pools - * @param poolB the other pool - */ -function poolEquals(poolA, poolB) { - return (poolA === poolB || - (poolA.token0.equals(poolB.token0) && poolA.token1.equals(poolB.token1) && poolA.fee === poolB.fee)); -} -function computeAllRoutes(currencyIn, currencyOut, pools, chainId, currentPath, allPaths, startCurrencyIn, maxHops) { - var e_1, _a; - if (currentPath === void 0) { currentPath = []; } - if (allPaths === void 0) { allPaths = []; } - if (startCurrencyIn === void 0) { startCurrencyIn = currencyIn; } - if (maxHops === void 0) { maxHops = 2; } - var tokenIn = currencyIn === null || currencyIn === void 0 ? void 0 : currencyIn.wrapped; - var tokenOut = currencyOut === null || currencyOut === void 0 ? void 0 : currencyOut.wrapped; - if (!tokenIn || !tokenOut) - throw new Error('Missing tokenIn/tokenOut'); - var _loop_1 = function (pool) { - if (!pool.involvesToken(tokenIn) || currentPath.find(function (pathPool) { return poolEquals(pool, pathPool); })) - return "continue"; - var outputToken = pool.token0.equals(tokenIn) ? pool.token1 : pool.token0; - if (outputToken.equals(tokenOut)) { - allPaths.push(new v3Sdk.Route(__spreadArray(__spreadArray([], __read(currentPath), false), [pool], false), startCurrencyIn, currencyOut)); - } - else if (maxHops > 1) { - computeAllRoutes(outputToken, currencyOut, pools, chainId, __spreadArray(__spreadArray([], __read(currentPath), false), [pool], false), allPaths, startCurrencyIn, maxHops - 1); - } - }; - try { - for (var pools_1 = __values(pools), pools_1_1 = pools_1.next(); !pools_1_1.done; pools_1_1 = pools_1.next()) { - var pool = pools_1_1.value; - _loop_1(pool); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (pools_1_1 && !pools_1_1.done && (_a = pools_1.return)) _a.call(pools_1); - } - finally { if (e_1) throw e_1.error; } - } - return allPaths; -} -/** - * Returns all the routes from an input currency to an output currency - * @param currencyIn the input currency - * @param currencyOut the output currency - */ -function useAllV3Routes(currencyIn, currencyOut) { - var chainId = useActiveWeb3React().chainId; - var _a = useV3SwapPools(currencyIn, currencyOut), pools = _a.pools, poolsLoading = _a.loading; - return React.useMemo(function () { - if (poolsLoading || !chainId || !pools || !currencyIn || !currencyOut) - return { loading: true, routes: [] }; - var routes = computeAllRoutes(currencyIn, currencyOut, pools, chainId, [], [], currencyIn, 2); - return { loading: false, routes: routes }; - }, [chainId, currencyIn, currencyOut, pools, poolsLoading]); -} - -var _a$a; -var QUOTE_GAS_OVERRIDES = (_a$a = {}, - _a$a[SupportedChainId.ARBITRUM_ONE] = 25000000, - _a$a[SupportedChainId.ARBITRUM_RINKEBY] = 25000000, - _a$a); -var DEFAULT_GAS_QUOTE = 2000000; -/** - * Returns the best v3 trade for a desired swap - * @param tradeType whether the swap is an exact in/out - * @param amountSpecified the exact amount to swap in/out - * @param otherCurrency the desired output/payment currency - */ -function useClientSideV3Trade(tradeType, amountSpecified, otherCurrency) { - var _a; - var _b = __read(React.useMemo(function () { - return tradeType === sdkCore.TradeType.EXACT_INPUT - ? [amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, otherCurrency] - : [otherCurrency, amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency]; - }, [tradeType, amountSpecified, otherCurrency]), 2), currencyIn = _b[0], currencyOut = _b[1]; - var _c = useAllV3Routes(currencyIn, currencyOut), routes = _c.routes, routesLoading = _c.loading; - var quoter = useV3Quoter(); - var chainId = useActiveWeb3React().chainId; - var quotesResults = useSingleContractWithCallData(quoter, amountSpecified - ? routes.map(function (route) { return v3Sdk.SwapQuoter.quoteCallParameters(route, amountSpecified, tradeType).calldata; }) - : [], { - gasRequired: chainId ? (_a = QUOTE_GAS_OVERRIDES[chainId]) !== null && _a !== void 0 ? _a : DEFAULT_GAS_QUOTE : undefined, - }); - return React.useMemo(function () { - if (!amountSpecified || - !currencyIn || - !currencyOut || - quotesResults.some(function (_a) { - var valid = _a.valid; - return !valid; - }) || - // skip when tokens are the same - (tradeType === sdkCore.TradeType.EXACT_INPUT - ? amountSpecified.currency.equals(currencyOut) - : amountSpecified.currency.equals(currencyIn))) { - return { - state: TradeState.INVALID, - trade: undefined, - }; - } - if (routesLoading || quotesResults.some(function (_a) { - var loading = _a.loading; - return loading; - })) { - return { - state: TradeState.LOADING, - trade: undefined, - }; - } - var _a = quotesResults.reduce(function (currentBest, _a, i) { - var result = _a.result; - if (!result) - return currentBest; - // overwrite the current best if it's not defined or if this route is better - if (tradeType === sdkCore.TradeType.EXACT_INPUT) { - var amountOut_1 = sdkCore.CurrencyAmount.fromRawAmount(currencyOut, result.amountOut.toString()); - if (currentBest.amountOut === null || JSBI__default["default"].lessThan(currentBest.amountOut.quotient, amountOut_1.quotient)) { - return { - bestRoute: routes[i], - amountIn: amountSpecified, - amountOut: amountOut_1, - }; - } - } - else { - var amountIn_1 = sdkCore.CurrencyAmount.fromRawAmount(currencyIn, result.amountIn.toString()); - if (currentBest.amountIn === null || JSBI__default["default"].greaterThan(currentBest.amountIn.quotient, amountIn_1.quotient)) { - return { - bestRoute: routes[i], - amountIn: amountIn_1, - amountOut: amountSpecified, - }; - } - } - return currentBest; - }, { - bestRoute: null, - amountIn: null, - amountOut: null, - }), bestRoute = _a.bestRoute, amountIn = _a.amountIn, amountOut = _a.amountOut; - if (!bestRoute || !amountIn || !amountOut) { - return { - state: TradeState.NO_ROUTE_FOUND, - trade: undefined, - }; - } - return { - state: TradeState.VALID, - trade: new InterfaceTrade({ - v2Routes: [], - v3Routes: [ - { - routev3: bestRoute, - inputAmount: amountIn, - outputAmount: amountOut, - }, - ], - tradeType: tradeType, - }), - }; - }, [amountSpecified, currencyIn, currencyOut, quotesResults, routes, routesLoading, tradeType]); -} - -var _a$9; -// Stablecoin amounts used when calculating spot price for a given currency. -// The amount is large enough to filter low liquidity pairs. -var STABLECOIN_AMOUNT_OUT = (_a$9 = {}, - _a$9[SupportedChainId.MAINNET] = sdkCore.CurrencyAmount.fromRawAmount(USDC, 100000000000), - _a$9[SupportedChainId.ARBITRUM_ONE] = sdkCore.CurrencyAmount.fromRawAmount(USDC_ARBITRUM, 10000000000), - _a$9[SupportedChainId.OPTIMISM] = sdkCore.CurrencyAmount.fromRawAmount(DAI_OPTIMISM, 1e+22), - _a$9[SupportedChainId.POLYGON] = sdkCore.CurrencyAmount.fromRawAmount(USDC_POLYGON, 10000000000), - _a$9); -/** - * Returns the price in USDC of the input currency - * @param currency currency to compute the USDC price of - */ -function useUSDCPrice(currency) { - var chainId = currency === null || currency === void 0 ? void 0 : currency.chainId; - var amountOut = chainId ? STABLECOIN_AMOUNT_OUT[chainId] : undefined; - var stablecoin = amountOut === null || amountOut === void 0 ? void 0 : amountOut.currency; - // TODO(#2808): remove dependency on useBestV2Trade - var v2USDCTrade = useBestV2Trade(sdkCore.TradeType.EXACT_OUTPUT, amountOut, currency, { - maxHops: 2, - }); - var v3USDCTrade = useClientSideV3Trade(sdkCore.TradeType.EXACT_OUTPUT, amountOut, currency); - return React.useMemo(function () { - if (!currency || !stablecoin) { - return undefined; - } - // handle usdc - if (currency === null || currency === void 0 ? void 0 : currency.wrapped.equals(stablecoin)) { - return new sdkCore.Price(stablecoin, stablecoin, '1', '1'); - } - // use v2 price if available, v3 as fallback - if (v2USDCTrade) { - var _a = v2USDCTrade.route.midPrice, numerator = _a.numerator, denominator = _a.denominator; - return new sdkCore.Price(currency, stablecoin, denominator, numerator); - } - else if (v3USDCTrade.trade) { - var _b = v3USDCTrade.trade.routes[0].midPrice, numerator = _b.numerator, denominator = _b.denominator; - return new sdkCore.Price(currency, stablecoin, denominator, numerator); - } - return undefined; - }, [currency, stablecoin, v2USDCTrade, v3USDCTrade.trade]); -} -function useUSDCValue(currencyAmount) { - var price = useUSDCPrice(currencyAmount === null || currencyAmount === void 0 ? void 0 : currencyAmount.currency); - return React.useMemo(function () { - if (!price || !currencyAmount) - return null; - try { - return price.quote(currencyAmount); - } - catch (error) { - return null; - } - }, [currencyAmount, price]); -} -/** - * - * @param fiatValue string representation of a USD amount - * @returns CurrencyAmount where currency is stablecoin on active chain - */ -function useStablecoinAmountFromFiatValue(fiatValue) { - var _a; - var chainId = useActiveWeb3React().chainId; - var stablecoin = chainId ? (_a = STABLECOIN_AMOUNT_OUT[chainId]) === null || _a === void 0 ? void 0 : _a.currency : undefined; - if (fiatValue === null || fiatValue === undefined || !chainId || !stablecoin) { - return undefined; - } - // trim for decimal precision when parsing - var parsedForDecimals = parseFloat(fiatValue).toFixed(stablecoin.decimals).toString(); - try { - // parse USD string into CurrencyAmount based on stablecoin decimals - return tryParseCurrencyAmount(parsedForDecimals, stablecoin); - } - catch (error) { - return undefined; - } -} - -var StyledPriceContainer = styled__default["default"].button(templateObject_1$O || (templateObject_1$O = __makeTemplateObject(["\n background-color: transparent;\n border: none;\n cursor: pointer;\n align-items: center;\n justify-content: flex-start;\n padding: 0;\n grid-template-columns: 1fr auto;\n grid-gap: 0.25rem;\n display: flex;\n flex-direction: row;\n text-align: left;\n flex-wrap: wrap;\n padding: 8px 0;\n user-select: text;\n"], ["\n background-color: transparent;\n border: none;\n cursor: pointer;\n align-items: center;\n justify-content: flex-start;\n padding: 0;\n grid-template-columns: 1fr auto;\n grid-gap: 0.25rem;\n display: flex;\n flex-direction: row;\n text-align: left;\n flex-wrap: wrap;\n padding: 8px 0;\n user-select: text;\n"]))); -function TradePrice(_a) { - var _b, _c, _d, _e, _f, _g; - var price = _a.price, showInverted = _a.showInverted, setShowInverted = _a.setShowInverted; - var theme = React.useContext(styled.ThemeContext); - var usdcPrice = useUSDCPrice(showInverted ? price.baseCurrency : price.quoteCurrency); - var formattedPrice; - try { - formattedPrice = showInverted ? price.toSignificant(4) : (_b = price.invert()) === null || _b === void 0 ? void 0 : _b.toSignificant(4); - } - catch (error) { - formattedPrice = '0'; - } - var label = showInverted ? "" + ((_c = price.quoteCurrency) === null || _c === void 0 ? void 0 : _c.symbol) : ((_d = price.baseCurrency) === null || _d === void 0 ? void 0 : _d.symbol) + " "; - var labelInverted = showInverted ? ((_e = price.baseCurrency) === null || _e === void 0 ? void 0 : _e.symbol) + " " : "" + ((_f = price.quoteCurrency) === null || _f === void 0 ? void 0 : _f.symbol); - var flipPrice = React.useCallback(function () { return setShowInverted(!showInverted); }, [setShowInverted, showInverted]); - var text = ((_g = '1 ' + labelInverted + ' = ' + formattedPrice) !== null && _g !== void 0 ? _g : '-') + " " + label; - return (jsxRuntime.jsxs(StyledPriceContainer, __assign({ onClick: function (e) { - e.stopPropagation(); // dont want this click to affect dropdowns / hovers - flipPrice(); - }, title: text }, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, color: theme.text1 }, { children: text }), void 0), ' ', usdcPrice && (jsxRuntime.jsx(ThemedText.DarkGray, { children: jsxRuntime.jsxs(macro.Trans, { children: ["($", usdcPrice.toSignificant(6, { groupSeparator: ',' }), ")"] }, void 0) }, void 0))] }), void 0)); -} -var templateObject_1$O; - -var Wrapper$d = styled__default["default"].div(templateObject_1$N || (templateObject_1$N = __makeTemplateObject(["\n position: relative;\n padding: 8px;\n"], ["\n position: relative;\n padding: 8px;\n"]))); -var ArrowWrapper$1 = styled__default["default"].div(templateObject_3$p || (templateObject_3$p = __makeTemplateObject(["\n padding: 4px;\n border-radius: 12px;\n height: 32px;\n width: 32px;\n position: relative;\n margin-top: -14px;\n margin-bottom: -14px;\n left: calc(50% - 16px);\n /* transform: rotate(90deg); */\n background-color: ", ";\n border: 4px solid ", ";\n z-index: 2;\n ", "\n"], ["\n padding: 4px;\n border-radius: 12px;\n height: 32px;\n width: 32px;\n position: relative;\n margin-top: -14px;\n margin-bottom: -14px;\n left: calc(50% - 16px);\n /* transform: rotate(90deg); */\n background-color: ", ";\n border: 4px solid ", ";\n z-index: 2;\n ", "\n"])), function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var theme = _a.theme; - return theme.bg0; -}, function (_a) { - var clickable = _a.clickable; - return clickable - ? styled.css(templateObject_2$w || (templateObject_2$w = __makeTemplateObject(["\n :hover {\n cursor: pointer;\n opacity: 0.8;\n }\n "], ["\n :hover {\n cursor: pointer;\n opacity: 0.8;\n }\n "]))) : null; -}); -var SectionBreak = styled__default["default"].div(templateObject_4$g || (templateObject_4$g = __makeTemplateObject(["\n height: 1px;\n width: 100%;\n background-color: ", ";\n"], ["\n height: 1px;\n width: 100%;\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg3; -}); -var ErrorText = styled__default["default"](rebass.Text)(templateObject_5$e || (templateObject_5$e = __makeTemplateObject(["\n color: ", ";\n"], ["\n color: ", ";\n"])), function (_a) { - var theme = _a.theme, severity = _a.severity; - return severity === 3 || severity === 4 - ? theme.red1 - : severity === 2 - ? theme.yellow2 - : severity === 1 - ? theme.text1 - : theme.text2; -}); -var TruncatedText = styled__default["default"](rebass.Text)(templateObject_6$a || (templateObject_6$a = __makeTemplateObject(["\n text-overflow: ellipsis;\n max-width: 220px;\n overflow: hidden;\n text-align: right;\n"], ["\n text-overflow: ellipsis;\n max-width: 220px;\n overflow: hidden;\n text-align: right;\n" - // styles -]))); -// styles -styled__default["default"].span(templateObject_7$9 || (templateObject_7$9 = __makeTemplateObject(["\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 &::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"]))); -var SwapCallbackErrorInner = styled__default["default"].div(templateObject_8$6 || (templateObject_8$6 = __makeTemplateObject(["\n background-color: ", ";\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: ", ";\n z-index: -1;\n p {\n padding: 0;\n margin: 0;\n font-weight: 500;\n }\n"], ["\n background-color: ", ";\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: ", ";\n z-index: -1;\n p {\n padding: 0;\n margin: 0;\n font-weight: 500;\n }\n"])), function (_a) { - var theme = _a.theme; - return polished.transparentize(0.9, theme.red1); -}, function (_a) { - var theme = _a.theme; - return theme.red1; -}); -var SwapCallbackErrorInnerAlertTriangle = styled__default["default"].div(templateObject_9$6 || (templateObject_9$6 = __makeTemplateObject(["\n background-color: ", ";\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 background-color: ", ";\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"])), function (_a) { - var theme = _a.theme; - return polished.transparentize(0.9, theme.red1); -}); -function SwapCallbackError(_a) { - var error = _a.error; - return (jsxRuntime.jsxs(SwapCallbackErrorInner, { children: [jsxRuntime.jsx(SwapCallbackErrorInnerAlertTriangle, { children: jsxRuntime.jsx(reactFeather.AlertTriangle, { size: 24 }, void 0) }, void 0), jsxRuntime.jsx("p", __assign({ style: { wordBreak: 'break-word' } }, { children: error }), void 0)] }, void 0)); -} -var SwapShowAcceptChanges = styled__default["default"](AutoColumn)(templateObject_10$5 || (templateObject_10$5 = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n padding: 0.5rem;\n border-radius: 12px;\n margin-top: 8px;\n"], ["\n background-color: ", ";\n color: ", ";\n padding: 0.5rem;\n border-radius: 12px;\n margin-top: 8px;\n"])), function (_a) { - var theme = _a.theme; - return polished.transparentize(0.95, theme.primary3); -}, function (_a) { - var theme = _a.theme; - return theme.primaryText1; -}); -styled__default["default"](ThemedText.Black)(templateObject_11$4 || (templateObject_11$4 = __makeTemplateObject(["\n border-bottom: 1px solid ", ";\n padding-bottom: 0.5rem;\n"], ["\n border-bottom: 1px solid ", ";\n padding-bottom: 0.5rem;\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}); -var ResponsiveTooltipContainer = styled__default["default"](TooltipContainer)(templateObject_13$1 || (templateObject_13$1 = __makeTemplateObject(["\n background-color: ", ";\n border: 1px solid ", ";\n padding: 1rem;\n width: ", ";\n\n ", "\n"], ["\n background-color: ", ";\n border: 1px solid ", ";\n padding: 1rem;\n width: ", ";\n\n ", "\n"])), function (_a) { - var theme = _a.theme; - return theme.bg0; -}, function (_a) { - var theme = _a.theme; - return theme.bg2; -}, function (_a) { - var width = _a.width; - return width !== null && width !== void 0 ? width : 'auto'; -}, function (_a) { - var theme = _a.theme, origin = _a.origin; - return theme.mediaWidth.upToExtraSmall(templateObject_12$4 || (templateObject_12$4 = __makeTemplateObject(["\n transform: scale(0.8);\n transform-origin: ", ";\n "], ["\n transform: scale(0.8);\n transform-origin: ", ";\n "])), origin !== null && origin !== void 0 ? origin : 'top left'); -}); -styled__default["default"](TradePrice)(templateObject_14$1 || (templateObject_14$1 = __makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), loadingOpacityMixin); -var templateObject_1$N, templateObject_2$w, templateObject_3$p, templateObject_4$g, templateObject_5$e, templateObject_6$a, templateObject_7$9, templateObject_8$6, templateObject_9$6, templateObject_10$5, templateObject_11$4, templateObject_12$4, templateObject_13$1, templateObject_14$1; - -/** - * Formatted version of price impact text with warning colors - */ -function FormattedPriceImpact(_a) { - var priceImpact = _a.priceImpact; - return (jsxRuntime.jsx(ErrorText, __assign({ fontWeight: 500, fontSize: 14, severity: warningSeverity(priceImpact) }, { children: priceImpact ? priceImpact.multiply(-1).toFixed(2) + "%" : '-' }), void 0)); -} - -var StyledCard$1 = styled__default["default"](Card)(templateObject_1$M || (templateObject_1$M = __makeTemplateObject(["\n padding: 0;\n"], ["\n padding: 0;\n"]))); -function TextWithLoadingPlaceholder(_a) { - var syncing = _a.syncing, width = _a.width, children = _a.children; - return syncing ? (jsxRuntime.jsx(LoadingRows, { children: jsxRuntime.jsx("div", { style: { height: '15px', width: width + "px" } }, void 0) }, void 0)) : (children); -} -function AdvancedSwapDetails(_a) { - var trade = _a.trade, allowedSlippage = _a.allowedSlippage, _b = _a.syncing, syncing = _b === void 0 ? false : _b; - var theme = React.useContext(styled.ThemeContext); - var chainId = useActiveWeb3React().chainId; - var _c = React.useMemo(function () { - if (!trade) - return { expectedOutputAmount: undefined, priceImpact: undefined }; - var expectedOutputAmount = trade.outputAmount; - var realizedLpFeePercent = computeRealizedLPFeePercent(trade); - var priceImpact = trade.priceImpact.subtract(realizedLpFeePercent); - return { expectedOutputAmount: expectedOutputAmount, priceImpact: priceImpact }; - }, [trade]), expectedOutputAmount = _c.expectedOutputAmount, priceImpact = _c.priceImpact; - return !trade ? null : (jsxRuntime.jsx(StyledCard$1, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "8px" }, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(RowFixed, { children: jsxRuntime.jsx(ThemedText.SubHeader, __assign({ color: theme.text1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Expected Output" }, void 0) }), void 0) }, void 0), jsxRuntime.jsx(TextWithLoadingPlaceholder, __assign({ syncing: syncing, width: 65 }, { children: jsxRuntime.jsx(ThemedText.Black, __assign({ textAlign: "right", fontSize: 14 }, { children: expectedOutputAmount - ? expectedOutputAmount.toSignificant(6) + " " + expectedOutputAmount.currency.symbol - : '-' }), void 0) }), void 0)] }, void 0), jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(RowFixed, { children: jsxRuntime.jsx(ThemedText.SubHeader, __assign({ color: theme.text1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Price Impact" }, void 0) }), void 0) }, void 0), jsxRuntime.jsx(TextWithLoadingPlaceholder, __assign({ syncing: syncing, width: 50 }, { children: jsxRuntime.jsx(ThemedText.Black, __assign({ textAlign: "right", fontSize: 14 }, { children: jsxRuntime.jsx(FormattedPriceImpact, { priceImpact: priceImpact }, void 0) }), void 0) }), void 0)] }, void 0), jsxRuntime.jsx(Separator$1, {}, void 0), jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(RowFixed, __assign({ style: { marginRight: '20px' } }, { children: jsxRuntime.jsxs(ThemedText.SubHeader, __assign({ color: theme.text3 }, { children: [trade.tradeType === sdkCore.TradeType.EXACT_INPUT ? (jsxRuntime.jsx(macro.Trans, { children: "Minimum received" }, void 0)) : (jsxRuntime.jsx(macro.Trans, { children: "Maximum sent" }, void 0)), ' ', jsxRuntime.jsx(macro.Trans, { children: "after slippage" }, void 0), " (", allowedSlippage.toFixed(2), "%)"] }), void 0) }), void 0), jsxRuntime.jsx(TextWithLoadingPlaceholder, __assign({ syncing: syncing, width: 70 }, { children: jsxRuntime.jsx(ThemedText.Black, __assign({ textAlign: "right", fontSize: 14, color: theme.text3 }, { children: trade.tradeType === sdkCore.TradeType.EXACT_INPUT - ? trade.minimumAmountOut(allowedSlippage).toSignificant(6) + " " + trade.outputAmount.currency.symbol - : trade.maximumAmountIn(allowedSlippage).toSignificant(6) + " " + trade.inputAmount.currency.symbol }), void 0) }), void 0)] }, void 0), !(trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) || !chainId || !SUPPORTED_GAS_ESTIMATE_CHAIN_IDS.includes(chainId) ? null : (jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(ThemedText.SubHeader, __assign({ color: theme.text3 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Network Fee" }, void 0) }), void 0), jsxRuntime.jsx(TextWithLoadingPlaceholder, __assign({ syncing: syncing, width: 50 }, { children: jsxRuntime.jsxs(ThemedText.Black, __assign({ textAlign: "right", fontSize: 14, color: theme.text3 }, { children: ["~$", trade.gasUseEstimateUSD.toFixed(2)] }), void 0) }), void 0)] }, void 0))] }), void 0) }, void 0)); -} -var templateObject_1$M; - -var _path$3, _line$1, _line2, _path2; - -function _extends$4() { _extends$4 = 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$4.apply(this, arguments); } - -var SvgGasIcon = function SvgGasIcon(props) { - return /*#__PURE__*/React__namespace.createElement("svg", _extends$4({ - width: 16, - height: 16, - viewBox: "0 0 16 16", - fill: "none", - xmlns: "http://www.w3.org/2000/svg" - }, props), _path$3 || (_path$3 = /*#__PURE__*/React__namespace.createElement("path", { - d: "M10.0047 9.26921H10.2714C11.0078 9.26921 11.6047 9.86617 11.6047 10.6025V12.1359C11.6047 12.7987 12.142 13.3359 12.8047 13.3359C13.4675 13.3359 14.0047 12.7995 14.0047 12.1367V5.22059C14.0047 4.86697 13.7758 4.56227 13.5258 4.31223L10.6714 1.33594M4.00472 2.00254H8.00472C8.7411 2.00254 9.33805 2.59949 9.33805 3.33587V14.0015H2.67139V3.33587C2.67139 2.59949 3.26834 2.00254 4.00472 2.00254ZM14.0047 5.33587C14.0047 6.07225 13.4078 6.66921 12.6714 6.66921C11.935 6.66921 11.3381 6.07225 11.3381 5.33587C11.3381 4.59949 11.935 4.00254 12.6714 4.00254C13.4078 4.00254 14.0047 4.59949 14.0047 5.33587Z", - stroke: "white" - })), _line$1 || (_line$1 = /*#__PURE__*/React__namespace.createElement("line", { - x1: 4, - y1: 9.99414, - x2: 8, - y2: 9.99414, - stroke: "white" - })), _line2 || (_line2 = /*#__PURE__*/React__namespace.createElement("line", { - x1: 4, - y1: 11.9941, - x2: 8, - y2: 11.9941, - stroke: "white" - })), _path2 || (_path2 = /*#__PURE__*/React__namespace.createElement("path", { - d: "M4 8.16113H8", - stroke: "white" - }))); -}; - -var BadgeVariant; -(function (BadgeVariant) { - BadgeVariant["DEFAULT"] = "DEFAULT"; - BadgeVariant["NEGATIVE"] = "NEGATIVE"; - BadgeVariant["POSITIVE"] = "POSITIVE"; - BadgeVariant["PRIMARY"] = "PRIMARY"; - BadgeVariant["WARNING"] = "WARNING"; - BadgeVariant["WARNING_OUTLINE"] = "WARNING_OUTLINE"; -})(BadgeVariant || (BadgeVariant = {})); -function pickBackgroundColor(variant, theme) { - switch (variant) { - case BadgeVariant.NEGATIVE: - return theme.error; - case BadgeVariant.POSITIVE: - return theme.success; - case BadgeVariant.PRIMARY: - return theme.primary1; - case BadgeVariant.WARNING: - return theme.warning; - case BadgeVariant.WARNING_OUTLINE: - return 'transparent'; - default: - return theme.bg2; - } -} -function pickBorder(variant, theme) { - switch (variant) { - case BadgeVariant.WARNING_OUTLINE: - return "1px solid " + theme.warning; - default: - return 'unset'; - } -} -function pickFontColor(variant, theme) { - switch (variant) { - case BadgeVariant.NEGATIVE: - return polished.readableColor(theme.error); - case BadgeVariant.POSITIVE: - return polished.readableColor(theme.success); - case BadgeVariant.WARNING: - return polished.readableColor(theme.warning); - case BadgeVariant.WARNING_OUTLINE: - return theme.warning; - default: - return polished.readableColor(theme.bg2); - } -} -var Badge = styled__default["default"].div(templateObject_1$L || (templateObject_1$L = __makeTemplateObject(["\n align-items: center;\n background-color: ", ";\n border: ", ";\n border-radius: 0.5rem;\n color: ", ";\n display: inline-flex;\n padding: 4px 6px;\n justify-content: center;\n font-weight: 500;\n"], ["\n align-items: center;\n background-color: ", ";\n border: ", ";\n border-radius: 0.5rem;\n color: ", ";\n display: inline-flex;\n padding: 4px 6px;\n justify-content: center;\n font-weight: 500;\n"])), function (_a) { - var theme = _a.theme, variant = _a.variant; - return pickBackgroundColor(variant, theme); -}, function (_a) { - var theme = _a.theme, variant = _a.variant; - return pickBorder(variant, theme); -}, function (_a) { - var theme = _a.theme, variant = _a.variant; - return pickFontColor(variant, theme); -}); -var templateObject_1$L; - -function safeNamehash(name) { - if (name === undefined) - return undefined; - try { - return hash.namehash(name); - } - catch (error) { - console.debug(error); - return undefined; - } -} - -/** - * Returns true if the string value is zero in hex - * @param hexNumberString - */ -function isZero(hexNumberString) { - return /^0x0*$/.test(hexNumberString); -} - -/** - * Does a lookup for an ENS name to find its contenthash. - */ -function useENSContentHash(ensName) { - var _a; - var ensNodeArgument = React.useMemo(function () { return [ensName === null ? undefined : safeNamehash(ensName)]; }, [ensName]); - var registrarContract = useENSRegistrarContract(false); - var resolverAddressResult = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument); - var resolverAddress = (_a = resolverAddressResult.result) === null || _a === void 0 ? void 0 : _a[0]; - var resolverContract = useENSResolverContract(resolverAddress && isZero(resolverAddress) ? undefined : resolverAddress, false); - var contenthash = useSingleCallResult(resolverContract, 'contenthash', ensNodeArgument); - return React.useMemo(function () { - var _a, _b; - return ({ - contenthash: (_b = (_a = contenthash.result) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : null, - loading: resolverAddressResult.loading || contenthash.loading, - }); - }, [contenthash.loading, contenthash.result, resolverAddressResult.loading]); -} - -function useHttpLocations(uri) { - var ens = React.useMemo(function () { return (uri ? parseENSAddress(uri) : undefined); }, [uri]); - var resolvedContentHash = useENSContentHash(ens === null || ens === void 0 ? void 0 : ens.ensName); - return React.useMemo(function () { - if (ens) { - return resolvedContentHash.contenthash ? uriToHttp(contenthashToUri(resolvedContentHash.contenthash)) : []; - } - else { - return uri ? uriToHttp(uri) : []; - } - }, [ens, resolvedContentHash.contenthash, uri]); -} - -var MaticLogo = "data:image/svg+xml,%3Csvg%20width%3D%221024%22%20height%3D%221024%22%20viewBox%3D%220%200%201024%201024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Ccircle%20cx%3D%22512%22%20cy%3D%22512%22%20r%3D%22512%22%20fill%3D%22%238247E5%22%2F%3E%3Cpath%20d%3D%22M681.469%20402.456C669.189%20395.312%20653.224%20395.312%20639.716%20402.456L543.928%20457.228L478.842%20492.949L383.055%20547.721C370.774%20554.865%20354.81%20554.865%20341.301%20547.721L265.162%20504.856C252.882%20497.712%20244.286%20484.614%20244.286%20470.325V385.786C244.286%20371.498%20251.654%20358.4%20265.162%20351.256L340.073%20309.581C352.353%20302.437%20368.318%20302.437%20381.827%20309.581L456.737%20351.256C469.018%20358.4%20477.614%20371.498%20477.614%20385.786V440.558L542.7%20403.646V348.874C542.7%20334.586%20535.332%20321.488%20521.824%20314.344L383.055%20235.758C370.774%20228.614%20354.81%20228.614%20341.301%20235.758L200.076%20314.344C186.567%20321.488%20179.199%20334.586%20179.199%20348.874V507.237C179.199%20521.525%20186.567%20534.623%20200.076%20541.767L341.301%20620.353C353.582%20627.498%20369.546%20627.498%20383.055%20620.353L478.842%20566.772L543.928%20529.86L639.716%20476.279C651.996%20469.135%20667.961%20469.135%20681.469%20476.279L756.38%20517.953C768.66%20525.098%20777.257%20538.195%20777.257%20552.484V637.023C777.257%20651.312%20769.888%20664.409%20756.38%20671.553L681.469%20714.419C669.189%20721.563%20653.224%20721.563%20639.716%20714.419L564.805%20672.744C552.525%20665.6%20543.928%20652.502%20543.928%20638.214V583.442L478.842%20620.353V675.125C478.842%20689.414%20486.21%20702.512%20499.719%20709.656L640.944%20788.242C653.224%20795.386%20669.189%20795.386%20682.697%20788.242L823.922%20709.656C836.203%20702.512%20844.799%20689.414%20844.799%20675.125V516.763C844.799%20502.474%20837.431%20489.377%20823.922%20482.232L681.469%20402.456Z%22%20fill%3D%22white%22%2F%3E%3C%2Fsvg%3E"; - -function chainIdToNetworkName(networkId) { - switch (networkId) { - case SupportedChainId.MAINNET: - return 'ethereum'; - case SupportedChainId.ARBITRUM_ONE: - return 'arbitrum'; - case SupportedChainId.OPTIMISM: - return 'optimism'; - default: - return 'ethereum'; - } -} -function getNativeLogoURI(chainId) { - if (chainId === void 0) { chainId = SupportedChainId.MAINNET; } - switch (chainId) { - case SupportedChainId.POLYGON_MUMBAI: - case SupportedChainId.POLYGON: - return MaticLogo; - default: - return EthereumLogo; - } -} -function getTokenLogoURI(address, chainId) { - if (chainId === void 0) { chainId = SupportedChainId.MAINNET; } - var networkName = chainIdToNetworkName(chainId); - var networksWithUrls = [SupportedChainId.ARBITRUM_ONE, SupportedChainId.MAINNET, SupportedChainId.OPTIMISM]; - if (networksWithUrls.includes(chainId)) { - return "https://raw.githubusercontent.com/Uniswap/assets/master/blockchains/" + networkName + "/assets/" + address + "/logo.png"; - } -} -function useCurrencyLogoURIs(currency) { - var locations = useHttpLocations(currency instanceof WrappedTokenInfo ? currency.logoURI : undefined); - return React.useMemo(function () { - var logoURIs = __spreadArray([], __read(locations), false); - if (currency) { - if (currency.isNative) { - logoURIs.push(getNativeLogoURI(currency.chainId)); - } - else if (currency.isToken) { - var logoURI = getTokenLogoURI(currency.address, currency.chainId); - if (logoURI) { - logoURIs.push(logoURI); - } - } - } - return logoURIs; - }, [currency, locations]); -} - -function useTheme() { - return React.useContext(styled.ThemeContext); -} - -var BAD_SRCS = {}; -/** - * Renders an image by sequentially trying a list of URIs, and then eventually a fallback triangle alert - */ -function Logo(_a) { - var srcs = _a.srcs, alt = _a.alt, style = _a.style, rest = __rest(_a, ["srcs", "alt", "style"]); - var _b = __read(React.useState(0), 2), refresh = _b[1]; - var theme = useTheme(); - var src = srcs.find(function (src) { return !BAD_SRCS[src]; }); - if (src) { - return (jsxRuntime.jsx("img", __assign({}, rest, { alt: alt, src: src, style: style, onError: function () { - if (src) - BAD_SRCS[src] = true; - refresh(function (i) { return i + 1; }); - } }), void 0)); - } - return jsxRuntime.jsx(reactFeather.Slash, __assign({}, rest, { style: __assign(__assign({}, style), { color: theme.bg4 }) }), void 0); -} - -var StyledLogo$1 = styled__default["default"](Logo)(templateObject_1$K || (templateObject_1$K = __makeTemplateObject(["\n width: ", ";\n height: ", ";\n background: radial-gradient(white 50%, #ffffff00 calc(75% + 1px), #ffffff00 100%);\n border-radius: 50%;\n -mox-box-shadow: 0 0 1px ", ";\n -webkit-box-shadow: 0 0 1px ", ";\n box-shadow: 0 0 1px ", ";\n border: 0px solid rgba(255, 255, 255, 0);\n"], ["\n width: ", ";\n height: ", ";\n background: radial-gradient(white 50%, #ffffff00 calc(75% + 1px), #ffffff00 100%);\n border-radius: 50%;\n -mox-box-shadow: 0 0 1px ", ";\n -webkit-box-shadow: 0 0 1px ", ";\n box-shadow: 0 0 1px ", ";\n border: 0px solid rgba(255, 255, 255, 0);\n"])), function (_a) { - var size = _a.size; - return size; -}, function (_a) { - var size = _a.size; - return size; -}, function (_a) { - var native = _a.native; - return (native ? 'white' : 'black'); -}, function (_a) { - var native = _a.native; - return (native ? 'white' : 'black'); -}, function (_a) { - var native = _a.native; - return (native ? 'white' : 'black'); -}); -function CurrencyLogo(_a) { - var _b, _c; - var currency = _a.currency, _d = _a.size, size = _d === void 0 ? '24px' : _d, style = _a.style, rest = __rest(_a, ["currency", "size", "style"]); - var logoURIs = useCurrencyLogoURIs(currency); - return (jsxRuntime.jsx(StyledLogo$1, __assign({ size: size, native: (_b = currency === null || currency === void 0 ? void 0 : currency.isNative) !== null && _b !== void 0 ? _b : false, srcs: logoURIs, alt: ((_c = currency === null || currency === void 0 ? void 0 : currency.symbol) !== null && _c !== void 0 ? _c : 'token') + " logo", style: style }, rest), void 0)); -} -var templateObject_1$K; - -var Wrapper$c = styled__default["default"].div(templateObject_1$J || (templateObject_1$J = __makeTemplateObject(["\n position: relative;\n display: flex;\n flex-direction: row;\n margin-left: ", ";\n"], ["\n position: relative;\n display: flex;\n flex-direction: row;\n margin-left: ", ";\n"])), function (_a) { - var sizeraw = _a.sizeraw, margin = _a.margin; - return margin && (sizeraw / 3 + 8).toString() + 'px'; -}); -var HigherLogo = styled__default["default"](CurrencyLogo)(templateObject_2$v || (templateObject_2$v = __makeTemplateObject(["\n z-index: 2;\n"], ["\n z-index: 2;\n"]))); -var CoveredLogo = styled__default["default"](CurrencyLogo)(templateObject_3$o || (templateObject_3$o = __makeTemplateObject(["\n position: absolute;\n left: ", " !important;\n"], ["\n position: absolute;\n left: ", " !important;\n"])), function (_a) { - var sizeraw = _a.sizeraw; - return '-' + (sizeraw / 2).toString() + 'px'; -}); -function DoubleCurrencyLogo(_a) { - var currency0 = _a.currency0, currency1 = _a.currency1, _b = _a.size, size = _b === void 0 ? 16 : _b, _c = _a.margin, margin = _c === void 0 ? false : _c; - return (jsxRuntime.jsxs(Wrapper$c, __assign({ sizeraw: size, margin: margin }, { children: [currency0 && jsxRuntime.jsx(HigherLogo, { currency: currency0, size: size.toString() + 'px' }, void 0), currency1 && jsxRuntime.jsx(CoveredLogo, { currency: currency1, size: size.toString() + 'px', sizeraw: size }, void 0)] }), void 0)); -} -var templateObject_1$J, templateObject_2$v, templateObject_3$o; - -/** - * Returns a WrappedTokenInfo from the active token lists when possible, - * or the passed token otherwise. */ -function useTokenInfoFromActiveList(currency) { - var chainId = useActiveWeb3React().chainId; - var activeList = useCombinedActiveList(); - return React.useMemo(function () { - if (!chainId) - return; - if (currency.isNative) - return currency; - try { - return activeList[chainId][currency.wrapped.address].token; - } - catch (e) { - return currency; - } - }, [activeList, chainId, currency]); -} - -var _line; - -function _extends$3() { _extends$3 = 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$3.apply(this, arguments); } - -var SvgDotLine = function SvgDotLine(props) { - return /*#__PURE__*/React__namespace.createElement("svg", _extends$3({ - width: "100%", - height: 35, - viewBox: "800 0 300 200", - xmlns: "http://www.w3.org/2000/svg" - }, props), _line || (_line = /*#__PURE__*/React__namespace.createElement("line", { - x1: 0, - x2: 2000, - y1: 100, - y2: 100, - stroke: "currentColor", - strokeWidth: 20, - strokeLinecap: "round", - strokeDasharray: "1, 45" - }))); -}; - -var Wrapper$b = styled__default["default"](rebass.Box)(templateObject_1$I || (templateObject_1$I = __makeTemplateObject(["\n align-items: center;\n width: 100%;\n"], ["\n align-items: center;\n width: 100%;\n"]))); -var RouteContainerRow = styled__default["default"](Row)(templateObject_2$u || (templateObject_2$u = __makeTemplateObject(["\n display: grid;\n grid-template-columns: 24px 1fr 24px;\n"], ["\n display: grid;\n grid-template-columns: 24px 1fr 24px;\n"]))); -var RouteRow = styled__default["default"](Row)(templateObject_3$n || (templateObject_3$n = __makeTemplateObject(["\n align-items: center;\n display: flex;\n justify-content: center;\n padding: 0.1rem 0.5rem;\n position: relative;\n"], ["\n align-items: center;\n display: flex;\n justify-content: center;\n padding: 0.1rem 0.5rem;\n position: relative;\n"]))); -var PoolBadge = styled__default["default"](Badge)(templateObject_4$f || (templateObject_4$f = __makeTemplateObject(["\n display: flex;\n padding: 4px 4px;\n"], ["\n display: flex;\n padding: 4px 4px;\n"]))); -var DottedLine = styled__default["default"].div(templateObject_5$d || (templateObject_5$d = __makeTemplateObject(["\n display: flex;\n align-items: center;\n position: absolute;\n width: calc(100%);\n z-index: 1;\n opacity: 0.5;\n"], ["\n display: flex;\n align-items: center;\n position: absolute;\n width: calc(100%);\n z-index: 1;\n opacity: 0.5;\n"]))); -var DotColor = styled__default["default"](SvgDotLine)(templateObject_6$9 || (templateObject_6$9 = __makeTemplateObject(["\n path {\n stroke: ", ";\n }\n"], ["\n path {\n stroke: ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.bg4; -}); -var OpaqueBadge = styled__default["default"](Badge)(templateObject_7$8 || (templateObject_7$8 = __makeTemplateObject(["\n background-color: ", ";\n border-radius: 8px;\n display: grid;\n font-size: 12px;\n grid-gap: 4px;\n grid-auto-flow: column;\n justify-content: start;\n padding: 4px 6px 4px 4px;\n z-index: ", ";\n"], ["\n background-color: ", ";\n border-radius: 8px;\n display: grid;\n font-size: 12px;\n grid-gap: 4px;\n grid-auto-flow: column;\n justify-content: start;\n padding: 4px 6px 4px 4px;\n z-index: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}, Z_INDEX.sticky); -var ProtocolBadge = styled__default["default"](Badge)(templateObject_8$5 || (templateObject_8$5 = __makeTemplateObject(["\n background-color: ", ";\n border-radius: 4px;\n color: ", ";\n font-size: 10px;\n padding: 2px 4px;\n z-index: ", ";\n"], ["\n background-color: ", ";\n border-radius: 4px;\n color: ", ";\n font-size: 10px;\n padding: 2px 4px;\n z-index: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg3; -}, function (_a) { - var theme = _a.theme; - return theme.text2; -}, Z_INDEX.sticky + 1); -var BadgeText = styled__default["default"](ThemedText.Small)(templateObject_9$5 || (templateObject_9$5 = __makeTemplateObject(["\n word-break: normal;\n"], ["\n word-break: normal;\n"]))); -function RoutingDiagram(_a) { - var currencyIn = _a.currencyIn, currencyOut = _a.currencyOut, routes = _a.routes; - var tokenIn = useTokenInfoFromActiveList(currencyIn); - var tokenOut = useTokenInfoFromActiveList(currencyOut); - return (jsxRuntime.jsx(Wrapper$b, { children: routes.map(function (entry, index) { return (jsxRuntime.jsxs(RouteContainerRow, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: tokenIn, size: '20px' }, void 0), jsxRuntime.jsx(Route, { entry: entry }, void 0), jsxRuntime.jsx(CurrencyLogo, { currency: tokenOut, size: '20px' }, void 0)] }, index)); }) }, void 0)); -} -function Route(_a) { - var _b = _a.entry, percent = _b.percent, path = _b.path, protocol = _b.protocol; - return (jsxRuntime.jsxs(RouteRow, { children: [jsxRuntime.jsx(DottedLine, { children: jsxRuntime.jsx(DotColor, {}, void 0) }, void 0), jsxRuntime.jsxs(OpaqueBadge, { children: [jsxRuntime.jsx(ProtocolBadge, { children: jsxRuntime.jsx(BadgeText, __assign({ fontSize: 12 }, { children: protocol.toUpperCase() }), void 0) }, void 0), jsxRuntime.jsxs(BadgeText, __assign({ fontSize: 14, style: { minWidth: 'auto' } }, { children: [percent.toSignificant(2), "%"] }), void 0)] }, void 0), jsxRuntime.jsx(AutoRow, __assign({ gap: "1px", width: "100%", style: { justifyContent: 'space-evenly', zIndex: 2 } }, { children: path.map(function (_a, index) { - var _b = __read(_a, 3), currency0 = _b[0], currency1 = _b[1], feeAmount = _b[2]; - return (jsxRuntime.jsx(Pool, { currency0: currency0, currency1: currency1, feeAmount: feeAmount }, index)); - }) }), void 0)] }, void 0)); -} -function Pool(_a) { - var currency0 = _a.currency0, currency1 = _a.currency1, feeAmount = _a.feeAmount; - var tokenInfo0 = useTokenInfoFromActiveList(currency0); - var tokenInfo1 = useTokenInfoFromActiveList(currency1); - // TODO - link pool icon to info.uniswap.org via query params - return (jsxRuntime.jsx(MouseoverTooltip, __assign({ text: jsxRuntime.jsxs(macro.Trans, { children: [(tokenInfo0 === null || tokenInfo0 === void 0 ? void 0 : tokenInfo0.symbol) + '/' + (tokenInfo1 === null || tokenInfo1 === void 0 ? void 0 : tokenInfo1.symbol) + ' ' + feeAmount / 10000, "% pool"] }, void 0) }, { children: jsxRuntime.jsxs(PoolBadge, { children: [jsxRuntime.jsx(rebass.Box, __assign({ margin: "0 4px 0 12px" }, { children: jsxRuntime.jsx(DoubleCurrencyLogo, { currency0: tokenInfo1, currency1: tokenInfo0, size: 20 }, void 0) }), void 0), jsxRuntime.jsxs(ThemedText.Small, __assign({ fontSize: 14 }, { children: [feeAmount / 10000, "%"] }), void 0)] }, void 0) }), void 0)); -} -var templateObject_1$I, templateObject_2$u, templateObject_3$n, templateObject_4$f, templateObject_5$d, templateObject_6$9, templateObject_7$8, templateObject_8$5, templateObject_9$5; - -var AUTO_ROUTER_SUPPORTED_CHAINS = Object.values(smartOrderRouter.ChainId); - -function useAutoRouterSupported() { - var chainId = useActiveWeb3React().chainId; - return Boolean(chainId && AUTO_ROUTER_SUPPORTED_CHAINS.includes(chainId)); -} - -var _defs, _path$2; - -function _extends$2() { _extends$2 = 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$2.apply(this, arguments); } -======= - name, - timestamp, - version, - tags, - logoURI, - keywords, - tokens, -} - -function useAllLists() { - return useAppSelector(function (state) { - return state.lists.byUrl - }) -} -/** - * Combine the tokens in map2 with the tokens on map1, where tokens on map1 take precedence - * @param map1 the base token map - * @param map2 the map of additioanl tokens to add to the base map - */ -function combineMaps(map1, map2) { - var chainIds = Object.keys( - Object.keys(map1) - .concat(Object.keys(map2)) - .reduce(function (memo, value) { - memo[value] = true - return memo - }, {}) - ).map(function (id) { - return parseInt(id) - }) - return chainIds.reduce(function (memo, chainId) { - memo[chainId] = __assign(__assign({}, map2[chainId]), map1[chainId]) - return memo - }, {}) -} -// merge tokens contained within lists from urls -function useCombinedTokenMapFromUrls(urls) { - var lists = useAllLists() - return React.useMemo( - function () { - if (!urls) return {} - return ( - urls - .slice() - // sort by priority so top priority goes last - .sort(sortByListPriority) - .reduce(function (allTokens, currentUrl) { - var _a - var current = (_a = lists[currentUrl]) === null || _a === void 0 ? void 0 : _a.current - if (!current) return allTokens - try { - return combineMaps(allTokens, tokensToChainTokenMap(current)) - } catch (error) { - console.error('Could not show token list due to error', error) - return allTokens - } - }, {}) - ) - }, - [lists, urls] - ) -} -// filter out unsupported lists -function useActiveListUrls() { - var activeListUrls = useAppSelector(function (state) { - return state.lists.activeListUrls - }) - return React.useMemo( - function () { - return activeListUrls === null || activeListUrls === void 0 - ? void 0 - : activeListUrls.filter(function (url) { - return !UNSUPPORTED_LIST_URLS.includes(url) - }) - }, - [activeListUrls] - ) -} -function useInactiveListUrls() { - var lists = useAllLists() - var allActiveListUrls = useActiveListUrls() - return React.useMemo( - function () { - return Object.keys(lists).filter(function (url) { - return ( - !(allActiveListUrls === null || allActiveListUrls === void 0 ? void 0 : allActiveListUrls.includes(url)) && - !UNSUPPORTED_LIST_URLS.includes(url) - ) - }) - }, - [lists, allActiveListUrls] - ) -} -// get all the tokens from active lists, combine with local default tokens -function useCombinedActiveList() { - var activeListUrls = useActiveListUrls() - var activeTokens = useCombinedTokenMapFromUrls(activeListUrls) - return activeTokens -} -// list of tokens not supported on interface for various reasons, used to show warnings and prevent swaps and adds -function useUnsupportedTokenList() { - // get hard-coded broken tokens - var brokenListMap = React.useMemo(function () { - return tokensToChainTokenMap(BROKEN_LIST) - }, []) - // get hard-coded list of unsupported tokens - var localUnsupportedListMap = React.useMemo(function () { - return tokensToChainTokenMap(UNSUPPORTED_TOKEN_LIST) - }, []) - // get dynamic list of unsupported tokens - var loadedUnsupportedListMap = useCombinedTokenMapFromUrls(UNSUPPORTED_LIST_URLS) - // format into one token address map - return React.useMemo( - function () { - return combineMaps(brokenListMap, combineMaps(localUnsupportedListMap, loadedUnsupportedListMap)) - }, - [brokenListMap, localUnsupportedListMap, loadedUnsupportedListMap] - ) -} -function useIsListActive(url) { - var activeListUrls = useActiveListUrls() - return Boolean(activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(url)) -} - -// reduce token map into standard address <-> Token mapping, optionally include user added tokens -function useTokensFromMap(tokenMap, includeUserAdded) { - var chainId = useActiveWeb3React().chainId - var userAddedTokens = useUserAddedTokens() - return React.useMemo( - function () { - var _a - if (!chainId) return {} - // reduce to just tokens - var mapWithoutUrls = Object.keys((_a = tokenMap[chainId]) !== null && _a !== void 0 ? _a : {}).reduce(function ( - newMap, - address - ) { - newMap[address] = tokenMap[chainId][address].token - return newMap - }, - {}) - if (includeUserAdded) { - return ( - userAddedTokens - // reduce into all ALL_TOKENS filtered by the current chain - .reduce(function (tokenMap, token) { - tokenMap[token.address] = token - return tokenMap - }, __assign({}, mapWithoutUrls)) - ) - } - return mapWithoutUrls - }, - [chainId, userAddedTokens, tokenMap, includeUserAdded] - ) -} -function useAllTokens() { - var allTokens = useCombinedActiveList() - return useTokensFromMap(allTokens, true) -} -function useUnsupportedTokens() { - var chainId = useActiveWeb3React().chainId - var listsByUrl = useAllLists() - var unsupportedTokensMap = useUnsupportedTokenList() - var unsupportedTokens = useTokensFromMap(unsupportedTokensMap, false) - // checks the default L2 lists to see if `bridgeInfo` has an L1 address value that is unsupported - var l2InferredBlockedTokens = React.useMemo( - function () { - if (!chainId || !L2_CHAIN_IDS.includes(chainId)) { - return {} - } - if (!listsByUrl) { - return {} - } - var listUrl = CHAIN_INFO[chainId].defaultListUrl - var list = listsByUrl[listUrl].current - if (!list) { - return {} - } - var unsupportedSet = new Set(Object.keys(unsupportedTokens)) - return list.tokens.reduce(function (acc, tokenInfo) { - var _a - var _b - var bridgeInfo = (_b = tokenInfo.extensions) === null || _b === void 0 ? void 0 : _b.bridgeInfo - if ( - bridgeInfo && - bridgeInfo[SupportedChainId.MAINNET] && - bridgeInfo[SupportedChainId.MAINNET].tokenAddress && - unsupportedSet.has(bridgeInfo[SupportedChainId.MAINNET].tokenAddress) - ) { - var address = bridgeInfo[SupportedChainId.MAINNET].tokenAddress - // don't rely on decimals--it's possible that a token could be bridged w/ different decimals on the L2 - return __assign( - __assign({}, acc), - ((_a = {}), (_a[address] = new sdkCore.Token(SupportedChainId.MAINNET, address, tokenInfo.decimals)), _a) - ) - } - return acc - }, {}) - }, - [chainId, listsByUrl, unsupportedTokens] - ) - return __assign(__assign({}, unsupportedTokens), l2InferredBlockedTokens) -} -function useSearchInactiveTokenLists(search, minResults) { - if (minResults === void 0) { - minResults = 10 - } - var lists = useAllLists() - var inactiveUrls = useInactiveListUrls() - var chainId = useActiveWeb3React().chainId - var activeTokens = useAllTokens() - return React.useMemo( - function () { - var e_1, _a, e_2, _b - if (!search || search.trim().length === 0) return [] - var tokenFilter = getTokenFilter(search) - var result = [] - var addressSet = {} - try { - for ( - var inactiveUrls_1 = __values(inactiveUrls), inactiveUrls_1_1 = inactiveUrls_1.next(); - !inactiveUrls_1_1.done; - inactiveUrls_1_1 = inactiveUrls_1.next() - ) { - var url = inactiveUrls_1_1.value - var list = lists[url].current - if (!list) continue - try { - for (var _c = ((e_2 = void 0), __values(list.tokens)), _d = _c.next(); !_d.done; _d = _c.next()) { - var tokenInfo = _d.value - if (tokenInfo.chainId === chainId && tokenFilter(tokenInfo)) { - var wrapped = new WrappedTokenInfo(tokenInfo, list) - if (!(wrapped.address in activeTokens) && !addressSet[wrapped.address]) { - addressSet[wrapped.address] = true - result.push(wrapped) - if (result.length >= minResults) return result - } - } - } - } catch (e_2_1) { - e_2 = { error: e_2_1 } - } finally { - try { - if (_d && !_d.done && (_b = _c.return)) _b.call(_c) - } finally { - if (e_2) throw e_2.error - } - } - } - } catch (e_1_1) { - e_1 = { error: e_1_1 } - } finally { - try { - if (inactiveUrls_1_1 && !inactiveUrls_1_1.done && (_a = inactiveUrls_1.return)) _a.call(inactiveUrls_1) - } finally { - if (e_1) throw e_1.error - } - } - return result - }, - [activeTokens, chainId, inactiveUrls, lists, minResults, search] - ) -} -function useIsTokenActive(token) { - var activeTokens = useAllTokens() - if (!activeTokens || !token) { - return false - } - return !!activeTokens[token.address] -} -// Check if currency is included in custom list from user storage -function useIsUserAddedToken(currency) { - var userAddedTokens = useUserAddedTokens() - if (!currency) { - return false - } - return !!userAddedTokens.find(function (token) { - return currency.equals(token) - }) -} -// undefined if invalid or does not exist -// null if loading or null was passed -// otherwise returns the token -function useToken(tokenAddress) { - var tokens = useAllTokens() - return useTokenFromMap(tokens, tokenAddress) -} -function useCurrency(currencyId) { - var tokens = useAllTokens() - return useCurrencyFromMap(tokens, currencyId) -} - -var updateMatchesDarkMode = toolkit.createAction('user/updateMatchesDarkMode') -var updateUserDarkMode = toolkit.createAction('user/updateUserDarkMode') -var updateUserExpertMode = toolkit.createAction('user/updateUserExpertMode') -var updateUserLocale = toolkit.createAction('user/updateUserLocale') -var updateShowSurveyPopup = toolkit.createAction('user/updateShowSurveyPopup') -var updateUserClientSideRouter = toolkit.createAction('user/updateUserClientSideRouter') -var updateHideClosedPositions = toolkit.createAction('user/hideClosedPositions') -var updateUserSlippageTolerance = toolkit.createAction('user/updateUserSlippageTolerance') -var updateUserDeadline = toolkit.createAction('user/updateUserDeadline') -var addSerializedToken = toolkit.createAction('user/addSerializedToken') -var removeSerializedToken = toolkit.createAction('user/removeSerializedToken') -var addSerializedPair = toolkit.createAction('user/addSerializedPair') -var removeSerializedPair = toolkit.createAction('user/removeSerializedPair') - -function serializeToken(token) { - return { - chainId: token.chainId, - address: token.address, - decimals: token.decimals, - symbol: token.symbol, - name: token.name, - } -} -function deserializeToken(serializedToken) { - return new sdkCore.Token( - serializedToken.chainId, - serializedToken.address, - serializedToken.decimals, - serializedToken.symbol, - serializedToken.name - ) -} -function useIsDarkMode() { - var _a = useAppSelector(function (_a) { - var _b = _a.user, - matchesDarkMode = _b.matchesDarkMode, - userDarkMode = _b.userDarkMode - return { - userDarkMode, - matchesDarkMode, - } - }, reactRedux.shallowEqual), - userDarkMode = _a.userDarkMode, - matchesDarkMode = _a.matchesDarkMode - return userDarkMode === null ? matchesDarkMode : userDarkMode -} -function useDarkModeManager() { - var dispatch = useAppDispatch() - var darkMode = useIsDarkMode() - var toggleSetDarkMode = React.useCallback( - function () { - dispatch(updateUserDarkMode({ userDarkMode: !darkMode })) - }, - [darkMode, dispatch] - ) - return [darkMode, toggleSetDarkMode] -} -function useUserLocale() { - return useAppSelector(function (state) { - return state.user.userLocale - }) -} -function useIsExpertMode() { - return useAppSelector(function (state) { - return state.user.userExpertMode - }) -} -function useExpertModeManager() { - var dispatch = useAppDispatch() - var expertMode = useIsExpertMode() - var toggleSetExpertMode = React.useCallback( - function () { - dispatch(updateUserExpertMode({ userExpertMode: !expertMode })) - }, - [expertMode, dispatch] - ) - return [expertMode, toggleSetExpertMode] -} -function useClientSideRouter() { - var dispatch = useAppDispatch() - var clientSideRouter = useAppSelector(function (state) { - return Boolean(state.user.userClientSideRouter) - }) - var setClientSideRouter = React.useCallback( - function (newClientSideRouter) { - dispatch(updateUserClientSideRouter({ userClientSideRouter: newClientSideRouter })) - }, - [dispatch] - ) - return [clientSideRouter, setClientSideRouter] -} -function useSetUserSlippageTolerance() { - var dispatch = useAppDispatch() - return React.useCallback( - function (userSlippageTolerance) { - var value - try { - value = - userSlippageTolerance === 'auto' - ? 'auto' - : JSBI__default['default'].toNumber(userSlippageTolerance.multiply(10000).quotient) - } catch (error) { - value = 'auto' - } - dispatch( - updateUserSlippageTolerance({ - userSlippageTolerance: value, - }) - ) - }, - [dispatch] - ) -} -/** - * Return the user's slippage tolerance, from the redux store, and a function to update the slippage tolerance - */ -function useUserSlippageTolerance() { - var userSlippageTolerance = useAppSelector(function (state) { - return state.user.userSlippageTolerance - }) - return React.useMemo( - function () { - return userSlippageTolerance === 'auto' ? 'auto' : new sdkCore.Percent(userSlippageTolerance, 10000) - }, - [userSlippageTolerance] - ) -} -/** - * Same as above but replaces the auto with a default value - * @param defaultSlippageTolerance the default value to replace auto with - */ -function useUserSlippageToleranceWithDefault(defaultSlippageTolerance) { - var allowedSlippage = useUserSlippageTolerance() - return React.useMemo( - function () { - return allowedSlippage === 'auto' ? defaultSlippageTolerance : allowedSlippage - }, - [allowedSlippage, defaultSlippageTolerance] - ) -} -function useUserTransactionTTL() { - var chainId = useActiveWeb3React().chainId - var dispatch = useAppDispatch() - var userDeadline = useAppSelector(function (state) { - return state.user.userDeadline - }) - var onL2 = Boolean(chainId && L2_CHAIN_IDS.includes(chainId)) - var deadline = onL2 ? L2_DEADLINE_FROM_NOW : userDeadline - var setUserDeadline = React.useCallback( - function (userDeadline) { - dispatch(updateUserDeadline({ userDeadline })) - }, - [dispatch] - ) - return [deadline, setUserDeadline] -} -function useAddUserToken() { - var dispatch = useAppDispatch() - return React.useCallback( - function (token) { - dispatch(addSerializedToken({ serializedToken: serializeToken(token) })) - }, - [dispatch] - ) -} -function useRemoveUserAddedToken() { - var dispatch = useAppDispatch() - return React.useCallback( - function (chainId, address) { - dispatch(removeSerializedToken({ chainId, address })) - }, - [dispatch] - ) -} -function useUserAddedTokens() { - var chainId = useActiveWeb3React().chainId - var serializedTokensMap = useAppSelector(function (_a) { - var tokens = _a.user.tokens - return tokens - }) - return React.useMemo( - function () { - if (!chainId) return [] - var tokenMap = ( - serializedTokensMap === null || serializedTokensMap === void 0 ? void 0 : serializedTokensMap[chainId] - ) - ? Object.values(serializedTokensMap[chainId]).map(deserializeToken) - : [] - return tokenMap - }, - [serializedTokensMap, chainId] - ) -} - -var EXPLORER_HOSTNAMES = { - 'etherscan.io': true, - 'ropsten.etherscan.io': true, - 'rinkeby.etherscan.io': true, - 'kovan.etherscan.io': true, - 'goerli.etherscan.io': true, - 'optimistic.etherscan.io': true, - 'kovan-optimistic.etherscan.io': true, - 'rinkeby-explorer.arbitrum.io': true, - 'arbiscan.io': true, -} -/** - * Returns the anonymized version of the given href, i.e. one that does not leak user information - * @param href the link to anonymize, i.e. remove any personal data from - * @return string anonymized version of the given href - */ -function anonymizeLink(href) { - try { - var url = new URL(href) - if (EXPLORER_HOSTNAMES[url.hostname]) { - var pathPieces = url.pathname.split('/') - var anonymizedPath = pathPieces - .map(function (pc) { - return /0x[a-fA-F0-9]+/.test(pc) ? '***' : pc - }) - .join('/') - return url.protocol + '//' + url.hostname + anonymizedPath - } - return href - } catch (error) { - return href - } -} - -var ButtonText = styled__default['default'].button( - templateObject_1$W || - (templateObject_1$W = __makeTemplateObject( - [ - '\n outline: none;\n border: none;\n font-size: inherit;\n padding: 0;\n margin: 0;\n background: none;\n cursor: pointer;\n\n :hover {\n opacity: 0.7;\n }\n\n :focus {\n text-decoration: underline;\n }\n', - ], - [ - '\n outline: none;\n border: none;\n font-size: inherit;\n padding: 0;\n margin: 0;\n background: none;\n cursor: pointer;\n\n :hover {\n opacity: 0.7;\n }\n\n :focus {\n text-decoration: underline;\n }\n', - ] - )) -) -var CloseIcon = styled__default['default'](reactFeather.X)( - templateObject_2$D || - (templateObject_2$D = __makeTemplateObject( - ['\n cursor: pointer;\n'], - [ - '\n cursor: pointer;\n', - // for wrapper react feather icons - ] - )) -) -// for wrapper react feather icons -var IconWrapper = styled__default['default'].div( - templateObject_3$w || - (templateObject_3$w = __makeTemplateObject( - [ - '\n display: flex;\n align-items: center;\n justify-content: center;\n width: ', - ';\n height: ', - ';\n margin-right: ', - ';\n margin-left: ', - ';\n & > * {\n stroke: ', - ';\n }\n', - ], - [ - '\n display: flex;\n align-items: center;\n justify-content: center;\n width: ', - ';\n height: ', - ';\n margin-right: ', - ';\n margin-left: ', - ';\n & > * {\n stroke: ', - ';\n }\n', - // A button that triggers some onClick result, but looks like a link. - ] - )), - function (_a) { - var size = _a.size - return size !== null && size !== void 0 ? size : '20px' - }, - function (_a) { - var size = _a.size - return size !== null && size !== void 0 ? size : '20px' - }, - function (_a) { - var marginRight = _a.marginRight - return marginRight !== null && marginRight !== void 0 ? marginRight : 0 - }, - function (_a) { - var marginLeft = _a.marginLeft - return marginLeft !== null && marginLeft !== void 0 ? marginLeft : 0 - }, - function (_a) { - var theme = _a.theme, - stroke = _a.stroke - return stroke !== null && stroke !== void 0 ? stroke : theme.blue1 - } -) -// A button that triggers some onClick result, but looks like a link. -var LinkStyledButton = styled__default['default'].button( - templateObject_4$m || - (templateObject_4$m = __makeTemplateObject( - [ - '\n border: none;\n text-decoration: none;\n background: none;\n\n cursor: ', - ';\n color: ', - ';\n font-weight: 500;\n\n :hover {\n text-decoration: ', - ';\n }\n\n :focus {\n outline: none;\n text-decoration: ', - ';\n }\n\n :active {\n text-decoration: none;\n }\n', - ], - [ - '\n border: none;\n text-decoration: none;\n background: none;\n\n cursor: ', - ';\n color: ', - ';\n font-weight: 500;\n\n :hover {\n text-decoration: ', - ';\n }\n\n :focus {\n outline: none;\n text-decoration: ', - ';\n }\n\n :active {\n text-decoration: none;\n }\n', - // An internal link from the react-router-dom library that is correctly styled - ] - )), - function (_a) { - var disabled = _a.disabled - return disabled ? 'default' : 'pointer' - }, - function (_a) { - var theme = _a.theme, - disabled = _a.disabled - return disabled ? theme.text2 : theme.primary1 - }, - function (_a) { - var disabled = _a.disabled - return disabled ? null : 'underline' - }, - function (_a) { - var disabled = _a.disabled - return disabled ? null : 'underline' - } -) -// An internal link from the react-router-dom library that is correctly styled -var StyledInternalLink = styled__default['default'](reactRouterDom.Link)( - templateObject_5$j || - (templateObject_5$j = __makeTemplateObject( - [ - '\n text-decoration: none;\n cursor: pointer;\n color: ', - ';\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 text-decoration: none;\n cursor: pointer;\n color: ', - ';\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', - ] - )), - function (_a) { - var theme = _a.theme - return theme.primary1 - } -) -var StyledLink = styled__default['default'].a( - templateObject_6$d || - (templateObject_6$d = __makeTemplateObject( - [ - '\n text-decoration: none;\n cursor: pointer;\n color: ', - ';\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 text-decoration: none;\n cursor: pointer;\n color: ', - ';\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', - ] - )), - function (_a) { - var theme = _a.theme - return theme.primary1 - } -) -var LinkIconWrapper = styled__default['default'].a( - templateObject_7$c || - (templateObject_7$c = __makeTemplateObject( - [ - '\n text-decoration: none;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n text-decoration: none;\n opacity: 0.7;\n }\n\n :focus {\n outline: none;\n text-decoration: none;\n }\n\n :active {\n text-decoration: none;\n }\n', - ], - [ - '\n text-decoration: none;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n text-decoration: none;\n opacity: 0.7;\n }\n\n :focus {\n outline: none;\n text-decoration: none;\n }\n\n :active {\n text-decoration: none;\n }\n', - ] - )) -) -var LinkIcon = styled__default['default'](reactFeather.ExternalLink)( - templateObject_8$9 || - (templateObject_8$9 = __makeTemplateObject( - ['\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ', ';\n'], - ['\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ', ';\n'] - )), - function (_a) { - var theme = _a.theme - return theme.blue1 - } -) -var TrashIcon = styled__default['default'](reactFeather.Trash)( - templateObject_9$8 || - (templateObject_9$8 = __makeTemplateObject( - [ - '\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ', - ';\n\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n opacity: 0.7;\n }\n', - ], - [ - '\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ', - ';\n\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n opacity: 0.7;\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.text3 - } -) -var rotateImg = styled.keyframes( - templateObject_10$6 || - (templateObject_10$6 = __makeTemplateObject( - [ - '\n 0% {\n transform: perspective(1000px) rotateY(0deg);\n }\n\n 100% {\n transform: perspective(1000px) rotateY(360deg);\n }\n', - ], - [ - '\n 0% {\n transform: perspective(1000px) rotateY(0deg);\n }\n\n 100% {\n transform: perspective(1000px) rotateY(360deg);\n }\n', - ] - )) -) -styled__default['default'].img( - templateObject_11$5 || - (templateObject_11$5 = __makeTemplateObject( - [ - '\n animation: ', - ' 5s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n padding: 2rem 0 0 0;\n filter: drop-shadow(0px 2px 4px rgba(0, 0, 0, 0.15));\n', - ], - [ - '\n animation: ', - ' 5s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n padding: 2rem 0 0 0;\n filter: drop-shadow(0px 2px 4px rgba(0, 0, 0, 0.15));\n', - ] - )), - rotateImg -) -function handleClickExternalLink(event) { - var _a = event.currentTarget, - target = _a.target, - href = _a.href - var anonymizedHref = anonymizeLink(href) - // don't prevent default, don't redirect if it's a new tab - if (target === '_blank' || event.ctrlKey || event.metaKey) { - ReactGA__default['default'].outboundLink({ label: anonymizedHref }, function () { - console.debug('Fired outbound link event', anonymizedHref) - }) - } else { - event.preventDefault() - // send a ReactGA event and then trigger a location change - ReactGA__default['default'].outboundLink({ label: anonymizedHref }, function () { - window.location.href = anonymizedHref - }) - } -} -/** - * Outbound link that handles firing google analytics events - */ -function ExternalLink(_a) { - var _b = _a.target, - target = _b === void 0 ? '_blank' : _b, - href = _a.href, - _c = _a.rel, - rel = _c === void 0 ? 'noopener noreferrer' : _c, - rest = __rest(_a, ['target', 'href', 'rel']) - return jsxRuntime.jsx(StyledLink, __assign({ target, rel, href, onClick: handleClickExternalLink }, rest), void 0) -} -function ExternalLinkIcon(_a) { - var _b = _a.target, - target = _b === void 0 ? '_blank' : _b, - href = _a.href, - _c = _a.rel, - rel = _c === void 0 ? 'noopener noreferrer' : _c, - rest = __rest(_a, ['target', 'href', 'rel']) - return jsxRuntime.jsx( - LinkIconWrapper, - __assign({ target, rel, href, onClick: handleClickExternalLink }, rest, { - children: jsxRuntime.jsx(LinkIcon, {}, void 0), - }), - void 0 - ) -} -var rotate$1 = styled.keyframes( - templateObject_12$5 || - (templateObject_12$5 = __makeTemplateObject( - ['\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n'], - ['\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n'] - )) -) -var Spinner$1 = styled__default['default'].img( - templateObject_13$2 || - (templateObject_13$2 = __makeTemplateObject( - ['\n animation: 2s ', ' linear infinite;\n width: 16px;\n height: 16px;\n'], - ['\n animation: 2s ', ' linear infinite;\n width: 16px;\n height: 16px;\n'] - )), - rotate$1 -) -styled__default['default'](StyledInternalLink)( - templateObject_14$2 || (templateObject_14$2 = __makeTemplateObject(['\n color: ', ';\n'], ['\n color: ', ';\n'])), - function (_a) { - var theme = _a.theme - return theme.text1 - } -) -var CustomLightSpinner = styled__default['default'](Spinner$1)( - templateObject_15$1 || - (templateObject_15$1 = __makeTemplateObject( - ['\n height: ', ';\n width: ', ';\n'], - ['\n height: ', ';\n width: ', ';\n'] - )), - function (_a) { - var size = _a.size - return size - }, - function (_a) { - var size = _a.size - return size - } -) -var HideSmall = styled__default['default'].span( - templateObject_17 || (templateObject_17 = __makeTemplateObject(['\n ', ';\n'], ['\n ', ';\n'])), - function (_a) { - var theme = _a.theme - return theme.mediaWidth.upToSmall( - templateObject_16 || - (templateObject_16 = __makeTemplateObject(['\n display: none;\n '], ['\n display: none;\n '])) - ) - } -) -styled__default['default'].span( - templateObject_19 || (templateObject_19 = __makeTemplateObject(['\n ', ';\n'], ['\n ', ';\n'])), - function (_a) { - var theme = _a.theme - return theme.mediaWidth.upToExtraSmall( - templateObject_18 || - (templateObject_18 = __makeTemplateObject(['\n display: none;\n '], ['\n display: none;\n '])) - ) - } -) -styled__default['default'].span( - templateObject_21 || - (templateObject_21 = __makeTemplateObject(['\n display: none;\n ', ';\n'], ['\n display: none;\n ', ';\n'])), - function (_a) { - var theme = _a.theme - return theme.mediaWidth.upToSmall( - templateObject_20 || - (templateObject_20 = __makeTemplateObject(['\n display: block;\n '], ['\n display: block;\n '])) - ) - } -) -var Separator$1 = styled__default['default'].div( - templateObject_22 || - (templateObject_22 = __makeTemplateObject( - ['\n width: 100%;\n height: 1px;\n background-color: ', ';\n'], - ['\n width: 100%;\n height: 1px;\n background-color: ', ';\n'] - )), - function (_a) { - var theme = _a.theme - return theme.bg2 - } -) -var templateObject_1$W, - templateObject_2$D, - templateObject_3$w, - templateObject_4$m, - templateObject_5$j, - templateObject_6$d, - templateObject_7$c, - templateObject_8$9, - templateObject_9$8, - templateObject_10$6, - templateObject_11$5, - templateObject_12$5, - templateObject_13$2, - templateObject_14$2, - templateObject_15$1, - templateObject_16, - templateObject_17, - templateObject_18, - templateObject_19, - templateObject_20, - templateObject_21, - templateObject_22 - -var MEDIA_WIDTHS = { - upToExtraSmall: 500, - upToSmall: 720, - upToMedium: 960, - upToLarge: 1280, -} -// Migrating to a standard z-index system https://getbootstrap.com/docs/5.0/layout/z-index/ -// Please avoid using deprecated numbers -var Z_INDEX -;(function (Z_INDEX) { - Z_INDEX[(Z_INDEX['deprecated_zero'] = 0)] = 'deprecated_zero' - Z_INDEX[(Z_INDEX['deprecated_content'] = 1)] = 'deprecated_content' - Z_INDEX[(Z_INDEX['dropdown'] = 1000)] = 'dropdown' - Z_INDEX[(Z_INDEX['sticky'] = 1020)] = 'sticky' - Z_INDEX[(Z_INDEX['fixed'] = 1030)] = 'fixed' - Z_INDEX[(Z_INDEX['modalBackdrop'] = 1040)] = 'modalBackdrop' - Z_INDEX[(Z_INDEX['offcanvas'] = 1050)] = 'offcanvas' - Z_INDEX[(Z_INDEX['modal'] = 1060)] = 'modal' - Z_INDEX[(Z_INDEX['popover'] = 1070)] = 'popover' - Z_INDEX[(Z_INDEX['tooltip'] = 1080)] = 'tooltip' -})(Z_INDEX || (Z_INDEX = {})) -Object.keys(MEDIA_WIDTHS).reduce(function (accumulator, size) { - accumulator[size] = function (a, b, c) { - return styled.css( - templateObject_1$V || - (templateObject_1$V = __makeTemplateObject( - ['\n @media (max-width: ', 'px) {\n ', '\n }\n '], - ['\n @media (max-width: ', 'px) {\n ', '\n }\n '] - )), - MEDIA_WIDTHS[size], - styled.css(a, b, c) - ) - } - return accumulator -}, {}) -var TextWrapper$1 = styled__default['default'](rebass.Text)( - templateObject_4$l || - (templateObject_4$l = __makeTemplateObject( - ['\n color: ', ';\n'], - [ - '\n color: ', - ';\n', - /** - * Preset styles of the Rebass Text component - */ - ] - )), - function (_a) { - var color = _a.color, - theme = _a.theme - return theme[color] - } -) -/** - * Preset styles of the Rebass Text component - */ -var ThemedText = { - Main(props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text2' }, props), void 0) - }, - Link(props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'primary1' }, props), void 0) - }, - Label(props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 600, color: 'text1' }, props), void 0) - }, - Black(props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text1' }, props), void 0) - }, - White(props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'white' }, props), void 0) - }, - Body(props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 400, fontSize: 16, color: 'text1' }, props), void 0) - }, - LargeHeader(props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 600, fontSize: 24 }, props), void 0) - }, - MediumHeader(props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, fontSize: 20 }, props), void 0) - }, - SubHeader(props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 400, fontSize: 14 }, props), void 0) - }, - Small(props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, fontSize: 11 }, props), void 0) - }, - Blue(props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'blue1' }, props), void 0) - }, - Yellow(props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'yellow3' }, props), void 0) - }, - DarkGray(props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text3' }, props), void 0) - }, - Gray(props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'bg3' }, props), void 0) - }, - Italic(props) { - return jsxRuntime.jsx( - TextWrapper$1, - __assign({ fontWeight: 500, fontSize: 12, fontStyle: 'italic', color: 'text2' }, props), - void 0 - ) - }, - Error(_a) { - var error = _a.error, - props = __rest(_a, ['error']) - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: error ? 'red1' : 'text2' }, props), void 0) - }, -} -styled.createGlobalStyle( - templateObject_5$i || - (templateObject_5$i = __makeTemplateObject( - ['\nhtml {\n color: ', ';\n background-color: ', ' !important;\n}\n\na {\n color: ', '; \n}\n'], - ['\nhtml {\n color: ', ';\n background-color: ', ' !important;\n}\n\na {\n color: ', '; \n}\n'] - )), - function (_a) { - var theme = _a.theme - return theme.text1 - }, - function (_a) { - var theme = _a.theme - return theme.bg1 - }, - function (_a) { - var theme = _a.theme - return theme.blue1 - } -) -var templateObject_1$V, templateObject_4$l, templateObject_5$i - -var Row = styled__default['default'](styledComponents.Box)( - templateObject_1$U || - (templateObject_1$U = __makeTemplateObject( - [ - '\n width: ', - ';\n display: flex;\n padding: 0;\n align-items: ', - ';\n justify-content: ', - ';\n padding: ', - ';\n border: ', - ';\n border-radius: ', - ';\n', - ], - [ - '\n width: ', - ';\n display: flex;\n padding: 0;\n align-items: ', - ';\n justify-content: ', - ';\n padding: ', - ';\n border: ', - ';\n border-radius: ', - ';\n', - ] - )), - function (_a) { - var width = _a.width - return width !== null && width !== void 0 ? width : '100%' - }, - function (_a) { - var align = _a.align - return align !== null && align !== void 0 ? align : 'center' - }, - function (_a) { - var justify = _a.justify - return justify !== null && justify !== void 0 ? justify : 'flex-start' - }, - function (_a) { - var padding = _a.padding - return padding - }, - function (_a) { - var border = _a.border - return border - }, - function (_a) { - var borderRadius = _a.borderRadius - return borderRadius - } -) -var RowBetween = styled__default['default'](Row)( - templateObject_2$C || - (templateObject_2$C = __makeTemplateObject( - ['\n justify-content: space-between;\n'], - ['\n justify-content: space-between;\n'] - )) -) -styled__default['default'].div( - templateObject_3$v || - (templateObject_3$v = __makeTemplateObject( - ['\n display: flex;\n align-items: flex-end;\n'], - ['\n display: flex;\n align-items: flex-end;\n'] - )) -) -var AutoRow = styled__default['default'](Row)( - templateObject_4$k || - (templateObject_4$k = __makeTemplateObject( - [ - '\n flex-wrap: wrap;\n margin: ', - ';\n justify-content: ', - ';\n\n & > * {\n margin: ', - ' !important;\n }\n', - ], - [ - '\n flex-wrap: wrap;\n margin: ', - ';\n justify-content: ', - ';\n\n & > * {\n margin: ', - ' !important;\n }\n', - ] - )), - function (_a) { - var gap = _a.gap - return gap && '-' + gap - }, - function (_a) { - var justify = _a.justify - return justify && justify - }, - function (_a) { - var gap = _a.gap - return gap - } -) -var RowFixed = styled__default['default'](Row)( - templateObject_5$h || - (templateObject_5$h = __makeTemplateObject( - ['\n width: fit-content;\n margin: ', ';\n'], - ['\n width: fit-content;\n margin: ', ';\n'] - )), - function (_a) { - var gap = _a.gap - return gap && '-' + gap - } -) -var templateObject_1$U, templateObject_2$C, templateObject_3$v, templateObject_4$k, templateObject_5$h - -var _a$a, _b$2, _c$2, _d$1 -var L2Icon = styled__default['default'].img( - templateObject_1$T || - (templateObject_1$T = __makeTemplateObject( - ['\n width: 24px;\n height: 24px;\n margin-right: 16px;\n'], - ['\n width: 24px;\n height: 24px;\n margin-right: 16px;\n'] - )) -) -styled__default['default'].div( - templateObject_2$B || - (templateObject_2$B = __makeTemplateObject( - ['\n align-items: center;\n display: flex;\n justify-content: flex-start;\n padding: 0 20px 20px 20px;\n'], - ['\n align-items: center;\n display: flex;\n justify-content: flex-start;\n padding: 0 20px 20px 20px;\n'] - )) -) -var BodyText = styled__default['default'].div( - templateObject_3$u || - (templateObject_3$u = __makeTemplateObject( - [ - '\n color: ', - ';\n display: flex;\n align-items: center;\n justify-content: flex-start;\n margin: 8px;\n font-size: 14px;\n', - ], - [ - '\n color: ', - ';\n display: flex;\n align-items: center;\n justify-content: flex-start;\n margin: 8px;\n font-size: 14px;\n', - ] - )), - function (_a) { - var color = _a.color - return color - } -) -var RootWrapper = styled__default['default'].div( - templateObject_4$j || - (templateObject_4$j = __makeTemplateObject( - ['\n position: relative;\n margin-top: 16px;\n'], - ['\n position: relative;\n margin-top: 16px;\n'] - )) -) -var SHOULD_SHOW_ALERT = - ((_a$a = {}), - (_a$a[SupportedChainId.OPTIMISM] = true), - (_a$a[SupportedChainId.OPTIMISTIC_KOVAN] = true), - (_a$a[SupportedChainId.ARBITRUM_ONE] = true), - (_a$a[SupportedChainId.ARBITRUM_RINKEBY] = true), - (_a$a[SupportedChainId.POLYGON] = true), - (_a$a[SupportedChainId.POLYGON_MUMBAI] = true), - _a$a) -var BG_COLORS_BY_DARK_MODE_AND_CHAIN_ID = { - dark: - ((_b$2 = {}), - (_b$2[SupportedChainId.POLYGON] = - 'radial-gradient(100% 93.36% at 0% 6.64%, rgba(160, 108, 247, 0.1) 0%, rgba(82, 32, 166, 0.1) 100%)'), - (_b$2[SupportedChainId.POLYGON_MUMBAI] = - 'radial-gradient(100% 93.36% at 0% 6.64%, rgba(160, 108, 247, 0.1) 0%, rgba(82, 32, 166, 0.1) 100%)'), - (_b$2[SupportedChainId.OPTIMISM] = - 'radial-gradient(948% 292% at 42% 0%, rgba(255, 58, 212, 0.01) 0%, rgba(255, 255, 255, 0.04) 100%),radial-gradient(98% 96% at 2% 0%, rgba(255, 39, 39, 0.01) 0%, rgba(235, 0, 255, 0.01) 96%)'), - (_b$2[SupportedChainId.OPTIMISTIC_KOVAN] = - 'radial-gradient(948% 292% at 42% 0%, rgba(255, 58, 212, 0.04) 0%, rgba(255, 255, 255, 0.04) 100%),radial-gradient(98% 96% at 2% 0%, rgba(255, 39, 39, 0.04) 0%, rgba(235, 0, 255, 0.01 96%)'), - (_b$2[SupportedChainId.ARBITRUM_ONE] = - 'radial-gradient(285% 8200% at 30% 50%, rgba(40, 160, 240, 0.01) 0%, rgba(219, 255, 0, 0) 100%),radial-gradient(75% 75% at 0% 0%, rgba(150, 190, 220, 0.05) 0%, rgba(33, 114, 229, 0.05) 100%), hsla(0, 0%, 100%, 0.05)'), - (_b$2[SupportedChainId.ARBITRUM_RINKEBY] = - 'radial-gradient(285% 8200% at 30% 50%, rgba(40, 160, 240, 0.05) 0%, rgba(219, 255, 0, 0) 100%),radial-gradient(75% 75% at 0% 0%, rgba(150, 190, 220, 0.05) 0%, rgba(33, 114, 229, 0.1) 100%), hsla(0, 0%, 100%, 0.05)'), - _b$2), - light: - ((_c$2 = {}), - (_c$2[SupportedChainId.POLYGON] = - 'radial-gradient(182.71% 205.59% at 2.81% 7.69%, rgba(130, 71, 229, 0.2) 0%, rgba(167, 202, 255, 0.2) 100%)'), - (_c$2[SupportedChainId.POLYGON_MUMBAI] = - 'radial-gradient(182.71% 205.59% at 2.81% 7.69%, rgba(130, 71, 229, 0.2) 0%, rgba(167, 202, 255, 0.2) 100%)'), - (_c$2[SupportedChainId.OPTIMISM] = - 'radial-gradient(92% 105% at 50% 7%, rgba(255, 58, 212, 0.04) 0%, rgba(255, 255, 255, 0.03) 100%),radial-gradient(100% 97% at 0% 12%, rgba(235, 0, 255, 0.1) 0%, rgba(243, 19, 19, 0.1) 100%), hsla(0, 0%, 100%, 0.1)'), - (_c$2[SupportedChainId.OPTIMISTIC_KOVAN] = - 'radial-gradient(92% 105% at 50% 7%, rgba(255, 58, 212, 0.04) 0%, rgba(255, 255, 255, 0.03) 100%),radial-gradient(100% 97% at 0% 12%, rgba(235, 0, 255, 0.1) 0%, rgba(243, 19, 19, 0.1) 100%), hsla(0, 0%, 100%, 0.1)'), - (_c$2[SupportedChainId.ARBITRUM_ONE] = - 'radial-gradient(285% 8200% at 30% 50%, rgba(40, 160, 240, 0.1) 0%, rgba(219, 255, 0, 0) 100%),radial-gradient(circle at top left, hsla(206, 50%, 75%, 0.01), hsla(215, 79%, 51%, 0.12)), hsla(0, 0%, 100%, 0.1)'), - (_c$2[SupportedChainId.ARBITRUM_RINKEBY] = - 'radial-gradient(285% 8200% at 30% 50%, rgba(40, 160, 240, 0.1) 0%, rgba(219, 255, 0, 0) 100%),radial-gradient(circle at top left, hsla(206, 50%, 75%, 0.01), hsla(215, 79%, 51%, 0.12)), hsla(0, 0%, 100%, 0.1)'), - _c$2), -} -var ContentWrapper$1 = styled__default['default'].div( - templateObject_5$g || - (templateObject_5$g = __makeTemplateObject( - [ - '\n background: ', - ';\n border-radius: 20px;\n display: flex;\n flex-direction: row;\n overflow: hidden;\n position: relative;\n width: 100%;\n\n :before {\n background-image: url(', - ");\n background-repeat: no-repeat;\n background-size: 300px;\n content: '';\n height: 300px;\n opacity: 0.1;\n position: absolute;\n transform: rotate(25deg) translate(-90px, -40px);\n width: 300px;\n z-index: -1;\n }\n", - ], - [ - '\n background: ', - ';\n border-radius: 20px;\n display: flex;\n flex-direction: row;\n overflow: hidden;\n position: relative;\n width: 100%;\n\n :before {\n background-image: url(', - ");\n background-repeat: no-repeat;\n background-size: 300px;\n content: '';\n height: 300px;\n opacity: 0.1;\n position: absolute;\n transform: rotate(25deg) translate(-90px, -40px);\n width: 300px;\n z-index: -1;\n }\n", - ] - )), - function (_a) { - var chainId = _a.chainId, - darkMode = _a.darkMode - return BG_COLORS_BY_DARK_MODE_AND_CHAIN_ID[darkMode ? 'dark' : 'light'][chainId] - }, - function (_a) { - var logoUrl = _a.logoUrl - return logoUrl - } -) -var Header$1 = styled__default['default'].h2( - templateObject_6$c || - (templateObject_6$c = __makeTemplateObject( - ['\n font-weight: 600;\n font-size: 16px;\n margin: 0;\n'], - ['\n font-weight: 600;\n font-size: 16px;\n margin: 0;\n'] - )) -) -var LinkOutToBridge = styled__default['default'](ExternalLink)( - templateObject_7$b || - (templateObject_7$b = __makeTemplateObject( - [ - '\n align-items: center;\n border-radius: 8px;\n color: white;\n display: flex;\n font-size: 16px;\n justify-content: space-between;\n padding: 6px 8px;\n margin-right: 12px;\n text-decoration: none !important;\n width: 100%;\n', - ], - [ - '\n align-items: center;\n border-radius: 8px;\n color: white;\n display: flex;\n font-size: 16px;\n justify-content: space-between;\n padding: 6px 8px;\n margin-right: 12px;\n text-decoration: none !important;\n width: 100%;\n', - ] - )) -) -var StyledArrowUpRight = styled__default['default'](reactFeather.ArrowUpRight)( - templateObject_8$8 || - (templateObject_8$8 = __makeTemplateObject( - ['\n margin-left: 12px;\n width: 24px;\n height: 24px;\n'], - ['\n margin-left: 12px;\n width: 24px;\n height: 24px;\n'] - )) -) -var TEXT_COLORS = - ((_d$1 = {}), - (_d$1[SupportedChainId.POLYGON] = 'rgba(130, 71, 229)'), - (_d$1[SupportedChainId.POLYGON_MUMBAI] = 'rgba(130, 71, 229)'), - (_d$1[SupportedChainId.OPTIMISM] = '#ff3856'), - (_d$1[SupportedChainId.OPTIMISTIC_KOVAN] = '#ff3856'), - (_d$1[SupportedChainId.ARBITRUM_ONE] = '#0490ed'), - (_d$1[SupportedChainId.ARBITRUM_RINKEBY] = '#0490ed'), - _d$1) -function shouldShowAlert(chainId) { - return Boolean(chainId && SHOULD_SHOW_ALERT[chainId]) -} -function NetworkAlert() { - var chainId = useActiveWeb3React().chainId - var _a = __read(useDarkModeManager(), 1), - darkMode = _a[0] - if (!shouldShowAlert(chainId)) { - return null - } - var _b = CHAIN_INFO[chainId], - label = _b.label, - logoUrl = _b.logoUrl, - bridge = _b.bridge - var textColor = TEXT_COLORS[chainId] - return bridge - ? jsxRuntime.jsx( - RootWrapper, - { - children: jsxRuntime.jsx( - ContentWrapper$1, - __assign( - { chainId, darkMode, logoUrl }, - { - children: jsxRuntime.jsxs( - LinkOutToBridge, - __assign( - { href: bridge }, - { - children: [ - jsxRuntime.jsxs( - BodyText, - __assign( - { color: textColor }, - { - children: [ - jsxRuntime.jsx(L2Icon, { src: logoUrl }, void 0), - jsxRuntime.jsxs( - AutoRow, - { - children: [ - jsxRuntime.jsx( - Header$1, - { - children: jsxRuntime.jsxs( - macro.Trans, - { children: [label, ' token bridge'] }, - void 0 - ), - }, - void 0 - ), - jsxRuntime.jsx( - HideSmall, - { - children: jsxRuntime.jsxs( - macro.Trans, - { children: ['Deposit tokens to the ', label, ' network.'] }, - void 0 - ), - }, - void 0 - ), - ], - }, - void 0 - ), - ], - } - ), - void 0 - ), - jsxRuntime.jsx(StyledArrowUpRight, { color: textColor }, void 0), - ], - } - ), - void 0 - ), - } - ), - void 0 - ), - }, - void 0 - ) - : null -} -var templateObject_1$T, - templateObject_2$B, - templateObject_3$u, - templateObject_4$j, - templateObject_5$g, - templateObject_6$c, - templateObject_7$b, - templateObject_8$8 - -/** - * @param open conditional to show content or hide - * @returns Wrapper to smoothly hide and expand content - */ -function AnimatedDropdown(_a) { - var open = _a.open, - children = _a.children - var _b = useResizeObserver__default['default'](), - ref = _b.ref, - height = _b.height - var props = reactSpring.useSpring({ - height: open ? (height !== null && height !== void 0 ? height : 0) : 0, - config: { - mass: 1.2, - tension: 300, - friction: 20, - clamp: true, - velocity: 0.01, - }, - }) - return jsxRuntime.jsx( - reactSpring.animated.div, - __assign( - { style: __assign(__assign({}, props), { overflow: 'hidden', width: '100%', willChange: 'height' }) }, - { children: jsxRuntime.jsx('div', __assign({ ref }, { children }), void 0) } - ), - void 0 - ) -} - -var Card = styled__default['default'](styledComponents.Box)( - templateObject_1$S || - (templateObject_1$S = __makeTemplateObject( - ['\n width: ', ';\n padding: ', ';\n border-radius: ', ';\n border: ', ';\n'], - ['\n width: ', ';\n padding: ', ';\n border-radius: ', ';\n border: ', ';\n'] - )), - function (_a) { - var width = _a.width - return width !== null && width !== void 0 ? width : '100%' - }, - function (_a) { - var padding = _a.padding - return padding !== null && padding !== void 0 ? padding : '1rem' - }, - function (_a) { - var $borderRadius = _a.$borderRadius - return $borderRadius !== null && $borderRadius !== void 0 ? $borderRadius : '16px' - }, - function (_a) { - var border = _a.border - return border - } -) -var LightCard = styled__default['default'](Card)( - templateObject_2$A || - (templateObject_2$A = __makeTemplateObject( - ['\n border: 1px solid ', ';\n background-color: ', ';\n'], - ['\n border: 1px solid ', ';\n background-color: ', ';\n'] - )), - function (_a) { - var theme = _a.theme - return theme.bg2 - }, - function (_a) { - var theme = _a.theme - return theme.bg1 - } -) -var LightGreyCard = styled__default['default'](Card)( - templateObject_3$t || - (templateObject_3$t = __makeTemplateObject(['\n background-color: ', ';\n'], ['\n background-color: ', ';\n'])), - function (_a) { - var theme = _a.theme - return theme.bg2 - } -) -var GreyCard = styled__default['default'](Card)( - templateObject_4$i || - (templateObject_4$i = __makeTemplateObject(['\n background-color: ', ';\n'], ['\n background-color: ', ';\n'])), - function (_a) { - var theme = _a.theme - return theme.bg3 - } -) -styled__default['default'](Card)( - templateObject_5$f || - (templateObject_5$f = __makeTemplateObject(['\n background-color: ', ';\n'], ['\n background-color: ', ';\n'])), - function (_a) { - var theme = _a.theme - return theme.bg2 - } -) -styled__default['default'](Card)( - templateObject_6$b || - (templateObject_6$b = __makeTemplateObject(['\n background-color: ', ';\n'], ['\n background-color: ', ';\n'])), - function (_a) { - var theme = _a.theme - return theme.bg0 - } -) -var OutlineCard = styled__default['default'](Card)( - templateObject_7$a || - (templateObject_7$a = __makeTemplateObject(['\n border: 1px solid ', ';\n'], ['\n border: 1px solid ', ';\n'])), - function (_a) { - var theme = _a.theme - return theme.bg3 - } -) -styled__default['default'](Card)( - templateObject_8$7 || - (templateObject_8$7 = __makeTemplateObject( - ['\n background-color: rgba(243, 132, 30, 0.05);\n color: ', ';\n font-weight: 500;\n'], - ['\n background-color: rgba(243, 132, 30, 0.05);\n color: ', ';\n font-weight: 500;\n'] - )), - function (_a) { - var theme = _a.theme - return theme.yellow3 - } -) -styled__default['default'](Card)( - templateObject_9$7 || - (templateObject_9$7 = __makeTemplateObject( - ['\n background-color: ', ';\n color: ', ';\n border-radius: 12px;\n'], - ['\n background-color: ', ';\n color: ', ';\n border-radius: 12px;\n'] - )), - function (_a) { - var theme = _a.theme - return theme.primary5 - }, - function (_a) { - var theme = _a.theme - return theme.blue2 - } -) -var templateObject_1$S, - templateObject_2$A, - templateObject_3$t, - templateObject_4$i, - templateObject_5$f, - templateObject_6$b, - templateObject_7$a, - templateObject_8$7, - templateObject_9$7 - -var Column = styled__default['default'].div( - templateObject_1$R || - (templateObject_1$R = __makeTemplateObject( - ['\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n'], - ['\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n'] - )) -) -var ColumnCenter = styled__default['default'](Column)( - templateObject_2$z || - (templateObject_2$z = __makeTemplateObject( - ['\n width: 100%;\n align-items: center;\n'], - ['\n width: 100%;\n align-items: center;\n'] - )) -) -var AutoColumn = styled__default['default'].div( - templateObject_3$s || - (templateObject_3$s = __makeTemplateObject( - ['\n display: grid;\n grid-auto-rows: auto;\n grid-row-gap: ', ';\n justify-items: ', ';\n'], - ['\n display: grid;\n grid-auto-rows: auto;\n grid-row-gap: ', ';\n justify-items: ', ';\n'] - )), - function (_a) { - var gap = _a.gap - return (gap === 'sm' && '8px') || (gap === 'md' && '12px') || (gap === 'lg' && '24px') || gap - }, - function (_a) { - var justify = _a.justify - return justify && justify - } -) -var templateObject_1$R, templateObject_2$z, templateObject_3$s - -var loadingAnimation = styled.keyframes( - templateObject_1$Q || - (templateObject_1$Q = __makeTemplateObject( - ['\n 0% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0% 50%;\n }\n'], - ['\n 0% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0% 50%;\n }\n'] - )) -) -var LoadingRows = styled__default['default'].div( - templateObject_2$y || - (templateObject_2$y = __makeTemplateObject( - [ - '\n display: grid;\n\n & > div {\n animation: ', - ' 1.5s infinite;\n animation-fill-mode: both;\n background: linear-gradient(\n to left,\n ', - ' 25%,\n ', - ' 50%,\n ', - ' 75%\n );\n background-size: 400%;\n border-radius: 12px;\n height: 2.4em;\n will-change: background-position;\n }\n', - ], - [ - '\n display: grid;\n\n & > div {\n animation: ', - ' 1.5s infinite;\n animation-fill-mode: both;\n background: linear-gradient(\n to left,\n ', - ' 25%,\n ', - ' 50%,\n ', - ' 75%\n );\n background-size: 400%;\n border-radius: 12px;\n height: 2.4em;\n will-change: background-position;\n }\n', - ] - )), - loadingAnimation, - function (_a) { - var theme = _a.theme - return theme.bg1 - }, - function (_a) { - var theme = _a.theme - return theme.bg2 - }, - function (_a) { - var theme = _a.theme - return theme.bg1 - } -) -var loadingOpacityMixin = styled.css( - templateObject_3$r || - (templateObject_3$r = __makeTemplateObject( - ['\n filter: ', ';\n opacity: ', ';\n transition: opacity 0.2s ease-in-out;\n'], - ['\n filter: ', ';\n opacity: ', ';\n transition: opacity 0.2s ease-in-out;\n'] - )), - function (_a) { - var $loading = _a.$loading - return $loading ? 'grayscale(1)' : 'none' - }, - function (_a) { - var $loading = _a.$loading - return $loading ? '0.4' : '1' - } -) -var LoadingOpacityContainer = styled__default['default'].div( - templateObject_4$h || (templateObject_4$h = __makeTemplateObject(['\n ', '\n'], ['\n ', '\n'])), - loadingOpacityMixin -) -var templateObject_1$Q, templateObject_2$y, templateObject_3$r, templateObject_4$h - -/** - * Invokes callback repeatedly over an interval defined by the delay - * @param callback - * @param delay if null, the callback will not be invoked - * @param leading if true, the callback will be invoked immediately (on the leading edge); otherwise, it will be invoked after delay - */ -function useInterval(callback, delay, leading) { - if (leading === void 0) { - leading = true - } - var savedCallback = React.useRef() - // Remember the latest callback. - React.useEffect( - function () { - savedCallback.current = callback - }, - [callback] - ) - // Set up the interval. - React.useEffect( - function () { - function tick() { - var current = savedCallback.current - current && current() - } - if (delay !== null) { - if (leading) tick() - var id_1 = setInterval(tick, delay) - return function () { - return clearInterval(id_1) - } - } - return - }, - [delay, leading] - ) -} - -var PopoverContainer$1 = styled__default['default'].div( - templateObject_1$P || - (templateObject_1$P = __makeTemplateObject( - [ - '\n z-index: 9999;\n visibility: ', - ';\n opacity: ', - ';\n transition: visibility 150ms linear, opacity 150ms linear;\n color: ', - ';\n', - ], - [ - '\n z-index: 9999;\n visibility: ', - ';\n opacity: ', - ';\n transition: visibility 150ms linear, opacity 150ms linear;\n color: ', - ';\n', - ] - )), - function (props) { - return props.show ? 'visible' : 'hidden' - }, - function (props) { - return props.show ? 1 : 0 - }, - function (_a) { - var theme = _a.theme - return theme.text2 - } -) -var ReferenceElement = styled__default['default'].div( - templateObject_2$x || - (templateObject_2$x = __makeTemplateObject(['\n display: inline-block;\n'], ['\n display: inline-block;\n'])) -) -var Arrow = styled__default['default'].div( - templateObject_3$q || - (templateObject_3$q = __makeTemplateObject( - [ - "\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 ", - ';\n transform: rotate(45deg);\n background: ', - ';\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 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 ", - ';\n transform: rotate(45deg);\n background: ', - ';\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', - ] - )), - function (_a) { - var theme = _a.theme - return theme.bg2 - }, - function (_a) { - var theme = _a.theme - return theme.bg0 - } -) -function Popover(_a) { - var _b, _c - var content = _a.content, - show = _a.show, - children = _a.children, - _d = _a.placement, - placement = _d === void 0 ? 'auto' : _d - var _e = __read(React.useState(null), 2), - referenceElement = _e[0], - setReferenceElement = _e[1] - var _f = __read(React.useState(null), 2), - popperElement = _f[0], - setPopperElement = _f[1] - var _g = __read(React.useState(null), 2), - arrowElement = _g[0], - setArrowElement = _g[1] - var options = React.useMemo( - function () { - return { - placement, - strategy: 'fixed', - modifiers: [ - { name: 'offset', options: { offset: [8, 8] } }, - { name: 'arrow', options: { element: arrowElement } }, - { name: 'preventOverflow', options: { padding: 8 } }, - ], - } - }, - [arrowElement, placement] - ) - var _h = reactPopper.usePopper(referenceElement, popperElement, options), - styles = _h.styles, - update = _h.update, - attributes = _h.attributes - var updateCallback = React.useCallback( - function () { - update && update() - }, - [update] - ) - useInterval(updateCallback, show ? 100 : null) - return jsxRuntime.jsxs( - jsxRuntime.Fragment, - { - children: [ - jsxRuntime.jsx(ReferenceElement, __assign({ ref: setReferenceElement }, { children }), void 0), - jsxRuntime.jsx( - Portal__default['default'], - { - children: jsxRuntime.jsxs( - PopoverContainer$1, - __assign({ show, ref: setPopperElement, style: styles.popper }, attributes.popper, { - children: [ - content, - jsxRuntime.jsx( - Arrow, - __assign( - { - className: - 'arrow-' + - ((_c = - (_b = attributes.popper) === null || _b === void 0 - ? void 0 - : _b['data-popper-placement']) !== null && _c !== void 0 - ? _c - : ''), - ref: setArrowElement, - style: styles.arrow, - }, - attributes.arrow - ), - void 0 - ), - ], - }), - void 0 - ), - }, - void 0 - ), - ], - }, - void 0 - ) -} -var templateObject_1$P, templateObject_2$x, templateObject_3$q - -var TooltipContainer = styled__default['default'].div( - templateObject_1$O || - (templateObject_1$O = __makeTemplateObject( - [ - '\n max-width: 256px;\n padding: 0.6rem 1rem;\n font-weight: 400;\n word-break: break-word;\n\n background: ', - ';\n border-radius: 12px;\n border: 1px solid ', - ';\n box-shadow: 0 4px 8px 0 ', - ';\n', - ], - [ - '\n max-width: 256px;\n padding: 0.6rem 1rem;\n font-weight: 400;\n word-break: break-word;\n\n background: ', - ';\n border-radius: 12px;\n border: 1px solid ', - ';\n box-shadow: 0 4px 8px 0 ', - ';\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.bg0 - }, - function (_a) { - var theme = _a.theme - return theme.bg2 - }, - function (_a) { - var theme = _a.theme - return polished.transparentize(0.9, theme.shadow1) - } -) -function Tooltip(_a) { - var text = _a.text, - rest = __rest(_a, ['text']) - return jsxRuntime.jsx( - Popover, - __assign({ content: jsxRuntime.jsx(TooltipContainer, { children: text }, void 0) }, rest), - void 0 - ) -} -function TooltipContent(_a) { - var content = _a.content, - _b = _a.wrap, - wrap = _b === void 0 ? false : _b, - rest = __rest(_a, ['content', 'wrap']) - return jsxRuntime.jsx( - Popover, - __assign({ content: wrap ? jsxRuntime.jsx(TooltipContainer, { children: content }, void 0) : content }, rest), - void 0 - ) -} -function MouseoverTooltip(_a) { - var children = _a.children, - rest = __rest(_a, ['children']) - var _b = __read(React.useState(false), 2), - show = _b[0], - setShow = _b[1] - var open = React.useCallback( - function () { - return setShow(true) - }, - [setShow] - ) - var close = React.useCallback( - function () { - return setShow(false) - }, - [setShow] - ) - return jsxRuntime.jsx( - Tooltip, - __assign( - {}, - rest, - { show }, - { - children: jsxRuntime.jsx('div', __assign({ onMouseEnter: open, onMouseLeave: close }, { children }), void 0), - } - ), - void 0 - ) -} -function MouseoverTooltipContent(_a) { - var content = _a.content, - children = _a.children, - _b = _a.onOpen, - openCallback = _b === void 0 ? undefined : _b, - disableHover = _a.disableHover, - rest = __rest(_a, ['content', 'children', 'onOpen', 'disableHover']) - var _c = __read(React.useState(false), 2), - show = _c[0], - setShow = _c[1] - var open = React.useCallback( - function () { - setShow(true) - openCallback === null || openCallback === void 0 ? void 0 : openCallback() - }, - [openCallback] - ) - var close = React.useCallback( - function () { - return setShow(false) - }, - [setShow] - ) - return jsxRuntime.jsx( - TooltipContent, - __assign( - {}, - rest, - { show, content: disableHover ? null : content }, - { - children: jsxRuntime.jsx( - 'div', - __assign( - { - style: { display: 'inline-block', lineHeight: 0, padding: '0.25rem' }, - onMouseEnter: open, - onMouseLeave: close, - }, - { children } - ), - void 0 - ), - } - ), - void 0 - ) -} -var templateObject_1$O - -var THIRTY_BIPS_FEE = new sdkCore.Percent(JSBI__default['default'].BigInt(30), JSBI__default['default'].BigInt(10000)) -var INPUT_FRACTION_AFTER_FEE = ONE_HUNDRED_PERCENT.subtract(THIRTY_BIPS_FEE) -// computes realized lp fee as a percent -function computeRealizedLPFeePercent(trade) { - var e_1, _a - var percent - // Since routes are either all v2 or all v3 right now, calculate separately - if (trade.swaps[0].route.pools instanceof v2Sdk.Pair) { - // for each hop in our trade, take away the x*y=k price impact from 0.3% fees - // e.g. for 3 tokens/2 hops: 1 - ((1 - .03) * (1-.03)) - percent = ONE_HUNDRED_PERCENT.subtract( - trade.swaps.reduce(function (currentFee) { - return currentFee.multiply(INPUT_FRACTION_AFTER_FEE) - }, ONE_HUNDRED_PERCENT) - ) - } else { - percent = ZERO_PERCENT - try { - for (var _b = __values(trade.swaps), _c = _b.next(); !_c.done; _c = _b.next()) { - var swap = _c.value - var _d = swap.inputAmount.divide(trade.inputAmount), - numerator = _d.numerator, - denominator = _d.denominator - var overallPercent = new sdkCore.Percent(numerator, denominator) - var routeRealizedLPFeePercent = overallPercent.multiply( - ONE_HUNDRED_PERCENT.subtract( - swap.route.pools.reduce(function (currentFee, pool) { - var fee = - pool instanceof v2Sdk.Pair - ? // not currently possible given protocol check above, but not fatal - v3Sdk.FeeAmount.MEDIUM - : pool.fee - return currentFee.multiply(ONE_HUNDRED_PERCENT.subtract(new sdkCore.Fraction(fee, 1000000))) - }, ONE_HUNDRED_PERCENT) - ) - ) - percent = percent.add(routeRealizedLPFeePercent) - } - } catch (e_1_1) { - e_1 = { error: e_1_1 } - } finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b) - } finally { - if (e_1) throw e_1.error - } - } - } - return new sdkCore.Percent(percent.numerator, percent.denominator) -} -var IMPACT_TIERS = [ - BLOCKED_PRICE_IMPACT_NON_EXPERT, - ALLOWED_PRICE_IMPACT_HIGH, - ALLOWED_PRICE_IMPACT_MEDIUM, - ALLOWED_PRICE_IMPACT_LOW, -] -function warningSeverity(priceImpact) { - var e_2, _a - if (!priceImpact) return 4 - var impact = IMPACT_TIERS.length - try { - for ( - var IMPACT_TIERS_1 = __values(IMPACT_TIERS), IMPACT_TIERS_1_1 = IMPACT_TIERS_1.next(); - !IMPACT_TIERS_1_1.done; - IMPACT_TIERS_1_1 = IMPACT_TIERS_1.next() - ) { - var impactLevel = IMPACT_TIERS_1_1.value - if (impactLevel.lessThan(priceImpact)) return impact - impact-- - } - } catch (e_2_1) { - e_2 = { error: e_2_1 } - } finally { - try { - if (IMPACT_TIERS_1_1 && !IMPACT_TIERS_1_1.done && (_a = IMPACT_TIERS_1.return)) _a.call(IMPACT_TIERS_1) - } finally { - if (e_2) throw e_2.error - } - } - return 0 -} - -/** - * Parses a CurrencyAmount from the passed string. - * Returns the CurrencyAmount, or undefined if parsing fails. - */ -function tryParseCurrencyAmount(value, currency) { - if (!value || !currency) { - return undefined - } - try { - var typedValueParsed = units.parseUnits(value, currency.decimals).toString() - if (typedValueParsed !== '0') { - return sdkCore.CurrencyAmount.fromRawAmount(currency, JSBI__default['default'].BigInt(typedValueParsed)) - } - } catch (error) { - // fails if the user specifies too many decimal places of precision (or maybe exceed max uint?) - console.debug('Failed to parse input amount: "' + value + '"', error) - } - return undefined -} - -// returns whether tradeB is better than tradeA by at least a threshold percentage amount -// only used by v2 hooks -function isTradeBetter(tradeA, tradeB, minimumDelta) { - if (minimumDelta === void 0) { - minimumDelta = ZERO_PERCENT - } - if (tradeA && !tradeB) return false - if (tradeB && !tradeA) return true - if (!tradeA || !tradeB) return undefined - if ( - tradeA.tradeType !== tradeB.tradeType || - !tradeA.inputAmount.currency.equals(tradeB.inputAmount.currency) || - !tradeA.outputAmount.currency.equals(tradeB.outputAmount.currency) - ) { - throw new Error('Comparing incomparable trades') - } - if (minimumDelta.equalTo(ZERO_PERCENT)) { - return tradeA.executionPrice.lessThan(tradeB.executionPrice) - } else { - return tradeA.executionPrice.asFraction - .multiply(minimumDelta.add(ONE_HUNDRED_PERCENT)) - .lessThan(tradeB.executionPrice) - } -} - -function useAllCurrencyCombinations(currencyA, currencyB) { - var chainId = currencyA === null || currencyA === void 0 ? void 0 : currencyA.chainId - var _a = __read( - chainId - ? [ - currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped, - currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped, - ] - : [undefined, undefined], - 2 - ), - tokenA = _a[0], - tokenB = _a[1] - var bases = React.useMemo( - function () { - var _a, _b, _c, _d, _e - if (!chainId || chainId !== (tokenB === null || tokenB === void 0 ? void 0 : tokenB.chainId)) return [] - var common = (_a = BASES_TO_CHECK_TRADES_AGAINST[chainId]) !== null && _a !== void 0 ? _a : [] - var additionalA = tokenA - ? (_c = (_b = ADDITIONAL_BASES[chainId]) === null || _b === void 0 ? void 0 : _b[tokenA.address]) !== null && - _c !== void 0 - ? _c - : [] - : [] - var additionalB = tokenB - ? (_e = (_d = ADDITIONAL_BASES[chainId]) === null || _d === void 0 ? void 0 : _d[tokenB.address]) !== null && - _e !== void 0 - ? _e - : [] - : [] - return __spreadArray( - __spreadArray(__spreadArray([], __read(common), false), __read(additionalA), false), - __read(additionalB), - false - ) - }, - [chainId, tokenA, tokenB] - ) - var basePairs = React.useMemo( - function () { - return ( - bases - .flatMap(function (base) { - return bases.map(function (otherBase) { - return [base, otherBase] - }) - }) - // though redundant with the first filter below, that expression runs more often, so this is probably worthwhile - .filter(function (_a) { - var _b = __read(_a, 2), - t0 = _b[0], - t1 = _b[1] - return !t0.equals(t1) - }) - ) - }, - [bases] - ) - return React.useMemo( - function () { - return tokenA && tokenB - ? __spreadArray( - __spreadArray( - __spreadArray( - [ - // the direct pair - [tokenA, tokenB], - ], - __read( - bases.map(function (base) { - return [tokenA, base] - }) - ), - false - ), - __read( - bases.map(function (base) { - return [tokenB, base] - }) - ), - false - ), - __read(basePairs), - false - ) - .filter(function (_a) { - var _b = __read(_a, 2), - t0 = _b[0], - t1 = _b[1] - return !t0.equals(t1) - }) - // filter out duplicate pairs - .filter(function (_a, i, otherPairs) { - var _b = __read(_a, 2), - t0 = _b[0], - t1 = _b[1] - // find the first index in the array at which there are the same 2 tokens as the current - var firstIndexInOtherPairs = otherPairs.findIndex(function (_a) { - var _b = __read(_a, 2), - t0Other = _b[0], - t1Other = _b[1] - return (t0.equals(t0Other) && t1.equals(t1Other)) || (t0.equals(t1Other) && t1.equals(t0Other)) - }) - // only accept the first occurrence of the same 2 tokens - return firstIndexInOtherPairs === i - }) - // optionally filter out some pairs for tokens with custom bases defined - .filter(function (_a) { - var _b = __read(_a, 2), - tokenA = _b[0], - tokenB = _b[1] - if (!chainId) return true - var customBases = CUSTOM_BASES[chainId] - var customBasesA = customBases === null || customBases === void 0 ? void 0 : customBases[tokenA.address] - var customBasesB = customBases === null || customBases === void 0 ? void 0 : customBases[tokenB.address] - if (!customBasesA && !customBasesB) return true - if ( - customBasesA && - !customBasesA.find(function (base) { - return tokenB.equals(base) - }) - ) - return false - if ( - customBasesB && - !customBasesB.find(function (base) { - return tokenA.equals(base) - }) - ) - return false - return true - }) - : [] - }, - [tokenA, tokenB, bases, basePairs, chainId] - ) -} - -var PAIR_INTERFACE = new abi$6.Interface(abi$4) -var PairState -;(function (PairState) { - PairState[(PairState['LOADING'] = 0)] = 'LOADING' - PairState[(PairState['NOT_EXISTS'] = 1)] = 'NOT_EXISTS' - PairState[(PairState['EXISTS'] = 2)] = 'EXISTS' - PairState[(PairState['INVALID'] = 3)] = 'INVALID' -})(PairState || (PairState = {})) -function useV2Pairs(currencies) { - var tokens = React.useMemo( - function () { - return currencies.map(function (_a) { - var _b = __read(_a, 2), - currencyA = _b[0], - currencyB = _b[1] - return [ - currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped, - currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped, - ] - }) - }, - [currencies] - ) - var pairAddresses = React.useMemo( - function () { - return tokens.map(function (_a) { - var _b = __read(_a, 2), - tokenA = _b[0], - tokenB = _b[1] - return tokenA && - tokenB && - tokenA.chainId === tokenB.chainId && - !tokenA.equals(tokenB) && - V2_FACTORY_ADDRESSES[tokenA.chainId] - ? v2Sdk.computePairAddress({ - factoryAddress: V2_FACTORY_ADDRESSES[tokenA.chainId], - tokenA, - tokenB, - }) - : undefined - }) - }, - [tokens] - ) - var results = useMultipleContractSingleData(pairAddresses, PAIR_INTERFACE, 'getReserves') - return React.useMemo( - function () { - return results.map(function (result, i) { - var reserves = result.result, - loading = result.loading - var tokenA = tokens[i][0] - var tokenB = tokens[i][1] - if (loading) return [PairState.LOADING, null] - if (!tokenA || !tokenB || tokenA.equals(tokenB)) return [PairState.INVALID, null] - if (!reserves) return [PairState.NOT_EXISTS, null] - var reserve0 = reserves.reserve0, - reserve1 = reserves.reserve1 - var _a = __read(tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA], 2), - token0 = _a[0], - token1 = _a[1] - return [ - PairState.EXISTS, - new v2Sdk.Pair( - sdkCore.CurrencyAmount.fromRawAmount(token0, reserve0.toString()), - sdkCore.CurrencyAmount.fromRawAmount(token1, reserve1.toString()) - ), - ] - }) - }, - [results, tokens] - ) -} - -function useAllCommonPairs(currencyA, currencyB) { - var allCurrencyCombinations = useAllCurrencyCombinations(currencyA, currencyB) - var allPairs = useV2Pairs(allCurrencyCombinations) - return React.useMemo( - function () { - return Object.values( - allPairs - // filter out invalid pairs - .filter(function (result) { - return Boolean(result[0] === PairState.EXISTS && result[1]) - }) - .map(function (_a) { - var _b = __read(_a, 2), - pair = _b[1] - return pair - }) - ) - }, - [allPairs] - ) -} -var MAX_HOPS = 3 -/** - * Returns the best v2 trade for a desired swap - * @param tradeType whether the swap is an exact in/out - * @param amountSpecified the exact amount to swap in/out - * @param otherCurrency the desired output/payment currency - */ -function useBestV2Trade(tradeType, amountSpecified, otherCurrency, _a) { - var _b = _a === void 0 ? {} : _a, - _c = _b.maxHops, - maxHops = _c === void 0 ? MAX_HOPS : _c - var _d = __read( - React.useMemo( - function () { - return tradeType === sdkCore.TradeType.EXACT_INPUT - ? [ - amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, - otherCurrency, - ] - : [ - otherCurrency, - amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, - ] - }, - [tradeType, amountSpecified, otherCurrency] - ), - 2 - ), - currencyIn = _d[0], - currencyOut = _d[1] - var allowedPairs = useAllCommonPairs(currencyIn, currencyOut) - return React.useMemo( - function () { - var _a, _b, _c, _d - if (amountSpecified && currencyIn && currencyOut && allowedPairs.length > 0) { - if (maxHops === 1) { - var options = { maxHops: 1, maxNumResults: 1 } - if (tradeType === sdkCore.TradeType.EXACT_INPUT) { - var amountIn = amountSpecified - return (_a = v2Sdk.Trade.bestTradeExactIn(allowedPairs, amountIn, currencyOut, options)[0]) !== null && - _a !== void 0 - ? _a - : null - } else { - var amountOut = amountSpecified - return (_b = v2Sdk.Trade.bestTradeExactOut(allowedPairs, currencyIn, amountOut, options)[0]) !== null && - _b !== void 0 - ? _b - : null - } - } - // search through trades with varying hops, find best trade out of them - var bestTradeSoFar = null - for (var i = 1; i <= maxHops; i++) { - var options = { maxHops: i, maxNumResults: 1 } - var currentTrade = void 0 - if (tradeType === sdkCore.TradeType.EXACT_INPUT) { - var amountIn = amountSpecified - currentTrade = - (_c = v2Sdk.Trade.bestTradeExactIn(allowedPairs, amountIn, currencyOut, options)[0]) !== null && - _c !== void 0 - ? _c - : null - } else { - var amountOut = amountSpecified - currentTrade = - (_d = v2Sdk.Trade.bestTradeExactOut(allowedPairs, currencyIn, amountOut, options)[0]) !== null && - _d !== void 0 - ? _d - : null - } - // if current trade is best yet, save it - if (isTradeBetter(bestTradeSoFar, currentTrade, BETTER_TRADE_LESS_HOPS_THRESHOLD)) { - bestTradeSoFar = currentTrade - } - } - return bestTradeSoFar - } - return null - }, - [tradeType, amountSpecified, currencyIn, currencyOut, allowedPairs, maxHops] - ) -} - -var TradeState -;(function (TradeState) { - TradeState[(TradeState['LOADING'] = 0)] = 'LOADING' - TradeState[(TradeState['INVALID'] = 1)] = 'INVALID' - TradeState[(TradeState['NO_ROUTE_FOUND'] = 2)] = 'NO_ROUTE_FOUND' - TradeState[(TradeState['VALID'] = 3)] = 'VALID' - TradeState[(TradeState['SYNCING'] = 4)] = 'SYNCING' -})(TradeState || (TradeState = {})) -var InterfaceTrade = /** @class */ (function (_super) { - __extends(InterfaceTrade, _super) - function InterfaceTrade(_a) { - var gasUseEstimateUSD = _a.gasUseEstimateUSD, - routes = __rest(_a, ['gasUseEstimateUSD']) - var _this = _super.call(this, routes) || this - _this.gasUseEstimateUSD = gasUseEstimateUSD - return _this - } - return InterfaceTrade -})(routerSdk.Trade) - -var abi = [ - { - inputs: [], - name: 'feeGrowthGlobal0X128', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'feeGrowthGlobal1X128', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'liquidity', - outputs: [ - { - internalType: 'uint128', - name: '', - type: 'uint128', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'index', - type: 'uint256', - }, - ], - name: 'observations', - outputs: [ - { - internalType: 'uint32', - name: 'blockTimestamp', - type: 'uint32', - }, - { - internalType: 'int56', - name: 'tickCumulative', - type: 'int56', - }, - { - internalType: 'uint160', - name: 'secondsPerLiquidityCumulativeX128', - type: 'uint160', - }, - { - internalType: 'bool', - name: 'initialized', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes32', - name: 'key', - type: 'bytes32', - }, - ], - name: 'positions', - outputs: [ - { - internalType: 'uint128', - name: '_liquidity', - type: 'uint128', - }, - { - internalType: 'uint256', - name: 'feeGrowthInside0LastX128', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'feeGrowthInside1LastX128', - type: 'uint256', - }, - { - internalType: 'uint128', - name: 'tokensOwed0', - type: 'uint128', - }, - { - internalType: 'uint128', - name: 'tokensOwed1', - type: 'uint128', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'protocolFees', - outputs: [ - { - internalType: 'uint128', - name: 'token0', - type: 'uint128', - }, - { - internalType: 'uint128', - name: 'token1', - type: 'uint128', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'slot0', - outputs: [ - { - internalType: 'uint160', - name: 'sqrtPriceX96', - type: 'uint160', - }, - { - internalType: 'int24', - name: 'tick', - type: 'int24', - }, - { - internalType: 'uint16', - name: 'observationIndex', - type: 'uint16', - }, - { - internalType: 'uint16', - name: 'observationCardinality', - type: 'uint16', - }, - { - internalType: 'uint16', - name: 'observationCardinalityNext', - type: 'uint16', - }, - { - internalType: 'uint8', - name: 'feeProtocol', - type: 'uint8', - }, - { - internalType: 'bool', - name: 'unlocked', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'int16', - name: 'wordPosition', - type: 'int16', - }, - ], - name: 'tickBitmap', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'int24', - name: 'tick', - type: 'int24', - }, - ], - name: 'ticks', - outputs: [ - { - internalType: 'uint128', - name: 'liquidityGross', - type: 'uint128', - }, - { - internalType: 'int128', - name: 'liquidityNet', - type: 'int128', - }, - { - internalType: 'uint256', - name: 'feeGrowthOutside0X128', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'feeGrowthOutside1X128', - type: 'uint256', - }, - { - internalType: 'int56', - name: 'tickCumulativeOutside', - type: 'int56', - }, - { - internalType: 'uint160', - name: 'secondsPerLiquidityOutsideX128', - type: 'uint160', - }, - { - internalType: 'uint32', - name: 'secondsOutside', - type: 'uint32', - }, - { - internalType: 'bool', - name: 'initialized', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, -] - -var POOL_STATE_INTERFACE = new abi$6.Interface(abi) -var PoolState -;(function (PoolState) { - PoolState[(PoolState['LOADING'] = 0)] = 'LOADING' - PoolState[(PoolState['NOT_EXISTS'] = 1)] = 'NOT_EXISTS' - PoolState[(PoolState['EXISTS'] = 2)] = 'EXISTS' - PoolState[(PoolState['INVALID'] = 3)] = 'INVALID' -})(PoolState || (PoolState = {})) -function usePools(poolKeys) { - var chainId = useActiveWeb3React().chainId - var transformed = React.useMemo( - function () { - return poolKeys.map(function (_a) { - var _b = __read(_a, 3), - currencyA = _b[0], - currencyB = _b[1], - feeAmount = _b[2] - if (!chainId || !currencyA || !currencyB || !feeAmount) return null - var tokenA = currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped - var tokenB = currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped - if (!tokenA || !tokenB || tokenA.equals(tokenB)) return null - var _c = __read(tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA], 2), - token0 = _c[0], - token1 = _c[1] - return [token0, token1, feeAmount] - }) - }, - [chainId, poolKeys] - ) - var poolAddresses = React.useMemo( - function () { - var v3CoreFactoryAddress = chainId && V3_CORE_FACTORY_ADDRESSES[chainId] - return transformed.map(function (value) { - if (!v3CoreFactoryAddress || !value) return undefined - return v3Sdk.computePoolAddress({ - factoryAddress: v3CoreFactoryAddress, - tokenA: value[0], - tokenB: value[1], - fee: value[2], - }) - }) - }, - [chainId, transformed] - ) - var slot0s = useMultipleContractSingleData(poolAddresses, POOL_STATE_INTERFACE, 'slot0') - var liquidities = useMultipleContractSingleData(poolAddresses, POOL_STATE_INTERFACE, 'liquidity') - return React.useMemo( - function () { - return poolKeys.map(function (_key, index) { - var _a - var _b = __read((_a = transformed[index]) !== null && _a !== void 0 ? _a : [], 3), - token0 = _b[0], - token1 = _b[1], - fee = _b[2] - if (!token0 || !token1 || !fee) return [PoolState.INVALID, null] - var _c = slot0s[index], - slot0 = _c.result, - slot0Loading = _c.loading, - slot0Valid = _c.valid - var _d = liquidities[index], - liquidity = _d.result, - liquidityLoading = _d.loading, - liquidityValid = _d.valid - if (!slot0Valid || !liquidityValid) return [PoolState.INVALID, null] - if (slot0Loading || liquidityLoading) return [PoolState.LOADING, null] - if (!slot0 || !liquidity) return [PoolState.NOT_EXISTS, null] - if (!slot0.sqrtPriceX96 || slot0.sqrtPriceX96.eq(0)) return [PoolState.NOT_EXISTS, null] - try { - return [PoolState.EXISTS, new v3Sdk.Pool(token0, token1, fee, slot0.sqrtPriceX96, liquidity[0], slot0.tick)] - } catch (error) { - console.error('Error when constructing the pool', error) - return [PoolState.NOT_EXISTS, null] - } - }) - }, - [liquidities, poolKeys, slot0s, transformed] - ) -} - -/** - * Returns all the existing pools that should be considered for swapping between an input currency and an output currency - * @param currencyIn the input currency - * @param currencyOut the output currency - */ -function useV3SwapPools(currencyIn, currencyOut) { - var chainId = useActiveWeb3React().chainId - var allCurrencyCombinations = useAllCurrencyCombinations(currencyIn, currencyOut) - var allCurrencyCombinationsWithAllFees = React.useMemo( - function () { - return allCurrencyCombinations.reduce(function (list, _a) { - var _b = __read(_a, 2), - tokenA = _b[0], - tokenB = _b[1] - return chainId === SupportedChainId.MAINNET - ? list.concat([ - [tokenA, tokenB, v3Sdk.FeeAmount.LOW], - [tokenA, tokenB, v3Sdk.FeeAmount.MEDIUM], - [tokenA, tokenB, v3Sdk.FeeAmount.HIGH], - ]) - : list.concat([ - [tokenA, tokenB, v3Sdk.FeeAmount.LOWEST], - [tokenA, tokenB, v3Sdk.FeeAmount.LOW], - [tokenA, tokenB, v3Sdk.FeeAmount.MEDIUM], - [tokenA, tokenB, v3Sdk.FeeAmount.HIGH], - ]) - }, []) - }, - [allCurrencyCombinations, chainId] - ) - var pools = usePools(allCurrencyCombinationsWithAllFees) - return React.useMemo( - function () { - return { - pools: pools - .filter(function (tuple) { - return tuple[0] === PoolState.EXISTS && tuple[1] !== null - }) - .map(function (_a) { - var _b = __read(_a, 2), - pool = _b[1] - return pool - }), - loading: pools.some(function (_a) { - var _b = __read(_a, 1), - state = _b[0] - return state === PoolState.LOADING - }), - } - }, - [pools] - ) -} ->>>>>>> ee1338c81a2c73d9938e225b8b96abd2fc298260 - -/** - * Returns true if poolA is equivalent to poolB - * @param poolA one of the two pools - * @param poolB the other pool - */ -function poolEquals(poolA, poolB) { - return ( - poolA === poolB || - (poolA.token0.equals(poolB.token0) && poolA.token1.equals(poolB.token1) && poolA.fee === poolB.fee) - ) -} -function computeAllRoutes(currencyIn, currencyOut, pools, chainId, currentPath, allPaths, startCurrencyIn, maxHops) { - var e_1, _a - if (currentPath === void 0) { - currentPath = [] - } - if (allPaths === void 0) { - allPaths = [] - } - if (startCurrencyIn === void 0) { - startCurrencyIn = currencyIn - } - if (maxHops === void 0) { - maxHops = 2 - } - var tokenIn = currencyIn === null || currencyIn === void 0 ? void 0 : currencyIn.wrapped - var tokenOut = currencyOut === null || currencyOut === void 0 ? void 0 : currencyOut.wrapped - if (!tokenIn || !tokenOut) throw new Error('Missing tokenIn/tokenOut') - var _loop_1 = function (pool) { - if ( - !pool.involvesToken(tokenIn) || - currentPath.find(function (pathPool) { - return poolEquals(pool, pathPool) - }) - ) - return 'continue' - var outputToken = pool.token0.equals(tokenIn) ? pool.token1 : pool.token0 - if (outputToken.equals(tokenOut)) { - allPaths.push( - new v3Sdk.Route( - __spreadArray(__spreadArray([], __read(currentPath), false), [pool], false), - startCurrencyIn, - currencyOut - ) - ) - } else if (maxHops > 1) { - computeAllRoutes( - outputToken, - currencyOut, - pools, - chainId, - __spreadArray(__spreadArray([], __read(currentPath), false), [pool], false), - allPaths, - startCurrencyIn, - maxHops - 1 - ) - } - } - try { - for (var pools_1 = __values(pools), pools_1_1 = pools_1.next(); !pools_1_1.done; pools_1_1 = pools_1.next()) { - var pool = pools_1_1.value - _loop_1(pool) - } - } catch (e_1_1) { - e_1 = { error: e_1_1 } - } finally { - try { - if (pools_1_1 && !pools_1_1.done && (_a = pools_1.return)) _a.call(pools_1) - } finally { - if (e_1) throw e_1.error - } - } - return allPaths -} -/** - * Returns all the routes from an input currency to an output currency - * @param currencyIn the input currency - * @param currencyOut the output currency - */ -function useAllV3Routes(currencyIn, currencyOut) { - var chainId = useActiveWeb3React().chainId - var _a = useV3SwapPools(currencyIn, currencyOut), - pools = _a.pools, - poolsLoading = _a.loading - return React.useMemo( - function () { - if (poolsLoading || !chainId || !pools || !currencyIn || !currencyOut) return { loading: true, routes: [] } - var routes = computeAllRoutes(currencyIn, currencyOut, pools, chainId, [], [], currencyIn, 2) - return { loading: false, routes } - }, - [chainId, currencyIn, currencyOut, pools, poolsLoading] - ) -} - -<<<<<<< HEAD -var SvgStaticRoute = function SvgStaticRoute(props) { - return /*#__PURE__*/React__namespace.createElement("svg", _extends$1({ - width: 20, - height: 20, - viewBox: "0 0 20 22", - fill: "none", - xmlns: "http://www.w3.org/2000/svg" - }, props), _path$1 || (_path$1 = /*#__PURE__*/React__namespace.createElement("path", { - d: "M19 18C19 18.5523 18.5523 19 18 19V21C19.6569 21 21 19.6569 21 18H19ZM18 19C17.4477 19 17 18.5523 17 18H15C15 19.6569 16.3431 21 18 21V19ZM17 18C17 17.4477 17.4477 17 18 17V15C16.3431 15 15 16.3431 15 18H17ZM18 17C18.5523 17 19 17.4477 19 18H21C21 16.3431 19.6569 15 18 15V17ZM8 7H16V5H8V7ZM16 11H8V13H16V11ZM8 19H16V17H8V19ZM4 15C4 17.2091 5.79086 19 8 19V17C6.89543 17 6 16.1046 6 15H4ZM8 11C5.79086 11 4 12.7909 4 15H6C6 13.8954 6.89543 13 8 13V11ZM18 9C18 10.1046 17.1046 11 16 11V13C18.2091 13 20 11.2091 20 9H18ZM16 7C17.1046 7 18 7.89543 18 9H20C20 6.79086 18.2091 5 16 5V7ZM7 6C7 6.55228 6.55228 7 6 7V9C7.65685 9 9 7.65685 9 6H7ZM6 7C5.44772 7 5 6.55228 5 6H3C3 7.65685 4.34315 9 6 9V7ZM5 6C5 5.44772 5.44772 5 6 5V3C4.34315 3 3 4.34315 3 6H5ZM6 5C6.55228 5 7 5.44772 7 6H9C9 4.34315 7.65685 3 6 3V5Z" - }))); -}; - -var StyledAutoRouterIcon = styled__default["default"](SvgAutoRouter)(templateObject_1$H || (templateObject_1$H = __makeTemplateObject(["\n height: 16px;\n width: 16px;\n\n :hover {\n filter: brightness(1.3);\n }\n"], ["\n height: 16px;\n width: 16px;\n\n :hover {\n filter: brightness(1.3);\n }\n"]))); -var StyledStaticRouterIcon = styled__default["default"](SvgStaticRoute)(templateObject_2$t || (templateObject_2$t = __makeTemplateObject(["\n height: 16px;\n width: 16px;\n\n fill: ", ";\n\n :hover {\n filter: brightness(1.3);\n }\n"], ["\n height: 16px;\n width: 16px;\n\n fill: ", ";\n\n :hover {\n filter: brightness(1.3);\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.text3; -}); -var StyledAutoRouterLabel = styled__default["default"](ThemedText.Black)(templateObject_3$m || (templateObject_3$m = __makeTemplateObject(["\n line-height: 1rem;\n\n /* fallback color */\n color: ", ";\n\n @supports (-webkit-background-clip: text) and (-webkit-text-fill-color: transparent) {\n background-image: linear-gradient(90deg, #2172e5 0%, #54e521 163.16%);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n }\n"], ["\n line-height: 1rem;\n\n /* fallback color */\n color: ", ";\n\n @supports (-webkit-background-clip: text) and (-webkit-text-fill-color: transparent) {\n background-image: linear-gradient(90deg, #2172e5 0%, #54e521 163.16%);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.green1; -}); -function AutoRouterLogo() { - var autoRouterSupported = useAutoRouterSupported(); - return autoRouterSupported ? jsxRuntime.jsx(StyledAutoRouterIcon, {}, void 0) : jsxRuntime.jsx(StyledStaticRouterIcon, {}, void 0); -} -function AutoRouterLabel() { - var autoRouterSupported = useAutoRouterSupported(); - return autoRouterSupported ? (jsxRuntime.jsx(StyledAutoRouterLabel, __assign({ fontSize: 14 }, { children: "Auto Router" }), void 0)) : (jsxRuntime.jsx(ThemedText.Black, __assign({ fontSize: 14 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Trade Route" }, void 0) }), void 0)); -} -var templateObject_1$H, templateObject_2$t, templateObject_3$m; - -var Wrapper$a = styled__default["default"](AutoColumn)(templateObject_1$G || (templateObject_1$G = __makeTemplateObject(["\n padding: ", ";\n border-radius: 16px;\n border: 1px solid ", ";\n cursor: pointer;\n"], ["\n padding: ", ";\n border-radius: 16px;\n border: 1px solid ", ";\n cursor: pointer;\n"])), function (_a) { - var fixedOpen = _a.fixedOpen; - return (fixedOpen ? '12px' : '12px 8px 12px 12px'); -}, function (_a) { - var theme = _a.theme, fixedOpen = _a.fixedOpen; - return (fixedOpen ? 'transparent' : theme.bg2); -}); -var OpenCloseIcon = styled__default["default"](reactFeather.Plus)(templateObject_2$s || (templateObject_2$s = __makeTemplateObject(["\n margin-left: 8px;\n height: 20px;\n stroke-width: 2px;\n transition: transform 0.1s;\n transform: ", ";\n stroke: ", ";\n cursor: pointer;\n :hover {\n opacity: 0.8;\n }\n"], ["\n margin-left: 8px;\n height: 20px;\n stroke-width: 2px;\n transition: transform 0.1s;\n transform: ", ";\n stroke: ", ";\n cursor: pointer;\n :hover {\n opacity: 0.8;\n }\n"])), function (_a) { - var open = _a.open; - return (open ? 'rotate(45deg)' : 'none'); -}, function (_a) { - var theme = _a.theme; - return theme.text3; -}); -var V2_DEFAULT_FEE_TIER = 3000; -var SwapRoute = React.memo(function SwapRoute(_a) { - var trade = _a.trade, syncing = _a.syncing, _b = _a.fixedOpen, fixedOpen = _b === void 0 ? false : _b, rest = __rest(_a, ["trade", "syncing", "fixedOpen"]); - var autoRouterSupported = useAutoRouterSupported(); - var routes = getTokenPath(trade); - var _c = __read(React.useState(false), 2), open = _c[0], setOpen = _c[1]; - var chainId = useActiveWeb3React().chainId; - var _d = __read(useDarkModeManager(), 1), darkMode = _d[0]; - var formattedGasPriceString = (trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) - ? trade.gasUseEstimateUSD.toFixed(2) === '0.00' - ? '<$0.01' - : '$' + trade.gasUseEstimateUSD.toFixed(2) - : undefined; - return (jsxRuntime.jsxs(Wrapper$a, __assign({}, rest, { darkMode: darkMode, fixedOpen: fixedOpen }, { children: [jsxRuntime.jsxs(RowBetween, __assign({ onClick: function () { return setOpen(!open); } }, { children: [jsxRuntime.jsxs(AutoRow, __assign({ gap: "4px", width: "auto" }, { children: [jsxRuntime.jsx(AutoRouterLogo, {}, void 0), jsxRuntime.jsx(AutoRouterLabel, {}, void 0)] }), void 0), fixedOpen ? null : jsxRuntime.jsx(OpenCloseIcon, { open: open }, void 0)] }), void 0), jsxRuntime.jsx(AnimatedDropdown, __assign({ open: open || fixedOpen }, { children: jsxRuntime.jsxs(AutoRow, __assign({ gap: "4px", width: "auto", style: { paddingTop: '12px', margin: 0 } }, { children: [syncing ? (jsxRuntime.jsx(LoadingRows, { children: jsxRuntime.jsx("div", { style: { width: '400px', height: '30px' } }, void 0) }, void 0)) : (jsxRuntime.jsx(RoutingDiagram, { currencyIn: trade.inputAmount.currency, currencyOut: trade.outputAmount.currency, routes: routes }, void 0)), autoRouterSupported && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(Separator$1, {}, void 0), syncing ? (jsxRuntime.jsx(LoadingRows, { children: jsxRuntime.jsx("div", { style: { width: '250px', height: '15px' } }, void 0) }, void 0)) : (jsxRuntime.jsxs(ThemedText.Main, __assign({ fontSize: 12, width: 400, margin: 0 }, { children: [(trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) && chainId && SUPPORTED_GAS_ESTIMATE_CHAIN_IDS.includes(chainId) ? (jsxRuntime.jsxs(macro.Trans, { children: ["Best price route costs ~", formattedGasPriceString, " in gas. "] }, void 0)) : null, ' ', jsxRuntime.jsx(macro.Trans, { children: "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step." }, void 0)] }), void 0))] }, void 0))] }), void 0) }), void 0)] }), void 0)); -}); -function getTokenPath(trade) { - return trade.swaps.map(function (_a) { - var _b = _a.route, tokenPath = _b.path, pools = _b.pools, protocol = _b.protocol, inputAmount = _a.inputAmount, outputAmount = _a.outputAmount; - var portion = trade.tradeType === sdkCore.TradeType.EXACT_INPUT - ? inputAmount.divide(trade.inputAmount) - : outputAmount.divide(trade.outputAmount); - var percent = new sdkCore.Percent(portion.numerator, portion.denominator); - var path = []; - for (var i = 0; i < pools.length; i++) { - var nextPool = pools[i]; - var tokenIn = tokenPath[i]; - var tokenOut = tokenPath[i + 1]; - var entry = [ - tokenIn, - tokenOut, - nextPool instanceof v2Sdk.Pair ? V2_DEFAULT_FEE_TIER : nextPool.fee, - ]; - path.push(entry); - } - return { - percent: percent, - path: path, - protocol: protocol, - }; - }); -} -var templateObject_1$G, templateObject_2$s; - -var GasWrapper = styled__default["default"](RowFixed)(templateObject_1$F || (templateObject_1$F = __makeTemplateObject(["\n border-radius: 8px;\n padding: 4px 6px;\n height: 24px;\n color: ", ";\n background-color: ", ";\n font-size: 14px;\n font-weight: 500;\n user-select: none;\n"], ["\n border-radius: 8px;\n padding: 4px 6px;\n height: 24px;\n color: ", ";\n background-color: ", ";\n font-size: 14px;\n font-weight: 500;\n user-select: none;\n"])), function (_a) { - var theme = _a.theme; - return theme.text3; -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}); -var StyledGasIcon = styled__default["default"](SvgGasIcon)(templateObject_2$r || (templateObject_2$r = __makeTemplateObject(["\n margin-right: 4px;\n height: 14px;\n & > * {\n stroke: ", ";\n }\n"], ["\n margin-right: 4px;\n height: 14px;\n & > * {\n stroke: ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.text3; -}); -function GasEstimateBadge(_a) { - var _b; - var trade = _a.trade, loading = _a.loading, showRoute = _a.showRoute, disableHover = _a.disableHover; - var formattedGasPriceString = (trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) - ? trade.gasUseEstimateUSD.toFixed(2) === '0.00' - ? '<$0.01' - : '$' + trade.gasUseEstimateUSD.toFixed(2) - : undefined; - return (jsxRuntime.jsx(MouseoverTooltipContent, __assign({ wrap: false, disableHover: disableHover, content: loading ? null : (jsxRuntime.jsx(ResponsiveTooltipContainer, __assign({ origin: "top right", style: { - padding: showRoute ? '0' : '12px', - border: 'none', - borderRadius: showRoute ? '16px' : '12px', - maxWidth: '400px', - } }, { children: showRoute ? (trade ? (jsxRuntime.jsx(SwapRoute, { trade: trade, syncing: loading, fixedOpen: showRoute }, void 0)) : null) : (jsxRuntime.jsxs(AutoColumn, __assign({ gap: "4px", justify: "center" }, { children: [jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: "12px", textAlign: "center" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Estimated network fee" }, void 0) }), void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ textAlign: "center", fontWeight: 500, style: { userSelect: 'none' } }, { children: jsxRuntime.jsxs(macro.Trans, { children: ["$", (_b = trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) === null || _b === void 0 ? void 0 : _b.toFixed(2)] }, void 0) }), void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: "10px", textAlign: "center", maxWidth: "140px", color: "text3" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Estimate may differ due to your wallet gas settings" }, void 0) }), void 0)] }), void 0)) }), void 0)), placement: "bottom", onOpen: function () { - return ReactGA__default["default"].event({ - category: 'Gas', - action: 'Gas Details Tooltip Open', - }); - } }, { children: jsxRuntime.jsx(LoadingOpacityContainer, __assign({ "$loading": loading }, { children: jsxRuntime.jsxs(GasWrapper, { children: [jsxRuntime.jsx(StyledGasIcon, {}, void 0), formattedGasPriceString !== null && formattedGasPriceString !== void 0 ? formattedGasPriceString : null] }, void 0) }), void 0) }), void 0)); -} -var templateObject_1$F, templateObject_2$r; - -var Wrapper$9 = styled__default["default"](Row)(templateObject_1$E || (templateObject_1$E = __makeTemplateObject(["\n width: 100%;\n justify-content: center;\n"], ["\n width: 100%;\n justify-content: center;\n"]))); -var StyledInfoIcon = styled__default["default"](reactFeather.Info)(templateObject_2$q || (templateObject_2$q = __makeTemplateObject(["\n height: 16px;\n width: 16px;\n margin-right: 4px;\n color: ", ";\n"], ["\n height: 16px;\n width: 16px;\n margin-right: 4px;\n color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.text3; -}); -var StyledCard = styled__default["default"](OutlineCard)(templateObject_3$l || (templateObject_3$l = __makeTemplateObject(["\n padding: 12px;\n border: 1px solid ", ";\n"], ["\n padding: 12px;\n border: 1px solid ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}); -var StyledHeaderRow = styled__default["default"](RowBetween)(templateObject_4$e || (templateObject_4$e = __makeTemplateObject(["\n padding: 4px 8px;\n border-radius: 12px;\n background-color: ", ";\n align-items: center;\n cursor: ", ";\n min-height: 40px;\n\n :hover {\n background-color: ", ";\n }\n"], ["\n padding: 4px 8px;\n border-radius: 12px;\n background-color: ", ";\n align-items: center;\n cursor: ", ";\n min-height: 40px;\n\n :hover {\n background-color: ", ";\n }\n"])), function (_a) { - var open = _a.open, theme = _a.theme; - return (open ? theme.bg1 : 'transparent'); -}, function (_a) { - var disabled = _a.disabled; - return (disabled ? 'initial' : 'pointer'); -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return (disabled ? theme.bg1 : polished.darken(0.015, theme.bg1)); -}); -var RotatingArrow = styled__default["default"](reactFeather.ChevronDown)(templateObject_5$c || (templateObject_5$c = __makeTemplateObject(["\n transform: ", ";\n transition: transform 0.1s linear;\n"], ["\n transform: ", ";\n transition: transform 0.1s linear;\n"])), function (_a) { - var open = _a.open; - return (open ? 'rotate(180deg)' : 'none'); -}); -var StyledPolling = styled__default["default"].div(templateObject_7$7 || (templateObject_7$7 = __makeTemplateObject(["\n display: flex;\n height: 16px;\n width: 16px;\n margin-right: 2px;\n margin-left: 10px;\n align-items: center;\n color: ", ";\n transition: 250ms ease color;\n\n ", "\n"], ["\n display: flex;\n height: 16px;\n width: 16px;\n margin-right: 2px;\n margin-left: 10px;\n align-items: center;\n color: ", ";\n transition: 250ms ease color;\n\n ", "\n"])), function (_a) { - var theme = _a.theme; - return theme.text1; -}, function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToMedium(templateObject_6$8 || (templateObject_6$8 = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); -}); -var StyledPollingDot = styled__default["default"].div(templateObject_8$4 || (templateObject_8$4 = __makeTemplateObject(["\n width: 8px;\n height: 8px;\n min-height: 8px;\n min-width: 8px;\n border-radius: 50%;\n position: relative;\n background-color: ", ";\n transition: 250ms ease background-color;\n"], ["\n width: 8px;\n height: 8px;\n min-height: 8px;\n min-width: 8px;\n border-radius: 50%;\n position: relative;\n background-color: ", ";\n transition: 250ms ease background-color;\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}); -var rotate360 = styled.keyframes(templateObject_9$4 || (templateObject_9$4 = __makeTemplateObject(["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"], ["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"]))); -var Spinner = styled__default["default"].div(templateObject_10$4 || (templateObject_10$4 = __makeTemplateObject(["\n animation: ", " 1s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n transform: translateZ(0);\n border-top: 1px solid transparent;\n border-right: 1px solid transparent;\n border-bottom: 1px solid transparent;\n border-left: 2px solid ", ";\n background: transparent;\n width: 14px;\n height: 14px;\n border-radius: 50%;\n position: relative;\n transition: 250ms ease border-color;\n left: -3px;\n top: -3px;\n"], ["\n animation: ", " 1s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n transform: translateZ(0);\n border-top: 1px solid transparent;\n border-right: 1px solid transparent;\n border-bottom: 1px solid transparent;\n border-left: 2px solid ", ";\n background: transparent;\n width: 14px;\n height: 14px;\n border-radius: 50%;\n position: relative;\n transition: 250ms ease border-color;\n left: -3px;\n top: -3px;\n"])), rotate360, function (_a) { - var theme = _a.theme; - return theme.text1; -}); -function SwapDetailsDropdown(_a) { - var trade = _a.trade, syncing = _a.syncing, loading = _a.loading, showInverted = _a.showInverted, setShowInverted = _a.setShowInverted, allowedSlippage = _a.allowedSlippage; - var theme = styled.useTheme(); - var chainId = useActiveWeb3React().chainId; - var _b = __read(React.useState(false), 2), showDetails = _b[0], setShowDetails = _b[1]; - return (jsxRuntime.jsx(Wrapper$9, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: '8px', style: { width: '100%', marginBottom: '-8px' } }, { children: [jsxRuntime.jsxs(StyledHeaderRow, __assign({ onClick: function () { return setShowDetails(!showDetails); }, disabled: !trade, open: showDetails }, { children: [jsxRuntime.jsxs(RowFixed, __assign({ style: { position: 'relative' } }, { children: [loading || syncing ? (jsxRuntime.jsx(StyledPolling, { children: jsxRuntime.jsx(StyledPollingDot, { children: jsxRuntime.jsx(Spinner, {}, void 0) }, void 0) }, void 0)) : (jsxRuntime.jsx(HideSmall, { children: jsxRuntime.jsx(MouseoverTooltipContent, __assign({ wrap: false, content: jsxRuntime.jsx(ResponsiveTooltipContainer, __assign({ origin: "top right", style: { padding: '0' } }, { children: jsxRuntime.jsx(Card, __assign({ padding: "12px" }, { children: jsxRuntime.jsx(AdvancedSwapDetails, { trade: trade, allowedSlippage: allowedSlippage, syncing: syncing }, void 0) }), void 0) }), void 0), placement: "bottom", disableHover: showDetails }, { children: jsxRuntime.jsx(StyledInfoIcon, { color: trade ? theme.text3 : theme.bg3 }, void 0) }), void 0) }, void 0)), trade ? (jsxRuntime.jsx(LoadingOpacityContainer, __assign({ "$loading": syncing }, { children: jsxRuntime.jsx(TradePrice, { price: trade.executionPrice, showInverted: showInverted, setShowInverted: setShowInverted }, void 0) }), void 0)) : loading || syncing ? (jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: 14 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Fetching best price..." }, void 0) }), void 0)) : null] }), void 0), jsxRuntime.jsxs(RowFixed, { children: [!(trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) || - showDetails || - !chainId || - !SUPPORTED_GAS_ESTIMATE_CHAIN_IDS.includes(chainId) ? null : (jsxRuntime.jsx(GasEstimateBadge, { trade: trade, loading: syncing || loading, showRoute: !showDetails, disableHover: showDetails }, void 0)), jsxRuntime.jsx(RotatingArrow, { stroke: trade ? theme.text3 : theme.bg3, open: Boolean(trade && showDetails) }, void 0)] }, void 0)] }), void 0), jsxRuntime.jsx(AnimatedDropdown, __assign({ open: showDetails }, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: '8px', style: { padding: '0', paddingBottom: '8px' } }, { children: [trade ? (jsxRuntime.jsx(StyledCard, { children: jsxRuntime.jsx(AdvancedSwapDetails, { trade: trade, allowedSlippage: allowedSlippage, syncing: syncing }, void 0) }, void 0)) : null, trade ? jsxRuntime.jsx(SwapRoute, { trade: trade, syncing: syncing }, void 0) : null] }), void 0) }), void 0)] }), void 0) }, void 0)); -} -var templateObject_1$E, templateObject_2$q, templateObject_3$l, templateObject_4$e, templateObject_5$c, templateObject_6$8, templateObject_7$7, templateObject_8$4, templateObject_9$4, templateObject_10$4; - -var BaseButton = styled__default["default"](styledComponents.Button)(templateObject_1$D || (templateObject_1$D = __makeTemplateObject(["\n padding: ", ";\n width: ", ";\n font-weight: 500;\n text-align: center;\n border-radius: ", ";\n outline: none;\n border: 1px solid transparent;\n color: ", ";\n text-decoration: none;\n display: flex;\n justify-content: center;\n flex-wrap: nowrap;\n align-items: center;\n cursor: pointer;\n position: relative;\n z-index: 1;\n &:disabled {\n opacity: 50%;\n cursor: auto;\n pointer-events: none;\n }\n\n will-change: transform;\n transition: transform 450ms ease;\n transform: perspective(1px) translateZ(0);\n\n > * {\n user-select: none;\n }\n\n > a {\n text-decoration: none;\n }\n"], ["\n padding: ", ";\n width: ", ";\n font-weight: 500;\n text-align: center;\n border-radius: ", ";\n outline: none;\n border: 1px solid transparent;\n color: ", ";\n text-decoration: none;\n display: flex;\n justify-content: center;\n flex-wrap: nowrap;\n align-items: center;\n cursor: pointer;\n position: relative;\n z-index: 1;\n &:disabled {\n opacity: 50%;\n cursor: auto;\n pointer-events: none;\n }\n\n will-change: transform;\n transition: transform 450ms ease;\n transform: perspective(1px) translateZ(0);\n\n > * {\n user-select: none;\n }\n\n > a {\n text-decoration: none;\n }\n"])), function (_a) { - var padding = _a.padding; - return padding !== null && padding !== void 0 ? padding : '16px'; -}, function (_a) { - var width = _a.width; - return width !== null && width !== void 0 ? width : '100%'; -}, function (_a) { - var $borderRadius = _a.$borderRadius; - return $borderRadius !== null && $borderRadius !== void 0 ? $borderRadius : '20px'; -}, function (_a) { - var theme = _a.theme; - return theme.text1; -}); -var ButtonPrimary = styled__default["default"](BaseButton)(templateObject_2$p || (templateObject_2$p = __makeTemplateObject(["\n background-color: ", ";\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n background-color: ", ";\n color: ", ";\n cursor: auto;\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n"], ["\n background-color: ", ";\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n background-color: ", ";\n color: ", ";\n cursor: auto;\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.primary1; -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.05, theme.primary1); -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.05, theme.primary1); -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.05, theme.primary1); -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.1, theme.primary1); -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.1, theme.primary1); -}, function (_a) { - var theme = _a.theme, altDisabledStyle = _a.altDisabledStyle, disabled = _a.disabled; - return altDisabledStyle ? (disabled ? theme.primary1 : theme.bg2) : theme.bg2; -}, function (_a) { - var altDisabledStyle = _a.altDisabledStyle, disabled = _a.disabled, theme = _a.theme; - return altDisabledStyle ? (disabled ? theme.white : theme.text2) : theme.text2; -}); -var ButtonLight = styled__default["default"](BaseButton)(templateObject_3$k || (templateObject_3$k = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n font-size: 16px;\n font-weight: 500;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n :disabled {\n opacity: 0.4;\n :hover {\n cursor: auto;\n background-color: ", ";\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n }\n"], ["\n background-color: ", ";\n color: ", ";\n font-size: 16px;\n font-weight: 500;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n :disabled {\n opacity: 0.4;\n :hover {\n cursor: auto;\n background-color: ", ";\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.primary5; -}, function (_a) { - var theme = _a.theme; - return theme.primaryText1; -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return !disabled && polished.darken(0.03, theme.primary5); -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return !disabled && polished.darken(0.03, theme.primary5); -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return !disabled && polished.darken(0.03, theme.primary5); -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return !disabled && polished.darken(0.05, theme.primary5); -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return !disabled && polished.darken(0.05, theme.primary5); -}, function (_a) { - var theme = _a.theme; - return theme.primary5; -}); -var ButtonGray = styled__default["default"](BaseButton)(templateObject_4$d || (templateObject_4$d = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n font-size: 16px;\n font-weight: 500;\n\n &:hover {\n background-color: ", ";\n }\n &:active {\n background-color: ", ";\n }\n"], ["\n background-color: ", ";\n color: ", ";\n font-size: 16px;\n font-weight: 500;\n\n &:hover {\n background-color: ", ";\n }\n &:active {\n background-color: ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var theme = _a.theme; - return theme.text2; -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return !disabled && polished.darken(0.05, theme.bg2); -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return !disabled && polished.darken(0.1, theme.bg2); -}); -styled__default["default"](BaseButton)(templateObject_5$b || (templateObject_5$b = __makeTemplateObject(["\n border: 1px solid ", ";\n color: ", ";\n background-color: transparent;\n font-size: 16px;\n border-radius: 12px;\n padding: ", ";\n\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n border: 1px solid ", ";\n }\n &:hover {\n border: 1px solid ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n border: 1px solid ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n a:hover {\n text-decoration: none;\n }\n"], ["\n border: 1px solid ", ";\n color: ", ";\n background-color: transparent;\n font-size: 16px;\n border-radius: 12px;\n padding: ", ";\n\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n border: 1px solid ", ";\n }\n &:hover {\n border: 1px solid ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n border: 1px solid ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n a:hover {\n text-decoration: none;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.primary4; -}, function (_a) { - var theme = _a.theme; - return theme.primary1; -}, function (_a) { - var padding = _a.padding; - return (padding ? padding : '10px'); -}, function (_a) { - var theme = _a.theme; - return theme.primary4; -}, function (_a) { - var theme = _a.theme; - return theme.primary3; -}, function (_a) { - var theme = _a.theme; - return theme.primary3; -}, function (_a) { - var theme = _a.theme; - return theme.primary4; -}, function (_a) { - var theme = _a.theme; - return theme.primary3; -}); -var ButtonOutlined = styled__default["default"](BaseButton)(templateObject_6$7 || (templateObject_6$7 = __makeTemplateObject(["\n border: 1px solid ", ";\n background-color: transparent;\n color: ", ";\n &:focus {\n box-shadow: 0 0 0 1px ", ";\n }\n &:hover {\n box-shadow: 0 0 0 1px ", ";\n }\n &:active {\n box-shadow: 0 0 0 1px ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"], ["\n border: 1px solid ", ";\n background-color: transparent;\n color: ", ";\n &:focus {\n box-shadow: 0 0 0 1px ", ";\n }\n &:hover {\n box-shadow: 0 0 0 1px ", ";\n }\n &:active {\n box-shadow: 0 0 0 1px ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}, function (_a) { - var theme = _a.theme; - return theme.text1; -}, function (_a) { - var theme = _a.theme; - return theme.bg4; -}, function (_a) { - var theme = _a.theme; - return theme.bg4; -}, function (_a) { - var theme = _a.theme; - return theme.bg4; -}); -styled__default["default"](BaseButton)(templateObject_7$6 || (templateObject_7$6 = __makeTemplateObject(["\n background-color: ", ";\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n background-color: ", ";\n opacity: 50%;\n cursor: auto;\n }\n"], ["\n background-color: ", ";\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n background-color: ", ";\n opacity: 50%;\n cursor: auto;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.yellow3; -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.05, theme.yellow3); -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.05, theme.yellow3); -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.05, theme.yellow3); -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.1, theme.yellow3); -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.1, theme.yellow3); -}, function (_a) { - var theme = _a.theme; - return theme.yellow3; -}); -var ButtonEmpty = styled__default["default"](BaseButton)(templateObject_8$3 || (templateObject_8$3 = __makeTemplateObject(["\n background-color: transparent;\n color: ", ";\n display: flex;\n justify-content: center;\n align-items: center;\n\n &:focus {\n text-decoration: underline;\n }\n &:hover {\n text-decoration: none;\n }\n &:active {\n text-decoration: none;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"], ["\n background-color: transparent;\n color: ", ";\n display: flex;\n justify-content: center;\n align-items: center;\n\n &:focus {\n text-decoration: underline;\n }\n &:hover {\n text-decoration: none;\n }\n &:active {\n text-decoration: none;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.primary1; -}); -styled__default["default"](BaseButton)(templateObject_9$3 || (templateObject_9$3 = __makeTemplateObject(["\n padding: 0;\n width: fit-content;\n background: none;\n text-decoration: none;\n &:focus {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n text-decoration: underline;\n }\n &:hover {\n // text-decoration: underline;\n opacity: 0.9;\n }\n &:active {\n text-decoration: underline;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"], ["\n padding: 0;\n width: fit-content;\n background: none;\n text-decoration: none;\n &:focus {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n text-decoration: underline;\n }\n &:hover {\n // text-decoration: underline;\n opacity: 0.9;\n }\n &:active {\n text-decoration: underline;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"]))); -var ButtonConfirmedStyle = styled__default["default"](BaseButton)(templateObject_10$3 || (templateObject_10$3 = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n /* border: 1px solid ", "; */\n\n &:disabled {\n opacity: 50%;\n background-color: ", ";\n color: ", ";\n cursor: auto;\n }\n"], ["\n background-color: ", ";\n color: ", ";\n /* border: 1px solid ", "; */\n\n &:disabled {\n opacity: 50%;\n background-color: ", ";\n color: ", ";\n cursor: auto;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.bg3; -}, function (_a) { - var theme = _a.theme; - return theme.text1; -}, function (_a) { - var theme = _a.theme; - return theme.green1; -}, function (_a) { - var theme = _a.theme; - return theme.bg2; -}, function (_a) { - var theme = _a.theme; - return theme.text2; -}); -var ButtonErrorStyle = styled__default["default"](BaseButton)(templateObject_11$3 || (templateObject_11$3 = __makeTemplateObject(["\n background-color: ", ";\n border: 1px solid ", ";\n\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n box-shadow: none;\n background-color: ", ";\n border: 1px solid ", ";\n }\n"], ["\n background-color: ", ";\n border: 1px solid ", ";\n\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n box-shadow: none;\n background-color: ", ";\n border: 1px solid ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.red1; -}, function (_a) { - var theme = _a.theme; - return theme.red1; -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.05, theme.red1); -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.05, theme.red1); -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.05, theme.red1); -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.1, theme.red1); -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.1, theme.red1); -}, function (_a) { - var theme = _a.theme; - return theme.red1; -}, function (_a) { - var theme = _a.theme; - return theme.red1; -}); -function ButtonConfirmed(_a) { - var confirmed = _a.confirmed, altDisabledStyle = _a.altDisabledStyle, rest = __rest(_a, ["confirmed", "altDisabledStyle"]); - if (confirmed) { - return jsxRuntime.jsx(ButtonConfirmedStyle, __assign({}, rest), void 0); - } - else { - return jsxRuntime.jsx(ButtonPrimary, __assign({}, rest, { altDisabledStyle: altDisabledStyle }), void 0); - } -} -function ButtonError(_a) { - var error = _a.error, rest = __rest(_a, ["error"]); - if (error) { - return jsxRuntime.jsx(ButtonErrorStyle, __assign({}, rest), void 0); - } - else { - return jsxRuntime.jsx(ButtonPrimary, __assign({}, rest), void 0); - } -} -styled__default["default"](ButtonOutlined)(templateObject_12$3 || (templateObject_12$3 = __makeTemplateObject(["\n border: 1px solid;\n border-color: ", ";\n"], ["\n border: 1px solid;\n border-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.primary1; -}); -styled__default["default"].div(templateObject_13 || (templateObject_13 = __makeTemplateObject(["\n height: 17px;\n width: 17px;\n border-radius: 50%;\n background-color: ", ";\n display: flex;\n align-items: center;\n justify-content: center;\n"], ["\n height: 17px;\n width: 17px;\n border-radius: 50%;\n background-color: ", ";\n display: flex;\n align-items: center;\n justify-content: center;\n"])), function (_a) { - var theme = _a.theme; - return theme.primary1; -}); -styled__default["default"].div(templateObject_14 || (templateObject_14 = __makeTemplateObject(["\n width: 20px;\n padding: 0 10px;\n position: absolute;\n top: 11px;\n right: 15px;\n"], ["\n width: 20px;\n padding: 0 10px;\n position: absolute;\n top: 11px;\n right: 15px;\n"]))); -styled__default["default"](reactFeather.Check)(templateObject_15 || (templateObject_15 = __makeTemplateObject(["\n size: 13px;\n"], ["\n size: 13px;\n"]))); -var templateObject_1$D, templateObject_2$p, templateObject_3$k, templateObject_4$d, templateObject_5$b, templateObject_6$7, templateObject_7$6, templateObject_8$3, templateObject_9$3, templateObject_10$3, templateObject_11$3, templateObject_12$3, templateObject_13, templateObject_14, templateObject_15; - -var parser = new uaParserJs.UAParser(window.navigator.userAgent); -var type$1 = parser.getDevice().type; -parser.getResult(); -var isMobile = type$1 === 'mobile' || type$1 === 'tablet'; - -var AnimatedDialogOverlay = reactSpring.animated(dialog.DialogOverlay); -// eslint-disable-next-line @typescript-eslint/no-unused-vars -var StyledDialogOverlay = styled__default["default"](AnimatedDialogOverlay)(templateObject_1$C || (templateObject_1$C = __makeTemplateObject(["\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: ", ";\n }\n"], ["\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: ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.modalBG; -}); -var AnimatedDialogContent = reactSpring.animated(dialog.DialogContent); -// destructure to not pass custom props to Dialog DOM element -// eslint-disable-next-line @typescript-eslint/no-unused-vars -var StyledDialogContent = styled__default["default"](function (_a) { - _a.minHeight; _a.maxHeight; _a.mobile; _a.isOpen; var rest = __rest(_a, ["minHeight", "maxHeight", "mobile", "isOpen"]); - return (jsxRuntime.jsx(AnimatedDialogContent, __assign({}, rest), void 0)); -}).attrs({ - 'aria-label': 'dialog', -})(templateObject_7$5 || (templateObject_7$5 = __makeTemplateObject(["\n overflow-y: auto;\n\n &[data-reach-dialog-content] {\n margin: 0 0 2rem 0;\n background-color: ", ";\n border: 1px solid ", ";\n box-shadow: 0 4px 8px 0 ", ";\n padding: 0px;\n width: 50vw;\n overflow-y: auto;\n overflow-x: hidden;\n\n align-self: ", ";\n\n max-width: 420px;\n ", "\n ", "\n display: flex;\n border-radius: 20px;\n ", "\n ", "\n }\n"], ["\n overflow-y: auto;\n\n &[data-reach-dialog-content] {\n margin: 0 0 2rem 0;\n background-color: ", ";\n border: 1px solid ", ";\n box-shadow: 0 4px 8px 0 ", ";\n padding: 0px;\n width: 50vw;\n overflow-y: auto;\n overflow-x: hidden;\n\n align-self: ", ";\n\n max-width: 420px;\n ", "\n ", "\n display: flex;\n border-radius: 20px;\n ", "\n ", "\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.bg0; -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var theme = _a.theme; - return polished.transparentize(0.95, theme.shadow1); -}, function (_a) { - var mobile = _a.mobile; - return (mobile ? 'flex-end' : 'center'); -}, function (_a) { - var maxHeight = _a.maxHeight; - return maxHeight && styled.css(templateObject_2$o || (templateObject_2$o = __makeTemplateObject(["\n max-height: ", "vh;\n "], ["\n max-height: ", "vh;\n "])), maxHeight); -}, function (_a) { - var minHeight = _a.minHeight; - return minHeight && styled.css(templateObject_3$j || (templateObject_3$j = __makeTemplateObject(["\n min-height: ", "vh;\n "], ["\n min-height: ", "vh;\n "])), minHeight); -}, function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToMedium(templateObject_4$c || (templateObject_4$c = __makeTemplateObject(["\n width: 65vw;\n margin: 0;\n "], ["\n width: 65vw;\n margin: 0;\n "]))); -}, function (_a) { - var theme = _a.theme, mobile = _a.mobile; - return theme.mediaWidth.upToSmall(templateObject_6$6 || (templateObject_6$6 = __makeTemplateObject(["\n width: 85vw;\n ", "\n "], ["\n width: 85vw;\n ", "\n "])), mobile && styled.css(templateObject_5$a || (templateObject_5$a = __makeTemplateObject(["\n width: 100vw;\n border-radius: 20px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n "], ["\n width: 100vw;\n border-radius: 20px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n "])))); -}); -function Modal(_a) { - var isOpen = _a.isOpen, onDismiss = _a.onDismiss, _b = _a.minHeight, minHeight = _b === void 0 ? false : _b, _c = _a.maxHeight, maxHeight = _c === void 0 ? 90 : _c, initialFocusRef = _a.initialFocusRef, children = _a.children; - var fadeTransition = reactSpring.useTransition(isOpen, null, { - config: { duration: 200 }, - from: { opacity: 0 }, - enter: { opacity: 1 }, - leave: { opacity: 0 }, - }); - var _d = __read(reactSpring.useSpring(function () { return ({ y: 0, config: { mass: 1, tension: 210, friction: 20 } }); }), 2), y = _d[0].y, set = _d[1]; - var bind = reactUseGesture.useGesture({ - onDrag: function (state) { - set({ - y: state.down ? state.movement[1] : 0, - }); - if (state.movement[1] > 300 || (state.velocity > 3 && state.direction[1] > 0)) { - onDismiss(); - } - }, - }); - return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: fadeTransition.map(function (_a) { - var item = _a.item, key = _a.key, props = _a.props; - return item && (jsxRuntime.jsx(StyledDialogOverlay, __assign({ style: props, onDismiss: onDismiss, initialFocusRef: initialFocusRef, unstable_lockFocusAcrossFrames: false }, { children: jsxRuntime.jsxs(StyledDialogContent, __assign({}, (isMobile - ? __assign(__assign({}, bind()), { style: { transform: y.interpolate(function (y) { return "translateY(" + (y > 0 ? y : 0) + "px)"; }) } }) : {}), { "aria-label": "dialog content", minHeight: minHeight, maxHeight: maxHeight, mobile: isMobile }, { children: [!initialFocusRef && isMobile ? jsxRuntime.jsx("div", { tabIndex: 1 }, void 0) : null, children] }), void 0) }), key)); - }) }, void 0)); -} -var templateObject_1$C, templateObject_2$o, templateObject_3$j, templateObject_4$c, templateObject_5$a, templateObject_6$6, templateObject_7$5; - -var _a$8; -var ETHERSCAN_PREFIXES = (_a$8 = {}, - _a$8[SupportedChainId.MAINNET] = 'https://etherscan.io', - _a$8[SupportedChainId.ROPSTEN] = 'https://ropsten.etherscan.io', - _a$8[SupportedChainId.RINKEBY] = 'https://rinkeby.etherscan.io', - _a$8[SupportedChainId.GOERLI] = 'https://goerli.etherscan.io', - _a$8[SupportedChainId.KOVAN] = 'https://kovan.etherscan.io', - _a$8[SupportedChainId.OPTIMISM] = 'https://optimistic.etherscan.io', - _a$8[SupportedChainId.OPTIMISTIC_KOVAN] = 'https://kovan-optimistic.etherscan.io', - _a$8[SupportedChainId.POLYGON_MUMBAI] = 'https://mumbai.polygonscan.com', - _a$8[SupportedChainId.POLYGON] = 'https://polygonscan.com', - _a$8); -var ExplorerDataType; -(function (ExplorerDataType) { - ExplorerDataType["TRANSACTION"] = "transaction"; - ExplorerDataType["TOKEN"] = "token"; - ExplorerDataType["ADDRESS"] = "address"; - ExplorerDataType["BLOCK"] = "block"; -})(ExplorerDataType || (ExplorerDataType = {})); -/** - * Return the explorer link for the given data and data type - * @param chainId the ID of the chain for which to return the data - * @param data the data to return a link for - * @param type the type of the data - */ -function getExplorerLink(chainId, data, type) { - var _a; - if (chainId === SupportedChainId.ARBITRUM_ONE) { - switch (type) { - case ExplorerDataType.TRANSACTION: - return "https://arbiscan.io/tx/" + data; - case ExplorerDataType.ADDRESS: - case ExplorerDataType.TOKEN: - return "https://arbiscan.io/address/" + data; - case ExplorerDataType.BLOCK: - return "https://arbiscan.io/block/" + data; - default: - return "https://arbiscan.io/"; - } - } - if (chainId === SupportedChainId.ARBITRUM_RINKEBY) { - switch (type) { - case ExplorerDataType.TRANSACTION: - return "https://rinkeby-explorer.arbitrum.io/tx/" + data; - case ExplorerDataType.ADDRESS: - case ExplorerDataType.TOKEN: - return "https://rinkeby-explorer.arbitrum.io/address/" + data; - case ExplorerDataType.BLOCK: - return "https://rinkeby-explorer.arbitrum.io/block/" + data; - default: - return "https://rinkeby-explorer.arbitrum.io/"; - } - } - var prefix = (_a = ETHERSCAN_PREFIXES[chainId]) !== null && _a !== void 0 ? _a : 'https://etherscan.io'; - switch (type) { - case ExplorerDataType.TRANSACTION: - return prefix + "/tx/" + data; - case ExplorerDataType.TOKEN: - return prefix + "/token/" + data; - case ExplorerDataType.BLOCK: - if (chainId === SupportedChainId.OPTIMISM || chainId === SupportedChainId.OPTIMISTIC_KOVAN) { - return prefix + "/tx/" + data; - } - return prefix + "/block/" + data; - case ExplorerDataType.ADDRESS: - return prefix + "/address/" + data; - default: - return "" + prefix; - } -} - -var DetailsFooter = styled__default["default"].div(templateObject_1$B || (templateObject_1$B = __makeTemplateObject(["\n padding-top: calc(16px + 2rem);\n padding-bottom: 20px;\n margin-left: auto;\n margin-right: auto;\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: ", ";\n background-color: ", ";\n z-index: ", ";\n\n transform: ", ";\n transition: transform 300ms ease-in-out;\n text-align: center;\n"], ["\n padding-top: calc(16px + 2rem);\n padding-bottom: 20px;\n margin-left: auto;\n margin-right: auto;\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: ", ";\n background-color: ", ";\n z-index: ", ";\n\n transform: ", ";\n transition: transform 300ms ease-in-out;\n text-align: center;\n"])), function (_a) { - var theme = _a.theme; - return theme.text2; -}, function (_a) { - var theme = _a.theme; - return theme.advancedBG; -}, Z_INDEX.deprecated_zero, function (_a) { - var show = _a.show; - return (show ? 'translateY(0%)' : 'translateY(-100%)'); -}); -var StyledButtonEmpty = styled__default["default"](ButtonEmpty)(templateObject_2$n || (templateObject_2$n = __makeTemplateObject(["\n text-decoration: none;\n"], ["\n text-decoration: none;\n"]))); -var AddressText$1 = styled__default["default"](ThemedText.Blue)(templateObject_4$b || (templateObject_4$b = __makeTemplateObject(["\n font-size: 12px;\n\n ", "\n"], ["\n font-size: 12px;\n\n ", "\n"])), function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToSmall(templateObject_3$i || (templateObject_3$i = __makeTemplateObject(["\n font-size: 10px;\n"], ["\n font-size: 10px;\n"]))); -}); -function UnsupportedCurrencyFooter(_a) { - var show = _a.show, currencies = _a.currencies; - var chainId = useActiveWeb3React().chainId; - var _b = __read(React.useState(false), 2), showDetails = _b[0], setShowDetails = _b[1]; - var tokens = chainId && currencies - ? currencies.map(function (currency) { - return currency === null || currency === void 0 ? void 0 : currency.wrapped; - }) - : []; - var unsupportedTokens = useUnsupportedTokens(); - return (jsxRuntime.jsxs(DetailsFooter, __assign({ show: show }, { children: [jsxRuntime.jsx(Modal, __assign({ isOpen: showDetails, onDismiss: function () { return setShowDetails(false); } }, { children: jsxRuntime.jsx(Card, __assign({ padding: "2rem" }, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "lg" }, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(ThemedText.MediumHeader, { children: jsxRuntime.jsx(macro.Trans, { children: "Unsupported Assets" }, void 0) }, void 0), jsxRuntime.jsx(CloseIcon, { onClick: function () { return setShowDetails(false); } }, void 0)] }, void 0), tokens.map(function (token) { - var _a; - return (token && - unsupportedTokens && - Object.keys(unsupportedTokens).includes(token.address) && (jsxRuntime.jsx(OutlineCard, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "10px" }, { children: [jsxRuntime.jsxs(AutoRow, __assign({ gap: "5px", align: "center" }, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: token, size: '24px' }, void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 500 }, { children: token.symbol }), void 0)] }), void 0), chainId && (jsxRuntime.jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, token.address, ExplorerDataType.ADDRESS) }, { children: jsxRuntime.jsx(AddressText$1, { children: token.address }, void 0) }), void 0))] }), void 0) }, (_a = token.address) === null || _a === void 0 ? void 0 : _a.concat('not-supported')))); - }), jsxRuntime.jsx(AutoColumn, __assign({ gap: "lg" }, { children: jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 500 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons." }, void 0) }), void 0) }), void 0)] }), void 0) }), void 0) }), void 0), jsxRuntime.jsx(StyledButtonEmpty, __assign({ padding: '0', onClick: function () { return setShowDetails(true); } }, { children: jsxRuntime.jsx(ThemedText.Blue, { children: jsxRuntime.jsx(macro.Trans, { children: "Read more about unsupported assets" }, void 0) }, void 0) }), void 0)] }), void 0)); -} -var templateObject_1$B, templateObject_2$n, templateObject_3$i, templateObject_4$b; - -/** - * Does a lookup for an ENS name to find its address. - */ -function useENSAddress(ensName) { - var _a; - var debouncedName = useDebounce(ensName, 200); - var ensNodeArgument = React.useMemo(function () { return [debouncedName === null ? undefined : safeNamehash(debouncedName)]; }, [debouncedName]); - var registrarContract = useENSRegistrarContract(false); - var resolverAddress = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument); - var resolverAddressResult = (_a = resolverAddress.result) === null || _a === void 0 ? void 0 : _a[0]; - var resolverContract = useENSResolverContract(resolverAddressResult && !isZero(resolverAddressResult) ? resolverAddressResult : undefined, false); - var addr = useSingleCallResult(resolverContract, 'addr', ensNodeArgument); - var changed = debouncedName !== ensName; - return React.useMemo(function () { - var _a, _b; - return ({ - address: changed ? null : (_b = (_a = addr.result) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : null, - loading: changed || resolverAddress.loading || addr.loading, - }); - }, [addr.loading, addr.result, changed, resolverAddress.loading]); -} - -/** - * Does a reverse lookup for an address to find its ENS name. - * Note this is not the same as looking up an ENS name to find an address. - */ -function useENSName(address) { - var _a, _b; - var debouncedAddress = useDebounce(address, 200); - var ensNodeArgument = React.useMemo(function () { - if (!debouncedAddress || !isAddress(debouncedAddress)) - return [undefined]; - return [hash.namehash(debouncedAddress.toLowerCase().substr(2) + ".addr.reverse")]; - }, [debouncedAddress]); - var registrarContract = useENSRegistrarContract(false); - var resolverAddress = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument); - var resolverAddressResult = (_a = resolverAddress.result) === null || _a === void 0 ? void 0 : _a[0]; - var resolverContract = useENSResolverContract(resolverAddressResult && !isZero(resolverAddressResult) ? resolverAddressResult : undefined, false); - var nameCallRes = useSingleCallResult(resolverContract, 'name', ensNodeArgument); - var name = (_b = nameCallRes.result) === null || _b === void 0 ? void 0 : _b[0]; - /* ENS does not enforce that an address owns a .eth domain before setting it as a reverse proxy - and recommends that you perform a match on the forward resolution - see: https://docs.ens.domains/dapp-developer-guide/resolving-names#reverse-resolution - */ - var fwdAddr = useENSAddress(name); - var checkedName = address === (fwdAddr === null || fwdAddr === void 0 ? void 0 : fwdAddr.address) ? name : null; - var changed = debouncedAddress !== address; - return React.useMemo(function () { return ({ - ENSName: changed ? null : checkedName, - loading: changed || resolverAddress.loading || nameCallRes.loading, - }); }, [changed, nameCallRes.loading, checkedName, resolverAddress.loading]); -} - -/** - * Given a name or address, does a lookup to resolve to an address and name - * @param nameOrAddress ENS name or address - */ -function useENS(nameOrAddress) { - var validated = isAddress(nameOrAddress); - var reverseLookup = useENSName(validated ? validated : undefined); - var lookup = useENSAddress(nameOrAddress); - return React.useMemo(function () { return ({ - loading: reverseLookup.loading || lookup.loading, - address: validated ? validated : lookup.address, - name: reverseLookup.ENSName ? reverseLookup.ENSName : !validated && lookup.address ? nameOrAddress || null : null, - }); }, [lookup.address, lookup.loading, nameOrAddress, reverseLookup.ENSName, reverseLookup.loading, validated]); -} - -var ERC20_INTERFACE = new abi$6.Interface([ - { - constant: false, - inputs: [ - { name: '_spender', type: 'address' }, - { name: '_value', type: 'uint256' }, - ], - name: 'approve', - outputs: [{ name: '', type: 'bool' }], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, -]); -function approveAmountCalldata(amount, spender) { - if (!amount.currency.isToken) - throw new Error('Must call with an amount of token'); - var approveData = ERC20_INTERFACE.encodeFunctionData('approve', [spender, v3Sdk.toHex(amount.quotient)]); - return { - to: amount.currency.address, - data: approveData, - value: '0x0', - }; -} - -var ArgentWalletContractABI = [ - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "value", - type: "uint256" - }, - { - internalType: "bytes", - name: "data", - type: "bytes" - } - ], - name: "_transactions", - type: "tuple[]" - } - ], - name: "wc_multiCall", - outputs: [ - { - internalType: "bytes[]", - name: "", - type: "bytes[]" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "bytes32", - name: "_msgHash", - type: "bytes32" - }, - { - internalType: "bytes", - name: "_signature", - type: "bytes" - } - ], - name: "isValidSignature", - outputs: [ - { - internalType: "bytes4", - name: "", - type: "bytes4" - } - ], - stateMutability: "view", - type: "function" - } -]; - -function useIsArgentWallet() { - var _a, _b; - var account = useActiveWeb3React().account; - var argentWalletDetector = useArgentWalletDetectorContract(); - var inputs = React.useMemo(function () { return [account !== null && account !== void 0 ? account : undefined]; }, [account]); - var call = useSingleCallResult(argentWalletDetector, 'isArgentWallet', inputs, reduxMulticall.NEVER_RELOAD); - return (_b = (_a = call === null || call === void 0 ? void 0 : call.result) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : false; -} - -function useArgentWalletContract() { - var account = useActiveWeb3React().account; - var isArgentWallet = useIsArgentWallet(); - return useContract(isArgentWallet ? account !== null && account !== void 0 ? account : undefined : undefined, ArgentWalletContractABI, true); -} - -/** - * Returns the swap calls that can be used to make the trade - * @param trade trade to execute - * @param allowedSlippage user allowed slippage - * @param recipientAddressOrName the ENS name or address of the recipient of the swap output - * @param signatureData the signature data of the permit of the input token amount, if available - */ -function useSwapCallArguments(trade, allowedSlippage, recipientAddressOrName, signatureData, deadline) { - var _a = useActiveWeb3React(), account = _a.account, chainId = _a.chainId, library = _a.library; - var recipientAddress = useENS(recipientAddressOrName).address; - var recipient = recipientAddressOrName === null ? account : recipientAddress; - var routerContract = useV2RouterContract(); - var argentWalletContract = useArgentWalletContract(); - return React.useMemo(function () { - if (!trade || !recipient || !library || !account || !chainId || !deadline) - return []; - if (trade instanceof v2Sdk.Trade) { - if (!routerContract) - return []; - var swapMethods = []; - swapMethods.push(v2Sdk.Router.swapCallParameters(trade, { - feeOnTransfer: false, - allowedSlippage: allowedSlippage, - recipient: recipient, - deadline: deadline.toNumber(), - })); - if (trade.tradeType === sdkCore.TradeType.EXACT_INPUT) { - swapMethods.push(v2Sdk.Router.swapCallParameters(trade, { - feeOnTransfer: true, - allowedSlippage: allowedSlippage, - recipient: recipient, - deadline: deadline.toNumber(), - })); - } - return swapMethods.map(function (_a) { - var methodName = _a.methodName, args = _a.args, value = _a.value; - if (argentWalletContract && trade.inputAmount.currency.isToken) { - return { - address: argentWalletContract.address, - calldata: argentWalletContract.interface.encodeFunctionData('wc_multiCall', [ - [ - approveAmountCalldata(trade.maximumAmountIn(allowedSlippage), routerContract.address), - { - to: routerContract.address, - value: value, - data: routerContract.interface.encodeFunctionData(methodName, args), - }, - ], - ]), - value: '0x0', - }; - } - else { - return { - address: routerContract.address, - calldata: routerContract.interface.encodeFunctionData(methodName, args), - value: value, - }; - } - }); - } - else { - // swap options shared by v3 and v2+v3 swap routers - var sharedSwapOptions = __assign({ recipient: recipient, slippageTolerance: allowedSlippage }, (signatureData - ? { - inputTokenPermit: 'allowed' in signatureData - ? { - expiry: signatureData.deadline, - nonce: signatureData.nonce, - s: signatureData.s, - r: signatureData.r, - v: signatureData.v, - } - : { - deadline: signatureData.deadline, - amount: signatureData.amount, - s: signatureData.s, - r: signatureData.r, - v: signatureData.v, - }, - } - : {})); - var swapRouterAddress = chainId - ? trade instanceof v3Sdk.Trade - ? V3_ROUTER_ADDRESS[chainId] - : SWAP_ROUTER_ADDRESSES[chainId] - : undefined; - if (!swapRouterAddress) - return []; - var _a = trade instanceof v3Sdk.Trade - ? v3Sdk.SwapRouter.swapCallParameters(trade, __assign(__assign({}, sharedSwapOptions), { deadline: deadline.toString() })) - : routerSdk.SwapRouter.swapCallParameters(trade, __assign(__assign({}, sharedSwapOptions), { deadlineOrPreviousBlockhash: deadline.toString() })), value = _a.value, calldata = _a.calldata; - if (argentWalletContract && trade.inputAmount.currency.isToken) { - return [ - { - address: argentWalletContract.address, - calldata: argentWalletContract.interface.encodeFunctionData('wc_multiCall', [ - [ - approveAmountCalldata(trade.maximumAmountIn(allowedSlippage), swapRouterAddress), - { - to: swapRouterAddress, - value: value, - data: calldata, - }, - ], - ]), - value: '0x0', - }, - ]; - } - return [ - { - address: swapRouterAddress, - calldata: calldata, - value: value, - }, - ]; - } - }, [ - trade, - recipient, - library, - account, - chainId, - deadline, - routerContract, - allowedSlippage, - argentWalletContract, - signatureData, - ]); -} - -/** - * Returns the gas value plus a margin for unexpected or variable gas costs - * @param value the gas value to pad - */ -function calculateGasMargin(value) { - return value.mul(120).div(100); -} - -/** - * This is hacking out the revert reason from the ethers provider thrown error however it can. - * This object seems to be undocumented by ethers. - * @param error an error from the ethers provider - */ -function swapErrorToUserReadableMessage(error) { - var _a, _b, _c, _d; - var reason; - while (Boolean(error)) { - reason = (_b = (_a = error.reason) !== null && _a !== void 0 ? _a : error.message) !== null && _b !== void 0 ? _b : reason; - error = (_c = error.error) !== null && _c !== void 0 ? _c : (_d = error.data) === null || _d === void 0 ? void 0 : _d.originalError; - } - if ((reason === null || reason === void 0 ? void 0 : reason.indexOf('execution reverted: ')) === 0) - reason = reason.substr('execution reverted: '.length); - switch (reason) { - case 'UniswapV2Router: EXPIRED': - return (jsxRuntime.jsx(macro.Trans, { children: "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low." }, void 0)); - case 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT': - case 'UniswapV2Router: EXCESSIVE_INPUT_AMOUNT': - return (jsxRuntime.jsx(macro.Trans, { children: "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance." }, void 0)); - case 'TransferHelper: TRANSFER_FROM_FAILED': - return jsxRuntime.jsx(macro.Trans, { children: "The input token cannot be transferred. There may be an issue with the input token." }, void 0); - case 'UniswapV2: TRANSFER_FAILED': - return jsxRuntime.jsx(macro.Trans, { children: "The output token cannot be transferred. There may be an issue with the output token." }, void 0); - case 'UniswapV2: K': - return (jsxRuntime.jsx(macro.Trans, { children: "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer." }, void 0)); - case 'Too little received': - case 'Too much requested': - case 'STF': - return (jsxRuntime.jsx(macro.Trans, { children: "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3." }, void 0)); - case 'TF': - return (jsxRuntime.jsx(macro.Trans, { children: "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3." }, void 0)); - default: - if ((reason === null || reason === void 0 ? void 0 : reason.indexOf('undefined is not an object')) !== -1) { - console.error(error, reason); - return (jsxRuntime.jsx(macro.Trans, { children: "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3." }, void 0)); - } - return (jsxRuntime.jsxs(macro.Trans, { children: ["Unknown error", reason ? ": \"" + reason + "\"" : '', ". Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3."] }, void 0)); - } -} - -// returns a function that will execute a swap, if the parameters are all valid -function useSendSwapTransaction(account, chainId, library, trade, // trade to execute, required -swapCalls) { - return React.useMemo(function () { - if (!trade || !library || !account || !chainId) { - return { callback: null }; - } - return { - callback: function onSwap() { - return __awaiter(this, void 0, void 0, function () { - var estimatedCalls, bestCallOption, errorCalls, firstNoErrorCall, _a, address, calldata, value; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, Promise.all(swapCalls.map(function (call) { - var address = call.address, calldata = call.calldata, value = call.value; - var tx = !value || isZero(value) - ? { from: account, to: address, data: calldata } - : { - from: account, - to: address, - data: calldata, - value: value, - }; - return library - .estimateGas(tx) - .then(function (gasEstimate) { - return { - call: call, - gasEstimate: gasEstimate, - }; - }) - .catch(function (gasError) { - console.debug('Gas estimate failed, trying eth_call to extract error', call); - return library - .call(tx) - .then(function (result) { - console.debug('Unexpected successful call after failed estimate gas', call, gasError, result); - return { call: call, error: jsxRuntime.jsx(macro.Trans, { children: "Unexpected issue with estimating the gas. Please try again." }, void 0) }; - }) - .catch(function (callError) { - console.debug('Call threw error', call, callError); - return { call: call, error: swapErrorToUserReadableMessage(callError) }; - }); - }); - })) - // a successful estimation is a bignumber gas estimate and the next call is also a bignumber gas estimate - ]; - case 1: - estimatedCalls = _b.sent(); - bestCallOption = estimatedCalls.find(function (el, ix, list) { - return 'gasEstimate' in el && (ix === list.length - 1 || 'gasEstimate' in list[ix + 1]); - }); - // check if any calls errored with a recognizable error - if (!bestCallOption) { - errorCalls = estimatedCalls.filter(function (call) { return 'error' in call; }); - if (errorCalls.length > 0) - throw errorCalls[errorCalls.length - 1].error; - firstNoErrorCall = estimatedCalls.find(function (call) { return !('error' in call); }); - if (!firstNoErrorCall) - throw new Error(macro.t(templateObject_1$A || (templateObject_1$A = __makeTemplateObject(["Unexpected error. Could not estimate gas for the swap."], ["Unexpected error. Could not estimate gas for the swap."])))); - bestCallOption = firstNoErrorCall; - } - _a = bestCallOption.call, address = _a.address, calldata = _a.calldata, value = _a.value; - return [2 /*return*/, library - .getSigner() - .sendTransaction(__assign(__assign({ from: account, to: address, data: calldata }, ('gasEstimate' in bestCallOption ? { gasLimit: calculateGasMargin(bestCallOption.gasEstimate) } : {})), (value && !isZero(value) ? { value: value } : {}))) - .then(function (response) { - return response; - }) - .catch(function (error) { - // if the user rejected the tx, pass this along - if ((error === null || error === void 0 ? void 0 : error.code) === 4001) { - throw new Error(macro.t(templateObject_2$m || (templateObject_2$m = __makeTemplateObject(["Transaction rejected."], ["Transaction rejected."])))); - } - else { - // otherwise, the error was unexpected and we need to convey that - console.error("Swap failed", error, address, calldata, value); - throw new Error(macro.t(templateObject_3$h || (templateObject_3$h = __makeTemplateObject(["Swap failed: ", ""], ["Swap failed: ", ""])), swapErrorToUserReadableMessage(error))); - } - })]; - } - }); - }); - }, - }; - }, [account, chainId, library, swapCalls, trade]); -} -var templateObject_1$A, templateObject_2$m, templateObject_3$h; - -var SwapCallbackState; -(function (SwapCallbackState) { - SwapCallbackState[SwapCallbackState["INVALID"] = 0] = "INVALID"; - SwapCallbackState[SwapCallbackState["LOADING"] = 1] = "LOADING"; - SwapCallbackState[SwapCallbackState["VALID"] = 2] = "VALID"; -})(SwapCallbackState || (SwapCallbackState = {})); -// returns a function that will execute a swap, if the parameters are all valid -// and the user has approved the slippage adjusted input amount for the trade -function useSwapCallback$1(trade, // trade to execute, required -allowedSlippage, // in bips -recipientAddressOrName, // the ENS name or address of the recipient of the trade, or null if swap should be returned to sender -signatureData, deadline) { - var _a = useActiveWeb3React(), account = _a.account, chainId = _a.chainId, library = _a.library; - var swapCalls = useSwapCallArguments(trade, allowedSlippage, recipientAddressOrName, signatureData, deadline); - var callback = useSendSwapTransaction(account, chainId, library, trade, swapCalls).callback; - var recipientAddress = useENS(recipientAddressOrName).address; - var recipient = recipientAddressOrName === null ? account : recipientAddress; - return React.useMemo(function () { - if (!trade || !library || !account || !chainId || !callback) { - return { state: SwapCallbackState.INVALID, callback: null, error: jsxRuntime.jsx(macro.Trans, { children: "Missing dependencies" }, void 0) }; - } - if (!recipient) { - if (recipientAddressOrName !== null) { - return { state: SwapCallbackState.INVALID, callback: null, error: jsxRuntime.jsx(macro.Trans, { children: "Invalid recipient" }, void 0) }; - } - else { - return { state: SwapCallbackState.LOADING, callback: null, error: null }; - } - } - return { - state: SwapCallbackState.VALID, - callback: function onSwap() { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, callback().then(function (response) { - return response; - })]; - }); - }); - }, - error: null, - }; - }, [trade, library, account, chainId, callback, recipient, recipientAddressOrName]); -} - -/** - * Be careful adding to this enum, always assign a unique value (typescript will not prevent duplicate values). - * These values is persisted in state and if you change the value it will cause errors - */ -var TransactionType; -(function (TransactionType) { - TransactionType[TransactionType["APPROVAL"] = 0] = "APPROVAL"; - TransactionType[TransactionType["SWAP"] = 1] = "SWAP"; - TransactionType[TransactionType["DEPOSIT_LIQUIDITY_STAKING"] = 2] = "DEPOSIT_LIQUIDITY_STAKING"; - TransactionType[TransactionType["WITHDRAW_LIQUIDITY_STAKING"] = 3] = "WITHDRAW_LIQUIDITY_STAKING"; - TransactionType[TransactionType["CLAIM"] = 4] = "CLAIM"; - TransactionType[TransactionType["VOTE"] = 5] = "VOTE"; - TransactionType[TransactionType["DELEGATE"] = 6] = "DELEGATE"; - TransactionType[TransactionType["WRAP"] = 7] = "WRAP"; - TransactionType[TransactionType["CREATE_V3_POOL"] = 8] = "CREATE_V3_POOL"; - TransactionType[TransactionType["ADD_LIQUIDITY_V3_POOL"] = 9] = "ADD_LIQUIDITY_V3_POOL"; - TransactionType[TransactionType["ADD_LIQUIDITY_V2_POOL"] = 10] = "ADD_LIQUIDITY_V2_POOL"; - TransactionType[TransactionType["MIGRATE_LIQUIDITY_V3"] = 11] = "MIGRATE_LIQUIDITY_V3"; - TransactionType[TransactionType["COLLECT_FEES"] = 12] = "COLLECT_FEES"; - TransactionType[TransactionType["REMOVE_LIQUIDITY_V3"] = 13] = "REMOVE_LIQUIDITY_V3"; - TransactionType[TransactionType["SUBMIT_PROPOSAL"] = 14] = "SUBMIT_PROPOSAL"; -})(TransactionType || (TransactionType = {})); -var addTransaction = toolkit.createAction('transactions/addTransaction'); -var clearAllTransactions = toolkit.createAction('transactions/clearAllTransactions'); -var finalizeTransaction = toolkit.createAction('transactions/finalizeTransaction'); -var checkedTransaction = toolkit.createAction('transactions/checkedTransaction'); - -var SUPPORTED_TRANSACTION_TYPES = [ - TransactionType.ADD_LIQUIDITY_V2_POOL, - TransactionType.ADD_LIQUIDITY_V3_POOL, - TransactionType.CREATE_V3_POOL, - TransactionType.REMOVE_LIQUIDITY_V3, - TransactionType.SWAP, -]; -var FIREBASE_API_KEY = process.env.REACT_APP_FIREBASE_KEY; -var firebaseEnabled = typeof FIREBASE_API_KEY !== 'undefined'; -if (firebaseEnabled) - initializeFirebase(); -function useMonitoringEventCallback() { - var chainId = useActiveWeb3React().chainId; - return React.useCallback(function log(type, _a) { - var transactionResponse = _a.transactionResponse, walletAddress = _a.walletAddress; - return __awaiter(this, void 0, void 0, function () { - var db; - return __generator(this, function (_b) { - if (!firebaseEnabled) - return [2 /*return*/]; - db = database.getDatabase(); - if (!walletAddress) { - console.debug('Wallet address required to log monitoring events.'); - return [2 /*return*/]; - } - try { - database.push(database.ref(db, 'trm'), { - chainId: chainId, - origin: window.location.origin, - timestamp: Date.now(), - tx: transactionResponse, - type: type, - walletAddress: walletAddress, - }); - } - catch (e) { - console.debug('Error adding document: ', e); - } - return [2 /*return*/]; - }); - }); - }, [chainId]); -} -function useTransactionMonitoringEventCallback() { - var account = useActiveWeb3React().account; - var log = useMonitoringEventCallback(); - return React.useCallback(function (info, transactionResponse) { - if (SUPPORTED_TRANSACTION_TYPES.includes(info.type)) { - log(TransactionType[info.type], { - transactionResponse: (function (_a) { - var hash = _a.hash, v = _a.v, r = _a.r, s = _a.s; - return ({ hash: hash, v: v, r: r, s: s }); - })(transactionResponse), - walletAddress: account !== null && account !== void 0 ? account : undefined, - }); - } - }, [account, log]); -} -function initializeFirebase() { - app.initializeApp({ - apiKey: process.env.REACT_APP_FIREBASE_KEY, - authDomain: 'interface-monitoring.firebaseapp.com', - databaseURL: 'https://interface-monitoring-default-rtdb.firebaseio.com', - projectId: 'interface-monitoring', - storageBucket: 'interface-monitoring.appspot.com', - messagingSenderId: '968187720053', - appId: '1:968187720053:web:acedf72dce629d470be33c', - }); -} - -// helper that can take a ethers library transaction response and add it to the list of transactions -function useTransactionAdder() { - var _a = useActiveWeb3React(), chainId = _a.chainId, account = _a.account; - var dispatch = useAppDispatch(); - var logMonitoringEvent = useTransactionMonitoringEventCallback(); - return React.useCallback(function (response, info) { - if (!account) - return; - if (!chainId) - return; - var hash = response.hash; - if (!hash) { - throw Error('No transaction hash found.'); - } - dispatch(addTransaction({ hash: hash, from: account, info: info, chainId: chainId })); - logMonitoringEvent(info, response); - }, [account, chainId, dispatch, logMonitoringEvent]); -} -// returns all the transactions for the current chain -function useAllTransactions() { - var _a; - var chainId = useActiveWeb3React().chainId; - var state = useAppSelector(function (state) { return state.transactions; }); - return chainId ? (_a = state[chainId]) !== null && _a !== void 0 ? _a : {} : {}; -} -function useTransaction(transactionHash) { - var allTransactions = useAllTransactions(); - if (!transactionHash) { - return undefined; - } - return allTransactions[transactionHash]; -} -function useIsTransactionConfirmed(transactionHash) { - var transactions = useAllTransactions(); - if (!transactionHash || !transactions[transactionHash]) - return false; - return Boolean(transactions[transactionHash].receipt); -} -/** - * Returns whether a transaction happened in the last day (86400 seconds * 1000 milliseconds / second) - * @param tx to check for recency - */ -function isTransactionRecent(tx) { - return new Date().getTime() - tx.addedTime < 86400000; -} -// returns whether a token has a pending approval transaction -function useHasPendingApproval(token, spender) { - var allTransactions = useAllTransactions(); - return React.useMemo(function () { - return typeof (token === null || token === void 0 ? void 0 : token.address) === 'string' && - typeof spender === 'string' && - Object.keys(allTransactions).some(function (hash) { - var tx = allTransactions[hash]; - if (!tx) - return false; - if (tx.receipt) { - return false; - } - else { - if (tx.info.type !== TransactionType.APPROVAL) - return false; - return tx.info.spender === spender && tx.info.tokenAddress === token.address && isTransactionRecent(tx); - } - }); - }, [allTransactions, spender, token === null || token === void 0 ? void 0 : token.address]); -} - -function currencyId(currency) { - if (currency.isNative) - return 'ETH'; - if (currency.isToken) - return currency.address; - throw new Error('invalid currency'); -} - -// gets the current timestamp from the blockchain -function useCurrentBlockTimestamp() { - var _a, _b; - var multicall = useInterfaceMulticall(); - return (_b = (_a = useSingleCallResult(multicall, 'getCurrentBlockTimestamp')) === null || _a === void 0 ? void 0 : _a.result) === null || _b === void 0 ? void 0 : _b[0]; -} - -// combines the block timestamp with the user setting to give the deadline that should be used for any submitted transaction -function useTransactionDeadline() { - var chainId = useActiveWeb3React().chainId; - var ttl = useAppSelector(function (state) { return state.user.userDeadline; }); - var blockTimestamp = useCurrentBlockTimestamp(); - return React.useMemo(function () { - if (blockTimestamp && chainId && L2_CHAIN_IDS.includes(chainId)) - return blockTimestamp.add(L2_DEADLINE_FROM_NOW); - if (blockTimestamp && ttl) - return blockTimestamp.add(ttl); - return undefined; - }, [blockTimestamp, chainId, ttl]); -} - -// eslint-disable-next-line no-restricted-imports -// returns a function that will execute a swap, if the parameters are all valid -// and the user has approved the slippage adjusted input amount for the trade -function useSwapCallback(trade, // trade to execute, required -allowedSlippage, // in bips -recipientAddressOrName, // the ENS name or address of the recipient of the trade, or null if swap should be returned to sender -signatureData) { - var account = useActiveWeb3React().account; - var deadline = useTransactionDeadline(); - var addTransaction = useTransactionAdder(); - var recipientAddress = useENS(recipientAddressOrName).address; - var recipient = recipientAddressOrName === null ? account : recipientAddress; - var _a = useSwapCallback$1(trade, allowedSlippage, recipient, signatureData, deadline), state = _a.state, libCallback = _a.callback, error = _a.error; - var callback = React.useMemo(function () { - if (!libCallback || !trade) { - return null; - } - return function () { - return libCallback().then(function (response) { - addTransaction(response, trade.tradeType === sdkCore.TradeType.EXACT_INPUT - ? { - type: TransactionType.SWAP, - tradeType: sdkCore.TradeType.EXACT_INPUT, - inputCurrencyId: currencyId(trade.inputAmount.currency), - inputCurrencyAmountRaw: trade.inputAmount.quotient.toString(), - expectedOutputCurrencyAmountRaw: trade.outputAmount.quotient.toString(), - outputCurrencyId: currencyId(trade.outputAmount.currency), - minimumOutputCurrencyAmountRaw: trade.minimumAmountOut(allowedSlippage).quotient.toString(), - } - : { - type: TransactionType.SWAP, - tradeType: sdkCore.TradeType.EXACT_OUTPUT, - inputCurrencyId: currencyId(trade.inputAmount.currency), - maximumInputCurrencyAmountRaw: trade.maximumAmountIn(allowedSlippage).quotient.toString(), - outputCurrencyId: currencyId(trade.outputAmount.currency), - outputCurrencyAmountRaw: trade.outputAmount.quotient.toString(), - expectedInputCurrencyAmountRaw: trade.inputAmount.quotient.toString(), - }); - return response.hash; - }); - }; - }, [addTransaction, allowedSlippage, libCallback, trade]); - return { - state: state, - callback: callback, - error: error, - }; -} - -var InputPanel$1 = styled__default["default"].div(templateObject_1$z || (templateObject_1$z = __makeTemplateObject(["\n ", "\n position: relative;\n border-radius: 1.25rem;\n background-color: ", ";\n z-index: 1;\n width: 100%;\n"], ["\n ", "\n position: relative;\n border-radius: 1.25rem;\n background-color: ", ";\n z-index: 1;\n width: 100%;\n"])), function (_a) { - var theme = _a.theme; - return theme.flexColumnNoWrap; -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}); -var ContainerRow = styled__default["default"].div(templateObject_2$l || (templateObject_2$l = __makeTemplateObject(["\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 1.25rem;\n border: 1px solid ", ";\n transition: border-color 300ms ", ",\n color 500ms ", ";\n background-color: ", ";\n"], ["\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 1.25rem;\n border: 1px solid ", ";\n transition: border-color 300ms ", ",\n color 500ms ", ";\n background-color: ", ";\n"])), function (_a) { - var error = _a.error, theme = _a.theme; - return (error ? theme.red1 : theme.bg2); -}, function (_a) { - var error = _a.error; - return (error ? 'step-end' : 'step-start'); -}, function (_a) { - var error = _a.error; - return (error ? 'step-end' : 'step-start'); -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}); -var InputContainer = styled__default["default"].div(templateObject_3$g || (templateObject_3$g = __makeTemplateObject(["\n flex: 1;\n padding: 1rem;\n"], ["\n flex: 1;\n padding: 1rem;\n"]))); -var Input$2 = styled__default["default"].input(templateObject_4$a || (templateObject_4$a = __makeTemplateObject(["\n font-size: 1.25rem;\n outline: none;\n border: none;\n flex: 1 1 auto;\n width: 0;\n background-color: ", ";\n transition: color 300ms ", ";\n color: ", ";\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 500;\n width: 100%;\n ::placeholder {\n color: ", ";\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: ", ";\n }\n"], ["\n font-size: 1.25rem;\n outline: none;\n border: none;\n flex: 1 1 auto;\n width: 0;\n background-color: ", ";\n transition: color 300ms ", ";\n color: ", ";\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 500;\n width: 100%;\n ::placeholder {\n color: ", ";\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: ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var error = _a.error; - return (error ? 'step-end' : 'step-start'); -}, function (_a) { - var error = _a.error, theme = _a.theme; - return (error ? theme.red1 : theme.text1); -}, function (_a) { - var theme = _a.theme; - return theme.text4; -}, function (_a) { - var theme = _a.theme; - return theme.text4; -}); -function AddressInputPanel(_a) { - var id = _a.id, _b = _a.className, className = _b === void 0 ? 'recipient-address-input' : _b, label = _a.label, placeholder = _a.placeholder, value = _a.value, onChange = _a.onChange; - var chainId = useActiveWeb3React().chainId; - var theme = React.useContext(styled.ThemeContext); - var _c = useENS(value), address = _c.address, loading = _c.loading, name = _c.name; - var handleInput = React.useCallback(function (event) { - var input = event.target.value; - var withoutSpaces = input.replace(/\s+/g, ''); - onChange(withoutSpaces); - }, [onChange]); - var error = Boolean(value.length > 0 && !loading && !address); - return (jsxRuntime.jsx(InputPanel$1, __assign({ id: id }, { children: jsxRuntime.jsx(ContainerRow, __assign({ error: error }, { children: jsxRuntime.jsx(InputContainer, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "md" }, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(ThemedText.Black, __assign({ color: theme.text2, fontWeight: 500, fontSize: 14 }, { children: label !== null && label !== void 0 ? label : jsxRuntime.jsx(macro.Trans, { children: "Recipient" }, void 0) }), void 0), address && chainId && (jsxRuntime.jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, name !== null && name !== void 0 ? name : address, ExplorerDataType.ADDRESS), style: { fontSize: '14px' } }, { children: jsxRuntime.jsx(macro.Trans, { children: "(View on Explorer)" }, void 0) }), void 0))] }, void 0), jsxRuntime.jsx(Input$2, { className: className, type: "text", autoComplete: "off", autoCorrect: "off", autoCapitalize: "off", spellCheck: "false", placeholder: placeholder !== null && placeholder !== void 0 ? placeholder : macro.t(templateObject_5$9 || (templateObject_5$9 = __makeTemplateObject(["Wallet Address or ENS name"], ["Wallet Address or ENS name"]))), error: error, pattern: "^(0x[a-fA-F0-9]{40})$", onChange: handleInput, value: value }, void 0)] }), void 0) }, void 0) }), void 0) }), void 0)); -} -var templateObject_1$z, templateObject_2$l, templateObject_3$g, templateObject_4$a, templateObject_5$9; - -function formatCurrencyAmount(amount, sigFigs) { - if (!amount) { - return '-'; - } - if (JSBI__default["default"].equal(amount.quotient, JSBI__default["default"].BigInt(0))) { - return '0'; - } - if (amount.divide(amount.decimalScale).lessThan(new sdkCore.Fraction(1, 100000))) { - return '<0.00001'; - } - return amount.toSignificant(sigFigs); -} - -var _path; - -function _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); } - -var SvgDropdown = function SvgDropdown(props) { - return /*#__PURE__*/React__namespace.createElement("svg", _extends({ - width: 12, - height: 7, - viewBox: "0 0 12 7", - fill: "none", - xmlns: "http://www.w3.org/2000/svg" - }, props), _path || (_path = /*#__PURE__*/React__namespace.createElement("path", { - d: "M0.97168 1L6.20532 6L11.439 1", - stroke: "#AEAEAE" - }))); -}; - -new abi$6.Interface(abi$5); -({ - 1: [ - { - tokens: [WRAPPED_NATIVE_CURRENCY[1], DAI], - stakingRewardAddress: '0xa1484C3aa22a66C62b77E0AE78E15258bd0cB711', - }, - { - tokens: [WRAPPED_NATIVE_CURRENCY[1], USDC], - stakingRewardAddress: '0x7FBa4B8Dc5E7616e59622806932DBea72537A56b', - }, - { - tokens: [WRAPPED_NATIVE_CURRENCY[1], USDT], - stakingRewardAddress: '0x6C3e4cb2E96B01F4b866965A91ed4437839A121a', - }, - { - tokens: [WRAPPED_NATIVE_CURRENCY[1], WBTC], - stakingRewardAddress: '0xCA35e32e7926b96A9988f61d510E038108d8068e', - }, - ], -}); - -// mimics useAllBalances -function useAllTokenBalances() { - var account = useActiveWeb3React().account; - var allTokens = useAllTokens(); - var allTokensArray = React.useMemo(function () { return Object.values(allTokens !== null && allTokens !== void 0 ? allTokens : {}); }, [allTokens]); - var balances = useTokenBalances(account !== null && account !== void 0 ? account : undefined, allTokensArray); - return balances !== null && balances !== void 0 ? balances : {}; -} - -var StyledInput = styled__default["default"].input(templateObject_1$y || (templateObject_1$y = __makeTemplateObject(["\n color: ", ";\n width: 0;\n position: relative;\n font-weight: 500;\n outline: none;\n border: none;\n flex: 1 1 auto;\n background-color: ", ";\n font-size: ", ";\n text-align: ", ";\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 0px;\n -webkit-appearance: textfield;\n text-align: right;\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: ", ";\n }\n"], ["\n color: ", ";\n width: 0;\n position: relative;\n font-weight: 500;\n outline: none;\n border: none;\n flex: 1 1 auto;\n background-color: ", ";\n font-size: ", ";\n text-align: ", ";\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 0px;\n -webkit-appearance: textfield;\n text-align: right;\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: ", ";\n }\n"])), function (_a) { - var error = _a.error, theme = _a.theme; - return (error ? theme.red1 : theme.text1); -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var fontSize = _a.fontSize; - return fontSize !== null && fontSize !== void 0 ? fontSize : '28px'; -}, function (_a) { - var align = _a.align; - return align && align; -}, function (_a) { - var theme = _a.theme; - return theme.text4; -}); -var inputRegex = RegExp("^\\d*(?:\\\\[.])?\\d*$"); // match escaped "." characters via in a non-capturing group -var Input$1 = React__default["default"].memo(function InnerInput(_a) { - var value = _a.value, onUserInput = _a.onUserInput, placeholder = _a.placeholder, prependSymbol = _a.prependSymbol, rest = __rest(_a, ["value", "onUserInput", "placeholder", "prependSymbol"]); - var enforcer = function (nextUserInput) { - if (nextUserInput === '' || inputRegex.test(escapeRegExp(nextUserInput))) { - onUserInput(nextUserInput); - } - }; - return (jsxRuntime.jsx(StyledInput, __assign({}, rest, { value: prependSymbol && value ? prependSymbol + value : value, onChange: function (event) { - if (prependSymbol) { - var value_1 = event.target.value; - // cut off prepended symbol - var formattedValue = value_1.toString().includes(prependSymbol) - ? value_1.toString().slice(1, value_1.toString().length + 1) - : value_1; - // replace commas with periods, because uniswap exclusively uses period as the decimal separator - enforcer(formattedValue.replace(/,/g, '.')); - } - else { - enforcer(event.target.value.replace(/,/g, '.')); - } - }, - // universal input options - inputMode: "decimal", autoComplete: "off", autoCorrect: "off", - // text-specific options - type: "text", pattern: "^[0-9]*[.,]?[0-9]*$", placeholder: placeholder || '0.0', minLength: 1, maxLength: 79, spellCheck: "false" }), void 0)); -}); -var templateObject_1$y; - -// modified from https://usehooks.com/usePrevious/ -function usePrevious(value) { - // The ref object is a generic container whose current property is mutable ... - // ... and can hold any value, similar to an instance property on a class - var ref = React.useRef(); - // Store current value in ref - React.useEffect(function () { - ref.current = value; - }, [value]); // Only re-run if value changes - // Return previous value (happens before update in useEffect above) - return ref.current; -} - -/** - * Returns the last value of type T that passes a filter function - * @param value changing value - * @param filterFn function that determines whether a given value should be considered for the last value - */ -function useLast(value, filterFn) { - var _a = __read(React.useState(filterFn && filterFn(value) ? value : undefined), 2), last = _a[0], setLast = _a[1]; - React.useEffect(function () { - setLast(function (last) { - var shouldUse = filterFn ? filterFn(value) : true; - if (shouldUse) - return value; - return last; - }); - }, [filterFn, value]); - return last; -} - -function useOnClickOutside(node, handler) { - var handlerRef = React.useRef(handler); - React.useEffect(function () { - handlerRef.current = handler; - }, [handler]); - React.useEffect(function () { - var handleClickOutside = function (e) { - var _a, _b; - if ((_b = (_a = node.current) === null || _a === void 0 ? void 0 : _a.contains(e.target)) !== null && _b !== void 0 ? _b : false) { - return; - } - if (handlerRef.current) - handlerRef.current(); - }; - document.addEventListener('mousedown', handleClickOutside); - return function () { - document.removeEventListener('mousedown', handleClickOutside); - }; - }, [node]); -} - -function useToggle(initialState) { - if (initialState === void 0) { initialState = false; } - var _a = __read(React.useState(initialState), 2), state = _a[0], setState = _a[1]; - var toggle = React.useCallback(function () { return setState(function (state) { return !state; }); }, []); - return [state, toggle]; -} - -var MobileWrapper = styled__default["default"](AutoColumn)(templateObject_2$k || (templateObject_2$k = __makeTemplateObject(["\n ", ";\n"], ["\n ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToSmall(templateObject_1$x || (templateObject_1$x = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); -}); -var BaseWrapper = styled__default["default"].div(templateObject_3$f || (templateObject_3$f = __makeTemplateObject(["\n border: 1px solid ", ";\n border-radius: 10px;\n display: flex;\n padding: 6px;\n\n align-items: center;\n :hover {\n cursor: ", ";\n background-color: ", ";\n }\n\n color: ", ";\n background-color: ", ";\n filter: ", ";\n"], ["\n border: 1px solid ", ";\n border-radius: 10px;\n display: flex;\n padding: 6px;\n\n align-items: center;\n :hover {\n cursor: ", ";\n background-color: ", ";\n }\n\n color: ", ";\n background-color: ", ";\n filter: ", ";\n"])), function (_a) { - var theme = _a.theme, disable = _a.disable; - return (disable ? 'transparent' : theme.bg3); -}, function (_a) { - var disable = _a.disable; - return !disable && 'pointer'; -}, function (_a) { - var theme = _a.theme, disable = _a.disable; - return !disable && theme.bg2; -}, function (_a) { - var theme = _a.theme, disable = _a.disable; - return disable && theme.text3; -}, function (_a) { - var theme = _a.theme, disable = _a.disable; - return disable && theme.bg3; -}, function (_a) { - var disable = _a.disable; - return disable && 'grayscale(1)'; -}); -function CommonBases(_a) { - var _b; - var chainId = _a.chainId, onSelect = _a.onSelect, selectedCurrency = _a.selectedCurrency; - var bases = typeof chainId !== 'undefined' ? (_b = COMMON_BASES[chainId]) !== null && _b !== void 0 ? _b : [] : []; - return bases.length > 0 ? (jsxRuntime.jsx(MobileWrapper, __assign({ gap: "md" }, { children: jsxRuntime.jsx(AutoRow, __assign({ gap: "4px" }, { children: bases.map(function (currency) { - var isSelected = selectedCurrency === null || selectedCurrency === void 0 ? void 0 : selectedCurrency.equals(currency); - return (jsxRuntime.jsxs(BaseWrapper, __assign({ onClick: function () { return !isSelected && onSelect(currency); }, disable: isSelected }, { children: [jsxRuntime.jsx(CurrencyLogoFromList, { currency: currency }, void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 16 }, { children: currency.symbol }), void 0)] }), currencyId(currency))); - }) }), void 0) }), void 0)) : null; -} -/** helper component to retrieve a base currency from the active token lists */ -function CurrencyLogoFromList(_a) { - var currency = _a.currency; - var token = useTokenInfoFromActiveList(currency); - return jsxRuntime.jsx(CurrencyLogo, { currency: token, style: { marginRight: 8 } }, void 0); -} -var templateObject_1$x, templateObject_2$k, templateObject_3$f; - -var QuestionWrapper = styled__default["default"].div(templateObject_1$w || (templateObject_1$w = __makeTemplateObject(["\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0px;\n width: 18px;\n height: 18px;\n border: none;\n background: none;\n outline: none;\n cursor: default;\n border-radius: 36px;\n font-size: 12px;\n background-color: ", ";\n color: ", ";\n\n :hover,\n :focus {\n opacity: 0.7;\n }\n"], ["\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0px;\n width: 18px;\n height: 18px;\n border: none;\n background: none;\n outline: none;\n cursor: default;\n border-radius: 36px;\n font-size: 12px;\n background-color: ", ";\n color: ", ";\n\n :hover,\n :focus {\n opacity: 0.7;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}, function (_a) { - var theme = _a.theme; - return theme.text2; -}); -var QuestionMark = styled__default["default"].span(templateObject_2$j || (templateObject_2$j = __makeTemplateObject(["\n font-size: 14px;\n"], ["\n font-size: 14px;\n"]))); -function QuestionHelper(_a) { - var text = _a.text; - var _b = __read(React.useState(false), 2), show = _b[0], setShow = _b[1]; - var open = React.useCallback(function () { return setShow(true); }, [setShow]); - var close = React.useCallback(function () { return setShow(false); }, [setShow]); - return (jsxRuntime.jsx("span", __assign({ style: { marginLeft: 4, display: 'flex', alignItems: 'center' } }, { children: jsxRuntime.jsx(Tooltip, __assign({ text: text, show: show }, { children: jsxRuntime.jsx(QuestionWrapper, __assign({ onClick: open, onMouseEnter: open, onMouseLeave: close }, { children: jsxRuntime.jsx(QuestionMark, { children: "?" }, void 0) }), void 0) }), void 0) }), void 0)); -} -var templateObject_1$w, templateObject_2$j; - -var TokenListLogo = "data:image/svg+xml,%3Csvg%20width%3D%22225%22%20height%3D%22225%22%20viewBox%3D%220%200%20225%20225%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M74.8125%20190.529C65.7561%20190.513%2055.5298%20183.748%2051.9715%20175.42L19.9417%20100.456C16.3834%2092.1277%2020.8404%2085.39%2029.8968%2085.4068L111.417%2085.5579C120.473%2085.5747%20130.699%2092.3395%20134.258%20100.668L166.288%20175.632C169.846%20183.96%20165.389%20190.697%20156.332%20190.681L74.8125%20190.529Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint0_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint1_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint2_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint3_radial%29%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M92.958%20165.95C82.7695%20165.931%2071.265%20158.321%2067.2619%20148.952L26.2489%2052.9632C22.2458%2043.5941%2027.26%2036.0143%2037.4485%2036.0332L141.832%2036.2266C152.02%2036.2455%20163.525%2043.8559%20167.528%2053.225L208.541%20149.214C212.544%20158.583%20207.53%20166.163%20197.341%20166.144L92.958%20165.95ZM71.3614%20148.959C74.475%20156.246%2083.4229%20162.166%2091.3473%20162.18L195.73%20162.374C203.655%20162.388%20207.555%20156.493%20204.441%20149.206L163.428%2053.2174C160.315%2045.9304%20151.367%2040.0111%20143.442%2039.9964L39.0592%2039.803C31.1349%2039.7883%2027.2349%2045.6837%2030.3485%2052.9708L71.3614%20148.959Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M68.565%2053.3425C81.1781%2053.3659%2095.4205%2062.7875%20100.376%2074.3862C105.332%2085.985%2099.1246%2095.3687%2086.5115%2095.3454C73.8984%2095.322%2059.6559%2085.9004%2054.7001%2074.3016C49.7443%2062.7028%2055.9518%2053.3191%2068.565%2053.3425Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M90.6891%20104.981C103.302%20105.004%20117.545%20114.425%20122.5%20126.024C127.456%20137.623%20121.249%20147.007%20108.636%20146.983C96.0225%20146.96%2081.7801%20137.538%2076.8243%20125.94C71.8685%20114.341%2078.076%20104.957%2090.6891%20104.981Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M147.538%20105.142C160.151%20105.166%20174.394%20114.587%20179.349%20126.186C184.305%20137.785%20178.098%20147.168%20165.485%20147.145C152.871%20147.122%20138.629%20137.7%20133.673%20126.101C128.717%20114.503%20134.925%20105.119%20147.538%20105.142Z%22%20fill%3D%22%23131313%22%2F%3E%3Cdefs%3E%3CradialGradient%20id%3D%22paint0_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%28134.41%2068.3006%29%20rotate%28-33.9533%29%20scale%2890.6795%2083.3208%29%22%3E%3Cstop%20offset%3D%220.661458%22%20stop-color%3D%22%23C4FCF8%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint1_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%2842.7873%20129.218%29%20rotate%28-24.1606%29%20scale%28213.359%20196.045%29%22%3E%3Cstop%20stop-color%3D%22%23FF0099%22%20stop-opacity%3D%220.9%22%2F%3E%3Cstop%20offset%3D%220.770833%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint2_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%28176.854%20148.655%29%20rotate%28-53.4908%29%20scale%28107.342%2098.6309%29%22%3E%3Cstop%20stop-color%3D%22%23FFEC43%22%2F%3E%3Cstop%20offset%3D%220.805707%22%20stop-color%3D%22%23FFF6A8%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint3_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%2857.5443%2053.4752%29%20rotate%2820.3896%29%20scale%28137.027%20125.907%29%22%3E%3Cstop%20offset%3D%220.125%22%20stop-color%3D%22%235886FE%22%20stop-opacity%3D%220.46%22%2F%3E%3Cstop%20offset%3D%220.673044%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3C%2Fdefs%3E%3C%2Fsvg%3E"; - -var rotate = styled.keyframes(templateObject_1$v || (templateObject_1$v = __makeTemplateObject(["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"], ["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"]))); -var StyledSVG = styled__default["default"].svg(templateObject_2$i || (templateObject_2$i = __makeTemplateObject(["\n animation: 2s ", " linear infinite;\n height: ", ";\n width: ", ";\n path {\n stroke: ", ";\n }\n"], ["\n animation: 2s ", " linear infinite;\n height: ", ";\n width: ", ";\n path {\n stroke: ", ";\n }\n" - /** - * Takes in custom size and stroke for circle color, default to primary color as fill, - * need ...rest for layered styles on top - */ -])), rotate, function (_a) { - var size = _a.size; - return size; -}, function (_a) { - var size = _a.size; - return size; -}, function (_a) { - var stroke = _a.stroke, theme = _a.theme; - return stroke !== null && stroke !== void 0 ? stroke : theme.primary1; -}); -/** - * Takes in custom size and stroke for circle color, default to primary color as fill, - * need ...rest for layered styles on top - */ -function Loader(_a) { - var _b = _a.size, size = _b === void 0 ? '16px' : _b, stroke = _a.stroke, rest = __rest(_a, ["size", "stroke"]); - return (jsxRuntime.jsx(StyledSVG, __assign({ viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", size: size, stroke: stroke }, rest, { children: jsxRuntime.jsx("path", { d: "M12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22C17.5228 22 22 17.5228 22 12C22 9.27455 20.9097 6.80375 19.1414 5", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round" }, void 0) }), void 0)); -} -var templateObject_1$v, templateObject_2$i; - -var StyledListLogo = styled__default["default"](Logo)(templateObject_1$u || (templateObject_1$u = __makeTemplateObject(["\n width: ", ";\n height: ", ";\n"], ["\n width: ", ";\n height: ", ";\n"])), function (_a) { - var size = _a.size; - return size; -}, function (_a) { - var size = _a.size; - return size; -}); -function ListLogo(_a) { - var logoURI = _a.logoURI, style = _a.style, _b = _a.size, size = _b === void 0 ? '24px' : _b, alt = _a.alt; - var srcs = useHttpLocations(logoURI); - return jsxRuntime.jsx(StyledListLogo, { alt: alt, size: size, srcs: srcs, style: style }, void 0); -} -var templateObject_1$u; - -var TokenSection = styled__default["default"].div(templateObject_1$t || (templateObject_1$t = __makeTemplateObject(["\n padding: 4px 20px;\n height: 56px;\n display: grid;\n grid-template-columns: auto minmax(auto, 1fr) auto;\n grid-gap: 16px;\n align-items: center;\n\n opacity: ", ";\n"], ["\n padding: 4px 20px;\n height: 56px;\n display: grid;\n grid-template-columns: auto minmax(auto, 1fr) auto;\n grid-gap: 16px;\n align-items: center;\n\n opacity: ", ";\n"])), function (_a) { - var dim = _a.dim; - return (dim ? '0.4' : '1'); -}); -var CheckIcon = styled__default["default"](reactFeather.CheckCircle)(templateObject_2$h || (templateObject_2$h = __makeTemplateObject(["\n height: 16px;\n width: 16px;\n margin-right: 6px;\n stroke: ", ";\n"], ["\n height: 16px;\n width: 16px;\n margin-right: 6px;\n stroke: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.green1; -}); -var NameOverflow = styled__default["default"].div(templateObject_3$e || (templateObject_3$e = __makeTemplateObject(["\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 140px;\n font-size: 12px;\n"], ["\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 140px;\n font-size: 12px;\n"]))); -function ImportRow(_a) { - var token = _a.token, style = _a.style, dim = _a.dim, showImportView = _a.showImportView, setImportToken = _a.setImportToken; - var theme = useTheme(); - // check if already active on list or local storage tokens - var isAdded = useIsUserAddedToken(token); - var isActive = useIsTokenActive(token); - var list = token instanceof WrappedTokenInfo ? token.list : undefined; - return (jsxRuntime.jsxs(TokenSection, __assign({ style: style }, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: token, size: '24px', style: { opacity: dim ? '0.6' : '1' } }, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "4px", style: { opacity: dim ? '0.6' : '1' } }, { children: [jsxRuntime.jsxs(AutoRow, { children: [jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 500 }, { children: token.symbol }), void 0), jsxRuntime.jsx(ThemedText.DarkGray, __assign({ ml: "8px", fontWeight: 300 }, { children: jsxRuntime.jsx(NameOverflow, __assign({ title: token.name }, { children: token.name }), void 0) }), void 0)] }, void 0), list && list.logoURI && (jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(ThemedText.Small, __assign({ mr: "4px", color: theme.text3 }, { children: jsxRuntime.jsxs(macro.Trans, { children: ["via ", list.name, " "] }, void 0) }), void 0), jsxRuntime.jsx(ListLogo, { logoURI: list.logoURI, size: "12px" }, void 0)] }, void 0))] }), void 0), !isActive && !isAdded ? (jsxRuntime.jsx(ButtonPrimary, __assign({ width: "fit-content", padding: "6px 12px", fontWeight: 500, fontSize: "14px", onClick: function () { - setImportToken && setImportToken(token); - showImportView(); - } }, { children: jsxRuntime.jsx(macro.Trans, { children: "Import" }, void 0) }), void 0)) : (jsxRuntime.jsxs(RowFixed, __assign({ style: { minWidth: 'fit-content' } }, { children: [jsxRuntime.jsx(CheckIcon, {}, void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ color: theme.green1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Active" }, void 0) }), void 0)] }), void 0))] }), void 0)); -} -var templateObject_1$t, templateObject_2$h, templateObject_3$e; - -var TextDot = styled__default["default"].div(templateObject_1$s || (templateObject_1$s = __makeTemplateObject(["\n height: 3px;\n width: 3px;\n background-color: ", ";\n border-radius: 50%;\n"], ["\n height: 3px;\n width: 3px;\n background-color: ", ";\n border-radius: 50%;\n"])), function (_a) { - var theme = _a.theme; - return theme.text2; -}); -var Checkbox = styled__default["default"].input(templateObject_2$g || (templateObject_2$g = __makeTemplateObject(["\n border: 1px solid ", ";\n height: 20px;\n margin: 0;\n"], ["\n border: 1px solid ", ";\n height: 20px;\n margin: 0;\n"])), function (_a) { - var theme = _a.theme; - return theme.red3; -}); -var PaddedColumn = styled__default["default"](AutoColumn)(templateObject_3$d || (templateObject_3$d = __makeTemplateObject(["\n padding: 20px;\n"], ["\n padding: 20px;\n"]))); -var MenuItem = styled__default["default"](RowBetween)(templateObject_4$9 || (templateObject_4$9 = __makeTemplateObject(["\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: ", ";\n pointer-events: ", ";\n :hover {\n background-color: ", ";\n }\n opacity: ", ";\n"], ["\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: ", ";\n pointer-events: ", ";\n :hover {\n background-color: ", ";\n }\n opacity: ", ";\n"])), function (_a) { - var disabled = _a.disabled; - return !disabled && 'pointer'; -}, function (_a) { - var disabled = _a.disabled; - return disabled && 'none'; -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return !disabled && theme.bg2; -}, function (_a) { - var disabled = _a.disabled, selected = _a.selected; - return (disabled || selected ? 0.5 : 1); -}); -var SearchInput = styled__default["default"].input(templateObject_5$8 || (templateObject_5$8 = __makeTemplateObject(["\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: ", ";\n border-style: solid;\n border: 1px solid ", ";\n -webkit-appearance: none;\n\n font-size: 18px;\n\n ::placeholder {\n color: ", ";\n }\n transition: border 100ms;\n :focus {\n border: 1px solid ", ";\n outline: none;\n }\n"], ["\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: ", ";\n border-style: solid;\n border: 1px solid ", ";\n -webkit-appearance: none;\n\n font-size: 18px;\n\n ::placeholder {\n color: ", ";\n }\n transition: border 100ms;\n :focus {\n border: 1px solid ", ";\n outline: none;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.text1; -}, function (_a) { - var theme = _a.theme; - return theme.bg3; -}, function (_a) { - var theme = _a.theme; - return theme.text3; -}, function (_a) { - var theme = _a.theme; - return theme.primary1; -}); -var Separator = styled__default["default"].div(templateObject_6$5 || (templateObject_6$5 = __makeTemplateObject(["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"], ["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}); -var SeparatorDark = styled__default["default"].div(templateObject_7$4 || (templateObject_7$4 = __makeTemplateObject(["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"], ["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg3; -}); -var templateObject_1$s, templateObject_2$g, templateObject_3$d, templateObject_4$9, templateObject_5$8, templateObject_6$5, templateObject_7$4; - -function currencyKey(currency) { - return currency.isToken ? currency.address : 'ETHER'; -} -var StyledBalanceText = styled__default["default"](rebass.Text)(templateObject_1$r || (templateObject_1$r = __makeTemplateObject(["\n white-space: nowrap;\n overflow: hidden;\n max-width: 5rem;\n text-overflow: ellipsis;\n"], ["\n white-space: nowrap;\n overflow: hidden;\n max-width: 5rem;\n text-overflow: ellipsis;\n"]))); -var Tag = styled__default["default"].div(templateObject_2$f || (templateObject_2$f = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\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 background-color: ", ";\n color: ", ";\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"])), function (_a) { - var theme = _a.theme; - return theme.bg3; -}, function (_a) { - var theme = _a.theme; - return theme.text2; -}); -var FixedContentRow = styled__default["default"].div(templateObject_3$c || (templateObject_3$c = __makeTemplateObject(["\n padding: 4px 20px;\n height: 56px;\n display: grid;\n grid-gap: 16px;\n align-items: center;\n"], ["\n padding: 4px 20px;\n height: 56px;\n display: grid;\n grid-gap: 16px;\n align-items: center;\n"]))); -function Balance(_a) { - var balance = _a.balance; - return jsxRuntime.jsx(StyledBalanceText, __assign({ title: balance.toExact() }, { children: balance.toSignificant(4) }), void 0); -} -var TagContainer = styled__default["default"].div(templateObject_4$8 || (templateObject_4$8 = __makeTemplateObject(["\n display: flex;\n justify-content: flex-end;\n"], ["\n display: flex;\n justify-content: flex-end;\n"]))); -var TokenListLogoWrapper = styled__default["default"].img(templateObject_5$7 || (templateObject_5$7 = __makeTemplateObject(["\n height: 20px;\n"], ["\n height: 20px;\n"]))); -function TokenTags(_a) { - var currency = _a.currency; - if (!(currency instanceof WrappedTokenInfo)) { - return jsxRuntime.jsx("span", {}, void 0); - } - var tags = currency.tags; - if (!tags || tags.length === 0) - return jsxRuntime.jsx("span", {}, void 0); - var tag = tags[0]; - return (jsxRuntime.jsxs(TagContainer, { children: [jsxRuntime.jsx(MouseoverTooltip, __assign({ text: tag.description }, { children: jsxRuntime.jsx(Tag, { children: tag.name }, tag.id) }), void 0), tags.length > 1 ? (jsxRuntime.jsx(MouseoverTooltip, __assign({ text: tags - .slice(1) - .map(function (_a) { - var name = _a.name, description = _a.description; - return name + ": " + description; - }) - .join('; \n') }, { children: jsxRuntime.jsx(Tag, { children: "..." }, void 0) }), void 0)) : null] }, void 0)); -} -function CurrencyRow(_a) { - var currency = _a.currency, onSelect = _a.onSelect, isSelected = _a.isSelected, otherSelected = _a.otherSelected, style = _a.style, showCurrencyAmount = _a.showCurrencyAmount; - var account = useActiveWeb3React().account; - var key = currencyKey(currency); - var selectedTokenList = useCombinedActiveList(); - var isOnSelectedList = isTokenOnList(selectedTokenList, currency.isToken ? currency : undefined); - var customAdded = useIsUserAddedToken(currency); - var balance = useCurrencyBalance(account !== null && account !== void 0 ? account : undefined, currency); - // only show add or remove buttons if not on selected list - return (jsxRuntime.jsxs(MenuItem, __assign({ style: style, className: "token-item-" + key, onClick: function () { return (isSelected ? null : onSelect()); }, disabled: isSelected, selected: otherSelected }, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: currency, size: '24px' }, void 0), jsxRuntime.jsxs(Column, { children: [jsxRuntime.jsx(rebass.Text, __assign({ title: currency.name, fontWeight: 500 }, { children: currency.symbol }), void 0), jsxRuntime.jsx(ThemedText.DarkGray, __assign({ ml: "0px", fontSize: '12px', fontWeight: 300 }, { children: !currency.isNative && !isOnSelectedList && customAdded ? (jsxRuntime.jsxs(macro.Trans, { children: [currency.name, " \u2022 Added by user"] }, void 0)) : (currency.name) }), void 0)] }, void 0), jsxRuntime.jsx(TokenTags, { currency: currency }, void 0), showCurrencyAmount && (jsxRuntime.jsx(RowFixed, __assign({ style: { justifySelf: 'flex-end' } }, { children: balance ? jsxRuntime.jsx(Balance, { balance: balance }, void 0) : account ? jsxRuntime.jsx(Loader, {}, void 0) : null }), void 0))] }), void 0)); -} -var BREAK_LINE = 'BREAK'; -function isBreakLine(x) { - return x === BREAK_LINE; -} -function BreakLineComponent(_a) { - var style = _a.style; - var theme = useTheme(); - return (jsxRuntime.jsx(FixedContentRow, __assign({ style: style }, { children: jsxRuntime.jsx(LightGreyCard, __assign({ padding: "8px 12px", "$borderRadius": "8px" }, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(TokenListLogoWrapper, { src: TokenListLogo }, void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ ml: "6px", fontSize: "12px", color: theme.text1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Expanded results from inactive Token Lists" }, void 0) }), void 0)] }, void 0), jsxRuntime.jsx(QuestionHelper, { text: jsxRuntime.jsx(macro.Trans, { children: "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists." }, void 0) }, void 0)] }, void 0) }), void 0) }), void 0)); -} -function CurrencyList(_a) { - var height = _a.height, currencies = _a.currencies, otherListTokens = _a.otherListTokens, selectedCurrency = _a.selectedCurrency, onCurrencySelect = _a.onCurrencySelect, otherCurrency = _a.otherCurrency, fixedListRef = _a.fixedListRef, showImportView = _a.showImportView, setImportToken = _a.setImportToken, showCurrencyAmount = _a.showCurrencyAmount; - var itemData = React.useMemo(function () { - if (otherListTokens && (otherListTokens === null || otherListTokens === void 0 ? void 0 : otherListTokens.length) > 0) { - return __spreadArray(__spreadArray(__spreadArray([], __read(currencies), false), [BREAK_LINE], false), __read(otherListTokens), false); - } - return currencies; - }, [currencies, otherListTokens]); - var Row = React.useCallback(function TokenRow(_a) { - var data = _a.data, index = _a.index, style = _a.style; - var row = data[index]; - if (isBreakLine(row)) { - return jsxRuntime.jsx(BreakLineComponent, { style: style }, void 0); - } - var currency = row; - var isSelected = Boolean(currency && selectedCurrency && selectedCurrency.equals(currency)); - var otherSelected = Boolean(currency && otherCurrency && otherCurrency.equals(currency)); - var handleSelect = function () { return currency && onCurrencySelect(currency); }; - var token = currency === null || currency === void 0 ? void 0 : currency.wrapped; - var showImport = index > currencies.length; - if (showImport && token) { - return (jsxRuntime.jsx(ImportRow, { style: style, token: token, showImportView: showImportView, setImportToken: setImportToken, dim: true }, void 0)); - } - else if (currency) { - return (jsxRuntime.jsx(CurrencyRow, { style: style, currency: currency, isSelected: isSelected, onSelect: handleSelect, otherSelected: otherSelected, showCurrencyAmount: showCurrencyAmount }, void 0)); - } - else { - return null; - } - }, [ - currencies.length, - onCurrencySelect, - otherCurrency, - selectedCurrency, - setImportToken, - showImportView, - showCurrencyAmount, - ]); - var itemKey = React.useCallback(function (index, data) { - var currency = data[index]; - if (isBreakLine(currency)) - return BREAK_LINE; - return currencyKey(currency); - }, []); - return (jsxRuntime.jsx(reactWindow.FixedSizeList, __assign({ height: height, ref: fixedListRef, width: "100%", itemData: itemData, itemCount: itemData.length, itemSize: 56, itemKey: itemKey }, { children: Row }), void 0)); -} -var templateObject_1$r, templateObject_2$f, templateObject_3$c, templateObject_4$8, templateObject_5$7; - -var ContentWrapper = styled__default["default"](Column)(templateObject_1$q || (templateObject_1$q = __makeTemplateObject(["\n width: 100%;\n flex: 1 1;\n position: relative;\n"], ["\n width: 100%;\n flex: 1 1;\n position: relative;\n"]))); -var Footer$1 = styled__default["default"].div(templateObject_2$e || (templateObject_2$e = __makeTemplateObject(["\n width: 100%;\n border-radius: 20px;\n padding: 20px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n background-color: ", ";\n border-top: 1px solid ", ";\n"], ["\n width: 100%;\n border-radius: 20px;\n padding: 20px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n background-color: ", ";\n border-top: 1px solid ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var theme = _a.theme; - return theme.bg2; -}); -function CurrencySearch(_a) { - var selectedCurrency = _a.selectedCurrency, onCurrencySelect = _a.onCurrencySelect, otherSelectedCurrency = _a.otherSelectedCurrency, showCommonBases = _a.showCommonBases, showCurrencyAmount = _a.showCurrencyAmount, disableNonToken = _a.disableNonToken, onDismiss = _a.onDismiss, isOpen = _a.isOpen, showManageView = _a.showManageView, showImportView = _a.showImportView, setImportToken = _a.setImportToken; - var chainId = useActiveWeb3React().chainId; - var theme = useTheme(); - // refs for fixed size lists - var fixedList = React.useRef(); - var _b = __read(React.useState(''), 2), searchQuery = _b[0], setSearchQuery = _b[1]; - var debouncedQuery = useDebounce(searchQuery, 200); - var allTokens = useAllTokens(); - // if they input an address, use it - var isAddressSearch = isAddress(debouncedQuery); - var searchToken = useToken(debouncedQuery); - var searchTokenIsAdded = useIsUserAddedToken(searchToken); - React.useEffect(function () { - if (isAddressSearch) { - ReactGA__default["default"].event({ - category: 'Currency Select', - action: 'Search by address', - label: isAddressSearch, - }); - } - }, [isAddressSearch]); - var filteredTokens = React.useMemo(function () { - return Object.values(allTokens).filter(getTokenFilter(debouncedQuery)); - }, [allTokens, debouncedQuery]); - var balances = useAllTokenBalances(); - var sortedTokens = React.useMemo(function () { - return filteredTokens.sort(tokenComparator.bind(null, balances)); - }, [balances, filteredTokens]); - var filteredSortedTokens = useSortTokensByQuery(debouncedQuery, sortedTokens); - var native = useNativeCurrency(); - var filteredSortedTokensWithETH = React.useMemo(function () { - var _a, _b; - if (!native) - return filteredSortedTokens; - var s = debouncedQuery.toLowerCase().trim(); - if (((_b = (_a = native.symbol) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === null || _b === void 0 ? void 0 : _b.indexOf(s)) !== -1) { - return native ? __spreadArray([native], __read(filteredSortedTokens), false) : filteredSortedTokens; - } - return filteredSortedTokens; - }, [debouncedQuery, native, filteredSortedTokens]); - var handleCurrencySelect = React.useCallback(function (currency) { - onCurrencySelect(currency); - onDismiss(); - }, [onDismiss, onCurrencySelect]); - // clear the input on open - React.useEffect(function () { - if (isOpen) - setSearchQuery(''); - }, [isOpen]); - // manage focus on modal show - var inputRef = React.useRef(); - var handleInput = React.useCallback(function (event) { - var _a; - var input = event.target.value; - var checksummedInput = isAddress(input); - setSearchQuery(checksummedInput || input); - (_a = fixedList.current) === null || _a === void 0 ? void 0 : _a.scrollTo(0); - }, []); - var handleEnter = React.useCallback(function (e) { - var _a, _b; - if (e.key === 'Enter') { - var s = debouncedQuery.toLowerCase().trim(); - if (s === ((_a = native === null || native === void 0 ? void 0 : native.symbol) === null || _a === void 0 ? void 0 : _a.toLowerCase())) { - handleCurrencySelect(native); - } - else if (filteredSortedTokensWithETH.length > 0) { - if (((_b = filteredSortedTokensWithETH[0].symbol) === null || _b === void 0 ? void 0 : _b.toLowerCase()) === debouncedQuery.trim().toLowerCase() || - filteredSortedTokensWithETH.length === 1) { - handleCurrencySelect(filteredSortedTokensWithETH[0]); - } - } - } - }, [debouncedQuery, native, filteredSortedTokensWithETH, handleCurrencySelect]); - // menu ui - var _c = __read(useToggle(false), 2), open = _c[0], toggle = _c[1]; - var node = React.useRef(); - useOnClickOutside(node, open ? toggle : undefined); - // if no results on main list, show option to expand into inactive - var filteredInactiveTokens = useSearchInactiveTokenLists(filteredTokens.length === 0 || (debouncedQuery.length > 2 && !isAddressSearch) ? debouncedQuery : undefined); - return (jsxRuntime.jsxs(ContentWrapper, { children: [jsxRuntime.jsxs(PaddedColumn, __assign({ gap: "16px" }, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 16 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Select a token" }, void 0) }), void 0), jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0)] }, void 0), jsxRuntime.jsx(Row, { children: jsxRuntime.jsx(SearchInput, { type: "text", id: "token-search-input", placeholder: macro.t(templateObject_3$b || (templateObject_3$b = __makeTemplateObject(["Search name or paste address"], ["Search name or paste address"]))), autoComplete: "off", value: searchQuery, ref: inputRef, onChange: handleInput, onKeyDown: handleEnter }, void 0) }, void 0), showCommonBases && (jsxRuntime.jsx(CommonBases, { chainId: chainId, onSelect: handleCurrencySelect, selectedCurrency: selectedCurrency }, void 0))] }), void 0), jsxRuntime.jsx(Separator, {}, void 0), searchToken && !searchTokenIsAdded ? (jsxRuntime.jsx(Column, __assign({ style: { padding: '20px 0', height: '100%' } }, { children: jsxRuntime.jsx(ImportRow, { token: searchToken, showImportView: showImportView, setImportToken: setImportToken }, void 0) }), void 0)) : (filteredSortedTokens === null || filteredSortedTokens === void 0 ? void 0 : filteredSortedTokens.length) > 0 || (filteredInactiveTokens === null || filteredInactiveTokens === void 0 ? void 0 : filteredInactiveTokens.length) > 0 ? (jsxRuntime.jsx("div", __assign({ style: { flex: '1' } }, { children: jsxRuntime.jsx(AutoSizer__default["default"], __assign({ disableWidth: true }, { children: function (_a) { - var height = _a.height; - return (jsxRuntime.jsx(CurrencyList, { height: height, currencies: disableNonToken ? filteredSortedTokens : filteredSortedTokensWithETH, otherListTokens: filteredInactiveTokens, onCurrencySelect: handleCurrencySelect, otherCurrency: otherSelectedCurrency, selectedCurrency: selectedCurrency, fixedListRef: fixedList, showImportView: showImportView, setImportToken: setImportToken, showCurrencyAmount: showCurrencyAmount }, void 0)); - } }), void 0) }), void 0)) : (jsxRuntime.jsx(Column, __assign({ style: { padding: '20px', height: '100%' } }, { children: jsxRuntime.jsx(ThemedText.Main, __assign({ color: theme.text3, textAlign: "center", mb: "20px" }, { children: jsxRuntime.jsx(macro.Trans, { children: "No results found." }, void 0) }), void 0) }), void 0)), jsxRuntime.jsx(Footer$1, { children: jsxRuntime.jsx(Row, __assign({ justify: "center" }, { children: jsxRuntime.jsx(ButtonText, __assign({ onClick: showManageView, color: theme.primary1, className: "list-token-manage-button" }, { children: jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(IconWrapper, __assign({ size: "16px", marginRight: "6px", stroke: theme.primaryText1 }, { children: jsxRuntime.jsx(reactFeather.Edit, {}, void 0) }), void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ color: theme.primaryText1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Manage Token Lists" }, void 0) }), void 0)] }, void 0) }), void 0) }), void 0) }, void 0)] }, void 0)); -} -var templateObject_1$q, templateObject_2$e, templateObject_3$b; - -var UNISWAP_LOGO_URL = "data:image/svg+xml,%3Csvg%20width%3D%2214%22%20height%3D%2215%22%20viewBox%3D%220%200%2014%2015%22%20fill%3D%22black%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20style%3D%22mix-blend-mode%3Adarken%22%3E%3Cpath%20d%3D%22M4.15217%201.55141C3.96412%201.52242%203.95619%201.51902%204.04468%201.5055C4.21427%201.47958%204.61472%201.51491%204.89067%201.58012C5.53489%201.73232%206.12109%202.12221%206.74683%202.81466L6.91307%202.99862L7.15088%202.96062C8.15274%202.8006%209.17194%202.92778%2010.0244%203.31918C10.2589%203.42686%2010.6287%203.64121%2010.6749%203.69629C10.6896%203.71384%2010.7166%203.82684%2010.7349%203.94742C10.7982%204.36458%2010.7665%204.68434%2010.6382%204.92317C10.5683%205.05313%2010.5644%205.09432%2010.6114%205.20554C10.6489%205.2943%2010.7534%205.35999%2010.8569%205.35985C11.0687%205.35956%2011.2968%205.0192%2011.4024%204.54561L11.4444%204.3575L11.5275%204.45109C11.9835%204.96459%2012.3417%205.66488%2012.4032%206.16335L12.4192%206.29332L12.3426%206.17517C12.2107%205.97186%2012.0781%205.83346%2011.9084%205.72183C11.6024%205.52062%2011.2789%205.45215%2010.4222%205.40727C9.64839%205.36675%209.21045%205.30106%208.77621%205.16032C8.03738%204.9209%207.66493%204.60204%206.78729%203.4576C6.39748%202.94928%206.15654%202.66804%205.91687%202.44155C5.37228%201.92691%204.83716%201.65701%204.15217%201.55141Z%22%2F%3E%3Cpath%20d%3D%22M10.8494%202.68637C10.8689%202.34575%2010.9153%202.12108%2011.0088%201.9159C11.0458%201.83469%2011.0804%201.76822%2011.0858%201.76822C11.0911%201.76822%2011.075%201.82816%2011.05%201.90142C10.9821%202.10054%2010.9709%202.3729%2011.0177%202.68978C11.0771%203.09184%2011.1109%203.14985%2011.5385%203.58416C11.739%203.78788%2011.9723%204.0448%2012.0568%204.15511L12.2106%204.35568L12.0568%204.21234C11.8688%204.03705%2011.4364%203.6952%2011.3409%203.64633C11.2768%203.61356%2011.2673%203.61413%2011.2278%203.65321C11.1914%203.68922%2011.1837%203.74333%2011.1787%203.99915C11.1708%204.39786%2011.1161%204.65377%2010.9842%204.90965C10.9128%205.04805%2010.9015%205.01851%2010.9661%204.8623C11.0143%204.74566%2011.0192%204.69439%2011.0189%204.30842C11.0181%203.53291%2010.9255%203.34647%2010.3823%203.02709C10.2447%202.94618%2010.0179%202.8295%209.87839%202.76778C9.73887%202.70606%209.62805%202.6523%209.63208%202.64828C9.64746%202.63307%2010.1772%202.78675%2010.3905%202.86828C10.7077%202.98954%2010.76%203.00526%2010.7985%202.99063C10.8244%202.98082%2010.8369%202.90608%2010.8494%202.68637Z%22%2F%3E%3Cpath%20d%3D%22M4.51745%204.01304C4.13569%203.49066%203.89948%202.68973%203.95062%202.091L3.96643%201.90572L4.05333%201.92148C4.21652%201.95106%204.49789%202.05515%204.62964%202.13469C4.9912%202.35293%205.14773%202.64027%205.30697%203.37811C5.35362%203.59423%205.41482%203.8388%205.44298%203.9216C5.48831%204.05487%205.65962%204.36617%205.7989%204.56834C5.89922%204.71395%205.83258%204.78295%205.61082%204.76305C5.27215%204.73267%204.8134%204.41799%204.51745%204.01304Z%22%2F%3E%3Cpath%20d%3D%22M10.3863%207.90088C8.60224%207.18693%207.97389%206.56721%207.97389%205.52157C7.97389%205.36769%207.97922%205.24179%207.98571%205.24179C7.99221%205.24179%208.06124%205.29257%208.1391%205.35465C8.50088%205.64305%208.906%205.76623%2010.0275%205.92885C10.6875%206.02455%2011.0589%206.10185%2011.4015%206.21477C12.4904%206.57371%2013.1641%207.30212%2013.3248%208.29426C13.3715%208.58255%2013.3441%209.12317%2013.2684%209.4081C13.2087%209.63315%2013.0263%2010.0388%2012.9779%2010.0544C12.9645%2010.0587%2012.9514%2010.0076%2012.9479%209.93809C12.9296%209.56554%2012.7402%209.20285%2012.4221%208.93116C12.0604%208.62227%2011.5745%208.37633%2010.3863%207.90088Z%22%2F%3E%3Cpath%20d%3D%22M9.13385%208.19748C9.11149%208.06527%209.07272%207.89643%209.04769%207.82228L9.00217%207.68748L9.08672%207.7818C9.20374%207.91233%209.2962%208.07937%209.37457%208.30185C9.43438%208.47165%209.44111%208.52215%209.44066%208.79807C9.4402%209.06896%209.43273%209.12575%209.3775%209.27858C9.29042%209.51959%209.18233%209.69048%209.00097%209.87391C8.67507%2010.2036%208.25607%2010.3861%207.65143%2010.4618C7.54633%2010.4749%207.24%2010.4971%206.97069%2010.511C6.292%2010.5461%205.84531%2010.6186%205.44393%2010.7587C5.38623%2010.7788%205.3347%2010.7911%205.32947%2010.7859C5.31323%2010.7698%205.58651%2010.6079%205.81223%2010.4998C6.1305%2010.3474%206.44733%2010.2643%207.15719%2010.1468C7.50785%2010.0887%207.86998%2010.0183%207.96194%209.99029C8.83033%209.72566%209.27671%209.04276%209.13385%208.19748Z%22%2F%3E%3Cpath%20d%3D%22M9.95169%209.64109C9.71465%209.13463%209.66022%208.64564%209.79009%208.18961C9.80399%208.14088%209.82632%208.101%209.83976%208.101C9.85319%208.101%209.90913%208.13105%209.96404%208.16777C10.0733%208.24086%2010.2924%208.36395%2010.876%208.68023C11.6043%209.0749%2012.0196%209.3805%2012.302%209.72965C12.5493%2010.0354%2012.7023%2010.3837%2012.776%2010.8084C12.8177%2011.0489%2012.7932%2011.6277%2012.7311%2011.8699C12.5353%2012.6337%2012.0802%2013.2336%2011.4311%2013.5837C11.336%2013.635%2011.2506%2013.6771%2011.2414%2013.6773C11.2321%2013.6775%2011.2668%2013.5899%2011.3184%2013.4827C11.5367%2013.029%2011.5616%2012.5877%2011.3965%2012.0965C11.2954%2011.7957%2011.0893%2011.4287%2010.6732%2010.8084C10.1893%2010.0873%2010.0707%209.89539%209.95169%209.64109Z%22%2F%3E%3Cpath%20d%3D%22M3.25046%2012.3737C3.91252%2011.8181%204.73629%2011.4234%205.48666%2011.3022C5.81005%2011.25%206.34877%2011.2707%206.64823%2011.3469C7.12824%2011.469%207.55763%2011.7425%207.78094%2012.0683C7.99918%2012.3867%208.09281%2012.6642%208.19029%2013.2816C8.22875%2013.5252%208.27057%2013.7697%208.28323%2013.8251C8.35644%2014.1451%208.4989%2014.4008%208.67544%2014.5293C8.95583%2014.7333%209.43865%2014.7459%209.91362%2014.5618C9.99423%2014.5305%2010.0642%2014.5089%2010.0691%2014.5138C10.0864%2014.5308%209.84719%2014.6899%209.67847%2014.7737C9.45143%2014.8864%209.2709%2014.93%209.03102%2014.93C8.59601%2014.93%208.23486%2014.7101%207.9335%2014.2616C7.87419%2014.1733%207.7409%2013.909%207.63729%2013.6741C7.3191%2012.9528%207.16199%2012.7331%206.79255%2012.4926C6.47104%2012.2834%206.05641%2012.2459%205.74449%2012.3979C5.33475%2012.5976%205.22043%2013.118%205.51389%2013.4478C5.63053%2013.5789%205.84803%2013.6919%206.02588%2013.7139C6.35861%2013.7551%206.64455%2013.5035%206.64455%2013.1696C6.64455%2012.9528%206.56071%2012.8291%206.34966%2012.7344C6.0614%2012.6051%205.75156%2012.7562%205.75304%2013.0254C5.75368%2013.1402%205.80396%2013.2122%205.91971%2013.2643C5.99397%2013.2977%205.99569%2013.3003%205.93514%2013.2878C5.67066%2013.2333%205.6087%2012.9164%205.82135%2012.706C6.07667%2012.4535%206.60461%2012.5649%206.78591%2012.9097C6.86208%2013.0545%206.87092%2013.3429%206.80451%2013.517C6.6559%2013.9068%206.22256%2014.1117%205.78297%2014.0002C5.48368%2013.9242%205.36181%2013.842%205.00097%2013.4726C4.37395%2012.8306%204.13053%2012.7062%203.22657%2012.566L3.05335%2012.5391L3.25046%2012.3737Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M0.308383%200.883984C2.40235%203.40996%203.84457%204.45213%204.00484%204.67231C4.13717%204.85412%204.08737%205.01757%203.86067%205.14567C3.7346%205.21689%203.47541%205.28905%203.34564%205.28905C3.19887%205.28905%203.14847%205.23278%203.14847%205.23278C3.06337%205.15255%203.01544%205.16658%202.5784%204.39555C1.97166%203.45981%201.46389%202.68357%201.45004%202.67057C1.41801%202.64052%201.41856%202.64153%202.51654%204.59413C2.69394%205.0011%202.55182%205.15049%202.55182%205.20845C2.55182%205.32636%202.51946%205.38834%202.37311%205.55059C2.12914%205.8211%202.02008%206.12505%201.94135%206.7541C1.8531%207.45926%201.60492%207.95737%200.917156%208.80989C0.514562%209.30893%200.448686%209.4004%200.3471%209.60153C0.219144%209.85482%200.183961%209.99669%200.169701%2010.3165C0.154629%2010.6547%200.183983%2010.8732%200.287934%2011.1965C0.378939%2011.4796%200.473932%2011.6665%200.716778%2012.0403C0.926351%2012.3629%201.04702%2012.6027%201.04702%2012.6965C1.04702%2012.7711%201.06136%2012.7712%201.38611%2012.6983C2.16328%2012.5239%202.79434%2012.2171%203.14925%2011.8411C3.36891%2011.6084%203.42048%2011.4799%203.42215%2011.1611C3.42325%2010.9525%203.41587%2010.9088%203.35914%2010.7888C3.2668%2010.5935%203.09869%2010.4311%202.72817%2010.1794C2.2427%209.84953%202.03534%209.58398%201.97807%209.21878C1.93108%208.91913%201.98559%208.70771%202.25416%208.14825C2.53214%207.56916%202.60103%207.32239%202.64763%206.73869C2.67773%206.36158%202.71941%206.21286%202.82842%206.09348C2.94212%205.969%203.04447%205.92684%203.32584%205.88863C3.78457%205.82635%204.07667%205.70839%204.31677%205.48849C4.52505%205.29772%204.61221%205.11391%204.62558%204.8372L4.63574%204.62747L4.51934%204.49259C4.09783%204.00411%200.0261003%200.5%200.000160437%200.5C-0.00538105%200.5%200.133325%200.672804%200.308383%200.883984ZM1.28364%2010.6992C1.37894%2010.5314%201.3283%2010.3158%201.16889%2010.2104C1.01827%2010.1109%200.78428%2010.1578%200.78428%2010.2875C0.78428%2010.3271%200.806303%2010.3559%200.855937%2010.3813C0.939514%2010.424%200.945581%2010.4721%200.879823%2010.5703C0.81323%2010.6698%200.818604%2010.7573%200.894991%2010.8167C1.0181%2010.9125%201.19237%2010.8598%201.28364%2010.6992Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M4.92523%205.99865C4.70988%206.06439%204.50054%206.29124%204.43574%206.5291C4.39621%206.67421%204.41864%206.92875%204.47785%207.00736C4.57351%207.13433%204.66602%207.16778%204.91651%207.16603C5.40693%207.16263%205.83327%206.95358%205.88284%206.69224C5.92347%206.47801%205.73622%206.18112%205.4783%206.05078C5.34521%205.98355%205.06217%205.95688%204.92523%205.99865ZM5.49853%206.44422C5.57416%206.33741%205.54107%206.22198%205.41245%206.14391C5.1675%205.99525%204.79708%206.11827%204.79708%206.34826C4.79708%206.46274%204.99025%206.58765%205.16731%206.58765C5.28516%206.58765%205.44644%206.5178%205.49853%206.44422Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"; - -var _a$7; -var NETWORK_POLLING_INTERVALS = (_a$7 = {}, - _a$7[SupportedChainId.ARBITRUM_ONE] = ms__default["default"](templateObject_1$p || (templateObject_1$p = __makeTemplateObject(["1s"], ["1s"]))), - _a$7[SupportedChainId.ARBITRUM_RINKEBY] = ms__default["default"](templateObject_2$d || (templateObject_2$d = __makeTemplateObject(["1s"], ["1s"]))), - _a$7[SupportedChainId.OPTIMISM] = ms__default["default"](templateObject_3$a || (templateObject_3$a = __makeTemplateObject(["1s"], ["1s"]))), - _a$7[SupportedChainId.OPTIMISTIC_KOVAN] = ms__default["default"](templateObject_4$7 || (templateObject_4$7 = __makeTemplateObject(["1s"], ["1s"]))), - _a$7); -function getLibrary(provider) { - var library = new providers.Web3Provider(provider, typeof provider.chainId === 'number' - ? provider.chainId - : typeof provider.chainId === 'string' - ? parseInt(provider.chainId) - : 'any'); - library.pollingInterval = 15000; - library.detectNetwork().then(function (network) { - var networkPollingInterval = NETWORK_POLLING_INTERVALS[network.chainId]; - if (networkPollingInterval) { - console.debug('Setting polling interval', networkPollingInterval); - library.pollingInterval = networkPollingInterval; - } - }); - return library; -} -var templateObject_1$p, templateObject_2$d, templateObject_3$a, templateObject_4$7; - -var OVERLAY_READY = 'OVERLAY_READY'; -var CHAIN_ID_NETWORK_ARGUMENT = { - 1: undefined, - 3: 'ropsten', - 4: 'rinkeby', - 42: 'kovan', -}; -var FortmaticConnector = /** @class */ (function (_super) { - __extends(FortmaticConnector, _super); - function FortmaticConnector() { - return _super !== null && _super.apply(this, arguments) || this; - } - FortmaticConnector.prototype.activate = function () { - return __awaiter(this, void 0, void 0, function () { - var Fortmatic, _a, apiKey, chainId, provider, pollForOverlayReady, _b, account; - var _this = this; - return __generator(this, function (_c) { - switch (_c.label) { - case 0: - if (!!this.fortmatic) return [3 /*break*/, 2]; - return [4 /*yield*/, Promise.resolve().then(function () { return fortmatic$1; })]; - case 1: - Fortmatic = (_c.sent()).default; - _a = this, apiKey = _a.apiKey, chainId = _a.chainId; - if (chainId in CHAIN_ID_NETWORK_ARGUMENT) { - this.fortmatic = new Fortmatic(apiKey, CHAIN_ID_NETWORK_ARGUMENT[chainId]); - } - else { - throw new Error("Unsupported network ID: " + chainId); - } - _c.label = 2; - case 2: - provider = this.fortmatic.getProvider(); - pollForOverlayReady = new Promise(function (resolve) { - var interval = setInterval(function () { - if (provider.overlayReady) { - clearInterval(interval); - _this.emit(OVERLAY_READY); - resolve(); - } - }, 200); - }); - return [4 /*yield*/, Promise.all([ - provider.enable().then(function (accounts) { return accounts[0]; }), - pollForOverlayReady, - ])]; - case 3: - _b = __read.apply(void 0, [_c.sent(), 1]), account = _b[0]; - return [2 /*return*/, { provider: this.fortmatic.getProvider(), chainId: this.chainId, account: account }]; - } - }); - }); - }; - return FortmaticConnector; -}(fortmaticConnector.FortmaticConnector)); - -var RequestError = /** @class */ (function (_super) { - __extends(RequestError, _super); - function RequestError(message, code, data) { - var _this = _super.call(this, message) || this; - _this.code = code; - _this.data = data; - return _this; - } - return RequestError; -}(Error)); -var MiniRpcProvider = /** @class */ (function () { - function MiniRpcProvider(connector, chainId, url, batchWaitTimeMs) { - var _this = this; - this.isMetaMask = false; - this.nextId = 1; - this.batchTimeoutId = null; - this.batch = []; - this.clearBatch = function () { return __awaiter(_this, void 0, void 0, function () { - var batch, response, json, byKey, json_1, json_1_1, result, _a, resolve, reject, method; - var e_1, _b; - var _this = this; - var _c, _d, _e; - return __generator(this, function (_f) { - switch (_f.label) { - case 0: - console.debug('Clearing batch', this.batch); - batch = this.batch; - batch = batch.filter(function (b) { - if (b.request.method === 'wallet_switchEthereumChain') { - try { - _this.connector.changeChainId(parseInt(b.request.params[0].chainId)); - b.resolve({ id: b.request.id }); - } - catch (error) { - b.reject(error); - } - return false; - } - return true; - }); - this.batch = []; - this.batchTimeoutId = null; - _f.label = 1; - case 1: - _f.trys.push([1, 3, , 4]); - return [4 /*yield*/, fetch(this.url, { - method: 'POST', - headers: { 'content-type': 'application/json', accept: 'application/json' }, - body: JSON.stringify(batch.map(function (item) { return item.request; })), - })]; - case 2: - response = _f.sent(); - return [3 /*break*/, 4]; - case 3: - _f.sent(); - batch.forEach(function (_a) { - var reject = _a.reject; - return reject(new Error('Failed to send batch call')); - }); - return [2 /*return*/]; - case 4: - if (!response.ok) { - batch.forEach(function (_a) { - var reject = _a.reject; - return reject(new RequestError(response.status + ": " + response.statusText, -32000)); - }); - return [2 /*return*/]; - } - _f.label = 5; - case 5: - _f.trys.push([5, 7, , 8]); - return [4 /*yield*/, response.json()]; - case 6: - json = _f.sent(); - return [3 /*break*/, 8]; - case 7: - _f.sent(); - batch.forEach(function (_a) { - var reject = _a.reject; - return reject(new Error('Failed to parse JSON response')); - }); - return [2 /*return*/]; - case 8: - byKey = batch.reduce(function (memo, current) { - memo[current.request.id] = current; - return memo; - }, {}); - try { - for (json_1 = __values(json), json_1_1 = json_1.next(); !json_1_1.done; json_1_1 = json_1.next()) { - result = json_1_1.value; - _a = byKey[result.id], resolve = _a.resolve, reject = _a.reject, method = _a.request.method; - if ('error' in result) { - reject(new RequestError((_c = result === null || result === void 0 ? void 0 : result.error) === null || _c === void 0 ? void 0 : _c.message, (_d = result === null || result === void 0 ? void 0 : result.error) === null || _d === void 0 ? void 0 : _d.code, (_e = result === null || result === void 0 ? void 0 : result.error) === null || _e === void 0 ? void 0 : _e.data)); - } - else if ('result' in result && resolve) { - resolve(result.result); - } - else { - reject(new RequestError("Received unexpected JSON-RPC response to " + method + " request.", -32000, result)); - } - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (json_1_1 && !json_1_1.done && (_b = json_1.return)) _b.call(json_1); - } - finally { if (e_1) throw e_1.error; } - } - return [2 /*return*/]; - } - }); - }); }; - this.sendAsync = function (request, callback) { - _this.request(request.method, request.params) - .then(function (result) { return callback(null, { jsonrpc: '2.0', id: request.id, result: result }); }) - .catch(function (error) { return callback(error, null); }); - }; - this.request = function (method, params) { return __awaiter(_this, void 0, void 0, function () { - var promise; - var _this = this; - var _a; - return __generator(this, function (_b) { - if (typeof method !== 'string') { - return [2 /*return*/, this.request(method.method, method.params)]; - } - if (method === 'eth_chainId') { - return [2 /*return*/, "0x" + this.chainId.toString(16)]; - } - promise = new Promise(function (resolve, reject) { - _this.batch.push({ - request: { - jsonrpc: '2.0', - id: _this.nextId++, - method: method, - params: params, - }, - resolve: resolve, - reject: reject, - }); - }); - this.batchTimeoutId = (_a = this.batchTimeoutId) !== null && _a !== void 0 ? _a : setTimeout(this.clearBatch, this.batchWaitTimeMs); - return [2 /*return*/, promise]; - }); - }); }; - this.connector = connector; - this.chainId = chainId; - this.url = url; - var parsed = new URL(url); - this.host = parsed.host; - this.path = parsed.pathname; - // how long to wait to batch calls - this.batchWaitTimeMs = batchWaitTimeMs !== null && batchWaitTimeMs !== void 0 ? batchWaitTimeMs : 50; - } - return MiniRpcProvider; -}()); -var NetworkConnector = /** @class */ (function (_super) { - __extends(NetworkConnector, _super); - function NetworkConnector(_a) { - var urls = _a.urls, defaultChainId = _a.defaultChainId; - var _this = this; - invariant__default["default"](defaultChainId || Object.keys(urls).length === 1, 'defaultChainId is a required argument with >1 url'); - _this = _super.call(this, { supportedChainIds: Object.keys(urls).map(function (k) { return Number(k); }) }) || this; - _this.currentChainId = defaultChainId !== null && defaultChainId !== void 0 ? defaultChainId : Number(Object.keys(urls)[0]); - _this.providers = Object.keys(urls).reduce(function (accumulator, chainId) { - accumulator[Number(chainId)] = new MiniRpcProvider(_this, Number(chainId), urls[Number(chainId)]); - return accumulator; - }, {}); - return _this; - } - Object.defineProperty(NetworkConnector.prototype, "provider", { - get: function () { - return this.providers[this.currentChainId]; - }, - enumerable: false, - configurable: true - }); - NetworkConnector.prototype.activate = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, { provider: this.providers[this.currentChainId], chainId: this.currentChainId, account: null }]; - }); - }); - }; - NetworkConnector.prototype.getProvider = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, this.providers[this.currentChainId]]; - }); - }); - }; - NetworkConnector.prototype.getChainId = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, this.currentChainId]; - }); - }); - }; - NetworkConnector.prototype.getAccount = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, null]; - }); - }); - }; - NetworkConnector.prototype.deactivate = function () { - return; - }; - /** - * Meant to be called only by MiniRpcProvider - * @param chainId the new chain id - */ - NetworkConnector.prototype.changeChainId = function (chainId) { - if (chainId in this.providers) { - this.currentChainId = chainId; - this.emitUpdate({ - chainId: chainId, - account: null, - provider: this.providers[chainId], - }); - } - else { - throw new Error("Unsupported chain ID: " + chainId); - } - }; - return NetworkConnector; -}(abstractConnector.AbstractConnector)); - -var FORMATIC_KEY = process.env.REACT_APP_FORTMATIC_KEY; -var PORTIS_ID = process.env.REACT_APP_PORTIS_ID; -var network = new NetworkConnector({ - urls: INFURA_NETWORK_URLS, - defaultChainId: 1, -}); -var networkLibrary; -function getNetworkLibrary() { - return (networkLibrary = networkLibrary !== null && networkLibrary !== void 0 ? networkLibrary : getLibrary(network.provider)); -} -new injectedConnector.InjectedConnector({ - supportedChainIds: ALL_SUPPORTED_CHAIN_IDS, -}); -new safeAppsWeb3React.SafeAppConnector(); -new walletconnectConnector.WalletConnectConnector({ - supportedChainIds: ALL_SUPPORTED_CHAIN_IDS, - rpc: INFURA_NETWORK_URLS, - qrcode: true, -}); -// mainnet only -new FortmaticConnector({ - apiKey: FORMATIC_KEY !== null && FORMATIC_KEY !== void 0 ? FORMATIC_KEY : '', - chainId: 1, -}); -// mainnet only -new portisConnector.PortisConnector({ - dAppId: PORTIS_ID !== null && PORTIS_ID !== void 0 ? PORTIS_ID : '', - networks: [1], -}); -new walletlinkConnector.WalletLinkConnector({ - url: INFURA_NETWORK_URLS[SupportedChainId.MAINNET], - appName: 'Uniswap', - appLogoUrl: UNISWAP_LOGO_URL, - supportedChainIds: [SupportedChainId.MAINNET, SupportedChainId.POLYGON], -}); - -var fetchTokenList = { - pending: toolkit.createAction('lists/fetchTokenList/pending'), - fulfilled: toolkit.createAction('lists/fetchTokenList/fulfilled'), - rejected: toolkit.createAction('lists/fetchTokenList/rejected'), -}; -// add and remove from list options -var addList = toolkit.createAction('lists/addList'); -var removeList = toolkit.createAction('lists/removeList'); -// select which lists to search across from loaded lists -var enableList = toolkit.createAction('lists/enableList'); -var disableList = toolkit.createAction('lists/disableList'); -// versioning -var acceptListUpdate = toolkit.createAction('lists/acceptListUpdate'); - -function useFetchListCallback() { - var _this = this; - var _a = useActiveWeb3React(), chainId = _a.chainId, library = _a.library; - var dispatch = useAppDispatch(); - var ensResolver = React.useCallback(function (ensName) { return __awaiter(_this, void 0, void 0, function () { - var networkLibrary, network; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - if (!(!library || chainId !== 1)) return [3 /*break*/, 2]; - networkLibrary = getNetworkLibrary(); - return [4 /*yield*/, networkLibrary.getNetwork()]; - case 1: - network = _a.sent(); - if (networkLibrary && network.chainId === 1) { - return [2 /*return*/, resolveENSContentHash(ensName, networkLibrary)]; - } - throw new Error('Could not construct mainnet ENS resolver'); - case 2: return [2 /*return*/, resolveENSContentHash(ensName, library)]; - } - }); - }); }, [chainId, library]); - // note: prevent dispatch if using for list search or unsupported list - return React.useCallback(function (listUrl, sendDispatch) { - if (sendDispatch === void 0) { sendDispatch = true; } - return __awaiter(_this, void 0, void 0, function () { - var requestId; - return __generator(this, function (_a) { - requestId = toolkit.nanoid(); - sendDispatch && dispatch(fetchTokenList.pending({ requestId: requestId, url: listUrl })); - return [2 /*return*/, fetchTokenList$1(listUrl, ensResolver) - .then(function (tokenList) { - sendDispatch && dispatch(fetchTokenList.fulfilled({ url: listUrl, tokenList: tokenList, requestId: requestId })); - return tokenList; - }) - .catch(function (error) { - console.debug("Failed to get list at url " + listUrl, error); - sendDispatch && dispatch(fetchTokenList.rejected({ url: listUrl, requestId: requestId, errorMessage: error.message })); - throw error; - })]; - }); - }); - }, [dispatch, ensResolver]); -} - -var Wrapper$8 = styled__default["default"].div(templateObject_1$o || (templateObject_1$o = __makeTemplateObject(["\n position: relative;\n width: 100%;\n overflow: auto;\n"], ["\n position: relative;\n width: 100%;\n overflow: auto;\n"]))); -function ImportList(_a) { - var _b; - var listURL = _a.listURL, list = _a.list, setModalView = _a.setModalView, onDismiss = _a.onDismiss; - var theme = useTheme(); - var dispatch = useAppDispatch(); - // user must accept - var _c = __read(React.useState(false), 2), confirmed = _c[0], setConfirmed = _c[1]; - var lists = useAllLists(); - var fetchList = useFetchListCallback(); - // monitor is list is loading - var adding = Boolean((_b = lists[listURL]) === null || _b === void 0 ? void 0 : _b.loadingRequestId); - var _d = __read(React.useState(null), 2), addError = _d[0], setAddError = _d[1]; - var handleAddList = React.useCallback(function () { - if (adding) - return; - setAddError(null); - fetchList(listURL) - .then(function () { - ReactGA__default["default"].event({ - category: 'Lists', - action: 'Add List', - label: listURL, - }); - // turn list on - dispatch(enableList(listURL)); - // go back to lists - setModalView(CurrencyModalView.manage); - }) - .catch(function (error) { - ReactGA__default["default"].event({ - category: 'Lists', - action: 'Add List Failed', - label: listURL, - }); - setAddError(error.message); - dispatch(removeList(listURL)); - }); - }, [adding, dispatch, fetchList, listURL, setModalView]); - return (jsxRuntime.jsxs(Wrapper$8, { children: [jsxRuntime.jsx(PaddedColumn, __assign({ gap: "14px", style: { width: '100%', flex: '1 1' } }, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(reactFeather.ArrowLeft, { style: { cursor: 'pointer' }, onClick: function () { return setModalView(CurrencyModalView.manage); } }, void 0), jsxRuntime.jsx(ThemedText.MediumHeader, { children: jsxRuntime.jsx(macro.Trans, { children: "Import List" }, void 0) }, void 0), jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0)] }, void 0) }), void 0), jsxRuntime.jsx(SectionBreak, {}, void 0), jsxRuntime.jsx(PaddedColumn, __assign({ gap: "md" }, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "md" }, { children: [jsxRuntime.jsx(Card, __assign({ backgroundColor: theme.bg2, padding: "12px 20px" }, { children: jsxRuntime.jsx(RowBetween, { children: jsxRuntime.jsxs(RowFixed, { children: [list.logoURI && jsxRuntime.jsx(ListLogo, { logoURI: list.logoURI, size: "40px" }, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "sm", style: { marginLeft: '20px' } }, { children: [jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 600, mr: "6px" }, { children: list.name }), void 0), jsxRuntime.jsx(TextDot, {}, void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: '16px', ml: "6px" }, { children: jsxRuntime.jsxs(macro.Trans, { children: [list.tokens.length, " tokens"] }, void 0) }), void 0)] }, void 0), jsxRuntime.jsx(ExternalLink, __assign({ href: "https://tokenlists.org/token-list?url=" + listURL }, { children: jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: '12px', color: theme.blue1 }, { children: listURL }), void 0) }), void 0)] }), void 0)] }, void 0) }, void 0) }), void 0), jsxRuntime.jsxs(Card, __assign({ style: { backgroundColor: polished.transparentize(0.8, theme.red1) } }, { children: [jsxRuntime.jsxs(AutoColumn, __assign({ justify: "center", style: { textAlign: 'center', gap: '16px', marginBottom: '12px' } }, { children: [jsxRuntime.jsx(reactFeather.AlertTriangle, { stroke: theme.red1, size: 32 }, void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 500, fontSize: 20, color: theme.red1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Import at your own risk" }, void 0) }), void 0)] }), void 0), jsxRuntime.jsxs(AutoColumn, __assign({ style: { textAlign: 'center', gap: '16px', marginBottom: '12px' } }, { children: [jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 500, color: theme.red1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one." }, void 0) }), void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 600, color: theme.red1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "If you purchase a token from this list, you may not be able to sell it back." }, void 0) }), void 0)] }), void 0), jsxRuntime.jsxs(AutoRow, __assign({ justify: "center", style: { cursor: 'pointer' }, onClick: function () { return setConfirmed(!confirmed); } }, { children: [jsxRuntime.jsx(Checkbox, { name: "confirmed", type: "checkbox", checked: confirmed, onChange: function () { return setConfirmed(!confirmed); } }, void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ ml: "10px", fontSize: "16px", color: theme.red1, fontWeight: 500 }, { children: jsxRuntime.jsx(macro.Trans, { children: "I understand" }, void 0) }), void 0)] }), void 0)] }), void 0), jsxRuntime.jsx(ButtonPrimary, __assign({ disabled: !confirmed, altDisabledStyle: true, "$borderRadius": "20px", padding: "10px 1rem", onClick: handleAddList }, { children: jsxRuntime.jsx(macro.Trans, { children: "Import" }, void 0) }), void 0), addError ? (jsxRuntime.jsx(ThemedText.Error, __assign({ title: addError, style: { textOverflow: 'ellipsis', overflow: 'hidden' }, error: true }, { children: addError }), void 0)) : null] }), void 0) }), void 0)] }, void 0)); -} -var templateObject_1$o; - -var WarningWrapper = styled__default["default"](Card)(templateObject_1$n || (templateObject_1$n = __makeTemplateObject(["\n background-color: ", ";\n width: fit-content;\n"], ["\n background-color: ", ";\n width: fit-content;\n"])), function (_a) { - var theme = _a.theme, highWarning = _a.highWarning; - return highWarning ? polished.transparentize(0.8, theme.red1) : polished.transparentize(0.8, theme.yellow2); -}); -var AddressText = styled__default["default"](ThemedText.Blue)(templateObject_3$9 || (templateObject_3$9 = __makeTemplateObject(["\n font-size: 12px;\n word-break: break-all;\n\n ", "\n"], ["\n font-size: 12px;\n word-break: break-all;\n\n ", "\n"])), function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToSmall(templateObject_2$c || (templateObject_2$c = __makeTemplateObject(["\n font-size: 10px;\n "], ["\n font-size: 10px;\n "]))); -}); -var TokenImportCard = function (_a) { - var list = _a.list, token = _a.token; - var theme = styled.useTheme(); - var chainId = useActiveWeb3React().chainId; - return (jsxRuntime.jsx(Card, __assign({ backgroundColor: theme.bg2, padding: "2rem" }, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "10px", justify: "center" }, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: token, size: '32px' }, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "4px", justify: "center" }, { children: [jsxRuntime.jsx(ThemedText.Body, __assign({ ml: "8px", mr: "8px", fontWeight: 500, fontSize: 20 }, { children: token.symbol }), void 0), jsxRuntime.jsx(ThemedText.DarkGray, __assign({ fontWeight: 400, fontSize: 14 }, { children: token.name }), void 0)] }), void 0), chainId && (jsxRuntime.jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, token.address, ExplorerDataType.ADDRESS) }, { children: jsxRuntime.jsx(AddressText, __assign({ fontSize: 12 }, { children: token.address }), void 0) }), void 0)), list !== undefined ? (jsxRuntime.jsxs(RowFixed, { children: [list.logoURI && jsxRuntime.jsx(ListLogo, { logoURI: list.logoURI, size: "16px" }, void 0), jsxRuntime.jsx(ThemedText.Small, __assign({ ml: "6px", fontSize: 14, color: theme.text3 }, { children: jsxRuntime.jsxs(macro.Trans, { children: ["via ", list.name, " token list"] }, void 0) }), void 0)] }, void 0)) : (jsxRuntime.jsx(WarningWrapper, __assign({ "$borderRadius": "4px", padding: "4px", highWarning: true }, { children: jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(reactFeather.AlertCircle, { stroke: theme.red1, size: "10px" }, void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ color: theme.red1, ml: "4px", fontSize: "10px", fontWeight: 500 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Unknown Source" }, void 0) }), void 0)] }, void 0) }), void 0))] }), void 0) }), void 0)); -}; -var templateObject_1$n, templateObject_2$c, templateObject_3$9; - -var Wrapper$7 = styled__default["default"].div(templateObject_1$m || (templateObject_1$m = __makeTemplateObject(["\n align-items: center;\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n height: 100%;\n width: 100%;\n"], ["\n align-items: center;\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n height: 100%;\n width: 100%;\n"]))); -var Button = styled__default["default"](ButtonPrimary)(templateObject_2$b || (templateObject_2$b = __makeTemplateObject(["\n margin-top: 1em;\n padding: 10px 1em;\n"], ["\n margin-top: 1em;\n padding: 10px 1em;\n"]))); -var Content = styled__default["default"].div(templateObject_3$8 || (templateObject_3$8 = __makeTemplateObject(["\n padding: 1em;\n"], ["\n padding: 1em;\n"]))); -var Copy = styled__default["default"](ThemedText.Body)(templateObject_4$6 || (templateObject_4$6 = __makeTemplateObject(["\n text-align: center;\n margin: 0 2em 1em !important;\n font-weight: 400;\n font-size: 16px;\n"], ["\n text-align: center;\n margin: 0 2em 1em !important;\n font-weight: 400;\n font-size: 16px;\n"]))); -var Header = styled__default["default"].div(templateObject_5$6 || (templateObject_5$6 = __makeTemplateObject(["\n align-items: center;\n display: flex;\n gap: 14px;\n justify-content: space-between;\n padding: 20px;\n width: 100%;\n"], ["\n align-items: center;\n display: flex;\n gap: 14px;\n justify-content: space-between;\n padding: 20px;\n width: 100%;\n"]))); -var Icon = styled__default["default"](reactFeather.AlertCircle)(templateObject_6$4 || (templateObject_6$4 = __makeTemplateObject(["\n stroke: ", ";\n width: 48px;\n height: 48px;\n"], ["\n stroke: ", ";\n width: 48px;\n height: 48px;\n"])), function (_a) { - var theme = _a.theme; - return theme.text2; -}); -var BlockedToken = function (_a) { - var onBack = _a.onBack, onDismiss = _a.onDismiss, blockedTokens = _a.blockedTokens; - return (jsxRuntime.jsxs(Wrapper$7, { children: [jsxRuntime.jsxs(Header, { children: [onBack ? jsxRuntime.jsx(reactFeather.ArrowLeft, { style: { cursor: 'pointer' }, onClick: onBack }, void 0) : jsxRuntime.jsx("div", {}, void 0), jsxRuntime.jsx(ThemedText.MediumHeader, { children: jsxRuntime.jsx(macro.Trans, { children: "Token not supported" }, void 0) }, void 0), onDismiss ? jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0) : jsxRuntime.jsx("div", {}, void 0)] }, void 0), jsxRuntime.jsx(Icon, {}, void 0), jsxRuntime.jsxs(Content, { children: [jsxRuntime.jsx(Copy, { children: jsxRuntime.jsx(macro.Trans, { children: "This token is not supported in the Uniswap Labs app" }, void 0) }, void 0), jsxRuntime.jsx(TokenImportCard, { token: blockedTokens[0] }, void 0), jsxRuntime.jsx(Button, __assign({ disabled: true }, { children: jsxRuntime.jsx(macro.Trans, { children: "Import" }, void 0) }), void 0)] }, void 0)] }, void 0)); -}; -var templateObject_1$m, templateObject_2$b, templateObject_3$8, templateObject_4$6, templateObject_5$6, templateObject_6$4; - -var Wrapper$6 = styled__default["default"].div(templateObject_1$l || (templateObject_1$l = __makeTemplateObject(["\n position: relative;\n width: 100%;\n overflow: auto;\n"], ["\n position: relative;\n width: 100%;\n overflow: auto;\n"]))); -function ImportToken(props) { - var tokens = props.tokens, list = props.list, onBack = props.onBack, onDismiss = props.onDismiss, handleCurrencySelect = props.handleCurrencySelect; - var theme = useTheme(); - var addToken = useAddUserToken(); - var unsupportedTokens = useUnsupportedTokens(); - var unsupportedSet = new Set(Object.keys(unsupportedTokens)); - var intersection = new Set(tokens.filter(function (token) { return unsupportedSet.has(token.address); })); - if (intersection.size > 0) { - return jsxRuntime.jsx(BlockedToken, { onBack: onBack, onDismiss: onDismiss, blockedTokens: Array.from(intersection) }, void 0); - } - return (jsxRuntime.jsxs(Wrapper$6, { children: [jsxRuntime.jsx(PaddedColumn, __assign({ gap: "14px", style: { width: '100%', flex: '1 1' } }, { children: jsxRuntime.jsxs(RowBetween, { children: [onBack ? jsxRuntime.jsx(reactFeather.ArrowLeft, { style: { cursor: 'pointer' }, onClick: onBack }, void 0) : jsxRuntime.jsx("div", {}, void 0), jsxRuntime.jsx(ThemedText.MediumHeader, { children: jsxRuntime.jsx(macro.Plural, { value: tokens.length, one: "Import token", other: "Import tokens" }, void 0) }, void 0), onDismiss ? jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0) : jsxRuntime.jsx("div", {}, void 0)] }, void 0) }), void 0), jsxRuntime.jsx(SectionBreak, {}, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "md", style: { marginBottom: '32px', padding: '1rem' } }, { children: [jsxRuntime.jsxs(AutoColumn, __assign({ justify: "center", style: { textAlign: 'center', gap: '16px', padding: '1rem' } }, { children: [jsxRuntime.jsx(reactFeather.AlertCircle, { size: 48, stroke: theme.text2, strokeWidth: 1 }, void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 400, fontSize: 16 }, { children: jsxRuntime.jsx(macro.Trans, { children: "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade." }, void 0) }), void 0)] }), void 0), tokens.map(function (token) { return (jsxRuntime.jsx(TokenImportCard, { token: token, list: list }, 'import' + token.address)); }), jsxRuntime.jsx(ButtonPrimary, __assign({ altDisabledStyle: true, "$borderRadius": "20px", padding: "10px 1rem", onClick: function () { - tokens.map(function (token) { return addToken(token); }); - handleCurrencySelect && handleCurrencySelect(tokens[0]); - }, className: ".token-dismiss-button" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Import" }, void 0) }), void 0)] }), void 0)] }, void 0)); -} -var templateObject_1$l; - -function getColorFromUriPath(uri) { - return __awaiter(this, void 0, void 0, function () { - var formattedPath, palette, detectedHex, AAscore; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - formattedPath = uriToHttp(uri)[0]; - return [4 /*yield*/, Vibrant__default["default"].from(formattedPath).getPalette()]; - case 1: - palette = _a.sent(); - if (!(palette === null || palette === void 0 ? void 0 : palette.Vibrant)) { - return [2 /*return*/, null]; - } - detectedHex = palette.Vibrant.hex; - AAscore = wcagContrast.hex(detectedHex, '#FFF'); - while (AAscore < 3) { - detectedHex = polished.shade(0.005, detectedHex); - AAscore = wcagContrast.hex(detectedHex, '#FFF'); - } - return [2 /*return*/, detectedHex]; - } - }); - }); -} -function useListColor(listImageUri) { - var _a = __read(React.useState('#2172E5'), 2), color = _a[0], setColor = _a[1]; - React.useLayoutEffect(function () { - var stale = false; - if (listImageUri) { - getColorFromUriPath(listImageUri).then(function (color) { - if (!stale && color !== null) { - setColor(color); - } - }); - } - return function () { - stale = true; - setColor('#2172E5'); - }; - }, [listImageUri]); - return color; -} - -function listVersionLabel(version) { - return "v" + version.major + "." + version.minor + "." + version.patch; -} - -var Wrapper$5 = styled__default["default"].button(templateObject_1$k || (templateObject_1$k = __makeTemplateObject(["\n border-radius: 20px;\n border: none;\n background: ", ";\n display: flex;\n width: fit-content;\n cursor: pointer;\n outline: none;\n padding: 0.4rem 0.4rem;\n align-items: center;\n"], ["\n border-radius: 20px;\n border: none;\n background: ", ";\n display: flex;\n width: fit-content;\n cursor: pointer;\n outline: none;\n padding: 0.4rem 0.4rem;\n align-items: center;\n"])), function (_a) { - var theme = _a.theme; - return theme.bg1; -}); -var ToggleElement$1 = styled__default["default"].span(templateObject_2$a || (templateObject_2$a = __makeTemplateObject(["\n border-radius: 50%;\n height: 24px;\n width: 24px;\n background-color: ", ";\n :hover {\n opacity: 0.8;\n }\n"], ["\n border-radius: 50%;\n height: 24px;\n width: 24px;\n background-color: ", ";\n :hover {\n opacity: 0.8;\n }\n"])), function (_a) { - var isActive = _a.isActive, bgColor = _a.bgColor, theme = _a.theme; - return (isActive ? bgColor : theme.bg4); -}); -var StatusText = styled__default["default"](ThemedText.Main)(templateObject_3$7 || (templateObject_3$7 = __makeTemplateObject(["\n margin: 0 10px;\n width: 24px;\n color: ", ";\n"], ["\n margin: 0 10px;\n width: 24px;\n color: ", ";\n"])), function (_a) { - var theme = _a.theme, isActive = _a.isActive; - return (isActive ? theme.text1 : theme.text3); -}); -function ListToggle(_a) { - var id = _a.id, isActive = _a.isActive, bgColor = _a.bgColor, toggle = _a.toggle; - return (jsxRuntime.jsxs(Wrapper$5, __assign({ id: id, isActive: isActive, onClick: toggle }, { children: [isActive && (jsxRuntime.jsx(StatusText, __assign({ fontWeight: "600", margin: "0 6px", isActive: true }, { children: jsxRuntime.jsx(macro.Trans, { children: "ON" }, void 0) }), void 0)), jsxRuntime.jsx(ToggleElement$1, { isActive: isActive, bgColor: bgColor }, void 0), !isActive && (jsxRuntime.jsx(StatusText, __assign({ fontWeight: "600", margin: "0 6px", isActive: false }, { children: jsxRuntime.jsx(macro.Trans, { children: "OFF" }, void 0) }), void 0))] }), void 0)); -} -var templateObject_1$k, templateObject_2$a, templateObject_3$7; - -var Wrapper$4 = styled__default["default"](Column)(templateObject_1$j || (templateObject_1$j = __makeTemplateObject(["\n flex: 1;\n overflow-y: hidden;\n"], ["\n flex: 1;\n overflow-y: hidden;\n"]))); -var UnpaddedLinkStyledButton = styled__default["default"](LinkStyledButton)(templateObject_2$9 || (templateObject_2$9 = __makeTemplateObject(["\n padding: 0;\n font-size: 1rem;\n opacity: ", ";\n"], ["\n padding: 0;\n font-size: 1rem;\n opacity: ", ";\n"])), function (_a) { - var disabled = _a.disabled; - return (disabled ? '0.4' : '1'); -}); -var PopoverContainer = styled__default["default"].div(templateObject_3$6 || (templateObject_3$6 = __makeTemplateObject(["\n z-index: 100;\n visibility: ", ";\n opacity: ", ";\n transition: visibility 150ms linear, opacity 150ms linear;\n background: ", ";\n border: 1px solid ", ";\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: ", ";\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 z-index: 100;\n visibility: ", ";\n opacity: ", ";\n transition: visibility 150ms linear, opacity 150ms linear;\n background: ", ";\n border: 1px solid ", ";\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: ", ";\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"])), function (props) { return (props.show ? 'visible' : 'hidden'); }, function (props) { return (props.show ? 1 : 0); }, function (_a) { - var theme = _a.theme; - return theme.bg2; -}, function (_a) { - var theme = _a.theme; - return theme.bg3; -}, function (_a) { - var theme = _a.theme; - return theme.text2; -}); -var StyledMenu$1 = styled__default["default"].div(templateObject_4$5 || (templateObject_4$5 = __makeTemplateObject(["\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n"], ["\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n"]))); -var StyledTitleText = styled__default["default"].div(templateObject_5$5 || (templateObject_5$5 = __makeTemplateObject(["\n font-size: 16px;\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 600;\n color: ", ";\n"], ["\n font-size: 16px;\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 600;\n color: ", ";\n"])), function (_a) { - var theme = _a.theme, active = _a.active; - return (active ? theme.white : theme.text2); -}); -var StyledListUrlText = styled__default["default"](ThemedText.Main)(templateObject_6$3 || (templateObject_6$3 = __makeTemplateObject(["\n font-size: 12px;\n color: ", ";\n"], ["\n font-size: 12px;\n color: ", ";\n"])), function (_a) { - var theme = _a.theme, active = _a.active; - return (active ? theme.white : theme.text2); -}); -var RowWrapper = styled__default["default"](Row)(templateObject_7$3 || (templateObject_7$3 = __makeTemplateObject(["\n background-color: ", ";\n opacity: ", ";\n transition: 200ms;\n align-items: center;\n padding: 1rem;\n border-radius: 20px;\n"], ["\n background-color: ", ";\n opacity: ", ";\n transition: 200ms;\n align-items: center;\n padding: 1rem;\n border-radius: 20px;\n"])), function (_a) { - var bgColor = _a.bgColor, active = _a.active, theme = _a.theme; - return (active ? bgColor !== null && bgColor !== void 0 ? bgColor : 'transparent' : theme.bg2); -}, function (_a) { - var hasActiveTokens = _a.hasActiveTokens; - return (hasActiveTokens ? 1 : 0.4); -}); -function listUrlRowHTMLId(listUrl) { - return "list-row-" + listUrl.replace(/\./g, '-'); -} -var ListRow = React.memo(function ListRow(_a) { - var listUrl = _a.listUrl; - var chainId = useActiveWeb3React().chainId; - var listsByUrl = useAppSelector(function (state) { return state.lists.byUrl; }); - var dispatch = useAppDispatch(); - var _b = listsByUrl[listUrl], list = _b.current, pending = _b.pendingUpdate; - var activeTokensOnThisChain = React.useMemo(function () { - if (!list || !chainId) { - return 0; - } - return list.tokens.reduce(function (acc, cur) { return (cur.chainId === chainId ? acc + 1 : acc); }, 0); - }, [chainId, list]); - var theme = useTheme(); - var listColor = useListColor(list === null || list === void 0 ? void 0 : list.logoURI); - var isActive = useIsListActive(listUrl); - var _c = __read(useToggle(false), 2), open = _c[0], toggle = _c[1]; - var node = React.useRef(); - var _d = __read(React.useState(), 2), referenceElement = _d[0], setReferenceElement = _d[1]; - var _e = __read(React.useState(), 2), popperElement = _e[0], setPopperElement = _e[1]; - var _f = reactPopper.usePopper(referenceElement, popperElement, { - placement: 'auto', - strategy: 'fixed', - modifiers: [{ name: 'offset', options: { offset: [8, 8] } }], - }), styles = _f.styles, attributes = _f.attributes; - useOnClickOutside(node, open ? toggle : undefined); - var handleAcceptListUpdate = React.useCallback(function () { - if (!pending) - return; - ReactGA__default["default"].event({ - category: 'Lists', - action: 'Update List from List Select', - label: listUrl, - }); - dispatch(acceptListUpdate(listUrl)); - }, [dispatch, listUrl, pending]); - var handleRemoveList = React.useCallback(function () { - ReactGA__default["default"].event({ - category: 'Lists', - action: 'Start Remove List', - label: listUrl, - }); - if (window.prompt(macro.t(templateObject_8$2 || (templateObject_8$2 = __makeTemplateObject(["Please confirm you would like to remove this list by typing REMOVE"], ["Please confirm you would like to remove this list by typing REMOVE"])))) === "REMOVE") { - ReactGA__default["default"].event({ - category: 'Lists', - action: 'Confirm Remove List', - label: listUrl, - }); - dispatch(removeList(listUrl)); - } - }, [dispatch, listUrl]); - var handleEnableList = React.useCallback(function () { - ReactGA__default["default"].event({ - category: 'Lists', - action: 'Enable List', - label: listUrl, - }); - dispatch(enableList(listUrl)); - }, [dispatch, listUrl]); - var handleDisableList = React.useCallback(function () { - ReactGA__default["default"].event({ - category: 'Lists', - action: 'Disable List', - label: listUrl, - }); - dispatch(disableList(listUrl)); - }, [dispatch, listUrl]); - if (!list) - return null; - return (jsxRuntime.jsxs(RowWrapper, __assign({ active: isActive, hasActiveTokens: activeTokensOnThisChain > 0, bgColor: listColor, id: listUrlRowHTMLId(listUrl) }, { children: [list.logoURI ? (jsxRuntime.jsx(ListLogo, { size: "40px", style: { marginRight: '1rem' }, logoURI: list.logoURI, alt: list.name + " list logo" }, void 0)) : (jsxRuntime.jsx("div", { style: { width: '24px', height: '24px', marginRight: '1rem' } }, void 0)), jsxRuntime.jsxs(Column, __assign({ style: { flex: '1' } }, { children: [jsxRuntime.jsx(Row, { children: jsxRuntime.jsx(StyledTitleText, __assign({ active: isActive }, { children: list.name }), void 0) }, void 0), jsxRuntime.jsxs(RowFixed, __assign({ mt: "4px" }, { children: [jsxRuntime.jsx(StyledListUrlText, __assign({ active: isActive, mr: "6px" }, { children: jsxRuntime.jsxs(macro.Trans, { children: [activeTokensOnThisChain, " tokens"] }, void 0) }), void 0), jsxRuntime.jsxs(StyledMenu$1, __assign({ ref: node }, { children: [jsxRuntime.jsx(ButtonEmpty, __assign({ onClick: toggle, ref: setReferenceElement, padding: "0" }, { children: jsxRuntime.jsx(reactFeather.Settings, { stroke: isActive ? theme.bg1 : theme.text1, size: 12 }, void 0) }), void 0), open && (jsxRuntime.jsxs(PopoverContainer, __assign({ show: true, ref: setPopperElement, style: styles.popper }, attributes.popper, { children: [jsxRuntime.jsx("div", { children: list && listVersionLabel(list.version) }, void 0), jsxRuntime.jsx(SeparatorDark, {}, void 0), jsxRuntime.jsx(ExternalLink, __assign({ href: "https://tokenlists.org/token-list?url=" + listUrl }, { children: jsxRuntime.jsx(macro.Trans, { children: "View list" }, void 0) }), void 0), jsxRuntime.jsx(UnpaddedLinkStyledButton, __assign({ onClick: handleRemoveList, disabled: Object.keys(listsByUrl).length === 1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Remove list" }, void 0) }), void 0), pending && (jsxRuntime.jsx(UnpaddedLinkStyledButton, __assign({ onClick: handleAcceptListUpdate }, { children: jsxRuntime.jsx(macro.Trans, { children: "Update list" }, void 0) }), void 0))] }), void 0))] }), void 0)] }), void 0)] }), void 0), jsxRuntime.jsx(ListToggle, { isActive: isActive, bgColor: listColor, toggle: function () { - isActive ? handleDisableList() : handleEnableList(); - } }, void 0)] }), listUrl)); -}); -var ListContainer = styled__default["default"].div(templateObject_9$2 || (templateObject_9$2 = __makeTemplateObject(["\n padding: 1rem;\n height: 100%;\n overflow: auto;\n flex: 1;\n"], ["\n padding: 1rem;\n height: 100%;\n overflow: auto;\n flex: 1;\n"]))); -function ManageLists(_a) { - var setModalView = _a.setModalView, setImportList = _a.setImportList, setListUrl = _a.setListUrl; - var chainId = useActiveWeb3React().chainId; - var theme = useTheme(); - var _b = __read(React.useState(''), 2), listUrlInput = _b[0], setListUrlInput = _b[1]; - var lists = useAllLists(); - var tokenCountByListName = React.useMemo(function () { - return Object.values(lists).reduce(function (acc, _a) { - var _b; - var list = _a.current; - if (!list) { - return acc; - } - return __assign(__assign({}, acc), (_b = {}, _b[list.name] = list.tokens.reduce(function (count, token) { return (token.chainId === chainId ? count + 1 : count); }, 0), _b)); - }, {}); - }, [chainId, lists]); - // sort by active but only if not visible - var activeListUrls = useActiveListUrls(); - var handleInput = React.useCallback(function (e) { - setListUrlInput(e.target.value); - }, []); - var fetchList = useFetchListCallback(); - var validUrl = React.useMemo(function () { - return uriToHttp(listUrlInput).length > 0 || Boolean(parseENSAddress(listUrlInput)); - }, [listUrlInput]); - var sortedLists = React.useMemo(function () { - var listUrls = Object.keys(lists); - return listUrls - .filter(function (listUrl) { - // only show loaded lists, hide unsupported lists - return Boolean(lists[listUrl].current) && !Boolean(UNSUPPORTED_LIST_URLS.includes(listUrl)); - }) - .sort(function (listUrlA, listUrlB) { - var listA = lists[listUrlA].current; - var listB = lists[listUrlB].current; - // first filter on active lists - if ((activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(listUrlA)) && !(activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(listUrlB))) { - return -1; - } - if (!(activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(listUrlA)) && (activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(listUrlB))) { - return 1; - } - if (listA && listB) { - if (tokenCountByListName[listA.name] > tokenCountByListName[listB.name]) { - return -1; - } - if (tokenCountByListName[listA.name] < tokenCountByListName[listB.name]) { - return 1; - } - return listA.name.toLowerCase() < listB.name.toLowerCase() - ? -1 - : listA.name.toLowerCase() === listB.name.toLowerCase() - ? 0 - : 1; - } - if (listA) - return -1; - if (listB) - return 1; - return 0; - }); - }, [lists, activeListUrls, tokenCountByListName]); - // temporary fetched list for import flow - var _c = __read(React.useState(), 2), tempList = _c[0], setTempList = _c[1]; - var _d = __read(React.useState(), 2), addError = _d[0], setAddError = _d[1]; - React.useEffect(function () { - function fetchTempList() { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - fetchList(listUrlInput, false) - .then(function (list) { return setTempList(list); }) - .catch(function () { return setAddError(macro.t(templateObject_10$2 || (templateObject_10$2 = __makeTemplateObject(["Error importing list"], ["Error importing list"])))); }); - return [2 /*return*/]; - }); - }); - } - // if valid url, fetch details for card - if (validUrl) { - fetchTempList(); - } - else { - setTempList(undefined); - listUrlInput !== '' && setAddError(macro.t(templateObject_11$2 || (templateObject_11$2 = __makeTemplateObject(["Enter valid list location"], ["Enter valid list location"])))); - } - // reset error - if (listUrlInput === '') { - setAddError(undefined); - } - }, [fetchList, listUrlInput, validUrl]); - // check if list is already imported - var isImported = Object.keys(lists).includes(listUrlInput); - // set list values and have parent modal switch to import list view - var handleImport = React.useCallback(function () { - if (!tempList) - return; - setImportList(tempList); - setModalView(CurrencyModalView.importList); - setListUrl(listUrlInput); - }, [listUrlInput, setImportList, setListUrl, setModalView, tempList]); - return (jsxRuntime.jsxs(Wrapper$4, { children: [jsxRuntime.jsxs(PaddedColumn, __assign({ gap: "14px" }, { children: [jsxRuntime.jsx(Row, { children: jsxRuntime.jsx(SearchInput, { type: "text", id: "list-add-input", placeholder: macro.t(templateObject_12$2 || (templateObject_12$2 = __makeTemplateObject(["https:// or ipfs:// or ENS name"], ["https:// or ipfs:// or ENS name"]))), value: listUrlInput, onChange: handleInput }, void 0) }, void 0), addError ? (jsxRuntime.jsx(ThemedText.Error, __assign({ title: addError, style: { textOverflow: 'ellipsis', overflow: 'hidden' }, error: true }, { children: addError }), void 0)) : null] }), void 0), tempList && (jsxRuntime.jsx(PaddedColumn, __assign({ style: { paddingTop: 0 } }, { children: jsxRuntime.jsx(Card, __assign({ backgroundColor: theme.bg2, padding: "12px 20px" }, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsxs(RowFixed, { children: [tempList.logoURI && jsxRuntime.jsx(ListLogo, { logoURI: tempList.logoURI, size: "40px" }, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "4px", style: { marginLeft: '20px' } }, { children: [jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 600 }, { children: tempList.name }), void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: '12px' }, { children: jsxRuntime.jsxs(macro.Trans, { children: [tempList.tokens.length, " tokens"] }, void 0) }), void 0)] }), void 0)] }, void 0), isImported ? (jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(IconWrapper, __assign({ stroke: theme.text2, size: "16px", marginRight: '10px' }, { children: jsxRuntime.jsx(reactFeather.CheckCircle, {}, void 0) }), void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ color: theme.text2 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Loaded" }, void 0) }), void 0)] }, void 0)) : (jsxRuntime.jsx(ButtonPrimary, __assign({ style: { fontSize: '14px' }, padding: "6px 8px", width: "fit-content", onClick: handleImport }, { children: jsxRuntime.jsx(macro.Trans, { children: "Import" }, void 0) }), void 0))] }, void 0) }), void 0) }), void 0)), jsxRuntime.jsx(Separator, {}, void 0), jsxRuntime.jsx(ListContainer, { children: jsxRuntime.jsx(AutoColumn, __assign({ gap: "md" }, { children: sortedLists.map(function (listUrl) { return (jsxRuntime.jsx(ListRow, { listUrl: listUrl }, listUrl)); }) }), void 0) }, void 0)] }, void 0)); -} -var templateObject_1$j, templateObject_2$9, templateObject_3$6, templateObject_4$5, templateObject_5$5, templateObject_6$3, templateObject_7$3, templateObject_8$2, templateObject_9$2, templateObject_10$2, templateObject_11$2, templateObject_12$2; - -var Wrapper$3 = styled__default["default"].div(templateObject_1$i || (templateObject_1$i = __makeTemplateObject(["\n width: 100%;\n height: calc(100% - 60px);\n position: relative;\n padding-bottom: 80px;\n"], ["\n width: 100%;\n height: calc(100% - 60px);\n position: relative;\n padding-bottom: 80px;\n"]))); -var Footer = styled__default["default"].div(templateObject_2$8 || (templateObject_2$8 = __makeTemplateObject(["\n position: absolute;\n bottom: 0;\n width: 100%;\n border-radius: 20px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n border-top: 1px solid ", ";\n padding: 20px;\n text-align: center;\n"], ["\n position: absolute;\n bottom: 0;\n width: 100%;\n border-radius: 20px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n border-top: 1px solid ", ";\n padding: 20px;\n text-align: center;\n"])), function (_a) { - var theme = _a.theme; - return theme.bg3; -}); -function ManageTokens(_a) { - var setModalView = _a.setModalView, setImportToken = _a.setImportToken; - var chainId = useActiveWeb3React().chainId; - var _b = __read(React.useState(''), 2), searchQuery = _b[0], setSearchQuery = _b[1]; - var theme = useTheme(); - // manage focus on modal show - var inputRef = React.useRef(); - var handleInput = React.useCallback(function (event) { - var input = event.target.value; - var checksummedInput = isAddress(input); - setSearchQuery(checksummedInput || input); - }, []); - // if they input an address, use it - var isAddressSearch = isAddress(searchQuery); - var searchToken = useToken(searchQuery); - // all tokens for local lisr - var userAddedTokens = useUserAddedTokens(); - var removeToken = useRemoveUserAddedToken(); - var handleRemoveAll = React.useCallback(function () { - if (chainId && userAddedTokens) { - userAddedTokens.map(function (token) { - return removeToken(chainId, token.address); - }); - } - }, [removeToken, userAddedTokens, chainId]); - var tokenList = React.useMemo(function () { - return (chainId && - userAddedTokens.map(function (token) { return (jsxRuntime.jsxs(RowBetween, __assign({ width: "100%" }, { children: [jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: token, size: '20px' }, void 0), jsxRuntime.jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, token.address, ExplorerDataType.ADDRESS) }, { children: jsxRuntime.jsx(ThemedText.Main, __assign({ ml: '10px', fontWeight: 600 }, { children: token.symbol }), void 0) }), void 0)] }, void 0), jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(TrashIcon, { onClick: function () { return removeToken(chainId, token.address); } }, void 0), jsxRuntime.jsx(ExternalLinkIcon, { href: getExplorerLink(chainId, token.address, ExplorerDataType.ADDRESS) }, void 0)] }, void 0)] }), token.address)); })); - }, [userAddedTokens, chainId, removeToken]); - return (jsxRuntime.jsxs(Wrapper$3, { children: [jsxRuntime.jsxs(Column, __assign({ style: { width: '100%', height: '100%', flex: '1 1' } }, { children: [jsxRuntime.jsxs(PaddedColumn, __assign({ gap: "14px" }, { children: [jsxRuntime.jsx(Row, { children: jsxRuntime.jsx(SearchInput, { type: "text", id: "token-search-input", placeholder: '0x0000', value: searchQuery, autoComplete: "off", ref: inputRef, onChange: handleInput }, void 0) }, void 0), searchQuery !== '' && !isAddressSearch && (jsxRuntime.jsx(ThemedText.Error, __assign({ error: true }, { children: jsxRuntime.jsx(macro.Trans, { children: "Enter valid token address" }, void 0) }), void 0)), searchToken && (jsxRuntime.jsx(Card, __assign({ backgroundColor: theme.bg2, padding: "10px 0" }, { children: jsxRuntime.jsx(ImportRow, { token: searchToken, showImportView: function () { return setModalView(CurrencyModalView.importToken); }, setImportToken: setImportToken, style: { height: 'fit-content' } }, void 0) }), void 0))] }), void 0), jsxRuntime.jsx(Separator, {}, void 0), jsxRuntime.jsxs(PaddedColumn, __assign({ gap: "lg", style: { overflow: 'auto', marginBottom: '10px' } }, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(ThemedText.Main, __assign({ fontWeight: 600 }, { children: jsxRuntime.jsxs(macro.Trans, { children: [userAddedTokens === null || userAddedTokens === void 0 ? void 0 : userAddedTokens.length, " Custom Tokens"] }, void 0) }), void 0), userAddedTokens.length > 0 && (jsxRuntime.jsx(ButtonText, __assign({ onClick: handleRemoveAll }, { children: jsxRuntime.jsx(ThemedText.Blue, { children: jsxRuntime.jsx(macro.Trans, { children: "Clear all" }, void 0) }, void 0) }), void 0))] }, void 0), tokenList] }), void 0)] }), void 0), jsxRuntime.jsx(Footer, { children: jsxRuntime.jsx(ThemedText.DarkGray, { children: jsxRuntime.jsx(macro.Trans, { children: "Tip: Custom tokens are stored locally in your browser" }, void 0) }, void 0) }, void 0)] }, void 0)); -} -var templateObject_1$i, templateObject_2$8; - -var Wrapper$2 = styled__default["default"].div(templateObject_1$h || (templateObject_1$h = __makeTemplateObject(["\n width: 100%;\n position: relative;\n display: flex;\n flex-flow: column;\n"], ["\n width: 100%;\n position: relative;\n display: flex;\n flex-flow: column;\n"]))); -var ToggleWrapper = styled__default["default"](RowBetween)(templateObject_2$7 || (templateObject_2$7 = __makeTemplateObject(["\n background-color: ", ";\n border-radius: 12px;\n padding: 6px;\n"], ["\n background-color: ", ";\n border-radius: 12px;\n padding: 6px;\n"])), function (_a) { - var theme = _a.theme; - return theme.bg3; -}); -var ToggleOption = styled__default["default"].div(templateObject_3$5 || (templateObject_3$5 = __makeTemplateObject(["\n width: 48%;\n padding: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 12px;\n font-weight: 600;\n background-color: ", ";\n color: ", ";\n user-select: none;\n\n :hover {\n cursor: pointer;\n opacity: 0.7;\n }\n"], ["\n width: 48%;\n padding: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 12px;\n font-weight: 600;\n background-color: ", ";\n color: ", ";\n user-select: none;\n\n :hover {\n cursor: pointer;\n opacity: 0.7;\n }\n"])), function (_a) { - var theme = _a.theme, active = _a.active; - return (active ? theme.bg1 : theme.bg3); -}, function (_a) { - var theme = _a.theme, active = _a.active; - return (active ? theme.text1 : theme.text2); -}); -function Manage(_a) { - var onDismiss = _a.onDismiss, setModalView = _a.setModalView, setImportList = _a.setImportList, setImportToken = _a.setImportToken, setListUrl = _a.setListUrl; - // toggle between tokens and lists - var _b = __read(React.useState(true), 2), showLists = _b[0], setShowLists = _b[1]; - return (jsxRuntime.jsxs(Wrapper$2, { children: [jsxRuntime.jsx(PaddedColumn, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(reactFeather.ArrowLeft, { style: { cursor: 'pointer' }, onClick: function () { return setModalView(CurrencyModalView.search); } }, void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Manage" }, void 0) }), void 0), jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0)] }, void 0) }, void 0), jsxRuntime.jsx(Separator, {}, void 0), jsxRuntime.jsx(PaddedColumn, __assign({ style: { paddingBottom: 0 } }, { children: jsxRuntime.jsxs(ToggleWrapper, { children: [jsxRuntime.jsx(ToggleOption, __assign({ onClick: function () { return setShowLists(!showLists); }, active: showLists }, { children: jsxRuntime.jsx(macro.Trans, { children: "Lists" }, void 0) }), void 0), jsxRuntime.jsx(ToggleOption, __assign({ onClick: function () { return setShowLists(!showLists); }, active: !showLists }, { children: jsxRuntime.jsx(macro.Trans, { children: "Tokens" }, void 0) }), void 0)] }, void 0) }), void 0), showLists ? (jsxRuntime.jsx(ManageLists, { setModalView: setModalView, setImportList: setImportList, setListUrl: setListUrl }, void 0)) : (jsxRuntime.jsx(ManageTokens, { setModalView: setModalView, setImportToken: setImportToken }, void 0))] }, void 0)); -} -var templateObject_1$h, templateObject_2$7, templateObject_3$5; - -var CurrencyModalView; -(function (CurrencyModalView) { - CurrencyModalView[CurrencyModalView["search"] = 0] = "search"; - CurrencyModalView[CurrencyModalView["manage"] = 1] = "manage"; - CurrencyModalView[CurrencyModalView["importToken"] = 2] = "importToken"; - CurrencyModalView[CurrencyModalView["importList"] = 3] = "importList"; -})(CurrencyModalView || (CurrencyModalView = {})); -function CurrencySearchModal(_a) { - var isOpen = _a.isOpen, onDismiss = _a.onDismiss, onCurrencySelect = _a.onCurrencySelect, selectedCurrency = _a.selectedCurrency, otherSelectedCurrency = _a.otherSelectedCurrency, _b = _a.showCommonBases, showCommonBases = _b === void 0 ? false : _b, _c = _a.showCurrencyAmount, showCurrencyAmount = _c === void 0 ? true : _c, _d = _a.disableNonToken, disableNonToken = _d === void 0 ? false : _d; - var _e = __read(React.useState(CurrencyModalView.manage), 2), modalView = _e[0], setModalView = _e[1]; - var lastOpen = useLast(isOpen); - React.useEffect(function () { - if (isOpen && !lastOpen) { - setModalView(CurrencyModalView.search); - } - }, [isOpen, lastOpen]); - var handleCurrencySelect = React.useCallback(function (currency) { - onCurrencySelect(currency); - onDismiss(); - }, [onDismiss, onCurrencySelect]); - // for token import view - var prevView = usePrevious(modalView); - // used for import token flow - var _f = __read(React.useState(), 2), importToken = _f[0], setImportToken = _f[1]; - // used for import list - var _g = __read(React.useState(), 2), importList = _g[0], setImportList = _g[1]; - var _h = __read(React.useState(), 2), listURL = _h[0], setListUrl = _h[1]; - var showImportView = React.useCallback(function () { return setModalView(CurrencyModalView.importToken); }, [setModalView]); - var showManageView = React.useCallback(function () { return setModalView(CurrencyModalView.manage); }, [setModalView]); - var handleBackImport = React.useCallback(function () { return setModalView(prevView && prevView !== CurrencyModalView.importToken ? prevView : CurrencyModalView.search); }, [setModalView, prevView]); - // change min height if not searching - var minHeight = modalView === CurrencyModalView.importToken || modalView === CurrencyModalView.importList ? 40 : 80; - var content = null; - switch (modalView) { - case CurrencyModalView.search: - content = (jsxRuntime.jsx(CurrencySearch, { isOpen: isOpen, onDismiss: onDismiss, onCurrencySelect: handleCurrencySelect, selectedCurrency: selectedCurrency, otherSelectedCurrency: otherSelectedCurrency, showCommonBases: showCommonBases, showCurrencyAmount: showCurrencyAmount, disableNonToken: disableNonToken, showImportView: showImportView, setImportToken: setImportToken, showManageView: showManageView }, void 0)); - break; - case CurrencyModalView.importToken: - if (importToken) { - content = (jsxRuntime.jsx(ImportToken, { tokens: [importToken], onDismiss: onDismiss, list: importToken instanceof WrappedTokenInfo ? importToken.list : undefined, onBack: handleBackImport, handleCurrencySelect: handleCurrencySelect }, void 0)); - } - break; - case CurrencyModalView.importList: - if (importList && listURL) { - content = jsxRuntime.jsx(ImportList, { list: importList, listURL: listURL, onDismiss: onDismiss, setModalView: setModalView }, void 0); - } - break; - case CurrencyModalView.manage: - content = (jsxRuntime.jsx(Manage, { onDismiss: onDismiss, setModalView: setModalView, setImportToken: setImportToken, setImportList: setImportList, setListUrl: setListUrl }, void 0)); - break; - } - return (jsxRuntime.jsx(Modal, __assign({ isOpen: isOpen, onDismiss: onDismiss, maxHeight: 80, minHeight: minHeight }, { children: content }), void 0)); -} - -var TextWrapper = styled__default["default"].span(templateObject_1$g || (templateObject_1$g = __makeTemplateObject(["\n margin-left: ", ";\n color: ", ";\n font-size: ", ";\n\n @media screen and (max-width: 600px) {\n font-size: ", ";\n }\n"], ["\n margin-left: ", ";\n color: ", ";\n font-size: ", ";\n\n @media screen and (max-width: 600px) {\n font-size: ", ";\n }\n"])), function (_a) { - var margin = _a.margin; - return margin && '4px'; -}, function (_a) { - var theme = _a.theme, link = _a.link, textColor = _a.textColor; - return (link ? theme.blue1 : textColor !== null && textColor !== void 0 ? textColor : theme.text1); -}, function (_a) { - var fontSize = _a.fontSize; - return fontSize !== null && fontSize !== void 0 ? fontSize : 'inherit'; -}, function (_a) { - var adjustSize = _a.adjustSize; - return adjustSize && '12px'; -}); -var HoverInlineText = function (_a) { - var text = _a.text, _b = _a.maxCharacters, maxCharacters = _b === void 0 ? 20 : _b, _c = _a.margin, margin = _c === void 0 ? false : _c, _d = _a.adjustSize, adjustSize = _d === void 0 ? false : _d, fontSize = _a.fontSize, textColor = _a.textColor, link = _a.link, rest = __rest(_a, ["text", "maxCharacters", "margin", "adjustSize", "fontSize", "textColor", "link"]); - var _e = __read(React.useState(false), 2), showHover = _e[0], setShowHover = _e[1]; - if (!text) { - return jsxRuntime.jsx("span", {}, void 0); - } - if (text.length > maxCharacters) { - return (jsxRuntime.jsx(Tooltip, __assign({ text: text, show: showHover }, { children: jsxRuntime.jsx(TextWrapper, __assign({ onMouseEnter: function () { return setShowHover(true); }, onMouseLeave: function () { return setShowHover(false); }, margin: margin, adjustSize: adjustSize, textColor: textColor, link: link, fontSize: fontSize }, rest, { children: ' ' + text.slice(0, maxCharacters - 1) + '...' }), void 0) }), void 0)); - } - return (jsxRuntime.jsx(TextWrapper, __assign({ margin: margin, adjustSize: adjustSize, link: link, fontSize: fontSize, textColor: textColor }, rest, { children: text }), void 0)); -}; -var templateObject_1$g; - -function FiatValue(_a) { - var fiatValue = _a.fiatValue, priceImpact = _a.priceImpact; - var theme = useTheme(); - var priceImpactColor = React.useMemo(function () { - if (!priceImpact) - return undefined; - if (priceImpact.lessThan('0')) - return theme.green1; - var severity = warningSeverity(priceImpact); - if (severity < 1) - return theme.text3; - if (severity < 3) - return theme.yellow1; - return theme.red1; - }, [priceImpact, theme.green1, theme.red1, theme.text3, theme.yellow1]); - return (jsxRuntime.jsxs(ThemedText.Body, __assign({ fontSize: 14, color: fiatValue ? theme.text3 : theme.text4 }, { children: [fiatValue ? (jsxRuntime.jsxs(macro.Trans, { children: ["$", jsxRuntime.jsx(HoverInlineText, { text: fiatValue === null || fiatValue === void 0 ? void 0 : fiatValue.toSignificant(6, { groupSeparator: ',' }), textColor: fiatValue ? theme.text3 : theme.text4 }, void 0)] }, void 0)) : (''), priceImpact ? (jsxRuntime.jsxs("span", __assign({ style: { color: priceImpactColor } }, { children: [' ', jsxRuntime.jsxs(MouseoverTooltip, __assign({ text: macro.t(templateObject_1$f || (templateObject_1$f = __makeTemplateObject(["The estimated difference between the USD values of input and output amounts."], ["The estimated difference between the USD values of input and output amounts."]))) }, { children: ["(", jsxRuntime.jsxs(macro.Trans, { children: [priceImpact.multiply(-1).toSignificant(3), "%"] }, void 0), ")"] }), void 0)] }), void 0)) : null] }), void 0)); -} -var templateObject_1$f; - -var InputPanel = styled__default["default"].div(templateObject_1$e || (templateObject_1$e = __makeTemplateObject(["\n ", "\n position: relative;\n border-radius: ", ";\n background-color: ", ";\n z-index: 1;\n width: ", ";\n transition: height 1s ease;\n will-change: height;\n"], ["\n ", "\n position: relative;\n border-radius: ", ";\n background-color: ", ";\n z-index: 1;\n width: ", ";\n transition: height 1s ease;\n will-change: height;\n"])), function (_a) { - var theme = _a.theme; - return theme.flexColumnNoWrap; -}, function (_a) { - var hideInput = _a.hideInput; - return (hideInput ? '16px' : '20px'); -}, function (_a) { - var theme = _a.theme, hideInput = _a.hideInput; - return (hideInput ? 'transparent' : theme.bg2); -}, function (_a) { - var hideInput = _a.hideInput; - return (hideInput ? '100%' : 'initial'); -}); -var FixedContainer = styled__default["default"].div(templateObject_2$6 || (templateObject_2$6 = __makeTemplateObject(["\n width: 100%;\n height: 100%;\n position: absolute;\n border-radius: 20px;\n background-color: ", ";\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 2;\n"], ["\n width: 100%;\n height: 100%;\n position: absolute;\n border-radius: 20px;\n background-color: ", ";\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 2;\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}); -var Container$1 = styled__default["default"].div(templateObject_3$4 || (templateObject_3$4 = __makeTemplateObject(["\n border-radius: ", ";\n border: 1px solid ", ";\n background-color: ", ";\n width: ", ";\n :focus,\n :hover {\n border: 1px solid ", ";\n }\n"], ["\n border-radius: ", ";\n border: 1px solid ", ";\n background-color: ", ";\n width: ", ";\n :focus,\n :hover {\n border: 1px solid ", ";\n }\n"])), function (_a) { - var hideInput = _a.hideInput; - return (hideInput ? '16px' : '20px'); -}, function (_a) { - var theme = _a.theme; - return theme.bg0; -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var hideInput = _a.hideInput; - return (hideInput ? '100%' : 'initial'); -}, function (_a) { - var theme = _a.theme, hideInput = _a.hideInput; - return (hideInput ? ' transparent' : theme.bg3); -}); -var CurrencySelect = styled__default["default"](ButtonGray)(templateObject_4$4 || (templateObject_4$4 = __makeTemplateObject(["\n align-items: center;\n background-color: ", ";\n box-shadow: ", ";\n box-shadow: 0px 6px 10px rgba(0, 0, 0, 0.075);\n color: ", ";\n cursor: pointer;\n border-radius: 16px;\n outline: none;\n user-select: none;\n border: none;\n font-size: 24px;\n font-weight: 500;\n height: ", ";\n width: ", ";\n padding: 0 8px;\n justify-content: space-between;\n margin-left: ", ";\n :focus,\n :hover {\n background-color: ", ";\n }\n visibility: ", ";\n"], ["\n align-items: center;\n background-color: ", ";\n box-shadow: ", ";\n box-shadow: 0px 6px 10px rgba(0, 0, 0, 0.075);\n color: ", ";\n cursor: pointer;\n border-radius: 16px;\n outline: none;\n user-select: none;\n border: none;\n font-size: 24px;\n font-weight: 500;\n height: ", ";\n width: ", ";\n padding: 0 8px;\n justify-content: space-between;\n margin-left: ", ";\n :focus,\n :hover {\n background-color: ", ";\n }\n visibility: ", ";\n"])), function (_a) { - var selected = _a.selected, theme = _a.theme; - return (selected ? theme.bg2 : theme.primary1); -}, function (_a) { - var selected = _a.selected; - return (selected ? 'none' : '0px 6px 10px rgba(0, 0, 0, 0.075)'); -}, function (_a) { - var selected = _a.selected, theme = _a.theme; - return (selected ? theme.text1 : theme.white); -}, function (_a) { - var hideInput = _a.hideInput; - return (hideInput ? '2.8rem' : '2.4rem'); -}, function (_a) { - var hideInput = _a.hideInput; - return (hideInput ? '100%' : 'initial'); -}, function (_a) { - var hideInput = _a.hideInput; - return (hideInput ? '0' : '12px'); -}, function (_a) { - var selected = _a.selected, theme = _a.theme; - return (selected ? theme.bg3 : polished.darken(0.05, theme.primary1)); -}, function (_a) { - var visible = _a.visible; - return (visible ? 'visible' : 'hidden'); -}); -var InputRow = styled__default["default"].div(templateObject_5$4 || (templateObject_5$4 = __makeTemplateObject(["\n ", "\n align-items: center;\n justify-content: space-between;\n padding: ", ";\n"], ["\n ", "\n align-items: center;\n justify-content: space-between;\n padding: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.flexRowNoWrap; -}, function (_a) { - var selected = _a.selected; - return (selected ? ' 1rem 1rem 0.75rem 1rem' : '1rem 1rem 1rem 1rem'); -}); -var LabelRow = styled__default["default"].div(templateObject_6$2 || (templateObject_6$2 = __makeTemplateObject(["\n ", "\n align-items: center;\n color: ", ";\n font-size: 0.75rem;\n line-height: 1rem;\n padding: 0 1rem 1rem;\n span:hover {\n cursor: pointer;\n color: ", ";\n }\n"], ["\n ", "\n align-items: center;\n color: ", ";\n font-size: 0.75rem;\n line-height: 1rem;\n padding: 0 1rem 1rem;\n span:hover {\n cursor: pointer;\n color: ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.flexRowNoWrap; -}, function (_a) { - var theme = _a.theme; - return theme.text1; -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.2, theme.text2); -}); -var FiatRow = styled__default["default"](LabelRow)(templateObject_7$2 || (templateObject_7$2 = __makeTemplateObject(["\n justify-content: flex-end;\n"], ["\n justify-content: flex-end;\n"]))); -var Aligner = styled__default["default"].span(templateObject_8$1 || (templateObject_8$1 = __makeTemplateObject(["\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n"], ["\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n"]))); -var StyledDropDown = styled__default["default"](SvgDropdown)(templateObject_9$1 || (templateObject_9$1 = __makeTemplateObject(["\n margin: 0 0.25rem 0 0.35rem;\n height: 35%;\n\n path {\n stroke: ", ";\n stroke-width: 1.5px;\n }\n"], ["\n margin: 0 0.25rem 0 0.35rem;\n height: 35%;\n\n path {\n stroke: ", ";\n stroke-width: 1.5px;\n }\n"])), function (_a) { - var selected = _a.selected, theme = _a.theme; - return (selected ? theme.text1 : theme.white); -}); -var StyledTokenName = styled__default["default"].span(templateObject_10$1 || (templateObject_10$1 = __makeTemplateObject(["\n ", "\n font-size: ", ";\n"], ["\n ", "\n font-size: ", ";\n"])), function (_a) { - var active = _a.active; - return (active ? ' margin: 0 0.25rem 0 0.25rem;' : ' margin: 0 0.25rem 0 0.25rem;'); -}, function (_a) { - var active = _a.active; - return (active ? '18px' : '18px'); -}); -var StyledBalanceMax = styled__default["default"].button(templateObject_11$1 || (templateObject_11$1 = __makeTemplateObject(["\n background-color: transparent;\n background-color: ", ";\n border: none;\n border-radius: 12px;\n color: ", ";\n cursor: pointer;\n font-size: 11px;\n font-weight: 500;\n margin-left: 0.25rem;\n opacity: ", ";\n padding: 4px 6px;\n pointer-events: ", ";\n\n :hover {\n opacity: ", ";\n }\n\n :focus {\n outline: none;\n }\n"], ["\n background-color: transparent;\n background-color: ", ";\n border: none;\n border-radius: 12px;\n color: ", ";\n cursor: pointer;\n font-size: 11px;\n font-weight: 500;\n margin-left: 0.25rem;\n opacity: ", ";\n padding: 4px 6px;\n pointer-events: ", ";\n\n :hover {\n opacity: ", ";\n }\n\n :focus {\n outline: none;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.primary5; -}, function (_a) { - var theme = _a.theme; - return theme.primary1; -}, function (_a) { - var disabled = _a.disabled; - return (!disabled ? 1 : 0.4); -}, function (_a) { - var disabled = _a.disabled; - return (!disabled ? 'initial' : 'none'); -}, function (_a) { - var disabled = _a.disabled; - return (!disabled ? 0.8 : 0.4); -}); -var StyledNumericalInput = styled__default["default"](Input$1)(templateObject_12$1 || (templateObject_12$1 = __makeTemplateObject(["\n ", ";\n text-align: left;\n"], ["\n ", ";\n text-align: left;\n"])), loadingOpacityMixin); -function CurrencyInputPanel(_a) { - var value = _a.value, onUserInput = _a.onUserInput, onMax = _a.onMax, showMaxButton = _a.showMaxButton, onCurrencySelect = _a.onCurrencySelect, currency = _a.currency, otherCurrency = _a.otherCurrency, id = _a.id, showCommonBases = _a.showCommonBases, showCurrencyAmount = _a.showCurrencyAmount, disableNonToken = _a.disableNonToken, renderBalance = _a.renderBalance, fiatValue = _a.fiatValue, priceImpact = _a.priceImpact, _b = _a.hideBalance, hideBalance = _b === void 0 ? false : _b, _c = _a.pair, pair = _c === void 0 ? null : _c, // used for double token logo - _d = _a.hideInput, // used for double token logo - hideInput = _d === void 0 ? false : _d, _e = _a.locked, locked = _e === void 0 ? false : _e, _f = _a.loading, loading = _f === void 0 ? false : _f, rest = __rest(_a, ["value", "onUserInput", "onMax", "showMaxButton", "onCurrencySelect", "currency", "otherCurrency", "id", "showCommonBases", "showCurrencyAmount", "disableNonToken", "renderBalance", "fiatValue", "priceImpact", "hideBalance", "pair", "hideInput", "locked", "loading"]); - var _g = __read(React.useState(false), 2), modalOpen = _g[0], setModalOpen = _g[1]; - var account = useActiveWeb3React().account; - var selectedCurrencyBalance = useCurrencyBalance(account !== null && account !== void 0 ? account : undefined, currency !== null && currency !== void 0 ? currency : undefined); - var theme = useTheme(); - var handleDismissSearch = React.useCallback(function () { - setModalOpen(false); - }, [setModalOpen]); - return (jsxRuntime.jsxs(InputPanel, __assign({ id: id, hideInput: hideInput }, rest, { children: [locked && (jsxRuntime.jsx(FixedContainer, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "sm", justify: "center" }, { children: [jsxRuntime.jsx(reactFeather.Lock, {}, void 0), jsxRuntime.jsx(ThemedText.Label, __assign({ fontSize: "12px", textAlign: "center", padding: "0 12px" }, { children: jsxRuntime.jsx(macro.Trans, { children: "The market price is outside your specified price range. Single-asset deposit only." }, void 0) }), void 0)] }), void 0) }, void 0)), jsxRuntime.jsxs(Container$1, __assign({ hideInput: hideInput }, { children: [jsxRuntime.jsxs(InputRow, __assign({ style: hideInput ? { padding: '0', borderRadius: '8px' } : {}, selected: !onCurrencySelect }, { children: [!hideInput && (jsxRuntime.jsx(StyledNumericalInput, { className: "token-amount-input", value: value, onUserInput: onUserInput, "$loading": loading }, void 0)), jsxRuntime.jsx(CurrencySelect, __assign({ visible: currency !== undefined, selected: !!currency, hideInput: hideInput, className: "open-currency-select-button", onClick: function () { - if (onCurrencySelect) { - setModalOpen(true); - } - } }, { children: jsxRuntime.jsxs(Aligner, { children: [jsxRuntime.jsxs(RowFixed, { children: [pair ? (jsxRuntime.jsx("span", __assign({ style: { marginRight: '0.5rem' } }, { children: jsxRuntime.jsx(DoubleCurrencyLogo, { currency0: pair.token0, currency1: pair.token1, size: 24, margin: true }, void 0) }), void 0)) : currency ? (jsxRuntime.jsx(CurrencyLogo, { style: { marginRight: '0.5rem' }, currency: currency, size: '24px' }, void 0)) : null, pair ? (jsxRuntime.jsxs(StyledTokenName, __assign({ className: "pair-name-container" }, { children: [pair === null || pair === void 0 ? void 0 : pair.token0.symbol, ":", pair === null || pair === void 0 ? void 0 : pair.token1.symbol] }), void 0)) : (jsxRuntime.jsx(StyledTokenName, __assign({ className: "token-symbol-container", active: Boolean(currency && currency.symbol) }, { children: (currency && currency.symbol && currency.symbol.length > 20 - ? currency.symbol.slice(0, 4) + - '...' + - currency.symbol.slice(currency.symbol.length - 5, currency.symbol.length) - : currency === null || currency === void 0 ? void 0 : currency.symbol) || jsxRuntime.jsx(macro.Trans, { children: "Select a token" }, void 0) }), void 0))] }, void 0), onCurrencySelect && jsxRuntime.jsx(StyledDropDown, { selected: !!currency }, void 0)] }, void 0) }), void 0)] }), void 0), !hideInput && !hideBalance && currency && (jsxRuntime.jsx(FiatRow, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(LoadingOpacityContainer, __assign({ "$loading": loading }, { children: jsxRuntime.jsx(FiatValue, { fiatValue: fiatValue, priceImpact: priceImpact }, void 0) }), void 0), account ? (jsxRuntime.jsxs(RowFixed, __assign({ style: { height: '17px' } }, { children: [jsxRuntime.jsx(ThemedText.Body, __assign({ onClick: onMax, color: theme.text3, fontWeight: 500, fontSize: 14, style: { display: 'inline', cursor: 'pointer' } }, { children: !hideBalance && currency && selectedCurrencyBalance ? (renderBalance ? (renderBalance(selectedCurrencyBalance)) : (jsxRuntime.jsxs(macro.Trans, { children: ["Balance: ", formatCurrencyAmount(selectedCurrencyBalance, 4)] }, void 0))) : null }), void 0), showMaxButton && selectedCurrencyBalance ? (jsxRuntime.jsx(StyledBalanceMax, __assign({ onClick: onMax }, { children: jsxRuntime.jsx(macro.Trans, { children: "MAX" }, void 0) }), void 0)) : null] }), void 0)) : (jsxRuntime.jsx("span", {}, void 0))] }, void 0) }, void 0))] }), void 0), onCurrencySelect && (jsxRuntime.jsx(CurrencySearchModal, { isOpen: modalOpen, onDismiss: handleDismissSearch, onCurrencySelect: onCurrencySelect, selectedCurrency: currency, otherSelectedCurrency: otherCurrency, showCommonBases: showCommonBases, showCurrencyAmount: showCurrencyAmount, disableNonToken: disableNonToken }, void 0))] }), void 0)); -} -var templateObject_1$e, templateObject_2$6, templateObject_3$4, templateObject_4$4, templateObject_5$4, templateObject_6$2, templateObject_7$2, templateObject_8$1, templateObject_9$1, templateObject_10$1, templateObject_11$1, templateObject_12$1; - -/** - * Given the price impact, get user confirmation. - * - * @param priceImpactWithoutFee price impact of the trade without the fee. - */ -function confirmPriceImpactWithoutFee(priceImpactWithoutFee) { - if (!priceImpactWithoutFee.lessThan(PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN)) { - return (window.prompt("This swap has a price impact of at least " + PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN.toFixed(0) + "%. Please type the word \"confirm\" to continue with this swap.") === 'confirm'); - } - else if (!priceImpactWithoutFee.lessThan(ALLOWED_PRICE_IMPACT_HIGH)) { - return window.confirm("This swap has a price impact of at least " + ALLOWED_PRICE_IMPACT_HIGH.toFixed(0) + "%. Please confirm that you would like to continue with this swap."); - } - return true; -} - -/** - * Returns true if the trade requires a confirmation of details before we can submit it - * @param args either a pair of V2 trades or a pair of V3 trades - */ -function tradeMeaningfullyDiffers() { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var _a = __read(args, 2), tradeA = _a[0], tradeB = _a[1]; - return (tradeA.tradeType !== tradeB.tradeType || - !tradeA.inputAmount.currency.equals(tradeB.inputAmount.currency) || - !tradeA.inputAmount.equalTo(tradeB.inputAmount) || - !tradeA.outputAmount.currency.equals(tradeB.outputAmount.currency) || - !tradeA.outputAmount.equalTo(tradeB.outputAmount)); -} - -function useAddTokenToMetamask(currencyToAdd) { - var library = useActiveWeb3React().library; - var token = currencyToAdd === null || currencyToAdd === void 0 ? void 0 : currencyToAdd.wrapped; - var _a = __read(React.useState(), 2), success = _a[0], setSuccess = _a[1]; - var logoURL = useCurrencyLogoURIs(token)[0]; - var addToken = React.useCallback(function () { - if (library && library.provider.isMetaMask && library.provider.request && token) { - library.provider - .request({ - method: 'wallet_watchAsset', - params: { - //@ts-ignore // need this for incorrect ethers provider type - type: 'ERC20', - options: { - address: token.address, - symbol: token.symbol, - decimals: token.decimals, - image: logoURL, - }, - }, - }) - .then(function (success) { - setSuccess(success); - }) - .catch(function () { return setSuccess(false); }); - } - else { - setSuccess(false); - } - }, [library, logoURL, token]); - return { addToken: addToken, success: success }; -} - -var Circle$1 = "data:image/svg+xml,%3Csvg%20width%3D%2294%22%20height%3D%2294%22%20viewBox%3D%220%200%2094%2094%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%20%20%3Cpath%20d%3D%22M92%2047C92%2022.1472%2071.8528%202%2047%202C22.1472%202%202%2022.1472%202%2047C2%2071.8528%2022.1472%2092%2047%2092%22%20stroke%3D%22%232172E5%22%20stroke-width%3D%223%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E"; - -var MetaMaskLogo = "f89237c6bc3f84db.png"; - -var VoteOption; -(function (VoteOption) { - VoteOption[VoteOption["Against"] = 0] = "Against"; - VoteOption[VoteOption["For"] = 1] = "For"; - VoteOption[VoteOption["Abstain"] = 2] = "Abstain"; -})(VoteOption || (VoteOption = {})); - -function formatAmount(amountRaw, decimals, sigFigs) { - return new sdkCore.Fraction(amountRaw, JSBI__default["default"].exponentiate(JSBI__default["default"].BigInt(10), JSBI__default["default"].BigInt(decimals))).toSignificant(sigFigs); -} -function FormattedCurrencyAmount(_a) { - var rawAmount = _a.rawAmount, symbol = _a.symbol, decimals = _a.decimals, sigFigs = _a.sigFigs; - return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [formatAmount(rawAmount, decimals, sigFigs), " ", symbol] }, void 0)); -} -function FormattedCurrencyAmountManaged(_a) { - var _b; - var rawAmount = _a.rawAmount, currencyId = _a.currencyId, _c = _a.sigFigs, sigFigs = _c === void 0 ? 6 : _c; - var currency = useCurrency(currencyId); - return currency ? (jsxRuntime.jsx(FormattedCurrencyAmount, { rawAmount: rawAmount, decimals: currency.decimals, sigFigs: sigFigs, symbol: (_b = currency.symbol) !== null && _b !== void 0 ? _b : '???' }, void 0)) : null; -} -function ClaimSummary(_a) { - var _b = _a.info, recipient = _b.recipient, uniAmountRaw = _b.uniAmountRaw; - var ENSName = useENSName().ENSName; - return typeof uniAmountRaw === 'string' ? (jsxRuntime.jsxs(macro.Trans, { children: ["Claim ", jsxRuntime.jsx(FormattedCurrencyAmount, { rawAmount: uniAmountRaw, symbol: 'UNI', decimals: 18, sigFigs: 4 }, void 0), " for", ' ', ENSName !== null && ENSName !== void 0 ? ENSName : recipient] }, void 0)) : (jsxRuntime.jsxs(macro.Trans, { children: ["Claim UNI reward for ", ENSName !== null && ENSName !== void 0 ? ENSName : recipient] }, void 0)); -} -function SubmitProposalTransactionSummary(_) { - return jsxRuntime.jsx(macro.Trans, { children: "Submit new proposal" }, void 0); -} -function ApprovalSummary(_a) { - var info = _a.info; - var token = useToken(info.tokenAddress); - return jsxRuntime.jsxs(macro.Trans, { children: ["Approve ", token === null || token === void 0 ? void 0 : token.symbol] }, void 0); -} -function VoteSummary(_a) { - var info = _a.info; - var proposalKey = info.governorAddress + "/" + info.proposalId; - if (info.reason && info.reason.trim().length > 0) { - switch (info.decision) { - case VoteOption.For: - return jsxRuntime.jsxs(macro.Trans, { children: ["Vote for proposal ", proposalKey] }, void 0); - case VoteOption.Abstain: - return jsxRuntime.jsxs(macro.Trans, { children: ["Vote to abstain on proposal ", proposalKey] }, void 0); - case VoteOption.Against: - return jsxRuntime.jsxs(macro.Trans, { children: ["Vote against proposal ", proposalKey] }, void 0); - } - } - else { - switch (info.decision) { - case VoteOption.For: - return (jsxRuntime.jsxs(macro.Trans, { children: ["Vote for proposal ", proposalKey, " with reason \"", info.reason, "\""] }, void 0)); - case VoteOption.Abstain: - return (jsxRuntime.jsxs(macro.Trans, { children: ["Vote to abstain on proposal ", proposalKey, " with reason \"", info.reason, "\""] }, void 0)); - case VoteOption.Against: - return (jsxRuntime.jsxs(macro.Trans, { children: ["Vote against proposal ", proposalKey, " with reason \"", info.reason, "\""] }, void 0)); - } - } -} -function DelegateSummary(_a) { - var delegatee = _a.info.delegatee; - var ENSName = useENSName(delegatee).ENSName; - return jsxRuntime.jsxs(macro.Trans, { children: ["Delegate voting power to ", ENSName !== null && ENSName !== void 0 ? ENSName : delegatee] }, void 0); -} -function WrapSummary(_a) { - var _b, _c, _d, _e, _f, _g; - var _h = _a.info, chainId = _h.chainId, currencyAmountRaw = _h.currencyAmountRaw, unwrapped = _h.unwrapped; - var native = chainId ? nativeOnChain(chainId) : undefined; - if (unwrapped) { - return (jsxRuntime.jsxs(macro.Trans, { children: ["Unwrap", ' ', jsxRuntime.jsx(FormattedCurrencyAmount, { rawAmount: currencyAmountRaw, symbol: (_c = (_b = native === null || native === void 0 ? void 0 : native.wrapped) === null || _b === void 0 ? void 0 : _b.symbol) !== null && _c !== void 0 ? _c : 'WETH', decimals: 18, sigFigs: 6 }, void 0), ' ', "to ", (_d = native === null || native === void 0 ? void 0 : native.symbol) !== null && _d !== void 0 ? _d : 'ETH'] }, void 0)); - } - else { - return (jsxRuntime.jsxs(macro.Trans, { children: ["Wrap", ' ', jsxRuntime.jsx(FormattedCurrencyAmount, { rawAmount: currencyAmountRaw, symbol: (_e = native === null || native === void 0 ? void 0 : native.symbol) !== null && _e !== void 0 ? _e : 'ETH', decimals: 18, sigFigs: 6 }, void 0), ' ', "to ", (_g = (_f = native === null || native === void 0 ? void 0 : native.wrapped) === null || _f === void 0 ? void 0 : _f.symbol) !== null && _g !== void 0 ? _g : 'WETH'] }, void 0)); - } -} -function DepositLiquidityStakingSummary(_) { - // not worth rendering the tokens since you can should no longer deposit liquidity in the staking contracts - // todo: deprecate and delete the code paths that allow this, show user more information - return jsxRuntime.jsx(macro.Trans, { children: "Deposit liquidity" }, void 0); -} -function WithdrawLiquidityStakingSummary(_) { - return jsxRuntime.jsx(macro.Trans, { children: "Withdraw deposited liquidity" }, void 0); -} -function MigrateLiquidityToV3Summary(_a) { - var _b = _a.info, baseCurrencyId = _b.baseCurrencyId, quoteCurrencyId = _b.quoteCurrencyId; - var baseCurrency = useCurrency(baseCurrencyId); - var quoteCurrency = useCurrency(quoteCurrencyId); - return (jsxRuntime.jsxs(macro.Trans, { children: ["Migrate ", baseCurrency === null || baseCurrency === void 0 ? void 0 : baseCurrency.symbol, "/", quoteCurrency === null || quoteCurrency === void 0 ? void 0 : quoteCurrency.symbol, " liquidity to V3"] }, void 0)); -} -function CreateV3PoolSummary(_a) { - var _b = _a.info, quoteCurrencyId = _b.quoteCurrencyId, baseCurrencyId = _b.baseCurrencyId; - var baseCurrency = useCurrency(baseCurrencyId); - var quoteCurrency = useCurrency(quoteCurrencyId); - return (jsxRuntime.jsxs(macro.Trans, { children: ["Create ", baseCurrency === null || baseCurrency === void 0 ? void 0 : baseCurrency.symbol, "/", quoteCurrency === null || quoteCurrency === void 0 ? void 0 : quoteCurrency.symbol, " V3 pool"] }, void 0)); -} -function CollectFeesSummary(_a) { - var _b = _a.info, currencyId0 = _b.currencyId0, currencyId1 = _b.currencyId1; - var currency0 = useCurrency(currencyId0); - var currency1 = useCurrency(currencyId1); - return (jsxRuntime.jsxs(macro.Trans, { children: ["Collect ", currency0 === null || currency0 === void 0 ? void 0 : currency0.symbol, "/", currency1 === null || currency1 === void 0 ? void 0 : currency1.symbol, " fees"] }, void 0)); -} -function RemoveLiquidityV3Summary(_a) { - var _b = _a.info, baseCurrencyId = _b.baseCurrencyId, quoteCurrencyId = _b.quoteCurrencyId, expectedAmountBaseRaw = _b.expectedAmountBaseRaw, expectedAmountQuoteRaw = _b.expectedAmountQuoteRaw; - return (jsxRuntime.jsxs(macro.Trans, { children: ["Remove", ' ', jsxRuntime.jsx(FormattedCurrencyAmountManaged, { rawAmount: expectedAmountBaseRaw, currencyId: baseCurrencyId, sigFigs: 3 }, void 0), " and", ' ', jsxRuntime.jsx(FormattedCurrencyAmountManaged, { rawAmount: expectedAmountQuoteRaw, currencyId: quoteCurrencyId, sigFigs: 3 }, void 0)] }, void 0)); -} -function AddLiquidityV3PoolSummary(_a) { - var _b = _a.info, createPool = _b.createPool, quoteCurrencyId = _b.quoteCurrencyId, baseCurrencyId = _b.baseCurrencyId; - var baseCurrency = useCurrency(baseCurrencyId); - var quoteCurrency = useCurrency(quoteCurrencyId); - return createPool ? (jsxRuntime.jsxs(macro.Trans, { children: ["Create pool and add ", baseCurrency === null || baseCurrency === void 0 ? void 0 : baseCurrency.symbol, "/", quoteCurrency === null || quoteCurrency === void 0 ? void 0 : quoteCurrency.symbol, " V3 liquidity"] }, void 0)) : (jsxRuntime.jsxs(macro.Trans, { children: ["Add ", baseCurrency === null || baseCurrency === void 0 ? void 0 : baseCurrency.symbol, "/", quoteCurrency === null || quoteCurrency === void 0 ? void 0 : quoteCurrency.symbol, " V3 liquidity"] }, void 0)); -} -function AddLiquidityV2PoolSummary(_a) { - var _b = _a.info, quoteCurrencyId = _b.quoteCurrencyId, expectedAmountBaseRaw = _b.expectedAmountBaseRaw, expectedAmountQuoteRaw = _b.expectedAmountQuoteRaw, baseCurrencyId = _b.baseCurrencyId; - return (jsxRuntime.jsxs(macro.Trans, { children: ["Add ", jsxRuntime.jsx(FormattedCurrencyAmountManaged, { rawAmount: expectedAmountBaseRaw, currencyId: baseCurrencyId, sigFigs: 3 }, void 0), ' ', "and ", jsxRuntime.jsx(FormattedCurrencyAmountManaged, { rawAmount: expectedAmountQuoteRaw, currencyId: quoteCurrencyId, sigFigs: 3 }, void 0), ' ', "to Uniswap V2"] }, void 0)); -} -function SwapSummary(_a) { - var info = _a.info; - if (info.tradeType === sdkCore.TradeType.EXACT_INPUT) { - return (jsxRuntime.jsxs(macro.Trans, { children: ["Swap exactly", ' ', jsxRuntime.jsx(FormattedCurrencyAmountManaged, { rawAmount: info.inputCurrencyAmountRaw, currencyId: info.inputCurrencyId, sigFigs: 6 }, void 0), ' ', "for", ' ', jsxRuntime.jsx(FormattedCurrencyAmountManaged, { rawAmount: info.expectedOutputCurrencyAmountRaw, currencyId: info.outputCurrencyId, sigFigs: 6 }, void 0)] }, void 0)); - } - else { - return (jsxRuntime.jsxs(macro.Trans, { children: ["Swap", ' ', jsxRuntime.jsx(FormattedCurrencyAmountManaged, { rawAmount: info.expectedInputCurrencyAmountRaw, currencyId: info.inputCurrencyId, sigFigs: 6 }, void 0), ' ', "for exactly", ' ', jsxRuntime.jsx(FormattedCurrencyAmountManaged, { rawAmount: info.outputCurrencyAmountRaw, currencyId: info.outputCurrencyId, sigFigs: 6 }, void 0)] }, void 0)); - } -} -function TransactionSummary(_a) { - var info = _a.info; - switch (info.type) { - case TransactionType.ADD_LIQUIDITY_V3_POOL: - return jsxRuntime.jsx(AddLiquidityV3PoolSummary, { info: info }, void 0); - case TransactionType.ADD_LIQUIDITY_V2_POOL: - return jsxRuntime.jsx(AddLiquidityV2PoolSummary, { info: info }, void 0); - case TransactionType.CLAIM: - return jsxRuntime.jsx(ClaimSummary, { info: info }, void 0); - case TransactionType.DEPOSIT_LIQUIDITY_STAKING: - return jsxRuntime.jsx(DepositLiquidityStakingSummary, { info: info }, void 0); - case TransactionType.WITHDRAW_LIQUIDITY_STAKING: - return jsxRuntime.jsx(WithdrawLiquidityStakingSummary, { info: info }, void 0); - case TransactionType.SWAP: - return jsxRuntime.jsx(SwapSummary, { info: info }, void 0); - case TransactionType.APPROVAL: - return jsxRuntime.jsx(ApprovalSummary, { info: info }, void 0); - case TransactionType.VOTE: - return jsxRuntime.jsx(VoteSummary, { info: info }, void 0); - case TransactionType.DELEGATE: - return jsxRuntime.jsx(DelegateSummary, { info: info }, void 0); - case TransactionType.WRAP: - return jsxRuntime.jsx(WrapSummary, { info: info }, void 0); - case TransactionType.CREATE_V3_POOL: - return jsxRuntime.jsx(CreateV3PoolSummary, { info: info }, void 0); - case TransactionType.MIGRATE_LIQUIDITY_V3: - return jsxRuntime.jsx(MigrateLiquidityToV3Summary, { info: info }, void 0); - case TransactionType.COLLECT_FEES: - return jsxRuntime.jsx(CollectFeesSummary, { info: info }, void 0); - case TransactionType.REMOVE_LIQUIDITY_V3: - return jsxRuntime.jsx(RemoveLiquidityV3Summary, { info: info }, void 0); - case TransactionType.SUBMIT_PROPOSAL: - return jsxRuntime.jsx(SubmitProposalTransactionSummary, { info: info }, void 0); - } -} - -var Wrapper$1 = styled__default["default"].div(templateObject_1$d || (templateObject_1$d = __makeTemplateObject(["\n height: 90px;\n width: 90px;\n"], ["\n height: 90px;\n width: 90px;\n"]))); -var dash = styled.keyframes(templateObject_2$5 || (templateObject_2$5 = __makeTemplateObject(["\n 0% {\n stroke-dashoffset: 1000;\n }\n 100% {\n stroke-dashoffset: 0;\n }\n"], ["\n 0% {\n stroke-dashoffset: 1000;\n }\n 100% {\n stroke-dashoffset: 0;\n }\n"]))); -var dashCheck = styled.keyframes(templateObject_3$3 || (templateObject_3$3 = __makeTemplateObject(["\n 0% {\n stroke-dashoffset: -100;\n }\n 100% {\n stroke-dashoffset: 900;\n }\n"], ["\n 0% {\n stroke-dashoffset: -100;\n }\n 100% {\n stroke-dashoffset: 900;\n }\n"]))); -var Circle = styled__default["default"].circle(templateObject_4$3 || (templateObject_4$3 = __makeTemplateObject(["\n stroke-dasharray: 1000;\n stroke-dashoffset: 0;\n -webkit-animation: ", " 0.9s ease-in-out;\n animation: ", " 0.9s ease-in-out;\n"], ["\n stroke-dasharray: 1000;\n stroke-dashoffset: 0;\n -webkit-animation: ", " 0.9s ease-in-out;\n animation: ", " 0.9s ease-in-out;\n"])), dash, dash); -var PolyLine = styled__default["default"].polyline(templateObject_5$3 || (templateObject_5$3 = __makeTemplateObject(["\n stroke-dasharray: 1000;\n stroke-dashoffset: 0;\n stroke-dashoffset: -100;\n -webkit-animation: ", " 0.9s 0.35s ease-in-out forwards;\n animation: ", " 0.9s 0.35s ease-in-out forwards;\n"], ["\n stroke-dasharray: 1000;\n stroke-dashoffset: 0;\n stroke-dashoffset: -100;\n -webkit-animation: ", " 0.9s 0.35s ease-in-out forwards;\n animation: ", " 0.9s 0.35s ease-in-out forwards;\n"])), dashCheck, dashCheck); -function AnimatedConfirmation() { - var theme = useTheme(); - return (jsxRuntime.jsx(Wrapper$1, __assign({ className: "w4rAnimated_checkmark" }, { children: jsxRuntime.jsxs("svg", __assign({ version: "1.1", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 130.2 130.2" }, { children: [jsxRuntime.jsx(Circle, { className: "path circle", fill: "none", stroke: theme.green1, strokeWidth: "6", strokeMiterlimit: "10", cx: "65.1", cy: "65.1", r: "62.1" }, void 0), jsxRuntime.jsx(PolyLine, { className: "path check", fill: "none", stroke: theme.green1, strokeWidth: "6", strokeLinecap: "round", strokeMiterlimit: "10", points: "100.2,40.2 51.5,88.8 29.8,67.5 " }, void 0)] }), void 0) }), void 0)); -} -var templateObject_1$d, templateObject_2$5, templateObject_3$3, templateObject_4$3, templateObject_5$3; - -var Wrapper = styled__default["default"].div(templateObject_1$c || (templateObject_1$c = __makeTemplateObject(["\n width: 100%;\n padding: 1rem;\n"], ["\n width: 100%;\n padding: 1rem;\n"]))); -var Section = styled__default["default"](AutoColumn)(templateObject_2$4 || (templateObject_2$4 = __makeTemplateObject(["\n padding: ", ";\n"], ["\n padding: ", ";\n"])), function (_a) { - var inline = _a.inline; - return (inline ? '0' : '0'); -}); -var BottomSection = styled__default["default"](Section)(templateObject_3$2 || (templateObject_3$2 = __makeTemplateObject(["\n border-bottom-left-radius: 20px;\n border-bottom-right-radius: 20px;\n"], ["\n border-bottom-left-radius: 20px;\n border-bottom-right-radius: 20px;\n"]))); -var ConfirmedIcon = styled__default["default"](ColumnCenter)(templateObject_4$2 || (templateObject_4$2 = __makeTemplateObject(["\n padding: ", ";\n"], ["\n padding: ", ";\n"])), function (_a) { - var inline = _a.inline; - return (inline ? '20px 0' : '32px 0;'); -}); -var StyledLogo = styled__default["default"].img(templateObject_5$2 || (templateObject_5$2 = __makeTemplateObject(["\n height: 16px;\n width: 16px;\n margin-left: 6px;\n"], ["\n height: 16px;\n width: 16px;\n margin-left: 6px;\n"]))); -function ConfirmationPendingContent(_a) { - var onDismiss = _a.onDismiss, pendingText = _a.pendingText, inline = _a.inline; - return (jsxRuntime.jsx(Wrapper, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "md" }, { children: [!inline && (jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx("div", {}, void 0), jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0)] }, void 0)), jsxRuntime.jsx(ConfirmedIcon, __assign({ inline: inline }, { children: jsxRuntime.jsx(CustomLightSpinner, { src: Circle$1, alt: "loader", size: inline ? '40px' : '90px' }, void 0) }), void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "12px", justify: 'center' }, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20, textAlign: "center" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Waiting For Confirmation" }, void 0) }), void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 400, fontSize: 16, textAlign: "center" }, { children: pendingText }), void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 14, color: "#565A69", textAlign: "center", marginBottom: "12px" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Confirm this transaction in your wallet" }, void 0) }), void 0)] }), void 0)] }), void 0) }, void 0)); -} -function TransactionSubmittedContent(_a) { - var _b; - var onDismiss = _a.onDismiss, chainId = _a.chainId, hash = _a.hash, currencyToAdd = _a.currencyToAdd, inline = _a.inline; - var theme = React.useContext(styled.ThemeContext); - var library = useActiveWeb3React().library; - var _c = useAddTokenToMetamask(currencyToAdd), addToken = _c.addToken, success = _c.success; - return (jsxRuntime.jsx(Wrapper, { children: jsxRuntime.jsxs(Section, __assign({ inline: inline }, { children: [!inline && (jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx("div", {}, void 0), jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0)] }, void 0)), jsxRuntime.jsx(ConfirmedIcon, __assign({ inline: inline }, { children: jsxRuntime.jsx(reactFeather.ArrowUpCircle, { strokeWidth: 0.5, size: inline ? '40px' : '90px', color: theme.primary1 }, void 0) }), void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "12px", justify: 'center' }, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20, textAlign: "center" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Transaction Submitted" }, void 0) }), void 0), chainId && hash && (jsxRuntime.jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, hash, ExplorerDataType.TRANSACTION) }, { children: jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 14, color: theme.primary1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "View on Explorer" }, void 0) }), void 0) }), void 0)), currencyToAdd && ((_b = library === null || library === void 0 ? void 0 : library.provider) === null || _b === void 0 ? void 0 : _b.isMetaMask) && (jsxRuntime.jsx(ButtonLight, __assign({ mt: "12px", padding: "6px 12px", width: "fit-content", onClick: addToken }, { children: !success ? (jsxRuntime.jsx(RowFixed, { children: jsxRuntime.jsxs(macro.Trans, { children: ["Add ", currencyToAdd.symbol, " to Metamask ", jsxRuntime.jsx(StyledLogo, { src: MetaMaskLogo }, void 0)] }, void 0) }, void 0)) : (jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsxs(macro.Trans, { children: ["Added ", currencyToAdd.symbol, " "] }, void 0), jsxRuntime.jsx(reactFeather.CheckCircle, { size: '16px', stroke: theme.green1, style: { marginLeft: '6px' } }, void 0)] }, void 0)) }), void 0)), jsxRuntime.jsx(ButtonPrimary, __assign({ onClick: onDismiss, style: { margin: '20px 0 0 0' } }, { children: jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20 }, { children: inline ? jsxRuntime.jsx(macro.Trans, { children: "Return" }, void 0) : jsxRuntime.jsx(macro.Trans, { children: "Close" }, void 0) }), void 0) }), void 0)] }), void 0)] }), void 0) }, void 0)); -} -function ConfirmationModalContent(_a) { - var title = _a.title, bottomContent = _a.bottomContent, onDismiss = _a.onDismiss, topContent = _a.topContent; - return (jsxRuntime.jsxs(Wrapper, { children: [jsxRuntime.jsxs(Section, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 16 }, { children: title }), void 0), jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0)] }, void 0), topContent()] }, void 0), bottomContent && jsxRuntime.jsx(BottomSection, __assign({ gap: "12px" }, { children: bottomContent() }), void 0)] }, void 0)); -} -function TransactionErrorContent(_a) { - var message = _a.message, onDismiss = _a.onDismiss; - var theme = React.useContext(styled.ThemeContext); - return (jsxRuntime.jsxs(Wrapper, { children: [jsxRuntime.jsxs(Section, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Error" }, void 0) }), void 0), jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0)] }, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ style: { marginTop: 20, padding: '2rem 0' }, gap: "24px", justify: "center" }, { children: [jsxRuntime.jsx(reactFeather.AlertTriangle, { color: theme.red1, style: { strokeWidth: 1.5 }, size: 64 }, void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 16, color: theme.red1, style: { textAlign: 'center', width: '85%', wordBreak: 'break-word' } }, { children: message }), void 0)] }), void 0)] }, void 0), jsxRuntime.jsx(BottomSection, __assign({ gap: "12px" }, { children: jsxRuntime.jsx(ButtonPrimary, __assign({ onClick: onDismiss }, { children: jsxRuntime.jsx(macro.Trans, { children: "Dismiss" }, void 0) }), void 0) }), void 0)] }, void 0)); -} -function L2Content(_a) { - var _b; - var onDismiss = _a.onDismiss, chainId = _a.chainId, hash = _a.hash, pendingText = _a.pendingText, inline = _a.inline; - var theme = React.useContext(styled.ThemeContext); - var transaction = useTransaction(hash); - var confirmed = useIsTransactionConfirmed(hash); - var transactionSuccess = ((_b = transaction === null || transaction === void 0 ? void 0 : transaction.receipt) === null || _b === void 0 ? void 0 : _b.status) === 1; - // convert unix time difference to seconds - var secondsToConfirm = (transaction === null || transaction === void 0 ? void 0 : transaction.confirmedTime) - ? (transaction.confirmedTime - transaction.addedTime) / 1000 - : undefined; - var info = CHAIN_INFO[chainId]; - return (jsxRuntime.jsx(Wrapper, { children: jsxRuntime.jsxs(Section, __assign({ inline: inline }, { children: [!inline && (jsxRuntime.jsxs(RowBetween, __assign({ mb: "16px" }, { children: [jsxRuntime.jsx(Badge, { children: jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(StyledLogo, { src: info.logoUrl, style: { margin: '0 8px 0 0' } }, void 0), info.label] }, void 0) }, void 0), jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0)] }), void 0)), jsxRuntime.jsx(ConfirmedIcon, __assign({ inline: inline }, { children: confirmed ? (transactionSuccess ? ( - // - jsxRuntime.jsx(AnimatedConfirmation, {}, void 0)) : (jsxRuntime.jsx(reactFeather.AlertCircle, { strokeWidth: 1, size: inline ? '40px' : '90px', color: theme.red1 }, void 0))) : (jsxRuntime.jsx(CustomLightSpinner, { src: Circle$1, alt: "loader", size: inline ? '40px' : '90px' }, void 0)) }), void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "12px", justify: 'center' }, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20, textAlign: "center" }, { children: !hash ? (jsxRuntime.jsx(macro.Trans, { children: "Confirm transaction in wallet" }, void 0)) : !confirmed ? (jsxRuntime.jsx(macro.Trans, { children: "Transaction Submitted" }, void 0)) : transactionSuccess ? (jsxRuntime.jsx(macro.Trans, { children: "Success" }, void 0)) : (jsxRuntime.jsx(macro.Trans, { children: "Error" }, void 0)) }), void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 400, fontSize: 16, textAlign: "center" }, { children: transaction ? jsxRuntime.jsx(TransactionSummary, { info: transaction.info }, void 0) : pendingText }), void 0), chainId && hash ? (jsxRuntime.jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, hash, ExplorerDataType.TRANSACTION) }, { children: jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 14, color: theme.primary1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "View on Explorer" }, void 0) }), void 0) }), void 0)) : (jsxRuntime.jsx("div", { style: { height: '17px' } }, void 0)), jsxRuntime.jsx(rebass.Text, __assign({ color: theme.text3, style: { margin: '20px 0 0 0' }, fontSize: '14px' }, { children: !secondsToConfirm ? (jsxRuntime.jsx("div", { style: { height: '24px' } }, void 0)) : (jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx(macro.Trans, { children: "Transaction completed in " }, void 0), jsxRuntime.jsxs("span", __assign({ style: { fontWeight: 500, marginLeft: '4px', color: theme.text1 } }, { children: [secondsToConfirm, " seconds \uD83C\uDF89"] }), void 0)] }, void 0)) }), void 0), jsxRuntime.jsx(ButtonPrimary, __assign({ onClick: onDismiss, style: { margin: '4px 0 0 0' } }, { children: jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20 }, { children: inline ? jsxRuntime.jsx(macro.Trans, { children: "Return" }, void 0) : jsxRuntime.jsx(macro.Trans, { children: "Close" }, void 0) }), void 0) }), void 0)] }), void 0)] }), void 0) }, void 0)); -} -function TransactionConfirmationModal(_a) { - var isOpen = _a.isOpen, onDismiss = _a.onDismiss, attemptingTxn = _a.attemptingTxn, hash = _a.hash, pendingText = _a.pendingText, content = _a.content, currencyToAdd = _a.currencyToAdd; - var chainId = useActiveWeb3React().chainId; - var isL2 = Boolean(chainId && L2_CHAIN_IDS.includes(chainId)); - if (!chainId) - return null; - // confirmation screen - return (jsxRuntime.jsx(Modal, __assign({ isOpen: isOpen, onDismiss: onDismiss, maxHeight: 90 }, { children: isL2 && (hash || attemptingTxn) ? (jsxRuntime.jsx(L2Content, { chainId: chainId, hash: hash, onDismiss: onDismiss, pendingText: pendingText }, void 0)) : attemptingTxn ? (jsxRuntime.jsx(ConfirmationPendingContent, { onDismiss: onDismiss, pendingText: pendingText }, void 0)) : hash ? (jsxRuntime.jsx(TransactionSubmittedContent, { chainId: chainId, hash: hash, onDismiss: onDismiss, currencyToAdd: currencyToAdd }, void 0)) : (content()) }), void 0)); -} -var templateObject_1$c, templateObject_2$4, templateObject_3$2, templateObject_4$2, templateObject_5$2; - -function SwapModalFooter(_a) { - var onConfirm = _a.onConfirm, swapErrorMessage = _a.swapErrorMessage, disabledConfirm = _a.disabledConfirm; - return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs(AutoRow, { children: [jsxRuntime.jsx(ButtonError, __assign({ onClick: onConfirm, disabled: disabledConfirm, style: { margin: '10px 0 0 0' }, id: "confirm-swap-or-send" }, { children: jsxRuntime.jsx(rebass.Text, __assign({ fontSize: 20, fontWeight: 500 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Confirm Swap" }, void 0) }), void 0) }), void 0), swapErrorMessage ? jsxRuntime.jsx(SwapCallbackError, { error: swapErrorMessage }, void 0) : null] }, void 0) }, void 0)); -} - -function computeFiatValuePriceImpact(fiatValueInput, fiatValueOutput) { - if (!fiatValueOutput || !fiatValueInput) - return undefined; - if (!fiatValueInput.currency.equals(fiatValueOutput.currency)) - return undefined; - if (JSBI__default["default"].equal(fiatValueInput.quotient, JSBI__default["default"].BigInt(0))) - return undefined; - var pct = ONE_HUNDRED_PERCENT.subtract(fiatValueOutput.divide(fiatValueInput)); - return new sdkCore.Percent(pct.numerator, pct.denominator); -} - -var ArrowWrapper = styled__default["default"].div(templateObject_1$b || (templateObject_1$b = __makeTemplateObject(["\n padding: 4px;\n border-radius: 12px;\n height: 32px;\n width: 32px;\n position: relative;\n margin-top: -18px;\n margin-bottom: -18px;\n left: calc(50% - 16px);\n display: flex;\n justify-content: center;\n align-items: center;\n background-color: ", ";\n border: 4px solid;\n border-color: ", ";\n z-index: 2;\n"], ["\n padding: 4px;\n border-radius: 12px;\n height: 32px;\n width: 32px;\n position: relative;\n margin-top: -18px;\n margin-bottom: -18px;\n left: calc(50% - 16px);\n display: flex;\n justify-content: center;\n align-items: center;\n background-color: ", ";\n border: 4px solid;\n border-color: ", ";\n z-index: 2;\n"])), function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var theme = _a.theme; - return theme.bg0; -}); -function SwapModalHeader(_a) { - var trade = _a.trade, allowedSlippage = _a.allowedSlippage, recipient = _a.recipient, showAcceptChanges = _a.showAcceptChanges, onAcceptChanges = _a.onAcceptChanges; - var theme = React.useContext(styled.ThemeContext); - var _b = __read(React.useState(false), 2), showInverted = _b[0], setShowInverted = _b[1]; - var fiatValueInput = useUSDCValue(trade.inputAmount); - var fiatValueOutput = useUSDCValue(trade.outputAmount); - return (jsxRuntime.jsxs(AutoColumn, __assign({ gap: '4px', style: { marginTop: '1rem' } }, { children: [jsxRuntime.jsx(LightCard, __assign({ padding: "0.75rem 1rem" }, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: '8px' }, { children: [jsxRuntime.jsxs(RowBetween, __assign({ align: "center" }, { children: [jsxRuntime.jsx(RowFixed, __assign({ gap: '0px' }, { children: jsxRuntime.jsx(TruncatedText, __assign({ fontSize: 24, fontWeight: 500, color: showAcceptChanges && trade.tradeType === sdkCore.TradeType.EXACT_OUTPUT ? theme.primary1 : '' }, { children: trade.inputAmount.toSignificant(6) }), void 0) }), void 0), jsxRuntime.jsxs(RowFixed, __assign({ gap: '0px' }, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: trade.inputAmount.currency, size: '20px', style: { marginRight: '12px' } }, void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontSize: 20, fontWeight: 500 }, { children: trade.inputAmount.currency.symbol }), void 0)] }), void 0)] }), void 0), jsxRuntime.jsx(RowBetween, { children: jsxRuntime.jsx(FiatValue, { fiatValue: fiatValueInput }, void 0) }, void 0)] }), void 0) }), void 0), jsxRuntime.jsx(ArrowWrapper, { children: jsxRuntime.jsx(reactFeather.ArrowDown, { size: "16", color: theme.text2 }, void 0) }, void 0), jsxRuntime.jsx(LightCard, __assign({ padding: "0.75rem 1rem", style: { marginBottom: '0.25rem' } }, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: '8px' }, { children: [jsxRuntime.jsxs(RowBetween, __assign({ align: "flex-end" }, { children: [jsxRuntime.jsx(RowFixed, __assign({ gap: '0px' }, { children: jsxRuntime.jsx(TruncatedText, __assign({ fontSize: 24, fontWeight: 500 }, { children: trade.outputAmount.toSignificant(6) }), void 0) }), void 0), jsxRuntime.jsxs(RowFixed, __assign({ gap: '0px' }, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: trade.outputAmount.currency, size: '20px', style: { marginRight: '12px' } }, void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontSize: 20, fontWeight: 500 }, { children: trade.outputAmount.currency.symbol }), void 0)] }), void 0)] }), void 0), jsxRuntime.jsx(RowBetween, { children: jsxRuntime.jsx(ThemedText.Body, __assign({ fontSize: 14, color: theme.text3 }, { children: jsxRuntime.jsx(FiatValue, { fiatValue: fiatValueOutput, priceImpact: computeFiatValuePriceImpact(fiatValueInput, fiatValueOutput) }, void 0) }), void 0) }, void 0)] }), void 0) }), void 0), jsxRuntime.jsx(RowBetween, __assign({ style: { marginTop: '0.25rem', padding: '0 1rem' } }, { children: jsxRuntime.jsx(TradePrice, { price: trade.executionPrice, showInverted: showInverted, setShowInverted: setShowInverted }, void 0) }), void 0), jsxRuntime.jsx(LightCard, __assign({ style: { padding: '.75rem', marginTop: '0.5rem' } }, { children: jsxRuntime.jsx(AdvancedSwapDetails, { trade: trade, allowedSlippage: allowedSlippage }, void 0) }), void 0), showAcceptChanges ? (jsxRuntime.jsx(SwapShowAcceptChanges, __assign({ justify: "flex-start", gap: '0px' }, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(reactFeather.AlertTriangle, { size: 20, style: { marginRight: '8px', minWidth: 24 } }, void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ color: theme.primary1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Price Updated" }, void 0) }), void 0)] }, void 0), jsxRuntime.jsx(ButtonPrimary, __assign({ style: { padding: '.5rem', width: 'fit-content', fontSize: '0.825rem', borderRadius: '12px' }, onClick: onAcceptChanges }, { children: jsxRuntime.jsx(macro.Trans, { children: "Accept" }, void 0) }), void 0)] }, void 0) }), void 0)) : null, jsxRuntime.jsx(AutoColumn, __assign({ justify: "flex-start", gap: "sm", style: { padding: '.75rem 1rem' } }, { children: trade.tradeType === sdkCore.TradeType.EXACT_INPUT ? (jsxRuntime.jsx(ThemedText.Italic, __assign({ fontWeight: 400, textAlign: "left", style: { width: '100%' } }, { children: jsxRuntime.jsxs(macro.Trans, { children: ["Output is estimated. You will receive at least", ' ', jsxRuntime.jsxs("b", { children: [trade.minimumAmountOut(allowedSlippage).toSignificant(6), " ", trade.outputAmount.currency.symbol] }, void 0), ' ', "or the transaction will revert."] }, void 0) }), void 0)) : (jsxRuntime.jsx(ThemedText.Italic, __assign({ fontWeight: 400, textAlign: "left", style: { width: '100%' } }, { children: jsxRuntime.jsxs(macro.Trans, { children: ["Input is estimated. You will sell at most", ' ', jsxRuntime.jsxs("b", { children: [trade.maximumAmountIn(allowedSlippage).toSignificant(6), " ", trade.inputAmount.currency.symbol] }, void 0), ' ', "or the transaction will revert."] }, void 0) }), void 0)) }), void 0), recipient !== null ? (jsxRuntime.jsx(AutoColumn, __assign({ justify: "flex-start", gap: "sm", style: { padding: '12px 0 0 0px' } }, { children: jsxRuntime.jsx(ThemedText.Main, { children: jsxRuntime.jsxs(macro.Trans, { children: ["Output will be sent to", ' ', jsxRuntime.jsx("b", __assign({ title: recipient }, { children: isAddress(recipient) ? shortenAddress(recipient) : recipient }), void 0)] }, void 0) }, void 0) }), void 0)) : null] }), void 0)); -} -var templateObject_1$b; - -function ConfirmSwapModal(_a) { - var _b, _c, _d, _e, _f, _g; - var trade = _a.trade, originalTrade = _a.originalTrade, onAcceptChanges = _a.onAcceptChanges, allowedSlippage = _a.allowedSlippage, onConfirm = _a.onConfirm, onDismiss = _a.onDismiss, recipient = _a.recipient, swapErrorMessage = _a.swapErrorMessage, isOpen = _a.isOpen, attemptingTxn = _a.attemptingTxn, txHash = _a.txHash; - var showAcceptChanges = React.useMemo(function () { return Boolean(trade && originalTrade && tradeMeaningfullyDiffers(trade, originalTrade)); }, [originalTrade, trade]); - var modalHeader = React.useCallback(function () { - return trade ? (jsxRuntime.jsx(SwapModalHeader, { trade: trade, allowedSlippage: allowedSlippage, recipient: recipient, showAcceptChanges: showAcceptChanges, onAcceptChanges: onAcceptChanges }, void 0)) : null; - }, [allowedSlippage, onAcceptChanges, recipient, showAcceptChanges, trade]); - var modalBottom = React.useCallback(function () { - return trade ? (jsxRuntime.jsx(SwapModalFooter, { onConfirm: onConfirm, trade: trade, disabledConfirm: showAcceptChanges, swapErrorMessage: swapErrorMessage }, void 0)) : null; - }, [onConfirm, showAcceptChanges, swapErrorMessage, trade]); - // text to show while loading - var pendingText = (jsxRuntime.jsxs(macro.Trans, { children: ["Swapping ", (_b = trade === null || trade === void 0 ? void 0 : trade.inputAmount) === null || _b === void 0 ? void 0 : _b.toSignificant(6), " ", (_d = (_c = trade === null || trade === void 0 ? void 0 : trade.inputAmount) === null || _c === void 0 ? void 0 : _c.currency) === null || _d === void 0 ? void 0 : _d.symbol, " for", ' ', (_e = trade === null || trade === void 0 ? void 0 : trade.outputAmount) === null || _e === void 0 ? void 0 : _e.toSignificant(6), " ", (_g = (_f = trade === null || trade === void 0 ? void 0 : trade.outputAmount) === null || _f === void 0 ? void 0 : _f.currency) === null || _g === void 0 ? void 0 : _g.symbol] }, void 0)); - var confirmationContent = React.useCallback(function () { - return swapErrorMessage ? (jsxRuntime.jsx(TransactionErrorContent, { onDismiss: onDismiss, message: swapErrorMessage }, void 0)) : (jsxRuntime.jsx(ConfirmationModalContent, { title: jsxRuntime.jsx(macro.Trans, { children: "Confirm Swap" }, void 0), onDismiss: onDismiss, topContent: modalHeader, bottomContent: modalBottom }, void 0)); - }, [onDismiss, modalBottom, modalHeader, swapErrorMessage]); - return (jsxRuntime.jsx(TransactionConfirmationModal, { isOpen: isOpen, onDismiss: onDismiss, attemptingTxn: attemptingTxn, hash: txHash, content: confirmationContent, pendingText: pendingText, currencyToAdd: trade === null || trade === void 0 ? void 0 : trade.outputAmount.currency }, void 0)); -} - -var _a$6; -var ApplicationModal; -(function (ApplicationModal) { - ApplicationModal[ApplicationModal["WALLET"] = 0] = "WALLET"; - ApplicationModal[ApplicationModal["SETTINGS"] = 1] = "SETTINGS"; - ApplicationModal[ApplicationModal["SELF_CLAIM"] = 2] = "SELF_CLAIM"; - ApplicationModal[ApplicationModal["ADDRESS_CLAIM"] = 3] = "ADDRESS_CLAIM"; - ApplicationModal[ApplicationModal["CLAIM_POPUP"] = 4] = "CLAIM_POPUP"; - ApplicationModal[ApplicationModal["MENU"] = 5] = "MENU"; - ApplicationModal[ApplicationModal["DELEGATE"] = 6] = "DELEGATE"; - ApplicationModal[ApplicationModal["VOTE"] = 7] = "VOTE"; - ApplicationModal[ApplicationModal["POOL_OVERVIEW_OPTIONS"] = 8] = "POOL_OVERVIEW_OPTIONS"; - ApplicationModal[ApplicationModal["NETWORK_SELECTOR"] = 9] = "NETWORK_SELECTOR"; - ApplicationModal[ApplicationModal["PRIVACY_POLICY"] = 10] = "PRIVACY_POLICY"; -})(ApplicationModal || (ApplicationModal = {})); -var initialState$8 = { - chainId: null, - openModal: null, - popupList: [], -}; -var applicationSlice = toolkit.createSlice({ - name: 'application', - initialState: initialState$8, - reducers: { - updateChainId: function (state, action) { - var chainId = action.payload.chainId; - state.chainId = chainId; - }, - setOpenModal: function (state, action) { - state.openModal = action.payload; - }, - addPopup: function (state, _a) { - var _b = _a.payload, content = _b.content, key = _b.key, _c = _b.removeAfterMs, removeAfterMs = _c === void 0 ? DEFAULT_TXN_DISMISS_MS : _c; - state.popupList = (key ? state.popupList.filter(function (popup) { return popup.key !== key; }) : state.popupList).concat([ - { - key: key || toolkit.nanoid(), - show: true, - content: content, - removeAfterMs: removeAfterMs, - }, - ]); - }, - removePopup: function (state, _a) { - var key = _a.payload.key; - state.popupList.forEach(function (p) { - if (p.key === key) { - p.show = false; - } - }); - }, - }, -}); -var updateChainId = (_a$6 = applicationSlice.actions, _a$6.updateChainId), setOpenModal = _a$6.setOpenModal, addPopup = _a$6.addPopup; _a$6.removePopup; -var application = applicationSlice.reducer; - -function useModalOpen(modal) { - var openModal = useAppSelector(function (state) { return state.application.openModal; }); - return openModal === modal; -} -function useToggleModal(modal) { - var open = useModalOpen(modal); - var dispatch = useAppDispatch(); - return React.useCallback(function () { return dispatch(setOpenModal(open ? null : modal)); }, [dispatch, modal, open]); -} -function useWalletModalToggle() { - return useToggleModal(ApplicationModal.WALLET); -} -function useToggleSettingsMenu() { - return useToggleModal(ApplicationModal.SETTINGS); -} -// returns a function that allows adding a popup -function useAddPopup() { - var dispatch = useAppDispatch(); - return React.useCallback(function (content, key, removeAfterMs) { - dispatch(addPopup({ content: content, key: key, removeAfterMs: removeAfterMs !== null && removeAfterMs !== void 0 ? removeAfterMs : DEFAULT_TXN_DISMISS_MS })); - }, [dispatch]); -} - -var ToggleElement = styled__default["default"].span(templateObject_1$a || (templateObject_1$a = __makeTemplateObject(["\n padding: 0.25rem 0.6rem;\n border-radius: 9px;\n background: ", ";\n color: ", ";\n font-size: 14px;\n font-weight: ", ";\n :hover {\n user-select: ", ";\n background: ", ";\n color: ", ";\n }\n"], ["\n padding: 0.25rem 0.6rem;\n border-radius: 9px;\n background: ", ";\n color: ", ";\n font-size: 14px;\n font-weight: ", ";\n :hover {\n user-select: ", ";\n background: ", ";\n color: ", ";\n }\n"])), function (_a) { - var theme = _a.theme, isActive = _a.isActive, isOnSwitch = _a.isOnSwitch; - return (isActive ? (isOnSwitch ? theme.primary1 : theme.bg4) : 'none'); -}, function (_a) { - var theme = _a.theme, isActive = _a.isActive; - return (isActive ? theme.white : theme.text2); -}, function (_a) { - var isOnSwitch = _a.isOnSwitch; - return (isOnSwitch ? '500' : '400'); -}, function (_a) { - var isOnSwitch = _a.isOnSwitch; - return (isOnSwitch ? 'none' : 'initial'); -}, function (_a) { - var theme = _a.theme, isActive = _a.isActive, isOnSwitch = _a.isOnSwitch; - return isActive ? (isOnSwitch ? polished.darken(0.05, theme.primary1) : polished.darken(0.05, theme.bg4)) : 'none'; -}, function (_a) { - var theme = _a.theme, isActive = _a.isActive, isOnSwitch = _a.isOnSwitch; - return (isActive ? (isOnSwitch ? theme.white : theme.white) : theme.text3); -}); -var StyledToggle = styled__default["default"].button(templateObject_2$3 || (templateObject_2$3 = __makeTemplateObject(["\n border-radius: 12px;\n border: none;\n background: ", ";\n display: flex;\n width: fit-content;\n cursor: pointer;\n outline: none;\n padding: 2px;\n"], ["\n border-radius: 12px;\n border: none;\n background: ", ";\n display: flex;\n width: fit-content;\n cursor: pointer;\n outline: none;\n padding: 2px;\n"])), function (_a) { - var theme = _a.theme; - return theme.bg0; -}); -function Toggle(_a) { - var id = _a.id, isActive = _a.isActive, toggle = _a.toggle, _b = _a.checked, checked = _b === void 0 ? jsxRuntime.jsx(macro.Trans, { children: "On" }, void 0) : _b, _c = _a.unchecked, unchecked = _c === void 0 ? jsxRuntime.jsx(macro.Trans, { children: "Off" }, void 0) : _c; - return (jsxRuntime.jsxs(StyledToggle, __assign({ id: id, isActive: isActive, onClick: toggle }, { children: [jsxRuntime.jsx(ToggleElement, __assign({ isActive: isActive, isOnSwitch: true }, { children: checked }), void 0), jsxRuntime.jsx(ToggleElement, __assign({ isActive: !isActive, isOnSwitch: false }, { children: unchecked }), void 0)] }), void 0)); -} -var templateObject_1$a, templateObject_2$3; - -var SlippageError; -(function (SlippageError) { - SlippageError["InvalidInput"] = "InvalidInput"; -})(SlippageError || (SlippageError = {})); -var DeadlineError; -(function (DeadlineError) { - DeadlineError["InvalidInput"] = "InvalidInput"; -})(DeadlineError || (DeadlineError = {})); -var FancyButton = styled__default["default"].button(templateObject_1$9 || (templateObject_1$9 = __makeTemplateObject(["\n color: ", ";\n align-items: center;\n height: 2rem;\n border-radius: 36px;\n font-size: 1rem;\n width: auto;\n min-width: 3.5rem;\n border: 1px solid ", ";\n outline: none;\n background: ", ";\n :hover {\n border: 1px solid ", ";\n }\n :focus {\n border: 1px solid ", ";\n }\n"], ["\n color: ", ";\n align-items: center;\n height: 2rem;\n border-radius: 36px;\n font-size: 1rem;\n width: auto;\n min-width: 3.5rem;\n border: 1px solid ", ";\n outline: none;\n background: ", ";\n :hover {\n border: 1px solid ", ";\n }\n :focus {\n border: 1px solid ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.text1; -}, function (_a) { - var theme = _a.theme; - return theme.bg3; -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var theme = _a.theme; - return theme.bg4; -}, function (_a) { - var theme = _a.theme; - return theme.primary1; -}); -var Option = styled__default["default"](FancyButton)(templateObject_2$2 || (templateObject_2$2 = __makeTemplateObject(["\n margin-right: 8px;\n :hover {\n cursor: pointer;\n }\n background-color: ", ";\n color: ", ";\n"], ["\n margin-right: 8px;\n :hover {\n cursor: pointer;\n }\n background-color: ", ";\n color: ", ";\n"])), function (_a) { - var active = _a.active, theme = _a.theme; - return active && theme.primary1; -}, function (_a) { - var active = _a.active, theme = _a.theme; - return (active ? theme.white : theme.text1); -}); -var Input = styled__default["default"].input(templateObject_3$1 || (templateObject_3$1 = __makeTemplateObject(["\n background: ", ";\n font-size: 16px;\n width: auto;\n outline: none;\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n }\n color: ", ";\n text-align: right;\n"], ["\n background: ", ";\n font-size: 16px;\n width: auto;\n outline: none;\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n }\n color: ", ";\n text-align: right;\n"])), function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var theme = _a.theme, color = _a.color; - return (color === 'red' ? theme.red1 : theme.text1); -}); -var OptionCustom = styled__default["default"](FancyButton)(templateObject_4$1 || (templateObject_4$1 = __makeTemplateObject(["\n height: 2rem;\n position: relative;\n padding: 0 0.75rem;\n flex: 1;\n border: ", ";\n :hover {\n border: ", ";\n }\n\n input {\n width: 100%;\n height: 100%;\n border: 0px;\n border-radius: 2rem;\n }\n"], ["\n height: 2rem;\n position: relative;\n padding: 0 0.75rem;\n flex: 1;\n border: ", ";\n :hover {\n border: ", ";\n }\n\n input {\n width: 100%;\n height: 100%;\n border: 0px;\n border-radius: 2rem;\n }\n"])), function (_a) { - var theme = _a.theme, active = _a.active, warning = _a.warning; - return active ? "1px solid " + (warning ? theme.red1 : theme.primary1) : warning && "1px solid " + theme.red1; -}, function (_a) { - var theme = _a.theme, active = _a.active, warning = _a.warning; - return active && "1px solid " + (warning ? polished.darken(0.1, theme.red1) : polished.darken(0.1, theme.primary1)); -}); -var SlippageEmojiContainer = styled__default["default"].span(templateObject_6$1 || (templateObject_6$1 = __makeTemplateObject(["\n color: #f3841e;\n ", "\n"], ["\n color: #f3841e;\n ", "\n"])), function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToSmall(templateObject_5$1 || (templateObject_5$1 = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); -}); -var THREE_DAYS_IN_SECONDS = ms__default["default"](templateObject_7$1 || (templateObject_7$1 = __makeTemplateObject(["3 days"], ["3 days"]))) / 1000; -function TransactionSettings(_a) { - var placeholderSlippage = _a.placeholderSlippage; - var chainId = useActiveWeb3React().chainId; - var theme = React.useContext(styled.ThemeContext); - var userSlippageTolerance = useUserSlippageTolerance(); - var setUserSlippageTolerance = useSetUserSlippageTolerance(); - var _b = __read(useUserTransactionTTL(), 2), deadline = _b[0], setDeadline = _b[1]; - var _c = __read(React.useState(''), 2), slippageInput = _c[0], setSlippageInput = _c[1]; - var _d = __read(React.useState(false), 2), slippageError = _d[0], setSlippageError = _d[1]; - var _e = __read(React.useState(''), 2), deadlineInput = _e[0], setDeadlineInput = _e[1]; - var _f = __read(React.useState(false), 2), deadlineError = _f[0], setDeadlineError = _f[1]; - function parseSlippageInput(value) { - // populate what the user typed and clear the error - setSlippageInput(value); - setSlippageError(false); - if (value.length === 0) { - setUserSlippageTolerance('auto'); - } - else { - var parsed = Math.floor(Number.parseFloat(value) * 100); - if (!Number.isInteger(parsed) || parsed < 0 || parsed > 5000) { - setUserSlippageTolerance('auto'); - if (value !== '.') { - setSlippageError(SlippageError.InvalidInput); - } - } - else { - setUserSlippageTolerance(new sdkCore.Percent(parsed, 10000)); - } - } - } - var tooLow = userSlippageTolerance !== 'auto' && userSlippageTolerance.lessThan(new sdkCore.Percent(5, 10000)); - var tooHigh = userSlippageTolerance !== 'auto' && userSlippageTolerance.greaterThan(new sdkCore.Percent(1, 100)); - function parseCustomDeadline(value) { - // populate what the user typed and clear the error - setDeadlineInput(value); - setDeadlineError(false); - if (value.length === 0) { - setDeadline(DEFAULT_DEADLINE_FROM_NOW); - } - else { - try { - var parsed = Math.floor(Number.parseFloat(value) * 60); - if (!Number.isInteger(parsed) || parsed < 60 || parsed > THREE_DAYS_IN_SECONDS) { - setDeadlineError(DeadlineError.InvalidInput); - } - else { - setDeadline(parsed); - } - } - catch (error) { - console.error(error); - setDeadlineError(DeadlineError.InvalidInput); - } - } - } - var showCustomDeadlineRow = Boolean(chainId && !L2_CHAIN_IDS.includes(chainId)); - return (jsxRuntime.jsxs(AutoColumn, __assign({ gap: "md" }, { children: [jsxRuntime.jsxs(AutoColumn, __assign({ gap: "sm" }, { children: [jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(ThemedText.Black, __assign({ fontWeight: 400, fontSize: 14, color: theme.text2 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Slippage tolerance" }, void 0) }), void 0), jsxRuntime.jsx(QuestionHelper, { text: jsxRuntime.jsx(macro.Trans, { children: "Your transaction will revert if the price changes unfavorably by more than this percentage." }, void 0) }, void 0)] }, void 0), jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(Option, __assign({ onClick: function () { - parseSlippageInput(''); - }, active: userSlippageTolerance === 'auto' }, { children: jsxRuntime.jsx(macro.Trans, { children: "Auto" }, void 0) }), void 0), jsxRuntime.jsx(OptionCustom, __assign({ active: userSlippageTolerance !== 'auto', warning: !!slippageError, tabIndex: -1 }, { children: jsxRuntime.jsxs(RowBetween, { children: [tooLow || tooHigh ? (jsxRuntime.jsx(SlippageEmojiContainer, { children: jsxRuntime.jsx("span", __assign({ role: "img", "aria-label": "warning" }, { children: "\u26A0\uFE0F" }), void 0) }, void 0)) : null, jsxRuntime.jsx(Input, { placeholder: placeholderSlippage.toFixed(2), value: slippageInput.length > 0 - ? slippageInput - : userSlippageTolerance === 'auto' - ? '' - : userSlippageTolerance.toFixed(2), onChange: function (e) { return parseSlippageInput(e.target.value); }, onBlur: function () { - setSlippageInput(''); - setSlippageError(false); - }, color: slippageError ? 'red' : '' }, void 0), "%"] }, void 0) }), void 0)] }, void 0), slippageError || tooLow || tooHigh ? (jsxRuntime.jsx(RowBetween, __assign({ style: { - fontSize: '14px', - paddingTop: '7px', - color: slippageError ? 'red' : '#F3841E', - } }, { children: slippageError ? (jsxRuntime.jsx(macro.Trans, { children: "Enter a valid slippage percentage" }, void 0)) : tooLow ? (jsxRuntime.jsx(macro.Trans, { children: "Your transaction may fail" }, void 0)) : (jsxRuntime.jsx(macro.Trans, { children: "Your transaction may be frontrun" }, void 0)) }), void 0)) : null] }), void 0), showCustomDeadlineRow && (jsxRuntime.jsxs(AutoColumn, __assign({ gap: "sm" }, { children: [jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(ThemedText.Black, __assign({ fontSize: 14, fontWeight: 400, color: theme.text2 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Transaction deadline" }, void 0) }), void 0), jsxRuntime.jsx(QuestionHelper, { text: jsxRuntime.jsx(macro.Trans, { children: "Your transaction will revert if it is pending for more than this period of time." }, void 0) }, void 0)] }, void 0), jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(OptionCustom, __assign({ style: { width: '80px' }, warning: !!deadlineError, tabIndex: -1 }, { children: jsxRuntime.jsx(Input, { placeholder: (DEFAULT_DEADLINE_FROM_NOW / 60).toString(), value: deadlineInput.length > 0 - ? deadlineInput - : deadline === DEFAULT_DEADLINE_FROM_NOW - ? '' - : (deadline / 60).toString(), onChange: function (e) { return parseCustomDeadline(e.target.value); }, onBlur: function () { - setDeadlineInput(''); - setDeadlineError(false); - }, color: deadlineError ? 'red' : '' }, void 0) }), void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ style: { paddingLeft: '8px' }, fontSize: 14 }, { children: jsxRuntime.jsx(macro.Trans, { children: "minutes" }, void 0) }), void 0)] }, void 0)] }), void 0))] }), void 0)); -} -var templateObject_1$9, templateObject_2$2, templateObject_3$1, templateObject_4$1, templateObject_5$1, templateObject_6$1, templateObject_7$1; - -var StyledMenuIcon = styled__default["default"](reactFeather.Settings)(templateObject_1$8 || (templateObject_1$8 = __makeTemplateObject(["\n height: 20px;\n width: 20px;\n\n > * {\n stroke: ", ";\n }\n\n :hover {\n opacity: 0.7;\n }\n"], ["\n height: 20px;\n width: 20px;\n\n > * {\n stroke: ", ";\n }\n\n :hover {\n opacity: 0.7;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.text1; -}); -var StyledCloseIcon = styled__default["default"](reactFeather.X)(templateObject_2$1 || (templateObject_2$1 = __makeTemplateObject(["\n height: 20px;\n width: 20px;\n :hover {\n cursor: pointer;\n }\n\n > * {\n stroke: ", ";\n }\n"], ["\n height: 20px;\n width: 20px;\n :hover {\n cursor: pointer;\n }\n\n > * {\n stroke: ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.text1; -}); -var StyledMenuButton = styled__default["default"].button(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n position: relative;\n width: 100%;\n height: 100%;\n border: none;\n background-color: transparent;\n margin: 0;\n padding: 0;\n border-radius: 0.5rem;\n height: 20px;\n\n :hover,\n :focus {\n cursor: pointer;\n outline: none;\n }\n"], ["\n position: relative;\n width: 100%;\n height: 100%;\n border: none;\n background-color: transparent;\n margin: 0;\n padding: 0;\n border-radius: 0.5rem;\n height: 20px;\n\n :hover,\n :focus {\n cursor: pointer;\n outline: none;\n }\n"]))); -var EmojiWrapper = styled__default["default"].div(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n position: absolute;\n bottom: -6px;\n right: 0px;\n font-size: 14px;\n"], ["\n position: absolute;\n bottom: -6px;\n right: 0px;\n font-size: 14px;\n"]))); -var StyledMenu = styled__default["default"].div(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n margin-left: 0.5rem;\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n text-align: left;\n"], ["\n margin-left: 0.5rem;\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n text-align: left;\n"]))); -var MenuFlyout = styled__default["default"].span(templateObject_7 || (templateObject_7 = __makeTemplateObject(["\n min-width: 20.125rem;\n background-color: ", ";\n border: 1px solid ", ";\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 border-radius: 12px;\n display: flex;\n flex-direction: column;\n font-size: 1rem;\n position: absolute;\n top: 2rem;\n right: 0rem;\n z-index: 100;\n\n ", ";\n\n user-select: none;\n"], ["\n min-width: 20.125rem;\n background-color: ", ";\n border: 1px solid ", ";\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 border-radius: 12px;\n display: flex;\n flex-direction: column;\n font-size: 1rem;\n position: absolute;\n top: 2rem;\n right: 0rem;\n z-index: 100;\n\n ", ";\n\n user-select: none;\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}, function (_a) { - var theme = _a.theme; - return theme.bg3; -}, function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToMedium(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n min-width: 18.125rem;\n "], ["\n min-width: 18.125rem;\n "]))); -}); -var Break = styled__default["default"].div(templateObject_8 || (templateObject_8 = __makeTemplateObject(["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"], ["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg3; -}); -var ModalContentWrapper = styled__default["default"].div(templateObject_9 || (templateObject_9 = __makeTemplateObject(["\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 2rem 0;\n background-color: ", ";\n border-radius: 20px;\n"], ["\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 2rem 0;\n background-color: ", ";\n border-radius: 20px;\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}); -function SettingsTab(_a) { - var placeholderSlippage = _a.placeholderSlippage; - var chainId = useActiveWeb3React().chainId; - var node = React.useRef(); - var open = useModalOpen(ApplicationModal.SETTINGS); - var toggle = useToggleSettingsMenu(); - var theme = React.useContext(styled.ThemeContext); - var _b = __read(useExpertModeManager(), 2), expertMode = _b[0], toggleExpertMode = _b[1]; - var _c = __read(useClientSideRouter(), 2), clientSideRouter = _c[0], setClientSideRouter = _c[1]; - // show confirmation view before turning on - var _d = __read(React.useState(false), 2), showConfirmation = _d[0], setShowConfirmation = _d[1]; - useOnClickOutside(node, open ? toggle : undefined); - return ( - // https://github.com/DefinitelyTyped/DefinitelyTyped/issues/30451 - jsxRuntime.jsxs(StyledMenu, __assign({ ref: node }, { children: [jsxRuntime.jsx(Modal, __assign({ isOpen: showConfirmation, onDismiss: function () { return setShowConfirmation(false); }, maxHeight: 100 }, { children: jsxRuntime.jsx(ModalContentWrapper, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "lg" }, { children: [jsxRuntime.jsxs(RowBetween, __assign({ style: { padding: '0 2rem' } }, { children: [jsxRuntime.jsx("div", {}, void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Are you sure?" }, void 0) }), void 0), jsxRuntime.jsx(StyledCloseIcon, { onClick: function () { return setShowConfirmation(false); } }, void 0)] }), void 0), jsxRuntime.jsx(Break, {}, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "lg", style: { padding: '0 2rem' } }, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds." }, void 0) }), void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 600, fontSize: 20 }, { children: jsxRuntime.jsx(macro.Trans, { children: "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING." }, void 0) }), void 0), jsxRuntime.jsx(ButtonError, __assign({ error: true, padding: '12px', onClick: function () { - var confirmWord = macro.t(templateObject_10 || (templateObject_10 = __makeTemplateObject(["confirm"], ["confirm"]))); - if (window.prompt(macro.t(templateObject_11 || (templateObject_11 = __makeTemplateObject(["Please type the word \"", "\" to enable expert mode."], ["Please type the word \"", "\" to enable expert mode."])), confirmWord)) === confirmWord) { - toggleExpertMode(); - setShowConfirmation(false); - } - } }, { children: jsxRuntime.jsx(rebass.Text, __assign({ fontSize: 20, fontWeight: 500, id: "confirm-expert-mode" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Turn On Expert Mode" }, void 0) }), void 0) }), void 0)] }), void 0)] }), void 0) }, void 0) }), void 0), jsxRuntime.jsxs(StyledMenuButton, __assign({ onClick: toggle, id: "open-settings-dialog-button", "aria-label": macro.t(templateObject_12 || (templateObject_12 = __makeTemplateObject(["Transaction Settings"], ["Transaction Settings"]))) }, { children: [jsxRuntime.jsx(StyledMenuIcon, {}, void 0), expertMode ? (jsxRuntime.jsx(EmojiWrapper, { children: jsxRuntime.jsx("span", __assign({ role: "img", "aria-label": "wizard-icon" }, { children: "\uD83E\uDDD9" }), void 0) }, void 0)) : null] }), void 0), open && (jsxRuntime.jsx(MenuFlyout, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "md", style: { padding: '1rem' } }, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 600, fontSize: 14 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Transaction Settings" }, void 0) }), void 0), jsxRuntime.jsx(TransactionSettings, { placeholderSlippage: placeholderSlippage }, void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 600, fontSize: 14 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Interface Settings" }, void 0) }), void 0), chainId && AUTO_ROUTER_SUPPORTED_CHAINS.includes(chainId) && (jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(ThemedText.Black, __assign({ fontWeight: 400, fontSize: 14, color: theme.text2 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Auto Router API" }, void 0) }), void 0), jsxRuntime.jsx(QuestionHelper, { text: jsxRuntime.jsx(macro.Trans, { children: "Use the Uniswap Labs API to get faster quotes." }, void 0) }, void 0)] }, void 0), jsxRuntime.jsx(Toggle, { id: "toggle-optimized-router-button", isActive: !clientSideRouter, toggle: function () { - ReactGA__default["default"].event({ - category: 'Routing', - action: clientSideRouter ? 'enable routing API' : 'disable routing API', - }); - setClientSideRouter(!clientSideRouter); - } }, void 0)] }, void 0)), jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(ThemedText.Black, __assign({ fontWeight: 400, fontSize: 14, color: theme.text2 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Expert Mode" }, void 0) }), void 0), jsxRuntime.jsx(QuestionHelper, { text: jsxRuntime.jsx(macro.Trans, { children: "Allow high price impact trades and skip the confirm screen. Use at your own risk." }, void 0) }, void 0)] }, void 0), jsxRuntime.jsx(Toggle, { id: "toggle-expert-mode-button", isActive: expertMode, toggle: expertMode - ? function () { - toggleExpertMode(); - setShowConfirmation(false); - } - : function () { - toggle(); - setShowConfirmation(true); - } }, void 0)] }, void 0)] }), void 0) }, void 0))] }), void 0)); -} -var templateObject_1$8, templateObject_2$1, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7, templateObject_8, templateObject_9, templateObject_10, templateObject_11, templateObject_12; - -var StyledSwapHeader = styled__default["default"].div(templateObject_1$7 || (templateObject_1$7 = __makeTemplateObject(["\n padding: 1rem 1.25rem 0.5rem 1.25rem;\n width: 100%;\n color: ", ";\n"], ["\n padding: 1rem 1.25rem 0.5rem 1.25rem;\n width: 100%;\n color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.text2; -}); -function SwapHeader(_a) { - var allowedSlippage = _a.allowedSlippage; - return (jsxRuntime.jsx(StyledSwapHeader, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(RowFixed, { children: jsxRuntime.jsx(ThemedText.Black, __assign({ fontWeight: 500, fontSize: 16, style: { marginRight: '8px' } }, { children: jsxRuntime.jsx(macro.Trans, { children: "Swap" }, void 0) }), void 0) }, void 0), jsxRuntime.jsx(RowFixed, { children: jsxRuntime.jsx(SettingsTab, { placeholderSlippage: allowedSlippage }, void 0) }, void 0)] }, void 0) }, void 0)); -} -var templateObject_1$7; - -function parsedQueryString(search) { - if (!search) { - // react-router-dom places search string in the hash - var hash = window.location.hash; - search = hash.substr(hash.indexOf('?')); - } - return search && search.length > 1 ? qs.parse(search, { parseArrays: false, ignoreQueryPrefix: true }) : {}; -} -function useParsedQueryString() { - var search = reactRouterDom.useLocation().search; - return React.useMemo(function () { return parsedQueryString(search); }, [search]); -} - -/*eslint-disable*/ - -var enUS={messages:{"$-":"$-","$<0/>":"$<0/>","${0}":["$",["0"]],"(${0})":["($",["0"],")"],"(View on Explorer)":"(View on Explorer)","(clear all)":"(clear all)","(edit)":"(edit)","- Remove recipient":"- Remove recipient","0 UNI / week":"0 UNI / week","25%":"25%","50%":"50%","75%":"75%","<0/> All Proposals":"<0/> All Proposals","<0/> Votes":"<0/> Votes","<0>Account analytics and accrued fees<1> ↗ ":"<0>Account analytics and accrued fees<1> ↗ ","<0>Current Price:<1><2/><3>{0} per {1}":["<0>Current Price:<1><2/><3>",["0"]," per ",["1"],""],"<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.":"<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.","<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.":"<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.","<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.":"<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.","<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.":"<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.","<0>Unlock voting to prepare for the next proposal.":"<0>Unlock voting to prepare for the next proposal.","<0>🎉 Welcome to team Unicorn :) <1>🎉":"<0>🎉 Welcome to team Unicorn :) <1>🎉","A minimum threshold of 0.25% of the total UNI supply is required to submit proposals":"A minimum threshold of 0.25% of the total UNI supply is required to submit proposals","About":"About","Accept":"Accept","Account":"Account","Active":"Active","Add":"Add","Add <0/> and <1/> to Uniswap V2":"Add <0/> and <1/> to Uniswap V2","Add Delegate +":"Add Delegate +","Add Liquidity":"Add Liquidity","Add V2 Liquidity":"Add V2 Liquidity","Add liquidity.":"Add liquidity.","Add more liquidity":"Add more liquidity","Add {0} to Metamask <0/>":["Add ",["0"]," to Metamask <0/>"],"Add {0}-{1} liquidity":["Add ",["0"],"-",["1"]," liquidity"],"Add {0}/{1} V3 liquidity":["Add ",["0"],"/",["1"]," V3 liquidity"],"Added {0}":["Added ",["0"]],"Address has no available claim":"Address has no available claim","Against":"Against","Allow LP token migration":"Allow LP token migration","Allow high price impact trades and skip the confirm screen. Use at your own risk.":"Allow high price impact trades and skip the confirm screen. Use at your own risk.","Allow the Uniswap Protocol to use your {0}":["Allow the Uniswap Protocol to use your ",["0"]],"Allowed":"Allowed","Amount":"Amount","An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.":"An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.","Approval pending <0/>":"Approval pending <0/>","Approve":"Approve","Approve Token":"Approve Token","Approve {0}":["Approve ",["0"]],"Approve {0} first":["Approve ",["0"]," first"],"Approved":"Approved","Approving":"Approving","Approving {0}":["Approving ",["0"]],"Arbiscan":"Arbiscan","Arbitrum Bridge":"Arbitrum Bridge","Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.":"Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.","Are you sure?":"Are you sure?","As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI":"As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI","At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.":["At least ",["0"]," ",["1"]," and ",["2"]," ",["3"]," will be refunded to your wallet due to selected price range."],"Auto":"Auto","Auto Router API":"Auto Router API","Available to deposit: {0}":["Available to deposit: ",["0"]],"Balance: {0}":["Balance: ",["0"]],"Best for exotic pairs.":"Best for exotic pairs.","Best for most pairs.":"Best for most pairs.","Best for stable pairs.":"Best for stable pairs.","Best for very stable pairs.":"Best for very stable pairs.","Best price route costs ~{formattedGasPriceString} in gas.":["Best price route costs ~",["formattedGasPriceString"]," in gas."],"Blocked address":"Blocked address","Bridge":"Bridge","By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.":"By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.","By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.":"By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.","By connecting a wallet, you agree to Uniswap Labs’ <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.":"By connecting a wallet, you agree to Uniswap Labs’ <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.","Canceled":"Canceled","Change":"Change","Charts":"Charts","Check network status":"Check network status","Check out our v3 LP walkthrough and migration guides.":"Check out our v3 LP walkthrough and migration guides.","Claim":"Claim","Claim <0/> for {0}":["Claim <0/> for ",["0"]],"Claim UNI":"Claim UNI","Claim UNI Token":"Claim UNI Token","Claim UNI reward for {0}":["Claim UNI reward for ",["0"]],"Claim fees":"Claim fees","Claim your UNI tokens":"Claim your UNI tokens","Claimed":"Claimed","Claimed UNI!":"Claimed UNI!","Claimed!":"Claimed!","Claiming":"Claiming","Claiming UNI":"Claiming UNI","Claiming {0} UNI":["Claiming ",["0"]," UNI"],"Clear All":"Clear All","Clear all":"Clear all","Close":"Close","Closed":"Closed","Collect":"Collect","Collect as WETH":"Collect as WETH","Collect fees":"Collect fees","Collect {0}/{1} fees":["Collect ",["0"],"/",["1"]," fees"],"Collected":"Collected","Collecting":"Collecting","Collecting fees":"Collecting fees","Collecting fees will withdraw currently available fees for you.":"Collecting fees will withdraw currently available fees for you.","Confirm":"Confirm","Confirm Supply":"Confirm Supply","Confirm Swap":"Confirm Swap","Confirm swap":"Confirm swap","Confirm this transaction in your wallet":"Confirm this transaction in your wallet","Confirm transaction in wallet":"Confirm transaction in wallet","Connect Wallet":"Connect Wallet","Connect a wallet":"Connect a wallet","Connect to a wallet to find pools":"Connect to a wallet to find pools","Connect to a wallet to view your V2 liquidity.":"Connect to a wallet to view your V2 liquidity.","Connect to a wallet to view your liquidity.":"Connect to a wallet to view your liquidity.","Connect wallet to swap":"Connect wallet to swap","Connected with {name}":["Connected with ",["name"]],"Copied":"Copied","Copy Address":"Copy Address","Create Pool & Supply":"Create Pool & Supply","Create Proposal":"Create Proposal","Create a pair":"Create a pair","Create a pool":"Create a pool","Create an issue on GitHub":"Create an issue on GitHub","Create pool and add {0}/{1} V3 liquidity":["Create pool and add ",["0"],"/",["1"]," V3 liquidity"],"Create pool.":"Create pool.","Create {0}/{1} V3 pool":["Create ",["0"],"/",["1"]," V3 pool"],"Current price":"Current price","Current {0} Price:":["Current ",["0"]," Price:"],"Custom":"Custom","Dark Theme":"Dark Theme","Defeated":"Defeated","Delegate Votes":"Delegate Votes","Delegate voting power to {0}":["Delegate voting power to ",["0"]],"Delegated to:":"Delegated to:","Delegating votes":"Delegating votes","Deposit":"Deposit","Deposit Amounts":"Deposit Amounts","Deposit UNI-V2 LP Tokens":"Deposit UNI-V2 LP Tokens","Deposit liquidity":"Deposit liquidity","Deposit tokens to the {label} network.":["Deposit tokens to the ",["label"]," network."],"Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.":"Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.","Deposited liquidity:":"Deposited liquidity:","Deposited {0} UNI-V2":["Deposited ",["0"]," UNI-V2"],"Depositing Liquidity":"Depositing Liquidity","Description":"Description","Detailed":"Detailed","Details":"Details","Disconnect":"Disconnect","Discord":"Discord","Dismiss":"Dismiss","Docs":"Docs","Don’t see one of your v2 positions? <0>Import it.":"Don’t see one of your v2 positions? <0>Import it.","Earned UNI tokens represent voting shares in Uniswap governance.":"Earned UNI tokens represent voting shares in Uniswap governance.","Edit":"Edit","Efficiency Comparison":"Efficiency Comparison","Enter a percent":"Enter a percent","Enter a recipient":"Enter a recipient","Enter a valid slippage percentage":"Enter a valid slippage percentage","Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.":"Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.","Enter an amount":"Enter an amount","Enter valid list location":"Enter valid list location","Enter valid token address":"Enter valid token address","Enter {0} amount":["Enter ",["0"]," amount"],"Error":"Error","Error connecting":"Error connecting","Error connecting. Try refreshing the page.":"Error connecting. Try refreshing the page.","Error details":"Error details","Error importing list":"Error importing list","Estimate may differ due to your wallet gas settings":"Estimate may differ due to your wallet gas settings","Estimated network fee":"Estimated network fee","Etherscan":"Etherscan","Executed":"Executed","Expanded results from inactive Token Lists":"Expanded results from inactive Token Lists","Expected Output":"Expected Output","Expert Mode":"Expert Mode","Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.":"Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.","Expired":"Expired","Explore Uniswap Analytics.":"Explore Uniswap Analytics.","Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.":["Failed to switch networks from the Uniswap Interface. In order to use Uniswap on ",["0"],", you must change the network in your wallet."],"Fee Tier":"Fee Tier","Fee tier":"Fee tier","Fetching best price...":"Fetching best price...","Fetching best price…":"Fetching best price…","For":"For","For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.":"For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.","From":"From","From (at most)":"From (at most)","Full Range":"Full Range","Full range positions may earn less fees than concentrated positions. Learn more <0>here.":"Full range positions may earn less fees than concentrated positions. Learn more <0>here.","Get support on Discord":"Get support on Discord","Help Center":"Help Center","Hide":"Hide","Hide closed positions":"Hide closed positions","High Price Impact":"High Price Impact","How this app uses APIs":"How this app uses APIs","I understand":"I understand","If you purchase a token from this list, you may not be able to sell it back.":"If you purchase a token from this list, you may not be able to sell it back.","Import":"Import","Import List":"Import List","Import Pool":"Import Pool","Import V2 Pool":"Import V2 Pool","Import at your own risk":"Import at your own risk","In range":"In range","Increase Liquidity":"Increase Liquidity","Initial prices and pool share":"Initial prices and pool share","Initializing...":"Initializing...","Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.":["Input is estimated. You will sell at most <0>",["0"]," ",["1"]," or the transaction will revert."],"Install Metamask":"Install Metamask","Insufficient liquidity for this trade.":"Insufficient liquidity for this trade.","Insufficient {0}":["Insufficient ",["0"]],"Insufficient {0} balance":["Insufficient ",["0"]," balance"],"Interface Settings":"Interface Settings","Invalid pair":"Invalid pair","Invalid pair.":"Invalid pair.","Invalid price input":"Invalid price input","Invalid range selected. The min price must be lower than the max price.":"Invalid range selected. The min price must be lower than the max price.","Invalid recipient":"Invalid recipient","Language":"Language","Learn":"Learn","Learn about providing liquidity":"Learn about providing liquidity","Learn more":"Learn more","Legal & Privacy":"Legal & Privacy","Light Theme":"Light Theme","Liquidity":"Liquidity","Liquidity data not available.":"Liquidity data not available.","Liquidity provider rewards":"Liquidity provider rewards","Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.":"Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.","Lists":"Lists","Loaded":"Loaded","Loading":"Loading","MAX":"MAX","Manage":"Manage","Manage Liquidity in Rewards Pool":"Manage Liquidity in Rewards Pool","Manage Token Lists":"Manage Token Lists","Manage this pool.":"Manage this pool.","Max":"Max","Max Price":"Max Price","Max price":"Max price","Max slippage":"Max slippage","Max:":"Max:","Maximum sent":"Maximum sent","Menu":"Menu","Migrate":"Migrate","Migrate Liquidity to V3":"Migrate Liquidity to V3","Migrate V2 Liquidity":"Migrate V2 Liquidity","Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.":"Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.","Migrate {0}/{1} liquidity to V3":["Migrate ",["0"],"/",["1"]," liquidity to V3"],"Migrating":"Migrating","Min Price":"Min Price","Min price":"Min price","Min:":"Min:","Minimum received":"Minimum received","Missing dependencies":"Missing dependencies","Mock Toggle":"Mock Toggle","More":"More","Network Fee":"Network Fee","Network Warning":"Network Warning","Network fees exceed 50% of the swap amount!":"Network fees exceed 50% of the swap amount!","New Position":"New Position","No V2 Liquidity found.":"No V2 Liquidity found.","No active pools":"No active pools","No data":"No data","No description.":"No description.","No liquidity found.":"No liquidity found.","No pool found.":"No pool found.","No proposals found.":"No proposals found.","No results found.":"No results found.","Not created":"Not created","OFF":"OFF","ON":"ON","ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.":"ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.","Off":"Off","On":"On","Once you are happy with the rate click supply to review.":"Once you are happy with the rate click supply to review.","Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.":["Only UNI votes that were self delegated or delegated to another address before block ",["0"]," are eligible for voting."],"Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.":"Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.","Optimism Gateway":"Optimism Gateway","Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.":"Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.","Optimistic Etherscan":"Optimistic Etherscan","Out of range":"Out of range","Output is estimated.":"Output is estimated.","Output is estimated. If the price changes by more than {0}% your transaction will revert.":["Output is estimated. If the price changes by more than ",["0"],"% your transaction will revert."],"Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.":["Output is estimated. You will receive at least <0>",["0"]," ",["1"]," or the transaction will revert."],"Output will be sent to <0>{0}":["Output will be sent to <0>",["0"],""],"Owner":"Owner","Participating pools":"Participating pools","Pending":"Pending","Please confirm you would like to remove this list by typing REMOVE":"Please confirm you would like to remove this list by typing REMOVE","Please connect to Layer 1 Ethereum":"Please connect to Layer 1 Ethereum","Please connect to a supported network in the dropdown menu or in your wallet.":"Please connect to a supported network in the dropdown menu or in your wallet.","Please type the word \"{confirmWord}\" to enable expert mode.":["Please type the word \"",["confirmWord"],"\" to enable expert mode."],"Polygon Bridge":"Polygon Bridge","Polygonscan":"Polygonscan","Pool":"Pool","Pool Found!":"Pool Found!","Pool Rate":"Pool Rate","Pool rate":"Pool rate","Pool tokens in rewards pool:":"Pool tokens in rewards pool:","Pooled {0}:":["Pooled ",["0"],":"],"Pools Overview":"Pools Overview","Preview":"Preview","Price":"Price","Price Difference:":"Price Difference:","Price Impact":"Price Impact","Price Impact Too High":"Price Impact Too High","Price Updated":"Price Updated","Price impact":"Price impact","Price range":"Price range","Price updated":"Price updated","Price:":"Price:","Prices and pool share":"Prices and pool share","Proposal":"Proposal","Proposal Submitted":"Proposal Submitted","Proposal Title":"Proposal Title","Proposals":"Proposals","Proposals submitted by community members will appear here.":"Proposals submitted by community members will appear here.","Proposed Action":"Proposed Action","Proposer":"Proposer","Protocol Disclaimer":"Protocol Disclaimer","Queued":"Queued","Rates":"Rates","Read more about UNI":"Read more about UNI","Read more about Uniswap governance":"Read more about Uniswap governance","Read more about providing liquidity":"Read more about providing liquidity","Read more about unsupported assets":"Read more about unsupported assets","Recent Transactions":"Recent Transactions","Recent transactions":"Recent transactions","Recipient":"Recipient","Reload the page":"Reload the page","Remove":"Remove","Remove <0/> and <1/>":"Remove <0/> and <1/>","Remove Amount":"Remove Amount","Remove Delegate":"Remove Delegate","Remove Liquidity":"Remove Liquidity","Remove list":"Remove list","Removing {0} {1} and {2} {3}":["Removing ",["0"]," ",["1"]," and ",["2"]," ",["3"]],"Removing {0} {1} and{2} {3}":["Removing ",["0"]," ",["1"]," and",["2"]," ",["3"]],"Request Features":"Request Features","Reset":"Reset","Return":"Return","Review swap":"Review swap","Search by token name or address":"Search by token name or address","Search name or paste address":"Search name or paste address","Select Pair":"Select Pair","Select a network":"Select a network","Select a token":"Select a token","Select a token to find your v2 liquidity.":"Select a token to find your v2 liquidity.","Select an action":"Select an action","Selected Range":"Selected Range","Self":"Self","Self Delegate":"Self Delegate","Set Price Range":"Set Price Range","Set Starting Price":"Set Starting Price","Settings":"Settings","Share of Pool":"Share of Pool","Share of Pool:":"Share of Pool:","Show Portis":"Show Portis","Show closed positions":"Show closed positions","Simple":"Simple","Slippage tolerance":"Slippage tolerance","Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.":"Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.","Something went wrong":"Something went wrong","Something went wrong.":"Something went wrong.","Step 1. Get UNI-V2 Liquidity tokens":"Step 1. Get UNI-V2 Liquidity tokens","Submit new proposal":"Submit new proposal","Submitting Proposal":"Submitting Proposal","Submitting Vote":"Submitting Vote","Succeeded":"Succeeded","Success":"Success","Supply":"Supply","Supplying {0} {1} and {2} {3}":["Supplying ",["0"]," ",["1"]," and ",["2"]," ",["3"]],"Swap":"Swap","Swap <0/> for exactly <1/>":"Swap <0/> for exactly <1/>","Swap Anyway":"Swap Anyway","Swap details":"Swap details","Swap exactly <0/> for <1/>":"Swap exactly <0/> for <1/>","Swap failed: {0}":["Swap failed: ",["0"]],"Swap summary":"Swap summary","Swapping {0} {1} for {2} {3}":["Swapping ",["0"]," ",["1"]," for ",["2"]," ",["3"]],"Take a 10 minute survey to help us improve your experience in the Uniswap app.":"Take a 10 minute survey to help us improve your experience in the Uniswap app.","Tell us what you think ↗":"Tell us what you think ↗","Thanks for being part of the Uniswap community <0/>":"Thanks for being part of the Uniswap community <0/>","The % you will earn in fees.":"The % you will earn in fees.","The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.":"The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.","The app fetches blockchain data from The Graph’s hosted service.":"The app fetches blockchain data from The Graph’s hosted service.","The app fetches on-chain data and constructs contract calls with an Infura API.":"The app fetches on-chain data and constructs contract calls with an Infura API.","The app fetches the optimal trade route from a Uniswap Labs server.":"The app fetches the optimal trade route from a Uniswap Labs server.","The app logs anonymized usage statistics in order to improve over time.":"The app logs anonymized usage statistics in order to improve over time.","The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.":"The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.","The cost of sending this transaction is more than half of the value of the input amount.":"The cost of sending this transaction is more than half of the value of the input amount.","The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.":"The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.","The estimated difference between the USD values of input and output amounts.":"The estimated difference between the USD values of input and output amounts.","The input token cannot be transferred. There may be an issue with the input token.":"The input token cannot be transferred. There may be an issue with the input token.","The market price is outside your specified price range. Single-asset deposit only.":"The market price is outside your specified price range. Single-asset deposit only.","The most recent block number on this network. Prices update on every block.":"The most recent block number on this network. Prices update on every block.","The output token cannot be transferred. There may be an issue with the output token.":"The output token cannot be transferred. There may be an issue with the output token.","The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.":"The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.","The price of this pool is outside of your selected range. Your position is not currently earning fees.":"The price of this pool is outside of your selected range. Your position is not currently earning fees.","The price of this pool is within your selected range. Your position is currently earning fees.":"The price of this pool is within your selected range. Your position is currently earning fees.","The ratio of tokens you add will set the price of this pool.":"The ratio of tokens you add will set the price of this pool.","The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.":"The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.","There is no liquidity data.":"There is no liquidity data.","This app uses the following third-party APIs:":"This app uses the following third-party APIs:","This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.":"This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.","This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.":"This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.","This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.":"This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.","This token is not supported in the Uniswap Labs app":"This token is not supported in the Uniswap Labs app","This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the":["This tool will safely migrate your ",["0"]," liquidity to V3. The process is completely trustless thanks to the"],"This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.":"This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.","This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.":"This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.","Tip: Custom tokens are stored locally in your browser":"Tip: Custom tokens are stored locally in your browser","To":"To","To (at least)":"To (at least)","Token not supported":"Token not supported","Tokens":"Tokens","Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.":"Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.","Top pools":"Top pools","Total deposited":"Total deposited","Total deposits":"Total deposits","Trade Route":"Trade Route","Trading":"Trading","Transaction Settings":"Transaction Settings","Transaction Submitted":"Transaction Submitted","Transaction completed in":"Transaction completed in","Transaction deadline":"Transaction deadline","Transaction pending":"Transaction pending","Transaction rejected.":"Transaction rejected.","Transaction submitted":"Transaction submitted","Transfer Token":"Transfer Token","Try Again":"Try Again","Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.":"Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.","Turn On Expert Mode":"Turn On Expert Mode","UNI has arrived":"UNI has arrived","UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.":"UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.","UNI {0}/{1} Burned":["UNI ",["0"],"/",["1"]," Burned"],"UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.":["UNI-V2 LP tokens are required. Once you've added liquidity to the ",["0"],"-",["1"]," pool you can stake your liquidity tokens on this page."],"UNI-V2 {0}-{1}":["UNI-V2 ",["0"],"-",["1"]],"Unclaimed UNI":"Unclaimed UNI","Unclaimed fees":"Unclaimed fees","Undetermined":"Undetermined","Unexpected error. Could not estimate gas for the swap.":"Unexpected error. Could not estimate gas for the swap.","Unexpected issue with estimating the gas. Please try again.":"Unexpected issue with estimating the gas. Please try again.","Uniswap Governance":"Uniswap Governance","Uniswap Labs' Terms of Service":"Uniswap Labs' Terms of Service","Uniswap available in: <0>{0}":["Uniswap available in: <0>",["0"],""],"Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.":"Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.","Uniswap liquidity mining":"Uniswap liquidity mining","Uniswap migration contract↗":"Uniswap migration contract↗","Unknown Source":"Unknown Source","Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.":["Unknown error",["0"],". Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3."],"Unlock Votes":"Unlock Votes","Unlock Voting":"Unlock Voting","Unlocking Votes":"Unlocking Votes","Unsupported Asset":"Unsupported Asset","Unsupported Assets":"Unsupported Assets","Unsupported network–switch to another to trade.":"Unsupported network–switch to another to trade.","Untitled":"Untitled","Unwrap":"Unwrap","Unwrap <0/> to {0}":["Unwrap <0/> to ",["0"]],"Update Delegation":"Update Delegation","Update list":"Update list","Use the Uniswap Labs API to get faster quotes.":"Use the Uniswap Labs API to get faster quotes.","User":"User","V2 is not available on Layer 2. Switch to Layer 1 Ethereum.":"V2 is not available on Layer 2. Switch to Layer 1 Ethereum.","V2 liquidity":"V2 liquidity","V3 {0} Price:":["V3 ",["0"]," Price:"],"View accrued fees and analytics<0>↗":"View accrued fees and analytics<0>↗","View list":"View list","View on Etherscan":"View on Etherscan","View on Explorer":"View on Explorer","View transaction on Explorer":"View transaction on Explorer","Vote":"Vote","Vote Against":"Vote Against","Vote For":"Vote For","Vote against proposal {proposalId}":["Vote against proposal ",["proposalId"]],"Vote against proposal {proposalKey}":["Vote against proposal ",["proposalKey"]],"Vote against proposal {proposalKey} with reason \"{0}\"":["Vote against proposal ",["proposalKey"]," with reason \"",["0"],"\""],"Vote for proposal {proposalId}":["Vote for proposal ",["proposalId"]],"Vote for proposal {proposalKey}":["Vote for proposal ",["proposalKey"]],"Vote for proposal {proposalKey} with reason \"{0}\"":["Vote for proposal ",["proposalKey"]," with reason \"",["0"],"\""],"Vote to abstain on proposal {proposalId}":["Vote to abstain on proposal ",["proposalId"]],"Vote to abstain on proposal {proposalKey}":["Vote to abstain on proposal ",["proposalKey"]],"Vote to abstain on proposal {proposalKey} with reason \"{0}\"":["Vote to abstain on proposal ",["proposalKey"]," with reason \"",["0"],"\""],"Voting ended {0}":["Voting ended ",["0"]],"Voting ends approximately {0}":["Voting ends approximately ",["0"]],"Voting starts approximately {0}":["Voting starts approximately ",["0"]],"Waiting For Confirmation":"Waiting For Confirmation","Wallet Address or ENS name":"Wallet Address or ENS name","Weekly Rewards":"Weekly Rewards","Welcome to team Unicorn :)":"Welcome to team Unicorn :)","When you claim without withdrawing your liquidity remains in the mining pool.":"When you claim without withdrawing your liquidity remains in the mining pool.","When you withdraw, the contract will automagically claim UNI on your behalf!":"When you withdraw, the contract will automagically claim UNI on your behalf!","When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.":"When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.","Withdraw":"Withdraw","Withdraw & Claim":"Withdraw & Claim","Withdraw deposited liquidity":"Withdraw deposited liquidity","Withdrawing {0} UNI-V2":["Withdrawing ",["0"]," UNI-V2"],"Withdrew UNI-V2!":"Withdrew UNI-V2!","Wrap":"Wrap","Wrap <0/> to {0}":["Wrap <0/> to ",["0"]],"Wrong Network":"Wrong Network","You already have an active or pending proposal":"You already have an active or pending proposal","You are creating a pool":"You are creating a pool","You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.":["You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current ",["0"]," price."],"You are the first liquidity provider.":"You are the first liquidity provider.","You can either vote on each proposal yourself or delegate your votes to a third party.":"You can either vote on each proposal yourself or delegate your votes to a third party.","You can now trade {0}":["You can now trade ",["0"]],"You don't have enough votes to submit a proposal":"You don't have enough votes to submit a proposal","You don’t have liquidity in this pool yet.":"You don’t have liquidity in this pool yet.","You may have lost your network connection, or {label} might be down right now.":["You may have lost your network connection, or ",["label"]," might be down right now."],"You may have lost your network connection.":"You may have lost your network connection.","You might consider waiting until the network fees go down to complete this transaction.":"You might consider waiting until the network fees go down to complete this transaction.","You must connect an account.":"You must connect an account.","You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.":["You must give the Uniswap smart contracts permission to use your ",["0"],". You only have to do this once per token."],"You must have {formattedProposalThreshold} votes to submit a proposal":["You must have ",["formattedProposalThreshold"]," votes to submit a proposal"],"You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.":"You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.","You will also collect fees earned from this position.":"You will also collect fees earned from this position.","You will receive":"You will receive","You will receive at least {0} {1} or the transaction will revert.":["You will receive at least ",["0"]," ",["1"]," or the transaction will revert."],"You will send at most {0} {1} or the transaction will revert.":["You will send at most ",["0"]," ",["1"]," or the transaction will revert."],"Your V2 liquidity":"Your V2 liquidity","Your active V3 liquidity positions will appear here.":"Your active V3 liquidity positions will appear here.","Your liquidity deposits":"Your liquidity deposits","Your pool share:":"Your pool share:","Your position":"Your position","Your position has 0 liquidity, and is not earning fees.":"Your position has 0 liquidity, and is not earning fees.","Your position will appear here.":"Your position will appear here.","Your position will be 100% composed of {0} at this price":["Your position will be 100% composed of ",["0"]," at this price"],"Your position will be 100% {0} at this price.":["Your position will be 100% ",["0"]," at this price."],"Your position will not earn fees or be used in trades until the market price moves into your range.":"Your position will not earn fees or be used in trades until the market price moves into your range.","Your positions":"Your positions","Your rate":"Your rate","Your total pool tokens:":"Your total pool tokens:","Your transaction cost will be much higher as it includes the gas to create the pool.":"Your transaction cost will be much higher as it includes the gas to create the pool.","Your transaction may be frontrun":"Your transaction may be frontrun","Your transaction may fail":"Your transaction may fail","Your transaction will revert if it has been pending for longer than this period of time.":"Your transaction will revert if it has been pending for longer than this period of time.","Your transaction will revert if it is pending for more than this period of time.":"Your transaction will revert if it is pending for more than this period of time.","Your transaction will revert if the price changes unfavorably by more than this percentage.":"Your transaction will revert if the price changes unfavorably by more than this percentage.","Your transactions will appear here...":"Your transactions will appear here...","Your unclaimed UNI":"Your unclaimed UNI","after slippage":"after slippage","confirm":"confirm","for {0}":["for ",["0"]],"gwei":"gwei","has socks emoji":"has socks emoji","here.":"here.","https:// or ipfs:// or ENS name":"https:// or ipfs:// or ENS name","minutes":"minutes","via {0}":["via ",["0"]],"via {0} token list":["via ",["0"]," token list"],"{0, plural, one {Import token} other {Import tokens}}":[["0","plural",{one:"Import token",other:"Import tokens"}]],"{0}":[["0"]],"{0} %":[["0"]," %"],"{0} <0/> per <1/>":[["0"]," <0/> per <1/>"],"{0} Custom Tokens":[["0"]," Custom Tokens"],"{0} Deposited":[["0"]," Deposited"],"{0} ETH":[["0"]," ETH"],"{0} Fees Earned:":[["0"]," Fees Earned:"],"{0} Pending":[["0"]," Pending"],"{0} UNI":[["0"]," UNI"],"{0} UNI / week":[["0"]," UNI / week"],"{0} UNI-V2":[["0"]," UNI-V2"],"{0} UNI-V2 LP tokens available":[["0"]," UNI-V2 LP tokens available"],"{0} Votes":[["0"]," Votes"],"{0} per {1}":[["0"]," per ",["1"]],"{0} tokens":[["0"]," tokens"],"{0} {1} Price:":[["0"]," ",["1"]," Price:"],"{0} {nativeCurrencySymbol}":[["0"]," ",["nativeCurrencySymbol"]],"{0} • Added by user":[["0"]," • Added by user"],"{0}%":[["0"],"%"],"{0}% fee tier":[["0"],"% fee tier"],"{0}% pool":[["0"],"% pool"],"{0}% select":[["0"],"% select"],"{0}-{1} Liquidity Mining":[["0"],"-",["1"]," Liquidity Mining"],"{0}/{1} LP NFT":[["0"],"/",["1"]," LP NFT"],"{0}/{1} LP Tokens":[["0"],"/",["1"]," LP Tokens"],"{SOCKS_AMOUNT} UNI":[["SOCKS_AMOUNT"]," UNI"],"{USER_AMOUNT} UNI":[["USER_AMOUNT"]," UNI"],"{activeTokensOnThisChain} tokens":[["activeTokensOnThisChain"]," tokens"],"{integrator} fee":[["integrator"]," fee"],"{label} token bridge":[["label"]," token bridge"],"{min}m {sec}s":[["min"],"m ",["sec"],"s"],"{percentForSlider}%":[["percentForSlider"],"%"],"{sec}s":[["sec"],"s"],"{tokenB} per {tokenA}":[["tokenB"]," per ",["tokenA"]],"← Back to Pools Overview":"← Back to Pools Overview"}}; - -var enUS$1 = /*#__PURE__*/Object.freeze(/*#__PURE__*/_mergeNamespaces({ - __proto__: null, - 'default': enUS -}, [enUS])); - -var SUPPORTED_LOCALES = [ - // order as they appear in the language dropdown - 'en-US', - 'af-ZA', - 'ar-SA', - 'ca-ES', - 'cs-CZ', - 'da-DK', - 'de-DE', - 'el-GR', - 'es-ES', - 'fi-FI', - 'fr-FR', - 'he-IL', - 'hu-HU', - 'id-ID', - 'it-IT', - 'ja-JP', - 'ko-KR', - 'nl-NL', - 'no-NO', - 'pl-PL', - 'pt-BR', - 'pt-PT', - 'ro-RO', - 'ru-RU', - 'sr-SP', - 'sv-SE', - 'sw-TZ', - 'tr-TR', - 'uk-UA', - 'vi-VN', - 'zh-CN', - 'zh-TW', -]; -var DEFAULT_LOCALE = 'en-US'; -var DEFAULT_CATALOG = enUS$1; -var LOCALE_LABEL = { - 'af-ZA': 'Afrikaans', - 'ar-SA': 'العربية', - 'ca-ES': 'Català', - 'cs-CZ': 'čeština', - 'da-DK': 'dansk', - 'de-DE': 'Deutsch', - 'el-GR': 'ελληνικά', - 'en-US': 'English', - 'es-ES': 'Español', - 'fi-FI': 'suomi', - 'fr-FR': 'français', - 'he-IL': 'עִברִית', - 'hu-HU': 'Magyar', - 'id-ID': 'bahasa Indonesia', - 'it-IT': 'Italiano', - 'ja-JP': '日本語', - 'ko-KR': '한국어', - 'nl-NL': 'Nederlands', - 'no-NO': 'norsk', - 'pl-PL': 'Polskie', - 'pt-BR': 'português', - 'pt-PT': 'português', - 'ro-RO': 'Română', - 'ru-RU': 'русский', - 'sr-SP': 'Српски', - 'sv-SE': 'svenska', - 'sw-TZ': 'Kiswahili', - 'tr-TR': 'Türkçe', - 'uk-UA': 'Український', - 'vi-VN': 'Tiếng Việt', - 'zh-CN': '简体中文', - 'zh-TW': '繁体中文', - pseudo: 'ƥƨèúδô', -}; - -var Field$3; -(function (Field) { - Field["LIQUIDITY_PERCENT"] = "LIQUIDITY_PERCENT"; - Field["LIQUIDITY"] = "LIQUIDITY"; - Field["CURRENCY_A"] = "CURRENCY_A"; - Field["CURRENCY_B"] = "CURRENCY_B"; -})(Field$3 || (Field$3 = {})); -var typeInput$3 = toolkit.createAction('burn/typeInputBurn'); - -var initialState$7 = { - independentField: Field$3.LIQUIDITY_PERCENT, - typedValue: '0', -}; -var burn = toolkit.createReducer(initialState$7, function (builder) { - return builder.addCase(typeInput$3, function (state, _a) { - var _b = _a.payload, field = _b.field, typedValue = _b.typedValue; - return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); - }); -}); - -var selectPercent = toolkit.createAction('burnV3/selectBurnPercent'); - -var initialState$6 = { - percent: 0, -}; -var burnV3 = toolkit.createReducer(initialState$6, function (builder) { - return builder.addCase(selectPercent, function (state, _a) { - var percent = _a.payload.percent; - return __assign(__assign({}, state), { percent: percent }); - }); -}); - -var _a$5; -// List of supported subgraphs. Note that the app currently only support one active subgraph at a time -var CHAIN_SUBGRAPH_URL = (_a$5 = {}, - _a$5[SupportedChainId.MAINNET] = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3', - _a$5[SupportedChainId.RINKEBY] = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3', - _a$5[SupportedChainId.ARBITRUM_ONE] = 'https://api.thegraph.com/subgraphs/name/ianlapham/arbitrum-minimal', - _a$5[SupportedChainId.OPTIMISM] = 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-optimism-dev', - _a$5[SupportedChainId.POLYGON] = 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-v3-polygon', - _a$5); -var api$1 = react.createApi({ - reducerPath: 'dataApi', - baseQuery: graphqlRequestBaseQuery(), - endpoints: function (builder) { return ({ - allV3Ticks: builder.query({ - query: function (_a) { - var poolAddress = _a.poolAddress, _b = _a.skip, skip = _b === void 0 ? 0 : _b; - return ({ - document: graphqlRequest.gql(templateObject_1$6 || (templateObject_1$6 = __makeTemplateObject(["\n query allV3Ticks($poolAddress: String!, $skip: Int!) {\n ticks(first: 1000, skip: $skip, where: { poolAddress: $poolAddress }, orderBy: tickIdx) {\n tick: tickIdx\n liquidityNet\n price0\n price1\n }\n }\n "], ["\n query allV3Ticks($poolAddress: String!, $skip: Int!) {\n ticks(first: 1000, skip: $skip, where: { poolAddress: $poolAddress }, orderBy: tickIdx) {\n tick: tickIdx\n liquidityNet\n price0\n price1\n }\n }\n "]))), - variables: { - poolAddress: poolAddress, - skip: skip, - }, - }); - }, - }), - feeTierDistribution: builder.query({ - query: function (_a) { - var token0 = _a.token0, token1 = _a.token1; - return ({ - document: graphqlRequest.gql(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n query feeTierDistribution($token0: String!, $token1: String!) {\n _meta {\n block {\n number\n }\n }\n asToken0: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token0, token1: $token1 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n asToken1: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token1, token1: $token0 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n }\n "], ["\n query feeTierDistribution($token0: String!, $token1: String!) {\n _meta {\n block {\n number\n }\n }\n asToken0: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token0, token1: $token1 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n asToken1: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token1, token1: $token0 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n }\n "]))), - variables: { - token0: token0, - token1: token1, - }, - }); - }, - }), - }); }, -}); -// Graphql query client wrapper that builds a dynamic url based on chain id -function graphqlRequestBaseQuery() { - var _this = this; - return function (_a, _b) { - var document = _a.document, variables = _a.variables; - var getState = _b.getState; - return __awaiter(_this, void 0, void 0, function () { - var chainId, subgraphUrl, error_1, name_1, message, stack, request, response; - var _c; - return __generator(this, function (_d) { - switch (_d.label) { - case 0: - _d.trys.push([0, 2, , 3]); - chainId = getState().application.chainId; - subgraphUrl = chainId ? CHAIN_SUBGRAPH_URL[chainId] : undefined; - if (!subgraphUrl) { - return [2 /*return*/, { - error: { - name: 'UnsupportedChainId', - message: "Subgraph queries against ChainId " + chainId + " are not supported.", - stack: '', - }, - }]; - } - _c = {}; - return [4 /*yield*/, new graphqlRequest.GraphQLClient(subgraphUrl).request(document, variables)]; - case 1: return [2 /*return*/, (_c.data = _d.sent(), _c.meta = {}, _c)]; - case 2: - error_1 = _d.sent(); - if (error_1 instanceof graphqlRequest.ClientError) { - name_1 = error_1.name, message = error_1.message, stack = error_1.stack, request = error_1.request, response = error_1.response; - return [2 /*return*/, { error: { name: name_1, message: message, stack: stack }, meta: { request: request, response: response } }]; - } - throw error_1; - case 3: return [2 /*return*/]; - } - }); - }); - }; -} -var templateObject_1$6, templateObject_2; - -// fired once when the app reloads but before the app renders -// allows any updates to be applied to store data loaded from localStorage -var updateVersion = toolkit.createAction('global/updateVersion'); - -var NEW_LIST_STATE = { - error: null, - current: null, - loadingRequestId: null, - pendingUpdate: null, -}; -var initialState$5 = { - lastInitializedDefaultListOfLists: DEFAULT_LIST_OF_LISTS, - byUrl: __assign({}, DEFAULT_LIST_OF_LISTS.reduce(function (memo, listUrl) { - memo[listUrl] = NEW_LIST_STATE; - return memo; - }, {})), - activeListUrls: DEFAULT_ACTIVE_LIST_URLS, -}; -var lists = toolkit.createReducer(initialState$5, function (builder) { - return builder - .addCase(fetchTokenList.pending, function (state, _a) { - var _b, _c, _d, _e; - var _f = _a.payload, requestId = _f.requestId, url = _f.url; - var current = (_c = (_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.current) !== null && _c !== void 0 ? _c : null; - var pendingUpdate = (_e = (_d = state.byUrl[url]) === null || _d === void 0 ? void 0 : _d.pendingUpdate) !== null && _e !== void 0 ? _e : null; - state.byUrl[url] = { - current: current, - pendingUpdate: pendingUpdate, - loadingRequestId: requestId, - error: null, - }; - }) - .addCase(fetchTokenList.fulfilled, function (state, _a) { - var _b, _c, _d; - var _e = _a.payload, requestId = _e.requestId, tokenList = _e.tokenList, url = _e.url; - var current = (_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.current; - var loadingRequestId = (_c = state.byUrl[url]) === null || _c === void 0 ? void 0 : _c.loadingRequestId; - // no-op if update does nothing - if (current) { - var upgradeType = tokenLists.getVersionUpgrade(current.version, tokenList.version); - if (upgradeType === tokenLists.VersionUpgrade.NONE) - return; - if (loadingRequestId === null || loadingRequestId === requestId) { - state.byUrl[url] = { - current: current, - pendingUpdate: tokenList, - loadingRequestId: null, - error: null, - }; - } - } - else { - // activate if on default active - if (DEFAULT_ACTIVE_LIST_URLS.includes(url)) { - (_d = state.activeListUrls) === null || _d === void 0 ? void 0 : _d.push(url); - } - state.byUrl[url] = { - current: tokenList, - pendingUpdate: null, - loadingRequestId: null, - error: null, - }; - } - }) - .addCase(fetchTokenList.rejected, function (state, _a) { - var _b; - var _c = _a.payload, url = _c.url, requestId = _c.requestId, errorMessage = _c.errorMessage; - if (((_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.loadingRequestId) !== requestId) { - // no-op since it's not the latest request - return; - } - state.byUrl[url] = { - current: state.byUrl[url].current ? state.byUrl[url].current : null, - pendingUpdate: null, - loadingRequestId: null, - error: errorMessage, - }; - }) - .addCase(addList, function (state, _a) { - var url = _a.payload; - if (!state.byUrl[url]) { - state.byUrl[url] = NEW_LIST_STATE; - } - }) - .addCase(removeList, function (state, _a) { - var url = _a.payload; - if (state.byUrl[url]) { - delete state.byUrl[url]; - } - // remove list from active urls if needed - if (state.activeListUrls && state.activeListUrls.includes(url)) { - state.activeListUrls = state.activeListUrls.filter(function (u) { return u !== url; }); - } - }) - .addCase(enableList, function (state, _a) { - var url = _a.payload; - if (!state.byUrl[url]) { - state.byUrl[url] = NEW_LIST_STATE; - } - if (state.activeListUrls && !state.activeListUrls.includes(url)) { - state.activeListUrls.push(url); - } - if (!state.activeListUrls) { - state.activeListUrls = [url]; - } - }) - .addCase(disableList, function (state, _a) { - var url = _a.payload; - if (state.activeListUrls && state.activeListUrls.includes(url)) { - state.activeListUrls = state.activeListUrls.filter(function (u) { return u !== url; }); - } - }) - .addCase(acceptListUpdate, function (state, _a) { - var _b; - var url = _a.payload; - if (!((_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.pendingUpdate)) { - throw new Error('accept list update called without pending update'); - } - state.byUrl[url] = __assign(__assign({}, state.byUrl[url]), { current: state.byUrl[url].pendingUpdate, pendingUpdate: null }); - }) - .addCase(updateVersion, function (state) { - // state loaded from localStorage, but new lists have never been initialized - if (!state.lastInitializedDefaultListOfLists) { - state.byUrl = initialState$5.byUrl; - state.activeListUrls = initialState$5.activeListUrls; - } - else if (state.lastInitializedDefaultListOfLists) { - var lastInitializedSet_1 = state.lastInitializedDefaultListOfLists.reduce(function (s, l) { return s.add(l); }, new Set()); - var newListOfListsSet_1 = DEFAULT_LIST_OF_LISTS.reduce(function (s, l) { return s.add(l); }, new Set()); - DEFAULT_LIST_OF_LISTS.forEach(function (listUrl) { - if (!lastInitializedSet_1.has(listUrl)) { - state.byUrl[listUrl] = NEW_LIST_STATE; - } - }); - state.lastInitializedDefaultListOfLists.forEach(function (listUrl) { - if (!newListOfListsSet_1.has(listUrl)) { - delete state.byUrl[listUrl]; - } - }); - } - state.lastInitializedDefaultListOfLists = DEFAULT_LIST_OF_LISTS; - // if no active lists, activate defaults - if (!state.activeListUrls) { - state.activeListUrls = DEFAULT_ACTIVE_LIST_URLS; - // for each list on default list, initialize if needed - DEFAULT_ACTIVE_LIST_URLS.map(function (listUrl) { - if (!state.byUrl[listUrl]) { - state.byUrl[listUrl] = NEW_LIST_STATE; - } - return true; - }); - } - }); -}); - -/** - * Converts a filter to the corresponding string key - * @param filter the filter to convert - */ -function filterToKey(filter) { - var _a, _b, _c, _d; - return ((_a = filter.address) !== null && _a !== void 0 ? _a : '') + ":" + ((_d = (_c = (_b = filter.topics) === null || _b === void 0 ? void 0 : _b.map(function (topic) { return (topic ? (Array.isArray(topic) ? topic.join(';') : topic) : '\0'); })) === null || _c === void 0 ? void 0 : _c.join('-')) !== null && _d !== void 0 ? _d : ''); -} -/** - * Convert a filter key to the corresponding filter - * @param key key to convert - */ -function keyToFilter(key) { - var pcs = key.split(':'); - var address = pcs[0]; - var topics = pcs[1].split('-').map(function (topic) { - if (topic === '\0') - return null; - var parts = topic.split(';'); - if (parts.length === 1) - return parts[0]; - return parts; - }); - return { - address: address.length === 0 ? undefined : address, - topics: topics, - }; -} - -var _a$4; -var slice = toolkit.createSlice({ - name: 'logs', - initialState: {}, - reducers: { - addListener: function (state, _a) { - var _b = _a.payload, chainId = _b.chainId, filter = _b.filter; - if (!state[chainId]) - state[chainId] = {}; - var key = filterToKey(filter); - if (!state[chainId][key]) - state[chainId][key] = { - listeners: 1, - }; - else - state[chainId][key].listeners++; - }, - fetchingLogs: function (state, _a) { - var e_1, _b; - var _c = _a.payload, chainId = _c.chainId, filters = _c.filters, blockNumber = _c.blockNumber; - if (!state[chainId]) - return; - try { - for (var filters_1 = __values(filters), filters_1_1 = filters_1.next(); !filters_1_1.done; filters_1_1 = filters_1.next()) { - var filter = filters_1_1.value; - var key = filterToKey(filter); - if (!state[chainId][key]) - continue; - state[chainId][key].fetchingBlockNumber = blockNumber; - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (filters_1_1 && !filters_1_1.done && (_b = filters_1.return)) _b.call(filters_1); - } - finally { if (e_1) throw e_1.error; } - } - }, - fetchedLogs: function (state, _a) { - var _b = _a.payload, chainId = _b.chainId, filter = _b.filter, results = _b.results; - if (!state[chainId]) - return; - var key = filterToKey(filter); - var fetchState = state[chainId][key]; - if (!fetchState || (fetchState.results && fetchState.results.blockNumber > results.blockNumber)) - return; - fetchState.results = results; - }, - fetchedLogsError: function (state, _a) { - var _b = _a.payload, chainId = _b.chainId, filter = _b.filter, blockNumber = _b.blockNumber; - if (!state[chainId]) - return; - var key = filterToKey(filter); - var fetchState = state[chainId][key]; - if (!fetchState || (fetchState.results && fetchState.results.blockNumber > blockNumber)) - return; - fetchState.results = { - blockNumber: blockNumber, - error: true, - }; - }, - removeListener: function (state, _a) { - var _b = _a.payload, chainId = _b.chainId, filter = _b.filter; - if (!state[chainId]) - return; - var key = filterToKey(filter); - if (!state[chainId][key]) - return; - state[chainId][key].listeners--; - }, - }, -}); -var logs = slice.reducer; -(_a$4 = slice.actions, _a$4.addListener); _a$4.removeListener; var fetchedLogs = _a$4.fetchedLogs, fetchedLogsError = _a$4.fetchedLogsError, fetchingLogs = _a$4.fetchingLogs; - -var Field$2; -(function (Field) { - Field["CURRENCY_A"] = "CURRENCY_A"; - Field["CURRENCY_B"] = "CURRENCY_B"; -})(Field$2 || (Field$2 = {})); -var typeInput$2 = toolkit.createAction('mint/typeInputMint'); -var resetMintState$1 = toolkit.createAction('mint/resetMintState'); - -var initialState$4 = { - independentField: Field$2.CURRENCY_A, - typedValue: '', - otherTypedValue: '', - startPriceTypedValue: '', - leftRangeTypedValue: '', - rightRangeTypedValue: '', -}; -var mint = toolkit.createReducer(initialState$4, function (builder) { - return builder - .addCase(resetMintState$1, function () { return initialState$4; }) - .addCase(typeInput$2, function (state, _a) { - var _b = _a.payload, field = _b.field, typedValue = _b.typedValue, noLiquidity = _b.noLiquidity; - if (noLiquidity) { - // they're typing into the field they've last typed in - if (field === state.independentField) { - return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); - } - // they're typing into a new field, store the other value - else { - return __assign(__assign({}, state), { independentField: field, typedValue: typedValue, otherTypedValue: state.typedValue }); - } - } - else { - return __assign(__assign({}, state), { independentField: field, typedValue: typedValue, otherTypedValue: '' }); - } - }); -}); - -var Field$1; -(function (Field) { - Field["CURRENCY_A"] = "CURRENCY_A"; - Field["CURRENCY_B"] = "CURRENCY_B"; -})(Field$1 || (Field$1 = {})); -var Bound; -(function (Bound) { - Bound["LOWER"] = "LOWER"; - Bound["UPPER"] = "UPPER"; -})(Bound || (Bound = {})); -var typeInput$1 = toolkit.createAction('mintV3/typeInputMint'); -var typeStartPriceInput = toolkit.createAction('mintV3/typeStartPriceInput'); -var typeLeftRangeInput = toolkit.createAction('mintV3/typeLeftRangeInput'); -var typeRightRangeInput = toolkit.createAction('mintV3/typeRightRangeInput'); -var resetMintState = toolkit.createAction('mintV3/resetMintState'); -var setFullRange = toolkit.createAction('mintV3/setFullRange'); - -var initialState$3 = { - independentField: Field$1.CURRENCY_A, - typedValue: '', - startPriceTypedValue: '', - leftRangeTypedValue: '', - rightRangeTypedValue: '', -}; -var mintV3 = toolkit.createReducer(initialState$3, function (builder) { - return builder - .addCase(resetMintState, function () { return initialState$3; }) - .addCase(setFullRange, function (state) { - return __assign(__assign({}, state), { leftRangeTypedValue: true, rightRangeTypedValue: true }); - }) - .addCase(typeStartPriceInput, function (state, _a) { - var typedValue = _a.payload.typedValue; - return __assign(__assign({}, state), { startPriceTypedValue: typedValue }); - }) - .addCase(typeLeftRangeInput, function (state, _a) { - var typedValue = _a.payload.typedValue; - return __assign(__assign({}, state), { leftRangeTypedValue: typedValue }); - }) - .addCase(typeRightRangeInput, function (state, _a) { - var typedValue = _a.payload.typedValue; - return __assign(__assign({}, state), { rightRangeTypedValue: typedValue }); - }) - .addCase(typeInput$1, function (state, _a) { - var _b = _a.payload, field = _b.field, typedValue = _b.typedValue, noLiquidity = _b.noLiquidity; - if (noLiquidity) { - // they're typing into the field they've last typed in - if (field === state.independentField) { - return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); - } - // they're typing into a new field, store the other value - else { - return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); - } - } - else { - return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); - } - }); -}); - -var protocols = [routerSdk.Protocol.V2, routerSdk.Protocol.V3]; -var DEFAULT_QUERY_PARAMS = { - protocols: protocols.map(function (p) { return p.toLowerCase(); }).join(','), - // example other params - // forceCrossProtocol: 'true', - // minSplits: '5', -}; -function getClientSideQuote(_a) { - var tokenInAddress = _a.tokenInAddress, tokenInChainId = _a.tokenInChainId, tokenInDecimals = _a.tokenInDecimals, tokenInSymbol = _a.tokenInSymbol, tokenOutAddress = _a.tokenOutAddress, tokenOutChainId = _a.tokenOutChainId, tokenOutDecimals = _a.tokenOutDecimals, tokenOutSymbol = _a.tokenOutSymbol, amount = _a.amount, type = _a.type; - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, Promise.resolve().then(function () { return index; })]; - case 1: return [2 /*return*/, (_b.sent()).getQuote({ - type: type, - chainId: tokenInChainId, - tokenIn: { - address: tokenInAddress, - chainId: tokenInChainId, - decimals: tokenInDecimals, - symbol: tokenInSymbol, - }, - tokenOut: { - address: tokenOutAddress, - chainId: tokenOutChainId, - decimals: tokenOutDecimals, - symbol: tokenOutSymbol, - }, - amount: amount, - }, { protocols: protocols })]; - } - }); - }); -} -var routingApi = react.createApi({ - reducerPath: 'routingApi', - baseQuery: react.fetchBaseQuery({ - baseUrl: 'https://api.uniswap.org/v1/', - }), - endpoints: function (build) { return ({ - getQuote: build.query({ - queryFn: function (args, _api, _extraOptions, fetch) { - return __awaiter(this, void 0, void 0, function () { - var tokenInAddress, tokenInChainId, tokenOutAddress, tokenOutChainId, amount, useClientSideRouter, type, result, query, e_1; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - tokenInAddress = args.tokenInAddress, tokenInChainId = args.tokenInChainId, tokenOutAddress = args.tokenOutAddress, tokenOutChainId = args.tokenOutChainId, amount = args.amount, useClientSideRouter = args.useClientSideRouter, type = args.type; - _a.label = 1; - case 1: - _a.trys.push([1, 6, , 7]); - if (!useClientSideRouter) return [3 /*break*/, 3]; - return [4 /*yield*/, getClientSideQuote(args)]; - case 2: - result = _a.sent(); - return [3 /*break*/, 5]; - case 3: - query = qs__default["default"].stringify(__assign(__assign({}, DEFAULT_QUERY_PARAMS), { tokenInAddress: tokenInAddress, tokenInChainId: tokenInChainId, tokenOutAddress: tokenOutAddress, tokenOutChainId: tokenOutChainId, amount: amount, type: type })); - return [4 /*yield*/, fetch("quote?" + query)]; - case 4: - result = _a.sent(); - _a.label = 5; - case 5: return [2 /*return*/, { data: result.data }]; - case 6: - e_1 = _a.sent(); - // TODO: fall back to client-side quoter when auto router fails. - // deprecate 'legacy' v2/v3 routers first. - return [2 /*return*/, { error: e_1 }]; - case 7: return [2 /*return*/]; - } - }); - }); - }, - keepUnusedDataFor: ms__default["default"](templateObject_1$5 || (templateObject_1$5 = __makeTemplateObject(["10s"], ["10s"]))), - extraOptions: { - maxRetries: 0, - }, - }), - }); }, -}); -var useGetQuoteQuery = routingApi.useGetQuoteQuery; -var templateObject_1$5; - -var Field; -(function (Field) { - Field["INPUT"] = "INPUT"; - Field["OUTPUT"] = "OUTPUT"; -})(Field || (Field = {})); -var selectCurrency = toolkit.createAction('swap/selectCurrency'); -var switchCurrencies = toolkit.createAction('swap/switchCurrencies'); -var typeInput = toolkit.createAction('swap/typeInput'); -var replaceSwapState = toolkit.createAction('swap/replaceSwapState'); -var setRecipient = toolkit.createAction('swap/setRecipient'); - -var CHAIN_DATA_ABI = [ - { - inputs: [], - name: 'latestAnswer', - outputs: [{ internalType: 'int256', name: '', type: 'int256' }], - stateMutability: 'view', - type: 'function', - }, -]; -/** - * Returns the price of 1 gas in WEI for the currently selected network using the chainlink fast gas price oracle - */ -function useGasPrice() { - var _a, _b; - var address = useENSAddress('fast-gas-gwei.data.eth').address; - var contract = useContract(address !== null && address !== void 0 ? address : undefined, CHAIN_DATA_ABI, false); - var resultStr = (_b = (_a = useSingleCallResult(contract, 'latestAnswer').result) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.toString(); - return typeof resultStr === 'string' ? JSBI__default["default"].BigInt(resultStr) : undefined; -} - -var V3_SWAP_DEFAULT_SLIPPAGE = new sdkCore.Percent(50, 10000); // .50% -var ONE_TENTHS_PERCENT = new sdkCore.Percent(10, 10000); // .10% -/** - * Return a guess of the gas cost used in computing slippage tolerance for a given trade - * @param trade the trade for which to _guess_ the amount of gas it would cost to execute - */ -function guesstimateGas(trade) { - if (!!trade) { - return 100000 + trade.swaps.reduce(function (memo, swap) { return swap.route.pools.length + memo; }, 0) * 30000; - } - return undefined; -} -var MIN_AUTO_SLIPPAGE_TOLERANCE = new sdkCore.Percent(5, 1000); // 0.5% -var MAX_AUTO_SLIPPAGE_TOLERANCE = new sdkCore.Percent(25, 100); // 25% -/** - * Returns slippage tolerance based on values from current trade, gas estimates from api, and active network. - */ -function useAutoSlippageTolerance(trade) { - var chainId = useActiveWeb3React().chainId; - var onL2 = chainId && L2_CHAIN_IDS.includes(chainId); - var outputDollarValue = useUSDCValue(trade === null || trade === void 0 ? void 0 : trade.outputAmount); - var nativeGasPrice = useGasPrice(); - var gasEstimate = guesstimateGas(trade); - var nativeCurrency = useNativeCurrency(); - var nativeCurrencyPrice = useUSDCPrice(nativeCurrency !== null && nativeCurrency !== void 0 ? nativeCurrency : undefined); - return React.useMemo(function () { - if (!trade || onL2) - return ONE_TENTHS_PERCENT; - var nativeGasCost = nativeGasPrice && typeof gasEstimate === 'number' - ? JSBI__default["default"].multiply(nativeGasPrice, JSBI__default["default"].BigInt(gasEstimate)) - : undefined; - var dollarGasCost = nativeCurrency && nativeGasCost && nativeCurrencyPrice - ? nativeCurrencyPrice.quote(sdkCore.CurrencyAmount.fromRawAmount(nativeCurrency, nativeGasCost)) - : undefined; - // if valid estimate from api and using api trade, use gas estimate from api - // NOTE - dont use gas estimate for L2s yet - need to verify accuracy - // if not, use local heuristic - var dollarCostToUse = chainId && SUPPORTED_GAS_ESTIMATE_CHAIN_IDS.includes(chainId) && (trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) - ? trade.gasUseEstimateUSD - : dollarGasCost; - if (outputDollarValue && dollarCostToUse) { - // the rationale is that a user will not want their trade to fail for a loss due to slippage that is less than - // the cost of the gas of the failed transaction - var fraction = dollarCostToUse.asFraction.divide(outputDollarValue.asFraction); - var result = new sdkCore.Percent(fraction.numerator, fraction.denominator); - if (result.greaterThan(MAX_AUTO_SLIPPAGE_TOLERANCE)) - return MAX_AUTO_SLIPPAGE_TOLERANCE; - if (result.lessThan(MIN_AUTO_SLIPPAGE_TOLERANCE)) - return MIN_AUTO_SLIPPAGE_TOLERANCE; - return result; - } - return V3_SWAP_DEFAULT_SLIPPAGE; - }, [trade, onL2, nativeGasPrice, gasEstimate, nativeCurrency, nativeCurrencyPrice, chainId, outputDollarValue]); -} - -/** - * Transforms a Routing API quote into an array of routes that can be used to create - * a `Trade`. - */ -function computeRoutes(currencyIn, currencyOut, tradeType, quoteResult) { - if (!quoteResult || !quoteResult.route || !currencyIn || !currencyOut) - return undefined; - if (quoteResult.route.length === 0) - return []; - var parsedTokenIn = parseToken(quoteResult.route[0][0].tokenIn); - var parsedTokenOut = parseToken(quoteResult.route[0][quoteResult.route[0].length - 1].tokenOut); - if (parsedTokenIn.address !== currencyIn.wrapped.address) - return undefined; - if (parsedTokenOut.address !== currencyOut.wrapped.address) - return undefined; - var parsedCurrencyIn = currencyIn.isNative ? nativeOnChain(currencyIn.chainId) : parsedTokenIn; - var parsedCurrencyOut = currencyOut.isNative ? nativeOnChain(currencyOut.chainId) : parsedTokenOut; - try { - return quoteResult.route.map(function (route) { - if (route.length === 0) { - throw new Error('Expected route to have at least one pair or pool'); - } - var rawAmountIn = route[0].amountIn; - var rawAmountOut = route[route.length - 1].amountOut; - if (!rawAmountIn || !rawAmountOut) { - throw new Error('Expected both amountIn and amountOut to be present'); - } - return { - routev3: isV3Route(route) ? new v3Sdk.Route(route.map(parsePool), parsedCurrencyIn, parsedCurrencyOut) : null, - routev2: !isV3Route(route) ? new v2Sdk.Route(route.map(parsePair), parsedCurrencyIn, parsedCurrencyOut) : null, - inputAmount: sdkCore.CurrencyAmount.fromRawAmount(parsedCurrencyIn, rawAmountIn), - outputAmount: sdkCore.CurrencyAmount.fromRawAmount(parsedCurrencyOut, rawAmountOut), - }; - }); - } - catch (e) { - // `Route` constructor may throw if inputs/outputs are temporarily out of sync - // (RTK-Query always returns the latest data which may not be the right inputs/outputs) - // This is not fatal and will fix itself in future render cycles - console.error(e); - return undefined; - } -} -function transformRoutesToTrade(route, tradeType, gasUseEstimateUSD) { - var _a, _b; - return new InterfaceTrade({ - v2Routes: (_a = route === null || route === void 0 ? void 0 : route.filter(function (r) { return r.routev2 !== null; }).map(function (_a) { - var routev2 = _a.routev2, inputAmount = _a.inputAmount, outputAmount = _a.outputAmount; - return ({ routev2: routev2, inputAmount: inputAmount, outputAmount: outputAmount }); - })) !== null && _a !== void 0 ? _a : [], - v3Routes: (_b = route === null || route === void 0 ? void 0 : route.filter(function (r) { return r.routev3 !== null; }).map(function (_a) { - var routev3 = _a.routev3, inputAmount = _a.inputAmount, outputAmount = _a.outputAmount; - return ({ routev3: routev3, inputAmount: inputAmount, outputAmount: outputAmount }); - })) !== null && _b !== void 0 ? _b : [], - tradeType: tradeType, - gasUseEstimateUSD: gasUseEstimateUSD, - }); -} -var parseToken = function (_a) { - var address = _a.address, chainId = _a.chainId, decimals = _a.decimals, symbol = _a.symbol; - return new sdkCore.Token(chainId, address, parseInt(decimals.toString()), symbol); -}; -var parsePool = function (_a) { - var fee = _a.fee, sqrtRatioX96 = _a.sqrtRatioX96, liquidity = _a.liquidity, tickCurrent = _a.tickCurrent, tokenIn = _a.tokenIn, tokenOut = _a.tokenOut; - return new v3Sdk.Pool(parseToken(tokenIn), parseToken(tokenOut), parseInt(fee), sqrtRatioX96, liquidity, parseInt(tickCurrent)); -}; -var parsePair = function (_a) { - var reserve0 = _a.reserve0, reserve1 = _a.reserve1; - return new v2Sdk.Pair(sdkCore.CurrencyAmount.fromRawAmount(parseToken(reserve0.token), reserve0.quotient), sdkCore.CurrencyAmount.fromRawAmount(parseToken(reserve1.token), reserve1.quotient)); -}; -function isV3Route(route) { - return route[0].type === 'v3-pool'; -} - -function useFreshData(data, dataBlockNumber, maxBlockAge) { - if (maxBlockAge === void 0) { maxBlockAge = 10; } - var localBlockNumber = useBlockNumber(); - if (!localBlockNumber) - return undefined; - if (localBlockNumber - dataBlockNumber > maxBlockAge) { - return undefined; - } - return data; -} -/** - * Returns query arguments for the Routing API query or undefined if the - * query should be skipped. - */ -function useRoutingAPIArguments(_a) { - var tokenIn = _a.tokenIn, tokenOut = _a.tokenOut, amount = _a.amount, tradeType = _a.tradeType; - var _b = __read(useClientSideRouter(), 1), clientSideRouter = _b[0]; - return React.useMemo(function () { - return !tokenIn || !tokenOut || !amount || tokenIn.equals(tokenOut) - ? undefined - : { - amount: amount.quotient.toString(), - tokenInAddress: tokenIn.wrapped.address, - tokenInChainId: tokenIn.wrapped.chainId, - tokenInDecimals: tokenIn.wrapped.decimals, - tokenInSymbol: tokenIn.wrapped.symbol, - tokenOutAddress: tokenOut.wrapped.address, - tokenOutChainId: tokenOut.wrapped.chainId, - tokenOutDecimals: tokenOut.wrapped.decimals, - tokenOutSymbol: tokenOut.wrapped.symbol, - useClientSideRouter: clientSideRouter, - type: (tradeType === sdkCore.TradeType.EXACT_INPUT ? 'exactIn' : 'exactOut'), - }; - }, [amount, clientSideRouter, tokenIn, tokenOut, tradeType]); -} -/** - * Returns the best trade by invoking the routing api or the smart order router on the client - * @param tradeType whether the swap is an exact in/out - * @param amountSpecified the exact amount to swap in/out - * @param otherCurrency the desired output/payment currency - */ -function useRoutingAPITrade(tradeType, amountSpecified, otherCurrency) { - var _a; - var _b = __read(React.useMemo(function () { - return tradeType === sdkCore.TradeType.EXACT_INPUT - ? [amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, otherCurrency] - : [otherCurrency, amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency]; - }, [amountSpecified, otherCurrency, tradeType]), 2), currencyIn = _b[0], currencyOut = _b[1]; - var queryArgs = useRoutingAPIArguments({ - tokenIn: currencyIn, - tokenOut: currencyOut, - amount: amountSpecified, - tradeType: tradeType, - }); - var _c = useGetQuoteQuery(queryArgs !== null && queryArgs !== void 0 ? queryArgs : react.skipToken, { - pollingInterval: ms__default["default"](templateObject_1$4 || (templateObject_1$4 = __makeTemplateObject(["15s"], ["15s"]))), - refetchOnFocus: true, - }), isLoading = _c.isLoading, isError = _c.isError, data = _c.data; - var quoteResult = useFreshData(data, Number(data === null || data === void 0 ? void 0 : data.blockNumber) || 0); - var route = React.useMemo(function () { return computeRoutes(currencyIn, currencyOut, tradeType, quoteResult); }, [currencyIn, currencyOut, quoteResult, tradeType]); - // get USD gas cost of trade in active chains stablecoin amount - var gasUseEstimateUSD = (_a = useStablecoinAmountFromFiatValue(quoteResult === null || quoteResult === void 0 ? void 0 : quoteResult.gasUseEstimateUSD)) !== null && _a !== void 0 ? _a : null; - return React.useMemo(function () { - if (!currencyIn || !currencyOut) { - return { - state: TradeState.INVALID, - trade: undefined, - }; - } - if (isLoading && !quoteResult) { - // only on first hook render - return { - state: TradeState.LOADING, - trade: undefined, - }; - } - var otherAmount = tradeType === sdkCore.TradeType.EXACT_INPUT - ? currencyOut && quoteResult - ? sdkCore.CurrencyAmount.fromRawAmount(currencyOut, quoteResult.quote) - : undefined - : currencyIn && quoteResult - ? sdkCore.CurrencyAmount.fromRawAmount(currencyIn, quoteResult.quote) - : undefined; - if (isError || !otherAmount || !route || route.length === 0 || !queryArgs) { - return { - state: TradeState.NO_ROUTE_FOUND, - trade: undefined, - }; - } - try { - var trade = transformRoutesToTrade(route, tradeType, gasUseEstimateUSD); - return { - // always return VALID regardless of isFetching status - state: TradeState.VALID, - trade: trade, - }; - } - catch (e) { - console.debug('transformRoutesToTrade failed: ', e); - return { state: TradeState.INVALID, trade: undefined }; - } - }, [currencyIn, currencyOut, isLoading, quoteResult, tradeType, isError, route, queryArgs, gasUseEstimateUSD]); -} -var templateObject_1$4; - -/** - * Returns the best v2+v3 trade for a desired swap. - * @param tradeType whether the swap is an exact in/out - * @param amountSpecified the exact amount to swap in/out - * @param otherCurrency the desired output/payment currency - */ -function useBestTrade(tradeType, amountSpecified, otherCurrency) { - var autoRouterSupported = useAutoRouterSupported(); - var isWindowVisible = useIsWindowVisible(); - var _a = __read(useDebounce(React.useMemo(function () { return [amountSpecified, otherCurrency]; }, [amountSpecified, otherCurrency]), 200), 2), debouncedAmount = _a[0], debouncedOtherCurrency = _a[1]; - var routingAPITrade = useRoutingAPITrade(tradeType, autoRouterSupported && isWindowVisible ? debouncedAmount : undefined, debouncedOtherCurrency); - var isLoading = amountSpecified !== undefined && debouncedAmount === undefined; - // consider trade debouncing when inputs/outputs do not match - var debouncing = routingAPITrade.trade && - amountSpecified && - (tradeType === sdkCore.TradeType.EXACT_INPUT - ? !routingAPITrade.trade.inputAmount.equalTo(amountSpecified) || - !amountSpecified.currency.equals(routingAPITrade.trade.inputAmount.currency) || - !(debouncedOtherCurrency === null || debouncedOtherCurrency === void 0 ? void 0 : debouncedOtherCurrency.equals(routingAPITrade.trade.outputAmount.currency)) - : !routingAPITrade.trade.outputAmount.equalTo(amountSpecified) || - !amountSpecified.currency.equals(routingAPITrade.trade.outputAmount.currency) || - !(debouncedOtherCurrency === null || debouncedOtherCurrency === void 0 ? void 0 : debouncedOtherCurrency.equals(routingAPITrade.trade.inputAmount.currency))); - var useFallback = !autoRouterSupported || (!debouncing && routingAPITrade.state === TradeState.NO_ROUTE_FOUND); - // only use client side router if routing api trade failed or is not supported - var bestV3Trade = useClientSideV3Trade(tradeType, useFallback ? debouncedAmount : undefined, useFallback ? debouncedOtherCurrency : undefined); - // only return gas estimate from api if routing api trade is used - return React.useMemo(function () { return (__assign(__assign(__assign({}, (useFallback ? bestV3Trade : routingAPITrade)), (debouncing ? { state: TradeState.SYNCING } : {})), (isLoading ? { state: TradeState.LOADING } : {}))); }, [bestV3Trade, debouncing, isLoading, routingAPITrade, useFallback]); -} - -function useSwapState() { - return useAppSelector(function (state) { return state.swap; }); -} -function useSwapActionHandlers() { - var dispatch = useAppDispatch(); - var onCurrencySelection = React.useCallback(function (field, currency) { - dispatch(selectCurrency({ - field: field, - currencyId: currency.isToken ? currency.address : currency.isNative ? 'ETH' : '', - })); - }, [dispatch]); - var onSwitchTokens = React.useCallback(function () { - dispatch(switchCurrencies()); - }, [dispatch]); - var onUserInput = React.useCallback(function (field, typedValue) { - dispatch(typeInput({ field: field, typedValue: typedValue })); - }, [dispatch]); - var onChangeRecipient = React.useCallback(function (recipient) { - dispatch(setRecipient({ recipient: recipient })); - }, [dispatch]); - return { - onSwitchTokens: onSwitchTokens, - onCurrencySelection: onCurrencySelection, - onUserInput: onUserInput, - onChangeRecipient: onChangeRecipient, - }; -} -var BAD_RECIPIENT_ADDRESSES = { - '0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f': true, - '0xf164fC0Ec4E93095b804a4795bBe1e041497b92a': true, - '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D': true, // v2 router 02 -}; -// from the current swap inputs, compute the best trade and return it. -function useDerivedSwapInfo() { - var _a, _b; - var account = useActiveWeb3React().account; - var _c = useSwapState(), independentField = _c.independentField, typedValue = _c.typedValue, _d = Field.INPUT, inputCurrencyId = _c[_d].currencyId, _e = Field.OUTPUT, outputCurrencyId = _c[_e].currencyId, recipient = _c.recipient; - var inputCurrency = useCurrency(inputCurrencyId); - var outputCurrency = useCurrency(outputCurrencyId); - var recipientLookup = useENS(recipient !== null && recipient !== void 0 ? recipient : undefined); - var to = (_a = (recipient === null ? account : recipientLookup.address)) !== null && _a !== void 0 ? _a : null; - var relevantTokenBalances = useCurrencyBalances(account !== null && account !== void 0 ? account : undefined, React.useMemo(function () { return [inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : undefined, outputCurrency !== null && outputCurrency !== void 0 ? outputCurrency : undefined]; }, [inputCurrency, outputCurrency])); - var isExactIn = independentField === Field.INPUT; - var parsedAmount = React.useMemo(function () { var _a; return tryParseCurrencyAmount(typedValue, (_a = (isExactIn ? inputCurrency : outputCurrency)) !== null && _a !== void 0 ? _a : undefined); }, [inputCurrency, isExactIn, outputCurrency, typedValue]); - var trade = useBestTrade(isExactIn ? sdkCore.TradeType.EXACT_INPUT : sdkCore.TradeType.EXACT_OUTPUT, parsedAmount, (_b = (isExactIn ? outputCurrency : inputCurrency)) !== null && _b !== void 0 ? _b : undefined); - var currencyBalances = React.useMemo(function () { - var _a; - return (_a = {}, - _a[Field.INPUT] = relevantTokenBalances[0], - _a[Field.OUTPUT] = relevantTokenBalances[1], - _a); - }, [relevantTokenBalances]); - var currencies = React.useMemo(function () { - var _a; - return (_a = {}, - _a[Field.INPUT] = inputCurrency, - _a[Field.OUTPUT] = outputCurrency, - _a); - }, [inputCurrency, outputCurrency]); - // allowed slippage is either auto slippage, or custom user defined slippage if auto slippage disabled - var autoSlippageTolerance = useAutoSlippageTolerance(trade.trade); - var allowedSlippage = useUserSlippageToleranceWithDefault(autoSlippageTolerance); - var inputError = React.useMemo(function () { - var _a; - var inputError; - if (!account) { - inputError = jsxRuntime.jsx(macro.Trans, { children: "Connect Wallet" }, void 0); - } - if (!currencies[Field.INPUT] || !currencies[Field.OUTPUT]) { - inputError = inputError !== null && inputError !== void 0 ? inputError : jsxRuntime.jsx(macro.Trans, { children: "Select a token" }, void 0); - } - if (!parsedAmount) { - inputError = inputError !== null && inputError !== void 0 ? inputError : jsxRuntime.jsx(macro.Trans, { children: "Enter an amount" }, void 0); - } - var formattedTo = isAddress(to); - if (!to || !formattedTo) { - inputError = inputError !== null && inputError !== void 0 ? inputError : jsxRuntime.jsx(macro.Trans, { children: "Enter a recipient" }, void 0); - } - else { - if (BAD_RECIPIENT_ADDRESSES[formattedTo]) { - inputError = inputError !== null && inputError !== void 0 ? inputError : jsxRuntime.jsx(macro.Trans, { children: "Invalid recipient" }, void 0); - } - } - // compare input balance to max input based on version - var _b = __read([currencyBalances[Field.INPUT], (_a = trade.trade) === null || _a === void 0 ? void 0 : _a.maximumAmountIn(allowedSlippage)], 2), balanceIn = _b[0], amountIn = _b[1]; - if (balanceIn && amountIn && balanceIn.lessThan(amountIn)) { - inputError = jsxRuntime.jsxs(macro.Trans, { children: ["Insufficient ", amountIn.currency.symbol, " balance"] }, void 0); - } - return inputError; - }, [account, allowedSlippage, currencies, currencyBalances, parsedAmount, to, trade.trade]); - return React.useMemo(function () { return ({ - currencies: currencies, - currencyBalances: currencyBalances, - parsedAmount: parsedAmount, - inputError: inputError, - trade: trade, - allowedSlippage: allowedSlippage, - }); }, [allowedSlippage, currencies, currencyBalances, inputError, parsedAmount, trade]); -} -function parseCurrencyFromURLParameter(urlParam) { - if (typeof urlParam === 'string') { - var valid = isAddress(urlParam); - if (valid) - return valid; - if (urlParam.toUpperCase() === 'ETH') - return 'ETH'; - } - return ''; -} -function parseTokenAmountURLParameter(urlParam) { - return typeof urlParam === 'string' && !isNaN(parseFloat(urlParam)) ? urlParam : ''; -} -function parseIndependentFieldURLParameter(urlParam) { - return typeof urlParam === 'string' && urlParam.toLowerCase() === 'output' ? Field.OUTPUT : Field.INPUT; -} -var ENS_NAME_REGEX = /^[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)?$/; -var ADDRESS_REGEX = /^0x[a-fA-F0-9]{40}$/; -function validatedRecipient(recipient) { - if (typeof recipient !== 'string') - return null; - var address = isAddress(recipient); - if (address) - return address; - if (ENS_NAME_REGEX.test(recipient)) - return recipient; - if (ADDRESS_REGEX.test(recipient)) - return recipient; - return null; -} -function queryParametersToSwapState(parsedQs) { - var _a; - var inputCurrency = parseCurrencyFromURLParameter(parsedQs.inputCurrency); - var outputCurrency = parseCurrencyFromURLParameter(parsedQs.outputCurrency); - if (inputCurrency === '' && outputCurrency === '') { - // default to ETH input - inputCurrency = 'ETH'; - } - else if (inputCurrency === outputCurrency) { - // clear output if identical - outputCurrency = ''; - } - var recipient = validatedRecipient(parsedQs.recipient); - return _a = {}, - _a[Field.INPUT] = { - currencyId: inputCurrency === '' ? null : inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : null, - }, - _a[Field.OUTPUT] = { - currencyId: outputCurrency === '' ? null : outputCurrency !== null && outputCurrency !== void 0 ? outputCurrency : null, - }, - _a.typedValue = parseTokenAmountURLParameter(parsedQs.exactAmount), - _a.independentField = parseIndependentFieldURLParameter(parsedQs.exactField), - _a.recipient = recipient, - _a; -} -// updates the swap state to use the defaults for a given network -function useDefaultsFromURLSearch() { - var chainId = useActiveWeb3React().chainId; - var dispatch = useAppDispatch(); - var parsedQs = useParsedQueryString(); - var _a = __read(React.useState(), 2), result = _a[0], setResult = _a[1]; - React.useEffect(function () { - var _a, _b; - if (!chainId) - return; - var parsed = queryParametersToSwapState(parsedQs); - var inputCurrencyId = (_a = parsed[Field.INPUT].currencyId) !== null && _a !== void 0 ? _a : undefined; - var outputCurrencyId = (_b = parsed[Field.OUTPUT].currencyId) !== null && _b !== void 0 ? _b : undefined; - dispatch(replaceSwapState({ - typedValue: parsed.typedValue, - field: parsed.independentField, - inputCurrencyId: inputCurrencyId, - outputCurrencyId: outputCurrencyId, - recipient: parsed.recipient, - })); - setResult({ inputCurrencyId: inputCurrencyId, outputCurrencyId: outputCurrencyId }); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [dispatch, chainId]); - return result; -} - -var initialState$2 = queryParametersToSwapState(parsedQueryString()); -var swap = toolkit.createReducer(initialState$2, function (builder) { - return builder - .addCase(replaceSwapState, function (state, _a) { - var _b; - var _c = _a.payload, typedValue = _c.typedValue, recipient = _c.recipient, field = _c.field, inputCurrencyId = _c.inputCurrencyId, outputCurrencyId = _c.outputCurrencyId; - return _b = {}, - _b[Field.INPUT] = { - currencyId: inputCurrencyId !== null && inputCurrencyId !== void 0 ? inputCurrencyId : null, - }, - _b[Field.OUTPUT] = { - currencyId: outputCurrencyId !== null && outputCurrencyId !== void 0 ? outputCurrencyId : null, - }, - _b.independentField = field, - _b.typedValue = typedValue, - _b.recipient = recipient, - _b; - }) - .addCase(selectCurrency, function (state, _a) { - var _b, _c; - var _d = _a.payload, currencyId = _d.currencyId, field = _d.field; - var otherField = field === Field.INPUT ? Field.OUTPUT : Field.INPUT; - if (currencyId === state[otherField].currencyId) { - // the case where we have to swap the order - return __assign(__assign({}, state), (_b = { independentField: state.independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT }, _b[field] = { currencyId: currencyId }, _b[otherField] = { currencyId: state[field].currencyId }, _b)); - } - else { - // the normal case - return __assign(__assign({}, state), (_c = {}, _c[field] = { currencyId: currencyId }, _c)); - } - }) - .addCase(switchCurrencies, function (state) { - var _a; - return __assign(__assign({}, state), (_a = { independentField: state.independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT }, _a[Field.INPUT] = { currencyId: state[Field.OUTPUT].currencyId }, _a[Field.OUTPUT] = { currencyId: state[Field.INPUT].currencyId }, _a)); - }) - .addCase(typeInput, function (state, _a) { - var _b = _a.payload, field = _b.field, typedValue = _b.typedValue; - return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); - }) - .addCase(setRecipient, function (state, _a) { - var recipient = _a.payload.recipient; - state.recipient = recipient; - }); -}); - -var now = function () { return new Date().getTime(); }; -var initialState$1 = {}; -var transactions = toolkit.createReducer(initialState$1, function (builder) { - return builder - .addCase(updateVersion, function (transactions) { - // in case there are any transactions in the store with the old format, remove them - Object.keys(transactions).forEach(function (chainId) { - var chainTransactions = transactions[chainId]; - Object.keys(chainTransactions).forEach(function (hash) { - if (!('info' in chainTransactions[hash])) { - // clear old transactions that don't have the right format - delete chainTransactions[hash]; - } - }); - }); - }) - .addCase(addTransaction, function (transactions, _a) { - var _b, _c; - var _d = _a.payload, chainId = _d.chainId, from = _d.from, hash = _d.hash, info = _d.info; - if ((_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash]) { - throw Error('Attempted to add existing transaction.'); - } - var txs = (_c = transactions[chainId]) !== null && _c !== void 0 ? _c : {}; - txs[hash] = { hash: hash, info: info, from: from, addedTime: now() }; - transactions[chainId] = txs; - }) - .addCase(clearAllTransactions, function (transactions, _a) { - var chainId = _a.payload.chainId; - if (!transactions[chainId]) - return; - transactions[chainId] = {}; - }) - .addCase(checkedTransaction, function (transactions, _a) { - var _b; - var _c = _a.payload, chainId = _c.chainId, hash = _c.hash, blockNumber = _c.blockNumber; - var tx = (_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash]; - if (!tx) { - return; - } - if (!tx.lastCheckedBlockNumber) { - tx.lastCheckedBlockNumber = blockNumber; - } - else { - tx.lastCheckedBlockNumber = Math.max(blockNumber, tx.lastCheckedBlockNumber); - } - }) - .addCase(finalizeTransaction, function (transactions, _a) { - var _b; - var _c = _a.payload, hash = _c.hash, chainId = _c.chainId, receipt = _c.receipt; - var tx = (_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash]; - if (!tx) { - return; - } - tx.receipt = receipt; - tx.confirmedTime = now(); - }); -}); - -var currentTimestamp = function () { return new Date().getTime(); }; -function pairKey(token0Address, token1Address) { - return token0Address + ";" + token1Address; -} -var initialState = { - matchesDarkMode: false, - userDarkMode: null, - userExpertMode: false, - userLocale: null, - userClientSideRouter: false, - userHideClosedPositions: false, - userSlippageTolerance: 'auto', - userSlippageToleranceHasBeenMigratedToAuto: true, - userDeadline: DEFAULT_DEADLINE_FROM_NOW, - tokens: {}, - pairs: {}, - timestamp: currentTimestamp(), - URLWarningVisible: true, - showSurveyPopup: undefined, -}; -var user = toolkit.createReducer(initialState, function (builder) { - return builder - .addCase(updateVersion, function (state) { - // slippage isnt being tracked in local storage, reset to default - // noinspection SuspiciousTypeOfGuard - if (typeof state.userSlippageTolerance !== 'number' || - !Number.isInteger(state.userSlippageTolerance) || - state.userSlippageTolerance < 0 || - state.userSlippageTolerance > 5000) { - state.userSlippageTolerance = 'auto'; - } - else { - if (!state.userSlippageToleranceHasBeenMigratedToAuto && - [10, 50, 100].indexOf(state.userSlippageTolerance) !== -1) { - state.userSlippageTolerance = 'auto'; - state.userSlippageToleranceHasBeenMigratedToAuto = true; - } - } - // deadline isnt being tracked in local storage, reset to default - // noinspection SuspiciousTypeOfGuard - if (typeof state.userDeadline !== 'number' || - !Number.isInteger(state.userDeadline) || - state.userDeadline < 60 || - state.userDeadline > 180 * 60) { - state.userDeadline = DEFAULT_DEADLINE_FROM_NOW; - } - state.lastUpdateVersionTimestamp = currentTimestamp(); - }) - .addCase(updateUserDarkMode, function (state, action) { - state.userDarkMode = action.payload.userDarkMode; - state.timestamp = currentTimestamp(); - }) - .addCase(updateMatchesDarkMode, function (state, action) { - state.matchesDarkMode = action.payload.matchesDarkMode; - state.timestamp = currentTimestamp(); - }) - .addCase(updateUserExpertMode, function (state, action) { - state.userExpertMode = action.payload.userExpertMode; - state.timestamp = currentTimestamp(); - }) - .addCase(updateUserLocale, function (state, action) { - state.userLocale = action.payload.userLocale; - state.timestamp = currentTimestamp(); - }) - .addCase(updateUserSlippageTolerance, function (state, action) { - state.userSlippageTolerance = action.payload.userSlippageTolerance; - state.timestamp = currentTimestamp(); - }) - .addCase(updateUserDeadline, function (state, action) { - state.userDeadline = action.payload.userDeadline; - state.timestamp = currentTimestamp(); - }) - .addCase(updateUserClientSideRouter, function (state, action) { - state.userClientSideRouter = action.payload.userClientSideRouter; - }) - .addCase(updateHideClosedPositions, function (state, action) { - state.userHideClosedPositions = action.payload.userHideClosedPositions; - }) - .addCase(updateShowSurveyPopup, function (state, action) { - state.showSurveyPopup = action.payload.showSurveyPopup; - }) - .addCase(addSerializedToken, function (state, _a) { - var serializedToken = _a.payload.serializedToken; - if (!state.tokens) { - state.tokens = {}; - } - state.tokens[serializedToken.chainId] = state.tokens[serializedToken.chainId] || {}; - state.tokens[serializedToken.chainId][serializedToken.address] = serializedToken; - state.timestamp = currentTimestamp(); - }) - .addCase(removeSerializedToken, function (state, _a) { - var _b = _a.payload, address = _b.address, chainId = _b.chainId; - if (!state.tokens) { - state.tokens = {}; - } - state.tokens[chainId] = state.tokens[chainId] || {}; - delete state.tokens[chainId][address]; - state.timestamp = currentTimestamp(); - }) - .addCase(addSerializedPair, function (state, _a) { - var serializedPair = _a.payload.serializedPair; - if (serializedPair.token0.chainId === serializedPair.token1.chainId && - serializedPair.token0.address !== serializedPair.token1.address) { - var chainId = serializedPair.token0.chainId; - state.pairs[chainId] = state.pairs[chainId] || {}; - state.pairs[chainId][pairKey(serializedPair.token0.address, serializedPair.token1.address)] = serializedPair; - } - state.timestamp = currentTimestamp(); - }) - .addCase(removeSerializedPair, function (state, _a) { - var _b = _a.payload, chainId = _b.chainId, tokenAAddress = _b.tokenAAddress, tokenBAddress = _b.tokenBAddress; - if (state.pairs[chainId]) { - // just delete both keys if either exists - delete state.pairs[chainId][pairKey(tokenAAddress, tokenBAddress)]; - delete state.pairs[chainId][pairKey(tokenBAddress, tokenAAddress)]; - } - state.timestamp = currentTimestamp(); - }); -}); - -var _a$3; -var PERSISTED_KEYS = ['user', 'transactions', 'lists']; -var store = toolkit.configureStore({ - reducer: (_a$3 = { - application: application, - user: user, - transactions: transactions, - swap: swap, - mint: mint, - mintV3: mintV3, - burn: burn, - burnV3: burnV3, - multicall: multicall.reducer, - lists: lists, - logs: logs - }, - _a$3[api$1.reducerPath] = api$1.reducer, - _a$3[routingApi.reducerPath] = routingApi.reducer, - _a$3), - middleware: function (getDefaultMiddleware) { - return getDefaultMiddleware({ thunk: true }) - .concat(api$1.middleware) - .concat(routingApi.middleware) - .concat(reduxLocalstorageSimple.save({ states: PERSISTED_KEYS, debounce: 1000 })); - }, - preloadedState: reduxLocalstorageSimple.load({ states: PERSISTED_KEYS, disableWarnings: process.env.NODE_ENV === 'test' }), -}); -store.dispatch(updateVersion()); -react.setupListeners(store.dispatch); - -var _a$2, _b$1, _c$1; -/** - * Given a locale string (e.g. from user agent), return the best match for corresponding SupportedLocale - * @param maybeSupportedLocale the fuzzy locale identifier - */ -function parseLocale(maybeSupportedLocale) { - if (typeof maybeSupportedLocale !== 'string') - return undefined; - var lowerMaybeSupportedLocale = maybeSupportedLocale.toLowerCase(); - return SUPPORTED_LOCALES.find(function (locale) { return locale.toLowerCase() === lowerMaybeSupportedLocale || locale.split('-')[0] === lowerMaybeSupportedLocale; }); -} -/** - * Returns the supported locale read from the user agent (navigator) - */ -function navigatorLocale() { - var _a; - if (!navigator.language) - return undefined; - var _b = __read(navigator.language.split('-'), 2), language = _b[0], region = _b[1]; - if (region) { - return (_a = parseLocale(language + "-" + region.toUpperCase())) !== null && _a !== void 0 ? _a : parseLocale(language); - } - return parseLocale(language); -} -function storeLocale() { - var _a; - return (_a = store.getState().user.userLocale) !== null && _a !== void 0 ? _a : undefined; -} -var initialLocale = (_c$1 = (_b$1 = (_a$2 = parseLocale(parsedQueryString().lng)) !== null && _a$2 !== void 0 ? _a$2 : storeLocale()) !== null && _b$1 !== void 0 ? _b$1 : navigatorLocale()) !== null && _c$1 !== void 0 ? _c$1 : DEFAULT_LOCALE; -function useUrlLocale() { - var parsed = useParsedQueryString(); - return parseLocale(parsed.lng); -} -/** - * Returns the currently active locale, from a combination of user agent, query string, and user settings stored in redux - * Stores the query string locale in redux (if set) to persist across sessions - */ -function useActiveLocale() { - var urlLocale = useUrlLocale(); - var userLocale = useUserLocale(); - return React.useMemo(function () { var _a, _b; return (_b = (_a = urlLocale !== null && urlLocale !== void 0 ? urlLocale : userLocale) !== null && _a !== void 0 ? _a : navigatorLocale()) !== null && _b !== void 0 ? _b : DEFAULT_LOCALE; }, [urlLocale, userLocale]); -} - -function useLocationLinkProps(locale) { - var location = reactRouterDom.useLocation(); - var qs$1 = useParsedQueryString(); - var activeLocale = useActiveLocale(); - return React.useMemo(function () { - return !locale - ? {} - : { - to: __assign(__assign({}, location), { search: qs.stringify(__assign(__assign({}, qs$1), { lng: locale })) }), - onClick: function () { - ReactGA__default["default"].event({ - category: 'Localization', - action: 'Switch Locale', - label: activeLocale + " -> " + locale, - }); - }, - }; - }, [location, qs$1, activeLocale, locale]); -} - -var Container = styled__default["default"](ThemedText.Small)(templateObject_1$3 || (templateObject_1$3 = __makeTemplateObject(["\n opacity: 0.6;\n :hover {\n opacity: 1;\n }\n margin-top: 1rem !important;\n"], ["\n opacity: 0.6;\n :hover {\n opacity: 1;\n }\n margin-top: 1rem !important;\n"]))); -var useTargetLocale = function (activeLocale) { - var browserLocale = React.useMemo(function () { return navigatorLocale(); }, []); - if (browserLocale && (browserLocale !== DEFAULT_LOCALE || activeLocale !== DEFAULT_LOCALE)) { - if (activeLocale === browserLocale) { - return DEFAULT_LOCALE; - } - else { - return browserLocale; - } - } - return null; -}; -function SwitchLocaleLink() { - var activeLocale = useActiveLocale(); - var targetLocale = useTargetLocale(activeLocale); - var _a = useLocationLinkProps(targetLocale), to = _a.to, onClick = _a.onClick; - if (!targetLocale || !to) - return null; - return (jsxRuntime.jsx(Container, { children: jsxRuntime.jsxs(macro.Trans, { children: ["Uniswap available in:", ' ', jsxRuntime.jsx(StyledInternalLink, __assign({ onClick: onClick, to: to }, { children: LOCALE_LABEL[targetLocale] }), void 0)] }, void 0) }, void 0)); -} -var templateObject_1$3; - -function TokenWarningModal(_a) { - var isOpen = _a.isOpen, tokens = _a.tokens, onConfirm = _a.onConfirm, onDismiss = _a.onDismiss; - return (jsxRuntime.jsx(Modal, __assign({ isOpen: isOpen, onDismiss: onDismiss, maxHeight: 100 }, { children: jsxRuntime.jsx(ImportToken, { tokens: tokens, handleCurrencySelect: onConfirm }, void 0) }), void 0)); -} - -function useTokenAllowance(token, owner, spender) { - var contract = useTokenContract(token === null || token === void 0 ? void 0 : token.address, false); - var inputs = React.useMemo(function () { return [owner, spender]; }, [owner, spender]); - var allowance = useSingleCallResult(contract, 'allowance', inputs).result; - return React.useMemo(function () { return (token && allowance ? sdkCore.CurrencyAmount.fromRawAmount(token, allowance.toString()) : undefined); }, [token, allowance]); -} - -var ApprovalState; -(function (ApprovalState) { - ApprovalState["UNKNOWN"] = "UNKNOWN"; - ApprovalState["NOT_APPROVED"] = "NOT_APPROVED"; - ApprovalState["PENDING"] = "PENDING"; - ApprovalState["APPROVED"] = "APPROVED"; -})(ApprovalState || (ApprovalState = {})); -function useApprovalStateForSpender(amountToApprove, spender, useIsPendingApproval) { - var _a; - var account = useActiveWeb3React().account; - var token = ((_a = amountToApprove === null || amountToApprove === void 0 ? void 0 : amountToApprove.currency) === null || _a === void 0 ? void 0 : _a.isToken) ? amountToApprove.currency : undefined; - var currentAllowance = useTokenAllowance(token, account !== null && account !== void 0 ? account : undefined, spender); - var pendingApproval = useIsPendingApproval(token, spender); - return React.useMemo(function () { - if (!amountToApprove || !spender) - return ApprovalState.UNKNOWN; - if (amountToApprove.currency.isNative) - return ApprovalState.APPROVED; - // we might not have enough data to know whether or not we need to approve - if (!currentAllowance) - return ApprovalState.UNKNOWN; - // amountToApprove will be defined if currentAllowance is - return currentAllowance.lessThan(amountToApprove) - ? pendingApproval - ? ApprovalState.PENDING - : ApprovalState.NOT_APPROVED - : ApprovalState.APPROVED; - }, [amountToApprove, currentAllowance, pendingApproval, spender]); -} -function useApproval(amountToApprove, spender, useIsPendingApproval) { - var _this = this; - var _a; - var chainId = useActiveWeb3React().chainId; - var token = ((_a = amountToApprove === null || amountToApprove === void 0 ? void 0 : amountToApprove.currency) === null || _a === void 0 ? void 0 : _a.isToken) ? amountToApprove.currency : undefined; - // check the current approval status - var approvalState = useApprovalStateForSpender(amountToApprove, spender, useIsPendingApproval); - var tokenContract = useTokenContract(token === null || token === void 0 ? void 0 : token.address); - var approve = React.useCallback(function () { return __awaiter(_this, void 0, void 0, function () { - function logFailure(error) { - console.warn(((token === null || token === void 0 ? void 0 : token.symbol) || 'Token') + " approval failed:", error); - return; - } - var useExact, estimatedGas; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - // Bail early if there is an issue. - if (approvalState !== ApprovalState.NOT_APPROVED) { - return [2 /*return*/, logFailure('approve was called unnecessarily')]; - } - else if (!chainId) { - return [2 /*return*/, logFailure('no chainId')]; - } - else if (!token) { - return [2 /*return*/, logFailure('no token')]; - } - else if (!tokenContract) { - return [2 /*return*/, logFailure('tokenContract is null')]; - } - else if (!amountToApprove) { - return [2 /*return*/, logFailure('missing amount to approve')]; - } - else if (!spender) { - return [2 /*return*/, logFailure('no spender')]; - } - useExact = false; - return [4 /*yield*/, tokenContract.estimateGas.approve(spender, constants.MaxUint256).catch(function () { - // general fallback for tokens which restrict approval amounts - useExact = true; - return tokenContract.estimateGas.approve(spender, amountToApprove.quotient.toString()); - })]; - case 1: - estimatedGas = _a.sent(); - return [2 /*return*/, tokenContract - .approve(spender, useExact ? amountToApprove.quotient.toString() : constants.MaxUint256, { - gasLimit: calculateGasMargin(estimatedGas), - }) - .then(function (response) { return ({ - response: response, - tokenAddress: token.address, - spenderAddress: spender, - }); }) - .catch(function (error) { - logFailure(error); - throw error; - })]; - } - }); - }); }, [approvalState, token, tokenContract, amountToApprove, spender, chainId]); - return [approvalState, approve]; -} - -var SwapRouterVersion; -(function (SwapRouterVersion) { - SwapRouterVersion[SwapRouterVersion["V2"] = 0] = "V2"; - SwapRouterVersion[SwapRouterVersion["V3"] = 1] = "V3"; - SwapRouterVersion[SwapRouterVersion["V2V3"] = 2] = "V2V3"; -})(SwapRouterVersion || (SwapRouterVersion = {})); -/** - * Returns the swap router that will result in the least amount of txs (less gas) for a given swap. - * Heuristic: - * - if trade contains a single v2-only trade & V2 SwapRouter is approved: use V2 SwapRouter - * - if trade contains only v3 & V3 SwapRouter is approved: use V3 SwapRouter - * - else: approve and use V2+V3 SwapRouter - */ -function getTxOptimizedSwapRouter(_a) { - var onlyV2Routes = _a.onlyV2Routes, onlyV3Routes = _a.onlyV3Routes, tradeHasSplits = _a.tradeHasSplits, approvalStates = _a.approvalStates; - if ([approvalStates.v2, approvalStates.v3, approvalStates.v2V3].includes(ApprovalState.PENDING)) - return undefined; - if (approvalStates.v2V3 === ApprovalState.APPROVED) - return SwapRouterVersion.V2V3; - if (approvalStates.v2 === ApprovalState.APPROVED && onlyV2Routes && !tradeHasSplits) - return SwapRouterVersion.V2; - if (approvalStates.v3 === ApprovalState.APPROVED && onlyV3Routes) - return SwapRouterVersion.V3; - return SwapRouterVersion.V2V3; -} - -/** Returns approval state for all known swap routers */ -function useSwapApprovalStates(trade, allowedSlippage, useIsPendingApproval) { - var chainId = useActiveWeb3React().chainId; - var amountToApprove = React.useMemo(function () { return (trade && trade.inputAmount.currency.isToken ? trade.maximumAmountIn(allowedSlippage) : undefined); }, [trade, allowedSlippage]); - var v2RouterAddress = chainId ? V2_ROUTER_ADDRESS[chainId] : undefined; - var v3RouterAddress = chainId ? V3_ROUTER_ADDRESS[chainId] : undefined; - var swapRouterAddress = chainId ? SWAP_ROUTER_ADDRESSES[chainId] : undefined; - var v2 = useApprovalStateForSpender(amountToApprove, v2RouterAddress, useIsPendingApproval); - var v3 = useApprovalStateForSpender(amountToApprove, v3RouterAddress, useIsPendingApproval); - var v2V3 = useApprovalStateForSpender(amountToApprove, swapRouterAddress, useIsPendingApproval); - return React.useMemo(function () { return ({ v2: v2, v3: v3, v2V3: v2V3 }); }, [v2, v2V3, v3]); -} -function useSwapRouterAddress(trade) { - var chainId = useActiveWeb3React().chainId; - return React.useMemo(function () { - return chainId - ? trade instanceof v2Sdk.Trade - ? V2_ROUTER_ADDRESS[chainId] - : trade instanceof v3Sdk.Trade - ? V3_ROUTER_ADDRESS[chainId] - : SWAP_ROUTER_ADDRESSES[chainId] - : undefined; - }, [chainId, trade]); -} -// wraps useApproveCallback in the context of a swap -function useSwapApproval(trade, allowedSlippage, useIsPendingApproval) { - var amountToApprove = React.useMemo(function () { return (trade && trade.inputAmount.currency.isToken ? trade.maximumAmountIn(allowedSlippage) : undefined); }, [trade, allowedSlippage]); - var spender = useSwapRouterAddress(trade); - var approval = useApproval(amountToApprove, spender, useIsPendingApproval); - if (trade instanceof v2Sdk.Trade || trade instanceof v3Sdk.Trade) { - var approvalState = approval[0]; - invariant__default["default"](approvalState === ApprovalState.APPROVED, 'Trying to approve legacy router'); - } - return approval; -} -function useSwapApprovalOptimizedTrade(trade, allowedSlippage, useIsPendingApproval) { - var _a; - var onlyV2Routes = trade === null || trade === void 0 ? void 0 : trade.routes.every(function (route) { return route.protocol === routerSdk.Protocol.V2; }); - var onlyV3Routes = trade === null || trade === void 0 ? void 0 : trade.routes.every(function (route) { return route.protocol === routerSdk.Protocol.V3; }); - var tradeHasSplits = ((_a = trade === null || trade === void 0 ? void 0 : trade.routes.length) !== null && _a !== void 0 ? _a : 0) > 1; - var approvalStates = useSwapApprovalStates(trade, allowedSlippage, useIsPendingApproval); - var optimizedSwapRouter = React.useMemo(function () { return getTxOptimizedSwapRouter({ onlyV2Routes: onlyV2Routes, onlyV3Routes: onlyV3Routes, tradeHasSplits: tradeHasSplits, approvalStates: approvalStates }); }, [approvalStates, tradeHasSplits, onlyV2Routes, onlyV3Routes]); - return React.useMemo(function () { - if (!trade) - return undefined; - try { - switch (optimizedSwapRouter) { - case SwapRouterVersion.V2V3: - return trade; - case SwapRouterVersion.V2: - var pairs = trade.swaps[0].route.pools.filter(function (pool) { return pool instanceof v2Sdk.Pair; }); - var v2Route = new v2Sdk.Route(pairs, trade.inputAmount.currency, trade.outputAmount.currency); - return new v2Sdk.Trade(v2Route, trade.inputAmount, trade.tradeType); - case SwapRouterVersion.V3: - return v3Sdk.Trade.createUncheckedTradeWithMultipleRoutes({ - routes: trade.swaps.map(function (_a) { - var route = _a.route, inputAmount = _a.inputAmount, outputAmount = _a.outputAmount; - return ({ - route: new v3Sdk.Route(route.pools.filter(function (p) { return p instanceof v3Sdk.Pool; }), inputAmount.currency, outputAmount.currency), - inputAmount: inputAmount, - outputAmount: outputAmount, - }); - }), - tradeType: trade.tradeType, - }); - default: - return undefined; - } - } - catch (e) { - // TODO(#2989): remove try-catch - console.debug(e); - return undefined; - } - }, [trade, optimizedSwapRouter]); -} - -function useGetAndTrackApproval(getApproval) { - var addTransaction = useTransactionAdder(); - return React.useCallback(function () { - return getApproval().then(function (pending) { - if (pending) { - var response = pending.response, tokenAddress = pending.tokenAddress, spender = pending.spenderAddress; - addTransaction(response, { type: TransactionType.APPROVAL, tokenAddress: tokenAddress, spender: spender }); - } - }); - }, [addTransaction, getApproval]); -} -function useApprovalOptimizedTrade(trade, allowedSlippage) { - return useSwapApprovalOptimizedTrade(trade, allowedSlippage, useHasPendingApproval); -} -function useApproveCallbackFromTrade(trade, allowedSlippage) { - var _a = __read(useSwapApproval(trade, allowedSlippage, useHasPendingApproval), 2), approval = _a[0], getApproval = _a[1]; - return [approval, useGetAndTrackApproval(getApproval)]; -} - -var _a$1, _b, _c, _d, _e; -var PermitType; -(function (PermitType) { - PermitType[PermitType["AMOUNT"] = 1] = "AMOUNT"; - PermitType[PermitType["ALLOWED"] = 2] = "ALLOWED"; -})(PermitType || (PermitType = {})); -// 20 minutes to submit after signing -var PERMIT_VALIDITY_BUFFER = 20 * 60; -// todo: read this information from extensions on token lists or elsewhere (permit registry?) -var PERMITTABLE_TOKENS = { - 1: (_a$1 = {}, - _a$1[USDC.address] = { type: PermitType.AMOUNT, name: 'USD Coin', version: '2' }, - _a$1[DAI.address] = { type: PermitType.ALLOWED, name: 'Dai Stablecoin', version: '1' }, - _a$1[UNI[1].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }, - _a$1), - 4: (_b = { - '0xc7AD46e0b8a400Bb3C915120d284AafbA8fc4735': { type: PermitType.ALLOWED, name: 'Dai Stablecoin', version: '1' } - }, - _b[UNI[4].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }, - _b), - 3: (_c = {}, - _c[UNI[3].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }, - _c['0x07865c6E87B9F70255377e024ace6630C1Eaa37F'] = { type: PermitType.AMOUNT, name: 'USD Coin', version: '2' }, - _c), - 5: (_d = {}, - _d[UNI[5].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }, - _d), - 42: (_e = {}, - _e[UNI[42].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }, - _e), -}; -var UseERC20PermitState; -(function (UseERC20PermitState) { - // returned for any reason, e.g. it is an argent wallet, or the currency does not support it - UseERC20PermitState[UseERC20PermitState["NOT_APPLICABLE"] = 0] = "NOT_APPLICABLE"; - UseERC20PermitState[UseERC20PermitState["LOADING"] = 1] = "LOADING"; - UseERC20PermitState[UseERC20PermitState["NOT_SIGNED"] = 2] = "NOT_SIGNED"; - UseERC20PermitState[UseERC20PermitState["SIGNED"] = 3] = "SIGNED"; -})(UseERC20PermitState || (UseERC20PermitState = {})); -var EIP712_DOMAIN_TYPE = [ - { name: 'name', type: 'string' }, - { name: 'version', type: 'string' }, - { name: 'chainId', type: 'uint256' }, - { name: 'verifyingContract', type: 'address' }, -]; -var EIP712_DOMAIN_TYPE_NO_VERSION = [ - { name: 'name', type: 'string' }, - { name: 'chainId', type: 'uint256' }, - { name: 'verifyingContract', type: 'address' }, -]; -var EIP2612_TYPE = [ - { name: 'owner', type: 'address' }, - { name: 'spender', type: 'address' }, - { name: 'value', type: 'uint256' }, - { name: 'nonce', type: 'uint256' }, - { name: 'deadline', type: 'uint256' }, -]; -var PERMIT_ALLOWED_TYPE = [ - { name: 'holder', type: 'address' }, - { name: 'spender', type: 'address' }, - { name: 'nonce', type: 'uint256' }, - { name: 'expiry', type: 'uint256' }, - { name: 'allowed', type: 'bool' }, -]; -function useERC20Permit(currencyAmount, spender, transactionDeadline, overridePermitInfo) { - var _a, _b; - var _c = useActiveWeb3React(), account = _c.account, chainId = _c.chainId, library = _c.library; - var tokenAddress = ((_a = currencyAmount === null || currencyAmount === void 0 ? void 0 : currencyAmount.currency) === null || _a === void 0 ? void 0 : _a.isToken) ? currencyAmount.currency.address : undefined; - var eip2612Contract = useEIP2612Contract(tokenAddress); - var isArgentWallet = useIsArgentWallet(); - var nonceInputs = React.useMemo(function () { return [account !== null && account !== void 0 ? account : undefined]; }, [account]); - var tokenNonceState = useSingleCallResult(eip2612Contract, 'nonces', nonceInputs); - var permitInfo = overridePermitInfo !== null && overridePermitInfo !== void 0 ? overridePermitInfo : (chainId && tokenAddress ? (_b = PERMITTABLE_TOKENS[chainId]) === null || _b === void 0 ? void 0 : _b[tokenAddress] : undefined); - var _d = __read(React.useState(null), 2), signatureData = _d[0], setSignatureData = _d[1]; - return React.useMemo(function () { - var _a, _b; - if (isArgentWallet || - !currencyAmount || - !eip2612Contract || - !account || - !chainId || - !transactionDeadline || - !library || - !tokenNonceState.valid || - !tokenAddress || - !spender || - !permitInfo) { - return { - state: UseERC20PermitState.NOT_APPLICABLE, - signatureData: null, - gatherPermitSignature: null, - }; - } - var nonceNumber = (_b = (_a = tokenNonceState.result) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.toNumber(); - if (tokenNonceState.loading || typeof nonceNumber !== 'number') { - return { - state: UseERC20PermitState.LOADING, - signatureData: null, - gatherPermitSignature: null, - }; - } - var isSignatureDataValid = signatureData && - signatureData.owner === account && - signatureData.deadline >= transactionDeadline.toNumber() && - signatureData.tokenAddress === tokenAddress && - signatureData.nonce === nonceNumber && - signatureData.spender === spender && - ('allowed' in signatureData || JSBI__default["default"].equal(JSBI__default["default"].BigInt(signatureData.amount), currencyAmount.quotient)); - return { - state: isSignatureDataValid ? UseERC20PermitState.SIGNED : UseERC20PermitState.NOT_SIGNED, - signatureData: isSignatureDataValid ? signatureData : null, - gatherPermitSignature: function gatherPermitSignature() { - return __awaiter(this, void 0, void 0, function () { - var allowed, signatureDeadline, value, message, domain, data; - return __generator(this, function (_a) { - allowed = permitInfo.type === PermitType.ALLOWED; - signatureDeadline = transactionDeadline.toNumber() + PERMIT_VALIDITY_BUFFER; - value = currencyAmount.quotient.toString(); - message = allowed - ? { - holder: account, - spender: spender, - allowed: allowed, - nonce: nonceNumber, - expiry: signatureDeadline, - } - : { - owner: account, - spender: spender, - value: value, - nonce: nonceNumber, - deadline: signatureDeadline, - }; - domain = permitInfo.version - ? { - name: permitInfo.name, - version: permitInfo.version, - verifyingContract: tokenAddress, - chainId: chainId, - } - : { - name: permitInfo.name, - verifyingContract: tokenAddress, - chainId: chainId, - }; - data = JSON.stringify({ - types: { - EIP712Domain: permitInfo.version ? EIP712_DOMAIN_TYPE : EIP712_DOMAIN_TYPE_NO_VERSION, - Permit: allowed ? PERMIT_ALLOWED_TYPE : EIP2612_TYPE, - }, - domain: domain, - primaryType: 'Permit', - message: message, - }); - return [2 /*return*/, library - .send('eth_signTypedData_v4', [account, data]) - .then(bytes.splitSignature) - .then(function (signature) { - setSignatureData(__assign(__assign({ v: signature.v, r: signature.r, s: signature.s, deadline: signatureDeadline }, (allowed ? { allowed: allowed } : { amount: value })), { nonce: nonceNumber, chainId: chainId, owner: account, spender: spender, tokenAddress: tokenAddress, permitType: permitInfo.type })); - })]; - }); - }); - }, - }; - }, [ - currencyAmount, - eip2612Contract, - account, - chainId, - isArgentWallet, - transactionDeadline, - library, - tokenNonceState.loading, - tokenNonceState.valid, - tokenNonceState.result, - tokenAddress, - spender, - permitInfo, - signatureData, - ]); -} -function useERC20PermitFromTrade(trade, allowedSlippage, transactionDeadline) { - var chainId = useActiveWeb3React().chainId; - var swapRouterAddress = chainId - ? // v2 router does not support - trade instanceof v2Sdk.Trade - ? undefined - : trade instanceof v3Sdk.Trade - ? V3_ROUTER_ADDRESS[chainId] - : SWAP_ROUTER_ADDRESSES[chainId] - : undefined; - var amountToApprove = React.useMemo(function () { return (trade ? trade.maximumAmountIn(allowedSlippage) : undefined); }, [trade, allowedSlippage]); - return useERC20Permit(amountToApprove, swapRouterAddress, transactionDeadline, null); -} - -/** - * Returns true if the input currency or output currency cannot be traded in the interface - * @param currencyIn the input currency to check - * @param currencyOut the output currency to check - */ -function useIsSwapUnsupported(currencyIn, currencyOut) { - var unsupportedTokens = useUnsupportedTokens(); - return React.useMemo(function () { - if (!unsupportedTokens) { - return false; - } - var currencyInUnsupported = Boolean((currencyIn === null || currencyIn === void 0 ? void 0 : currencyIn.isToken) && unsupportedTokens[currencyIn.address]); - var currencyOutUnsupported = Boolean((currencyOut === null || currencyOut === void 0 ? void 0 : currencyOut.isToken) && unsupportedTokens[currencyOut.address]); - return currencyInUnsupported || currencyOutUnsupported; - }, [currencyIn, currencyOut, unsupportedTokens]); -} - -var WrapType; -(function (WrapType) { - WrapType[WrapType["NOT_APPLICABLE"] = 0] = "NOT_APPLICABLE"; - WrapType[WrapType["WRAP"] = 1] = "WRAP"; - WrapType[WrapType["UNWRAP"] = 2] = "UNWRAP"; -})(WrapType || (WrapType = {})); -var NOT_APPLICABLE = { wrapType: WrapType.NOT_APPLICABLE }; -var WrapInputError; -(function (WrapInputError) { - WrapInputError[WrapInputError["NO_ERROR"] = 0] = "NO_ERROR"; - WrapInputError[WrapInputError["ENTER_NATIVE_AMOUNT"] = 1] = "ENTER_NATIVE_AMOUNT"; - WrapInputError[WrapInputError["ENTER_WRAPPED_AMOUNT"] = 2] = "ENTER_WRAPPED_AMOUNT"; - WrapInputError[WrapInputError["INSUFFICIENT_NATIVE_BALANCE"] = 3] = "INSUFFICIENT_NATIVE_BALANCE"; - WrapInputError[WrapInputError["INSUFFICIENT_WRAPPED_BALANCE"] = 4] = "INSUFFICIENT_WRAPPED_BALANCE"; -})(WrapInputError || (WrapInputError = {})); -function WrapErrorText(_a) { - var wrapInputError = _a.wrapInputError; - var native = useNativeCurrency(); - var wrapped = native === null || native === void 0 ? void 0 : native.wrapped; - switch (wrapInputError) { - case WrapInputError.NO_ERROR: - return null; - case WrapInputError.ENTER_NATIVE_AMOUNT: - return jsxRuntime.jsxs(macro.Trans, { children: ["Enter ", native === null || native === void 0 ? void 0 : native.symbol, " amount"] }, void 0); - case WrapInputError.ENTER_WRAPPED_AMOUNT: - return jsxRuntime.jsxs(macro.Trans, { children: ["Enter ", wrapped === null || wrapped === void 0 ? void 0 : wrapped.symbol, " amount"] }, void 0); - case WrapInputError.INSUFFICIENT_NATIVE_BALANCE: - return jsxRuntime.jsxs(macro.Trans, { children: ["Insufficient ", native === null || native === void 0 ? void 0 : native.symbol, " balance"] }, void 0); - case WrapInputError.INSUFFICIENT_WRAPPED_BALANCE: - return jsxRuntime.jsxs(macro.Trans, { children: ["Insufficient ", wrapped === null || wrapped === void 0 ? void 0 : wrapped.symbol, " balance"] }, void 0); - } -} -/** - * Given the selected input and output currency, return a wrap callback - * @param inputCurrency the selected input currency - * @param outputCurrency the selected output currency - * @param typedValue the user input value - */ -function useWrapCallback(inputCurrency, outputCurrency, typedValue) { - var _this = this; - var _a = useActiveWeb3React(), chainId = _a.chainId, account = _a.account; - var wethContract = useWETHContract(); - var balance = useCurrencyBalance(account !== null && account !== void 0 ? account : undefined, inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : undefined); - // we can always parse the amount typed as the input currency, since wrapping is 1:1 - var inputAmount = React.useMemo(function () { return tryParseCurrencyAmount(typedValue, inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : undefined); }, [inputCurrency, typedValue]); - var addTransaction = useTransactionAdder(); - return React.useMemo(function () { - if (!wethContract || !chainId || !inputCurrency || !outputCurrency) - return NOT_APPLICABLE; - var weth = WRAPPED_NATIVE_CURRENCY[chainId]; - if (!weth) - return NOT_APPLICABLE; - var hasInputAmount = Boolean(inputAmount === null || inputAmount === void 0 ? void 0 : inputAmount.greaterThan('0')); - var sufficientBalance = inputAmount && balance && !balance.lessThan(inputAmount); - if (inputCurrency.isNative && weth.equals(outputCurrency)) { - return { - wrapType: WrapType.WRAP, - execute: sufficientBalance && inputAmount - ? function () { return __awaiter(_this, void 0, void 0, function () { - var txReceipt, error_1; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - _a.trys.push([0, 2, , 3]); - return [4 /*yield*/, wethContract.deposit({ value: "0x" + inputAmount.quotient.toString(16) })]; - case 1: - txReceipt = _a.sent(); - addTransaction(txReceipt, { - type: TransactionType.WRAP, - unwrapped: false, - currencyAmountRaw: inputAmount === null || inputAmount === void 0 ? void 0 : inputAmount.quotient.toString(), - chainId: chainId, - }); - return [3 /*break*/, 3]; - case 2: - error_1 = _a.sent(); - console.error('Could not deposit', error_1); - return [3 /*break*/, 3]; - case 3: return [2 /*return*/]; - } - }); - }); } - : undefined, - inputError: sufficientBalance - ? undefined - : hasInputAmount - ? WrapInputError.INSUFFICIENT_NATIVE_BALANCE - : WrapInputError.ENTER_NATIVE_AMOUNT, - }; - } - else if (weth.equals(inputCurrency) && outputCurrency.isNative) { - return { - wrapType: WrapType.UNWRAP, - execute: sufficientBalance && inputAmount - ? function () { return __awaiter(_this, void 0, void 0, function () { - var txReceipt, error_2; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - _a.trys.push([0, 2, , 3]); - return [4 /*yield*/, wethContract.withdraw("0x" + inputAmount.quotient.toString(16))]; - case 1: - txReceipt = _a.sent(); - addTransaction(txReceipt, { - type: TransactionType.WRAP, - unwrapped: true, - currencyAmountRaw: inputAmount === null || inputAmount === void 0 ? void 0 : inputAmount.quotient.toString(), - chainId: chainId, - }); - return [3 /*break*/, 3]; - case 2: - error_2 = _a.sent(); - console.error('Could not withdraw', error_2); - return [3 /*break*/, 3]; - case 3: return [2 /*return*/]; - } - }); - }); } - : undefined, - inputError: sufficientBalance - ? undefined - : hasInputAmount - ? WrapInputError.INSUFFICIENT_WRAPPED_BALANCE - : WrapInputError.ENTER_WRAPPED_AMOUNT, - }; - } - else { - return NOT_APPLICABLE; - } - }, [wethContract, chainId, inputCurrency, outputCurrency, inputAmount, balance, addTransaction]); -} - -var MIN_NATIVE_CURRENCY_FOR_GAS = JSBI__default["default"].exponentiate(JSBI__default["default"].BigInt(10), JSBI__default["default"].BigInt(16)); // .01 ETH -/** - * Given some token amount, return the max that can be spent of it - * @param currencyAmount to return max of - */ -function maxAmountSpend(currencyAmount) { - if (!currencyAmount) - return undefined; - if (currencyAmount.currency.isNative) { - if (JSBI__default["default"].greaterThan(currencyAmount.quotient, MIN_NATIVE_CURRENCY_FOR_GAS)) { - return sdkCore.CurrencyAmount.fromRawAmount(currencyAmount.currency, JSBI__default["default"].subtract(currencyAmount.quotient, MIN_NATIVE_CURRENCY_FOR_GAS)); - } - else { - return sdkCore.CurrencyAmount.fromRawAmount(currencyAmount.currency, JSBI__default["default"].BigInt(0)); - } - } - return currencyAmount; -} - -var BodyWrapper = styled__default["default"].main(templateObject_1$2 || (templateObject_1$2 = __makeTemplateObject(["\n position: relative;\n margin-top: ", ";\n max-width: ", ";\n width: 100%;\n background: ", ";\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 border-radius: 24px;\n margin-top: 1rem;\n margin-left: auto;\n margin-right: auto;\n z-index: ", ";\n"], ["\n position: relative;\n margin-top: ", ";\n max-width: ", ";\n width: 100%;\n background: ", ";\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 border-radius: 24px;\n margin-top: 1rem;\n margin-left: auto;\n margin-right: auto;\n z-index: ", ";\n" - /** - * The styled container element that wraps the content of most pages and the tabs. - */ -])), function (_a) { - var margin = _a.margin; - return margin !== null && margin !== void 0 ? margin : '0px'; -}, function (_a) { - var maxWidth = _a.maxWidth; - return maxWidth !== null && maxWidth !== void 0 ? maxWidth : '480px'; -}, function (_a) { - var theme = _a.theme; - return theme.bg0; -}, Z_INDEX.deprecated_content); -/** - * The styled container element that wraps the content of most pages and the tabs. - */ -function AppBody(_a) { - var children = _a.children, rest = __rest(_a, ["children"]); - return jsxRuntime.jsx(BodyWrapper, __assign({}, rest, { children: children }), void 0); -} -var templateObject_1$2; - -var AlertWrapper = styled__default["default"].div(templateObject_1$1 || (templateObject_1$1 = __makeTemplateObject(["\n max-width: 460px;\n width: 100%;\n"], ["\n max-width: 460px;\n width: 100%;\n"]))); -function Swap(_a) { - var _this = this; - var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l; - var history = _a.history; - var account = useActiveWeb3React().account; - var loadedUrlParams = useDefaultsFromURLSearch(); - // token warning stuff - var _m = __read([ - useCurrency(loadedUrlParams === null || loadedUrlParams === void 0 ? void 0 : loadedUrlParams.inputCurrencyId), - useCurrency(loadedUrlParams === null || loadedUrlParams === void 0 ? void 0 : loadedUrlParams.outputCurrencyId), - ], 2), loadedInputCurrency = _m[0], loadedOutputCurrency = _m[1]; - var _o = __read(React.useState(false), 2), dismissTokenWarning = _o[0], setDismissTokenWarning = _o[1]; - var urlLoadedTokens = React.useMemo(function () { var _a, _b; return (_b = (_a = [loadedInputCurrency, loadedOutputCurrency]) === null || _a === void 0 ? void 0 : _a.filter(function (c) { var _a; return (_a = c === null || c === void 0 ? void 0 : c.isToken) !== null && _a !== void 0 ? _a : false; })) !== null && _b !== void 0 ? _b : []; }, [loadedInputCurrency, loadedOutputCurrency]); - var handleConfirmTokenWarning = React.useCallback(function () { - setDismissTokenWarning(true); - }, []); - // dismiss warning if all imported tokens are in active lists - var defaultTokens = useAllTokens(); - var importTokensNotInDefault = React.useMemo(function () { - return urlLoadedTokens && - urlLoadedTokens.filter(function (token) { - return !Boolean(token.address in defaultTokens); - }); - }, [defaultTokens, urlLoadedTokens]); - var theme = React.useContext(styled.ThemeContext); - // toggle wallet when disconnected - var toggleWalletModal = useWalletModalToggle(); - // for expert mode - var _p = __read(useExpertModeManager(), 1), isExpertMode = _p[0]; - // swap state - var _q = useSwapState(), independentField = _q.independentField, typedValue = _q.typedValue, recipient = _q.recipient; - var _r = useDerivedSwapInfo(), _s = _r.trade, tradeState = _s.state, trade = _s.trade, allowedSlippage = _r.allowedSlippage, currencyBalances = _r.currencyBalances, parsedAmount = _r.parsedAmount, currencies = _r.currencies, swapInputError = _r.inputError; - var _t = useWrapCallback(currencies[Field.INPUT], currencies[Field.OUTPUT], typedValue), wrapType = _t.wrapType, onWrap = _t.execute, wrapInputError = _t.inputError; - var showWrap = wrapType !== WrapType.NOT_APPLICABLE; - var recipientAddress = useENSAddress(recipient).address; - var parsedAmounts = React.useMemo(function () { - var _a, _b; - return showWrap - ? (_a = {}, - _a[Field.INPUT] = parsedAmount, - _a[Field.OUTPUT] = parsedAmount, - _a) : (_b = {}, - _b[Field.INPUT] = independentField === Field.INPUT ? parsedAmount : trade === null || trade === void 0 ? void 0 : trade.inputAmount, - _b[Field.OUTPUT] = independentField === Field.OUTPUT ? parsedAmount : trade === null || trade === void 0 ? void 0 : trade.outputAmount, - _b); - }, [independentField, parsedAmount, showWrap, trade]); - var _u = __read(React.useMemo(function () { return [!(trade === null || trade === void 0 ? void 0 : trade.swaps), TradeState.LOADING === tradeState, TradeState.SYNCING === tradeState]; }, [trade, tradeState]), 3), routeNotFound = _u[0], routeIsLoading = _u[1], routeIsSyncing = _u[2]; - var fiatValueInput = useUSDCValue(parsedAmounts[Field.INPUT]); - var fiatValueOutput = useUSDCValue(parsedAmounts[Field.OUTPUT]); - var priceImpact = React.useMemo(function () { return (routeIsSyncing ? undefined : computeFiatValuePriceImpact(fiatValueInput, fiatValueOutput)); }, [fiatValueInput, fiatValueOutput, routeIsSyncing]); - var _v = useSwapActionHandlers(), onSwitchTokens = _v.onSwitchTokens, onCurrencySelection = _v.onCurrencySelection, onUserInput = _v.onUserInput, onChangeRecipient = _v.onChangeRecipient; - var isValid = !swapInputError; - var dependentField = independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT; - var handleTypeInput = React.useCallback(function (value) { - onUserInput(Field.INPUT, value); - }, [onUserInput]); - var handleTypeOutput = React.useCallback(function (value) { - onUserInput(Field.OUTPUT, value); - }, [onUserInput]); - // reset if they close warning without tokens in params - var handleDismissTokenWarning = React.useCallback(function () { - setDismissTokenWarning(true); - history.push('/swap/'); - }, [history]); - // modal and loading - var _w = __read(React.useState({ - showConfirm: false, - tradeToConfirm: undefined, - attemptingTxn: false, - swapErrorMessage: undefined, - txHash: undefined, - }), 2), _x = _w[0], showConfirm = _x.showConfirm, tradeToConfirm = _x.tradeToConfirm, swapErrorMessage = _x.swapErrorMessage, attemptingTxn = _x.attemptingTxn, txHash = _x.txHash, setSwapState = _w[1]; - var formattedAmounts = React.useMemo(function () { - var _a; - var _b, _c, _d, _e; - return (_a = {}, - _a[independentField] = typedValue, - _a[dependentField] = showWrap - ? (_c = (_b = parsedAmounts[independentField]) === null || _b === void 0 ? void 0 : _b.toExact()) !== null && _c !== void 0 ? _c : '' - : (_e = (_d = parsedAmounts[dependentField]) === null || _d === void 0 ? void 0 : _d.toSignificant(6)) !== null && _e !== void 0 ? _e : '', - _a); - }, [dependentField, independentField, parsedAmounts, showWrap, typedValue]); - var userHasSpecifiedInputOutput = Boolean(currencies[Field.INPUT] && currencies[Field.OUTPUT] && ((_b = parsedAmounts[independentField]) === null || _b === void 0 ? void 0 : _b.greaterThan(JSBI__default["default"].BigInt(0)))); - var approvalOptimizedTrade = useApprovalOptimizedTrade(trade, allowedSlippage); - var approvalOptimizedTradeString = approvalOptimizedTrade instanceof v2Sdk.Trade - ? 'V2SwapRouter' - : approvalOptimizedTrade instanceof v3Sdk.Trade - ? 'V3SwapRouter' - : 'SwapRouter'; - // check whether the user has approved the router on the input token - var _y = __read(useApproveCallbackFromTrade(approvalOptimizedTrade, allowedSlippage), 2), approvalState = _y[0], approveCallback = _y[1]; - var transactionDeadline = useTransactionDeadline(); - var _z = useERC20PermitFromTrade(approvalOptimizedTrade, allowedSlippage, transactionDeadline), signatureState = _z.state, signatureData = _z.signatureData, gatherPermitSignature = _z.gatherPermitSignature; - var handleApprove = React.useCallback(function () { return __awaiter(_this, void 0, void 0, function () { - var error_1; - var _a; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - if (!(signatureState === UseERC20PermitState.NOT_SIGNED && gatherPermitSignature)) return [3 /*break*/, 7]; - _b.label = 1; - case 1: - _b.trys.push([1, 3, , 6]); - return [4 /*yield*/, gatherPermitSignature()]; - case 2: - _b.sent(); - return [3 /*break*/, 6]; - case 3: - error_1 = _b.sent(); - if (!((error_1 === null || error_1 === void 0 ? void 0 : error_1.code) !== 4001)) return [3 /*break*/, 5]; - return [4 /*yield*/, approveCallback()]; - case 4: - _b.sent(); - _b.label = 5; - case 5: return [3 /*break*/, 6]; - case 6: return [3 /*break*/, 9]; - case 7: return [4 /*yield*/, approveCallback()]; - case 8: - _b.sent(); - ReactGA__default["default"].event({ - category: 'Swap', - action: 'Approve', - label: [approvalOptimizedTradeString, (_a = approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 ? void 0 : approvalOptimizedTrade.inputAmount) === null || _a === void 0 ? void 0 : _a.currency.symbol].join('/'), - }); - _b.label = 9; - case 9: return [2 /*return*/]; - } - }); - }); }, [ - signatureState, - gatherPermitSignature, - approveCallback, - approvalOptimizedTradeString, - (_c = approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 ? void 0 : approvalOptimizedTrade.inputAmount) === null || _c === void 0 ? void 0 : _c.currency.symbol, - ]); - // check if user has gone through approval process, used to show two step buttons, reset on token change - var _0 = __read(React.useState(false), 2), approvalSubmitted = _0[0], setApprovalSubmitted = _0[1]; - // mark when a user has submitted an approval, reset onTokenSelection for input field - React.useEffect(function () { - if (approvalState === ApprovalState.PENDING) { - setApprovalSubmitted(true); - } - }, [approvalState, approvalSubmitted]); - var maxInputAmount = React.useMemo(function () { return maxAmountSpend(currencyBalances[Field.INPUT]); }, [currencyBalances]); - var showMaxButton = Boolean((maxInputAmount === null || maxInputAmount === void 0 ? void 0 : maxInputAmount.greaterThan(0)) && !((_d = parsedAmounts[Field.INPUT]) === null || _d === void 0 ? void 0 : _d.equalTo(maxInputAmount))); - // the callback to execute the swap - var _1 = useSwapCallback(approvalOptimizedTrade, allowedSlippage, recipient, signatureData), swapCallback = _1.callback, swapCallbackError = _1.error; - var handleSwap = React.useCallback(function () { - if (!swapCallback) { - return; - } - if (priceImpact && !confirmPriceImpactWithoutFee(priceImpact)) { - return; - } - setSwapState({ attemptingTxn: true, tradeToConfirm: tradeToConfirm, showConfirm: showConfirm, swapErrorMessage: undefined, txHash: undefined }); - swapCallback() - .then(function (hash) { - var _a, _b, _c, _d; - setSwapState({ attemptingTxn: false, tradeToConfirm: tradeToConfirm, showConfirm: showConfirm, swapErrorMessage: undefined, txHash: hash }); - ReactGA__default["default"].event({ - category: 'Swap', - action: recipient === null - ? 'Swap w/o Send' - : (recipientAddress !== null && recipientAddress !== void 0 ? recipientAddress : recipient) === account - ? 'Swap w/o Send + recipient' - : 'Swap w/ Send', - label: [ - approvalOptimizedTradeString, - (_b = (_a = approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 ? void 0 : approvalOptimizedTrade.inputAmount) === null || _a === void 0 ? void 0 : _a.currency) === null || _b === void 0 ? void 0 : _b.symbol, - (_d = (_c = approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 ? void 0 : approvalOptimizedTrade.outputAmount) === null || _c === void 0 ? void 0 : _c.currency) === null || _d === void 0 ? void 0 : _d.symbol, - 'MH', - ].join('/'), - }); - }) - .catch(function (error) { - setSwapState({ - attemptingTxn: false, - tradeToConfirm: tradeToConfirm, - showConfirm: showConfirm, - swapErrorMessage: error.message, - txHash: undefined, - }); - }); - }, [ - swapCallback, - priceImpact, - tradeToConfirm, - showConfirm, - recipient, - recipientAddress, - account, - approvalOptimizedTradeString, - (_f = (_e = approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 ? void 0 : approvalOptimizedTrade.inputAmount) === null || _e === void 0 ? void 0 : _e.currency) === null || _f === void 0 ? void 0 : _f.symbol, - (_h = (_g = approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 ? void 0 : approvalOptimizedTrade.outputAmount) === null || _g === void 0 ? void 0 : _g.currency) === null || _h === void 0 ? void 0 : _h.symbol, - ]); - // errors - var _2 = __read(React.useState(false), 2), showInverted = _2[0], setShowInverted = _2[1]; - // warnings on the greater of fiat value price impact and execution price impact - var priceImpactSeverity = React.useMemo(function () { - var executionPriceImpact = trade === null || trade === void 0 ? void 0 : trade.priceImpact; - return warningSeverity(executionPriceImpact && priceImpact - ? executionPriceImpact.greaterThan(priceImpact) - ? executionPriceImpact - : priceImpact - : executionPriceImpact !== null && executionPriceImpact !== void 0 ? executionPriceImpact : priceImpact); - }, [priceImpact, trade]); - var isArgentWallet = useIsArgentWallet(); - // show approve flow when: no error on inputs, not approved or pending, or approved in current session - // never show if price impact is above threshold in non expert mode - var showApproveFlow = !isArgentWallet && - !swapInputError && - (approvalState === ApprovalState.NOT_APPROVED || - approvalState === ApprovalState.PENDING || - (approvalSubmitted && approvalState === ApprovalState.APPROVED)) && - !(priceImpactSeverity > 3 && !isExpertMode); - var handleConfirmDismiss = React.useCallback(function () { - setSwapState({ showConfirm: false, tradeToConfirm: tradeToConfirm, attemptingTxn: attemptingTxn, swapErrorMessage: swapErrorMessage, txHash: txHash }); - // if there was a tx hash, we want to clear the input - if (txHash) { - onUserInput(Field.INPUT, ''); - } - }, [attemptingTxn, onUserInput, swapErrorMessage, tradeToConfirm, txHash]); - var handleAcceptChanges = React.useCallback(function () { - setSwapState({ tradeToConfirm: trade, swapErrorMessage: swapErrorMessage, txHash: txHash, attemptingTxn: attemptingTxn, showConfirm: showConfirm }); - }, [attemptingTxn, showConfirm, swapErrorMessage, trade, txHash]); - var handleInputSelect = React.useCallback(function (inputCurrency) { - setApprovalSubmitted(false); // reset 2 step UI for approvals - onCurrencySelection(Field.INPUT, inputCurrency); - }, [onCurrencySelection]); - var handleMaxInput = React.useCallback(function () { - maxInputAmount && onUserInput(Field.INPUT, maxInputAmount.toExact()); - ReactGA__default["default"].event({ - category: 'Swap', - action: 'Max', - }); - }, [maxInputAmount, onUserInput]); - var handleOutputSelect = React.useCallback(function (outputCurrency) { return onCurrencySelection(Field.OUTPUT, outputCurrency); }, [onCurrencySelection]); - var swapIsUnsupported = useIsSwapUnsupported(currencies[Field.INPUT], currencies[Field.OUTPUT]); - var priceImpactTooHigh = priceImpactSeverity > 3 && !isExpertMode; - return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(TokenWarningModal, { isOpen: importTokensNotInDefault.length > 0 && !dismissTokenWarning, tokens: importTokensNotInDefault, onConfirm: handleConfirmTokenWarning, onDismiss: handleDismissTokenWarning }, void 0), jsxRuntime.jsxs(AppBody, { children: [jsxRuntime.jsx(SwapHeader, { allowedSlippage: allowedSlippage }, void 0), jsxRuntime.jsxs(Wrapper$d, __assign({ id: "swap-page" }, { children: [jsxRuntime.jsx(ConfirmSwapModal, { isOpen: showConfirm, trade: trade, originalTrade: tradeToConfirm, onAcceptChanges: handleAcceptChanges, attemptingTxn: attemptingTxn, txHash: txHash, recipient: recipient, allowedSlippage: allowedSlippage, onConfirm: handleSwap, swapErrorMessage: swapErrorMessage, onDismiss: handleConfirmDismiss }, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: 'sm' }, { children: [jsxRuntime.jsxs("div", __assign({ style: { display: 'relative' } }, { children: [jsxRuntime.jsx(CurrencyInputPanel, { label: independentField === Field.OUTPUT && !showWrap ? jsxRuntime.jsx(macro.Trans, { children: "From (at most)" }, void 0) : jsxRuntime.jsx(macro.Trans, { children: "From" }, void 0), value: formattedAmounts[Field.INPUT], showMaxButton: showMaxButton, currency: currencies[Field.INPUT], onUserInput: handleTypeInput, onMax: handleMaxInput, fiatValue: fiatValueInput !== null && fiatValueInput !== void 0 ? fiatValueInput : undefined, onCurrencySelect: handleInputSelect, otherCurrency: currencies[Field.OUTPUT], showCommonBases: true, id: "swap-currency-input", loading: independentField === Field.OUTPUT && routeIsSyncing }, void 0), jsxRuntime.jsx(ArrowWrapper$1, __assign({ clickable: true }, { children: jsxRuntime.jsx(reactFeather.ArrowDown, { size: "16", onClick: function () { - setApprovalSubmitted(false); // reset 2 step UI for approvals - onSwitchTokens(); - }, color: currencies[Field.INPUT] && currencies[Field.OUTPUT] ? theme.text1 : theme.text3 }, void 0) }), void 0), jsxRuntime.jsx(CurrencyInputPanel, { value: formattedAmounts[Field.OUTPUT], onUserInput: handleTypeOutput, label: independentField === Field.INPUT && !showWrap ? jsxRuntime.jsx(macro.Trans, { children: "To (at least)" }, void 0) : jsxRuntime.jsx(macro.Trans, { children: "To" }, void 0), showMaxButton: false, hideBalance: false, fiatValue: fiatValueOutput !== null && fiatValueOutput !== void 0 ? fiatValueOutput : undefined, priceImpact: priceImpact, currency: currencies[Field.OUTPUT], onCurrencySelect: handleOutputSelect, otherCurrency: currencies[Field.INPUT], showCommonBases: true, id: "swap-currency-output", loading: independentField === Field.INPUT && routeIsSyncing }, void 0)] }), void 0), recipient !== null && !showWrap ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs(AutoRow, __assign({ justify: "space-between", style: { padding: '0 1rem' } }, { children: [jsxRuntime.jsx(ArrowWrapper$1, __assign({ clickable: false }, { children: jsxRuntime.jsx(reactFeather.ArrowDown, { size: "16", color: theme.text2 }, void 0) }), void 0), jsxRuntime.jsx(LinkStyledButton, __assign({ id: "remove-recipient-button", onClick: function () { return onChangeRecipient(null); } }, { children: jsxRuntime.jsx(macro.Trans, { children: "- Remove recipient" }, void 0) }), void 0)] }), void 0), jsxRuntime.jsx(AddressInputPanel, { id: "recipient", value: recipient, onChange: onChangeRecipient }, void 0)] }, void 0)) : null, !showWrap && userHasSpecifiedInputOutput && (trade || routeIsLoading || routeIsSyncing) && (jsxRuntime.jsx(SwapDetailsDropdown, { trade: trade, syncing: routeIsSyncing, loading: routeIsLoading, showInverted: showInverted, setShowInverted: setShowInverted, allowedSlippage: allowedSlippage }, void 0)), jsxRuntime.jsxs("div", { children: [swapIsUnsupported ? (jsxRuntime.jsx(ButtonPrimary, __assign({ disabled: true }, { children: jsxRuntime.jsx(ThemedText.Main, __assign({ mb: "4px" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Unsupported Asset" }, void 0) }), void 0) }), void 0)) : !account ? (jsxRuntime.jsx(ButtonLight, __assign({ onClick: toggleWalletModal }, { children: jsxRuntime.jsx(macro.Trans, { children: "Connect Wallet" }, void 0) }), void 0)) : showWrap ? (jsxRuntime.jsx(ButtonPrimary, __assign({ disabled: Boolean(wrapInputError), onClick: onWrap }, { children: wrapInputError ? (jsxRuntime.jsx(WrapErrorText, { wrapInputError: wrapInputError }, void 0)) : wrapType === WrapType.WRAP ? (jsxRuntime.jsx(macro.Trans, { children: "Wrap" }, void 0)) : wrapType === WrapType.UNWRAP ? (jsxRuntime.jsx(macro.Trans, { children: "Unwrap" }, void 0)) : null }), void 0)) : routeNotFound && userHasSpecifiedInputOutput && !routeIsLoading && !routeIsSyncing ? (jsxRuntime.jsx(GreyCard, __assign({ style: { textAlign: 'center' } }, { children: jsxRuntime.jsx(ThemedText.Main, __assign({ mb: "4px" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Insufficient liquidity for this trade." }, void 0) }), void 0) }), void 0)) : showApproveFlow ? (jsxRuntime.jsx(AutoRow, __assign({ style: { flexWrap: 'nowrap', width: '100%' } }, { children: jsxRuntime.jsxs(AutoColumn, __assign({ style: { width: '100%' }, gap: "12px" }, { children: [jsxRuntime.jsx(ButtonConfirmed, __assign({ onClick: handleApprove, disabled: approvalState !== ApprovalState.NOT_APPROVED || - approvalSubmitted || - signatureState === UseERC20PermitState.SIGNED, width: "100%", altDisabledStyle: approvalState === ApprovalState.PENDING, confirmed: approvalState === ApprovalState.APPROVED || signatureState === UseERC20PermitState.SIGNED }, { children: jsxRuntime.jsxs(AutoRow, __assign({ justify: "space-between", style: { flexWrap: 'nowrap' } }, { children: [jsxRuntime.jsxs("span", __assign({ style: { display: 'flex', alignItems: 'center' } }, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: currencies[Field.INPUT], size: '20px', style: { marginRight: '8px', flexShrink: 0 } }, void 0), approvalState === ApprovalState.APPROVED || signatureState === UseERC20PermitState.SIGNED ? (jsxRuntime.jsxs(macro.Trans, { children: ["You can now trade ", (_j = currencies[Field.INPUT]) === null || _j === void 0 ? void 0 : _j.symbol] }, void 0)) : (jsxRuntime.jsxs(macro.Trans, { children: ["Allow the Uniswap Protocol to use your ", (_k = currencies[Field.INPUT]) === null || _k === void 0 ? void 0 : _k.symbol] }, void 0))] }), void 0), approvalState === ApprovalState.PENDING ? (jsxRuntime.jsx(Loader, { stroke: "white" }, void 0)) : (approvalSubmitted && approvalState === ApprovalState.APPROVED) || - signatureState === UseERC20PermitState.SIGNED ? (jsxRuntime.jsx(reactFeather.CheckCircle, { size: "20", color: theme.green1 }, void 0)) : (jsxRuntime.jsx(MouseoverTooltip, __assign({ text: jsxRuntime.jsxs(macro.Trans, { children: ["You must give the Uniswap smart contracts permission to use your", ' ', (_l = currencies[Field.INPUT]) === null || _l === void 0 ? void 0 : _l.symbol, ". You only have to do this once per token."] }, void 0) }, { children: jsxRuntime.jsx(reactFeather.HelpCircle, { size: "20", color: 'white', style: { marginLeft: '8px' } }, void 0) }), void 0))] }), void 0) }), void 0), jsxRuntime.jsx(ButtonError, __assign({ onClick: function () { - if (isExpertMode) { - handleSwap(); - } - else { - setSwapState({ - tradeToConfirm: trade, - attemptingTxn: false, - swapErrorMessage: undefined, - showConfirm: true, - txHash: undefined, - }); - } - }, width: "100%", id: "swap-button", disabled: !isValid || - routeIsSyncing || - routeIsLoading || - (approvalState !== ApprovalState.APPROVED && signatureState !== UseERC20PermitState.SIGNED) || - priceImpactTooHigh, error: isValid && priceImpactSeverity > 2 }, { children: jsxRuntime.jsx(rebass.Text, __assign({ fontSize: 16, fontWeight: 500 }, { children: priceImpactTooHigh ? (jsxRuntime.jsx(macro.Trans, { children: "High Price Impact" }, void 0)) : trade && priceImpactSeverity > 2 ? (jsxRuntime.jsx(macro.Trans, { children: "Swap Anyway" }, void 0)) : (jsxRuntime.jsx(macro.Trans, { children: "Swap" }, void 0)) }), void 0) }), void 0)] }), void 0) }), void 0)) : (jsxRuntime.jsx(ButtonError, __assign({ onClick: function () { - if (isExpertMode) { - handleSwap(); - } - else { - setSwapState({ - tradeToConfirm: trade, - attemptingTxn: false, - swapErrorMessage: undefined, - showConfirm: true, - txHash: undefined, - }); - } - }, id: "swap-button", disabled: !isValid || routeIsSyncing || routeIsLoading || priceImpactTooHigh || !!swapCallbackError, error: isValid && priceImpactSeverity > 2 && !swapCallbackError }, { children: jsxRuntime.jsx(rebass.Text, __assign({ fontSize: 20, fontWeight: 500 }, { children: swapInputError ? (swapInputError) : routeIsSyncing || routeIsLoading ? (jsxRuntime.jsx(macro.Trans, { children: "Swap" }, void 0)) : priceImpactSeverity > 2 ? (jsxRuntime.jsx(macro.Trans, { children: "Swap Anyway" }, void 0)) : priceImpactTooHigh ? (jsxRuntime.jsx(macro.Trans, { children: "Price Impact Too High" }, void 0)) : (jsxRuntime.jsx(macro.Trans, { children: "Swap" }, void 0)) }), void 0) }), void 0)), isExpertMode && swapErrorMessage ? jsxRuntime.jsx(SwapCallbackError, { error: swapErrorMessage }, void 0) : null] }, void 0)] }), void 0)] }), void 0)] }, void 0), jsxRuntime.jsx(AlertWrapper, { children: jsxRuntime.jsx(NetworkAlert, {}, void 0) }, void 0), jsxRuntime.jsx(SwitchLocaleLink, {}, void 0), !swapIsUnsupported ? null : (jsxRuntime.jsx(UnsupportedCurrencyFooter, { show: swapIsUnsupported, currencies: [currencies[Field.INPUT], currencies[Field.OUTPUT]] }, void 0))] }, void 0)); -} -var templateObject_1$1; - -// This optional code is used to register a service worker. -// register() is not called by default. -// This lets the app load faster on subsequent visits in production, and gives -// it offline capabilities. However, it also means that developers (and users) -// will only see deployed updates on subsequent visits to a page, after all the -// existing tabs open on the page have been closed, since previously cached -// resources are updated in the background. -// To learn more about the benefits of this model and instructions on how to -// opt-in, read https://cra.link/PWA -var isLocalhost = Boolean(window.location.hostname === 'localhost' || - // [::1] is the IPv6 localhost address. - window.location.hostname === '[::1]' || - // 127.0.0.0/8 are considered localhost for IPv4. - window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)); -function registerValidSW(swUrl, config) { - navigator.serviceWorker - .register(swUrl) - .then(function (registration) { - registration.onupdatefound = function () { - var installingWorker = registration.installing; - if (installingWorker == null) { - return; - } - installingWorker.onstatechange = function () { - if (installingWorker.state === 'installed') { - if (navigator.serviceWorker.controller) { - // At this point, the updated precached content has been fetched, - // but the previous service worker will still serve the older - // content until all client tabs are closed. - console.log('New content is available and will be used when all ' + - 'tabs for this page are closed. See https://cra.link/PWA.'); - // Execute callback - if (config && config.onUpdate) { - config.onUpdate(registration); - } - } - else { - // At this point, everything has been precached. - // It's the perfect time to display a - // "Content is cached for offline use." message. - console.log('Content is cached for offline use.'); - // Execute callback - if (config && config.onSuccess) { - config.onSuccess(registration); - } - } - } - }; - }; - }) - .catch(function (error) { - console.error('Error during service worker registration:', error); - }); -} -function checkValidServiceWorker(swUrl, config) { - // Check if the service worker can be found. If it can't reload the page. - fetch(swUrl, { - headers: { 'Service-Worker': 'script' }, - }) - .then(function (response) { - // Ensure service worker exists, and that we really are getting a JS file. - var contentType = response.headers.get('content-type'); - if (response.status === 404 || (contentType != null && contentType.indexOf('javascript') === -1)) { - // No service worker found. Probably a different app. Reload the page. - navigator.serviceWorker.ready.then(function (registration) { - registration.unregister().then(function () { - window.location.reload(); - }); - }); - } - else { - // Service worker found. Proceed as normal. - registerValidSW(swUrl, config); - } - }) - .catch(function () { - console.log('No internet connection found. App is running in offline mode.'); - }); -} -function register(config) { - if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { - // The URL constructor is available in all browsers that support SW. - var publicUrl = new URL(process.env.PUBLIC_URL, window.location.href); - if (publicUrl.origin !== window.location.origin) { - // Our service worker won't work if PUBLIC_URL is on a different origin - // from what our page is served on. This might happen if a CDN is used to - // serve assets; see https://github.com/facebook/create-react-app/issues/2374 - return; - } - window.addEventListener('load', function () { - var swUrl = process.env.PUBLIC_URL + "/service-worker.js"; - if (isLocalhost) { - // This is running on localhost. Let's check if a service worker still exists or not. - checkValidServiceWorker(swUrl, config); - // Add some additional logging to localhost, pointing developers to the - // service worker/PWA documentation. - navigator.serviceWorker.ready.then(function () { - console.log('This web app is being served cache-first by a service ' + - 'worker. To learn more, visit https://cra.link/PWA'); - }); - } - else { - // Is not localhost. Just register service worker - registerValidSW(swUrl, config); - } - }); - } -} -function unregister() { - if ('serviceWorker' in navigator) { - navigator.serviceWorker.ready - .then(function (registration) { - registration.unregister(); - }) - .catch(function (error) { - console.error(error.message); - }); - } -} - -var serviceWorkerRegistration = /*#__PURE__*/Object.freeze({ - __proto__: null, - register: register, - unregister: unregister -}); - -// SDN OFAC addresses -var BLOCKED_ADDRESSES = [ - '0x7Db418b5D567A4e0E8c59Ad71BE1FcE48f3E6107', - '0x72a5843cc08275C8171E582972Aa4fDa8C397B2A', - '0x7F19720A857F834887FC9A7bC0a0fBe7Fc7f8102', - '0xA7e5d5A720f06526557c513402f2e6B5fA20b008', - '0x1da5821544e25c636c1417Ba96Ade4Cf6D2f9B5A', - '0x9F4cda013E354b8fC285BF4b9A60460cEe7f7Ea9', - '0x19Aa5Fe80D33a56D56c78e82eA5E50E5d80b4Dff', - '0x2f389cE8bD8ff92De3402FFCe4691d17fC4f6535', - '0xe7aa314c77F4233C18C6CC84384A9247c0cf367B', - '0x7F367cC41522cE07553e823bf3be79A889DEbe1B', - '0xd882cFc20F52f2599D84b8e8D58C7FB62cfE344b', - '0x901bb9583b24D97e995513C6778dc6888AB6870e', - '0x8576aCC5C05D6Ce88f4e49bf65BdF0C62F91353C', - '0xC8a65Fadf0e0dDAf421F28FEAb69Bf6E2E589963', - '0x308eD4B7b49797e1A98D3818bFF6fe5385410370', - '0x67d40EE1A85bf4a4Bb7Ffae16De985e8427B', - '0x6f1ca141a28907f78ebaa64fb83a9088b02a83', - '0x6acdfba02d390b97ac2b2d42a63e85293bcc1', - '0x48549a34ae37b12f6a30566245176994e17c6', - '0x5512d943ed1f7c8a43f3435c85f7ab68b30121', - '0xc455f7fd3e0e12afd51fba5c106909934d8a0e', - '0x3cbded43efdaf0fc77b9c55f6fc9988fcc9b757d', - '0x67d40EE1A85bf4a4Bb7Ffae16De985e8427B6b45', - '0x6f1ca141a28907f78ebaa64fb83a9088b02a8352', - '0x6acdfba02d390b97ac2b2d42a63e85293bcc160e', - '0x48549a34ae37b12f6a30566245176994e17c6b4a', - '0x5512d943ed1f7c8a43f3435c85f7ab68b30121b0', - '0xc455f7fd3e0e12afd51fba5c106909934d8a0e4a', -]; -function Blocklist(_a) { - var children = _a.children; - var account = useActiveWeb3React().account; - var blocked = React.useMemo(function () { return Boolean(account && BLOCKED_ADDRESSES.indexOf(account) !== -1); }, [account]); - if (blocked) { - return (jsxRuntime.jsx("div", { children: jsxRuntime.jsx(macro.Trans, { children: "Blocked address" }, void 0) }, void 0)); - } - return jsxRuntime.jsx(jsxRuntime.Fragment, { children: children }, void 0); -} - -var plurals = { - 'af-ZA': plurals$1.af, - 'ar-SA': plurals$1.ar, - 'ca-ES': plurals$1.ca, - 'cs-CZ': plurals$1.cs, - 'da-DK': plurals$1.da, - 'de-DE': plurals$1.de, - 'el-GR': plurals$1.el, - 'en-US': plurals$1.en, - 'es-ES': plurals$1.es, - 'fi-FI': plurals$1.fi, - 'fr-FR': plurals$1.fr, - 'he-IL': plurals$1.he, - 'hu-HU': plurals$1.hu, - 'id-ID': plurals$1.id, - 'it-IT': plurals$1.it, - 'ja-JP': plurals$1.ja, - 'ko-KR': plurals$1.ko, - 'nl-NL': plurals$1.nl, - 'no-NO': plurals$1.no, - 'pl-PL': plurals$1.pl, - 'pt-BR': plurals$1.pt, - 'pt-PT': plurals$1.pt, - 'ro-RO': plurals$1.ro, - 'ru-RU': plurals$1.ru, - 'sr-SP': plurals$1.sr, - 'sv-SE': plurals$1.sv, - 'sw-TZ': plurals$1.sw, - 'tr-TR': plurals$1.tr, - 'uk-UA': plurals$1.uk, - 'vi-VN': plurals$1.vi, - 'zh-CN': plurals$1.zh, - 'zh-TW': plurals$1.zh, - pseudo: plurals$1.en, -}; -function dynamicActivate(locale) { - return __awaiter(this, void 0, void 0, function () { - var catalog, _a; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - core$2.i18n.loadLocaleData(locale, { plurals: function () { return plurals[locale]; } }); - if (!(locale === DEFAULT_LOCALE)) return [3 /*break*/, 1]; - _a = DEFAULT_CATALOG; - return [3 /*break*/, 3]; - case 1: return [4 /*yield*/, (function (t) { return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require(t)); }); })("locales/" + locale)]; - case 2: - _a = _b.sent(); - _b.label = 3; - case 3: - catalog = _a; - core$2.i18n.load(locale, catalog.messages); - core$2.i18n.activate(locale); - return [2 /*return*/]; - } - }); - }); -} -function Provider(_a) { - var locale = _a.locale, _b = _a.forceRenderAfterLocaleChange, forceRenderAfterLocaleChange = _b === void 0 ? true : _b, onActivate = _a.onActivate, children = _a.children; - React.useEffect(function () { - dynamicActivate(locale) - .then(function () { return onActivate === null || onActivate === void 0 ? void 0 : onActivate(locale); }) - .catch(function (error) { - console.error('Failed to activate locale', locale, error); - }); - }, [locale, onActivate]); - return (jsxRuntime.jsx(react$1.I18nProvider, __assign({ forceRenderOnLocaleChange: forceRenderAfterLocaleChange, i18n: core$2.i18n }, { children: children }), void 0)); -} - -dynamicActivate(initialLocale); -function LanguageProvider(_a) { - var children = _a.children; - var locale = useActiveLocale(); - var _b = __read(useUserLocaleManager(), 2), setUserLocale = _b[1]; - var onActivate = React.useCallback(function (locale) { - document.documentElement.setAttribute('lang', locale); - setUserLocale(locale); // stores the selected locale to persist across sessions - }, [setUserLocale]); - return (jsxRuntime.jsx(Provider, __assign({ locale: locale, forceRenderAfterLocaleChange: false, onActivate: onActivate }, { children: children }), void 0)); -} - -var Bundle_OrderBy; -(function (Bundle_OrderBy) { - Bundle_OrderBy["Id"] = "id"; - Bundle_OrderBy["EthPriceUsd"] = "ethPriceUSD"; -})(Bundle_OrderBy || (Bundle_OrderBy = {})); -var Burn_OrderBy; -(function (Burn_OrderBy) { - Burn_OrderBy["Id"] = "id"; - Burn_OrderBy["Transaction"] = "transaction"; - Burn_OrderBy["Pool"] = "pool"; - Burn_OrderBy["Token0"] = "token0"; - Burn_OrderBy["Token1"] = "token1"; - Burn_OrderBy["Timestamp"] = "timestamp"; - Burn_OrderBy["Owner"] = "owner"; - Burn_OrderBy["Origin"] = "origin"; - Burn_OrderBy["Amount"] = "amount"; - Burn_OrderBy["Amount0"] = "amount0"; - Burn_OrderBy["Amount1"] = "amount1"; - Burn_OrderBy["AmountUsd"] = "amountUSD"; - Burn_OrderBy["TickLower"] = "tickLower"; - Burn_OrderBy["TickUpper"] = "tickUpper"; - Burn_OrderBy["LogIndex"] = "logIndex"; -})(Burn_OrderBy || (Burn_OrderBy = {})); -var Collect_OrderBy; -(function (Collect_OrderBy) { - Collect_OrderBy["Id"] = "id"; - Collect_OrderBy["Transaction"] = "transaction"; - Collect_OrderBy["Timestamp"] = "timestamp"; - Collect_OrderBy["Pool"] = "pool"; - Collect_OrderBy["Owner"] = "owner"; - Collect_OrderBy["Amount0"] = "amount0"; - Collect_OrderBy["Amount1"] = "amount1"; - Collect_OrderBy["AmountUsd"] = "amountUSD"; - Collect_OrderBy["TickLower"] = "tickLower"; - Collect_OrderBy["TickUpper"] = "tickUpper"; - Collect_OrderBy["LogIndex"] = "logIndex"; -})(Collect_OrderBy || (Collect_OrderBy = {})); -var Factory_OrderBy; -(function (Factory_OrderBy) { - Factory_OrderBy["Id"] = "id"; - Factory_OrderBy["PoolCount"] = "poolCount"; - Factory_OrderBy["TxCount"] = "txCount"; - Factory_OrderBy["TotalVolumeUsd"] = "totalVolumeUSD"; - Factory_OrderBy["TotalVolumeEth"] = "totalVolumeETH"; - Factory_OrderBy["TotalFeesUsd"] = "totalFeesUSD"; - Factory_OrderBy["TotalFeesEth"] = "totalFeesETH"; - Factory_OrderBy["UntrackedVolumeUsd"] = "untrackedVolumeUSD"; - Factory_OrderBy["TotalValueLockedUsd"] = "totalValueLockedUSD"; - Factory_OrderBy["TotalValueLockedEth"] = "totalValueLockedETH"; - Factory_OrderBy["TotalValueLockedUsdUntracked"] = "totalValueLockedUSDUntracked"; - Factory_OrderBy["TotalValueLockedEthUntracked"] = "totalValueLockedETHUntracked"; - Factory_OrderBy["Owner"] = "owner"; -})(Factory_OrderBy || (Factory_OrderBy = {})); -var Flash_OrderBy; -(function (Flash_OrderBy) { - Flash_OrderBy["Id"] = "id"; - Flash_OrderBy["Transaction"] = "transaction"; - Flash_OrderBy["Timestamp"] = "timestamp"; - Flash_OrderBy["Pool"] = "pool"; - Flash_OrderBy["Sender"] = "sender"; - Flash_OrderBy["Recipient"] = "recipient"; - Flash_OrderBy["Amount0"] = "amount0"; - Flash_OrderBy["Amount1"] = "amount1"; - Flash_OrderBy["AmountUsd"] = "amountUSD"; - Flash_OrderBy["Amount0Paid"] = "amount0Paid"; - Flash_OrderBy["Amount1Paid"] = "amount1Paid"; - Flash_OrderBy["LogIndex"] = "logIndex"; -})(Flash_OrderBy || (Flash_OrderBy = {})); -var Mint_OrderBy; -(function (Mint_OrderBy) { - Mint_OrderBy["Id"] = "id"; - Mint_OrderBy["Transaction"] = "transaction"; - Mint_OrderBy["Timestamp"] = "timestamp"; - Mint_OrderBy["Pool"] = "pool"; - Mint_OrderBy["Token0"] = "token0"; - Mint_OrderBy["Token1"] = "token1"; - Mint_OrderBy["Owner"] = "owner"; - Mint_OrderBy["Sender"] = "sender"; - Mint_OrderBy["Origin"] = "origin"; - Mint_OrderBy["Amount"] = "amount"; - Mint_OrderBy["Amount0"] = "amount0"; - Mint_OrderBy["Amount1"] = "amount1"; - Mint_OrderBy["AmountUsd"] = "amountUSD"; - Mint_OrderBy["TickLower"] = "tickLower"; - Mint_OrderBy["TickUpper"] = "tickUpper"; - Mint_OrderBy["LogIndex"] = "logIndex"; -})(Mint_OrderBy || (Mint_OrderBy = {})); -var OrderDirection; -(function (OrderDirection) { - OrderDirection["Asc"] = "asc"; - OrderDirection["Desc"] = "desc"; -})(OrderDirection || (OrderDirection = {})); -var PoolDayData_OrderBy; -(function (PoolDayData_OrderBy) { - PoolDayData_OrderBy["Id"] = "id"; - PoolDayData_OrderBy["Date"] = "date"; - PoolDayData_OrderBy["Pool"] = "pool"; - PoolDayData_OrderBy["Liquidity"] = "liquidity"; - PoolDayData_OrderBy["SqrtPrice"] = "sqrtPrice"; - PoolDayData_OrderBy["Token0Price"] = "token0Price"; - PoolDayData_OrderBy["Token1Price"] = "token1Price"; - PoolDayData_OrderBy["Tick"] = "tick"; - PoolDayData_OrderBy["FeeGrowthGlobal0X128"] = "feeGrowthGlobal0X128"; - PoolDayData_OrderBy["FeeGrowthGlobal1X128"] = "feeGrowthGlobal1X128"; - PoolDayData_OrderBy["TvlUsd"] = "tvlUSD"; - PoolDayData_OrderBy["VolumeToken0"] = "volumeToken0"; - PoolDayData_OrderBy["VolumeToken1"] = "volumeToken1"; - PoolDayData_OrderBy["VolumeUsd"] = "volumeUSD"; - PoolDayData_OrderBy["FeesUsd"] = "feesUSD"; - PoolDayData_OrderBy["TxCount"] = "txCount"; - PoolDayData_OrderBy["Open"] = "open"; - PoolDayData_OrderBy["High"] = "high"; - PoolDayData_OrderBy["Low"] = "low"; - PoolDayData_OrderBy["Close"] = "close"; -})(PoolDayData_OrderBy || (PoolDayData_OrderBy = {})); -var PoolHourData_OrderBy; -(function (PoolHourData_OrderBy) { - PoolHourData_OrderBy["Id"] = "id"; - PoolHourData_OrderBy["PeriodStartUnix"] = "periodStartUnix"; - PoolHourData_OrderBy["Pool"] = "pool"; - PoolHourData_OrderBy["Liquidity"] = "liquidity"; - PoolHourData_OrderBy["SqrtPrice"] = "sqrtPrice"; - PoolHourData_OrderBy["Token0Price"] = "token0Price"; - PoolHourData_OrderBy["Token1Price"] = "token1Price"; - PoolHourData_OrderBy["Tick"] = "tick"; - PoolHourData_OrderBy["FeeGrowthGlobal0X128"] = "feeGrowthGlobal0X128"; - PoolHourData_OrderBy["FeeGrowthGlobal1X128"] = "feeGrowthGlobal1X128"; - PoolHourData_OrderBy["TvlUsd"] = "tvlUSD"; - PoolHourData_OrderBy["VolumeToken0"] = "volumeToken0"; - PoolHourData_OrderBy["VolumeToken1"] = "volumeToken1"; - PoolHourData_OrderBy["VolumeUsd"] = "volumeUSD"; - PoolHourData_OrderBy["FeesUsd"] = "feesUSD"; - PoolHourData_OrderBy["TxCount"] = "txCount"; - PoolHourData_OrderBy["Open"] = "open"; - PoolHourData_OrderBy["High"] = "high"; - PoolHourData_OrderBy["Low"] = "low"; - PoolHourData_OrderBy["Close"] = "close"; -})(PoolHourData_OrderBy || (PoolHourData_OrderBy = {})); -var Pool_OrderBy; -(function (Pool_OrderBy) { - Pool_OrderBy["Id"] = "id"; - Pool_OrderBy["CreatedAtTimestamp"] = "createdAtTimestamp"; - Pool_OrderBy["CreatedAtBlockNumber"] = "createdAtBlockNumber"; - Pool_OrderBy["Token0"] = "token0"; - Pool_OrderBy["Token1"] = "token1"; - Pool_OrderBy["FeeTier"] = "feeTier"; - Pool_OrderBy["Liquidity"] = "liquidity"; - Pool_OrderBy["SqrtPrice"] = "sqrtPrice"; - Pool_OrderBy["FeeGrowthGlobal0X128"] = "feeGrowthGlobal0X128"; - Pool_OrderBy["FeeGrowthGlobal1X128"] = "feeGrowthGlobal1X128"; - Pool_OrderBy["Token0Price"] = "token0Price"; - Pool_OrderBy["Token1Price"] = "token1Price"; - Pool_OrderBy["Tick"] = "tick"; - Pool_OrderBy["ObservationIndex"] = "observationIndex"; - Pool_OrderBy["VolumeToken0"] = "volumeToken0"; - Pool_OrderBy["VolumeToken1"] = "volumeToken1"; - Pool_OrderBy["VolumeUsd"] = "volumeUSD"; - Pool_OrderBy["UntrackedVolumeUsd"] = "untrackedVolumeUSD"; - Pool_OrderBy["FeesUsd"] = "feesUSD"; - Pool_OrderBy["TxCount"] = "txCount"; - Pool_OrderBy["CollectedFeesToken0"] = "collectedFeesToken0"; - Pool_OrderBy["CollectedFeesToken1"] = "collectedFeesToken1"; - Pool_OrderBy["CollectedFeesUsd"] = "collectedFeesUSD"; - Pool_OrderBy["TotalValueLockedToken0"] = "totalValueLockedToken0"; - Pool_OrderBy["TotalValueLockedToken1"] = "totalValueLockedToken1"; - Pool_OrderBy["TotalValueLockedEth"] = "totalValueLockedETH"; - Pool_OrderBy["TotalValueLockedUsd"] = "totalValueLockedUSD"; - Pool_OrderBy["TotalValueLockedUsdUntracked"] = "totalValueLockedUSDUntracked"; - Pool_OrderBy["LiquidityProviderCount"] = "liquidityProviderCount"; - Pool_OrderBy["PoolHourData"] = "poolHourData"; - Pool_OrderBy["PoolDayData"] = "poolDayData"; - Pool_OrderBy["Mints"] = "mints"; - Pool_OrderBy["Burns"] = "burns"; - Pool_OrderBy["Swaps"] = "swaps"; - Pool_OrderBy["Collects"] = "collects"; - Pool_OrderBy["Ticks"] = "ticks"; -})(Pool_OrderBy || (Pool_OrderBy = {})); -var PositionSnapshot_OrderBy; -(function (PositionSnapshot_OrderBy) { - PositionSnapshot_OrderBy["Id"] = "id"; - PositionSnapshot_OrderBy["Owner"] = "owner"; - PositionSnapshot_OrderBy["Pool"] = "pool"; - PositionSnapshot_OrderBy["Position"] = "position"; - PositionSnapshot_OrderBy["BlockNumber"] = "blockNumber"; - PositionSnapshot_OrderBy["Timestamp"] = "timestamp"; - PositionSnapshot_OrderBy["Liquidity"] = "liquidity"; - PositionSnapshot_OrderBy["DepositedToken0"] = "depositedToken0"; - PositionSnapshot_OrderBy["DepositedToken1"] = "depositedToken1"; - PositionSnapshot_OrderBy["WithdrawnToken0"] = "withdrawnToken0"; - PositionSnapshot_OrderBy["WithdrawnToken1"] = "withdrawnToken1"; - PositionSnapshot_OrderBy["CollectedFeesToken0"] = "collectedFeesToken0"; - PositionSnapshot_OrderBy["CollectedFeesToken1"] = "collectedFeesToken1"; - PositionSnapshot_OrderBy["Transaction"] = "transaction"; - PositionSnapshot_OrderBy["FeeGrowthInside0LastX128"] = "feeGrowthInside0LastX128"; - PositionSnapshot_OrderBy["FeeGrowthInside1LastX128"] = "feeGrowthInside1LastX128"; -})(PositionSnapshot_OrderBy || (PositionSnapshot_OrderBy = {})); -var Position_OrderBy; -(function (Position_OrderBy) { - Position_OrderBy["Id"] = "id"; - Position_OrderBy["Owner"] = "owner"; - Position_OrderBy["Pool"] = "pool"; - Position_OrderBy["Token0"] = "token0"; - Position_OrderBy["Token1"] = "token1"; - Position_OrderBy["TickLower"] = "tickLower"; - Position_OrderBy["TickUpper"] = "tickUpper"; - Position_OrderBy["Liquidity"] = "liquidity"; - Position_OrderBy["DepositedToken0"] = "depositedToken0"; - Position_OrderBy["DepositedToken1"] = "depositedToken1"; - Position_OrderBy["WithdrawnToken0"] = "withdrawnToken0"; - Position_OrderBy["WithdrawnToken1"] = "withdrawnToken1"; - Position_OrderBy["CollectedFeesToken0"] = "collectedFeesToken0"; - Position_OrderBy["CollectedFeesToken1"] = "collectedFeesToken1"; - Position_OrderBy["Transaction"] = "transaction"; - Position_OrderBy["FeeGrowthInside0LastX128"] = "feeGrowthInside0LastX128"; - Position_OrderBy["FeeGrowthInside1LastX128"] = "feeGrowthInside1LastX128"; -})(Position_OrderBy || (Position_OrderBy = {})); -var Swap_OrderBy; -(function (Swap_OrderBy) { - Swap_OrderBy["Id"] = "id"; - Swap_OrderBy["Transaction"] = "transaction"; - Swap_OrderBy["Timestamp"] = "timestamp"; - Swap_OrderBy["Pool"] = "pool"; - Swap_OrderBy["Token0"] = "token0"; - Swap_OrderBy["Token1"] = "token1"; - Swap_OrderBy["Sender"] = "sender"; - Swap_OrderBy["Recipient"] = "recipient"; - Swap_OrderBy["Origin"] = "origin"; - Swap_OrderBy["Amount0"] = "amount0"; - Swap_OrderBy["Amount1"] = "amount1"; - Swap_OrderBy["AmountUsd"] = "amountUSD"; - Swap_OrderBy["SqrtPriceX96"] = "sqrtPriceX96"; - Swap_OrderBy["Tick"] = "tick"; - Swap_OrderBy["LogIndex"] = "logIndex"; -})(Swap_OrderBy || (Swap_OrderBy = {})); -var TickDayData_OrderBy; -(function (TickDayData_OrderBy) { - TickDayData_OrderBy["Id"] = "id"; - TickDayData_OrderBy["Date"] = "date"; - TickDayData_OrderBy["Pool"] = "pool"; - TickDayData_OrderBy["Tick"] = "tick"; - TickDayData_OrderBy["LiquidityGross"] = "liquidityGross"; - TickDayData_OrderBy["LiquidityNet"] = "liquidityNet"; - TickDayData_OrderBy["VolumeToken0"] = "volumeToken0"; - TickDayData_OrderBy["VolumeToken1"] = "volumeToken1"; - TickDayData_OrderBy["VolumeUsd"] = "volumeUSD"; - TickDayData_OrderBy["FeesUsd"] = "feesUSD"; - TickDayData_OrderBy["FeeGrowthOutside0X128"] = "feeGrowthOutside0X128"; - TickDayData_OrderBy["FeeGrowthOutside1X128"] = "feeGrowthOutside1X128"; -})(TickDayData_OrderBy || (TickDayData_OrderBy = {})); -var TickHourData_OrderBy; -(function (TickHourData_OrderBy) { - TickHourData_OrderBy["Id"] = "id"; - TickHourData_OrderBy["PeriodStartUnix"] = "periodStartUnix"; - TickHourData_OrderBy["Pool"] = "pool"; - TickHourData_OrderBy["Tick"] = "tick"; - TickHourData_OrderBy["LiquidityGross"] = "liquidityGross"; - TickHourData_OrderBy["LiquidityNet"] = "liquidityNet"; - TickHourData_OrderBy["VolumeToken0"] = "volumeToken0"; - TickHourData_OrderBy["VolumeToken1"] = "volumeToken1"; - TickHourData_OrderBy["VolumeUsd"] = "volumeUSD"; - TickHourData_OrderBy["FeesUsd"] = "feesUSD"; -})(TickHourData_OrderBy || (TickHourData_OrderBy = {})); -var Tick_OrderBy; -(function (Tick_OrderBy) { - Tick_OrderBy["Id"] = "id"; - Tick_OrderBy["PoolAddress"] = "poolAddress"; - Tick_OrderBy["TickIdx"] = "tickIdx"; - Tick_OrderBy["Pool"] = "pool"; - Tick_OrderBy["LiquidityGross"] = "liquidityGross"; - Tick_OrderBy["LiquidityNet"] = "liquidityNet"; - Tick_OrderBy["Price0"] = "price0"; - Tick_OrderBy["Price1"] = "price1"; - Tick_OrderBy["VolumeToken0"] = "volumeToken0"; - Tick_OrderBy["VolumeToken1"] = "volumeToken1"; - Tick_OrderBy["VolumeUsd"] = "volumeUSD"; - Tick_OrderBy["UntrackedVolumeUsd"] = "untrackedVolumeUSD"; - Tick_OrderBy["FeesUsd"] = "feesUSD"; - Tick_OrderBy["CollectedFeesToken0"] = "collectedFeesToken0"; - Tick_OrderBy["CollectedFeesToken1"] = "collectedFeesToken1"; - Tick_OrderBy["CollectedFeesUsd"] = "collectedFeesUSD"; - Tick_OrderBy["CreatedAtTimestamp"] = "createdAtTimestamp"; - Tick_OrderBy["CreatedAtBlockNumber"] = "createdAtBlockNumber"; - Tick_OrderBy["LiquidityProviderCount"] = "liquidityProviderCount"; - Tick_OrderBy["FeeGrowthOutside0X128"] = "feeGrowthOutside0X128"; - Tick_OrderBy["FeeGrowthOutside1X128"] = "feeGrowthOutside1X128"; -})(Tick_OrderBy || (Tick_OrderBy = {})); -var TokenDayData_OrderBy; -(function (TokenDayData_OrderBy) { - TokenDayData_OrderBy["Id"] = "id"; - TokenDayData_OrderBy["Date"] = "date"; - TokenDayData_OrderBy["Token"] = "token"; - TokenDayData_OrderBy["Volume"] = "volume"; - TokenDayData_OrderBy["VolumeUsd"] = "volumeUSD"; - TokenDayData_OrderBy["UntrackedVolumeUsd"] = "untrackedVolumeUSD"; - TokenDayData_OrderBy["TotalValueLocked"] = "totalValueLocked"; - TokenDayData_OrderBy["TotalValueLockedUsd"] = "totalValueLockedUSD"; - TokenDayData_OrderBy["PriceUsd"] = "priceUSD"; - TokenDayData_OrderBy["FeesUsd"] = "feesUSD"; - TokenDayData_OrderBy["Open"] = "open"; - TokenDayData_OrderBy["High"] = "high"; - TokenDayData_OrderBy["Low"] = "low"; - TokenDayData_OrderBy["Close"] = "close"; -})(TokenDayData_OrderBy || (TokenDayData_OrderBy = {})); -var TokenHourData_OrderBy; -(function (TokenHourData_OrderBy) { - TokenHourData_OrderBy["Id"] = "id"; - TokenHourData_OrderBy["PeriodStartUnix"] = "periodStartUnix"; - TokenHourData_OrderBy["Token"] = "token"; - TokenHourData_OrderBy["Volume"] = "volume"; - TokenHourData_OrderBy["VolumeUsd"] = "volumeUSD"; - TokenHourData_OrderBy["UntrackedVolumeUsd"] = "untrackedVolumeUSD"; - TokenHourData_OrderBy["TotalValueLocked"] = "totalValueLocked"; - TokenHourData_OrderBy["TotalValueLockedUsd"] = "totalValueLockedUSD"; - TokenHourData_OrderBy["PriceUsd"] = "priceUSD"; - TokenHourData_OrderBy["FeesUsd"] = "feesUSD"; - TokenHourData_OrderBy["Open"] = "open"; - TokenHourData_OrderBy["High"] = "high"; - TokenHourData_OrderBy["Low"] = "low"; - TokenHourData_OrderBy["Close"] = "close"; -})(TokenHourData_OrderBy || (TokenHourData_OrderBy = {})); -var Token_OrderBy; -(function (Token_OrderBy) { - Token_OrderBy["Id"] = "id"; - Token_OrderBy["Symbol"] = "symbol"; - Token_OrderBy["Name"] = "name"; - Token_OrderBy["Decimals"] = "decimals"; - Token_OrderBy["TotalSupply"] = "totalSupply"; - Token_OrderBy["Volume"] = "volume"; - Token_OrderBy["VolumeUsd"] = "volumeUSD"; - Token_OrderBy["UntrackedVolumeUsd"] = "untrackedVolumeUSD"; - Token_OrderBy["FeesUsd"] = "feesUSD"; - Token_OrderBy["TxCount"] = "txCount"; - Token_OrderBy["PoolCount"] = "poolCount"; - Token_OrderBy["TotalValueLocked"] = "totalValueLocked"; - Token_OrderBy["TotalValueLockedUsd"] = "totalValueLockedUSD"; - Token_OrderBy["TotalValueLockedUsdUntracked"] = "totalValueLockedUSDUntracked"; - Token_OrderBy["DerivedEth"] = "derivedETH"; - Token_OrderBy["WhitelistPools"] = "whitelistPools"; - Token_OrderBy["TokenDayData"] = "tokenDayData"; -})(Token_OrderBy || (Token_OrderBy = {})); -var Transaction_OrderBy; -(function (Transaction_OrderBy) { - Transaction_OrderBy["Id"] = "id"; - Transaction_OrderBy["BlockNumber"] = "blockNumber"; - Transaction_OrderBy["Timestamp"] = "timestamp"; - Transaction_OrderBy["GasUsed"] = "gasUsed"; - Transaction_OrderBy["GasPrice"] = "gasPrice"; - Transaction_OrderBy["Mints"] = "mints"; - Transaction_OrderBy["Burns"] = "burns"; - Transaction_OrderBy["Swaps"] = "swaps"; - Transaction_OrderBy["Flashed"] = "flashed"; - Transaction_OrderBy["Collects"] = "collects"; -})(Transaction_OrderBy || (Transaction_OrderBy = {})); -var UniswapDayData_OrderBy; -(function (UniswapDayData_OrderBy) { - UniswapDayData_OrderBy["Id"] = "id"; - UniswapDayData_OrderBy["Date"] = "date"; - UniswapDayData_OrderBy["VolumeEth"] = "volumeETH"; - UniswapDayData_OrderBy["VolumeUsd"] = "volumeUSD"; - UniswapDayData_OrderBy["VolumeUsdUntracked"] = "volumeUSDUntracked"; - UniswapDayData_OrderBy["FeesUsd"] = "feesUSD"; - UniswapDayData_OrderBy["TxCount"] = "txCount"; - UniswapDayData_OrderBy["TvlUsd"] = "tvlUSD"; -})(UniswapDayData_OrderBy || (UniswapDayData_OrderBy = {})); -var _SubgraphErrorPolicy_; -(function (_SubgraphErrorPolicy_) { - /** Data will be returned even if the subgraph has indexing errors */ - _SubgraphErrorPolicy_["Allow"] = "allow"; - /** If the subgraph has indexing errors, data will be omitted. The default. */ - _SubgraphErrorPolicy_["Deny"] = "deny"; -})(_SubgraphErrorPolicy_ || (_SubgraphErrorPolicy_ = {})); -var AllV3TicksDocument = "\n query allV3Ticks($poolAddress: String!, $skip: Int!) {\n ticks(\n first: 1000\n skip: $skip\n where: {poolAddress: $poolAddress}\n orderBy: tickIdx\n ) {\n tick: tickIdx\n liquidityNet\n price0\n price1\n }\n}\n "; -var FeeTierDistributionDocument = "\n query feeTierDistribution($token0: String!, $token1: String!) {\n _meta {\n block {\n number\n }\n }\n asToken0: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: {token0: $token0, token1: $token1}\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n asToken1: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: {token0: $token1, token1: $token0}\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n}\n "; -var injectedRtkApi = api$1.injectEndpoints({ +var abi$4 = [ + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "owner", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "spender", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "Approval", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "sender", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "amount0", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "amount1", + type: "uint256" + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address" + } + ], + name: "Burn", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "sender", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "amount0", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "amount1", + type: "uint256" + } + ], + name: "Mint", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "sender", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "amount0In", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "amount1In", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "amount0Out", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "amount1Out", + type: "uint256" + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address" + } + ], + name: "Swap", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint112", + name: "reserve0", + type: "uint112" + }, + { + indexed: false, + internalType: "uint112", + name: "reserve1", + type: "uint112" + } + ], + name: "Sync", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "from", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "Transfer", + type: "event" + }, + { + constant: true, + inputs: [ + ], + name: "DOMAIN_SEPARATOR", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "MINIMUM_LIQUIDITY", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "pure", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "PERMIT_TYPEHASH", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + payable: false, + stateMutability: "pure", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "spender", + type: "address" + } + ], + name: "allowance", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "approve", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + } + ], + name: "balanceOf", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "address", + name: "to", + type: "address" + } + ], + name: "burn", + outputs: [ + { + internalType: "uint256", + name: "amount0", + type: "uint256" + }, + { + internalType: "uint256", + name: "amount1", + type: "uint256" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "decimals", + outputs: [ + { + internalType: "uint8", + name: "", + type: "uint8" + } + ], + payable: false, + stateMutability: "pure", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "factory", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "getReserves", + outputs: [ + { + internalType: "uint112", + name: "reserve0", + type: "uint112" + }, + { + internalType: "uint112", + name: "reserve1", + type: "uint112" + }, + { + internalType: "uint32", + name: "blockTimestampLast", + type: "uint32" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "address", + name: "", + type: "address" + }, + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "initialize", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "kLast", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "address", + name: "to", + type: "address" + } + ], + name: "mint", + outputs: [ + { + internalType: "uint256", + name: "liquidity", + type: "uint256" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "name", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + payable: false, + stateMutability: "pure", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + } + ], + name: "nonces", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + }, + { + internalType: "uint8", + name: "v", + type: "uint8" + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32" + } + ], + name: "permit", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "price0CumulativeLast", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "price1CumulativeLast", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "address", + name: "to", + type: "address" + } + ], + name: "skim", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "uint256", + name: "amount0Out", + type: "uint256" + }, + { + internalType: "uint256", + name: "amount1Out", + type: "uint256" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "swap", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "symbol", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + payable: false, + stateMutability: "pure", + type: "function" + }, + { + constant: false, + inputs: [ + ], + name: "sync", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "token0", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "token1", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "totalSupply", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "transfer", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "address", + name: "from", + type: "address" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "transferFrom", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + } +]; + +var abi$3 = [ + { + inputs: [ + ], + name: "WETH", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "tokenA", + type: "address" + }, + { + internalType: "address", + name: "tokenB", + type: "address" + }, + { + internalType: "uint256", + name: "amountADesired", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountBDesired", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountAMin", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountBMin", + type: "uint256" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "addLiquidity", + outputs: [ + { + internalType: "uint256", + name: "amountA", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountB", + type: "uint256" + }, + { + internalType: "uint256", + name: "liquidity", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address" + }, + { + internalType: "uint256", + name: "amountTokenDesired", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountTokenMin", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountETHMin", + type: "uint256" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "addLiquidityETH", + outputs: [ + { + internalType: "uint256", + name: "amountToken", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountETH", + type: "uint256" + }, + { + internalType: "uint256", + name: "liquidity", + type: "uint256" + } + ], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + ], + name: "factory", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountOut", + type: "uint256" + }, + { + internalType: "uint256", + name: "reserveIn", + type: "uint256" + }, + { + internalType: "uint256", + name: "reserveOut", + type: "uint256" + } + ], + name: "getAmountIn", + outputs: [ + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + }, + { + internalType: "uint256", + name: "reserveIn", + type: "uint256" + }, + { + internalType: "uint256", + name: "reserveOut", + type: "uint256" + } + ], + name: "getAmountOut", + outputs: [ + { + internalType: "uint256", + name: "amountOut", + type: "uint256" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountOut", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + } + ], + name: "getAmountsIn", + outputs: [ + { + internalType: "uint256[]", + name: "amounts", + type: "uint256[]" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + } + ], + name: "getAmountsOut", + outputs: [ + { + internalType: "uint256[]", + name: "amounts", + type: "uint256[]" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountA", + type: "uint256" + }, + { + internalType: "uint256", + name: "reserveA", + type: "uint256" + }, + { + internalType: "uint256", + name: "reserveB", + type: "uint256" + } + ], + name: "quote", + outputs: [ + { + internalType: "uint256", + name: "amountB", + type: "uint256" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "tokenA", + type: "address" + }, + { + internalType: "address", + name: "tokenB", + type: "address" + }, + { + internalType: "uint256", + name: "liquidity", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountAMin", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountBMin", + type: "uint256" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "removeLiquidity", + outputs: [ + { + internalType: "uint256", + name: "amountA", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountB", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address" + }, + { + internalType: "uint256", + name: "liquidity", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountTokenMin", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountETHMin", + type: "uint256" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "removeLiquidityETH", + outputs: [ + { + internalType: "uint256", + name: "amountToken", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountETH", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address" + }, + { + internalType: "uint256", + name: "liquidity", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountTokenMin", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountETHMin", + type: "uint256" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "removeLiquidityETHSupportingFeeOnTransferTokens", + outputs: [ + { + internalType: "uint256", + name: "amountETH", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address" + }, + { + internalType: "uint256", + name: "liquidity", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountTokenMin", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountETHMin", + type: "uint256" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + }, + { + internalType: "bool", + name: "approveMax", + type: "bool" + }, + { + internalType: "uint8", + name: "v", + type: "uint8" + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32" + } + ], + name: "removeLiquidityETHWithPermit", + outputs: [ + { + internalType: "uint256", + name: "amountToken", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountETH", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address" + }, + { + internalType: "uint256", + name: "liquidity", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountTokenMin", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountETHMin", + type: "uint256" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + }, + { + internalType: "bool", + name: "approveMax", + type: "bool" + }, + { + internalType: "uint8", + name: "v", + type: "uint8" + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32" + } + ], + name: "removeLiquidityETHWithPermitSupportingFeeOnTransferTokens", + outputs: [ + { + internalType: "uint256", + name: "amountETH", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "tokenA", + type: "address" + }, + { + internalType: "address", + name: "tokenB", + type: "address" + }, + { + internalType: "uint256", + name: "liquidity", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountAMin", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountBMin", + type: "uint256" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + }, + { + internalType: "bool", + name: "approveMax", + type: "bool" + }, + { + internalType: "uint8", + name: "v", + type: "uint8" + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32" + } + ], + name: "removeLiquidityWithPermit", + outputs: [ + { + internalType: "uint256", + name: "amountA", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountB", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountOut", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "swapETHForExactTokens", + outputs: [ + { + internalType: "uint256[]", + name: "amounts", + type: "uint256[]" + } + ], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountOutMin", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "swapExactETHForTokens", + outputs: [ + { + internalType: "uint256[]", + name: "amounts", + type: "uint256[]" + } + ], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountOutMin", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "swapExactETHForTokensSupportingFeeOnTransferTokens", + outputs: [ + ], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountOutMin", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "swapExactTokensForETH", + outputs: [ + { + internalType: "uint256[]", + name: "amounts", + type: "uint256[]" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountOutMin", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "swapExactTokensForETHSupportingFeeOnTransferTokens", + outputs: [ + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountOutMin", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "swapExactTokensForTokens", + outputs: [ + { + internalType: "uint256[]", + name: "amounts", + type: "uint256[]" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountOutMin", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "swapExactTokensForTokensSupportingFeeOnTransferTokens", + outputs: [ + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountOut", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountInMax", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "swapTokensForExactETH", + outputs: [ + { + internalType: "uint256[]", + name: "amounts", + type: "uint256[]" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountOut", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountInMax", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "swapTokensForExactTokens", + outputs: [ + { + internalType: "uint256[]", + name: "amounts", + type: "uint256[]" + } + ], + stateMutability: "nonpayable", + type: "function" + } +]; + +var abi$2 = [ + { + inputs: [ + { + internalType: "address", + name: "_factory", + type: "address" + }, + { + internalType: "address", + name: "_WETH9", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + inputs: [ + ], + name: "WETH9", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + ], + name: "factory", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes", + name: "path", + type: "bytes" + }, + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + } + ], + name: "quoteExactInput", + outputs: [ + { + internalType: "uint256", + name: "amountOut", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "tokenIn", + type: "address" + }, + { + internalType: "address", + name: "tokenOut", + type: "address" + }, + { + internalType: "uint24", + name: "fee", + type: "uint24" + }, + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + }, + { + internalType: "uint160", + name: "sqrtPriceLimitX96", + type: "uint160" + } + ], + name: "quoteExactInputSingle", + outputs: [ + { + internalType: "uint256", + name: "amountOut", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes", + name: "path", + type: "bytes" + }, + { + internalType: "uint256", + name: "amountOut", + type: "uint256" + } + ], + name: "quoteExactOutput", + outputs: [ + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "tokenIn", + type: "address" + }, + { + internalType: "address", + name: "tokenOut", + type: "address" + }, + { + internalType: "uint24", + name: "fee", + type: "uint24" + }, + { + internalType: "uint256", + name: "amountOut", + type: "uint256" + }, + { + internalType: "uint160", + name: "sqrtPriceLimitX96", + type: "uint160" + } + ], + name: "quoteExactOutputSingle", + outputs: [ + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "int256", + name: "amount0Delta", + type: "int256" + }, + { + internalType: "int256", + name: "amount1Delta", + type: "int256" + }, + { + internalType: "bytes", + name: "path", + type: "bytes" + } + ], + name: "uniswapV3SwapCallback", + outputs: [ + ], + stateMutability: "view", + type: "function" + } +]; + +var abi$1 = [ + { + inputs: [ + ], + name: "getCurrentBlockTimestamp", + outputs: [ + { + internalType: "uint256", + name: "timestamp", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "addr", + type: "address" + } + ], + name: "getEthBalance", + outputs: [ + { + internalType: "uint256", + name: "balance", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "uint256", + name: "gasLimit", + type: "uint256" + }, + { + internalType: "bytes", + name: "callData", + type: "bytes" + } + ], + internalType: "struct UniswapInterfaceMulticall.Call[]", + name: "calls", + type: "tuple[]" + } + ], + name: "multicall", + outputs: [ + { + internalType: "uint256", + name: "blockNumber", + type: "uint256" + }, + { + components: [ + { + internalType: "bool", + name: "success", + type: "bool" + }, + { + internalType: "uint256", + name: "gasUsed", + type: "uint256" + }, + { + internalType: "bytes", + name: "returnData", + type: "bytes" + } + ], + internalType: "struct UniswapInterfaceMulticall.Result[]", + name: "returnData", + type: "tuple[]" + } + ], + stateMutability: "nonpayable", + type: "function" + } +]; + +var ARGENT_WALLET_DETECTOR_ABI = [ + { + inputs: [ + { + internalType: "bytes32[]", + name: "_codes", + type: "bytes32[]" + }, + { + internalType: "address[]", + name: "_implementations", + type: "address[]" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "code", + type: "bytes32" + } + ], + name: "CodeAdded", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "implementation", + type: "address" + } + ], + name: "ImplementationAdded", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "_newOwner", + type: "address" + } + ], + name: "OwnerChanged", + type: "event" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + name: "acceptedCodes", + outputs: [ + { + internalType: "bool", + name: "exists", + type: "bool" + }, + { + internalType: "uint128", + name: "index", + type: "uint128" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "acceptedImplementations", + outputs: [ + { + internalType: "bool", + name: "exists", + type: "bool" + }, + { + internalType: "uint128", + name: "index", + type: "uint128" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "_code", + type: "bytes32" + } + ], + name: "addCode", + outputs: [ + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "_argentWallet", + type: "address" + } + ], + name: "addCodeAndImplementationFromWallet", + outputs: [ + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "_impl", + type: "address" + } + ], + name: "addImplementation", + outputs: [ + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "_newOwner", + type: "address" + } + ], + name: "changeOwner", + outputs: [ + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + ], + name: "getCodes", + outputs: [ + { + internalType: "bytes32[]", + name: "", + type: "bytes32[]" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + ], + name: "getImplementations", + outputs: [ + { + internalType: "address[]", + name: "", + type: "address[]" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "_wallet", + type: "address" + } + ], + name: "isArgentWallet", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + ], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + } +]; + +var EIP_2612 = [ + { + constant: true, + inputs: [ + { + name: "owner", + type: "address" + } + ], + name: "nonces", + outputs: [ + { + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "DOMAIN_SEPARATOR", + outputs: [ + { + name: "", + type: "bytes32" + } + ], + payable: false, + stateMutability: "view", + type: "function" + } +]; + +var ENS_PUBLIC_RESOLVER_ABI = [ + { + inputs: [ + { + internalType: "contract ENS", + name: "_ens", + type: "address" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: true, + internalType: "uint256", + name: "contentType", + type: "uint256" + } + ], + name: "ABIChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "address", + name: "a", + type: "address" + } + ], + name: "AddrChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "uint256", + name: "coinType", + type: "uint256" + }, + { + indexed: false, + internalType: "bytes", + name: "newAddress", + type: "bytes" + } + ], + name: "AddressChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: true, + internalType: "address", + name: "owner", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "target", + type: "address" + }, + { + indexed: false, + internalType: "bool", + name: "isAuthorised", + type: "bool" + } + ], + name: "AuthorisationChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "bytes", + name: "hash", + type: "bytes" + } + ], + name: "ContenthashChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "bytes", + name: "name", + type: "bytes" + }, + { + indexed: false, + internalType: "uint16", + name: "resource", + type: "uint16" + }, + { + indexed: false, + internalType: "bytes", + name: "record", + type: "bytes" + } + ], + name: "DNSRecordChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "bytes", + name: "name", + type: "bytes" + }, + { + indexed: false, + internalType: "uint16", + name: "resource", + type: "uint16" + } + ], + name: "DNSRecordDeleted", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "DNSZoneCleared", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: true, + internalType: "bytes4", + name: "interfaceID", + type: "bytes4" + }, + { + indexed: false, + internalType: "address", + name: "implementer", + type: "address" + } + ], + name: "InterfaceChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "string", + name: "name", + type: "string" + } + ], + name: "NameChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "bytes32", + name: "x", + type: "bytes32" + }, + { + indexed: false, + internalType: "bytes32", + name: "y", + type: "bytes32" + } + ], + name: "PubkeyChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: true, + internalType: "string", + name: "indexedKey", + type: "string" + }, + { + indexed: false, + internalType: "string", + name: "key", + type: "string" + } + ], + name: "TextChanged", + type: "event" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "uint256", + name: "contentTypes", + type: "uint256" + } + ], + name: "ABI", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + }, + { + internalType: "bytes", + name: "", + type: "bytes" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "addr", + outputs: [ + { + internalType: "address payable", + name: "", + type: "address" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + }, + { + internalType: "address", + name: "", + type: "address" + }, + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "authorisations", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "clearDNSZone", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "contenthash", + outputs: [ + { + internalType: "bytes", + name: "", + type: "bytes" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "name", + type: "bytes32" + }, + { + internalType: "uint16", + name: "resource", + type: "uint16" + } + ], + name: "dnsRecord", + outputs: [ + { + internalType: "bytes", + name: "", + type: "bytes" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "name", + type: "bytes32" + } + ], + name: "hasDNSRecords", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "bytes4", + name: "interfaceID", + type: "bytes4" + } + ], + name: "interfaceImplementer", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "name", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "pubkey", + outputs: [ + { + internalType: "bytes32", + name: "x", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "y", + type: "bytes32" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "uint256", + name: "contentType", + type: "uint256" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "setABI", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "uint256", + name: "coinType", + type: "uint256" + }, + { + internalType: "bytes", + name: "a", + type: "bytes" + } + ], + name: "setAddr", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "address", + name: "a", + type: "address" + } + ], + name: "setAddr", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "bool", + name: "isAuthorised", + type: "bool" + } + ], + name: "setAuthorisation", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "bytes", + name: "hash", + type: "bytes" + } + ], + name: "setContenthash", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "setDNSRecords", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "bytes4", + name: "interfaceID", + type: "bytes4" + }, + { + internalType: "address", + name: "implementer", + type: "address" + } + ], + name: "setInterface", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "string", + name: "name", + type: "string" + } + ], + name: "setName", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "x", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "y", + type: "bytes32" + } + ], + name: "setPubkey", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "string", + name: "key", + type: "string" + }, + { + internalType: "string", + name: "value", + type: "string" + } + ], + name: "setText", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes4", + name: "interfaceID", + type: "bytes4" + } + ], + name: "supportsInterface", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "pure", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "string", + name: "key", + type: "string" + } + ], + name: "text", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + payable: false, + stateMutability: "view", + type: "function" + } +]; + +var ENS_ABI = [ + { + inputs: [ + { + internalType: "contract ENS", + name: "_old", + type: "address" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "owner", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "operator", + type: "address" + }, + { + indexed: false, + internalType: "bool", + name: "approved", + type: "bool" + } + ], + name: "ApprovalForAll", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: true, + internalType: "bytes32", + name: "label", + type: "bytes32" + }, + { + indexed: false, + internalType: "address", + name: "owner", + type: "address" + } + ], + name: "NewOwner", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "address", + name: "resolver", + type: "address" + } + ], + name: "NewResolver", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "uint64", + name: "ttl", + type: "uint64" + } + ], + name: "NewTTL", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "address", + name: "owner", + type: "address" + } + ], + name: "Transfer", + type: "event" + }, + { + constant: true, + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "operator", + type: "address" + } + ], + name: "isApprovedForAll", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "old", + outputs: [ + { + internalType: "contract ENS", + name: "", + type: "address" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "recordExists", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "resolver", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "address", + name: "operator", + type: "address" + }, + { + internalType: "bool", + name: "approved", + type: "bool" + } + ], + name: "setApprovalForAll", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "address", + name: "owner", + type: "address" + } + ], + name: "setOwner", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "resolver", + type: "address" + }, + { + internalType: "uint64", + name: "ttl", + type: "uint64" + } + ], + name: "setRecord", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "address", + name: "resolver", + type: "address" + } + ], + name: "setResolver", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "label", + type: "bytes32" + }, + { + internalType: "address", + name: "owner", + type: "address" + } + ], + name: "setSubnodeOwner", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "label", + type: "bytes32" + }, + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "resolver", + type: "address" + }, + { + internalType: "uint64", + name: "ttl", + type: "uint64" + } + ], + name: "setSubnodeRecord", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "uint64", + name: "ttl", + type: "uint64" + } + ], + name: "setTTL", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "ttl", + outputs: [ + { + internalType: "uint64", + name: "", + type: "uint64" + } + ], + payable: false, + stateMutability: "view", + type: "function" + } +]; + +var ERC20ABI = [ + { + constant: true, + inputs: [ + ], + name: "name", + outputs: [ + { + name: "", + type: "string" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + name: "_spender", + type: "address" + }, + { + name: "_value", + type: "uint256" + } + ], + name: "approve", + outputs: [ + { + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "totalSupply", + outputs: [ + { + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + name: "_from", + type: "address" + }, + { + name: "_to", + type: "address" + }, + { + name: "_value", + type: "uint256" + } + ], + name: "transferFrom", + outputs: [ + { + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "decimals", + outputs: [ + { + name: "", + type: "uint8" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + name: "_owner", + type: "address" + } + ], + name: "balanceOf", + outputs: [ + { + name: "balance", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "symbol", + outputs: [ + { + name: "", + type: "string" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + name: "_to", + type: "address" + }, + { + name: "_value", + type: "uint256" + } + ], + name: "transfer", + outputs: [ + { + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + { + name: "_owner", + type: "address" + }, + { + name: "_spender", + type: "address" + } + ], + name: "allowance", + outputs: [ + { + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + payable: true, + stateMutability: "payable", + type: "fallback" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: "owner", + type: "address" + }, + { + indexed: true, + name: "spender", + type: "address" + }, + { + indexed: false, + name: "value", + type: "uint256" + } + ], + name: "Approval", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: "from", + type: "address" + }, + { + indexed: true, + name: "to", + type: "address" + }, + { + indexed: false, + name: "value", + type: "uint256" + } + ], + name: "Transfer", + type: "event" + } +]; + +var ERC20_BYTES32_ABI = [ + { + constant: true, + inputs: [ + ], + name: "name", + outputs: [ + { + name: "", + type: "bytes32" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "symbol", + outputs: [ + { + name: "", + type: "bytes32" + } + ], + payable: false, + stateMutability: "view", + type: "function" + } +]; + +var ERC721_ABI = [ + { + inputs: [ + { + internalType: "uint256", + name: "tokenId", + type: "uint256" + } + ], + name: "ownerOf", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "tokenId", + type: "uint256" + } + ], + name: "tokenURI", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "view", + type: "function" + } +]; + +var ERC1155_ABI = [ + { + constant: true, + inputs: [ + { + internalType: "address", + name: "_owner", + type: "address" + }, + { + internalType: "uint256", + name: "_id", + type: "uint256" + } + ], + name: "balanceOf", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "uint256", + name: "_id", + type: "uint256" + } + ], + name: "uri", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + payable: false, + stateMutability: "view", + type: "function" + } +]; + +var WETH_ABI = [ + { + constant: true, + inputs: [ + ], + name: "name", + outputs: [ + { + name: "", + type: "string" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + name: "guy", + type: "address" + }, + { + name: "wad", + type: "uint256" + } + ], + name: "approve", + outputs: [ + { + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "totalSupply", + outputs: [ + { + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + name: "src", + type: "address" + }, + { + name: "dst", + type: "address" + }, + { + name: "wad", + type: "uint256" + } + ], + name: "transferFrom", + outputs: [ + { + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + name: "wad", + type: "uint256" + } + ], + name: "withdraw", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "decimals", + outputs: [ + { + name: "", + type: "uint8" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + name: "", + type: "address" + } + ], + name: "balanceOf", + outputs: [ + { + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "symbol", + outputs: [ + { + name: "", + type: "string" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + name: "dst", + type: "address" + }, + { + name: "wad", + type: "uint256" + } + ], + name: "transfer", + outputs: [ + { + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + ], + name: "deposit", + outputs: [ + ], + payable: true, + stateMutability: "payable", + type: "function" + }, + { + constant: true, + inputs: [ + { + name: "", + type: "address" + }, + { + name: "", + type: "address" + } + ], + name: "allowance", + outputs: [ + { + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + payable: true, + stateMutability: "payable", + type: "fallback" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: "src", + type: "address" + }, + { + indexed: true, + name: "guy", + type: "address" + }, + { + indexed: false, + name: "wad", + type: "uint256" + } + ], + name: "Approval", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: "src", + type: "address" + }, + { + indexed: true, + name: "dst", + type: "address" + }, + { + indexed: false, + name: "wad", + type: "uint256" + } + ], + name: "Transfer", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: "dst", + type: "address" + }, + { + indexed: false, + name: "wad", + type: "uint256" + } + ], + name: "Deposit", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: "src", + type: "address" + }, + { + indexed: false, + name: "wad", + type: "uint256" + } + ], + name: "Withdrawal", + type: "event" + } +]; + +var _a$h; +/** + * List of all the networks supported by the Uniswap Interface + */ +var SupportedChainId; +(function (SupportedChainId) { + SupportedChainId[SupportedChainId["MAINNET"] = 1] = "MAINNET"; + SupportedChainId[SupportedChainId["ROPSTEN"] = 3] = "ROPSTEN"; + SupportedChainId[SupportedChainId["RINKEBY"] = 4] = "RINKEBY"; + SupportedChainId[SupportedChainId["GOERLI"] = 5] = "GOERLI"; + SupportedChainId[SupportedChainId["KOVAN"] = 42] = "KOVAN"; + SupportedChainId[SupportedChainId["ARBITRUM_ONE"] = 42161] = "ARBITRUM_ONE"; + SupportedChainId[SupportedChainId["ARBITRUM_RINKEBY"] = 421611] = "ARBITRUM_RINKEBY"; + SupportedChainId[SupportedChainId["OPTIMISM"] = 10] = "OPTIMISM"; + SupportedChainId[SupportedChainId["OPTIMISTIC_KOVAN"] = 69] = "OPTIMISTIC_KOVAN"; + SupportedChainId[SupportedChainId["POLYGON"] = 137] = "POLYGON"; + SupportedChainId[SupportedChainId["POLYGON_MUMBAI"] = 80001] = "POLYGON_MUMBAI"; +})(SupportedChainId || (SupportedChainId = {})); +var CHAIN_IDS_TO_NAMES = (_a$h = {}, + _a$h[SupportedChainId.MAINNET] = 'mainnet', + _a$h[SupportedChainId.ROPSTEN] = 'ropsten', + _a$h[SupportedChainId.RINKEBY] = 'rinkeby', + _a$h[SupportedChainId.GOERLI] = 'goerli', + _a$h[SupportedChainId.KOVAN] = 'kovan', + _a$h[SupportedChainId.POLYGON] = 'polygon', + _a$h[SupportedChainId.POLYGON_MUMBAI] = 'polygon_mumbai', + _a$h[SupportedChainId.ARBITRUM_ONE] = 'arbitrum', + _a$h[SupportedChainId.ARBITRUM_RINKEBY] = 'arbitrum_rinkeby', + _a$h[SupportedChainId.OPTIMISM] = 'optimism', + _a$h[SupportedChainId.OPTIMISTIC_KOVAN] = 'optimistic_kovan', + _a$h); +/** + * Array of all the supported chain IDs + */ +var ALL_SUPPORTED_CHAIN_IDS = Object.values(SupportedChainId).filter(function (id) { return typeof id === 'number'; }); +var SUPPORTED_GAS_ESTIMATE_CHAIN_IDS = [SupportedChainId.MAINNET, SupportedChainId.POLYGON]; +/** + * All the chain IDs that are running the Ethereum protocol. + */ +[ + SupportedChainId.MAINNET, + SupportedChainId.ROPSTEN, + SupportedChainId.RINKEBY, + SupportedChainId.GOERLI, + SupportedChainId.KOVAN, + SupportedChainId.POLYGON, + SupportedChainId.POLYGON_MUMBAI, +]; +/** + * Controls some L2 specific behavior, e.g. slippage tolerance, special UI behavior. + * The expectation is that all of these networks have immediate transaction confirmation. + */ +var L2_CHAIN_IDS = [ + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, +]; + +var DEFAULT_NETWORKS = [ + SupportedChainId.MAINNET, + SupportedChainId.ROPSTEN, + SupportedChainId.RINKEBY, + SupportedChainId.GOERLI, + SupportedChainId.KOVAN, +]; +function constructSameAddressMap(address, additionalNetworks) { + if (additionalNetworks === void 0) { additionalNetworks = []; } + return DEFAULT_NETWORKS.concat(additionalNetworks).reduce(function (memo, chainId) { + memo[chainId] = address; + return memo; + }, {}); +} + +var _a$g, _b$6, _c$4, _d$3, _e$2, _f$1, _g$1, _h$1; +var UNI_ADDRESS = constructSameAddressMap('0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984'); +var MULTICALL_ADDRESS = __assign(__assign({}, constructSameAddressMap('0x1F98415757620B543A52E61c46B32eB19261F984', [ + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.OPTIMISM, + SupportedChainId.POLYGON_MUMBAI, + SupportedChainId.POLYGON, +])), (_a$g = {}, _a$g[SupportedChainId.ARBITRUM_ONE] = '0xadF885960B47eA2CD9B55E6DAc6B42b7Cb2806dB', _a$g[SupportedChainId.ARBITRUM_RINKEBY] = '0xa501c031958F579dB7676fF1CE78AD305794d579', _a$g)); +var V2_FACTORY_ADDRESSES = constructSameAddressMap(v2Sdk.FACTORY_ADDRESS); +var V2_ROUTER_ADDRESS = constructSameAddressMap('0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D'); +var V3_ROUTER_ADDRESS = constructSameAddressMap('0xE592427A0AEce92De3Edee1F18E0157C05861564', [ + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON, + SupportedChainId.POLYGON_MUMBAI, +]); +var SWAP_ROUTER_ADDRESSES = constructSameAddressMap('0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45', [ + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON, + SupportedChainId.POLYGON_MUMBAI, +]); +/** + * The oldest V0 governance address + */ +constructSameAddressMap('0x5e4be8Bc9637f0EAA1A755019e06A68ce081D58F'); +/** + * The older V1 governance address + */ +(_b$6 = {}, + _b$6[SupportedChainId.MAINNET] = '0xC4e172459f1E7939D522503B81AFAaC1014CE6F6', + _b$6); +/** + * The latest governor bravo that is currently admin of timelock + */ +(_c$4 = {}, + _c$4[SupportedChainId.MAINNET] = '0x408ED6354d4973f66138C91495F2f2FCbd8724C3', + _c$4); +constructSameAddressMap('0x1a9C8182C09F50C8318d769245beA52c32BE35BC'); +var MERKLE_DISTRIBUTOR_ADDRESS = (_d$3 = {}, + _d$3[SupportedChainId.MAINNET] = '0x090D4613473dEE047c3f2706764f49E0821D256e', + _d$3); +var ARGENT_WALLET_DETECTOR_ADDRESS = (_e$2 = {}, + _e$2[SupportedChainId.MAINNET] = '0xeca4B0bDBf7c55E9b7925919d03CbF8Dc82537E8', + _e$2); +var V3_CORE_FACTORY_ADDRESSES = constructSameAddressMap(v3Sdk.FACTORY_ADDRESS, [ + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON_MUMBAI, + SupportedChainId.POLYGON, +]); +var QUOTER_ADDRESSES = constructSameAddressMap('0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6', [ + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON_MUMBAI, + SupportedChainId.POLYGON, +]); +constructSameAddressMap('0xC36442b4a4522E871399CD717aBDD847Ab11FE88', [ + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON_MUMBAI, + SupportedChainId.POLYGON, +]); +var ENS_REGISTRAR_ADDRESSES = (_f$1 = {}, + _f$1[SupportedChainId.MAINNET] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', + _f$1[SupportedChainId.ROPSTEN] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', + _f$1[SupportedChainId.GOERLI] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', + _f$1[SupportedChainId.RINKEBY] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', + _f$1); +var SOCKS_CONTROLLER_ADDRESSES = (_g$1 = {}, + _g$1[SupportedChainId.MAINNET] = '0x65770b5283117639760beA3F867b69b3697a91dd', + _g$1); +constructSameAddressMap('0xA5644E29708357803b5A882D272c41cC0dF92B34', [ + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON_MUMBAI, + SupportedChainId.POLYGON, +]); +(_h$1 = {}, + _h$1[SupportedChainId.ARBITRUM_ONE] = '0xbfd8137f7d1516D3ea5cA83523914859ec47F573', + _h$1[SupportedChainId.ARBITRUM_RINKEBY] = '0xbfd8137f7d1516D3ea5cA83523914859ec47F573', + _h$1); + +var _a$f, _b$5; +var AMPL = new sdkCore.Token(SupportedChainId.MAINNET, '0xD46bA6D942050d489DBd938a2C909A5d5039A161', 9, 'AMPL', 'Ampleforth'); +var DAI = new sdkCore.Token(SupportedChainId.MAINNET, '0x6B175474E89094C44Da98b954EedeAC495271d0F', 18, 'DAI', 'Dai Stablecoin'); +var DAI_ARBITRUM_ONE = new sdkCore.Token(SupportedChainId.ARBITRUM_ONE, '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', 18, 'DAI', 'Dai stable coin'); +var DAI_OPTIMISM = new sdkCore.Token(SupportedChainId.OPTIMISM, '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', 18, 'DAI', 'Dai stable coin'); +var USDC = new sdkCore.Token(SupportedChainId.MAINNET, '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', 6, 'USDC', 'USD//C'); +var USDC_ARBITRUM = new sdkCore.Token(SupportedChainId.ARBITRUM_ONE, '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8', 6, 'USDC', 'USD//C'); +var USDC_POLYGON = new sdkCore.Token(SupportedChainId.POLYGON, '0x2791bca1f2de4661ed88a30c99a7a9449aa84174', 6, 'USDC', 'USD//C'); +var DAI_POLYGON = new sdkCore.Token(SupportedChainId.POLYGON, '0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063', 18, 'DAI', 'Dai Stablecoin'); +var USDT_POLYGON = new sdkCore.Token(SupportedChainId.POLYGON, '0xc2132d05d31c914a87c6611c10748aeb04b58e8f', 6, 'USDT', 'Tether USD'); +var WBTC_POLYGON = new sdkCore.Token(SupportedChainId.POLYGON, '0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6', 8, 'WBTC', 'Wrapped BTC'); +var USDC_OPTIMISM = new sdkCore.Token(SupportedChainId.OPTIMISM, '0x7F5c764cBc14f9669B88837ca1490cCa17c31607', 6, 'USDC', 'USD//C'); +var USDT = new sdkCore.Token(SupportedChainId.MAINNET, '0xdAC17F958D2ee523a2206206994597C13D831ec7', 6, 'USDT', 'Tether USD'); +var USDT_ARBITRUM_ONE = new sdkCore.Token(SupportedChainId.ARBITRUM_ONE, '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9', 6, 'USDT', 'Tether USD'); +var USDT_OPTIMISM = new sdkCore.Token(SupportedChainId.OPTIMISM, '0x94b008aA00579c1307B0EF2c499aD98a8ce58e58', 6, 'USDT', 'Tether USD'); +var WBTC = new sdkCore.Token(SupportedChainId.MAINNET, '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', 8, 'WBTC', 'Wrapped BTC'); +var WBTC_ARBITRUM_ONE = new sdkCore.Token(SupportedChainId.ARBITRUM_ONE, '0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f', 8, 'WBTC', 'Wrapped BTC'); +var WBTC_OPTIMISM = new sdkCore.Token(SupportedChainId.OPTIMISM, '0x68f180fcCe6836688e9084f035309E29Bf0A2095', 8, 'WBTC', 'Wrapped BTC'); +var FEI = new sdkCore.Token(SupportedChainId.MAINNET, '0x956F47F50A910163D8BF957Cf5846D573E7f87CA', 18, 'FEI', 'Fei USD'); +var TRIBE = new sdkCore.Token(SupportedChainId.MAINNET, '0xc7283b66Eb1EB5FB86327f08e1B5816b0720212B', 18, 'TRIBE', 'Tribe'); +var FRAX = new sdkCore.Token(SupportedChainId.MAINNET, '0x853d955aCEf822Db058eb8505911ED77F175b99e', 18, 'FRAX', 'Frax'); +var FXS = new sdkCore.Token(SupportedChainId.MAINNET, '0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0', 18, 'FXS', 'Frax Share'); +var renBTC = new sdkCore.Token(SupportedChainId.MAINNET, '0xEB4C2781e4ebA804CE9a9803C67d0893436bB27D', 8, 'renBTC', 'renBTC'); +var ETH2X_FLI = new sdkCore.Token(SupportedChainId.MAINNET, '0xAa6E8127831c9DE45ae56bB1b0d4D4Da6e5665BD', 18, 'ETH2x-FLI', 'ETH 2x Flexible Leverage Index'); +var sETH2 = new sdkCore.Token(SupportedChainId.MAINNET, '0xFe2e637202056d30016725477c5da089Ab0A043A', 18, 'sETH2', 'StakeWise Staked ETH2'); +var rETH2 = new sdkCore.Token(SupportedChainId.MAINNET, '0x20BC832ca081b91433ff6c17f85701B6e92486c5', 18, 'rETH2', 'StakeWise Reward ETH2'); +var SWISE = new sdkCore.Token(SupportedChainId.MAINNET, '0x48C3399719B582dD63eB5AADf12A40B4C3f52FA2', 18, 'SWISE', 'StakeWise'); +var WETH_POLYGON_MUMBAI = new sdkCore.Token(SupportedChainId.POLYGON_MUMBAI, '0xa6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa', 18, 'WETH', 'Wrapped Ether'); +var WETH_POLYGON = new sdkCore.Token(SupportedChainId.POLYGON, '0x7ceb23fd6bc0add59e62ac25578270cff1b9f619', 18, 'WETH', 'Wrapped Ether'); +var UNI = (_a$f = {}, + _a$f[SupportedChainId.MAINNET] = new sdkCore.Token(SupportedChainId.MAINNET, UNI_ADDRESS[1], 18, 'UNI', 'Uniswap'), + _a$f[SupportedChainId.RINKEBY] = new sdkCore.Token(SupportedChainId.RINKEBY, UNI_ADDRESS[4], 18, 'UNI', 'Uniswap'), + _a$f[SupportedChainId.ROPSTEN] = new sdkCore.Token(SupportedChainId.ROPSTEN, UNI_ADDRESS[3], 18, 'UNI', 'Uniswap'), + _a$f[SupportedChainId.GOERLI] = new sdkCore.Token(SupportedChainId.GOERLI, UNI_ADDRESS[5], 18, 'UNI', 'Uniswap'), + _a$f[SupportedChainId.KOVAN] = new sdkCore.Token(SupportedChainId.KOVAN, UNI_ADDRESS[42], 18, 'UNI', 'Uniswap'), + _a$f); +var WRAPPED_NATIVE_CURRENCY = __assign(__assign({}, sdkCore.WETH9), (_b$5 = {}, _b$5[SupportedChainId.OPTIMISM] = new sdkCore.Token(SupportedChainId.OPTIMISM, '0x4200000000000000000000000000000000000006', 18, 'WETH', 'Wrapped Ether'), _b$5[SupportedChainId.OPTIMISTIC_KOVAN] = new sdkCore.Token(SupportedChainId.OPTIMISTIC_KOVAN, '0x4200000000000000000000000000000000000006', 18, 'WETH', 'Wrapped Ether'), _b$5[SupportedChainId.ARBITRUM_ONE] = new sdkCore.Token(SupportedChainId.ARBITRUM_ONE, '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1', 18, 'WETH', 'Wrapped Ether'), _b$5[SupportedChainId.ARBITRUM_RINKEBY] = new sdkCore.Token(SupportedChainId.ARBITRUM_RINKEBY, '0xB47e6A5f8b33b3F17603C83a0535A9dcD7E32681', 18, 'WETH', 'Wrapped Ether'), _b$5[SupportedChainId.POLYGON] = new sdkCore.Token(SupportedChainId.POLYGON, '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270', 18, 'WMATIC', 'Wrapped MATIC'), _b$5[SupportedChainId.POLYGON_MUMBAI] = new sdkCore.Token(SupportedChainId.POLYGON_MUMBAI, '0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889', 18, 'WMATIC', 'Wrapped MATIC'), _b$5)); +function isMatic(chainId) { + return chainId === SupportedChainId.POLYGON_MUMBAI || chainId === SupportedChainId.POLYGON; +} +var MaticNativeCurrency = /** @class */ (function (_super) { + __extends(MaticNativeCurrency, _super); + function MaticNativeCurrency(chainId) { + var _this = this; + if (!isMatic(chainId)) + throw new Error('Not matic'); + _this = _super.call(this, chainId, 18, 'MATIC', 'Polygon Matic') || this; + return _this; + } + MaticNativeCurrency.prototype.equals = function (other) { + return other.isNative && other.chainId === this.chainId; + }; + Object.defineProperty(MaticNativeCurrency.prototype, "wrapped", { + get: function () { + if (!isMatic(this.chainId)) + throw new Error('Not matic'); + return WRAPPED_NATIVE_CURRENCY[this.chainId]; + }, + enumerable: false, + configurable: true + }); + return MaticNativeCurrency; +}(sdkCore.NativeCurrency)); +var ExtendedEther = /** @class */ (function (_super) { + __extends(ExtendedEther, _super); + function ExtendedEther() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(ExtendedEther.prototype, "wrapped", { + get: function () { + if (this.chainId in WRAPPED_NATIVE_CURRENCY) + return WRAPPED_NATIVE_CURRENCY[this.chainId]; + throw new Error('Unsupported chain ID'); + }, + enumerable: false, + configurable: true + }); + ExtendedEther.onChain = function (chainId) { + var _a; + return (_a = this._cachedExtendedEther[chainId]) !== null && _a !== void 0 ? _a : (this._cachedExtendedEther[chainId] = new ExtendedEther(chainId)); + }; + ExtendedEther._cachedExtendedEther = {}; + return ExtendedEther; +}(sdkCore.Ether)); +var cachedNativeCurrency = {}; +function nativeOnChain(chainId) { + var _a; + return ((_a = cachedNativeCurrency[chainId]) !== null && _a !== void 0 ? _a : (cachedNativeCurrency[chainId] = isMatic(chainId) + ? new MaticNativeCurrency(chainId) + : ExtendedEther.onChain(chainId))); +} + +// returns null on errors +function useContract(addressOrAddressMap, ABI, withSignerIfPossible) { + if (withSignerIfPossible === void 0) { withSignerIfPossible = true; } + var _a = useActiveWeb3React(), library = _a.library, account = _a.account, chainId = _a.chainId; + return React.useMemo(function () { + if (!addressOrAddressMap || !ABI || !library || !chainId) + return null; + var address; + if (typeof addressOrAddressMap === 'string') + address = addressOrAddressMap; + else + address = addressOrAddressMap[chainId]; + if (!address) + return null; + try { + return getContract(address, ABI, library, withSignerIfPossible && account ? account : undefined); + } + catch (error) { + console.error('Failed to get contract', error); + return null; + } + }, [addressOrAddressMap, ABI, library, chainId, withSignerIfPossible, account]); +} +function useTokenContract(tokenAddress, withSignerIfPossible) { + return useContract(tokenAddress, ERC20ABI, withSignerIfPossible); +} +function useWETHContract(withSignerIfPossible) { + var _a; + var chainId = useActiveWeb3React().chainId; + return useContract(chainId ? (_a = WRAPPED_NATIVE_CURRENCY[chainId]) === null || _a === void 0 ? void 0 : _a.address : undefined, WETH_ABI, withSignerIfPossible); +} +function useERC721Contract(nftAddress) { + return useContract(nftAddress, ERC721_ABI, false); +} +function useERC1155Contract(nftAddress) { + return useContract(nftAddress, ERC1155_ABI, false); +} +function useArgentWalletDetectorContract() { + return useContract(ARGENT_WALLET_DETECTOR_ADDRESS, ARGENT_WALLET_DETECTOR_ABI, false); +} +function useENSRegistrarContract(withSignerIfPossible) { + return useContract(ENS_REGISTRAR_ADDRESSES, ENS_ABI, withSignerIfPossible); +} +function useENSResolverContract(address, withSignerIfPossible) { + return useContract(address, ENS_PUBLIC_RESOLVER_ABI, withSignerIfPossible); +} +function useBytes32TokenContract(tokenAddress, withSignerIfPossible) { + return useContract(tokenAddress, ERC20_BYTES32_ABI, withSignerIfPossible); +} +function useEIP2612Contract(tokenAddress) { + return useContract(tokenAddress, EIP_2612, false); +} +function useV2RouterContract() { + return useContract(V2_ROUTER_ADDRESS, abi$3, true); +} +function useInterfaceMulticall() { + return useContract(MULTICALL_ADDRESS, abi$1, false); +} +function useMerkleDistributorContract() { + return useContract(MERKLE_DISTRIBUTOR_ADDRESS, abi$5, true); +} +function useV3Quoter() { + return useContract(QUOTER_ADDRESSES, abi$2); +} + +var _a$e; +var multicall = reduxMulticall.createMulticall(); +var reducer = redux.combineReducers((_a$e = {}, _a$e[multicall.reducerPath] = multicall.reducer, _a$e)); +redux.createStore(reducer); +function MulticallUpdater() { + var latestBlockNumber = useBlockNumber(); + var chainId = useActiveWeb3React().chainId; + var contract = useInterfaceMulticall(); + return jsxRuntime.jsx(multicall.Updater, { chainId: chainId, latestBlockNumber: latestBlockNumber, contract: contract }, void 0); +} + +function useMultipleContractSingleData() { + var _a; + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var _b = useCallContext(), chainId = _b.chainId, latestBlock = _b.latestBlock; + return (_a = multicall.hooks).useMultipleContractSingleData.apply(_a, __spreadArray([chainId, latestBlock], __read(args), false)); +} +function useSingleCallResult() { + var _a; + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var _b = useCallContext(), chainId = _b.chainId, latestBlock = _b.latestBlock; + return (_a = multicall.hooks).useSingleCallResult.apply(_a, __spreadArray([chainId, latestBlock], __read(args), false)); +} +function useSingleContractMultipleData() { + var _a; + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var _b = useCallContext(), chainId = _b.chainId, latestBlock = _b.latestBlock; + return (_a = multicall.hooks).useSingleContractMultipleData.apply(_a, __spreadArray([chainId, latestBlock], __read(args), false)); +} +function useSingleContractWithCallData() { + var _a; + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var _b = useCallContext(), chainId = _b.chainId, latestBlock = _b.latestBlock; + return (_a = multicall.hooks).useSingleContractWithCallData.apply(_a, __spreadArray([chainId, latestBlock], __read(args), false)); +} +function useCallContext() { + var chainId = useActiveWeb3React().chainId; + var latestBlock = useBlockNumber(); + return { chainId: chainId, latestBlock: latestBlock }; +} + +function safeNamehash(name) { + if (name === undefined) + return undefined; + try { + return hash.namehash(name); + } + catch (error) { + console.debug(error); + return undefined; + } +} + +/** + * Returns true if the string value is zero in hex + * @param hexNumberString + */ +function isZero(hexNumberString) { + return /^0x0*$/.test(hexNumberString); +} + +/** + * Does a lookup for an ENS name to find its address. + */ +function useENSAddress(ensName) { + var _a; + var debouncedName = useDebounce(ensName, 200); + var ensNodeArgument = React.useMemo(function () { return [debouncedName === null ? undefined : safeNamehash(debouncedName)]; }, [debouncedName]); + var registrarContract = useENSRegistrarContract(false); + var resolverAddress = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument); + var resolverAddressResult = (_a = resolverAddress.result) === null || _a === void 0 ? void 0 : _a[0]; + var resolverContract = useENSResolverContract(resolverAddressResult && !isZero(resolverAddressResult) ? resolverAddressResult : undefined, false); + var addr = useSingleCallResult(resolverContract, 'addr', ensNodeArgument); + var changed = debouncedName !== ensName; + return React.useMemo(function () { + var _a, _b; + return ({ + address: changed ? null : (_b = (_a = addr.result) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : null, + loading: changed || resolverAddress.loading || addr.loading, + }); + }, [addr.loading, addr.result, changed, resolverAddress.loading]); +} + +/** + * Does a reverse lookup for an address to find its ENS name. + * Note this is not the same as looking up an ENS name to find an address. + */ +function useENSName(address) { + var _a, _b; + var debouncedAddress = useDebounce(address, 200); + var ensNodeArgument = React.useMemo(function () { + if (!debouncedAddress || !isAddress(debouncedAddress)) + return [undefined]; + return [hash.namehash(debouncedAddress.toLowerCase().substr(2) + ".addr.reverse")]; + }, [debouncedAddress]); + var registrarContract = useENSRegistrarContract(false); + var resolverAddress = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument); + var resolverAddressResult = (_a = resolverAddress.result) === null || _a === void 0 ? void 0 : _a[0]; + var resolverContract = useENSResolverContract(resolverAddressResult && !isZero(resolverAddressResult) ? resolverAddressResult : undefined, false); + var nameCallRes = useSingleCallResult(resolverContract, 'name', ensNodeArgument); + var name = (_b = nameCallRes.result) === null || _b === void 0 ? void 0 : _b[0]; + /* ENS does not enforce that an address owns a .eth domain before setting it as a reverse proxy + and recommends that you perform a match on the forward resolution + see: https://docs.ens.domains/dapp-developer-guide/resolving-names#reverse-resolution + */ + var fwdAddr = useENSAddress(name); + var checkedName = address === (fwdAddr === null || fwdAddr === void 0 ? void 0 : fwdAddr.address) ? name : null; + var changed = debouncedAddress !== address; + return React.useMemo(function () { return ({ + ENSName: changed ? null : checkedName, + loading: changed || resolverAddress.loading || nameCallRes.loading, + }); }, [changed, nameCallRes.loading, checkedName, resolverAddress.loading]); +} + +/** + * Given a name or address, does a lookup to resolve to an address and name + * @param nameOrAddress ENS name or address + */ +function useENS(nameOrAddress) { + var validated = isAddress(nameOrAddress); + var reverseLookup = useENSName(validated ? validated : undefined); + var lookup = useENSAddress(nameOrAddress); + return React.useMemo(function () { return ({ + loading: reverseLookup.loading || lookup.loading, + address: validated ? validated : lookup.address, + name: reverseLookup.ENSName ? reverseLookup.ENSName : !validated && lookup.address ? nameOrAddress || null : null, + }); }, [lookup.address, lookup.loading, nameOrAddress, reverseLookup.ENSName, reverseLookup.loading, validated]); +} + +/** + * Returns the gas value plus a margin for unexpected or variable gas costs + * @param value the gas value to pad + */ +function calculateGasMargin(value) { + return value.mul(120).div(100); +} + +/** + * Be careful adding to this enum, always assign a unique value (typescript will not prevent duplicate values). + * These values is persisted in state and if you change the value it will cause errors + */ +var TransactionType; +(function (TransactionType) { + TransactionType[TransactionType["APPROVAL"] = 0] = "APPROVAL"; + TransactionType[TransactionType["SWAP"] = 1] = "SWAP"; + TransactionType[TransactionType["DEPOSIT_LIQUIDITY_STAKING"] = 2] = "DEPOSIT_LIQUIDITY_STAKING"; + TransactionType[TransactionType["WITHDRAW_LIQUIDITY_STAKING"] = 3] = "WITHDRAW_LIQUIDITY_STAKING"; + TransactionType[TransactionType["CLAIM"] = 4] = "CLAIM"; + TransactionType[TransactionType["VOTE"] = 5] = "VOTE"; + TransactionType[TransactionType["DELEGATE"] = 6] = "DELEGATE"; + TransactionType[TransactionType["WRAP"] = 7] = "WRAP"; + TransactionType[TransactionType["CREATE_V3_POOL"] = 8] = "CREATE_V3_POOL"; + TransactionType[TransactionType["ADD_LIQUIDITY_V3_POOL"] = 9] = "ADD_LIQUIDITY_V3_POOL"; + TransactionType[TransactionType["ADD_LIQUIDITY_V2_POOL"] = 10] = "ADD_LIQUIDITY_V2_POOL"; + TransactionType[TransactionType["MIGRATE_LIQUIDITY_V3"] = 11] = "MIGRATE_LIQUIDITY_V3"; + TransactionType[TransactionType["COLLECT_FEES"] = 12] = "COLLECT_FEES"; + TransactionType[TransactionType["REMOVE_LIQUIDITY_V3"] = 13] = "REMOVE_LIQUIDITY_V3"; + TransactionType[TransactionType["SUBMIT_PROPOSAL"] = 14] = "SUBMIT_PROPOSAL"; +})(TransactionType || (TransactionType = {})); +var addTransaction = toolkit.createAction('transactions/addTransaction'); +var clearAllTransactions = toolkit.createAction('transactions/clearAllTransactions'); +var finalizeTransaction = toolkit.createAction('transactions/finalizeTransaction'); +var checkedTransaction = toolkit.createAction('transactions/checkedTransaction'); + +var SUPPORTED_TRANSACTION_TYPES = [ + TransactionType.ADD_LIQUIDITY_V2_POOL, + TransactionType.ADD_LIQUIDITY_V3_POOL, + TransactionType.CREATE_V3_POOL, + TransactionType.REMOVE_LIQUIDITY_V3, + TransactionType.SWAP, +]; +var FIREBASE_API_KEY = process.env.REACT_APP_FIREBASE_KEY; +var firebaseEnabled = typeof FIREBASE_API_KEY !== 'undefined'; +if (firebaseEnabled) + initializeFirebase(); +function useMonitoringEventCallback() { + var chainId = useActiveWeb3React().chainId; + return React.useCallback(function log(type, _a) { + var transactionResponse = _a.transactionResponse, walletAddress = _a.walletAddress; + return __awaiter(this, void 0, void 0, function () { + var db; + return __generator(this, function (_b) { + if (!firebaseEnabled) + return [2 /*return*/]; + db = database.getDatabase(); + if (!walletAddress) { + console.debug('Wallet address required to log monitoring events.'); + return [2 /*return*/]; + } + try { + database.push(database.ref(db, 'trm'), { + chainId: chainId, + origin: window.location.origin, + timestamp: Date.now(), + tx: transactionResponse, + type: type, + walletAddress: walletAddress, + }); + } + catch (e) { + console.debug('Error adding document: ', e); + } + return [2 /*return*/]; + }); + }); + }, [chainId]); +} +function useTransactionMonitoringEventCallback() { + var account = useActiveWeb3React().account; + var log = useMonitoringEventCallback(); + return React.useCallback(function (info, transactionResponse) { + if (SUPPORTED_TRANSACTION_TYPES.includes(info.type)) { + log(TransactionType[info.type], { + transactionResponse: (function (_a) { + var hash = _a.hash, v = _a.v, r = _a.r, s = _a.s; + return ({ hash: hash, v: v, r: r, s: s }); + })(transactionResponse), + walletAddress: account !== null && account !== void 0 ? account : undefined, + }); + } + }, [account, log]); +} +function useWalletConnectMonitoringEventCallback() { + var log = useMonitoringEventCallback(); + return React.useCallback(function (walletAddress) { + log('WALLET_CONNECTED', { transactionResponse: { hash: '', r: '', s: '', v: -1 }, walletAddress: walletAddress }); + }, [log]); +} +function initializeFirebase() { + app.initializeApp({ + apiKey: process.env.REACT_APP_FIREBASE_KEY, + authDomain: 'interface-monitoring.firebaseapp.com', + databaseURL: 'https://interface-monitoring-default-rtdb.firebaseio.com', + projectId: 'interface-monitoring', + storageBucket: 'interface-monitoring.appspot.com', + messagingSenderId: '968187720053', + appId: '1:968187720053:web:acedf72dce629d470be33c', + }); +} + +// helper that can take a ethers library transaction response and add it to the list of transactions +function useTransactionAdder() { + var _a = useActiveWeb3React(), chainId = _a.chainId, account = _a.account; + var dispatch = useAppDispatch(); + var logMonitoringEvent = useTransactionMonitoringEventCallback(); + return React.useCallback(function (response, info) { + if (!account) + return; + if (!chainId) + return; + var hash = response.hash; + if (!hash) { + throw Error('No transaction hash found.'); + } + dispatch(addTransaction({ hash: hash, from: account, info: info, chainId: chainId })); + logMonitoringEvent(info, response); + }, [account, chainId, dispatch, logMonitoringEvent]); +} +// returns all the transactions for the current chain +function useAllTransactions() { + var _a; + var chainId = useActiveWeb3React().chainId; + var state = useAppSelector(function (state) { return state.transactions; }); + return chainId ? (_a = state[chainId]) !== null && _a !== void 0 ? _a : {} : {}; +} +function useTransaction(transactionHash) { + var allTransactions = useAllTransactions(); + if (!transactionHash) { + return undefined; + } + return allTransactions[transactionHash]; +} +function useIsTransactionPending(transactionHash) { + var transactions = useAllTransactions(); + if (!transactionHash || !transactions[transactionHash]) + return false; + return !transactions[transactionHash].receipt; +} +function useIsTransactionConfirmed(transactionHash) { + var transactions = useAllTransactions(); + if (!transactionHash || !transactions[transactionHash]) + return false; + return Boolean(transactions[transactionHash].receipt); +} +/** + * Returns whether a transaction happened in the last day (86400 seconds * 1000 milliseconds / second) + * @param tx to check for recency + */ +function isTransactionRecent(tx) { + return new Date().getTime() - tx.addedTime < 86400000; +} +// returns whether a token has a pending approval transaction +function useHasPendingApproval(token, spender) { + var allTransactions = useAllTransactions(); + return React.useMemo(function () { + return typeof (token === null || token === void 0 ? void 0 : token.address) === 'string' && + typeof spender === 'string' && + Object.keys(allTransactions).some(function (hash) { + var tx = allTransactions[hash]; + if (!tx) + return false; + if (tx.receipt) { + return false; + } + else { + if (tx.info.type !== TransactionType.APPROVAL) + return false; + return tx.info.spender === spender && tx.info.tokenAddress === token.address && isTransactionRecent(tx); + } + }); + }, [allTransactions, spender, token === null || token === void 0 ? void 0 : token.address]); +} +// watch for submissions to claim +// return null if not done loading, return undefined if not found +function useUserHasSubmittedClaim(account) { + var allTransactions = useAllTransactions(); + // get the txn if it has been submitted + var claimTxn = React.useMemo(function () { + var txnIndex = Object.keys(allTransactions).find(function (hash) { + var tx = allTransactions[hash]; + return tx.info.type === TransactionType.CLAIM && tx.info.recipient === account; + }); + return txnIndex && allTransactions[txnIndex] ? allTransactions[txnIndex] : undefined; + }, [account, allTransactions]); + return { claimSubmitted: Boolean(claimTxn), claimTxn: claimTxn }; +} + +var FETCH_CLAIM_MAPPING_PROMISE = null; +function fetchClaimMapping() { + return (FETCH_CLAIM_MAPPING_PROMISE !== null && FETCH_CLAIM_MAPPING_PROMISE !== void 0 ? FETCH_CLAIM_MAPPING_PROMISE : (FETCH_CLAIM_MAPPING_PROMISE = fetch("https://raw.githubusercontent.com/Uniswap/mrkl-drop-data-chunks/final/chunks/mapping.json") + .then(function (res) { return res.json(); }) + .catch(function (error) { + console.error('Failed to get claims mapping', error); + FETCH_CLAIM_MAPPING_PROMISE = null; + }))); +} +var FETCH_CLAIM_FILE_PROMISES = {}; +function fetchClaimFile(key) { + var _a; + return ((_a = FETCH_CLAIM_FILE_PROMISES[key]) !== null && _a !== void 0 ? _a : (FETCH_CLAIM_FILE_PROMISES[key] = fetch("https://raw.githubusercontent.com/Uniswap/mrkl-drop-data-chunks/final/chunks/" + key + ".json") + .then(function (res) { return res.json(); }) + .catch(function (error) { + console.error("Failed to get claim file mapping for starting address " + key, error); + delete FETCH_CLAIM_FILE_PROMISES[key]; + }))); +} +var FETCH_CLAIM_PROMISES = {}; +// returns the claim for the given address, or null if not valid +function fetchClaim(account) { + var _a; + var formatted = isAddress(account); + if (!formatted) + return Promise.reject(new Error('Invalid address')); + return ((_a = FETCH_CLAIM_PROMISES[account]) !== null && _a !== void 0 ? _a : (FETCH_CLAIM_PROMISES[account] = fetchClaimMapping() + .then(function (mapping) { + var e_1, _a; + var sorted = Object.keys(mapping).sort(function (a, b) { return (a.toLowerCase() < b.toLowerCase() ? -1 : 1); }); + try { + for (var sorted_1 = __values(sorted), sorted_1_1 = sorted_1.next(); !sorted_1_1.done; sorted_1_1 = sorted_1.next()) { + var startingAddress = sorted_1_1.value; + var lastAddress = mapping[startingAddress]; + if (startingAddress.toLowerCase() <= formatted.toLowerCase()) { + if (formatted.toLowerCase() <= lastAddress.toLowerCase()) { + return startingAddress; + } + } + else { + throw new Error("Claim for " + formatted + " was not found in partial search"); + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (sorted_1_1 && !sorted_1_1.done && (_a = sorted_1.return)) _a.call(sorted_1); + } + finally { if (e_1) throw e_1.error; } + } + throw new Error("Claim for " + formatted + " was not found after searching all mappings"); + }) + .then(fetchClaimFile) + .then(function (result) { + if (result[formatted]) + return result[formatted]; + throw new Error("Claim for " + formatted + " was not found in claim file!"); + }) + .catch(function (error) { + console.debug('Claim fetch failed', error); + throw error; + }))); +} +// parse distributorContract blob and detect if user has claim data +// null means we know it does not +function useUserClaimData(account) { + var chainId = useActiveWeb3React().chainId; + var _a = __read(React.useState({}), 2), claimInfo = _a[0], setClaimInfo = _a[1]; + React.useEffect(function () { + if (!account || chainId !== 1) + return; + fetchClaim(account) + .then(function (accountClaimInfo) { + return setClaimInfo(function (claimInfo) { + var _a; + return __assign(__assign({}, claimInfo), (_a = {}, _a[account] = accountClaimInfo, _a)); + }); + }) + .catch(function () { + setClaimInfo(function (claimInfo) { + var _a; + return __assign(__assign({}, claimInfo), (_a = {}, _a[account] = null, _a)); + }); + }); + }, [account, chainId]); + return account && chainId === 1 ? claimInfo[account] : null; +} +// check if user is in blob and has not yet claimed UNI +function useUserHasAvailableClaim(account) { + var _a; + var userClaimData = useUserClaimData(account); + var distributorContract = useMerkleDistributorContract(); + var isClaimedResult = useSingleCallResult(distributorContract, 'isClaimed', [userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.index]); + // user is in blob and contract marks as unclaimed + return Boolean(userClaimData && !isClaimedResult.loading && ((_a = isClaimedResult.result) === null || _a === void 0 ? void 0 : _a[0]) === false); +} +function useUserUnclaimedAmount(account) { + var chainId = useActiveWeb3React().chainId; + var userClaimData = useUserClaimData(account); + var canClaim = useUserHasAvailableClaim(account); + var uni = chainId ? UNI[chainId] : undefined; + if (!uni) + return undefined; + if (!canClaim || !userClaimData) { + return sdkCore.CurrencyAmount.fromRawAmount(uni, JSBI__default["default"].BigInt(0)); + } + return sdkCore.CurrencyAmount.fromRawAmount(uni, JSBI__default["default"].BigInt(userClaimData.amount)); +} +function useClaimCallback(account) { + // get claim data for this account + var _a = useActiveWeb3React(), library = _a.library, chainId = _a.chainId; + var claimData = useUserClaimData(account); + // used for popup summary + var unclaimedAmount = useUserUnclaimedAmount(account); + var addTransaction = useTransactionAdder(); + var distributorContract = useMerkleDistributorContract(); + var claimCallback = function () { + return __awaiter(this, void 0, void 0, function () { + var args; + var _a; + return __generator(this, function (_b) { + if (!claimData || !account || !library || !chainId || !distributorContract) + return [2 /*return*/]; + args = [claimData.index, account, claimData.amount, claimData.proof]; + return [2 /*return*/, (_a = distributorContract.estimateGas)['claim'].apply(_a, __spreadArray(__spreadArray([], __read(args), false), [{}], false)).then(function (estimatedGasLimit) { + return distributorContract + .claim.apply(distributorContract, __spreadArray(__spreadArray([], __read(args), false), [{ value: null, gasLimit: calculateGasMargin(estimatedGasLimit) }], false)).then(function (response) { + addTransaction(response, { + type: TransactionType.CLAIM, + recipient: account, + uniAmountRaw: unclaimedAmount === null || unclaimedAmount === void 0 ? void 0 : unclaimedAmount.quotient.toString(), + }); + return response.hash; + }); + })]; + }); + }); + }; + return { claimCallback: claimCallback }; +} + +var _a$d, _b$4, _c$3, _d$2, _e$1, _f, _g, _h; +var WRAPPED_NATIVE_CURRENCIES_ONLY = Object.fromEntries(Object.entries(WRAPPED_NATIVE_CURRENCY).map(function (_a) { + var _b = __read(_a, 2), key = _b[0], value = _b[1]; + return [key, [value]]; +})); +// used to construct intermediary pairs for trading +var BASES_TO_CHECK_TRADES_AGAINST = __assign(__assign({}, WRAPPED_NATIVE_CURRENCIES_ONLY), (_a$d = {}, _a$d[SupportedChainId.MAINNET] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.MAINNET]), false), [DAI, USDC, USDT, WBTC], false), _a$d[SupportedChainId.OPTIMISM] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.OPTIMISM]), false), [ + DAI_OPTIMISM, + USDT_OPTIMISM, + WBTC_OPTIMISM, +], false), _a$d[SupportedChainId.ARBITRUM_ONE] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.ARBITRUM_ONE]), false), [ + DAI_ARBITRUM_ONE, + USDT_ARBITRUM_ONE, + WBTC_ARBITRUM_ONE, +], false), _a$d[SupportedChainId.POLYGON] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.POLYGON]), false), [ + DAI_POLYGON, + USDC_POLYGON, + USDT_POLYGON, + WETH_POLYGON, +], false), _a$d)); +var ADDITIONAL_BASES = (_b$4 = {}, + _b$4[SupportedChainId.MAINNET] = (_c$3 = { + '0xF16E4d813f4DcfDe4c5b44f305c908742De84eF0': [ETH2X_FLI] + }, + _c$3[rETH2.address] = [sETH2], + _c$3[SWISE.address] = [sETH2], + _c$3[FEI.address] = [TRIBE], + _c$3[TRIBE.address] = [FEI], + _c$3[FRAX.address] = [FXS], + _c$3[FXS.address] = [FRAX], + _c$3[WBTC.address] = [renBTC], + _c$3[renBTC.address] = [WBTC], + _c$3), + _b$4); +/** + * Some tokens can only be swapped via certain pairs, so we override the list of bases that are considered for these + * tokens. + */ +var CUSTOM_BASES = (_d$2 = {}, + _d$2[SupportedChainId.MAINNET] = (_e$1 = {}, + _e$1[AMPL.address] = [DAI, WRAPPED_NATIVE_CURRENCY[SupportedChainId.MAINNET]], + _e$1), + _d$2); +/** + * Shows up in the currency select for swap and add liquidity + */ +var COMMON_BASES = (_f = {}, + _f[SupportedChainId.MAINNET] = [ + nativeOnChain(SupportedChainId.MAINNET), + DAI, + USDC, + USDT, + WBTC, + WRAPPED_NATIVE_CURRENCY[SupportedChainId.MAINNET], + ], + _f[SupportedChainId.ROPSTEN] = [ + nativeOnChain(SupportedChainId.ROPSTEN), + WRAPPED_NATIVE_CURRENCY[SupportedChainId.ROPSTEN], + ], + _f[SupportedChainId.RINKEBY] = [ + nativeOnChain(SupportedChainId.RINKEBY), + WRAPPED_NATIVE_CURRENCY[SupportedChainId.RINKEBY], + ], + _f[SupportedChainId.GOERLI] = [nativeOnChain(SupportedChainId.GOERLI), WRAPPED_NATIVE_CURRENCY[SupportedChainId.GOERLI]], + _f[SupportedChainId.KOVAN] = [nativeOnChain(SupportedChainId.KOVAN), WRAPPED_NATIVE_CURRENCY[SupportedChainId.KOVAN]], + _f[SupportedChainId.ARBITRUM_ONE] = [ + nativeOnChain(SupportedChainId.ARBITRUM_ONE), + DAI_ARBITRUM_ONE, + USDC_ARBITRUM, + USDT_ARBITRUM_ONE, + WBTC_ARBITRUM_ONE, + WRAPPED_NATIVE_CURRENCY[SupportedChainId.ARBITRUM_ONE], + ], + _f[SupportedChainId.ARBITRUM_RINKEBY] = [ + nativeOnChain(SupportedChainId.ARBITRUM_RINKEBY), + WRAPPED_NATIVE_CURRENCY[SupportedChainId.ARBITRUM_RINKEBY], + ], + _f[SupportedChainId.OPTIMISM] = [ + nativeOnChain(SupportedChainId.OPTIMISM), + DAI_OPTIMISM, + USDC_OPTIMISM, + USDT_OPTIMISM, + WBTC_OPTIMISM, + ], + _f[SupportedChainId.OPTIMISTIC_KOVAN] = [nativeOnChain(SupportedChainId.OPTIMISTIC_KOVAN)], + _f[SupportedChainId.POLYGON] = [ + nativeOnChain(SupportedChainId.POLYGON), + WETH_POLYGON, + USDC_POLYGON, + DAI_POLYGON, + USDT_POLYGON, + WBTC_POLYGON, + ], + _f[SupportedChainId.POLYGON_MUMBAI] = [ + nativeOnChain(SupportedChainId.POLYGON_MUMBAI), + WRAPPED_NATIVE_CURRENCY[SupportedChainId.POLYGON_MUMBAI], + WETH_POLYGON_MUMBAI, + ], + _f); +// used to construct the list of all pairs we consider by default in the frontend +__assign(__assign({}, WRAPPED_NATIVE_CURRENCIES_ONLY), (_g = {}, _g[SupportedChainId.MAINNET] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.MAINNET]), false), [DAI, USDC, USDT, WBTC], false), _g)); +(_h = {}, + _h[SupportedChainId.MAINNET] = [ + [ + new sdkCore.Token(SupportedChainId.MAINNET, '0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643', 8, 'cDAI', 'Compound Dai'), + new sdkCore.Token(SupportedChainId.MAINNET, '0x39AA39c021dfbaE8faC545936693aC917d5E7563', 8, 'cUSDC', 'Compound USD Coin'), + ], + [USDC, USDT], + [DAI, USDT], + ], + _h); + +var EthereumLogo = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAAAXNSR0IB2cksfwAAAAlwSFlzAAALEwAACxMBAJqcGAAADxdJREFUeJztXVtzFMcVplwuP8VVeYmf7HJ+RKqSl/AQP6X8H+yqXUEIjhMnQY5jO9oVCIzA5mowdzAYG4xAGAyWLC5G3IyDL8gOASUYKrarYGZWC7qi23b6692VV6uZ7e6ZnT3di07VV6JUaLfnnG+6z+lz+vScOXUoL6SzP52/2PtlQ9p7piHlLU2k3P2JJqcjkXLO8589/OdN/tPjvx8VEP8Wv+sp/J8O/A3+Fp+Bz8JnUj/XrPjIwjT7ybxm57fJlLsy2eR2cwPe4QZksYB/Nr4D34XvxHdTP/8DJ+k0e4S/lb9Jpr2WZJNzgRtjPDaDS4DvFmPgY8GYMDZq/dStNKQzv0qmnA1c6RkqgysQIoMxYqzU+qoLWZDO/jyZdl7lir1ObdwQZLiOseMZqPVonSTS7i+4AtsTTW6O2pDR4ebEs/Bnotar8dKw2Pk1n0I76Y0W16zgdOIZqfVsnCSbvaeEB2+AkWpCBEQS/Jmp9U4u3Fl6nIdWB6gNQgb+7NABtR1qLjxcejiZdhfxKXGA3AjUswHXAXQBnVDbpSbCPeO5fAr8hlrxpgE6gW6o7ROb5N96Z3l9ePZxgUcMXEd1NxssbMk8kWxyztEr2A5AV3XjGySb3acTSLYYoFjL4EF31PYLLXwaeyiZcltnp/woEJtIrdAltT21BEkR7tnuo1dgfQC6tCbRlGh1H02k3C5qpalg/bt3WdOGDPk4lACdct1S27eiLEgPPMbDmcvkylLAgiUOc/sm2LHuITavmX48KoBun1828DNqO/tKsiX7JF+zeqmVpIqPzg2xyckc++Sfw2ImoB6POtxe6Jra3tMEb75Nxv/Hmxk2MZGbIsCpz4bZn1d45OPSIQF0Tm13IViXbJn2i+i9NcYgRQIA+zsGyMelA6Fzap8AnqktDl8RO9r7WVFKCQAs3dJHPj4tcN2TRQcizrcs1Hv+NZf1D04GEqDj/JBwDqnHqYNCiFj7fYL8Jg+9AnTQfXmYlUo5AYAtbffIx6lNAm6L2hpfbO/atcO3dGsfy+VyUgIAL66yySEE3FzNto2R2ElYtrffkHbYd7fHWbkEEeDQyUHk6cnHrQkPtonV+CKla2FWDx6+nwQRAFi5K0s+bl3ANrGmkvP5fPoH1cFfX/fYyP2cNgG6Lg6z55a55OPXJgG3UVzGn2vbug98fvW+r/FlBADePtJPPn59iKKS6lYW5ad++8q4Vu+5G2h8FQIAr663JFlUAtiqqksBZ1Uj9UPp4neLHeb0TUQmwNEzg2xemv559OE2VsX4KE2ysXoXhpOJCgGAdXttShblAZtVpayMe5Zt1A+ji5fXZdj4uL/jF4YApy4NsxdaLXQIue2iGb/Ze4r6IcLg6rejUuPrEAB47yO7kkVTJIhyAsnG41rYylUVHQIAizdZlixqyh9DC2V8HGKkHrwuELffHZiUWz4kAVBEAueS+jl1EepAqo2ndLFW64guAYBNB2xMFjmdWsbHWXbqQesC0zMMGjcBgEVv2JYs4tDpT5BvzmDAoBWBxM2tH8a0jB+FAAe77EsWwaZKxkdLE9u2fPce65dbu4oEAFp32JYscnNK7WrQ14Z+sOpAMefwiLrjVy0CdF0cYguX2rU3ANtKCWBTdS9wqWcklPGjEgDYcdiuZBEaV1U0PtqbUQ9SB6/vyoY2fjUIALy81q5kUcUWduhxRz1AVcxvdthtb2aVT60JcOT0oKg4otaHKmBjX+OLA50GN2Esx+FT8mRPLQgAIO1MrQ91ArgZ31JytDqlHpwqXlrjsbExvZg/TgKcvDTM/rjcHocQtp45/ae9FuqBqeLr/6gle2pFAAChKLVeVAFbzyRAk3OBemAq2LhfPdlTSwIA6Y12JItg62nGR9tzyq7bqljY4rK+e5WrfCgJcPzskHBOqfUkJQC39bRW9+h9Tz0oFXx8Yahqxo+DAMCGfXY4hLB5SfjnrqQekAypjRntZA8FAU5/NixK0an1JQNsXrL+m1/4ceM7/WRPJcExsas3Rtn7nQNVJ8GBj82vHppWKBLrNStVAOrzqyWjPHzEWQGEbjBW81t9bPn2LNt9tF/UE1SLBMu2Ge4QcpsL4+MyJPLBVADi68HhcMmeUrnbP8kufDUyw8ggQBHoD7Dt4D3WyX2NqASAv/L7Fnr9VYK4CAs3YlEPpBLOfxk+2QP5wRlnZy7ztTnAUKUEKGLJpj72JnfmUFoehQTbDpldPQTb8/Xfe5Z6IEHA1BxWem+N8rdd/ib7EaAUq/dkxZoelgTYtaTWYxBwJR7y/8uoB+IHnMbB26sjY+M59uU1vr5/qj6FywhQxIodWfbOh/2ioZQOAZCzMLV6CLafU7hUkXww5Wjr8j/S7Sdo+3LxyojSGx+WAFN+wtY+tp1P7V0afsIbbxtaPcRtb2T1b+Mqj90flcf8t91x1v158PoeBwGKWLy5j23kfsIxBT/h5KfDoj8RtV7LIaqFTcwBfHUt+Eg35L//G2WnqxSyhSVAKdZwP+FgV2U/Yc9R85JFIieQwH25BgymCHTt9JPxiRy7ch3xe/QQrdoEKGLlzqzICgb5CQb2Je6ZU7g0mXogAmjR5mWnJ3uwB3Dp65nxu4kEKGIZ9xN2tN9jJy5OJ6txfYm57TEDGNPwCdm0otzJTLCzX+T31uMwfJwEmNpP2NLHNu2/y453/0gEw/oSe3MK16dTD2Sqf+/N78diN3qtCDDlMG7qY2v33mWHTg6Y1ZeY294YAhw7Ozi1P19L1IIA0/yEXdxpfMeQWUAQwJAlAClUtHOrdwL8fW3GpBPGnlFOIIDp8lh3dT19EwiAJe4PprWdKziBRoWBALaB1/JpEhsothMAdYJY8w3dDhZh4HkDBuIL7J7t+qDfWgKg57BRYV85uO0xA3SQD0SCl9ZkRP9eWwjwyrqM8bUABXQYkwySpU0xhb62Lcs6z5u7E4idPpUDIn8ypeOYSAYZkg5esTPLPr0yIu2+gd1CnA3QTcvGSYA0B6IY2TpfXNLQxo5a30BDyluKI2HPUA+kCHj/qNlDDl0WKsGxevd49LAxqvGxPM2XjBV+AJpNYp/DpJ1AURBiUkkYvP9i9S9yAnjTZX+DaffoJ+H9g7CGR1j3nEKDCIS12OLGd6HGwaRoQJSEmVYU+rfVHhu+/2MR6LWbo+JMQGUmO6Lo4kSIsDFMWKfSNRRLWWnJOdrPm3aAVBSFmlgWXt7sEQc4kB+QKRBv5Pb2e7ERAIUqssbROL629eDMMSzZbFiZeLEs3NSDISjhLpeh4Umx7ssaMiD+bpMUaOgQAE6b7DYxjAkdS7ouzoxScFUdtT7LMe1giIlHw/AmORn/g6AoFlWps0OdP7p7hiUA/AuVUi74A+gU4vf5KC2XOYkkBCg9Gmbq4VBMm0gRBwkqgGX7B1A+PO+ggpKgsO4vK+VhHXwBVAAFkQuhqqk3kE07HGry8XDU5FcStIWHl40Zo9LnwH9AXZ6MAHBCZUe8EaLiFLBsL2LVbjOrgWccDze5QQTeQpX27zj6tV3hJM4r6zPsg5Lpemr7lv9eRiIA5V4dCruR+wxuLz+jQYTpLWIwHQ8MqZ0P/Pb7MdYiuQMYpMLOI87vIcRU2ZrFUnPwhNp+A7arTb5xzLdFjOlNorCTpio4+o0zhSBOpc+EZy+LKJDD33lYLyNpYPXvNPg2ibKhTRzqA3QE9wUiHAzTtgXx/po9+jUJpreTD2wTlw8HzW4UCY/e7wpYmSCc1NmDRxQQpioJOQzTbxgLbBSZXwbMbxWLmDtsj8B/3RiteA8gMnr7QtYlItEjW3JMQMVWsflZwL1OPUgZEM6FFWwrI2dQWp+H4o3NB/S2kMuBo+zUepFB2ixaEMCSdvFf/Lvy+UGZIKpAW5hiNBDF+Cae+/MlgEq7eFsujMAWbdSegdXoEoZNKFmewAwoXhhRWAasuDIGTRuitI57kNrFK18ZA7Hp0qgPz4RvHhmVACZV90ihc2lUfhYwr3GEHxrS4XsIRiEAchQmVfdUgva1cRCbLo58sayKKG4CIOdvWnVPxZckzMWRYhYwsFAkCDpXxkYlgHHVPRUQ+upYQQDLLo/W7SkYhgAoOaN+Ti0CRLk8GpJIOQeoH0IVSOfeCagiqgYBUH1sYnVPILjtIhkf0pDOPM6diAHyh1EEpufxClVEYQmA4o9Gi66Mhc1gu8gEgCTT7iLqB9KBrIooDAGM7fUXRABus6oYH5JOs4e5M/EN9UNpsF+0gq8WAd4zuLrH9/m5rWCzqhEAkkw7c23YIi4CmTl0EI1KAFHdY9UVsW4Otqqq8UtIsJz+AdWBJhNRCYD0M/Vz6AA2isX4kPxS4JyjfkgdVKoikhHgrfctC/m4bao+9ZfLwpbMEwlDGkupoFIVUSUCtJ80v7qnDB5sE6vxi5Jsdp+2yR9AFdCoTxVREAEwaxjTy08JfN3nNqmJ8adIkHJb6R9cHbt9qoiCCIBOJNTj1QFsUVPjQ/ha8xCPNfdRP7wOcFmUjAC7j9hR3TNlfG4D2KLmBCiQ4JFEyu2iVoIqyquIyglgT3VPAVz3gSXetZJEq/tossm9TK4MRbSWVBGVEwDtXqjHpwqhc657UuMXZUF64DHuiPRSK0UVOLJdTgCcPKIelzrcXuic2u7TJNmSfdIWEhSriIoEsKm6BzqGrqnt7StgpS3LAc7to+MIqntMvM/HD9CtcW9+uWBdssUxxDk+dPGiHocSoFNT1nyZiIOmloWIJqMQ6tF6+7oi9gnEZpE9O4bmwc1Bh2RxfjUkv21sT+7AIHg1396NS5CksC2LSAnoqmaJnVqJSCWLeoLZJSEYophjeewpXUpBtYpN5WW1AnQSWyWPaQKGc7Y32lRtHJvhhQ7cxrp+64NElJw3OW3URqB76522qpVu2yw4vWLTMbTohne7I5/YqUfBIUZbTiWHMjx/ttAHNR8kwVn2fJOKeogYxGZOu/b5/FnJt6vJ9yyyI8tYZvhejF25LcusVBa0N0OPO5ObWWJsGKO0FdushBckRdDqFP1u0fSYsss5vluMgY8FY7IuYVMPgrbn6H2PCxBEJBHn9Tf8s4UHz78L3zmj5fqsmCG4DAk3YiWbvGfFvYgpdz888EJL/J7Chdkerk8XEP8Wv+vJzyo8EsHf8L/FZ+Czpi5YqjP5P2ey0rAsl+yGAAAAAElFTkSuQmCC"; + +var arbitrumLogoUrl = "data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20viewBox%3D%220%200%20470.287%20514.251%22%20enable-background%3D%22new%200%200%20470.287%20514.251%22%20xml%3Aspace%3D%22preserve%22%3E%3Cg%20id%3D%22Background%22%3E%3C%2Fg%3E%3Cg%20id%3D%22Logos_and_symbols%22%3E%20%3Cg%20id%3D%22SYMBOL_VER_3%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_4_3_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_1_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_1_%22%3E%20%20%3Cg%20id%3D%22_x31_-3%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_14_%22%3E%20%20%20%3Cpath%20fill%3D%22%232D374B%22%20d%3D%22M291.134%2C237.469l35.654-60.5l96.103%2C149.684l0.046%2C28.727l-0.313-197.672%20%20%20%20c-0.228-4.832-2.794-9.252-6.887-11.859L242.715%2C46.324c-4.045-1.99-9.18-1.967-13.22%2C0.063c-0.546%2C0.272-1.06%2C0.57-1.548%2C0.895%20%20%20%20l-0.604%2C0.379L59.399%2C144.983l-0.651%2C0.296c-0.838%2C0.385-1.686%2C0.875-2.48%2C1.444c-3.185%2C2.283-5.299%2C5.66-5.983%2C9.448%20%20%20%20c-0.103%2C0.574-0.179%2C1.158-0.214%2C1.749l0.264%2C161.083l89.515-138.745c11.271-18.397%2C35.825-24.323%2C58.62-24.001l26.753%2C0.706%20%20%20%20L67.588%2C409.765l18.582%2C10.697L245.692%2C157.22l70.51-0.256L157.091%2C426.849l66.306%2C38.138l7.922%2C4.556%20%20%20%20c3.351%2C1.362%2C7.302%2C1.431%2C10.681%2C0.21l175.453-101.678l-33.544%2C19.438L291.134%2C237.469z%20M304.736%2C433.395l-66.969-105.108%20%20%20%20l40.881-69.371l87.952%2C138.628L304.736%2C433.395z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%2328A0F0%22%20points%3D%22237.768%2C328.286%20304.736%2C433.395%20366.601%2C397.543%20278.648%2C258.915%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2328A0F0%22%20d%3D%22M422.937%2C355.379l-0.046-28.727l-96.103-149.684l-35.654%2C60.5l92.774%2C150.043l33.544-19.438%20%20%20%20c3.29-2.673%2C5.281-6.594%2C5.49-10.825L422.937%2C355.379z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23FFFFFF%22%20d%3D%22M20.219%2C382.469l47.369%2C27.296l157.634-252.801l-26.753-0.706c-22.795-0.322-47.35%2C5.604-58.62%2C24.001%20%20%20%20L50.334%2C319.004l-30.115%2C46.271V382.469z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%23FFFFFF%22%20points%3D%22316.202%2C156.964%20245.692%2C157.22%2086.17%2C420.462%20141.928%2C452.565%20157.091%2C426.849%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2396BEDC%22%20d%3D%22M452.65%2C156.601c-0.59-14.746-8.574-28.245-21.08-36.104L256.28%2C19.692%20%20%20%20c-12.371-6.229-27.825-6.237-40.218-0.004c-1.465%2C0.739-170.465%2C98.752-170.465%2C98.752c-2.339%2C1.122-4.592%2C2.458-6.711%2C3.975%20%20%20%20c-11.164%2C8.001-17.969%2C20.435-18.668%2C34.095v208.765l30.115-46.271L50.07%2C157.921c0.035-0.589%2C0.109-1.169%2C0.214-1.741%20%20%20%20c0.681-3.79%2C2.797-7.171%2C5.983-9.456c0.795-0.569%2C172.682-100.064%2C173.228-100.337c4.04-2.029%2C9.175-2.053%2C13.22-0.063%20%20%20%20l173.022%2C99.523c4.093%2C2.607%2C6.659%2C7.027%2C6.887%2C11.859v199.542c-0.209%2C4.231-1.882%2C8.152-5.172%2C10.825l-33.544%2C19.438%20%20%20%20l-17.308%2C10.031l-61.864%2C35.852l-62.737%2C36.357c-3.379%2C1.221-7.33%2C1.152-10.681-0.21l-74.228-42.693l-15.163%2C25.717%20%20%20%20l66.706%2C38.406c2.206%2C1.255%2C4.171%2C2.367%2C5.784%2C3.272c2.497%2C1.4%2C4.199%2C2.337%2C4.8%2C2.629c4.741%2C2.303%2C11.563%2C3.643%2C17.71%2C3.643%20%20%20%20c5.636%2C0%2C11.132-1.035%2C16.332-3.072l182.225-105.531c10.459-8.104%2C16.612-20.325%2C17.166-33.564V156.601z%22%2F%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_13_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_6_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_3_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_15_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_3_%22%3E%20%20%20%3Cg%20id%3D%22_x33__7_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic%22%3E%20%20%20%3Cg%20id%3D%22_x33__3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_10_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x34__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_2_%22%3E%20%20%20%3Cg%20id%3D%22_x33__6_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_2_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_11_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_5_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_12_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_1_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_9_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_2_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol_1_%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_1_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_7_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_8_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Monochromatic_1_%22%3E%20%20%3Cg%20id%3D%22_x33__4_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E"; + +var optimismLogoUrl = "data:image/svg+xml,%3Csvg%20width%3D%22170%22%20height%3D%22168%22%20viewBox%3D%220%200%20170%20168%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20clip-path%3D%22url%28%23clip0%29%22%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF505F%22%2F%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF0320%22%2F%3E%3Cpath%20d%3D%22M85.05%200C132.022%200%20170.1%2037.8949%20170.1%2084.6407C170.1%20131.386%200%20131.386%200%2084.6407C0%2037.8949%2038.0782%200%2085.05%200Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.665%2064.0394L112.444%2012.3742L89.0263%2078.9477L144.665%2064.0394Z%22%20fill%3D%22%23FF4E65%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.777%2064.215L112.444%2012.3742L165.349%2058.4347L143.777%2064.215Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.551%2063.613L142.479%20124.467L88.912%2078.5213L144.551%2063.613Z%22%20fill%3D%22%23D0001A%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.663%2063.7886L142.479%20124.467L165.235%2058.0083L143.663%2063.7886Z%22%20fill%3D%22%23FF697B%22%2F%3E%3C%2Fg%3E%3Cdefs%3E%3CclipPath%20id%3D%22clip0%22%3E%3Crect%20width%3D%22170%22%20height%3D%22168%22%20fill%3D%22white%22%2F%3E%3C%2FclipPath%3E%3C%2Fdefs%3E%3C%2Fsvg%3E"; + +var polygonMaticLogo = "data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20viewBox%3D%220%200%2038.4%2033.5%22%20style%3D%22enable-background%3Anew%200%200%2038.4%2033.5%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cstyle%20type%3D%22text%2Fcss%22%3E%20.st0%7Bfill%3A%238247E5%3B%7D%3C%2Fstyle%3E%3Cg%3E%20%3Cpath%20class%3D%22st0%22%20d%3D%22M29%2C10.2c-0.7-0.4-1.6-0.4-2.4%2C0L21%2C13.5l-3.8%2C2.1l-5.5%2C3.3c-0.7%2C0.4-1.6%2C0.4-2.4%2C0L5%2C16.3%20%20c-0.7-0.4-1.2-1.2-1.2-2.1v-5c0-0.8%2C0.4-1.6%2C1.2-2.1l4.3-2.5c0.7-0.4%2C1.6-0.4%2C2.4%2C0L16%2C7.2c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v3.3l3.8-2.2V7%20%20c0-0.8-0.4-1.6-1.2-2.1l-8-4.7c-0.7-0.4-1.6-0.4-2.4%2C0L1.2%2C5C0.4%2C5.4%2C0%2C6.2%2C0%2C7v9.4c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l5.5-3.2l3.8-2.2l5.5-3.2c0.7-0.4%2C1.6-0.4%2C2.4%2C0l4.3%2C2.5c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v5c0%2C0.8-0.4%2C1.6-1.2%2C2.1%20%20L29%2C28.8c-0.7%2C0.4-1.6%2C0.4-2.4%2C0l-4.3-2.5c-0.7-0.4-1.2-1.2-1.2-2.1V21l-3.8%2C2.2v3.3c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l8.1-4.7c0.7-0.4%2C1.2-1.2%2C1.2-2.1V17c0-0.8-0.4-1.6-1.2-2.1L29%2C10.2z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"; + +var UNI_LIST = 'https://tokens.uniswap.org'; +var AAVE_LIST = 'tokenlist.aave.eth'; +var BA_LIST = 'https://raw.githubusercontent.com/The-Blockchain-Association/sec-notice-list/master/ba-sec-list.json'; +var CMC_ALL_LIST = 'https://api.coinmarketcap.com/data-api/v3/uniswap/all.json'; +var COINGECKO_LIST = 'https://tokens.coingecko.com/uniswap/all.json'; +var COMPOUND_LIST = 'https://raw.githubusercontent.com/compound-finance/token-list/master/compound.tokenlist.json'; +var GEMINI_LIST = 'https://www.gemini.com/uniswap/manifest.json'; +var ARBITRUM_LIST = 'https://bridge.arbitrum.io/token-list-42161.json'; +var KLEROS_LIST = 't2crtokens.eth'; +var OPTIMISM_LIST = 'https://static.optimism.io/optimism.tokenlist.json'; +var ROLL_LIST = 'https://app.tryroll.com/tokens.json'; +var SET_LIST = 'https://raw.githubusercontent.com/SetProtocol/uniswap-tokenlist/main/set.tokenlist.json'; +var WRAPPED_LIST = 'wrapped.tokensoft.eth'; +var UNSUPPORTED_LIST_URLS = [BA_LIST]; +// this is the default list of lists that are exposed to users +// lower index == higher priority for token import +var DEFAULT_LIST_OF_LISTS_TO_DISPLAY = [ + UNI_LIST, + COMPOUND_LIST, + AAVE_LIST, + CMC_ALL_LIST, + COINGECKO_LIST, + KLEROS_LIST, + GEMINI_LIST, + WRAPPED_LIST, + SET_LIST, + ROLL_LIST, + ARBITRUM_LIST, + OPTIMISM_LIST, +]; +var DEFAULT_LIST_OF_LISTS = __spreadArray(__spreadArray([], __read(DEFAULT_LIST_OF_LISTS_TO_DISPLAY), false), __read(UNSUPPORTED_LIST_URLS), false); +// default lists to be 'active' aka searched across +var DEFAULT_ACTIVE_LIST_URLS = [UNI_LIST, GEMINI_LIST]; + +var _a$c, _b$3; +var INFURA_KEY = process.env.REACT_APP_INFURA_KEY; +if (typeof INFURA_KEY === 'undefined') { + throw new Error("REACT_APP_INFURA_KEY must be a defined environment variable"); +} +/** + * These are the network URLs used by the interface when there is not another available source of chain data + */ +var INFURA_NETWORK_URLS = (_a$c = {}, + _a$c[SupportedChainId.MAINNET] = "https://mainnet.infura.io/v3/" + INFURA_KEY, + _a$c[SupportedChainId.RINKEBY] = "https://rinkeby.infura.io/v3/" + INFURA_KEY, + _a$c[SupportedChainId.ROPSTEN] = "https://ropsten.infura.io/v3/" + INFURA_KEY, + _a$c[SupportedChainId.GOERLI] = "https://goerli.infura.io/v3/" + INFURA_KEY, + _a$c[SupportedChainId.KOVAN] = "https://kovan.infura.io/v3/" + INFURA_KEY, + _a$c[SupportedChainId.OPTIMISM] = "https://optimism-mainnet.infura.io/v3/" + INFURA_KEY, + _a$c[SupportedChainId.OPTIMISTIC_KOVAN] = "https://optimism-kovan.infura.io/v3/" + INFURA_KEY, + _a$c[SupportedChainId.ARBITRUM_ONE] = "https://arbitrum-mainnet.infura.io/v3/" + INFURA_KEY, + _a$c[SupportedChainId.ARBITRUM_RINKEBY] = "https://arbitrum-rinkeby.infura.io/v3/" + INFURA_KEY, + _a$c[SupportedChainId.POLYGON] = "https://polygon-mainnet.infura.io/v3/" + INFURA_KEY, + _a$c[SupportedChainId.POLYGON_MUMBAI] = "https://polygon-mumbai.infura.io/v3/" + INFURA_KEY, + _a$c); +var NetworkType; +(function (NetworkType) { + NetworkType[NetworkType["L1"] = 0] = "L1"; + NetworkType[NetworkType["L2"] = 1] = "L2"; +})(NetworkType || (NetworkType = {})); +var CHAIN_INFO = (_b$3 = {}, + _b$3[SupportedChainId.MAINNET] = { + networkType: NetworkType.L1, + docs: 'https://docs.uniswap.org/', + explorer: 'https://etherscan.io/', + infoLink: 'https://info.uniswap.org/#/', + label: 'Ethereum', + logoUrl: EthereumLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, + rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.MAINNET], + }, + }, + _b$3[SupportedChainId.RINKEBY] = { + networkType: NetworkType.L1, + docs: 'https://docs.uniswap.org/', + explorer: 'https://rinkeby.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/', + label: 'Rinkeby', + logoUrl: EthereumLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Rinkeby Ether', symbol: 'rETH', decimals: 18 }, + rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.RINKEBY], + }, + }, + _b$3[SupportedChainId.ROPSTEN] = { + networkType: NetworkType.L1, + docs: 'https://docs.uniswap.org/', + explorer: 'https://ropsten.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/', + label: 'Ropsten', + logoUrl: EthereumLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Ropsten Ether', symbol: 'ropETH', decimals: 18 }, + rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.ROPSTEN], + }, + }, + _b$3[SupportedChainId.KOVAN] = { + networkType: NetworkType.L1, + docs: 'https://docs.uniswap.org/', + explorer: 'https://kovan.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/', + label: 'Kovan', + logoUrl: EthereumLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Kovan Ether', symbol: 'kovETH', decimals: 18 }, + rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.KOVAN], + }, + }, + _b$3[SupportedChainId.GOERLI] = { + networkType: NetworkType.L1, + docs: 'https://docs.uniswap.org/', + explorer: 'https://goerli.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/', + label: 'Görli', + logoUrl: EthereumLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Görli Ether', symbol: 'görETH', decimals: 18 }, + rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.GOERLI], + }, + }, + _b$3[SupportedChainId.OPTIMISM] = { + networkType: NetworkType.L2, + blockWaitMsBeforeWarning: ms__default["default"](templateObject_1$1m || (templateObject_1$1m = __makeTemplateObject(["25m"], ["25m"]))), + bridge: 'https://gateway.optimism.io/?chainId=1', + defaultListUrl: OPTIMISM_LIST, + docs: 'https://optimism.io/', + explorer: 'https://optimistic.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/optimism/', + label: 'Optimism', + logoUrl: optimismLogoUrl, + statusPage: 'https://optimism.io/status', + helpCenterUrl: 'https://help.uniswap.org/en/collections/3137778-uniswap-on-optimistic-ethereum-oξ', + addNetworkInfo: { + nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, + rpcUrl: 'https://mainnet.optimism.io', + }, + }, + _b$3[SupportedChainId.OPTIMISTIC_KOVAN] = { + networkType: NetworkType.L2, + blockWaitMsBeforeWarning: ms__default["default"](templateObject_2$10 || (templateObject_2$10 = __makeTemplateObject(["25m"], ["25m"]))), + bridge: 'https://gateway.optimism.io/', + defaultListUrl: OPTIMISM_LIST, + docs: 'https://optimism.io/', + explorer: 'https://optimistic.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/optimism/', + label: 'Optimistic Kovan', + logoUrl: optimismLogoUrl, + statusPage: 'https://optimism.io/status', + helpCenterUrl: 'https://help.uniswap.org/en/collections/3137778-uniswap-on-optimistic-ethereum-oξ', + addNetworkInfo: { + nativeCurrency: { name: 'Optimistic Kovan Ether', symbol: 'kovOpETH', decimals: 18 }, + rpcUrl: 'https://kovan.optimism.io', + }, + }, + _b$3[SupportedChainId.ARBITRUM_ONE] = { + networkType: NetworkType.L2, + blockWaitMsBeforeWarning: ms__default["default"](templateObject_3$T || (templateObject_3$T = __makeTemplateObject(["10m"], ["10m"]))), + bridge: 'https://bridge.arbitrum.io/', + docs: 'https://offchainlabs.com/', + explorer: 'https://arbiscan.io/', + infoLink: 'https://info.uniswap.org/#/arbitrum', + label: 'Arbitrum', + logoUrl: arbitrumLogoUrl, + defaultListUrl: ARBITRUM_LIST, + helpCenterUrl: 'https://help.uniswap.org/en/collections/3137787-uniswap-on-arbitrum', + addNetworkInfo: { + nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, + rpcUrl: 'https://arb1.arbitrum.io/rpc', + }, + }, + _b$3[SupportedChainId.ARBITRUM_RINKEBY] = { + networkType: NetworkType.L2, + blockWaitMsBeforeWarning: ms__default["default"](templateObject_4$H || (templateObject_4$H = __makeTemplateObject(["10m"], ["10m"]))), + bridge: 'https://bridge.arbitrum.io/', + docs: 'https://offchainlabs.com/', + explorer: 'https://rinkeby-explorer.arbitrum.io/', + infoLink: 'https://info.uniswap.org/#/arbitrum/', + label: 'Arbitrum Rinkeby', + logoUrl: arbitrumLogoUrl, + defaultListUrl: ARBITRUM_LIST, + helpCenterUrl: 'https://help.uniswap.org/en/collections/3137787-uniswap-on-arbitrum', + addNetworkInfo: { + nativeCurrency: { name: 'Rinkeby Arbitrum Ether', symbol: 'rinkArbETH', decimals: 18 }, + rpcUrl: 'https://rinkeby.arbitrum.io/rpc', + }, + }, + _b$3[SupportedChainId.POLYGON] = { + networkType: NetworkType.L1, + blockWaitMsBeforeWarning: ms__default["default"](templateObject_5$y || (templateObject_5$y = __makeTemplateObject(["10m"], ["10m"]))), + bridge: 'https://wallet.polygon.technology/bridge', + docs: 'https://polygon.io/', + explorer: 'https://polygonscan.com/', + infoLink: 'https://info.uniswap.org/#/polygon/', + label: 'Polygon', + logoUrl: polygonMaticLogo, + addNetworkInfo: { + rpcUrl: 'https://polygon-rpc.com/', + nativeCurrency: { name: 'Polygon Matic', symbol: 'MATIC', decimals: 18 }, + }, + }, + _b$3[SupportedChainId.POLYGON_MUMBAI] = { + networkType: NetworkType.L1, + blockWaitMsBeforeWarning: ms__default["default"](templateObject_6$p || (templateObject_6$p = __makeTemplateObject(["10m"], ["10m"]))), + bridge: 'https://wallet.polygon.technology/bridge', + docs: 'https://polygon.io/', + explorer: 'https://mumbai.polygonscan.com/', + infoLink: 'https://info.uniswap.org/#/polygon/', + label: 'Polygon Mumbai', + logoUrl: polygonMaticLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Polygon Mumbai Matic', symbol: 'mMATIC', decimals: 18 }, + rpcUrl: 'https://rpc-endpoints.superfluid.dev/mumbai', + }, + }, + _b$3); +var templateObject_1$1m, templateObject_2$10, templateObject_3$T, templateObject_4$H, templateObject_5$y, templateObject_6$p; + +function useNativeCurrency() { + var chainId = useActiveWeb3React().chainId; + return React.useMemo(function () { + return chainId + ? nativeOnChain(chainId) + : // display mainnet when not connected + nativeOnChain(SupportedChainId.MAINNET); + }, [chainId]); +} + +var EMPTY_CONNECTOR = core$1.initializeConnector(function () { return empty.EMPTY; }); +utils.atomWithDefault(function () { return EMPTY_CONNECTOR; }); +utils.atomWithDefault(function () { return EMPTY_CONNECTOR; }); + +var REGISTRAR_ABI = [ + { + constant: true, + inputs: [ + { + name: 'node', + type: 'bytes32', + }, + ], + name: 'resolver', + outputs: [ + { + name: 'resolverAddress', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, +]; +var REGISTRAR_ADDRESS = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'; +var RESOLVER_ABI = [ + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'contenthash', + outputs: [ + { + internalType: 'bytes', + name: '', + type: 'bytes', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, +]; +// cache the resolver contracts since most of them are the public resolver +function resolverContract(resolverAddress, provider) { + return new contracts.Contract(resolverAddress, RESOLVER_ABI, provider); +} +/** + * Fetches and decodes the result of an ENS contenthash lookup on mainnet to a URI + * @param ensName to resolve + * @param provider provider to use to fetch the data + */ +function resolveENSContentHash(ensName, provider) { + return __awaiter(this, void 0, void 0, function () { + var ensRegistrarContract, hash$1, resolverAddress; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + ensRegistrarContract = new contracts.Contract(REGISTRAR_ADDRESS, REGISTRAR_ABI, provider); + hash$1 = hash.namehash(ensName); + return [4 /*yield*/, ensRegistrarContract.resolver(hash$1)]; + case 1: + resolverAddress = _a.sent(); + return [2 /*return*/, resolverContract(resolverAddress, provider).contenthash(hash$1)]; + } + }); + }); +} + +function hexToUint8Array(hex) { + hex = hex.startsWith('0x') ? hex.substr(2) : hex; + if (hex.length % 2 !== 0) + throw new Error('hex must have length that is multiple of 2'); + var arr = new Uint8Array(hex.length / 2); + for (var i = 0; i < arr.length; i++) { + arr[i] = parseInt(hex.substr(i * 2, 2), 16); + } + return arr; +} +var UTF_8_DECODER = new TextDecoder('utf-8'); +/** + * Returns the URI representation of the content hash for supported codecs + * @param contenthash to decode + */ +function contenthashToUri(contenthash) { + var data = hexToUint8Array(contenthash); + var codec = multicodec.getNameFromData(data); + switch (codec) { + case 'ipfs-ns': { + var unprefixedData = multicodec.rmPrefix(data); + var cid = new CID__default["default"](unprefixedData); + return "ipfs://" + multihashes.toB58String(cid.multihash); + } + case 'ipns-ns': { + var unprefixedData = multicodec.rmPrefix(data); + var cid = new CID__default["default"](unprefixedData); + var multihash = multihashes.decode(cid.multihash); + if (multihash.name === 'identity') { + return "ipns://" + UTF_8_DECODER.decode(multihash.digest).trim(); + } + else { + return "ipns://" + multihashes.toB58String(cid.multihash); + } + } + default: + throw new Error("Unrecognized codec: " + codec); + } +} + +var ENS_NAME_REGEX$1 = /^(([a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\.)+)eth(\/.*)?$/; +function parseENSAddress(ensAddress) { + var match = ensAddress.match(ENS_NAME_REGEX$1); + if (!match) + return undefined; + return { ensName: match[1].toLowerCase() + "eth", ensPath: match[4] }; +} + +/** + * Given a URI that may be ipfs, ipns, http, https, ar, or data protocol, return the fetch-able http(s) URLs for the same content + * @param uri to convert to fetch-able http url + */ +function uriToHttp(uri) { + var _a, _b, _c; + var protocol = uri.split(':')[0].toLowerCase(); + switch (protocol) { + case 'data': + return [uri]; + case 'https': + return [uri]; + case 'http': + return ['https' + uri.substr(4), uri]; + case 'ipfs': + var hash = (_a = uri.match(/^ipfs:(\/\/)?(.*)$/i)) === null || _a === void 0 ? void 0 : _a[2]; + return ["https://cloudflare-ipfs.com/ipfs/" + hash + "/", "https://ipfs.io/ipfs/" + hash + "/"]; + case 'ipns': + var name_1 = (_b = uri.match(/^ipns:(\/\/)?(.*)$/i)) === null || _b === void 0 ? void 0 : _b[2]; + return ["https://cloudflare-ipfs.com/ipns/" + name_1 + "/", "https://ipfs.io/ipns/" + name_1 + "/"]; + case 'ar': + var tx = (_c = uri.match(/^ar:(\/\/)?(.*)$/i)) === null || _c === void 0 ? void 0 : _c[2]; + return ["https://arweave.net/" + tx]; + default: + return []; + } +} + +var ValidationSchema; +(function (ValidationSchema) { + ValidationSchema["LIST"] = "list"; + ValidationSchema["TOKENS"] = "tokens"; +})(ValidationSchema || (ValidationSchema = {})); +var validator = new Promise(function (resolve) { return __awaiter(void 0, void 0, void 0, function () { + var _a, ajv, schema, validator; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: return [4 /*yield*/, Promise.all([Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('ajv')); }), Promise.resolve().then(function () { return tokenlist_schema$1; })])]; + case 1: + _a = __read.apply(void 0, [_b.sent(), 2]), ajv = _a[0], schema = _a[1]; + validator = new ajv.default({ allErrors: true }) + .addSchema(schema, ValidationSchema.LIST) + // Adds a meta scheme of Pick + .addSchema(__assign(__assign({}, schema), { $id: schema.$id + '#tokens', required: ['tokens'] }), ValidationSchema.TOKENS); + resolve(validator); + return [2 /*return*/]; + } + }); +}); }); +function getValidationErrors(validate) { + var _a, _b; + return ((_b = (_a = validate === null || validate === void 0 ? void 0 : validate.errors) === null || _a === void 0 ? void 0 : _a.map(function (error) { return [error.dataPath, error.message].filter(Boolean).join(' '); }).join('; ')) !== null && _b !== void 0 ? _b : 'unknown error'); +} +/** + * Validates a token list. + * @param json the TokenList to validate + */ +function validateTokenList(json) { + return __awaiter(this, void 0, void 0, function () { + var validate; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, validator]; + case 1: + validate = (_a.sent()).getSchema(ValidationSchema.LIST); + if (validate === null || validate === void 0 ? void 0 : validate(json)) { + return [2 /*return*/, json]; + } + throw new Error("Token list failed validation: " + getValidationErrors(validate)); + } + }); + }); +} + +var listCache = new Map(); +/** Fetches and validates a token list. */ +function fetchTokenList$1(listUrl, resolveENSContentHash) { + var _a; + return __awaiter(this, void 0, void 0, function () { + var cached, urls, parsedENS, contentHashUri, error_1, message, translatedUri, message, i, url, isLast, response, error_2, message, message, json, list; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + cached = listCache === null || listCache === void 0 ? void 0 : listCache.get(listUrl) // avoid spurious re-fetches + ; + if (cached) { + return [2 /*return*/, cached]; + } + parsedENS = parseENSAddress(listUrl); + if (!parsedENS) return [3 /*break*/, 5]; + contentHashUri = void 0; + _b.label = 1; + case 1: + _b.trys.push([1, 3, , 4]); + return [4 /*yield*/, resolveENSContentHash(parsedENS.ensName)]; + case 2: + contentHashUri = _b.sent(); + return [3 /*break*/, 4]; + case 3: + error_1 = _b.sent(); + message = "failed to resolve ENS name: " + parsedENS.ensName; + console.debug(message, error_1); + throw new Error(message); + case 4: + translatedUri = void 0; + try { + translatedUri = contenthashToUri(contentHashUri); + } + catch (error) { + message = "failed to translate contenthash to URI: " + contentHashUri; + console.debug(message, error); + throw new Error(message); + } + urls = uriToHttp("" + translatedUri + ((_a = parsedENS.ensPath) !== null && _a !== void 0 ? _a : '')); + return [3 /*break*/, 6]; + case 5: + urls = uriToHttp(listUrl); + _b.label = 6; + case 6: + i = 0; + _b.label = 7; + case 7: + if (!(i < urls.length)) return [3 /*break*/, 15]; + url = urls[i]; + isLast = i === urls.length - 1; + response = void 0; + _b.label = 8; + case 8: + _b.trys.push([8, 10, , 11]); + return [4 /*yield*/, fetch(url, { credentials: 'omit' })]; + case 9: + response = _b.sent(); + return [3 /*break*/, 11]; + case 10: + error_2 = _b.sent(); + message = "failed to fetch list: " + listUrl; + console.debug(message, error_2); + if (isLast) + throw new Error(message); + return [3 /*break*/, 14]; + case 11: + if (!response.ok) { + message = "failed to fetch list: " + listUrl; + console.debug(message, response.statusText); + if (isLast) + throw new Error(message); + return [3 /*break*/, 14]; + } + return [4 /*yield*/, response.json()]; + case 12: + json = _b.sent(); + return [4 /*yield*/, validateTokenList(json)]; + case 13: + list = _b.sent(); + listCache === null || listCache === void 0 ? void 0 : listCache.set(listUrl, list); + return [2 /*return*/, list]; + case 14: + i++; + return [3 /*break*/, 7]; + case 15: throw new Error('Unrecognized list URL protocol.'); + } + }); + }); +} + +/** + * Returns a map of the given addresses to their eventually consistent ETH balances. + */ +function useNativeCurrencyBalances(uncheckedAddresses) { + var chainId = useActiveWeb3React().chainId; + var multicallContract = useInterfaceMulticall(); + var validAddressInputs = React.useMemo(function () { + return uncheckedAddresses + ? uncheckedAddresses + .map(isAddress) + .filter(function (a) { return a !== false; }) + .sort() + .map(function (addr) { return [addr]; }) + : []; + }, [uncheckedAddresses]); + var results = useSingleContractMultipleData(multicallContract, 'getEthBalance', validAddressInputs); + return React.useMemo(function () { + return validAddressInputs.reduce(function (memo, _a, i) { + var _b, _c; + var _d = __read(_a, 1), address = _d[0]; + var value = (_c = (_b = results === null || results === void 0 ? void 0 : results[i]) === null || _b === void 0 ? void 0 : _b.result) === null || _c === void 0 ? void 0 : _c[0]; + if (value && chainId) + memo[address] = sdkCore.CurrencyAmount.fromRawAmount(nativeOnChain(chainId), JSBI__default["default"].BigInt(value.toString())); + return memo; + }, {}); + }, [validAddressInputs, chainId, results]); +} +var ERC20Interface = new abi$7.Interface(ERC20ABI); +var tokenBalancesGasRequirement = { gasRequired: 125000 }; +/** + * Returns a map of token addresses to their eventually consistent token balances for a single account. + */ +function useTokenBalancesWithLoadingIndicator(address, tokens) { + var validatedTokens = React.useMemo(function () { var _a; return (_a = tokens === null || tokens === void 0 ? void 0 : tokens.filter(function (t) { return isAddress(t === null || t === void 0 ? void 0 : t.address) !== false; })) !== null && _a !== void 0 ? _a : []; }, [tokens]); + var validatedTokenAddresses = React.useMemo(function () { return validatedTokens.map(function (vt) { return vt.address; }); }, [validatedTokens]); + var balances = useMultipleContractSingleData(validatedTokenAddresses, ERC20Interface, 'balanceOf', React.useMemo(function () { return [address]; }, [address]), tokenBalancesGasRequirement); + var anyLoading = React.useMemo(function () { return balances.some(function (callState) { return callState.loading; }); }, [balances]); + return React.useMemo(function () { return [ + address && validatedTokens.length > 0 + ? validatedTokens.reduce(function (memo, token, i) { + var _a, _b; + var value = (_b = (_a = balances === null || balances === void 0 ? void 0 : balances[i]) === null || _a === void 0 ? void 0 : _a.result) === null || _b === void 0 ? void 0 : _b[0]; + var amount = value ? JSBI__default["default"].BigInt(value.toString()) : undefined; + if (amount) { + memo[token.address] = sdkCore.CurrencyAmount.fromRawAmount(token, amount); + } + return memo; + }, {}) + : {}, + anyLoading, + ]; }, [address, validatedTokens, anyLoading, balances]); +} +function useTokenBalances(address, tokens) { + return useTokenBalancesWithLoadingIndicator(address, tokens)[0]; +} +// get the balance for a single token/account combo +function useTokenBalance(account, token) { + var tokenBalances = useTokenBalances(account, React.useMemo(function () { return [token]; }, [token])); + if (!token) + return undefined; + return tokenBalances[token.address]; +} +function useCurrencyBalances(account, currencies) { + var tokens = React.useMemo(function () { var _a; return (_a = currencies === null || currencies === void 0 ? void 0 : currencies.filter(function (currency) { var _a; return (_a = currency === null || currency === void 0 ? void 0 : currency.isToken) !== null && _a !== void 0 ? _a : false; })) !== null && _a !== void 0 ? _a : []; }, [currencies]); + var tokenBalances = useTokenBalances(account, tokens); + var containsETH = React.useMemo(function () { var _a; return (_a = currencies === null || currencies === void 0 ? void 0 : currencies.some(function (currency) { return currency === null || currency === void 0 ? void 0 : currency.isNative; })) !== null && _a !== void 0 ? _a : false; }, [currencies]); + var ethBalance = useNativeCurrencyBalances(React.useMemo(function () { return (containsETH ? [account] : []); }, [containsETH, account])); + return React.useMemo(function () { + var _a; + return (_a = currencies === null || currencies === void 0 ? void 0 : currencies.map(function (currency) { + if (!account || !currency) + return undefined; + if (currency.isToken) + return tokenBalances[currency.address]; + if (currency.isNative) + return ethBalance[account]; + return undefined; + })) !== null && _a !== void 0 ? _a : []; + }, [account, currencies, ethBalance, tokenBalances]); +} +function useCurrencyBalance(account, currency) { + return useCurrencyBalances(account, React.useMemo(function () { return [currency]; }, [currency]))[0]; +} + +var alwaysTrue = function () { return true; }; +/** Creates a filter function that filters tokens that do not match the query. */ +function getTokenFilter(query) { + var searchingAddress = isAddress(query); + if (searchingAddress) { + var address_1 = searchingAddress.toLowerCase(); + return function (t) { return 'address' in t && address_1 === t.address.toLowerCase(); }; + } + var queryParts = query + .toLowerCase() + .split(/\s+/) + .filter(function (s) { return s.length > 0; }); + if (queryParts.length === 0) + return alwaysTrue; + var match = function (s) { + var parts = s + .toLowerCase() + .split(/\s+/) + .filter(function (s) { return s.length > 0; }); + return queryParts.every(function (p) { return p.length === 0 || parts.some(function (sp) { return sp.startsWith(p) || sp.endsWith(p); }); }); + }; + return function (_a) { + var name = _a.name, symbol = _a.symbol; + return Boolean((symbol && match(symbol)) || (name && match(name))); + }; +} + +/** Sorts currency amounts (descending). */ +function balanceComparator(a, b) { + if (a && b) { + return a.greaterThan(b) ? -1 : a.equalTo(b) ? 0 : 1; + } + else if (a === null || a === void 0 ? void 0 : a.greaterThan('0')) { + return -1; + } + else if (b === null || b === void 0 ? void 0 : b.greaterThan('0')) { + return 1; + } + return 0; +} +/** Sorts tokens by currency amount (descending), then symbol (ascending). */ +function tokenComparator(balances, a, b) { + // Sorts by balances + var balanceComparison = balanceComparator(balances[a.address], balances[b.address]); + if (balanceComparison !== 0) + return balanceComparison; + // Sorts by symbol + if (a.symbol && b.symbol) { + return a.symbol.toLowerCase() < b.symbol.toLowerCase() ? -1 : 1; + } + return -1; +} +/** Sorts tokens by query, giving precedence to exact matches and partial matches. */ +function useSortTokensByQuery(query, tokens) { + return React.useMemo(function () { + if (!tokens) { + return []; + } + var matches = query + .toLowerCase() + .split(/\s+/) + .filter(function (s) { return s.length > 0; }); + if (matches.length > 1) { + return tokens; + } + var exactMatches = []; + var symbolSubtrings = []; + var rest = []; + // sort tokens by exact match -> subtring on symbol match -> rest + tokens.map(function (token) { + var _a, _b; + if (((_a = token.symbol) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === matches[0]) { + return exactMatches.push(token); + } + else if ((_b = token.symbol) === null || _b === void 0 ? void 0 : _b.toLowerCase().startsWith(query.toLowerCase().trim())) { + return symbolSubtrings.push(token); + } + else { + return rest.push(token); + } + }); + return __spreadArray(__spreadArray(__spreadArray([], __read(exactMatches), false), __read(symbolSubtrings), false), __read(rest), false); + }, [tokens, query]); +} + +/** + * Token instances created from token info on a token list. + */ +var WrappedTokenInfo = /** @class */ (function () { + function WrappedTokenInfo(tokenInfo, list) { + this.isNative = false; + this.isToken = true; + this._checksummedAddress = null; + this._tags = null; + this.tokenInfo = tokenInfo; + this.list = list; + } + Object.defineProperty(WrappedTokenInfo.prototype, "address", { + get: function () { + if (this._checksummedAddress) + return this._checksummedAddress; + var checksummedAddress = isAddress(this.tokenInfo.address); + if (!checksummedAddress) + throw new Error("Invalid token address: " + this.tokenInfo.address); + return (this._checksummedAddress = checksummedAddress); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(WrappedTokenInfo.prototype, "chainId", { + get: function () { + return this.tokenInfo.chainId; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(WrappedTokenInfo.prototype, "decimals", { + get: function () { + return this.tokenInfo.decimals; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(WrappedTokenInfo.prototype, "name", { + get: function () { + return this.tokenInfo.name; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(WrappedTokenInfo.prototype, "symbol", { + get: function () { + return this.tokenInfo.symbol; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(WrappedTokenInfo.prototype, "logoURI", { + get: function () { + return this.tokenInfo.logoURI; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(WrappedTokenInfo.prototype, "tags", { + get: function () { + var _a; + if (this._tags !== null) + return this._tags; + if (!this.tokenInfo.tags) + return (this._tags = []); + var listTags = (_a = this.list) === null || _a === void 0 ? void 0 : _a.tags; + if (!listTags) + return (this._tags = []); + return (this._tags = this.tokenInfo.tags.map(function (tagId) { + return __assign(__assign({}, listTags[tagId]), { id: tagId }); + })); + }, + enumerable: false, + configurable: true + }); + WrappedTokenInfo.prototype.equals = function (other) { + return other.chainId === this.chainId && other.isToken && other.address.toLowerCase() === this.address.toLowerCase(); + }; + WrappedTokenInfo.prototype.sortsBefore = function (other) { + if (this.equals(other)) + throw new Error('Addresses should not be equal'); + return this.address.toLowerCase() < other.address.toLowerCase(); + }; + Object.defineProperty(WrappedTokenInfo.prototype, "wrapped", { + get: function () { + return this; + }, + enumerable: false, + configurable: true + }); + return WrappedTokenInfo; +}()); + +var mapCache = typeof WeakMap !== 'undefined' ? new WeakMap() : null; +function tokensToChainTokenMap(tokens) { + var cached = mapCache === null || mapCache === void 0 ? void 0 : mapCache.get(tokens); + if (cached) + return cached; + var _a = __read(Array.isArray(tokens) ? [undefined, tokens] : [tokens, tokens.tokens], 2), list = _a[0], infos = _a[1]; + var map = infos.reduce(function (map, info) { + var _a; + var token = new WrappedTokenInfo(info, list); + if (((_a = map[token.chainId]) === null || _a === void 0 ? void 0 : _a[token.address]) !== undefined) { + console.warn("Duplicate token skipped: " + token.address); + return map; + } + if (!map[token.chainId]) { + map[token.chainId] = {}; + } + map[token.chainId][token.address] = { token: token, list: list }; + return map; + }, {}); + mapCache === null || mapCache === void 0 ? void 0 : mapCache.set(tokens, map); + return map; +} + +jotai.atom({}); + +// parse a name or symbol from a token response +var BYTES32_REGEX = /^0x[a-fA-F0-9]{64}$/; +function parseStringOrBytes32(str, bytes32, defaultValue) { + return str && str.length > 0 + ? str + : // need to check for proper bytes string and valid terminator + bytes32 && BYTES32_REGEX.test(bytes32) && bytes.arrayify(bytes32)[31] === 0 + ? strings.parseBytes32String(bytes32) + : defaultValue; +} +/** + * Returns a Token from the tokenAddress. + * Returns null if token is loading or null was passed. + * Returns undefined if tokenAddress is invalid or token does not exist. + */ +function useTokenFromMap(tokens, tokenAddress) { + var chainId = useActiveWeb3React().chainId; + var address = isAddress(tokenAddress); + var tokenContract = useTokenContract(address ? address : undefined, false); + var tokenContractBytes32 = useBytes32TokenContract(address ? address : undefined, false); + var token = address ? tokens[address] : undefined; + var tokenName = useSingleCallResult(token ? undefined : tokenContract, 'name', undefined, reduxMulticall.NEVER_RELOAD); + var tokenNameBytes32 = useSingleCallResult(token ? undefined : tokenContractBytes32, 'name', undefined, reduxMulticall.NEVER_RELOAD); + var symbol = useSingleCallResult(token ? undefined : tokenContract, 'symbol', undefined, reduxMulticall.NEVER_RELOAD); + var symbolBytes32 = useSingleCallResult(token ? undefined : tokenContractBytes32, 'symbol', undefined, reduxMulticall.NEVER_RELOAD); + var decimals = useSingleCallResult(token ? undefined : tokenContract, 'decimals', undefined, reduxMulticall.NEVER_RELOAD); + return React.useMemo(function () { + var _a, _b, _c, _d; + if (token) + return token; + if (tokenAddress === null) + return null; + if (!chainId || !address) + return undefined; + if (decimals.loading || symbol.loading || tokenName.loading) + return null; + if (decimals.result) { + return new sdkCore.Token(chainId, address, decimals.result[0], parseStringOrBytes32((_a = symbol.result) === null || _a === void 0 ? void 0 : _a[0], (_b = symbolBytes32.result) === null || _b === void 0 ? void 0 : _b[0], 'UNKNOWN'), parseStringOrBytes32((_c = tokenName.result) === null || _c === void 0 ? void 0 : _c[0], (_d = tokenNameBytes32.result) === null || _d === void 0 ? void 0 : _d[0], 'Unknown Token')); + } + return undefined; + }, [ + address, + chainId, + decimals.loading, + decimals.result, + symbol.loading, + symbol.result, + symbolBytes32.result, + token, + tokenAddress, + tokenName.loading, + tokenName.result, + tokenNameBytes32.result, + ]); +} +/** + * Returns a Currency from the currencyId. + * Returns null if currency is loading or null was passed. + * Returns undefined if currencyId is invalid or token does not exist. + */ +function useCurrencyFromMap(tokens, currencyId) { + var _a; + var nativeCurrency = useNativeCurrency(); + var isNative = Boolean(nativeCurrency && (currencyId === null || currencyId === void 0 ? void 0 : currencyId.toUpperCase()) === 'ETH'); + var token = useTokenFromMap(tokens, isNative ? undefined : currencyId); + if (currencyId === null || currencyId === undefined) + return currencyId; + // this case so we use our builtin wrapped token instead of wrapped tokens on token lists + var wrappedNative = nativeCurrency === null || nativeCurrency === void 0 ? void 0 : nativeCurrency.wrapped; + if (((_a = wrappedNative === null || wrappedNative === void 0 ? void 0 : wrappedNative.address) === null || _a === void 0 ? void 0 : _a.toUpperCase()) === (currencyId === null || currencyId === void 0 ? void 0 : currencyId.toUpperCase())) + return wrappedNative; + return isNative ? nativeCurrency : token; +} + +var DEFAULT_LIST_PRIORITIES = DEFAULT_LIST_OF_LISTS.reduce(function (memo, listUrl, index) { + memo[listUrl] = index + 1; + return memo; +}, {}); +// use ordering of default list of lists to assign priority +function sortByListPriority(urlA, urlB) { + if (DEFAULT_LIST_PRIORITIES[urlA] && DEFAULT_LIST_PRIORITIES[urlB]) { + return DEFAULT_LIST_PRIORITIES[urlA] - DEFAULT_LIST_PRIORITIES[urlB]; + } + return 0; +} + +var name$1 = "Broken Token List"; +var timestamp$1 = "2021-01-05T20:47:02.923Z"; +var version$1 = { + major: 1, + minor: 0, + patch: 0 +}; +var tags$1 = { +}; +var logoURI$1 = "ipfs://QmNa8mQkrNKp1WEEeGjFezDmDeodkWRevGFN8JCV7b4Xir"; +var keywords$1 = [ + "uniswap", + "broken" +]; +var tokens$1 = [ + { + name: "UNI HODL", + address: "0x4bf5dc91E2555449293D7824028Eb8Fe5879B689", + symbol: "UniH", + decimals: 18, + chainId: 1, + logoURI: "" + } +]; +var BROKEN_LIST = { + name: name$1, + timestamp: timestamp$1, + version: version$1, + tags: tags$1, + logoURI: logoURI$1, + keywords: keywords$1, + tokens: tokens$1 +}; + +var name = "Unsupported Tokens"; +var timestamp = "2021-01-05T20:47:02.923Z"; +var version = { + major: 1, + minor: 0, + patch: 0 +}; +var tags = { +}; +var logoURI = "ipfs://QmNa8mQkrNKp1WEEeGjFezDmDeodkWRevGFN8JCV7b4Xir"; +var keywords = [ + "uniswap", + "unsupported" +]; +var tokens = [ + { + name: "Gold Tether", + address: "0x4922a015c4407F87432B179bb209e125432E4a2A", + symbol: "XAUt", + decimals: 6, + chainId: 1, + logoURI: "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4922a015c4407F87432B179bb209e125432E4a2A/logo.png" + }, + { + name: "Grump Cat", + address: "0x93B2FfF814FCaEFFB01406e80B4Ecd89Ca6A021b", + symbol: "GRUMPY", + decimals: 9, + chainId: 1, + logoURI: "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4922a015c4407F87432B179bb209e125432E4a2A/logo.png" + }, + { + name: "apeUSD-UMA Synthetic USD (Dec 2021)", + address: "0xfA5e27893aee4805283D86e4283Da64F8c72dd56", + symbol: "apeUSD-UMA-DEC21", + decimals: 18, + chainId: 1, + logoURI: "" + }, + { + chainId: 1, + address: "0xc6b11850241c5127eab73af4b6c68bc267cbbff4", + name: "oWETHp Put 360 DEC2520", + symbol: "oWETH-360P-12/25/20", + decimals: 7 + }, + { + chainId: 1, + name: "oYFIp Put 25000 OCT0220", + address: "0x452b421be5b30f0c6ad8c3f03c06bdaab4f5c56c", + symbol: "oYFI-25000P-10/02/20", + decimals: 7 + }, + { + chainId: 1, + name: "oWETHp Put 360 OCT3020", + address: "0x0578779e746d7186253a36cf651ea786acfcf087", + symbol: "oWETH-360P-10/30/20", + decimals: 7 + }, + { + chainId: 1, + name: "ETHc Call 500 OCT3020", + address: "0xf9aba2e43fb19184408ea3b572a0fd672946f87b", + symbol: "oETH-500C-10/30/20", + decimals: 6 + }, + { + chainId: 1, + name: "oBALp Put 22 OCT0220", + address: "0xdb0991dfc7e828b5a2837dc82d68e16490562c8d", + symbol: "oBAL-22P-10/02/20", + decimals: 7 + }, + { + chainId: 1, + name: "oCOMPp Put 150 SEP2520", + address: "0xe951ebe6b4420ab3f4844cf36dedd263d095b416", + symbol: "oCOMP-150P-09/25/20", + decimals: 7 + }, + { + chainId: 1, + name: "oCRVp Put 3 SEP252020", + address: "0x9215bd49b59748419eac6bad9dbe247df06ebdb9", + symbol: "oCRV-3P-09/25/20", + decimals: 7 + }, + { + chainId: 1, + name: "oETHp Put 180 SEP2520", + address: "0xE3A2c34Fa2F59ffa95C4ACd1E5663633d45Bc3AD", + symbol: "oETH-180P-09/25/20", + decimals: 7 + }, + { + chainId: 1, + name: "oETHc Call 400 SEP2520", + address: "0x05977EBC26825C0CD6097E0Ad7204721516711Eb", + symbol: "oETH-400C-09/25/20", + decimals: 7 + }, + { + chainId: 1, + name: "oWETHp Put 380 SEP1820", + address: "0x31f88266301b08631f9f0e33fd5c43c2a5d1e5b2", + symbol: "oWETH-380P-09/18/20", + decimals: 7 + }, + { + chainId: 1, + name: "oYFIp Put 8500 SEP1820", + address: "0xd1cec2f67fdc4c60e0963515dfc3343f31e32e47", + symbol: "oYFI-8500P-09/18/20", + decimals: 7 + }, + { + chainId: 1, + name: "oWETHp Put 370 SEP1120", + address: "0x15844029b2c2bf24506e9937739a9a912f1e4354", + symbol: "oWETH-370P-09/11/20", + decimals: 7 + }, + { + chainId: 1, + name: "oWETHp Put 400 SEP0420", + address: "0x5562c33c383f6386be4f6dcdbd35a3a99bbcfde6", + symbol: "oWETH-400P-09/04/20", + decimals: 7 + }, + { + chainId: 1, + name: "oETHp Put 200 AUG2820", + address: "0x3CBFC1397deF0602c2d211c70A1c0c38CEDB5448", + symbol: "oWETH-400P-09/04/20", + decimals: 7 + }, + { + chainId: 1, + name: "Opyn cDai Insurance", + symbol: "ocDai", + address: "0x98cc3bd6af1880fcfda17ac477b2f612980e5e33", + decimals: 8 + }, + { + chainId: 1, + name: "Opyn cUSDC Insurance", + symbol: "ocUSDC", + address: "0x8ED9f862363fFdFD3a07546e618214b6D59F03d4", + decimals: 8 + }, + { + chainId: 1, + address: "0x176C674Ee533C6139B0dc8b458D72A93dCB3e705", + symbol: "iAAVE", + name: "Synth Inverse Aave", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iAAVE.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x8A8079c7149B8A1611e5C5d978DCA3bE16545F83", + symbol: "iADA", + name: "Synth Inverse Cardano", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iADA.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0xAFD870F32CE54EfdBF677466B612bf8ad164454B", + symbol: "iBNB", + name: "Synth Inverse Binance Coin", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iBNB.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0xD6014EA05BDe904448B743833dDF07c3C7837481", + symbol: "iBTC", + name: "Synth Inverse Bitcoin", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iBTC.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x336213e1DDFC69f4701Fc3F86F4ef4A160c1159d", + symbol: "iCEX", + name: "Synth Inverse Centralised Exchange Index", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iCEX.svg", + tags: [ + "index", + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x6345728B1ccE16E6f8C509950b5c84FFF88530d9", + symbol: "iCOMP", + name: "Synth Inverse Compound", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iCOMP.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0xCB98f42221b2C251A4E74A1609722eE09f0cc08E", + symbol: "iDASH", + name: "Synth Inverse Dash", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDASH.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x14d10003807AC60d07BB0ba82cAeaC8d2087c157", + symbol: "iDEFI", + name: "Synth Inverse DeFi Index", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDEFI.svg", + tags: [ + "index", + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x46a97629C9C1F58De6EC18C7F536e7E6d6A6ecDe", + symbol: "iDOT", + name: "Synth Inverse Polkadot", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDOT.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0xF4EebDD0704021eF2a6Bbe993fdf93030Cd784b4", + symbol: "iEOS", + name: "Synth Inverse EOS", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iEOS.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0xd50c1746D835d2770dDA3703B69187bFfeB14126", + symbol: "iETC", + name: "Synth Inverse Ethereum Classic", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iETC.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0xA9859874e1743A32409f75bB11549892138BBA1E", + symbol: "iETH", + name: "Synth Inverse Ether", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iETH.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x2d7aC061fc3db53c39fe1607fB8cec1B2C162B01", + symbol: "iLINK", + name: "Synth Inverse Chainlink", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iLINK.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x79da1431150C9b82D2E5dfc1C68B33216846851e", + symbol: "iLTC", + name: "Synth Inverse Litecoin", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iLTC.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0xA5a5DF41883Cdc00c4cCC6E8097130535399d9a3", + symbol: "iOIL", + name: "Synth Inverse Perpetual Oil Futures", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iOIL.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x0fEd38108bdb8e62ef7b5680E8E0726E2F29e0De", + symbol: "iREN", + name: "Synth Inverse Ren", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iREN.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0xC5807183a9661A533CB08CbC297594a0B864dc12", + symbol: "iTRX", + name: "Synth Inverse TRON", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iTRX.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x36A00FF9072570eF4B9292117850B8FE08d96cce", + symbol: "iUNI", + name: "Synth Inverse Uniswap", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iUNI.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x4AdF728E2Df4945082cDD6053869f51278fae196", + symbol: "iXMR", + name: "Synth Inverse Monero", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXMR.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x27269b3e45A4D3E79A3D6BFeE0C8fB13d0D711A6", + symbol: "iXRP", + name: "Synth Inverse Ripple", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXRP.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x8deef89058090ac5655A99EEB451a4f9183D1678", + symbol: "iXTZ", + name: "Synth Inverse Tezos", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXTZ.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x592244301CeA952d6daB2fdC1fE6bd9E53917306", + symbol: "iYFI", + name: "Synth Inverse yearn.finance", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iYFI.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0xcD39b5434a0A92cf47D1F567a7dF84bE356814F0", + symbol: "s1INCH", + name: "Synth 1inch", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/s1INCH.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x7537AAe01f3B218DAE75e10d952473823F961B87", + symbol: "sAAPL", + name: "Synth Apple", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAAPL.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xd2dF355C19471c8bd7D8A3aa27Ff4e26A21b4076", + symbol: "sAAVE", + name: "Synth Aave", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAAVE.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xe36E2D3c7c34281FA3bC737950a68571736880A1", + symbol: "sADA", + name: "Synth Cardano", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sADA.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x9CF7E61853ea30A41b02169391b393B901eac457", + symbol: "sAMZN", + name: "Synth Amazon", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAMZN.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xF48e200EAF9906362BB1442fca31e0835773b8B4", + symbol: "sAUD", + name: "Synth Australian Dollars", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAUD.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x617aeCB6137B5108D1E7D4918e3725C8cEbdB848", + symbol: "sBNB", + name: "Synth Binance Coin", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sBNB.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xfE18be6b3Bd88A2D2A7f928d00292E7a9963CfC6", + symbol: "sBTC", + name: "Synth Bitcoin", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sBTC.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xeABACD844A196D7Faf3CE596edeBF9900341B420", + symbol: "sCEX", + name: "Synth Centralised Exchange Index", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCEX.svg", + tags: [ + "index", + "synth" + ] + }, + { + chainId: 1, + address: "0x0F83287FF768D1c1e17a42F44d644D7F22e8ee1d", + symbol: "sCHF", + name: "Synth Swiss Franc", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCHF.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x9EeF4CA7aB9fa8bc0650127341C2d3F707a40f8A", + symbol: "sCOIN", + name: "Synth Coinbase", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCOIN.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xEb029507d3e043DD6C87F2917C4E82B902c35618", + symbol: "sCOMP", + name: "Synth Compound", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCOMP.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xD38aEb759891882e78E957c80656572503D8c1B1", + symbol: "sCRV", + name: "Synth Curve DAO Token", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCRV.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xfE33ae95A9f0DA8A845aF33516EDc240DCD711d6", + symbol: "sDASH", + name: "Synth Dash", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDASH.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xe1aFe1Fd76Fd88f78cBf599ea1846231B8bA3B6B", + symbol: "sDEFI", + name: "Synth DeFi Index", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDEFI.svg", + tags: [ + "index", + "synth" + ] + }, + { + chainId: 1, + address: "0x1715AC0743102BF5Cd58EfBB6Cf2dC2685d967b6", + symbol: "sDOT", + name: "Synth Polkadot", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDOT.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x88C8Cf3A212c0369698D13FE98Fcb76620389841", + symbol: "sEOS", + name: "Synth EOS", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sEOS.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x22602469d704BfFb0936c7A7cfcD18f7aA269375", + symbol: "sETC", + name: "Synth Ethereum Classic", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sETC.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x5e74C9036fb86BD7eCdcb084a0673EFc32eA31cb", + symbol: "sETH", + name: "Synth Ether", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sETH.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xD71eCFF9342A5Ced620049e616c5035F1dB98620", + symbol: "sEUR", + name: "Synth Euros", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sEUR.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xf50B5e535F62a56A9BD2d8e2434204E726c027Fa", + symbol: "sFB", + name: "Synth Facebook", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sFB.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x23348160D7f5aca21195dF2b70f28Fce2B0be9fC", + symbol: "sFTSE", + name: "Synth FTSE 100 Index", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sFTSE.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x97fe22E7341a0Cd8Db6F6C021A24Dc8f4DAD855F", + symbol: "sGBP", + name: "Synth Pound Sterling", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sGBP.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xC63B8ECCE56aB9C46184eC6aB85e4771fEa4c8AD", + symbol: "sGOOG", + name: "Synth Alphabet", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sGOOG.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xF6b1C627e95BFc3c1b4c9B825a032Ff0fBf3e07d", + symbol: "sJPY", + name: "Synth Japanese Yen", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sJPY.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x269895a3dF4D73b077Fc823dD6dA1B95f72Aaf9B", + symbol: "sKRW", + name: "Synth South Korean Won", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sKRW.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xbBC455cb4F1B9e4bFC4B73970d360c8f032EfEE6", + symbol: "sLINK", + name: "Synth Chainlink", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sLINK.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xC14103C2141E842e228FBaC594579e798616ce7A", + symbol: "sLTC", + name: "Synth Litecoin", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sLTC.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x745a824D6aBBD236AA794b5530062778A6Ad7523", + symbol: "sMSFT", + name: "Synth Microsoft", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sMSFT.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x5A7E3c07604EB515C16b36cd51906a65f021F609", + symbol: "sNFLX", + name: "Synth Netflix", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sNFLX.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x757de3ac6B830a931eF178C6634c5C551773155c", + symbol: "sNIKKEI", + name: "Synth Nikkei 225 Index", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sNIKKEI.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x6d16cF3EC5F763d4d99cB0B0b110eefD93B11B56", + symbol: "sOIL", + name: "Synth Perpetual Oil Futures", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sOIL.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xD31533E8d0f3DF62060e94B3F1318137bB6E3525", + symbol: "sREN", + name: "Synth Ren", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sREN.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x0352557B007A4Aae1511C114409b932F06F9E2f4", + symbol: "sRUNE", + name: "Synth THORChain", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sRUNE.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xf2E08356588EC5cd9E437552Da87C0076b4970B0", + symbol: "sTRX", + name: "Synth TRON", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sTRX.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x918dA91Ccbc32B7a6A0cc4eCd5987bbab6E31e6D", + symbol: "sTSLA", + name: "Synth Tesla", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sTSLA.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x30635297E450b930f8693297eBa160D9e6c8eBcf", + symbol: "sUNI", + name: "Synth Uniswap", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sUNI.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x6A22e5e94388464181578Aa7A6B869e00fE27846", + symbol: "sXAG", + name: "Synth Silver Ounce", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXAG.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x261EfCdD24CeA98652B9700800a13DfBca4103fF", + symbol: "sXAU", + name: "Synth Gold Ounce", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXAU.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x5299d6F7472DCc137D7f3C4BcfBBB514BaBF341A", + symbol: "sXMR", + name: "Synth Monero", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXMR.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xa2B0fDe6D710e201d0d608e924A484d1A5fEd57c", + symbol: "sXRP", + name: "Synth Ripple", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXRP.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x2e59005c5c0f0a4D77CcA82653d48b46322EE5Cd", + symbol: "sXTZ", + name: "Synth Tezos", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXTZ.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x992058B7DB08F9734d84485bfbC243C4ee6954A7", + symbol: "sYFI", + name: "Synth yearn.finance", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sYFI.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x81ab848898b5ffD3354dbbEfb333D5D183eEDcB5", + name: "yUSD Synthetic Expiring 1 September 2020", + symbol: "yUSDSEP20", + decimals: 18 + }, + { + chainId: 1, + address: "0xB2FdD60AD80ca7bA89B9BAb3b5336c2601C020b4", + name: "yUSD Synthetic Expiring 1 October 2020", + symbol: "yUSDOCT20", + decimals: 18 + }, + { + chainId: 1, + address: "0x208d174775dc39fe18b1b374972f77ddec6c0f73", + name: "uUSDrBTC Synthetic Expiring 1 Oct 2020", + symbol: "uUSDrBTC-OCT", + decimals: 18 + }, + { + chainId: 1, + address: "0xf06ddacf71e2992e2122a1a0168c6967afdf63ce", + name: "uUSDrBTC Synthetic Expiring 31 Dec 2020", + symbol: "uUSDrBTC-DEC", + decimals: 18 + }, + { + chainId: 1, + address: "0xd16c79c8a39d44b2f3eb45d2019cd6a42b03e2a9", + name: "uUSDwETH Synthetic Expiring 31 Dec 2020", + symbol: "uUSDwETH-DEC", + decimals: 18 + }, + { + chainId: 1, + address: "0x3d995510f8d82c2ea341845932b5ddde0bead9a3", + name: "uGAS-JAN21 Token Expiring 31 Jan 2021", + symbol: "uGAS-JAN21", + decimals: 18 + }, + { + chainId: 1, + address: "0x90f802c7e8fb5d40b0de583e34c065a3bd2020d8", + name: "YD-ETH-MAR21 Token Expiring 31 Mar 2021", + symbol: "YD-ETH-MAR21", + decimals: 18 + }, + { + chainId: 1, + address: "0x002f0b1a71c5730cf2f4da1970a889207bdb6d0d", + name: "YD-BTC-MAR21 Token Expiring 31 Mar 2021", + symbol: "YD-BTC-MAR21", + decimals: 18 + }, + { + chainId: 1, + address: "0x1062ad0e59fa67fa0b27369113098cc941dd0d5f", + name: "UMA 35 Call Expirying 30 Apr 2021", + symbol: "UMAc35-0421", + decimals: 18 + }, + { + chainId: 1, + address: "0xf93340b1a3adf7eedcaec25fae8171d4b736e89f", + name: "pxUSD Synthetic USD Expiring 1 April 2021", + symbol: "pxUSD_MAR2021", + decimals: 18 + }, + { + chainId: 1, + address: "0x84bd083b1c8bf929f39c98bc17cf518f40154f58", + name: "Mario Cash Synthetic Token Expiring 15 January 2021", + symbol: "Mario Cash-JAN-2021", + decimals: 18 + }, + { + chainId: 1, + address: "0x81fab276aec924fbde190cf379783526d413cf70", + name: "uGAS-FEB21 Token Expiring 28 Feb 2021", + symbol: "uGAS-FEB21", + decimals: 18 + }, + { + chainId: 1, + address: "0x4e110603e70b0b5f1c403ee543b37e1f1244cf28", + name: "uGAS-MAR21 Token Expiring 31 Mar 2021", + symbol: "uGAS-MAR21", + decimals: 18 + }, + { + chainId: 1, + address: "0xcf55a7f92d5e0c6683debbc1fc20c0a6e056df13", + name: "Zelda Elastic Cash", + symbol: "Zelda Elastic Cash", + decimals: 18 + }, + { + chainId: 1, + address: "0x654eebac62240e6c56bab5f6adf7cfa74a894510", + name: "Zelda Spring Nuts Cash", + symbol: "Zelda Spring Nuts Cash", + decimals: 18 + }, + { + chainId: 1, + address: "0xa48920cc1ad85d8ea13af5d7be180c0338c306dd", + name: "Zelda Summer Nuts Cash", + symbol: "Zelda Summer Nuts Cash", + decimals: 18 + }, + { + chainId: 1, + address: "0x249a198d59b57fda5dda90630febc86fd8c7594c", + name: "Zelda Whirlwind Cash", + symbol: "Zelda Whirlwind Cash", + decimals: 18 + }, + { + chainId: 1, + address: "0x5ed1406873c9eb91f6f9a67ac4e152387c1132e7", + name: "Zelda Reinforced Cash", + symbol: "Zelda Reinforced Cash", + decimals: 18 + }, + { + chainId: 1, + address: "0x8104c9f13118320eefe5fbea8a44d600b85981ef", + name: "Mini Mario Summer Cash", + symbol: "Mini Mario Summer Cash", + decimals: 18 + }, + { + chainId: 1, + address: "0x69746c719e59674b147df25f50e7cfa0673cb625", + name: "Mini Mario Spring Cash", + symbol: "Mini Mario Spring Cash", + decimals: 18 + }, + { + chainId: 1, + address: "0x6b1257641d18791141f025eab36fb567c4b564ff", + name: "Bitcoin Dominance Token 31 March 2021", + symbol: "BTCDOM-MAR2021", + decimals: 18 + }, + { + chainId: 1, + address: "0x4e83b6287588a96321b2661c5e041845ff7814af", + name: "Altcoin Dominance Token 31 March 2021", + symbol: "ALTDOM-MAR2021", + decimals: 18 + }, + { + chainId: 1, + address: "0x59fec83ec709c893aedd1a144cf1828eb04127cd", + name: "pxGOLD Synthetic GOLD Expiring 31 May 2021", + symbol: "pxGOLD_MAY2021", + decimals: 18 + }, + { + chainId: 1, + address: "0x89337BFb7938804c3776C9FB921EccAf5ab76758", + name: "Compound Annualized Rate Future Expiring 28 March 2021", + symbol: "CAR-USDC-MAR21", + decimals: 18 + }, + { + chainId: 1, + address: "0xec58d3aefc9aaa2e0036fa65f70d569f49d9d1ed", + name: "uSTONKS Index Token April 2021", + symbol: "uSTONKS_APR21", + decimals: 6 + }, + { + chainId: 1, + address: "0xa6B9d7E3d76cF23549293Fb22c488E0Ea591A44e", + name: "uGAS-JUN21 Token Expiring 30 Jun 2021", + symbol: "uGAS-JUN21", + decimals: 18 + }, + { + chainId: 1, + address: "0xe813b65da6c38a04591aed3f082d32db7d53c382", + name: "Yield Dollar [WETH Dec 2021]", + symbol: "YD-ETH-DEC21", + decimals: 18 + }, + { + chainId: 1, + address: "0x4b606e9eb2228c70f44453afe5a73e1fea258ce1", + name: "pxUSD Synthetic USD Expiring 31 Mar 2022", + symbol: "pxUSD_MAR2022", + decimals: 18 + }, + { + chainId: 1, + address: "0x5247c0db4044fb6f97f32c7e1b48758019a5a912", + name: "pxGOLD Synthetic Gold Expiring 31 Mar 2022", + symbol: "pxGOLD_MAR2022", + decimals: 18 + }, + { + chainId: 1, + address: "0x56fb1acaff95c0b6ebcd17c8361a63d98b1a5a11", + name: "uForex CNYUSD Synthetic Token April 2021", + symbol: "uCNYUSD-APR", + decimals: 6 + }, + { + chainId: 1, + address: "0xd49fa405dce086c65d66ca1ca41f8e98583812b4", + name: "uForex EURUSD Synthetic Token April 2021", + symbol: "uEURUSD-APR", + decimals: 6 + }, + { + chainId: 1, + address: "0x29dddacba3b231ee8d673dd0f0fa759ea145561b", + name: "DEFI_PULSE_TOTAL_TVL Synthetic Token Expiring 15 April 2021", + symbol: "TVL_ALL_APRIL15", + decimals: 6 + }, + { + chainId: 1, + address: "0xcbe430927370e95b4b10cfc702c6017ec7abefc3", + name: "Yield Dollar [WETH Jun 2021]", + symbol: "YD-ETH-JUN21", + decimals: 18 + }, + { + chainId: 1, + address: "0x4b7fb448df91c8ed973494f8c8c4f12daf3a8521", + name: "Yield Dollar [renBTC Jun 2021]", + symbol: "YD-BTC-JUN21", + decimals: 8 + }, + { + chainId: 1, + address: "0x3108c33b6fb38efedaefd8b5f7ca01d5f5c7372d", + name: "Yield Dollar UMA 21", + symbol: "yUMA21", + decimals: 18 + }, + { + chainId: 1, + address: "0x0cae9e4d663793c2a2A0b211c1Cf4bBca2B9cAa7", + name: "Mirrored Amazon", + symbol: "MAMZN", + decimals: 18 + }, + { + chainId: 1, + address: "0x31c63146a635EB7465e5853020b39713AC356991", + name: "M US Oil", + symbol: "MUSO", + decimals: 18 + }, + { + chainId: 1, + address: "0x59A921Db27Dd6d4d974745B7FfC5c33932653442", + name: "M Google", + symbol: "MGOOGL", + decimals: 18 + }, + { + chainId: 1, + address: "0xf72FCd9DCF0190923Fadd44811E240Ef4533fc86", + name: "Mirrored ProShares", + symbol: "MVIXY", + decimals: 18 + }, + { + chainId: 1, + address: "0x56aA298a19C93c6801FDde870fA63EF75Cc0aF72", + name: "Mirrored Alibaba", + symbol: "MBABA", + decimals: 18 + }, + { + chainId: 1, + address: "0x0e99cC0535BB6251F6679Fa6E65d6d3b430e840B", + name: "Mirrored Facebook", + symbol: "MFB", + decimals: 18 + }, + { + chainId: 1, + address: "0x13B02c8dE71680e71F0820c996E4bE43c2F57d15", + name: "Mirrored Invesco QQ", + symbol: "MQQQ", + decimals: 18 + }, + { + chainId: 1, + address: "0x41BbEDd7286dAab5910a1f15d12CBda839852BD7", + name: "Mirrored Microsoft", + symbol: "MMSFT", + decimals: 18 + }, + { + chainId: 1, + address: "0x9d1555d8cB3C846Bb4f7D5B1B1080872c3166676", + name: "Mirrored iShares Si", + symbol: "MSLV", + decimals: 18 + }, + { + chainId: 1, + address: "0x21cA39943E91d704678F5D00b6616650F066fD63", + name: "Mirrored Tesla", + symbol: "MTSLA", + decimals: 18 + }, + { + chainId: 1, + address: "0xe82bbB62fA81d0701643d1675FB50ec52fD3Df92", + name: "DYDX Token", + symbol: "DYDX", + decimals: 18 + }, + { + chainId: 10, + address: "0xE405de8F52ba7559f9df3C368500B6E6ae6Cee49", + name: "sETH", + symbol: "Synth Ether", + decimals: 18 + }, + { + chainId: 10, + address: "0x298B9B95708152ff6968aafd889c6586e9169f1D", + name: "sBTC", + symbol: "Synth Bitcoin", + decimals: 18 + }, + { + chainId: 10, + address: "0xc5Db22719A06418028A40A9B5E9A7c02959D0d08", + name: "sLINK", + symbol: "Synth Link", + decimals: 18 + }, + { + chainId: 1, + address: "0x6B60eE11b73230045cF9095E6e43AE9Ea638e172", + name: "Shatner", + symbol: "SHAT", + decimals: 18 + }, + { + chainId: 1, + address: "0x7277a44D1325D81Ac58893002a1B40a41bea43fe", + name: "FAANG Index", + symbol: "FAANG", + decimals: 18 + }, + { + chainId: 1, + address: "0x76175599887730786bdA1545D0D7AcE8737fEBB1", + name: "ENS DAO", + symbol: "ENS", + decimals: 18 + }, + { + chainId: 1, + address: "0xa82AA729AE2F0d78e961D66db53949e27a9E866d", + name: "BMEX", + symbol: "BMEX", + decimals: 18 + } +]; +var UNSUPPORTED_TOKEN_LIST = { + name: name, + timestamp: timestamp, + version: version, + tags: tags, + logoURI: logoURI, + keywords: keywords, + tokens: tokens +}; + +function useAllLists() { + return useAppSelector(function (state) { return state.lists.byUrl; }); +} +/** + * Combine the tokens in map2 with the tokens on map1, where tokens on map1 take precedence + * @param map1 the base token map + * @param map2 the map of additioanl tokens to add to the base map + */ +function combineMaps(map1, map2) { + var chainIds = Object.keys(Object.keys(map1) + .concat(Object.keys(map2)) + .reduce(function (memo, value) { + memo[value] = true; + return memo; + }, {})).map(function (id) { return parseInt(id); }); + return chainIds.reduce(function (memo, chainId) { + memo[chainId] = __assign(__assign({}, map2[chainId]), map1[chainId]); + return memo; + }, {}); +} +// merge tokens contained within lists from urls +function useCombinedTokenMapFromUrls(urls) { + var lists = useAllLists(); + return React.useMemo(function () { + if (!urls) + return {}; + return (urls + .slice() + // sort by priority so top priority goes last + .sort(sortByListPriority) + .reduce(function (allTokens, currentUrl) { + var _a; + var current = (_a = lists[currentUrl]) === null || _a === void 0 ? void 0 : _a.current; + if (!current) + return allTokens; + try { + return combineMaps(allTokens, tokensToChainTokenMap(current)); + } + catch (error) { + console.error('Could not show token list due to error', error); + return allTokens; + } + }, {})); + }, [lists, urls]); +} +// filter out unsupported lists +function useActiveListUrls() { + var activeListUrls = useAppSelector(function (state) { return state.lists.activeListUrls; }); + return React.useMemo(function () { return activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.filter(function (url) { return !UNSUPPORTED_LIST_URLS.includes(url); }); }, [activeListUrls]); +} +function useInactiveListUrls() { + var lists = useAllLists(); + var allActiveListUrls = useActiveListUrls(); + return React.useMemo(function () { return Object.keys(lists).filter(function (url) { return !(allActiveListUrls === null || allActiveListUrls === void 0 ? void 0 : allActiveListUrls.includes(url)) && !UNSUPPORTED_LIST_URLS.includes(url); }); }, [lists, allActiveListUrls]); +} +// get all the tokens from active lists, combine with local default tokens +function useCombinedActiveList() { + var activeListUrls = useActiveListUrls(); + var activeTokens = useCombinedTokenMapFromUrls(activeListUrls); + return activeTokens; +} +// list of tokens not supported on interface for various reasons, used to show warnings and prevent swaps and adds +function useUnsupportedTokenList() { + // get hard-coded broken tokens + var brokenListMap = React.useMemo(function () { return tokensToChainTokenMap(BROKEN_LIST); }, []); + // get hard-coded list of unsupported tokens + var localUnsupportedListMap = React.useMemo(function () { return tokensToChainTokenMap(UNSUPPORTED_TOKEN_LIST); }, []); + // get dynamic list of unsupported tokens + var loadedUnsupportedListMap = useCombinedTokenMapFromUrls(UNSUPPORTED_LIST_URLS); + // format into one token address map + return React.useMemo(function () { return combineMaps(brokenListMap, combineMaps(localUnsupportedListMap, loadedUnsupportedListMap)); }, [brokenListMap, localUnsupportedListMap, loadedUnsupportedListMap]); +} +function useIsListActive(url) { + var activeListUrls = useActiveListUrls(); + return Boolean(activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(url)); +} + +// reduce token map into standard address <-> Token mapping, optionally include user added tokens +function useTokensFromMap(tokenMap, includeUserAdded) { + var chainId = useActiveWeb3React().chainId; + var userAddedTokens = useUserAddedTokens(); + return React.useMemo(function () { + var _a; + if (!chainId) + return {}; + // reduce to just tokens + var mapWithoutUrls = Object.keys((_a = tokenMap[chainId]) !== null && _a !== void 0 ? _a : {}).reduce(function (newMap, address) { + newMap[address] = tokenMap[chainId][address].token; + return newMap; + }, {}); + if (includeUserAdded) { + return (userAddedTokens + // reduce into all ALL_TOKENS filtered by the current chain + .reduce(function (tokenMap, token) { + tokenMap[token.address] = token; + return tokenMap; + }, __assign({}, mapWithoutUrls))); + } + return mapWithoutUrls; + }, [chainId, userAddedTokens, tokenMap, includeUserAdded]); +} +function useAllTokens() { + var allTokens = useCombinedActiveList(); + return useTokensFromMap(allTokens, true); +} +function useUnsupportedTokens() { + var chainId = useActiveWeb3React().chainId; + var listsByUrl = useAllLists(); + var unsupportedTokensMap = useUnsupportedTokenList(); + var unsupportedTokens = useTokensFromMap(unsupportedTokensMap, false); + // checks the default L2 lists to see if `bridgeInfo` has an L1 address value that is unsupported + var l2InferredBlockedTokens = React.useMemo(function () { + if (!chainId || !L2_CHAIN_IDS.includes(chainId)) { + return {}; + } + if (!listsByUrl) { + return {}; + } + var listUrl = CHAIN_INFO[chainId].defaultListUrl; + var list = listsByUrl[listUrl].current; + if (!list) { + return {}; + } + var unsupportedSet = new Set(Object.keys(unsupportedTokens)); + return list.tokens.reduce(function (acc, tokenInfo) { + var _a; + var _b; + var bridgeInfo = (_b = tokenInfo.extensions) === null || _b === void 0 ? void 0 : _b.bridgeInfo; + if (bridgeInfo && + bridgeInfo[SupportedChainId.MAINNET] && + bridgeInfo[SupportedChainId.MAINNET].tokenAddress && + unsupportedSet.has(bridgeInfo[SupportedChainId.MAINNET].tokenAddress)) { + var address = bridgeInfo[SupportedChainId.MAINNET].tokenAddress; + // don't rely on decimals--it's possible that a token could be bridged w/ different decimals on the L2 + return __assign(__assign({}, acc), (_a = {}, _a[address] = new sdkCore.Token(SupportedChainId.MAINNET, address, tokenInfo.decimals), _a)); + } + return acc; + }, {}); + }, [chainId, listsByUrl, unsupportedTokens]); + return __assign(__assign({}, unsupportedTokens), l2InferredBlockedTokens); +} +function useSearchInactiveTokenLists(search, minResults) { + if (minResults === void 0) { minResults = 10; } + var lists = useAllLists(); + var inactiveUrls = useInactiveListUrls(); + var chainId = useActiveWeb3React().chainId; + var activeTokens = useAllTokens(); + return React.useMemo(function () { + var e_1, _a, e_2, _b; + if (!search || search.trim().length === 0) + return []; + var tokenFilter = getTokenFilter(search); + var result = []; + var addressSet = {}; + try { + for (var inactiveUrls_1 = __values(inactiveUrls), inactiveUrls_1_1 = inactiveUrls_1.next(); !inactiveUrls_1_1.done; inactiveUrls_1_1 = inactiveUrls_1.next()) { + var url = inactiveUrls_1_1.value; + var list = lists[url].current; + if (!list) + continue; + try { + for (var _c = (e_2 = void 0, __values(list.tokens)), _d = _c.next(); !_d.done; _d = _c.next()) { + var tokenInfo = _d.value; + if (tokenInfo.chainId === chainId && tokenFilter(tokenInfo)) { + var wrapped = new WrappedTokenInfo(tokenInfo, list); + if (!(wrapped.address in activeTokens) && !addressSet[wrapped.address]) { + addressSet[wrapped.address] = true; + result.push(wrapped); + if (result.length >= minResults) + return result; + } + } + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_d && !_d.done && (_b = _c.return)) _b.call(_c); + } + finally { if (e_2) throw e_2.error; } + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (inactiveUrls_1_1 && !inactiveUrls_1_1.done && (_a = inactiveUrls_1.return)) _a.call(inactiveUrls_1); + } + finally { if (e_1) throw e_1.error; } + } + return result; + }, [activeTokens, chainId, inactiveUrls, lists, minResults, search]); +} +function useIsTokenActive(token) { + var activeTokens = useAllTokens(); + if (!activeTokens || !token) { + return false; + } + return !!activeTokens[token.address]; +} +// Check if currency is included in custom list from user storage +function useIsUserAddedToken(currency) { + var userAddedTokens = useUserAddedTokens(); + if (!currency) { + return false; + } + return !!userAddedTokens.find(function (token) { return currency.equals(token); }); +} +// undefined if invalid or does not exist +// null if loading or null was passed +// otherwise returns the token +function useToken(tokenAddress) { + var tokens = useAllTokens(); + return useTokenFromMap(tokens, tokenAddress); +} +function useCurrency(currencyId) { + var tokens = useAllTokens(); + return useCurrencyFromMap(tokens, currencyId); +} + +function serializeToken(token) { + return { + chainId: token.chainId, + address: token.address, + decimals: token.decimals, + symbol: token.symbol, + name: token.name, + }; +} +function deserializeToken(serializedToken) { + return new sdkCore.Token(serializedToken.chainId, serializedToken.address, serializedToken.decimals, serializedToken.symbol, serializedToken.name); +} +function useIsDarkMode() { + var _a = useAppSelector(function (_a) { + var _b = _a.user, matchesDarkMode = _b.matchesDarkMode, userDarkMode = _b.userDarkMode; + return ({ + userDarkMode: userDarkMode, + matchesDarkMode: matchesDarkMode, + }); + }, reactRedux.shallowEqual), userDarkMode = _a.userDarkMode, matchesDarkMode = _a.matchesDarkMode; + return userDarkMode === null ? matchesDarkMode : userDarkMode; +} +function useDarkModeManager() { + var dispatch = useAppDispatch(); + var darkMode = useIsDarkMode(); + var toggleSetDarkMode = React.useCallback(function () { + dispatch(updateUserDarkMode({ userDarkMode: !darkMode })); + }, [darkMode, dispatch]); + return [darkMode, toggleSetDarkMode]; +} +function useUserLocale() { + return useAppSelector(function (state) { return state.user.userLocale; }); +} +function useUserLocaleManager() { + var dispatch = useAppDispatch(); + var locale = useUserLocale(); + var setLocale = React.useCallback(function (newLocale) { + dispatch(updateUserLocale({ userLocale: newLocale })); + }, [dispatch]); + return [locale, setLocale]; +} +function useIsExpertMode() { + return useAppSelector(function (state) { return state.user.userExpertMode; }); +} +function useExpertModeManager() { + var dispatch = useAppDispatch(); + var expertMode = useIsExpertMode(); + var toggleSetExpertMode = React.useCallback(function () { + dispatch(updateUserExpertMode({ userExpertMode: !expertMode })); + }, [expertMode, dispatch]); + return [expertMode, toggleSetExpertMode]; +} +function useShowSurveyPopup() { + var dispatch = useAppDispatch(); + var showSurveyPopup = useAppSelector(function (state) { return state.user.showSurveyPopup; }); + var toggleShowSurveyPopup = React.useCallback(function (showPopup) { + dispatch(updateShowSurveyPopup({ showSurveyPopup: showPopup })); + }, [dispatch]); + return [showSurveyPopup, toggleShowSurveyPopup]; +} +function useClientSideRouter() { + var dispatch = useAppDispatch(); + var clientSideRouter = useAppSelector(function (state) { return Boolean(state.user.userClientSideRouter); }); + var setClientSideRouter = React.useCallback(function (newClientSideRouter) { + dispatch(updateUserClientSideRouter({ userClientSideRouter: newClientSideRouter })); + }, [dispatch]); + return [clientSideRouter, setClientSideRouter]; +} +function useSetUserSlippageTolerance() { + var dispatch = useAppDispatch(); + return React.useCallback(function (userSlippageTolerance) { + var value; + try { + value = + userSlippageTolerance === 'auto' ? 'auto' : JSBI__default["default"].toNumber(userSlippageTolerance.multiply(10000).quotient); + } + catch (error) { + value = 'auto'; + } + dispatch(updateUserSlippageTolerance({ + userSlippageTolerance: value, + })); + }, [dispatch]); +} +/** + * Return the user's slippage tolerance, from the redux store, and a function to update the slippage tolerance + */ +function useUserSlippageTolerance() { + var userSlippageTolerance = useAppSelector(function (state) { + return state.user.userSlippageTolerance; + }); + return React.useMemo(function () { return (userSlippageTolerance === 'auto' ? 'auto' : new sdkCore.Percent(userSlippageTolerance, 10000)); }, [userSlippageTolerance]); +} +/** + * Same as above but replaces the auto with a default value + * @param defaultSlippageTolerance the default value to replace auto with + */ +function useUserSlippageToleranceWithDefault(defaultSlippageTolerance) { + var allowedSlippage = useUserSlippageTolerance(); + return React.useMemo(function () { return (allowedSlippage === 'auto' ? defaultSlippageTolerance : allowedSlippage); }, [allowedSlippage, defaultSlippageTolerance]); +} +function useUserTransactionTTL() { + var chainId = useActiveWeb3React().chainId; + var dispatch = useAppDispatch(); + var userDeadline = useAppSelector(function (state) { return state.user.userDeadline; }); + var onL2 = Boolean(chainId && L2_CHAIN_IDS.includes(chainId)); + var deadline = onL2 ? L2_DEADLINE_FROM_NOW : userDeadline; + var setUserDeadline = React.useCallback(function (userDeadline) { + dispatch(updateUserDeadline({ userDeadline: userDeadline })); + }, [dispatch]); + return [deadline, setUserDeadline]; +} +function useAddUserToken() { + var dispatch = useAppDispatch(); + return React.useCallback(function (token) { + dispatch(addSerializedToken({ serializedToken: serializeToken(token) })); + }, [dispatch]); +} +function useRemoveUserAddedToken() { + var dispatch = useAppDispatch(); + return React.useCallback(function (chainId, address) { + dispatch(removeSerializedToken({ chainId: chainId, address: address })); + }, [dispatch]); +} +function useUserAddedTokens() { + var chainId = useActiveWeb3React().chainId; + var serializedTokensMap = useAppSelector(function (_a) { + var tokens = _a.user.tokens; + return tokens; + }); + return React.useMemo(function () { + if (!chainId) + return []; + var tokenMap = (serializedTokensMap === null || serializedTokensMap === void 0 ? void 0 : serializedTokensMap[chainId]) + ? Object.values(serializedTokensMap[chainId]).map(deserializeToken) + : []; + return tokenMap; + }, [serializedTokensMap, chainId]); +} +function useURLWarningVisible() { + return useAppSelector(function (state) { return state.user.URLWarningVisible; }); +} + +var EXPLORER_HOSTNAMES = { + 'etherscan.io': true, + 'ropsten.etherscan.io': true, + 'rinkeby.etherscan.io': true, + 'kovan.etherscan.io': true, + 'goerli.etherscan.io': true, + 'optimistic.etherscan.io': true, + 'kovan-optimistic.etherscan.io': true, + 'rinkeby-explorer.arbitrum.io': true, + 'arbiscan.io': true, +}; +/** + * Returns the anonymized version of the given href, i.e. one that does not leak user information + * @param href the link to anonymize, i.e. remove any personal data from + * @return string anonymized version of the given href + */ +function anonymizeLink(href) { + try { + var url = new URL(href); + if (EXPLORER_HOSTNAMES[url.hostname]) { + var pathPieces = url.pathname.split('/'); + var anonymizedPath = pathPieces.map(function (pc) { return (/0x[a-fA-F0-9]+/.test(pc) ? '***' : pc); }).join('/'); + return url.protocol + "//" + url.hostname + anonymizedPath; + } + return href; + } + catch (error) { + return href; + } +} + +var ButtonText = styled__default["default"].button(templateObject_1$1l || (templateObject_1$1l = __makeTemplateObject(["\n outline: none;\n border: none;\n font-size: inherit;\n padding: 0;\n margin: 0;\n background: none;\n cursor: pointer;\n\n :hover {\n opacity: 0.7;\n }\n\n :focus {\n text-decoration: underline;\n }\n"], ["\n outline: none;\n border: none;\n font-size: inherit;\n padding: 0;\n margin: 0;\n background: none;\n cursor: pointer;\n\n :hover {\n opacity: 0.7;\n }\n\n :focus {\n text-decoration: underline;\n }\n"]))); +var CloseIcon$2 = styled__default["default"](reactFeather.X)(templateObject_2$$ || (templateObject_2$$ = __makeTemplateObject(["\n cursor: pointer;\n"], ["\n cursor: pointer;\n" + // for wrapper react feather icons +]))); +// for wrapper react feather icons +var IconWrapper$4 = styled__default["default"].div(templateObject_3$S || (templateObject_3$S = __makeTemplateObject(["\n display: flex;\n align-items: center;\n justify-content: center;\n width: ", ";\n height: ", ";\n margin-right: ", ";\n margin-left: ", ";\n & > * {\n stroke: ", ";\n }\n"], ["\n display: flex;\n align-items: center;\n justify-content: center;\n width: ", ";\n height: ", ";\n margin-right: ", ";\n margin-left: ", ";\n & > * {\n stroke: ", ";\n }\n" + // A button that triggers some onClick result, but looks like a link. +])), function (_a) { + var size = _a.size; + return size !== null && size !== void 0 ? size : '20px'; +}, function (_a) { + var size = _a.size; + return size !== null && size !== void 0 ? size : '20px'; +}, function (_a) { + var marginRight = _a.marginRight; + return marginRight !== null && marginRight !== void 0 ? marginRight : 0; +}, function (_a) { + var marginLeft = _a.marginLeft; + return marginLeft !== null && marginLeft !== void 0 ? marginLeft : 0; +}, function (_a) { + var theme = _a.theme, stroke = _a.stroke; + return stroke !== null && stroke !== void 0 ? stroke : theme.blue1; +}); +// A button that triggers some onClick result, but looks like a link. +var LinkStyledButton = styled__default["default"].button(templateObject_4$G || (templateObject_4$G = __makeTemplateObject(["\n border: none;\n text-decoration: none;\n background: none;\n\n cursor: ", ";\n color: ", ";\n font-weight: 500;\n\n :hover {\n text-decoration: ", ";\n }\n\n :focus {\n outline: none;\n text-decoration: ", ";\n }\n\n :active {\n text-decoration: none;\n }\n"], ["\n border: none;\n text-decoration: none;\n background: none;\n\n cursor: ", ";\n color: ", ";\n font-weight: 500;\n\n :hover {\n text-decoration: ", ";\n }\n\n :focus {\n outline: none;\n text-decoration: ", ";\n }\n\n :active {\n text-decoration: none;\n }\n" + // An internal link from the react-router-dom library that is correctly styled +])), function (_a) { + var disabled = _a.disabled; + return (disabled ? 'default' : 'pointer'); +}, function (_a) { + var theme = _a.theme, disabled = _a.disabled; + return (disabled ? theme.text2 : theme.primary1); +}, function (_a) { + var disabled = _a.disabled; + return (disabled ? null : 'underline'); +}, function (_a) { + var disabled = _a.disabled; + return (disabled ? null : 'underline'); +}); +// An internal link from the react-router-dom library that is correctly styled +var StyledInternalLink = styled__default["default"](reactRouterDom.Link)(templateObject_5$x || (templateObject_5$x = __makeTemplateObject(["\n text-decoration: none;\n cursor: pointer;\n color: ", ";\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 text-decoration: none;\n cursor: pointer;\n color: ", ";\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"])), function (_a) { + var theme = _a.theme; + return theme.primary1; +}); +var StyledLink = styled__default["default"].a(templateObject_6$o || (templateObject_6$o = __makeTemplateObject(["\n text-decoration: none;\n cursor: pointer;\n color: ", ";\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 text-decoration: none;\n cursor: pointer;\n color: ", ";\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"])), function (_a) { + var theme = _a.theme; + return theme.primary1; +}); +var LinkIconWrapper = styled__default["default"].a(templateObject_7$k || (templateObject_7$k = __makeTemplateObject(["\n text-decoration: none;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n text-decoration: none;\n opacity: 0.7;\n }\n\n :focus {\n outline: none;\n text-decoration: none;\n }\n\n :active {\n text-decoration: none;\n }\n"], ["\n text-decoration: none;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n text-decoration: none;\n opacity: 0.7;\n }\n\n :focus {\n outline: none;\n text-decoration: none;\n }\n\n :active {\n text-decoration: none;\n }\n"]))); +var LinkIcon = styled__default["default"](reactFeather.ExternalLink)(templateObject_8$h || (templateObject_8$h = __makeTemplateObject(["\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ", ";\n"], ["\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.blue1; +}); +var TrashIcon = styled__default["default"](reactFeather.Trash)(templateObject_9$g || (templateObject_9$g = __makeTemplateObject(["\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ", ";\n\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n opacity: 0.7;\n }\n"], ["\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ", ";\n\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n opacity: 0.7;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text3; +}); +var rotateImg = styled.keyframes(templateObject_10$c || (templateObject_10$c = __makeTemplateObject(["\n 0% {\n transform: perspective(1000px) rotateY(0deg);\n }\n\n 100% {\n transform: perspective(1000px) rotateY(360deg);\n }\n"], ["\n 0% {\n transform: perspective(1000px) rotateY(0deg);\n }\n\n 100% {\n transform: perspective(1000px) rotateY(360deg);\n }\n"]))); +var UniTokenAnimated = styled__default["default"].img(templateObject_11$a || (templateObject_11$a = __makeTemplateObject(["\n animation: ", " 5s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n padding: 2rem 0 0 0;\n filter: drop-shadow(0px 2px 4px rgba(0, 0, 0, 0.15));\n"], ["\n animation: ", " 5s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n padding: 2rem 0 0 0;\n filter: drop-shadow(0px 2px 4px rgba(0, 0, 0, 0.15));\n"])), rotateImg); +function handleClickExternalLink(event) { + var _a = event.currentTarget, target = _a.target, href = _a.href; + var anonymizedHref = anonymizeLink(href); + // don't prevent default, don't redirect if it's a new tab + if (target === '_blank' || event.ctrlKey || event.metaKey) { + ReactGA__default["default"].outboundLink({ label: anonymizedHref }, function () { + console.debug('Fired outbound link event', anonymizedHref); + }); + } + else { + event.preventDefault(); + // send a ReactGA event and then trigger a location change + ReactGA__default["default"].outboundLink({ label: anonymizedHref }, function () { + window.location.href = anonymizedHref; + }); + } +} +/** + * Outbound link that handles firing google analytics events + */ +function ExternalLink(_a) { + var _b = _a.target, target = _b === void 0 ? '_blank' : _b, href = _a.href, _c = _a.rel, rel = _c === void 0 ? 'noopener noreferrer' : _c, rest = __rest(_a, ["target", "href", "rel"]); + return jsxRuntime.jsx(StyledLink, __assign({ target: target, rel: rel, href: href, onClick: handleClickExternalLink }, rest), void 0); +} +function ExternalLinkIcon(_a) { + var _b = _a.target, target = _b === void 0 ? '_blank' : _b, href = _a.href, _c = _a.rel, rel = _c === void 0 ? 'noopener noreferrer' : _c, rest = __rest(_a, ["target", "href", "rel"]); + return (jsxRuntime.jsx(LinkIconWrapper, __assign({ target: target, rel: rel, href: href, onClick: handleClickExternalLink }, rest, { children: jsxRuntime.jsx(LinkIcon, {}, void 0) }), void 0)); +} +var rotate$1 = styled.keyframes(templateObject_12$a || (templateObject_12$a = __makeTemplateObject(["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"], ["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"]))); +var Spinner$2 = styled__default["default"].img(templateObject_13$6 || (templateObject_13$6 = __makeTemplateObject(["\n animation: 2s ", " linear infinite;\n width: 16px;\n height: 16px;\n"], ["\n animation: 2s ", " linear infinite;\n width: 16px;\n height: 16px;\n"])), rotate$1); +styled__default["default"](StyledInternalLink)(templateObject_14$6 || (templateObject_14$6 = __makeTemplateObject(["\n color: ", ";\n"], ["\n color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.text1; +}); +var CustomLightSpinner = styled__default["default"](Spinner$2)(templateObject_15$4 || (templateObject_15$4 = __makeTemplateObject(["\n height: ", ";\n width: ", ";\n"], ["\n height: ", ";\n width: ", ";\n"])), function (_a) { + var size = _a.size; + return size; +}, function (_a) { + var size = _a.size; + return size; +}); +var HideSmall = styled__default["default"].span(templateObject_17$2 || (templateObject_17$2 = __makeTemplateObject(["\n ", ";\n"], ["\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToSmall(templateObject_16$3 || (templateObject_16$3 = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); +}); +styled__default["default"].span(templateObject_19$2 || (templateObject_19$2 = __makeTemplateObject(["\n ", ";\n"], ["\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToExtraSmall(templateObject_18$2 || (templateObject_18$2 = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); +}); +styled__default["default"].span(templateObject_21$1 || (templateObject_21$1 = __makeTemplateObject(["\n display: none;\n ", ";\n"], ["\n display: none;\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToSmall(templateObject_20$1 || (templateObject_20$1 = __makeTemplateObject(["\n display: block;\n "], ["\n display: block;\n "]))); +}); +var Separator$1 = styled__default["default"].div(templateObject_22 || (templateObject_22 = __makeTemplateObject(["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"], ["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}); +var templateObject_1$1l, templateObject_2$$, templateObject_3$S, templateObject_4$G, templateObject_5$x, templateObject_6$o, templateObject_7$k, templateObject_8$h, templateObject_9$g, templateObject_10$c, templateObject_11$a, templateObject_12$a, templateObject_13$6, templateObject_14$6, templateObject_15$4, templateObject_16$3, templateObject_17$2, templateObject_18$2, templateObject_19$2, templateObject_20$1, templateObject_21$1, templateObject_22; + +var MEDIA_WIDTHS = { + upToExtraSmall: 500, + upToSmall: 720, + upToMedium: 960, + upToLarge: 1280, +}; +// Migrating to a standard z-index system https://getbootstrap.com/docs/5.0/layout/z-index/ +// Please avoid using deprecated numbers +var Z_INDEX; +(function (Z_INDEX) { + Z_INDEX[Z_INDEX["deprecated_zero"] = 0] = "deprecated_zero"; + Z_INDEX[Z_INDEX["deprecated_content"] = 1] = "deprecated_content"; + Z_INDEX[Z_INDEX["dropdown"] = 1000] = "dropdown"; + Z_INDEX[Z_INDEX["sticky"] = 1020] = "sticky"; + Z_INDEX[Z_INDEX["fixed"] = 1030] = "fixed"; + Z_INDEX[Z_INDEX["modalBackdrop"] = 1040] = "modalBackdrop"; + Z_INDEX[Z_INDEX["offcanvas"] = 1050] = "offcanvas"; + Z_INDEX[Z_INDEX["modal"] = 1060] = "modal"; + Z_INDEX[Z_INDEX["popover"] = 1070] = "popover"; + Z_INDEX[Z_INDEX["tooltip"] = 1080] = "tooltip"; +})(Z_INDEX || (Z_INDEX = {})); +var mediaWidthTemplates = Object.keys(MEDIA_WIDTHS).reduce(function (accumulator, size) { + accumulator[size] = function (a, b, c) { return styled.css(templateObject_1$1k || (templateObject_1$1k = __makeTemplateObject(["\n @media (max-width: ", "px) {\n ", "\n }\n "], ["\n @media (max-width: ", "px) {\n ", "\n }\n "])), MEDIA_WIDTHS[size], styled.css(a, b, c)); }; + return accumulator; +}, {}); +var white = '#FFFFFF'; +var black = '#000000'; +function colors$2(darkMode) { + return { + darkMode: darkMode, + // base + white: white, + black: black, + // text + text1: darkMode ? '#FFFFFF' : '#000000', + text2: darkMode ? '#C3C5CB' : '#565A69', + text3: darkMode ? '#8F96AC' : '#6E727D', + text4: darkMode ? '#B2B9D2' : '#C3C5CB', + text5: darkMode ? '#2C2F36' : '#EDEEF2', + // backgrounds / greys + bg0: darkMode ? '#191B1F' : '#FFF', + bg1: darkMode ? '#212429' : '#F7F8FA', + bg2: darkMode ? '#2C2F36' : '#EDEEF2', + bg3: darkMode ? '#40444F' : '#CED0D9', + bg4: darkMode ? '#565A69' : '#888D9B', + bg5: darkMode ? '#6C7284' : '#888D9B', + bg6: darkMode ? '#1A2028' : '#6C7284', + //specialty colors + modalBG: darkMode ? 'rgba(0,0,0,.425)' : 'rgba(0,0,0,0.3)', + advancedBG: darkMode ? 'rgba(0,0,0,0.1)' : 'rgba(255,255,255,0.6)', + //primary colors + primary1: darkMode ? '#2172E5' : '#E8006F', + primary2: darkMode ? '#3680E7' : '#FF8CC3', + primary3: darkMode ? '#4D8FEA' : '#FF99C9', + primary4: darkMode ? '#376bad70' : '#F6DDE8', + primary5: darkMode ? '#153d6f70' : '#FDEAF1', + // color text + primaryText1: darkMode ? '#5090ea' : '#D50066', + // secondary colors + secondary1: darkMode ? '#2172E5' : '#E8006F', + secondary2: darkMode ? '#17000b26' : '#F6DDE8', + secondary3: darkMode ? '#17000b26' : '#FDEAF1', + // other + red1: darkMode ? '#FF4343' : '#DA2D2B', + red2: darkMode ? '#F82D3A' : '#DF1F38', + red3: '#D60000', + green1: darkMode ? '#27AE60' : '#007D35', + yellow1: '#E3A507', + yellow2: '#FF8F00', + yellow3: '#F3B71E', + blue1: darkMode ? '#2172E5' : '#0068FC', + blue2: darkMode ? '#5199FF' : '#0068FC', + error: darkMode ? '#FD4040' : '#DF1F38', + success: darkMode ? '#27AE60' : '#007D35', + warning: '#FF8F00', + // dont wanna forget these blue yet + blue4: darkMode ? '#153d6f70' : '#C4D9F8', + // blue5: darkMode ? '#153d6f70' : '#EBF4FF', + }; +} +function theme(darkMode) { + return __assign(__assign({}, colors$2(darkMode)), { grids: { + sm: 8, + md: 12, + lg: 24, + }, + //shadows + shadow1: darkMode ? '#000' : '#2F80ED', + // media queries + mediaWidth: mediaWidthTemplates, + // css snippets + flexColumnNoWrap: styled.css(templateObject_2$_ || (templateObject_2$_ = __makeTemplateObject(["\n display: flex;\n flex-flow: column nowrap;\n "], ["\n display: flex;\n flex-flow: column nowrap;\n "]))), flexRowNoWrap: styled.css(templateObject_3$R || (templateObject_3$R = __makeTemplateObject(["\n display: flex;\n flex-flow: row nowrap;\n "], ["\n display: flex;\n flex-flow: row nowrap;\n "]))) }); +} +function ThemeProvider(_a) { + var children = _a.children; + var darkMode = useIsDarkMode(); + var themeObject = React.useMemo(function () { return theme(darkMode); }, [darkMode]); + return jsxRuntime.jsx(styled.ThemeProvider, __assign({ theme: themeObject }, { children: children }), void 0); +} +var TextWrapper$1 = styled__default["default"](rebass.Text)(templateObject_4$F || (templateObject_4$F = __makeTemplateObject(["\n color: ", ";\n"], ["\n color: ", ";\n" + /** + * Preset styles of the Rebass Text component + */ +])), function (_a) { + var color = _a.color, theme = _a.theme; + return theme[color]; +}); +/** + * Preset styles of the Rebass Text component + */ +var ThemedText = { + Main: function (props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text2' }, props), void 0); + }, + Link: function (props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'primary1' }, props), void 0); + }, + Label: function (props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 600, color: 'text1' }, props), void 0); + }, + Black: function (props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text1' }, props), void 0); + }, + White: function (props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'white' }, props), void 0); + }, + Body: function (props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 400, fontSize: 16, color: 'text1' }, props), void 0); + }, + LargeHeader: function (props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 600, fontSize: 24 }, props), void 0); + }, + MediumHeader: function (props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, fontSize: 20 }, props), void 0); + }, + SubHeader: function (props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 400, fontSize: 14 }, props), void 0); + }, + Small: function (props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, fontSize: 11 }, props), void 0); + }, + Blue: function (props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'blue1' }, props), void 0); + }, + Yellow: function (props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'yellow3' }, props), void 0); + }, + DarkGray: function (props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text3' }, props), void 0); + }, + Gray: function (props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'bg3' }, props), void 0); + }, + Italic: function (props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, fontSize: 12, fontStyle: 'italic', color: 'text2' }, props), void 0); + }, + Error: function (_a) { + var error = _a.error, props = __rest(_a, ["error"]); + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: error ? 'red1' : 'text2' }, props), void 0); + }, +}; +var ThemedGlobalStyle = styled.createGlobalStyle(templateObject_5$w || (templateObject_5$w = __makeTemplateObject(["\nhtml {\n color: ", ";\n background-color: ", " !important;\n}\n\na {\n color: ", "; \n}\n"], ["\nhtml {\n color: ", ";\n background-color: ", " !important;\n}\n\na {\n color: ", "; \n}\n"])), function (_a) { + var theme = _a.theme; + return theme.text1; +}, function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var theme = _a.theme; + return theme.blue1; +}); +var templateObject_1$1k, templateObject_2$_, templateObject_3$R, templateObject_4$F, templateObject_5$w; + +var _a$b; +var ETHERSCAN_PREFIXES = (_a$b = {}, + _a$b[SupportedChainId.MAINNET] = 'https://etherscan.io', + _a$b[SupportedChainId.ROPSTEN] = 'https://ropsten.etherscan.io', + _a$b[SupportedChainId.RINKEBY] = 'https://rinkeby.etherscan.io', + _a$b[SupportedChainId.GOERLI] = 'https://goerli.etherscan.io', + _a$b[SupportedChainId.KOVAN] = 'https://kovan.etherscan.io', + _a$b[SupportedChainId.OPTIMISM] = 'https://optimistic.etherscan.io', + _a$b[SupportedChainId.OPTIMISTIC_KOVAN] = 'https://kovan-optimistic.etherscan.io', + _a$b[SupportedChainId.POLYGON_MUMBAI] = 'https://mumbai.polygonscan.com', + _a$b[SupportedChainId.POLYGON] = 'https://polygonscan.com', + _a$b); +var ExplorerDataType; +(function (ExplorerDataType) { + ExplorerDataType["TRANSACTION"] = "transaction"; + ExplorerDataType["TOKEN"] = "token"; + ExplorerDataType["ADDRESS"] = "address"; + ExplorerDataType["BLOCK"] = "block"; +})(ExplorerDataType || (ExplorerDataType = {})); +/** + * Return the explorer link for the given data and data type + * @param chainId the ID of the chain for which to return the data + * @param data the data to return a link for + * @param type the type of the data + */ +function getExplorerLink(chainId, data, type) { + var _a; + if (chainId === SupportedChainId.ARBITRUM_ONE) { + switch (type) { + case ExplorerDataType.TRANSACTION: + return "https://arbiscan.io/tx/" + data; + case ExplorerDataType.ADDRESS: + case ExplorerDataType.TOKEN: + return "https://arbiscan.io/address/" + data; + case ExplorerDataType.BLOCK: + return "https://arbiscan.io/block/" + data; + default: + return "https://arbiscan.io/"; + } + } + if (chainId === SupportedChainId.ARBITRUM_RINKEBY) { + switch (type) { + case ExplorerDataType.TRANSACTION: + return "https://rinkeby-explorer.arbitrum.io/tx/" + data; + case ExplorerDataType.ADDRESS: + case ExplorerDataType.TOKEN: + return "https://rinkeby-explorer.arbitrum.io/address/" + data; + case ExplorerDataType.BLOCK: + return "https://rinkeby-explorer.arbitrum.io/block/" + data; + default: + return "https://rinkeby-explorer.arbitrum.io/"; + } + } + var prefix = (_a = ETHERSCAN_PREFIXES[chainId]) !== null && _a !== void 0 ? _a : 'https://etherscan.io'; + switch (type) { + case ExplorerDataType.TRANSACTION: + return prefix + "/tx/" + data; + case ExplorerDataType.TOKEN: + return prefix + "/token/" + data; + case ExplorerDataType.BLOCK: + if (chainId === SupportedChainId.OPTIMISM || chainId === SupportedChainId.OPTIMISTIC_KOVAN) { + return prefix + "/tx/" + data; + } + return prefix + "/block/" + data; + case ExplorerDataType.ADDRESS: + return prefix + "/address/" + data; + default: + return "" + prefix; + } +} + +var Column = styled__default["default"].div(templateObject_1$1j || (templateObject_1$1j = __makeTemplateObject(["\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n"], ["\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n"]))); +var ColumnCenter = styled__default["default"](Column)(templateObject_2$Z || (templateObject_2$Z = __makeTemplateObject(["\n width: 100%;\n align-items: center;\n"], ["\n width: 100%;\n align-items: center;\n"]))); +var AutoColumn = styled__default["default"].div(templateObject_3$Q || (templateObject_3$Q = __makeTemplateObject(["\n display: grid;\n grid-auto-rows: auto;\n grid-row-gap: ", ";\n justify-items: ", ";\n"], ["\n display: grid;\n grid-auto-rows: auto;\n grid-row-gap: ", ";\n justify-items: ", ";\n"])), function (_a) { + var gap = _a.gap; + return (gap === 'sm' && '8px') || (gap === 'md' && '12px') || (gap === 'lg' && '24px') || gap; +}, function (_a) { + var justify = _a.justify; + return justify && justify; +}); +var templateObject_1$1j, templateObject_2$Z, templateObject_3$Q; + +var Row$1 = styled__default["default"](styledComponents.Box)(templateObject_1$1i || (templateObject_1$1i = __makeTemplateObject(["\n width: ", ";\n display: flex;\n padding: 0;\n align-items: ", ";\n justify-content: ", ";\n padding: ", ";\n border: ", ";\n border-radius: ", ";\n"], ["\n width: ", ";\n display: flex;\n padding: 0;\n align-items: ", ";\n justify-content: ", ";\n padding: ", ";\n border: ", ";\n border-radius: ", ";\n"])), function (_a) { + var width = _a.width; + return width !== null && width !== void 0 ? width : '100%'; +}, function (_a) { + var align = _a.align; + return align !== null && align !== void 0 ? align : 'center'; +}, function (_a) { + var justify = _a.justify; + return justify !== null && justify !== void 0 ? justify : 'flex-start'; +}, function (_a) { + var padding = _a.padding; + return padding; +}, function (_a) { + var border = _a.border; + return border; +}, function (_a) { + var borderRadius = _a.borderRadius; + return borderRadius; +}); +var RowBetween = styled__default["default"](Row$1)(templateObject_2$Y || (templateObject_2$Y = __makeTemplateObject(["\n justify-content: space-between;\n"], ["\n justify-content: space-between;\n"]))); +styled__default["default"].div(templateObject_3$P || (templateObject_3$P = __makeTemplateObject(["\n display: flex;\n align-items: flex-end;\n"], ["\n display: flex;\n align-items: flex-end;\n"]))); +var AutoRow = styled__default["default"](Row$1)(templateObject_4$E || (templateObject_4$E = __makeTemplateObject(["\n flex-wrap: wrap;\n margin: ", ";\n justify-content: ", ";\n\n & > * {\n margin: ", " !important;\n }\n"], ["\n flex-wrap: wrap;\n margin: ", ";\n justify-content: ", ";\n\n & > * {\n margin: ", " !important;\n }\n"])), function (_a) { + var gap = _a.gap; + return gap && "-" + gap; +}, function (_a) { + var justify = _a.justify; + return justify && justify; +}, function (_a) { + var gap = _a.gap; + return gap; +}); +var RowFixed = styled__default["default"](Row$1)(templateObject_5$v || (templateObject_5$v = __makeTemplateObject(["\n width: fit-content;\n margin: ", ";\n"], ["\n width: fit-content;\n margin: ", ";\n"])), function (_a) { + var gap = _a.gap; + return gap && "-" + gap; +}); +var templateObject_1$1i, templateObject_2$Y, templateObject_3$P, templateObject_4$E, templateObject_5$v; + +var InputPanel$1 = styled__default["default"].div(templateObject_1$1h || (templateObject_1$1h = __makeTemplateObject(["\n ", "\n position: relative;\n border-radius: 1.25rem;\n background-color: ", ";\n z-index: 1;\n width: 100%;\n"], ["\n ", "\n position: relative;\n border-radius: 1.25rem;\n background-color: ", ";\n z-index: 1;\n width: 100%;\n"])), function (_a) { + var theme = _a.theme; + return theme.flexColumnNoWrap; +}, function (_a) { + var theme = _a.theme; + return theme.bg1; +}); +var ContainerRow = styled__default["default"].div(templateObject_2$X || (templateObject_2$X = __makeTemplateObject(["\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 1.25rem;\n border: 1px solid ", ";\n transition: border-color 300ms ", ",\n color 500ms ", ";\n background-color: ", ";\n"], ["\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 1.25rem;\n border: 1px solid ", ";\n transition: border-color 300ms ", ",\n color 500ms ", ";\n background-color: ", ";\n"])), function (_a) { + var error = _a.error, theme = _a.theme; + return (error ? theme.red1 : theme.bg2); +}, function (_a) { + var error = _a.error; + return (error ? 'step-end' : 'step-start'); +}, function (_a) { + var error = _a.error; + return (error ? 'step-end' : 'step-start'); +}, function (_a) { + var theme = _a.theme; + return theme.bg1; +}); +var InputContainer = styled__default["default"].div(templateObject_3$O || (templateObject_3$O = __makeTemplateObject(["\n flex: 1;\n padding: 1rem;\n"], ["\n flex: 1;\n padding: 1rem;\n"]))); +var Input$2 = styled__default["default"].input(templateObject_4$D || (templateObject_4$D = __makeTemplateObject(["\n font-size: 1.25rem;\n outline: none;\n border: none;\n flex: 1 1 auto;\n width: 0;\n background-color: ", ";\n transition: color 300ms ", ";\n color: ", ";\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 500;\n width: 100%;\n ::placeholder {\n color: ", ";\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: ", ";\n }\n"], ["\n font-size: 1.25rem;\n outline: none;\n border: none;\n flex: 1 1 auto;\n width: 0;\n background-color: ", ";\n transition: color 300ms ", ";\n color: ", ";\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 500;\n width: 100%;\n ::placeholder {\n color: ", ";\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: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var error = _a.error; + return (error ? 'step-end' : 'step-start'); +}, function (_a) { + var error = _a.error, theme = _a.theme; + return (error ? theme.red1 : theme.text1); +}, function (_a) { + var theme = _a.theme; + return theme.text4; +}, function (_a) { + var theme = _a.theme; + return theme.text4; +}); +function AddressInputPanel(_a) { + var id = _a.id, _b = _a.className, className = _b === void 0 ? 'recipient-address-input' : _b, label = _a.label, placeholder = _a.placeholder, value = _a.value, onChange = _a.onChange; + var chainId = useActiveWeb3React().chainId; + var theme = React.useContext(styled.ThemeContext); + var _c = useENS(value), address = _c.address, loading = _c.loading, name = _c.name; + var handleInput = React.useCallback(function (event) { + var input = event.target.value; + var withoutSpaces = input.replace(/\s+/g, ''); + onChange(withoutSpaces); + }, [onChange]); + var error = Boolean(value.length > 0 && !loading && !address); + return (jsxRuntime.jsx(InputPanel$1, __assign({ id: id }, { children: jsxRuntime.jsx(ContainerRow, __assign({ error: error }, { children: jsxRuntime.jsx(InputContainer, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "md" }, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(ThemedText.Black, __assign({ color: theme.text2, fontWeight: 500, fontSize: 14 }, { children: label !== null && label !== void 0 ? label : jsxRuntime.jsx(macro.Trans, { children: "Recipient" }, void 0) }), void 0), address && chainId && (jsxRuntime.jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, name !== null && name !== void 0 ? name : address, ExplorerDataType.ADDRESS), style: { fontSize: '14px' } }, { children: jsxRuntime.jsx(macro.Trans, { children: "(View on Explorer)" }, void 0) }), void 0))] }, void 0), jsxRuntime.jsx(Input$2, { className: className, type: "text", autoComplete: "off", autoCorrect: "off", autoCapitalize: "off", spellCheck: "false", placeholder: placeholder !== null && placeholder !== void 0 ? placeholder : macro.t(templateObject_5$u || (templateObject_5$u = __makeTemplateObject(["Wallet Address or ENS name"], ["Wallet Address or ENS name"]))), error: error, pattern: "^(0x[a-fA-F0-9]{40})$", onChange: handleInput, value: value }, void 0)] }), void 0) }, void 0) }), void 0) }), void 0)); +} +var templateObject_1$1h, templateObject_2$X, templateObject_3$O, templateObject_4$D, templateObject_5$u; + +function useTheme() { + return React.useContext(styled.ThemeContext); +} + +var BaseButton = styled__default["default"](styledComponents.Button)(templateObject_1$1g || (templateObject_1$1g = __makeTemplateObject(["\n padding: ", ";\n width: ", ";\n font-weight: 500;\n text-align: center;\n border-radius: ", ";\n outline: none;\n border: 1px solid transparent;\n color: ", ";\n text-decoration: none;\n display: flex;\n justify-content: center;\n flex-wrap: nowrap;\n align-items: center;\n cursor: pointer;\n position: relative;\n z-index: 1;\n &:disabled {\n opacity: 50%;\n cursor: auto;\n pointer-events: none;\n }\n\n will-change: transform;\n transition: transform 450ms ease;\n transform: perspective(1px) translateZ(0);\n\n > * {\n user-select: none;\n }\n\n > a {\n text-decoration: none;\n }\n"], ["\n padding: ", ";\n width: ", ";\n font-weight: 500;\n text-align: center;\n border-radius: ", ";\n outline: none;\n border: 1px solid transparent;\n color: ", ";\n text-decoration: none;\n display: flex;\n justify-content: center;\n flex-wrap: nowrap;\n align-items: center;\n cursor: pointer;\n position: relative;\n z-index: 1;\n &:disabled {\n opacity: 50%;\n cursor: auto;\n pointer-events: none;\n }\n\n will-change: transform;\n transition: transform 450ms ease;\n transform: perspective(1px) translateZ(0);\n\n > * {\n user-select: none;\n }\n\n > a {\n text-decoration: none;\n }\n"])), function (_a) { + var padding = _a.padding; + return padding !== null && padding !== void 0 ? padding : '16px'; +}, function (_a) { + var width = _a.width; + return width !== null && width !== void 0 ? width : '100%'; +}, function (_a) { + var $borderRadius = _a.$borderRadius; + return $borderRadius !== null && $borderRadius !== void 0 ? $borderRadius : '20px'; +}, function (_a) { + var theme = _a.theme; + return theme.text1; +}); +var ButtonPrimary = styled__default["default"](BaseButton)(templateObject_2$W || (templateObject_2$W = __makeTemplateObject(["\n background-color: ", ";\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n background-color: ", ";\n color: ", ";\n cursor: auto;\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n"], ["\n background-color: ", ";\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n background-color: ", ";\n color: ", ";\n cursor: auto;\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.primary1; +}, function (_a) { + var theme = _a.theme; + return polished.darken(0.05, theme.primary1); +}, function (_a) { + var theme = _a.theme; + return polished.darken(0.05, theme.primary1); +}, function (_a) { + var theme = _a.theme; + return polished.darken(0.05, theme.primary1); +}, function (_a) { + var theme = _a.theme; + return polished.darken(0.1, theme.primary1); +}, function (_a) { + var theme = _a.theme; + return polished.darken(0.1, theme.primary1); +}, function (_a) { + var theme = _a.theme, altDisabledStyle = _a.altDisabledStyle, disabled = _a.disabled; + return altDisabledStyle ? (disabled ? theme.primary1 : theme.bg2) : theme.bg2; +}, function (_a) { + var altDisabledStyle = _a.altDisabledStyle, disabled = _a.disabled, theme = _a.theme; + return altDisabledStyle ? (disabled ? theme.white : theme.text2) : theme.text2; +}); +var ButtonLight = styled__default["default"](BaseButton)(templateObject_3$N || (templateObject_3$N = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n font-size: 16px;\n font-weight: 500;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n :disabled {\n opacity: 0.4;\n :hover {\n cursor: auto;\n background-color: ", ";\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n }\n"], ["\n background-color: ", ";\n color: ", ";\n font-size: 16px;\n font-weight: 500;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n :disabled {\n opacity: 0.4;\n :hover {\n cursor: auto;\n background-color: ", ";\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.primary5; +}, function (_a) { + var theme = _a.theme; + return theme.primaryText1; +}, function (_a) { + var theme = _a.theme, disabled = _a.disabled; + return !disabled && polished.darken(0.03, theme.primary5); +}, function (_a) { + var theme = _a.theme, disabled = _a.disabled; + return !disabled && polished.darken(0.03, theme.primary5); +}, function (_a) { + var theme = _a.theme, disabled = _a.disabled; + return !disabled && polished.darken(0.03, theme.primary5); +}, function (_a) { + var theme = _a.theme, disabled = _a.disabled; + return !disabled && polished.darken(0.05, theme.primary5); +}, function (_a) { + var theme = _a.theme, disabled = _a.disabled; + return !disabled && polished.darken(0.05, theme.primary5); +}, function (_a) { + var theme = _a.theme; + return theme.primary5; +}); +var ButtonGray = styled__default["default"](BaseButton)(templateObject_4$C || (templateObject_4$C = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n font-size: 16px;\n font-weight: 500;\n\n &:hover {\n background-color: ", ";\n }\n &:active {\n background-color: ", ";\n }\n"], ["\n background-color: ", ";\n color: ", ";\n font-size: 16px;\n font-weight: 500;\n\n &:hover {\n background-color: ", ";\n }\n &:active {\n background-color: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var theme = _a.theme; + return theme.text2; +}, function (_a) { + var theme = _a.theme, disabled = _a.disabled; + return !disabled && polished.darken(0.05, theme.bg2); +}, function (_a) { + var theme = _a.theme, disabled = _a.disabled; + return !disabled && polished.darken(0.1, theme.bg2); +}); +var ButtonSecondary = styled__default["default"](BaseButton)(templateObject_5$t || (templateObject_5$t = __makeTemplateObject(["\n border: 1px solid ", ";\n color: ", ";\n background-color: transparent;\n font-size: 16px;\n border-radius: 12px;\n padding: ", ";\n\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n border: 1px solid ", ";\n }\n &:hover {\n border: 1px solid ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n border: 1px solid ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n a:hover {\n text-decoration: none;\n }\n"], ["\n border: 1px solid ", ";\n color: ", ";\n background-color: transparent;\n font-size: 16px;\n border-radius: 12px;\n padding: ", ";\n\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n border: 1px solid ", ";\n }\n &:hover {\n border: 1px solid ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n border: 1px solid ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n a:hover {\n text-decoration: none;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.primary4; +}, function (_a) { + var theme = _a.theme; + return theme.primary1; +}, function (_a) { + var padding = _a.padding; + return (padding ? padding : '10px'); +}, function (_a) { + var theme = _a.theme; + return theme.primary4; +}, function (_a) { + var theme = _a.theme; + return theme.primary3; +}, function (_a) { + var theme = _a.theme; + return theme.primary3; +}, function (_a) { + var theme = _a.theme; + return theme.primary4; +}, function (_a) { + var theme = _a.theme; + return theme.primary3; +}); +var ButtonOutlined = styled__default["default"](BaseButton)(templateObject_6$n || (templateObject_6$n = __makeTemplateObject(["\n border: 1px solid ", ";\n background-color: transparent;\n color: ", ";\n &:focus {\n box-shadow: 0 0 0 1px ", ";\n }\n &:hover {\n box-shadow: 0 0 0 1px ", ";\n }\n &:active {\n box-shadow: 0 0 0 1px ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"], ["\n border: 1px solid ", ";\n background-color: transparent;\n color: ", ";\n &:focus {\n box-shadow: 0 0 0 1px ", ";\n }\n &:hover {\n box-shadow: 0 0 0 1px ", ";\n }\n &:active {\n box-shadow: 0 0 0 1px ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}, function (_a) { + var theme = _a.theme; + return theme.text1; +}, function (_a) { + var theme = _a.theme; + return theme.bg4; +}, function (_a) { + var theme = _a.theme; + return theme.bg4; +}, function (_a) { + var theme = _a.theme; + return theme.bg4; +}); +styled__default["default"](BaseButton)(templateObject_7$j || (templateObject_7$j = __makeTemplateObject(["\n background-color: ", ";\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n background-color: ", ";\n opacity: 50%;\n cursor: auto;\n }\n"], ["\n background-color: ", ";\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n background-color: ", ";\n opacity: 50%;\n cursor: auto;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.yellow3; +}, function (_a) { + var theme = _a.theme; + return polished.darken(0.05, theme.yellow3); +}, function (_a) { + var theme = _a.theme; + return polished.darken(0.05, theme.yellow3); +}, function (_a) { + var theme = _a.theme; + return polished.darken(0.05, theme.yellow3); +}, function (_a) { + var theme = _a.theme; + return polished.darken(0.1, theme.yellow3); +}, function (_a) { + var theme = _a.theme; + return polished.darken(0.1, theme.yellow3); +}, function (_a) { + var theme = _a.theme; + return theme.yellow3; +}); +var ButtonEmpty = styled__default["default"](BaseButton)(templateObject_8$g || (templateObject_8$g = __makeTemplateObject(["\n background-color: transparent;\n color: ", ";\n display: flex;\n justify-content: center;\n align-items: center;\n\n &:focus {\n text-decoration: underline;\n }\n &:hover {\n text-decoration: none;\n }\n &:active {\n text-decoration: none;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"], ["\n background-color: transparent;\n color: ", ";\n display: flex;\n justify-content: center;\n align-items: center;\n\n &:focus {\n text-decoration: underline;\n }\n &:hover {\n text-decoration: none;\n }\n &:active {\n text-decoration: none;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.primary1; +}); +styled__default["default"](BaseButton)(templateObject_9$f || (templateObject_9$f = __makeTemplateObject(["\n padding: 0;\n width: fit-content;\n background: none;\n text-decoration: none;\n &:focus {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n text-decoration: underline;\n }\n &:hover {\n // text-decoration: underline;\n opacity: 0.9;\n }\n &:active {\n text-decoration: underline;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"], ["\n padding: 0;\n width: fit-content;\n background: none;\n text-decoration: none;\n &:focus {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n text-decoration: underline;\n }\n &:hover {\n // text-decoration: underline;\n opacity: 0.9;\n }\n &:active {\n text-decoration: underline;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"]))); +var ButtonConfirmedStyle = styled__default["default"](BaseButton)(templateObject_10$b || (templateObject_10$b = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n /* border: 1px solid ", "; */\n\n &:disabled {\n opacity: 50%;\n background-color: ", ";\n color: ", ";\n cursor: auto;\n }\n"], ["\n background-color: ", ";\n color: ", ";\n /* border: 1px solid ", "; */\n\n &:disabled {\n opacity: 50%;\n background-color: ", ";\n color: ", ";\n cursor: auto;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.bg3; +}, function (_a) { + var theme = _a.theme; + return theme.text1; +}, function (_a) { + var theme = _a.theme; + return theme.green1; +}, function (_a) { + var theme = _a.theme; + return theme.bg2; +}, function (_a) { + var theme = _a.theme; + return theme.text2; +}); +var ButtonErrorStyle = styled__default["default"](BaseButton)(templateObject_11$9 || (templateObject_11$9 = __makeTemplateObject(["\n background-color: ", ";\n border: 1px solid ", ";\n\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n box-shadow: none;\n background-color: ", ";\n border: 1px solid ", ";\n }\n"], ["\n background-color: ", ";\n border: 1px solid ", ";\n\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n box-shadow: none;\n background-color: ", ";\n border: 1px solid ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.red1; +}, function (_a) { + var theme = _a.theme; + return theme.red1; +}, function (_a) { + var theme = _a.theme; + return polished.darken(0.05, theme.red1); +}, function (_a) { + var theme = _a.theme; + return polished.darken(0.05, theme.red1); +}, function (_a) { + var theme = _a.theme; + return polished.darken(0.05, theme.red1); +}, function (_a) { + var theme = _a.theme; + return polished.darken(0.1, theme.red1); +}, function (_a) { + var theme = _a.theme; + return polished.darken(0.1, theme.red1); +}, function (_a) { + var theme = _a.theme; + return theme.red1; +}, function (_a) { + var theme = _a.theme; + return theme.red1; +}); +function ButtonConfirmed(_a) { + var confirmed = _a.confirmed, altDisabledStyle = _a.altDisabledStyle, rest = __rest(_a, ["confirmed", "altDisabledStyle"]); + if (confirmed) { + return jsxRuntime.jsx(ButtonConfirmedStyle, __assign({}, rest), void 0); + } + else { + return jsxRuntime.jsx(ButtonPrimary, __assign({}, rest, { altDisabledStyle: altDisabledStyle }), void 0); + } +} +function ButtonError(_a) { + var error = _a.error, rest = __rest(_a, ["error"]); + if (error) { + return jsxRuntime.jsx(ButtonErrorStyle, __assign({}, rest), void 0); + } + else { + return jsxRuntime.jsx(ButtonPrimary, __assign({}, rest), void 0); + } +} +styled__default["default"](ButtonOutlined)(templateObject_12$9 || (templateObject_12$9 = __makeTemplateObject(["\n border: 1px solid;\n border-color: ", ";\n"], ["\n border: 1px solid;\n border-color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.primary1; +}); +styled__default["default"].div(templateObject_13$5 || (templateObject_13$5 = __makeTemplateObject(["\n height: 17px;\n width: 17px;\n border-radius: 50%;\n background-color: ", ";\n display: flex;\n align-items: center;\n justify-content: center;\n"], ["\n height: 17px;\n width: 17px;\n border-radius: 50%;\n background-color: ", ";\n display: flex;\n align-items: center;\n justify-content: center;\n"])), function (_a) { + var theme = _a.theme; + return theme.primary1; +}); +styled__default["default"].div(templateObject_14$5 || (templateObject_14$5 = __makeTemplateObject(["\n width: 20px;\n padding: 0 10px;\n position: absolute;\n top: 11px;\n right: 15px;\n"], ["\n width: 20px;\n padding: 0 10px;\n position: absolute;\n top: 11px;\n right: 15px;\n"]))); +styled__default["default"](reactFeather.Check)(templateObject_15$3 || (templateObject_15$3 = __makeTemplateObject(["\n size: 13px;\n"], ["\n size: 13px;\n"]))); +var templateObject_1$1g, templateObject_2$W, templateObject_3$N, templateObject_4$C, templateObject_5$t, templateObject_6$n, templateObject_7$j, templateObject_8$g, templateObject_9$f, templateObject_10$b, templateObject_11$9, templateObject_12$9, templateObject_13$5, templateObject_14$5, templateObject_15$3; + +var isClient = typeof window === 'object'; +function getSize() { + return { + width: isClient ? window.innerWidth : undefined, + height: isClient ? window.innerHeight : undefined, + }; +} +// https://usehooks.com/useWindowSize/ +function useWindowSize() { + var _a = __read(React.useState(getSize), 2), windowSize = _a[0], setWindowSize = _a[1]; + React.useEffect(function () { + function handleResize() { + setWindowSize(getSize()); + } + if (isClient) { + window.addEventListener('resize', handleResize); + return function () { + window.removeEventListener('resize', handleResize); + }; + } + return undefined; + }, []); + return windowSize; +} + +// eslint-disable-next-line react/prop-types +function Confetti(_a) { + var start = _a.start, variant = _a.variant; + var _b = useWindowSize(), width = _b.width, height = _b.height; + var _variant = variant ? variant : height && width && height > 1.5 * width ? 'bottom' : variant; + return start && width && height ? (jsxRuntime.jsx(ReactConfetti__default["default"], { style: { zIndex: 1401 }, numberOfPieces: 400, recycle: false, run: true, width: width, height: height, confettiSource: { + h: height, + w: width, + x: 0, + y: _variant === 'top' ? height * 0.25 : _variant === 'bottom' ? height * 0.75 : height * 0.5, + }, initialVelocityX: 15, initialVelocityY: 30, gravity: 0.45, tweenDuration: 100, wind: 0.05 }, void 0)) : null; +} + +var uImage = "10f062d02df4af77.png"; + +var noise = "f158a440053a5ad2.png"; + +var xlUnicorn = "c2cd04251aa24c34.png"; + +var DataCard = styled__default["default"](AutoColumn)(templateObject_1$1f || (templateObject_1$1f = __makeTemplateObject(["\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #2172e5 100%);\n border-radius: 12px;\n width: 100%;\n position: relative;\n overflow: hidden;\n"], ["\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #2172e5 100%);\n border-radius: 12px;\n width: 100%;\n position: relative;\n overflow: hidden;\n"]))); +var CardBGImage = styled__default["default"].span(templateObject_2$V || (templateObject_2$V = __makeTemplateObject(["\n background: url(", ");\n width: 1000px;\n height: 600px;\n position: absolute;\n border-radius: 12px;\n opacity: 0.4;\n top: -100px;\n left: -100px;\n transform: rotate(-15deg);\n user-select: none;\n ", "\n"], ["\n background: url(", ");\n width: 1000px;\n height: 600px;\n position: absolute;\n border-radius: 12px;\n opacity: 0.4;\n top: -100px;\n left: -100px;\n transform: rotate(-15deg);\n user-select: none;\n ", "\n"])), uImage, function (_a) { + var desaturate = _a.desaturate; + return desaturate && "filter: saturate(0)"; +}); +var CardBGImageSmaller = styled__default["default"].span(templateObject_3$M || (templateObject_3$M = __makeTemplateObject(["\n background: url(", ");\n width: 1200px;\n height: 1200px;\n position: absolute;\n border-radius: 12px;\n top: -300px;\n left: -300px;\n opacity: 0.4;\n user-select: none;\n\n ", "\n"], ["\n background: url(", ");\n width: 1200px;\n height: 1200px;\n position: absolute;\n border-radius: 12px;\n top: -300px;\n left: -300px;\n opacity: 0.4;\n user-select: none;\n\n ", "\n"])), xlUnicorn, function (_a) { + var desaturate = _a.desaturate; + return desaturate && "filter: saturate(0)"; +}); +var CardNoise = styled__default["default"].span(templateObject_4$B || (templateObject_4$B = __makeTemplateObject(["\n background: url(", ");\n background-size: cover;\n mix-blend-mode: overlay;\n border-radius: 12px;\n width: 100%;\n height: 100%;\n opacity: 0.15;\n position: absolute;\n top: 0;\n left: 0;\n user-select: none;\n"], ["\n background: url(", ");\n background-size: cover;\n mix-blend-mode: overlay;\n border-radius: 12px;\n width: 100%;\n height: 100%;\n opacity: 0.15;\n position: absolute;\n top: 0;\n left: 0;\n user-select: none;\n"])), noise); +var CardSection = styled__default["default"](AutoColumn)(templateObject_5$s || (templateObject_5$s = __makeTemplateObject(["\n padding: 1rem;\n z-index: 1;\n opacity: ", ";\n"], ["\n padding: 1rem;\n z-index: 1;\n opacity: ", ";\n"])), function (_a) { + var disabled = _a.disabled; + return disabled && '0.4'; +}); +var Break$1 = styled__default["default"].div(templateObject_6$m || (templateObject_6$m = __makeTemplateObject(["\n width: 100%;\n background-color: rgba(255, 255, 255, 0.2);\n height: 1px;\n"], ["\n width: 100%;\n background-color: rgba(255, 255, 255, 0.2);\n height: 1px;\n"]))); +var templateObject_1$1f, templateObject_2$V, templateObject_3$M, templateObject_4$B, templateObject_5$s, templateObject_6$m; + +var parser = new uaParserJs.UAParser(window.navigator.userAgent); +var type$1 = parser.getDevice().type; +var userAgent = parser.getResult(); +var isMobile = type$1 === 'mobile' || type$1 === 'tablet'; + +var AnimatedDialogOverlay = reactSpring.animated(dialog.DialogOverlay); +// eslint-disable-next-line @typescript-eslint/no-unused-vars +var StyledDialogOverlay = styled__default["default"](AnimatedDialogOverlay)(templateObject_1$1e || (templateObject_1$1e = __makeTemplateObject(["\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: ", ";\n }\n"], ["\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: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.modalBG; +}); +var AnimatedDialogContent = reactSpring.animated(dialog.DialogContent); +// destructure to not pass custom props to Dialog DOM element +// eslint-disable-next-line @typescript-eslint/no-unused-vars +var StyledDialogContent = styled__default["default"](function (_a) { + _a.minHeight; _a.maxHeight; _a.mobile; _a.isOpen; var rest = __rest(_a, ["minHeight", "maxHeight", "mobile", "isOpen"]); + return (jsxRuntime.jsx(AnimatedDialogContent, __assign({}, rest), void 0)); +}).attrs({ + 'aria-label': 'dialog', +})(templateObject_7$i || (templateObject_7$i = __makeTemplateObject(["\n overflow-y: auto;\n\n &[data-reach-dialog-content] {\n margin: 0 0 2rem 0;\n background-color: ", ";\n border: 1px solid ", ";\n box-shadow: 0 4px 8px 0 ", ";\n padding: 0px;\n width: 50vw;\n overflow-y: auto;\n overflow-x: hidden;\n\n align-self: ", ";\n\n max-width: 420px;\n ", "\n ", "\n display: flex;\n border-radius: 20px;\n ", "\n ", "\n }\n"], ["\n overflow-y: auto;\n\n &[data-reach-dialog-content] {\n margin: 0 0 2rem 0;\n background-color: ", ";\n border: 1px solid ", ";\n box-shadow: 0 4px 8px 0 ", ";\n padding: 0px;\n width: 50vw;\n overflow-y: auto;\n overflow-x: hidden;\n\n align-self: ", ";\n\n max-width: 420px;\n ", "\n ", "\n display: flex;\n border-radius: 20px;\n ", "\n ", "\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.bg0; +}, function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var theme = _a.theme; + return polished.transparentize(0.95, theme.shadow1); +}, function (_a) { + var mobile = _a.mobile; + return (mobile ? 'flex-end' : 'center'); +}, function (_a) { + var maxHeight = _a.maxHeight; + return maxHeight && styled.css(templateObject_2$U || (templateObject_2$U = __makeTemplateObject(["\n max-height: ", "vh;\n "], ["\n max-height: ", "vh;\n "])), maxHeight); +}, function (_a) { + var minHeight = _a.minHeight; + return minHeight && styled.css(templateObject_3$L || (templateObject_3$L = __makeTemplateObject(["\n min-height: ", "vh;\n "], ["\n min-height: ", "vh;\n "])), minHeight); +}, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToMedium(templateObject_4$A || (templateObject_4$A = __makeTemplateObject(["\n width: 65vw;\n margin: 0;\n "], ["\n width: 65vw;\n margin: 0;\n "]))); +}, function (_a) { + var theme = _a.theme, mobile = _a.mobile; + return theme.mediaWidth.upToSmall(templateObject_6$l || (templateObject_6$l = __makeTemplateObject(["\n width: 85vw;\n ", "\n "], ["\n width: 85vw;\n ", "\n "])), mobile && styled.css(templateObject_5$r || (templateObject_5$r = __makeTemplateObject(["\n width: 100vw;\n border-radius: 20px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n "], ["\n width: 100vw;\n border-radius: 20px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n "])))); +}); +function Modal(_a) { + var isOpen = _a.isOpen, onDismiss = _a.onDismiss, _b = _a.minHeight, minHeight = _b === void 0 ? false : _b, _c = _a.maxHeight, maxHeight = _c === void 0 ? 90 : _c, initialFocusRef = _a.initialFocusRef, children = _a.children; + var fadeTransition = reactSpring.useTransition(isOpen, null, { + config: { duration: 200 }, + from: { opacity: 0 }, + enter: { opacity: 1 }, + leave: { opacity: 0 }, + }); + var _d = __read(reactSpring.useSpring(function () { return ({ y: 0, config: { mass: 1, tension: 210, friction: 20 } }); }), 2), y = _d[0].y, set = _d[1]; + var bind = reactUseGesture.useGesture({ + onDrag: function (state) { + set({ + y: state.down ? state.movement[1] : 0, + }); + if (state.movement[1] > 300 || (state.velocity > 3 && state.direction[1] > 0)) { + onDismiss(); + } + }, + }); + return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: fadeTransition.map(function (_a) { + var item = _a.item, key = _a.key, props = _a.props; + return item && (jsxRuntime.jsx(StyledDialogOverlay, __assign({ style: props, onDismiss: onDismiss, initialFocusRef: initialFocusRef, unstable_lockFocusAcrossFrames: false }, { children: jsxRuntime.jsxs(StyledDialogContent, __assign({}, (isMobile + ? __assign(__assign({}, bind()), { style: { transform: y.interpolate(function (y) { return "translateY(" + (y > 0 ? y : 0) + "px)"; }) } }) : {}), { "aria-label": "dialog content", minHeight: minHeight, maxHeight: maxHeight, mobile: isMobile }, { children: [!initialFocusRef && isMobile ? jsxRuntime.jsx("div", { tabIndex: 1 }, void 0) : null, children] }), void 0) }), key)); + }) }, void 0)); +} +var templateObject_1$1e, templateObject_2$U, templateObject_3$L, templateObject_4$A, templateObject_5$r, templateObject_6$l, templateObject_7$i; + +var ContentWrapper$4 = styled__default["default"](AutoColumn)(templateObject_1$1d || (templateObject_1$1d = __makeTemplateObject(["\n width: 100%;\n"], ["\n width: 100%;\n"]))); +var ModalUpper$1 = styled__default["default"](DataCard)(templateObject_2$T || (templateObject_2$T = __makeTemplateObject(["\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n"], ["\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n"]))); +var ConfirmOrLoadingWrapper$1 = styled__default["default"].div(templateObject_3$K || (templateObject_3$K = __makeTemplateObject(["\n width: 100%;\n padding: 24px;\n position: relative;\n background: ", ";\n"], ["\n width: 100%;\n padding: 24px;\n position: relative;\n background: ", ";\n"])), function (_a) { + var activeBG = _a.activeBG; + return activeBG && + 'radial-gradient(76.02% 75.41% at 1.84% 0%, rgba(255, 0, 122, 0.2) 0%, rgba(33, 114, 229, 0.2) 100%), #FFFFFF;'; +}); +var ConfirmedIcon$2 = styled__default["default"](ColumnCenter)(templateObject_4$z || (templateObject_4$z = __makeTemplateObject(["\n padding: 60px 0;\n"], ["\n padding: 60px 0;\n"]))); +function AddressClaimModal(_a) { + var _b, _c; + var isOpen = _a.isOpen, onDismiss = _a.onDismiss; + var chainId = useActiveWeb3React().chainId; + // state for smart contract input + var _d = __read(React.useState(''), 2), typed = _d[0], setTyped = _d[1]; + function handleRecipientType(val) { + setTyped(val); + } + // monitor for third party recipient of claim + var parsedAddress = useENS(typed).address; + // used for UI loading states + var _e = __read(React.useState(false), 2), attempting = _e[0], setAttempting = _e[1]; + // monitor the status of the claim from contracts and txns + var claimCallback = useClaimCallback(parsedAddress).claimCallback; + var unclaimedAmount = useUserUnclaimedAmount(parsedAddress); + // check if the user has something available + var hasAvailableClaim = useUserHasAvailableClaim(parsedAddress); + var _f = __read(React.useState(), 2), hash = _f[0], setHash = _f[1]; + // monitor the status of the claim from contracts and txns + var claimPending = useIsTransactionPending(hash !== null && hash !== void 0 ? hash : ''); + var claimConfirmed = hash && !claimPending; + // use the hash to monitor this txn + function onClaim() { + setAttempting(true); + claimCallback() + .then(function (hash) { + setHash(hash); + }) + // reset modal and log error + .catch(function (error) { + setAttempting(false); + console.log(error); + }); + } + function wrappedOnDismiss() { + setAttempting(false); + setHash(undefined); + setTyped(''); + onDismiss(); + } + return (jsxRuntime.jsxs(Modal, __assign({ isOpen: isOpen, onDismiss: wrappedOnDismiss, maxHeight: 90 }, { children: [jsxRuntime.jsx(Confetti, { start: Boolean(isOpen && claimConfirmed && attempting) }, void 0), !attempting && (jsxRuntime.jsxs(ContentWrapper$4, __assign({ gap: "lg" }, { children: [jsxRuntime.jsxs(ModalUpper$1, { children: [jsxRuntime.jsx(CardBGImage, {}, void 0), jsxRuntime.jsx(CardNoise, {}, void 0), jsxRuntime.jsxs(CardSection, __assign({ gap: "md" }, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(ThemedText.White, __assign({ fontWeight: 500 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Claim UNI Token" }, void 0) }), void 0), jsxRuntime.jsx(CloseIcon$2, { onClick: wrappedOnDismiss, style: { zIndex: 99 }, stroke: "white" }, void 0)] }, void 0), jsxRuntime.jsx(ThemedText.White, __assign({ fontWeight: 700, fontSize: 36 }, { children: jsxRuntime.jsxs(macro.Trans, { children: [unclaimedAmount === null || unclaimedAmount === void 0 ? void 0 : unclaimedAmount.toFixed(0, (_b = { groupSeparator: ',' }) !== null && _b !== void 0 ? _b : '-'), " UNI"] }, void 0) }), void 0)] }), void 0), jsxRuntime.jsx(Break$1, {}, void 0)] }, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "md", style: { padding: '1rem', paddingTop: '0' }, justify: "center" }, { children: [jsxRuntime.jsx(ThemedText.SubHeader, __assign({ fontWeight: 500 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission." }, void 0) }), void 0), jsxRuntime.jsx(AddressInputPanel, { value: typed, onChange: handleRecipientType }, void 0), parsedAddress && !hasAvailableClaim && (jsxRuntime.jsx(ThemedText.Error, __assign({ error: true }, { children: jsxRuntime.jsx(macro.Trans, { children: "Address has no available claim" }, void 0) }), void 0)), jsxRuntime.jsx(ButtonPrimary, __assign({ disabled: !address.isAddress(parsedAddress !== null && parsedAddress !== void 0 ? parsedAddress : '') || !hasAvailableClaim, padding: "16px 16px", width: "100%", "$borderRadius": "12px", mt: "1rem", onClick: onClaim }, { children: jsxRuntime.jsx(macro.Trans, { children: "Claim UNI" }, void 0) }), void 0)] }), void 0)] }), void 0)), (attempting || claimConfirmed) && (jsxRuntime.jsxs(ConfirmOrLoadingWrapper$1, __assign({ activeBG: true }, { children: [jsxRuntime.jsx(CardNoise, {}, void 0), jsxRuntime.jsx(CardBGImageSmaller, { desaturate: true }, void 0), jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx("div", {}, void 0), jsxRuntime.jsx(CloseIcon$2, { onClick: wrappedOnDismiss, style: { zIndex: 99 }, stroke: "black" }, void 0)] }, void 0), jsxRuntime.jsx(ConfirmedIcon$2, { children: !claimConfirmed ? (jsxRuntime.jsx(CustomLightSpinner, { src: Circle$1, alt: "loader", size: '90px' }, void 0)) : (jsxRuntime.jsx(UniTokenAnimated, { width: "72px", src: tokenLogo, alt: "UNI logo" }, void 0)) }, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "100px", justify: 'center' }, { children: [jsxRuntime.jsxs(AutoColumn, __assign({ gap: "12px", justify: 'center' }, { children: [jsxRuntime.jsx(ThemedText.LargeHeader, __assign({ fontWeight: 600, color: "black" }, { children: claimConfirmed ? jsxRuntime.jsx(macro.Trans, { children: "Claimed" }, void 0) : jsxRuntime.jsx(macro.Trans, { children: "Claiming" }, void 0) }), void 0), !claimConfirmed && (jsxRuntime.jsx(rebass.Text, __assign({ fontSize: 36, color: '#ff007a', fontWeight: 800 }, { children: jsxRuntime.jsxs(macro.Trans, { children: [unclaimedAmount === null || unclaimedAmount === void 0 ? void 0 : unclaimedAmount.toFixed(0, (_c = { groupSeparator: ',' }) !== null && _c !== void 0 ? _c : '-'), " UNI"] }, void 0) }), void 0)), parsedAddress && (jsxRuntime.jsx(ThemedText.LargeHeader, __assign({ fontWeight: 600, color: "black" }, { children: jsxRuntime.jsxs(macro.Trans, { children: ["for ", shortenAddress(parsedAddress)] }, void 0) }), void 0))] }), void 0), claimConfirmed && (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs(ThemedText.SubHeader, __assign({ fontWeight: 500, color: "black" }, { children: [jsxRuntime.jsxs("span", __assign({ role: "img", "aria-label": "party-hat" }, { children: ["\uD83C\uDF89", ' '] }), void 0), jsxRuntime.jsx(macro.Trans, { children: "Welcome to team Unicorn :) " }, void 0), jsxRuntime.jsx("span", __assign({ role: "img", "aria-label": "party-hat" }, { children: "\uD83C\uDF89" }), void 0)] }), void 0) }, void 0)), attempting && !hash && (jsxRuntime.jsx(ThemedText.SubHeader, __assign({ color: "black" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Confirm this transaction in your wallet" }, void 0) }), void 0)), attempting && hash && !claimConfirmed && chainId && hash && (jsxRuntime.jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, hash, ExplorerDataType.TRANSACTION), style: { zIndex: 99 } }, { children: jsxRuntime.jsx(macro.Trans, { children: "View transaction on Explorer" }, void 0) }), void 0))] }), void 0)] }), void 0))] }), void 0)); +} +var templateObject_1$1d, templateObject_2$T, templateObject_3$K, templateObject_4$z; + +var _a$a; +var ApplicationModal; +(function (ApplicationModal) { + ApplicationModal[ApplicationModal["WALLET"] = 0] = "WALLET"; + ApplicationModal[ApplicationModal["SETTINGS"] = 1] = "SETTINGS"; + ApplicationModal[ApplicationModal["SELF_CLAIM"] = 2] = "SELF_CLAIM"; + ApplicationModal[ApplicationModal["ADDRESS_CLAIM"] = 3] = "ADDRESS_CLAIM"; + ApplicationModal[ApplicationModal["CLAIM_POPUP"] = 4] = "CLAIM_POPUP"; + ApplicationModal[ApplicationModal["MENU"] = 5] = "MENU"; + ApplicationModal[ApplicationModal["DELEGATE"] = 6] = "DELEGATE"; + ApplicationModal[ApplicationModal["VOTE"] = 7] = "VOTE"; + ApplicationModal[ApplicationModal["POOL_OVERVIEW_OPTIONS"] = 8] = "POOL_OVERVIEW_OPTIONS"; + ApplicationModal[ApplicationModal["NETWORK_SELECTOR"] = 9] = "NETWORK_SELECTOR"; + ApplicationModal[ApplicationModal["PRIVACY_POLICY"] = 10] = "PRIVACY_POLICY"; +})(ApplicationModal || (ApplicationModal = {})); +var initialState$8 = { + chainId: null, + openModal: null, + popupList: [], +}; +var applicationSlice = toolkit.createSlice({ + name: 'application', + initialState: initialState$8, + reducers: { + updateChainId: function (state, action) { + var chainId = action.payload.chainId; + state.chainId = chainId; + }, + setOpenModal: function (state, action) { + state.openModal = action.payload; + }, + addPopup: function (state, _a) { + var _b = _a.payload, content = _b.content, key = _b.key, _c = _b.removeAfterMs, removeAfterMs = _c === void 0 ? DEFAULT_TXN_DISMISS_MS : _c; + state.popupList = (key ? state.popupList.filter(function (popup) { return popup.key !== key; }) : state.popupList).concat([ + { + key: key || toolkit.nanoid(), + show: true, + content: content, + removeAfterMs: removeAfterMs, + }, + ]); + }, + removePopup: function (state, _a) { + var key = _a.payload.key; + state.popupList.forEach(function (p) { + if (p.key === key) { + p.show = false; + } + }); + }, + }, +}); +var updateChainId = (_a$a = applicationSlice.actions, _a$a.updateChainId), setOpenModal = _a$a.setOpenModal, addPopup = _a$a.addPopup, removePopup = _a$a.removePopup; +var application = applicationSlice.reducer; + +var Field$3; +(function (Field) { + Field["LIQUIDITY_PERCENT"] = "LIQUIDITY_PERCENT"; + Field["LIQUIDITY"] = "LIQUIDITY"; + Field["CURRENCY_A"] = "CURRENCY_A"; + Field["CURRENCY_B"] = "CURRENCY_B"; +})(Field$3 || (Field$3 = {})); +var typeInput$3 = toolkit.createAction('burn/typeInputBurn'); + +var initialState$7 = { + independentField: Field$3.LIQUIDITY_PERCENT, + typedValue: '0', +}; +var burn = toolkit.createReducer(initialState$7, function (builder) { + return builder.addCase(typeInput$3, function (state, _a) { + var _b = _a.payload, field = _b.field, typedValue = _b.typedValue; + return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); + }); +}); + +var selectPercent = toolkit.createAction('burnV3/selectBurnPercent'); + +var initialState$6 = { + percent: 0, +}; +var burnV3 = toolkit.createReducer(initialState$6, function (builder) { + return builder.addCase(selectPercent, function (state, _a) { + var percent = _a.payload.percent; + return __assign(__assign({}, state), { percent: percent }); + }); +}); + +var _a$9; +// List of supported subgraphs. Note that the app currently only support one active subgraph at a time +var CHAIN_SUBGRAPH_URL = (_a$9 = {}, + _a$9[SupportedChainId.MAINNET] = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3', + _a$9[SupportedChainId.RINKEBY] = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3', + _a$9[SupportedChainId.ARBITRUM_ONE] = 'https://api.thegraph.com/subgraphs/name/ianlapham/arbitrum-minimal', + _a$9[SupportedChainId.OPTIMISM] = 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-optimism-dev', + _a$9[SupportedChainId.POLYGON] = 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-v3-polygon', + _a$9); +var api$1 = react.createApi({ + reducerPath: 'dataApi', + baseQuery: graphqlRequestBaseQuery(), + endpoints: function (builder) { return ({ + allV3Ticks: builder.query({ + query: function (_a) { + var poolAddress = _a.poolAddress, _b = _a.skip, skip = _b === void 0 ? 0 : _b; + return ({ + document: graphqlRequest.gql(templateObject_1$1c || (templateObject_1$1c = __makeTemplateObject(["\n query allV3Ticks($poolAddress: String!, $skip: Int!) {\n ticks(first: 1000, skip: $skip, where: { poolAddress: $poolAddress }, orderBy: tickIdx) {\n tick: tickIdx\n liquidityNet\n price0\n price1\n }\n }\n "], ["\n query allV3Ticks($poolAddress: String!, $skip: Int!) {\n ticks(first: 1000, skip: $skip, where: { poolAddress: $poolAddress }, orderBy: tickIdx) {\n tick: tickIdx\n liquidityNet\n price0\n price1\n }\n }\n "]))), + variables: { + poolAddress: poolAddress, + skip: skip, + }, + }); + }, + }), + feeTierDistribution: builder.query({ + query: function (_a) { + var token0 = _a.token0, token1 = _a.token1; + return ({ + document: graphqlRequest.gql(templateObject_2$S || (templateObject_2$S = __makeTemplateObject(["\n query feeTierDistribution($token0: String!, $token1: String!) {\n _meta {\n block {\n number\n }\n }\n asToken0: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token0, token1: $token1 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n asToken1: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token1, token1: $token0 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n }\n "], ["\n query feeTierDistribution($token0: String!, $token1: String!) {\n _meta {\n block {\n number\n }\n }\n asToken0: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token0, token1: $token1 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n asToken1: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token1, token1: $token0 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n }\n "]))), + variables: { + token0: token0, + token1: token1, + }, + }); + }, + }), + }); }, +}); +// Graphql query client wrapper that builds a dynamic url based on chain id +function graphqlRequestBaseQuery() { + var _this = this; + return function (_a, _b) { + var document = _a.document, variables = _a.variables; + var getState = _b.getState; + return __awaiter(_this, void 0, void 0, function () { + var chainId, subgraphUrl, error_1, name_1, message, stack, request, response; + var _c; + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]); + chainId = getState().application.chainId; + subgraphUrl = chainId ? CHAIN_SUBGRAPH_URL[chainId] : undefined; + if (!subgraphUrl) { + return [2 /*return*/, { + error: { + name: 'UnsupportedChainId', + message: "Subgraph queries against ChainId " + chainId + " are not supported.", + stack: '', + }, + }]; + } + _c = {}; + return [4 /*yield*/, new graphqlRequest.GraphQLClient(subgraphUrl).request(document, variables)]; + case 1: return [2 /*return*/, (_c.data = _d.sent(), _c.meta = {}, _c)]; + case 2: + error_1 = _d.sent(); + if (error_1 instanceof graphqlRequest.ClientError) { + name_1 = error_1.name, message = error_1.message, stack = error_1.stack, request = error_1.request, response = error_1.response; + return [2 /*return*/, { error: { name: name_1, message: message, stack: stack }, meta: { request: request, response: response } }]; + } + throw error_1; + case 3: return [2 /*return*/]; + } + }); + }); + }; +} +var templateObject_1$1c, templateObject_2$S; + +// fired once when the app reloads but before the app renders +// allows any updates to be applied to store data loaded from localStorage +var updateVersion = toolkit.createAction('global/updateVersion'); + +var fetchTokenList = { + pending: toolkit.createAction('lists/fetchTokenList/pending'), + fulfilled: toolkit.createAction('lists/fetchTokenList/fulfilled'), + rejected: toolkit.createAction('lists/fetchTokenList/rejected'), +}; +// add and remove from list options +var addList = toolkit.createAction('lists/addList'); +var removeList = toolkit.createAction('lists/removeList'); +// select which lists to search across from loaded lists +var enableList = toolkit.createAction('lists/enableList'); +var disableList = toolkit.createAction('lists/disableList'); +// versioning +var acceptListUpdate = toolkit.createAction('lists/acceptListUpdate'); + +var NEW_LIST_STATE = { + error: null, + current: null, + loadingRequestId: null, + pendingUpdate: null, +}; +var initialState$5 = { + lastInitializedDefaultListOfLists: DEFAULT_LIST_OF_LISTS, + byUrl: __assign({}, DEFAULT_LIST_OF_LISTS.reduce(function (memo, listUrl) { + memo[listUrl] = NEW_LIST_STATE; + return memo; + }, {})), + activeListUrls: DEFAULT_ACTIVE_LIST_URLS, +}; +var lists = toolkit.createReducer(initialState$5, function (builder) { + return builder + .addCase(fetchTokenList.pending, function (state, _a) { + var _b, _c, _d, _e; + var _f = _a.payload, requestId = _f.requestId, url = _f.url; + var current = (_c = (_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.current) !== null && _c !== void 0 ? _c : null; + var pendingUpdate = (_e = (_d = state.byUrl[url]) === null || _d === void 0 ? void 0 : _d.pendingUpdate) !== null && _e !== void 0 ? _e : null; + state.byUrl[url] = { + current: current, + pendingUpdate: pendingUpdate, + loadingRequestId: requestId, + error: null, + }; + }) + .addCase(fetchTokenList.fulfilled, function (state, _a) { + var _b, _c, _d; + var _e = _a.payload, requestId = _e.requestId, tokenList = _e.tokenList, url = _e.url; + var current = (_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.current; + var loadingRequestId = (_c = state.byUrl[url]) === null || _c === void 0 ? void 0 : _c.loadingRequestId; + // no-op if update does nothing + if (current) { + var upgradeType = tokenLists.getVersionUpgrade(current.version, tokenList.version); + if (upgradeType === tokenLists.VersionUpgrade.NONE) + return; + if (loadingRequestId === null || loadingRequestId === requestId) { + state.byUrl[url] = { + current: current, + pendingUpdate: tokenList, + loadingRequestId: null, + error: null, + }; + } + } + else { + // activate if on default active + if (DEFAULT_ACTIVE_LIST_URLS.includes(url)) { + (_d = state.activeListUrls) === null || _d === void 0 ? void 0 : _d.push(url); + } + state.byUrl[url] = { + current: tokenList, + pendingUpdate: null, + loadingRequestId: null, + error: null, + }; + } + }) + .addCase(fetchTokenList.rejected, function (state, _a) { + var _b; + var _c = _a.payload, url = _c.url, requestId = _c.requestId, errorMessage = _c.errorMessage; + if (((_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.loadingRequestId) !== requestId) { + // no-op since it's not the latest request + return; + } + state.byUrl[url] = { + current: state.byUrl[url].current ? state.byUrl[url].current : null, + pendingUpdate: null, + loadingRequestId: null, + error: errorMessage, + }; + }) + .addCase(addList, function (state, _a) { + var url = _a.payload; + if (!state.byUrl[url]) { + state.byUrl[url] = NEW_LIST_STATE; + } + }) + .addCase(removeList, function (state, _a) { + var url = _a.payload; + if (state.byUrl[url]) { + delete state.byUrl[url]; + } + // remove list from active urls if needed + if (state.activeListUrls && state.activeListUrls.includes(url)) { + state.activeListUrls = state.activeListUrls.filter(function (u) { return u !== url; }); + } + }) + .addCase(enableList, function (state, _a) { + var url = _a.payload; + if (!state.byUrl[url]) { + state.byUrl[url] = NEW_LIST_STATE; + } + if (state.activeListUrls && !state.activeListUrls.includes(url)) { + state.activeListUrls.push(url); + } + if (!state.activeListUrls) { + state.activeListUrls = [url]; + } + }) + .addCase(disableList, function (state, _a) { + var url = _a.payload; + if (state.activeListUrls && state.activeListUrls.includes(url)) { + state.activeListUrls = state.activeListUrls.filter(function (u) { return u !== url; }); + } + }) + .addCase(acceptListUpdate, function (state, _a) { + var _b; + var url = _a.payload; + if (!((_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.pendingUpdate)) { + throw new Error('accept list update called without pending update'); + } + state.byUrl[url] = __assign(__assign({}, state.byUrl[url]), { current: state.byUrl[url].pendingUpdate, pendingUpdate: null }); + }) + .addCase(updateVersion, function (state) { + // state loaded from localStorage, but new lists have never been initialized + if (!state.lastInitializedDefaultListOfLists) { + state.byUrl = initialState$5.byUrl; + state.activeListUrls = initialState$5.activeListUrls; + } + else if (state.lastInitializedDefaultListOfLists) { + var lastInitializedSet_1 = state.lastInitializedDefaultListOfLists.reduce(function (s, l) { return s.add(l); }, new Set()); + var newListOfListsSet_1 = DEFAULT_LIST_OF_LISTS.reduce(function (s, l) { return s.add(l); }, new Set()); + DEFAULT_LIST_OF_LISTS.forEach(function (listUrl) { + if (!lastInitializedSet_1.has(listUrl)) { + state.byUrl[listUrl] = NEW_LIST_STATE; + } + }); + state.lastInitializedDefaultListOfLists.forEach(function (listUrl) { + if (!newListOfListsSet_1.has(listUrl)) { + delete state.byUrl[listUrl]; + } + }); + } + state.lastInitializedDefaultListOfLists = DEFAULT_LIST_OF_LISTS; + // if no active lists, activate defaults + if (!state.activeListUrls) { + state.activeListUrls = DEFAULT_ACTIVE_LIST_URLS; + // for each list on default list, initialize if needed + DEFAULT_ACTIVE_LIST_URLS.map(function (listUrl) { + if (!state.byUrl[listUrl]) { + state.byUrl[listUrl] = NEW_LIST_STATE; + } + return true; + }); + } + }); +}); + +/** + * Converts a filter to the corresponding string key + * @param filter the filter to convert + */ +function filterToKey(filter) { + var _a, _b, _c, _d; + return ((_a = filter.address) !== null && _a !== void 0 ? _a : '') + ":" + ((_d = (_c = (_b = filter.topics) === null || _b === void 0 ? void 0 : _b.map(function (topic) { return (topic ? (Array.isArray(topic) ? topic.join(';') : topic) : '\0'); })) === null || _c === void 0 ? void 0 : _c.join('-')) !== null && _d !== void 0 ? _d : ''); +} +/** + * Convert a filter key to the corresponding filter + * @param key key to convert + */ +function keyToFilter(key) { + var pcs = key.split(':'); + var address = pcs[0]; + var topics = pcs[1].split('-').map(function (topic) { + if (topic === '\0') + return null; + var parts = topic.split(';'); + if (parts.length === 1) + return parts[0]; + return parts; + }); + return { + address: address.length === 0 ? undefined : address, + topics: topics, + }; +} + +var _a$8; +var slice = toolkit.createSlice({ + name: 'logs', + initialState: {}, + reducers: { + addListener: function (state, _a) { + var _b = _a.payload, chainId = _b.chainId, filter = _b.filter; + if (!state[chainId]) + state[chainId] = {}; + var key = filterToKey(filter); + if (!state[chainId][key]) + state[chainId][key] = { + listeners: 1, + }; + else + state[chainId][key].listeners++; + }, + fetchingLogs: function (state, _a) { + var e_1, _b; + var _c = _a.payload, chainId = _c.chainId, filters = _c.filters, blockNumber = _c.blockNumber; + if (!state[chainId]) + return; + try { + for (var filters_1 = __values(filters), filters_1_1 = filters_1.next(); !filters_1_1.done; filters_1_1 = filters_1.next()) { + var filter = filters_1_1.value; + var key = filterToKey(filter); + if (!state[chainId][key]) + continue; + state[chainId][key].fetchingBlockNumber = blockNumber; + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (filters_1_1 && !filters_1_1.done && (_b = filters_1.return)) _b.call(filters_1); + } + finally { if (e_1) throw e_1.error; } + } + }, + fetchedLogs: function (state, _a) { + var _b = _a.payload, chainId = _b.chainId, filter = _b.filter, results = _b.results; + if (!state[chainId]) + return; + var key = filterToKey(filter); + var fetchState = state[chainId][key]; + if (!fetchState || (fetchState.results && fetchState.results.blockNumber > results.blockNumber)) + return; + fetchState.results = results; + }, + fetchedLogsError: function (state, _a) { + var _b = _a.payload, chainId = _b.chainId, filter = _b.filter, blockNumber = _b.blockNumber; + if (!state[chainId]) + return; + var key = filterToKey(filter); + var fetchState = state[chainId][key]; + if (!fetchState || (fetchState.results && fetchState.results.blockNumber > blockNumber)) + return; + fetchState.results = { + blockNumber: blockNumber, + error: true, + }; + }, + removeListener: function (state, _a) { + var _b = _a.payload, chainId = _b.chainId, filter = _b.filter; + if (!state[chainId]) + return; + var key = filterToKey(filter); + if (!state[chainId][key]) + return; + state[chainId][key].listeners--; + }, + }, +}); +var logs = slice.reducer; +(_a$8 = slice.actions, _a$8.addListener); _a$8.removeListener; var fetchedLogs = _a$8.fetchedLogs, fetchedLogsError = _a$8.fetchedLogsError, fetchingLogs = _a$8.fetchingLogs; + +var Field$2; +(function (Field) { + Field["CURRENCY_A"] = "CURRENCY_A"; + Field["CURRENCY_B"] = "CURRENCY_B"; +})(Field$2 || (Field$2 = {})); +var typeInput$2 = toolkit.createAction('mint/typeInputMint'); +var resetMintState$1 = toolkit.createAction('mint/resetMintState'); + +var initialState$4 = { + independentField: Field$2.CURRENCY_A, + typedValue: '', + otherTypedValue: '', + startPriceTypedValue: '', + leftRangeTypedValue: '', + rightRangeTypedValue: '', +}; +var mint = toolkit.createReducer(initialState$4, function (builder) { + return builder + .addCase(resetMintState$1, function () { return initialState$4; }) + .addCase(typeInput$2, function (state, _a) { + var _b = _a.payload, field = _b.field, typedValue = _b.typedValue, noLiquidity = _b.noLiquidity; + if (noLiquidity) { + // they're typing into the field they've last typed in + if (field === state.independentField) { + return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); + } + // they're typing into a new field, store the other value + else { + return __assign(__assign({}, state), { independentField: field, typedValue: typedValue, otherTypedValue: state.typedValue }); + } + } + else { + return __assign(__assign({}, state), { independentField: field, typedValue: typedValue, otherTypedValue: '' }); + } + }); +}); + +var Field$1; +(function (Field) { + Field["CURRENCY_A"] = "CURRENCY_A"; + Field["CURRENCY_B"] = "CURRENCY_B"; +})(Field$1 || (Field$1 = {})); +var Bound; +(function (Bound) { + Bound["LOWER"] = "LOWER"; + Bound["UPPER"] = "UPPER"; +})(Bound || (Bound = {})); +var typeInput$1 = toolkit.createAction('mintV3/typeInputMint'); +var typeStartPriceInput = toolkit.createAction('mintV3/typeStartPriceInput'); +var typeLeftRangeInput = toolkit.createAction('mintV3/typeLeftRangeInput'); +var typeRightRangeInput = toolkit.createAction('mintV3/typeRightRangeInput'); +var resetMintState = toolkit.createAction('mintV3/resetMintState'); +var setFullRange = toolkit.createAction('mintV3/setFullRange'); + +var initialState$3 = { + independentField: Field$1.CURRENCY_A, + typedValue: '', + startPriceTypedValue: '', + leftRangeTypedValue: '', + rightRangeTypedValue: '', +}; +var mintV3 = toolkit.createReducer(initialState$3, function (builder) { + return builder + .addCase(resetMintState, function () { return initialState$3; }) + .addCase(setFullRange, function (state) { + return __assign(__assign({}, state), { leftRangeTypedValue: true, rightRangeTypedValue: true }); + }) + .addCase(typeStartPriceInput, function (state, _a) { + var typedValue = _a.payload.typedValue; + return __assign(__assign({}, state), { startPriceTypedValue: typedValue }); + }) + .addCase(typeLeftRangeInput, function (state, _a) { + var typedValue = _a.payload.typedValue; + return __assign(__assign({}, state), { leftRangeTypedValue: typedValue }); + }) + .addCase(typeRightRangeInput, function (state, _a) { + var typedValue = _a.payload.typedValue; + return __assign(__assign({}, state), { rightRangeTypedValue: typedValue }); + }) + .addCase(typeInput$1, function (state, _a) { + var _b = _a.payload, field = _b.field, typedValue = _b.typedValue, noLiquidity = _b.noLiquidity; + if (noLiquidity) { + // they're typing into the field they've last typed in + if (field === state.independentField) { + return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); + } + // they're typing into a new field, store the other value + else { + return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); + } + } + else { + return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); + } + }); +}); + +var protocols = [routerSdk.Protocol.V2, routerSdk.Protocol.V3]; +var DEFAULT_QUERY_PARAMS = { + protocols: protocols.map(function (p) { return p.toLowerCase(); }).join(','), + // example other params + // forceCrossProtocol: 'true', + // minSplits: '5', +}; +function getClientSideQuote(_a) { + var tokenInAddress = _a.tokenInAddress, tokenInChainId = _a.tokenInChainId, tokenInDecimals = _a.tokenInDecimals, tokenInSymbol = _a.tokenInSymbol, tokenOutAddress = _a.tokenOutAddress, tokenOutChainId = _a.tokenOutChainId, tokenOutDecimals = _a.tokenOutDecimals, tokenOutSymbol = _a.tokenOutSymbol, amount = _a.amount, type = _a.type; + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_b) { + switch (_b.label) { + case 0: return [4 /*yield*/, Promise.resolve().then(function () { return index; })]; + case 1: return [2 /*return*/, (_b.sent()).getQuote({ + type: type, + chainId: tokenInChainId, + tokenIn: { + address: tokenInAddress, + chainId: tokenInChainId, + decimals: tokenInDecimals, + symbol: tokenInSymbol, + }, + tokenOut: { + address: tokenOutAddress, + chainId: tokenOutChainId, + decimals: tokenOutDecimals, + symbol: tokenOutSymbol, + }, + amount: amount, + }, { protocols: protocols })]; + } + }); + }); +} +var routingApi = react.createApi({ + reducerPath: 'routingApi', + baseQuery: react.fetchBaseQuery({ + baseUrl: 'https://api.uniswap.org/v1/', + }), endpoints: function (build) { return ({ - allV3Ticks: build.query({ - query: function (variables) { return ({ document: AllV3TicksDocument, variables: variables }); } - }), - feeTierDistribution: build.query({ - query: function (variables) { return ({ document: FeeTierDistributionDocument, variables: variables }); } + getQuote: build.query({ + queryFn: function (args, _api, _extraOptions, fetch) { + return __awaiter(this, void 0, void 0, function () { + var tokenInAddress, tokenInChainId, tokenOutAddress, tokenOutChainId, amount, useClientSideRouter, type, result, query, e_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + tokenInAddress = args.tokenInAddress, tokenInChainId = args.tokenInChainId, tokenOutAddress = args.tokenOutAddress, tokenOutChainId = args.tokenOutChainId, amount = args.amount, useClientSideRouter = args.useClientSideRouter, type = args.type; + _a.label = 1; + case 1: + _a.trys.push([1, 6, , 7]); + if (!useClientSideRouter) return [3 /*break*/, 3]; + return [4 /*yield*/, getClientSideQuote(args)]; + case 2: + result = _a.sent(); + return [3 /*break*/, 5]; + case 3: + query = qs__default["default"].stringify(__assign(__assign({}, DEFAULT_QUERY_PARAMS), { tokenInAddress: tokenInAddress, tokenInChainId: tokenInChainId, tokenOutAddress: tokenOutAddress, tokenOutChainId: tokenOutChainId, amount: amount, type: type })); + return [4 /*yield*/, fetch("quote?" + query)]; + case 4: + result = _a.sent(); + _a.label = 5; + case 5: return [2 /*return*/, { data: result.data }]; + case 6: + e_1 = _a.sent(); + // TODO: fall back to client-side quoter when auto router fails. + // deprecate 'legacy' v2/v3 routers first. + return [2 /*return*/, { error: e_1 }]; + case 7: return [2 /*return*/]; + } + }); + }); + }, + keepUnusedDataFor: ms__default["default"](templateObject_1$1b || (templateObject_1$1b = __makeTemplateObject(["10s"], ["10s"]))), + extraOptions: { + maxRetries: 0, + }, }), }); }, }); -injectedRtkApi.useAllV3TicksQuery; injectedRtkApi.useLazyAllV3TicksQuery; injectedRtkApi.useFeeTierDistributionQuery; injectedRtkApi.useLazyFeeTierDistributionQuery; - -// tag that should be applied to queries that need to be invalidated when the chain changes -var CHAIN_TAG = 'Chain'; -// enhanced api to provide/invalidate tags -var api = injectedRtkApi.enhanceEndpoints({ - addTagTypes: [CHAIN_TAG], - endpoints: { - allV3Ticks: { - providesTags: [CHAIN_TAG], - }, - feeTierDistribution: { - providesTags: [CHAIN_TAG], - }, - }, +var useGetQuoteQuery = routingApi.useGetQuoteQuery; +var templateObject_1$1b; + +var Field; +(function (Field) { + Field["INPUT"] = "INPUT"; + Field["OUTPUT"] = "OUTPUT"; +})(Field || (Field = {})); +var selectCurrency = toolkit.createAction('swap/selectCurrency'); +var switchCurrencies = toolkit.createAction('swap/switchCurrencies'); +var typeInput = toolkit.createAction('swap/typeInput'); +var replaceSwapState = toolkit.createAction('swap/replaceSwapState'); +var setRecipient = toolkit.createAction('swap/setRecipient'); + +var CHAIN_DATA_ABI = [ + { + inputs: [], + name: 'latestAnswer', + outputs: [{ internalType: 'int256', name: '', type: 'int256' }], + stateMutability: 'view', + type: 'function', + }, +]; +/** + * Returns the price of 1 gas in WEI for the currently selected network using the chainlink fast gas price oracle + */ +function useGasPrice() { + var _a, _b; + var address = useENSAddress('fast-gas-gwei.data.eth').address; + var contract = useContract(address !== null && address !== void 0 ? address : undefined, CHAIN_DATA_ABI, false); + var resultStr = (_b = (_a = useSingleCallResult(contract, 'latestAnswer').result) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.toString(); + return typeof resultStr === 'string' ? JSBI__default["default"].BigInt(resultStr) : undefined; +} + +/** + * Parses a CurrencyAmount from the passed string. + * Returns the CurrencyAmount, or undefined if parsing fails. + */ +function tryParseCurrencyAmount(value, currency) { + if (!value || !currency) { + return undefined; + } + try { + var typedValueParsed = units.parseUnits(value, currency.decimals).toString(); + if (typedValueParsed !== '0') { + return sdkCore.CurrencyAmount.fromRawAmount(currency, JSBI__default["default"].BigInt(typedValueParsed)); + } + } + catch (error) { + // fails if the user specifies too many decimal places of precision (or maybe exceed max uint?) + console.debug("Failed to parse input amount: \"" + value + "\"", error); + } + return undefined; +} + +// returns whether tradeB is better than tradeA by at least a threshold percentage amount +// only used by v2 hooks +function isTradeBetter(tradeA, tradeB, minimumDelta) { + if (minimumDelta === void 0) { minimumDelta = ZERO_PERCENT; } + if (tradeA && !tradeB) + return false; + if (tradeB && !tradeA) + return true; + if (!tradeA || !tradeB) + return undefined; + if (tradeA.tradeType !== tradeB.tradeType || + !tradeA.inputAmount.currency.equals(tradeB.inputAmount.currency) || + !tradeA.outputAmount.currency.equals(tradeB.outputAmount.currency)) { + throw new Error('Comparing incomparable trades'); + } + if (minimumDelta.equalTo(ZERO_PERCENT)) { + return tradeA.executionPrice.lessThan(tradeB.executionPrice); + } + else { + return tradeA.executionPrice.asFraction + .multiply(minimumDelta.add(ONE_HUNDRED_PERCENT)) + .lessThan(tradeB.executionPrice); + } +} + +function useAllCurrencyCombinations(currencyA, currencyB) { + var chainId = currencyA === null || currencyA === void 0 ? void 0 : currencyA.chainId; + var _a = __read(chainId ? [currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped, currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped] : [undefined, undefined], 2), tokenA = _a[0], tokenB = _a[1]; + var bases = React.useMemo(function () { + var _a, _b, _c, _d, _e; + if (!chainId || chainId !== (tokenB === null || tokenB === void 0 ? void 0 : tokenB.chainId)) + return []; + var common = (_a = BASES_TO_CHECK_TRADES_AGAINST[chainId]) !== null && _a !== void 0 ? _a : []; + var additionalA = tokenA ? (_c = (_b = ADDITIONAL_BASES[chainId]) === null || _b === void 0 ? void 0 : _b[tokenA.address]) !== null && _c !== void 0 ? _c : [] : []; + var additionalB = tokenB ? (_e = (_d = ADDITIONAL_BASES[chainId]) === null || _d === void 0 ? void 0 : _d[tokenB.address]) !== null && _e !== void 0 ? _e : [] : []; + return __spreadArray(__spreadArray(__spreadArray([], __read(common), false), __read(additionalA), false), __read(additionalB), false); + }, [chainId, tokenA, tokenB]); + var basePairs = React.useMemo(function () { + return bases + .flatMap(function (base) { return bases.map(function (otherBase) { return [base, otherBase]; }); }) + // though redundant with the first filter below, that expression runs more often, so this is probably worthwhile + .filter(function (_a) { + var _b = __read(_a, 2), t0 = _b[0], t1 = _b[1]; + return !t0.equals(t1); + }); + }, [bases]); + return React.useMemo(function () { + return tokenA && tokenB + ? __spreadArray(__spreadArray(__spreadArray([ + // the direct pair + [tokenA, tokenB] + ], __read(bases.map(function (base) { return [tokenA, base]; })), false), __read(bases.map(function (base) { return [tokenB, base]; })), false), __read(basePairs), false).filter(function (_a) { + var _b = __read(_a, 2), t0 = _b[0], t1 = _b[1]; + return !t0.equals(t1); + }) + // filter out duplicate pairs + .filter(function (_a, i, otherPairs) { + var _b = __read(_a, 2), t0 = _b[0], t1 = _b[1]; + // find the first index in the array at which there are the same 2 tokens as the current + var firstIndexInOtherPairs = otherPairs.findIndex(function (_a) { + var _b = __read(_a, 2), t0Other = _b[0], t1Other = _b[1]; + return (t0.equals(t0Other) && t1.equals(t1Other)) || (t0.equals(t1Other) && t1.equals(t0Other)); + }); + // only accept the first occurrence of the same 2 tokens + return firstIndexInOtherPairs === i; + }) + // optionally filter out some pairs for tokens with custom bases defined + .filter(function (_a) { + var _b = __read(_a, 2), tokenA = _b[0], tokenB = _b[1]; + if (!chainId) + return true; + var customBases = CUSTOM_BASES[chainId]; + var customBasesA = customBases === null || customBases === void 0 ? void 0 : customBases[tokenA.address]; + var customBasesB = customBases === null || customBases === void 0 ? void 0 : customBases[tokenB.address]; + if (!customBasesA && !customBasesB) + return true; + if (customBasesA && !customBasesA.find(function (base) { return tokenB.equals(base); })) + return false; + if (customBasesB && !customBasesB.find(function (base) { return tokenA.equals(base); })) + return false; + return true; + }) + : []; + }, [tokenA, tokenB, bases, basePairs, chainId]); +} + +var PAIR_INTERFACE = new abi$7.Interface(abi$4); +var PairState; +(function (PairState) { + PairState[PairState["LOADING"] = 0] = "LOADING"; + PairState[PairState["NOT_EXISTS"] = 1] = "NOT_EXISTS"; + PairState[PairState["EXISTS"] = 2] = "EXISTS"; + PairState[PairState["INVALID"] = 3] = "INVALID"; +})(PairState || (PairState = {})); +function useV2Pairs(currencies) { + var tokens = React.useMemo(function () { return currencies.map(function (_a) { + var _b = __read(_a, 2), currencyA = _b[0], currencyB = _b[1]; + return [currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped, currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped]; + }); }, [currencies]); + var pairAddresses = React.useMemo(function () { + return tokens.map(function (_a) { + var _b = __read(_a, 2), tokenA = _b[0], tokenB = _b[1]; + return tokenA && + tokenB && + tokenA.chainId === tokenB.chainId && + !tokenA.equals(tokenB) && + V2_FACTORY_ADDRESSES[tokenA.chainId] + ? v2Sdk.computePairAddress({ factoryAddress: V2_FACTORY_ADDRESSES[tokenA.chainId], tokenA: tokenA, tokenB: tokenB }) + : undefined; + }); + }, [tokens]); + var results = useMultipleContractSingleData(pairAddresses, PAIR_INTERFACE, 'getReserves'); + return React.useMemo(function () { + return results.map(function (result, i) { + var reserves = result.result, loading = result.loading; + var tokenA = tokens[i][0]; + var tokenB = tokens[i][1]; + if (loading) + return [PairState.LOADING, null]; + if (!tokenA || !tokenB || tokenA.equals(tokenB)) + return [PairState.INVALID, null]; + if (!reserves) + return [PairState.NOT_EXISTS, null]; + var reserve0 = reserves.reserve0, reserve1 = reserves.reserve1; + var _a = __read(tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA], 2), token0 = _a[0], token1 = _a[1]; + return [ + PairState.EXISTS, + new v2Sdk.Pair(sdkCore.CurrencyAmount.fromRawAmount(token0, reserve0.toString()), sdkCore.CurrencyAmount.fromRawAmount(token1, reserve1.toString())), + ]; + }); + }, [results, tokens]); +} + +function useAllCommonPairs(currencyA, currencyB) { + var allCurrencyCombinations = useAllCurrencyCombinations(currencyA, currencyB); + var allPairs = useV2Pairs(allCurrencyCombinations); + return React.useMemo(function () { + return Object.values(allPairs + // filter out invalid pairs + .filter(function (result) { return Boolean(result[0] === PairState.EXISTS && result[1]); }) + .map(function (_a) { + var _b = __read(_a, 2), pair = _b[1]; + return pair; + })); + }, [allPairs]); +} +var MAX_HOPS = 3; +/** + * Returns the best v2 trade for a desired swap + * @param tradeType whether the swap is an exact in/out + * @param amountSpecified the exact amount to swap in/out + * @param otherCurrency the desired output/payment currency + */ +function useBestV2Trade(tradeType, amountSpecified, otherCurrency, _a) { + var _b = _a === void 0 ? {} : _a, _c = _b.maxHops, maxHops = _c === void 0 ? MAX_HOPS : _c; + var _d = __read(React.useMemo(function () { + return tradeType === sdkCore.TradeType.EXACT_INPUT + ? [amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, otherCurrency] + : [otherCurrency, amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency]; + }, [tradeType, amountSpecified, otherCurrency]), 2), currencyIn = _d[0], currencyOut = _d[1]; + var allowedPairs = useAllCommonPairs(currencyIn, currencyOut); + return React.useMemo(function () { + var _a, _b, _c, _d; + if (amountSpecified && currencyIn && currencyOut && allowedPairs.length > 0) { + if (maxHops === 1) { + var options = { maxHops: 1, maxNumResults: 1 }; + if (tradeType === sdkCore.TradeType.EXACT_INPUT) { + var amountIn = amountSpecified; + return (_a = v2Sdk.Trade.bestTradeExactIn(allowedPairs, amountIn, currencyOut, options)[0]) !== null && _a !== void 0 ? _a : null; + } + else { + var amountOut = amountSpecified; + return (_b = v2Sdk.Trade.bestTradeExactOut(allowedPairs, currencyIn, amountOut, options)[0]) !== null && _b !== void 0 ? _b : null; + } + } + // search through trades with varying hops, find best trade out of them + var bestTradeSoFar = null; + for (var i = 1; i <= maxHops; i++) { + var options = { maxHops: i, maxNumResults: 1 }; + var currentTrade = void 0; + if (tradeType === sdkCore.TradeType.EXACT_INPUT) { + var amountIn = amountSpecified; + currentTrade = (_c = v2Sdk.Trade.bestTradeExactIn(allowedPairs, amountIn, currencyOut, options)[0]) !== null && _c !== void 0 ? _c : null; + } + else { + var amountOut = amountSpecified; + currentTrade = (_d = v2Sdk.Trade.bestTradeExactOut(allowedPairs, currencyIn, amountOut, options)[0]) !== null && _d !== void 0 ? _d : null; + } + // if current trade is best yet, save it + if (isTradeBetter(bestTradeSoFar, currentTrade, BETTER_TRADE_LESS_HOPS_THRESHOLD)) { + bestTradeSoFar = currentTrade; + } + } + return bestTradeSoFar; + } + return null; + }, [tradeType, amountSpecified, currencyIn, currencyOut, allowedPairs, maxHops]); +} + +var TradeState; +(function (TradeState) { + TradeState[TradeState["LOADING"] = 0] = "LOADING"; + TradeState[TradeState["INVALID"] = 1] = "INVALID"; + TradeState[TradeState["NO_ROUTE_FOUND"] = 2] = "NO_ROUTE_FOUND"; + TradeState[TradeState["VALID"] = 3] = "VALID"; + TradeState[TradeState["SYNCING"] = 4] = "SYNCING"; +})(TradeState || (TradeState = {})); +var InterfaceTrade = /** @class */ (function (_super) { + __extends(InterfaceTrade, _super); + function InterfaceTrade(_a) { + var gasUseEstimateUSD = _a.gasUseEstimateUSD, routes = __rest(_a, ["gasUseEstimateUSD"]); + var _this = _super.call(this, routes) || this; + _this.gasUseEstimateUSD = gasUseEstimateUSD; + return _this; + } + return InterfaceTrade; +}(routerSdk.Trade)); + +var abi = [ + { + inputs: [ + ], + name: "feeGrowthGlobal0X128", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + ], + name: "feeGrowthGlobal1X128", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + ], + name: "liquidity", + outputs: [ + { + internalType: "uint128", + name: "", + type: "uint128" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "index", + type: "uint256" + } + ], + name: "observations", + outputs: [ + { + internalType: "uint32", + name: "blockTimestamp", + type: "uint32" + }, + { + internalType: "int56", + name: "tickCumulative", + type: "int56" + }, + { + internalType: "uint160", + name: "secondsPerLiquidityCumulativeX128", + type: "uint160" + }, + { + internalType: "bool", + name: "initialized", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "key", + type: "bytes32" + } + ], + name: "positions", + outputs: [ + { + internalType: "uint128", + name: "_liquidity", + type: "uint128" + }, + { + internalType: "uint256", + name: "feeGrowthInside0LastX128", + type: "uint256" + }, + { + internalType: "uint256", + name: "feeGrowthInside1LastX128", + type: "uint256" + }, + { + internalType: "uint128", + name: "tokensOwed0", + type: "uint128" + }, + { + internalType: "uint128", + name: "tokensOwed1", + type: "uint128" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + ], + name: "protocolFees", + outputs: [ + { + internalType: "uint128", + name: "token0", + type: "uint128" + }, + { + internalType: "uint128", + name: "token1", + type: "uint128" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + ], + name: "slot0", + outputs: [ + { + internalType: "uint160", + name: "sqrtPriceX96", + type: "uint160" + }, + { + internalType: "int24", + name: "tick", + type: "int24" + }, + { + internalType: "uint16", + name: "observationIndex", + type: "uint16" + }, + { + internalType: "uint16", + name: "observationCardinality", + type: "uint16" + }, + { + internalType: "uint16", + name: "observationCardinalityNext", + type: "uint16" + }, + { + internalType: "uint8", + name: "feeProtocol", + type: "uint8" + }, + { + internalType: "bool", + name: "unlocked", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "int16", + name: "wordPosition", + type: "int16" + } + ], + name: "tickBitmap", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "int24", + name: "tick", + type: "int24" + } + ], + name: "ticks", + outputs: [ + { + internalType: "uint128", + name: "liquidityGross", + type: "uint128" + }, + { + internalType: "int128", + name: "liquidityNet", + type: "int128" + }, + { + internalType: "uint256", + name: "feeGrowthOutside0X128", + type: "uint256" + }, + { + internalType: "uint256", + name: "feeGrowthOutside1X128", + type: "uint256" + }, + { + internalType: "int56", + name: "tickCumulativeOutside", + type: "int56" + }, + { + internalType: "uint160", + name: "secondsPerLiquidityOutsideX128", + type: "uint160" + }, + { + internalType: "uint32", + name: "secondsOutside", + type: "uint32" + }, + { + internalType: "bool", + name: "initialized", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + } +]; + +var POOL_STATE_INTERFACE = new abi$7.Interface(abi); +var PoolState; +(function (PoolState) { + PoolState[PoolState["LOADING"] = 0] = "LOADING"; + PoolState[PoolState["NOT_EXISTS"] = 1] = "NOT_EXISTS"; + PoolState[PoolState["EXISTS"] = 2] = "EXISTS"; + PoolState[PoolState["INVALID"] = 3] = "INVALID"; +})(PoolState || (PoolState = {})); +function usePools(poolKeys) { + var chainId = useActiveWeb3React().chainId; + var transformed = React.useMemo(function () { + return poolKeys.map(function (_a) { + var _b = __read(_a, 3), currencyA = _b[0], currencyB = _b[1], feeAmount = _b[2]; + if (!chainId || !currencyA || !currencyB || !feeAmount) + return null; + var tokenA = currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped; + var tokenB = currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped; + if (!tokenA || !tokenB || tokenA.equals(tokenB)) + return null; + var _c = __read(tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA], 2), token0 = _c[0], token1 = _c[1]; + return [token0, token1, feeAmount]; + }); + }, [chainId, poolKeys]); + var poolAddresses = React.useMemo(function () { + var v3CoreFactoryAddress = chainId && V3_CORE_FACTORY_ADDRESSES[chainId]; + return transformed.map(function (value) { + if (!v3CoreFactoryAddress || !value) + return undefined; + return v3Sdk.computePoolAddress({ + factoryAddress: v3CoreFactoryAddress, + tokenA: value[0], + tokenB: value[1], + fee: value[2], + }); + }); + }, [chainId, transformed]); + var slot0s = useMultipleContractSingleData(poolAddresses, POOL_STATE_INTERFACE, 'slot0'); + var liquidities = useMultipleContractSingleData(poolAddresses, POOL_STATE_INTERFACE, 'liquidity'); + return React.useMemo(function () { + return poolKeys.map(function (_key, index) { + var _a; + var _b = __read((_a = transformed[index]) !== null && _a !== void 0 ? _a : [], 3), token0 = _b[0], token1 = _b[1], fee = _b[2]; + if (!token0 || !token1 || !fee) + return [PoolState.INVALID, null]; + var _c = slot0s[index], slot0 = _c.result, slot0Loading = _c.loading, slot0Valid = _c.valid; + var _d = liquidities[index], liquidity = _d.result, liquidityLoading = _d.loading, liquidityValid = _d.valid; + if (!slot0Valid || !liquidityValid) + return [PoolState.INVALID, null]; + if (slot0Loading || liquidityLoading) + return [PoolState.LOADING, null]; + if (!slot0 || !liquidity) + return [PoolState.NOT_EXISTS, null]; + if (!slot0.sqrtPriceX96 || slot0.sqrtPriceX96.eq(0)) + return [PoolState.NOT_EXISTS, null]; + try { + return [PoolState.EXISTS, new v3Sdk.Pool(token0, token1, fee, slot0.sqrtPriceX96, liquidity[0], slot0.tick)]; + } + catch (error) { + console.error('Error when constructing the pool', error); + return [PoolState.NOT_EXISTS, null]; + } + }); + }, [liquidities, poolKeys, slot0s, transformed]); +} + +/** + * Returns all the existing pools that should be considered for swapping between an input currency and an output currency + * @param currencyIn the input currency + * @param currencyOut the output currency + */ +function useV3SwapPools(currencyIn, currencyOut) { + var chainId = useActiveWeb3React().chainId; + var allCurrencyCombinations = useAllCurrencyCombinations(currencyIn, currencyOut); + var allCurrencyCombinationsWithAllFees = React.useMemo(function () { + return allCurrencyCombinations.reduce(function (list, _a) { + var _b = __read(_a, 2), tokenA = _b[0], tokenB = _b[1]; + return chainId === SupportedChainId.MAINNET + ? list.concat([ + [tokenA, tokenB, v3Sdk.FeeAmount.LOW], + [tokenA, tokenB, v3Sdk.FeeAmount.MEDIUM], + [tokenA, tokenB, v3Sdk.FeeAmount.HIGH], + ]) + : list.concat([ + [tokenA, tokenB, v3Sdk.FeeAmount.LOWEST], + [tokenA, tokenB, v3Sdk.FeeAmount.LOW], + [tokenA, tokenB, v3Sdk.FeeAmount.MEDIUM], + [tokenA, tokenB, v3Sdk.FeeAmount.HIGH], + ]); + }, []); + }, [allCurrencyCombinations, chainId]); + var pools = usePools(allCurrencyCombinationsWithAllFees); + return React.useMemo(function () { + return { + pools: pools + .filter(function (tuple) { + return tuple[0] === PoolState.EXISTS && tuple[1] !== null; + }) + .map(function (_a) { + var _b = __read(_a, 2), pool = _b[1]; + return pool; + }), + loading: pools.some(function (_a) { + var _b = __read(_a, 1), state = _b[0]; + return state === PoolState.LOADING; + }), + }; + }, [pools]); +} + +/** + * Returns true if poolA is equivalent to poolB + * @param poolA one of the two pools + * @param poolB the other pool + */ +function poolEquals(poolA, poolB) { + return (poolA === poolB || + (poolA.token0.equals(poolB.token0) && poolA.token1.equals(poolB.token1) && poolA.fee === poolB.fee)); +} +function computeAllRoutes(currencyIn, currencyOut, pools, chainId, currentPath, allPaths, startCurrencyIn, maxHops) { + var e_1, _a; + if (currentPath === void 0) { currentPath = []; } + if (allPaths === void 0) { allPaths = []; } + if (startCurrencyIn === void 0) { startCurrencyIn = currencyIn; } + if (maxHops === void 0) { maxHops = 2; } + var tokenIn = currencyIn === null || currencyIn === void 0 ? void 0 : currencyIn.wrapped; + var tokenOut = currencyOut === null || currencyOut === void 0 ? void 0 : currencyOut.wrapped; + if (!tokenIn || !tokenOut) + throw new Error('Missing tokenIn/tokenOut'); + var _loop_1 = function (pool) { + if (!pool.involvesToken(tokenIn) || currentPath.find(function (pathPool) { return poolEquals(pool, pathPool); })) + return "continue"; + var outputToken = pool.token0.equals(tokenIn) ? pool.token1 : pool.token0; + if (outputToken.equals(tokenOut)) { + allPaths.push(new v3Sdk.Route(__spreadArray(__spreadArray([], __read(currentPath), false), [pool], false), startCurrencyIn, currencyOut)); + } + else if (maxHops > 1) { + computeAllRoutes(outputToken, currencyOut, pools, chainId, __spreadArray(__spreadArray([], __read(currentPath), false), [pool], false), allPaths, startCurrencyIn, maxHops - 1); + } + }; + try { + for (var pools_1 = __values(pools), pools_1_1 = pools_1.next(); !pools_1_1.done; pools_1_1 = pools_1.next()) { + var pool = pools_1_1.value; + _loop_1(pool); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (pools_1_1 && !pools_1_1.done && (_a = pools_1.return)) _a.call(pools_1); + } + finally { if (e_1) throw e_1.error; } + } + return allPaths; +} +/** + * Returns all the routes from an input currency to an output currency + * @param currencyIn the input currency + * @param currencyOut the output currency + */ +function useAllV3Routes(currencyIn, currencyOut) { + var chainId = useActiveWeb3React().chainId; + var _a = useV3SwapPools(currencyIn, currencyOut), pools = _a.pools, poolsLoading = _a.loading; + return React.useMemo(function () { + if (poolsLoading || !chainId || !pools || !currencyIn || !currencyOut) + return { loading: true, routes: [] }; + var routes = computeAllRoutes(currencyIn, currencyOut, pools, chainId, [], [], currencyIn, 2); + return { loading: false, routes: routes }; + }, [chainId, currencyIn, currencyOut, pools, poolsLoading]); +} + +var _a$7; +var QUOTE_GAS_OVERRIDES = (_a$7 = {}, + _a$7[SupportedChainId.ARBITRUM_ONE] = 25000000, + _a$7[SupportedChainId.ARBITRUM_RINKEBY] = 25000000, + _a$7); +var DEFAULT_GAS_QUOTE = 2000000; +/** + * Returns the best v3 trade for a desired swap + * @param tradeType whether the swap is an exact in/out + * @param amountSpecified the exact amount to swap in/out + * @param otherCurrency the desired output/payment currency + */ +function useClientSideV3Trade(tradeType, amountSpecified, otherCurrency) { + var _a; + var _b = __read(React.useMemo(function () { + return tradeType === sdkCore.TradeType.EXACT_INPUT + ? [amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, otherCurrency] + : [otherCurrency, amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency]; + }, [tradeType, amountSpecified, otherCurrency]), 2), currencyIn = _b[0], currencyOut = _b[1]; + var _c = useAllV3Routes(currencyIn, currencyOut), routes = _c.routes, routesLoading = _c.loading; + var quoter = useV3Quoter(); + var chainId = useActiveWeb3React().chainId; + var quotesResults = useSingleContractWithCallData(quoter, amountSpecified + ? routes.map(function (route) { return v3Sdk.SwapQuoter.quoteCallParameters(route, amountSpecified, tradeType).calldata; }) + : [], { + gasRequired: chainId ? (_a = QUOTE_GAS_OVERRIDES[chainId]) !== null && _a !== void 0 ? _a : DEFAULT_GAS_QUOTE : undefined, + }); + return React.useMemo(function () { + if (!amountSpecified || + !currencyIn || + !currencyOut || + quotesResults.some(function (_a) { + var valid = _a.valid; + return !valid; + }) || + // skip when tokens are the same + (tradeType === sdkCore.TradeType.EXACT_INPUT + ? amountSpecified.currency.equals(currencyOut) + : amountSpecified.currency.equals(currencyIn))) { + return { + state: TradeState.INVALID, + trade: undefined, + }; + } + if (routesLoading || quotesResults.some(function (_a) { + var loading = _a.loading; + return loading; + })) { + return { + state: TradeState.LOADING, + trade: undefined, + }; + } + var _a = quotesResults.reduce(function (currentBest, _a, i) { + var result = _a.result; + if (!result) + return currentBest; + // overwrite the current best if it's not defined or if this route is better + if (tradeType === sdkCore.TradeType.EXACT_INPUT) { + var amountOut_1 = sdkCore.CurrencyAmount.fromRawAmount(currencyOut, result.amountOut.toString()); + if (currentBest.amountOut === null || JSBI__default["default"].lessThan(currentBest.amountOut.quotient, amountOut_1.quotient)) { + return { + bestRoute: routes[i], + amountIn: amountSpecified, + amountOut: amountOut_1, + }; + } + } + else { + var amountIn_1 = sdkCore.CurrencyAmount.fromRawAmount(currencyIn, result.amountIn.toString()); + if (currentBest.amountIn === null || JSBI__default["default"].greaterThan(currentBest.amountIn.quotient, amountIn_1.quotient)) { + return { + bestRoute: routes[i], + amountIn: amountIn_1, + amountOut: amountSpecified, + }; + } + } + return currentBest; + }, { + bestRoute: null, + amountIn: null, + amountOut: null, + }), bestRoute = _a.bestRoute, amountIn = _a.amountIn, amountOut = _a.amountOut; + if (!bestRoute || !amountIn || !amountOut) { + return { + state: TradeState.NO_ROUTE_FOUND, + trade: undefined, + }; + } + return { + state: TradeState.VALID, + trade: new InterfaceTrade({ + v2Routes: [], + v3Routes: [ + { + routev3: bestRoute, + inputAmount: amountIn, + outputAmount: amountOut, + }, + ], + tradeType: tradeType, + }), + }; + }, [amountSpecified, currencyIn, currencyOut, quotesResults, routes, routesLoading, tradeType]); +} + +var _a$6; +// Stablecoin amounts used when calculating spot price for a given currency. +// The amount is large enough to filter low liquidity pairs. +var STABLECOIN_AMOUNT_OUT = (_a$6 = {}, + _a$6[SupportedChainId.MAINNET] = sdkCore.CurrencyAmount.fromRawAmount(USDC, 100000000000), + _a$6[SupportedChainId.ARBITRUM_ONE] = sdkCore.CurrencyAmount.fromRawAmount(USDC_ARBITRUM, 10000000000), + _a$6[SupportedChainId.OPTIMISM] = sdkCore.CurrencyAmount.fromRawAmount(DAI_OPTIMISM, 1e+22), + _a$6[SupportedChainId.POLYGON] = sdkCore.CurrencyAmount.fromRawAmount(USDC_POLYGON, 10000000000), + _a$6); +/** + * Returns the price in USDC of the input currency + * @param currency currency to compute the USDC price of + */ +function useUSDCPrice(currency) { + var chainId = currency === null || currency === void 0 ? void 0 : currency.chainId; + var amountOut = chainId ? STABLECOIN_AMOUNT_OUT[chainId] : undefined; + var stablecoin = amountOut === null || amountOut === void 0 ? void 0 : amountOut.currency; + // TODO(#2808): remove dependency on useBestV2Trade + var v2USDCTrade = useBestV2Trade(sdkCore.TradeType.EXACT_OUTPUT, amountOut, currency, { + maxHops: 2, + }); + var v3USDCTrade = useClientSideV3Trade(sdkCore.TradeType.EXACT_OUTPUT, amountOut, currency); + return React.useMemo(function () { + if (!currency || !stablecoin) { + return undefined; + } + // handle usdc + if (currency === null || currency === void 0 ? void 0 : currency.wrapped.equals(stablecoin)) { + return new sdkCore.Price(stablecoin, stablecoin, '1', '1'); + } + // use v2 price if available, v3 as fallback + if (v2USDCTrade) { + var _a = v2USDCTrade.route.midPrice, numerator = _a.numerator, denominator = _a.denominator; + return new sdkCore.Price(currency, stablecoin, denominator, numerator); + } + else if (v3USDCTrade.trade) { + var _b = v3USDCTrade.trade.routes[0].midPrice, numerator = _b.numerator, denominator = _b.denominator; + return new sdkCore.Price(currency, stablecoin, denominator, numerator); + } + return undefined; + }, [currency, stablecoin, v2USDCTrade, v3USDCTrade.trade]); +} +function useUSDCValue(currencyAmount) { + var price = useUSDCPrice(currencyAmount === null || currencyAmount === void 0 ? void 0 : currencyAmount.currency); + return React.useMemo(function () { + if (!price || !currencyAmount) + return null; + try { + return price.quote(currencyAmount); + } + catch (error) { + return null; + } + }, [currencyAmount, price]); +} +/** + * + * @param fiatValue string representation of a USD amount + * @returns CurrencyAmount where currency is stablecoin on active chain + */ +function useStablecoinAmountFromFiatValue(fiatValue) { + var _a; + var chainId = useActiveWeb3React().chainId; + var stablecoin = chainId ? (_a = STABLECOIN_AMOUNT_OUT[chainId]) === null || _a === void 0 ? void 0 : _a.currency : undefined; + if (fiatValue === null || fiatValue === undefined || !chainId || !stablecoin) { + return undefined; + } + // trim for decimal precision when parsing + var parsedForDecimals = parseFloat(fiatValue).toFixed(stablecoin.decimals).toString(); + try { + // parse USD string into CurrencyAmount based on stablecoin decimals + return tryParseCurrencyAmount(parsedForDecimals, stablecoin); + } + catch (error) { + return undefined; + } +} + +var V3_SWAP_DEFAULT_SLIPPAGE = new sdkCore.Percent(50, 10000); // .50% +var ONE_TENTHS_PERCENT = new sdkCore.Percent(10, 10000); // .10% +/** + * Return a guess of the gas cost used in computing slippage tolerance for a given trade + * @param trade the trade for which to _guess_ the amount of gas it would cost to execute + */ +function guesstimateGas(trade) { + if (!!trade) { + return 100000 + trade.swaps.reduce(function (memo, swap) { return swap.route.pools.length + memo; }, 0) * 30000; + } + return undefined; +} +var MIN_AUTO_SLIPPAGE_TOLERANCE = new sdkCore.Percent(5, 1000); // 0.5% +var MAX_AUTO_SLIPPAGE_TOLERANCE = new sdkCore.Percent(25, 100); // 25% +/** + * Returns slippage tolerance based on values from current trade, gas estimates from api, and active network. + */ +function useAutoSlippageTolerance(trade) { + var chainId = useActiveWeb3React().chainId; + var onL2 = chainId && L2_CHAIN_IDS.includes(chainId); + var outputDollarValue = useUSDCValue(trade === null || trade === void 0 ? void 0 : trade.outputAmount); + var nativeGasPrice = useGasPrice(); + var gasEstimate = guesstimateGas(trade); + var nativeCurrency = useNativeCurrency(); + var nativeCurrencyPrice = useUSDCPrice(nativeCurrency !== null && nativeCurrency !== void 0 ? nativeCurrency : undefined); + return React.useMemo(function () { + if (!trade || onL2) + return ONE_TENTHS_PERCENT; + var nativeGasCost = nativeGasPrice && typeof gasEstimate === 'number' + ? JSBI__default["default"].multiply(nativeGasPrice, JSBI__default["default"].BigInt(gasEstimate)) + : undefined; + var dollarGasCost = nativeCurrency && nativeGasCost && nativeCurrencyPrice + ? nativeCurrencyPrice.quote(sdkCore.CurrencyAmount.fromRawAmount(nativeCurrency, nativeGasCost)) + : undefined; + // if valid estimate from api and using api trade, use gas estimate from api + // NOTE - dont use gas estimate for L2s yet - need to verify accuracy + // if not, use local heuristic + var dollarCostToUse = chainId && SUPPORTED_GAS_ESTIMATE_CHAIN_IDS.includes(chainId) && (trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) + ? trade.gasUseEstimateUSD + : dollarGasCost; + if (outputDollarValue && dollarCostToUse) { + // the rationale is that a user will not want their trade to fail for a loss due to slippage that is less than + // the cost of the gas of the failed transaction + var fraction = dollarCostToUse.asFraction.divide(outputDollarValue.asFraction); + var result = new sdkCore.Percent(fraction.numerator, fraction.denominator); + if (result.greaterThan(MAX_AUTO_SLIPPAGE_TOLERANCE)) + return MAX_AUTO_SLIPPAGE_TOLERANCE; + if (result.lessThan(MIN_AUTO_SLIPPAGE_TOLERANCE)) + return MIN_AUTO_SLIPPAGE_TOLERANCE; + return result; + } + return V3_SWAP_DEFAULT_SLIPPAGE; + }, [trade, onL2, nativeGasPrice, gasEstimate, nativeCurrency, nativeCurrencyPrice, chainId, outputDollarValue]); +} + +/** + * Transforms a Routing API quote into an array of routes that can be used to create + * a `Trade`. + */ +function computeRoutes(currencyIn, currencyOut, tradeType, quoteResult) { + if (!quoteResult || !quoteResult.route || !currencyIn || !currencyOut) + return undefined; + if (quoteResult.route.length === 0) + return []; + var parsedTokenIn = parseToken(quoteResult.route[0][0].tokenIn); + var parsedTokenOut = parseToken(quoteResult.route[0][quoteResult.route[0].length - 1].tokenOut); + if (parsedTokenIn.address !== currencyIn.wrapped.address) + return undefined; + if (parsedTokenOut.address !== currencyOut.wrapped.address) + return undefined; + var parsedCurrencyIn = currencyIn.isNative ? nativeOnChain(currencyIn.chainId) : parsedTokenIn; + var parsedCurrencyOut = currencyOut.isNative ? nativeOnChain(currencyOut.chainId) : parsedTokenOut; + try { + return quoteResult.route.map(function (route) { + if (route.length === 0) { + throw new Error('Expected route to have at least one pair or pool'); + } + var rawAmountIn = route[0].amountIn; + var rawAmountOut = route[route.length - 1].amountOut; + if (!rawAmountIn || !rawAmountOut) { + throw new Error('Expected both amountIn and amountOut to be present'); + } + return { + routev3: isV3Route(route) ? new v3Sdk.Route(route.map(parsePool), parsedCurrencyIn, parsedCurrencyOut) : null, + routev2: !isV3Route(route) ? new v2Sdk.Route(route.map(parsePair), parsedCurrencyIn, parsedCurrencyOut) : null, + inputAmount: sdkCore.CurrencyAmount.fromRawAmount(parsedCurrencyIn, rawAmountIn), + outputAmount: sdkCore.CurrencyAmount.fromRawAmount(parsedCurrencyOut, rawAmountOut), + }; + }); + } + catch (e) { + // `Route` constructor may throw if inputs/outputs are temporarily out of sync + // (RTK-Query always returns the latest data which may not be the right inputs/outputs) + // This is not fatal and will fix itself in future render cycles + console.error(e); + return undefined; + } +} +function transformRoutesToTrade(route, tradeType, gasUseEstimateUSD) { + var _a, _b; + return new InterfaceTrade({ + v2Routes: (_a = route === null || route === void 0 ? void 0 : route.filter(function (r) { return r.routev2 !== null; }).map(function (_a) { + var routev2 = _a.routev2, inputAmount = _a.inputAmount, outputAmount = _a.outputAmount; + return ({ routev2: routev2, inputAmount: inputAmount, outputAmount: outputAmount }); + })) !== null && _a !== void 0 ? _a : [], + v3Routes: (_b = route === null || route === void 0 ? void 0 : route.filter(function (r) { return r.routev3 !== null; }).map(function (_a) { + var routev3 = _a.routev3, inputAmount = _a.inputAmount, outputAmount = _a.outputAmount; + return ({ routev3: routev3, inputAmount: inputAmount, outputAmount: outputAmount }); + })) !== null && _b !== void 0 ? _b : [], + tradeType: tradeType, + gasUseEstimateUSD: gasUseEstimateUSD, + }); +} +var parseToken = function (_a) { + var address = _a.address, chainId = _a.chainId, decimals = _a.decimals, symbol = _a.symbol; + return new sdkCore.Token(chainId, address, parseInt(decimals.toString()), symbol); +}; +var parsePool = function (_a) { + var fee = _a.fee, sqrtRatioX96 = _a.sqrtRatioX96, liquidity = _a.liquidity, tickCurrent = _a.tickCurrent, tokenIn = _a.tokenIn, tokenOut = _a.tokenOut; + return new v3Sdk.Pool(parseToken(tokenIn), parseToken(tokenOut), parseInt(fee), sqrtRatioX96, liquidity, parseInt(tickCurrent)); +}; +var parsePair = function (_a) { + var reserve0 = _a.reserve0, reserve1 = _a.reserve1; + return new v2Sdk.Pair(sdkCore.CurrencyAmount.fromRawAmount(parseToken(reserve0.token), reserve0.quotient), sdkCore.CurrencyAmount.fromRawAmount(parseToken(reserve1.token), reserve1.quotient)); +}; +function isV3Route(route) { + return route[0].type === 'v3-pool'; +} + +function useFreshData(data, dataBlockNumber, maxBlockAge) { + if (maxBlockAge === void 0) { maxBlockAge = 10; } + var localBlockNumber = useBlockNumber(); + if (!localBlockNumber) + return undefined; + if (localBlockNumber - dataBlockNumber > maxBlockAge) { + return undefined; + } + return data; +} +/** + * Returns query arguments for the Routing API query or undefined if the + * query should be skipped. + */ +function useRoutingAPIArguments(_a) { + var tokenIn = _a.tokenIn, tokenOut = _a.tokenOut, amount = _a.amount, tradeType = _a.tradeType; + var _b = __read(useClientSideRouter(), 1), clientSideRouter = _b[0]; + return React.useMemo(function () { + return !tokenIn || !tokenOut || !amount || tokenIn.equals(tokenOut) + ? undefined + : { + amount: amount.quotient.toString(), + tokenInAddress: tokenIn.wrapped.address, + tokenInChainId: tokenIn.wrapped.chainId, + tokenInDecimals: tokenIn.wrapped.decimals, + tokenInSymbol: tokenIn.wrapped.symbol, + tokenOutAddress: tokenOut.wrapped.address, + tokenOutChainId: tokenOut.wrapped.chainId, + tokenOutDecimals: tokenOut.wrapped.decimals, + tokenOutSymbol: tokenOut.wrapped.symbol, + useClientSideRouter: clientSideRouter, + type: (tradeType === sdkCore.TradeType.EXACT_INPUT ? 'exactIn' : 'exactOut'), + }; + }, [amount, clientSideRouter, tokenIn, tokenOut, tradeType]); +} +/** + * Returns the best trade by invoking the routing api or the smart order router on the client + * @param tradeType whether the swap is an exact in/out + * @param amountSpecified the exact amount to swap in/out + * @param otherCurrency the desired output/payment currency + */ +function useRoutingAPITrade(tradeType, amountSpecified, otherCurrency) { + var _a; + var _b = __read(React.useMemo(function () { + return tradeType === sdkCore.TradeType.EXACT_INPUT + ? [amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, otherCurrency] + : [otherCurrency, amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency]; + }, [amountSpecified, otherCurrency, tradeType]), 2), currencyIn = _b[0], currencyOut = _b[1]; + var queryArgs = useRoutingAPIArguments({ + tokenIn: currencyIn, + tokenOut: currencyOut, + amount: amountSpecified, + tradeType: tradeType, + }); + var _c = useGetQuoteQuery(queryArgs !== null && queryArgs !== void 0 ? queryArgs : react.skipToken, { + pollingInterval: ms__default["default"](templateObject_1$1a || (templateObject_1$1a = __makeTemplateObject(["15s"], ["15s"]))), + refetchOnFocus: true, + }), isLoading = _c.isLoading, isError = _c.isError, data = _c.data; + var quoteResult = useFreshData(data, Number(data === null || data === void 0 ? void 0 : data.blockNumber) || 0); + var route = React.useMemo(function () { return computeRoutes(currencyIn, currencyOut, tradeType, quoteResult); }, [currencyIn, currencyOut, quoteResult, tradeType]); + // get USD gas cost of trade in active chains stablecoin amount + var gasUseEstimateUSD = (_a = useStablecoinAmountFromFiatValue(quoteResult === null || quoteResult === void 0 ? void 0 : quoteResult.gasUseEstimateUSD)) !== null && _a !== void 0 ? _a : null; + return React.useMemo(function () { + if (!currencyIn || !currencyOut) { + return { + state: TradeState.INVALID, + trade: undefined, + }; + } + if (isLoading && !quoteResult) { + // only on first hook render + return { + state: TradeState.LOADING, + trade: undefined, + }; + } + var otherAmount = tradeType === sdkCore.TradeType.EXACT_INPUT + ? currencyOut && quoteResult + ? sdkCore.CurrencyAmount.fromRawAmount(currencyOut, quoteResult.quote) + : undefined + : currencyIn && quoteResult + ? sdkCore.CurrencyAmount.fromRawAmount(currencyIn, quoteResult.quote) + : undefined; + if (isError || !otherAmount || !route || route.length === 0 || !queryArgs) { + return { + state: TradeState.NO_ROUTE_FOUND, + trade: undefined, + }; + } + try { + var trade = transformRoutesToTrade(route, tradeType, gasUseEstimateUSD); + return { + // always return VALID regardless of isFetching status + state: TradeState.VALID, + trade: trade, + }; + } + catch (e) { + console.debug('transformRoutesToTrade failed: ', e); + return { state: TradeState.INVALID, trade: undefined }; + } + }, [currencyIn, currencyOut, isLoading, quoteResult, tradeType, isError, route, queryArgs, gasUseEstimateUSD]); +} +var templateObject_1$1a; + +var AUTO_ROUTER_SUPPORTED_CHAINS = Object.values(smartOrderRouter.ChainId); + +function useAutoRouterSupported() { + var chainId = useActiveWeb3React().chainId; + return Boolean(chainId && AUTO_ROUTER_SUPPORTED_CHAINS.includes(chainId)); +} + +/** + * Returns the best v2+v3 trade for a desired swap. + * @param tradeType whether the swap is an exact in/out + * @param amountSpecified the exact amount to swap in/out + * @param otherCurrency the desired output/payment currency + */ +function useBestTrade(tradeType, amountSpecified, otherCurrency) { + var autoRouterSupported = useAutoRouterSupported(); + var isWindowVisible = useIsWindowVisible(); + var _a = __read(useDebounce(React.useMemo(function () { return [amountSpecified, otherCurrency]; }, [amountSpecified, otherCurrency]), 200), 2), debouncedAmount = _a[0], debouncedOtherCurrency = _a[1]; + var routingAPITrade = useRoutingAPITrade(tradeType, autoRouterSupported && isWindowVisible ? debouncedAmount : undefined, debouncedOtherCurrency); + var isLoading = amountSpecified !== undefined && debouncedAmount === undefined; + // consider trade debouncing when inputs/outputs do not match + var debouncing = routingAPITrade.trade && + amountSpecified && + (tradeType === sdkCore.TradeType.EXACT_INPUT + ? !routingAPITrade.trade.inputAmount.equalTo(amountSpecified) || + !amountSpecified.currency.equals(routingAPITrade.trade.inputAmount.currency) || + !(debouncedOtherCurrency === null || debouncedOtherCurrency === void 0 ? void 0 : debouncedOtherCurrency.equals(routingAPITrade.trade.outputAmount.currency)) + : !routingAPITrade.trade.outputAmount.equalTo(amountSpecified) || + !amountSpecified.currency.equals(routingAPITrade.trade.outputAmount.currency) || + !(debouncedOtherCurrency === null || debouncedOtherCurrency === void 0 ? void 0 : debouncedOtherCurrency.equals(routingAPITrade.trade.inputAmount.currency))); + var useFallback = !autoRouterSupported || (!debouncing && routingAPITrade.state === TradeState.NO_ROUTE_FOUND); + // only use client side router if routing api trade failed or is not supported + var bestV3Trade = useClientSideV3Trade(tradeType, useFallback ? debouncedAmount : undefined, useFallback ? debouncedOtherCurrency : undefined); + // only return gas estimate from api if routing api trade is used + return React.useMemo(function () { return (__assign(__assign(__assign({}, (useFallback ? bestV3Trade : routingAPITrade)), (debouncing ? { state: TradeState.SYNCING } : {})), (isLoading ? { state: TradeState.LOADING } : {}))); }, [bestV3Trade, debouncing, isLoading, routingAPITrade, useFallback]); +} + +// gets the current timestamp from the blockchain +function useCurrentBlockTimestamp() { + var _a, _b; + var multicall = useInterfaceMulticall(); + return (_b = (_a = useSingleCallResult(multicall, 'getCurrentBlockTimestamp')) === null || _a === void 0 ? void 0 : _a.result) === null || _b === void 0 ? void 0 : _b[0]; +} + +new abi$7.Interface(abi$6); +({ + 1: [ + { + tokens: [WRAPPED_NATIVE_CURRENCY[1], DAI], + stakingRewardAddress: '0xa1484C3aa22a66C62b77E0AE78E15258bd0cB711', + }, + { + tokens: [WRAPPED_NATIVE_CURRENCY[1], USDC], + stakingRewardAddress: '0x7FBa4B8Dc5E7616e59622806932DBea72537A56b', + }, + { + tokens: [WRAPPED_NATIVE_CURRENCY[1], USDT], + stakingRewardAddress: '0x6C3e4cb2E96B01F4b866965A91ed4437839A121a', + }, + { + tokens: [WRAPPED_NATIVE_CURRENCY[1], WBTC], + stakingRewardAddress: '0xCA35e32e7926b96A9988f61d510E038108d8068e', + }, + ], +}); + +// mimics useAllBalances +function useAllTokenBalances() { + var account = useActiveWeb3React().account; + var allTokens = useAllTokens(); + var allTokensArray = React.useMemo(function () { return Object.values(allTokens !== null && allTokens !== void 0 ? allTokens : {}); }, [allTokens]); + var balances = useTokenBalances(account !== null && account !== void 0 ? account : undefined, allTokensArray); + return balances !== null && balances !== void 0 ? balances : {}; +} + +function useSwapState() { + return useAppSelector(function (state) { return state.swap; }); +} +function useSwapActionHandlers() { + var dispatch = useAppDispatch(); + var onCurrencySelection = React.useCallback(function (field, currency) { + dispatch(selectCurrency({ + field: field, + currencyId: currency.isToken ? currency.address : currency.isNative ? 'ETH' : '', + })); + }, [dispatch]); + var onSwitchTokens = React.useCallback(function () { + dispatch(switchCurrencies()); + }, [dispatch]); + var onUserInput = React.useCallback(function (field, typedValue) { + dispatch(typeInput({ field: field, typedValue: typedValue })); + }, [dispatch]); + var onChangeRecipient = React.useCallback(function (recipient) { + dispatch(setRecipient({ recipient: recipient })); + }, [dispatch]); + return { + onSwitchTokens: onSwitchTokens, + onCurrencySelection: onCurrencySelection, + onUserInput: onUserInput, + onChangeRecipient: onChangeRecipient, + }; +} +var BAD_RECIPIENT_ADDRESSES = { + '0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f': true, + '0xf164fC0Ec4E93095b804a4795bBe1e041497b92a': true, + '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D': true, // v2 router 02 +}; +// from the current swap inputs, compute the best trade and return it. +function useDerivedSwapInfo() { + var _a, _b; + var account = useActiveWeb3React().account; + var _c = useSwapState(), independentField = _c.independentField, typedValue = _c.typedValue, _d = Field.INPUT, inputCurrencyId = _c[_d].currencyId, _e = Field.OUTPUT, outputCurrencyId = _c[_e].currencyId, recipient = _c.recipient; + var inputCurrency = useCurrency(inputCurrencyId); + var outputCurrency = useCurrency(outputCurrencyId); + var recipientLookup = useENS(recipient !== null && recipient !== void 0 ? recipient : undefined); + var to = (_a = (recipient === null ? account : recipientLookup.address)) !== null && _a !== void 0 ? _a : null; + var relevantTokenBalances = useCurrencyBalances(account !== null && account !== void 0 ? account : undefined, React.useMemo(function () { return [inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : undefined, outputCurrency !== null && outputCurrency !== void 0 ? outputCurrency : undefined]; }, [inputCurrency, outputCurrency])); + var isExactIn = independentField === Field.INPUT; + var parsedAmount = React.useMemo(function () { var _a; return tryParseCurrencyAmount(typedValue, (_a = (isExactIn ? inputCurrency : outputCurrency)) !== null && _a !== void 0 ? _a : undefined); }, [inputCurrency, isExactIn, outputCurrency, typedValue]); + var trade = useBestTrade(isExactIn ? sdkCore.TradeType.EXACT_INPUT : sdkCore.TradeType.EXACT_OUTPUT, parsedAmount, (_b = (isExactIn ? outputCurrency : inputCurrency)) !== null && _b !== void 0 ? _b : undefined); + var currencyBalances = React.useMemo(function () { + var _a; + return (_a = {}, + _a[Field.INPUT] = relevantTokenBalances[0], + _a[Field.OUTPUT] = relevantTokenBalances[1], + _a); + }, [relevantTokenBalances]); + var currencies = React.useMemo(function () { + var _a; + return (_a = {}, + _a[Field.INPUT] = inputCurrency, + _a[Field.OUTPUT] = outputCurrency, + _a); + }, [inputCurrency, outputCurrency]); + // allowed slippage is either auto slippage, or custom user defined slippage if auto slippage disabled + var autoSlippageTolerance = useAutoSlippageTolerance(trade.trade); + var allowedSlippage = useUserSlippageToleranceWithDefault(autoSlippageTolerance); + var inputError = React.useMemo(function () { + var _a; + var inputError; + if (!account) { + inputError = jsxRuntime.jsx(macro.Trans, { children: "Connect Wallet" }, void 0); + } + if (!currencies[Field.INPUT] || !currencies[Field.OUTPUT]) { + inputError = inputError !== null && inputError !== void 0 ? inputError : jsxRuntime.jsx(macro.Trans, { children: "Select a token" }, void 0); + } + if (!parsedAmount) { + inputError = inputError !== null && inputError !== void 0 ? inputError : jsxRuntime.jsx(macro.Trans, { children: "Enter an amount" }, void 0); + } + var formattedTo = isAddress(to); + if (!to || !formattedTo) { + inputError = inputError !== null && inputError !== void 0 ? inputError : jsxRuntime.jsx(macro.Trans, { children: "Enter a recipient" }, void 0); + } + else { + if (BAD_RECIPIENT_ADDRESSES[formattedTo]) { + inputError = inputError !== null && inputError !== void 0 ? inputError : jsxRuntime.jsx(macro.Trans, { children: "Invalid recipient" }, void 0); + } + } + // compare input balance to max input based on version + var _b = __read([currencyBalances[Field.INPUT], (_a = trade.trade) === null || _a === void 0 ? void 0 : _a.maximumAmountIn(allowedSlippage)], 2), balanceIn = _b[0], amountIn = _b[1]; + if (balanceIn && amountIn && balanceIn.lessThan(amountIn)) { + inputError = jsxRuntime.jsxs(macro.Trans, { children: ["Insufficient ", amountIn.currency.symbol, " balance"] }, void 0); + } + return inputError; + }, [account, allowedSlippage, currencies, currencyBalances, parsedAmount, to, trade.trade]); + return React.useMemo(function () { return ({ + currencies: currencies, + currencyBalances: currencyBalances, + parsedAmount: parsedAmount, + inputError: inputError, + trade: trade, + allowedSlippage: allowedSlippage, + }); }, [allowedSlippage, currencies, currencyBalances, inputError, parsedAmount, trade]); +} +function parseCurrencyFromURLParameter(urlParam) { + if (typeof urlParam === 'string') { + var valid = isAddress(urlParam); + if (valid) + return valid; + if (urlParam.toUpperCase() === 'ETH') + return 'ETH'; + } + return ''; +} +function parseTokenAmountURLParameter(urlParam) { + return typeof urlParam === 'string' && !isNaN(parseFloat(urlParam)) ? urlParam : ''; +} +function parseIndependentFieldURLParameter(urlParam) { + return typeof urlParam === 'string' && urlParam.toLowerCase() === 'output' ? Field.OUTPUT : Field.INPUT; +} +var ENS_NAME_REGEX = /^[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)?$/; +var ADDRESS_REGEX = /^0x[a-fA-F0-9]{40}$/; +function validatedRecipient(recipient) { + if (typeof recipient !== 'string') + return null; + var address = isAddress(recipient); + if (address) + return address; + if (ENS_NAME_REGEX.test(recipient)) + return recipient; + if (ADDRESS_REGEX.test(recipient)) + return recipient; + return null; +} +function queryParametersToSwapState(parsedQs) { + var _a; + var inputCurrency = parseCurrencyFromURLParameter(parsedQs.inputCurrency); + var outputCurrency = parseCurrencyFromURLParameter(parsedQs.outputCurrency); + if (inputCurrency === '' && outputCurrency === '') { + // default to ETH input + inputCurrency = 'ETH'; + } + else if (inputCurrency === outputCurrency) { + // clear output if identical + outputCurrency = ''; + } + var recipient = validatedRecipient(parsedQs.recipient); + return _a = {}, + _a[Field.INPUT] = { + currencyId: inputCurrency === '' ? null : inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : null, + }, + _a[Field.OUTPUT] = { + currencyId: outputCurrency === '' ? null : outputCurrency !== null && outputCurrency !== void 0 ? outputCurrency : null, + }, + _a.typedValue = parseTokenAmountURLParameter(parsedQs.exactAmount), + _a.independentField = parseIndependentFieldURLParameter(parsedQs.exactField), + _a.recipient = recipient, + _a; +} +// updates the swap state to use the defaults for a given network +function useDefaultsFromURLSearch() { + var chainId = useActiveWeb3React().chainId; + var dispatch = useAppDispatch(); + var parsedQs = useParsedQueryString(); + var _a = __read(React.useState(), 2), result = _a[0], setResult = _a[1]; + React.useEffect(function () { + var _a, _b; + if (!chainId) + return; + var parsed = queryParametersToSwapState(parsedQs); + var inputCurrencyId = (_a = parsed[Field.INPUT].currencyId) !== null && _a !== void 0 ? _a : undefined; + var outputCurrencyId = (_b = parsed[Field.OUTPUT].currencyId) !== null && _b !== void 0 ? _b : undefined; + dispatch(replaceSwapState({ + typedValue: parsed.typedValue, + field: parsed.independentField, + inputCurrencyId: inputCurrencyId, + outputCurrencyId: outputCurrencyId, + recipient: parsed.recipient, + })); + setResult({ inputCurrencyId: inputCurrencyId, outputCurrencyId: outputCurrencyId }); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [dispatch, chainId]); + return result; +} + +var initialState$2 = queryParametersToSwapState(parsedQueryString()); +var swap = toolkit.createReducer(initialState$2, function (builder) { + return builder + .addCase(replaceSwapState, function (state, _a) { + var _b; + var _c = _a.payload, typedValue = _c.typedValue, recipient = _c.recipient, field = _c.field, inputCurrencyId = _c.inputCurrencyId, outputCurrencyId = _c.outputCurrencyId; + return _b = {}, + _b[Field.INPUT] = { + currencyId: inputCurrencyId !== null && inputCurrencyId !== void 0 ? inputCurrencyId : null, + }, + _b[Field.OUTPUT] = { + currencyId: outputCurrencyId !== null && outputCurrencyId !== void 0 ? outputCurrencyId : null, + }, + _b.independentField = field, + _b.typedValue = typedValue, + _b.recipient = recipient, + _b; + }) + .addCase(selectCurrency, function (state, _a) { + var _b, _c; + var _d = _a.payload, currencyId = _d.currencyId, field = _d.field; + var otherField = field === Field.INPUT ? Field.OUTPUT : Field.INPUT; + if (currencyId === state[otherField].currencyId) { + // the case where we have to swap the order + return __assign(__assign({}, state), (_b = { independentField: state.independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT }, _b[field] = { currencyId: currencyId }, _b[otherField] = { currencyId: state[field].currencyId }, _b)); + } + else { + // the normal case + return __assign(__assign({}, state), (_c = {}, _c[field] = { currencyId: currencyId }, _c)); + } + }) + .addCase(switchCurrencies, function (state) { + var _a; + return __assign(__assign({}, state), (_a = { independentField: state.independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT }, _a[Field.INPUT] = { currencyId: state[Field.OUTPUT].currencyId }, _a[Field.OUTPUT] = { currencyId: state[Field.INPUT].currencyId }, _a)); + }) + .addCase(typeInput, function (state, _a) { + var _b = _a.payload, field = _b.field, typedValue = _b.typedValue; + return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); + }) + .addCase(setRecipient, function (state, _a) { + var recipient = _a.payload.recipient; + state.recipient = recipient; + }); +}); + +var now = function () { return new Date().getTime(); }; +var initialState$1 = {}; +var transactions = toolkit.createReducer(initialState$1, function (builder) { + return builder + .addCase(updateVersion, function (transactions) { + // in case there are any transactions in the store with the old format, remove them + Object.keys(transactions).forEach(function (chainId) { + var chainTransactions = transactions[chainId]; + Object.keys(chainTransactions).forEach(function (hash) { + if (!('info' in chainTransactions[hash])) { + // clear old transactions that don't have the right format + delete chainTransactions[hash]; + } + }); + }); + }) + .addCase(addTransaction, function (transactions, _a) { + var _b, _c; + var _d = _a.payload, chainId = _d.chainId, from = _d.from, hash = _d.hash, info = _d.info; + if ((_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash]) { + throw Error('Attempted to add existing transaction.'); + } + var txs = (_c = transactions[chainId]) !== null && _c !== void 0 ? _c : {}; + txs[hash] = { hash: hash, info: info, from: from, addedTime: now() }; + transactions[chainId] = txs; + }) + .addCase(clearAllTransactions, function (transactions, _a) { + var chainId = _a.payload.chainId; + if (!transactions[chainId]) + return; + transactions[chainId] = {}; + }) + .addCase(checkedTransaction, function (transactions, _a) { + var _b; + var _c = _a.payload, chainId = _c.chainId, hash = _c.hash, blockNumber = _c.blockNumber; + var tx = (_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash]; + if (!tx) { + return; + } + if (!tx.lastCheckedBlockNumber) { + tx.lastCheckedBlockNumber = blockNumber; + } + else { + tx.lastCheckedBlockNumber = Math.max(blockNumber, tx.lastCheckedBlockNumber); + } + }) + .addCase(finalizeTransaction, function (transactions, _a) { + var _b; + var _c = _a.payload, hash = _c.hash, chainId = _c.chainId, receipt = _c.receipt; + var tx = (_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash]; + if (!tx) { + return; + } + tx.receipt = receipt; + tx.confirmedTime = now(); + }); +}); + +var currentTimestamp = function () { return new Date().getTime(); }; +function pairKey(token0Address, token1Address) { + return token0Address + ";" + token1Address; +} +var initialState = { + matchesDarkMode: false, + userDarkMode: null, + userExpertMode: false, + userLocale: null, + userClientSideRouter: false, + userHideClosedPositions: false, + userSlippageTolerance: 'auto', + userSlippageToleranceHasBeenMigratedToAuto: true, + userDeadline: DEFAULT_DEADLINE_FROM_NOW, + tokens: {}, + pairs: {}, + timestamp: currentTimestamp(), + URLWarningVisible: true, + showSurveyPopup: undefined, +}; +var user = toolkit.createReducer(initialState, function (builder) { + return builder + .addCase(updateVersion, function (state) { + // slippage isnt being tracked in local storage, reset to default + // noinspection SuspiciousTypeOfGuard + if (typeof state.userSlippageTolerance !== 'number' || + !Number.isInteger(state.userSlippageTolerance) || + state.userSlippageTolerance < 0 || + state.userSlippageTolerance > 5000) { + state.userSlippageTolerance = 'auto'; + } + else { + if (!state.userSlippageToleranceHasBeenMigratedToAuto && + [10, 50, 100].indexOf(state.userSlippageTolerance) !== -1) { + state.userSlippageTolerance = 'auto'; + state.userSlippageToleranceHasBeenMigratedToAuto = true; + } + } + // deadline isnt being tracked in local storage, reset to default + // noinspection SuspiciousTypeOfGuard + if (typeof state.userDeadline !== 'number' || + !Number.isInteger(state.userDeadline) || + state.userDeadline < 60 || + state.userDeadline > 180 * 60) { + state.userDeadline = DEFAULT_DEADLINE_FROM_NOW; + } + state.lastUpdateVersionTimestamp = currentTimestamp(); + }) + .addCase(updateUserDarkMode, function (state, action) { + state.userDarkMode = action.payload.userDarkMode; + state.timestamp = currentTimestamp(); + }) + .addCase(updateMatchesDarkMode, function (state, action) { + state.matchesDarkMode = action.payload.matchesDarkMode; + state.timestamp = currentTimestamp(); + }) + .addCase(updateUserExpertMode, function (state, action) { + state.userExpertMode = action.payload.userExpertMode; + state.timestamp = currentTimestamp(); + }) + .addCase(updateUserLocale, function (state, action) { + state.userLocale = action.payload.userLocale; + state.timestamp = currentTimestamp(); + }) + .addCase(updateUserSlippageTolerance, function (state, action) { + state.userSlippageTolerance = action.payload.userSlippageTolerance; + state.timestamp = currentTimestamp(); + }) + .addCase(updateUserDeadline, function (state, action) { + state.userDeadline = action.payload.userDeadline; + state.timestamp = currentTimestamp(); + }) + .addCase(updateUserClientSideRouter, function (state, action) { + state.userClientSideRouter = action.payload.userClientSideRouter; + }) + .addCase(updateHideClosedPositions, function (state, action) { + state.userHideClosedPositions = action.payload.userHideClosedPositions; + }) + .addCase(updateShowSurveyPopup, function (state, action) { + state.showSurveyPopup = action.payload.showSurveyPopup; + }) + .addCase(addSerializedToken, function (state, _a) { + var serializedToken = _a.payload.serializedToken; + if (!state.tokens) { + state.tokens = {}; + } + state.tokens[serializedToken.chainId] = state.tokens[serializedToken.chainId] || {}; + state.tokens[serializedToken.chainId][serializedToken.address] = serializedToken; + state.timestamp = currentTimestamp(); + }) + .addCase(removeSerializedToken, function (state, _a) { + var _b = _a.payload, address = _b.address, chainId = _b.chainId; + if (!state.tokens) { + state.tokens = {}; + } + state.tokens[chainId] = state.tokens[chainId] || {}; + delete state.tokens[chainId][address]; + state.timestamp = currentTimestamp(); + }) + .addCase(addSerializedPair, function (state, _a) { + var serializedPair = _a.payload.serializedPair; + if (serializedPair.token0.chainId === serializedPair.token1.chainId && + serializedPair.token0.address !== serializedPair.token1.address) { + var chainId = serializedPair.token0.chainId; + state.pairs[chainId] = state.pairs[chainId] || {}; + state.pairs[chainId][pairKey(serializedPair.token0.address, serializedPair.token1.address)] = serializedPair; + } + state.timestamp = currentTimestamp(); + }) + .addCase(removeSerializedPair, function (state, _a) { + var _b = _a.payload, chainId = _b.chainId, tokenAAddress = _b.tokenAAddress, tokenBAddress = _b.tokenBAddress; + if (state.pairs[chainId]) { + // just delete both keys if either exists + delete state.pairs[chainId][pairKey(tokenAAddress, tokenBAddress)]; + delete state.pairs[chainId][pairKey(tokenBAddress, tokenAAddress)]; + } + state.timestamp = currentTimestamp(); + }); +}); + +var _a$5; +var PERSISTED_KEYS = ['user', 'transactions', 'lists']; +var store = toolkit.configureStore({ + reducer: (_a$5 = { + application: application, + user: user, + transactions: transactions, + swap: swap, + mint: mint, + mintV3: mintV3, + burn: burn, + burnV3: burnV3, + multicall: multicall.reducer, + lists: lists, + logs: logs + }, + _a$5[api$1.reducerPath] = api$1.reducer, + _a$5[routingApi.reducerPath] = routingApi.reducer, + _a$5), + middleware: function (getDefaultMiddleware) { + return getDefaultMiddleware({ thunk: true }) + .concat(api$1.middleware) + .concat(routingApi.middleware) + .concat(reduxLocalstorageSimple.save({ states: PERSISTED_KEYS, debounce: 1000 })); + }, + preloadedState: reduxLocalstorageSimple.load({ states: PERSISTED_KEYS, disableWarnings: process.env.NODE_ENV === 'test' }), +}); +store.dispatch(updateVersion()); +react.setupListeners(store.dispatch); + +var FallbackWrapper = styled__default["default"].div(templateObject_1$19 || (templateObject_1$19 = __makeTemplateObject(["\n display: flex;\n flex-direction: column;\n width: 100%;\n align-items: center;\n z-index: 1;\n"], ["\n display: flex;\n flex-direction: column;\n width: 100%;\n align-items: center;\n z-index: 1;\n"]))); +var BodyWrapper$2 = styled__default["default"].div(templateObject_2$R || (templateObject_2$R = __makeTemplateObject(["\n padding: 1rem;\n width: 100%;\n white-space: ;\n"], ["\n padding: 1rem;\n width: 100%;\n white-space: ;\n"]))); +var CodeBlockWrapper = styled__default["default"].div(templateObject_3$J || (templateObject_3$J = __makeTemplateObject(["\n background: ", ";\n overflow: auto;\n white-space: pre;\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 border-radius: 24px;\n padding: 18px 24px;\n color: ", ";\n"], ["\n background: ", ";\n overflow: auto;\n white-space: pre;\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 border-radius: 24px;\n padding: 18px 24px;\n color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg0; +}, function (_a) { + var theme = _a.theme; + return theme.text1; +}); +var LinkWrapper = styled__default["default"].div(templateObject_4$y || (templateObject_4$y = __makeTemplateObject(["\n color: ", ";\n padding: 6px 24px;\n"], ["\n color: ", ";\n padding: 6px 24px;\n"])), function (_a) { + var theme = _a.theme; + return theme.blue1; +}); +var SomethingWentWrongWrapper = styled__default["default"].div(templateObject_5$q || (templateObject_5$q = __makeTemplateObject(["\n padding: 6px 24px;\n"], ["\n padding: 6px 24px;\n"]))); +var IS_UNISWAP = window.location.hostname === 'app.uniswap.org'; +var ErrorBoundary = /** @class */ (function (_super) { + __extends(ErrorBoundary, _super); + function ErrorBoundary(props) { + var _this = _super.call(this, props) || this; + _this.state = { error: null }; + return _this; + } + ErrorBoundary.getDerivedStateFromError = function (error) { + return { error: error }; + }; + ErrorBoundary.prototype.componentDidCatch = function (error, errorInfo) { + ReactGA__default["default"].exception(__assign(__assign(__assign({}, error), errorInfo), { fatal: true })); + }; + ErrorBoundary.prototype.render = function () { + var error = this.state.error; + if (error !== null) { + var encodedBody = encodeURIComponent(issueBody(error)); + return (jsxRuntime.jsx(FallbackWrapper, { children: jsxRuntime.jsx(BodyWrapper$2, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: 'md' }, { children: [jsxRuntime.jsx(SomethingWentWrongWrapper, { children: jsxRuntime.jsx(ThemedText.Label, __assign({ fontSize: 24, fontWeight: 600 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Something went wrong" }, void 0) }), void 0) }, void 0), jsxRuntime.jsx(CodeBlockWrapper, { children: jsxRuntime.jsx("code", { children: jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: 10 }, { children: error.stack }), void 0) }, void 0) }, void 0), IS_UNISWAP ? (jsxRuntime.jsxs(AutoRow, { children: [jsxRuntime.jsx(LinkWrapper, { children: jsxRuntime.jsx(ExternalLink, __assign({ id: "create-github-issue-link", href: "https://github.com/Uniswap/uniswap-interface/issues/new?assignees=&labels=bug&body=" + encodedBody + "&title=" + encodeURIComponent("Crash report: `" + error.name + (error.message && ": " + error.message) + "`"), target: "_blank" }, { children: jsxRuntime.jsxs(ThemedText.Link, __assign({ fontSize: 16 }, { children: [jsxRuntime.jsx(macro.Trans, { children: "Create an issue on GitHub" }, void 0), jsxRuntime.jsx("span", { children: "\u2197" }, void 0)] }), void 0) }), void 0) }, void 0), jsxRuntime.jsx(LinkWrapper, { children: jsxRuntime.jsx(ExternalLink, __assign({ id: "get-support-on-discord", href: "https://discord.gg/FCfyBSbCU5", target: "_blank" }, { children: jsxRuntime.jsxs(ThemedText.Link, __assign({ fontSize: 16 }, { children: [jsxRuntime.jsx(macro.Trans, { children: "Get support on Discord" }, void 0), jsxRuntime.jsx("span", { children: "\u2197" }, void 0)] }), void 0) }), void 0) }, void 0)] }, void 0)) : null] }), void 0) }, void 0) }, void 0)); + } + return this.props.children; + }; + return ErrorBoundary; +}(React__default["default"].Component)); +function getRelevantState() { + var path = window.location.hash; + if (!path.startsWith('#/')) { + return null; + } + var pieces = path.substring(2).split(/[/\\?]/); + switch (pieces[0]) { + case 'swap': + return 'swap'; + case 'add': + if (pieces[1] === 'v2') + return 'mint'; + else + return 'mintV3'; + case 'remove': + if (pieces[1] === 'v2') + return 'burn'; + else + return 'burnV3'; + } + return null; +} +function issueBody(error) { + var relevantState = getRelevantState(); + var deviceData = userAgent; + return "## URL\n \n" + window.location.href + "\n\n" + (relevantState + ? "## `" + relevantState + "` state\n \n```json\n" + JSON.stringify(store.getState()[relevantState], null, 2) + "\n```\n" + : '') + "\n" + (error.name && + "## Error\n\n```\n" + error.name + (error.message && ": " + error.message) + "\n```\n") + "\n" + (error.stack && + "## Stacktrace\n\n```\n" + error.stack + "\n```\n") + "\n" + (deviceData && + "## Device data\n\n```json\n" + JSON.stringify(deviceData, null, 2) + "\n```\n") + "\n"; +} +var templateObject_1$19, templateObject_2$R, templateObject_3$J, templateObject_4$y, templateObject_5$q; + +function useModalOpen(modal) { + var openModal = useAppSelector(function (state) { return state.application.openModal; }); + return openModal === modal; +} +function useToggleModal(modal) { + var open = useModalOpen(modal); + var dispatch = useAppDispatch(); + return React.useCallback(function () { return dispatch(setOpenModal(open ? null : modal)); }, [dispatch, modal, open]); +} +function useWalletModalToggle() { + return useToggleModal(ApplicationModal.WALLET); +} +function useToggleSettingsMenu() { + return useToggleModal(ApplicationModal.SETTINGS); +} +function useShowClaimPopup() { + return useModalOpen(ApplicationModal.CLAIM_POPUP); +} +function useToggleShowClaimPopup() { + return useToggleModal(ApplicationModal.CLAIM_POPUP); +} +function useToggleSelfClaimModal() { + return useToggleModal(ApplicationModal.SELF_CLAIM); +} +function useTogglePrivacyPolicy() { + return useToggleModal(ApplicationModal.PRIVACY_POLICY); +} +// returns a function that allows adding a popup +function useAddPopup() { + var dispatch = useAppDispatch(); + return React.useCallback(function (content, key, removeAfterMs) { + dispatch(addPopup({ content: content, key: key, removeAfterMs: removeAfterMs !== null && removeAfterMs !== void 0 ? removeAfterMs : DEFAULT_TXN_DISMISS_MS })); + }, [dispatch]); +} +// returns a function that allows removing a popup via its key +function useRemovePopup() { + var dispatch = useAppDispatch(); + return React.useCallback(function (key) { + dispatch(removePopup({ key: key })); + }, [dispatch]); +} +// get the list of active popups +function useActivePopups() { + var list = useAppSelector(function (state) { return state.application.popupList; }); + return React.useMemo(function () { return list.filter(function (item) { return item.show; }); }, [list]); +} + +var _path$5, _path2$2, _path3$1, _path4, _path5, _path6, _path7, _path8, _path9; + +function _extends$7() { _extends$7 = 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$7.apply(this, arguments); } + +var SvgLogo = function SvgLogo(props) { + return /*#__PURE__*/React__namespace.createElement("svg", _extends$7({ + width: 14, + height: 15, + viewBox: "0 0 14 15", + fill: "black", + xmlns: "http://www.w3.org/2000/svg" + }, props), /*#__PURE__*/React__namespace.createElement("g", { + style: { + mixBlendMode: "darken" + } + }, _path$5 || (_path$5 = /*#__PURE__*/React__namespace.createElement("path", { + d: "M4.15217 1.55141C3.96412 1.52242 3.95619 1.51902 4.04468 1.5055C4.21427 1.47958 4.61472 1.51491 4.89067 1.58012C5.53489 1.73232 6.12109 2.12221 6.74683 2.81466L6.91307 2.99862L7.15088 2.96062C8.15274 2.8006 9.17194 2.92778 10.0244 3.31918C10.2589 3.42686 10.6287 3.64121 10.6749 3.69629C10.6896 3.71384 10.7166 3.82684 10.7349 3.94742C10.7982 4.36458 10.7665 4.68434 10.6382 4.92317C10.5683 5.05313 10.5644 5.09432 10.6114 5.20554C10.6489 5.2943 10.7534 5.35999 10.8569 5.35985C11.0687 5.35956 11.2968 5.0192 11.4024 4.54561L11.4444 4.3575L11.5275 4.45109C11.9835 4.96459 12.3417 5.66488 12.4032 6.16335L12.4192 6.29332L12.3426 6.17517C12.2107 5.97186 12.0781 5.83346 11.9084 5.72183C11.6024 5.52062 11.2789 5.45215 10.4222 5.40727C9.64839 5.36675 9.21045 5.30106 8.77621 5.16032C8.03738 4.9209 7.66493 4.60204 6.78729 3.4576C6.39748 2.94928 6.15654 2.66804 5.91687 2.44155C5.37228 1.92691 4.83716 1.65701 4.15217 1.55141Z" + })), _path2$2 || (_path2$2 = /*#__PURE__*/React__namespace.createElement("path", { + d: "M10.8494 2.68637C10.8689 2.34575 10.9153 2.12108 11.0088 1.9159C11.0458 1.83469 11.0804 1.76822 11.0858 1.76822C11.0911 1.76822 11.075 1.82816 11.05 1.90142C10.9821 2.10054 10.9709 2.3729 11.0177 2.68978C11.0771 3.09184 11.1109 3.14985 11.5385 3.58416C11.739 3.78788 11.9723 4.0448 12.0568 4.15511L12.2106 4.35568L12.0568 4.21234C11.8688 4.03705 11.4364 3.6952 11.3409 3.64633C11.2768 3.61356 11.2673 3.61413 11.2278 3.65321C11.1914 3.68922 11.1837 3.74333 11.1787 3.99915C11.1708 4.39786 11.1161 4.65377 10.9842 4.90965C10.9128 5.04805 10.9015 5.01851 10.9661 4.8623C11.0143 4.74566 11.0192 4.69439 11.0189 4.30842C11.0181 3.53291 10.9255 3.34647 10.3823 3.02709C10.2447 2.94618 10.0179 2.8295 9.87839 2.76778C9.73887 2.70606 9.62805 2.6523 9.63208 2.64828C9.64746 2.63307 10.1772 2.78675 10.3905 2.86828C10.7077 2.98954 10.76 3.00526 10.7985 2.99063C10.8244 2.98082 10.8369 2.90608 10.8494 2.68637Z" + })), _path3$1 || (_path3$1 = /*#__PURE__*/React__namespace.createElement("path", { + d: "M4.51745 4.01304C4.13569 3.49066 3.89948 2.68973 3.95062 2.091L3.96643 1.90572L4.05333 1.92148C4.21652 1.95106 4.49789 2.05515 4.62964 2.13469C4.9912 2.35293 5.14773 2.64027 5.30697 3.37811C5.35362 3.59423 5.41482 3.8388 5.44298 3.9216C5.48831 4.05487 5.65962 4.36617 5.7989 4.56834C5.89922 4.71395 5.83258 4.78295 5.61082 4.76305C5.27215 4.73267 4.8134 4.41799 4.51745 4.01304Z" + })), _path4 || (_path4 = /*#__PURE__*/React__namespace.createElement("path", { + d: "M10.3863 7.90088C8.60224 7.18693 7.97389 6.56721 7.97389 5.52157C7.97389 5.36769 7.97922 5.24179 7.98571 5.24179C7.99221 5.24179 8.06124 5.29257 8.1391 5.35465C8.50088 5.64305 8.906 5.76623 10.0275 5.92885C10.6875 6.02455 11.0589 6.10185 11.4015 6.21477C12.4904 6.57371 13.1641 7.30212 13.3248 8.29426C13.3715 8.58255 13.3441 9.12317 13.2684 9.4081C13.2087 9.63315 13.0263 10.0388 12.9779 10.0544C12.9645 10.0587 12.9514 10.0076 12.9479 9.93809C12.9296 9.56554 12.7402 9.20285 12.4221 8.93116C12.0604 8.62227 11.5745 8.37633 10.3863 7.90088Z" + })), _path5 || (_path5 = /*#__PURE__*/React__namespace.createElement("path", { + d: "M9.13385 8.19748C9.11149 8.06527 9.07272 7.89643 9.04769 7.82228L9.00217 7.68748L9.08672 7.7818C9.20374 7.91233 9.2962 8.07937 9.37457 8.30185C9.43438 8.47165 9.44111 8.52215 9.44066 8.79807C9.4402 9.06896 9.43273 9.12575 9.3775 9.27858C9.29042 9.51959 9.18233 9.69048 9.00097 9.87391C8.67507 10.2036 8.25607 10.3861 7.65143 10.4618C7.54633 10.4749 7.24 10.4971 6.97069 10.511C6.292 10.5461 5.84531 10.6186 5.44393 10.7587C5.38623 10.7788 5.3347 10.7911 5.32947 10.7859C5.31323 10.7698 5.58651 10.6079 5.81223 10.4998C6.1305 10.3474 6.44733 10.2643 7.15719 10.1468C7.50785 10.0887 7.86998 10.0183 7.96194 9.99029C8.83033 9.72566 9.27671 9.04276 9.13385 8.19748Z" + })), _path6 || (_path6 = /*#__PURE__*/React__namespace.createElement("path", { + d: "M9.95169 9.64109C9.71465 9.13463 9.66022 8.64564 9.79009 8.18961C9.80399 8.14088 9.82632 8.101 9.83976 8.101C9.85319 8.101 9.90913 8.13105 9.96404 8.16777C10.0733 8.24086 10.2924 8.36395 10.876 8.68023C11.6043 9.0749 12.0196 9.3805 12.302 9.72965C12.5493 10.0354 12.7023 10.3837 12.776 10.8084C12.8177 11.0489 12.7932 11.6277 12.7311 11.8699C12.5353 12.6337 12.0802 13.2336 11.4311 13.5837C11.336 13.635 11.2506 13.6771 11.2414 13.6773C11.2321 13.6775 11.2668 13.5899 11.3184 13.4827C11.5367 13.029 11.5616 12.5877 11.3965 12.0965C11.2954 11.7957 11.0893 11.4287 10.6732 10.8084C10.1893 10.0873 10.0707 9.89539 9.95169 9.64109Z" + })), _path7 || (_path7 = /*#__PURE__*/React__namespace.createElement("path", { + d: "M3.25046 12.3737C3.91252 11.8181 4.73629 11.4234 5.48666 11.3022C5.81005 11.25 6.34877 11.2707 6.64823 11.3469C7.12824 11.469 7.55763 11.7425 7.78094 12.0683C7.99918 12.3867 8.09281 12.6642 8.19029 13.2816C8.22875 13.5252 8.27057 13.7697 8.28323 13.8251C8.35644 14.1451 8.4989 14.4008 8.67544 14.5293C8.95583 14.7333 9.43865 14.7459 9.91362 14.5618C9.99423 14.5305 10.0642 14.5089 10.0691 14.5138C10.0864 14.5308 9.84719 14.6899 9.67847 14.7737C9.45143 14.8864 9.2709 14.93 9.03102 14.93C8.59601 14.93 8.23486 14.7101 7.9335 14.2616C7.87419 14.1733 7.7409 13.909 7.63729 13.6741C7.3191 12.9528 7.16199 12.7331 6.79255 12.4926C6.47104 12.2834 6.05641 12.2459 5.74449 12.3979C5.33475 12.5976 5.22043 13.118 5.51389 13.4478C5.63053 13.5789 5.84803 13.6919 6.02588 13.7139C6.35861 13.7551 6.64455 13.5035 6.64455 13.1696C6.64455 12.9528 6.56071 12.8291 6.34966 12.7344C6.0614 12.6051 5.75156 12.7562 5.75304 13.0254C5.75368 13.1402 5.80396 13.2122 5.91971 13.2643C5.99397 13.2977 5.99569 13.3003 5.93514 13.2878C5.67066 13.2333 5.6087 12.9164 5.82135 12.706C6.07667 12.4535 6.60461 12.5649 6.78591 12.9097C6.86208 13.0545 6.87092 13.3429 6.80451 13.517C6.6559 13.9068 6.22256 14.1117 5.78297 14.0002C5.48368 13.9242 5.36181 13.842 5.00097 13.4726C4.37395 12.8306 4.13053 12.7062 3.22657 12.566L3.05335 12.5391L3.25046 12.3737Z" + })), _path8 || (_path8 = /*#__PURE__*/React__namespace.createElement("path", { + fillRule: "evenodd", + clipRule: "evenodd", + d: "M0.308383 0.883984C2.40235 3.40996 3.84457 4.45213 4.00484 4.67231C4.13717 4.85412 4.08737 5.01757 3.86067 5.14567C3.7346 5.21689 3.47541 5.28905 3.34564 5.28905C3.19887 5.28905 3.14847 5.23278 3.14847 5.23278C3.06337 5.15255 3.01544 5.16658 2.5784 4.39555C1.97166 3.45981 1.46389 2.68357 1.45004 2.67057C1.41801 2.64052 1.41856 2.64153 2.51654 4.59413C2.69394 5.0011 2.55182 5.15049 2.55182 5.20845C2.55182 5.32636 2.51946 5.38834 2.37311 5.55059C2.12914 5.8211 2.02008 6.12505 1.94135 6.7541C1.8531 7.45926 1.60492 7.95737 0.917156 8.80989C0.514562 9.30893 0.448686 9.4004 0.3471 9.60153C0.219144 9.85482 0.183961 9.99669 0.169701 10.3165C0.154629 10.6547 0.183983 10.8732 0.287934 11.1965C0.378939 11.4796 0.473932 11.6665 0.716778 12.0403C0.926351 12.3629 1.04702 12.6027 1.04702 12.6965C1.04702 12.7711 1.06136 12.7712 1.38611 12.6983C2.16328 12.5239 2.79434 12.2171 3.14925 11.8411C3.36891 11.6084 3.42048 11.4799 3.42215 11.1611C3.42325 10.9525 3.41587 10.9088 3.35914 10.7888C3.2668 10.5935 3.09869 10.4311 2.72817 10.1794C2.2427 9.84953 2.03534 9.58398 1.97807 9.21878C1.93108 8.91913 1.98559 8.70771 2.25416 8.14825C2.53214 7.56916 2.60103 7.32239 2.64763 6.73869C2.67773 6.36158 2.71941 6.21286 2.82842 6.09348C2.94212 5.969 3.04447 5.92684 3.32584 5.88863C3.78457 5.82635 4.07667 5.70839 4.31677 5.48849C4.52505 5.29772 4.61221 5.11391 4.62558 4.8372L4.63574 4.62747L4.51934 4.49259C4.09783 4.00411 0.0261003 0.5 0.000160437 0.5C-0.00538105 0.5 0.133325 0.672804 0.308383 0.883984ZM1.28364 10.6992C1.37894 10.5314 1.3283 10.3158 1.16889 10.2104C1.01827 10.1109 0.78428 10.1578 0.78428 10.2875C0.78428 10.3271 0.806303 10.3559 0.855937 10.3813C0.939514 10.424 0.945581 10.4721 0.879823 10.5703C0.81323 10.6698 0.818604 10.7573 0.894991 10.8167C1.0181 10.9125 1.19237 10.8598 1.28364 10.6992Z" + })), _path9 || (_path9 = /*#__PURE__*/React__namespace.createElement("path", { + fillRule: "evenodd", + clipRule: "evenodd", + d: "M4.92523 5.99865C4.70988 6.06439 4.50054 6.29124 4.43574 6.5291C4.39621 6.67421 4.41864 6.92875 4.47785 7.00736C4.57351 7.13433 4.66602 7.16778 4.91651 7.16603C5.40693 7.16263 5.83327 6.95358 5.88284 6.69224C5.92347 6.47801 5.73622 6.18112 5.4783 6.05078C5.34521 5.98355 5.06217 5.95688 4.92523 5.99865ZM5.49853 6.44422C5.57416 6.33741 5.54107 6.22198 5.41245 6.14391C5.1675 5.99525 4.79708 6.11827 4.79708 6.34826C4.79708 6.46274 4.99025 6.58765 5.16731 6.58765C5.28516 6.58765 5.44644 6.5178 5.49853 6.44422Z" + })))); +}; +var UNISWAP_LOGO_URL = "data:image/svg+xml,%3Csvg%20width%3D%2214%22%20height%3D%2215%22%20viewBox%3D%220%200%2014%2015%22%20fill%3D%22black%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20style%3D%22mix-blend-mode%3Adarken%22%3E%3Cpath%20d%3D%22M4.15217%201.55141C3.96412%201.52242%203.95619%201.51902%204.04468%201.5055C4.21427%201.47958%204.61472%201.51491%204.89067%201.58012C5.53489%201.73232%206.12109%202.12221%206.74683%202.81466L6.91307%202.99862L7.15088%202.96062C8.15274%202.8006%209.17194%202.92778%2010.0244%203.31918C10.2589%203.42686%2010.6287%203.64121%2010.6749%203.69629C10.6896%203.71384%2010.7166%203.82684%2010.7349%203.94742C10.7982%204.36458%2010.7665%204.68434%2010.6382%204.92317C10.5683%205.05313%2010.5644%205.09432%2010.6114%205.20554C10.6489%205.2943%2010.7534%205.35999%2010.8569%205.35985C11.0687%205.35956%2011.2968%205.0192%2011.4024%204.54561L11.4444%204.3575L11.5275%204.45109C11.9835%204.96459%2012.3417%205.66488%2012.4032%206.16335L12.4192%206.29332L12.3426%206.17517C12.2107%205.97186%2012.0781%205.83346%2011.9084%205.72183C11.6024%205.52062%2011.2789%205.45215%2010.4222%205.40727C9.64839%205.36675%209.21045%205.30106%208.77621%205.16032C8.03738%204.9209%207.66493%204.60204%206.78729%203.4576C6.39748%202.94928%206.15654%202.66804%205.91687%202.44155C5.37228%201.92691%204.83716%201.65701%204.15217%201.55141Z%22%2F%3E%3Cpath%20d%3D%22M10.8494%202.68637C10.8689%202.34575%2010.9153%202.12108%2011.0088%201.9159C11.0458%201.83469%2011.0804%201.76822%2011.0858%201.76822C11.0911%201.76822%2011.075%201.82816%2011.05%201.90142C10.9821%202.10054%2010.9709%202.3729%2011.0177%202.68978C11.0771%203.09184%2011.1109%203.14985%2011.5385%203.58416C11.739%203.78788%2011.9723%204.0448%2012.0568%204.15511L12.2106%204.35568L12.0568%204.21234C11.8688%204.03705%2011.4364%203.6952%2011.3409%203.64633C11.2768%203.61356%2011.2673%203.61413%2011.2278%203.65321C11.1914%203.68922%2011.1837%203.74333%2011.1787%203.99915C11.1708%204.39786%2011.1161%204.65377%2010.9842%204.90965C10.9128%205.04805%2010.9015%205.01851%2010.9661%204.8623C11.0143%204.74566%2011.0192%204.69439%2011.0189%204.30842C11.0181%203.53291%2010.9255%203.34647%2010.3823%203.02709C10.2447%202.94618%2010.0179%202.8295%209.87839%202.76778C9.73887%202.70606%209.62805%202.6523%209.63208%202.64828C9.64746%202.63307%2010.1772%202.78675%2010.3905%202.86828C10.7077%202.98954%2010.76%203.00526%2010.7985%202.99063C10.8244%202.98082%2010.8369%202.90608%2010.8494%202.68637Z%22%2F%3E%3Cpath%20d%3D%22M4.51745%204.01304C4.13569%203.49066%203.89948%202.68973%203.95062%202.091L3.96643%201.90572L4.05333%201.92148C4.21652%201.95106%204.49789%202.05515%204.62964%202.13469C4.9912%202.35293%205.14773%202.64027%205.30697%203.37811C5.35362%203.59423%205.41482%203.8388%205.44298%203.9216C5.48831%204.05487%205.65962%204.36617%205.7989%204.56834C5.89922%204.71395%205.83258%204.78295%205.61082%204.76305C5.27215%204.73267%204.8134%204.41799%204.51745%204.01304Z%22%2F%3E%3Cpath%20d%3D%22M10.3863%207.90088C8.60224%207.18693%207.97389%206.56721%207.97389%205.52157C7.97389%205.36769%207.97922%205.24179%207.98571%205.24179C7.99221%205.24179%208.06124%205.29257%208.1391%205.35465C8.50088%205.64305%208.906%205.76623%2010.0275%205.92885C10.6875%206.02455%2011.0589%206.10185%2011.4015%206.21477C12.4904%206.57371%2013.1641%207.30212%2013.3248%208.29426C13.3715%208.58255%2013.3441%209.12317%2013.2684%209.4081C13.2087%209.63315%2013.0263%2010.0388%2012.9779%2010.0544C12.9645%2010.0587%2012.9514%2010.0076%2012.9479%209.93809C12.9296%209.56554%2012.7402%209.20285%2012.4221%208.93116C12.0604%208.62227%2011.5745%208.37633%2010.3863%207.90088Z%22%2F%3E%3Cpath%20d%3D%22M9.13385%208.19748C9.11149%208.06527%209.07272%207.89643%209.04769%207.82228L9.00217%207.68748L9.08672%207.7818C9.20374%207.91233%209.2962%208.07937%209.37457%208.30185C9.43438%208.47165%209.44111%208.52215%209.44066%208.79807C9.4402%209.06896%209.43273%209.12575%209.3775%209.27858C9.29042%209.51959%209.18233%209.69048%209.00097%209.87391C8.67507%2010.2036%208.25607%2010.3861%207.65143%2010.4618C7.54633%2010.4749%207.24%2010.4971%206.97069%2010.511C6.292%2010.5461%205.84531%2010.6186%205.44393%2010.7587C5.38623%2010.7788%205.3347%2010.7911%205.32947%2010.7859C5.31323%2010.7698%205.58651%2010.6079%205.81223%2010.4998C6.1305%2010.3474%206.44733%2010.2643%207.15719%2010.1468C7.50785%2010.0887%207.86998%2010.0183%207.96194%209.99029C8.83033%209.72566%209.27671%209.04276%209.13385%208.19748Z%22%2F%3E%3Cpath%20d%3D%22M9.95169%209.64109C9.71465%209.13463%209.66022%208.64564%209.79009%208.18961C9.80399%208.14088%209.82632%208.101%209.83976%208.101C9.85319%208.101%209.90913%208.13105%209.96404%208.16777C10.0733%208.24086%2010.2924%208.36395%2010.876%208.68023C11.6043%209.0749%2012.0196%209.3805%2012.302%209.72965C12.5493%2010.0354%2012.7023%2010.3837%2012.776%2010.8084C12.8177%2011.0489%2012.7932%2011.6277%2012.7311%2011.8699C12.5353%2012.6337%2012.0802%2013.2336%2011.4311%2013.5837C11.336%2013.635%2011.2506%2013.6771%2011.2414%2013.6773C11.2321%2013.6775%2011.2668%2013.5899%2011.3184%2013.4827C11.5367%2013.029%2011.5616%2012.5877%2011.3965%2012.0965C11.2954%2011.7957%2011.0893%2011.4287%2010.6732%2010.8084C10.1893%2010.0873%2010.0707%209.89539%209.95169%209.64109Z%22%2F%3E%3Cpath%20d%3D%22M3.25046%2012.3737C3.91252%2011.8181%204.73629%2011.4234%205.48666%2011.3022C5.81005%2011.25%206.34877%2011.2707%206.64823%2011.3469C7.12824%2011.469%207.55763%2011.7425%207.78094%2012.0683C7.99918%2012.3867%208.09281%2012.6642%208.19029%2013.2816C8.22875%2013.5252%208.27057%2013.7697%208.28323%2013.8251C8.35644%2014.1451%208.4989%2014.4008%208.67544%2014.5293C8.95583%2014.7333%209.43865%2014.7459%209.91362%2014.5618C9.99423%2014.5305%2010.0642%2014.5089%2010.0691%2014.5138C10.0864%2014.5308%209.84719%2014.6899%209.67847%2014.7737C9.45143%2014.8864%209.2709%2014.93%209.03102%2014.93C8.59601%2014.93%208.23486%2014.7101%207.9335%2014.2616C7.87419%2014.1733%207.7409%2013.909%207.63729%2013.6741C7.3191%2012.9528%207.16199%2012.7331%206.79255%2012.4926C6.47104%2012.2834%206.05641%2012.2459%205.74449%2012.3979C5.33475%2012.5976%205.22043%2013.118%205.51389%2013.4478C5.63053%2013.5789%205.84803%2013.6919%206.02588%2013.7139C6.35861%2013.7551%206.64455%2013.5035%206.64455%2013.1696C6.64455%2012.9528%206.56071%2012.8291%206.34966%2012.7344C6.0614%2012.6051%205.75156%2012.7562%205.75304%2013.0254C5.75368%2013.1402%205.80396%2013.2122%205.91971%2013.2643C5.99397%2013.2977%205.99569%2013.3003%205.93514%2013.2878C5.67066%2013.2333%205.6087%2012.9164%205.82135%2012.706C6.07667%2012.4535%206.60461%2012.5649%206.78591%2012.9097C6.86208%2013.0545%206.87092%2013.3429%206.80451%2013.517C6.6559%2013.9068%206.22256%2014.1117%205.78297%2014.0002C5.48368%2013.9242%205.36181%2013.842%205.00097%2013.4726C4.37395%2012.8306%204.13053%2012.7062%203.22657%2012.566L3.05335%2012.5391L3.25046%2012.3737Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M0.308383%200.883984C2.40235%203.40996%203.84457%204.45213%204.00484%204.67231C4.13717%204.85412%204.08737%205.01757%203.86067%205.14567C3.7346%205.21689%203.47541%205.28905%203.34564%205.28905C3.19887%205.28905%203.14847%205.23278%203.14847%205.23278C3.06337%205.15255%203.01544%205.16658%202.5784%204.39555C1.97166%203.45981%201.46389%202.68357%201.45004%202.67057C1.41801%202.64052%201.41856%202.64153%202.51654%204.59413C2.69394%205.0011%202.55182%205.15049%202.55182%205.20845C2.55182%205.32636%202.51946%205.38834%202.37311%205.55059C2.12914%205.8211%202.02008%206.12505%201.94135%206.7541C1.8531%207.45926%201.60492%207.95737%200.917156%208.80989C0.514562%209.30893%200.448686%209.4004%200.3471%209.60153C0.219144%209.85482%200.183961%209.99669%200.169701%2010.3165C0.154629%2010.6547%200.183983%2010.8732%200.287934%2011.1965C0.378939%2011.4796%200.473932%2011.6665%200.716778%2012.0403C0.926351%2012.3629%201.04702%2012.6027%201.04702%2012.6965C1.04702%2012.7711%201.06136%2012.7712%201.38611%2012.6983C2.16328%2012.5239%202.79434%2012.2171%203.14925%2011.8411C3.36891%2011.6084%203.42048%2011.4799%203.42215%2011.1611C3.42325%2010.9525%203.41587%2010.9088%203.35914%2010.7888C3.2668%2010.5935%203.09869%2010.4311%202.72817%2010.1794C2.2427%209.84953%202.03534%209.58398%201.97807%209.21878C1.93108%208.91913%201.98559%208.70771%202.25416%208.14825C2.53214%207.56916%202.60103%207.32239%202.64763%206.73869C2.67773%206.36158%202.71941%206.21286%202.82842%206.09348C2.94212%205.969%203.04447%205.92684%203.32584%205.88863C3.78457%205.82635%204.07667%205.70839%204.31677%205.48849C4.52505%205.29772%204.61221%205.11391%204.62558%204.8372L4.63574%204.62747L4.51934%204.49259C4.09783%204.00411%200.0261003%200.5%200.000160437%200.5C-0.00538105%200.5%200.133325%200.672804%200.308383%200.883984ZM1.28364%2010.6992C1.37894%2010.5314%201.3283%2010.3158%201.16889%2010.2104C1.01827%2010.1109%200.78428%2010.1578%200.78428%2010.2875C0.78428%2010.3271%200.806303%2010.3559%200.855937%2010.3813C0.939514%2010.424%200.945581%2010.4721%200.879823%2010.5703C0.81323%2010.6698%200.818604%2010.7573%200.894991%2010.8167C1.0181%2010.9125%201.19237%2010.8598%201.28364%2010.6992Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M4.92523%205.99865C4.70988%206.06439%204.50054%206.29124%204.43574%206.5291C4.39621%206.67421%204.41864%206.92875%204.47785%207.00736C4.57351%207.13433%204.66602%207.16778%204.91651%207.16603C5.40693%207.16263%205.83327%206.95358%205.88284%206.69224C5.92347%206.47801%205.73622%206.18112%205.4783%206.05078C5.34521%205.98355%205.06217%205.95688%204.92523%205.99865ZM5.49853%206.44422C5.57416%206.33741%205.54107%206.22198%205.41245%206.14391C5.1675%205.99525%204.79708%206.11827%204.79708%206.34826C4.79708%206.46274%204.99025%206.58765%205.16731%206.58765C5.28516%206.58765%205.44644%206.5178%205.49853%206.44422Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"; + +var ContentWrapper$3 = styled__default["default"](AutoColumn)(templateObject_1$18 || (templateObject_1$18 = __makeTemplateObject(["\n width: 100%;\n"], ["\n width: 100%;\n"]))); +var ModalUpper = styled__default["default"](DataCard)(templateObject_2$Q || (templateObject_2$Q = __makeTemplateObject(["\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n"], ["\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n"]))); +var ConfirmOrLoadingWrapper = styled__default["default"].div(templateObject_3$I || (templateObject_3$I = __makeTemplateObject(["\n width: 100%;\n padding: 24px;\n position: relative;\n background: ", ";\n"], ["\n width: 100%;\n padding: 24px;\n position: relative;\n background: ", ";\n"])), function (_a) { + var activeBG = _a.activeBG; + return activeBG && + 'radial-gradient(76.02% 75.41% at 1.84% 0%, rgba(255, 0, 122, 0.2) 0%, rgba(33, 114, 229, 0.2) 100%), #FFFFFF;'; +}); +var ConfirmedIcon$1 = styled__default["default"](ColumnCenter)(templateObject_4$x || (templateObject_4$x = __makeTemplateObject(["\n padding: 60px 0;\n"], ["\n padding: 60px 0;\n"]))); +var SOCKS_AMOUNT = 1000; +var USER_AMOUNT = 400; +function ClaimModal() { + var _a, _b, _c, _d, _e, _f, _g; + var isOpen = useModalOpen(ApplicationModal.SELF_CLAIM); + var toggleClaimModal = useToggleSelfClaimModal(); + var _h = useActiveWeb3React(), account = _h.account, chainId = _h.chainId; + // used for UI loading states + var _j = __read(React.useState(false), 2), attempting = _j[0], setAttempting = _j[1]; + // get user claim data + var userClaimData = useUserClaimData(account); + // monitor the status of the claim from contracts and txns + var claimCallback = useClaimCallback(account).claimCallback; + var unclaimedAmount = useUserUnclaimedAmount(account); + var _k = useUserHasSubmittedClaim(account !== null && account !== void 0 ? account : undefined), claimSubmitted = _k.claimSubmitted, claimTxn = _k.claimTxn; + var claimConfirmed = Boolean(claimTxn === null || claimTxn === void 0 ? void 0 : claimTxn.receipt); + function onClaim() { + setAttempting(true); + claimCallback() + // reset modal and log error + .catch(function (error) { + setAttempting(false); + console.log(error); + }); + } + // once confirmed txn is found, if modal is closed open, mark as not attempting regradless + React.useEffect(function () { + if (claimConfirmed && claimSubmitted && attempting) { + setAttempting(false); + if (!isOpen) { + toggleClaimModal(); + } + } + }, [attempting, claimConfirmed, claimSubmitted, isOpen, toggleClaimModal]); + var nonLPAmount = JSBI__default["default"].multiply(JSBI__default["default"].BigInt((((_a = userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.flags) === null || _a === void 0 ? void 0 : _a.isSOCKS) ? SOCKS_AMOUNT : 0) + (((_b = userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.flags) === null || _b === void 0 ? void 0 : _b.isUser) ? USER_AMOUNT : 0)), JSBI__default["default"].exponentiate(JSBI__default["default"].BigInt(10), JSBI__default["default"].BigInt(18))); + return (jsxRuntime.jsxs(Modal, __assign({ isOpen: isOpen, onDismiss: toggleClaimModal, maxHeight: 90 }, { children: [jsxRuntime.jsx(Confetti, { start: Boolean(isOpen && claimConfirmed) }, void 0), !attempting && !claimConfirmed && (jsxRuntime.jsxs(ContentWrapper$3, __assign({ gap: "lg" }, { children: [jsxRuntime.jsxs(ModalUpper, { children: [jsxRuntime.jsx(CardBGImage, {}, void 0), jsxRuntime.jsx(CardNoise, {}, void 0), jsxRuntime.jsxs(CardSection, __assign({ gap: "md" }, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(ThemedText.White, __assign({ fontWeight: 500 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Claim UNI" }, void 0) }), void 0), jsxRuntime.jsx(CloseIcon$2, { onClick: toggleClaimModal, style: { zIndex: 99 }, color: "white" }, void 0)] }, void 0), jsxRuntime.jsx(ThemedText.White, __assign({ fontWeight: 700, fontSize: 36 }, { children: jsxRuntime.jsxs(macro.Trans, { children: [unclaimedAmount === null || unclaimedAmount === void 0 ? void 0 : unclaimedAmount.toFixed(0, (_c = { groupSeparator: ',' }) !== null && _c !== void 0 ? _c : '-'), " UNI"] }, void 0) }), void 0)] }), void 0), jsxRuntime.jsx(Break$1, {}, void 0), jsxRuntime.jsxs(CardSection, __assign({ gap: "sm" }, { children: [((_d = userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.flags) === null || _d === void 0 ? void 0 : _d.isSOCKS) && (jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(ThemedText.SubHeader, __assign({ color: "white" }, { children: "SOCKS" }), void 0), jsxRuntime.jsx(ThemedText.SubHeader, __assign({ color: "white" }, { children: jsxRuntime.jsxs(macro.Trans, { children: [SOCKS_AMOUNT, " UNI"] }, void 0) }), void 0)] }, void 0)), ((_e = userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.flags) === null || _e === void 0 ? void 0 : _e.isLP) && + unclaimedAmount && + JSBI__default["default"].greaterThanOrEqual(unclaimedAmount.quotient, nonLPAmount) && (jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(ThemedText.SubHeader, __assign({ color: "white" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Liquidity" }, void 0) }), void 0), jsxRuntime.jsx(ThemedText.SubHeader, __assign({ color: "white" }, { children: jsxRuntime.jsxs(macro.Trans, { children: [unclaimedAmount + .subtract(sdkCore.CurrencyAmount.fromRawAmount(unclaimedAmount.currency, nonLPAmount)) + .toFixed(0, { groupSeparator: ',' }), ' ', "UNI"] }, void 0) }), void 0)] }, void 0)), ((_f = userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.flags) === null || _f === void 0 ? void 0 : _f.isUser) && (jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(ThemedText.SubHeader, __assign({ color: "white" }, { children: jsxRuntime.jsx(macro.Trans, { children: "User" }, void 0) }), void 0), jsxRuntime.jsx(ThemedText.SubHeader, __assign({ color: "white" }, { children: jsxRuntime.jsxs(macro.Trans, { children: [USER_AMOUNT, " UNI"] }, void 0) }), void 0)] }, void 0))] }), void 0)] }, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "md", style: { padding: '1rem', paddingTop: '0' }, justify: "center" }, { children: [jsxRuntime.jsx(ThemedText.SubHeader, __assign({ fontWeight: 500 }, { children: jsxRuntime.jsxs(macro.Trans, { children: ["As a member of the Uniswap community you may claim UNI to be used for voting and governance.", jsxRuntime.jsx("br", {}, void 0), jsxRuntime.jsx("br", {}, void 0), jsxRuntime.jsx(ExternalLink, __assign({ href: "https://uniswap.org/blog/uni" }, { children: "Read more about UNI" }), void 0)] }, void 0) }), void 0), jsxRuntime.jsx(ButtonPrimary, __assign({ disabled: !address.isAddress(account !== null && account !== void 0 ? account : ''), padding: "16px 16px", width: "100%", "$borderRadius": "12px", mt: "1rem", onClick: onClaim }, { children: jsxRuntime.jsx(macro.Trans, { children: "Claim UNI" }, void 0) }), void 0)] }), void 0)] }), void 0)), (attempting || claimConfirmed) && (jsxRuntime.jsxs(ConfirmOrLoadingWrapper, __assign({ activeBG: true }, { children: [jsxRuntime.jsx(CardNoise, {}, void 0), jsxRuntime.jsx(CardBGImageSmaller, { desaturate: true }, void 0), jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx("div", {}, void 0), jsxRuntime.jsx(CloseIcon$2, { onClick: toggleClaimModal, style: { zIndex: 99 }, stroke: "black" }, void 0)] }, void 0), jsxRuntime.jsx(ConfirmedIcon$1, { children: !claimConfirmed ? (jsxRuntime.jsx(CustomLightSpinner, { src: Circle$1, alt: "loader", size: '90px' }, void 0)) : (jsxRuntime.jsx(UniTokenAnimated, { width: "72px", src: tokenLogo, alt: "UNI" }, void 0)) }, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "100px", justify: 'center' }, { children: [jsxRuntime.jsxs(AutoColumn, __assign({ gap: "12px", justify: 'center' }, { children: [jsxRuntime.jsx(ThemedText.LargeHeader, __assign({ fontWeight: 600, color: "black" }, { children: claimConfirmed ? jsxRuntime.jsx(macro.Trans, { children: "Claimed!" }, void 0) : jsxRuntime.jsx(macro.Trans, { children: "Claiming" }, void 0) }), void 0), !claimConfirmed && (jsxRuntime.jsx(rebass.Text, __assign({ fontSize: 36, color: '#ff007a', fontWeight: 800 }, { children: jsxRuntime.jsxs(macro.Trans, { children: [unclaimedAmount === null || unclaimedAmount === void 0 ? void 0 : unclaimedAmount.toFixed(0, (_g = { groupSeparator: ',' }) !== null && _g !== void 0 ? _g : '-'), " UNI"] }, void 0) }), void 0))] }), void 0), claimConfirmed && (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsx(ThemedText.SubHeader, __assign({ fontWeight: 500, color: "black" }, { children: jsxRuntime.jsxs(macro.Trans, { children: [jsxRuntime.jsxs("span", __assign({ role: "img", "aria-label": "party-hat" }, { children: ["\uD83C\uDF89", ' '] }), void 0), "Welcome to team Unicorn :)", ' ', jsxRuntime.jsx("span", __assign({ role: "img", "aria-label": "party-hat" }, { children: "\uD83C\uDF89" }), void 0)] }, void 0) }), void 0) }, void 0)), attempting && !claimSubmitted && (jsxRuntime.jsx(ThemedText.SubHeader, __assign({ color: "black" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Confirm this transaction in your wallet" }, void 0) }), void 0)), attempting && claimSubmitted && !claimConfirmed && chainId && (claimTxn === null || claimTxn === void 0 ? void 0 : claimTxn.hash) && (jsxRuntime.jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, claimTxn === null || claimTxn === void 0 ? void 0 : claimTxn.hash, ExplorerDataType.TRANSACTION), style: { zIndex: 99 } }, { children: jsxRuntime.jsx(macro.Trans, { children: "View transaction on Explorer" }, void 0) }), void 0))] }), void 0)] }), void 0))] }), void 0)); +} +var templateObject_1$18, templateObject_2$Q, templateObject_3$I, templateObject_4$x; + +var Card = styled__default["default"](styledComponents.Box)(templateObject_1$17 || (templateObject_1$17 = __makeTemplateObject(["\n width: ", ";\n padding: ", ";\n border-radius: ", ";\n border: ", ";\n"], ["\n width: ", ";\n padding: ", ";\n border-radius: ", ";\n border: ", ";\n"])), function (_a) { + var width = _a.width; + return width !== null && width !== void 0 ? width : '100%'; +}, function (_a) { + var padding = _a.padding; + return padding !== null && padding !== void 0 ? padding : '1rem'; +}, function (_a) { + var $borderRadius = _a.$borderRadius; + return $borderRadius !== null && $borderRadius !== void 0 ? $borderRadius : '16px'; +}, function (_a) { + var border = _a.border; + return border; +}); +var LightCard = styled__default["default"](Card)(templateObject_2$P || (templateObject_2$P = __makeTemplateObject(["\n border: 1px solid ", ";\n background-color: ", ";\n"], ["\n border: 1px solid ", ";\n background-color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}, function (_a) { + var theme = _a.theme; + return theme.bg1; +}); +var LightGreyCard = styled__default["default"](Card)(templateObject_3$H || (templateObject_3$H = __makeTemplateObject(["\n background-color: ", ";\n"], ["\n background-color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}); +var GreyCard = styled__default["default"](Card)(templateObject_4$w || (templateObject_4$w = __makeTemplateObject(["\n background-color: ", ";\n"], ["\n background-color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg3; +}); +var DarkGreyCard = styled__default["default"](Card)(templateObject_5$p || (templateObject_5$p = __makeTemplateObject(["\n background-color: ", ";\n"], ["\n background-color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}); +styled__default["default"](Card)(templateObject_6$k || (templateObject_6$k = __makeTemplateObject(["\n background-color: ", ";\n"], ["\n background-color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg0; +}); +var OutlineCard = styled__default["default"](Card)(templateObject_7$h || (templateObject_7$h = __makeTemplateObject(["\n border: 1px solid ", ";\n"], ["\n border: 1px solid ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg3; +}); +styled__default["default"](Card)(templateObject_8$f || (templateObject_8$f = __makeTemplateObject(["\n background-color: rgba(243, 132, 30, 0.05);\n color: ", ";\n font-weight: 500;\n"], ["\n background-color: rgba(243, 132, 30, 0.05);\n color: ", ";\n font-weight: 500;\n"])), function (_a) { + var theme = _a.theme; + return theme.yellow3; +}); +styled__default["default"](Card)(templateObject_9$e || (templateObject_9$e = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n border-radius: 12px;\n"], ["\n background-color: ", ";\n color: ", ";\n border-radius: 12px;\n"])), function (_a) { + var theme = _a.theme; + return theme.primary5; +}, function (_a) { + var theme = _a.theme; + return theme.blue2; +}); +var templateObject_1$17, templateObject_2$P, templateObject_3$H, templateObject_4$w, templateObject_5$p, templateObject_6$k, templateObject_7$h, templateObject_8$f, templateObject_9$e; + +var Wrapper$h = styled__default["default"].div(templateObject_1$16 || (templateObject_1$16 = __makeTemplateObject(["\n max-height: 70vh;\n overflow: auto;\n padding: 0 1rem;\n"], ["\n max-height: 70vh;\n overflow: auto;\n padding: 0 1rem;\n"]))); +var StyledExternalCard = styled__default["default"](Card)(templateObject_2$O || (templateObject_2$O = __makeTemplateObject(["\n background-color: ", ";\n padding: 0.5rem;\n width: 100%;\n\n :hover,\n :focus,\n :active {\n background-color: ", ";\n }\n"], ["\n background-color: ", ";\n padding: 0.5rem;\n width: 100%;\n\n :hover,\n :focus,\n :active {\n background-color: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.primary5; +}, function (_a) { + var theme = _a.theme; + return theme.primary4; +}); +var HoverText$1 = styled__default["default"].div(templateObject_3$G || (templateObject_3$G = __makeTemplateObject(["\n text-decoration: none;\n color: ", ";\n display: flex;\n align-items: center;\n\n :hover {\n cursor: pointer;\n }\n"], ["\n text-decoration: none;\n color: ", ";\n display: flex;\n align-items: center;\n\n :hover {\n cursor: pointer;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text1; +}); +var StyledLinkOut = styled__default["default"](reactFeather.ArrowDown)(templateObject_4$v || (templateObject_4$v = __makeTemplateObject(["\n transform: rotate(230deg);\n"], ["\n transform: rotate(230deg);\n"]))); +var EXTERNAL_APIS = [ + { + name: 'Auto Router', + description: jsxRuntime.jsx(macro.Trans, { children: "The app fetches the optimal trade route from a Uniswap Labs server." }, void 0), + }, + { + name: 'Infura', + description: jsxRuntime.jsx(macro.Trans, { children: "The app fetches on-chain data and constructs contract calls with an Infura API." }, void 0), + }, + { + name: 'TRM Labs', + description: (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(macro.Trans, { children: "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons." }, void 0), ' ', jsxRuntime.jsx(ExternalLink, __assign({ href: "https://help.uniswap.org/en/articles/5675203-terms-of-service-faq" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Learn more" }, void 0) }), void 0)] }, void 0)), + }, + { + name: 'Google Analytics', + description: jsxRuntime.jsx(macro.Trans, { children: "The app logs anonymized usage statistics in order to improve over time." }, void 0), + }, + { + name: 'The Graph', + description: jsxRuntime.jsx(macro.Trans, { children: "The app fetches blockchain data from The Graph\u2019s hosted service." }, void 0), + }, +]; +function PrivacyPolicyModal() { + var node = React.useRef(); + var open = useModalOpen(ApplicationModal.PRIVACY_POLICY); + var toggle = useTogglePrivacyPolicy(); + React.useEffect(function () { + if (!open) + return; + ReactGA__default["default"].event({ + category: 'Modal', + action: 'Show Legal', + }); + }, [open]); + return (jsxRuntime.jsx(Modal, __assign({ isOpen: open, onDismiss: function () { return toggle(); } }, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "12px", ref: node }, { children: [jsxRuntime.jsxs(RowBetween, __assign({ padding: "1rem 1rem 0.5rem 1rem" }, { children: [jsxRuntime.jsx(ThemedText.MediumHeader, { children: jsxRuntime.jsx(macro.Trans, { children: "Legal & Privacy" }, void 0) }, void 0), jsxRuntime.jsx(HoverText$1, __assign({ onClick: function () { return toggle(); } }, { children: jsxRuntime.jsx(reactFeather.X, { size: 24 }, void 0) }), void 0)] }), void 0), jsxRuntime.jsx(PrivacyPolicy, {}, void 0)] }), void 0) }), void 0)); +} +function PrivacyPolicy() { + return (jsxRuntime.jsx(Wrapper$h, __assign({ draggable: "true", onTouchMove: function (e) { + // prevent modal gesture handler from dismissing modal when content is scrolling + if (isMobile) { + e.stopPropagation(); + } + } }, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "16px" }, { children: [jsxRuntime.jsxs(AutoColumn, __assign({ gap: "8px", style: { width: '100%' } }, { children: [jsxRuntime.jsx(StyledExternalCard, { children: jsxRuntime.jsx(ExternalLink, __assign({ href: 'https://uniswap.org/terms-of-service' }, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsxs(AutoRow, __assign({ gap: "4px" }, { children: [jsxRuntime.jsx(reactFeather.Info, { size: 20 }, void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: 14, color: 'primaryText1' }, { children: jsxRuntime.jsx(macro.Trans, { children: "Uniswap Labs' Terms of Service" }, void 0) }), void 0)] }), void 0), jsxRuntime.jsx(StyledLinkOut, { size: 20 }, void 0)] }, void 0) }), void 0) }, void 0), jsxRuntime.jsx(StyledExternalCard, { children: jsxRuntime.jsx(ExternalLink, __assign({ href: 'https://uniswap.org/disclaimer/' }, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsxs(AutoRow, __assign({ gap: "4px" }, { children: [jsxRuntime.jsx(reactFeather.Info, { size: 20 }, void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: 14, color: 'primaryText1' }, { children: jsxRuntime.jsx(macro.Trans, { children: "Protocol Disclaimer" }, void 0) }), void 0)] }), void 0), jsxRuntime.jsx(StyledLinkOut, { size: 20 }, void 0)] }, void 0) }), void 0) }, void 0)] }), void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: 14 }, { children: jsxRuntime.jsx(macro.Trans, { children: "This app uses the following third-party APIs:" }, void 0) }), void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "12px" }, { children: [EXTERNAL_APIS.map(function (_a, i) { + var name = _a.name, description = _a.description; + return (jsxRuntime.jsx(DarkGreyCard, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "8px" }, { children: [jsxRuntime.jsxs(AutoRow, __assign({ gap: "4px" }, { children: [jsxRuntime.jsx(reactFeather.Info, { size: 18 }, void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: 14, color: 'text1' }, { children: name }), void 0)] }), void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: 14 }, { children: description }), void 0)] }), void 0) }, i)); + }), jsxRuntime.jsx(Row$1, __assign({ justify: "center", marginBottom: "1rem" }, { children: jsxRuntime.jsx(ExternalLink, __assign({ href: "https://help.uniswap.org/en/articles/5675203-terms-of-service-faq" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Learn more" }, void 0) }), void 0) }), void 0)] }), void 0)] }), void 0) }), void 0)); +} +var templateObject_1$16, templateObject_2$O, templateObject_3$G, templateObject_4$v; + +function getAugmentedNamespace(n) { + if (n.__esModule) return n; + var a = Object.defineProperty({}, '__esModule', {value: true}); + Object.keys(n).forEach(function (k) { + var d = Object.getOwnPropertyDescriptor(n, k); + Object.defineProperty(a, k, d.get ? d : { + enumerable: true, + get: function () { + return n[k]; + } + }); + }); + return a; +} + +/*eslint-disable*/ + +var enUS={messages:{"$-":"$-","$<0/>":"$<0/>","${0}":["$",["0"]],"(${0})":["($",["0"],")"],"(View on Explorer)":"(View on Explorer)","(clear all)":"(clear all)","(edit)":"(edit)","- Remove recipient":"- Remove recipient","0 UNI / week":"0 UNI / week","25%":"25%","50%":"50%","75%":"75%","<0/> All Proposals":"<0/> All Proposals","<0/> Votes":"<0/> Votes","<0>Account analytics and accrued fees<1> ↗ ":"<0>Account analytics and accrued fees<1> ↗ ","<0>Current Price:<1><2/><3>{0} per {1}":["<0>Current Price:<1><2/><3>",["0"]," per ",["1"],""],"<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.":"<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.","<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.":"<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.","<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.":"<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.","<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.":"<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.","<0>Unlock voting to prepare for the next proposal.":"<0>Unlock voting to prepare for the next proposal.","<0>🎉 Welcome to team Unicorn :) <1>🎉":"<0>🎉 Welcome to team Unicorn :) <1>🎉","A minimum threshold of 0.25% of the total UNI supply is required to submit proposals":"A minimum threshold of 0.25% of the total UNI supply is required to submit proposals","About":"About","Accept":"Accept","Account":"Account","Active":"Active","Add":"Add","Add <0/> and <1/> to Uniswap V2":"Add <0/> and <1/> to Uniswap V2","Add Delegate +":"Add Delegate +","Add Liquidity":"Add Liquidity","Add V2 Liquidity":"Add V2 Liquidity","Add liquidity.":"Add liquidity.","Add more liquidity":"Add more liquidity","Add {0} to Metamask <0/>":["Add ",["0"]," to Metamask <0/>"],"Add {0}-{1} liquidity":["Add ",["0"],"-",["1"]," liquidity"],"Add {0}/{1} V3 liquidity":["Add ",["0"],"/",["1"]," V3 liquidity"],"Added {0}":["Added ",["0"]],"Address has no available claim":"Address has no available claim","Against":"Against","Allow LP token migration":"Allow LP token migration","Allow high price impact trades and skip the confirm screen. Use at your own risk.":"Allow high price impact trades and skip the confirm screen. Use at your own risk.","Allow the Uniswap Protocol to use your {0}":["Allow the Uniswap Protocol to use your ",["0"]],"Allowed":"Allowed","Amount":"Amount","An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.":"An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.","Approval pending <0/>":"Approval pending <0/>","Approve":"Approve","Approve Token":"Approve Token","Approve {0}":["Approve ",["0"]],"Approve {0} first":["Approve ",["0"]," first"],"Approved":"Approved","Approving":"Approving","Approving {0}":["Approving ",["0"]],"Arbiscan":"Arbiscan","Arbitrum Bridge":"Arbitrum Bridge","Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.":"Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.","Are you sure?":"Are you sure?","As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI":"As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI","At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.":["At least ",["0"]," ",["1"]," and ",["2"]," ",["3"]," will be refunded to your wallet due to selected price range."],"Auto":"Auto","Auto Router API":"Auto Router API","Available to deposit: {0}":["Available to deposit: ",["0"]],"Balance: {0}":["Balance: ",["0"]],"Best for exotic pairs.":"Best for exotic pairs.","Best for most pairs.":"Best for most pairs.","Best for stable pairs.":"Best for stable pairs.","Best for very stable pairs.":"Best for very stable pairs.","Best price route costs ~{formattedGasPriceString} in gas.":["Best price route costs ~",["formattedGasPriceString"]," in gas."],"Blocked address":"Blocked address","Bridge":"Bridge","By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.":"By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.","By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.":"By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.","By connecting a wallet, you agree to Uniswap Labs’ <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.":"By connecting a wallet, you agree to Uniswap Labs’ <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.","Canceled":"Canceled","Change":"Change","Charts":"Charts","Check network status":"Check network status","Check out our v3 LP walkthrough and migration guides.":"Check out our v3 LP walkthrough and migration guides.","Claim":"Claim","Claim <0/> for {0}":["Claim <0/> for ",["0"]],"Claim UNI":"Claim UNI","Claim UNI Token":"Claim UNI Token","Claim UNI reward for {0}":["Claim UNI reward for ",["0"]],"Claim fees":"Claim fees","Claim your UNI tokens":"Claim your UNI tokens","Claimed":"Claimed","Claimed UNI!":"Claimed UNI!","Claimed!":"Claimed!","Claiming":"Claiming","Claiming UNI":"Claiming UNI","Claiming {0} UNI":["Claiming ",["0"]," UNI"],"Clear All":"Clear All","Clear all":"Clear all","Close":"Close","Closed":"Closed","Collect":"Collect","Collect as WETH":"Collect as WETH","Collect fees":"Collect fees","Collect {0}/{1} fees":["Collect ",["0"],"/",["1"]," fees"],"Collected":"Collected","Collecting":"Collecting","Collecting fees":"Collecting fees","Collecting fees will withdraw currently available fees for you.":"Collecting fees will withdraw currently available fees for you.","Confirm":"Confirm","Confirm Supply":"Confirm Supply","Confirm Swap":"Confirm Swap","Confirm swap":"Confirm swap","Confirm this transaction in your wallet":"Confirm this transaction in your wallet","Confirm transaction in wallet":"Confirm transaction in wallet","Connect Wallet":"Connect Wallet","Connect a wallet":"Connect a wallet","Connect to a wallet to find pools":"Connect to a wallet to find pools","Connect to a wallet to view your V2 liquidity.":"Connect to a wallet to view your V2 liquidity.","Connect to a wallet to view your liquidity.":"Connect to a wallet to view your liquidity.","Connect wallet to swap":"Connect wallet to swap","Connected with {name}":["Connected with ",["name"]],"Copied":"Copied","Copy Address":"Copy Address","Create Pool & Supply":"Create Pool & Supply","Create Proposal":"Create Proposal","Create a pair":"Create a pair","Create a pool":"Create a pool","Create an issue on GitHub":"Create an issue on GitHub","Create pool and add {0}/{1} V3 liquidity":["Create pool and add ",["0"],"/",["1"]," V3 liquidity"],"Create pool.":"Create pool.","Create {0}/{1} V3 pool":["Create ",["0"],"/",["1"]," V3 pool"],"Current price":"Current price","Current {0} Price:":["Current ",["0"]," Price:"],"Custom":"Custom","Dark Theme":"Dark Theme","Defeated":"Defeated","Delegate Votes":"Delegate Votes","Delegate voting power to {0}":["Delegate voting power to ",["0"]],"Delegated to:":"Delegated to:","Delegating votes":"Delegating votes","Deposit":"Deposit","Deposit Amounts":"Deposit Amounts","Deposit UNI-V2 LP Tokens":"Deposit UNI-V2 LP Tokens","Deposit liquidity":"Deposit liquidity","Deposit tokens to the {label} network.":["Deposit tokens to the ",["label"]," network."],"Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.":"Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.","Deposited liquidity:":"Deposited liquidity:","Deposited {0} UNI-V2":["Deposited ",["0"]," UNI-V2"],"Depositing Liquidity":"Depositing Liquidity","Description":"Description","Detailed":"Detailed","Details":"Details","Disconnect":"Disconnect","Discord":"Discord","Dismiss":"Dismiss","Docs":"Docs","Don’t see one of your v2 positions? <0>Import it.":"Don’t see one of your v2 positions? <0>Import it.","Earned UNI tokens represent voting shares in Uniswap governance.":"Earned UNI tokens represent voting shares in Uniswap governance.","Edit":"Edit","Efficiency Comparison":"Efficiency Comparison","Enter a percent":"Enter a percent","Enter a recipient":"Enter a recipient","Enter a valid slippage percentage":"Enter a valid slippage percentage","Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.":"Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.","Enter an amount":"Enter an amount","Enter valid list location":"Enter valid list location","Enter valid token address":"Enter valid token address","Enter {0} amount":["Enter ",["0"]," amount"],"Error":"Error","Error connecting":"Error connecting","Error connecting. Try refreshing the page.":"Error connecting. Try refreshing the page.","Error details":"Error details","Error importing list":"Error importing list","Estimate may differ due to your wallet gas settings":"Estimate may differ due to your wallet gas settings","Estimated network fee":"Estimated network fee","Etherscan":"Etherscan","Executed":"Executed","Expanded results from inactive Token Lists":"Expanded results from inactive Token Lists","Expected Output":"Expected Output","Expert Mode":"Expert Mode","Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.":"Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.","Expired":"Expired","Explore Uniswap Analytics.":"Explore Uniswap Analytics.","Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.":["Failed to switch networks from the Uniswap Interface. In order to use Uniswap on ",["0"],", you must change the network in your wallet."],"Fee Tier":"Fee Tier","Fee tier":"Fee tier","Fetching best price...":"Fetching best price...","Fetching best price…":"Fetching best price…","For":"For","For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.":"For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.","From":"From","From (at most)":"From (at most)","Full Range":"Full Range","Full range positions may earn less fees than concentrated positions. Learn more <0>here.":"Full range positions may earn less fees than concentrated positions. Learn more <0>here.","Get support on Discord":"Get support on Discord","Help Center":"Help Center","Hide":"Hide","Hide closed positions":"Hide closed positions","High Price Impact":"High Price Impact","How this app uses APIs":"How this app uses APIs","I understand":"I understand","If you purchase a token from this list, you may not be able to sell it back.":"If you purchase a token from this list, you may not be able to sell it back.","Import":"Import","Import List":"Import List","Import Pool":"Import Pool","Import V2 Pool":"Import V2 Pool","Import at your own risk":"Import at your own risk","In range":"In range","Increase Liquidity":"Increase Liquidity","Initial prices and pool share":"Initial prices and pool share","Initializing...":"Initializing...","Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.":["Input is estimated. You will sell at most <0>",["0"]," ",["1"]," or the transaction will revert."],"Install Metamask":"Install Metamask","Insufficient liquidity for this trade.":"Insufficient liquidity for this trade.","Insufficient {0}":["Insufficient ",["0"]],"Insufficient {0} balance":["Insufficient ",["0"]," balance"],"Interface Settings":"Interface Settings","Invalid pair":"Invalid pair","Invalid pair.":"Invalid pair.","Invalid price input":"Invalid price input","Invalid range selected. The min price must be lower than the max price.":"Invalid range selected. The min price must be lower than the max price.","Invalid recipient":"Invalid recipient","Language":"Language","Learn":"Learn","Learn about providing liquidity":"Learn about providing liquidity","Learn more":"Learn more","Legal & Privacy":"Legal & Privacy","Light Theme":"Light Theme","Liquidity":"Liquidity","Liquidity data not available.":"Liquidity data not available.","Liquidity provider rewards":"Liquidity provider rewards","Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.":"Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.","Lists":"Lists","Loaded":"Loaded","Loading":"Loading","MAX":"MAX","Manage":"Manage","Manage Liquidity in Rewards Pool":"Manage Liquidity in Rewards Pool","Manage Token Lists":"Manage Token Lists","Manage this pool.":"Manage this pool.","Max":"Max","Max Price":"Max Price","Max price":"Max price","Max slippage":"Max slippage","Max:":"Max:","Maximum sent":"Maximum sent","Menu":"Menu","Migrate":"Migrate","Migrate Liquidity to V3":"Migrate Liquidity to V3","Migrate V2 Liquidity":"Migrate V2 Liquidity","Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.":"Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.","Migrate {0}/{1} liquidity to V3":["Migrate ",["0"],"/",["1"]," liquidity to V3"],"Migrating":"Migrating","Min Price":"Min Price","Min price":"Min price","Min:":"Min:","Minimum received":"Minimum received","Missing dependencies":"Missing dependencies","Mock Toggle":"Mock Toggle","More":"More","Network Fee":"Network Fee","Network Warning":"Network Warning","Network fees exceed 50% of the swap amount!":"Network fees exceed 50% of the swap amount!","New Position":"New Position","No V2 Liquidity found.":"No V2 Liquidity found.","No active pools":"No active pools","No data":"No data","No description.":"No description.","No liquidity found.":"No liquidity found.","No pool found.":"No pool found.","No proposals found.":"No proposals found.","No results found.":"No results found.","Not created":"Not created","OFF":"OFF","ON":"ON","ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.":"ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.","Off":"Off","On":"On","Once you are happy with the rate click supply to review.":"Once you are happy with the rate click supply to review.","Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.":["Only UNI votes that were self delegated or delegated to another address before block ",["0"]," are eligible for voting."],"Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.":"Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.","Optimism Gateway":"Optimism Gateway","Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.":"Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.","Optimistic Etherscan":"Optimistic Etherscan","Out of range":"Out of range","Output is estimated.":"Output is estimated.","Output is estimated. If the price changes by more than {0}% your transaction will revert.":["Output is estimated. If the price changes by more than ",["0"],"% your transaction will revert."],"Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.":["Output is estimated. You will receive at least <0>",["0"]," ",["1"]," or the transaction will revert."],"Output will be sent to <0>{0}":["Output will be sent to <0>",["0"],""],"Owner":"Owner","Participating pools":"Participating pools","Pending":"Pending","Please confirm you would like to remove this list by typing REMOVE":"Please confirm you would like to remove this list by typing REMOVE","Please connect to Layer 1 Ethereum":"Please connect to Layer 1 Ethereum","Please connect to a supported network in the dropdown menu or in your wallet.":"Please connect to a supported network in the dropdown menu or in your wallet.","Please type the word \"{confirmWord}\" to enable expert mode.":["Please type the word \"",["confirmWord"],"\" to enable expert mode."],"Polygon Bridge":"Polygon Bridge","Polygonscan":"Polygonscan","Pool":"Pool","Pool Found!":"Pool Found!","Pool Rate":"Pool Rate","Pool rate":"Pool rate","Pool tokens in rewards pool:":"Pool tokens in rewards pool:","Pooled {0}:":["Pooled ",["0"],":"],"Pools Overview":"Pools Overview","Preview":"Preview","Price":"Price","Price Difference:":"Price Difference:","Price Impact":"Price Impact","Price Impact Too High":"Price Impact Too High","Price Updated":"Price Updated","Price impact":"Price impact","Price range":"Price range","Price updated":"Price updated","Price:":"Price:","Prices and pool share":"Prices and pool share","Proposal":"Proposal","Proposal Submitted":"Proposal Submitted","Proposal Title":"Proposal Title","Proposals":"Proposals","Proposals submitted by community members will appear here.":"Proposals submitted by community members will appear here.","Proposed Action":"Proposed Action","Proposer":"Proposer","Protocol Disclaimer":"Protocol Disclaimer","Queued":"Queued","Rates":"Rates","Read more about UNI":"Read more about UNI","Read more about Uniswap governance":"Read more about Uniswap governance","Read more about providing liquidity":"Read more about providing liquidity","Read more about unsupported assets":"Read more about unsupported assets","Recent Transactions":"Recent Transactions","Recent transactions":"Recent transactions","Recipient":"Recipient","Reload the page":"Reload the page","Remove":"Remove","Remove <0/> and <1/>":"Remove <0/> and <1/>","Remove Amount":"Remove Amount","Remove Delegate":"Remove Delegate","Remove Liquidity":"Remove Liquidity","Remove list":"Remove list","Removing {0} {1} and {2} {3}":["Removing ",["0"]," ",["1"]," and ",["2"]," ",["3"]],"Removing {0} {1} and{2} {3}":["Removing ",["0"]," ",["1"]," and",["2"]," ",["3"]],"Request Features":"Request Features","Reset":"Reset","Return":"Return","Review swap":"Review swap","Search by token name or address":"Search by token name or address","Search name or paste address":"Search name or paste address","Select Pair":"Select Pair","Select a network":"Select a network","Select a token":"Select a token","Select a token to find your v2 liquidity.":"Select a token to find your v2 liquidity.","Select an action":"Select an action","Selected Range":"Selected Range","Self":"Self","Self Delegate":"Self Delegate","Set Price Range":"Set Price Range","Set Starting Price":"Set Starting Price","Settings":"Settings","Share of Pool":"Share of Pool","Share of Pool:":"Share of Pool:","Show Portis":"Show Portis","Show closed positions":"Show closed positions","Simple":"Simple","Slippage tolerance":"Slippage tolerance","Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.":"Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.","Something went wrong":"Something went wrong","Something went wrong.":"Something went wrong.","Step 1. Get UNI-V2 Liquidity tokens":"Step 1. Get UNI-V2 Liquidity tokens","Submit new proposal":"Submit new proposal","Submitting Proposal":"Submitting Proposal","Submitting Vote":"Submitting Vote","Succeeded":"Succeeded","Success":"Success","Supply":"Supply","Supplying {0} {1} and {2} {3}":["Supplying ",["0"]," ",["1"]," and ",["2"]," ",["3"]],"Swap":"Swap","Swap <0/> for exactly <1/>":"Swap <0/> for exactly <1/>","Swap Anyway":"Swap Anyway","Swap details":"Swap details","Swap exactly <0/> for <1/>":"Swap exactly <0/> for <1/>","Swap failed: {0}":["Swap failed: ",["0"]],"Swap summary":"Swap summary","Swapping {0} {1} for {2} {3}":["Swapping ",["0"]," ",["1"]," for ",["2"]," ",["3"]],"Take a 10 minute survey to help us improve your experience in the Uniswap app.":"Take a 10 minute survey to help us improve your experience in the Uniswap app.","Tell us what you think ↗":"Tell us what you think ↗","Thanks for being part of the Uniswap community <0/>":"Thanks for being part of the Uniswap community <0/>","The % you will earn in fees.":"The % you will earn in fees.","The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.":"The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.","The app fetches blockchain data from The Graph’s hosted service.":"The app fetches blockchain data from The Graph’s hosted service.","The app fetches on-chain data and constructs contract calls with an Infura API.":"The app fetches on-chain data and constructs contract calls with an Infura API.","The app fetches the optimal trade route from a Uniswap Labs server.":"The app fetches the optimal trade route from a Uniswap Labs server.","The app logs anonymized usage statistics in order to improve over time.":"The app logs anonymized usage statistics in order to improve over time.","The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.":"The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.","The cost of sending this transaction is more than half of the value of the input amount.":"The cost of sending this transaction is more than half of the value of the input amount.","The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.":"The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.","The estimated difference between the USD values of input and output amounts.":"The estimated difference between the USD values of input and output amounts.","The input token cannot be transferred. There may be an issue with the input token.":"The input token cannot be transferred. There may be an issue with the input token.","The market price is outside your specified price range. Single-asset deposit only.":"The market price is outside your specified price range. Single-asset deposit only.","The most recent block number on this network. Prices update on every block.":"The most recent block number on this network. Prices update on every block.","The output token cannot be transferred. There may be an issue with the output token.":"The output token cannot be transferred. There may be an issue with the output token.","The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.":"The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.","The price of this pool is outside of your selected range. Your position is not currently earning fees.":"The price of this pool is outside of your selected range. Your position is not currently earning fees.","The price of this pool is within your selected range. Your position is currently earning fees.":"The price of this pool is within your selected range. Your position is currently earning fees.","The ratio of tokens you add will set the price of this pool.":"The ratio of tokens you add will set the price of this pool.","The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.":"The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.","There is no liquidity data.":"There is no liquidity data.","This app uses the following third-party APIs:":"This app uses the following third-party APIs:","This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.":"This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.","This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.":"This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.","This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.":"This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.","This token is not supported in the Uniswap Labs app":"This token is not supported in the Uniswap Labs app","This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the":["This tool will safely migrate your ",["0"]," liquidity to V3. The process is completely trustless thanks to the"],"This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.":"This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.","This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.":"This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.","Tip: Custom tokens are stored locally in your browser":"Tip: Custom tokens are stored locally in your browser","To":"To","To (at least)":"To (at least)","Token not supported":"Token not supported","Tokens":"Tokens","Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.":"Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.","Top pools":"Top pools","Total deposited":"Total deposited","Total deposits":"Total deposits","Trade Route":"Trade Route","Trading":"Trading","Transaction Settings":"Transaction Settings","Transaction Submitted":"Transaction Submitted","Transaction completed in":"Transaction completed in","Transaction deadline":"Transaction deadline","Transaction pending":"Transaction pending","Transaction rejected.":"Transaction rejected.","Transaction submitted":"Transaction submitted","Transfer Token":"Transfer Token","Try Again":"Try Again","Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.":"Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.","Turn On Expert Mode":"Turn On Expert Mode","UNI has arrived":"UNI has arrived","UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.":"UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.","UNI {0}/{1} Burned":["UNI ",["0"],"/",["1"]," Burned"],"UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.":["UNI-V2 LP tokens are required. Once you've added liquidity to the ",["0"],"-",["1"]," pool you can stake your liquidity tokens on this page."],"UNI-V2 {0}-{1}":["UNI-V2 ",["0"],"-",["1"]],"Unclaimed UNI":"Unclaimed UNI","Unclaimed fees":"Unclaimed fees","Undetermined":"Undetermined","Unexpected error. Could not estimate gas for the swap.":"Unexpected error. Could not estimate gas for the swap.","Unexpected issue with estimating the gas. Please try again.":"Unexpected issue with estimating the gas. Please try again.","Uniswap Governance":"Uniswap Governance","Uniswap Labs' Terms of Service":"Uniswap Labs' Terms of Service","Uniswap available in: <0>{0}":["Uniswap available in: <0>",["0"],""],"Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.":"Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.","Uniswap liquidity mining":"Uniswap liquidity mining","Uniswap migration contract↗":"Uniswap migration contract↗","Unknown Source":"Unknown Source","Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.":["Unknown error",["0"],". Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3."],"Unlock Votes":"Unlock Votes","Unlock Voting":"Unlock Voting","Unlocking Votes":"Unlocking Votes","Unsupported Asset":"Unsupported Asset","Unsupported Assets":"Unsupported Assets","Unsupported network–switch to another to trade.":"Unsupported network–switch to another to trade.","Untitled":"Untitled","Unwrap":"Unwrap","Unwrap <0/> to {0}":["Unwrap <0/> to ",["0"]],"Update Delegation":"Update Delegation","Update list":"Update list","Use the Uniswap Labs API to get faster quotes.":"Use the Uniswap Labs API to get faster quotes.","User":"User","V2 is not available on Layer 2. Switch to Layer 1 Ethereum.":"V2 is not available on Layer 2. Switch to Layer 1 Ethereum.","V2 liquidity":"V2 liquidity","V3 {0} Price:":["V3 ",["0"]," Price:"],"View accrued fees and analytics<0>↗":"View accrued fees and analytics<0>↗","View list":"View list","View on Etherscan":"View on Etherscan","View on Explorer":"View on Explorer","View transaction on Explorer":"View transaction on Explorer","Vote":"Vote","Vote Against":"Vote Against","Vote For":"Vote For","Vote against proposal {proposalId}":["Vote against proposal ",["proposalId"]],"Vote against proposal {proposalKey}":["Vote against proposal ",["proposalKey"]],"Vote against proposal {proposalKey} with reason \"{0}\"":["Vote against proposal ",["proposalKey"]," with reason \"",["0"],"\""],"Vote for proposal {proposalId}":["Vote for proposal ",["proposalId"]],"Vote for proposal {proposalKey}":["Vote for proposal ",["proposalKey"]],"Vote for proposal {proposalKey} with reason \"{0}\"":["Vote for proposal ",["proposalKey"]," with reason \"",["0"],"\""],"Vote to abstain on proposal {proposalId}":["Vote to abstain on proposal ",["proposalId"]],"Vote to abstain on proposal {proposalKey}":["Vote to abstain on proposal ",["proposalKey"]],"Vote to abstain on proposal {proposalKey} with reason \"{0}\"":["Vote to abstain on proposal ",["proposalKey"]," with reason \"",["0"],"\""],"Voting ended {0}":["Voting ended ",["0"]],"Voting ends approximately {0}":["Voting ends approximately ",["0"]],"Voting starts approximately {0}":["Voting starts approximately ",["0"]],"Waiting For Confirmation":"Waiting For Confirmation","Wallet Address or ENS name":"Wallet Address or ENS name","Weekly Rewards":"Weekly Rewards","Welcome to team Unicorn :)":"Welcome to team Unicorn :)","When you claim without withdrawing your liquidity remains in the mining pool.":"When you claim without withdrawing your liquidity remains in the mining pool.","When you withdraw, the contract will automagically claim UNI on your behalf!":"When you withdraw, the contract will automagically claim UNI on your behalf!","When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.":"When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.","Withdraw":"Withdraw","Withdraw & Claim":"Withdraw & Claim","Withdraw deposited liquidity":"Withdraw deposited liquidity","Withdrawing {0} UNI-V2":["Withdrawing ",["0"]," UNI-V2"],"Withdrew UNI-V2!":"Withdrew UNI-V2!","Wrap":"Wrap","Wrap <0/> to {0}":["Wrap <0/> to ",["0"]],"Wrong Network":"Wrong Network","You already have an active or pending proposal":"You already have an active or pending proposal","You are creating a pool":"You are creating a pool","You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.":["You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current ",["0"]," price."],"You are the first liquidity provider.":"You are the first liquidity provider.","You can either vote on each proposal yourself or delegate your votes to a third party.":"You can either vote on each proposal yourself or delegate your votes to a third party.","You can now trade {0}":["You can now trade ",["0"]],"You don't have enough votes to submit a proposal":"You don't have enough votes to submit a proposal","You don’t have liquidity in this pool yet.":"You don’t have liquidity in this pool yet.","You may have lost your network connection, or {label} might be down right now.":["You may have lost your network connection, or ",["label"]," might be down right now."],"You may have lost your network connection.":"You may have lost your network connection.","You might consider waiting until the network fees go down to complete this transaction.":"You might consider waiting until the network fees go down to complete this transaction.","You must connect an account.":"You must connect an account.","You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.":["You must give the Uniswap smart contracts permission to use your ",["0"],". You only have to do this once per token."],"You must have {formattedProposalThreshold} votes to submit a proposal":["You must have ",["formattedProposalThreshold"]," votes to submit a proposal"],"You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.":"You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.","You will also collect fees earned from this position.":"You will also collect fees earned from this position.","You will receive":"You will receive","You will receive at least {0} {1} or the transaction will revert.":["You will receive at least ",["0"]," ",["1"]," or the transaction will revert."],"You will send at most {0} {1} or the transaction will revert.":["You will send at most ",["0"]," ",["1"]," or the transaction will revert."],"Your V2 liquidity":"Your V2 liquidity","Your active V3 liquidity positions will appear here.":"Your active V3 liquidity positions will appear here.","Your liquidity deposits":"Your liquidity deposits","Your pool share:":"Your pool share:","Your position":"Your position","Your position has 0 liquidity, and is not earning fees.":"Your position has 0 liquidity, and is not earning fees.","Your position will appear here.":"Your position will appear here.","Your position will be 100% composed of {0} at this price":["Your position will be 100% composed of ",["0"]," at this price"],"Your position will be 100% {0} at this price.":["Your position will be 100% ",["0"]," at this price."],"Your position will not earn fees or be used in trades until the market price moves into your range.":"Your position will not earn fees or be used in trades until the market price moves into your range.","Your positions":"Your positions","Your rate":"Your rate","Your total pool tokens:":"Your total pool tokens:","Your transaction cost will be much higher as it includes the gas to create the pool.":"Your transaction cost will be much higher as it includes the gas to create the pool.","Your transaction may be frontrun":"Your transaction may be frontrun","Your transaction may fail":"Your transaction may fail","Your transaction will revert if it has been pending for longer than this period of time.":"Your transaction will revert if it has been pending for longer than this period of time.","Your transaction will revert if it is pending for more than this period of time.":"Your transaction will revert if it is pending for more than this period of time.","Your transaction will revert if the price changes unfavorably by more than this percentage.":"Your transaction will revert if the price changes unfavorably by more than this percentage.","Your transactions will appear here...":"Your transactions will appear here...","Your unclaimed UNI":"Your unclaimed UNI","after slippage":"after slippage","confirm":"confirm","for {0}":["for ",["0"]],"gwei":"gwei","has socks emoji":"has socks emoji","here.":"here.","https:// or ipfs:// or ENS name":"https:// or ipfs:// or ENS name","minutes":"minutes","via {0}":["via ",["0"]],"via {0} token list":["via ",["0"]," token list"],"{0, plural, one {Import token} other {Import tokens}}":[["0","plural",{one:"Import token",other:"Import tokens"}]],"{0}":[["0"]],"{0} %":[["0"]," %"],"{0} <0/> per <1/>":[["0"]," <0/> per <1/>"],"{0} Custom Tokens":[["0"]," Custom Tokens"],"{0} Deposited":[["0"]," Deposited"],"{0} ETH":[["0"]," ETH"],"{0} Fees Earned:":[["0"]," Fees Earned:"],"{0} Pending":[["0"]," Pending"],"{0} UNI":[["0"]," UNI"],"{0} UNI / week":[["0"]," UNI / week"],"{0} UNI-V2":[["0"]," UNI-V2"],"{0} UNI-V2 LP tokens available":[["0"]," UNI-V2 LP tokens available"],"{0} Votes":[["0"]," Votes"],"{0} per {1}":[["0"]," per ",["1"]],"{0} tokens":[["0"]," tokens"],"{0} {1} Price:":[["0"]," ",["1"]," Price:"],"{0} {nativeCurrencySymbol}":[["0"]," ",["nativeCurrencySymbol"]],"{0} • Added by user":[["0"]," • Added by user"],"{0}%":[["0"],"%"],"{0}% fee tier":[["0"],"% fee tier"],"{0}% pool":[["0"],"% pool"],"{0}% select":[["0"],"% select"],"{0}-{1} Liquidity Mining":[["0"],"-",["1"]," Liquidity Mining"],"{0}/{1} LP NFT":[["0"],"/",["1"]," LP NFT"],"{0}/{1} LP Tokens":[["0"],"/",["1"]," LP Tokens"],"{SOCKS_AMOUNT} UNI":[["SOCKS_AMOUNT"]," UNI"],"{USER_AMOUNT} UNI":[["USER_AMOUNT"]," UNI"],"{activeTokensOnThisChain} tokens":[["activeTokensOnThisChain"]," tokens"],"{integrator} fee":[["integrator"]," fee"],"{label} token bridge":[["label"]," token bridge"],"{min}m {sec}s":[["min"],"m ",["sec"],"s"],"{percentForSlider}%":[["percentForSlider"],"%"],"{sec}s":[["sec"],"s"],"{tokenB} per {tokenA}":[["tokenB"]," per ",["tokenA"]],"← Back to Pools Overview":"← Back to Pools Overview"}}; + +var enUS$1 = /*#__PURE__*/Object.freeze(/*#__PURE__*/_mergeNamespaces({ + __proto__: null, + 'default': enUS +}, [enUS])); + +var SUPPORTED_LOCALES = [ + // order as they appear in the language dropdown + 'en-US', + 'af-ZA', + 'ar-SA', + 'ca-ES', + 'cs-CZ', + 'da-DK', + 'de-DE', + 'el-GR', + 'es-ES', + 'fi-FI', + 'fr-FR', + 'he-IL', + 'hu-HU', + 'id-ID', + 'it-IT', + 'ja-JP', + 'ko-KR', + 'nl-NL', + 'no-NO', + 'pl-PL', + 'pt-BR', + 'pt-PT', + 'ro-RO', + 'ru-RU', + 'sr-SP', + 'sv-SE', + 'sw-TZ', + 'tr-TR', + 'uk-UA', + 'vi-VN', + 'zh-CN', + 'zh-TW', +]; +var DEFAULT_LOCALE = 'en-US'; +var DEFAULT_CATALOG = enUS$1; +var LOCALE_LABEL = { + 'af-ZA': 'Afrikaans', + 'ar-SA': 'العربية', + 'ca-ES': 'Català', + 'cs-CZ': 'čeština', + 'da-DK': 'dansk', + 'de-DE': 'Deutsch', + 'el-GR': 'ελληνικά', + 'en-US': 'English', + 'es-ES': 'Español', + 'fi-FI': 'suomi', + 'fr-FR': 'français', + 'he-IL': 'עִברִית', + 'hu-HU': 'Magyar', + 'id-ID': 'bahasa Indonesia', + 'it-IT': 'Italiano', + 'ja-JP': '日本語', + 'ko-KR': '한국어', + 'nl-NL': 'Nederlands', + 'no-NO': 'norsk', + 'pl-PL': 'Polskie', + 'pt-BR': 'português', + 'pt-PT': 'português', + 'ro-RO': 'Română', + 'ru-RU': 'русский', + 'sr-SP': 'Српски', + 'sv-SE': 'svenska', + 'sw-TZ': 'Kiswahili', + 'tr-TR': 'Türkçe', + 'uk-UA': 'Український', + 'vi-VN': 'Tiếng Việt', + 'zh-CN': '简体中文', + 'zh-TW': '繁体中文', + pseudo: 'ƥƨèúδô', +}; + +var _a$4, _b$2, _c$2; +/** + * Given a locale string (e.g. from user agent), return the best match for corresponding SupportedLocale + * @param maybeSupportedLocale the fuzzy locale identifier + */ +function parseLocale(maybeSupportedLocale) { + if (typeof maybeSupportedLocale !== 'string') + return undefined; + var lowerMaybeSupportedLocale = maybeSupportedLocale.toLowerCase(); + return SUPPORTED_LOCALES.find(function (locale) { return locale.toLowerCase() === lowerMaybeSupportedLocale || locale.split('-')[0] === lowerMaybeSupportedLocale; }); +} +/** + * Returns the supported locale read from the user agent (navigator) + */ +function navigatorLocale() { + var _a; + if (!navigator.language) + return undefined; + var _b = __read(navigator.language.split('-'), 2), language = _b[0], region = _b[1]; + if (region) { + return (_a = parseLocale(language + "-" + region.toUpperCase())) !== null && _a !== void 0 ? _a : parseLocale(language); + } + return parseLocale(language); +} +function storeLocale() { + var _a; + return (_a = store.getState().user.userLocale) !== null && _a !== void 0 ? _a : undefined; +} +var initialLocale = (_c$2 = (_b$2 = (_a$4 = parseLocale(parsedQueryString().lng)) !== null && _a$4 !== void 0 ? _a$4 : storeLocale()) !== null && _b$2 !== void 0 ? _b$2 : navigatorLocale()) !== null && _c$2 !== void 0 ? _c$2 : DEFAULT_LOCALE; +function useUrlLocale() { + var parsed = useParsedQueryString(); + return parseLocale(parsed.lng); +} +/** + * Returns the currently active locale, from a combination of user agent, query string, and user settings stored in redux + * Stores the query string locale in redux (if set) to persist across sessions + */ +function useActiveLocale() { + var urlLocale = useUrlLocale(); + var userLocale = useUserLocale(); + return React.useMemo(function () { var _a, _b; return (_b = (_a = urlLocale !== null && urlLocale !== void 0 ? urlLocale : userLocale) !== null && _a !== void 0 ? _a : navigatorLocale()) !== null && _b !== void 0 ? _b : DEFAULT_LOCALE; }, [urlLocale, userLocale]); +} + +function useLocationLinkProps(locale) { + var location = reactRouterDom.useLocation(); + var qs$1 = useParsedQueryString(); + var activeLocale = useActiveLocale(); + return React.useMemo(function () { + return !locale + ? {} + : { + to: __assign(__assign({}, location), { search: qs.stringify(__assign(__assign({}, qs$1), { lng: locale })) }), + onClick: function () { + ReactGA__default["default"].event({ + category: 'Localization', + action: 'Switch Locale', + label: activeLocale + " -> " + locale, + }); + }, + }; + }, [location, qs$1, activeLocale, locale]); +} + +var _path$4, _path2$1, _path3; + +function _extends$6() { _extends$6 = 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$6.apply(this, arguments); } + +var SvgMenu = function SvgMenu(props) { + return /*#__PURE__*/React__namespace.createElement("svg", _extends$6({ + width: 24, + height: 24, + viewBox: "0 0 24 24", + fill: "none", + xmlns: "http://www.w3.org/2000/svg" + }, props), _path$4 || (_path$4 = /*#__PURE__*/React__namespace.createElement("path", { + d: "M12 13C12.5523 13 13 12.5523 13 12C13 11.4477 12.5523 11 12 11C11.4477 11 11 11.4477 11 12C11 12.5523 11.4477 13 12 13Z", + stroke: "black", + strokeWidth: 2, + strokeLinecap: "round", + strokeLinejoin: "round" + })), _path2$1 || (_path2$1 = /*#__PURE__*/React__namespace.createElement("path", { + d: "M19 13C19.5523 13 20 12.5523 20 12C20 11.4477 19.5523 11 19 11C18.4477 11 18 11.4477 18 12C18 12.5523 18.4477 13 19 13Z", + stroke: "black", + strokeWidth: 2, + strokeLinecap: "round", + strokeLinejoin: "round" + })), _path3 || (_path3 = /*#__PURE__*/React__namespace.createElement("path", { + d: "M5 13C5.55228 13 6 12.5523 6 12C6 11.4477 5.55228 11 5 11C4.44772 11 4 11.4477 4 12C4 12.5523 4.44772 13 5 13Z", + stroke: "black", + strokeWidth: 2, + strokeLinecap: "round", + strokeLinejoin: "round" + }))); +}; + +function useOnClickOutside(node, handler) { + var handlerRef = React.useRef(handler); + React.useEffect(function () { + handlerRef.current = handler; + }, [handler]); + React.useEffect(function () { + var handleClickOutside = function (e) { + var _a, _b; + if ((_b = (_a = node.current) === null || _a === void 0 ? void 0 : _a.contains(e.target)) !== null && _b !== void 0 ? _b : false) { + return; + } + if (handlerRef.current) + handlerRef.current(); + }; + document.addEventListener('mousedown', handleClickOutside); + return function () { + document.removeEventListener('mousedown', handleClickOutside); + }; + }, [node]); +} + +var FlyoutAlignment; +(function (FlyoutAlignment) { + FlyoutAlignment["LEFT"] = "LEFT"; + FlyoutAlignment["RIGHT"] = "RIGHT"; +})(FlyoutAlignment || (FlyoutAlignment = {})); +var StyledMenuIcon$1 = styled__default["default"](SvgMenu)(templateObject_1$15 || (templateObject_1$15 = __makeTemplateObject(["\n path {\n stroke: ", ";\n }\n"], ["\n path {\n stroke: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text1; +}); +var StyledMenuButton$1 = styled__default["default"].button(templateObject_2$N || (templateObject_2$N = __makeTemplateObject(["\n width: 100%;\n height: 100%;\n border: none;\n background-color: transparent;\n margin: 0;\n padding: 0;\n height: 40px;\n background-color: ", ";\n border: 1px solid ", ";\n padding: 0.15rem 0.5rem;\n border-radius: 16px;\n\n :hover,\n :focus {\n cursor: pointer;\n outline: none;\n border: 1px solid ", ";\n }\n\n svg {\n margin-top: 2px;\n }\n"], ["\n width: 100%;\n height: 100%;\n border: none;\n background-color: transparent;\n margin: 0;\n padding: 0;\n height: 40px;\n background-color: ", ";\n border: 1px solid ", ";\n padding: 0.15rem 0.5rem;\n border-radius: 16px;\n\n :hover,\n :focus {\n cursor: pointer;\n outline: none;\n border: 1px solid ", ";\n }\n\n svg {\n margin-top: 2px;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.bg0; +}, function (_a) { + var theme = _a.theme; + return theme.bg0; +}, function (_a) { + var theme = _a.theme; + return theme.bg3; +}); +var UNIbutton = styled__default["default"](ButtonPrimary)(templateObject_3$F || (templateObject_3$F = __makeTemplateObject(["\n background-color: ", ";\n background: radial-gradient(174.47% 188.91% at 1.84% 0%, #ff007a 0%, #2172e5 100%), #edeef2;\n border: none;\n"], ["\n background-color: ", ";\n background: radial-gradient(174.47% 188.91% at 1.84% 0%, #ff007a 0%, #2172e5 100%), #edeef2;\n border: none;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg3; +}); +var StyledMenu$2 = styled__default["default"].div(templateObject_4$u || (templateObject_4$u = __makeTemplateObject(["\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n text-align: left;\n"], ["\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n text-align: left;\n"]))); +var MenuFlyout$1 = styled__default["default"].span(templateObject_8$e || (templateObject_8$e = __makeTemplateObject(["\n min-width: 196px;\n max-height: 350px;\n overflow: auto;\n background-color: ", ";\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 border: 1px solid ", ";\n border-radius: 12px;\n padding: 0.5rem;\n display: flex;\n flex-direction: column;\n font-size: 16px;\n position: absolute;\n top: 3rem;\n z-index: 100;\n\n ", ";\n ", ";\n"], ["\n min-width: 196px;\n max-height: 350px;\n overflow: auto;\n background-color: ", ";\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 border: 1px solid ", ";\n border-radius: 12px;\n padding: 0.5rem;\n display: flex;\n flex-direction: column;\n font-size: 16px;\n position: absolute;\n top: 3rem;\n z-index: 100;\n\n ", ";\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var theme = _a.theme; + return theme.bg0; +}, function (_a) { + var _b = _a.flyoutAlignment, flyoutAlignment = _b === void 0 ? FlyoutAlignment.RIGHT : _b; + return flyoutAlignment === FlyoutAlignment.RIGHT + ? styled.css(templateObject_5$o || (templateObject_5$o = __makeTemplateObject(["\n right: 0rem;\n "], ["\n right: 0rem;\n "]))) : styled.css(templateObject_6$j || (templateObject_6$j = __makeTemplateObject(["\n left: 0rem;\n "], ["\n left: 0rem;\n "]))); +}, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToMedium(templateObject_7$g || (templateObject_7$g = __makeTemplateObject(["\n bottom: unset;\n right: 0;\n left: unset;\n "], ["\n bottom: unset;\n right: 0;\n left: unset;\n "]))); +}); +var MenuItem$1 = styled__default["default"](ExternalLink)(templateObject_9$d || (templateObject_9$d = __makeTemplateObject(["\n display: flex;\n flex: 1;\n flex-direction: row;\n align-items: center;\n padding: 0.5rem 0.5rem;\n justify-content: space-between;\n color: ", ";\n :hover {\n color: ", ";\n cursor: pointer;\n text-decoration: none;\n }\n"], ["\n display: flex;\n flex: 1;\n flex-direction: row;\n align-items: center;\n padding: 0.5rem 0.5rem;\n justify-content: space-between;\n color: ", ";\n :hover {\n color: ", ";\n cursor: pointer;\n text-decoration: none;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text2; +}, function (_a) { + var theme = _a.theme; + return theme.text1; +}); +var InternalMenuItem = styled__default["default"](reactRouterDom.Link)(templateObject_10$a || (templateObject_10$a = __makeTemplateObject(["\n flex: 1;\n padding: 0.5rem 0.5rem;\n color: ", ";\n :hover {\n color: ", ";\n cursor: pointer;\n text-decoration: none;\n }\n > svg {\n margin-right: 8px;\n }\n"], ["\n flex: 1;\n padding: 0.5rem 0.5rem;\n color: ", ";\n :hover {\n color: ", ";\n cursor: pointer;\n text-decoration: none;\n }\n > svg {\n margin-right: 8px;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text2; +}, function (_a) { + var theme = _a.theme; + return theme.text1; +}); +var InternalLinkMenuItem = styled__default["default"](InternalMenuItem)(templateObject_11$8 || (templateObject_11$8 = __makeTemplateObject(["\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: 0.5rem 0.5rem;\n justify-content: space-between;\n text-decoration: none;\n :hover {\n color: ", ";\n cursor: pointer;\n text-decoration: none;\n }\n"], ["\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: 0.5rem 0.5rem;\n justify-content: space-between;\n text-decoration: none;\n :hover {\n color: ", ";\n cursor: pointer;\n text-decoration: none;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text1; +}); +var ToggleMenuItem = styled__default["default"].button(templateObject_12$8 || (templateObject_12$8 = __makeTemplateObject(["\n background-color: transparent;\n margin: 0;\n padding: 0;\n border: none;\n display: flex;\n flex: 1;\n flex-direction: row;\n align-items: center;\n padding: 0.5rem 0.5rem;\n justify-content: space-between;\n font-size: 1rem;\n font-weight: 500;\n color: ", ";\n :hover {\n color: ", ";\n cursor: pointer;\n text-decoration: none;\n }\n"], ["\n background-color: transparent;\n margin: 0;\n padding: 0;\n border: none;\n display: flex;\n flex: 1;\n flex-direction: row;\n align-items: center;\n padding: 0.5rem 0.5rem;\n justify-content: space-between;\n font-size: 1rem;\n font-weight: 500;\n color: ", ";\n :hover {\n color: ", ";\n cursor: pointer;\n text-decoration: none;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text2; +}, function (_a) { + var theme = _a.theme; + return theme.text1; +}); +function LanguageMenuItem(_a) { + var locale = _a.locale, active = _a.active, key = _a.key; + var _b = useLocationLinkProps(locale), to = _b.to, onClick = _b.onClick; + if (!to) + return null; + return (jsxRuntime.jsxs(InternalLinkMenuItem, __assign({ onClick: onClick, to: to }, { children: [jsxRuntime.jsx("div", { children: LOCALE_LABEL[locale] }, void 0), active && jsxRuntime.jsx(reactFeather.Check, { opacity: 0.6, size: 16 }, void 0)] }), key)); +} +function LanguageMenu(_a) { + var close = _a.close; + var activeLocale = useActiveLocale(); + return (jsxRuntime.jsxs(MenuFlyout$1, { children: [jsxRuntime.jsx(ToggleMenuItem, __assign({ onClick: close }, { children: jsxRuntime.jsx(reactFeather.ChevronLeft, { size: 16 }, void 0) }), void 0), SUPPORTED_LOCALES.map(function (locale) { return (jsxRuntime.jsx(LanguageMenuItem, { locale: locale, active: activeLocale === locale }, locale)); })] }, void 0)); +} +function Menu() { + var _a = useActiveWeb3React(), account = _a.account, chainId = _a.chainId; + var node = React.useRef(); + var open = useModalOpen(ApplicationModal.MENU); + var toggleMenu = useToggleModal(ApplicationModal.MENU); + useOnClickOutside(node, open ? toggleMenu : undefined); + var togglePrivacyPolicy = useToggleModal(ApplicationModal.PRIVACY_POLICY); + var openClaimModal = useToggleModal(ApplicationModal.ADDRESS_CLAIM); + var showUNIClaimOption = Boolean(!!account && !!chainId && !L2_CHAIN_IDS.includes(chainId)); + var _b = __read(useDarkModeManager(), 2), darkMode = _b[0], toggleDarkMode = _b[1]; + var _c = __read(React.useState('main'), 2), menu = _c[0], setMenu = _c[1]; + React.useEffect(function () { + setMenu('main'); + }, [open]); + return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs(StyledMenu$2, __assign({ ref: node }, { children: [jsxRuntime.jsx(StyledMenuButton$1, __assign({ onClick: toggleMenu, "aria-label": macro.t(templateObject_13$4 || (templateObject_13$4 = __makeTemplateObject(["Menu"], ["Menu"]))) }, { children: jsxRuntime.jsx(StyledMenuIcon$1, {}, void 0) }), void 0), open && + (function () { + switch (menu) { + case 'lang': + return jsxRuntime.jsx(LanguageMenu, { close: function () { return setMenu('main'); } }, void 0); + case 'main': + default: + return (jsxRuntime.jsxs(MenuFlyout$1, { children: [jsxRuntime.jsxs(MenuItem$1, __assign({ href: "https://uniswap.org/" }, { children: [jsxRuntime.jsx("div", { children: jsxRuntime.jsx(macro.Trans, { children: "About" }, void 0) }, void 0), jsxRuntime.jsx(reactFeather.Info, { opacity: 0.6, size: 16 }, void 0)] }), void 0), jsxRuntime.jsxs(MenuItem$1, __assign({ href: "https://help.uniswap.org/" }, { children: [jsxRuntime.jsx("div", { children: jsxRuntime.jsx(macro.Trans, { children: "Help Center" }, void 0) }, void 0), jsxRuntime.jsx(reactFeather.HelpCircle, { opacity: 0.6, size: 16 }, void 0)] }), void 0), jsxRuntime.jsxs(MenuItem$1, __assign({ href: "https://uniswap.canny.io/feature-requests" }, { children: [jsxRuntime.jsx("div", { children: jsxRuntime.jsx(macro.Trans, { children: "Request Features" }, void 0) }, void 0), jsxRuntime.jsx(reactFeather.Coffee, { opacity: 0.6, size: 16 }, void 0)] }), void 0), jsxRuntime.jsxs(MenuItem$1, __assign({ href: "https://discord.gg/FCfyBSbCU5" }, { children: [jsxRuntime.jsx("div", { children: jsxRuntime.jsx(macro.Trans, { children: "Discord" }, void 0) }, void 0), jsxRuntime.jsx(reactFeather.MessageCircle, { opacity: 0.6, size: 16 }, void 0)] }), void 0), jsxRuntime.jsxs(ToggleMenuItem, __assign({ onClick: function () { return setMenu('lang'); } }, { children: [jsxRuntime.jsx("div", { children: jsxRuntime.jsx(macro.Trans, { children: "Language" }, void 0) }, void 0), jsxRuntime.jsx(reactFeather.Globe, { opacity: 0.6, size: 16 }, void 0)] }), void 0), jsxRuntime.jsxs(ToggleMenuItem, __assign({ onClick: function () { return toggleDarkMode(); } }, { children: [jsxRuntime.jsx("div", { children: darkMode ? jsxRuntime.jsx(macro.Trans, { children: "Light Theme" }, void 0) : jsxRuntime.jsx(macro.Trans, { children: "Dark Theme" }, void 0) }, void 0), darkMode ? jsxRuntime.jsx(reactFeather.Moon, { opacity: 0.6, size: 16 }, void 0) : jsxRuntime.jsx(reactFeather.Sun, { opacity: 0.6, size: 16 }, void 0)] }), void 0), jsxRuntime.jsxs(MenuItem$1, __assign({ href: "https://docs.uniswap.org/" }, { children: [jsxRuntime.jsx("div", { children: jsxRuntime.jsx(macro.Trans, { children: "Docs" }, void 0) }, void 0), jsxRuntime.jsx(reactFeather.BookOpen, { opacity: 0.6, size: 16 }, void 0)] }), void 0), jsxRuntime.jsxs(ToggleMenuItem, __assign({ onClick: function () { return togglePrivacyPolicy(); } }, { children: [jsxRuntime.jsx("div", { children: jsxRuntime.jsx(macro.Trans, { children: "Legal & Privacy" }, void 0) }, void 0), jsxRuntime.jsx(reactFeather.FileText, { opacity: 0.6, size: 16 }, void 0)] }), void 0), showUNIClaimOption && (jsxRuntime.jsx(UNIbutton, __assign({ onClick: openClaimModal, padding: "8px 16px", width: "100%", "$borderRadius": "12px", mt: "0.5rem" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Claim UNI" }, void 0) }), void 0))] }, void 0)); + } + })()] }), void 0), jsxRuntime.jsx(PrivacyPolicyModal, {}, void 0)] }, void 0)); +} +styled__default["default"](MenuFlyout$1)(templateObject_14$4 || (templateObject_14$4 = __makeTemplateObject(["\n top: 3rem !important;\n"], ["\n top: 3rem !important;\n"]))); +styled__default["default"](InternalMenuItem)(templateObject_15$2 || (templateObject_15$2 = __makeTemplateObject(["\n width: max-content;\n text-decoration: none;\n"], ["\n width: max-content;\n text-decoration: none;\n"]))); +styled__default["default"](MenuItem$1)(templateObject_16$2 || (templateObject_16$2 = __makeTemplateObject(["\n width: max-content;\n text-decoration: none;\n"], ["\n width: max-content;\n text-decoration: none;\n"]))); +var templateObject_1$15, templateObject_2$N, templateObject_3$F, templateObject_4$u, templateObject_5$o, templateObject_6$j, templateObject_7$g, templateObject_8$e, templateObject_9$d, templateObject_10$a, templateObject_11$8, templateObject_12$8, templateObject_13$4, templateObject_14$4, templateObject_15$2, templateObject_16$2; + +var loadingAnimation = styled.keyframes(templateObject_1$14 || (templateObject_1$14 = __makeTemplateObject(["\n 0% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0% 50%;\n }\n"], ["\n 0% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0% 50%;\n }\n"]))); +var LoadingRows = styled__default["default"].div(templateObject_2$M || (templateObject_2$M = __makeTemplateObject(["\n display: grid;\n\n & > div {\n animation: ", " 1.5s infinite;\n animation-fill-mode: both;\n background: linear-gradient(\n to left,\n ", " 25%,\n ", " 50%,\n ", " 75%\n );\n background-size: 400%;\n border-radius: 12px;\n height: 2.4em;\n will-change: background-position;\n }\n"], ["\n display: grid;\n\n & > div {\n animation: ", " 1.5s infinite;\n animation-fill-mode: both;\n background: linear-gradient(\n to left,\n ", " 25%,\n ", " 50%,\n ", " 75%\n );\n background-size: 400%;\n border-radius: 12px;\n height: 2.4em;\n will-change: background-position;\n }\n"])), loadingAnimation, function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var theme = _a.theme; + return theme.bg2; +}, function (_a) { + var theme = _a.theme; + return theme.bg1; +}); +var loadingOpacityMixin = styled.css(templateObject_3$E || (templateObject_3$E = __makeTemplateObject(["\n filter: ", ";\n opacity: ", ";\n transition: opacity 0.2s ease-in-out;\n"], ["\n filter: ", ";\n opacity: ", ";\n transition: opacity 0.2s ease-in-out;\n"])), function (_a) { + var $loading = _a.$loading; + return ($loading ? 'grayscale(1)' : 'none'); +}, function (_a) { + var $loading = _a.$loading; + return ($loading ? '0.4' : '1'); +}); +var LoadingOpacityContainer = styled__default["default"].div(templateObject_4$t || (templateObject_4$t = __makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), loadingOpacityMixin); +var templateObject_1$14, templateObject_2$M, templateObject_3$E, templateObject_4$t; + +/** + * Invokes callback repeatedly over an interval defined by the delay + * @param callback + * @param delay if null, the callback will not be invoked + * @param leading if true, the callback will be invoked immediately (on the leading edge); otherwise, it will be invoked after delay + */ +function useInterval(callback, delay, leading) { + if (leading === void 0) { leading = true; } + var savedCallback = React.useRef(); + // Remember the latest callback. + React.useEffect(function () { + savedCallback.current = callback; + }, [callback]); + // Set up the interval. + React.useEffect(function () { + function tick() { + var current = savedCallback.current; + current && current(); + } + if (delay !== null) { + if (leading) + tick(); + var id_1 = setInterval(tick, delay); + return function () { return clearInterval(id_1); }; + } + return; + }, [delay, leading]); +} + +var PopoverContainer$1 = styled__default["default"].div(templateObject_1$13 || (templateObject_1$13 = __makeTemplateObject(["\n z-index: 9999;\n visibility: ", ";\n opacity: ", ";\n transition: visibility 150ms linear, opacity 150ms linear;\n color: ", ";\n"], ["\n z-index: 9999;\n visibility: ", ";\n opacity: ", ";\n transition: visibility 150ms linear, opacity 150ms linear;\n color: ", ";\n"])), function (props) { return (props.show ? 'visible' : 'hidden'); }, function (props) { return (props.show ? 1 : 0); }, function (_a) { + var theme = _a.theme; + return theme.text2; +}); +var ReferenceElement = styled__default["default"].div(templateObject_2$L || (templateObject_2$L = __makeTemplateObject(["\n display: inline-block;\n"], ["\n display: inline-block;\n"]))); +var Arrow = styled__default["default"].div(templateObject_3$D || (templateObject_3$D = __makeTemplateObject(["\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 ", ";\n transform: rotate(45deg);\n background: ", ";\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 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 ", ";\n transform: rotate(45deg);\n background: ", ";\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"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}, function (_a) { + var theme = _a.theme; + return theme.bg0; +}); +function Popover(_a) { + var _b, _c; + var content = _a.content, show = _a.show, children = _a.children, _d = _a.placement, placement = _d === void 0 ? 'auto' : _d; + var _e = __read(React.useState(null), 2), referenceElement = _e[0], setReferenceElement = _e[1]; + var _f = __read(React.useState(null), 2), popperElement = _f[0], setPopperElement = _f[1]; + var _g = __read(React.useState(null), 2), arrowElement = _g[0], setArrowElement = _g[1]; + var options = React.useMemo(function () { return ({ + placement: placement, + strategy: 'fixed', + modifiers: [ + { name: 'offset', options: { offset: [8, 8] } }, + { name: 'arrow', options: { element: arrowElement } }, + { name: 'preventOverflow', options: { padding: 8 } }, + ], + }); }, [arrowElement, placement]); + var _h = reactPopper.usePopper(referenceElement, popperElement, options), styles = _h.styles, update = _h.update, attributes = _h.attributes; + var updateCallback = React.useCallback(function () { + update && update(); + }, [update]); + useInterval(updateCallback, show ? 100 : null); + return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(ReferenceElement, __assign({ ref: setReferenceElement }, { children: children }), void 0), jsxRuntime.jsx(Portal__default["default"], { children: jsxRuntime.jsxs(PopoverContainer$1, __assign({ show: show, ref: setPopperElement, style: styles.popper }, attributes.popper, { children: [content, jsxRuntime.jsx(Arrow, __assign({ className: "arrow-" + ((_c = (_b = attributes.popper) === null || _b === void 0 ? void 0 : _b['data-popper-placement']) !== null && _c !== void 0 ? _c : ''), ref: setArrowElement, style: styles.arrow }, attributes.arrow), void 0)] }), void 0) }, void 0)] }, void 0)); +} +var templateObject_1$13, templateObject_2$L, templateObject_3$D; + +var TooltipContainer = styled__default["default"].div(templateObject_1$12 || (templateObject_1$12 = __makeTemplateObject(["\n max-width: 256px;\n padding: 0.6rem 1rem;\n font-weight: 400;\n word-break: break-word;\n\n background: ", ";\n border-radius: 12px;\n border: 1px solid ", ";\n box-shadow: 0 4px 8px 0 ", ";\n"], ["\n max-width: 256px;\n padding: 0.6rem 1rem;\n font-weight: 400;\n word-break: break-word;\n\n background: ", ";\n border-radius: 12px;\n border: 1px solid ", ";\n box-shadow: 0 4px 8px 0 ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg0; +}, function (_a) { + var theme = _a.theme; + return theme.bg2; +}, function (_a) { + var theme = _a.theme; + return polished.transparentize(0.9, theme.shadow1); +}); +function Tooltip(_a) { + var text = _a.text, rest = __rest(_a, ["text"]); + return jsxRuntime.jsx(Popover, __assign({ content: jsxRuntime.jsx(TooltipContainer, { children: text }, void 0) }, rest), void 0); +} +function TooltipContent(_a) { + var content = _a.content, _b = _a.wrap, wrap = _b === void 0 ? false : _b, rest = __rest(_a, ["content", "wrap"]); + return jsxRuntime.jsx(Popover, __assign({ content: wrap ? jsxRuntime.jsx(TooltipContainer, { children: content }, void 0) : content }, rest), void 0); +} +function MouseoverTooltip(_a) { + var children = _a.children, rest = __rest(_a, ["children"]); + var _b = __read(React.useState(false), 2), show = _b[0], setShow = _b[1]; + var open = React.useCallback(function () { return setShow(true); }, [setShow]); + var close = React.useCallback(function () { return setShow(false); }, [setShow]); + return (jsxRuntime.jsx(Tooltip, __assign({}, rest, { show: show }, { children: jsxRuntime.jsx("div", __assign({ onMouseEnter: open, onMouseLeave: close }, { children: children }), void 0) }), void 0)); +} +function MouseoverTooltipContent(_a) { + var content = _a.content, children = _a.children, _b = _a.onOpen, openCallback = _b === void 0 ? undefined : _b, disableHover = _a.disableHover, rest = __rest(_a, ["content", "children", "onOpen", "disableHover"]); + var _c = __read(React.useState(false), 2), show = _c[0], setShow = _c[1]; + var open = React.useCallback(function () { + setShow(true); + openCallback === null || openCallback === void 0 ? void 0 : openCallback(); + }, [openCallback]); + var close = React.useCallback(function () { return setShow(false); }, [setShow]); + return (jsxRuntime.jsx(TooltipContent, __assign({}, rest, { show: show, content: disableHover ? null : content }, { children: jsxRuntime.jsx("div", __assign({ style: { display: 'inline-block', lineHeight: 0, padding: '0.25rem' }, onMouseEnter: open, onMouseLeave: close }, { children: children }), void 0) }), void 0)); +} +var templateObject_1$12; + +var StyledPriceContainer = styled__default["default"].button(templateObject_1$11 || (templateObject_1$11 = __makeTemplateObject(["\n background-color: transparent;\n border: none;\n cursor: pointer;\n align-items: center;\n justify-content: flex-start;\n padding: 0;\n grid-template-columns: 1fr auto;\n grid-gap: 0.25rem;\n display: flex;\n flex-direction: row;\n text-align: left;\n flex-wrap: wrap;\n padding: 8px 0;\n user-select: text;\n"], ["\n background-color: transparent;\n border: none;\n cursor: pointer;\n align-items: center;\n justify-content: flex-start;\n padding: 0;\n grid-template-columns: 1fr auto;\n grid-gap: 0.25rem;\n display: flex;\n flex-direction: row;\n text-align: left;\n flex-wrap: wrap;\n padding: 8px 0;\n user-select: text;\n"]))); +function TradePrice(_a) { + var _b, _c, _d, _e, _f, _g; + var price = _a.price, showInverted = _a.showInverted, setShowInverted = _a.setShowInverted; + var theme = React.useContext(styled.ThemeContext); + var usdcPrice = useUSDCPrice(showInverted ? price.baseCurrency : price.quoteCurrency); + var formattedPrice; + try { + formattedPrice = showInverted ? price.toSignificant(4) : (_b = price.invert()) === null || _b === void 0 ? void 0 : _b.toSignificant(4); + } + catch (error) { + formattedPrice = '0'; + } + var label = showInverted ? "" + ((_c = price.quoteCurrency) === null || _c === void 0 ? void 0 : _c.symbol) : ((_d = price.baseCurrency) === null || _d === void 0 ? void 0 : _d.symbol) + " "; + var labelInverted = showInverted ? ((_e = price.baseCurrency) === null || _e === void 0 ? void 0 : _e.symbol) + " " : "" + ((_f = price.quoteCurrency) === null || _f === void 0 ? void 0 : _f.symbol); + var flipPrice = React.useCallback(function () { return setShowInverted(!showInverted); }, [setShowInverted, showInverted]); + var text = ((_g = '1 ' + labelInverted + ' = ' + formattedPrice) !== null && _g !== void 0 ? _g : '-') + " " + label; + return (jsxRuntime.jsxs(StyledPriceContainer, __assign({ onClick: function (e) { + e.stopPropagation(); // dont want this click to affect dropdowns / hovers + flipPrice(); + }, title: text }, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, color: theme.text1 }, { children: text }), void 0), ' ', usdcPrice && (jsxRuntime.jsx(ThemedText.DarkGray, { children: jsxRuntime.jsxs(macro.Trans, { children: ["($", usdcPrice.toSignificant(6, { groupSeparator: ',' }), ")"] }, void 0) }, void 0))] }), void 0)); +} +var templateObject_1$11; + +var Wrapper$g = styled__default["default"].div(templateObject_1$10 || (templateObject_1$10 = __makeTemplateObject(["\n position: relative;\n padding: 8px;\n"], ["\n position: relative;\n padding: 8px;\n"]))); +var ArrowWrapper$1 = styled__default["default"].div(templateObject_3$C || (templateObject_3$C = __makeTemplateObject(["\n padding: 4px;\n border-radius: 12px;\n height: 32px;\n width: 32px;\n position: relative;\n margin-top: -14px;\n margin-bottom: -14px;\n left: calc(50% - 16px);\n /* transform: rotate(90deg); */\n background-color: ", ";\n border: 4px solid ", ";\n z-index: 2;\n ", "\n"], ["\n padding: 4px;\n border-radius: 12px;\n height: 32px;\n width: 32px;\n position: relative;\n margin-top: -14px;\n margin-bottom: -14px;\n left: calc(50% - 16px);\n /* transform: rotate(90deg); */\n background-color: ", ";\n border: 4px solid ", ";\n z-index: 2;\n ", "\n"])), function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var theme = _a.theme; + return theme.bg0; +}, function (_a) { + var clickable = _a.clickable; + return clickable + ? styled.css(templateObject_2$K || (templateObject_2$K = __makeTemplateObject(["\n :hover {\n cursor: pointer;\n opacity: 0.8;\n }\n "], ["\n :hover {\n cursor: pointer;\n opacity: 0.8;\n }\n "]))) : null; +}); +var SectionBreak = styled__default["default"].div(templateObject_4$s || (templateObject_4$s = __makeTemplateObject(["\n height: 1px;\n width: 100%;\n background-color: ", ";\n"], ["\n height: 1px;\n width: 100%;\n background-color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg3; +}); +var ErrorText = styled__default["default"](rebass.Text)(templateObject_5$n || (templateObject_5$n = __makeTemplateObject(["\n color: ", ";\n"], ["\n color: ", ";\n"])), function (_a) { + var theme = _a.theme, severity = _a.severity; + return severity === 3 || severity === 4 + ? theme.red1 + : severity === 2 + ? theme.yellow2 + : severity === 1 + ? theme.text1 + : theme.text2; +}); +var TruncatedText = styled__default["default"](rebass.Text)(templateObject_6$i || (templateObject_6$i = __makeTemplateObject(["\n text-overflow: ellipsis;\n max-width: 220px;\n overflow: hidden;\n text-align: right;\n"], ["\n text-overflow: ellipsis;\n max-width: 220px;\n overflow: hidden;\n text-align: right;\n" + // styles +]))); +// styles +var Dots = styled__default["default"].span(templateObject_7$f || (templateObject_7$f = __makeTemplateObject(["\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 &::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"]))); +var SwapCallbackErrorInner = styled__default["default"].div(templateObject_8$d || (templateObject_8$d = __makeTemplateObject(["\n background-color: ", ";\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: ", ";\n z-index: -1;\n p {\n padding: 0;\n margin: 0;\n font-weight: 500;\n }\n"], ["\n background-color: ", ";\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: ", ";\n z-index: -1;\n p {\n padding: 0;\n margin: 0;\n font-weight: 500;\n }\n"])), function (_a) { + var theme = _a.theme; + return polished.transparentize(0.9, theme.red1); +}, function (_a) { + var theme = _a.theme; + return theme.red1; +}); +var SwapCallbackErrorInnerAlertTriangle = styled__default["default"].div(templateObject_9$c || (templateObject_9$c = __makeTemplateObject(["\n background-color: ", ";\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 background-color: ", ";\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"])), function (_a) { + var theme = _a.theme; + return polished.transparentize(0.9, theme.red1); +}); +function SwapCallbackError(_a) { + var error = _a.error; + return (jsxRuntime.jsxs(SwapCallbackErrorInner, { children: [jsxRuntime.jsx(SwapCallbackErrorInnerAlertTriangle, { children: jsxRuntime.jsx(reactFeather.AlertTriangle, { size: 24 }, void 0) }, void 0), jsxRuntime.jsx("p", __assign({ style: { wordBreak: 'break-word' } }, { children: error }), void 0)] }, void 0)); +} +var SwapShowAcceptChanges = styled__default["default"](AutoColumn)(templateObject_10$9 || (templateObject_10$9 = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n padding: 0.5rem;\n border-radius: 12px;\n margin-top: 8px;\n"], ["\n background-color: ", ";\n color: ", ";\n padding: 0.5rem;\n border-radius: 12px;\n margin-top: 8px;\n"])), function (_a) { + var theme = _a.theme; + return polished.transparentize(0.95, theme.primary3); +}, function (_a) { + var theme = _a.theme; + return theme.primaryText1; +}); +styled__default["default"](ThemedText.Black)(templateObject_11$7 || (templateObject_11$7 = __makeTemplateObject(["\n border-bottom: 1px solid ", ";\n padding-bottom: 0.5rem;\n"], ["\n border-bottom: 1px solid ", ";\n padding-bottom: 0.5rem;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}); +var ResponsiveTooltipContainer = styled__default["default"](TooltipContainer)(templateObject_13$3 || (templateObject_13$3 = __makeTemplateObject(["\n background-color: ", ";\n border: 1px solid ", ";\n padding: 1rem;\n width: ", ";\n\n ", "\n"], ["\n background-color: ", ";\n border: 1px solid ", ";\n padding: 1rem;\n width: ", ";\n\n ", "\n"])), function (_a) { + var theme = _a.theme; + return theme.bg0; +}, function (_a) { + var theme = _a.theme; + return theme.bg2; +}, function (_a) { + var width = _a.width; + return width !== null && width !== void 0 ? width : 'auto'; +}, function (_a) { + var theme = _a.theme, origin = _a.origin; + return theme.mediaWidth.upToExtraSmall(templateObject_12$7 || (templateObject_12$7 = __makeTemplateObject(["\n transform: scale(0.8);\n transform-origin: ", ";\n "], ["\n transform: scale(0.8);\n transform-origin: ", ";\n "])), origin !== null && origin !== void 0 ? origin : 'top left'); +}); +styled__default["default"](TradePrice)(templateObject_14$3 || (templateObject_14$3 = __makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), loadingOpacityMixin); +var templateObject_1$10, templateObject_2$K, templateObject_3$C, templateObject_4$s, templateObject_5$n, templateObject_6$i, templateObject_7$f, templateObject_8$d, templateObject_9$c, templateObject_10$9, templateObject_11$7, templateObject_12$7, templateObject_13$3, templateObject_14$3; + +// technically a 721, not an ERC20, but suffices for our purposes +var SOCKS = new sdkCore.Token(SupportedChainId.MAINNET, SOCKS_CONTROLLER_ADDRESSES[SupportedChainId.MAINNET], 0); +function useHasSocks() { + var _a = useActiveWeb3React(), account = _a.account, chainId = _a.chainId; + var balance = useTokenBalance(account !== null && account !== void 0 ? account : undefined, chainId === SupportedChainId.MAINNET ? SOCKS : undefined); + return React.useMemo(function () { return Boolean(balance === null || balance === void 0 ? void 0 : balance.greaterThan(0)); }, [balance]); +} + +var COINBASE_ICON_URL = "d13f13f5694ec91f.svg"; + +var FORTMATIC_ICON_URL = "data:image/png;base64,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"; + +var PORTIS_ICON_URL = "data:image/png;base64,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"; + +var WALLETCONNECT_ICON_URL = "data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%3E%20%20%3Crect%20width%3D%2224%22%20height%3D%2215.0867%22%20fill%3D%22url%28%23pattern0%29%22%2F%3E%20%20%3Cdefs%3E%20%20%20%20%3Cpattern%20id%3D%22pattern0%22%20patternContentUnits%3D%22objectBoundingBox%22%20width%3D%221%22%20height%3D%221%22%3E%20%20%20%20%20%20%3Cuse%20xlink%3Ahref%3D%22%23image0%22%20transform%3D%22translate%28-0.00968744%29%20scale%280.00339792%200.00540541%29%22%2F%3E%20%20%20%20%3C%2Fpattern%3E%20%20%20%20%3Cimage%20id%3D%22image0%22%20width%3D%22300%22%20height%3D%22185%22%20xlink%3Ahref%3D%22data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAASwAAAC5CAYAAACSoQIxAAAgAElEQVR4Ae19fZgdVZnn761TnQ%2FCtwmugxhkGPXZDIjDoENIuu9twsAm4CS7EpFhWHYktN23AwzC6Dg6xI%2FVWcGsk%2FTtNgQ0MogQ9lkQDAtLTN%2FuhDjIk5koG10eWRwQdAjRYBLIR9epd5%2B3um%2FS6dx7%2B35U3Vt16tx%2Fqu6pc96P33vqd8%2BtOu85BPuxCFRAYF4%2Fn%2BJ4ONNV3izt0AzycRwRzQBjBgPHEfszfMIMIjqOGDNAmAHguDGRb4HxJhPeZOa3yMFe%2BM5%2BR74DbzHzmyC8ST7vZXJ%2Fs9fFL7Z10e8qmGMvpRwBSrn%2F1n0AF97Np07d753rK2eOw%2F4fENG7ffCZYDrTIZzYTJAY%2BB3AvwDoX5nk6PxcaWfHb2fgJ9v%2FC73RTFusrvghYAkrfjGJ1KL21XyO4%2BgPMvhch%2BhcAHMAzIpUaUjCmfEagP8D4ucA2u6z%2BtFwjn4WkngrJgEIWMJKQJDqNfE%2FfJNnvXVQz3OYLwToAmZ8iAjT65UXy3aMfSD8E3x%2BlhVtPdimtv7wevptLG21RjWMgCWshiGMj4DzvsUnn3RAZx2NLDvcSSAZPaXq4zN8Av8YwCZi2rST1PCOHO1LFQgGO2sJK%2BHB7cjzBWDvcihc7jD9UcLdicR8Zv4hkfOY1s73h5fTc5EosUKbgoAlrKbAHJ6Ss1fx1He26UvIx4dBuBzAO8KTbr4kZvwrgx91GI%2FyLneosII88702x0NLWAmJZTCSIn29A3wMwAkJMTvWZjLjN8z8bZrmDhSupxdibaw1LkDAElaMO8JF9%2FAJ6qB%2FrQP%2FegKdF2NTE28ag7cw0V2vjqj1L9xIBxPvkKEOWMKKYWDb8zzXgV5GhKsATIuhicaa5DP2EHAvjai%2BwZvpeWMdTahjlrBiEjgZTU095P9nH%2F4NxHROTMxKtRkMfpqJ1thRV3y6gSWsFsciczefjUP6UwRcY0dTLQ5GGfWjoy6%2BS7vuys1d9Osy1WxxExCwhNUEkEupGCOqLzJjqUNwStWxZTFDgHGQgbXaVV%2B2xNWa2FjCajLulqiaDHgU6ixxRYFqVTItYVUFU%2BOV2vN8hkP6y2N%2F%2FRoXaCXEAgFm%2FgeP3M9v6aHdsTDIcCMsYUUcYHmY7h7yPuv4dBMIUyNWZ8W3AgHGbhB9aY9yVm%2FropFWmJAWnZawIop0ZgW7fJrf7YD%2FDsDMiNRYsXFCgPGiT%2Fj0UI%2F7UJzMMskWS1gRRDPbN3Kx76DfAb0nAvFWZMwRkEmo2nG7Nn%2BCfhpzUxNnniWsEEMmy7nsP6BXEYIJnyFKtqIShwDDA%2FF%2F36PcFdu66K3E2R9Tgy1hhREYZur8hp%2Fzmb9EwElhiLQyjEHgZQDLB3vcR43xqIWOWMJqEPxsH89h8tYR0R83KMo2NxuBR5lVVyFH%2F2a2m9F6ZwmrXnxXsJM9zf%2B0D77dAabUK8a2Sw8CPvBbYvQUcu6D6fE6XE8tYdWB5%2BjkT%2B8BAp1fR3PbJO0IMP7nm6xu%2BFEv%2FSbtUNTqv00JqQUxZmrP65twUP%2FEklUtwNm6RyFA%2BI%2FTSf80kx%2B57Khy%2B2VSBOwIa1KIRitk1vBMaL2egGyVTWw1i8CkCDCj7%2FVZ6pM7ltKhSSvbCrCEVUUnyPTzn4D1I0R4exXVbRWLQE0IMPO%2F%2BFPc%2FzS8jH5RU8MUVrZ%2FCSsFnZkyffqzBL3FklUloOy1RhAgog%2BoEf3jbL%2F34UbkpKGtHWGVifIH%2B%2Fhtx5F%2BkAgXl6liiy0CoSPgM68ayrXdFLpgQwRawioRyMwafh95%2Bn%2BDcEaJy7bIIhApAj54q4Z7uV0B4liY7V%2FCCZhk%2B7yF5OlnLVlNAMZ%2BbRoCDmiuy%2Fqf5YezaUoTosgS1rhAZfv1Z9jB90E4flyxPbUINB0BIpwpP5zyA9p05TFWaP8SjgUn2%2B99B8DVMY6VNS2lCDDRrYVu9bWUun%2BU26knrGAnZaUfI8IlRyFjv1gEYoQAg79e6Gn7qxiZ1BJTUk1YQlZnuPoJAJmWoG%2BVWgRqQMBnfHOoR10PIq6hmVFVU0tYF67k6dOm6cctWRnVn9PgzEO8U11dWEFeGpyd6GMqH7rPyfPxU6Z5Gy1ZTewO9nsCELgSp%2BlH5d9BAmwN3cTUjbDOvZdnnLrXe4qILgwdTSvQItAkBJh58%2BtwF%2B7I0b4mqYyFmlQR1odW8YnTlfcDu9heCH2PsY%2BB34H4DTkS6HeQ74w34PDosik%2BvQ2EkwGcxOCT4ONkIjopWJXVTh1pOAjM%2FE%2F7tXvpMzfSnoaFJURAaghLUm2mO94mB3RuQmLTOjODjUL5ZSJ6yWe87BC9xOCXoPklV7kvezvxcqPPUGRXIecdmA3fm%2B379C44NJuYZ%2Fs%2BZpOD2QycYRdGnLwLMHj7fs%2FtSAtppYKw%2FnSATzvke1uI6A8m7wKprLELjGENGoZ2hod%2Fix9jBfktRWI9q8xr%2BABcv4OY28GYD8IpLbUppsqFtDy4nWlI5TGesC65h3%2FPO6i3AHh3TPtbK8z6FQPDTDTskzOUiO2omGn%2BAM5xMEpgDLQ7hNNaAV4cdTJ4B5SbKXTRrjjaF5ZNRhPWgjX8Lq31ZgDvCguwBMt5GeAHR%2BA%2BuKWHtiXYj1HTmakjjz8BeVc5oKUg%2FLvE%2B9SgA8z8PFx3nsmkZSxhtef5DEX6GQDvaLAfJLn56wz%2Bjtbu%2F9i8nJ5OsiOT2d45MNKpmT7qMK5M819H%2BXtY6Gn7wGR4JfW6sYSVyY88m9K3gW%2BCcT85%2FMCm7rZNSe2YjdgdJAw7wWa2f9GInMS29fkrg71tn0ms%2FRUMN5KwMnnvOiJ8q4LfJl76NTOt3K%2Bdu9LyxmiyIMqb4RmOn%2FPBNznAqZPVN%2Bj6G4M9rpEvKIwkrGy%2F9z0AqVhulsE%2FZqb%2FNpRzv2vQDRe6K5m893Em%2FmsH9J7QhcdRoK%2F%2BcLCXdsTRtEZschtpHNe2zHwWkZFcPB7yR4n4HwZT%2BrdvPBDVnBdy7j0A7sn2eX%2FGxJ8kovnVtEtqHQLellTbK9ltJGGBYGxiKDMe86E%2BNZyjn1UKrL1WGoHBXldG39%2Bbv4o%2FqFxvJYEuKl0z4aUK%2Fy%2FhHpQ030zCAv1fAOeV9DihhcEra0JvIdcmSdv20yACm2%2BkHwGYlxnwroKPO4lweoMiY9NcUnYGe%2BjV2BgUoiFGrtbgAPeGiFFLRTHjNz5RTyHX9r5CjyWrsINR6HYfwHHqbPbpc8zYH7b8Vshjh77aCr3N0Gnsg56O%2FpGnZTH%2FZoAYlQ5ZZXKvclds6woSi6NSY%2BWOITB%2FDb%2FD9fTfg3BtYkFhfGcw516TWPsnMdxYwjp%2FDR93gqcfTei%2BggXtqBuGP0E%2FnyR%2B9nIECMzr5%2FNdePcQ6P0RiI9OJGP9YM79aHQKWi%2FZyL%2BEAuu2LnrrFa0WMeOp1sNcnQU%2Bw2fmzw%2FuVBdbsqoOsyhqSerSK577IWZ8Iwr5Uchk4IHBWcr4TVSMHWEVO8X5a7jtBE9viPsmE8x4zYX6yMYcSaK2%2FcQEgUy%2Ft5gY%2Fxjnrd%2BErArd6uo0rPVuPGFJvw9IS%2BuHCVgUk%2FvgKDMYGIRSS01OWj3K4YR9yQzwmWDvkVj%2BRWTcO9ijrksDWUm3SQVhiaOyYBxm6fVEWBKb%2B4XhMdFnC93OV9PS4WKDfY2GjI7UvTuI6KYam0ZXnbF2sEd1panvpIawir0m0%2B89QEDLH0wy4RVPq49s6SVZUcJ%2BEoJAZsC7HIz7gmWeW2gzM%2FoKOXd5C01oiWpjH7qXQ7MwU%2F25%2FOcvd70Z5T74J8pVf2zJqhloh6uj0O1%2B33PVBwG8HK7k6qWllawEodSNsIJuwUyZAX0%2FIViCpPqeEkJNeV61V6nL5S1mCOKsiBYhkFnDM6G9Jwh0fjNNSDNZCc7pJCzxnJmy%2FXpdUycJygPSWeovsZR0Mzu51RUNAplv8TTs1w8RcHk0Go6Wysx3FnJttx1dmq5v6SUsifMoaa0BYVn0YafbB3vUF6LXYzU0FQFZqvkb3t87TH8dpV6Zn1fIta2IUkcSZKebsMYilM17d0VFWgyMyCguyFlLQo%2BwNtaFQHveu1YRvglA1SWgQiNmuq2QU3dWqJKaS5awxkKdyY98PYJX1geIeFFalypOzV005mhnfuRPmUiWr5kWnu%2F0ycEetTI8ecmWZAlrXPwyeW81EXrHFdV%2FytinoS4dztHW%2BoXYlklDoD3Pcx3ojUSY3qjtRLR8U7fqa1SOSe0tYU2IZiY%2FIpMDb51QXNtXxj4fqnMoR8%2FW1tDWNgGBMEjLZ9wwlHPXmoBHmD6kbh7WZODJWxh5wDlZvXLXfcYeS1bl0ElHuYyqfagFYOyr1WMG2JJVedTsCKsMNpm8vpWI7yhzuXQxYzdDdRZytL10BVuaJgQ68nyBA72p2sTpMbK6bjjnGrMAZdjxtoRVAdEaSWsXfJUxcaeSChDZS5MgIKQF6I0O4cRKVYWsQLjavk2uhFKaJ45WxuXw1c4B3cvMqw8XlD7ZhUNq3uDN9Hzpy7Y0zQhk8nweQw9VIC3NhGssWU3eS%2BwIa3KM0JH3ljmEu0pVlXWsaER1WLIqhY4tKyJQgbS0T7hyqNt9uFjXHssjYB%2B6l8fm8BV5W0Og7sMFR05%2B5Ss135LVEUDsWWkE5LkmQXXIKh3jarzpM5ZYshqHyCSndoQ1CUDjL49NDPwbBhOBdrpT1c1PfZx%2BNb6OPbcIVELgvG%2FxySfv84It6BzX%2FfmmbjO346qEgb1mEbAIWAQsAhYBi4BFwCJgEbAIWAQsAhaBOhCI5BnWJffw740c8JaDcGFgE9Mb5PDAYHfbk3XYaJskBIHsKn4%2FlL6FiWeLycT0kvbVncPL6bmEuGDNrAOB7MDIpexTN4hPDuLuY6vX5q7e3EW%2FrkNcxSahE1YmP3InEX2ylFYGb%2FMd92N2z71S6CS37Pw1fNIJWq8jYHEZLx7ao9Qyu4N1GXQSWjz%2FG%2FzvHd%2F7rgM6t6QLPn9lsLftMyWv1VkYGmFVu5WW5NoBaoFNDK4zYjFrdvFafrs%2B5A0R0XsrmcbMz6spbscPltFrlerZa8lAoIYZ%2FBv2KrVkWxeNhOFZKPOwzl7FU4PNSqvY909m%2B0p%2B1ajDYbhgZbQKgc4BPt0%2FpLdORlZin9SRukJwrbLX6g0HgbHVKDZVmLl%2FWJHsBSrcIBxxuLCBk4ZHWGLIGa5%2BQrb%2Bq8kOu15UTXDFrXJAVqyfJiB4XlW1fYwXyVHtdv5R1YjFqmIDS%2BcUfumpy164kQ424lBDhHXhSp4%2BbZp%2BvGayGrOYGfvh88LC8rZCI07Yts1FoPNunu0f0kM1k1Ux7sBLzhTVsel6eqm5llttjSCQWT2SgUOPN7A4YeHAAbXwh7fQ%2FnrtqPsv4Zw8Hz9lmrexXrISg8VxcuiJAIh6PbDtmopAQFYH6xhZjbNSiM4%2FqJ8WWeOK7WmMEejoG7lE7tUGyEq8ywhnCHfU62pdI6wPreITp7veRgJdUK%2Fio9oxDvrMVwz1tj11VLn9EisEFvTzWR7rYSKcHoZhzHjVJdW%2BsYdeDEOelRENAmNktYGAtjA0MPjZ%2FZ674JkbaU%2Bt8momrHn9fIoLbxOBgnyoWhWWqy%2B7yxCwZLDH3VCuji1vHQLZr%2FN7uU0PESHUh%2Bay2oVLaq4lrdbFtpLmbL%2B3iIGHwyKroi4Gb9%2FvuR21klZNhDVGVpsJNKeoONQjwwNhsSWtUFFtWJiQFaboLQBmNiyshAC7RE8JUGJQJGQFxiMguFGYI6Tlwe3c0kO7q5Vf9TMs2ZrbhRcdWYnFAgzjkY4Bb0m1Dth60SKQ7eM5UZJVEHYZtU3RWwJd0bpjpVeJQHAPRkhWQdxB5wmnCLdUaRaqIqxg7oznbYlsZDXeWoLrMB6ypDUelNacy6JzIL05qpHVBK9mii5LWhNQacHXzIB3ldyDUY2sxrsUcIrnbal2ft6kfwllvg37ehiEs8YrasK5XTa2CSCXU1FhhcxyTcIptxt5hINjnVKErMC4n5q9fDrjRWeKmjtZJkTFEVZxcmALyErgVgKcbAFeJ%2Fa2WZ0ISBbCJGuQ1ym5imaEU0S3zYSoAquQqwT3WivISvwgnCWZEMI5ldwqS1jBfJt6ZjJX0lbjNWF5h7DOklaNwDVQXYhCUqeqSbtoQE3FpjZ9qyI8kVwc27dAEtgn%2FdcViQEiVEiLK8%2FPK0lYMt9GJvbVO5M5TIeKpCWAhinXyjoWgWKOWLX76B0rIcQSwvFCnGJTiFKtqBIIFDdZaSlZjdlVnFQsHFTC1GMfussrbI8loTWcyYGllNZaNkZad8mWW7W2tfWrQ0CyDRzojbEgq6LJo6S10ZJWEZDwj3JPldsRKnxt1UkU7hEOCqbTTGhy1PAv6vk2E3TX9ZWIlm%2FqVn11NbaNSiIgZCVpFyCEklFfUkkDhTbntAHwKjStcs%2FNChIiv3TMfp%2BH%2FxI2Y75NGO7JpqayI3MYsqwMoJgjFleykhgVc07FVhuzcBCQe6iKDYLDUVa%2FlJkT5%2BcFI6yArJxgJnOwxGn98pvZkv52sEd9uZkaTdOV7fMWwkGiUqEIWLipx%2F1fpsWimf5k%2BvRnyeEvNlNng7re8Bx10eZP0E%2Bd89fwcXD0YwASRFbiPv%2FXzMDIlxoEIrXNs33enyWNrIKoA49n%2B70PpzZwDTqe7Rv5csLISjw%2BWfn6UTlxTvD8vwLw7gZxaElzYvrbTH7kKy1RnmClmbz3ETh4JMEufC%2FT75VbPz7BbkVrekffyNfg0N9EqyUa6QT8frZf3%2BIAfqIDT0Sflo0vooHJPKmZvPdRIjyUdM8IeDjb5y1Nuh%2FNsr9jYGSl49AtzdIXjR6%2BwiGis6MR3jypsktPJu%2Btbp7GZGqStAsifCeZ1pew2sH9QSpJiUu26AgC2bx3l8Mk%2F6SS%2FWG8T94Sesn2YtR6IvRKYMB81FQNE3wLw4di2kWQ8hSGwHjICNK3LGmVCQYzBfcEwYhJ1z7gOMz8szLuJq%2BYsCwzoO9KnuHRWpzJex9XhG%2FHYSZz2J6KT8T4bvuA95dhy066vGy%2FXgtDyEpiQcBzDoiMusEJuL4j792T9M4Wlv3ZvO4hwt1hyYurHMW4J9uvb4irfc22K9vv3QvCx5utN0p9BPSPzsPq92Qt9QVRKmu2bAbuK%2FS4f9FsvXHS19GvlzvgVXGyKWpbNKh3uEflo9YTZ%2FnZvHcfCH8eZxtrtY2B7xd63CuCme67p6srmflfahUS5%2FoEXJPp974bZxujtG30FXC6yErwVOC%2Bzn59c5TYxll2Nu89aBpZ%2BcT%2FvN9TAQEffkAd%2Bk44MYkqMx7G62ppYQUZ8XKhGlgl7YKI76imrql1mOm2Qk6lZrpLZgW7mKXXE8Go5cUn7rBzmLCk48p%2BYbMo2BEnnO27YnI3MLABO9XiNJBWdkB%2FDsxfiAn0LTUjLaR1%2FhpuO0Fr2dlmUUsBD1m5D966i91Ld%2BRoX1H04eRnKZALr7PbKRWLFUw4BoE8TT8igTXBn3I%2BZPIjd1iyOoKOjDIzA%2Fr2IyXmnQVk5WnZM9A4sjp0wF0wnqwkekcRlhRIBakIwKjt4yWgJ3h6w9mrOJZLqDR6KwlZEZFdxWICkMS8IiDyCeUmfJW%2BLH2aCKatYlEQDiq1pf1RfwnHB1HAeKfSj5kIxi89ddkLN9LB8f4m%2BVxm%2BcvE2ST7ELXtzHxnIdd2W9R6miX%2FwpU8fdo0%2Fbhs%2F94snc3Qw4ynXtHqinL3Z1nCEuMODzcNZPADB9TCUgzejKCEqcOSVfVoMqOvkHOXV98injWFrKZM8zY6IKOWjxay2uuqRdu6aKQc8hUJSxqZ%2FECv3LCzHFixKpe0i369xqSZzE3Bl7F2MOcmdoKpvBibSd6TxpEVsGGvUksqkZX0j2OeYU3sNIGAnWpxMD1g4sUEf5eAy6%2BUdIDEuTFKVussWdUROcKypOacFt%2FiG0dWMvVop1o8GVlJtCcdYR3uEutZZXbp%2Bwi46nCZAScT53nE3qUjZGX3a2wkWIx7B3vUdUEmYiNymtTW2HmSwAOFmeoaLCVdDZTVE5ZIY6bMgJZdYU0jre37PbfjmRtpTzWgtayOoT8arcKT5WbpVlfHnbTm9fMpLoL5kee1Cqso9NaDf22EJVYb%2BgvP4O0e3M4tPbQ7iuA0LFPI6nX9kGkzmRvGpUEBwU1Twy98g%2Bpqbj5GVpsJNKfmxnFuUOcIt3bCEhAMfeDL4B1QbqbQRbviFGtT0y7igrE8ny3MUldW%2B7ekWXZn1vBMaK9gIFmtHexRXfWMbOsjrLGImbQ4WLETMvPzcN15cSGtgKxO04%2BYNpO5iHdcjnHLOb14Lb9dH%2FKGiOi9ccEoDDsanVrSEGGJAybOAxLSUlPcjh8so9fCCFK9MkydUlIvHlG3k5zTal6tR22HkJV%2FSG8FoeR27VHrj0p%2Bo2Qldk06rWEy42Uinswinqxekq7Lr5p0GOk4rbL7cNqFYTlircKzGr3F9C35oaimfhR1Ogf4dDPJSjINGp%2B02zBhSdAk5cH3DVshgHCWdBzpQFF0zEoyhazOcPUTBqZFVXI7FtcE81blnHbezbN91k%2BbN7Liz4eVFtXwX8LxvczEdZgYeMmZojo2XU8vjfc1qnNTc8SiwitCuYVm5pwGZHVQP02Epv9ARoihvJ8LdV2yUAlLHDeStBivOlPVRVGTlqlpF1HeEBHLLjQj53RBP5%2FlsR42jayIaPmmbtUXZoxCJywxrnNA9zKzUfsEMuNVl1T7xh56McwAFGUV0y4IZNTiiUX%2FknostYhcmL6MkdVWIrTseWmY%2FhRlRUFWIjsSwhLBHXlvGRHWmLS1FDNec0nNDZu0TE27KHbepB8lfUsWtpy4mFyjfmW%2Fzu%2FlNj1kElmxzNJkdA3l3LWN4lOqfWSEJcpk806HsM400qIR1TF4Mz1fCtBay0xNu6gVh7jXDzvnNNvHc%2BBoWSRzZtx9r9Y%2BISufcd1wzr232ja11gvlLWE5pYHhDKM2uAx%2BDafozZkB%2FsNyfldbfuHdfKpL3hCBjMoR88E%2FYeLnqsUhCfXkr%2Fp05RXkB6ZRe9tX8zm%2Bo4dNIivBJGqyEh2REpYoKOTcdRpm7ZEGYBazHsqu4vfX23kl7WLKIW%2BQmM6pV0Yc2zFj3VBP2%2FsL3W3nAvh2HG2s1yYi%2BoAkITdCWvP7%2BI%2BUo4cc4NR67YhjOyZ8LMqRVdHnSP8SFpXIsWPAW%2BL4WA%2BCO7480eeM3QzVWcjR9lr8CHLEPG%2BLaWkXmJjQam6ifF05px15vgDQGx3CibX0l1jXZXi%2Bg6VD3e7DzbAz8hFW0YnAIcJiMMzZH5BwCkMPjXbEoqeVj8HseTPJShJaj15fioiDMkYkD2ArIx3d1SAZ2fO2BD88VaqRPuJAbzKNrEBY3CyyEqibRliibLDH3SAOMlB2zeYq4x%2BbatIBpSNWQ1rFtAvTRlaSIxYsO0zExwRGSCvn3iB1jrmW4IIghp63pZr0rfY8z5U%2BAkLyVrctE6PgHiYsDu7pMnWiKG4qYYkD4iD7vAgMY3atkY4oHVI6ZrkgBWRlZtpFVTliJuecVkrfGiOrjSaRldy7cg83m6zk3mo6YYnSod62p9jnywwkrY2lSKuYI0bA7HKElsTyWrfOknwy0xLlJe9P8v9KkVZm9UjGgd5IhOlJjG8pm5mxX%2B5duYdLXY%2B6rCWEJU4VlrcVxHEBIGonmyVfOqZ0UOmoRZ0yk9mXHDHDyApEf1dPQutoGzJqN2aJbUBad%2FPhH6SOvpFLyCFJYDeKrHyoBXLvFvt3s49Ne0tYzrH5q%2Fki19FPGDVkBg744JUM51cO8%2BdMmskscQwjoTXbr28D%2BKvl%2BkUiyxn%2F5jv0BdL%2BbHLoU4n0oZzRjH0a6tLhHG0tV6UZ5S0nLHHSyNe9zYheC3SEmSNmYs5pC0ISuUqfsQdQC4Zy9GzkyiZREAvCEhszeT5PpggY9dp3EvCTdDmqHDHJOXUIdyUJi1TZWudcw6gwig1hiYNCWjT6%2Brfh9IeoAEuj3KhzxExMlDeinzB2g9X8wV7aERd%2FYkVYAoqJSaFxCXY9dkRNVkWbTEyUL%2FqW0OMu%2BCoTJ7ISHGNHWGKUictuJLTTaiZcU%2Bh2H2iG%2FZkB7ypi3AdANUOf1VEaAVlGKcwVSUprqa80loQlrpi6sFl9YWpBqybniBU9DHJOGQ9Z0ioi0txjVGu%2BheVFy%2BZhTeaALJIni%2BXJSp%2BT1bXXQ0ZA8j2bnCNW9EDy0nzClUblnBadi%2FlxbFXd0BeoDNPt2I6wik4Gs8QP6SHjJl4WHYzZUXLECFjSirSL8VBk%2B71FDDxMQMu23Bpvj%2Bnnzd5spV48YzvCKjokGz84pC4CI5K11It67FFmhLYuR2wi%2FkbmnE50Mi7fGS%2FKPRb1JithuBv7EVbRSVN3wy361%2BpjkCLl88JWpl2UwkDSnCTFBYSppa7bsgYRELKaoua2epfzar2I%2FQir6IgAKsDKNvLFMnsMCQHGvlbniJXzxMSc03K%2BNrtc7qUkkZXgk5gRVjGYwaJp2isEi6gVC%2B2xfgRGyaozDmkXlZyQVTAU9JOG5ZxWcjnSawyua9XUSI2qQnjiCEt8GttpZrMlrSoiXKFKnHLEKph5%2BJLNOT0MRUMnDN7uwe3c0kO7GxLUgsaJJCzByW6P1WBviVmOWLXe2PStapEqXU%2FIar%2FndjxzI%2B0pXSPepYl5hjURRvl1EOBlv7iJ1%2Bz3SRHYJTlitW6eManUJlQIbGY1H5LnZj81ITC2t2JiyUqcTewIqxgp2eJ9JnlPOqCyyxMX69pjgMAuHFLzwtoItlWY2pzT2pD3wVt3sXtp2LtX12ZF47UTO8Iqui4BOHTAXSABKZbZY2kEJO3CBLIS74Kk3ENqXuBTaXdt6REECnKPJJ2sxJ3Ej7CKMblwJU%2BfNk0%2FLqvUFMvs8QgCY2kX7ZLydKQ0%2BWdjOafDRDg9%2Bd5E4kHhl5667IUbyYhNX4whLAn12at46qA5Wb8AAAVoSURBVDuVfowIl0QS%2BoQKTUraRb3wBulbsm6%2BJa2jIGTGU69odYUpZCXOJf4v4fgISWD2ukpy0DaML0%2F1eYLSLuqNU5C%2BNVVdJMRcrwzT2sk9IPeCSWQlMTKKsMShbV00gp1KNmu1pDWWdrGpm4xf8cLmnB6h3KDv71SLg3vhSLERZ8YRlkSlsIK8gLQYDxsRpTqcSGLaRR1uHtVEiDnt6VssfX6nWhzcA0ehY8YXo55hHROS9awyu%2FR9BFx1zDWDC5KadhFWSIL0Lc%2FbEmwnH5bQBMhh4IHCTHUNlpJOgLl1mWg2YQkkzJTt1%2BtAuLYuhBLWKMlpF2FCnbqcU8a9gz3qOhBxmDjGTZb5hCWIp4S0kp52EfbNkZr0rZSQlfQPI59hHdPxiTj49WGsPeaaIQUmpF2EHYpUpG8x1qZhZFXsG%2BkYYRW9DfY%2B9FYToXdcUeJPTUm7iCoQpqZvMaOvkHOXR4VbHOWmY4Q1DnkJsAR6XFHST41Ju4gqECambzHznWkjK%2BkfqRthFW%2BKTH7kDiK6tfg9iUcTZzJHGQdT0rdGyarttiixiqvs1BKWBCQzoG8n5hVxDU4lu4SsZCaziZMDK%2Fnd6LXkp2%2FR7YM96guN4pDU9qkmLAlaJq9vJeI7khTAIO1CqSWWrOqL2vlruO0ErWULsUX1SWhNK2a6rZBTd7ZGezy0pu4Z1kTYpQMQUWIeXBZnMluymhjJ6r8H2CUsfUv6aNrJSiKc%2BhFWsZt3DuheZl5d%2FB7HYxpmMjcT98wKdjFLryfCkmbqrVWXz7hhKOcaOyWnFjwsYY1DqyPvLSPCGoohkQdk1a2uNn0m87hwNOc0xulbLFOeGV2WrI50BUtYR7AIztrz3rUOYV2sSCtFM5knhKM5X2OYCSFk5TOuG8659zYHhGRosYRVIk6ZAe8qMO6PBWmNzmTusiOrEoEKsyhGpCVkBcLVhW73gTBdNEFW6h%2B6lwpi0FEIVwNoada7THAdzLk3WLIqFaWQy%2BKTvqUtWZWPrR1hlccGHQPeEsfHehDcCtUiuZTmyYGRAFqD0Ey%2BRelbDM93sHSo203tOm6ThcmOsCogFHQcgqxeOlKhWuiXLFmFDmlNAkfTt7ip852CPkZYbMmqcqgsYVXGB4M97gb2WdaJbxJp0e2FXDrTLiYJRVMvBzFg%2FmIzlErfkj4mfa0Z%2BpKsw%2F4lrDJ6HX0jlzhEj4EwtcomNVezM5lrhizyBpFnQjAO%2BsxXDPW2PRW5MwYosIRVQxAzq0cycOhxIkyvoVlVVWUm86ZuZdIqElX5nYRKUZEWM%2FbD54WF5W2FJOAQBxstYdUYhfY8z3WgN4ZJWnYmc41BaEH10DMhGPs01KXDObI7ltcQT0tYNYBVrCqkpaCfBOH4Ylk9RzuTuR7UWtcmtEwIxj4fqnMoR8%2B2zptkaraEVWfcOvJ8AaA3OoQT6xFhZzLXg1rr2zSaCeEz9gBqgSWr%2BmJpCas%2B3IJWmTyfR9CbQDilRjGaCdfYmcw1ohaT6nWTFmM3Q3UWcrQ9Jq4kzgxLWA2GLNvHc0B6c9WkZScHNoh4PJpL%2BhYx7gOgqrRoF3yVGeylHVXWt9VKIGAJqwQotRYFpOVoedMzs2JbhgfCYjvfpiJKiblYQybELhxS8wZvpucT41xMDbUTR0MIjPxqakfN9X3%2BaVlxjN0%2B80JLVmURStwFmZVO4EWjz6VKmy%2B7cEvfsGRVGp9aS%2B0Iq1bEJqnfPqC7iP1bHNB7pCozXiOiVXuUk9%2FWRb%2BbpLm9nEAEZMPWNvJ7wSwr184K4g7%2BGZi%2BVsi59yTQJWty2hBoX8vvnt%2FP56bN77T7KzHvvJtnpx2HqPz%2F%2F6omxnsqyGCHAAAAAElFTkSuQmCC%22%2F%3E%20%20%3C%2Fdefs%3E%3C%2Fsvg%3E"; + +var _a$3; +var NETWORK_POLLING_INTERVALS = (_a$3 = {}, + _a$3[SupportedChainId.ARBITRUM_ONE] = ms__default["default"](templateObject_1$$ || (templateObject_1$$ = __makeTemplateObject(["1s"], ["1s"]))), + _a$3[SupportedChainId.ARBITRUM_RINKEBY] = ms__default["default"](templateObject_2$J || (templateObject_2$J = __makeTemplateObject(["1s"], ["1s"]))), + _a$3[SupportedChainId.OPTIMISM] = ms__default["default"](templateObject_3$B || (templateObject_3$B = __makeTemplateObject(["1s"], ["1s"]))), + _a$3[SupportedChainId.OPTIMISTIC_KOVAN] = ms__default["default"](templateObject_4$r || (templateObject_4$r = __makeTemplateObject(["1s"], ["1s"]))), + _a$3); +function getLibrary(provider) { + var library = new providers.Web3Provider(provider, typeof provider.chainId === 'number' + ? provider.chainId + : typeof provider.chainId === 'string' + ? parseInt(provider.chainId) + : 'any'); + library.pollingInterval = 15000; + library.detectNetwork().then(function (network) { + var networkPollingInterval = NETWORK_POLLING_INTERVALS[network.chainId]; + if (networkPollingInterval) { + console.debug('Setting polling interval', networkPollingInterval); + library.pollingInterval = networkPollingInterval; + } + }); + return library; +} +var templateObject_1$$, templateObject_2$J, templateObject_3$B, templateObject_4$r; + +var OVERLAY_READY = 'OVERLAY_READY'; +var CHAIN_ID_NETWORK_ARGUMENT = { + 1: undefined, + 3: 'ropsten', + 4: 'rinkeby', + 42: 'kovan', +}; +var FortmaticConnector = /** @class */ (function (_super) { + __extends(FortmaticConnector, _super); + function FortmaticConnector() { + return _super !== null && _super.apply(this, arguments) || this; + } + FortmaticConnector.prototype.activate = function () { + return __awaiter(this, void 0, void 0, function () { + var Fortmatic, _a, apiKey, chainId, provider, pollForOverlayReady, _b, account; + var _this = this; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + if (!!this.fortmatic) return [3 /*break*/, 2]; + return [4 /*yield*/, Promise.resolve().then(function () { return fortmatic$1; })]; + case 1: + Fortmatic = (_c.sent()).default; + _a = this, apiKey = _a.apiKey, chainId = _a.chainId; + if (chainId in CHAIN_ID_NETWORK_ARGUMENT) { + this.fortmatic = new Fortmatic(apiKey, CHAIN_ID_NETWORK_ARGUMENT[chainId]); + } + else { + throw new Error("Unsupported network ID: " + chainId); + } + _c.label = 2; + case 2: + provider = this.fortmatic.getProvider(); + pollForOverlayReady = new Promise(function (resolve) { + var interval = setInterval(function () { + if (provider.overlayReady) { + clearInterval(interval); + _this.emit(OVERLAY_READY); + resolve(); + } + }, 200); + }); + return [4 /*yield*/, Promise.all([ + provider.enable().then(function (accounts) { return accounts[0]; }), + pollForOverlayReady, + ])]; + case 3: + _b = __read.apply(void 0, [_c.sent(), 1]), account = _b[0]; + return [2 /*return*/, { provider: this.fortmatic.getProvider(), chainId: this.chainId, account: account }]; + } + }); + }); + }; + return FortmaticConnector; +}(fortmaticConnector.FortmaticConnector)); + +var RequestError = /** @class */ (function (_super) { + __extends(RequestError, _super); + function RequestError(message, code, data) { + var _this = _super.call(this, message) || this; + _this.code = code; + _this.data = data; + return _this; + } + return RequestError; +}(Error)); +var MiniRpcProvider = /** @class */ (function () { + function MiniRpcProvider(connector, chainId, url, batchWaitTimeMs) { + var _this = this; + this.isMetaMask = false; + this.nextId = 1; + this.batchTimeoutId = null; + this.batch = []; + this.clearBatch = function () { return __awaiter(_this, void 0, void 0, function () { + var batch, response, json, byKey, json_1, json_1_1, result, _a, resolve, reject, method; + var e_1, _b; + var _this = this; + var _c, _d, _e; + return __generator(this, function (_f) { + switch (_f.label) { + case 0: + console.debug('Clearing batch', this.batch); + batch = this.batch; + batch = batch.filter(function (b) { + if (b.request.method === 'wallet_switchEthereumChain') { + try { + _this.connector.changeChainId(parseInt(b.request.params[0].chainId)); + b.resolve({ id: b.request.id }); + } + catch (error) { + b.reject(error); + } + return false; + } + return true; + }); + this.batch = []; + this.batchTimeoutId = null; + _f.label = 1; + case 1: + _f.trys.push([1, 3, , 4]); + return [4 /*yield*/, fetch(this.url, { + method: 'POST', + headers: { 'content-type': 'application/json', accept: 'application/json' }, + body: JSON.stringify(batch.map(function (item) { return item.request; })), + })]; + case 2: + response = _f.sent(); + return [3 /*break*/, 4]; + case 3: + _f.sent(); + batch.forEach(function (_a) { + var reject = _a.reject; + return reject(new Error('Failed to send batch call')); + }); + return [2 /*return*/]; + case 4: + if (!response.ok) { + batch.forEach(function (_a) { + var reject = _a.reject; + return reject(new RequestError(response.status + ": " + response.statusText, -32000)); + }); + return [2 /*return*/]; + } + _f.label = 5; + case 5: + _f.trys.push([5, 7, , 8]); + return [4 /*yield*/, response.json()]; + case 6: + json = _f.sent(); + return [3 /*break*/, 8]; + case 7: + _f.sent(); + batch.forEach(function (_a) { + var reject = _a.reject; + return reject(new Error('Failed to parse JSON response')); + }); + return [2 /*return*/]; + case 8: + byKey = batch.reduce(function (memo, current) { + memo[current.request.id] = current; + return memo; + }, {}); + try { + for (json_1 = __values(json), json_1_1 = json_1.next(); !json_1_1.done; json_1_1 = json_1.next()) { + result = json_1_1.value; + _a = byKey[result.id], resolve = _a.resolve, reject = _a.reject, method = _a.request.method; + if ('error' in result) { + reject(new RequestError((_c = result === null || result === void 0 ? void 0 : result.error) === null || _c === void 0 ? void 0 : _c.message, (_d = result === null || result === void 0 ? void 0 : result.error) === null || _d === void 0 ? void 0 : _d.code, (_e = result === null || result === void 0 ? void 0 : result.error) === null || _e === void 0 ? void 0 : _e.data)); + } + else if ('result' in result && resolve) { + resolve(result.result); + } + else { + reject(new RequestError("Received unexpected JSON-RPC response to " + method + " request.", -32000, result)); + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (json_1_1 && !json_1_1.done && (_b = json_1.return)) _b.call(json_1); + } + finally { if (e_1) throw e_1.error; } + } + return [2 /*return*/]; + } + }); + }); }; + this.sendAsync = function (request, callback) { + _this.request(request.method, request.params) + .then(function (result) { return callback(null, { jsonrpc: '2.0', id: request.id, result: result }); }) + .catch(function (error) { return callback(error, null); }); + }; + this.request = function (method, params) { return __awaiter(_this, void 0, void 0, function () { + var promise; + var _this = this; + var _a; + return __generator(this, function (_b) { + if (typeof method !== 'string') { + return [2 /*return*/, this.request(method.method, method.params)]; + } + if (method === 'eth_chainId') { + return [2 /*return*/, "0x" + this.chainId.toString(16)]; + } + promise = new Promise(function (resolve, reject) { + _this.batch.push({ + request: { + jsonrpc: '2.0', + id: _this.nextId++, + method: method, + params: params, + }, + resolve: resolve, + reject: reject, + }); + }); + this.batchTimeoutId = (_a = this.batchTimeoutId) !== null && _a !== void 0 ? _a : setTimeout(this.clearBatch, this.batchWaitTimeMs); + return [2 /*return*/, promise]; + }); + }); }; + this.connector = connector; + this.chainId = chainId; + this.url = url; + var parsed = new URL(url); + this.host = parsed.host; + this.path = parsed.pathname; + // how long to wait to batch calls + this.batchWaitTimeMs = batchWaitTimeMs !== null && batchWaitTimeMs !== void 0 ? batchWaitTimeMs : 50; + } + return MiniRpcProvider; +}()); +var NetworkConnector = /** @class */ (function (_super) { + __extends(NetworkConnector, _super); + function NetworkConnector(_a) { + var urls = _a.urls, defaultChainId = _a.defaultChainId; + var _this = this; + invariant__default["default"](defaultChainId || Object.keys(urls).length === 1, 'defaultChainId is a required argument with >1 url'); + _this = _super.call(this, { supportedChainIds: Object.keys(urls).map(function (k) { return Number(k); }) }) || this; + _this.currentChainId = defaultChainId !== null && defaultChainId !== void 0 ? defaultChainId : Number(Object.keys(urls)[0]); + _this.providers = Object.keys(urls).reduce(function (accumulator, chainId) { + accumulator[Number(chainId)] = new MiniRpcProvider(_this, Number(chainId), urls[Number(chainId)]); + return accumulator; + }, {}); + return _this; + } + Object.defineProperty(NetworkConnector.prototype, "provider", { + get: function () { + return this.providers[this.currentChainId]; + }, + enumerable: false, + configurable: true + }); + NetworkConnector.prototype.activate = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, { provider: this.providers[this.currentChainId], chainId: this.currentChainId, account: null }]; + }); + }); + }; + NetworkConnector.prototype.getProvider = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.providers[this.currentChainId]]; + }); + }); + }; + NetworkConnector.prototype.getChainId = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.currentChainId]; + }); + }); + }; + NetworkConnector.prototype.getAccount = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, null]; + }); + }); + }; + NetworkConnector.prototype.deactivate = function () { + return; + }; + /** + * Meant to be called only by MiniRpcProvider + * @param chainId the new chain id + */ + NetworkConnector.prototype.changeChainId = function (chainId) { + if (chainId in this.providers) { + this.currentChainId = chainId; + this.emitUpdate({ + chainId: chainId, + account: null, + provider: this.providers[chainId], + }); + } + else { + throw new Error("Unsupported chain ID: " + chainId); + } + }; + return NetworkConnector; +}(abstractConnector.AbstractConnector)); + +var FORMATIC_KEY = process.env.REACT_APP_FORTMATIC_KEY; +var PORTIS_ID = process.env.REACT_APP_PORTIS_ID; +var network = new NetworkConnector({ + urls: INFURA_NETWORK_URLS, + defaultChainId: 1, +}); +var networkLibrary; +function getNetworkLibrary() { + return (networkLibrary = networkLibrary !== null && networkLibrary !== void 0 ? networkLibrary : getLibrary(network.provider)); +} +var injected = new injectedConnector.InjectedConnector({ + supportedChainIds: ALL_SUPPORTED_CHAIN_IDS, +}); +var gnosisSafe = new safeAppsWeb3React.SafeAppConnector(); +var walletconnect = new walletconnectConnector.WalletConnectConnector({ + supportedChainIds: ALL_SUPPORTED_CHAIN_IDS, + rpc: INFURA_NETWORK_URLS, + qrcode: true, +}); +// mainnet only +var fortmatic$2 = new FortmaticConnector({ + apiKey: FORMATIC_KEY !== null && FORMATIC_KEY !== void 0 ? FORMATIC_KEY : '', + chainId: 1, +}); +// mainnet only +var portis = new portisConnector.PortisConnector({ + dAppId: PORTIS_ID !== null && PORTIS_ID !== void 0 ? PORTIS_ID : '', + networks: [1], +}); +var walletlink = new walletlinkConnector.WalletLinkConnector({ + url: INFURA_NETWORK_URLS[SupportedChainId.MAINNET], + appName: 'Uniswap', + appLogoUrl: UNISWAP_LOGO_URL, + supportedChainIds: [SupportedChainId.MAINNET, SupportedChainId.POLYGON], +}); + +/* + https://github.com/banksean wrapped Makoto Matsumoto and Takuji Nishimura's code in a namespace + so it's better encapsulated. Now you can have multiple random number generators + and they won't stomp all over eachother's state. + + If you want to use this as a substitute for Math.random(), use the random() + method like so: + + var m = new MersenneTwister(); + var randomNumber = m.random(); + + You can also call the other genrand_{foo}() methods on the instance. + + If you want to use a specific seed in order to get a repeatable random + sequence, pass an integer into the constructor: + + var m = new MersenneTwister(123); + + and that will always produce the same random sequence. + + Sean McCullough (banksean@gmail.com) +*/ + +/* + A C-program for MT19937, with initialization improved 2002/1/26. + Coded by Takuji Nishimura and Makoto Matsumoto. + + Before using, initialize the state by using init_seed(seed) + or init_by_array(init_key, key_length). + + Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura, + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. The names of its contributors may not be used to endorse or promote + products derived from this software without specific prior written + permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + Any feedback is very welcome. + http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html + email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space) +*/ + +var MersenneTwister$1 = function(seed) { + if (seed == undefined) { + seed = new Date().getTime(); + } + + /* Period parameters */ + this.N = 624; + this.M = 397; + this.MATRIX_A = 0x9908b0df; /* constant vector a */ + this.UPPER_MASK = 0x80000000; /* most significant w-r bits */ + this.LOWER_MASK = 0x7fffffff; /* least significant r bits */ + + this.mt = new Array(this.N); /* the array for the state vector */ + this.mti=this.N+1; /* mti==N+1 means mt[N] is not initialized */ + + if (seed.constructor == Array) { + this.init_by_array(seed, seed.length); + } + else { + this.init_seed(seed); + } +}; + +/* initializes mt[N] with a seed */ +/* origin name init_genrand */ +MersenneTwister$1.prototype.init_seed = function(s) { + this.mt[0] = s >>> 0; + for (this.mti=1; this.mti>> 30); + this.mt[this.mti] = (((((s & 0xffff0000) >>> 16) * 1812433253) << 16) + (s & 0x0000ffff) * 1812433253) + + this.mti; + /* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */ + /* In the previous versions, MSBs of the seed affect */ + /* only MSBs of the array mt[]. */ + /* 2002/01/09 modified by Makoto Matsumoto */ + this.mt[this.mti] >>>= 0; + /* for >32 bit machines */ + } +}; + +/* initialize by an array with array-length */ +/* init_key is the array for initializing keys */ +/* key_length is its length */ +/* slight change for C++, 2004/2/26 */ +MersenneTwister$1.prototype.init_by_array = function(init_key, key_length) { + var i, j, k; + this.init_seed(19650218); + i=1; j=0; + k = (this.N>key_length ? this.N : key_length); + for (; k; k--) { + var s = this.mt[i-1] ^ (this.mt[i-1] >>> 30); + this.mt[i] = (this.mt[i] ^ (((((s & 0xffff0000) >>> 16) * 1664525) << 16) + ((s & 0x0000ffff) * 1664525))) + + init_key[j] + j; /* non linear */ + this.mt[i] >>>= 0; /* for WORDSIZE > 32 machines */ + i++; j++; + if (i>=this.N) { this.mt[0] = this.mt[this.N-1]; i=1; } + if (j>=key_length) j=0; + } + for (k=this.N-1; k; k--) { + var s = this.mt[i-1] ^ (this.mt[i-1] >>> 30); + this.mt[i] = (this.mt[i] ^ (((((s & 0xffff0000) >>> 16) * 1566083941) << 16) + (s & 0x0000ffff) * 1566083941)) + - i; /* non linear */ + this.mt[i] >>>= 0; /* for WORDSIZE > 32 machines */ + i++; + if (i>=this.N) { this.mt[0] = this.mt[this.N-1]; i=1; } + } + + this.mt[0] = 0x80000000; /* MSB is 1; assuring non-zero initial array */ +}; + +/* generates a random number on [0,0xffffffff]-interval */ +/* origin name genrand_int32 */ +MersenneTwister$1.prototype.random_int = function() { + var y; + var mag01 = new Array(0x0, this.MATRIX_A); + /* mag01[x] = x * MATRIX_A for x=0,1 */ + + if (this.mti >= this.N) { /* generate N words at one time */ + var kk; + + if (this.mti == this.N+1) /* if init_seed() has not been called, */ + this.init_seed(5489); /* a default initial seed is used */ + + for (kk=0;kk>> 1) ^ mag01[y & 0x1]; + } + for (;kk>> 1) ^ mag01[y & 0x1]; + } + y = (this.mt[this.N-1]&this.UPPER_MASK)|(this.mt[0]&this.LOWER_MASK); + this.mt[this.N-1] = this.mt[this.M-1] ^ (y >>> 1) ^ mag01[y & 0x1]; + + this.mti = 0; + } + + y = this.mt[this.mti++]; + + /* Tempering */ + y ^= (y >>> 11); + y ^= (y << 7) & 0x9d2c5680; + y ^= (y << 15) & 0xefc60000; + y ^= (y >>> 18); + + return y >>> 0; +}; + +/* generates a random number on [0,0x7fffffff]-interval */ +/* origin name genrand_int31 */ +MersenneTwister$1.prototype.random_int31 = function() { + return (this.random_int()>>>1); +}; + +/* generates a random number on [0,1]-real-interval */ +/* origin name genrand_real1 */ +MersenneTwister$1.prototype.random_incl = function() { + return this.random_int()*(1.0/4294967295.0); + /* divided by 2^32-1 */ +}; + +/* generates a random number on [0,1)-real-interval */ +MersenneTwister$1.prototype.random = function() { + return this.random_int()*(1.0/4294967296.0); + /* divided by 2^32 */ +}; + +/* generates a random number on (0,1)-real-interval */ +/* origin name genrand_real3 */ +MersenneTwister$1.prototype.random_excl = function() { + return (this.random_int() + 0.5)*(1.0/4294967296.0); + /* divided by 2^32 */ +}; + +/* generates a random number on [0,1) with 53-bit resolution*/ +/* origin name genrand_res53 */ +MersenneTwister$1.prototype.random_long = function() { + var a=this.random_int()>>>5, b=this.random_int()>>>6; + return (a*67108864.0+b)*(1.0/9007199254740992.0); +}; + +/* These real versions are due to Isaku Wada, 2002/01/09 added */ + +var mersenneTwister = MersenneTwister$1; + +function newPaper(diameter, color) { + var container = document.createElement('div'); + container.style.borderRadius = '50px'; + container.style.overflow = 'hidden'; + container.style.padding = '0px'; + container.style.margin = '0px'; + container.style.width = '' + diameter + 'px'; + container.style.height = '' + diameter + 'px'; + container.style.display = 'inline-block'; + container.style.background = color; + return { + container: container, + } +} + +var paper = newPaper; + +var require$$0 = /*@__PURE__*/getAugmentedNamespace(clone__namespace); + +var require$$1 = /*@__PURE__*/getAugmentedNamespace(colorConvert__namespace); + +var require$$2 = /*@__PURE__*/getAugmentedNamespace(colorString__namespace); + +/* MIT license */ + +var clone = require$$0; +var convert = require$$1; +var string = require$$2; + +var Color$1 = function (obj) { + if (obj instanceof Color$1) { + return obj; + } + if (!(this instanceof Color$1)) { + return new Color$1(obj); + } + + this.values = { + rgb: [0, 0, 0], + hsl: [0, 0, 0], + hsv: [0, 0, 0], + hwb: [0, 0, 0], + cmyk: [0, 0, 0, 0], + alpha: 1 + }; + + // parse Color() argument + var vals; + if (typeof obj === 'string') { + vals = string.getRgba(obj); + if (vals) { + this.setValues('rgb', vals); + } else if (vals = string.getHsla(obj)) { + this.setValues('hsl', vals); + } else if (vals = string.getHwb(obj)) { + this.setValues('hwb', vals); + } else { + throw new Error('Unable to parse color from string "' + obj + '"'); + } + } else if (typeof obj === 'object') { + vals = obj; + if (vals.r !== undefined || vals.red !== undefined) { + this.setValues('rgb', vals); + } else if (vals.l !== undefined || vals.lightness !== undefined) { + this.setValues('hsl', vals); + } else if (vals.v !== undefined || vals.value !== undefined) { + this.setValues('hsv', vals); + } else if (vals.w !== undefined || vals.whiteness !== undefined) { + this.setValues('hwb', vals); + } else if (vals.c !== undefined || vals.cyan !== undefined) { + this.setValues('cmyk', vals); + } else { + throw new Error('Unable to parse color from object ' + JSON.stringify(obj)); + } + } +}; + +Color$1.prototype = { + rgb: function () { + return this.setSpace('rgb', arguments); + }, + hsl: function () { + return this.setSpace('hsl', arguments); + }, + hsv: function () { + return this.setSpace('hsv', arguments); + }, + hwb: function () { + return this.setSpace('hwb', arguments); + }, + cmyk: function () { + return this.setSpace('cmyk', arguments); + }, + + rgbArray: function () { + return this.values.rgb; + }, + hslArray: function () { + return this.values.hsl; + }, + hsvArray: function () { + return this.values.hsv; + }, + hwbArray: function () { + if (this.values.alpha !== 1) { + return this.values.hwb.concat([this.values.alpha]); + } + return this.values.hwb; + }, + cmykArray: function () { + return this.values.cmyk; + }, + rgbaArray: function () { + var rgb = this.values.rgb; + return rgb.concat([this.values.alpha]); + }, + rgbaArrayNormalized: function () { + var rgb = this.values.rgb; + var glRgba = []; + for (var i = 0; i < 3; i++) { + glRgba[i] = rgb[i] / 255; + } + glRgba.push(this.values.alpha); + return glRgba; + }, + hslaArray: function () { + var hsl = this.values.hsl; + return hsl.concat([this.values.alpha]); + }, + alpha: function (val) { + if (val === undefined) { + return this.values.alpha; + } + this.setValues('alpha', val); + return this; + }, + + red: function (val) { + return this.setChannel('rgb', 0, val); + }, + green: function (val) { + return this.setChannel('rgb', 1, val); + }, + blue: function (val) { + return this.setChannel('rgb', 2, val); + }, + hue: function (val) { + if (val) { + val %= 360; + val = val < 0 ? 360 + val : val; + } + return this.setChannel('hsl', 0, val); + }, + saturation: function (val) { + return this.setChannel('hsl', 1, val); + }, + lightness: function (val) { + return this.setChannel('hsl', 2, val); + }, + saturationv: function (val) { + return this.setChannel('hsv', 1, val); + }, + whiteness: function (val) { + return this.setChannel('hwb', 1, val); + }, + blackness: function (val) { + return this.setChannel('hwb', 2, val); + }, + value: function (val) { + return this.setChannel('hsv', 2, val); + }, + cyan: function (val) { + return this.setChannel('cmyk', 0, val); + }, + magenta: function (val) { + return this.setChannel('cmyk', 1, val); + }, + yellow: function (val) { + return this.setChannel('cmyk', 2, val); + }, + black: function (val) { + return this.setChannel('cmyk', 3, val); + }, + + hexString: function () { + return string.hexString(this.values.rgb); + }, + rgbString: function () { + return string.rgbString(this.values.rgb, this.values.alpha); + }, + rgbaString: function () { + return string.rgbaString(this.values.rgb, this.values.alpha); + }, + percentString: function () { + return string.percentString(this.values.rgb, this.values.alpha); + }, + hslString: function () { + return string.hslString(this.values.hsl, this.values.alpha); + }, + hslaString: function () { + return string.hslaString(this.values.hsl, this.values.alpha); + }, + hwbString: function () { + return string.hwbString(this.values.hwb, this.values.alpha); + }, + keyword: function () { + return string.keyword(this.values.rgb, this.values.alpha); + }, + + rgbNumber: function () { + return (this.values.rgb[0] << 16) | (this.values.rgb[1] << 8) | this.values.rgb[2]; + }, + + luminosity: function () { + // http://www.w3.org/TR/WCAG20/#relativeluminancedef + var rgb = this.values.rgb; + var lum = []; + for (var i = 0; i < rgb.length; i++) { + var chan = rgb[i] / 255; + lum[i] = (chan <= 0.03928) ? chan / 12.92 : Math.pow(((chan + 0.055) / 1.055), 2.4); + } + return 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2]; + }, + + contrast: function (color2) { + // http://www.w3.org/TR/WCAG20/#contrast-ratiodef + var lum1 = this.luminosity(); + var lum2 = color2.luminosity(); + if (lum1 > lum2) { + return (lum1 + 0.05) / (lum2 + 0.05); + } + return (lum2 + 0.05) / (lum1 + 0.05); + }, + + level: function (color2) { + var contrastRatio = this.contrast(color2); + if (contrastRatio >= 7.1) { + return 'AAA'; + } + + return (contrastRatio >= 4.5) ? 'AA' : ''; + }, + + dark: function () { + // YIQ equation from http://24ways.org/2010/calculating-color-contrast + var rgb = this.values.rgb; + var yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000; + return yiq < 128; + }, + + light: function () { + return !this.dark(); + }, + + negate: function () { + var rgb = []; + for (var i = 0; i < 3; i++) { + rgb[i] = 255 - this.values.rgb[i]; + } + this.setValues('rgb', rgb); + return this; + }, + + lighten: function (ratio) { + this.values.hsl[2] += this.values.hsl[2] * ratio; + this.setValues('hsl', this.values.hsl); + return this; + }, + + darken: function (ratio) { + this.values.hsl[2] -= this.values.hsl[2] * ratio; + this.setValues('hsl', this.values.hsl); + return this; + }, + + saturate: function (ratio) { + this.values.hsl[1] += this.values.hsl[1] * ratio; + this.setValues('hsl', this.values.hsl); + return this; + }, + + desaturate: function (ratio) { + this.values.hsl[1] -= this.values.hsl[1] * ratio; + this.setValues('hsl', this.values.hsl); + return this; + }, + + whiten: function (ratio) { + this.values.hwb[1] += this.values.hwb[1] * ratio; + this.setValues('hwb', this.values.hwb); + return this; + }, + + blacken: function (ratio) { + this.values.hwb[2] += this.values.hwb[2] * ratio; + this.setValues('hwb', this.values.hwb); + return this; + }, + + greyscale: function () { + var rgb = this.values.rgb; + // http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale + var val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11; + this.setValues('rgb', [val, val, val]); + return this; + }, + + clearer: function (ratio) { + this.setValues('alpha', this.values.alpha - (this.values.alpha * ratio)); + return this; + }, + + opaquer: function (ratio) { + this.setValues('alpha', this.values.alpha + (this.values.alpha * ratio)); + return this; + }, + + rotate: function (degrees) { + var hue = this.values.hsl[0]; + hue = (hue + degrees) % 360; + hue = hue < 0 ? 360 + hue : hue; + this.values.hsl[0] = hue; + this.setValues('hsl', this.values.hsl); + return this; + }, + + /** + * Ported from sass implementation in C + * https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209 + */ + mix: function (mixinColor, weight) { + var color1 = this; + var color2 = mixinColor; + var p = weight === undefined ? 0.5 : weight; + + var w = 2 * p - 1; + var a = color1.alpha() - color2.alpha(); + + var w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0; + var w2 = 1 - w1; + + return this + .rgb( + w1 * color1.red() + w2 * color2.red(), + w1 * color1.green() + w2 * color2.green(), + w1 * color1.blue() + w2 * color2.blue() + ) + .alpha(color1.alpha() * p + color2.alpha() * (1 - p)); + }, + + toJSON: function () { + return this.rgb(); + }, + + clone: function () { + var col = new Color$1(); + col.values = clone(this.values); + return col; + } +}; + +Color$1.prototype.getValues = function (space) { + var vals = {}; + + for (var i = 0; i < space.length; i++) { + vals[space.charAt(i)] = this.values[space][i]; + } + + if (this.values.alpha !== 1) { + vals.a = this.values.alpha; + } + + // {r: 255, g: 255, b: 255, a: 0.4} + return vals; +}; + +Color$1.prototype.setValues = function (space, vals) { + var spaces = { + rgb: ['red', 'green', 'blue'], + hsl: ['hue', 'saturation', 'lightness'], + hsv: ['hue', 'saturation', 'value'], + hwb: ['hue', 'whiteness', 'blackness'], + cmyk: ['cyan', 'magenta', 'yellow', 'black'] + }; + + var maxes = { + rgb: [255, 255, 255], + hsl: [360, 100, 100], + hsv: [360, 100, 100], + hwb: [360, 100, 100], + cmyk: [100, 100, 100, 100] + }; + + var i; + var alpha = 1; + if (space === 'alpha') { + alpha = vals; + } else if (vals.length) { + // [10, 10, 10] + this.values[space] = vals.slice(0, space.length); + alpha = vals[space.length]; + } else if (vals[space.charAt(0)] !== undefined) { + // {r: 10, g: 10, b: 10} + for (i = 0; i < space.length; i++) { + this.values[space][i] = vals[space.charAt(i)]; + } + + alpha = vals.a; + } else if (vals[spaces[space][0]] !== undefined) { + // {red: 10, green: 10, blue: 10} + var chans = spaces[space]; + + for (i = 0; i < space.length; i++) { + this.values[space][i] = vals[chans[i]]; + } + + alpha = vals.alpha; + } + + this.values.alpha = Math.max(0, Math.min(1, (alpha === undefined ? this.values.alpha : alpha))); + + if (space === 'alpha') { + return false; + } + + var capped; + + // cap values of the space prior converting all values + for (i = 0; i < space.length; i++) { + capped = Math.max(0, Math.min(maxes[space][i], this.values[space][i])); + this.values[space][i] = Math.round(capped); + } + + // convert to all the other color spaces + for (var sname in spaces) { + if (sname !== space) { + this.values[sname] = convert[space][sname](this.values[space]); + } + + // cap values + for (i = 0; i < sname.length; i++) { + capped = Math.max(0, Math.min(maxes[sname][i], this.values[sname][i])); + this.values[sname][i] = Math.round(capped); + } + } + + return true; +}; + +Color$1.prototype.setSpace = function (space, args) { + var vals = args[0]; + + if (vals === undefined) { + // color.rgb() + return this.getValues(space); + } + + // color.rgb(10, 10, 10) + if (typeof vals === 'number') { + vals = Array.prototype.slice.call(args); + } + + this.setValues(space, vals); + return this; +}; + +Color$1.prototype.setChannel = function (space, index, val) { + if (val === undefined) { + // color.red() + return this.values[space][index]; + } else if (val === this.values[space][index]) { + // color.red(color.red()) + return this; + } + + // color.red(100) + this.values[space][index] = val; + this.setValues(space, this.values[space]); + + return this; +}; + +var color = Color$1; + +var colors$1 = [ + '#01888C', // teal + '#FC7500', // bright orange + '#034F5D', // dark teal + '#F73F01', // orangered + '#FC1960', // magenta + '#C7144C', // raspberry + '#F3C100', // goldenrod + '#1598F2', // lightning blue + '#2465E1', // sail blue + '#F19E02', // gold +]; + +var MersenneTwister = mersenneTwister; +var paperGen = paper; +var Color = color; +var colors = colors$1; +var shapeCount = 4; +var svgns = 'http://www.w3.org/2000/svg'; + +var jazzicon = generateIdenticon; + +var generator; +function generateIdenticon(diameter, seed) { + generator = new MersenneTwister(seed); + var remainingColors = hueShift(colors.slice(), generator); + + var elements = paperGen(diameter, genColor(remainingColors)); + var container = elements.container; + + var svg = document.createElementNS(svgns, 'svg'); + svg.setAttributeNS(null, 'x', '0'); + svg.setAttributeNS(null, 'y', '0'); + svg.setAttributeNS(null, 'width', diameter); + svg.setAttributeNS(null, 'height', diameter); + + container.appendChild(svg); + + for(var i = 0; i < shapeCount - 1; i++) { + genShape(remainingColors, diameter, i, shapeCount - 1, svg); + } + + return container +} + +function genShape(remainingColors, diameter, i, total, svg) { + var center = diameter / 2; + + var shape = document.createElementNS(svgns, 'rect'); + shape.setAttributeNS(null, 'x', '0'); + shape.setAttributeNS(null, 'y', '0'); + shape.setAttributeNS(null, 'width', diameter); + shape.setAttributeNS(null, 'height', diameter); + + var firstRot = generator.random(); + var angle = Math.PI * 2 * firstRot; + var velocity = diameter / total * generator.random() + (i * diameter / total); + + var tx = (Math.cos(angle) * velocity); + var ty = (Math.sin(angle) * velocity); + + var translate = 'translate(' + tx + ' ' + ty + ')'; + + // Third random is a shape rotation on top of all of that. + var secondRot = generator.random(); + var rot = (firstRot * 360) + secondRot * 180; + var rotate = 'rotate(' + rot.toFixed(1) + ' ' + center + ' ' + center + ')'; + var transform = translate + ' ' + rotate; + shape.setAttributeNS(null, 'transform', transform); + var fill = genColor(remainingColors); + shape.setAttributeNS(null, 'fill', fill); + + svg.appendChild(shape); +} + +function genColor(colors) { + generator.random(); + var idx = Math.floor(colors.length * generator.random()); + var color = colors.splice(idx,1)[0]; + return color +} + +var wobble = 30; +function hueShift(colors, generator) { + var amount = (generator.random() * 30) - (wobble / 2); + return colors.map(function(hex) { + var color = Color(hex); + color.rotate(amount); + return color.hexString() + }) +} + +/** + * Returns the ENS avatar URI, if available. + * Spec: https://gist.github.com/Arachnid/9db60bd75277969ee1689c8742b75182. + */ +function useENSAvatar(address, enforceOwnership) { + if (enforceOwnership === void 0) { enforceOwnership = true; } + var debouncedAddress = useDebounce(address, 200); + var node = React.useMemo(function () { + if (!debouncedAddress || !isAddress(debouncedAddress)) + return undefined; + return hash.namehash(debouncedAddress.toLowerCase().substr(2) + ".addr.reverse"); + }, [debouncedAddress]); + var addressAvatar = useAvatarFromNode(node); + var ENSName = useENSName(address).ENSName; + var nameAvatar = useAvatarFromNode(ENSName === null ? undefined : safeNamehash(ENSName)); + var avatar = addressAvatar.avatar || nameAvatar.avatar; + var nftAvatar = useAvatarFromNFT(avatar, enforceOwnership); + avatar = nftAvatar.avatar || avatar; + var http = avatar && uriToHttp(avatar)[0]; + var changed = debouncedAddress !== address; + return React.useMemo(function () { return ({ + avatar: changed ? null : http !== null && http !== void 0 ? http : null, + loading: changed || addressAvatar.loading || nameAvatar.loading || nftAvatar.loading, + }); }, [addressAvatar.loading, changed, http, nameAvatar.loading, nftAvatar.loading]); +} +function useAvatarFromNode(node) { + var _a; + var nodeArgument = React.useMemo(function () { return [node]; }, [node]); + var textArgument = React.useMemo(function () { return [node, 'avatar']; }, [node]); + var registrarContract = useENSRegistrarContract(false); + var resolverAddress = useSingleCallResult(registrarContract, 'resolver', nodeArgument); + var resolverAddressResult = (_a = resolverAddress.result) === null || _a === void 0 ? void 0 : _a[0]; + var resolverContract = useENSResolverContract(resolverAddressResult && !isZero(resolverAddressResult) ? resolverAddressResult : undefined, false); + var avatar = useSingleCallResult(resolverContract, 'text', textArgument); + return React.useMemo(function () { + var _a; + return ({ + avatar: (_a = avatar.result) === null || _a === void 0 ? void 0 : _a[0], + loading: resolverAddress.loading || avatar.loading, + }); + }, [avatar.loading, avatar.result, resolverAddress.loading]); +} +function useAvatarFromNFT(nftUri, enforceOwnership) { + var _a, _b, _c, _d; + if (nftUri === void 0) { nftUri = ''; } + var parts = nftUri.toLowerCase().split(':'); + var protocol = parts[0]; + // ignore the chain from eip155 + // TODO: when we are able, pull only from the specified chain + var _e = __read((_b = (_a = parts[1]) === null || _a === void 0 ? void 0 : _a.split('/')) !== null && _b !== void 0 ? _b : [], 2), erc = _e[1]; + var _f = __read((_d = (_c = parts[2]) === null || _c === void 0 ? void 0 : _c.split('/')) !== null && _d !== void 0 ? _d : [], 2), contractAddress = _f[0], id = _f[1]; + var isERC721 = protocol === 'eip155' && erc === 'erc721'; + var isERC1155 = protocol === 'eip155' && erc === 'erc1155'; + var erc721 = useERC721Uri(isERC721 ? contractAddress : undefined, id, enforceOwnership); + var erc1155 = useERC1155Uri(isERC1155 ? contractAddress : undefined, id, enforceOwnership); + var uri = erc721.uri || erc1155.uri; + var http = uri && uriToHttp(uri)[0]; + var _g = __read(React.useState(false), 2), loading = _g[0], setLoading = _g[1]; + var _h = __read(React.useState(undefined), 2), avatar = _h[0], setAvatar = _h[1]; + React.useEffect(function () { + setAvatar(undefined); + if (http) { + setLoading(true); + fetch(http) + .then(function (res) { return res.json(); }) + .then(function (_a) { + var image = _a.image; + setAvatar(image); + }) + .catch(function (e) { return console.warn(e); }) + .finally(function () { + setLoading(false); + }); + } + }, [http]); + return React.useMemo(function () { return ({ avatar: avatar, loading: erc721.loading || erc1155.loading || loading }); }, [avatar, erc1155.loading, erc721.loading, loading]); +} +function useERC721Uri(contractAddress, id, enforceOwnership) { + var idArgument = React.useMemo(function () { return [id]; }, [id]); + var account = useActiveWeb3React().account; + var contract = useERC721Contract(contractAddress); + var owner = useSingleCallResult(contract, 'ownerOf', idArgument); + var uri = useSingleCallResult(contract, 'tokenURI', idArgument); + return React.useMemo(function () { + var _a, _b; + return ({ + uri: !enforceOwnership || account === ((_a = owner.result) === null || _a === void 0 ? void 0 : _a[0]) ? (_b = uri.result) === null || _b === void 0 ? void 0 : _b[0] : undefined, + loading: owner.loading || uri.loading, + }); + }, [account, enforceOwnership, owner.loading, owner.result, uri.loading, uri.result]); +} +function useERC1155Uri(contractAddress, id, enforceOwnership) { + var account = useActiveWeb3React().account; + var idArgument = React.useMemo(function () { return [id]; }, [id]); + var accountArgument = React.useMemo(function () { return [account || '', id]; }, [account, id]); + var contract = useERC1155Contract(contractAddress); + var balance = useSingleCallResult(contract, 'balanceOf', accountArgument); + var uri = useSingleCallResult(contract, 'uri', idArgument); + // ERC-1155 allows a generic {id} in the URL, so prepare to replace if relevant, + // in lowercase hexadecimal (with no 0x prefix) and leading zero padded to 64 hex characters. + var idHex = id ? bytes.hexZeroPad(bignumber.BigNumber.from(id).toHexString(), 32).substring(2) : id; + return React.useMemo(function () { + var _a, _b, _c; + return ({ + uri: !enforceOwnership || ((_a = balance.result) === null || _a === void 0 ? void 0 : _a[0]) > 0 ? (_c = (_b = uri.result) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.replaceAll('{id}', idHex) : undefined, + loading: balance.loading || uri.loading, + }); + }, [balance.loading, balance.result, enforceOwnership, uri.loading, uri.result, idHex]); +} + +var StyledIdenticon = styled__default["default"].div(templateObject_1$_ || (templateObject_1$_ = __makeTemplateObject(["\n height: 1rem;\n width: 1rem;\n border-radius: 1.125rem;\n background-color: ", ";\n font-size: initial;\n"], ["\n height: 1rem;\n width: 1rem;\n border-radius: 1.125rem;\n background-color: ", ";\n font-size: initial;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg4; +}); +var StyledAvatar = styled__default["default"].img(templateObject_2$I || (templateObject_2$I = __makeTemplateObject(["\n height: inherit;\n width: inherit;\n border-radius: inherit;\n"], ["\n height: inherit;\n width: inherit;\n border-radius: inherit;\n"]))); +function Identicon() { + var account = useActiveWeb3React().account; + var avatar = useENSAvatar(account !== null && account !== void 0 ? account : undefined).avatar; + var _a = __read(React.useState(true), 2), fetchable = _a[0], setFetchable = _a[1]; + var icon = React.useMemo(function () { return account && jazzicon(16, parseInt(account.slice(2, 10), 16)); }, [account]); + var iconRef = React.useRef(null); + React.useLayoutEffect(function () { + var current = iconRef.current; + if (icon) { + current === null || current === void 0 ? void 0 : current.appendChild(icon); + return function () { + try { + current === null || current === void 0 ? void 0 : current.removeChild(icon); + } + catch (e) { + console.error('Avatar icon not found'); + } + }; + } + return; + }, [icon, iconRef]); + return (jsxRuntime.jsx(StyledIdenticon, { children: avatar && fetchable ? (jsxRuntime.jsx(StyledAvatar, { alt: "avatar", src: avatar, onError: function () { return setFetchable(false); } }, void 0)) : (jsxRuntime.jsx("span", { ref: iconRef }, void 0)) }, void 0)); +} +var templateObject_1$_, templateObject_2$I; + +function StatusIcon(_a) { + var connector = _a.connector; + switch (connector) { + case injected: + return jsxRuntime.jsx(Identicon, {}, void 0); + case walletconnect: + return jsxRuntime.jsx("img", { src: WALLETCONNECT_ICON_URL, alt: 'WalletConnect' }, void 0); + case walletlink: + return jsxRuntime.jsx("img", { src: COINBASE_ICON_URL, alt: 'Coinbase Wallet' }, void 0); + case fortmatic$2: + return jsxRuntime.jsx("img", { src: FORTMATIC_ICON_URL, alt: 'Fortmatic' }, void 0); + case portis: + return jsxRuntime.jsx("img", { src: PORTIS_ICON_URL, alt: 'Portis' }, void 0); + default: + return null; + } +} + +var MetaMaskLogo = "f89237c6bc3f84db.png"; + +var _line$2, _line2$1; + +function _extends$5() { _extends$5 = 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$5.apply(this, arguments); } + +var SvgX = function SvgX(props) { + return /*#__PURE__*/React__namespace.createElement("svg", _extends$5({ + xmlns: "http://www.w3.org/2000/svg", + width: 20, + height: 20, + viewBox: "0 0 20 20", + fill: "none", + stroke: "currentColor", + strokeWidth: 2, + strokeLinecap: "round", + strokeLinejoin: "round", + className: "feather feather-x" + }, props), _line$2 || (_line$2 = /*#__PURE__*/React__namespace.createElement("line", { + x1: 18, + y1: 6, + x2: 6, + y2: 18 + })), _line2$1 || (_line2$1 = /*#__PURE__*/React__namespace.createElement("line", { + x1: 6, + y1: 6, + x2: 18, + y2: 18 + }))); +}; + +var INJECTED_ICON_URL = "data:image/svg+xml,%3Csvg%20width%3D%2218%22%20height%3D%2218%22%20viewBox%3D%220%200%2018%2018%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M9.79261%2016.1108L17.5398%208.36364L9.79261%200.616477L8.25852%202.15057L13.3807%207.25568H0V9.47159H13.3807L8.25852%2014.5852L9.79261%2016.1108Z%22%20fill%3D%22%23333639%22%2F%3E%3C%2Fsvg%3E"; + +var SUPPORTED_WALLETS = { + INJECTED: { + connector: injected, + name: 'Injected', + iconURL: INJECTED_ICON_URL, + description: 'Injected web3 provider.', + href: null, + color: '#010101', + primary: true, + }, + METAMASK: { + connector: injected, + name: 'MetaMask', + iconURL: MetaMaskLogo, + description: 'Easy-to-use browser extension.', + href: null, + color: '#E8831D', + }, + WALLET_CONNECT: { + connector: walletconnect, + name: 'WalletConnect', + iconURL: WALLETCONNECT_ICON_URL, + description: 'Connect to Trust Wallet, Rainbow Wallet and more...', + href: null, + color: '#4196FC', + mobile: true, + }, + WALLET_LINK: { + connector: walletlink, + name: 'Coinbase Wallet', + iconURL: COINBASE_ICON_URL, + description: 'Use Coinbase Wallet app on mobile device', + href: null, + color: '#315CF5', + }, + COINBASE_LINK: { + name: 'Open in Coinbase Wallet', + iconURL: COINBASE_ICON_URL, + description: 'Open in Coinbase Wallet app.', + href: 'https://go.cb-w.com/mtUDhEZPy1', + color: '#315CF5', + mobile: true, + mobileOnly: true, + }, + FORTMATIC: { + connector: fortmatic$2, + name: 'Fortmatic', + iconURL: FORTMATIC_ICON_URL, + description: 'Login using Fortmatic hosted wallet', + href: null, + color: '#6748FF', + mobile: true, + }, + Portis: { + connector: portis, + name: 'Portis', + iconURL: PORTIS_ICON_URL, + description: 'Login using Portis hosted wallet', + href: null, + color: '#4A6C9B', + mobile: true, + }, +}; + +// modified from https://usehooks.com/usePrevious/ +function usePrevious(value) { + // The ref object is a generic container whose current property is mutable ... + // ... and can hold any value, similar to an instance property on a class + var ref = React.useRef(); + // Store current value in ref + React.useEffect(function () { + ref.current = value; + }, [value]); // Only re-run if value changes + // Return previous value (happens before update in useEffect above) + return ref.current; +} + +function useCopyClipboard(timeout) { + if (timeout === void 0) { timeout = 500; } + var _a = __read(React.useState(false), 2), isCopied = _a[0], setIsCopied = _a[1]; + var staticCopy = React.useCallback(function (text) { + var didCopy = copy__default["default"](text); + setIsCopied(didCopy); + }, []); + React.useEffect(function () { + if (isCopied) { + var hide_1 = setTimeout(function () { + setIsCopied(false); + }, timeout); + return function () { + clearTimeout(hide_1); + }; + } + return undefined; + }, [isCopied, setIsCopied, timeout]); + return [isCopied, staticCopy]; +} + +var CopyIcon = styled__default["default"](LinkStyledButton)(templateObject_1$Z || (templateObject_1$Z = __makeTemplateObject(["\n color: ", ";\n flex-shrink: 0;\n display: flex;\n text-decoration: none;\n font-size: 0.825rem;\n :hover,\n :active,\n :focus {\n text-decoration: none;\n color: ", ";\n }\n"], ["\n color: ", ";\n flex-shrink: 0;\n display: flex;\n text-decoration: none;\n font-size: 0.825rem;\n :hover,\n :active,\n :focus {\n text-decoration: none;\n color: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text3; +}, function (_a) { + var theme = _a.theme; + return theme.text2; +}); +var TransactionStatusText$1 = styled__default["default"].span(templateObject_2$H || (templateObject_2$H = __makeTemplateObject(["\n margin-left: 0.25rem;\n font-size: 0.825rem;\n ", ";\n align-items: center;\n"], ["\n margin-left: 0.25rem;\n font-size: 0.825rem;\n ", ";\n align-items: center;\n"])), function (_a) { + var theme = _a.theme; + return theme.flexRowNoWrap; +}); +function CopyHelper(props) { + var _a = __read(useCopyClipboard(), 2), isCopied = _a[0], setCopied = _a[1]; + return (jsxRuntime.jsxs(CopyIcon, __assign({ onClick: function () { return setCopied(props.toCopy); } }, { children: [isCopied ? (jsxRuntime.jsxs(TransactionStatusText$1, { children: [jsxRuntime.jsx(reactFeather.CheckCircle, { size: '16' }, void 0), jsxRuntime.jsx(TransactionStatusText$1, { children: jsxRuntime.jsx(macro.Trans, { children: "Copied" }, void 0) }, void 0)] }, void 0)) : (jsxRuntime.jsx(TransactionStatusText$1, { children: jsxRuntime.jsx(reactFeather.Copy, { size: '16' }, void 0) }, void 0)), isCopied ? '' : props.children] }), void 0)); +} +var templateObject_1$Z, templateObject_2$H; + +var VoteOption; +(function (VoteOption) { + VoteOption[VoteOption["Against"] = 0] = "Against"; + VoteOption[VoteOption["For"] = 1] = "For"; + VoteOption[VoteOption["Abstain"] = 2] = "Abstain"; +})(VoteOption || (VoteOption = {})); + +function formatAmount(amountRaw, decimals, sigFigs) { + return new sdkCore.Fraction(amountRaw, JSBI__default["default"].exponentiate(JSBI__default["default"].BigInt(10), JSBI__default["default"].BigInt(decimals))).toSignificant(sigFigs); +} +function FormattedCurrencyAmount(_a) { + var rawAmount = _a.rawAmount, symbol = _a.symbol, decimals = _a.decimals, sigFigs = _a.sigFigs; + return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [formatAmount(rawAmount, decimals, sigFigs), " ", symbol] }, void 0)); +} +function FormattedCurrencyAmountManaged(_a) { + var _b; + var rawAmount = _a.rawAmount, currencyId = _a.currencyId, _c = _a.sigFigs, sigFigs = _c === void 0 ? 6 : _c; + var currency = useCurrency(currencyId); + return currency ? (jsxRuntime.jsx(FormattedCurrencyAmount, { rawAmount: rawAmount, decimals: currency.decimals, sigFigs: sigFigs, symbol: (_b = currency.symbol) !== null && _b !== void 0 ? _b : '???' }, void 0)) : null; +} +function ClaimSummary(_a) { + var _b = _a.info, recipient = _b.recipient, uniAmountRaw = _b.uniAmountRaw; + var ENSName = useENSName().ENSName; + return typeof uniAmountRaw === 'string' ? (jsxRuntime.jsxs(macro.Trans, { children: ["Claim ", jsxRuntime.jsx(FormattedCurrencyAmount, { rawAmount: uniAmountRaw, symbol: 'UNI', decimals: 18, sigFigs: 4 }, void 0), " for", ' ', ENSName !== null && ENSName !== void 0 ? ENSName : recipient] }, void 0)) : (jsxRuntime.jsxs(macro.Trans, { children: ["Claim UNI reward for ", ENSName !== null && ENSName !== void 0 ? ENSName : recipient] }, void 0)); +} +function SubmitProposalTransactionSummary(_) { + return jsxRuntime.jsx(macro.Trans, { children: "Submit new proposal" }, void 0); +} +function ApprovalSummary(_a) { + var info = _a.info; + var token = useToken(info.tokenAddress); + return jsxRuntime.jsxs(macro.Trans, { children: ["Approve ", token === null || token === void 0 ? void 0 : token.symbol] }, void 0); +} +function VoteSummary(_a) { + var info = _a.info; + var proposalKey = info.governorAddress + "/" + info.proposalId; + if (info.reason && info.reason.trim().length > 0) { + switch (info.decision) { + case VoteOption.For: + return jsxRuntime.jsxs(macro.Trans, { children: ["Vote for proposal ", proposalKey] }, void 0); + case VoteOption.Abstain: + return jsxRuntime.jsxs(macro.Trans, { children: ["Vote to abstain on proposal ", proposalKey] }, void 0); + case VoteOption.Against: + return jsxRuntime.jsxs(macro.Trans, { children: ["Vote against proposal ", proposalKey] }, void 0); + } + } + else { + switch (info.decision) { + case VoteOption.For: + return (jsxRuntime.jsxs(macro.Trans, { children: ["Vote for proposal ", proposalKey, " with reason \"", info.reason, "\""] }, void 0)); + case VoteOption.Abstain: + return (jsxRuntime.jsxs(macro.Trans, { children: ["Vote to abstain on proposal ", proposalKey, " with reason \"", info.reason, "\""] }, void 0)); + case VoteOption.Against: + return (jsxRuntime.jsxs(macro.Trans, { children: ["Vote against proposal ", proposalKey, " with reason \"", info.reason, "\""] }, void 0)); + } + } +} +function DelegateSummary(_a) { + var delegatee = _a.info.delegatee; + var ENSName = useENSName(delegatee).ENSName; + return jsxRuntime.jsxs(macro.Trans, { children: ["Delegate voting power to ", ENSName !== null && ENSName !== void 0 ? ENSName : delegatee] }, void 0); +} +function WrapSummary(_a) { + var _b, _c, _d, _e, _f, _g; + var _h = _a.info, chainId = _h.chainId, currencyAmountRaw = _h.currencyAmountRaw, unwrapped = _h.unwrapped; + var native = chainId ? nativeOnChain(chainId) : undefined; + if (unwrapped) { + return (jsxRuntime.jsxs(macro.Trans, { children: ["Unwrap", ' ', jsxRuntime.jsx(FormattedCurrencyAmount, { rawAmount: currencyAmountRaw, symbol: (_c = (_b = native === null || native === void 0 ? void 0 : native.wrapped) === null || _b === void 0 ? void 0 : _b.symbol) !== null && _c !== void 0 ? _c : 'WETH', decimals: 18, sigFigs: 6 }, void 0), ' ', "to ", (_d = native === null || native === void 0 ? void 0 : native.symbol) !== null && _d !== void 0 ? _d : 'ETH'] }, void 0)); + } + else { + return (jsxRuntime.jsxs(macro.Trans, { children: ["Wrap", ' ', jsxRuntime.jsx(FormattedCurrencyAmount, { rawAmount: currencyAmountRaw, symbol: (_e = native === null || native === void 0 ? void 0 : native.symbol) !== null && _e !== void 0 ? _e : 'ETH', decimals: 18, sigFigs: 6 }, void 0), ' ', "to ", (_g = (_f = native === null || native === void 0 ? void 0 : native.wrapped) === null || _f === void 0 ? void 0 : _f.symbol) !== null && _g !== void 0 ? _g : 'WETH'] }, void 0)); + } +} +function DepositLiquidityStakingSummary(_) { + // not worth rendering the tokens since you can should no longer deposit liquidity in the staking contracts + // todo: deprecate and delete the code paths that allow this, show user more information + return jsxRuntime.jsx(macro.Trans, { children: "Deposit liquidity" }, void 0); +} +function WithdrawLiquidityStakingSummary(_) { + return jsxRuntime.jsx(macro.Trans, { children: "Withdraw deposited liquidity" }, void 0); +} +function MigrateLiquidityToV3Summary(_a) { + var _b = _a.info, baseCurrencyId = _b.baseCurrencyId, quoteCurrencyId = _b.quoteCurrencyId; + var baseCurrency = useCurrency(baseCurrencyId); + var quoteCurrency = useCurrency(quoteCurrencyId); + return (jsxRuntime.jsxs(macro.Trans, { children: ["Migrate ", baseCurrency === null || baseCurrency === void 0 ? void 0 : baseCurrency.symbol, "/", quoteCurrency === null || quoteCurrency === void 0 ? void 0 : quoteCurrency.symbol, " liquidity to V3"] }, void 0)); +} +function CreateV3PoolSummary(_a) { + var _b = _a.info, quoteCurrencyId = _b.quoteCurrencyId, baseCurrencyId = _b.baseCurrencyId; + var baseCurrency = useCurrency(baseCurrencyId); + var quoteCurrency = useCurrency(quoteCurrencyId); + return (jsxRuntime.jsxs(macro.Trans, { children: ["Create ", baseCurrency === null || baseCurrency === void 0 ? void 0 : baseCurrency.symbol, "/", quoteCurrency === null || quoteCurrency === void 0 ? void 0 : quoteCurrency.symbol, " V3 pool"] }, void 0)); +} +function CollectFeesSummary(_a) { + var _b = _a.info, currencyId0 = _b.currencyId0, currencyId1 = _b.currencyId1; + var currency0 = useCurrency(currencyId0); + var currency1 = useCurrency(currencyId1); + return (jsxRuntime.jsxs(macro.Trans, { children: ["Collect ", currency0 === null || currency0 === void 0 ? void 0 : currency0.symbol, "/", currency1 === null || currency1 === void 0 ? void 0 : currency1.symbol, " fees"] }, void 0)); +} +function RemoveLiquidityV3Summary(_a) { + var _b = _a.info, baseCurrencyId = _b.baseCurrencyId, quoteCurrencyId = _b.quoteCurrencyId, expectedAmountBaseRaw = _b.expectedAmountBaseRaw, expectedAmountQuoteRaw = _b.expectedAmountQuoteRaw; + return (jsxRuntime.jsxs(macro.Trans, { children: ["Remove", ' ', jsxRuntime.jsx(FormattedCurrencyAmountManaged, { rawAmount: expectedAmountBaseRaw, currencyId: baseCurrencyId, sigFigs: 3 }, void 0), " and", ' ', jsxRuntime.jsx(FormattedCurrencyAmountManaged, { rawAmount: expectedAmountQuoteRaw, currencyId: quoteCurrencyId, sigFigs: 3 }, void 0)] }, void 0)); +} +function AddLiquidityV3PoolSummary(_a) { + var _b = _a.info, createPool = _b.createPool, quoteCurrencyId = _b.quoteCurrencyId, baseCurrencyId = _b.baseCurrencyId; + var baseCurrency = useCurrency(baseCurrencyId); + var quoteCurrency = useCurrency(quoteCurrencyId); + return createPool ? (jsxRuntime.jsxs(macro.Trans, { children: ["Create pool and add ", baseCurrency === null || baseCurrency === void 0 ? void 0 : baseCurrency.symbol, "/", quoteCurrency === null || quoteCurrency === void 0 ? void 0 : quoteCurrency.symbol, " V3 liquidity"] }, void 0)) : (jsxRuntime.jsxs(macro.Trans, { children: ["Add ", baseCurrency === null || baseCurrency === void 0 ? void 0 : baseCurrency.symbol, "/", quoteCurrency === null || quoteCurrency === void 0 ? void 0 : quoteCurrency.symbol, " V3 liquidity"] }, void 0)); +} +function AddLiquidityV2PoolSummary(_a) { + var _b = _a.info, quoteCurrencyId = _b.quoteCurrencyId, expectedAmountBaseRaw = _b.expectedAmountBaseRaw, expectedAmountQuoteRaw = _b.expectedAmountQuoteRaw, baseCurrencyId = _b.baseCurrencyId; + return (jsxRuntime.jsxs(macro.Trans, { children: ["Add ", jsxRuntime.jsx(FormattedCurrencyAmountManaged, { rawAmount: expectedAmountBaseRaw, currencyId: baseCurrencyId, sigFigs: 3 }, void 0), ' ', "and ", jsxRuntime.jsx(FormattedCurrencyAmountManaged, { rawAmount: expectedAmountQuoteRaw, currencyId: quoteCurrencyId, sigFigs: 3 }, void 0), ' ', "to Uniswap V2"] }, void 0)); +} +function SwapSummary(_a) { + var info = _a.info; + if (info.tradeType === sdkCore.TradeType.EXACT_INPUT) { + return (jsxRuntime.jsxs(macro.Trans, { children: ["Swap exactly", ' ', jsxRuntime.jsx(FormattedCurrencyAmountManaged, { rawAmount: info.inputCurrencyAmountRaw, currencyId: info.inputCurrencyId, sigFigs: 6 }, void 0), ' ', "for", ' ', jsxRuntime.jsx(FormattedCurrencyAmountManaged, { rawAmount: info.expectedOutputCurrencyAmountRaw, currencyId: info.outputCurrencyId, sigFigs: 6 }, void 0)] }, void 0)); + } + else { + return (jsxRuntime.jsxs(macro.Trans, { children: ["Swap", ' ', jsxRuntime.jsx(FormattedCurrencyAmountManaged, { rawAmount: info.expectedInputCurrencyAmountRaw, currencyId: info.inputCurrencyId, sigFigs: 6 }, void 0), ' ', "for exactly", ' ', jsxRuntime.jsx(FormattedCurrencyAmountManaged, { rawAmount: info.outputCurrencyAmountRaw, currencyId: info.outputCurrencyId, sigFigs: 6 }, void 0)] }, void 0)); + } +} +function TransactionSummary(_a) { + var info = _a.info; + switch (info.type) { + case TransactionType.ADD_LIQUIDITY_V3_POOL: + return jsxRuntime.jsx(AddLiquidityV3PoolSummary, { info: info }, void 0); + case TransactionType.ADD_LIQUIDITY_V2_POOL: + return jsxRuntime.jsx(AddLiquidityV2PoolSummary, { info: info }, void 0); + case TransactionType.CLAIM: + return jsxRuntime.jsx(ClaimSummary, { info: info }, void 0); + case TransactionType.DEPOSIT_LIQUIDITY_STAKING: + return jsxRuntime.jsx(DepositLiquidityStakingSummary, { info: info }, void 0); + case TransactionType.WITHDRAW_LIQUIDITY_STAKING: + return jsxRuntime.jsx(WithdrawLiquidityStakingSummary, { info: info }, void 0); + case TransactionType.SWAP: + return jsxRuntime.jsx(SwapSummary, { info: info }, void 0); + case TransactionType.APPROVAL: + return jsxRuntime.jsx(ApprovalSummary, { info: info }, void 0); + case TransactionType.VOTE: + return jsxRuntime.jsx(VoteSummary, { info: info }, void 0); + case TransactionType.DELEGATE: + return jsxRuntime.jsx(DelegateSummary, { info: info }, void 0); + case TransactionType.WRAP: + return jsxRuntime.jsx(WrapSummary, { info: info }, void 0); + case TransactionType.CREATE_V3_POOL: + return jsxRuntime.jsx(CreateV3PoolSummary, { info: info }, void 0); + case TransactionType.MIGRATE_LIQUIDITY_V3: + return jsxRuntime.jsx(MigrateLiquidityToV3Summary, { info: info }, void 0); + case TransactionType.COLLECT_FEES: + return jsxRuntime.jsx(CollectFeesSummary, { info: info }, void 0); + case TransactionType.REMOVE_LIQUIDITY_V3: + return jsxRuntime.jsx(RemoveLiquidityV3Summary, { info: info }, void 0); + case TransactionType.SUBMIT_PROPOSAL: + return jsxRuntime.jsx(SubmitProposalTransactionSummary, { info: info }, void 0); + } +} + +var TransactionStatusText = styled__default["default"].div(templateObject_1$Y || (templateObject_1$Y = __makeTemplateObject(["\n margin-right: 0.5rem;\n display: flex;\n align-items: center;\n :hover {\n text-decoration: underline;\n }\n"], ["\n margin-right: 0.5rem;\n display: flex;\n align-items: center;\n :hover {\n text-decoration: underline;\n }\n"]))); +var TransactionState = styled__default["default"](ExternalLink)(templateObject_2$G || (templateObject_2$G = __makeTemplateObject(["\n display: flex;\n justify-content: space-between;\n align-items: center;\n text-decoration: none !important;\n border-radius: 0.5rem;\n padding: 0.25rem 0rem;\n font-weight: 500;\n font-size: 0.825rem;\n color: ", ";\n"], ["\n display: flex;\n justify-content: space-between;\n align-items: center;\n text-decoration: none !important;\n border-radius: 0.5rem;\n padding: 0.25rem 0rem;\n font-weight: 500;\n font-size: 0.825rem;\n color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.primary1; +}); +var IconWrapper$3 = styled__default["default"].div(templateObject_3$A || (templateObject_3$A = __makeTemplateObject(["\n color: ", ";\n"], ["\n color: ", ";\n"])), function (_a) { + var pending = _a.pending, success = _a.success, theme = _a.theme; + return (pending ? theme.primary1 : success ? theme.green1 : theme.red1); +}); +function Transaction(_a) { + var _b, _c; + var hash = _a.hash; + var chainId = useActiveWeb3React().chainId; + var allTransactions = useAllTransactions(); + var tx = allTransactions === null || allTransactions === void 0 ? void 0 : allTransactions[hash]; + var info = tx === null || tx === void 0 ? void 0 : tx.info; + var pending = !(tx === null || tx === void 0 ? void 0 : tx.receipt); + var success = !pending && tx && (((_b = tx.receipt) === null || _b === void 0 ? void 0 : _b.status) === 1 || typeof ((_c = tx.receipt) === null || _c === void 0 ? void 0 : _c.status) === 'undefined'); + if (!chainId) + return null; + return (jsxRuntime.jsx("div", { children: jsxRuntime.jsxs(TransactionState, __assign({ href: getExplorerLink(chainId, hash, ExplorerDataType.TRANSACTION), pending: pending, success: success }, { children: [jsxRuntime.jsx(RowFixed, { children: jsxRuntime.jsxs(TransactionStatusText, { children: [jsxRuntime.jsx(TransactionSummary, { info: info }, void 0), " \u2197"] }, void 0) }, void 0), jsxRuntime.jsx(IconWrapper$3, __assign({ pending: pending, success: success }, { children: pending ? jsxRuntime.jsx(Loader, {}, void 0) : success ? jsxRuntime.jsx(reactFeather.CheckCircle, { size: "16" }, void 0) : jsxRuntime.jsx(reactFeather.Triangle, { size: "16" }, void 0) }), void 0)] }), void 0) }, void 0)); +} +var templateObject_1$Y, templateObject_2$G, templateObject_3$A; + +var HeaderRow$1 = styled__default["default"].div(templateObject_2$F || (templateObject_2$F = __makeTemplateObject(["\n ", ";\n padding: 1rem 1rem;\n font-weight: 500;\n color: ", ";\n ", ";\n"], ["\n ", ";\n padding: 1rem 1rem;\n font-weight: 500;\n color: ", ";\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.flexRowNoWrap; +}, function (props) { return (props.color === 'blue' ? function (_a) { + var theme = _a.theme; + return theme.primary1; +} : 'inherit'); }, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToMedium(templateObject_1$X || (templateObject_1$X = __makeTemplateObject(["\n padding: 1rem;\n "], ["\n padding: 1rem;\n "]))); +}); +var UpperSection$1 = styled__default["default"].div(templateObject_3$z || (templateObject_3$z = __makeTemplateObject(["\n position: relative;\n\n h5 {\n margin: 0;\n margin-bottom: 0.5rem;\n font-size: 1rem;\n font-weight: 400;\n }\n\n h5:last-child {\n margin-bottom: 0px;\n }\n\n h4 {\n margin-top: 0;\n font-weight: 500;\n }\n"], ["\n position: relative;\n\n h5 {\n margin: 0;\n margin-bottom: 0.5rem;\n font-size: 1rem;\n font-weight: 400;\n }\n\n h5:last-child {\n margin-bottom: 0px;\n }\n\n h4 {\n margin-top: 0;\n font-weight: 500;\n }\n"]))); +var InfoCard$1 = styled__default["default"].div(templateObject_4$q || (templateObject_4$q = __makeTemplateObject(["\n padding: 1rem;\n border: 1px solid ", ";\n border-radius: 20px;\n position: relative;\n display: grid;\n grid-row-gap: 12px;\n margin-bottom: 20px;\n"], ["\n padding: 1rem;\n border: 1px solid ", ";\n border-radius: 20px;\n position: relative;\n display: grid;\n grid-row-gap: 12px;\n margin-bottom: 20px;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg3; +}); +var AccountGroupingRow = styled__default["default"].div(templateObject_5$m || (templateObject_5$m = __makeTemplateObject(["\n ", ";\n justify-content: space-between;\n align-items: center;\n font-weight: 400;\n color: ", ";\n\n div {\n ", "\n align-items: center;\n }\n"], ["\n ", ";\n justify-content: space-between;\n align-items: center;\n font-weight: 400;\n color: ", ";\n\n div {\n ", "\n align-items: center;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.flexRowNoWrap; +}, function (_a) { + var theme = _a.theme; + return theme.text1; +}, function (_a) { + var theme = _a.theme; + return theme.flexRowNoWrap; +}); +var AccountSection = styled__default["default"].div(templateObject_7$e || (templateObject_7$e = __makeTemplateObject(["\n padding: 0rem 1rem;\n ", ";\n"], ["\n padding: 0rem 1rem;\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToMedium(templateObject_6$h || (templateObject_6$h = __makeTemplateObject(["padding: 0rem 1rem 1.5rem 1rem;"], ["padding: 0rem 1rem 1.5rem 1rem;"]))); +}); +var YourAccount = styled__default["default"].div(templateObject_8$c || (templateObject_8$c = __makeTemplateObject(["\n h5 {\n margin: 0 0 1rem 0;\n font-weight: 400;\n }\n\n h4 {\n margin: 0;\n font-weight: 500;\n }\n"], ["\n h5 {\n margin: 0 0 1rem 0;\n font-weight: 400;\n }\n\n h4 {\n margin: 0;\n font-weight: 500;\n }\n"]))); +var LowerSection = styled__default["default"].div(templateObject_9$b || (templateObject_9$b = __makeTemplateObject(["\n ", "\n padding: 1.5rem;\n flex-grow: 1;\n overflow: auto;\n background-color: ", ";\n border-bottom-left-radius: 20px;\n border-bottom-right-radius: 20px;\n\n h5 {\n margin: 0;\n font-weight: 400;\n color: ", ";\n }\n"], ["\n ", "\n padding: 1.5rem;\n flex-grow: 1;\n overflow: auto;\n background-color: ", ";\n border-bottom-left-radius: 20px;\n border-bottom-right-radius: 20px;\n\n h5 {\n margin: 0;\n font-weight: 400;\n color: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.flexColumnNoWrap; +}, function (_a) { + var theme = _a.theme; + return theme.bg2; +}, function (_a) { + var theme = _a.theme; + return theme.text3; +}); +var AccountControl = styled__default["default"].div(templateObject_10$8 || (templateObject_10$8 = __makeTemplateObject(["\n display: flex;\n justify-content: space-between;\n min-width: 0;\n width: 100%;\n\n font-weight: 500;\n font-size: 1.25rem;\n\n a:hover {\n text-decoration: underline;\n }\n\n p {\n min-width: 0;\n margin: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n"], ["\n display: flex;\n justify-content: space-between;\n min-width: 0;\n width: 100%;\n\n font-weight: 500;\n font-size: 1.25rem;\n\n a:hover {\n text-decoration: underline;\n }\n\n p {\n min-width: 0;\n margin: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n"]))); +var AddressLink = styled__default["default"](ExternalLink)(templateObject_11$6 || (templateObject_11$6 = __makeTemplateObject(["\n font-size: 0.825rem;\n color: ", ";\n margin-left: 1rem;\n font-size: 0.825rem;\n display: flex;\n :hover {\n color: ", ";\n }\n"], ["\n font-size: 0.825rem;\n color: ", ";\n margin-left: 1rem;\n font-size: 0.825rem;\n display: flex;\n :hover {\n color: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text3; +}, function (_a) { + var theme = _a.theme; + return theme.text2; +}); +var CloseIcon$1 = styled__default["default"].div(templateObject_12$6 || (templateObject_12$6 = __makeTemplateObject(["\n position: absolute;\n right: 1rem;\n top: 14px;\n &:hover {\n cursor: pointer;\n opacity: 0.6;\n }\n"], ["\n position: absolute;\n right: 1rem;\n top: 14px;\n &:hover {\n cursor: pointer;\n opacity: 0.6;\n }\n"]))); +var CloseColor$1 = styled__default["default"](SvgX)(templateObject_13$2 || (templateObject_13$2 = __makeTemplateObject(["\n path {\n stroke: ", ";\n }\n"], ["\n path {\n stroke: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text4; +}); +var WalletName = styled__default["default"].div(templateObject_14$2 || (templateObject_14$2 = __makeTemplateObject(["\n width: initial;\n font-size: 0.825rem;\n font-weight: 500;\n color: ", ";\n"], ["\n width: initial;\n font-size: 0.825rem;\n font-weight: 500;\n color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.text3; +}); +var IconWrapper$2 = styled__default["default"].div(templateObject_16$1 || (templateObject_16$1 = __makeTemplateObject(["\n ", ";\n align-items: center;\n justify-content: center;\n margin-right: 8px;\n & > img,\n span {\n height: ", ";\n width: ", ";\n }\n ", ";\n"], ["\n ", ";\n align-items: center;\n justify-content: center;\n margin-right: 8px;\n & > img,\n span {\n height: ", ";\n width: ", ";\n }\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.flexColumnNoWrap; +}, function (_a) { + var size = _a.size; + return (size ? size + 'px' : '32px'); +}, function (_a) { + var size = _a.size; + return (size ? size + 'px' : '32px'); +}, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToMedium(templateObject_15$1 || (templateObject_15$1 = __makeTemplateObject(["\n align-items: flex-end;\n "], ["\n align-items: flex-end;\n "]))); +}); +function WrappedStatusIcon$1(_a) { + var connector = _a.connector; + return (jsxRuntime.jsxs(IconWrapper$2, __assign({ size: 16 }, { children: [jsxRuntime.jsx(StatusIcon, { connector: connector }, void 0), connector === portis && (jsxRuntime.jsx(MainWalletAction, __assign({ onClick: function () { + portis.portis.showPortis(); + } }, { children: jsxRuntime.jsx(macro.Trans, { children: "Show Portis" }, void 0) }), void 0))] }), void 0)); +} +var TransactionListWrapper = styled__default["default"].div(templateObject_17$1 || (templateObject_17$1 = __makeTemplateObject(["\n ", ";\n"], ["\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.flexColumnNoWrap; +}); +var WalletAction = styled__default["default"](ButtonSecondary)(templateObject_18$1 || (templateObject_18$1 = __makeTemplateObject(["\n width: fit-content;\n font-weight: 400;\n margin-left: 8px;\n font-size: 0.825rem;\n padding: 4px 6px;\n :hover {\n cursor: pointer;\n text-decoration: underline;\n }\n"], ["\n width: fit-content;\n font-weight: 400;\n margin-left: 8px;\n font-size: 0.825rem;\n padding: 4px 6px;\n :hover {\n cursor: pointer;\n text-decoration: underline;\n }\n"]))); +var MainWalletAction = styled__default["default"](WalletAction)(templateObject_19$1 || (templateObject_19$1 = __makeTemplateObject(["\n color: ", ";\n"], ["\n color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.primary1; +}); +function renderTransactions(transactions) { + return (jsxRuntime.jsx(TransactionListWrapper, { children: transactions.map(function (hash, i) { + return jsxRuntime.jsx(Transaction, { hash: hash }, i); + }) }, void 0)); +} +function AccountDetails(_a) { + var toggleWalletModal = _a.toggleWalletModal, pendingTransactions = _a.pendingTransactions, confirmedTransactions = _a.confirmedTransactions, ENSName = _a.ENSName, openOptions = _a.openOptions; + var _b = useActiveWeb3React(), chainId = _b.chainId, account = _b.account, connector = _b.connector; + var theme = React.useContext(styled.ThemeContext); + var dispatch = useAppDispatch(); + function formatConnectorName() { + var ethereum = window.ethereum; + var isMetaMask = !!(ethereum && ethereum.isMetaMask); + var name = Object.keys(SUPPORTED_WALLETS) + .filter(function (k) { + return SUPPORTED_WALLETS[k].connector === connector && (connector !== injected || isMetaMask === (k === 'METAMASK')); + }) + .map(function (k) { return SUPPORTED_WALLETS[k].name; })[0]; + return (jsxRuntime.jsx(WalletName, { children: jsxRuntime.jsxs(macro.Trans, { children: ["Connected with ", name] }, void 0) }, void 0)); + } + var clearAllTransactionsCallback = React.useCallback(function () { + if (chainId) + dispatch(clearAllTransactions({ chainId: chainId })); + }, [dispatch, chainId]); + return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs(UpperSection$1, { children: [jsxRuntime.jsx(CloseIcon$1, __assign({ onClick: toggleWalletModal }, { children: jsxRuntime.jsx(CloseColor$1, {}, void 0) }), void 0), jsxRuntime.jsx(HeaderRow$1, { children: jsxRuntime.jsx(macro.Trans, { children: "Account" }, void 0) }, void 0), jsxRuntime.jsx(AccountSection, { children: jsxRuntime.jsx(YourAccount, { children: jsxRuntime.jsxs(InfoCard$1, { children: [jsxRuntime.jsxs(AccountGroupingRow, { children: [formatConnectorName(), jsxRuntime.jsxs("div", { children: [connector !== injected && connector !== walletlink && (jsxRuntime.jsx(WalletAction, __assign({ style: { fontSize: '.825rem', fontWeight: 400, marginRight: '8px' }, onClick: function () { + connector.close(); + } }, { children: jsxRuntime.jsx(macro.Trans, { children: "Disconnect" }, void 0) }), void 0)), jsxRuntime.jsx(WalletAction, __assign({ style: { fontSize: '.825rem', fontWeight: 400 }, onClick: function () { + openOptions(); + } }, { children: jsxRuntime.jsx(macro.Trans, { children: "Change" }, void 0) }), void 0)] }, void 0)] }, void 0), jsxRuntime.jsx(AccountGroupingRow, __assign({ id: "web3-account-identifier-row" }, { children: jsxRuntime.jsx(AccountControl, { children: ENSName ? (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs("div", { children: [connector && jsxRuntime.jsx(WrappedStatusIcon$1, { connector: connector }, void 0), jsxRuntime.jsxs("p", { children: [" ", ENSName] }, void 0)] }, void 0) }, void 0)) : (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs("div", { children: [connector && jsxRuntime.jsx(WrappedStatusIcon$1, { connector: connector }, void 0), jsxRuntime.jsxs("p", { children: [" ", account && shortenAddress(account)] }, void 0)] }, void 0) }, void 0)) }, void 0) }), void 0), jsxRuntime.jsx(AccountGroupingRow, { children: ENSName ? (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsx(AccountControl, { children: jsxRuntime.jsxs("div", { children: [account && (jsxRuntime.jsx(CopyHelper, __assign({ toCopy: account }, { children: jsxRuntime.jsx("span", __assign({ style: { marginLeft: '4px' } }, { children: jsxRuntime.jsx(macro.Trans, { children: "Copy Address" }, void 0) }), void 0) }), void 0)), chainId && account && (jsxRuntime.jsxs(AddressLink, __assign({ hasENS: !!ENSName, isENS: true, href: getExplorerLink(chainId, ENSName, ExplorerDataType.ADDRESS) }, { children: [jsxRuntime.jsx(reactFeather.ExternalLink, { size: 16 }, void 0), jsxRuntime.jsx("span", __assign({ style: { marginLeft: '4px' } }, { children: jsxRuntime.jsx(macro.Trans, { children: "View on Explorer" }, void 0) }), void 0)] }), void 0))] }, void 0) }, void 0) }, void 0)) : (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsx(AccountControl, { children: jsxRuntime.jsxs("div", { children: [account && (jsxRuntime.jsx(CopyHelper, __assign({ toCopy: account }, { children: jsxRuntime.jsx("span", __assign({ style: { marginLeft: '4px' } }, { children: jsxRuntime.jsx(macro.Trans, { children: "Copy Address" }, void 0) }), void 0) }), void 0)), chainId && account && (jsxRuntime.jsxs(AddressLink, __assign({ hasENS: !!ENSName, isENS: false, href: getExplorerLink(chainId, account, ExplorerDataType.ADDRESS) }, { children: [jsxRuntime.jsx(reactFeather.ExternalLink, { size: 16 }, void 0), jsxRuntime.jsx("span", __assign({ style: { marginLeft: '4px' } }, { children: jsxRuntime.jsx(macro.Trans, { children: "View on Explorer" }, void 0) }), void 0)] }), void 0))] }, void 0) }, void 0) }, void 0)) }, void 0)] }, void 0) }, void 0) }, void 0)] }, void 0), !!pendingTransactions.length || !!confirmedTransactions.length ? (jsxRuntime.jsxs(LowerSection, { children: [jsxRuntime.jsxs(AutoRow, __assign({ mb: '1rem', style: { justifyContent: 'space-between' } }, { children: [jsxRuntime.jsx(ThemedText.Body, { children: jsxRuntime.jsx(macro.Trans, { children: "Recent Transactions" }, void 0) }, void 0), jsxRuntime.jsx(LinkStyledButton, __assign({ onClick: clearAllTransactionsCallback }, { children: jsxRuntime.jsx(macro.Trans, { children: "(clear all)" }, void 0) }), void 0)] }), void 0), renderTransactions(pendingTransactions), renderTransactions(confirmedTransactions)] }, void 0)) : (jsxRuntime.jsx(LowerSection, { children: jsxRuntime.jsx(ThemedText.Body, __assign({ color: theme.text1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Your transactions will appear here..." }, void 0) }), void 0) }, void 0))] }, void 0)); +} +var templateObject_1$X, templateObject_2$F, templateObject_3$z, templateObject_4$q, templateObject_5$m, templateObject_6$h, templateObject_7$e, templateObject_8$c, templateObject_9$b, templateObject_10$8, templateObject_11$6, templateObject_12$6, templateObject_13$2, templateObject_14$2, templateObject_15$1, templateObject_16$1, templateObject_17$1, templateObject_18$1, templateObject_19$1; + +var InfoCard = styled__default["default"].button(templateObject_1$W || (templateObject_1$W = __makeTemplateObject(["\n background-color: ", ";\n padding: 1rem;\n outline: none;\n border: 1px solid;\n border-radius: 12px;\n width: 100% !important;\n &:focus {\n box-shadow: 0 0 0 1px ", ";\n }\n border-color: ", ";\n"], ["\n background-color: ", ";\n padding: 1rem;\n outline: none;\n border: 1px solid;\n border-radius: 12px;\n width: 100% !important;\n &:focus {\n box-shadow: 0 0 0 1px ", ";\n }\n border-color: ", ";\n"])), function (_a) { + var theme = _a.theme, active = _a.active; + return (active ? theme.bg3 : theme.bg2); +}, function (_a) { + var theme = _a.theme; + return theme.primary1; +}, function (_a) { + var theme = _a.theme, active = _a.active; + return (active ? 'transparent' : theme.bg3); +}); +var OptionCard = styled__default["default"](InfoCard)(templateObject_2$E || (templateObject_2$E = __makeTemplateObject(["\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n margin-top: 2rem;\n padding: 1rem;\n"], ["\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n margin-top: 2rem;\n padding: 1rem;\n"]))); +var OptionCardLeft = styled__default["default"].div(templateObject_3$y || (templateObject_3$y = __makeTemplateObject(["\n ", ";\n justify-content: center;\n height: 100%;\n"], ["\n ", ";\n justify-content: center;\n height: 100%;\n"])), function (_a) { + var theme = _a.theme; + return theme.flexColumnNoWrap; +}); +var OptionCardClickable = styled__default["default"](OptionCard)(templateObject_4$p || (templateObject_4$p = __makeTemplateObject(["\n margin-top: 0;\n &:hover {\n cursor: ", ";\n border: ", ";\n }\n opacity: ", ";\n"], ["\n margin-top: 0;\n &:hover {\n cursor: ", ";\n border: ", ";\n }\n opacity: ", ";\n"])), function (_a) { + var clickable = _a.clickable; + return (clickable ? 'pointer' : ''); +}, function (_a) { + var clickable = _a.clickable, theme = _a.theme; + return (clickable ? "1px solid " + theme.primary1 : ""); +}, function (_a) { + var disabled = _a.disabled; + return (disabled ? '0.5' : '1'); +}); +var GreenCircle = styled__default["default"].div(templateObject_5$l || (templateObject_5$l = __makeTemplateObject(["\n ", "\n justify-content: center;\n align-items: center;\n\n &:first-child {\n height: 8px;\n width: 8px;\n margin-right: 8px;\n background-color: ", ";\n border-radius: 50%;\n }\n"], ["\n ", "\n justify-content: center;\n align-items: center;\n\n &:first-child {\n height: 8px;\n width: 8px;\n margin-right: 8px;\n background-color: ", ";\n border-radius: 50%;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.flexRowNoWrap; +}, function (_a) { + var theme = _a.theme; + return theme.green1; +}); +var CircleWrapper = styled__default["default"].div(templateObject_6$g || (templateObject_6$g = __makeTemplateObject(["\n color: ", ";\n display: flex;\n justify-content: center;\n align-items: center;\n"], ["\n color: ", ";\n display: flex;\n justify-content: center;\n align-items: center;\n"])), function (_a) { + var theme = _a.theme; + return theme.green1; +}); +var HeaderText = styled__default["default"].div(templateObject_7$d || (templateObject_7$d = __makeTemplateObject(["\n ", ";\n color: ", ";\n font-size: 1rem;\n font-weight: 500;\n"], ["\n ", ";\n color: ", ";\n font-size: 1rem;\n font-weight: 500;\n"])), function (_a) { + var theme = _a.theme; + return theme.flexRowNoWrap; +}, function (props) { return (props.color === 'blue' ? function (_a) { + var theme = _a.theme; + return theme.primary1; +} : function (_a) { + var theme = _a.theme; + return theme.text1; +}); }); +var SubHeader = styled__default["default"].div(templateObject_8$b || (templateObject_8$b = __makeTemplateObject(["\n color: ", ";\n margin-top: 10px;\n font-size: 12px;\n"], ["\n color: ", ";\n margin-top: 10px;\n font-size: 12px;\n"])), function (_a) { + var theme = _a.theme; + return theme.text1; +}); +var IconWrapper$1 = styled__default["default"].div(templateObject_10$7 || (templateObject_10$7 = __makeTemplateObject(["\n ", ";\n align-items: center;\n justify-content: center;\n & > img,\n span {\n height: ", ";\n width: ", ";\n }\n ", ";\n"], ["\n ", ";\n align-items: center;\n justify-content: center;\n & > img,\n span {\n height: ", ";\n width: ", ";\n }\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.flexColumnNoWrap; +}, function (_a) { + var size = _a.size; + return (size ? size + 'px' : '24px'); +}, function (_a) { + var size = _a.size; + return (size ? size + 'px' : '24px'); +}, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToMedium(templateObject_9$a || (templateObject_9$a = __makeTemplateObject(["\n align-items: flex-end;\n "], ["\n align-items: flex-end;\n "]))); +}); +function Option$1(_a) { + var _b = _a.link, link = _b === void 0 ? null : _b, _c = _a.clickable, clickable = _c === void 0 ? true : _c, size = _a.size, _d = _a.onClick, onClick = _d === void 0 ? null : _d, color = _a.color, header = _a.header, _e = _a.subheader, subheader = _e === void 0 ? null : _e, icon = _a.icon, _f = _a.active, active = _f === void 0 ? false : _f, id = _a.id; + var content = (jsxRuntime.jsxs(OptionCardClickable, __assign({ id: id, onClick: onClick, clickable: clickable && !active, active: active }, { children: [jsxRuntime.jsxs(OptionCardLeft, { children: [jsxRuntime.jsxs(HeaderText, __assign({ color: color }, { children: [active ? (jsxRuntime.jsx(CircleWrapper, { children: jsxRuntime.jsx(GreenCircle, { children: jsxRuntime.jsx("div", {}, void 0) }, void 0) }, void 0)) : (''), header] }), void 0), subheader && jsxRuntime.jsx(SubHeader, { children: subheader }, void 0)] }, void 0), jsxRuntime.jsx(IconWrapper$1, __assign({ size: size }, { children: jsxRuntime.jsx("img", { src: icon, alt: 'Icon' }, void 0) }), void 0)] }), void 0)); + if (link) { + return jsxRuntime.jsx(ExternalLink, __assign({ href: link }, { children: content }), void 0); + } + return content; +} +var templateObject_1$W, templateObject_2$E, templateObject_3$y, templateObject_4$p, templateObject_5$l, templateObject_6$g, templateObject_7$d, templateObject_8$b, templateObject_9$a, templateObject_10$7; + +var PendingSection = styled__default["default"].div(templateObject_1$V || (templateObject_1$V = __makeTemplateObject(["\n ", ";\n align-items: center;\n justify-content: center;\n width: 100%;\n & > * {\n width: 100%;\n }\n"], ["\n ", ";\n align-items: center;\n justify-content: center;\n width: 100%;\n & > * {\n width: 100%;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.flexColumnNoWrap; +}); +var StyledLoader = styled__default["default"](Loader)(templateObject_2$D || (templateObject_2$D = __makeTemplateObject(["\n margin-right: 1rem;\n"], ["\n margin-right: 1rem;\n"]))); +var LoadingMessage = styled__default["default"].div(templateObject_3$x || (templateObject_3$x = __makeTemplateObject(["\n ", ";\n align-items: center;\n justify-content: flex-start;\n border-radius: 12px;\n margin-bottom: 20px;\n color: ", ";\n border: 1px solid ", ";\n\n & > * {\n padding: 1rem;\n }\n"], ["\n ", ";\n align-items: center;\n justify-content: flex-start;\n border-radius: 12px;\n margin-bottom: 20px;\n color: ", ";\n border: 1px solid ", ";\n\n & > * {\n padding: 1rem;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.flexRowNoWrap; +}, function (_a) { + var theme = _a.theme, error = _a.error; + return (error ? theme.red1 : 'inherit'); +}, function (_a) { + var theme = _a.theme, error = _a.error; + return (error ? theme.red1 : theme.text4); +}); +var ErrorGroup = styled__default["default"].div(templateObject_4$o || (templateObject_4$o = __makeTemplateObject(["\n ", ";\n align-items: center;\n justify-content: flex-start;\n"], ["\n ", ";\n align-items: center;\n justify-content: flex-start;\n"])), function (_a) { + var theme = _a.theme; + return theme.flexRowNoWrap; +}); +var ErrorButton = styled__default["default"].div(templateObject_5$k || (templateObject_5$k = __makeTemplateObject(["\n border-radius: 8px;\n font-size: 12px;\n color: ", ";\n background-color: ", ";\n margin-left: 1rem;\n padding: 0.5rem;\n font-weight: 600;\n user-select: none;\n\n &:hover {\n cursor: pointer;\n background-color: ", ";\n }\n"], ["\n border-radius: 8px;\n font-size: 12px;\n color: ", ";\n background-color: ", ";\n margin-left: 1rem;\n padding: 0.5rem;\n font-weight: 600;\n user-select: none;\n\n &:hover {\n cursor: pointer;\n background-color: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text1; +}, function (_a) { + var theme = _a.theme; + return theme.bg4; +}, function (_a) { + var theme = _a.theme; + return polished.darken(0.1, theme.text4); +}); +var LoadingWrapper = styled__default["default"].div(templateObject_6$f || (templateObject_6$f = __makeTemplateObject(["\n ", ";\n align-items: center;\n justify-content: center;\n"], ["\n ", ";\n align-items: center;\n justify-content: center;\n"])), function (_a) { + var theme = _a.theme; + return theme.flexRowNoWrap; +}); +function PendingView(_a) { + var _b; + var connector = _a.connector, _c = _a.error, error = _c === void 0 ? false : _c, setPendingError = _a.setPendingError, tryActivation = _a.tryActivation; + var isMetamask = (_b = window === null || window === void 0 ? void 0 : window.ethereum) === null || _b === void 0 ? void 0 : _b.isMetaMask; + return (jsxRuntime.jsxs(PendingSection, { children: [jsxRuntime.jsx(LoadingMessage, __assign({ error: error }, { children: jsxRuntime.jsx(LoadingWrapper, { children: error ? (jsxRuntime.jsxs(ErrorGroup, { children: [jsxRuntime.jsx("div", { children: jsxRuntime.jsx(macro.Trans, { children: "Error connecting" }, void 0) }, void 0), jsxRuntime.jsx(ErrorButton, __assign({ onClick: function () { + setPendingError(false); + connector && tryActivation(connector); + } }, { children: jsxRuntime.jsx(macro.Trans, { children: "Try Again" }, void 0) }), void 0)] }, void 0)) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(StyledLoader, {}, void 0), jsxRuntime.jsx(macro.Trans, { children: "Initializing..." }, void 0)] }, void 0)) }, void 0) }), void 0), Object.keys(SUPPORTED_WALLETS).map(function (key) { + var option = SUPPORTED_WALLETS[key]; + if (option.connector === connector) { + if (option.connector === injected) { + if (isMetamask && option.name !== 'MetaMask') { + return null; + } + if (!isMetamask && option.name === 'MetaMask') { + return null; + } + } + return (jsxRuntime.jsx(Option$1, { id: "connect-" + key, clickable: false, color: option.color, header: option.name, subheader: option.description, icon: option.iconURL }, key)); + } + return null; + })] }, void 0)); +} +var templateObject_1$V, templateObject_2$D, templateObject_3$x, templateObject_4$o, templateObject_5$k, templateObject_6$f; + +var CloseIcon = styled__default["default"].div(templateObject_1$U || (templateObject_1$U = __makeTemplateObject(["\n position: absolute;\n right: 1rem;\n top: 14px;\n &:hover {\n cursor: pointer;\n opacity: 0.6;\n }\n"], ["\n position: absolute;\n right: 1rem;\n top: 14px;\n &:hover {\n cursor: pointer;\n opacity: 0.6;\n }\n"]))); +var CloseColor = styled__default["default"](SvgX)(templateObject_2$C || (templateObject_2$C = __makeTemplateObject(["\n path {\n stroke: ", ";\n }\n"], ["\n path {\n stroke: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text4; +}); +var Wrapper$f = styled__default["default"].div(templateObject_3$w || (templateObject_3$w = __makeTemplateObject(["\n ", "\n margin: 0;\n padding: 0;\n width: 100%;\n"], ["\n ", "\n margin: 0;\n padding: 0;\n width: 100%;\n"])), function (_a) { + var theme = _a.theme; + return theme.flexColumnNoWrap; +}); +var HeaderRow = styled__default["default"].div(templateObject_5$j || (templateObject_5$j = __makeTemplateObject(["\n ", ";\n padding: 1rem 1rem;\n font-weight: 500;\n color: ", ";\n ", ";\n"], ["\n ", ";\n padding: 1rem 1rem;\n font-weight: 500;\n color: ", ";\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.flexRowNoWrap; +}, function (props) { return (props.color === 'blue' ? function (_a) { + var theme = _a.theme; + return theme.primary1; +} : 'inherit'); }, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToMedium(templateObject_4$n || (templateObject_4$n = __makeTemplateObject(["\n padding: 1rem;\n "], ["\n padding: 1rem;\n "]))); +}); +var ContentWrapper$2 = styled__default["default"].div(templateObject_7$c || (templateObject_7$c = __makeTemplateObject(["\n background-color: ", ";\n padding: 0 1rem 1rem 1rem;\n border-bottom-left-radius: 20px;\n border-bottom-right-radius: 20px;\n\n ", ";\n"], ["\n background-color: ", ";\n padding: 0 1rem 1rem 1rem;\n border-bottom-left-radius: 20px;\n border-bottom-right-radius: 20px;\n\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg0; +}, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToMedium(templateObject_6$e || (templateObject_6$e = __makeTemplateObject(["padding: 0 1rem 1rem 1rem"], ["padding: 0 1rem 1rem 1rem"]))); +}); +var UpperSection = styled__default["default"].div(templateObject_8$a || (templateObject_8$a = __makeTemplateObject(["\n position: relative;\n\n h5 {\n margin: 0;\n margin-bottom: 0.5rem;\n font-size: 1rem;\n font-weight: 400;\n }\n\n h5:last-child {\n margin-bottom: 0px;\n }\n\n h4 {\n margin-top: 0;\n font-weight: 500;\n }\n"], ["\n position: relative;\n\n h5 {\n margin: 0;\n margin-bottom: 0.5rem;\n font-size: 1rem;\n font-weight: 400;\n }\n\n h5:last-child {\n margin-bottom: 0px;\n }\n\n h4 {\n margin-top: 0;\n font-weight: 500;\n }\n"]))); +var OptionGrid = styled__default["default"].div(templateObject_10$6 || (templateObject_10$6 = __makeTemplateObject(["\n display: grid;\n grid-gap: 10px;\n ", ";\n"], ["\n display: grid;\n grid-gap: 10px;\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToMedium(templateObject_9$9 || (templateObject_9$9 = __makeTemplateObject(["\n grid-template-columns: 1fr;\n grid-gap: 10px;\n "], ["\n grid-template-columns: 1fr;\n grid-gap: 10px;\n "]))); +}); +var HoverText = styled__default["default"].div(templateObject_11$5 || (templateObject_11$5 = __makeTemplateObject(["\n text-decoration: none;\n color: ", ";\n display: flex;\n align-items: center;\n\n :hover {\n cursor: pointer;\n }\n"], ["\n text-decoration: none;\n color: ", ";\n display: flex;\n align-items: center;\n\n :hover {\n cursor: pointer;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text1; +}); +var LinkCard = styled__default["default"](Card)(templateObject_12$5 || (templateObject_12$5 = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n\n :hover {\n cursor: pointer;\n filter: brightness(0.9);\n }\n"], ["\n background-color: ", ";\n color: ", ";\n\n :hover {\n cursor: pointer;\n filter: brightness(0.9);\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var theme = _a.theme; + return theme.text3; +}); +var WALLET_VIEWS = { + OPTIONS: 'options', + OPTIONS_SECONDARY: 'options_secondary', + ACCOUNT: 'account', + PENDING: 'pending', + LEGAL: 'legal', +}; +function WalletModal(_a) { + var _this = this; + var pendingTransactions = _a.pendingTransactions, confirmedTransactions = _a.confirmedTransactions, ENSName = _a.ENSName; + // important that these are destructed from the account-specific web3-react context + var _b = core.useWeb3React(), active = _b.active, account = _b.account, connector = _b.connector, activate = _b.activate, error = _b.error; + var _c = __read(React.useState(WALLET_VIEWS.ACCOUNT), 2), walletView = _c[0], setWalletView = _c[1]; + var previousWalletView = usePrevious(walletView); + var _d = __read(React.useState(), 2), pendingWallet = _d[0], setPendingWallet = _d[1]; + var _e = __read(React.useState(), 2), pendingError = _e[0], setPendingError = _e[1]; + var walletModalOpen = useModalOpen(ApplicationModal.WALLET); + var toggleWalletModal = useWalletModalToggle(); + var previousAccount = usePrevious(account); + var logMonitoringEvent = useWalletConnectMonitoringEventCallback(); + // close on connection, when logged out before + React.useEffect(function () { + if (account && !previousAccount && walletModalOpen) { + toggleWalletModal(); + } + }, [account, previousAccount, toggleWalletModal, walletModalOpen]); + // always reset to account view + React.useEffect(function () { + if (walletModalOpen) { + setPendingError(false); + setWalletView(WALLET_VIEWS.ACCOUNT); + } + }, [walletModalOpen]); + // close modal when a connection is successful + var activePrevious = usePrevious(active); + var connectorPrevious = usePrevious(connector); + React.useEffect(function () { + if (walletModalOpen && ((active && !activePrevious) || (connector && connector !== connectorPrevious && !error))) { + setWalletView(WALLET_VIEWS.ACCOUNT); + } + }, [setWalletView, active, error, connector, walletModalOpen, activePrevious, connectorPrevious]); + var tryActivation = function (connector) { return __awaiter(_this, void 0, void 0, function () { + var name; + var _this = this; + return __generator(this, function (_a) { + name = ''; + Object.keys(SUPPORTED_WALLETS).map(function (key) { + if (connector === SUPPORTED_WALLETS[key].connector) { + return (name = SUPPORTED_WALLETS[key].name); + } + return true; + }); + // log selected wallet + ReactGA__default["default"].event({ + category: 'Wallet', + action: 'Change Wallet', + label: name, + }); + setPendingWallet(connector); // set wallet for pending view + setWalletView(WALLET_VIEWS.PENDING); + // if the connector is walletconnect and the user has already tried to connect, manually reset the connector + if (connector instanceof walletconnectConnector.WalletConnectConnector) { + connector.walletConnectProvider = undefined; + } + connector && + activate(connector, undefined, true) + .then(function () { return __awaiter(_this, void 0, void 0, function () { + var walletAddress; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, connector.getAccount()]; + case 1: + walletAddress = _a.sent(); + logMonitoringEvent({ walletAddress: walletAddress }); + return [2 /*return*/]; + } + }); + }); }) + .catch(function (error) { + if (error instanceof core.UnsupportedChainIdError) { + activate(connector); // a little janky...can't use setError because the connector isn't set + } + else { + setPendingError(true); + } + }); + return [2 /*return*/]; + }); + }); }; + // close wallet modal if fortmatic modal is active + React.useEffect(function () { + fortmatic$2.on(OVERLAY_READY, function () { + toggleWalletModal(); + }); + }, [toggleWalletModal]); + // get wallets user can switch too, depending on device/browser + function getOptions() { + var isMetamask = window.ethereum && window.ethereum.isMetaMask; + return Object.keys(SUPPORTED_WALLETS).map(function (key) { + var option = SUPPORTED_WALLETS[key]; + // check for mobile options + if (isMobile) { + //disable portis on mobile for now + if (option.connector === portis) { + return null; + } + if (!window.web3 && !window.ethereum && option.mobile) { + return (jsxRuntime.jsx(Option$1, { onClick: function () { + option.connector !== connector && !option.href && tryActivation(option.connector); + }, id: "connect-" + key, active: option.connector && option.connector === connector, color: option.color, link: option.href, header: option.name, subheader: null, icon: option.iconURL }, key)); + } + return null; + } + // overwrite injected when needed + if (option.connector === injected) { + // don't show injected if there's no injected provider + if (!(window.web3 || window.ethereum)) { + if (option.name === 'MetaMask') { + return (jsxRuntime.jsx(Option$1, { id: "connect-" + key, color: '#E8831D', header: jsxRuntime.jsx(macro.Trans, { children: "Install Metamask" }, void 0), subheader: null, link: 'https://metamask.io/', icon: MetaMaskLogo }, key)); + } + else { + return null; //dont want to return install twice + } + } + // don't return metamask if injected provider isn't metamask + else if (option.name === 'MetaMask' && !isMetamask) { + return null; + } + // likewise for generic + else if (option.name === 'Injected' && isMetamask) { + return null; + } + } + // return rest of options + return (!isMobile && + !option.mobileOnly && (jsxRuntime.jsx(Option$1, { id: "connect-" + key, onClick: function () { + option.connector === connector + ? setWalletView(WALLET_VIEWS.ACCOUNT) + : !option.href && tryActivation(option.connector); + }, active: option.connector === connector, color: option.color, link: option.href, header: option.name, subheader: null, icon: option.iconURL }, key))); + }); + } + function getModalContent() { + if (error) { + return (jsxRuntime.jsxs(UpperSection, { children: [jsxRuntime.jsx(CloseIcon, __assign({ onClick: toggleWalletModal }, { children: jsxRuntime.jsx(CloseColor, {}, void 0) }), void 0), jsxRuntime.jsx(HeaderRow, { children: error instanceof core.UnsupportedChainIdError ? jsxRuntime.jsx(macro.Trans, { children: "Wrong Network" }, void 0) : jsxRuntime.jsx(macro.Trans, { children: "Error connecting" }, void 0) }, void 0), jsxRuntime.jsx(ContentWrapper$2, { children: error instanceof core.UnsupportedChainIdError ? (jsxRuntime.jsx("h5", { children: jsxRuntime.jsx(macro.Trans, { children: "Please connect to a supported network in the dropdown menu or in your wallet." }, void 0) }, void 0)) : (jsxRuntime.jsx(macro.Trans, { children: "Error connecting. Try refreshing the page." }, void 0)) }, void 0)] }, void 0)); + } + if (walletView === WALLET_VIEWS.LEGAL) { + return (jsxRuntime.jsxs(UpperSection, { children: [jsxRuntime.jsxs(HeaderRow, { children: [jsxRuntime.jsx(HoverText, __assign({ onClick: function () { + var _a; + setWalletView((_a = (previousWalletView === WALLET_VIEWS.LEGAL ? WALLET_VIEWS.ACCOUNT : previousWalletView)) !== null && _a !== void 0 ? _a : WALLET_VIEWS.ACCOUNT); + } }, { children: jsxRuntime.jsx(reactFeather.ArrowLeft, {}, void 0) }), void 0), jsxRuntime.jsx(Row$1, __assign({ justify: "center" }, { children: jsxRuntime.jsx(ThemedText.MediumHeader, { children: jsxRuntime.jsx(macro.Trans, { children: "Legal & Privacy" }, void 0) }, void 0) }), void 0)] }, void 0), jsxRuntime.jsx(PrivacyPolicy, {}, void 0)] }, void 0)); + } + if (account && walletView === WALLET_VIEWS.ACCOUNT) { + return (jsxRuntime.jsx(AccountDetails, { toggleWalletModal: toggleWalletModal, pendingTransactions: pendingTransactions, confirmedTransactions: confirmedTransactions, ENSName: ENSName, openOptions: function () { return setWalletView(WALLET_VIEWS.OPTIONS); } }, void 0)); + } + return (jsxRuntime.jsxs(UpperSection, { children: [jsxRuntime.jsx(CloseIcon, __assign({ onClick: toggleWalletModal }, { children: jsxRuntime.jsx(CloseColor, {}, void 0) }), void 0), walletView !== WALLET_VIEWS.ACCOUNT ? (jsxRuntime.jsx(HeaderRow, __assign({ color: "blue" }, { children: jsxRuntime.jsx(HoverText, __assign({ onClick: function () { + setPendingError(false); + setWalletView(WALLET_VIEWS.ACCOUNT); + } }, { children: jsxRuntime.jsx(reactFeather.ArrowLeft, {}, void 0) }), void 0) }), void 0)) : (jsxRuntime.jsx(HeaderRow, { children: jsxRuntime.jsx(HoverText, { children: jsxRuntime.jsx(macro.Trans, { children: "Connect a wallet" }, void 0) }, void 0) }, void 0)), jsxRuntime.jsx(ContentWrapper$2, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "16px" }, { children: [jsxRuntime.jsx(LightCard, { children: jsxRuntime.jsx(AutoRow, __assign({ style: { flexWrap: 'nowrap' } }, { children: jsxRuntime.jsx(ThemedText.Black, __assign({ fontSize: 14 }, { children: jsxRuntime.jsxs(macro.Trans, { children: ["By connecting a wallet, you agree to Uniswap Labs\u2019", ' ', jsxRuntime.jsx(ExternalLink, __assign({ href: "https://uniswap.org/terms-of-service/" }, { children: "Terms of Service" }), void 0), " and acknowledge that you have read and understand the Uniswap", ' ', jsxRuntime.jsx(ExternalLink, __assign({ href: "https://uniswap.org/disclaimer/" }, { children: "Protocol Disclaimer" }), void 0), "."] }, void 0) }), void 0) }), void 0) }, void 0), walletView === WALLET_VIEWS.PENDING ? (jsxRuntime.jsx(PendingView, { connector: pendingWallet, error: pendingError, setPendingError: setPendingError, tryActivation: tryActivation }, void 0)) : (jsxRuntime.jsx(OptionGrid, { children: getOptions() }, void 0)), jsxRuntime.jsx(LinkCard, __assign({ padding: ".5rem", "$borderRadius": ".75rem", onClick: function () { return setWalletView(WALLET_VIEWS.LEGAL); } }, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsxs(AutoRow, __assign({ gap: "4px" }, { children: [jsxRuntime.jsx(reactFeather.Info, { size: 20 }, void 0), jsxRuntime.jsx(ThemedText.Label, __assign({ fontSize: 14 }, { children: jsxRuntime.jsx(macro.Trans, { children: "How this app uses APIs" }, void 0) }), void 0)] }), void 0), jsxRuntime.jsx(reactFeather.ArrowRight, { size: 16 }, void 0)] }, void 0) }), void 0)] }), void 0) }, void 0)] }, void 0)); + } + return (jsxRuntime.jsx(Modal, __assign({ isOpen: walletModalOpen, onDismiss: toggleWalletModal, minHeight: false, maxHeight: 90 }, { children: jsxRuntime.jsx(Wrapper$f, { children: getModalContent() }, void 0) }), void 0)); +} +var templateObject_1$U, templateObject_2$C, templateObject_3$w, templateObject_4$n, templateObject_5$j, templateObject_6$e, templateObject_7$c, templateObject_8$a, templateObject_9$9, templateObject_10$6, templateObject_11$5, templateObject_12$5; + +var IconWrapper = styled__default["default"].div(templateObject_1$T || (templateObject_1$T = __makeTemplateObject(["\n ", ";\n align-items: center;\n justify-content: center;\n & > * {\n height: ", ";\n width: ", ";\n }\n"], ["\n ", ";\n align-items: center;\n justify-content: center;\n & > * {\n height: ", ";\n width: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.flexColumnNoWrap; +}, function (_a) { + var size = _a.size; + return (size ? size + 'px' : '32px'); +}, function (_a) { + var size = _a.size; + return (size ? size + 'px' : '32px'); +}); +var Web3StatusGeneric = styled__default["default"](ButtonSecondary)(templateObject_2$B || (templateObject_2$B = __makeTemplateObject(["\n ", "\n width: 100%;\n align-items: center;\n padding: 0.5rem;\n border-radius: 14px;\n cursor: pointer;\n user-select: none;\n height: 36px;\n margin-right: 2px;\n margin-left: 1px;\n :focus {\n outline: none;\n }\n"], ["\n ", "\n width: 100%;\n align-items: center;\n padding: 0.5rem;\n border-radius: 14px;\n cursor: pointer;\n user-select: none;\n height: 36px;\n margin-right: 2px;\n margin-left: 1px;\n :focus {\n outline: none;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.flexRowNoWrap; +}); +var Web3StatusError = styled__default["default"](Web3StatusGeneric)(templateObject_3$v || (templateObject_3$v = __makeTemplateObject(["\n background-color: ", ";\n border: 1px solid ", ";\n color: ", ";\n font-weight: 500;\n :hover,\n :focus {\n background-color: ", ";\n }\n"], ["\n background-color: ", ";\n border: 1px solid ", ";\n color: ", ";\n font-weight: 500;\n :hover,\n :focus {\n background-color: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.red1; +}, function (_a) { + var theme = _a.theme; + return theme.red1; +}, function (_a) { + var theme = _a.theme; + return theme.white; +}, function (_a) { + var theme = _a.theme; + return polished.darken(0.1, theme.red1); +}); +var Web3StatusConnect = styled__default["default"](Web3StatusGeneric)(templateObject_5$i || (templateObject_5$i = __makeTemplateObject(["\n background-color: ", ";\n border: none;\n\n color: ", ";\n font-weight: 500;\n\n :hover,\n :focus {\n border: 1px solid ", ";\n color: ", ";\n }\n\n ", "\n"], ["\n background-color: ", ";\n border: none;\n\n color: ", ";\n font-weight: 500;\n\n :hover,\n :focus {\n border: 1px solid ", ";\n color: ", ";\n }\n\n ", "\n"])), function (_a) { + var theme = _a.theme; + return theme.primary4; +}, function (_a) { + var theme = _a.theme; + return theme.primaryText1; +}, function (_a) { + var theme = _a.theme; + return polished.darken(0.05, theme.primary4); +}, function (_a) { + var theme = _a.theme; + return theme.primaryText1; +}, function (_a) { + var faded = _a.faded; + return faded && styled.css(templateObject_4$m || (templateObject_4$m = __makeTemplateObject(["\n background-color: ", ";\n border: 1px solid ", ";\n color: ", ";\n\n :hover,\n :focus {\n border: 1px solid ", ";\n color: ", ";\n }\n "], ["\n background-color: ", ";\n border: 1px solid ", ";\n color: ", ";\n\n :hover,\n :focus {\n border: 1px solid ", ";\n color: ", ";\n }\n "])), function (_a) { + var theme = _a.theme; + return theme.primary5; + }, function (_a) { + var theme = _a.theme; + return theme.primary5; + }, function (_a) { + var theme = _a.theme; + return theme.primaryText1; + }, function (_a) { + var theme = _a.theme; + return polished.darken(0.05, theme.primary4); + }, function (_a) { + var theme = _a.theme; + return polished.darken(0.05, theme.primaryText1); + }); +}); +var Web3StatusConnected = styled__default["default"](Web3StatusGeneric)(templateObject_6$d || (templateObject_6$d = __makeTemplateObject(["\n background-color: ", ";\n border: 1px solid ", ";\n color: ", ";\n font-weight: 500;\n :hover,\n :focus {\n border: 1px solid ", ";\n\n :focus {\n border: 1px solid ", ";\n }\n }\n"], ["\n background-color: ", ";\n border: 1px solid ", ";\n color: ", ";\n font-weight: 500;\n :hover,\n :focus {\n border: 1px solid ", ";\n\n :focus {\n border: 1px solid ", ";\n }\n }\n"])), function (_a) { + var pending = _a.pending, theme = _a.theme; + return (pending ? theme.primary1 : theme.bg1); +}, function (_a) { + var pending = _a.pending, theme = _a.theme; + return (pending ? theme.primary1 : theme.bg1); +}, function (_a) { + var pending = _a.pending, theme = _a.theme; + return (pending ? theme.white : theme.text1); +}, function (_a) { + var theme = _a.theme; + return polished.darken(0.05, theme.bg3); +}, function (_a) { + var pending = _a.pending, theme = _a.theme; + return (pending ? polished.darken(0.1, theme.primary1) : polished.darken(0.1, theme.bg2)); +}); +var Text = styled__default["default"].p(templateObject_7$b || (templateObject_7$b = __makeTemplateObject(["\n flex: 1 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n margin: 0 0.5rem 0 0.25rem;\n font-size: 1rem;\n width: fit-content;\n font-weight: 500;\n"], ["\n flex: 1 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n margin: 0 0.5rem 0 0.25rem;\n font-size: 1rem;\n width: fit-content;\n font-weight: 500;\n"]))); +var NetworkIcon = styled__default["default"](reactFeather.Activity)(templateObject_8$9 || (templateObject_8$9 = __makeTemplateObject(["\n margin-left: 0.25rem;\n margin-right: 0.5rem;\n width: 16px;\n height: 16px;\n"], ["\n margin-left: 0.25rem;\n margin-right: 0.5rem;\n width: 16px;\n height: 16px;\n" + // we want the latest one to come first, so return negative if a is after b +]))); +// we want the latest one to come first, so return negative if a is after b +function newTransactionsFirst(a, b) { + return b.addedTime - a.addedTime; +} +function Sock() { + return (jsxRuntime.jsx("span", __assign({ role: "img", "aria-label": macro.t(templateObject_9$8 || (templateObject_9$8 = __makeTemplateObject(["has socks emoji"], ["has socks emoji"]))), style: { marginTop: -4, marginBottom: -4 } }, { children: "\uD83E\uDDE6" }), void 0)); +} +function WrappedStatusIcon(_a) { + var connector = _a.connector; + return (jsxRuntime.jsx(IconWrapper, __assign({ size: 16 }, { children: jsxRuntime.jsx(StatusIcon, { connector: connector }, void 0) }), void 0)); +} +function Web3StatusInner() { + var _a = core.useWeb3React(), account = _a.account, connector = _a.connector, error = _a.error; + var ENSName = useENSName(account !== null && account !== void 0 ? account : undefined).ENSName; + var allTransactions = useAllTransactions(); + var sortedRecentTransactions = React.useMemo(function () { + var txs = Object.values(allTransactions); + return txs.filter(isTransactionRecent).sort(newTransactionsFirst); + }, [allTransactions]); + var pending = sortedRecentTransactions.filter(function (tx) { return !tx.receipt; }).map(function (tx) { return tx.hash; }); + var hasPendingTransactions = !!pending.length; + var hasSocks = useHasSocks(); + var toggleWalletModal = useWalletModalToggle(); + if (account) { + return (jsxRuntime.jsxs(Web3StatusConnected, __assign({ id: "web3-status-connected", onClick: toggleWalletModal, pending: hasPendingTransactions }, { children: [hasPendingTransactions ? (jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(Text, { children: jsxRuntime.jsxs(macro.Trans, { children: [pending === null || pending === void 0 ? void 0 : pending.length, " Pending"] }, void 0) }, void 0), ' ', jsxRuntime.jsx(Loader, { stroke: "white" }, void 0)] }, void 0)) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [hasSocks ? jsxRuntime.jsx(Sock, {}, void 0) : null, jsxRuntime.jsx(Text, { children: ENSName || shortenAddress(account) }, void 0)] }, void 0)), !hasPendingTransactions && connector && jsxRuntime.jsx(WrappedStatusIcon, { connector: connector }, void 0)] }), void 0)); + } + else if (error) { + return (jsxRuntime.jsxs(Web3StatusError, __assign({ onClick: toggleWalletModal }, { children: [jsxRuntime.jsx(NetworkIcon, {}, void 0), jsxRuntime.jsx(Text, { children: error instanceof core.UnsupportedChainIdError ? jsxRuntime.jsx(macro.Trans, { children: "Wrong Network" }, void 0) : jsxRuntime.jsx(macro.Trans, { children: "Error" }, void 0) }, void 0)] }), void 0)); + } + else { + return (jsxRuntime.jsx(Web3StatusConnect, __assign({ id: "connect-wallet", onClick: toggleWalletModal, faded: !account }, { children: jsxRuntime.jsx(Text, { children: jsxRuntime.jsx(macro.Trans, { children: "Connect Wallet" }, void 0) }, void 0) }), void 0)); + } +} +function Web3Status() { + var _a = core.useWeb3React(), active = _a.active, account = _a.account; + var contextNetwork = core.useWeb3React(NetworkContextName); + var ENSName = useENSName(account !== null && account !== void 0 ? account : undefined).ENSName; + var allTransactions = useAllTransactions(); + var sortedRecentTransactions = React.useMemo(function () { + var txs = Object.values(allTransactions); + return txs.filter(isTransactionRecent).sort(newTransactionsFirst); + }, [allTransactions]); + var pending = sortedRecentTransactions.filter(function (tx) { return !tx.receipt; }).map(function (tx) { return tx.hash; }); + var confirmed = sortedRecentTransactions.filter(function (tx) { return tx.receipt; }).map(function (tx) { return tx.hash; }); + return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(Web3StatusInner, {}, void 0), (contextNetwork.active || active) && (jsxRuntime.jsx(WalletModal, { ENSName: ENSName !== null && ENSName !== void 0 ? ENSName : undefined, pendingTransactions: pending, confirmedTransactions: confirmed }, void 0))] }, void 0)); +} +var templateObject_1$T, templateObject_2$B, templateObject_3$v, templateObject_4$m, templateObject_5$i, templateObject_6$d, templateObject_7$b, templateObject_8$9, templateObject_9$8; + +var SantaHat = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEYAAAA3CAYAAACxUDzgAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAaGVYSWZNTQAqAAAACAAEAQYAAwAAAAEAAgAAARIAAwAAAAEAAQAAASgAAwAAAAEAAgAAh2kABAAAAAEAAAA+AAAAAAADoAEAAwAAAAEAAQAAoAIABAAAAAEAAABGoAMABAAAAAEAAAA3AAAAAChoTFwAAALiaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA2LjAuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjE8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlBob3RvbWV0cmljSW50ZXJwcmV0YXRpb24+MjwvdGlmZjpQaG90b21ldHJpY0ludGVycHJldGF0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NzA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjU1PC9leGlmOlBpeGVsWURpbWVuc2lv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"; + +var SantaHatImage = styled__default["default"].img(templateObject_1$S || (templateObject_1$S = __makeTemplateObject(["\n position: absolute;\n top: -4px;\n right: -4px;\n height: 18px;\n"], ["\n position: absolute;\n top: -4px;\n right: -4px;\n height: 18px;\n"]))); +var Christmas = jsxRuntime.jsx(SantaHatImage, { src: SantaHat, alt: "Santa hat" }, void 0); +var DATE_TO_ORNAMENT = { + '12-24': Christmas, + '12-25': Christmas, +}; +var HolidayOrnament = function () { + // months in javascript are 0 indexed... + var today = new Date().getMonth() + 1 + "-" + new Date().getDate(); + return DATE_TO_ORNAMENT[today] || null; +}; +var templateObject_1$S; + +var replaceURLParam = function (search, param, newValue) { + var searchParams = new URLSearchParams(search); + searchParams.set(param, newValue); + return searchParams.toString(); +}; + +// provider.request returns Promise, but wallet_switchEthereumChain must return null or throw +// see https://github.com/rekmarks/EIPs/blob/3326-create/EIPS/eip-3326.md for more info on wallet_switchEthereumChain +function switchToNetwork(_a) { + var _b; + var library = _a.library, chainId = _a.chainId; + return __awaiter(this, void 0, void 0, function () { + var formattedChainId, error_1, info, error_2; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + if (!((_b = library === null || library === void 0 ? void 0 : library.provider) === null || _b === void 0 ? void 0 : _b.request)) { + return [2 /*return*/]; + } + formattedChainId = bytes.hexStripZeros(bignumber.BigNumber.from(chainId).toHexString()); + _c.label = 1; + case 1: + _c.trys.push([1, 3, , 11]); + return [4 /*yield*/, library.provider.request({ + method: 'wallet_switchEthereumChain', + params: [{ chainId: formattedChainId }], + })]; + case 2: + _c.sent(); + return [3 /*break*/, 11]; + case 3: + error_1 = _c.sent(); + if (!(error_1.code === 4902)) return [3 /*break*/, 9]; + info = CHAIN_INFO[chainId]; + return [4 /*yield*/, library.provider.request({ + method: 'wallet_addEthereumChain', + params: [ + { + chainId: formattedChainId, + chainName: info.label, + rpcUrls: [info.addNetworkInfo.rpcUrl], + nativeCurrency: info.addNetworkInfo.nativeCurrency, + blockExplorerUrls: [info.explorer], + }, + ], + }) + // metamask (only known implementer) automatically switches after a network is added + // the second call is done here because that behavior is not a part of the spec and cannot be relied upon in the future + // metamask's behavior when switching to the current network is just to return null (a no-op) + ]; + case 4: + _c.sent(); + _c.label = 5; + case 5: + _c.trys.push([5, 7, , 8]); + return [4 /*yield*/, library.provider.request({ + method: 'wallet_switchEthereumChain', + params: [{ chainId: formattedChainId }], + })]; + case 6: + _c.sent(); + return [3 /*break*/, 8]; + case 7: + error_2 = _c.sent(); + console.debug('Added network but could not switch chains', error_2); + return [3 /*break*/, 8]; + case 8: return [3 /*break*/, 10]; + case 9: throw error_1; + case 10: return [3 /*break*/, 11]; + case 11: return [2 /*return*/]; + } + }); + }); +} + +var ActiveRowLinkList = styled__default["default"].div(templateObject_1$R || (templateObject_1$R = __makeTemplateObject(["\n display: flex;\n flex-direction: column;\n padding: 0 8px;\n & > a {\n align-items: center;\n color: ", ";\n display: flex;\n flex-direction: row;\n font-size: 14px;\n font-weight: 500;\n justify-content: space-between;\n padding: 8px 0 4px;\n text-decoration: none;\n }\n & > a:first-child {\n margin: 0;\n margin-top: 0px;\n padding-top: 10px;\n }\n"], ["\n display: flex;\n flex-direction: column;\n padding: 0 8px;\n & > a {\n align-items: center;\n color: ", ";\n display: flex;\n flex-direction: row;\n font-size: 14px;\n font-weight: 500;\n justify-content: space-between;\n padding: 8px 0 4px;\n text-decoration: none;\n }\n & > a:first-child {\n margin: 0;\n margin-top: 0px;\n padding-top: 10px;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text2; +}); +var ActiveRowWrapper = styled__default["default"].div(templateObject_2$A || (templateObject_2$A = __makeTemplateObject(["\n background-color: ", ";\n border-radius: 8px;\n cursor: pointer;\n padding: 8px;\n width: 100%;\n"], ["\n background-color: ", ";\n border-radius: 8px;\n cursor: pointer;\n padding: 8px;\n width: 100%;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg1; +}); +var FlyoutHeader = styled__default["default"].div(templateObject_3$u || (templateObject_3$u = __makeTemplateObject(["\n color: ", ";\n font-weight: 400;\n"], ["\n color: ", ";\n font-weight: 400;\n"])), function (_a) { + var theme = _a.theme; + return theme.text2; +}); +var FlyoutMenu = styled__default["default"].div(templateObject_4$l || (templateObject_4$l = __makeTemplateObject(["\n align-items: flex-start;\n background-color: ", ";\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 border-radius: 20px;\n display: flex;\n flex-direction: column;\n font-size: 16px;\n overflow: auto;\n padding: 16px;\n position: absolute;\n top: 64px;\n width: 272px;\n z-index: 99;\n & > *:not(:last-child) {\n margin-bottom: 12px;\n }\n @media screen and (min-width: ", "px) {\n top: 50px;\n }\n"], ["\n align-items: flex-start;\n background-color: ", ";\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 border-radius: 20px;\n display: flex;\n flex-direction: column;\n font-size: 16px;\n overflow: auto;\n padding: 16px;\n position: absolute;\n top: 64px;\n width: 272px;\n z-index: 99;\n & > *:not(:last-child) {\n margin-bottom: 12px;\n }\n @media screen and (min-width: ", "px) {\n top: 50px;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.bg0; +}, MEDIA_WIDTHS.upToSmall); +var FlyoutRow = styled__default["default"].div(templateObject_5$h || (templateObject_5$h = __makeTemplateObject(["\n align-items: center;\n background-color: ", ";\n border-radius: 8px;\n cursor: pointer;\n display: flex;\n font-weight: 500;\n justify-content: space-between;\n padding: 6px 8px;\n text-align: left;\n width: 100%;\n"], ["\n align-items: center;\n background-color: ", ";\n border-radius: 8px;\n cursor: pointer;\n display: flex;\n font-weight: 500;\n justify-content: space-between;\n padding: 6px 8px;\n text-align: left;\n width: 100%;\n"])), function (_a) { + var active = _a.active, theme = _a.theme; + return (active ? theme.bg1 : 'transparent'); +}); +var FlyoutRowActiveIndicator = styled__default["default"].div(templateObject_6$c || (templateObject_6$c = __makeTemplateObject(["\n background-color: ", ";\n border-radius: 50%;\n height: 9px;\n width: 9px;\n"], ["\n background-color: ", ";\n border-radius: 50%;\n height: 9px;\n width: 9px;\n"])), function (_a) { + var theme = _a.theme; + return theme.green1; +}); +var LinkOutCircle = styled__default["default"](reactFeather.ArrowDownCircle)(templateObject_7$a || (templateObject_7$a = __makeTemplateObject(["\n transform: rotate(230deg);\n width: 16px;\n height: 16px;\n"], ["\n transform: rotate(230deg);\n width: 16px;\n height: 16px;\n"]))); +var Logo$1 = styled__default["default"].img(templateObject_8$8 || (templateObject_8$8 = __makeTemplateObject(["\n height: 20px;\n width: 20px;\n margin-right: 8px;\n"], ["\n height: 20px;\n width: 20px;\n margin-right: 8px;\n"]))); +var NetworkLabel = styled__default["default"].div(templateObject_9$7 || (templateObject_9$7 = __makeTemplateObject(["\n flex: 1 1 auto;\n"], ["\n flex: 1 1 auto;\n"]))); +var SelectorLabel = styled__default["default"](NetworkLabel)(templateObject_10$5 || (templateObject_10$5 = __makeTemplateObject(["\n display: none;\n @media screen and (min-width: ", "px) {\n display: block;\n margin-right: 8px;\n }\n"], ["\n display: none;\n @media screen and (min-width: ", "px) {\n display: block;\n margin-right: 8px;\n }\n"])), MEDIA_WIDTHS.upToSmall); +var SelectorControls = styled__default["default"].div(templateObject_11$4 || (templateObject_11$4 = __makeTemplateObject(["\n align-items: center;\n background-color: ", ";\n border: 2px solid ", ";\n border-radius: 16px;\n color: ", ";\n cursor: ", ";\n display: flex;\n font-weight: 500;\n justify-content: space-between;\n padding: 6px 8px;\n"], ["\n align-items: center;\n background-color: ", ";\n border: 2px solid ", ";\n border-radius: 16px;\n color: ", ";\n cursor: ", ";\n display: flex;\n font-weight: 500;\n justify-content: space-between;\n padding: 6px 8px;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg0; +}, function (_a) { + var theme = _a.theme; + return theme.bg0; +}, function (_a) { + var theme = _a.theme; + return theme.text1; +}, function (_a) { + var interactive = _a.interactive; + return (interactive ? 'pointer' : 'auto'); +}); +var SelectorLogo = styled__default["default"](Logo$1)(templateObject_12$4 || (templateObject_12$4 = __makeTemplateObject(["\n margin-right: ", "px;\n @media screen and (min-width: ", "px) {\n margin-right: 8px;\n }\n"], ["\n margin-right: ", "px;\n @media screen and (min-width: ", "px) {\n margin-right: 8px;\n }\n"])), function (_a) { + var interactive = _a.interactive; + return (interactive ? 8 : 0); +}, MEDIA_WIDTHS.upToSmall); +var SelectorWrapper = styled__default["default"].div(templateObject_13$1 || (templateObject_13$1 = __makeTemplateObject(["\n @media screen and (min-width: ", "px) {\n position: relative;\n }\n"], ["\n @media screen and (min-width: ", "px) {\n position: relative;\n }\n"])), MEDIA_WIDTHS.upToSmall); +var StyledChevronDown = styled__default["default"](reactFeather.ChevronDown)(templateObject_14$1 || (templateObject_14$1 = __makeTemplateObject(["\n width: 16px;\n"], ["\n width: 16px;\n"]))); +var BridgeLabel = function (_a) { + var chainId = _a.chainId; + switch (chainId) { + case SupportedChainId.ARBITRUM_ONE: + case SupportedChainId.ARBITRUM_RINKEBY: + return jsxRuntime.jsx(macro.Trans, { children: "Arbitrum Bridge" }, void 0); + case SupportedChainId.OPTIMISM: + case SupportedChainId.OPTIMISTIC_KOVAN: + return jsxRuntime.jsx(macro.Trans, { children: "Optimism Gateway" }, void 0); + case SupportedChainId.POLYGON: + case SupportedChainId.POLYGON_MUMBAI: + return jsxRuntime.jsx(macro.Trans, { children: "Polygon Bridge" }, void 0); + default: + return jsxRuntime.jsx(macro.Trans, { children: "Bridge" }, void 0); + } +}; +var ExplorerLabel = function (_a) { + var chainId = _a.chainId; + switch (chainId) { + case SupportedChainId.ARBITRUM_ONE: + case SupportedChainId.ARBITRUM_RINKEBY: + return jsxRuntime.jsx(macro.Trans, { children: "Arbiscan" }, void 0); + case SupportedChainId.OPTIMISM: + case SupportedChainId.OPTIMISTIC_KOVAN: + return jsxRuntime.jsx(macro.Trans, { children: "Optimistic Etherscan" }, void 0); + case SupportedChainId.POLYGON: + case SupportedChainId.POLYGON_MUMBAI: + return jsxRuntime.jsx(macro.Trans, { children: "Polygonscan" }, void 0); + default: + return jsxRuntime.jsx(macro.Trans, { children: "Etherscan" }, void 0); + } +}; +function Row(_a) { + var targetChain = _a.targetChain, onSelectChain = _a.onSelectChain; + var _b = useActiveWeb3React(), library = _b.library, chainId = _b.chainId; + if (!library || !chainId) { + return null; + } + var active = chainId === targetChain; + var _c = CHAIN_INFO[targetChain], helpCenterUrl = _c.helpCenterUrl, explorer = _c.explorer, bridge = _c.bridge, label = _c.label, logoUrl = _c.logoUrl; + var rowContent = (jsxRuntime.jsxs(FlyoutRow, __assign({ onClick: function () { return onSelectChain(targetChain); }, active: active }, { children: [jsxRuntime.jsx(Logo$1, { src: logoUrl }, void 0), jsxRuntime.jsx(NetworkLabel, { children: label }, void 0), chainId === targetChain && jsxRuntime.jsx(FlyoutRowActiveIndicator, {}, void 0)] }), void 0)); + if (active) { + return (jsxRuntime.jsxs(ActiveRowWrapper, { children: [rowContent, jsxRuntime.jsxs(ActiveRowLinkList, { children: [bridge ? (jsxRuntime.jsxs(ExternalLink, __assign({ href: bridge }, { children: [jsxRuntime.jsx(BridgeLabel, { chainId: chainId }, void 0), " ", jsxRuntime.jsx(LinkOutCircle, {}, void 0)] }), void 0)) : null, explorer ? (jsxRuntime.jsxs(ExternalLink, __assign({ href: explorer }, { children: [jsxRuntime.jsx(ExplorerLabel, { chainId: chainId }, void 0), " ", jsxRuntime.jsx(LinkOutCircle, {}, void 0)] }), void 0)) : null, helpCenterUrl ? (jsxRuntime.jsxs(ExternalLink, __assign({ href: helpCenterUrl }, { children: [jsxRuntime.jsx(macro.Trans, { children: "Help Center" }, void 0), " ", jsxRuntime.jsx(LinkOutCircle, {}, void 0)] }), void 0)) : null] }, void 0)] }, void 0)); + } + return rowContent; +} +var getParsedChainId = function (parsedQs) { + var chain = parsedQs === null || parsedQs === void 0 ? void 0 : parsedQs.chain; + if (!chain || typeof chain !== 'string') + return { urlChain: undefined, urlChainId: undefined }; + return { urlChain: chain.toLowerCase(), urlChainId: getChainIdFromName(chain) }; +}; +var getChainIdFromName = function (name) { + var entry = Object.entries(CHAIN_IDS_TO_NAMES).find(function (_a) { + var _b = __read(_a, 2); _b[0]; var n = _b[1]; + return n === name; + }); + var chainId = entry === null || entry === void 0 ? void 0 : entry[0]; + return chainId ? parseInt(chainId) : undefined; +}; +var getChainNameFromId = function (id) { + // casting here may not be right but fine to return undefined if it's not a supported chain ID + return CHAIN_IDS_TO_NAMES[id] || ''; +}; +function NetworkSelector() { + var _a = useActiveWeb3React(), chainId = _a.chainId, library = _a.library; + var parsedQs = useParsedQueryString(); + var _b = getParsedChainId(parsedQs), urlChain = _b.urlChain, urlChainId = _b.urlChainId; + var prevChainId = usePrevious(chainId); + var node = React.useRef(); + var open = useModalOpen(ApplicationModal.NETWORK_SELECTOR); + var toggle = useToggleModal(ApplicationModal.NETWORK_SELECTOR); + useOnClickOutside(node, open ? toggle : undefined); + var history = reactRouterDom.useHistory(); + var info = chainId ? CHAIN_INFO[chainId] : undefined; + var dispatch = useAppDispatch(); + var handleChainSwitch = React.useCallback(function (targetChain, skipToggle) { + if (!library) + return; + switchToNetwork({ library: library, chainId: targetChain }) + .then(function () { + if (!skipToggle) { + toggle(); + } + history.replace({ + search: replaceURLParam(history.location.search, 'chain', getChainNameFromId(targetChain)), + }); + }) + .catch(function (error) { + console.error('Failed to switch networks', error); + // we want app network <-> chainId param to be in sync, so if user changes the network by changing the URL + // but the request fails, revert the URL back to current chainId + if (chainId) { + history.replace({ search: replaceURLParam(history.location.search, 'chain', getChainNameFromId(chainId)) }); + } + if (!skipToggle) { + toggle(); + } + dispatch(addPopup({ content: { failedSwitchNetwork: targetChain }, key: "failed-network-switch" })); + }); + }, [dispatch, library, toggle, history, chainId]); + React.useEffect(function () { + if (!chainId || !prevChainId) + return; + // when network change originates from wallet or dropdown selector, just update URL + if (chainId !== prevChainId) { + history.replace({ search: replaceURLParam(history.location.search, 'chain', getChainNameFromId(chainId)) }); + // otherwise assume network change originates from URL + } + else if (urlChainId && urlChainId !== chainId) { + handleChainSwitch(urlChainId, true); + } + }, [chainId, urlChainId, prevChainId, handleChainSwitch, history]); + // set chain parameter on initial load if not there + React.useEffect(function () { + if (chainId && !urlChainId) { + history.replace({ search: replaceURLParam(history.location.search, 'chain', getChainNameFromId(chainId)) }); + } + }, [chainId, history, urlChainId, urlChain]); + if (!chainId || !info || !library) { + return null; + } + return (jsxRuntime.jsxs(SelectorWrapper, __assign({ ref: node }, { children: [jsxRuntime.jsxs(SelectorControls, __assign({ onClick: toggle, interactive: true }, { children: [jsxRuntime.jsx(SelectorLogo, { interactive: true, src: info.logoUrl }, void 0), jsxRuntime.jsx(SelectorLabel, { children: info.label }, void 0), jsxRuntime.jsx(StyledChevronDown, {}, void 0)] }), void 0), open && (jsxRuntime.jsxs(FlyoutMenu, __assign({ onMouseLeave: toggle }, { children: [jsxRuntime.jsx(FlyoutHeader, { children: jsxRuntime.jsx(macro.Trans, { children: "Select a network" }, void 0) }, void 0), jsxRuntime.jsx(Row, { onSelectChain: handleChainSwitch, targetChain: SupportedChainId.MAINNET }, void 0), jsxRuntime.jsx(Row, { onSelectChain: handleChainSwitch, targetChain: SupportedChainId.POLYGON }, void 0), jsxRuntime.jsx(Row, { onSelectChain: handleChainSwitch, targetChain: SupportedChainId.OPTIMISM }, void 0), jsxRuntime.jsx(Row, { onSelectChain: handleChainSwitch, targetChain: SupportedChainId.ARBITRUM_ONE }, void 0)] }), void 0))] }), void 0)); +} +var templateObject_1$R, templateObject_2$A, templateObject_3$u, templateObject_4$l, templateObject_5$h, templateObject_6$c, templateObject_7$a, templateObject_8$8, templateObject_9$7, templateObject_10$5, templateObject_11$4, templateObject_12$4, templateObject_13$1, templateObject_14$1; + +var HeaderFrame = styled__default["default"].div(templateObject_4$k || (templateObject_4$k = __makeTemplateObject(["\n display: grid;\n grid-template-columns: 120px 1fr 120px;\n align-items: center;\n justify-content: space-between;\n align-items: center;\n flex-direction: row;\n width: 100%;\n top: 0;\n position: relative;\n padding: 1rem;\n z-index: 21;\n position: relative;\n /* Background slide effect on scroll. */\n background-image: ", ";\n background-position: ", ";\n background-size: 100% 200%;\n box-shadow: 0px 0px 0px 1px ", ";\n transition: background-position 0.1s, box-shadow 0.1s;\n background-blend-mode: hard-light;\n\n ", ";\n\n ", ";\n\n ", ";\n"], ["\n display: grid;\n grid-template-columns: 120px 1fr 120px;\n align-items: center;\n justify-content: space-between;\n align-items: center;\n flex-direction: row;\n width: 100%;\n top: 0;\n position: relative;\n padding: 1rem;\n z-index: 21;\n position: relative;\n /* Background slide effect on scroll. */\n background-image: ", ";\n background-position: ", ";\n background-size: 100% 200%;\n box-shadow: 0px 0px 0px 1px ", ";\n transition: background-position 0.1s, box-shadow 0.1s;\n background-blend-mode: hard-light;\n\n ", ";\n\n ", ";\n\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return "linear-gradient(to bottom, transparent 50%, " + theme.bg0 + " 50% )}}"; +}, function (_a) { + var showBackground = _a.showBackground; + return (showBackground ? '0 -100%' : '0 0'); +}, function (_a) { + var theme = _a.theme, showBackground = _a.showBackground; + return (showBackground ? theme.bg2 : 'transparent;'); +}, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToLarge(templateObject_1$Q || (templateObject_1$Q = __makeTemplateObject(["\n grid-template-columns: 48px 1fr 1fr;\n "], ["\n grid-template-columns: 48px 1fr 1fr;\n "]))); +}, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToMedium(templateObject_2$z || (templateObject_2$z = __makeTemplateObject(["\n padding: 1rem;\n grid-template-columns: 1fr 1fr;\n "], ["\n padding: 1rem;\n grid-template-columns: 1fr 1fr;\n "]))); +}, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToSmall(templateObject_3$t || (templateObject_3$t = __makeTemplateObject(["\n padding: 1rem;\n grid-template-columns: 36px 1fr;\n "], ["\n padding: 1rem;\n grid-template-columns: 36px 1fr;\n "]))); +}); +var HeaderControls = styled__default["default"].div(templateObject_5$g || (templateObject_5$g = __makeTemplateObject(["\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-self: flex-end;\n"], ["\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-self: flex-end;\n"]))); +var HeaderElement = styled__default["default"].div(templateObject_7$9 || (templateObject_7$9 = __makeTemplateObject(["\n display: flex;\n align-items: center;\n\n &:not(:first-child) {\n margin-left: 0.5em;\n }\n\n /* addresses safari's lack of support for \"gap\" */\n & > *:not(:first-child) {\n margin-left: 8px;\n }\n\n ", ";\n"], ["\n display: flex;\n align-items: center;\n\n &:not(:first-child) {\n margin-left: 0.5em;\n }\n\n /* addresses safari's lack of support for \"gap\" */\n & > *:not(:first-child) {\n margin-left: 8px;\n }\n\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToMedium(templateObject_6$b || (templateObject_6$b = __makeTemplateObject(["\n align-items: center;\n "], ["\n align-items: center;\n "]))); +}); +var HeaderLinks = styled__default["default"](Row$1)(templateObject_11$3 || (templateObject_11$3 = __makeTemplateObject(["\n justify-self: center;\n background-color: ", ";\n width: fit-content;\n padding: 2px;\n border-radius: 16px;\n display: grid;\n grid-auto-flow: column;\n grid-gap: 10px;\n overflow: auto;\n align-items: center;\n ", ";\n ", ";\n ", ";\n"], ["\n justify-self: center;\n background-color: ", ";\n width: fit-content;\n padding: 2px;\n border-radius: 16px;\n display: grid;\n grid-auto-flow: column;\n grid-gap: 10px;\n overflow: auto;\n align-items: center;\n ", ";\n ", ";\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg0; +}, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToLarge(templateObject_8$7 || (templateObject_8$7 = __makeTemplateObject(["\n justify-self: start; \n "], ["\n justify-self: start; \n "]))); +}, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToMedium(templateObject_9$6 || (templateObject_9$6 = __makeTemplateObject(["\n justify-self: center;\n "], ["\n justify-self: center;\n "]))); +}, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToMedium(templateObject_10$4 || (templateObject_10$4 = __makeTemplateObject(["\n flex-direction: row;\n justify-content: space-between;\n justify-self: center;\n z-index: 99;\n position: fixed;\n bottom: 0; right: 50%;\n transform: translate(50%,-50%);\n margin: 0 auto;\n background-color: ", ";\n border: 1px solid ", ";\n box-shadow: 0px 6px 10px rgb(0 0 0 / 2%);\n "], ["\n flex-direction: row;\n justify-content: space-between;\n justify-self: center;\n z-index: 99;\n position: fixed;\n bottom: 0; right: 50%;\n transform: translate(50%,-50%);\n margin: 0 auto;\n background-color: ", ";\n border: 1px solid ", ";\n box-shadow: 0px 6px 10px rgb(0 0 0 / 2%);\n "])), function (_a) { + var theme = _a.theme; + return theme.bg0; + }, function (_a) { + var theme = _a.theme; + return theme.bg2; + }); +}); +var AccountElement = styled__default["default"].div(templateObject_12$3 || (templateObject_12$3 = __makeTemplateObject(["\n display: flex;\n flex-direction: row;\n align-items: center;\n background-color: ", ";\n border-radius: 16px;\n white-space: nowrap;\n width: 100%;\n height: 40px;\n\n :focus {\n border: 1px solid blue;\n }\n"], ["\n display: flex;\n flex-direction: row;\n align-items: center;\n background-color: ", ";\n border-radius: 16px;\n white-space: nowrap;\n width: 100%;\n height: 40px;\n\n :focus {\n border: 1px solid blue;\n }\n"])), function (_a) { + var theme = _a.theme, active = _a.active; + return (!active ? theme.bg0 : theme.bg0); }); -api.useAllV3TicksQuery; api.useFeeTierDistributionQuery; +var UNIAmount = styled__default["default"](AccountElement)(templateObject_13 || (templateObject_13 = __makeTemplateObject(["\n color: white;\n padding: 4px 8px;\n height: 36px;\n font-weight: 500;\n background-color: ", ";\n background: radial-gradient(174.47% 188.91% at 1.84% 0%, #ff007a 0%, #2172e5 100%), #edeef2;\n"], ["\n color: white;\n padding: 4px 8px;\n height: 36px;\n font-weight: 500;\n background-color: ", ";\n background: radial-gradient(174.47% 188.91% at 1.84% 0%, #ff007a 0%, #2172e5 100%), #edeef2;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg3; +}); +var UNIWrapper = styled__default["default"].span(templateObject_14 || (templateObject_14 = __makeTemplateObject(["\n width: fit-content;\n position: relative;\n cursor: pointer;\n\n :hover {\n opacity: 0.8;\n }\n\n :active {\n opacity: 0.9;\n }\n"], ["\n width: fit-content;\n position: relative;\n cursor: pointer;\n\n :hover {\n opacity: 0.8;\n }\n\n :active {\n opacity: 0.9;\n }\n"]))); +var BalanceText = styled__default["default"](rebass.Text)(templateObject_16 || (templateObject_16 = __makeTemplateObject(["\n ", ";\n"], ["\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToExtraSmall(templateObject_15 || (templateObject_15 = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); +}); +var Title = styled__default["default"].a(templateObject_18 || (templateObject_18 = __makeTemplateObject(["\n display: flex;\n align-items: center;\n pointer-events: auto;\n justify-self: flex-start;\n margin-right: 12px;\n ", ";\n :hover {\n cursor: pointer;\n }\n"], ["\n display: flex;\n align-items: center;\n pointer-events: auto;\n justify-self: flex-start;\n margin-right: 12px;\n ", ";\n :hover {\n cursor: pointer;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToSmall(templateObject_17 || (templateObject_17 = __makeTemplateObject(["\n justify-self: center;\n "], ["\n justify-self: center;\n "]))); +}); +var UniIcon = styled__default["default"].div(templateObject_19 || (templateObject_19 = __makeTemplateObject(["\n transition: transform 0.3s ease;\n :hover {\n transform: rotate(-5deg);\n }\n\n position: relative;\n"], ["\n transition: transform 0.3s ease;\n :hover {\n transform: rotate(-5deg);\n }\n\n position: relative;\n"]))); +var activeClassName = 'ACTIVE'; +var StyledNavLink = styled__default["default"](reactRouterDom.NavLink).attrs({ + activeClassName: activeClassName, +})(templateObject_20 || (templateObject_20 = __makeTemplateObject(["\n ", "\n align-items: left;\n border-radius: 3rem;\n outline: none;\n cursor: pointer;\n text-decoration: none;\n color: ", ";\n font-size: 1rem;\n font-weight: 500;\n padding: 8px 12px;\n word-break: break-word;\n overflow: hidden;\n white-space: nowrap;\n &.", " {\n border-radius: 14px;\n font-weight: 600;\n justify-content: center;\n color: ", ";\n background-color: ", ";\n }\n\n :hover,\n :focus {\n color: ", ";\n }\n"], ["\n ", "\n align-items: left;\n border-radius: 3rem;\n outline: none;\n cursor: pointer;\n text-decoration: none;\n color: ", ";\n font-size: 1rem;\n font-weight: 500;\n padding: 8px 12px;\n word-break: break-word;\n overflow: hidden;\n white-space: nowrap;\n &.", " {\n border-radius: 14px;\n font-weight: 600;\n justify-content: center;\n color: ", ";\n background-color: ", ";\n }\n\n :hover,\n :focus {\n color: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.flexRowNoWrap; +}, function (_a) { + var theme = _a.theme; + return theme.text2; +}, activeClassName, function (_a) { + var theme = _a.theme; + return theme.text1; +}, function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var theme = _a.theme; + return polished.darken(0.1, theme.text1); +}); +var StyledExternalLink = styled__default["default"](ExternalLink).attrs({ + activeClassName: activeClassName, +})(templateObject_21 || (templateObject_21 = __makeTemplateObject(["\n ", "\n align-items: left;\n border-radius: 3rem;\n outline: none;\n cursor: pointer;\n text-decoration: none;\n color: ", ";\n font-size: 1rem;\n width: fit-content;\n margin: 0 12px;\n font-weight: 500;\n\n &.", " {\n border-radius: 14px;\n font-weight: 600;\n color: ", ";\n }\n\n :hover,\n :focus {\n color: ", ";\n text-decoration: none;\n }\n"], ["\n ", "\n align-items: left;\n border-radius: 3rem;\n outline: none;\n cursor: pointer;\n text-decoration: none;\n color: ", ";\n font-size: 1rem;\n width: fit-content;\n margin: 0 12px;\n font-weight: 500;\n\n &.", " {\n border-radius: 14px;\n font-weight: 600;\n color: ", ";\n }\n\n :hover,\n :focus {\n color: ", ";\n text-decoration: none;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.flexRowNoWrap; +}, function (_a) { + var theme = _a.theme; + return theme.text2; +}, activeClassName, function (_a) { + var theme = _a.theme; + return theme.text1; +}, function (_a) { + var theme = _a.theme; + return polished.darken(0.1, theme.text1); +}); +function Header$2() { + var _a; + var _b = useActiveWeb3React(), account = _b.account, chainId = _b.chainId; + var userEthBalance = (_a = useNativeCurrencyBalances(account ? [account] : [])) === null || _a === void 0 ? void 0 : _a[account !== null && account !== void 0 ? account : '']; + var _c = __read(useDarkModeManager(), 1), darkMode = _c[0]; + var _d = useTheme(), white = _d.white, black = _d.black; + var toggleClaimModal = useToggleSelfClaimModal(); + var availableClaim = useUserHasAvailableClaim(account); + var claimTxn = useUserHasSubmittedClaim(account !== null && account !== void 0 ? account : undefined).claimTxn; + var showClaimPopup = useShowClaimPopup(); + var scrollY = useScrollPosition__default["default"](); + var _e = CHAIN_INFO[chainId ? chainId : SupportedChainId.MAINNET], infoLink = _e.infoLink, nativeCurrencySymbol = _e.addNetworkInfo.nativeCurrency.symbol; + return (jsxRuntime.jsxs(HeaderFrame, __assign({ showBackground: scrollY > 45 }, { children: [jsxRuntime.jsx(ClaimModal, {}, void 0), jsxRuntime.jsx(Title, __assign({ href: "." }, { children: jsxRuntime.jsxs(UniIcon, { children: [jsxRuntime.jsx(SvgLogo, { fill: darkMode ? white : black, width: "24px", height: "100%", title: "logo" }, void 0), jsxRuntime.jsx(HolidayOrnament, {}, void 0)] }, void 0) }), void 0), jsxRuntime.jsxs(HeaderLinks, { children: [jsxRuntime.jsx(StyledNavLink, __assign({ id: "swap-nav-link", to: '/swap' }, { children: jsxRuntime.jsx(macro.Trans, { children: "Swap" }, void 0) }), void 0), jsxRuntime.jsx(StyledNavLink, __assign({ id: "pool-nav-link", to: '/pool', isActive: function (match, _a) { + var pathname = _a.pathname; + return Boolean(match) || + pathname.startsWith('/add') || + pathname.startsWith('/remove') || + pathname.startsWith('/increase') || + pathname.startsWith('/find'); + } }, { children: jsxRuntime.jsx(macro.Trans, { children: "Pool" }, void 0) }), void 0), (!chainId || chainId === SupportedChainId.MAINNET) && (jsxRuntime.jsx(StyledNavLink, __assign({ id: "vote-nav-link", to: '/vote' }, { children: jsxRuntime.jsx(macro.Trans, { children: "Vote" }, void 0) }), void 0)), jsxRuntime.jsxs(StyledExternalLink, __assign({ id: "charts-nav-link", href: infoLink }, { children: [jsxRuntime.jsx(macro.Trans, { children: "Charts" }, void 0), jsxRuntime.jsx("sup", { children: "\u2197" }, void 0)] }), void 0)] }, void 0), jsxRuntime.jsxs(HeaderControls, { children: [jsxRuntime.jsx(HeaderElement, { children: jsxRuntime.jsx(NetworkSelector, {}, void 0) }, void 0), jsxRuntime.jsxs(HeaderElement, { children: [availableClaim && !showClaimPopup && (jsxRuntime.jsxs(UNIWrapper, __assign({ onClick: toggleClaimModal }, { children: [jsxRuntime.jsx(UNIAmount, __assign({ active: !!account && !availableClaim, style: { pointerEvents: 'auto' } }, { children: jsxRuntime.jsx(ThemedText.White, __assign({ padding: "0 2px" }, { children: claimTxn && !(claimTxn === null || claimTxn === void 0 ? void 0 : claimTxn.receipt) ? (jsxRuntime.jsx(Dots, { children: jsxRuntime.jsx(macro.Trans, { children: "Claiming UNI" }, void 0) }, void 0)) : (jsxRuntime.jsx(macro.Trans, { children: "Claim UNI" }, void 0)) }), void 0) }), void 0), jsxRuntime.jsx(CardNoise, {}, void 0)] }), void 0)), jsxRuntime.jsxs(AccountElement, __assign({ active: !!account }, { children: [account && userEthBalance ? (jsxRuntime.jsx(BalanceText, __assign({ style: { flexShrink: 0, userSelect: 'none' }, pl: "0.75rem", pr: "0.5rem", fontWeight: 500 }, { children: jsxRuntime.jsxs(macro.Trans, { children: [userEthBalance === null || userEthBalance === void 0 ? void 0 : userEthBalance.toSignificant(3), " ", nativeCurrencySymbol] }, void 0) }), void 0)) : null, jsxRuntime.jsx(Web3Status, {}, void 0)] }), void 0)] }, void 0), jsxRuntime.jsx(HeaderElement, { children: jsxRuntime.jsx(Menu, {}, void 0) }, void 0)] }, void 0)] }), void 0)); +} +var templateObject_1$Q, templateObject_2$z, templateObject_3$t, templateObject_4$k, templateObject_5$g, templateObject_6$b, templateObject_7$9, templateObject_8$7, templateObject_9$6, templateObject_10$4, templateObject_11$3, templateObject_12$3, templateObject_13, templateObject_14, templateObject_15, templateObject_16, templateObject_17, templateObject_18, templateObject_19, templateObject_20, templateObject_21; + +var useMachineTimeMs = function (updateInterval) { + var _a = __read(React.useState(Date.now()), 2), now = _a[0], setNow = _a[1]; + useInterval(function () { + setNow(Date.now()); + }, updateInterval); + return now; +}; -/** - * Returns the input chain ID if chain is supported. If not, return undefined - * @param chainId a chain ID, which will be returned if it is a supported chain ID - */ -function supportedChainId(chainId) { - if (chainId in SupportedChainId) { - return chainId; - } - return undefined; -} +var BodyRow = styled__default["default"].div(templateObject_1$P || (templateObject_1$P = __makeTemplateObject(["\n color: ", ";\n font-size: 12px;\n"], ["\n color: ", ";\n font-size: 12px;\n"])), function (_a) { + var theme = _a.theme; + return theme.black; +}); +var CautionIcon = styled__default["default"](reactFeather.AlertOctagon)(templateObject_2$y || (templateObject_2$y = __makeTemplateObject(["\n color: ", ";\n"], ["\n color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.black; +}); +var Link = styled__default["default"](ExternalLink)(templateObject_3$s || (templateObject_3$s = __makeTemplateObject(["\n color: ", ";\n text-decoration: underline;\n"], ["\n color: ", ";\n text-decoration: underline;\n"])), function (_a) { + var theme = _a.theme; + return theme.black; +}); +var TitleRow = styled__default["default"].div(templateObject_4$j || (templateObject_4$j = __makeTemplateObject(["\n align-items: center;\n display: flex;\n justify-content: flex-start;\n margin-bottom: 8px;\n"], ["\n align-items: center;\n display: flex;\n justify-content: flex-start;\n margin-bottom: 8px;\n"]))); +var TitleText = styled__default["default"].div(templateObject_5$f || (templateObject_5$f = __makeTemplateObject(["\n color: black;\n font-weight: 600;\n font-size: 16px;\n line-height: 20px;\n margin: 0px 12px;\n"], ["\n color: black;\n font-weight: 600;\n font-size: 16px;\n line-height: 20px;\n margin: 0px 12px;\n"]))); +var Wrapper$e = styled__default["default"].div(templateObject_6$a || (templateObject_6$a = __makeTemplateObject(["\n background-color: ", ";\n border-radius: 12px;\n bottom: 60px;\n display: none;\n max-width: 348px;\n padding: 16px 20px;\n position: absolute;\n right: 16px;\n @media screen and (min-width: ", "px) {\n display: block;\n }\n"], ["\n background-color: ", ";\n border-radius: 12px;\n bottom: 60px;\n display: none;\n max-width: 348px;\n padding: 16px 20px;\n position: absolute;\n right: 16px;\n @media screen and (min-width: ", "px) {\n display: block;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.yellow3; +}, MEDIA_WIDTHS.upToMedium); +function ChainConnectivityWarning() { + var chainId = useActiveWeb3React().chainId; + var info = CHAIN_INFO[chainId !== null && chainId !== void 0 ? chainId : SupportedChainId.MAINNET]; + var label = info === null || info === void 0 ? void 0 : info.label; + return (jsxRuntime.jsxs(Wrapper$e, { children: [jsxRuntime.jsxs(TitleRow, { children: [jsxRuntime.jsx(CautionIcon, {}, void 0), jsxRuntime.jsx(TitleText, { children: jsxRuntime.jsx(macro.Trans, { children: "Network Warning" }, void 0) }, void 0)] }, void 0), jsxRuntime.jsxs(BodyRow, { children: [chainId === SupportedChainId.MAINNET ? (jsxRuntime.jsx(macro.Trans, { children: "You may have lost your network connection." }, void 0)) : (jsxRuntime.jsxs(macro.Trans, { children: ["You may have lost your network connection, or ", label, " might be down right now."] }, void 0)), ' ', info.statusPage !== undefined && (jsxRuntime.jsxs("span", { children: [jsxRuntime.jsx(macro.Trans, { children: "Check network status" }, void 0), ' ', jsxRuntime.jsx(Link, __assign({ href: info.statusPage || '' }, { children: jsxRuntime.jsx(macro.Trans, { children: "here." }, void 0) }), void 0)] }, void 0))] }, void 0)] }, void 0)); +} +var templateObject_1$P, templateObject_2$y, templateObject_3$s, templateObject_4$j, templateObject_5$f, templateObject_6$a; -function useQueryCacheInvalidator() { - var dispatch = useAppDispatch(); - // subscribe to `chainId` changes in the redux store rather than Web3 - // this will ensure that when `invalidateTags` is called, the latest - // `chainId` is available in redux to build the subgraph url - var chainId = useAppSelector(function (state) { return state.application.chainId; }); +var StyledPolling$1 = styled__default["default"].div(templateObject_2$x || (templateObject_2$x = __makeTemplateObject(["\n position: fixed;\n display: flex;\n align-items: center;\n right: 0;\n bottom: 0;\n padding: 1rem;\n color: ", ";\n transition: 250ms ease color;\n\n ", "\n"], ["\n position: fixed;\n display: flex;\n align-items: center;\n right: 0;\n bottom: 0;\n padding: 1rem;\n color: ", ";\n transition: 250ms ease color;\n\n ", "\n"])), function (_a) { + var theme = _a.theme, warning = _a.warning; + return (warning ? theme.yellow3 : theme.green1); +}, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToMedium(templateObject_1$O || (templateObject_1$O = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); +}); +var StyledPollingNumber = styled__default["default"](ThemedText.Small)(templateObject_3$r || (templateObject_3$r = __makeTemplateObject(["\n transition: opacity 0.25s ease;\n opacity: ", ";\n :hover {\n opacity: 1;\n }\n\n a {\n color: unset;\n }\n a:hover {\n text-decoration: none;\n color: unset;\n }\n"], ["\n transition: opacity 0.25s ease;\n opacity: ", ";\n :hover {\n opacity: 1;\n }\n\n a {\n color: unset;\n }\n a:hover {\n text-decoration: none;\n color: unset;\n }\n"])), function (_a) { + var breathe = _a.breathe, hovering = _a.hovering; + return (hovering ? 0.7 : breathe ? 1 : 0.5); +}); +var StyledPollingDot$1 = styled__default["default"].div(templateObject_4$i || (templateObject_4$i = __makeTemplateObject(["\n width: 8px;\n height: 8px;\n min-height: 8px;\n min-width: 8px;\n border-radius: 50%;\n position: relative;\n background-color: ", ";\n transition: 250ms ease background-color;\n"], ["\n width: 8px;\n height: 8px;\n min-height: 8px;\n min-width: 8px;\n border-radius: 50%;\n position: relative;\n background-color: ", ";\n transition: 250ms ease background-color;\n"])), function (_a) { + var theme = _a.theme, warning = _a.warning; + return (warning ? theme.yellow3 : theme.green1); +}); +var StyledGasDot = styled__default["default"].div(templateObject_5$e || (templateObject_5$e = __makeTemplateObject(["\n background-color: ", ";\n border-radius: 50%;\n height: 4px;\n min-height: 4px;\n min-width: 4px;\n position: relative;\n transition: 250ms ease background-color;\n width: 4px;\n"], ["\n background-color: ", ";\n border-radius: 50%;\n height: 4px;\n min-height: 4px;\n min-width: 4px;\n position: relative;\n transition: 250ms ease background-color;\n width: 4px;\n"])), function (_a) { + var theme = _a.theme; + return theme.text3; +}); +var rotate360$1 = styled.keyframes(templateObject_6$9 || (templateObject_6$9 = __makeTemplateObject(["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"], ["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"]))); +var Spinner$1 = styled__default["default"].div(templateObject_7$8 || (templateObject_7$8 = __makeTemplateObject(["\n animation: ", " 1s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n transform: translateZ(0);\n\n border-top: 1px solid transparent;\n border-right: 1px solid transparent;\n border-bottom: 1px solid transparent;\n border-left: 2px solid ", ";\n background: transparent;\n width: 14px;\n height: 14px;\n border-radius: 50%;\n position: relative;\n transition: 250ms ease border-color;\n\n left: -3px;\n top: -3px;\n"], ["\n animation: ", " 1s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n transform: translateZ(0);\n\n border-top: 1px solid transparent;\n border-right: 1px solid transparent;\n border-bottom: 1px solid transparent;\n border-left: 2px solid ", ";\n background: transparent;\n width: 14px;\n height: 14px;\n border-radius: 50%;\n position: relative;\n transition: 250ms ease border-color;\n\n left: -3px;\n top: -3px;\n"])), rotate360$1, function (_a) { + var theme = _a.theme, warning = _a.warning; + return (warning ? theme.yellow3 : theme.green1); +}); +var DEFAULT_MS_BEFORE_WARNING = ms__default["default"](templateObject_8$6 || (templateObject_8$6 = __makeTemplateObject(["10m"], ["10m"]))); +var NETWORK_HEALTH_CHECK_MS = ms__default["default"](templateObject_9$5 || (templateObject_9$5 = __makeTemplateObject(["10s"], ["10s"]))); +function Polling() { + var _a, _b; + var chainId = useActiveWeb3React().chainId; + var blockNumber = useBlockNumber(); + var _c = __read(React.useState(false), 2), isMounting = _c[0], setIsMounting = _c[1]; + var _d = __read(React.useState(false), 2), isHover = _d[0], setIsHover = _d[1]; + var machineTime = useMachineTimeMs(NETWORK_HEALTH_CHECK_MS); + var blockTime = useCurrentBlockTimestamp(); + var theme = useTheme(); + var ethGasPrice = useGasPrice(); + var priceGwei = ethGasPrice ? JSBI__default["default"].divide(ethGasPrice, JSBI__default["default"].BigInt(1000000000)) : undefined; + var waitMsBeforeWarning = (_b = (chainId ? (_a = CHAIN_INFO[chainId]) === null || _a === void 0 ? void 0 : _a.blockWaitMsBeforeWarning : DEFAULT_MS_BEFORE_WARNING)) !== null && _b !== void 0 ? _b : DEFAULT_MS_BEFORE_WARNING; + var warning = Boolean(!!blockTime && machineTime - blockTime.mul(1000).toNumber() > waitMsBeforeWarning); React.useEffect(function () { - dispatch(api.util.invalidateTags([CHAIN_TAG])); - }, [chainId, dispatch]); + if (!blockNumber) { + return; + } + setIsMounting(true); + var mountingTimer = setTimeout(function () { return setIsMounting(false); }, 1000); + // this will clear Timeout when component unmount like in willComponentUnmount + return function () { + clearTimeout(mountingTimer); + }; + }, [blockNumber] //useEffect will run only one time + //if you pass a value to array, like this [data] than clearTimeout will run every time this value changes (useEffect re-run) + ); + //TODO - chainlink gas oracle is really slow. Can we get a better data source? + return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsxs(StyledPolling$1, __assign({ onMouseEnter: function () { return setIsHover(true); }, onMouseLeave: function () { return setIsHover(false); }, warning: warning }, { children: [jsxRuntime.jsx(ExternalLink, __assign({ href: 'https://etherscan.io/gastracker' }, { children: priceGwei ? (jsxRuntime.jsxs(RowFixed, __assign({ style: { marginRight: '8px' } }, { children: [jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: "11px", mr: "8px", color: theme.text3 }, { children: jsxRuntime.jsxs(MouseoverTooltip, __assign({ text: jsxRuntime.jsx(macro.Trans, { children: "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI." }, void 0) }, { children: [priceGwei.toString(), " ", jsxRuntime.jsx(macro.Trans, { children: "gwei" }, void 0)] }), void 0) }), void 0), jsxRuntime.jsx(StyledGasDot, {}, void 0)] }), void 0)) : null }), void 0), jsxRuntime.jsx(StyledPollingNumber, __assign({ breathe: isMounting, hovering: isHover }, { children: jsxRuntime.jsx(ExternalLink, __assign({ href: chainId && blockNumber ? getExplorerLink(chainId, blockNumber.toString(), ExplorerDataType.BLOCK) : '' }, { children: jsxRuntime.jsxs(MouseoverTooltip, __assign({ text: jsxRuntime.jsx(macro.Trans, { children: "The most recent block number on this network. Prices update on every block." }, void 0) }, { children: [blockNumber, "\u2002"] }), void 0) }), void 0) }), void 0), jsxRuntime.jsx(StyledPollingDot$1, __assign({ warning: warning }, { children: isMounting && jsxRuntime.jsx(Spinner$1, { warning: warning }, void 0) }), void 0), ' '] }), void 0), warning && jsxRuntime.jsx(ChainConnectivityWarning, {}, void 0)] }, void 0) }, void 0)); } -function Updater$5() { - var _a = useActiveWeb3React(), chainId = _a.chainId, library = _a.library; - var dispatch = useAppDispatch(); - var windowVisible = useIsWindowVisible(); - var _b = __read(React.useState(chainId), 2), activeChainId = _b[0], setActiveChainId = _b[1]; - useQueryCacheInvalidator(); +var templateObject_1$O, templateObject_2$x, templateObject_3$r, templateObject_4$i, templateObject_5$e, templateObject_6$9, templateObject_7$8, templateObject_8$6, templateObject_9$5; + +var StyledClaimPopup = styled__default["default"](AutoColumn)(templateObject_1$N || (templateObject_1$N = __makeTemplateObject(["\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n border-radius: 20px;\n padding: 1.5rem;\n overflow: hidden;\n position: relative;\n max-width: 360px;\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n"], ["\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n border-radius: 20px;\n padding: 1.5rem;\n overflow: hidden;\n position: relative;\n max-width: 360px;\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n"]))); +var StyledClose$1 = styled__default["default"](reactFeather.X)(templateObject_2$w || (templateObject_2$w = __makeTemplateObject(["\n position: absolute;\n right: 10px;\n top: 10px;\n\n :hover {\n cursor: pointer;\n }\n"], ["\n position: absolute;\n right: 10px;\n top: 10px;\n\n :hover {\n cursor: pointer;\n }\n"]))); +var rotate = styled.keyframes(templateObject_3$q || (templateObject_3$q = __makeTemplateObject(["\n 0% {\n transform: perspective(1000px) rotateY(0deg);\n }\n\n 100% {\n transform: perspective(1000px) rotateY(360deg);\n }\n"], ["\n 0% {\n transform: perspective(1000px) rotateY(0deg);\n }\n\n 100% {\n transform: perspective(1000px) rotateY(360deg);\n }\n"]))); +var UniToken = styled__default["default"].img(templateObject_4$h || (templateObject_4$h = __makeTemplateObject(["\n animation: ", " 5s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n"], ["\n animation: ", " 5s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n"])), rotate); +function ClaimPopup() { + var _a; + var account = useActiveWeb3React().account; + // dont store these in persisted state yet + var showClaimPopup = useShowClaimPopup(); + var toggleShowClaimPopup = useToggleShowClaimPopup(); + // toggle for showing this modal + var showClaimModal = useModalOpen(ApplicationModal.SELF_CLAIM); + var toggleSelfClaimModal = useToggleSelfClaimModal(); + var handleToggleSelfClaimModal = React.useCallback(function () { + ReactGA__default["default"].event({ + category: 'MerkleDrop', + action: 'Toggle self claim modal', + }); + toggleSelfClaimModal(); + }, [toggleSelfClaimModal]); + // const userHasAvailableclaim = useUserHasAvailableClaim() + var userHasAvailableclaim = useUserHasAvailableClaim(account); + var unclaimedAmount = useUserUnclaimedAmount(account); + // listen for available claim and show popup if needed React.useEffect(function () { - if (library && chainId && windowVisible) { - setActiveChainId(chainId); + if (userHasAvailableclaim) { + ReactGA__default["default"].event({ + category: 'MerkleDrop', + action: 'Show claim popup', + }); + toggleShowClaimPopup(); } - }, [dispatch, chainId, library, windowVisible]); - var debouncedChainId = useDebounce(activeChainId, 100); + // the toggleShowClaimPopup function changes every time the popup changes, so this will cause an infinite loop. + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [userHasAvailableclaim]); + return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: showClaimPopup && !showClaimModal && (jsxRuntime.jsxs(StyledClaimPopup, __assign({ gap: "md" }, { children: [jsxRuntime.jsx(CardBGImage, {}, void 0), jsxRuntime.jsx(CardNoise, {}, void 0), jsxRuntime.jsx(StyledClose$1, { stroke: "white", onClick: toggleShowClaimPopup }, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ style: { padding: '2rem 0', zIndex: 10 }, justify: "center" }, { children: [jsxRuntime.jsx(UniToken, { width: "48px", src: tokenLogo }, void 0), ' ', jsxRuntime.jsxs(ThemedText.White, __assign({ style: { marginTop: '1rem' }, fontSize: 36, fontWeight: 600 }, { children: [unclaimedAmount === null || unclaimedAmount === void 0 ? void 0 : unclaimedAmount.toFixed(0, (_a = { groupSeparator: ',' }) !== null && _a !== void 0 ? _a : '-'), " UNI"] }), void 0), jsxRuntime.jsxs(ThemedText.White, __assign({ style: { paddingTop: '1.25rem', textAlign: 'center' }, fontWeight: 600, color: "white" }, { children: [jsxRuntime.jsx("span", __assign({ role: "img", "aria-label": "party" }, { children: "\uD83C\uDF89" }), void 0), ' ', jsxRuntime.jsx(macro.Trans, { children: "UNI has arrived" }, void 0), ' ', jsxRuntime.jsx("span", __assign({ role: "img", "aria-label": "party" }, { children: "\uD83C\uDF89" }), void 0)] }), void 0), jsxRuntime.jsx(ThemedText.SubHeader, __assign({ style: { paddingTop: '0.5rem', textAlign: 'center' }, color: "white" }, { children: jsxRuntime.jsxs(macro.Trans, { children: ["Thanks for being part of the Uniswap community ", jsxRuntime.jsx(reactFeather.Heart, { size: 12 }, void 0)] }, void 0) }), void 0)] }), void 0), jsxRuntime.jsx(AutoColumn, __assign({ style: { zIndex: 10 }, justify: "center" }, { children: jsxRuntime.jsx(ButtonPrimary, __assign({ padding: "8px", "$borderRadius": "8px", width: 'fit-content', onClick: handleToggleSelfClaimModal }, { children: jsxRuntime.jsx(macro.Trans, { children: "Claim your UNI tokens" }, void 0) }), void 0) }), void 0)] }), void 0)) }, void 0)); +} +var templateObject_1$N, templateObject_2$w, templateObject_3$q, templateObject_4$h; + +var RowNoFlex$1 = styled__default["default"](AutoRow)(templateObject_1$M || (templateObject_1$M = __makeTemplateObject(["\n flex-wrap: nowrap;\n"], ["\n flex-wrap: nowrap;\n"]))); +function FailedNetworkSwitchPopup(_a) { + var chainId = _a.chainId; + var chainInfo = CHAIN_INFO[chainId]; + var theme = React.useContext(styled.ThemeContext); + return (jsxRuntime.jsxs(RowNoFlex$1, { children: [jsxRuntime.jsx("div", __assign({ style: { paddingRight: 16 } }, { children: jsxRuntime.jsx(reactFeather.AlertCircle, { color: theme.red1, size: 24 }, void 0) }), void 0), jsxRuntime.jsx(AutoColumn, __assign({ gap: "8px" }, { children: jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 500 }, { children: jsxRuntime.jsxs(macro.Trans, { children: ["Failed to switch networks from the Uniswap Interface. In order to use Uniswap on ", chainInfo.label, ", you must change the network in your wallet."] }, void 0) }), void 0) }), void 0)] }, void 0)); +} +var templateObject_1$M; + +var RowNoFlex = styled__default["default"](AutoRow)(templateObject_1$L || (templateObject_1$L = __makeTemplateObject(["\n flex-wrap: nowrap;\n"], ["\n flex-wrap: nowrap;\n"]))); +function TransactionPopup(_a) { + var hash = _a.hash; + var chainId = useActiveWeb3React().chainId; + var tx = useTransaction(hash); + var theme = React.useContext(styled.ThemeContext); + if (!tx) + return null; + var success = Boolean(tx.receipt && tx.receipt.status === 1); + return (jsxRuntime.jsxs(RowNoFlex, { children: [jsxRuntime.jsx("div", __assign({ style: { paddingRight: 16 } }, { children: success ? jsxRuntime.jsx(reactFeather.CheckCircle, { color: theme.green1, size: 24 }, void 0) : jsxRuntime.jsx(reactFeather.AlertCircle, { color: theme.red1, size: 24 }, void 0) }), void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "8px" }, { children: [jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 500 }, { children: jsxRuntime.jsx(TransactionSummary, { info: tx.info }, void 0) }), void 0), chainId && (jsxRuntime.jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, hash, ExplorerDataType.TRANSACTION) }, { children: "View on Explorer" }), void 0))] }), void 0)] }, void 0)); +} +var templateObject_1$L; + +var StyledClose = styled__default["default"](reactFeather.X)(templateObject_1$K || (templateObject_1$K = __makeTemplateObject(["\n position: absolute;\n right: 10px;\n top: 10px;\n\n :hover {\n cursor: pointer;\n }\n"], ["\n position: absolute;\n right: 10px;\n top: 10px;\n\n :hover {\n cursor: pointer;\n }\n"]))); +var Popup = styled__default["default"].div(templateObject_3$p || (templateObject_3$p = __makeTemplateObject(["\n display: inline-block;\n width: 100%;\n padding: 1em;\n background-color: ", ";\n position: relative;\n border-radius: 10px;\n padding: 20px;\n padding-right: 35px;\n overflow: hidden;\n\n ", "\n"], ["\n display: inline-block;\n width: 100%;\n padding: 1em;\n background-color: ", ";\n position: relative;\n border-radius: 10px;\n padding: 20px;\n padding-right: 35px;\n overflow: hidden;\n\n ", "\n"])), function (_a) { + var theme = _a.theme; + return theme.bg0; +}, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToSmall(templateObject_2$v || (templateObject_2$v = __makeTemplateObject(["\n min-width: 290px;\n &:not(:last-of-type) {\n margin-right: 20px;\n }\n "], ["\n min-width: 290px;\n &:not(:last-of-type) {\n margin-right: 20px;\n }\n "]))); +}); +var Fader = styled__default["default"].div(templateObject_4$g || (templateObject_4$g = __makeTemplateObject(["\n position: absolute;\n bottom: 0px;\n left: 0px;\n width: 100%;\n height: 2px;\n background-color: ", ";\n"], ["\n position: absolute;\n bottom: 0px;\n left: 0px;\n width: 100%;\n height: 2px;\n background-color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg3; +}); +var AnimatedFader = reactSpring.animated(Fader); +function PopupItem(_a) { + var removeAfterMs = _a.removeAfterMs, content = _a.content, popKey = _a.popKey; + var removePopup = useRemovePopup(); + var removeThisPopup = React.useCallback(function () { return removePopup(popKey); }, [popKey, removePopup]); React.useEffect(function () { - var _a; - var chainId = debouncedChainId ? (_a = supportedChainId(debouncedChainId)) !== null && _a !== void 0 ? _a : null : null; - dispatch(updateChainId({ chainId: chainId })); - }, [dispatch, debouncedChainId]); - return null; -} + if (removeAfterMs === null) + return undefined; + var timeout = setTimeout(function () { + removeThisPopup(); + }, removeAfterMs); + return function () { + clearTimeout(timeout); + }; + }, [removeAfterMs, removeThisPopup]); + var theme = React.useContext(styled.ThemeContext); + var popupContent; + if ('txn' in content) { + var hash = content.txn.hash; + popupContent = jsxRuntime.jsx(TransactionPopup, { hash: hash }, void 0); + } + else if ('failedSwitchNetwork' in content) { + popupContent = jsxRuntime.jsx(FailedNetworkSwitchPopup, { chainId: content.failedSwitchNetwork }, void 0); + } + var faderStyle = web.useSpring({ + from: { width: '100%' }, + to: { width: '0%' }, + config: { duration: removeAfterMs !== null && removeAfterMs !== void 0 ? removeAfterMs : undefined }, + }); + return (jsxRuntime.jsxs(Popup, { children: [jsxRuntime.jsx(StyledClose, { color: theme.text2, onClick: removeThisPopup }, void 0), popupContent, removeAfterMs !== null ? jsxRuntime.jsx(AnimatedFader, { style: faderStyle }, void 0) : null] }, void 0)); +} +var templateObject_1$K, templateObject_2$v, templateObject_3$p, templateObject_4$g; -function Updater$4() { - var _a = useActiveWeb3React(), chainId = _a.chainId, library = _a.library; - var dispatch = useAppDispatch(); - var isWindowVisible = useIsWindowVisible(); - // get all loaded lists, and the active urls - var lists = useAllLists(); - var activeListUrls = useActiveListUrls(); - var fetchList = useFetchListCallback(); - var fetchAllListsCallback = React.useCallback(function () { - if (!isWindowVisible) - return; - Object.keys(lists).forEach(function (url) { - return fetchList(url).catch(function (error) { return console.debug('interval list fetching error', error); }); - }); - }, [fetchList, isWindowVisible, lists]); +var BGImage = "055f83ffb7252729.svg"; + +var Wrapper$d = styled__default["default"](AutoColumn)(templateObject_2$u || (templateObject_2$u = __makeTemplateObject(["\n background: #edeef2;\n position: relative;\n border-radius: 12px;\n padding: 18px;\n max-width: 360px;\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n color: ", ";\n overflow: hidden;\n\n ", "\n"], ["\n background: #edeef2;\n position: relative;\n border-radius: 12px;\n padding: 18px;\n max-width: 360px;\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n color: ", ";\n overflow: hidden;\n\n ", "\n"])), function (_a) { + var theme = _a.theme; + return theme.text1; +}, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToSmall(templateObject_1$J || (templateObject_1$J = __makeTemplateObject(["\n max-width: 100%;\n "], ["\n max-width: 100%;\n "]))); +}); +var BGOrb = styled__default["default"].img(templateObject_3$o || (templateObject_3$o = __makeTemplateObject(["\n position: absolute;\n right: -64px;\n top: -64px;\n width: 180px;\n z-index: ", ";\n"], ["\n position: absolute;\n right: -64px;\n top: -64px;\n width: 180px;\n z-index: ", ";\n"])), Z_INDEX.sticky); +var WrappedCloseIcon = styled__default["default"](reactFeather.X)(templateObject_4$f || (templateObject_4$f = __makeTemplateObject(["\n position: absolute;\n top: 10px;\n right: 10px;\n width: 20px;\n height: 20px;\n stroke: #7c7c80;\n z-index: ", ";\n :hover {\n cursor: pointer;\n opacity: 0.8;\n }\n"], ["\n position: absolute;\n top: 10px;\n right: 10px;\n width: 20px;\n height: 20px;\n stroke: #7c7c80;\n z-index: ", ";\n :hover {\n cursor: pointer;\n opacity: 0.8;\n }\n"])), Z_INDEX.fixed); +var END_TIMESTAMP = 1642272346; // Jan 15th +function SurveyPopup() { + var theme = useTheme(); + var _a = __read(useShowSurveyPopup(), 2), showPopup = _a[0], setShowSurveyPopup = _a[1]; + // show popup to 1% of users React.useEffect(function () { - if (chainId && [SupportedChainId.OPTIMISM, SupportedChainId.OPTIMISTIC_KOVAN].includes(chainId)) { - dispatch(enableList(OPTIMISM_LIST)); + // has not visited page during A/B testing if undefined + if (showPopup === undefined) { + if (Math.random() < 0.01) { + setShowSurveyPopup(true); + // log a case of succesful view + ReactGA__default["default"].event({ + category: 'Survey', + action: 'Saw Survey', + }); + } } - if (chainId && [SupportedChainId.ARBITRUM_ONE, SupportedChainId.ARBITRUM_RINKEBY].includes(chainId)) { - dispatch(enableList(ARBITRUM_LIST)); + }, [setShowSurveyPopup, showPopup]); + // limit survey to 24 hours based on timestamps + var timestamp = useCurrentBlockTimestamp(); + var durationOver = timestamp ? timestamp.toNumber() > END_TIMESTAMP : false; + return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: !showPopup || durationOver ? null : (jsxRuntime.jsxs(Wrapper$d, __assign({ gap: "10px" }, { children: [jsxRuntime.jsx(WrappedCloseIcon, { onClick: function () { + ReactGA__default["default"].event({ + category: 'Survey', + action: 'Clicked Survey Link', + }); + setShowSurveyPopup(false); + } }, void 0), jsxRuntime.jsx(BGOrb, { src: BGImage }, void 0), jsxRuntime.jsx(ExternalLink, __assign({ href: "https://www.surveymonkey.com/r/YGWV9VD" }, { children: jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(reactFeather.MessageCircle, { stroke: theme.black, size: "20px", strokeWidth: "1px" }, void 0), jsxRuntime.jsx(ThemedText.White, __assign({ fontWeight: 600, color: theme.black, ml: "6px" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Tell us what you think \u2197" }, void 0) }), void 0)] }, void 0) }), void 0), jsxRuntime.jsx(ThemedText.Black, __assign({ style: { zIndex: Z_INDEX.fixed }, fontWeight: 400, fontSize: "12px", color: theme.black }, { children: jsxRuntime.jsx(macro.Trans, { children: "Take a 10 minute survey to help us improve your experience in the Uniswap app." }, void 0) }), void 0)] }), void 0)) }, void 0)); +} +var templateObject_1$J, templateObject_2$u, templateObject_3$o, templateObject_4$f; + +var MobilePopupWrapper = styled__default["default"].div(templateObject_2$t || (templateObject_2$t = __makeTemplateObject(["\n position: relative;\n max-width: 100%;\n height: ", ";\n margin: ", ";\n margin-bottom: ", "};\n\n display: none;\n ", ";\n"], ["\n position: relative;\n max-width: 100%;\n height: ", ";\n margin: ", ";\n margin-bottom: ", "};\n\n display: none;\n ", ";\n"])), function (_a) { + var height = _a.height; + return height; +}, function (_a) { + var height = _a.height; + return (height ? '0 auto;' : 0); +}, function (_a) { + var height = _a.height; + return (height ? '20px' : 0); +}, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToSmall(templateObject_1$I || (templateObject_1$I = __makeTemplateObject(["\n display: block;\n "], ["\n display: block;\n "]))); +}); +var MobilePopupInner = styled__default["default"].div(templateObject_3$n || (templateObject_3$n = __makeTemplateObject(["\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 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"]))); +var StopOverflowQuery = "@media screen and (min-width: " + (MEDIA_WIDTHS.upToMedium + 1) + "px) and (max-width: " + (MEDIA_WIDTHS.upToMedium + 500) + "px)"; +var FixedPopupColumn = styled__default["default"](AutoColumn)(templateObject_5$d || (templateObject_5$d = __makeTemplateObject(["\n position: fixed;\n top: ", ";\n right: 1rem;\n max-width: 355px !important;\n width: 100%;\n z-index: 3;\n\n ", ";\n\n ", " {\n top: ", ";\n }\n"], ["\n position: fixed;\n top: ", ";\n right: 1rem;\n max-width: 355px !important;\n width: 100%;\n z-index: 3;\n\n ", ";\n\n ", " {\n top: ", ";\n }\n"])), function (_a) { + var extraPadding = _a.extraPadding; + return (extraPadding ? '64px' : '56px'); +}, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToSmall(templateObject_4$e || (templateObject_4$e = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); +}, StopOverflowQuery, function (_a) { + var extraPadding = _a.extraPadding, xlPadding = _a.xlPadding; + return (xlPadding ? '64px' : extraPadding ? '64px' : '56px'); +}); +function Popups() { + // get all popups + var activePopups = useActivePopups(); + // show survey popup if user has not closed + var _a = __read(useShowSurveyPopup(), 1), showSurveyPopup = _a[0]; + var urlWarningActive = useURLWarningVisible(); + // need extra padding if network is not L1 Ethereum + var chainId = useActiveWeb3React().chainId; + var isNotOnMainnet = Boolean(chainId && chainId !== SupportedChainId.MAINNET); + return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs(FixedPopupColumn, __assign({ gap: "20px", extraPadding: urlWarningActive, xlPadding: isNotOnMainnet }, { children: [jsxRuntime.jsx(ClaimPopup, {}, void 0), jsxRuntime.jsx(SurveyPopup, {}, void 0), activePopups.map(function (item) { return (jsxRuntime.jsx(PopupItem, { content: item.content, popKey: item.key, removeAfterMs: item.removeAfterMs }, item.key)); })] }), void 0), jsxRuntime.jsx(MobilePopupWrapper, __assign({ height: (activePopups === null || activePopups === void 0 ? void 0 : activePopups.length) > 0 || showSurveyPopup ? 'fit-content' : 0 }, { children: jsxRuntime.jsxs(MobilePopupInner, { children: [jsxRuntime.jsx(SurveyPopup, {}, void 0), activePopups // reverse so new items up front + .slice(0) + .reverse() + .map(function (item) { return (jsxRuntime.jsx(PopupItem, { content: item.content, popKey: item.key, removeAfterMs: item.removeAfterMs }, item.key)); })] }, void 0) }), void 0)] }, void 0)); +} +var templateObject_1$I, templateObject_2$t, templateObject_3$n, templateObject_4$e, templateObject_5$d; + +function useEagerConnect() { + var _a = core.useWeb3React(), activate = _a.activate, active = _a.active; + var _b = __read(React.useState(false), 2), tried = _b[0], setTried = _b[1]; + // gnosisSafe.isSafeApp() races a timeout against postMessage, so it delays pageload if we are not in a safe app; + // if we are not embedded in an iframe, it is not worth checking + var _c = __read(React.useState(!IS_IN_IFRAME), 2), triedSafe = _c[0], setTriedSafe = _c[1]; + // first, try connecting to a gnosis safe + React.useEffect(function () { + if (!triedSafe) { + gnosisSafe.isSafeApp().then(function (loadedInSafe) { + if (loadedInSafe) { + activate(gnosisSafe, undefined, true).catch(function () { + setTriedSafe(true); + }); + } + else { + setTriedSafe(true); + } + }); } - }, [chainId, dispatch]); - // fetch all lists every 10 minutes, but only after we initialize library - useInterval(fetchAllListsCallback, library ? 1000 * 60 * 10 : null); - // whenever a list is not loaded and not loading, try again to load it + }, [activate, setTriedSafe, triedSafe]); + // then, if that fails, try connecting to an injected connector React.useEffect(function () { - Object.keys(lists).forEach(function (listUrl) { - var list = lists[listUrl]; - if (!list.current && !list.loadingRequestId && !list.error) { - fetchList(listUrl).catch(function (error) { return console.debug('list added fetching error', error); }); - } - }); - }, [dispatch, fetchList, library, lists]); - // if any lists from unsupported lists are loaded, check them too (in case new updates since last visit) + if (!active && triedSafe) { + injected.isAuthorized().then(function (isAuthorized) { + if (isAuthorized) { + activate(injected, undefined, true).catch(function () { + setTried(true); + }); + } + else { + if (isMobile && window.ethereum) { + activate(injected, undefined, true).catch(function () { + setTried(true); + }); + } + else { + setTried(true); + } + } + }); + } + }, [activate, active, triedSafe]); + // wait until we get confirmation of a connection to flip the flag React.useEffect(function () { - UNSUPPORTED_LIST_URLS.forEach(function (listUrl) { - var list = lists[listUrl]; - if (!list || (!list.current && !list.loadingRequestId && !list.error)) { - fetchList(listUrl).catch(function (error) { return console.debug('list added fetching error', error); }); - } - }); - }, [dispatch, fetchList, library, lists]); - // automatically update lists if versions are minor/patch + if (active) { + setTried(true); + } + }, [active]); + return tried; +} +/** + * Use for network and injected - logs user in + * and out after checking what network theyre on + */ +function useInactiveListener(suppress) { + if (suppress === void 0) { suppress = false; } + var _a = core.useWeb3React(), active = _a.active, error = _a.error, activate = _a.activate; React.useEffect(function () { - Object.keys(lists).forEach(function (listUrl) { - var list = lists[listUrl]; - if (list.current && list.pendingUpdate) { - var bump = tokenLists.getVersionUpgrade(list.current.version, list.pendingUpdate.version); - switch (bump) { - case tokenLists.VersionUpgrade.NONE: - throw new Error('unexpected no version bump'); - case tokenLists.VersionUpgrade.PATCH: - case tokenLists.VersionUpgrade.MINOR: - var min = tokenLists.minVersionBump(list.current.tokens, list.pendingUpdate.tokens); - // automatically update minor/patch as long as bump matches the min update - if (bump >= min) { - dispatch(acceptListUpdate(listUrl)); - } - else { - console.error("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"); - } - break; - // update any active or inactive lists - case tokenLists.VersionUpgrade.MAJOR: - dispatch(acceptListUpdate(listUrl)); + var ethereum = window.ethereum; + if (ethereum && ethereum.on && !active && !error && !suppress) { + var handleChainChanged_1 = function () { + // eat errors + activate(injected, undefined, true).catch(function (error) { + console.error('Failed to activate after chain changed', error); + }); + }; + var handleAccountsChanged_1 = function (accounts) { + if (accounts.length > 0) { + // eat errors + activate(injected, undefined, true).catch(function (error) { + console.error('Failed to activate after accounts changed', error); + }); } - } - }); - }, [dispatch, lists, activeListUrls]); - return null; + }; + ethereum.on('chainChanged', handleChainChanged_1); + ethereum.on('accountsChanged', handleAccountsChanged_1); + return function () { + if (ethereum.removeListener) { + ethereum.removeListener('chainChanged', handleChainChanged_1); + ethereum.removeListener('accountsChanged', handleAccountsChanged_1); + } + }; + } + return undefined; + }, [active, error, suppress, activate]); } -function Updater$3() { +var MessageWrapper = styled__default["default"].div(templateObject_1$H || (templateObject_1$H = __makeTemplateObject(["\n display: flex;\n align-items: center;\n justify-content: center;\n height: 20rem;\n"], ["\n display: flex;\n align-items: center;\n justify-content: center;\n height: 20rem;\n"]))); +var Message = styled__default["default"].h2(templateObject_2$s || (templateObject_2$s = __makeTemplateObject(["\n color: ", ";\n"], ["\n color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.secondary1; +}); +function Web3ReactManager(_a) { + var children = _a.children; + var active = core.useWeb3React().active; + var _b = core.useWeb3React(NetworkContextName), networkActive = _b.active, networkError = _b.error, activateNetwork = _b.activate; + // try to eagerly connect to an injected provider, if it exists and has granted access already + var triedEager = useEagerConnect(); + // after eagerly trying injected, if the network connect ever isn't active or in an error state, activate itd + React.useEffect(function () { + if (triedEager && !networkActive && !networkError && !active) { + activateNetwork(network); + } + }, [triedEager, networkActive, networkError, activateNetwork, active]); + // when there's no account connected, react to logins (broadly speaking) on the injected provider, if it exists + useInactiveListener(!triedEager); + // if the account context isn't active, and there's an error on the network context, it's an irrecoverable error + if (triedEager && !active && networkError) { + return (jsxRuntime.jsx(MessageWrapper, { children: jsxRuntime.jsx(Message, { children: jsxRuntime.jsx(macro.Trans, { children: "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device." }, void 0) }, void 0) }, void 0)); + } + return children; +} +var templateObject_1$H, templateObject_2$s; + +function DarkModeQueryParamReader(_a) { + var search = _a.location.search; var dispatch = useAppDispatch(); - var state = useAppSelector(function (state) { return state.logs; }); - var _a = useActiveWeb3React(), chainId = _a.chainId, library = _a.library; - var blockNumber = useBlockNumber(); - var filtersNeedFetch = React.useMemo(function () { - if (!chainId || typeof blockNumber !== 'number') - return []; - var active = state[chainId]; - if (!active) - return []; - return Object.keys(active) - .filter(function (key) { - var _a = active[key], fetchingBlockNumber = _a.fetchingBlockNumber, results = _a.results, listeners = _a.listeners; - if (listeners === 0) - return false; - if (typeof fetchingBlockNumber === 'number' && fetchingBlockNumber >= blockNumber) - return false; - if (results && typeof results.blockNumber === 'number' && results.blockNumber >= blockNumber) - return false; - return true; - }) - .map(function (key) { return keyToFilter(key); }); - }, [blockNumber, chainId, state]); React.useEffect(function () { - if (!library || !chainId || typeof blockNumber !== 'number' || filtersNeedFetch.length === 0) + if (!search) return; - dispatch(fetchingLogs({ chainId: chainId, filters: filtersNeedFetch, blockNumber: blockNumber })); - filtersNeedFetch.forEach(function (filter) { - library - .getLogs(__assign(__assign({}, filter), { fromBlock: 0, toBlock: blockNumber })) - .then(function (logs) { - dispatch(fetchedLogs({ - chainId: chainId, - filter: filter, - results: { logs: logs, blockNumber: blockNumber }, - })); - }) - .catch(function (error) { - console.error('Failed to get logs', filter, error); - dispatch(fetchedLogsError({ - chainId: chainId, - filter: filter, - blockNumber: blockNumber, - })); - }); + if (search.length < 2) + return; + var parsed = qs.parse(search, { + parseArrays: false, + ignoreQueryPrefix: true, }); - }, [blockNumber, chainId, dispatch, filtersNeedFetch, library]); + var theme = parsed.theme; + if (typeof theme !== 'string') + return; + if (theme.toLowerCase() === 'light') { + dispatch(updateUserDarkMode({ userDarkMode: false })); + } + else if (theme.toLowerCase() === 'dark') { + dispatch(updateUserDarkMode({ userDarkMode: true })); + } + }, [dispatch, search]); return null; } -function wait(ms) { - return new Promise(function (resolve) { return setTimeout(resolve, ms); }); +var _a$2, _b$1, _c$1, _d$1; +var L2Icon = styled__default["default"].img(templateObject_1$G || (templateObject_1$G = __makeTemplateObject(["\n width: 24px;\n height: 24px;\n margin-right: 16px;\n"], ["\n width: 24px;\n height: 24px;\n margin-right: 16px;\n"]))); +styled__default["default"].div(templateObject_2$r || (templateObject_2$r = __makeTemplateObject(["\n align-items: center;\n display: flex;\n justify-content: flex-start;\n padding: 0 20px 20px 20px;\n"], ["\n align-items: center;\n display: flex;\n justify-content: flex-start;\n padding: 0 20px 20px 20px;\n"]))); +var BodyText = styled__default["default"].div(templateObject_3$m || (templateObject_3$m = __makeTemplateObject(["\n color: ", ";\n display: flex;\n align-items: center;\n justify-content: flex-start;\n margin: 8px;\n font-size: 14px;\n"], ["\n color: ", ";\n display: flex;\n align-items: center;\n justify-content: flex-start;\n margin: 8px;\n font-size: 14px;\n"])), function (_a) { + var color = _a.color; + return color; +}); +var RootWrapper = styled__default["default"].div(templateObject_4$d || (templateObject_4$d = __makeTemplateObject(["\n position: relative;\n margin-top: 16px;\n"], ["\n position: relative;\n margin-top: 16px;\n"]))); +var SHOULD_SHOW_ALERT = (_a$2 = {}, + _a$2[SupportedChainId.OPTIMISM] = true, + _a$2[SupportedChainId.OPTIMISTIC_KOVAN] = true, + _a$2[SupportedChainId.ARBITRUM_ONE] = true, + _a$2[SupportedChainId.ARBITRUM_RINKEBY] = true, + _a$2[SupportedChainId.POLYGON] = true, + _a$2[SupportedChainId.POLYGON_MUMBAI] = true, + _a$2); +var BG_COLORS_BY_DARK_MODE_AND_CHAIN_ID = { + dark: (_b$1 = {}, + _b$1[SupportedChainId.POLYGON] = 'radial-gradient(100% 93.36% at 0% 6.64%, rgba(160, 108, 247, 0.1) 0%, rgba(82, 32, 166, 0.1) 100%)', + _b$1[SupportedChainId.POLYGON_MUMBAI] = 'radial-gradient(100% 93.36% at 0% 6.64%, rgba(160, 108, 247, 0.1) 0%, rgba(82, 32, 166, 0.1) 100%)', + _b$1[SupportedChainId.OPTIMISM] = 'radial-gradient(948% 292% at 42% 0%, rgba(255, 58, 212, 0.01) 0%, rgba(255, 255, 255, 0.04) 100%),radial-gradient(98% 96% at 2% 0%, rgba(255, 39, 39, 0.01) 0%, rgba(235, 0, 255, 0.01) 96%)', + _b$1[SupportedChainId.OPTIMISTIC_KOVAN] = 'radial-gradient(948% 292% at 42% 0%, rgba(255, 58, 212, 0.04) 0%, rgba(255, 255, 255, 0.04) 100%),radial-gradient(98% 96% at 2% 0%, rgba(255, 39, 39, 0.04) 0%, rgba(235, 0, 255, 0.01 96%)', + _b$1[SupportedChainId.ARBITRUM_ONE] = 'radial-gradient(285% 8200% at 30% 50%, rgba(40, 160, 240, 0.01) 0%, rgba(219, 255, 0, 0) 100%),radial-gradient(75% 75% at 0% 0%, rgba(150, 190, 220, 0.05) 0%, rgba(33, 114, 229, 0.05) 100%), hsla(0, 0%, 100%, 0.05)', + _b$1[SupportedChainId.ARBITRUM_RINKEBY] = 'radial-gradient(285% 8200% at 30% 50%, rgba(40, 160, 240, 0.05) 0%, rgba(219, 255, 0, 0) 100%),radial-gradient(75% 75% at 0% 0%, rgba(150, 190, 220, 0.05) 0%, rgba(33, 114, 229, 0.1) 100%), hsla(0, 0%, 100%, 0.05)', + _b$1), + light: (_c$1 = {}, + _c$1[SupportedChainId.POLYGON] = 'radial-gradient(182.71% 205.59% at 2.81% 7.69%, rgba(130, 71, 229, 0.2) 0%, rgba(167, 202, 255, 0.2) 100%)', + _c$1[SupportedChainId.POLYGON_MUMBAI] = 'radial-gradient(182.71% 205.59% at 2.81% 7.69%, rgba(130, 71, 229, 0.2) 0%, rgba(167, 202, 255, 0.2) 100%)', + _c$1[SupportedChainId.OPTIMISM] = 'radial-gradient(92% 105% at 50% 7%, rgba(255, 58, 212, 0.04) 0%, rgba(255, 255, 255, 0.03) 100%),radial-gradient(100% 97% at 0% 12%, rgba(235, 0, 255, 0.1) 0%, rgba(243, 19, 19, 0.1) 100%), hsla(0, 0%, 100%, 0.1)', + _c$1[SupportedChainId.OPTIMISTIC_KOVAN] = 'radial-gradient(92% 105% at 50% 7%, rgba(255, 58, 212, 0.04) 0%, rgba(255, 255, 255, 0.03) 100%),radial-gradient(100% 97% at 0% 12%, rgba(235, 0, 255, 0.1) 0%, rgba(243, 19, 19, 0.1) 100%), hsla(0, 0%, 100%, 0.1)', + _c$1[SupportedChainId.ARBITRUM_ONE] = 'radial-gradient(285% 8200% at 30% 50%, rgba(40, 160, 240, 0.1) 0%, rgba(219, 255, 0, 0) 100%),radial-gradient(circle at top left, hsla(206, 50%, 75%, 0.01), hsla(215, 79%, 51%, 0.12)), hsla(0, 0%, 100%, 0.1)', + _c$1[SupportedChainId.ARBITRUM_RINKEBY] = 'radial-gradient(285% 8200% at 30% 50%, rgba(40, 160, 240, 0.1) 0%, rgba(219, 255, 0, 0) 100%),radial-gradient(circle at top left, hsla(206, 50%, 75%, 0.01), hsla(215, 79%, 51%, 0.12)), hsla(0, 0%, 100%, 0.1)', + _c$1), +}; +var ContentWrapper$1 = styled__default["default"].div(templateObject_5$c || (templateObject_5$c = __makeTemplateObject(["\n background: ", ";\n border-radius: 20px;\n display: flex;\n flex-direction: row;\n overflow: hidden;\n position: relative;\n width: 100%;\n\n :before {\n background-image: url(", ");\n background-repeat: no-repeat;\n background-size: 300px;\n content: '';\n height: 300px;\n opacity: 0.1;\n position: absolute;\n transform: rotate(25deg) translate(-90px, -40px);\n width: 300px;\n z-index: -1;\n }\n"], ["\n background: ", ";\n border-radius: 20px;\n display: flex;\n flex-direction: row;\n overflow: hidden;\n position: relative;\n width: 100%;\n\n :before {\n background-image: url(", ");\n background-repeat: no-repeat;\n background-size: 300px;\n content: '';\n height: 300px;\n opacity: 0.1;\n position: absolute;\n transform: rotate(25deg) translate(-90px, -40px);\n width: 300px;\n z-index: -1;\n }\n"])), function (_a) { + var chainId = _a.chainId, darkMode = _a.darkMode; + return BG_COLORS_BY_DARK_MODE_AND_CHAIN_ID[darkMode ? 'dark' : 'light'][chainId]; +}, function (_a) { + var logoUrl = _a.logoUrl; + return logoUrl; +}); +var Header$1 = styled__default["default"].h2(templateObject_6$8 || (templateObject_6$8 = __makeTemplateObject(["\n font-weight: 600;\n font-size: 16px;\n margin: 0;\n"], ["\n font-weight: 600;\n font-size: 16px;\n margin: 0;\n"]))); +var LinkOutToBridge = styled__default["default"](ExternalLink)(templateObject_7$7 || (templateObject_7$7 = __makeTemplateObject(["\n align-items: center;\n border-radius: 8px;\n color: white;\n display: flex;\n font-size: 16px;\n justify-content: space-between;\n padding: 6px 8px;\n margin-right: 12px;\n text-decoration: none !important;\n width: 100%;\n"], ["\n align-items: center;\n border-radius: 8px;\n color: white;\n display: flex;\n font-size: 16px;\n justify-content: space-between;\n padding: 6px 8px;\n margin-right: 12px;\n text-decoration: none !important;\n width: 100%;\n"]))); +var StyledArrowUpRight = styled__default["default"](reactFeather.ArrowUpRight)(templateObject_8$5 || (templateObject_8$5 = __makeTemplateObject(["\n margin-left: 12px;\n width: 24px;\n height: 24px;\n"], ["\n margin-left: 12px;\n width: 24px;\n height: 24px;\n"]))); +var TEXT_COLORS = (_d$1 = {}, + _d$1[SupportedChainId.POLYGON] = 'rgba(130, 71, 229)', + _d$1[SupportedChainId.POLYGON_MUMBAI] = 'rgba(130, 71, 229)', + _d$1[SupportedChainId.OPTIMISM] = '#ff3856', + _d$1[SupportedChainId.OPTIMISTIC_KOVAN] = '#ff3856', + _d$1[SupportedChainId.ARBITRUM_ONE] = '#0490ed', + _d$1[SupportedChainId.ARBITRUM_RINKEBY] = '#0490ed', + _d$1); +function shouldShowAlert(chainId) { + return Boolean(chainId && SHOULD_SHOW_ALERT[chainId]); } -function waitRandom(min, max) { - return wait(min + Math.round(Math.random() * Math.max(0, max - min))); +function NetworkAlert() { + var chainId = useActiveWeb3React().chainId; + var _a = __read(useDarkModeManager(), 1), darkMode = _a[0]; + if (!shouldShowAlert(chainId)) { + return null; + } + var _b = CHAIN_INFO[chainId], label = _b.label, logoUrl = _b.logoUrl, bridge = _b.bridge; + var textColor = TEXT_COLORS[chainId]; + return bridge ? (jsxRuntime.jsx(RootWrapper, { children: jsxRuntime.jsx(ContentWrapper$1, __assign({ chainId: chainId, darkMode: darkMode, logoUrl: logoUrl }, { children: jsxRuntime.jsxs(LinkOutToBridge, __assign({ href: bridge }, { children: [jsxRuntime.jsxs(BodyText, __assign({ color: textColor }, { children: [jsxRuntime.jsx(L2Icon, { src: logoUrl }, void 0), jsxRuntime.jsxs(AutoRow, { children: [jsxRuntime.jsx(Header$1, { children: jsxRuntime.jsxs(macro.Trans, { children: [label, " token bridge"] }, void 0) }, void 0), jsxRuntime.jsx(HideSmall, { children: jsxRuntime.jsxs(macro.Trans, { children: ["Deposit tokens to the ", label, " network."] }, void 0) }, void 0)] }, void 0)] }), void 0), jsxRuntime.jsx(StyledArrowUpRight, { color: textColor }, void 0)] }), void 0) }), void 0) }, void 0)) : null; +} +var templateObject_1$G, templateObject_2$r, templateObject_3$m, templateObject_4$d, templateObject_5$c, templateObject_6$8, templateObject_7$7, templateObject_8$5; + +/** + * @param open conditional to show content or hide + * @returns Wrapper to smoothly hide and expand content + */ +function AnimatedDropdown(_a) { + var open = _a.open, children = _a.children; + var _b = useResizeObserver__default["default"](), ref = _b.ref, height = _b.height; + var props = reactSpring.useSpring({ + height: open ? height !== null && height !== void 0 ? height : 0 : 0, + config: { + mass: 1.2, + tension: 300, + friction: 20, + clamp: true, + velocity: 0.01, + }, + }); + return (jsxRuntime.jsx(reactSpring.animated.div, __assign({ style: __assign(__assign({}, props), { overflow: 'hidden', width: '100%', willChange: 'height' }) }, { children: jsxRuntime.jsx("div", __assign({ ref: ref }, { children: children }), void 0) }), void 0)); +} + +var THIRTY_BIPS_FEE = new sdkCore.Percent(JSBI__default["default"].BigInt(30), JSBI__default["default"].BigInt(10000)); +var INPUT_FRACTION_AFTER_FEE = ONE_HUNDRED_PERCENT.subtract(THIRTY_BIPS_FEE); +// computes realized lp fee as a percent +function computeRealizedLPFeePercent(trade) { + var e_1, _a; + var percent; + // Since routes are either all v2 or all v3 right now, calculate separately + if (trade.swaps[0].route.pools instanceof v2Sdk.Pair) { + // for each hop in our trade, take away the x*y=k price impact from 0.3% fees + // e.g. for 3 tokens/2 hops: 1 - ((1 - .03) * (1-.03)) + percent = ONE_HUNDRED_PERCENT.subtract(trade.swaps.reduce(function (currentFee) { return currentFee.multiply(INPUT_FRACTION_AFTER_FEE); }, ONE_HUNDRED_PERCENT)); + } + else { + percent = ZERO_PERCENT; + try { + for (var _b = __values(trade.swaps), _c = _b.next(); !_c.done; _c = _b.next()) { + var swap = _c.value; + var _d = swap.inputAmount.divide(trade.inputAmount), numerator = _d.numerator, denominator = _d.denominator; + var overallPercent = new sdkCore.Percent(numerator, denominator); + var routeRealizedLPFeePercent = overallPercent.multiply(ONE_HUNDRED_PERCENT.subtract(swap.route.pools.reduce(function (currentFee, pool) { + var fee = pool instanceof v2Sdk.Pair + ? // not currently possible given protocol check above, but not fatal + v3Sdk.FeeAmount.MEDIUM + : pool.fee; + return currentFee.multiply(ONE_HUNDRED_PERCENT.subtract(new sdkCore.Fraction(fee, 1000000))); + }, ONE_HUNDRED_PERCENT))); + percent = percent.add(routeRealizedLPFeePercent); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_1) throw e_1.error; } + } + } + return new sdkCore.Percent(percent.numerator, percent.denominator); +} +var IMPACT_TIERS = [ + BLOCKED_PRICE_IMPACT_NON_EXPERT, + ALLOWED_PRICE_IMPACT_HIGH, + ALLOWED_PRICE_IMPACT_MEDIUM, + ALLOWED_PRICE_IMPACT_LOW, +]; +function warningSeverity(priceImpact) { + var e_2, _a; + if (!priceImpact) + return 4; + var impact = IMPACT_TIERS.length; + try { + for (var IMPACT_TIERS_1 = __values(IMPACT_TIERS), IMPACT_TIERS_1_1 = IMPACT_TIERS_1.next(); !IMPACT_TIERS_1_1.done; IMPACT_TIERS_1_1 = IMPACT_TIERS_1.next()) { + var impactLevel = IMPACT_TIERS_1_1.value; + if (impactLevel.lessThan(priceImpact)) + return impact; + impact--; + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (IMPACT_TIERS_1_1 && !IMPACT_TIERS_1_1.done && (_a = IMPACT_TIERS_1.return)) _a.call(IMPACT_TIERS_1); + } + finally { if (e_2) throw e_2.error; } + } + return 0; +} + +/** + * Formatted version of price impact text with warning colors + */ +function FormattedPriceImpact(_a) { + var priceImpact = _a.priceImpact; + return (jsxRuntime.jsx(ErrorText, __assign({ fontWeight: 500, fontSize: 14, severity: warningSeverity(priceImpact) }, { children: priceImpact ? priceImpact.multiply(-1).toFixed(2) + "%" : '-' }), void 0)); +} + +var StyledCard$1 = styled__default["default"](Card)(templateObject_1$F || (templateObject_1$F = __makeTemplateObject(["\n padding: 0;\n"], ["\n padding: 0;\n"]))); +function TextWithLoadingPlaceholder(_a) { + var syncing = _a.syncing, width = _a.width, children = _a.children; + return syncing ? (jsxRuntime.jsx(LoadingRows, { children: jsxRuntime.jsx("div", { style: { height: '15px', width: width + "px" } }, void 0) }, void 0)) : (children); +} +function AdvancedSwapDetails(_a) { + var trade = _a.trade, allowedSlippage = _a.allowedSlippage, _b = _a.syncing, syncing = _b === void 0 ? false : _b; + var theme = React.useContext(styled.ThemeContext); + var chainId = useActiveWeb3React().chainId; + var _c = React.useMemo(function () { + if (!trade) + return { expectedOutputAmount: undefined, priceImpact: undefined }; + var expectedOutputAmount = trade.outputAmount; + var realizedLpFeePercent = computeRealizedLPFeePercent(trade); + var priceImpact = trade.priceImpact.subtract(realizedLpFeePercent); + return { expectedOutputAmount: expectedOutputAmount, priceImpact: priceImpact }; + }, [trade]), expectedOutputAmount = _c.expectedOutputAmount, priceImpact = _c.priceImpact; + return !trade ? null : (jsxRuntime.jsx(StyledCard$1, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "8px" }, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(RowFixed, { children: jsxRuntime.jsx(ThemedText.SubHeader, __assign({ color: theme.text1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Expected Output" }, void 0) }), void 0) }, void 0), jsxRuntime.jsx(TextWithLoadingPlaceholder, __assign({ syncing: syncing, width: 65 }, { children: jsxRuntime.jsx(ThemedText.Black, __assign({ textAlign: "right", fontSize: 14 }, { children: expectedOutputAmount + ? expectedOutputAmount.toSignificant(6) + " " + expectedOutputAmount.currency.symbol + : '-' }), void 0) }), void 0)] }, void 0), jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(RowFixed, { children: jsxRuntime.jsx(ThemedText.SubHeader, __assign({ color: theme.text1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Price Impact" }, void 0) }), void 0) }, void 0), jsxRuntime.jsx(TextWithLoadingPlaceholder, __assign({ syncing: syncing, width: 50 }, { children: jsxRuntime.jsx(ThemedText.Black, __assign({ textAlign: "right", fontSize: 14 }, { children: jsxRuntime.jsx(FormattedPriceImpact, { priceImpact: priceImpact }, void 0) }), void 0) }), void 0)] }, void 0), jsxRuntime.jsx(Separator$1, {}, void 0), jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(RowFixed, __assign({ style: { marginRight: '20px' } }, { children: jsxRuntime.jsxs(ThemedText.SubHeader, __assign({ color: theme.text3 }, { children: [trade.tradeType === sdkCore.TradeType.EXACT_INPUT ? (jsxRuntime.jsx(macro.Trans, { children: "Minimum received" }, void 0)) : (jsxRuntime.jsx(macro.Trans, { children: "Maximum sent" }, void 0)), ' ', jsxRuntime.jsx(macro.Trans, { children: "after slippage" }, void 0), " (", allowedSlippage.toFixed(2), "%)"] }), void 0) }), void 0), jsxRuntime.jsx(TextWithLoadingPlaceholder, __assign({ syncing: syncing, width: 70 }, { children: jsxRuntime.jsx(ThemedText.Black, __assign({ textAlign: "right", fontSize: 14, color: theme.text3 }, { children: trade.tradeType === sdkCore.TradeType.EXACT_INPUT + ? trade.minimumAmountOut(allowedSlippage).toSignificant(6) + " " + trade.outputAmount.currency.symbol + : trade.maximumAmountIn(allowedSlippage).toSignificant(6) + " " + trade.inputAmount.currency.symbol }), void 0) }), void 0)] }, void 0), !(trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) || !chainId || !SUPPORTED_GAS_ESTIMATE_CHAIN_IDS.includes(chainId) ? null : (jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(ThemedText.SubHeader, __assign({ color: theme.text3 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Network Fee" }, void 0) }), void 0), jsxRuntime.jsx(TextWithLoadingPlaceholder, __assign({ syncing: syncing, width: 50 }, { children: jsxRuntime.jsxs(ThemedText.Black, __assign({ textAlign: "right", fontSize: 14, color: theme.text3 }, { children: ["~$", trade.gasUseEstimateUSD.toFixed(2)] }), void 0) }), void 0)] }, void 0))] }), void 0) }, void 0)); +} +var templateObject_1$F; + +var _path$3, _line$1, _line2, _path2; + +function _extends$4() { _extends$4 = 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$4.apply(this, arguments); } + +var SvgGasIcon = function SvgGasIcon(props) { + return /*#__PURE__*/React__namespace.createElement("svg", _extends$4({ + width: 16, + height: 16, + viewBox: "0 0 16 16", + fill: "none", + xmlns: "http://www.w3.org/2000/svg" + }, props), _path$3 || (_path$3 = /*#__PURE__*/React__namespace.createElement("path", { + d: "M10.0047 9.26921H10.2714C11.0078 9.26921 11.6047 9.86617 11.6047 10.6025V12.1359C11.6047 12.7987 12.142 13.3359 12.8047 13.3359C13.4675 13.3359 14.0047 12.7995 14.0047 12.1367V5.22059C14.0047 4.86697 13.7758 4.56227 13.5258 4.31223L10.6714 1.33594M4.00472 2.00254H8.00472C8.7411 2.00254 9.33805 2.59949 9.33805 3.33587V14.0015H2.67139V3.33587C2.67139 2.59949 3.26834 2.00254 4.00472 2.00254ZM14.0047 5.33587C14.0047 6.07225 13.4078 6.66921 12.6714 6.66921C11.935 6.66921 11.3381 6.07225 11.3381 5.33587C11.3381 4.59949 11.935 4.00254 12.6714 4.00254C13.4078 4.00254 14.0047 4.59949 14.0047 5.33587Z", + stroke: "white" + })), _line$1 || (_line$1 = /*#__PURE__*/React__namespace.createElement("line", { + x1: 4, + y1: 9.99414, + x2: 8, + y2: 9.99414, + stroke: "white" + })), _line2 || (_line2 = /*#__PURE__*/React__namespace.createElement("line", { + x1: 4, + y1: 11.9941, + x2: 8, + y2: 11.9941, + stroke: "white" + })), _path2 || (_path2 = /*#__PURE__*/React__namespace.createElement("path", { + d: "M4 8.16113H8", + stroke: "white" + }))); +}; + +var BadgeVariant; +(function (BadgeVariant) { + BadgeVariant["DEFAULT"] = "DEFAULT"; + BadgeVariant["NEGATIVE"] = "NEGATIVE"; + BadgeVariant["POSITIVE"] = "POSITIVE"; + BadgeVariant["PRIMARY"] = "PRIMARY"; + BadgeVariant["WARNING"] = "WARNING"; + BadgeVariant["WARNING_OUTLINE"] = "WARNING_OUTLINE"; +})(BadgeVariant || (BadgeVariant = {})); +function pickBackgroundColor(variant, theme) { + switch (variant) { + case BadgeVariant.NEGATIVE: + return theme.error; + case BadgeVariant.POSITIVE: + return theme.success; + case BadgeVariant.PRIMARY: + return theme.primary1; + case BadgeVariant.WARNING: + return theme.warning; + case BadgeVariant.WARNING_OUTLINE: + return 'transparent'; + default: + return theme.bg2; + } } -/** - * This error is thrown if the function is cancelled before completing - */ -var CancelledError = /** @class */ (function (_super) { - __extends(CancelledError, _super); - function CancelledError() { - var _this = _super.call(this, 'Cancelled') || this; - _this.isCancelledError = true; - return _this; +function pickBorder(variant, theme) { + switch (variant) { + case BadgeVariant.WARNING_OUTLINE: + return "1px solid " + theme.warning; + default: + return 'unset'; } - return CancelledError; -}(Error)); -/** - * Throw this error if the function should retry - */ -var RetryableError = /** @class */ (function (_super) { - __extends(RetryableError, _super); - function RetryableError() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.isRetryableError = true; - return _this; +} +function pickFontColor(variant, theme) { + switch (variant) { + case BadgeVariant.NEGATIVE: + return polished.readableColor(theme.error); + case BadgeVariant.POSITIVE: + return polished.readableColor(theme.success); + case BadgeVariant.WARNING: + return polished.readableColor(theme.warning); + case BadgeVariant.WARNING_OUTLINE: + return theme.warning; + default: + return polished.readableColor(theme.bg2); } - return RetryableError; -}(Error)); +} +var Badge = styled__default["default"].div(templateObject_1$E || (templateObject_1$E = __makeTemplateObject(["\n align-items: center;\n background-color: ", ";\n border: ", ";\n border-radius: 0.5rem;\n color: ", ";\n display: inline-flex;\n padding: 4px 6px;\n justify-content: center;\n font-weight: 500;\n"], ["\n align-items: center;\n background-color: ", ";\n border: ", ";\n border-radius: 0.5rem;\n color: ", ";\n display: inline-flex;\n padding: 4px 6px;\n justify-content: center;\n font-weight: 500;\n"])), function (_a) { + var theme = _a.theme, variant = _a.variant; + return pickBackgroundColor(variant, theme); +}, function (_a) { + var theme = _a.theme, variant = _a.variant; + return pickBorder(variant, theme); +}, function (_a) { + var theme = _a.theme, variant = _a.variant; + return pickFontColor(variant, theme); +}); +var templateObject_1$E; + /** - * Retries the function that returns the promise until the promise successfully resolves up to n retries - * @param fn function to retry - * @param n how many times to retry - * @param minWait min wait between retries in ms - * @param maxWait max wait between retries in ms + * Does a lookup for an ENS name to find its contenthash. */ -function retry(fn, _a) { - var _this = this; - var n = _a.n, minWait = _a.minWait, maxWait = _a.maxWait; - var completed = false; - var rejectCancelled; - var promise = new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () { - var result, error_1; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - rejectCancelled = reject; - _a.label = 1; - case 1: - result = void 0; - _a.label = 2; - case 2: - _a.trys.push([2, 4, , 5]); - return [4 /*yield*/, fn()]; - case 3: - result = _a.sent(); - if (!completed) { - resolve(result); - completed = true; - } - return [3 /*break*/, 7]; - case 4: - error_1 = _a.sent(); - if (completed) { - return [3 /*break*/, 7]; - } - if (n <= 0 || !error_1.isRetryableError) { - reject(error_1); - completed = true; - return [3 /*break*/, 7]; - } - n--; - return [3 /*break*/, 5]; - case 5: return [4 /*yield*/, waitRandom(minWait, maxWait)]; - case 6: - _a.sent(); - return [3 /*break*/, 1]; - case 7: return [2 /*return*/]; - } +function useENSContentHash(ensName) { + var _a; + var ensNodeArgument = React.useMemo(function () { return [ensName === null ? undefined : safeNamehash(ensName)]; }, [ensName]); + var registrarContract = useENSRegistrarContract(false); + var resolverAddressResult = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument); + var resolverAddress = (_a = resolverAddressResult.result) === null || _a === void 0 ? void 0 : _a[0]; + var resolverContract = useENSResolverContract(resolverAddress && isZero(resolverAddress) ? undefined : resolverAddress, false); + var contenthash = useSingleCallResult(resolverContract, 'contenthash', ensNodeArgument); + return React.useMemo(function () { + var _a, _b; + return ({ + contenthash: (_b = (_a = contenthash.result) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : null, + loading: resolverAddressResult.loading || contenthash.loading, }); - }); }); - return { - promise: promise, - cancel: function () { - if (completed) - return; - completed = true; - rejectCancelled(new CancelledError()); - }, - }; + }, [contenthash.loading, contenthash.result, resolverAddressResult.loading]); } -var _a; -function shouldCheck(lastBlockNumber, tx) { - if (tx.receipt) - return false; - if (!tx.lastCheckedBlockNumber) - return true; - var blocksSinceCheck = lastBlockNumber - tx.lastCheckedBlockNumber; - if (blocksSinceCheck < 1) - return false; - var minutesPending = (new Date().getTime() - tx.addedTime) / ms__default["default"](templateObject_1 || (templateObject_1 = __makeTemplateObject(["1m"], ["1m"]))); - if (minutesPending > 60) { - // every 10 blocks if pending longer than an hour - return blocksSinceCheck > 9; +function useHttpLocations(uri) { + var ens = React.useMemo(function () { return (uri ? parseENSAddress(uri) : undefined); }, [uri]); + var resolvedContentHash = useENSContentHash(ens === null || ens === void 0 ? void 0 : ens.ensName); + return React.useMemo(function () { + if (ens) { + return resolvedContentHash.contenthash ? uriToHttp(contenthashToUri(resolvedContentHash.contenthash)) : []; + } + else { + return uri ? uriToHttp(uri) : []; + } + }, [ens, resolvedContentHash.contenthash, uri]); +} + +var MaticLogo = "data:image/svg+xml,%3Csvg%20width%3D%221024%22%20height%3D%221024%22%20viewBox%3D%220%200%201024%201024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Ccircle%20cx%3D%22512%22%20cy%3D%22512%22%20r%3D%22512%22%20fill%3D%22%238247E5%22%2F%3E%3Cpath%20d%3D%22M681.469%20402.456C669.189%20395.312%20653.224%20395.312%20639.716%20402.456L543.928%20457.228L478.842%20492.949L383.055%20547.721C370.774%20554.865%20354.81%20554.865%20341.301%20547.721L265.162%20504.856C252.882%20497.712%20244.286%20484.614%20244.286%20470.325V385.786C244.286%20371.498%20251.654%20358.4%20265.162%20351.256L340.073%20309.581C352.353%20302.437%20368.318%20302.437%20381.827%20309.581L456.737%20351.256C469.018%20358.4%20477.614%20371.498%20477.614%20385.786V440.558L542.7%20403.646V348.874C542.7%20334.586%20535.332%20321.488%20521.824%20314.344L383.055%20235.758C370.774%20228.614%20354.81%20228.614%20341.301%20235.758L200.076%20314.344C186.567%20321.488%20179.199%20334.586%20179.199%20348.874V507.237C179.199%20521.525%20186.567%20534.623%20200.076%20541.767L341.301%20620.353C353.582%20627.498%20369.546%20627.498%20383.055%20620.353L478.842%20566.772L543.928%20529.86L639.716%20476.279C651.996%20469.135%20667.961%20469.135%20681.469%20476.279L756.38%20517.953C768.66%20525.098%20777.257%20538.195%20777.257%20552.484V637.023C777.257%20651.312%20769.888%20664.409%20756.38%20671.553L681.469%20714.419C669.189%20721.563%20653.224%20721.563%20639.716%20714.419L564.805%20672.744C552.525%20665.6%20543.928%20652.502%20543.928%20638.214V583.442L478.842%20620.353V675.125C478.842%20689.414%20486.21%20702.512%20499.719%20709.656L640.944%20788.242C653.224%20795.386%20669.189%20795.386%20682.697%20788.242L823.922%20709.656C836.203%20702.512%20844.799%20689.414%20844.799%20675.125V516.763C844.799%20502.474%20837.431%20489.377%20823.922%20482.232L681.469%20402.456Z%22%20fill%3D%22white%22%2F%3E%3C%2Fsvg%3E"; + +function chainIdToNetworkName(networkId) { + switch (networkId) { + case SupportedChainId.MAINNET: + return 'ethereum'; + case SupportedChainId.ARBITRUM_ONE: + return 'arbitrum'; + case SupportedChainId.OPTIMISM: + return 'optimism'; + default: + return 'ethereum'; } - else if (minutesPending > 5) { - // every 3 blocks if pending longer than 5 minutes - return blocksSinceCheck > 2; +} +function getNativeLogoURI(chainId) { + if (chainId === void 0) { chainId = SupportedChainId.MAINNET; } + switch (chainId) { + case SupportedChainId.POLYGON_MUMBAI: + case SupportedChainId.POLYGON: + return MaticLogo; + default: + return EthereumLogo; } - else { - // otherwise every block - return true; +} +function getTokenLogoURI(address, chainId) { + if (chainId === void 0) { chainId = SupportedChainId.MAINNET; } + var networkName = chainIdToNetworkName(chainId); + var networksWithUrls = [SupportedChainId.ARBITRUM_ONE, SupportedChainId.MAINNET, SupportedChainId.OPTIMISM]; + if (networksWithUrls.includes(chainId)) { + return "https://raw.githubusercontent.com/Uniswap/assets/master/blockchains/" + networkName + "/assets/" + address + "/logo.png"; } } -var RETRY_OPTIONS_BY_CHAIN_ID = (_a = {}, - _a[SupportedChainId.ARBITRUM_ONE] = { n: 10, minWait: 250, maxWait: 1000 }, - _a[SupportedChainId.ARBITRUM_RINKEBY] = { n: 10, minWait: 250, maxWait: 1000 }, - _a[SupportedChainId.OPTIMISTIC_KOVAN] = { n: 10, minWait: 250, maxWait: 1000 }, - _a[SupportedChainId.OPTIMISM] = { n: 10, minWait: 250, maxWait: 1000 }, - _a); -var DEFAULT_RETRY_OPTIONS = { n: 1, minWait: 0, maxWait: 0 }; -function Updater$2(_a) { - var pendingTransactions = _a.pendingTransactions, onCheck = _a.onCheck, onReceipt = _a.onReceipt; - var _b = useActiveWeb3React(), chainId = _b.chainId, library = _b.library; - var lastBlockNumber = useBlockNumber(); - var fastForwardBlockNumber = useFastForwardBlockNumber(); - var getReceipt = React.useCallback(function (hash) { - var _a; - if (!library || !chainId) - throw new Error('No library or chainId'); - var retryOptions = (_a = RETRY_OPTIONS_BY_CHAIN_ID[chainId]) !== null && _a !== void 0 ? _a : DEFAULT_RETRY_OPTIONS; - return retry(function () { - return library.getTransactionReceipt(hash).then(function (receipt) { - if (receipt === null) { - console.debug("Retrying tranasaction receipt for " + hash); - throw new RetryableError(); - } - return receipt; - }); - }, retryOptions); - }, [chainId, library]); - React.useEffect(function () { - if (!chainId || !library || !lastBlockNumber) - return; - var cancels = Object.keys(pendingTransactions) - .filter(function (hash) { return shouldCheck(lastBlockNumber, pendingTransactions[hash]); }) - .map(function (hash) { - var _a = getReceipt(hash), promise = _a.promise, cancel = _a.cancel; - promise - .then(function (receipt) { - if (receipt) { - onReceipt({ chainId: chainId, hash: hash, receipt: receipt }); - } - else { - onCheck({ chainId: chainId, hash: hash, blockNumber: lastBlockNumber }); - } - }) - .catch(function (error) { - if (!error.isCancelledError) { - console.warn("Failed to get transaction receipt for " + hash, error); +function useCurrencyLogoURIs(currency) { + var locations = useHttpLocations(currency instanceof WrappedTokenInfo ? currency.logoURI : undefined); + return React.useMemo(function () { + var logoURIs = __spreadArray([], __read(locations), false); + if (currency) { + if (currency.isNative) { + logoURIs.push(getNativeLogoURI(currency.chainId)); + } + else if (currency.isToken) { + var logoURI = getTokenLogoURI(currency.address, currency.chainId); + if (logoURI) { + logoURIs.push(logoURI); } - }); - return cancel; - }); - return function () { - cancels.forEach(function (cancel) { return cancel(); }); - }; - }, [chainId, library, lastBlockNumber, getReceipt, fastForwardBlockNumber, onReceipt, onCheck, pendingTransactions]); - return null; + } + } + return logoURIs; + }, [currency, locations]); +} + +var BAD_SRCS = {}; +/** + * Renders an image by sequentially trying a list of URIs, and then eventually a fallback triangle alert + */ +function Logo(_a) { + var srcs = _a.srcs, alt = _a.alt, style = _a.style, rest = __rest(_a, ["srcs", "alt", "style"]); + var _b = __read(React.useState(0), 2), refresh = _b[1]; + var theme = useTheme(); + var src = srcs.find(function (src) { return !BAD_SRCS[src]; }); + if (src) { + return (jsxRuntime.jsx("img", __assign({}, rest, { alt: alt, src: src, style: style, onError: function () { + if (src) + BAD_SRCS[src] = true; + refresh(function (i) { return i + 1; }); + } }), void 0)); + } + return jsxRuntime.jsx(reactFeather.Slash, __assign({}, rest, { style: __assign(__assign({}, style), { color: theme.bg4 }) }), void 0); +} + +var StyledLogo$1 = styled__default["default"](Logo)(templateObject_1$D || (templateObject_1$D = __makeTemplateObject(["\n width: ", ";\n height: ", ";\n background: radial-gradient(white 50%, #ffffff00 calc(75% + 1px), #ffffff00 100%);\n border-radius: 50%;\n -mox-box-shadow: 0 0 1px ", ";\n -webkit-box-shadow: 0 0 1px ", ";\n box-shadow: 0 0 1px ", ";\n border: 0px solid rgba(255, 255, 255, 0);\n"], ["\n width: ", ";\n height: ", ";\n background: radial-gradient(white 50%, #ffffff00 calc(75% + 1px), #ffffff00 100%);\n border-radius: 50%;\n -mox-box-shadow: 0 0 1px ", ";\n -webkit-box-shadow: 0 0 1px ", ";\n box-shadow: 0 0 1px ", ";\n border: 0px solid rgba(255, 255, 255, 0);\n"])), function (_a) { + var size = _a.size; + return size; +}, function (_a) { + var size = _a.size; + return size; +}, function (_a) { + var native = _a.native; + return (native ? 'white' : 'black'); +}, function (_a) { + var native = _a.native; + return (native ? 'white' : 'black'); +}, function (_a) { + var native = _a.native; + return (native ? 'white' : 'black'); +}); +function CurrencyLogo(_a) { + var _b, _c; + var currency = _a.currency, _d = _a.size, size = _d === void 0 ? '24px' : _d, style = _a.style, rest = __rest(_a, ["currency", "size", "style"]); + var logoURIs = useCurrencyLogoURIs(currency); + return (jsxRuntime.jsx(StyledLogo$1, __assign({ size: size, native: (_b = currency === null || currency === void 0 ? void 0 : currency.isNative) !== null && _b !== void 0 ? _b : false, srcs: logoURIs, alt: ((_c = currency === null || currency === void 0 ? void 0 : currency.symbol) !== null && _c !== void 0 ? _c : 'token') + " logo", style: style }, rest), void 0)); } -var templateObject_1; +var templateObject_1$D; -function Updater$1() { +var Wrapper$c = styled__default["default"].div(templateObject_1$C || (templateObject_1$C = __makeTemplateObject(["\n position: relative;\n display: flex;\n flex-direction: row;\n margin-left: ", ";\n"], ["\n position: relative;\n display: flex;\n flex-direction: row;\n margin-left: ", ";\n"])), function (_a) { + var sizeraw = _a.sizeraw, margin = _a.margin; + return margin && (sizeraw / 3 + 8).toString() + 'px'; +}); +var HigherLogo = styled__default["default"](CurrencyLogo)(templateObject_2$q || (templateObject_2$q = __makeTemplateObject(["\n z-index: 2;\n"], ["\n z-index: 2;\n"]))); +var CoveredLogo = styled__default["default"](CurrencyLogo)(templateObject_3$l || (templateObject_3$l = __makeTemplateObject(["\n position: absolute;\n left: ", " !important;\n"], ["\n position: absolute;\n left: ", " !important;\n"])), function (_a) { + var sizeraw = _a.sizeraw; + return '-' + (sizeraw / 2).toString() + 'px'; +}); +function DoubleCurrencyLogo(_a) { + var currency0 = _a.currency0, currency1 = _a.currency1, _b = _a.size, size = _b === void 0 ? 16 : _b, _c = _a.margin, margin = _c === void 0 ? false : _c; + return (jsxRuntime.jsxs(Wrapper$c, __assign({ sizeraw: size, margin: margin }, { children: [currency0 && jsxRuntime.jsx(HigherLogo, { currency: currency0, size: size.toString() + 'px' }, void 0), currency1 && jsxRuntime.jsx(CoveredLogo, { currency: currency1, size: size.toString() + 'px', sizeraw: size }, void 0)] }), void 0)); +} +var templateObject_1$C, templateObject_2$q, templateObject_3$l; + +/** + * Returns a WrappedTokenInfo from the active token lists when possible, + * or the passed token otherwise. */ +function useTokenInfoFromActiveList(currency) { var chainId = useActiveWeb3React().chainId; - var addPopup = useAddPopup(); - // speed up popup dismisall time if on L2 - var isL2 = Boolean(chainId && L2_CHAIN_IDS.includes(chainId)); - var dispatch = useAppDispatch(); - var onCheck = React.useCallback(function (_a) { - var chainId = _a.chainId, hash = _a.hash, blockNumber = _a.blockNumber; - return dispatch(checkedTransaction({ chainId: chainId, hash: hash, blockNumber: blockNumber })); - }, [dispatch]); - var onReceipt = React.useCallback(function (_a) { - var chainId = _a.chainId, hash = _a.hash, receipt = _a.receipt; - dispatch(finalizeTransaction({ - chainId: chainId, - hash: hash, - receipt: { - blockHash: receipt.blockHash, - blockNumber: receipt.blockNumber, - contractAddress: receipt.contractAddress, - from: receipt.from, - status: receipt.status, - to: receipt.to, - transactionHash: receipt.transactionHash, - transactionIndex: receipt.transactionIndex, - }, - })); - addPopup({ - txn: { hash: hash }, - }, hash, isL2 ? L2_TXN_DISMISS_MS : DEFAULT_TXN_DISMISS_MS); - }, [addPopup, dispatch, isL2]); - var state = useAppSelector(function (state) { return state.transactions; }); - var pendingTransactions = React.useMemo(function () { var _a; return (chainId ? (_a = state[chainId]) !== null && _a !== void 0 ? _a : {} : {}); }, [chainId, state]); - return jsxRuntime.jsx(Updater$2, { pendingTransactions: pendingTransactions, onCheck: onCheck, onReceipt: onReceipt }, void 0); + var activeList = useCombinedActiveList(); + return React.useMemo(function () { + if (!chainId) + return; + if (currency.isNative) + return currency; + try { + return activeList[chainId][currency.wrapped.address].token; + } + catch (e) { + return currency; + } + }, [activeList, chainId, currency]); } -function Updater() { - var dispatch = useAppDispatch(); - // keep dark mode in sync with the system - React.useEffect(function () { - var darkHandler = function (match) { - dispatch(updateMatchesDarkMode({ matchesDarkMode: match.matches })); - }; - var match = window === null || window === void 0 ? void 0 : window.matchMedia('(prefers-color-scheme: dark)'); - dispatch(updateMatchesDarkMode({ matchesDarkMode: match.matches })); - if (match === null || match === void 0 ? void 0 : match.addListener) { - match === null || match === void 0 ? void 0 : match.addListener(darkHandler); - } - else if (match === null || match === void 0 ? void 0 : match.addEventListener) { - match === null || match === void 0 ? void 0 : match.addEventListener('change', darkHandler); +var _line; + +function _extends$3() { _extends$3 = 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$3.apply(this, arguments); } + +var SvgDotLine = function SvgDotLine(props) { + return /*#__PURE__*/React__namespace.createElement("svg", _extends$3({ + width: "100%", + height: 35, + viewBox: "800 0 300 200", + xmlns: "http://www.w3.org/2000/svg" + }, props), _line || (_line = /*#__PURE__*/React__namespace.createElement("line", { + x1: 0, + x2: 2000, + y1: 100, + y2: 100, + stroke: "currentColor", + strokeWidth: 20, + strokeLinecap: "round", + strokeDasharray: "1, 45" + }))); +}; + +var Wrapper$b = styled__default["default"](rebass.Box)(templateObject_1$B || (templateObject_1$B = __makeTemplateObject(["\n align-items: center;\n width: 100%;\n"], ["\n align-items: center;\n width: 100%;\n"]))); +var RouteContainerRow = styled__default["default"](Row$1)(templateObject_2$p || (templateObject_2$p = __makeTemplateObject(["\n display: grid;\n grid-template-columns: 24px 1fr 24px;\n"], ["\n display: grid;\n grid-template-columns: 24px 1fr 24px;\n"]))); +var RouteRow = styled__default["default"](Row$1)(templateObject_3$k || (templateObject_3$k = __makeTemplateObject(["\n align-items: center;\n display: flex;\n justify-content: center;\n padding: 0.1rem 0.5rem;\n position: relative;\n"], ["\n align-items: center;\n display: flex;\n justify-content: center;\n padding: 0.1rem 0.5rem;\n position: relative;\n"]))); +var PoolBadge = styled__default["default"](Badge)(templateObject_4$c || (templateObject_4$c = __makeTemplateObject(["\n display: flex;\n padding: 4px 4px;\n"], ["\n display: flex;\n padding: 4px 4px;\n"]))); +var DottedLine = styled__default["default"].div(templateObject_5$b || (templateObject_5$b = __makeTemplateObject(["\n display: flex;\n align-items: center;\n position: absolute;\n width: calc(100%);\n z-index: 1;\n opacity: 0.5;\n"], ["\n display: flex;\n align-items: center;\n position: absolute;\n width: calc(100%);\n z-index: 1;\n opacity: 0.5;\n"]))); +var DotColor = styled__default["default"](SvgDotLine)(templateObject_6$7 || (templateObject_6$7 = __makeTemplateObject(["\n path {\n stroke: ", ";\n }\n"], ["\n path {\n stroke: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.bg4; +}); +var OpaqueBadge = styled__default["default"](Badge)(templateObject_7$6 || (templateObject_7$6 = __makeTemplateObject(["\n background-color: ", ";\n border-radius: 8px;\n display: grid;\n font-size: 12px;\n grid-gap: 4px;\n grid-auto-flow: column;\n justify-content: start;\n padding: 4px 6px 4px 4px;\n z-index: ", ";\n"], ["\n background-color: ", ";\n border-radius: 8px;\n display: grid;\n font-size: 12px;\n grid-gap: 4px;\n grid-auto-flow: column;\n justify-content: start;\n padding: 4px 6px 4px 4px;\n z-index: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}, Z_INDEX.sticky); +var ProtocolBadge = styled__default["default"](Badge)(templateObject_8$4 || (templateObject_8$4 = __makeTemplateObject(["\n background-color: ", ";\n border-radius: 4px;\n color: ", ";\n font-size: 10px;\n padding: 2px 4px;\n z-index: ", ";\n"], ["\n background-color: ", ";\n border-radius: 4px;\n color: ", ";\n font-size: 10px;\n padding: 2px 4px;\n z-index: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg3; +}, function (_a) { + var theme = _a.theme; + return theme.text2; +}, Z_INDEX.sticky + 1); +var BadgeText = styled__default["default"](ThemedText.Small)(templateObject_9$4 || (templateObject_9$4 = __makeTemplateObject(["\n word-break: normal;\n"], ["\n word-break: normal;\n"]))); +function RoutingDiagram(_a) { + var currencyIn = _a.currencyIn, currencyOut = _a.currencyOut, routes = _a.routes; + var tokenIn = useTokenInfoFromActiveList(currencyIn); + var tokenOut = useTokenInfoFromActiveList(currencyOut); + return (jsxRuntime.jsx(Wrapper$b, { children: routes.map(function (entry, index) { return (jsxRuntime.jsxs(RouteContainerRow, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: tokenIn, size: '20px' }, void 0), jsxRuntime.jsx(Route, { entry: entry }, void 0), jsxRuntime.jsx(CurrencyLogo, { currency: tokenOut, size: '20px' }, void 0)] }, index)); }) }, void 0)); +} +function Route(_a) { + var _b = _a.entry, percent = _b.percent, path = _b.path, protocol = _b.protocol; + return (jsxRuntime.jsxs(RouteRow, { children: [jsxRuntime.jsx(DottedLine, { children: jsxRuntime.jsx(DotColor, {}, void 0) }, void 0), jsxRuntime.jsxs(OpaqueBadge, { children: [jsxRuntime.jsx(ProtocolBadge, { children: jsxRuntime.jsx(BadgeText, __assign({ fontSize: 12 }, { children: protocol.toUpperCase() }), void 0) }, void 0), jsxRuntime.jsxs(BadgeText, __assign({ fontSize: 14, style: { minWidth: 'auto' } }, { children: [percent.toSignificant(2), "%"] }), void 0)] }, void 0), jsxRuntime.jsx(AutoRow, __assign({ gap: "1px", width: "100%", style: { justifyContent: 'space-evenly', zIndex: 2 } }, { children: path.map(function (_a, index) { + var _b = __read(_a, 3), currency0 = _b[0], currency1 = _b[1], feeAmount = _b[2]; + return (jsxRuntime.jsx(Pool, { currency0: currency0, currency1: currency1, feeAmount: feeAmount }, index)); + }) }), void 0)] }, void 0)); +} +function Pool(_a) { + var currency0 = _a.currency0, currency1 = _a.currency1, feeAmount = _a.feeAmount; + var tokenInfo0 = useTokenInfoFromActiveList(currency0); + var tokenInfo1 = useTokenInfoFromActiveList(currency1); + // TODO - link pool icon to info.uniswap.org via query params + return (jsxRuntime.jsx(MouseoverTooltip, __assign({ text: jsxRuntime.jsxs(macro.Trans, { children: [(tokenInfo0 === null || tokenInfo0 === void 0 ? void 0 : tokenInfo0.symbol) + '/' + (tokenInfo1 === null || tokenInfo1 === void 0 ? void 0 : tokenInfo1.symbol) + ' ' + feeAmount / 10000, "% pool"] }, void 0) }, { children: jsxRuntime.jsxs(PoolBadge, { children: [jsxRuntime.jsx(rebass.Box, __assign({ margin: "0 4px 0 12px" }, { children: jsxRuntime.jsx(DoubleCurrencyLogo, { currency0: tokenInfo1, currency1: tokenInfo0, size: 20 }, void 0) }), void 0), jsxRuntime.jsxs(ThemedText.Small, __assign({ fontSize: 14 }, { children: [feeAmount / 10000, "%"] }), void 0)] }, void 0) }), void 0)); +} +var templateObject_1$B, templateObject_2$p, templateObject_3$k, templateObject_4$c, templateObject_5$b, templateObject_6$7, templateObject_7$6, templateObject_8$4, templateObject_9$4; + +var _defs, _path$2; + +function _extends$2() { _extends$2 = 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$2.apply(this, arguments); } + +var SvgAutoRouter = function SvgAutoRouter(props) { + return /*#__PURE__*/React__namespace.createElement("svg", _extends$2({ + width: 23, + height: 20, + viewBox: "0 0 23 20", + fill: "none", + xmlns: "http://www.w3.org/2000/svg" + }, props), _defs || (_defs = /*#__PURE__*/React__namespace.createElement("defs", null, /*#__PURE__*/React__namespace.createElement("linearGradient", { + id: "gradient1", + x1: 0, + y1: 0, + x2: 1, + y2: 0, + gradientTransform: "rotate(95)" + }, /*#__PURE__*/React__namespace.createElement("stop", { + id: "stop1", + offset: 0, + stopColor: "#2274E2" + }), /*#__PURE__*/React__namespace.createElement("stop", { + id: "stop1", + offset: 0.5, + stopColor: "#2274E2" + }), /*#__PURE__*/React__namespace.createElement("stop", { + id: "stop2", + offset: 1, + stopColor: "#3FB672" + })))), _path$2 || (_path$2 = /*#__PURE__*/React__namespace.createElement("path", { + d: "M16 16C10 16 9 10 5 10M16 16C16 17.6569 17.3431 19 19 19C20.6569 19 22 17.6569 22 16C22 14.3431 20.6569 13 19 13C17.3431 13 16 14.3431 16 16ZM5 10C9 10 10 4 16 4M5 10H1.5M16 4C16 5.65685 17.3431 7 19 7C20.6569 7 22 5.65685 22 4C22 2.34315 20.6569 1 19 1C17.3431 1 16 2.34315 16 4Z", + strokeWidth: 2, + strokeLinecap: "round", + strokeLinejoin: "round", + stroke: "url(#gradient1)" + }))); +}; + +var _path$1; + +function _extends$1() { _extends$1 = 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$1.apply(this, arguments); } + +var SvgStaticRoute = function SvgStaticRoute(props) { + return /*#__PURE__*/React__namespace.createElement("svg", _extends$1({ + width: 20, + height: 20, + viewBox: "0 0 20 22", + fill: "none", + xmlns: "http://www.w3.org/2000/svg" + }, props), _path$1 || (_path$1 = /*#__PURE__*/React__namespace.createElement("path", { + d: "M19 18C19 18.5523 18.5523 19 18 19V21C19.6569 21 21 19.6569 21 18H19ZM18 19C17.4477 19 17 18.5523 17 18H15C15 19.6569 16.3431 21 18 21V19ZM17 18C17 17.4477 17.4477 17 18 17V15C16.3431 15 15 16.3431 15 18H17ZM18 17C18.5523 17 19 17.4477 19 18H21C21 16.3431 19.6569 15 18 15V17ZM8 7H16V5H8V7ZM16 11H8V13H16V11ZM8 19H16V17H8V19ZM4 15C4 17.2091 5.79086 19 8 19V17C6.89543 17 6 16.1046 6 15H4ZM8 11C5.79086 11 4 12.7909 4 15H6C6 13.8954 6.89543 13 8 13V11ZM18 9C18 10.1046 17.1046 11 16 11V13C18.2091 13 20 11.2091 20 9H18ZM16 7C17.1046 7 18 7.89543 18 9H20C20 6.79086 18.2091 5 16 5V7ZM7 6C7 6.55228 6.55228 7 6 7V9C7.65685 9 9 7.65685 9 6H7ZM6 7C5.44772 7 5 6.55228 5 6H3C3 7.65685 4.34315 9 6 9V7ZM5 6C5 5.44772 5.44772 5 6 5V3C4.34315 3 3 4.34315 3 6H5ZM6 5C6.55228 5 7 5.44772 7 6H9C9 4.34315 7.65685 3 6 3V5Z" + }))); +}; + +var StyledAutoRouterIcon = styled__default["default"](SvgAutoRouter)(templateObject_1$A || (templateObject_1$A = __makeTemplateObject(["\n height: 16px;\n width: 16px;\n\n :hover {\n filter: brightness(1.3);\n }\n"], ["\n height: 16px;\n width: 16px;\n\n :hover {\n filter: brightness(1.3);\n }\n"]))); +var StyledStaticRouterIcon = styled__default["default"](SvgStaticRoute)(templateObject_2$o || (templateObject_2$o = __makeTemplateObject(["\n height: 16px;\n width: 16px;\n\n fill: ", ";\n\n :hover {\n filter: brightness(1.3);\n }\n"], ["\n height: 16px;\n width: 16px;\n\n fill: ", ";\n\n :hover {\n filter: brightness(1.3);\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text3; +}); +var StyledAutoRouterLabel = styled__default["default"](ThemedText.Black)(templateObject_3$j || (templateObject_3$j = __makeTemplateObject(["\n line-height: 1rem;\n\n /* fallback color */\n color: ", ";\n\n @supports (-webkit-background-clip: text) and (-webkit-text-fill-color: transparent) {\n background-image: linear-gradient(90deg, #2172e5 0%, #54e521 163.16%);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n }\n"], ["\n line-height: 1rem;\n\n /* fallback color */\n color: ", ";\n\n @supports (-webkit-background-clip: text) and (-webkit-text-fill-color: transparent) {\n background-image: linear-gradient(90deg, #2172e5 0%, #54e521 163.16%);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.green1; +}); +function AutoRouterLogo() { + var autoRouterSupported = useAutoRouterSupported(); + return autoRouterSupported ? jsxRuntime.jsx(StyledAutoRouterIcon, {}, void 0) : jsxRuntime.jsx(StyledStaticRouterIcon, {}, void 0); +} +function AutoRouterLabel() { + var autoRouterSupported = useAutoRouterSupported(); + return autoRouterSupported ? (jsxRuntime.jsx(StyledAutoRouterLabel, __assign({ fontSize: 14 }, { children: "Auto Router" }), void 0)) : (jsxRuntime.jsx(ThemedText.Black, __assign({ fontSize: 14 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Trade Route" }, void 0) }), void 0)); +} +var templateObject_1$A, templateObject_2$o, templateObject_3$j; + +var Wrapper$a = styled__default["default"](AutoColumn)(templateObject_1$z || (templateObject_1$z = __makeTemplateObject(["\n padding: ", ";\n border-radius: 16px;\n border: 1px solid ", ";\n cursor: pointer;\n"], ["\n padding: ", ";\n border-radius: 16px;\n border: 1px solid ", ";\n cursor: pointer;\n"])), function (_a) { + var fixedOpen = _a.fixedOpen; + return (fixedOpen ? '12px' : '12px 8px 12px 12px'); +}, function (_a) { + var theme = _a.theme, fixedOpen = _a.fixedOpen; + return (fixedOpen ? 'transparent' : theme.bg2); +}); +var OpenCloseIcon = styled__default["default"](reactFeather.Plus)(templateObject_2$n || (templateObject_2$n = __makeTemplateObject(["\n margin-left: 8px;\n height: 20px;\n stroke-width: 2px;\n transition: transform 0.1s;\n transform: ", ";\n stroke: ", ";\n cursor: pointer;\n :hover {\n opacity: 0.8;\n }\n"], ["\n margin-left: 8px;\n height: 20px;\n stroke-width: 2px;\n transition: transform 0.1s;\n transform: ", ";\n stroke: ", ";\n cursor: pointer;\n :hover {\n opacity: 0.8;\n }\n"])), function (_a) { + var open = _a.open; + return (open ? 'rotate(45deg)' : 'none'); +}, function (_a) { + var theme = _a.theme; + return theme.text3; +}); +var V2_DEFAULT_FEE_TIER = 3000; +var SwapRoute = React.memo(function SwapRoute(_a) { + var trade = _a.trade, syncing = _a.syncing, _b = _a.fixedOpen, fixedOpen = _b === void 0 ? false : _b, rest = __rest(_a, ["trade", "syncing", "fixedOpen"]); + var autoRouterSupported = useAutoRouterSupported(); + var routes = getTokenPath(trade); + var _c = __read(React.useState(false), 2), open = _c[0], setOpen = _c[1]; + var chainId = useActiveWeb3React().chainId; + var _d = __read(useDarkModeManager(), 1), darkMode = _d[0]; + var formattedGasPriceString = (trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) + ? trade.gasUseEstimateUSD.toFixed(2) === '0.00' + ? '<$0.01' + : '$' + trade.gasUseEstimateUSD.toFixed(2) + : undefined; + return (jsxRuntime.jsxs(Wrapper$a, __assign({}, rest, { darkMode: darkMode, fixedOpen: fixedOpen }, { children: [jsxRuntime.jsxs(RowBetween, __assign({ onClick: function () { return setOpen(!open); } }, { children: [jsxRuntime.jsxs(AutoRow, __assign({ gap: "4px", width: "auto" }, { children: [jsxRuntime.jsx(AutoRouterLogo, {}, void 0), jsxRuntime.jsx(AutoRouterLabel, {}, void 0)] }), void 0), fixedOpen ? null : jsxRuntime.jsx(OpenCloseIcon, { open: open }, void 0)] }), void 0), jsxRuntime.jsx(AnimatedDropdown, __assign({ open: open || fixedOpen }, { children: jsxRuntime.jsxs(AutoRow, __assign({ gap: "4px", width: "auto", style: { paddingTop: '12px', margin: 0 } }, { children: [syncing ? (jsxRuntime.jsx(LoadingRows, { children: jsxRuntime.jsx("div", { style: { width: '400px', height: '30px' } }, void 0) }, void 0)) : (jsxRuntime.jsx(RoutingDiagram, { currencyIn: trade.inputAmount.currency, currencyOut: trade.outputAmount.currency, routes: routes }, void 0)), autoRouterSupported && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(Separator$1, {}, void 0), syncing ? (jsxRuntime.jsx(LoadingRows, { children: jsxRuntime.jsx("div", { style: { width: '250px', height: '15px' } }, void 0) }, void 0)) : (jsxRuntime.jsxs(ThemedText.Main, __assign({ fontSize: 12, width: 400, margin: 0 }, { children: [(trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) && chainId && SUPPORTED_GAS_ESTIMATE_CHAIN_IDS.includes(chainId) ? (jsxRuntime.jsxs(macro.Trans, { children: ["Best price route costs ~", formattedGasPriceString, " in gas. "] }, void 0)) : null, ' ', jsxRuntime.jsx(macro.Trans, { children: "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step." }, void 0)] }), void 0))] }, void 0))] }), void 0) }), void 0)] }), void 0)); +}); +function getTokenPath(trade) { + return trade.swaps.map(function (_a) { + var _b = _a.route, tokenPath = _b.path, pools = _b.pools, protocol = _b.protocol, inputAmount = _a.inputAmount, outputAmount = _a.outputAmount; + var portion = trade.tradeType === sdkCore.TradeType.EXACT_INPUT + ? inputAmount.divide(trade.inputAmount) + : outputAmount.divide(trade.outputAmount); + var percent = new sdkCore.Percent(portion.numerator, portion.denominator); + var path = []; + for (var i = 0; i < pools.length; i++) { + var nextPool = pools[i]; + var tokenIn = tokenPath[i]; + var tokenOut = tokenPath[i + 1]; + var entry = [ + tokenIn, + tokenOut, + nextPool instanceof v2Sdk.Pair ? V2_DEFAULT_FEE_TIER : nextPool.fee, + ]; + path.push(entry); } - return function () { - if (match === null || match === void 0 ? void 0 : match.removeListener) { - match === null || match === void 0 ? void 0 : match.removeListener(darkHandler); - } - else if (match === null || match === void 0 ? void 0 : match.removeEventListener) { - match === null || match === void 0 ? void 0 : match.removeEventListener('change', darkHandler); - } + return { + percent: percent, + path: path, + protocol: protocol, }; - }, [dispatch]); - return null; -} - -var initialStyles = { - width: '200vw', - height: '200vh', - transform: 'translate(-50vw, -100vh)', - backgroundBlendMode: '', -}; -var backgroundResetStyles = { - width: '100vw', - height: '100vh', - transform: 'unset', - backgroundBlendMode: '', -}; -var backgroundRadialGradientElement = document.getElementById('background-radial-gradient'); -var setBackground = function (newValues) { - return Object.entries(newValues).forEach(function (_a) { - var _b = __read(_a, 2), key = _b[0], value = _b[1]; - if (backgroundRadialGradientElement) { - backgroundRadialGradientElement.style[key] = value; - } }); -}; -function RadialGradientByChainUpdater() { - var chainId = useActiveWeb3React().chainId; - var _a = __read(useDarkModeManager(), 1), darkMode = _a[0]; - // manage background color - React.useEffect(function () { - if (!backgroundRadialGradientElement) { - return; - } - switch (chainId) { - case SupportedChainId.ARBITRUM_ONE: - case SupportedChainId.ARBITRUM_RINKEBY: - setBackground(backgroundResetStyles); - var arbitrumLightGradient = 'radial-gradient(150% 100% at 50% 0%, #CDE8FB 0%, #FCF3F9 50%, #FFFFFF 100%)'; - var arbitrumDarkGradient = 'radial-gradient(150% 100% at 50% 0%, #0A294B 0%, #221E30 50%, #1F2128 100%)'; - backgroundRadialGradientElement.style.background = darkMode ? arbitrumDarkGradient : arbitrumLightGradient; - break; - case SupportedChainId.OPTIMISM: - case SupportedChainId.OPTIMISTIC_KOVAN: - setBackground(backgroundResetStyles); - var optimismLightGradient = 'radial-gradient(150% 100% at 50% 0%, #FFFBF2 2%, #FFF4F9 53%, #FFFFFF 100%)'; - var optimismDarkGradient = 'radial-gradient(150% 100% at 50% 0%, #3E2E38 2%, #2C1F2D 53%, #1F2128 100%)'; - backgroundRadialGradientElement.style.background = darkMode ? optimismDarkGradient : optimismLightGradient; - break; - case SupportedChainId.POLYGON: - case SupportedChainId.POLYGON_MUMBAI: - setBackground(backgroundResetStyles); - var polygonLightGradient = 'radial-gradient(153.32% 100% at 47.26% 0%, rgba(130, 71, 229, 0.0864) 0%, rgba(0, 41, 255, 0.06) 48.19%, rgba(0, 41, 255, 0.012) 100%), #FFFFFF'; - var polygonDarkGradient = 'radial-gradient(150.6% 98.22% at 48.06% 0%, rgba(130, 71, 229, 0.6) 0%, rgba(200, 168, 255, 0) 100%), #1F2128'; - backgroundRadialGradientElement.style.background = darkMode ? polygonDarkGradient : polygonLightGradient; - backgroundRadialGradientElement.style.backgroundBlendMode = darkMode ? 'overlay,normal' : 'multiply,normal'; - break; - default: - setBackground(initialStyles); - backgroundRadialGradientElement.style.background = ''; - } - }, [darkMode, chainId]); - return null; -} - -function Updaters() { - return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(RadialGradientByChainUpdater, {}, void 0), jsxRuntime.jsx(Updater$4, {}, void 0), jsxRuntime.jsx(Updater, {}, void 0), jsxRuntime.jsx(Updater$5, {}, void 0), jsxRuntime.jsx(Updater$1, {}, void 0), jsxRuntime.jsx(BlockUpdater, {}, void 0), jsxRuntime.jsx(MulticallUpdater, {}, void 0), jsxRuntime.jsx(Updater$3, {}, void 0)] }, void 0)); -} +} +var templateObject_1$z, templateObject_2$n; -var Web3ProviderNetwork = core.createWeb3ReactRoot(NetworkContextName); -var Providers = function (props) { return (jsxRuntime.jsx(reactRedux.Provider, __assign({ store: store }, { children: jsxRuntime.jsx(reactRouterDom.HashRouter, { children: jsxRuntime.jsx(LanguageProvider, { children: jsxRuntime.jsx(core.Web3ReactProvider, __assign({ getLibrary: getLibrary }, { children: jsxRuntime.jsx(Web3ProviderNetwork, __assign({ getLibrary: getLibrary }, { children: jsxRuntime.jsxs(Blocklist, { children: [jsxRuntime.jsx(Updaters, {}, void 0), jsxRuntime.jsxs(ThemeProvider, { children: [jsxRuntime.jsx(ThemedGlobalStyle, {}, void 0), props.children] }, void 0)] }, void 0) }), void 0) }), void 0) }, void 0) }, void 0) }), void 0)); }; +var GasWrapper = styled__default["default"](RowFixed)(templateObject_1$y || (templateObject_1$y = __makeTemplateObject(["\n border-radius: 8px;\n padding: 4px 6px;\n height: 24px;\n color: ", ";\n background-color: ", ";\n font-size: 14px;\n font-weight: 500;\n user-select: none;\n"], ["\n border-radius: 8px;\n padding: 4px 6px;\n height: 24px;\n color: ", ";\n background-color: ", ";\n font-size: 14px;\n font-weight: 500;\n user-select: none;\n"])), function (_a) { + var theme = _a.theme; + return theme.text3; +}, function (_a) { + var theme = _a.theme; + return theme.bg1; +}); +var StyledGasIcon = styled__default["default"](SvgGasIcon)(templateObject_2$m || (templateObject_2$m = __makeTemplateObject(["\n margin-right: 4px;\n height: 14px;\n & > * {\n stroke: ", ";\n }\n"], ["\n margin-right: 4px;\n height: 14px;\n & > * {\n stroke: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text3; +}); +function GasEstimateBadge(_a) { + var _b; + var trade = _a.trade, loading = _a.loading, showRoute = _a.showRoute, disableHover = _a.disableHover; + var formattedGasPriceString = (trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) + ? trade.gasUseEstimateUSD.toFixed(2) === '0.00' + ? '<$0.01' + : '$' + trade.gasUseEstimateUSD.toFixed(2) + : undefined; + return (jsxRuntime.jsx(MouseoverTooltipContent, __assign({ wrap: false, disableHover: disableHover, content: loading ? null : (jsxRuntime.jsx(ResponsiveTooltipContainer, __assign({ origin: "top right", style: { + padding: showRoute ? '0' : '12px', + border: 'none', + borderRadius: showRoute ? '16px' : '12px', + maxWidth: '400px', + } }, { children: showRoute ? (trade ? (jsxRuntime.jsx(SwapRoute, { trade: trade, syncing: loading, fixedOpen: showRoute }, void 0)) : null) : (jsxRuntime.jsxs(AutoColumn, __assign({ gap: "4px", justify: "center" }, { children: [jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: "12px", textAlign: "center" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Estimated network fee" }, void 0) }), void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ textAlign: "center", fontWeight: 500, style: { userSelect: 'none' } }, { children: jsxRuntime.jsxs(macro.Trans, { children: ["$", (_b = trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) === null || _b === void 0 ? void 0 : _b.toFixed(2)] }, void 0) }), void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: "10px", textAlign: "center", maxWidth: "140px", color: "text3" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Estimate may differ due to your wallet gas settings" }, void 0) }), void 0)] }), void 0)) }), void 0)), placement: "bottom", onOpen: function () { + return ReactGA__default["default"].event({ + category: 'Gas', + action: 'Gas Details Tooltip Open', + }); + } }, { children: jsxRuntime.jsx(LoadingOpacityContainer, __assign({ "$loading": loading }, { children: jsxRuntime.jsxs(GasWrapper, { children: [jsxRuntime.jsx(StyledGasIcon, {}, void 0), formattedGasPriceString !== null && formattedGasPriceString !== void 0 ? formattedGasPriceString : null] }, void 0) }), void 0) }), void 0)); +} +var templateObject_1$y, templateObject_2$m; -var $schema = "http://json-schema.org/draft-07/schema#"; -var $id = "https://uniswap.org/tokenlist.schema.json"; -var title = "Uniswap Token List"; -var description = "Schema for lists of tokens compatible with the Uniswap Interface"; -var definitions = { - Version: { - type: "object", - description: "The version of the list, used in change detection", - examples: [ - { - major: 1, - minor: 0, - patch: 0 - } - ], - additionalProperties: false, - properties: { - major: { - type: "integer", - description: "The major version of the list. Must be incremented when tokens are removed from the list or token addresses are changed.", - minimum: 0, - examples: [ - 1, - 2 - ] - }, - minor: { - type: "integer", - description: "The minor version of the list. Must be incremented when tokens are added to the list.", - minimum: 0, - examples: [ - 0, - 1 - ] - }, - patch: { - type: "integer", - description: "The patch version of the list. Must be incremented for any changes to the list.", - minimum: 0, - examples: [ - 0, - 1 - ] - } - }, - required: [ - "major", - "minor", - "patch" - ] - }, - TagIdentifier: { - type: "string", - description: "The unique identifier of a tag", - minLength: 1, - maxLength: 10, - pattern: "^[\\w]+$", - examples: [ - "compound", - "stablecoin" - ] - }, - ExtensionIdentifier: { - type: "string", - description: "The name of a token extension property", - minLength: 1, - maxLength: 40, - pattern: "^[\\w]+$", - examples: [ - "color", - "is_fee_on_transfer", - "aliases" - ] - }, - ExtensionMap: { - type: "object", - description: "An object containing any arbitrary or vendor-specific token metadata", - maxProperties: 10, - propertyNames: { - $ref: "#/definitions/ExtensionIdentifier" - }, - additionalProperties: { - $ref: "#/definitions/ExtensionValue" - }, - examples: [ - { - color: "#000000", - is_verified_by_me: true - }, +var Wrapper$9 = styled__default["default"](Row$1)(templateObject_1$x || (templateObject_1$x = __makeTemplateObject(["\n width: 100%;\n justify-content: center;\n"], ["\n width: 100%;\n justify-content: center;\n"]))); +var StyledInfoIcon = styled__default["default"](reactFeather.Info)(templateObject_2$l || (templateObject_2$l = __makeTemplateObject(["\n height: 16px;\n width: 16px;\n margin-right: 4px;\n color: ", ";\n"], ["\n height: 16px;\n width: 16px;\n margin-right: 4px;\n color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.text3; +}); +var StyledCard = styled__default["default"](OutlineCard)(templateObject_3$i || (templateObject_3$i = __makeTemplateObject(["\n padding: 12px;\n border: 1px solid ", ";\n"], ["\n padding: 12px;\n border: 1px solid ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}); +var StyledHeaderRow = styled__default["default"](RowBetween)(templateObject_4$b || (templateObject_4$b = __makeTemplateObject(["\n padding: 4px 8px;\n border-radius: 12px;\n background-color: ", ";\n align-items: center;\n cursor: ", ";\n min-height: 40px;\n\n :hover {\n background-color: ", ";\n }\n"], ["\n padding: 4px 8px;\n border-radius: 12px;\n background-color: ", ";\n align-items: center;\n cursor: ", ";\n min-height: 40px;\n\n :hover {\n background-color: ", ";\n }\n"])), function (_a) { + var open = _a.open, theme = _a.theme; + return (open ? theme.bg1 : 'transparent'); +}, function (_a) { + var disabled = _a.disabled; + return (disabled ? 'initial' : 'pointer'); +}, function (_a) { + var theme = _a.theme, disabled = _a.disabled; + return (disabled ? theme.bg1 : polished.darken(0.015, theme.bg1)); +}); +var RotatingArrow = styled__default["default"](reactFeather.ChevronDown)(templateObject_5$a || (templateObject_5$a = __makeTemplateObject(["\n transform: ", ";\n transition: transform 0.1s linear;\n"], ["\n transform: ", ";\n transition: transform 0.1s linear;\n"])), function (_a) { + var open = _a.open; + return (open ? 'rotate(180deg)' : 'none'); +}); +var StyledPolling = styled__default["default"].div(templateObject_7$5 || (templateObject_7$5 = __makeTemplateObject(["\n display: flex;\n height: 16px;\n width: 16px;\n margin-right: 2px;\n margin-left: 10px;\n align-items: center;\n color: ", ";\n transition: 250ms ease color;\n\n ", "\n"], ["\n display: flex;\n height: 16px;\n width: 16px;\n margin-right: 2px;\n margin-left: 10px;\n align-items: center;\n color: ", ";\n transition: 250ms ease color;\n\n ", "\n"])), function (_a) { + var theme = _a.theme; + return theme.text1; +}, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToMedium(templateObject_6$6 || (templateObject_6$6 = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); +}); +var StyledPollingDot = styled__default["default"].div(templateObject_8$3 || (templateObject_8$3 = __makeTemplateObject(["\n width: 8px;\n height: 8px;\n min-height: 8px;\n min-width: 8px;\n border-radius: 50%;\n position: relative;\n background-color: ", ";\n transition: 250ms ease background-color;\n"], ["\n width: 8px;\n height: 8px;\n min-height: 8px;\n min-width: 8px;\n border-radius: 50%;\n position: relative;\n background-color: ", ";\n transition: 250ms ease background-color;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}); +var rotate360 = styled.keyframes(templateObject_9$3 || (templateObject_9$3 = __makeTemplateObject(["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"], ["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"]))); +var Spinner = styled__default["default"].div(templateObject_10$3 || (templateObject_10$3 = __makeTemplateObject(["\n animation: ", " 1s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n transform: translateZ(0);\n border-top: 1px solid transparent;\n border-right: 1px solid transparent;\n border-bottom: 1px solid transparent;\n border-left: 2px solid ", ";\n background: transparent;\n width: 14px;\n height: 14px;\n border-radius: 50%;\n position: relative;\n transition: 250ms ease border-color;\n left: -3px;\n top: -3px;\n"], ["\n animation: ", " 1s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n transform: translateZ(0);\n border-top: 1px solid transparent;\n border-right: 1px solid transparent;\n border-bottom: 1px solid transparent;\n border-left: 2px solid ", ";\n background: transparent;\n width: 14px;\n height: 14px;\n border-radius: 50%;\n position: relative;\n transition: 250ms ease border-color;\n left: -3px;\n top: -3px;\n"])), rotate360, function (_a) { + var theme = _a.theme; + return theme.text1; +}); +function SwapDetailsDropdown(_a) { + var trade = _a.trade, syncing = _a.syncing, loading = _a.loading, showInverted = _a.showInverted, setShowInverted = _a.setShowInverted, allowedSlippage = _a.allowedSlippage; + var theme = styled.useTheme(); + var chainId = useActiveWeb3React().chainId; + var _b = __read(React.useState(false), 2), showDetails = _b[0], setShowDetails = _b[1]; + return (jsxRuntime.jsx(Wrapper$9, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: '8px', style: { width: '100%', marginBottom: '-8px' } }, { children: [jsxRuntime.jsxs(StyledHeaderRow, __assign({ onClick: function () { return setShowDetails(!showDetails); }, disabled: !trade, open: showDetails }, { children: [jsxRuntime.jsxs(RowFixed, __assign({ style: { position: 'relative' } }, { children: [loading || syncing ? (jsxRuntime.jsx(StyledPolling, { children: jsxRuntime.jsx(StyledPollingDot, { children: jsxRuntime.jsx(Spinner, {}, void 0) }, void 0) }, void 0)) : (jsxRuntime.jsx(HideSmall, { children: jsxRuntime.jsx(MouseoverTooltipContent, __assign({ wrap: false, content: jsxRuntime.jsx(ResponsiveTooltipContainer, __assign({ origin: "top right", style: { padding: '0' } }, { children: jsxRuntime.jsx(Card, __assign({ padding: "12px" }, { children: jsxRuntime.jsx(AdvancedSwapDetails, { trade: trade, allowedSlippage: allowedSlippage, syncing: syncing }, void 0) }), void 0) }), void 0), placement: "bottom", disableHover: showDetails }, { children: jsxRuntime.jsx(StyledInfoIcon, { color: trade ? theme.text3 : theme.bg3 }, void 0) }), void 0) }, void 0)), trade ? (jsxRuntime.jsx(LoadingOpacityContainer, __assign({ "$loading": syncing }, { children: jsxRuntime.jsx(TradePrice, { price: trade.executionPrice, showInverted: showInverted, setShowInverted: setShowInverted }, void 0) }), void 0)) : loading || syncing ? (jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: 14 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Fetching best price..." }, void 0) }), void 0)) : null] }), void 0), jsxRuntime.jsxs(RowFixed, { children: [!(trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) || + showDetails || + !chainId || + !SUPPORTED_GAS_ESTIMATE_CHAIN_IDS.includes(chainId) ? null : (jsxRuntime.jsx(GasEstimateBadge, { trade: trade, loading: syncing || loading, showRoute: !showDetails, disableHover: showDetails }, void 0)), jsxRuntime.jsx(RotatingArrow, { stroke: trade ? theme.text3 : theme.bg3, open: Boolean(trade && showDetails) }, void 0)] }, void 0)] }), void 0), jsxRuntime.jsx(AnimatedDropdown, __assign({ open: showDetails }, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: '8px', style: { padding: '0', paddingBottom: '8px' } }, { children: [trade ? (jsxRuntime.jsx(StyledCard, { children: jsxRuntime.jsx(AdvancedSwapDetails, { trade: trade, allowedSlippage: allowedSlippage, syncing: syncing }, void 0) }, void 0)) : null, trade ? jsxRuntime.jsx(SwapRoute, { trade: trade, syncing: syncing }, void 0) : null] }), void 0) }), void 0)] }), void 0) }, void 0)); +} +var templateObject_1$x, templateObject_2$l, templateObject_3$i, templateObject_4$b, templateObject_5$a, templateObject_6$6, templateObject_7$5, templateObject_8$3, templateObject_9$3, templateObject_10$3; + +var DetailsFooter = styled__default["default"].div(templateObject_1$w || (templateObject_1$w = __makeTemplateObject(["\n padding-top: calc(16px + 2rem);\n padding-bottom: 20px;\n margin-left: auto;\n margin-right: auto;\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: ", ";\n background-color: ", ";\n z-index: ", ";\n\n transform: ", ";\n transition: transform 300ms ease-in-out;\n text-align: center;\n"], ["\n padding-top: calc(16px + 2rem);\n padding-bottom: 20px;\n margin-left: auto;\n margin-right: auto;\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: ", ";\n background-color: ", ";\n z-index: ", ";\n\n transform: ", ";\n transition: transform 300ms ease-in-out;\n text-align: center;\n"])), function (_a) { + var theme = _a.theme; + return theme.text2; +}, function (_a) { + var theme = _a.theme; + return theme.advancedBG; +}, Z_INDEX.deprecated_zero, function (_a) { + var show = _a.show; + return (show ? 'translateY(0%)' : 'translateY(-100%)'); +}); +var StyledButtonEmpty = styled__default["default"](ButtonEmpty)(templateObject_2$k || (templateObject_2$k = __makeTemplateObject(["\n text-decoration: none;\n"], ["\n text-decoration: none;\n"]))); +var AddressText$1 = styled__default["default"](ThemedText.Blue)(templateObject_4$a || (templateObject_4$a = __makeTemplateObject(["\n font-size: 12px;\n\n ", "\n"], ["\n font-size: 12px;\n\n ", "\n"])), function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToSmall(templateObject_3$h || (templateObject_3$h = __makeTemplateObject(["\n font-size: 10px;\n"], ["\n font-size: 10px;\n"]))); +}); +function UnsupportedCurrencyFooter(_a) { + var show = _a.show, currencies = _a.currencies; + var chainId = useActiveWeb3React().chainId; + var _b = __read(React.useState(false), 2), showDetails = _b[0], setShowDetails = _b[1]; + var tokens = chainId && currencies + ? currencies.map(function (currency) { + return currency === null || currency === void 0 ? void 0 : currency.wrapped; + }) + : []; + var unsupportedTokens = useUnsupportedTokens(); + return (jsxRuntime.jsxs(DetailsFooter, __assign({ show: show }, { children: [jsxRuntime.jsx(Modal, __assign({ isOpen: showDetails, onDismiss: function () { return setShowDetails(false); } }, { children: jsxRuntime.jsx(Card, __assign({ padding: "2rem" }, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "lg" }, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(ThemedText.MediumHeader, { children: jsxRuntime.jsx(macro.Trans, { children: "Unsupported Assets" }, void 0) }, void 0), jsxRuntime.jsx(CloseIcon$2, { onClick: function () { return setShowDetails(false); } }, void 0)] }, void 0), tokens.map(function (token) { + var _a; + return (token && + unsupportedTokens && + Object.keys(unsupportedTokens).includes(token.address) && (jsxRuntime.jsx(OutlineCard, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "10px" }, { children: [jsxRuntime.jsxs(AutoRow, __assign({ gap: "5px", align: "center" }, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: token, size: '24px' }, void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 500 }, { children: token.symbol }), void 0)] }), void 0), chainId && (jsxRuntime.jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, token.address, ExplorerDataType.ADDRESS) }, { children: jsxRuntime.jsx(AddressText$1, { children: token.address }, void 0) }), void 0))] }), void 0) }, (_a = token.address) === null || _a === void 0 ? void 0 : _a.concat('not-supported')))); + }), jsxRuntime.jsx(AutoColumn, __assign({ gap: "lg" }, { children: jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 500 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons." }, void 0) }), void 0) }), void 0)] }), void 0) }), void 0) }), void 0), jsxRuntime.jsx(StyledButtonEmpty, __assign({ padding: '0', onClick: function () { return setShowDetails(true); } }, { children: jsxRuntime.jsx(ThemedText.Blue, { children: jsxRuntime.jsx(macro.Trans, { children: "Read more about unsupported assets" }, void 0) }, void 0) }), void 0)] }), void 0)); +} +var templateObject_1$w, templateObject_2$k, templateObject_3$h, templateObject_4$a; + +var ERC20_INTERFACE = new abi$7.Interface([ + { + constant: false, + inputs: [ + { name: '_spender', type: 'address' }, + { name: '_value', type: 'uint256' }, + ], + name: 'approve', + outputs: [{ name: '', type: 'bool' }], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, +]); +function approveAmountCalldata(amount, spender) { + if (!amount.currency.isToken) + throw new Error('Must call with an amount of token'); + var approveData = ERC20_INTERFACE.encodeFunctionData('approve', [spender, v3Sdk.toHex(amount.quotient)]); + return { + to: amount.currency.address, + data: approveData, + value: '0x0', + }; +} + +var ArgentWalletContractABI = [ + { + inputs: [ { - "x-bridged-addresses-by-chain": { - "1": { - bridgeAddress: "0x4200000000000000000000000000000000000010", - tokenAddress: "0x4200000000000000000000000000000000000010" + components: [ + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" } - } - } - ] - }, - ExtensionPrimitiveValue: { - anyOf: [ - { - type: "string", - minLength: 1, - maxLength: 42, - examples: [ - "#00000" - ] - }, - { - type: "boolean", - examples: [ - true - ] - }, - { - type: "number", - examples: [ - 15 - ] - }, - { - type: "null" - } - ] - }, - ExtensionValue: { - anyOf: [ - { - $ref: "#/definitions/ExtensionPrimitiveValue" - }, - { - type: "object", - maxProperties: 10, - propertyNames: { - $ref: "#/definitions/ExtensionIdentifier" - }, - additionalProperties: { - $ref: "#/definitions/ExtensionValueInner0" - } - } - ] - }, - ExtensionValueInner0: { - anyOf: [ - { - $ref: "#/definitions/ExtensionPrimitiveValue" - }, - { - type: "object", - maxProperties: 10, - propertyNames: { - $ref: "#/definitions/ExtensionIdentifier" - }, - additionalProperties: { - $ref: "#/definitions/ExtensionValueInner1" - } - } - ] - }, - ExtensionValueInner1: { - anyOf: [ - { - $ref: "#/definitions/ExtensionPrimitiveValue" - } - ] - }, - TagDefinition: { - type: "object", - description: "Definition of a tag that can be associated with a token via its identifier", - additionalProperties: false, - properties: { - name: { - type: "string", - description: "The name of the tag", - pattern: "^[ \\w]+$", - minLength: 1, - maxLength: 20 - }, - description: { - type: "string", - description: "A user-friendly description of the tag", - pattern: "^[ \\w\\.,:]+$", - minLength: 1, - maxLength: 200 - } - }, - required: [ - "name", - "description" - ], - examples: [ - { - name: "Stablecoin", - description: "A token with value pegged to another asset" - } - ] - }, - TokenInfo: { - type: "object", - description: "Metadata for a single token in a token list", - additionalProperties: false, - properties: { - chainId: { - type: "integer", - description: "The chain ID of the Ethereum network where this token is deployed", - minimum: 1, - examples: [ - 1, - 42 - ] - }, - address: { - type: "string", - description: "The checksummed address of the token on the specified chain ID", - pattern: "^0x[a-fA-F0-9]{40}$", - examples: [ - "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48" - ] - }, - decimals: { - type: "integer", - description: "The number of decimals for the token balance", - minimum: 0, - maximum: 255, - examples: [ - 18 - ] - }, - name: { - type: "string", - description: "The name of the token", - minLength: 1, - maxLength: 40, - pattern: "^[ \\w.'+\\-%/À-ÖØ-öø-ÿ:&\\[\\]\\(\\)]+$", - examples: [ - "USD Coin" - ] - }, - symbol: { - type: "string", - description: "The symbol for the token; must be alphanumeric", - pattern: "^[a-zA-Z0-9+\\-%/$.]+$", - minLength: 1, - maxLength: 20, - examples: [ - "USDC" - ] - }, - logoURI: { - type: "string", - description: "A URI to the token logo asset; if not set, interface will attempt to find a logo based on the token address; suggest SVG or PNG of size 64x64", - format: "uri", - examples: [ - "ipfs://QmXfzKRvjZz3u5JRgC4v5mGVbm9ahrUiB4DgzHBsnWbTMM" - ] - }, - tags: { - type: "array", - description: "An array of tag identifiers associated with the token; tags are defined at the list level", - items: { - $ref: "#/definitions/TagIdentifier" - }, - maxItems: 10, - examples: [ - "stablecoin", - "compound" - ] + ], + name: "_transactions", + type: "tuple[]" + } + ], + name: "wc_multiCall", + outputs: [ + { + internalType: "bytes[]", + name: "", + type: "bytes[]" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "_msgHash", + type: "bytes32" }, - extensions: { - $ref: "#/definitions/ExtensionMap" + { + internalType: "bytes", + name: "_signature", + type: "bytes" } - }, - required: [ - "chainId", - "address", - "decimals", - "name", - "symbol" - ] + ], + name: "isValidSignature", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4" + } + ], + stateMutability: "view", + type: "function" } -}; -var type = "object"; -var additionalProperties = false; -======= -var _a$9 -var QUOTE_GAS_OVERRIDES = - ((_a$9 = {}), - (_a$9[SupportedChainId.ARBITRUM_ONE] = 25000000), - (_a$9[SupportedChainId.ARBITRUM_RINKEBY] = 25000000), - _a$9) -var DEFAULT_GAS_QUOTE = 2000000 -/** - * Returns the best v3 trade for a desired swap - * @param tradeType whether the swap is an exact in/out - * @param amountSpecified the exact amount to swap in/out - * @param otherCurrency the desired output/payment currency - */ -function useClientSideV3Trade(tradeType, amountSpecified, otherCurrency) { - var _a - var _b = __read( - React.useMemo( - function () { - return tradeType === sdkCore.TradeType.EXACT_INPUT - ? [ - amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, - otherCurrency, - ] - : [ - otherCurrency, - amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, - ] - }, - [tradeType, amountSpecified, otherCurrency] - ), - 2 - ), - currencyIn = _b[0], - currencyOut = _b[1] - var _c = useAllV3Routes(currencyIn, currencyOut), - routes = _c.routes, - routesLoading = _c.loading - var quoter = useV3Quoter() - var chainId = useActiveWeb3React().chainId - var quotesResults = useSingleContractWithCallData( - quoter, - amountSpecified - ? routes.map(function (route) { - return v3Sdk.SwapQuoter.quoteCallParameters(route, amountSpecified, tradeType).calldata - }) - : [], - { - gasRequired: chainId - ? (_a = QUOTE_GAS_OVERRIDES[chainId]) !== null && _a !== void 0 - ? _a - : DEFAULT_GAS_QUOTE - : undefined, - } - ) - return React.useMemo( - function () { - if ( - !amountSpecified || - !currencyIn || - !currencyOut || - quotesResults.some(function (_a) { - var valid = _a.valid - return !valid - }) || - // skip when tokens are the same - (tradeType === sdkCore.TradeType.EXACT_INPUT - ? amountSpecified.currency.equals(currencyOut) - : amountSpecified.currency.equals(currencyIn)) - ) { - return { - state: TradeState.INVALID, - trade: undefined, - } - } - if ( - routesLoading || - quotesResults.some(function (_a) { - var loading = _a.loading - return loading - }) - ) { - return { - state: TradeState.LOADING, - trade: undefined, - } - } - var _a = quotesResults.reduce( - function (currentBest, _a, i) { - var result = _a.result - if (!result) return currentBest - // overwrite the current best if it's not defined or if this route is better - if (tradeType === sdkCore.TradeType.EXACT_INPUT) { - var amountOut_1 = sdkCore.CurrencyAmount.fromRawAmount(currencyOut, result.amountOut.toString()) - if ( - currentBest.amountOut === null || - JSBI__default['default'].lessThan(currentBest.amountOut.quotient, amountOut_1.quotient) - ) { - return { - bestRoute: routes[i], - amountIn: amountSpecified, - amountOut: amountOut_1, - } - } - } else { - var amountIn_1 = sdkCore.CurrencyAmount.fromRawAmount(currencyIn, result.amountIn.toString()) - if ( - currentBest.amountIn === null || - JSBI__default['default'].greaterThan(currentBest.amountIn.quotient, amountIn_1.quotient) - ) { - return { - bestRoute: routes[i], - amountIn: amountIn_1, - amountOut: amountSpecified, - } - } - } - return currentBest - }, - { - bestRoute: null, - amountIn: null, - amountOut: null, - } - ), - bestRoute = _a.bestRoute, - amountIn = _a.amountIn, - amountOut = _a.amountOut - if (!bestRoute || !amountIn || !amountOut) { - return { - state: TradeState.NO_ROUTE_FOUND, - trade: undefined, - } - } - return { - state: TradeState.VALID, - trade: new InterfaceTrade({ - v2Routes: [], - v3Routes: [ - { - routev3: bestRoute, - inputAmount: amountIn, - outputAmount: amountOut, - }, - ], - tradeType, - }), - } - }, - [amountSpecified, currencyIn, currencyOut, quotesResults, routes, routesLoading, tradeType] - ) +]; + +function useIsArgentWallet() { + var _a, _b; + var account = useActiveWeb3React().account; + var argentWalletDetector = useArgentWalletDetectorContract(); + var inputs = React.useMemo(function () { return [account !== null && account !== void 0 ? account : undefined]; }, [account]); + var call = useSingleCallResult(argentWalletDetector, 'isArgentWallet', inputs, reduxMulticall.NEVER_RELOAD); + return (_b = (_a = call === null || call === void 0 ? void 0 : call.result) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : false; +} + +function useArgentWalletContract() { + var account = useActiveWeb3React().account; + var isArgentWallet = useIsArgentWallet(); + return useContract(isArgentWallet ? account !== null && account !== void 0 ? account : undefined : undefined, ArgentWalletContractABI, true); +} + +/** + * Returns the swap calls that can be used to make the trade + * @param trade trade to execute + * @param allowedSlippage user allowed slippage + * @param recipientAddressOrName the ENS name or address of the recipient of the swap output + * @param signatureData the signature data of the permit of the input token amount, if available + */ +function useSwapCallArguments(trade, allowedSlippage, recipientAddressOrName, signatureData, deadline) { + var _a = useActiveWeb3React(), account = _a.account, chainId = _a.chainId, library = _a.library; + var recipientAddress = useENS(recipientAddressOrName).address; + var recipient = recipientAddressOrName === null ? account : recipientAddress; + var routerContract = useV2RouterContract(); + var argentWalletContract = useArgentWalletContract(); + return React.useMemo(function () { + if (!trade || !recipient || !library || !account || !chainId || !deadline) + return []; + if (trade instanceof v2Sdk.Trade) { + if (!routerContract) + return []; + var swapMethods = []; + swapMethods.push(v2Sdk.Router.swapCallParameters(trade, { + feeOnTransfer: false, + allowedSlippage: allowedSlippage, + recipient: recipient, + deadline: deadline.toNumber(), + })); + if (trade.tradeType === sdkCore.TradeType.EXACT_INPUT) { + swapMethods.push(v2Sdk.Router.swapCallParameters(trade, { + feeOnTransfer: true, + allowedSlippage: allowedSlippage, + recipient: recipient, + deadline: deadline.toNumber(), + })); + } + return swapMethods.map(function (_a) { + var methodName = _a.methodName, args = _a.args, value = _a.value; + if (argentWalletContract && trade.inputAmount.currency.isToken) { + return { + address: argentWalletContract.address, + calldata: argentWalletContract.interface.encodeFunctionData('wc_multiCall', [ + [ + approveAmountCalldata(trade.maximumAmountIn(allowedSlippage), routerContract.address), + { + to: routerContract.address, + value: value, + data: routerContract.interface.encodeFunctionData(methodName, args), + }, + ], + ]), + value: '0x0', + }; + } + else { + return { + address: routerContract.address, + calldata: routerContract.interface.encodeFunctionData(methodName, args), + value: value, + }; + } + }); + } + else { + // swap options shared by v3 and v2+v3 swap routers + var sharedSwapOptions = __assign({ recipient: recipient, slippageTolerance: allowedSlippage }, (signatureData + ? { + inputTokenPermit: 'allowed' in signatureData + ? { + expiry: signatureData.deadline, + nonce: signatureData.nonce, + s: signatureData.s, + r: signatureData.r, + v: signatureData.v, + } + : { + deadline: signatureData.deadline, + amount: signatureData.amount, + s: signatureData.s, + r: signatureData.r, + v: signatureData.v, + }, + } + : {})); + var swapRouterAddress = chainId + ? trade instanceof v3Sdk.Trade + ? V3_ROUTER_ADDRESS[chainId] + : SWAP_ROUTER_ADDRESSES[chainId] + : undefined; + if (!swapRouterAddress) + return []; + var _a = trade instanceof v3Sdk.Trade + ? v3Sdk.SwapRouter.swapCallParameters(trade, __assign(__assign({}, sharedSwapOptions), { deadline: deadline.toString() })) + : routerSdk.SwapRouter.swapCallParameters(trade, __assign(__assign({}, sharedSwapOptions), { deadlineOrPreviousBlockhash: deadline.toString() })), value = _a.value, calldata = _a.calldata; + if (argentWalletContract && trade.inputAmount.currency.isToken) { + return [ + { + address: argentWalletContract.address, + calldata: argentWalletContract.interface.encodeFunctionData('wc_multiCall', [ + [ + approveAmountCalldata(trade.maximumAmountIn(allowedSlippage), swapRouterAddress), + { + to: swapRouterAddress, + value: value, + data: calldata, + }, + ], + ]), + value: '0x0', + }, + ]; + } + return [ + { + address: swapRouterAddress, + calldata: calldata, + value: value, + }, + ]; + } + }, [ + trade, + recipient, + library, + account, + chainId, + deadline, + routerContract, + allowedSlippage, + argentWalletContract, + signatureData, + ]); +} + +/** + * This is hacking out the revert reason from the ethers provider thrown error however it can. + * This object seems to be undocumented by ethers. + * @param error an error from the ethers provider + */ +function swapErrorToUserReadableMessage(error) { + var _a, _b, _c, _d; + var reason; + while (Boolean(error)) { + reason = (_b = (_a = error.reason) !== null && _a !== void 0 ? _a : error.message) !== null && _b !== void 0 ? _b : reason; + error = (_c = error.error) !== null && _c !== void 0 ? _c : (_d = error.data) === null || _d === void 0 ? void 0 : _d.originalError; + } + if ((reason === null || reason === void 0 ? void 0 : reason.indexOf('execution reverted: ')) === 0) + reason = reason.substr('execution reverted: '.length); + switch (reason) { + case 'UniswapV2Router: EXPIRED': + return (jsxRuntime.jsx(macro.Trans, { children: "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low." }, void 0)); + case 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT': + case 'UniswapV2Router: EXCESSIVE_INPUT_AMOUNT': + return (jsxRuntime.jsx(macro.Trans, { children: "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance." }, void 0)); + case 'TransferHelper: TRANSFER_FROM_FAILED': + return jsxRuntime.jsx(macro.Trans, { children: "The input token cannot be transferred. There may be an issue with the input token." }, void 0); + case 'UniswapV2: TRANSFER_FAILED': + return jsxRuntime.jsx(macro.Trans, { children: "The output token cannot be transferred. There may be an issue with the output token." }, void 0); + case 'UniswapV2: K': + return (jsxRuntime.jsx(macro.Trans, { children: "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer." }, void 0)); + case 'Too little received': + case 'Too much requested': + case 'STF': + return (jsxRuntime.jsx(macro.Trans, { children: "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3." }, void 0)); + case 'TF': + return (jsxRuntime.jsx(macro.Trans, { children: "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3." }, void 0)); + default: + if ((reason === null || reason === void 0 ? void 0 : reason.indexOf('undefined is not an object')) !== -1) { + console.error(error, reason); + return (jsxRuntime.jsx(macro.Trans, { children: "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3." }, void 0)); + } + return (jsxRuntime.jsxs(macro.Trans, { children: ["Unknown error", reason ? ": \"" + reason + "\"" : '', ". Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3."] }, void 0)); + } } -var _a$8 -// Stablecoin amounts used when calculating spot price for a given currency. -// The amount is large enough to filter low liquidity pairs. -var STABLECOIN_AMOUNT_OUT = - ((_a$8 = {}), - (_a$8[SupportedChainId.MAINNET] = sdkCore.CurrencyAmount.fromRawAmount(USDC, 100000000000)), - (_a$8[SupportedChainId.ARBITRUM_ONE] = sdkCore.CurrencyAmount.fromRawAmount(USDC_ARBITRUM, 10000000000)), - (_a$8[SupportedChainId.OPTIMISM] = sdkCore.CurrencyAmount.fromRawAmount(DAI_OPTIMISM, 1e22)), - (_a$8[SupportedChainId.POLYGON] = sdkCore.CurrencyAmount.fromRawAmount(USDC_POLYGON, 10000000000)), - _a$8) -/** - * Returns the price in USDC of the input currency - * @param currency currency to compute the USDC price of - */ -function useUSDCPrice(currency) { - var chainId = currency === null || currency === void 0 ? void 0 : currency.chainId - var amountOut = chainId ? STABLECOIN_AMOUNT_OUT[chainId] : undefined - var stablecoin = amountOut === null || amountOut === void 0 ? void 0 : amountOut.currency - // TODO(#2808): remove dependency on useBestV2Trade - var v2USDCTrade = useBestV2Trade(sdkCore.TradeType.EXACT_OUTPUT, amountOut, currency, { - maxHops: 2, - }) - var v3USDCTrade = useClientSideV3Trade(sdkCore.TradeType.EXACT_OUTPUT, amountOut, currency) - return React.useMemo( - function () { - if (!currency || !stablecoin) { - return undefined - } - // handle usdc - if (currency === null || currency === void 0 ? void 0 : currency.wrapped.equals(stablecoin)) { - return new sdkCore.Price(stablecoin, stablecoin, '1', '1') - } - // use v2 price if available, v3 as fallback - if (v2USDCTrade) { - var _a = v2USDCTrade.route.midPrice, - numerator = _a.numerator, - denominator = _a.denominator - return new sdkCore.Price(currency, stablecoin, denominator, numerator) - } else if (v3USDCTrade.trade) { - var _b = v3USDCTrade.trade.routes[0].midPrice, - numerator = _b.numerator, - denominator = _b.denominator - return new sdkCore.Price(currency, stablecoin, denominator, numerator) - } - return undefined - }, - [currency, stablecoin, v2USDCTrade, v3USDCTrade.trade] - ) -} -function useUSDCValue(currencyAmount) { - var price = useUSDCPrice(currencyAmount === null || currencyAmount === void 0 ? void 0 : currencyAmount.currency) - return React.useMemo( - function () { - if (!price || !currencyAmount) return null - try { - return price.quote(currencyAmount) - } catch (error) { - return null - } - }, - [currencyAmount, price] - ) -} -/** - * - * @param fiatValue string representation of a USD amount - * @returns CurrencyAmount where currency is stablecoin on active chain - */ -function useStablecoinAmountFromFiatValue(fiatValue) { - var _a - var chainId = useActiveWeb3React().chainId - var stablecoin = chainId - ? (_a = STABLECOIN_AMOUNT_OUT[chainId]) === null || _a === void 0 - ? void 0 - : _a.currency - : undefined - if (fiatValue === null || fiatValue === undefined || !chainId || !stablecoin) { - return undefined - } - // trim for decimal precision when parsing - var parsedForDecimals = parseFloat(fiatValue).toFixed(stablecoin.decimals).toString() - try { - // parse USD string into CurrencyAmount based on stablecoin decimals - return tryParseCurrencyAmount(parsedForDecimals, stablecoin) - } catch (error) { - return undefined - } +// returns a function that will execute a swap, if the parameters are all valid +function useSendSwapTransaction(account, chainId, library, trade, // trade to execute, required +swapCalls) { + return React.useMemo(function () { + if (!trade || !library || !account || !chainId) { + return { callback: null }; + } + return { + callback: function onSwap() { + return __awaiter(this, void 0, void 0, function () { + var estimatedCalls, bestCallOption, errorCalls, firstNoErrorCall, _a, address, calldata, value; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: return [4 /*yield*/, Promise.all(swapCalls.map(function (call) { + var address = call.address, calldata = call.calldata, value = call.value; + var tx = !value || isZero(value) + ? { from: account, to: address, data: calldata } + : { + from: account, + to: address, + data: calldata, + value: value, + }; + return library + .estimateGas(tx) + .then(function (gasEstimate) { + return { + call: call, + gasEstimate: gasEstimate, + }; + }) + .catch(function (gasError) { + console.debug('Gas estimate failed, trying eth_call to extract error', call); + return library + .call(tx) + .then(function (result) { + console.debug('Unexpected successful call after failed estimate gas', call, gasError, result); + return { call: call, error: jsxRuntime.jsx(macro.Trans, { children: "Unexpected issue with estimating the gas. Please try again." }, void 0) }; + }) + .catch(function (callError) { + console.debug('Call threw error', call, callError); + return { call: call, error: swapErrorToUserReadableMessage(callError) }; + }); + }); + })) + // a successful estimation is a bignumber gas estimate and the next call is also a bignumber gas estimate + ]; + case 1: + estimatedCalls = _b.sent(); + bestCallOption = estimatedCalls.find(function (el, ix, list) { + return 'gasEstimate' in el && (ix === list.length - 1 || 'gasEstimate' in list[ix + 1]); + }); + // check if any calls errored with a recognizable error + if (!bestCallOption) { + errorCalls = estimatedCalls.filter(function (call) { return 'error' in call; }); + if (errorCalls.length > 0) + throw errorCalls[errorCalls.length - 1].error; + firstNoErrorCall = estimatedCalls.find(function (call) { return !('error' in call); }); + if (!firstNoErrorCall) + throw new Error(macro.t(templateObject_1$v || (templateObject_1$v = __makeTemplateObject(["Unexpected error. Could not estimate gas for the swap."], ["Unexpected error. Could not estimate gas for the swap."])))); + bestCallOption = firstNoErrorCall; + } + _a = bestCallOption.call, address = _a.address, calldata = _a.calldata, value = _a.value; + return [2 /*return*/, library + .getSigner() + .sendTransaction(__assign(__assign({ from: account, to: address, data: calldata }, ('gasEstimate' in bestCallOption ? { gasLimit: calculateGasMargin(bestCallOption.gasEstimate) } : {})), (value && !isZero(value) ? { value: value } : {}))) + .then(function (response) { + return response; + }) + .catch(function (error) { + // if the user rejected the tx, pass this along + if ((error === null || error === void 0 ? void 0 : error.code) === 4001) { + throw new Error(macro.t(templateObject_2$j || (templateObject_2$j = __makeTemplateObject(["Transaction rejected."], ["Transaction rejected."])))); + } + else { + // otherwise, the error was unexpected and we need to convey that + console.error("Swap failed", error, address, calldata, value); + throw new Error(macro.t(templateObject_3$g || (templateObject_3$g = __makeTemplateObject(["Swap failed: ", ""], ["Swap failed: ", ""])), swapErrorToUserReadableMessage(error))); + } + })]; + } + }); + }); + }, + }; + }, [account, chainId, library, swapCalls, trade]); +} +var templateObject_1$v, templateObject_2$j, templateObject_3$g; + +var SwapCallbackState; +(function (SwapCallbackState) { + SwapCallbackState[SwapCallbackState["INVALID"] = 0] = "INVALID"; + SwapCallbackState[SwapCallbackState["LOADING"] = 1] = "LOADING"; + SwapCallbackState[SwapCallbackState["VALID"] = 2] = "VALID"; +})(SwapCallbackState || (SwapCallbackState = {})); +// returns a function that will execute a swap, if the parameters are all valid +// and the user has approved the slippage adjusted input amount for the trade +function useSwapCallback$1(trade, // trade to execute, required +allowedSlippage, // in bips +recipientAddressOrName, // the ENS name or address of the recipient of the trade, or null if swap should be returned to sender +signatureData, deadline) { + var _a = useActiveWeb3React(), account = _a.account, chainId = _a.chainId, library = _a.library; + var swapCalls = useSwapCallArguments(trade, allowedSlippage, recipientAddressOrName, signatureData, deadline); + var callback = useSendSwapTransaction(account, chainId, library, trade, swapCalls).callback; + var recipientAddress = useENS(recipientAddressOrName).address; + var recipient = recipientAddressOrName === null ? account : recipientAddress; + return React.useMemo(function () { + if (!trade || !library || !account || !chainId || !callback) { + return { state: SwapCallbackState.INVALID, callback: null, error: jsxRuntime.jsx(macro.Trans, { children: "Missing dependencies" }, void 0) }; + } + if (!recipient) { + if (recipientAddressOrName !== null) { + return { state: SwapCallbackState.INVALID, callback: null, error: jsxRuntime.jsx(macro.Trans, { children: "Invalid recipient" }, void 0) }; + } + else { + return { state: SwapCallbackState.LOADING, callback: null, error: null }; + } + } + return { + state: SwapCallbackState.VALID, + callback: function onSwap() { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, callback().then(function (response) { + return response; + })]; + }); + }); + }, + error: null, + }; + }, [trade, library, account, chainId, callback, recipient, recipientAddressOrName]); } -var StyledPriceContainer = styled__default['default'].button( - templateObject_1$N || - (templateObject_1$N = __makeTemplateObject( - [ - '\n background-color: transparent;\n border: none;\n cursor: pointer;\n align-items: center;\n justify-content: flex-start;\n padding: 0;\n grid-template-columns: 1fr auto;\n grid-gap: 0.25rem;\n display: flex;\n flex-direction: row;\n text-align: left;\n flex-wrap: wrap;\n padding: 8px 0;\n user-select: text;\n', - ], - [ - '\n background-color: transparent;\n border: none;\n cursor: pointer;\n align-items: center;\n justify-content: flex-start;\n padding: 0;\n grid-template-columns: 1fr auto;\n grid-gap: 0.25rem;\n display: flex;\n flex-direction: row;\n text-align: left;\n flex-wrap: wrap;\n padding: 8px 0;\n user-select: text;\n', - ] - )) -) -function TradePrice(_a) { - var _b, _c, _d, _e, _f, _g - var price = _a.price, - showInverted = _a.showInverted, - setShowInverted = _a.setShowInverted - var theme = React.useContext(styled.ThemeContext) - var usdcPrice = useUSDCPrice(showInverted ? price.baseCurrency : price.quoteCurrency) - var formattedPrice - try { - formattedPrice = showInverted - ? price.toSignificant(4) - : (_b = price.invert()) === null || _b === void 0 - ? void 0 - : _b.toSignificant(4) - } catch (error) { - formattedPrice = '0' - } - var label = showInverted - ? '' + ((_c = price.quoteCurrency) === null || _c === void 0 ? void 0 : _c.symbol) - : ((_d = price.baseCurrency) === null || _d === void 0 ? void 0 : _d.symbol) + ' ' - var labelInverted = showInverted - ? ((_e = price.baseCurrency) === null || _e === void 0 ? void 0 : _e.symbol) + ' ' - : '' + ((_f = price.quoteCurrency) === null || _f === void 0 ? void 0 : _f.symbol) - var flipPrice = React.useCallback( - function () { - return setShowInverted(!showInverted) - }, - [setShowInverted, showInverted] - ) - var text = ((_g = '1 ' + labelInverted + ' = ' + formattedPrice) !== null && _g !== void 0 ? _g : '-') + ' ' + label - return jsxRuntime.jsxs( - StyledPriceContainer, - __assign( - { - onClick(e) { - e.stopPropagation() // dont want this click to affect dropdowns / hovers - flipPrice() - }, - title: text, - }, - { - children: [ - jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, color: theme.text1 }, { children: text }), void 0), - ' ', - usdcPrice && - jsxRuntime.jsx( - ThemedText.DarkGray, - { - children: jsxRuntime.jsxs( - macro.Trans, - { children: ['($', usdcPrice.toSignificant(6, { groupSeparator: ',' }), ')'] }, - void 0 - ), - }, - void 0 - ), - ], - } - ), - void 0 - ) -} -var templateObject_1$N - -var Wrapper$d = styled__default['default'].div( - templateObject_1$M || - (templateObject_1$M = __makeTemplateObject( - ['\n position: relative;\n padding: 8px;\n'], - ['\n position: relative;\n padding: 8px;\n'] - )) -) -var ArrowWrapper$1 = styled__default['default'].div( - templateObject_3$p || - (templateObject_3$p = __makeTemplateObject( - [ - '\n padding: 4px;\n border-radius: 12px;\n height: 32px;\n width: 32px;\n position: relative;\n margin-top: -14px;\n margin-bottom: -14px;\n left: calc(50% - 16px);\n /* transform: rotate(90deg); */\n background-color: ', - ';\n border: 4px solid ', - ';\n z-index: 2;\n ', - '\n', - ], - [ - '\n padding: 4px;\n border-radius: 12px;\n height: 32px;\n width: 32px;\n position: relative;\n margin-top: -14px;\n margin-bottom: -14px;\n left: calc(50% - 16px);\n /* transform: rotate(90deg); */\n background-color: ', - ';\n border: 4px solid ', - ';\n z-index: 2;\n ', - '\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.bg1 - }, - function (_a) { - var theme = _a.theme - return theme.bg0 - }, - function (_a) { - var clickable = _a.clickable - return clickable - ? styled.css( - templateObject_2$w || - (templateObject_2$w = __makeTemplateObject( - ['\n :hover {\n cursor: pointer;\n opacity: 0.8;\n }\n '], - ['\n :hover {\n cursor: pointer;\n opacity: 0.8;\n }\n '] - )) - ) - : null - } -) -var SectionBreak = styled__default['default'].div( - templateObject_4$g || - (templateObject_4$g = __makeTemplateObject( - ['\n height: 1px;\n width: 100%;\n background-color: ', ';\n'], - ['\n height: 1px;\n width: 100%;\n background-color: ', ';\n'] - )), - function (_a) { - var theme = _a.theme - return theme.bg3 - } -) -var ErrorText = styled__default['default'](rebass.Text)( - templateObject_5$e || (templateObject_5$e = __makeTemplateObject(['\n color: ', ';\n'], ['\n color: ', ';\n'])), - function (_a) { - var theme = _a.theme, - severity = _a.severity - return severity === 3 || severity === 4 - ? theme.red1 - : severity === 2 - ? theme.yellow2 - : severity === 1 - ? theme.text1 - : theme.text2 - } -) -var TruncatedText = styled__default['default'](rebass.Text)( - templateObject_6$a || - (templateObject_6$a = __makeTemplateObject( - ['\n text-overflow: ellipsis;\n max-width: 220px;\n overflow: hidden;\n text-align: right;\n'], - [ - '\n text-overflow: ellipsis;\n max-width: 220px;\n overflow: hidden;\n text-align: right;\n', - // styles - ] - )) -) -// styles -styled__default['default'].span( - templateObject_7$9 || - (templateObject_7$9 = __makeTemplateObject( - [ - "\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 &::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", - ] - )) -) -var SwapCallbackErrorInner = styled__default['default'].div( - templateObject_8$6 || - (templateObject_8$6 = __makeTemplateObject( - [ - '\n background-color: ', - ';\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: ', - ';\n z-index: -1;\n p {\n padding: 0;\n margin: 0;\n font-weight: 500;\n }\n', - ], - [ - '\n background-color: ', - ';\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: ', - ';\n z-index: -1;\n p {\n padding: 0;\n margin: 0;\n font-weight: 500;\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return polished.transparentize(0.9, theme.red1) - }, - function (_a) { - var theme = _a.theme - return theme.red1 - } -) -var SwapCallbackErrorInnerAlertTriangle = styled__default['default'].div( - templateObject_9$6 || - (templateObject_9$6 = __makeTemplateObject( - [ - '\n background-color: ', - ';\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 background-color: ', - ';\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', - ] - )), - function (_a) { - var theme = _a.theme - return polished.transparentize(0.9, theme.red1) - } -) -function SwapCallbackError(_a) { - var error = _a.error - return jsxRuntime.jsxs( - SwapCallbackErrorInner, - { - children: [ - jsxRuntime.jsx( - SwapCallbackErrorInnerAlertTriangle, - { children: jsxRuntime.jsx(reactFeather.AlertTriangle, { size: 24 }, void 0) }, - void 0 - ), - jsxRuntime.jsx('p', __assign({ style: { wordBreak: 'break-word' } }, { children: error }), void 0), - ], - }, - void 0 - ) -} -var SwapShowAcceptChanges = styled__default['default'](AutoColumn)( - templateObject_10$5 || - (templateObject_10$5 = __makeTemplateObject( - ['\n background-color: ', ';\n color: ', ';\n padding: 0.5rem;\n border-radius: 12px;\n margin-top: 8px;\n'], - ['\n background-color: ', ';\n color: ', ';\n padding: 0.5rem;\n border-radius: 12px;\n margin-top: 8px;\n'] - )), - function (_a) { - var theme = _a.theme - return polished.transparentize(0.95, theme.primary3) - }, - function (_a) { - var theme = _a.theme - return theme.primaryText1 - } -) -styled__default['default'](ThemedText.Black)( - templateObject_11$4 || - (templateObject_11$4 = __makeTemplateObject( - ['\n border-bottom: 1px solid ', ';\n padding-bottom: 0.5rem;\n'], - ['\n border-bottom: 1px solid ', ';\n padding-bottom: 0.5rem;\n'] - )), - function (_a) { - var theme = _a.theme - return theme.bg2 - } -) -var ResponsiveTooltipContainer = styled__default['default'](TooltipContainer)( - templateObject_13$1 || - (templateObject_13$1 = __makeTemplateObject( - ['\n background-color: ', ';\n border: 1px solid ', ';\n padding: 1rem;\n width: ', ';\n\n ', '\n'], - ['\n background-color: ', ';\n border: 1px solid ', ';\n padding: 1rem;\n width: ', ';\n\n ', '\n'] - )), - function (_a) { - var theme = _a.theme - return theme.bg0 - }, - function (_a) { - var theme = _a.theme - return theme.bg2 - }, - function (_a) { - var width = _a.width - return width !== null && width !== void 0 ? width : 'auto' - }, - function (_a) { - var theme = _a.theme, - origin = _a.origin - return theme.mediaWidth.upToExtraSmall( - templateObject_12$4 || - (templateObject_12$4 = __makeTemplateObject( - ['\n transform: scale(0.8);\n transform-origin: ', ';\n '], - ['\n transform: scale(0.8);\n transform-origin: ', ';\n '] - )), - origin !== null && origin !== void 0 ? origin : 'top left' - ) - } -) -styled__default['default'](TradePrice)( - templateObject_14$1 || (templateObject_14$1 = __makeTemplateObject(['\n ', '\n'], ['\n ', '\n'])), - loadingOpacityMixin -) -var templateObject_1$M, - templateObject_2$w, - templateObject_3$p, - templateObject_4$g, - templateObject_5$e, - templateObject_6$a, - templateObject_7$9, - templateObject_8$6, - templateObject_9$6, - templateObject_10$5, - templateObject_11$4, - templateObject_12$4, - templateObject_13$1, - templateObject_14$1 - -/** - * Formatted version of price impact text with warning colors - */ -function FormattedPriceImpact(_a) { - var priceImpact = _a.priceImpact - return jsxRuntime.jsx( - ErrorText, - __assign( - { fontWeight: 500, fontSize: 14, severity: warningSeverity(priceImpact) }, - { children: priceImpact ? priceImpact.multiply(-1).toFixed(2) + '%' : '-' } - ), - void 0 - ) +function currencyId(currency) { + if (currency.isNative) + return 'ETH'; + if (currency.isToken) + return currency.address; + throw new Error('invalid currency'); } -var StyledCard$1 = styled__default['default'](Card)( - templateObject_1$L || (templateObject_1$L = __makeTemplateObject(['\n padding: 0;\n'], ['\n padding: 0;\n'])) -) -function TextWithLoadingPlaceholder(_a) { - var syncing = _a.syncing, - width = _a.width, - children = _a.children - return syncing - ? jsxRuntime.jsx( - LoadingRows, - { children: jsxRuntime.jsx('div', { style: { height: '15px', width: width + 'px' } }, void 0) }, - void 0 - ) - : children -} -function AdvancedSwapDetails(_a) { - var trade = _a.trade, - allowedSlippage = _a.allowedSlippage, - _b = _a.syncing, - syncing = _b === void 0 ? false : _b - var theme = React.useContext(styled.ThemeContext) - var chainId = useActiveWeb3React().chainId - var _c = React.useMemo( - function () { - if (!trade) return { expectedOutputAmount: undefined, priceImpact: undefined } - var expectedOutputAmount = trade.outputAmount - var realizedLpFeePercent = computeRealizedLPFeePercent(trade) - var priceImpact = trade.priceImpact.subtract(realizedLpFeePercent) - return { expectedOutputAmount, priceImpact } - }, - [trade] - ), - expectedOutputAmount = _c.expectedOutputAmount, - priceImpact = _c.priceImpact - return !trade - ? null - : jsxRuntime.jsx( - StyledCard$1, - { - children: jsxRuntime.jsxs( - AutoColumn, - __assign( - { gap: '8px' }, - { - children: [ - jsxRuntime.jsxs( - RowBetween, - { - children: [ - jsxRuntime.jsx( - RowFixed, - { - children: jsxRuntime.jsx( - ThemedText.SubHeader, - __assign( - { color: theme.text1 }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'Expected Output' }, void 0) } - ), - void 0 - ), - }, - void 0 - ), - jsxRuntime.jsx( - TextWithLoadingPlaceholder, - __assign( - { syncing, width: 65 }, - { - children: jsxRuntime.jsx( - ThemedText.Black, - __assign( - { textAlign: 'right', fontSize: 14 }, - { - children: expectedOutputAmount - ? expectedOutputAmount.toSignificant(6) + - ' ' + - expectedOutputAmount.currency.symbol - : '-', - } - ), - void 0 - ), - } - ), - void 0 - ), - ], - }, - void 0 - ), - jsxRuntime.jsxs( - RowBetween, - { - children: [ - jsxRuntime.jsx( - RowFixed, - { - children: jsxRuntime.jsx( - ThemedText.SubHeader, - __assign( - { color: theme.text1 }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'Price Impact' }, void 0) } - ), - void 0 - ), - }, - void 0 - ), - jsxRuntime.jsx( - TextWithLoadingPlaceholder, - __assign( - { syncing, width: 50 }, - { - children: jsxRuntime.jsx( - ThemedText.Black, - __assign( - { textAlign: 'right', fontSize: 14 }, - { - children: jsxRuntime.jsx(FormattedPriceImpact, { priceImpact }, void 0), - } - ), - void 0 - ), - } - ), - void 0 - ), - ], - }, - void 0 - ), - jsxRuntime.jsx(Separator$1, {}, void 0), - jsxRuntime.jsxs( - RowBetween, - { - children: [ - jsxRuntime.jsx( - RowFixed, - __assign( - { style: { marginRight: '20px' } }, - { - children: jsxRuntime.jsxs( - ThemedText.SubHeader, - __assign( - { color: theme.text3 }, - { - children: [ - trade.tradeType === sdkCore.TradeType.EXACT_INPUT - ? jsxRuntime.jsx(macro.Trans, { children: 'Minimum received' }, void 0) - : jsxRuntime.jsx(macro.Trans, { children: 'Maximum sent' }, void 0), - ' ', - jsxRuntime.jsx(macro.Trans, { children: 'after slippage' }, void 0), - ' (', - allowedSlippage.toFixed(2), - '%)', - ], - } - ), - void 0 - ), - } - ), - void 0 - ), - jsxRuntime.jsx( - TextWithLoadingPlaceholder, - __assign( - { syncing, width: 70 }, - { - children: jsxRuntime.jsx( - ThemedText.Black, - __assign( - { textAlign: 'right', fontSize: 14, color: theme.text3 }, - { - children: - trade.tradeType === sdkCore.TradeType.EXACT_INPUT - ? trade.minimumAmountOut(allowedSlippage).toSignificant(6) + - ' ' + - trade.outputAmount.currency.symbol - : trade.maximumAmountIn(allowedSlippage).toSignificant(6) + - ' ' + - trade.inputAmount.currency.symbol, - } - ), - void 0 - ), - } - ), - void 0 - ), - ], - }, - void 0 - ), - !(trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) || - !chainId || - !SUPPORTED_GAS_ESTIMATE_CHAIN_IDS.includes(chainId) - ? null - : jsxRuntime.jsxs( - RowBetween, - { - children: [ - jsxRuntime.jsx( - ThemedText.SubHeader, - __assign( - { color: theme.text3 }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'Network Fee' }, void 0) } - ), - void 0 - ), - jsxRuntime.jsx( - TextWithLoadingPlaceholder, - __assign( - { syncing, width: 50 }, - { - children: jsxRuntime.jsxs( - ThemedText.Black, - __assign( - { textAlign: 'right', fontSize: 14, color: theme.text3 }, - { children: ['~$', trade.gasUseEstimateUSD.toFixed(2)] } - ), - void 0 - ), - } - ), - void 0 - ), - ], - }, - void 0 - ), - ], - } - ), - void 0 - ), - }, - void 0 - ) -} -var templateObject_1$L - -var _path$3, _line$1, _line2, _path2 - -function _extends$4() { - _extends$4 = - 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$4.apply(this, arguments) +// combines the block timestamp with the user setting to give the deadline that should be used for any submitted transaction +function useTransactionDeadline() { + var chainId = useActiveWeb3React().chainId; + var ttl = useAppSelector(function (state) { return state.user.userDeadline; }); + var blockTimestamp = useCurrentBlockTimestamp(); + return React.useMemo(function () { + if (blockTimestamp && chainId && L2_CHAIN_IDS.includes(chainId)) + return blockTimestamp.add(L2_DEADLINE_FROM_NOW); + if (blockTimestamp && ttl) + return blockTimestamp.add(ttl); + return undefined; + }, [blockTimestamp, chainId, ttl]); } -var SvgGasIcon = function SvgGasIcon(props) { - return /*#__PURE__*/ React__namespace.createElement( - 'svg', - _extends$4( - { - width: 16, - height: 16, - viewBox: '0 0 16 16', - fill: 'none', - xmlns: 'http://www.w3.org/2000/svg', - }, - props - ), - _path$3 || - (_path$3 = /*#__PURE__*/ React__namespace.createElement('path', { - d: 'M10.0047 9.26921H10.2714C11.0078 9.26921 11.6047 9.86617 11.6047 10.6025V12.1359C11.6047 12.7987 12.142 13.3359 12.8047 13.3359C13.4675 13.3359 14.0047 12.7995 14.0047 12.1367V5.22059C14.0047 4.86697 13.7758 4.56227 13.5258 4.31223L10.6714 1.33594M4.00472 2.00254H8.00472C8.7411 2.00254 9.33805 2.59949 9.33805 3.33587V14.0015H2.67139V3.33587C2.67139 2.59949 3.26834 2.00254 4.00472 2.00254ZM14.0047 5.33587C14.0047 6.07225 13.4078 6.66921 12.6714 6.66921C11.935 6.66921 11.3381 6.07225 11.3381 5.33587C11.3381 4.59949 11.935 4.00254 12.6714 4.00254C13.4078 4.00254 14.0047 4.59949 14.0047 5.33587Z', - stroke: 'white', - })), - _line$1 || - (_line$1 = /*#__PURE__*/ React__namespace.createElement('line', { - x1: 4, - y1: 9.99414, - x2: 8, - y2: 9.99414, - stroke: 'white', - })), - _line2 || - (_line2 = /*#__PURE__*/ React__namespace.createElement('line', { - x1: 4, - y1: 11.9941, - x2: 8, - y2: 11.9941, - stroke: 'white', - })), - _path2 || - (_path2 = /*#__PURE__*/ React__namespace.createElement('path', { - d: 'M4 8.16113H8', - stroke: 'white', - })) - ) +// eslint-disable-next-line no-restricted-imports +// returns a function that will execute a swap, if the parameters are all valid +// and the user has approved the slippage adjusted input amount for the trade +function useSwapCallback(trade, // trade to execute, required +allowedSlippage, // in bips +recipientAddressOrName, // the ENS name or address of the recipient of the trade, or null if swap should be returned to sender +signatureData) { + var account = useActiveWeb3React().account; + var deadline = useTransactionDeadline(); + var addTransaction = useTransactionAdder(); + var recipientAddress = useENS(recipientAddressOrName).address; + var recipient = recipientAddressOrName === null ? account : recipientAddress; + var _a = useSwapCallback$1(trade, allowedSlippage, recipient, signatureData, deadline), state = _a.state, libCallback = _a.callback, error = _a.error; + var callback = React.useMemo(function () { + if (!libCallback || !trade) { + return null; + } + return function () { + return libCallback().then(function (response) { + addTransaction(response, trade.tradeType === sdkCore.TradeType.EXACT_INPUT + ? { + type: TransactionType.SWAP, + tradeType: sdkCore.TradeType.EXACT_INPUT, + inputCurrencyId: currencyId(trade.inputAmount.currency), + inputCurrencyAmountRaw: trade.inputAmount.quotient.toString(), + expectedOutputCurrencyAmountRaw: trade.outputAmount.quotient.toString(), + outputCurrencyId: currencyId(trade.outputAmount.currency), + minimumOutputCurrencyAmountRaw: trade.minimumAmountOut(allowedSlippage).quotient.toString(), + } + : { + type: TransactionType.SWAP, + tradeType: sdkCore.TradeType.EXACT_OUTPUT, + inputCurrencyId: currencyId(trade.inputAmount.currency), + maximumInputCurrencyAmountRaw: trade.maximumAmountIn(allowedSlippage).quotient.toString(), + outputCurrencyId: currencyId(trade.outputAmount.currency), + outputCurrencyAmountRaw: trade.outputAmount.quotient.toString(), + expectedInputCurrencyAmountRaw: trade.inputAmount.quotient.toString(), + }); + return response.hash; + }); + }; + }, [addTransaction, allowedSlippage, libCallback, trade]); + return { + state: state, + callback: callback, + error: error, + }; } -var BadgeVariant -;(function (BadgeVariant) { - BadgeVariant['DEFAULT'] = 'DEFAULT' - BadgeVariant['NEGATIVE'] = 'NEGATIVE' - BadgeVariant['POSITIVE'] = 'POSITIVE' - BadgeVariant['PRIMARY'] = 'PRIMARY' - BadgeVariant['WARNING'] = 'WARNING' - BadgeVariant['WARNING_OUTLINE'] = 'WARNING_OUTLINE' -})(BadgeVariant || (BadgeVariant = {})) -function pickBackgroundColor(variant, theme) { - switch (variant) { - case BadgeVariant.NEGATIVE: - return theme.error - case BadgeVariant.POSITIVE: - return theme.success - case BadgeVariant.PRIMARY: - return theme.primary1 - case BadgeVariant.WARNING: - return theme.warning - case BadgeVariant.WARNING_OUTLINE: - return 'transparent' - default: - return theme.bg2 - } -} -function pickBorder(variant, theme) { - switch (variant) { - case BadgeVariant.WARNING_OUTLINE: - return '1px solid ' + theme.warning - default: - return 'unset' - } -} -function pickFontColor(variant, theme) { - switch (variant) { - case BadgeVariant.NEGATIVE: - return polished.readableColor(theme.error) - case BadgeVariant.POSITIVE: - return polished.readableColor(theme.success) - case BadgeVariant.WARNING: - return polished.readableColor(theme.warning) - case BadgeVariant.WARNING_OUTLINE: - return theme.warning - default: - return polished.readableColor(theme.bg2) - } -} -var Badge = styled__default['default'].div( - templateObject_1$K || - (templateObject_1$K = __makeTemplateObject( - [ - '\n align-items: center;\n background-color: ', - ';\n border: ', - ';\n border-radius: 0.5rem;\n color: ', - ';\n display: inline-flex;\n padding: 4px 6px;\n justify-content: center;\n font-weight: 500;\n', - ], - [ - '\n align-items: center;\n background-color: ', - ';\n border: ', - ';\n border-radius: 0.5rem;\n color: ', - ';\n display: inline-flex;\n padding: 4px 6px;\n justify-content: center;\n font-weight: 500;\n', - ] - )), - function (_a) { - var theme = _a.theme, - variant = _a.variant - return pickBackgroundColor(variant, theme) - }, - function (_a) { - var theme = _a.theme, - variant = _a.variant - return pickBorder(variant, theme) - }, - function (_a) { - var theme = _a.theme, - variant = _a.variant - return pickFontColor(variant, theme) - } -) -var templateObject_1$K - -function safeNamehash(name) { - if (name === undefined) return undefined - try { - return hash.namehash(name) - } catch (error) { - console.debug(error) - return undefined - } +function formatCurrencyAmount(amount, sigFigs) { + if (!amount) { + return '-'; + } + if (JSBI__default["default"].equal(amount.quotient, JSBI__default["default"].BigInt(0))) { + return '0'; + } + if (amount.divide(amount.decimalScale).lessThan(new sdkCore.Fraction(1, 100000))) { + return '<0.00001'; + } + return amount.toSignificant(sigFigs); } -/** - * Returns true if the string value is zero in hex - * @param hexNumberString - */ -function isZero(hexNumberString) { - return /^0x0*$/.test(hexNumberString) -} +var _path; -/** - * Does a lookup for an ENS name to find its contenthash. - */ -function useENSContentHash(ensName) { - var _a - var ensNodeArgument = React.useMemo( - function () { - return [ensName === null ? undefined : safeNamehash(ensName)] - }, - [ensName] - ) - var registrarContract = useENSRegistrarContract(false) - var resolverAddressResult = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument) - var resolverAddress = (_a = resolverAddressResult.result) === null || _a === void 0 ? void 0 : _a[0] - var resolverContract = useENSResolverContract( - resolverAddress && isZero(resolverAddress) ? undefined : resolverAddress, - false - ) - var contenthash = useSingleCallResult(resolverContract, 'contenthash', ensNodeArgument) - return React.useMemo( - function () { - var _a, _b - return { - contenthash: - (_b = (_a = contenthash.result) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 - ? _b - : null, - loading: resolverAddressResult.loading || contenthash.loading, - } - }, - [contenthash.loading, contenthash.result, resolverAddressResult.loading] - ) -} +function _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); } -function useHttpLocations(uri) { - var ens = React.useMemo( - function () { - return uri ? parseENSAddress(uri) : undefined - }, - [uri] - ) - var resolvedContentHash = useENSContentHash(ens === null || ens === void 0 ? void 0 : ens.ensName) - return React.useMemo( - function () { - if (ens) { - return resolvedContentHash.contenthash ? uriToHttp(contenthashToUri(resolvedContentHash.contenthash)) : [] - } else { - return uri ? uriToHttp(uri) : [] - } - }, - [ens, resolvedContentHash.contenthash, uri] - ) -} +var SvgDropdown = function SvgDropdown(props) { + return /*#__PURE__*/React__namespace.createElement("svg", _extends({ + width: 12, + height: 7, + viewBox: "0 0 12 7", + fill: "none", + xmlns: "http://www.w3.org/2000/svg" + }, props), _path || (_path = /*#__PURE__*/React__namespace.createElement("path", { + d: "M0.97168 1L6.20532 6L11.439 1", + stroke: "#AEAEAE" + }))); +}; -var MaticLogo = - 'data:image/svg+xml,%3Csvg%20width%3D%221024%22%20height%3D%221024%22%20viewBox%3D%220%200%201024%201024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Ccircle%20cx%3D%22512%22%20cy%3D%22512%22%20r%3D%22512%22%20fill%3D%22%238247E5%22%2F%3E%3Cpath%20d%3D%22M681.469%20402.456C669.189%20395.312%20653.224%20395.312%20639.716%20402.456L543.928%20457.228L478.842%20492.949L383.055%20547.721C370.774%20554.865%20354.81%20554.865%20341.301%20547.721L265.162%20504.856C252.882%20497.712%20244.286%20484.614%20244.286%20470.325V385.786C244.286%20371.498%20251.654%20358.4%20265.162%20351.256L340.073%20309.581C352.353%20302.437%20368.318%20302.437%20381.827%20309.581L456.737%20351.256C469.018%20358.4%20477.614%20371.498%20477.614%20385.786V440.558L542.7%20403.646V348.874C542.7%20334.586%20535.332%20321.488%20521.824%20314.344L383.055%20235.758C370.774%20228.614%20354.81%20228.614%20341.301%20235.758L200.076%20314.344C186.567%20321.488%20179.199%20334.586%20179.199%20348.874V507.237C179.199%20521.525%20186.567%20534.623%20200.076%20541.767L341.301%20620.353C353.582%20627.498%20369.546%20627.498%20383.055%20620.353L478.842%20566.772L543.928%20529.86L639.716%20476.279C651.996%20469.135%20667.961%20469.135%20681.469%20476.279L756.38%20517.953C768.66%20525.098%20777.257%20538.195%20777.257%20552.484V637.023C777.257%20651.312%20769.888%20664.409%20756.38%20671.553L681.469%20714.419C669.189%20721.563%20653.224%20721.563%20639.716%20714.419L564.805%20672.744C552.525%20665.6%20543.928%20652.502%20543.928%20638.214V583.442L478.842%20620.353V675.125C478.842%20689.414%20486.21%20702.512%20499.719%20709.656L640.944%20788.242C653.224%20795.386%20669.189%20795.386%20682.697%20788.242L823.922%20709.656C836.203%20702.512%20844.799%20689.414%20844.799%20675.125V516.763C844.799%20502.474%20837.431%20489.377%20823.922%20482.232L681.469%20402.456Z%22%20fill%3D%22white%22%2F%3E%3C%2Fsvg%3E' - -function chainIdToNetworkName(networkId) { - switch (networkId) { - case SupportedChainId.MAINNET: - return 'ethereum' - case SupportedChainId.ARBITRUM_ONE: - return 'arbitrum' - case SupportedChainId.OPTIMISM: - return 'optimism' - default: - return 'ethereum' - } -} -function getNativeLogoURI(chainId) { - if (chainId === void 0) { - chainId = SupportedChainId.MAINNET - } - switch (chainId) { - case SupportedChainId.POLYGON_MUMBAI: - case SupportedChainId.POLYGON: - return MaticLogo - default: - return EthereumLogo - } -} -function getTokenLogoURI(address, chainId) { - if (chainId === void 0) { - chainId = SupportedChainId.MAINNET - } - var networkName = chainIdToNetworkName(chainId) - var networksWithUrls = [SupportedChainId.ARBITRUM_ONE, SupportedChainId.MAINNET, SupportedChainId.OPTIMISM] - if (networksWithUrls.includes(chainId)) { - return ( - 'https://raw.githubusercontent.com/Uniswap/assets/master/blockchains/' + - networkName + - '/assets/' + - address + - '/logo.png' - ) - } -} -function useCurrencyLogoURIs(currency) { - var locations = useHttpLocations(currency instanceof WrappedTokenInfo ? currency.logoURI : undefined) - return React.useMemo( - function () { - var logoURIs = __spreadArray([], __read(locations), false) - if (currency) { - if (currency.isNative) { - logoURIs.push(getNativeLogoURI(currency.chainId)) - } else if (currency.isToken) { - var logoURI = getTokenLogoURI(currency.address, currency.chainId) - if (logoURI) { - logoURIs.push(logoURI) - } - } - } - return logoURIs - }, - [currency, locations] - ) -} +var StyledInput = styled__default["default"].input(templateObject_1$u || (templateObject_1$u = __makeTemplateObject(["\n color: ", ";\n width: 0;\n position: relative;\n font-weight: 500;\n outline: none;\n border: none;\n flex: 1 1 auto;\n background-color: ", ";\n font-size: ", ";\n text-align: ", ";\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 0px;\n -webkit-appearance: textfield;\n text-align: right;\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: ", ";\n }\n"], ["\n color: ", ";\n width: 0;\n position: relative;\n font-weight: 500;\n outline: none;\n border: none;\n flex: 1 1 auto;\n background-color: ", ";\n font-size: ", ";\n text-align: ", ";\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 0px;\n -webkit-appearance: textfield;\n text-align: right;\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: ", ";\n }\n"])), function (_a) { + var error = _a.error, theme = _a.theme; + return (error ? theme.red1 : theme.text1); +}, function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var fontSize = _a.fontSize; + return fontSize !== null && fontSize !== void 0 ? fontSize : '28px'; +}, function (_a) { + var align = _a.align; + return align && align; +}, function (_a) { + var theme = _a.theme; + return theme.text4; +}); +var inputRegex = RegExp("^\\d*(?:\\\\[.])?\\d*$"); // match escaped "." characters via in a non-capturing group +var Input$1 = React__default["default"].memo(function InnerInput(_a) { + var value = _a.value, onUserInput = _a.onUserInput, placeholder = _a.placeholder, prependSymbol = _a.prependSymbol, rest = __rest(_a, ["value", "onUserInput", "placeholder", "prependSymbol"]); + var enforcer = function (nextUserInput) { + if (nextUserInput === '' || inputRegex.test(escapeRegExp(nextUserInput))) { + onUserInput(nextUserInput); + } + }; + return (jsxRuntime.jsx(StyledInput, __assign({}, rest, { value: prependSymbol && value ? prependSymbol + value : value, onChange: function (event) { + if (prependSymbol) { + var value_1 = event.target.value; + // cut off prepended symbol + var formattedValue = value_1.toString().includes(prependSymbol) + ? value_1.toString().slice(1, value_1.toString().length + 1) + : value_1; + // replace commas with periods, because uniswap exclusively uses period as the decimal separator + enforcer(formattedValue.replace(/,/g, '.')); + } + else { + enforcer(event.target.value.replace(/,/g, '.')); + } + }, + // universal input options + inputMode: "decimal", autoComplete: "off", autoCorrect: "off", + // text-specific options + type: "text", pattern: "^[0-9]*[.,]?[0-9]*$", placeholder: placeholder || '0.0', minLength: 1, maxLength: 79, spellCheck: "false" }), void 0)); +}); +var templateObject_1$u; -function useTheme() { - return React.useContext(styled.ThemeContext) +/** + * Returns the last value of type T that passes a filter function + * @param value changing value + * @param filterFn function that determines whether a given value should be considered for the last value + */ +function useLast(value, filterFn) { + var _a = __read(React.useState(filterFn && filterFn(value) ? value : undefined), 2), last = _a[0], setLast = _a[1]; + React.useEffect(function () { + setLast(function (last) { + var shouldUse = filterFn ? filterFn(value) : true; + if (shouldUse) + return value; + return last; + }); + }, [filterFn, value]); + return last; } -var BAD_SRCS = {} -/** - * Renders an image by sequentially trying a list of URIs, and then eventually a fallback triangle alert - */ -function Logo(_a) { - var srcs = _a.srcs, - alt = _a.alt, - style = _a.style, - rest = __rest(_a, ['srcs', 'alt', 'style']) - var _b = __read(React.useState(0), 2), - refresh = _b[1] - var theme = useTheme() - var src = srcs.find(function (src) { - return !BAD_SRCS[src] - }) - if (src) { - return jsxRuntime.jsx( - 'img', - __assign({}, rest, { - alt, - src, - style, - onError() { - if (src) BAD_SRCS[src] = true - refresh(function (i) { - return i + 1 - }) - }, - }), - void 0 - ) - } - return jsxRuntime.jsx( - reactFeather.Slash, - __assign({}, rest, { style: __assign(__assign({}, style), { color: theme.bg4 }) }), - void 0 - ) +function useToggle(initialState) { + if (initialState === void 0) { initialState = false; } + var _a = __read(React.useState(initialState), 2), state = _a[0], setState = _a[1]; + var toggle = React.useCallback(function () { return setState(function (state) { return !state; }); }, []); + return [state, toggle]; } -var StyledLogo$1 = styled__default['default'](Logo)( - templateObject_1$J || - (templateObject_1$J = __makeTemplateObject( - [ - '\n width: ', - ';\n height: ', - ';\n background: radial-gradient(white 50%, #ffffff00 calc(75% + 1px), #ffffff00 100%);\n border-radius: 50%;\n -mox-box-shadow: 0 0 1px ', - ';\n -webkit-box-shadow: 0 0 1px ', - ';\n box-shadow: 0 0 1px ', - ';\n border: 0px solid rgba(255, 255, 255, 0);\n', - ], - [ - '\n width: ', - ';\n height: ', - ';\n background: radial-gradient(white 50%, #ffffff00 calc(75% + 1px), #ffffff00 100%);\n border-radius: 50%;\n -mox-box-shadow: 0 0 1px ', - ';\n -webkit-box-shadow: 0 0 1px ', - ';\n box-shadow: 0 0 1px ', - ';\n border: 0px solid rgba(255, 255, 255, 0);\n', - ] - )), - function (_a) { - var size = _a.size - return size - }, - function (_a) { - var size = _a.size - return size - }, - function (_a) { - var native = _a.native - return native ? 'white' : 'black' - }, - function (_a) { - var native = _a.native - return native ? 'white' : 'black' - }, - function (_a) { - var native = _a.native - return native ? 'white' : 'black' - } -) -function CurrencyLogo(_a) { - var _b, _c - var currency = _a.currency, - _d = _a.size, - size = _d === void 0 ? '24px' : _d, - style = _a.style, - rest = __rest(_a, ['currency', 'size', 'style']) - var logoURIs = useCurrencyLogoURIs(currency) - return jsxRuntime.jsx( - StyledLogo$1, - __assign( - { - size, - native: - (_b = currency === null || currency === void 0 ? void 0 : currency.isNative) !== null && _b !== void 0 - ? _b - : false, - srcs: logoURIs, - alt: - ((_c = currency === null || currency === void 0 ? void 0 : currency.symbol) !== null && _c !== void 0 - ? _c - : 'token') + ' logo', - style, - }, - rest - ), - void 0 - ) -} -var templateObject_1$J - -var Wrapper$c = styled__default['default'].div( - templateObject_1$I || - (templateObject_1$I = __makeTemplateObject( - ['\n position: relative;\n display: flex;\n flex-direction: row;\n margin-left: ', ';\n'], - ['\n position: relative;\n display: flex;\n flex-direction: row;\n margin-left: ', ';\n'] - )), - function (_a) { - var sizeraw = _a.sizeraw, - margin = _a.margin - return margin && (sizeraw / 3 + 8).toString() + 'px' - } -) -var HigherLogo = styled__default['default'](CurrencyLogo)( - templateObject_2$v || (templateObject_2$v = __makeTemplateObject(['\n z-index: 2;\n'], ['\n z-index: 2;\n'])) -) -var CoveredLogo = styled__default['default'](CurrencyLogo)( - templateObject_3$o || - (templateObject_3$o = __makeTemplateObject( - ['\n position: absolute;\n left: ', ' !important;\n'], - ['\n position: absolute;\n left: ', ' !important;\n'] - )), - function (_a) { - var sizeraw = _a.sizeraw - return '-' + (sizeraw / 2).toString() + 'px' - } -) -function DoubleCurrencyLogo(_a) { - var currency0 = _a.currency0, - currency1 = _a.currency1, - _b = _a.size, - size = _b === void 0 ? 16 : _b, - _c = _a.margin, - margin = _c === void 0 ? false : _c - return jsxRuntime.jsxs( - Wrapper$c, - __assign( - { sizeraw: size, margin }, - { - children: [ - currency0 && jsxRuntime.jsx(HigherLogo, { currency: currency0, size: size.toString() + 'px' }, void 0), - currency1 && - jsxRuntime.jsx(CoveredLogo, { currency: currency1, size: size.toString() + 'px', sizeraw: size }, void 0), - ], - } - ), - void 0 - ) -} -var templateObject_1$I, templateObject_2$v, templateObject_3$o - -/** - * Returns a WrappedTokenInfo from the active token lists when possible, - * or the passed token otherwise. */ -function useTokenInfoFromActiveList(currency) { - var chainId = useActiveWeb3React().chainId - var activeList = useCombinedActiveList() - return React.useMemo( - function () { - if (!chainId) return - if (currency.isNative) return currency - try { - return activeList[chainId][currency.wrapped.address].token - } catch (e) { - return currency - } - }, - [activeList, chainId, currency] - ) -} +var MobileWrapper = styled__default["default"](AutoColumn)(templateObject_2$i || (templateObject_2$i = __makeTemplateObject(["\n ", ";\n"], ["\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToSmall(templateObject_1$t || (templateObject_1$t = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); +}); +var BaseWrapper = styled__default["default"].div(templateObject_3$f || (templateObject_3$f = __makeTemplateObject(["\n border: 1px solid ", ";\n border-radius: 10px;\n display: flex;\n padding: 6px;\n\n align-items: center;\n :hover {\n cursor: ", ";\n background-color: ", ";\n }\n\n color: ", ";\n background-color: ", ";\n filter: ", ";\n"], ["\n border: 1px solid ", ";\n border-radius: 10px;\n display: flex;\n padding: 6px;\n\n align-items: center;\n :hover {\n cursor: ", ";\n background-color: ", ";\n }\n\n color: ", ";\n background-color: ", ";\n filter: ", ";\n"])), function (_a) { + var theme = _a.theme, disable = _a.disable; + return (disable ? 'transparent' : theme.bg3); +}, function (_a) { + var disable = _a.disable; + return !disable && 'pointer'; +}, function (_a) { + var theme = _a.theme, disable = _a.disable; + return !disable && theme.bg2; +}, function (_a) { + var theme = _a.theme, disable = _a.disable; + return disable && theme.text3; +}, function (_a) { + var theme = _a.theme, disable = _a.disable; + return disable && theme.bg3; +}, function (_a) { + var disable = _a.disable; + return disable && 'grayscale(1)'; +}); +function CommonBases(_a) { + var _b; + var chainId = _a.chainId, onSelect = _a.onSelect, selectedCurrency = _a.selectedCurrency; + var bases = typeof chainId !== 'undefined' ? (_b = COMMON_BASES[chainId]) !== null && _b !== void 0 ? _b : [] : []; + return bases.length > 0 ? (jsxRuntime.jsx(MobileWrapper, __assign({ gap: "md" }, { children: jsxRuntime.jsx(AutoRow, __assign({ gap: "4px" }, { children: bases.map(function (currency) { + var isSelected = selectedCurrency === null || selectedCurrency === void 0 ? void 0 : selectedCurrency.equals(currency); + return (jsxRuntime.jsxs(BaseWrapper, __assign({ onClick: function () { return !isSelected && onSelect(currency); }, disable: isSelected }, { children: [jsxRuntime.jsx(CurrencyLogoFromList, { currency: currency }, void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 16 }, { children: currency.symbol }), void 0)] }), currencyId(currency))); + }) }), void 0) }), void 0)) : null; +} +/** helper component to retrieve a base currency from the active token lists */ +function CurrencyLogoFromList(_a) { + var currency = _a.currency; + var token = useTokenInfoFromActiveList(currency); + return jsxRuntime.jsx(CurrencyLogo, { currency: token, style: { marginRight: 8 } }, void 0); +} +var templateObject_1$t, templateObject_2$i, templateObject_3$f; -var _line - -function _extends$3() { - _extends$3 = - 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$3.apply(this, arguments) -} +var QuestionWrapper = styled__default["default"].div(templateObject_1$s || (templateObject_1$s = __makeTemplateObject(["\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0px;\n width: 18px;\n height: 18px;\n border: none;\n background: none;\n outline: none;\n cursor: default;\n border-radius: 36px;\n font-size: 12px;\n background-color: ", ";\n color: ", ";\n\n :hover,\n :focus {\n opacity: 0.7;\n }\n"], ["\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0px;\n width: 18px;\n height: 18px;\n border: none;\n background: none;\n outline: none;\n cursor: default;\n border-radius: 36px;\n font-size: 12px;\n background-color: ", ";\n color: ", ";\n\n :hover,\n :focus {\n opacity: 0.7;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}, function (_a) { + var theme = _a.theme; + return theme.text2; +}); +var QuestionMark = styled__default["default"].span(templateObject_2$h || (templateObject_2$h = __makeTemplateObject(["\n font-size: 14px;\n"], ["\n font-size: 14px;\n"]))); +function QuestionHelper(_a) { + var text = _a.text; + var _b = __read(React.useState(false), 2), show = _b[0], setShow = _b[1]; + var open = React.useCallback(function () { return setShow(true); }, [setShow]); + var close = React.useCallback(function () { return setShow(false); }, [setShow]); + return (jsxRuntime.jsx("span", __assign({ style: { marginLeft: 4, display: 'flex', alignItems: 'center' } }, { children: jsxRuntime.jsx(Tooltip, __assign({ text: text, show: show }, { children: jsxRuntime.jsx(QuestionWrapper, __assign({ onClick: open, onMouseEnter: open, onMouseLeave: close }, { children: jsxRuntime.jsx(QuestionMark, { children: "?" }, void 0) }), void 0) }), void 0) }), void 0)); +} +var templateObject_1$s, templateObject_2$h; -var SvgDotLine = function SvgDotLine(props) { - return /*#__PURE__*/ React__namespace.createElement( - 'svg', - _extends$3( - { - width: '100%', - height: 35, - viewBox: '800 0 300 200', - xmlns: 'http://www.w3.org/2000/svg', - }, - props - ), - _line || - (_line = /*#__PURE__*/ React__namespace.createElement('line', { - x1: 0, - x2: 2000, - y1: 100, - y2: 100, - stroke: 'currentColor', - strokeWidth: 20, - strokeLinecap: 'round', - strokeDasharray: '1, 45', - })) - ) -} +var TokenListLogo = "data:image/svg+xml,%3Csvg%20width%3D%22225%22%20height%3D%22225%22%20viewBox%3D%220%200%20225%20225%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M74.8125%20190.529C65.7561%20190.513%2055.5298%20183.748%2051.9715%20175.42L19.9417%20100.456C16.3834%2092.1277%2020.8404%2085.39%2029.8968%2085.4068L111.417%2085.5579C120.473%2085.5747%20130.699%2092.3395%20134.258%20100.668L166.288%20175.632C169.846%20183.96%20165.389%20190.697%20156.332%20190.681L74.8125%20190.529Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint0_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint1_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint2_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint3_radial%29%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M92.958%20165.95C82.7695%20165.931%2071.265%20158.321%2067.2619%20148.952L26.2489%2052.9632C22.2458%2043.5941%2027.26%2036.0143%2037.4485%2036.0332L141.832%2036.2266C152.02%2036.2455%20163.525%2043.8559%20167.528%2053.225L208.541%20149.214C212.544%20158.583%20207.53%20166.163%20197.341%20166.144L92.958%20165.95ZM71.3614%20148.959C74.475%20156.246%2083.4229%20162.166%2091.3473%20162.18L195.73%20162.374C203.655%20162.388%20207.555%20156.493%20204.441%20149.206L163.428%2053.2174C160.315%2045.9304%20151.367%2040.0111%20143.442%2039.9964L39.0592%2039.803C31.1349%2039.7883%2027.2349%2045.6837%2030.3485%2052.9708L71.3614%20148.959Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M68.565%2053.3425C81.1781%2053.3659%2095.4205%2062.7875%20100.376%2074.3862C105.332%2085.985%2099.1246%2095.3687%2086.5115%2095.3454C73.8984%2095.322%2059.6559%2085.9004%2054.7001%2074.3016C49.7443%2062.7028%2055.9518%2053.3191%2068.565%2053.3425Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M90.6891%20104.981C103.302%20105.004%20117.545%20114.425%20122.5%20126.024C127.456%20137.623%20121.249%20147.007%20108.636%20146.983C96.0225%20146.96%2081.7801%20137.538%2076.8243%20125.94C71.8685%20114.341%2078.076%20104.957%2090.6891%20104.981Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M147.538%20105.142C160.151%20105.166%20174.394%20114.587%20179.349%20126.186C184.305%20137.785%20178.098%20147.168%20165.485%20147.145C152.871%20147.122%20138.629%20137.7%20133.673%20126.101C128.717%20114.503%20134.925%20105.119%20147.538%20105.142Z%22%20fill%3D%22%23131313%22%2F%3E%3Cdefs%3E%3CradialGradient%20id%3D%22paint0_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%28134.41%2068.3006%29%20rotate%28-33.9533%29%20scale%2890.6795%2083.3208%29%22%3E%3Cstop%20offset%3D%220.661458%22%20stop-color%3D%22%23C4FCF8%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint1_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%2842.7873%20129.218%29%20rotate%28-24.1606%29%20scale%28213.359%20196.045%29%22%3E%3Cstop%20stop-color%3D%22%23FF0099%22%20stop-opacity%3D%220.9%22%2F%3E%3Cstop%20offset%3D%220.770833%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint2_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%28176.854%20148.655%29%20rotate%28-53.4908%29%20scale%28107.342%2098.6309%29%22%3E%3Cstop%20stop-color%3D%22%23FFEC43%22%2F%3E%3Cstop%20offset%3D%220.805707%22%20stop-color%3D%22%23FFF6A8%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint3_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%2857.5443%2053.4752%29%20rotate%2820.3896%29%20scale%28137.027%20125.907%29%22%3E%3Cstop%20offset%3D%220.125%22%20stop-color%3D%22%235886FE%22%20stop-opacity%3D%220.46%22%2F%3E%3Cstop%20offset%3D%220.673044%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3C%2Fdefs%3E%3C%2Fsvg%3E"; -var Wrapper$b = styled__default['default'](rebass.Box)( - templateObject_1$H || - (templateObject_1$H = __makeTemplateObject( - ['\n align-items: center;\n width: 100%;\n'], - ['\n align-items: center;\n width: 100%;\n'] - )) -) -var RouteContainerRow = styled__default['default'](Row)( - templateObject_2$u || - (templateObject_2$u = __makeTemplateObject( - ['\n display: grid;\n grid-template-columns: 24px 1fr 24px;\n'], - ['\n display: grid;\n grid-template-columns: 24px 1fr 24px;\n'] - )) -) -var RouteRow = styled__default['default'](Row)( - templateObject_3$n || - (templateObject_3$n = __makeTemplateObject( - [ - '\n align-items: center;\n display: flex;\n justify-content: center;\n padding: 0.1rem 0.5rem;\n position: relative;\n', - ], - [ - '\n align-items: center;\n display: flex;\n justify-content: center;\n padding: 0.1rem 0.5rem;\n position: relative;\n', - ] - )) -) -var PoolBadge = styled__default['default'](Badge)( - templateObject_4$f || - (templateObject_4$f = __makeTemplateObject( - ['\n display: flex;\n padding: 4px 4px;\n'], - ['\n display: flex;\n padding: 4px 4px;\n'] - )) -) -var DottedLine = styled__default['default'].div( - templateObject_5$d || - (templateObject_5$d = __makeTemplateObject( - [ - '\n display: flex;\n align-items: center;\n position: absolute;\n width: calc(100%);\n z-index: 1;\n opacity: 0.5;\n', - ], - [ - '\n display: flex;\n align-items: center;\n position: absolute;\n width: calc(100%);\n z-index: 1;\n opacity: 0.5;\n', - ] - )) -) -var DotColor = styled__default['default'](SvgDotLine)( - templateObject_6$9 || - (templateObject_6$9 = __makeTemplateObject( - ['\n path {\n stroke: ', ';\n }\n'], - ['\n path {\n stroke: ', ';\n }\n'] - )), - function (_a) { - var theme = _a.theme - return theme.bg4 - } -) -var OpaqueBadge = styled__default['default'](Badge)( - templateObject_7$8 || - (templateObject_7$8 = __makeTemplateObject( - [ - '\n background-color: ', - ';\n border-radius: 8px;\n display: grid;\n font-size: 12px;\n grid-gap: 4px;\n grid-auto-flow: column;\n justify-content: start;\n padding: 4px 6px 4px 4px;\n z-index: ', - ';\n', - ], - [ - '\n background-color: ', - ';\n border-radius: 8px;\n display: grid;\n font-size: 12px;\n grid-gap: 4px;\n grid-auto-flow: column;\n justify-content: start;\n padding: 4px 6px 4px 4px;\n z-index: ', - ';\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.bg2 - }, - Z_INDEX.sticky -) -var ProtocolBadge = styled__default['default'](Badge)( - templateObject_8$5 || - (templateObject_8$5 = __makeTemplateObject( - [ - '\n background-color: ', - ';\n border-radius: 4px;\n color: ', - ';\n font-size: 10px;\n padding: 2px 4px;\n z-index: ', - ';\n', - ], - [ - '\n background-color: ', - ';\n border-radius: 4px;\n color: ', - ';\n font-size: 10px;\n padding: 2px 4px;\n z-index: ', - ';\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.bg3 - }, - function (_a) { - var theme = _a.theme - return theme.text2 - }, - Z_INDEX.sticky + 1 -) -var BadgeText = styled__default['default'](ThemedText.Small)( - templateObject_9$5 || - (templateObject_9$5 = __makeTemplateObject(['\n word-break: normal;\n'], ['\n word-break: normal;\n'])) -) -function RoutingDiagram(_a) { - var currencyIn = _a.currencyIn, - currencyOut = _a.currencyOut, - routes = _a.routes - var tokenIn = useTokenInfoFromActiveList(currencyIn) - var tokenOut = useTokenInfoFromActiveList(currencyOut) - return jsxRuntime.jsx( - Wrapper$b, - { - children: routes.map(function (entry, index) { - return jsxRuntime.jsxs( - RouteContainerRow, - { - children: [ - jsxRuntime.jsx(CurrencyLogo, { currency: tokenIn, size: '20px' }, void 0), - jsxRuntime.jsx(Route, { entry }, void 0), - jsxRuntime.jsx(CurrencyLogo, { currency: tokenOut, size: '20px' }, void 0), - ], - }, - index - ) - }), - }, - void 0 - ) -} -function Route(_a) { - var _b = _a.entry, - percent = _b.percent, - path = _b.path, - protocol = _b.protocol - return jsxRuntime.jsxs( - RouteRow, - { - children: [ - jsxRuntime.jsx(DottedLine, { children: jsxRuntime.jsx(DotColor, {}, void 0) }, void 0), - jsxRuntime.jsxs( - OpaqueBadge, - { - children: [ - jsxRuntime.jsx( - ProtocolBadge, - { - children: jsxRuntime.jsx( - BadgeText, - __assign({ fontSize: 12 }, { children: protocol.toUpperCase() }), - void 0 - ), - }, - void 0 - ), - jsxRuntime.jsxs( - BadgeText, - __assign({ fontSize: 14, style: { minWidth: 'auto' } }, { children: [percent.toSignificant(2), '%'] }), - void 0 - ), - ], - }, - void 0 - ), - jsxRuntime.jsx( - AutoRow, - __assign( - { gap: '1px', width: '100%', style: { justifyContent: 'space-evenly', zIndex: 2 } }, - { - children: path.map(function (_a, index) { - var _b = __read(_a, 3), - currency0 = _b[0], - currency1 = _b[1], - feeAmount = _b[2] - return jsxRuntime.jsx(Pool, { currency0, currency1, feeAmount }, index) - }), - } - ), - void 0 - ), - ], - }, - void 0 - ) -} -function Pool(_a) { - var currency0 = _a.currency0, - currency1 = _a.currency1, - feeAmount = _a.feeAmount - var tokenInfo0 = useTokenInfoFromActiveList(currency0) - var tokenInfo1 = useTokenInfoFromActiveList(currency1) - // TODO - link pool icon to info.uniswap.org via query params - return jsxRuntime.jsx( - MouseoverTooltip, - __assign( - { - text: jsxRuntime.jsxs( - macro.Trans, - { - children: [ - (tokenInfo0 === null || tokenInfo0 === void 0 ? void 0 : tokenInfo0.symbol) + - '/' + - (tokenInfo1 === null || tokenInfo1 === void 0 ? void 0 : tokenInfo1.symbol) + - ' ' + - feeAmount / 10000, - '% pool', - ], - }, - void 0 - ), - }, - { - children: jsxRuntime.jsxs( - PoolBadge, - { - children: [ - jsxRuntime.jsx( - rebass.Box, - __assign( - { margin: '0 4px 0 12px' }, - { - children: jsxRuntime.jsx( - DoubleCurrencyLogo, - { currency0: tokenInfo1, currency1: tokenInfo0, size: 20 }, - void 0 - ), - } - ), - void 0 - ), - jsxRuntime.jsxs( - ThemedText.Small, - __assign({ fontSize: 14 }, { children: [feeAmount / 10000, '%'] }), - void 0 - ), - ], - }, - void 0 - ), - } - ), - void 0 - ) -} -var templateObject_1$H, - templateObject_2$u, - templateObject_3$n, - templateObject_4$f, - templateObject_5$d, - templateObject_6$9, - templateObject_7$8, - templateObject_8$5, - templateObject_9$5 - -var AUTO_ROUTER_SUPPORTED_CHAINS = Object.values(smartOrderRouter.ChainId) - -function useAutoRouterSupported() { - var chainId = useActiveWeb3React().chainId - return Boolean(chainId && AUTO_ROUTER_SUPPORTED_CHAINS.includes(chainId)) -} +var StyledListLogo = styled__default["default"](Logo)(templateObject_1$r || (templateObject_1$r = __makeTemplateObject(["\n width: ", ";\n height: ", ";\n"], ["\n width: ", ";\n height: ", ";\n"])), function (_a) { + var size = _a.size; + return size; +}, function (_a) { + var size = _a.size; + return size; +}); +function ListLogo(_a) { + var logoURI = _a.logoURI, style = _a.style, _b = _a.size, size = _b === void 0 ? '24px' : _b, alt = _a.alt; + var srcs = useHttpLocations(logoURI); + return jsxRuntime.jsx(StyledListLogo, { alt: alt, size: size, srcs: srcs, style: style }, void 0); +} +var templateObject_1$r; -var _defs, _path$2 - -function _extends$2() { - _extends$2 = - 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$2.apply(this, arguments) -} +var TokenSection = styled__default["default"].div(templateObject_1$q || (templateObject_1$q = __makeTemplateObject(["\n padding: 4px 20px;\n height: 56px;\n display: grid;\n grid-template-columns: auto minmax(auto, 1fr) auto;\n grid-gap: 16px;\n align-items: center;\n\n opacity: ", ";\n"], ["\n padding: 4px 20px;\n height: 56px;\n display: grid;\n grid-template-columns: auto minmax(auto, 1fr) auto;\n grid-gap: 16px;\n align-items: center;\n\n opacity: ", ";\n"])), function (_a) { + var dim = _a.dim; + return (dim ? '0.4' : '1'); +}); +var CheckIcon = styled__default["default"](reactFeather.CheckCircle)(templateObject_2$g || (templateObject_2$g = __makeTemplateObject(["\n height: 16px;\n width: 16px;\n margin-right: 6px;\n stroke: ", ";\n"], ["\n height: 16px;\n width: 16px;\n margin-right: 6px;\n stroke: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.green1; +}); +var NameOverflow = styled__default["default"].div(templateObject_3$e || (templateObject_3$e = __makeTemplateObject(["\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 140px;\n font-size: 12px;\n"], ["\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 140px;\n font-size: 12px;\n"]))); +function ImportRow(_a) { + var token = _a.token, style = _a.style, dim = _a.dim, showImportView = _a.showImportView, setImportToken = _a.setImportToken; + var theme = useTheme(); + // check if already active on list or local storage tokens + var isAdded = useIsUserAddedToken(token); + var isActive = useIsTokenActive(token); + var list = token instanceof WrappedTokenInfo ? token.list : undefined; + return (jsxRuntime.jsxs(TokenSection, __assign({ style: style }, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: token, size: '24px', style: { opacity: dim ? '0.6' : '1' } }, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "4px", style: { opacity: dim ? '0.6' : '1' } }, { children: [jsxRuntime.jsxs(AutoRow, { children: [jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 500 }, { children: token.symbol }), void 0), jsxRuntime.jsx(ThemedText.DarkGray, __assign({ ml: "8px", fontWeight: 300 }, { children: jsxRuntime.jsx(NameOverflow, __assign({ title: token.name }, { children: token.name }), void 0) }), void 0)] }, void 0), list && list.logoURI && (jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(ThemedText.Small, __assign({ mr: "4px", color: theme.text3 }, { children: jsxRuntime.jsxs(macro.Trans, { children: ["via ", list.name, " "] }, void 0) }), void 0), jsxRuntime.jsx(ListLogo, { logoURI: list.logoURI, size: "12px" }, void 0)] }, void 0))] }), void 0), !isActive && !isAdded ? (jsxRuntime.jsx(ButtonPrimary, __assign({ width: "fit-content", padding: "6px 12px", fontWeight: 500, fontSize: "14px", onClick: function () { + setImportToken && setImportToken(token); + showImportView(); + } }, { children: jsxRuntime.jsx(macro.Trans, { children: "Import" }, void 0) }), void 0)) : (jsxRuntime.jsxs(RowFixed, __assign({ style: { minWidth: 'fit-content' } }, { children: [jsxRuntime.jsx(CheckIcon, {}, void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ color: theme.green1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Active" }, void 0) }), void 0)] }), void 0))] }), void 0)); +} +var templateObject_1$q, templateObject_2$g, templateObject_3$e; -var SvgAutoRouter = function SvgAutoRouter(props) { - return /*#__PURE__*/ React__namespace.createElement( - 'svg', - _extends$2( - { - width: 23, - height: 20, - viewBox: '0 0 23 20', - fill: 'none', - xmlns: 'http://www.w3.org/2000/svg', - }, - props - ), - _defs || - (_defs = /*#__PURE__*/ React__namespace.createElement( - 'defs', - null, - /*#__PURE__*/ React__namespace.createElement( - 'linearGradient', - { - id: 'gradient1', - x1: 0, - y1: 0, - x2: 1, - y2: 0, - gradientTransform: 'rotate(95)', - }, - /*#__PURE__*/ React__namespace.createElement('stop', { - id: 'stop1', - offset: 0, - stopColor: '#2274E2', - }), - /*#__PURE__*/ React__namespace.createElement('stop', { - id: 'stop1', - offset: 0.5, - stopColor: '#2274E2', - }), - /*#__PURE__*/ React__namespace.createElement('stop', { - id: 'stop2', - offset: 1, - stopColor: '#3FB672', - }) - ) - )), - _path$2 || - (_path$2 = /*#__PURE__*/ React__namespace.createElement('path', { - d: 'M16 16C10 16 9 10 5 10M16 16C16 17.6569 17.3431 19 19 19C20.6569 19 22 17.6569 22 16C22 14.3431 20.6569 13 19 13C17.3431 13 16 14.3431 16 16ZM5 10C9 10 10 4 16 4M5 10H1.5M16 4C16 5.65685 17.3431 7 19 7C20.6569 7 22 5.65685 22 4C22 2.34315 20.6569 1 19 1C17.3431 1 16 2.34315 16 4Z', - strokeWidth: 2, - strokeLinecap: 'round', - strokeLinejoin: 'round', - stroke: 'url(#gradient1)', - })) - ) -} +var TextDot = styled__default["default"].div(templateObject_1$p || (templateObject_1$p = __makeTemplateObject(["\n height: 3px;\n width: 3px;\n background-color: ", ";\n border-radius: 50%;\n"], ["\n height: 3px;\n width: 3px;\n background-color: ", ";\n border-radius: 50%;\n"])), function (_a) { + var theme = _a.theme; + return theme.text2; +}); +var Checkbox = styled__default["default"].input(templateObject_2$f || (templateObject_2$f = __makeTemplateObject(["\n border: 1px solid ", ";\n height: 20px;\n margin: 0;\n"], ["\n border: 1px solid ", ";\n height: 20px;\n margin: 0;\n"])), function (_a) { + var theme = _a.theme; + return theme.red3; +}); +var PaddedColumn = styled__default["default"](AutoColumn)(templateObject_3$d || (templateObject_3$d = __makeTemplateObject(["\n padding: 20px;\n"], ["\n padding: 20px;\n"]))); +var MenuItem = styled__default["default"](RowBetween)(templateObject_4$9 || (templateObject_4$9 = __makeTemplateObject(["\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: ", ";\n pointer-events: ", ";\n :hover {\n background-color: ", ";\n }\n opacity: ", ";\n"], ["\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: ", ";\n pointer-events: ", ";\n :hover {\n background-color: ", ";\n }\n opacity: ", ";\n"])), function (_a) { + var disabled = _a.disabled; + return !disabled && 'pointer'; +}, function (_a) { + var disabled = _a.disabled; + return disabled && 'none'; +}, function (_a) { + var theme = _a.theme, disabled = _a.disabled; + return !disabled && theme.bg2; +}, function (_a) { + var disabled = _a.disabled, selected = _a.selected; + return (disabled || selected ? 0.5 : 1); +}); +var SearchInput = styled__default["default"].input(templateObject_5$9 || (templateObject_5$9 = __makeTemplateObject(["\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: ", ";\n border-style: solid;\n border: 1px solid ", ";\n -webkit-appearance: none;\n\n font-size: 18px;\n\n ::placeholder {\n color: ", ";\n }\n transition: border 100ms;\n :focus {\n border: 1px solid ", ";\n outline: none;\n }\n"], ["\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: ", ";\n border-style: solid;\n border: 1px solid ", ";\n -webkit-appearance: none;\n\n font-size: 18px;\n\n ::placeholder {\n color: ", ";\n }\n transition: border 100ms;\n :focus {\n border: 1px solid ", ";\n outline: none;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text1; +}, function (_a) { + var theme = _a.theme; + return theme.bg3; +}, function (_a) { + var theme = _a.theme; + return theme.text3; +}, function (_a) { + var theme = _a.theme; + return theme.primary1; +}); +var Separator = styled__default["default"].div(templateObject_6$5 || (templateObject_6$5 = __makeTemplateObject(["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"], ["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}); +var SeparatorDark = styled__default["default"].div(templateObject_7$4 || (templateObject_7$4 = __makeTemplateObject(["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"], ["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg3; +}); +var templateObject_1$p, templateObject_2$f, templateObject_3$d, templateObject_4$9, templateObject_5$9, templateObject_6$5, templateObject_7$4; -var _path$1 - -function _extends$1() { - _extends$1 = - 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$1.apply(this, arguments) -} +function currencyKey(currency) { + return currency.isToken ? currency.address : 'ETHER'; +} +var StyledBalanceText = styled__default["default"](rebass.Text)(templateObject_1$o || (templateObject_1$o = __makeTemplateObject(["\n white-space: nowrap;\n overflow: hidden;\n max-width: 5rem;\n text-overflow: ellipsis;\n"], ["\n white-space: nowrap;\n overflow: hidden;\n max-width: 5rem;\n text-overflow: ellipsis;\n"]))); +var Tag = styled__default["default"].div(templateObject_2$e || (templateObject_2$e = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\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 background-color: ", ";\n color: ", ";\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"])), function (_a) { + var theme = _a.theme; + return theme.bg3; +}, function (_a) { + var theme = _a.theme; + return theme.text2; +}); +var FixedContentRow = styled__default["default"].div(templateObject_3$c || (templateObject_3$c = __makeTemplateObject(["\n padding: 4px 20px;\n height: 56px;\n display: grid;\n grid-gap: 16px;\n align-items: center;\n"], ["\n padding: 4px 20px;\n height: 56px;\n display: grid;\n grid-gap: 16px;\n align-items: center;\n"]))); +function Balance(_a) { + var balance = _a.balance; + return jsxRuntime.jsx(StyledBalanceText, __assign({ title: balance.toExact() }, { children: balance.toSignificant(4) }), void 0); +} +var TagContainer = styled__default["default"].div(templateObject_4$8 || (templateObject_4$8 = __makeTemplateObject(["\n display: flex;\n justify-content: flex-end;\n"], ["\n display: flex;\n justify-content: flex-end;\n"]))); +var TokenListLogoWrapper = styled__default["default"].img(templateObject_5$8 || (templateObject_5$8 = __makeTemplateObject(["\n height: 20px;\n"], ["\n height: 20px;\n"]))); +function TokenTags(_a) { + var currency = _a.currency; + if (!(currency instanceof WrappedTokenInfo)) { + return jsxRuntime.jsx("span", {}, void 0); + } + var tags = currency.tags; + if (!tags || tags.length === 0) + return jsxRuntime.jsx("span", {}, void 0); + var tag = tags[0]; + return (jsxRuntime.jsxs(TagContainer, { children: [jsxRuntime.jsx(MouseoverTooltip, __assign({ text: tag.description }, { children: jsxRuntime.jsx(Tag, { children: tag.name }, tag.id) }), void 0), tags.length > 1 ? (jsxRuntime.jsx(MouseoverTooltip, __assign({ text: tags + .slice(1) + .map(function (_a) { + var name = _a.name, description = _a.description; + return name + ": " + description; + }) + .join('; \n') }, { children: jsxRuntime.jsx(Tag, { children: "..." }, void 0) }), void 0)) : null] }, void 0)); +} +function CurrencyRow(_a) { + var currency = _a.currency, onSelect = _a.onSelect, isSelected = _a.isSelected, otherSelected = _a.otherSelected, style = _a.style, showCurrencyAmount = _a.showCurrencyAmount; + var account = useActiveWeb3React().account; + var key = currencyKey(currency); + var selectedTokenList = useCombinedActiveList(); + var isOnSelectedList = isTokenOnList(selectedTokenList, currency.isToken ? currency : undefined); + var customAdded = useIsUserAddedToken(currency); + var balance = useCurrencyBalance(account !== null && account !== void 0 ? account : undefined, currency); + // only show add or remove buttons if not on selected list + return (jsxRuntime.jsxs(MenuItem, __assign({ style: style, className: "token-item-" + key, onClick: function () { return (isSelected ? null : onSelect()); }, disabled: isSelected, selected: otherSelected }, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: currency, size: '24px' }, void 0), jsxRuntime.jsxs(Column, { children: [jsxRuntime.jsx(rebass.Text, __assign({ title: currency.name, fontWeight: 500 }, { children: currency.symbol }), void 0), jsxRuntime.jsx(ThemedText.DarkGray, __assign({ ml: "0px", fontSize: '12px', fontWeight: 300 }, { children: !currency.isNative && !isOnSelectedList && customAdded ? (jsxRuntime.jsxs(macro.Trans, { children: [currency.name, " \u2022 Added by user"] }, void 0)) : (currency.name) }), void 0)] }, void 0), jsxRuntime.jsx(TokenTags, { currency: currency }, void 0), showCurrencyAmount && (jsxRuntime.jsx(RowFixed, __assign({ style: { justifySelf: 'flex-end' } }, { children: balance ? jsxRuntime.jsx(Balance, { balance: balance }, void 0) : account ? jsxRuntime.jsx(Loader, {}, void 0) : null }), void 0))] }), void 0)); +} +var BREAK_LINE = 'BREAK'; +function isBreakLine(x) { + return x === BREAK_LINE; +} +function BreakLineComponent(_a) { + var style = _a.style; + var theme = useTheme(); + return (jsxRuntime.jsx(FixedContentRow, __assign({ style: style }, { children: jsxRuntime.jsx(LightGreyCard, __assign({ padding: "8px 12px", "$borderRadius": "8px" }, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(TokenListLogoWrapper, { src: TokenListLogo }, void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ ml: "6px", fontSize: "12px", color: theme.text1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Expanded results from inactive Token Lists" }, void 0) }), void 0)] }, void 0), jsxRuntime.jsx(QuestionHelper, { text: jsxRuntime.jsx(macro.Trans, { children: "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists." }, void 0) }, void 0)] }, void 0) }), void 0) }), void 0)); +} +function CurrencyList(_a) { + var height = _a.height, currencies = _a.currencies, otherListTokens = _a.otherListTokens, selectedCurrency = _a.selectedCurrency, onCurrencySelect = _a.onCurrencySelect, otherCurrency = _a.otherCurrency, fixedListRef = _a.fixedListRef, showImportView = _a.showImportView, setImportToken = _a.setImportToken, showCurrencyAmount = _a.showCurrencyAmount; + var itemData = React.useMemo(function () { + if (otherListTokens && (otherListTokens === null || otherListTokens === void 0 ? void 0 : otherListTokens.length) > 0) { + return __spreadArray(__spreadArray(__spreadArray([], __read(currencies), false), [BREAK_LINE], false), __read(otherListTokens), false); + } + return currencies; + }, [currencies, otherListTokens]); + var Row = React.useCallback(function TokenRow(_a) { + var data = _a.data, index = _a.index, style = _a.style; + var row = data[index]; + if (isBreakLine(row)) { + return jsxRuntime.jsx(BreakLineComponent, { style: style }, void 0); + } + var currency = row; + var isSelected = Boolean(currency && selectedCurrency && selectedCurrency.equals(currency)); + var otherSelected = Boolean(currency && otherCurrency && otherCurrency.equals(currency)); + var handleSelect = function () { return currency && onCurrencySelect(currency); }; + var token = currency === null || currency === void 0 ? void 0 : currency.wrapped; + var showImport = index > currencies.length; + if (showImport && token) { + return (jsxRuntime.jsx(ImportRow, { style: style, token: token, showImportView: showImportView, setImportToken: setImportToken, dim: true }, void 0)); + } + else if (currency) { + return (jsxRuntime.jsx(CurrencyRow, { style: style, currency: currency, isSelected: isSelected, onSelect: handleSelect, otherSelected: otherSelected, showCurrencyAmount: showCurrencyAmount }, void 0)); + } + else { + return null; + } + }, [ + currencies.length, + onCurrencySelect, + otherCurrency, + selectedCurrency, + setImportToken, + showImportView, + showCurrencyAmount, + ]); + var itemKey = React.useCallback(function (index, data) { + var currency = data[index]; + if (isBreakLine(currency)) + return BREAK_LINE; + return currencyKey(currency); + }, []); + return (jsxRuntime.jsx(reactWindow.FixedSizeList, __assign({ height: height, ref: fixedListRef, width: "100%", itemData: itemData, itemCount: itemData.length, itemSize: 56, itemKey: itemKey }, { children: Row }), void 0)); +} +var templateObject_1$o, templateObject_2$e, templateObject_3$c, templateObject_4$8, templateObject_5$8; -var SvgStaticRoute = function SvgStaticRoute(props) { - return /*#__PURE__*/ React__namespace.createElement( - 'svg', - _extends$1( - { - width: 20, - height: 20, - viewBox: '0 0 20 22', - fill: 'none', - xmlns: 'http://www.w3.org/2000/svg', - }, - props - ), - _path$1 || - (_path$1 = /*#__PURE__*/ React__namespace.createElement('path', { - d: 'M19 18C19 18.5523 18.5523 19 18 19V21C19.6569 21 21 19.6569 21 18H19ZM18 19C17.4477 19 17 18.5523 17 18H15C15 19.6569 16.3431 21 18 21V19ZM17 18C17 17.4477 17.4477 17 18 17V15C16.3431 15 15 16.3431 15 18H17ZM18 17C18.5523 17 19 17.4477 19 18H21C21 16.3431 19.6569 15 18 15V17ZM8 7H16V5H8V7ZM16 11H8V13H16V11ZM8 19H16V17H8V19ZM4 15C4 17.2091 5.79086 19 8 19V17C6.89543 17 6 16.1046 6 15H4ZM8 11C5.79086 11 4 12.7909 4 15H6C6 13.8954 6.89543 13 8 13V11ZM18 9C18 10.1046 17.1046 11 16 11V13C18.2091 13 20 11.2091 20 9H18ZM16 7C17.1046 7 18 7.89543 18 9H20C20 6.79086 18.2091 5 16 5V7ZM7 6C7 6.55228 6.55228 7 6 7V9C7.65685 9 9 7.65685 9 6H7ZM6 7C5.44772 7 5 6.55228 5 6H3C3 7.65685 4.34315 9 6 9V7ZM5 6C5 5.44772 5.44772 5 6 5V3C4.34315 3 3 4.34315 3 6H5ZM6 5C6.55228 5 7 5.44772 7 6H9C9 4.34315 7.65685 3 6 3V5Z', - })) - ) -} +var ContentWrapper = styled__default["default"](Column)(templateObject_1$n || (templateObject_1$n = __makeTemplateObject(["\n width: 100%;\n flex: 1 1;\n position: relative;\n"], ["\n width: 100%;\n flex: 1 1;\n position: relative;\n"]))); +var Footer$1 = styled__default["default"].div(templateObject_2$d || (templateObject_2$d = __makeTemplateObject(["\n width: 100%;\n border-radius: 20px;\n padding: 20px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n background-color: ", ";\n border-top: 1px solid ", ";\n"], ["\n width: 100%;\n border-radius: 20px;\n padding: 20px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n background-color: ", ";\n border-top: 1px solid ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var theme = _a.theme; + return theme.bg2; +}); +function CurrencySearch(_a) { + var selectedCurrency = _a.selectedCurrency, onCurrencySelect = _a.onCurrencySelect, otherSelectedCurrency = _a.otherSelectedCurrency, showCommonBases = _a.showCommonBases, showCurrencyAmount = _a.showCurrencyAmount, disableNonToken = _a.disableNonToken, onDismiss = _a.onDismiss, isOpen = _a.isOpen, showManageView = _a.showManageView, showImportView = _a.showImportView, setImportToken = _a.setImportToken; + var chainId = useActiveWeb3React().chainId; + var theme = useTheme(); + // refs for fixed size lists + var fixedList = React.useRef(); + var _b = __read(React.useState(''), 2), searchQuery = _b[0], setSearchQuery = _b[1]; + var debouncedQuery = useDebounce(searchQuery, 200); + var allTokens = useAllTokens(); + // if they input an address, use it + var isAddressSearch = isAddress(debouncedQuery); + var searchToken = useToken(debouncedQuery); + var searchTokenIsAdded = useIsUserAddedToken(searchToken); + React.useEffect(function () { + if (isAddressSearch) { + ReactGA__default["default"].event({ + category: 'Currency Select', + action: 'Search by address', + label: isAddressSearch, + }); + } + }, [isAddressSearch]); + var filteredTokens = React.useMemo(function () { + return Object.values(allTokens).filter(getTokenFilter(debouncedQuery)); + }, [allTokens, debouncedQuery]); + var balances = useAllTokenBalances(); + var sortedTokens = React.useMemo(function () { + return filteredTokens.sort(tokenComparator.bind(null, balances)); + }, [balances, filteredTokens]); + var filteredSortedTokens = useSortTokensByQuery(debouncedQuery, sortedTokens); + var native = useNativeCurrency(); + var filteredSortedTokensWithETH = React.useMemo(function () { + var _a, _b; + if (!native) + return filteredSortedTokens; + var s = debouncedQuery.toLowerCase().trim(); + if (((_b = (_a = native.symbol) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === null || _b === void 0 ? void 0 : _b.indexOf(s)) !== -1) { + return native ? __spreadArray([native], __read(filteredSortedTokens), false) : filteredSortedTokens; + } + return filteredSortedTokens; + }, [debouncedQuery, native, filteredSortedTokens]); + var handleCurrencySelect = React.useCallback(function (currency) { + onCurrencySelect(currency); + onDismiss(); + }, [onDismiss, onCurrencySelect]); + // clear the input on open + React.useEffect(function () { + if (isOpen) + setSearchQuery(''); + }, [isOpen]); + // manage focus on modal show + var inputRef = React.useRef(); + var handleInput = React.useCallback(function (event) { + var _a; + var input = event.target.value; + var checksummedInput = isAddress(input); + setSearchQuery(checksummedInput || input); + (_a = fixedList.current) === null || _a === void 0 ? void 0 : _a.scrollTo(0); + }, []); + var handleEnter = React.useCallback(function (e) { + var _a, _b; + if (e.key === 'Enter') { + var s = debouncedQuery.toLowerCase().trim(); + if (s === ((_a = native === null || native === void 0 ? void 0 : native.symbol) === null || _a === void 0 ? void 0 : _a.toLowerCase())) { + handleCurrencySelect(native); + } + else if (filteredSortedTokensWithETH.length > 0) { + if (((_b = filteredSortedTokensWithETH[0].symbol) === null || _b === void 0 ? void 0 : _b.toLowerCase()) === debouncedQuery.trim().toLowerCase() || + filteredSortedTokensWithETH.length === 1) { + handleCurrencySelect(filteredSortedTokensWithETH[0]); + } + } + } + }, [debouncedQuery, native, filteredSortedTokensWithETH, handleCurrencySelect]); + // menu ui + var _c = __read(useToggle(false), 2), open = _c[0], toggle = _c[1]; + var node = React.useRef(); + useOnClickOutside(node, open ? toggle : undefined); + // if no results on main list, show option to expand into inactive + var filteredInactiveTokens = useSearchInactiveTokenLists(filteredTokens.length === 0 || (debouncedQuery.length > 2 && !isAddressSearch) ? debouncedQuery : undefined); + return (jsxRuntime.jsxs(ContentWrapper, { children: [jsxRuntime.jsxs(PaddedColumn, __assign({ gap: "16px" }, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 16 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Select a token" }, void 0) }), void 0), jsxRuntime.jsx(CloseIcon$2, { onClick: onDismiss }, void 0)] }, void 0), jsxRuntime.jsx(Row$1, { children: jsxRuntime.jsx(SearchInput, { type: "text", id: "token-search-input", placeholder: macro.t(templateObject_3$b || (templateObject_3$b = __makeTemplateObject(["Search name or paste address"], ["Search name or paste address"]))), autoComplete: "off", value: searchQuery, ref: inputRef, onChange: handleInput, onKeyDown: handleEnter }, void 0) }, void 0), showCommonBases && (jsxRuntime.jsx(CommonBases, { chainId: chainId, onSelect: handleCurrencySelect, selectedCurrency: selectedCurrency }, void 0))] }), void 0), jsxRuntime.jsx(Separator, {}, void 0), searchToken && !searchTokenIsAdded ? (jsxRuntime.jsx(Column, __assign({ style: { padding: '20px 0', height: '100%' } }, { children: jsxRuntime.jsx(ImportRow, { token: searchToken, showImportView: showImportView, setImportToken: setImportToken }, void 0) }), void 0)) : (filteredSortedTokens === null || filteredSortedTokens === void 0 ? void 0 : filteredSortedTokens.length) > 0 || (filteredInactiveTokens === null || filteredInactiveTokens === void 0 ? void 0 : filteredInactiveTokens.length) > 0 ? (jsxRuntime.jsx("div", __assign({ style: { flex: '1' } }, { children: jsxRuntime.jsx(AutoSizer__default["default"], __assign({ disableWidth: true }, { children: function (_a) { + var height = _a.height; + return (jsxRuntime.jsx(CurrencyList, { height: height, currencies: disableNonToken ? filteredSortedTokens : filteredSortedTokensWithETH, otherListTokens: filteredInactiveTokens, onCurrencySelect: handleCurrencySelect, otherCurrency: otherSelectedCurrency, selectedCurrency: selectedCurrency, fixedListRef: fixedList, showImportView: showImportView, setImportToken: setImportToken, showCurrencyAmount: showCurrencyAmount }, void 0)); + } }), void 0) }), void 0)) : (jsxRuntime.jsx(Column, __assign({ style: { padding: '20px', height: '100%' } }, { children: jsxRuntime.jsx(ThemedText.Main, __assign({ color: theme.text3, textAlign: "center", mb: "20px" }, { children: jsxRuntime.jsx(macro.Trans, { children: "No results found." }, void 0) }), void 0) }), void 0)), jsxRuntime.jsx(Footer$1, { children: jsxRuntime.jsx(Row$1, __assign({ justify: "center" }, { children: jsxRuntime.jsx(ButtonText, __assign({ onClick: showManageView, color: theme.primary1, className: "list-token-manage-button" }, { children: jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(IconWrapper$4, __assign({ size: "16px", marginRight: "6px", stroke: theme.primaryText1 }, { children: jsxRuntime.jsx(reactFeather.Edit, {}, void 0) }), void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ color: theme.primaryText1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Manage Token Lists" }, void 0) }), void 0)] }, void 0) }), void 0) }), void 0) }, void 0)] }, void 0)); +} +var templateObject_1$n, templateObject_2$d, templateObject_3$b; -var StyledAutoRouterIcon = styled__default['default'](SvgAutoRouter)( - templateObject_1$G || - (templateObject_1$G = __makeTemplateObject( - ['\n height: 16px;\n width: 16px;\n\n :hover {\n filter: brightness(1.3);\n }\n'], - ['\n height: 16px;\n width: 16px;\n\n :hover {\n filter: brightness(1.3);\n }\n'] - )) -) -var StyledStaticRouterIcon = styled__default['default'](SvgStaticRoute)( - templateObject_2$t || - (templateObject_2$t = __makeTemplateObject( - ['\n height: 16px;\n width: 16px;\n\n fill: ', ';\n\n :hover {\n filter: brightness(1.3);\n }\n'], - ['\n height: 16px;\n width: 16px;\n\n fill: ', ';\n\n :hover {\n filter: brightness(1.3);\n }\n'] - )), - function (_a) { - var theme = _a.theme - return theme.text3 - } -) -var StyledAutoRouterLabel = styled__default['default'](ThemedText.Black)( - templateObject_3$m || - (templateObject_3$m = __makeTemplateObject( - [ - '\n line-height: 1rem;\n\n /* fallback color */\n color: ', - ';\n\n @supports (-webkit-background-clip: text) and (-webkit-text-fill-color: transparent) {\n background-image: linear-gradient(90deg, #2172e5 0%, #54e521 163.16%);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n }\n', - ], - [ - '\n line-height: 1rem;\n\n /* fallback color */\n color: ', - ';\n\n @supports (-webkit-background-clip: text) and (-webkit-text-fill-color: transparent) {\n background-image: linear-gradient(90deg, #2172e5 0%, #54e521 163.16%);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.green1 - } -) -function AutoRouterLogo() { - var autoRouterSupported = useAutoRouterSupported() - return autoRouterSupported - ? jsxRuntime.jsx(StyledAutoRouterIcon, {}, void 0) - : jsxRuntime.jsx(StyledStaticRouterIcon, {}, void 0) -} -function AutoRouterLabel() { - var autoRouterSupported = useAutoRouterSupported() - return autoRouterSupported - ? jsxRuntime.jsx(StyledAutoRouterLabel, __assign({ fontSize: 14 }, { children: 'Auto Router' }), void 0) - : jsxRuntime.jsx( - ThemedText.Black, - __assign({ fontSize: 14 }, { children: jsxRuntime.jsx(macro.Trans, { children: 'Trade Route' }, void 0) }), - void 0 - ) -} -var templateObject_1$G, templateObject_2$t, templateObject_3$m - -var Wrapper$a = styled__default['default'](AutoColumn)( - templateObject_1$F || - (templateObject_1$F = __makeTemplateObject( - ['\n padding: ', ';\n border-radius: 16px;\n border: 1px solid ', ';\n cursor: pointer;\n'], - ['\n padding: ', ';\n border-radius: 16px;\n border: 1px solid ', ';\n cursor: pointer;\n'] - )), - function (_a) { - var fixedOpen = _a.fixedOpen - return fixedOpen ? '12px' : '12px 8px 12px 12px' - }, - function (_a) { - var theme = _a.theme, - fixedOpen = _a.fixedOpen - return fixedOpen ? 'transparent' : theme.bg2 - } -) -var OpenCloseIcon = styled__default['default'](reactFeather.Plus)( - templateObject_2$s || - (templateObject_2$s = __makeTemplateObject( - [ - '\n margin-left: 8px;\n height: 20px;\n stroke-width: 2px;\n transition: transform 0.1s;\n transform: ', - ';\n stroke: ', - ';\n cursor: pointer;\n :hover {\n opacity: 0.8;\n }\n', - ], - [ - '\n margin-left: 8px;\n height: 20px;\n stroke-width: 2px;\n transition: transform 0.1s;\n transform: ', - ';\n stroke: ', - ';\n cursor: pointer;\n :hover {\n opacity: 0.8;\n }\n', - ] - )), - function (_a) { - var open = _a.open - return open ? 'rotate(45deg)' : 'none' - }, - function (_a) { - var theme = _a.theme - return theme.text3 - } -) -var V2_DEFAULT_FEE_TIER = 3000 -var SwapRoute = React.memo(function SwapRoute(_a) { - var trade = _a.trade, - syncing = _a.syncing, - _b = _a.fixedOpen, - fixedOpen = _b === void 0 ? false : _b, - rest = __rest(_a, ['trade', 'syncing', 'fixedOpen']) - var autoRouterSupported = useAutoRouterSupported() - var routes = getTokenPath(trade) - var _c = __read(React.useState(false), 2), - open = _c[0], - setOpen = _c[1] - var chainId = useActiveWeb3React().chainId - var _d = __read(useDarkModeManager(), 1), - darkMode = _d[0] - var formattedGasPriceString = (trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) - ? trade.gasUseEstimateUSD.toFixed(2) === '0.00' - ? '<$0.01' - : '$' + trade.gasUseEstimateUSD.toFixed(2) - : undefined - return jsxRuntime.jsxs( - Wrapper$a, - __assign( - {}, - rest, - { darkMode, fixedOpen }, - { - children: [ - jsxRuntime.jsxs( - RowBetween, - __assign( - { - onClick() { - return setOpen(!open) - }, - }, - { - children: [ - jsxRuntime.jsxs( - AutoRow, - __assign( - { gap: '4px', width: 'auto' }, - { - children: [ - jsxRuntime.jsx(AutoRouterLogo, {}, void 0), - jsxRuntime.jsx(AutoRouterLabel, {}, void 0), - ], - } - ), - void 0 - ), - fixedOpen ? null : jsxRuntime.jsx(OpenCloseIcon, { open }, void 0), - ], - } - ), - void 0 - ), - jsxRuntime.jsx( - AnimatedDropdown, - __assign( - { open: open || fixedOpen }, - { - children: jsxRuntime.jsxs( - AutoRow, - __assign( - { gap: '4px', width: 'auto', style: { paddingTop: '12px', margin: 0 } }, - { - children: [ - syncing - ? jsxRuntime.jsx( - LoadingRows, - { - children: jsxRuntime.jsx('div', { style: { width: '400px', height: '30px' } }, void 0), - }, - void 0 - ) - : jsxRuntime.jsx( - RoutingDiagram, - { - currencyIn: trade.inputAmount.currency, - currencyOut: trade.outputAmount.currency, - routes, - }, - void 0 - ), - autoRouterSupported && - jsxRuntime.jsxs( - jsxRuntime.Fragment, - { - children: [ - jsxRuntime.jsx(Separator$1, {}, void 0), - syncing - ? jsxRuntime.jsx( - LoadingRows, - { - children: jsxRuntime.jsx( - 'div', - { style: { width: '250px', height: '15px' } }, - void 0 - ), - }, - void 0 - ) - : jsxRuntime.jsxs( - ThemedText.Main, - __assign( - { fontSize: 12, width: 400, margin: 0 }, - { - children: [ - (trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) && - chainId && - SUPPORTED_GAS_ESTIMATE_CHAIN_IDS.includes(chainId) - ? jsxRuntime.jsxs( - macro.Trans, - { - children: [ - 'Best price route costs ~', - formattedGasPriceString, - ' in gas. ', - ], - }, - void 0 - ) - : null, - ' ', - jsxRuntime.jsx( - macro.Trans, - { - children: - 'This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.', - }, - void 0 - ), - ], - } - ), - void 0 - ), - ], - }, - void 0 - ), - ], - } - ), - void 0 - ), - } - ), - void 0 - ), - ], - } - ), - void 0 - ) -}) -function getTokenPath(trade) { - return trade.swaps.map(function (_a) { - var _b = _a.route, - tokenPath = _b.path, - pools = _b.pools, - protocol = _b.protocol, - inputAmount = _a.inputAmount, - outputAmount = _a.outputAmount - var portion = - trade.tradeType === sdkCore.TradeType.EXACT_INPUT - ? inputAmount.divide(trade.inputAmount) - : outputAmount.divide(trade.outputAmount) - var percent = new sdkCore.Percent(portion.numerator, portion.denominator) - var path = [] - for (var i = 0; i < pools.length; i++) { - var nextPool = pools[i] - var tokenIn = tokenPath[i] - var tokenOut = tokenPath[i + 1] - var entry = [tokenIn, tokenOut, nextPool instanceof v2Sdk.Pair ? V2_DEFAULT_FEE_TIER : nextPool.fee] - path.push(entry) - } - return { - percent, - path, - protocol, - } - }) -} -var templateObject_1$F, templateObject_2$s - -var GasWrapper = styled__default['default'](RowFixed)( - templateObject_1$E || - (templateObject_1$E = __makeTemplateObject( - [ - '\n border-radius: 8px;\n padding: 4px 6px;\n height: 24px;\n color: ', - ';\n background-color: ', - ';\n font-size: 14px;\n font-weight: 500;\n user-select: none;\n', - ], - [ - '\n border-radius: 8px;\n padding: 4px 6px;\n height: 24px;\n color: ', - ';\n background-color: ', - ';\n font-size: 14px;\n font-weight: 500;\n user-select: none;\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.text3 - }, - function (_a) { - var theme = _a.theme - return theme.bg1 - } -) -var StyledGasIcon = styled__default['default'](SvgGasIcon)( - templateObject_2$r || - (templateObject_2$r = __makeTemplateObject( - ['\n margin-right: 4px;\n height: 14px;\n & > * {\n stroke: ', ';\n }\n'], - ['\n margin-right: 4px;\n height: 14px;\n & > * {\n stroke: ', ';\n }\n'] - )), - function (_a) { - var theme = _a.theme - return theme.text3 - } -) -function GasEstimateBadge(_a) { - var _b - var trade = _a.trade, - loading = _a.loading, - showRoute = _a.showRoute, - disableHover = _a.disableHover - var formattedGasPriceString = (trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) - ? trade.gasUseEstimateUSD.toFixed(2) === '0.00' - ? '<$0.01' - : '$' + trade.gasUseEstimateUSD.toFixed(2) - : undefined - return jsxRuntime.jsx( - MouseoverTooltipContent, - __assign( - { - wrap: false, - disableHover, - content: loading - ? null - : jsxRuntime.jsx( - ResponsiveTooltipContainer, - __assign( - { - origin: 'top right', - style: { - padding: showRoute ? '0' : '12px', - border: 'none', - borderRadius: showRoute ? '16px' : '12px', - maxWidth: '400px', - }, - }, - { - children: showRoute - ? trade - ? jsxRuntime.jsx(SwapRoute, { trade, syncing: loading, fixedOpen: showRoute }, void 0) - : null - : jsxRuntime.jsxs( - AutoColumn, - __assign( - { gap: '4px', justify: 'center' }, - { - children: [ - jsxRuntime.jsx( - ThemedText.Main, - __assign( - { fontSize: '12px', textAlign: 'center' }, - { - children: jsxRuntime.jsx( - macro.Trans, - { children: 'Estimated network fee' }, - void 0 - ), - } - ), - void 0 - ), - jsxRuntime.jsx( - ThemedText.Body, - __assign( - { textAlign: 'center', fontWeight: 500, style: { userSelect: 'none' } }, - { - children: jsxRuntime.jsxs( - macro.Trans, - { - children: [ - '$', - (_b = - trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) === - null || _b === void 0 - ? void 0 - : _b.toFixed(2), - ], - }, - void 0 - ), - } - ), - void 0 - ), - jsxRuntime.jsx( - ThemedText.Main, - __assign( - { fontSize: '10px', textAlign: 'center', maxWidth: '140px', color: 'text3' }, - { - children: jsxRuntime.jsx( - macro.Trans, - { children: 'Estimate may differ due to your wallet gas settings' }, - void 0 - ), - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - } - ), - void 0 - ), - placement: 'bottom', - onOpen() { - return ReactGA__default['default'].event({ - category: 'Gas', - action: 'Gas Details Tooltip Open', - }) - }, - }, - { - children: jsxRuntime.jsx( - LoadingOpacityContainer, - __assign( - { $loading: loading }, - { - children: jsxRuntime.jsxs( - GasWrapper, - { - children: [ - jsxRuntime.jsx(StyledGasIcon, {}, void 0), - formattedGasPriceString !== null && formattedGasPriceString !== void 0 - ? formattedGasPriceString - : null, - ], - }, - void 0 - ), - } - ), - void 0 - ), - } - ), - void 0 - ) -} -var templateObject_1$E, templateObject_2$r - -var Wrapper$9 = styled__default['default'](Row)( - templateObject_1$D || - (templateObject_1$D = __makeTemplateObject( - ['\n width: 100%;\n justify-content: center;\n'], - ['\n width: 100%;\n justify-content: center;\n'] - )) -) -var StyledInfoIcon = styled__default['default'](reactFeather.Info)( - templateObject_2$q || - (templateObject_2$q = __makeTemplateObject( - ['\n height: 16px;\n width: 16px;\n margin-right: 4px;\n color: ', ';\n'], - ['\n height: 16px;\n width: 16px;\n margin-right: 4px;\n color: ', ';\n'] - )), - function (_a) { - var theme = _a.theme - return theme.text3 - } -) -var StyledCard = styled__default['default'](OutlineCard)( - templateObject_3$l || - (templateObject_3$l = __makeTemplateObject( - ['\n padding: 12px;\n border: 1px solid ', ';\n'], - ['\n padding: 12px;\n border: 1px solid ', ';\n'] - )), - function (_a) { - var theme = _a.theme - return theme.bg2 - } -) -var StyledHeaderRow = styled__default['default'](RowBetween)( - templateObject_4$e || - (templateObject_4$e = __makeTemplateObject( - [ - '\n padding: 4px 8px;\n border-radius: 12px;\n background-color: ', - ';\n align-items: center;\n cursor: ', - ';\n min-height: 40px;\n\n :hover {\n background-color: ', - ';\n }\n', - ], - [ - '\n padding: 4px 8px;\n border-radius: 12px;\n background-color: ', - ';\n align-items: center;\n cursor: ', - ';\n min-height: 40px;\n\n :hover {\n background-color: ', - ';\n }\n', - ] - )), - function (_a) { - var open = _a.open, - theme = _a.theme - return open ? theme.bg1 : 'transparent' - }, - function (_a) { - var disabled = _a.disabled - return disabled ? 'initial' : 'pointer' - }, - function (_a) { - var theme = _a.theme, - disabled = _a.disabled - return disabled ? theme.bg1 : polished.darken(0.015, theme.bg1) - } -) -var RotatingArrow = styled__default['default'](reactFeather.ChevronDown)( - templateObject_5$c || - (templateObject_5$c = __makeTemplateObject( - ['\n transform: ', ';\n transition: transform 0.1s linear;\n'], - ['\n transform: ', ';\n transition: transform 0.1s linear;\n'] - )), - function (_a) { - var open = _a.open - return open ? 'rotate(180deg)' : 'none' - } -) -var StyledPolling = styled__default['default'].div( - templateObject_7$7 || - (templateObject_7$7 = __makeTemplateObject( - [ - '\n display: flex;\n height: 16px;\n width: 16px;\n margin-right: 2px;\n margin-left: 10px;\n align-items: center;\n color: ', - ';\n transition: 250ms ease color;\n\n ', - '\n', - ], - [ - '\n display: flex;\n height: 16px;\n width: 16px;\n margin-right: 2px;\n margin-left: 10px;\n align-items: center;\n color: ', - ';\n transition: 250ms ease color;\n\n ', - '\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.text1 - }, - function (_a) { - var theme = _a.theme - return theme.mediaWidth.upToMedium( - templateObject_6$8 || - (templateObject_6$8 = __makeTemplateObject(['\n display: none;\n '], ['\n display: none;\n '])) - ) - } -) -var StyledPollingDot = styled__default['default'].div( - templateObject_8$4 || - (templateObject_8$4 = __makeTemplateObject( - [ - '\n width: 8px;\n height: 8px;\n min-height: 8px;\n min-width: 8px;\n border-radius: 50%;\n position: relative;\n background-color: ', - ';\n transition: 250ms ease background-color;\n', - ], - [ - '\n width: 8px;\n height: 8px;\n min-height: 8px;\n min-width: 8px;\n border-radius: 50%;\n position: relative;\n background-color: ', - ';\n transition: 250ms ease background-color;\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.bg2 - } -) -var rotate360 = styled.keyframes( - templateObject_9$4 || - (templateObject_9$4 = __makeTemplateObject( - ['\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n'], - ['\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n'] - )) -) -var Spinner = styled__default['default'].div( - templateObject_10$4 || - (templateObject_10$4 = __makeTemplateObject( - [ - '\n animation: ', - ' 1s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n transform: translateZ(0);\n border-top: 1px solid transparent;\n border-right: 1px solid transparent;\n border-bottom: 1px solid transparent;\n border-left: 2px solid ', - ';\n background: transparent;\n width: 14px;\n height: 14px;\n border-radius: 50%;\n position: relative;\n transition: 250ms ease border-color;\n left: -3px;\n top: -3px;\n', - ], - [ - '\n animation: ', - ' 1s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n transform: translateZ(0);\n border-top: 1px solid transparent;\n border-right: 1px solid transparent;\n border-bottom: 1px solid transparent;\n border-left: 2px solid ', - ';\n background: transparent;\n width: 14px;\n height: 14px;\n border-radius: 50%;\n position: relative;\n transition: 250ms ease border-color;\n left: -3px;\n top: -3px;\n', - ] - )), - rotate360, - function (_a) { - var theme = _a.theme - return theme.text1 - } -) -function SwapDetailsDropdown(_a) { - var trade = _a.trade, - syncing = _a.syncing, - loading = _a.loading, - showInverted = _a.showInverted, - setShowInverted = _a.setShowInverted, - allowedSlippage = _a.allowedSlippage - var theme = styled.useTheme() - var chainId = useActiveWeb3React().chainId - var _b = __read(React.useState(false), 2), - showDetails = _b[0], - setShowDetails = _b[1] - return jsxRuntime.jsx( - Wrapper$9, - { - children: jsxRuntime.jsxs( - AutoColumn, - __assign( - { gap: '8px', style: { width: '100%', marginBottom: '-8px' } }, - { - children: [ - jsxRuntime.jsxs( - StyledHeaderRow, - __assign( - { - onClick() { - return setShowDetails(!showDetails) - }, - disabled: !trade, - open: showDetails, - }, - { - children: [ - jsxRuntime.jsxs( - RowFixed, - __assign( - { style: { position: 'relative' } }, - { - children: [ - loading || syncing - ? jsxRuntime.jsx( - StyledPolling, - { - children: jsxRuntime.jsx( - StyledPollingDot, - { children: jsxRuntime.jsx(Spinner, {}, void 0) }, - void 0 - ), - }, - void 0 - ) - : jsxRuntime.jsx( - HideSmall, - { - children: jsxRuntime.jsx( - MouseoverTooltipContent, - __assign( - { - wrap: false, - content: jsxRuntime.jsx( - ResponsiveTooltipContainer, - __assign( - { origin: 'top right', style: { padding: '0' } }, - { - children: jsxRuntime.jsx( - Card, - __assign( - { padding: '12px' }, - { - children: jsxRuntime.jsx( - AdvancedSwapDetails, - { - trade, - allowedSlippage, - syncing, - }, - void 0 - ), - } - ), - void 0 - ), - } - ), - void 0 - ), - placement: 'bottom', - disableHover: showDetails, - }, - { - children: jsxRuntime.jsx( - StyledInfoIcon, - { color: trade ? theme.text3 : theme.bg3 }, - void 0 - ), - } - ), - void 0 - ), - }, - void 0 - ), - trade - ? jsxRuntime.jsx( - LoadingOpacityContainer, - __assign( - { $loading: syncing }, - { - children: jsxRuntime.jsx( - TradePrice, - { - price: trade.executionPrice, - showInverted, - setShowInverted, - }, - void 0 - ), - } - ), - void 0 - ) - : loading || syncing - ? jsxRuntime.jsx( - ThemedText.Main, - __assign( - { fontSize: 14 }, - { - children: jsxRuntime.jsx( - macro.Trans, - { children: 'Fetching best price...' }, - void 0 - ), - } - ), - void 0 - ) - : null, - ], - } - ), - void 0 - ), - jsxRuntime.jsxs( - RowFixed, - { - children: [ - !(trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) || - showDetails || - !chainId || - !SUPPORTED_GAS_ESTIMATE_CHAIN_IDS.includes(chainId) - ? null - : jsxRuntime.jsx( - GasEstimateBadge, - { - trade, - loading: syncing || loading, - showRoute: !showDetails, - disableHover: showDetails, - }, - void 0 - ), - jsxRuntime.jsx( - RotatingArrow, - { stroke: trade ? theme.text3 : theme.bg3, open: Boolean(trade && showDetails) }, - void 0 - ), - ], - }, - void 0 - ), - ], - } - ), - void 0 - ), - jsxRuntime.jsx( - AnimatedDropdown, - __assign( - { open: showDetails }, - { - children: jsxRuntime.jsxs( - AutoColumn, - __assign( - { gap: '8px', style: { padding: '0', paddingBottom: '8px' } }, - { - children: [ - trade - ? jsxRuntime.jsx( - StyledCard, - { - children: jsxRuntime.jsx( - AdvancedSwapDetails, - { trade, allowedSlippage, syncing }, - void 0 - ), - }, - void 0 - ) - : null, - trade ? jsxRuntime.jsx(SwapRoute, { trade, syncing }, void 0) : null, - ], - } - ), - void 0 - ), - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - }, - void 0 - ) -} -var templateObject_1$D, - templateObject_2$q, - templateObject_3$l, - templateObject_4$e, - templateObject_5$c, - templateObject_6$8, - templateObject_7$7, - templateObject_8$4, - templateObject_9$4, - templateObject_10$4 - -var BaseButton = styled__default['default'](styledComponents.Button)( - templateObject_1$C || - (templateObject_1$C = __makeTemplateObject( - [ - '\n padding: ', - ';\n width: ', - ';\n font-weight: 500;\n text-align: center;\n border-radius: ', - ';\n outline: none;\n border: 1px solid transparent;\n color: ', - ';\n text-decoration: none;\n display: flex;\n justify-content: center;\n flex-wrap: nowrap;\n align-items: center;\n cursor: pointer;\n position: relative;\n z-index: 1;\n &:disabled {\n opacity: 50%;\n cursor: auto;\n pointer-events: none;\n }\n\n will-change: transform;\n transition: transform 450ms ease;\n transform: perspective(1px) translateZ(0);\n\n > * {\n user-select: none;\n }\n\n > a {\n text-decoration: none;\n }\n', - ], - [ - '\n padding: ', - ';\n width: ', - ';\n font-weight: 500;\n text-align: center;\n border-radius: ', - ';\n outline: none;\n border: 1px solid transparent;\n color: ', - ';\n text-decoration: none;\n display: flex;\n justify-content: center;\n flex-wrap: nowrap;\n align-items: center;\n cursor: pointer;\n position: relative;\n z-index: 1;\n &:disabled {\n opacity: 50%;\n cursor: auto;\n pointer-events: none;\n }\n\n will-change: transform;\n transition: transform 450ms ease;\n transform: perspective(1px) translateZ(0);\n\n > * {\n user-select: none;\n }\n\n > a {\n text-decoration: none;\n }\n', - ] - )), - function (_a) { - var padding = _a.padding - return padding !== null && padding !== void 0 ? padding : '16px' - }, - function (_a) { - var width = _a.width - return width !== null && width !== void 0 ? width : '100%' - }, - function (_a) { - var $borderRadius = _a.$borderRadius - return $borderRadius !== null && $borderRadius !== void 0 ? $borderRadius : '20px' - }, - function (_a) { - var theme = _a.theme - return theme.text1 - } -) -var ButtonPrimary = styled__default['default'](BaseButton)( - templateObject_2$p || - (templateObject_2$p = __makeTemplateObject( - [ - '\n background-color: ', - ';\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n &:hover {\n background-color: ', - ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n &:disabled {\n background-color: ', - ';\n color: ', - ';\n cursor: auto;\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n', - ], - [ - '\n background-color: ', - ';\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n &:hover {\n background-color: ', - ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n &:disabled {\n background-color: ', - ';\n color: ', - ';\n cursor: auto;\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.primary1 - }, - function (_a) { - var theme = _a.theme - return polished.darken(0.05, theme.primary1) - }, - function (_a) { - var theme = _a.theme - return polished.darken(0.05, theme.primary1) - }, - function (_a) { - var theme = _a.theme - return polished.darken(0.05, theme.primary1) - }, - function (_a) { - var theme = _a.theme - return polished.darken(0.1, theme.primary1) - }, - function (_a) { - var theme = _a.theme - return polished.darken(0.1, theme.primary1) - }, - function (_a) { - var theme = _a.theme, - altDisabledStyle = _a.altDisabledStyle, - disabled = _a.disabled - return altDisabledStyle ? (disabled ? theme.primary1 : theme.bg2) : theme.bg2 - }, - function (_a) { - var altDisabledStyle = _a.altDisabledStyle, - disabled = _a.disabled, - theme = _a.theme - return altDisabledStyle ? (disabled ? theme.white : theme.text2) : theme.text2 - } -) -var ButtonLight = styled__default['default'](BaseButton)( - templateObject_3$k || - (templateObject_3$k = __makeTemplateObject( - [ - '\n background-color: ', - ';\n color: ', - ';\n font-size: 16px;\n font-weight: 500;\n &:focus {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n &:hover {\n background-color: ', - ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n :disabled {\n opacity: 0.4;\n :hover {\n cursor: auto;\n background-color: ', - ';\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n }\n', - ], - [ - '\n background-color: ', - ';\n color: ', - ';\n font-size: 16px;\n font-weight: 500;\n &:focus {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n &:hover {\n background-color: ', - ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n :disabled {\n opacity: 0.4;\n :hover {\n cursor: auto;\n background-color: ', - ';\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.primary5 - }, - function (_a) { - var theme = _a.theme - return theme.primaryText1 - }, - function (_a) { - var theme = _a.theme, - disabled = _a.disabled - return !disabled && polished.darken(0.03, theme.primary5) - }, - function (_a) { - var theme = _a.theme, - disabled = _a.disabled - return !disabled && polished.darken(0.03, theme.primary5) - }, - function (_a) { - var theme = _a.theme, - disabled = _a.disabled - return !disabled && polished.darken(0.03, theme.primary5) - }, - function (_a) { - var theme = _a.theme, - disabled = _a.disabled - return !disabled && polished.darken(0.05, theme.primary5) - }, - function (_a) { - var theme = _a.theme, - disabled = _a.disabled - return !disabled && polished.darken(0.05, theme.primary5) - }, - function (_a) { - var theme = _a.theme - return theme.primary5 - } -) -var ButtonGray = styled__default['default'](BaseButton)( - templateObject_4$d || - (templateObject_4$d = __makeTemplateObject( - [ - '\n background-color: ', - ';\n color: ', - ';\n font-size: 16px;\n font-weight: 500;\n\n &:hover {\n background-color: ', - ';\n }\n &:active {\n background-color: ', - ';\n }\n', - ], - [ - '\n background-color: ', - ';\n color: ', - ';\n font-size: 16px;\n font-weight: 500;\n\n &:hover {\n background-color: ', - ';\n }\n &:active {\n background-color: ', - ';\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.bg1 - }, - function (_a) { - var theme = _a.theme - return theme.text2 - }, - function (_a) { - var theme = _a.theme, - disabled = _a.disabled - return !disabled && polished.darken(0.05, theme.bg2) - }, - function (_a) { - var theme = _a.theme, - disabled = _a.disabled - return !disabled && polished.darken(0.1, theme.bg2) - } -) -styled__default['default'](BaseButton)( - templateObject_5$b || - (templateObject_5$b = __makeTemplateObject( - [ - '\n border: 1px solid ', - ';\n color: ', - ';\n background-color: transparent;\n font-size: 16px;\n border-radius: 12px;\n padding: ', - ';\n\n &:focus {\n box-shadow: 0 0 0 1pt ', - ';\n border: 1px solid ', - ';\n }\n &:hover {\n border: 1px solid ', - ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', - ';\n border: 1px solid ', - ';\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n a:hover {\n text-decoration: none;\n }\n', - ], - [ - '\n border: 1px solid ', - ';\n color: ', - ';\n background-color: transparent;\n font-size: 16px;\n border-radius: 12px;\n padding: ', - ';\n\n &:focus {\n box-shadow: 0 0 0 1pt ', - ';\n border: 1px solid ', - ';\n }\n &:hover {\n border: 1px solid ', - ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', - ';\n border: 1px solid ', - ';\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n a:hover {\n text-decoration: none;\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.primary4 - }, - function (_a) { - var theme = _a.theme - return theme.primary1 - }, - function (_a) { - var padding = _a.padding - return padding ? padding : '10px' - }, - function (_a) { - var theme = _a.theme - return theme.primary4 - }, - function (_a) { - var theme = _a.theme - return theme.primary3 - }, - function (_a) { - var theme = _a.theme - return theme.primary3 - }, - function (_a) { - var theme = _a.theme - return theme.primary4 - }, - function (_a) { - var theme = _a.theme - return theme.primary3 - } -) -var ButtonOutlined = styled__default['default'](BaseButton)( - templateObject_6$7 || - (templateObject_6$7 = __makeTemplateObject( - [ - '\n border: 1px solid ', - ';\n background-color: transparent;\n color: ', - ';\n &:focus {\n box-shadow: 0 0 0 1px ', - ';\n }\n &:hover {\n box-shadow: 0 0 0 1px ', - ';\n }\n &:active {\n box-shadow: 0 0 0 1px ', - ';\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n', - ], - [ - '\n border: 1px solid ', - ';\n background-color: transparent;\n color: ', - ';\n &:focus {\n box-shadow: 0 0 0 1px ', - ';\n }\n &:hover {\n box-shadow: 0 0 0 1px ', - ';\n }\n &:active {\n box-shadow: 0 0 0 1px ', - ';\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.bg2 - }, - function (_a) { - var theme = _a.theme - return theme.text1 - }, - function (_a) { - var theme = _a.theme - return theme.bg4 - }, - function (_a) { - var theme = _a.theme - return theme.bg4 - }, - function (_a) { - var theme = _a.theme - return theme.bg4 - } -) -styled__default['default'](BaseButton)( - templateObject_7$6 || - (templateObject_7$6 = __makeTemplateObject( - [ - '\n background-color: ', - ';\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n &:hover {\n background-color: ', - ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n &:disabled {\n background-color: ', - ';\n opacity: 50%;\n cursor: auto;\n }\n', - ], - [ - '\n background-color: ', - ';\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n &:hover {\n background-color: ', - ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n &:disabled {\n background-color: ', - ';\n opacity: 50%;\n cursor: auto;\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.yellow3 - }, - function (_a) { - var theme = _a.theme - return polished.darken(0.05, theme.yellow3) - }, - function (_a) { - var theme = _a.theme - return polished.darken(0.05, theme.yellow3) - }, - function (_a) { - var theme = _a.theme - return polished.darken(0.05, theme.yellow3) - }, - function (_a) { - var theme = _a.theme - return polished.darken(0.1, theme.yellow3) - }, - function (_a) { - var theme = _a.theme - return polished.darken(0.1, theme.yellow3) - }, - function (_a) { - var theme = _a.theme - return theme.yellow3 - } -) -var ButtonEmpty = styled__default['default'](BaseButton)( - templateObject_8$3 || - (templateObject_8$3 = __makeTemplateObject( - [ - '\n background-color: transparent;\n color: ', - ';\n display: flex;\n justify-content: center;\n align-items: center;\n\n &:focus {\n text-decoration: underline;\n }\n &:hover {\n text-decoration: none;\n }\n &:active {\n text-decoration: none;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n', - ], - [ - '\n background-color: transparent;\n color: ', - ';\n display: flex;\n justify-content: center;\n align-items: center;\n\n &:focus {\n text-decoration: underline;\n }\n &:hover {\n text-decoration: none;\n }\n &:active {\n text-decoration: none;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.primary1 - } -) -styled__default['default'](BaseButton)( - templateObject_9$3 || - (templateObject_9$3 = __makeTemplateObject( - [ - '\n padding: 0;\n width: fit-content;\n background: none;\n text-decoration: none;\n &:focus {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n text-decoration: underline;\n }\n &:hover {\n // text-decoration: underline;\n opacity: 0.9;\n }\n &:active {\n text-decoration: underline;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n', - ], - [ - '\n padding: 0;\n width: fit-content;\n background: none;\n text-decoration: none;\n &:focus {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n text-decoration: underline;\n }\n &:hover {\n // text-decoration: underline;\n opacity: 0.9;\n }\n &:active {\n text-decoration: underline;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n', - ] - )) -) -var ButtonConfirmedStyle = styled__default['default'](BaseButton)( - templateObject_10$3 || - (templateObject_10$3 = __makeTemplateObject( - [ - '\n background-color: ', - ';\n color: ', - ';\n /* border: 1px solid ', - '; */\n\n &:disabled {\n opacity: 50%;\n background-color: ', - ';\n color: ', - ';\n cursor: auto;\n }\n', - ], - [ - '\n background-color: ', - ';\n color: ', - ';\n /* border: 1px solid ', - '; */\n\n &:disabled {\n opacity: 50%;\n background-color: ', - ';\n color: ', - ';\n cursor: auto;\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.bg3 - }, - function (_a) { - var theme = _a.theme - return theme.text1 - }, - function (_a) { - var theme = _a.theme - return theme.green1 - }, - function (_a) { - var theme = _a.theme - return theme.bg2 - }, - function (_a) { - var theme = _a.theme - return theme.text2 - } -) -var ButtonErrorStyle = styled__default['default'](BaseButton)( - templateObject_11$3 || - (templateObject_11$3 = __makeTemplateObject( - [ - '\n background-color: ', - ';\n border: 1px solid ', - ';\n\n &:focus {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n &:hover {\n background-color: ', - ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n box-shadow: none;\n background-color: ', - ';\n border: 1px solid ', - ';\n }\n', - ], - [ - '\n background-color: ', - ';\n border: 1px solid ', - ';\n\n &:focus {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n &:hover {\n background-color: ', - ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n box-shadow: none;\n background-color: ', - ';\n border: 1px solid ', - ';\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.red1 - }, - function (_a) { - var theme = _a.theme - return theme.red1 - }, - function (_a) { - var theme = _a.theme - return polished.darken(0.05, theme.red1) - }, - function (_a) { - var theme = _a.theme - return polished.darken(0.05, theme.red1) - }, - function (_a) { - var theme = _a.theme - return polished.darken(0.05, theme.red1) - }, - function (_a) { - var theme = _a.theme - return polished.darken(0.1, theme.red1) - }, - function (_a) { - var theme = _a.theme - return polished.darken(0.1, theme.red1) - }, - function (_a) { - var theme = _a.theme - return theme.red1 - }, - function (_a) { - var theme = _a.theme - return theme.red1 - } -) -function ButtonConfirmed(_a) { - var confirmed = _a.confirmed, - altDisabledStyle = _a.altDisabledStyle, - rest = __rest(_a, ['confirmed', 'altDisabledStyle']) - if (confirmed) { - return jsxRuntime.jsx(ButtonConfirmedStyle, __assign({}, rest), void 0) - } else { - return jsxRuntime.jsx(ButtonPrimary, __assign({}, rest, { altDisabledStyle }), void 0) - } -} -function ButtonError(_a) { - var error = _a.error, - rest = __rest(_a, ['error']) - if (error) { - return jsxRuntime.jsx(ButtonErrorStyle, __assign({}, rest), void 0) - } else { - return jsxRuntime.jsx(ButtonPrimary, __assign({}, rest), void 0) - } -} -styled__default['default'](ButtonOutlined)( - templateObject_12$3 || - (templateObject_12$3 = __makeTemplateObject( - ['\n border: 1px solid;\n border-color: ', ';\n'], - ['\n border: 1px solid;\n border-color: ', ';\n'] - )), - function (_a) { - var theme = _a.theme - return theme.primary1 - } -) -styled__default['default'].div( - templateObject_13 || - (templateObject_13 = __makeTemplateObject( - [ - '\n height: 17px;\n width: 17px;\n border-radius: 50%;\n background-color: ', - ';\n display: flex;\n align-items: center;\n justify-content: center;\n', - ], - [ - '\n height: 17px;\n width: 17px;\n border-radius: 50%;\n background-color: ', - ';\n display: flex;\n align-items: center;\n justify-content: center;\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.primary1 - } -) -styled__default['default'].div( - templateObject_14 || - (templateObject_14 = __makeTemplateObject( - ['\n width: 20px;\n padding: 0 10px;\n position: absolute;\n top: 11px;\n right: 15px;\n'], - ['\n width: 20px;\n padding: 0 10px;\n position: absolute;\n top: 11px;\n right: 15px;\n'] - )) -) -styled__default['default'](reactFeather.Check)( - templateObject_15 || (templateObject_15 = __makeTemplateObject(['\n size: 13px;\n'], ['\n size: 13px;\n'])) -) -var templateObject_1$C, - templateObject_2$p, - templateObject_3$k, - templateObject_4$d, - templateObject_5$b, - templateObject_6$7, - templateObject_7$6, - templateObject_8$3, - templateObject_9$3, - templateObject_10$3, - templateObject_11$3, - templateObject_12$3, - templateObject_13, - templateObject_14, - templateObject_15 - -var parser = new uaParserJs.UAParser(window.navigator.userAgent) -var type$1 = parser.getDevice().type -parser.getResult() -var isMobile = type$1 === 'mobile' || type$1 === 'tablet' - -var AnimatedDialogOverlay = reactSpring.animated(dialog.DialogOverlay) -// eslint-disable-next-line @typescript-eslint/no-unused-vars -var StyledDialogOverlay = styled__default['default'](AnimatedDialogOverlay)( - templateObject_1$B || - (templateObject_1$B = __makeTemplateObject( - [ - '\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: ', - ';\n }\n', - ], - [ - '\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: ', - ';\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.modalBG - } -) -var AnimatedDialogContent = reactSpring.animated(dialog.DialogContent) -// destructure to not pass custom props to Dialog DOM element -// eslint-disable-next-line @typescript-eslint/no-unused-vars -var StyledDialogContent = styled__default['default'](function (_a) { - _a.minHeight - _a.maxHeight - _a.mobile - _a.isOpen - var rest = __rest(_a, ['minHeight', 'maxHeight', 'mobile', 'isOpen']) - return jsxRuntime.jsx(AnimatedDialogContent, __assign({}, rest), void 0) -}).attrs({ - 'aria-label': 'dialog', -})( - templateObject_7$5 || - (templateObject_7$5 = __makeTemplateObject( - [ - '\n overflow-y: auto;\n\n &[data-reach-dialog-content] {\n margin: 0 0 2rem 0;\n background-color: ', - ';\n border: 1px solid ', - ';\n box-shadow: 0 4px 8px 0 ', - ';\n padding: 0px;\n width: 50vw;\n overflow-y: auto;\n overflow-x: hidden;\n\n align-self: ', - ';\n\n max-width: 420px;\n ', - '\n ', - '\n display: flex;\n border-radius: 20px;\n ', - '\n ', - '\n }\n', - ], - [ - '\n overflow-y: auto;\n\n &[data-reach-dialog-content] {\n margin: 0 0 2rem 0;\n background-color: ', - ';\n border: 1px solid ', - ';\n box-shadow: 0 4px 8px 0 ', - ';\n padding: 0px;\n width: 50vw;\n overflow-y: auto;\n overflow-x: hidden;\n\n align-self: ', - ';\n\n max-width: 420px;\n ', - '\n ', - '\n display: flex;\n border-radius: 20px;\n ', - '\n ', - '\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.bg0 - }, - function (_a) { - var theme = _a.theme - return theme.bg1 - }, - function (_a) { - var theme = _a.theme - return polished.transparentize(0.95, theme.shadow1) - }, - function (_a) { - var mobile = _a.mobile - return mobile ? 'flex-end' : 'center' - }, - function (_a) { - var maxHeight = _a.maxHeight - return ( - maxHeight && - styled.css( - templateObject_2$o || - (templateObject_2$o = __makeTemplateObject( - ['\n max-height: ', 'vh;\n '], - ['\n max-height: ', 'vh;\n '] - )), - maxHeight - ) - ) - }, - function (_a) { - var minHeight = _a.minHeight - return ( - minHeight && - styled.css( - templateObject_3$j || - (templateObject_3$j = __makeTemplateObject( - ['\n min-height: ', 'vh;\n '], - ['\n min-height: ', 'vh;\n '] - )), - minHeight - ) - ) - }, - function (_a) { - var theme = _a.theme - return theme.mediaWidth.upToMedium( - templateObject_4$c || - (templateObject_4$c = __makeTemplateObject( - ['\n width: 65vw;\n margin: 0;\n '], - ['\n width: 65vw;\n margin: 0;\n '] - )) - ) - }, - function (_a) { - var theme = _a.theme, - mobile = _a.mobile - return theme.mediaWidth.upToSmall( - templateObject_6$6 || - (templateObject_6$6 = __makeTemplateObject( - ['\n width: 85vw;\n ', '\n '], - ['\n width: 85vw;\n ', '\n '] - )), - mobile && - styled.css( - templateObject_5$a || - (templateObject_5$a = __makeTemplateObject( - [ - '\n width: 100vw;\n border-radius: 20px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n ', - ], - [ - '\n width: 100vw;\n border-radius: 20px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n ', - ] - )) - ) - ) - } -) -function Modal(_a) { - var isOpen = _a.isOpen, - onDismiss = _a.onDismiss, - _b = _a.minHeight, - minHeight = _b === void 0 ? false : _b, - _c = _a.maxHeight, - maxHeight = _c === void 0 ? 90 : _c, - initialFocusRef = _a.initialFocusRef, - children = _a.children - var fadeTransition = reactSpring.useTransition(isOpen, null, { - config: { duration: 200 }, - from: { opacity: 0 }, - enter: { opacity: 1 }, - leave: { opacity: 0 }, - }) - var _d = __read( - reactSpring.useSpring(function () { - return { y: 0, config: { mass: 1, tension: 210, friction: 20 } } - }), - 2 - ), - y = _d[0].y, - set = _d[1] - var bind = reactUseGesture.useGesture({ - onDrag(state) { - set({ - y: state.down ? state.movement[1] : 0, - }) - if (state.movement[1] > 300 || (state.velocity > 3 && state.direction[1] > 0)) { - onDismiss() - } - }, - }) - return jsxRuntime.jsx( - jsxRuntime.Fragment, - { - children: fadeTransition.map(function (_a) { - var item = _a.item, - key = _a.key, - props = _a.props - return ( - item && - jsxRuntime.jsx( - StyledDialogOverlay, - __assign( - { - style: props, - onDismiss, - initialFocusRef, - unstable_lockFocusAcrossFrames: false, - }, - { - children: jsxRuntime.jsxs( - StyledDialogContent, - __assign( - {}, - isMobile - ? __assign(__assign({}, bind()), { - style: { - transform: y.interpolate(function (y) { - return 'translateY(' + (y > 0 ? y : 0) + 'px)' - }), - }, - }) - : {}, - { 'aria-label': 'dialog content', minHeight, maxHeight, mobile: isMobile }, - { - children: [ - !initialFocusRef && isMobile ? jsxRuntime.jsx('div', { tabIndex: 1 }, void 0) : null, - children, - ], - } - ), - void 0 - ), - } - ), - key - ) - ) - }), - }, - void 0 - ) -} -var templateObject_1$B, - templateObject_2$o, - templateObject_3$j, - templateObject_4$c, - templateObject_5$a, - templateObject_6$6, - templateObject_7$5 - -var _a$7 -var ETHERSCAN_PREFIXES = - ((_a$7 = {}), - (_a$7[SupportedChainId.MAINNET] = 'https://etherscan.io'), - (_a$7[SupportedChainId.ROPSTEN] = 'https://ropsten.etherscan.io'), - (_a$7[SupportedChainId.RINKEBY] = 'https://rinkeby.etherscan.io'), - (_a$7[SupportedChainId.GOERLI] = 'https://goerli.etherscan.io'), - (_a$7[SupportedChainId.KOVAN] = 'https://kovan.etherscan.io'), - (_a$7[SupportedChainId.OPTIMISM] = 'https://optimistic.etherscan.io'), - (_a$7[SupportedChainId.OPTIMISTIC_KOVAN] = 'https://kovan-optimistic.etherscan.io'), - (_a$7[SupportedChainId.POLYGON_MUMBAI] = 'https://mumbai.polygonscan.com'), - (_a$7[SupportedChainId.POLYGON] = 'https://polygonscan.com'), - _a$7) -var ExplorerDataType -;(function (ExplorerDataType) { - ExplorerDataType['TRANSACTION'] = 'transaction' - ExplorerDataType['TOKEN'] = 'token' - ExplorerDataType['ADDRESS'] = 'address' - ExplorerDataType['BLOCK'] = 'block' -})(ExplorerDataType || (ExplorerDataType = {})) -/** - * Return the explorer link for the given data and data type - * @param chainId the ID of the chain for which to return the data - * @param data the data to return a link for - * @param type the type of the data - */ -function getExplorerLink(chainId, data, type) { - var _a - if (chainId === SupportedChainId.ARBITRUM_ONE) { - switch (type) { - case ExplorerDataType.TRANSACTION: - return 'https://arbiscan.io/tx/' + data - case ExplorerDataType.ADDRESS: - case ExplorerDataType.TOKEN: - return 'https://arbiscan.io/address/' + data - case ExplorerDataType.BLOCK: - return 'https://arbiscan.io/block/' + data - default: - return 'https://arbiscan.io/' - } - } - if (chainId === SupportedChainId.ARBITRUM_RINKEBY) { - switch (type) { - case ExplorerDataType.TRANSACTION: - return 'https://rinkeby-explorer.arbitrum.io/tx/' + data - case ExplorerDataType.ADDRESS: - case ExplorerDataType.TOKEN: - return 'https://rinkeby-explorer.arbitrum.io/address/' + data - case ExplorerDataType.BLOCK: - return 'https://rinkeby-explorer.arbitrum.io/block/' + data - default: - return 'https://rinkeby-explorer.arbitrum.io/' - } - } - var prefix = (_a = ETHERSCAN_PREFIXES[chainId]) !== null && _a !== void 0 ? _a : 'https://etherscan.io' - switch (type) { - case ExplorerDataType.TRANSACTION: - return prefix + '/tx/' + data - case ExplorerDataType.TOKEN: - return prefix + '/token/' + data - case ExplorerDataType.BLOCK: - if (chainId === SupportedChainId.OPTIMISM || chainId === SupportedChainId.OPTIMISTIC_KOVAN) { - return prefix + '/tx/' + data - } - return prefix + '/block/' + data - case ExplorerDataType.ADDRESS: - return prefix + '/address/' + data - default: - return '' + prefix - } +function useFetchListCallback() { + var _this = this; + var _a = useActiveWeb3React(), chainId = _a.chainId, library = _a.library; + var dispatch = useAppDispatch(); + var ensResolver = React.useCallback(function (ensName) { return __awaiter(_this, void 0, void 0, function () { + var networkLibrary, network; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!(!library || chainId !== 1)) return [3 /*break*/, 2]; + networkLibrary = getNetworkLibrary(); + return [4 /*yield*/, networkLibrary.getNetwork()]; + case 1: + network = _a.sent(); + if (networkLibrary && network.chainId === 1) { + return [2 /*return*/, resolveENSContentHash(ensName, networkLibrary)]; + } + throw new Error('Could not construct mainnet ENS resolver'); + case 2: return [2 /*return*/, resolveENSContentHash(ensName, library)]; + } + }); + }); }, [chainId, library]); + // note: prevent dispatch if using for list search or unsupported list + return React.useCallback(function (listUrl, sendDispatch) { + if (sendDispatch === void 0) { sendDispatch = true; } + return __awaiter(_this, void 0, void 0, function () { + var requestId; + return __generator(this, function (_a) { + requestId = toolkit.nanoid(); + sendDispatch && dispatch(fetchTokenList.pending({ requestId: requestId, url: listUrl })); + return [2 /*return*/, fetchTokenList$1(listUrl, ensResolver) + .then(function (tokenList) { + sendDispatch && dispatch(fetchTokenList.fulfilled({ url: listUrl, tokenList: tokenList, requestId: requestId })); + return tokenList; + }) + .catch(function (error) { + console.debug("Failed to get list at url " + listUrl, error); + sendDispatch && dispatch(fetchTokenList.rejected({ url: listUrl, requestId: requestId, errorMessage: error.message })); + throw error; + })]; + }); + }); + }, [dispatch, ensResolver]); } -var DetailsFooter = styled__default['default'].div( - templateObject_1$A || - (templateObject_1$A = __makeTemplateObject( - [ - '\n padding-top: calc(16px + 2rem);\n padding-bottom: 20px;\n margin-left: auto;\n margin-right: auto;\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: ', - ';\n background-color: ', - ';\n z-index: ', - ';\n\n transform: ', - ';\n transition: transform 300ms ease-in-out;\n text-align: center;\n', - ], - [ - '\n padding-top: calc(16px + 2rem);\n padding-bottom: 20px;\n margin-left: auto;\n margin-right: auto;\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: ', - ';\n background-color: ', - ';\n z-index: ', - ';\n\n transform: ', - ';\n transition: transform 300ms ease-in-out;\n text-align: center;\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.text2 - }, - function (_a) { - var theme = _a.theme - return theme.advancedBG - }, - Z_INDEX.deprecated_zero, - function (_a) { - var show = _a.show - return show ? 'translateY(0%)' : 'translateY(-100%)' - } -) -var StyledButtonEmpty = styled__default['default'](ButtonEmpty)( - templateObject_2$n || - (templateObject_2$n = __makeTemplateObject(['\n text-decoration: none;\n'], ['\n text-decoration: none;\n'])) -) -var AddressText$1 = styled__default['default'](ThemedText.Blue)( - templateObject_4$b || - (templateObject_4$b = __makeTemplateObject( - ['\n font-size: 12px;\n\n ', '\n'], - ['\n font-size: 12px;\n\n ', '\n'] - )), - function (_a) { - var theme = _a.theme - return theme.mediaWidth.upToSmall( - templateObject_3$i || - (templateObject_3$i = __makeTemplateObject(['\n font-size: 10px;\n'], ['\n font-size: 10px;\n'])) - ) - } -) -function UnsupportedCurrencyFooter(_a) { - var show = _a.show, - currencies = _a.currencies - var chainId = useActiveWeb3React().chainId - var _b = __read(React.useState(false), 2), - showDetails = _b[0], - setShowDetails = _b[1] - var tokens = - chainId && currencies - ? currencies.map(function (currency) { - return currency === null || currency === void 0 ? void 0 : currency.wrapped - }) - : [] - var unsupportedTokens = useUnsupportedTokens() - return jsxRuntime.jsxs( - DetailsFooter, - __assign( - { show }, - { - children: [ - jsxRuntime.jsx( - Modal, - __assign( - { - isOpen: showDetails, - onDismiss() { - return setShowDetails(false) - }, - }, - { - children: jsxRuntime.jsx( - Card, - __assign( - { padding: '2rem' }, - { - children: jsxRuntime.jsxs( - AutoColumn, - __assign( - { gap: 'lg' }, - { - children: [ - jsxRuntime.jsxs( - RowBetween, - { - children: [ - jsxRuntime.jsx( - ThemedText.MediumHeader, - { - children: jsxRuntime.jsx( - macro.Trans, - { children: 'Unsupported Assets' }, - void 0 - ), - }, - void 0 - ), - jsxRuntime.jsx( - CloseIcon, - { - onClick() { - return setShowDetails(false) - }, - }, - void 0 - ), - ], - }, - void 0 - ), - tokens.map(function (token) { - var _a - return ( - token && - unsupportedTokens && - Object.keys(unsupportedTokens).includes(token.address) && - jsxRuntime.jsx( - OutlineCard, - { - children: jsxRuntime.jsxs( - AutoColumn, - __assign( - { gap: '10px' }, - { - children: [ - jsxRuntime.jsxs( - AutoRow, - __assign( - { gap: '5px', align: 'center' }, - { - children: [ - jsxRuntime.jsx( - CurrencyLogo, - { currency: token, size: '24px' }, - void 0 - ), - jsxRuntime.jsx( - ThemedText.Body, - __assign({ fontWeight: 500 }, { children: token.symbol }), - void 0 - ), - ], - } - ), - void 0 - ), - chainId && - jsxRuntime.jsx( - ExternalLink, - __assign( - { - href: getExplorerLink( - chainId, - token.address, - ExplorerDataType.ADDRESS - ), - }, - { - children: jsxRuntime.jsx( - AddressText$1, - { children: token.address }, - void 0 - ), - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - }, - (_a = token.address) === null || _a === void 0 ? void 0 : _a.concat('not-supported') - ) - ) - }), - jsxRuntime.jsx( - AutoColumn, - __assign( - { gap: 'lg' }, - { - children: jsxRuntime.jsx( - ThemedText.Body, - __assign( - { fontWeight: 500 }, - { - children: jsxRuntime.jsx( - macro.Trans, - { - children: - 'Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.', - }, - void 0 - ), - } - ), - void 0 - ), - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - } - ), - void 0 - ), - } - ), - void 0 - ), - jsxRuntime.jsx( - StyledButtonEmpty, - __assign( - { - padding: '0', - onClick() { - return setShowDetails(true) - }, - }, - { - children: jsxRuntime.jsx( - ThemedText.Blue, - { children: jsxRuntime.jsx(macro.Trans, { children: 'Read more about unsupported assets' }, void 0) }, - void 0 - ), - } - ), - void 0 - ), - ], - } - ), - void 0 - ) -} -var templateObject_1$A, templateObject_2$n, templateObject_3$i, templateObject_4$b - -/** - * Does a lookup for an ENS name to find its address. - */ -function useENSAddress(ensName) { - var _a - var debouncedName = useDebounce(ensName, 200) - var ensNodeArgument = React.useMemo( - function () { - return [debouncedName === null ? undefined : safeNamehash(debouncedName)] - }, - [debouncedName] - ) - var registrarContract = useENSRegistrarContract(false) - var resolverAddress = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument) - var resolverAddressResult = (_a = resolverAddress.result) === null || _a === void 0 ? void 0 : _a[0] - var resolverContract = useENSResolverContract( - resolverAddressResult && !isZero(resolverAddressResult) ? resolverAddressResult : undefined, - false - ) - var addr = useSingleCallResult(resolverContract, 'addr', ensNodeArgument) - var changed = debouncedName !== ensName - return React.useMemo( - function () { - var _a, _b - return { - address: changed - ? null - : (_b = (_a = addr.result) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 - ? _b - : null, - loading: changed || resolverAddress.loading || addr.loading, - } - }, - [addr.loading, addr.result, changed, resolverAddress.loading] - ) -} +var Wrapper$8 = styled__default["default"].div(templateObject_1$m || (templateObject_1$m = __makeTemplateObject(["\n position: relative;\n width: 100%;\n overflow: auto;\n"], ["\n position: relative;\n width: 100%;\n overflow: auto;\n"]))); +function ImportList(_a) { + var _b; + var listURL = _a.listURL, list = _a.list, setModalView = _a.setModalView, onDismiss = _a.onDismiss; + var theme = useTheme(); + var dispatch = useAppDispatch(); + // user must accept + var _c = __read(React.useState(false), 2), confirmed = _c[0], setConfirmed = _c[1]; + var lists = useAllLists(); + var fetchList = useFetchListCallback(); + // monitor is list is loading + var adding = Boolean((_b = lists[listURL]) === null || _b === void 0 ? void 0 : _b.loadingRequestId); + var _d = __read(React.useState(null), 2), addError = _d[0], setAddError = _d[1]; + var handleAddList = React.useCallback(function () { + if (adding) + return; + setAddError(null); + fetchList(listURL) + .then(function () { + ReactGA__default["default"].event({ + category: 'Lists', + action: 'Add List', + label: listURL, + }); + // turn list on + dispatch(enableList(listURL)); + // go back to lists + setModalView(CurrencyModalView.manage); + }) + .catch(function (error) { + ReactGA__default["default"].event({ + category: 'Lists', + action: 'Add List Failed', + label: listURL, + }); + setAddError(error.message); + dispatch(removeList(listURL)); + }); + }, [adding, dispatch, fetchList, listURL, setModalView]); + return (jsxRuntime.jsxs(Wrapper$8, { children: [jsxRuntime.jsx(PaddedColumn, __assign({ gap: "14px", style: { width: '100%', flex: '1 1' } }, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(reactFeather.ArrowLeft, { style: { cursor: 'pointer' }, onClick: function () { return setModalView(CurrencyModalView.manage); } }, void 0), jsxRuntime.jsx(ThemedText.MediumHeader, { children: jsxRuntime.jsx(macro.Trans, { children: "Import List" }, void 0) }, void 0), jsxRuntime.jsx(CloseIcon$2, { onClick: onDismiss }, void 0)] }, void 0) }), void 0), jsxRuntime.jsx(SectionBreak, {}, void 0), jsxRuntime.jsx(PaddedColumn, __assign({ gap: "md" }, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "md" }, { children: [jsxRuntime.jsx(Card, __assign({ backgroundColor: theme.bg2, padding: "12px 20px" }, { children: jsxRuntime.jsx(RowBetween, { children: jsxRuntime.jsxs(RowFixed, { children: [list.logoURI && jsxRuntime.jsx(ListLogo, { logoURI: list.logoURI, size: "40px" }, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "sm", style: { marginLeft: '20px' } }, { children: [jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 600, mr: "6px" }, { children: list.name }), void 0), jsxRuntime.jsx(TextDot, {}, void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: '16px', ml: "6px" }, { children: jsxRuntime.jsxs(macro.Trans, { children: [list.tokens.length, " tokens"] }, void 0) }), void 0)] }, void 0), jsxRuntime.jsx(ExternalLink, __assign({ href: "https://tokenlists.org/token-list?url=" + listURL }, { children: jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: '12px', color: theme.blue1 }, { children: listURL }), void 0) }), void 0)] }), void 0)] }, void 0) }, void 0) }), void 0), jsxRuntime.jsxs(Card, __assign({ style: { backgroundColor: polished.transparentize(0.8, theme.red1) } }, { children: [jsxRuntime.jsxs(AutoColumn, __assign({ justify: "center", style: { textAlign: 'center', gap: '16px', marginBottom: '12px' } }, { children: [jsxRuntime.jsx(reactFeather.AlertTriangle, { stroke: theme.red1, size: 32 }, void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 500, fontSize: 20, color: theme.red1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Import at your own risk" }, void 0) }), void 0)] }), void 0), jsxRuntime.jsxs(AutoColumn, __assign({ style: { textAlign: 'center', gap: '16px', marginBottom: '12px' } }, { children: [jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 500, color: theme.red1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one." }, void 0) }), void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 600, color: theme.red1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "If you purchase a token from this list, you may not be able to sell it back." }, void 0) }), void 0)] }), void 0), jsxRuntime.jsxs(AutoRow, __assign({ justify: "center", style: { cursor: 'pointer' }, onClick: function () { return setConfirmed(!confirmed); } }, { children: [jsxRuntime.jsx(Checkbox, { name: "confirmed", type: "checkbox", checked: confirmed, onChange: function () { return setConfirmed(!confirmed); } }, void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ ml: "10px", fontSize: "16px", color: theme.red1, fontWeight: 500 }, { children: jsxRuntime.jsx(macro.Trans, { children: "I understand" }, void 0) }), void 0)] }), void 0)] }), void 0), jsxRuntime.jsx(ButtonPrimary, __assign({ disabled: !confirmed, altDisabledStyle: true, "$borderRadius": "20px", padding: "10px 1rem", onClick: handleAddList }, { children: jsxRuntime.jsx(macro.Trans, { children: "Import" }, void 0) }), void 0), addError ? (jsxRuntime.jsx(ThemedText.Error, __assign({ title: addError, style: { textOverflow: 'ellipsis', overflow: 'hidden' }, error: true }, { children: addError }), void 0)) : null] }), void 0) }), void 0)] }, void 0)); +} +var templateObject_1$m; -/** - * Does a reverse lookup for an address to find its ENS name. - * Note this is not the same as looking up an ENS name to find an address. - */ -function useENSName(address) { - var _a, _b - var debouncedAddress = useDebounce(address, 200) - var ensNodeArgument = React.useMemo( - function () { - if (!debouncedAddress || !isAddress(debouncedAddress)) return [undefined] - return [hash.namehash(debouncedAddress.toLowerCase().substr(2) + '.addr.reverse')] - }, - [debouncedAddress] - ) - var registrarContract = useENSRegistrarContract(false) - var resolverAddress = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument) - var resolverAddressResult = (_a = resolverAddress.result) === null || _a === void 0 ? void 0 : _a[0] - var resolverContract = useENSResolverContract( - resolverAddressResult && !isZero(resolverAddressResult) ? resolverAddressResult : undefined, - false - ) - var nameCallRes = useSingleCallResult(resolverContract, 'name', ensNodeArgument) - var name = (_b = nameCallRes.result) === null || _b === void 0 ? void 0 : _b[0] - /* ENS does not enforce that an address owns a .eth domain before setting it as a reverse proxy - and recommends that you perform a match on the forward resolution - see: https://docs.ens.domains/dapp-developer-guide/resolving-names#reverse-resolution - */ - var fwdAddr = useENSAddress(name) - var checkedName = address === (fwdAddr === null || fwdAddr === void 0 ? void 0 : fwdAddr.address) ? name : null - var changed = debouncedAddress !== address - return React.useMemo( - function () { - return { - ENSName: changed ? null : checkedName, - loading: changed || resolverAddress.loading || nameCallRes.loading, - } - }, - [changed, nameCallRes.loading, checkedName, resolverAddress.loading] - ) -} +var WarningWrapper = styled__default["default"](Card)(templateObject_1$l || (templateObject_1$l = __makeTemplateObject(["\n background-color: ", ";\n width: fit-content;\n"], ["\n background-color: ", ";\n width: fit-content;\n"])), function (_a) { + var theme = _a.theme, highWarning = _a.highWarning; + return highWarning ? polished.transparentize(0.8, theme.red1) : polished.transparentize(0.8, theme.yellow2); +}); +var AddressText = styled__default["default"](ThemedText.Blue)(templateObject_3$a || (templateObject_3$a = __makeTemplateObject(["\n font-size: 12px;\n word-break: break-all;\n\n ", "\n"], ["\n font-size: 12px;\n word-break: break-all;\n\n ", "\n"])), function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToSmall(templateObject_2$c || (templateObject_2$c = __makeTemplateObject(["\n font-size: 10px;\n "], ["\n font-size: 10px;\n "]))); +}); +var TokenImportCard = function (_a) { + var list = _a.list, token = _a.token; + var theme = styled.useTheme(); + var chainId = useActiveWeb3React().chainId; + return (jsxRuntime.jsx(Card, __assign({ backgroundColor: theme.bg2, padding: "2rem" }, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "10px", justify: "center" }, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: token, size: '32px' }, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "4px", justify: "center" }, { children: [jsxRuntime.jsx(ThemedText.Body, __assign({ ml: "8px", mr: "8px", fontWeight: 500, fontSize: 20 }, { children: token.symbol }), void 0), jsxRuntime.jsx(ThemedText.DarkGray, __assign({ fontWeight: 400, fontSize: 14 }, { children: token.name }), void 0)] }), void 0), chainId && (jsxRuntime.jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, token.address, ExplorerDataType.ADDRESS) }, { children: jsxRuntime.jsx(AddressText, __assign({ fontSize: 12 }, { children: token.address }), void 0) }), void 0)), list !== undefined ? (jsxRuntime.jsxs(RowFixed, { children: [list.logoURI && jsxRuntime.jsx(ListLogo, { logoURI: list.logoURI, size: "16px" }, void 0), jsxRuntime.jsx(ThemedText.Small, __assign({ ml: "6px", fontSize: 14, color: theme.text3 }, { children: jsxRuntime.jsxs(macro.Trans, { children: ["via ", list.name, " token list"] }, void 0) }), void 0)] }, void 0)) : (jsxRuntime.jsx(WarningWrapper, __assign({ "$borderRadius": "4px", padding: "4px", highWarning: true }, { children: jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(reactFeather.AlertCircle, { stroke: theme.red1, size: "10px" }, void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ color: theme.red1, ml: "4px", fontSize: "10px", fontWeight: 500 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Unknown Source" }, void 0) }), void 0)] }, void 0) }), void 0))] }), void 0) }), void 0)); +}; +var templateObject_1$l, templateObject_2$c, templateObject_3$a; -/** - * Given a name or address, does a lookup to resolve to an address and name - * @param nameOrAddress ENS name or address - */ -function useENS(nameOrAddress) { - var validated = isAddress(nameOrAddress) - var reverseLookup = useENSName(validated ? validated : undefined) - var lookup = useENSAddress(nameOrAddress) - return React.useMemo( - function () { - return { - loading: reverseLookup.loading || lookup.loading, - address: validated ? validated : lookup.address, - name: reverseLookup.ENSName - ? reverseLookup.ENSName - : !validated && lookup.address - ? nameOrAddress || null - : null, - } - }, - [lookup.address, lookup.loading, nameOrAddress, reverseLookup.ENSName, reverseLookup.loading, validated] - ) -} +var Wrapper$7 = styled__default["default"].div(templateObject_1$k || (templateObject_1$k = __makeTemplateObject(["\n align-items: center;\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n height: 100%;\n width: 100%;\n"], ["\n align-items: center;\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n height: 100%;\n width: 100%;\n"]))); +var Button = styled__default["default"](ButtonPrimary)(templateObject_2$b || (templateObject_2$b = __makeTemplateObject(["\n margin-top: 1em;\n padding: 10px 1em;\n"], ["\n margin-top: 1em;\n padding: 10px 1em;\n"]))); +var Content = styled__default["default"].div(templateObject_3$9 || (templateObject_3$9 = __makeTemplateObject(["\n padding: 1em;\n"], ["\n padding: 1em;\n"]))); +var Copy = styled__default["default"](ThemedText.Body)(templateObject_4$7 || (templateObject_4$7 = __makeTemplateObject(["\n text-align: center;\n margin: 0 2em 1em !important;\n font-weight: 400;\n font-size: 16px;\n"], ["\n text-align: center;\n margin: 0 2em 1em !important;\n font-weight: 400;\n font-size: 16px;\n"]))); +var Header = styled__default["default"].div(templateObject_5$7 || (templateObject_5$7 = __makeTemplateObject(["\n align-items: center;\n display: flex;\n gap: 14px;\n justify-content: space-between;\n padding: 20px;\n width: 100%;\n"], ["\n align-items: center;\n display: flex;\n gap: 14px;\n justify-content: space-between;\n padding: 20px;\n width: 100%;\n"]))); +var Icon = styled__default["default"](reactFeather.AlertCircle)(templateObject_6$4 || (templateObject_6$4 = __makeTemplateObject(["\n stroke: ", ";\n width: 48px;\n height: 48px;\n"], ["\n stroke: ", ";\n width: 48px;\n height: 48px;\n"])), function (_a) { + var theme = _a.theme; + return theme.text2; +}); +var BlockedToken = function (_a) { + var onBack = _a.onBack, onDismiss = _a.onDismiss, blockedTokens = _a.blockedTokens; + return (jsxRuntime.jsxs(Wrapper$7, { children: [jsxRuntime.jsxs(Header, { children: [onBack ? jsxRuntime.jsx(reactFeather.ArrowLeft, { style: { cursor: 'pointer' }, onClick: onBack }, void 0) : jsxRuntime.jsx("div", {}, void 0), jsxRuntime.jsx(ThemedText.MediumHeader, { children: jsxRuntime.jsx(macro.Trans, { children: "Token not supported" }, void 0) }, void 0), onDismiss ? jsxRuntime.jsx(CloseIcon$2, { onClick: onDismiss }, void 0) : jsxRuntime.jsx("div", {}, void 0)] }, void 0), jsxRuntime.jsx(Icon, {}, void 0), jsxRuntime.jsxs(Content, { children: [jsxRuntime.jsx(Copy, { children: jsxRuntime.jsx(macro.Trans, { children: "This token is not supported in the Uniswap Labs app" }, void 0) }, void 0), jsxRuntime.jsx(TokenImportCard, { token: blockedTokens[0] }, void 0), jsxRuntime.jsx(Button, __assign({ disabled: true }, { children: jsxRuntime.jsx(macro.Trans, { children: "Import" }, void 0) }), void 0)] }, void 0)] }, void 0)); +}; +var templateObject_1$k, templateObject_2$b, templateObject_3$9, templateObject_4$7, templateObject_5$7, templateObject_6$4; -var InputPanel$1 = styled__default['default'].div( - templateObject_1$z || - (templateObject_1$z = __makeTemplateObject( - [ - '\n ', - '\n position: relative;\n border-radius: 1.25rem;\n background-color: ', - ';\n z-index: 1;\n width: 100%;\n', - ], - [ - '\n ', - '\n position: relative;\n border-radius: 1.25rem;\n background-color: ', - ';\n z-index: 1;\n width: 100%;\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.flexColumnNoWrap - }, - function (_a) { - var theme = _a.theme - return theme.bg1 - } -) -var ContainerRow = styled__default['default'].div( - templateObject_2$m || - (templateObject_2$m = __makeTemplateObject( - [ - '\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 1.25rem;\n border: 1px solid ', - ';\n transition: border-color 300ms ', - ',\n color 500ms ', - ';\n background-color: ', - ';\n', - ], - [ - '\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 1.25rem;\n border: 1px solid ', - ';\n transition: border-color 300ms ', - ',\n color 500ms ', - ';\n background-color: ', - ';\n', - ] - )), - function (_a) { - var error = _a.error, - theme = _a.theme - return error ? theme.red1 : theme.bg2 - }, - function (_a) { - var error = _a.error - return error ? 'step-end' : 'step-start' - }, - function (_a) { - var error = _a.error - return error ? 'step-end' : 'step-start' - }, - function (_a) { - var theme = _a.theme - return theme.bg1 - } -) -var InputContainer = styled__default['default'].div( - templateObject_3$h || - (templateObject_3$h = __makeTemplateObject( - ['\n flex: 1;\n padding: 1rem;\n'], - ['\n flex: 1;\n padding: 1rem;\n'] - )) -) -var Input$2 = styled__default['default'].input( - templateObject_4$a || - (templateObject_4$a = __makeTemplateObject( - [ - '\n font-size: 1.25rem;\n outline: none;\n border: none;\n flex: 1 1 auto;\n width: 0;\n background-color: ', - ';\n transition: color 300ms ', - ';\n color: ', - ';\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 500;\n width: 100%;\n ::placeholder {\n color: ', - ';\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: ', - ';\n }\n', - ], - [ - '\n font-size: 1.25rem;\n outline: none;\n border: none;\n flex: 1 1 auto;\n width: 0;\n background-color: ', - ';\n transition: color 300ms ', - ';\n color: ', - ';\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 500;\n width: 100%;\n ::placeholder {\n color: ', - ';\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: ', - ';\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.bg1 - }, - function (_a) { - var error = _a.error - return error ? 'step-end' : 'step-start' - }, - function (_a) { - var error = _a.error, - theme = _a.theme - return error ? theme.red1 : theme.text1 - }, - function (_a) { - var theme = _a.theme - return theme.text4 - }, - function (_a) { - var theme = _a.theme - return theme.text4 - } -) -function AddressInputPanel(_a) { - var id = _a.id, - _b = _a.className, - className = _b === void 0 ? 'recipient-address-input' : _b, - label = _a.label, - placeholder = _a.placeholder, - value = _a.value, - onChange = _a.onChange - var chainId = useActiveWeb3React().chainId - var theme = React.useContext(styled.ThemeContext) - var _c = useENS(value), - address = _c.address, - loading = _c.loading, - name = _c.name - var handleInput = React.useCallback( - function (event) { - var input = event.target.value - var withoutSpaces = input.replace(/\s+/g, '') - onChange(withoutSpaces) - }, - [onChange] - ) - var error = Boolean(value.length > 0 && !loading && !address) - return jsxRuntime.jsx( - InputPanel$1, - __assign( - { id }, - { - children: jsxRuntime.jsx( - ContainerRow, - __assign( - { error }, - { - children: jsxRuntime.jsx( - InputContainer, - { - children: jsxRuntime.jsxs( - AutoColumn, - __assign( - { gap: 'md' }, - { - children: [ - jsxRuntime.jsxs( - RowBetween, - { - children: [ - jsxRuntime.jsx( - ThemedText.Black, - __assign( - { color: theme.text2, fontWeight: 500, fontSize: 14 }, - { - children: - label !== null && label !== void 0 - ? label - : jsxRuntime.jsx(macro.Trans, { children: 'Recipient' }, void 0), - } - ), - void 0 - ), - address && - chainId && - jsxRuntime.jsx( - ExternalLink, - __assign( - { - href: getExplorerLink( - chainId, - name !== null && name !== void 0 ? name : address, - ExplorerDataType.ADDRESS - ), - style: { fontSize: '14px' }, - }, - { - children: jsxRuntime.jsx( - macro.Trans, - { children: '(View on Explorer)' }, - void 0 - ), - } - ), - void 0 - ), - ], - }, - void 0 - ), - jsxRuntime.jsx( - Input$2, - { - className, - type: 'text', - autoComplete: 'off', - autoCorrect: 'off', - autoCapitalize: 'off', - spellCheck: 'false', - placeholder: - placeholder !== null && placeholder !== void 0 - ? placeholder - : macro.t( - templateObject_5$9 || - (templateObject_5$9 = __makeTemplateObject( - ['Wallet Address or ENS name'], - ['Wallet Address or ENS name'] - )) - ), - error, - pattern: '^(0x[a-fA-F0-9]{40})$', - onChange: handleInput, - value, - }, - void 0 - ), - ], - } - ), - void 0 - ), - }, - void 0 - ), - } - ), - void 0 - ), - } - ), - void 0 - ) -} -var templateObject_1$z, templateObject_2$m, templateObject_3$h, templateObject_4$a, templateObject_5$9 +var Wrapper$6 = styled__default["default"].div(templateObject_1$j || (templateObject_1$j = __makeTemplateObject(["\n position: relative;\n width: 100%;\n overflow: auto;\n"], ["\n position: relative;\n width: 100%;\n overflow: auto;\n"]))); +function ImportToken(props) { + var tokens = props.tokens, list = props.list, onBack = props.onBack, onDismiss = props.onDismiss, handleCurrencySelect = props.handleCurrencySelect; + var theme = useTheme(); + var addToken = useAddUserToken(); + var unsupportedTokens = useUnsupportedTokens(); + var unsupportedSet = new Set(Object.keys(unsupportedTokens)); + var intersection = new Set(tokens.filter(function (token) { return unsupportedSet.has(token.address); })); + if (intersection.size > 0) { + return jsxRuntime.jsx(BlockedToken, { onBack: onBack, onDismiss: onDismiss, blockedTokens: Array.from(intersection) }, void 0); + } + return (jsxRuntime.jsxs(Wrapper$6, { children: [jsxRuntime.jsx(PaddedColumn, __assign({ gap: "14px", style: { width: '100%', flex: '1 1' } }, { children: jsxRuntime.jsxs(RowBetween, { children: [onBack ? jsxRuntime.jsx(reactFeather.ArrowLeft, { style: { cursor: 'pointer' }, onClick: onBack }, void 0) : jsxRuntime.jsx("div", {}, void 0), jsxRuntime.jsx(ThemedText.MediumHeader, { children: jsxRuntime.jsx(macro.Plural, { value: tokens.length, one: "Import token", other: "Import tokens" }, void 0) }, void 0), onDismiss ? jsxRuntime.jsx(CloseIcon$2, { onClick: onDismiss }, void 0) : jsxRuntime.jsx("div", {}, void 0)] }, void 0) }), void 0), jsxRuntime.jsx(SectionBreak, {}, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "md", style: { marginBottom: '32px', padding: '1rem' } }, { children: [jsxRuntime.jsxs(AutoColumn, __assign({ justify: "center", style: { textAlign: 'center', gap: '16px', padding: '1rem' } }, { children: [jsxRuntime.jsx(reactFeather.AlertCircle, { size: 48, stroke: theme.text2, strokeWidth: 1 }, void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 400, fontSize: 16 }, { children: jsxRuntime.jsx(macro.Trans, { children: "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade." }, void 0) }), void 0)] }), void 0), tokens.map(function (token) { return (jsxRuntime.jsx(TokenImportCard, { token: token, list: list }, 'import' + token.address)); }), jsxRuntime.jsx(ButtonPrimary, __assign({ altDisabledStyle: true, "$borderRadius": "20px", padding: "10px 1rem", onClick: function () { + tokens.map(function (token) { return addToken(token); }); + handleCurrencySelect && handleCurrencySelect(tokens[0]); + }, className: ".token-dismiss-button" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Import" }, void 0) }), void 0)] }), void 0)] }, void 0)); +} +var templateObject_1$j; -function formatCurrencyAmount(amount, sigFigs) { - if (!amount) { - return '-' - } - if (JSBI__default['default'].equal(amount.quotient, JSBI__default['default'].BigInt(0))) { - return '0' - } - if (amount.divide(amount.decimalScale).lessThan(new sdkCore.Fraction(1, 100000))) { - return '<0.00001' - } - return amount.toSignificant(sigFigs) +function getColorFromUriPath(uri) { + return __awaiter(this, void 0, void 0, function () { + var formattedPath, palette, detectedHex, AAscore; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + formattedPath = uriToHttp(uri)[0]; + return [4 /*yield*/, Vibrant__default["default"].from(formattedPath).getPalette()]; + case 1: + palette = _a.sent(); + if (!(palette === null || palette === void 0 ? void 0 : palette.Vibrant)) { + return [2 /*return*/, null]; + } + detectedHex = palette.Vibrant.hex; + AAscore = wcagContrast.hex(detectedHex, '#FFF'); + while (AAscore < 3) { + detectedHex = polished.shade(0.005, detectedHex); + AAscore = wcagContrast.hex(detectedHex, '#FFF'); + } + return [2 /*return*/, detectedHex]; + } + }); + }); +} +function useListColor(listImageUri) { + var _a = __read(React.useState('#2172E5'), 2), color = _a[0], setColor = _a[1]; + React.useLayoutEffect(function () { + var stale = false; + if (listImageUri) { + getColorFromUriPath(listImageUri).then(function (color) { + if (!stale && color !== null) { + setColor(color); + } + }); + } + return function () { + stale = true; + setColor('#2172E5'); + }; + }, [listImageUri]); + return color; } -var _path - -function _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) +function listVersionLabel(version) { + return "v" + version.major + "." + version.minor + "." + version.patch; } -var SvgDropdown = function SvgDropdown(props) { - return /*#__PURE__*/ React__namespace.createElement( - 'svg', - _extends( - { - width: 12, - height: 7, - viewBox: '0 0 12 7', - fill: 'none', - xmlns: 'http://www.w3.org/2000/svg', - }, - props - ), - _path || - (_path = /*#__PURE__*/ React__namespace.createElement('path', { - d: 'M0.97168 1L6.20532 6L11.439 1', - stroke: '#AEAEAE', - })) - ) -} +var Wrapper$5 = styled__default["default"].button(templateObject_1$i || (templateObject_1$i = __makeTemplateObject(["\n border-radius: 20px;\n border: none;\n background: ", ";\n display: flex;\n width: fit-content;\n cursor: pointer;\n outline: none;\n padding: 0.4rem 0.4rem;\n align-items: center;\n"], ["\n border-radius: 20px;\n border: none;\n background: ", ";\n display: flex;\n width: fit-content;\n cursor: pointer;\n outline: none;\n padding: 0.4rem 0.4rem;\n align-items: center;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg1; +}); +var ToggleElement$1 = styled__default["default"].span(templateObject_2$a || (templateObject_2$a = __makeTemplateObject(["\n border-radius: 50%;\n height: 24px;\n width: 24px;\n background-color: ", ";\n :hover {\n opacity: 0.8;\n }\n"], ["\n border-radius: 50%;\n height: 24px;\n width: 24px;\n background-color: ", ";\n :hover {\n opacity: 0.8;\n }\n"])), function (_a) { + var isActive = _a.isActive, bgColor = _a.bgColor, theme = _a.theme; + return (isActive ? bgColor : theme.bg4); +}); +var StatusText = styled__default["default"](ThemedText.Main)(templateObject_3$8 || (templateObject_3$8 = __makeTemplateObject(["\n margin: 0 10px;\n width: 24px;\n color: ", ";\n"], ["\n margin: 0 10px;\n width: 24px;\n color: ", ";\n"])), function (_a) { + var theme = _a.theme, isActive = _a.isActive; + return (isActive ? theme.text1 : theme.text3); +}); +function ListToggle(_a) { + var id = _a.id, isActive = _a.isActive, bgColor = _a.bgColor, toggle = _a.toggle; + return (jsxRuntime.jsxs(Wrapper$5, __assign({ id: id, isActive: isActive, onClick: toggle }, { children: [isActive && (jsxRuntime.jsx(StatusText, __assign({ fontWeight: "600", margin: "0 6px", isActive: true }, { children: jsxRuntime.jsx(macro.Trans, { children: "ON" }, void 0) }), void 0)), jsxRuntime.jsx(ToggleElement$1, { isActive: isActive, bgColor: bgColor }, void 0), !isActive && (jsxRuntime.jsx(StatusText, __assign({ fontWeight: "600", margin: "0 6px", isActive: false }, { children: jsxRuntime.jsx(macro.Trans, { children: "OFF" }, void 0) }), void 0))] }), void 0)); +} +var templateObject_1$i, templateObject_2$a, templateObject_3$8; -/** - * Returns the gas value plus a margin for unexpected or variable gas costs - * @param value the gas value to pad - */ -function calculateGasMargin(value) { - return value.mul(120).div(100) -} +var Wrapper$4 = styled__default["default"](Column)(templateObject_1$h || (templateObject_1$h = __makeTemplateObject(["\n flex: 1;\n overflow-y: hidden;\n"], ["\n flex: 1;\n overflow-y: hidden;\n"]))); +var UnpaddedLinkStyledButton = styled__default["default"](LinkStyledButton)(templateObject_2$9 || (templateObject_2$9 = __makeTemplateObject(["\n padding: 0;\n font-size: 1rem;\n opacity: ", ";\n"], ["\n padding: 0;\n font-size: 1rem;\n opacity: ", ";\n"])), function (_a) { + var disabled = _a.disabled; + return (disabled ? '0.4' : '1'); +}); +var PopoverContainer = styled__default["default"].div(templateObject_3$7 || (templateObject_3$7 = __makeTemplateObject(["\n z-index: 100;\n visibility: ", ";\n opacity: ", ";\n transition: visibility 150ms linear, opacity 150ms linear;\n background: ", ";\n border: 1px solid ", ";\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: ", ";\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 z-index: 100;\n visibility: ", ";\n opacity: ", ";\n transition: visibility 150ms linear, opacity 150ms linear;\n background: ", ";\n border: 1px solid ", ";\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: ", ";\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"])), function (props) { return (props.show ? 'visible' : 'hidden'); }, function (props) { return (props.show ? 1 : 0); }, function (_a) { + var theme = _a.theme; + return theme.bg2; +}, function (_a) { + var theme = _a.theme; + return theme.bg3; +}, function (_a) { + var theme = _a.theme; + return theme.text2; +}); +var StyledMenu$1 = styled__default["default"].div(templateObject_4$6 || (templateObject_4$6 = __makeTemplateObject(["\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n"], ["\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n"]))); +var StyledTitleText = styled__default["default"].div(templateObject_5$6 || (templateObject_5$6 = __makeTemplateObject(["\n font-size: 16px;\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 600;\n color: ", ";\n"], ["\n font-size: 16px;\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 600;\n color: ", ";\n"])), function (_a) { + var theme = _a.theme, active = _a.active; + return (active ? theme.white : theme.text2); +}); +var StyledListUrlText = styled__default["default"](ThemedText.Main)(templateObject_6$3 || (templateObject_6$3 = __makeTemplateObject(["\n font-size: 12px;\n color: ", ";\n"], ["\n font-size: 12px;\n color: ", ";\n"])), function (_a) { + var theme = _a.theme, active = _a.active; + return (active ? theme.white : theme.text2); +}); +var RowWrapper = styled__default["default"](Row$1)(templateObject_7$3 || (templateObject_7$3 = __makeTemplateObject(["\n background-color: ", ";\n opacity: ", ";\n transition: 200ms;\n align-items: center;\n padding: 1rem;\n border-radius: 20px;\n"], ["\n background-color: ", ";\n opacity: ", ";\n transition: 200ms;\n align-items: center;\n padding: 1rem;\n border-radius: 20px;\n"])), function (_a) { + var bgColor = _a.bgColor, active = _a.active, theme = _a.theme; + return (active ? bgColor !== null && bgColor !== void 0 ? bgColor : 'transparent' : theme.bg2); +}, function (_a) { + var hasActiveTokens = _a.hasActiveTokens; + return (hasActiveTokens ? 1 : 0.4); +}); +function listUrlRowHTMLId(listUrl) { + return "list-row-" + listUrl.replace(/\./g, '-'); +} +var ListRow = React.memo(function ListRow(_a) { + var listUrl = _a.listUrl; + var chainId = useActiveWeb3React().chainId; + var listsByUrl = useAppSelector(function (state) { return state.lists.byUrl; }); + var dispatch = useAppDispatch(); + var _b = listsByUrl[listUrl], list = _b.current, pending = _b.pendingUpdate; + var activeTokensOnThisChain = React.useMemo(function () { + if (!list || !chainId) { + return 0; + } + return list.tokens.reduce(function (acc, cur) { return (cur.chainId === chainId ? acc + 1 : acc); }, 0); + }, [chainId, list]); + var theme = useTheme(); + var listColor = useListColor(list === null || list === void 0 ? void 0 : list.logoURI); + var isActive = useIsListActive(listUrl); + var _c = __read(useToggle(false), 2), open = _c[0], toggle = _c[1]; + var node = React.useRef(); + var _d = __read(React.useState(), 2), referenceElement = _d[0], setReferenceElement = _d[1]; + var _e = __read(React.useState(), 2), popperElement = _e[0], setPopperElement = _e[1]; + var _f = reactPopper.usePopper(referenceElement, popperElement, { + placement: 'auto', + strategy: 'fixed', + modifiers: [{ name: 'offset', options: { offset: [8, 8] } }], + }), styles = _f.styles, attributes = _f.attributes; + useOnClickOutside(node, open ? toggle : undefined); + var handleAcceptListUpdate = React.useCallback(function () { + if (!pending) + return; + ReactGA__default["default"].event({ + category: 'Lists', + action: 'Update List from List Select', + label: listUrl, + }); + dispatch(acceptListUpdate(listUrl)); + }, [dispatch, listUrl, pending]); + var handleRemoveList = React.useCallback(function () { + ReactGA__default["default"].event({ + category: 'Lists', + action: 'Start Remove List', + label: listUrl, + }); + if (window.prompt(macro.t(templateObject_8$2 || (templateObject_8$2 = __makeTemplateObject(["Please confirm you would like to remove this list by typing REMOVE"], ["Please confirm you would like to remove this list by typing REMOVE"])))) === "REMOVE") { + ReactGA__default["default"].event({ + category: 'Lists', + action: 'Confirm Remove List', + label: listUrl, + }); + dispatch(removeList(listUrl)); + } + }, [dispatch, listUrl]); + var handleEnableList = React.useCallback(function () { + ReactGA__default["default"].event({ + category: 'Lists', + action: 'Enable List', + label: listUrl, + }); + dispatch(enableList(listUrl)); + }, [dispatch, listUrl]); + var handleDisableList = React.useCallback(function () { + ReactGA__default["default"].event({ + category: 'Lists', + action: 'Disable List', + label: listUrl, + }); + dispatch(disableList(listUrl)); + }, [dispatch, listUrl]); + if (!list) + return null; + return (jsxRuntime.jsxs(RowWrapper, __assign({ active: isActive, hasActiveTokens: activeTokensOnThisChain > 0, bgColor: listColor, id: listUrlRowHTMLId(listUrl) }, { children: [list.logoURI ? (jsxRuntime.jsx(ListLogo, { size: "40px", style: { marginRight: '1rem' }, logoURI: list.logoURI, alt: list.name + " list logo" }, void 0)) : (jsxRuntime.jsx("div", { style: { width: '24px', height: '24px', marginRight: '1rem' } }, void 0)), jsxRuntime.jsxs(Column, __assign({ style: { flex: '1' } }, { children: [jsxRuntime.jsx(Row$1, { children: jsxRuntime.jsx(StyledTitleText, __assign({ active: isActive }, { children: list.name }), void 0) }, void 0), jsxRuntime.jsxs(RowFixed, __assign({ mt: "4px" }, { children: [jsxRuntime.jsx(StyledListUrlText, __assign({ active: isActive, mr: "6px" }, { children: jsxRuntime.jsxs(macro.Trans, { children: [activeTokensOnThisChain, " tokens"] }, void 0) }), void 0), jsxRuntime.jsxs(StyledMenu$1, __assign({ ref: node }, { children: [jsxRuntime.jsx(ButtonEmpty, __assign({ onClick: toggle, ref: setReferenceElement, padding: "0" }, { children: jsxRuntime.jsx(reactFeather.Settings, { stroke: isActive ? theme.bg1 : theme.text1, size: 12 }, void 0) }), void 0), open && (jsxRuntime.jsxs(PopoverContainer, __assign({ show: true, ref: setPopperElement, style: styles.popper }, attributes.popper, { children: [jsxRuntime.jsx("div", { children: list && listVersionLabel(list.version) }, void 0), jsxRuntime.jsx(SeparatorDark, {}, void 0), jsxRuntime.jsx(ExternalLink, __assign({ href: "https://tokenlists.org/token-list?url=" + listUrl }, { children: jsxRuntime.jsx(macro.Trans, { children: "View list" }, void 0) }), void 0), jsxRuntime.jsx(UnpaddedLinkStyledButton, __assign({ onClick: handleRemoveList, disabled: Object.keys(listsByUrl).length === 1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Remove list" }, void 0) }), void 0), pending && (jsxRuntime.jsx(UnpaddedLinkStyledButton, __assign({ onClick: handleAcceptListUpdate }, { children: jsxRuntime.jsx(macro.Trans, { children: "Update list" }, void 0) }), void 0))] }), void 0))] }), void 0)] }), void 0)] }), void 0), jsxRuntime.jsx(ListToggle, { isActive: isActive, bgColor: listColor, toggle: function () { + isActive ? handleDisableList() : handleEnableList(); + } }, void 0)] }), listUrl)); +}); +var ListContainer = styled__default["default"].div(templateObject_9$2 || (templateObject_9$2 = __makeTemplateObject(["\n padding: 1rem;\n height: 100%;\n overflow: auto;\n flex: 1;\n"], ["\n padding: 1rem;\n height: 100%;\n overflow: auto;\n flex: 1;\n"]))); +function ManageLists(_a) { + var setModalView = _a.setModalView, setImportList = _a.setImportList, setListUrl = _a.setListUrl; + var chainId = useActiveWeb3React().chainId; + var theme = useTheme(); + var _b = __read(React.useState(''), 2), listUrlInput = _b[0], setListUrlInput = _b[1]; + var lists = useAllLists(); + var tokenCountByListName = React.useMemo(function () { + return Object.values(lists).reduce(function (acc, _a) { + var _b; + var list = _a.current; + if (!list) { + return acc; + } + return __assign(__assign({}, acc), (_b = {}, _b[list.name] = list.tokens.reduce(function (count, token) { return (token.chainId === chainId ? count + 1 : count); }, 0), _b)); + }, {}); + }, [chainId, lists]); + // sort by active but only if not visible + var activeListUrls = useActiveListUrls(); + var handleInput = React.useCallback(function (e) { + setListUrlInput(e.target.value); + }, []); + var fetchList = useFetchListCallback(); + var validUrl = React.useMemo(function () { + return uriToHttp(listUrlInput).length > 0 || Boolean(parseENSAddress(listUrlInput)); + }, [listUrlInput]); + var sortedLists = React.useMemo(function () { + var listUrls = Object.keys(lists); + return listUrls + .filter(function (listUrl) { + // only show loaded lists, hide unsupported lists + return Boolean(lists[listUrl].current) && !Boolean(UNSUPPORTED_LIST_URLS.includes(listUrl)); + }) + .sort(function (listUrlA, listUrlB) { + var listA = lists[listUrlA].current; + var listB = lists[listUrlB].current; + // first filter on active lists + if ((activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(listUrlA)) && !(activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(listUrlB))) { + return -1; + } + if (!(activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(listUrlA)) && (activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(listUrlB))) { + return 1; + } + if (listA && listB) { + if (tokenCountByListName[listA.name] > tokenCountByListName[listB.name]) { + return -1; + } + if (tokenCountByListName[listA.name] < tokenCountByListName[listB.name]) { + return 1; + } + return listA.name.toLowerCase() < listB.name.toLowerCase() + ? -1 + : listA.name.toLowerCase() === listB.name.toLowerCase() + ? 0 + : 1; + } + if (listA) + return -1; + if (listB) + return 1; + return 0; + }); + }, [lists, activeListUrls, tokenCountByListName]); + // temporary fetched list for import flow + var _c = __read(React.useState(), 2), tempList = _c[0], setTempList = _c[1]; + var _d = __read(React.useState(), 2), addError = _d[0], setAddError = _d[1]; + React.useEffect(function () { + function fetchTempList() { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + fetchList(listUrlInput, false) + .then(function (list) { return setTempList(list); }) + .catch(function () { return setAddError(macro.t(templateObject_10$2 || (templateObject_10$2 = __makeTemplateObject(["Error importing list"], ["Error importing list"])))); }); + return [2 /*return*/]; + }); + }); + } + // if valid url, fetch details for card + if (validUrl) { + fetchTempList(); + } + else { + setTempList(undefined); + listUrlInput !== '' && setAddError(macro.t(templateObject_11$2 || (templateObject_11$2 = __makeTemplateObject(["Enter valid list location"], ["Enter valid list location"])))); + } + // reset error + if (listUrlInput === '') { + setAddError(undefined); + } + }, [fetchList, listUrlInput, validUrl]); + // check if list is already imported + var isImported = Object.keys(lists).includes(listUrlInput); + // set list values and have parent modal switch to import list view + var handleImport = React.useCallback(function () { + if (!tempList) + return; + setImportList(tempList); + setModalView(CurrencyModalView.importList); + setListUrl(listUrlInput); + }, [listUrlInput, setImportList, setListUrl, setModalView, tempList]); + return (jsxRuntime.jsxs(Wrapper$4, { children: [jsxRuntime.jsxs(PaddedColumn, __assign({ gap: "14px" }, { children: [jsxRuntime.jsx(Row$1, { children: jsxRuntime.jsx(SearchInput, { type: "text", id: "list-add-input", placeholder: macro.t(templateObject_12$2 || (templateObject_12$2 = __makeTemplateObject(["https:// or ipfs:// or ENS name"], ["https:// or ipfs:// or ENS name"]))), value: listUrlInput, onChange: handleInput }, void 0) }, void 0), addError ? (jsxRuntime.jsx(ThemedText.Error, __assign({ title: addError, style: { textOverflow: 'ellipsis', overflow: 'hidden' }, error: true }, { children: addError }), void 0)) : null] }), void 0), tempList && (jsxRuntime.jsx(PaddedColumn, __assign({ style: { paddingTop: 0 } }, { children: jsxRuntime.jsx(Card, __assign({ backgroundColor: theme.bg2, padding: "12px 20px" }, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsxs(RowFixed, { children: [tempList.logoURI && jsxRuntime.jsx(ListLogo, { logoURI: tempList.logoURI, size: "40px" }, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "4px", style: { marginLeft: '20px' } }, { children: [jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 600 }, { children: tempList.name }), void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: '12px' }, { children: jsxRuntime.jsxs(macro.Trans, { children: [tempList.tokens.length, " tokens"] }, void 0) }), void 0)] }), void 0)] }, void 0), isImported ? (jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(IconWrapper$4, __assign({ stroke: theme.text2, size: "16px", marginRight: '10px' }, { children: jsxRuntime.jsx(reactFeather.CheckCircle, {}, void 0) }), void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ color: theme.text2 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Loaded" }, void 0) }), void 0)] }, void 0)) : (jsxRuntime.jsx(ButtonPrimary, __assign({ style: { fontSize: '14px' }, padding: "6px 8px", width: "fit-content", onClick: handleImport }, { children: jsxRuntime.jsx(macro.Trans, { children: "Import" }, void 0) }), void 0))] }, void 0) }), void 0) }), void 0)), jsxRuntime.jsx(Separator, {}, void 0), jsxRuntime.jsx(ListContainer, { children: jsxRuntime.jsx(AutoColumn, __assign({ gap: "md" }, { children: sortedLists.map(function (listUrl) { return (jsxRuntime.jsx(ListRow, { listUrl: listUrl }, listUrl)); }) }), void 0) }, void 0)] }, void 0)); +} +var templateObject_1$h, templateObject_2$9, templateObject_3$7, templateObject_4$6, templateObject_5$6, templateObject_6$3, templateObject_7$3, templateObject_8$2, templateObject_9$2, templateObject_10$2, templateObject_11$2, templateObject_12$2; -/** - * Be careful adding to this enum, always assign a unique value (typescript will not prevent duplicate values). - * These values is persisted in state and if you change the value it will cause errors - */ -var TransactionType -;(function (TransactionType) { - TransactionType[(TransactionType['APPROVAL'] = 0)] = 'APPROVAL' - TransactionType[(TransactionType['SWAP'] = 1)] = 'SWAP' - TransactionType[(TransactionType['DEPOSIT_LIQUIDITY_STAKING'] = 2)] = 'DEPOSIT_LIQUIDITY_STAKING' - TransactionType[(TransactionType['WITHDRAW_LIQUIDITY_STAKING'] = 3)] = 'WITHDRAW_LIQUIDITY_STAKING' - TransactionType[(TransactionType['CLAIM'] = 4)] = 'CLAIM' - TransactionType[(TransactionType['VOTE'] = 5)] = 'VOTE' - TransactionType[(TransactionType['DELEGATE'] = 6)] = 'DELEGATE' - TransactionType[(TransactionType['WRAP'] = 7)] = 'WRAP' - TransactionType[(TransactionType['CREATE_V3_POOL'] = 8)] = 'CREATE_V3_POOL' - TransactionType[(TransactionType['ADD_LIQUIDITY_V3_POOL'] = 9)] = 'ADD_LIQUIDITY_V3_POOL' - TransactionType[(TransactionType['ADD_LIQUIDITY_V2_POOL'] = 10)] = 'ADD_LIQUIDITY_V2_POOL' - TransactionType[(TransactionType['MIGRATE_LIQUIDITY_V3'] = 11)] = 'MIGRATE_LIQUIDITY_V3' - TransactionType[(TransactionType['COLLECT_FEES'] = 12)] = 'COLLECT_FEES' - TransactionType[(TransactionType['REMOVE_LIQUIDITY_V3'] = 13)] = 'REMOVE_LIQUIDITY_V3' - TransactionType[(TransactionType['SUBMIT_PROPOSAL'] = 14)] = 'SUBMIT_PROPOSAL' -})(TransactionType || (TransactionType = {})) -var addTransaction = toolkit.createAction('transactions/addTransaction') -var clearAllTransactions = toolkit.createAction('transactions/clearAllTransactions') -var finalizeTransaction = toolkit.createAction('transactions/finalizeTransaction') -var checkedTransaction = toolkit.createAction('transactions/checkedTransaction') - -var SUPPORTED_TRANSACTION_TYPES = [ - TransactionType.ADD_LIQUIDITY_V2_POOL, - TransactionType.ADD_LIQUIDITY_V3_POOL, - TransactionType.CREATE_V3_POOL, - TransactionType.REMOVE_LIQUIDITY_V3, - TransactionType.SWAP, -] -var FIREBASE_API_KEY = process.env.REACT_APP_FIREBASE_KEY -var firebaseEnabled = typeof FIREBASE_API_KEY !== 'undefined' -if (firebaseEnabled) initializeFirebase() -function useMonitoringEventCallback() { - var chainId = useActiveWeb3React().chainId - return React.useCallback( - function log(type, _a) { - var transactionResponse = _a.transactionResponse, - walletAddress = _a.walletAddress - return __awaiter(this, void 0, void 0, function () { - var db - return __generator(this, function (_b) { - if (!firebaseEnabled) return [2 /*return*/] - db = database.getDatabase() - if (!walletAddress) { - console.debug('Wallet address required to log monitoring events.') - return [2 /*return*/] - } - try { - database.push(database.ref(db, 'trm'), { - chainId, - origin: window.location.origin, - timestamp: Date.now(), - tx: transactionResponse, - type, - walletAddress, - }) - } catch (e) { - console.debug('Error adding document: ', e) - } - return [2 /*return*/] - }) - }) - }, - [chainId] - ) -} -function useTransactionMonitoringEventCallback() { - var account = useActiveWeb3React().account - var log = useMonitoringEventCallback() - return React.useCallback( - function (info, transactionResponse) { - if (SUPPORTED_TRANSACTION_TYPES.includes(info.type)) { - log(TransactionType[info.type], { - transactionResponse: (function (_a) { - var hash = _a.hash, - v = _a.v, - r = _a.r, - s = _a.s - return { hash, v, r, s } - })(transactionResponse), - walletAddress: account !== null && account !== void 0 ? account : undefined, - }) - } - }, - [account, log] - ) -} -function initializeFirebase() { - app.initializeApp({ - apiKey: process.env.REACT_APP_FIREBASE_KEY, - authDomain: 'interface-monitoring.firebaseapp.com', - databaseURL: 'https://interface-monitoring-default-rtdb.firebaseio.com', - projectId: 'interface-monitoring', - storageBucket: 'interface-monitoring.appspot.com', - messagingSenderId: '968187720053', - appId: '1:968187720053:web:acedf72dce629d470be33c', - }) -} +var Wrapper$3 = styled__default["default"].div(templateObject_1$g || (templateObject_1$g = __makeTemplateObject(["\n width: 100%;\n height: calc(100% - 60px);\n position: relative;\n padding-bottom: 80px;\n"], ["\n width: 100%;\n height: calc(100% - 60px);\n position: relative;\n padding-bottom: 80px;\n"]))); +var Footer = styled__default["default"].div(templateObject_2$8 || (templateObject_2$8 = __makeTemplateObject(["\n position: absolute;\n bottom: 0;\n width: 100%;\n border-radius: 20px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n border-top: 1px solid ", ";\n padding: 20px;\n text-align: center;\n"], ["\n position: absolute;\n bottom: 0;\n width: 100%;\n border-radius: 20px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n border-top: 1px solid ", ";\n padding: 20px;\n text-align: center;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg3; +}); +function ManageTokens(_a) { + var setModalView = _a.setModalView, setImportToken = _a.setImportToken; + var chainId = useActiveWeb3React().chainId; + var _b = __read(React.useState(''), 2), searchQuery = _b[0], setSearchQuery = _b[1]; + var theme = useTheme(); + // manage focus on modal show + var inputRef = React.useRef(); + var handleInput = React.useCallback(function (event) { + var input = event.target.value; + var checksummedInput = isAddress(input); + setSearchQuery(checksummedInput || input); + }, []); + // if they input an address, use it + var isAddressSearch = isAddress(searchQuery); + var searchToken = useToken(searchQuery); + // all tokens for local lisr + var userAddedTokens = useUserAddedTokens(); + var removeToken = useRemoveUserAddedToken(); + var handleRemoveAll = React.useCallback(function () { + if (chainId && userAddedTokens) { + userAddedTokens.map(function (token) { + return removeToken(chainId, token.address); + }); + } + }, [removeToken, userAddedTokens, chainId]); + var tokenList = React.useMemo(function () { + return (chainId && + userAddedTokens.map(function (token) { return (jsxRuntime.jsxs(RowBetween, __assign({ width: "100%" }, { children: [jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: token, size: '20px' }, void 0), jsxRuntime.jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, token.address, ExplorerDataType.ADDRESS) }, { children: jsxRuntime.jsx(ThemedText.Main, __assign({ ml: '10px', fontWeight: 600 }, { children: token.symbol }), void 0) }), void 0)] }, void 0), jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(TrashIcon, { onClick: function () { return removeToken(chainId, token.address); } }, void 0), jsxRuntime.jsx(ExternalLinkIcon, { href: getExplorerLink(chainId, token.address, ExplorerDataType.ADDRESS) }, void 0)] }, void 0)] }), token.address)); })); + }, [userAddedTokens, chainId, removeToken]); + return (jsxRuntime.jsxs(Wrapper$3, { children: [jsxRuntime.jsxs(Column, __assign({ style: { width: '100%', height: '100%', flex: '1 1' } }, { children: [jsxRuntime.jsxs(PaddedColumn, __assign({ gap: "14px" }, { children: [jsxRuntime.jsx(Row$1, { children: jsxRuntime.jsx(SearchInput, { type: "text", id: "token-search-input", placeholder: '0x0000', value: searchQuery, autoComplete: "off", ref: inputRef, onChange: handleInput }, void 0) }, void 0), searchQuery !== '' && !isAddressSearch && (jsxRuntime.jsx(ThemedText.Error, __assign({ error: true }, { children: jsxRuntime.jsx(macro.Trans, { children: "Enter valid token address" }, void 0) }), void 0)), searchToken && (jsxRuntime.jsx(Card, __assign({ backgroundColor: theme.bg2, padding: "10px 0" }, { children: jsxRuntime.jsx(ImportRow, { token: searchToken, showImportView: function () { return setModalView(CurrencyModalView.importToken); }, setImportToken: setImportToken, style: { height: 'fit-content' } }, void 0) }), void 0))] }), void 0), jsxRuntime.jsx(Separator, {}, void 0), jsxRuntime.jsxs(PaddedColumn, __assign({ gap: "lg", style: { overflow: 'auto', marginBottom: '10px' } }, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(ThemedText.Main, __assign({ fontWeight: 600 }, { children: jsxRuntime.jsxs(macro.Trans, { children: [userAddedTokens === null || userAddedTokens === void 0 ? void 0 : userAddedTokens.length, " Custom Tokens"] }, void 0) }), void 0), userAddedTokens.length > 0 && (jsxRuntime.jsx(ButtonText, __assign({ onClick: handleRemoveAll }, { children: jsxRuntime.jsx(ThemedText.Blue, { children: jsxRuntime.jsx(macro.Trans, { children: "Clear all" }, void 0) }, void 0) }), void 0))] }, void 0), tokenList] }), void 0)] }), void 0), jsxRuntime.jsx(Footer, { children: jsxRuntime.jsx(ThemedText.DarkGray, { children: jsxRuntime.jsx(macro.Trans, { children: "Tip: Custom tokens are stored locally in your browser" }, void 0) }, void 0) }, void 0)] }, void 0)); +} +var templateObject_1$g, templateObject_2$8; -// helper that can take a ethers library transaction response and add it to the list of transactions -function useTransactionAdder() { - var _a = useActiveWeb3React(), - chainId = _a.chainId, - account = _a.account - var dispatch = useAppDispatch() - var logMonitoringEvent = useTransactionMonitoringEventCallback() - return React.useCallback( - function (response, info) { - if (!account) return - if (!chainId) return - var hash = response.hash - if (!hash) { - throw Error('No transaction hash found.') - } - dispatch(addTransaction({ hash, from: account, info, chainId })) - logMonitoringEvent(info, response) - }, - [account, chainId, dispatch, logMonitoringEvent] - ) -} -// returns all the transactions for the current chain -function useAllTransactions() { - var _a - var chainId = useActiveWeb3React().chainId - var state = useAppSelector(function (state) { - return state.transactions - }) - return chainId ? ((_a = state[chainId]) !== null && _a !== void 0 ? _a : {}) : {} -} -function useTransaction(transactionHash) { - var allTransactions = useAllTransactions() - if (!transactionHash) { - return undefined - } - return allTransactions[transactionHash] -} -function useIsTransactionConfirmed(transactionHash) { - var transactions = useAllTransactions() - if (!transactionHash || !transactions[transactionHash]) return false - return Boolean(transactions[transactionHash].receipt) -} -/** - * Returns whether a transaction happened in the last day (86400 seconds * 1000 milliseconds / second) - * @param tx to check for recency - */ -function isTransactionRecent(tx) { - return new Date().getTime() - tx.addedTime < 86400000 -} -// returns whether a token has a pending approval transaction -function useHasPendingApproval(token, spender) { - var allTransactions = useAllTransactions() - return React.useMemo( - function () { - return ( - typeof (token === null || token === void 0 ? void 0 : token.address) === 'string' && - typeof spender === 'string' && - Object.keys(allTransactions).some(function (hash) { - var tx = allTransactions[hash] - if (!tx) return false - if (tx.receipt) { - return false - } else { - if (tx.info.type !== TransactionType.APPROVAL) return false - return tx.info.spender === spender && tx.info.tokenAddress === token.address && isTransactionRecent(tx) - } - }) - ) - }, - [allTransactions, spender, token === null || token === void 0 ? void 0 : token.address] - ) -} +var Wrapper$2 = styled__default["default"].div(templateObject_1$f || (templateObject_1$f = __makeTemplateObject(["\n width: 100%;\n position: relative;\n display: flex;\n flex-flow: column;\n"], ["\n width: 100%;\n position: relative;\n display: flex;\n flex-flow: column;\n"]))); +var ToggleWrapper = styled__default["default"](RowBetween)(templateObject_2$7 || (templateObject_2$7 = __makeTemplateObject(["\n background-color: ", ";\n border-radius: 12px;\n padding: 6px;\n"], ["\n background-color: ", ";\n border-radius: 12px;\n padding: 6px;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg3; +}); +var ToggleOption = styled__default["default"].div(templateObject_3$6 || (templateObject_3$6 = __makeTemplateObject(["\n width: 48%;\n padding: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 12px;\n font-weight: 600;\n background-color: ", ";\n color: ", ";\n user-select: none;\n\n :hover {\n cursor: pointer;\n opacity: 0.7;\n }\n"], ["\n width: 48%;\n padding: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 12px;\n font-weight: 600;\n background-color: ", ";\n color: ", ";\n user-select: none;\n\n :hover {\n cursor: pointer;\n opacity: 0.7;\n }\n"])), function (_a) { + var theme = _a.theme, active = _a.active; + return (active ? theme.bg1 : theme.bg3); +}, function (_a) { + var theme = _a.theme, active = _a.active; + return (active ? theme.text1 : theme.text2); +}); +function Manage(_a) { + var onDismiss = _a.onDismiss, setModalView = _a.setModalView, setImportList = _a.setImportList, setImportToken = _a.setImportToken, setListUrl = _a.setListUrl; + // toggle between tokens and lists + var _b = __read(React.useState(true), 2), showLists = _b[0], setShowLists = _b[1]; + return (jsxRuntime.jsxs(Wrapper$2, { children: [jsxRuntime.jsx(PaddedColumn, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(reactFeather.ArrowLeft, { style: { cursor: 'pointer' }, onClick: function () { return setModalView(CurrencyModalView.search); } }, void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Manage" }, void 0) }), void 0), jsxRuntime.jsx(CloseIcon$2, { onClick: onDismiss }, void 0)] }, void 0) }, void 0), jsxRuntime.jsx(Separator, {}, void 0), jsxRuntime.jsx(PaddedColumn, __assign({ style: { paddingBottom: 0 } }, { children: jsxRuntime.jsxs(ToggleWrapper, { children: [jsxRuntime.jsx(ToggleOption, __assign({ onClick: function () { return setShowLists(!showLists); }, active: showLists }, { children: jsxRuntime.jsx(macro.Trans, { children: "Lists" }, void 0) }), void 0), jsxRuntime.jsx(ToggleOption, __assign({ onClick: function () { return setShowLists(!showLists); }, active: !showLists }, { children: jsxRuntime.jsx(macro.Trans, { children: "Tokens" }, void 0) }), void 0)] }, void 0) }), void 0), showLists ? (jsxRuntime.jsx(ManageLists, { setModalView: setModalView, setImportList: setImportList, setListUrl: setListUrl }, void 0)) : (jsxRuntime.jsx(ManageTokens, { setModalView: setModalView, setImportToken: setImportToken }, void 0))] }, void 0)); +} +var templateObject_1$f, templateObject_2$7, templateObject_3$6; -// gets the current timestamp from the blockchain -function useCurrentBlockTimestamp() { - var _a, _b - var multicall = useInterfaceMulticall() - return (_b = - (_a = useSingleCallResult(multicall, 'getCurrentBlockTimestamp')) === null || _a === void 0 - ? void 0 - : _a.result) === null || _b === void 0 - ? void 0 - : _b[0] +var CurrencyModalView; +(function (CurrencyModalView) { + CurrencyModalView[CurrencyModalView["search"] = 0] = "search"; + CurrencyModalView[CurrencyModalView["manage"] = 1] = "manage"; + CurrencyModalView[CurrencyModalView["importToken"] = 2] = "importToken"; + CurrencyModalView[CurrencyModalView["importList"] = 3] = "importList"; +})(CurrencyModalView || (CurrencyModalView = {})); +function CurrencySearchModal(_a) { + var isOpen = _a.isOpen, onDismiss = _a.onDismiss, onCurrencySelect = _a.onCurrencySelect, selectedCurrency = _a.selectedCurrency, otherSelectedCurrency = _a.otherSelectedCurrency, _b = _a.showCommonBases, showCommonBases = _b === void 0 ? false : _b, _c = _a.showCurrencyAmount, showCurrencyAmount = _c === void 0 ? true : _c, _d = _a.disableNonToken, disableNonToken = _d === void 0 ? false : _d; + var _e = __read(React.useState(CurrencyModalView.manage), 2), modalView = _e[0], setModalView = _e[1]; + var lastOpen = useLast(isOpen); + React.useEffect(function () { + if (isOpen && !lastOpen) { + setModalView(CurrencyModalView.search); + } + }, [isOpen, lastOpen]); + var handleCurrencySelect = React.useCallback(function (currency) { + onCurrencySelect(currency); + onDismiss(); + }, [onDismiss, onCurrencySelect]); + // for token import view + var prevView = usePrevious(modalView); + // used for import token flow + var _f = __read(React.useState(), 2), importToken = _f[0], setImportToken = _f[1]; + // used for import list + var _g = __read(React.useState(), 2), importList = _g[0], setImportList = _g[1]; + var _h = __read(React.useState(), 2), listURL = _h[0], setListUrl = _h[1]; + var showImportView = React.useCallback(function () { return setModalView(CurrencyModalView.importToken); }, [setModalView]); + var showManageView = React.useCallback(function () { return setModalView(CurrencyModalView.manage); }, [setModalView]); + var handleBackImport = React.useCallback(function () { return setModalView(prevView && prevView !== CurrencyModalView.importToken ? prevView : CurrencyModalView.search); }, [setModalView, prevView]); + // change min height if not searching + var minHeight = modalView === CurrencyModalView.importToken || modalView === CurrencyModalView.importList ? 40 : 80; + var content = null; + switch (modalView) { + case CurrencyModalView.search: + content = (jsxRuntime.jsx(CurrencySearch, { isOpen: isOpen, onDismiss: onDismiss, onCurrencySelect: handleCurrencySelect, selectedCurrency: selectedCurrency, otherSelectedCurrency: otherSelectedCurrency, showCommonBases: showCommonBases, showCurrencyAmount: showCurrencyAmount, disableNonToken: disableNonToken, showImportView: showImportView, setImportToken: setImportToken, showManageView: showManageView }, void 0)); + break; + case CurrencyModalView.importToken: + if (importToken) { + content = (jsxRuntime.jsx(ImportToken, { tokens: [importToken], onDismiss: onDismiss, list: importToken instanceof WrappedTokenInfo ? importToken.list : undefined, onBack: handleBackImport, handleCurrencySelect: handleCurrencySelect }, void 0)); + } + break; + case CurrencyModalView.importList: + if (importList && listURL) { + content = jsxRuntime.jsx(ImportList, { list: importList, listURL: listURL, onDismiss: onDismiss, setModalView: setModalView }, void 0); + } + break; + case CurrencyModalView.manage: + content = (jsxRuntime.jsx(Manage, { onDismiss: onDismiss, setModalView: setModalView, setImportToken: setImportToken, setImportList: setImportList, setListUrl: setListUrl }, void 0)); + break; + } + return (jsxRuntime.jsx(Modal, __assign({ isOpen: isOpen, onDismiss: onDismiss, maxHeight: 80, minHeight: minHeight }, { children: content }), void 0)); } -new abi$6.Interface(abi$5) -;({ - 1: [ - { - tokens: [WRAPPED_NATIVE_CURRENCY[1], DAI], - stakingRewardAddress: '0xa1484C3aa22a66C62b77E0AE78E15258bd0cB711', - }, - { - tokens: [WRAPPED_NATIVE_CURRENCY[1], USDC], - stakingRewardAddress: '0x7FBa4B8Dc5E7616e59622806932DBea72537A56b', - }, - { - tokens: [WRAPPED_NATIVE_CURRENCY[1], USDT], - stakingRewardAddress: '0x6C3e4cb2E96B01F4b866965A91ed4437839A121a', - }, - { - tokens: [WRAPPED_NATIVE_CURRENCY[1], WBTC], - stakingRewardAddress: '0xCA35e32e7926b96A9988f61d510E038108d8068e', - }, - ], -}) - -// mimics useAllBalances -function useAllTokenBalances() { - var account = useActiveWeb3React().account - var allTokens = useAllTokens() - var allTokensArray = React.useMemo( - function () { - return Object.values(allTokens !== null && allTokens !== void 0 ? allTokens : {}) - }, - [allTokens] - ) - var balances = useTokenBalances(account !== null && account !== void 0 ? account : undefined, allTokensArray) - return balances !== null && balances !== void 0 ? balances : {} -} +var TextWrapper = styled__default["default"].span(templateObject_1$e || (templateObject_1$e = __makeTemplateObject(["\n margin-left: ", ";\n color: ", ";\n font-size: ", ";\n\n @media screen and (max-width: 600px) {\n font-size: ", ";\n }\n"], ["\n margin-left: ", ";\n color: ", ";\n font-size: ", ";\n\n @media screen and (max-width: 600px) {\n font-size: ", ";\n }\n"])), function (_a) { + var margin = _a.margin; + return margin && '4px'; +}, function (_a) { + var theme = _a.theme, link = _a.link, textColor = _a.textColor; + return (link ? theme.blue1 : textColor !== null && textColor !== void 0 ? textColor : theme.text1); +}, function (_a) { + var fontSize = _a.fontSize; + return fontSize !== null && fontSize !== void 0 ? fontSize : 'inherit'; +}, function (_a) { + var adjustSize = _a.adjustSize; + return adjustSize && '12px'; +}); +var HoverInlineText = function (_a) { + var text = _a.text, _b = _a.maxCharacters, maxCharacters = _b === void 0 ? 20 : _b, _c = _a.margin, margin = _c === void 0 ? false : _c, _d = _a.adjustSize, adjustSize = _d === void 0 ? false : _d, fontSize = _a.fontSize, textColor = _a.textColor, link = _a.link, rest = __rest(_a, ["text", "maxCharacters", "margin", "adjustSize", "fontSize", "textColor", "link"]); + var _e = __read(React.useState(false), 2), showHover = _e[0], setShowHover = _e[1]; + if (!text) { + return jsxRuntime.jsx("span", {}, void 0); + } + if (text.length > maxCharacters) { + return (jsxRuntime.jsx(Tooltip, __assign({ text: text, show: showHover }, { children: jsxRuntime.jsx(TextWrapper, __assign({ onMouseEnter: function () { return setShowHover(true); }, onMouseLeave: function () { return setShowHover(false); }, margin: margin, adjustSize: adjustSize, textColor: textColor, link: link, fontSize: fontSize }, rest, { children: ' ' + text.slice(0, maxCharacters - 1) + '...' }), void 0) }), void 0)); + } + return (jsxRuntime.jsx(TextWrapper, __assign({ margin: margin, adjustSize: adjustSize, link: link, fontSize: fontSize, textColor: textColor }, rest, { children: text }), void 0)); +}; +var templateObject_1$e; -var StyledInput = styled__default['default'].input( - templateObject_1$y || - (templateObject_1$y = __makeTemplateObject( - [ - '\n color: ', - ';\n width: 0;\n position: relative;\n font-weight: 500;\n outline: none;\n border: none;\n flex: 1 1 auto;\n background-color: ', - ';\n font-size: ', - ';\n text-align: ', - ";\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 0px;\n -webkit-appearance: textfield;\n text-align: right;\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: ", - ';\n }\n', - ], - [ - '\n color: ', - ';\n width: 0;\n position: relative;\n font-weight: 500;\n outline: none;\n border: none;\n flex: 1 1 auto;\n background-color: ', - ';\n font-size: ', - ';\n text-align: ', - ";\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 0px;\n -webkit-appearance: textfield;\n text-align: right;\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: ", - ';\n }\n', - ] - )), - function (_a) { - var error = _a.error, - theme = _a.theme - return error ? theme.red1 : theme.text1 - }, - function (_a) { - var theme = _a.theme - return theme.bg1 - }, - function (_a) { - var fontSize = _a.fontSize - return fontSize !== null && fontSize !== void 0 ? fontSize : '28px' - }, - function (_a) { - var align = _a.align - return align && align - }, - function (_a) { - var theme = _a.theme - return theme.text4 - } -) -var inputRegex = RegExp('^\\d*(?:\\\\[.])?\\d*$') // match escaped "." characters via in a non-capturing group -var Input$1 = React__default['default'].memo(function InnerInput(_a) { - var value = _a.value, - onUserInput = _a.onUserInput, - placeholder = _a.placeholder, - prependSymbol = _a.prependSymbol, - rest = __rest(_a, ['value', 'onUserInput', 'placeholder', 'prependSymbol']) - var enforcer = function (nextUserInput) { - if (nextUserInput === '' || inputRegex.test(escapeRegExp(nextUserInput))) { - onUserInput(nextUserInput) - } - } - return jsxRuntime.jsx( - StyledInput, - __assign({}, rest, { - value: prependSymbol && value ? prependSymbol + value : value, - onChange(event) { - if (prependSymbol) { - var value_1 = event.target.value - // cut off prepended symbol - var formattedValue = value_1.toString().includes(prependSymbol) - ? value_1.toString().slice(1, value_1.toString().length + 1) - : value_1 - // replace commas with periods, because uniswap exclusively uses period as the decimal separator - enforcer(formattedValue.replace(/,/g, '.')) - } else { - enforcer(event.target.value.replace(/,/g, '.')) - } - }, - // universal input options - inputMode: 'decimal', - autoComplete: 'off', - autoCorrect: 'off', - // text-specific options - type: 'text', - pattern: '^[0-9]*[.,]?[0-9]*$', - placeholder: placeholder || '0.0', - minLength: 1, - maxLength: 79, - spellCheck: 'false', - }), - void 0 - ) -}) -var templateObject_1$y - -// modified from https://usehooks.com/usePrevious/ -function usePrevious(value) { - // The ref object is a generic container whose current property is mutable ... - // ... and can hold any value, similar to an instance property on a class - var ref = React.useRef() - // Store current value in ref - React.useEffect( - function () { - ref.current = value - }, - [value] - ) // Only re-run if value changes - // Return previous value (happens before update in useEffect above) - return ref.current -} +function FiatValue(_a) { + var fiatValue = _a.fiatValue, priceImpact = _a.priceImpact; + var theme = useTheme(); + var priceImpactColor = React.useMemo(function () { + if (!priceImpact) + return undefined; + if (priceImpact.lessThan('0')) + return theme.green1; + var severity = warningSeverity(priceImpact); + if (severity < 1) + return theme.text3; + if (severity < 3) + return theme.yellow1; + return theme.red1; + }, [priceImpact, theme.green1, theme.red1, theme.text3, theme.yellow1]); + return (jsxRuntime.jsxs(ThemedText.Body, __assign({ fontSize: 14, color: fiatValue ? theme.text3 : theme.text4 }, { children: [fiatValue ? (jsxRuntime.jsxs(macro.Trans, { children: ["$", jsxRuntime.jsx(HoverInlineText, { text: fiatValue === null || fiatValue === void 0 ? void 0 : fiatValue.toSignificant(6, { groupSeparator: ',' }), textColor: fiatValue ? theme.text3 : theme.text4 }, void 0)] }, void 0)) : (''), priceImpact ? (jsxRuntime.jsxs("span", __assign({ style: { color: priceImpactColor } }, { children: [' ', jsxRuntime.jsxs(MouseoverTooltip, __assign({ text: macro.t(templateObject_1$d || (templateObject_1$d = __makeTemplateObject(["The estimated difference between the USD values of input and output amounts."], ["The estimated difference between the USD values of input and output amounts."]))) }, { children: ["(", jsxRuntime.jsxs(macro.Trans, { children: [priceImpact.multiply(-1).toSignificant(3), "%"] }, void 0), ")"] }), void 0)] }), void 0)) : null] }), void 0)); +} +var templateObject_1$d; -/** - * Returns the last value of type T that passes a filter function - * @param value changing value - * @param filterFn function that determines whether a given value should be considered for the last value - */ -function useLast(value, filterFn) { - var _a = __read(React.useState(filterFn && filterFn(value) ? value : undefined), 2), - last = _a[0], - setLast = _a[1] - React.useEffect( - function () { - setLast(function (last) { - var shouldUse = filterFn ? filterFn(value) : true - if (shouldUse) return value - return last - }) - }, - [filterFn, value] - ) - return last -} +var InputPanel = styled__default["default"].div(templateObject_1$c || (templateObject_1$c = __makeTemplateObject(["\n ", "\n position: relative;\n border-radius: ", ";\n background-color: ", ";\n z-index: 1;\n width: ", ";\n transition: height 1s ease;\n will-change: height;\n"], ["\n ", "\n position: relative;\n border-radius: ", ";\n background-color: ", ";\n z-index: 1;\n width: ", ";\n transition: height 1s ease;\n will-change: height;\n"])), function (_a) { + var theme = _a.theme; + return theme.flexColumnNoWrap; +}, function (_a) { + var hideInput = _a.hideInput; + return (hideInput ? '16px' : '20px'); +}, function (_a) { + var theme = _a.theme, hideInput = _a.hideInput; + return (hideInput ? 'transparent' : theme.bg2); +}, function (_a) { + var hideInput = _a.hideInput; + return (hideInput ? '100%' : 'initial'); +}); +var FixedContainer = styled__default["default"].div(templateObject_2$6 || (templateObject_2$6 = __makeTemplateObject(["\n width: 100%;\n height: 100%;\n position: absolute;\n border-radius: 20px;\n background-color: ", ";\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 2;\n"], ["\n width: 100%;\n height: 100%;\n position: absolute;\n border-radius: 20px;\n background-color: ", ";\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 2;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}); +var Container$1 = styled__default["default"].div(templateObject_3$5 || (templateObject_3$5 = __makeTemplateObject(["\n border-radius: ", ";\n border: 1px solid ", ";\n background-color: ", ";\n width: ", ";\n :focus,\n :hover {\n border: 1px solid ", ";\n }\n"], ["\n border-radius: ", ";\n border: 1px solid ", ";\n background-color: ", ";\n width: ", ";\n :focus,\n :hover {\n border: 1px solid ", ";\n }\n"])), function (_a) { + var hideInput = _a.hideInput; + return (hideInput ? '16px' : '20px'); +}, function (_a) { + var theme = _a.theme; + return theme.bg0; +}, function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var hideInput = _a.hideInput; + return (hideInput ? '100%' : 'initial'); +}, function (_a) { + var theme = _a.theme, hideInput = _a.hideInput; + return (hideInput ? ' transparent' : theme.bg3); +}); +var CurrencySelect = styled__default["default"](ButtonGray)(templateObject_4$5 || (templateObject_4$5 = __makeTemplateObject(["\n align-items: center;\n background-color: ", ";\n box-shadow: ", ";\n box-shadow: 0px 6px 10px rgba(0, 0, 0, 0.075);\n color: ", ";\n cursor: pointer;\n border-radius: 16px;\n outline: none;\n user-select: none;\n border: none;\n font-size: 24px;\n font-weight: 500;\n height: ", ";\n width: ", ";\n padding: 0 8px;\n justify-content: space-between;\n margin-left: ", ";\n :focus,\n :hover {\n background-color: ", ";\n }\n visibility: ", ";\n"], ["\n align-items: center;\n background-color: ", ";\n box-shadow: ", ";\n box-shadow: 0px 6px 10px rgba(0, 0, 0, 0.075);\n color: ", ";\n cursor: pointer;\n border-radius: 16px;\n outline: none;\n user-select: none;\n border: none;\n font-size: 24px;\n font-weight: 500;\n height: ", ";\n width: ", ";\n padding: 0 8px;\n justify-content: space-between;\n margin-left: ", ";\n :focus,\n :hover {\n background-color: ", ";\n }\n visibility: ", ";\n"])), function (_a) { + var selected = _a.selected, theme = _a.theme; + return (selected ? theme.bg2 : theme.primary1); +}, function (_a) { + var selected = _a.selected; + return (selected ? 'none' : '0px 6px 10px rgba(0, 0, 0, 0.075)'); +}, function (_a) { + var selected = _a.selected, theme = _a.theme; + return (selected ? theme.text1 : theme.white); +}, function (_a) { + var hideInput = _a.hideInput; + return (hideInput ? '2.8rem' : '2.4rem'); +}, function (_a) { + var hideInput = _a.hideInput; + return (hideInput ? '100%' : 'initial'); +}, function (_a) { + var hideInput = _a.hideInput; + return (hideInput ? '0' : '12px'); +}, function (_a) { + var selected = _a.selected, theme = _a.theme; + return (selected ? theme.bg3 : polished.darken(0.05, theme.primary1)); +}, function (_a) { + var visible = _a.visible; + return (visible ? 'visible' : 'hidden'); +}); +var InputRow = styled__default["default"].div(templateObject_5$5 || (templateObject_5$5 = __makeTemplateObject(["\n ", "\n align-items: center;\n justify-content: space-between;\n padding: ", ";\n"], ["\n ", "\n align-items: center;\n justify-content: space-between;\n padding: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.flexRowNoWrap; +}, function (_a) { + var selected = _a.selected; + return (selected ? ' 1rem 1rem 0.75rem 1rem' : '1rem 1rem 1rem 1rem'); +}); +var LabelRow = styled__default["default"].div(templateObject_6$2 || (templateObject_6$2 = __makeTemplateObject(["\n ", "\n align-items: center;\n color: ", ";\n font-size: 0.75rem;\n line-height: 1rem;\n padding: 0 1rem 1rem;\n span:hover {\n cursor: pointer;\n color: ", ";\n }\n"], ["\n ", "\n align-items: center;\n color: ", ";\n font-size: 0.75rem;\n line-height: 1rem;\n padding: 0 1rem 1rem;\n span:hover {\n cursor: pointer;\n color: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.flexRowNoWrap; +}, function (_a) { + var theme = _a.theme; + return theme.text1; +}, function (_a) { + var theme = _a.theme; + return polished.darken(0.2, theme.text2); +}); +var FiatRow = styled__default["default"](LabelRow)(templateObject_7$2 || (templateObject_7$2 = __makeTemplateObject(["\n justify-content: flex-end;\n"], ["\n justify-content: flex-end;\n"]))); +var Aligner = styled__default["default"].span(templateObject_8$1 || (templateObject_8$1 = __makeTemplateObject(["\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n"], ["\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n"]))); +var StyledDropDown = styled__default["default"](SvgDropdown)(templateObject_9$1 || (templateObject_9$1 = __makeTemplateObject(["\n margin: 0 0.25rem 0 0.35rem;\n height: 35%;\n\n path {\n stroke: ", ";\n stroke-width: 1.5px;\n }\n"], ["\n margin: 0 0.25rem 0 0.35rem;\n height: 35%;\n\n path {\n stroke: ", ";\n stroke-width: 1.5px;\n }\n"])), function (_a) { + var selected = _a.selected, theme = _a.theme; + return (selected ? theme.text1 : theme.white); +}); +var StyledTokenName = styled__default["default"].span(templateObject_10$1 || (templateObject_10$1 = __makeTemplateObject(["\n ", "\n font-size: ", ";\n"], ["\n ", "\n font-size: ", ";\n"])), function (_a) { + var active = _a.active; + return (active ? ' margin: 0 0.25rem 0 0.25rem;' : ' margin: 0 0.25rem 0 0.25rem;'); +}, function (_a) { + var active = _a.active; + return (active ? '18px' : '18px'); +}); +var StyledBalanceMax = styled__default["default"].button(templateObject_11$1 || (templateObject_11$1 = __makeTemplateObject(["\n background-color: transparent;\n background-color: ", ";\n border: none;\n border-radius: 12px;\n color: ", ";\n cursor: pointer;\n font-size: 11px;\n font-weight: 500;\n margin-left: 0.25rem;\n opacity: ", ";\n padding: 4px 6px;\n pointer-events: ", ";\n\n :hover {\n opacity: ", ";\n }\n\n :focus {\n outline: none;\n }\n"], ["\n background-color: transparent;\n background-color: ", ";\n border: none;\n border-radius: 12px;\n color: ", ";\n cursor: pointer;\n font-size: 11px;\n font-weight: 500;\n margin-left: 0.25rem;\n opacity: ", ";\n padding: 4px 6px;\n pointer-events: ", ";\n\n :hover {\n opacity: ", ";\n }\n\n :focus {\n outline: none;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.primary5; +}, function (_a) { + var theme = _a.theme; + return theme.primary1; +}, function (_a) { + var disabled = _a.disabled; + return (!disabled ? 1 : 0.4); +}, function (_a) { + var disabled = _a.disabled; + return (!disabled ? 'initial' : 'none'); +}, function (_a) { + var disabled = _a.disabled; + return (!disabled ? 0.8 : 0.4); +}); +var StyledNumericalInput = styled__default["default"](Input$1)(templateObject_12$1 || (templateObject_12$1 = __makeTemplateObject(["\n ", ";\n text-align: left;\n"], ["\n ", ";\n text-align: left;\n"])), loadingOpacityMixin); +function CurrencyInputPanel(_a) { + var value = _a.value, onUserInput = _a.onUserInput, onMax = _a.onMax, showMaxButton = _a.showMaxButton, onCurrencySelect = _a.onCurrencySelect, currency = _a.currency, otherCurrency = _a.otherCurrency, id = _a.id, showCommonBases = _a.showCommonBases, showCurrencyAmount = _a.showCurrencyAmount, disableNonToken = _a.disableNonToken, renderBalance = _a.renderBalance, fiatValue = _a.fiatValue, priceImpact = _a.priceImpact, _b = _a.hideBalance, hideBalance = _b === void 0 ? false : _b, _c = _a.pair, pair = _c === void 0 ? null : _c, // used for double token logo + _d = _a.hideInput, // used for double token logo + hideInput = _d === void 0 ? false : _d, _e = _a.locked, locked = _e === void 0 ? false : _e, _f = _a.loading, loading = _f === void 0 ? false : _f, rest = __rest(_a, ["value", "onUserInput", "onMax", "showMaxButton", "onCurrencySelect", "currency", "otherCurrency", "id", "showCommonBases", "showCurrencyAmount", "disableNonToken", "renderBalance", "fiatValue", "priceImpact", "hideBalance", "pair", "hideInput", "locked", "loading"]); + var _g = __read(React.useState(false), 2), modalOpen = _g[0], setModalOpen = _g[1]; + var account = useActiveWeb3React().account; + var selectedCurrencyBalance = useCurrencyBalance(account !== null && account !== void 0 ? account : undefined, currency !== null && currency !== void 0 ? currency : undefined); + var theme = useTheme(); + var handleDismissSearch = React.useCallback(function () { + setModalOpen(false); + }, [setModalOpen]); + return (jsxRuntime.jsxs(InputPanel, __assign({ id: id, hideInput: hideInput }, rest, { children: [locked && (jsxRuntime.jsx(FixedContainer, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "sm", justify: "center" }, { children: [jsxRuntime.jsx(reactFeather.Lock, {}, void 0), jsxRuntime.jsx(ThemedText.Label, __assign({ fontSize: "12px", textAlign: "center", padding: "0 12px" }, { children: jsxRuntime.jsx(macro.Trans, { children: "The market price is outside your specified price range. Single-asset deposit only." }, void 0) }), void 0)] }), void 0) }, void 0)), jsxRuntime.jsxs(Container$1, __assign({ hideInput: hideInput }, { children: [jsxRuntime.jsxs(InputRow, __assign({ style: hideInput ? { padding: '0', borderRadius: '8px' } : {}, selected: !onCurrencySelect }, { children: [!hideInput && (jsxRuntime.jsx(StyledNumericalInput, { className: "token-amount-input", value: value, onUserInput: onUserInput, "$loading": loading }, void 0)), jsxRuntime.jsx(CurrencySelect, __assign({ visible: currency !== undefined, selected: !!currency, hideInput: hideInput, className: "open-currency-select-button", onClick: function () { + if (onCurrencySelect) { + setModalOpen(true); + } + } }, { children: jsxRuntime.jsxs(Aligner, { children: [jsxRuntime.jsxs(RowFixed, { children: [pair ? (jsxRuntime.jsx("span", __assign({ style: { marginRight: '0.5rem' } }, { children: jsxRuntime.jsx(DoubleCurrencyLogo, { currency0: pair.token0, currency1: pair.token1, size: 24, margin: true }, void 0) }), void 0)) : currency ? (jsxRuntime.jsx(CurrencyLogo, { style: { marginRight: '0.5rem' }, currency: currency, size: '24px' }, void 0)) : null, pair ? (jsxRuntime.jsxs(StyledTokenName, __assign({ className: "pair-name-container" }, { children: [pair === null || pair === void 0 ? void 0 : pair.token0.symbol, ":", pair === null || pair === void 0 ? void 0 : pair.token1.symbol] }), void 0)) : (jsxRuntime.jsx(StyledTokenName, __assign({ className: "token-symbol-container", active: Boolean(currency && currency.symbol) }, { children: (currency && currency.symbol && currency.symbol.length > 20 + ? currency.symbol.slice(0, 4) + + '...' + + currency.symbol.slice(currency.symbol.length - 5, currency.symbol.length) + : currency === null || currency === void 0 ? void 0 : currency.symbol) || jsxRuntime.jsx(macro.Trans, { children: "Select a token" }, void 0) }), void 0))] }, void 0), onCurrencySelect && jsxRuntime.jsx(StyledDropDown, { selected: !!currency }, void 0)] }, void 0) }), void 0)] }), void 0), !hideInput && !hideBalance && currency && (jsxRuntime.jsx(FiatRow, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(LoadingOpacityContainer, __assign({ "$loading": loading }, { children: jsxRuntime.jsx(FiatValue, { fiatValue: fiatValue, priceImpact: priceImpact }, void 0) }), void 0), account ? (jsxRuntime.jsxs(RowFixed, __assign({ style: { height: '17px' } }, { children: [jsxRuntime.jsx(ThemedText.Body, __assign({ onClick: onMax, color: theme.text3, fontWeight: 500, fontSize: 14, style: { display: 'inline', cursor: 'pointer' } }, { children: !hideBalance && currency && selectedCurrencyBalance ? (renderBalance ? (renderBalance(selectedCurrencyBalance)) : (jsxRuntime.jsxs(macro.Trans, { children: ["Balance: ", formatCurrencyAmount(selectedCurrencyBalance, 4)] }, void 0))) : null }), void 0), showMaxButton && selectedCurrencyBalance ? (jsxRuntime.jsx(StyledBalanceMax, __assign({ onClick: onMax }, { children: jsxRuntime.jsx(macro.Trans, { children: "MAX" }, void 0) }), void 0)) : null] }), void 0)) : (jsxRuntime.jsx("span", {}, void 0))] }, void 0) }, void 0))] }), void 0), onCurrencySelect && (jsxRuntime.jsx(CurrencySearchModal, { isOpen: modalOpen, onDismiss: handleDismissSearch, onCurrencySelect: onCurrencySelect, selectedCurrency: currency, otherSelectedCurrency: otherCurrency, showCommonBases: showCommonBases, showCurrencyAmount: showCurrencyAmount, disableNonToken: disableNonToken }, void 0))] }), void 0)); +} +var templateObject_1$c, templateObject_2$6, templateObject_3$5, templateObject_4$5, templateObject_5$5, templateObject_6$2, templateObject_7$2, templateObject_8$1, templateObject_9$1, templateObject_10$1, templateObject_11$1, templateObject_12$1; -function useOnClickOutside(node, handler) { - var handlerRef = React.useRef(handler) - React.useEffect( - function () { - handlerRef.current = handler - }, - [handler] - ) - React.useEffect( - function () { - var handleClickOutside = function (e) { - var _a, _b - if ( - (_b = (_a = node.current) === null || _a === void 0 ? void 0 : _a.contains(e.target)) !== null && - _b !== void 0 - ? _b - : false - ) { - return - } - if (handlerRef.current) handlerRef.current() - } - document.addEventListener('mousedown', handleClickOutside) - return function () { - document.removeEventListener('mousedown', handleClickOutside) - } - }, - [node] - ) +/** + * Given the price impact, get user confirmation. + * + * @param priceImpactWithoutFee price impact of the trade without the fee. + */ +function confirmPriceImpactWithoutFee(priceImpactWithoutFee) { + if (!priceImpactWithoutFee.lessThan(PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN)) { + return (window.prompt("This swap has a price impact of at least " + PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN.toFixed(0) + "%. Please type the word \"confirm\" to continue with this swap.") === 'confirm'); + } + else if (!priceImpactWithoutFee.lessThan(ALLOWED_PRICE_IMPACT_HIGH)) { + return window.confirm("This swap has a price impact of at least " + ALLOWED_PRICE_IMPACT_HIGH.toFixed(0) + "%. Please confirm that you would like to continue with this swap."); + } + return true; } -function useToggle(initialState) { - if (initialState === void 0) { - initialState = false - } - var _a = __read(React.useState(initialState), 2), - state = _a[0], - setState = _a[1] - var toggle = React.useCallback(function () { - return setState(function (state) { - return !state - }) - }, []) - return [state, toggle] +/** + * Returns true if the trade requires a confirmation of details before we can submit it + * @param args either a pair of V2 trades or a pair of V3 trades + */ +function tradeMeaningfullyDiffers() { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var _a = __read(args, 2), tradeA = _a[0], tradeB = _a[1]; + return (tradeA.tradeType !== tradeB.tradeType || + !tradeA.inputAmount.currency.equals(tradeB.inputAmount.currency) || + !tradeA.inputAmount.equalTo(tradeB.inputAmount) || + !tradeA.outputAmount.currency.equals(tradeB.outputAmount.currency) || + !tradeA.outputAmount.equalTo(tradeB.outputAmount)); } -function currencyId(currency) { - if (currency.isNative) return 'ETH' - if (currency.isToken) return currency.address - throw new Error('invalid currency') +function useAddTokenToMetamask(currencyToAdd) { + var library = useActiveWeb3React().library; + var token = currencyToAdd === null || currencyToAdd === void 0 ? void 0 : currencyToAdd.wrapped; + var _a = __read(React.useState(), 2), success = _a[0], setSuccess = _a[1]; + var logoURL = useCurrencyLogoURIs(token)[0]; + var addToken = React.useCallback(function () { + if (library && library.provider.isMetaMask && library.provider.request && token) { + library.provider + .request({ + method: 'wallet_watchAsset', + params: { + //@ts-ignore // need this for incorrect ethers provider type + type: 'ERC20', + options: { + address: token.address, + symbol: token.symbol, + decimals: token.decimals, + image: logoURL, + }, + }, + }) + .then(function (success) { + setSuccess(success); + }) + .catch(function () { return setSuccess(false); }); + } + else { + setSuccess(false); + } + }, [library, logoURL, token]); + return { addToken: addToken, success: success }; } -var MobileWrapper = styled__default['default'](AutoColumn)( - templateObject_2$l || (templateObject_2$l = __makeTemplateObject(['\n ', ';\n'], ['\n ', ';\n'])), - function (_a) { - var theme = _a.theme - return theme.mediaWidth.upToSmall( - templateObject_1$x || - (templateObject_1$x = __makeTemplateObject(['\n display: none;\n '], ['\n display: none;\n '])) - ) - } -) -var BaseWrapper = styled__default['default'].div( - templateObject_3$g || - (templateObject_3$g = __makeTemplateObject( - [ - '\n border: 1px solid ', - ';\n border-radius: 10px;\n display: flex;\n padding: 6px;\n\n align-items: center;\n :hover {\n cursor: ', - ';\n background-color: ', - ';\n }\n\n color: ', - ';\n background-color: ', - ';\n filter: ', - ';\n', - ], - [ - '\n border: 1px solid ', - ';\n border-radius: 10px;\n display: flex;\n padding: 6px;\n\n align-items: center;\n :hover {\n cursor: ', - ';\n background-color: ', - ';\n }\n\n color: ', - ';\n background-color: ', - ';\n filter: ', - ';\n', - ] - )), - function (_a) { - var theme = _a.theme, - disable = _a.disable - return disable ? 'transparent' : theme.bg3 - }, - function (_a) { - var disable = _a.disable - return !disable && 'pointer' - }, - function (_a) { - var theme = _a.theme, - disable = _a.disable - return !disable && theme.bg2 - }, - function (_a) { - var theme = _a.theme, - disable = _a.disable - return disable && theme.text3 - }, - function (_a) { - var theme = _a.theme, - disable = _a.disable - return disable && theme.bg3 - }, - function (_a) { - var disable = _a.disable - return disable && 'grayscale(1)' - } -) -function CommonBases(_a) { - var _b - var chainId = _a.chainId, - onSelect = _a.onSelect, - selectedCurrency = _a.selectedCurrency - var bases = typeof chainId !== 'undefined' ? ((_b = COMMON_BASES[chainId]) !== null && _b !== void 0 ? _b : []) : [] - return bases.length > 0 - ? jsxRuntime.jsx( - MobileWrapper, - __assign( - { gap: 'md' }, - { - children: jsxRuntime.jsx( - AutoRow, - __assign( - { gap: '4px' }, - { - children: bases.map(function (currency) { - var isSelected = - selectedCurrency === null || selectedCurrency === void 0 - ? void 0 - : selectedCurrency.equals(currency) - return jsxRuntime.jsxs( - BaseWrapper, - __assign( - { - onClick() { - return !isSelected && onSelect(currency) - }, - disable: isSelected, - }, - { - children: [ - jsxRuntime.jsx(CurrencyLogoFromList, { currency }, void 0), - jsxRuntime.jsx( - rebass.Text, - __assign({ fontWeight: 500, fontSize: 16 }, { children: currency.symbol }), - void 0 - ), - ], - } - ), - currencyId(currency) - ) - }), - } - ), - void 0 - ), - } - ), - void 0 - ) - : null -} -/** helper component to retrieve a base currency from the active token lists */ -function CurrencyLogoFromList(_a) { - var currency = _a.currency - var token = useTokenInfoFromActiveList(currency) - return jsxRuntime.jsx(CurrencyLogo, { currency: token, style: { marginRight: 8 } }, void 0) -} -var templateObject_1$x, templateObject_2$l, templateObject_3$g - -var QuestionWrapper = styled__default['default'].div( - templateObject_1$w || - (templateObject_1$w = __makeTemplateObject( - [ - '\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0px;\n width: 18px;\n height: 18px;\n border: none;\n background: none;\n outline: none;\n cursor: default;\n border-radius: 36px;\n font-size: 12px;\n background-color: ', - ';\n color: ', - ';\n\n :hover,\n :focus {\n opacity: 0.7;\n }\n', - ], - [ - '\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0px;\n width: 18px;\n height: 18px;\n border: none;\n background: none;\n outline: none;\n cursor: default;\n border-radius: 36px;\n font-size: 12px;\n background-color: ', - ';\n color: ', - ';\n\n :hover,\n :focus {\n opacity: 0.7;\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.bg2 - }, - function (_a) { - var theme = _a.theme - return theme.text2 - } -) -var QuestionMark = styled__default['default'].span( - templateObject_2$k || - (templateObject_2$k = __makeTemplateObject(['\n font-size: 14px;\n'], ['\n font-size: 14px;\n'])) -) -function QuestionHelper(_a) { - var text = _a.text - var _b = __read(React.useState(false), 2), - show = _b[0], - setShow = _b[1] - var open = React.useCallback( - function () { - return setShow(true) - }, - [setShow] - ) - var close = React.useCallback( - function () { - return setShow(false) - }, - [setShow] - ) - return jsxRuntime.jsx( - 'span', - __assign( - { style: { marginLeft: 4, display: 'flex', alignItems: 'center' } }, - { - children: jsxRuntime.jsx( - Tooltip, - __assign( - { text, show }, - { - children: jsxRuntime.jsx( - QuestionWrapper, - __assign( - { onClick: open, onMouseEnter: open, onMouseLeave: close }, - { children: jsxRuntime.jsx(QuestionMark, { children: '?' }, void 0) } - ), - void 0 - ), - } - ), - void 0 - ), - } - ), - void 0 - ) -} -var templateObject_1$w, templateObject_2$k - -var TokenListLogo = - 'data:image/svg+xml,%3Csvg%20width%3D%22225%22%20height%3D%22225%22%20viewBox%3D%220%200%20225%20225%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M74.8125%20190.529C65.7561%20190.513%2055.5298%20183.748%2051.9715%20175.42L19.9417%20100.456C16.3834%2092.1277%2020.8404%2085.39%2029.8968%2085.4068L111.417%2085.5579C120.473%2085.5747%20130.699%2092.3395%20134.258%20100.668L166.288%20175.632C169.846%20183.96%20165.389%20190.697%20156.332%20190.681L74.8125%20190.529Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint0_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint1_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint2_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint3_radial%29%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M92.958%20165.95C82.7695%20165.931%2071.265%20158.321%2067.2619%20148.952L26.2489%2052.9632C22.2458%2043.5941%2027.26%2036.0143%2037.4485%2036.0332L141.832%2036.2266C152.02%2036.2455%20163.525%2043.8559%20167.528%2053.225L208.541%20149.214C212.544%20158.583%20207.53%20166.163%20197.341%20166.144L92.958%20165.95ZM71.3614%20148.959C74.475%20156.246%2083.4229%20162.166%2091.3473%20162.18L195.73%20162.374C203.655%20162.388%20207.555%20156.493%20204.441%20149.206L163.428%2053.2174C160.315%2045.9304%20151.367%2040.0111%20143.442%2039.9964L39.0592%2039.803C31.1349%2039.7883%2027.2349%2045.6837%2030.3485%2052.9708L71.3614%20148.959Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M68.565%2053.3425C81.1781%2053.3659%2095.4205%2062.7875%20100.376%2074.3862C105.332%2085.985%2099.1246%2095.3687%2086.5115%2095.3454C73.8984%2095.322%2059.6559%2085.9004%2054.7001%2074.3016C49.7443%2062.7028%2055.9518%2053.3191%2068.565%2053.3425Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M90.6891%20104.981C103.302%20105.004%20117.545%20114.425%20122.5%20126.024C127.456%20137.623%20121.249%20147.007%20108.636%20146.983C96.0225%20146.96%2081.7801%20137.538%2076.8243%20125.94C71.8685%20114.341%2078.076%20104.957%2090.6891%20104.981Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M147.538%20105.142C160.151%20105.166%20174.394%20114.587%20179.349%20126.186C184.305%20137.785%20178.098%20147.168%20165.485%20147.145C152.871%20147.122%20138.629%20137.7%20133.673%20126.101C128.717%20114.503%20134.925%20105.119%20147.538%20105.142Z%22%20fill%3D%22%23131313%22%2F%3E%3Cdefs%3E%3CradialGradient%20id%3D%22paint0_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%28134.41%2068.3006%29%20rotate%28-33.9533%29%20scale%2890.6795%2083.3208%29%22%3E%3Cstop%20offset%3D%220.661458%22%20stop-color%3D%22%23C4FCF8%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint1_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%2842.7873%20129.218%29%20rotate%28-24.1606%29%20scale%28213.359%20196.045%29%22%3E%3Cstop%20stop-color%3D%22%23FF0099%22%20stop-opacity%3D%220.9%22%2F%3E%3Cstop%20offset%3D%220.770833%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint2_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%28176.854%20148.655%29%20rotate%28-53.4908%29%20scale%28107.342%2098.6309%29%22%3E%3Cstop%20stop-color%3D%22%23FFEC43%22%2F%3E%3Cstop%20offset%3D%220.805707%22%20stop-color%3D%22%23FFF6A8%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint3_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%2857.5443%2053.4752%29%20rotate%2820.3896%29%20scale%28137.027%20125.907%29%22%3E%3Cstop%20offset%3D%220.125%22%20stop-color%3D%22%235886FE%22%20stop-opacity%3D%220.46%22%2F%3E%3Cstop%20offset%3D%220.673044%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3C%2Fdefs%3E%3C%2Fsvg%3E' - -var rotate = styled.keyframes( - templateObject_1$v || - (templateObject_1$v = __makeTemplateObject( - ['\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n'], - ['\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n'] - )) -) -var StyledSVG = styled__default['default'].svg( - templateObject_2$j || - (templateObject_2$j = __makeTemplateObject( - ['\n animation: 2s ', ' linear infinite;\n height: ', ';\n width: ', ';\n path {\n stroke: ', ';\n }\n'], - [ - '\n animation: 2s ', - ' linear infinite;\n height: ', - ';\n width: ', - ';\n path {\n stroke: ', - ';\n }\n', - /** - * Takes in custom size and stroke for circle color, default to primary color as fill, - * need ...rest for layered styles on top - */ - ] - )), - rotate, - function (_a) { - var size = _a.size - return size - }, - function (_a) { - var size = _a.size - return size - }, - function (_a) { - var stroke = _a.stroke, - theme = _a.theme - return stroke !== null && stroke !== void 0 ? stroke : theme.primary1 - } -) -/** - * Takes in custom size and stroke for circle color, default to primary color as fill, - * need ...rest for layered styles on top - */ -function Loader(_a) { - var _b = _a.size, - size = _b === void 0 ? '16px' : _b, - stroke = _a.stroke, - rest = __rest(_a, ['size', 'stroke']) - return jsxRuntime.jsx( - StyledSVG, - __assign({ viewBox: '0 0 24 24', fill: 'none', xmlns: 'http://www.w3.org/2000/svg', size, stroke }, rest, { - children: jsxRuntime.jsx( - 'path', - { - d: 'M12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22C17.5228 22 22 17.5228 22 12C22 9.27455 20.9097 6.80375 19.1414 5', - strokeWidth: '2.5', - strokeLinecap: 'round', - strokeLinejoin: 'round', - }, - void 0 - ), - }), - void 0 - ) -} -var templateObject_1$v, templateObject_2$j - -var StyledListLogo = styled__default['default'](Logo)( - templateObject_1$u || - (templateObject_1$u = __makeTemplateObject( - ['\n width: ', ';\n height: ', ';\n'], - ['\n width: ', ';\n height: ', ';\n'] - )), - function (_a) { - var size = _a.size - return size - }, - function (_a) { - var size = _a.size - return size - } -) -function ListLogo(_a) { - var logoURI = _a.logoURI, - style = _a.style, - _b = _a.size, - size = _b === void 0 ? '24px' : _b, - alt = _a.alt - var srcs = useHttpLocations(logoURI) - return jsxRuntime.jsx(StyledListLogo, { alt, size, srcs, style }, void 0) -} -var templateObject_1$u - -var TokenSection = styled__default['default'].div( - templateObject_1$t || - (templateObject_1$t = __makeTemplateObject( - [ - '\n padding: 4px 20px;\n height: 56px;\n display: grid;\n grid-template-columns: auto minmax(auto, 1fr) auto;\n grid-gap: 16px;\n align-items: center;\n\n opacity: ', - ';\n', - ], - [ - '\n padding: 4px 20px;\n height: 56px;\n display: grid;\n grid-template-columns: auto minmax(auto, 1fr) auto;\n grid-gap: 16px;\n align-items: center;\n\n opacity: ', - ';\n', - ] - )), - function (_a) { - var dim = _a.dim - return dim ? '0.4' : '1' - } -) -var CheckIcon = styled__default['default'](reactFeather.CheckCircle)( - templateObject_2$i || - (templateObject_2$i = __makeTemplateObject( - ['\n height: 16px;\n width: 16px;\n margin-right: 6px;\n stroke: ', ';\n'], - ['\n height: 16px;\n width: 16px;\n margin-right: 6px;\n stroke: ', ';\n'] - )), - function (_a) { - var theme = _a.theme - return theme.green1 - } -) -var NameOverflow = styled__default['default'].div( - templateObject_3$f || - (templateObject_3$f = __makeTemplateObject( - [ - '\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 140px;\n font-size: 12px;\n', - ], - [ - '\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 140px;\n font-size: 12px;\n', - ] - )) -) -function ImportRow(_a) { - var token = _a.token, - style = _a.style, - dim = _a.dim, - showImportView = _a.showImportView, - setImportToken = _a.setImportToken - var theme = useTheme() - // check if already active on list or local storage tokens - var isAdded = useIsUserAddedToken(token) - var isActive = useIsTokenActive(token) - var list = token instanceof WrappedTokenInfo ? token.list : undefined - return jsxRuntime.jsxs( - TokenSection, - __assign( - { style }, - { - children: [ - jsxRuntime.jsx( - CurrencyLogo, - { currency: token, size: '24px', style: { opacity: dim ? '0.6' : '1' } }, - void 0 - ), - jsxRuntime.jsxs( - AutoColumn, - __assign( - { gap: '4px', style: { opacity: dim ? '0.6' : '1' } }, - { - children: [ - jsxRuntime.jsxs( - AutoRow, - { - children: [ - jsxRuntime.jsx( - ThemedText.Body, - __assign({ fontWeight: 500 }, { children: token.symbol }), - void 0 - ), - jsxRuntime.jsx( - ThemedText.DarkGray, - __assign( - { ml: '8px', fontWeight: 300 }, - { - children: jsxRuntime.jsx( - NameOverflow, - __assign({ title: token.name }, { children: token.name }), - void 0 - ), - } - ), - void 0 - ), - ], - }, - void 0 - ), - list && - list.logoURI && - jsxRuntime.jsxs( - RowFixed, - { - children: [ - jsxRuntime.jsx( - ThemedText.Small, - __assign( - { mr: '4px', color: theme.text3 }, - { children: jsxRuntime.jsxs(macro.Trans, { children: ['via ', list.name, ' '] }, void 0) } - ), - void 0 - ), - jsxRuntime.jsx(ListLogo, { logoURI: list.logoURI, size: '12px' }, void 0), - ], - }, - void 0 - ), - ], - } - ), - void 0 - ), - !isActive && !isAdded - ? jsxRuntime.jsx( - ButtonPrimary, - __assign( - { - width: 'fit-content', - padding: '6px 12px', - fontWeight: 500, - fontSize: '14px', - onClick() { - setImportToken && setImportToken(token) - showImportView() - }, - }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'Import' }, void 0) } - ), - void 0 - ) - : jsxRuntime.jsxs( - RowFixed, - __assign( - { style: { minWidth: 'fit-content' } }, - { - children: [ - jsxRuntime.jsx(CheckIcon, {}, void 0), - jsxRuntime.jsx( - ThemedText.Main, - __assign( - { color: theme.green1 }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'Active' }, void 0) } - ), - void 0 - ), - ], - } - ), - void 0 - ), - ], - } - ), - void 0 - ) -} -var templateObject_1$t, templateObject_2$i, templateObject_3$f - -var TextDot = styled__default['default'].div( - templateObject_1$s || - (templateObject_1$s = __makeTemplateObject( - ['\n height: 3px;\n width: 3px;\n background-color: ', ';\n border-radius: 50%;\n'], - ['\n height: 3px;\n width: 3px;\n background-color: ', ';\n border-radius: 50%;\n'] - )), - function (_a) { - var theme = _a.theme - return theme.text2 - } -) -var Checkbox = styled__default['default'].input( - templateObject_2$h || - (templateObject_2$h = __makeTemplateObject( - ['\n border: 1px solid ', ';\n height: 20px;\n margin: 0;\n'], - ['\n border: 1px solid ', ';\n height: 20px;\n margin: 0;\n'] - )), - function (_a) { - var theme = _a.theme - return theme.red3 - } -) -var PaddedColumn = styled__default['default'](AutoColumn)( - templateObject_3$e || (templateObject_3$e = __makeTemplateObject(['\n padding: 20px;\n'], ['\n padding: 20px;\n'])) -) -var MenuItem = styled__default['default'](RowBetween)( - templateObject_4$9 || - (templateObject_4$9 = __makeTemplateObject( - [ - '\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: ', - ';\n pointer-events: ', - ';\n :hover {\n background-color: ', - ';\n }\n opacity: ', - ';\n', - ], - [ - '\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: ', - ';\n pointer-events: ', - ';\n :hover {\n background-color: ', - ';\n }\n opacity: ', - ';\n', - ] - )), - function (_a) { - var disabled = _a.disabled - return !disabled && 'pointer' - }, - function (_a) { - var disabled = _a.disabled - return disabled && 'none' - }, - function (_a) { - var theme = _a.theme, - disabled = _a.disabled - return !disabled && theme.bg2 - }, - function (_a) { - var disabled = _a.disabled, - selected = _a.selected - return disabled || selected ? 0.5 : 1 - } -) -var SearchInput = styled__default['default'].input( - templateObject_5$8 || - (templateObject_5$8 = __makeTemplateObject( - [ - '\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: ', - ';\n border-style: solid;\n border: 1px solid ', - ';\n -webkit-appearance: none;\n\n font-size: 18px;\n\n ::placeholder {\n color: ', - ';\n }\n transition: border 100ms;\n :focus {\n border: 1px solid ', - ';\n outline: none;\n }\n', - ], - [ - '\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: ', - ';\n border-style: solid;\n border: 1px solid ', - ';\n -webkit-appearance: none;\n\n font-size: 18px;\n\n ::placeholder {\n color: ', - ';\n }\n transition: border 100ms;\n :focus {\n border: 1px solid ', - ';\n outline: none;\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.text1 - }, - function (_a) { - var theme = _a.theme - return theme.bg3 - }, - function (_a) { - var theme = _a.theme - return theme.text3 - }, - function (_a) { - var theme = _a.theme - return theme.primary1 - } -) -var Separator = styled__default['default'].div( - templateObject_6$5 || - (templateObject_6$5 = __makeTemplateObject( - ['\n width: 100%;\n height: 1px;\n background-color: ', ';\n'], - ['\n width: 100%;\n height: 1px;\n background-color: ', ';\n'] - )), - function (_a) { - var theme = _a.theme - return theme.bg2 - } -) -var SeparatorDark = styled__default['default'].div( - templateObject_7$4 || - (templateObject_7$4 = __makeTemplateObject( - ['\n width: 100%;\n height: 1px;\n background-color: ', ';\n'], - ['\n width: 100%;\n height: 1px;\n background-color: ', ';\n'] - )), - function (_a) { - var theme = _a.theme - return theme.bg3 - } -) -var templateObject_1$s, - templateObject_2$h, - templateObject_3$e, - templateObject_4$9, - templateObject_5$8, - templateObject_6$5, - templateObject_7$4 - -function currencyKey(currency) { - return currency.isToken ? currency.address : 'ETHER' -} -var StyledBalanceText = styled__default['default'](rebass.Text)( - templateObject_1$r || - (templateObject_1$r = __makeTemplateObject( - ['\n white-space: nowrap;\n overflow: hidden;\n max-width: 5rem;\n text-overflow: ellipsis;\n'], - ['\n white-space: nowrap;\n overflow: hidden;\n max-width: 5rem;\n text-overflow: ellipsis;\n'] - )) -) -var Tag = styled__default['default'].div( - templateObject_2$g || - (templateObject_2$g = __makeTemplateObject( - [ - '\n background-color: ', - ';\n color: ', - ';\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 background-color: ', - ';\n color: ', - ';\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', - ] - )), - function (_a) { - var theme = _a.theme - return theme.bg3 - }, - function (_a) { - var theme = _a.theme - return theme.text2 - } -) -var FixedContentRow = styled__default['default'].div( - templateObject_3$d || - (templateObject_3$d = __makeTemplateObject( - ['\n padding: 4px 20px;\n height: 56px;\n display: grid;\n grid-gap: 16px;\n align-items: center;\n'], - ['\n padding: 4px 20px;\n height: 56px;\n display: grid;\n grid-gap: 16px;\n align-items: center;\n'] - )) -) -function Balance(_a) { - var balance = _a.balance - return jsxRuntime.jsx( - StyledBalanceText, - __assign({ title: balance.toExact() }, { children: balance.toSignificant(4) }), - void 0 - ) -} -var TagContainer = styled__default['default'].div( - templateObject_4$8 || - (templateObject_4$8 = __makeTemplateObject( - ['\n display: flex;\n justify-content: flex-end;\n'], - ['\n display: flex;\n justify-content: flex-end;\n'] - )) -) -var TokenListLogoWrapper = styled__default['default'].img( - templateObject_5$7 || (templateObject_5$7 = __makeTemplateObject(['\n height: 20px;\n'], ['\n height: 20px;\n'])) -) -function TokenTags(_a) { - var currency = _a.currency - if (!(currency instanceof WrappedTokenInfo)) { - return jsxRuntime.jsx('span', {}, void 0) - } - var tags = currency.tags - if (!tags || tags.length === 0) return jsxRuntime.jsx('span', {}, void 0) - var tag = tags[0] - return jsxRuntime.jsxs( - TagContainer, - { - children: [ - jsxRuntime.jsx( - MouseoverTooltip, - __assign({ text: tag.description }, { children: jsxRuntime.jsx(Tag, { children: tag.name }, tag.id) }), - void 0 - ), - tags.length > 1 - ? jsxRuntime.jsx( - MouseoverTooltip, - __assign( - { - text: tags - .slice(1) - .map(function (_a) { - var name = _a.name, - description = _a.description - return name + ': ' + description - }) - .join('; \n'), - }, - { children: jsxRuntime.jsx(Tag, { children: '...' }, void 0) } - ), - void 0 - ) - : null, - ], - }, - void 0 - ) -} -function CurrencyRow(_a) { - var currency = _a.currency, - onSelect = _a.onSelect, - isSelected = _a.isSelected, - otherSelected = _a.otherSelected, - style = _a.style, - showCurrencyAmount = _a.showCurrencyAmount - var account = useActiveWeb3React().account - var key = currencyKey(currency) - var selectedTokenList = useCombinedActiveList() - var isOnSelectedList = isTokenOnList(selectedTokenList, currency.isToken ? currency : undefined) - var customAdded = useIsUserAddedToken(currency) - var balance = useCurrencyBalance(account !== null && account !== void 0 ? account : undefined, currency) - // only show add or remove buttons if not on selected list - return jsxRuntime.jsxs( - MenuItem, - __assign( - { - style, - className: 'token-item-' + key, - onClick() { - return isSelected ? null : onSelect() - }, - disabled: isSelected, - selected: otherSelected, - }, - { - children: [ - jsxRuntime.jsx(CurrencyLogo, { currency, size: '24px' }, void 0), - jsxRuntime.jsxs( - Column, - { - children: [ - jsxRuntime.jsx( - rebass.Text, - __assign({ title: currency.name, fontWeight: 500 }, { children: currency.symbol }), - void 0 - ), - jsxRuntime.jsx( - ThemedText.DarkGray, - __assign( - { ml: '0px', fontSize: '12px', fontWeight: 300 }, - { - children: - !currency.isNative && !isOnSelectedList && customAdded - ? jsxRuntime.jsxs(macro.Trans, { children: [currency.name, ' \u2022 Added by user'] }, void 0) - : currency.name, - } - ), - void 0 - ), - ], - }, - void 0 - ), - jsxRuntime.jsx(TokenTags, { currency }, void 0), - showCurrencyAmount && - jsxRuntime.jsx( - RowFixed, - __assign( - { style: { justifySelf: 'flex-end' } }, - { - children: balance - ? jsxRuntime.jsx(Balance, { balance }, void 0) - : account - ? jsxRuntime.jsx(Loader, {}, void 0) - : null, - } - ), - void 0 - ), - ], - } - ), - void 0 - ) -} -var BREAK_LINE = 'BREAK' -function isBreakLine(x) { - return x === BREAK_LINE -} -function BreakLineComponent(_a) { - var style = _a.style - var theme = useTheme() - return jsxRuntime.jsx( - FixedContentRow, - __assign( - { style }, - { - children: jsxRuntime.jsx( - LightGreyCard, - __assign( - { padding: '8px 12px', $borderRadius: '8px' }, - { - children: jsxRuntime.jsxs( - RowBetween, - { - children: [ - jsxRuntime.jsxs( - RowFixed, - { - children: [ - jsxRuntime.jsx(TokenListLogoWrapper, { src: TokenListLogo }, void 0), - jsxRuntime.jsx( - ThemedText.Main, - __assign( - { ml: '6px', fontSize: '12px', color: theme.text1 }, - { - children: jsxRuntime.jsx( - macro.Trans, - { children: 'Expanded results from inactive Token Lists' }, - void 0 - ), - } - ), - void 0 - ), - ], - }, - void 0 - ), - jsxRuntime.jsx( - QuestionHelper, - { - text: jsxRuntime.jsx( - macro.Trans, - { - children: - 'Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.', - }, - void 0 - ), - }, - void 0 - ), - ], - }, - void 0 - ), - } - ), - void 0 - ), - } - ), - void 0 - ) -} -function CurrencyList(_a) { - var height = _a.height, - currencies = _a.currencies, - otherListTokens = _a.otherListTokens, - selectedCurrency = _a.selectedCurrency, - onCurrencySelect = _a.onCurrencySelect, - otherCurrency = _a.otherCurrency, - fixedListRef = _a.fixedListRef, - showImportView = _a.showImportView, - setImportToken = _a.setImportToken, - showCurrencyAmount = _a.showCurrencyAmount - var itemData = React.useMemo( - function () { - if ( - otherListTokens && - (otherListTokens === null || otherListTokens === void 0 ? void 0 : otherListTokens.length) > 0 - ) { - return __spreadArray( - __spreadArray(__spreadArray([], __read(currencies), false), [BREAK_LINE], false), - __read(otherListTokens), - false - ) - } - return currencies - }, - [currencies, otherListTokens] - ) - var Row = React.useCallback( - function TokenRow(_a) { - var data = _a.data, - index = _a.index, - style = _a.style - var row = data[index] - if (isBreakLine(row)) { - return jsxRuntime.jsx(BreakLineComponent, { style }, void 0) - } - var currency = row - var isSelected = Boolean(currency && selectedCurrency && selectedCurrency.equals(currency)) - var otherSelected = Boolean(currency && otherCurrency && otherCurrency.equals(currency)) - var handleSelect = function () { - return currency && onCurrencySelect(currency) - } - var token = currency === null || currency === void 0 ? void 0 : currency.wrapped - var showImport = index > currencies.length - if (showImport && token) { - return jsxRuntime.jsx(ImportRow, { style, token, showImportView, setImportToken, dim: true }, void 0) - } else if (currency) { - return jsxRuntime.jsx( - CurrencyRow, - { - style, - currency, - isSelected, - onSelect: handleSelect, - otherSelected, - showCurrencyAmount, - }, - void 0 - ) - } else { - return null - } - }, - [ - currencies.length, - onCurrencySelect, - otherCurrency, - selectedCurrency, - setImportToken, - showImportView, - showCurrencyAmount, - ] - ) - var itemKey = React.useCallback(function (index, data) { - var currency = data[index] - if (isBreakLine(currency)) return BREAK_LINE - return currencyKey(currency) - }, []) - return jsxRuntime.jsx( - reactWindow.FixedSizeList, - __assign( - { - height, - ref: fixedListRef, - width: '100%', - itemData, - itemCount: itemData.length, - itemSize: 56, - itemKey, - }, - { children: Row } - ), - void 0 - ) -} -var templateObject_1$r, templateObject_2$g, templateObject_3$d, templateObject_4$8, templateObject_5$7 - -var ContentWrapper = styled__default['default'](Column)( - templateObject_1$q || - (templateObject_1$q = __makeTemplateObject( - ['\n width: 100%;\n flex: 1 1;\n position: relative;\n'], - ['\n width: 100%;\n flex: 1 1;\n position: relative;\n'] - )) -) -var Footer$1 = styled__default['default'].div( - templateObject_2$f || - (templateObject_2$f = __makeTemplateObject( - [ - '\n width: 100%;\n border-radius: 20px;\n padding: 20px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n background-color: ', - ';\n border-top: 1px solid ', - ';\n', - ], - [ - '\n width: 100%;\n border-radius: 20px;\n padding: 20px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n background-color: ', - ';\n border-top: 1px solid ', - ';\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.bg1 - }, - function (_a) { - var theme = _a.theme - return theme.bg2 - } -) -function CurrencySearch(_a) { - var selectedCurrency = _a.selectedCurrency, - onCurrencySelect = _a.onCurrencySelect, - otherSelectedCurrency = _a.otherSelectedCurrency, - showCommonBases = _a.showCommonBases, - showCurrencyAmount = _a.showCurrencyAmount, - disableNonToken = _a.disableNonToken, - onDismiss = _a.onDismiss, - isOpen = _a.isOpen, - showManageView = _a.showManageView, - showImportView = _a.showImportView, - setImportToken = _a.setImportToken - var chainId = useActiveWeb3React().chainId - var theme = useTheme() - // refs for fixed size lists - var fixedList = React.useRef() - var _b = __read(React.useState(''), 2), - searchQuery = _b[0], - setSearchQuery = _b[1] - var debouncedQuery = useDebounce(searchQuery, 200) - var allTokens = useAllTokens() - // if they input an address, use it - var isAddressSearch = isAddress(debouncedQuery) - var searchToken = useToken(debouncedQuery) - var searchTokenIsAdded = useIsUserAddedToken(searchToken) - React.useEffect( - function () { - if (isAddressSearch) { - ReactGA__default['default'].event({ - category: 'Currency Select', - action: 'Search by address', - label: isAddressSearch, - }) - } - }, - [isAddressSearch] - ) - var filteredTokens = React.useMemo( - function () { - return Object.values(allTokens).filter(getTokenFilter(debouncedQuery)) - }, - [allTokens, debouncedQuery] - ) - var balances = useAllTokenBalances() - var sortedTokens = React.useMemo( - function () { - return filteredTokens.sort(tokenComparator.bind(null, balances)) - }, - [balances, filteredTokens] - ) - var filteredSortedTokens = useSortTokensByQuery(debouncedQuery, sortedTokens) - var native = useNativeCurrency() - var filteredSortedTokensWithETH = React.useMemo( - function () { - var _a, _b - if (!native) return filteredSortedTokens - var s = debouncedQuery.toLowerCase().trim() - if ( - ((_b = (_a = native.symbol) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === null || _b === void 0 - ? void 0 - : _b.indexOf(s)) !== -1 - ) { - return native ? __spreadArray([native], __read(filteredSortedTokens), false) : filteredSortedTokens - } - return filteredSortedTokens - }, - [debouncedQuery, native, filteredSortedTokens] - ) - var handleCurrencySelect = React.useCallback( - function (currency) { - onCurrencySelect(currency) - onDismiss() - }, - [onDismiss, onCurrencySelect] - ) - // clear the input on open - React.useEffect( - function () { - if (isOpen) setSearchQuery('') - }, - [isOpen] - ) - // manage focus on modal show - var inputRef = React.useRef() - var handleInput = React.useCallback(function (event) { - var _a - var input = event.target.value - var checksummedInput = isAddress(input) - setSearchQuery(checksummedInput || input) - ;(_a = fixedList.current) === null || _a === void 0 ? void 0 : _a.scrollTo(0) - }, []) - var handleEnter = React.useCallback( - function (e) { - var _a, _b - if (e.key === 'Enter') { - var s = debouncedQuery.toLowerCase().trim() - if ( - s === - ((_a = native === null || native === void 0 ? void 0 : native.symbol) === null || _a === void 0 - ? void 0 - : _a.toLowerCase()) - ) { - handleCurrencySelect(native) - } else if (filteredSortedTokensWithETH.length > 0) { - if ( - ((_b = filteredSortedTokensWithETH[0].symbol) === null || _b === void 0 ? void 0 : _b.toLowerCase()) === - debouncedQuery.trim().toLowerCase() || - filteredSortedTokensWithETH.length === 1 - ) { - handleCurrencySelect(filteredSortedTokensWithETH[0]) - } - } - } - }, - [debouncedQuery, native, filteredSortedTokensWithETH, handleCurrencySelect] - ) - // menu ui - var _c = __read(useToggle(false), 2), - open = _c[0], - toggle = _c[1] - var node = React.useRef() - useOnClickOutside(node, open ? toggle : undefined) - // if no results on main list, show option to expand into inactive - var filteredInactiveTokens = useSearchInactiveTokenLists( - filteredTokens.length === 0 || (debouncedQuery.length > 2 && !isAddressSearch) ? debouncedQuery : undefined - ) - return jsxRuntime.jsxs( - ContentWrapper, - { - children: [ - jsxRuntime.jsxs( - PaddedColumn, - __assign( - { gap: '16px' }, - { - children: [ - jsxRuntime.jsxs( - RowBetween, - { - children: [ - jsxRuntime.jsx( - rebass.Text, - __assign( - { fontWeight: 500, fontSize: 16 }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'Select a token' }, void 0) } - ), - void 0 - ), - jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0), - ], - }, - void 0 - ), - jsxRuntime.jsx( - Row, - { - children: jsxRuntime.jsx( - SearchInput, - { - type: 'text', - id: 'token-search-input', - placeholder: macro.t( - templateObject_3$c || - (templateObject_3$c = __makeTemplateObject( - ['Search name or paste address'], - ['Search name or paste address'] - )) - ), - autoComplete: 'off', - value: searchQuery, - ref: inputRef, - onChange: handleInput, - onKeyDown: handleEnter, - }, - void 0 - ), - }, - void 0 - ), - showCommonBases && - jsxRuntime.jsx(CommonBases, { chainId, onSelect: handleCurrencySelect, selectedCurrency }, void 0), - ], - } - ), - void 0 - ), - jsxRuntime.jsx(Separator, {}, void 0), - searchToken && !searchTokenIsAdded - ? jsxRuntime.jsx( - Column, - __assign( - { style: { padding: '20px 0', height: '100%' } }, - { - children: jsxRuntime.jsx(ImportRow, { token: searchToken, showImportView, setImportToken }, void 0), - } - ), - void 0 - ) - : (filteredSortedTokens === null || filteredSortedTokens === void 0 ? void 0 : filteredSortedTokens.length) > - 0 || - (filteredInactiveTokens === null || filteredInactiveTokens === void 0 - ? void 0 - : filteredInactiveTokens.length) > 0 - ? jsxRuntime.jsx( - 'div', - __assign( - { style: { flex: '1' } }, - { - children: jsxRuntime.jsx( - AutoSizer__default['default'], - __assign( - { disableWidth: true }, - { - children(_a) { - var height = _a.height - return jsxRuntime.jsx( - CurrencyList, - { - height, - currencies: disableNonToken ? filteredSortedTokens : filteredSortedTokensWithETH, - otherListTokens: filteredInactiveTokens, - onCurrencySelect: handleCurrencySelect, - otherCurrency: otherSelectedCurrency, - selectedCurrency, - fixedListRef: fixedList, - showImportView, - setImportToken, - showCurrencyAmount, - }, - void 0 - ) - }, - } - ), - void 0 - ), - } - ), - void 0 - ) - : jsxRuntime.jsx( - Column, - __assign( - { style: { padding: '20px', height: '100%' } }, - { - children: jsxRuntime.jsx( - ThemedText.Main, - __assign( - { color: theme.text3, textAlign: 'center', mb: '20px' }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'No results found.' }, void 0) } - ), - void 0 - ), - } - ), - void 0 - ), - jsxRuntime.jsx( - Footer$1, - { - children: jsxRuntime.jsx( - Row, - __assign( - { justify: 'center' }, - { - children: jsxRuntime.jsx( - ButtonText, - __assign( - { onClick: showManageView, color: theme.primary1, className: 'list-token-manage-button' }, - { - children: jsxRuntime.jsxs( - RowFixed, - { - children: [ - jsxRuntime.jsx( - IconWrapper, - __assign( - { size: '16px', marginRight: '6px', stroke: theme.primaryText1 }, - { children: jsxRuntime.jsx(reactFeather.Edit, {}, void 0) } - ), - void 0 - ), - jsxRuntime.jsx( - ThemedText.Main, - __assign( - { color: theme.primaryText1 }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'Manage Token Lists' }, void 0) } - ), - void 0 - ), - ], - }, - void 0 - ), - } - ), - void 0 - ), - } - ), - void 0 - ), - }, - void 0 - ), - ], - }, - void 0 - ) -} -var templateObject_1$q, templateObject_2$f, templateObject_3$c - -var UNISWAP_LOGO_URL = - 'data:image/svg+xml,%3Csvg%20width%3D%2214%22%20height%3D%2215%22%20viewBox%3D%220%200%2014%2015%22%20fill%3D%22black%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20style%3D%22mix-blend-mode%3Adarken%22%3E%3Cpath%20d%3D%22M4.15217%201.55141C3.96412%201.52242%203.95619%201.51902%204.04468%201.5055C4.21427%201.47958%204.61472%201.51491%204.89067%201.58012C5.53489%201.73232%206.12109%202.12221%206.74683%202.81466L6.91307%202.99862L7.15088%202.96062C8.15274%202.8006%209.17194%202.92778%2010.0244%203.31918C10.2589%203.42686%2010.6287%203.64121%2010.6749%203.69629C10.6896%203.71384%2010.7166%203.82684%2010.7349%203.94742C10.7982%204.36458%2010.7665%204.68434%2010.6382%204.92317C10.5683%205.05313%2010.5644%205.09432%2010.6114%205.20554C10.6489%205.2943%2010.7534%205.35999%2010.8569%205.35985C11.0687%205.35956%2011.2968%205.0192%2011.4024%204.54561L11.4444%204.3575L11.5275%204.45109C11.9835%204.96459%2012.3417%205.66488%2012.4032%206.16335L12.4192%206.29332L12.3426%206.17517C12.2107%205.97186%2012.0781%205.83346%2011.9084%205.72183C11.6024%205.52062%2011.2789%205.45215%2010.4222%205.40727C9.64839%205.36675%209.21045%205.30106%208.77621%205.16032C8.03738%204.9209%207.66493%204.60204%206.78729%203.4576C6.39748%202.94928%206.15654%202.66804%205.91687%202.44155C5.37228%201.92691%204.83716%201.65701%204.15217%201.55141Z%22%2F%3E%3Cpath%20d%3D%22M10.8494%202.68637C10.8689%202.34575%2010.9153%202.12108%2011.0088%201.9159C11.0458%201.83469%2011.0804%201.76822%2011.0858%201.76822C11.0911%201.76822%2011.075%201.82816%2011.05%201.90142C10.9821%202.10054%2010.9709%202.3729%2011.0177%202.68978C11.0771%203.09184%2011.1109%203.14985%2011.5385%203.58416C11.739%203.78788%2011.9723%204.0448%2012.0568%204.15511L12.2106%204.35568L12.0568%204.21234C11.8688%204.03705%2011.4364%203.6952%2011.3409%203.64633C11.2768%203.61356%2011.2673%203.61413%2011.2278%203.65321C11.1914%203.68922%2011.1837%203.74333%2011.1787%203.99915C11.1708%204.39786%2011.1161%204.65377%2010.9842%204.90965C10.9128%205.04805%2010.9015%205.01851%2010.9661%204.8623C11.0143%204.74566%2011.0192%204.69439%2011.0189%204.30842C11.0181%203.53291%2010.9255%203.34647%2010.3823%203.02709C10.2447%202.94618%2010.0179%202.8295%209.87839%202.76778C9.73887%202.70606%209.62805%202.6523%209.63208%202.64828C9.64746%202.63307%2010.1772%202.78675%2010.3905%202.86828C10.7077%202.98954%2010.76%203.00526%2010.7985%202.99063C10.8244%202.98082%2010.8369%202.90608%2010.8494%202.68637Z%22%2F%3E%3Cpath%20d%3D%22M4.51745%204.01304C4.13569%203.49066%203.89948%202.68973%203.95062%202.091L3.96643%201.90572L4.05333%201.92148C4.21652%201.95106%204.49789%202.05515%204.62964%202.13469C4.9912%202.35293%205.14773%202.64027%205.30697%203.37811C5.35362%203.59423%205.41482%203.8388%205.44298%203.9216C5.48831%204.05487%205.65962%204.36617%205.7989%204.56834C5.89922%204.71395%205.83258%204.78295%205.61082%204.76305C5.27215%204.73267%204.8134%204.41799%204.51745%204.01304Z%22%2F%3E%3Cpath%20d%3D%22M10.3863%207.90088C8.60224%207.18693%207.97389%206.56721%207.97389%205.52157C7.97389%205.36769%207.97922%205.24179%207.98571%205.24179C7.99221%205.24179%208.06124%205.29257%208.1391%205.35465C8.50088%205.64305%208.906%205.76623%2010.0275%205.92885C10.6875%206.02455%2011.0589%206.10185%2011.4015%206.21477C12.4904%206.57371%2013.1641%207.30212%2013.3248%208.29426C13.3715%208.58255%2013.3441%209.12317%2013.2684%209.4081C13.2087%209.63315%2013.0263%2010.0388%2012.9779%2010.0544C12.9645%2010.0587%2012.9514%2010.0076%2012.9479%209.93809C12.9296%209.56554%2012.7402%209.20285%2012.4221%208.93116C12.0604%208.62227%2011.5745%208.37633%2010.3863%207.90088Z%22%2F%3E%3Cpath%20d%3D%22M9.13385%208.19748C9.11149%208.06527%209.07272%207.89643%209.04769%207.82228L9.00217%207.68748L9.08672%207.7818C9.20374%207.91233%209.2962%208.07937%209.37457%208.30185C9.43438%208.47165%209.44111%208.52215%209.44066%208.79807C9.4402%209.06896%209.43273%209.12575%209.3775%209.27858C9.29042%209.51959%209.18233%209.69048%209.00097%209.87391C8.67507%2010.2036%208.25607%2010.3861%207.65143%2010.4618C7.54633%2010.4749%207.24%2010.4971%206.97069%2010.511C6.292%2010.5461%205.84531%2010.6186%205.44393%2010.7587C5.38623%2010.7788%205.3347%2010.7911%205.32947%2010.7859C5.31323%2010.7698%205.58651%2010.6079%205.81223%2010.4998C6.1305%2010.3474%206.44733%2010.2643%207.15719%2010.1468C7.50785%2010.0887%207.86998%2010.0183%207.96194%209.99029C8.83033%209.72566%209.27671%209.04276%209.13385%208.19748Z%22%2F%3E%3Cpath%20d%3D%22M9.95169%209.64109C9.71465%209.13463%209.66022%208.64564%209.79009%208.18961C9.80399%208.14088%209.82632%208.101%209.83976%208.101C9.85319%208.101%209.90913%208.13105%209.96404%208.16777C10.0733%208.24086%2010.2924%208.36395%2010.876%208.68023C11.6043%209.0749%2012.0196%209.3805%2012.302%209.72965C12.5493%2010.0354%2012.7023%2010.3837%2012.776%2010.8084C12.8177%2011.0489%2012.7932%2011.6277%2012.7311%2011.8699C12.5353%2012.6337%2012.0802%2013.2336%2011.4311%2013.5837C11.336%2013.635%2011.2506%2013.6771%2011.2414%2013.6773C11.2321%2013.6775%2011.2668%2013.5899%2011.3184%2013.4827C11.5367%2013.029%2011.5616%2012.5877%2011.3965%2012.0965C11.2954%2011.7957%2011.0893%2011.4287%2010.6732%2010.8084C10.1893%2010.0873%2010.0707%209.89539%209.95169%209.64109Z%22%2F%3E%3Cpath%20d%3D%22M3.25046%2012.3737C3.91252%2011.8181%204.73629%2011.4234%205.48666%2011.3022C5.81005%2011.25%206.34877%2011.2707%206.64823%2011.3469C7.12824%2011.469%207.55763%2011.7425%207.78094%2012.0683C7.99918%2012.3867%208.09281%2012.6642%208.19029%2013.2816C8.22875%2013.5252%208.27057%2013.7697%208.28323%2013.8251C8.35644%2014.1451%208.4989%2014.4008%208.67544%2014.5293C8.95583%2014.7333%209.43865%2014.7459%209.91362%2014.5618C9.99423%2014.5305%2010.0642%2014.5089%2010.0691%2014.5138C10.0864%2014.5308%209.84719%2014.6899%209.67847%2014.7737C9.45143%2014.8864%209.2709%2014.93%209.03102%2014.93C8.59601%2014.93%208.23486%2014.7101%207.9335%2014.2616C7.87419%2014.1733%207.7409%2013.909%207.63729%2013.6741C7.3191%2012.9528%207.16199%2012.7331%206.79255%2012.4926C6.47104%2012.2834%206.05641%2012.2459%205.74449%2012.3979C5.33475%2012.5976%205.22043%2013.118%205.51389%2013.4478C5.63053%2013.5789%205.84803%2013.6919%206.02588%2013.7139C6.35861%2013.7551%206.64455%2013.5035%206.64455%2013.1696C6.64455%2012.9528%206.56071%2012.8291%206.34966%2012.7344C6.0614%2012.6051%205.75156%2012.7562%205.75304%2013.0254C5.75368%2013.1402%205.80396%2013.2122%205.91971%2013.2643C5.99397%2013.2977%205.99569%2013.3003%205.93514%2013.2878C5.67066%2013.2333%205.6087%2012.9164%205.82135%2012.706C6.07667%2012.4535%206.60461%2012.5649%206.78591%2012.9097C6.86208%2013.0545%206.87092%2013.3429%206.80451%2013.517C6.6559%2013.9068%206.22256%2014.1117%205.78297%2014.0002C5.48368%2013.9242%205.36181%2013.842%205.00097%2013.4726C4.37395%2012.8306%204.13053%2012.7062%203.22657%2012.566L3.05335%2012.5391L3.25046%2012.3737Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M0.308383%200.883984C2.40235%203.40996%203.84457%204.45213%204.00484%204.67231C4.13717%204.85412%204.08737%205.01757%203.86067%205.14567C3.7346%205.21689%203.47541%205.28905%203.34564%205.28905C3.19887%205.28905%203.14847%205.23278%203.14847%205.23278C3.06337%205.15255%203.01544%205.16658%202.5784%204.39555C1.97166%203.45981%201.46389%202.68357%201.45004%202.67057C1.41801%202.64052%201.41856%202.64153%202.51654%204.59413C2.69394%205.0011%202.55182%205.15049%202.55182%205.20845C2.55182%205.32636%202.51946%205.38834%202.37311%205.55059C2.12914%205.8211%202.02008%206.12505%201.94135%206.7541C1.8531%207.45926%201.60492%207.95737%200.917156%208.80989C0.514562%209.30893%200.448686%209.4004%200.3471%209.60153C0.219144%209.85482%200.183961%209.99669%200.169701%2010.3165C0.154629%2010.6547%200.183983%2010.8732%200.287934%2011.1965C0.378939%2011.4796%200.473932%2011.6665%200.716778%2012.0403C0.926351%2012.3629%201.04702%2012.6027%201.04702%2012.6965C1.04702%2012.7711%201.06136%2012.7712%201.38611%2012.6983C2.16328%2012.5239%202.79434%2012.2171%203.14925%2011.8411C3.36891%2011.6084%203.42048%2011.4799%203.42215%2011.1611C3.42325%2010.9525%203.41587%2010.9088%203.35914%2010.7888C3.2668%2010.5935%203.09869%2010.4311%202.72817%2010.1794C2.2427%209.84953%202.03534%209.58398%201.97807%209.21878C1.93108%208.91913%201.98559%208.70771%202.25416%208.14825C2.53214%207.56916%202.60103%207.32239%202.64763%206.73869C2.67773%206.36158%202.71941%206.21286%202.82842%206.09348C2.94212%205.969%203.04447%205.92684%203.32584%205.88863C3.78457%205.82635%204.07667%205.70839%204.31677%205.48849C4.52505%205.29772%204.61221%205.11391%204.62558%204.8372L4.63574%204.62747L4.51934%204.49259C4.09783%204.00411%200.0261003%200.5%200.000160437%200.5C-0.00538105%200.5%200.133325%200.672804%200.308383%200.883984ZM1.28364%2010.6992C1.37894%2010.5314%201.3283%2010.3158%201.16889%2010.2104C1.01827%2010.1109%200.78428%2010.1578%200.78428%2010.2875C0.78428%2010.3271%200.806303%2010.3559%200.855937%2010.3813C0.939514%2010.424%200.945581%2010.4721%200.879823%2010.5703C0.81323%2010.6698%200.818604%2010.7573%200.894991%2010.8167C1.0181%2010.9125%201.19237%2010.8598%201.28364%2010.6992Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M4.92523%205.99865C4.70988%206.06439%204.50054%206.29124%204.43574%206.5291C4.39621%206.67421%204.41864%206.92875%204.47785%207.00736C4.57351%207.13433%204.66602%207.16778%204.91651%207.16603C5.40693%207.16263%205.83327%206.95358%205.88284%206.69224C5.92347%206.47801%205.73622%206.18112%205.4783%206.05078C5.34521%205.98355%205.06217%205.95688%204.92523%205.99865ZM5.49853%206.44422C5.57416%206.33741%205.54107%206.22198%205.41245%206.14391C5.1675%205.99525%204.79708%206.11827%204.79708%206.34826C4.79708%206.46274%204.99025%206.58765%205.16731%206.58765C5.28516%206.58765%205.44644%206.5178%205.49853%206.44422Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E' - -var _a$6 -var NETWORK_POLLING_INTERVALS = - ((_a$6 = {}), - (_a$6[SupportedChainId.ARBITRUM_ONE] = ms__default['default']( - templateObject_1$p || (templateObject_1$p = __makeTemplateObject(['1s'], ['1s'])) - )), - (_a$6[SupportedChainId.ARBITRUM_RINKEBY] = ms__default['default']( - templateObject_2$e || (templateObject_2$e = __makeTemplateObject(['1s'], ['1s'])) - )), - (_a$6[SupportedChainId.OPTIMISM] = ms__default['default']( - templateObject_3$b || (templateObject_3$b = __makeTemplateObject(['1s'], ['1s'])) - )), - (_a$6[SupportedChainId.OPTIMISTIC_KOVAN] = ms__default['default']( - templateObject_4$7 || (templateObject_4$7 = __makeTemplateObject(['1s'], ['1s'])) - )), - _a$6) -function getLibrary(provider) { - var library = new providers.Web3Provider( - provider, - typeof provider.chainId === 'number' - ? provider.chainId - : typeof provider.chainId === 'string' - ? parseInt(provider.chainId) - : 'any' - ) - library.pollingInterval = 15000 - library.detectNetwork().then(function (network) { - var networkPollingInterval = NETWORK_POLLING_INTERVALS[network.chainId] - if (networkPollingInterval) { - console.debug('Setting polling interval', networkPollingInterval) - library.pollingInterval = networkPollingInterval - } - }) - return library -} -var templateObject_1$p, templateObject_2$e, templateObject_3$b, templateObject_4$7 - -var OVERLAY_READY = 'OVERLAY_READY' -var CHAIN_ID_NETWORK_ARGUMENT = { - 1: undefined, - 3: 'ropsten', - 4: 'rinkeby', - 42: 'kovan', -} -var FortmaticConnector = /** @class */ (function (_super) { - __extends(FortmaticConnector, _super) - function FortmaticConnector() { - return (_super !== null && _super.apply(this, arguments)) || this - } - FortmaticConnector.prototype.activate = function () { - return __awaiter(this, void 0, void 0, function () { - var Fortmatic, _a, apiKey, chainId, provider, pollForOverlayReady, _b, account - var _this = this - return __generator(this, function (_c) { - switch (_c.label) { - case 0: - if (!!this.fortmatic) return [3 /*break*/, 2] - return [ - 4 /*yield*/, - Promise.resolve().then(function () { - return fortmatic$1 - }), - ] - case 1: - Fortmatic = _c.sent().default - ;(_a = this), (apiKey = _a.apiKey), (chainId = _a.chainId) - if (chainId in CHAIN_ID_NETWORK_ARGUMENT) { - this.fortmatic = new Fortmatic(apiKey, CHAIN_ID_NETWORK_ARGUMENT[chainId]) - } else { - throw new Error('Unsupported network ID: ' + chainId) - } - _c.label = 2 - case 2: - provider = this.fortmatic.getProvider() - pollForOverlayReady = new Promise(function (resolve) { - var interval = setInterval(function () { - if (provider.overlayReady) { - clearInterval(interval) - _this.emit(OVERLAY_READY) - resolve() - } - }, 200) - }) - return [ - 4 /*yield*/, - Promise.all([ - provider.enable().then(function (accounts) { - return accounts[0] - }), - pollForOverlayReady, - ]), - ] - case 3: - ;(_b = __read.apply(void 0, [_c.sent(), 1])), (account = _b[0]) - return [2 /*return*/, { provider: this.fortmatic.getProvider(), chainId: this.chainId, account }] - } - }) - }) - } - return FortmaticConnector -})(fortmaticConnector.FortmaticConnector) - -var RequestError = /** @class */ (function (_super) { - __extends(RequestError, _super) - function RequestError(message, code, data) { - var _this = _super.call(this, message) || this - _this.code = code - _this.data = data - return _this - } - return RequestError -})(Error) -var MiniRpcProvider = /** @class */ (function () { - function MiniRpcProvider(connector, chainId, url, batchWaitTimeMs) { - var _this = this - this.isMetaMask = false - this.nextId = 1 - this.batchTimeoutId = null - this.batch = [] - this.clearBatch = function () { - return __awaiter(_this, void 0, void 0, function () { - var batch, response, json, byKey, json_1, json_1_1, result, _a, resolve, reject, method - var e_1, _b - var _this = this - var _c, _d, _e - return __generator(this, function (_f) { - switch (_f.label) { - case 0: - console.debug('Clearing batch', this.batch) - batch = this.batch - batch = batch.filter(function (b) { - if (b.request.method === 'wallet_switchEthereumChain') { - try { - _this.connector.changeChainId(parseInt(b.request.params[0].chainId)) - b.resolve({ id: b.request.id }) - } catch (error) { - b.reject(error) - } - return false - } - return true - }) - this.batch = [] - this.batchTimeoutId = null - _f.label = 1 - case 1: - _f.trys.push([1, 3, , 4]) - return [ - 4 /*yield*/, - fetch(this.url, { - method: 'POST', - headers: { 'content-type': 'application/json', accept: 'application/json' }, - body: JSON.stringify( - batch.map(function (item) { - return item.request - }) - ), - }), - ] - case 2: - response = _f.sent() - return [3 /*break*/, 4] - case 3: - _f.sent() - batch.forEach(function (_a) { - var reject = _a.reject - return reject(new Error('Failed to send batch call')) - }) - return [2 /*return*/] - case 4: - if (!response.ok) { - batch.forEach(function (_a) { - var reject = _a.reject - return reject(new RequestError(response.status + ': ' + response.statusText, -32000)) - }) - return [2 /*return*/] - } - _f.label = 5 - case 5: - _f.trys.push([5, 7, , 8]) - return [4 /*yield*/, response.json()] - case 6: - json = _f.sent() - return [3 /*break*/, 8] - case 7: - _f.sent() - batch.forEach(function (_a) { - var reject = _a.reject - return reject(new Error('Failed to parse JSON response')) - }) - return [2 /*return*/] - case 8: - byKey = batch.reduce(function (memo, current) { - memo[current.request.id] = current - return memo - }, {}) - try { - for (json_1 = __values(json), json_1_1 = json_1.next(); !json_1_1.done; json_1_1 = json_1.next()) { - result = json_1_1.value - ;(_a = byKey[result.id]), (resolve = _a.resolve), (reject = _a.reject), (method = _a.request.method) - if ('error' in result) { - reject( - new RequestError( - (_c = result === null || result === void 0 ? void 0 : result.error) === null || _c === void 0 - ? void 0 - : _c.message, - (_d = result === null || result === void 0 ? void 0 : result.error) === null || _d === void 0 - ? void 0 - : _d.code, - (_e = result === null || result === void 0 ? void 0 : result.error) === null || _e === void 0 - ? void 0 - : _e.data - ) - ) - } else if ('result' in result && resolve) { - resolve(result.result) - } else { - reject( - new RequestError( - 'Received unexpected JSON-RPC response to ' + method + ' request.', - -32000, - result - ) - ) - } - } - } catch (e_1_1) { - e_1 = { error: e_1_1 } - } finally { - try { - if (json_1_1 && !json_1_1.done && (_b = json_1.return)) _b.call(json_1) - } finally { - if (e_1) throw e_1.error - } - } - return [2 /*return*/] - } - }) - }) - } - this.sendAsync = function (request, callback) { - _this - .request(request.method, request.params) - .then(function (result) { - return callback(null, { jsonrpc: '2.0', id: request.id, result }) - }) - .catch(function (error) { - return callback(error, null) - }) - } - this.request = function (method, params) { - return __awaiter(_this, void 0, void 0, function () { - var promise - var _this = this - var _a - return __generator(this, function (_b) { - if (typeof method !== 'string') { - return [2 /*return*/, this.request(method.method, method.params)] - } - if (method === 'eth_chainId') { - return [2 /*return*/, '0x' + this.chainId.toString(16)] - } - promise = new Promise(function (resolve, reject) { - _this.batch.push({ - request: { - jsonrpc: '2.0', - id: _this.nextId++, - method, - params, - }, - resolve, - reject, - }) - }) - this.batchTimeoutId = - (_a = this.batchTimeoutId) !== null && _a !== void 0 - ? _a - : setTimeout(this.clearBatch, this.batchWaitTimeMs) - return [2 /*return*/, promise] - }) - }) - } - this.connector = connector - this.chainId = chainId - this.url = url - var parsed = new URL(url) - this.host = parsed.host - this.path = parsed.pathname - // how long to wait to batch calls - this.batchWaitTimeMs = batchWaitTimeMs !== null && batchWaitTimeMs !== void 0 ? batchWaitTimeMs : 50 - } - return MiniRpcProvider -})() -var NetworkConnector = /** @class */ (function (_super) { - __extends(NetworkConnector, _super) - function NetworkConnector(_a) { - var urls = _a.urls, - defaultChainId = _a.defaultChainId - var _this = this - invariant__default['default']( - defaultChainId || Object.keys(urls).length === 1, - 'defaultChainId is a required argument with >1 url' - ) - _this = - _super.call(this, { - supportedChainIds: Object.keys(urls).map(function (k) { - return Number(k) - }), - }) || this - _this.currentChainId = - defaultChainId !== null && defaultChainId !== void 0 ? defaultChainId : Number(Object.keys(urls)[0]) - _this.providers = Object.keys(urls).reduce(function (accumulator, chainId) { - accumulator[Number(chainId)] = new MiniRpcProvider(_this, Number(chainId), urls[Number(chainId)]) - return accumulator - }, {}) - return _this - } - Object.defineProperty(NetworkConnector.prototype, 'provider', { - get() { - return this.providers[this.currentChainId] - }, - enumerable: false, - configurable: true, - }) - NetworkConnector.prototype.activate = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [ - 2 /*return*/, - { provider: this.providers[this.currentChainId], chainId: this.currentChainId, account: null }, - ] - }) - }) - } - NetworkConnector.prototype.getProvider = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, this.providers[this.currentChainId]] - }) - }) - } - NetworkConnector.prototype.getChainId = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, this.currentChainId] - }) - }) - } - NetworkConnector.prototype.getAccount = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, null] - }) - }) - } - NetworkConnector.prototype.deactivate = function () { - return - } - /** - * Meant to be called only by MiniRpcProvider - * @param chainId the new chain id - */ - NetworkConnector.prototype.changeChainId = function (chainId) { - if (chainId in this.providers) { - this.currentChainId = chainId - this.emitUpdate({ - chainId, - account: null, - provider: this.providers[chainId], - }) - } else { - throw new Error('Unsupported chain ID: ' + chainId) - } - } - return NetworkConnector -})(abstractConnector.AbstractConnector) - -var FORMATIC_KEY = process.env.REACT_APP_FORTMATIC_KEY -var PORTIS_ID = process.env.REACT_APP_PORTIS_ID -var network = new NetworkConnector({ - urls: INFURA_NETWORK_URLS, - defaultChainId: 1, -}) -var networkLibrary -function getNetworkLibrary() { - return (networkLibrary = - networkLibrary !== null && networkLibrary !== void 0 ? networkLibrary : getLibrary(network.provider)) -} -new injectedConnector.InjectedConnector({ - supportedChainIds: ALL_SUPPORTED_CHAIN_IDS, -}) -new safeAppsWeb3React.SafeAppConnector() -new walletconnectConnector.WalletConnectConnector({ - supportedChainIds: ALL_SUPPORTED_CHAIN_IDS, - rpc: INFURA_NETWORK_URLS, - qrcode: true, -}) -// mainnet only -new FortmaticConnector({ - apiKey: FORMATIC_KEY !== null && FORMATIC_KEY !== void 0 ? FORMATIC_KEY : '', - chainId: 1, -}) -// mainnet only -new portisConnector.PortisConnector({ - dAppId: PORTIS_ID !== null && PORTIS_ID !== void 0 ? PORTIS_ID : '', - networks: [1], -}) -new walletlinkConnector.WalletLinkConnector({ - url: INFURA_NETWORK_URLS[SupportedChainId.MAINNET], - appName: 'Uniswap', - appLogoUrl: UNISWAP_LOGO_URL, - supportedChainIds: [SupportedChainId.MAINNET, SupportedChainId.POLYGON], -}) - -var fetchTokenList = { - pending: toolkit.createAction('lists/fetchTokenList/pending'), - fulfilled: toolkit.createAction('lists/fetchTokenList/fulfilled'), - rejected: toolkit.createAction('lists/fetchTokenList/rejected'), -} -// add and remove from list options -var addList = toolkit.createAction('lists/addList') -var removeList = toolkit.createAction('lists/removeList') -// select which lists to search across from loaded lists -var enableList = toolkit.createAction('lists/enableList') -var disableList = toolkit.createAction('lists/disableList') -// versioning -var acceptListUpdate = toolkit.createAction('lists/acceptListUpdate') - -function useFetchListCallback() { - var _this = this - var _a = useActiveWeb3React(), - chainId = _a.chainId, - library = _a.library - var dispatch = useAppDispatch() - var ensResolver = React.useCallback( - function (ensName) { - return __awaiter(_this, void 0, void 0, function () { - var networkLibrary, network - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - if (!(!library || chainId !== 1)) return [3 /*break*/, 2] - networkLibrary = getNetworkLibrary() - return [4 /*yield*/, networkLibrary.getNetwork()] - case 1: - network = _a.sent() - if (networkLibrary && network.chainId === 1) { - return [2 /*return*/, resolveENSContentHash(ensName, networkLibrary)] - } - throw new Error('Could not construct mainnet ENS resolver') - case 2: - return [2 /*return*/, resolveENSContentHash(ensName, library)] - } - }) - }) - }, - [chainId, library] - ) - // note: prevent dispatch if using for list search or unsupported list - return React.useCallback( - function (listUrl, sendDispatch) { - if (sendDispatch === void 0) { - sendDispatch = true - } - return __awaiter(_this, void 0, void 0, function () { - var requestId - return __generator(this, function (_a) { - requestId = toolkit.nanoid() - sendDispatch && dispatch(fetchTokenList.pending({ requestId, url: listUrl })) - return [ - 2 /*return*/, - fetchTokenList$1(listUrl, ensResolver) - .then(function (tokenList) { - sendDispatch && dispatch(fetchTokenList.fulfilled({ url: listUrl, tokenList, requestId })) - return tokenList - }) - .catch(function (error) { - console.debug('Failed to get list at url ' + listUrl, error) - sendDispatch && - dispatch(fetchTokenList.rejected({ url: listUrl, requestId, errorMessage: error.message })) - throw error - }), - ] - }) - }) - }, - [dispatch, ensResolver] - ) -} +var Wrapper$1 = styled__default["default"].div(templateObject_1$b || (templateObject_1$b = __makeTemplateObject(["\n height: 90px;\n width: 90px;\n"], ["\n height: 90px;\n width: 90px;\n"]))); +var dash = styled.keyframes(templateObject_2$5 || (templateObject_2$5 = __makeTemplateObject(["\n 0% {\n stroke-dashoffset: 1000;\n }\n 100% {\n stroke-dashoffset: 0;\n }\n"], ["\n 0% {\n stroke-dashoffset: 1000;\n }\n 100% {\n stroke-dashoffset: 0;\n }\n"]))); +var dashCheck = styled.keyframes(templateObject_3$4 || (templateObject_3$4 = __makeTemplateObject(["\n 0% {\n stroke-dashoffset: -100;\n }\n 100% {\n stroke-dashoffset: 900;\n }\n"], ["\n 0% {\n stroke-dashoffset: -100;\n }\n 100% {\n stroke-dashoffset: 900;\n }\n"]))); +var Circle = styled__default["default"].circle(templateObject_4$4 || (templateObject_4$4 = __makeTemplateObject(["\n stroke-dasharray: 1000;\n stroke-dashoffset: 0;\n -webkit-animation: ", " 0.9s ease-in-out;\n animation: ", " 0.9s ease-in-out;\n"], ["\n stroke-dasharray: 1000;\n stroke-dashoffset: 0;\n -webkit-animation: ", " 0.9s ease-in-out;\n animation: ", " 0.9s ease-in-out;\n"])), dash, dash); +var PolyLine = styled__default["default"].polyline(templateObject_5$4 || (templateObject_5$4 = __makeTemplateObject(["\n stroke-dasharray: 1000;\n stroke-dashoffset: 0;\n stroke-dashoffset: -100;\n -webkit-animation: ", " 0.9s 0.35s ease-in-out forwards;\n animation: ", " 0.9s 0.35s ease-in-out forwards;\n"], ["\n stroke-dasharray: 1000;\n stroke-dashoffset: 0;\n stroke-dashoffset: -100;\n -webkit-animation: ", " 0.9s 0.35s ease-in-out forwards;\n animation: ", " 0.9s 0.35s ease-in-out forwards;\n"])), dashCheck, dashCheck); +function AnimatedConfirmation() { + var theme = useTheme(); + return (jsxRuntime.jsx(Wrapper$1, __assign({ className: "w4rAnimated_checkmark" }, { children: jsxRuntime.jsxs("svg", __assign({ version: "1.1", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 130.2 130.2" }, { children: [jsxRuntime.jsx(Circle, { className: "path circle", fill: "none", stroke: theme.green1, strokeWidth: "6", strokeMiterlimit: "10", cx: "65.1", cy: "65.1", r: "62.1" }, void 0), jsxRuntime.jsx(PolyLine, { className: "path check", fill: "none", stroke: theme.green1, strokeWidth: "6", strokeLinecap: "round", strokeMiterlimit: "10", points: "100.2,40.2 51.5,88.8 29.8,67.5 " }, void 0)] }), void 0) }), void 0)); +} +var templateObject_1$b, templateObject_2$5, templateObject_3$4, templateObject_4$4, templateObject_5$4; -var Wrapper$8 = styled__default['default'].div( - templateObject_1$o || - (templateObject_1$o = __makeTemplateObject( - ['\n position: relative;\n width: 100%;\n overflow: auto;\n'], - ['\n position: relative;\n width: 100%;\n overflow: auto;\n'] - )) -) -function ImportList(_a) { - var _b - var listURL = _a.listURL, - list = _a.list, - setModalView = _a.setModalView, - onDismiss = _a.onDismiss - var theme = useTheme() - var dispatch = useAppDispatch() - // user must accept - var _c = __read(React.useState(false), 2), - confirmed = _c[0], - setConfirmed = _c[1] - var lists = useAllLists() - var fetchList = useFetchListCallback() - // monitor is list is loading - var adding = Boolean((_b = lists[listURL]) === null || _b === void 0 ? void 0 : _b.loadingRequestId) - var _d = __read(React.useState(null), 2), - addError = _d[0], - setAddError = _d[1] - var handleAddList = React.useCallback( - function () { - if (adding) return - setAddError(null) - fetchList(listURL) - .then(function () { - ReactGA__default['default'].event({ - category: 'Lists', - action: 'Add List', - label: listURL, - }) - // turn list on - dispatch(enableList(listURL)) - // go back to lists - setModalView(CurrencyModalView.manage) - }) - .catch(function (error) { - ReactGA__default['default'].event({ - category: 'Lists', - action: 'Add List Failed', - label: listURL, - }) - setAddError(error.message) - dispatch(removeList(listURL)) - }) - }, - [adding, dispatch, fetchList, listURL, setModalView] - ) - return jsxRuntime.jsxs( - Wrapper$8, - { - children: [ - jsxRuntime.jsx( - PaddedColumn, - __assign( - { gap: '14px', style: { width: '100%', flex: '1 1' } }, - { - children: jsxRuntime.jsxs( - RowBetween, - { - children: [ - jsxRuntime.jsx( - reactFeather.ArrowLeft, - { - style: { cursor: 'pointer' }, - onClick() { - return setModalView(CurrencyModalView.manage) - }, - }, - void 0 - ), - jsxRuntime.jsx( - ThemedText.MediumHeader, - { children: jsxRuntime.jsx(macro.Trans, { children: 'Import List' }, void 0) }, - void 0 - ), - jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0), - ], - }, - void 0 - ), - } - ), - void 0 - ), - jsxRuntime.jsx(SectionBreak, {}, void 0), - jsxRuntime.jsx( - PaddedColumn, - __assign( - { gap: 'md' }, - { - children: jsxRuntime.jsxs( - AutoColumn, - __assign( - { gap: 'md' }, - { - children: [ - jsxRuntime.jsx( - Card, - __assign( - { backgroundColor: theme.bg2, padding: '12px 20px' }, - { - children: jsxRuntime.jsx( - RowBetween, - { - children: jsxRuntime.jsxs( - RowFixed, - { - children: [ - list.logoURI && - jsxRuntime.jsx(ListLogo, { logoURI: list.logoURI, size: '40px' }, void 0), - jsxRuntime.jsxs( - AutoColumn, - __assign( - { gap: 'sm', style: { marginLeft: '20px' } }, - { - children: [ - jsxRuntime.jsxs( - RowFixed, - { - children: [ - jsxRuntime.jsx( - ThemedText.Body, - __assign({ fontWeight: 600, mr: '6px' }, { children: list.name }), - void 0 - ), - jsxRuntime.jsx(TextDot, {}, void 0), - jsxRuntime.jsx( - ThemedText.Main, - __assign( - { fontSize: '16px', ml: '6px' }, - { - children: jsxRuntime.jsxs( - macro.Trans, - { children: [list.tokens.length, ' tokens'] }, - void 0 - ), - } - ), - void 0 - ), - ], - }, - void 0 - ), - jsxRuntime.jsx( - ExternalLink, - __assign( - { href: 'https://tokenlists.org/token-list?url=' + listURL }, - { - children: jsxRuntime.jsx( - ThemedText.Main, - __assign( - { fontSize: '12px', color: theme.blue1 }, - { children: listURL } - ), - void 0 - ), - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - ], - }, - void 0 - ), - }, - void 0 - ), - } - ), - void 0 - ), - jsxRuntime.jsxs( - Card, - __assign( - { style: { backgroundColor: polished.transparentize(0.8, theme.red1) } }, - { - children: [ - jsxRuntime.jsxs( - AutoColumn, - __assign( - { - justify: 'center', - style: { textAlign: 'center', gap: '16px', marginBottom: '12px' }, - }, - { - children: [ - jsxRuntime.jsx( - reactFeather.AlertTriangle, - { stroke: theme.red1, size: 32 }, - void 0 - ), - jsxRuntime.jsx( - ThemedText.Body, - __assign( - { fontWeight: 500, fontSize: 20, color: theme.red1 }, - { - children: jsxRuntime.jsx( - macro.Trans, - { children: 'Import at your own risk' }, - void 0 - ), - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - jsxRuntime.jsxs( - AutoColumn, - __assign( - { style: { textAlign: 'center', gap: '16px', marginBottom: '12px' } }, - { - children: [ - jsxRuntime.jsx( - ThemedText.Body, - __assign( - { fontWeight: 500, color: theme.red1 }, - { - children: jsxRuntime.jsx( - macro.Trans, - { - children: - 'By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.', - }, - void 0 - ), - } - ), - void 0 - ), - jsxRuntime.jsx( - ThemedText.Body, - __assign( - { fontWeight: 600, color: theme.red1 }, - { - children: jsxRuntime.jsx( - macro.Trans, - { - children: - 'If you purchase a token from this list, you may not be able to sell it back.', - }, - void 0 - ), - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - jsxRuntime.jsxs( - AutoRow, - __assign( - { - justify: 'center', - style: { cursor: 'pointer' }, - onClick() { - return setConfirmed(!confirmed) - }, - }, - { - children: [ - jsxRuntime.jsx( - Checkbox, - { - name: 'confirmed', - type: 'checkbox', - checked: confirmed, - onChange() { - return setConfirmed(!confirmed) - }, - }, - void 0 - ), - jsxRuntime.jsx( - ThemedText.Body, - __assign( - { ml: '10px', fontSize: '16px', color: theme.red1, fontWeight: 500 }, - { - children: jsxRuntime.jsx(macro.Trans, { children: 'I understand' }, void 0), - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - jsxRuntime.jsx( - ButtonPrimary, - __assign( - { - disabled: !confirmed, - altDisabledStyle: true, - $borderRadius: '20px', - padding: '10px 1rem', - onClick: handleAddList, - }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'Import' }, void 0) } - ), - void 0 - ), - addError - ? jsxRuntime.jsx( - ThemedText.Error, - __assign( - { title: addError, style: { textOverflow: 'ellipsis', overflow: 'hidden' }, error: true }, - { children: addError } - ), - void 0 - ) - : null, - ], - } - ), - void 0 - ), - } - ), - void 0 - ), - ], - }, - void 0 - ) -} -var templateObject_1$o - -var WarningWrapper = styled__default['default'](Card)( - templateObject_1$n || - (templateObject_1$n = __makeTemplateObject( - ['\n background-color: ', ';\n width: fit-content;\n'], - ['\n background-color: ', ';\n width: fit-content;\n'] - )), - function (_a) { - var theme = _a.theme, - highWarning = _a.highWarning - return highWarning ? polished.transparentize(0.8, theme.red1) : polished.transparentize(0.8, theme.yellow2) - } -) -var AddressText = styled__default['default'](ThemedText.Blue)( - templateObject_3$a || - (templateObject_3$a = __makeTemplateObject( - ['\n font-size: 12px;\n word-break: break-all;\n\n ', '\n'], - ['\n font-size: 12px;\n word-break: break-all;\n\n ', '\n'] - )), - function (_a) { - var theme = _a.theme - return theme.mediaWidth.upToSmall( - templateObject_2$d || - (templateObject_2$d = __makeTemplateObject(['\n font-size: 10px;\n '], ['\n font-size: 10px;\n '])) - ) - } -) -var TokenImportCard = function (_a) { - var list = _a.list, - token = _a.token - var theme = styled.useTheme() - var chainId = useActiveWeb3React().chainId - return jsxRuntime.jsx( - Card, - __assign( - { backgroundColor: theme.bg2, padding: '2rem' }, - { - children: jsxRuntime.jsxs( - AutoColumn, - __assign( - { gap: '10px', justify: 'center' }, - { - children: [ - jsxRuntime.jsx(CurrencyLogo, { currency: token, size: '32px' }, void 0), - jsxRuntime.jsxs( - AutoColumn, - __assign( - { gap: '4px', justify: 'center' }, - { - children: [ - jsxRuntime.jsx( - ThemedText.Body, - __assign({ ml: '8px', mr: '8px', fontWeight: 500, fontSize: 20 }, { children: token.symbol }), - void 0 - ), - jsxRuntime.jsx( - ThemedText.DarkGray, - __assign({ fontWeight: 400, fontSize: 14 }, { children: token.name }), - void 0 - ), - ], - } - ), - void 0 - ), - chainId && - jsxRuntime.jsx( - ExternalLink, - __assign( - { href: getExplorerLink(chainId, token.address, ExplorerDataType.ADDRESS) }, - { - children: jsxRuntime.jsx( - AddressText, - __assign({ fontSize: 12 }, { children: token.address }), - void 0 - ), - } - ), - void 0 - ), - list !== undefined - ? jsxRuntime.jsxs( - RowFixed, - { - children: [ - list.logoURI && jsxRuntime.jsx(ListLogo, { logoURI: list.logoURI, size: '16px' }, void 0), - jsxRuntime.jsx( - ThemedText.Small, - __assign( - { ml: '6px', fontSize: 14, color: theme.text3 }, - { - children: jsxRuntime.jsxs( - macro.Trans, - { children: ['via ', list.name, ' token list'] }, - void 0 - ), - } - ), - void 0 - ), - ], - }, - void 0 - ) - : jsxRuntime.jsx( - WarningWrapper, - __assign( - { $borderRadius: '4px', padding: '4px', highWarning: true }, - { - children: jsxRuntime.jsxs( - RowFixed, - { - children: [ - jsxRuntime.jsx(reactFeather.AlertCircle, { stroke: theme.red1, size: '10px' }, void 0), - jsxRuntime.jsx( - ThemedText.Body, - __assign( - { color: theme.red1, ml: '4px', fontSize: '10px', fontWeight: 500 }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'Unknown Source' }, void 0) } - ), - void 0 - ), - ], - }, - void 0 - ), - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - } - ), - void 0 - ) -} -var templateObject_1$n, templateObject_2$d, templateObject_3$a - -var Wrapper$7 = styled__default['default'].div( - templateObject_1$m || - (templateObject_1$m = __makeTemplateObject( - [ - '\n align-items: center;\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n height: 100%;\n width: 100%;\n', - ], - [ - '\n align-items: center;\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n height: 100%;\n width: 100%;\n', - ] - )) -) -var Button = styled__default['default'](ButtonPrimary)( - templateObject_2$c || - (templateObject_2$c = __makeTemplateObject( - ['\n margin-top: 1em;\n padding: 10px 1em;\n'], - ['\n margin-top: 1em;\n padding: 10px 1em;\n'] - )) -) -var Content = styled__default['default'].div( - templateObject_3$9 || (templateObject_3$9 = __makeTemplateObject(['\n padding: 1em;\n'], ['\n padding: 1em;\n'])) -) -var Copy = styled__default['default'](ThemedText.Body)( - templateObject_4$6 || - (templateObject_4$6 = __makeTemplateObject( - ['\n text-align: center;\n margin: 0 2em 1em !important;\n font-weight: 400;\n font-size: 16px;\n'], - ['\n text-align: center;\n margin: 0 2em 1em !important;\n font-weight: 400;\n font-size: 16px;\n'] - )) -) -var Header = styled__default['default'].div( - templateObject_5$6 || - (templateObject_5$6 = __makeTemplateObject( - [ - '\n align-items: center;\n display: flex;\n gap: 14px;\n justify-content: space-between;\n padding: 20px;\n width: 100%;\n', - ], - [ - '\n align-items: center;\n display: flex;\n gap: 14px;\n justify-content: space-between;\n padding: 20px;\n width: 100%;\n', - ] - )) -) -var Icon = styled__default['default'](reactFeather.AlertCircle)( - templateObject_6$4 || - (templateObject_6$4 = __makeTemplateObject( - ['\n stroke: ', ';\n width: 48px;\n height: 48px;\n'], - ['\n stroke: ', ';\n width: 48px;\n height: 48px;\n'] - )), - function (_a) { - var theme = _a.theme - return theme.text2 - } -) -var BlockedToken = function (_a) { - var onBack = _a.onBack, - onDismiss = _a.onDismiss, - blockedTokens = _a.blockedTokens - return jsxRuntime.jsxs( - Wrapper$7, - { - children: [ - jsxRuntime.jsxs( - Header, - { - children: [ - onBack - ? jsxRuntime.jsx(reactFeather.ArrowLeft, { style: { cursor: 'pointer' }, onClick: onBack }, void 0) - : jsxRuntime.jsx('div', {}, void 0), - jsxRuntime.jsx( - ThemedText.MediumHeader, - { children: jsxRuntime.jsx(macro.Trans, { children: 'Token not supported' }, void 0) }, - void 0 - ), - onDismiss ? jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0) : jsxRuntime.jsx('div', {}, void 0), - ], - }, - void 0 - ), - jsxRuntime.jsx(Icon, {}, void 0), - jsxRuntime.jsxs( - Content, - { - children: [ - jsxRuntime.jsx( - Copy, - { - children: jsxRuntime.jsx( - macro.Trans, - { children: 'This token is not supported in the Uniswap Labs app' }, - void 0 - ), - }, - void 0 - ), - jsxRuntime.jsx(TokenImportCard, { token: blockedTokens[0] }, void 0), - jsxRuntime.jsx( - Button, - __assign({ disabled: true }, { children: jsxRuntime.jsx(macro.Trans, { children: 'Import' }, void 0) }), - void 0 - ), - ], - }, - void 0 - ), - ], - }, - void 0 - ) -} -var templateObject_1$m, - templateObject_2$c, - templateObject_3$9, - templateObject_4$6, - templateObject_5$6, - templateObject_6$4 - -var Wrapper$6 = styled__default['default'].div( - templateObject_1$l || - (templateObject_1$l = __makeTemplateObject( - ['\n position: relative;\n width: 100%;\n overflow: auto;\n'], - ['\n position: relative;\n width: 100%;\n overflow: auto;\n'] - )) -) -function ImportToken(props) { - var tokens = props.tokens, - list = props.list, - onBack = props.onBack, - onDismiss = props.onDismiss, - handleCurrencySelect = props.handleCurrencySelect - var theme = useTheme() - var addToken = useAddUserToken() - var unsupportedTokens = useUnsupportedTokens() - var unsupportedSet = new Set(Object.keys(unsupportedTokens)) - var intersection = new Set( - tokens.filter(function (token) { - return unsupportedSet.has(token.address) - }) - ) - if (intersection.size > 0) { - return jsxRuntime.jsx(BlockedToken, { onBack, onDismiss, blockedTokens: Array.from(intersection) }, void 0) - } - return jsxRuntime.jsxs( - Wrapper$6, - { - children: [ - jsxRuntime.jsx( - PaddedColumn, - __assign( - { gap: '14px', style: { width: '100%', flex: '1 1' } }, - { - children: jsxRuntime.jsxs( - RowBetween, - { - children: [ - onBack - ? jsxRuntime.jsx( - reactFeather.ArrowLeft, - { style: { cursor: 'pointer' }, onClick: onBack }, - void 0 - ) - : jsxRuntime.jsx('div', {}, void 0), - jsxRuntime.jsx( - ThemedText.MediumHeader, - { - children: jsxRuntime.jsx( - macro.Plural, - { value: tokens.length, one: 'Import token', other: 'Import tokens' }, - void 0 - ), - }, - void 0 - ), - onDismiss - ? jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0) - : jsxRuntime.jsx('div', {}, void 0), - ], - }, - void 0 - ), - } - ), - void 0 - ), - jsxRuntime.jsx(SectionBreak, {}, void 0), - jsxRuntime.jsxs( - AutoColumn, - __assign( - { gap: 'md', style: { marginBottom: '32px', padding: '1rem' } }, - { - children: [ - jsxRuntime.jsxs( - AutoColumn, - __assign( - { justify: 'center', style: { textAlign: 'center', gap: '16px', padding: '1rem' } }, - { - children: [ - jsxRuntime.jsx( - reactFeather.AlertCircle, - { size: 48, stroke: theme.text2, strokeWidth: 1 }, - void 0 - ), - jsxRuntime.jsx( - ThemedText.Body, - __assign( - { fontWeight: 400, fontSize: 16 }, - { - children: jsxRuntime.jsx( - macro.Trans, - { - children: - "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.", - }, - void 0 - ), - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - tokens.map(function (token) { - return jsxRuntime.jsx(TokenImportCard, { token, list }, 'import' + token.address) - }), - jsxRuntime.jsx( - ButtonPrimary, - __assign( - { - altDisabledStyle: true, - $borderRadius: '20px', - padding: '10px 1rem', - onClick() { - tokens.map(function (token) { - return addToken(token) - }) - handleCurrencySelect && handleCurrencySelect(tokens[0]) - }, - className: '.token-dismiss-button', - }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'Import' }, void 0) } - ), - void 0 - ), - ], - } - ), - void 0 - ), - ], - }, - void 0 - ) -} -var templateObject_1$l - -function getColorFromUriPath(uri) { - return __awaiter(this, void 0, void 0, function () { - var formattedPath, palette, detectedHex, AAscore - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - formattedPath = uriToHttp(uri)[0] - return [4 /*yield*/, Vibrant__default['default'].from(formattedPath).getPalette()] - case 1: - palette = _a.sent() - if (!(palette === null || palette === void 0 ? void 0 : palette.Vibrant)) { - return [2 /*return*/, null] - } - detectedHex = palette.Vibrant.hex - AAscore = wcagContrast.hex(detectedHex, '#FFF') - while (AAscore < 3) { - detectedHex = polished.shade(0.005, detectedHex) - AAscore = wcagContrast.hex(detectedHex, '#FFF') - } - return [2 /*return*/, detectedHex] - } - }) - }) -} -function useListColor(listImageUri) { - var _a = __read(React.useState('#2172E5'), 2), - color = _a[0], - setColor = _a[1] - React.useLayoutEffect( - function () { - var stale = false - if (listImageUri) { - getColorFromUriPath(listImageUri).then(function (color) { - if (!stale && color !== null) { - setColor(color) - } - }) - } - return function () { - stale = true - setColor('#2172E5') - } - }, - [listImageUri] - ) - return color -} +var Wrapper = styled__default["default"].div(templateObject_1$a || (templateObject_1$a = __makeTemplateObject(["\n width: 100%;\n padding: 1rem;\n"], ["\n width: 100%;\n padding: 1rem;\n"]))); +var Section = styled__default["default"](AutoColumn)(templateObject_2$4 || (templateObject_2$4 = __makeTemplateObject(["\n padding: ", ";\n"], ["\n padding: ", ";\n"])), function (_a) { + var inline = _a.inline; + return (inline ? '0' : '0'); +}); +var BottomSection = styled__default["default"](Section)(templateObject_3$3 || (templateObject_3$3 = __makeTemplateObject(["\n border-bottom-left-radius: 20px;\n border-bottom-right-radius: 20px;\n"], ["\n border-bottom-left-radius: 20px;\n border-bottom-right-radius: 20px;\n"]))); +var ConfirmedIcon = styled__default["default"](ColumnCenter)(templateObject_4$3 || (templateObject_4$3 = __makeTemplateObject(["\n padding: ", ";\n"], ["\n padding: ", ";\n"])), function (_a) { + var inline = _a.inline; + return (inline ? '20px 0' : '32px 0;'); +}); +var StyledLogo = styled__default["default"].img(templateObject_5$3 || (templateObject_5$3 = __makeTemplateObject(["\n height: 16px;\n width: 16px;\n margin-left: 6px;\n"], ["\n height: 16px;\n width: 16px;\n margin-left: 6px;\n"]))); +function ConfirmationPendingContent(_a) { + var onDismiss = _a.onDismiss, pendingText = _a.pendingText, inline = _a.inline; + return (jsxRuntime.jsx(Wrapper, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "md" }, { children: [!inline && (jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx("div", {}, void 0), jsxRuntime.jsx(CloseIcon$2, { onClick: onDismiss }, void 0)] }, void 0)), jsxRuntime.jsx(ConfirmedIcon, __assign({ inline: inline }, { children: jsxRuntime.jsx(CustomLightSpinner, { src: Circle$1, alt: "loader", size: inline ? '40px' : '90px' }, void 0) }), void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "12px", justify: 'center' }, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20, textAlign: "center" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Waiting For Confirmation" }, void 0) }), void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 400, fontSize: 16, textAlign: "center" }, { children: pendingText }), void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 14, color: "#565A69", textAlign: "center", marginBottom: "12px" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Confirm this transaction in your wallet" }, void 0) }), void 0)] }), void 0)] }), void 0) }, void 0)); +} +function TransactionSubmittedContent(_a) { + var _b; + var onDismiss = _a.onDismiss, chainId = _a.chainId, hash = _a.hash, currencyToAdd = _a.currencyToAdd, inline = _a.inline; + var theme = React.useContext(styled.ThemeContext); + var library = useActiveWeb3React().library; + var _c = useAddTokenToMetamask(currencyToAdd), addToken = _c.addToken, success = _c.success; + return (jsxRuntime.jsx(Wrapper, { children: jsxRuntime.jsxs(Section, __assign({ inline: inline }, { children: [!inline && (jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx("div", {}, void 0), jsxRuntime.jsx(CloseIcon$2, { onClick: onDismiss }, void 0)] }, void 0)), jsxRuntime.jsx(ConfirmedIcon, __assign({ inline: inline }, { children: jsxRuntime.jsx(reactFeather.ArrowUpCircle, { strokeWidth: 0.5, size: inline ? '40px' : '90px', color: theme.primary1 }, void 0) }), void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "12px", justify: 'center' }, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20, textAlign: "center" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Transaction Submitted" }, void 0) }), void 0), chainId && hash && (jsxRuntime.jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, hash, ExplorerDataType.TRANSACTION) }, { children: jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 14, color: theme.primary1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "View on Explorer" }, void 0) }), void 0) }), void 0)), currencyToAdd && ((_b = library === null || library === void 0 ? void 0 : library.provider) === null || _b === void 0 ? void 0 : _b.isMetaMask) && (jsxRuntime.jsx(ButtonLight, __assign({ mt: "12px", padding: "6px 12px", width: "fit-content", onClick: addToken }, { children: !success ? (jsxRuntime.jsx(RowFixed, { children: jsxRuntime.jsxs(macro.Trans, { children: ["Add ", currencyToAdd.symbol, " to Metamask ", jsxRuntime.jsx(StyledLogo, { src: MetaMaskLogo }, void 0)] }, void 0) }, void 0)) : (jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsxs(macro.Trans, { children: ["Added ", currencyToAdd.symbol, " "] }, void 0), jsxRuntime.jsx(reactFeather.CheckCircle, { size: '16px', stroke: theme.green1, style: { marginLeft: '6px' } }, void 0)] }, void 0)) }), void 0)), jsxRuntime.jsx(ButtonPrimary, __assign({ onClick: onDismiss, style: { margin: '20px 0 0 0' } }, { children: jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20 }, { children: inline ? jsxRuntime.jsx(macro.Trans, { children: "Return" }, void 0) : jsxRuntime.jsx(macro.Trans, { children: "Close" }, void 0) }), void 0) }), void 0)] }), void 0)] }), void 0) }, void 0)); +} +function ConfirmationModalContent(_a) { + var title = _a.title, bottomContent = _a.bottomContent, onDismiss = _a.onDismiss, topContent = _a.topContent; + return (jsxRuntime.jsxs(Wrapper, { children: [jsxRuntime.jsxs(Section, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 16 }, { children: title }), void 0), jsxRuntime.jsx(CloseIcon$2, { onClick: onDismiss }, void 0)] }, void 0), topContent()] }, void 0), bottomContent && jsxRuntime.jsx(BottomSection, __assign({ gap: "12px" }, { children: bottomContent() }), void 0)] }, void 0)); +} +function TransactionErrorContent(_a) { + var message = _a.message, onDismiss = _a.onDismiss; + var theme = React.useContext(styled.ThemeContext); + return (jsxRuntime.jsxs(Wrapper, { children: [jsxRuntime.jsxs(Section, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Error" }, void 0) }), void 0), jsxRuntime.jsx(CloseIcon$2, { onClick: onDismiss }, void 0)] }, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ style: { marginTop: 20, padding: '2rem 0' }, gap: "24px", justify: "center" }, { children: [jsxRuntime.jsx(reactFeather.AlertTriangle, { color: theme.red1, style: { strokeWidth: 1.5 }, size: 64 }, void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 16, color: theme.red1, style: { textAlign: 'center', width: '85%', wordBreak: 'break-word' } }, { children: message }), void 0)] }), void 0)] }, void 0), jsxRuntime.jsx(BottomSection, __assign({ gap: "12px" }, { children: jsxRuntime.jsx(ButtonPrimary, __assign({ onClick: onDismiss }, { children: jsxRuntime.jsx(macro.Trans, { children: "Dismiss" }, void 0) }), void 0) }), void 0)] }, void 0)); +} +function L2Content(_a) { + var _b; + var onDismiss = _a.onDismiss, chainId = _a.chainId, hash = _a.hash, pendingText = _a.pendingText, inline = _a.inline; + var theme = React.useContext(styled.ThemeContext); + var transaction = useTransaction(hash); + var confirmed = useIsTransactionConfirmed(hash); + var transactionSuccess = ((_b = transaction === null || transaction === void 0 ? void 0 : transaction.receipt) === null || _b === void 0 ? void 0 : _b.status) === 1; + // convert unix time difference to seconds + var secondsToConfirm = (transaction === null || transaction === void 0 ? void 0 : transaction.confirmedTime) + ? (transaction.confirmedTime - transaction.addedTime) / 1000 + : undefined; + var info = CHAIN_INFO[chainId]; + return (jsxRuntime.jsx(Wrapper, { children: jsxRuntime.jsxs(Section, __assign({ inline: inline }, { children: [!inline && (jsxRuntime.jsxs(RowBetween, __assign({ mb: "16px" }, { children: [jsxRuntime.jsx(Badge, { children: jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(StyledLogo, { src: info.logoUrl, style: { margin: '0 8px 0 0' } }, void 0), info.label] }, void 0) }, void 0), jsxRuntime.jsx(CloseIcon$2, { onClick: onDismiss }, void 0)] }), void 0)), jsxRuntime.jsx(ConfirmedIcon, __assign({ inline: inline }, { children: confirmed ? (transactionSuccess ? ( + // + jsxRuntime.jsx(AnimatedConfirmation, {}, void 0)) : (jsxRuntime.jsx(reactFeather.AlertCircle, { strokeWidth: 1, size: inline ? '40px' : '90px', color: theme.red1 }, void 0))) : (jsxRuntime.jsx(CustomLightSpinner, { src: Circle$1, alt: "loader", size: inline ? '40px' : '90px' }, void 0)) }), void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "12px", justify: 'center' }, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20, textAlign: "center" }, { children: !hash ? (jsxRuntime.jsx(macro.Trans, { children: "Confirm transaction in wallet" }, void 0)) : !confirmed ? (jsxRuntime.jsx(macro.Trans, { children: "Transaction Submitted" }, void 0)) : transactionSuccess ? (jsxRuntime.jsx(macro.Trans, { children: "Success" }, void 0)) : (jsxRuntime.jsx(macro.Trans, { children: "Error" }, void 0)) }), void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 400, fontSize: 16, textAlign: "center" }, { children: transaction ? jsxRuntime.jsx(TransactionSummary, { info: transaction.info }, void 0) : pendingText }), void 0), chainId && hash ? (jsxRuntime.jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, hash, ExplorerDataType.TRANSACTION) }, { children: jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 14, color: theme.primary1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "View on Explorer" }, void 0) }), void 0) }), void 0)) : (jsxRuntime.jsx("div", { style: { height: '17px' } }, void 0)), jsxRuntime.jsx(rebass.Text, __assign({ color: theme.text3, style: { margin: '20px 0 0 0' }, fontSize: '14px' }, { children: !secondsToConfirm ? (jsxRuntime.jsx("div", { style: { height: '24px' } }, void 0)) : (jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx(macro.Trans, { children: "Transaction completed in " }, void 0), jsxRuntime.jsxs("span", __assign({ style: { fontWeight: 500, marginLeft: '4px', color: theme.text1 } }, { children: [secondsToConfirm, " seconds \uD83C\uDF89"] }), void 0)] }, void 0)) }), void 0), jsxRuntime.jsx(ButtonPrimary, __assign({ onClick: onDismiss, style: { margin: '4px 0 0 0' } }, { children: jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20 }, { children: inline ? jsxRuntime.jsx(macro.Trans, { children: "Return" }, void 0) : jsxRuntime.jsx(macro.Trans, { children: "Close" }, void 0) }), void 0) }), void 0)] }), void 0)] }), void 0) }, void 0)); +} +function TransactionConfirmationModal(_a) { + var isOpen = _a.isOpen, onDismiss = _a.onDismiss, attemptingTxn = _a.attemptingTxn, hash = _a.hash, pendingText = _a.pendingText, content = _a.content, currencyToAdd = _a.currencyToAdd; + var chainId = useActiveWeb3React().chainId; + var isL2 = Boolean(chainId && L2_CHAIN_IDS.includes(chainId)); + if (!chainId) + return null; + // confirmation screen + return (jsxRuntime.jsx(Modal, __assign({ isOpen: isOpen, onDismiss: onDismiss, maxHeight: 90 }, { children: isL2 && (hash || attemptingTxn) ? (jsxRuntime.jsx(L2Content, { chainId: chainId, hash: hash, onDismiss: onDismiss, pendingText: pendingText }, void 0)) : attemptingTxn ? (jsxRuntime.jsx(ConfirmationPendingContent, { onDismiss: onDismiss, pendingText: pendingText }, void 0)) : hash ? (jsxRuntime.jsx(TransactionSubmittedContent, { chainId: chainId, hash: hash, onDismiss: onDismiss, currencyToAdd: currencyToAdd }, void 0)) : (content()) }), void 0)); +} +var templateObject_1$a, templateObject_2$4, templateObject_3$3, templateObject_4$3, templateObject_5$3; -function listVersionLabel(version) { - return 'v' + version.major + '.' + version.minor + '.' + version.patch +function SwapModalFooter(_a) { + var onConfirm = _a.onConfirm, swapErrorMessage = _a.swapErrorMessage, disabledConfirm = _a.disabledConfirm; + return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs(AutoRow, { children: [jsxRuntime.jsx(ButtonError, __assign({ onClick: onConfirm, disabled: disabledConfirm, style: { margin: '10px 0 0 0' }, id: "confirm-swap-or-send" }, { children: jsxRuntime.jsx(rebass.Text, __assign({ fontSize: 20, fontWeight: 500 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Confirm Swap" }, void 0) }), void 0) }), void 0), swapErrorMessage ? jsxRuntime.jsx(SwapCallbackError, { error: swapErrorMessage }, void 0) : null] }, void 0) }, void 0)); } -var Wrapper$5 = styled__default['default'].button( - templateObject_1$k || - (templateObject_1$k = __makeTemplateObject( - [ - '\n border-radius: 20px;\n border: none;\n background: ', - ';\n display: flex;\n width: fit-content;\n cursor: pointer;\n outline: none;\n padding: 0.4rem 0.4rem;\n align-items: center;\n', - ], - [ - '\n border-radius: 20px;\n border: none;\n background: ', - ';\n display: flex;\n width: fit-content;\n cursor: pointer;\n outline: none;\n padding: 0.4rem 0.4rem;\n align-items: center;\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.bg1 - } -) -var ToggleElement$1 = styled__default['default'].span( - templateObject_2$b || - (templateObject_2$b = __makeTemplateObject( - [ - '\n border-radius: 50%;\n height: 24px;\n width: 24px;\n background-color: ', - ';\n :hover {\n opacity: 0.8;\n }\n', - ], - [ - '\n border-radius: 50%;\n height: 24px;\n width: 24px;\n background-color: ', - ';\n :hover {\n opacity: 0.8;\n }\n', - ] - )), - function (_a) { - var isActive = _a.isActive, - bgColor = _a.bgColor, - theme = _a.theme - return isActive ? bgColor : theme.bg4 - } -) -var StatusText = styled__default['default'](ThemedText.Main)( - templateObject_3$8 || - (templateObject_3$8 = __makeTemplateObject( - ['\n margin: 0 10px;\n width: 24px;\n color: ', ';\n'], - ['\n margin: 0 10px;\n width: 24px;\n color: ', ';\n'] - )), - function (_a) { - var theme = _a.theme, - isActive = _a.isActive - return isActive ? theme.text1 : theme.text3 - } -) -function ListToggle(_a) { - var id = _a.id, - isActive = _a.isActive, - bgColor = _a.bgColor, - toggle = _a.toggle - return jsxRuntime.jsxs( - Wrapper$5, - __assign( - { id, isActive, onClick: toggle }, - { - children: [ - isActive && - jsxRuntime.jsx( - StatusText, - __assign( - { fontWeight: '600', margin: '0 6px', isActive: true }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'ON' }, void 0) } - ), - void 0 - ), - jsxRuntime.jsx(ToggleElement$1, { isActive, bgColor }, void 0), - !isActive && - jsxRuntime.jsx( - StatusText, - __assign( - { fontWeight: '600', margin: '0 6px', isActive: false }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'OFF' }, void 0) } - ), - void 0 - ), - ], - } - ), - void 0 - ) -} -var templateObject_1$k, templateObject_2$b, templateObject_3$8 - -var Wrapper$4 = styled__default['default'](Column)( - templateObject_1$j || - (templateObject_1$j = __makeTemplateObject( - ['\n flex: 1;\n overflow-y: hidden;\n'], - ['\n flex: 1;\n overflow-y: hidden;\n'] - )) -) -var UnpaddedLinkStyledButton = styled__default['default'](LinkStyledButton)( - templateObject_2$a || - (templateObject_2$a = __makeTemplateObject( - ['\n padding: 0;\n font-size: 1rem;\n opacity: ', ';\n'], - ['\n padding: 0;\n font-size: 1rem;\n opacity: ', ';\n'] - )), - function (_a) { - var disabled = _a.disabled - return disabled ? '0.4' : '1' - } -) -var PopoverContainer = styled__default['default'].div( - templateObject_3$7 || - (templateObject_3$7 = __makeTemplateObject( - [ - '\n z-index: 100;\n visibility: ', - ';\n opacity: ', - ';\n transition: visibility 150ms linear, opacity 150ms linear;\n background: ', - ';\n border: 1px solid ', - ';\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: ', - ';\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 z-index: 100;\n visibility: ', - ';\n opacity: ', - ';\n transition: visibility 150ms linear, opacity 150ms linear;\n background: ', - ';\n border: 1px solid ', - ';\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: ', - ';\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', - ] - )), - function (props) { - return props.show ? 'visible' : 'hidden' - }, - function (props) { - return props.show ? 1 : 0 - }, - function (_a) { - var theme = _a.theme - return theme.bg2 - }, - function (_a) { - var theme = _a.theme - return theme.bg3 - }, - function (_a) { - var theme = _a.theme - return theme.text2 - } -) -var StyledMenu$1 = styled__default['default'].div( - templateObject_4$5 || - (templateObject_4$5 = __makeTemplateObject( - [ - '\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n', - ], - [ - '\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n', - ] - )) -) -var StyledTitleText = styled__default['default'].div( - templateObject_5$5 || - (templateObject_5$5 = __makeTemplateObject( - ['\n font-size: 16px;\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 600;\n color: ', ';\n'], - ['\n font-size: 16px;\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 600;\n color: ', ';\n'] - )), - function (_a) { - var theme = _a.theme, - active = _a.active - return active ? theme.white : theme.text2 - } -) -var StyledListUrlText = styled__default['default'](ThemedText.Main)( - templateObject_6$3 || - (templateObject_6$3 = __makeTemplateObject( - ['\n font-size: 12px;\n color: ', ';\n'], - ['\n font-size: 12px;\n color: ', ';\n'] - )), - function (_a) { - var theme = _a.theme, - active = _a.active - return active ? theme.white : theme.text2 - } -) -var RowWrapper = styled__default['default'](Row)( - templateObject_7$3 || - (templateObject_7$3 = __makeTemplateObject( - [ - '\n background-color: ', - ';\n opacity: ', - ';\n transition: 200ms;\n align-items: center;\n padding: 1rem;\n border-radius: 20px;\n', - ], - [ - '\n background-color: ', - ';\n opacity: ', - ';\n transition: 200ms;\n align-items: center;\n padding: 1rem;\n border-radius: 20px;\n', - ] - )), - function (_a) { - var bgColor = _a.bgColor, - active = _a.active, - theme = _a.theme - return active ? (bgColor !== null && bgColor !== void 0 ? bgColor : 'transparent') : theme.bg2 - }, - function (_a) { - var hasActiveTokens = _a.hasActiveTokens - return hasActiveTokens ? 1 : 0.4 - } -) -function listUrlRowHTMLId(listUrl) { - return 'list-row-' + listUrl.replace(/\./g, '-') -} -var ListRow = React.memo(function ListRow(_a) { - var listUrl = _a.listUrl - var chainId = useActiveWeb3React().chainId - var listsByUrl = useAppSelector(function (state) { - return state.lists.byUrl - }) - var dispatch = useAppDispatch() - var _b = listsByUrl[listUrl], - list = _b.current, - pending = _b.pendingUpdate - var activeTokensOnThisChain = React.useMemo( - function () { - if (!list || !chainId) { - return 0 - } - return list.tokens.reduce(function (acc, cur) { - return cur.chainId === chainId ? acc + 1 : acc - }, 0) - }, - [chainId, list] - ) - var theme = useTheme() - var listColor = useListColor(list === null || list === void 0 ? void 0 : list.logoURI) - var isActive = useIsListActive(listUrl) - var _c = __read(useToggle(false), 2), - open = _c[0], - toggle = _c[1] - var node = React.useRef() - var _d = __read(React.useState(), 2), - referenceElement = _d[0], - setReferenceElement = _d[1] - var _e = __read(React.useState(), 2), - popperElement = _e[0], - setPopperElement = _e[1] - var _f = reactPopper.usePopper(referenceElement, popperElement, { - placement: 'auto', - strategy: 'fixed', - modifiers: [{ name: 'offset', options: { offset: [8, 8] } }], - }), - styles = _f.styles, - attributes = _f.attributes - useOnClickOutside(node, open ? toggle : undefined) - var handleAcceptListUpdate = React.useCallback( - function () { - if (!pending) return - ReactGA__default['default'].event({ - category: 'Lists', - action: 'Update List from List Select', - label: listUrl, - }) - dispatch(acceptListUpdate(listUrl)) - }, - [dispatch, listUrl, pending] - ) - var handleRemoveList = React.useCallback( - function () { - ReactGA__default['default'].event({ - category: 'Lists', - action: 'Start Remove List', - label: listUrl, - }) - if ( - window.prompt( - macro.t( - templateObject_8$2 || - (templateObject_8$2 = __makeTemplateObject( - ['Please confirm you would like to remove this list by typing REMOVE'], - ['Please confirm you would like to remove this list by typing REMOVE'] - )) - ) - ) === 'REMOVE' - ) { - ReactGA__default['default'].event({ - category: 'Lists', - action: 'Confirm Remove List', - label: listUrl, - }) - dispatch(removeList(listUrl)) - } - }, - [dispatch, listUrl] - ) - var handleEnableList = React.useCallback( - function () { - ReactGA__default['default'].event({ - category: 'Lists', - action: 'Enable List', - label: listUrl, - }) - dispatch(enableList(listUrl)) - }, - [dispatch, listUrl] - ) - var handleDisableList = React.useCallback( - function () { - ReactGA__default['default'].event({ - category: 'Lists', - action: 'Disable List', - label: listUrl, - }) - dispatch(disableList(listUrl)) - }, - [dispatch, listUrl] - ) - if (!list) return null - return jsxRuntime.jsxs( - RowWrapper, - __assign( - { - active: isActive, - hasActiveTokens: activeTokensOnThisChain > 0, - bgColor: listColor, - id: listUrlRowHTMLId(listUrl), - }, - { - children: [ - list.logoURI - ? jsxRuntime.jsx( - ListLogo, - { size: '40px', style: { marginRight: '1rem' }, logoURI: list.logoURI, alt: list.name + ' list logo' }, - void 0 - ) - : jsxRuntime.jsx('div', { style: { width: '24px', height: '24px', marginRight: '1rem' } }, void 0), - jsxRuntime.jsxs( - Column, - __assign( - { style: { flex: '1' } }, - { - children: [ - jsxRuntime.jsx( - Row, - { - children: jsxRuntime.jsx( - StyledTitleText, - __assign({ active: isActive }, { children: list.name }), - void 0 - ), - }, - void 0 - ), - jsxRuntime.jsxs( - RowFixed, - __assign( - { mt: '4px' }, - { - children: [ - jsxRuntime.jsx( - StyledListUrlText, - __assign( - { active: isActive, mr: '6px' }, - { - children: jsxRuntime.jsxs( - macro.Trans, - { children: [activeTokensOnThisChain, ' tokens'] }, - void 0 - ), - } - ), - void 0 - ), - jsxRuntime.jsxs( - StyledMenu$1, - __assign( - { ref: node }, - { - children: [ - jsxRuntime.jsx( - ButtonEmpty, - __assign( - { onClick: toggle, ref: setReferenceElement, padding: '0' }, - { - children: jsxRuntime.jsx( - reactFeather.Settings, - { stroke: isActive ? theme.bg1 : theme.text1, size: 12 }, - void 0 - ), - } - ), - void 0 - ), - open && - jsxRuntime.jsxs( - PopoverContainer, - __assign( - { show: true, ref: setPopperElement, style: styles.popper }, - attributes.popper, - { - children: [ - jsxRuntime.jsx( - 'div', - { children: list && listVersionLabel(list.version) }, - void 0 - ), - jsxRuntime.jsx(SeparatorDark, {}, void 0), - jsxRuntime.jsx( - ExternalLink, - __assign( - { href: 'https://tokenlists.org/token-list?url=' + listUrl }, - { - children: jsxRuntime.jsx( - macro.Trans, - { children: 'View list' }, - void 0 - ), - } - ), - void 0 - ), - jsxRuntime.jsx( - UnpaddedLinkStyledButton, - __assign( - { - onClick: handleRemoveList, - disabled: Object.keys(listsByUrl).length === 1, - }, - { - children: jsxRuntime.jsx( - macro.Trans, - { children: 'Remove list' }, - void 0 - ), - } - ), - void 0 - ), - pending && - jsxRuntime.jsx( - UnpaddedLinkStyledButton, - __assign( - { onClick: handleAcceptListUpdate }, - { - children: jsxRuntime.jsx( - macro.Trans, - { children: 'Update list' }, - void 0 - ), - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - jsxRuntime.jsx( - ListToggle, - { - isActive, - bgColor: listColor, - toggle() { - isActive ? handleDisableList() : handleEnableList() - }, - }, - void 0 - ), - ], - } - ), - listUrl - ) -}) -var ListContainer = styled__default['default'].div( - templateObject_9$2 || - (templateObject_9$2 = __makeTemplateObject( - ['\n padding: 1rem;\n height: 100%;\n overflow: auto;\n flex: 1;\n'], - ['\n padding: 1rem;\n height: 100%;\n overflow: auto;\n flex: 1;\n'] - )) -) -function ManageLists(_a) { - var setModalView = _a.setModalView, - setImportList = _a.setImportList, - setListUrl = _a.setListUrl - var chainId = useActiveWeb3React().chainId - var theme = useTheme() - var _b = __read(React.useState(''), 2), - listUrlInput = _b[0], - setListUrlInput = _b[1] - var lists = useAllLists() - var tokenCountByListName = React.useMemo( - function () { - return Object.values(lists).reduce(function (acc, _a) { - var _b - var list = _a.current - if (!list) { - return acc - } - return __assign( - __assign({}, acc), - ((_b = {}), - (_b[list.name] = list.tokens.reduce(function (count, token) { - return token.chainId === chainId ? count + 1 : count - }, 0)), - _b) - ) - }, {}) - }, - [chainId, lists] - ) - // sort by active but only if not visible - var activeListUrls = useActiveListUrls() - var handleInput = React.useCallback(function (e) { - setListUrlInput(e.target.value) - }, []) - var fetchList = useFetchListCallback() - var validUrl = React.useMemo( - function () { - return uriToHttp(listUrlInput).length > 0 || Boolean(parseENSAddress(listUrlInput)) - }, - [listUrlInput] - ) - var sortedLists = React.useMemo( - function () { - var listUrls = Object.keys(lists) - return listUrls - .filter(function (listUrl) { - // only show loaded lists, hide unsupported lists - return Boolean(lists[listUrl].current) && !Boolean(UNSUPPORTED_LIST_URLS.includes(listUrl)) - }) - .sort(function (listUrlA, listUrlB) { - var listA = lists[listUrlA].current - var listB = lists[listUrlB].current - // first filter on active lists - if ( - (activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(listUrlA)) && - !(activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(listUrlB)) - ) { - return -1 - } - if ( - !(activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(listUrlA)) && - (activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(listUrlB)) - ) { - return 1 - } - if (listA && listB) { - if (tokenCountByListName[listA.name] > tokenCountByListName[listB.name]) { - return -1 - } - if (tokenCountByListName[listA.name] < tokenCountByListName[listB.name]) { - return 1 - } - return listA.name.toLowerCase() < listB.name.toLowerCase() - ? -1 - : listA.name.toLowerCase() === listB.name.toLowerCase() - ? 0 - : 1 - } - if (listA) return -1 - if (listB) return 1 - return 0 - }) - }, - [lists, activeListUrls, tokenCountByListName] - ) - // temporary fetched list for import flow - var _c = __read(React.useState(), 2), - tempList = _c[0], - setTempList = _c[1] - var _d = __read(React.useState(), 2), - addError = _d[0], - setAddError = _d[1] - React.useEffect( - function () { - function fetchTempList() { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - fetchList(listUrlInput, false) - .then(function (list) { - return setTempList(list) - }) - .catch(function () { - return setAddError( - macro.t( - templateObject_10$2 || - (templateObject_10$2 = __makeTemplateObject(['Error importing list'], ['Error importing list'])) - ) - ) - }) - return [2 /*return*/] - }) - }) - } - // if valid url, fetch details for card - if (validUrl) { - fetchTempList() - } else { - setTempList(undefined) - listUrlInput !== '' && - setAddError( - macro.t( - templateObject_11$2 || - (templateObject_11$2 = __makeTemplateObject( - ['Enter valid list location'], - ['Enter valid list location'] - )) - ) - ) - } - // reset error - if (listUrlInput === '') { - setAddError(undefined) - } - }, - [fetchList, listUrlInput, validUrl] - ) - // check if list is already imported - var isImported = Object.keys(lists).includes(listUrlInput) - // set list values and have parent modal switch to import list view - var handleImport = React.useCallback( - function () { - if (!tempList) return - setImportList(tempList) - setModalView(CurrencyModalView.importList) - setListUrl(listUrlInput) - }, - [listUrlInput, setImportList, setListUrl, setModalView, tempList] - ) - return jsxRuntime.jsxs( - Wrapper$4, - { - children: [ - jsxRuntime.jsxs( - PaddedColumn, - __assign( - { gap: '14px' }, - { - children: [ - jsxRuntime.jsx( - Row, - { - children: jsxRuntime.jsx( - SearchInput, - { - type: 'text', - id: 'list-add-input', - placeholder: macro.t( - templateObject_12$2 || - (templateObject_12$2 = __makeTemplateObject( - ['https:// or ipfs:// or ENS name'], - ['https:// or ipfs:// or ENS name'] - )) - ), - value: listUrlInput, - onChange: handleInput, - }, - void 0 - ), - }, - void 0 - ), - addError - ? jsxRuntime.jsx( - ThemedText.Error, - __assign( - { title: addError, style: { textOverflow: 'ellipsis', overflow: 'hidden' }, error: true }, - { children: addError } - ), - void 0 - ) - : null, - ], - } - ), - void 0 - ), - tempList && - jsxRuntime.jsx( - PaddedColumn, - __assign( - { style: { paddingTop: 0 } }, - { - children: jsxRuntime.jsx( - Card, - __assign( - { backgroundColor: theme.bg2, padding: '12px 20px' }, - { - children: jsxRuntime.jsxs( - RowBetween, - { - children: [ - jsxRuntime.jsxs( - RowFixed, - { - children: [ - tempList.logoURI && - jsxRuntime.jsx(ListLogo, { logoURI: tempList.logoURI, size: '40px' }, void 0), - jsxRuntime.jsxs( - AutoColumn, - __assign( - { gap: '4px', style: { marginLeft: '20px' } }, - { - children: [ - jsxRuntime.jsx( - ThemedText.Body, - __assign({ fontWeight: 600 }, { children: tempList.name }), - void 0 - ), - jsxRuntime.jsx( - ThemedText.Main, - __assign( - { fontSize: '12px' }, - { - children: jsxRuntime.jsxs( - macro.Trans, - { children: [tempList.tokens.length, ' tokens'] }, - void 0 - ), - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - ], - }, - void 0 - ), - isImported - ? jsxRuntime.jsxs( - RowFixed, - { - children: [ - jsxRuntime.jsx( - IconWrapper, - __assign( - { stroke: theme.text2, size: '16px', marginRight: '10px' }, - { children: jsxRuntime.jsx(reactFeather.CheckCircle, {}, void 0) } - ), - void 0 - ), - jsxRuntime.jsx( - ThemedText.Body, - __assign( - { color: theme.text2 }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'Loaded' }, void 0) } - ), - void 0 - ), - ], - }, - void 0 - ) - : jsxRuntime.jsx( - ButtonPrimary, - __assign( - { - style: { fontSize: '14px' }, - padding: '6px 8px', - width: 'fit-content', - onClick: handleImport, - }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'Import' }, void 0) } - ), - void 0 - ), - ], - }, - void 0 - ), - } - ), - void 0 - ), - } - ), - void 0 - ), - jsxRuntime.jsx(Separator, {}, void 0), - jsxRuntime.jsx( - ListContainer, - { - children: jsxRuntime.jsx( - AutoColumn, - __assign( - { gap: 'md' }, - { - children: sortedLists.map(function (listUrl) { - return jsxRuntime.jsx(ListRow, { listUrl }, listUrl) - }), - } - ), - void 0 - ), - }, - void 0 - ), - ], - }, - void 0 - ) -} -var templateObject_1$j, - templateObject_2$a, - templateObject_3$7, - templateObject_4$5, - templateObject_5$5, - templateObject_6$3, - templateObject_7$3, - templateObject_8$2, - templateObject_9$2, - templateObject_10$2, - templateObject_11$2, - templateObject_12$2 - -var Wrapper$3 = styled__default['default'].div( - templateObject_1$i || - (templateObject_1$i = __makeTemplateObject( - ['\n width: 100%;\n height: calc(100% - 60px);\n position: relative;\n padding-bottom: 80px;\n'], - ['\n width: 100%;\n height: calc(100% - 60px);\n position: relative;\n padding-bottom: 80px;\n'] - )) -) -var Footer = styled__default['default'].div( - templateObject_2$9 || - (templateObject_2$9 = __makeTemplateObject( - [ - '\n position: absolute;\n bottom: 0;\n width: 100%;\n border-radius: 20px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n border-top: 1px solid ', - ';\n padding: 20px;\n text-align: center;\n', - ], - [ - '\n position: absolute;\n bottom: 0;\n width: 100%;\n border-radius: 20px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n border-top: 1px solid ', - ';\n padding: 20px;\n text-align: center;\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.bg3 - } -) -function ManageTokens(_a) { - var setModalView = _a.setModalView, - setImportToken = _a.setImportToken - var chainId = useActiveWeb3React().chainId - var _b = __read(React.useState(''), 2), - searchQuery = _b[0], - setSearchQuery = _b[1] - var theme = useTheme() - // manage focus on modal show - var inputRef = React.useRef() - var handleInput = React.useCallback(function (event) { - var input = event.target.value - var checksummedInput = isAddress(input) - setSearchQuery(checksummedInput || input) - }, []) - // if they input an address, use it - var isAddressSearch = isAddress(searchQuery) - var searchToken = useToken(searchQuery) - // all tokens for local lisr - var userAddedTokens = useUserAddedTokens() - var removeToken = useRemoveUserAddedToken() - var handleRemoveAll = React.useCallback( - function () { - if (chainId && userAddedTokens) { - userAddedTokens.map(function (token) { - return removeToken(chainId, token.address) - }) - } - }, - [removeToken, userAddedTokens, chainId] - ) - var tokenList = React.useMemo( - function () { - return ( - chainId && - userAddedTokens.map(function (token) { - return jsxRuntime.jsxs( - RowBetween, - __assign( - { width: '100%' }, - { - children: [ - jsxRuntime.jsxs( - RowFixed, - { - children: [ - jsxRuntime.jsx(CurrencyLogo, { currency: token, size: '20px' }, void 0), - jsxRuntime.jsx( - ExternalLink, - __assign( - { href: getExplorerLink(chainId, token.address, ExplorerDataType.ADDRESS) }, - { - children: jsxRuntime.jsx( - ThemedText.Main, - __assign({ ml: '10px', fontWeight: 600 }, { children: token.symbol }), - void 0 - ), - } - ), - void 0 - ), - ], - }, - void 0 - ), - jsxRuntime.jsxs( - RowFixed, - { - children: [ - jsxRuntime.jsx( - TrashIcon, - { - onClick() { - return removeToken(chainId, token.address) - }, - }, - void 0 - ), - jsxRuntime.jsx( - ExternalLinkIcon, - { href: getExplorerLink(chainId, token.address, ExplorerDataType.ADDRESS) }, - void 0 - ), - ], - }, - void 0 - ), - ], - } - ), - token.address - ) - }) - ) - }, - [userAddedTokens, chainId, removeToken] - ) - return jsxRuntime.jsxs( - Wrapper$3, - { - children: [ - jsxRuntime.jsxs( - Column, - __assign( - { style: { width: '100%', height: '100%', flex: '1 1' } }, - { - children: [ - jsxRuntime.jsxs( - PaddedColumn, - __assign( - { gap: '14px' }, - { - children: [ - jsxRuntime.jsx( - Row, - { - children: jsxRuntime.jsx( - SearchInput, - { - type: 'text', - id: 'token-search-input', - placeholder: '0x0000', - value: searchQuery, - autoComplete: 'off', - ref: inputRef, - onChange: handleInput, - }, - void 0 - ), - }, - void 0 - ), - searchQuery !== '' && - !isAddressSearch && - jsxRuntime.jsx( - ThemedText.Error, - __assign( - { error: true }, - { - children: jsxRuntime.jsx( - macro.Trans, - { children: 'Enter valid token address' }, - void 0 - ), - } - ), - void 0 - ), - searchToken && - jsxRuntime.jsx( - Card, - __assign( - { backgroundColor: theme.bg2, padding: '10px 0' }, - { - children: jsxRuntime.jsx( - ImportRow, - { - token: searchToken, - showImportView() { - return setModalView(CurrencyModalView.importToken) - }, - setImportToken, - style: { height: 'fit-content' }, - }, - void 0 - ), - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - jsxRuntime.jsx(Separator, {}, void 0), - jsxRuntime.jsxs( - PaddedColumn, - __assign( - { gap: 'lg', style: { overflow: 'auto', marginBottom: '10px' } }, - { - children: [ - jsxRuntime.jsxs( - RowBetween, - { - children: [ - jsxRuntime.jsx( - ThemedText.Main, - __assign( - { fontWeight: 600 }, - { - children: jsxRuntime.jsxs( - macro.Trans, - { - children: [ - userAddedTokens === null || userAddedTokens === void 0 - ? void 0 - : userAddedTokens.length, - ' Custom Tokens', - ], - }, - void 0 - ), - } - ), - void 0 - ), - userAddedTokens.length > 0 && - jsxRuntime.jsx( - ButtonText, - __assign( - { onClick: handleRemoveAll }, - { - children: jsxRuntime.jsx( - ThemedText.Blue, - { children: jsxRuntime.jsx(macro.Trans, { children: 'Clear all' }, void 0) }, - void 0 - ), - } - ), - void 0 - ), - ], - }, - void 0 - ), - tokenList, - ], - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - jsxRuntime.jsx( - Footer, - { - children: jsxRuntime.jsx( - ThemedText.DarkGray, - { - children: jsxRuntime.jsx( - macro.Trans, - { children: 'Tip: Custom tokens are stored locally in your browser' }, - void 0 - ), - }, - void 0 - ), - }, - void 0 - ), - ], - }, - void 0 - ) -} -var templateObject_1$i, templateObject_2$9 - -var Wrapper$2 = styled__default['default'].div( - templateObject_1$h || - (templateObject_1$h = __makeTemplateObject( - ['\n width: 100%;\n position: relative;\n display: flex;\n flex-flow: column;\n'], - ['\n width: 100%;\n position: relative;\n display: flex;\n flex-flow: column;\n'] - )) -) -var ToggleWrapper = styled__default['default'](RowBetween)( - templateObject_2$8 || - (templateObject_2$8 = __makeTemplateObject( - ['\n background-color: ', ';\n border-radius: 12px;\n padding: 6px;\n'], - ['\n background-color: ', ';\n border-radius: 12px;\n padding: 6px;\n'] - )), - function (_a) { - var theme = _a.theme - return theme.bg3 - } -) -var ToggleOption = styled__default['default'].div( - templateObject_3$6 || - (templateObject_3$6 = __makeTemplateObject( - [ - '\n width: 48%;\n padding: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 12px;\n font-weight: 600;\n background-color: ', - ';\n color: ', - ';\n user-select: none;\n\n :hover {\n cursor: pointer;\n opacity: 0.7;\n }\n', - ], - [ - '\n width: 48%;\n padding: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 12px;\n font-weight: 600;\n background-color: ', - ';\n color: ', - ';\n user-select: none;\n\n :hover {\n cursor: pointer;\n opacity: 0.7;\n }\n', - ] - )), - function (_a) { - var theme = _a.theme, - active = _a.active - return active ? theme.bg1 : theme.bg3 - }, - function (_a) { - var theme = _a.theme, - active = _a.active - return active ? theme.text1 : theme.text2 - } -) -function Manage(_a) { - var onDismiss = _a.onDismiss, - setModalView = _a.setModalView, - setImportList = _a.setImportList, - setImportToken = _a.setImportToken, - setListUrl = _a.setListUrl - // toggle between tokens and lists - var _b = __read(React.useState(true), 2), - showLists = _b[0], - setShowLists = _b[1] - return jsxRuntime.jsxs( - Wrapper$2, - { - children: [ - jsxRuntime.jsx( - PaddedColumn, - { - children: jsxRuntime.jsxs( - RowBetween, - { - children: [ - jsxRuntime.jsx( - reactFeather.ArrowLeft, - { - style: { cursor: 'pointer' }, - onClick() { - return setModalView(CurrencyModalView.search) - }, - }, - void 0 - ), - jsxRuntime.jsx( - rebass.Text, - __assign( - { fontWeight: 500, fontSize: 20 }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'Manage' }, void 0) } - ), - void 0 - ), - jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0), - ], - }, - void 0 - ), - }, - void 0 - ), - jsxRuntime.jsx(Separator, {}, void 0), - jsxRuntime.jsx( - PaddedColumn, - __assign( - { style: { paddingBottom: 0 } }, - { - children: jsxRuntime.jsxs( - ToggleWrapper, - { - children: [ - jsxRuntime.jsx( - ToggleOption, - __assign( - { - onClick() { - return setShowLists(!showLists) - }, - active: showLists, - }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'Lists' }, void 0) } - ), - void 0 - ), - jsxRuntime.jsx( - ToggleOption, - __assign( - { - onClick() { - return setShowLists(!showLists) - }, - active: !showLists, - }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'Tokens' }, void 0) } - ), - void 0 - ), - ], - }, - void 0 - ), - } - ), - void 0 - ), - showLists - ? jsxRuntime.jsx(ManageLists, { setModalView, setImportList, setListUrl }, void 0) - : jsxRuntime.jsx(ManageTokens, { setModalView, setImportToken }, void 0), - ], - }, - void 0 - ) -} -var templateObject_1$h, templateObject_2$8, templateObject_3$6 - -var CurrencyModalView -;(function (CurrencyModalView) { - CurrencyModalView[(CurrencyModalView['search'] = 0)] = 'search' - CurrencyModalView[(CurrencyModalView['manage'] = 1)] = 'manage' - CurrencyModalView[(CurrencyModalView['importToken'] = 2)] = 'importToken' - CurrencyModalView[(CurrencyModalView['importList'] = 3)] = 'importList' -})(CurrencyModalView || (CurrencyModalView = {})) -function CurrencySearchModal(_a) { - var isOpen = _a.isOpen, - onDismiss = _a.onDismiss, - onCurrencySelect = _a.onCurrencySelect, - selectedCurrency = _a.selectedCurrency, - otherSelectedCurrency = _a.otherSelectedCurrency, - _b = _a.showCommonBases, - showCommonBases = _b === void 0 ? false : _b, - _c = _a.showCurrencyAmount, - showCurrencyAmount = _c === void 0 ? true : _c, - _d = _a.disableNonToken, - disableNonToken = _d === void 0 ? false : _d - var _e = __read(React.useState(CurrencyModalView.manage), 2), - modalView = _e[0], - setModalView = _e[1] - var lastOpen = useLast(isOpen) - React.useEffect( - function () { - if (isOpen && !lastOpen) { - setModalView(CurrencyModalView.search) - } - }, - [isOpen, lastOpen] - ) - var handleCurrencySelect = React.useCallback( - function (currency) { - onCurrencySelect(currency) - onDismiss() - }, - [onDismiss, onCurrencySelect] - ) - // for token import view - var prevView = usePrevious(modalView) - // used for import token flow - var _f = __read(React.useState(), 2), - importToken = _f[0], - setImportToken = _f[1] - // used for import list - var _g = __read(React.useState(), 2), - importList = _g[0], - setImportList = _g[1] - var _h = __read(React.useState(), 2), - listURL = _h[0], - setListUrl = _h[1] - var showImportView = React.useCallback( - function () { - return setModalView(CurrencyModalView.importToken) - }, - [setModalView] - ) - var showManageView = React.useCallback( - function () { - return setModalView(CurrencyModalView.manage) - }, - [setModalView] - ) - var handleBackImport = React.useCallback( - function () { - return setModalView(prevView && prevView !== CurrencyModalView.importToken ? prevView : CurrencyModalView.search) - }, - [setModalView, prevView] - ) - // change min height if not searching - var minHeight = modalView === CurrencyModalView.importToken || modalView === CurrencyModalView.importList ? 40 : 80 - var content = null - switch (modalView) { - case CurrencyModalView.search: - content = jsxRuntime.jsx( - CurrencySearch, - { - isOpen, - onDismiss, - onCurrencySelect: handleCurrencySelect, - selectedCurrency, - otherSelectedCurrency, - showCommonBases, - showCurrencyAmount, - disableNonToken, - showImportView, - setImportToken, - showManageView, - }, - void 0 - ) - break - case CurrencyModalView.importToken: - if (importToken) { - content = jsxRuntime.jsx( - ImportToken, - { - tokens: [importToken], - onDismiss, - list: importToken instanceof WrappedTokenInfo ? importToken.list : undefined, - onBack: handleBackImport, - handleCurrencySelect, - }, - void 0 - ) - } - break - case CurrencyModalView.importList: - if (importList && listURL) { - content = jsxRuntime.jsx(ImportList, { list: importList, listURL, onDismiss, setModalView }, void 0) - } - break - case CurrencyModalView.manage: - content = jsxRuntime.jsx( - Manage, - { - onDismiss, - setModalView, - setImportToken, - setImportList, - setListUrl, - }, - void 0 - ) - break - } - return jsxRuntime.jsx(Modal, __assign({ isOpen, onDismiss, maxHeight: 80, minHeight }, { children: content }), void 0) +function computeFiatValuePriceImpact(fiatValueInput, fiatValueOutput) { + if (!fiatValueOutput || !fiatValueInput) + return undefined; + if (!fiatValueInput.currency.equals(fiatValueOutput.currency)) + return undefined; + if (JSBI__default["default"].equal(fiatValueInput.quotient, JSBI__default["default"].BigInt(0))) + return undefined; + var pct = ONE_HUNDRED_PERCENT.subtract(fiatValueOutput.divide(fiatValueInput)); + return new sdkCore.Percent(pct.numerator, pct.denominator); } -var TextWrapper = styled__default['default'].span( - templateObject_1$g || - (templateObject_1$g = __makeTemplateObject( - [ - '\n margin-left: ', - ';\n color: ', - ';\n font-size: ', - ';\n\n @media screen and (max-width: 600px) {\n font-size: ', - ';\n }\n', - ], - [ - '\n margin-left: ', - ';\n color: ', - ';\n font-size: ', - ';\n\n @media screen and (max-width: 600px) {\n font-size: ', - ';\n }\n', - ] - )), - function (_a) { - var margin = _a.margin - return margin && '4px' - }, - function (_a) { - var theme = _a.theme, - link = _a.link, - textColor = _a.textColor - return link ? theme.blue1 : textColor !== null && textColor !== void 0 ? textColor : theme.text1 - }, - function (_a) { - var fontSize = _a.fontSize - return fontSize !== null && fontSize !== void 0 ? fontSize : 'inherit' - }, - function (_a) { - var adjustSize = _a.adjustSize - return adjustSize && '12px' - } -) -var HoverInlineText = function (_a) { - var text = _a.text, - _b = _a.maxCharacters, - maxCharacters = _b === void 0 ? 20 : _b, - _c = _a.margin, - margin = _c === void 0 ? false : _c, - _d = _a.adjustSize, - adjustSize = _d === void 0 ? false : _d, - fontSize = _a.fontSize, - textColor = _a.textColor, - link = _a.link, - rest = __rest(_a, ['text', 'maxCharacters', 'margin', 'adjustSize', 'fontSize', 'textColor', 'link']) - var _e = __read(React.useState(false), 2), - showHover = _e[0], - setShowHover = _e[1] - if (!text) { - return jsxRuntime.jsx('span', {}, void 0) - } - if (text.length > maxCharacters) { - return jsxRuntime.jsx( - Tooltip, - __assign( - { text, show: showHover }, - { - children: jsxRuntime.jsx( - TextWrapper, - __assign( - { - onMouseEnter() { - return setShowHover(true) - }, - onMouseLeave() { - return setShowHover(false) - }, - margin, - adjustSize, - textColor, - link, - fontSize, - }, - rest, - { children: ' ' + text.slice(0, maxCharacters - 1) + '...' } - ), - void 0 - ), - } - ), - void 0 - ) - } - return jsxRuntime.jsx( - TextWrapper, - __assign({ margin, adjustSize, link, fontSize, textColor }, rest, { - children: text, - }), - void 0 - ) -} -var templateObject_1$g - -function FiatValue(_a) { - var fiatValue = _a.fiatValue, - priceImpact = _a.priceImpact - var theme = useTheme() - var priceImpactColor = React.useMemo( - function () { - if (!priceImpact) return undefined - if (priceImpact.lessThan('0')) return theme.green1 - var severity = warningSeverity(priceImpact) - if (severity < 1) return theme.text3 - if (severity < 3) return theme.yellow1 - return theme.red1 - }, - [priceImpact, theme.green1, theme.red1, theme.text3, theme.yellow1] - ) - return jsxRuntime.jsxs( - ThemedText.Body, - __assign( - { fontSize: 14, color: fiatValue ? theme.text3 : theme.text4 }, - { - children: [ - fiatValue - ? jsxRuntime.jsxs( - macro.Trans, - { - children: [ - '$', - jsxRuntime.jsx( - HoverInlineText, - { - text: - fiatValue === null || fiatValue === void 0 - ? void 0 - : fiatValue.toSignificant(6, { groupSeparator: ',' }), - textColor: fiatValue ? theme.text3 : theme.text4, - }, - void 0 - ), - ], - }, - void 0 - ) - : '', - priceImpact - ? jsxRuntime.jsxs( - 'span', - __assign( - { style: { color: priceImpactColor } }, - { - children: [ - ' ', - jsxRuntime.jsxs( - MouseoverTooltip, - __assign( - { - text: macro.t( - templateObject_1$f || - (templateObject_1$f = __makeTemplateObject( - ['The estimated difference between the USD values of input and output amounts.'], - ['The estimated difference between the USD values of input and output amounts.'] - )) - ), - }, - { - children: [ - '(', - jsxRuntime.jsxs( - macro.Trans, - { children: [priceImpact.multiply(-1).toSignificant(3), '%'] }, - void 0 - ), - ')', - ], - } - ), - void 0 - ), - ], - } - ), - void 0 - ) - : null, - ], - } - ), - void 0 - ) -} -var templateObject_1$f - -var InputPanel = styled__default['default'].div( - templateObject_1$e || - (templateObject_1$e = __makeTemplateObject( - [ - '\n ', - '\n position: relative;\n border-radius: ', - ';\n background-color: ', - ';\n z-index: 1;\n width: ', - ';\n transition: height 1s ease;\n will-change: height;\n', - ], - [ - '\n ', - '\n position: relative;\n border-radius: ', - ';\n background-color: ', - ';\n z-index: 1;\n width: ', - ';\n transition: height 1s ease;\n will-change: height;\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.flexColumnNoWrap - }, - function (_a) { - var hideInput = _a.hideInput - return hideInput ? '16px' : '20px' - }, - function (_a) { - var theme = _a.theme, - hideInput = _a.hideInput - return hideInput ? 'transparent' : theme.bg2 - }, - function (_a) { - var hideInput = _a.hideInput - return hideInput ? '100%' : 'initial' - } -) -var FixedContainer = styled__default['default'].div( - templateObject_2$7 || - (templateObject_2$7 = __makeTemplateObject( - [ - '\n width: 100%;\n height: 100%;\n position: absolute;\n border-radius: 20px;\n background-color: ', - ';\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 2;\n', - ], - [ - '\n width: 100%;\n height: 100%;\n position: absolute;\n border-radius: 20px;\n background-color: ', - ';\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 2;\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.bg2 - } -) -var Container$1 = styled__default['default'].div( - templateObject_3$5 || - (templateObject_3$5 = __makeTemplateObject( - [ - '\n border-radius: ', - ';\n border: 1px solid ', - ';\n background-color: ', - ';\n width: ', - ';\n :focus,\n :hover {\n border: 1px solid ', - ';\n }\n', - ], - [ - '\n border-radius: ', - ';\n border: 1px solid ', - ';\n background-color: ', - ';\n width: ', - ';\n :focus,\n :hover {\n border: 1px solid ', - ';\n }\n', - ] - )), - function (_a) { - var hideInput = _a.hideInput - return hideInput ? '16px' : '20px' - }, - function (_a) { - var theme = _a.theme - return theme.bg0 - }, - function (_a) { - var theme = _a.theme - return theme.bg1 - }, - function (_a) { - var hideInput = _a.hideInput - return hideInput ? '100%' : 'initial' - }, - function (_a) { - var theme = _a.theme, - hideInput = _a.hideInput - return hideInput ? ' transparent' : theme.bg3 - } -) -var CurrencySelect = styled__default['default'](ButtonGray)( - templateObject_4$4 || - (templateObject_4$4 = __makeTemplateObject( - [ - '\n align-items: center;\n background-color: ', - ';\n box-shadow: ', - ';\n box-shadow: 0px 6px 10px rgba(0, 0, 0, 0.075);\n color: ', - ';\n cursor: pointer;\n border-radius: 16px;\n outline: none;\n user-select: none;\n border: none;\n font-size: 24px;\n font-weight: 500;\n height: ', - ';\n width: ', - ';\n padding: 0 8px;\n justify-content: space-between;\n margin-left: ', - ';\n :focus,\n :hover {\n background-color: ', - ';\n }\n visibility: ', - ';\n', - ], - [ - '\n align-items: center;\n background-color: ', - ';\n box-shadow: ', - ';\n box-shadow: 0px 6px 10px rgba(0, 0, 0, 0.075);\n color: ', - ';\n cursor: pointer;\n border-radius: 16px;\n outline: none;\n user-select: none;\n border: none;\n font-size: 24px;\n font-weight: 500;\n height: ', - ';\n width: ', - ';\n padding: 0 8px;\n justify-content: space-between;\n margin-left: ', - ';\n :focus,\n :hover {\n background-color: ', - ';\n }\n visibility: ', - ';\n', - ] - )), - function (_a) { - var selected = _a.selected, - theme = _a.theme - return selected ? theme.bg2 : theme.primary1 - }, - function (_a) { - var selected = _a.selected - return selected ? 'none' : '0px 6px 10px rgba(0, 0, 0, 0.075)' - }, - function (_a) { - var selected = _a.selected, - theme = _a.theme - return selected ? theme.text1 : theme.white - }, - function (_a) { - var hideInput = _a.hideInput - return hideInput ? '2.8rem' : '2.4rem' - }, - function (_a) { - var hideInput = _a.hideInput - return hideInput ? '100%' : 'initial' - }, - function (_a) { - var hideInput = _a.hideInput - return hideInput ? '0' : '12px' - }, - function (_a) { - var selected = _a.selected, - theme = _a.theme - return selected ? theme.bg3 : polished.darken(0.05, theme.primary1) - }, - function (_a) { - var visible = _a.visible - return visible ? 'visible' : 'hidden' - } -) -var InputRow = styled__default['default'].div( - templateObject_5$4 || - (templateObject_5$4 = __makeTemplateObject( - ['\n ', '\n align-items: center;\n justify-content: space-between;\n padding: ', ';\n'], - ['\n ', '\n align-items: center;\n justify-content: space-between;\n padding: ', ';\n'] - )), - function (_a) { - var theme = _a.theme - return theme.flexRowNoWrap - }, - function (_a) { - var selected = _a.selected - return selected ? ' 1rem 1rem 0.75rem 1rem' : '1rem 1rem 1rem 1rem' - } -) -var LabelRow = styled__default['default'].div( - templateObject_6$2 || - (templateObject_6$2 = __makeTemplateObject( - [ - '\n ', - '\n align-items: center;\n color: ', - ';\n font-size: 0.75rem;\n line-height: 1rem;\n padding: 0 1rem 1rem;\n span:hover {\n cursor: pointer;\n color: ', - ';\n }\n', - ], - [ - '\n ', - '\n align-items: center;\n color: ', - ';\n font-size: 0.75rem;\n line-height: 1rem;\n padding: 0 1rem 1rem;\n span:hover {\n cursor: pointer;\n color: ', - ';\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.flexRowNoWrap - }, - function (_a) { - var theme = _a.theme - return theme.text1 - }, - function (_a) { - var theme = _a.theme - return polished.darken(0.2, theme.text2) - } -) -var FiatRow = styled__default['default'](LabelRow)( - templateObject_7$2 || - (templateObject_7$2 = __makeTemplateObject( - ['\n justify-content: flex-end;\n'], - ['\n justify-content: flex-end;\n'] - )) -) -var Aligner = styled__default['default'].span( - templateObject_8$1 || - (templateObject_8$1 = __makeTemplateObject( - ['\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n'], - ['\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n'] - )) -) -var StyledDropDown = styled__default['default'](SvgDropdown)( - templateObject_9$1 || - (templateObject_9$1 = __makeTemplateObject( - [ - '\n margin: 0 0.25rem 0 0.35rem;\n height: 35%;\n\n path {\n stroke: ', - ';\n stroke-width: 1.5px;\n }\n', - ], - [ - '\n margin: 0 0.25rem 0 0.35rem;\n height: 35%;\n\n path {\n stroke: ', - ';\n stroke-width: 1.5px;\n }\n', - ] - )), - function (_a) { - var selected = _a.selected, - theme = _a.theme - return selected ? theme.text1 : theme.white - } -) -var StyledTokenName = styled__default['default'].span( - templateObject_10$1 || - (templateObject_10$1 = __makeTemplateObject( - ['\n ', '\n font-size: ', ';\n'], - ['\n ', '\n font-size: ', ';\n'] - )), - function (_a) { - var active = _a.active - return active ? ' margin: 0 0.25rem 0 0.25rem;' : ' margin: 0 0.25rem 0 0.25rem;' - }, - function (_a) { - var active = _a.active - return active ? '18px' : '18px' - } -) -var StyledBalanceMax = styled__default['default'].button( - templateObject_11$1 || - (templateObject_11$1 = __makeTemplateObject( - [ - '\n background-color: transparent;\n background-color: ', - ';\n border: none;\n border-radius: 12px;\n color: ', - ';\n cursor: pointer;\n font-size: 11px;\n font-weight: 500;\n margin-left: 0.25rem;\n opacity: ', - ';\n padding: 4px 6px;\n pointer-events: ', - ';\n\n :hover {\n opacity: ', - ';\n }\n\n :focus {\n outline: none;\n }\n', - ], - [ - '\n background-color: transparent;\n background-color: ', - ';\n border: none;\n border-radius: 12px;\n color: ', - ';\n cursor: pointer;\n font-size: 11px;\n font-weight: 500;\n margin-left: 0.25rem;\n opacity: ', - ';\n padding: 4px 6px;\n pointer-events: ', - ';\n\n :hover {\n opacity: ', - ';\n }\n\n :focus {\n outline: none;\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.primary5 - }, - function (_a) { - var theme = _a.theme - return theme.primary1 - }, - function (_a) { - var disabled = _a.disabled - return !disabled ? 1 : 0.4 - }, - function (_a) { - var disabled = _a.disabled - return !disabled ? 'initial' : 'none' - }, - function (_a) { - var disabled = _a.disabled - return !disabled ? 0.8 : 0.4 - } -) -var StyledNumericalInput = styled__default['default'](Input$1)( - templateObject_12$1 || - (templateObject_12$1 = __makeTemplateObject( - ['\n ', ';\n text-align: left;\n'], - ['\n ', ';\n text-align: left;\n'] - )), - loadingOpacityMixin -) -function CurrencyInputPanel(_a) { - var value = _a.value, - onUserInput = _a.onUserInput, - onMax = _a.onMax, - showMaxButton = _a.showMaxButton, - onCurrencySelect = _a.onCurrencySelect, - currency = _a.currency, - otherCurrency = _a.otherCurrency, - id = _a.id, - showCommonBases = _a.showCommonBases, - showCurrencyAmount = _a.showCurrencyAmount, - disableNonToken = _a.disableNonToken, - renderBalance = _a.renderBalance, - fiatValue = _a.fiatValue, - priceImpact = _a.priceImpact, - _b = _a.hideBalance, - hideBalance = _b === void 0 ? false : _b, - _c = _a.pair, - pair = _c === void 0 ? null : _c, // used for double token logo - _d = _a.hideInput, // used for double token logo - hideInput = _d === void 0 ? false : _d, - _e = _a.locked, - locked = _e === void 0 ? false : _e, - _f = _a.loading, - loading = _f === void 0 ? false : _f, - rest = __rest(_a, [ - 'value', - 'onUserInput', - 'onMax', - 'showMaxButton', - 'onCurrencySelect', - 'currency', - 'otherCurrency', - 'id', - 'showCommonBases', - 'showCurrencyAmount', - 'disableNonToken', - 'renderBalance', - 'fiatValue', - 'priceImpact', - 'hideBalance', - 'pair', - 'hideInput', - 'locked', - 'loading', - ]) - var _g = __read(React.useState(false), 2), - modalOpen = _g[0], - setModalOpen = _g[1] - var account = useActiveWeb3React().account - var selectedCurrencyBalance = useCurrencyBalance( - account !== null && account !== void 0 ? account : undefined, - currency !== null && currency !== void 0 ? currency : undefined - ) - var theme = useTheme() - var handleDismissSearch = React.useCallback( - function () { - setModalOpen(false) - }, - [setModalOpen] - ) - return jsxRuntime.jsxs( - InputPanel, - __assign({ id, hideInput }, rest, { - children: [ - locked && - jsxRuntime.jsx( - FixedContainer, - { - children: jsxRuntime.jsxs( - AutoColumn, - __assign( - { gap: 'sm', justify: 'center' }, - { - children: [ - jsxRuntime.jsx(reactFeather.Lock, {}, void 0), - jsxRuntime.jsx( - ThemedText.Label, - __assign( - { fontSize: '12px', textAlign: 'center', padding: '0 12px' }, - { - children: jsxRuntime.jsx( - macro.Trans, - { - children: - 'The market price is outside your specified price range. Single-asset deposit only.', - }, - void 0 - ), - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - }, - void 0 - ), - jsxRuntime.jsxs( - Container$1, - __assign( - { hideInput }, - { - children: [ - jsxRuntime.jsxs( - InputRow, - __assign( - { style: hideInput ? { padding: '0', borderRadius: '8px' } : {}, selected: !onCurrencySelect }, - { - children: [ - !hideInput && - jsxRuntime.jsx( - StyledNumericalInput, - { - className: 'token-amount-input', - value, - onUserInput, - $loading: loading, - }, - void 0 - ), - jsxRuntime.jsx( - CurrencySelect, - __assign( - { - visible: currency !== undefined, - selected: !!currency, - hideInput, - className: 'open-currency-select-button', - onClick() { - if (onCurrencySelect) { - setModalOpen(true) - } - }, - }, - { - children: jsxRuntime.jsxs( - Aligner, - { - children: [ - jsxRuntime.jsxs( - RowFixed, - { - children: [ - pair - ? jsxRuntime.jsx( - 'span', - __assign( - { style: { marginRight: '0.5rem' } }, - { - children: jsxRuntime.jsx( - DoubleCurrencyLogo, - { - currency0: pair.token0, - currency1: pair.token1, - size: 24, - margin: true, - }, - void 0 - ), - } - ), - void 0 - ) - : currency - ? jsxRuntime.jsx( - CurrencyLogo, - { style: { marginRight: '0.5rem' }, currency, size: '24px' }, - void 0 - ) - : null, - pair - ? jsxRuntime.jsxs( - StyledTokenName, - __assign( - { className: 'pair-name-container' }, - { - children: [ - pair === null || pair === void 0 ? void 0 : pair.token0.symbol, - ':', - pair === null || pair === void 0 ? void 0 : pair.token1.symbol, - ], - } - ), - void 0 - ) - : jsxRuntime.jsx( - StyledTokenName, - __assign( - { - className: 'token-symbol-container', - active: Boolean(currency && currency.symbol), - }, - { - children: - (currency && currency.symbol && currency.symbol.length > 20 - ? currency.symbol.slice(0, 4) + - '...' + - currency.symbol.slice( - currency.symbol.length - 5, - currency.symbol.length - ) - : currency === null || currency === void 0 - ? void 0 - : currency.symbol) || - jsxRuntime.jsx( - macro.Trans, - { children: 'Select a token' }, - void 0 - ), - } - ), - void 0 - ), - ], - }, - void 0 - ), - onCurrencySelect && - jsxRuntime.jsx(StyledDropDown, { selected: !!currency }, void 0), - ], - }, - void 0 - ), - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - !hideInput && - !hideBalance && - currency && - jsxRuntime.jsx( - FiatRow, - { - children: jsxRuntime.jsxs( - RowBetween, - { - children: [ - jsxRuntime.jsx( - LoadingOpacityContainer, - __assign( - { $loading: loading }, - { - children: jsxRuntime.jsx(FiatValue, { fiatValue, priceImpact }, void 0), - } - ), - void 0 - ), - account - ? jsxRuntime.jsxs( - RowFixed, - __assign( - { style: { height: '17px' } }, - { - children: [ - jsxRuntime.jsx( - ThemedText.Body, - __assign( - { - onClick: onMax, - color: theme.text3, - fontWeight: 500, - fontSize: 14, - style: { display: 'inline', cursor: 'pointer' }, - }, - { - children: - !hideBalance && currency && selectedCurrencyBalance - ? renderBalance - ? renderBalance(selectedCurrencyBalance) - : jsxRuntime.jsxs( - macro.Trans, - { - children: [ - 'Balance: ', - formatCurrencyAmount(selectedCurrencyBalance, 4), - ], - }, - void 0 - ) - : null, - } - ), - void 0 - ), - showMaxButton && selectedCurrencyBalance - ? jsxRuntime.jsx( - StyledBalanceMax, - __assign( - { onClick: onMax }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'MAX' }, void 0) } - ), - void 0 - ) - : null, - ], - } - ), - void 0 - ) - : jsxRuntime.jsx('span', {}, void 0), - ], - }, - void 0 - ), - }, - void 0 - ), - ], - } - ), - void 0 - ), - onCurrencySelect && - jsxRuntime.jsx( - CurrencySearchModal, - { - isOpen: modalOpen, - onDismiss: handleDismissSearch, - onCurrencySelect, - selectedCurrency: currency, - otherSelectedCurrency: otherCurrency, - showCommonBases, - showCurrencyAmount, - disableNonToken, - }, - void 0 - ), - ], - }), - void 0 - ) -} -var templateObject_1$e, - templateObject_2$7, - templateObject_3$5, - templateObject_4$4, - templateObject_5$4, - templateObject_6$2, - templateObject_7$2, - templateObject_8$1, - templateObject_9$1, - templateObject_10$1, - templateObject_11$1, - templateObject_12$1 - -/** - * Given the price impact, get user confirmation. - * - * @param priceImpactWithoutFee price impact of the trade without the fee. - */ -function confirmPriceImpactWithoutFee(priceImpactWithoutFee) { - if (!priceImpactWithoutFee.lessThan(PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN)) { - return ( - window.prompt( - 'This swap has a price impact of at least ' + - PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN.toFixed(0) + - '%. Please type the word "confirm" to continue with this swap.' - ) === 'confirm' - ) - } else if (!priceImpactWithoutFee.lessThan(ALLOWED_PRICE_IMPACT_HIGH)) { - return window.confirm( - 'This swap has a price impact of at least ' + - ALLOWED_PRICE_IMPACT_HIGH.toFixed(0) + - '%. Please confirm that you would like to continue with this swap.' - ) - } - return true -} +var ArrowWrapper = styled__default["default"].div(templateObject_1$9 || (templateObject_1$9 = __makeTemplateObject(["\n padding: 4px;\n border-radius: 12px;\n height: 32px;\n width: 32px;\n position: relative;\n margin-top: -18px;\n margin-bottom: -18px;\n left: calc(50% - 16px);\n display: flex;\n justify-content: center;\n align-items: center;\n background-color: ", ";\n border: 4px solid;\n border-color: ", ";\n z-index: 2;\n"], ["\n padding: 4px;\n border-radius: 12px;\n height: 32px;\n width: 32px;\n position: relative;\n margin-top: -18px;\n margin-bottom: -18px;\n left: calc(50% - 16px);\n display: flex;\n justify-content: center;\n align-items: center;\n background-color: ", ";\n border: 4px solid;\n border-color: ", ";\n z-index: 2;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var theme = _a.theme; + return theme.bg0; +}); +function SwapModalHeader(_a) { + var trade = _a.trade, allowedSlippage = _a.allowedSlippage, recipient = _a.recipient, showAcceptChanges = _a.showAcceptChanges, onAcceptChanges = _a.onAcceptChanges; + var theme = React.useContext(styled.ThemeContext); + var _b = __read(React.useState(false), 2), showInverted = _b[0], setShowInverted = _b[1]; + var fiatValueInput = useUSDCValue(trade.inputAmount); + var fiatValueOutput = useUSDCValue(trade.outputAmount); + return (jsxRuntime.jsxs(AutoColumn, __assign({ gap: '4px', style: { marginTop: '1rem' } }, { children: [jsxRuntime.jsx(LightCard, __assign({ padding: "0.75rem 1rem" }, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: '8px' }, { children: [jsxRuntime.jsxs(RowBetween, __assign({ align: "center" }, { children: [jsxRuntime.jsx(RowFixed, __assign({ gap: '0px' }, { children: jsxRuntime.jsx(TruncatedText, __assign({ fontSize: 24, fontWeight: 500, color: showAcceptChanges && trade.tradeType === sdkCore.TradeType.EXACT_OUTPUT ? theme.primary1 : '' }, { children: trade.inputAmount.toSignificant(6) }), void 0) }), void 0), jsxRuntime.jsxs(RowFixed, __assign({ gap: '0px' }, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: trade.inputAmount.currency, size: '20px', style: { marginRight: '12px' } }, void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontSize: 20, fontWeight: 500 }, { children: trade.inputAmount.currency.symbol }), void 0)] }), void 0)] }), void 0), jsxRuntime.jsx(RowBetween, { children: jsxRuntime.jsx(FiatValue, { fiatValue: fiatValueInput }, void 0) }, void 0)] }), void 0) }), void 0), jsxRuntime.jsx(ArrowWrapper, { children: jsxRuntime.jsx(reactFeather.ArrowDown, { size: "16", color: theme.text2 }, void 0) }, void 0), jsxRuntime.jsx(LightCard, __assign({ padding: "0.75rem 1rem", style: { marginBottom: '0.25rem' } }, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: '8px' }, { children: [jsxRuntime.jsxs(RowBetween, __assign({ align: "flex-end" }, { children: [jsxRuntime.jsx(RowFixed, __assign({ gap: '0px' }, { children: jsxRuntime.jsx(TruncatedText, __assign({ fontSize: 24, fontWeight: 500 }, { children: trade.outputAmount.toSignificant(6) }), void 0) }), void 0), jsxRuntime.jsxs(RowFixed, __assign({ gap: '0px' }, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: trade.outputAmount.currency, size: '20px', style: { marginRight: '12px' } }, void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontSize: 20, fontWeight: 500 }, { children: trade.outputAmount.currency.symbol }), void 0)] }), void 0)] }), void 0), jsxRuntime.jsx(RowBetween, { children: jsxRuntime.jsx(ThemedText.Body, __assign({ fontSize: 14, color: theme.text3 }, { children: jsxRuntime.jsx(FiatValue, { fiatValue: fiatValueOutput, priceImpact: computeFiatValuePriceImpact(fiatValueInput, fiatValueOutput) }, void 0) }), void 0) }, void 0)] }), void 0) }), void 0), jsxRuntime.jsx(RowBetween, __assign({ style: { marginTop: '0.25rem', padding: '0 1rem' } }, { children: jsxRuntime.jsx(TradePrice, { price: trade.executionPrice, showInverted: showInverted, setShowInverted: setShowInverted }, void 0) }), void 0), jsxRuntime.jsx(LightCard, __assign({ style: { padding: '.75rem', marginTop: '0.5rem' } }, { children: jsxRuntime.jsx(AdvancedSwapDetails, { trade: trade, allowedSlippage: allowedSlippage }, void 0) }), void 0), showAcceptChanges ? (jsxRuntime.jsx(SwapShowAcceptChanges, __assign({ justify: "flex-start", gap: '0px' }, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(reactFeather.AlertTriangle, { size: 20, style: { marginRight: '8px', minWidth: 24 } }, void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ color: theme.primary1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Price Updated" }, void 0) }), void 0)] }, void 0), jsxRuntime.jsx(ButtonPrimary, __assign({ style: { padding: '.5rem', width: 'fit-content', fontSize: '0.825rem', borderRadius: '12px' }, onClick: onAcceptChanges }, { children: jsxRuntime.jsx(macro.Trans, { children: "Accept" }, void 0) }), void 0)] }, void 0) }), void 0)) : null, jsxRuntime.jsx(AutoColumn, __assign({ justify: "flex-start", gap: "sm", style: { padding: '.75rem 1rem' } }, { children: trade.tradeType === sdkCore.TradeType.EXACT_INPUT ? (jsxRuntime.jsx(ThemedText.Italic, __assign({ fontWeight: 400, textAlign: "left", style: { width: '100%' } }, { children: jsxRuntime.jsxs(macro.Trans, { children: ["Output is estimated. You will receive at least", ' ', jsxRuntime.jsxs("b", { children: [trade.minimumAmountOut(allowedSlippage).toSignificant(6), " ", trade.outputAmount.currency.symbol] }, void 0), ' ', "or the transaction will revert."] }, void 0) }), void 0)) : (jsxRuntime.jsx(ThemedText.Italic, __assign({ fontWeight: 400, textAlign: "left", style: { width: '100%' } }, { children: jsxRuntime.jsxs(macro.Trans, { children: ["Input is estimated. You will sell at most", ' ', jsxRuntime.jsxs("b", { children: [trade.maximumAmountIn(allowedSlippage).toSignificant(6), " ", trade.inputAmount.currency.symbol] }, void 0), ' ', "or the transaction will revert."] }, void 0) }), void 0)) }), void 0), recipient !== null ? (jsxRuntime.jsx(AutoColumn, __assign({ justify: "flex-start", gap: "sm", style: { padding: '12px 0 0 0px' } }, { children: jsxRuntime.jsx(ThemedText.Main, { children: jsxRuntime.jsxs(macro.Trans, { children: ["Output will be sent to", ' ', jsxRuntime.jsx("b", __assign({ title: recipient }, { children: isAddress(recipient) ? shortenAddress(recipient) : recipient }), void 0)] }, void 0) }, void 0) }), void 0)) : null] }), void 0)); +} +var templateObject_1$9; -/** - * Returns true if the trade requires a confirmation of details before we can submit it - * @param args either a pair of V2 trades or a pair of V3 trades - */ -function tradeMeaningfullyDiffers() { - var args = [] - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i] - } - var _a = __read(args, 2), - tradeA = _a[0], - tradeB = _a[1] - return ( - tradeA.tradeType !== tradeB.tradeType || - !tradeA.inputAmount.currency.equals(tradeB.inputAmount.currency) || - !tradeA.inputAmount.equalTo(tradeB.inputAmount) || - !tradeA.outputAmount.currency.equals(tradeB.outputAmount.currency) || - !tradeA.outputAmount.equalTo(tradeB.outputAmount) - ) +function ConfirmSwapModal(_a) { + var _b, _c, _d, _e, _f, _g; + var trade = _a.trade, originalTrade = _a.originalTrade, onAcceptChanges = _a.onAcceptChanges, allowedSlippage = _a.allowedSlippage, onConfirm = _a.onConfirm, onDismiss = _a.onDismiss, recipient = _a.recipient, swapErrorMessage = _a.swapErrorMessage, isOpen = _a.isOpen, attemptingTxn = _a.attemptingTxn, txHash = _a.txHash; + var showAcceptChanges = React.useMemo(function () { return Boolean(trade && originalTrade && tradeMeaningfullyDiffers(trade, originalTrade)); }, [originalTrade, trade]); + var modalHeader = React.useCallback(function () { + return trade ? (jsxRuntime.jsx(SwapModalHeader, { trade: trade, allowedSlippage: allowedSlippage, recipient: recipient, showAcceptChanges: showAcceptChanges, onAcceptChanges: onAcceptChanges }, void 0)) : null; + }, [allowedSlippage, onAcceptChanges, recipient, showAcceptChanges, trade]); + var modalBottom = React.useCallback(function () { + return trade ? (jsxRuntime.jsx(SwapModalFooter, { onConfirm: onConfirm, trade: trade, disabledConfirm: showAcceptChanges, swapErrorMessage: swapErrorMessage }, void 0)) : null; + }, [onConfirm, showAcceptChanges, swapErrorMessage, trade]); + // text to show while loading + var pendingText = (jsxRuntime.jsxs(macro.Trans, { children: ["Swapping ", (_b = trade === null || trade === void 0 ? void 0 : trade.inputAmount) === null || _b === void 0 ? void 0 : _b.toSignificant(6), " ", (_d = (_c = trade === null || trade === void 0 ? void 0 : trade.inputAmount) === null || _c === void 0 ? void 0 : _c.currency) === null || _d === void 0 ? void 0 : _d.symbol, " for", ' ', (_e = trade === null || trade === void 0 ? void 0 : trade.outputAmount) === null || _e === void 0 ? void 0 : _e.toSignificant(6), " ", (_g = (_f = trade === null || trade === void 0 ? void 0 : trade.outputAmount) === null || _f === void 0 ? void 0 : _f.currency) === null || _g === void 0 ? void 0 : _g.symbol] }, void 0)); + var confirmationContent = React.useCallback(function () { + return swapErrorMessage ? (jsxRuntime.jsx(TransactionErrorContent, { onDismiss: onDismiss, message: swapErrorMessage }, void 0)) : (jsxRuntime.jsx(ConfirmationModalContent, { title: jsxRuntime.jsx(macro.Trans, { children: "Confirm Swap" }, void 0), onDismiss: onDismiss, topContent: modalHeader, bottomContent: modalBottom }, void 0)); + }, [onDismiss, modalBottom, modalHeader, swapErrorMessage]); + return (jsxRuntime.jsx(TransactionConfirmationModal, { isOpen: isOpen, onDismiss: onDismiss, attemptingTxn: attemptingTxn, hash: txHash, content: confirmationContent, pendingText: pendingText, currencyToAdd: trade === null || trade === void 0 ? void 0 : trade.outputAmount.currency }, void 0)); } -function useAddTokenToMetamask(currencyToAdd) { - var library = useActiveWeb3React().library - var token = currencyToAdd === null || currencyToAdd === void 0 ? void 0 : currencyToAdd.wrapped - var _a = __read(React.useState(), 2), - success = _a[0], - setSuccess = _a[1] - var logoURL = useCurrencyLogoURIs(token)[0] - var addToken = React.useCallback( - function () { - if (library && library.provider.isMetaMask && library.provider.request && token) { - library.provider - .request({ - method: 'wallet_watchAsset', - params: { - //@ts-ignore // need this for incorrect ethers provider type - type: 'ERC20', - options: { - address: token.address, - symbol: token.symbol, - decimals: token.decimals, - image: logoURL, - }, - }, - }) - .then(function (success) { - setSuccess(success) - }) - .catch(function () { - return setSuccess(false) - }) - } else { - setSuccess(false) - } - }, - [library, logoURL, token] - ) - return { addToken, success } -} +var ToggleElement = styled__default["default"].span(templateObject_1$8 || (templateObject_1$8 = __makeTemplateObject(["\n padding: 0.25rem 0.6rem;\n border-radius: 9px;\n background: ", ";\n color: ", ";\n font-size: 14px;\n font-weight: ", ";\n :hover {\n user-select: ", ";\n background: ", ";\n color: ", ";\n }\n"], ["\n padding: 0.25rem 0.6rem;\n border-radius: 9px;\n background: ", ";\n color: ", ";\n font-size: 14px;\n font-weight: ", ";\n :hover {\n user-select: ", ";\n background: ", ";\n color: ", ";\n }\n"])), function (_a) { + var theme = _a.theme, isActive = _a.isActive, isOnSwitch = _a.isOnSwitch; + return (isActive ? (isOnSwitch ? theme.primary1 : theme.bg4) : 'none'); +}, function (_a) { + var theme = _a.theme, isActive = _a.isActive; + return (isActive ? theme.white : theme.text2); +}, function (_a) { + var isOnSwitch = _a.isOnSwitch; + return (isOnSwitch ? '500' : '400'); +}, function (_a) { + var isOnSwitch = _a.isOnSwitch; + return (isOnSwitch ? 'none' : 'initial'); +}, function (_a) { + var theme = _a.theme, isActive = _a.isActive, isOnSwitch = _a.isOnSwitch; + return isActive ? (isOnSwitch ? polished.darken(0.05, theme.primary1) : polished.darken(0.05, theme.bg4)) : 'none'; +}, function (_a) { + var theme = _a.theme, isActive = _a.isActive, isOnSwitch = _a.isOnSwitch; + return (isActive ? (isOnSwitch ? theme.white : theme.white) : theme.text3); +}); +var StyledToggle = styled__default["default"].button(templateObject_2$3 || (templateObject_2$3 = __makeTemplateObject(["\n border-radius: 12px;\n border: none;\n background: ", ";\n display: flex;\n width: fit-content;\n cursor: pointer;\n outline: none;\n padding: 2px;\n"], ["\n border-radius: 12px;\n border: none;\n background: ", ";\n display: flex;\n width: fit-content;\n cursor: pointer;\n outline: none;\n padding: 2px;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg0; +}); +function Toggle(_a) { + var id = _a.id, isActive = _a.isActive, toggle = _a.toggle, _b = _a.checked, checked = _b === void 0 ? jsxRuntime.jsx(macro.Trans, { children: "On" }, void 0) : _b, _c = _a.unchecked, unchecked = _c === void 0 ? jsxRuntime.jsx(macro.Trans, { children: "Off" }, void 0) : _c; + return (jsxRuntime.jsxs(StyledToggle, __assign({ id: id, isActive: isActive, onClick: toggle }, { children: [jsxRuntime.jsx(ToggleElement, __assign({ isActive: isActive, isOnSwitch: true }, { children: checked }), void 0), jsxRuntime.jsx(ToggleElement, __assign({ isActive: !isActive, isOnSwitch: false }, { children: unchecked }), void 0)] }), void 0)); +} +var templateObject_1$8, templateObject_2$3; + +var SlippageError; +(function (SlippageError) { + SlippageError["InvalidInput"] = "InvalidInput"; +})(SlippageError || (SlippageError = {})); +var DeadlineError; +(function (DeadlineError) { + DeadlineError["InvalidInput"] = "InvalidInput"; +})(DeadlineError || (DeadlineError = {})); +var FancyButton = styled__default["default"].button(templateObject_1$7 || (templateObject_1$7 = __makeTemplateObject(["\n color: ", ";\n align-items: center;\n height: 2rem;\n border-radius: 36px;\n font-size: 1rem;\n width: auto;\n min-width: 3.5rem;\n border: 1px solid ", ";\n outline: none;\n background: ", ";\n :hover {\n border: 1px solid ", ";\n }\n :focus {\n border: 1px solid ", ";\n }\n"], ["\n color: ", ";\n align-items: center;\n height: 2rem;\n border-radius: 36px;\n font-size: 1rem;\n width: auto;\n min-width: 3.5rem;\n border: 1px solid ", ";\n outline: none;\n background: ", ";\n :hover {\n border: 1px solid ", ";\n }\n :focus {\n border: 1px solid ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text1; +}, function (_a) { + var theme = _a.theme; + return theme.bg3; +}, function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var theme = _a.theme; + return theme.bg4; +}, function (_a) { + var theme = _a.theme; + return theme.primary1; +}); +var Option = styled__default["default"](FancyButton)(templateObject_2$2 || (templateObject_2$2 = __makeTemplateObject(["\n margin-right: 8px;\n :hover {\n cursor: pointer;\n }\n background-color: ", ";\n color: ", ";\n"], ["\n margin-right: 8px;\n :hover {\n cursor: pointer;\n }\n background-color: ", ";\n color: ", ";\n"])), function (_a) { + var active = _a.active, theme = _a.theme; + return active && theme.primary1; +}, function (_a) { + var active = _a.active, theme = _a.theme; + return (active ? theme.white : theme.text1); +}); +var Input = styled__default["default"].input(templateObject_3$2 || (templateObject_3$2 = __makeTemplateObject(["\n background: ", ";\n font-size: 16px;\n width: auto;\n outline: none;\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n }\n color: ", ";\n text-align: right;\n"], ["\n background: ", ";\n font-size: 16px;\n width: auto;\n outline: none;\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n }\n color: ", ";\n text-align: right;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var theme = _a.theme, color = _a.color; + return (color === 'red' ? theme.red1 : theme.text1); +}); +var OptionCustom = styled__default["default"](FancyButton)(templateObject_4$2 || (templateObject_4$2 = __makeTemplateObject(["\n height: 2rem;\n position: relative;\n padding: 0 0.75rem;\n flex: 1;\n border: ", ";\n :hover {\n border: ", ";\n }\n\n input {\n width: 100%;\n height: 100%;\n border: 0px;\n border-radius: 2rem;\n }\n"], ["\n height: 2rem;\n position: relative;\n padding: 0 0.75rem;\n flex: 1;\n border: ", ";\n :hover {\n border: ", ";\n }\n\n input {\n width: 100%;\n height: 100%;\n border: 0px;\n border-radius: 2rem;\n }\n"])), function (_a) { + var theme = _a.theme, active = _a.active, warning = _a.warning; + return active ? "1px solid " + (warning ? theme.red1 : theme.primary1) : warning && "1px solid " + theme.red1; +}, function (_a) { + var theme = _a.theme, active = _a.active, warning = _a.warning; + return active && "1px solid " + (warning ? polished.darken(0.1, theme.red1) : polished.darken(0.1, theme.primary1)); +}); +var SlippageEmojiContainer = styled__default["default"].span(templateObject_6$1 || (templateObject_6$1 = __makeTemplateObject(["\n color: #f3841e;\n ", "\n"], ["\n color: #f3841e;\n ", "\n"])), function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToSmall(templateObject_5$2 || (templateObject_5$2 = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); +}); +var THREE_DAYS_IN_SECONDS = ms__default["default"](templateObject_7$1 || (templateObject_7$1 = __makeTemplateObject(["3 days"], ["3 days"]))) / 1000; +function TransactionSettings(_a) { + var placeholderSlippage = _a.placeholderSlippage; + var chainId = useActiveWeb3React().chainId; + var theme = React.useContext(styled.ThemeContext); + var userSlippageTolerance = useUserSlippageTolerance(); + var setUserSlippageTolerance = useSetUserSlippageTolerance(); + var _b = __read(useUserTransactionTTL(), 2), deadline = _b[0], setDeadline = _b[1]; + var _c = __read(React.useState(''), 2), slippageInput = _c[0], setSlippageInput = _c[1]; + var _d = __read(React.useState(false), 2), slippageError = _d[0], setSlippageError = _d[1]; + var _e = __read(React.useState(''), 2), deadlineInput = _e[0], setDeadlineInput = _e[1]; + var _f = __read(React.useState(false), 2), deadlineError = _f[0], setDeadlineError = _f[1]; + function parseSlippageInput(value) { + // populate what the user typed and clear the error + setSlippageInput(value); + setSlippageError(false); + if (value.length === 0) { + setUserSlippageTolerance('auto'); + } + else { + var parsed = Math.floor(Number.parseFloat(value) * 100); + if (!Number.isInteger(parsed) || parsed < 0 || parsed > 5000) { + setUserSlippageTolerance('auto'); + if (value !== '.') { + setSlippageError(SlippageError.InvalidInput); + } + } + else { + setUserSlippageTolerance(new sdkCore.Percent(parsed, 10000)); + } + } + } + var tooLow = userSlippageTolerance !== 'auto' && userSlippageTolerance.lessThan(new sdkCore.Percent(5, 10000)); + var tooHigh = userSlippageTolerance !== 'auto' && userSlippageTolerance.greaterThan(new sdkCore.Percent(1, 100)); + function parseCustomDeadline(value) { + // populate what the user typed and clear the error + setDeadlineInput(value); + setDeadlineError(false); + if (value.length === 0) { + setDeadline(DEFAULT_DEADLINE_FROM_NOW); + } + else { + try { + var parsed = Math.floor(Number.parseFloat(value) * 60); + if (!Number.isInteger(parsed) || parsed < 60 || parsed > THREE_DAYS_IN_SECONDS) { + setDeadlineError(DeadlineError.InvalidInput); + } + else { + setDeadline(parsed); + } + } + catch (error) { + console.error(error); + setDeadlineError(DeadlineError.InvalidInput); + } + } + } + var showCustomDeadlineRow = Boolean(chainId && !L2_CHAIN_IDS.includes(chainId)); + return (jsxRuntime.jsxs(AutoColumn, __assign({ gap: "md" }, { children: [jsxRuntime.jsxs(AutoColumn, __assign({ gap: "sm" }, { children: [jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(ThemedText.Black, __assign({ fontWeight: 400, fontSize: 14, color: theme.text2 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Slippage tolerance" }, void 0) }), void 0), jsxRuntime.jsx(QuestionHelper, { text: jsxRuntime.jsx(macro.Trans, { children: "Your transaction will revert if the price changes unfavorably by more than this percentage." }, void 0) }, void 0)] }, void 0), jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(Option, __assign({ onClick: function () { + parseSlippageInput(''); + }, active: userSlippageTolerance === 'auto' }, { children: jsxRuntime.jsx(macro.Trans, { children: "Auto" }, void 0) }), void 0), jsxRuntime.jsx(OptionCustom, __assign({ active: userSlippageTolerance !== 'auto', warning: !!slippageError, tabIndex: -1 }, { children: jsxRuntime.jsxs(RowBetween, { children: [tooLow || tooHigh ? (jsxRuntime.jsx(SlippageEmojiContainer, { children: jsxRuntime.jsx("span", __assign({ role: "img", "aria-label": "warning" }, { children: "\u26A0\uFE0F" }), void 0) }, void 0)) : null, jsxRuntime.jsx(Input, { placeholder: placeholderSlippage.toFixed(2), value: slippageInput.length > 0 + ? slippageInput + : userSlippageTolerance === 'auto' + ? '' + : userSlippageTolerance.toFixed(2), onChange: function (e) { return parseSlippageInput(e.target.value); }, onBlur: function () { + setSlippageInput(''); + setSlippageError(false); + }, color: slippageError ? 'red' : '' }, void 0), "%"] }, void 0) }), void 0)] }, void 0), slippageError || tooLow || tooHigh ? (jsxRuntime.jsx(RowBetween, __assign({ style: { + fontSize: '14px', + paddingTop: '7px', + color: slippageError ? 'red' : '#F3841E', + } }, { children: slippageError ? (jsxRuntime.jsx(macro.Trans, { children: "Enter a valid slippage percentage" }, void 0)) : tooLow ? (jsxRuntime.jsx(macro.Trans, { children: "Your transaction may fail" }, void 0)) : (jsxRuntime.jsx(macro.Trans, { children: "Your transaction may be frontrun" }, void 0)) }), void 0)) : null] }), void 0), showCustomDeadlineRow && (jsxRuntime.jsxs(AutoColumn, __assign({ gap: "sm" }, { children: [jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(ThemedText.Black, __assign({ fontSize: 14, fontWeight: 400, color: theme.text2 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Transaction deadline" }, void 0) }), void 0), jsxRuntime.jsx(QuestionHelper, { text: jsxRuntime.jsx(macro.Trans, { children: "Your transaction will revert if it is pending for more than this period of time." }, void 0) }, void 0)] }, void 0), jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(OptionCustom, __assign({ style: { width: '80px' }, warning: !!deadlineError, tabIndex: -1 }, { children: jsxRuntime.jsx(Input, { placeholder: (DEFAULT_DEADLINE_FROM_NOW / 60).toString(), value: deadlineInput.length > 0 + ? deadlineInput + : deadline === DEFAULT_DEADLINE_FROM_NOW + ? '' + : (deadline / 60).toString(), onChange: function (e) { return parseCustomDeadline(e.target.value); }, onBlur: function () { + setDeadlineInput(''); + setDeadlineError(false); + }, color: deadlineError ? 'red' : '' }, void 0) }), void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ style: { paddingLeft: '8px' }, fontSize: 14 }, { children: jsxRuntime.jsx(macro.Trans, { children: "minutes" }, void 0) }), void 0)] }, void 0)] }), void 0))] }), void 0)); +} +var templateObject_1$7, templateObject_2$2, templateObject_3$2, templateObject_4$2, templateObject_5$2, templateObject_6$1, templateObject_7$1; + +var StyledMenuIcon = styled__default["default"](reactFeather.Settings)(templateObject_1$6 || (templateObject_1$6 = __makeTemplateObject(["\n height: 20px;\n width: 20px;\n\n > * {\n stroke: ", ";\n }\n\n :hover {\n opacity: 0.7;\n }\n"], ["\n height: 20px;\n width: 20px;\n\n > * {\n stroke: ", ";\n }\n\n :hover {\n opacity: 0.7;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text1; +}); +var StyledCloseIcon = styled__default["default"](reactFeather.X)(templateObject_2$1 || (templateObject_2$1 = __makeTemplateObject(["\n height: 20px;\n width: 20px;\n :hover {\n cursor: pointer;\n }\n\n > * {\n stroke: ", ";\n }\n"], ["\n height: 20px;\n width: 20px;\n :hover {\n cursor: pointer;\n }\n\n > * {\n stroke: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text1; +}); +var StyledMenuButton = styled__default["default"].button(templateObject_3$1 || (templateObject_3$1 = __makeTemplateObject(["\n position: relative;\n width: 100%;\n height: 100%;\n border: none;\n background-color: transparent;\n margin: 0;\n padding: 0;\n border-radius: 0.5rem;\n height: 20px;\n\n :hover,\n :focus {\n cursor: pointer;\n outline: none;\n }\n"], ["\n position: relative;\n width: 100%;\n height: 100%;\n border: none;\n background-color: transparent;\n margin: 0;\n padding: 0;\n border-radius: 0.5rem;\n height: 20px;\n\n :hover,\n :focus {\n cursor: pointer;\n outline: none;\n }\n"]))); +var EmojiWrapper = styled__default["default"].div(templateObject_4$1 || (templateObject_4$1 = __makeTemplateObject(["\n position: absolute;\n bottom: -6px;\n right: 0px;\n font-size: 14px;\n"], ["\n position: absolute;\n bottom: -6px;\n right: 0px;\n font-size: 14px;\n"]))); +var StyledMenu = styled__default["default"].div(templateObject_5$1 || (templateObject_5$1 = __makeTemplateObject(["\n margin-left: 0.5rem;\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n text-align: left;\n"], ["\n margin-left: 0.5rem;\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n text-align: left;\n"]))); +var MenuFlyout = styled__default["default"].span(templateObject_7 || (templateObject_7 = __makeTemplateObject(["\n min-width: 20.125rem;\n background-color: ", ";\n border: 1px solid ", ";\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 border-radius: 12px;\n display: flex;\n flex-direction: column;\n font-size: 1rem;\n position: absolute;\n top: 2rem;\n right: 0rem;\n z-index: 100;\n\n ", ";\n\n user-select: none;\n"], ["\n min-width: 20.125rem;\n background-color: ", ";\n border: 1px solid ", ";\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 border-radius: 12px;\n display: flex;\n flex-direction: column;\n font-size: 1rem;\n position: absolute;\n top: 2rem;\n right: 0rem;\n z-index: 100;\n\n ", ";\n\n user-select: none;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}, function (_a) { + var theme = _a.theme; + return theme.bg3; +}, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToMedium(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n min-width: 18.125rem;\n "], ["\n min-width: 18.125rem;\n "]))); +}); +var Break = styled__default["default"].div(templateObject_8 || (templateObject_8 = __makeTemplateObject(["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"], ["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg3; +}); +var ModalContentWrapper = styled__default["default"].div(templateObject_9 || (templateObject_9 = __makeTemplateObject(["\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 2rem 0;\n background-color: ", ";\n border-radius: 20px;\n"], ["\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 2rem 0;\n background-color: ", ";\n border-radius: 20px;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}); +function SettingsTab(_a) { + var placeholderSlippage = _a.placeholderSlippage; + var chainId = useActiveWeb3React().chainId; + var node = React.useRef(); + var open = useModalOpen(ApplicationModal.SETTINGS); + var toggle = useToggleSettingsMenu(); + var theme = React.useContext(styled.ThemeContext); + var _b = __read(useExpertModeManager(), 2), expertMode = _b[0], toggleExpertMode = _b[1]; + var _c = __read(useClientSideRouter(), 2), clientSideRouter = _c[0], setClientSideRouter = _c[1]; + // show confirmation view before turning on + var _d = __read(React.useState(false), 2), showConfirmation = _d[0], setShowConfirmation = _d[1]; + useOnClickOutside(node, open ? toggle : undefined); + return ( + // https://github.com/DefinitelyTyped/DefinitelyTyped/issues/30451 + jsxRuntime.jsxs(StyledMenu, __assign({ ref: node }, { children: [jsxRuntime.jsx(Modal, __assign({ isOpen: showConfirmation, onDismiss: function () { return setShowConfirmation(false); }, maxHeight: 100 }, { children: jsxRuntime.jsx(ModalContentWrapper, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "lg" }, { children: [jsxRuntime.jsxs(RowBetween, __assign({ style: { padding: '0 2rem' } }, { children: [jsxRuntime.jsx("div", {}, void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Are you sure?" }, void 0) }), void 0), jsxRuntime.jsx(StyledCloseIcon, { onClick: function () { return setShowConfirmation(false); } }, void 0)] }), void 0), jsxRuntime.jsx(Break, {}, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "lg", style: { padding: '0 2rem' } }, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds." }, void 0) }), void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 600, fontSize: 20 }, { children: jsxRuntime.jsx(macro.Trans, { children: "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING." }, void 0) }), void 0), jsxRuntime.jsx(ButtonError, __assign({ error: true, padding: '12px', onClick: function () { + var confirmWord = macro.t(templateObject_10 || (templateObject_10 = __makeTemplateObject(["confirm"], ["confirm"]))); + if (window.prompt(macro.t(templateObject_11 || (templateObject_11 = __makeTemplateObject(["Please type the word \"", "\" to enable expert mode."], ["Please type the word \"", "\" to enable expert mode."])), confirmWord)) === confirmWord) { + toggleExpertMode(); + setShowConfirmation(false); + } + } }, { children: jsxRuntime.jsx(rebass.Text, __assign({ fontSize: 20, fontWeight: 500, id: "confirm-expert-mode" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Turn On Expert Mode" }, void 0) }), void 0) }), void 0)] }), void 0)] }), void 0) }, void 0) }), void 0), jsxRuntime.jsxs(StyledMenuButton, __assign({ onClick: toggle, id: "open-settings-dialog-button", "aria-label": macro.t(templateObject_12 || (templateObject_12 = __makeTemplateObject(["Transaction Settings"], ["Transaction Settings"]))) }, { children: [jsxRuntime.jsx(StyledMenuIcon, {}, void 0), expertMode ? (jsxRuntime.jsx(EmojiWrapper, { children: jsxRuntime.jsx("span", __assign({ role: "img", "aria-label": "wizard-icon" }, { children: "\uD83E\uDDD9" }), void 0) }, void 0)) : null] }), void 0), open && (jsxRuntime.jsx(MenuFlyout, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "md", style: { padding: '1rem' } }, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 600, fontSize: 14 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Transaction Settings" }, void 0) }), void 0), jsxRuntime.jsx(TransactionSettings, { placeholderSlippage: placeholderSlippage }, void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 600, fontSize: 14 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Interface Settings" }, void 0) }), void 0), chainId && AUTO_ROUTER_SUPPORTED_CHAINS.includes(chainId) && (jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(ThemedText.Black, __assign({ fontWeight: 400, fontSize: 14, color: theme.text2 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Auto Router API" }, void 0) }), void 0), jsxRuntime.jsx(QuestionHelper, { text: jsxRuntime.jsx(macro.Trans, { children: "Use the Uniswap Labs API to get faster quotes." }, void 0) }, void 0)] }, void 0), jsxRuntime.jsx(Toggle, { id: "toggle-optimized-router-button", isActive: !clientSideRouter, toggle: function () { + ReactGA__default["default"].event({ + category: 'Routing', + action: clientSideRouter ? 'enable routing API' : 'disable routing API', + }); + setClientSideRouter(!clientSideRouter); + } }, void 0)] }, void 0)), jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(ThemedText.Black, __assign({ fontWeight: 400, fontSize: 14, color: theme.text2 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Expert Mode" }, void 0) }), void 0), jsxRuntime.jsx(QuestionHelper, { text: jsxRuntime.jsx(macro.Trans, { children: "Allow high price impact trades and skip the confirm screen. Use at your own risk." }, void 0) }, void 0)] }, void 0), jsxRuntime.jsx(Toggle, { id: "toggle-expert-mode-button", isActive: expertMode, toggle: expertMode + ? function () { + toggleExpertMode(); + setShowConfirmation(false); + } + : function () { + toggle(); + setShowConfirmation(true); + } }, void 0)] }, void 0)] }), void 0) }, void 0))] }), void 0)); +} +var templateObject_1$6, templateObject_2$1, templateObject_3$1, templateObject_4$1, templateObject_5$1, templateObject_6, templateObject_7, templateObject_8, templateObject_9, templateObject_10, templateObject_11, templateObject_12; -var Circle$1 = - 'data:image/svg+xml,%3Csvg%20width%3D%2294%22%20height%3D%2294%22%20viewBox%3D%220%200%2094%2094%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%20%20%3Cpath%20d%3D%22M92%2047C92%2022.1472%2071.8528%202%2047%202C22.1472%202%202%2022.1472%202%2047C2%2071.8528%2022.1472%2092%2047%2092%22%20stroke%3D%22%232172E5%22%20stroke-width%3D%223%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E' - -var MetaMaskLogo = 'f89237c6bc3f84db.png' - -var VoteOption -;(function (VoteOption) { - VoteOption[(VoteOption['Against'] = 0)] = 'Against' - VoteOption[(VoteOption['For'] = 1)] = 'For' - VoteOption[(VoteOption['Abstain'] = 2)] = 'Abstain' -})(VoteOption || (VoteOption = {})) - -function formatAmount(amountRaw, decimals, sigFigs) { - return new sdkCore.Fraction( - amountRaw, - JSBI__default['default'].exponentiate( - JSBI__default['default'].BigInt(10), - JSBI__default['default'].BigInt(decimals) - ) - ).toSignificant(sigFigs) -} -function FormattedCurrencyAmount(_a) { - var rawAmount = _a.rawAmount, - symbol = _a.symbol, - decimals = _a.decimals, - sigFigs = _a.sigFigs - return jsxRuntime.jsxs( - jsxRuntime.Fragment, - { children: [formatAmount(rawAmount, decimals, sigFigs), ' ', symbol] }, - void 0 - ) -} -function FormattedCurrencyAmountManaged(_a) { - var _b - var rawAmount = _a.rawAmount, - currencyId = _a.currencyId, - _c = _a.sigFigs, - sigFigs = _c === void 0 ? 6 : _c - var currency = useCurrency(currencyId) - return currency - ? jsxRuntime.jsx( - FormattedCurrencyAmount, - { - rawAmount, - decimals: currency.decimals, - sigFigs, - symbol: (_b = currency.symbol) !== null && _b !== void 0 ? _b : '???', - }, - void 0 - ) - : null -} -function ClaimSummary(_a) { - var _b = _a.info, - recipient = _b.recipient, - uniAmountRaw = _b.uniAmountRaw - var ENSName = useENSName().ENSName - return typeof uniAmountRaw === 'string' - ? jsxRuntime.jsxs( - macro.Trans, - { - children: [ - 'Claim ', - jsxRuntime.jsx( - FormattedCurrencyAmount, - { rawAmount: uniAmountRaw, symbol: 'UNI', decimals: 18, sigFigs: 4 }, - void 0 - ), - ' for', - ' ', - ENSName !== null && ENSName !== void 0 ? ENSName : recipient, - ], - }, - void 0 - ) - : jsxRuntime.jsxs( - macro.Trans, - { children: ['Claim UNI reward for ', ENSName !== null && ENSName !== void 0 ? ENSName : recipient] }, - void 0 - ) -} -function SubmitProposalTransactionSummary(_) { - return jsxRuntime.jsx(macro.Trans, { children: 'Submit new proposal' }, void 0) -} -function ApprovalSummary(_a) { - var info = _a.info - var token = useToken(info.tokenAddress) - return jsxRuntime.jsxs( - macro.Trans, - { children: ['Approve ', token === null || token === void 0 ? void 0 : token.symbol] }, - void 0 - ) -} -function VoteSummary(_a) { - var info = _a.info - var proposalKey = info.governorAddress + '/' + info.proposalId - if (info.reason && info.reason.trim().length > 0) { - switch (info.decision) { - case VoteOption.For: - return jsxRuntime.jsxs(macro.Trans, { children: ['Vote for proposal ', proposalKey] }, void 0) - case VoteOption.Abstain: - return jsxRuntime.jsxs(macro.Trans, { children: ['Vote to abstain on proposal ', proposalKey] }, void 0) - case VoteOption.Against: - return jsxRuntime.jsxs(macro.Trans, { children: ['Vote against proposal ', proposalKey] }, void 0) - } - } else { - switch (info.decision) { - case VoteOption.For: - return jsxRuntime.jsxs( - macro.Trans, - { children: ['Vote for proposal ', proposalKey, ' with reason "', info.reason, '"'] }, - void 0 - ) - case VoteOption.Abstain: - return jsxRuntime.jsxs( - macro.Trans, - { children: ['Vote to abstain on proposal ', proposalKey, ' with reason "', info.reason, '"'] }, - void 0 - ) - case VoteOption.Against: - return jsxRuntime.jsxs( - macro.Trans, - { children: ['Vote against proposal ', proposalKey, ' with reason "', info.reason, '"'] }, - void 0 - ) - } - } -} -function DelegateSummary(_a) { - var delegatee = _a.info.delegatee - var ENSName = useENSName(delegatee).ENSName - return jsxRuntime.jsxs( - macro.Trans, - { children: ['Delegate voting power to ', ENSName !== null && ENSName !== void 0 ? ENSName : delegatee] }, - void 0 - ) -} -function WrapSummary(_a) { - var _b, _c, _d, _e, _f, _g - var _h = _a.info, - chainId = _h.chainId, - currencyAmountRaw = _h.currencyAmountRaw, - unwrapped = _h.unwrapped - var native = chainId ? nativeOnChain(chainId) : undefined - if (unwrapped) { - return jsxRuntime.jsxs( - macro.Trans, - { - children: [ - 'Unwrap', - ' ', - jsxRuntime.jsx( - FormattedCurrencyAmount, - { - rawAmount: currencyAmountRaw, - symbol: - (_c = - (_b = native === null || native === void 0 ? void 0 : native.wrapped) === null || _b === void 0 - ? void 0 - : _b.symbol) !== null && _c !== void 0 - ? _c - : 'WETH', - decimals: 18, - sigFigs: 6, - }, - void 0 - ), - ' ', - 'to ', - (_d = native === null || native === void 0 ? void 0 : native.symbol) !== null && _d !== void 0 ? _d : 'ETH', - ], - }, - void 0 - ) - } else { - return jsxRuntime.jsxs( - macro.Trans, - { - children: [ - 'Wrap', - ' ', - jsxRuntime.jsx( - FormattedCurrencyAmount, - { - rawAmount: currencyAmountRaw, - symbol: - (_e = native === null || native === void 0 ? void 0 : native.symbol) !== null && _e !== void 0 - ? _e - : 'ETH', - decimals: 18, - sigFigs: 6, - }, - void 0 - ), - ' ', - 'to ', - (_g = - (_f = native === null || native === void 0 ? void 0 : native.wrapped) === null || _f === void 0 - ? void 0 - : _f.symbol) !== null && _g !== void 0 - ? _g - : 'WETH', - ], - }, - void 0 - ) - } -} -function DepositLiquidityStakingSummary(_) { - // not worth rendering the tokens since you can should no longer deposit liquidity in the staking contracts - // todo: deprecate and delete the code paths that allow this, show user more information - return jsxRuntime.jsx(macro.Trans, { children: 'Deposit liquidity' }, void 0) -} -function WithdrawLiquidityStakingSummary(_) { - return jsxRuntime.jsx(macro.Trans, { children: 'Withdraw deposited liquidity' }, void 0) -} -function MigrateLiquidityToV3Summary(_a) { - var _b = _a.info, - baseCurrencyId = _b.baseCurrencyId, - quoteCurrencyId = _b.quoteCurrencyId - var baseCurrency = useCurrency(baseCurrencyId) - var quoteCurrency = useCurrency(quoteCurrencyId) - return jsxRuntime.jsxs( - macro.Trans, - { - children: [ - 'Migrate ', - baseCurrency === null || baseCurrency === void 0 ? void 0 : baseCurrency.symbol, - '/', - quoteCurrency === null || quoteCurrency === void 0 ? void 0 : quoteCurrency.symbol, - ' liquidity to V3', - ], - }, - void 0 - ) -} -function CreateV3PoolSummary(_a) { - var _b = _a.info, - quoteCurrencyId = _b.quoteCurrencyId, - baseCurrencyId = _b.baseCurrencyId - var baseCurrency = useCurrency(baseCurrencyId) - var quoteCurrency = useCurrency(quoteCurrencyId) - return jsxRuntime.jsxs( - macro.Trans, - { - children: [ - 'Create ', - baseCurrency === null || baseCurrency === void 0 ? void 0 : baseCurrency.symbol, - '/', - quoteCurrency === null || quoteCurrency === void 0 ? void 0 : quoteCurrency.symbol, - ' V3 pool', - ], - }, - void 0 - ) -} -function CollectFeesSummary(_a) { - var _b = _a.info, - currencyId0 = _b.currencyId0, - currencyId1 = _b.currencyId1 - var currency0 = useCurrency(currencyId0) - var currency1 = useCurrency(currencyId1) - return jsxRuntime.jsxs( - macro.Trans, - { - children: [ - 'Collect ', - currency0 === null || currency0 === void 0 ? void 0 : currency0.symbol, - '/', - currency1 === null || currency1 === void 0 ? void 0 : currency1.symbol, - ' fees', - ], - }, - void 0 - ) -} -function RemoveLiquidityV3Summary(_a) { - var _b = _a.info, - baseCurrencyId = _b.baseCurrencyId, - quoteCurrencyId = _b.quoteCurrencyId, - expectedAmountBaseRaw = _b.expectedAmountBaseRaw, - expectedAmountQuoteRaw = _b.expectedAmountQuoteRaw - return jsxRuntime.jsxs( - macro.Trans, - { - children: [ - 'Remove', - ' ', - jsxRuntime.jsx( - FormattedCurrencyAmountManaged, - { rawAmount: expectedAmountBaseRaw, currencyId: baseCurrencyId, sigFigs: 3 }, - void 0 - ), - ' and', - ' ', - jsxRuntime.jsx( - FormattedCurrencyAmountManaged, - { rawAmount: expectedAmountQuoteRaw, currencyId: quoteCurrencyId, sigFigs: 3 }, - void 0 - ), - ], - }, - void 0 - ) -} -function AddLiquidityV3PoolSummary(_a) { - var _b = _a.info, - createPool = _b.createPool, - quoteCurrencyId = _b.quoteCurrencyId, - baseCurrencyId = _b.baseCurrencyId - var baseCurrency = useCurrency(baseCurrencyId) - var quoteCurrency = useCurrency(quoteCurrencyId) - return createPool - ? jsxRuntime.jsxs( - macro.Trans, - { - children: [ - 'Create pool and add ', - baseCurrency === null || baseCurrency === void 0 ? void 0 : baseCurrency.symbol, - '/', - quoteCurrency === null || quoteCurrency === void 0 ? void 0 : quoteCurrency.symbol, - ' V3 liquidity', - ], - }, - void 0 - ) - : jsxRuntime.jsxs( - macro.Trans, - { - children: [ - 'Add ', - baseCurrency === null || baseCurrency === void 0 ? void 0 : baseCurrency.symbol, - '/', - quoteCurrency === null || quoteCurrency === void 0 ? void 0 : quoteCurrency.symbol, - ' V3 liquidity', - ], - }, - void 0 - ) -} -function AddLiquidityV2PoolSummary(_a) { - var _b = _a.info, - quoteCurrencyId = _b.quoteCurrencyId, - expectedAmountBaseRaw = _b.expectedAmountBaseRaw, - expectedAmountQuoteRaw = _b.expectedAmountQuoteRaw, - baseCurrencyId = _b.baseCurrencyId - return jsxRuntime.jsxs( - macro.Trans, - { - children: [ - 'Add ', - jsxRuntime.jsx( - FormattedCurrencyAmountManaged, - { rawAmount: expectedAmountBaseRaw, currencyId: baseCurrencyId, sigFigs: 3 }, - void 0 - ), - ' ', - 'and ', - jsxRuntime.jsx( - FormattedCurrencyAmountManaged, - { rawAmount: expectedAmountQuoteRaw, currencyId: quoteCurrencyId, sigFigs: 3 }, - void 0 - ), - ' ', - 'to Uniswap V2', - ], - }, - void 0 - ) -} -function SwapSummary(_a) { - var info = _a.info - if (info.tradeType === sdkCore.TradeType.EXACT_INPUT) { - return jsxRuntime.jsxs( - macro.Trans, - { - children: [ - 'Swap exactly', - ' ', - jsxRuntime.jsx( - FormattedCurrencyAmountManaged, - { rawAmount: info.inputCurrencyAmountRaw, currencyId: info.inputCurrencyId, sigFigs: 6 }, - void 0 - ), - ' ', - 'for', - ' ', - jsxRuntime.jsx( - FormattedCurrencyAmountManaged, - { rawAmount: info.expectedOutputCurrencyAmountRaw, currencyId: info.outputCurrencyId, sigFigs: 6 }, - void 0 - ), - ], - }, - void 0 - ) - } else { - return jsxRuntime.jsxs( - macro.Trans, - { - children: [ - 'Swap', - ' ', - jsxRuntime.jsx( - FormattedCurrencyAmountManaged, - { rawAmount: info.expectedInputCurrencyAmountRaw, currencyId: info.inputCurrencyId, sigFigs: 6 }, - void 0 - ), - ' ', - 'for exactly', - ' ', - jsxRuntime.jsx( - FormattedCurrencyAmountManaged, - { rawAmount: info.outputCurrencyAmountRaw, currencyId: info.outputCurrencyId, sigFigs: 6 }, - void 0 - ), - ], - }, - void 0 - ) - } -} -function TransactionSummary(_a) { - var info = _a.info - switch (info.type) { - case TransactionType.ADD_LIQUIDITY_V3_POOL: - return jsxRuntime.jsx(AddLiquidityV3PoolSummary, { info }, void 0) - case TransactionType.ADD_LIQUIDITY_V2_POOL: - return jsxRuntime.jsx(AddLiquidityV2PoolSummary, { info }, void 0) - case TransactionType.CLAIM: - return jsxRuntime.jsx(ClaimSummary, { info }, void 0) - case TransactionType.DEPOSIT_LIQUIDITY_STAKING: - return jsxRuntime.jsx(DepositLiquidityStakingSummary, { info }, void 0) - case TransactionType.WITHDRAW_LIQUIDITY_STAKING: - return jsxRuntime.jsx(WithdrawLiquidityStakingSummary, { info }, void 0) - case TransactionType.SWAP: - return jsxRuntime.jsx(SwapSummary, { info }, void 0) - case TransactionType.APPROVAL: - return jsxRuntime.jsx(ApprovalSummary, { info }, void 0) - case TransactionType.VOTE: - return jsxRuntime.jsx(VoteSummary, { info }, void 0) - case TransactionType.DELEGATE: - return jsxRuntime.jsx(DelegateSummary, { info }, void 0) - case TransactionType.WRAP: - return jsxRuntime.jsx(WrapSummary, { info }, void 0) - case TransactionType.CREATE_V3_POOL: - return jsxRuntime.jsx(CreateV3PoolSummary, { info }, void 0) - case TransactionType.MIGRATE_LIQUIDITY_V3: - return jsxRuntime.jsx(MigrateLiquidityToV3Summary, { info }, void 0) - case TransactionType.COLLECT_FEES: - return jsxRuntime.jsx(CollectFeesSummary, { info }, void 0) - case TransactionType.REMOVE_LIQUIDITY_V3: - return jsxRuntime.jsx(RemoveLiquidityV3Summary, { info }, void 0) - case TransactionType.SUBMIT_PROPOSAL: - return jsxRuntime.jsx(SubmitProposalTransactionSummary, { info }, void 0) - } -} +var StyledSwapHeader = styled__default["default"].div(templateObject_1$5 || (templateObject_1$5 = __makeTemplateObject(["\n padding: 1rem 1.25rem 0.5rem 1.25rem;\n width: 100%;\n color: ", ";\n"], ["\n padding: 1rem 1.25rem 0.5rem 1.25rem;\n width: 100%;\n color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.text2; +}); +function SwapHeader(_a) { + var allowedSlippage = _a.allowedSlippage; + return (jsxRuntime.jsx(StyledSwapHeader, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(RowFixed, { children: jsxRuntime.jsx(ThemedText.Black, __assign({ fontWeight: 500, fontSize: 16, style: { marginRight: '8px' } }, { children: jsxRuntime.jsx(macro.Trans, { children: "Swap" }, void 0) }), void 0) }, void 0), jsxRuntime.jsx(RowFixed, { children: jsxRuntime.jsx(SettingsTab, { placeholderSlippage: allowedSlippage }, void 0) }, void 0)] }, void 0) }, void 0)); +} +var templateObject_1$5; -var Wrapper$1 = styled__default['default'].div( - templateObject_1$d || - (templateObject_1$d = __makeTemplateObject( - ['\n height: 90px;\n width: 90px;\n'], - ['\n height: 90px;\n width: 90px;\n'] - )) -) -var dash = styled.keyframes( - templateObject_2$6 || - (templateObject_2$6 = __makeTemplateObject( - ['\n 0% {\n stroke-dashoffset: 1000;\n }\n 100% {\n stroke-dashoffset: 0;\n }\n'], - ['\n 0% {\n stroke-dashoffset: 1000;\n }\n 100% {\n stroke-dashoffset: 0;\n }\n'] - )) -) -var dashCheck = styled.keyframes( - templateObject_3$4 || - (templateObject_3$4 = __makeTemplateObject( - ['\n 0% {\n stroke-dashoffset: -100;\n }\n 100% {\n stroke-dashoffset: 900;\n }\n'], - ['\n 0% {\n stroke-dashoffset: -100;\n }\n 100% {\n stroke-dashoffset: 900;\n }\n'] - )) -) -var Circle = styled__default['default'].circle( - templateObject_4$3 || - (templateObject_4$3 = __makeTemplateObject( - [ - '\n stroke-dasharray: 1000;\n stroke-dashoffset: 0;\n -webkit-animation: ', - ' 0.9s ease-in-out;\n animation: ', - ' 0.9s ease-in-out;\n', - ], - [ - '\n stroke-dasharray: 1000;\n stroke-dashoffset: 0;\n -webkit-animation: ', - ' 0.9s ease-in-out;\n animation: ', - ' 0.9s ease-in-out;\n', - ] - )), - dash, - dash -) -var PolyLine = styled__default['default'].polyline( - templateObject_5$3 || - (templateObject_5$3 = __makeTemplateObject( - [ - '\n stroke-dasharray: 1000;\n stroke-dashoffset: 0;\n stroke-dashoffset: -100;\n -webkit-animation: ', - ' 0.9s 0.35s ease-in-out forwards;\n animation: ', - ' 0.9s 0.35s ease-in-out forwards;\n', - ], - [ - '\n stroke-dasharray: 1000;\n stroke-dashoffset: 0;\n stroke-dashoffset: -100;\n -webkit-animation: ', - ' 0.9s 0.35s ease-in-out forwards;\n animation: ', - ' 0.9s 0.35s ease-in-out forwards;\n', - ] - )), - dashCheck, - dashCheck -) -function AnimatedConfirmation() { - var theme = useTheme() - return jsxRuntime.jsx( - Wrapper$1, - __assign( - { className: 'w4rAnimated_checkmark' }, - { - children: jsxRuntime.jsxs( - 'svg', - __assign( - { version: '1.1', xmlns: 'http://www.w3.org/2000/svg', viewBox: '0 0 130.2 130.2' }, - { - children: [ - jsxRuntime.jsx( - Circle, - { - className: 'path circle', - fill: 'none', - stroke: theme.green1, - strokeWidth: '6', - strokeMiterlimit: '10', - cx: '65.1', - cy: '65.1', - r: '62.1', - }, - void 0 - ), - jsxRuntime.jsx( - PolyLine, - { - className: 'path check', - fill: 'none', - stroke: theme.green1, - strokeWidth: '6', - strokeLinecap: 'round', - strokeMiterlimit: '10', - points: '100.2,40.2 51.5,88.8 29.8,67.5 ', - }, - void 0 - ), - ], - } - ), - void 0 - ), - } - ), - void 0 - ) -} -var templateObject_1$d, templateObject_2$6, templateObject_3$4, templateObject_4$3, templateObject_5$3 - -var Wrapper = styled__default['default'].div( - templateObject_1$c || - (templateObject_1$c = __makeTemplateObject( - ['\n width: 100%;\n padding: 1rem;\n'], - ['\n width: 100%;\n padding: 1rem;\n'] - )) -) -var Section = styled__default['default'](AutoColumn)( - templateObject_2$5 || (templateObject_2$5 = __makeTemplateObject(['\n padding: ', ';\n'], ['\n padding: ', ';\n'])), - function (_a) { - var inline = _a.inline - return inline ? '0' : '0' - } -) -var BottomSection = styled__default['default'](Section)( - templateObject_3$3 || - (templateObject_3$3 = __makeTemplateObject( - ['\n border-bottom-left-radius: 20px;\n border-bottom-right-radius: 20px;\n'], - ['\n border-bottom-left-radius: 20px;\n border-bottom-right-radius: 20px;\n'] - )) -) -var ConfirmedIcon = styled__default['default'](ColumnCenter)( - templateObject_4$2 || (templateObject_4$2 = __makeTemplateObject(['\n padding: ', ';\n'], ['\n padding: ', ';\n'])), - function (_a) { - var inline = _a.inline - return inline ? '20px 0' : '32px 0;' - } -) -var StyledLogo = styled__default['default'].img( - templateObject_5$2 || - (templateObject_5$2 = __makeTemplateObject( - ['\n height: 16px;\n width: 16px;\n margin-left: 6px;\n'], - ['\n height: 16px;\n width: 16px;\n margin-left: 6px;\n'] - )) -) -function ConfirmationPendingContent(_a) { - var onDismiss = _a.onDismiss, - pendingText = _a.pendingText, - inline = _a.inline - return jsxRuntime.jsx( - Wrapper, - { - children: jsxRuntime.jsxs( - AutoColumn, - __assign( - { gap: 'md' }, - { - children: [ - !inline && - jsxRuntime.jsxs( - RowBetween, - { - children: [ - jsxRuntime.jsx('div', {}, void 0), - jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0), - ], - }, - void 0 - ), - jsxRuntime.jsx( - ConfirmedIcon, - __assign( - { inline }, - { - children: jsxRuntime.jsx( - CustomLightSpinner, - { src: Circle$1, alt: 'loader', size: inline ? '40px' : '90px' }, - void 0 - ), - } - ), - void 0 - ), - jsxRuntime.jsxs( - AutoColumn, - __assign( - { gap: '12px', justify: 'center' }, - { - children: [ - jsxRuntime.jsx( - rebass.Text, - __assign( - { fontWeight: 500, fontSize: 20, textAlign: 'center' }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'Waiting For Confirmation' }, void 0) } - ), - void 0 - ), - jsxRuntime.jsx( - rebass.Text, - __assign({ fontWeight: 400, fontSize: 16, textAlign: 'center' }, { children: pendingText }), - void 0 - ), - jsxRuntime.jsx( - rebass.Text, - __assign( - { - fontWeight: 500, - fontSize: 14, - color: '#565A69', - textAlign: 'center', - marginBottom: '12px', - }, - { - children: jsxRuntime.jsx( - macro.Trans, - { children: 'Confirm this transaction in your wallet' }, - void 0 - ), - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - }, - void 0 - ) -} -function TransactionSubmittedContent(_a) { - var _b - var onDismiss = _a.onDismiss, - chainId = _a.chainId, - hash = _a.hash, - currencyToAdd = _a.currencyToAdd, - inline = _a.inline - var theme = React.useContext(styled.ThemeContext) - var library = useActiveWeb3React().library - var _c = useAddTokenToMetamask(currencyToAdd), - addToken = _c.addToken, - success = _c.success - return jsxRuntime.jsx( - Wrapper, - { - children: jsxRuntime.jsxs( - Section, - __assign( - { inline }, - { - children: [ - !inline && - jsxRuntime.jsxs( - RowBetween, - { - children: [ - jsxRuntime.jsx('div', {}, void 0), - jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0), - ], - }, - void 0 - ), - jsxRuntime.jsx( - ConfirmedIcon, - __assign( - { inline }, - { - children: jsxRuntime.jsx( - reactFeather.ArrowUpCircle, - { strokeWidth: 0.5, size: inline ? '40px' : '90px', color: theme.primary1 }, - void 0 - ), - } - ), - void 0 - ), - jsxRuntime.jsxs( - AutoColumn, - __assign( - { gap: '12px', justify: 'center' }, - { - children: [ - jsxRuntime.jsx( - rebass.Text, - __assign( - { fontWeight: 500, fontSize: 20, textAlign: 'center' }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'Transaction Submitted' }, void 0) } - ), - void 0 - ), - chainId && - hash && - jsxRuntime.jsx( - ExternalLink, - __assign( - { href: getExplorerLink(chainId, hash, ExplorerDataType.TRANSACTION) }, - { - children: jsxRuntime.jsx( - rebass.Text, - __assign( - { fontWeight: 500, fontSize: 14, color: theme.primary1 }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'View on Explorer' }, void 0) } - ), - void 0 - ), - } - ), - void 0 - ), - currencyToAdd && - ((_b = library === null || library === void 0 ? void 0 : library.provider) === null || - _b === void 0 - ? void 0 - : _b.isMetaMask) && - jsxRuntime.jsx( - ButtonLight, - __assign( - { mt: '12px', padding: '6px 12px', width: 'fit-content', onClick: addToken }, - { - children: !success - ? jsxRuntime.jsx( - RowFixed, - { - children: jsxRuntime.jsxs( - macro.Trans, - { - children: [ - 'Add ', - currencyToAdd.symbol, - ' to Metamask ', - jsxRuntime.jsx(StyledLogo, { src: MetaMaskLogo }, void 0), - ], - }, - void 0 - ), - }, - void 0 - ) - : jsxRuntime.jsxs( - RowFixed, - { - children: [ - jsxRuntime.jsxs( - macro.Trans, - { children: ['Added ', currencyToAdd.symbol, ' '] }, - void 0 - ), - jsxRuntime.jsx( - reactFeather.CheckCircle, - { size: '16px', stroke: theme.green1, style: { marginLeft: '6px' } }, - void 0 - ), - ], - }, - void 0 - ), - } - ), - void 0 - ), - jsxRuntime.jsx( - ButtonPrimary, - __assign( - { onClick: onDismiss, style: { margin: '20px 0 0 0' } }, - { - children: jsxRuntime.jsx( - rebass.Text, - __assign( - { fontWeight: 500, fontSize: 20 }, - { - children: inline - ? jsxRuntime.jsx(macro.Trans, { children: 'Return' }, void 0) - : jsxRuntime.jsx(macro.Trans, { children: 'Close' }, void 0), - } - ), - void 0 - ), - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - }, - void 0 - ) -} -function ConfirmationModalContent(_a) { - var title = _a.title, - bottomContent = _a.bottomContent, - onDismiss = _a.onDismiss, - topContent = _a.topContent - return jsxRuntime.jsxs( - Wrapper, - { - children: [ - jsxRuntime.jsxs( - Section, - { - children: [ - jsxRuntime.jsxs( - RowBetween, - { - children: [ - jsxRuntime.jsx( - rebass.Text, - __assign({ fontWeight: 500, fontSize: 16 }, { children: title }), - void 0 - ), - jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0), - ], - }, - void 0 - ), - topContent(), - ], - }, - void 0 - ), - bottomContent && - jsxRuntime.jsx(BottomSection, __assign({ gap: '12px' }, { children: bottomContent() }), void 0), - ], - }, - void 0 - ) -} -function TransactionErrorContent(_a) { - var message = _a.message, - onDismiss = _a.onDismiss - var theme = React.useContext(styled.ThemeContext) - return jsxRuntime.jsxs( - Wrapper, - { - children: [ - jsxRuntime.jsxs( - Section, - { - children: [ - jsxRuntime.jsxs( - RowBetween, - { - children: [ - jsxRuntime.jsx( - rebass.Text, - __assign( - { fontWeight: 500, fontSize: 20 }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'Error' }, void 0) } - ), - void 0 - ), - jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0), - ], - }, - void 0 - ), - jsxRuntime.jsxs( - AutoColumn, - __assign( - { style: { marginTop: 20, padding: '2rem 0' }, gap: '24px', justify: 'center' }, - { - children: [ - jsxRuntime.jsx( - reactFeather.AlertTriangle, - { color: theme.red1, style: { strokeWidth: 1.5 }, size: 64 }, - void 0 - ), - jsxRuntime.jsx( - rebass.Text, - __assign( - { - fontWeight: 500, - fontSize: 16, - color: theme.red1, - style: { textAlign: 'center', width: '85%', wordBreak: 'break-word' }, - }, - { children: message } - ), - void 0 - ), - ], - } - ), - void 0 - ), - ], - }, - void 0 - ), - jsxRuntime.jsx( - BottomSection, - __assign( - { gap: '12px' }, - { - children: jsxRuntime.jsx( - ButtonPrimary, - __assign( - { onClick: onDismiss }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'Dismiss' }, void 0) } - ), - void 0 - ), - } - ), - void 0 - ), - ], - }, - void 0 - ) -} -function L2Content(_a) { - var _b - var onDismiss = _a.onDismiss, - chainId = _a.chainId, - hash = _a.hash, - pendingText = _a.pendingText, - inline = _a.inline - var theme = React.useContext(styled.ThemeContext) - var transaction = useTransaction(hash) - var confirmed = useIsTransactionConfirmed(hash) - var transactionSuccess = - ((_b = transaction === null || transaction === void 0 ? void 0 : transaction.receipt) === null || _b === void 0 - ? void 0 - : _b.status) === 1 - // convert unix time difference to seconds - var secondsToConfirm = (transaction === null || transaction === void 0 ? void 0 : transaction.confirmedTime) - ? (transaction.confirmedTime - transaction.addedTime) / 1000 - : undefined - var info = CHAIN_INFO[chainId] - return jsxRuntime.jsx( - Wrapper, - { - children: jsxRuntime.jsxs( - Section, - __assign( - { inline }, - { - children: [ - !inline && - jsxRuntime.jsxs( - RowBetween, - __assign( - { mb: '16px' }, - { - children: [ - jsxRuntime.jsx( - Badge, - { - children: jsxRuntime.jsxs( - RowFixed, - { - children: [ - jsxRuntime.jsx( - StyledLogo, - { src: info.logoUrl, style: { margin: '0 8px 0 0' } }, - void 0 - ), - info.label, - ], - }, - void 0 - ), - }, - void 0 - ), - jsxRuntime.jsx(CloseIcon, { onClick: onDismiss }, void 0), - ], - } - ), - void 0 - ), - jsxRuntime.jsx( - ConfirmedIcon, - __assign( - { inline }, - { - children: confirmed - ? transactionSuccess - ? // - jsxRuntime.jsx(AnimatedConfirmation, {}, void 0) - : jsxRuntime.jsx( - reactFeather.AlertCircle, - { strokeWidth: 1, size: inline ? '40px' : '90px', color: theme.red1 }, - void 0 - ) - : jsxRuntime.jsx( - CustomLightSpinner, - { src: Circle$1, alt: 'loader', size: inline ? '40px' : '90px' }, - void 0 - ), - } - ), - void 0 - ), - jsxRuntime.jsxs( - AutoColumn, - __assign( - { gap: '12px', justify: 'center' }, - { - children: [ - jsxRuntime.jsx( - rebass.Text, - __assign( - { fontWeight: 500, fontSize: 20, textAlign: 'center' }, - { - children: !hash - ? jsxRuntime.jsx(macro.Trans, { children: 'Confirm transaction in wallet' }, void 0) - : !confirmed - ? jsxRuntime.jsx(macro.Trans, { children: 'Transaction Submitted' }, void 0) - : transactionSuccess - ? jsxRuntime.jsx(macro.Trans, { children: 'Success' }, void 0) - : jsxRuntime.jsx(macro.Trans, { children: 'Error' }, void 0), - } - ), - void 0 - ), - jsxRuntime.jsx( - rebass.Text, - __assign( - { fontWeight: 400, fontSize: 16, textAlign: 'center' }, - { - children: transaction - ? jsxRuntime.jsx(TransactionSummary, { info: transaction.info }, void 0) - : pendingText, - } - ), - void 0 - ), - chainId && hash - ? jsxRuntime.jsx( - ExternalLink, - __assign( - { href: getExplorerLink(chainId, hash, ExplorerDataType.TRANSACTION) }, - { - children: jsxRuntime.jsx( - rebass.Text, - __assign( - { fontWeight: 500, fontSize: 14, color: theme.primary1 }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'View on Explorer' }, void 0) } - ), - void 0 - ), - } - ), - void 0 - ) - : jsxRuntime.jsx('div', { style: { height: '17px' } }, void 0), - jsxRuntime.jsx( - rebass.Text, - __assign( - { color: theme.text3, style: { margin: '20px 0 0 0' }, fontSize: '14px' }, - { - children: !secondsToConfirm - ? jsxRuntime.jsx('div', { style: { height: '24px' } }, void 0) - : jsxRuntime.jsxs( - 'div', - { - children: [ - jsxRuntime.jsx(macro.Trans, { children: 'Transaction completed in ' }, void 0), - jsxRuntime.jsxs( - 'span', - __assign( - { style: { fontWeight: 500, marginLeft: '4px', color: theme.text1 } }, - { children: [secondsToConfirm, ' seconds \uD83C\uDF89'] } - ), - void 0 - ), - ], - }, - void 0 - ), - } - ), - void 0 - ), - jsxRuntime.jsx( - ButtonPrimary, - __assign( - { onClick: onDismiss, style: { margin: '4px 0 0 0' } }, - { - children: jsxRuntime.jsx( - rebass.Text, - __assign( - { fontWeight: 500, fontSize: 20 }, - { - children: inline - ? jsxRuntime.jsx(macro.Trans, { children: 'Return' }, void 0) - : jsxRuntime.jsx(macro.Trans, { children: 'Close' }, void 0), - } - ), - void 0 - ), - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - }, - void 0 - ) -} -function TransactionConfirmationModal(_a) { - var isOpen = _a.isOpen, - onDismiss = _a.onDismiss, - attemptingTxn = _a.attemptingTxn, - hash = _a.hash, - pendingText = _a.pendingText, - content = _a.content, - currencyToAdd = _a.currencyToAdd - var chainId = useActiveWeb3React().chainId - var isL2 = Boolean(chainId && L2_CHAIN_IDS.includes(chainId)) - if (!chainId) return null - // confirmation screen - return jsxRuntime.jsx( - Modal, - __assign( - { isOpen, onDismiss, maxHeight: 90 }, - { - children: - isL2 && (hash || attemptingTxn) - ? jsxRuntime.jsx(L2Content, { chainId, hash, onDismiss, pendingText }, void 0) - : attemptingTxn - ? jsxRuntime.jsx(ConfirmationPendingContent, { onDismiss, pendingText }, void 0) - : hash - ? jsxRuntime.jsx(TransactionSubmittedContent, { chainId, hash, onDismiss, currencyToAdd }, void 0) - : content(), - } - ), - void 0 - ) -} -var templateObject_1$c, templateObject_2$5, templateObject_3$3, templateObject_4$2, templateObject_5$2 - -function SwapModalFooter(_a) { - var onConfirm = _a.onConfirm, - swapErrorMessage = _a.swapErrorMessage, - disabledConfirm = _a.disabledConfirm - return jsxRuntime.jsx( - jsxRuntime.Fragment, - { - children: jsxRuntime.jsxs( - AutoRow, - { - children: [ - jsxRuntime.jsx( - ButtonError, - __assign( - { - onClick: onConfirm, - disabled: disabledConfirm, - style: { margin: '10px 0 0 0' }, - id: 'confirm-swap-or-send', - }, - { - children: jsxRuntime.jsx( - rebass.Text, - __assign( - { fontSize: 20, fontWeight: 500 }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'Confirm Swap' }, void 0) } - ), - void 0 - ), - } - ), - void 0 - ), - swapErrorMessage ? jsxRuntime.jsx(SwapCallbackError, { error: swapErrorMessage }, void 0) : null, - ], - }, - void 0 - ), - }, - void 0 - ) -} +var Container = styled__default["default"](ThemedText.Small)(templateObject_1$4 || (templateObject_1$4 = __makeTemplateObject(["\n opacity: 0.6;\n :hover {\n opacity: 1;\n }\n margin-top: 1rem !important;\n"], ["\n opacity: 0.6;\n :hover {\n opacity: 1;\n }\n margin-top: 1rem !important;\n"]))); +var useTargetLocale = function (activeLocale) { + var browserLocale = React.useMemo(function () { return navigatorLocale(); }, []); + if (browserLocale && (browserLocale !== DEFAULT_LOCALE || activeLocale !== DEFAULT_LOCALE)) { + if (activeLocale === browserLocale) { + return DEFAULT_LOCALE; + } + else { + return browserLocale; + } + } + return null; +}; +function SwitchLocaleLink() { + var activeLocale = useActiveLocale(); + var targetLocale = useTargetLocale(activeLocale); + var _a = useLocationLinkProps(targetLocale), to = _a.to, onClick = _a.onClick; + if (!targetLocale || !to) + return null; + return (jsxRuntime.jsx(Container, { children: jsxRuntime.jsxs(macro.Trans, { children: ["Uniswap available in:", ' ', jsxRuntime.jsx(StyledInternalLink, __assign({ onClick: onClick, to: to }, { children: LOCALE_LABEL[targetLocale] }), void 0)] }, void 0) }, void 0)); +} +var templateObject_1$4; -function computeFiatValuePriceImpact(fiatValueInput, fiatValueOutput) { - if (!fiatValueOutput || !fiatValueInput) return undefined - if (!fiatValueInput.currency.equals(fiatValueOutput.currency)) return undefined - if (JSBI__default['default'].equal(fiatValueInput.quotient, JSBI__default['default'].BigInt(0))) return undefined - var pct = ONE_HUNDRED_PERCENT.subtract(fiatValueOutput.divide(fiatValueInput)) - return new sdkCore.Percent(pct.numerator, pct.denominator) +function TokenWarningModal(_a) { + var isOpen = _a.isOpen, tokens = _a.tokens, onConfirm = _a.onConfirm, onDismiss = _a.onDismiss; + return (jsxRuntime.jsx(Modal, __assign({ isOpen: isOpen, onDismiss: onDismiss, maxHeight: 100 }, { children: jsxRuntime.jsx(ImportToken, { tokens: tokens, handleCurrencySelect: onConfirm }, void 0) }), void 0)); } -var ArrowWrapper = styled__default['default'].div( - templateObject_1$b || - (templateObject_1$b = __makeTemplateObject( - [ - '\n padding: 4px;\n border-radius: 12px;\n height: 32px;\n width: 32px;\n position: relative;\n margin-top: -18px;\n margin-bottom: -18px;\n left: calc(50% - 16px);\n display: flex;\n justify-content: center;\n align-items: center;\n background-color: ', - ';\n border: 4px solid;\n border-color: ', - ';\n z-index: 2;\n', - ], - [ - '\n padding: 4px;\n border-radius: 12px;\n height: 32px;\n width: 32px;\n position: relative;\n margin-top: -18px;\n margin-bottom: -18px;\n left: calc(50% - 16px);\n display: flex;\n justify-content: center;\n align-items: center;\n background-color: ', - ';\n border: 4px solid;\n border-color: ', - ';\n z-index: 2;\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.bg1 - }, - function (_a) { - var theme = _a.theme - return theme.bg0 - } -) -function SwapModalHeader(_a) { - var trade = _a.trade, - allowedSlippage = _a.allowedSlippage, - recipient = _a.recipient, - showAcceptChanges = _a.showAcceptChanges, - onAcceptChanges = _a.onAcceptChanges - var theme = React.useContext(styled.ThemeContext) - var _b = __read(React.useState(false), 2), - showInverted = _b[0], - setShowInverted = _b[1] - var fiatValueInput = useUSDCValue(trade.inputAmount) - var fiatValueOutput = useUSDCValue(trade.outputAmount) - return jsxRuntime.jsxs( - AutoColumn, - __assign( - { gap: '4px', style: { marginTop: '1rem' } }, - { - children: [ - jsxRuntime.jsx( - LightCard, - __assign( - { padding: '0.75rem 1rem' }, - { - children: jsxRuntime.jsxs( - AutoColumn, - __assign( - { gap: '8px' }, - { - children: [ - jsxRuntime.jsxs( - RowBetween, - __assign( - { align: 'center' }, - { - children: [ - jsxRuntime.jsx( - RowFixed, - __assign( - { gap: '0px' }, - { - children: jsxRuntime.jsx( - TruncatedText, - __assign( - { - fontSize: 24, - fontWeight: 500, - color: - showAcceptChanges && trade.tradeType === sdkCore.TradeType.EXACT_OUTPUT - ? theme.primary1 - : '', - }, - { children: trade.inputAmount.toSignificant(6) } - ), - void 0 - ), - } - ), - void 0 - ), - jsxRuntime.jsxs( - RowFixed, - __assign( - { gap: '0px' }, - { - children: [ - jsxRuntime.jsx( - CurrencyLogo, - { - currency: trade.inputAmount.currency, - size: '20px', - style: { marginRight: '12px' }, - }, - void 0 - ), - jsxRuntime.jsx( - rebass.Text, - __assign( - { fontSize: 20, fontWeight: 500 }, - { children: trade.inputAmount.currency.symbol } - ), - void 0 - ), - ], - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - jsxRuntime.jsx( - RowBetween, - { children: jsxRuntime.jsx(FiatValue, { fiatValue: fiatValueInput }, void 0) }, - void 0 - ), - ], - } - ), - void 0 - ), - } - ), - void 0 - ), - jsxRuntime.jsx( - ArrowWrapper, - { children: jsxRuntime.jsx(reactFeather.ArrowDown, { size: '16', color: theme.text2 }, void 0) }, - void 0 - ), - jsxRuntime.jsx( - LightCard, - __assign( - { padding: '0.75rem 1rem', style: { marginBottom: '0.25rem' } }, - { - children: jsxRuntime.jsxs( - AutoColumn, - __assign( - { gap: '8px' }, - { - children: [ - jsxRuntime.jsxs( - RowBetween, - __assign( - { align: 'flex-end' }, - { - children: [ - jsxRuntime.jsx( - RowFixed, - __assign( - { gap: '0px' }, - { - children: jsxRuntime.jsx( - TruncatedText, - __assign( - { fontSize: 24, fontWeight: 500 }, - { children: trade.outputAmount.toSignificant(6) } - ), - void 0 - ), - } - ), - void 0 - ), - jsxRuntime.jsxs( - RowFixed, - __assign( - { gap: '0px' }, - { - children: [ - jsxRuntime.jsx( - CurrencyLogo, - { - currency: trade.outputAmount.currency, - size: '20px', - style: { marginRight: '12px' }, - }, - void 0 - ), - jsxRuntime.jsx( - rebass.Text, - __assign( - { fontSize: 20, fontWeight: 500 }, - { children: trade.outputAmount.currency.symbol } - ), - void 0 - ), - ], - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - jsxRuntime.jsx( - RowBetween, - { - children: jsxRuntime.jsx( - ThemedText.Body, - __assign( - { fontSize: 14, color: theme.text3 }, - { - children: jsxRuntime.jsx( - FiatValue, - { - fiatValue: fiatValueOutput, - priceImpact: computeFiatValuePriceImpact(fiatValueInput, fiatValueOutput), - }, - void 0 - ), - } - ), - void 0 - ), - }, - void 0 - ), - ], - } - ), - void 0 - ), - } - ), - void 0 - ), - jsxRuntime.jsx( - RowBetween, - __assign( - { style: { marginTop: '0.25rem', padding: '0 1rem' } }, - { - children: jsxRuntime.jsx( - TradePrice, - { price: trade.executionPrice, showInverted, setShowInverted }, - void 0 - ), - } - ), - void 0 - ), - jsxRuntime.jsx( - LightCard, - __assign( - { style: { padding: '.75rem', marginTop: '0.5rem' } }, - { - children: jsxRuntime.jsx(AdvancedSwapDetails, { trade, allowedSlippage }, void 0), - } - ), - void 0 - ), - showAcceptChanges - ? jsxRuntime.jsx( - SwapShowAcceptChanges, - __assign( - { justify: 'flex-start', gap: '0px' }, - { - children: jsxRuntime.jsxs( - RowBetween, - { - children: [ - jsxRuntime.jsxs( - RowFixed, - { - children: [ - jsxRuntime.jsx( - reactFeather.AlertTriangle, - { size: 20, style: { marginRight: '8px', minWidth: 24 } }, - void 0 - ), - jsxRuntime.jsx( - ThemedText.Main, - __assign( - { color: theme.primary1 }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'Price Updated' }, void 0) } - ), - void 0 - ), - ], - }, - void 0 - ), - jsxRuntime.jsx( - ButtonPrimary, - __assign( - { - style: { - padding: '.5rem', - width: 'fit-content', - fontSize: '0.825rem', - borderRadius: '12px', - }, - onClick: onAcceptChanges, - }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'Accept' }, void 0) } - ), - void 0 - ), - ], - }, - void 0 - ), - } - ), - void 0 - ) - : null, - jsxRuntime.jsx( - AutoColumn, - __assign( - { justify: 'flex-start', gap: 'sm', style: { padding: '.75rem 1rem' } }, - { - children: - trade.tradeType === sdkCore.TradeType.EXACT_INPUT - ? jsxRuntime.jsx( - ThemedText.Italic, - __assign( - { fontWeight: 400, textAlign: 'left', style: { width: '100%' } }, - { - children: jsxRuntime.jsxs( - macro.Trans, - { - children: [ - 'Output is estimated. You will receive at least', - ' ', - jsxRuntime.jsxs( - 'b', - { - children: [ - trade.minimumAmountOut(allowedSlippage).toSignificant(6), - ' ', - trade.outputAmount.currency.symbol, - ], - }, - void 0 - ), - ' ', - 'or the transaction will revert.', - ], - }, - void 0 - ), - } - ), - void 0 - ) - : jsxRuntime.jsx( - ThemedText.Italic, - __assign( - { fontWeight: 400, textAlign: 'left', style: { width: '100%' } }, - { - children: jsxRuntime.jsxs( - macro.Trans, - { - children: [ - 'Input is estimated. You will sell at most', - ' ', - jsxRuntime.jsxs( - 'b', - { - children: [ - trade.maximumAmountIn(allowedSlippage).toSignificant(6), - ' ', - trade.inputAmount.currency.symbol, - ], - }, - void 0 - ), - ' ', - 'or the transaction will revert.', - ], - }, - void 0 - ), - } - ), - void 0 - ), - } - ), - void 0 - ), - recipient !== null - ? jsxRuntime.jsx( - AutoColumn, - __assign( - { justify: 'flex-start', gap: 'sm', style: { padding: '12px 0 0 0px' } }, - { - children: jsxRuntime.jsx( - ThemedText.Main, - { - children: jsxRuntime.jsxs( - macro.Trans, - { - children: [ - 'Output will be sent to', - ' ', - jsxRuntime.jsx( - 'b', - __assign( - { title: recipient }, - { children: isAddress(recipient) ? shortenAddress(recipient) : recipient } - ), - void 0 - ), - ], - }, - void 0 - ), - }, - void 0 - ), - } - ), - void 0 - ) - : null, - ], - } - ), - void 0 - ) -} -var templateObject_1$b - -function ConfirmSwapModal(_a) { - var _b, _c, _d, _e, _f, _g - var trade = _a.trade, - originalTrade = _a.originalTrade, - onAcceptChanges = _a.onAcceptChanges, - allowedSlippage = _a.allowedSlippage, - onConfirm = _a.onConfirm, - onDismiss = _a.onDismiss, - recipient = _a.recipient, - swapErrorMessage = _a.swapErrorMessage, - isOpen = _a.isOpen, - attemptingTxn = _a.attemptingTxn, - txHash = _a.txHash - var showAcceptChanges = React.useMemo( - function () { - return Boolean(trade && originalTrade && tradeMeaningfullyDiffers(trade, originalTrade)) - }, - [originalTrade, trade] - ) - var modalHeader = React.useCallback( - function () { - return trade - ? jsxRuntime.jsx( - SwapModalHeader, - { - trade, - allowedSlippage, - recipient, - showAcceptChanges, - onAcceptChanges, - }, - void 0 - ) - : null - }, - [allowedSlippage, onAcceptChanges, recipient, showAcceptChanges, trade] - ) - var modalBottom = React.useCallback( - function () { - return trade - ? jsxRuntime.jsx( - SwapModalFooter, - { - onConfirm, - trade, - disabledConfirm: showAcceptChanges, - swapErrorMessage, - }, - void 0 - ) - : null - }, - [onConfirm, showAcceptChanges, swapErrorMessage, trade] - ) - // text to show while loading - var pendingText = jsxRuntime.jsxs( - macro.Trans, - { - children: [ - 'Swapping ', - (_b = trade === null || trade === void 0 ? void 0 : trade.inputAmount) === null || _b === void 0 - ? void 0 - : _b.toSignificant(6), - ' ', - (_d = - (_c = trade === null || trade === void 0 ? void 0 : trade.inputAmount) === null || _c === void 0 - ? void 0 - : _c.currency) === null || _d === void 0 - ? void 0 - : _d.symbol, - ' for', - ' ', - (_e = trade === null || trade === void 0 ? void 0 : trade.outputAmount) === null || _e === void 0 - ? void 0 - : _e.toSignificant(6), - ' ', - (_g = - (_f = trade === null || trade === void 0 ? void 0 : trade.outputAmount) === null || _f === void 0 - ? void 0 - : _f.currency) === null || _g === void 0 - ? void 0 - : _g.symbol, - ], - }, - void 0 - ) - var confirmationContent = React.useCallback( - function () { - return swapErrorMessage - ? jsxRuntime.jsx(TransactionErrorContent, { onDismiss, message: swapErrorMessage }, void 0) - : jsxRuntime.jsx( - ConfirmationModalContent, - { - title: jsxRuntime.jsx(macro.Trans, { children: 'Confirm Swap' }, void 0), - onDismiss, - topContent: modalHeader, - bottomContent: modalBottom, - }, - void 0 - ) - }, - [onDismiss, modalBottom, modalHeader, swapErrorMessage] - ) - return jsxRuntime.jsx( - TransactionConfirmationModal, - { - isOpen, - onDismiss, - attemptingTxn, - hash: txHash, - content: confirmationContent, - pendingText, - currencyToAdd: trade === null || trade === void 0 ? void 0 : trade.outputAmount.currency, - }, - void 0 - ) +function useTokenAllowance(token, owner, spender) { + var contract = useTokenContract(token === null || token === void 0 ? void 0 : token.address, false); + var inputs = React.useMemo(function () { return [owner, spender]; }, [owner, spender]); + var allowance = useSingleCallResult(contract, 'allowance', inputs).result; + return React.useMemo(function () { return (token && allowance ? sdkCore.CurrencyAmount.fromRawAmount(token, allowance.toString()) : undefined); }, [token, allowance]); } -var _a$5 -var ApplicationModal -;(function (ApplicationModal) { - ApplicationModal[(ApplicationModal['WALLET'] = 0)] = 'WALLET' - ApplicationModal[(ApplicationModal['SETTINGS'] = 1)] = 'SETTINGS' - ApplicationModal[(ApplicationModal['SELF_CLAIM'] = 2)] = 'SELF_CLAIM' - ApplicationModal[(ApplicationModal['ADDRESS_CLAIM'] = 3)] = 'ADDRESS_CLAIM' - ApplicationModal[(ApplicationModal['CLAIM_POPUP'] = 4)] = 'CLAIM_POPUP' - ApplicationModal[(ApplicationModal['MENU'] = 5)] = 'MENU' - ApplicationModal[(ApplicationModal['DELEGATE'] = 6)] = 'DELEGATE' - ApplicationModal[(ApplicationModal['VOTE'] = 7)] = 'VOTE' - ApplicationModal[(ApplicationModal['POOL_OVERVIEW_OPTIONS'] = 8)] = 'POOL_OVERVIEW_OPTIONS' - ApplicationModal[(ApplicationModal['NETWORK_SELECTOR'] = 9)] = 'NETWORK_SELECTOR' - ApplicationModal[(ApplicationModal['PRIVACY_POLICY'] = 10)] = 'PRIVACY_POLICY' -})(ApplicationModal || (ApplicationModal = {})) -var initialState$8 = { - chainId: null, - openModal: null, - popupList: [], -} -var applicationSlice = toolkit.createSlice({ - name: 'application', - initialState: initialState$8, - reducers: { - updateChainId(state, action) { - var chainId = action.payload.chainId - state.chainId = chainId - }, - setOpenModal(state, action) { - state.openModal = action.payload - }, - addPopup(state, _a) { - var _b = _a.payload, - content = _b.content, - key = _b.key, - _c = _b.removeAfterMs, - removeAfterMs = _c === void 0 ? DEFAULT_TXN_DISMISS_MS : _c - state.popupList = ( - key - ? state.popupList.filter(function (popup) { - return popup.key !== key - }) - : state.popupList - ).concat([ - { - key: key || toolkit.nanoid(), - show: true, - content, - removeAfterMs, - }, - ]) - }, - removePopup(state, _a) { - var key = _a.payload.key - state.popupList.forEach(function (p) { - if (p.key === key) { - p.show = false - } - }) - }, - }, -}) -;(_a$5 = applicationSlice.actions), _a$5.updateChainId -var setOpenModal = _a$5.setOpenModal -_a$5.addPopup -_a$5.removePopup -var application = applicationSlice.reducer - -function useModalOpen(modal) { - var openModal = useAppSelector(function (state) { - return state.application.openModal - }) - return openModal === modal -} -function useToggleModal(modal) { - var open = useModalOpen(modal) - var dispatch = useAppDispatch() - return React.useCallback( - function () { - return dispatch(setOpenModal(open ? null : modal)) - }, - [dispatch, modal, open] - ) -} -function useWalletModalToggle() { - return useToggleModal(ApplicationModal.WALLET) -} -function useToggleSettingsMenu() { - return useToggleModal(ApplicationModal.SETTINGS) +var ApprovalState; +(function (ApprovalState) { + ApprovalState["UNKNOWN"] = "UNKNOWN"; + ApprovalState["NOT_APPROVED"] = "NOT_APPROVED"; + ApprovalState["PENDING"] = "PENDING"; + ApprovalState["APPROVED"] = "APPROVED"; +})(ApprovalState || (ApprovalState = {})); +function useApprovalStateForSpender(amountToApprove, spender, useIsPendingApproval) { + var _a; + var account = useActiveWeb3React().account; + var token = ((_a = amountToApprove === null || amountToApprove === void 0 ? void 0 : amountToApprove.currency) === null || _a === void 0 ? void 0 : _a.isToken) ? amountToApprove.currency : undefined; + var currentAllowance = useTokenAllowance(token, account !== null && account !== void 0 ? account : undefined, spender); + var pendingApproval = useIsPendingApproval(token, spender); + return React.useMemo(function () { + if (!amountToApprove || !spender) + return ApprovalState.UNKNOWN; + if (amountToApprove.currency.isNative) + return ApprovalState.APPROVED; + // we might not have enough data to know whether or not we need to approve + if (!currentAllowance) + return ApprovalState.UNKNOWN; + // amountToApprove will be defined if currentAllowance is + return currentAllowance.lessThan(amountToApprove) + ? pendingApproval + ? ApprovalState.PENDING + : ApprovalState.NOT_APPROVED + : ApprovalState.APPROVED; + }, [amountToApprove, currentAllowance, pendingApproval, spender]); +} +function useApproval(amountToApprove, spender, useIsPendingApproval) { + var _this = this; + var _a; + var chainId = useActiveWeb3React().chainId; + var token = ((_a = amountToApprove === null || amountToApprove === void 0 ? void 0 : amountToApprove.currency) === null || _a === void 0 ? void 0 : _a.isToken) ? amountToApprove.currency : undefined; + // check the current approval status + var approvalState = useApprovalStateForSpender(amountToApprove, spender, useIsPendingApproval); + var tokenContract = useTokenContract(token === null || token === void 0 ? void 0 : token.address); + var approve = React.useCallback(function () { return __awaiter(_this, void 0, void 0, function () { + function logFailure(error) { + console.warn(((token === null || token === void 0 ? void 0 : token.symbol) || 'Token') + " approval failed:", error); + return; + } + var useExact, estimatedGas; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + // Bail early if there is an issue. + if (approvalState !== ApprovalState.NOT_APPROVED) { + return [2 /*return*/, logFailure('approve was called unnecessarily')]; + } + else if (!chainId) { + return [2 /*return*/, logFailure('no chainId')]; + } + else if (!token) { + return [2 /*return*/, logFailure('no token')]; + } + else if (!tokenContract) { + return [2 /*return*/, logFailure('tokenContract is null')]; + } + else if (!amountToApprove) { + return [2 /*return*/, logFailure('missing amount to approve')]; + } + else if (!spender) { + return [2 /*return*/, logFailure('no spender')]; + } + useExact = false; + return [4 /*yield*/, tokenContract.estimateGas.approve(spender, constants.MaxUint256).catch(function () { + // general fallback for tokens which restrict approval amounts + useExact = true; + return tokenContract.estimateGas.approve(spender, amountToApprove.quotient.toString()); + })]; + case 1: + estimatedGas = _a.sent(); + return [2 /*return*/, tokenContract + .approve(spender, useExact ? amountToApprove.quotient.toString() : constants.MaxUint256, { + gasLimit: calculateGasMargin(estimatedGas), + }) + .then(function (response) { return ({ + response: response, + tokenAddress: token.address, + spenderAddress: spender, + }); }) + .catch(function (error) { + logFailure(error); + throw error; + })]; + } + }); + }); }, [approvalState, token, tokenContract, amountToApprove, spender, chainId]); + return [approvalState, approve]; } -var ToggleElement = styled__default['default'].span( - templateObject_1$a || - (templateObject_1$a = __makeTemplateObject( - [ - '\n padding: 0.25rem 0.6rem;\n border-radius: 9px;\n background: ', - ';\n color: ', - ';\n font-size: 14px;\n font-weight: ', - ';\n :hover {\n user-select: ', - ';\n background: ', - ';\n color: ', - ';\n }\n', - ], - [ - '\n padding: 0.25rem 0.6rem;\n border-radius: 9px;\n background: ', - ';\n color: ', - ';\n font-size: 14px;\n font-weight: ', - ';\n :hover {\n user-select: ', - ';\n background: ', - ';\n color: ', - ';\n }\n', - ] - )), - function (_a) { - var theme = _a.theme, - isActive = _a.isActive, - isOnSwitch = _a.isOnSwitch - return isActive ? (isOnSwitch ? theme.primary1 : theme.bg4) : 'none' - }, - function (_a) { - var theme = _a.theme, - isActive = _a.isActive - return isActive ? theme.white : theme.text2 - }, - function (_a) { - var isOnSwitch = _a.isOnSwitch - return isOnSwitch ? '500' : '400' - }, - function (_a) { - var isOnSwitch = _a.isOnSwitch - return isOnSwitch ? 'none' : 'initial' - }, - function (_a) { - var theme = _a.theme, - isActive = _a.isActive, - isOnSwitch = _a.isOnSwitch - return isActive ? (isOnSwitch ? polished.darken(0.05, theme.primary1) : polished.darken(0.05, theme.bg4)) : 'none' - }, - function (_a) { - var theme = _a.theme, - isActive = _a.isActive, - isOnSwitch = _a.isOnSwitch - return isActive ? (isOnSwitch ? theme.white : theme.white) : theme.text3 - } -) -var StyledToggle = styled__default['default'].button( - templateObject_2$4 || - (templateObject_2$4 = __makeTemplateObject( - [ - '\n border-radius: 12px;\n border: none;\n background: ', - ';\n display: flex;\n width: fit-content;\n cursor: pointer;\n outline: none;\n padding: 2px;\n', - ], - [ - '\n border-radius: 12px;\n border: none;\n background: ', - ';\n display: flex;\n width: fit-content;\n cursor: pointer;\n outline: none;\n padding: 2px;\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.bg0 - } -) -function Toggle(_a) { - var id = _a.id, - isActive = _a.isActive, - toggle = _a.toggle, - _b = _a.checked, - checked = _b === void 0 ? jsxRuntime.jsx(macro.Trans, { children: 'On' }, void 0) : _b, - _c = _a.unchecked, - unchecked = _c === void 0 ? jsxRuntime.jsx(macro.Trans, { children: 'Off' }, void 0) : _c - return jsxRuntime.jsxs( - StyledToggle, - __assign( - { id, isActive, onClick: toggle }, - { - children: [ - jsxRuntime.jsx(ToggleElement, __assign({ isActive, isOnSwitch: true }, { children: checked }), void 0), - jsxRuntime.jsx( - ToggleElement, - __assign({ isActive: !isActive, isOnSwitch: false }, { children: unchecked }), - void 0 - ), - ], - } - ), - void 0 - ) -} -var templateObject_1$a, templateObject_2$4 - -var SlippageError -;(function (SlippageError) { - SlippageError['InvalidInput'] = 'InvalidInput' -})(SlippageError || (SlippageError = {})) -var DeadlineError -;(function (DeadlineError) { - DeadlineError['InvalidInput'] = 'InvalidInput' -})(DeadlineError || (DeadlineError = {})) -var FancyButton = styled__default['default'].button( - templateObject_1$9 || - (templateObject_1$9 = __makeTemplateObject( - [ - '\n color: ', - ';\n align-items: center;\n height: 2rem;\n border-radius: 36px;\n font-size: 1rem;\n width: auto;\n min-width: 3.5rem;\n border: 1px solid ', - ';\n outline: none;\n background: ', - ';\n :hover {\n border: 1px solid ', - ';\n }\n :focus {\n border: 1px solid ', - ';\n }\n', - ], - [ - '\n color: ', - ';\n align-items: center;\n height: 2rem;\n border-radius: 36px;\n font-size: 1rem;\n width: auto;\n min-width: 3.5rem;\n border: 1px solid ', - ';\n outline: none;\n background: ', - ';\n :hover {\n border: 1px solid ', - ';\n }\n :focus {\n border: 1px solid ', - ';\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.text1 - }, - function (_a) { - var theme = _a.theme - return theme.bg3 - }, - function (_a) { - var theme = _a.theme - return theme.bg1 - }, - function (_a) { - var theme = _a.theme - return theme.bg4 - }, - function (_a) { - var theme = _a.theme - return theme.primary1 - } -) -var Option = styled__default['default'](FancyButton)( - templateObject_2$3 || - (templateObject_2$3 = __makeTemplateObject( - ['\n margin-right: 8px;\n :hover {\n cursor: pointer;\n }\n background-color: ', ';\n color: ', ';\n'], - ['\n margin-right: 8px;\n :hover {\n cursor: pointer;\n }\n background-color: ', ';\n color: ', ';\n'] - )), - function (_a) { - var active = _a.active, - theme = _a.theme - return active && theme.primary1 - }, - function (_a) { - var active = _a.active, - theme = _a.theme - return active ? theme.white : theme.text1 - } -) -var Input = styled__default['default'].input( - templateObject_3$2 || - (templateObject_3$2 = __makeTemplateObject( - [ - '\n background: ', - ';\n font-size: 16px;\n width: auto;\n outline: none;\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n }\n color: ', - ';\n text-align: right;\n', - ], - [ - '\n background: ', - ';\n font-size: 16px;\n width: auto;\n outline: none;\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n }\n color: ', - ';\n text-align: right;\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.bg1 - }, - function (_a) { - var theme = _a.theme, - color = _a.color - return color === 'red' ? theme.red1 : theme.text1 - } -) -var OptionCustom = styled__default['default'](FancyButton)( - templateObject_4$1 || - (templateObject_4$1 = __makeTemplateObject( - [ - '\n height: 2rem;\n position: relative;\n padding: 0 0.75rem;\n flex: 1;\n border: ', - ';\n :hover {\n border: ', - ';\n }\n\n input {\n width: 100%;\n height: 100%;\n border: 0px;\n border-radius: 2rem;\n }\n', - ], - [ - '\n height: 2rem;\n position: relative;\n padding: 0 0.75rem;\n flex: 1;\n border: ', - ';\n :hover {\n border: ', - ';\n }\n\n input {\n width: 100%;\n height: 100%;\n border: 0px;\n border-radius: 2rem;\n }\n', - ] - )), - function (_a) { - var theme = _a.theme, - active = _a.active, - warning = _a.warning - return active ? '1px solid ' + (warning ? theme.red1 : theme.primary1) : warning && '1px solid ' + theme.red1 - }, - function (_a) { - var theme = _a.theme, - active = _a.active, - warning = _a.warning - return active && '1px solid ' + (warning ? polished.darken(0.1, theme.red1) : polished.darken(0.1, theme.primary1)) - } -) -var SlippageEmojiContainer = styled__default['default'].span( - templateObject_6$1 || - (templateObject_6$1 = __makeTemplateObject(['\n color: #f3841e;\n ', '\n'], ['\n color: #f3841e;\n ', '\n'])), - function (_a) { - var theme = _a.theme - return theme.mediaWidth.upToSmall( - templateObject_5$1 || - (templateObject_5$1 = __makeTemplateObject(['\n display: none;\n '], ['\n display: none;\n '])) - ) - } -) -var THREE_DAYS_IN_SECONDS = - ms__default['default'](templateObject_7$1 || (templateObject_7$1 = __makeTemplateObject(['3 days'], ['3 days']))) / - 1000 -function TransactionSettings(_a) { - var placeholderSlippage = _a.placeholderSlippage - var chainId = useActiveWeb3React().chainId - var theme = React.useContext(styled.ThemeContext) - var userSlippageTolerance = useUserSlippageTolerance() - var setUserSlippageTolerance = useSetUserSlippageTolerance() - var _b = __read(useUserTransactionTTL(), 2), - deadline = _b[0], - setDeadline = _b[1] - var _c = __read(React.useState(''), 2), - slippageInput = _c[0], - setSlippageInput = _c[1] - var _d = __read(React.useState(false), 2), - slippageError = _d[0], - setSlippageError = _d[1] - var _e = __read(React.useState(''), 2), - deadlineInput = _e[0], - setDeadlineInput = _e[1] - var _f = __read(React.useState(false), 2), - deadlineError = _f[0], - setDeadlineError = _f[1] - function parseSlippageInput(value) { - // populate what the user typed and clear the error - setSlippageInput(value) - setSlippageError(false) - if (value.length === 0) { - setUserSlippageTolerance('auto') - } else { - var parsed = Math.floor(Number.parseFloat(value) * 100) - if (!Number.isInteger(parsed) || parsed < 0 || parsed > 5000) { - setUserSlippageTolerance('auto') - if (value !== '.') { - setSlippageError(SlippageError.InvalidInput) - } - } else { - setUserSlippageTolerance(new sdkCore.Percent(parsed, 10000)) - } - } - } - var tooLow = userSlippageTolerance !== 'auto' && userSlippageTolerance.lessThan(new sdkCore.Percent(5, 10000)) - var tooHigh = userSlippageTolerance !== 'auto' && userSlippageTolerance.greaterThan(new sdkCore.Percent(1, 100)) - function parseCustomDeadline(value) { - // populate what the user typed and clear the error - setDeadlineInput(value) - setDeadlineError(false) - if (value.length === 0) { - setDeadline(DEFAULT_DEADLINE_FROM_NOW) - } else { - try { - var parsed = Math.floor(Number.parseFloat(value) * 60) - if (!Number.isInteger(parsed) || parsed < 60 || parsed > THREE_DAYS_IN_SECONDS) { - setDeadlineError(DeadlineError.InvalidInput) - } else { - setDeadline(parsed) - } - } catch (error) { - console.error(error) - setDeadlineError(DeadlineError.InvalidInput) - } - } - } - var showCustomDeadlineRow = Boolean(chainId && !L2_CHAIN_IDS.includes(chainId)) - return jsxRuntime.jsxs( - AutoColumn, - __assign( - { gap: 'md' }, - { - children: [ - jsxRuntime.jsxs( - AutoColumn, - __assign( - { gap: 'sm' }, - { - children: [ - jsxRuntime.jsxs( - RowFixed, - { - children: [ - jsxRuntime.jsx( - ThemedText.Black, - __assign( - { fontWeight: 400, fontSize: 14, color: theme.text2 }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'Slippage tolerance' }, void 0) } - ), - void 0 - ), - jsxRuntime.jsx( - QuestionHelper, - { - text: jsxRuntime.jsx( - macro.Trans, - { - children: - 'Your transaction will revert if the price changes unfavorably by more than this percentage.', - }, - void 0 - ), - }, - void 0 - ), - ], - }, - void 0 - ), - jsxRuntime.jsxs( - RowBetween, - { - children: [ - jsxRuntime.jsx( - Option, - __assign( - { - onClick() { - parseSlippageInput('') - }, - active: userSlippageTolerance === 'auto', - }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'Auto' }, void 0) } - ), - void 0 - ), - jsxRuntime.jsx( - OptionCustom, - __assign( - { active: userSlippageTolerance !== 'auto', warning: !!slippageError, tabIndex: -1 }, - { - children: jsxRuntime.jsxs( - RowBetween, - { - children: [ - tooLow || tooHigh - ? jsxRuntime.jsx( - SlippageEmojiContainer, - { - children: jsxRuntime.jsx( - 'span', - __assign( - { role: 'img', 'aria-label': 'warning' }, - { children: '\u26A0\uFE0F' } - ), - void 0 - ), - }, - void 0 - ) - : null, - jsxRuntime.jsx( - Input, - { - placeholder: placeholderSlippage.toFixed(2), - value: - slippageInput.length > 0 - ? slippageInput - : userSlippageTolerance === 'auto' - ? '' - : userSlippageTolerance.toFixed(2), - onChange(e) { - return parseSlippageInput(e.target.value) - }, - onBlur() { - setSlippageInput('') - setSlippageError(false) - }, - color: slippageError ? 'red' : '', - }, - void 0 - ), - '%', - ], - }, - void 0 - ), - } - ), - void 0 - ), - ], - }, - void 0 - ), - slippageError || tooLow || tooHigh - ? jsxRuntime.jsx( - RowBetween, - __assign( - { - style: { - fontSize: '14px', - paddingTop: '7px', - color: slippageError ? 'red' : '#F3841E', - }, - }, - { - children: slippageError - ? jsxRuntime.jsx(macro.Trans, { children: 'Enter a valid slippage percentage' }, void 0) - : tooLow - ? jsxRuntime.jsx(macro.Trans, { children: 'Your transaction may fail' }, void 0) - : jsxRuntime.jsx(macro.Trans, { children: 'Your transaction may be frontrun' }, void 0), - } - ), - void 0 - ) - : null, - ], - } - ), - void 0 - ), - showCustomDeadlineRow && - jsxRuntime.jsxs( - AutoColumn, - __assign( - { gap: 'sm' }, - { - children: [ - jsxRuntime.jsxs( - RowFixed, - { - children: [ - jsxRuntime.jsx( - ThemedText.Black, - __assign( - { fontSize: 14, fontWeight: 400, color: theme.text2 }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'Transaction deadline' }, void 0) } - ), - void 0 - ), - jsxRuntime.jsx( - QuestionHelper, - { - text: jsxRuntime.jsx( - macro.Trans, - { - children: - 'Your transaction will revert if it is pending for more than this period of time.', - }, - void 0 - ), - }, - void 0 - ), - ], - }, - void 0 - ), - jsxRuntime.jsxs( - RowFixed, - { - children: [ - jsxRuntime.jsx( - OptionCustom, - __assign( - { style: { width: '80px' }, warning: !!deadlineError, tabIndex: -1 }, - { - children: jsxRuntime.jsx( - Input, - { - placeholder: (DEFAULT_DEADLINE_FROM_NOW / 60).toString(), - value: - deadlineInput.length > 0 - ? deadlineInput - : deadline === DEFAULT_DEADLINE_FROM_NOW - ? '' - : (deadline / 60).toString(), - onChange(e) { - return parseCustomDeadline(e.target.value) - }, - onBlur() { - setDeadlineInput('') - setDeadlineError(false) - }, - color: deadlineError ? 'red' : '', - }, - void 0 - ), - } - ), - void 0 - ), - jsxRuntime.jsx( - ThemedText.Body, - __assign( - { style: { paddingLeft: '8px' }, fontSize: 14 }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'minutes' }, void 0) } - ), - void 0 - ), - ], - }, - void 0 - ), - ], - } - ), - void 0 - ), - ], - } - ), - void 0 - ) -} -var templateObject_1$9, - templateObject_2$3, - templateObject_3$2, - templateObject_4$1, - templateObject_5$1, - templateObject_6$1, - templateObject_7$1 - -var StyledMenuIcon = styled__default['default'](reactFeather.Settings)( - templateObject_1$8 || - (templateObject_1$8 = __makeTemplateObject( - ['\n height: 20px;\n width: 20px;\n\n > * {\n stroke: ', ';\n }\n\n :hover {\n opacity: 0.7;\n }\n'], - ['\n height: 20px;\n width: 20px;\n\n > * {\n stroke: ', ';\n }\n\n :hover {\n opacity: 0.7;\n }\n'] - )), - function (_a) { - var theme = _a.theme - return theme.text1 - } -) -var StyledCloseIcon = styled__default['default'](reactFeather.X)( - templateObject_2$2 || - (templateObject_2$2 = __makeTemplateObject( - ['\n height: 20px;\n width: 20px;\n :hover {\n cursor: pointer;\n }\n\n > * {\n stroke: ', ';\n }\n'], - ['\n height: 20px;\n width: 20px;\n :hover {\n cursor: pointer;\n }\n\n > * {\n stroke: ', ';\n }\n'] - )), - function (_a) { - var theme = _a.theme - return theme.text1 - } -) -var StyledMenuButton = styled__default['default'].button( - templateObject_3$1 || - (templateObject_3$1 = __makeTemplateObject( - [ - '\n position: relative;\n width: 100%;\n height: 100%;\n border: none;\n background-color: transparent;\n margin: 0;\n padding: 0;\n border-radius: 0.5rem;\n height: 20px;\n\n :hover,\n :focus {\n cursor: pointer;\n outline: none;\n }\n', - ], - [ - '\n position: relative;\n width: 100%;\n height: 100%;\n border: none;\n background-color: transparent;\n margin: 0;\n padding: 0;\n border-radius: 0.5rem;\n height: 20px;\n\n :hover,\n :focus {\n cursor: pointer;\n outline: none;\n }\n', - ] - )) -) -var EmojiWrapper = styled__default['default'].div( - templateObject_4 || - (templateObject_4 = __makeTemplateObject( - ['\n position: absolute;\n bottom: -6px;\n right: 0px;\n font-size: 14px;\n'], - ['\n position: absolute;\n bottom: -6px;\n right: 0px;\n font-size: 14px;\n'] - )) -) -var StyledMenu = styled__default['default'].div( - templateObject_5 || - (templateObject_5 = __makeTemplateObject( - [ - '\n margin-left: 0.5rem;\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n text-align: left;\n', - ], - [ - '\n margin-left: 0.5rem;\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n text-align: left;\n', - ] - )) -) -var MenuFlyout = styled__default['default'].span( - templateObject_7 || - (templateObject_7 = __makeTemplateObject( - [ - '\n min-width: 20.125rem;\n background-color: ', - ';\n border: 1px solid ', - ';\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 border-radius: 12px;\n display: flex;\n flex-direction: column;\n font-size: 1rem;\n position: absolute;\n top: 2rem;\n right: 0rem;\n z-index: 100;\n\n ', - ';\n\n user-select: none;\n', - ], - [ - '\n min-width: 20.125rem;\n background-color: ', - ';\n border: 1px solid ', - ';\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 border-radius: 12px;\n display: flex;\n flex-direction: column;\n font-size: 1rem;\n position: absolute;\n top: 2rem;\n right: 0rem;\n z-index: 100;\n\n ', - ';\n\n user-select: none;\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.bg2 - }, - function (_a) { - var theme = _a.theme - return theme.bg3 - }, - function (_a) { - var theme = _a.theme - return theme.mediaWidth.upToMedium( - templateObject_6 || - (templateObject_6 = __makeTemplateObject( - ['\n min-width: 18.125rem;\n '], - ['\n min-width: 18.125rem;\n '] - )) - ) - } -) -var Break = styled__default['default'].div( - templateObject_8 || - (templateObject_8 = __makeTemplateObject( - ['\n width: 100%;\n height: 1px;\n background-color: ', ';\n'], - ['\n width: 100%;\n height: 1px;\n background-color: ', ';\n'] - )), - function (_a) { - var theme = _a.theme - return theme.bg3 - } -) -var ModalContentWrapper = styled__default['default'].div( - templateObject_9 || - (templateObject_9 = __makeTemplateObject( - [ - '\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 2rem 0;\n background-color: ', - ';\n border-radius: 20px;\n', - ], - [ - '\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 2rem 0;\n background-color: ', - ';\n border-radius: 20px;\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.bg2 - } -) -function SettingsTab(_a) { - var placeholderSlippage = _a.placeholderSlippage - var chainId = useActiveWeb3React().chainId - var node = React.useRef() - var open = useModalOpen(ApplicationModal.SETTINGS) - var toggle = useToggleSettingsMenu() - var theme = React.useContext(styled.ThemeContext) - var _b = __read(useExpertModeManager(), 2), - expertMode = _b[0], - toggleExpertMode = _b[1] - var _c = __read(useClientSideRouter(), 2), - clientSideRouter = _c[0], - setClientSideRouter = _c[1] - // show confirmation view before turning on - var _d = __read(React.useState(false), 2), - showConfirmation = _d[0], - setShowConfirmation = _d[1] - useOnClickOutside(node, open ? toggle : undefined) - return ( - // https://github.com/DefinitelyTyped/DefinitelyTyped/issues/30451 - jsxRuntime.jsxs( - StyledMenu, - __assign( - { ref: node }, - { - children: [ - jsxRuntime.jsx( - Modal, - __assign( - { - isOpen: showConfirmation, - onDismiss() { - return setShowConfirmation(false) - }, - maxHeight: 100, - }, - { - children: jsxRuntime.jsx( - ModalContentWrapper, - { - children: jsxRuntime.jsxs( - AutoColumn, - __assign( - { gap: 'lg' }, - { - children: [ - jsxRuntime.jsxs( - RowBetween, - __assign( - { style: { padding: '0 2rem' } }, - { - children: [ - jsxRuntime.jsx('div', {}, void 0), - jsxRuntime.jsx( - rebass.Text, - __assign( - { fontWeight: 500, fontSize: 20 }, - { - children: jsxRuntime.jsx( - macro.Trans, - { children: 'Are you sure?' }, - void 0 - ), - } - ), - void 0 - ), - jsxRuntime.jsx( - StyledCloseIcon, - { - onClick() { - return setShowConfirmation(false) - }, - }, - void 0 - ), - ], - } - ), - void 0 - ), - jsxRuntime.jsx(Break, {}, void 0), - jsxRuntime.jsxs( - AutoColumn, - __assign( - { gap: 'lg', style: { padding: '0 2rem' } }, - { - children: [ - jsxRuntime.jsx( - rebass.Text, - __assign( - { fontWeight: 500, fontSize: 20 }, - { - children: jsxRuntime.jsx( - macro.Trans, - { - children: - 'Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.', - }, - void 0 - ), - } - ), - void 0 - ), - jsxRuntime.jsx( - rebass.Text, - __assign( - { fontWeight: 600, fontSize: 20 }, - { - children: jsxRuntime.jsx( - macro.Trans, - { children: 'ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.' }, - void 0 - ), - } - ), - void 0 - ), - jsxRuntime.jsx( - ButtonError, - __assign( - { - error: true, - padding: '12px', - onClick() { - var confirmWord = macro.t( - templateObject_10 || - (templateObject_10 = __makeTemplateObject(['confirm'], ['confirm'])) - ) - if ( - window.prompt( - macro.t( - templateObject_11 || - (templateObject_11 = __makeTemplateObject( - ['Please type the word "', '" to enable expert mode.'], - ['Please type the word "', '" to enable expert mode.'] - )), - confirmWord - ) - ) === confirmWord - ) { - toggleExpertMode() - setShowConfirmation(false) - } - }, - }, - { - children: jsxRuntime.jsx( - rebass.Text, - __assign( - { fontSize: 20, fontWeight: 500, id: 'confirm-expert-mode' }, - { - children: jsxRuntime.jsx( - macro.Trans, - { children: 'Turn On Expert Mode' }, - void 0 - ), - } - ), - void 0 - ), - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - }, - void 0 - ), - } - ), - void 0 - ), - jsxRuntime.jsxs( - StyledMenuButton, - __assign( - { - onClick: toggle, - id: 'open-settings-dialog-button', - 'aria-label': macro.t( - templateObject_12 || - (templateObject_12 = __makeTemplateObject(['Transaction Settings'], ['Transaction Settings'])) - ), - }, - { - children: [ - jsxRuntime.jsx(StyledMenuIcon, {}, void 0), - expertMode - ? jsxRuntime.jsx( - EmojiWrapper, - { - children: jsxRuntime.jsx( - 'span', - __assign({ role: 'img', 'aria-label': 'wizard-icon' }, { children: '\uD83E\uDDD9' }), - void 0 - ), - }, - void 0 - ) - : null, - ], - } - ), - void 0 - ), - open && - jsxRuntime.jsx( - MenuFlyout, - { - children: jsxRuntime.jsxs( - AutoColumn, - __assign( - { gap: 'md', style: { padding: '1rem' } }, - { - children: [ - jsxRuntime.jsx( - rebass.Text, - __assign( - { fontWeight: 600, fontSize: 14 }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'Transaction Settings' }, void 0) } - ), - void 0 - ), - jsxRuntime.jsx(TransactionSettings, { placeholderSlippage }, void 0), - jsxRuntime.jsx( - rebass.Text, - __assign( - { fontWeight: 600, fontSize: 14 }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'Interface Settings' }, void 0) } - ), - void 0 - ), - chainId && - AUTO_ROUTER_SUPPORTED_CHAINS.includes(chainId) && - jsxRuntime.jsxs( - RowBetween, - { - children: [ - jsxRuntime.jsxs( - RowFixed, - { - children: [ - jsxRuntime.jsx( - ThemedText.Black, - __assign( - { fontWeight: 400, fontSize: 14, color: theme.text2 }, - { - children: jsxRuntime.jsx( - macro.Trans, - { children: 'Auto Router API' }, - void 0 - ), - } - ), - void 0 - ), - jsxRuntime.jsx( - QuestionHelper, - { - text: jsxRuntime.jsx( - macro.Trans, - { children: 'Use the Uniswap Labs API to get faster quotes.' }, - void 0 - ), - }, - void 0 - ), - ], - }, - void 0 - ), - jsxRuntime.jsx( - Toggle, - { - id: 'toggle-optimized-router-button', - isActive: !clientSideRouter, - toggle() { - ReactGA__default['default'].event({ - category: 'Routing', - action: clientSideRouter ? 'enable routing API' : 'disable routing API', - }) - setClientSideRouter(!clientSideRouter) - }, - }, - void 0 - ), - ], - }, - void 0 - ), - jsxRuntime.jsxs( - RowBetween, - { - children: [ - jsxRuntime.jsxs( - RowFixed, - { - children: [ - jsxRuntime.jsx( - ThemedText.Black, - __assign( - { fontWeight: 400, fontSize: 14, color: theme.text2 }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'Expert Mode' }, void 0) } - ), - void 0 - ), - jsxRuntime.jsx( - QuestionHelper, - { - text: jsxRuntime.jsx( - macro.Trans, - { - children: - 'Allow high price impact trades and skip the confirm screen. Use at your own risk.', - }, - void 0 - ), - }, - void 0 - ), - ], - }, - void 0 - ), - jsxRuntime.jsx( - Toggle, - { - id: 'toggle-expert-mode-button', - isActive: expertMode, - toggle: expertMode - ? function () { - toggleExpertMode() - setShowConfirmation(false) - } - : function () { - toggle() - setShowConfirmation(true) - }, - }, - void 0 - ), - ], - }, - void 0 - ), - ], - } - ), - void 0 - ), - }, - void 0 - ), - ], - } - ), - void 0 - ) - ) -} -var templateObject_1$8, - templateObject_2$2, - templateObject_3$1, - templateObject_4, - templateObject_5, - templateObject_6, - templateObject_7, - templateObject_8, - templateObject_9, - templateObject_10, - templateObject_11, - templateObject_12 - -var StyledSwapHeader = styled__default['default'].div( - templateObject_1$7 || - (templateObject_1$7 = __makeTemplateObject( - ['\n padding: 1rem 1.25rem 0.5rem 1.25rem;\n width: 100%;\n color: ', ';\n'], - ['\n padding: 1rem 1.25rem 0.5rem 1.25rem;\n width: 100%;\n color: ', ';\n'] - )), - function (_a) { - var theme = _a.theme - return theme.text2 - } -) -function SwapHeader(_a) { - var allowedSlippage = _a.allowedSlippage - return jsxRuntime.jsx( - StyledSwapHeader, - { - children: jsxRuntime.jsxs( - RowBetween, - { - children: [ - jsxRuntime.jsx( - RowFixed, - { - children: jsxRuntime.jsx( - ThemedText.Black, - __assign( - { fontWeight: 500, fontSize: 16, style: { marginRight: '8px' } }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'Swap' }, void 0) } - ), - void 0 - ), - }, - void 0 - ), - jsxRuntime.jsx( - RowFixed, - { children: jsxRuntime.jsx(SettingsTab, { placeholderSlippage: allowedSlippage }, void 0) }, - void 0 - ), - ], - }, - void 0 - ), - }, - void 0 - ) +var SwapRouterVersion; +(function (SwapRouterVersion) { + SwapRouterVersion[SwapRouterVersion["V2"] = 0] = "V2"; + SwapRouterVersion[SwapRouterVersion["V3"] = 1] = "V3"; + SwapRouterVersion[SwapRouterVersion["V2V3"] = 2] = "V2V3"; +})(SwapRouterVersion || (SwapRouterVersion = {})); +/** + * Returns the swap router that will result in the least amount of txs (less gas) for a given swap. + * Heuristic: + * - if trade contains a single v2-only trade & V2 SwapRouter is approved: use V2 SwapRouter + * - if trade contains only v3 & V3 SwapRouter is approved: use V3 SwapRouter + * - else: approve and use V2+V3 SwapRouter + */ +function getTxOptimizedSwapRouter(_a) { + var onlyV2Routes = _a.onlyV2Routes, onlyV3Routes = _a.onlyV3Routes, tradeHasSplits = _a.tradeHasSplits, approvalStates = _a.approvalStates; + if ([approvalStates.v2, approvalStates.v3, approvalStates.v2V3].includes(ApprovalState.PENDING)) + return undefined; + if (approvalStates.v2V3 === ApprovalState.APPROVED) + return SwapRouterVersion.V2V3; + if (approvalStates.v2 === ApprovalState.APPROVED && onlyV2Routes && !tradeHasSplits) + return SwapRouterVersion.V2; + if (approvalStates.v3 === ApprovalState.APPROVED && onlyV3Routes) + return SwapRouterVersion.V3; + return SwapRouterVersion.V2V3; } -var templateObject_1$7 -function parsedQueryString(search) { - if (!search) { - // react-router-dom places search string in the hash - var hash = window.location.hash - search = hash.substr(hash.indexOf('?')) - } - return search && search.length > 1 ? qs.parse(search, { parseArrays: false, ignoreQueryPrefix: true }) : {} +/** Returns approval state for all known swap routers */ +function useSwapApprovalStates(trade, allowedSlippage, useIsPendingApproval) { + var chainId = useActiveWeb3React().chainId; + var amountToApprove = React.useMemo(function () { return (trade && trade.inputAmount.currency.isToken ? trade.maximumAmountIn(allowedSlippage) : undefined); }, [trade, allowedSlippage]); + var v2RouterAddress = chainId ? V2_ROUTER_ADDRESS[chainId] : undefined; + var v3RouterAddress = chainId ? V3_ROUTER_ADDRESS[chainId] : undefined; + var swapRouterAddress = chainId ? SWAP_ROUTER_ADDRESSES[chainId] : undefined; + var v2 = useApprovalStateForSpender(amountToApprove, v2RouterAddress, useIsPendingApproval); + var v3 = useApprovalStateForSpender(amountToApprove, v3RouterAddress, useIsPendingApproval); + var v2V3 = useApprovalStateForSpender(amountToApprove, swapRouterAddress, useIsPendingApproval); + return React.useMemo(function () { return ({ v2: v2, v3: v3, v2V3: v2V3 }); }, [v2, v2V3, v3]); +} +function useSwapRouterAddress(trade) { + var chainId = useActiveWeb3React().chainId; + return React.useMemo(function () { + return chainId + ? trade instanceof v2Sdk.Trade + ? V2_ROUTER_ADDRESS[chainId] + : trade instanceof v3Sdk.Trade + ? V3_ROUTER_ADDRESS[chainId] + : SWAP_ROUTER_ADDRESSES[chainId] + : undefined; + }, [chainId, trade]); +} +// wraps useApproveCallback in the context of a swap +function useSwapApproval(trade, allowedSlippage, useIsPendingApproval) { + var amountToApprove = React.useMemo(function () { return (trade && trade.inputAmount.currency.isToken ? trade.maximumAmountIn(allowedSlippage) : undefined); }, [trade, allowedSlippage]); + var spender = useSwapRouterAddress(trade); + var approval = useApproval(amountToApprove, spender, useIsPendingApproval); + if (trade instanceof v2Sdk.Trade || trade instanceof v3Sdk.Trade) { + var approvalState = approval[0]; + invariant__default["default"](approvalState === ApprovalState.APPROVED, 'Trying to approve legacy router'); + } + return approval; +} +function useSwapApprovalOptimizedTrade(trade, allowedSlippage, useIsPendingApproval) { + var _a; + var onlyV2Routes = trade === null || trade === void 0 ? void 0 : trade.routes.every(function (route) { return route.protocol === routerSdk.Protocol.V2; }); + var onlyV3Routes = trade === null || trade === void 0 ? void 0 : trade.routes.every(function (route) { return route.protocol === routerSdk.Protocol.V3; }); + var tradeHasSplits = ((_a = trade === null || trade === void 0 ? void 0 : trade.routes.length) !== null && _a !== void 0 ? _a : 0) > 1; + var approvalStates = useSwapApprovalStates(trade, allowedSlippage, useIsPendingApproval); + var optimizedSwapRouter = React.useMemo(function () { return getTxOptimizedSwapRouter({ onlyV2Routes: onlyV2Routes, onlyV3Routes: onlyV3Routes, tradeHasSplits: tradeHasSplits, approvalStates: approvalStates }); }, [approvalStates, tradeHasSplits, onlyV2Routes, onlyV3Routes]); + return React.useMemo(function () { + if (!trade) + return undefined; + try { + switch (optimizedSwapRouter) { + case SwapRouterVersion.V2V3: + return trade; + case SwapRouterVersion.V2: + var pairs = trade.swaps[0].route.pools.filter(function (pool) { return pool instanceof v2Sdk.Pair; }); + var v2Route = new v2Sdk.Route(pairs, trade.inputAmount.currency, trade.outputAmount.currency); + return new v2Sdk.Trade(v2Route, trade.inputAmount, trade.tradeType); + case SwapRouterVersion.V3: + return v3Sdk.Trade.createUncheckedTradeWithMultipleRoutes({ + routes: trade.swaps.map(function (_a) { + var route = _a.route, inputAmount = _a.inputAmount, outputAmount = _a.outputAmount; + return ({ + route: new v3Sdk.Route(route.pools.filter(function (p) { return p instanceof v3Sdk.Pool; }), inputAmount.currency, outputAmount.currency), + inputAmount: inputAmount, + outputAmount: outputAmount, + }); + }), + tradeType: trade.tradeType, + }); + default: + return undefined; + } + } + catch (e) { + // TODO(#2989): remove try-catch + console.debug(e); + return undefined; + } + }, [trade, optimizedSwapRouter]); } -function useParsedQueryString() { - var search = reactRouterDom.useLocation().search - return React.useMemo( - function () { - return parsedQueryString(search) - }, - [search] - ) + +function useGetAndTrackApproval(getApproval) { + var addTransaction = useTransactionAdder(); + return React.useCallback(function () { + return getApproval().then(function (pending) { + if (pending) { + var response = pending.response, tokenAddress = pending.tokenAddress, spender = pending.spenderAddress; + addTransaction(response, { type: TransactionType.APPROVAL, tokenAddress: tokenAddress, spender: spender }); + } + }); + }, [addTransaction, getApproval]); +} +function useApprovalOptimizedTrade(trade, allowedSlippage) { + return useSwapApprovalOptimizedTrade(trade, allowedSlippage, useHasPendingApproval); +} +function useApproveCallbackFromTrade(trade, allowedSlippage) { + var _a = __read(useSwapApproval(trade, allowedSlippage, useHasPendingApproval), 2), approval = _a[0], getApproval = _a[1]; + return [approval, useGetAndTrackApproval(getApproval)]; } -var SUPPORTED_LOCALES = [ - // order as they appear in the language dropdown - 'en-US', - 'af-ZA', - 'ar-SA', - 'ca-ES', - 'cs-CZ', - 'da-DK', - 'de-DE', - 'el-GR', - 'es-ES', - 'fi-FI', - 'fr-FR', - 'he-IL', - 'hu-HU', - 'id-ID', - 'it-IT', - 'ja-JP', - 'ko-KR', - 'nl-NL', - 'no-NO', - 'pl-PL', - 'pt-BR', - 'pt-PT', - 'ro-RO', - 'ru-RU', - 'sr-SP', - 'sv-SE', - 'sw-TZ', - 'tr-TR', - 'uk-UA', - 'vi-VN', - 'zh-CN', - 'zh-TW', -] -var DEFAULT_LOCALE = 'en-US' -var LOCALE_LABEL = { - 'af-ZA': 'Afrikaans', - 'ar-SA': 'العربية', - 'ca-ES': 'Català', - 'cs-CZ': 'čeština', - 'da-DK': 'dansk', - 'de-DE': 'Deutsch', - 'el-GR': 'ελληνικά', - 'en-US': 'English', - 'es-ES': 'Español', - 'fi-FI': 'suomi', - 'fr-FR': 'français', - 'he-IL': 'עִברִית', - 'hu-HU': 'Magyar', - 'id-ID': 'bahasa Indonesia', - 'it-IT': 'Italiano', - 'ja-JP': '日本語', - 'ko-KR': '한국어', - 'nl-NL': 'Nederlands', - 'no-NO': 'norsk', - 'pl-PL': 'Polskie', - 'pt-BR': 'português', - 'pt-PT': 'português', - 'ro-RO': 'Română', - 'ru-RU': 'русский', - 'sr-SP': 'Српски', - 'sv-SE': 'svenska', - 'sw-TZ': 'Kiswahili', - 'tr-TR': 'Türkçe', - 'uk-UA': 'Український', - 'vi-VN': 'Tiếng Việt', - 'zh-CN': '简体中文', - 'zh-TW': '繁体中文', - pseudo: 'ƥƨèúδô', +var _a$1, _b, _c, _d, _e; +var PermitType; +(function (PermitType) { + PermitType[PermitType["AMOUNT"] = 1] = "AMOUNT"; + PermitType[PermitType["ALLOWED"] = 2] = "ALLOWED"; +})(PermitType || (PermitType = {})); +// 20 minutes to submit after signing +var PERMIT_VALIDITY_BUFFER = 20 * 60; +// todo: read this information from extensions on token lists or elsewhere (permit registry?) +var PERMITTABLE_TOKENS = { + 1: (_a$1 = {}, + _a$1[USDC.address] = { type: PermitType.AMOUNT, name: 'USD Coin', version: '2' }, + _a$1[DAI.address] = { type: PermitType.ALLOWED, name: 'Dai Stablecoin', version: '1' }, + _a$1[UNI[1].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }, + _a$1), + 4: (_b = { + '0xc7AD46e0b8a400Bb3C915120d284AafbA8fc4735': { type: PermitType.ALLOWED, name: 'Dai Stablecoin', version: '1' } + }, + _b[UNI[4].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }, + _b), + 3: (_c = {}, + _c[UNI[3].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }, + _c['0x07865c6E87B9F70255377e024ace6630C1Eaa37F'] = { type: PermitType.AMOUNT, name: 'USD Coin', version: '2' }, + _c), + 5: (_d = {}, + _d[UNI[5].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }, + _d), + 42: (_e = {}, + _e[UNI[42].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }, + _e), +}; +var UseERC20PermitState; +(function (UseERC20PermitState) { + // returned for any reason, e.g. it is an argent wallet, or the currency does not support it + UseERC20PermitState[UseERC20PermitState["NOT_APPLICABLE"] = 0] = "NOT_APPLICABLE"; + UseERC20PermitState[UseERC20PermitState["LOADING"] = 1] = "LOADING"; + UseERC20PermitState[UseERC20PermitState["NOT_SIGNED"] = 2] = "NOT_SIGNED"; + UseERC20PermitState[UseERC20PermitState["SIGNED"] = 3] = "SIGNED"; +})(UseERC20PermitState || (UseERC20PermitState = {})); +var EIP712_DOMAIN_TYPE = [ + { name: 'name', type: 'string' }, + { name: 'version', type: 'string' }, + { name: 'chainId', type: 'uint256' }, + { name: 'verifyingContract', type: 'address' }, +]; +var EIP712_DOMAIN_TYPE_NO_VERSION = [ + { name: 'name', type: 'string' }, + { name: 'chainId', type: 'uint256' }, + { name: 'verifyingContract', type: 'address' }, +]; +var EIP2612_TYPE = [ + { name: 'owner', type: 'address' }, + { name: 'spender', type: 'address' }, + { name: 'value', type: 'uint256' }, + { name: 'nonce', type: 'uint256' }, + { name: 'deadline', type: 'uint256' }, +]; +var PERMIT_ALLOWED_TYPE = [ + { name: 'holder', type: 'address' }, + { name: 'spender', type: 'address' }, + { name: 'nonce', type: 'uint256' }, + { name: 'expiry', type: 'uint256' }, + { name: 'allowed', type: 'bool' }, +]; +function useERC20Permit(currencyAmount, spender, transactionDeadline, overridePermitInfo) { + var _a, _b; + var _c = useActiveWeb3React(), account = _c.account, chainId = _c.chainId, library = _c.library; + var tokenAddress = ((_a = currencyAmount === null || currencyAmount === void 0 ? void 0 : currencyAmount.currency) === null || _a === void 0 ? void 0 : _a.isToken) ? currencyAmount.currency.address : undefined; + var eip2612Contract = useEIP2612Contract(tokenAddress); + var isArgentWallet = useIsArgentWallet(); + var nonceInputs = React.useMemo(function () { return [account !== null && account !== void 0 ? account : undefined]; }, [account]); + var tokenNonceState = useSingleCallResult(eip2612Contract, 'nonces', nonceInputs); + var permitInfo = overridePermitInfo !== null && overridePermitInfo !== void 0 ? overridePermitInfo : (chainId && tokenAddress ? (_b = PERMITTABLE_TOKENS[chainId]) === null || _b === void 0 ? void 0 : _b[tokenAddress] : undefined); + var _d = __read(React.useState(null), 2), signatureData = _d[0], setSignatureData = _d[1]; + return React.useMemo(function () { + var _a, _b; + if (isArgentWallet || + !currencyAmount || + !eip2612Contract || + !account || + !chainId || + !transactionDeadline || + !library || + !tokenNonceState.valid || + !tokenAddress || + !spender || + !permitInfo) { + return { + state: UseERC20PermitState.NOT_APPLICABLE, + signatureData: null, + gatherPermitSignature: null, + }; + } + var nonceNumber = (_b = (_a = tokenNonceState.result) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.toNumber(); + if (tokenNonceState.loading || typeof nonceNumber !== 'number') { + return { + state: UseERC20PermitState.LOADING, + signatureData: null, + gatherPermitSignature: null, + }; + } + var isSignatureDataValid = signatureData && + signatureData.owner === account && + signatureData.deadline >= transactionDeadline.toNumber() && + signatureData.tokenAddress === tokenAddress && + signatureData.nonce === nonceNumber && + signatureData.spender === spender && + ('allowed' in signatureData || JSBI__default["default"].equal(JSBI__default["default"].BigInt(signatureData.amount), currencyAmount.quotient)); + return { + state: isSignatureDataValid ? UseERC20PermitState.SIGNED : UseERC20PermitState.NOT_SIGNED, + signatureData: isSignatureDataValid ? signatureData : null, + gatherPermitSignature: function gatherPermitSignature() { + return __awaiter(this, void 0, void 0, function () { + var allowed, signatureDeadline, value, message, domain, data; + return __generator(this, function (_a) { + allowed = permitInfo.type === PermitType.ALLOWED; + signatureDeadline = transactionDeadline.toNumber() + PERMIT_VALIDITY_BUFFER; + value = currencyAmount.quotient.toString(); + message = allowed + ? { + holder: account, + spender: spender, + allowed: allowed, + nonce: nonceNumber, + expiry: signatureDeadline, + } + : { + owner: account, + spender: spender, + value: value, + nonce: nonceNumber, + deadline: signatureDeadline, + }; + domain = permitInfo.version + ? { + name: permitInfo.name, + version: permitInfo.version, + verifyingContract: tokenAddress, + chainId: chainId, + } + : { + name: permitInfo.name, + verifyingContract: tokenAddress, + chainId: chainId, + }; + data = JSON.stringify({ + types: { + EIP712Domain: permitInfo.version ? EIP712_DOMAIN_TYPE : EIP712_DOMAIN_TYPE_NO_VERSION, + Permit: allowed ? PERMIT_ALLOWED_TYPE : EIP2612_TYPE, + }, + domain: domain, + primaryType: 'Permit', + message: message, + }); + return [2 /*return*/, library + .send('eth_signTypedData_v4', [account, data]) + .then(bytes.splitSignature) + .then(function (signature) { + setSignatureData(__assign(__assign({ v: signature.v, r: signature.r, s: signature.s, deadline: signatureDeadline }, (allowed ? { allowed: allowed } : { amount: value })), { nonce: nonceNumber, chainId: chainId, owner: account, spender: spender, tokenAddress: tokenAddress, permitType: permitInfo.type })); + })]; + }); + }); + }, + }; + }, [ + currencyAmount, + eip2612Contract, + account, + chainId, + isArgentWallet, + transactionDeadline, + library, + tokenNonceState.loading, + tokenNonceState.valid, + tokenNonceState.result, + tokenAddress, + spender, + permitInfo, + signatureData, + ]); +} +function useERC20PermitFromTrade(trade, allowedSlippage, transactionDeadline) { + var chainId = useActiveWeb3React().chainId; + var swapRouterAddress = chainId + ? // v2 router does not support + trade instanceof v2Sdk.Trade + ? undefined + : trade instanceof v3Sdk.Trade + ? V3_ROUTER_ADDRESS[chainId] + : SWAP_ROUTER_ADDRESSES[chainId] + : undefined; + var amountToApprove = React.useMemo(function () { return (trade ? trade.maximumAmountIn(allowedSlippage) : undefined); }, [trade, allowedSlippage]); + return useERC20Permit(amountToApprove, swapRouterAddress, transactionDeadline, null); } -var Field$3 -;(function (Field) { - Field['LIQUIDITY_PERCENT'] = 'LIQUIDITY_PERCENT' - Field['LIQUIDITY'] = 'LIQUIDITY' - Field['CURRENCY_A'] = 'CURRENCY_A' - Field['CURRENCY_B'] = 'CURRENCY_B' -})(Field$3 || (Field$3 = {})) -var typeInput$3 = toolkit.createAction('burn/typeInputBurn') - -var initialState$7 = { - independentField: Field$3.LIQUIDITY_PERCENT, - typedValue: '0', +/** + * Returns true if the input currency or output currency cannot be traded in the interface + * @param currencyIn the input currency to check + * @param currencyOut the output currency to check + */ +function useIsSwapUnsupported(currencyIn, currencyOut) { + var unsupportedTokens = useUnsupportedTokens(); + return React.useMemo(function () { + if (!unsupportedTokens) { + return false; + } + var currencyInUnsupported = Boolean((currencyIn === null || currencyIn === void 0 ? void 0 : currencyIn.isToken) && unsupportedTokens[currencyIn.address]); + var currencyOutUnsupported = Boolean((currencyOut === null || currencyOut === void 0 ? void 0 : currencyOut.isToken) && unsupportedTokens[currencyOut.address]); + return currencyInUnsupported || currencyOutUnsupported; + }, [currencyIn, currencyOut, unsupportedTokens]); } -var burn = toolkit.createReducer(initialState$7, function (builder) { - return builder.addCase(typeInput$3, function (state, _a) { - var _b = _a.payload, - field = _b.field, - typedValue = _b.typedValue - return __assign(__assign({}, state), { independentField: field, typedValue }) - }) -}) -var selectPercent = toolkit.createAction('burnV3/selectBurnPercent') - -var initialState$6 = { - percent: 0, -} -var burnV3 = toolkit.createReducer(initialState$6, function (builder) { - return builder.addCase(selectPercent, function (state, _a) { - var percent = _a.payload.percent - return __assign(__assign({}, state), { percent }) - }) -}) - -var _a$4 -// List of supported subgraphs. Note that the app currently only support one active subgraph at a time -var CHAIN_SUBGRAPH_URL = - ((_a$4 = {}), - (_a$4[SupportedChainId.MAINNET] = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3'), - (_a$4[SupportedChainId.RINKEBY] = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3'), - (_a$4[SupportedChainId.ARBITRUM_ONE] = 'https://api.thegraph.com/subgraphs/name/ianlapham/arbitrum-minimal'), - (_a$4[SupportedChainId.OPTIMISM] = 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-optimism-dev'), - (_a$4[SupportedChainId.POLYGON] = 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-v3-polygon'), - _a$4) -var api = react.createApi({ - reducerPath: 'dataApi', - baseQuery: graphqlRequestBaseQuery(), - endpoints(builder) { - return { - allV3Ticks: builder.query({ - query(_a) { - var poolAddress = _a.poolAddress, - _b = _a.skip, - skip = _b === void 0 ? 0 : _b - return { - document: graphqlRequest.gql( - templateObject_1$6 || - (templateObject_1$6 = __makeTemplateObject( - [ - '\n query allV3Ticks($poolAddress: String!, $skip: Int!) {\n ticks(first: 1000, skip: $skip, where: { poolAddress: $poolAddress }, orderBy: tickIdx) {\n tick: tickIdx\n liquidityNet\n price0\n price1\n }\n }\n ', - ], - [ - '\n query allV3Ticks($poolAddress: String!, $skip: Int!) {\n ticks(first: 1000, skip: $skip, where: { poolAddress: $poolAddress }, orderBy: tickIdx) {\n tick: tickIdx\n liquidityNet\n price0\n price1\n }\n }\n ', - ] - )) - ), - variables: { - poolAddress, - skip, - }, - } - }, - }), - feeTierDistribution: builder.query({ - query(_a) { - var token0 = _a.token0, - token1 = _a.token1 - return { - document: graphqlRequest.gql( - templateObject_2$1 || - (templateObject_2$1 = __makeTemplateObject( - [ - '\n query feeTierDistribution($token0: String!, $token1: String!) {\n _meta {\n block {\n number\n }\n }\n asToken0: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token0, token1: $token1 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n asToken1: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token1, token1: $token0 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n }\n ', - ], - [ - '\n query feeTierDistribution($token0: String!, $token1: String!) {\n _meta {\n block {\n number\n }\n }\n asToken0: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token0, token1: $token1 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n asToken1: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token1, token1: $token0 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n }\n ', - ] - )) - ), - variables: { - token0, - token1, - }, - } - }, - }), - } - }, -}) -// Graphql query client wrapper that builds a dynamic url based on chain id -function graphqlRequestBaseQuery() { - var _this = this - return function (_a, _b) { - var document = _a.document, - variables = _a.variables - var getState = _b.getState - return __awaiter(_this, void 0, void 0, function () { - var chainId, subgraphUrl, error_1, name_1, message, stack, request, response - var _c - return __generator(this, function (_d) { - switch (_d.label) { - case 0: - _d.trys.push([0, 2, , 3]) - chainId = getState().application.chainId - subgraphUrl = chainId ? CHAIN_SUBGRAPH_URL[chainId] : undefined - if (!subgraphUrl) { - return [ - 2 /*return*/, - { - error: { - name: 'UnsupportedChainId', - message: 'Subgraph queries against ChainId ' + chainId + ' are not supported.', - stack: '', - }, - }, - ] - } - _c = {} - return [4 /*yield*/, new graphqlRequest.GraphQLClient(subgraphUrl).request(document, variables)] - case 1: - return [2 /*return*/, ((_c.data = _d.sent()), (_c.meta = {}), _c)] - case 2: - error_1 = _d.sent() - if (error_1 instanceof graphqlRequest.ClientError) { - ;(name_1 = error_1.name), - (message = error_1.message), - (stack = error_1.stack), - (request = error_1.request), - (response = error_1.response) - return [ - 2 /*return*/, - { - error: { name: name_1, message, stack }, - meta: { request, response }, - }, - ] - } - throw error_1 - case 3: - return [2 /*return*/] - } - }) - }) - } +var WrapType; +(function (WrapType) { + WrapType[WrapType["NOT_APPLICABLE"] = 0] = "NOT_APPLICABLE"; + WrapType[WrapType["WRAP"] = 1] = "WRAP"; + WrapType[WrapType["UNWRAP"] = 2] = "UNWRAP"; +})(WrapType || (WrapType = {})); +var NOT_APPLICABLE = { wrapType: WrapType.NOT_APPLICABLE }; +var WrapInputError; +(function (WrapInputError) { + WrapInputError[WrapInputError["NO_ERROR"] = 0] = "NO_ERROR"; + WrapInputError[WrapInputError["ENTER_NATIVE_AMOUNT"] = 1] = "ENTER_NATIVE_AMOUNT"; + WrapInputError[WrapInputError["ENTER_WRAPPED_AMOUNT"] = 2] = "ENTER_WRAPPED_AMOUNT"; + WrapInputError[WrapInputError["INSUFFICIENT_NATIVE_BALANCE"] = 3] = "INSUFFICIENT_NATIVE_BALANCE"; + WrapInputError[WrapInputError["INSUFFICIENT_WRAPPED_BALANCE"] = 4] = "INSUFFICIENT_WRAPPED_BALANCE"; +})(WrapInputError || (WrapInputError = {})); +function WrapErrorText(_a) { + var wrapInputError = _a.wrapInputError; + var native = useNativeCurrency(); + var wrapped = native === null || native === void 0 ? void 0 : native.wrapped; + switch (wrapInputError) { + case WrapInputError.NO_ERROR: + return null; + case WrapInputError.ENTER_NATIVE_AMOUNT: + return jsxRuntime.jsxs(macro.Trans, { children: ["Enter ", native === null || native === void 0 ? void 0 : native.symbol, " amount"] }, void 0); + case WrapInputError.ENTER_WRAPPED_AMOUNT: + return jsxRuntime.jsxs(macro.Trans, { children: ["Enter ", wrapped === null || wrapped === void 0 ? void 0 : wrapped.symbol, " amount"] }, void 0); + case WrapInputError.INSUFFICIENT_NATIVE_BALANCE: + return jsxRuntime.jsxs(macro.Trans, { children: ["Insufficient ", native === null || native === void 0 ? void 0 : native.symbol, " balance"] }, void 0); + case WrapInputError.INSUFFICIENT_WRAPPED_BALANCE: + return jsxRuntime.jsxs(macro.Trans, { children: ["Insufficient ", wrapped === null || wrapped === void 0 ? void 0 : wrapped.symbol, " balance"] }, void 0); + } +} +/** + * Given the selected input and output currency, return a wrap callback + * @param inputCurrency the selected input currency + * @param outputCurrency the selected output currency + * @param typedValue the user input value + */ +function useWrapCallback(inputCurrency, outputCurrency, typedValue) { + var _this = this; + var _a = useActiveWeb3React(), chainId = _a.chainId, account = _a.account; + var wethContract = useWETHContract(); + var balance = useCurrencyBalance(account !== null && account !== void 0 ? account : undefined, inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : undefined); + // we can always parse the amount typed as the input currency, since wrapping is 1:1 + var inputAmount = React.useMemo(function () { return tryParseCurrencyAmount(typedValue, inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : undefined); }, [inputCurrency, typedValue]); + var addTransaction = useTransactionAdder(); + return React.useMemo(function () { + if (!wethContract || !chainId || !inputCurrency || !outputCurrency) + return NOT_APPLICABLE; + var weth = WRAPPED_NATIVE_CURRENCY[chainId]; + if (!weth) + return NOT_APPLICABLE; + var hasInputAmount = Boolean(inputAmount === null || inputAmount === void 0 ? void 0 : inputAmount.greaterThan('0')); + var sufficientBalance = inputAmount && balance && !balance.lessThan(inputAmount); + if (inputCurrency.isNative && weth.equals(outputCurrency)) { + return { + wrapType: WrapType.WRAP, + execute: sufficientBalance && inputAmount + ? function () { return __awaiter(_this, void 0, void 0, function () { + var txReceipt, error_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 2, , 3]); + return [4 /*yield*/, wethContract.deposit({ value: "0x" + inputAmount.quotient.toString(16) })]; + case 1: + txReceipt = _a.sent(); + addTransaction(txReceipt, { + type: TransactionType.WRAP, + unwrapped: false, + currencyAmountRaw: inputAmount === null || inputAmount === void 0 ? void 0 : inputAmount.quotient.toString(), + chainId: chainId, + }); + return [3 /*break*/, 3]; + case 2: + error_1 = _a.sent(); + console.error('Could not deposit', error_1); + return [3 /*break*/, 3]; + case 3: return [2 /*return*/]; + } + }); + }); } + : undefined, + inputError: sufficientBalance + ? undefined + : hasInputAmount + ? WrapInputError.INSUFFICIENT_NATIVE_BALANCE + : WrapInputError.ENTER_NATIVE_AMOUNT, + }; + } + else if (weth.equals(inputCurrency) && outputCurrency.isNative) { + return { + wrapType: WrapType.UNWRAP, + execute: sufficientBalance && inputAmount + ? function () { return __awaiter(_this, void 0, void 0, function () { + var txReceipt, error_2; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 2, , 3]); + return [4 /*yield*/, wethContract.withdraw("0x" + inputAmount.quotient.toString(16))]; + case 1: + txReceipt = _a.sent(); + addTransaction(txReceipt, { + type: TransactionType.WRAP, + unwrapped: true, + currencyAmountRaw: inputAmount === null || inputAmount === void 0 ? void 0 : inputAmount.quotient.toString(), + chainId: chainId, + }); + return [3 /*break*/, 3]; + case 2: + error_2 = _a.sent(); + console.error('Could not withdraw', error_2); + return [3 /*break*/, 3]; + case 3: return [2 /*return*/]; + } + }); + }); } + : undefined, + inputError: sufficientBalance + ? undefined + : hasInputAmount + ? WrapInputError.INSUFFICIENT_WRAPPED_BALANCE + : WrapInputError.ENTER_WRAPPED_AMOUNT, + }; + } + else { + return NOT_APPLICABLE; + } + }, [wethContract, chainId, inputCurrency, outputCurrency, inputAmount, balance, addTransaction]); } -var templateObject_1$6, templateObject_2$1 - -// fired once when the app reloads but before the app renders -// allows any updates to be applied to store data loaded from localStorage -var updateVersion = toolkit.createAction('global/updateVersion') -var NEW_LIST_STATE = { - error: null, - current: null, - loadingRequestId: null, - pendingUpdate: null, -} -var initialState$5 = { - lastInitializedDefaultListOfLists: DEFAULT_LIST_OF_LISTS, - byUrl: __assign( - {}, - DEFAULT_LIST_OF_LISTS.reduce(function (memo, listUrl) { - memo[listUrl] = NEW_LIST_STATE - return memo - }, {}) - ), - activeListUrls: DEFAULT_ACTIVE_LIST_URLS, -} -var lists = toolkit.createReducer(initialState$5, function (builder) { - return builder - .addCase(fetchTokenList.pending, function (state, _a) { - var _b, _c, _d, _e - var _f = _a.payload, - requestId = _f.requestId, - url = _f.url - var current = - (_c = (_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.current) !== null && _c !== void 0 - ? _c - : null - var pendingUpdate = - (_e = (_d = state.byUrl[url]) === null || _d === void 0 ? void 0 : _d.pendingUpdate) !== null && _e !== void 0 - ? _e - : null - state.byUrl[url] = { - current, - pendingUpdate, - loadingRequestId: requestId, - error: null, - } - }) - .addCase(fetchTokenList.fulfilled, function (state, _a) { - var _b, _c, _d - var _e = _a.payload, - requestId = _e.requestId, - tokenList = _e.tokenList, - url = _e.url - var current = (_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.current - var loadingRequestId = (_c = state.byUrl[url]) === null || _c === void 0 ? void 0 : _c.loadingRequestId - // no-op if update does nothing - if (current) { - var upgradeType = tokenLists.getVersionUpgrade(current.version, tokenList.version) - if (upgradeType === tokenLists.VersionUpgrade.NONE) return - if (loadingRequestId === null || loadingRequestId === requestId) { - state.byUrl[url] = { - current, - pendingUpdate: tokenList, - loadingRequestId: null, - error: null, - } - } - } else { - // activate if on default active - if (DEFAULT_ACTIVE_LIST_URLS.includes(url)) { - ;(_d = state.activeListUrls) === null || _d === void 0 ? void 0 : _d.push(url) - } - state.byUrl[url] = { - current: tokenList, - pendingUpdate: null, - loadingRequestId: null, - error: null, - } - } - }) - .addCase(fetchTokenList.rejected, function (state, _a) { - var _b - var _c = _a.payload, - url = _c.url, - requestId = _c.requestId, - errorMessage = _c.errorMessage - if (((_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.loadingRequestId) !== requestId) { - // no-op since it's not the latest request - return - } - state.byUrl[url] = { - current: state.byUrl[url].current ? state.byUrl[url].current : null, - pendingUpdate: null, - loadingRequestId: null, - error: errorMessage, - } - }) - .addCase(addList, function (state, _a) { - var url = _a.payload - if (!state.byUrl[url]) { - state.byUrl[url] = NEW_LIST_STATE - } - }) - .addCase(removeList, function (state, _a) { - var url = _a.payload - if (state.byUrl[url]) { - delete state.byUrl[url] - } - // remove list from active urls if needed - if (state.activeListUrls && state.activeListUrls.includes(url)) { - state.activeListUrls = state.activeListUrls.filter(function (u) { - return u !== url - }) - } - }) - .addCase(enableList, function (state, _a) { - var url = _a.payload - if (!state.byUrl[url]) { - state.byUrl[url] = NEW_LIST_STATE - } - if (state.activeListUrls && !state.activeListUrls.includes(url)) { - state.activeListUrls.push(url) - } - if (!state.activeListUrls) { - state.activeListUrls = [url] - } - }) - .addCase(disableList, function (state, _a) { - var url = _a.payload - if (state.activeListUrls && state.activeListUrls.includes(url)) { - state.activeListUrls = state.activeListUrls.filter(function (u) { - return u !== url - }) - } - }) - .addCase(acceptListUpdate, function (state, _a) { - var _b - var url = _a.payload - if (!((_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.pendingUpdate)) { - throw new Error('accept list update called without pending update') - } - state.byUrl[url] = __assign(__assign({}, state.byUrl[url]), { - current: state.byUrl[url].pendingUpdate, - pendingUpdate: null, - }) - }) - .addCase(updateVersion, function (state) { - // state loaded from localStorage, but new lists have never been initialized - if (!state.lastInitializedDefaultListOfLists) { - state.byUrl = initialState$5.byUrl - state.activeListUrls = initialState$5.activeListUrls - } else if (state.lastInitializedDefaultListOfLists) { - var lastInitializedSet_1 = state.lastInitializedDefaultListOfLists.reduce(function (s, l) { - return s.add(l) - }, new Set()) - var newListOfListsSet_1 = DEFAULT_LIST_OF_LISTS.reduce(function (s, l) { - return s.add(l) - }, new Set()) - DEFAULT_LIST_OF_LISTS.forEach(function (listUrl) { - if (!lastInitializedSet_1.has(listUrl)) { - state.byUrl[listUrl] = NEW_LIST_STATE - } - }) - state.lastInitializedDefaultListOfLists.forEach(function (listUrl) { - if (!newListOfListsSet_1.has(listUrl)) { - delete state.byUrl[listUrl] - } - }) - } - state.lastInitializedDefaultListOfLists = DEFAULT_LIST_OF_LISTS - // if no active lists, activate defaults - if (!state.activeListUrls) { - state.activeListUrls = DEFAULT_ACTIVE_LIST_URLS - // for each list on default list, initialize if needed - DEFAULT_ACTIVE_LIST_URLS.map(function (listUrl) { - if (!state.byUrl[listUrl]) { - state.byUrl[listUrl] = NEW_LIST_STATE - } - return true - }) - } - }) -}) - -/** - * Converts a filter to the corresponding string key - * @param filter the filter to convert - */ -function filterToKey(filter) { - var _a, _b, _c, _d - return ( - ((_a = filter.address) !== null && _a !== void 0 ? _a : '') + - ':' + - ((_d = - (_c = - (_b = filter.topics) === null || _b === void 0 - ? void 0 - : _b.map(function (topic) { - return topic ? (Array.isArray(topic) ? topic.join(';') : topic) : '\0' - })) === null || _c === void 0 - ? void 0 - : _c.join('-')) !== null && _d !== void 0 - ? _d - : '') - ) +var MIN_NATIVE_CURRENCY_FOR_GAS = JSBI__default["default"].exponentiate(JSBI__default["default"].BigInt(10), JSBI__default["default"].BigInt(16)); // .01 ETH +/** + * Given some token amount, return the max that can be spent of it + * @param currencyAmount to return max of + */ +function maxAmountSpend(currencyAmount) { + if (!currencyAmount) + return undefined; + if (currencyAmount.currency.isNative) { + if (JSBI__default["default"].greaterThan(currencyAmount.quotient, MIN_NATIVE_CURRENCY_FOR_GAS)) { + return sdkCore.CurrencyAmount.fromRawAmount(currencyAmount.currency, JSBI__default["default"].subtract(currencyAmount.quotient, MIN_NATIVE_CURRENCY_FOR_GAS)); + } + else { + return sdkCore.CurrencyAmount.fromRawAmount(currencyAmount.currency, JSBI__default["default"].BigInt(0)); + } + } + return currencyAmount; } -var _a$3 -var slice = toolkit.createSlice({ - name: 'logs', - initialState: {}, - reducers: { - addListener(state, _a) { - var _b = _a.payload, - chainId = _b.chainId, - filter = _b.filter - if (!state[chainId]) state[chainId] = {} - var key = filterToKey(filter) - if (!state[chainId][key]) - state[chainId][key] = { - listeners: 1, - } - else state[chainId][key].listeners++ - }, - fetchingLogs(state, _a) { - var e_1, _b - var _c = _a.payload, - chainId = _c.chainId, - filters = _c.filters, - blockNumber = _c.blockNumber - if (!state[chainId]) return - try { - for ( - var filters_1 = __values(filters), filters_1_1 = filters_1.next(); - !filters_1_1.done; - filters_1_1 = filters_1.next() - ) { - var filter = filters_1_1.value - var key = filterToKey(filter) - if (!state[chainId][key]) continue - state[chainId][key].fetchingBlockNumber = blockNumber - } - } catch (e_1_1) { - e_1 = { error: e_1_1 } - } finally { - try { - if (filters_1_1 && !filters_1_1.done && (_b = filters_1.return)) _b.call(filters_1) - } finally { - if (e_1) throw e_1.error - } - } - }, - fetchedLogs(state, _a) { - var _b = _a.payload, - chainId = _b.chainId, - filter = _b.filter, - results = _b.results - if (!state[chainId]) return - var key = filterToKey(filter) - var fetchState = state[chainId][key] - if (!fetchState || (fetchState.results && fetchState.results.blockNumber > results.blockNumber)) return - fetchState.results = results - }, - fetchedLogsError(state, _a) { - var _b = _a.payload, - chainId = _b.chainId, - filter = _b.filter, - blockNumber = _b.blockNumber - if (!state[chainId]) return - var key = filterToKey(filter) - var fetchState = state[chainId][key] - if (!fetchState || (fetchState.results && fetchState.results.blockNumber > blockNumber)) return - fetchState.results = { - blockNumber, - error: true, - } - }, - removeListener(state, _a) { - var _b = _a.payload, - chainId = _b.chainId, - filter = _b.filter - if (!state[chainId]) return - var key = filterToKey(filter) - if (!state[chainId][key]) return - state[chainId][key].listeners-- - }, - }, -}) -var logs = slice.reducer -;(_a$3 = slice.actions), _a$3.addListener -_a$3.removeListener -_a$3.fetchedLogs -_a$3.fetchedLogsError -_a$3.fetchingLogs - -var Field$2 -;(function (Field) { - Field['CURRENCY_A'] = 'CURRENCY_A' - Field['CURRENCY_B'] = 'CURRENCY_B' -})(Field$2 || (Field$2 = {})) -var typeInput$2 = toolkit.createAction('mint/typeInputMint') -var resetMintState$1 = toolkit.createAction('mint/resetMintState') - -var initialState$4 = { - independentField: Field$2.CURRENCY_A, - typedValue: '', - otherTypedValue: '', - startPriceTypedValue: '', - leftRangeTypedValue: '', - rightRangeTypedValue: '', -} -var mint = toolkit.createReducer(initialState$4, function (builder) { - return builder - .addCase(resetMintState$1, function () { - return initialState$4 - }) - .addCase(typeInput$2, function (state, _a) { - var _b = _a.payload, - field = _b.field, - typedValue = _b.typedValue, - noLiquidity = _b.noLiquidity - if (noLiquidity) { - // they're typing into the field they've last typed in - if (field === state.independentField) { - return __assign(__assign({}, state), { independentField: field, typedValue }) - } - // they're typing into a new field, store the other value - else { - return __assign(__assign({}, state), { - independentField: field, - typedValue, - otherTypedValue: state.typedValue, - }) - } - } else { - return __assign(__assign({}, state), { independentField: field, typedValue, otherTypedValue: '' }) - } - }) -}) - -var Field$1 -;(function (Field) { - Field['CURRENCY_A'] = 'CURRENCY_A' - Field['CURRENCY_B'] = 'CURRENCY_B' -})(Field$1 || (Field$1 = {})) -var Bound -;(function (Bound) { - Bound['LOWER'] = 'LOWER' - Bound['UPPER'] = 'UPPER' -})(Bound || (Bound = {})) -var typeInput$1 = toolkit.createAction('mintV3/typeInputMint') -var typeStartPriceInput = toolkit.createAction('mintV3/typeStartPriceInput') -var typeLeftRangeInput = toolkit.createAction('mintV3/typeLeftRangeInput') -var typeRightRangeInput = toolkit.createAction('mintV3/typeRightRangeInput') -var resetMintState = toolkit.createAction('mintV3/resetMintState') -var setFullRange = toolkit.createAction('mintV3/setFullRange') - -var initialState$3 = { - independentField: Field$1.CURRENCY_A, - typedValue: '', - startPriceTypedValue: '', - leftRangeTypedValue: '', - rightRangeTypedValue: '', -} -var mintV3 = toolkit.createReducer(initialState$3, function (builder) { - return builder - .addCase(resetMintState, function () { - return initialState$3 - }) - .addCase(setFullRange, function (state) { - return __assign(__assign({}, state), { leftRangeTypedValue: true, rightRangeTypedValue: true }) - }) - .addCase(typeStartPriceInput, function (state, _a) { - var typedValue = _a.payload.typedValue - return __assign(__assign({}, state), { startPriceTypedValue: typedValue }) - }) - .addCase(typeLeftRangeInput, function (state, _a) { - var typedValue = _a.payload.typedValue - return __assign(__assign({}, state), { leftRangeTypedValue: typedValue }) - }) - .addCase(typeRightRangeInput, function (state, _a) { - var typedValue = _a.payload.typedValue - return __assign(__assign({}, state), { rightRangeTypedValue: typedValue }) - }) - .addCase(typeInput$1, function (state, _a) { - var _b = _a.payload, - field = _b.field, - typedValue = _b.typedValue, - noLiquidity = _b.noLiquidity - if (noLiquidity) { - // they're typing into the field they've last typed in - if (field === state.independentField) { - return __assign(__assign({}, state), { independentField: field, typedValue }) - } - // they're typing into a new field, store the other value - else { - return __assign(__assign({}, state), { independentField: field, typedValue }) - } - } else { - return __assign(__assign({}, state), { independentField: field, typedValue }) - } - }) -}) - -var protocols = [routerSdk.Protocol.V2, routerSdk.Protocol.V3] -var DEFAULT_QUERY_PARAMS = { - protocols: protocols - .map(function (p) { - return p.toLowerCase() - }) - .join(','), - // example other params - // forceCrossProtocol: 'true', - // minSplits: '5', -} -function getClientSideQuote(_a) { - var tokenInAddress = _a.tokenInAddress, - tokenInChainId = _a.tokenInChainId, - tokenInDecimals = _a.tokenInDecimals, - tokenInSymbol = _a.tokenInSymbol, - tokenOutAddress = _a.tokenOutAddress, - tokenOutChainId = _a.tokenOutChainId, - tokenOutDecimals = _a.tokenOutDecimals, - tokenOutSymbol = _a.tokenOutSymbol, - amount = _a.amount, - type = _a.type - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - return [ - 4 /*yield*/, - Promise.resolve().then(function () { - return index - }), - ] - case 1: - return [ - 2 /*return*/, - _b.sent().getQuote( - { - type, - chainId: tokenInChainId, - tokenIn: { - address: tokenInAddress, - chainId: tokenInChainId, - decimals: tokenInDecimals, - symbol: tokenInSymbol, - }, - tokenOut: { - address: tokenOutAddress, - chainId: tokenOutChainId, - decimals: tokenOutDecimals, - symbol: tokenOutSymbol, - }, - amount, - }, - { protocols } - ), - ] - } - }) - }) -} -var routingApi = react.createApi({ - reducerPath: 'routingApi', - baseQuery: react.fetchBaseQuery({ - baseUrl: 'https://api.uniswap.org/v1/', - }), - endpoints(build) { - return { - getQuote: build.query({ - queryFn(args, _api, _extraOptions, fetch) { - return __awaiter(this, void 0, void 0, function () { - var tokenInAddress, - tokenInChainId, - tokenOutAddress, - tokenOutChainId, - amount, - useClientSideRouter, - type, - result, - query, - e_1 - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - ;(tokenInAddress = args.tokenInAddress), - (tokenInChainId = args.tokenInChainId), - (tokenOutAddress = args.tokenOutAddress), - (tokenOutChainId = args.tokenOutChainId), - (amount = args.amount), - (useClientSideRouter = args.useClientSideRouter), - (type = args.type) - _a.label = 1 - case 1: - _a.trys.push([1, 6, , 7]) - if (!useClientSideRouter) return [3 /*break*/, 3] - return [4 /*yield*/, getClientSideQuote(args)] - case 2: - result = _a.sent() - return [3 /*break*/, 5] - case 3: - query = qs__default['default'].stringify( - __assign(__assign({}, DEFAULT_QUERY_PARAMS), { - tokenInAddress, - tokenInChainId, - tokenOutAddress, - tokenOutChainId, - amount, - type, - }) - ) - return [4 /*yield*/, fetch('quote?' + query)] - case 4: - result = _a.sent() - _a.label = 5 - case 5: - return [2 /*return*/, { data: result.data }] - case 6: - e_1 = _a.sent() - // TODO: fall back to client-side quoter when auto router fails. - // deprecate 'legacy' v2/v3 routers first. - return [2 /*return*/, { error: e_1 }] - case 7: - return [2 /*return*/] - } - }) - }) - }, - keepUnusedDataFor: ms__default['default']( - templateObject_1$5 || (templateObject_1$5 = __makeTemplateObject(['10s'], ['10s'])) - ), - extraOptions: { - maxRetries: 0, - }, - }), - } - }, -}) -var useGetQuoteQuery = routingApi.useGetQuoteQuery -var templateObject_1$5 - -var Field -;(function (Field) { - Field['INPUT'] = 'INPUT' - Field['OUTPUT'] = 'OUTPUT' -})(Field || (Field = {})) -var selectCurrency = toolkit.createAction('swap/selectCurrency') -var switchCurrencies = toolkit.createAction('swap/switchCurrencies') -var typeInput = toolkit.createAction('swap/typeInput') -var replaceSwapState = toolkit.createAction('swap/replaceSwapState') -var setRecipient = toolkit.createAction('swap/setRecipient') - -var CHAIN_DATA_ABI = [ - { - inputs: [], - name: 'latestAnswer', - outputs: [{ internalType: 'int256', name: '', type: 'int256' }], - stateMutability: 'view', - type: 'function', - }, -] -/** - * Returns the price of 1 gas in WEI for the currently selected network using the chainlink fast gas price oracle - */ -function useGasPrice() { - var _a, _b - var address = useENSAddress('fast-gas-gwei.data.eth').address - var contract = useContract(address !== null && address !== void 0 ? address : undefined, CHAIN_DATA_ABI, false) - var resultStr = - (_b = (_a = useSingleCallResult(contract, 'latestAnswer').result) === null || _a === void 0 ? void 0 : _a[0]) === - null || _b === void 0 - ? void 0 - : _b.toString() - return typeof resultStr === 'string' ? JSBI__default['default'].BigInt(resultStr) : undefined -} +var BodyWrapper$1 = styled__default["default"].main(templateObject_1$3 || (templateObject_1$3 = __makeTemplateObject(["\n position: relative;\n margin-top: ", ";\n max-width: ", ";\n width: 100%;\n background: ", ";\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 border-radius: 24px;\n margin-top: 1rem;\n margin-left: auto;\n margin-right: auto;\n z-index: ", ";\n"], ["\n position: relative;\n margin-top: ", ";\n max-width: ", ";\n width: 100%;\n background: ", ";\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 border-radius: 24px;\n margin-top: 1rem;\n margin-left: auto;\n margin-right: auto;\n z-index: ", ";\n" + /** + * The styled container element that wraps the content of most pages and the tabs. + */ +])), function (_a) { + var margin = _a.margin; + return margin !== null && margin !== void 0 ? margin : '0px'; +}, function (_a) { + var maxWidth = _a.maxWidth; + return maxWidth !== null && maxWidth !== void 0 ? maxWidth : '480px'; +}, function (_a) { + var theme = _a.theme; + return theme.bg0; +}, Z_INDEX.deprecated_content); +/** + * The styled container element that wraps the content of most pages and the tabs. + */ +function AppBody(_a) { + var children = _a.children, rest = __rest(_a, ["children"]); + return jsxRuntime.jsx(BodyWrapper$1, __assign({}, rest, { children: children }), void 0); +} +var templateObject_1$3; -var V3_SWAP_DEFAULT_SLIPPAGE = new sdkCore.Percent(50, 10000) // .50% -var ONE_TENTHS_PERCENT = new sdkCore.Percent(10, 10000) // .10% -/** - * Return a guess of the gas cost used in computing slippage tolerance for a given trade - * @param trade the trade for which to _guess_ the amount of gas it would cost to execute - */ -function guesstimateGas(trade) { - if (!!trade) { - return ( - 100000 + - trade.swaps.reduce(function (memo, swap) { - return swap.route.pools.length + memo - }, 0) * - 30000 - ) - } - return undefined -} -var MIN_AUTO_SLIPPAGE_TOLERANCE = new sdkCore.Percent(5, 1000) // 0.5% -var MAX_AUTO_SLIPPAGE_TOLERANCE = new sdkCore.Percent(25, 100) // 25% -/** - * Returns slippage tolerance based on values from current trade, gas estimates from api, and active network. - */ -function useAutoSlippageTolerance(trade) { - var chainId = useActiveWeb3React().chainId - var onL2 = chainId && L2_CHAIN_IDS.includes(chainId) - var outputDollarValue = useUSDCValue(trade === null || trade === void 0 ? void 0 : trade.outputAmount) - var nativeGasPrice = useGasPrice() - var gasEstimate = guesstimateGas(trade) - var nativeCurrency = useNativeCurrency() - var nativeCurrencyPrice = useUSDCPrice( - nativeCurrency !== null && nativeCurrency !== void 0 ? nativeCurrency : undefined - ) - return React.useMemo( - function () { - if (!trade || onL2) return ONE_TENTHS_PERCENT - var nativeGasCost = - nativeGasPrice && typeof gasEstimate === 'number' - ? JSBI__default['default'].multiply(nativeGasPrice, JSBI__default['default'].BigInt(gasEstimate)) - : undefined - var dollarGasCost = - nativeCurrency && nativeGasCost && nativeCurrencyPrice - ? nativeCurrencyPrice.quote(sdkCore.CurrencyAmount.fromRawAmount(nativeCurrency, nativeGasCost)) - : undefined - // if valid estimate from api and using api trade, use gas estimate from api - // NOTE - dont use gas estimate for L2s yet - need to verify accuracy - // if not, use local heuristic - var dollarCostToUse = - chainId && - SUPPORTED_GAS_ESTIMATE_CHAIN_IDS.includes(chainId) && - (trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) - ? trade.gasUseEstimateUSD - : dollarGasCost - if (outputDollarValue && dollarCostToUse) { - // the rationale is that a user will not want their trade to fail for a loss due to slippage that is less than - // the cost of the gas of the failed transaction - var fraction = dollarCostToUse.asFraction.divide(outputDollarValue.asFraction) - var result = new sdkCore.Percent(fraction.numerator, fraction.denominator) - if (result.greaterThan(MAX_AUTO_SLIPPAGE_TOLERANCE)) return MAX_AUTO_SLIPPAGE_TOLERANCE - if (result.lessThan(MIN_AUTO_SLIPPAGE_TOLERANCE)) return MIN_AUTO_SLIPPAGE_TOLERANCE - return result - } - return V3_SWAP_DEFAULT_SLIPPAGE - }, - [trade, onL2, nativeGasPrice, gasEstimate, nativeCurrency, nativeCurrencyPrice, chainId, outputDollarValue] - ) -} +var AlertWrapper = styled__default["default"].div(templateObject_1$2 || (templateObject_1$2 = __makeTemplateObject(["\n max-width: 460px;\n width: 100%;\n"], ["\n max-width: 460px;\n width: 100%;\n"]))); +function Swap(_a) { + var _this = this; + var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l; + var history = _a.history; + var account = useActiveWeb3React().account; + var loadedUrlParams = useDefaultsFromURLSearch(); + // token warning stuff + var _m = __read([ + useCurrency(loadedUrlParams === null || loadedUrlParams === void 0 ? void 0 : loadedUrlParams.inputCurrencyId), + useCurrency(loadedUrlParams === null || loadedUrlParams === void 0 ? void 0 : loadedUrlParams.outputCurrencyId), + ], 2), loadedInputCurrency = _m[0], loadedOutputCurrency = _m[1]; + var _o = __read(React.useState(false), 2), dismissTokenWarning = _o[0], setDismissTokenWarning = _o[1]; + var urlLoadedTokens = React.useMemo(function () { var _a, _b; return (_b = (_a = [loadedInputCurrency, loadedOutputCurrency]) === null || _a === void 0 ? void 0 : _a.filter(function (c) { var _a; return (_a = c === null || c === void 0 ? void 0 : c.isToken) !== null && _a !== void 0 ? _a : false; })) !== null && _b !== void 0 ? _b : []; }, [loadedInputCurrency, loadedOutputCurrency]); + var handleConfirmTokenWarning = React.useCallback(function () { + setDismissTokenWarning(true); + }, []); + // dismiss warning if all imported tokens are in active lists + var defaultTokens = useAllTokens(); + var importTokensNotInDefault = React.useMemo(function () { + return urlLoadedTokens && + urlLoadedTokens.filter(function (token) { + return !Boolean(token.address in defaultTokens); + }); + }, [defaultTokens, urlLoadedTokens]); + var theme = React.useContext(styled.ThemeContext); + // toggle wallet when disconnected + var toggleWalletModal = useWalletModalToggle(); + // for expert mode + var _p = __read(useExpertModeManager(), 1), isExpertMode = _p[0]; + // swap state + var _q = useSwapState(), independentField = _q.independentField, typedValue = _q.typedValue, recipient = _q.recipient; + var _r = useDerivedSwapInfo(), _s = _r.trade, tradeState = _s.state, trade = _s.trade, allowedSlippage = _r.allowedSlippage, currencyBalances = _r.currencyBalances, parsedAmount = _r.parsedAmount, currencies = _r.currencies, swapInputError = _r.inputError; + var _t = useWrapCallback(currencies[Field.INPUT], currencies[Field.OUTPUT], typedValue), wrapType = _t.wrapType, onWrap = _t.execute, wrapInputError = _t.inputError; + var showWrap = wrapType !== WrapType.NOT_APPLICABLE; + var recipientAddress = useENSAddress(recipient).address; + var parsedAmounts = React.useMemo(function () { + var _a, _b; + return showWrap + ? (_a = {}, + _a[Field.INPUT] = parsedAmount, + _a[Field.OUTPUT] = parsedAmount, + _a) : (_b = {}, + _b[Field.INPUT] = independentField === Field.INPUT ? parsedAmount : trade === null || trade === void 0 ? void 0 : trade.inputAmount, + _b[Field.OUTPUT] = independentField === Field.OUTPUT ? parsedAmount : trade === null || trade === void 0 ? void 0 : trade.outputAmount, + _b); + }, [independentField, parsedAmount, showWrap, trade]); + var _u = __read(React.useMemo(function () { return [!(trade === null || trade === void 0 ? void 0 : trade.swaps), TradeState.LOADING === tradeState, TradeState.SYNCING === tradeState]; }, [trade, tradeState]), 3), routeNotFound = _u[0], routeIsLoading = _u[1], routeIsSyncing = _u[2]; + var fiatValueInput = useUSDCValue(parsedAmounts[Field.INPUT]); + var fiatValueOutput = useUSDCValue(parsedAmounts[Field.OUTPUT]); + var priceImpact = React.useMemo(function () { return (routeIsSyncing ? undefined : computeFiatValuePriceImpact(fiatValueInput, fiatValueOutput)); }, [fiatValueInput, fiatValueOutput, routeIsSyncing]); + var _v = useSwapActionHandlers(), onSwitchTokens = _v.onSwitchTokens, onCurrencySelection = _v.onCurrencySelection, onUserInput = _v.onUserInput, onChangeRecipient = _v.onChangeRecipient; + var isValid = !swapInputError; + var dependentField = independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT; + var handleTypeInput = React.useCallback(function (value) { + onUserInput(Field.INPUT, value); + }, [onUserInput]); + var handleTypeOutput = React.useCallback(function (value) { + onUserInput(Field.OUTPUT, value); + }, [onUserInput]); + // reset if they close warning without tokens in params + var handleDismissTokenWarning = React.useCallback(function () { + setDismissTokenWarning(true); + history.push('/swap/'); + }, [history]); + // modal and loading + var _w = __read(React.useState({ + showConfirm: false, + tradeToConfirm: undefined, + attemptingTxn: false, + swapErrorMessage: undefined, + txHash: undefined, + }), 2), _x = _w[0], showConfirm = _x.showConfirm, tradeToConfirm = _x.tradeToConfirm, swapErrorMessage = _x.swapErrorMessage, attemptingTxn = _x.attemptingTxn, txHash = _x.txHash, setSwapState = _w[1]; + var formattedAmounts = React.useMemo(function () { + var _a; + var _b, _c, _d, _e; + return (_a = {}, + _a[independentField] = typedValue, + _a[dependentField] = showWrap + ? (_c = (_b = parsedAmounts[independentField]) === null || _b === void 0 ? void 0 : _b.toExact()) !== null && _c !== void 0 ? _c : '' + : (_e = (_d = parsedAmounts[dependentField]) === null || _d === void 0 ? void 0 : _d.toSignificant(6)) !== null && _e !== void 0 ? _e : '', + _a); + }, [dependentField, independentField, parsedAmounts, showWrap, typedValue]); + var userHasSpecifiedInputOutput = Boolean(currencies[Field.INPUT] && currencies[Field.OUTPUT] && ((_b = parsedAmounts[independentField]) === null || _b === void 0 ? void 0 : _b.greaterThan(JSBI__default["default"].BigInt(0)))); + var approvalOptimizedTrade = useApprovalOptimizedTrade(trade, allowedSlippage); + var approvalOptimizedTradeString = approvalOptimizedTrade instanceof v2Sdk.Trade + ? 'V2SwapRouter' + : approvalOptimizedTrade instanceof v3Sdk.Trade + ? 'V3SwapRouter' + : 'SwapRouter'; + // check whether the user has approved the router on the input token + var _y = __read(useApproveCallbackFromTrade(approvalOptimizedTrade, allowedSlippage), 2), approvalState = _y[0], approveCallback = _y[1]; + var transactionDeadline = useTransactionDeadline(); + var _z = useERC20PermitFromTrade(approvalOptimizedTrade, allowedSlippage, transactionDeadline), signatureState = _z.state, signatureData = _z.signatureData, gatherPermitSignature = _z.gatherPermitSignature; + var handleApprove = React.useCallback(function () { return __awaiter(_this, void 0, void 0, function () { + var error_1; + var _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + if (!(signatureState === UseERC20PermitState.NOT_SIGNED && gatherPermitSignature)) return [3 /*break*/, 7]; + _b.label = 1; + case 1: + _b.trys.push([1, 3, , 6]); + return [4 /*yield*/, gatherPermitSignature()]; + case 2: + _b.sent(); + return [3 /*break*/, 6]; + case 3: + error_1 = _b.sent(); + if (!((error_1 === null || error_1 === void 0 ? void 0 : error_1.code) !== 4001)) return [3 /*break*/, 5]; + return [4 /*yield*/, approveCallback()]; + case 4: + _b.sent(); + _b.label = 5; + case 5: return [3 /*break*/, 6]; + case 6: return [3 /*break*/, 9]; + case 7: return [4 /*yield*/, approveCallback()]; + case 8: + _b.sent(); + ReactGA__default["default"].event({ + category: 'Swap', + action: 'Approve', + label: [approvalOptimizedTradeString, (_a = approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 ? void 0 : approvalOptimizedTrade.inputAmount) === null || _a === void 0 ? void 0 : _a.currency.symbol].join('/'), + }); + _b.label = 9; + case 9: return [2 /*return*/]; + } + }); + }); }, [ + signatureState, + gatherPermitSignature, + approveCallback, + approvalOptimizedTradeString, + (_c = approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 ? void 0 : approvalOptimizedTrade.inputAmount) === null || _c === void 0 ? void 0 : _c.currency.symbol, + ]); + // check if user has gone through approval process, used to show two step buttons, reset on token change + var _0 = __read(React.useState(false), 2), approvalSubmitted = _0[0], setApprovalSubmitted = _0[1]; + // mark when a user has submitted an approval, reset onTokenSelection for input field + React.useEffect(function () { + if (approvalState === ApprovalState.PENDING) { + setApprovalSubmitted(true); + } + }, [approvalState, approvalSubmitted]); + var maxInputAmount = React.useMemo(function () { return maxAmountSpend(currencyBalances[Field.INPUT]); }, [currencyBalances]); + var showMaxButton = Boolean((maxInputAmount === null || maxInputAmount === void 0 ? void 0 : maxInputAmount.greaterThan(0)) && !((_d = parsedAmounts[Field.INPUT]) === null || _d === void 0 ? void 0 : _d.equalTo(maxInputAmount))); + // the callback to execute the swap + var _1 = useSwapCallback(approvalOptimizedTrade, allowedSlippage, recipient, signatureData), swapCallback = _1.callback, swapCallbackError = _1.error; + var handleSwap = React.useCallback(function () { + if (!swapCallback) { + return; + } + if (priceImpact && !confirmPriceImpactWithoutFee(priceImpact)) { + return; + } + setSwapState({ attemptingTxn: true, tradeToConfirm: tradeToConfirm, showConfirm: showConfirm, swapErrorMessage: undefined, txHash: undefined }); + swapCallback() + .then(function (hash) { + var _a, _b, _c, _d; + setSwapState({ attemptingTxn: false, tradeToConfirm: tradeToConfirm, showConfirm: showConfirm, swapErrorMessage: undefined, txHash: hash }); + ReactGA__default["default"].event({ + category: 'Swap', + action: recipient === null + ? 'Swap w/o Send' + : (recipientAddress !== null && recipientAddress !== void 0 ? recipientAddress : recipient) === account + ? 'Swap w/o Send + recipient' + : 'Swap w/ Send', + label: [ + approvalOptimizedTradeString, + (_b = (_a = approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 ? void 0 : approvalOptimizedTrade.inputAmount) === null || _a === void 0 ? void 0 : _a.currency) === null || _b === void 0 ? void 0 : _b.symbol, + (_d = (_c = approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 ? void 0 : approvalOptimizedTrade.outputAmount) === null || _c === void 0 ? void 0 : _c.currency) === null || _d === void 0 ? void 0 : _d.symbol, + 'MH', + ].join('/'), + }); + }) + .catch(function (error) { + setSwapState({ + attemptingTxn: false, + tradeToConfirm: tradeToConfirm, + showConfirm: showConfirm, + swapErrorMessage: error.message, + txHash: undefined, + }); + }); + }, [ + swapCallback, + priceImpact, + tradeToConfirm, + showConfirm, + recipient, + recipientAddress, + account, + approvalOptimizedTradeString, + (_f = (_e = approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 ? void 0 : approvalOptimizedTrade.inputAmount) === null || _e === void 0 ? void 0 : _e.currency) === null || _f === void 0 ? void 0 : _f.symbol, + (_h = (_g = approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 ? void 0 : approvalOptimizedTrade.outputAmount) === null || _g === void 0 ? void 0 : _g.currency) === null || _h === void 0 ? void 0 : _h.symbol, + ]); + // errors + var _2 = __read(React.useState(false), 2), showInverted = _2[0], setShowInverted = _2[1]; + // warnings on the greater of fiat value price impact and execution price impact + var priceImpactSeverity = React.useMemo(function () { + var executionPriceImpact = trade === null || trade === void 0 ? void 0 : trade.priceImpact; + return warningSeverity(executionPriceImpact && priceImpact + ? executionPriceImpact.greaterThan(priceImpact) + ? executionPriceImpact + : priceImpact + : executionPriceImpact !== null && executionPriceImpact !== void 0 ? executionPriceImpact : priceImpact); + }, [priceImpact, trade]); + var isArgentWallet = useIsArgentWallet(); + // show approve flow when: no error on inputs, not approved or pending, or approved in current session + // never show if price impact is above threshold in non expert mode + var showApproveFlow = !isArgentWallet && + !swapInputError && + (approvalState === ApprovalState.NOT_APPROVED || + approvalState === ApprovalState.PENDING || + (approvalSubmitted && approvalState === ApprovalState.APPROVED)) && + !(priceImpactSeverity > 3 && !isExpertMode); + var handleConfirmDismiss = React.useCallback(function () { + setSwapState({ showConfirm: false, tradeToConfirm: tradeToConfirm, attemptingTxn: attemptingTxn, swapErrorMessage: swapErrorMessage, txHash: txHash }); + // if there was a tx hash, we want to clear the input + if (txHash) { + onUserInput(Field.INPUT, ''); + } + }, [attemptingTxn, onUserInput, swapErrorMessage, tradeToConfirm, txHash]); + var handleAcceptChanges = React.useCallback(function () { + setSwapState({ tradeToConfirm: trade, swapErrorMessage: swapErrorMessage, txHash: txHash, attemptingTxn: attemptingTxn, showConfirm: showConfirm }); + }, [attemptingTxn, showConfirm, swapErrorMessage, trade, txHash]); + var handleInputSelect = React.useCallback(function (inputCurrency) { + setApprovalSubmitted(false); // reset 2 step UI for approvals + onCurrencySelection(Field.INPUT, inputCurrency); + }, [onCurrencySelection]); + var handleMaxInput = React.useCallback(function () { + maxInputAmount && onUserInput(Field.INPUT, maxInputAmount.toExact()); + ReactGA__default["default"].event({ + category: 'Swap', + action: 'Max', + }); + }, [maxInputAmount, onUserInput]); + var handleOutputSelect = React.useCallback(function (outputCurrency) { return onCurrencySelection(Field.OUTPUT, outputCurrency); }, [onCurrencySelection]); + var swapIsUnsupported = useIsSwapUnsupported(currencies[Field.INPUT], currencies[Field.OUTPUT]); + var priceImpactTooHigh = priceImpactSeverity > 3 && !isExpertMode; + return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(TokenWarningModal, { isOpen: importTokensNotInDefault.length > 0 && !dismissTokenWarning, tokens: importTokensNotInDefault, onConfirm: handleConfirmTokenWarning, onDismiss: handleDismissTokenWarning }, void 0), jsxRuntime.jsxs(AppBody, { children: [jsxRuntime.jsx(SwapHeader, { allowedSlippage: allowedSlippage }, void 0), jsxRuntime.jsxs(Wrapper$g, __assign({ id: "swap-page" }, { children: [jsxRuntime.jsx(ConfirmSwapModal, { isOpen: showConfirm, trade: trade, originalTrade: tradeToConfirm, onAcceptChanges: handleAcceptChanges, attemptingTxn: attemptingTxn, txHash: txHash, recipient: recipient, allowedSlippage: allowedSlippage, onConfirm: handleSwap, swapErrorMessage: swapErrorMessage, onDismiss: handleConfirmDismiss }, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: 'sm' }, { children: [jsxRuntime.jsxs("div", __assign({ style: { display: 'relative' } }, { children: [jsxRuntime.jsx(CurrencyInputPanel, { label: independentField === Field.OUTPUT && !showWrap ? jsxRuntime.jsx(macro.Trans, { children: "From (at most)" }, void 0) : jsxRuntime.jsx(macro.Trans, { children: "From" }, void 0), value: formattedAmounts[Field.INPUT], showMaxButton: showMaxButton, currency: currencies[Field.INPUT], onUserInput: handleTypeInput, onMax: handleMaxInput, fiatValue: fiatValueInput !== null && fiatValueInput !== void 0 ? fiatValueInput : undefined, onCurrencySelect: handleInputSelect, otherCurrency: currencies[Field.OUTPUT], showCommonBases: true, id: "swap-currency-input", loading: independentField === Field.OUTPUT && routeIsSyncing }, void 0), jsxRuntime.jsx(ArrowWrapper$1, __assign({ clickable: true }, { children: jsxRuntime.jsx(reactFeather.ArrowDown, { size: "16", onClick: function () { + setApprovalSubmitted(false); // reset 2 step UI for approvals + onSwitchTokens(); + }, color: currencies[Field.INPUT] && currencies[Field.OUTPUT] ? theme.text1 : theme.text3 }, void 0) }), void 0), jsxRuntime.jsx(CurrencyInputPanel, { value: formattedAmounts[Field.OUTPUT], onUserInput: handleTypeOutput, label: independentField === Field.INPUT && !showWrap ? jsxRuntime.jsx(macro.Trans, { children: "To (at least)" }, void 0) : jsxRuntime.jsx(macro.Trans, { children: "To" }, void 0), showMaxButton: false, hideBalance: false, fiatValue: fiatValueOutput !== null && fiatValueOutput !== void 0 ? fiatValueOutput : undefined, priceImpact: priceImpact, currency: currencies[Field.OUTPUT], onCurrencySelect: handleOutputSelect, otherCurrency: currencies[Field.INPUT], showCommonBases: true, id: "swap-currency-output", loading: independentField === Field.INPUT && routeIsSyncing }, void 0)] }), void 0), recipient !== null && !showWrap ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs(AutoRow, __assign({ justify: "space-between", style: { padding: '0 1rem' } }, { children: [jsxRuntime.jsx(ArrowWrapper$1, __assign({ clickable: false }, { children: jsxRuntime.jsx(reactFeather.ArrowDown, { size: "16", color: theme.text2 }, void 0) }), void 0), jsxRuntime.jsx(LinkStyledButton, __assign({ id: "remove-recipient-button", onClick: function () { return onChangeRecipient(null); } }, { children: jsxRuntime.jsx(macro.Trans, { children: "- Remove recipient" }, void 0) }), void 0)] }), void 0), jsxRuntime.jsx(AddressInputPanel, { id: "recipient", value: recipient, onChange: onChangeRecipient }, void 0)] }, void 0)) : null, !showWrap && userHasSpecifiedInputOutput && (trade || routeIsLoading || routeIsSyncing) && (jsxRuntime.jsx(SwapDetailsDropdown, { trade: trade, syncing: routeIsSyncing, loading: routeIsLoading, showInverted: showInverted, setShowInverted: setShowInverted, allowedSlippage: allowedSlippage }, void 0)), jsxRuntime.jsxs("div", { children: [swapIsUnsupported ? (jsxRuntime.jsx(ButtonPrimary, __assign({ disabled: true }, { children: jsxRuntime.jsx(ThemedText.Main, __assign({ mb: "4px" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Unsupported Asset" }, void 0) }), void 0) }), void 0)) : !account ? (jsxRuntime.jsx(ButtonLight, __assign({ onClick: toggleWalletModal }, { children: jsxRuntime.jsx(macro.Trans, { children: "Connect Wallet" }, void 0) }), void 0)) : showWrap ? (jsxRuntime.jsx(ButtonPrimary, __assign({ disabled: Boolean(wrapInputError), onClick: onWrap }, { children: wrapInputError ? (jsxRuntime.jsx(WrapErrorText, { wrapInputError: wrapInputError }, void 0)) : wrapType === WrapType.WRAP ? (jsxRuntime.jsx(macro.Trans, { children: "Wrap" }, void 0)) : wrapType === WrapType.UNWRAP ? (jsxRuntime.jsx(macro.Trans, { children: "Unwrap" }, void 0)) : null }), void 0)) : routeNotFound && userHasSpecifiedInputOutput && !routeIsLoading && !routeIsSyncing ? (jsxRuntime.jsx(GreyCard, __assign({ style: { textAlign: 'center' } }, { children: jsxRuntime.jsx(ThemedText.Main, __assign({ mb: "4px" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Insufficient liquidity for this trade." }, void 0) }), void 0) }), void 0)) : showApproveFlow ? (jsxRuntime.jsx(AutoRow, __assign({ style: { flexWrap: 'nowrap', width: '100%' } }, { children: jsxRuntime.jsxs(AutoColumn, __assign({ style: { width: '100%' }, gap: "12px" }, { children: [jsxRuntime.jsx(ButtonConfirmed, __assign({ onClick: handleApprove, disabled: approvalState !== ApprovalState.NOT_APPROVED || + approvalSubmitted || + signatureState === UseERC20PermitState.SIGNED, width: "100%", altDisabledStyle: approvalState === ApprovalState.PENDING, confirmed: approvalState === ApprovalState.APPROVED || signatureState === UseERC20PermitState.SIGNED }, { children: jsxRuntime.jsxs(AutoRow, __assign({ justify: "space-between", style: { flexWrap: 'nowrap' } }, { children: [jsxRuntime.jsxs("span", __assign({ style: { display: 'flex', alignItems: 'center' } }, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: currencies[Field.INPUT], size: '20px', style: { marginRight: '8px', flexShrink: 0 } }, void 0), approvalState === ApprovalState.APPROVED || signatureState === UseERC20PermitState.SIGNED ? (jsxRuntime.jsxs(macro.Trans, { children: ["You can now trade ", (_j = currencies[Field.INPUT]) === null || _j === void 0 ? void 0 : _j.symbol] }, void 0)) : (jsxRuntime.jsxs(macro.Trans, { children: ["Allow the Uniswap Protocol to use your ", (_k = currencies[Field.INPUT]) === null || _k === void 0 ? void 0 : _k.symbol] }, void 0))] }), void 0), approvalState === ApprovalState.PENDING ? (jsxRuntime.jsx(Loader, { stroke: "white" }, void 0)) : (approvalSubmitted && approvalState === ApprovalState.APPROVED) || + signatureState === UseERC20PermitState.SIGNED ? (jsxRuntime.jsx(reactFeather.CheckCircle, { size: "20", color: theme.green1 }, void 0)) : (jsxRuntime.jsx(MouseoverTooltip, __assign({ text: jsxRuntime.jsxs(macro.Trans, { children: ["You must give the Uniswap smart contracts permission to use your", ' ', (_l = currencies[Field.INPUT]) === null || _l === void 0 ? void 0 : _l.symbol, ". You only have to do this once per token."] }, void 0) }, { children: jsxRuntime.jsx(reactFeather.HelpCircle, { size: "20", color: 'white', style: { marginLeft: '8px' } }, void 0) }), void 0))] }), void 0) }), void 0), jsxRuntime.jsx(ButtonError, __assign({ onClick: function () { + if (isExpertMode) { + handleSwap(); + } + else { + setSwapState({ + tradeToConfirm: trade, + attemptingTxn: false, + swapErrorMessage: undefined, + showConfirm: true, + txHash: undefined, + }); + } + }, width: "100%", id: "swap-button", disabled: !isValid || + routeIsSyncing || + routeIsLoading || + (approvalState !== ApprovalState.APPROVED && signatureState !== UseERC20PermitState.SIGNED) || + priceImpactTooHigh, error: isValid && priceImpactSeverity > 2 }, { children: jsxRuntime.jsx(rebass.Text, __assign({ fontSize: 16, fontWeight: 500 }, { children: priceImpactTooHigh ? (jsxRuntime.jsx(macro.Trans, { children: "High Price Impact" }, void 0)) : trade && priceImpactSeverity > 2 ? (jsxRuntime.jsx(macro.Trans, { children: "Swap Anyway" }, void 0)) : (jsxRuntime.jsx(macro.Trans, { children: "Swap" }, void 0)) }), void 0) }), void 0)] }), void 0) }), void 0)) : (jsxRuntime.jsx(ButtonError, __assign({ onClick: function () { + if (isExpertMode) { + handleSwap(); + } + else { + setSwapState({ + tradeToConfirm: trade, + attemptingTxn: false, + swapErrorMessage: undefined, + showConfirm: true, + txHash: undefined, + }); + } + }, id: "swap-button", disabled: !isValid || routeIsSyncing || routeIsLoading || priceImpactTooHigh || !!swapCallbackError, error: isValid && priceImpactSeverity > 2 && !swapCallbackError }, { children: jsxRuntime.jsx(rebass.Text, __assign({ fontSize: 20, fontWeight: 500 }, { children: swapInputError ? (swapInputError) : routeIsSyncing || routeIsLoading ? (jsxRuntime.jsx(macro.Trans, { children: "Swap" }, void 0)) : priceImpactSeverity > 2 ? (jsxRuntime.jsx(macro.Trans, { children: "Swap Anyway" }, void 0)) : priceImpactTooHigh ? (jsxRuntime.jsx(macro.Trans, { children: "Price Impact Too High" }, void 0)) : (jsxRuntime.jsx(macro.Trans, { children: "Swap" }, void 0)) }), void 0) }), void 0)), isExpertMode && swapErrorMessage ? jsxRuntime.jsx(SwapCallbackError, { error: swapErrorMessage }, void 0) : null] }, void 0)] }), void 0)] }), void 0)] }, void 0), jsxRuntime.jsx(AlertWrapper, { children: jsxRuntime.jsx(NetworkAlert, {}, void 0) }, void 0), jsxRuntime.jsx(SwitchLocaleLink, {}, void 0), !swapIsUnsupported ? null : (jsxRuntime.jsx(UnsupportedCurrencyFooter, { show: swapIsUnsupported, currencies: [currencies[Field.INPUT], currencies[Field.OUTPUT]] }, void 0))] }, void 0)); +} +var templateObject_1$2; -/** - * Transforms a Routing API quote into an array of routes that can be used to create - * a `Trade`. - */ -function computeRoutes(currencyIn, currencyOut, tradeType, quoteResult) { - if (!quoteResult || !quoteResult.route || !currencyIn || !currencyOut) return undefined - if (quoteResult.route.length === 0) return [] - var parsedTokenIn = parseToken(quoteResult.route[0][0].tokenIn) - var parsedTokenOut = parseToken(quoteResult.route[0][quoteResult.route[0].length - 1].tokenOut) - if (parsedTokenIn.address !== currencyIn.wrapped.address) return undefined - if (parsedTokenOut.address !== currencyOut.wrapped.address) return undefined - var parsedCurrencyIn = currencyIn.isNative ? nativeOnChain(currencyIn.chainId) : parsedTokenIn - var parsedCurrencyOut = currencyOut.isNative ? nativeOnChain(currencyOut.chainId) : parsedTokenOut - try { - return quoteResult.route.map(function (route) { - if (route.length === 0) { - throw new Error('Expected route to have at least one pair or pool') - } - var rawAmountIn = route[0].amountIn - var rawAmountOut = route[route.length - 1].amountOut - if (!rawAmountIn || !rawAmountOut) { - throw new Error('Expected both amountIn and amountOut to be present') - } - return { - routev3: isV3Route(route) ? new v3Sdk.Route(route.map(parsePool), parsedCurrencyIn, parsedCurrencyOut) : null, - routev2: !isV3Route(route) ? new v2Sdk.Route(route.map(parsePair), parsedCurrencyIn, parsedCurrencyOut) : null, - inputAmount: sdkCore.CurrencyAmount.fromRawAmount(parsedCurrencyIn, rawAmountIn), - outputAmount: sdkCore.CurrencyAmount.fromRawAmount(parsedCurrencyOut, rawAmountOut), - } - }) - } catch (e) { - // `Route` constructor may throw if inputs/outputs are temporarily out of sync - // (RTK-Query always returns the latest data which may not be the right inputs/outputs) - // This is not fatal and will fix itself in future render cycles - console.error(e) - return undefined - } -} -function transformRoutesToTrade(route, tradeType, gasUseEstimateUSD) { - var _a, _b - return new InterfaceTrade({ - v2Routes: - (_a = - route === null || route === void 0 - ? void 0 - : route - .filter(function (r) { - return r.routev2 !== null - }) - .map(function (_a) { - var routev2 = _a.routev2, - inputAmount = _a.inputAmount, - outputAmount = _a.outputAmount - return { routev2, inputAmount, outputAmount } - })) !== null && _a !== void 0 - ? _a - : [], - v3Routes: - (_b = - route === null || route === void 0 - ? void 0 - : route - .filter(function (r) { - return r.routev3 !== null - }) - .map(function (_a) { - var routev3 = _a.routev3, - inputAmount = _a.inputAmount, - outputAmount = _a.outputAmount - return { routev3, inputAmount, outputAmount } - })) !== null && _b !== void 0 - ? _b - : [], - tradeType, - gasUseEstimateUSD, - }) -} -var parseToken = function (_a) { - var address = _a.address, - chainId = _a.chainId, - decimals = _a.decimals, - symbol = _a.symbol - return new sdkCore.Token(chainId, address, parseInt(decimals.toString()), symbol) -} -var parsePool = function (_a) { - var fee = _a.fee, - sqrtRatioX96 = _a.sqrtRatioX96, - liquidity = _a.liquidity, - tickCurrent = _a.tickCurrent, - tokenIn = _a.tokenIn, - tokenOut = _a.tokenOut - return new v3Sdk.Pool( - parseToken(tokenIn), - parseToken(tokenOut), - parseInt(fee), - sqrtRatioX96, - liquidity, - parseInt(tickCurrent) - ) -} -var parsePair = function (_a) { - var reserve0 = _a.reserve0, - reserve1 = _a.reserve1 - return new v2Sdk.Pair( - sdkCore.CurrencyAmount.fromRawAmount(parseToken(reserve0.token), reserve0.quotient), - sdkCore.CurrencyAmount.fromRawAmount(parseToken(reserve1.token), reserve1.quotient) - ) -} -function isV3Route(route) { - return route[0].type === 'v3-pool' +// Redirects to swap but only replace the pathname +function RedirectPathToSwapOnly(_a) { + var location = _a.location; + return jsxRuntime.jsx(reactRouterDom.Redirect, { to: __assign(__assign({}, location), { pathname: '/swap' }) }, void 0); +} +// Redirects from the /swap/:outputCurrency path to the /swap?outputCurrency=:outputCurrency format +function RedirectToSwap(props) { + var search = props.location.search, outputCurrency = props.match.params.outputCurrency; + return (jsxRuntime.jsx(reactRouterDom.Redirect, { to: __assign(__assign({}, props.location), { pathname: '/swap', search: search && search.length > 1 + ? search + "&outputCurrency=" + outputCurrency + : "?outputCurrency=" + outputCurrency }) }, void 0)); } -function useFreshData(data, dataBlockNumber, maxBlockAge) { - if (maxBlockAge === void 0) { - maxBlockAge = 10 - } - var localBlockNumber = useBlockNumber() - if (!localBlockNumber) return undefined - if (localBlockNumber - dataBlockNumber > maxBlockAge) { - return undefined - } - return data -} -/** - * Returns query arguments for the Routing API query or undefined if the - * query should be skipped. - */ -function useRoutingAPIArguments(_a) { - var tokenIn = _a.tokenIn, - tokenOut = _a.tokenOut, - amount = _a.amount, - tradeType = _a.tradeType - var _b = __read(useClientSideRouter(), 1), - clientSideRouter = _b[0] - return React.useMemo( - function () { - return !tokenIn || !tokenOut || !amount || tokenIn.equals(tokenOut) - ? undefined - : { - amount: amount.quotient.toString(), - tokenInAddress: tokenIn.wrapped.address, - tokenInChainId: tokenIn.wrapped.chainId, - tokenInDecimals: tokenIn.wrapped.decimals, - tokenInSymbol: tokenIn.wrapped.symbol, - tokenOutAddress: tokenOut.wrapped.address, - tokenOutChainId: tokenOut.wrapped.chainId, - tokenOutDecimals: tokenOut.wrapped.decimals, - tokenOutSymbol: tokenOut.wrapped.symbol, - useClientSideRouter: clientSideRouter, - type: tradeType === sdkCore.TradeType.EXACT_INPUT ? 'exactIn' : 'exactOut', - } - }, - [amount, clientSideRouter, tokenIn, tokenOut, tradeType] - ) -} -/** - * Returns the best trade by invoking the routing api or the smart order router on the client - * @param tradeType whether the swap is an exact in/out - * @param amountSpecified the exact amount to swap in/out - * @param otherCurrency the desired output/payment currency - */ -function useRoutingAPITrade(tradeType, amountSpecified, otherCurrency) { - var _a - var _b = __read( - React.useMemo( - function () { - return tradeType === sdkCore.TradeType.EXACT_INPUT - ? [ - amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, - otherCurrency, - ] - : [ - otherCurrency, - amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, - ] - }, - [amountSpecified, otherCurrency, tradeType] - ), - 2 - ), - currencyIn = _b[0], - currencyOut = _b[1] - var queryArgs = useRoutingAPIArguments({ - tokenIn: currencyIn, - tokenOut: currencyOut, - amount: amountSpecified, - tradeType, - }) - var _c = useGetQuoteQuery(queryArgs !== null && queryArgs !== void 0 ? queryArgs : react.skipToken, { - pollingInterval: ms__default['default']( - templateObject_1$4 || (templateObject_1$4 = __makeTemplateObject(['15s'], ['15s'])) - ), - refetchOnFocus: true, - }), - isLoading = _c.isLoading, - isError = _c.isError, - data = _c.data - var quoteResult = useFreshData(data, Number(data === null || data === void 0 ? void 0 : data.blockNumber) || 0) - var route = React.useMemo( - function () { - return computeRoutes(currencyIn, currencyOut, tradeType, quoteResult) - }, - [currencyIn, currencyOut, quoteResult, tradeType] - ) - // get USD gas cost of trade in active chains stablecoin amount - var gasUseEstimateUSD = - (_a = useStablecoinAmountFromFiatValue( - quoteResult === null || quoteResult === void 0 ? void 0 : quoteResult.gasUseEstimateUSD - )) !== null && _a !== void 0 - ? _a - : null - return React.useMemo( - function () { - if (!currencyIn || !currencyOut) { - return { - state: TradeState.INVALID, - trade: undefined, - } - } - if (isLoading && !quoteResult) { - // only on first hook render - return { - state: TradeState.LOADING, - trade: undefined, - } - } - var otherAmount = - tradeType === sdkCore.TradeType.EXACT_INPUT - ? currencyOut && quoteResult - ? sdkCore.CurrencyAmount.fromRawAmount(currencyOut, quoteResult.quote) - : undefined - : currencyIn && quoteResult - ? sdkCore.CurrencyAmount.fromRawAmount(currencyIn, quoteResult.quote) - : undefined - if (isError || !otherAmount || !route || route.length === 0 || !queryArgs) { - return { - state: TradeState.NO_ROUTE_FOUND, - trade: undefined, - } - } - try { - var trade = transformRoutesToTrade(route, tradeType, gasUseEstimateUSD) - return { - // always return VALID regardless of isFetching status - state: TradeState.VALID, - trade, - } - } catch (e) { - console.debug('transformRoutesToTrade failed: ', e) - return { state: TradeState.INVALID, trade: undefined } - } - }, - [currencyIn, currencyOut, isLoading, quoteResult, tradeType, isError, route, queryArgs, gasUseEstimateUSD] - ) -} -var templateObject_1$4 - -/** - * Returns the best v2+v3 trade for a desired swap. - * @param tradeType whether the swap is an exact in/out - * @param amountSpecified the exact amount to swap in/out - * @param otherCurrency the desired output/payment currency - */ -function useBestTrade(tradeType, amountSpecified, otherCurrency) { - var autoRouterSupported = useAutoRouterSupported() - var isWindowVisible = useIsWindowVisible() - var _a = __read( - useDebounce( - React.useMemo( - function () { - return [amountSpecified, otherCurrency] - }, - [amountSpecified, otherCurrency] - ), - 200 - ), - 2 - ), - debouncedAmount = _a[0], - debouncedOtherCurrency = _a[1] - var routingAPITrade = useRoutingAPITrade( - tradeType, - autoRouterSupported && isWindowVisible ? debouncedAmount : undefined, - debouncedOtherCurrency - ) - var isLoading = amountSpecified !== undefined && debouncedAmount === undefined - // consider trade debouncing when inputs/outputs do not match - var debouncing = - routingAPITrade.trade && - amountSpecified && - (tradeType === sdkCore.TradeType.EXACT_INPUT - ? !routingAPITrade.trade.inputAmount.equalTo(amountSpecified) || - !amountSpecified.currency.equals(routingAPITrade.trade.inputAmount.currency) || - !(debouncedOtherCurrency === null || debouncedOtherCurrency === void 0 - ? void 0 - : debouncedOtherCurrency.equals(routingAPITrade.trade.outputAmount.currency)) - : !routingAPITrade.trade.outputAmount.equalTo(amountSpecified) || - !amountSpecified.currency.equals(routingAPITrade.trade.outputAmount.currency) || - !(debouncedOtherCurrency === null || debouncedOtherCurrency === void 0 - ? void 0 - : debouncedOtherCurrency.equals(routingAPITrade.trade.inputAmount.currency))) - var useFallback = !autoRouterSupported || (!debouncing && routingAPITrade.state === TradeState.NO_ROUTE_FOUND) - // only use client side router if routing api trade failed or is not supported - var bestV3Trade = useClientSideV3Trade( - tradeType, - useFallback ? debouncedAmount : undefined, - useFallback ? debouncedOtherCurrency : undefined - ) - // only return gas estimate from api if routing api trade is used - return React.useMemo( - function () { - return __assign( - __assign( - __assign({}, useFallback ? bestV3Trade : routingAPITrade), - debouncing ? { state: TradeState.SYNCING } : {} - ), - isLoading ? { state: TradeState.LOADING } : {} - ) - }, - [bestV3Trade, debouncing, isLoading, routingAPITrade, useFallback] - ) -} +// const Vote = lazy(() => import('./Vote')) +var AppWrapper = styled__default["default"].div(templateObject_1$1 || (templateObject_1$1 = __makeTemplateObject(["\n display: flex;\n flex-flow: column;\n align-items: flex-start;\n"], ["\n display: flex;\n flex-flow: column;\n align-items: flex-start;\n"]))); +var BodyWrapper = styled__default["default"].div(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n display: flex;\n flex-direction: column;\n width: 100%;\n padding: 120px 16px 0px 16px;\n align-items: center;\n flex: 1;\n z-index: 1;\n\n ", ";\n"], ["\n display: flex;\n flex-direction: column;\n width: 100%;\n padding: 120px 16px 0px 16px;\n align-items: center;\n flex: 1;\n z-index: 1;\n\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToSmall(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n padding: 4rem 8px 16px 8px;\n "], ["\n padding: 4rem 8px 16px 8px;\n "]))); +}); +var HeaderWrapper = styled__default["default"].div(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n ", "\n width: 100%;\n justify-content: space-between;\n position: fixed;\n top: 0;\n z-index: 2;\n"], ["\n ", "\n width: 100%;\n justify-content: space-between;\n position: fixed;\n top: 0;\n z-index: 2;\n"])), function (_a) { + var theme = _a.theme; + return theme.flexRowNoWrap; +}); +var Marginer = styled__default["default"].div(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n margin-top: 5rem;\n"], ["\n margin-top: 5rem;\n"]))); +function TopLevelModals() { + var open = useModalOpen(ApplicationModal.ADDRESS_CLAIM); + var toggle = useToggleModal(ApplicationModal.ADDRESS_CLAIM); + return jsxRuntime.jsx(AddressClaimModal, { isOpen: open, onDismiss: toggle }, void 0); +} +function App() { + return (jsxRuntime.jsxs(ErrorBoundary, { children: [jsxRuntime.jsx(reactRouterDom.Route, { component: DarkModeQueryParamReader }, void 0), jsxRuntime.jsx(reactRouterDom.Route, { component: ApeModeQueryParamReader }, void 0), jsxRuntime.jsx(Web3ReactManager, { children: jsxRuntime.jsxs(AppWrapper, { children: [jsxRuntime.jsx(HeaderWrapper, { children: jsxRuntime.jsx(Header$2, {}, void 0) }, void 0), jsxRuntime.jsxs(BodyWrapper, { children: [jsxRuntime.jsx(Popups, {}, void 0), jsxRuntime.jsx(Polling, {}, void 0), jsxRuntime.jsx(TopLevelModals, {}, void 0), jsxRuntime.jsx(React.Suspense, __assign({ fallback: jsxRuntime.jsx(Loader, {}, void 0) }, { children: jsxRuntime.jsxs(reactRouterDom.Switch, { children: [jsxRuntime.jsx(reactRouterDom.Route, { exact: true, strict: true, path: "/swap/:outputCurrency", component: RedirectToSwap }, void 0), jsxRuntime.jsx(reactRouterDom.Route, { exact: true, strict: true, path: "/swap", component: Swap }, void 0), jsxRuntime.jsx(reactRouterDom.Route, { component: RedirectPathToSwapOnly }, void 0)] }, void 0) }), void 0), jsxRuntime.jsx(Marginer, {}, void 0)] }, void 0)] }, void 0) }, void 0)] }, void 0)); +} +var templateObject_1$1, templateObject_2, templateObject_3, templateObject_4, templateObject_5; -function useSwapState() { - return useAppSelector(function (state) { - return state.swap - }) -} -function useSwapActionHandlers() { - var dispatch = useAppDispatch() - var onCurrencySelection = React.useCallback( - function (field, currency) { - dispatch( - selectCurrency({ - field, - currencyId: currency.isToken ? currency.address : currency.isNative ? 'ETH' : '', - }) - ) - }, - [dispatch] - ) - var onSwitchTokens = React.useCallback( - function () { - dispatch(switchCurrencies()) - }, - [dispatch] - ) - var onUserInput = React.useCallback( - function (field, typedValue) { - dispatch(typeInput({ field, typedValue })) - }, - [dispatch] - ) - var onChangeRecipient = React.useCallback( - function (recipient) { - dispatch(setRecipient({ recipient })) - }, - [dispatch] - ) - return { - onSwitchTokens, - onCurrencySelection, - onUserInput, - onChangeRecipient, - } -} -var BAD_RECIPIENT_ADDRESSES = { - '0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f': true, - '0xf164fC0Ec4E93095b804a4795bBe1e041497b92a': true, - '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D': true, // v2 router 02 -} -// from the current swap inputs, compute the best trade and return it. -function useDerivedSwapInfo() { - var _a, _b - var account = useActiveWeb3React().account - var _c = useSwapState(), - independentField = _c.independentField, - typedValue = _c.typedValue, - _d = Field.INPUT, - inputCurrencyId = _c[_d].currencyId, - _e = Field.OUTPUT, - outputCurrencyId = _c[_e].currencyId, - recipient = _c.recipient - var inputCurrency = useCurrency(inputCurrencyId) - var outputCurrency = useCurrency(outputCurrencyId) - var recipientLookup = useENS(recipient !== null && recipient !== void 0 ? recipient : undefined) - var to = (_a = recipient === null ? account : recipientLookup.address) !== null && _a !== void 0 ? _a : null - var relevantTokenBalances = useCurrencyBalances( - account !== null && account !== void 0 ? account : undefined, - React.useMemo( - function () { - return [ - inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : undefined, - outputCurrency !== null && outputCurrency !== void 0 ? outputCurrency : undefined, - ] - }, - [inputCurrency, outputCurrency] - ) - ) - var isExactIn = independentField === Field.INPUT - var parsedAmount = React.useMemo( - function () { - var _a - return tryParseCurrencyAmount( - typedValue, - (_a = isExactIn ? inputCurrency : outputCurrency) !== null && _a !== void 0 ? _a : undefined - ) - }, - [inputCurrency, isExactIn, outputCurrency, typedValue] - ) - var trade = useBestTrade( - isExactIn ? sdkCore.TradeType.EXACT_INPUT : sdkCore.TradeType.EXACT_OUTPUT, - parsedAmount, - (_b = isExactIn ? outputCurrency : inputCurrency) !== null && _b !== void 0 ? _b : undefined - ) - var currencyBalances = React.useMemo( - function () { - var _a - return (_a = {}), (_a[Field.INPUT] = relevantTokenBalances[0]), (_a[Field.OUTPUT] = relevantTokenBalances[1]), _a - }, - [relevantTokenBalances] - ) - var currencies = React.useMemo( - function () { - var _a - return (_a = {}), (_a[Field.INPUT] = inputCurrency), (_a[Field.OUTPUT] = outputCurrency), _a - }, - [inputCurrency, outputCurrency] - ) - // allowed slippage is either auto slippage, or custom user defined slippage if auto slippage disabled - var autoSlippageTolerance = useAutoSlippageTolerance(trade.trade) - var allowedSlippage = useUserSlippageToleranceWithDefault(autoSlippageTolerance) - var inputError = React.useMemo( - function () { - var _a - var inputError - if (!account) { - inputError = jsxRuntime.jsx(macro.Trans, { children: 'Connect Wallet' }, void 0) - } - if (!currencies[Field.INPUT] || !currencies[Field.OUTPUT]) { - inputError = - inputError !== null && inputError !== void 0 - ? inputError - : jsxRuntime.jsx(macro.Trans, { children: 'Select a token' }, void 0) - } - if (!parsedAmount) { - inputError = - inputError !== null && inputError !== void 0 - ? inputError - : jsxRuntime.jsx(macro.Trans, { children: 'Enter an amount' }, void 0) - } - var formattedTo = isAddress(to) - if (!to || !formattedTo) { - inputError = - inputError !== null && inputError !== void 0 - ? inputError - : jsxRuntime.jsx(macro.Trans, { children: 'Enter a recipient' }, void 0) - } else { - if (BAD_RECIPIENT_ADDRESSES[formattedTo]) { - inputError = - inputError !== null && inputError !== void 0 - ? inputError - : jsxRuntime.jsx(macro.Trans, { children: 'Invalid recipient' }, void 0) - } - } - // compare input balance to max input based on version - var _b = __read( - [ - currencyBalances[Field.INPUT], - (_a = trade.trade) === null || _a === void 0 ? void 0 : _a.maximumAmountIn(allowedSlippage), - ], - 2 - ), - balanceIn = _b[0], - amountIn = _b[1] - if (balanceIn && amountIn && balanceIn.lessThan(amountIn)) { - inputError = jsxRuntime.jsxs( - macro.Trans, - { children: ['Insufficient ', amountIn.currency.symbol, ' balance'] }, - void 0 - ) - } - return inputError - }, - [account, allowedSlippage, currencies, currencyBalances, parsedAmount, to, trade.trade] - ) - return React.useMemo( - function () { - return { - currencies, - currencyBalances, - parsedAmount, - inputError, - trade, - allowedSlippage, - } - }, - [allowedSlippage, currencies, currencyBalances, inputError, parsedAmount, trade] - ) -} -function parseCurrencyFromURLParameter(urlParam) { - if (typeof urlParam === 'string') { - var valid = isAddress(urlParam) - if (valid) return valid - if (urlParam.toUpperCase() === 'ETH') return 'ETH' - } - return '' -} -function parseTokenAmountURLParameter(urlParam) { - return typeof urlParam === 'string' && !isNaN(parseFloat(urlParam)) ? urlParam : '' -} -function parseIndependentFieldURLParameter(urlParam) { - return typeof urlParam === 'string' && urlParam.toLowerCase() === 'output' ? Field.OUTPUT : Field.INPUT -} -var ENS_NAME_REGEX = /^[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)?$/ -var ADDRESS_REGEX = /^0x[a-fA-F0-9]{40}$/ -function validatedRecipient(recipient) { - if (typeof recipient !== 'string') return null - var address = isAddress(recipient) - if (address) return address - if (ENS_NAME_REGEX.test(recipient)) return recipient - if (ADDRESS_REGEX.test(recipient)) return recipient - return null -} -function queryParametersToSwapState(parsedQs) { - var _a - var inputCurrency = parseCurrencyFromURLParameter(parsedQs.inputCurrency) - var outputCurrency = parseCurrencyFromURLParameter(parsedQs.outputCurrency) - if (inputCurrency === '' && outputCurrency === '') { - // default to ETH input - inputCurrency = 'ETH' - } else if (inputCurrency === outputCurrency) { - // clear output if identical - outputCurrency = '' - } - var recipient = validatedRecipient(parsedQs.recipient) - return ( - (_a = {}), - (_a[Field.INPUT] = { - currencyId: - inputCurrency === '' ? null : inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : null, - }), - (_a[Field.OUTPUT] = { - currencyId: - outputCurrency === '' ? null : outputCurrency !== null && outputCurrency !== void 0 ? outputCurrency : null, - }), - (_a.typedValue = parseTokenAmountURLParameter(parsedQs.exactAmount)), - (_a.independentField = parseIndependentFieldURLParameter(parsedQs.exactField)), - (_a.recipient = recipient), - _a - ) -} -// updates the swap state to use the defaults for a given network -function useDefaultsFromURLSearch() { - var chainId = useActiveWeb3React().chainId - var dispatch = useAppDispatch() - var parsedQs = useParsedQueryString() - var _a = __read(React.useState(), 2), - result = _a[0], - setResult = _a[1] - React.useEffect( - function () { - var _a, _b - if (!chainId) return - var parsed = queryParametersToSwapState(parsedQs) - var inputCurrencyId = (_a = parsed[Field.INPUT].currencyId) !== null && _a !== void 0 ? _a : undefined - var outputCurrencyId = (_b = parsed[Field.OUTPUT].currencyId) !== null && _b !== void 0 ? _b : undefined - dispatch( - replaceSwapState({ - typedValue: parsed.typedValue, - field: parsed.independentField, - inputCurrencyId, - outputCurrencyId, - recipient: parsed.recipient, - }) - ) - setResult({ inputCurrencyId, outputCurrencyId }) - // eslint-disable-next-line react-hooks/exhaustive-deps - }, - [dispatch, chainId] - ) - return result +// This optional code is used to register a service worker. +// register() is not called by default. +// This lets the app load faster on subsequent visits in production, and gives +// it offline capabilities. However, it also means that developers (and users) +// will only see deployed updates on subsequent visits to a page, after all the +// existing tabs open on the page have been closed, since previously cached +// resources are updated in the background. +// To learn more about the benefits of this model and instructions on how to +// opt-in, read https://cra.link/PWA +var isLocalhost = Boolean(window.location.hostname === 'localhost' || + // [::1] is the IPv6 localhost address. + window.location.hostname === '[::1]' || + // 127.0.0.0/8 are considered localhost for IPv4. + window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)); +function registerValidSW(swUrl, config) { + navigator.serviceWorker + .register(swUrl) + .then(function (registration) { + registration.onupdatefound = function () { + var installingWorker = registration.installing; + if (installingWorker == null) { + return; + } + installingWorker.onstatechange = function () { + if (installingWorker.state === 'installed') { + if (navigator.serviceWorker.controller) { + // At this point, the updated precached content has been fetched, + // but the previous service worker will still serve the older + // content until all client tabs are closed. + console.log('New content is available and will be used when all ' + + 'tabs for this page are closed. See https://cra.link/PWA.'); + // Execute callback + if (config && config.onUpdate) { + config.onUpdate(registration); + } + } + else { + // At this point, everything has been precached. + // It's the perfect time to display a + // "Content is cached for offline use." message. + console.log('Content is cached for offline use.'); + // Execute callback + if (config && config.onSuccess) { + config.onSuccess(registration); + } + } + } + }; + }; + }) + .catch(function (error) { + console.error('Error during service worker registration:', error); + }); +} +function checkValidServiceWorker(swUrl, config) { + // Check if the service worker can be found. If it can't reload the page. + fetch(swUrl, { + headers: { 'Service-Worker': 'script' }, + }) + .then(function (response) { + // Ensure service worker exists, and that we really are getting a JS file. + var contentType = response.headers.get('content-type'); + if (response.status === 404 || (contentType != null && contentType.indexOf('javascript') === -1)) { + // No service worker found. Probably a different app. Reload the page. + navigator.serviceWorker.ready.then(function (registration) { + registration.unregister().then(function () { + window.location.reload(); + }); + }); + } + else { + // Service worker found. Proceed as normal. + registerValidSW(swUrl, config); + } + }) + .catch(function () { + console.log('No internet connection found. App is running in offline mode.'); + }); +} +function register(config) { + if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { + // The URL constructor is available in all browsers that support SW. + var publicUrl = new URL(process.env.PUBLIC_URL, window.location.href); + if (publicUrl.origin !== window.location.origin) { + // Our service worker won't work if PUBLIC_URL is on a different origin + // from what our page is served on. This might happen if a CDN is used to + // serve assets; see https://github.com/facebook/create-react-app/issues/2374 + return; + } + window.addEventListener('load', function () { + var swUrl = process.env.PUBLIC_URL + "/service-worker.js"; + if (isLocalhost) { + // This is running on localhost. Let's check if a service worker still exists or not. + checkValidServiceWorker(swUrl, config); + // Add some additional logging to localhost, pointing developers to the + // service worker/PWA documentation. + navigator.serviceWorker.ready.then(function () { + console.log('This web app is being served cache-first by a service ' + + 'worker. To learn more, visit https://cra.link/PWA'); + }); + } + else { + // Is not localhost. Just register service worker + registerValidSW(swUrl, config); + } + }); + } +} +function unregister() { + if ('serviceWorker' in navigator) { + navigator.serviceWorker.ready + .then(function (registration) { + registration.unregister(); + }) + .catch(function (error) { + console.error(error.message); + }); + } } -var initialState$2 = queryParametersToSwapState(parsedQueryString()) -var swap = toolkit.createReducer(initialState$2, function (builder) { - return builder - .addCase(replaceSwapState, function (state, _a) { - var _b - var _c = _a.payload, - typedValue = _c.typedValue, - recipient = _c.recipient, - field = _c.field, - inputCurrencyId = _c.inputCurrencyId, - outputCurrencyId = _c.outputCurrencyId - return ( - (_b = {}), - (_b[Field.INPUT] = { - currencyId: inputCurrencyId !== null && inputCurrencyId !== void 0 ? inputCurrencyId : null, - }), - (_b[Field.OUTPUT] = { - currencyId: outputCurrencyId !== null && outputCurrencyId !== void 0 ? outputCurrencyId : null, - }), - (_b.independentField = field), - (_b.typedValue = typedValue), - (_b.recipient = recipient), - _b - ) - }) - .addCase(selectCurrency, function (state, _a) { - var _b, _c - var _d = _a.payload, - currencyId = _d.currencyId, - field = _d.field - var otherField = field === Field.INPUT ? Field.OUTPUT : Field.INPUT - if (currencyId === state[otherField].currencyId) { - // the case where we have to swap the order - return __assign( - __assign({}, state), - ((_b = { independentField: state.independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT }), - (_b[field] = { currencyId }), - (_b[otherField] = { currencyId: state[field].currencyId }), - _b) - ) - } else { - // the normal case - return __assign(__assign({}, state), ((_c = {}), (_c[field] = { currencyId }), _c)) - } - }) - .addCase(switchCurrencies, function (state) { - var _a - return __assign( - __assign({}, state), - ((_a = { independentField: state.independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT }), - (_a[Field.INPUT] = { currencyId: state[Field.OUTPUT].currencyId }), - (_a[Field.OUTPUT] = { currencyId: state[Field.INPUT].currencyId }), - _a) - ) - }) - .addCase(typeInput, function (state, _a) { - var _b = _a.payload, - field = _b.field, - typedValue = _b.typedValue - return __assign(__assign({}, state), { independentField: field, typedValue }) - }) - .addCase(setRecipient, function (state, _a) { - var recipient = _a.payload.recipient - state.recipient = recipient - }) -}) - -var now = function () { - return new Date().getTime() -} -var initialState$1 = {} -var transactions = toolkit.createReducer(initialState$1, function (builder) { - return builder - .addCase(updateVersion, function (transactions) { - // in case there are any transactions in the store with the old format, remove them - Object.keys(transactions).forEach(function (chainId) { - var chainTransactions = transactions[chainId] - Object.keys(chainTransactions).forEach(function (hash) { - if (!('info' in chainTransactions[hash])) { - // clear old transactions that don't have the right format - delete chainTransactions[hash] - } - }) - }) - }) - .addCase(addTransaction, function (transactions, _a) { - var _b, _c - var _d = _a.payload, - chainId = _d.chainId, - from = _d.from, - hash = _d.hash, - info = _d.info - if ((_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash]) { - throw Error('Attempted to add existing transaction.') - } - var txs = (_c = transactions[chainId]) !== null && _c !== void 0 ? _c : {} - txs[hash] = { hash, info, from, addedTime: now() } - transactions[chainId] = txs - }) - .addCase(clearAllTransactions, function (transactions, _a) { - var chainId = _a.payload.chainId - if (!transactions[chainId]) return - transactions[chainId] = {} - }) - .addCase(checkedTransaction, function (transactions, _a) { - var _b - var _c = _a.payload, - chainId = _c.chainId, - hash = _c.hash, - blockNumber = _c.blockNumber - var tx = (_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash] - if (!tx) { - return - } - if (!tx.lastCheckedBlockNumber) { - tx.lastCheckedBlockNumber = blockNumber - } else { - tx.lastCheckedBlockNumber = Math.max(blockNumber, tx.lastCheckedBlockNumber) - } - }) - .addCase(finalizeTransaction, function (transactions, _a) { - var _b - var _c = _a.payload, - hash = _c.hash, - chainId = _c.chainId, - receipt = _c.receipt - var tx = (_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash] - if (!tx) { - return - } - tx.receipt = receipt - tx.confirmedTime = now() - }) -}) - -var currentTimestamp = function () { - return new Date().getTime() -} -function pairKey(token0Address, token1Address) { - return token0Address + ';' + token1Address -} -var initialState = { - matchesDarkMode: false, - userDarkMode: null, - userExpertMode: false, - userLocale: null, - userClientSideRouter: false, - userHideClosedPositions: false, - userSlippageTolerance: 'auto', - userSlippageToleranceHasBeenMigratedToAuto: true, - userDeadline: DEFAULT_DEADLINE_FROM_NOW, - tokens: {}, - pairs: {}, - timestamp: currentTimestamp(), - URLWarningVisible: true, - showSurveyPopup: undefined, -} -var user = toolkit.createReducer(initialState, function (builder) { - return builder - .addCase(updateVersion, function (state) { - // slippage isnt being tracked in local storage, reset to default - // noinspection SuspiciousTypeOfGuard - if ( - typeof state.userSlippageTolerance !== 'number' || - !Number.isInteger(state.userSlippageTolerance) || - state.userSlippageTolerance < 0 || - state.userSlippageTolerance > 5000 - ) { - state.userSlippageTolerance = 'auto' - } else { - if ( - !state.userSlippageToleranceHasBeenMigratedToAuto && - [10, 50, 100].indexOf(state.userSlippageTolerance) !== -1 - ) { - state.userSlippageTolerance = 'auto' - state.userSlippageToleranceHasBeenMigratedToAuto = true - } - } - // deadline isnt being tracked in local storage, reset to default - // noinspection SuspiciousTypeOfGuard - if ( - typeof state.userDeadline !== 'number' || - !Number.isInteger(state.userDeadline) || - state.userDeadline < 60 || - state.userDeadline > 180 * 60 - ) { - state.userDeadline = DEFAULT_DEADLINE_FROM_NOW - } - state.lastUpdateVersionTimestamp = currentTimestamp() - }) - .addCase(updateUserDarkMode, function (state, action) { - state.userDarkMode = action.payload.userDarkMode - state.timestamp = currentTimestamp() - }) - .addCase(updateMatchesDarkMode, function (state, action) { - state.matchesDarkMode = action.payload.matchesDarkMode - state.timestamp = currentTimestamp() - }) - .addCase(updateUserExpertMode, function (state, action) { - state.userExpertMode = action.payload.userExpertMode - state.timestamp = currentTimestamp() - }) - .addCase(updateUserLocale, function (state, action) { - state.userLocale = action.payload.userLocale - state.timestamp = currentTimestamp() - }) - .addCase(updateUserSlippageTolerance, function (state, action) { - state.userSlippageTolerance = action.payload.userSlippageTolerance - state.timestamp = currentTimestamp() - }) - .addCase(updateUserDeadline, function (state, action) { - state.userDeadline = action.payload.userDeadline - state.timestamp = currentTimestamp() - }) - .addCase(updateUserClientSideRouter, function (state, action) { - state.userClientSideRouter = action.payload.userClientSideRouter - }) - .addCase(updateHideClosedPositions, function (state, action) { - state.userHideClosedPositions = action.payload.userHideClosedPositions - }) - .addCase(updateShowSurveyPopup, function (state, action) { - state.showSurveyPopup = action.payload.showSurveyPopup - }) - .addCase(addSerializedToken, function (state, _a) { - var serializedToken = _a.payload.serializedToken - if (!state.tokens) { - state.tokens = {} - } - state.tokens[serializedToken.chainId] = state.tokens[serializedToken.chainId] || {} - state.tokens[serializedToken.chainId][serializedToken.address] = serializedToken - state.timestamp = currentTimestamp() - }) - .addCase(removeSerializedToken, function (state, _a) { - var _b = _a.payload, - address = _b.address, - chainId = _b.chainId - if (!state.tokens) { - state.tokens = {} - } - state.tokens[chainId] = state.tokens[chainId] || {} - delete state.tokens[chainId][address] - state.timestamp = currentTimestamp() - }) - .addCase(addSerializedPair, function (state, _a) { - var serializedPair = _a.payload.serializedPair - if ( - serializedPair.token0.chainId === serializedPair.token1.chainId && - serializedPair.token0.address !== serializedPair.token1.address - ) { - var chainId = serializedPair.token0.chainId - state.pairs[chainId] = state.pairs[chainId] || {} - state.pairs[chainId][pairKey(serializedPair.token0.address, serializedPair.token1.address)] = serializedPair - } - state.timestamp = currentTimestamp() - }) - .addCase(removeSerializedPair, function (state, _a) { - var _b = _a.payload, - chainId = _b.chainId, - tokenAAddress = _b.tokenAAddress, - tokenBAddress = _b.tokenBAddress - if (state.pairs[chainId]) { - // just delete both keys if either exists - delete state.pairs[chainId][pairKey(tokenAAddress, tokenBAddress)] - delete state.pairs[chainId][pairKey(tokenBAddress, tokenAAddress)] - } - state.timestamp = currentTimestamp() - }) -}) - -var _a$2 -var PERSISTED_KEYS = ['user', 'transactions', 'lists'] -var store = toolkit.configureStore({ - reducer: - ((_a$2 = { - application, - user, - transactions, - swap, - mint, - mintV3, - burn, - burnV3, - multicall: multicall.reducer, - lists, - logs, - }), - (_a$2[api.reducerPath] = api.reducer), - (_a$2[routingApi.reducerPath] = routingApi.reducer), - _a$2), - middleware(getDefaultMiddleware) { - return getDefaultMiddleware({ thunk: true }) - .concat(api.middleware) - .concat(routingApi.middleware) - .concat(reduxLocalstorageSimple.save({ states: PERSISTED_KEYS, debounce: 1000 })) - }, - preloadedState: reduxLocalstorageSimple.load({ - states: PERSISTED_KEYS, - disableWarnings: process.env.NODE_ENV === 'test', - }), -}) -store.dispatch(updateVersion()) -react.setupListeners(store.dispatch) - -var _a$1, _b$1, _c$1 -/** - * Given a locale string (e.g. from user agent), return the best match for corresponding SupportedLocale - * @param maybeSupportedLocale the fuzzy locale identifier - */ -function parseLocale(maybeSupportedLocale) { - if (typeof maybeSupportedLocale !== 'string') return undefined - var lowerMaybeSupportedLocale = maybeSupportedLocale.toLowerCase() - return SUPPORTED_LOCALES.find(function (locale) { - return locale.toLowerCase() === lowerMaybeSupportedLocale || locale.split('-')[0] === lowerMaybeSupportedLocale - }) -} -/** - * Returns the supported locale read from the user agent (navigator) - */ -function navigatorLocale() { - var _a - if (!navigator.language) return undefined - var _b = __read(navigator.language.split('-'), 2), - language = _b[0], - region = _b[1] - if (region) { - return (_a = parseLocale(language + '-' + region.toUpperCase())) !== null && _a !== void 0 - ? _a - : parseLocale(language) - } - return parseLocale(language) -} -function storeLocale() { - var _a - return (_a = store.getState().user.userLocale) !== null && _a !== void 0 ? _a : undefined -} -;(_c$1 = - (_b$1 = (_a$1 = parseLocale(parsedQueryString().lng)) !== null && _a$1 !== void 0 ? _a$1 : storeLocale()) !== null && - _b$1 !== void 0 - ? _b$1 - : navigatorLocale()) !== null && _c$1 !== void 0 - ? _c$1 - : DEFAULT_LOCALE -function useUrlLocale() { - var parsed = useParsedQueryString() - return parseLocale(parsed.lng) -} -/** - * Returns the currently active locale, from a combination of user agent, query string, and user settings stored in redux - * Stores the query string locale in redux (if set) to persist across sessions - */ -function useActiveLocale() { - var urlLocale = useUrlLocale() - var userLocale = useUserLocale() - return React.useMemo( - function () { - var _a, _b - return (_b = - (_a = urlLocale !== null && urlLocale !== void 0 ? urlLocale : userLocale) !== null && _a !== void 0 - ? _a - : navigatorLocale()) !== null && _b !== void 0 - ? _b - : DEFAULT_LOCALE - }, - [urlLocale, userLocale] - ) -} +var serviceWorkerRegistration = /*#__PURE__*/Object.freeze({ + __proto__: null, + register: register, + unregister: unregister +}); -function useLocationLinkProps(locale) { - var location = reactRouterDom.useLocation() - var qs$1 = useParsedQueryString() - var activeLocale = useActiveLocale() - return React.useMemo( - function () { - return !locale - ? {} - : { - to: __assign(__assign({}, location), { - search: qs.stringify(__assign(__assign({}, qs$1), { lng: locale })), - }), - onClick() { - ReactGA__default['default'].event({ - category: 'Localization', - action: 'Switch Locale', - label: activeLocale + ' -> ' + locale, - }) - }, - } - }, - [location, qs$1, activeLocale, locale] - ) +// SDN OFAC addresses +var BLOCKED_ADDRESSES = [ + '0x7Db418b5D567A4e0E8c59Ad71BE1FcE48f3E6107', + '0x72a5843cc08275C8171E582972Aa4fDa8C397B2A', + '0x7F19720A857F834887FC9A7bC0a0fBe7Fc7f8102', + '0xA7e5d5A720f06526557c513402f2e6B5fA20b008', + '0x1da5821544e25c636c1417Ba96Ade4Cf6D2f9B5A', + '0x9F4cda013E354b8fC285BF4b9A60460cEe7f7Ea9', + '0x19Aa5Fe80D33a56D56c78e82eA5E50E5d80b4Dff', + '0x2f389cE8bD8ff92De3402FFCe4691d17fC4f6535', + '0xe7aa314c77F4233C18C6CC84384A9247c0cf367B', + '0x7F367cC41522cE07553e823bf3be79A889DEbe1B', + '0xd882cFc20F52f2599D84b8e8D58C7FB62cfE344b', + '0x901bb9583b24D97e995513C6778dc6888AB6870e', + '0x8576aCC5C05D6Ce88f4e49bf65BdF0C62F91353C', + '0xC8a65Fadf0e0dDAf421F28FEAb69Bf6E2E589963', + '0x308eD4B7b49797e1A98D3818bFF6fe5385410370', + '0x67d40EE1A85bf4a4Bb7Ffae16De985e8427B', + '0x6f1ca141a28907f78ebaa64fb83a9088b02a83', + '0x6acdfba02d390b97ac2b2d42a63e85293bcc1', + '0x48549a34ae37b12f6a30566245176994e17c6', + '0x5512d943ed1f7c8a43f3435c85f7ab68b30121', + '0xc455f7fd3e0e12afd51fba5c106909934d8a0e', + '0x3cbded43efdaf0fc77b9c55f6fc9988fcc9b757d', + '0x67d40EE1A85bf4a4Bb7Ffae16De985e8427B6b45', + '0x6f1ca141a28907f78ebaa64fb83a9088b02a8352', + '0x6acdfba02d390b97ac2b2d42a63e85293bcc160e', + '0x48549a34ae37b12f6a30566245176994e17c6b4a', + '0x5512d943ed1f7c8a43f3435c85f7ab68b30121b0', + '0xc455f7fd3e0e12afd51fba5c106909934d8a0e4a', +]; +function Blocklist(_a) { + var children = _a.children; + var account = useActiveWeb3React().account; + var blocked = React.useMemo(function () { return Boolean(account && BLOCKED_ADDRESSES.indexOf(account) !== -1); }, [account]); + if (blocked) { + return (jsxRuntime.jsx("div", { children: jsxRuntime.jsx(macro.Trans, { children: "Blocked address" }, void 0) }, void 0)); + } + return jsxRuntime.jsx(jsxRuntime.Fragment, { children: children }, void 0); } -var Container = styled__default['default'](ThemedText.Small)( - templateObject_1$3 || - (templateObject_1$3 = __makeTemplateObject( - ['\n opacity: 0.6;\n :hover {\n opacity: 1;\n }\n margin-top: 1rem !important;\n'], - ['\n opacity: 0.6;\n :hover {\n opacity: 1;\n }\n margin-top: 1rem !important;\n'] - )) -) -var useTargetLocale = function (activeLocale) { - var browserLocale = React.useMemo(function () { - return navigatorLocale() - }, []) - if (browserLocale && (browserLocale !== DEFAULT_LOCALE || activeLocale !== DEFAULT_LOCALE)) { - if (activeLocale === browserLocale) { - return DEFAULT_LOCALE - } else { - return browserLocale - } - } - return null -} -function SwitchLocaleLink() { - var activeLocale = useActiveLocale() - var targetLocale = useTargetLocale(activeLocale) - var _a = useLocationLinkProps(targetLocale), - to = _a.to, - onClick = _a.onClick - if (!targetLocale || !to) return null - return jsxRuntime.jsx( - Container, - { - children: jsxRuntime.jsxs( - macro.Trans, - { - children: [ - 'Uniswap available in:', - ' ', - jsxRuntime.jsx( - StyledInternalLink, - __assign({ onClick, to }, { children: LOCALE_LABEL[targetLocale] }), - void 0 - ), - ], - }, - void 0 - ), - }, - void 0 - ) -} -var templateObject_1$3 - -function TokenWarningModal(_a) { - var isOpen = _a.isOpen, - tokens = _a.tokens, - onConfirm = _a.onConfirm, - onDismiss = _a.onDismiss - return jsxRuntime.jsx( - Modal, - __assign( - { isOpen, onDismiss, maxHeight: 100 }, - { children: jsxRuntime.jsx(ImportToken, { tokens, handleCurrencySelect: onConfirm }, void 0) } - ), - void 0 - ) +var plurals = { + 'af-ZA': plurals$1.af, + 'ar-SA': plurals$1.ar, + 'ca-ES': plurals$1.ca, + 'cs-CZ': plurals$1.cs, + 'da-DK': plurals$1.da, + 'de-DE': plurals$1.de, + 'el-GR': plurals$1.el, + 'en-US': plurals$1.en, + 'es-ES': plurals$1.es, + 'fi-FI': plurals$1.fi, + 'fr-FR': plurals$1.fr, + 'he-IL': plurals$1.he, + 'hu-HU': plurals$1.hu, + 'id-ID': plurals$1.id, + 'it-IT': plurals$1.it, + 'ja-JP': plurals$1.ja, + 'ko-KR': plurals$1.ko, + 'nl-NL': plurals$1.nl, + 'no-NO': plurals$1.no, + 'pl-PL': plurals$1.pl, + 'pt-BR': plurals$1.pt, + 'pt-PT': plurals$1.pt, + 'ro-RO': plurals$1.ro, + 'ru-RU': plurals$1.ru, + 'sr-SP': plurals$1.sr, + 'sv-SE': plurals$1.sv, + 'sw-TZ': plurals$1.sw, + 'tr-TR': plurals$1.tr, + 'uk-UA': plurals$1.uk, + 'vi-VN': plurals$1.vi, + 'zh-CN': plurals$1.zh, + 'zh-TW': plurals$1.zh, + pseudo: plurals$1.en, +}; +function dynamicActivate(locale) { + return __awaiter(this, void 0, void 0, function () { + var catalog, _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + core$2.i18n.loadLocaleData(locale, { plurals: function () { return plurals[locale]; } }); + if (!(locale === DEFAULT_LOCALE)) return [3 /*break*/, 1]; + _a = DEFAULT_CATALOG; + return [3 /*break*/, 3]; + case 1: return [4 /*yield*/, (function (t) { return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require(t)); }); })("locales/" + locale)]; + case 2: + _a = _b.sent(); + _b.label = 3; + case 3: + catalog = _a; + core$2.i18n.load(locale, catalog.messages); + core$2.i18n.activate(locale); + return [2 /*return*/]; + } + }); + }); +} +function Provider(_a) { + var locale = _a.locale, _b = _a.forceRenderAfterLocaleChange, forceRenderAfterLocaleChange = _b === void 0 ? true : _b, onActivate = _a.onActivate, children = _a.children; + React.useEffect(function () { + dynamicActivate(locale) + .then(function () { return onActivate === null || onActivate === void 0 ? void 0 : onActivate(locale); }) + .catch(function (error) { + console.error('Failed to activate locale', locale, error); + }); + }, [locale, onActivate]); + return (jsxRuntime.jsx(react$1.I18nProvider, __assign({ forceRenderOnLocaleChange: forceRenderAfterLocaleChange, i18n: core$2.i18n }, { children: children }), void 0)); } -function useTokenAllowance(token, owner, spender) { - var contract = useTokenContract(token === null || token === void 0 ? void 0 : token.address, false) - var inputs = React.useMemo( - function () { - return [owner, spender] - }, - [owner, spender] - ) - var allowance = useSingleCallResult(contract, 'allowance', inputs).result - return React.useMemo( - function () { - return token && allowance ? sdkCore.CurrencyAmount.fromRawAmount(token, allowance.toString()) : undefined - }, - [token, allowance] - ) +dynamicActivate(initialLocale); +function LanguageProvider(_a) { + var children = _a.children; + var locale = useActiveLocale(); + var _b = __read(useUserLocaleManager(), 2), setUserLocale = _b[1]; + var onActivate = React.useCallback(function (locale) { + document.documentElement.setAttribute('lang', locale); + setUserLocale(locale); // stores the selected locale to persist across sessions + }, [setUserLocale]); + return (jsxRuntime.jsx(Provider, __assign({ locale: locale, forceRenderAfterLocaleChange: false, onActivate: onActivate }, { children: children }), void 0)); } -var ApprovalState -;(function (ApprovalState) { - ApprovalState['UNKNOWN'] = 'UNKNOWN' - ApprovalState['NOT_APPROVED'] = 'NOT_APPROVED' - ApprovalState['PENDING'] = 'PENDING' - ApprovalState['APPROVED'] = 'APPROVED' -})(ApprovalState || (ApprovalState = {})) -function useApprovalStateForSpender(amountToApprove, spender, useIsPendingApproval) { - var _a - var account = useActiveWeb3React().account - var token = ( - (_a = amountToApprove === null || amountToApprove === void 0 ? void 0 : amountToApprove.currency) === null || - _a === void 0 - ? void 0 - : _a.isToken - ) - ? amountToApprove.currency - : undefined - var currentAllowance = useTokenAllowance(token, account !== null && account !== void 0 ? account : undefined, spender) - var pendingApproval = useIsPendingApproval(token, spender) - return React.useMemo( - function () { - if (!amountToApprove || !spender) return ApprovalState.UNKNOWN - if (amountToApprove.currency.isNative) return ApprovalState.APPROVED - // we might not have enough data to know whether or not we need to approve - if (!currentAllowance) return ApprovalState.UNKNOWN - // amountToApprove will be defined if currentAllowance is - return currentAllowance.lessThan(amountToApprove) - ? pendingApproval - ? ApprovalState.PENDING - : ApprovalState.NOT_APPROVED - : ApprovalState.APPROVED - }, - [amountToApprove, currentAllowance, pendingApproval, spender] - ) -} -function useApproval(amountToApprove, spender, useIsPendingApproval) { - var _this = this - var _a - var chainId = useActiveWeb3React().chainId - var token = ( - (_a = amountToApprove === null || amountToApprove === void 0 ? void 0 : amountToApprove.currency) === null || - _a === void 0 - ? void 0 - : _a.isToken - ) - ? amountToApprove.currency - : undefined - // check the current approval status - var approvalState = useApprovalStateForSpender(amountToApprove, spender, useIsPendingApproval) - var tokenContract = useTokenContract(token === null || token === void 0 ? void 0 : token.address) - var approve = React.useCallback( - function () { - return __awaiter(_this, void 0, void 0, function () { - function logFailure(error) { - console.warn( - ((token === null || token === void 0 ? void 0 : token.symbol) || 'Token') + ' approval failed:', - error - ) - return - } - var useExact, estimatedGas - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - // Bail early if there is an issue. - if (approvalState !== ApprovalState.NOT_APPROVED) { - return [2 /*return*/, logFailure('approve was called unnecessarily')] - } else if (!chainId) { - return [2 /*return*/, logFailure('no chainId')] - } else if (!token) { - return [2 /*return*/, logFailure('no token')] - } else if (!tokenContract) { - return [2 /*return*/, logFailure('tokenContract is null')] - } else if (!amountToApprove) { - return [2 /*return*/, logFailure('missing amount to approve')] - } else if (!spender) { - return [2 /*return*/, logFailure('no spender')] - } - useExact = false - return [ - 4 /*yield*/, - tokenContract.estimateGas.approve(spender, constants.MaxUint256).catch(function () { - // general fallback for tokens which restrict approval amounts - useExact = true - return tokenContract.estimateGas.approve(spender, amountToApprove.quotient.toString()) - }), - ] - case 1: - estimatedGas = _a.sent() - return [ - 2 /*return*/, - tokenContract - .approve(spender, useExact ? amountToApprove.quotient.toString() : constants.MaxUint256, { - gasLimit: calculateGasMargin(estimatedGas), - }) - .then(function (response) { - return { - response, - tokenAddress: token.address, - spenderAddress: spender, - } - }) - .catch(function (error) { - logFailure(error) - throw error - }), - ] - } - }) - }) - }, - [approvalState, token, tokenContract, amountToApprove, spender, chainId] - ) - return [approvalState, approve] -} +var Bundle_OrderBy; +(function (Bundle_OrderBy) { + Bundle_OrderBy["Id"] = "id"; + Bundle_OrderBy["EthPriceUsd"] = "ethPriceUSD"; +})(Bundle_OrderBy || (Bundle_OrderBy = {})); +var Burn_OrderBy; +(function (Burn_OrderBy) { + Burn_OrderBy["Id"] = "id"; + Burn_OrderBy["Transaction"] = "transaction"; + Burn_OrderBy["Pool"] = "pool"; + Burn_OrderBy["Token0"] = "token0"; + Burn_OrderBy["Token1"] = "token1"; + Burn_OrderBy["Timestamp"] = "timestamp"; + Burn_OrderBy["Owner"] = "owner"; + Burn_OrderBy["Origin"] = "origin"; + Burn_OrderBy["Amount"] = "amount"; + Burn_OrderBy["Amount0"] = "amount0"; + Burn_OrderBy["Amount1"] = "amount1"; + Burn_OrderBy["AmountUsd"] = "amountUSD"; + Burn_OrderBy["TickLower"] = "tickLower"; + Burn_OrderBy["TickUpper"] = "tickUpper"; + Burn_OrderBy["LogIndex"] = "logIndex"; +})(Burn_OrderBy || (Burn_OrderBy = {})); +var Collect_OrderBy; +(function (Collect_OrderBy) { + Collect_OrderBy["Id"] = "id"; + Collect_OrderBy["Transaction"] = "transaction"; + Collect_OrderBy["Timestamp"] = "timestamp"; + Collect_OrderBy["Pool"] = "pool"; + Collect_OrderBy["Owner"] = "owner"; + Collect_OrderBy["Amount0"] = "amount0"; + Collect_OrderBy["Amount1"] = "amount1"; + Collect_OrderBy["AmountUsd"] = "amountUSD"; + Collect_OrderBy["TickLower"] = "tickLower"; + Collect_OrderBy["TickUpper"] = "tickUpper"; + Collect_OrderBy["LogIndex"] = "logIndex"; +})(Collect_OrderBy || (Collect_OrderBy = {})); +var Factory_OrderBy; +(function (Factory_OrderBy) { + Factory_OrderBy["Id"] = "id"; + Factory_OrderBy["PoolCount"] = "poolCount"; + Factory_OrderBy["TxCount"] = "txCount"; + Factory_OrderBy["TotalVolumeUsd"] = "totalVolumeUSD"; + Factory_OrderBy["TotalVolumeEth"] = "totalVolumeETH"; + Factory_OrderBy["TotalFeesUsd"] = "totalFeesUSD"; + Factory_OrderBy["TotalFeesEth"] = "totalFeesETH"; + Factory_OrderBy["UntrackedVolumeUsd"] = "untrackedVolumeUSD"; + Factory_OrderBy["TotalValueLockedUsd"] = "totalValueLockedUSD"; + Factory_OrderBy["TotalValueLockedEth"] = "totalValueLockedETH"; + Factory_OrderBy["TotalValueLockedUsdUntracked"] = "totalValueLockedUSDUntracked"; + Factory_OrderBy["TotalValueLockedEthUntracked"] = "totalValueLockedETHUntracked"; + Factory_OrderBy["Owner"] = "owner"; +})(Factory_OrderBy || (Factory_OrderBy = {})); +var Flash_OrderBy; +(function (Flash_OrderBy) { + Flash_OrderBy["Id"] = "id"; + Flash_OrderBy["Transaction"] = "transaction"; + Flash_OrderBy["Timestamp"] = "timestamp"; + Flash_OrderBy["Pool"] = "pool"; + Flash_OrderBy["Sender"] = "sender"; + Flash_OrderBy["Recipient"] = "recipient"; + Flash_OrderBy["Amount0"] = "amount0"; + Flash_OrderBy["Amount1"] = "amount1"; + Flash_OrderBy["AmountUsd"] = "amountUSD"; + Flash_OrderBy["Amount0Paid"] = "amount0Paid"; + Flash_OrderBy["Amount1Paid"] = "amount1Paid"; + Flash_OrderBy["LogIndex"] = "logIndex"; +})(Flash_OrderBy || (Flash_OrderBy = {})); +var Mint_OrderBy; +(function (Mint_OrderBy) { + Mint_OrderBy["Id"] = "id"; + Mint_OrderBy["Transaction"] = "transaction"; + Mint_OrderBy["Timestamp"] = "timestamp"; + Mint_OrderBy["Pool"] = "pool"; + Mint_OrderBy["Token0"] = "token0"; + Mint_OrderBy["Token1"] = "token1"; + Mint_OrderBy["Owner"] = "owner"; + Mint_OrderBy["Sender"] = "sender"; + Mint_OrderBy["Origin"] = "origin"; + Mint_OrderBy["Amount"] = "amount"; + Mint_OrderBy["Amount0"] = "amount0"; + Mint_OrderBy["Amount1"] = "amount1"; + Mint_OrderBy["AmountUsd"] = "amountUSD"; + Mint_OrderBy["TickLower"] = "tickLower"; + Mint_OrderBy["TickUpper"] = "tickUpper"; + Mint_OrderBy["LogIndex"] = "logIndex"; +})(Mint_OrderBy || (Mint_OrderBy = {})); +var OrderDirection; +(function (OrderDirection) { + OrderDirection["Asc"] = "asc"; + OrderDirection["Desc"] = "desc"; +})(OrderDirection || (OrderDirection = {})); +var PoolDayData_OrderBy; +(function (PoolDayData_OrderBy) { + PoolDayData_OrderBy["Id"] = "id"; + PoolDayData_OrderBy["Date"] = "date"; + PoolDayData_OrderBy["Pool"] = "pool"; + PoolDayData_OrderBy["Liquidity"] = "liquidity"; + PoolDayData_OrderBy["SqrtPrice"] = "sqrtPrice"; + PoolDayData_OrderBy["Token0Price"] = "token0Price"; + PoolDayData_OrderBy["Token1Price"] = "token1Price"; + PoolDayData_OrderBy["Tick"] = "tick"; + PoolDayData_OrderBy["FeeGrowthGlobal0X128"] = "feeGrowthGlobal0X128"; + PoolDayData_OrderBy["FeeGrowthGlobal1X128"] = "feeGrowthGlobal1X128"; + PoolDayData_OrderBy["TvlUsd"] = "tvlUSD"; + PoolDayData_OrderBy["VolumeToken0"] = "volumeToken0"; + PoolDayData_OrderBy["VolumeToken1"] = "volumeToken1"; + PoolDayData_OrderBy["VolumeUsd"] = "volumeUSD"; + PoolDayData_OrderBy["FeesUsd"] = "feesUSD"; + PoolDayData_OrderBy["TxCount"] = "txCount"; + PoolDayData_OrderBy["Open"] = "open"; + PoolDayData_OrderBy["High"] = "high"; + PoolDayData_OrderBy["Low"] = "low"; + PoolDayData_OrderBy["Close"] = "close"; +})(PoolDayData_OrderBy || (PoolDayData_OrderBy = {})); +var PoolHourData_OrderBy; +(function (PoolHourData_OrderBy) { + PoolHourData_OrderBy["Id"] = "id"; + PoolHourData_OrderBy["PeriodStartUnix"] = "periodStartUnix"; + PoolHourData_OrderBy["Pool"] = "pool"; + PoolHourData_OrderBy["Liquidity"] = "liquidity"; + PoolHourData_OrderBy["SqrtPrice"] = "sqrtPrice"; + PoolHourData_OrderBy["Token0Price"] = "token0Price"; + PoolHourData_OrderBy["Token1Price"] = "token1Price"; + PoolHourData_OrderBy["Tick"] = "tick"; + PoolHourData_OrderBy["FeeGrowthGlobal0X128"] = "feeGrowthGlobal0X128"; + PoolHourData_OrderBy["FeeGrowthGlobal1X128"] = "feeGrowthGlobal1X128"; + PoolHourData_OrderBy["TvlUsd"] = "tvlUSD"; + PoolHourData_OrderBy["VolumeToken0"] = "volumeToken0"; + PoolHourData_OrderBy["VolumeToken1"] = "volumeToken1"; + PoolHourData_OrderBy["VolumeUsd"] = "volumeUSD"; + PoolHourData_OrderBy["FeesUsd"] = "feesUSD"; + PoolHourData_OrderBy["TxCount"] = "txCount"; + PoolHourData_OrderBy["Open"] = "open"; + PoolHourData_OrderBy["High"] = "high"; + PoolHourData_OrderBy["Low"] = "low"; + PoolHourData_OrderBy["Close"] = "close"; +})(PoolHourData_OrderBy || (PoolHourData_OrderBy = {})); +var Pool_OrderBy; +(function (Pool_OrderBy) { + Pool_OrderBy["Id"] = "id"; + Pool_OrderBy["CreatedAtTimestamp"] = "createdAtTimestamp"; + Pool_OrderBy["CreatedAtBlockNumber"] = "createdAtBlockNumber"; + Pool_OrderBy["Token0"] = "token0"; + Pool_OrderBy["Token1"] = "token1"; + Pool_OrderBy["FeeTier"] = "feeTier"; + Pool_OrderBy["Liquidity"] = "liquidity"; + Pool_OrderBy["SqrtPrice"] = "sqrtPrice"; + Pool_OrderBy["FeeGrowthGlobal0X128"] = "feeGrowthGlobal0X128"; + Pool_OrderBy["FeeGrowthGlobal1X128"] = "feeGrowthGlobal1X128"; + Pool_OrderBy["Token0Price"] = "token0Price"; + Pool_OrderBy["Token1Price"] = "token1Price"; + Pool_OrderBy["Tick"] = "tick"; + Pool_OrderBy["ObservationIndex"] = "observationIndex"; + Pool_OrderBy["VolumeToken0"] = "volumeToken0"; + Pool_OrderBy["VolumeToken1"] = "volumeToken1"; + Pool_OrderBy["VolumeUsd"] = "volumeUSD"; + Pool_OrderBy["UntrackedVolumeUsd"] = "untrackedVolumeUSD"; + Pool_OrderBy["FeesUsd"] = "feesUSD"; + Pool_OrderBy["TxCount"] = "txCount"; + Pool_OrderBy["CollectedFeesToken0"] = "collectedFeesToken0"; + Pool_OrderBy["CollectedFeesToken1"] = "collectedFeesToken1"; + Pool_OrderBy["CollectedFeesUsd"] = "collectedFeesUSD"; + Pool_OrderBy["TotalValueLockedToken0"] = "totalValueLockedToken0"; + Pool_OrderBy["TotalValueLockedToken1"] = "totalValueLockedToken1"; + Pool_OrderBy["TotalValueLockedEth"] = "totalValueLockedETH"; + Pool_OrderBy["TotalValueLockedUsd"] = "totalValueLockedUSD"; + Pool_OrderBy["TotalValueLockedUsdUntracked"] = "totalValueLockedUSDUntracked"; + Pool_OrderBy["LiquidityProviderCount"] = "liquidityProviderCount"; + Pool_OrderBy["PoolHourData"] = "poolHourData"; + Pool_OrderBy["PoolDayData"] = "poolDayData"; + Pool_OrderBy["Mints"] = "mints"; + Pool_OrderBy["Burns"] = "burns"; + Pool_OrderBy["Swaps"] = "swaps"; + Pool_OrderBy["Collects"] = "collects"; + Pool_OrderBy["Ticks"] = "ticks"; +})(Pool_OrderBy || (Pool_OrderBy = {})); +var PositionSnapshot_OrderBy; +(function (PositionSnapshot_OrderBy) { + PositionSnapshot_OrderBy["Id"] = "id"; + PositionSnapshot_OrderBy["Owner"] = "owner"; + PositionSnapshot_OrderBy["Pool"] = "pool"; + PositionSnapshot_OrderBy["Position"] = "position"; + PositionSnapshot_OrderBy["BlockNumber"] = "blockNumber"; + PositionSnapshot_OrderBy["Timestamp"] = "timestamp"; + PositionSnapshot_OrderBy["Liquidity"] = "liquidity"; + PositionSnapshot_OrderBy["DepositedToken0"] = "depositedToken0"; + PositionSnapshot_OrderBy["DepositedToken1"] = "depositedToken1"; + PositionSnapshot_OrderBy["WithdrawnToken0"] = "withdrawnToken0"; + PositionSnapshot_OrderBy["WithdrawnToken1"] = "withdrawnToken1"; + PositionSnapshot_OrderBy["CollectedFeesToken0"] = "collectedFeesToken0"; + PositionSnapshot_OrderBy["CollectedFeesToken1"] = "collectedFeesToken1"; + PositionSnapshot_OrderBy["Transaction"] = "transaction"; + PositionSnapshot_OrderBy["FeeGrowthInside0LastX128"] = "feeGrowthInside0LastX128"; + PositionSnapshot_OrderBy["FeeGrowthInside1LastX128"] = "feeGrowthInside1LastX128"; +})(PositionSnapshot_OrderBy || (PositionSnapshot_OrderBy = {})); +var Position_OrderBy; +(function (Position_OrderBy) { + Position_OrderBy["Id"] = "id"; + Position_OrderBy["Owner"] = "owner"; + Position_OrderBy["Pool"] = "pool"; + Position_OrderBy["Token0"] = "token0"; + Position_OrderBy["Token1"] = "token1"; + Position_OrderBy["TickLower"] = "tickLower"; + Position_OrderBy["TickUpper"] = "tickUpper"; + Position_OrderBy["Liquidity"] = "liquidity"; + Position_OrderBy["DepositedToken0"] = "depositedToken0"; + Position_OrderBy["DepositedToken1"] = "depositedToken1"; + Position_OrderBy["WithdrawnToken0"] = "withdrawnToken0"; + Position_OrderBy["WithdrawnToken1"] = "withdrawnToken1"; + Position_OrderBy["CollectedFeesToken0"] = "collectedFeesToken0"; + Position_OrderBy["CollectedFeesToken1"] = "collectedFeesToken1"; + Position_OrderBy["Transaction"] = "transaction"; + Position_OrderBy["FeeGrowthInside0LastX128"] = "feeGrowthInside0LastX128"; + Position_OrderBy["FeeGrowthInside1LastX128"] = "feeGrowthInside1LastX128"; +})(Position_OrderBy || (Position_OrderBy = {})); +var Swap_OrderBy; +(function (Swap_OrderBy) { + Swap_OrderBy["Id"] = "id"; + Swap_OrderBy["Transaction"] = "transaction"; + Swap_OrderBy["Timestamp"] = "timestamp"; + Swap_OrderBy["Pool"] = "pool"; + Swap_OrderBy["Token0"] = "token0"; + Swap_OrderBy["Token1"] = "token1"; + Swap_OrderBy["Sender"] = "sender"; + Swap_OrderBy["Recipient"] = "recipient"; + Swap_OrderBy["Origin"] = "origin"; + Swap_OrderBy["Amount0"] = "amount0"; + Swap_OrderBy["Amount1"] = "amount1"; + Swap_OrderBy["AmountUsd"] = "amountUSD"; + Swap_OrderBy["SqrtPriceX96"] = "sqrtPriceX96"; + Swap_OrderBy["Tick"] = "tick"; + Swap_OrderBy["LogIndex"] = "logIndex"; +})(Swap_OrderBy || (Swap_OrderBy = {})); +var TickDayData_OrderBy; +(function (TickDayData_OrderBy) { + TickDayData_OrderBy["Id"] = "id"; + TickDayData_OrderBy["Date"] = "date"; + TickDayData_OrderBy["Pool"] = "pool"; + TickDayData_OrderBy["Tick"] = "tick"; + TickDayData_OrderBy["LiquidityGross"] = "liquidityGross"; + TickDayData_OrderBy["LiquidityNet"] = "liquidityNet"; + TickDayData_OrderBy["VolumeToken0"] = "volumeToken0"; + TickDayData_OrderBy["VolumeToken1"] = "volumeToken1"; + TickDayData_OrderBy["VolumeUsd"] = "volumeUSD"; + TickDayData_OrderBy["FeesUsd"] = "feesUSD"; + TickDayData_OrderBy["FeeGrowthOutside0X128"] = "feeGrowthOutside0X128"; + TickDayData_OrderBy["FeeGrowthOutside1X128"] = "feeGrowthOutside1X128"; +})(TickDayData_OrderBy || (TickDayData_OrderBy = {})); +var TickHourData_OrderBy; +(function (TickHourData_OrderBy) { + TickHourData_OrderBy["Id"] = "id"; + TickHourData_OrderBy["PeriodStartUnix"] = "periodStartUnix"; + TickHourData_OrderBy["Pool"] = "pool"; + TickHourData_OrderBy["Tick"] = "tick"; + TickHourData_OrderBy["LiquidityGross"] = "liquidityGross"; + TickHourData_OrderBy["LiquidityNet"] = "liquidityNet"; + TickHourData_OrderBy["VolumeToken0"] = "volumeToken0"; + TickHourData_OrderBy["VolumeToken1"] = "volumeToken1"; + TickHourData_OrderBy["VolumeUsd"] = "volumeUSD"; + TickHourData_OrderBy["FeesUsd"] = "feesUSD"; +})(TickHourData_OrderBy || (TickHourData_OrderBy = {})); +var Tick_OrderBy; +(function (Tick_OrderBy) { + Tick_OrderBy["Id"] = "id"; + Tick_OrderBy["PoolAddress"] = "poolAddress"; + Tick_OrderBy["TickIdx"] = "tickIdx"; + Tick_OrderBy["Pool"] = "pool"; + Tick_OrderBy["LiquidityGross"] = "liquidityGross"; + Tick_OrderBy["LiquidityNet"] = "liquidityNet"; + Tick_OrderBy["Price0"] = "price0"; + Tick_OrderBy["Price1"] = "price1"; + Tick_OrderBy["VolumeToken0"] = "volumeToken0"; + Tick_OrderBy["VolumeToken1"] = "volumeToken1"; + Tick_OrderBy["VolumeUsd"] = "volumeUSD"; + Tick_OrderBy["UntrackedVolumeUsd"] = "untrackedVolumeUSD"; + Tick_OrderBy["FeesUsd"] = "feesUSD"; + Tick_OrderBy["CollectedFeesToken0"] = "collectedFeesToken0"; + Tick_OrderBy["CollectedFeesToken1"] = "collectedFeesToken1"; + Tick_OrderBy["CollectedFeesUsd"] = "collectedFeesUSD"; + Tick_OrderBy["CreatedAtTimestamp"] = "createdAtTimestamp"; + Tick_OrderBy["CreatedAtBlockNumber"] = "createdAtBlockNumber"; + Tick_OrderBy["LiquidityProviderCount"] = "liquidityProviderCount"; + Tick_OrderBy["FeeGrowthOutside0X128"] = "feeGrowthOutside0X128"; + Tick_OrderBy["FeeGrowthOutside1X128"] = "feeGrowthOutside1X128"; +})(Tick_OrderBy || (Tick_OrderBy = {})); +var TokenDayData_OrderBy; +(function (TokenDayData_OrderBy) { + TokenDayData_OrderBy["Id"] = "id"; + TokenDayData_OrderBy["Date"] = "date"; + TokenDayData_OrderBy["Token"] = "token"; + TokenDayData_OrderBy["Volume"] = "volume"; + TokenDayData_OrderBy["VolumeUsd"] = "volumeUSD"; + TokenDayData_OrderBy["UntrackedVolumeUsd"] = "untrackedVolumeUSD"; + TokenDayData_OrderBy["TotalValueLocked"] = "totalValueLocked"; + TokenDayData_OrderBy["TotalValueLockedUsd"] = "totalValueLockedUSD"; + TokenDayData_OrderBy["PriceUsd"] = "priceUSD"; + TokenDayData_OrderBy["FeesUsd"] = "feesUSD"; + TokenDayData_OrderBy["Open"] = "open"; + TokenDayData_OrderBy["High"] = "high"; + TokenDayData_OrderBy["Low"] = "low"; + TokenDayData_OrderBy["Close"] = "close"; +})(TokenDayData_OrderBy || (TokenDayData_OrderBy = {})); +var TokenHourData_OrderBy; +(function (TokenHourData_OrderBy) { + TokenHourData_OrderBy["Id"] = "id"; + TokenHourData_OrderBy["PeriodStartUnix"] = "periodStartUnix"; + TokenHourData_OrderBy["Token"] = "token"; + TokenHourData_OrderBy["Volume"] = "volume"; + TokenHourData_OrderBy["VolumeUsd"] = "volumeUSD"; + TokenHourData_OrderBy["UntrackedVolumeUsd"] = "untrackedVolumeUSD"; + TokenHourData_OrderBy["TotalValueLocked"] = "totalValueLocked"; + TokenHourData_OrderBy["TotalValueLockedUsd"] = "totalValueLockedUSD"; + TokenHourData_OrderBy["PriceUsd"] = "priceUSD"; + TokenHourData_OrderBy["FeesUsd"] = "feesUSD"; + TokenHourData_OrderBy["Open"] = "open"; + TokenHourData_OrderBy["High"] = "high"; + TokenHourData_OrderBy["Low"] = "low"; + TokenHourData_OrderBy["Close"] = "close"; +})(TokenHourData_OrderBy || (TokenHourData_OrderBy = {})); +var Token_OrderBy; +(function (Token_OrderBy) { + Token_OrderBy["Id"] = "id"; + Token_OrderBy["Symbol"] = "symbol"; + Token_OrderBy["Name"] = "name"; + Token_OrderBy["Decimals"] = "decimals"; + Token_OrderBy["TotalSupply"] = "totalSupply"; + Token_OrderBy["Volume"] = "volume"; + Token_OrderBy["VolumeUsd"] = "volumeUSD"; + Token_OrderBy["UntrackedVolumeUsd"] = "untrackedVolumeUSD"; + Token_OrderBy["FeesUsd"] = "feesUSD"; + Token_OrderBy["TxCount"] = "txCount"; + Token_OrderBy["PoolCount"] = "poolCount"; + Token_OrderBy["TotalValueLocked"] = "totalValueLocked"; + Token_OrderBy["TotalValueLockedUsd"] = "totalValueLockedUSD"; + Token_OrderBy["TotalValueLockedUsdUntracked"] = "totalValueLockedUSDUntracked"; + Token_OrderBy["DerivedEth"] = "derivedETH"; + Token_OrderBy["WhitelistPools"] = "whitelistPools"; + Token_OrderBy["TokenDayData"] = "tokenDayData"; +})(Token_OrderBy || (Token_OrderBy = {})); +var Transaction_OrderBy; +(function (Transaction_OrderBy) { + Transaction_OrderBy["Id"] = "id"; + Transaction_OrderBy["BlockNumber"] = "blockNumber"; + Transaction_OrderBy["Timestamp"] = "timestamp"; + Transaction_OrderBy["GasUsed"] = "gasUsed"; + Transaction_OrderBy["GasPrice"] = "gasPrice"; + Transaction_OrderBy["Mints"] = "mints"; + Transaction_OrderBy["Burns"] = "burns"; + Transaction_OrderBy["Swaps"] = "swaps"; + Transaction_OrderBy["Flashed"] = "flashed"; + Transaction_OrderBy["Collects"] = "collects"; +})(Transaction_OrderBy || (Transaction_OrderBy = {})); +var UniswapDayData_OrderBy; +(function (UniswapDayData_OrderBy) { + UniswapDayData_OrderBy["Id"] = "id"; + UniswapDayData_OrderBy["Date"] = "date"; + UniswapDayData_OrderBy["VolumeEth"] = "volumeETH"; + UniswapDayData_OrderBy["VolumeUsd"] = "volumeUSD"; + UniswapDayData_OrderBy["VolumeUsdUntracked"] = "volumeUSDUntracked"; + UniswapDayData_OrderBy["FeesUsd"] = "feesUSD"; + UniswapDayData_OrderBy["TxCount"] = "txCount"; + UniswapDayData_OrderBy["TvlUsd"] = "tvlUSD"; +})(UniswapDayData_OrderBy || (UniswapDayData_OrderBy = {})); +var _SubgraphErrorPolicy_; +(function (_SubgraphErrorPolicy_) { + /** Data will be returned even if the subgraph has indexing errors */ + _SubgraphErrorPolicy_["Allow"] = "allow"; + /** If the subgraph has indexing errors, data will be omitted. The default. */ + _SubgraphErrorPolicy_["Deny"] = "deny"; +})(_SubgraphErrorPolicy_ || (_SubgraphErrorPolicy_ = {})); +var AllV3TicksDocument = "\n query allV3Ticks($poolAddress: String!, $skip: Int!) {\n ticks(\n first: 1000\n skip: $skip\n where: {poolAddress: $poolAddress}\n orderBy: tickIdx\n ) {\n tick: tickIdx\n liquidityNet\n price0\n price1\n }\n}\n "; +var FeeTierDistributionDocument = "\n query feeTierDistribution($token0: String!, $token1: String!) {\n _meta {\n block {\n number\n }\n }\n asToken0: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: {token0: $token0, token1: $token1}\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n asToken1: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: {token0: $token1, token1: $token0}\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n}\n "; +var injectedRtkApi = api$1.injectEndpoints({ + endpoints: function (build) { return ({ + allV3Ticks: build.query({ + query: function (variables) { return ({ document: AllV3TicksDocument, variables: variables }); } + }), + feeTierDistribution: build.query({ + query: function (variables) { return ({ document: FeeTierDistributionDocument, variables: variables }); } + }), + }); }, +}); +injectedRtkApi.useAllV3TicksQuery; injectedRtkApi.useLazyAllV3TicksQuery; injectedRtkApi.useFeeTierDistributionQuery; injectedRtkApi.useLazyFeeTierDistributionQuery; -var SwapRouterVersion -;(function (SwapRouterVersion) { - SwapRouterVersion[(SwapRouterVersion['V2'] = 0)] = 'V2' - SwapRouterVersion[(SwapRouterVersion['V3'] = 1)] = 'V3' - SwapRouterVersion[(SwapRouterVersion['V2V3'] = 2)] = 'V2V3' -})(SwapRouterVersion || (SwapRouterVersion = {})) -/** - * Returns the swap router that will result in the least amount of txs (less gas) for a given swap. - * Heuristic: - * - if trade contains a single v2-only trade & V2 SwapRouter is approved: use V2 SwapRouter - * - if trade contains only v3 & V3 SwapRouter is approved: use V3 SwapRouter - * - else: approve and use V2+V3 SwapRouter - */ -function getTxOptimizedSwapRouter(_a) { - var onlyV2Routes = _a.onlyV2Routes, - onlyV3Routes = _a.onlyV3Routes, - tradeHasSplits = _a.tradeHasSplits, - approvalStates = _a.approvalStates - if ([approvalStates.v2, approvalStates.v3, approvalStates.v2V3].includes(ApprovalState.PENDING)) return undefined - if (approvalStates.v2V3 === ApprovalState.APPROVED) return SwapRouterVersion.V2V3 - if (approvalStates.v2 === ApprovalState.APPROVED && onlyV2Routes && !tradeHasSplits) return SwapRouterVersion.V2 - if (approvalStates.v3 === ApprovalState.APPROVED && onlyV3Routes) return SwapRouterVersion.V3 - return SwapRouterVersion.V2V3 -} +// tag that should be applied to queries that need to be invalidated when the chain changes +var CHAIN_TAG = 'Chain'; +// enhanced api to provide/invalidate tags +var api = injectedRtkApi.enhanceEndpoints({ + addTagTypes: [CHAIN_TAG], + endpoints: { + allV3Ticks: { + providesTags: [CHAIN_TAG], + }, + feeTierDistribution: { + providesTags: [CHAIN_TAG], + }, + }, +}); +api.useAllV3TicksQuery; api.useFeeTierDistributionQuery; -/** Returns approval state for all known swap routers */ -function useSwapApprovalStates(trade, allowedSlippage, useIsPendingApproval) { - var chainId = useActiveWeb3React().chainId - var amountToApprove = React.useMemo( - function () { - return trade && trade.inputAmount.currency.isToken ? trade.maximumAmountIn(allowedSlippage) : undefined - }, - [trade, allowedSlippage] - ) - var v2RouterAddress = chainId ? V2_ROUTER_ADDRESS[chainId] : undefined - var v3RouterAddress = chainId ? V3_ROUTER_ADDRESS[chainId] : undefined - var swapRouterAddress = chainId ? SWAP_ROUTER_ADDRESSES[chainId] : undefined - var v2 = useApprovalStateForSpender(amountToApprove, v2RouterAddress, useIsPendingApproval) - var v3 = useApprovalStateForSpender(amountToApprove, v3RouterAddress, useIsPendingApproval) - var v2V3 = useApprovalStateForSpender(amountToApprove, swapRouterAddress, useIsPendingApproval) - return React.useMemo( - function () { - return { v2, v3, v2V3 } - }, - [v2, v2V3, v3] - ) -} -function useSwapRouterAddress(trade) { - var chainId = useActiveWeb3React().chainId - return React.useMemo( - function () { - return chainId - ? trade instanceof v2Sdk.Trade - ? V2_ROUTER_ADDRESS[chainId] - : trade instanceof v3Sdk.Trade - ? V3_ROUTER_ADDRESS[chainId] - : SWAP_ROUTER_ADDRESSES[chainId] - : undefined - }, - [chainId, trade] - ) -} -// wraps useApproveCallback in the context of a swap -function useSwapApproval(trade, allowedSlippage, useIsPendingApproval) { - var amountToApprove = React.useMemo( - function () { - return trade && trade.inputAmount.currency.isToken ? trade.maximumAmountIn(allowedSlippage) : undefined - }, - [trade, allowedSlippage] - ) - var spender = useSwapRouterAddress(trade) - var approval = useApproval(amountToApprove, spender, useIsPendingApproval) - if (trade instanceof v2Sdk.Trade || trade instanceof v3Sdk.Trade) { - var approvalState = approval[0] - invariant__default['default'](approvalState === ApprovalState.APPROVED, 'Trying to approve legacy router') - } - return approval -} -function useSwapApprovalOptimizedTrade(trade, allowedSlippage, useIsPendingApproval) { - var _a - var onlyV2Routes = - trade === null || trade === void 0 - ? void 0 - : trade.routes.every(function (route) { - return route.protocol === routerSdk.Protocol.V2 - }) - var onlyV3Routes = - trade === null || trade === void 0 - ? void 0 - : trade.routes.every(function (route) { - return route.protocol === routerSdk.Protocol.V3 - }) - var tradeHasSplits = - ((_a = trade === null || trade === void 0 ? void 0 : trade.routes.length) !== null && _a !== void 0 ? _a : 0) > 1 - var approvalStates = useSwapApprovalStates(trade, allowedSlippage, useIsPendingApproval) - var optimizedSwapRouter = React.useMemo( - function () { - return getTxOptimizedSwapRouter({ - onlyV2Routes, - onlyV3Routes, - tradeHasSplits, - approvalStates, - }) - }, - [approvalStates, tradeHasSplits, onlyV2Routes, onlyV3Routes] - ) - return React.useMemo( - function () { - if (!trade) return undefined - try { - switch (optimizedSwapRouter) { - case SwapRouterVersion.V2V3: - return trade - case SwapRouterVersion.V2: - var pairs = trade.swaps[0].route.pools.filter(function (pool) { - return pool instanceof v2Sdk.Pair - }) - var v2Route = new v2Sdk.Route(pairs, trade.inputAmount.currency, trade.outputAmount.currency) - return new v2Sdk.Trade(v2Route, trade.inputAmount, trade.tradeType) - case SwapRouterVersion.V3: - return v3Sdk.Trade.createUncheckedTradeWithMultipleRoutes({ - routes: trade.swaps.map(function (_a) { - var route = _a.route, - inputAmount = _a.inputAmount, - outputAmount = _a.outputAmount - return { - route: new v3Sdk.Route( - route.pools.filter(function (p) { - return p instanceof v3Sdk.Pool - }), - inputAmount.currency, - outputAmount.currency - ), - inputAmount, - outputAmount, - } - }), - tradeType: trade.tradeType, - }) - default: - return undefined - } - } catch (e) { - // TODO(#2989): remove try-catch - console.debug(e) - return undefined - } - }, - [trade, optimizedSwapRouter] - ) +/** + * Returns the input chain ID if chain is supported. If not, return undefined + * @param chainId a chain ID, which will be returned if it is a supported chain ID + */ +function supportedChainId(chainId) { + if (chainId in SupportedChainId) { + return chainId; + } + return undefined; } -function useGetAndTrackApproval(getApproval) { - var addTransaction = useTransactionAdder() - return React.useCallback( - function () { - return getApproval().then(function (pending) { - if (pending) { - var response = pending.response, - tokenAddress = pending.tokenAddress, - spender = pending.spenderAddress - addTransaction(response, { type: TransactionType.APPROVAL, tokenAddress, spender }) - } - }) - }, - [addTransaction, getApproval] - ) -} -function useApprovalOptimizedTrade(trade, allowedSlippage) { - return useSwapApprovalOptimizedTrade(trade, allowedSlippage, useHasPendingApproval) -} -function useApproveCallbackFromTrade(trade, allowedSlippage) { - var _a = __read(useSwapApproval(trade, allowedSlippage, useHasPendingApproval), 2), - approval = _a[0], - getApproval = _a[1] - return [approval, useGetAndTrackApproval(getApproval)] +function useQueryCacheInvalidator() { + var dispatch = useAppDispatch(); + // subscribe to `chainId` changes in the redux store rather than Web3 + // this will ensure that when `invalidateTags` is called, the latest + // `chainId` is available in redux to build the subgraph url + var chainId = useAppSelector(function (state) { return state.application.chainId; }); + React.useEffect(function () { + dispatch(api.util.invalidateTags([CHAIN_TAG])); + }, [chainId, dispatch]); +} +function Updater$5() { + var _a = useActiveWeb3React(), chainId = _a.chainId, library = _a.library; + var dispatch = useAppDispatch(); + var windowVisible = useIsWindowVisible(); + var _b = __read(React.useState(chainId), 2), activeChainId = _b[0], setActiveChainId = _b[1]; + useQueryCacheInvalidator(); + React.useEffect(function () { + if (library && chainId && windowVisible) { + setActiveChainId(chainId); + } + }, [dispatch, chainId, library, windowVisible]); + var debouncedChainId = useDebounce(activeChainId, 100); + React.useEffect(function () { + var _a; + var chainId = debouncedChainId ? (_a = supportedChainId(debouncedChainId)) !== null && _a !== void 0 ? _a : null : null; + dispatch(updateChainId({ chainId: chainId })); + }, [dispatch, debouncedChainId]); + return null; } -function useIsArgentWallet() { - var _a, _b - var account = useActiveWeb3React().account - var argentWalletDetector = useArgentWalletDetectorContract() - var inputs = React.useMemo( - function () { - return [account !== null && account !== void 0 ? account : undefined] - }, - [account] - ) - var call = useSingleCallResult(argentWalletDetector, 'isArgentWallet', inputs, reduxMulticall.NEVER_RELOAD) - return (_b = - (_a = call === null || call === void 0 ? void 0 : call.result) === null || _a === void 0 ? void 0 : _a[0]) !== - null && _b !== void 0 - ? _b - : false +function Updater$4() { + var _a = useActiveWeb3React(), chainId = _a.chainId, library = _a.library; + var dispatch = useAppDispatch(); + var isWindowVisible = useIsWindowVisible(); + // get all loaded lists, and the active urls + var lists = useAllLists(); + var activeListUrls = useActiveListUrls(); + var fetchList = useFetchListCallback(); + var fetchAllListsCallback = React.useCallback(function () { + if (!isWindowVisible) + return; + Object.keys(lists).forEach(function (url) { + return fetchList(url).catch(function (error) { return console.debug('interval list fetching error', error); }); + }); + }, [fetchList, isWindowVisible, lists]); + React.useEffect(function () { + if (chainId && [SupportedChainId.OPTIMISM, SupportedChainId.OPTIMISTIC_KOVAN].includes(chainId)) { + dispatch(enableList(OPTIMISM_LIST)); + } + if (chainId && [SupportedChainId.ARBITRUM_ONE, SupportedChainId.ARBITRUM_RINKEBY].includes(chainId)) { + dispatch(enableList(ARBITRUM_LIST)); + } + }, [chainId, dispatch]); + // fetch all lists every 10 minutes, but only after we initialize library + useInterval(fetchAllListsCallback, library ? 1000 * 60 * 10 : null); + // whenever a list is not loaded and not loading, try again to load it + React.useEffect(function () { + Object.keys(lists).forEach(function (listUrl) { + var list = lists[listUrl]; + if (!list.current && !list.loadingRequestId && !list.error) { + fetchList(listUrl).catch(function (error) { return console.debug('list added fetching error', error); }); + } + }); + }, [dispatch, fetchList, library, lists]); + // if any lists from unsupported lists are loaded, check them too (in case new updates since last visit) + React.useEffect(function () { + UNSUPPORTED_LIST_URLS.forEach(function (listUrl) { + var list = lists[listUrl]; + if (!list || (!list.current && !list.loadingRequestId && !list.error)) { + fetchList(listUrl).catch(function (error) { return console.debug('list added fetching error', error); }); + } + }); + }, [dispatch, fetchList, library, lists]); + // automatically update lists if versions are minor/patch + React.useEffect(function () { + Object.keys(lists).forEach(function (listUrl) { + var list = lists[listUrl]; + if (list.current && list.pendingUpdate) { + var bump = tokenLists.getVersionUpgrade(list.current.version, list.pendingUpdate.version); + switch (bump) { + case tokenLists.VersionUpgrade.NONE: + throw new Error('unexpected no version bump'); + case tokenLists.VersionUpgrade.PATCH: + case tokenLists.VersionUpgrade.MINOR: + var min = tokenLists.minVersionBump(list.current.tokens, list.pendingUpdate.tokens); + // automatically update minor/patch as long as bump matches the min update + if (bump >= min) { + dispatch(acceptListUpdate(listUrl)); + } + else { + console.error("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"); + } + break; + // update any active or inactive lists + case tokenLists.VersionUpgrade.MAJOR: + dispatch(acceptListUpdate(listUrl)); + } + } + }); + }, [dispatch, lists, activeListUrls]); + return null; } -// combines the block timestamp with the user setting to give the deadline that should be used for any submitted transaction -function useTransactionDeadline() { - var chainId = useActiveWeb3React().chainId - var ttl = useAppSelector(function (state) { - return state.user.userDeadline - }) - var blockTimestamp = useCurrentBlockTimestamp() - return React.useMemo( - function () { - if (blockTimestamp && chainId && L2_CHAIN_IDS.includes(chainId)) return blockTimestamp.add(L2_DEADLINE_FROM_NOW) - if (blockTimestamp && ttl) return blockTimestamp.add(ttl) - return undefined - }, - [blockTimestamp, chainId, ttl] - ) +function Updater$3() { + var dispatch = useAppDispatch(); + var state = useAppSelector(function (state) { return state.logs; }); + var _a = useActiveWeb3React(), chainId = _a.chainId, library = _a.library; + var blockNumber = useBlockNumber(); + var filtersNeedFetch = React.useMemo(function () { + if (!chainId || typeof blockNumber !== 'number') + return []; + var active = state[chainId]; + if (!active) + return []; + return Object.keys(active) + .filter(function (key) { + var _a = active[key], fetchingBlockNumber = _a.fetchingBlockNumber, results = _a.results, listeners = _a.listeners; + if (listeners === 0) + return false; + if (typeof fetchingBlockNumber === 'number' && fetchingBlockNumber >= blockNumber) + return false; + if (results && typeof results.blockNumber === 'number' && results.blockNumber >= blockNumber) + return false; + return true; + }) + .map(function (key) { return keyToFilter(key); }); + }, [blockNumber, chainId, state]); + React.useEffect(function () { + if (!library || !chainId || typeof blockNumber !== 'number' || filtersNeedFetch.length === 0) + return; + dispatch(fetchingLogs({ chainId: chainId, filters: filtersNeedFetch, blockNumber: blockNumber })); + filtersNeedFetch.forEach(function (filter) { + library + .getLogs(__assign(__assign({}, filter), { fromBlock: 0, toBlock: blockNumber })) + .then(function (logs) { + dispatch(fetchedLogs({ + chainId: chainId, + filter: filter, + results: { logs: logs, blockNumber: blockNumber }, + })); + }) + .catch(function (error) { + console.error('Failed to get logs', filter, error); + dispatch(fetchedLogsError({ + chainId: chainId, + filter: filter, + blockNumber: blockNumber, + })); + }); + }); + }, [blockNumber, chainId, dispatch, filtersNeedFetch, library]); + return null; } -var _a, _b, _c, _d, _e -var PermitType -;(function (PermitType) { - PermitType[(PermitType['AMOUNT'] = 1)] = 'AMOUNT' - PermitType[(PermitType['ALLOWED'] = 2)] = 'ALLOWED' -})(PermitType || (PermitType = {})) -// 20 minutes to submit after signing -var PERMIT_VALIDITY_BUFFER = 20 * 60 -// todo: read this information from extensions on token lists or elsewhere (permit registry?) -var PERMITTABLE_TOKENS = { - 1: - ((_a = {}), - (_a[USDC.address] = { type: PermitType.AMOUNT, name: 'USD Coin', version: '2' }), - (_a[DAI.address] = { type: PermitType.ALLOWED, name: 'Dai Stablecoin', version: '1' }), - (_a[UNI[1].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }), - _a), - 4: - ((_b = { - '0xc7AD46e0b8a400Bb3C915120d284AafbA8fc4735': { type: PermitType.ALLOWED, name: 'Dai Stablecoin', version: '1' }, - }), - (_b[UNI[4].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }), - _b), - 3: - ((_c = {}), - (_c[UNI[3].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }), - (_c['0x07865c6E87B9F70255377e024ace6630C1Eaa37F'] = { type: PermitType.AMOUNT, name: 'USD Coin', version: '2' }), - _c), - 5: ((_d = {}), (_d[UNI[5].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }), _d), - 42: ((_e = {}), (_e[UNI[42].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }), _e), -} -var UseERC20PermitState -;(function (UseERC20PermitState) { - // returned for any reason, e.g. it is an argent wallet, or the currency does not support it - UseERC20PermitState[(UseERC20PermitState['NOT_APPLICABLE'] = 0)] = 'NOT_APPLICABLE' - UseERC20PermitState[(UseERC20PermitState['LOADING'] = 1)] = 'LOADING' - UseERC20PermitState[(UseERC20PermitState['NOT_SIGNED'] = 2)] = 'NOT_SIGNED' - UseERC20PermitState[(UseERC20PermitState['SIGNED'] = 3)] = 'SIGNED' -})(UseERC20PermitState || (UseERC20PermitState = {})) -var EIP712_DOMAIN_TYPE = [ - { name: 'name', type: 'string' }, - { name: 'version', type: 'string' }, - { name: 'chainId', type: 'uint256' }, - { name: 'verifyingContract', type: 'address' }, -] -var EIP712_DOMAIN_TYPE_NO_VERSION = [ - { name: 'name', type: 'string' }, - { name: 'chainId', type: 'uint256' }, - { name: 'verifyingContract', type: 'address' }, -] -var EIP2612_TYPE = [ - { name: 'owner', type: 'address' }, - { name: 'spender', type: 'address' }, - { name: 'value', type: 'uint256' }, - { name: 'nonce', type: 'uint256' }, - { name: 'deadline', type: 'uint256' }, -] -var PERMIT_ALLOWED_TYPE = [ - { name: 'holder', type: 'address' }, - { name: 'spender', type: 'address' }, - { name: 'nonce', type: 'uint256' }, - { name: 'expiry', type: 'uint256' }, - { name: 'allowed', type: 'bool' }, -] -function useERC20Permit(currencyAmount, spender, overridePermitInfo) { - var _a, _b - var _c = useActiveWeb3React(), - account = _c.account, - chainId = _c.chainId, - library = _c.library - var transactionDeadline = useTransactionDeadline() - var tokenAddress = ( - (_a = currencyAmount === null || currencyAmount === void 0 ? void 0 : currencyAmount.currency) === null || - _a === void 0 - ? void 0 - : _a.isToken - ) - ? currencyAmount.currency.address - : undefined - var eip2612Contract = useEIP2612Contract(tokenAddress) - var isArgentWallet = useIsArgentWallet() - var nonceInputs = React.useMemo( - function () { - return [account !== null && account !== void 0 ? account : undefined] - }, - [account] - ) - var tokenNonceState = useSingleCallResult(eip2612Contract, 'nonces', nonceInputs) - var permitInfo = - overridePermitInfo !== null && overridePermitInfo !== void 0 - ? overridePermitInfo - : chainId && tokenAddress - ? (_b = PERMITTABLE_TOKENS[chainId]) === null || _b === void 0 - ? void 0 - : _b[tokenAddress] - : undefined - var _d = __read(React.useState(null), 2), - signatureData = _d[0], - setSignatureData = _d[1] - return React.useMemo( - function () { - var _a, _b - if ( - isArgentWallet || - !currencyAmount || - !eip2612Contract || - !account || - !chainId || - !transactionDeadline || - !library || - !tokenNonceState.valid || - !tokenAddress || - !spender || - !permitInfo - ) { - return { - state: UseERC20PermitState.NOT_APPLICABLE, - signatureData: null, - gatherPermitSignature: null, - } - } - var nonceNumber = - (_b = (_a = tokenNonceState.result) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 - ? void 0 - : _b.toNumber() - if (tokenNonceState.loading || typeof nonceNumber !== 'number') { - return { - state: UseERC20PermitState.LOADING, - signatureData: null, - gatherPermitSignature: null, - } - } - var isSignatureDataValid = - signatureData && - signatureData.owner === account && - signatureData.deadline >= transactionDeadline.toNumber() && - signatureData.tokenAddress === tokenAddress && - signatureData.nonce === nonceNumber && - signatureData.spender === spender && - ('allowed' in signatureData || - JSBI__default['default'].equal( - JSBI__default['default'].BigInt(signatureData.amount), - currencyAmount.quotient - )) - return { - state: isSignatureDataValid ? UseERC20PermitState.SIGNED : UseERC20PermitState.NOT_SIGNED, - signatureData: isSignatureDataValid ? signatureData : null, - gatherPermitSignature: function gatherPermitSignature() { - return __awaiter(this, void 0, void 0, function () { - var allowed, signatureDeadline, value, message, domain, data - return __generator(this, function (_a) { - allowed = permitInfo.type === PermitType.ALLOWED - signatureDeadline = transactionDeadline.toNumber() + PERMIT_VALIDITY_BUFFER - value = currencyAmount.quotient.toString() - message = allowed - ? { - holder: account, - spender, - allowed, - nonce: nonceNumber, - expiry: signatureDeadline, - } - : { - owner: account, - spender, - value, - nonce: nonceNumber, - deadline: signatureDeadline, - } - domain = permitInfo.version - ? { - name: permitInfo.name, - version: permitInfo.version, - verifyingContract: tokenAddress, - chainId, - } - : { - name: permitInfo.name, - verifyingContract: tokenAddress, - chainId, - } - data = JSON.stringify({ - types: { - EIP712Domain: permitInfo.version ? EIP712_DOMAIN_TYPE : EIP712_DOMAIN_TYPE_NO_VERSION, - Permit: allowed ? PERMIT_ALLOWED_TYPE : EIP2612_TYPE, - }, - domain, - primaryType: 'Permit', - message, - }) - return [ - 2 /*return*/, - library - .send('eth_signTypedData_v4', [account, data]) - .then(bytes.splitSignature) - .then(function (signature) { - setSignatureData( - __assign( - __assign( - { v: signature.v, r: signature.r, s: signature.s, deadline: signatureDeadline }, - allowed ? { allowed } : { amount: value } - ), - { - nonce: nonceNumber, - chainId, - owner: account, - spender, - tokenAddress, - permitType: permitInfo.type, - } - ) - ) - }), - ] - }) - }) - }, - } - }, - [ - currencyAmount, - eip2612Contract, - account, - chainId, - isArgentWallet, - transactionDeadline, - library, - tokenNonceState.loading, - tokenNonceState.valid, - tokenNonceState.result, - tokenAddress, - spender, - permitInfo, - signatureData, - ] - ) -} -;({ - version: '1', - name: 'Uniswap V2', - type: PermitType.AMOUNT, -}) -function useERC20PermitFromTrade(trade, allowedSlippage) { - var chainId = useActiveWeb3React().chainId - var swapRouterAddress = chainId - ? // v2 router does not support - trade instanceof v2Sdk.Trade - ? undefined - : trade instanceof v3Sdk.Trade - ? V3_ROUTER_ADDRESS[chainId] - : SWAP_ROUTER_ADDRESSES[chainId] - : undefined - var amountToApprove = React.useMemo( - function () { - return trade ? trade.maximumAmountIn(allowedSlippage) : undefined - }, - [trade, allowedSlippage] - ) - return useERC20Permit(amountToApprove, swapRouterAddress, null) +function wait(ms) { + return new Promise(function (resolve) { return setTimeout(resolve, ms); }); +} +function waitRandom(min, max) { + return wait(min + Math.round(Math.random() * Math.max(0, max - min))); +} +/** + * This error is thrown if the function is cancelled before completing + */ +var CancelledError = /** @class */ (function (_super) { + __extends(CancelledError, _super); + function CancelledError() { + var _this = _super.call(this, 'Cancelled') || this; + _this.isCancelledError = true; + return _this; + } + return CancelledError; +}(Error)); +/** + * Throw this error if the function should retry + */ +var RetryableError = /** @class */ (function (_super) { + __extends(RetryableError, _super); + function RetryableError() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.isRetryableError = true; + return _this; + } + return RetryableError; +}(Error)); +/** + * Retries the function that returns the promise until the promise successfully resolves up to n retries + * @param fn function to retry + * @param n how many times to retry + * @param minWait min wait between retries in ms + * @param maxWait max wait between retries in ms + */ +function retry(fn, _a) { + var _this = this; + var n = _a.n, minWait = _a.minWait, maxWait = _a.maxWait; + var completed = false; + var rejectCancelled; + var promise = new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () { + var result, error_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + rejectCancelled = reject; + _a.label = 1; + case 1: + result = void 0; + _a.label = 2; + case 2: + _a.trys.push([2, 4, , 5]); + return [4 /*yield*/, fn()]; + case 3: + result = _a.sent(); + if (!completed) { + resolve(result); + completed = true; + } + return [3 /*break*/, 7]; + case 4: + error_1 = _a.sent(); + if (completed) { + return [3 /*break*/, 7]; + } + if (n <= 0 || !error_1.isRetryableError) { + reject(error_1); + completed = true; + return [3 /*break*/, 7]; + } + n--; + return [3 /*break*/, 5]; + case 5: return [4 /*yield*/, waitRandom(minWait, maxWait)]; + case 6: + _a.sent(); + return [3 /*break*/, 1]; + case 7: return [2 /*return*/]; + } + }); + }); }); + return { + promise: promise, + cancel: function () { + if (completed) + return; + completed = true; + rejectCancelled(new CancelledError()); + }, + }; } -/** - * Returns true if the input currency or output currency cannot be traded in the interface - * @param currencyIn the input currency to check - * @param currencyOut the output currency to check - */ -function useIsSwapUnsupported(currencyIn, currencyOut) { - var unsupportedTokens = useUnsupportedTokens() - return React.useMemo( - function () { - if (!unsupportedTokens) { - return false - } - var currencyInUnsupported = Boolean( - (currencyIn === null || currencyIn === void 0 ? void 0 : currencyIn.isToken) && - unsupportedTokens[currencyIn.address] - ) - var currencyOutUnsupported = Boolean( - (currencyOut === null || currencyOut === void 0 ? void 0 : currencyOut.isToken) && - unsupportedTokens[currencyOut.address] - ) - return currencyInUnsupported || currencyOutUnsupported - }, - [currencyIn, currencyOut, unsupportedTokens] - ) -} +var _a; +function shouldCheck(lastBlockNumber, tx) { + if (tx.receipt) + return false; + if (!tx.lastCheckedBlockNumber) + return true; + var blocksSinceCheck = lastBlockNumber - tx.lastCheckedBlockNumber; + if (blocksSinceCheck < 1) + return false; + var minutesPending = (new Date().getTime() - tx.addedTime) / ms__default["default"](templateObject_1 || (templateObject_1 = __makeTemplateObject(["1m"], ["1m"]))); + if (minutesPending > 60) { + // every 10 blocks if pending longer than an hour + return blocksSinceCheck > 9; + } + else if (minutesPending > 5) { + // every 3 blocks if pending longer than 5 minutes + return blocksSinceCheck > 2; + } + else { + // otherwise every block + return true; + } +} +var RETRY_OPTIONS_BY_CHAIN_ID = (_a = {}, + _a[SupportedChainId.ARBITRUM_ONE] = { n: 10, minWait: 250, maxWait: 1000 }, + _a[SupportedChainId.ARBITRUM_RINKEBY] = { n: 10, minWait: 250, maxWait: 1000 }, + _a[SupportedChainId.OPTIMISTIC_KOVAN] = { n: 10, minWait: 250, maxWait: 1000 }, + _a[SupportedChainId.OPTIMISM] = { n: 10, minWait: 250, maxWait: 1000 }, + _a); +var DEFAULT_RETRY_OPTIONS = { n: 1, minWait: 0, maxWait: 0 }; +function Updater$2(_a) { + var pendingTransactions = _a.pendingTransactions, onCheck = _a.onCheck, onReceipt = _a.onReceipt; + var _b = useActiveWeb3React(), chainId = _b.chainId, library = _b.library; + var lastBlockNumber = useBlockNumber(); + var fastForwardBlockNumber = useFastForwardBlockNumber(); + var getReceipt = React.useCallback(function (hash) { + var _a; + if (!library || !chainId) + throw new Error('No library or chainId'); + var retryOptions = (_a = RETRY_OPTIONS_BY_CHAIN_ID[chainId]) !== null && _a !== void 0 ? _a : DEFAULT_RETRY_OPTIONS; + return retry(function () { + return library.getTransactionReceipt(hash).then(function (receipt) { + if (receipt === null) { + console.debug("Retrying tranasaction receipt for " + hash); + throw new RetryableError(); + } + return receipt; + }); + }, retryOptions); + }, [chainId, library]); + React.useEffect(function () { + if (!chainId || !library || !lastBlockNumber) + return; + var cancels = Object.keys(pendingTransactions) + .filter(function (hash) { return shouldCheck(lastBlockNumber, pendingTransactions[hash]); }) + .map(function (hash) { + var _a = getReceipt(hash), promise = _a.promise, cancel = _a.cancel; + promise + .then(function (receipt) { + if (receipt) { + onReceipt({ chainId: chainId, hash: hash, receipt: receipt }); + } + else { + onCheck({ chainId: chainId, hash: hash, blockNumber: lastBlockNumber }); + } + }) + .catch(function (error) { + if (!error.isCancelledError) { + console.warn("Failed to get transaction receipt for " + hash, error); + } + }); + return cancel; + }); + return function () { + cancels.forEach(function (cancel) { return cancel(); }); + }; + }, [chainId, library, lastBlockNumber, getReceipt, fastForwardBlockNumber, onReceipt, onCheck, pendingTransactions]); + return null; +} +var templateObject_1; -var ERC20_INTERFACE = new abi$6.Interface([ - { - constant: false, - inputs: [ - { name: '_spender', type: 'address' }, - { name: '_value', type: 'uint256' }, - ], - name: 'approve', - outputs: [{ name: '', type: 'bool' }], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, -]) -function approveAmountCalldata(amount, spender) { - if (!amount.currency.isToken) throw new Error('Must call with an amount of token') - var approveData = ERC20_INTERFACE.encodeFunctionData('approve', [spender, v3Sdk.toHex(amount.quotient)]) - return { - to: amount.currency.address, - data: approveData, - value: '0x0', - } +function Updater$1() { + var chainId = useActiveWeb3React().chainId; + var addPopup = useAddPopup(); + // speed up popup dismisall time if on L2 + var isL2 = Boolean(chainId && L2_CHAIN_IDS.includes(chainId)); + var dispatch = useAppDispatch(); + var onCheck = React.useCallback(function (_a) { + var chainId = _a.chainId, hash = _a.hash, blockNumber = _a.blockNumber; + return dispatch(checkedTransaction({ chainId: chainId, hash: hash, blockNumber: blockNumber })); + }, [dispatch]); + var onReceipt = React.useCallback(function (_a) { + var chainId = _a.chainId, hash = _a.hash, receipt = _a.receipt; + dispatch(finalizeTransaction({ + chainId: chainId, + hash: hash, + receipt: { + blockHash: receipt.blockHash, + blockNumber: receipt.blockNumber, + contractAddress: receipt.contractAddress, + from: receipt.from, + status: receipt.status, + to: receipt.to, + transactionHash: receipt.transactionHash, + transactionIndex: receipt.transactionIndex, + }, + })); + addPopup({ + txn: { hash: hash }, + }, hash, isL2 ? L2_TXN_DISMISS_MS : DEFAULT_TXN_DISMISS_MS); + }, [addPopup, dispatch, isL2]); + var state = useAppSelector(function (state) { return state.transactions; }); + var pendingTransactions = React.useMemo(function () { var _a; return (chainId ? (_a = state[chainId]) !== null && _a !== void 0 ? _a : {} : {}); }, [chainId, state]); + return jsxRuntime.jsx(Updater$2, { pendingTransactions: pendingTransactions, onCheck: onCheck, onReceipt: onReceipt }, void 0); } -var ArgentWalletContractABI = [ - { - inputs: [ - { - components: [ - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - { - internalType: 'bytes', - name: 'data', - type: 'bytes', - }, - ], - name: '_transactions', - type: 'tuple[]', - }, - ], - name: 'wc_multiCall', - outputs: [ - { - internalType: 'bytes[]', - name: '', - type: 'bytes[]', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes32', - name: '_msgHash', - type: 'bytes32', - }, - { - internalType: 'bytes', - name: '_signature', - type: 'bytes', - }, - ], - name: 'isValidSignature', - outputs: [ - { - internalType: 'bytes4', - name: '', - type: 'bytes4', - }, - ], - stateMutability: 'view', - type: 'function', - }, -] - -function useArgentWalletContract() { - var account = useActiveWeb3React().account - var isArgentWallet = useIsArgentWallet() - return useContract( - isArgentWallet ? (account !== null && account !== void 0 ? account : undefined) : undefined, - ArgentWalletContractABI, - true - ) +function Updater() { + var dispatch = useAppDispatch(); + // keep dark mode in sync with the system + React.useEffect(function () { + var darkHandler = function (match) { + dispatch(updateMatchesDarkMode({ matchesDarkMode: match.matches })); + }; + var match = window === null || window === void 0 ? void 0 : window.matchMedia('(prefers-color-scheme: dark)'); + dispatch(updateMatchesDarkMode({ matchesDarkMode: match.matches })); + if (match === null || match === void 0 ? void 0 : match.addListener) { + match === null || match === void 0 ? void 0 : match.addListener(darkHandler); + } + else if (match === null || match === void 0 ? void 0 : match.addEventListener) { + match === null || match === void 0 ? void 0 : match.addEventListener('change', darkHandler); + } + return function () { + if (match === null || match === void 0 ? void 0 : match.removeListener) { + match === null || match === void 0 ? void 0 : match.removeListener(darkHandler); + } + else if (match === null || match === void 0 ? void 0 : match.removeEventListener) { + match === null || match === void 0 ? void 0 : match.removeEventListener('change', darkHandler); + } + }; + }, [dispatch]); + return null; } -var SwapCallbackState -;(function (SwapCallbackState) { - SwapCallbackState[(SwapCallbackState['INVALID'] = 0)] = 'INVALID' - SwapCallbackState[(SwapCallbackState['LOADING'] = 1)] = 'LOADING' - SwapCallbackState[(SwapCallbackState['VALID'] = 2)] = 'VALID' -})(SwapCallbackState || (SwapCallbackState = {})) -/** - * Returns the swap calls that can be used to make the trade - * @param trade trade to execute - * @param allowedSlippage user allowed slippage - * @param recipientAddressOrName the ENS name or address of the recipient of the swap output - * @param signatureData the signature data of the permit of the input token amount, if available - */ -function useSwapCallArguments( - trade, // trade to execute, required - allowedSlippage, // in bips - recipientAddressOrName, // the ENS name or address of the recipient of the trade, or null if swap should be returned to sender - signatureData -) { - var _a = useActiveWeb3React(), - account = _a.account, - chainId = _a.chainId, - library = _a.library - var recipientAddress = useENS(recipientAddressOrName).address - var recipient = recipientAddressOrName === null ? account : recipientAddress - var deadline = useTransactionDeadline() - var routerContract = useV2RouterContract() - var argentWalletContract = useArgentWalletContract() - return React.useMemo( - function () { - if (!trade || !recipient || !library || !account || !chainId || !deadline) return [] - if (trade instanceof v2Sdk.Trade) { - if (!routerContract) return [] - var swapMethods = [] - swapMethods.push( - v2Sdk.Router.swapCallParameters(trade, { - feeOnTransfer: false, - allowedSlippage, - recipient, - deadline: deadline.toNumber(), - }) - ) - if (trade.tradeType === sdkCore.TradeType.EXACT_INPUT) { - swapMethods.push( - v2Sdk.Router.swapCallParameters(trade, { - feeOnTransfer: true, - allowedSlippage, - recipient, - deadline: deadline.toNumber(), - }) - ) - } - return swapMethods.map(function (_a) { - var methodName = _a.methodName, - args = _a.args, - value = _a.value - if (argentWalletContract && trade.inputAmount.currency.isToken) { - return { - address: argentWalletContract.address, - calldata: argentWalletContract.interface.encodeFunctionData('wc_multiCall', [ - [ - approveAmountCalldata(trade.maximumAmountIn(allowedSlippage), routerContract.address), - { - to: routerContract.address, - value, - data: routerContract.interface.encodeFunctionData(methodName, args), - }, - ], - ]), - value: '0x0', - } - } else { - return { - address: routerContract.address, - calldata: routerContract.interface.encodeFunctionData(methodName, args), - value, - } - } - }) - } else { - // swap options shared by v3 and v2+v3 swap routers - var sharedSwapOptions = __assign( - { recipient, slippageTolerance: allowedSlippage }, - signatureData - ? { - inputTokenPermit: - 'allowed' in signatureData - ? { - expiry: signatureData.deadline, - nonce: signatureData.nonce, - s: signatureData.s, - r: signatureData.r, - v: signatureData.v, - } - : { - deadline: signatureData.deadline, - amount: signatureData.amount, - s: signatureData.s, - r: signatureData.r, - v: signatureData.v, - }, - } - : {} - ) - var swapRouterAddress = chainId - ? trade instanceof v3Sdk.Trade - ? V3_ROUTER_ADDRESS[chainId] - : SWAP_ROUTER_ADDRESSES[chainId] - : undefined - if (!swapRouterAddress) return [] - var _a = - trade instanceof v3Sdk.Trade - ? v3Sdk.SwapRouter.swapCallParameters( - trade, - __assign(__assign({}, sharedSwapOptions), { deadline: deadline.toString() }) - ) - : routerSdk.SwapRouter.swapCallParameters( - trade, - __assign(__assign({}, sharedSwapOptions), { deadlineOrPreviousBlockhash: deadline.toString() }) - ), - value = _a.value, - calldata = _a.calldata - if (argentWalletContract && trade.inputAmount.currency.isToken) { - return [ - { - address: argentWalletContract.address, - calldata: argentWalletContract.interface.encodeFunctionData('wc_multiCall', [ - [ - approveAmountCalldata(trade.maximumAmountIn(allowedSlippage), swapRouterAddress), - { - to: swapRouterAddress, - value, - data: calldata, - }, - ], - ]), - value: '0x0', - }, - ] - } - return [ - { - address: swapRouterAddress, - calldata, - value, - }, - ] - } - }, - [ - trade, - recipient, - library, - account, - chainId, - deadline, - routerContract, - allowedSlippage, - argentWalletContract, - signatureData, - ] - ) -} -/** - * This is hacking out the revert reason from the ethers provider thrown error however it can. - * This object seems to be undocumented by ethers. - * @param error an error from the ethers provider - */ -function swapErrorToUserReadableMessage(error) { - var _a, _b, _c, _d - var reason - while (Boolean(error)) { - reason = - (_b = (_a = error.reason) !== null && _a !== void 0 ? _a : error.message) !== null && _b !== void 0 ? _b : reason - error = - (_c = error.error) !== null && _c !== void 0 - ? _c - : (_d = error.data) === null || _d === void 0 - ? void 0 - : _d.originalError - } - if ((reason === null || reason === void 0 ? void 0 : reason.indexOf('execution reverted: ')) === 0) - reason = reason.substr('execution reverted: '.length) - switch (reason) { - case 'UniswapV2Router: EXPIRED': - return jsxRuntime.jsx( - macro.Trans, - { - children: - 'The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.', - }, - void 0 - ) - case 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT': - case 'UniswapV2Router: EXCESSIVE_INPUT_AMOUNT': - return jsxRuntime.jsx( - macro.Trans, - { - children: - 'This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.', - }, - void 0 - ) - case 'TransferHelper: TRANSFER_FROM_FAILED': - return jsxRuntime.jsx( - macro.Trans, - { children: 'The input token cannot be transferred. There may be an issue with the input token.' }, - void 0 - ) - case 'UniswapV2: TRANSFER_FAILED': - return jsxRuntime.jsx( - macro.Trans, - { children: 'The output token cannot be transferred. There may be an issue with the output token.' }, - void 0 - ) - case 'UniswapV2: K': - return jsxRuntime.jsx( - macro.Trans, - { - children: - 'The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.', - }, - void 0 - ) - case 'Too little received': - case 'Too much requested': - case 'STF': - return jsxRuntime.jsx( - macro.Trans, - { - children: - 'This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.', - }, - void 0 - ) - case 'TF': - return jsxRuntime.jsx( - macro.Trans, - { - children: - 'The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.', - }, - void 0 - ) - default: - if ((reason === null || reason === void 0 ? void 0 : reason.indexOf('undefined is not an object')) !== -1) { - console.error(error, reason) - return jsxRuntime.jsx( - macro.Trans, - { - children: - 'An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.', - }, - void 0 - ) - } - return jsxRuntime.jsxs( - macro.Trans, - { - children: [ - 'Unknown error', - reason ? ': "' + reason + '"' : '', - '. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.', - ], - }, - void 0 - ) - } -} -// returns a function that will execute a swap, if the parameters are all valid -// and the user has approved the slippage adjusted input amount for the trade -function useSwapCallback( - trade, // trade to execute, required - allowedSlippage, // in bips - recipientAddressOrName, // the ENS name or address of the recipient of the trade, or null if swap should be returned to sender - signatureData -) { - var _a = useActiveWeb3React(), - account = _a.account, - chainId = _a.chainId, - library = _a.library - var swapCalls = useSwapCallArguments(trade, allowedSlippage, recipientAddressOrName, signatureData) - var addTransaction = useTransactionAdder() - var recipientAddress = useENS(recipientAddressOrName).address - var recipient = recipientAddressOrName === null ? account : recipientAddress - return React.useMemo( - function () { - if (!trade || !library || !account || !chainId) { - return { - state: SwapCallbackState.INVALID, - callback: null, - error: jsxRuntime.jsx(macro.Trans, { children: 'Missing dependencies' }, void 0), - } - } - if (!recipient) { - if (recipientAddressOrName !== null) { - return { - state: SwapCallbackState.INVALID, - callback: null, - error: jsxRuntime.jsx(macro.Trans, { children: 'Invalid recipient' }, void 0), - } - } else { - return { state: SwapCallbackState.LOADING, callback: null, error: null } - } - } - return { - state: SwapCallbackState.VALID, - callback: function onSwap() { - return __awaiter(this, void 0, void 0, function () { - var estimatedCalls, bestCallOption, errorCalls, firstNoErrorCall, _a, address, calldata, value - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - return [ - 4 /*yield*/, - Promise.all( - swapCalls.map(function (call) { - var address = call.address, - calldata = call.calldata, - value = call.value - var tx = - !value || isZero(value) - ? { from: account, to: address, data: calldata } - : { - from: account, - to: address, - data: calldata, - value, - } - return library - .estimateGas(tx) - .then(function (gasEstimate) { - return { - call, - gasEstimate, - } - }) - .catch(function (gasError) { - console.debug('Gas estimate failed, trying eth_call to extract error', call) - return library - .call(tx) - .then(function (result) { - console.debug( - 'Unexpected successful call after failed estimate gas', - call, - gasError, - result - ) - return { - call, - error: jsxRuntime.jsx( - macro.Trans, - { children: 'Unexpected issue with estimating the gas. Please try again.' }, - void 0 - ), - } - }) - .catch(function (callError) { - console.debug('Call threw error', call, callError) - return { call, error: swapErrorToUserReadableMessage(callError) } - }) - }) - }) - ), - // a successful estimation is a bignumber gas estimate and the next call is also a bignumber gas estimate - ] - case 1: - estimatedCalls = _b.sent() - bestCallOption = estimatedCalls.find(function (el, ix, list) { - return 'gasEstimate' in el && (ix === list.length - 1 || 'gasEstimate' in list[ix + 1]) - }) - // check if any calls errored with a recognizable error - if (!bestCallOption) { - errorCalls = estimatedCalls.filter(function (call) { - return 'error' in call - }) - if (errorCalls.length > 0) throw errorCalls[errorCalls.length - 1].error - firstNoErrorCall = estimatedCalls.find(function (call) { - return !('error' in call) - }) - if (!firstNoErrorCall) - throw new Error( - macro.t( - templateObject_1$2 || - (templateObject_1$2 = __makeTemplateObject( - ['Unexpected error. Could not estimate gas for the swap.'], - ['Unexpected error. Could not estimate gas for the swap.'] - )) - ) - ) - bestCallOption = firstNoErrorCall - } - ;(_a = bestCallOption.call), (address = _a.address), (calldata = _a.calldata), (value = _a.value) - return [ - 2 /*return*/, - library - .getSigner() - .sendTransaction( - __assign( - __assign( - { from: account, to: address, data: calldata }, - 'gasEstimate' in bestCallOption - ? { gasLimit: calculateGasMargin(bestCallOption.gasEstimate) } - : {} - ), - value && !isZero(value) ? { value } : {} - ) - ) - .then(function (response) { - addTransaction( - response, - trade.tradeType === sdkCore.TradeType.EXACT_INPUT - ? { - type: TransactionType.SWAP, - tradeType: sdkCore.TradeType.EXACT_INPUT, - inputCurrencyId: currencyId(trade.inputAmount.currency), - inputCurrencyAmountRaw: trade.inputAmount.quotient.toString(), - expectedOutputCurrencyAmountRaw: trade.outputAmount.quotient.toString(), - outputCurrencyId: currencyId(trade.outputAmount.currency), - minimumOutputCurrencyAmountRaw: trade - .minimumAmountOut(allowedSlippage) - .quotient.toString(), - } - : { - type: TransactionType.SWAP, - tradeType: sdkCore.TradeType.EXACT_OUTPUT, - inputCurrencyId: currencyId(trade.inputAmount.currency), - maximumInputCurrencyAmountRaw: trade - .maximumAmountIn(allowedSlippage) - .quotient.toString(), - outputCurrencyId: currencyId(trade.outputAmount.currency), - outputCurrencyAmountRaw: trade.outputAmount.quotient.toString(), - expectedInputCurrencyAmountRaw: trade.inputAmount.quotient.toString(), - } - ) - return response.hash - }) - .catch(function (error) { - // if the user rejected the tx, pass this along - if ((error === null || error === void 0 ? void 0 : error.code) === 4001) { - throw new Error( - macro.t( - templateObject_2 || - (templateObject_2 = __makeTemplateObject( - ['Transaction rejected.'], - ['Transaction rejected.'] - )) - ) - ) - } else { - // otherwise, the error was unexpected and we need to convey that - console.error('Swap failed', error, address, calldata, value) - throw new Error( - macro.t( - templateObject_3 || - (templateObject_3 = __makeTemplateObject(['Swap failed: ', ''], ['Swap failed: ', ''])), - swapErrorToUserReadableMessage(error) - ) - ) - } - }), - ] - } - }) - }) - }, - error: null, - } - }, - [trade, library, account, chainId, recipient, recipientAddressOrName, swapCalls, addTransaction, allowedSlippage] - ) -} -var templateObject_1$2, templateObject_2, templateObject_3 - -var WrapType -;(function (WrapType) { - WrapType[(WrapType['NOT_APPLICABLE'] = 0)] = 'NOT_APPLICABLE' - WrapType[(WrapType['WRAP'] = 1)] = 'WRAP' - WrapType[(WrapType['UNWRAP'] = 2)] = 'UNWRAP' -})(WrapType || (WrapType = {})) -var NOT_APPLICABLE = { wrapType: WrapType.NOT_APPLICABLE } -var WrapInputError -;(function (WrapInputError) { - WrapInputError[(WrapInputError['NO_ERROR'] = 0)] = 'NO_ERROR' - WrapInputError[(WrapInputError['ENTER_NATIVE_AMOUNT'] = 1)] = 'ENTER_NATIVE_AMOUNT' - WrapInputError[(WrapInputError['ENTER_WRAPPED_AMOUNT'] = 2)] = 'ENTER_WRAPPED_AMOUNT' - WrapInputError[(WrapInputError['INSUFFICIENT_NATIVE_BALANCE'] = 3)] = 'INSUFFICIENT_NATIVE_BALANCE' - WrapInputError[(WrapInputError['INSUFFICIENT_WRAPPED_BALANCE'] = 4)] = 'INSUFFICIENT_WRAPPED_BALANCE' -})(WrapInputError || (WrapInputError = {})) -function WrapErrorText(_a) { - var wrapInputError = _a.wrapInputError - var native = useNativeCurrency() - var wrapped = native === null || native === void 0 ? void 0 : native.wrapped - switch (wrapInputError) { - case WrapInputError.NO_ERROR: - return null - case WrapInputError.ENTER_NATIVE_AMOUNT: - return jsxRuntime.jsxs( - macro.Trans, - { children: ['Enter ', native === null || native === void 0 ? void 0 : native.symbol, ' amount'] }, - void 0 - ) - case WrapInputError.ENTER_WRAPPED_AMOUNT: - return jsxRuntime.jsxs( - macro.Trans, - { children: ['Enter ', wrapped === null || wrapped === void 0 ? void 0 : wrapped.symbol, ' amount'] }, - void 0 - ) - case WrapInputError.INSUFFICIENT_NATIVE_BALANCE: - return jsxRuntime.jsxs( - macro.Trans, - { children: ['Insufficient ', native === null || native === void 0 ? void 0 : native.symbol, ' balance'] }, - void 0 - ) - case WrapInputError.INSUFFICIENT_WRAPPED_BALANCE: - return jsxRuntime.jsxs( - macro.Trans, - { children: ['Insufficient ', wrapped === null || wrapped === void 0 ? void 0 : wrapped.symbol, ' balance'] }, - void 0 - ) - } -} -/** - * Given the selected input and output currency, return a wrap callback - * @param inputCurrency the selected input currency - * @param outputCurrency the selected output currency - * @param typedValue the user input value - */ -function useWrapCallback(inputCurrency, outputCurrency, typedValue) { - var _this = this - var _a = useActiveWeb3React(), - chainId = _a.chainId, - account = _a.account - var wethContract = useWETHContract() - var balance = useCurrencyBalance( - account !== null && account !== void 0 ? account : undefined, - inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : undefined - ) - // we can always parse the amount typed as the input currency, since wrapping is 1:1 - var inputAmount = React.useMemo( - function () { - return tryParseCurrencyAmount( - typedValue, - inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : undefined - ) - }, - [inputCurrency, typedValue] - ) - var addTransaction = useTransactionAdder() - return React.useMemo( - function () { - if (!wethContract || !chainId || !inputCurrency || !outputCurrency) return NOT_APPLICABLE - var weth = WRAPPED_NATIVE_CURRENCY[chainId] - if (!weth) return NOT_APPLICABLE - var hasInputAmount = Boolean( - inputAmount === null || inputAmount === void 0 ? void 0 : inputAmount.greaterThan('0') - ) - var sufficientBalance = inputAmount && balance && !balance.lessThan(inputAmount) - if (inputCurrency.isNative && weth.equals(outputCurrency)) { - return { - wrapType: WrapType.WRAP, - execute: - sufficientBalance && inputAmount - ? function () { - return __awaiter(_this, void 0, void 0, function () { - var txReceipt, error_1 - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - _a.trys.push([0, 2, , 3]) - return [ - 4 /*yield*/, - wethContract.deposit({ value: '0x' + inputAmount.quotient.toString(16) }), - ] - case 1: - txReceipt = _a.sent() - addTransaction(txReceipt, { - type: TransactionType.WRAP, - unwrapped: false, - currencyAmountRaw: - inputAmount === null || inputAmount === void 0 ? void 0 : inputAmount.quotient.toString(), - chainId, - }) - return [3 /*break*/, 3] - case 2: - error_1 = _a.sent() - console.error('Could not deposit', error_1) - return [3 /*break*/, 3] - case 3: - return [2 /*return*/] - } - }) - }) - } - : undefined, - inputError: sufficientBalance - ? undefined - : hasInputAmount - ? WrapInputError.INSUFFICIENT_NATIVE_BALANCE - : WrapInputError.ENTER_NATIVE_AMOUNT, - } - } else if (weth.equals(inputCurrency) && outputCurrency.isNative) { - return { - wrapType: WrapType.UNWRAP, - execute: - sufficientBalance && inputAmount - ? function () { - return __awaiter(_this, void 0, void 0, function () { - var txReceipt, error_2 - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - _a.trys.push([0, 2, , 3]) - return [4 /*yield*/, wethContract.withdraw('0x' + inputAmount.quotient.toString(16))] - case 1: - txReceipt = _a.sent() - addTransaction(txReceipt, { - type: TransactionType.WRAP, - unwrapped: true, - currencyAmountRaw: - inputAmount === null || inputAmount === void 0 ? void 0 : inputAmount.quotient.toString(), - chainId, - }) - return [3 /*break*/, 3] - case 2: - error_2 = _a.sent() - console.error('Could not withdraw', error_2) - return [3 /*break*/, 3] - case 3: - return [2 /*return*/] - } - }) - }) - } - : undefined, - inputError: sufficientBalance - ? undefined - : hasInputAmount - ? WrapInputError.INSUFFICIENT_WRAPPED_BALANCE - : WrapInputError.ENTER_WRAPPED_AMOUNT, - } - } else { - return NOT_APPLICABLE - } - }, - [wethContract, chainId, inputCurrency, outputCurrency, inputAmount, balance, addTransaction] - ) +var initialStyles = { + width: '200vw', + height: '200vh', + transform: 'translate(-50vw, -100vh)', + backgroundBlendMode: '', +}; +var backgroundResetStyles = { + width: '100vw', + height: '100vh', + transform: 'unset', + backgroundBlendMode: '', +}; +var backgroundRadialGradientElement = document.getElementById('background-radial-gradient'); +var setBackground = function (newValues) { + return Object.entries(newValues).forEach(function (_a) { + var _b = __read(_a, 2), key = _b[0], value = _b[1]; + if (backgroundRadialGradientElement) { + backgroundRadialGradientElement.style[key] = value; + } + }); +}; +function RadialGradientByChainUpdater() { + var chainId = useActiveWeb3React().chainId; + var _a = __read(useDarkModeManager(), 1), darkMode = _a[0]; + // manage background color + React.useEffect(function () { + if (!backgroundRadialGradientElement) { + return; + } + switch (chainId) { + case SupportedChainId.ARBITRUM_ONE: + case SupportedChainId.ARBITRUM_RINKEBY: + setBackground(backgroundResetStyles); + var arbitrumLightGradient = 'radial-gradient(150% 100% at 50% 0%, #CDE8FB 0%, #FCF3F9 50%, #FFFFFF 100%)'; + var arbitrumDarkGradient = 'radial-gradient(150% 100% at 50% 0%, #0A294B 0%, #221E30 50%, #1F2128 100%)'; + backgroundRadialGradientElement.style.background = darkMode ? arbitrumDarkGradient : arbitrumLightGradient; + break; + case SupportedChainId.OPTIMISM: + case SupportedChainId.OPTIMISTIC_KOVAN: + setBackground(backgroundResetStyles); + var optimismLightGradient = 'radial-gradient(150% 100% at 50% 0%, #FFFBF2 2%, #FFF4F9 53%, #FFFFFF 100%)'; + var optimismDarkGradient = 'radial-gradient(150% 100% at 50% 0%, #3E2E38 2%, #2C1F2D 53%, #1F2128 100%)'; + backgroundRadialGradientElement.style.background = darkMode ? optimismDarkGradient : optimismLightGradient; + break; + case SupportedChainId.POLYGON: + case SupportedChainId.POLYGON_MUMBAI: + setBackground(backgroundResetStyles); + var polygonLightGradient = 'radial-gradient(153.32% 100% at 47.26% 0%, rgba(130, 71, 229, 0.0864) 0%, rgba(0, 41, 255, 0.06) 48.19%, rgba(0, 41, 255, 0.012) 100%), #FFFFFF'; + var polygonDarkGradient = 'radial-gradient(150.6% 98.22% at 48.06% 0%, rgba(130, 71, 229, 0.6) 0%, rgba(200, 168, 255, 0) 100%), #1F2128'; + backgroundRadialGradientElement.style.background = darkMode ? polygonDarkGradient : polygonLightGradient; + backgroundRadialGradientElement.style.backgroundBlendMode = darkMode ? 'overlay,normal' : 'multiply,normal'; + break; + default: + setBackground(initialStyles); + backgroundRadialGradientElement.style.background = ''; + } + }, [darkMode, chainId]); + return null; } -var MIN_NATIVE_CURRENCY_FOR_GAS = JSBI__default['default'].exponentiate( - JSBI__default['default'].BigInt(10), - JSBI__default['default'].BigInt(16) -) // .01 ETH -/** - * Given some token amount, return the max that can be spent of it - * @param currencyAmount to return max of - */ -function maxAmountSpend(currencyAmount) { - if (!currencyAmount) return undefined - if (currencyAmount.currency.isNative) { - if (JSBI__default['default'].greaterThan(currencyAmount.quotient, MIN_NATIVE_CURRENCY_FOR_GAS)) { - return sdkCore.CurrencyAmount.fromRawAmount( - currencyAmount.currency, - JSBI__default['default'].subtract(currencyAmount.quotient, MIN_NATIVE_CURRENCY_FOR_GAS) - ) - } else { - return sdkCore.CurrencyAmount.fromRawAmount(currencyAmount.currency, JSBI__default['default'].BigInt(0)) - } - } - return currencyAmount +function Updaters() { + return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(RadialGradientByChainUpdater, {}, void 0), jsxRuntime.jsx(Updater$4, {}, void 0), jsxRuntime.jsx(Updater, {}, void 0), jsxRuntime.jsx(Updater$5, {}, void 0), jsxRuntime.jsx(Updater$1, {}, void 0), jsxRuntime.jsx(BlockUpdater, {}, void 0), jsxRuntime.jsx(MulticallUpdater, {}, void 0), jsxRuntime.jsx(Updater$3, {}, void 0)] }, void 0)); } -var BodyWrapper = styled__default['default'].main( - templateObject_1$1 || - (templateObject_1$1 = __makeTemplateObject( - [ - '\n position: relative;\n margin-top: ', - ';\n max-width: ', - ';\n width: 100%;\n background: ', - ';\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 border-radius: 24px;\n margin-top: 1rem;\n margin-left: auto;\n margin-right: auto;\n z-index: ', - ';\n', - ], - [ - '\n position: relative;\n margin-top: ', - ';\n max-width: ', - ';\n width: 100%;\n background: ', - ';\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 border-radius: 24px;\n margin-top: 1rem;\n margin-left: auto;\n margin-right: auto;\n z-index: ', - ';\n', - /** - * The styled container element that wraps the content of most pages and the tabs. - */ - ] - )), - function (_a) { - var margin = _a.margin - return margin !== null && margin !== void 0 ? margin : '0px' - }, - function (_a) { - var maxWidth = _a.maxWidth - return maxWidth !== null && maxWidth !== void 0 ? maxWidth : '480px' - }, - function (_a) { - var theme = _a.theme - return theme.bg0 - }, - Z_INDEX.deprecated_content -) -/** - * The styled container element that wraps the content of most pages and the tabs. - */ -function AppBody(_a) { - var children = _a.children, - rest = __rest(_a, ['children']) - return jsxRuntime.jsx(BodyWrapper, __assign({}, rest, { children }), void 0) -} -var templateObject_1$1 - -var AlertWrapper = styled__default['default'].div( - templateObject_1 || - (templateObject_1 = __makeTemplateObject( - ['\n max-width: 460px;\n width: 100%;\n'], - ['\n max-width: 460px;\n width: 100%;\n'] - )) -) -function Swap(_a) { - var _this = this - var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l - var history = _a.history - var account = useActiveWeb3React().account - var loadedUrlParams = useDefaultsFromURLSearch() - // token warning stuff - var _m = __read( - [ - useCurrency(loadedUrlParams === null || loadedUrlParams === void 0 ? void 0 : loadedUrlParams.inputCurrencyId), - useCurrency(loadedUrlParams === null || loadedUrlParams === void 0 ? void 0 : loadedUrlParams.outputCurrencyId), - ], - 2 - ), - loadedInputCurrency = _m[0], - loadedOutputCurrency = _m[1] - var _o = __read(React.useState(false), 2), - dismissTokenWarning = _o[0], - setDismissTokenWarning = _o[1] - var urlLoadedTokens = React.useMemo( - function () { - var _a, _b - return (_b = - (_a = [loadedInputCurrency, loadedOutputCurrency]) === null || _a === void 0 - ? void 0 - : _a.filter(function (c) { - var _a - return (_a = c === null || c === void 0 ? void 0 : c.isToken) !== null && _a !== void 0 ? _a : false - })) !== null && _b !== void 0 - ? _b - : [] - }, - [loadedInputCurrency, loadedOutputCurrency] - ) - var handleConfirmTokenWarning = React.useCallback(function () { - setDismissTokenWarning(true) - }, []) - // dismiss warning if all imported tokens are in active lists - var defaultTokens = useAllTokens() - var importTokensNotInDefault = React.useMemo( - function () { - return ( - urlLoadedTokens && - urlLoadedTokens.filter(function (token) { - return !Boolean(token.address in defaultTokens) - }) - ) - }, - [defaultTokens, urlLoadedTokens] - ) - var theme = React.useContext(styled.ThemeContext) - // toggle wallet when disconnected - var toggleWalletModal = useWalletModalToggle() - // for expert mode - var _p = __read(useExpertModeManager(), 1), - isExpertMode = _p[0] - // swap state - var _q = useSwapState(), - independentField = _q.independentField, - typedValue = _q.typedValue, - recipient = _q.recipient - var _r = useDerivedSwapInfo(), - _s = _r.trade, - tradeState = _s.state, - trade = _s.trade, - allowedSlippage = _r.allowedSlippage, - currencyBalances = _r.currencyBalances, - parsedAmount = _r.parsedAmount, - currencies = _r.currencies, - swapInputError = _r.inputError - var _t = useWrapCallback(currencies[Field.INPUT], currencies[Field.OUTPUT], typedValue), - wrapType = _t.wrapType, - onWrap = _t.execute, - wrapInputError = _t.inputError - var showWrap = wrapType !== WrapType.NOT_APPLICABLE - var recipientAddress = useENSAddress(recipient).address - var parsedAmounts = React.useMemo( - function () { - var _a, _b - return showWrap - ? ((_a = {}), (_a[Field.INPUT] = parsedAmount), (_a[Field.OUTPUT] = parsedAmount), _a) - : ((_b = {}), - (_b[Field.INPUT] = - independentField === Field.INPUT - ? parsedAmount - : trade === null || trade === void 0 - ? void 0 - : trade.inputAmount), - (_b[Field.OUTPUT] = - independentField === Field.OUTPUT - ? parsedAmount - : trade === null || trade === void 0 - ? void 0 - : trade.outputAmount), - _b) - }, - [independentField, parsedAmount, showWrap, trade] - ) - var _u = __read( - React.useMemo( - function () { - return [ - !(trade === null || trade === void 0 ? void 0 : trade.swaps), - TradeState.LOADING === tradeState, - TradeState.SYNCING === tradeState, - ] - }, - [trade, tradeState] - ), - 3 - ), - routeNotFound = _u[0], - routeIsLoading = _u[1], - routeIsSyncing = _u[2] - var fiatValueInput = useUSDCValue(parsedAmounts[Field.INPUT]) - var fiatValueOutput = useUSDCValue(parsedAmounts[Field.OUTPUT]) - var priceImpact = React.useMemo( - function () { - return routeIsSyncing ? undefined : computeFiatValuePriceImpact(fiatValueInput, fiatValueOutput) - }, - [fiatValueInput, fiatValueOutput, routeIsSyncing] - ) - var _v = useSwapActionHandlers(), - onSwitchTokens = _v.onSwitchTokens, - onCurrencySelection = _v.onCurrencySelection, - onUserInput = _v.onUserInput, - onChangeRecipient = _v.onChangeRecipient - var isValid = !swapInputError - var dependentField = independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT - var handleTypeInput = React.useCallback( - function (value) { - onUserInput(Field.INPUT, value) - }, - [onUserInput] - ) - var handleTypeOutput = React.useCallback( - function (value) { - onUserInput(Field.OUTPUT, value) - }, - [onUserInput] - ) - // reset if they close warning without tokens in params - var handleDismissTokenWarning = React.useCallback( - function () { - setDismissTokenWarning(true) - history.push('/swap/') - }, - [history] - ) - // modal and loading - var _w = __read( - React.useState({ - showConfirm: false, - tradeToConfirm: undefined, - attemptingTxn: false, - swapErrorMessage: undefined, - txHash: undefined, - }), - 2 - ), - _x = _w[0], - showConfirm = _x.showConfirm, - tradeToConfirm = _x.tradeToConfirm, - swapErrorMessage = _x.swapErrorMessage, - attemptingTxn = _x.attemptingTxn, - txHash = _x.txHash, - setSwapState = _w[1] - var formattedAmounts = React.useMemo( - function () { - var _a - var _b, _c, _d, _e - return ( - (_a = {}), - (_a[independentField] = typedValue), - (_a[dependentField] = showWrap - ? (_c = (_b = parsedAmounts[independentField]) === null || _b === void 0 ? void 0 : _b.toExact()) !== null && - _c !== void 0 - ? _c - : '' - : (_e = (_d = parsedAmounts[dependentField]) === null || _d === void 0 ? void 0 : _d.toSignificant(6)) !== - null && _e !== void 0 - ? _e - : ''), - _a - ) - }, - [dependentField, independentField, parsedAmounts, showWrap, typedValue] - ) - var userHasSpecifiedInputOutput = Boolean( - currencies[Field.INPUT] && - currencies[Field.OUTPUT] && - ((_b = parsedAmounts[independentField]) === null || _b === void 0 - ? void 0 - : _b.greaterThan(JSBI__default['default'].BigInt(0))) - ) - var approvalOptimizedTrade = useApprovalOptimizedTrade(trade, allowedSlippage) - var approvalOptimizedTradeString = - approvalOptimizedTrade instanceof v2Sdk.Trade - ? 'V2SwapRouter' - : approvalOptimizedTrade instanceof v3Sdk.Trade - ? 'V3SwapRouter' - : 'SwapRouter' - // check whether the user has approved the router on the input token - var _y = __read(useApproveCallbackFromTrade(approvalOptimizedTrade, allowedSlippage), 2), - approvalState = _y[0], - approveCallback = _y[1] - var _z = useERC20PermitFromTrade(approvalOptimizedTrade, allowedSlippage), - signatureState = _z.state, - signatureData = _z.signatureData, - gatherPermitSignature = _z.gatherPermitSignature - var handleApprove = React.useCallback( - function () { - return __awaiter(_this, void 0, void 0, function () { - var error_1 - var _a - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - if (!(signatureState === UseERC20PermitState.NOT_SIGNED && gatherPermitSignature)) return [3 /*break*/, 7] - _b.label = 1 - case 1: - _b.trys.push([1, 3, , 6]) - return [4 /*yield*/, gatherPermitSignature()] - case 2: - _b.sent() - return [3 /*break*/, 6] - case 3: - error_1 = _b.sent() - if (!((error_1 === null || error_1 === void 0 ? void 0 : error_1.code) !== 4001)) return [3 /*break*/, 5] - return [4 /*yield*/, approveCallback()] - case 4: - _b.sent() - _b.label = 5 - case 5: - return [3 /*break*/, 6] - case 6: - return [3 /*break*/, 9] - case 7: - return [4 /*yield*/, approveCallback()] - case 8: - _b.sent() - ReactGA__default['default'].event({ - category: 'Swap', - action: 'Approve', - label: [ - approvalOptimizedTradeString, - (_a = - approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 - ? void 0 - : approvalOptimizedTrade.inputAmount) === null || _a === void 0 - ? void 0 - : _a.currency.symbol, - ].join('/'), - }) - _b.label = 9 - case 9: - return [2 /*return*/] - } - }) - }) - }, - [ - signatureState, - gatherPermitSignature, - approveCallback, - approvalOptimizedTradeString, - (_c = - approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 - ? void 0 - : approvalOptimizedTrade.inputAmount) === null || _c === void 0 - ? void 0 - : _c.currency.symbol, - ] - ) - // check if user has gone through approval process, used to show two step buttons, reset on token change - var _0 = __read(React.useState(false), 2), - approvalSubmitted = _0[0], - setApprovalSubmitted = _0[1] - // mark when a user has submitted an approval, reset onTokenSelection for input field - React.useEffect( - function () { - if (approvalState === ApprovalState.PENDING) { - setApprovalSubmitted(true) - } - }, - [approvalState, approvalSubmitted] - ) - var maxInputAmount = React.useMemo( - function () { - return maxAmountSpend(currencyBalances[Field.INPUT]) - }, - [currencyBalances] - ) - var showMaxButton = Boolean( - (maxInputAmount === null || maxInputAmount === void 0 ? void 0 : maxInputAmount.greaterThan(0)) && - !((_d = parsedAmounts[Field.INPUT]) === null || _d === void 0 ? void 0 : _d.equalTo(maxInputAmount)) - ) - // the callback to execute the swap - var _1 = useSwapCallback(approvalOptimizedTrade, allowedSlippage, recipient, signatureData), - swapCallback = _1.callback, - swapCallbackError = _1.error - var handleSwap = React.useCallback( - function () { - if (!swapCallback) { - return - } - if (priceImpact && !confirmPriceImpactWithoutFee(priceImpact)) { - return - } - setSwapState({ - attemptingTxn: true, - tradeToConfirm, - showConfirm, - swapErrorMessage: undefined, - txHash: undefined, - }) - swapCallback() - .then(function (hash) { - var _a, _b, _c, _d - setSwapState({ - attemptingTxn: false, - tradeToConfirm, - showConfirm, - swapErrorMessage: undefined, - txHash: hash, - }) - ReactGA__default['default'].event({ - category: 'Swap', - action: - recipient === null - ? 'Swap w/o Send' - : (recipientAddress !== null && recipientAddress !== void 0 ? recipientAddress : recipient) === account - ? 'Swap w/o Send + recipient' - : 'Swap w/ Send', - label: [ - approvalOptimizedTradeString, - (_b = - (_a = - approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 - ? void 0 - : approvalOptimizedTrade.inputAmount) === null || _a === void 0 - ? void 0 - : _a.currency) === null || _b === void 0 - ? void 0 - : _b.symbol, - (_d = - (_c = - approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 - ? void 0 - : approvalOptimizedTrade.outputAmount) === null || _c === void 0 - ? void 0 - : _c.currency) === null || _d === void 0 - ? void 0 - : _d.symbol, - 'MH', - ].join('/'), - }) - }) - .catch(function (error) { - setSwapState({ - attemptingTxn: false, - tradeToConfirm, - showConfirm, - swapErrorMessage: error.message, - txHash: undefined, - }) - }) - }, - [ - swapCallback, - priceImpact, - tradeToConfirm, - showConfirm, - recipient, - recipientAddress, - account, - approvalOptimizedTradeString, - (_f = - (_e = - approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 - ? void 0 - : approvalOptimizedTrade.inputAmount) === null || _e === void 0 - ? void 0 - : _e.currency) === null || _f === void 0 - ? void 0 - : _f.symbol, - (_h = - (_g = - approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 - ? void 0 - : approvalOptimizedTrade.outputAmount) === null || _g === void 0 - ? void 0 - : _g.currency) === null || _h === void 0 - ? void 0 - : _h.symbol, - ] - ) - // errors - var _2 = __read(React.useState(false), 2), - showInverted = _2[0], - setShowInverted = _2[1] - // warnings on the greater of fiat value price impact and execution price impact - var priceImpactSeverity = React.useMemo( - function () { - var executionPriceImpact = trade === null || trade === void 0 ? void 0 : trade.priceImpact - return warningSeverity( - executionPriceImpact && priceImpact - ? executionPriceImpact.greaterThan(priceImpact) - ? executionPriceImpact - : priceImpact - : executionPriceImpact !== null && executionPriceImpact !== void 0 - ? executionPriceImpact - : priceImpact - ) - }, - [priceImpact, trade] - ) - var isArgentWallet = useIsArgentWallet() - // show approve flow when: no error on inputs, not approved or pending, or approved in current session - // never show if price impact is above threshold in non expert mode - var showApproveFlow = - !isArgentWallet && - !swapInputError && - (approvalState === ApprovalState.NOT_APPROVED || - approvalState === ApprovalState.PENDING || - (approvalSubmitted && approvalState === ApprovalState.APPROVED)) && - !(priceImpactSeverity > 3 && !isExpertMode) - var handleConfirmDismiss = React.useCallback( - function () { - setSwapState({ - showConfirm: false, - tradeToConfirm, - attemptingTxn, - swapErrorMessage, - txHash, - }) - // if there was a tx hash, we want to clear the input - if (txHash) { - onUserInput(Field.INPUT, '') - } - }, - [attemptingTxn, onUserInput, swapErrorMessage, tradeToConfirm, txHash] - ) - var handleAcceptChanges = React.useCallback( - function () { - setSwapState({ - tradeToConfirm: trade, - swapErrorMessage, - txHash, - attemptingTxn, - showConfirm, - }) - }, - [attemptingTxn, showConfirm, swapErrorMessage, trade, txHash] - ) - var handleInputSelect = React.useCallback( - function (inputCurrency) { - setApprovalSubmitted(false) // reset 2 step UI for approvals - onCurrencySelection(Field.INPUT, inputCurrency) - }, - [onCurrencySelection] - ) - var handleMaxInput = React.useCallback( - function () { - maxInputAmount && onUserInput(Field.INPUT, maxInputAmount.toExact()) - ReactGA__default['default'].event({ - category: 'Swap', - action: 'Max', - }) - }, - [maxInputAmount, onUserInput] - ) - var handleOutputSelect = React.useCallback( - function (outputCurrency) { - return onCurrencySelection(Field.OUTPUT, outputCurrency) - }, - [onCurrencySelection] - ) - var swapIsUnsupported = useIsSwapUnsupported(currencies[Field.INPUT], currencies[Field.OUTPUT]) - var priceImpactTooHigh = priceImpactSeverity > 3 && !isExpertMode - return jsxRuntime.jsxs( - jsxRuntime.Fragment, - { - children: [ - jsxRuntime.jsx( - TokenWarningModal, - { - isOpen: importTokensNotInDefault.length > 0 && !dismissTokenWarning, - tokens: importTokensNotInDefault, - onConfirm: handleConfirmTokenWarning, - onDismiss: handleDismissTokenWarning, - }, - void 0 - ), - jsxRuntime.jsxs( - AppBody, - { - children: [ - jsxRuntime.jsx(SwapHeader, { allowedSlippage }, void 0), - jsxRuntime.jsxs( - Wrapper$d, - __assign( - { id: 'swap-page' }, - { - children: [ - jsxRuntime.jsx( - ConfirmSwapModal, - { - isOpen: showConfirm, - trade, - originalTrade: tradeToConfirm, - onAcceptChanges: handleAcceptChanges, - attemptingTxn, - txHash, - recipient, - allowedSlippage, - onConfirm: handleSwap, - swapErrorMessage, - onDismiss: handleConfirmDismiss, - }, - void 0 - ), - jsxRuntime.jsxs( - AutoColumn, - __assign( - { gap: 'sm' }, - { - children: [ - jsxRuntime.jsxs( - 'div', - __assign( - { style: { display: 'relative' } }, - { - children: [ - jsxRuntime.jsx( - CurrencyInputPanel, - { - label: - independentField === Field.OUTPUT && !showWrap - ? jsxRuntime.jsx(macro.Trans, { children: 'From (at most)' }, void 0) - : jsxRuntime.jsx(macro.Trans, { children: 'From' }, void 0), - value: formattedAmounts[Field.INPUT], - showMaxButton, - currency: currencies[Field.INPUT], - onUserInput: handleTypeInput, - onMax: handleMaxInput, - fiatValue: - fiatValueInput !== null && fiatValueInput !== void 0 - ? fiatValueInput - : undefined, - onCurrencySelect: handleInputSelect, - otherCurrency: currencies[Field.OUTPUT], - showCommonBases: true, - id: 'swap-currency-input', - loading: independentField === Field.OUTPUT && routeIsSyncing, - }, - void 0 - ), - jsxRuntime.jsx( - ArrowWrapper$1, - __assign( - { clickable: true }, - { - children: jsxRuntime.jsx( - reactFeather.ArrowDown, - { - size: '16', - onClick() { - setApprovalSubmitted(false) // reset 2 step UI for approvals - onSwitchTokens() - }, - color: - currencies[Field.INPUT] && currencies[Field.OUTPUT] - ? theme.text1 - : theme.text3, - }, - void 0 - ), - } - ), - void 0 - ), - jsxRuntime.jsx( - CurrencyInputPanel, - { - value: formattedAmounts[Field.OUTPUT], - onUserInput: handleTypeOutput, - label: - independentField === Field.INPUT && !showWrap - ? jsxRuntime.jsx(macro.Trans, { children: 'To (at least)' }, void 0) - : jsxRuntime.jsx(macro.Trans, { children: 'To' }, void 0), - showMaxButton: false, - hideBalance: false, - fiatValue: - fiatValueOutput !== null && fiatValueOutput !== void 0 - ? fiatValueOutput - : undefined, - priceImpact, - currency: currencies[Field.OUTPUT], - onCurrencySelect: handleOutputSelect, - otherCurrency: currencies[Field.INPUT], - showCommonBases: true, - id: 'swap-currency-output', - loading: independentField === Field.INPUT && routeIsSyncing, - }, - void 0 - ), - ], - } - ), - void 0 - ), - recipient !== null && !showWrap - ? jsxRuntime.jsxs( - jsxRuntime.Fragment, - { - children: [ - jsxRuntime.jsxs( - AutoRow, - __assign( - { justify: 'space-between', style: { padding: '0 1rem' } }, - { - children: [ - jsxRuntime.jsx( - ArrowWrapper$1, - __assign( - { clickable: false }, - { - children: jsxRuntime.jsx( - reactFeather.ArrowDown, - { size: '16', color: theme.text2 }, - void 0 - ), - } - ), - void 0 - ), - jsxRuntime.jsx( - LinkStyledButton, - __assign( - { - id: 'remove-recipient-button', - onClick() { - return onChangeRecipient(null) - }, - }, - { - children: jsxRuntime.jsx( - macro.Trans, - { children: '- Remove recipient' }, - void 0 - ), - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - jsxRuntime.jsx( - AddressInputPanel, - { id: 'recipient', value: recipient, onChange: onChangeRecipient }, - void 0 - ), - ], - }, - void 0 - ) - : null, - !showWrap && - userHasSpecifiedInputOutput && - (trade || routeIsLoading || routeIsSyncing) && - jsxRuntime.jsx( - SwapDetailsDropdown, - { - trade, - syncing: routeIsSyncing, - loading: routeIsLoading, - showInverted, - setShowInverted, - allowedSlippage, - }, - void 0 - ), - jsxRuntime.jsxs( - 'div', - { - children: [ - swapIsUnsupported - ? jsxRuntime.jsx( - ButtonPrimary, - __assign( - { disabled: true }, - { - children: jsxRuntime.jsx( - ThemedText.Main, - __assign( - { mb: '4px' }, - { - children: jsxRuntime.jsx( - macro.Trans, - { children: 'Unsupported Asset' }, - void 0 - ), - } - ), - void 0 - ), - } - ), - void 0 - ) - : !account - ? jsxRuntime.jsx( - ButtonLight, - __assign( - { onClick: toggleWalletModal }, - { - children: jsxRuntime.jsx( - macro.Trans, - { children: 'Connect Wallet' }, - void 0 - ), - } - ), - void 0 - ) - : showWrap - ? jsxRuntime.jsx( - ButtonPrimary, - __assign( - { disabled: Boolean(wrapInputError), onClick: onWrap }, - { - children: wrapInputError - ? jsxRuntime.jsx(WrapErrorText, { wrapInputError }, void 0) - : wrapType === WrapType.WRAP - ? jsxRuntime.jsx(macro.Trans, { children: 'Wrap' }, void 0) - : wrapType === WrapType.UNWRAP - ? jsxRuntime.jsx(macro.Trans, { children: 'Unwrap' }, void 0) - : null, - } - ), - void 0 - ) - : routeNotFound && - userHasSpecifiedInputOutput && - !routeIsLoading && - !routeIsSyncing - ? jsxRuntime.jsx( - GreyCard, - __assign( - { style: { textAlign: 'center' } }, - { - children: jsxRuntime.jsx( - ThemedText.Main, - __assign( - { mb: '4px' }, - { - children: jsxRuntime.jsx( - macro.Trans, - { children: 'Insufficient liquidity for this trade.' }, - void 0 - ), - } - ), - void 0 - ), - } - ), - void 0 - ) - : showApproveFlow - ? jsxRuntime.jsx( - AutoRow, - __assign( - { style: { flexWrap: 'nowrap', width: '100%' } }, - { - children: jsxRuntime.jsxs( - AutoColumn, - __assign( - { style: { width: '100%' }, gap: '12px' }, - { - children: [ - jsxRuntime.jsx( - ButtonConfirmed, - __assign( - { - onClick: handleApprove, - disabled: - approvalState !== ApprovalState.NOT_APPROVED || - approvalSubmitted || - signatureState === UseERC20PermitState.SIGNED, - width: '100%', - altDisabledStyle: approvalState === ApprovalState.PENDING, - confirmed: - approvalState === ApprovalState.APPROVED || - signatureState === UseERC20PermitState.SIGNED, - }, - { - children: jsxRuntime.jsxs( - AutoRow, - __assign( - { - justify: 'space-between', - style: { flexWrap: 'nowrap' }, - }, - { - children: [ - jsxRuntime.jsxs( - 'span', - __assign( - { - style: { - display: 'flex', - alignItems: 'center', - }, - }, - { - children: [ - jsxRuntime.jsx( - CurrencyLogo, - { - currency: currencies[Field.INPUT], - size: '20px', - style: { - marginRight: '8px', - flexShrink: 0, - }, - }, - void 0 - ), - approvalState === ApprovalState.APPROVED || - signatureState === - UseERC20PermitState.SIGNED - ? jsxRuntime.jsxs( - macro.Trans, - { - children: [ - 'You can now trade ', - (_j = currencies[Field.INPUT]) === - null || _j === void 0 - ? void 0 - : _j.symbol, - ], - }, - void 0 - ) - : jsxRuntime.jsxs( - macro.Trans, - { - children: [ - 'Allow the Uniswap Protocol to use your ', - (_k = currencies[Field.INPUT]) === - null || _k === void 0 - ? void 0 - : _k.symbol, - ], - }, - void 0 - ), - ], - } - ), - void 0 - ), - approvalState === ApprovalState.PENDING - ? jsxRuntime.jsx( - Loader, - { stroke: 'white' }, - void 0 - ) - : (approvalSubmitted && - approvalState === ApprovalState.APPROVED) || - signatureState === UseERC20PermitState.SIGNED - ? jsxRuntime.jsx( - reactFeather.CheckCircle, - { size: '20', color: theme.green1 }, - void 0 - ) - : jsxRuntime.jsx( - MouseoverTooltip, - __assign( - { - text: jsxRuntime.jsxs( - macro.Trans, - { - children: [ - 'You must give the Uniswap smart contracts permission to use your', - ' ', - (_l = currencies[Field.INPUT]) === - null || _l === void 0 - ? void 0 - : _l.symbol, - '. You only have to do this once per token.', - ], - }, - void 0 - ), - }, - { - children: jsxRuntime.jsx( - reactFeather.HelpCircle, - { - size: '20', - color: 'white', - style: { marginLeft: '8px' }, - }, - void 0 - ), - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - } - ), - void 0 - ), - jsxRuntime.jsx( - ButtonError, - __assign( - { - onClick() { - if (isExpertMode) { - handleSwap() - } else { - setSwapState({ - tradeToConfirm: trade, - attemptingTxn: false, - swapErrorMessage: undefined, - showConfirm: true, - txHash: undefined, - }) - } - }, - width: '100%', - id: 'swap-button', - disabled: - !isValid || - routeIsSyncing || - routeIsLoading || - (approvalState !== ApprovalState.APPROVED && - signatureState !== UseERC20PermitState.SIGNED) || - priceImpactTooHigh, - error: isValid && priceImpactSeverity > 2, - }, - { - children: jsxRuntime.jsx( - rebass.Text, - __assign( - { fontSize: 16, fontWeight: 500 }, - { - children: priceImpactTooHigh - ? jsxRuntime.jsx( - macro.Trans, - { children: 'High Price Impact' }, - void 0 - ) - : trade && priceImpactSeverity > 2 - ? jsxRuntime.jsx( - macro.Trans, - { children: 'Swap Anyway' }, - void 0 - ) - : jsxRuntime.jsx( - macro.Trans, - { children: 'Swap' }, - void 0 - ), - } - ), - void 0 - ), - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - } - ), - void 0 - ) - : jsxRuntime.jsx( - ButtonError, - __assign( - { - onClick() { - if (isExpertMode) { - handleSwap() - } else { - setSwapState({ - tradeToConfirm: trade, - attemptingTxn: false, - swapErrorMessage: undefined, - showConfirm: true, - txHash: undefined, - }) - } - }, - id: 'swap-button', - disabled: - !isValid || - routeIsSyncing || - routeIsLoading || - priceImpactTooHigh || - !!swapCallbackError, - error: isValid && priceImpactSeverity > 2 && !swapCallbackError, - }, - { - children: jsxRuntime.jsx( - rebass.Text, - __assign( - { fontSize: 20, fontWeight: 500 }, - { - children: swapInputError - ? swapInputError - : routeIsSyncing || routeIsLoading - ? jsxRuntime.jsx(macro.Trans, { children: 'Swap' }, void 0) - : priceImpactSeverity > 2 - ? jsxRuntime.jsx(macro.Trans, { children: 'Swap Anyway' }, void 0) - : priceImpactTooHigh - ? jsxRuntime.jsx( - macro.Trans, - { children: 'Price Impact Too High' }, - void 0 - ) - : jsxRuntime.jsx(macro.Trans, { children: 'Swap' }, void 0), - } - ), - void 0 - ), - } - ), - void 0 - ), - isExpertMode && swapErrorMessage - ? jsxRuntime.jsx(SwapCallbackError, { error: swapErrorMessage }, void 0) - : null, - ], - }, - void 0 - ), - ], - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - ], - }, - void 0 - ), - jsxRuntime.jsx(AlertWrapper, { children: jsxRuntime.jsx(NetworkAlert, {}, void 0) }, void 0), - jsxRuntime.jsx(SwitchLocaleLink, {}, void 0), - !swapIsUnsupported - ? null - : jsxRuntime.jsx( - UnsupportedCurrencyFooter, - { show: swapIsUnsupported, currencies: [currencies[Field.INPUT], currencies[Field.OUTPUT]] }, - void 0 - ), - ], - }, - void 0 - ) -} -var templateObject_1 +var Web3ProviderNetwork = core.createWeb3ReactRoot(NetworkContextName); +var Providers = function (props) { return (jsxRuntime.jsx(reactRedux.Provider, __assign({ store: store }, { children: jsxRuntime.jsx(reactRouterDom.HashRouter, { children: jsxRuntime.jsx(LanguageProvider, { children: jsxRuntime.jsx(core.Web3ReactProvider, __assign({ getLibrary: getLibrary }, { children: jsxRuntime.jsx(Web3ProviderNetwork, __assign({ getLibrary: getLibrary }, { children: jsxRuntime.jsxs(Blocklist, { children: [jsxRuntime.jsx(Updaters, {}, void 0), jsxRuntime.jsxs(ThemeProvider, { children: [jsxRuntime.jsx(ThemedGlobalStyle, {}, void 0), props.children] }, void 0)] }, void 0) }), void 0) }), void 0) }, void 0) }, void 0) }), void 0)); }; -var $schema = 'http://json-schema.org/draft-07/schema#' -var $id = 'https://uniswap.org/tokenlist.schema.json' -var title = 'Uniswap Token List' -var description = 'Schema for lists of tokens compatible with the Uniswap Interface' +var $schema = "http://json-schema.org/draft-07/schema#"; +var $id = "https://uniswap.org/tokenlist.schema.json"; +var title = "Uniswap Token List"; +var description = "Schema for lists of tokens compatible with the Uniswap Interface"; var definitions = { - Version: { - type: 'object', - description: 'The version of the list, used in change detection', - examples: [ - { - major: 1, - minor: 0, - patch: 0, - }, - ], - additionalProperties: false, - properties: { - major: { - type: 'integer', - description: - 'The major version of the list. Must be incremented when tokens are removed from the list or token addresses are changed.', - minimum: 0, - examples: [1, 2], - }, - minor: { - type: 'integer', - description: 'The minor version of the list. Must be incremented when tokens are added to the list.', - minimum: 0, - examples: [0, 1], - }, - patch: { - type: 'integer', - description: 'The patch version of the list. Must be incremented for any changes to the list.', - minimum: 0, - examples: [0, 1], - }, - }, - required: ['major', 'minor', 'patch'], - }, - TagIdentifier: { - type: 'string', - description: 'The unique identifier of a tag', - minLength: 1, - maxLength: 10, - pattern: '^[\\w]+$', - examples: ['compound', 'stablecoin'], - }, - ExtensionIdentifier: { - type: 'string', - description: 'The name of a token extension property', - minLength: 1, - maxLength: 40, - pattern: '^[\\w]+$', - examples: ['color', 'is_fee_on_transfer', 'aliases'], - }, - ExtensionMap: { - type: 'object', - description: 'An object containing any arbitrary or vendor-specific token metadata', - maxProperties: 10, - propertyNames: { - $ref: '#/definitions/ExtensionIdentifier', - }, - additionalProperties: { - $ref: '#/definitions/ExtensionValue', - }, - examples: [ - { - color: '#000000', - is_verified_by_me: true, - }, - { - 'x-bridged-addresses-by-chain': { - 1: { - bridgeAddress: '0x4200000000000000000000000000000000000010', - tokenAddress: '0x4200000000000000000000000000000000000010', - }, - }, - }, - ], - }, - ExtensionPrimitiveValue: { - anyOf: [ - { - type: 'string', - minLength: 1, - maxLength: 42, - examples: ['#00000'], - }, - { - type: 'boolean', - examples: [true], - }, - { - type: 'number', - examples: [15], - }, - { - type: 'null', - }, - ], - }, - ExtensionValue: { - anyOf: [ - { - $ref: '#/definitions/ExtensionPrimitiveValue', - }, - { - type: 'object', - maxProperties: 10, - propertyNames: { - $ref: '#/definitions/ExtensionIdentifier', - }, - additionalProperties: { - $ref: '#/definitions/ExtensionValueInner0', - }, - }, - ], - }, - ExtensionValueInner0: { - anyOf: [ - { - $ref: '#/definitions/ExtensionPrimitiveValue', - }, - { - type: 'object', - maxProperties: 10, - propertyNames: { - $ref: '#/definitions/ExtensionIdentifier', - }, - additionalProperties: { - $ref: '#/definitions/ExtensionValueInner1', - }, - }, - ], - }, - ExtensionValueInner1: { - anyOf: [ - { - $ref: '#/definitions/ExtensionPrimitiveValue', - }, - ], - }, - TagDefinition: { - type: 'object', - description: 'Definition of a tag that can be associated with a token via its identifier', - additionalProperties: false, - properties: { - name: { - type: 'string', - description: 'The name of the tag', - pattern: '^[ \\w]+$', - minLength: 1, - maxLength: 20, - }, - description: { - type: 'string', - description: 'A user-friendly description of the tag', - pattern: '^[ \\w\\.,:]+$', - minLength: 1, - maxLength: 200, - }, - }, - required: ['name', 'description'], - examples: [ - { - name: 'Stablecoin', - description: 'A token with value pegged to another asset', - }, - ], - }, - TokenInfo: { - type: 'object', - description: 'Metadata for a single token in a token list', - additionalProperties: false, - properties: { - chainId: { - type: 'integer', - description: 'The chain ID of the Ethereum network where this token is deployed', - minimum: 1, - examples: [1, 42], - }, - address: { - type: 'string', - description: 'The checksummed address of the token on the specified chain ID', - pattern: '^0x[a-fA-F0-9]{40}$', - examples: ['0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'], - }, - decimals: { - type: 'integer', - description: 'The number of decimals for the token balance', - minimum: 0, - maximum: 255, - examples: [18], - }, - name: { - type: 'string', - description: 'The name of the token', - minLength: 1, - maxLength: 40, - pattern: "^[ \\w.'+\\-%/À-ÖØ-öø-ÿ:&\\[\\]\\(\\)]+$", - examples: ['USD Coin'], - }, - symbol: { - type: 'string', - description: 'The symbol for the token; must be alphanumeric', - pattern: '^[a-zA-Z0-9+\\-%/$.]+$', - minLength: 1, - maxLength: 20, - examples: ['USDC'], - }, - logoURI: { - type: 'string', - description: - 'A URI to the token logo asset; if not set, interface will attempt to find a logo based on the token address; suggest SVG or PNG of size 64x64', - format: 'uri', - examples: ['ipfs://QmXfzKRvjZz3u5JRgC4v5mGVbm9ahrUiB4DgzHBsnWbTMM'], - }, - tags: { - type: 'array', - description: 'An array of tag identifiers associated with the token; tags are defined at the list level', - items: { - $ref: '#/definitions/TagIdentifier', - }, - maxItems: 10, - examples: ['stablecoin', 'compound'], - }, - extensions: { - $ref: '#/definitions/ExtensionMap', - }, - }, - required: ['chainId', 'address', 'decimals', 'name', 'symbol'], - }, -} -var type = 'object' -var additionalProperties = false ->>>>>>> ee1338c81a2c73d9938e225b8b96abd2fc298260 + Version: { + type: "object", + description: "The version of the list, used in change detection", + examples: [ + { + major: 1, + minor: 0, + patch: 0 + } + ], + additionalProperties: false, + properties: { + major: { + type: "integer", + description: "The major version of the list. Must be incremented when tokens are removed from the list or token addresses are changed.", + minimum: 0, + examples: [ + 1, + 2 + ] + }, + minor: { + type: "integer", + description: "The minor version of the list. Must be incremented when tokens are added to the list.", + minimum: 0, + examples: [ + 0, + 1 + ] + }, + patch: { + type: "integer", + description: "The patch version of the list. Must be incremented for any changes to the list.", + minimum: 0, + examples: [ + 0, + 1 + ] + } + }, + required: [ + "major", + "minor", + "patch" + ] + }, + TagIdentifier: { + type: "string", + description: "The unique identifier of a tag", + minLength: 1, + maxLength: 10, + pattern: "^[\\w]+$", + examples: [ + "compound", + "stablecoin" + ] + }, + ExtensionIdentifier: { + type: "string", + description: "The name of a token extension property", + minLength: 1, + maxLength: 40, + pattern: "^[\\w]+$", + examples: [ + "color", + "is_fee_on_transfer", + "aliases" + ] + }, + ExtensionMap: { + type: "object", + description: "An object containing any arbitrary or vendor-specific token metadata", + maxProperties: 10, + propertyNames: { + $ref: "#/definitions/ExtensionIdentifier" + }, + additionalProperties: { + $ref: "#/definitions/ExtensionValue" + }, + examples: [ + { + color: "#000000", + is_verified_by_me: true + }, + { + "x-bridged-addresses-by-chain": { + "1": { + bridgeAddress: "0x4200000000000000000000000000000000000010", + tokenAddress: "0x4200000000000000000000000000000000000010" + } + } + } + ] + }, + ExtensionPrimitiveValue: { + anyOf: [ + { + type: "string", + minLength: 1, + maxLength: 42, + examples: [ + "#00000" + ] + }, + { + type: "boolean", + examples: [ + true + ] + }, + { + type: "number", + examples: [ + 15 + ] + }, + { + type: "null" + } + ] + }, + ExtensionValue: { + anyOf: [ + { + $ref: "#/definitions/ExtensionPrimitiveValue" + }, + { + type: "object", + maxProperties: 10, + propertyNames: { + $ref: "#/definitions/ExtensionIdentifier" + }, + additionalProperties: { + $ref: "#/definitions/ExtensionValueInner0" + } + } + ] + }, + ExtensionValueInner0: { + anyOf: [ + { + $ref: "#/definitions/ExtensionPrimitiveValue" + }, + { + type: "object", + maxProperties: 10, + propertyNames: { + $ref: "#/definitions/ExtensionIdentifier" + }, + additionalProperties: { + $ref: "#/definitions/ExtensionValueInner1" + } + } + ] + }, + ExtensionValueInner1: { + anyOf: [ + { + $ref: "#/definitions/ExtensionPrimitiveValue" + } + ] + }, + TagDefinition: { + type: "object", + description: "Definition of a tag that can be associated with a token via its identifier", + additionalProperties: false, + properties: { + name: { + type: "string", + description: "The name of the tag", + pattern: "^[ \\w]+$", + minLength: 1, + maxLength: 20 + }, + description: { + type: "string", + description: "A user-friendly description of the tag", + pattern: "^[ \\w\\.,:]+$", + minLength: 1, + maxLength: 200 + } + }, + required: [ + "name", + "description" + ], + examples: [ + { + name: "Stablecoin", + description: "A token with value pegged to another asset" + } + ] + }, + TokenInfo: { + type: "object", + description: "Metadata for a single token in a token list", + additionalProperties: false, + properties: { + chainId: { + type: "integer", + description: "The chain ID of the Ethereum network where this token is deployed", + minimum: 1, + examples: [ + 1, + 42 + ] + }, + address: { + type: "string", + description: "The checksummed address of the token on the specified chain ID", + pattern: "^0x[a-fA-F0-9]{40}$", + examples: [ + "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48" + ] + }, + decimals: { + type: "integer", + description: "The number of decimals for the token balance", + minimum: 0, + maximum: 255, + examples: [ + 18 + ] + }, + name: { + type: "string", + description: "The name of the token", + minLength: 1, + maxLength: 40, + pattern: "^[ \\w.'+\\-%/À-ÖØ-öø-ÿ:&\\[\\]\\(\\)]+$", + examples: [ + "USD Coin" + ] + }, + symbol: { + type: "string", + description: "The symbol for the token; must be alphanumeric", + pattern: "^[a-zA-Z0-9+\\-%/$.]+$", + minLength: 1, + maxLength: 20, + examples: [ + "USDC" + ] + }, + logoURI: { + type: "string", + description: "A URI to the token logo asset; if not set, interface will attempt to find a logo based on the token address; suggest SVG or PNG of size 64x64", + format: "uri", + examples: [ + "ipfs://QmXfzKRvjZz3u5JRgC4v5mGVbm9ahrUiB4DgzHBsnWbTMM" + ] + }, + tags: { + type: "array", + description: "An array of tag identifiers associated with the token; tags are defined at the list level", + items: { + $ref: "#/definitions/TagIdentifier" + }, + maxItems: 10, + examples: [ + "stablecoin", + "compound" + ] + }, + extensions: { + $ref: "#/definitions/ExtensionMap" + } + }, + required: [ + "chainId", + "address", + "decimals", + "name", + "symbol" + ] + } +}; +var type = "object"; +var additionalProperties = false; var properties = { - name: { - type: 'string', - description: 'The name of the token list', - minLength: 1, - maxLength: 20, - pattern: '^[\\w ]+$', - examples: ['My Token List'], - }, - timestamp: { - type: 'string', - format: 'date-time', - description: 'The timestamp of this list version; i.e. when this immutable version of the list was created', - }, - version: { - $ref: '#/definitions/Version', - }, - tokens: { - type: 'array', - description: 'The list of tokens included in the list', - items: { - $ref: '#/definitions/TokenInfo', - }, - minItems: 1, - maxItems: 10000, - }, - keywords: { - type: 'array', - description: 'Keywords associated with the contents of the list; may be used in list discoverability', - items: { - type: 'string', - description: 'A keyword to describe the contents of the list', - minLength: 1, - maxLength: 20, - pattern: '^[\\w ]+$', - examples: ['compound', 'lending', 'personal tokens'], - }, - maxItems: 20, - uniqueItems: true, - }, - tags: { - type: 'object', - description: 'A mapping of tag identifiers to their name and description', - propertyNames: { - $ref: '#/definitions/TagIdentifier', - }, - additionalProperties: { - $ref: '#/definitions/TagDefinition', - }, - maxProperties: 20, - examples: [ - { - stablecoin: { - name: 'Stablecoin', - description: 'A token with value pegged to another asset', - }, - }, - ], - }, - logoURI: { - type: 'string', - description: 'A URI for the logo of the token list; prefer SVG or PNG of size 256x256', - format: 'uri', - examples: ['ipfs://QmXfzKRvjZz3u5JRgC4v5mGVbm9ahrUiB4DgzHBsnWbTMM'], - }, -} -var required = ['name', 'timestamp', 'version', 'tokens'] + name: { + type: "string", + description: "The name of the token list", + minLength: 1, + maxLength: 20, + pattern: "^[\\w ]+$", + examples: [ + "My Token List" + ] + }, + timestamp: { + type: "string", + format: "date-time", + description: "The timestamp of this list version; i.e. when this immutable version of the list was created" + }, + version: { + $ref: "#/definitions/Version" + }, + tokens: { + type: "array", + description: "The list of tokens included in the list", + items: { + $ref: "#/definitions/TokenInfo" + }, + minItems: 1, + maxItems: 10000 + }, + keywords: { + type: "array", + description: "Keywords associated with the contents of the list; may be used in list discoverability", + items: { + type: "string", + description: "A keyword to describe the contents of the list", + minLength: 1, + maxLength: 20, + pattern: "^[\\w ]+$", + examples: [ + "compound", + "lending", + "personal tokens" + ] + }, + maxItems: 20, + uniqueItems: true + }, + tags: { + type: "object", + description: "A mapping of tag identifiers to their name and description", + propertyNames: { + $ref: "#/definitions/TagIdentifier" + }, + additionalProperties: { + $ref: "#/definitions/TagDefinition" + }, + maxProperties: 20, + examples: [ + { + stablecoin: { + name: "Stablecoin", + description: "A token with value pegged to another asset" + } + } + ] + }, + logoURI: { + type: "string", + description: "A URI for the logo of the token list; prefer SVG or PNG of size 256x256", + format: "uri", + examples: [ + "ipfs://QmXfzKRvjZz3u5JRgC4v5mGVbm9ahrUiB4DgzHBsnWbTMM" + ] + } +}; +var required = [ + "name", + "timestamp", + "version", + "tokens" +]; var tokenlist_schema = { -<<<<<<< HEAD $schema: $schema, $id: $id, title: title, @@ -39726,13 +21014,6 @@ var tokenlist_schema$1 = /*#__PURE__*/Object.freeze({ 'default': tokenlist_schema }); -var fortmatic=function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n});},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0});},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=3)}([function(e,t){e.exports=function(e){return e&&e.__esModule?e:{default:e}};},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")};},function(e,t,r){function n(){return Math.floor(9e4*Math.random())+1e4}Object.defineProperty(t,"__esModule",{value:!0}),t.sendAsyncWrapper=function(e,t){var r=this;return new Promise(function(o,a){r.sendAsync({jsonrpc:"2.0",id:n(),method:e,params:t||[]},function(e,t){e?a(e):o(t.result);});})},t.sendFortmaticAsyncWrapper=function(e){var t=this;return new Promise(function(r,n){t.getProvider().sendFortmaticAsync(e,function(e,t){e?n(e):r(t?t.result:{});});})},t.randomId=n,t.findExistingResponse=function(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},t=new v(m);return t.params=[e],i.sendFortmaticAsyncWrapper.call(g,t)};};var v=function e(t,r){(0, o.default)(this,e),this.id=(0, i.randomId)(),this.method=t,this.params=r?[r]:[{}];};},function(e,t,r){var n=r(0);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=n(r(6)),a=n(r(9)),i=n(r(1)),s=n(r(10)),c=r(11),u=n(r(12)),l=r(2),f=function(){function e(t,r){if((0, i.default)(this,e),this.fortmaticClient=t,this.requests={},this.queue=[],this.account=null,this.network=null,this.isFortmatic=!0,this.overlayReady=!1,this.isLoggedIn=!1,this.postMessages={FORTMATIC_HANDLE_BATCH_REQUEST:"FORTMATIC_HANDLE_BATCH_REQUEST",FORTMATIC_HANDLE_REQUEST:"FORTMATIC_HANDLE_REQUEST",FORTMATIC_HANDLE_FORTMATIC_REQUEST:"FORTMATIC_HANDLE_FORTMATIC_REQUEST",FORTMATIC_HANDLE_RESPONSE:"FORTMATIC_HANDLE_RESPONSE",FORTMATIC_OVERLAY_READY:"FORTMATIC_OVERLAY_READY",FORTMATIC_SHOW_OVERLAY:"FORTMATIC_SHOW_OVERLAY",FORTMATIC_HIDE_OVERLAY:"FORTMATIC_HIDE_OVERLAY",FORTMATIC_USER_DENIED:"FORTMATIC_USER_DENIED",FORTMATIC_USER_LOGOUT:"FORTMATIC_USER_LOGOUT",FORTMATIC_UNAUTHORIZED_API_KEY:"FORTMATIC_UNAUTHORIZED_API_KEY"},!r.API_KEY)throw new Error("Please provide a Fortmatic API key that you acquired from the developer dashboard.");this.options={API_KEY:r.API_KEY,ETH_NETWORK:r.ETH_NETWORK,DOMAIN_ORIGIN:window.location?window.location.origin:"",version:c.version},this.queryParams=btoa(JSON.stringify(this.options)),this.constructPostMessage(),this.overlay=this.createOverlay(),this.listenMessage();}return (0, s.default)(e,[{key:"constructPostMessage",value:function(){var e=this;Object.keys(this.postMessages).map(function(t){e.postMessages[t]+="-".concat(e.queryParams);});}},{key:"createOverlay",value:function(){var e=this;return new Promise(function(t,r){var n=function(){if(function(){var t=!0,r=!1,n=void 0;try{for(var o,a=document.getElementsByClassName("fortmatic-iframe")[Symbol.iterator]();!(t=(o=a.next()).done);t=!0)if(o.value.src.includes(e.queryParams))return !1}catch(e){r=!0,n=e;}finally{try{t||null==a.return||a.return();}finally{if(r)throw n}}return !0}()){var r=document.createElement("style");r.innerHTML=u.default.css,r.type="text/css",document.head.appendChild(r);var n=document.createElement("iframe");n.className="fortmatic-iframe",n.src="".concat(e.fortmaticClient,"/send?params=").concat(e.queryParams),document.body.appendChild(n);var o=document.createElement("img");o.src="https://static.fortmatic.com/assets/trans.gif",document.body.appendChild(o),t({iframe:n});}else console.error("Fortmatic: Duplicate instances found.");};["loaded","interactive","complete"].indexOf(document.readyState)>-1?n():window.addEventListener("load",n.bind(e),!1);})}},{key:"showOverlay",value:function(){var e=(0, a.default)(o.default.mark(function e(){return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.overlay;case 2:e.sent.iframe.style.display="block";case 4:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"hideOverlay",value:function(){var e=(0, a.default)(o.default.mark(function e(){return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.overlay;case 2:e.sent.iframe.style.display="none";case 4:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"sendAsync",value:function(e,t){e.length>0?this.enqueue({payload:{id:(0, l.randomId)(),batch:e.map(function(e){return e.id=(0, l.randomId)(),e}),method:"eth_batchRequest"},cb:t}):this.enqueue({payload:e,cb:t});}},{key:"sendFortmaticAsync",value:function(e,t){this.enqueue({payload:e,cb:t,isNative:!0});}},{key:"send",value:function(e,t){if("string"==typeof e)return l.sendAsyncWrapper.call(this,e,t);if(!t){console.warn("Non-async web3 methods will be deprecated in web3 > 1.0, and are not supported by the Fortmatic provider. An async method to be used instead."),this.sendAsync(e,function(){});var r={};switch(e.method){case"eth_accounts":r=this.account?[this.account]:[];break;case"eth_coinbase":r=this.account;break;case"net_version":r=this.network||(this.options.API_KEY.startsWith("pk_live")?1:4);break;case"eth_uninstallFilter":r=!0;break;default:r={};}return {id:e.id,jsonrpc:e.jsonrpc,result:r}}this.sendAsync(e,t);}},{key:"enqueue",value:function(e){this.queue.push(e),this.overlayReady&&this.dequeue();}},{key:"dequeue",value:function(){var e=(0, a.default)(o.default.mark(function e(){var t,r,n,a=this;return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(0!==this.queue.length){e.next=2;break}return e.abrupt("return");case 2:if(!(t=this.queue.shift())){e.next=11;break}return r=t.payload,n=t.cb,r.id=(0, l.randomId)(),e.next=9,this.postMessage(t.isNative?this.postMessages.FORTMATIC_HANDLE_FORTMATIC_REQUEST:this.postMessages.FORTMATIC_HANDLE_REQUEST,t.payload);case 9:r.batch&&r.batch.length>0?(r.batch.forEach(function(e){a.requests[e.id]={parentId:r.id,payload:e,cb:function(e,t){var n=a.requests[r.id].batchResponse;if(e&&e.response&&!(0, l.findExistingResponse)(n,e.response.id))throw n.push({jsonrpc:"2.0",id:e.response.id,error:{code:e.response.code,message:e.response.message}}),a.requests[r.id].cb(null,n),e.response;if(t&&t.result&&!(0, l.findExistingResponse)(n,t.id))return n.push(t);throw new Error("Fortmatic: unexpected callback behavior")}};}),this.requests[r.id]={payload:r,cb:n,batchResponse:[]}):this.requests[r.id]={payload:r,cb:n},this.dequeue();case 11:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"postMessage",value:function(){var e=(0, a.default)(o.default.mark(function e(t,r){var n;return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.overlay;case 2:if(!(n=e.sent).iframe.contentWindow){e.next=7;break}n.iframe.contentWindow.postMessage({msgType:t,payload:r},"*"),e.next=8;break;case 7:throw new Error("Fortmatic: Modal is not ready.");case 8:case"end":return e.stop()}},e,this)}));return function(t,r){return e.apply(this,arguments)}}()},{key:"enable",value:function(){return l.sendAsyncWrapper.call(this,"eth_accounts")}},{key:"listenMessage",value:function(){var e=this;window.addEventListener("message",function(t){if(t.origin===e.fortmaticClient){var r=t.data.response?t.data.response.id:null;switch(t.data.msgType){case e.postMessages.FORTMATIC_OVERLAY_READY:e.overlayReady=!0,e.dequeue();break;case e.postMessages.FORTMATIC_HANDLE_RESPONSE:try{e.requests[r].cb(null,t.data.response);var n=e.requests[r].parentId;n&&e.requests[n].payload.batch.length===e.requests[n].batchResponse.length&&e.requests[n].cb(null,e.requests[n].batchResponse),"eth_accounts"===e.requests[r].payload.method?e.account=t.data.response.result[0]:"eth_coinbase"===e.requests[r].payload.method?e.account=t.data.response.result:"net_version"===e.requests[r].payload.method&&(e.network=t.data.response.result);}catch(e){}e.isLoggedIn=!0,e.dequeue();break;case e.postMessages.FORTMATIC_HIDE_OVERLAY:e.hideOverlay();break;case e.postMessages.FORTMATIC_SHOW_OVERLAY:e.showOverlay();break;case e.postMessages.FORTMATIC_USER_LOGOUT:e.account=null,e.network=null,e.isLoggedIn=!1;break;case e.postMessages.FORTMATIC_UNAUTHORIZED_API_KEY:throw e.overlayReady=!1,new Error("Given API key is not authorized to access the resource.");case e.postMessages.FORTMATIC_USER_DENIED:if(r){var o=t.data.response&&t.data.response.message?t.data.response.message:"Fortmatic: Modal was closed without executing action!",a=t.data.response&&t.data.response.code?t.data.response.code:1;e.requests[r].cb({message:o,code:a,response:t.data.response});}else e.queue.forEach(function(e){return e.cb({message:"Fortmatic: Modal was closed without executing action!",code:1})});e.dequeue();}}});}}]),e}();t.default=f;},function(e,t,r){e.exports=r(7);},function(e,t,r){var n=function(){return this||"object"==typeof self&&self}()||Function("return this")(),o=n.regeneratorRuntime&&Object.getOwnPropertyNames(n).indexOf("regeneratorRuntime")>=0,a=o&&n.regeneratorRuntime;if(n.regeneratorRuntime=void 0,e.exports=r(8),o)n.regeneratorRuntime=a;else try{delete n.regeneratorRuntime;}catch(e){n.regeneratorRuntime=void 0;}},function(e,t){!function(t){var r,n=Object.prototype,o=n.hasOwnProperty,a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",s=a.asyncIterator||"@@asyncIterator",c=a.toStringTag||"@@toStringTag",u="object"==typeof e,l=t.regeneratorRuntime;if(l)u&&(e.exports=l);else {(l=t.regeneratorRuntime=u?e.exports:{}).wrap=_;var f="suspendedStart",d="suspendedYield",h="executing",p="completed",m={},y={};y[i]=function(){return this};var v=Object.getPrototypeOf,g=v&&v(v(L([])));g&&g!==n&&o.call(g,i)&&(y=g);var b=A.prototype=w.prototype=Object.create(y);T.prototype=b.constructor=A,A.constructor=T,A[c]=T.displayName="GeneratorFunction",l.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return !!t&&(t===T||"GeneratorFunction"===(t.displayName||t.name))},l.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,A):(e.__proto__=A,c in e||(e[c]="GeneratorFunction")),e.prototype=Object.create(b),e},l.awrap=function(e){return {__await:e}},O(R.prototype),R.prototype[s]=function(){return this},l.AsyncIterator=R,l.async=function(e,t,r,n){var o=new R(_(e,t,r,n));return l.isGeneratorFunction(t)?o:o.next().then(function(e){return e.done?e.value:o.next()})},O(b),b[c]="Generator",b[i]=function(){return this},b.toString=function(){return "[object Generator]"},l.keys=function(e){var t=[];for(var r in e)t.push(r);return t.reverse(),function r(){for(;t.length;){var n=t.pop();if(n in e)return r.value=n,r.done=!1,r}return r.done=!0,r}},l.values=L,F.prototype={constructor:F,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=r,this.done=!1,this.delegate=null,this.method="next",this.arg=r,this.tryEntries.forEach(M),!e)for(var t in this)"t"===t.charAt(0)&&o.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=r);},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function n(n,o){return s.type="throw",s.arg=e,t.next=n,o&&(t.method="next",t.arg=r),!!o}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],s=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var c=o.call(i,"catchLoc"),u=o.call(i,"finallyLoc");if(c&&u){if(this.prev=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&o.call(n,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),M(r),m}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var o=n.arg;M(r);}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:L(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=r),m}};}function _(e,t,r,n){var o=t&&t.prototype instanceof w?t:w,a=Object.create(o.prototype),i=new F(n||[]);return a._invoke=function(e,t,r){var n=f;return function(o,a){if(n===h)throw new Error("Generator is already running");if(n===p){if("throw"===o)throw a;return k()}for(r.method=o,r.arg=a;;){var i=r.delegate;if(i){var s=I(i,r);if(s){if(s===m)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(n===f)throw n=p,r.arg;r.dispatchException(r.arg);}else "return"===r.method&&r.abrupt("return",r.arg);n=h;var c=E(e,t,r);if("normal"===c.type){if(n=r.done?p:d,c.arg===m)continue;return {value:c.arg,done:r.done}}"throw"===c.type&&(n=p,r.method="throw",r.arg=c.arg);}}}(e,r,i),a}function E(e,t,r){try{return {type:"normal",arg:e.call(t,r)}}catch(e){return {type:"throw",arg:e}}}function w(){}function T(){}function A(){}function O(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)};});}function R(e){var t;this._invoke=function(r,n){function a(){return new Promise(function(t,a){!function t(r,n,a,i){var s=E(e[r],e,n);if("throw"!==s.type){var c=s.arg,u=c.value;return u&&"object"==typeof u&&o.call(u,"__await")?Promise.resolve(u.__await).then(function(e){t("next",e,a,i);},function(e){t("throw",e,a,i);}):Promise.resolve(u).then(function(e){c.value=e,a(c);},function(e){return t("throw",e,a,i)})}i(s.arg);}(r,n,t,a);})}return t=t?t.then(a,a):a()};}function I(e,t){var n=e.iterator[t.method];if(n===r){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=r,I(e,t),"throw"===t.method))return m;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method");}return m}var o=E(n,e.iterator,t.arg);if("throw"===o.type)return t.method="throw",t.arg=o.arg,t.delegate=null,m;var a=o.arg;return a?a.done?(t[e.resultName]=a.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=r),t.delegate=null,m):a:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,m)}function x(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t);}function M(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t;}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(x,this),this.reset(!0);}function L(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n (https://fortmatic.com/)",license:"MIT",repository:{type:"git",url:"https://github.com/fortmatic/fortmatic-js"},keywords:["Auth","Login","Web3","Crypto","Ethereum","MetaMask","Wallet","Blockchain","Dapp"],homepage:"https://www.fortmatic.com",ava:{require:["@babel/register"],files:["test/**/*.spec.js"],babel:{testOptions:{presets:["@babel/env"],plugins:["@babel/plugin-proposal-function-bind","@babel/plugin-transform-runtime"]}},verbose:!0},nyc:{all:!1,"check-coverage":!0,"per-file":!0,lines:80,statements:80,functions:80,branches:80,include:["src/**/*.js"],exclude:["*/style.js"],require:[],reporter:["html","lcov"]},dependencies:{"@babel/runtime":"7.3.4"},devDependencies:{"@babel/core":"7.3.4","@babel/plugin-proposal-function-bind":"7.2.0","@babel/plugin-transform-modules-commonjs":"7.2.0","@babel/plugin-transform-runtime":"7.3.4","@babel/preset-env":"7.3.4","@babel/register":"7.0.0",ava:"2.2.0","babel-eslint":"10.0.1","babel-loader":"8.0.5",eslint:"5.9.0",lodash:"4.17.11",nyc:"13.1.0",sinon:"7.1.1",webpack:"4.26.1","webpack-cli":"3.1.2"}};},function(e,t,r){t.css="\n .fortmatic-iframe {\n display: none;\n position: fixed;\n top: 0;\n right: 0;\n width: 100%;\n height: 100%;\n border: none;\n border-radius: 0;\n z-index: 2147483647;\n }\n";}]); - -var fortmatic$1 = /*#__PURE__*/Object.freeze(/*#__PURE__*/_mergeNamespaces({ - __proto__: null, - 'default': fortmatic -}, [fortmatic])); - // from routing-api (https://github.com/Uniswap/routing-api/blob/main/lib/handlers/quote/quote.ts#L243-L311) function transformSwapRouteToGetQuoteResult(type, amount, _a) { var e_1, _b; @@ -39943,1329 +21224,17 @@ var index = /*#__PURE__*/Object.freeze({ getQuote: getQuote }); +var fortmatic=function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n});},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0});},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=3)}([function(e,t){e.exports=function(e){return e&&e.__esModule?e:{default:e}};},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")};},function(e,t,r){function n(){return Math.floor(9e4*Math.random())+1e4}Object.defineProperty(t,"__esModule",{value:!0}),t.sendAsyncWrapper=function(e,t){var r=this;return new Promise(function(o,a){r.sendAsync({jsonrpc:"2.0",id:n(),method:e,params:t||[]},function(e,t){e?a(e):o(t.result);});})},t.sendFortmaticAsyncWrapper=function(e){var t=this;return new Promise(function(r,n){t.getProvider().sendFortmaticAsync(e,function(e,t){e?n(e):r(t?t.result:{});});})},t.randomId=n,t.findExistingResponse=function(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},t=new v(m);return t.params=[e],i.sendFortmaticAsyncWrapper.call(g,t)};};var v=function e(t,r){(0, o.default)(this,e),this.id=(0, i.randomId)(),this.method=t,this.params=r?[r]:[{}];};},function(e,t,r){var n=r(0);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=n(r(6)),a=n(r(9)),i=n(r(1)),s=n(r(10)),c=r(11),u=n(r(12)),l=r(2),f=function(){function e(t,r){if((0, i.default)(this,e),this.fortmaticClient=t,this.requests={},this.queue=[],this.account=null,this.network=null,this.isFortmatic=!0,this.overlayReady=!1,this.isLoggedIn=!1,this.postMessages={FORTMATIC_HANDLE_BATCH_REQUEST:"FORTMATIC_HANDLE_BATCH_REQUEST",FORTMATIC_HANDLE_REQUEST:"FORTMATIC_HANDLE_REQUEST",FORTMATIC_HANDLE_FORTMATIC_REQUEST:"FORTMATIC_HANDLE_FORTMATIC_REQUEST",FORTMATIC_HANDLE_RESPONSE:"FORTMATIC_HANDLE_RESPONSE",FORTMATIC_OVERLAY_READY:"FORTMATIC_OVERLAY_READY",FORTMATIC_SHOW_OVERLAY:"FORTMATIC_SHOW_OVERLAY",FORTMATIC_HIDE_OVERLAY:"FORTMATIC_HIDE_OVERLAY",FORTMATIC_USER_DENIED:"FORTMATIC_USER_DENIED",FORTMATIC_USER_LOGOUT:"FORTMATIC_USER_LOGOUT",FORTMATIC_UNAUTHORIZED_API_KEY:"FORTMATIC_UNAUTHORIZED_API_KEY"},!r.API_KEY)throw new Error("Please provide a Fortmatic API key that you acquired from the developer dashboard.");this.options={API_KEY:r.API_KEY,ETH_NETWORK:r.ETH_NETWORK,DOMAIN_ORIGIN:window.location?window.location.origin:"",version:c.version},this.queryParams=btoa(JSON.stringify(this.options)),this.constructPostMessage(),this.overlay=this.createOverlay(),this.listenMessage();}return (0, s.default)(e,[{key:"constructPostMessage",value:function(){var e=this;Object.keys(this.postMessages).map(function(t){e.postMessages[t]+="-".concat(e.queryParams);});}},{key:"createOverlay",value:function(){var e=this;return new Promise(function(t,r){var n=function(){if(function(){var t=!0,r=!1,n=void 0;try{for(var o,a=document.getElementsByClassName("fortmatic-iframe")[Symbol.iterator]();!(t=(o=a.next()).done);t=!0)if(o.value.src.includes(e.queryParams))return !1}catch(e){r=!0,n=e;}finally{try{t||null==a.return||a.return();}finally{if(r)throw n}}return !0}()){var r=document.createElement("style");r.innerHTML=u.default.css,r.type="text/css",document.head.appendChild(r);var n=document.createElement("iframe");n.className="fortmatic-iframe",n.src="".concat(e.fortmaticClient,"/send?params=").concat(e.queryParams),document.body.appendChild(n);var o=document.createElement("img");o.src="https://static.fortmatic.com/assets/trans.gif",document.body.appendChild(o),t({iframe:n});}else console.error("Fortmatic: Duplicate instances found.");};["loaded","interactive","complete"].indexOf(document.readyState)>-1?n():window.addEventListener("load",n.bind(e),!1);})}},{key:"showOverlay",value:function(){var e=(0, a.default)(o.default.mark(function e(){return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.overlay;case 2:e.sent.iframe.style.display="block";case 4:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"hideOverlay",value:function(){var e=(0, a.default)(o.default.mark(function e(){return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.overlay;case 2:e.sent.iframe.style.display="none";case 4:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"sendAsync",value:function(e,t){e.length>0?this.enqueue({payload:{id:(0, l.randomId)(),batch:e.map(function(e){return e.id=(0, l.randomId)(),e}),method:"eth_batchRequest"},cb:t}):this.enqueue({payload:e,cb:t});}},{key:"sendFortmaticAsync",value:function(e,t){this.enqueue({payload:e,cb:t,isNative:!0});}},{key:"send",value:function(e,t){if("string"==typeof e)return l.sendAsyncWrapper.call(this,e,t);if(!t){console.warn("Non-async web3 methods will be deprecated in web3 > 1.0, and are not supported by the Fortmatic provider. An async method to be used instead."),this.sendAsync(e,function(){});var r={};switch(e.method){case"eth_accounts":r=this.account?[this.account]:[];break;case"eth_coinbase":r=this.account;break;case"net_version":r=this.network||(this.options.API_KEY.startsWith("pk_live")?1:4);break;case"eth_uninstallFilter":r=!0;break;default:r={};}return {id:e.id,jsonrpc:e.jsonrpc,result:r}}this.sendAsync(e,t);}},{key:"enqueue",value:function(e){this.queue.push(e),this.overlayReady&&this.dequeue();}},{key:"dequeue",value:function(){var e=(0, a.default)(o.default.mark(function e(){var t,r,n,a=this;return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(0!==this.queue.length){e.next=2;break}return e.abrupt("return");case 2:if(!(t=this.queue.shift())){e.next=11;break}return r=t.payload,n=t.cb,r.id=(0, l.randomId)(),e.next=9,this.postMessage(t.isNative?this.postMessages.FORTMATIC_HANDLE_FORTMATIC_REQUEST:this.postMessages.FORTMATIC_HANDLE_REQUEST,t.payload);case 9:r.batch&&r.batch.length>0?(r.batch.forEach(function(e){a.requests[e.id]={parentId:r.id,payload:e,cb:function(e,t){var n=a.requests[r.id].batchResponse;if(e&&e.response&&!(0, l.findExistingResponse)(n,e.response.id))throw n.push({jsonrpc:"2.0",id:e.response.id,error:{code:e.response.code,message:e.response.message}}),a.requests[r.id].cb(null,n),e.response;if(t&&t.result&&!(0, l.findExistingResponse)(n,t.id))return n.push(t);throw new Error("Fortmatic: unexpected callback behavior")}};}),this.requests[r.id]={payload:r,cb:n,batchResponse:[]}):this.requests[r.id]={payload:r,cb:n},this.dequeue();case 11:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"postMessage",value:function(){var e=(0, a.default)(o.default.mark(function e(t,r){var n;return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.overlay;case 2:if(!(n=e.sent).iframe.contentWindow){e.next=7;break}n.iframe.contentWindow.postMessage({msgType:t,payload:r},"*"),e.next=8;break;case 7:throw new Error("Fortmatic: Modal is not ready.");case 8:case"end":return e.stop()}},e,this)}));return function(t,r){return e.apply(this,arguments)}}()},{key:"enable",value:function(){return l.sendAsyncWrapper.call(this,"eth_accounts")}},{key:"listenMessage",value:function(){var e=this;window.addEventListener("message",function(t){if(t.origin===e.fortmaticClient){var r=t.data.response?t.data.response.id:null;switch(t.data.msgType){case e.postMessages.FORTMATIC_OVERLAY_READY:e.overlayReady=!0,e.dequeue();break;case e.postMessages.FORTMATIC_HANDLE_RESPONSE:try{e.requests[r].cb(null,t.data.response);var n=e.requests[r].parentId;n&&e.requests[n].payload.batch.length===e.requests[n].batchResponse.length&&e.requests[n].cb(null,e.requests[n].batchResponse),"eth_accounts"===e.requests[r].payload.method?e.account=t.data.response.result[0]:"eth_coinbase"===e.requests[r].payload.method?e.account=t.data.response.result:"net_version"===e.requests[r].payload.method&&(e.network=t.data.response.result);}catch(e){}e.isLoggedIn=!0,e.dequeue();break;case e.postMessages.FORTMATIC_HIDE_OVERLAY:e.hideOverlay();break;case e.postMessages.FORTMATIC_SHOW_OVERLAY:e.showOverlay();break;case e.postMessages.FORTMATIC_USER_LOGOUT:e.account=null,e.network=null,e.isLoggedIn=!1;break;case e.postMessages.FORTMATIC_UNAUTHORIZED_API_KEY:throw e.overlayReady=!1,new Error("Given API key is not authorized to access the resource.");case e.postMessages.FORTMATIC_USER_DENIED:if(r){var o=t.data.response&&t.data.response.message?t.data.response.message:"Fortmatic: Modal was closed without executing action!",a=t.data.response&&t.data.response.code?t.data.response.code:1;e.requests[r].cb({message:o,code:a,response:t.data.response});}else e.queue.forEach(function(e){return e.cb({message:"Fortmatic: Modal was closed without executing action!",code:1})});e.dequeue();}}});}}]),e}();t.default=f;},function(e,t,r){e.exports=r(7);},function(e,t,r){var n=function(){return this||"object"==typeof self&&self}()||Function("return this")(),o=n.regeneratorRuntime&&Object.getOwnPropertyNames(n).indexOf("regeneratorRuntime")>=0,a=o&&n.regeneratorRuntime;if(n.regeneratorRuntime=void 0,e.exports=r(8),o)n.regeneratorRuntime=a;else try{delete n.regeneratorRuntime;}catch(e){n.regeneratorRuntime=void 0;}},function(e,t){!function(t){var r,n=Object.prototype,o=n.hasOwnProperty,a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",s=a.asyncIterator||"@@asyncIterator",c=a.toStringTag||"@@toStringTag",u="object"==typeof e,l=t.regeneratorRuntime;if(l)u&&(e.exports=l);else {(l=t.regeneratorRuntime=u?e.exports:{}).wrap=_;var f="suspendedStart",d="suspendedYield",h="executing",p="completed",m={},y={};y[i]=function(){return this};var v=Object.getPrototypeOf,g=v&&v(v(L([])));g&&g!==n&&o.call(g,i)&&(y=g);var b=A.prototype=w.prototype=Object.create(y);T.prototype=b.constructor=A,A.constructor=T,A[c]=T.displayName="GeneratorFunction",l.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return !!t&&(t===T||"GeneratorFunction"===(t.displayName||t.name))},l.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,A):(e.__proto__=A,c in e||(e[c]="GeneratorFunction")),e.prototype=Object.create(b),e},l.awrap=function(e){return {__await:e}},O(R.prototype),R.prototype[s]=function(){return this},l.AsyncIterator=R,l.async=function(e,t,r,n){var o=new R(_(e,t,r,n));return l.isGeneratorFunction(t)?o:o.next().then(function(e){return e.done?e.value:o.next()})},O(b),b[c]="Generator",b[i]=function(){return this},b.toString=function(){return "[object Generator]"},l.keys=function(e){var t=[];for(var r in e)t.push(r);return t.reverse(),function r(){for(;t.length;){var n=t.pop();if(n in e)return r.value=n,r.done=!1,r}return r.done=!0,r}},l.values=L,F.prototype={constructor:F,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=r,this.done=!1,this.delegate=null,this.method="next",this.arg=r,this.tryEntries.forEach(M),!e)for(var t in this)"t"===t.charAt(0)&&o.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=r);},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function n(n,o){return s.type="throw",s.arg=e,t.next=n,o&&(t.method="next",t.arg=r),!!o}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],s=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var c=o.call(i,"catchLoc"),u=o.call(i,"finallyLoc");if(c&&u){if(this.prev=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&o.call(n,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),M(r),m}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var o=n.arg;M(r);}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:L(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=r),m}};}function _(e,t,r,n){var o=t&&t.prototype instanceof w?t:w,a=Object.create(o.prototype),i=new F(n||[]);return a._invoke=function(e,t,r){var n=f;return function(o,a){if(n===h)throw new Error("Generator is already running");if(n===p){if("throw"===o)throw a;return k()}for(r.method=o,r.arg=a;;){var i=r.delegate;if(i){var s=I(i,r);if(s){if(s===m)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(n===f)throw n=p,r.arg;r.dispatchException(r.arg);}else "return"===r.method&&r.abrupt("return",r.arg);n=h;var c=E(e,t,r);if("normal"===c.type){if(n=r.done?p:d,c.arg===m)continue;return {value:c.arg,done:r.done}}"throw"===c.type&&(n=p,r.method="throw",r.arg=c.arg);}}}(e,r,i),a}function E(e,t,r){try{return {type:"normal",arg:e.call(t,r)}}catch(e){return {type:"throw",arg:e}}}function w(){}function T(){}function A(){}function O(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)};});}function R(e){var t;this._invoke=function(r,n){function a(){return new Promise(function(t,a){!function t(r,n,a,i){var s=E(e[r],e,n);if("throw"!==s.type){var c=s.arg,u=c.value;return u&&"object"==typeof u&&o.call(u,"__await")?Promise.resolve(u.__await).then(function(e){t("next",e,a,i);},function(e){t("throw",e,a,i);}):Promise.resolve(u).then(function(e){c.value=e,a(c);},function(e){return t("throw",e,a,i)})}i(s.arg);}(r,n,t,a);})}return t=t?t.then(a,a):a()};}function I(e,t){var n=e.iterator[t.method];if(n===r){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=r,I(e,t),"throw"===t.method))return m;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method");}return m}var o=E(n,e.iterator,t.arg);if("throw"===o.type)return t.method="throw",t.arg=o.arg,t.delegate=null,m;var a=o.arg;return a?a.done?(t[e.resultName]=a.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=r),t.delegate=null,m):a:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,m)}function x(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t);}function M(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t;}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(x,this),this.reset(!0);}function L(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n (https://fortmatic.com/)",license:"MIT",repository:{type:"git",url:"https://github.com/fortmatic/fortmatic-js"},keywords:["Auth","Login","Web3","Crypto","Ethereum","MetaMask","Wallet","Blockchain","Dapp"],homepage:"https://www.fortmatic.com",ava:{require:["@babel/register"],files:["test/**/*.spec.js"],babel:{testOptions:{presets:["@babel/env"],plugins:["@babel/plugin-proposal-function-bind","@babel/plugin-transform-runtime"]}},verbose:!0},nyc:{all:!1,"check-coverage":!0,"per-file":!0,lines:80,statements:80,functions:80,branches:80,include:["src/**/*.js"],exclude:["*/style.js"],require:[],reporter:["html","lcov"]},dependencies:{"@babel/runtime":"7.3.4"},devDependencies:{"@babel/core":"7.3.4","@babel/plugin-proposal-function-bind":"7.2.0","@babel/plugin-transform-modules-commonjs":"7.2.0","@babel/plugin-transform-runtime":"7.3.4","@babel/preset-env":"7.3.4","@babel/register":"7.0.0",ava:"2.2.0","babel-eslint":"10.0.1","babel-loader":"8.0.5",eslint:"5.9.0",lodash:"4.17.11",nyc:"13.1.0",sinon:"7.1.1",webpack:"4.26.1","webpack-cli":"3.1.2"}};},function(e,t,r){t.css="\n .fortmatic-iframe {\n display: none;\n position: fixed;\n top: 0;\n right: 0;\n width: 100%;\n height: 100%;\n border: none;\n border-radius: 0;\n z-index: 2147483647;\n }\n";}]); + +var fortmatic$1 = /*#__PURE__*/Object.freeze(/*#__PURE__*/_mergeNamespaces({ + __proto__: null, + 'default': fortmatic +}, [fortmatic])); + +exports.App = App; exports.INFURA_NETWORK_URLS = INFURA_NETWORK_URLS; exports.Providers = Providers; exports.Swap = Swap; exports.Updaters = Updaters; exports.serviceWorkerRegistration = serviceWorkerRegistration; -======= - $schema, - $id, - title, - description, - definitions, - type, - additionalProperties, - properties, - required, -} - -var tokenlist_schema$1 = /*#__PURE__*/ Object.freeze({ - __proto__: null, - $schema, - $id, - title, - description, - definitions, - type, - additionalProperties, - properties, - required, - default: tokenlist_schema, -}) - -var fortmatic = (function (e) { - var t = {} - function r(n) { - if (t[n]) return t[n].exports - var o = (t[n] = { i: n, l: !1, exports: {} }) - return e[n].call(o.exports, o, o.exports, r), (o.l = !0), o.exports - } - return ( - (r.m = e), - (r.c = t), - (r.d = function (e, t, n) { - r.o(e, t) || Object.defineProperty(e, t, { enumerable: !0, get: n }) - }), - (r.r = function (e) { - 'undefined' != typeof Symbol && - Symbol.toStringTag && - Object.defineProperty(e, Symbol.toStringTag, { value: 'Module' }), - Object.defineProperty(e, '__esModule', { value: !0 }) - }), - (r.t = function (e, t) { - if ((1 & t && (e = r(e)), 8 & t)) return e - if (4 & t && 'object' == typeof e && e && e.__esModule) return e - var n = Object.create(null) - if ((r.r(n), Object.defineProperty(n, 'default', { enumerable: !0, value: e }), 2 & t && 'string' != typeof e)) - for (var o in e) - r.d( - n, - o, - function (t) { - return e[t] - }.bind(null, o) - ) - return n - }), - (r.n = function (e) { - var t = - e && e.__esModule - ? function () { - return e.default - } - : function () { - return e - } - return r.d(t, 'a', t), t - }), - (r.o = function (e, t) { - return Object.prototype.hasOwnProperty.call(e, t) - }), - (r.p = ''), - r((r.s = 3)) - ) -})([ - function (e, t) { - e.exports = function (e) { - return e && e.__esModule ? e : { default: e } - } - }, - function (e, t) { - e.exports = function (e, t) { - if (!(e instanceof t)) throw new TypeError('Cannot call a class as a function') - } - }, - function (e, t, r) { - function n() { - return Math.floor(9e4 * Math.random()) + 1e4 - } - Object.defineProperty(t, '__esModule', { value: !0 }), - (t.sendAsyncWrapper = function (e, t) { - var r = this - return new Promise(function (o, a) { - r.sendAsync({ jsonrpc: '2.0', id: n(), method: e, params: t || [] }, function (e, t) { - e ? a(e) : o(t.result) - }) - }) - }), - (t.sendFortmaticAsyncWrapper = function (e) { - var t = this - return new Promise(function (r, n) { - t.getProvider().sendFortmaticAsync(e, function (e, t) { - e ? n(e) : r(t ? t.result : {}) - }) - }) - }), - (t.randomId = n), - (t.findExistingResponse = function (e, t) { - for (var r = 0; r < e.length; r++) if (e[r].id === t) return e[r] - return null - }) - }, - function (e, t, r) { - e.exports = r(4) - }, - function (e, t, r) { - var n = r(0), - o = n(r(1)), - a = n(r(5)), - i = r(2), - s = 'fm_composeSend', - c = 'fm_logout', - u = 'fm_get_balances', - l = 'fm_get_transactions', - f = 'fm_is_logged_in', - d = 'fm_accountSettings', - h = 'fm_deposit', - p = 'fm_get_user', - m = 'fm_configure', - y = {} - e.exports = function e(t, r, n) { - var g = this - if (((0, o.default)(this, e), (this.fortmaticClient = 'https://x2.fortmatic.com'), !t)) - throw new Error('Please provide a Fortmatic API key that you acquired from the developer dashboard.') - ;(this.apiKey = t), - (this.options = n), - (this.ethNetwork = r), - (this.queryParams = btoa(JSON.stringify({ API_KEY: t, ETH_NETWORK: r }))), - (this.transactions = { - send(e, t) { - var r = new v(s, { to: e.to, value: e.amount }) - g.getProvider().sendFortmaticAsync(r, t) - }, - }), - (this.getProvider = function () { - return ( - y['fortmatic-'.concat(g.queryParams)] || - (y['fortmatic-'.concat(g.queryParams)] = new a.default(g.fortmaticClient, { - API_KEY: t, - ETH_NETWORK: r, - })), - y['fortmatic-'.concat(g.queryParams)] - ) - }), - (this.user = { - login() { - return g.getProvider().enable() - }, - logout() { - ;(g.getProvider().account = null), (g.getProvider().network = null) - var e = new v(c) - return i.sendFortmaticAsyncWrapper.call(g, e) - }, - getUser() { - var e = new v(p) - return i.sendFortmaticAsyncWrapper.call(g, e) - }, - getBalances() { - var e = new v(u) - return i.sendFortmaticAsyncWrapper.call(g, e) - }, - getTransactions() { - var e = new v(l) - return i.sendFortmaticAsyncWrapper.call(g, e) - }, - isLoggedIn() { - var e = new v(f) - return i.sendFortmaticAsyncWrapper.call(g, e) - }, - settings() { - var e = new v(d) - return i.sendFortmaticAsyncWrapper.call(g, e) - }, - deposit(e) { - var t = new v(h, e) - return i.sendFortmaticAsyncWrapper.call(g, t) - }, - }), - (this.configure = function () { - var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, - t = new v(m) - return (t.params = [e]), i.sendFortmaticAsyncWrapper.call(g, t) - }) - } - var v = function e(t, r) { - ;(0, o.default)(this, e), (this.id = (0, i.randomId)()), (this.method = t), (this.params = r ? [r] : [{}]) - } - }, - function (e, t, r) { - var n = r(0) - Object.defineProperty(t, '__esModule', { value: !0 }), (t.default = void 0) - var o = n(r(6)), - a = n(r(9)), - i = n(r(1)), - s = n(r(10)), - c = r(11), - u = n(r(12)), - l = r(2), - f = (function () { - function e(t, r) { - if ( - ((0, i.default)(this, e), - (this.fortmaticClient = t), - (this.requests = {}), - (this.queue = []), - (this.account = null), - (this.network = null), - (this.isFortmatic = !0), - (this.overlayReady = !1), - (this.isLoggedIn = !1), - (this.postMessages = { - FORTMATIC_HANDLE_BATCH_REQUEST: 'FORTMATIC_HANDLE_BATCH_REQUEST', - FORTMATIC_HANDLE_REQUEST: 'FORTMATIC_HANDLE_REQUEST', - FORTMATIC_HANDLE_FORTMATIC_REQUEST: 'FORTMATIC_HANDLE_FORTMATIC_REQUEST', - FORTMATIC_HANDLE_RESPONSE: 'FORTMATIC_HANDLE_RESPONSE', - FORTMATIC_OVERLAY_READY: 'FORTMATIC_OVERLAY_READY', - FORTMATIC_SHOW_OVERLAY: 'FORTMATIC_SHOW_OVERLAY', - FORTMATIC_HIDE_OVERLAY: 'FORTMATIC_HIDE_OVERLAY', - FORTMATIC_USER_DENIED: 'FORTMATIC_USER_DENIED', - FORTMATIC_USER_LOGOUT: 'FORTMATIC_USER_LOGOUT', - FORTMATIC_UNAUTHORIZED_API_KEY: 'FORTMATIC_UNAUTHORIZED_API_KEY', - }), - !r.API_KEY) - ) - throw new Error('Please provide a Fortmatic API key that you acquired from the developer dashboard.') - ;(this.options = { - API_KEY: r.API_KEY, - ETH_NETWORK: r.ETH_NETWORK, - DOMAIN_ORIGIN: window.location ? window.location.origin : '', - version: c.version, - }), - (this.queryParams = btoa(JSON.stringify(this.options))), - this.constructPostMessage(), - (this.overlay = this.createOverlay()), - this.listenMessage() - } - return ( - (0, s.default)(e, [ - { - key: 'constructPostMessage', - value() { - var e = this - Object.keys(this.postMessages).map(function (t) { - e.postMessages[t] += '-'.concat(e.queryParams) - }) - }, - }, - { - key: 'createOverlay', - value() { - var e = this - return new Promise(function (t, r) { - var n = function () { - if ( - (function () { - var t = !0, - r = !1, - n = void 0 - try { - for ( - var o, a = document.getElementsByClassName('fortmatic-iframe')[Symbol.iterator](); - !(t = (o = a.next()).done); - t = !0 - ) - if (o.value.src.includes(e.queryParams)) return !1 - } catch (e) { - ;(r = !0), (n = e) - } finally { - try { - t || null == a.return || a.return() - } finally { - if (r) throw n - } - } - return !0 - })() - ) { - var r = document.createElement('style') - ;(r.innerHTML = u.default.css), (r.type = 'text/css'), document.head.appendChild(r) - var n = document.createElement('iframe') - ;(n.className = 'fortmatic-iframe'), - (n.src = ''.concat(e.fortmaticClient, '/send?params=').concat(e.queryParams)), - document.body.appendChild(n) - var o = document.createElement('img') - ;(o.src = 'https://static.fortmatic.com/assets/trans.gif'), - document.body.appendChild(o), - t({ iframe: n }) - } else console.error('Fortmatic: Duplicate instances found.') - } - ;['loaded', 'interactive', 'complete'].indexOf(document.readyState) > -1 - ? n() - : window.addEventListener('load', n.bind(e), !1) - }) - }, - }, - { - key: 'showOverlay', - value: (function () { - var e = (0, a.default)( - o.default.mark(function e() { - return o.default.wrap( - function (e) { - for (;;) - switch ((e.prev = e.next)) { - case 0: - return (e.next = 2), this.overlay - case 2: - e.sent.iframe.style.display = 'block' - case 4: - case 'end': - return e.stop() - } - }, - e, - this - ) - }) - ) - return function () { - return e.apply(this, arguments) - } - })(), - }, - { - key: 'hideOverlay', - value: (function () { - var e = (0, a.default)( - o.default.mark(function e() { - return o.default.wrap( - function (e) { - for (;;) - switch ((e.prev = e.next)) { - case 0: - return (e.next = 2), this.overlay - case 2: - e.sent.iframe.style.display = 'none' - case 4: - case 'end': - return e.stop() - } - }, - e, - this - ) - }) - ) - return function () { - return e.apply(this, arguments) - } - })(), - }, - { - key: 'sendAsync', - value(e, t) { - e.length > 0 - ? this.enqueue({ - payload: { - id: (0, l.randomId)(), - batch: e.map(function (e) { - return (e.id = (0, l.randomId)()), e - }), - method: 'eth_batchRequest', - }, - cb: t, - }) - : this.enqueue({ payload: e, cb: t }) - }, - }, - { - key: 'sendFortmaticAsync', - value(e, t) { - this.enqueue({ payload: e, cb: t, isNative: !0 }) - }, - }, - { - key: 'send', - value(e, t) { - if ('string' == typeof e) return l.sendAsyncWrapper.call(this, e, t) - if (!t) { - console.warn( - 'Non-async web3 methods will be deprecated in web3 > 1.0, and are not supported by the Fortmatic provider. An async method to be used instead.' - ), - this.sendAsync(e, function () {}) - var r = {} - switch (e.method) { - case 'eth_accounts': - r = this.account ? [this.account] : [] - break - case 'eth_coinbase': - r = this.account - break - case 'net_version': - r = this.network || (this.options.API_KEY.startsWith('pk_live') ? 1 : 4) - break - case 'eth_uninstallFilter': - r = !0 - break - default: - r = {} - } - return { id: e.id, jsonrpc: e.jsonrpc, result: r } - } - this.sendAsync(e, t) - }, - }, - { - key: 'enqueue', - value(e) { - this.queue.push(e), this.overlayReady && this.dequeue() - }, - }, - { - key: 'dequeue', - value: (function () { - var e = (0, a.default)( - o.default.mark(function e() { - var t, - r, - n, - a = this - return o.default.wrap( - function (e) { - for (;;) - switch ((e.prev = e.next)) { - case 0: - if (0 !== this.queue.length) { - e.next = 2 - break - } - return e.abrupt('return') - case 2: - if (!(t = this.queue.shift())) { - e.next = 11 - break - } - return ( - (r = t.payload), - (n = t.cb), - (r.id = (0, l.randomId)()), - (e.next = 9), - this.postMessage( - t.isNative - ? this.postMessages.FORTMATIC_HANDLE_FORTMATIC_REQUEST - : this.postMessages.FORTMATIC_HANDLE_REQUEST, - t.payload - ) - ) - case 9: - r.batch && r.batch.length > 0 - ? (r.batch.forEach(function (e) { - a.requests[e.id] = { - parentId: r.id, - payload: e, - cb(e, t) { - var n = a.requests[r.id].batchResponse - if (e && e.response && !(0, l.findExistingResponse)(n, e.response.id)) - throw ( - (n.push({ - jsonrpc: '2.0', - id: e.response.id, - error: { code: e.response.code, message: e.response.message }, - }), - a.requests[r.id].cb(null, n), - e.response) - ) - if (t && t.result && !(0, l.findExistingResponse)(n, t.id)) return n.push(t) - throw new Error('Fortmatic: unexpected callback behavior') - }, - } - }), - (this.requests[r.id] = { payload: r, cb: n, batchResponse: [] })) - : (this.requests[r.id] = { payload: r, cb: n }), - this.dequeue() - case 11: - case 'end': - return e.stop() - } - }, - e, - this - ) - }) - ) - return function () { - return e.apply(this, arguments) - } - })(), - }, - { - key: 'postMessage', - value: (function () { - var e = (0, a.default)( - o.default.mark(function e(t, r) { - var n - return o.default.wrap( - function (e) { - for (;;) - switch ((e.prev = e.next)) { - case 0: - return (e.next = 2), this.overlay - case 2: - if (!(n = e.sent).iframe.contentWindow) { - e.next = 7 - break - } - n.iframe.contentWindow.postMessage({ msgType: t, payload: r }, '*'), (e.next = 8) - break - case 7: - throw new Error('Fortmatic: Modal is not ready.') - case 8: - case 'end': - return e.stop() - } - }, - e, - this - ) - }) - ) - return function (t, r) { - return e.apply(this, arguments) - } - })(), - }, - { - key: 'enable', - value() { - return l.sendAsyncWrapper.call(this, 'eth_accounts') - }, - }, - { - key: 'listenMessage', - value() { - var e = this - window.addEventListener('message', function (t) { - if (t.origin === e.fortmaticClient) { - var r = t.data.response ? t.data.response.id : null - switch (t.data.msgType) { - case e.postMessages.FORTMATIC_OVERLAY_READY: - ;(e.overlayReady = !0), e.dequeue() - break - case e.postMessages.FORTMATIC_HANDLE_RESPONSE: - try { - e.requests[r].cb(null, t.data.response) - var n = e.requests[r].parentId - n && - e.requests[n].payload.batch.length === e.requests[n].batchResponse.length && - e.requests[n].cb(null, e.requests[n].batchResponse), - 'eth_accounts' === e.requests[r].payload.method - ? (e.account = t.data.response.result[0]) - : 'eth_coinbase' === e.requests[r].payload.method - ? (e.account = t.data.response.result) - : 'net_version' === e.requests[r].payload.method && (e.network = t.data.response.result) - } catch (e) {} - ;(e.isLoggedIn = !0), e.dequeue() - break - case e.postMessages.FORTMATIC_HIDE_OVERLAY: - e.hideOverlay() - break - case e.postMessages.FORTMATIC_SHOW_OVERLAY: - e.showOverlay() - break - case e.postMessages.FORTMATIC_USER_LOGOUT: - ;(e.account = null), (e.network = null), (e.isLoggedIn = !1) - break - case e.postMessages.FORTMATIC_UNAUTHORIZED_API_KEY: - throw ( - ((e.overlayReady = !1), new Error('Given API key is not authorized to access the resource.')) - ) - case e.postMessages.FORTMATIC_USER_DENIED: - if (r) { - var o = - t.data.response && t.data.response.message - ? t.data.response.message - : 'Fortmatic: Modal was closed without executing action!', - a = t.data.response && t.data.response.code ? t.data.response.code : 1 - e.requests[r].cb({ message: o, code: a, response: t.data.response }) - } else - e.queue.forEach(function (e) { - return e.cb({ message: 'Fortmatic: Modal was closed without executing action!', code: 1 }) - }) - e.dequeue() - } - } - }) - }, - }, - ]), - e - ) - })() - t.default = f - }, - function (e, t, r) { - e.exports = r(7) - }, - function (e, t, r) { - var n = - (function () { - return this || ('object' == typeof self && self) - })() || Function('return this')(), - o = n.regeneratorRuntime && Object.getOwnPropertyNames(n).indexOf('regeneratorRuntime') >= 0, - a = o && n.regeneratorRuntime - if (((n.regeneratorRuntime = void 0), (e.exports = r(8)), o)) n.regeneratorRuntime = a - else - try { - delete n.regeneratorRuntime - } catch (e) { - n.regeneratorRuntime = void 0 - } - }, - function (e, t) { - !(function (t) { - var r, - n = Object.prototype, - o = n.hasOwnProperty, - a = 'function' == typeof Symbol ? Symbol : {}, - i = a.iterator || '@@iterator', - s = a.asyncIterator || '@@asyncIterator', - c = a.toStringTag || '@@toStringTag', - u = 'object' == typeof e, - l = t.regeneratorRuntime - if (l) u && (e.exports = l) - else { - ;(l = t.regeneratorRuntime = u ? e.exports : {}).wrap = _ - var f = 'suspendedStart', - d = 'suspendedYield', - h = 'executing', - p = 'completed', - m = {}, - y = {} - y[i] = function () { - return this - } - var v = Object.getPrototypeOf, - g = v && v(v(L([]))) - g && g !== n && o.call(g, i) && (y = g) - var b = (A.prototype = w.prototype = Object.create(y)) - ;(T.prototype = b.constructor = A), - (A.constructor = T), - (A[c] = T.displayName = 'GeneratorFunction'), - (l.isGeneratorFunction = function (e) { - var t = 'function' == typeof e && e.constructor - return !!t && (t === T || 'GeneratorFunction' === (t.displayName || t.name)) - }), - (l.mark = function (e) { - return ( - Object.setPrototypeOf - ? Object.setPrototypeOf(e, A) - : ((e.__proto__ = A), c in e || (e[c] = 'GeneratorFunction')), - (e.prototype = Object.create(b)), - e - ) - }), - (l.awrap = function (e) { - return { __await: e } - }), - O(R.prototype), - (R.prototype[s] = function () { - return this - }), - (l.AsyncIterator = R), - (l.async = function (e, t, r, n) { - var o = new R(_(e, t, r, n)) - return l.isGeneratorFunction(t) - ? o - : o.next().then(function (e) { - return e.done ? e.value : o.next() - }) - }), - O(b), - (b[c] = 'Generator'), - (b[i] = function () { - return this - }), - (b.toString = function () { - return '[object Generator]' - }), - (l.keys = function (e) { - var t = [] - for (var r in e) t.push(r) - return ( - t.reverse(), - function r() { - for (; t.length; ) { - var n = t.pop() - if (n in e) return (r.value = n), (r.done = !1), r - } - return (r.done = !0), r - } - ) - }), - (l.values = L), - (F.prototype = { - constructor: F, - reset(e) { - if ( - ((this.prev = 0), - (this.next = 0), - (this.sent = this._sent = r), - (this.done = !1), - (this.delegate = null), - (this.method = 'next'), - (this.arg = r), - this.tryEntries.forEach(M), - !e) - ) - for (var t in this) 't' === t.charAt(0) && o.call(this, t) && !isNaN(+t.slice(1)) && (this[t] = r) - }, - stop() { - this.done = !0 - var e = this.tryEntries[0].completion - if ('throw' === e.type) throw e.arg - return this.rval - }, - dispatchException(e) { - if (this.done) throw e - var t = this - function n(n, o) { - return (s.type = 'throw'), (s.arg = e), (t.next = n), o && ((t.method = 'next'), (t.arg = r)), !!o - } - for (var a = this.tryEntries.length - 1; a >= 0; --a) { - var i = this.tryEntries[a], - s = i.completion - if ('root' === i.tryLoc) return n('end') - if (i.tryLoc <= this.prev) { - var c = o.call(i, 'catchLoc'), - u = o.call(i, 'finallyLoc') - if (c && u) { - if (this.prev < i.catchLoc) return n(i.catchLoc, !0) - if (this.prev < i.finallyLoc) return n(i.finallyLoc) - } else if (c) { - if (this.prev < i.catchLoc) return n(i.catchLoc, !0) - } else { - if (!u) throw new Error('try statement without catch or finally') - if (this.prev < i.finallyLoc) return n(i.finallyLoc) - } - } - } - }, - abrupt(e, t) { - for (var r = this.tryEntries.length - 1; r >= 0; --r) { - var n = this.tryEntries[r] - if (n.tryLoc <= this.prev && o.call(n, 'finallyLoc') && this.prev < n.finallyLoc) { - var a = n - break - } - } - a && ('break' === e || 'continue' === e) && a.tryLoc <= t && t <= a.finallyLoc && (a = null) - var i = a ? a.completion : {} - return ( - (i.type = e), - (i.arg = t), - a ? ((this.method = 'next'), (this.next = a.finallyLoc), m) : this.complete(i) - ) - }, - complete(e, t) { - if ('throw' === e.type) throw e.arg - return ( - 'break' === e.type || 'continue' === e.type - ? (this.next = e.arg) - : 'return' === e.type - ? ((this.rval = this.arg = e.arg), (this.method = 'return'), (this.next = 'end')) - : 'normal' === e.type && t && (this.next = t), - m - ) - }, - finish(e) { - for (var t = this.tryEntries.length - 1; t >= 0; --t) { - var r = this.tryEntries[t] - if (r.finallyLoc === e) return this.complete(r.completion, r.afterLoc), M(r), m - } - }, - catch(e) { - for (var t = this.tryEntries.length - 1; t >= 0; --t) { - var r = this.tryEntries[t] - if (r.tryLoc === e) { - var n = r.completion - if ('throw' === n.type) { - var o = n.arg - M(r) - } - return o - } - } - throw new Error('illegal catch attempt') - }, - delegateYield(e, t, n) { - return ( - (this.delegate = { iterator: L(e), resultName: t, nextLoc: n }), - 'next' === this.method && (this.arg = r), - m - ) - }, - }) - } - function _(e, t, r, n) { - var o = t && t.prototype instanceof w ? t : w, - a = Object.create(o.prototype), - i = new F(n || []) - return ( - (a._invoke = (function (e, t, r) { - var n = f - return function (o, a) { - if (n === h) throw new Error('Generator is already running') - if (n === p) { - if ('throw' === o) throw a - return k() - } - for (r.method = o, r.arg = a; ; ) { - var i = r.delegate - if (i) { - var s = I(i, r) - if (s) { - if (s === m) continue - return s - } - } - if ('next' === r.method) r.sent = r._sent = r.arg - else if ('throw' === r.method) { - if (n === f) throw ((n = p), r.arg) - r.dispatchException(r.arg) - } else 'return' === r.method && r.abrupt('return', r.arg) - n = h - var c = E(e, t, r) - if ('normal' === c.type) { - if (((n = r.done ? p : d), c.arg === m)) continue - return { value: c.arg, done: r.done } - } - 'throw' === c.type && ((n = p), (r.method = 'throw'), (r.arg = c.arg)) - } - } - })(e, r, i)), - a - ) - } - function E(e, t, r) { - try { - return { type: 'normal', arg: e.call(t, r) } - } catch (e) { - return { type: 'throw', arg: e } - } - } - function w() {} - function T() {} - function A() {} - function O(e) { - ;['next', 'throw', 'return'].forEach(function (t) { - e[t] = function (e) { - return this._invoke(t, e) - } - }) - } - function R(e) { - var t - this._invoke = function (r, n) { - function a() { - return new Promise(function (t, a) { - !(function t(r, n, a, i) { - var s = E(e[r], e, n) - if ('throw' !== s.type) { - var c = s.arg, - u = c.value - return u && 'object' == typeof u && o.call(u, '__await') - ? Promise.resolve(u.__await).then( - function (e) { - t('next', e, a, i) - }, - function (e) { - t('throw', e, a, i) - } - ) - : Promise.resolve(u).then( - function (e) { - ;(c.value = e), a(c) - }, - function (e) { - return t('throw', e, a, i) - } - ) - } - i(s.arg) - })(r, n, t, a) - }) - } - return (t = t ? t.then(a, a) : a()) - } - } - function I(e, t) { - var n = e.iterator[t.method] - if (n === r) { - if (((t.delegate = null), 'throw' === t.method)) { - if (e.iterator.return && ((t.method = 'return'), (t.arg = r), I(e, t), 'throw' === t.method)) return m - ;(t.method = 'throw'), (t.arg = new TypeError("The iterator does not provide a 'throw' method")) - } - return m - } - var o = E(n, e.iterator, t.arg) - if ('throw' === o.type) return (t.method = 'throw'), (t.arg = o.arg), (t.delegate = null), m - var a = o.arg - return a - ? a.done - ? ((t[e.resultName] = a.value), - (t.next = e.nextLoc), - 'return' !== t.method && ((t.method = 'next'), (t.arg = r)), - (t.delegate = null), - m) - : a - : ((t.method = 'throw'), (t.arg = new TypeError('iterator result is not an object')), (t.delegate = null), m) - } - function x(e) { - var t = { tryLoc: e[0] } - 1 in e && (t.catchLoc = e[1]), 2 in e && ((t.finallyLoc = e[2]), (t.afterLoc = e[3])), this.tryEntries.push(t) - } - function M(e) { - var t = e.completion || {} - ;(t.type = 'normal'), delete t.arg, (e.completion = t) - } - function F(e) { - ;(this.tryEntries = [{ tryLoc: 'root' }]), e.forEach(x, this), this.reset(!0) - } - function L(e) { - if (e) { - var t = e[i] - if (t) return t.call(e) - if ('function' == typeof e.next) return e - if (!isNaN(e.length)) { - var n = -1, - a = function t() { - for (; ++n < e.length; ) if (o.call(e, n)) return (t.value = e[n]), (t.done = !1), t - return (t.value = r), (t.done = !0), t - } - return (a.next = a) - } - } - return { next: k } - } - function k() { - return { value: r, done: !0 } - } - })( - (function () { - return this || ('object' == typeof self && self) - })() || Function('return this')() - ) - }, - function (e, t) { - function r(e, t, r, n, o, a, i) { - try { - var s = e[a](i), - c = s.value - } catch (e) { - return void r(e) - } - s.done ? t(c) : Promise.resolve(c).then(n, o) - } - e.exports = function (e) { - return function () { - var t = this, - n = arguments - return new Promise(function (o, a) { - var i = e.apply(t, n) - function s(e) { - r(i, o, a, s, c, 'next', e) - } - function c(e) { - r(i, o, a, s, c, 'throw', e) - } - s(void 0) - }) - } - } - }, - function (e, t) { - function r(e, t) { - for (var r = 0; r < t.length; r++) { - var n = t[r] - ;(n.enumerable = n.enumerable || !1), - (n.configurable = !0), - 'value' in n && (n.writable = !0), - Object.defineProperty(e, n.key, n) - } - } - e.exports = function (e, t, n) { - return t && r(e.prototype, t), n && r(e, n), e - } - }, - function (e) { - e.exports = { - name: 'fortmatic', - version: '1.1.3', - description: 'Fortmatic Javascript SDK', - main: 'lib/fortmatic.js', - scripts: { - build: 'WEBPACK_ENV=production webpack', - 'build:dev': 'WEBPACK_ENV=development BABEL_ENV=development webpack --progress --colors --watch', - test: 'nyc --reporter=lcov --reporter=text-summary ava', - }, - author: 'Fortmatic (https://fortmatic.com/)', - license: 'MIT', - repository: { type: 'git', url: 'https://github.com/fortmatic/fortmatic-js' }, - keywords: ['Auth', 'Login', 'Web3', 'Crypto', 'Ethereum', 'MetaMask', 'Wallet', 'Blockchain', 'Dapp'], - homepage: 'https://www.fortmatic.com', - ava: { - require: ['@babel/register'], - files: ['test/**/*.spec.js'], - babel: { - testOptions: { - presets: ['@babel/env'], - plugins: ['@babel/plugin-proposal-function-bind', '@babel/plugin-transform-runtime'], - }, - }, - verbose: !0, - }, - nyc: { - all: !1, - 'check-coverage': !0, - 'per-file': !0, - lines: 80, - statements: 80, - functions: 80, - branches: 80, - include: ['src/**/*.js'], - exclude: ['*/style.js'], - require: [], - reporter: ['html', 'lcov'], - }, - dependencies: { '@babel/runtime': '7.3.4' }, - devDependencies: { - '@babel/core': '7.3.4', - '@babel/plugin-proposal-function-bind': '7.2.0', - '@babel/plugin-transform-modules-commonjs': '7.2.0', - '@babel/plugin-transform-runtime': '7.3.4', - '@babel/preset-env': '7.3.4', - '@babel/register': '7.0.0', - ava: '2.2.0', - 'babel-eslint': '10.0.1', - 'babel-loader': '8.0.5', - eslint: '5.9.0', - lodash: '4.17.11', - nyc: '13.1.0', - sinon: '7.1.1', - webpack: '4.26.1', - 'webpack-cli': '3.1.2', - }, - } - }, - function (e, t, r) { - t.css = - '\n .fortmatic-iframe {\n display: none;\n position: fixed;\n top: 0;\n right: 0;\n width: 100%;\n height: 100%;\n border: none;\n border-radius: 0;\n z-index: 2147483647;\n }\n' - }, -]) - -var fortmatic$1 = /*#__PURE__*/ Object.freeze( - /*#__PURE__*/ _mergeNamespaces( - { - __proto__: null, - default: fortmatic, - }, - [fortmatic] - ) -) - -// from routing-api (https://github.com/Uniswap/routing-api/blob/main/lib/handlers/quote/quote.ts#L243-L311) -function transformSwapRouteToGetQuoteResult(type, amount, _a) { - var e_1, _b - var quote = _a.quote, - quoteGasAdjusted = _a.quoteGasAdjusted, - route = _a.route, - estimatedGasUsed = _a.estimatedGasUsed, - estimatedGasUsedQuoteToken = _a.estimatedGasUsedQuoteToken, - estimatedGasUsedUSD = _a.estimatedGasUsedUSD, - gasPriceWei = _a.gasPriceWei, - methodParameters = _a.methodParameters, - blockNumber = _a.blockNumber - var routeResponse = [] - try { - for (var route_1 = __values(route), route_1_1 = route_1.next(); !route_1_1.done; route_1_1 = route_1.next()) { - var subRoute = route_1_1.value - var amount_1 = subRoute.amount, - quote_1 = subRoute.quote, - tokenPath = subRoute.tokenPath - if (subRoute.protocol === routerSdk.Protocol.V3) { - var pools = subRoute.route.pools - var curRoute = [] - for (var i = 0; i < pools.length; i++) { - var nextPool = pools[i] - var tokenIn = tokenPath[i] - var tokenOut = tokenPath[i + 1] - var edgeAmountIn = undefined - if (i === 0) { - edgeAmountIn = type === 'exactIn' ? amount_1.quotient.toString() : quote_1.quotient.toString() - } - var edgeAmountOut = undefined - if (i === pools.length - 1) { - edgeAmountOut = type === 'exactIn' ? quote_1.quotient.toString() : amount_1.quotient.toString() - } - curRoute.push({ - type: 'v3-pool', - tokenIn: { - chainId: tokenIn.chainId, - decimals: tokenIn.decimals, - address: tokenIn.address, - symbol: tokenIn.symbol, - }, - tokenOut: { - chainId: tokenOut.chainId, - decimals: tokenOut.decimals, - address: tokenOut.address, - symbol: tokenOut.symbol, - }, - fee: nextPool.fee.toString(), - liquidity: nextPool.liquidity.toString(), - sqrtRatioX96: nextPool.sqrtRatioX96.toString(), - tickCurrent: nextPool.tickCurrent.toString(), - amountIn: edgeAmountIn, - amountOut: edgeAmountOut, - }) - } - routeResponse.push(curRoute) - } else if (subRoute.protocol === routerSdk.Protocol.V2) { - var pools = subRoute.route.pairs - var curRoute = [] - for (var i = 0; i < pools.length; i++) { - var nextPool = pools[i] - var tokenIn = tokenPath[i] - var tokenOut = tokenPath[i + 1] - var edgeAmountIn = undefined - if (i === 0) { - edgeAmountIn = type === 'exactIn' ? amount_1.quotient.toString() : quote_1.quotient.toString() - } - var edgeAmountOut = undefined - if (i === pools.length - 1) { - edgeAmountOut = type === 'exactIn' ? quote_1.quotient.toString() : amount_1.quotient.toString() - } - var reserve0 = nextPool.reserve0 - var reserve1 = nextPool.reserve1 - curRoute.push({ - type: 'v2-pool', - tokenIn: { - chainId: tokenIn.chainId, - decimals: tokenIn.decimals, - address: tokenIn.address, - symbol: tokenIn.symbol, - }, - tokenOut: { - chainId: tokenOut.chainId, - decimals: tokenOut.decimals, - address: tokenOut.address, - symbol: tokenOut.symbol, - }, - reserve0: { - token: { - chainId: reserve0.currency.wrapped.chainId, - decimals: reserve0.currency.wrapped.decimals, - address: reserve0.currency.wrapped.address, - symbol: reserve0.currency.wrapped.symbol, - }, - quotient: reserve0.quotient.toString(), - }, - reserve1: { - token: { - chainId: reserve1.currency.wrapped.chainId, - decimals: reserve1.currency.wrapped.decimals, - address: reserve1.currency.wrapped.address, - symbol: reserve1.currency.wrapped.symbol, - }, - quotient: reserve1.quotient.toString(), - }, - amountIn: edgeAmountIn, - amountOut: edgeAmountOut, - }) - } - routeResponse.push(curRoute) - } - } - } catch (e_1_1) { - e_1 = { error: e_1_1 } - } finally { - try { - if (route_1_1 && !route_1_1.done && (_b = route_1.return)) _b.call(route_1) - } finally { - if (e_1) throw e_1.error - } - } - var result = { - methodParameters, - blockNumber: blockNumber.toString(), - amount: amount.quotient.toString(), - amountDecimals: amount.toExact(), - quote: quote.quotient.toString(), - quoteDecimals: quote.toExact(), - quoteGasAdjusted: quoteGasAdjusted.quotient.toString(), - quoteGasAdjustedDecimals: quoteGasAdjusted.toExact(), - gasUseEstimateQuote: estimatedGasUsedQuoteToken.quotient.toString(), - gasUseEstimateQuoteDecimals: estimatedGasUsedQuoteToken.toExact(), - gasUseEstimate: estimatedGasUsed.toString(), - gasUseEstimateUSD: estimatedGasUsedUSD.toExact(), - gasPriceWei: gasPriceWei.toString(), - route: routeResponse, - routeString: smartOrderRouter.routeAmountsToString(route), - } - return result -} - -/** Minimal set of dependencies for the router to work locally. */ -function buildDependencies() { - var e_1, _a - var dependenciesByChain = {} - try { - for ( - var AUTO_ROUTER_SUPPORTED_CHAINS_1 = __values(AUTO_ROUTER_SUPPORTED_CHAINS), - AUTO_ROUTER_SUPPORTED_CHAINS_1_1 = AUTO_ROUTER_SUPPORTED_CHAINS_1.next(); - !AUTO_ROUTER_SUPPORTED_CHAINS_1_1.done; - AUTO_ROUTER_SUPPORTED_CHAINS_1_1 = AUTO_ROUTER_SUPPORTED_CHAINS_1.next() - ) { - var chainId = AUTO_ROUTER_SUPPORTED_CHAINS_1_1.value - var provider = new ethers.providers.JsonRpcProvider(INFURA_NETWORK_URLS[chainId]) - dependenciesByChain[chainId] = { - chainId, - provider, - } - } - } catch (e_1_1) { - e_1 = { error: e_1_1 } - } finally { - try { - if ( - AUTO_ROUTER_SUPPORTED_CHAINS_1_1 && - !AUTO_ROUTER_SUPPORTED_CHAINS_1_1.done && - (_a = AUTO_ROUTER_SUPPORTED_CHAINS_1.return) - ) - _a.call(AUTO_ROUTER_SUPPORTED_CHAINS_1) - } finally { - if (e_1) throw e_1.error - } - } - return dependenciesByChain -} -var GAMetric = /** @class */ (function (_super) { - __extends(GAMetric, _super) - function GAMetric() { - return (_super !== null && _super.apply(this, arguments)) || this - } - GAMetric.prototype.putDimensions = function () { - return - } - GAMetric.prototype.putMetric = function (key, value, unit) { - ReactGA__default['default'].timing({ - category: 'Routing API', - variable: key + ' | ' + unit, - value, - label: 'client', - }) - } - return GAMetric -})(smartOrderRouter.IMetric) -smartOrderRouter.setGlobalMetric(new GAMetric()) - -var routerParamsByChain = buildDependencies() -function getQuote(_a, alphaRouterConfig) { - var type = _a.type, - chainId = _a.chainId, - tokenIn = _a.tokenIn, - tokenOut = _a.tokenOut, - amountRaw = _a.amount - return __awaiter(this, void 0, void 0, function () { - var params, router, currencyIn, currencyOut, baseCurrency, quoteCurrency, amount, swapRoute - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - params = routerParamsByChain[chainId] - if (!params) { - throw new Error('Router dependencies not initialized.') - } - router = new smartOrderRouter.AlphaRouter(params) - currencyIn = new sdkCore.Token(tokenIn.chainId, tokenIn.address, tokenIn.decimals, tokenIn.symbol) - currencyOut = new sdkCore.Token(tokenOut.chainId, tokenOut.address, tokenOut.decimals, tokenOut.symbol) - baseCurrency = type === 'exactIn' ? currencyIn : currencyOut - quoteCurrency = type === 'exactIn' ? currencyOut : currencyIn - amount = sdkCore.CurrencyAmount.fromRawAmount(baseCurrency, JSBI__default['default'].BigInt(amountRaw)) - return [ - 4 /*yield*/, - router.route( - amount, - quoteCurrency, - type === 'exactIn' ? sdkCore.TradeType.EXACT_INPUT : sdkCore.TradeType.EXACT_OUTPUT, - /*swapConfig=*/ undefined, - alphaRouterConfig - ), - ] - case 1: - swapRoute = _b.sent() - if (!swapRoute) throw new Error('Failed to generate client side quote') - return [2 /*return*/, { data: transformSwapRouteToGetQuoteResult(type, amount, swapRoute) }] - } - }) - }) -} - -var index = /*#__PURE__*/ Object.freeze({ - __proto__: null, - getQuote, -}) - -exports.Swap = Swap ->>>>>>> ee1338c81a2c73d9938e225b8b96abd2fc298260 //# sourceMappingURL=snowflake.js.map diff --git a/dist2/snowflake.js.map b/dist2/snowflake.js.map index 959d7862ad2..1b4bbfc286f 100644 --- a/dist2/snowflake.js.map +++ b/dist2/snowflake.js.map @@ -1 +1 @@ -{"version":3,"file":"snowflake.js","sources":["../src/assets/images/ethereum-logo.png","../src/assets/svg/arbitrum_logo.svg","../src/assets/svg/optimistic_ethereum.svg","../src/assets/svg/polygon-matic-logo.svg","../src/assets/images/gas-icon.svg","../src/assets/svg/matic-token-icon.svg","../src/assets/svg/dot_line.svg","../src/assets/svg/auto_router.svg","../src/assets/svg/static_route.svg","../src/assets/images/dropdown.svg","../src/assets/svg/tokenlist.svg","../src/assets/svg/logo.svg","../src/assets/images/blue-loader.svg","../src/assets/images/metamask.png","../src/locales/en-US.js","../node_modules/fortmatic/lib/fortmatic.js"],"sourcesContent":["export default \"data:image/png;base64,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\"","export default \"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20viewBox%3D%220%200%20470.287%20514.251%22%20enable-background%3D%22new%200%200%20470.287%20514.251%22%20xml%3Aspace%3D%22preserve%22%3E%3Cg%20id%3D%22Background%22%3E%3C%2Fg%3E%3Cg%20id%3D%22Logos_and_symbols%22%3E%20%3Cg%20id%3D%22SYMBOL_VER_3%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_4_3_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_1_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_1_%22%3E%20%20%3Cg%20id%3D%22_x31_-3%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_14_%22%3E%20%20%20%3Cpath%20fill%3D%22%232D374B%22%20d%3D%22M291.134%2C237.469l35.654-60.5l96.103%2C149.684l0.046%2C28.727l-0.313-197.672%20%20%20%20c-0.228-4.832-2.794-9.252-6.887-11.859L242.715%2C46.324c-4.045-1.99-9.18-1.967-13.22%2C0.063c-0.546%2C0.272-1.06%2C0.57-1.548%2C0.895%20%20%20%20l-0.604%2C0.379L59.399%2C144.983l-0.651%2C0.296c-0.838%2C0.385-1.686%2C0.875-2.48%2C1.444c-3.185%2C2.283-5.299%2C5.66-5.983%2C9.448%20%20%20%20c-0.103%2C0.574-0.179%2C1.158-0.214%2C1.749l0.264%2C161.083l89.515-138.745c11.271-18.397%2C35.825-24.323%2C58.62-24.001l26.753%2C0.706%20%20%20%20L67.588%2C409.765l18.582%2C10.697L245.692%2C157.22l70.51-0.256L157.091%2C426.849l66.306%2C38.138l7.922%2C4.556%20%20%20%20c3.351%2C1.362%2C7.302%2C1.431%2C10.681%2C0.21l175.453-101.678l-33.544%2C19.438L291.134%2C237.469z%20M304.736%2C433.395l-66.969-105.108%20%20%20%20l40.881-69.371l87.952%2C138.628L304.736%2C433.395z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%2328A0F0%22%20points%3D%22237.768%2C328.286%20304.736%2C433.395%20366.601%2C397.543%20278.648%2C258.915%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2328A0F0%22%20d%3D%22M422.937%2C355.379l-0.046-28.727l-96.103-149.684l-35.654%2C60.5l92.774%2C150.043l33.544-19.438%20%20%20%20c3.29-2.673%2C5.281-6.594%2C5.49-10.825L422.937%2C355.379z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23FFFFFF%22%20d%3D%22M20.219%2C382.469l47.369%2C27.296l157.634-252.801l-26.753-0.706c-22.795-0.322-47.35%2C5.604-58.62%2C24.001%20%20%20%20L50.334%2C319.004l-30.115%2C46.271V382.469z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%23FFFFFF%22%20points%3D%22316.202%2C156.964%20245.692%2C157.22%2086.17%2C420.462%20141.928%2C452.565%20157.091%2C426.849%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2396BEDC%22%20d%3D%22M452.65%2C156.601c-0.59-14.746-8.574-28.245-21.08-36.104L256.28%2C19.692%20%20%20%20c-12.371-6.229-27.825-6.237-40.218-0.004c-1.465%2C0.739-170.465%2C98.752-170.465%2C98.752c-2.339%2C1.122-4.592%2C2.458-6.711%2C3.975%20%20%20%20c-11.164%2C8.001-17.969%2C20.435-18.668%2C34.095v208.765l30.115-46.271L50.07%2C157.921c0.035-0.589%2C0.109-1.169%2C0.214-1.741%20%20%20%20c0.681-3.79%2C2.797-7.171%2C5.983-9.456c0.795-0.569%2C172.682-100.064%2C173.228-100.337c4.04-2.029%2C9.175-2.053%2C13.22-0.063%20%20%20%20l173.022%2C99.523c4.093%2C2.607%2C6.659%2C7.027%2C6.887%2C11.859v199.542c-0.209%2C4.231-1.882%2C8.152-5.172%2C10.825l-33.544%2C19.438%20%20%20%20l-17.308%2C10.031l-61.864%2C35.852l-62.737%2C36.357c-3.379%2C1.221-7.33%2C1.152-10.681-0.21l-74.228-42.693l-15.163%2C25.717%20%20%20%20l66.706%2C38.406c2.206%2C1.255%2C4.171%2C2.367%2C5.784%2C3.272c2.497%2C1.4%2C4.199%2C2.337%2C4.8%2C2.629c4.741%2C2.303%2C11.563%2C3.643%2C17.71%2C3.643%20%20%20%20c5.636%2C0%2C11.132-1.035%2C16.332-3.072l182.225-105.531c10.459-8.104%2C16.612-20.325%2C17.166-33.564V156.601z%22%2F%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_13_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_6_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_3_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_15_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_3_%22%3E%20%20%20%3Cg%20id%3D%22_x33__7_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic%22%3E%20%20%20%3Cg%20id%3D%22_x33__3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_10_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x34__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_2_%22%3E%20%20%20%3Cg%20id%3D%22_x33__6_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_2_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_11_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_5_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_12_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_1_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_9_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_2_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol_1_%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_1_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_7_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_8_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Monochromatic_1_%22%3E%20%20%3Cg%20id%3D%22_x33__4_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%22170%22%20height%3D%22168%22%20viewBox%3D%220%200%20170%20168%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20clip-path%3D%22url%28%23clip0%29%22%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF505F%22%2F%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF0320%22%2F%3E%3Cpath%20d%3D%22M85.05%200C132.022%200%20170.1%2037.8949%20170.1%2084.6407C170.1%20131.386%200%20131.386%200%2084.6407C0%2037.8949%2038.0782%200%2085.05%200Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.665%2064.0394L112.444%2012.3742L89.0263%2078.9477L144.665%2064.0394Z%22%20fill%3D%22%23FF4E65%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.777%2064.215L112.444%2012.3742L165.349%2058.4347L143.777%2064.215Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.551%2063.613L142.479%20124.467L88.912%2078.5213L144.551%2063.613Z%22%20fill%3D%22%23D0001A%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.663%2063.7886L142.479%20124.467L165.235%2058.0083L143.663%2063.7886Z%22%20fill%3D%22%23FF697B%22%2F%3E%3C%2Fg%3E%3Cdefs%3E%3CclipPath%20id%3D%22clip0%22%3E%3Crect%20width%3D%22170%22%20height%3D%22168%22%20fill%3D%22white%22%2F%3E%3C%2FclipPath%3E%3C%2Fdefs%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20viewBox%3D%220%200%2038.4%2033.5%22%20style%3D%22enable-background%3Anew%200%200%2038.4%2033.5%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cstyle%20type%3D%22text%2Fcss%22%3E%20.st0%7Bfill%3A%238247E5%3B%7D%3C%2Fstyle%3E%3Cg%3E%20%3Cpath%20class%3D%22st0%22%20d%3D%22M29%2C10.2c-0.7-0.4-1.6-0.4-2.4%2C0L21%2C13.5l-3.8%2C2.1l-5.5%2C3.3c-0.7%2C0.4-1.6%2C0.4-2.4%2C0L5%2C16.3%20%20c-0.7-0.4-1.2-1.2-1.2-2.1v-5c0-0.8%2C0.4-1.6%2C1.2-2.1l4.3-2.5c0.7-0.4%2C1.6-0.4%2C2.4%2C0L16%2C7.2c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v3.3l3.8-2.2V7%20%20c0-0.8-0.4-1.6-1.2-2.1l-8-4.7c-0.7-0.4-1.6-0.4-2.4%2C0L1.2%2C5C0.4%2C5.4%2C0%2C6.2%2C0%2C7v9.4c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l5.5-3.2l3.8-2.2l5.5-3.2c0.7-0.4%2C1.6-0.4%2C2.4%2C0l4.3%2C2.5c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v5c0%2C0.8-0.4%2C1.6-1.2%2C2.1%20%20L29%2C28.8c-0.7%2C0.4-1.6%2C0.4-2.4%2C0l-4.3-2.5c-0.7-0.4-1.2-1.2-1.2-2.1V21l-3.8%2C2.2v3.3c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l8.1-4.7c0.7-0.4%2C1.2-1.2%2C1.2-2.1V17c0-0.8-0.4-1.6-1.2-2.1L29%2C10.2z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M10.0047%209.26921H10.2714C11.0078%209.26921%2011.6047%209.86617%2011.6047%2010.6025V12.1359C11.6047%2012.7987%2012.142%2013.3359%2012.8047%2013.3359C13.4675%2013.3359%2014.0047%2012.7995%2014.0047%2012.1367V5.22059C14.0047%204.86697%2013.7758%204.56227%2013.5258%204.31223L10.6714%201.33594M4.00472%202.00254H8.00472C8.7411%202.00254%209.33805%202.59949%209.33805%203.33587V14.0015H2.67139V3.33587C2.67139%202.59949%203.26834%202.00254%204.00472%202.00254ZM14.0047%205.33587C14.0047%206.07225%2013.4078%206.66921%2012.6714%206.66921C11.935%206.66921%2011.3381%206.07225%2011.3381%205.33587C11.3381%204.59949%2011.935%204.00254%2012.6714%204.00254C13.4078%204.00254%2014.0047%204.59949%2014.0047%205.33587Z%22%20stroke%3D%22white%22%2F%3E%3Cline%20x1%3D%224%22%20y1%3D%229.99414%22%20x2%3D%228%22%20y2%3D%229.99414%22%20stroke%3D%22white%22%2F%3E%3Cline%20x1%3D%224%22%20y1%3D%2211.9941%22%20x2%3D%228%22%20y2%3D%2211.9941%22%20stroke%3D%22white%22%2F%3E%3Cpath%20d%3D%22M4%208.16113H8%22%20stroke%3D%22white%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%221024%22%20height%3D%221024%22%20viewBox%3D%220%200%201024%201024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Ccircle%20cx%3D%22512%22%20cy%3D%22512%22%20r%3D%22512%22%20fill%3D%22%238247E5%22%2F%3E%3Cpath%20d%3D%22M681.469%20402.456C669.189%20395.312%20653.224%20395.312%20639.716%20402.456L543.928%20457.228L478.842%20492.949L383.055%20547.721C370.774%20554.865%20354.81%20554.865%20341.301%20547.721L265.162%20504.856C252.882%20497.712%20244.286%20484.614%20244.286%20470.325V385.786C244.286%20371.498%20251.654%20358.4%20265.162%20351.256L340.073%20309.581C352.353%20302.437%20368.318%20302.437%20381.827%20309.581L456.737%20351.256C469.018%20358.4%20477.614%20371.498%20477.614%20385.786V440.558L542.7%20403.646V348.874C542.7%20334.586%20535.332%20321.488%20521.824%20314.344L383.055%20235.758C370.774%20228.614%20354.81%20228.614%20341.301%20235.758L200.076%20314.344C186.567%20321.488%20179.199%20334.586%20179.199%20348.874V507.237C179.199%20521.525%20186.567%20534.623%20200.076%20541.767L341.301%20620.353C353.582%20627.498%20369.546%20627.498%20383.055%20620.353L478.842%20566.772L543.928%20529.86L639.716%20476.279C651.996%20469.135%20667.961%20469.135%20681.469%20476.279L756.38%20517.953C768.66%20525.098%20777.257%20538.195%20777.257%20552.484V637.023C777.257%20651.312%20769.888%20664.409%20756.38%20671.553L681.469%20714.419C669.189%20721.563%20653.224%20721.563%20639.716%20714.419L564.805%20672.744C552.525%20665.6%20543.928%20652.502%20543.928%20638.214V583.442L478.842%20620.353V675.125C478.842%20689.414%20486.21%20702.512%20499.719%20709.656L640.944%20788.242C653.224%20795.386%20669.189%20795.386%20682.697%20788.242L823.922%20709.656C836.203%20702.512%20844.799%20689.414%20844.799%20675.125V516.763C844.799%20502.474%20837.431%20489.377%20823.922%20482.232L681.469%20402.456Z%22%20fill%3D%22white%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%22100%25%22%20height%3D%2235%22%20%20viewBox%3D%22800%200%20300%20200%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%20%20%20%20%3Cline%20x1%3D%220%22%20x2%3D%222000%22%20y1%3D%22100%22%20y2%3D%22100%22%20stroke%3D%22currentColor%22%20stroke-width%3D%2220%22%20stroke-linecap%3D%22round%22%20stroke-dasharray%3D%221%2C%2045%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2223%22%20height%3D%2220%22%20viewBox%3D%220%200%2023%2020%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cdefs%3E%20%3ClinearGradient%20id%3D%22gradient1%22%20x1%3D%220%22%20y1%3D%220%22%20x2%3D%221%22%20y2%3D%220%22%20gradientTransform%3D%22rotate%2895%29%22%3E%20%20%20%20%3Cstop%20id%3D%22stop1%22%20offset%3D%220%22%20stop-color%3D%22%232274E2%22%2F%3E%20%20%20%20%3Cstop%20id%3D%22stop1%22%20offset%3D%220.5%22%20stop-color%3D%22%232274E2%22%2F%3E%20%20%20%20%3Cstop%20id%3D%22stop2%22%20offset%3D%221%22%20stop-color%3D%22%233FB672%22%20%2F%3E%20%20%3C%2FlinearGradient%3E%20%20%3C%2Fdefs%3E%3Cpath%20d%3D%22M16%2016C10%2016%209%2010%205%2010M16%2016C16%2017.6569%2017.3431%2019%2019%2019C20.6569%2019%2022%2017.6569%2022%2016C22%2014.3431%2020.6569%2013%2019%2013C17.3431%2013%2016%2014.3431%2016%2016ZM5%2010C9%2010%2010%204%2016%204M5%2010H1.5M16%204C16%205.65685%2017.3431%207%2019%207C20.6569%207%2022%205.65685%2022%204C22%202.34315%2020.6569%201%2019%201C17.3431%201%2016%202.34315%2016%204Z%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20stroke%3D%22url%28%23gradient1%29%22%20%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2022%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M19%2018C19%2018.5523%2018.5523%2019%2018%2019V21C19.6569%2021%2021%2019.6569%2021%2018H19ZM18%2019C17.4477%2019%2017%2018.5523%2017%2018H15C15%2019.6569%2016.3431%2021%2018%2021V19ZM17%2018C17%2017.4477%2017.4477%2017%2018%2017V15C16.3431%2015%2015%2016.3431%2015%2018H17ZM18%2017C18.5523%2017%2019%2017.4477%2019%2018H21C21%2016.3431%2019.6569%2015%2018%2015V17ZM8%207H16V5H8V7ZM16%2011H8V13H16V11ZM8%2019H16V17H8V19ZM4%2015C4%2017.2091%205.79086%2019%208%2019V17C6.89543%2017%206%2016.1046%206%2015H4ZM8%2011C5.79086%2011%204%2012.7909%204%2015H6C6%2013.8954%206.89543%2013%208%2013V11ZM18%209C18%2010.1046%2017.1046%2011%2016%2011V13C18.2091%2013%2020%2011.2091%2020%209H18ZM16%207C17.1046%207%2018%207.89543%2018%209H20C20%206.79086%2018.2091%205%2016%205V7ZM7%206C7%206.55228%206.55228%207%206%207V9C7.65685%209%209%207.65685%209%206H7ZM6%207C5.44772%207%205%206.55228%205%206H3C3%207.65685%204.34315%209%206%209V7ZM5%206C5%205.44772%205.44772%205%206%205V3C4.34315%203%203%204.34315%203%206H5ZM6%205C6.55228%205%207%205.44772%207%206H9C9%204.34315%207.65685%203%206%203V5Z%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%227%22%20viewBox%3D%220%200%2012%207%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%20%20%20%20%3Cpath%20d%3D%22M0.97168%201L6.20532%206L11.439%201%22%20stroke%3D%22%23AEAEAE%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%22225%22%20height%3D%22225%22%20viewBox%3D%220%200%20225%20225%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M74.8125%20190.529C65.7561%20190.513%2055.5298%20183.748%2051.9715%20175.42L19.9417%20100.456C16.3834%2092.1277%2020.8404%2085.39%2029.8968%2085.4068L111.417%2085.5579C120.473%2085.5747%20130.699%2092.3395%20134.258%20100.668L166.288%20175.632C169.846%20183.96%20165.389%20190.697%20156.332%20190.681L74.8125%20190.529Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint0_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint1_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint2_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint3_radial%29%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M92.958%20165.95C82.7695%20165.931%2071.265%20158.321%2067.2619%20148.952L26.2489%2052.9632C22.2458%2043.5941%2027.26%2036.0143%2037.4485%2036.0332L141.832%2036.2266C152.02%2036.2455%20163.525%2043.8559%20167.528%2053.225L208.541%20149.214C212.544%20158.583%20207.53%20166.163%20197.341%20166.144L92.958%20165.95ZM71.3614%20148.959C74.475%20156.246%2083.4229%20162.166%2091.3473%20162.18L195.73%20162.374C203.655%20162.388%20207.555%20156.493%20204.441%20149.206L163.428%2053.2174C160.315%2045.9304%20151.367%2040.0111%20143.442%2039.9964L39.0592%2039.803C31.1349%2039.7883%2027.2349%2045.6837%2030.3485%2052.9708L71.3614%20148.959Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M68.565%2053.3425C81.1781%2053.3659%2095.4205%2062.7875%20100.376%2074.3862C105.332%2085.985%2099.1246%2095.3687%2086.5115%2095.3454C73.8984%2095.322%2059.6559%2085.9004%2054.7001%2074.3016C49.7443%2062.7028%2055.9518%2053.3191%2068.565%2053.3425Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M90.6891%20104.981C103.302%20105.004%20117.545%20114.425%20122.5%20126.024C127.456%20137.623%20121.249%20147.007%20108.636%20146.983C96.0225%20146.96%2081.7801%20137.538%2076.8243%20125.94C71.8685%20114.341%2078.076%20104.957%2090.6891%20104.981Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M147.538%20105.142C160.151%20105.166%20174.394%20114.587%20179.349%20126.186C184.305%20137.785%20178.098%20147.168%20165.485%20147.145C152.871%20147.122%20138.629%20137.7%20133.673%20126.101C128.717%20114.503%20134.925%20105.119%20147.538%20105.142Z%22%20fill%3D%22%23131313%22%2F%3E%3Cdefs%3E%3CradialGradient%20id%3D%22paint0_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%28134.41%2068.3006%29%20rotate%28-33.9533%29%20scale%2890.6795%2083.3208%29%22%3E%3Cstop%20offset%3D%220.661458%22%20stop-color%3D%22%23C4FCF8%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint1_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%2842.7873%20129.218%29%20rotate%28-24.1606%29%20scale%28213.359%20196.045%29%22%3E%3Cstop%20stop-color%3D%22%23FF0099%22%20stop-opacity%3D%220.9%22%2F%3E%3Cstop%20offset%3D%220.770833%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint2_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%28176.854%20148.655%29%20rotate%28-53.4908%29%20scale%28107.342%2098.6309%29%22%3E%3Cstop%20stop-color%3D%22%23FFEC43%22%2F%3E%3Cstop%20offset%3D%220.805707%22%20stop-color%3D%22%23FFF6A8%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint3_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%2857.5443%2053.4752%29%20rotate%2820.3896%29%20scale%28137.027%20125.907%29%22%3E%3Cstop%20offset%3D%220.125%22%20stop-color%3D%22%235886FE%22%20stop-opacity%3D%220.46%22%2F%3E%3Cstop%20offset%3D%220.673044%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3C%2Fdefs%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2214%22%20height%3D%2215%22%20viewBox%3D%220%200%2014%2015%22%20fill%3D%22black%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20style%3D%22mix-blend-mode%3Adarken%22%3E%3Cpath%20d%3D%22M4.15217%201.55141C3.96412%201.52242%203.95619%201.51902%204.04468%201.5055C4.21427%201.47958%204.61472%201.51491%204.89067%201.58012C5.53489%201.73232%206.12109%202.12221%206.74683%202.81466L6.91307%202.99862L7.15088%202.96062C8.15274%202.8006%209.17194%202.92778%2010.0244%203.31918C10.2589%203.42686%2010.6287%203.64121%2010.6749%203.69629C10.6896%203.71384%2010.7166%203.82684%2010.7349%203.94742C10.7982%204.36458%2010.7665%204.68434%2010.6382%204.92317C10.5683%205.05313%2010.5644%205.09432%2010.6114%205.20554C10.6489%205.2943%2010.7534%205.35999%2010.8569%205.35985C11.0687%205.35956%2011.2968%205.0192%2011.4024%204.54561L11.4444%204.3575L11.5275%204.45109C11.9835%204.96459%2012.3417%205.66488%2012.4032%206.16335L12.4192%206.29332L12.3426%206.17517C12.2107%205.97186%2012.0781%205.83346%2011.9084%205.72183C11.6024%205.52062%2011.2789%205.45215%2010.4222%205.40727C9.64839%205.36675%209.21045%205.30106%208.77621%205.16032C8.03738%204.9209%207.66493%204.60204%206.78729%203.4576C6.39748%202.94928%206.15654%202.66804%205.91687%202.44155C5.37228%201.92691%204.83716%201.65701%204.15217%201.55141Z%22%2F%3E%3Cpath%20d%3D%22M10.8494%202.68637C10.8689%202.34575%2010.9153%202.12108%2011.0088%201.9159C11.0458%201.83469%2011.0804%201.76822%2011.0858%201.76822C11.0911%201.76822%2011.075%201.82816%2011.05%201.90142C10.9821%202.10054%2010.9709%202.3729%2011.0177%202.68978C11.0771%203.09184%2011.1109%203.14985%2011.5385%203.58416C11.739%203.78788%2011.9723%204.0448%2012.0568%204.15511L12.2106%204.35568L12.0568%204.21234C11.8688%204.03705%2011.4364%203.6952%2011.3409%203.64633C11.2768%203.61356%2011.2673%203.61413%2011.2278%203.65321C11.1914%203.68922%2011.1837%203.74333%2011.1787%203.99915C11.1708%204.39786%2011.1161%204.65377%2010.9842%204.90965C10.9128%205.04805%2010.9015%205.01851%2010.9661%204.8623C11.0143%204.74566%2011.0192%204.69439%2011.0189%204.30842C11.0181%203.53291%2010.9255%203.34647%2010.3823%203.02709C10.2447%202.94618%2010.0179%202.8295%209.87839%202.76778C9.73887%202.70606%209.62805%202.6523%209.63208%202.64828C9.64746%202.63307%2010.1772%202.78675%2010.3905%202.86828C10.7077%202.98954%2010.76%203.00526%2010.7985%202.99063C10.8244%202.98082%2010.8369%202.90608%2010.8494%202.68637Z%22%2F%3E%3Cpath%20d%3D%22M4.51745%204.01304C4.13569%203.49066%203.89948%202.68973%203.95062%202.091L3.96643%201.90572L4.05333%201.92148C4.21652%201.95106%204.49789%202.05515%204.62964%202.13469C4.9912%202.35293%205.14773%202.64027%205.30697%203.37811C5.35362%203.59423%205.41482%203.8388%205.44298%203.9216C5.48831%204.05487%205.65962%204.36617%205.7989%204.56834C5.89922%204.71395%205.83258%204.78295%205.61082%204.76305C5.27215%204.73267%204.8134%204.41799%204.51745%204.01304Z%22%2F%3E%3Cpath%20d%3D%22M10.3863%207.90088C8.60224%207.18693%207.97389%206.56721%207.97389%205.52157C7.97389%205.36769%207.97922%205.24179%207.98571%205.24179C7.99221%205.24179%208.06124%205.29257%208.1391%205.35465C8.50088%205.64305%208.906%205.76623%2010.0275%205.92885C10.6875%206.02455%2011.0589%206.10185%2011.4015%206.21477C12.4904%206.57371%2013.1641%207.30212%2013.3248%208.29426C13.3715%208.58255%2013.3441%209.12317%2013.2684%209.4081C13.2087%209.63315%2013.0263%2010.0388%2012.9779%2010.0544C12.9645%2010.0587%2012.9514%2010.0076%2012.9479%209.93809C12.9296%209.56554%2012.7402%209.20285%2012.4221%208.93116C12.0604%208.62227%2011.5745%208.37633%2010.3863%207.90088Z%22%2F%3E%3Cpath%20d%3D%22M9.13385%208.19748C9.11149%208.06527%209.07272%207.89643%209.04769%207.82228L9.00217%207.68748L9.08672%207.7818C9.20374%207.91233%209.2962%208.07937%209.37457%208.30185C9.43438%208.47165%209.44111%208.52215%209.44066%208.79807C9.4402%209.06896%209.43273%209.12575%209.3775%209.27858C9.29042%209.51959%209.18233%209.69048%209.00097%209.87391C8.67507%2010.2036%208.25607%2010.3861%207.65143%2010.4618C7.54633%2010.4749%207.24%2010.4971%206.97069%2010.511C6.292%2010.5461%205.84531%2010.6186%205.44393%2010.7587C5.38623%2010.7788%205.3347%2010.7911%205.32947%2010.7859C5.31323%2010.7698%205.58651%2010.6079%205.81223%2010.4998C6.1305%2010.3474%206.44733%2010.2643%207.15719%2010.1468C7.50785%2010.0887%207.86998%2010.0183%207.96194%209.99029C8.83033%209.72566%209.27671%209.04276%209.13385%208.19748Z%22%2F%3E%3Cpath%20d%3D%22M9.95169%209.64109C9.71465%209.13463%209.66022%208.64564%209.79009%208.18961C9.80399%208.14088%209.82632%208.101%209.83976%208.101C9.85319%208.101%209.90913%208.13105%209.96404%208.16777C10.0733%208.24086%2010.2924%208.36395%2010.876%208.68023C11.6043%209.0749%2012.0196%209.3805%2012.302%209.72965C12.5493%2010.0354%2012.7023%2010.3837%2012.776%2010.8084C12.8177%2011.0489%2012.7932%2011.6277%2012.7311%2011.8699C12.5353%2012.6337%2012.0802%2013.2336%2011.4311%2013.5837C11.336%2013.635%2011.2506%2013.6771%2011.2414%2013.6773C11.2321%2013.6775%2011.2668%2013.5899%2011.3184%2013.4827C11.5367%2013.029%2011.5616%2012.5877%2011.3965%2012.0965C11.2954%2011.7957%2011.0893%2011.4287%2010.6732%2010.8084C10.1893%2010.0873%2010.0707%209.89539%209.95169%209.64109Z%22%2F%3E%3Cpath%20d%3D%22M3.25046%2012.3737C3.91252%2011.8181%204.73629%2011.4234%205.48666%2011.3022C5.81005%2011.25%206.34877%2011.2707%206.64823%2011.3469C7.12824%2011.469%207.55763%2011.7425%207.78094%2012.0683C7.99918%2012.3867%208.09281%2012.6642%208.19029%2013.2816C8.22875%2013.5252%208.27057%2013.7697%208.28323%2013.8251C8.35644%2014.1451%208.4989%2014.4008%208.67544%2014.5293C8.95583%2014.7333%209.43865%2014.7459%209.91362%2014.5618C9.99423%2014.5305%2010.0642%2014.5089%2010.0691%2014.5138C10.0864%2014.5308%209.84719%2014.6899%209.67847%2014.7737C9.45143%2014.8864%209.2709%2014.93%209.03102%2014.93C8.59601%2014.93%208.23486%2014.7101%207.9335%2014.2616C7.87419%2014.1733%207.7409%2013.909%207.63729%2013.6741C7.3191%2012.9528%207.16199%2012.7331%206.79255%2012.4926C6.47104%2012.2834%206.05641%2012.2459%205.74449%2012.3979C5.33475%2012.5976%205.22043%2013.118%205.51389%2013.4478C5.63053%2013.5789%205.84803%2013.6919%206.02588%2013.7139C6.35861%2013.7551%206.64455%2013.5035%206.64455%2013.1696C6.64455%2012.9528%206.56071%2012.8291%206.34966%2012.7344C6.0614%2012.6051%205.75156%2012.7562%205.75304%2013.0254C5.75368%2013.1402%205.80396%2013.2122%205.91971%2013.2643C5.99397%2013.2977%205.99569%2013.3003%205.93514%2013.2878C5.67066%2013.2333%205.6087%2012.9164%205.82135%2012.706C6.07667%2012.4535%206.60461%2012.5649%206.78591%2012.9097C6.86208%2013.0545%206.87092%2013.3429%206.80451%2013.517C6.6559%2013.9068%206.22256%2014.1117%205.78297%2014.0002C5.48368%2013.9242%205.36181%2013.842%205.00097%2013.4726C4.37395%2012.8306%204.13053%2012.7062%203.22657%2012.566L3.05335%2012.5391L3.25046%2012.3737Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M0.308383%200.883984C2.40235%203.40996%203.84457%204.45213%204.00484%204.67231C4.13717%204.85412%204.08737%205.01757%203.86067%205.14567C3.7346%205.21689%203.47541%205.28905%203.34564%205.28905C3.19887%205.28905%203.14847%205.23278%203.14847%205.23278C3.06337%205.15255%203.01544%205.16658%202.5784%204.39555C1.97166%203.45981%201.46389%202.68357%201.45004%202.67057C1.41801%202.64052%201.41856%202.64153%202.51654%204.59413C2.69394%205.0011%202.55182%205.15049%202.55182%205.20845C2.55182%205.32636%202.51946%205.38834%202.37311%205.55059C2.12914%205.8211%202.02008%206.12505%201.94135%206.7541C1.8531%207.45926%201.60492%207.95737%200.917156%208.80989C0.514562%209.30893%200.448686%209.4004%200.3471%209.60153C0.219144%209.85482%200.183961%209.99669%200.169701%2010.3165C0.154629%2010.6547%200.183983%2010.8732%200.287934%2011.1965C0.378939%2011.4796%200.473932%2011.6665%200.716778%2012.0403C0.926351%2012.3629%201.04702%2012.6027%201.04702%2012.6965C1.04702%2012.7711%201.06136%2012.7712%201.38611%2012.6983C2.16328%2012.5239%202.79434%2012.2171%203.14925%2011.8411C3.36891%2011.6084%203.42048%2011.4799%203.42215%2011.1611C3.42325%2010.9525%203.41587%2010.9088%203.35914%2010.7888C3.2668%2010.5935%203.09869%2010.4311%202.72817%2010.1794C2.2427%209.84953%202.03534%209.58398%201.97807%209.21878C1.93108%208.91913%201.98559%208.70771%202.25416%208.14825C2.53214%207.56916%202.60103%207.32239%202.64763%206.73869C2.67773%206.36158%202.71941%206.21286%202.82842%206.09348C2.94212%205.969%203.04447%205.92684%203.32584%205.88863C3.78457%205.82635%204.07667%205.70839%204.31677%205.48849C4.52505%205.29772%204.61221%205.11391%204.62558%204.8372L4.63574%204.62747L4.51934%204.49259C4.09783%204.00411%200.0261003%200.5%200.000160437%200.5C-0.00538105%200.5%200.133325%200.672804%200.308383%200.883984ZM1.28364%2010.6992C1.37894%2010.5314%201.3283%2010.3158%201.16889%2010.2104C1.01827%2010.1109%200.78428%2010.1578%200.78428%2010.2875C0.78428%2010.3271%200.806303%2010.3559%200.855937%2010.3813C0.939514%2010.424%200.945581%2010.4721%200.879823%2010.5703C0.81323%2010.6698%200.818604%2010.7573%200.894991%2010.8167C1.0181%2010.9125%201.19237%2010.8598%201.28364%2010.6992Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M4.92523%205.99865C4.70988%206.06439%204.50054%206.29124%204.43574%206.5291C4.39621%206.67421%204.41864%206.92875%204.47785%207.00736C4.57351%207.13433%204.66602%207.16778%204.91651%207.16603C5.40693%207.16263%205.83327%206.95358%205.88284%206.69224C5.92347%206.47801%205.73622%206.18112%205.4783%206.05078C5.34521%205.98355%205.06217%205.95688%204.92523%205.99865ZM5.49853%206.44422C5.57416%206.33741%205.54107%206.22198%205.41245%206.14391C5.1675%205.99525%204.79708%206.11827%204.79708%206.34826C4.79708%206.46274%204.99025%206.58765%205.16731%206.58765C5.28516%206.58765%205.44644%206.5178%205.49853%206.44422Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2294%22%20height%3D%2294%22%20viewBox%3D%220%200%2094%2094%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%20%20%3Cpath%20d%3D%22M92%2047C92%2022.1472%2071.8528%202%2047%202C22.1472%202%202%2022.1472%202%2047C2%2071.8528%2022.1472%2092%2047%2092%22%20stroke%3D%22%232172E5%22%20stroke-width%3D%223%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E\"","export default \"f89237c6bc3f84db.png\"","/*eslint-disable*/module.exports={messages:{\"$-\":\"$-\",\"$<0/>\":\"$<0/>\",\"${0}\":[\"$\",[\"0\"]],\"(${0})\":[\"($\",[\"0\"],\")\"],\"(View on Explorer)\":\"(View on Explorer)\",\"(clear all)\":\"(clear all)\",\"(edit)\":\"(edit)\",\"- Remove recipient\":\"- Remove recipient\",\"0 UNI / week\":\"0 UNI / week\",\"25%\":\"25%\",\"50%\":\"50%\",\"75%\":\"75%\",\"<0/> All Proposals\":\"<0/> All Proposals\",\"<0/> Votes\":\"<0/> Votes\",\"<0>Account analytics and accrued fees<1> ↗ \":\"<0>Account analytics and accrued fees<1> ↗ \",\"<0>Current Price:<1><2/><3>{0} per {1}\":[\"<0>Current Price:<1><2/><3>\",[\"0\"],\" per \",[\"1\"],\"\"],\"<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.\":\"<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.\",\"<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.\":\"<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.\",\"<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.\":\"<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.\",\"<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.\":\"<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.\",\"<0>Unlock voting to prepare for the next proposal.\":\"<0>Unlock voting to prepare for the next proposal.\",\"<0>🎉 Welcome to team Unicorn :) <1>🎉\":\"<0>🎉 Welcome to team Unicorn :) <1>🎉\",\"A minimum threshold of 0.25% of the total UNI supply is required to submit proposals\":\"A minimum threshold of 0.25% of the total UNI supply is required to submit proposals\",\"About\":\"About\",\"Accept\":\"Accept\",\"Account\":\"Account\",\"Active\":\"Active\",\"Add\":\"Add\",\"Add <0/> and <1/> to Uniswap V2\":\"Add <0/> and <1/> to Uniswap V2\",\"Add Delegate +\":\"Add Delegate +\",\"Add Liquidity\":\"Add Liquidity\",\"Add V2 Liquidity\":\"Add V2 Liquidity\",\"Add liquidity.\":\"Add liquidity.\",\"Add more liquidity\":\"Add more liquidity\",\"Add {0} to Metamask <0/>\":[\"Add \",[\"0\"],\" to Metamask <0/>\"],\"Add {0}-{1} liquidity\":[\"Add \",[\"0\"],\"-\",[\"1\"],\" liquidity\"],\"Add {0}/{1} V3 liquidity\":[\"Add \",[\"0\"],\"/\",[\"1\"],\" V3 liquidity\"],\"Added {0}\":[\"Added \",[\"0\"]],\"Address has no available claim\":\"Address has no available claim\",\"Against\":\"Against\",\"Allow LP token migration\":\"Allow LP token migration\",\"Allow high price impact trades and skip the confirm screen. Use at your own risk.\":\"Allow high price impact trades and skip the confirm screen. Use at your own risk.\",\"Allow the Uniswap Protocol to use your {0}\":[\"Allow the Uniswap Protocol to use your \",[\"0\"]],\"Allowed\":\"Allowed\",\"Amount\":\"Amount\",\"An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.\":\"An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.\",\"Approval pending <0/>\":\"Approval pending <0/>\",\"Approve\":\"Approve\",\"Approve Token\":\"Approve Token\",\"Approve {0}\":[\"Approve \",[\"0\"]],\"Approve {0} first\":[\"Approve \",[\"0\"],\" first\"],\"Approved\":\"Approved\",\"Approving\":\"Approving\",\"Approving {0}\":[\"Approving \",[\"0\"]],\"Arbiscan\":\"Arbiscan\",\"Arbitrum Bridge\":\"Arbitrum Bridge\",\"Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.\":\"Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.\",\"Are you sure?\":\"Are you sure?\",\"As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI\":\"As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI\",\"At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.\":[\"At least \",[\"0\"],\" \",[\"1\"],\" and \",[\"2\"],\" \",[\"3\"],\" will be refunded to your wallet due to selected price range.\"],\"Auto\":\"Auto\",\"Auto Router API\":\"Auto Router API\",\"Available to deposit: {0}\":[\"Available to deposit: \",[\"0\"]],\"Balance: {0}\":[\"Balance: \",[\"0\"]],\"Best for exotic pairs.\":\"Best for exotic pairs.\",\"Best for most pairs.\":\"Best for most pairs.\",\"Best for stable pairs.\":\"Best for stable pairs.\",\"Best for very stable pairs.\":\"Best for very stable pairs.\",\"Best price route costs ~{formattedGasPriceString} in gas.\":[\"Best price route costs ~\",[\"formattedGasPriceString\"],\" in gas.\"],\"Blocked address\":\"Blocked address\",\"Bridge\":\"Bridge\",\"By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.\":\"By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.\",\"By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.\":\"By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.\",\"By connecting a wallet, you agree to Uniswap Labs’ <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.\":\"By connecting a wallet, you agree to Uniswap Labs’ <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.\",\"Canceled\":\"Canceled\",\"Change\":\"Change\",\"Charts\":\"Charts\",\"Check network status\":\"Check network status\",\"Check out our v3 LP walkthrough and migration guides.\":\"Check out our v3 LP walkthrough and migration guides.\",\"Claim\":\"Claim\",\"Claim <0/> for {0}\":[\"Claim <0/> for \",[\"0\"]],\"Claim UNI\":\"Claim UNI\",\"Claim UNI Token\":\"Claim UNI Token\",\"Claim UNI reward for {0}\":[\"Claim UNI reward for \",[\"0\"]],\"Claim fees\":\"Claim fees\",\"Claim your UNI tokens\":\"Claim your UNI tokens\",\"Claimed\":\"Claimed\",\"Claimed UNI!\":\"Claimed UNI!\",\"Claimed!\":\"Claimed!\",\"Claiming\":\"Claiming\",\"Claiming UNI\":\"Claiming UNI\",\"Claiming {0} UNI\":[\"Claiming \",[\"0\"],\" UNI\"],\"Clear All\":\"Clear All\",\"Clear all\":\"Clear all\",\"Close\":\"Close\",\"Closed\":\"Closed\",\"Collect\":\"Collect\",\"Collect as WETH\":\"Collect as WETH\",\"Collect fees\":\"Collect fees\",\"Collect {0}/{1} fees\":[\"Collect \",[\"0\"],\"/\",[\"1\"],\" fees\"],\"Collected\":\"Collected\",\"Collecting\":\"Collecting\",\"Collecting fees\":\"Collecting fees\",\"Collecting fees will withdraw currently available fees for you.\":\"Collecting fees will withdraw currently available fees for you.\",\"Confirm\":\"Confirm\",\"Confirm Supply\":\"Confirm Supply\",\"Confirm Swap\":\"Confirm Swap\",\"Confirm swap\":\"Confirm swap\",\"Confirm this transaction in your wallet\":\"Confirm this transaction in your wallet\",\"Confirm transaction in wallet\":\"Confirm transaction in wallet\",\"Connect Wallet\":\"Connect Wallet\",\"Connect a wallet\":\"Connect a wallet\",\"Connect to a wallet to find pools\":\"Connect to a wallet to find pools\",\"Connect to a wallet to view your V2 liquidity.\":\"Connect to a wallet to view your V2 liquidity.\",\"Connect to a wallet to view your liquidity.\":\"Connect to a wallet to view your liquidity.\",\"Connect wallet to swap\":\"Connect wallet to swap\",\"Connected with {name}\":[\"Connected with \",[\"name\"]],\"Copied\":\"Copied\",\"Copy Address\":\"Copy Address\",\"Create Pool & Supply\":\"Create Pool & Supply\",\"Create Proposal\":\"Create Proposal\",\"Create a pair\":\"Create a pair\",\"Create a pool\":\"Create a pool\",\"Create an issue on GitHub\":\"Create an issue on GitHub\",\"Create pool and add {0}/{1} V3 liquidity\":[\"Create pool and add \",[\"0\"],\"/\",[\"1\"],\" V3 liquidity\"],\"Create pool.\":\"Create pool.\",\"Create {0}/{1} V3 pool\":[\"Create \",[\"0\"],\"/\",[\"1\"],\" V3 pool\"],\"Current price\":\"Current price\",\"Current {0} Price:\":[\"Current \",[\"0\"],\" Price:\"],\"Custom\":\"Custom\",\"Dark Theme\":\"Dark Theme\",\"Defeated\":\"Defeated\",\"Delegate Votes\":\"Delegate Votes\",\"Delegate voting power to {0}\":[\"Delegate voting power to \",[\"0\"]],\"Delegated to:\":\"Delegated to:\",\"Delegating votes\":\"Delegating votes\",\"Deposit\":\"Deposit\",\"Deposit Amounts\":\"Deposit Amounts\",\"Deposit UNI-V2 LP Tokens\":\"Deposit UNI-V2 LP Tokens\",\"Deposit liquidity\":\"Deposit liquidity\",\"Deposit tokens to the {label} network.\":[\"Deposit tokens to the \",[\"label\"],\" network.\"],\"Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.\":\"Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.\",\"Deposited liquidity:\":\"Deposited liquidity:\",\"Deposited {0} UNI-V2\":[\"Deposited \",[\"0\"],\" UNI-V2\"],\"Depositing Liquidity\":\"Depositing Liquidity\",\"Description\":\"Description\",\"Detailed\":\"Detailed\",\"Details\":\"Details\",\"Disconnect\":\"Disconnect\",\"Discord\":\"Discord\",\"Dismiss\":\"Dismiss\",\"Docs\":\"Docs\",\"Don’t see one of your v2 positions? <0>Import it.\":\"Don’t see one of your v2 positions? <0>Import it.\",\"Earned UNI tokens represent voting shares in Uniswap governance.\":\"Earned UNI tokens represent voting shares in Uniswap governance.\",\"Edit\":\"Edit\",\"Efficiency Comparison\":\"Efficiency Comparison\",\"Enter a percent\":\"Enter a percent\",\"Enter a recipient\":\"Enter a recipient\",\"Enter a valid slippage percentage\":\"Enter a valid slippage percentage\",\"Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.\":\"Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.\",\"Enter an amount\":\"Enter an amount\",\"Enter valid list location\":\"Enter valid list location\",\"Enter valid token address\":\"Enter valid token address\",\"Enter {0} amount\":[\"Enter \",[\"0\"],\" amount\"],\"Error\":\"Error\",\"Error connecting\":\"Error connecting\",\"Error connecting. Try refreshing the page.\":\"Error connecting. Try refreshing the page.\",\"Error details\":\"Error details\",\"Error importing list\":\"Error importing list\",\"Estimate may differ due to your wallet gas settings\":\"Estimate may differ due to your wallet gas settings\",\"Estimated network fee\":\"Estimated network fee\",\"Etherscan\":\"Etherscan\",\"Executed\":\"Executed\",\"Expanded results from inactive Token Lists\":\"Expanded results from inactive Token Lists\",\"Expected Output\":\"Expected Output\",\"Expert Mode\":\"Expert Mode\",\"Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.\":\"Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.\",\"Expired\":\"Expired\",\"Explore Uniswap Analytics.\":\"Explore Uniswap Analytics.\",\"Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.\":[\"Failed to switch networks from the Uniswap Interface. In order to use Uniswap on \",[\"0\"],\", you must change the network in your wallet.\"],\"Fee Tier\":\"Fee Tier\",\"Fee tier\":\"Fee tier\",\"Fetching best price...\":\"Fetching best price...\",\"Fetching best price…\":\"Fetching best price…\",\"For\":\"For\",\"For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.\":\"For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.\",\"From\":\"From\",\"From (at most)\":\"From (at most)\",\"Full Range\":\"Full Range\",\"Full range positions may earn less fees than concentrated positions. Learn more <0>here.\":\"Full range positions may earn less fees than concentrated positions. Learn more <0>here.\",\"Get support on Discord\":\"Get support on Discord\",\"Help Center\":\"Help Center\",\"Hide\":\"Hide\",\"Hide closed positions\":\"Hide closed positions\",\"High Price Impact\":\"High Price Impact\",\"How this app uses APIs\":\"How this app uses APIs\",\"I understand\":\"I understand\",\"If you purchase a token from this list, you may not be able to sell it back.\":\"If you purchase a token from this list, you may not be able to sell it back.\",\"Import\":\"Import\",\"Import List\":\"Import List\",\"Import Pool\":\"Import Pool\",\"Import V2 Pool\":\"Import V2 Pool\",\"Import at your own risk\":\"Import at your own risk\",\"In range\":\"In range\",\"Increase Liquidity\":\"Increase Liquidity\",\"Initial prices and pool share\":\"Initial prices and pool share\",\"Initializing...\":\"Initializing...\",\"Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.\":[\"Input is estimated. You will sell at most <0>\",[\"0\"],\" \",[\"1\"],\" or the transaction will revert.\"],\"Install Metamask\":\"Install Metamask\",\"Insufficient liquidity for this trade.\":\"Insufficient liquidity for this trade.\",\"Insufficient {0}\":[\"Insufficient \",[\"0\"]],\"Insufficient {0} balance\":[\"Insufficient \",[\"0\"],\" balance\"],\"Interface Settings\":\"Interface Settings\",\"Invalid pair\":\"Invalid pair\",\"Invalid pair.\":\"Invalid pair.\",\"Invalid price input\":\"Invalid price input\",\"Invalid range selected. The min price must be lower than the max price.\":\"Invalid range selected. The min price must be lower than the max price.\",\"Invalid recipient\":\"Invalid recipient\",\"Language\":\"Language\",\"Learn\":\"Learn\",\"Learn about providing liquidity\":\"Learn about providing liquidity\",\"Learn more\":\"Learn more\",\"Legal & Privacy\":\"Legal & Privacy\",\"Light Theme\":\"Light Theme\",\"Liquidity\":\"Liquidity\",\"Liquidity data not available.\":\"Liquidity data not available.\",\"Liquidity provider rewards\":\"Liquidity provider rewards\",\"Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.\":\"Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.\",\"Lists\":\"Lists\",\"Loaded\":\"Loaded\",\"Loading\":\"Loading\",\"MAX\":\"MAX\",\"Manage\":\"Manage\",\"Manage Liquidity in Rewards Pool\":\"Manage Liquidity in Rewards Pool\",\"Manage Token Lists\":\"Manage Token Lists\",\"Manage this pool.\":\"Manage this pool.\",\"Max\":\"Max\",\"Max Price\":\"Max Price\",\"Max price\":\"Max price\",\"Max slippage\":\"Max slippage\",\"Max:\":\"Max:\",\"Maximum sent\":\"Maximum sent\",\"Menu\":\"Menu\",\"Migrate\":\"Migrate\",\"Migrate Liquidity to V3\":\"Migrate Liquidity to V3\",\"Migrate V2 Liquidity\":\"Migrate V2 Liquidity\",\"Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.\":\"Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.\",\"Migrate {0}/{1} liquidity to V3\":[\"Migrate \",[\"0\"],\"/\",[\"1\"],\" liquidity to V3\"],\"Migrating\":\"Migrating\",\"Min Price\":\"Min Price\",\"Min price\":\"Min price\",\"Min:\":\"Min:\",\"Minimum received\":\"Minimum received\",\"Missing dependencies\":\"Missing dependencies\",\"Mock Toggle\":\"Mock Toggle\",\"More\":\"More\",\"Network Fee\":\"Network Fee\",\"Network Warning\":\"Network Warning\",\"Network fees exceed 50% of the swap amount!\":\"Network fees exceed 50% of the swap amount!\",\"New Position\":\"New Position\",\"No V2 Liquidity found.\":\"No V2 Liquidity found.\",\"No active pools\":\"No active pools\",\"No data\":\"No data\",\"No description.\":\"No description.\",\"No liquidity found.\":\"No liquidity found.\",\"No pool found.\":\"No pool found.\",\"No proposals found.\":\"No proposals found.\",\"No results found.\":\"No results found.\",\"Not created\":\"Not created\",\"OFF\":\"OFF\",\"ON\":\"ON\",\"ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.\":\"ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.\",\"Off\":\"Off\",\"On\":\"On\",\"Once you are happy with the rate click supply to review.\":\"Once you are happy with the rate click supply to review.\",\"Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.\":[\"Only UNI votes that were self delegated or delegated to another address before block \",[\"0\"],\" are eligible for voting.\"],\"Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.\":\"Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.\",\"Optimism Gateway\":\"Optimism Gateway\",\"Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.\":\"Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.\",\"Optimistic Etherscan\":\"Optimistic Etherscan\",\"Out of range\":\"Out of range\",\"Output is estimated.\":\"Output is estimated.\",\"Output is estimated. If the price changes by more than {0}% your transaction will revert.\":[\"Output is estimated. If the price changes by more than \",[\"0\"],\"% your transaction will revert.\"],\"Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.\":[\"Output is estimated. You will receive at least <0>\",[\"0\"],\" \",[\"1\"],\" or the transaction will revert.\"],\"Output will be sent to <0>{0}\":[\"Output will be sent to <0>\",[\"0\"],\"\"],\"Owner\":\"Owner\",\"Participating pools\":\"Participating pools\",\"Pending\":\"Pending\",\"Please confirm you would like to remove this list by typing REMOVE\":\"Please confirm you would like to remove this list by typing REMOVE\",\"Please connect to Layer 1 Ethereum\":\"Please connect to Layer 1 Ethereum\",\"Please connect to a supported network in the dropdown menu or in your wallet.\":\"Please connect to a supported network in the dropdown menu or in your wallet.\",\"Please type the word \\\"{confirmWord}\\\" to enable expert mode.\":[\"Please type the word \\\"\",[\"confirmWord\"],\"\\\" to enable expert mode.\"],\"Polygon Bridge\":\"Polygon Bridge\",\"Polygonscan\":\"Polygonscan\",\"Pool\":\"Pool\",\"Pool Found!\":\"Pool Found!\",\"Pool Rate\":\"Pool Rate\",\"Pool rate\":\"Pool rate\",\"Pool tokens in rewards pool:\":\"Pool tokens in rewards pool:\",\"Pooled {0}:\":[\"Pooled \",[\"0\"],\":\"],\"Pools Overview\":\"Pools Overview\",\"Preview\":\"Preview\",\"Price\":\"Price\",\"Price Difference:\":\"Price Difference:\",\"Price Impact\":\"Price Impact\",\"Price Impact Too High\":\"Price Impact Too High\",\"Price Updated\":\"Price Updated\",\"Price impact\":\"Price impact\",\"Price range\":\"Price range\",\"Price updated\":\"Price updated\",\"Price:\":\"Price:\",\"Prices and pool share\":\"Prices and pool share\",\"Proposal\":\"Proposal\",\"Proposal Submitted\":\"Proposal Submitted\",\"Proposal Title\":\"Proposal Title\",\"Proposals\":\"Proposals\",\"Proposals submitted by community members will appear here.\":\"Proposals submitted by community members will appear here.\",\"Proposed Action\":\"Proposed Action\",\"Proposer\":\"Proposer\",\"Protocol Disclaimer\":\"Protocol Disclaimer\",\"Queued\":\"Queued\",\"Rates\":\"Rates\",\"Read more about UNI\":\"Read more about UNI\",\"Read more about Uniswap governance\":\"Read more about Uniswap governance\",\"Read more about providing liquidity\":\"Read more about providing liquidity\",\"Read more about unsupported assets\":\"Read more about unsupported assets\",\"Recent Transactions\":\"Recent Transactions\",\"Recent transactions\":\"Recent transactions\",\"Recipient\":\"Recipient\",\"Reload the page\":\"Reload the page\",\"Remove\":\"Remove\",\"Remove <0/> and <1/>\":\"Remove <0/> and <1/>\",\"Remove Amount\":\"Remove Amount\",\"Remove Delegate\":\"Remove Delegate\",\"Remove Liquidity\":\"Remove Liquidity\",\"Remove list\":\"Remove list\",\"Removing {0} {1} and {2} {3}\":[\"Removing \",[\"0\"],\" \",[\"1\"],\" and \",[\"2\"],\" \",[\"3\"]],\"Removing {0} {1} and{2} {3}\":[\"Removing \",[\"0\"],\" \",[\"1\"],\" and\",[\"2\"],\" \",[\"3\"]],\"Request Features\":\"Request Features\",\"Reset\":\"Reset\",\"Return\":\"Return\",\"Review swap\":\"Review swap\",\"Search by token name or address\":\"Search by token name or address\",\"Search name or paste address\":\"Search name or paste address\",\"Select Pair\":\"Select Pair\",\"Select a network\":\"Select a network\",\"Select a token\":\"Select a token\",\"Select a token to find your v2 liquidity.\":\"Select a token to find your v2 liquidity.\",\"Select an action\":\"Select an action\",\"Selected Range\":\"Selected Range\",\"Self\":\"Self\",\"Self Delegate\":\"Self Delegate\",\"Set Price Range\":\"Set Price Range\",\"Set Starting Price\":\"Set Starting Price\",\"Settings\":\"Settings\",\"Share of Pool\":\"Share of Pool\",\"Share of Pool:\":\"Share of Pool:\",\"Show Portis\":\"Show Portis\",\"Show closed positions\":\"Show closed positions\",\"Simple\":\"Simple\",\"Slippage tolerance\":\"Slippage tolerance\",\"Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.\":\"Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.\",\"Something went wrong\":\"Something went wrong\",\"Something went wrong.\":\"Something went wrong.\",\"Step 1. Get UNI-V2 Liquidity tokens\":\"Step 1. Get UNI-V2 Liquidity tokens\",\"Submit new proposal\":\"Submit new proposal\",\"Submitting Proposal\":\"Submitting Proposal\",\"Submitting Vote\":\"Submitting Vote\",\"Succeeded\":\"Succeeded\",\"Success\":\"Success\",\"Supply\":\"Supply\",\"Supplying {0} {1} and {2} {3}\":[\"Supplying \",[\"0\"],\" \",[\"1\"],\" and \",[\"2\"],\" \",[\"3\"]],\"Swap\":\"Swap\",\"Swap <0/> for exactly <1/>\":\"Swap <0/> for exactly <1/>\",\"Swap Anyway\":\"Swap Anyway\",\"Swap details\":\"Swap details\",\"Swap exactly <0/> for <1/>\":\"Swap exactly <0/> for <1/>\",\"Swap failed: {0}\":[\"Swap failed: \",[\"0\"]],\"Swap summary\":\"Swap summary\",\"Swapping {0} {1} for {2} {3}\":[\"Swapping \",[\"0\"],\" \",[\"1\"],\" for \",[\"2\"],\" \",[\"3\"]],\"Take a 10 minute survey to help us improve your experience in the Uniswap app.\":\"Take a 10 minute survey to help us improve your experience in the Uniswap app.\",\"Tell us what you think ↗\":\"Tell us what you think ↗\",\"Thanks for being part of the Uniswap community <0/>\":\"Thanks for being part of the Uniswap community <0/>\",\"The % you will earn in fees.\":\"The % you will earn in fees.\",\"The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.\":\"The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.\",\"The app fetches blockchain data from The Graph’s hosted service.\":\"The app fetches blockchain data from The Graph’s hosted service.\",\"The app fetches on-chain data and constructs contract calls with an Infura API.\":\"The app fetches on-chain data and constructs contract calls with an Infura API.\",\"The app fetches the optimal trade route from a Uniswap Labs server.\":\"The app fetches the optimal trade route from a Uniswap Labs server.\",\"The app logs anonymized usage statistics in order to improve over time.\":\"The app logs anonymized usage statistics in order to improve over time.\",\"The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.\":\"The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.\",\"The cost of sending this transaction is more than half of the value of the input amount.\":\"The cost of sending this transaction is more than half of the value of the input amount.\",\"The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.\":\"The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.\",\"The estimated difference between the USD values of input and output amounts.\":\"The estimated difference between the USD values of input and output amounts.\",\"The input token cannot be transferred. There may be an issue with the input token.\":\"The input token cannot be transferred. There may be an issue with the input token.\",\"The market price is outside your specified price range. Single-asset deposit only.\":\"The market price is outside your specified price range. Single-asset deposit only.\",\"The most recent block number on this network. Prices update on every block.\":\"The most recent block number on this network. Prices update on every block.\",\"The output token cannot be transferred. There may be an issue with the output token.\":\"The output token cannot be transferred. There may be an issue with the output token.\",\"The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.\":\"The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.\",\"The price of this pool is outside of your selected range. Your position is not currently earning fees.\":\"The price of this pool is outside of your selected range. Your position is not currently earning fees.\",\"The price of this pool is within your selected range. Your position is currently earning fees.\":\"The price of this pool is within your selected range. Your position is currently earning fees.\",\"The ratio of tokens you add will set the price of this pool.\":\"The ratio of tokens you add will set the price of this pool.\",\"The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.\":\"The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.\",\"There is no liquidity data.\":\"There is no liquidity data.\",\"This app uses the following third-party APIs:\":\"This app uses the following third-party APIs:\",\"This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.\":\"This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.\",\"This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.\":\"This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.\",\"This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.\":\"This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.\",\"This token is not supported in the Uniswap Labs app\":\"This token is not supported in the Uniswap Labs app\",\"This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the\":[\"This tool will safely migrate your \",[\"0\"],\" liquidity to V3. The process is completely trustless thanks to the\"],\"This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.\":\"This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.\",\"This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.\":\"This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.\",\"Tip: Custom tokens are stored locally in your browser\":\"Tip: Custom tokens are stored locally in your browser\",\"To\":\"To\",\"To (at least)\":\"To (at least)\",\"Token not supported\":\"Token not supported\",\"Tokens\":\"Tokens\",\"Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.\":\"Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.\",\"Top pools\":\"Top pools\",\"Total deposited\":\"Total deposited\",\"Total deposits\":\"Total deposits\",\"Trade Route\":\"Trade Route\",\"Trading\":\"Trading\",\"Transaction Settings\":\"Transaction Settings\",\"Transaction Submitted\":\"Transaction Submitted\",\"Transaction completed in\":\"Transaction completed in\",\"Transaction deadline\":\"Transaction deadline\",\"Transaction pending\":\"Transaction pending\",\"Transaction rejected.\":\"Transaction rejected.\",\"Transaction submitted\":\"Transaction submitted\",\"Transfer Token\":\"Transfer Token\",\"Try Again\":\"Try Again\",\"Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.\":\"Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.\",\"Turn On Expert Mode\":\"Turn On Expert Mode\",\"UNI has arrived\":\"UNI has arrived\",\"UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.\":\"UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.\",\"UNI {0}/{1} Burned\":[\"UNI \",[\"0\"],\"/\",[\"1\"],\" Burned\"],\"UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.\":[\"UNI-V2 LP tokens are required. Once you've added liquidity to the \",[\"0\"],\"-\",[\"1\"],\" pool you can stake your liquidity tokens on this page.\"],\"UNI-V2 {0}-{1}\":[\"UNI-V2 \",[\"0\"],\"-\",[\"1\"]],\"Unclaimed UNI\":\"Unclaimed UNI\",\"Unclaimed fees\":\"Unclaimed fees\",\"Undetermined\":\"Undetermined\",\"Unexpected error. Could not estimate gas for the swap.\":\"Unexpected error. Could not estimate gas for the swap.\",\"Unexpected issue with estimating the gas. Please try again.\":\"Unexpected issue with estimating the gas. Please try again.\",\"Uniswap Governance\":\"Uniswap Governance\",\"Uniswap Labs' Terms of Service\":\"Uniswap Labs' Terms of Service\",\"Uniswap available in: <0>{0}\":[\"Uniswap available in: <0>\",[\"0\"],\"\"],\"Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.\":\"Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.\",\"Uniswap liquidity mining\":\"Uniswap liquidity mining\",\"Uniswap migration contract↗\":\"Uniswap migration contract↗\",\"Unknown Source\":\"Unknown Source\",\"Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.\":[\"Unknown error\",[\"0\"],\". Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.\"],\"Unlock Votes\":\"Unlock Votes\",\"Unlock Voting\":\"Unlock Voting\",\"Unlocking Votes\":\"Unlocking Votes\",\"Unsupported Asset\":\"Unsupported Asset\",\"Unsupported Assets\":\"Unsupported Assets\",\"Unsupported network–switch to another to trade.\":\"Unsupported network–switch to another to trade.\",\"Untitled\":\"Untitled\",\"Unwrap\":\"Unwrap\",\"Unwrap <0/> to {0}\":[\"Unwrap <0/> to \",[\"0\"]],\"Update Delegation\":\"Update Delegation\",\"Update list\":\"Update list\",\"Use the Uniswap Labs API to get faster quotes.\":\"Use the Uniswap Labs API to get faster quotes.\",\"User\":\"User\",\"V2 is not available on Layer 2. Switch to Layer 1 Ethereum.\":\"V2 is not available on Layer 2. Switch to Layer 1 Ethereum.\",\"V2 liquidity\":\"V2 liquidity\",\"V3 {0} Price:\":[\"V3 \",[\"0\"],\" Price:\"],\"View accrued fees and analytics<0>↗\":\"View accrued fees and analytics<0>↗\",\"View list\":\"View list\",\"View on Etherscan\":\"View on Etherscan\",\"View on Explorer\":\"View on Explorer\",\"View transaction on Explorer\":\"View transaction on Explorer\",\"Vote\":\"Vote\",\"Vote Against\":\"Vote Against\",\"Vote For\":\"Vote For\",\"Vote against proposal {proposalId}\":[\"Vote against proposal \",[\"proposalId\"]],\"Vote against proposal {proposalKey}\":[\"Vote against proposal \",[\"proposalKey\"]],\"Vote against proposal {proposalKey} with reason \\\"{0}\\\"\":[\"Vote against proposal \",[\"proposalKey\"],\" with reason \\\"\",[\"0\"],\"\\\"\"],\"Vote for proposal {proposalId}\":[\"Vote for proposal \",[\"proposalId\"]],\"Vote for proposal {proposalKey}\":[\"Vote for proposal \",[\"proposalKey\"]],\"Vote for proposal {proposalKey} with reason \\\"{0}\\\"\":[\"Vote for proposal \",[\"proposalKey\"],\" with reason \\\"\",[\"0\"],\"\\\"\"],\"Vote to abstain on proposal {proposalId}\":[\"Vote to abstain on proposal \",[\"proposalId\"]],\"Vote to abstain on proposal {proposalKey}\":[\"Vote to abstain on proposal \",[\"proposalKey\"]],\"Vote to abstain on proposal {proposalKey} with reason \\\"{0}\\\"\":[\"Vote to abstain on proposal \",[\"proposalKey\"],\" with reason \\\"\",[\"0\"],\"\\\"\"],\"Voting ended {0}\":[\"Voting ended \",[\"0\"]],\"Voting ends approximately {0}\":[\"Voting ends approximately \",[\"0\"]],\"Voting starts approximately {0}\":[\"Voting starts approximately \",[\"0\"]],\"Waiting For Confirmation\":\"Waiting For Confirmation\",\"Wallet Address or ENS name\":\"Wallet Address or ENS name\",\"Weekly Rewards\":\"Weekly Rewards\",\"Welcome to team Unicorn :)\":\"Welcome to team Unicorn :)\",\"When you claim without withdrawing your liquidity remains in the mining pool.\":\"When you claim without withdrawing your liquidity remains in the mining pool.\",\"When you withdraw, the contract will automagically claim UNI on your behalf!\":\"When you withdraw, the contract will automagically claim UNI on your behalf!\",\"When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.\":\"When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.\",\"Withdraw\":\"Withdraw\",\"Withdraw & Claim\":\"Withdraw & Claim\",\"Withdraw deposited liquidity\":\"Withdraw deposited liquidity\",\"Withdrawing {0} UNI-V2\":[\"Withdrawing \",[\"0\"],\" UNI-V2\"],\"Withdrew UNI-V2!\":\"Withdrew UNI-V2!\",\"Wrap\":\"Wrap\",\"Wrap <0/> to {0}\":[\"Wrap <0/> to \",[\"0\"]],\"Wrong Network\":\"Wrong Network\",\"You already have an active or pending proposal\":\"You already have an active or pending proposal\",\"You are creating a pool\":\"You are creating a pool\",\"You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.\":[\"You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current \",[\"0\"],\" price.\"],\"You are the first liquidity provider.\":\"You are the first liquidity provider.\",\"You can either vote on each proposal yourself or delegate your votes to a third party.\":\"You can either vote on each proposal yourself or delegate your votes to a third party.\",\"You can now trade {0}\":[\"You can now trade \",[\"0\"]],\"You don't have enough votes to submit a proposal\":\"You don't have enough votes to submit a proposal\",\"You don’t have liquidity in this pool yet.\":\"You don’t have liquidity in this pool yet.\",\"You may have lost your network connection, or {label} might be down right now.\":[\"You may have lost your network connection, or \",[\"label\"],\" might be down right now.\"],\"You may have lost your network connection.\":\"You may have lost your network connection.\",\"You might consider waiting until the network fees go down to complete this transaction.\":\"You might consider waiting until the network fees go down to complete this transaction.\",\"You must connect an account.\":\"You must connect an account.\",\"You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.\":[\"You must give the Uniswap smart contracts permission to use your \",[\"0\"],\". You only have to do this once per token.\"],\"You must have {formattedProposalThreshold} votes to submit a proposal\":[\"You must have \",[\"formattedProposalThreshold\"],\" votes to submit a proposal\"],\"You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.\":\"You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.\",\"You will also collect fees earned from this position.\":\"You will also collect fees earned from this position.\",\"You will receive\":\"You will receive\",\"You will receive at least {0} {1} or the transaction will revert.\":[\"You will receive at least \",[\"0\"],\" \",[\"1\"],\" or the transaction will revert.\"],\"You will send at most {0} {1} or the transaction will revert.\":[\"You will send at most \",[\"0\"],\" \",[\"1\"],\" or the transaction will revert.\"],\"Your V2 liquidity\":\"Your V2 liquidity\",\"Your active V3 liquidity positions will appear here.\":\"Your active V3 liquidity positions will appear here.\",\"Your liquidity deposits\":\"Your liquidity deposits\",\"Your pool share:\":\"Your pool share:\",\"Your position\":\"Your position\",\"Your position has 0 liquidity, and is not earning fees.\":\"Your position has 0 liquidity, and is not earning fees.\",\"Your position will appear here.\":\"Your position will appear here.\",\"Your position will be 100% composed of {0} at this price\":[\"Your position will be 100% composed of \",[\"0\"],\" at this price\"],\"Your position will be 100% {0} at this price.\":[\"Your position will be 100% \",[\"0\"],\" at this price.\"],\"Your position will not earn fees or be used in trades until the market price moves into your range.\":\"Your position will not earn fees or be used in trades until the market price moves into your range.\",\"Your positions\":\"Your positions\",\"Your rate\":\"Your rate\",\"Your total pool tokens:\":\"Your total pool tokens:\",\"Your transaction cost will be much higher as it includes the gas to create the pool.\":\"Your transaction cost will be much higher as it includes the gas to create the pool.\",\"Your transaction may be frontrun\":\"Your transaction may be frontrun\",\"Your transaction may fail\":\"Your transaction may fail\",\"Your transaction will revert if it has been pending for longer than this period of time.\":\"Your transaction will revert if it has been pending for longer than this period of time.\",\"Your transaction will revert if it is pending for more than this period of time.\":\"Your transaction will revert if it is pending for more than this period of time.\",\"Your transaction will revert if the price changes unfavorably by more than this percentage.\":\"Your transaction will revert if the price changes unfavorably by more than this percentage.\",\"Your transactions will appear here...\":\"Your transactions will appear here...\",\"Your unclaimed UNI\":\"Your unclaimed UNI\",\"after slippage\":\"after slippage\",\"confirm\":\"confirm\",\"for {0}\":[\"for \",[\"0\"]],\"gwei\":\"gwei\",\"has socks emoji\":\"has socks emoji\",\"here.\":\"here.\",\"https:// or ipfs:// or ENS name\":\"https:// or ipfs:// or ENS name\",\"minutes\":\"minutes\",\"via {0}\":[\"via \",[\"0\"]],\"via {0} token list\":[\"via \",[\"0\"],\" token list\"],\"{0, plural, one {Import token} other {Import tokens}}\":[[\"0\",\"plural\",{one:\"Import token\",other:\"Import tokens\"}]],\"{0}\":[[\"0\"]],\"{0} %\":[[\"0\"],\" %\"],\"{0} <0/> per <1/>\":[[\"0\"],\" <0/> per <1/>\"],\"{0} Custom Tokens\":[[\"0\"],\" Custom Tokens\"],\"{0} Deposited\":[[\"0\"],\" Deposited\"],\"{0} ETH\":[[\"0\"],\" ETH\"],\"{0} Fees Earned:\":[[\"0\"],\" Fees Earned:\"],\"{0} Pending\":[[\"0\"],\" Pending\"],\"{0} UNI\":[[\"0\"],\" UNI\"],\"{0} UNI / week\":[[\"0\"],\" UNI / week\"],\"{0} UNI-V2\":[[\"0\"],\" UNI-V2\"],\"{0} UNI-V2 LP tokens available\":[[\"0\"],\" UNI-V2 LP tokens available\"],\"{0} Votes\":[[\"0\"],\" Votes\"],\"{0} per {1}\":[[\"0\"],\" per \",[\"1\"]],\"{0} tokens\":[[\"0\"],\" tokens\"],\"{0} {1} Price:\":[[\"0\"],\" \",[\"1\"],\" Price:\"],\"{0} {nativeCurrencySymbol}\":[[\"0\"],\" \",[\"nativeCurrencySymbol\"]],\"{0} • Added by user\":[[\"0\"],\" • Added by user\"],\"{0}%\":[[\"0\"],\"%\"],\"{0}% fee tier\":[[\"0\"],\"% fee tier\"],\"{0}% pool\":[[\"0\"],\"% pool\"],\"{0}% select\":[[\"0\"],\"% select\"],\"{0}-{1} Liquidity Mining\":[[\"0\"],\"-\",[\"1\"],\" Liquidity Mining\"],\"{0}/{1} LP NFT\":[[\"0\"],\"/\",[\"1\"],\" LP NFT\"],\"{0}/{1} LP Tokens\":[[\"0\"],\"/\",[\"1\"],\" LP Tokens\"],\"{SOCKS_AMOUNT} UNI\":[[\"SOCKS_AMOUNT\"],\" UNI\"],\"{USER_AMOUNT} UNI\":[[\"USER_AMOUNT\"],\" UNI\"],\"{activeTokensOnThisChain} tokens\":[[\"activeTokensOnThisChain\"],\" tokens\"],\"{integrator} fee\":[[\"integrator\"],\" fee\"],\"{label} token bridge\":[[\"label\"],\" token bridge\"],\"{min}m {sec}s\":[[\"min\"],\"m \",[\"sec\"],\"s\"],\"{percentForSlider}%\":[[\"percentForSlider\"],\"%\"],\"{sec}s\":[[\"sec\"],\"s\"],\"{tokenB} per {tokenA}\":[[\"tokenB\"],\" per \",[\"tokenA\"]],\"← Back to Pools Overview\":\"← Back to Pools Overview\"}};","module.exports=function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,\"a\",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p=\"\",r(r.s=3)}([function(e,t){e.exports=function(e){return e&&e.__esModule?e:{default:e}}},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}},function(e,t,r){\"use strict\";function n(){return Math.floor(9e4*Math.random())+1e4}Object.defineProperty(t,\"__esModule\",{value:!0}),t.sendAsyncWrapper=function(e,t){var r=this;return new Promise(function(o,a){r.sendAsync({jsonrpc:\"2.0\",id:n(),method:e,params:t||[]},function(e,t){e?a(e):o(t.result)})})},t.sendFortmaticAsyncWrapper=function(e){var t=this;return new Promise(function(r,n){t.getProvider().sendFortmaticAsync(e,function(e,t){e?n(e):r(t?t.result:{})})})},t.randomId=n,t.findExistingResponse=function(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},t=new v(m);return t.params=[e],i.sendFortmaticAsyncWrapper.call(g,t)}};var v=function e(t,r){(0,o.default)(this,e),this.id=(0,i.randomId)(),this.method=t,this.params=r?[r]:[{}]}},function(e,t,r){\"use strict\";var n=r(0);Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var o=n(r(6)),a=n(r(9)),i=n(r(1)),s=n(r(10)),c=r(11),u=n(r(12)),l=r(2),f=function(){function e(t,r){if((0,i.default)(this,e),this.fortmaticClient=t,this.requests={},this.queue=[],this.account=null,this.network=null,this.isFortmatic=!0,this.overlayReady=!1,this.isLoggedIn=!1,this.postMessages={FORTMATIC_HANDLE_BATCH_REQUEST:\"FORTMATIC_HANDLE_BATCH_REQUEST\",FORTMATIC_HANDLE_REQUEST:\"FORTMATIC_HANDLE_REQUEST\",FORTMATIC_HANDLE_FORTMATIC_REQUEST:\"FORTMATIC_HANDLE_FORTMATIC_REQUEST\",FORTMATIC_HANDLE_RESPONSE:\"FORTMATIC_HANDLE_RESPONSE\",FORTMATIC_OVERLAY_READY:\"FORTMATIC_OVERLAY_READY\",FORTMATIC_SHOW_OVERLAY:\"FORTMATIC_SHOW_OVERLAY\",FORTMATIC_HIDE_OVERLAY:\"FORTMATIC_HIDE_OVERLAY\",FORTMATIC_USER_DENIED:\"FORTMATIC_USER_DENIED\",FORTMATIC_USER_LOGOUT:\"FORTMATIC_USER_LOGOUT\",FORTMATIC_UNAUTHORIZED_API_KEY:\"FORTMATIC_UNAUTHORIZED_API_KEY\"},!r.API_KEY)throw new Error(\"Please provide a Fortmatic API key that you acquired from the developer dashboard.\");this.options={API_KEY:r.API_KEY,ETH_NETWORK:r.ETH_NETWORK,DOMAIN_ORIGIN:window.location?window.location.origin:\"\",version:c.version},this.queryParams=btoa(JSON.stringify(this.options)),this.constructPostMessage(),this.overlay=this.createOverlay(),this.listenMessage()}return(0,s.default)(e,[{key:\"constructPostMessage\",value:function(){var e=this;Object.keys(this.postMessages).map(function(t){e.postMessages[t]+=\"-\".concat(e.queryParams)})}},{key:\"createOverlay\",value:function(){var e=this;return new Promise(function(t,r){var n=function(){if(function(){var t=!0,r=!1,n=void 0;try{for(var o,a=document.getElementsByClassName(\"fortmatic-iframe\")[Symbol.iterator]();!(t=(o=a.next()).done);t=!0)if(o.value.src.includes(e.queryParams))return!1}catch(e){r=!0,n=e}finally{try{t||null==a.return||a.return()}finally{if(r)throw n}}return!0}()){var r=document.createElement(\"style\");r.innerHTML=u.default.css,r.type=\"text/css\",document.head.appendChild(r);var n=document.createElement(\"iframe\");n.className=\"fortmatic-iframe\",n.src=\"\".concat(e.fortmaticClient,\"/send?params=\").concat(e.queryParams),document.body.appendChild(n);var o=document.createElement(\"img\");o.src=\"https://static.fortmatic.com/assets/trans.gif\",document.body.appendChild(o),t({iframe:n})}else console.error(\"Fortmatic: Duplicate instances found.\")};[\"loaded\",\"interactive\",\"complete\"].indexOf(document.readyState)>-1?n():window.addEventListener(\"load\",n.bind(e),!1)})}},{key:\"showOverlay\",value:function(){var e=(0,a.default)(o.default.mark(function e(){return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.overlay;case 2:e.sent.iframe.style.display=\"block\";case 4:case\"end\":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:\"hideOverlay\",value:function(){var e=(0,a.default)(o.default.mark(function e(){return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.overlay;case 2:e.sent.iframe.style.display=\"none\";case 4:case\"end\":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:\"sendAsync\",value:function(e,t){e.length>0?this.enqueue({payload:{id:(0,l.randomId)(),batch:e.map(function(e){return e.id=(0,l.randomId)(),e}),method:\"eth_batchRequest\"},cb:t}):this.enqueue({payload:e,cb:t})}},{key:\"sendFortmaticAsync\",value:function(e,t){this.enqueue({payload:e,cb:t,isNative:!0})}},{key:\"send\",value:function(e,t){if(\"string\"==typeof e)return l.sendAsyncWrapper.call(this,e,t);if(!t){console.warn(\"Non-async web3 methods will be deprecated in web3 > 1.0, and are not supported by the Fortmatic provider. An async method to be used instead.\"),this.sendAsync(e,function(){});var r={};switch(e.method){case\"eth_accounts\":r=this.account?[this.account]:[];break;case\"eth_coinbase\":r=this.account;break;case\"net_version\":r=this.network||(this.options.API_KEY.startsWith(\"pk_live\")?1:4);break;case\"eth_uninstallFilter\":r=!0;break;default:r={}}return{id:e.id,jsonrpc:e.jsonrpc,result:r}}this.sendAsync(e,t)}},{key:\"enqueue\",value:function(e){this.queue.push(e),this.overlayReady&&this.dequeue()}},{key:\"dequeue\",value:function(){var e=(0,a.default)(o.default.mark(function e(){var t,r,n,a=this;return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(0!==this.queue.length){e.next=2;break}return e.abrupt(\"return\");case 2:if(!(t=this.queue.shift())){e.next=11;break}return r=t.payload,n=t.cb,r.id=(0,l.randomId)(),e.next=9,this.postMessage(t.isNative?this.postMessages.FORTMATIC_HANDLE_FORTMATIC_REQUEST:this.postMessages.FORTMATIC_HANDLE_REQUEST,t.payload);case 9:r.batch&&r.batch.length>0?(r.batch.forEach(function(e){a.requests[e.id]={parentId:r.id,payload:e,cb:function(e,t){var n=a.requests[r.id].batchResponse;if(e&&e.response&&!(0,l.findExistingResponse)(n,e.response.id))throw n.push({jsonrpc:\"2.0\",id:e.response.id,error:{code:e.response.code,message:e.response.message}}),a.requests[r.id].cb(null,n),e.response;if(t&&t.result&&!(0,l.findExistingResponse)(n,t.id))return n.push(t);throw new Error(\"Fortmatic: unexpected callback behavior\")}}}),this.requests[r.id]={payload:r,cb:n,batchResponse:[]}):this.requests[r.id]={payload:r,cb:n},this.dequeue();case 11:case\"end\":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:\"postMessage\",value:function(){var e=(0,a.default)(o.default.mark(function e(t,r){var n;return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.overlay;case 2:if(!(n=e.sent).iframe.contentWindow){e.next=7;break}n.iframe.contentWindow.postMessage({msgType:t,payload:r},\"*\"),e.next=8;break;case 7:throw new Error(\"Fortmatic: Modal is not ready.\");case 8:case\"end\":return e.stop()}},e,this)}));return function(t,r){return e.apply(this,arguments)}}()},{key:\"enable\",value:function(){return l.sendAsyncWrapper.call(this,\"eth_accounts\")}},{key:\"listenMessage\",value:function(){var e=this;window.addEventListener(\"message\",function(t){if(t.origin===e.fortmaticClient){var r=t.data.response?t.data.response.id:null;switch(t.data.msgType){case e.postMessages.FORTMATIC_OVERLAY_READY:e.overlayReady=!0,e.dequeue();break;case e.postMessages.FORTMATIC_HANDLE_RESPONSE:try{e.requests[r].cb(null,t.data.response);var n=e.requests[r].parentId;n&&e.requests[n].payload.batch.length===e.requests[n].batchResponse.length&&e.requests[n].cb(null,e.requests[n].batchResponse),\"eth_accounts\"===e.requests[r].payload.method?e.account=t.data.response.result[0]:\"eth_coinbase\"===e.requests[r].payload.method?e.account=t.data.response.result:\"net_version\"===e.requests[r].payload.method&&(e.network=t.data.response.result)}catch(e){}e.isLoggedIn=!0,e.dequeue();break;case e.postMessages.FORTMATIC_HIDE_OVERLAY:e.hideOverlay();break;case e.postMessages.FORTMATIC_SHOW_OVERLAY:e.showOverlay();break;case e.postMessages.FORTMATIC_USER_LOGOUT:e.account=null,e.network=null,e.isLoggedIn=!1;break;case e.postMessages.FORTMATIC_UNAUTHORIZED_API_KEY:throw e.overlayReady=!1,new Error(\"Given API key is not authorized to access the resource.\");case e.postMessages.FORTMATIC_USER_DENIED:if(r){var o=t.data.response&&t.data.response.message?t.data.response.message:\"Fortmatic: Modal was closed without executing action!\",a=t.data.response&&t.data.response.code?t.data.response.code:1;e.requests[r].cb({message:o,code:a,response:t.data.response})}else e.queue.forEach(function(e){return e.cb({message:\"Fortmatic: Modal was closed without executing action!\",code:1})});e.dequeue()}}})}}]),e}();t.default=f},function(e,t,r){e.exports=r(7)},function(e,t,r){var n=function(){return this||\"object\"==typeof self&&self}()||Function(\"return this\")(),o=n.regeneratorRuntime&&Object.getOwnPropertyNames(n).indexOf(\"regeneratorRuntime\")>=0,a=o&&n.regeneratorRuntime;if(n.regeneratorRuntime=void 0,e.exports=r(8),o)n.regeneratorRuntime=a;else try{delete n.regeneratorRuntime}catch(e){n.regeneratorRuntime=void 0}},function(e,t){!function(t){\"use strict\";var r,n=Object.prototype,o=n.hasOwnProperty,a=\"function\"==typeof Symbol?Symbol:{},i=a.iterator||\"@@iterator\",s=a.asyncIterator||\"@@asyncIterator\",c=a.toStringTag||\"@@toStringTag\",u=\"object\"==typeof e,l=t.regeneratorRuntime;if(l)u&&(e.exports=l);else{(l=t.regeneratorRuntime=u?e.exports:{}).wrap=_;var f=\"suspendedStart\",d=\"suspendedYield\",h=\"executing\",p=\"completed\",m={},y={};y[i]=function(){return this};var v=Object.getPrototypeOf,g=v&&v(v(L([])));g&&g!==n&&o.call(g,i)&&(y=g);var b=A.prototype=w.prototype=Object.create(y);T.prototype=b.constructor=A,A.constructor=T,A[c]=T.displayName=\"GeneratorFunction\",l.isGeneratorFunction=function(e){var t=\"function\"==typeof e&&e.constructor;return!!t&&(t===T||\"GeneratorFunction\"===(t.displayName||t.name))},l.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,A):(e.__proto__=A,c in e||(e[c]=\"GeneratorFunction\")),e.prototype=Object.create(b),e},l.awrap=function(e){return{__await:e}},O(R.prototype),R.prototype[s]=function(){return this},l.AsyncIterator=R,l.async=function(e,t,r,n){var o=new R(_(e,t,r,n));return l.isGeneratorFunction(t)?o:o.next().then(function(e){return e.done?e.value:o.next()})},O(b),b[c]=\"Generator\",b[i]=function(){return this},b.toString=function(){return\"[object Generator]\"},l.keys=function(e){var t=[];for(var r in e)t.push(r);return t.reverse(),function r(){for(;t.length;){var n=t.pop();if(n in e)return r.value=n,r.done=!1,r}return r.done=!0,r}},l.values=L,F.prototype={constructor:F,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=r,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=r,this.tryEntries.forEach(M),!e)for(var t in this)\"t\"===t.charAt(0)&&o.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=r)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if(\"throw\"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function n(n,o){return s.type=\"throw\",s.arg=e,t.next=n,o&&(t.method=\"next\",t.arg=r),!!o}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],s=i.completion;if(\"root\"===i.tryLoc)return n(\"end\");if(i.tryLoc<=this.prev){var c=o.call(i,\"catchLoc\"),u=o.call(i,\"finallyLoc\");if(c&&u){if(this.prev=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&o.call(n,\"finallyLoc\")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),M(r),m}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if(\"throw\"===n.type){var o=n.arg;M(r)}return o}}throw new Error(\"illegal catch attempt\")},delegateYield:function(e,t,n){return this.delegate={iterator:L(e),resultName:t,nextLoc:n},\"next\"===this.method&&(this.arg=r),m}}}function _(e,t,r,n){var o=t&&t.prototype instanceof w?t:w,a=Object.create(o.prototype),i=new F(n||[]);return a._invoke=function(e,t,r){var n=f;return function(o,a){if(n===h)throw new Error(\"Generator is already running\");if(n===p){if(\"throw\"===o)throw a;return k()}for(r.method=o,r.arg=a;;){var i=r.delegate;if(i){var s=I(i,r);if(s){if(s===m)continue;return s}}if(\"next\"===r.method)r.sent=r._sent=r.arg;else if(\"throw\"===r.method){if(n===f)throw n=p,r.arg;r.dispatchException(r.arg)}else\"return\"===r.method&&r.abrupt(\"return\",r.arg);n=h;var c=E(e,t,r);if(\"normal\"===c.type){if(n=r.done?p:d,c.arg===m)continue;return{value:c.arg,done:r.done}}\"throw\"===c.type&&(n=p,r.method=\"throw\",r.arg=c.arg)}}}(e,r,i),a}function E(e,t,r){try{return{type:\"normal\",arg:e.call(t,r)}}catch(e){return{type:\"throw\",arg:e}}}function w(){}function T(){}function A(){}function O(e){[\"next\",\"throw\",\"return\"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function R(e){var t;this._invoke=function(r,n){function a(){return new Promise(function(t,a){!function t(r,n,a,i){var s=E(e[r],e,n);if(\"throw\"!==s.type){var c=s.arg,u=c.value;return u&&\"object\"==typeof u&&o.call(u,\"__await\")?Promise.resolve(u.__await).then(function(e){t(\"next\",e,a,i)},function(e){t(\"throw\",e,a,i)}):Promise.resolve(u).then(function(e){c.value=e,a(c)},function(e){return t(\"throw\",e,a,i)})}i(s.arg)}(r,n,t,a)})}return t=t?t.then(a,a):a()}}function I(e,t){var n=e.iterator[t.method];if(n===r){if(t.delegate=null,\"throw\"===t.method){if(e.iterator.return&&(t.method=\"return\",t.arg=r,I(e,t),\"throw\"===t.method))return m;t.method=\"throw\",t.arg=new TypeError(\"The iterator does not provide a 'throw' method\")}return m}var o=E(n,e.iterator,t.arg);if(\"throw\"===o.type)return t.method=\"throw\",t.arg=o.arg,t.delegate=null,m;var a=o.arg;return a?a.done?(t[e.resultName]=a.value,t.next=e.nextLoc,\"return\"!==t.method&&(t.method=\"next\",t.arg=r),t.delegate=null,m):a:(t.method=\"throw\",t.arg=new TypeError(\"iterator result is not an object\"),t.delegate=null,m)}function x(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function M(e){var t=e.completion||{};t.type=\"normal\",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:\"root\"}],e.forEach(x,this),this.reset(!0)}function L(e){if(e){var t=e[i];if(t)return t.call(e);if(\"function\"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n (https://fortmatic.com/)\",license:\"MIT\",repository:{type:\"git\",url:\"https://github.com/fortmatic/fortmatic-js\"},keywords:[\"Auth\",\"Login\",\"Web3\",\"Crypto\",\"Ethereum\",\"MetaMask\",\"Wallet\",\"Blockchain\",\"Dapp\"],homepage:\"https://www.fortmatic.com\",ava:{require:[\"@babel/register\"],files:[\"test/**/*.spec.js\"],babel:{testOptions:{presets:[\"@babel/env\"],plugins:[\"@babel/plugin-proposal-function-bind\",\"@babel/plugin-transform-runtime\"]}},verbose:!0},nyc:{all:!1,\"check-coverage\":!0,\"per-file\":!0,lines:80,statements:80,functions:80,branches:80,include:[\"src/**/*.js\"],exclude:[\"*/style.js\"],require:[],reporter:[\"html\",\"lcov\"]},dependencies:{\"@babel/runtime\":\"7.3.4\"},devDependencies:{\"@babel/core\":\"7.3.4\",\"@babel/plugin-proposal-function-bind\":\"7.2.0\",\"@babel/plugin-transform-modules-commonjs\":\"7.2.0\",\"@babel/plugin-transform-runtime\":\"7.3.4\",\"@babel/preset-env\":\"7.3.4\",\"@babel/register\":\"7.0.0\",ava:\"2.2.0\",\"babel-eslint\":\"10.0.1\",\"babel-loader\":\"8.0.5\",eslint:\"5.9.0\",lodash:\"4.17.11\",nyc:\"13.1.0\",sinon:\"7.1.1\",webpack:\"4.26.1\",\"webpack-cli\":\"3.1.2\"}}},function(e,t,r){\"use strict\";t.css=\"\\n .fortmatic-iframe {\\n display: none;\\n position: fixed;\\n top: 0;\\n right: 0;\\n width: 100%;\\n height: 100%;\\n border: none;\\n border-radius: 0;\\n z-index: 2147483647;\\n }\\n\"}]);"],"names":["_path","_line","_extends","React"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mBAAe;;AC+Lf,sBAAe,0kPAA0kP;;ACvIzlP,sBAAe,0sDAA0sD;;AC7BztD,uBAAe,k3CAAk3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpBpnT,eAAe,mcAAmc;;ACvBld,mBAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICAG,IAAc,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,aAAa,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,cAAc,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,YAAY,CAAC,YAAY,CAAC,qDAAqD,CAAC,qDAAqD,CAAC,oDAAoD,CAAC,CAAC,qCAAqC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,wMAAwM,CAAC,wMAAwM,CAAC,kSAAkS,CAAC,kSAAkS,CAAC,8FAA8F,CAAC,8FAA8F,CAAC,4MAA4M,CAAC,4MAA4M,CAAC,wDAAwD,CAAC,wDAAwD,CAAC,gDAAgD,CAAC,gDAAgD,CAAC,sFAAsF,CAAC,sFAAsF,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,iCAAiC,CAAC,iCAAiC,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,eAAe,CAAC,eAAe,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,0BAA0B,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,mBAAmB,CAAC,CAAC,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,0BAA0B,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,gCAAgC,CAAC,gCAAgC,CAAC,SAAS,CAAC,SAAS,CAAC,0BAA0B,CAAC,0BAA0B,CAAC,mFAAmF,CAAC,mFAAmF,CAAC,4CAA4C,CAAC,CAAC,yCAAyC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,wQAAwQ,CAAC,wQAAwQ,CAAC,uBAAuB,CAAC,uBAAuB,CAAC,SAAS,CAAC,SAAS,CAAC,eAAe,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,kKAAkK,CAAC,kKAAkK,CAAC,eAAe,CAAC,eAAe,CAAC,gIAAgI,CAAC,gIAAgI,CAAC,2FAA2F,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,+DAA+D,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,2BAA2B,CAAC,CAAC,wBAAwB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,wBAAwB,CAAC,wBAAwB,CAAC,sBAAsB,CAAC,sBAAsB,CAAC,wBAAwB,CAAC,wBAAwB,CAAC,6BAA6B,CAAC,6BAA6B,CAAC,2DAA2D,CAAC,CAAC,0BAA0B,CAAC,CAAC,yBAAyB,CAAC,CAAC,UAAU,CAAC,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC,2MAA2M,CAAC,2MAA2M,CAAC,yNAAyN,CAAC,yNAAyN,CAAC,sKAAsK,CAAC,sKAAsK,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,sBAAsB,CAAC,sBAAsB,CAAC,uDAAuD,CAAC,uDAAuD,CAAC,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,0BAA0B,CAAC,CAAC,uBAAuB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,uBAAuB,CAAC,uBAAuB,CAAC,SAAS,CAAC,SAAS,CAAC,cAAc,CAAC,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,cAAc,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,cAAc,CAAC,cAAc,CAAC,sBAAsB,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,YAAY,CAAC,YAAY,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,iEAAiE,CAAC,iEAAiE,CAAC,SAAS,CAAC,SAAS,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,cAAc,CAAC,cAAc,CAAC,cAAc,CAAC,cAAc,CAAC,yCAAyC,CAAC,yCAAyC,CAAC,+BAA+B,CAAC,+BAA+B,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,gDAAgD,CAAC,gDAAgD,CAAC,6CAA6C,CAAC,6CAA6C,CAAC,wBAAwB,CAAC,wBAAwB,CAAC,uBAAuB,CAAC,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,sBAAsB,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,eAAe,CAAC,eAAe,CAAC,eAAe,CAAC,eAAe,CAAC,2BAA2B,CAAC,2BAA2B,CAAC,0CAA0C,CAAC,CAAC,sBAAsB,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,cAAc,CAAC,cAAc,CAAC,wBAAwB,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,8BAA8B,CAAC,CAAC,2BAA2B,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,eAAe,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,SAAS,CAAC,SAAS,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,0BAA0B,CAAC,0BAA0B,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,wCAAwC,CAAC,CAAC,wBAAwB,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC,+FAA+F,CAAC,+FAA+F,CAAC,sBAAsB,CAAC,sBAAsB,CAAC,sBAAsB,CAAC,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,sBAAsB,CAAC,sBAAsB,CAAC,aAAa,CAAC,aAAa,CAAC,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,uDAAuD,CAAC,uDAAuD,CAAC,kEAAkE,CAAC,kEAAkE,CAAC,MAAM,CAAC,MAAM,CAAC,uBAAuB,CAAC,uBAAuB,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,sHAAsH,CAAC,sHAAsH,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,2BAA2B,CAAC,2BAA2B,CAAC,2BAA2B,CAAC,2BAA2B,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,4CAA4C,CAAC,4CAA4C,CAAC,eAAe,CAAC,eAAe,CAAC,sBAAsB,CAAC,sBAAsB,CAAC,qDAAqD,CAAC,qDAAqD,CAAC,uBAAuB,CAAC,uBAAuB,CAAC,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC,4CAA4C,CAAC,4CAA4C,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,aAAa,CAAC,aAAa,CAAC,qIAAqI,CAAC,qIAAqI,CAAC,SAAS,CAAC,SAAS,CAAC,4BAA4B,CAAC,4BAA4B,CAAC,mIAAmI,CAAC,CAAC,mFAAmF,CAAC,CAAC,GAAG,CAAC,CAAC,+CAA+C,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,wBAAwB,CAAC,wBAAwB,CAAC,sBAAsB,CAAC,sBAAsB,CAAC,KAAK,CAAC,KAAK,CAAC,mHAAmH,CAAC,mHAAmH,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,YAAY,CAAC,YAAY,CAAC,8FAA8F,CAAC,8FAA8F,CAAC,wBAAwB,CAAC,wBAAwB,CAAC,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,uBAAuB,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,wBAAwB,CAAC,wBAAwB,CAAC,cAAc,CAAC,cAAc,CAAC,8EAA8E,CAAC,8EAA8E,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,aAAa,CAAC,aAAa,CAAC,aAAa,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,yBAAyB,CAAC,UAAU,CAAC,UAAU,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,+BAA+B,CAAC,+BAA+B,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,0FAA0F,CAAC,CAAC,+CAA+C,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,sCAAsC,CAAC,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,wCAAwC,CAAC,wCAAwC,CAAC,kBAAkB,CAAC,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,cAAc,CAAC,cAAc,CAAC,eAAe,CAAC,eAAe,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,yEAAyE,CAAC,yEAAyE,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,iCAAiC,CAAC,iCAAiC,CAAC,YAAY,CAAC,YAAY,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,aAAa,CAAC,aAAa,CAAC,WAAW,CAAC,WAAW,CAAC,+BAA+B,CAAC,+BAA+B,CAAC,4BAA4B,CAAC,4BAA4B,CAAC,8LAA8L,CAAC,8LAA8L,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,kCAAkC,CAAC,kCAAkC,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,yBAAyB,CAAC,yBAAyB,CAAC,sBAAsB,CAAC,sBAAsB,CAAC,8DAA8D,CAAC,8DAA8D,CAAC,iCAAiC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,kBAAkB,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,sBAAsB,CAAC,sBAAsB,CAAC,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,6CAA6C,CAAC,6CAA6C,CAAC,cAAc,CAAC,cAAc,CAAC,wBAAwB,CAAC,wBAAwB,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,SAAS,CAAC,SAAS,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,oDAAoD,CAAC,oDAAoD,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,0DAA0D,CAAC,0DAA0D,CAAC,mHAAmH,CAAC,CAAC,uFAAuF,CAAC,CAAC,GAAG,CAAC,CAAC,2BAA2B,CAAC,CAAC,oGAAoG,CAAC,oGAAoG,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,+OAA+O,CAAC,+OAA+O,CAAC,sBAAsB,CAAC,sBAAsB,CAAC,cAAc,CAAC,cAAc,CAAC,sBAAsB,CAAC,sBAAsB,CAAC,2FAA2F,CAAC,CAAC,yDAAyD,CAAC,CAAC,GAAG,CAAC,CAAC,iCAAiC,CAAC,CAAC,+FAA+F,CAAC,CAAC,oDAAoD,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,sCAAsC,CAAC,CAAC,mCAAmC,CAAC,CAAC,4BAA4B,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,SAAS,CAAC,SAAS,CAAC,oEAAoE,CAAC,oEAAoE,CAAC,oCAAoC,CAAC,oCAAoC,CAAC,+EAA+E,CAAC,+EAA+E,CAAC,+DAA+D,CAAC,CAAC,yBAAyB,CAAC,CAAC,aAAa,CAAC,CAAC,2BAA2B,CAAC,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,8BAA8B,CAAC,8BAA8B,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,cAAc,CAAC,cAAc,CAAC,uBAAuB,CAAC,uBAAuB,CAAC,eAAe,CAAC,eAAe,CAAC,cAAc,CAAC,cAAc,CAAC,aAAa,CAAC,aAAa,CAAC,eAAe,CAAC,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,uBAAuB,CAAC,uBAAuB,CAAC,UAAU,CAAC,UAAU,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,WAAW,CAAC,WAAW,CAAC,4DAA4D,CAAC,4DAA4D,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,UAAU,CAAC,UAAU,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,oCAAoC,CAAC,oCAAoC,CAAC,qCAAqC,CAAC,qCAAqC,CAAC,oCAAoC,CAAC,oCAAoC,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,WAAW,CAAC,WAAW,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC,sBAAsB,CAAC,sBAAsB,CAAC,eAAe,CAAC,eAAe,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,aAAa,CAAC,aAAa,CAAC,8BAA8B,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,aAAa,CAAC,iCAAiC,CAAC,iCAAiC,CAAC,8BAA8B,CAAC,8BAA8B,CAAC,aAAa,CAAC,aAAa,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,2CAA2C,CAAC,2CAA2C,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,eAAe,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,UAAU,CAAC,UAAU,CAAC,eAAe,CAAC,eAAe,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,aAAa,CAAC,aAAa,CAAC,uBAAuB,CAAC,uBAAuB,CAAC,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,mKAAmK,CAAC,mKAAmK,CAAC,sBAAsB,CAAC,sBAAsB,CAAC,uBAAuB,CAAC,uBAAuB,CAAC,qCAAqC,CAAC,qCAAqC,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,WAAW,CAAC,WAAW,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,+BAA+B,CAAC,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,4BAA4B,CAAC,4BAA4B,CAAC,aAAa,CAAC,aAAa,CAAC,cAAc,CAAC,cAAc,CAAC,4BAA4B,CAAC,4BAA4B,CAAC,kBAAkB,CAAC,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,cAAc,CAAC,8BAA8B,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,gFAAgF,CAAC,gFAAgF,CAAC,0BAA0B,CAAC,0BAA0B,CAAC,qDAAqD,CAAC,qDAAqD,CAAC,8BAA8B,CAAC,8BAA8B,CAAC,4JAA4J,CAAC,4JAA4J,CAAC,kEAAkE,CAAC,kEAAkE,CAAC,iFAAiF,CAAC,iFAAiF,CAAC,qEAAqE,CAAC,qEAAqE,CAAC,yEAAyE,CAAC,yEAAyE,CAAC,iHAAiH,CAAC,iHAAiH,CAAC,0FAA0F,CAAC,0FAA0F,CAAC,mJAAmJ,CAAC,mJAAmJ,CAAC,8EAA8E,CAAC,8EAA8E,CAAC,oFAAoF,CAAC,oFAAoF,CAAC,oFAAoF,CAAC,oFAAoF,CAAC,6EAA6E,CAAC,6EAA6E,CAAC,sFAAsF,CAAC,sFAAsF,CAAC,gKAAgK,CAAC,gKAAgK,CAAC,wGAAwG,CAAC,wGAAwG,CAAC,gGAAgG,CAAC,gGAAgG,CAAC,8DAA8D,CAAC,8DAA8D,CAAC,gIAAgI,CAAC,gIAAgI,CAAC,6BAA6B,CAAC,6BAA6B,CAAC,+CAA+C,CAAC,+CAA+C,CAAC,uPAAuP,CAAC,uPAAuP,CAAC,mHAAmH,CAAC,mHAAmH,CAAC,4GAA4G,CAAC,4GAA4G,CAAC,qDAAqD,CAAC,qDAAqD,CAAC,2GAA2G,CAAC,CAAC,qCAAqC,CAAC,CAAC,GAAG,CAAC,CAAC,qEAAqE,CAAC,CAAC,4KAA4K,CAAC,4KAA4K,CAAC,4HAA4H,CAAC,4HAA4H,CAAC,uDAAuD,CAAC,uDAAuD,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,QAAQ,CAAC,QAAQ,CAAC,kGAAkG,CAAC,kGAAkG,CAAC,WAAW,CAAC,WAAW,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,aAAa,CAAC,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC,sBAAsB,CAAC,sBAAsB,CAAC,uBAAuB,CAAC,uBAAuB,CAAC,0BAA0B,CAAC,0BAA0B,CAAC,sBAAsB,CAAC,sBAAsB,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,uBAAuB,CAAC,uBAAuB,CAAC,uBAAuB,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,WAAW,CAAC,WAAW,CAAC,sHAAsH,CAAC,sHAAsH,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,2IAA2I,CAAC,2IAA2I,CAAC,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,kIAAkI,CAAC,CAAC,oEAAoE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,yDAAyD,CAAC,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,eAAe,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,cAAc,CAAC,cAAc,CAAC,wDAAwD,CAAC,wDAAwD,CAAC,6DAA6D,CAAC,6DAA6D,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,gCAAgC,CAAC,gCAAgC,CAAC,kCAAkC,CAAC,CAAC,2BAA2B,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,sHAAsH,CAAC,sHAAsH,CAAC,0BAA0B,CAAC,0BAA0B,CAAC,6BAA6B,CAAC,6BAA6B,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,qIAAqI,CAAC,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,qHAAqH,CAAC,CAAC,cAAc,CAAC,cAAc,CAAC,eAAe,CAAC,eAAe,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,iDAAiD,CAAC,iDAAiD,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,aAAa,CAAC,aAAa,CAAC,gDAAgD,CAAC,gDAAgD,CAAC,MAAM,CAAC,MAAM,CAAC,6DAA6D,CAAC,6DAA6D,CAAC,cAAc,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,yCAAyC,CAAC,yCAAyC,CAAC,WAAW,CAAC,WAAW,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,8BAA8B,CAAC,8BAA8B,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC,oCAAoC,CAAC,CAAC,wBAAwB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,qCAAqC,CAAC,CAAC,wBAAwB,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,yDAAyD,CAAC,CAAC,wBAAwB,CAAC,CAAC,aAAa,CAAC,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,gCAAgC,CAAC,CAAC,oBAAoB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,oBAAoB,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,qDAAqD,CAAC,CAAC,oBAAoB,CAAC,CAAC,aAAa,CAAC,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,0CAA0C,CAAC,CAAC,8BAA8B,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,2CAA2C,CAAC,CAAC,8BAA8B,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,+DAA+D,CAAC,CAAC,8BAA8B,CAAC,CAAC,aAAa,CAAC,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,kBAAkB,CAAC,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,4BAA4B,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,8BAA8B,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,0BAA0B,CAAC,0BAA0B,CAAC,4BAA4B,CAAC,4BAA4B,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,4BAA4B,CAAC,4BAA4B,CAAC,+EAA+E,CAAC,+EAA+E,CAAC,8EAA8E,CAAC,8EAA8E,CAAC,4FAA4F,CAAC,4FAA4F,CAAC,UAAU,CAAC,UAAU,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,8BAA8B,CAAC,8BAA8B,CAAC,wBAAwB,CAAC,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,eAAe,CAAC,gDAAgD,CAAC,gDAAgD,CAAC,yBAAyB,CAAC,yBAAyB,CAAC,sHAAsH,CAAC,CAAC,4GAA4G,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,uCAAuC,CAAC,uCAAuC,CAAC,wFAAwF,CAAC,wFAAwF,CAAC,uBAAuB,CAAC,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,kDAAkD,CAAC,kDAAkD,CAAC,4CAA4C,CAAC,4CAA4C,CAAC,gFAAgF,CAAC,CAAC,gDAAgD,CAAC,CAAC,OAAO,CAAC,CAAC,2BAA2B,CAAC,CAAC,4CAA4C,CAAC,4CAA4C,CAAC,yFAAyF,CAAC,yFAAyF,CAAC,8BAA8B,CAAC,8BAA8B,CAAC,gHAAgH,CAAC,CAAC,mEAAmE,CAAC,CAAC,GAAG,CAAC,CAAC,4CAA4C,CAAC,CAAC,uEAAuE,CAAC,CAAC,gBAAgB,CAAC,CAAC,4BAA4B,CAAC,CAAC,6BAA6B,CAAC,CAAC,wMAAwM,CAAC,wMAAwM,CAAC,uDAAuD,CAAC,uDAAuD,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,mEAAmE,CAAC,CAAC,4BAA4B,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,kCAAkC,CAAC,CAAC,+DAA+D,CAAC,CAAC,wBAAwB,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,kCAAkC,CAAC,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,sDAAsD,CAAC,sDAAsD,CAAC,yBAAyB,CAAC,yBAAyB,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,eAAe,CAAC,eAAe,CAAC,yDAAyD,CAAC,yDAAyD,CAAC,iCAAiC,CAAC,iCAAiC,CAAC,0DAA0D,CAAC,CAAC,yCAAyC,CAAC,CAAC,GAAG,CAAC,CAAC,gBAAgB,CAAC,CAAC,+CAA+C,CAAC,CAAC,6BAA6B,CAAC,CAAC,GAAG,CAAC,CAAC,iBAAiB,CAAC,CAAC,qGAAqG,CAAC,qGAAqG,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,WAAW,CAAC,WAAW,CAAC,yBAAyB,CAAC,yBAAyB,CAAC,sFAAsF,CAAC,sFAAsF,CAAC,kCAAkC,CAAC,kCAAkC,CAAC,2BAA2B,CAAC,2BAA2B,CAAC,0FAA0F,CAAC,0FAA0F,CAAC,kFAAkF,CAAC,kFAAkF,CAAC,6FAA6F,CAAC,6FAA6F,CAAC,uCAAuC,CAAC,uCAAuC,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,iCAAiC,CAAC,iCAAiC,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,uDAAuD,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,gBAAgB,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,gBAAgB,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,6BAA6B,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,mBAAmB,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,eAAe,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,0BAA0B,CAAC,0BAA0B,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICAn/wC,SAAc,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAA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"} \ No newline at end of file +{"version":3,"file":"snowflake.js","sources":["../src/assets/images/blue-loader.svg","../src/assets/images/token-logo.png","../src/assets/images/ethereum-logo.png","../src/assets/svg/arbitrum_logo.svg","../src/assets/svg/optimistic_ethereum.svg","../src/assets/svg/polygon-matic-logo.svg","../src/assets/images/big_unicorn.png","../src/assets/images/noise.png","../src/assets/images/xl_uni.png","../src/assets/svg/logo.svg","../src/locales/en-US.js","../src/assets/images/menu.svg","../src/assets/images/coinbaseWalletIcon.svg","../src/assets/images/fortmaticIcon.png","../src/assets/images/portisIcon.png","../src/assets/images/walletConnectIcon.svg","../node_modules/mersenne-twister/src/mersenne-twister.js","../node_modules/@metamask/jazzicon/paper.js","../node_modules/color/index.js","../node_modules/@metamask/jazzicon/colors.js","../node_modules/@metamask/jazzicon/index.js","../src/assets/images/metamask.png","../src/assets/images/x.svg","../src/assets/images/arrow-right.svg","../src/assets/images/santa-hat.png","../src/assets/images/survey-orb.svg","../src/assets/images/gas-icon.svg","../src/assets/svg/matic-token-icon.svg","../src/assets/svg/dot_line.svg","../src/assets/svg/auto_router.svg","../src/assets/svg/static_route.svg","../src/assets/images/dropdown.svg","../src/assets/svg/tokenlist.svg","../node_modules/fortmatic/lib/fortmatic.js"],"sourcesContent":["export default \"data:image/svg+xml,%3Csvg%20width%3D%2294%22%20height%3D%2294%22%20viewBox%3D%220%200%2094%2094%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%20%20%3Cpath%20d%3D%22M92%2047C92%2022.1472%2071.8528%202%2047%202C22.1472%202%202%2022.1472%202%2047C2%2071.8528%2022.1472%2092%2047%2092%22%20stroke%3D%22%232172E5%22%20stroke-width%3D%223%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20viewBox%3D%220%200%20470.287%20514.251%22%20enable-background%3D%22new%200%200%20470.287%20514.251%22%20xml%3Aspace%3D%22preserve%22%3E%3Cg%20id%3D%22Background%22%3E%3C%2Fg%3E%3Cg%20id%3D%22Logos_and_symbols%22%3E%20%3Cg%20id%3D%22SYMBOL_VER_3%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_4_3_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_1_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_1_%22%3E%20%20%3Cg%20id%3D%22_x31_-3%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_14_%22%3E%20%20%20%3Cpath%20fill%3D%22%232D374B%22%20d%3D%22M291.134%2C237.469l35.654-60.5l96.103%2C149.684l0.046%2C28.727l-0.313-197.672%20%20%20%20c-0.228-4.832-2.794-9.252-6.887-11.859L242.715%2C46.324c-4.045-1.99-9.18-1.967-13.22%2C0.063c-0.546%2C0.272-1.06%2C0.57-1.548%2C0.895%20%20%20%20l-0.604%2C0.379L59.399%2C144.983l-0.651%2C0.296c-0.838%2C0.385-1.686%2C0.875-2.48%2C1.444c-3.185%2C2.283-5.299%2C5.66-5.983%2C9.448%20%20%20%20c-0.103%2C0.574-0.179%2C1.158-0.214%2C1.749l0.264%2C161.083l89.515-138.745c11.271-18.397%2C35.825-24.323%2C58.62-24.001l26.753%2C0.706%20%20%20%20L67.588%2C409.765l18.582%2C10.697L245.692%2C157.22l70.51-0.256L157.091%2C426.849l66.306%2C38.138l7.922%2C4.556%20%20%20%20c3.351%2C1.362%2C7.302%2C1.431%2C10.681%2C0.21l175.453-101.678l-33.544%2C19.438L291.134%2C237.469z%20M304.736%2C433.395l-66.969-105.108%20%20%20%20l40.881-69.371l87.952%2C138.628L304.736%2C433.395z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%2328A0F0%22%20points%3D%22237.768%2C328.286%20304.736%2C433.395%20366.601%2C397.543%20278.648%2C258.915%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2328A0F0%22%20d%3D%22M422.937%2C355.379l-0.046-28.727l-96.103-149.684l-35.654%2C60.5l92.774%2C150.043l33.544-19.438%20%20%20%20c3.29-2.673%2C5.281-6.594%2C5.49-10.825L422.937%2C355.379z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23FFFFFF%22%20d%3D%22M20.219%2C382.469l47.369%2C27.296l157.634-252.801l-26.753-0.706c-22.795-0.322-47.35%2C5.604-58.62%2C24.001%20%20%20%20L50.334%2C319.004l-30.115%2C46.271V382.469z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%23FFFFFF%22%20points%3D%22316.202%2C156.964%20245.692%2C157.22%2086.17%2C420.462%20141.928%2C452.565%20157.091%2C426.849%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2396BEDC%22%20d%3D%22M452.65%2C156.601c-0.59-14.746-8.574-28.245-21.08-36.104L256.28%2C19.692%20%20%20%20c-12.371-6.229-27.825-6.237-40.218-0.004c-1.465%2C0.739-170.465%2C98.752-170.465%2C98.752c-2.339%2C1.122-4.592%2C2.458-6.711%2C3.975%20%20%20%20c-11.164%2C8.001-17.969%2C20.435-18.668%2C34.095v208.765l30.115-46.271L50.07%2C157.921c0.035-0.589%2C0.109-1.169%2C0.214-1.741%20%20%20%20c0.681-3.79%2C2.797-7.171%2C5.983-9.456c0.795-0.569%2C172.682-100.064%2C173.228-100.337c4.04-2.029%2C9.175-2.053%2C13.22-0.063%20%20%20%20l173.022%2C99.523c4.093%2C2.607%2C6.659%2C7.027%2C6.887%2C11.859v199.542c-0.209%2C4.231-1.882%2C8.152-5.172%2C10.825l-33.544%2C19.438%20%20%20%20l-17.308%2C10.031l-61.864%2C35.852l-62.737%2C36.357c-3.379%2C1.221-7.33%2C1.152-10.681-0.21l-74.228-42.693l-15.163%2C25.717%20%20%20%20l66.706%2C38.406c2.206%2C1.255%2C4.171%2C2.367%2C5.784%2C3.272c2.497%2C1.4%2C4.199%2C2.337%2C4.8%2C2.629c4.741%2C2.303%2C11.563%2C3.643%2C17.71%2C3.643%20%20%20%20c5.636%2C0%2C11.132-1.035%2C16.332-3.072l182.225-105.531c10.459-8.104%2C16.612-20.325%2C17.166-33.564V156.601z%22%2F%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_13_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_6_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_3_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_15_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_3_%22%3E%20%20%20%3Cg%20id%3D%22_x33__7_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic%22%3E%20%20%20%3Cg%20id%3D%22_x33__3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_10_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x34__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_2_%22%3E%20%20%20%3Cg%20id%3D%22_x33__6_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_2_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_11_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_5_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_12_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_1_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_9_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_2_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol_1_%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_1_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_7_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_8_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Monochromatic_1_%22%3E%20%20%3Cg%20id%3D%22_x33__4_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%22170%22%20height%3D%22168%22%20viewBox%3D%220%200%20170%20168%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20clip-path%3D%22url%28%23clip0%29%22%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF505F%22%2F%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF0320%22%2F%3E%3Cpath%20d%3D%22M85.05%200C132.022%200%20170.1%2037.8949%20170.1%2084.6407C170.1%20131.386%200%20131.386%200%2084.6407C0%2037.8949%2038.0782%200%2085.05%200Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.665%2064.0394L112.444%2012.3742L89.0263%2078.9477L144.665%2064.0394Z%22%20fill%3D%22%23FF4E65%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.777%2064.215L112.444%2012.3742L165.349%2058.4347L143.777%2064.215Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.551%2063.613L142.479%20124.467L88.912%2078.5213L144.551%2063.613Z%22%20fill%3D%22%23D0001A%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.663%2063.7886L142.479%20124.467L165.235%2058.0083L143.663%2063.7886Z%22%20fill%3D%22%23FF697B%22%2F%3E%3C%2Fg%3E%3Cdefs%3E%3CclipPath%20id%3D%22clip0%22%3E%3Crect%20width%3D%22170%22%20height%3D%22168%22%20fill%3D%22white%22%2F%3E%3C%2FclipPath%3E%3C%2Fdefs%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20viewBox%3D%220%200%2038.4%2033.5%22%20style%3D%22enable-background%3Anew%200%200%2038.4%2033.5%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cstyle%20type%3D%22text%2Fcss%22%3E%20.st0%7Bfill%3A%238247E5%3B%7D%3C%2Fstyle%3E%3Cg%3E%20%3Cpath%20class%3D%22st0%22%20d%3D%22M29%2C10.2c-0.7-0.4-1.6-0.4-2.4%2C0L21%2C13.5l-3.8%2C2.1l-5.5%2C3.3c-0.7%2C0.4-1.6%2C0.4-2.4%2C0L5%2C16.3%20%20c-0.7-0.4-1.2-1.2-1.2-2.1v-5c0-0.8%2C0.4-1.6%2C1.2-2.1l4.3-2.5c0.7-0.4%2C1.6-0.4%2C2.4%2C0L16%2C7.2c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v3.3l3.8-2.2V7%20%20c0-0.8-0.4-1.6-1.2-2.1l-8-4.7c-0.7-0.4-1.6-0.4-2.4%2C0L1.2%2C5C0.4%2C5.4%2C0%2C6.2%2C0%2C7v9.4c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l5.5-3.2l3.8-2.2l5.5-3.2c0.7-0.4%2C1.6-0.4%2C2.4%2C0l4.3%2C2.5c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v5c0%2C0.8-0.4%2C1.6-1.2%2C2.1%20%20L29%2C28.8c-0.7%2C0.4-1.6%2C0.4-2.4%2C0l-4.3-2.5c-0.7-0.4-1.2-1.2-1.2-2.1V21l-3.8%2C2.2v3.3c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l8.1-4.7c0.7-0.4%2C1.2-1.2%2C1.2-2.1V17c0-0.8-0.4-1.6-1.2-2.1L29%2C10.2z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\"","export default \"10f062d02df4af77.png\"","export default \"f158a440053a5ad2.png\"","export default \"c2cd04251aa24c34.png\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2214%22%20height%3D%2215%22%20viewBox%3D%220%200%2014%2015%22%20fill%3D%22black%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20style%3D%22mix-blend-mode%3Adarken%22%3E%3Cpath%20d%3D%22M4.15217%201.55141C3.96412%201.52242%203.95619%201.51902%204.04468%201.5055C4.21427%201.47958%204.61472%201.51491%204.89067%201.58012C5.53489%201.73232%206.12109%202.12221%206.74683%202.81466L6.91307%202.99862L7.15088%202.96062C8.15274%202.8006%209.17194%202.92778%2010.0244%203.31918C10.2589%203.42686%2010.6287%203.64121%2010.6749%203.69629C10.6896%203.71384%2010.7166%203.82684%2010.7349%203.94742C10.7982%204.36458%2010.7665%204.68434%2010.6382%204.92317C10.5683%205.05313%2010.5644%205.09432%2010.6114%205.20554C10.6489%205.2943%2010.7534%205.35999%2010.8569%205.35985C11.0687%205.35956%2011.2968%205.0192%2011.4024%204.54561L11.4444%204.3575L11.5275%204.45109C11.9835%204.96459%2012.3417%205.66488%2012.4032%206.16335L12.4192%206.29332L12.3426%206.17517C12.2107%205.97186%2012.0781%205.83346%2011.9084%205.72183C11.6024%205.52062%2011.2789%205.45215%2010.4222%205.40727C9.64839%205.36675%209.21045%205.30106%208.77621%205.16032C8.03738%204.9209%207.66493%204.60204%206.78729%203.4576C6.39748%202.94928%206.15654%202.66804%205.91687%202.44155C5.37228%201.92691%204.83716%201.65701%204.15217%201.55141Z%22%2F%3E%3Cpath%20d%3D%22M10.8494%202.68637C10.8689%202.34575%2010.9153%202.12108%2011.0088%201.9159C11.0458%201.83469%2011.0804%201.76822%2011.0858%201.76822C11.0911%201.76822%2011.075%201.82816%2011.05%201.90142C10.9821%202.10054%2010.9709%202.3729%2011.0177%202.68978C11.0771%203.09184%2011.1109%203.14985%2011.5385%203.58416C11.739%203.78788%2011.9723%204.0448%2012.0568%204.15511L12.2106%204.35568L12.0568%204.21234C11.8688%204.03705%2011.4364%203.6952%2011.3409%203.64633C11.2768%203.61356%2011.2673%203.61413%2011.2278%203.65321C11.1914%203.68922%2011.1837%203.74333%2011.1787%203.99915C11.1708%204.39786%2011.1161%204.65377%2010.9842%204.90965C10.9128%205.04805%2010.9015%205.01851%2010.9661%204.8623C11.0143%204.74566%2011.0192%204.69439%2011.0189%204.30842C11.0181%203.53291%2010.9255%203.34647%2010.3823%203.02709C10.2447%202.94618%2010.0179%202.8295%209.87839%202.76778C9.73887%202.70606%209.62805%202.6523%209.63208%202.64828C9.64746%202.63307%2010.1772%202.78675%2010.3905%202.86828C10.7077%202.98954%2010.76%203.00526%2010.7985%202.99063C10.8244%202.98082%2010.8369%202.90608%2010.8494%202.68637Z%22%2F%3E%3Cpath%20d%3D%22M4.51745%204.01304C4.13569%203.49066%203.89948%202.68973%203.95062%202.091L3.96643%201.90572L4.05333%201.92148C4.21652%201.95106%204.49789%202.05515%204.62964%202.13469C4.9912%202.35293%205.14773%202.64027%205.30697%203.37811C5.35362%203.59423%205.41482%203.8388%205.44298%203.9216C5.48831%204.05487%205.65962%204.36617%205.7989%204.56834C5.89922%204.71395%205.83258%204.78295%205.61082%204.76305C5.27215%204.73267%204.8134%204.41799%204.51745%204.01304Z%22%2F%3E%3Cpath%20d%3D%22M10.3863%207.90088C8.60224%207.18693%207.97389%206.56721%207.97389%205.52157C7.97389%205.36769%207.97922%205.24179%207.98571%205.24179C7.99221%205.24179%208.06124%205.29257%208.1391%205.35465C8.50088%205.64305%208.906%205.76623%2010.0275%205.92885C10.6875%206.02455%2011.0589%206.10185%2011.4015%206.21477C12.4904%206.57371%2013.1641%207.30212%2013.3248%208.29426C13.3715%208.58255%2013.3441%209.12317%2013.2684%209.4081C13.2087%209.63315%2013.0263%2010.0388%2012.9779%2010.0544C12.9645%2010.0587%2012.9514%2010.0076%2012.9479%209.93809C12.9296%209.56554%2012.7402%209.20285%2012.4221%208.93116C12.0604%208.62227%2011.5745%208.37633%2010.3863%207.90088Z%22%2F%3E%3Cpath%20d%3D%22M9.13385%208.19748C9.11149%208.06527%209.07272%207.89643%209.04769%207.82228L9.00217%207.68748L9.08672%207.7818C9.20374%207.91233%209.2962%208.07937%209.37457%208.30185C9.43438%208.47165%209.44111%208.52215%209.44066%208.79807C9.4402%209.06896%209.43273%209.12575%209.3775%209.27858C9.29042%209.51959%209.18233%209.69048%209.00097%209.87391C8.67507%2010.2036%208.25607%2010.3861%207.65143%2010.4618C7.54633%2010.4749%207.24%2010.4971%206.97069%2010.511C6.292%2010.5461%205.84531%2010.6186%205.44393%2010.7587C5.38623%2010.7788%205.3347%2010.7911%205.32947%2010.7859C5.31323%2010.7698%205.58651%2010.6079%205.81223%2010.4998C6.1305%2010.3474%206.44733%2010.2643%207.15719%2010.1468C7.50785%2010.0887%207.86998%2010.0183%207.96194%209.99029C8.83033%209.72566%209.27671%209.04276%209.13385%208.19748Z%22%2F%3E%3Cpath%20d%3D%22M9.95169%209.64109C9.71465%209.13463%209.66022%208.64564%209.79009%208.18961C9.80399%208.14088%209.82632%208.101%209.83976%208.101C9.85319%208.101%209.90913%208.13105%209.96404%208.16777C10.0733%208.24086%2010.2924%208.36395%2010.876%208.68023C11.6043%209.0749%2012.0196%209.3805%2012.302%209.72965C12.5493%2010.0354%2012.7023%2010.3837%2012.776%2010.8084C12.8177%2011.0489%2012.7932%2011.6277%2012.7311%2011.8699C12.5353%2012.6337%2012.0802%2013.2336%2011.4311%2013.5837C11.336%2013.635%2011.2506%2013.6771%2011.2414%2013.6773C11.2321%2013.6775%2011.2668%2013.5899%2011.3184%2013.4827C11.5367%2013.029%2011.5616%2012.5877%2011.3965%2012.0965C11.2954%2011.7957%2011.0893%2011.4287%2010.6732%2010.8084C10.1893%2010.0873%2010.0707%209.89539%209.95169%209.64109Z%22%2F%3E%3Cpath%20d%3D%22M3.25046%2012.3737C3.91252%2011.8181%204.73629%2011.4234%205.48666%2011.3022C5.81005%2011.25%206.34877%2011.2707%206.64823%2011.3469C7.12824%2011.469%207.55763%2011.7425%207.78094%2012.0683C7.99918%2012.3867%208.09281%2012.6642%208.19029%2013.2816C8.22875%2013.5252%208.27057%2013.7697%208.28323%2013.8251C8.35644%2014.1451%208.4989%2014.4008%208.67544%2014.5293C8.95583%2014.7333%209.43865%2014.7459%209.91362%2014.5618C9.99423%2014.5305%2010.0642%2014.5089%2010.0691%2014.5138C10.0864%2014.5308%209.84719%2014.6899%209.67847%2014.7737C9.45143%2014.8864%209.2709%2014.93%209.03102%2014.93C8.59601%2014.93%208.23486%2014.7101%207.9335%2014.2616C7.87419%2014.1733%207.7409%2013.909%207.63729%2013.6741C7.3191%2012.9528%207.16199%2012.7331%206.79255%2012.4926C6.47104%2012.2834%206.05641%2012.2459%205.74449%2012.3979C5.33475%2012.5976%205.22043%2013.118%205.51389%2013.4478C5.63053%2013.5789%205.84803%2013.6919%206.02588%2013.7139C6.35861%2013.7551%206.64455%2013.5035%206.64455%2013.1696C6.64455%2012.9528%206.56071%2012.8291%206.34966%2012.7344C6.0614%2012.6051%205.75156%2012.7562%205.75304%2013.0254C5.75368%2013.1402%205.80396%2013.2122%205.91971%2013.2643C5.99397%2013.2977%205.99569%2013.3003%205.93514%2013.2878C5.67066%2013.2333%205.6087%2012.9164%205.82135%2012.706C6.07667%2012.4535%206.60461%2012.5649%206.78591%2012.9097C6.86208%2013.0545%206.87092%2013.3429%206.80451%2013.517C6.6559%2013.9068%206.22256%2014.1117%205.78297%2014.0002C5.48368%2013.9242%205.36181%2013.842%205.00097%2013.4726C4.37395%2012.8306%204.13053%2012.7062%203.22657%2012.566L3.05335%2012.5391L3.25046%2012.3737Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M0.308383%200.883984C2.40235%203.40996%203.84457%204.45213%204.00484%204.67231C4.13717%204.85412%204.08737%205.01757%203.86067%205.14567C3.7346%205.21689%203.47541%205.28905%203.34564%205.28905C3.19887%205.28905%203.14847%205.23278%203.14847%205.23278C3.06337%205.15255%203.01544%205.16658%202.5784%204.39555C1.97166%203.45981%201.46389%202.68357%201.45004%202.67057C1.41801%202.64052%201.41856%202.64153%202.51654%204.59413C2.69394%205.0011%202.55182%205.15049%202.55182%205.20845C2.55182%205.32636%202.51946%205.38834%202.37311%205.55059C2.12914%205.8211%202.02008%206.12505%201.94135%206.7541C1.8531%207.45926%201.60492%207.95737%200.917156%208.80989C0.514562%209.30893%200.448686%209.4004%200.3471%209.60153C0.219144%209.85482%200.183961%209.99669%200.169701%2010.3165C0.154629%2010.6547%200.183983%2010.8732%200.287934%2011.1965C0.378939%2011.4796%200.473932%2011.6665%200.716778%2012.0403C0.926351%2012.3629%201.04702%2012.6027%201.04702%2012.6965C1.04702%2012.7711%201.06136%2012.7712%201.38611%2012.6983C2.16328%2012.5239%202.79434%2012.2171%203.14925%2011.8411C3.36891%2011.6084%203.42048%2011.4799%203.42215%2011.1611C3.42325%2010.9525%203.41587%2010.9088%203.35914%2010.7888C3.2668%2010.5935%203.09869%2010.4311%202.72817%2010.1794C2.2427%209.84953%202.03534%209.58398%201.97807%209.21878C1.93108%208.91913%201.98559%208.70771%202.25416%208.14825C2.53214%207.56916%202.60103%207.32239%202.64763%206.73869C2.67773%206.36158%202.71941%206.21286%202.82842%206.09348C2.94212%205.969%203.04447%205.92684%203.32584%205.88863C3.78457%205.82635%204.07667%205.70839%204.31677%205.48849C4.52505%205.29772%204.61221%205.11391%204.62558%204.8372L4.63574%204.62747L4.51934%204.49259C4.09783%204.00411%200.0261003%200.5%200.000160437%200.5C-0.00538105%200.5%200.133325%200.672804%200.308383%200.883984ZM1.28364%2010.6992C1.37894%2010.5314%201.3283%2010.3158%201.16889%2010.2104C1.01827%2010.1109%200.78428%2010.1578%200.78428%2010.2875C0.78428%2010.3271%200.806303%2010.3559%200.855937%2010.3813C0.939514%2010.424%200.945581%2010.4721%200.879823%2010.5703C0.81323%2010.6698%200.818604%2010.7573%200.894991%2010.8167C1.0181%2010.9125%201.19237%2010.8598%201.28364%2010.6992Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M4.92523%205.99865C4.70988%206.06439%204.50054%206.29124%204.43574%206.5291C4.39621%206.67421%204.41864%206.92875%204.47785%207.00736C4.57351%207.13433%204.66602%207.16778%204.91651%207.16603C5.40693%207.16263%205.83327%206.95358%205.88284%206.69224C5.92347%206.47801%205.73622%206.18112%205.4783%206.05078C5.34521%205.98355%205.06217%205.95688%204.92523%205.99865ZM5.49853%206.44422C5.57416%206.33741%205.54107%206.22198%205.41245%206.14391C5.1675%205.99525%204.79708%206.11827%204.79708%206.34826C4.79708%206.46274%204.99025%206.58765%205.16731%206.58765C5.28516%206.58765%205.44644%206.5178%205.49853%206.44422Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\"","/*eslint-disable*/module.exports={messages:{\"$-\":\"$-\",\"$<0/>\":\"$<0/>\",\"${0}\":[\"$\",[\"0\"]],\"(${0})\":[\"($\",[\"0\"],\")\"],\"(View on Explorer)\":\"(View on Explorer)\",\"(clear all)\":\"(clear all)\",\"(edit)\":\"(edit)\",\"- Remove recipient\":\"- Remove recipient\",\"0 UNI / week\":\"0 UNI / week\",\"25%\":\"25%\",\"50%\":\"50%\",\"75%\":\"75%\",\"<0/> All Proposals\":\"<0/> All Proposals\",\"<0/> Votes\":\"<0/> Votes\",\"<0>Account analytics and accrued fees<1> ↗ \":\"<0>Account analytics and accrued fees<1> ↗ \",\"<0>Current Price:<1><2/><3>{0} per {1}\":[\"<0>Current Price:<1><2/><3>\",[\"0\"],\" per \",[\"1\"],\"\"],\"<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.\":\"<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.\",\"<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.\":\"<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.\",\"<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.\":\"<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.\",\"<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.\":\"<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.\",\"<0>Unlock voting to prepare for the next proposal.\":\"<0>Unlock voting to prepare for the next proposal.\",\"<0>🎉 Welcome to team Unicorn :) <1>🎉\":\"<0>🎉 Welcome to team Unicorn :) <1>🎉\",\"A minimum threshold of 0.25% of the total UNI supply is required to submit proposals\":\"A minimum threshold of 0.25% of the total UNI supply is required to submit proposals\",\"About\":\"About\",\"Accept\":\"Accept\",\"Account\":\"Account\",\"Active\":\"Active\",\"Add\":\"Add\",\"Add <0/> and <1/> to Uniswap V2\":\"Add <0/> and <1/> to Uniswap V2\",\"Add Delegate +\":\"Add Delegate +\",\"Add Liquidity\":\"Add Liquidity\",\"Add V2 Liquidity\":\"Add V2 Liquidity\",\"Add liquidity.\":\"Add liquidity.\",\"Add more liquidity\":\"Add more liquidity\",\"Add {0} to Metamask <0/>\":[\"Add \",[\"0\"],\" to Metamask <0/>\"],\"Add {0}-{1} liquidity\":[\"Add \",[\"0\"],\"-\",[\"1\"],\" liquidity\"],\"Add {0}/{1} V3 liquidity\":[\"Add \",[\"0\"],\"/\",[\"1\"],\" V3 liquidity\"],\"Added {0}\":[\"Added \",[\"0\"]],\"Address has no available claim\":\"Address has no available claim\",\"Against\":\"Against\",\"Allow LP token migration\":\"Allow LP token migration\",\"Allow high price impact trades and skip the confirm screen. Use at your own risk.\":\"Allow high price impact trades and skip the confirm screen. Use at your own risk.\",\"Allow the Uniswap Protocol to use your {0}\":[\"Allow the Uniswap Protocol to use your \",[\"0\"]],\"Allowed\":\"Allowed\",\"Amount\":\"Amount\",\"An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.\":\"An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.\",\"Approval pending <0/>\":\"Approval pending <0/>\",\"Approve\":\"Approve\",\"Approve Token\":\"Approve Token\",\"Approve {0}\":[\"Approve \",[\"0\"]],\"Approve {0} first\":[\"Approve \",[\"0\"],\" first\"],\"Approved\":\"Approved\",\"Approving\":\"Approving\",\"Approving {0}\":[\"Approving \",[\"0\"]],\"Arbiscan\":\"Arbiscan\",\"Arbitrum Bridge\":\"Arbitrum Bridge\",\"Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.\":\"Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.\",\"Are you sure?\":\"Are you sure?\",\"As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI\":\"As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI\",\"At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.\":[\"At least \",[\"0\"],\" \",[\"1\"],\" and \",[\"2\"],\" \",[\"3\"],\" will be refunded to your wallet due to selected price range.\"],\"Auto\":\"Auto\",\"Auto Router API\":\"Auto Router API\",\"Available to deposit: {0}\":[\"Available to deposit: \",[\"0\"]],\"Balance: {0}\":[\"Balance: \",[\"0\"]],\"Best for exotic pairs.\":\"Best for exotic pairs.\",\"Best for most pairs.\":\"Best for most pairs.\",\"Best for stable pairs.\":\"Best for stable pairs.\",\"Best for very stable pairs.\":\"Best for very stable pairs.\",\"Best price route costs ~{formattedGasPriceString} in gas.\":[\"Best price route costs ~\",[\"formattedGasPriceString\"],\" in gas.\"],\"Blocked address\":\"Blocked address\",\"Bridge\":\"Bridge\",\"By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.\":\"By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.\",\"By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.\":\"By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.\",\"By connecting a wallet, you agree to Uniswap Labs’ <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.\":\"By connecting a wallet, you agree to Uniswap Labs’ <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.\",\"Canceled\":\"Canceled\",\"Change\":\"Change\",\"Charts\":\"Charts\",\"Check network status\":\"Check network status\",\"Check out our v3 LP walkthrough and migration guides.\":\"Check out our v3 LP walkthrough and migration guides.\",\"Claim\":\"Claim\",\"Claim <0/> for {0}\":[\"Claim <0/> for \",[\"0\"]],\"Claim UNI\":\"Claim UNI\",\"Claim UNI Token\":\"Claim UNI Token\",\"Claim UNI reward for {0}\":[\"Claim UNI reward for \",[\"0\"]],\"Claim fees\":\"Claim fees\",\"Claim your UNI tokens\":\"Claim your UNI tokens\",\"Claimed\":\"Claimed\",\"Claimed UNI!\":\"Claimed UNI!\",\"Claimed!\":\"Claimed!\",\"Claiming\":\"Claiming\",\"Claiming UNI\":\"Claiming UNI\",\"Claiming {0} UNI\":[\"Claiming \",[\"0\"],\" UNI\"],\"Clear All\":\"Clear All\",\"Clear all\":\"Clear all\",\"Close\":\"Close\",\"Closed\":\"Closed\",\"Collect\":\"Collect\",\"Collect as WETH\":\"Collect as WETH\",\"Collect fees\":\"Collect fees\",\"Collect {0}/{1} fees\":[\"Collect \",[\"0\"],\"/\",[\"1\"],\" fees\"],\"Collected\":\"Collected\",\"Collecting\":\"Collecting\",\"Collecting fees\":\"Collecting fees\",\"Collecting fees will withdraw currently available fees for you.\":\"Collecting fees will withdraw currently available fees for you.\",\"Confirm\":\"Confirm\",\"Confirm Supply\":\"Confirm Supply\",\"Confirm Swap\":\"Confirm Swap\",\"Confirm swap\":\"Confirm swap\",\"Confirm this transaction in your wallet\":\"Confirm this transaction in your wallet\",\"Confirm transaction in wallet\":\"Confirm transaction in wallet\",\"Connect Wallet\":\"Connect Wallet\",\"Connect a wallet\":\"Connect a wallet\",\"Connect to a wallet to find pools\":\"Connect to a wallet to find pools\",\"Connect to a wallet to view your V2 liquidity.\":\"Connect to a wallet to view your V2 liquidity.\",\"Connect to a wallet to view your liquidity.\":\"Connect to a wallet to view your liquidity.\",\"Connect wallet to swap\":\"Connect wallet to swap\",\"Connected with {name}\":[\"Connected with \",[\"name\"]],\"Copied\":\"Copied\",\"Copy Address\":\"Copy Address\",\"Create Pool & Supply\":\"Create Pool & Supply\",\"Create Proposal\":\"Create Proposal\",\"Create a pair\":\"Create a pair\",\"Create a pool\":\"Create a pool\",\"Create an issue on GitHub\":\"Create an issue on GitHub\",\"Create pool and add {0}/{1} V3 liquidity\":[\"Create pool and add \",[\"0\"],\"/\",[\"1\"],\" V3 liquidity\"],\"Create pool.\":\"Create pool.\",\"Create {0}/{1} V3 pool\":[\"Create \",[\"0\"],\"/\",[\"1\"],\" V3 pool\"],\"Current price\":\"Current price\",\"Current {0} Price:\":[\"Current \",[\"0\"],\" Price:\"],\"Custom\":\"Custom\",\"Dark Theme\":\"Dark Theme\",\"Defeated\":\"Defeated\",\"Delegate Votes\":\"Delegate Votes\",\"Delegate voting power to {0}\":[\"Delegate voting power to \",[\"0\"]],\"Delegated to:\":\"Delegated to:\",\"Delegating votes\":\"Delegating votes\",\"Deposit\":\"Deposit\",\"Deposit Amounts\":\"Deposit Amounts\",\"Deposit UNI-V2 LP Tokens\":\"Deposit UNI-V2 LP Tokens\",\"Deposit liquidity\":\"Deposit liquidity\",\"Deposit tokens to the {label} network.\":[\"Deposit tokens to the \",[\"label\"],\" network.\"],\"Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.\":\"Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.\",\"Deposited liquidity:\":\"Deposited liquidity:\",\"Deposited {0} UNI-V2\":[\"Deposited \",[\"0\"],\" UNI-V2\"],\"Depositing Liquidity\":\"Depositing Liquidity\",\"Description\":\"Description\",\"Detailed\":\"Detailed\",\"Details\":\"Details\",\"Disconnect\":\"Disconnect\",\"Discord\":\"Discord\",\"Dismiss\":\"Dismiss\",\"Docs\":\"Docs\",\"Don’t see one of your v2 positions? <0>Import it.\":\"Don’t see one of your v2 positions? <0>Import it.\",\"Earned UNI tokens represent voting shares in Uniswap governance.\":\"Earned UNI tokens represent voting shares in Uniswap governance.\",\"Edit\":\"Edit\",\"Efficiency Comparison\":\"Efficiency Comparison\",\"Enter a percent\":\"Enter a percent\",\"Enter a recipient\":\"Enter a recipient\",\"Enter a valid slippage percentage\":\"Enter a valid slippage percentage\",\"Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.\":\"Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.\",\"Enter an amount\":\"Enter an amount\",\"Enter valid list location\":\"Enter valid list location\",\"Enter valid token address\":\"Enter valid token address\",\"Enter {0} amount\":[\"Enter \",[\"0\"],\" amount\"],\"Error\":\"Error\",\"Error connecting\":\"Error connecting\",\"Error connecting. Try refreshing the page.\":\"Error connecting. Try refreshing the page.\",\"Error details\":\"Error details\",\"Error importing list\":\"Error importing list\",\"Estimate may differ due to your wallet gas settings\":\"Estimate may differ due to your wallet gas settings\",\"Estimated network fee\":\"Estimated network fee\",\"Etherscan\":\"Etherscan\",\"Executed\":\"Executed\",\"Expanded results from inactive Token Lists\":\"Expanded results from inactive Token Lists\",\"Expected Output\":\"Expected Output\",\"Expert Mode\":\"Expert Mode\",\"Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.\":\"Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.\",\"Expired\":\"Expired\",\"Explore Uniswap Analytics.\":\"Explore Uniswap Analytics.\",\"Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.\":[\"Failed to switch networks from the Uniswap Interface. In order to use Uniswap on \",[\"0\"],\", you must change the network in your wallet.\"],\"Fee Tier\":\"Fee Tier\",\"Fee tier\":\"Fee tier\",\"Fetching best price...\":\"Fetching best price...\",\"Fetching best price…\":\"Fetching best price…\",\"For\":\"For\",\"For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.\":\"For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.\",\"From\":\"From\",\"From (at most)\":\"From (at most)\",\"Full Range\":\"Full Range\",\"Full range positions may earn less fees than concentrated positions. Learn more <0>here.\":\"Full range positions may earn less fees than concentrated positions. Learn more <0>here.\",\"Get support on Discord\":\"Get support on Discord\",\"Help Center\":\"Help Center\",\"Hide\":\"Hide\",\"Hide closed positions\":\"Hide closed positions\",\"High Price Impact\":\"High Price Impact\",\"How this app uses APIs\":\"How this app uses APIs\",\"I understand\":\"I understand\",\"If you purchase a token from this list, you may not be able to sell it back.\":\"If you purchase a token from this list, you may not be able to sell it back.\",\"Import\":\"Import\",\"Import List\":\"Import List\",\"Import Pool\":\"Import Pool\",\"Import V2 Pool\":\"Import V2 Pool\",\"Import at your own risk\":\"Import at your own risk\",\"In range\":\"In range\",\"Increase Liquidity\":\"Increase Liquidity\",\"Initial prices and pool share\":\"Initial prices and pool share\",\"Initializing...\":\"Initializing...\",\"Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.\":[\"Input is estimated. You will sell at most <0>\",[\"0\"],\" \",[\"1\"],\" or the transaction will revert.\"],\"Install Metamask\":\"Install Metamask\",\"Insufficient liquidity for this trade.\":\"Insufficient liquidity for this trade.\",\"Insufficient {0}\":[\"Insufficient \",[\"0\"]],\"Insufficient {0} balance\":[\"Insufficient \",[\"0\"],\" balance\"],\"Interface Settings\":\"Interface Settings\",\"Invalid pair\":\"Invalid pair\",\"Invalid pair.\":\"Invalid pair.\",\"Invalid price input\":\"Invalid price input\",\"Invalid range selected. The min price must be lower than the max price.\":\"Invalid range selected. The min price must be lower than the max price.\",\"Invalid recipient\":\"Invalid recipient\",\"Language\":\"Language\",\"Learn\":\"Learn\",\"Learn about providing liquidity\":\"Learn about providing liquidity\",\"Learn more\":\"Learn more\",\"Legal & Privacy\":\"Legal & Privacy\",\"Light Theme\":\"Light Theme\",\"Liquidity\":\"Liquidity\",\"Liquidity data not available.\":\"Liquidity data not available.\",\"Liquidity provider rewards\":\"Liquidity provider rewards\",\"Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.\":\"Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.\",\"Lists\":\"Lists\",\"Loaded\":\"Loaded\",\"Loading\":\"Loading\",\"MAX\":\"MAX\",\"Manage\":\"Manage\",\"Manage Liquidity in Rewards Pool\":\"Manage Liquidity in Rewards Pool\",\"Manage Token Lists\":\"Manage Token Lists\",\"Manage this pool.\":\"Manage this pool.\",\"Max\":\"Max\",\"Max Price\":\"Max Price\",\"Max price\":\"Max price\",\"Max slippage\":\"Max slippage\",\"Max:\":\"Max:\",\"Maximum sent\":\"Maximum sent\",\"Menu\":\"Menu\",\"Migrate\":\"Migrate\",\"Migrate Liquidity to V3\":\"Migrate Liquidity to V3\",\"Migrate V2 Liquidity\":\"Migrate V2 Liquidity\",\"Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.\":\"Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.\",\"Migrate {0}/{1} liquidity to V3\":[\"Migrate \",[\"0\"],\"/\",[\"1\"],\" liquidity to V3\"],\"Migrating\":\"Migrating\",\"Min Price\":\"Min Price\",\"Min price\":\"Min price\",\"Min:\":\"Min:\",\"Minimum received\":\"Minimum received\",\"Missing dependencies\":\"Missing dependencies\",\"Mock Toggle\":\"Mock Toggle\",\"More\":\"More\",\"Network Fee\":\"Network Fee\",\"Network Warning\":\"Network Warning\",\"Network fees exceed 50% of the swap amount!\":\"Network fees exceed 50% of the swap amount!\",\"New Position\":\"New Position\",\"No V2 Liquidity found.\":\"No V2 Liquidity found.\",\"No active pools\":\"No active pools\",\"No data\":\"No data\",\"No description.\":\"No description.\",\"No liquidity found.\":\"No liquidity found.\",\"No pool found.\":\"No pool found.\",\"No proposals found.\":\"No proposals found.\",\"No results found.\":\"No results found.\",\"Not created\":\"Not created\",\"OFF\":\"OFF\",\"ON\":\"ON\",\"ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.\":\"ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.\",\"Off\":\"Off\",\"On\":\"On\",\"Once you are happy with the rate click supply to review.\":\"Once you are happy with the rate click supply to review.\",\"Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.\":[\"Only UNI votes that were self delegated or delegated to another address before block \",[\"0\"],\" are eligible for voting.\"],\"Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.\":\"Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.\",\"Optimism Gateway\":\"Optimism Gateway\",\"Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.\":\"Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.\",\"Optimistic Etherscan\":\"Optimistic Etherscan\",\"Out of range\":\"Out of range\",\"Output is estimated.\":\"Output is estimated.\",\"Output is estimated. If the price changes by more than {0}% your transaction will revert.\":[\"Output is estimated. If the price changes by more than \",[\"0\"],\"% your transaction will revert.\"],\"Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.\":[\"Output is estimated. You will receive at least <0>\",[\"0\"],\" \",[\"1\"],\" or the transaction will revert.\"],\"Output will be sent to <0>{0}\":[\"Output will be sent to <0>\",[\"0\"],\"\"],\"Owner\":\"Owner\",\"Participating pools\":\"Participating pools\",\"Pending\":\"Pending\",\"Please confirm you would like to remove this list by typing REMOVE\":\"Please confirm you would like to remove this list by typing REMOVE\",\"Please connect to Layer 1 Ethereum\":\"Please connect to Layer 1 Ethereum\",\"Please connect to a supported network in the dropdown menu or in your wallet.\":\"Please connect to a supported network in the dropdown menu or in your wallet.\",\"Please type the word \\\"{confirmWord}\\\" to enable expert mode.\":[\"Please type the word \\\"\",[\"confirmWord\"],\"\\\" to enable expert mode.\"],\"Polygon Bridge\":\"Polygon Bridge\",\"Polygonscan\":\"Polygonscan\",\"Pool\":\"Pool\",\"Pool Found!\":\"Pool Found!\",\"Pool Rate\":\"Pool Rate\",\"Pool rate\":\"Pool rate\",\"Pool tokens in rewards pool:\":\"Pool tokens in rewards pool:\",\"Pooled {0}:\":[\"Pooled \",[\"0\"],\":\"],\"Pools Overview\":\"Pools Overview\",\"Preview\":\"Preview\",\"Price\":\"Price\",\"Price Difference:\":\"Price Difference:\",\"Price Impact\":\"Price Impact\",\"Price Impact Too High\":\"Price Impact Too High\",\"Price Updated\":\"Price Updated\",\"Price impact\":\"Price impact\",\"Price range\":\"Price range\",\"Price updated\":\"Price updated\",\"Price:\":\"Price:\",\"Prices and pool share\":\"Prices and pool share\",\"Proposal\":\"Proposal\",\"Proposal Submitted\":\"Proposal Submitted\",\"Proposal Title\":\"Proposal Title\",\"Proposals\":\"Proposals\",\"Proposals submitted by community members will appear here.\":\"Proposals submitted by community members will appear here.\",\"Proposed Action\":\"Proposed Action\",\"Proposer\":\"Proposer\",\"Protocol Disclaimer\":\"Protocol Disclaimer\",\"Queued\":\"Queued\",\"Rates\":\"Rates\",\"Read more about UNI\":\"Read more about UNI\",\"Read more about Uniswap governance\":\"Read more about Uniswap governance\",\"Read more about providing liquidity\":\"Read more about providing liquidity\",\"Read more about unsupported assets\":\"Read more about unsupported assets\",\"Recent Transactions\":\"Recent Transactions\",\"Recent transactions\":\"Recent transactions\",\"Recipient\":\"Recipient\",\"Reload the page\":\"Reload the page\",\"Remove\":\"Remove\",\"Remove <0/> and <1/>\":\"Remove <0/> and <1/>\",\"Remove Amount\":\"Remove Amount\",\"Remove Delegate\":\"Remove Delegate\",\"Remove Liquidity\":\"Remove Liquidity\",\"Remove list\":\"Remove list\",\"Removing {0} {1} and {2} {3}\":[\"Removing \",[\"0\"],\" \",[\"1\"],\" and \",[\"2\"],\" \",[\"3\"]],\"Removing {0} {1} and{2} {3}\":[\"Removing \",[\"0\"],\" \",[\"1\"],\" and\",[\"2\"],\" \",[\"3\"]],\"Request Features\":\"Request Features\",\"Reset\":\"Reset\",\"Return\":\"Return\",\"Review swap\":\"Review swap\",\"Search by token name or address\":\"Search by token name or address\",\"Search name or paste address\":\"Search name or paste address\",\"Select Pair\":\"Select Pair\",\"Select a network\":\"Select a network\",\"Select a token\":\"Select a token\",\"Select a token to find your v2 liquidity.\":\"Select a token to find your v2 liquidity.\",\"Select an action\":\"Select an action\",\"Selected Range\":\"Selected Range\",\"Self\":\"Self\",\"Self Delegate\":\"Self Delegate\",\"Set Price Range\":\"Set Price Range\",\"Set Starting Price\":\"Set Starting Price\",\"Settings\":\"Settings\",\"Share of Pool\":\"Share of Pool\",\"Share of Pool:\":\"Share of Pool:\",\"Show Portis\":\"Show Portis\",\"Show closed positions\":\"Show closed positions\",\"Simple\":\"Simple\",\"Slippage tolerance\":\"Slippage tolerance\",\"Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.\":\"Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.\",\"Something went wrong\":\"Something went wrong\",\"Something went wrong.\":\"Something went wrong.\",\"Step 1. Get UNI-V2 Liquidity tokens\":\"Step 1. Get UNI-V2 Liquidity tokens\",\"Submit new proposal\":\"Submit new proposal\",\"Submitting Proposal\":\"Submitting Proposal\",\"Submitting Vote\":\"Submitting Vote\",\"Succeeded\":\"Succeeded\",\"Success\":\"Success\",\"Supply\":\"Supply\",\"Supplying {0} {1} and {2} {3}\":[\"Supplying \",[\"0\"],\" \",[\"1\"],\" and \",[\"2\"],\" \",[\"3\"]],\"Swap\":\"Swap\",\"Swap <0/> for exactly <1/>\":\"Swap <0/> for exactly <1/>\",\"Swap Anyway\":\"Swap Anyway\",\"Swap details\":\"Swap details\",\"Swap exactly <0/> for <1/>\":\"Swap exactly <0/> for <1/>\",\"Swap failed: {0}\":[\"Swap failed: \",[\"0\"]],\"Swap summary\":\"Swap summary\",\"Swapping {0} {1} for {2} {3}\":[\"Swapping \",[\"0\"],\" \",[\"1\"],\" for \",[\"2\"],\" \",[\"3\"]],\"Take a 10 minute survey to help us improve your experience in the Uniswap app.\":\"Take a 10 minute survey to help us improve your experience in the Uniswap app.\",\"Tell us what you think ↗\":\"Tell us what you think ↗\",\"Thanks for being part of the Uniswap community <0/>\":\"Thanks for being part of the Uniswap community <0/>\",\"The % you will earn in fees.\":\"The % you will earn in fees.\",\"The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.\":\"The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.\",\"The app fetches blockchain data from The Graph’s hosted service.\":\"The app fetches blockchain data from The Graph’s hosted service.\",\"The app fetches on-chain data and constructs contract calls with an Infura API.\":\"The app fetches on-chain data and constructs contract calls with an Infura API.\",\"The app fetches the optimal trade route from a Uniswap Labs server.\":\"The app fetches the optimal trade route from a Uniswap Labs server.\",\"The app logs anonymized usage statistics in order to improve over time.\":\"The app logs anonymized usage statistics in order to improve over time.\",\"The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.\":\"The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.\",\"The cost of sending this transaction is more than half of the value of the input amount.\":\"The cost of sending this transaction is more than half of the value of the input amount.\",\"The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.\":\"The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.\",\"The estimated difference between the USD values of input and output amounts.\":\"The estimated difference between the USD values of input and output amounts.\",\"The input token cannot be transferred. There may be an issue with the input token.\":\"The input token cannot be transferred. There may be an issue with the input token.\",\"The market price is outside your specified price range. Single-asset deposit only.\":\"The market price is outside your specified price range. Single-asset deposit only.\",\"The most recent block number on this network. Prices update on every block.\":\"The most recent block number on this network. Prices update on every block.\",\"The output token cannot be transferred. There may be an issue with the output token.\":\"The output token cannot be transferred. There may be an issue with the output token.\",\"The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.\":\"The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.\",\"The price of this pool is outside of your selected range. Your position is not currently earning fees.\":\"The price of this pool is outside of your selected range. Your position is not currently earning fees.\",\"The price of this pool is within your selected range. Your position is currently earning fees.\":\"The price of this pool is within your selected range. Your position is currently earning fees.\",\"The ratio of tokens you add will set the price of this pool.\":\"The ratio of tokens you add will set the price of this pool.\",\"The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.\":\"The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.\",\"There is no liquidity data.\":\"There is no liquidity data.\",\"This app uses the following third-party APIs:\":\"This app uses the following third-party APIs:\",\"This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.\":\"This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.\",\"This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.\":\"This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.\",\"This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.\":\"This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.\",\"This token is not supported in the Uniswap Labs app\":\"This token is not supported in the Uniswap Labs app\",\"This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the\":[\"This tool will safely migrate your \",[\"0\"],\" liquidity to V3. The process is completely trustless thanks to the\"],\"This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.\":\"This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.\",\"This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.\":\"This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.\",\"Tip: Custom tokens are stored locally in your browser\":\"Tip: Custom tokens are stored locally in your browser\",\"To\":\"To\",\"To (at least)\":\"To (at least)\",\"Token not supported\":\"Token not supported\",\"Tokens\":\"Tokens\",\"Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.\":\"Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.\",\"Top pools\":\"Top pools\",\"Total deposited\":\"Total deposited\",\"Total deposits\":\"Total deposits\",\"Trade Route\":\"Trade Route\",\"Trading\":\"Trading\",\"Transaction Settings\":\"Transaction Settings\",\"Transaction Submitted\":\"Transaction Submitted\",\"Transaction completed in\":\"Transaction completed in\",\"Transaction deadline\":\"Transaction deadline\",\"Transaction pending\":\"Transaction pending\",\"Transaction rejected.\":\"Transaction rejected.\",\"Transaction submitted\":\"Transaction submitted\",\"Transfer Token\":\"Transfer Token\",\"Try Again\":\"Try Again\",\"Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.\":\"Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.\",\"Turn On Expert Mode\":\"Turn On Expert Mode\",\"UNI has arrived\":\"UNI has arrived\",\"UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.\":\"UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.\",\"UNI {0}/{1} Burned\":[\"UNI \",[\"0\"],\"/\",[\"1\"],\" Burned\"],\"UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.\":[\"UNI-V2 LP tokens are required. Once you've added liquidity to the \",[\"0\"],\"-\",[\"1\"],\" pool you can stake your liquidity tokens on this page.\"],\"UNI-V2 {0}-{1}\":[\"UNI-V2 \",[\"0\"],\"-\",[\"1\"]],\"Unclaimed UNI\":\"Unclaimed UNI\",\"Unclaimed fees\":\"Unclaimed fees\",\"Undetermined\":\"Undetermined\",\"Unexpected error. Could not estimate gas for the swap.\":\"Unexpected error. Could not estimate gas for the swap.\",\"Unexpected issue with estimating the gas. Please try again.\":\"Unexpected issue with estimating the gas. Please try again.\",\"Uniswap Governance\":\"Uniswap Governance\",\"Uniswap Labs' Terms of Service\":\"Uniswap Labs' Terms of Service\",\"Uniswap available in: <0>{0}\":[\"Uniswap available in: <0>\",[\"0\"],\"\"],\"Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.\":\"Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.\",\"Uniswap liquidity mining\":\"Uniswap liquidity mining\",\"Uniswap migration contract↗\":\"Uniswap migration contract↗\",\"Unknown Source\":\"Unknown Source\",\"Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.\":[\"Unknown error\",[\"0\"],\". Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.\"],\"Unlock Votes\":\"Unlock Votes\",\"Unlock Voting\":\"Unlock Voting\",\"Unlocking Votes\":\"Unlocking Votes\",\"Unsupported Asset\":\"Unsupported Asset\",\"Unsupported Assets\":\"Unsupported Assets\",\"Unsupported network–switch to another to trade.\":\"Unsupported network–switch to another to trade.\",\"Untitled\":\"Untitled\",\"Unwrap\":\"Unwrap\",\"Unwrap <0/> to {0}\":[\"Unwrap <0/> to \",[\"0\"]],\"Update Delegation\":\"Update Delegation\",\"Update list\":\"Update list\",\"Use the Uniswap Labs API to get faster quotes.\":\"Use the Uniswap Labs API to get faster quotes.\",\"User\":\"User\",\"V2 is not available on Layer 2. Switch to Layer 1 Ethereum.\":\"V2 is not available on Layer 2. Switch to Layer 1 Ethereum.\",\"V2 liquidity\":\"V2 liquidity\",\"V3 {0} Price:\":[\"V3 \",[\"0\"],\" Price:\"],\"View accrued fees and analytics<0>↗\":\"View accrued fees and analytics<0>↗\",\"View list\":\"View list\",\"View on Etherscan\":\"View on Etherscan\",\"View on Explorer\":\"View on Explorer\",\"View transaction on Explorer\":\"View transaction on Explorer\",\"Vote\":\"Vote\",\"Vote Against\":\"Vote Against\",\"Vote For\":\"Vote For\",\"Vote against proposal {proposalId}\":[\"Vote against proposal \",[\"proposalId\"]],\"Vote against proposal {proposalKey}\":[\"Vote against proposal \",[\"proposalKey\"]],\"Vote against proposal {proposalKey} with reason \\\"{0}\\\"\":[\"Vote against proposal \",[\"proposalKey\"],\" with reason \\\"\",[\"0\"],\"\\\"\"],\"Vote for proposal {proposalId}\":[\"Vote for proposal \",[\"proposalId\"]],\"Vote for proposal {proposalKey}\":[\"Vote for proposal \",[\"proposalKey\"]],\"Vote for proposal {proposalKey} with reason \\\"{0}\\\"\":[\"Vote for proposal \",[\"proposalKey\"],\" with reason \\\"\",[\"0\"],\"\\\"\"],\"Vote to abstain on proposal {proposalId}\":[\"Vote to abstain on proposal \",[\"proposalId\"]],\"Vote to abstain on proposal {proposalKey}\":[\"Vote to abstain on proposal \",[\"proposalKey\"]],\"Vote to abstain on proposal {proposalKey} with reason \\\"{0}\\\"\":[\"Vote to abstain on proposal \",[\"proposalKey\"],\" with reason \\\"\",[\"0\"],\"\\\"\"],\"Voting ended {0}\":[\"Voting ended \",[\"0\"]],\"Voting ends approximately {0}\":[\"Voting ends approximately \",[\"0\"]],\"Voting starts approximately {0}\":[\"Voting starts approximately \",[\"0\"]],\"Waiting For Confirmation\":\"Waiting For Confirmation\",\"Wallet Address or ENS name\":\"Wallet Address or ENS name\",\"Weekly Rewards\":\"Weekly Rewards\",\"Welcome to team Unicorn :)\":\"Welcome to team Unicorn :)\",\"When you claim without withdrawing your liquidity remains in the mining pool.\":\"When you claim without withdrawing your liquidity remains in the mining pool.\",\"When you withdraw, the contract will automagically claim UNI on your behalf!\":\"When you withdraw, the contract will automagically claim UNI on your behalf!\",\"When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.\":\"When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.\",\"Withdraw\":\"Withdraw\",\"Withdraw & Claim\":\"Withdraw & Claim\",\"Withdraw deposited liquidity\":\"Withdraw deposited liquidity\",\"Withdrawing {0} UNI-V2\":[\"Withdrawing \",[\"0\"],\" UNI-V2\"],\"Withdrew UNI-V2!\":\"Withdrew UNI-V2!\",\"Wrap\":\"Wrap\",\"Wrap <0/> to {0}\":[\"Wrap <0/> to \",[\"0\"]],\"Wrong Network\":\"Wrong Network\",\"You already have an active or pending proposal\":\"You already have an active or pending proposal\",\"You are creating a pool\":\"You are creating a pool\",\"You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.\":[\"You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current \",[\"0\"],\" price.\"],\"You are the first liquidity provider.\":\"You are the first liquidity provider.\",\"You can either vote on each proposal yourself or delegate your votes to a third party.\":\"You can either vote on each proposal yourself or delegate your votes to a third party.\",\"You can now trade {0}\":[\"You can now trade \",[\"0\"]],\"You don't have enough votes to submit a proposal\":\"You don't have enough votes to submit a proposal\",\"You don’t have liquidity in this pool yet.\":\"You don’t have liquidity in this pool yet.\",\"You may have lost your network connection, or {label} might be down right now.\":[\"You may have lost your network connection, or \",[\"label\"],\" might be down right now.\"],\"You may have lost your network connection.\":\"You may have lost your network connection.\",\"You might consider waiting until the network fees go down to complete this transaction.\":\"You might consider waiting until the network fees go down to complete this transaction.\",\"You must connect an account.\":\"You must connect an account.\",\"You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.\":[\"You must give the Uniswap smart contracts permission to use your \",[\"0\"],\". You only have to do this once per token.\"],\"You must have {formattedProposalThreshold} votes to submit a proposal\":[\"You must have \",[\"formattedProposalThreshold\"],\" votes to submit a proposal\"],\"You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.\":\"You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.\",\"You will also collect fees earned from this position.\":\"You will also collect fees earned from this position.\",\"You will receive\":\"You will receive\",\"You will receive at least {0} {1} or the transaction will revert.\":[\"You will receive at least \",[\"0\"],\" \",[\"1\"],\" or the transaction will revert.\"],\"You will send at most {0} {1} or the transaction will revert.\":[\"You will send at most \",[\"0\"],\" \",[\"1\"],\" or the transaction will revert.\"],\"Your V2 liquidity\":\"Your V2 liquidity\",\"Your active V3 liquidity positions will appear here.\":\"Your active V3 liquidity positions will appear here.\",\"Your liquidity deposits\":\"Your liquidity deposits\",\"Your pool share:\":\"Your pool share:\",\"Your position\":\"Your position\",\"Your position has 0 liquidity, and is not earning fees.\":\"Your position has 0 liquidity, and is not earning fees.\",\"Your position will appear here.\":\"Your position will appear here.\",\"Your position will be 100% composed of {0} at this price\":[\"Your position will be 100% composed of \",[\"0\"],\" at this price\"],\"Your position will be 100% {0} at this price.\":[\"Your position will be 100% \",[\"0\"],\" at this price.\"],\"Your position will not earn fees or be used in trades until the market price moves into your range.\":\"Your position will not earn fees or be used in trades until the market price moves into your range.\",\"Your positions\":\"Your positions\",\"Your rate\":\"Your rate\",\"Your total pool tokens:\":\"Your total pool tokens:\",\"Your transaction cost will be much higher as it includes the gas to create the pool.\":\"Your transaction cost will be much higher as it includes the gas to create the pool.\",\"Your transaction may be frontrun\":\"Your transaction may be frontrun\",\"Your transaction may fail\":\"Your transaction may fail\",\"Your transaction will revert if it has been pending for longer than this period of time.\":\"Your transaction will revert if it has been pending for longer than this period of time.\",\"Your transaction will revert if it is pending for more than this period of time.\":\"Your transaction will revert if it is pending for more than this period of time.\",\"Your transaction will revert if the price changes unfavorably by more than this percentage.\":\"Your transaction will revert if the price changes unfavorably by more than this percentage.\",\"Your transactions will appear here...\":\"Your transactions will appear here...\",\"Your unclaimed UNI\":\"Your unclaimed UNI\",\"after slippage\":\"after slippage\",\"confirm\":\"confirm\",\"for {0}\":[\"for \",[\"0\"]],\"gwei\":\"gwei\",\"has socks emoji\":\"has socks emoji\",\"here.\":\"here.\",\"https:// or ipfs:// or ENS name\":\"https:// or ipfs:// or ENS name\",\"minutes\":\"minutes\",\"via {0}\":[\"via \",[\"0\"]],\"via {0} token list\":[\"via \",[\"0\"],\" token list\"],\"{0, plural, one {Import token} other {Import tokens}}\":[[\"0\",\"plural\",{one:\"Import token\",other:\"Import tokens\"}]],\"{0}\":[[\"0\"]],\"{0} %\":[[\"0\"],\" %\"],\"{0} <0/> per <1/>\":[[\"0\"],\" <0/> per <1/>\"],\"{0} Custom Tokens\":[[\"0\"],\" Custom Tokens\"],\"{0} Deposited\":[[\"0\"],\" Deposited\"],\"{0} ETH\":[[\"0\"],\" ETH\"],\"{0} Fees Earned:\":[[\"0\"],\" Fees Earned:\"],\"{0} Pending\":[[\"0\"],\" Pending\"],\"{0} UNI\":[[\"0\"],\" UNI\"],\"{0} UNI / week\":[[\"0\"],\" UNI / week\"],\"{0} UNI-V2\":[[\"0\"],\" UNI-V2\"],\"{0} UNI-V2 LP tokens available\":[[\"0\"],\" UNI-V2 LP tokens available\"],\"{0} Votes\":[[\"0\"],\" Votes\"],\"{0} per {1}\":[[\"0\"],\" per \",[\"1\"]],\"{0} tokens\":[[\"0\"],\" tokens\"],\"{0} {1} Price:\":[[\"0\"],\" \",[\"1\"],\" Price:\"],\"{0} {nativeCurrencySymbol}\":[[\"0\"],\" \",[\"nativeCurrencySymbol\"]],\"{0} • Added by user\":[[\"0\"],\" • Added by user\"],\"{0}%\":[[\"0\"],\"%\"],\"{0}% fee tier\":[[\"0\"],\"% fee tier\"],\"{0}% pool\":[[\"0\"],\"% pool\"],\"{0}% select\":[[\"0\"],\"% select\"],\"{0}-{1} Liquidity Mining\":[[\"0\"],\"-\",[\"1\"],\" Liquidity Mining\"],\"{0}/{1} LP NFT\":[[\"0\"],\"/\",[\"1\"],\" LP NFT\"],\"{0}/{1} LP Tokens\":[[\"0\"],\"/\",[\"1\"],\" LP Tokens\"],\"{SOCKS_AMOUNT} UNI\":[[\"SOCKS_AMOUNT\"],\" UNI\"],\"{USER_AMOUNT} UNI\":[[\"USER_AMOUNT\"],\" UNI\"],\"{activeTokensOnThisChain} tokens\":[[\"activeTokensOnThisChain\"],\" tokens\"],\"{integrator} fee\":[[\"integrator\"],\" fee\"],\"{label} token bridge\":[[\"label\"],\" token bridge\"],\"{min}m {sec}s\":[[\"min\"],\"m \",[\"sec\"],\"s\"],\"{percentForSlider}%\":[[\"percentForSlider\"],\"%\"],\"{sec}s\":[[\"sec\"],\"s\"],\"{tokenB} per {tokenA}\":[[\"tokenB\"],\" per \",[\"tokenA\"]],\"← Back to Pools Overview\":\"← Back to Pools Overview\"}};","export default \"data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2013C12.5523%2013%2013%2012.5523%2013%2012C13%2011.4477%2012.5523%2011%2012%2011C11.4477%2011%2011%2011.4477%2011%2012C11%2012.5523%2011.4477%2013%2012%2013Z%22%20stroke%3D%22black%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3Cpath%20d%3D%22M19%2013C19.5523%2013%2020%2012.5523%2020%2012C20%2011.4477%2019.5523%2011%2019%2011C18.4477%2011%2018%2011.4477%2018%2012C18%2012.5523%2018.4477%2013%2019%2013Z%22%20stroke%3D%22black%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3Cpath%20d%3D%22M5%2013C5.55228%2013%206%2012.5523%206%2012C6%2011.4477%205.55228%2011%205%2011C4.44772%2011%204%2011.4477%204%2012C4%2012.5523%204.44772%2013%205%2013Z%22%20stroke%3D%22black%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E\"","export default \"d13f13f5694ec91f.svg\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%3E%20%20%3Crect%20width%3D%2224%22%20height%3D%2215.0867%22%20fill%3D%22url%28%23pattern0%29%22%2F%3E%20%20%3Cdefs%3E%20%20%20%20%3Cpattern%20id%3D%22pattern0%22%20patternContentUnits%3D%22objectBoundingBox%22%20width%3D%221%22%20height%3D%221%22%3E%20%20%20%20%20%20%3Cuse%20xlink%3Ahref%3D%22%23image0%22%20transform%3D%22translate%28-0.00968744%29%20scale%280.00339792%200.00540541%29%22%2F%3E%20%20%20%20%3C%2Fpattern%3E%20%20%20%20%3Cimage%20id%3D%22image0%22%20width%3D%22300%22%20height%3D%22185%22%20xlink%3Ahref%3D%22data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAASwAAAC5CAYAAACSoQIxAAAgAElEQVR4Ae19fZgdVZnn761TnQ%2FCtwmugxhkGPXZDIjDoENIuu9twsAm4CS7EpFhWHYktN23AwzC6Dg6xI%2FVWcGsk%2FTtNgQ0MogQ9lkQDAtLTN%2FuhDjIk5koG10eWRwQdAjRYBLIR9epd5%2B3um%2FS6dx7%2B35U3Vt16tx%2Fqu6pc96P33vqd8%2BtOu85BPuxCFRAYF4%2Fn%2BJ4ONNV3izt0AzycRwRzQBjBgPHEfszfMIMIjqOGDNAmAHguDGRb4HxJhPeZOa3yMFe%2BM5%2BR74DbzHzmyC8ST7vZXJ%2Fs9fFL7Z10e8qmGMvpRwBSrn%2F1n0AF97Np07d753rK2eOw%2F4fENG7ffCZYDrTIZzYTJAY%2BB3AvwDoX5nk6PxcaWfHb2fgJ9v%2FC73RTFusrvghYAkrfjGJ1KL21XyO4%2BgPMvhch%2BhcAHMAzIpUaUjCmfEagP8D4ucA2u6z%2BtFwjn4WkngrJgEIWMJKQJDqNfE%2FfJNnvXVQz3OYLwToAmZ8iAjT65UXy3aMfSD8E3x%2BlhVtPdimtv7wevptLG21RjWMgCWshiGMj4DzvsUnn3RAZx2NLDvcSSAZPaXq4zN8Av8YwCZi2rST1PCOHO1LFQgGO2sJK%2BHB7cjzBWDvcihc7jD9UcLdicR8Zv4hkfOY1s73h5fTc5EosUKbgoAlrKbAHJ6Ss1fx1He26UvIx4dBuBzAO8KTbr4kZvwrgx91GI%2FyLneosII88702x0NLWAmJZTCSIn29A3wMwAkJMTvWZjLjN8z8bZrmDhSupxdibaw1LkDAElaMO8JF9%2FAJ6qB%2FrQP%2FegKdF2NTE28ag7cw0V2vjqj1L9xIBxPvkKEOWMKKYWDb8zzXgV5GhKsATIuhicaa5DP2EHAvjai%2BwZvpeWMdTahjlrBiEjgZTU095P9nH%2F4NxHROTMxKtRkMfpqJ1thRV3y6gSWsFsciczefjUP6UwRcY0dTLQ5GGfWjoy6%2BS7vuys1d9Osy1WxxExCwhNUEkEupGCOqLzJjqUNwStWxZTFDgHGQgbXaVV%2B2xNWa2FjCajLulqiaDHgU6ixxRYFqVTItYVUFU%2BOV2vN8hkP6y2N%2F%2FRoXaCXEAgFm%2FgeP3M9v6aHdsTDIcCMsYUUcYHmY7h7yPuv4dBMIUyNWZ8W3AgHGbhB9aY9yVm%2FropFWmJAWnZawIop0ZgW7fJrf7YD%2FDsDMiNRYsXFCgPGiT%2Fj0UI%2F7UJzMMskWS1gRRDPbN3Kx76DfAb0nAvFWZMwRkEmo2nG7Nn%2BCfhpzUxNnniWsEEMmy7nsP6BXEYIJnyFKtqIShwDDA%2FF%2F36PcFdu66K3E2R9Tgy1hhREYZur8hp%2Fzmb9EwElhiLQyjEHgZQDLB3vcR43xqIWOWMJqEPxsH89h8tYR0R83KMo2NxuBR5lVVyFH%2F2a2m9F6ZwmrXnxXsJM9zf%2B0D77dAabUK8a2Sw8CPvBbYvQUcu6D6fE6XE8tYdWB5%2BjkT%2B8BAp1fR3PbJO0IMP7nm6xu%2BFEv%2FSbtUNTqv00JqQUxZmrP65twUP%2FEklUtwNm6RyFA%2BI%2FTSf80kx%2B57Khy%2B2VSBOwIa1KIRitk1vBMaL2egGyVTWw1i8CkCDCj7%2FVZ6pM7ltKhSSvbCrCEVUUnyPTzn4D1I0R4exXVbRWLQE0IMPO%2F%2BFPc%2FzS8jH5RU8MUVrZ%2FCSsFnZkyffqzBL3FklUloOy1RhAgog%2BoEf3jbL%2F34UbkpKGtHWGVifIH%2B%2Fhtx5F%2BkAgXl6liiy0CoSPgM68ayrXdFLpgQwRawioRyMwafh95%2Bn%2BDcEaJy7bIIhApAj54q4Z7uV0B4liY7V%2FCCZhk%2B7yF5OlnLVlNAMZ%2BbRoCDmiuy%2Fqf5YezaUoTosgS1rhAZfv1Z9jB90E4flyxPbUINB0BIpwpP5zyA9p05TFWaP8SjgUn2%2B99B8DVMY6VNS2lCDDRrYVu9bWUun%2BU26knrGAnZaUfI8IlRyFjv1gEYoQAg79e6Gn7qxiZ1BJTUk1YQlZnuPoJAJmWoG%2BVWgRqQMBnfHOoR10PIq6hmVFVU0tYF67k6dOm6cctWRnVn9PgzEO8U11dWEFeGpyd6GMqH7rPyfPxU6Z5Gy1ZTewO9nsCELgSp%2BlH5d9BAmwN3cTUjbDOvZdnnLrXe4qILgwdTSvQItAkBJh58%2BtwF%2B7I0b4mqYyFmlQR1odW8YnTlfcDu9heCH2PsY%2BB34H4DTkS6HeQ74w34PDosik%2BvQ2EkwGcxOCT4ONkIjopWJXVTh1pOAjM%2FE%2F7tXvpMzfSnoaFJURAaghLUm2mO94mB3RuQmLTOjODjUL5ZSJ6yWe87BC9xOCXoPklV7kvezvxcqPPUGRXIecdmA3fm%2B379C44NJuYZ%2Fs%2BZpOD2QycYRdGnLwLMHj7fs%2FtSAtppYKw%2FnSATzvke1uI6A8m7wKprLELjGENGoZ2hod%2Fix9jBfktRWI9q8xr%2BABcv4OY28GYD8IpLbUppsqFtDy4nWlI5TGesC65h3%2FPO6i3AHh3TPtbK8z6FQPDTDTskzOUiO2omGn%2BAM5xMEpgDLQ7hNNaAV4cdTJ4B5SbKXTRrjjaF5ZNRhPWgjX8Lq31ZgDvCguwBMt5GeAHR%2BA%2BuKWHtiXYj1HTmakjjz8BeVc5oKUg%2FLvE%2B9SgA8z8PFx3nsmkZSxhtef5DEX6GQDvaLAfJLn56wz%2Bjtbu%2F9i8nJ5OsiOT2d45MNKpmT7qMK5M819H%2BXtY6Gn7wGR4JfW6sYSVyY88m9K3gW%2BCcT85%2FMCm7rZNSe2YjdgdJAw7wWa2f9GInMS29fkrg71tn0ms%2FRUMN5KwMnnvOiJ8q4LfJl76NTOt3K%2Bdu9LyxmiyIMqb4RmOn%2FPBNznAqZPVN%2Bj6G4M9rpEvKIwkrGy%2F9z0AqVhulsE%2FZqb%2FNpRzv2vQDRe6K5m893Em%2FmsH9J7QhcdRoK%2F%2BcLCXdsTRtEZschtpHNe2zHwWkZFcPB7yR4n4HwZT%2BrdvPBDVnBdy7j0A7sn2eX%2FGxJ8kovnVtEtqHQLellTbK9ltJGGBYGxiKDMe86E%2BNZyjn1UKrL1WGoHBXldG39%2Bbv4o%2FqFxvJYEuKl0z4aUK%2Fy%2FhHpQ030zCAv1fAOeV9DihhcEra0JvIdcmSdv20yACm2%2BkHwGYlxnwroKPO4lweoMiY9NcUnYGe%2BjV2BgUoiFGrtbgAPeGiFFLRTHjNz5RTyHX9r5CjyWrsINR6HYfwHHqbPbpc8zYH7b8Vshjh77aCr3N0Gnsg56O%2FpGnZTH%2FZoAYlQ5ZZXKvclds6woSi6NSY%2BWOITB%2FDb%2FD9fTfg3BtYkFhfGcw516TWPsnMdxYwjp%2FDR93gqcfTei%2BggXtqBuGP0E%2FnyR%2B9nIECMzr5%2FNdePcQ6P0RiI9OJGP9YM79aHQKWi%2FZyL%2BEAuu2LnrrFa0WMeOp1sNcnQU%2Bw2fmzw%2FuVBdbsqoOsyhqSerSK577IWZ8Iwr5Uchk4IHBWcr4TVSMHWEVO8X5a7jtBE9viPsmE8x4zYX6yMYcSaK2%2FcQEgUy%2Ft5gY%2Fxjnrd%2BErArd6uo0rPVuPGFJvw9IS%2BuHCVgUk%2FvgKDMYGIRSS01OWj3K4YR9yQzwmWDvkVj%2BRWTcO9ijrksDWUm3SQVhiaOyYBxm6fVEWBKb%2B4XhMdFnC93OV9PS4WKDfY2GjI7UvTuI6KYam0ZXnbF2sEd1panvpIawir0m0%2B89QEDLH0wy4RVPq49s6SVZUcJ%2BEoJAZsC7HIz7gmWeW2gzM%2FoKOXd5C01oiWpjH7qXQ7MwU%2F25%2FOcvd70Z5T74J8pVf2zJqhloh6uj0O1%2B33PVBwG8HK7k6qWllawEodSNsIJuwUyZAX0%2FIViCpPqeEkJNeV61V6nL5S1mCOKsiBYhkFnDM6G9Jwh0fjNNSDNZCc7pJCzxnJmy%2FXpdUycJygPSWeovsZR0Mzu51RUNAplv8TTs1w8RcHk0Go6Wysx3FnJttx1dmq5v6SUsifMoaa0BYVn0YafbB3vUF6LXYzU0FQFZqvkb3t87TH8dpV6Zn1fIta2IUkcSZKebsMYilM17d0VFWgyMyCguyFlLQo%2BwNtaFQHveu1YRvglA1SWgQiNmuq2QU3dWqJKaS5awxkKdyY98PYJX1geIeFFalypOzV005mhnfuRPmUiWr5kWnu%2F0ycEetTI8ecmWZAlrXPwyeW81EXrHFdV%2FytinoS4dztHW%2BoXYlklDoD3Pcx3ojUSY3qjtRLR8U7fqa1SOSe0tYU2IZiY%2FIpMDb51QXNtXxj4fqnMoR8%2FW1tDWNgGBMEjLZ9wwlHPXmoBHmD6kbh7WZODJWxh5wDlZvXLXfcYeS1bl0ElHuYyqfagFYOyr1WMG2JJVedTsCKsMNpm8vpWI7yhzuXQxYzdDdRZytL10BVuaJgQ68nyBA72p2sTpMbK6bjjnGrMAZdjxtoRVAdEaSWsXfJUxcaeSChDZS5MgIKQF6I0O4cRKVYWsQLjavk2uhFKaJ45WxuXw1c4B3cvMqw8XlD7ZhUNq3uDN9Hzpy7Y0zQhk8nweQw9VIC3NhGssWU3eS%2BwIa3KM0JH3ljmEu0pVlXWsaER1WLIqhY4tKyJQgbS0T7hyqNt9uFjXHssjYB%2B6l8fm8BV5W0Og7sMFR05%2B5Ss135LVEUDsWWkE5LkmQXXIKh3jarzpM5ZYshqHyCSndoQ1CUDjL49NDPwbBhOBdrpT1c1PfZx%2BNb6OPbcIVELgvG%2FxySfv84It6BzX%2FfmmbjO346qEgb1mEbAIWAQsAhYBi4BFwCJgEbAIWAQsAhaBOhCI5BnWJffw740c8JaDcGFgE9Mb5PDAYHfbk3XYaJskBIHsKn4%2FlL6FiWeLycT0kvbVncPL6bmEuGDNrAOB7MDIpexTN4hPDuLuY6vX5q7e3EW%2FrkNcxSahE1YmP3InEX2ylFYGb%2FMd92N2z71S6CS37Pw1fNIJWq8jYHEZLx7ao9Qyu4N1GXQSWjz%2FG%2FzvHd%2F7rgM6t6QLPn9lsLftMyWv1VkYGmFVu5WW5NoBaoFNDK4zYjFrdvFafrs%2B5A0R0XsrmcbMz6spbscPltFrlerZa8lAoIYZ%2FBv2KrVkWxeNhOFZKPOwzl7FU4PNSqvY909m%2B0p%2B1ajDYbhgZbQKgc4BPt0%2FpLdORlZin9SRukJwrbLX6g0HgbHVKDZVmLl%2FWJHsBSrcIBxxuLCBk4ZHWGLIGa5%2BQrb%2Bq8kOu15UTXDFrXJAVqyfJiB4XlW1fYwXyVHtdv5R1YjFqmIDS%2BcUfumpy164kQ424lBDhHXhSp4%2BbZp%2BvGayGrOYGfvh88LC8rZCI07Yts1FoPNunu0f0kM1k1Ux7sBLzhTVsel6eqm5llttjSCQWT2SgUOPN7A4YeHAAbXwh7fQ%2FnrtqPsv4Zw8Hz9lmrexXrISg8VxcuiJAIh6PbDtmopAQFYH6xhZjbNSiM4%2FqJ8WWeOK7WmMEejoG7lE7tUGyEq8ywhnCHfU62pdI6wPreITp7veRgJdUK%2Fio9oxDvrMVwz1tj11VLn9EisEFvTzWR7rYSKcHoZhzHjVJdW%2BsYdeDEOelRENAmNktYGAtjA0MPjZ%2FZ674JkbaU%2Bt8momrHn9fIoLbxOBgnyoWhWWqy%2B7yxCwZLDH3VCuji1vHQLZr%2FN7uU0PESHUh%2Bay2oVLaq4lrdbFtpLmbL%2B3iIGHwyKroi4Gb9%2FvuR21klZNhDVGVpsJNKeoONQjwwNhsSWtUFFtWJiQFaboLQBmNiyshAC7RE8JUGJQJGQFxiMguFGYI6Tlwe3c0kO7q5Vf9TMs2ZrbhRcdWYnFAgzjkY4Bb0m1Dth60SKQ7eM5UZJVEHYZtU3RWwJd0bpjpVeJQHAPRkhWQdxB5wmnCLdUaRaqIqxg7oznbYlsZDXeWoLrMB6ypDUelNacy6JzIL05qpHVBK9mii5LWhNQacHXzIB3ldyDUY2sxrsUcIrnbal2ft6kfwllvg37ehiEs8YrasK5XTa2CSCXU1FhhcxyTcIptxt5hINjnVKErMC4n5q9fDrjRWeKmjtZJkTFEVZxcmALyErgVgKcbAFeJ%2Fa2WZ0ISBbCJGuQ1ym5imaEU0S3zYSoAquQqwT3WivISvwgnCWZEMI5ldwqS1jBfJt6ZjJX0lbjNWF5h7DOklaNwDVQXYhCUqeqSbtoQE3FpjZ9qyI8kVwc27dAEtgn%2FdcViQEiVEiLK8%2FPK0lYMt9GJvbVO5M5TIeKpCWAhinXyjoWgWKOWLX76B0rIcQSwvFCnGJTiFKtqBIIFDdZaSlZjdlVnFQsHFTC1GMfussrbI8loTWcyYGllNZaNkZad8mWW7W2tfWrQ0CyDRzojbEgq6LJo6S10ZJWEZDwj3JPldsRKnxt1UkU7hEOCqbTTGhy1PAv6vk2E3TX9ZWIlm%2FqVn11NbaNSiIgZCVpFyCEklFfUkkDhTbntAHwKjStcs%2FNChIiv3TMfp%2BH%2FxI2Y75NGO7JpqayI3MYsqwMoJgjFleykhgVc07FVhuzcBCQe6iKDYLDUVa%2FlJkT5%2BcFI6yArJxgJnOwxGn98pvZkv52sEd9uZkaTdOV7fMWwkGiUqEIWLipx%2F1fpsWimf5k%2BvRnyeEvNlNng7re8Bx10eZP0E%2Bd89fwcXD0YwASRFbiPv%2FXzMDIlxoEIrXNs33enyWNrIKoA49n%2B70PpzZwDTqe7Rv5csLISjw%2BWfn6UTlxTvD8vwLw7gZxaElzYvrbTH7kKy1RnmClmbz3ETh4JMEufC%2FT75VbPz7BbkVrekffyNfg0N9EqyUa6QT8frZf3%2BIAfqIDT0Sflo0vooHJPKmZvPdRIjyUdM8IeDjb5y1Nuh%2FNsr9jYGSl49AtzdIXjR6%2BwiGis6MR3jypsktPJu%2Btbp7GZGqStAsifCeZ1pew2sH9QSpJiUu26AgC2bx3l8Mk%2F6SS%2FWG8T94Sesn2YtR6IvRKYMB81FQNE3wLw4di2kWQ8hSGwHjICNK3LGmVCQYzBfcEwYhJ1z7gOMz8szLuJq%2BYsCwzoO9KnuHRWpzJex9XhG%2FHYSZz2J6KT8T4bvuA95dhy066vGy%2FXgtDyEpiQcBzDoiMusEJuL4j792T9M4Wlv3ZvO4hwt1hyYurHMW4J9uvb4irfc22K9vv3QvCx5utN0p9BPSPzsPq92Qt9QVRKmu2bAbuK%2FS4f9FsvXHS19GvlzvgVXGyKWpbNKh3uEflo9YTZ%2FnZvHcfCH8eZxtrtY2B7xd63CuCme67p6srmflfahUS5%2FoEXJPp974bZxujtG30FXC6yErwVOC%2Bzn59c5TYxll2Nu89aBpZ%2BcT%2FvN9TAQEffkAd%2Bk44MYkqMx7G62ppYQUZ8XKhGlgl7YKI76imrql1mOm2Qk6lZrpLZgW7mKXXE8Go5cUn7rBzmLCk48p%2BYbMo2BEnnO27YnI3MLABO9XiNJBWdkB%2FDsxfiAn0LTUjLaR1%2FhpuO0Fr2dlmUUsBD1m5D966i91Ld%2BRoX1H04eRnKZALr7PbKRWLFUw4BoE8TT8igTXBn3I%2BZPIjd1iyOoKOjDIzA%2Fr2IyXmnQVk5WnZM9A4sjp0wF0wnqwkekcRlhRIBakIwKjt4yWgJ3h6w9mrOJZLqDR6KwlZEZFdxWICkMS8IiDyCeUmfJW%2BLH2aCKatYlEQDiq1pf1RfwnHB1HAeKfSj5kIxi89ddkLN9LB8f4m%2BVxm%2BcvE2ST7ELXtzHxnIdd2W9R6miX%2FwpU8fdo0%2Fbhs%2F94snc3Qw4ynXtHqinL3Z1nCEuMODzcNZPADB9TCUgzejKCEqcOSVfVoMqOvkHOXV98injWFrKZM8zY6IKOWjxay2uuqRdu6aKQc8hUJSxqZ%2FECv3LCzHFixKpe0i369xqSZzE3Bl7F2MOcmdoKpvBibSd6TxpEVsGGvUksqkZX0j2OeYU3sNIGAnWpxMD1g4sUEf5eAy6%2BUdIDEuTFKVussWdUROcKypOacFt%2FiG0dWMvVop1o8GVlJtCcdYR3uEutZZXbp%2Bwi46nCZAScT53nE3qUjZGX3a2wkWIx7B3vUdUEmYiNymtTW2HmSwAOFmeoaLCVdDZTVE5ZIY6bMgJZdYU0jre37PbfjmRtpTzWgtayOoT8arcKT5WbpVlfHnbTm9fMpLoL5kee1Cqso9NaDf22EJVYb%2BgvP4O0e3M4tPbQ7iuA0LFPI6nX9kGkzmRvGpUEBwU1Twy98g%2Bpqbj5GVpsJNKfmxnFuUOcIt3bCEhAMfeDL4B1QbqbQRbviFGtT0y7igrE8ny3MUldW%2B7ekWXZn1vBMaK9gIFmtHexRXfWMbOsjrLGImbQ4WLETMvPzcN15cSGtgKxO04%2BYNpO5iHdcjnHLOb14Lb9dH%2FKGiOi9ccEoDDsanVrSEGGJAybOAxLSUlPcjh8so9fCCFK9MkydUlIvHlG3k5zTal6tR22HkJV%2FSG8FoeR27VHrj0p%2Bo2Qldk06rWEy42Uinswinqxekq7Lr5p0GOk4rbL7cNqFYTlircKzGr3F9C35oaimfhR1Ogf4dDPJSjINGp%2B02zBhSdAk5cH3DVshgHCWdBzpQFF0zEoyhazOcPUTBqZFVXI7FtcE81blnHbezbN91k%2BbN7Liz4eVFtXwX8LxvczEdZgYeMmZojo2XU8vjfc1qnNTc8SiwitCuYVm5pwGZHVQP02Epv9ARoihvJ8LdV2yUAlLHDeStBivOlPVRVGTlqlpF1HeEBHLLjQj53RBP5%2FlsR42jayIaPmmbtUXZoxCJywxrnNA9zKzUfsEMuNVl1T7xh56McwAFGUV0y4IZNTiiUX%2FknostYhcmL6MkdVWIrTseWmY%2FhRlRUFWIjsSwhLBHXlvGRHWmLS1FDNec0nNDZu0TE27KHbepB8lfUsWtpy4mFyjfmW%2Fzu%2FlNj1kElmxzNJkdA3l3LWN4lOqfWSEJcpk806HsM400qIR1TF4Mz1fCtBay0xNu6gVh7jXDzvnNNvHc%2BBoWSRzZtx9r9Y%2BISufcd1wzr232ja11gvlLWE5pYHhDKM2uAx%2BDafozZkB%2FsNyfldbfuHdfKpL3hCBjMoR88E%2FYeLnqsUhCfXkr%2Fp05RXkB6ZRe9tX8zm%2Bo4dNIivBJGqyEh2REpYoKOTcdRpm7ZEGYBazHsqu4vfX23kl7WLKIW%2BQmM6pV0Yc2zFj3VBP2%2FsL3W3nAvh2HG2s1yYi%2BoAkITdCWvP7%2BI%2BUo4cc4NR67YhjOyZ8LMqRVdHnSP8SFpXIsWPAW%2BL4WA%2BCO7480eeM3QzVWcjR9lr8CHLEPG%2BLaWkXmJjQam6ifF05px15vgDQGx3CibX0l1jXZXi%2Bg6VD3e7DzbAz8hFW0YnAIcJiMMzZH5BwCkMPjXbEoqeVj8HseTPJShJaj15fioiDMkYkD2ArIx3d1SAZ2fO2BD88VaqRPuJAbzKNrEBY3CyyEqibRliibLDH3SAOMlB2zeYq4x%2BbatIBpSNWQ1rFtAvTRlaSIxYsO0zExwRGSCvn3iB1jrmW4IIghp63pZr0rfY8z5U%2BAkLyVrctE6PgHiYsDu7pMnWiKG4qYYkD4iD7vAgMY3atkY4oHVI6ZrkgBWRlZtpFVTliJuecVkrfGiOrjSaRldy7cg83m6zk3mo6YYnSod62p9jnywwkrY2lSKuYI0bA7HKElsTyWrfOknwy0xLlJe9P8v9KkVZm9UjGgd5IhOlJjG8pm5mxX%2B5duYdLXY%2B6rCWEJU4VlrcVxHEBIGonmyVfOqZ0UOmoRZ0yk9mXHDHDyApEf1dPQutoGzJqN2aJbUBad%2FPhH6SOvpFLyCFJYDeKrHyoBXLvFvt3s49Ne0tYzrH5q%2Fki19FPGDVkBg744JUM51cO8%2BdMmskscQwjoTXbr28D%2BKvl%2BkUiyxn%2F5jv0BdL%2BbHLoU4n0oZzRjH0a6tLhHG0tV6UZ5S0nLHHSyNe9zYheC3SEmSNmYs5pC0ISuUqfsQdQC4Zy9GzkyiZREAvCEhszeT5PpggY9dp3EvCTdDmqHDHJOXUIdyUJi1TZWudcw6gwig1hiYNCWjT6%2Brfh9IeoAEuj3KhzxExMlDeinzB2g9X8wV7aERd%2FYkVYAoqJSaFxCXY9dkRNVkWbTEyUL%2FqW0OMu%2BCoTJ7ISHGNHWGKUictuJLTTaiZcU%2Bh2H2iG%2FZkB7ypi3AdANUOf1VEaAVlGKcwVSUprqa80loQlrpi6sFl9YWpBqybniBU9DHJOGQ9Z0ioi0txjVGu%2BheVFy%2BZhTeaALJIni%2BXJSp%2BT1bXXQ0ZA8j2bnCNW9EDy0nzClUblnBadi%2FlxbFXd0BeoDNPt2I6wik4Gs8QP6SHjJl4WHYzZUXLECFjSirSL8VBk%2B71FDDxMQMu23Bpvj%2Bnnzd5spV48YzvCKjokGz84pC4CI5K11It67FFmhLYuR2wi%2FkbmnE50Mi7fGS%2FKPRb1JithuBv7EVbRSVN3wy361%2BpjkCLl88JWpl2UwkDSnCTFBYSppa7bsgYRELKaoua2epfzar2I%2FQir6IgAKsDKNvLFMnsMCQHGvlbniJXzxMSc03K%2BNrtc7qUkkZXgk5gRVjGYwaJp2isEi6gVC%2B2xfgRGyaozDmkXlZyQVTAU9JOG5ZxWcjnSawyua9XUSI2qQnjiCEt8GttpZrMlrSoiXKFKnHLEKph5%2BJLNOT0MRUMnDN7uwe3c0kO7GxLUgsaJJCzByW6P1WBviVmOWLXe2PStapEqXU%2FIar%2FndjxzI%2B0pXSPepYl5hjURRvl1EOBlv7iJ1%2Bz3SRHYJTlitW6eManUJlQIbGY1H5LnZj81ITC2t2JiyUqcTewIqxgp2eJ9JnlPOqCyyxMX69pjgMAuHFLzwtoItlWY2pzT2pD3wVt3sXtp2LtX12ZF47UTO8Iqui4BOHTAXSABKZbZY2kEJO3CBLIS74Kk3ENqXuBTaXdt6REECnKPJJ2sxJ3Ej7CKMblwJU%2BfNk0%2FLqvUFMvs8QgCY2kX7ZLydKQ0%2BWdjOafDRDg9%2Bd5E4kHhl5667IUbyYhNX4whLAn12at46qA5Wb8AAAVoSURBVDuVfowIl0QS%2BoQKTUraRb3wBulbsm6%2BJa2jIGTGU69odYUpZCXOJf4v4fgISWD2ukpy0DaML0%2F1eYLSLuqNU5C%2BNVVdJMRcrwzT2sk9IPeCSWQlMTKKsMShbV00gp1KNmu1pDWWdrGpm4xf8cLmnB6h3KDv71SLg3vhSLERZ8YRlkSlsIK8gLQYDxsRpTqcSGLaRR1uHtVEiDnt6VssfX6nWhzcA0ehY8YXo55hHROS9awyu%2FR9BFx1zDWDC5KadhFWSIL0Lc%2FbEmwnH5bQBMhh4IHCTHUNlpJOgLl1mWg2YQkkzJTt1%2BtAuLYuhBLWKMlpF2FCnbqcU8a9gz3qOhBxmDjGTZb5hCWIp4S0kp52EfbNkZr0rZSQlfQPI59hHdPxiTj49WGsPeaaIQUmpF2EHYpUpG8x1qZhZFXsG%2BkYYRW9DfY%2B9FYToXdcUeJPTUm7iCoQpqZvMaOvkHOXR4VbHOWmY4Q1DnkJsAR6XFHST41Ju4gqECambzHznWkjK%2BkfqRthFW%2BKTH7kDiK6tfg9iUcTZzJHGQdT0rdGyarttiixiqvs1BKWBCQzoG8n5hVxDU4lu4SsZCaziZMDK%2Fnd6LXkp2%2FR7YM96guN4pDU9qkmLAlaJq9vJeI7khTAIO1CqSWWrOqL2vlruO0ErWULsUX1SWhNK2a6rZBTd7ZGezy0pu4Z1kTYpQMQUWIeXBZnMluymhjJ6r8H2CUsfUv6aNrJSiKc%2BhFWsZt3DuheZl5d%2FB7HYxpmMjcT98wKdjFLryfCkmbqrVWXz7hhKOcaOyWnFjwsYY1DqyPvLSPCGoohkQdk1a2uNn0m87hwNOc0xulbLFOeGV2WrI50BUtYR7AIztrz3rUOYV2sSCtFM5knhKM5X2OYCSFk5TOuG8659zYHhGRosYRVIk6ZAe8qMO6PBWmNzmTusiOrEoEKsyhGpCVkBcLVhW73gTBdNEFW6h%2B6lwpi0FEIVwNoada7THAdzLk3WLIqFaWQy%2BKTvqUtWZWPrR1hlccGHQPeEsfHehDcCtUiuZTmyYGRAFqD0Ey%2BRelbDM93sHSo203tOm6ThcmOsCogFHQcgqxeOlKhWuiXLFmFDmlNAkfTt7ip852CPkZYbMmqcqgsYVXGB4M97gb2WdaJbxJp0e2FXDrTLiYJRVMvBzFg%2FmIzlErfkj4mfa0Z%2BpKsw%2F4lrDJ6HX0jlzhEj4EwtcomNVezM5lrhizyBpFnQjAO%2BsxXDPW2PRW5MwYosIRVQxAzq0cycOhxIkyvoVlVVWUm86ZuZdIqElX5nYRKUZEWM%2FbD54WF5W2FJOAQBxstYdUYhfY8z3WgN4ZJWnYmc41BaEH10DMhGPs01KXDObI7ltcQT0tYNYBVrCqkpaCfBOH4Ylk9RzuTuR7UWtcmtEwIxj4fqnMoR8%2B2zptkaraEVWfcOvJ8AaA3OoQT6xFhZzLXg1rr2zSaCeEz9gBqgSWr%2BmJpCas%2B3IJWmTyfR9CbQDilRjGaCdfYmcw1ohaT6nWTFmM3Q3UWcrQ9Jq4kzgxLWA2GLNvHc0B6c9WkZScHNoh4PJpL%2BhYx7gOgqrRoF3yVGeylHVXWt9VKIGAJqwQotRYFpOVoedMzs2JbhgfCYjvfpiJKiblYQybELhxS8wZvpucT41xMDbUTR0MIjPxqakfN9X3%2BaVlxjN0%2B80JLVmURStwFmZVO4EWjz6VKmy%2B7cEvfsGRVGp9aS%2B0Iq1bEJqnfPqC7iP1bHNB7pCozXiOiVXuUk9%2FWRb%2BbpLm9nEAEZMPWNvJ7wSwr184K4g7%2BGZi%2BVsi59yTQJWty2hBoX8vvnt%2FP56bN77T7KzHvvJtnpx2HqPz%2F%2F6omxnsqyGCHAAAAAElFTkSuQmCC%22%2F%3E%20%20%3C%2Fdefs%3E%3C%2Fsvg%3E\"","/*\n https://github.com/banksean wrapped Makoto Matsumoto and Takuji Nishimura's code in a namespace\n so it's better encapsulated. Now you can have multiple random number generators\n and they won't stomp all over eachother's state.\n\n If you want to use this as a substitute for Math.random(), use the random()\n method like so:\n\n var m = new MersenneTwister();\n var randomNumber = m.random();\n\n You can also call the other genrand_{foo}() methods on the instance.\n\n If you want to use a specific seed in order to get a repeatable random\n sequence, pass an integer into the constructor:\n\n var m = new MersenneTwister(123);\n\n and that will always produce the same random sequence.\n\n Sean McCullough (banksean@gmail.com)\n*/\n\n/*\n A C-program for MT19937, with initialization improved 2002/1/26.\n Coded by Takuji Nishimura and Makoto Matsumoto.\n\n Before using, initialize the state by using init_seed(seed)\n or init_by_array(init_key, key_length).\n\n Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions\n are met:\n\n 1. Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n 3. The names of its contributors may not be used to endorse or promote\n products derived from this software without specific prior written\n permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\n Any feedback is very welcome.\n http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html\n email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space)\n*/\n\nvar MersenneTwister = function(seed) {\n\tif (seed == undefined) {\n\t\tseed = new Date().getTime();\n\t}\n\n\t/* Period parameters */\n\tthis.N = 624;\n\tthis.M = 397;\n\tthis.MATRIX_A = 0x9908b0df; /* constant vector a */\n\tthis.UPPER_MASK = 0x80000000; /* most significant w-r bits */\n\tthis.LOWER_MASK = 0x7fffffff; /* least significant r bits */\n\n\tthis.mt = new Array(this.N); /* the array for the state vector */\n\tthis.mti=this.N+1; /* mti==N+1 means mt[N] is not initialized */\n\n\tif (seed.constructor == Array) {\n\t\tthis.init_by_array(seed, seed.length);\n\t}\n\telse {\n\t\tthis.init_seed(seed);\n\t}\n}\n\n/* initializes mt[N] with a seed */\n/* origin name init_genrand */\nMersenneTwister.prototype.init_seed = function(s) {\n\tthis.mt[0] = s >>> 0;\n\tfor (this.mti=1; this.mti>> 30);\n\t\tthis.mt[this.mti] = (((((s & 0xffff0000) >>> 16) * 1812433253) << 16) + (s & 0x0000ffff) * 1812433253)\n\t\t+ this.mti;\n\t\t/* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */\n\t\t/* In the previous versions, MSBs of the seed affect */\n\t\t/* only MSBs of the array mt[]. */\n\t\t/* 2002/01/09 modified by Makoto Matsumoto */\n\t\tthis.mt[this.mti] >>>= 0;\n\t\t/* for >32 bit machines */\n\t}\n}\n\n/* initialize by an array with array-length */\n/* init_key is the array for initializing keys */\n/* key_length is its length */\n/* slight change for C++, 2004/2/26 */\nMersenneTwister.prototype.init_by_array = function(init_key, key_length) {\n\tvar i, j, k;\n\tthis.init_seed(19650218);\n\ti=1; j=0;\n\tk = (this.N>key_length ? this.N : key_length);\n\tfor (; k; k--) {\n\t\tvar s = this.mt[i-1] ^ (this.mt[i-1] >>> 30)\n\t\tthis.mt[i] = (this.mt[i] ^ (((((s & 0xffff0000) >>> 16) * 1664525) << 16) + ((s & 0x0000ffff) * 1664525)))\n\t\t+ init_key[j] + j; /* non linear */\n\t\tthis.mt[i] >>>= 0; /* for WORDSIZE > 32 machines */\n\t\ti++; j++;\n\t\tif (i>=this.N) { this.mt[0] = this.mt[this.N-1]; i=1; }\n\t\tif (j>=key_length) j=0;\n\t}\n\tfor (k=this.N-1; k; k--) {\n\t\tvar s = this.mt[i-1] ^ (this.mt[i-1] >>> 30);\n\t\tthis.mt[i] = (this.mt[i] ^ (((((s & 0xffff0000) >>> 16) * 1566083941) << 16) + (s & 0x0000ffff) * 1566083941))\n\t\t- i; /* non linear */\n\t\tthis.mt[i] >>>= 0; /* for WORDSIZE > 32 machines */\n\t\ti++;\n\t\tif (i>=this.N) { this.mt[0] = this.mt[this.N-1]; i=1; }\n\t}\n\n\tthis.mt[0] = 0x80000000; /* MSB is 1; assuring non-zero initial array */\n}\n\n/* generates a random number on [0,0xffffffff]-interval */\n/* origin name genrand_int32 */\nMersenneTwister.prototype.random_int = function() {\n\tvar y;\n\tvar mag01 = new Array(0x0, this.MATRIX_A);\n\t/* mag01[x] = x * MATRIX_A for x=0,1 */\n\n\tif (this.mti >= this.N) { /* generate N words at one time */\n\t\tvar kk;\n\n\t\tif (this.mti == this.N+1) /* if init_seed() has not been called, */\n\t\t\tthis.init_seed(5489); /* a default initial seed is used */\n\n\t\tfor (kk=0;kk>> 1) ^ mag01[y & 0x1];\n\t\t}\n\t\tfor (;kk>> 1) ^ mag01[y & 0x1];\n\t\t}\n\t\ty = (this.mt[this.N-1]&this.UPPER_MASK)|(this.mt[0]&this.LOWER_MASK);\n\t\tthis.mt[this.N-1] = this.mt[this.M-1] ^ (y >>> 1) ^ mag01[y & 0x1];\n\n\t\tthis.mti = 0;\n\t}\n\n\ty = this.mt[this.mti++];\n\n\t/* Tempering */\n\ty ^= (y >>> 11);\n\ty ^= (y << 7) & 0x9d2c5680;\n\ty ^= (y << 15) & 0xefc60000;\n\ty ^= (y >>> 18);\n\n\treturn y >>> 0;\n}\n\n/* generates a random number on [0,0x7fffffff]-interval */\n/* origin name genrand_int31 */\nMersenneTwister.prototype.random_int31 = function() {\n\treturn (this.random_int()>>>1);\n}\n\n/* generates a random number on [0,1]-real-interval */\n/* origin name genrand_real1 */\nMersenneTwister.prototype.random_incl = function() {\n\treturn this.random_int()*(1.0/4294967295.0);\n\t/* divided by 2^32-1 */\n}\n\n/* generates a random number on [0,1)-real-interval */\nMersenneTwister.prototype.random = function() {\n\treturn this.random_int()*(1.0/4294967296.0);\n\t/* divided by 2^32 */\n}\n\n/* generates a random number on (0,1)-real-interval */\n/* origin name genrand_real3 */\nMersenneTwister.prototype.random_excl = function() {\n\treturn (this.random_int() + 0.5)*(1.0/4294967296.0);\n\t/* divided by 2^32 */\n}\n\n/* generates a random number on [0,1) with 53-bit resolution*/\n/* origin name genrand_res53 */\nMersenneTwister.prototype.random_long = function() {\n\tvar a=this.random_int()>>>5, b=this.random_int()>>>6;\n\treturn(a*67108864.0+b)*(1.0/9007199254740992.0);\n}\n\n/* These real versions are due to Isaku Wada, 2002/01/09 added */\n\nmodule.exports = MersenneTwister;\n","function newPaper(diameter, color) {\n var container = document.createElement('div')\n container.style.borderRadius = '50px'\n container.style.overflow = 'hidden'\n container.style.padding = '0px'\n container.style.margin = '0px'\n container.style.width = '' + diameter + 'px'\n container.style.height = '' + diameter + 'px'\n container.style.display = 'inline-block'\n container.style.background = color\n return {\n container: container,\n }\n}\n\nmodule.exports = newPaper\n","/* MIT license */\nvar clone = require('clone');\nvar convert = require('color-convert');\nvar string = require('color-string');\n\nvar Color = function (obj) {\n\tif (obj instanceof Color) {\n\t\treturn obj;\n\t}\n\tif (!(this instanceof Color)) {\n\t\treturn new Color(obj);\n\t}\n\n\tthis.values = {\n\t\trgb: [0, 0, 0],\n\t\thsl: [0, 0, 0],\n\t\thsv: [0, 0, 0],\n\t\thwb: [0, 0, 0],\n\t\tcmyk: [0, 0, 0, 0],\n\t\talpha: 1\n\t};\n\n\t// parse Color() argument\n\tvar vals;\n\tif (typeof obj === 'string') {\n\t\tvals = string.getRgba(obj);\n\t\tif (vals) {\n\t\t\tthis.setValues('rgb', vals);\n\t\t} else if (vals = string.getHsla(obj)) {\n\t\t\tthis.setValues('hsl', vals);\n\t\t} else if (vals = string.getHwb(obj)) {\n\t\t\tthis.setValues('hwb', vals);\n\t\t} else {\n\t\t\tthrow new Error('Unable to parse color from string \"' + obj + '\"');\n\t\t}\n\t} else if (typeof obj === 'object') {\n\t\tvals = obj;\n\t\tif (vals.r !== undefined || vals.red !== undefined) {\n\t\t\tthis.setValues('rgb', vals);\n\t\t} else if (vals.l !== undefined || vals.lightness !== undefined) {\n\t\t\tthis.setValues('hsl', vals);\n\t\t} else if (vals.v !== undefined || vals.value !== undefined) {\n\t\t\tthis.setValues('hsv', vals);\n\t\t} else if (vals.w !== undefined || vals.whiteness !== undefined) {\n\t\t\tthis.setValues('hwb', vals);\n\t\t} else if (vals.c !== undefined || vals.cyan !== undefined) {\n\t\t\tthis.setValues('cmyk', vals);\n\t\t} else {\n\t\t\tthrow new Error('Unable to parse color from object ' + JSON.stringify(obj));\n\t\t}\n\t}\n};\n\nColor.prototype = {\n\trgb: function () {\n\t\treturn this.setSpace('rgb', arguments);\n\t},\n\thsl: function () {\n\t\treturn this.setSpace('hsl', arguments);\n\t},\n\thsv: function () {\n\t\treturn this.setSpace('hsv', arguments);\n\t},\n\thwb: function () {\n\t\treturn this.setSpace('hwb', arguments);\n\t},\n\tcmyk: function () {\n\t\treturn this.setSpace('cmyk', arguments);\n\t},\n\n\trgbArray: function () {\n\t\treturn this.values.rgb;\n\t},\n\thslArray: function () {\n\t\treturn this.values.hsl;\n\t},\n\thsvArray: function () {\n\t\treturn this.values.hsv;\n\t},\n\thwbArray: function () {\n\t\tif (this.values.alpha !== 1) {\n\t\t\treturn this.values.hwb.concat([this.values.alpha]);\n\t\t}\n\t\treturn this.values.hwb;\n\t},\n\tcmykArray: function () {\n\t\treturn this.values.cmyk;\n\t},\n\trgbaArray: function () {\n\t\tvar rgb = this.values.rgb;\n\t\treturn rgb.concat([this.values.alpha]);\n\t},\n\trgbaArrayNormalized: function () {\n\t\tvar rgb = this.values.rgb;\n\t\tvar glRgba = [];\n\t\tfor (var i = 0; i < 3; i++) {\n\t\t\tglRgba[i] = rgb[i] / 255;\n\t\t}\n\t\tglRgba.push(this.values.alpha);\n\t\treturn glRgba;\n\t},\n\thslaArray: function () {\n\t\tvar hsl = this.values.hsl;\n\t\treturn hsl.concat([this.values.alpha]);\n\t},\n\talpha: function (val) {\n\t\tif (val === undefined) {\n\t\t\treturn this.values.alpha;\n\t\t}\n\t\tthis.setValues('alpha', val);\n\t\treturn this;\n\t},\n\n\tred: function (val) {\n\t\treturn this.setChannel('rgb', 0, val);\n\t},\n\tgreen: function (val) {\n\t\treturn this.setChannel('rgb', 1, val);\n\t},\n\tblue: function (val) {\n\t\treturn this.setChannel('rgb', 2, val);\n\t},\n\thue: function (val) {\n\t\tif (val) {\n\t\t\tval %= 360;\n\t\t\tval = val < 0 ? 360 + val : val;\n\t\t}\n\t\treturn this.setChannel('hsl', 0, val);\n\t},\n\tsaturation: function (val) {\n\t\treturn this.setChannel('hsl', 1, val);\n\t},\n\tlightness: function (val) {\n\t\treturn this.setChannel('hsl', 2, val);\n\t},\n\tsaturationv: function (val) {\n\t\treturn this.setChannel('hsv', 1, val);\n\t},\n\twhiteness: function (val) {\n\t\treturn this.setChannel('hwb', 1, val);\n\t},\n\tblackness: function (val) {\n\t\treturn this.setChannel('hwb', 2, val);\n\t},\n\tvalue: function (val) {\n\t\treturn this.setChannel('hsv', 2, val);\n\t},\n\tcyan: function (val) {\n\t\treturn this.setChannel('cmyk', 0, val);\n\t},\n\tmagenta: function (val) {\n\t\treturn this.setChannel('cmyk', 1, val);\n\t},\n\tyellow: function (val) {\n\t\treturn this.setChannel('cmyk', 2, val);\n\t},\n\tblack: function (val) {\n\t\treturn this.setChannel('cmyk', 3, val);\n\t},\n\n\thexString: function () {\n\t\treturn string.hexString(this.values.rgb);\n\t},\n\trgbString: function () {\n\t\treturn string.rgbString(this.values.rgb, this.values.alpha);\n\t},\n\trgbaString: function () {\n\t\treturn string.rgbaString(this.values.rgb, this.values.alpha);\n\t},\n\tpercentString: function () {\n\t\treturn string.percentString(this.values.rgb, this.values.alpha);\n\t},\n\thslString: function () {\n\t\treturn string.hslString(this.values.hsl, this.values.alpha);\n\t},\n\thslaString: function () {\n\t\treturn string.hslaString(this.values.hsl, this.values.alpha);\n\t},\n\thwbString: function () {\n\t\treturn string.hwbString(this.values.hwb, this.values.alpha);\n\t},\n\tkeyword: function () {\n\t\treturn string.keyword(this.values.rgb, this.values.alpha);\n\t},\n\n\trgbNumber: function () {\n\t\treturn (this.values.rgb[0] << 16) | (this.values.rgb[1] << 8) | this.values.rgb[2];\n\t},\n\n\tluminosity: function () {\n\t\t// http://www.w3.org/TR/WCAG20/#relativeluminancedef\n\t\tvar rgb = this.values.rgb;\n\t\tvar lum = [];\n\t\tfor (var i = 0; i < rgb.length; i++) {\n\t\t\tvar chan = rgb[i] / 255;\n\t\t\tlum[i] = (chan <= 0.03928) ? chan / 12.92 : Math.pow(((chan + 0.055) / 1.055), 2.4);\n\t\t}\n\t\treturn 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2];\n\t},\n\n\tcontrast: function (color2) {\n\t\t// http://www.w3.org/TR/WCAG20/#contrast-ratiodef\n\t\tvar lum1 = this.luminosity();\n\t\tvar lum2 = color2.luminosity();\n\t\tif (lum1 > lum2) {\n\t\t\treturn (lum1 + 0.05) / (lum2 + 0.05);\n\t\t}\n\t\treturn (lum2 + 0.05) / (lum1 + 0.05);\n\t},\n\n\tlevel: function (color2) {\n\t\tvar contrastRatio = this.contrast(color2);\n\t\tif (contrastRatio >= 7.1) {\n\t\t\treturn 'AAA';\n\t\t}\n\n\t\treturn (contrastRatio >= 4.5) ? 'AA' : '';\n\t},\n\n\tdark: function () {\n\t\t// YIQ equation from http://24ways.org/2010/calculating-color-contrast\n\t\tvar rgb = this.values.rgb;\n\t\tvar yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000;\n\t\treturn yiq < 128;\n\t},\n\n\tlight: function () {\n\t\treturn !this.dark();\n\t},\n\n\tnegate: function () {\n\t\tvar rgb = [];\n\t\tfor (var i = 0; i < 3; i++) {\n\t\t\trgb[i] = 255 - this.values.rgb[i];\n\t\t}\n\t\tthis.setValues('rgb', rgb);\n\t\treturn this;\n\t},\n\n\tlighten: function (ratio) {\n\t\tthis.values.hsl[2] += this.values.hsl[2] * ratio;\n\t\tthis.setValues('hsl', this.values.hsl);\n\t\treturn this;\n\t},\n\n\tdarken: function (ratio) {\n\t\tthis.values.hsl[2] -= this.values.hsl[2] * ratio;\n\t\tthis.setValues('hsl', this.values.hsl);\n\t\treturn this;\n\t},\n\n\tsaturate: function (ratio) {\n\t\tthis.values.hsl[1] += this.values.hsl[1] * ratio;\n\t\tthis.setValues('hsl', this.values.hsl);\n\t\treturn this;\n\t},\n\n\tdesaturate: function (ratio) {\n\t\tthis.values.hsl[1] -= this.values.hsl[1] * ratio;\n\t\tthis.setValues('hsl', this.values.hsl);\n\t\treturn this;\n\t},\n\n\twhiten: function (ratio) {\n\t\tthis.values.hwb[1] += this.values.hwb[1] * ratio;\n\t\tthis.setValues('hwb', this.values.hwb);\n\t\treturn this;\n\t},\n\n\tblacken: function (ratio) {\n\t\tthis.values.hwb[2] += this.values.hwb[2] * ratio;\n\t\tthis.setValues('hwb', this.values.hwb);\n\t\treturn this;\n\t},\n\n\tgreyscale: function () {\n\t\tvar rgb = this.values.rgb;\n\t\t// http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale\n\t\tvar val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11;\n\t\tthis.setValues('rgb', [val, val, val]);\n\t\treturn this;\n\t},\n\n\tclearer: function (ratio) {\n\t\tthis.setValues('alpha', this.values.alpha - (this.values.alpha * ratio));\n\t\treturn this;\n\t},\n\n\topaquer: function (ratio) {\n\t\tthis.setValues('alpha', this.values.alpha + (this.values.alpha * ratio));\n\t\treturn this;\n\t},\n\n\trotate: function (degrees) {\n\t\tvar hue = this.values.hsl[0];\n\t\thue = (hue + degrees) % 360;\n\t\thue = hue < 0 ? 360 + hue : hue;\n\t\tthis.values.hsl[0] = hue;\n\t\tthis.setValues('hsl', this.values.hsl);\n\t\treturn this;\n\t},\n\n\t/**\n\t * Ported from sass implementation in C\n\t * https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209\n\t */\n\tmix: function (mixinColor, weight) {\n\t\tvar color1 = this;\n\t\tvar color2 = mixinColor;\n\t\tvar p = weight === undefined ? 0.5 : weight;\n\n\t\tvar w = 2 * p - 1;\n\t\tvar a = color1.alpha() - color2.alpha();\n\n\t\tvar w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n\t\tvar w2 = 1 - w1;\n\n\t\treturn this\n\t\t\t.rgb(\n\t\t\t\tw1 * color1.red() + w2 * color2.red(),\n\t\t\t\tw1 * color1.green() + w2 * color2.green(),\n\t\t\t\tw1 * color1.blue() + w2 * color2.blue()\n\t\t\t)\n\t\t\t.alpha(color1.alpha() * p + color2.alpha() * (1 - p));\n\t},\n\n\ttoJSON: function () {\n\t\treturn this.rgb();\n\t},\n\n\tclone: function () {\n\t\tvar col = new Color();\n\t\tcol.values = clone(this.values);\n\t\treturn col;\n\t}\n};\n\nColor.prototype.getValues = function (space) {\n\tvar vals = {};\n\n\tfor (var i = 0; i < space.length; i++) {\n\t\tvals[space.charAt(i)] = this.values[space][i];\n\t}\n\n\tif (this.values.alpha !== 1) {\n\t\tvals.a = this.values.alpha;\n\t}\n\n\t// {r: 255, g: 255, b: 255, a: 0.4}\n\treturn vals;\n};\n\nColor.prototype.setValues = function (space, vals) {\n\tvar spaces = {\n\t\trgb: ['red', 'green', 'blue'],\n\t\thsl: ['hue', 'saturation', 'lightness'],\n\t\thsv: ['hue', 'saturation', 'value'],\n\t\thwb: ['hue', 'whiteness', 'blackness'],\n\t\tcmyk: ['cyan', 'magenta', 'yellow', 'black']\n\t};\n\n\tvar maxes = {\n\t\trgb: [255, 255, 255],\n\t\thsl: [360, 100, 100],\n\t\thsv: [360, 100, 100],\n\t\thwb: [360, 100, 100],\n\t\tcmyk: [100, 100, 100, 100]\n\t};\n\n\tvar i;\n\tvar alpha = 1;\n\tif (space === 'alpha') {\n\t\talpha = vals;\n\t} else if (vals.length) {\n\t\t// [10, 10, 10]\n\t\tthis.values[space] = vals.slice(0, space.length);\n\t\talpha = vals[space.length];\n\t} else if (vals[space.charAt(0)] !== undefined) {\n\t\t// {r: 10, g: 10, b: 10}\n\t\tfor (i = 0; i < space.length; i++) {\n\t\t\tthis.values[space][i] = vals[space.charAt(i)];\n\t\t}\n\n\t\talpha = vals.a;\n\t} else if (vals[spaces[space][0]] !== undefined) {\n\t\t// {red: 10, green: 10, blue: 10}\n\t\tvar chans = spaces[space];\n\n\t\tfor (i = 0; i < space.length; i++) {\n\t\t\tthis.values[space][i] = vals[chans[i]];\n\t\t}\n\n\t\talpha = vals.alpha;\n\t}\n\n\tthis.values.alpha = Math.max(0, Math.min(1, (alpha === undefined ? this.values.alpha : alpha)));\n\n\tif (space === 'alpha') {\n\t\treturn false;\n\t}\n\n\tvar capped;\n\n\t// cap values of the space prior converting all values\n\tfor (i = 0; i < space.length; i++) {\n\t\tcapped = Math.max(0, Math.min(maxes[space][i], this.values[space][i]));\n\t\tthis.values[space][i] = Math.round(capped);\n\t}\n\n\t// convert to all the other color spaces\n\tfor (var sname in spaces) {\n\t\tif (sname !== space) {\n\t\t\tthis.values[sname] = convert[space][sname](this.values[space]);\n\t\t}\n\n\t\t// cap values\n\t\tfor (i = 0; i < sname.length; i++) {\n\t\t\tcapped = Math.max(0, Math.min(maxes[sname][i], this.values[sname][i]));\n\t\t\tthis.values[sname][i] = Math.round(capped);\n\t\t}\n\t}\n\n\treturn true;\n};\n\nColor.prototype.setSpace = function (space, args) {\n\tvar vals = args[0];\n\n\tif (vals === undefined) {\n\t\t// color.rgb()\n\t\treturn this.getValues(space);\n\t}\n\n\t// color.rgb(10, 10, 10)\n\tif (typeof vals === 'number') {\n\t\tvals = Array.prototype.slice.call(args);\n\t}\n\n\tthis.setValues(space, vals);\n\treturn this;\n};\n\nColor.prototype.setChannel = function (space, index, val) {\n\tif (val === undefined) {\n\t\t// color.red()\n\t\treturn this.values[space][index];\n\t} else if (val === this.values[space][index]) {\n\t\t// color.red(color.red())\n\t\treturn this;\n\t}\n\n\t// color.red(100)\n\tthis.values[space][index] = val;\n\tthis.setValues(space, this.values[space]);\n\n\treturn this;\n};\n\nmodule.exports = Color;\n","module.exports = [\n\t'#01888C', // teal\n '#FC7500', // bright orange\n '#034F5D', // dark teal\n '#F73F01', // orangered\n '#FC1960', // magenta\n '#C7144C', // raspberry\n '#F3C100', // goldenrod\n '#1598F2', // lightning blue\n '#2465E1', // sail blue\n '#F19E02', // gold\n]\n","var MersenneTwister = require('mersenne-twister');\nvar paperGen = require('./paper')\nvar Color = require('color')\nvar colors = require('./colors')\nvar shapeCount = 4\nvar svgns = 'http://www.w3.org/2000/svg'\n\nmodule.exports = generateIdenticon\n\nvar generator\nfunction generateIdenticon(diameter, seed) {\n generator = new MersenneTwister(seed);\n var remainingColors = hueShift(colors.slice(), generator)\n\n var elements = paperGen(diameter, genColor(remainingColors))\n var container = elements.container\n\n var svg = document.createElementNS(svgns, 'svg')\n svg.setAttributeNS(null, 'x', '0')\n svg.setAttributeNS(null, 'y', '0')\n svg.setAttributeNS(null, 'width', diameter)\n svg.setAttributeNS(null, 'height', diameter)\n\n container.appendChild(svg)\n\n for(var i = 0; i < shapeCount - 1; i++) {\n genShape(remainingColors, diameter, i, shapeCount - 1, svg)\n }\n\n return container\n}\n\nfunction genShape(remainingColors, diameter, i, total, svg) {\n var center = diameter / 2\n\n var shape = document.createElementNS(svgns, 'rect')\n shape.setAttributeNS(null, 'x', '0')\n shape.setAttributeNS(null, 'y', '0')\n shape.setAttributeNS(null, 'width', diameter)\n shape.setAttributeNS(null, 'height', diameter)\n\n var firstRot = generator.random()\n var angle = Math.PI * 2 * firstRot\n var velocity = diameter / total * generator.random() + (i * diameter / total)\n\n var tx = (Math.cos(angle) * velocity)\n var ty = (Math.sin(angle) * velocity)\n\n var translate = 'translate(' + tx + ' ' + ty + ')'\n\n // Third random is a shape rotation on top of all of that.\n var secondRot = generator.random()\n var rot = (firstRot * 360) + secondRot * 180\n var rotate = 'rotate(' + rot.toFixed(1) + ' ' + center + ' ' + center + ')'\n var transform = translate + ' ' + rotate\n shape.setAttributeNS(null, 'transform', transform)\n var fill = genColor(remainingColors)\n shape.setAttributeNS(null, 'fill', fill)\n\n svg.appendChild(shape)\n}\n\nfunction genColor(colors) {\n var rand = generator.random()\n var idx = Math.floor(colors.length * generator.random())\n var color = colors.splice(idx,1)[0]\n return color\n}\n\nvar wobble = 30\nfunction hueShift(colors, generator) {\n var amount = (generator.random() * 30) - (wobble / 2)\n return colors.map(function(hex) {\n var color = Color(hex)\n color.rotate(amount)\n return color.hexString()\n })\n}\n","export default \"f89237c6bc3f84db.png\"","export default \"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2020%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20class%3D%22feather%20feather-x%22%3E%3Cline%20x1%3D%2218%22%20y1%3D%226%22%20x2%3D%226%22%20y2%3D%2218%22%3E%3C%2Fline%3E%3Cline%20x1%3D%226%22%20y1%3D%226%22%20x2%3D%2218%22%20y2%3D%2218%22%3E%3C%2Fline%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2218%22%20height%3D%2218%22%20viewBox%3D%220%200%2018%2018%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M9.79261%2016.1108L17.5398%208.36364L9.79261%200.616477L8.25852%202.15057L13.3807%207.25568H0V9.47159H13.3807L8.25852%2014.5852L9.79261%2016.1108Z%22%20fill%3D%22%23333639%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEYAAAA3CAYAAACxUDzgAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAaGVYSWZNTQAqAAAACAAEAQYAAwAAAAEAAgAAARIAAwAAAAEAAQAAASgAAwAAAAEAAgAAh2kABAAAAAEAAAA+AAAAAAADoAEAAwAAAAEAAQAAoAIABAAAAAEAAABGoAMABAAAAAEAAAA3AAAAAChoTFwAAALiaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA2LjAuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjE8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlBob3RvbWV0cmljSW50ZXJwcmV0YXRpb24+MjwvdGlmZjpQaG90b21ldHJpY0ludGVycHJldGF0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NzA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjU1PC9leGlmOlBpeGVsWURpbWVuc2lv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\"","export default \"055f83ffb7252729.svg\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M10.0047%209.26921H10.2714C11.0078%209.26921%2011.6047%209.86617%2011.6047%2010.6025V12.1359C11.6047%2012.7987%2012.142%2013.3359%2012.8047%2013.3359C13.4675%2013.3359%2014.0047%2012.7995%2014.0047%2012.1367V5.22059C14.0047%204.86697%2013.7758%204.56227%2013.5258%204.31223L10.6714%201.33594M4.00472%202.00254H8.00472C8.7411%202.00254%209.33805%202.59949%209.33805%203.33587V14.0015H2.67139V3.33587C2.67139%202.59949%203.26834%202.00254%204.00472%202.00254ZM14.0047%205.33587C14.0047%206.07225%2013.4078%206.66921%2012.6714%206.66921C11.935%206.66921%2011.3381%206.07225%2011.3381%205.33587C11.3381%204.59949%2011.935%204.00254%2012.6714%204.00254C13.4078%204.00254%2014.0047%204.59949%2014.0047%205.33587Z%22%20stroke%3D%22white%22%2F%3E%3Cline%20x1%3D%224%22%20y1%3D%229.99414%22%20x2%3D%228%22%20y2%3D%229.99414%22%20stroke%3D%22white%22%2F%3E%3Cline%20x1%3D%224%22%20y1%3D%2211.9941%22%20x2%3D%228%22%20y2%3D%2211.9941%22%20stroke%3D%22white%22%2F%3E%3Cpath%20d%3D%22M4%208.16113H8%22%20stroke%3D%22white%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%221024%22%20height%3D%221024%22%20viewBox%3D%220%200%201024%201024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Ccircle%20cx%3D%22512%22%20cy%3D%22512%22%20r%3D%22512%22%20fill%3D%22%238247E5%22%2F%3E%3Cpath%20d%3D%22M681.469%20402.456C669.189%20395.312%20653.224%20395.312%20639.716%20402.456L543.928%20457.228L478.842%20492.949L383.055%20547.721C370.774%20554.865%20354.81%20554.865%20341.301%20547.721L265.162%20504.856C252.882%20497.712%20244.286%20484.614%20244.286%20470.325V385.786C244.286%20371.498%20251.654%20358.4%20265.162%20351.256L340.073%20309.581C352.353%20302.437%20368.318%20302.437%20381.827%20309.581L456.737%20351.256C469.018%20358.4%20477.614%20371.498%20477.614%20385.786V440.558L542.7%20403.646V348.874C542.7%20334.586%20535.332%20321.488%20521.824%20314.344L383.055%20235.758C370.774%20228.614%20354.81%20228.614%20341.301%20235.758L200.076%20314.344C186.567%20321.488%20179.199%20334.586%20179.199%20348.874V507.237C179.199%20521.525%20186.567%20534.623%20200.076%20541.767L341.301%20620.353C353.582%20627.498%20369.546%20627.498%20383.055%20620.353L478.842%20566.772L543.928%20529.86L639.716%20476.279C651.996%20469.135%20667.961%20469.135%20681.469%20476.279L756.38%20517.953C768.66%20525.098%20777.257%20538.195%20777.257%20552.484V637.023C777.257%20651.312%20769.888%20664.409%20756.38%20671.553L681.469%20714.419C669.189%20721.563%20653.224%20721.563%20639.716%20714.419L564.805%20672.744C552.525%20665.6%20543.928%20652.502%20543.928%20638.214V583.442L478.842%20620.353V675.125C478.842%20689.414%20486.21%20702.512%20499.719%20709.656L640.944%20788.242C653.224%20795.386%20669.189%20795.386%20682.697%20788.242L823.922%20709.656C836.203%20702.512%20844.799%20689.414%20844.799%20675.125V516.763C844.799%20502.474%20837.431%20489.377%20823.922%20482.232L681.469%20402.456Z%22%20fill%3D%22white%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%22100%25%22%20height%3D%2235%22%20%20viewBox%3D%22800%200%20300%20200%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%20%20%20%20%3Cline%20x1%3D%220%22%20x2%3D%222000%22%20y1%3D%22100%22%20y2%3D%22100%22%20stroke%3D%22currentColor%22%20stroke-width%3D%2220%22%20stroke-linecap%3D%22round%22%20stroke-dasharray%3D%221%2C%2045%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2223%22%20height%3D%2220%22%20viewBox%3D%220%200%2023%2020%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cdefs%3E%20%3ClinearGradient%20id%3D%22gradient1%22%20x1%3D%220%22%20y1%3D%220%22%20x2%3D%221%22%20y2%3D%220%22%20gradientTransform%3D%22rotate%2895%29%22%3E%20%20%20%20%3Cstop%20id%3D%22stop1%22%20offset%3D%220%22%20stop-color%3D%22%232274E2%22%2F%3E%20%20%20%20%3Cstop%20id%3D%22stop1%22%20offset%3D%220.5%22%20stop-color%3D%22%232274E2%22%2F%3E%20%20%20%20%3Cstop%20id%3D%22stop2%22%20offset%3D%221%22%20stop-color%3D%22%233FB672%22%20%2F%3E%20%20%3C%2FlinearGradient%3E%20%20%3C%2Fdefs%3E%3Cpath%20d%3D%22M16%2016C10%2016%209%2010%205%2010M16%2016C16%2017.6569%2017.3431%2019%2019%2019C20.6569%2019%2022%2017.6569%2022%2016C22%2014.3431%2020.6569%2013%2019%2013C17.3431%2013%2016%2014.3431%2016%2016ZM5%2010C9%2010%2010%204%2016%204M5%2010H1.5M16%204C16%205.65685%2017.3431%207%2019%207C20.6569%207%2022%205.65685%2022%204C22%202.34315%2020.6569%201%2019%201C17.3431%201%2016%202.34315%2016%204Z%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20stroke%3D%22url%28%23gradient1%29%22%20%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2022%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M19%2018C19%2018.5523%2018.5523%2019%2018%2019V21C19.6569%2021%2021%2019.6569%2021%2018H19ZM18%2019C17.4477%2019%2017%2018.5523%2017%2018H15C15%2019.6569%2016.3431%2021%2018%2021V19ZM17%2018C17%2017.4477%2017.4477%2017%2018%2017V15C16.3431%2015%2015%2016.3431%2015%2018H17ZM18%2017C18.5523%2017%2019%2017.4477%2019%2018H21C21%2016.3431%2019.6569%2015%2018%2015V17ZM8%207H16V5H8V7ZM16%2011H8V13H16V11ZM8%2019H16V17H8V19ZM4%2015C4%2017.2091%205.79086%2019%208%2019V17C6.89543%2017%206%2016.1046%206%2015H4ZM8%2011C5.79086%2011%204%2012.7909%204%2015H6C6%2013.8954%206.89543%2013%208%2013V11ZM18%209C18%2010.1046%2017.1046%2011%2016%2011V13C18.2091%2013%2020%2011.2091%2020%209H18ZM16%207C17.1046%207%2018%207.89543%2018%209H20C20%206.79086%2018.2091%205%2016%205V7ZM7%206C7%206.55228%206.55228%207%206%207V9C7.65685%209%209%207.65685%209%206H7ZM6%207C5.44772%207%205%206.55228%205%206H3C3%207.65685%204.34315%209%206%209V7ZM5%206C5%205.44772%205.44772%205%206%205V3C4.34315%203%203%204.34315%203%206H5ZM6%205C6.55228%205%207%205.44772%207%206H9C9%204.34315%207.65685%203%206%203V5Z%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%227%22%20viewBox%3D%220%200%2012%207%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%20%20%20%20%3Cpath%20d%3D%22M0.97168%201L6.20532%206L11.439%201%22%20stroke%3D%22%23AEAEAE%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%22225%22%20height%3D%22225%22%20viewBox%3D%220%200%20225%20225%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M74.8125%20190.529C65.7561%20190.513%2055.5298%20183.748%2051.9715%20175.42L19.9417%20100.456C16.3834%2092.1277%2020.8404%2085.39%2029.8968%2085.4068L111.417%2085.5579C120.473%2085.5747%20130.699%2092.3395%20134.258%20100.668L166.288%20175.632C169.846%20183.96%20165.389%20190.697%20156.332%20190.681L74.8125%20190.529Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint0_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint1_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint2_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint3_radial%29%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M92.958%20165.95C82.7695%20165.931%2071.265%20158.321%2067.2619%20148.952L26.2489%2052.9632C22.2458%2043.5941%2027.26%2036.0143%2037.4485%2036.0332L141.832%2036.2266C152.02%2036.2455%20163.525%2043.8559%20167.528%2053.225L208.541%20149.214C212.544%20158.583%20207.53%20166.163%20197.341%20166.144L92.958%20165.95ZM71.3614%20148.959C74.475%20156.246%2083.4229%20162.166%2091.3473%20162.18L195.73%20162.374C203.655%20162.388%20207.555%20156.493%20204.441%20149.206L163.428%2053.2174C160.315%2045.9304%20151.367%2040.0111%20143.442%2039.9964L39.0592%2039.803C31.1349%2039.7883%2027.2349%2045.6837%2030.3485%2052.9708L71.3614%20148.959Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M68.565%2053.3425C81.1781%2053.3659%2095.4205%2062.7875%20100.376%2074.3862C105.332%2085.985%2099.1246%2095.3687%2086.5115%2095.3454C73.8984%2095.322%2059.6559%2085.9004%2054.7001%2074.3016C49.7443%2062.7028%2055.9518%2053.3191%2068.565%2053.3425Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M90.6891%20104.981C103.302%20105.004%20117.545%20114.425%20122.5%20126.024C127.456%20137.623%20121.249%20147.007%20108.636%20146.983C96.0225%20146.96%2081.7801%20137.538%2076.8243%20125.94C71.8685%20114.341%2078.076%20104.957%2090.6891%20104.981Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M147.538%20105.142C160.151%20105.166%20174.394%20114.587%20179.349%20126.186C184.305%20137.785%20178.098%20147.168%20165.485%20147.145C152.871%20147.122%20138.629%20137.7%20133.673%20126.101C128.717%20114.503%20134.925%20105.119%20147.538%20105.142Z%22%20fill%3D%22%23131313%22%2F%3E%3Cdefs%3E%3CradialGradient%20id%3D%22paint0_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%28134.41%2068.3006%29%20rotate%28-33.9533%29%20scale%2890.6795%2083.3208%29%22%3E%3Cstop%20offset%3D%220.661458%22%20stop-color%3D%22%23C4FCF8%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint1_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%2842.7873%20129.218%29%20rotate%28-24.1606%29%20scale%28213.359%20196.045%29%22%3E%3Cstop%20stop-color%3D%22%23FF0099%22%20stop-opacity%3D%220.9%22%2F%3E%3Cstop%20offset%3D%220.770833%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint2_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%28176.854%20148.655%29%20rotate%28-53.4908%29%20scale%28107.342%2098.6309%29%22%3E%3Cstop%20stop-color%3D%22%23FFEC43%22%2F%3E%3Cstop%20offset%3D%220.805707%22%20stop-color%3D%22%23FFF6A8%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint3_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%2857.5443%2053.4752%29%20rotate%2820.3896%29%20scale%28137.027%20125.907%29%22%3E%3Cstop%20offset%3D%220.125%22%20stop-color%3D%22%235886FE%22%20stop-opacity%3D%220.46%22%2F%3E%3Cstop%20offset%3D%220.673044%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3C%2Fdefs%3E%3C%2Fsvg%3E\"","module.exports=function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,\"a\",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p=\"\",r(r.s=3)}([function(e,t){e.exports=function(e){return e&&e.__esModule?e:{default:e}}},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}},function(e,t,r){\"use strict\";function n(){return Math.floor(9e4*Math.random())+1e4}Object.defineProperty(t,\"__esModule\",{value:!0}),t.sendAsyncWrapper=function(e,t){var r=this;return new Promise(function(o,a){r.sendAsync({jsonrpc:\"2.0\",id:n(),method:e,params:t||[]},function(e,t){e?a(e):o(t.result)})})},t.sendFortmaticAsyncWrapper=function(e){var t=this;return new Promise(function(r,n){t.getProvider().sendFortmaticAsync(e,function(e,t){e?n(e):r(t?t.result:{})})})},t.randomId=n,t.findExistingResponse=function(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},t=new v(m);return t.params=[e],i.sendFortmaticAsyncWrapper.call(g,t)}};var v=function e(t,r){(0,o.default)(this,e),this.id=(0,i.randomId)(),this.method=t,this.params=r?[r]:[{}]}},function(e,t,r){\"use strict\";var n=r(0);Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var o=n(r(6)),a=n(r(9)),i=n(r(1)),s=n(r(10)),c=r(11),u=n(r(12)),l=r(2),f=function(){function e(t,r){if((0,i.default)(this,e),this.fortmaticClient=t,this.requests={},this.queue=[],this.account=null,this.network=null,this.isFortmatic=!0,this.overlayReady=!1,this.isLoggedIn=!1,this.postMessages={FORTMATIC_HANDLE_BATCH_REQUEST:\"FORTMATIC_HANDLE_BATCH_REQUEST\",FORTMATIC_HANDLE_REQUEST:\"FORTMATIC_HANDLE_REQUEST\",FORTMATIC_HANDLE_FORTMATIC_REQUEST:\"FORTMATIC_HANDLE_FORTMATIC_REQUEST\",FORTMATIC_HANDLE_RESPONSE:\"FORTMATIC_HANDLE_RESPONSE\",FORTMATIC_OVERLAY_READY:\"FORTMATIC_OVERLAY_READY\",FORTMATIC_SHOW_OVERLAY:\"FORTMATIC_SHOW_OVERLAY\",FORTMATIC_HIDE_OVERLAY:\"FORTMATIC_HIDE_OVERLAY\",FORTMATIC_USER_DENIED:\"FORTMATIC_USER_DENIED\",FORTMATIC_USER_LOGOUT:\"FORTMATIC_USER_LOGOUT\",FORTMATIC_UNAUTHORIZED_API_KEY:\"FORTMATIC_UNAUTHORIZED_API_KEY\"},!r.API_KEY)throw new Error(\"Please provide a Fortmatic API key that you acquired from the developer dashboard.\");this.options={API_KEY:r.API_KEY,ETH_NETWORK:r.ETH_NETWORK,DOMAIN_ORIGIN:window.location?window.location.origin:\"\",version:c.version},this.queryParams=btoa(JSON.stringify(this.options)),this.constructPostMessage(),this.overlay=this.createOverlay(),this.listenMessage()}return(0,s.default)(e,[{key:\"constructPostMessage\",value:function(){var e=this;Object.keys(this.postMessages).map(function(t){e.postMessages[t]+=\"-\".concat(e.queryParams)})}},{key:\"createOverlay\",value:function(){var e=this;return new Promise(function(t,r){var n=function(){if(function(){var t=!0,r=!1,n=void 0;try{for(var o,a=document.getElementsByClassName(\"fortmatic-iframe\")[Symbol.iterator]();!(t=(o=a.next()).done);t=!0)if(o.value.src.includes(e.queryParams))return!1}catch(e){r=!0,n=e}finally{try{t||null==a.return||a.return()}finally{if(r)throw n}}return!0}()){var r=document.createElement(\"style\");r.innerHTML=u.default.css,r.type=\"text/css\",document.head.appendChild(r);var n=document.createElement(\"iframe\");n.className=\"fortmatic-iframe\",n.src=\"\".concat(e.fortmaticClient,\"/send?params=\").concat(e.queryParams),document.body.appendChild(n);var o=document.createElement(\"img\");o.src=\"https://static.fortmatic.com/assets/trans.gif\",document.body.appendChild(o),t({iframe:n})}else console.error(\"Fortmatic: Duplicate instances found.\")};[\"loaded\",\"interactive\",\"complete\"].indexOf(document.readyState)>-1?n():window.addEventListener(\"load\",n.bind(e),!1)})}},{key:\"showOverlay\",value:function(){var e=(0,a.default)(o.default.mark(function e(){return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.overlay;case 2:e.sent.iframe.style.display=\"block\";case 4:case\"end\":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:\"hideOverlay\",value:function(){var e=(0,a.default)(o.default.mark(function e(){return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.overlay;case 2:e.sent.iframe.style.display=\"none\";case 4:case\"end\":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:\"sendAsync\",value:function(e,t){e.length>0?this.enqueue({payload:{id:(0,l.randomId)(),batch:e.map(function(e){return e.id=(0,l.randomId)(),e}),method:\"eth_batchRequest\"},cb:t}):this.enqueue({payload:e,cb:t})}},{key:\"sendFortmaticAsync\",value:function(e,t){this.enqueue({payload:e,cb:t,isNative:!0})}},{key:\"send\",value:function(e,t){if(\"string\"==typeof e)return l.sendAsyncWrapper.call(this,e,t);if(!t){console.warn(\"Non-async web3 methods will be deprecated in web3 > 1.0, and are not supported by the Fortmatic provider. An async method to be used instead.\"),this.sendAsync(e,function(){});var r={};switch(e.method){case\"eth_accounts\":r=this.account?[this.account]:[];break;case\"eth_coinbase\":r=this.account;break;case\"net_version\":r=this.network||(this.options.API_KEY.startsWith(\"pk_live\")?1:4);break;case\"eth_uninstallFilter\":r=!0;break;default:r={}}return{id:e.id,jsonrpc:e.jsonrpc,result:r}}this.sendAsync(e,t)}},{key:\"enqueue\",value:function(e){this.queue.push(e),this.overlayReady&&this.dequeue()}},{key:\"dequeue\",value:function(){var e=(0,a.default)(o.default.mark(function e(){var t,r,n,a=this;return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(0!==this.queue.length){e.next=2;break}return e.abrupt(\"return\");case 2:if(!(t=this.queue.shift())){e.next=11;break}return r=t.payload,n=t.cb,r.id=(0,l.randomId)(),e.next=9,this.postMessage(t.isNative?this.postMessages.FORTMATIC_HANDLE_FORTMATIC_REQUEST:this.postMessages.FORTMATIC_HANDLE_REQUEST,t.payload);case 9:r.batch&&r.batch.length>0?(r.batch.forEach(function(e){a.requests[e.id]={parentId:r.id,payload:e,cb:function(e,t){var n=a.requests[r.id].batchResponse;if(e&&e.response&&!(0,l.findExistingResponse)(n,e.response.id))throw n.push({jsonrpc:\"2.0\",id:e.response.id,error:{code:e.response.code,message:e.response.message}}),a.requests[r.id].cb(null,n),e.response;if(t&&t.result&&!(0,l.findExistingResponse)(n,t.id))return n.push(t);throw new Error(\"Fortmatic: unexpected callback behavior\")}}}),this.requests[r.id]={payload:r,cb:n,batchResponse:[]}):this.requests[r.id]={payload:r,cb:n},this.dequeue();case 11:case\"end\":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:\"postMessage\",value:function(){var e=(0,a.default)(o.default.mark(function e(t,r){var n;return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.overlay;case 2:if(!(n=e.sent).iframe.contentWindow){e.next=7;break}n.iframe.contentWindow.postMessage({msgType:t,payload:r},\"*\"),e.next=8;break;case 7:throw new Error(\"Fortmatic: Modal is not ready.\");case 8:case\"end\":return e.stop()}},e,this)}));return function(t,r){return e.apply(this,arguments)}}()},{key:\"enable\",value:function(){return l.sendAsyncWrapper.call(this,\"eth_accounts\")}},{key:\"listenMessage\",value:function(){var e=this;window.addEventListener(\"message\",function(t){if(t.origin===e.fortmaticClient){var r=t.data.response?t.data.response.id:null;switch(t.data.msgType){case e.postMessages.FORTMATIC_OVERLAY_READY:e.overlayReady=!0,e.dequeue();break;case e.postMessages.FORTMATIC_HANDLE_RESPONSE:try{e.requests[r].cb(null,t.data.response);var n=e.requests[r].parentId;n&&e.requests[n].payload.batch.length===e.requests[n].batchResponse.length&&e.requests[n].cb(null,e.requests[n].batchResponse),\"eth_accounts\"===e.requests[r].payload.method?e.account=t.data.response.result[0]:\"eth_coinbase\"===e.requests[r].payload.method?e.account=t.data.response.result:\"net_version\"===e.requests[r].payload.method&&(e.network=t.data.response.result)}catch(e){}e.isLoggedIn=!0,e.dequeue();break;case e.postMessages.FORTMATIC_HIDE_OVERLAY:e.hideOverlay();break;case e.postMessages.FORTMATIC_SHOW_OVERLAY:e.showOverlay();break;case e.postMessages.FORTMATIC_USER_LOGOUT:e.account=null,e.network=null,e.isLoggedIn=!1;break;case e.postMessages.FORTMATIC_UNAUTHORIZED_API_KEY:throw e.overlayReady=!1,new Error(\"Given API key is not authorized to access the resource.\");case e.postMessages.FORTMATIC_USER_DENIED:if(r){var o=t.data.response&&t.data.response.message?t.data.response.message:\"Fortmatic: Modal was closed without executing action!\",a=t.data.response&&t.data.response.code?t.data.response.code:1;e.requests[r].cb({message:o,code:a,response:t.data.response})}else e.queue.forEach(function(e){return e.cb({message:\"Fortmatic: Modal was closed without executing action!\",code:1})});e.dequeue()}}})}}]),e}();t.default=f},function(e,t,r){e.exports=r(7)},function(e,t,r){var n=function(){return this||\"object\"==typeof self&&self}()||Function(\"return this\")(),o=n.regeneratorRuntime&&Object.getOwnPropertyNames(n).indexOf(\"regeneratorRuntime\")>=0,a=o&&n.regeneratorRuntime;if(n.regeneratorRuntime=void 0,e.exports=r(8),o)n.regeneratorRuntime=a;else try{delete n.regeneratorRuntime}catch(e){n.regeneratorRuntime=void 0}},function(e,t){!function(t){\"use strict\";var r,n=Object.prototype,o=n.hasOwnProperty,a=\"function\"==typeof Symbol?Symbol:{},i=a.iterator||\"@@iterator\",s=a.asyncIterator||\"@@asyncIterator\",c=a.toStringTag||\"@@toStringTag\",u=\"object\"==typeof e,l=t.regeneratorRuntime;if(l)u&&(e.exports=l);else{(l=t.regeneratorRuntime=u?e.exports:{}).wrap=_;var f=\"suspendedStart\",d=\"suspendedYield\",h=\"executing\",p=\"completed\",m={},y={};y[i]=function(){return this};var v=Object.getPrototypeOf,g=v&&v(v(L([])));g&&g!==n&&o.call(g,i)&&(y=g);var b=A.prototype=w.prototype=Object.create(y);T.prototype=b.constructor=A,A.constructor=T,A[c]=T.displayName=\"GeneratorFunction\",l.isGeneratorFunction=function(e){var t=\"function\"==typeof e&&e.constructor;return!!t&&(t===T||\"GeneratorFunction\"===(t.displayName||t.name))},l.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,A):(e.__proto__=A,c in e||(e[c]=\"GeneratorFunction\")),e.prototype=Object.create(b),e},l.awrap=function(e){return{__await:e}},O(R.prototype),R.prototype[s]=function(){return this},l.AsyncIterator=R,l.async=function(e,t,r,n){var o=new R(_(e,t,r,n));return l.isGeneratorFunction(t)?o:o.next().then(function(e){return e.done?e.value:o.next()})},O(b),b[c]=\"Generator\",b[i]=function(){return this},b.toString=function(){return\"[object Generator]\"},l.keys=function(e){var t=[];for(var r in e)t.push(r);return t.reverse(),function r(){for(;t.length;){var n=t.pop();if(n in e)return r.value=n,r.done=!1,r}return r.done=!0,r}},l.values=L,F.prototype={constructor:F,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=r,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=r,this.tryEntries.forEach(M),!e)for(var t in this)\"t\"===t.charAt(0)&&o.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=r)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if(\"throw\"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function n(n,o){return s.type=\"throw\",s.arg=e,t.next=n,o&&(t.method=\"next\",t.arg=r),!!o}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],s=i.completion;if(\"root\"===i.tryLoc)return n(\"end\");if(i.tryLoc<=this.prev){var c=o.call(i,\"catchLoc\"),u=o.call(i,\"finallyLoc\");if(c&&u){if(this.prev=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&o.call(n,\"finallyLoc\")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),M(r),m}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if(\"throw\"===n.type){var o=n.arg;M(r)}return o}}throw new Error(\"illegal catch attempt\")},delegateYield:function(e,t,n){return this.delegate={iterator:L(e),resultName:t,nextLoc:n},\"next\"===this.method&&(this.arg=r),m}}}function _(e,t,r,n){var o=t&&t.prototype instanceof w?t:w,a=Object.create(o.prototype),i=new F(n||[]);return a._invoke=function(e,t,r){var n=f;return function(o,a){if(n===h)throw new Error(\"Generator is already running\");if(n===p){if(\"throw\"===o)throw a;return k()}for(r.method=o,r.arg=a;;){var i=r.delegate;if(i){var s=I(i,r);if(s){if(s===m)continue;return s}}if(\"next\"===r.method)r.sent=r._sent=r.arg;else if(\"throw\"===r.method){if(n===f)throw n=p,r.arg;r.dispatchException(r.arg)}else\"return\"===r.method&&r.abrupt(\"return\",r.arg);n=h;var c=E(e,t,r);if(\"normal\"===c.type){if(n=r.done?p:d,c.arg===m)continue;return{value:c.arg,done:r.done}}\"throw\"===c.type&&(n=p,r.method=\"throw\",r.arg=c.arg)}}}(e,r,i),a}function E(e,t,r){try{return{type:\"normal\",arg:e.call(t,r)}}catch(e){return{type:\"throw\",arg:e}}}function w(){}function T(){}function A(){}function O(e){[\"next\",\"throw\",\"return\"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function R(e){var t;this._invoke=function(r,n){function a(){return new Promise(function(t,a){!function t(r,n,a,i){var s=E(e[r],e,n);if(\"throw\"!==s.type){var c=s.arg,u=c.value;return u&&\"object\"==typeof u&&o.call(u,\"__await\")?Promise.resolve(u.__await).then(function(e){t(\"next\",e,a,i)},function(e){t(\"throw\",e,a,i)}):Promise.resolve(u).then(function(e){c.value=e,a(c)},function(e){return t(\"throw\",e,a,i)})}i(s.arg)}(r,n,t,a)})}return t=t?t.then(a,a):a()}}function I(e,t){var n=e.iterator[t.method];if(n===r){if(t.delegate=null,\"throw\"===t.method){if(e.iterator.return&&(t.method=\"return\",t.arg=r,I(e,t),\"throw\"===t.method))return m;t.method=\"throw\",t.arg=new TypeError(\"The iterator does not provide a 'throw' method\")}return m}var o=E(n,e.iterator,t.arg);if(\"throw\"===o.type)return t.method=\"throw\",t.arg=o.arg,t.delegate=null,m;var a=o.arg;return a?a.done?(t[e.resultName]=a.value,t.next=e.nextLoc,\"return\"!==t.method&&(t.method=\"next\",t.arg=r),t.delegate=null,m):a:(t.method=\"throw\",t.arg=new TypeError(\"iterator result is not an object\"),t.delegate=null,m)}function x(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function M(e){var t=e.completion||{};t.type=\"normal\",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:\"root\"}],e.forEach(x,this),this.reset(!0)}function L(e){if(e){var t=e[i];if(t)return t.call(e);if(\"function\"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n (https://fortmatic.com/)\",license:\"MIT\",repository:{type:\"git\",url:\"https://github.com/fortmatic/fortmatic-js\"},keywords:[\"Auth\",\"Login\",\"Web3\",\"Crypto\",\"Ethereum\",\"MetaMask\",\"Wallet\",\"Blockchain\",\"Dapp\"],homepage:\"https://www.fortmatic.com\",ava:{require:[\"@babel/register\"],files:[\"test/**/*.spec.js\"],babel:{testOptions:{presets:[\"@babel/env\"],plugins:[\"@babel/plugin-proposal-function-bind\",\"@babel/plugin-transform-runtime\"]}},verbose:!0},nyc:{all:!1,\"check-coverage\":!0,\"per-file\":!0,lines:80,statements:80,functions:80,branches:80,include:[\"src/**/*.js\"],exclude:[\"*/style.js\"],require:[],reporter:[\"html\",\"lcov\"]},dependencies:{\"@babel/runtime\":\"7.3.4\"},devDependencies:{\"@babel/core\":\"7.3.4\",\"@babel/plugin-proposal-function-bind\":\"7.2.0\",\"@babel/plugin-transform-modules-commonjs\":\"7.2.0\",\"@babel/plugin-transform-runtime\":\"7.3.4\",\"@babel/preset-env\":\"7.3.4\",\"@babel/register\":\"7.0.0\",ava:\"2.2.0\",\"babel-eslint\":\"10.0.1\",\"babel-loader\":\"8.0.5\",eslint:\"5.9.0\",lodash:\"4.17.11\",nyc:\"13.1.0\",sinon:\"7.1.1\",webpack:\"4.26.1\",\"webpack-cli\":\"3.1.2\"}}},function(e,t,r){\"use strict\";t.css=\"\\n .fortmatic-iframe {\\n display: none;\\n position: fixed;\\n top: 0;\\n right: 0;\\n width: 100%;\\n height: 100%;\\n border: none;\\n border-radius: 0;\\n z-index: 2147483647;\\n }\\n\"}]);"],"names":["_path","_path2","_path3","_extends","React","MersenneTwister","Color","colors","require$$0","require$$1","require$$2","require$$3","_line","_line2"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBA,eAAe,mcAAmc;;ACvBld,gBAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAf,mBAAe;;AC+Lf,sBAAe,0kPAA0kP;;ACvIzlP,sBAAe,0sDAA0sD;;AC7BztD,uBAAe,k3CAAk3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3Bj4C,aAAe;;ACAf,YAAe;;ACAf,gBAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpBhZ,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACA8k5jB,cAAc,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACwFD,oBAAe,0tLAA0tL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICzGzuL,SAAc,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,OAAO,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAc,SAAS,CAAC,EAAE,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAc,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,IAAG,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,oFAAoF,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAG,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAC,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAc,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAG,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,8BAA8B,CAAC,gCAAgC,CAAC,wBAAwB,CAAC,0BAA0B,CAAC,kCAAkC,CAAC,oCAAoC,CAAC,yBAAyB,CAAC,2BAA2B,CAAC,uBAAuB,CAAC,yBAAyB,CAAC,sBAAsB,CAAC,wBAAwB,CAAC,sBAAsB,CAAC,wBAAwB,CAAC,qBAAqB,CAAC,uBAAuB,CAAC,qBAAqB,CAAC,uBAAuB,CAAC,8BAA8B,CAAC,gCAAgC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,oFAAoF,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,aAAa,GAAE,CAAC,OAAM,IAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,sBAAsB,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,OAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,GAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,+CAA+C,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,CAAC,KAAK,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,oBAAoB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,+IAA+I,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,IAAI,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,MAAM,IAAI,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,CAAC,GAAE,CAAC,OAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,GAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,kCAAkC,CAAC,IAAI,CAAC,YAAY,CAAC,wBAAwB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAG,CAAC,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAG,CAAC,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,YAAY,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,YAAY,CAAC,sBAAsB,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,YAAY,CAAC,sBAAsB,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,YAAY,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,uDAAuD,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,uDAAuD,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAE,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,OAAO,IAAI,EAAE,QAAQ,EAAE,OAAO,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,EAAE,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC,mBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,EAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAc,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU,EAAE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,OAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,mBAAmB,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,OAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAM,oBAAoB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,OAAM,OAAO,GAAG,CAAC,CAAC,IAAI,EAAE,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,EAAC,CAAC,KAAI,QAAQ,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,SAAS,OAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,gDAAgD,EAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,kCAAkC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,EAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,OAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,IAAI,EAAE,QAAQ,EAAE,OAAO,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAK,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,0BAA0B,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,gCAAgC,CAAC,WAAW,CAAC,mFAAmF,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC,MAAM,CAAC,yDAAyD,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,sCAAsC,CAAC,iCAAiC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,eAAe,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,sCAAsC,CAAC,OAAO,CAAC,0CAA0C,CAAC,OAAO,CAAC,iCAAiC,CAAC,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAc,CAAC,CAAC,GAAG,CAAC,gNAA+M,CAAC,CAAC,CAAC;;;;;;;;;;;;;;"} \ No newline at end of file diff --git a/src/snowflake/App.tsx b/src/snowflake/App.tsx new file mode 100644 index 00000000000..90e072bdd0f --- /dev/null +++ b/src/snowflake/App.tsx @@ -0,0 +1,86 @@ +import Loader from 'components/Loader' +import ApeModeQueryParamReader from 'hooks/useApeModeQueryParamReader' +import { lazy, Suspense } from 'react' +import { Redirect, Route, Switch } from 'react-router-dom' +import styled from 'styled-components/macro' +import AddressClaimModal from '../components/claim/AddressClaimModal' +import ErrorBoundary from '../components/ErrorBoundary' +import Header from '../components/Header' +import Polling from '../components/Header/Polling' +import Popups from '../components/Popups' +import Web3ReactManager from '../components/Web3ReactManager' +import { useModalOpen, useToggleModal } from '../state/application/hooks' +import { ApplicationModal } from '../state/application/reducer' +import DarkModeQueryParamReader from '../theme/DarkModeQueryParamReader' +import Swap from '../pages/Swap' +import { OpenClaimAddressModalAndRedirectToSwap, RedirectPathToSwapOnly, RedirectToSwap } from '../pages/Swap/redirects' + +// const Vote = lazy(() => import('./Vote')) + +const AppWrapper = styled.div` + display: flex; + flex-flow: column; + align-items: flex-start; +` + +const BodyWrapper = styled.div` + display: flex; + flex-direction: column; + width: 100%; + padding: 120px 16px 0px 16px; + align-items: center; + flex: 1; + z-index: 1; + + ${({ theme }) => theme.mediaWidth.upToSmall` + padding: 4rem 8px 16px 8px; + `}; +` + +const HeaderWrapper = styled.div` + ${({ theme }) => theme.flexRowNoWrap} + width: 100%; + justify-content: space-between; + position: fixed; + top: 0; + z-index: 2; +` + +const Marginer = styled.div` + margin-top: 5rem; +` + +function TopLevelModals() { + const open = useModalOpen(ApplicationModal.ADDRESS_CLAIM) + const toggle = useToggleModal(ApplicationModal.ADDRESS_CLAIM) + return +} + +export default function App() { + return ( + + + + + + +

+ + + + + + }> + + + + + + + + + + + + ) +} diff --git a/src/snowflake/AppBody.tsx b/src/snowflake/AppBody.tsx new file mode 100644 index 00000000000..55f3f8f7b4d --- /dev/null +++ b/src/snowflake/AppBody.tsx @@ -0,0 +1,25 @@ +import React from 'react' +import styled from 'styled-components/macro' +import { Z_INDEX } from 'theme' + +export const BodyWrapper = styled.main<{ margin?: string; maxWidth?: string }>` + position: relative; + margin-top: ${({ margin }) => margin ?? '0px'}; + max-width: ${({ maxWidth }) => maxWidth ?? '480px'}; + width: 100%; + background: ${({ theme }) => theme.bg0}; + 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), + 0px 24px 32px rgba(0, 0, 0, 0.01); + border-radius: 24px; + margin-top: 1rem; + margin-left: auto; + margin-right: auto; + z-index: ${Z_INDEX.deprecated_content}; +` + +/** + * The styled container element that wraps the content of most pages and the tabs. + */ +export default function AppBody({ children, ...rest }: { children: React.ReactNode }) { + return {children} +} diff --git a/src/snowflake/index.ts b/src/snowflake/index.ts index 8556f6a5742..ec9a09e98eb 100644 --- a/src/snowflake/index.ts +++ b/src/snowflake/index.ts @@ -1,5 +1,6 @@ // snowflake exports +export { default as App } from './App' export { default as Swap } from '../pages/Swap' export * as serviceWorkerRegistration from '../serviceWorkerRegistration' export * from './Providers' diff --git a/src/snowflake/styled.tsx b/src/snowflake/styled.tsx new file mode 100644 index 00000000000..b5c9bbd7988 --- /dev/null +++ b/src/snowflake/styled.tsx @@ -0,0 +1,12 @@ +import styled from 'styled-components/macro' + +export const IframeBodyWrapper = styled.div` + display: flex; + flex-direction: column; + width: 100%; + margin-top: 3rem; + padding: 1rem; + align-items: center; + flex: 1; + z-index: 1; +` From 744b1243f27de39823abe6c111f39d79bb06ae51 Mon Sep 17 00:00:00 2001 From: David Wisner Date: Fri, 28 Jan 2022 12:13:46 +0800 Subject: [PATCH 08/15] update version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 75609c355ba..4581536e090 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "files": [ "dist2" ], - "version": "1.0.1", + "version": "1.0.2", "private": false, "resolutions": { "@walletconnect/ethereum-provider": "1.7.1" From 6e2b19c99243d381699f1095b35658befb1ad830 Mon Sep 17 00:00:00 2001 From: Lint Action Date: Fri, 28 Jan 2022 06:46:34 +0000 Subject: [PATCH 09/15] Fix code style issues with ESLint --- dist2/snowflake.js | 28415 +++++++++++++++++++++++++------------------ 1 file changed, 16282 insertions(+), 12133 deletions(-) diff --git a/dist2/snowflake.js b/dist2/snowflake.js index 9a417e1e042..277e69eb7aa 100644 --- a/dist2/snowflake.js +++ b/dist2/snowflake.js @@ -1,12226 +1,16375 @@ -'use strict'; - -Object.defineProperty(exports, '__esModule', { value: true }); - -var jsxRuntime = require('react/jsx-runtime'); -var styled = require('styled-components/macro'); -var React = require('react'); -var reactRedux = require('react-redux'); -var toolkit = require('@reduxjs/toolkit'); -var qs = require('qs'); -var reactRouterDom = require('react-router-dom'); -var address = require('@ethersproject/address'); -var macro = require('@lingui/macro'); -var core = require('@web3-react/core'); -var sdkCore = require('@uniswap/sdk-core'); -var JSBI = require('jsbi'); -var rebass = require('rebass'); -var constants = require('@ethersproject/constants'); -var contracts = require('@ethersproject/contracts'); -var jotai = require('jotai'); -var utils = require('jotai/utils'); -var reduxMulticall = require('@uniswap/redux-multicall'); -var v2Sdk = require('@uniswap/v2-sdk'); -var v3Sdk = require('@uniswap/v3-sdk'); -var redux = require('redux'); -var hash = require('@ethersproject/hash'); -var app = require('firebase/app'); -var database = require('firebase/database'); -var bytes = require('@ethersproject/bytes'); -var strings = require('@ethersproject/strings'); -var core$1 = require('widgets-web3-react/core'); -var empty = require('widgets-web3-react/empty'); -var CID = require('cids'); -var multicodec = require('multicodec'); -var multihashes = require('multihashes'); -var abi$7 = require('@ethersproject/abi'); -var reactFeather = require('react-feather'); -var ReactGA = require('react-ga'); -var styledComponents = require('rebass/styled-components'); -var polished = require('polished'); -var ReactConfetti = require('react-confetti'); -var dialog = require('@reach/dialog'); -var reactSpring = require('react-spring'); -var reactUseGesture = require('react-use-gesture'); -var uaParserJs = require('ua-parser-js'); -var react = require('@reduxjs/toolkit/query/react'); -var reduxLocalstorageSimple = require('redux-localstorage-simple'); -var graphqlRequest = require('graphql-request'); -var tokenLists = require('@uniswap/token-lists'); -var routerSdk = require('@uniswap/router-sdk'); -var ms = require('ms.macro'); -var units = require('@ethersproject/units'); -var useScrollPosition = require('@react-hook/window-scroll'); -var Portal = require('@reach/portal'); -var reactPopper = require('react-popper'); -var safeAppsWeb3React = require('@gnosis.pm/safe-apps-web3-react'); -var injectedConnector = require('@web3-react/injected-connector'); -var portisConnector = require('@web3-react/portis-connector'); -var walletconnectConnector = require('@web3-react/walletconnect-connector'); -var walletlinkConnector = require('@web3-react/walletlink-connector'); -var providers = require('@ethersproject/providers'); -var fortmaticConnector = require('@web3-react/fortmatic-connector'); -var abstractConnector = require('@web3-react/abstract-connector'); -var invariant = require('tiny-invariant'); -var clone$1 = require('clone'); -var colorConvert = require('color-convert'); -var colorString = require('color-string'); -var bignumber = require('@ethersproject/bignumber'); -var copy = require('copy-to-clipboard'); -var web = require('react-spring/web'); -var useResizeObserver = require('use-resize-observer'); -var AutoSizer = require('react-virtualized-auto-sizer'); -var reactWindow = require('react-window'); -var Vibrant = require('node-vibrant/lib/bundle'); -var wcagContrast = require('wcag-contrast'); -var core$2 = require('@lingui/core'); -var react$1 = require('@lingui/react'); -var plurals$1 = require('make-plural/plurals'); -var smartOrderRouter = require('@uniswap/smart-order-router'); -var ethers = require('ethers/lib/ethers'); - -function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } +Object.defineProperty(exports, '__esModule', { value: true }) + +var jsxRuntime = require('react/jsx-runtime') +var styled = require('styled-components/macro') +var React = require('react') +var reactRedux = require('react-redux') +var toolkit = require('@reduxjs/toolkit') +var qs = require('qs') +var reactRouterDom = require('react-router-dom') +var address = require('@ethersproject/address') +var macro = require('@lingui/macro') +var core = require('@web3-react/core') +var sdkCore = require('@uniswap/sdk-core') +var JSBI = require('jsbi') +var rebass = require('rebass') +var constants = require('@ethersproject/constants') +var contracts = require('@ethersproject/contracts') +var jotai = require('jotai') +var utils = require('jotai/utils') +var reduxMulticall = require('@uniswap/redux-multicall') +var v2Sdk = require('@uniswap/v2-sdk') +var v3Sdk = require('@uniswap/v3-sdk') +var redux = require('redux') +var hash = require('@ethersproject/hash') +var app = require('firebase/app') +var database = require('firebase/database') +var bytes = require('@ethersproject/bytes') +var strings = require('@ethersproject/strings') +var core$1 = require('widgets-web3-react/core') +var empty = require('widgets-web3-react/empty') +var CID = require('cids') +var multicodec = require('multicodec') +var multihashes = require('multihashes') +var abi$7 = require('@ethersproject/abi') +var reactFeather = require('react-feather') +var ReactGA = require('react-ga') +var styledComponents = require('rebass/styled-components') +var polished = require('polished') +var ReactConfetti = require('react-confetti') +var dialog = require('@reach/dialog') +var reactSpring = require('react-spring') +var reactUseGesture = require('react-use-gesture') +var uaParserJs = require('ua-parser-js') +var react = require('@reduxjs/toolkit/query/react') +var reduxLocalstorageSimple = require('redux-localstorage-simple') +var graphqlRequest = require('graphql-request') +var tokenLists = require('@uniswap/token-lists') +var routerSdk = require('@uniswap/router-sdk') +var ms = require('ms.macro') +var units = require('@ethersproject/units') +var useScrollPosition = require('@react-hook/window-scroll') +var Portal = require('@reach/portal') +var reactPopper = require('react-popper') +var safeAppsWeb3React = require('@gnosis.pm/safe-apps-web3-react') +var injectedConnector = require('@web3-react/injected-connector') +var portisConnector = require('@web3-react/portis-connector') +var walletconnectConnector = require('@web3-react/walletconnect-connector') +var walletlinkConnector = require('@web3-react/walletlink-connector') +var providers = require('@ethersproject/providers') +var fortmaticConnector = require('@web3-react/fortmatic-connector') +var abstractConnector = require('@web3-react/abstract-connector') +var invariant = require('tiny-invariant') +var clone$1 = require('clone') +var colorConvert = require('color-convert') +var colorString = require('color-string') +var bignumber = require('@ethersproject/bignumber') +var copy = require('copy-to-clipboard') +var web = require('react-spring/web') +var useResizeObserver = require('use-resize-observer') +var AutoSizer = require('react-virtualized-auto-sizer') +var reactWindow = require('react-window') +var Vibrant = require('node-vibrant/lib/bundle') +var wcagContrast = require('wcag-contrast') +var core$2 = require('@lingui/core') +var react$1 = require('@lingui/react') +var plurals$1 = require('make-plural/plurals') +var smartOrderRouter = require('@uniswap/smart-order-router') +var ethers = require('ethers/lib/ethers') + +function _interopDefaultLegacy(e) { + return e && typeof e === 'object' && 'default' in e ? e : { default: e } +} function _interopNamespace(e) { - if (e && e.__esModule) return e; - var n = Object.create(null); - if (e) { - Object.keys(e).forEach(function (k) { - if (k !== 'default') { - var d = Object.getOwnPropertyDescriptor(e, k); - Object.defineProperty(n, k, d.get ? d : { - enumerable: true, - get: function () { return e[k]; } - }); - } - }); - } - n["default"] = e; - return Object.freeze(n); + if (e && e.__esModule) return e + var n = Object.create(null) + if (e) { + Object.keys(e).forEach(function (k) { + if (k !== 'default') { + var d = Object.getOwnPropertyDescriptor(e, k) + Object.defineProperty( + n, + k, + d.get + ? d + : { + enumerable: true, + get() { + return e[k] + }, + } + ) + } + }) + } + n['default'] = e + return Object.freeze(n) } function _mergeNamespaces(n, m) { - m.forEach(function (e) { - e && typeof e !== 'string' && !Array.isArray(e) && Object.keys(e).forEach(function (k) { - if (k !== 'default' && !(k in n)) { - var d = Object.getOwnPropertyDescriptor(e, k); - Object.defineProperty(n, k, d.get ? d : { - enumerable: true, - get: function () { return e[k]; } - }); + m.forEach(function (e) { + e && + typeof e !== 'string' && + !Array.isArray(e) && + Object.keys(e).forEach(function (k) { + if (k !== 'default' && !(k in n)) { + var d = Object.getOwnPropertyDescriptor(e, k) + Object.defineProperty( + n, + k, + d.get + ? d + : { + enumerable: true, + get() { + return e[k] + }, + } + ) + } + }) + }) + return Object.freeze(n) +} + +var styled__default = /*#__PURE__*/ _interopDefaultLegacy(styled) +var React__default = /*#__PURE__*/ _interopDefaultLegacy(React) +var React__namespace = /*#__PURE__*/ _interopNamespace(React) +var qs__default = /*#__PURE__*/ _interopDefaultLegacy(qs) +var JSBI__default = /*#__PURE__*/ _interopDefaultLegacy(JSBI) +var CID__default = /*#__PURE__*/ _interopDefaultLegacy(CID) +var ReactGA__default = /*#__PURE__*/ _interopDefaultLegacy(ReactGA) +var ReactConfetti__default = /*#__PURE__*/ _interopDefaultLegacy(ReactConfetti) +var ms__default = /*#__PURE__*/ _interopDefaultLegacy(ms) +var useScrollPosition__default = /*#__PURE__*/ _interopDefaultLegacy(useScrollPosition) +var Portal__default = /*#__PURE__*/ _interopDefaultLegacy(Portal) +var invariant__default = /*#__PURE__*/ _interopDefaultLegacy(invariant) +var clone__namespace = /*#__PURE__*/ _interopNamespace(clone$1) +var colorConvert__namespace = /*#__PURE__*/ _interopNamespace(colorConvert) +var colorString__namespace = /*#__PURE__*/ _interopNamespace(colorString) +var copy__default = /*#__PURE__*/ _interopDefaultLegacy(copy) +var useResizeObserver__default = /*#__PURE__*/ _interopDefaultLegacy(useResizeObserver) +var AutoSizer__default = /*#__PURE__*/ _interopDefaultLegacy(AutoSizer) +var Vibrant__default = /*#__PURE__*/ _interopDefaultLegacy(Vibrant) + +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ +/* global Reflect, Promise */ + +var extendStatics = function (d, b) { + extendStatics = + Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && + function (d, b) { + d.__proto__ = b + }) || + function (d, b) { + for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p] + } + return extendStatics(d, b) +} + +function __extends(d, b) { + if (typeof b !== 'function' && b !== null) + throw new TypeError('Class extends value ' + String(b) + ' is not a constructor or null') + extendStatics(d, b) + function __() { + this.constructor = d + } + d.prototype = b === null ? Object.create(b) : ((__.prototype = b.prototype), new __()) +} + +var __assign = function () { + __assign = + Object.assign || + function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i] + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p] + } + return t + } + return __assign.apply(this, arguments) +} + +function __rest(s, e) { + var t = {} + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p] + if (s != null && typeof Object.getOwnPropertySymbols === 'function') + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { + if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]] + } + return t +} + +function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P + ? value + : new P(function (resolve) { + resolve(value) + }) + } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)) + } catch (e) { + reject(e) + } + } + function rejected(value) { + try { + step(generator['throw'](value)) + } catch (e) { + reject(e) + } + } + function step(result) { + result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected) + } + step((generator = generator.apply(thisArg, _arguments || [])).next()) + }) +} + +function __generator(thisArg, body) { + var _ = { + label: 0, + sent() { + if (t[0] & 1) throw t[1] + return t[1] + }, + trys: [], + ops: [], + }, + f, + y, + t, + g + return ( + (g = { next: verb(0), throw: verb(1), return: verb(2) }), + typeof Symbol === 'function' && + (g[Symbol.iterator] = function () { + return this + }), + g + ) + function verb(n) { + return function (v) { + return step([n, v]) + } + } + function step(op) { + if (f) throw new TypeError('Generator is already executing.') + while (_) + try { + if ( + ((f = 1), + y && + (t = op[0] & 2 ? y['return'] : op[0] ? y['throw'] || ((t = y['return']) && t.call(y), 0) : y.next) && + !(t = t.call(y, op[1])).done) + ) + return t + if (((y = 0), t)) op = [op[0] & 2, t.value] + switch (op[0]) { + case 0: + case 1: + t = op + break + case 4: + _.label++ + return { value: op[1], done: false } + case 5: + _.label++ + y = op[1] + op = [0] + continue + case 7: + op = _.ops.pop() + _.trys.pop() + continue + default: + if (!((t = _.trys), (t = t.length > 0 && t[t.length - 1])) && (op[0] === 6 || op[0] === 2)) { + _ = 0 + continue } - }); - }); - return Object.freeze(n); -} - -var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled); -var React__default = /*#__PURE__*/_interopDefaultLegacy(React); -var React__namespace = /*#__PURE__*/_interopNamespace(React); -var qs__default = /*#__PURE__*/_interopDefaultLegacy(qs); -var JSBI__default = /*#__PURE__*/_interopDefaultLegacy(JSBI); -var CID__default = /*#__PURE__*/_interopDefaultLegacy(CID); -var ReactGA__default = /*#__PURE__*/_interopDefaultLegacy(ReactGA); -var ReactConfetti__default = /*#__PURE__*/_interopDefaultLegacy(ReactConfetti); -var ms__default = /*#__PURE__*/_interopDefaultLegacy(ms); -var useScrollPosition__default = /*#__PURE__*/_interopDefaultLegacy(useScrollPosition); -var Portal__default = /*#__PURE__*/_interopDefaultLegacy(Portal); -var invariant__default = /*#__PURE__*/_interopDefaultLegacy(invariant); -var clone__namespace = /*#__PURE__*/_interopNamespace(clone$1); -var colorConvert__namespace = /*#__PURE__*/_interopNamespace(colorConvert); -var colorString__namespace = /*#__PURE__*/_interopNamespace(colorString); -var copy__default = /*#__PURE__*/_interopDefaultLegacy(copy); -var useResizeObserver__default = /*#__PURE__*/_interopDefaultLegacy(useResizeObserver); -var AutoSizer__default = /*#__PURE__*/_interopDefaultLegacy(AutoSizer); -var Vibrant__default = /*#__PURE__*/_interopDefaultLegacy(Vibrant); - -/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */ -/* global Reflect, Promise */ - -var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); -}; - -function __extends(d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); -} - -var __assign = function() { - __assign = Object.assign || function __assign(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); -}; - -function __rest(s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -} - -function __awaiter(thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -} - -function __generator(thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -} - -function __values(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -} - -function __read(o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; -} - -function __spreadArray(to, from, pack) { - if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { - if (ar || !(i in from)) { - if (!ar) ar = Array.prototype.slice.call(from, 0, i); - ar[i] = from[i]; - } - } - return to.concat(ar || Array.prototype.slice.call(from)); -} - -function __makeTemplateObject(cooked, raw) { - if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } - return cooked; + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { + _.label = op[1] + break + } + if (op[0] === 6 && _.label < t[1]) { + _.label = t[1] + t = op + break + } + if (t && _.label < t[2]) { + _.label = t[2] + _.ops.push(op) + break + } + if (t[2]) _.ops.pop() + _.trys.pop() + continue + } + op = body.call(thisArg, _) + } catch (e) { + op = [6, e] + y = 0 + } finally { + f = t = 0 + } + if (op[0] & 5) throw op[1] + return { value: op[0] ? op[1] : void 0, done: true } + } } -var rotate$2 = styled.keyframes(templateObject_1$1n || (templateObject_1$1n = __makeTemplateObject(["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"], ["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"]))); -var StyledSVG = styled__default["default"].svg(templateObject_2$11 || (templateObject_2$11 = __makeTemplateObject(["\n animation: 2s ", " linear infinite;\n height: ", ";\n width: ", ";\n path {\n stroke: ", ";\n }\n"], ["\n animation: 2s ", " linear infinite;\n height: ", ";\n width: ", ";\n path {\n stroke: ", ";\n }\n" - /** - * Takes in custom size and stroke for circle color, default to primary color as fill, - * need ...rest for layered styles on top - */ -])), rotate$2, function (_a) { - var size = _a.size; - return size; -}, function (_a) { - var size = _a.size; - return size; -}, function (_a) { - var stroke = _a.stroke, theme = _a.theme; - return stroke !== null && stroke !== void 0 ? stroke : theme.primary1; -}); -/** - * Takes in custom size and stroke for circle color, default to primary color as fill, - * need ...rest for layered styles on top - */ -function Loader(_a) { - var _b = _a.size, size = _b === void 0 ? '16px' : _b, stroke = _a.stroke, rest = __rest(_a, ["size", "stroke"]); - return (jsxRuntime.jsx(StyledSVG, __assign({ viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", size: size, stroke: stroke }, rest, { children: jsxRuntime.jsx("path", { d: "M12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22C17.5228 22 22 17.5228 22 12C22 9.27455 20.9097 6.80375 19.1414 5", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round" }, void 0) }), void 0)); -} -var templateObject_1$1n, templateObject_2$11; - -var useAppDispatch = function () { return reactRedux.useDispatch(); }; -var useAppSelector = reactRedux.useSelector; - -var updateMatchesDarkMode = toolkit.createAction('user/updateMatchesDarkMode'); -var updateUserDarkMode = toolkit.createAction('user/updateUserDarkMode'); -var updateUserExpertMode = toolkit.createAction('user/updateUserExpertMode'); -var updateUserLocale = toolkit.createAction('user/updateUserLocale'); -var updateShowSurveyPopup = toolkit.createAction('user/updateShowSurveyPopup'); -var updateUserClientSideRouter = toolkit.createAction('user/updateUserClientSideRouter'); -var updateHideClosedPositions = toolkit.createAction('user/hideClosedPositions'); -var updateUserSlippageTolerance = toolkit.createAction('user/updateUserSlippageTolerance'); -var updateUserDeadline = toolkit.createAction('user/updateUserDeadline'); -var addSerializedToken = toolkit.createAction('user/addSerializedToken'); -var removeSerializedToken = toolkit.createAction('user/removeSerializedToken'); -var addSerializedPair = toolkit.createAction('user/addSerializedPair'); -var removeSerializedPair = toolkit.createAction('user/removeSerializedPair'); - -function parsedQueryString(search) { - if (!search) { - // react-router-dom places search string in the hash - var hash = window.location.hash; - search = hash.substr(hash.indexOf('?')); - } - return search && search.length > 1 ? qs.parse(search, { parseArrays: false, ignoreQueryPrefix: true }) : {}; -} -function useParsedQueryString() { - var search = reactRouterDom.useLocation().search; - return React.useMemo(function () { return parsedQueryString(search); }, [search]); +function __values(o) { + var s = typeof Symbol === 'function' && Symbol.iterator, + m = s && o[s], + i = 0 + if (m) return m.call(o) + if (o && typeof o.length === 'number') + return { + next() { + if (o && i >= o.length) o = void 0 + return { value: o && o[i++], done: !o } + }, + } + throw new TypeError(s ? 'Object is not iterable.' : 'Symbol.iterator is not defined.') } -function ApeModeQueryParamReader() { - useApeModeQueryParamReader(); - return null; -} -function useApeModeQueryParamReader() { - var dispatch = useAppDispatch(); - var ape = useParsedQueryString().ape; - React.useEffect(function () { - if (typeof ape !== 'string') - return; - if (ape === '' || ape.toLowerCase() === 'true') { - dispatch(updateUserExpertMode({ userExpertMode: true })); - } - }); +function __read(o, n) { + var m = typeof Symbol === 'function' && o[Symbol.iterator] + if (!m) return o + var i = m.call(o), + r, + ar = [], + e + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value) + } catch (error) { + e = { error } + } finally { + try { + if (r && !r.done && (m = i['return'])) m.call(i) + } finally { + if (e) throw e.error + } + } + return ar } -var NetworkContextName = 'NETWORK'; -var IS_IN_IFRAME = window.parent !== window; -// 30 minutes, denominated in seconds -var DEFAULT_DEADLINE_FROM_NOW = 60 * 30; -var L2_DEADLINE_FROM_NOW = 60 * 5; -// transaction popup dismisal amounts -var DEFAULT_TXN_DISMISS_MS = 25000; -var L2_TXN_DISMISS_MS = 5000; -// used for rewards deadlines -JSBI__default["default"].BigInt(60 * 60 * 24 * 7); -JSBI__default["default"].BigInt(0); -// one basis JSBI.BigInt -var BIPS_BASE = JSBI__default["default"].BigInt(10000); -new sdkCore.Percent(JSBI__default["default"].BigInt(1), BIPS_BASE); -// used for warning states -var ALLOWED_PRICE_IMPACT_LOW = new sdkCore.Percent(JSBI__default["default"].BigInt(100), BIPS_BASE); // 1% -var ALLOWED_PRICE_IMPACT_MEDIUM = new sdkCore.Percent(JSBI__default["default"].BigInt(300), BIPS_BASE); // 3% -var ALLOWED_PRICE_IMPACT_HIGH = new sdkCore.Percent(JSBI__default["default"].BigInt(500), BIPS_BASE); // 5% -// if the price slippage exceeds this number, force the user to type 'confirm' to execute -var PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN = new sdkCore.Percent(JSBI__default["default"].BigInt(1000), BIPS_BASE); // 10% -// for non expert mode disable swaps above this -var BLOCKED_PRICE_IMPACT_NON_EXPERT = new sdkCore.Percent(JSBI__default["default"].BigInt(1500), BIPS_BASE); // 15% -var BETTER_TRADE_LESS_HOPS_THRESHOLD = new sdkCore.Percent(JSBI__default["default"].BigInt(50), BIPS_BASE); -var ZERO_PERCENT = new sdkCore.Percent('0'); -new sdkCore.Percent(JSBI__default["default"].BigInt(200), BIPS_BASE); -var ONE_HUNDRED_PERCENT = new sdkCore.Percent('1'); - -function useActiveWeb3React() { - // if (false) { - // return useWidgetsWeb3React() - // } - var interfaceContext = core.useWeb3React(); - var interfaceNetworkContext = core.useWeb3React(NetworkContextName); - if (interfaceContext.active) { - return interfaceContext; - } - return interfaceNetworkContext; +function __spreadArray(to, from, pack) { + if (pack || arguments.length === 2) + for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i) + ar[i] = from[i] + } + } + return to.concat(ar || Array.prototype.slice.call(from)) } -var Circle$1 = "data:image/svg+xml,%3Csvg%20width%3D%2294%22%20height%3D%2294%22%20viewBox%3D%220%200%2094%2094%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%20%20%3Cpath%20d%3D%22M92%2047C92%2022.1472%2071.8528%202%2047%202C22.1472%202%202%2022.1472%202%2047C2%2071.8528%2022.1472%2092%2047%2092%22%20stroke%3D%22%232172E5%22%20stroke-width%3D%223%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E"; +function __makeTemplateObject(cooked, raw) { + if (Object.defineProperty) { + Object.defineProperty(cooked, 'raw', { value: raw }) + } else { + cooked.raw = raw + } + return cooked +} -var tokenLogo = "data:image/png;base64,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"; +var rotate$2 = styled.keyframes( + templateObject_1$1n || + (templateObject_1$1n = __makeTemplateObject( + ['\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n'], + ['\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n'] + )) +) +var StyledSVG = styled__default['default'].svg( + templateObject_2$11 || + (templateObject_2$11 = __makeTemplateObject( + ['\n animation: 2s ', ' linear infinite;\n height: ', ';\n width: ', ';\n path {\n stroke: ', ';\n }\n'], + [ + '\n animation: 2s ', + ' linear infinite;\n height: ', + ';\n width: ', + ';\n path {\n stroke: ', + ';\n }\n', + /** + * Takes in custom size and stroke for circle color, default to primary color as fill, + * need ...rest for layered styles on top + */ + ] + )), + rotate$2, + function (_a) { + var size = _a.size + return size + }, + function (_a) { + var size = _a.size + return size + }, + function (_a) { + var stroke = _a.stroke, + theme = _a.theme + return stroke !== null && stroke !== void 0 ? stroke : theme.primary1 + } +) +/** + * Takes in custom size and stroke for circle color, default to primary color as fill, + * need ...rest for layered styles on top + */ +function Loader(_a) { + var _b = _a.size, + size = _b === void 0 ? '16px' : _b, + stroke = _a.stroke, + rest = __rest(_a, ['size', 'stroke']) + return jsxRuntime.jsx( + StyledSVG, + __assign({ viewBox: '0 0 24 24', fill: 'none', xmlns: 'http://www.w3.org/2000/svg', size, stroke }, rest, { + children: jsxRuntime.jsx( + 'path', + { + d: 'M12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22C17.5228 22 22 17.5228 22 12C22 9.27455 20.9097 6.80375 19.1414 5', + strokeWidth: '2.5', + strokeLinecap: 'round', + strokeLinejoin: 'round', + }, + void 0 + ), + }), + void 0 + ) +} +var templateObject_1$1n, templateObject_2$11 -// returns the checksummed address if the address is valid, otherwise returns false -function isAddress(value) { - try { - return address.getAddress(value); - } - catch (_a) { - return false; - } -} -// shorten the checksummed version of the input address to have 0x + 4 characters at start and end -function shortenAddress(address, chars) { - if (chars === void 0) { chars = 4; } - var parsed = isAddress(address); - if (!parsed) { - throw Error("Invalid 'address' parameter '" + address + "'."); - } - return parsed.substring(0, chars + 2) + "..." + parsed.substring(42 - chars); -} -// account is not optional -function getSigner(library, account) { - return library.getSigner(account).connectUnchecked(); -} -// account is optional -function getProviderOrSigner(library, account) { - return account ? getSigner(library, account) : library; -} -// account is optional -function getContract(address, ABI, library, account) { - if (!isAddress(address) || address === constants.AddressZero) { - throw Error("Invalid 'address' parameter '" + address + "'."); - } - return new contracts.Contract(address, ABI, getProviderOrSigner(library, account)); -} -function escapeRegExp(string) { - return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string -} -function isTokenOnList(chainTokenMap, token) { - var _a; - return Boolean((token === null || token === void 0 ? void 0 : token.isToken) && ((_a = chainTokenMap[token.chainId]) === null || _a === void 0 ? void 0 : _a[token.address])); +var useAppDispatch = function () { + return reactRedux.useDispatch() +} +var useAppSelector = reactRedux.useSelector + +var updateMatchesDarkMode = toolkit.createAction('user/updateMatchesDarkMode') +var updateUserDarkMode = toolkit.createAction('user/updateUserDarkMode') +var updateUserExpertMode = toolkit.createAction('user/updateUserExpertMode') +var updateUserLocale = toolkit.createAction('user/updateUserLocale') +var updateShowSurveyPopup = toolkit.createAction('user/updateShowSurveyPopup') +var updateUserClientSideRouter = toolkit.createAction('user/updateUserClientSideRouter') +var updateHideClosedPositions = toolkit.createAction('user/hideClosedPositions') +var updateUserSlippageTolerance = toolkit.createAction('user/updateUserSlippageTolerance') +var updateUserDeadline = toolkit.createAction('user/updateUserDeadline') +var addSerializedToken = toolkit.createAction('user/addSerializedToken') +var removeSerializedToken = toolkit.createAction('user/removeSerializedToken') +var addSerializedPair = toolkit.createAction('user/addSerializedPair') +var removeSerializedPair = toolkit.createAction('user/removeSerializedPair') + +function parsedQueryString(search) { + if (!search) { + // react-router-dom places search string in the hash + var hash = window.location.hash + search = hash.substr(hash.indexOf('?')) + } + return search && search.length > 1 ? qs.parse(search, { parseArrays: false, ignoreQueryPrefix: true }) : {} +} +function useParsedQueryString() { + var search = reactRouterDom.useLocation().search + return React.useMemo( + function () { + return parsedQueryString(search) + }, + [search] + ) } -/** - * Debounces updates to a value. - * Non-primitives *must* wrap the value in useMemo, or the value will be updated due to referential inequality. - */ -// modified from https://usehooks.com/useDebounce/ -function useDebounce(value, delay) { - var _a = __read(React.useState(value), 2), debouncedValue = _a[0], setDebouncedValue = _a[1]; - React.useEffect(function () { - // Update debounced value after delay - var handler = setTimeout(function () { - setDebouncedValue(value); - }, delay); - // Cancel the timeout if value changes (also on delay change or unmount) - // This is how we prevent debounced value from updating if value is changed ... - // .. within the delay period. Timeout gets cleared and restarted. - return function () { - clearTimeout(handler); - }; - }, [value, delay]); - return debouncedValue; +function ApeModeQueryParamReader() { + useApeModeQueryParamReader() + return null +} +function useApeModeQueryParamReader() { + var dispatch = useAppDispatch() + var ape = useParsedQueryString().ape + React.useEffect(function () { + if (typeof ape !== 'string') return + if (ape === '' || ape.toLowerCase() === 'true') { + dispatch(updateUserExpertMode({ userExpertMode: true })) + } + }) } -var VISIBILITY_STATE_SUPPORTED = 'visibilityState' in document; -function isWindowVisible() { - return !VISIBILITY_STATE_SUPPORTED || document.visibilityState !== 'hidden'; -} -/** - * Returns whether the window is currently visible to the user. - */ -function useIsWindowVisible() { - var _a = __read(React.useState(isWindowVisible()), 2), focused = _a[0], setFocused = _a[1]; - var listener = React.useCallback(function () { - setFocused(isWindowVisible()); - }, [setFocused]); - React.useEffect(function () { - if (!VISIBILITY_STATE_SUPPORTED) - return undefined; - document.addEventListener('visibilitychange', listener); - return function () { - document.removeEventListener('visibilitychange', listener); - }; - }, [listener]); - return focused; +var NetworkContextName = 'NETWORK' +var IS_IN_IFRAME = window.parent !== window +// 30 minutes, denominated in seconds +var DEFAULT_DEADLINE_FROM_NOW = 60 * 30 +var L2_DEADLINE_FROM_NOW = 60 * 5 +// transaction popup dismisal amounts +var DEFAULT_TXN_DISMISS_MS = 25000 +var L2_TXN_DISMISS_MS = 5000 +// used for rewards deadlines +JSBI__default['default'].BigInt(60 * 60 * 24 * 7) +JSBI__default['default'].BigInt(0) +// one basis JSBI.BigInt +var BIPS_BASE = JSBI__default['default'].BigInt(10000) +new sdkCore.Percent(JSBI__default['default'].BigInt(1), BIPS_BASE) +// used for warning states +var ALLOWED_PRICE_IMPACT_LOW = new sdkCore.Percent(JSBI__default['default'].BigInt(100), BIPS_BASE) // 1% +var ALLOWED_PRICE_IMPACT_MEDIUM = new sdkCore.Percent(JSBI__default['default'].BigInt(300), BIPS_BASE) // 3% +var ALLOWED_PRICE_IMPACT_HIGH = new sdkCore.Percent(JSBI__default['default'].BigInt(500), BIPS_BASE) // 5% +// if the price slippage exceeds this number, force the user to type 'confirm' to execute +var PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN = new sdkCore.Percent(JSBI__default['default'].BigInt(1000), BIPS_BASE) // 10% +// for non expert mode disable swaps above this +var BLOCKED_PRICE_IMPACT_NON_EXPERT = new sdkCore.Percent(JSBI__default['default'].BigInt(1500), BIPS_BASE) // 15% +var BETTER_TRADE_LESS_HOPS_THRESHOLD = new sdkCore.Percent(JSBI__default['default'].BigInt(50), BIPS_BASE) +var ZERO_PERCENT = new sdkCore.Percent('0') +new sdkCore.Percent(JSBI__default['default'].BigInt(200), BIPS_BASE) +var ONE_HUNDRED_PERCENT = new sdkCore.Percent('1') + +function useActiveWeb3React() { + // if (false) { + // return useWidgetsWeb3React() + // } + var interfaceContext = core.useWeb3React() + var interfaceNetworkContext = core.useWeb3React(NetworkContextName) + if (interfaceContext.active) { + return interfaceContext + } + return interfaceNetworkContext } -function useBlock() { - var _a = useActiveWeb3React(), chainId = _a.chainId, library = _a.library; - var windowVisible = useIsWindowVisible(); - var _b = __read(React.useState({ chainId: chainId }), 2), state = _b[0], setState = _b[1]; - var onBlock = React.useCallback(function (block) { - setState(function (state) { - if (state.chainId === chainId) { - if (typeof state.block !== 'number') - return { chainId: chainId, block: block }; - return { chainId: chainId, block: Math.max(block, state.block) }; - } - return state; - }); - }, [chainId]); - React.useEffect(function () { - if (library && chainId && windowVisible) { - setState({ chainId: chainId }); - library - .getBlockNumber() - .then(onBlock) - .catch(function (error) { - console.error("Failed to get block number for chainId " + chainId, error); - }); - library.on('block', onBlock); - return function () { - library.removeListener('block', onBlock); - }; - } - return undefined; - }, [chainId, library, onBlock, windowVisible]); - var debouncedBlock = useDebounce(state.block, 100); - return state.block ? debouncedBlock : undefined; -} -var blockAtom = jotai.atom(undefined); -function BlockUpdater() { - var setBlock = utils.useUpdateAtom(blockAtom); - var block = useBlock(); - React.useEffect(function () { - setBlock(block); - }, [block, setBlock]); - return null; -} -/** Requires that BlockUpdater be installed in the DOM tree. */ -function useBlockNumber() { - var chainId = useActiveWeb3React().chainId; - var block = utils.useAtomValue(blockAtom); - return chainId ? block : undefined; -} -function useFastForwardBlockNumber() { - return utils.useUpdateAtom(blockAtom); +var Circle$1 = + 'data:image/svg+xml,%3Csvg%20width%3D%2294%22%20height%3D%2294%22%20viewBox%3D%220%200%2094%2094%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%20%20%3Cpath%20d%3D%22M92%2047C92%2022.1472%2071.8528%202%2047%202C22.1472%202%202%2022.1472%202%2047C2%2071.8528%2022.1472%2092%2047%2092%22%20stroke%3D%22%232172E5%22%20stroke-width%3D%223%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E' + +var tokenLogo = + 'data:image/png;base64,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' + +// returns the checksummed address if the address is valid, otherwise returns false +function isAddress(value) { + try { + return address.getAddress(value) + } catch (_a) { + return false + } +} +// shorten the checksummed version of the input address to have 0x + 4 characters at start and end +function shortenAddress(address, chars) { + if (chars === void 0) { + chars = 4 + } + var parsed = isAddress(address) + if (!parsed) { + throw Error("Invalid 'address' parameter '" + address + "'.") + } + return parsed.substring(0, chars + 2) + '...' + parsed.substring(42 - chars) +} +// account is not optional +function getSigner(library, account) { + return library.getSigner(account).connectUnchecked() +} +// account is optional +function getProviderOrSigner(library, account) { + return account ? getSigner(library, account) : library +} +// account is optional +function getContract(address, ABI, library, account) { + if (!isAddress(address) || address === constants.AddressZero) { + throw Error("Invalid 'address' parameter '" + address + "'.") + } + return new contracts.Contract(address, ABI, getProviderOrSigner(library, account)) +} +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') // $& means the whole matched string +} +function isTokenOnList(chainTokenMap, token) { + var _a + return Boolean( + (token === null || token === void 0 ? void 0 : token.isToken) && + ((_a = chainTokenMap[token.chainId]) === null || _a === void 0 ? void 0 : _a[token.address]) + ) +} + +/** + * Debounces updates to a value. + * Non-primitives *must* wrap the value in useMemo, or the value will be updated due to referential inequality. + */ +// modified from https://usehooks.com/useDebounce/ +function useDebounce(value, delay) { + var _a = __read(React.useState(value), 2), + debouncedValue = _a[0], + setDebouncedValue = _a[1] + React.useEffect( + function () { + // Update debounced value after delay + var handler = setTimeout(function () { + setDebouncedValue(value) + }, delay) + // Cancel the timeout if value changes (also on delay change or unmount) + // This is how we prevent debounced value from updating if value is changed ... + // .. within the delay period. Timeout gets cleared and restarted. + return function () { + clearTimeout(handler) + } + }, + [value, delay] + ) + return debouncedValue +} + +var VISIBILITY_STATE_SUPPORTED = 'visibilityState' in document +function isWindowVisible() { + return !VISIBILITY_STATE_SUPPORTED || document.visibilityState !== 'hidden' +} +/** + * Returns whether the window is currently visible to the user. + */ +function useIsWindowVisible() { + var _a = __read(React.useState(isWindowVisible()), 2), + focused = _a[0], + setFocused = _a[1] + var listener = React.useCallback( + function () { + setFocused(isWindowVisible()) + }, + [setFocused] + ) + React.useEffect( + function () { + if (!VISIBILITY_STATE_SUPPORTED) return undefined + document.addEventListener('visibilitychange', listener) + return function () { + document.removeEventListener('visibilitychange', listener) + } + }, + [listener] + ) + return focused +} + +function useBlock() { + var _a = useActiveWeb3React(), + chainId = _a.chainId, + library = _a.library + var windowVisible = useIsWindowVisible() + var _b = __read(React.useState({ chainId }), 2), + state = _b[0], + setState = _b[1] + var onBlock = React.useCallback( + function (block) { + setState(function (state) { + if (state.chainId === chainId) { + if (typeof state.block !== 'number') return { chainId, block } + return { chainId, block: Math.max(block, state.block) } + } + return state + }) + }, + [chainId] + ) + React.useEffect( + function () { + if (library && chainId && windowVisible) { + setState({ chainId }) + library + .getBlockNumber() + .then(onBlock) + .catch(function (error) { + console.error('Failed to get block number for chainId ' + chainId, error) + }) + library.on('block', onBlock) + return function () { + library.removeListener('block', onBlock) + } + } + return undefined + }, + [chainId, library, onBlock, windowVisible] + ) + var debouncedBlock = useDebounce(state.block, 100) + return state.block ? debouncedBlock : undefined +} +var blockAtom = jotai.atom(undefined) +function BlockUpdater() { + var setBlock = utils.useUpdateAtom(blockAtom) + var block = useBlock() + React.useEffect( + function () { + setBlock(block) + }, + [block, setBlock] + ) + return null +} +/** Requires that BlockUpdater be installed in the DOM tree. */ +function useBlockNumber() { + var chainId = useActiveWeb3React().chainId + var block = utils.useAtomValue(blockAtom) + return chainId ? block : undefined +} +function useFastForwardBlockNumber() { + return utils.useUpdateAtom(blockAtom) } var abi$6 = [ - { - inputs: [ - { - internalType: "address", - name: "_rewardsDistribution", - type: "address" - }, - { - internalType: "address", - name: "_rewardsToken", - type: "address" - }, - { - internalType: "address", - name: "_stakingToken", - type: "address" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "constructor" - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "reward", - type: "uint256" - } - ], - name: "RewardAdded", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "user", - type: "address" - }, - { - indexed: false, - internalType: "uint256", - name: "reward", - type: "uint256" - } - ], - name: "RewardPaid", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "user", - type: "address" - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256" - } - ], - name: "Staked", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "user", - type: "address" - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256" - } - ], - name: "Withdrawn", - type: "event" - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "account", - type: "address" - } - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "account", - type: "address" - } - ], - name: "earned", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - ], - name: "exit", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - ], - name: "getReward", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "getRewardForDuration", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "lastTimeRewardApplicable", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "lastUpdateTime", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "reward", - type: "uint256" - } - ], - name: "notifyRewardAmount", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "periodFinish", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "rewardPerToken", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "rewardPerTokenStored", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "rewardRate", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - name: "rewards", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "rewardsDistribution", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "rewardsDuration", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "rewardsToken", - outputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256" - } - ], - name: "stake", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - }, - { - internalType: "uint8", - name: "v", - type: "uint8" - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32" - } - ], - name: "stakeWithPermit", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "stakingToken", - outputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - name: "userRewardPerTokenPaid", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256" - } - ], - name: "withdraw", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - } -]; - -var abi$5 = [ - { - inputs: [ - { - internalType: "address", - name: "token_", - type: "address" - }, - { - internalType: "bytes32", - name: "merkleRoot_", - type: "bytes32" - } - ], - stateMutability: "nonpayable", - type: "constructor" - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "index", - type: "uint256" - }, - { - indexed: false, - internalType: "address", - name: "account", - type: "address" - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256" - } - ], - name: "Claimed", - type: "event" - }, - { - inputs: [ - { - internalType: "uint256", - name: "index", - type: "uint256" - }, - { - internalType: "address", - name: "account", - type: "address" - }, - { - internalType: "uint256", - name: "amount", - type: "uint256" - }, - { - internalType: "bytes32[]", - name: "merkleProof", - type: "bytes32[]" - } - ], - name: "claim", - outputs: [ - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "index", - type: "uint256" - } - ], - name: "isClaimed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - ], - name: "merkleRoot", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - ], - name: "token", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - stateMutability: "view", - type: "function" - } -]; - -var abi$4 = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address" - }, - { - indexed: true, - internalType: "address", - name: "spender", - type: "address" - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256" - } - ], - name: "Approval", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "sender", - type: "address" - }, - { - indexed: false, - internalType: "uint256", - name: "amount0", - type: "uint256" - }, - { - indexed: false, - internalType: "uint256", - name: "amount1", - type: "uint256" - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address" - } - ], - name: "Burn", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "sender", - type: "address" - }, - { - indexed: false, - internalType: "uint256", - name: "amount0", - type: "uint256" - }, - { - indexed: false, - internalType: "uint256", - name: "amount1", - type: "uint256" - } - ], - name: "Mint", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "sender", - type: "address" - }, - { - indexed: false, - internalType: "uint256", - name: "amount0In", - type: "uint256" - }, - { - indexed: false, - internalType: "uint256", - name: "amount1In", - type: "uint256" - }, - { - indexed: false, - internalType: "uint256", - name: "amount0Out", - type: "uint256" - }, - { - indexed: false, - internalType: "uint256", - name: "amount1Out", - type: "uint256" - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address" - } - ], - name: "Swap", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint112", - name: "reserve0", - type: "uint112" - }, - { - indexed: false, - internalType: "uint112", - name: "reserve1", - type: "uint112" - } - ], - name: "Sync", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address" - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address" - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256" - } - ], - name: "Transfer", - type: "event" - }, - { - constant: true, - inputs: [ - ], - name: "DOMAIN_SEPARATOR", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "MINIMUM_LIQUIDITY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "pure", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "PERMIT_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32" - } - ], - payable: false, - stateMutability: "pure", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "owner", - type: "address" - }, - { - internalType: "address", - name: "spender", - type: "address" - } - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "spender", - type: "address" - }, - { - internalType: "uint256", - name: "value", - type: "uint256" - } - ], - name: "approve", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "owner", - type: "address" - } - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "to", - type: "address" - } - ], - name: "burn", - outputs: [ - { - internalType: "uint256", - name: "amount0", - type: "uint256" - }, - { - internalType: "uint256", - name: "amount1", - type: "uint256" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8" - } - ], - payable: false, - stateMutability: "pure", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "factory", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "getReserves", - outputs: [ - { - internalType: "uint112", - name: "reserve0", - type: "uint112" - }, - { - internalType: "uint112", - name: "reserve1", - type: "uint112" - }, - { - internalType: "uint32", - name: "blockTimestampLast", - type: "uint32" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "", - type: "address" - }, - { - internalType: "address", - name: "", - type: "address" - } - ], - name: "initialize", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "kLast", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "to", - type: "address" - } - ], - name: "mint", - outputs: [ - { - internalType: "uint256", - name: "liquidity", - type: "uint256" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string" - } - ], - payable: false, - stateMutability: "pure", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "owner", - type: "address" - } - ], - name: "nonces", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "owner", - type: "address" - }, - { - internalType: "address", - name: "spender", - type: "address" - }, - { - internalType: "uint256", - name: "value", - type: "uint256" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - }, - { - internalType: "uint8", - name: "v", - type: "uint8" - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32" - } - ], - name: "permit", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "price0CumulativeLast", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "price1CumulativeLast", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "to", - type: "address" - } - ], - name: "skim", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "amount0Out", - type: "uint256" - }, - { - internalType: "uint256", - name: "amount1Out", - type: "uint256" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "bytes", - name: "data", - type: "bytes" - } - ], - name: "swap", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string" - } - ], - payable: false, - stateMutability: "pure", - type: "function" - }, - { - constant: false, - inputs: [ - ], - name: "sync", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "token0", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "token1", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "value", - type: "uint256" - } - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "from", - type: "address" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "value", - type: "uint256" - } - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - } -]; - -var abi$3 = [ - { - inputs: [ - ], - name: "WETH", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - stateMutability: "pure", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "tokenA", - type: "address" - }, - { - internalType: "address", - name: "tokenB", - type: "address" - }, - { - internalType: "uint256", - name: "amountADesired", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountBDesired", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountAMin", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountBMin", - type: "uint256" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "addLiquidity", - outputs: [ - { - internalType: "uint256", - name: "amountA", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountB", - type: "uint256" - }, - { - internalType: "uint256", - name: "liquidity", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address" - }, - { - internalType: "uint256", - name: "amountTokenDesired", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountTokenMin", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountETHMin", - type: "uint256" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "addLiquidityETH", - outputs: [ - { - internalType: "uint256", - name: "amountToken", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountETH", - type: "uint256" - }, - { - internalType: "uint256", - name: "liquidity", - type: "uint256" - } - ], - stateMutability: "payable", - type: "function" - }, - { - inputs: [ - ], - name: "factory", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - stateMutability: "pure", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256" - }, - { - internalType: "uint256", - name: "reserveIn", - type: "uint256" - }, - { - internalType: "uint256", - name: "reserveOut", - type: "uint256" - } - ], - name: "getAmountIn", - outputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - } - ], - stateMutability: "pure", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - }, - { - internalType: "uint256", - name: "reserveIn", - type: "uint256" - }, - { - internalType: "uint256", - name: "reserveOut", - type: "uint256" - } - ], - name: "getAmountOut", - outputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256" - } - ], - stateMutability: "pure", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - } - ], - name: "getAmountsIn", - outputs: [ - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - } - ], - name: "getAmountsOut", - outputs: [ - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountA", - type: "uint256" - }, - { - internalType: "uint256", - name: "reserveA", - type: "uint256" - }, - { - internalType: "uint256", - name: "reserveB", - type: "uint256" - } - ], - name: "quote", - outputs: [ - { - internalType: "uint256", - name: "amountB", - type: "uint256" - } - ], - stateMutability: "pure", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "tokenA", - type: "address" - }, - { - internalType: "address", - name: "tokenB", - type: "address" - }, - { - internalType: "uint256", - name: "liquidity", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountAMin", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountBMin", - type: "uint256" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "removeLiquidity", - outputs: [ - { - internalType: "uint256", - name: "amountA", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountB", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address" - }, - { - internalType: "uint256", - name: "liquidity", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountTokenMin", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountETHMin", - type: "uint256" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "removeLiquidityETH", - outputs: [ - { - internalType: "uint256", - name: "amountToken", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountETH", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address" - }, - { - internalType: "uint256", - name: "liquidity", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountTokenMin", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountETHMin", - type: "uint256" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "removeLiquidityETHSupportingFeeOnTransferTokens", - outputs: [ - { - internalType: "uint256", - name: "amountETH", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address" - }, - { - internalType: "uint256", - name: "liquidity", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountTokenMin", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountETHMin", - type: "uint256" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - }, - { - internalType: "bool", - name: "approveMax", - type: "bool" - }, - { - internalType: "uint8", - name: "v", - type: "uint8" - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32" - } - ], - name: "removeLiquidityETHWithPermit", - outputs: [ - { - internalType: "uint256", - name: "amountToken", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountETH", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address" - }, - { - internalType: "uint256", - name: "liquidity", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountTokenMin", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountETHMin", - type: "uint256" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - }, - { - internalType: "bool", - name: "approveMax", - type: "bool" - }, - { - internalType: "uint8", - name: "v", - type: "uint8" - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32" - } - ], - name: "removeLiquidityETHWithPermitSupportingFeeOnTransferTokens", - outputs: [ - { - internalType: "uint256", - name: "amountETH", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "tokenA", - type: "address" - }, - { - internalType: "address", - name: "tokenB", - type: "address" - }, - { - internalType: "uint256", - name: "liquidity", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountAMin", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountBMin", - type: "uint256" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - }, - { - internalType: "bool", - name: "approveMax", - type: "bool" - }, - { - internalType: "uint8", - name: "v", - type: "uint8" - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32" - } - ], - name: "removeLiquidityWithPermit", - outputs: [ - { - internalType: "uint256", - name: "amountA", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountB", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "swapETHForExactTokens", - outputs: [ - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]" - } - ], - stateMutability: "payable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOutMin", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "swapExactETHForTokens", - outputs: [ - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]" - } - ], - stateMutability: "payable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOutMin", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "swapExactETHForTokensSupportingFeeOnTransferTokens", - outputs: [ - ], - stateMutability: "payable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountOutMin", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "swapExactTokensForETH", - outputs: [ - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountOutMin", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "swapExactTokensForETHSupportingFeeOnTransferTokens", - outputs: [ - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountOutMin", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "swapExactTokensForTokens", - outputs: [ - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountOutMin", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "swapExactTokensForTokensSupportingFeeOnTransferTokens", - outputs: [ - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountInMax", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "swapTokensForExactETH", - outputs: [ - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountInMax", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "swapTokensForExactTokens", - outputs: [ - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]" - } - ], - stateMutability: "nonpayable", - type: "function" - } -]; - -var abi$2 = [ - { - inputs: [ - { - internalType: "address", - name: "_factory", - type: "address" - }, - { - internalType: "address", - name: "_WETH9", - type: "address" - } - ], - stateMutability: "nonpayable", - type: "constructor" - }, - { - inputs: [ - ], - name: "WETH9", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - ], - name: "factory", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "bytes", - name: "path", - type: "bytes" - }, - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - } - ], - name: "quoteExactInput", - outputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "tokenIn", - type: "address" - }, - { - internalType: "address", - name: "tokenOut", - type: "address" - }, - { - internalType: "uint24", - name: "fee", - type: "uint24" - }, - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - }, - { - internalType: "uint160", - name: "sqrtPriceLimitX96", - type: "uint160" - } - ], - name: "quoteExactInputSingle", - outputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "bytes", - name: "path", - type: "bytes" - }, - { - internalType: "uint256", - name: "amountOut", - type: "uint256" - } - ], - name: "quoteExactOutput", - outputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "tokenIn", - type: "address" - }, - { - internalType: "address", - name: "tokenOut", - type: "address" - }, - { - internalType: "uint24", - name: "fee", - type: "uint24" - }, - { - internalType: "uint256", - name: "amountOut", - type: "uint256" - }, - { - internalType: "uint160", - name: "sqrtPriceLimitX96", - type: "uint160" - } - ], - name: "quoteExactOutputSingle", - outputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "int256", - name: "amount0Delta", - type: "int256" - }, - { - internalType: "int256", - name: "amount1Delta", - type: "int256" - }, - { - internalType: "bytes", - name: "path", - type: "bytes" - } - ], - name: "uniswapV3SwapCallback", - outputs: [ - ], - stateMutability: "view", - type: "function" - } -]; - -var abi$1 = [ - { - inputs: [ - ], - name: "getCurrentBlockTimestamp", - outputs: [ - { - internalType: "uint256", - name: "timestamp", - type: "uint256" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "addr", - type: "address" - } - ], - name: "getEthBalance", - outputs: [ - { - internalType: "uint256", - name: "balance", - type: "uint256" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "target", - type: "address" - }, - { - internalType: "uint256", - name: "gasLimit", - type: "uint256" - }, - { - internalType: "bytes", - name: "callData", - type: "bytes" - } - ], - internalType: "struct UniswapInterfaceMulticall.Call[]", - name: "calls", - type: "tuple[]" - } - ], - name: "multicall", - outputs: [ - { - internalType: "uint256", - name: "blockNumber", - type: "uint256" - }, - { - components: [ - { - internalType: "bool", - name: "success", - type: "bool" - }, - { - internalType: "uint256", - name: "gasUsed", - type: "uint256" - }, - { - internalType: "bytes", - name: "returnData", - type: "bytes" - } - ], - internalType: "struct UniswapInterfaceMulticall.Result[]", - name: "returnData", - type: "tuple[]" - } - ], - stateMutability: "nonpayable", - type: "function" - } -]; - -var ARGENT_WALLET_DETECTOR_ABI = [ - { - inputs: [ - { - internalType: "bytes32[]", - name: "_codes", - type: "bytes32[]" - }, - { - internalType: "address[]", - name: "_implementations", - type: "address[]" - } - ], - stateMutability: "nonpayable", - type: "constructor" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "code", - type: "bytes32" - } - ], - name: "CodeAdded", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "implementation", - type: "address" - } - ], - name: "ImplementationAdded", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_newOwner", - type: "address" - } - ], - name: "OwnerChanged", - type: "event" - }, - { - inputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32" - } - ], - name: "acceptedCodes", - outputs: [ - { - internalType: "bool", - name: "exists", - type: "bool" - }, - { - internalType: "uint128", - name: "index", - type: "uint128" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - name: "acceptedImplementations", - outputs: [ - { - internalType: "bool", - name: "exists", - type: "bool" - }, - { - internalType: "uint128", - name: "index", - type: "uint128" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "bytes32", - name: "_code", - type: "bytes32" - } - ], - name: "addCode", - outputs: [ - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "_argentWallet", - type: "address" - } - ], - name: "addCodeAndImplementationFromWallet", - outputs: [ - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "_impl", - type: "address" - } - ], - name: "addImplementation", - outputs: [ - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "_newOwner", - type: "address" - } - ], - name: "changeOwner", - outputs: [ - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - ], - name: "getCodes", - outputs: [ - { - internalType: "bytes32[]", - name: "", - type: "bytes32[]" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - ], - name: "getImplementations", - outputs: [ - { - internalType: "address[]", - name: "", - type: "address[]" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "_wallet", - type: "address" - } - ], - name: "isArgentWallet", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - ], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - stateMutability: "view", - type: "function" - } -]; - -var EIP_2612 = [ - { - constant: true, - inputs: [ - { - name: "owner", - type: "address" - } - ], - name: "nonces", - outputs: [ - { - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "DOMAIN_SEPARATOR", - outputs: [ - { - name: "", - type: "bytes32" - } - ], - payable: false, - stateMutability: "view", - type: "function" - } -]; - -var ENS_PUBLIC_RESOLVER_ABI = [ - { - inputs: [ - { - internalType: "contract ENS", - name: "_ens", - type: "address" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "constructor" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: true, - internalType: "uint256", - name: "contentType", - type: "uint256" - } - ], - name: "ABIChanged", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: false, - internalType: "address", - name: "a", - type: "address" - } - ], - name: "AddrChanged", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: false, - internalType: "uint256", - name: "coinType", - type: "uint256" - }, - { - indexed: false, - internalType: "bytes", - name: "newAddress", - type: "bytes" - } - ], - name: "AddressChanged", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: true, - internalType: "address", - name: "owner", - type: "address" - }, - { - indexed: true, - internalType: "address", - name: "target", - type: "address" - }, - { - indexed: false, - internalType: "bool", - name: "isAuthorised", - type: "bool" - } - ], - name: "AuthorisationChanged", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: false, - internalType: "bytes", - name: "hash", - type: "bytes" - } - ], - name: "ContenthashChanged", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: false, - internalType: "bytes", - name: "name", - type: "bytes" - }, - { - indexed: false, - internalType: "uint16", - name: "resource", - type: "uint16" - }, - { - indexed: false, - internalType: "bytes", - name: "record", - type: "bytes" - } - ], - name: "DNSRecordChanged", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: false, - internalType: "bytes", - name: "name", - type: "bytes" - }, - { - indexed: false, - internalType: "uint16", - name: "resource", - type: "uint16" - } - ], - name: "DNSRecordDeleted", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - } - ], - name: "DNSZoneCleared", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: true, - internalType: "bytes4", - name: "interfaceID", - type: "bytes4" - }, - { - indexed: false, - internalType: "address", - name: "implementer", - type: "address" - } - ], - name: "InterfaceChanged", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: false, - internalType: "string", - name: "name", - type: "string" - } - ], - name: "NameChanged", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: false, - internalType: "bytes32", - name: "x", - type: "bytes32" - }, - { - indexed: false, - internalType: "bytes32", - name: "y", - type: "bytes32" - } - ], - name: "PubkeyChanged", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: true, - internalType: "string", - name: "indexedKey", - type: "string" - }, - { - indexed: false, - internalType: "string", - name: "key", - type: "string" - } - ], - name: "TextChanged", - type: "event" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "uint256", - name: "contentTypes", - type: "uint256" - } - ], - name: "ABI", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - }, - { - internalType: "bytes", - name: "", - type: "bytes" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - } - ], - name: "addr", - outputs: [ - { - internalType: "address payable", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32" - }, - { - internalType: "address", - name: "", - type: "address" - }, - { - internalType: "address", - name: "", - type: "address" - } - ], - name: "authorisations", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - } - ], - name: "clearDNSZone", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - } - ], - name: "contenthash", - outputs: [ - { - internalType: "bytes", - name: "", - type: "bytes" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "name", - type: "bytes32" - }, - { - internalType: "uint16", - name: "resource", - type: "uint16" - } - ], - name: "dnsRecord", - outputs: [ - { - internalType: "bytes", - name: "", - type: "bytes" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "name", - type: "bytes32" - } - ], - name: "hasDNSRecords", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "bytes4", - name: "interfaceID", - type: "bytes4" - } - ], - name: "interfaceImplementer", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - } - ], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - } - ], - name: "pubkey", - outputs: [ - { - internalType: "bytes32", - name: "x", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "y", - type: "bytes32" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "uint256", - name: "contentType", - type: "uint256" - }, - { - internalType: "bytes", - name: "data", - type: "bytes" - } - ], - name: "setABI", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "uint256", - name: "coinType", - type: "uint256" - }, - { - internalType: "bytes", - name: "a", - type: "bytes" - } - ], - name: "setAddr", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "address", - name: "a", - type: "address" - } - ], - name: "setAddr", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "address", - name: "target", - type: "address" - }, - { - internalType: "bool", - name: "isAuthorised", - type: "bool" - } - ], - name: "setAuthorisation", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "bytes", - name: "hash", - type: "bytes" - } - ], - name: "setContenthash", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "bytes", - name: "data", - type: "bytes" - } - ], - name: "setDNSRecords", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "bytes4", - name: "interfaceID", - type: "bytes4" - }, - { - internalType: "address", - name: "implementer", - type: "address" - } - ], - name: "setInterface", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "string", - name: "name", - type: "string" - } - ], - name: "setName", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "x", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "y", - type: "bytes32" - } - ], - name: "setPubkey", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "string", - name: "key", - type: "string" - }, - { - internalType: "string", - name: "value", - type: "string" - } - ], - name: "setText", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes4", - name: "interfaceID", - type: "bytes4" - } - ], - name: "supportsInterface", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "pure", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "string", - name: "key", - type: "string" - } - ], - name: "text", - outputs: [ - { - internalType: "string", - name: "", - type: "string" - } - ], - payable: false, - stateMutability: "view", - type: "function" - } -]; - -var ENS_ABI = [ - { - inputs: [ - { - internalType: "contract ENS", - name: "_old", - type: "address" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "constructor" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address" - }, - { - indexed: true, - internalType: "address", - name: "operator", - type: "address" - }, - { - indexed: false, - internalType: "bool", - name: "approved", - type: "bool" - } - ], - name: "ApprovalForAll", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: true, - internalType: "bytes32", - name: "label", - type: "bytes32" - }, - { - indexed: false, - internalType: "address", - name: "owner", - type: "address" - } - ], - name: "NewOwner", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: false, - internalType: "address", - name: "resolver", - type: "address" - } - ], - name: "NewResolver", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: false, - internalType: "uint64", - name: "ttl", - type: "uint64" - } - ], - name: "NewTTL", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: false, - internalType: "address", - name: "owner", - type: "address" - } - ], - name: "Transfer", - type: "event" - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "owner", - type: "address" - }, - { - internalType: "address", - name: "operator", - type: "address" - } - ], - name: "isApprovedForAll", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "old", - outputs: [ - { - internalType: "contract ENS", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - } - ], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - } - ], - name: "recordExists", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - } - ], - name: "resolver", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "operator", - type: "address" - }, - { - internalType: "bool", - name: "approved", - type: "bool" - } - ], - name: "setApprovalForAll", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "address", - name: "owner", - type: "address" - } - ], - name: "setOwner", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "address", - name: "owner", - type: "address" - }, - { - internalType: "address", - name: "resolver", - type: "address" - }, - { - internalType: "uint64", - name: "ttl", - type: "uint64" - } - ], - name: "setRecord", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "address", - name: "resolver", - type: "address" - } - ], - name: "setResolver", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "label", - type: "bytes32" - }, - { - internalType: "address", - name: "owner", - type: "address" - } - ], - name: "setSubnodeOwner", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "label", - type: "bytes32" - }, - { - internalType: "address", - name: "owner", - type: "address" - }, - { - internalType: "address", - name: "resolver", - type: "address" - }, - { - internalType: "uint64", - name: "ttl", - type: "uint64" - } - ], - name: "setSubnodeRecord", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "uint64", - name: "ttl", - type: "uint64" - } - ], - name: "setTTL", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - } - ], - name: "ttl", - outputs: [ - { - internalType: "uint64", - name: "", - type: "uint64" - } - ], - payable: false, - stateMutability: "view", - type: "function" - } -]; - -var ERC20ABI = [ - { - constant: true, - inputs: [ - ], - name: "name", - outputs: [ - { - name: "", - type: "string" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - name: "_spender", - type: "address" - }, - { - name: "_value", - type: "uint256" - } - ], - name: "approve", - outputs: [ - { - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "totalSupply", - outputs: [ - { - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - name: "_from", - type: "address" - }, - { - name: "_to", - type: "address" - }, - { - name: "_value", - type: "uint256" - } - ], - name: "transferFrom", - outputs: [ - { - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "decimals", - outputs: [ - { - name: "", - type: "uint8" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - name: "_owner", - type: "address" - } - ], - name: "balanceOf", - outputs: [ - { - name: "balance", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "symbol", - outputs: [ - { - name: "", - type: "string" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - name: "_to", - type: "address" - }, - { - name: "_value", - type: "uint256" - } - ], - name: "transfer", - outputs: [ - { - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - { - name: "_owner", - type: "address" - }, - { - name: "_spender", - type: "address" - } - ], - name: "allowance", - outputs: [ - { - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - payable: true, - stateMutability: "payable", - type: "fallback" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: "owner", - type: "address" - }, - { - indexed: true, - name: "spender", - type: "address" - }, - { - indexed: false, - name: "value", - type: "uint256" - } - ], - name: "Approval", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: "from", - type: "address" - }, - { - indexed: true, - name: "to", - type: "address" - }, - { - indexed: false, - name: "value", - type: "uint256" - } - ], - name: "Transfer", - type: "event" - } -]; - -var ERC20_BYTES32_ABI = [ - { - constant: true, - inputs: [ - ], - name: "name", - outputs: [ - { - name: "", - type: "bytes32" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "symbol", - outputs: [ - { - name: "", - type: "bytes32" - } - ], - payable: false, - stateMutability: "view", - type: "function" - } -]; - -var ERC721_ABI = [ - { - inputs: [ - { - internalType: "uint256", - name: "tokenId", - type: "uint256" - } - ], - name: "ownerOf", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "tokenId", - type: "uint256" - } - ], - name: "tokenURI", - outputs: [ - { - internalType: "string", - name: "", - type: "string" - } - ], - stateMutability: "view", - type: "function" - } -]; - -var ERC1155_ABI = [ - { - constant: true, - inputs: [ - { - internalType: "address", - name: "_owner", - type: "address" - }, - { - internalType: "uint256", - name: "_id", - type: "uint256" - } - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "uint256", - name: "_id", - type: "uint256" - } - ], - name: "uri", - outputs: [ - { - internalType: "string", - name: "", - type: "string" - } - ], - payable: false, - stateMutability: "view", - type: "function" - } -]; - -var WETH_ABI = [ - { - constant: true, - inputs: [ - ], - name: "name", - outputs: [ - { - name: "", - type: "string" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - name: "guy", - type: "address" - }, - { - name: "wad", - type: "uint256" - } - ], - name: "approve", - outputs: [ - { - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "totalSupply", - outputs: [ - { - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - name: "src", - type: "address" - }, - { - name: "dst", - type: "address" - }, - { - name: "wad", - type: "uint256" - } - ], - name: "transferFrom", - outputs: [ - { - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - name: "wad", - type: "uint256" - } - ], - name: "withdraw", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "decimals", - outputs: [ - { - name: "", - type: "uint8" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - name: "", - type: "address" - } - ], - name: "balanceOf", - outputs: [ - { - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "symbol", - outputs: [ - { - name: "", - type: "string" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - name: "dst", - type: "address" - }, - { - name: "wad", - type: "uint256" - } - ], - name: "transfer", - outputs: [ - { - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - ], - name: "deposit", - outputs: [ - ], - payable: true, - stateMutability: "payable", - type: "function" - }, - { - constant: true, - inputs: [ - { - name: "", - type: "address" - }, - { - name: "", - type: "address" - } - ], - name: "allowance", - outputs: [ - { - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - payable: true, - stateMutability: "payable", - type: "fallback" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: "src", - type: "address" - }, - { - indexed: true, - name: "guy", - type: "address" - }, - { - indexed: false, - name: "wad", - type: "uint256" - } - ], - name: "Approval", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: "src", - type: "address" - }, - { - indexed: true, - name: "dst", - type: "address" - }, - { - indexed: false, - name: "wad", - type: "uint256" - } - ], - name: "Transfer", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: "dst", - type: "address" - }, - { - indexed: false, - name: "wad", - type: "uint256" - } - ], - name: "Deposit", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: "src", - type: "address" - }, - { - indexed: false, - name: "wad", - type: "uint256" - } - ], - name: "Withdrawal", - type: "event" - } -]; - -var _a$h; -/** - * List of all the networks supported by the Uniswap Interface - */ -var SupportedChainId; -(function (SupportedChainId) { - SupportedChainId[SupportedChainId["MAINNET"] = 1] = "MAINNET"; - SupportedChainId[SupportedChainId["ROPSTEN"] = 3] = "ROPSTEN"; - SupportedChainId[SupportedChainId["RINKEBY"] = 4] = "RINKEBY"; - SupportedChainId[SupportedChainId["GOERLI"] = 5] = "GOERLI"; - SupportedChainId[SupportedChainId["KOVAN"] = 42] = "KOVAN"; - SupportedChainId[SupportedChainId["ARBITRUM_ONE"] = 42161] = "ARBITRUM_ONE"; - SupportedChainId[SupportedChainId["ARBITRUM_RINKEBY"] = 421611] = "ARBITRUM_RINKEBY"; - SupportedChainId[SupportedChainId["OPTIMISM"] = 10] = "OPTIMISM"; - SupportedChainId[SupportedChainId["OPTIMISTIC_KOVAN"] = 69] = "OPTIMISTIC_KOVAN"; - SupportedChainId[SupportedChainId["POLYGON"] = 137] = "POLYGON"; - SupportedChainId[SupportedChainId["POLYGON_MUMBAI"] = 80001] = "POLYGON_MUMBAI"; -})(SupportedChainId || (SupportedChainId = {})); -var CHAIN_IDS_TO_NAMES = (_a$h = {}, - _a$h[SupportedChainId.MAINNET] = 'mainnet', - _a$h[SupportedChainId.ROPSTEN] = 'ropsten', - _a$h[SupportedChainId.RINKEBY] = 'rinkeby', - _a$h[SupportedChainId.GOERLI] = 'goerli', - _a$h[SupportedChainId.KOVAN] = 'kovan', - _a$h[SupportedChainId.POLYGON] = 'polygon', - _a$h[SupportedChainId.POLYGON_MUMBAI] = 'polygon_mumbai', - _a$h[SupportedChainId.ARBITRUM_ONE] = 'arbitrum', - _a$h[SupportedChainId.ARBITRUM_RINKEBY] = 'arbitrum_rinkeby', - _a$h[SupportedChainId.OPTIMISM] = 'optimism', - _a$h[SupportedChainId.OPTIMISTIC_KOVAN] = 'optimistic_kovan', - _a$h); -/** - * Array of all the supported chain IDs - */ -var ALL_SUPPORTED_CHAIN_IDS = Object.values(SupportedChainId).filter(function (id) { return typeof id === 'number'; }); -var SUPPORTED_GAS_ESTIMATE_CHAIN_IDS = [SupportedChainId.MAINNET, SupportedChainId.POLYGON]; -/** - * All the chain IDs that are running the Ethereum protocol. - */ -[ - SupportedChainId.MAINNET, - SupportedChainId.ROPSTEN, - SupportedChainId.RINKEBY, - SupportedChainId.GOERLI, - SupportedChainId.KOVAN, - SupportedChainId.POLYGON, - SupportedChainId.POLYGON_MUMBAI, -]; -/** - * Controls some L2 specific behavior, e.g. slippage tolerance, special UI behavior. - * The expectation is that all of these networks have immediate transaction confirmation. - */ -var L2_CHAIN_IDS = [ - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, -]; - -var DEFAULT_NETWORKS = [ - SupportedChainId.MAINNET, - SupportedChainId.ROPSTEN, - SupportedChainId.RINKEBY, - SupportedChainId.GOERLI, - SupportedChainId.KOVAN, -]; -function constructSameAddressMap(address, additionalNetworks) { - if (additionalNetworks === void 0) { additionalNetworks = []; } - return DEFAULT_NETWORKS.concat(additionalNetworks).reduce(function (memo, chainId) { - memo[chainId] = address; - return memo; - }, {}); -} - -var _a$g, _b$6, _c$4, _d$3, _e$2, _f$1, _g$1, _h$1; -var UNI_ADDRESS = constructSameAddressMap('0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984'); -var MULTICALL_ADDRESS = __assign(__assign({}, constructSameAddressMap('0x1F98415757620B543A52E61c46B32eB19261F984', [ - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.OPTIMISM, - SupportedChainId.POLYGON_MUMBAI, - SupportedChainId.POLYGON, -])), (_a$g = {}, _a$g[SupportedChainId.ARBITRUM_ONE] = '0xadF885960B47eA2CD9B55E6DAc6B42b7Cb2806dB', _a$g[SupportedChainId.ARBITRUM_RINKEBY] = '0xa501c031958F579dB7676fF1CE78AD305794d579', _a$g)); -var V2_FACTORY_ADDRESSES = constructSameAddressMap(v2Sdk.FACTORY_ADDRESS); -var V2_ROUTER_ADDRESS = constructSameAddressMap('0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D'); -var V3_ROUTER_ADDRESS = constructSameAddressMap('0xE592427A0AEce92De3Edee1F18E0157C05861564', [ - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON, - SupportedChainId.POLYGON_MUMBAI, -]); -var SWAP_ROUTER_ADDRESSES = constructSameAddressMap('0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45', [ - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON, - SupportedChainId.POLYGON_MUMBAI, -]); -/** - * The oldest V0 governance address - */ -constructSameAddressMap('0x5e4be8Bc9637f0EAA1A755019e06A68ce081D58F'); -/** - * The older V1 governance address - */ -(_b$6 = {}, - _b$6[SupportedChainId.MAINNET] = '0xC4e172459f1E7939D522503B81AFAaC1014CE6F6', - _b$6); -/** - * The latest governor bravo that is currently admin of timelock - */ -(_c$4 = {}, - _c$4[SupportedChainId.MAINNET] = '0x408ED6354d4973f66138C91495F2f2FCbd8724C3', - _c$4); -constructSameAddressMap('0x1a9C8182C09F50C8318d769245beA52c32BE35BC'); -var MERKLE_DISTRIBUTOR_ADDRESS = (_d$3 = {}, - _d$3[SupportedChainId.MAINNET] = '0x090D4613473dEE047c3f2706764f49E0821D256e', - _d$3); -var ARGENT_WALLET_DETECTOR_ADDRESS = (_e$2 = {}, - _e$2[SupportedChainId.MAINNET] = '0xeca4B0bDBf7c55E9b7925919d03CbF8Dc82537E8', - _e$2); -var V3_CORE_FACTORY_ADDRESSES = constructSameAddressMap(v3Sdk.FACTORY_ADDRESS, [ - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON_MUMBAI, - SupportedChainId.POLYGON, -]); -var QUOTER_ADDRESSES = constructSameAddressMap('0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6', [ - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON_MUMBAI, - SupportedChainId.POLYGON, -]); -constructSameAddressMap('0xC36442b4a4522E871399CD717aBDD847Ab11FE88', [ - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON_MUMBAI, - SupportedChainId.POLYGON, -]); -var ENS_REGISTRAR_ADDRESSES = (_f$1 = {}, - _f$1[SupportedChainId.MAINNET] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', - _f$1[SupportedChainId.ROPSTEN] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', - _f$1[SupportedChainId.GOERLI] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', - _f$1[SupportedChainId.RINKEBY] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', - _f$1); -var SOCKS_CONTROLLER_ADDRESSES = (_g$1 = {}, - _g$1[SupportedChainId.MAINNET] = '0x65770b5283117639760beA3F867b69b3697a91dd', - _g$1); -constructSameAddressMap('0xA5644E29708357803b5A882D272c41cC0dF92B34', [ - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON_MUMBAI, - SupportedChainId.POLYGON, -]); -(_h$1 = {}, - _h$1[SupportedChainId.ARBITRUM_ONE] = '0xbfd8137f7d1516D3ea5cA83523914859ec47F573', - _h$1[SupportedChainId.ARBITRUM_RINKEBY] = '0xbfd8137f7d1516D3ea5cA83523914859ec47F573', - _h$1); - -var _a$f, _b$5; -var AMPL = new sdkCore.Token(SupportedChainId.MAINNET, '0xD46bA6D942050d489DBd938a2C909A5d5039A161', 9, 'AMPL', 'Ampleforth'); -var DAI = new sdkCore.Token(SupportedChainId.MAINNET, '0x6B175474E89094C44Da98b954EedeAC495271d0F', 18, 'DAI', 'Dai Stablecoin'); -var DAI_ARBITRUM_ONE = new sdkCore.Token(SupportedChainId.ARBITRUM_ONE, '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', 18, 'DAI', 'Dai stable coin'); -var DAI_OPTIMISM = new sdkCore.Token(SupportedChainId.OPTIMISM, '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', 18, 'DAI', 'Dai stable coin'); -var USDC = new sdkCore.Token(SupportedChainId.MAINNET, '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', 6, 'USDC', 'USD//C'); -var USDC_ARBITRUM = new sdkCore.Token(SupportedChainId.ARBITRUM_ONE, '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8', 6, 'USDC', 'USD//C'); -var USDC_POLYGON = new sdkCore.Token(SupportedChainId.POLYGON, '0x2791bca1f2de4661ed88a30c99a7a9449aa84174', 6, 'USDC', 'USD//C'); -var DAI_POLYGON = new sdkCore.Token(SupportedChainId.POLYGON, '0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063', 18, 'DAI', 'Dai Stablecoin'); -var USDT_POLYGON = new sdkCore.Token(SupportedChainId.POLYGON, '0xc2132d05d31c914a87c6611c10748aeb04b58e8f', 6, 'USDT', 'Tether USD'); -var WBTC_POLYGON = new sdkCore.Token(SupportedChainId.POLYGON, '0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6', 8, 'WBTC', 'Wrapped BTC'); -var USDC_OPTIMISM = new sdkCore.Token(SupportedChainId.OPTIMISM, '0x7F5c764cBc14f9669B88837ca1490cCa17c31607', 6, 'USDC', 'USD//C'); -var USDT = new sdkCore.Token(SupportedChainId.MAINNET, '0xdAC17F958D2ee523a2206206994597C13D831ec7', 6, 'USDT', 'Tether USD'); -var USDT_ARBITRUM_ONE = new sdkCore.Token(SupportedChainId.ARBITRUM_ONE, '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9', 6, 'USDT', 'Tether USD'); -var USDT_OPTIMISM = new sdkCore.Token(SupportedChainId.OPTIMISM, '0x94b008aA00579c1307B0EF2c499aD98a8ce58e58', 6, 'USDT', 'Tether USD'); -var WBTC = new sdkCore.Token(SupportedChainId.MAINNET, '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', 8, 'WBTC', 'Wrapped BTC'); -var WBTC_ARBITRUM_ONE = new sdkCore.Token(SupportedChainId.ARBITRUM_ONE, '0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f', 8, 'WBTC', 'Wrapped BTC'); -var WBTC_OPTIMISM = new sdkCore.Token(SupportedChainId.OPTIMISM, '0x68f180fcCe6836688e9084f035309E29Bf0A2095', 8, 'WBTC', 'Wrapped BTC'); -var FEI = new sdkCore.Token(SupportedChainId.MAINNET, '0x956F47F50A910163D8BF957Cf5846D573E7f87CA', 18, 'FEI', 'Fei USD'); -var TRIBE = new sdkCore.Token(SupportedChainId.MAINNET, '0xc7283b66Eb1EB5FB86327f08e1B5816b0720212B', 18, 'TRIBE', 'Tribe'); -var FRAX = new sdkCore.Token(SupportedChainId.MAINNET, '0x853d955aCEf822Db058eb8505911ED77F175b99e', 18, 'FRAX', 'Frax'); -var FXS = new sdkCore.Token(SupportedChainId.MAINNET, '0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0', 18, 'FXS', 'Frax Share'); -var renBTC = new sdkCore.Token(SupportedChainId.MAINNET, '0xEB4C2781e4ebA804CE9a9803C67d0893436bB27D', 8, 'renBTC', 'renBTC'); -var ETH2X_FLI = new sdkCore.Token(SupportedChainId.MAINNET, '0xAa6E8127831c9DE45ae56bB1b0d4D4Da6e5665BD', 18, 'ETH2x-FLI', 'ETH 2x Flexible Leverage Index'); -var sETH2 = new sdkCore.Token(SupportedChainId.MAINNET, '0xFe2e637202056d30016725477c5da089Ab0A043A', 18, 'sETH2', 'StakeWise Staked ETH2'); -var rETH2 = new sdkCore.Token(SupportedChainId.MAINNET, '0x20BC832ca081b91433ff6c17f85701B6e92486c5', 18, 'rETH2', 'StakeWise Reward ETH2'); -var SWISE = new sdkCore.Token(SupportedChainId.MAINNET, '0x48C3399719B582dD63eB5AADf12A40B4C3f52FA2', 18, 'SWISE', 'StakeWise'); -var WETH_POLYGON_MUMBAI = new sdkCore.Token(SupportedChainId.POLYGON_MUMBAI, '0xa6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa', 18, 'WETH', 'Wrapped Ether'); -var WETH_POLYGON = new sdkCore.Token(SupportedChainId.POLYGON, '0x7ceb23fd6bc0add59e62ac25578270cff1b9f619', 18, 'WETH', 'Wrapped Ether'); -var UNI = (_a$f = {}, - _a$f[SupportedChainId.MAINNET] = new sdkCore.Token(SupportedChainId.MAINNET, UNI_ADDRESS[1], 18, 'UNI', 'Uniswap'), - _a$f[SupportedChainId.RINKEBY] = new sdkCore.Token(SupportedChainId.RINKEBY, UNI_ADDRESS[4], 18, 'UNI', 'Uniswap'), - _a$f[SupportedChainId.ROPSTEN] = new sdkCore.Token(SupportedChainId.ROPSTEN, UNI_ADDRESS[3], 18, 'UNI', 'Uniswap'), - _a$f[SupportedChainId.GOERLI] = new sdkCore.Token(SupportedChainId.GOERLI, UNI_ADDRESS[5], 18, 'UNI', 'Uniswap'), - _a$f[SupportedChainId.KOVAN] = new sdkCore.Token(SupportedChainId.KOVAN, UNI_ADDRESS[42], 18, 'UNI', 'Uniswap'), - _a$f); -var WRAPPED_NATIVE_CURRENCY = __assign(__assign({}, sdkCore.WETH9), (_b$5 = {}, _b$5[SupportedChainId.OPTIMISM] = new sdkCore.Token(SupportedChainId.OPTIMISM, '0x4200000000000000000000000000000000000006', 18, 'WETH', 'Wrapped Ether'), _b$5[SupportedChainId.OPTIMISTIC_KOVAN] = new sdkCore.Token(SupportedChainId.OPTIMISTIC_KOVAN, '0x4200000000000000000000000000000000000006', 18, 'WETH', 'Wrapped Ether'), _b$5[SupportedChainId.ARBITRUM_ONE] = new sdkCore.Token(SupportedChainId.ARBITRUM_ONE, '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1', 18, 'WETH', 'Wrapped Ether'), _b$5[SupportedChainId.ARBITRUM_RINKEBY] = new sdkCore.Token(SupportedChainId.ARBITRUM_RINKEBY, '0xB47e6A5f8b33b3F17603C83a0535A9dcD7E32681', 18, 'WETH', 'Wrapped Ether'), _b$5[SupportedChainId.POLYGON] = new sdkCore.Token(SupportedChainId.POLYGON, '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270', 18, 'WMATIC', 'Wrapped MATIC'), _b$5[SupportedChainId.POLYGON_MUMBAI] = new sdkCore.Token(SupportedChainId.POLYGON_MUMBAI, '0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889', 18, 'WMATIC', 'Wrapped MATIC'), _b$5)); -function isMatic(chainId) { - return chainId === SupportedChainId.POLYGON_MUMBAI || chainId === SupportedChainId.POLYGON; -} -var MaticNativeCurrency = /** @class */ (function (_super) { - __extends(MaticNativeCurrency, _super); - function MaticNativeCurrency(chainId) { - var _this = this; - if (!isMatic(chainId)) - throw new Error('Not matic'); - _this = _super.call(this, chainId, 18, 'MATIC', 'Polygon Matic') || this; - return _this; - } - MaticNativeCurrency.prototype.equals = function (other) { - return other.isNative && other.chainId === this.chainId; - }; - Object.defineProperty(MaticNativeCurrency.prototype, "wrapped", { - get: function () { - if (!isMatic(this.chainId)) - throw new Error('Not matic'); - return WRAPPED_NATIVE_CURRENCY[this.chainId]; - }, - enumerable: false, - configurable: true - }); - return MaticNativeCurrency; -}(sdkCore.NativeCurrency)); -var ExtendedEther = /** @class */ (function (_super) { - __extends(ExtendedEther, _super); - function ExtendedEther() { - return _super !== null && _super.apply(this, arguments) || this; - } - Object.defineProperty(ExtendedEther.prototype, "wrapped", { - get: function () { - if (this.chainId in WRAPPED_NATIVE_CURRENCY) - return WRAPPED_NATIVE_CURRENCY[this.chainId]; - throw new Error('Unsupported chain ID'); - }, - enumerable: false, - configurable: true - }); - ExtendedEther.onChain = function (chainId) { - var _a; - return (_a = this._cachedExtendedEther[chainId]) !== null && _a !== void 0 ? _a : (this._cachedExtendedEther[chainId] = new ExtendedEther(chainId)); - }; - ExtendedEther._cachedExtendedEther = {}; - return ExtendedEther; -}(sdkCore.Ether)); -var cachedNativeCurrency = {}; -function nativeOnChain(chainId) { - var _a; - return ((_a = cachedNativeCurrency[chainId]) !== null && _a !== void 0 ? _a : (cachedNativeCurrency[chainId] = isMatic(chainId) - ? new MaticNativeCurrency(chainId) - : ExtendedEther.onChain(chainId))); -} - -// returns null on errors -function useContract(addressOrAddressMap, ABI, withSignerIfPossible) { - if (withSignerIfPossible === void 0) { withSignerIfPossible = true; } - var _a = useActiveWeb3React(), library = _a.library, account = _a.account, chainId = _a.chainId; - return React.useMemo(function () { - if (!addressOrAddressMap || !ABI || !library || !chainId) - return null; - var address; - if (typeof addressOrAddressMap === 'string') - address = addressOrAddressMap; - else - address = addressOrAddressMap[chainId]; - if (!address) - return null; - try { - return getContract(address, ABI, library, withSignerIfPossible && account ? account : undefined); - } - catch (error) { - console.error('Failed to get contract', error); - return null; - } - }, [addressOrAddressMap, ABI, library, chainId, withSignerIfPossible, account]); -} -function useTokenContract(tokenAddress, withSignerIfPossible) { - return useContract(tokenAddress, ERC20ABI, withSignerIfPossible); -} -function useWETHContract(withSignerIfPossible) { - var _a; - var chainId = useActiveWeb3React().chainId; - return useContract(chainId ? (_a = WRAPPED_NATIVE_CURRENCY[chainId]) === null || _a === void 0 ? void 0 : _a.address : undefined, WETH_ABI, withSignerIfPossible); -} -function useERC721Contract(nftAddress) { - return useContract(nftAddress, ERC721_ABI, false); -} -function useERC1155Contract(nftAddress) { - return useContract(nftAddress, ERC1155_ABI, false); -} -function useArgentWalletDetectorContract() { - return useContract(ARGENT_WALLET_DETECTOR_ADDRESS, ARGENT_WALLET_DETECTOR_ABI, false); -} -function useENSRegistrarContract(withSignerIfPossible) { - return useContract(ENS_REGISTRAR_ADDRESSES, ENS_ABI, withSignerIfPossible); -} -function useENSResolverContract(address, withSignerIfPossible) { - return useContract(address, ENS_PUBLIC_RESOLVER_ABI, withSignerIfPossible); -} -function useBytes32TokenContract(tokenAddress, withSignerIfPossible) { - return useContract(tokenAddress, ERC20_BYTES32_ABI, withSignerIfPossible); -} -function useEIP2612Contract(tokenAddress) { - return useContract(tokenAddress, EIP_2612, false); -} -function useV2RouterContract() { - return useContract(V2_ROUTER_ADDRESS, abi$3, true); -} -function useInterfaceMulticall() { - return useContract(MULTICALL_ADDRESS, abi$1, false); -} -function useMerkleDistributorContract() { - return useContract(MERKLE_DISTRIBUTOR_ADDRESS, abi$5, true); -} -function useV3Quoter() { - return useContract(QUOTER_ADDRESSES, abi$2); -} - -var _a$e; -var multicall = reduxMulticall.createMulticall(); -var reducer = redux.combineReducers((_a$e = {}, _a$e[multicall.reducerPath] = multicall.reducer, _a$e)); -redux.createStore(reducer); -function MulticallUpdater() { - var latestBlockNumber = useBlockNumber(); - var chainId = useActiveWeb3React().chainId; - var contract = useInterfaceMulticall(); - return jsxRuntime.jsx(multicall.Updater, { chainId: chainId, latestBlockNumber: latestBlockNumber, contract: contract }, void 0); -} - -function useMultipleContractSingleData() { - var _a; - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var _b = useCallContext(), chainId = _b.chainId, latestBlock = _b.latestBlock; - return (_a = multicall.hooks).useMultipleContractSingleData.apply(_a, __spreadArray([chainId, latestBlock], __read(args), false)); -} -function useSingleCallResult() { - var _a; - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var _b = useCallContext(), chainId = _b.chainId, latestBlock = _b.latestBlock; - return (_a = multicall.hooks).useSingleCallResult.apply(_a, __spreadArray([chainId, latestBlock], __read(args), false)); -} -function useSingleContractMultipleData() { - var _a; - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var _b = useCallContext(), chainId = _b.chainId, latestBlock = _b.latestBlock; - return (_a = multicall.hooks).useSingleContractMultipleData.apply(_a, __spreadArray([chainId, latestBlock], __read(args), false)); -} -function useSingleContractWithCallData() { - var _a; - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var _b = useCallContext(), chainId = _b.chainId, latestBlock = _b.latestBlock; - return (_a = multicall.hooks).useSingleContractWithCallData.apply(_a, __spreadArray([chainId, latestBlock], __read(args), false)); -} -function useCallContext() { - var chainId = useActiveWeb3React().chainId; - var latestBlock = useBlockNumber(); - return { chainId: chainId, latestBlock: latestBlock }; -} - -function safeNamehash(name) { - if (name === undefined) - return undefined; - try { - return hash.namehash(name); - } - catch (error) { - console.debug(error); - return undefined; - } -} - -/** - * Returns true if the string value is zero in hex - * @param hexNumberString - */ -function isZero(hexNumberString) { - return /^0x0*$/.test(hexNumberString); -} - -/** - * Does a lookup for an ENS name to find its address. - */ -function useENSAddress(ensName) { - var _a; - var debouncedName = useDebounce(ensName, 200); - var ensNodeArgument = React.useMemo(function () { return [debouncedName === null ? undefined : safeNamehash(debouncedName)]; }, [debouncedName]); - var registrarContract = useENSRegistrarContract(false); - var resolverAddress = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument); - var resolverAddressResult = (_a = resolverAddress.result) === null || _a === void 0 ? void 0 : _a[0]; - var resolverContract = useENSResolverContract(resolverAddressResult && !isZero(resolverAddressResult) ? resolverAddressResult : undefined, false); - var addr = useSingleCallResult(resolverContract, 'addr', ensNodeArgument); - var changed = debouncedName !== ensName; - return React.useMemo(function () { - var _a, _b; - return ({ - address: changed ? null : (_b = (_a = addr.result) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : null, - loading: changed || resolverAddress.loading || addr.loading, - }); - }, [addr.loading, addr.result, changed, resolverAddress.loading]); -} - -/** - * Does a reverse lookup for an address to find its ENS name. - * Note this is not the same as looking up an ENS name to find an address. - */ -function useENSName(address) { - var _a, _b; - var debouncedAddress = useDebounce(address, 200); - var ensNodeArgument = React.useMemo(function () { - if (!debouncedAddress || !isAddress(debouncedAddress)) - return [undefined]; - return [hash.namehash(debouncedAddress.toLowerCase().substr(2) + ".addr.reverse")]; - }, [debouncedAddress]); - var registrarContract = useENSRegistrarContract(false); - var resolverAddress = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument); - var resolverAddressResult = (_a = resolverAddress.result) === null || _a === void 0 ? void 0 : _a[0]; - var resolverContract = useENSResolverContract(resolverAddressResult && !isZero(resolverAddressResult) ? resolverAddressResult : undefined, false); - var nameCallRes = useSingleCallResult(resolverContract, 'name', ensNodeArgument); - var name = (_b = nameCallRes.result) === null || _b === void 0 ? void 0 : _b[0]; - /* ENS does not enforce that an address owns a .eth domain before setting it as a reverse proxy - and recommends that you perform a match on the forward resolution - see: https://docs.ens.domains/dapp-developer-guide/resolving-names#reverse-resolution - */ - var fwdAddr = useENSAddress(name); - var checkedName = address === (fwdAddr === null || fwdAddr === void 0 ? void 0 : fwdAddr.address) ? name : null; - var changed = debouncedAddress !== address; - return React.useMemo(function () { return ({ - ENSName: changed ? null : checkedName, - loading: changed || resolverAddress.loading || nameCallRes.loading, - }); }, [changed, nameCallRes.loading, checkedName, resolverAddress.loading]); -} - -/** - * Given a name or address, does a lookup to resolve to an address and name - * @param nameOrAddress ENS name or address - */ -function useENS(nameOrAddress) { - var validated = isAddress(nameOrAddress); - var reverseLookup = useENSName(validated ? validated : undefined); - var lookup = useENSAddress(nameOrAddress); - return React.useMemo(function () { return ({ - loading: reverseLookup.loading || lookup.loading, - address: validated ? validated : lookup.address, - name: reverseLookup.ENSName ? reverseLookup.ENSName : !validated && lookup.address ? nameOrAddress || null : null, - }); }, [lookup.address, lookup.loading, nameOrAddress, reverseLookup.ENSName, reverseLookup.loading, validated]); -} - -/** - * Returns the gas value plus a margin for unexpected or variable gas costs - * @param value the gas value to pad - */ -function calculateGasMargin(value) { - return value.mul(120).div(100); -} - -/** - * Be careful adding to this enum, always assign a unique value (typescript will not prevent duplicate values). - * These values is persisted in state and if you change the value it will cause errors - */ -var TransactionType; -(function (TransactionType) { - TransactionType[TransactionType["APPROVAL"] = 0] = "APPROVAL"; - TransactionType[TransactionType["SWAP"] = 1] = "SWAP"; - TransactionType[TransactionType["DEPOSIT_LIQUIDITY_STAKING"] = 2] = "DEPOSIT_LIQUIDITY_STAKING"; - TransactionType[TransactionType["WITHDRAW_LIQUIDITY_STAKING"] = 3] = "WITHDRAW_LIQUIDITY_STAKING"; - TransactionType[TransactionType["CLAIM"] = 4] = "CLAIM"; - TransactionType[TransactionType["VOTE"] = 5] = "VOTE"; - TransactionType[TransactionType["DELEGATE"] = 6] = "DELEGATE"; - TransactionType[TransactionType["WRAP"] = 7] = "WRAP"; - TransactionType[TransactionType["CREATE_V3_POOL"] = 8] = "CREATE_V3_POOL"; - TransactionType[TransactionType["ADD_LIQUIDITY_V3_POOL"] = 9] = "ADD_LIQUIDITY_V3_POOL"; - TransactionType[TransactionType["ADD_LIQUIDITY_V2_POOL"] = 10] = "ADD_LIQUIDITY_V2_POOL"; - TransactionType[TransactionType["MIGRATE_LIQUIDITY_V3"] = 11] = "MIGRATE_LIQUIDITY_V3"; - TransactionType[TransactionType["COLLECT_FEES"] = 12] = "COLLECT_FEES"; - TransactionType[TransactionType["REMOVE_LIQUIDITY_V3"] = 13] = "REMOVE_LIQUIDITY_V3"; - TransactionType[TransactionType["SUBMIT_PROPOSAL"] = 14] = "SUBMIT_PROPOSAL"; -})(TransactionType || (TransactionType = {})); -var addTransaction = toolkit.createAction('transactions/addTransaction'); -var clearAllTransactions = toolkit.createAction('transactions/clearAllTransactions'); -var finalizeTransaction = toolkit.createAction('transactions/finalizeTransaction'); -var checkedTransaction = toolkit.createAction('transactions/checkedTransaction'); - -var SUPPORTED_TRANSACTION_TYPES = [ - TransactionType.ADD_LIQUIDITY_V2_POOL, - TransactionType.ADD_LIQUIDITY_V3_POOL, - TransactionType.CREATE_V3_POOL, - TransactionType.REMOVE_LIQUIDITY_V3, - TransactionType.SWAP, -]; -var FIREBASE_API_KEY = process.env.REACT_APP_FIREBASE_KEY; -var firebaseEnabled = typeof FIREBASE_API_KEY !== 'undefined'; -if (firebaseEnabled) - initializeFirebase(); -function useMonitoringEventCallback() { - var chainId = useActiveWeb3React().chainId; - return React.useCallback(function log(type, _a) { - var transactionResponse = _a.transactionResponse, walletAddress = _a.walletAddress; - return __awaiter(this, void 0, void 0, function () { - var db; - return __generator(this, function (_b) { - if (!firebaseEnabled) - return [2 /*return*/]; - db = database.getDatabase(); - if (!walletAddress) { - console.debug('Wallet address required to log monitoring events.'); - return [2 /*return*/]; - } - try { - database.push(database.ref(db, 'trm'), { - chainId: chainId, - origin: window.location.origin, - timestamp: Date.now(), - tx: transactionResponse, - type: type, - walletAddress: walletAddress, - }); - } - catch (e) { - console.debug('Error adding document: ', e); - } - return [2 /*return*/]; - }); - }); - }, [chainId]); -} -function useTransactionMonitoringEventCallback() { - var account = useActiveWeb3React().account; - var log = useMonitoringEventCallback(); - return React.useCallback(function (info, transactionResponse) { - if (SUPPORTED_TRANSACTION_TYPES.includes(info.type)) { - log(TransactionType[info.type], { - transactionResponse: (function (_a) { - var hash = _a.hash, v = _a.v, r = _a.r, s = _a.s; - return ({ hash: hash, v: v, r: r, s: s }); - })(transactionResponse), - walletAddress: account !== null && account !== void 0 ? account : undefined, - }); - } - }, [account, log]); -} -function useWalletConnectMonitoringEventCallback() { - var log = useMonitoringEventCallback(); - return React.useCallback(function (walletAddress) { - log('WALLET_CONNECTED', { transactionResponse: { hash: '', r: '', s: '', v: -1 }, walletAddress: walletAddress }); - }, [log]); -} -function initializeFirebase() { - app.initializeApp({ - apiKey: process.env.REACT_APP_FIREBASE_KEY, - authDomain: 'interface-monitoring.firebaseapp.com', - databaseURL: 'https://interface-monitoring-default-rtdb.firebaseio.com', - projectId: 'interface-monitoring', - storageBucket: 'interface-monitoring.appspot.com', - messagingSenderId: '968187720053', - appId: '1:968187720053:web:acedf72dce629d470be33c', - }); -} - -// helper that can take a ethers library transaction response and add it to the list of transactions -function useTransactionAdder() { - var _a = useActiveWeb3React(), chainId = _a.chainId, account = _a.account; - var dispatch = useAppDispatch(); - var logMonitoringEvent = useTransactionMonitoringEventCallback(); - return React.useCallback(function (response, info) { - if (!account) - return; - if (!chainId) - return; - var hash = response.hash; - if (!hash) { - throw Error('No transaction hash found.'); - } - dispatch(addTransaction({ hash: hash, from: account, info: info, chainId: chainId })); - logMonitoringEvent(info, response); - }, [account, chainId, dispatch, logMonitoringEvent]); -} -// returns all the transactions for the current chain -function useAllTransactions() { - var _a; - var chainId = useActiveWeb3React().chainId; - var state = useAppSelector(function (state) { return state.transactions; }); - return chainId ? (_a = state[chainId]) !== null && _a !== void 0 ? _a : {} : {}; -} -function useTransaction(transactionHash) { - var allTransactions = useAllTransactions(); - if (!transactionHash) { - return undefined; - } - return allTransactions[transactionHash]; -} -function useIsTransactionPending(transactionHash) { - var transactions = useAllTransactions(); - if (!transactionHash || !transactions[transactionHash]) - return false; - return !transactions[transactionHash].receipt; -} -function useIsTransactionConfirmed(transactionHash) { - var transactions = useAllTransactions(); - if (!transactionHash || !transactions[transactionHash]) - return false; - return Boolean(transactions[transactionHash].receipt); -} -/** - * Returns whether a transaction happened in the last day (86400 seconds * 1000 milliseconds / second) - * @param tx to check for recency - */ -function isTransactionRecent(tx) { - return new Date().getTime() - tx.addedTime < 86400000; -} -// returns whether a token has a pending approval transaction -function useHasPendingApproval(token, spender) { - var allTransactions = useAllTransactions(); - return React.useMemo(function () { - return typeof (token === null || token === void 0 ? void 0 : token.address) === 'string' && - typeof spender === 'string' && - Object.keys(allTransactions).some(function (hash) { - var tx = allTransactions[hash]; - if (!tx) - return false; - if (tx.receipt) { - return false; - } - else { - if (tx.info.type !== TransactionType.APPROVAL) - return false; - return tx.info.spender === spender && tx.info.tokenAddress === token.address && isTransactionRecent(tx); - } - }); - }, [allTransactions, spender, token === null || token === void 0 ? void 0 : token.address]); -} -// watch for submissions to claim -// return null if not done loading, return undefined if not found -function useUserHasSubmittedClaim(account) { - var allTransactions = useAllTransactions(); - // get the txn if it has been submitted - var claimTxn = React.useMemo(function () { - var txnIndex = Object.keys(allTransactions).find(function (hash) { - var tx = allTransactions[hash]; - return tx.info.type === TransactionType.CLAIM && tx.info.recipient === account; - }); - return txnIndex && allTransactions[txnIndex] ? allTransactions[txnIndex] : undefined; - }, [account, allTransactions]); - return { claimSubmitted: Boolean(claimTxn), claimTxn: claimTxn }; -} - -var FETCH_CLAIM_MAPPING_PROMISE = null; -function fetchClaimMapping() { - return (FETCH_CLAIM_MAPPING_PROMISE !== null && FETCH_CLAIM_MAPPING_PROMISE !== void 0 ? FETCH_CLAIM_MAPPING_PROMISE : (FETCH_CLAIM_MAPPING_PROMISE = fetch("https://raw.githubusercontent.com/Uniswap/mrkl-drop-data-chunks/final/chunks/mapping.json") - .then(function (res) { return res.json(); }) - .catch(function (error) { - console.error('Failed to get claims mapping', error); - FETCH_CLAIM_MAPPING_PROMISE = null; - }))); -} -var FETCH_CLAIM_FILE_PROMISES = {}; -function fetchClaimFile(key) { - var _a; - return ((_a = FETCH_CLAIM_FILE_PROMISES[key]) !== null && _a !== void 0 ? _a : (FETCH_CLAIM_FILE_PROMISES[key] = fetch("https://raw.githubusercontent.com/Uniswap/mrkl-drop-data-chunks/final/chunks/" + key + ".json") - .then(function (res) { return res.json(); }) - .catch(function (error) { - console.error("Failed to get claim file mapping for starting address " + key, error); - delete FETCH_CLAIM_FILE_PROMISES[key]; - }))); -} -var FETCH_CLAIM_PROMISES = {}; -// returns the claim for the given address, or null if not valid -function fetchClaim(account) { - var _a; - var formatted = isAddress(account); - if (!formatted) - return Promise.reject(new Error('Invalid address')); - return ((_a = FETCH_CLAIM_PROMISES[account]) !== null && _a !== void 0 ? _a : (FETCH_CLAIM_PROMISES[account] = fetchClaimMapping() - .then(function (mapping) { - var e_1, _a; - var sorted = Object.keys(mapping).sort(function (a, b) { return (a.toLowerCase() < b.toLowerCase() ? -1 : 1); }); - try { - for (var sorted_1 = __values(sorted), sorted_1_1 = sorted_1.next(); !sorted_1_1.done; sorted_1_1 = sorted_1.next()) { - var startingAddress = sorted_1_1.value; - var lastAddress = mapping[startingAddress]; - if (startingAddress.toLowerCase() <= formatted.toLowerCase()) { - if (formatted.toLowerCase() <= lastAddress.toLowerCase()) { - return startingAddress; - } - } - else { - throw new Error("Claim for " + formatted + " was not found in partial search"); - } - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (sorted_1_1 && !sorted_1_1.done && (_a = sorted_1.return)) _a.call(sorted_1); - } - finally { if (e_1) throw e_1.error; } - } - throw new Error("Claim for " + formatted + " was not found after searching all mappings"); - }) - .then(fetchClaimFile) - .then(function (result) { - if (result[formatted]) - return result[formatted]; - throw new Error("Claim for " + formatted + " was not found in claim file!"); - }) - .catch(function (error) { - console.debug('Claim fetch failed', error); - throw error; - }))); -} -// parse distributorContract blob and detect if user has claim data -// null means we know it does not -function useUserClaimData(account) { - var chainId = useActiveWeb3React().chainId; - var _a = __read(React.useState({}), 2), claimInfo = _a[0], setClaimInfo = _a[1]; - React.useEffect(function () { - if (!account || chainId !== 1) - return; - fetchClaim(account) - .then(function (accountClaimInfo) { - return setClaimInfo(function (claimInfo) { - var _a; - return __assign(__assign({}, claimInfo), (_a = {}, _a[account] = accountClaimInfo, _a)); - }); - }) - .catch(function () { - setClaimInfo(function (claimInfo) { - var _a; - return __assign(__assign({}, claimInfo), (_a = {}, _a[account] = null, _a)); - }); - }); - }, [account, chainId]); - return account && chainId === 1 ? claimInfo[account] : null; -} -// check if user is in blob and has not yet claimed UNI -function useUserHasAvailableClaim(account) { - var _a; - var userClaimData = useUserClaimData(account); - var distributorContract = useMerkleDistributorContract(); - var isClaimedResult = useSingleCallResult(distributorContract, 'isClaimed', [userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.index]); - // user is in blob and contract marks as unclaimed - return Boolean(userClaimData && !isClaimedResult.loading && ((_a = isClaimedResult.result) === null || _a === void 0 ? void 0 : _a[0]) === false); -} -function useUserUnclaimedAmount(account) { - var chainId = useActiveWeb3React().chainId; - var userClaimData = useUserClaimData(account); - var canClaim = useUserHasAvailableClaim(account); - var uni = chainId ? UNI[chainId] : undefined; - if (!uni) - return undefined; - if (!canClaim || !userClaimData) { - return sdkCore.CurrencyAmount.fromRawAmount(uni, JSBI__default["default"].BigInt(0)); - } - return sdkCore.CurrencyAmount.fromRawAmount(uni, JSBI__default["default"].BigInt(userClaimData.amount)); -} -function useClaimCallback(account) { - // get claim data for this account - var _a = useActiveWeb3React(), library = _a.library, chainId = _a.chainId; - var claimData = useUserClaimData(account); - // used for popup summary - var unclaimedAmount = useUserUnclaimedAmount(account); - var addTransaction = useTransactionAdder(); - var distributorContract = useMerkleDistributorContract(); - var claimCallback = function () { - return __awaiter(this, void 0, void 0, function () { - var args; - var _a; - return __generator(this, function (_b) { - if (!claimData || !account || !library || !chainId || !distributorContract) - return [2 /*return*/]; - args = [claimData.index, account, claimData.amount, claimData.proof]; - return [2 /*return*/, (_a = distributorContract.estimateGas)['claim'].apply(_a, __spreadArray(__spreadArray([], __read(args), false), [{}], false)).then(function (estimatedGasLimit) { - return distributorContract - .claim.apply(distributorContract, __spreadArray(__spreadArray([], __read(args), false), [{ value: null, gasLimit: calculateGasMargin(estimatedGasLimit) }], false)).then(function (response) { - addTransaction(response, { - type: TransactionType.CLAIM, - recipient: account, - uniAmountRaw: unclaimedAmount === null || unclaimedAmount === void 0 ? void 0 : unclaimedAmount.quotient.toString(), - }); - return response.hash; - }); - })]; - }); - }); - }; - return { claimCallback: claimCallback }; -} - -var _a$d, _b$4, _c$3, _d$2, _e$1, _f, _g, _h; -var WRAPPED_NATIVE_CURRENCIES_ONLY = Object.fromEntries(Object.entries(WRAPPED_NATIVE_CURRENCY).map(function (_a) { - var _b = __read(_a, 2), key = _b[0], value = _b[1]; - return [key, [value]]; -})); -// used to construct intermediary pairs for trading -var BASES_TO_CHECK_TRADES_AGAINST = __assign(__assign({}, WRAPPED_NATIVE_CURRENCIES_ONLY), (_a$d = {}, _a$d[SupportedChainId.MAINNET] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.MAINNET]), false), [DAI, USDC, USDT, WBTC], false), _a$d[SupportedChainId.OPTIMISM] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.OPTIMISM]), false), [ - DAI_OPTIMISM, - USDT_OPTIMISM, - WBTC_OPTIMISM, -], false), _a$d[SupportedChainId.ARBITRUM_ONE] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.ARBITRUM_ONE]), false), [ - DAI_ARBITRUM_ONE, - USDT_ARBITRUM_ONE, - WBTC_ARBITRUM_ONE, -], false), _a$d[SupportedChainId.POLYGON] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.POLYGON]), false), [ - DAI_POLYGON, - USDC_POLYGON, - USDT_POLYGON, - WETH_POLYGON, -], false), _a$d)); -var ADDITIONAL_BASES = (_b$4 = {}, - _b$4[SupportedChainId.MAINNET] = (_c$3 = { - '0xF16E4d813f4DcfDe4c5b44f305c908742De84eF0': [ETH2X_FLI] - }, - _c$3[rETH2.address] = [sETH2], - _c$3[SWISE.address] = [sETH2], - _c$3[FEI.address] = [TRIBE], - _c$3[TRIBE.address] = [FEI], - _c$3[FRAX.address] = [FXS], - _c$3[FXS.address] = [FRAX], - _c$3[WBTC.address] = [renBTC], - _c$3[renBTC.address] = [WBTC], - _c$3), - _b$4); -/** - * Some tokens can only be swapped via certain pairs, so we override the list of bases that are considered for these - * tokens. - */ -var CUSTOM_BASES = (_d$2 = {}, - _d$2[SupportedChainId.MAINNET] = (_e$1 = {}, - _e$1[AMPL.address] = [DAI, WRAPPED_NATIVE_CURRENCY[SupportedChainId.MAINNET]], - _e$1), - _d$2); -/** - * Shows up in the currency select for swap and add liquidity - */ -var COMMON_BASES = (_f = {}, - _f[SupportedChainId.MAINNET] = [ - nativeOnChain(SupportedChainId.MAINNET), - DAI, - USDC, - USDT, - WBTC, - WRAPPED_NATIVE_CURRENCY[SupportedChainId.MAINNET], - ], - _f[SupportedChainId.ROPSTEN] = [ - nativeOnChain(SupportedChainId.ROPSTEN), - WRAPPED_NATIVE_CURRENCY[SupportedChainId.ROPSTEN], - ], - _f[SupportedChainId.RINKEBY] = [ - nativeOnChain(SupportedChainId.RINKEBY), - WRAPPED_NATIVE_CURRENCY[SupportedChainId.RINKEBY], - ], - _f[SupportedChainId.GOERLI] = [nativeOnChain(SupportedChainId.GOERLI), WRAPPED_NATIVE_CURRENCY[SupportedChainId.GOERLI]], - _f[SupportedChainId.KOVAN] = [nativeOnChain(SupportedChainId.KOVAN), WRAPPED_NATIVE_CURRENCY[SupportedChainId.KOVAN]], - _f[SupportedChainId.ARBITRUM_ONE] = [ - nativeOnChain(SupportedChainId.ARBITRUM_ONE), - DAI_ARBITRUM_ONE, - USDC_ARBITRUM, - USDT_ARBITRUM_ONE, - WBTC_ARBITRUM_ONE, - WRAPPED_NATIVE_CURRENCY[SupportedChainId.ARBITRUM_ONE], - ], - _f[SupportedChainId.ARBITRUM_RINKEBY] = [ - nativeOnChain(SupportedChainId.ARBITRUM_RINKEBY), - WRAPPED_NATIVE_CURRENCY[SupportedChainId.ARBITRUM_RINKEBY], - ], - _f[SupportedChainId.OPTIMISM] = [ - nativeOnChain(SupportedChainId.OPTIMISM), - DAI_OPTIMISM, - USDC_OPTIMISM, - USDT_OPTIMISM, - WBTC_OPTIMISM, - ], - _f[SupportedChainId.OPTIMISTIC_KOVAN] = [nativeOnChain(SupportedChainId.OPTIMISTIC_KOVAN)], - _f[SupportedChainId.POLYGON] = [ - nativeOnChain(SupportedChainId.POLYGON), - WETH_POLYGON, - USDC_POLYGON, - DAI_POLYGON, - USDT_POLYGON, - WBTC_POLYGON, - ], - _f[SupportedChainId.POLYGON_MUMBAI] = [ - nativeOnChain(SupportedChainId.POLYGON_MUMBAI), - WRAPPED_NATIVE_CURRENCY[SupportedChainId.POLYGON_MUMBAI], - WETH_POLYGON_MUMBAI, - ], - _f); -// used to construct the list of all pairs we consider by default in the frontend -__assign(__assign({}, WRAPPED_NATIVE_CURRENCIES_ONLY), (_g = {}, _g[SupportedChainId.MAINNET] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.MAINNET]), false), [DAI, USDC, USDT, WBTC], false), _g)); -(_h = {}, - _h[SupportedChainId.MAINNET] = [ - [ - new sdkCore.Token(SupportedChainId.MAINNET, '0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643', 8, 'cDAI', 'Compound Dai'), - new sdkCore.Token(SupportedChainId.MAINNET, '0x39AA39c021dfbaE8faC545936693aC917d5E7563', 8, 'cUSDC', 'Compound USD Coin'), - ], - [USDC, USDT], - [DAI, USDT], - ], - _h); - -var EthereumLogo = "data:image/png;base64,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"; - -var arbitrumLogoUrl = "data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20viewBox%3D%220%200%20470.287%20514.251%22%20enable-background%3D%22new%200%200%20470.287%20514.251%22%20xml%3Aspace%3D%22preserve%22%3E%3Cg%20id%3D%22Background%22%3E%3C%2Fg%3E%3Cg%20id%3D%22Logos_and_symbols%22%3E%20%3Cg%20id%3D%22SYMBOL_VER_3%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_4_3_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_1_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_1_%22%3E%20%20%3Cg%20id%3D%22_x31_-3%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_14_%22%3E%20%20%20%3Cpath%20fill%3D%22%232D374B%22%20d%3D%22M291.134%2C237.469l35.654-60.5l96.103%2C149.684l0.046%2C28.727l-0.313-197.672%20%20%20%20c-0.228-4.832-2.794-9.252-6.887-11.859L242.715%2C46.324c-4.045-1.99-9.18-1.967-13.22%2C0.063c-0.546%2C0.272-1.06%2C0.57-1.548%2C0.895%20%20%20%20l-0.604%2C0.379L59.399%2C144.983l-0.651%2C0.296c-0.838%2C0.385-1.686%2C0.875-2.48%2C1.444c-3.185%2C2.283-5.299%2C5.66-5.983%2C9.448%20%20%20%20c-0.103%2C0.574-0.179%2C1.158-0.214%2C1.749l0.264%2C161.083l89.515-138.745c11.271-18.397%2C35.825-24.323%2C58.62-24.001l26.753%2C0.706%20%20%20%20L67.588%2C409.765l18.582%2C10.697L245.692%2C157.22l70.51-0.256L157.091%2C426.849l66.306%2C38.138l7.922%2C4.556%20%20%20%20c3.351%2C1.362%2C7.302%2C1.431%2C10.681%2C0.21l175.453-101.678l-33.544%2C19.438L291.134%2C237.469z%20M304.736%2C433.395l-66.969-105.108%20%20%20%20l40.881-69.371l87.952%2C138.628L304.736%2C433.395z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%2328A0F0%22%20points%3D%22237.768%2C328.286%20304.736%2C433.395%20366.601%2C397.543%20278.648%2C258.915%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2328A0F0%22%20d%3D%22M422.937%2C355.379l-0.046-28.727l-96.103-149.684l-35.654%2C60.5l92.774%2C150.043l33.544-19.438%20%20%20%20c3.29-2.673%2C5.281-6.594%2C5.49-10.825L422.937%2C355.379z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23FFFFFF%22%20d%3D%22M20.219%2C382.469l47.369%2C27.296l157.634-252.801l-26.753-0.706c-22.795-0.322-47.35%2C5.604-58.62%2C24.001%20%20%20%20L50.334%2C319.004l-30.115%2C46.271V382.469z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%23FFFFFF%22%20points%3D%22316.202%2C156.964%20245.692%2C157.22%2086.17%2C420.462%20141.928%2C452.565%20157.091%2C426.849%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2396BEDC%22%20d%3D%22M452.65%2C156.601c-0.59-14.746-8.574-28.245-21.08-36.104L256.28%2C19.692%20%20%20%20c-12.371-6.229-27.825-6.237-40.218-0.004c-1.465%2C0.739-170.465%2C98.752-170.465%2C98.752c-2.339%2C1.122-4.592%2C2.458-6.711%2C3.975%20%20%20%20c-11.164%2C8.001-17.969%2C20.435-18.668%2C34.095v208.765l30.115-46.271L50.07%2C157.921c0.035-0.589%2C0.109-1.169%2C0.214-1.741%20%20%20%20c0.681-3.79%2C2.797-7.171%2C5.983-9.456c0.795-0.569%2C172.682-100.064%2C173.228-100.337c4.04-2.029%2C9.175-2.053%2C13.22-0.063%20%20%20%20l173.022%2C99.523c4.093%2C2.607%2C6.659%2C7.027%2C6.887%2C11.859v199.542c-0.209%2C4.231-1.882%2C8.152-5.172%2C10.825l-33.544%2C19.438%20%20%20%20l-17.308%2C10.031l-61.864%2C35.852l-62.737%2C36.357c-3.379%2C1.221-7.33%2C1.152-10.681-0.21l-74.228-42.693l-15.163%2C25.717%20%20%20%20l66.706%2C38.406c2.206%2C1.255%2C4.171%2C2.367%2C5.784%2C3.272c2.497%2C1.4%2C4.199%2C2.337%2C4.8%2C2.629c4.741%2C2.303%2C11.563%2C3.643%2C17.71%2C3.643%20%20%20%20c5.636%2C0%2C11.132-1.035%2C16.332-3.072l182.225-105.531c10.459-8.104%2C16.612-20.325%2C17.166-33.564V156.601z%22%2F%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_13_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_6_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_3_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_15_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_3_%22%3E%20%20%20%3Cg%20id%3D%22_x33__7_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic%22%3E%20%20%20%3Cg%20id%3D%22_x33__3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_10_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x34__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_2_%22%3E%20%20%20%3Cg%20id%3D%22_x33__6_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_2_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_11_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_5_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_12_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_1_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_9_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_2_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol_1_%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_1_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_7_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_8_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Monochromatic_1_%22%3E%20%20%3Cg%20id%3D%22_x33__4_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E"; - -var optimismLogoUrl = "data:image/svg+xml,%3Csvg%20width%3D%22170%22%20height%3D%22168%22%20viewBox%3D%220%200%20170%20168%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20clip-path%3D%22url%28%23clip0%29%22%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF505F%22%2F%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF0320%22%2F%3E%3Cpath%20d%3D%22M85.05%200C132.022%200%20170.1%2037.8949%20170.1%2084.6407C170.1%20131.386%200%20131.386%200%2084.6407C0%2037.8949%2038.0782%200%2085.05%200Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.665%2064.0394L112.444%2012.3742L89.0263%2078.9477L144.665%2064.0394Z%22%20fill%3D%22%23FF4E65%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.777%2064.215L112.444%2012.3742L165.349%2058.4347L143.777%2064.215Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.551%2063.613L142.479%20124.467L88.912%2078.5213L144.551%2063.613Z%22%20fill%3D%22%23D0001A%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.663%2063.7886L142.479%20124.467L165.235%2058.0083L143.663%2063.7886Z%22%20fill%3D%22%23FF697B%22%2F%3E%3C%2Fg%3E%3Cdefs%3E%3CclipPath%20id%3D%22clip0%22%3E%3Crect%20width%3D%22170%22%20height%3D%22168%22%20fill%3D%22white%22%2F%3E%3C%2FclipPath%3E%3C%2Fdefs%3E%3C%2Fsvg%3E"; - -var polygonMaticLogo = "data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20viewBox%3D%220%200%2038.4%2033.5%22%20style%3D%22enable-background%3Anew%200%200%2038.4%2033.5%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cstyle%20type%3D%22text%2Fcss%22%3E%20.st0%7Bfill%3A%238247E5%3B%7D%3C%2Fstyle%3E%3Cg%3E%20%3Cpath%20class%3D%22st0%22%20d%3D%22M29%2C10.2c-0.7-0.4-1.6-0.4-2.4%2C0L21%2C13.5l-3.8%2C2.1l-5.5%2C3.3c-0.7%2C0.4-1.6%2C0.4-2.4%2C0L5%2C16.3%20%20c-0.7-0.4-1.2-1.2-1.2-2.1v-5c0-0.8%2C0.4-1.6%2C1.2-2.1l4.3-2.5c0.7-0.4%2C1.6-0.4%2C2.4%2C0L16%2C7.2c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v3.3l3.8-2.2V7%20%20c0-0.8-0.4-1.6-1.2-2.1l-8-4.7c-0.7-0.4-1.6-0.4-2.4%2C0L1.2%2C5C0.4%2C5.4%2C0%2C6.2%2C0%2C7v9.4c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l5.5-3.2l3.8-2.2l5.5-3.2c0.7-0.4%2C1.6-0.4%2C2.4%2C0l4.3%2C2.5c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v5c0%2C0.8-0.4%2C1.6-1.2%2C2.1%20%20L29%2C28.8c-0.7%2C0.4-1.6%2C0.4-2.4%2C0l-4.3-2.5c-0.7-0.4-1.2-1.2-1.2-2.1V21l-3.8%2C2.2v3.3c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l8.1-4.7c0.7-0.4%2C1.2-1.2%2C1.2-2.1V17c0-0.8-0.4-1.6-1.2-2.1L29%2C10.2z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"; - -var UNI_LIST = 'https://tokens.uniswap.org'; -var AAVE_LIST = 'tokenlist.aave.eth'; -var BA_LIST = 'https://raw.githubusercontent.com/The-Blockchain-Association/sec-notice-list/master/ba-sec-list.json'; -var CMC_ALL_LIST = 'https://api.coinmarketcap.com/data-api/v3/uniswap/all.json'; -var COINGECKO_LIST = 'https://tokens.coingecko.com/uniswap/all.json'; -var COMPOUND_LIST = 'https://raw.githubusercontent.com/compound-finance/token-list/master/compound.tokenlist.json'; -var GEMINI_LIST = 'https://www.gemini.com/uniswap/manifest.json'; -var ARBITRUM_LIST = 'https://bridge.arbitrum.io/token-list-42161.json'; -var KLEROS_LIST = 't2crtokens.eth'; -var OPTIMISM_LIST = 'https://static.optimism.io/optimism.tokenlist.json'; -var ROLL_LIST = 'https://app.tryroll.com/tokens.json'; -var SET_LIST = 'https://raw.githubusercontent.com/SetProtocol/uniswap-tokenlist/main/set.tokenlist.json'; -var WRAPPED_LIST = 'wrapped.tokensoft.eth'; -var UNSUPPORTED_LIST_URLS = [BA_LIST]; -// this is the default list of lists that are exposed to users -// lower index == higher priority for token import -var DEFAULT_LIST_OF_LISTS_TO_DISPLAY = [ - UNI_LIST, - COMPOUND_LIST, - AAVE_LIST, - CMC_ALL_LIST, - COINGECKO_LIST, - KLEROS_LIST, - GEMINI_LIST, - WRAPPED_LIST, - SET_LIST, - ROLL_LIST, - ARBITRUM_LIST, - OPTIMISM_LIST, -]; -var DEFAULT_LIST_OF_LISTS = __spreadArray(__spreadArray([], __read(DEFAULT_LIST_OF_LISTS_TO_DISPLAY), false), __read(UNSUPPORTED_LIST_URLS), false); -// default lists to be 'active' aka searched across -var DEFAULT_ACTIVE_LIST_URLS = [UNI_LIST, GEMINI_LIST]; - -var _a$c, _b$3; -var INFURA_KEY = process.env.REACT_APP_INFURA_KEY; -if (typeof INFURA_KEY === 'undefined') { - throw new Error("REACT_APP_INFURA_KEY must be a defined environment variable"); -} -/** - * These are the network URLs used by the interface when there is not another available source of chain data - */ -var INFURA_NETWORK_URLS = (_a$c = {}, - _a$c[SupportedChainId.MAINNET] = "https://mainnet.infura.io/v3/" + INFURA_KEY, - _a$c[SupportedChainId.RINKEBY] = "https://rinkeby.infura.io/v3/" + INFURA_KEY, - _a$c[SupportedChainId.ROPSTEN] = "https://ropsten.infura.io/v3/" + INFURA_KEY, - _a$c[SupportedChainId.GOERLI] = "https://goerli.infura.io/v3/" + INFURA_KEY, - _a$c[SupportedChainId.KOVAN] = "https://kovan.infura.io/v3/" + INFURA_KEY, - _a$c[SupportedChainId.OPTIMISM] = "https://optimism-mainnet.infura.io/v3/" + INFURA_KEY, - _a$c[SupportedChainId.OPTIMISTIC_KOVAN] = "https://optimism-kovan.infura.io/v3/" + INFURA_KEY, - _a$c[SupportedChainId.ARBITRUM_ONE] = "https://arbitrum-mainnet.infura.io/v3/" + INFURA_KEY, - _a$c[SupportedChainId.ARBITRUM_RINKEBY] = "https://arbitrum-rinkeby.infura.io/v3/" + INFURA_KEY, - _a$c[SupportedChainId.POLYGON] = "https://polygon-mainnet.infura.io/v3/" + INFURA_KEY, - _a$c[SupportedChainId.POLYGON_MUMBAI] = "https://polygon-mumbai.infura.io/v3/" + INFURA_KEY, - _a$c); -var NetworkType; -(function (NetworkType) { - NetworkType[NetworkType["L1"] = 0] = "L1"; - NetworkType[NetworkType["L2"] = 1] = "L2"; -})(NetworkType || (NetworkType = {})); -var CHAIN_INFO = (_b$3 = {}, - _b$3[SupportedChainId.MAINNET] = { - networkType: NetworkType.L1, - docs: 'https://docs.uniswap.org/', - explorer: 'https://etherscan.io/', - infoLink: 'https://info.uniswap.org/#/', - label: 'Ethereum', - logoUrl: EthereumLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, - rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.MAINNET], - }, - }, - _b$3[SupportedChainId.RINKEBY] = { - networkType: NetworkType.L1, - docs: 'https://docs.uniswap.org/', - explorer: 'https://rinkeby.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/', - label: 'Rinkeby', - logoUrl: EthereumLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Rinkeby Ether', symbol: 'rETH', decimals: 18 }, - rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.RINKEBY], - }, - }, - _b$3[SupportedChainId.ROPSTEN] = { - networkType: NetworkType.L1, - docs: 'https://docs.uniswap.org/', - explorer: 'https://ropsten.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/', - label: 'Ropsten', - logoUrl: EthereumLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Ropsten Ether', symbol: 'ropETH', decimals: 18 }, - rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.ROPSTEN], - }, - }, - _b$3[SupportedChainId.KOVAN] = { - networkType: NetworkType.L1, - docs: 'https://docs.uniswap.org/', - explorer: 'https://kovan.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/', - label: 'Kovan', - logoUrl: EthereumLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Kovan Ether', symbol: 'kovETH', decimals: 18 }, - rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.KOVAN], - }, - }, - _b$3[SupportedChainId.GOERLI] = { - networkType: NetworkType.L1, - docs: 'https://docs.uniswap.org/', - explorer: 'https://goerli.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/', - label: 'Görli', - logoUrl: EthereumLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Görli Ether', symbol: 'görETH', decimals: 18 }, - rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.GOERLI], - }, - }, - _b$3[SupportedChainId.OPTIMISM] = { - networkType: NetworkType.L2, - blockWaitMsBeforeWarning: ms__default["default"](templateObject_1$1m || (templateObject_1$1m = __makeTemplateObject(["25m"], ["25m"]))), - bridge: 'https://gateway.optimism.io/?chainId=1', - defaultListUrl: OPTIMISM_LIST, - docs: 'https://optimism.io/', - explorer: 'https://optimistic.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/optimism/', - label: 'Optimism', - logoUrl: optimismLogoUrl, - statusPage: 'https://optimism.io/status', - helpCenterUrl: 'https://help.uniswap.org/en/collections/3137778-uniswap-on-optimistic-ethereum-oξ', - addNetworkInfo: { - nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, - rpcUrl: 'https://mainnet.optimism.io', - }, - }, - _b$3[SupportedChainId.OPTIMISTIC_KOVAN] = { - networkType: NetworkType.L2, - blockWaitMsBeforeWarning: ms__default["default"](templateObject_2$10 || (templateObject_2$10 = __makeTemplateObject(["25m"], ["25m"]))), - bridge: 'https://gateway.optimism.io/', - defaultListUrl: OPTIMISM_LIST, - docs: 'https://optimism.io/', - explorer: 'https://optimistic.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/optimism/', - label: 'Optimistic Kovan', - logoUrl: optimismLogoUrl, - statusPage: 'https://optimism.io/status', - helpCenterUrl: 'https://help.uniswap.org/en/collections/3137778-uniswap-on-optimistic-ethereum-oξ', - addNetworkInfo: { - nativeCurrency: { name: 'Optimistic Kovan Ether', symbol: 'kovOpETH', decimals: 18 }, - rpcUrl: 'https://kovan.optimism.io', - }, - }, - _b$3[SupportedChainId.ARBITRUM_ONE] = { - networkType: NetworkType.L2, - blockWaitMsBeforeWarning: ms__default["default"](templateObject_3$T || (templateObject_3$T = __makeTemplateObject(["10m"], ["10m"]))), - bridge: 'https://bridge.arbitrum.io/', - docs: 'https://offchainlabs.com/', - explorer: 'https://arbiscan.io/', - infoLink: 'https://info.uniswap.org/#/arbitrum', - label: 'Arbitrum', - logoUrl: arbitrumLogoUrl, - defaultListUrl: ARBITRUM_LIST, - helpCenterUrl: 'https://help.uniswap.org/en/collections/3137787-uniswap-on-arbitrum', - addNetworkInfo: { - nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, - rpcUrl: 'https://arb1.arbitrum.io/rpc', - }, - }, - _b$3[SupportedChainId.ARBITRUM_RINKEBY] = { - networkType: NetworkType.L2, - blockWaitMsBeforeWarning: ms__default["default"](templateObject_4$H || (templateObject_4$H = __makeTemplateObject(["10m"], ["10m"]))), - bridge: 'https://bridge.arbitrum.io/', - docs: 'https://offchainlabs.com/', - explorer: 'https://rinkeby-explorer.arbitrum.io/', - infoLink: 'https://info.uniswap.org/#/arbitrum/', - label: 'Arbitrum Rinkeby', - logoUrl: arbitrumLogoUrl, - defaultListUrl: ARBITRUM_LIST, - helpCenterUrl: 'https://help.uniswap.org/en/collections/3137787-uniswap-on-arbitrum', - addNetworkInfo: { - nativeCurrency: { name: 'Rinkeby Arbitrum Ether', symbol: 'rinkArbETH', decimals: 18 }, - rpcUrl: 'https://rinkeby.arbitrum.io/rpc', - }, - }, - _b$3[SupportedChainId.POLYGON] = { - networkType: NetworkType.L1, - blockWaitMsBeforeWarning: ms__default["default"](templateObject_5$y || (templateObject_5$y = __makeTemplateObject(["10m"], ["10m"]))), - bridge: 'https://wallet.polygon.technology/bridge', - docs: 'https://polygon.io/', - explorer: 'https://polygonscan.com/', - infoLink: 'https://info.uniswap.org/#/polygon/', - label: 'Polygon', - logoUrl: polygonMaticLogo, - addNetworkInfo: { - rpcUrl: 'https://polygon-rpc.com/', - nativeCurrency: { name: 'Polygon Matic', symbol: 'MATIC', decimals: 18 }, - }, - }, - _b$3[SupportedChainId.POLYGON_MUMBAI] = { - networkType: NetworkType.L1, - blockWaitMsBeforeWarning: ms__default["default"](templateObject_6$p || (templateObject_6$p = __makeTemplateObject(["10m"], ["10m"]))), - bridge: 'https://wallet.polygon.technology/bridge', - docs: 'https://polygon.io/', - explorer: 'https://mumbai.polygonscan.com/', - infoLink: 'https://info.uniswap.org/#/polygon/', - label: 'Polygon Mumbai', - logoUrl: polygonMaticLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Polygon Mumbai Matic', symbol: 'mMATIC', decimals: 18 }, - rpcUrl: 'https://rpc-endpoints.superfluid.dev/mumbai', - }, - }, - _b$3); -var templateObject_1$1m, templateObject_2$10, templateObject_3$T, templateObject_4$H, templateObject_5$y, templateObject_6$p; - -function useNativeCurrency() { - var chainId = useActiveWeb3React().chainId; - return React.useMemo(function () { - return chainId - ? nativeOnChain(chainId) - : // display mainnet when not connected - nativeOnChain(SupportedChainId.MAINNET); - }, [chainId]); -} - -var EMPTY_CONNECTOR = core$1.initializeConnector(function () { return empty.EMPTY; }); -utils.atomWithDefault(function () { return EMPTY_CONNECTOR; }); -utils.atomWithDefault(function () { return EMPTY_CONNECTOR; }); - -var REGISTRAR_ABI = [ - { - constant: true, - inputs: [ - { - name: 'node', - type: 'bytes32', - }, - ], - name: 'resolver', - outputs: [ - { - name: 'resolverAddress', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, -]; -var REGISTRAR_ADDRESS = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'; -var RESOLVER_ABI = [ - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - ], - name: 'contenthash', - outputs: [ - { - internalType: 'bytes', - name: '', - type: 'bytes', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, -]; -// cache the resolver contracts since most of them are the public resolver -function resolverContract(resolverAddress, provider) { - return new contracts.Contract(resolverAddress, RESOLVER_ABI, provider); -} -/** - * Fetches and decodes the result of an ENS contenthash lookup on mainnet to a URI - * @param ensName to resolve - * @param provider provider to use to fetch the data - */ -function resolveENSContentHash(ensName, provider) { - return __awaiter(this, void 0, void 0, function () { - var ensRegistrarContract, hash$1, resolverAddress; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - ensRegistrarContract = new contracts.Contract(REGISTRAR_ADDRESS, REGISTRAR_ABI, provider); - hash$1 = hash.namehash(ensName); - return [4 /*yield*/, ensRegistrarContract.resolver(hash$1)]; - case 1: - resolverAddress = _a.sent(); - return [2 /*return*/, resolverContract(resolverAddress, provider).contenthash(hash$1)]; - } - }); - }); -} - -function hexToUint8Array(hex) { - hex = hex.startsWith('0x') ? hex.substr(2) : hex; - if (hex.length % 2 !== 0) - throw new Error('hex must have length that is multiple of 2'); - var arr = new Uint8Array(hex.length / 2); - for (var i = 0; i < arr.length; i++) { - arr[i] = parseInt(hex.substr(i * 2, 2), 16); - } - return arr; -} -var UTF_8_DECODER = new TextDecoder('utf-8'); -/** - * Returns the URI representation of the content hash for supported codecs - * @param contenthash to decode - */ -function contenthashToUri(contenthash) { - var data = hexToUint8Array(contenthash); - var codec = multicodec.getNameFromData(data); - switch (codec) { - case 'ipfs-ns': { - var unprefixedData = multicodec.rmPrefix(data); - var cid = new CID__default["default"](unprefixedData); - return "ipfs://" + multihashes.toB58String(cid.multihash); - } - case 'ipns-ns': { - var unprefixedData = multicodec.rmPrefix(data); - var cid = new CID__default["default"](unprefixedData); - var multihash = multihashes.decode(cid.multihash); - if (multihash.name === 'identity') { - return "ipns://" + UTF_8_DECODER.decode(multihash.digest).trim(); - } - else { - return "ipns://" + multihashes.toB58String(cid.multihash); - } - } - default: - throw new Error("Unrecognized codec: " + codec); - } -} - -var ENS_NAME_REGEX$1 = /^(([a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\.)+)eth(\/.*)?$/; -function parseENSAddress(ensAddress) { - var match = ensAddress.match(ENS_NAME_REGEX$1); - if (!match) - return undefined; - return { ensName: match[1].toLowerCase() + "eth", ensPath: match[4] }; -} - -/** - * Given a URI that may be ipfs, ipns, http, https, ar, or data protocol, return the fetch-able http(s) URLs for the same content - * @param uri to convert to fetch-able http url - */ -function uriToHttp(uri) { - var _a, _b, _c; - var protocol = uri.split(':')[0].toLowerCase(); - switch (protocol) { - case 'data': - return [uri]; - case 'https': - return [uri]; - case 'http': - return ['https' + uri.substr(4), uri]; - case 'ipfs': - var hash = (_a = uri.match(/^ipfs:(\/\/)?(.*)$/i)) === null || _a === void 0 ? void 0 : _a[2]; - return ["https://cloudflare-ipfs.com/ipfs/" + hash + "/", "https://ipfs.io/ipfs/" + hash + "/"]; - case 'ipns': - var name_1 = (_b = uri.match(/^ipns:(\/\/)?(.*)$/i)) === null || _b === void 0 ? void 0 : _b[2]; - return ["https://cloudflare-ipfs.com/ipns/" + name_1 + "/", "https://ipfs.io/ipns/" + name_1 + "/"]; - case 'ar': - var tx = (_c = uri.match(/^ar:(\/\/)?(.*)$/i)) === null || _c === void 0 ? void 0 : _c[2]; - return ["https://arweave.net/" + tx]; - default: - return []; - } -} - -var ValidationSchema; -(function (ValidationSchema) { - ValidationSchema["LIST"] = "list"; - ValidationSchema["TOKENS"] = "tokens"; -})(ValidationSchema || (ValidationSchema = {})); -var validator = new Promise(function (resolve) { return __awaiter(void 0, void 0, void 0, function () { - var _a, ajv, schema, validator; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, Promise.all([Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('ajv')); }), Promise.resolve().then(function () { return tokenlist_schema$1; })])]; - case 1: - _a = __read.apply(void 0, [_b.sent(), 2]), ajv = _a[0], schema = _a[1]; - validator = new ajv.default({ allErrors: true }) - .addSchema(schema, ValidationSchema.LIST) - // Adds a meta scheme of Pick - .addSchema(__assign(__assign({}, schema), { $id: schema.$id + '#tokens', required: ['tokens'] }), ValidationSchema.TOKENS); - resolve(validator); - return [2 /*return*/]; - } - }); -}); }); -function getValidationErrors(validate) { - var _a, _b; - return ((_b = (_a = validate === null || validate === void 0 ? void 0 : validate.errors) === null || _a === void 0 ? void 0 : _a.map(function (error) { return [error.dataPath, error.message].filter(Boolean).join(' '); }).join('; ')) !== null && _b !== void 0 ? _b : 'unknown error'); -} -/** - * Validates a token list. - * @param json the TokenList to validate - */ -function validateTokenList(json) { - return __awaiter(this, void 0, void 0, function () { - var validate; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, validator]; - case 1: - validate = (_a.sent()).getSchema(ValidationSchema.LIST); - if (validate === null || validate === void 0 ? void 0 : validate(json)) { - return [2 /*return*/, json]; - } - throw new Error("Token list failed validation: " + getValidationErrors(validate)); - } - }); - }); -} - -var listCache = new Map(); -/** Fetches and validates a token list. */ -function fetchTokenList$1(listUrl, resolveENSContentHash) { - var _a; - return __awaiter(this, void 0, void 0, function () { - var cached, urls, parsedENS, contentHashUri, error_1, message, translatedUri, message, i, url, isLast, response, error_2, message, message, json, list; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - cached = listCache === null || listCache === void 0 ? void 0 : listCache.get(listUrl) // avoid spurious re-fetches - ; - if (cached) { - return [2 /*return*/, cached]; - } - parsedENS = parseENSAddress(listUrl); - if (!parsedENS) return [3 /*break*/, 5]; - contentHashUri = void 0; - _b.label = 1; - case 1: - _b.trys.push([1, 3, , 4]); - return [4 /*yield*/, resolveENSContentHash(parsedENS.ensName)]; - case 2: - contentHashUri = _b.sent(); - return [3 /*break*/, 4]; - case 3: - error_1 = _b.sent(); - message = "failed to resolve ENS name: " + parsedENS.ensName; - console.debug(message, error_1); - throw new Error(message); - case 4: - translatedUri = void 0; - try { - translatedUri = contenthashToUri(contentHashUri); - } - catch (error) { - message = "failed to translate contenthash to URI: " + contentHashUri; - console.debug(message, error); - throw new Error(message); - } - urls = uriToHttp("" + translatedUri + ((_a = parsedENS.ensPath) !== null && _a !== void 0 ? _a : '')); - return [3 /*break*/, 6]; - case 5: - urls = uriToHttp(listUrl); - _b.label = 6; - case 6: - i = 0; - _b.label = 7; - case 7: - if (!(i < urls.length)) return [3 /*break*/, 15]; - url = urls[i]; - isLast = i === urls.length - 1; - response = void 0; - _b.label = 8; - case 8: - _b.trys.push([8, 10, , 11]); - return [4 /*yield*/, fetch(url, { credentials: 'omit' })]; - case 9: - response = _b.sent(); - return [3 /*break*/, 11]; - case 10: - error_2 = _b.sent(); - message = "failed to fetch list: " + listUrl; - console.debug(message, error_2); - if (isLast) - throw new Error(message); - return [3 /*break*/, 14]; - case 11: - if (!response.ok) { - message = "failed to fetch list: " + listUrl; - console.debug(message, response.statusText); - if (isLast) - throw new Error(message); - return [3 /*break*/, 14]; - } - return [4 /*yield*/, response.json()]; - case 12: - json = _b.sent(); - return [4 /*yield*/, validateTokenList(json)]; - case 13: - list = _b.sent(); - listCache === null || listCache === void 0 ? void 0 : listCache.set(listUrl, list); - return [2 /*return*/, list]; - case 14: - i++; - return [3 /*break*/, 7]; - case 15: throw new Error('Unrecognized list URL protocol.'); - } - }); - }); -} - -/** - * Returns a map of the given addresses to their eventually consistent ETH balances. - */ -function useNativeCurrencyBalances(uncheckedAddresses) { - var chainId = useActiveWeb3React().chainId; - var multicallContract = useInterfaceMulticall(); - var validAddressInputs = React.useMemo(function () { - return uncheckedAddresses - ? uncheckedAddresses - .map(isAddress) - .filter(function (a) { return a !== false; }) - .sort() - .map(function (addr) { return [addr]; }) - : []; - }, [uncheckedAddresses]); - var results = useSingleContractMultipleData(multicallContract, 'getEthBalance', validAddressInputs); - return React.useMemo(function () { - return validAddressInputs.reduce(function (memo, _a, i) { - var _b, _c; - var _d = __read(_a, 1), address = _d[0]; - var value = (_c = (_b = results === null || results === void 0 ? void 0 : results[i]) === null || _b === void 0 ? void 0 : _b.result) === null || _c === void 0 ? void 0 : _c[0]; - if (value && chainId) - memo[address] = sdkCore.CurrencyAmount.fromRawAmount(nativeOnChain(chainId), JSBI__default["default"].BigInt(value.toString())); - return memo; - }, {}); - }, [validAddressInputs, chainId, results]); -} -var ERC20Interface = new abi$7.Interface(ERC20ABI); -var tokenBalancesGasRequirement = { gasRequired: 125000 }; -/** - * Returns a map of token addresses to their eventually consistent token balances for a single account. - */ -function useTokenBalancesWithLoadingIndicator(address, tokens) { - var validatedTokens = React.useMemo(function () { var _a; return (_a = tokens === null || tokens === void 0 ? void 0 : tokens.filter(function (t) { return isAddress(t === null || t === void 0 ? void 0 : t.address) !== false; })) !== null && _a !== void 0 ? _a : []; }, [tokens]); - var validatedTokenAddresses = React.useMemo(function () { return validatedTokens.map(function (vt) { return vt.address; }); }, [validatedTokens]); - var balances = useMultipleContractSingleData(validatedTokenAddresses, ERC20Interface, 'balanceOf', React.useMemo(function () { return [address]; }, [address]), tokenBalancesGasRequirement); - var anyLoading = React.useMemo(function () { return balances.some(function (callState) { return callState.loading; }); }, [balances]); - return React.useMemo(function () { return [ - address && validatedTokens.length > 0 - ? validatedTokens.reduce(function (memo, token, i) { - var _a, _b; - var value = (_b = (_a = balances === null || balances === void 0 ? void 0 : balances[i]) === null || _a === void 0 ? void 0 : _a.result) === null || _b === void 0 ? void 0 : _b[0]; - var amount = value ? JSBI__default["default"].BigInt(value.toString()) : undefined; - if (amount) { - memo[token.address] = sdkCore.CurrencyAmount.fromRawAmount(token, amount); - } - return memo; - }, {}) - : {}, - anyLoading, - ]; }, [address, validatedTokens, anyLoading, balances]); -} -function useTokenBalances(address, tokens) { - return useTokenBalancesWithLoadingIndicator(address, tokens)[0]; -} -// get the balance for a single token/account combo -function useTokenBalance(account, token) { - var tokenBalances = useTokenBalances(account, React.useMemo(function () { return [token]; }, [token])); - if (!token) - return undefined; - return tokenBalances[token.address]; -} -function useCurrencyBalances(account, currencies) { - var tokens = React.useMemo(function () { var _a; return (_a = currencies === null || currencies === void 0 ? void 0 : currencies.filter(function (currency) { var _a; return (_a = currency === null || currency === void 0 ? void 0 : currency.isToken) !== null && _a !== void 0 ? _a : false; })) !== null && _a !== void 0 ? _a : []; }, [currencies]); - var tokenBalances = useTokenBalances(account, tokens); - var containsETH = React.useMemo(function () { var _a; return (_a = currencies === null || currencies === void 0 ? void 0 : currencies.some(function (currency) { return currency === null || currency === void 0 ? void 0 : currency.isNative; })) !== null && _a !== void 0 ? _a : false; }, [currencies]); - var ethBalance = useNativeCurrencyBalances(React.useMemo(function () { return (containsETH ? [account] : []); }, [containsETH, account])); - return React.useMemo(function () { - var _a; - return (_a = currencies === null || currencies === void 0 ? void 0 : currencies.map(function (currency) { - if (!account || !currency) - return undefined; - if (currency.isToken) - return tokenBalances[currency.address]; - if (currency.isNative) - return ethBalance[account]; - return undefined; - })) !== null && _a !== void 0 ? _a : []; - }, [account, currencies, ethBalance, tokenBalances]); -} -function useCurrencyBalance(account, currency) { - return useCurrencyBalances(account, React.useMemo(function () { return [currency]; }, [currency]))[0]; -} - -var alwaysTrue = function () { return true; }; -/** Creates a filter function that filters tokens that do not match the query. */ -function getTokenFilter(query) { - var searchingAddress = isAddress(query); - if (searchingAddress) { - var address_1 = searchingAddress.toLowerCase(); - return function (t) { return 'address' in t && address_1 === t.address.toLowerCase(); }; - } - var queryParts = query - .toLowerCase() - .split(/\s+/) - .filter(function (s) { return s.length > 0; }); - if (queryParts.length === 0) - return alwaysTrue; - var match = function (s) { - var parts = s - .toLowerCase() - .split(/\s+/) - .filter(function (s) { return s.length > 0; }); - return queryParts.every(function (p) { return p.length === 0 || parts.some(function (sp) { return sp.startsWith(p) || sp.endsWith(p); }); }); - }; - return function (_a) { - var name = _a.name, symbol = _a.symbol; - return Boolean((symbol && match(symbol)) || (name && match(name))); - }; -} - -/** Sorts currency amounts (descending). */ -function balanceComparator(a, b) { - if (a && b) { - return a.greaterThan(b) ? -1 : a.equalTo(b) ? 0 : 1; - } - else if (a === null || a === void 0 ? void 0 : a.greaterThan('0')) { - return -1; - } - else if (b === null || b === void 0 ? void 0 : b.greaterThan('0')) { - return 1; - } - return 0; -} -/** Sorts tokens by currency amount (descending), then symbol (ascending). */ -function tokenComparator(balances, a, b) { - // Sorts by balances - var balanceComparison = balanceComparator(balances[a.address], balances[b.address]); - if (balanceComparison !== 0) - return balanceComparison; - // Sorts by symbol - if (a.symbol && b.symbol) { - return a.symbol.toLowerCase() < b.symbol.toLowerCase() ? -1 : 1; - } - return -1; -} -/** Sorts tokens by query, giving precedence to exact matches and partial matches. */ -function useSortTokensByQuery(query, tokens) { - return React.useMemo(function () { - if (!tokens) { - return []; - } - var matches = query - .toLowerCase() - .split(/\s+/) - .filter(function (s) { return s.length > 0; }); - if (matches.length > 1) { - return tokens; - } - var exactMatches = []; - var symbolSubtrings = []; - var rest = []; - // sort tokens by exact match -> subtring on symbol match -> rest - tokens.map(function (token) { - var _a, _b; - if (((_a = token.symbol) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === matches[0]) { - return exactMatches.push(token); - } - else if ((_b = token.symbol) === null || _b === void 0 ? void 0 : _b.toLowerCase().startsWith(query.toLowerCase().trim())) { - return symbolSubtrings.push(token); - } - else { - return rest.push(token); - } - }); - return __spreadArray(__spreadArray(__spreadArray([], __read(exactMatches), false), __read(symbolSubtrings), false), __read(rest), false); - }, [tokens, query]); -} - -/** - * Token instances created from token info on a token list. - */ -var WrappedTokenInfo = /** @class */ (function () { - function WrappedTokenInfo(tokenInfo, list) { - this.isNative = false; - this.isToken = true; - this._checksummedAddress = null; - this._tags = null; - this.tokenInfo = tokenInfo; - this.list = list; - } - Object.defineProperty(WrappedTokenInfo.prototype, "address", { - get: function () { - if (this._checksummedAddress) - return this._checksummedAddress; - var checksummedAddress = isAddress(this.tokenInfo.address); - if (!checksummedAddress) - throw new Error("Invalid token address: " + this.tokenInfo.address); - return (this._checksummedAddress = checksummedAddress); - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(WrappedTokenInfo.prototype, "chainId", { - get: function () { - return this.tokenInfo.chainId; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(WrappedTokenInfo.prototype, "decimals", { - get: function () { - return this.tokenInfo.decimals; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(WrappedTokenInfo.prototype, "name", { - get: function () { - return this.tokenInfo.name; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(WrappedTokenInfo.prototype, "symbol", { - get: function () { - return this.tokenInfo.symbol; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(WrappedTokenInfo.prototype, "logoURI", { - get: function () { - return this.tokenInfo.logoURI; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(WrappedTokenInfo.prototype, "tags", { - get: function () { - var _a; - if (this._tags !== null) - return this._tags; - if (!this.tokenInfo.tags) - return (this._tags = []); - var listTags = (_a = this.list) === null || _a === void 0 ? void 0 : _a.tags; - if (!listTags) - return (this._tags = []); - return (this._tags = this.tokenInfo.tags.map(function (tagId) { - return __assign(__assign({}, listTags[tagId]), { id: tagId }); - })); - }, - enumerable: false, - configurable: true - }); - WrappedTokenInfo.prototype.equals = function (other) { - return other.chainId === this.chainId && other.isToken && other.address.toLowerCase() === this.address.toLowerCase(); - }; - WrappedTokenInfo.prototype.sortsBefore = function (other) { - if (this.equals(other)) - throw new Error('Addresses should not be equal'); - return this.address.toLowerCase() < other.address.toLowerCase(); - }; - Object.defineProperty(WrappedTokenInfo.prototype, "wrapped", { - get: function () { - return this; - }, - enumerable: false, - configurable: true - }); - return WrappedTokenInfo; -}()); - -var mapCache = typeof WeakMap !== 'undefined' ? new WeakMap() : null; -function tokensToChainTokenMap(tokens) { - var cached = mapCache === null || mapCache === void 0 ? void 0 : mapCache.get(tokens); - if (cached) - return cached; - var _a = __read(Array.isArray(tokens) ? [undefined, tokens] : [tokens, tokens.tokens], 2), list = _a[0], infos = _a[1]; - var map = infos.reduce(function (map, info) { - var _a; - var token = new WrappedTokenInfo(info, list); - if (((_a = map[token.chainId]) === null || _a === void 0 ? void 0 : _a[token.address]) !== undefined) { - console.warn("Duplicate token skipped: " + token.address); - return map; - } - if (!map[token.chainId]) { - map[token.chainId] = {}; - } - map[token.chainId][token.address] = { token: token, list: list }; - return map; - }, {}); - mapCache === null || mapCache === void 0 ? void 0 : mapCache.set(tokens, map); - return map; -} - -jotai.atom({}); - -// parse a name or symbol from a token response -var BYTES32_REGEX = /^0x[a-fA-F0-9]{64}$/; -function parseStringOrBytes32(str, bytes32, defaultValue) { - return str && str.length > 0 - ? str - : // need to check for proper bytes string and valid terminator - bytes32 && BYTES32_REGEX.test(bytes32) && bytes.arrayify(bytes32)[31] === 0 - ? strings.parseBytes32String(bytes32) - : defaultValue; -} -/** - * Returns a Token from the tokenAddress. - * Returns null if token is loading or null was passed. - * Returns undefined if tokenAddress is invalid or token does not exist. - */ -function useTokenFromMap(tokens, tokenAddress) { - var chainId = useActiveWeb3React().chainId; - var address = isAddress(tokenAddress); - var tokenContract = useTokenContract(address ? address : undefined, false); - var tokenContractBytes32 = useBytes32TokenContract(address ? address : undefined, false); - var token = address ? tokens[address] : undefined; - var tokenName = useSingleCallResult(token ? undefined : tokenContract, 'name', undefined, reduxMulticall.NEVER_RELOAD); - var tokenNameBytes32 = useSingleCallResult(token ? undefined : tokenContractBytes32, 'name', undefined, reduxMulticall.NEVER_RELOAD); - var symbol = useSingleCallResult(token ? undefined : tokenContract, 'symbol', undefined, reduxMulticall.NEVER_RELOAD); - var symbolBytes32 = useSingleCallResult(token ? undefined : tokenContractBytes32, 'symbol', undefined, reduxMulticall.NEVER_RELOAD); - var decimals = useSingleCallResult(token ? undefined : tokenContract, 'decimals', undefined, reduxMulticall.NEVER_RELOAD); - return React.useMemo(function () { - var _a, _b, _c, _d; - if (token) - return token; - if (tokenAddress === null) - return null; - if (!chainId || !address) - return undefined; - if (decimals.loading || symbol.loading || tokenName.loading) - return null; - if (decimals.result) { - return new sdkCore.Token(chainId, address, decimals.result[0], parseStringOrBytes32((_a = symbol.result) === null || _a === void 0 ? void 0 : _a[0], (_b = symbolBytes32.result) === null || _b === void 0 ? void 0 : _b[0], 'UNKNOWN'), parseStringOrBytes32((_c = tokenName.result) === null || _c === void 0 ? void 0 : _c[0], (_d = tokenNameBytes32.result) === null || _d === void 0 ? void 0 : _d[0], 'Unknown Token')); - } - return undefined; - }, [ - address, - chainId, - decimals.loading, - decimals.result, - symbol.loading, - symbol.result, - symbolBytes32.result, - token, - tokenAddress, - tokenName.loading, - tokenName.result, - tokenNameBytes32.result, - ]); -} -/** - * Returns a Currency from the currencyId. - * Returns null if currency is loading or null was passed. - * Returns undefined if currencyId is invalid or token does not exist. - */ -function useCurrencyFromMap(tokens, currencyId) { - var _a; - var nativeCurrency = useNativeCurrency(); - var isNative = Boolean(nativeCurrency && (currencyId === null || currencyId === void 0 ? void 0 : currencyId.toUpperCase()) === 'ETH'); - var token = useTokenFromMap(tokens, isNative ? undefined : currencyId); - if (currencyId === null || currencyId === undefined) - return currencyId; - // this case so we use our builtin wrapped token instead of wrapped tokens on token lists - var wrappedNative = nativeCurrency === null || nativeCurrency === void 0 ? void 0 : nativeCurrency.wrapped; - if (((_a = wrappedNative === null || wrappedNative === void 0 ? void 0 : wrappedNative.address) === null || _a === void 0 ? void 0 : _a.toUpperCase()) === (currencyId === null || currencyId === void 0 ? void 0 : currencyId.toUpperCase())) - return wrappedNative; - return isNative ? nativeCurrency : token; -} - -var DEFAULT_LIST_PRIORITIES = DEFAULT_LIST_OF_LISTS.reduce(function (memo, listUrl, index) { - memo[listUrl] = index + 1; - return memo; -}, {}); -// use ordering of default list of lists to assign priority -function sortByListPriority(urlA, urlB) { - if (DEFAULT_LIST_PRIORITIES[urlA] && DEFAULT_LIST_PRIORITIES[urlB]) { - return DEFAULT_LIST_PRIORITIES[urlA] - DEFAULT_LIST_PRIORITIES[urlB]; - } - return 0; -} - -var name$1 = "Broken Token List"; -var timestamp$1 = "2021-01-05T20:47:02.923Z"; -var version$1 = { - major: 1, - minor: 0, - patch: 0 -}; -var tags$1 = { -}; -var logoURI$1 = "ipfs://QmNa8mQkrNKp1WEEeGjFezDmDeodkWRevGFN8JCV7b4Xir"; -var keywords$1 = [ - "uniswap", - "broken" -]; -var tokens$1 = [ - { - name: "UNI HODL", - address: "0x4bf5dc91E2555449293D7824028Eb8Fe5879B689", - symbol: "UniH", - decimals: 18, - chainId: 1, - logoURI: "" - } -]; -var BROKEN_LIST = { - name: name$1, - timestamp: timestamp$1, - version: version$1, - tags: tags$1, - logoURI: logoURI$1, - keywords: keywords$1, - tokens: tokens$1 -}; - -var name = "Unsupported Tokens"; -var timestamp = "2021-01-05T20:47:02.923Z"; -var version = { - major: 1, - minor: 0, - patch: 0 -}; -var tags = { -}; -var logoURI = "ipfs://QmNa8mQkrNKp1WEEeGjFezDmDeodkWRevGFN8JCV7b4Xir"; -var keywords = [ - "uniswap", - "unsupported" -]; -var tokens = [ - { - name: "Gold Tether", - address: "0x4922a015c4407F87432B179bb209e125432E4a2A", - symbol: "XAUt", - decimals: 6, - chainId: 1, - logoURI: "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4922a015c4407F87432B179bb209e125432E4a2A/logo.png" - }, - { - name: "Grump Cat", - address: "0x93B2FfF814FCaEFFB01406e80B4Ecd89Ca6A021b", - symbol: "GRUMPY", - decimals: 9, - chainId: 1, - logoURI: "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4922a015c4407F87432B179bb209e125432E4a2A/logo.png" - }, - { - name: "apeUSD-UMA Synthetic USD (Dec 2021)", - address: "0xfA5e27893aee4805283D86e4283Da64F8c72dd56", - symbol: "apeUSD-UMA-DEC21", - decimals: 18, - chainId: 1, - logoURI: "" - }, - { - chainId: 1, - address: "0xc6b11850241c5127eab73af4b6c68bc267cbbff4", - name: "oWETHp Put 360 DEC2520", - symbol: "oWETH-360P-12/25/20", - decimals: 7 - }, - { - chainId: 1, - name: "oYFIp Put 25000 OCT0220", - address: "0x452b421be5b30f0c6ad8c3f03c06bdaab4f5c56c", - symbol: "oYFI-25000P-10/02/20", - decimals: 7 - }, - { - chainId: 1, - name: "oWETHp Put 360 OCT3020", - address: "0x0578779e746d7186253a36cf651ea786acfcf087", - symbol: "oWETH-360P-10/30/20", - decimals: 7 - }, - { - chainId: 1, - name: "ETHc Call 500 OCT3020", - address: "0xf9aba2e43fb19184408ea3b572a0fd672946f87b", - symbol: "oETH-500C-10/30/20", - decimals: 6 - }, - { - chainId: 1, - name: "oBALp Put 22 OCT0220", - address: "0xdb0991dfc7e828b5a2837dc82d68e16490562c8d", - symbol: "oBAL-22P-10/02/20", - decimals: 7 - }, - { - chainId: 1, - name: "oCOMPp Put 150 SEP2520", - address: "0xe951ebe6b4420ab3f4844cf36dedd263d095b416", - symbol: "oCOMP-150P-09/25/20", - decimals: 7 - }, - { - chainId: 1, - name: "oCRVp Put 3 SEP252020", - address: "0x9215bd49b59748419eac6bad9dbe247df06ebdb9", - symbol: "oCRV-3P-09/25/20", - decimals: 7 - }, - { - chainId: 1, - name: "oETHp Put 180 SEP2520", - address: "0xE3A2c34Fa2F59ffa95C4ACd1E5663633d45Bc3AD", - symbol: "oETH-180P-09/25/20", - decimals: 7 - }, - { - chainId: 1, - name: "oETHc Call 400 SEP2520", - address: "0x05977EBC26825C0CD6097E0Ad7204721516711Eb", - symbol: "oETH-400C-09/25/20", - decimals: 7 - }, - { - chainId: 1, - name: "oWETHp Put 380 SEP1820", - address: "0x31f88266301b08631f9f0e33fd5c43c2a5d1e5b2", - symbol: "oWETH-380P-09/18/20", - decimals: 7 - }, - { - chainId: 1, - name: "oYFIp Put 8500 SEP1820", - address: "0xd1cec2f67fdc4c60e0963515dfc3343f31e32e47", - symbol: "oYFI-8500P-09/18/20", - decimals: 7 - }, - { - chainId: 1, - name: "oWETHp Put 370 SEP1120", - address: "0x15844029b2c2bf24506e9937739a9a912f1e4354", - symbol: "oWETH-370P-09/11/20", - decimals: 7 - }, - { - chainId: 1, - name: "oWETHp Put 400 SEP0420", - address: "0x5562c33c383f6386be4f6dcdbd35a3a99bbcfde6", - symbol: "oWETH-400P-09/04/20", - decimals: 7 - }, - { - chainId: 1, - name: "oETHp Put 200 AUG2820", - address: "0x3CBFC1397deF0602c2d211c70A1c0c38CEDB5448", - symbol: "oWETH-400P-09/04/20", - decimals: 7 - }, - { - chainId: 1, - name: "Opyn cDai Insurance", - symbol: "ocDai", - address: "0x98cc3bd6af1880fcfda17ac477b2f612980e5e33", - decimals: 8 - }, - { - chainId: 1, - name: "Opyn cUSDC Insurance", - symbol: "ocUSDC", - address: "0x8ED9f862363fFdFD3a07546e618214b6D59F03d4", - decimals: 8 - }, - { - chainId: 1, - address: "0x176C674Ee533C6139B0dc8b458D72A93dCB3e705", - symbol: "iAAVE", - name: "Synth Inverse Aave", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iAAVE.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x8A8079c7149B8A1611e5C5d978DCA3bE16545F83", - symbol: "iADA", - name: "Synth Inverse Cardano", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iADA.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0xAFD870F32CE54EfdBF677466B612bf8ad164454B", - symbol: "iBNB", - name: "Synth Inverse Binance Coin", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iBNB.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0xD6014EA05BDe904448B743833dDF07c3C7837481", - symbol: "iBTC", - name: "Synth Inverse Bitcoin", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iBTC.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x336213e1DDFC69f4701Fc3F86F4ef4A160c1159d", - symbol: "iCEX", - name: "Synth Inverse Centralised Exchange Index", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iCEX.svg", - tags: [ - "index", - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x6345728B1ccE16E6f8C509950b5c84FFF88530d9", - symbol: "iCOMP", - name: "Synth Inverse Compound", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iCOMP.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0xCB98f42221b2C251A4E74A1609722eE09f0cc08E", - symbol: "iDASH", - name: "Synth Inverse Dash", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDASH.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x14d10003807AC60d07BB0ba82cAeaC8d2087c157", - symbol: "iDEFI", - name: "Synth Inverse DeFi Index", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDEFI.svg", - tags: [ - "index", - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x46a97629C9C1F58De6EC18C7F536e7E6d6A6ecDe", - symbol: "iDOT", - name: "Synth Inverse Polkadot", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDOT.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0xF4EebDD0704021eF2a6Bbe993fdf93030Cd784b4", - symbol: "iEOS", - name: "Synth Inverse EOS", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iEOS.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0xd50c1746D835d2770dDA3703B69187bFfeB14126", - symbol: "iETC", - name: "Synth Inverse Ethereum Classic", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iETC.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0xA9859874e1743A32409f75bB11549892138BBA1E", - symbol: "iETH", - name: "Synth Inverse Ether", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iETH.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x2d7aC061fc3db53c39fe1607fB8cec1B2C162B01", - symbol: "iLINK", - name: "Synth Inverse Chainlink", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iLINK.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x79da1431150C9b82D2E5dfc1C68B33216846851e", - symbol: "iLTC", - name: "Synth Inverse Litecoin", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iLTC.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0xA5a5DF41883Cdc00c4cCC6E8097130535399d9a3", - symbol: "iOIL", - name: "Synth Inverse Perpetual Oil Futures", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iOIL.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x0fEd38108bdb8e62ef7b5680E8E0726E2F29e0De", - symbol: "iREN", - name: "Synth Inverse Ren", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iREN.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0xC5807183a9661A533CB08CbC297594a0B864dc12", - symbol: "iTRX", - name: "Synth Inverse TRON", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iTRX.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x36A00FF9072570eF4B9292117850B8FE08d96cce", - symbol: "iUNI", - name: "Synth Inverse Uniswap", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iUNI.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x4AdF728E2Df4945082cDD6053869f51278fae196", - symbol: "iXMR", - name: "Synth Inverse Monero", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXMR.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x27269b3e45A4D3E79A3D6BFeE0C8fB13d0D711A6", - symbol: "iXRP", - name: "Synth Inverse Ripple", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXRP.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x8deef89058090ac5655A99EEB451a4f9183D1678", - symbol: "iXTZ", - name: "Synth Inverse Tezos", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXTZ.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x592244301CeA952d6daB2fdC1fE6bd9E53917306", - symbol: "iYFI", - name: "Synth Inverse yearn.finance", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iYFI.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0xcD39b5434a0A92cf47D1F567a7dF84bE356814F0", - symbol: "s1INCH", - name: "Synth 1inch", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/s1INCH.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x7537AAe01f3B218DAE75e10d952473823F961B87", - symbol: "sAAPL", - name: "Synth Apple", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAAPL.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xd2dF355C19471c8bd7D8A3aa27Ff4e26A21b4076", - symbol: "sAAVE", - name: "Synth Aave", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAAVE.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xe36E2D3c7c34281FA3bC737950a68571736880A1", - symbol: "sADA", - name: "Synth Cardano", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sADA.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x9CF7E61853ea30A41b02169391b393B901eac457", - symbol: "sAMZN", - name: "Synth Amazon", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAMZN.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xF48e200EAF9906362BB1442fca31e0835773b8B4", - symbol: "sAUD", - name: "Synth Australian Dollars", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAUD.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x617aeCB6137B5108D1E7D4918e3725C8cEbdB848", - symbol: "sBNB", - name: "Synth Binance Coin", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sBNB.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xfE18be6b3Bd88A2D2A7f928d00292E7a9963CfC6", - symbol: "sBTC", - name: "Synth Bitcoin", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sBTC.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xeABACD844A196D7Faf3CE596edeBF9900341B420", - symbol: "sCEX", - name: "Synth Centralised Exchange Index", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCEX.svg", - tags: [ - "index", - "synth" - ] - }, - { - chainId: 1, - address: "0x0F83287FF768D1c1e17a42F44d644D7F22e8ee1d", - symbol: "sCHF", - name: "Synth Swiss Franc", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCHF.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x9EeF4CA7aB9fa8bc0650127341C2d3F707a40f8A", - symbol: "sCOIN", - name: "Synth Coinbase", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCOIN.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xEb029507d3e043DD6C87F2917C4E82B902c35618", - symbol: "sCOMP", - name: "Synth Compound", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCOMP.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xD38aEb759891882e78E957c80656572503D8c1B1", - symbol: "sCRV", - name: "Synth Curve DAO Token", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCRV.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xfE33ae95A9f0DA8A845aF33516EDc240DCD711d6", - symbol: "sDASH", - name: "Synth Dash", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDASH.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xe1aFe1Fd76Fd88f78cBf599ea1846231B8bA3B6B", - symbol: "sDEFI", - name: "Synth DeFi Index", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDEFI.svg", - tags: [ - "index", - "synth" - ] - }, - { - chainId: 1, - address: "0x1715AC0743102BF5Cd58EfBB6Cf2dC2685d967b6", - symbol: "sDOT", - name: "Synth Polkadot", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDOT.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x88C8Cf3A212c0369698D13FE98Fcb76620389841", - symbol: "sEOS", - name: "Synth EOS", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sEOS.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x22602469d704BfFb0936c7A7cfcD18f7aA269375", - symbol: "sETC", - name: "Synth Ethereum Classic", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sETC.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x5e74C9036fb86BD7eCdcb084a0673EFc32eA31cb", - symbol: "sETH", - name: "Synth Ether", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sETH.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xD71eCFF9342A5Ced620049e616c5035F1dB98620", - symbol: "sEUR", - name: "Synth Euros", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sEUR.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xf50B5e535F62a56A9BD2d8e2434204E726c027Fa", - symbol: "sFB", - name: "Synth Facebook", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sFB.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x23348160D7f5aca21195dF2b70f28Fce2B0be9fC", - symbol: "sFTSE", - name: "Synth FTSE 100 Index", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sFTSE.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x97fe22E7341a0Cd8Db6F6C021A24Dc8f4DAD855F", - symbol: "sGBP", - name: "Synth Pound Sterling", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sGBP.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xC63B8ECCE56aB9C46184eC6aB85e4771fEa4c8AD", - symbol: "sGOOG", - name: "Synth Alphabet", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sGOOG.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xF6b1C627e95BFc3c1b4c9B825a032Ff0fBf3e07d", - symbol: "sJPY", - name: "Synth Japanese Yen", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sJPY.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x269895a3dF4D73b077Fc823dD6dA1B95f72Aaf9B", - symbol: "sKRW", - name: "Synth South Korean Won", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sKRW.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xbBC455cb4F1B9e4bFC4B73970d360c8f032EfEE6", - symbol: "sLINK", - name: "Synth Chainlink", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sLINK.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xC14103C2141E842e228FBaC594579e798616ce7A", - symbol: "sLTC", - name: "Synth Litecoin", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sLTC.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x745a824D6aBBD236AA794b5530062778A6Ad7523", - symbol: "sMSFT", - name: "Synth Microsoft", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sMSFT.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x5A7E3c07604EB515C16b36cd51906a65f021F609", - symbol: "sNFLX", - name: "Synth Netflix", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sNFLX.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x757de3ac6B830a931eF178C6634c5C551773155c", - symbol: "sNIKKEI", - name: "Synth Nikkei 225 Index", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sNIKKEI.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x6d16cF3EC5F763d4d99cB0B0b110eefD93B11B56", - symbol: "sOIL", - name: "Synth Perpetual Oil Futures", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sOIL.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xD31533E8d0f3DF62060e94B3F1318137bB6E3525", - symbol: "sREN", - name: "Synth Ren", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sREN.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x0352557B007A4Aae1511C114409b932F06F9E2f4", - symbol: "sRUNE", - name: "Synth THORChain", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sRUNE.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xf2E08356588EC5cd9E437552Da87C0076b4970B0", - symbol: "sTRX", - name: "Synth TRON", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sTRX.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x918dA91Ccbc32B7a6A0cc4eCd5987bbab6E31e6D", - symbol: "sTSLA", - name: "Synth Tesla", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sTSLA.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x30635297E450b930f8693297eBa160D9e6c8eBcf", - symbol: "sUNI", - name: "Synth Uniswap", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sUNI.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x6A22e5e94388464181578Aa7A6B869e00fE27846", - symbol: "sXAG", - name: "Synth Silver Ounce", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXAG.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x261EfCdD24CeA98652B9700800a13DfBca4103fF", - symbol: "sXAU", - name: "Synth Gold Ounce", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXAU.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x5299d6F7472DCc137D7f3C4BcfBBB514BaBF341A", - symbol: "sXMR", - name: "Synth Monero", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXMR.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xa2B0fDe6D710e201d0d608e924A484d1A5fEd57c", - symbol: "sXRP", - name: "Synth Ripple", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXRP.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x2e59005c5c0f0a4D77CcA82653d48b46322EE5Cd", - symbol: "sXTZ", - name: "Synth Tezos", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXTZ.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x992058B7DB08F9734d84485bfbC243C4ee6954A7", - symbol: "sYFI", - name: "Synth yearn.finance", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sYFI.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x81ab848898b5ffD3354dbbEfb333D5D183eEDcB5", - name: "yUSD Synthetic Expiring 1 September 2020", - symbol: "yUSDSEP20", - decimals: 18 - }, - { - chainId: 1, - address: "0xB2FdD60AD80ca7bA89B9BAb3b5336c2601C020b4", - name: "yUSD Synthetic Expiring 1 October 2020", - symbol: "yUSDOCT20", - decimals: 18 - }, - { - chainId: 1, - address: "0x208d174775dc39fe18b1b374972f77ddec6c0f73", - name: "uUSDrBTC Synthetic Expiring 1 Oct 2020", - symbol: "uUSDrBTC-OCT", - decimals: 18 - }, - { - chainId: 1, - address: "0xf06ddacf71e2992e2122a1a0168c6967afdf63ce", - name: "uUSDrBTC Synthetic Expiring 31 Dec 2020", - symbol: "uUSDrBTC-DEC", - decimals: 18 - }, - { - chainId: 1, - address: "0xd16c79c8a39d44b2f3eb45d2019cd6a42b03e2a9", - name: "uUSDwETH Synthetic Expiring 31 Dec 2020", - symbol: "uUSDwETH-DEC", - decimals: 18 - }, - { - chainId: 1, - address: "0x3d995510f8d82c2ea341845932b5ddde0bead9a3", - name: "uGAS-JAN21 Token Expiring 31 Jan 2021", - symbol: "uGAS-JAN21", - decimals: 18 - }, - { - chainId: 1, - address: "0x90f802c7e8fb5d40b0de583e34c065a3bd2020d8", - name: "YD-ETH-MAR21 Token Expiring 31 Mar 2021", - symbol: "YD-ETH-MAR21", - decimals: 18 - }, - { - chainId: 1, - address: "0x002f0b1a71c5730cf2f4da1970a889207bdb6d0d", - name: "YD-BTC-MAR21 Token Expiring 31 Mar 2021", - symbol: "YD-BTC-MAR21", - decimals: 18 - }, - { - chainId: 1, - address: "0x1062ad0e59fa67fa0b27369113098cc941dd0d5f", - name: "UMA 35 Call Expirying 30 Apr 2021", - symbol: "UMAc35-0421", - decimals: 18 - }, - { - chainId: 1, - address: "0xf93340b1a3adf7eedcaec25fae8171d4b736e89f", - name: "pxUSD Synthetic USD Expiring 1 April 2021", - symbol: "pxUSD_MAR2021", - decimals: 18 - }, - { - chainId: 1, - address: "0x84bd083b1c8bf929f39c98bc17cf518f40154f58", - name: "Mario Cash Synthetic Token Expiring 15 January 2021", - symbol: "Mario Cash-JAN-2021", - decimals: 18 - }, - { - chainId: 1, - address: "0x81fab276aec924fbde190cf379783526d413cf70", - name: "uGAS-FEB21 Token Expiring 28 Feb 2021", - symbol: "uGAS-FEB21", - decimals: 18 - }, - { - chainId: 1, - address: "0x4e110603e70b0b5f1c403ee543b37e1f1244cf28", - name: "uGAS-MAR21 Token Expiring 31 Mar 2021", - symbol: "uGAS-MAR21", - decimals: 18 - }, - { - chainId: 1, - address: "0xcf55a7f92d5e0c6683debbc1fc20c0a6e056df13", - name: "Zelda Elastic Cash", - symbol: "Zelda Elastic Cash", - decimals: 18 - }, - { - chainId: 1, - address: "0x654eebac62240e6c56bab5f6adf7cfa74a894510", - name: "Zelda Spring Nuts Cash", - symbol: "Zelda Spring Nuts Cash", - decimals: 18 - }, - { - chainId: 1, - address: "0xa48920cc1ad85d8ea13af5d7be180c0338c306dd", - name: "Zelda Summer Nuts Cash", - symbol: "Zelda Summer Nuts Cash", - decimals: 18 - }, - { - chainId: 1, - address: "0x249a198d59b57fda5dda90630febc86fd8c7594c", - name: "Zelda Whirlwind Cash", - symbol: "Zelda Whirlwind Cash", - decimals: 18 - }, - { - chainId: 1, - address: "0x5ed1406873c9eb91f6f9a67ac4e152387c1132e7", - name: "Zelda Reinforced Cash", - symbol: "Zelda Reinforced Cash", - decimals: 18 - }, - { - chainId: 1, - address: "0x8104c9f13118320eefe5fbea8a44d600b85981ef", - name: "Mini Mario Summer Cash", - symbol: "Mini Mario Summer Cash", - decimals: 18 - }, - { - chainId: 1, - address: "0x69746c719e59674b147df25f50e7cfa0673cb625", - name: "Mini Mario Spring Cash", - symbol: "Mini Mario Spring Cash", - decimals: 18 - }, - { - chainId: 1, - address: "0x6b1257641d18791141f025eab36fb567c4b564ff", - name: "Bitcoin Dominance Token 31 March 2021", - symbol: "BTCDOM-MAR2021", - decimals: 18 - }, - { - chainId: 1, - address: "0x4e83b6287588a96321b2661c5e041845ff7814af", - name: "Altcoin Dominance Token 31 March 2021", - symbol: "ALTDOM-MAR2021", - decimals: 18 - }, - { - chainId: 1, - address: "0x59fec83ec709c893aedd1a144cf1828eb04127cd", - name: "pxGOLD Synthetic GOLD Expiring 31 May 2021", - symbol: "pxGOLD_MAY2021", - decimals: 18 - }, - { - chainId: 1, - address: "0x89337BFb7938804c3776C9FB921EccAf5ab76758", - name: "Compound Annualized Rate Future Expiring 28 March 2021", - symbol: "CAR-USDC-MAR21", - decimals: 18 - }, - { - chainId: 1, - address: "0xec58d3aefc9aaa2e0036fa65f70d569f49d9d1ed", - name: "uSTONKS Index Token April 2021", - symbol: "uSTONKS_APR21", - decimals: 6 - }, - { - chainId: 1, - address: "0xa6B9d7E3d76cF23549293Fb22c488E0Ea591A44e", - name: "uGAS-JUN21 Token Expiring 30 Jun 2021", - symbol: "uGAS-JUN21", - decimals: 18 - }, - { - chainId: 1, - address: "0xe813b65da6c38a04591aed3f082d32db7d53c382", - name: "Yield Dollar [WETH Dec 2021]", - symbol: "YD-ETH-DEC21", - decimals: 18 - }, - { - chainId: 1, - address: "0x4b606e9eb2228c70f44453afe5a73e1fea258ce1", - name: "pxUSD Synthetic USD Expiring 31 Mar 2022", - symbol: "pxUSD_MAR2022", - decimals: 18 - }, - { - chainId: 1, - address: "0x5247c0db4044fb6f97f32c7e1b48758019a5a912", - name: "pxGOLD Synthetic Gold Expiring 31 Mar 2022", - symbol: "pxGOLD_MAR2022", - decimals: 18 - }, - { - chainId: 1, - address: "0x56fb1acaff95c0b6ebcd17c8361a63d98b1a5a11", - name: "uForex CNYUSD Synthetic Token April 2021", - symbol: "uCNYUSD-APR", - decimals: 6 - }, - { - chainId: 1, - address: "0xd49fa405dce086c65d66ca1ca41f8e98583812b4", - name: "uForex EURUSD Synthetic Token April 2021", - symbol: "uEURUSD-APR", - decimals: 6 - }, - { - chainId: 1, - address: "0x29dddacba3b231ee8d673dd0f0fa759ea145561b", - name: "DEFI_PULSE_TOTAL_TVL Synthetic Token Expiring 15 April 2021", - symbol: "TVL_ALL_APRIL15", - decimals: 6 - }, - { - chainId: 1, - address: "0xcbe430927370e95b4b10cfc702c6017ec7abefc3", - name: "Yield Dollar [WETH Jun 2021]", - symbol: "YD-ETH-JUN21", - decimals: 18 - }, - { - chainId: 1, - address: "0x4b7fb448df91c8ed973494f8c8c4f12daf3a8521", - name: "Yield Dollar [renBTC Jun 2021]", - symbol: "YD-BTC-JUN21", - decimals: 8 - }, - { - chainId: 1, - address: "0x3108c33b6fb38efedaefd8b5f7ca01d5f5c7372d", - name: "Yield Dollar UMA 21", - symbol: "yUMA21", - decimals: 18 - }, - { - chainId: 1, - address: "0x0cae9e4d663793c2a2A0b211c1Cf4bBca2B9cAa7", - name: "Mirrored Amazon", - symbol: "MAMZN", - decimals: 18 - }, - { - chainId: 1, - address: "0x31c63146a635EB7465e5853020b39713AC356991", - name: "M US Oil", - symbol: "MUSO", - decimals: 18 - }, - { - chainId: 1, - address: "0x59A921Db27Dd6d4d974745B7FfC5c33932653442", - name: "M Google", - symbol: "MGOOGL", - decimals: 18 - }, - { - chainId: 1, - address: "0xf72FCd9DCF0190923Fadd44811E240Ef4533fc86", - name: "Mirrored ProShares", - symbol: "MVIXY", - decimals: 18 - }, - { - chainId: 1, - address: "0x56aA298a19C93c6801FDde870fA63EF75Cc0aF72", - name: "Mirrored Alibaba", - symbol: "MBABA", - decimals: 18 - }, - { - chainId: 1, - address: "0x0e99cC0535BB6251F6679Fa6E65d6d3b430e840B", - name: "Mirrored Facebook", - symbol: "MFB", - decimals: 18 - }, - { - chainId: 1, - address: "0x13B02c8dE71680e71F0820c996E4bE43c2F57d15", - name: "Mirrored Invesco QQ", - symbol: "MQQQ", - decimals: 18 - }, - { - chainId: 1, - address: "0x41BbEDd7286dAab5910a1f15d12CBda839852BD7", - name: "Mirrored Microsoft", - symbol: "MMSFT", - decimals: 18 - }, - { - chainId: 1, - address: "0x9d1555d8cB3C846Bb4f7D5B1B1080872c3166676", - name: "Mirrored iShares Si", - symbol: "MSLV", - decimals: 18 - }, - { - chainId: 1, - address: "0x21cA39943E91d704678F5D00b6616650F066fD63", - name: "Mirrored Tesla", - symbol: "MTSLA", - decimals: 18 - }, - { - chainId: 1, - address: "0xe82bbB62fA81d0701643d1675FB50ec52fD3Df92", - name: "DYDX Token", - symbol: "DYDX", - decimals: 18 - }, - { - chainId: 10, - address: "0xE405de8F52ba7559f9df3C368500B6E6ae6Cee49", - name: "sETH", - symbol: "Synth Ether", - decimals: 18 - }, - { - chainId: 10, - address: "0x298B9B95708152ff6968aafd889c6586e9169f1D", - name: "sBTC", - symbol: "Synth Bitcoin", - decimals: 18 - }, - { - chainId: 10, - address: "0xc5Db22719A06418028A40A9B5E9A7c02959D0d08", - name: "sLINK", - symbol: "Synth Link", - decimals: 18 - }, - { - chainId: 1, - address: "0x6B60eE11b73230045cF9095E6e43AE9Ea638e172", - name: "Shatner", - symbol: "SHAT", - decimals: 18 - }, - { - chainId: 1, - address: "0x7277a44D1325D81Ac58893002a1B40a41bea43fe", - name: "FAANG Index", - symbol: "FAANG", - decimals: 18 - }, - { - chainId: 1, - address: "0x76175599887730786bdA1545D0D7AcE8737fEBB1", - name: "ENS DAO", - symbol: "ENS", - decimals: 18 - }, - { - chainId: 1, - address: "0xa82AA729AE2F0d78e961D66db53949e27a9E866d", - name: "BMEX", - symbol: "BMEX", - decimals: 18 - } -]; -var UNSUPPORTED_TOKEN_LIST = { - name: name, - timestamp: timestamp, - version: version, - tags: tags, - logoURI: logoURI, - keywords: keywords, - tokens: tokens -}; - -function useAllLists() { - return useAppSelector(function (state) { return state.lists.byUrl; }); -} -/** - * Combine the tokens in map2 with the tokens on map1, where tokens on map1 take precedence - * @param map1 the base token map - * @param map2 the map of additioanl tokens to add to the base map - */ -function combineMaps(map1, map2) { - var chainIds = Object.keys(Object.keys(map1) - .concat(Object.keys(map2)) - .reduce(function (memo, value) { - memo[value] = true; - return memo; - }, {})).map(function (id) { return parseInt(id); }); - return chainIds.reduce(function (memo, chainId) { - memo[chainId] = __assign(__assign({}, map2[chainId]), map1[chainId]); - return memo; - }, {}); -} -// merge tokens contained within lists from urls -function useCombinedTokenMapFromUrls(urls) { - var lists = useAllLists(); - return React.useMemo(function () { - if (!urls) - return {}; - return (urls - .slice() - // sort by priority so top priority goes last - .sort(sortByListPriority) - .reduce(function (allTokens, currentUrl) { - var _a; - var current = (_a = lists[currentUrl]) === null || _a === void 0 ? void 0 : _a.current; - if (!current) - return allTokens; - try { - return combineMaps(allTokens, tokensToChainTokenMap(current)); - } - catch (error) { - console.error('Could not show token list due to error', error); - return allTokens; - } - }, {})); - }, [lists, urls]); -} -// filter out unsupported lists -function useActiveListUrls() { - var activeListUrls = useAppSelector(function (state) { return state.lists.activeListUrls; }); - return React.useMemo(function () { return activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.filter(function (url) { return !UNSUPPORTED_LIST_URLS.includes(url); }); }, [activeListUrls]); -} -function useInactiveListUrls() { - var lists = useAllLists(); - var allActiveListUrls = useActiveListUrls(); - return React.useMemo(function () { return Object.keys(lists).filter(function (url) { return !(allActiveListUrls === null || allActiveListUrls === void 0 ? void 0 : allActiveListUrls.includes(url)) && !UNSUPPORTED_LIST_URLS.includes(url); }); }, [lists, allActiveListUrls]); -} -// get all the tokens from active lists, combine with local default tokens -function useCombinedActiveList() { - var activeListUrls = useActiveListUrls(); - var activeTokens = useCombinedTokenMapFromUrls(activeListUrls); - return activeTokens; -} -// list of tokens not supported on interface for various reasons, used to show warnings and prevent swaps and adds -function useUnsupportedTokenList() { - // get hard-coded broken tokens - var brokenListMap = React.useMemo(function () { return tokensToChainTokenMap(BROKEN_LIST); }, []); - // get hard-coded list of unsupported tokens - var localUnsupportedListMap = React.useMemo(function () { return tokensToChainTokenMap(UNSUPPORTED_TOKEN_LIST); }, []); - // get dynamic list of unsupported tokens - var loadedUnsupportedListMap = useCombinedTokenMapFromUrls(UNSUPPORTED_LIST_URLS); - // format into one token address map - return React.useMemo(function () { return combineMaps(brokenListMap, combineMaps(localUnsupportedListMap, loadedUnsupportedListMap)); }, [brokenListMap, localUnsupportedListMap, loadedUnsupportedListMap]); -} -function useIsListActive(url) { - var activeListUrls = useActiveListUrls(); - return Boolean(activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(url)); -} - -// reduce token map into standard address <-> Token mapping, optionally include user added tokens -function useTokensFromMap(tokenMap, includeUserAdded) { - var chainId = useActiveWeb3React().chainId; - var userAddedTokens = useUserAddedTokens(); - return React.useMemo(function () { - var _a; - if (!chainId) - return {}; - // reduce to just tokens - var mapWithoutUrls = Object.keys((_a = tokenMap[chainId]) !== null && _a !== void 0 ? _a : {}).reduce(function (newMap, address) { - newMap[address] = tokenMap[chainId][address].token; - return newMap; - }, {}); - if (includeUserAdded) { - return (userAddedTokens - // reduce into all ALL_TOKENS filtered by the current chain - .reduce(function (tokenMap, token) { - tokenMap[token.address] = token; - return tokenMap; - }, __assign({}, mapWithoutUrls))); - } - return mapWithoutUrls; - }, [chainId, userAddedTokens, tokenMap, includeUserAdded]); -} -function useAllTokens() { - var allTokens = useCombinedActiveList(); - return useTokensFromMap(allTokens, true); -} -function useUnsupportedTokens() { - var chainId = useActiveWeb3React().chainId; - var listsByUrl = useAllLists(); - var unsupportedTokensMap = useUnsupportedTokenList(); - var unsupportedTokens = useTokensFromMap(unsupportedTokensMap, false); - // checks the default L2 lists to see if `bridgeInfo` has an L1 address value that is unsupported - var l2InferredBlockedTokens = React.useMemo(function () { - if (!chainId || !L2_CHAIN_IDS.includes(chainId)) { - return {}; - } - if (!listsByUrl) { - return {}; - } - var listUrl = CHAIN_INFO[chainId].defaultListUrl; - var list = listsByUrl[listUrl].current; - if (!list) { - return {}; - } - var unsupportedSet = new Set(Object.keys(unsupportedTokens)); - return list.tokens.reduce(function (acc, tokenInfo) { - var _a; - var _b; - var bridgeInfo = (_b = tokenInfo.extensions) === null || _b === void 0 ? void 0 : _b.bridgeInfo; - if (bridgeInfo && - bridgeInfo[SupportedChainId.MAINNET] && - bridgeInfo[SupportedChainId.MAINNET].tokenAddress && - unsupportedSet.has(bridgeInfo[SupportedChainId.MAINNET].tokenAddress)) { - var address = bridgeInfo[SupportedChainId.MAINNET].tokenAddress; - // don't rely on decimals--it's possible that a token could be bridged w/ different decimals on the L2 - return __assign(__assign({}, acc), (_a = {}, _a[address] = new sdkCore.Token(SupportedChainId.MAINNET, address, tokenInfo.decimals), _a)); - } - return acc; - }, {}); - }, [chainId, listsByUrl, unsupportedTokens]); - return __assign(__assign({}, unsupportedTokens), l2InferredBlockedTokens); -} -function useSearchInactiveTokenLists(search, minResults) { - if (minResults === void 0) { minResults = 10; } - var lists = useAllLists(); - var inactiveUrls = useInactiveListUrls(); - var chainId = useActiveWeb3React().chainId; - var activeTokens = useAllTokens(); - return React.useMemo(function () { - var e_1, _a, e_2, _b; - if (!search || search.trim().length === 0) - return []; - var tokenFilter = getTokenFilter(search); - var result = []; - var addressSet = {}; - try { - for (var inactiveUrls_1 = __values(inactiveUrls), inactiveUrls_1_1 = inactiveUrls_1.next(); !inactiveUrls_1_1.done; inactiveUrls_1_1 = inactiveUrls_1.next()) { - var url = inactiveUrls_1_1.value; - var list = lists[url].current; - if (!list) - continue; - try { - for (var _c = (e_2 = void 0, __values(list.tokens)), _d = _c.next(); !_d.done; _d = _c.next()) { - var tokenInfo = _d.value; - if (tokenInfo.chainId === chainId && tokenFilter(tokenInfo)) { - var wrapped = new WrappedTokenInfo(tokenInfo, list); - if (!(wrapped.address in activeTokens) && !addressSet[wrapped.address]) { - addressSet[wrapped.address] = true; - result.push(wrapped); - if (result.length >= minResults) - return result; - } - } - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (_d && !_d.done && (_b = _c.return)) _b.call(_c); - } - finally { if (e_2) throw e_2.error; } - } - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (inactiveUrls_1_1 && !inactiveUrls_1_1.done && (_a = inactiveUrls_1.return)) _a.call(inactiveUrls_1); - } - finally { if (e_1) throw e_1.error; } - } - return result; - }, [activeTokens, chainId, inactiveUrls, lists, minResults, search]); -} -function useIsTokenActive(token) { - var activeTokens = useAllTokens(); - if (!activeTokens || !token) { - return false; - } - return !!activeTokens[token.address]; -} -// Check if currency is included in custom list from user storage -function useIsUserAddedToken(currency) { - var userAddedTokens = useUserAddedTokens(); - if (!currency) { - return false; - } - return !!userAddedTokens.find(function (token) { return currency.equals(token); }); -} -// undefined if invalid or does not exist -// null if loading or null was passed -// otherwise returns the token -function useToken(tokenAddress) { - var tokens = useAllTokens(); - return useTokenFromMap(tokens, tokenAddress); -} -function useCurrency(currencyId) { - var tokens = useAllTokens(); - return useCurrencyFromMap(tokens, currencyId); -} - -function serializeToken(token) { - return { - chainId: token.chainId, - address: token.address, - decimals: token.decimals, - symbol: token.symbol, - name: token.name, - }; -} -function deserializeToken(serializedToken) { - return new sdkCore.Token(serializedToken.chainId, serializedToken.address, serializedToken.decimals, serializedToken.symbol, serializedToken.name); -} -function useIsDarkMode() { - var _a = useAppSelector(function (_a) { - var _b = _a.user, matchesDarkMode = _b.matchesDarkMode, userDarkMode = _b.userDarkMode; - return ({ - userDarkMode: userDarkMode, - matchesDarkMode: matchesDarkMode, - }); - }, reactRedux.shallowEqual), userDarkMode = _a.userDarkMode, matchesDarkMode = _a.matchesDarkMode; - return userDarkMode === null ? matchesDarkMode : userDarkMode; -} -function useDarkModeManager() { - var dispatch = useAppDispatch(); - var darkMode = useIsDarkMode(); - var toggleSetDarkMode = React.useCallback(function () { - dispatch(updateUserDarkMode({ userDarkMode: !darkMode })); - }, [darkMode, dispatch]); - return [darkMode, toggleSetDarkMode]; -} -function useUserLocale() { - return useAppSelector(function (state) { return state.user.userLocale; }); -} -function useUserLocaleManager() { - var dispatch = useAppDispatch(); - var locale = useUserLocale(); - var setLocale = React.useCallback(function (newLocale) { - dispatch(updateUserLocale({ userLocale: newLocale })); - }, [dispatch]); - return [locale, setLocale]; -} -function useIsExpertMode() { - return useAppSelector(function (state) { return state.user.userExpertMode; }); -} -function useExpertModeManager() { - var dispatch = useAppDispatch(); - var expertMode = useIsExpertMode(); - var toggleSetExpertMode = React.useCallback(function () { - dispatch(updateUserExpertMode({ userExpertMode: !expertMode })); - }, [expertMode, dispatch]); - return [expertMode, toggleSetExpertMode]; -} -function useShowSurveyPopup() { - var dispatch = useAppDispatch(); - var showSurveyPopup = useAppSelector(function (state) { return state.user.showSurveyPopup; }); - var toggleShowSurveyPopup = React.useCallback(function (showPopup) { - dispatch(updateShowSurveyPopup({ showSurveyPopup: showPopup })); - }, [dispatch]); - return [showSurveyPopup, toggleShowSurveyPopup]; -} -function useClientSideRouter() { - var dispatch = useAppDispatch(); - var clientSideRouter = useAppSelector(function (state) { return Boolean(state.user.userClientSideRouter); }); - var setClientSideRouter = React.useCallback(function (newClientSideRouter) { - dispatch(updateUserClientSideRouter({ userClientSideRouter: newClientSideRouter })); - }, [dispatch]); - return [clientSideRouter, setClientSideRouter]; -} -function useSetUserSlippageTolerance() { - var dispatch = useAppDispatch(); - return React.useCallback(function (userSlippageTolerance) { - var value; - try { - value = - userSlippageTolerance === 'auto' ? 'auto' : JSBI__default["default"].toNumber(userSlippageTolerance.multiply(10000).quotient); - } - catch (error) { - value = 'auto'; - } - dispatch(updateUserSlippageTolerance({ - userSlippageTolerance: value, - })); - }, [dispatch]); -} -/** - * Return the user's slippage tolerance, from the redux store, and a function to update the slippage tolerance - */ -function useUserSlippageTolerance() { - var userSlippageTolerance = useAppSelector(function (state) { - return state.user.userSlippageTolerance; - }); - return React.useMemo(function () { return (userSlippageTolerance === 'auto' ? 'auto' : new sdkCore.Percent(userSlippageTolerance, 10000)); }, [userSlippageTolerance]); -} -/** - * Same as above but replaces the auto with a default value - * @param defaultSlippageTolerance the default value to replace auto with - */ -function useUserSlippageToleranceWithDefault(defaultSlippageTolerance) { - var allowedSlippage = useUserSlippageTolerance(); - return React.useMemo(function () { return (allowedSlippage === 'auto' ? defaultSlippageTolerance : allowedSlippage); }, [allowedSlippage, defaultSlippageTolerance]); -} -function useUserTransactionTTL() { - var chainId = useActiveWeb3React().chainId; - var dispatch = useAppDispatch(); - var userDeadline = useAppSelector(function (state) { return state.user.userDeadline; }); - var onL2 = Boolean(chainId && L2_CHAIN_IDS.includes(chainId)); - var deadline = onL2 ? L2_DEADLINE_FROM_NOW : userDeadline; - var setUserDeadline = React.useCallback(function (userDeadline) { - dispatch(updateUserDeadline({ userDeadline: userDeadline })); - }, [dispatch]); - return [deadline, setUserDeadline]; -} -function useAddUserToken() { - var dispatch = useAppDispatch(); - return React.useCallback(function (token) { - dispatch(addSerializedToken({ serializedToken: serializeToken(token) })); - }, [dispatch]); -} -function useRemoveUserAddedToken() { - var dispatch = useAppDispatch(); - return React.useCallback(function (chainId, address) { - dispatch(removeSerializedToken({ chainId: chainId, address: address })); - }, [dispatch]); -} -function useUserAddedTokens() { - var chainId = useActiveWeb3React().chainId; - var serializedTokensMap = useAppSelector(function (_a) { - var tokens = _a.user.tokens; - return tokens; - }); - return React.useMemo(function () { - if (!chainId) - return []; - var tokenMap = (serializedTokensMap === null || serializedTokensMap === void 0 ? void 0 : serializedTokensMap[chainId]) - ? Object.values(serializedTokensMap[chainId]).map(deserializeToken) - : []; - return tokenMap; - }, [serializedTokensMap, chainId]); -} -function useURLWarningVisible() { - return useAppSelector(function (state) { return state.user.URLWarningVisible; }); -} - -var EXPLORER_HOSTNAMES = { - 'etherscan.io': true, - 'ropsten.etherscan.io': true, - 'rinkeby.etherscan.io': true, - 'kovan.etherscan.io': true, - 'goerli.etherscan.io': true, - 'optimistic.etherscan.io': true, - 'kovan-optimistic.etherscan.io': true, - 'rinkeby-explorer.arbitrum.io': true, - 'arbiscan.io': true, -}; -/** - * Returns the anonymized version of the given href, i.e. one that does not leak user information - * @param href the link to anonymize, i.e. remove any personal data from - * @return string anonymized version of the given href - */ -function anonymizeLink(href) { - try { - var url = new URL(href); - if (EXPLORER_HOSTNAMES[url.hostname]) { - var pathPieces = url.pathname.split('/'); - var anonymizedPath = pathPieces.map(function (pc) { return (/0x[a-fA-F0-9]+/.test(pc) ? '***' : pc); }).join('/'); - return url.protocol + "//" + url.hostname + anonymizedPath; - } - return href; - } - catch (error) { - return href; - } -} - -var ButtonText = styled__default["default"].button(templateObject_1$1l || (templateObject_1$1l = __makeTemplateObject(["\n outline: none;\n border: none;\n font-size: inherit;\n padding: 0;\n margin: 0;\n background: none;\n cursor: pointer;\n\n :hover {\n opacity: 0.7;\n }\n\n :focus {\n text-decoration: underline;\n }\n"], ["\n outline: none;\n border: none;\n font-size: inherit;\n padding: 0;\n margin: 0;\n background: none;\n cursor: pointer;\n\n :hover {\n opacity: 0.7;\n }\n\n :focus {\n text-decoration: underline;\n }\n"]))); -var CloseIcon$2 = styled__default["default"](reactFeather.X)(templateObject_2$$ || (templateObject_2$$ = __makeTemplateObject(["\n cursor: pointer;\n"], ["\n cursor: pointer;\n" - // for wrapper react feather icons -]))); -// for wrapper react feather icons -var IconWrapper$4 = styled__default["default"].div(templateObject_3$S || (templateObject_3$S = __makeTemplateObject(["\n display: flex;\n align-items: center;\n justify-content: center;\n width: ", ";\n height: ", ";\n margin-right: ", ";\n margin-left: ", ";\n & > * {\n stroke: ", ";\n }\n"], ["\n display: flex;\n align-items: center;\n justify-content: center;\n width: ", ";\n height: ", ";\n margin-right: ", ";\n margin-left: ", ";\n & > * {\n stroke: ", ";\n }\n" - // A button that triggers some onClick result, but looks like a link. -])), function (_a) { - var size = _a.size; - return size !== null && size !== void 0 ? size : '20px'; -}, function (_a) { - var size = _a.size; - return size !== null && size !== void 0 ? size : '20px'; -}, function (_a) { - var marginRight = _a.marginRight; - return marginRight !== null && marginRight !== void 0 ? marginRight : 0; -}, function (_a) { - var marginLeft = _a.marginLeft; - return marginLeft !== null && marginLeft !== void 0 ? marginLeft : 0; -}, function (_a) { - var theme = _a.theme, stroke = _a.stroke; - return stroke !== null && stroke !== void 0 ? stroke : theme.blue1; -}); -// A button that triggers some onClick result, but looks like a link. -var LinkStyledButton = styled__default["default"].button(templateObject_4$G || (templateObject_4$G = __makeTemplateObject(["\n border: none;\n text-decoration: none;\n background: none;\n\n cursor: ", ";\n color: ", ";\n font-weight: 500;\n\n :hover {\n text-decoration: ", ";\n }\n\n :focus {\n outline: none;\n text-decoration: ", ";\n }\n\n :active {\n text-decoration: none;\n }\n"], ["\n border: none;\n text-decoration: none;\n background: none;\n\n cursor: ", ";\n color: ", ";\n font-weight: 500;\n\n :hover {\n text-decoration: ", ";\n }\n\n :focus {\n outline: none;\n text-decoration: ", ";\n }\n\n :active {\n text-decoration: none;\n }\n" - // An internal link from the react-router-dom library that is correctly styled -])), function (_a) { - var disabled = _a.disabled; - return (disabled ? 'default' : 'pointer'); -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return (disabled ? theme.text2 : theme.primary1); -}, function (_a) { - var disabled = _a.disabled; - return (disabled ? null : 'underline'); -}, function (_a) { - var disabled = _a.disabled; - return (disabled ? null : 'underline'); -}); -// An internal link from the react-router-dom library that is correctly styled -var StyledInternalLink = styled__default["default"](reactRouterDom.Link)(templateObject_5$x || (templateObject_5$x = __makeTemplateObject(["\n text-decoration: none;\n cursor: pointer;\n color: ", ";\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 text-decoration: none;\n cursor: pointer;\n color: ", ";\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"])), function (_a) { - var theme = _a.theme; - return theme.primary1; -}); -var StyledLink = styled__default["default"].a(templateObject_6$o || (templateObject_6$o = __makeTemplateObject(["\n text-decoration: none;\n cursor: pointer;\n color: ", ";\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 text-decoration: none;\n cursor: pointer;\n color: ", ";\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"])), function (_a) { - var theme = _a.theme; - return theme.primary1; -}); -var LinkIconWrapper = styled__default["default"].a(templateObject_7$k || (templateObject_7$k = __makeTemplateObject(["\n text-decoration: none;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n text-decoration: none;\n opacity: 0.7;\n }\n\n :focus {\n outline: none;\n text-decoration: none;\n }\n\n :active {\n text-decoration: none;\n }\n"], ["\n text-decoration: none;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n text-decoration: none;\n opacity: 0.7;\n }\n\n :focus {\n outline: none;\n text-decoration: none;\n }\n\n :active {\n text-decoration: none;\n }\n"]))); -var LinkIcon = styled__default["default"](reactFeather.ExternalLink)(templateObject_8$h || (templateObject_8$h = __makeTemplateObject(["\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ", ";\n"], ["\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.blue1; -}); -var TrashIcon = styled__default["default"](reactFeather.Trash)(templateObject_9$g || (templateObject_9$g = __makeTemplateObject(["\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ", ";\n\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n opacity: 0.7;\n }\n"], ["\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ", ";\n\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n opacity: 0.7;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.text3; -}); -var rotateImg = styled.keyframes(templateObject_10$c || (templateObject_10$c = __makeTemplateObject(["\n 0% {\n transform: perspective(1000px) rotateY(0deg);\n }\n\n 100% {\n transform: perspective(1000px) rotateY(360deg);\n }\n"], ["\n 0% {\n transform: perspective(1000px) rotateY(0deg);\n }\n\n 100% {\n transform: perspective(1000px) rotateY(360deg);\n }\n"]))); -var UniTokenAnimated = styled__default["default"].img(templateObject_11$a || (templateObject_11$a = __makeTemplateObject(["\n animation: ", " 5s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n padding: 2rem 0 0 0;\n filter: drop-shadow(0px 2px 4px rgba(0, 0, 0, 0.15));\n"], ["\n animation: ", " 5s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n padding: 2rem 0 0 0;\n filter: drop-shadow(0px 2px 4px rgba(0, 0, 0, 0.15));\n"])), rotateImg); -function handleClickExternalLink(event) { - var _a = event.currentTarget, target = _a.target, href = _a.href; - var anonymizedHref = anonymizeLink(href); - // don't prevent default, don't redirect if it's a new tab - if (target === '_blank' || event.ctrlKey || event.metaKey) { - ReactGA__default["default"].outboundLink({ label: anonymizedHref }, function () { - console.debug('Fired outbound link event', anonymizedHref); - }); - } - else { - event.preventDefault(); - // send a ReactGA event and then trigger a location change - ReactGA__default["default"].outboundLink({ label: anonymizedHref }, function () { - window.location.href = anonymizedHref; - }); - } -} -/** - * Outbound link that handles firing google analytics events - */ -function ExternalLink(_a) { - var _b = _a.target, target = _b === void 0 ? '_blank' : _b, href = _a.href, _c = _a.rel, rel = _c === void 0 ? 'noopener noreferrer' : _c, rest = __rest(_a, ["target", "href", "rel"]); - return jsxRuntime.jsx(StyledLink, __assign({ target: target, rel: rel, href: href, onClick: handleClickExternalLink }, rest), void 0); -} -function ExternalLinkIcon(_a) { - var _b = _a.target, target = _b === void 0 ? '_blank' : _b, href = _a.href, _c = _a.rel, rel = _c === void 0 ? 'noopener noreferrer' : _c, rest = __rest(_a, ["target", "href", "rel"]); - return (jsxRuntime.jsx(LinkIconWrapper, __assign({ target: target, rel: rel, href: href, onClick: handleClickExternalLink }, rest, { children: jsxRuntime.jsx(LinkIcon, {}, void 0) }), void 0)); -} -var rotate$1 = styled.keyframes(templateObject_12$a || (templateObject_12$a = __makeTemplateObject(["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"], ["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"]))); -var Spinner$2 = styled__default["default"].img(templateObject_13$6 || (templateObject_13$6 = __makeTemplateObject(["\n animation: 2s ", " linear infinite;\n width: 16px;\n height: 16px;\n"], ["\n animation: 2s ", " linear infinite;\n width: 16px;\n height: 16px;\n"])), rotate$1); -styled__default["default"](StyledInternalLink)(templateObject_14$6 || (templateObject_14$6 = __makeTemplateObject(["\n color: ", ";\n"], ["\n color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.text1; -}); -var CustomLightSpinner = styled__default["default"](Spinner$2)(templateObject_15$4 || (templateObject_15$4 = __makeTemplateObject(["\n height: ", ";\n width: ", ";\n"], ["\n height: ", ";\n width: ", ";\n"])), function (_a) { - var size = _a.size; - return size; -}, function (_a) { - var size = _a.size; - return size; -}); -var HideSmall = styled__default["default"].span(templateObject_17$2 || (templateObject_17$2 = __makeTemplateObject(["\n ", ";\n"], ["\n ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToSmall(templateObject_16$3 || (templateObject_16$3 = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); -}); -styled__default["default"].span(templateObject_19$2 || (templateObject_19$2 = __makeTemplateObject(["\n ", ";\n"], ["\n ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToExtraSmall(templateObject_18$2 || (templateObject_18$2 = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); -}); -styled__default["default"].span(templateObject_21$1 || (templateObject_21$1 = __makeTemplateObject(["\n display: none;\n ", ";\n"], ["\n display: none;\n ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToSmall(templateObject_20$1 || (templateObject_20$1 = __makeTemplateObject(["\n display: block;\n "], ["\n display: block;\n "]))); -}); -var Separator$1 = styled__default["default"].div(templateObject_22 || (templateObject_22 = __makeTemplateObject(["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"], ["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}); -var templateObject_1$1l, templateObject_2$$, templateObject_3$S, templateObject_4$G, templateObject_5$x, templateObject_6$o, templateObject_7$k, templateObject_8$h, templateObject_9$g, templateObject_10$c, templateObject_11$a, templateObject_12$a, templateObject_13$6, templateObject_14$6, templateObject_15$4, templateObject_16$3, templateObject_17$2, templateObject_18$2, templateObject_19$2, templateObject_20$1, templateObject_21$1, templateObject_22; - -var MEDIA_WIDTHS = { - upToExtraSmall: 500, - upToSmall: 720, - upToMedium: 960, - upToLarge: 1280, -}; -// Migrating to a standard z-index system https://getbootstrap.com/docs/5.0/layout/z-index/ -// Please avoid using deprecated numbers -var Z_INDEX; -(function (Z_INDEX) { - Z_INDEX[Z_INDEX["deprecated_zero"] = 0] = "deprecated_zero"; - Z_INDEX[Z_INDEX["deprecated_content"] = 1] = "deprecated_content"; - Z_INDEX[Z_INDEX["dropdown"] = 1000] = "dropdown"; - Z_INDEX[Z_INDEX["sticky"] = 1020] = "sticky"; - Z_INDEX[Z_INDEX["fixed"] = 1030] = "fixed"; - Z_INDEX[Z_INDEX["modalBackdrop"] = 1040] = "modalBackdrop"; - Z_INDEX[Z_INDEX["offcanvas"] = 1050] = "offcanvas"; - Z_INDEX[Z_INDEX["modal"] = 1060] = "modal"; - Z_INDEX[Z_INDEX["popover"] = 1070] = "popover"; - Z_INDEX[Z_INDEX["tooltip"] = 1080] = "tooltip"; -})(Z_INDEX || (Z_INDEX = {})); -var mediaWidthTemplates = Object.keys(MEDIA_WIDTHS).reduce(function (accumulator, size) { - accumulator[size] = function (a, b, c) { return styled.css(templateObject_1$1k || (templateObject_1$1k = __makeTemplateObject(["\n @media (max-width: ", "px) {\n ", "\n }\n "], ["\n @media (max-width: ", "px) {\n ", "\n }\n "])), MEDIA_WIDTHS[size], styled.css(a, b, c)); }; - return accumulator; -}, {}); -var white = '#FFFFFF'; -var black = '#000000'; -function colors$2(darkMode) { - return { - darkMode: darkMode, - // base - white: white, - black: black, - // text - text1: darkMode ? '#FFFFFF' : '#000000', - text2: darkMode ? '#C3C5CB' : '#565A69', - text3: darkMode ? '#8F96AC' : '#6E727D', - text4: darkMode ? '#B2B9D2' : '#C3C5CB', - text5: darkMode ? '#2C2F36' : '#EDEEF2', - // backgrounds / greys - bg0: darkMode ? '#191B1F' : '#FFF', - bg1: darkMode ? '#212429' : '#F7F8FA', - bg2: darkMode ? '#2C2F36' : '#EDEEF2', - bg3: darkMode ? '#40444F' : '#CED0D9', - bg4: darkMode ? '#565A69' : '#888D9B', - bg5: darkMode ? '#6C7284' : '#888D9B', - bg6: darkMode ? '#1A2028' : '#6C7284', - //specialty colors - modalBG: darkMode ? 'rgba(0,0,0,.425)' : 'rgba(0,0,0,0.3)', - advancedBG: darkMode ? 'rgba(0,0,0,0.1)' : 'rgba(255,255,255,0.6)', - //primary colors - primary1: darkMode ? '#2172E5' : '#E8006F', - primary2: darkMode ? '#3680E7' : '#FF8CC3', - primary3: darkMode ? '#4D8FEA' : '#FF99C9', - primary4: darkMode ? '#376bad70' : '#F6DDE8', - primary5: darkMode ? '#153d6f70' : '#FDEAF1', - // color text - primaryText1: darkMode ? '#5090ea' : '#D50066', - // secondary colors - secondary1: darkMode ? '#2172E5' : '#E8006F', - secondary2: darkMode ? '#17000b26' : '#F6DDE8', - secondary3: darkMode ? '#17000b26' : '#FDEAF1', - // other - red1: darkMode ? '#FF4343' : '#DA2D2B', - red2: darkMode ? '#F82D3A' : '#DF1F38', - red3: '#D60000', - green1: darkMode ? '#27AE60' : '#007D35', - yellow1: '#E3A507', - yellow2: '#FF8F00', - yellow3: '#F3B71E', - blue1: darkMode ? '#2172E5' : '#0068FC', - blue2: darkMode ? '#5199FF' : '#0068FC', - error: darkMode ? '#FD4040' : '#DF1F38', - success: darkMode ? '#27AE60' : '#007D35', - warning: '#FF8F00', - // dont wanna forget these blue yet - blue4: darkMode ? '#153d6f70' : '#C4D9F8', - // blue5: darkMode ? '#153d6f70' : '#EBF4FF', - }; -} -function theme(darkMode) { - return __assign(__assign({}, colors$2(darkMode)), { grids: { - sm: 8, - md: 12, - lg: 24, - }, - //shadows - shadow1: darkMode ? '#000' : '#2F80ED', - // media queries - mediaWidth: mediaWidthTemplates, - // css snippets - flexColumnNoWrap: styled.css(templateObject_2$_ || (templateObject_2$_ = __makeTemplateObject(["\n display: flex;\n flex-flow: column nowrap;\n "], ["\n display: flex;\n flex-flow: column nowrap;\n "]))), flexRowNoWrap: styled.css(templateObject_3$R || (templateObject_3$R = __makeTemplateObject(["\n display: flex;\n flex-flow: row nowrap;\n "], ["\n display: flex;\n flex-flow: row nowrap;\n "]))) }); -} -function ThemeProvider(_a) { - var children = _a.children; - var darkMode = useIsDarkMode(); - var themeObject = React.useMemo(function () { return theme(darkMode); }, [darkMode]); - return jsxRuntime.jsx(styled.ThemeProvider, __assign({ theme: themeObject }, { children: children }), void 0); -} -var TextWrapper$1 = styled__default["default"](rebass.Text)(templateObject_4$F || (templateObject_4$F = __makeTemplateObject(["\n color: ", ";\n"], ["\n color: ", ";\n" - /** - * Preset styles of the Rebass Text component - */ -])), function (_a) { - var color = _a.color, theme = _a.theme; - return theme[color]; -}); -/** - * Preset styles of the Rebass Text component - */ -var ThemedText = { - Main: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text2' }, props), void 0); - }, - Link: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'primary1' }, props), void 0); - }, - Label: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 600, color: 'text1' }, props), void 0); - }, - Black: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text1' }, props), void 0); - }, - White: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'white' }, props), void 0); - }, - Body: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 400, fontSize: 16, color: 'text1' }, props), void 0); - }, - LargeHeader: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 600, fontSize: 24 }, props), void 0); - }, - MediumHeader: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, fontSize: 20 }, props), void 0); - }, - SubHeader: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 400, fontSize: 14 }, props), void 0); - }, - Small: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, fontSize: 11 }, props), void 0); - }, - Blue: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'blue1' }, props), void 0); - }, - Yellow: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'yellow3' }, props), void 0); - }, - DarkGray: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text3' }, props), void 0); - }, - Gray: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'bg3' }, props), void 0); - }, - Italic: function (props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, fontSize: 12, fontStyle: 'italic', color: 'text2' }, props), void 0); - }, - Error: function (_a) { - var error = _a.error, props = __rest(_a, ["error"]); - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: error ? 'red1' : 'text2' }, props), void 0); - }, -}; -var ThemedGlobalStyle = styled.createGlobalStyle(templateObject_5$w || (templateObject_5$w = __makeTemplateObject(["\nhtml {\n color: ", ";\n background-color: ", " !important;\n}\n\na {\n color: ", "; \n}\n"], ["\nhtml {\n color: ", ";\n background-color: ", " !important;\n}\n\na {\n color: ", "; \n}\n"])), function (_a) { - var theme = _a.theme; - return theme.text1; -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var theme = _a.theme; - return theme.blue1; -}); -var templateObject_1$1k, templateObject_2$_, templateObject_3$R, templateObject_4$F, templateObject_5$w; - -var _a$b; -var ETHERSCAN_PREFIXES = (_a$b = {}, - _a$b[SupportedChainId.MAINNET] = 'https://etherscan.io', - _a$b[SupportedChainId.ROPSTEN] = 'https://ropsten.etherscan.io', - _a$b[SupportedChainId.RINKEBY] = 'https://rinkeby.etherscan.io', - _a$b[SupportedChainId.GOERLI] = 'https://goerli.etherscan.io', - _a$b[SupportedChainId.KOVAN] = 'https://kovan.etherscan.io', - _a$b[SupportedChainId.OPTIMISM] = 'https://optimistic.etherscan.io', - _a$b[SupportedChainId.OPTIMISTIC_KOVAN] = 'https://kovan-optimistic.etherscan.io', - _a$b[SupportedChainId.POLYGON_MUMBAI] = 'https://mumbai.polygonscan.com', - _a$b[SupportedChainId.POLYGON] = 'https://polygonscan.com', - _a$b); -var ExplorerDataType; -(function (ExplorerDataType) { - ExplorerDataType["TRANSACTION"] = "transaction"; - ExplorerDataType["TOKEN"] = "token"; - ExplorerDataType["ADDRESS"] = "address"; - ExplorerDataType["BLOCK"] = "block"; -})(ExplorerDataType || (ExplorerDataType = {})); -/** - * Return the explorer link for the given data and data type - * @param chainId the ID of the chain for which to return the data - * @param data the data to return a link for - * @param type the type of the data - */ -function getExplorerLink(chainId, data, type) { - var _a; - if (chainId === SupportedChainId.ARBITRUM_ONE) { - switch (type) { - case ExplorerDataType.TRANSACTION: - return "https://arbiscan.io/tx/" + data; - case ExplorerDataType.ADDRESS: - case ExplorerDataType.TOKEN: - return "https://arbiscan.io/address/" + data; - case ExplorerDataType.BLOCK: - return "https://arbiscan.io/block/" + data; - default: - return "https://arbiscan.io/"; - } - } - if (chainId === SupportedChainId.ARBITRUM_RINKEBY) { - switch (type) { - case ExplorerDataType.TRANSACTION: - return "https://rinkeby-explorer.arbitrum.io/tx/" + data; - case ExplorerDataType.ADDRESS: - case ExplorerDataType.TOKEN: - return "https://rinkeby-explorer.arbitrum.io/address/" + data; - case ExplorerDataType.BLOCK: - return "https://rinkeby-explorer.arbitrum.io/block/" + data; - default: - return "https://rinkeby-explorer.arbitrum.io/"; - } - } - var prefix = (_a = ETHERSCAN_PREFIXES[chainId]) !== null && _a !== void 0 ? _a : 'https://etherscan.io'; - switch (type) { - case ExplorerDataType.TRANSACTION: - return prefix + "/tx/" + data; - case ExplorerDataType.TOKEN: - return prefix + "/token/" + data; - case ExplorerDataType.BLOCK: - if (chainId === SupportedChainId.OPTIMISM || chainId === SupportedChainId.OPTIMISTIC_KOVAN) { - return prefix + "/tx/" + data; - } - return prefix + "/block/" + data; - case ExplorerDataType.ADDRESS: - return prefix + "/address/" + data; - default: - return "" + prefix; - } -} - -var Column = styled__default["default"].div(templateObject_1$1j || (templateObject_1$1j = __makeTemplateObject(["\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n"], ["\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n"]))); -var ColumnCenter = styled__default["default"](Column)(templateObject_2$Z || (templateObject_2$Z = __makeTemplateObject(["\n width: 100%;\n align-items: center;\n"], ["\n width: 100%;\n align-items: center;\n"]))); -var AutoColumn = styled__default["default"].div(templateObject_3$Q || (templateObject_3$Q = __makeTemplateObject(["\n display: grid;\n grid-auto-rows: auto;\n grid-row-gap: ", ";\n justify-items: ", ";\n"], ["\n display: grid;\n grid-auto-rows: auto;\n grid-row-gap: ", ";\n justify-items: ", ";\n"])), function (_a) { - var gap = _a.gap; - return (gap === 'sm' && '8px') || (gap === 'md' && '12px') || (gap === 'lg' && '24px') || gap; -}, function (_a) { - var justify = _a.justify; - return justify && justify; -}); -var templateObject_1$1j, templateObject_2$Z, templateObject_3$Q; - -var Row$1 = styled__default["default"](styledComponents.Box)(templateObject_1$1i || (templateObject_1$1i = __makeTemplateObject(["\n width: ", ";\n display: flex;\n padding: 0;\n align-items: ", ";\n justify-content: ", ";\n padding: ", ";\n border: ", ";\n border-radius: ", ";\n"], ["\n width: ", ";\n display: flex;\n padding: 0;\n align-items: ", ";\n justify-content: ", ";\n padding: ", ";\n border: ", ";\n border-radius: ", ";\n"])), function (_a) { - var width = _a.width; - return width !== null && width !== void 0 ? width : '100%'; -}, function (_a) { - var align = _a.align; - return align !== null && align !== void 0 ? align : 'center'; -}, function (_a) { - var justify = _a.justify; - return justify !== null && justify !== void 0 ? justify : 'flex-start'; -}, function (_a) { - var padding = _a.padding; - return padding; -}, function (_a) { - var border = _a.border; - return border; -}, function (_a) { - var borderRadius = _a.borderRadius; - return borderRadius; -}); -var RowBetween = styled__default["default"](Row$1)(templateObject_2$Y || (templateObject_2$Y = __makeTemplateObject(["\n justify-content: space-between;\n"], ["\n justify-content: space-between;\n"]))); -styled__default["default"].div(templateObject_3$P || (templateObject_3$P = __makeTemplateObject(["\n display: flex;\n align-items: flex-end;\n"], ["\n display: flex;\n align-items: flex-end;\n"]))); -var AutoRow = styled__default["default"](Row$1)(templateObject_4$E || (templateObject_4$E = __makeTemplateObject(["\n flex-wrap: wrap;\n margin: ", ";\n justify-content: ", ";\n\n & > * {\n margin: ", " !important;\n }\n"], ["\n flex-wrap: wrap;\n margin: ", ";\n justify-content: ", ";\n\n & > * {\n margin: ", " !important;\n }\n"])), function (_a) { - var gap = _a.gap; - return gap && "-" + gap; -}, function (_a) { - var justify = _a.justify; - return justify && justify; -}, function (_a) { - var gap = _a.gap; - return gap; -}); -var RowFixed = styled__default["default"](Row$1)(templateObject_5$v || (templateObject_5$v = __makeTemplateObject(["\n width: fit-content;\n margin: ", ";\n"], ["\n width: fit-content;\n margin: ", ";\n"])), function (_a) { - var gap = _a.gap; - return gap && "-" + gap; -}); -var templateObject_1$1i, templateObject_2$Y, templateObject_3$P, templateObject_4$E, templateObject_5$v; - -var InputPanel$1 = styled__default["default"].div(templateObject_1$1h || (templateObject_1$1h = __makeTemplateObject(["\n ", "\n position: relative;\n border-radius: 1.25rem;\n background-color: ", ";\n z-index: 1;\n width: 100%;\n"], ["\n ", "\n position: relative;\n border-radius: 1.25rem;\n background-color: ", ";\n z-index: 1;\n width: 100%;\n"])), function (_a) { - var theme = _a.theme; - return theme.flexColumnNoWrap; -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}); -var ContainerRow = styled__default["default"].div(templateObject_2$X || (templateObject_2$X = __makeTemplateObject(["\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 1.25rem;\n border: 1px solid ", ";\n transition: border-color 300ms ", ",\n color 500ms ", ";\n background-color: ", ";\n"], ["\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 1.25rem;\n border: 1px solid ", ";\n transition: border-color 300ms ", ",\n color 500ms ", ";\n background-color: ", ";\n"])), function (_a) { - var error = _a.error, theme = _a.theme; - return (error ? theme.red1 : theme.bg2); -}, function (_a) { - var error = _a.error; - return (error ? 'step-end' : 'step-start'); -}, function (_a) { - var error = _a.error; - return (error ? 'step-end' : 'step-start'); -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}); -var InputContainer = styled__default["default"].div(templateObject_3$O || (templateObject_3$O = __makeTemplateObject(["\n flex: 1;\n padding: 1rem;\n"], ["\n flex: 1;\n padding: 1rem;\n"]))); -var Input$2 = styled__default["default"].input(templateObject_4$D || (templateObject_4$D = __makeTemplateObject(["\n font-size: 1.25rem;\n outline: none;\n border: none;\n flex: 1 1 auto;\n width: 0;\n background-color: ", ";\n transition: color 300ms ", ";\n color: ", ";\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 500;\n width: 100%;\n ::placeholder {\n color: ", ";\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: ", ";\n }\n"], ["\n font-size: 1.25rem;\n outline: none;\n border: none;\n flex: 1 1 auto;\n width: 0;\n background-color: ", ";\n transition: color 300ms ", ";\n color: ", ";\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 500;\n width: 100%;\n ::placeholder {\n color: ", ";\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: ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var error = _a.error; - return (error ? 'step-end' : 'step-start'); -}, function (_a) { - var error = _a.error, theme = _a.theme; - return (error ? theme.red1 : theme.text1); -}, function (_a) { - var theme = _a.theme; - return theme.text4; -}, function (_a) { - var theme = _a.theme; - return theme.text4; -}); -function AddressInputPanel(_a) { - var id = _a.id, _b = _a.className, className = _b === void 0 ? 'recipient-address-input' : _b, label = _a.label, placeholder = _a.placeholder, value = _a.value, onChange = _a.onChange; - var chainId = useActiveWeb3React().chainId; - var theme = React.useContext(styled.ThemeContext); - var _c = useENS(value), address = _c.address, loading = _c.loading, name = _c.name; - var handleInput = React.useCallback(function (event) { - var input = event.target.value; - var withoutSpaces = input.replace(/\s+/g, ''); - onChange(withoutSpaces); - }, [onChange]); - var error = Boolean(value.length > 0 && !loading && !address); - return (jsxRuntime.jsx(InputPanel$1, __assign({ id: id }, { children: jsxRuntime.jsx(ContainerRow, __assign({ error: error }, { children: jsxRuntime.jsx(InputContainer, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "md" }, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(ThemedText.Black, __assign({ color: theme.text2, fontWeight: 500, fontSize: 14 }, { children: label !== null && label !== void 0 ? label : jsxRuntime.jsx(macro.Trans, { children: "Recipient" }, void 0) }), void 0), address && chainId && (jsxRuntime.jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, name !== null && name !== void 0 ? name : address, ExplorerDataType.ADDRESS), style: { fontSize: '14px' } }, { children: jsxRuntime.jsx(macro.Trans, { children: "(View on Explorer)" }, void 0) }), void 0))] }, void 0), jsxRuntime.jsx(Input$2, { className: className, type: "text", autoComplete: "off", autoCorrect: "off", autoCapitalize: "off", spellCheck: "false", placeholder: placeholder !== null && placeholder !== void 0 ? placeholder : macro.t(templateObject_5$u || (templateObject_5$u = __makeTemplateObject(["Wallet Address or ENS name"], ["Wallet Address or ENS name"]))), error: error, pattern: "^(0x[a-fA-F0-9]{40})$", onChange: handleInput, value: value }, void 0)] }), void 0) }, void 0) }), void 0) }), void 0)); -} -var templateObject_1$1h, templateObject_2$X, templateObject_3$O, templateObject_4$D, templateObject_5$u; - -function useTheme() { - return React.useContext(styled.ThemeContext); -} - -var BaseButton = styled__default["default"](styledComponents.Button)(templateObject_1$1g || (templateObject_1$1g = __makeTemplateObject(["\n padding: ", ";\n width: ", ";\n font-weight: 500;\n text-align: center;\n border-radius: ", ";\n outline: none;\n border: 1px solid transparent;\n color: ", ";\n text-decoration: none;\n display: flex;\n justify-content: center;\n flex-wrap: nowrap;\n align-items: center;\n cursor: pointer;\n position: relative;\n z-index: 1;\n &:disabled {\n opacity: 50%;\n cursor: auto;\n pointer-events: none;\n }\n\n will-change: transform;\n transition: transform 450ms ease;\n transform: perspective(1px) translateZ(0);\n\n > * {\n user-select: none;\n }\n\n > a {\n text-decoration: none;\n }\n"], ["\n padding: ", ";\n width: ", ";\n font-weight: 500;\n text-align: center;\n border-radius: ", ";\n outline: none;\n border: 1px solid transparent;\n color: ", ";\n text-decoration: none;\n display: flex;\n justify-content: center;\n flex-wrap: nowrap;\n align-items: center;\n cursor: pointer;\n position: relative;\n z-index: 1;\n &:disabled {\n opacity: 50%;\n cursor: auto;\n pointer-events: none;\n }\n\n will-change: transform;\n transition: transform 450ms ease;\n transform: perspective(1px) translateZ(0);\n\n > * {\n user-select: none;\n }\n\n > a {\n text-decoration: none;\n }\n"])), function (_a) { - var padding = _a.padding; - return padding !== null && padding !== void 0 ? padding : '16px'; -}, function (_a) { - var width = _a.width; - return width !== null && width !== void 0 ? width : '100%'; -}, function (_a) { - var $borderRadius = _a.$borderRadius; - return $borderRadius !== null && $borderRadius !== void 0 ? $borderRadius : '20px'; -}, function (_a) { - var theme = _a.theme; - return theme.text1; -}); -var ButtonPrimary = styled__default["default"](BaseButton)(templateObject_2$W || (templateObject_2$W = __makeTemplateObject(["\n background-color: ", ";\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n background-color: ", ";\n color: ", ";\n cursor: auto;\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n"], ["\n background-color: ", ";\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n background-color: ", ";\n color: ", ";\n cursor: auto;\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.primary1; -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.05, theme.primary1); -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.05, theme.primary1); -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.05, theme.primary1); -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.1, theme.primary1); -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.1, theme.primary1); -}, function (_a) { - var theme = _a.theme, altDisabledStyle = _a.altDisabledStyle, disabled = _a.disabled; - return altDisabledStyle ? (disabled ? theme.primary1 : theme.bg2) : theme.bg2; -}, function (_a) { - var altDisabledStyle = _a.altDisabledStyle, disabled = _a.disabled, theme = _a.theme; - return altDisabledStyle ? (disabled ? theme.white : theme.text2) : theme.text2; -}); -var ButtonLight = styled__default["default"](BaseButton)(templateObject_3$N || (templateObject_3$N = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n font-size: 16px;\n font-weight: 500;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n :disabled {\n opacity: 0.4;\n :hover {\n cursor: auto;\n background-color: ", ";\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n }\n"], ["\n background-color: ", ";\n color: ", ";\n font-size: 16px;\n font-weight: 500;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n :disabled {\n opacity: 0.4;\n :hover {\n cursor: auto;\n background-color: ", ";\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.primary5; -}, function (_a) { - var theme = _a.theme; - return theme.primaryText1; -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return !disabled && polished.darken(0.03, theme.primary5); -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return !disabled && polished.darken(0.03, theme.primary5); -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return !disabled && polished.darken(0.03, theme.primary5); -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return !disabled && polished.darken(0.05, theme.primary5); -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return !disabled && polished.darken(0.05, theme.primary5); -}, function (_a) { - var theme = _a.theme; - return theme.primary5; -}); -var ButtonGray = styled__default["default"](BaseButton)(templateObject_4$C || (templateObject_4$C = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n font-size: 16px;\n font-weight: 500;\n\n &:hover {\n background-color: ", ";\n }\n &:active {\n background-color: ", ";\n }\n"], ["\n background-color: ", ";\n color: ", ";\n font-size: 16px;\n font-weight: 500;\n\n &:hover {\n background-color: ", ";\n }\n &:active {\n background-color: ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var theme = _a.theme; - return theme.text2; -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return !disabled && polished.darken(0.05, theme.bg2); -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return !disabled && polished.darken(0.1, theme.bg2); -}); -var ButtonSecondary = styled__default["default"](BaseButton)(templateObject_5$t || (templateObject_5$t = __makeTemplateObject(["\n border: 1px solid ", ";\n color: ", ";\n background-color: transparent;\n font-size: 16px;\n border-radius: 12px;\n padding: ", ";\n\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n border: 1px solid ", ";\n }\n &:hover {\n border: 1px solid ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n border: 1px solid ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n a:hover {\n text-decoration: none;\n }\n"], ["\n border: 1px solid ", ";\n color: ", ";\n background-color: transparent;\n font-size: 16px;\n border-radius: 12px;\n padding: ", ";\n\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n border: 1px solid ", ";\n }\n &:hover {\n border: 1px solid ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n border: 1px solid ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n a:hover {\n text-decoration: none;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.primary4; -}, function (_a) { - var theme = _a.theme; - return theme.primary1; -}, function (_a) { - var padding = _a.padding; - return (padding ? padding : '10px'); -}, function (_a) { - var theme = _a.theme; - return theme.primary4; -}, function (_a) { - var theme = _a.theme; - return theme.primary3; -}, function (_a) { - var theme = _a.theme; - return theme.primary3; -}, function (_a) { - var theme = _a.theme; - return theme.primary4; -}, function (_a) { - var theme = _a.theme; - return theme.primary3; -}); -var ButtonOutlined = styled__default["default"](BaseButton)(templateObject_6$n || (templateObject_6$n = __makeTemplateObject(["\n border: 1px solid ", ";\n background-color: transparent;\n color: ", ";\n &:focus {\n box-shadow: 0 0 0 1px ", ";\n }\n &:hover {\n box-shadow: 0 0 0 1px ", ";\n }\n &:active {\n box-shadow: 0 0 0 1px ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"], ["\n border: 1px solid ", ";\n background-color: transparent;\n color: ", ";\n &:focus {\n box-shadow: 0 0 0 1px ", ";\n }\n &:hover {\n box-shadow: 0 0 0 1px ", ";\n }\n &:active {\n box-shadow: 0 0 0 1px ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}, function (_a) { - var theme = _a.theme; - return theme.text1; -}, function (_a) { - var theme = _a.theme; - return theme.bg4; -}, function (_a) { - var theme = _a.theme; - return theme.bg4; -}, function (_a) { - var theme = _a.theme; - return theme.bg4; -}); -styled__default["default"](BaseButton)(templateObject_7$j || (templateObject_7$j = __makeTemplateObject(["\n background-color: ", ";\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n background-color: ", ";\n opacity: 50%;\n cursor: auto;\n }\n"], ["\n background-color: ", ";\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n background-color: ", ";\n opacity: 50%;\n cursor: auto;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.yellow3; -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.05, theme.yellow3); -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.05, theme.yellow3); -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.05, theme.yellow3); -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.1, theme.yellow3); -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.1, theme.yellow3); -}, function (_a) { - var theme = _a.theme; - return theme.yellow3; -}); -var ButtonEmpty = styled__default["default"](BaseButton)(templateObject_8$g || (templateObject_8$g = __makeTemplateObject(["\n background-color: transparent;\n color: ", ";\n display: flex;\n justify-content: center;\n align-items: center;\n\n &:focus {\n text-decoration: underline;\n }\n &:hover {\n text-decoration: none;\n }\n &:active {\n text-decoration: none;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"], ["\n background-color: transparent;\n color: ", ";\n display: flex;\n justify-content: center;\n align-items: center;\n\n &:focus {\n text-decoration: underline;\n }\n &:hover {\n text-decoration: none;\n }\n &:active {\n text-decoration: none;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.primary1; -}); -styled__default["default"](BaseButton)(templateObject_9$f || (templateObject_9$f = __makeTemplateObject(["\n padding: 0;\n width: fit-content;\n background: none;\n text-decoration: none;\n &:focus {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n text-decoration: underline;\n }\n &:hover {\n // text-decoration: underline;\n opacity: 0.9;\n }\n &:active {\n text-decoration: underline;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"], ["\n padding: 0;\n width: fit-content;\n background: none;\n text-decoration: none;\n &:focus {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n text-decoration: underline;\n }\n &:hover {\n // text-decoration: underline;\n opacity: 0.9;\n }\n &:active {\n text-decoration: underline;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"]))); -var ButtonConfirmedStyle = styled__default["default"](BaseButton)(templateObject_10$b || (templateObject_10$b = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n /* border: 1px solid ", "; */\n\n &:disabled {\n opacity: 50%;\n background-color: ", ";\n color: ", ";\n cursor: auto;\n }\n"], ["\n background-color: ", ";\n color: ", ";\n /* border: 1px solid ", "; */\n\n &:disabled {\n opacity: 50%;\n background-color: ", ";\n color: ", ";\n cursor: auto;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.bg3; -}, function (_a) { - var theme = _a.theme; - return theme.text1; -}, function (_a) { - var theme = _a.theme; - return theme.green1; -}, function (_a) { - var theme = _a.theme; - return theme.bg2; -}, function (_a) { - var theme = _a.theme; - return theme.text2; -}); -var ButtonErrorStyle = styled__default["default"](BaseButton)(templateObject_11$9 || (templateObject_11$9 = __makeTemplateObject(["\n background-color: ", ";\n border: 1px solid ", ";\n\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n box-shadow: none;\n background-color: ", ";\n border: 1px solid ", ";\n }\n"], ["\n background-color: ", ";\n border: 1px solid ", ";\n\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n box-shadow: none;\n background-color: ", ";\n border: 1px solid ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.red1; -}, function (_a) { - var theme = _a.theme; - return theme.red1; -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.05, theme.red1); -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.05, theme.red1); -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.05, theme.red1); -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.1, theme.red1); -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.1, theme.red1); -}, function (_a) { - var theme = _a.theme; - return theme.red1; -}, function (_a) { - var theme = _a.theme; - return theme.red1; -}); -function ButtonConfirmed(_a) { - var confirmed = _a.confirmed, altDisabledStyle = _a.altDisabledStyle, rest = __rest(_a, ["confirmed", "altDisabledStyle"]); - if (confirmed) { - return jsxRuntime.jsx(ButtonConfirmedStyle, __assign({}, rest), void 0); - } - else { - return jsxRuntime.jsx(ButtonPrimary, __assign({}, rest, { altDisabledStyle: altDisabledStyle }), void 0); - } -} -function ButtonError(_a) { - var error = _a.error, rest = __rest(_a, ["error"]); - if (error) { - return jsxRuntime.jsx(ButtonErrorStyle, __assign({}, rest), void 0); - } - else { - return jsxRuntime.jsx(ButtonPrimary, __assign({}, rest), void 0); - } -} -styled__default["default"](ButtonOutlined)(templateObject_12$9 || (templateObject_12$9 = __makeTemplateObject(["\n border: 1px solid;\n border-color: ", ";\n"], ["\n border: 1px solid;\n border-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.primary1; -}); -styled__default["default"].div(templateObject_13$5 || (templateObject_13$5 = __makeTemplateObject(["\n height: 17px;\n width: 17px;\n border-radius: 50%;\n background-color: ", ";\n display: flex;\n align-items: center;\n justify-content: center;\n"], ["\n height: 17px;\n width: 17px;\n border-radius: 50%;\n background-color: ", ";\n display: flex;\n align-items: center;\n justify-content: center;\n"])), function (_a) { - var theme = _a.theme; - return theme.primary1; -}); -styled__default["default"].div(templateObject_14$5 || (templateObject_14$5 = __makeTemplateObject(["\n width: 20px;\n padding: 0 10px;\n position: absolute;\n top: 11px;\n right: 15px;\n"], ["\n width: 20px;\n padding: 0 10px;\n position: absolute;\n top: 11px;\n right: 15px;\n"]))); -styled__default["default"](reactFeather.Check)(templateObject_15$3 || (templateObject_15$3 = __makeTemplateObject(["\n size: 13px;\n"], ["\n size: 13px;\n"]))); -var templateObject_1$1g, templateObject_2$W, templateObject_3$N, templateObject_4$C, templateObject_5$t, templateObject_6$n, templateObject_7$j, templateObject_8$g, templateObject_9$f, templateObject_10$b, templateObject_11$9, templateObject_12$9, templateObject_13$5, templateObject_14$5, templateObject_15$3; + { + inputs: [ + { + internalType: 'address', + name: '_rewardsDistribution', + type: 'address', + }, + { + internalType: 'address', + name: '_rewardsToken', + type: 'address', + }, + { + internalType: 'address', + name: '_stakingToken', + type: 'address', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'uint256', + name: 'reward', + type: 'uint256', + }, + ], + name: 'RewardAdded', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'user', + type: 'address', + }, + { + indexed: false, + internalType: 'uint256', + name: 'reward', + type: 'uint256', + }, + ], + name: 'RewardPaid', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'user', + type: 'address', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount', + type: 'uint256', + }, + ], + name: 'Staked', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'user', + type: 'address', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount', + type: 'uint256', + }, + ], + name: 'Withdrawn', + type: 'event', + }, + { + constant: true, + inputs: [ + { + internalType: 'address', + name: 'account', + type: 'address', + }, + ], + name: 'balanceOf', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'address', + name: 'account', + type: 'address', + }, + ], + name: 'earned', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [], + name: 'exit', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [], + name: 'getReward', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'getRewardForDuration', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'lastTimeRewardApplicable', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'lastUpdateTime', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'uint256', + name: 'reward', + type: 'uint256', + }, + ], + name: 'notifyRewardAmount', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'periodFinish', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'rewardPerToken', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'rewardPerTokenStored', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'rewardRate', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + name: 'rewards', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'rewardsDistribution', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'rewardsDuration', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'rewardsToken', + outputs: [ + { + internalType: 'contract IERC20', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'uint256', + name: 'amount', + type: 'uint256', + }, + ], + name: 'stake', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'uint256', + name: 'amount', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + { + internalType: 'uint8', + name: 'v', + type: 'uint8', + }, + { + internalType: 'bytes32', + name: 'r', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 's', + type: 'bytes32', + }, + ], + name: 'stakeWithPermit', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'stakingToken', + outputs: [ + { + internalType: 'contract IERC20', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'totalSupply', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + name: 'userRewardPerTokenPaid', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'uint256', + name: 'amount', + type: 'uint256', + }, + ], + name: 'withdraw', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, +] -var isClient = typeof window === 'object'; -function getSize() { - return { - width: isClient ? window.innerWidth : undefined, - height: isClient ? window.innerHeight : undefined, - }; -} -// https://usehooks.com/useWindowSize/ -function useWindowSize() { - var _a = __read(React.useState(getSize), 2), windowSize = _a[0], setWindowSize = _a[1]; - React.useEffect(function () { - function handleResize() { - setWindowSize(getSize()); - } - if (isClient) { - window.addEventListener('resize', handleResize); - return function () { - window.removeEventListener('resize', handleResize); - }; - } - return undefined; - }, []); - return windowSize; +var abi$5 = [ + { + inputs: [ + { + internalType: 'address', + name: 'token_', + type: 'address', + }, + { + internalType: 'bytes32', + name: 'merkleRoot_', + type: 'bytes32', + }, + ], + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'uint256', + name: 'index', + type: 'uint256', + }, + { + indexed: false, + internalType: 'address', + name: 'account', + type: 'address', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount', + type: 'uint256', + }, + ], + name: 'Claimed', + type: 'event', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'index', + type: 'uint256', + }, + { + internalType: 'address', + name: 'account', + type: 'address', + }, + { + internalType: 'uint256', + name: 'amount', + type: 'uint256', + }, + { + internalType: 'bytes32[]', + name: 'merkleProof', + type: 'bytes32[]', + }, + ], + name: 'claim', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'index', + type: 'uint256', + }, + ], + name: 'isClaimed', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'merkleRoot', + outputs: [ + { + internalType: 'bytes32', + name: '', + type: 'bytes32', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'token', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, +] + +var abi$4 = [ + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + indexed: true, + internalType: 'address', + name: 'spender', + type: 'address', + }, + { + indexed: false, + internalType: 'uint256', + name: 'value', + type: 'uint256', + }, + ], + name: 'Approval', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'sender', + type: 'address', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount0', + type: 'uint256', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount1', + type: 'uint256', + }, + { + indexed: true, + internalType: 'address', + name: 'to', + type: 'address', + }, + ], + name: 'Burn', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'sender', + type: 'address', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount0', + type: 'uint256', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount1', + type: 'uint256', + }, + ], + name: 'Mint', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'sender', + type: 'address', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount0In', + type: 'uint256', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount1In', + type: 'uint256', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount0Out', + type: 'uint256', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount1Out', + type: 'uint256', + }, + { + indexed: true, + internalType: 'address', + name: 'to', + type: 'address', + }, + ], + name: 'Swap', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'uint112', + name: 'reserve0', + type: 'uint112', + }, + { + indexed: false, + internalType: 'uint112', + name: 'reserve1', + type: 'uint112', + }, + ], + name: 'Sync', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'from', + type: 'address', + }, + { + indexed: true, + internalType: 'address', + name: 'to', + type: 'address', + }, + { + indexed: false, + internalType: 'uint256', + name: 'value', + type: 'uint256', + }, + ], + name: 'Transfer', + type: 'event', + }, + { + constant: true, + inputs: [], + name: 'DOMAIN_SEPARATOR', + outputs: [ + { + internalType: 'bytes32', + name: '', + type: 'bytes32', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'MINIMUM_LIQUIDITY', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'pure', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'PERMIT_TYPEHASH', + outputs: [ + { + internalType: 'bytes32', + name: '', + type: 'bytes32', + }, + ], + payable: false, + stateMutability: 'pure', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + internalType: 'address', + name: 'spender', + type: 'address', + }, + ], + name: 'allowance', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'address', + name: 'spender', + type: 'address', + }, + { + internalType: 'uint256', + name: 'value', + type: 'uint256', + }, + ], + name: 'approve', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + ], + name: 'balanceOf', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'address', + name: 'to', + type: 'address', + }, + ], + name: 'burn', + outputs: [ + { + internalType: 'uint256', + name: 'amount0', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amount1', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'decimals', + outputs: [ + { + internalType: 'uint8', + name: '', + type: 'uint8', + }, + ], + payable: false, + stateMutability: 'pure', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'factory', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'getReserves', + outputs: [ + { + internalType: 'uint112', + name: 'reserve0', + type: 'uint112', + }, + { + internalType: 'uint112', + name: 'reserve1', + type: 'uint112', + }, + { + internalType: 'uint32', + name: 'blockTimestampLast', + type: 'uint32', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + name: 'initialize', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'kLast', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'address', + name: 'to', + type: 'address', + }, + ], + name: 'mint', + outputs: [ + { + internalType: 'uint256', + name: 'liquidity', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'name', + outputs: [ + { + internalType: 'string', + name: '', + type: 'string', + }, + ], + payable: false, + stateMutability: 'pure', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + ], + name: 'nonces', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + internalType: 'address', + name: 'spender', + type: 'address', + }, + { + internalType: 'uint256', + name: 'value', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + { + internalType: 'uint8', + name: 'v', + type: 'uint8', + }, + { + internalType: 'bytes32', + name: 'r', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 's', + type: 'bytes32', + }, + ], + name: 'permit', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'price0CumulativeLast', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'price1CumulativeLast', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'address', + name: 'to', + type: 'address', + }, + ], + name: 'skim', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'uint256', + name: 'amount0Out', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amount1Out', + type: 'uint256', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'bytes', + name: 'data', + type: 'bytes', + }, + ], + name: 'swap', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'symbol', + outputs: [ + { + internalType: 'string', + name: '', + type: 'string', + }, + ], + payable: false, + stateMutability: 'pure', + type: 'function', + }, + { + constant: false, + inputs: [], + name: 'sync', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'token0', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'token1', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'totalSupply', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'value', + type: 'uint256', + }, + ], + name: 'transfer', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'address', + name: 'from', + type: 'address', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'value', + type: 'uint256', + }, + ], + name: 'transferFrom', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, +] + +var abi$3 = [ + { + inputs: [], + name: 'WETH', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'pure', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'tokenA', + type: 'address', + }, + { + internalType: 'address', + name: 'tokenB', + type: 'address', + }, + { + internalType: 'uint256', + name: 'amountADesired', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountBDesired', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountAMin', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountBMin', + type: 'uint256', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'addLiquidity', + outputs: [ + { + internalType: 'uint256', + name: 'amountA', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountB', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'liquidity', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'token', + type: 'address', + }, + { + internalType: 'uint256', + name: 'amountTokenDesired', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountTokenMin', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountETHMin', + type: 'uint256', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'addLiquidityETH', + outputs: [ + { + internalType: 'uint256', + name: 'amountToken', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountETH', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'liquidity', + type: 'uint256', + }, + ], + stateMutability: 'payable', + type: 'function', + }, + { + inputs: [], + name: 'factory', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'pure', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountOut', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'reserveIn', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'reserveOut', + type: 'uint256', + }, + ], + name: 'getAmountIn', + outputs: [ + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + ], + stateMutability: 'pure', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'reserveIn', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'reserveOut', + type: 'uint256', + }, + ], + name: 'getAmountOut', + outputs: [ + { + internalType: 'uint256', + name: 'amountOut', + type: 'uint256', + }, + ], + stateMutability: 'pure', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountOut', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + ], + name: 'getAmountsIn', + outputs: [ + { + internalType: 'uint256[]', + name: 'amounts', + type: 'uint256[]', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + ], + name: 'getAmountsOut', + outputs: [ + { + internalType: 'uint256[]', + name: 'amounts', + type: 'uint256[]', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountA', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'reserveA', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'reserveB', + type: 'uint256', + }, + ], + name: 'quote', + outputs: [ + { + internalType: 'uint256', + name: 'amountB', + type: 'uint256', + }, + ], + stateMutability: 'pure', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'tokenA', + type: 'address', + }, + { + internalType: 'address', + name: 'tokenB', + type: 'address', + }, + { + internalType: 'uint256', + name: 'liquidity', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountAMin', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountBMin', + type: 'uint256', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'removeLiquidity', + outputs: [ + { + internalType: 'uint256', + name: 'amountA', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountB', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'token', + type: 'address', + }, + { + internalType: 'uint256', + name: 'liquidity', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountTokenMin', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountETHMin', + type: 'uint256', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'removeLiquidityETH', + outputs: [ + { + internalType: 'uint256', + name: 'amountToken', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountETH', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'token', + type: 'address', + }, + { + internalType: 'uint256', + name: 'liquidity', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountTokenMin', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountETHMin', + type: 'uint256', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'removeLiquidityETHSupportingFeeOnTransferTokens', + outputs: [ + { + internalType: 'uint256', + name: 'amountETH', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'token', + type: 'address', + }, + { + internalType: 'uint256', + name: 'liquidity', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountTokenMin', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountETHMin', + type: 'uint256', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + { + internalType: 'bool', + name: 'approveMax', + type: 'bool', + }, + { + internalType: 'uint8', + name: 'v', + type: 'uint8', + }, + { + internalType: 'bytes32', + name: 'r', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 's', + type: 'bytes32', + }, + ], + name: 'removeLiquidityETHWithPermit', + outputs: [ + { + internalType: 'uint256', + name: 'amountToken', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountETH', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'token', + type: 'address', + }, + { + internalType: 'uint256', + name: 'liquidity', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountTokenMin', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountETHMin', + type: 'uint256', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + { + internalType: 'bool', + name: 'approveMax', + type: 'bool', + }, + { + internalType: 'uint8', + name: 'v', + type: 'uint8', + }, + { + internalType: 'bytes32', + name: 'r', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 's', + type: 'bytes32', + }, + ], + name: 'removeLiquidityETHWithPermitSupportingFeeOnTransferTokens', + outputs: [ + { + internalType: 'uint256', + name: 'amountETH', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'tokenA', + type: 'address', + }, + { + internalType: 'address', + name: 'tokenB', + type: 'address', + }, + { + internalType: 'uint256', + name: 'liquidity', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountAMin', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountBMin', + type: 'uint256', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + { + internalType: 'bool', + name: 'approveMax', + type: 'bool', + }, + { + internalType: 'uint8', + name: 'v', + type: 'uint8', + }, + { + internalType: 'bytes32', + name: 'r', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 's', + type: 'bytes32', + }, + ], + name: 'removeLiquidityWithPermit', + outputs: [ + { + internalType: 'uint256', + name: 'amountA', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountB', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountOut', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'swapETHForExactTokens', + outputs: [ + { + internalType: 'uint256[]', + name: 'amounts', + type: 'uint256[]', + }, + ], + stateMutability: 'payable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountOutMin', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'swapExactETHForTokens', + outputs: [ + { + internalType: 'uint256[]', + name: 'amounts', + type: 'uint256[]', + }, + ], + stateMutability: 'payable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountOutMin', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'swapExactETHForTokensSupportingFeeOnTransferTokens', + outputs: [], + stateMutability: 'payable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountOutMin', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'swapExactTokensForETH', + outputs: [ + { + internalType: 'uint256[]', + name: 'amounts', + type: 'uint256[]', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountOutMin', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'swapExactTokensForETHSupportingFeeOnTransferTokens', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountOutMin', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'swapExactTokensForTokens', + outputs: [ + { + internalType: 'uint256[]', + name: 'amounts', + type: 'uint256[]', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountOutMin', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'swapExactTokensForTokensSupportingFeeOnTransferTokens', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountOut', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountInMax', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'swapTokensForExactETH', + outputs: [ + { + internalType: 'uint256[]', + name: 'amounts', + type: 'uint256[]', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountOut', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountInMax', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'swapTokensForExactTokens', + outputs: [ + { + internalType: 'uint256[]', + name: 'amounts', + type: 'uint256[]', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, +] + +var abi$2 = [ + { + inputs: [ + { + internalType: 'address', + name: '_factory', + type: 'address', + }, + { + internalType: 'address', + name: '_WETH9', + type: 'address', + }, + ], + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + inputs: [], + name: 'WETH9', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'factory', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes', + name: 'path', + type: 'bytes', + }, + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + ], + name: 'quoteExactInput', + outputs: [ + { + internalType: 'uint256', + name: 'amountOut', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'tokenIn', + type: 'address', + }, + { + internalType: 'address', + name: 'tokenOut', + type: 'address', + }, + { + internalType: 'uint24', + name: 'fee', + type: 'uint24', + }, + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + { + internalType: 'uint160', + name: 'sqrtPriceLimitX96', + type: 'uint160', + }, + ], + name: 'quoteExactInputSingle', + outputs: [ + { + internalType: 'uint256', + name: 'amountOut', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes', + name: 'path', + type: 'bytes', + }, + { + internalType: 'uint256', + name: 'amountOut', + type: 'uint256', + }, + ], + name: 'quoteExactOutput', + outputs: [ + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'tokenIn', + type: 'address', + }, + { + internalType: 'address', + name: 'tokenOut', + type: 'address', + }, + { + internalType: 'uint24', + name: 'fee', + type: 'uint24', + }, + { + internalType: 'uint256', + name: 'amountOut', + type: 'uint256', + }, + { + internalType: 'uint160', + name: 'sqrtPriceLimitX96', + type: 'uint160', + }, + ], + name: 'quoteExactOutputSingle', + outputs: [ + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'int256', + name: 'amount0Delta', + type: 'int256', + }, + { + internalType: 'int256', + name: 'amount1Delta', + type: 'int256', + }, + { + internalType: 'bytes', + name: 'path', + type: 'bytes', + }, + ], + name: 'uniswapV3SwapCallback', + outputs: [], + stateMutability: 'view', + type: 'function', + }, +] + +var abi$1 = [ + { + inputs: [], + name: 'getCurrentBlockTimestamp', + outputs: [ + { + internalType: 'uint256', + name: 'timestamp', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'addr', + type: 'address', + }, + ], + name: 'getEthBalance', + outputs: [ + { + internalType: 'uint256', + name: 'balance', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + components: [ + { + internalType: 'address', + name: 'target', + type: 'address', + }, + { + internalType: 'uint256', + name: 'gasLimit', + type: 'uint256', + }, + { + internalType: 'bytes', + name: 'callData', + type: 'bytes', + }, + ], + internalType: 'struct UniswapInterfaceMulticall.Call[]', + name: 'calls', + type: 'tuple[]', + }, + ], + name: 'multicall', + outputs: [ + { + internalType: 'uint256', + name: 'blockNumber', + type: 'uint256', + }, + { + components: [ + { + internalType: 'bool', + name: 'success', + type: 'bool', + }, + { + internalType: 'uint256', + name: 'gasUsed', + type: 'uint256', + }, + { + internalType: 'bytes', + name: 'returnData', + type: 'bytes', + }, + ], + internalType: 'struct UniswapInterfaceMulticall.Result[]', + name: 'returnData', + type: 'tuple[]', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, +] + +var ARGENT_WALLET_DETECTOR_ABI = [ + { + inputs: [ + { + internalType: 'bytes32[]', + name: '_codes', + type: 'bytes32[]', + }, + { + internalType: 'address[]', + name: '_implementations', + type: 'address[]', + }, + ], + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'code', + type: 'bytes32', + }, + ], + name: 'CodeAdded', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'implementation', + type: 'address', + }, + ], + name: 'ImplementationAdded', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: '_newOwner', + type: 'address', + }, + ], + name: 'OwnerChanged', + type: 'event', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: '', + type: 'bytes32', + }, + ], + name: 'acceptedCodes', + outputs: [ + { + internalType: 'bool', + name: 'exists', + type: 'bool', + }, + { + internalType: 'uint128', + name: 'index', + type: 'uint128', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + name: 'acceptedImplementations', + outputs: [ + { + internalType: 'bool', + name: 'exists', + type: 'bool', + }, + { + internalType: 'uint128', + name: 'index', + type: 'uint128', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: '_code', + type: 'bytes32', + }, + ], + name: 'addCode', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: '_argentWallet', + type: 'address', + }, + ], + name: 'addCodeAndImplementationFromWallet', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: '_impl', + type: 'address', + }, + ], + name: 'addImplementation', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: '_newOwner', + type: 'address', + }, + ], + name: 'changeOwner', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [], + name: 'getCodes', + outputs: [ + { + internalType: 'bytes32[]', + name: '', + type: 'bytes32[]', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'getImplementations', + outputs: [ + { + internalType: 'address[]', + name: '', + type: 'address[]', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: '_wallet', + type: 'address', + }, + ], + name: 'isArgentWallet', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'owner', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, +] + +var EIP_2612 = [ + { + constant: true, + inputs: [ + { + name: 'owner', + type: 'address', + }, + ], + name: 'nonces', + outputs: [ + { + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'DOMAIN_SEPARATOR', + outputs: [ + { + name: '', + type: 'bytes32', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, +] + +var ENS_PUBLIC_RESOLVER_ABI = [ + { + inputs: [ + { + internalType: 'contract ENS', + name: '_ens', + type: 'address', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: true, + internalType: 'uint256', + name: 'contentType', + type: 'uint256', + }, + ], + name: 'ABIChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'address', + name: 'a', + type: 'address', + }, + ], + name: 'AddrChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'uint256', + name: 'coinType', + type: 'uint256', + }, + { + indexed: false, + internalType: 'bytes', + name: 'newAddress', + type: 'bytes', + }, + ], + name: 'AddressChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: true, + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + indexed: true, + internalType: 'address', + name: 'target', + type: 'address', + }, + { + indexed: false, + internalType: 'bool', + name: 'isAuthorised', + type: 'bool', + }, + ], + name: 'AuthorisationChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'bytes', + name: 'hash', + type: 'bytes', + }, + ], + name: 'ContenthashChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'bytes', + name: 'name', + type: 'bytes', + }, + { + indexed: false, + internalType: 'uint16', + name: 'resource', + type: 'uint16', + }, + { + indexed: false, + internalType: 'bytes', + name: 'record', + type: 'bytes', + }, + ], + name: 'DNSRecordChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'bytes', + name: 'name', + type: 'bytes', + }, + { + indexed: false, + internalType: 'uint16', + name: 'resource', + type: 'uint16', + }, + ], + name: 'DNSRecordDeleted', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'DNSZoneCleared', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: true, + internalType: 'bytes4', + name: 'interfaceID', + type: 'bytes4', + }, + { + indexed: false, + internalType: 'address', + name: 'implementer', + type: 'address', + }, + ], + name: 'InterfaceChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'string', + name: 'name', + type: 'string', + }, + ], + name: 'NameChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'bytes32', + name: 'x', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'bytes32', + name: 'y', + type: 'bytes32', + }, + ], + name: 'PubkeyChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: true, + internalType: 'string', + name: 'indexedKey', + type: 'string', + }, + { + indexed: false, + internalType: 'string', + name: 'key', + type: 'string', + }, + ], + name: 'TextChanged', + type: 'event', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'uint256', + name: 'contentTypes', + type: 'uint256', + }, + ], + name: 'ABI', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + { + internalType: 'bytes', + name: '', + type: 'bytes', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'addr', + outputs: [ + { + internalType: 'address payable', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: '', + type: 'bytes32', + }, + { + internalType: 'address', + name: '', + type: 'address', + }, + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + name: 'authorisations', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'clearDNSZone', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'contenthash', + outputs: [ + { + internalType: 'bytes', + name: '', + type: 'bytes', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 'name', + type: 'bytes32', + }, + { + internalType: 'uint16', + name: 'resource', + type: 'uint16', + }, + ], + name: 'dnsRecord', + outputs: [ + { + internalType: 'bytes', + name: '', + type: 'bytes', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 'name', + type: 'bytes32', + }, + ], + name: 'hasDNSRecords', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes4', + name: 'interfaceID', + type: 'bytes4', + }, + ], + name: 'interfaceImplementer', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'name', + outputs: [ + { + internalType: 'string', + name: '', + type: 'string', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'pubkey', + outputs: [ + { + internalType: 'bytes32', + name: 'x', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 'y', + type: 'bytes32', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'uint256', + name: 'contentType', + type: 'uint256', + }, + { + internalType: 'bytes', + name: 'data', + type: 'bytes', + }, + ], + name: 'setABI', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'uint256', + name: 'coinType', + type: 'uint256', + }, + { + internalType: 'bytes', + name: 'a', + type: 'bytes', + }, + ], + name: 'setAddr', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'address', + name: 'a', + type: 'address', + }, + ], + name: 'setAddr', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'address', + name: 'target', + type: 'address', + }, + { + internalType: 'bool', + name: 'isAuthorised', + type: 'bool', + }, + ], + name: 'setAuthorisation', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes', + name: 'hash', + type: 'bytes', + }, + ], + name: 'setContenthash', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes', + name: 'data', + type: 'bytes', + }, + ], + name: 'setDNSRecords', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes4', + name: 'interfaceID', + type: 'bytes4', + }, + { + internalType: 'address', + name: 'implementer', + type: 'address', + }, + ], + name: 'setInterface', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'string', + name: 'name', + type: 'string', + }, + ], + name: 'setName', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 'x', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 'y', + type: 'bytes32', + }, + ], + name: 'setPubkey', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'string', + name: 'key', + type: 'string', + }, + { + internalType: 'string', + name: 'value', + type: 'string', + }, + ], + name: 'setText', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes4', + name: 'interfaceID', + type: 'bytes4', + }, + ], + name: 'supportsInterface', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'pure', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'string', + name: 'key', + type: 'string', + }, + ], + name: 'text', + outputs: [ + { + internalType: 'string', + name: '', + type: 'string', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, +] + +var ENS_ABI = [ + { + inputs: [ + { + internalType: 'contract ENS', + name: '_old', + type: 'address', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + indexed: true, + internalType: 'address', + name: 'operator', + type: 'address', + }, + { + indexed: false, + internalType: 'bool', + name: 'approved', + type: 'bool', + }, + ], + name: 'ApprovalForAll', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: true, + internalType: 'bytes32', + name: 'label', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'address', + name: 'owner', + type: 'address', + }, + ], + name: 'NewOwner', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'address', + name: 'resolver', + type: 'address', + }, + ], + name: 'NewResolver', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'uint64', + name: 'ttl', + type: 'uint64', + }, + ], + name: 'NewTTL', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'address', + name: 'owner', + type: 'address', + }, + ], + name: 'Transfer', + type: 'event', + }, + { + constant: true, + inputs: [ + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + internalType: 'address', + name: 'operator', + type: 'address', + }, + ], + name: 'isApprovedForAll', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'old', + outputs: [ + { + internalType: 'contract ENS', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'owner', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'recordExists', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'resolver', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'address', + name: 'operator', + type: 'address', + }, + { + internalType: 'bool', + name: 'approved', + type: 'bool', + }, + ], + name: 'setApprovalForAll', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + ], + name: 'setOwner', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + internalType: 'address', + name: 'resolver', + type: 'address', + }, + { + internalType: 'uint64', + name: 'ttl', + type: 'uint64', + }, + ], + name: 'setRecord', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'address', + name: 'resolver', + type: 'address', + }, + ], + name: 'setResolver', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 'label', + type: 'bytes32', + }, + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + ], + name: 'setSubnodeOwner', + outputs: [ + { + internalType: 'bytes32', + name: '', + type: 'bytes32', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 'label', + type: 'bytes32', + }, + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + internalType: 'address', + name: 'resolver', + type: 'address', + }, + { + internalType: 'uint64', + name: 'ttl', + type: 'uint64', + }, + ], + name: 'setSubnodeRecord', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'uint64', + name: 'ttl', + type: 'uint64', + }, + ], + name: 'setTTL', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'ttl', + outputs: [ + { + internalType: 'uint64', + name: '', + type: 'uint64', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, +] + +var ERC20ABI = [ + { + constant: true, + inputs: [], + name: 'name', + outputs: [ + { + name: '', + type: 'string', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + name: '_spender', + type: 'address', + }, + { + name: '_value', + type: 'uint256', + }, + ], + name: 'approve', + outputs: [ + { + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'totalSupply', + outputs: [ + { + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + name: '_from', + type: 'address', + }, + { + name: '_to', + type: 'address', + }, + { + name: '_value', + type: 'uint256', + }, + ], + name: 'transferFrom', + outputs: [ + { + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'decimals', + outputs: [ + { + name: '', + type: 'uint8', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + name: '_owner', + type: 'address', + }, + ], + name: 'balanceOf', + outputs: [ + { + name: 'balance', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'symbol', + outputs: [ + { + name: '', + type: 'string', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + name: '_to', + type: 'address', + }, + { + name: '_value', + type: 'uint256', + }, + ], + name: 'transfer', + outputs: [ + { + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [ + { + name: '_owner', + type: 'address', + }, + { + name: '_spender', + type: 'address', + }, + ], + name: 'allowance', + outputs: [ + { + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + payable: true, + stateMutability: 'payable', + type: 'fallback', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: 'owner', + type: 'address', + }, + { + indexed: true, + name: 'spender', + type: 'address', + }, + { + indexed: false, + name: 'value', + type: 'uint256', + }, + ], + name: 'Approval', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: 'from', + type: 'address', + }, + { + indexed: true, + name: 'to', + type: 'address', + }, + { + indexed: false, + name: 'value', + type: 'uint256', + }, + ], + name: 'Transfer', + type: 'event', + }, +] + +var ERC20_BYTES32_ABI = [ + { + constant: true, + inputs: [], + name: 'name', + outputs: [ + { + name: '', + type: 'bytes32', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'symbol', + outputs: [ + { + name: '', + type: 'bytes32', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, +] + +var ERC721_ABI = [ + { + inputs: [ + { + internalType: 'uint256', + name: 'tokenId', + type: 'uint256', + }, + ], + name: 'ownerOf', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'tokenId', + type: 'uint256', + }, + ], + name: 'tokenURI', + outputs: [ + { + internalType: 'string', + name: '', + type: 'string', + }, + ], + stateMutability: 'view', + type: 'function', + }, +] + +var ERC1155_ABI = [ + { + constant: true, + inputs: [ + { + internalType: 'address', + name: '_owner', + type: 'address', + }, + { + internalType: 'uint256', + name: '_id', + type: 'uint256', + }, + ], + name: 'balanceOf', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'uint256', + name: '_id', + type: 'uint256', + }, + ], + name: 'uri', + outputs: [ + { + internalType: 'string', + name: '', + type: 'string', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, +] + +var WETH_ABI = [ + { + constant: true, + inputs: [], + name: 'name', + outputs: [ + { + name: '', + type: 'string', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + name: 'guy', + type: 'address', + }, + { + name: 'wad', + type: 'uint256', + }, + ], + name: 'approve', + outputs: [ + { + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'totalSupply', + outputs: [ + { + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + name: 'src', + type: 'address', + }, + { + name: 'dst', + type: 'address', + }, + { + name: 'wad', + type: 'uint256', + }, + ], + name: 'transferFrom', + outputs: [ + { + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + name: 'wad', + type: 'uint256', + }, + ], + name: 'withdraw', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'decimals', + outputs: [ + { + name: '', + type: 'uint8', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + name: '', + type: 'address', + }, + ], + name: 'balanceOf', + outputs: [ + { + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'symbol', + outputs: [ + { + name: '', + type: 'string', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + name: 'dst', + type: 'address', + }, + { + name: 'wad', + type: 'uint256', + }, + ], + name: 'transfer', + outputs: [ + { + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [], + name: 'deposit', + outputs: [], + payable: true, + stateMutability: 'payable', + type: 'function', + }, + { + constant: true, + inputs: [ + { + name: '', + type: 'address', + }, + { + name: '', + type: 'address', + }, + ], + name: 'allowance', + outputs: [ + { + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + payable: true, + stateMutability: 'payable', + type: 'fallback', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: 'src', + type: 'address', + }, + { + indexed: true, + name: 'guy', + type: 'address', + }, + { + indexed: false, + name: 'wad', + type: 'uint256', + }, + ], + name: 'Approval', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: 'src', + type: 'address', + }, + { + indexed: true, + name: 'dst', + type: 'address', + }, + { + indexed: false, + name: 'wad', + type: 'uint256', + }, + ], + name: 'Transfer', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: 'dst', + type: 'address', + }, + { + indexed: false, + name: 'wad', + type: 'uint256', + }, + ], + name: 'Deposit', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: 'src', + type: 'address', + }, + { + indexed: false, + name: 'wad', + type: 'uint256', + }, + ], + name: 'Withdrawal', + type: 'event', + }, +] + +var _a$h +/** + * List of all the networks supported by the Uniswap Interface + */ +var SupportedChainId +;(function (SupportedChainId) { + SupportedChainId[(SupportedChainId['MAINNET'] = 1)] = 'MAINNET' + SupportedChainId[(SupportedChainId['ROPSTEN'] = 3)] = 'ROPSTEN' + SupportedChainId[(SupportedChainId['RINKEBY'] = 4)] = 'RINKEBY' + SupportedChainId[(SupportedChainId['GOERLI'] = 5)] = 'GOERLI' + SupportedChainId[(SupportedChainId['KOVAN'] = 42)] = 'KOVAN' + SupportedChainId[(SupportedChainId['ARBITRUM_ONE'] = 42161)] = 'ARBITRUM_ONE' + SupportedChainId[(SupportedChainId['ARBITRUM_RINKEBY'] = 421611)] = 'ARBITRUM_RINKEBY' + SupportedChainId[(SupportedChainId['OPTIMISM'] = 10)] = 'OPTIMISM' + SupportedChainId[(SupportedChainId['OPTIMISTIC_KOVAN'] = 69)] = 'OPTIMISTIC_KOVAN' + SupportedChainId[(SupportedChainId['POLYGON'] = 137)] = 'POLYGON' + SupportedChainId[(SupportedChainId['POLYGON_MUMBAI'] = 80001)] = 'POLYGON_MUMBAI' +})(SupportedChainId || (SupportedChainId = {})) +var CHAIN_IDS_TO_NAMES = + ((_a$h = {}), + (_a$h[SupportedChainId.MAINNET] = 'mainnet'), + (_a$h[SupportedChainId.ROPSTEN] = 'ropsten'), + (_a$h[SupportedChainId.RINKEBY] = 'rinkeby'), + (_a$h[SupportedChainId.GOERLI] = 'goerli'), + (_a$h[SupportedChainId.KOVAN] = 'kovan'), + (_a$h[SupportedChainId.POLYGON] = 'polygon'), + (_a$h[SupportedChainId.POLYGON_MUMBAI] = 'polygon_mumbai'), + (_a$h[SupportedChainId.ARBITRUM_ONE] = 'arbitrum'), + (_a$h[SupportedChainId.ARBITRUM_RINKEBY] = 'arbitrum_rinkeby'), + (_a$h[SupportedChainId.OPTIMISM] = 'optimism'), + (_a$h[SupportedChainId.OPTIMISTIC_KOVAN] = 'optimistic_kovan'), + _a$h) +/** + * Array of all the supported chain IDs + */ +var ALL_SUPPORTED_CHAIN_IDS = Object.values(SupportedChainId).filter(function (id) { + return typeof id === 'number' +}) +var SUPPORTED_GAS_ESTIMATE_CHAIN_IDS = [SupportedChainId.MAINNET, SupportedChainId.POLYGON] +/** + * All the chain IDs that are running the Ethereum protocol. + */ +;[ + SupportedChainId.MAINNET, + SupportedChainId.ROPSTEN, + SupportedChainId.RINKEBY, + SupportedChainId.GOERLI, + SupportedChainId.KOVAN, + SupportedChainId.POLYGON, + SupportedChainId.POLYGON_MUMBAI, +] +/** + * Controls some L2 specific behavior, e.g. slippage tolerance, special UI behavior. + * The expectation is that all of these networks have immediate transaction confirmation. + */ +var L2_CHAIN_IDS = [ + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, +] + +var DEFAULT_NETWORKS = [ + SupportedChainId.MAINNET, + SupportedChainId.ROPSTEN, + SupportedChainId.RINKEBY, + SupportedChainId.GOERLI, + SupportedChainId.KOVAN, +] +function constructSameAddressMap(address, additionalNetworks) { + if (additionalNetworks === void 0) { + additionalNetworks = [] + } + return DEFAULT_NETWORKS.concat(additionalNetworks).reduce(function (memo, chainId) { + memo[chainId] = address + return memo + }, {}) } -// eslint-disable-next-line react/prop-types -function Confetti(_a) { - var start = _a.start, variant = _a.variant; - var _b = useWindowSize(), width = _b.width, height = _b.height; - var _variant = variant ? variant : height && width && height > 1.5 * width ? 'bottom' : variant; - return start && width && height ? (jsxRuntime.jsx(ReactConfetti__default["default"], { style: { zIndex: 1401 }, numberOfPieces: 400, recycle: false, run: true, width: width, height: height, confettiSource: { - h: height, - w: width, - x: 0, - y: _variant === 'top' ? height * 0.25 : _variant === 'bottom' ? height * 0.75 : height * 0.5, - }, initialVelocityX: 15, initialVelocityY: 30, gravity: 0.45, tweenDuration: 100, wind: 0.05 }, void 0)) : null; +var _a$g, _b$6, _c$4, _d$3, _e$2, _f$1, _g$1, _h$1 +var UNI_ADDRESS = constructSameAddressMap('0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984') +var MULTICALL_ADDRESS = __assign( + __assign( + {}, + constructSameAddressMap('0x1F98415757620B543A52E61c46B32eB19261F984', [ + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.OPTIMISM, + SupportedChainId.POLYGON_MUMBAI, + SupportedChainId.POLYGON, + ]) + ), + ((_a$g = {}), + (_a$g[SupportedChainId.ARBITRUM_ONE] = '0xadF885960B47eA2CD9B55E6DAc6B42b7Cb2806dB'), + (_a$g[SupportedChainId.ARBITRUM_RINKEBY] = '0xa501c031958F579dB7676fF1CE78AD305794d579'), + _a$g) +) +var V2_FACTORY_ADDRESSES = constructSameAddressMap(v2Sdk.FACTORY_ADDRESS) +var V2_ROUTER_ADDRESS = constructSameAddressMap('0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D') +var V3_ROUTER_ADDRESS = constructSameAddressMap('0xE592427A0AEce92De3Edee1F18E0157C05861564', [ + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON, + SupportedChainId.POLYGON_MUMBAI, +]) +var SWAP_ROUTER_ADDRESSES = constructSameAddressMap('0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45', [ + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON, + SupportedChainId.POLYGON_MUMBAI, +]) +/** + * The oldest V0 governance address + */ +constructSameAddressMap('0x5e4be8Bc9637f0EAA1A755019e06A68ce081D58F') +/** + * The older V1 governance address + */ +;(_b$6 = {}), (_b$6[SupportedChainId.MAINNET] = '0xC4e172459f1E7939D522503B81AFAaC1014CE6F6'), _b$6 +/** + * The latest governor bravo that is currently admin of timelock + */ +;(_c$4 = {}), (_c$4[SupportedChainId.MAINNET] = '0x408ED6354d4973f66138C91495F2f2FCbd8724C3'), _c$4 +constructSameAddressMap('0x1a9C8182C09F50C8318d769245beA52c32BE35BC') +var MERKLE_DISTRIBUTOR_ADDRESS = + ((_d$3 = {}), (_d$3[SupportedChainId.MAINNET] = '0x090D4613473dEE047c3f2706764f49E0821D256e'), _d$3) +var ARGENT_WALLET_DETECTOR_ADDRESS = + ((_e$2 = {}), (_e$2[SupportedChainId.MAINNET] = '0xeca4B0bDBf7c55E9b7925919d03CbF8Dc82537E8'), _e$2) +var V3_CORE_FACTORY_ADDRESSES = constructSameAddressMap(v3Sdk.FACTORY_ADDRESS, [ + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON_MUMBAI, + SupportedChainId.POLYGON, +]) +var QUOTER_ADDRESSES = constructSameAddressMap('0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6', [ + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON_MUMBAI, + SupportedChainId.POLYGON, +]) +constructSameAddressMap('0xC36442b4a4522E871399CD717aBDD847Ab11FE88', [ + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON_MUMBAI, + SupportedChainId.POLYGON, +]) +var ENS_REGISTRAR_ADDRESSES = + ((_f$1 = {}), + (_f$1[SupportedChainId.MAINNET] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'), + (_f$1[SupportedChainId.ROPSTEN] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'), + (_f$1[SupportedChainId.GOERLI] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'), + (_f$1[SupportedChainId.RINKEBY] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'), + _f$1) +var SOCKS_CONTROLLER_ADDRESSES = + ((_g$1 = {}), (_g$1[SupportedChainId.MAINNET] = '0x65770b5283117639760beA3F867b69b3697a91dd'), _g$1) +constructSameAddressMap('0xA5644E29708357803b5A882D272c41cC0dF92B34', [ + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON_MUMBAI, + SupportedChainId.POLYGON, +]) +;(_h$1 = {}), + (_h$1[SupportedChainId.ARBITRUM_ONE] = '0xbfd8137f7d1516D3ea5cA83523914859ec47F573'), + (_h$1[SupportedChainId.ARBITRUM_RINKEBY] = '0xbfd8137f7d1516D3ea5cA83523914859ec47F573'), + _h$1 + +var _a$f, _b$5 +var AMPL = new sdkCore.Token( + SupportedChainId.MAINNET, + '0xD46bA6D942050d489DBd938a2C909A5d5039A161', + 9, + 'AMPL', + 'Ampleforth' +) +var DAI = new sdkCore.Token( + SupportedChainId.MAINNET, + '0x6B175474E89094C44Da98b954EedeAC495271d0F', + 18, + 'DAI', + 'Dai Stablecoin' +) +var DAI_ARBITRUM_ONE = new sdkCore.Token( + SupportedChainId.ARBITRUM_ONE, + '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', + 18, + 'DAI', + 'Dai stable coin' +) +var DAI_OPTIMISM = new sdkCore.Token( + SupportedChainId.OPTIMISM, + '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', + 18, + 'DAI', + 'Dai stable coin' +) +var USDC = new sdkCore.Token( + SupportedChainId.MAINNET, + '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', + 6, + 'USDC', + 'USD//C' +) +var USDC_ARBITRUM = new sdkCore.Token( + SupportedChainId.ARBITRUM_ONE, + '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8', + 6, + 'USDC', + 'USD//C' +) +var USDC_POLYGON = new sdkCore.Token( + SupportedChainId.POLYGON, + '0x2791bca1f2de4661ed88a30c99a7a9449aa84174', + 6, + 'USDC', + 'USD//C' +) +var DAI_POLYGON = new sdkCore.Token( + SupportedChainId.POLYGON, + '0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063', + 18, + 'DAI', + 'Dai Stablecoin' +) +var USDT_POLYGON = new sdkCore.Token( + SupportedChainId.POLYGON, + '0xc2132d05d31c914a87c6611c10748aeb04b58e8f', + 6, + 'USDT', + 'Tether USD' +) +var WBTC_POLYGON = new sdkCore.Token( + SupportedChainId.POLYGON, + '0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6', + 8, + 'WBTC', + 'Wrapped BTC' +) +var USDC_OPTIMISM = new sdkCore.Token( + SupportedChainId.OPTIMISM, + '0x7F5c764cBc14f9669B88837ca1490cCa17c31607', + 6, + 'USDC', + 'USD//C' +) +var USDT = new sdkCore.Token( + SupportedChainId.MAINNET, + '0xdAC17F958D2ee523a2206206994597C13D831ec7', + 6, + 'USDT', + 'Tether USD' +) +var USDT_ARBITRUM_ONE = new sdkCore.Token( + SupportedChainId.ARBITRUM_ONE, + '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9', + 6, + 'USDT', + 'Tether USD' +) +var USDT_OPTIMISM = new sdkCore.Token( + SupportedChainId.OPTIMISM, + '0x94b008aA00579c1307B0EF2c499aD98a8ce58e58', + 6, + 'USDT', + 'Tether USD' +) +var WBTC = new sdkCore.Token( + SupportedChainId.MAINNET, + '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', + 8, + 'WBTC', + 'Wrapped BTC' +) +var WBTC_ARBITRUM_ONE = new sdkCore.Token( + SupportedChainId.ARBITRUM_ONE, + '0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f', + 8, + 'WBTC', + 'Wrapped BTC' +) +var WBTC_OPTIMISM = new sdkCore.Token( + SupportedChainId.OPTIMISM, + '0x68f180fcCe6836688e9084f035309E29Bf0A2095', + 8, + 'WBTC', + 'Wrapped BTC' +) +var FEI = new sdkCore.Token( + SupportedChainId.MAINNET, + '0x956F47F50A910163D8BF957Cf5846D573E7f87CA', + 18, + 'FEI', + 'Fei USD' +) +var TRIBE = new sdkCore.Token( + SupportedChainId.MAINNET, + '0xc7283b66Eb1EB5FB86327f08e1B5816b0720212B', + 18, + 'TRIBE', + 'Tribe' +) +var FRAX = new sdkCore.Token(SupportedChainId.MAINNET, '0x853d955aCEf822Db058eb8505911ED77F175b99e', 18, 'FRAX', 'Frax') +var FXS = new sdkCore.Token( + SupportedChainId.MAINNET, + '0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0', + 18, + 'FXS', + 'Frax Share' +) +var renBTC = new sdkCore.Token( + SupportedChainId.MAINNET, + '0xEB4C2781e4ebA804CE9a9803C67d0893436bB27D', + 8, + 'renBTC', + 'renBTC' +) +var ETH2X_FLI = new sdkCore.Token( + SupportedChainId.MAINNET, + '0xAa6E8127831c9DE45ae56bB1b0d4D4Da6e5665BD', + 18, + 'ETH2x-FLI', + 'ETH 2x Flexible Leverage Index' +) +var sETH2 = new sdkCore.Token( + SupportedChainId.MAINNET, + '0xFe2e637202056d30016725477c5da089Ab0A043A', + 18, + 'sETH2', + 'StakeWise Staked ETH2' +) +var rETH2 = new sdkCore.Token( + SupportedChainId.MAINNET, + '0x20BC832ca081b91433ff6c17f85701B6e92486c5', + 18, + 'rETH2', + 'StakeWise Reward ETH2' +) +var SWISE = new sdkCore.Token( + SupportedChainId.MAINNET, + '0x48C3399719B582dD63eB5AADf12A40B4C3f52FA2', + 18, + 'SWISE', + 'StakeWise' +) +var WETH_POLYGON_MUMBAI = new sdkCore.Token( + SupportedChainId.POLYGON_MUMBAI, + '0xa6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa', + 18, + 'WETH', + 'Wrapped Ether' +) +var WETH_POLYGON = new sdkCore.Token( + SupportedChainId.POLYGON, + '0x7ceb23fd6bc0add59e62ac25578270cff1b9f619', + 18, + 'WETH', + 'Wrapped Ether' +) +var UNI = + ((_a$f = {}), + (_a$f[SupportedChainId.MAINNET] = new sdkCore.Token(SupportedChainId.MAINNET, UNI_ADDRESS[1], 18, 'UNI', 'Uniswap')), + (_a$f[SupportedChainId.RINKEBY] = new sdkCore.Token(SupportedChainId.RINKEBY, UNI_ADDRESS[4], 18, 'UNI', 'Uniswap')), + (_a$f[SupportedChainId.ROPSTEN] = new sdkCore.Token(SupportedChainId.ROPSTEN, UNI_ADDRESS[3], 18, 'UNI', 'Uniswap')), + (_a$f[SupportedChainId.GOERLI] = new sdkCore.Token(SupportedChainId.GOERLI, UNI_ADDRESS[5], 18, 'UNI', 'Uniswap')), + (_a$f[SupportedChainId.KOVAN] = new sdkCore.Token(SupportedChainId.KOVAN, UNI_ADDRESS[42], 18, 'UNI', 'Uniswap')), + _a$f) +var WRAPPED_NATIVE_CURRENCY = __assign( + __assign({}, sdkCore.WETH9), + ((_b$5 = {}), + (_b$5[SupportedChainId.OPTIMISM] = new sdkCore.Token( + SupportedChainId.OPTIMISM, + '0x4200000000000000000000000000000000000006', + 18, + 'WETH', + 'Wrapped Ether' + )), + (_b$5[SupportedChainId.OPTIMISTIC_KOVAN] = new sdkCore.Token( + SupportedChainId.OPTIMISTIC_KOVAN, + '0x4200000000000000000000000000000000000006', + 18, + 'WETH', + 'Wrapped Ether' + )), + (_b$5[SupportedChainId.ARBITRUM_ONE] = new sdkCore.Token( + SupportedChainId.ARBITRUM_ONE, + '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1', + 18, + 'WETH', + 'Wrapped Ether' + )), + (_b$5[SupportedChainId.ARBITRUM_RINKEBY] = new sdkCore.Token( + SupportedChainId.ARBITRUM_RINKEBY, + '0xB47e6A5f8b33b3F17603C83a0535A9dcD7E32681', + 18, + 'WETH', + 'Wrapped Ether' + )), + (_b$5[SupportedChainId.POLYGON] = new sdkCore.Token( + SupportedChainId.POLYGON, + '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270', + 18, + 'WMATIC', + 'Wrapped MATIC' + )), + (_b$5[SupportedChainId.POLYGON_MUMBAI] = new sdkCore.Token( + SupportedChainId.POLYGON_MUMBAI, + '0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889', + 18, + 'WMATIC', + 'Wrapped MATIC' + )), + _b$5) +) +function isMatic(chainId) { + return chainId === SupportedChainId.POLYGON_MUMBAI || chainId === SupportedChainId.POLYGON +} +var MaticNativeCurrency = /** @class */ (function (_super) { + __extends(MaticNativeCurrency, _super) + function MaticNativeCurrency(chainId) { + var _this = this + if (!isMatic(chainId)) throw new Error('Not matic') + _this = _super.call(this, chainId, 18, 'MATIC', 'Polygon Matic') || this + return _this + } + MaticNativeCurrency.prototype.equals = function (other) { + return other.isNative && other.chainId === this.chainId + } + Object.defineProperty(MaticNativeCurrency.prototype, 'wrapped', { + get() { + if (!isMatic(this.chainId)) throw new Error('Not matic') + return WRAPPED_NATIVE_CURRENCY[this.chainId] + }, + enumerable: false, + configurable: true, + }) + return MaticNativeCurrency +})(sdkCore.NativeCurrency) +var ExtendedEther = /** @class */ (function (_super) { + __extends(ExtendedEther, _super) + function ExtendedEther() { + return (_super !== null && _super.apply(this, arguments)) || this + } + Object.defineProperty(ExtendedEther.prototype, 'wrapped', { + get() { + if (this.chainId in WRAPPED_NATIVE_CURRENCY) return WRAPPED_NATIVE_CURRENCY[this.chainId] + throw new Error('Unsupported chain ID') + }, + enumerable: false, + configurable: true, + }) + ExtendedEther.onChain = function (chainId) { + var _a + return (_a = this._cachedExtendedEther[chainId]) !== null && _a !== void 0 + ? _a + : (this._cachedExtendedEther[chainId] = new ExtendedEther(chainId)) + } + ExtendedEther._cachedExtendedEther = {} + return ExtendedEther +})(sdkCore.Ether) +var cachedNativeCurrency = {} +function nativeOnChain(chainId) { + var _a + return (_a = cachedNativeCurrency[chainId]) !== null && _a !== void 0 + ? _a + : (cachedNativeCurrency[chainId] = isMatic(chainId) + ? new MaticNativeCurrency(chainId) + : ExtendedEther.onChain(chainId)) } -var uImage = "10f062d02df4af77.png"; +// returns null on errors +function useContract(addressOrAddressMap, ABI, withSignerIfPossible) { + if (withSignerIfPossible === void 0) { + withSignerIfPossible = true + } + var _a = useActiveWeb3React(), + library = _a.library, + account = _a.account, + chainId = _a.chainId + return React.useMemo( + function () { + if (!addressOrAddressMap || !ABI || !library || !chainId) return null + var address + if (typeof addressOrAddressMap === 'string') address = addressOrAddressMap + else address = addressOrAddressMap[chainId] + if (!address) return null + try { + return getContract(address, ABI, library, withSignerIfPossible && account ? account : undefined) + } catch (error) { + console.error('Failed to get contract', error) + return null + } + }, + [addressOrAddressMap, ABI, library, chainId, withSignerIfPossible, account] + ) +} +function useTokenContract(tokenAddress, withSignerIfPossible) { + return useContract(tokenAddress, ERC20ABI, withSignerIfPossible) +} +function useWETHContract(withSignerIfPossible) { + var _a + var chainId = useActiveWeb3React().chainId + return useContract( + chainId ? ((_a = WRAPPED_NATIVE_CURRENCY[chainId]) === null || _a === void 0 ? void 0 : _a.address) : undefined, + WETH_ABI, + withSignerIfPossible + ) +} +function useERC721Contract(nftAddress) { + return useContract(nftAddress, ERC721_ABI, false) +} +function useERC1155Contract(nftAddress) { + return useContract(nftAddress, ERC1155_ABI, false) +} +function useArgentWalletDetectorContract() { + return useContract(ARGENT_WALLET_DETECTOR_ADDRESS, ARGENT_WALLET_DETECTOR_ABI, false) +} +function useENSRegistrarContract(withSignerIfPossible) { + return useContract(ENS_REGISTRAR_ADDRESSES, ENS_ABI, withSignerIfPossible) +} +function useENSResolverContract(address, withSignerIfPossible) { + return useContract(address, ENS_PUBLIC_RESOLVER_ABI, withSignerIfPossible) +} +function useBytes32TokenContract(tokenAddress, withSignerIfPossible) { + return useContract(tokenAddress, ERC20_BYTES32_ABI, withSignerIfPossible) +} +function useEIP2612Contract(tokenAddress) { + return useContract(tokenAddress, EIP_2612, false) +} +function useV2RouterContract() { + return useContract(V2_ROUTER_ADDRESS, abi$3, true) +} +function useInterfaceMulticall() { + return useContract(MULTICALL_ADDRESS, abi$1, false) +} +function useMerkleDistributorContract() { + return useContract(MERKLE_DISTRIBUTOR_ADDRESS, abi$5, true) +} +function useV3Quoter() { + return useContract(QUOTER_ADDRESSES, abi$2) +} -var noise = "f158a440053a5ad2.png"; +var _a$e +var multicall = reduxMulticall.createMulticall() +var reducer = redux.combineReducers(((_a$e = {}), (_a$e[multicall.reducerPath] = multicall.reducer), _a$e)) +redux.createStore(reducer) +function MulticallUpdater() { + var latestBlockNumber = useBlockNumber() + var chainId = useActiveWeb3React().chainId + var contract = useInterfaceMulticall() + return jsxRuntime.jsx(multicall.Updater, { chainId, latestBlockNumber, contract }, void 0) +} -var xlUnicorn = "c2cd04251aa24c34.png"; +function useMultipleContractSingleData() { + var _a + var args = [] + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i] + } + var _b = useCallContext(), + chainId = _b.chainId, + latestBlock = _b.latestBlock + return (_a = multicall.hooks).useMultipleContractSingleData.apply( + _a, + __spreadArray([chainId, latestBlock], __read(args), false) + ) +} +function useSingleCallResult() { + var _a + var args = [] + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i] + } + var _b = useCallContext(), + chainId = _b.chainId, + latestBlock = _b.latestBlock + return (_a = multicall.hooks).useSingleCallResult.apply( + _a, + __spreadArray([chainId, latestBlock], __read(args), false) + ) +} +function useSingleContractMultipleData() { + var _a + var args = [] + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i] + } + var _b = useCallContext(), + chainId = _b.chainId, + latestBlock = _b.latestBlock + return (_a = multicall.hooks).useSingleContractMultipleData.apply( + _a, + __spreadArray([chainId, latestBlock], __read(args), false) + ) +} +function useSingleContractWithCallData() { + var _a + var args = [] + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i] + } + var _b = useCallContext(), + chainId = _b.chainId, + latestBlock = _b.latestBlock + return (_a = multicall.hooks).useSingleContractWithCallData.apply( + _a, + __spreadArray([chainId, latestBlock], __read(args), false) + ) +} +function useCallContext() { + var chainId = useActiveWeb3React().chainId + var latestBlock = useBlockNumber() + return { chainId, latestBlock } +} -var DataCard = styled__default["default"](AutoColumn)(templateObject_1$1f || (templateObject_1$1f = __makeTemplateObject(["\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #2172e5 100%);\n border-radius: 12px;\n width: 100%;\n position: relative;\n overflow: hidden;\n"], ["\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #2172e5 100%);\n border-radius: 12px;\n width: 100%;\n position: relative;\n overflow: hidden;\n"]))); -var CardBGImage = styled__default["default"].span(templateObject_2$V || (templateObject_2$V = __makeTemplateObject(["\n background: url(", ");\n width: 1000px;\n height: 600px;\n position: absolute;\n border-radius: 12px;\n opacity: 0.4;\n top: -100px;\n left: -100px;\n transform: rotate(-15deg);\n user-select: none;\n ", "\n"], ["\n background: url(", ");\n width: 1000px;\n height: 600px;\n position: absolute;\n border-radius: 12px;\n opacity: 0.4;\n top: -100px;\n left: -100px;\n transform: rotate(-15deg);\n user-select: none;\n ", "\n"])), uImage, function (_a) { - var desaturate = _a.desaturate; - return desaturate && "filter: saturate(0)"; -}); -var CardBGImageSmaller = styled__default["default"].span(templateObject_3$M || (templateObject_3$M = __makeTemplateObject(["\n background: url(", ");\n width: 1200px;\n height: 1200px;\n position: absolute;\n border-radius: 12px;\n top: -300px;\n left: -300px;\n opacity: 0.4;\n user-select: none;\n\n ", "\n"], ["\n background: url(", ");\n width: 1200px;\n height: 1200px;\n position: absolute;\n border-radius: 12px;\n top: -300px;\n left: -300px;\n opacity: 0.4;\n user-select: none;\n\n ", "\n"])), xlUnicorn, function (_a) { - var desaturate = _a.desaturate; - return desaturate && "filter: saturate(0)"; -}); -var CardNoise = styled__default["default"].span(templateObject_4$B || (templateObject_4$B = __makeTemplateObject(["\n background: url(", ");\n background-size: cover;\n mix-blend-mode: overlay;\n border-radius: 12px;\n width: 100%;\n height: 100%;\n opacity: 0.15;\n position: absolute;\n top: 0;\n left: 0;\n user-select: none;\n"], ["\n background: url(", ");\n background-size: cover;\n mix-blend-mode: overlay;\n border-radius: 12px;\n width: 100%;\n height: 100%;\n opacity: 0.15;\n position: absolute;\n top: 0;\n left: 0;\n user-select: none;\n"])), noise); -var CardSection = styled__default["default"](AutoColumn)(templateObject_5$s || (templateObject_5$s = __makeTemplateObject(["\n padding: 1rem;\n z-index: 1;\n opacity: ", ";\n"], ["\n padding: 1rem;\n z-index: 1;\n opacity: ", ";\n"])), function (_a) { - var disabled = _a.disabled; - return disabled && '0.4'; -}); -var Break$1 = styled__default["default"].div(templateObject_6$m || (templateObject_6$m = __makeTemplateObject(["\n width: 100%;\n background-color: rgba(255, 255, 255, 0.2);\n height: 1px;\n"], ["\n width: 100%;\n background-color: rgba(255, 255, 255, 0.2);\n height: 1px;\n"]))); -var templateObject_1$1f, templateObject_2$V, templateObject_3$M, templateObject_4$B, templateObject_5$s, templateObject_6$m; +function safeNamehash(name) { + if (name === undefined) return undefined + try { + return hash.namehash(name) + } catch (error) { + console.debug(error) + return undefined + } +} -var parser = new uaParserJs.UAParser(window.navigator.userAgent); -var type$1 = parser.getDevice().type; -var userAgent = parser.getResult(); -var isMobile = type$1 === 'mobile' || type$1 === 'tablet'; +/** + * Returns true if the string value is zero in hex + * @param hexNumberString + */ +function isZero(hexNumberString) { + return /^0x0*$/.test(hexNumberString) +} -var AnimatedDialogOverlay = reactSpring.animated(dialog.DialogOverlay); -// eslint-disable-next-line @typescript-eslint/no-unused-vars -var StyledDialogOverlay = styled__default["default"](AnimatedDialogOverlay)(templateObject_1$1e || (templateObject_1$1e = __makeTemplateObject(["\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: ", ";\n }\n"], ["\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: ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.modalBG; -}); -var AnimatedDialogContent = reactSpring.animated(dialog.DialogContent); -// destructure to not pass custom props to Dialog DOM element -// eslint-disable-next-line @typescript-eslint/no-unused-vars -var StyledDialogContent = styled__default["default"](function (_a) { - _a.minHeight; _a.maxHeight; _a.mobile; _a.isOpen; var rest = __rest(_a, ["minHeight", "maxHeight", "mobile", "isOpen"]); - return (jsxRuntime.jsx(AnimatedDialogContent, __assign({}, rest), void 0)); -}).attrs({ - 'aria-label': 'dialog', -})(templateObject_7$i || (templateObject_7$i = __makeTemplateObject(["\n overflow-y: auto;\n\n &[data-reach-dialog-content] {\n margin: 0 0 2rem 0;\n background-color: ", ";\n border: 1px solid ", ";\n box-shadow: 0 4px 8px 0 ", ";\n padding: 0px;\n width: 50vw;\n overflow-y: auto;\n overflow-x: hidden;\n\n align-self: ", ";\n\n max-width: 420px;\n ", "\n ", "\n display: flex;\n border-radius: 20px;\n ", "\n ", "\n }\n"], ["\n overflow-y: auto;\n\n &[data-reach-dialog-content] {\n margin: 0 0 2rem 0;\n background-color: ", ";\n border: 1px solid ", ";\n box-shadow: 0 4px 8px 0 ", ";\n padding: 0px;\n width: 50vw;\n overflow-y: auto;\n overflow-x: hidden;\n\n align-self: ", ";\n\n max-width: 420px;\n ", "\n ", "\n display: flex;\n border-radius: 20px;\n ", "\n ", "\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.bg0; -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var theme = _a.theme; - return polished.transparentize(0.95, theme.shadow1); -}, function (_a) { - var mobile = _a.mobile; - return (mobile ? 'flex-end' : 'center'); -}, function (_a) { - var maxHeight = _a.maxHeight; - return maxHeight && styled.css(templateObject_2$U || (templateObject_2$U = __makeTemplateObject(["\n max-height: ", "vh;\n "], ["\n max-height: ", "vh;\n "])), maxHeight); -}, function (_a) { - var minHeight = _a.minHeight; - return minHeight && styled.css(templateObject_3$L || (templateObject_3$L = __makeTemplateObject(["\n min-height: ", "vh;\n "], ["\n min-height: ", "vh;\n "])), minHeight); -}, function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToMedium(templateObject_4$A || (templateObject_4$A = __makeTemplateObject(["\n width: 65vw;\n margin: 0;\n "], ["\n width: 65vw;\n margin: 0;\n "]))); -}, function (_a) { - var theme = _a.theme, mobile = _a.mobile; - return theme.mediaWidth.upToSmall(templateObject_6$l || (templateObject_6$l = __makeTemplateObject(["\n width: 85vw;\n ", "\n "], ["\n width: 85vw;\n ", "\n "])), mobile && styled.css(templateObject_5$r || (templateObject_5$r = __makeTemplateObject(["\n width: 100vw;\n border-radius: 20px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n "], ["\n width: 100vw;\n border-radius: 20px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n "])))); -}); -function Modal(_a) { - var isOpen = _a.isOpen, onDismiss = _a.onDismiss, _b = _a.minHeight, minHeight = _b === void 0 ? false : _b, _c = _a.maxHeight, maxHeight = _c === void 0 ? 90 : _c, initialFocusRef = _a.initialFocusRef, children = _a.children; - var fadeTransition = reactSpring.useTransition(isOpen, null, { - config: { duration: 200 }, - from: { opacity: 0 }, - enter: { opacity: 1 }, - leave: { opacity: 0 }, - }); - var _d = __read(reactSpring.useSpring(function () { return ({ y: 0, config: { mass: 1, tension: 210, friction: 20 } }); }), 2), y = _d[0].y, set = _d[1]; - var bind = reactUseGesture.useGesture({ - onDrag: function (state) { - set({ - y: state.down ? state.movement[1] : 0, - }); - if (state.movement[1] > 300 || (state.velocity > 3 && state.direction[1] > 0)) { - onDismiss(); - } - }, - }); - return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: fadeTransition.map(function (_a) { - var item = _a.item, key = _a.key, props = _a.props; - return item && (jsxRuntime.jsx(StyledDialogOverlay, __assign({ style: props, onDismiss: onDismiss, initialFocusRef: initialFocusRef, unstable_lockFocusAcrossFrames: false }, { children: jsxRuntime.jsxs(StyledDialogContent, __assign({}, (isMobile - ? __assign(__assign({}, bind()), { style: { transform: y.interpolate(function (y) { return "translateY(" + (y > 0 ? y : 0) + "px)"; }) } }) : {}), { "aria-label": "dialog content", minHeight: minHeight, maxHeight: maxHeight, mobile: isMobile }, { children: [!initialFocusRef && isMobile ? jsxRuntime.jsx("div", { tabIndex: 1 }, void 0) : null, children] }), void 0) }), key)); - }) }, void 0)); -} -var templateObject_1$1e, templateObject_2$U, templateObject_3$L, templateObject_4$A, templateObject_5$r, templateObject_6$l, templateObject_7$i; - -var ContentWrapper$4 = styled__default["default"](AutoColumn)(templateObject_1$1d || (templateObject_1$1d = __makeTemplateObject(["\n width: 100%;\n"], ["\n width: 100%;\n"]))); -var ModalUpper$1 = styled__default["default"](DataCard)(templateObject_2$T || (templateObject_2$T = __makeTemplateObject(["\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n"], ["\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n"]))); -var ConfirmOrLoadingWrapper$1 = styled__default["default"].div(templateObject_3$K || (templateObject_3$K = __makeTemplateObject(["\n width: 100%;\n padding: 24px;\n position: relative;\n background: ", ";\n"], ["\n width: 100%;\n padding: 24px;\n position: relative;\n background: ", ";\n"])), function (_a) { - var activeBG = _a.activeBG; - return activeBG && - 'radial-gradient(76.02% 75.41% at 1.84% 0%, rgba(255, 0, 122, 0.2) 0%, rgba(33, 114, 229, 0.2) 100%), #FFFFFF;'; -}); -var ConfirmedIcon$2 = styled__default["default"](ColumnCenter)(templateObject_4$z || (templateObject_4$z = __makeTemplateObject(["\n padding: 60px 0;\n"], ["\n padding: 60px 0;\n"]))); -function AddressClaimModal(_a) { - var _b, _c; - var isOpen = _a.isOpen, onDismiss = _a.onDismiss; - var chainId = useActiveWeb3React().chainId; - // state for smart contract input - var _d = __read(React.useState(''), 2), typed = _d[0], setTyped = _d[1]; - function handleRecipientType(val) { - setTyped(val); - } - // monitor for third party recipient of claim - var parsedAddress = useENS(typed).address; - // used for UI loading states - var _e = __read(React.useState(false), 2), attempting = _e[0], setAttempting = _e[1]; - // monitor the status of the claim from contracts and txns - var claimCallback = useClaimCallback(parsedAddress).claimCallback; - var unclaimedAmount = useUserUnclaimedAmount(parsedAddress); - // check if the user has something available - var hasAvailableClaim = useUserHasAvailableClaim(parsedAddress); - var _f = __read(React.useState(), 2), hash = _f[0], setHash = _f[1]; - // monitor the status of the claim from contracts and txns - var claimPending = useIsTransactionPending(hash !== null && hash !== void 0 ? hash : ''); - var claimConfirmed = hash && !claimPending; - // use the hash to monitor this txn - function onClaim() { - setAttempting(true); - claimCallback() - .then(function (hash) { - setHash(hash); - }) - // reset modal and log error - .catch(function (error) { - setAttempting(false); - console.log(error); - }); - } - function wrappedOnDismiss() { - setAttempting(false); - setHash(undefined); - setTyped(''); - onDismiss(); - } - return (jsxRuntime.jsxs(Modal, __assign({ isOpen: isOpen, onDismiss: wrappedOnDismiss, maxHeight: 90 }, { children: [jsxRuntime.jsx(Confetti, { start: Boolean(isOpen && claimConfirmed && attempting) }, void 0), !attempting && (jsxRuntime.jsxs(ContentWrapper$4, __assign({ gap: "lg" }, { children: [jsxRuntime.jsxs(ModalUpper$1, { children: [jsxRuntime.jsx(CardBGImage, {}, void 0), jsxRuntime.jsx(CardNoise, {}, void 0), jsxRuntime.jsxs(CardSection, __assign({ gap: "md" }, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(ThemedText.White, __assign({ fontWeight: 500 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Claim UNI Token" }, void 0) }), void 0), jsxRuntime.jsx(CloseIcon$2, { onClick: wrappedOnDismiss, style: { zIndex: 99 }, stroke: "white" }, void 0)] }, void 0), jsxRuntime.jsx(ThemedText.White, __assign({ fontWeight: 700, fontSize: 36 }, { children: jsxRuntime.jsxs(macro.Trans, { children: [unclaimedAmount === null || unclaimedAmount === void 0 ? void 0 : unclaimedAmount.toFixed(0, (_b = { groupSeparator: ',' }) !== null && _b !== void 0 ? _b : '-'), " UNI"] }, void 0) }), void 0)] }), void 0), jsxRuntime.jsx(Break$1, {}, void 0)] }, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "md", style: { padding: '1rem', paddingTop: '0' }, justify: "center" }, { children: [jsxRuntime.jsx(ThemedText.SubHeader, __assign({ fontWeight: 500 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission." }, void 0) }), void 0), jsxRuntime.jsx(AddressInputPanel, { value: typed, onChange: handleRecipientType }, void 0), parsedAddress && !hasAvailableClaim && (jsxRuntime.jsx(ThemedText.Error, __assign({ error: true }, { children: jsxRuntime.jsx(macro.Trans, { children: "Address has no available claim" }, void 0) }), void 0)), jsxRuntime.jsx(ButtonPrimary, __assign({ disabled: !address.isAddress(parsedAddress !== null && parsedAddress !== void 0 ? parsedAddress : '') || !hasAvailableClaim, padding: "16px 16px", width: "100%", "$borderRadius": "12px", mt: "1rem", onClick: onClaim }, { children: jsxRuntime.jsx(macro.Trans, { children: "Claim UNI" }, void 0) }), void 0)] }), void 0)] }), void 0)), (attempting || claimConfirmed) && (jsxRuntime.jsxs(ConfirmOrLoadingWrapper$1, __assign({ activeBG: true }, { children: [jsxRuntime.jsx(CardNoise, {}, void 0), jsxRuntime.jsx(CardBGImageSmaller, { desaturate: true }, void 0), jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx("div", {}, void 0), jsxRuntime.jsx(CloseIcon$2, { onClick: wrappedOnDismiss, style: { zIndex: 99 }, stroke: "black" }, void 0)] }, void 0), jsxRuntime.jsx(ConfirmedIcon$2, { children: !claimConfirmed ? (jsxRuntime.jsx(CustomLightSpinner, { src: Circle$1, alt: "loader", size: '90px' }, void 0)) : (jsxRuntime.jsx(UniTokenAnimated, { width: "72px", src: tokenLogo, alt: "UNI logo" }, void 0)) }, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "100px", justify: 'center' }, { children: [jsxRuntime.jsxs(AutoColumn, __assign({ gap: "12px", justify: 'center' }, { children: [jsxRuntime.jsx(ThemedText.LargeHeader, __assign({ fontWeight: 600, color: "black" }, { children: claimConfirmed ? jsxRuntime.jsx(macro.Trans, { children: "Claimed" }, void 0) : jsxRuntime.jsx(macro.Trans, { children: "Claiming" }, void 0) }), void 0), !claimConfirmed && (jsxRuntime.jsx(rebass.Text, __assign({ fontSize: 36, color: '#ff007a', fontWeight: 800 }, { children: jsxRuntime.jsxs(macro.Trans, { children: [unclaimedAmount === null || unclaimedAmount === void 0 ? void 0 : unclaimedAmount.toFixed(0, (_c = { groupSeparator: ',' }) !== null && _c !== void 0 ? _c : '-'), " UNI"] }, void 0) }), void 0)), parsedAddress && (jsxRuntime.jsx(ThemedText.LargeHeader, __assign({ fontWeight: 600, color: "black" }, { children: jsxRuntime.jsxs(macro.Trans, { children: ["for ", shortenAddress(parsedAddress)] }, void 0) }), void 0))] }), void 0), claimConfirmed && (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs(ThemedText.SubHeader, __assign({ fontWeight: 500, color: "black" }, { children: [jsxRuntime.jsxs("span", __assign({ role: "img", "aria-label": "party-hat" }, { children: ["\uD83C\uDF89", ' '] }), void 0), jsxRuntime.jsx(macro.Trans, { children: "Welcome to team Unicorn :) " }, void 0), jsxRuntime.jsx("span", __assign({ role: "img", "aria-label": "party-hat" }, { children: "\uD83C\uDF89" }), void 0)] }), void 0) }, void 0)), attempting && !hash && (jsxRuntime.jsx(ThemedText.SubHeader, __assign({ color: "black" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Confirm this transaction in your wallet" }, void 0) }), void 0)), attempting && hash && !claimConfirmed && chainId && hash && (jsxRuntime.jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, hash, ExplorerDataType.TRANSACTION), style: { zIndex: 99 } }, { children: jsxRuntime.jsx(macro.Trans, { children: "View transaction on Explorer" }, void 0) }), void 0))] }), void 0)] }), void 0))] }), void 0)); -} -var templateObject_1$1d, templateObject_2$T, templateObject_3$K, templateObject_4$z; - -var _a$a; -var ApplicationModal; -(function (ApplicationModal) { - ApplicationModal[ApplicationModal["WALLET"] = 0] = "WALLET"; - ApplicationModal[ApplicationModal["SETTINGS"] = 1] = "SETTINGS"; - ApplicationModal[ApplicationModal["SELF_CLAIM"] = 2] = "SELF_CLAIM"; - ApplicationModal[ApplicationModal["ADDRESS_CLAIM"] = 3] = "ADDRESS_CLAIM"; - ApplicationModal[ApplicationModal["CLAIM_POPUP"] = 4] = "CLAIM_POPUP"; - ApplicationModal[ApplicationModal["MENU"] = 5] = "MENU"; - ApplicationModal[ApplicationModal["DELEGATE"] = 6] = "DELEGATE"; - ApplicationModal[ApplicationModal["VOTE"] = 7] = "VOTE"; - ApplicationModal[ApplicationModal["POOL_OVERVIEW_OPTIONS"] = 8] = "POOL_OVERVIEW_OPTIONS"; - ApplicationModal[ApplicationModal["NETWORK_SELECTOR"] = 9] = "NETWORK_SELECTOR"; - ApplicationModal[ApplicationModal["PRIVACY_POLICY"] = 10] = "PRIVACY_POLICY"; -})(ApplicationModal || (ApplicationModal = {})); -var initialState$8 = { - chainId: null, - openModal: null, - popupList: [], -}; -var applicationSlice = toolkit.createSlice({ - name: 'application', - initialState: initialState$8, - reducers: { - updateChainId: function (state, action) { - var chainId = action.payload.chainId; - state.chainId = chainId; - }, - setOpenModal: function (state, action) { - state.openModal = action.payload; - }, - addPopup: function (state, _a) { - var _b = _a.payload, content = _b.content, key = _b.key, _c = _b.removeAfterMs, removeAfterMs = _c === void 0 ? DEFAULT_TXN_DISMISS_MS : _c; - state.popupList = (key ? state.popupList.filter(function (popup) { return popup.key !== key; }) : state.popupList).concat([ - { - key: key || toolkit.nanoid(), - show: true, - content: content, - removeAfterMs: removeAfterMs, - }, - ]); - }, - removePopup: function (state, _a) { - var key = _a.payload.key; - state.popupList.forEach(function (p) { - if (p.key === key) { - p.show = false; - } - }); - }, - }, -}); -var updateChainId = (_a$a = applicationSlice.actions, _a$a.updateChainId), setOpenModal = _a$a.setOpenModal, addPopup = _a$a.addPopup, removePopup = _a$a.removePopup; -var application = applicationSlice.reducer; - -var Field$3; -(function (Field) { - Field["LIQUIDITY_PERCENT"] = "LIQUIDITY_PERCENT"; - Field["LIQUIDITY"] = "LIQUIDITY"; - Field["CURRENCY_A"] = "CURRENCY_A"; - Field["CURRENCY_B"] = "CURRENCY_B"; -})(Field$3 || (Field$3 = {})); -var typeInput$3 = toolkit.createAction('burn/typeInputBurn'); - -var initialState$7 = { - independentField: Field$3.LIQUIDITY_PERCENT, - typedValue: '0', -}; -var burn = toolkit.createReducer(initialState$7, function (builder) { - return builder.addCase(typeInput$3, function (state, _a) { - var _b = _a.payload, field = _b.field, typedValue = _b.typedValue; - return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); - }); -}); +/** + * Does a lookup for an ENS name to find its address. + */ +function useENSAddress(ensName) { + var _a + var debouncedName = useDebounce(ensName, 200) + var ensNodeArgument = React.useMemo( + function () { + return [debouncedName === null ? undefined : safeNamehash(debouncedName)] + }, + [debouncedName] + ) + var registrarContract = useENSRegistrarContract(false) + var resolverAddress = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument) + var resolverAddressResult = (_a = resolverAddress.result) === null || _a === void 0 ? void 0 : _a[0] + var resolverContract = useENSResolverContract( + resolverAddressResult && !isZero(resolverAddressResult) ? resolverAddressResult : undefined, + false + ) + var addr = useSingleCallResult(resolverContract, 'addr', ensNodeArgument) + var changed = debouncedName !== ensName + return React.useMemo( + function () { + var _a, _b + return { + address: changed + ? null + : (_b = (_a = addr.result) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 + ? _b + : null, + loading: changed || resolverAddress.loading || addr.loading, + } + }, + [addr.loading, addr.result, changed, resolverAddress.loading] + ) +} + +/** + * Does a reverse lookup for an address to find its ENS name. + * Note this is not the same as looking up an ENS name to find an address. + */ +function useENSName(address) { + var _a, _b + var debouncedAddress = useDebounce(address, 200) + var ensNodeArgument = React.useMemo( + function () { + if (!debouncedAddress || !isAddress(debouncedAddress)) return [undefined] + return [hash.namehash(debouncedAddress.toLowerCase().substr(2) + '.addr.reverse')] + }, + [debouncedAddress] + ) + var registrarContract = useENSRegistrarContract(false) + var resolverAddress = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument) + var resolverAddressResult = (_a = resolverAddress.result) === null || _a === void 0 ? void 0 : _a[0] + var resolverContract = useENSResolverContract( + resolverAddressResult && !isZero(resolverAddressResult) ? resolverAddressResult : undefined, + false + ) + var nameCallRes = useSingleCallResult(resolverContract, 'name', ensNodeArgument) + var name = (_b = nameCallRes.result) === null || _b === void 0 ? void 0 : _b[0] + /* ENS does not enforce that an address owns a .eth domain before setting it as a reverse proxy + and recommends that you perform a match on the forward resolution + see: https://docs.ens.domains/dapp-developer-guide/resolving-names#reverse-resolution + */ + var fwdAddr = useENSAddress(name) + var checkedName = address === (fwdAddr === null || fwdAddr === void 0 ? void 0 : fwdAddr.address) ? name : null + var changed = debouncedAddress !== address + return React.useMemo( + function () { + return { + ENSName: changed ? null : checkedName, + loading: changed || resolverAddress.loading || nameCallRes.loading, + } + }, + [changed, nameCallRes.loading, checkedName, resolverAddress.loading] + ) +} -var selectPercent = toolkit.createAction('burnV3/selectBurnPercent'); +/** + * Given a name or address, does a lookup to resolve to an address and name + * @param nameOrAddress ENS name or address + */ +function useENS(nameOrAddress) { + var validated = isAddress(nameOrAddress) + var reverseLookup = useENSName(validated ? validated : undefined) + var lookup = useENSAddress(nameOrAddress) + return React.useMemo( + function () { + return { + loading: reverseLookup.loading || lookup.loading, + address: validated ? validated : lookup.address, + name: reverseLookup.ENSName + ? reverseLookup.ENSName + : !validated && lookup.address + ? nameOrAddress || null + : null, + } + }, + [lookup.address, lookup.loading, nameOrAddress, reverseLookup.ENSName, reverseLookup.loading, validated] + ) +} -var initialState$6 = { - percent: 0, -}; -var burnV3 = toolkit.createReducer(initialState$6, function (builder) { - return builder.addCase(selectPercent, function (state, _a) { - var percent = _a.payload.percent; - return __assign(__assign({}, state), { percent: percent }); - }); -}); +/** + * Returns the gas value plus a margin for unexpected or variable gas costs + * @param value the gas value to pad + */ +function calculateGasMargin(value) { + return value.mul(120).div(100) +} + +/** + * Be careful adding to this enum, always assign a unique value (typescript will not prevent duplicate values). + * These values is persisted in state and if you change the value it will cause errors + */ +var TransactionType +;(function (TransactionType) { + TransactionType[(TransactionType['APPROVAL'] = 0)] = 'APPROVAL' + TransactionType[(TransactionType['SWAP'] = 1)] = 'SWAP' + TransactionType[(TransactionType['DEPOSIT_LIQUIDITY_STAKING'] = 2)] = 'DEPOSIT_LIQUIDITY_STAKING' + TransactionType[(TransactionType['WITHDRAW_LIQUIDITY_STAKING'] = 3)] = 'WITHDRAW_LIQUIDITY_STAKING' + TransactionType[(TransactionType['CLAIM'] = 4)] = 'CLAIM' + TransactionType[(TransactionType['VOTE'] = 5)] = 'VOTE' + TransactionType[(TransactionType['DELEGATE'] = 6)] = 'DELEGATE' + TransactionType[(TransactionType['WRAP'] = 7)] = 'WRAP' + TransactionType[(TransactionType['CREATE_V3_POOL'] = 8)] = 'CREATE_V3_POOL' + TransactionType[(TransactionType['ADD_LIQUIDITY_V3_POOL'] = 9)] = 'ADD_LIQUIDITY_V3_POOL' + TransactionType[(TransactionType['ADD_LIQUIDITY_V2_POOL'] = 10)] = 'ADD_LIQUIDITY_V2_POOL' + TransactionType[(TransactionType['MIGRATE_LIQUIDITY_V3'] = 11)] = 'MIGRATE_LIQUIDITY_V3' + TransactionType[(TransactionType['COLLECT_FEES'] = 12)] = 'COLLECT_FEES' + TransactionType[(TransactionType['REMOVE_LIQUIDITY_V3'] = 13)] = 'REMOVE_LIQUIDITY_V3' + TransactionType[(TransactionType['SUBMIT_PROPOSAL'] = 14)] = 'SUBMIT_PROPOSAL' +})(TransactionType || (TransactionType = {})) +var addTransaction = toolkit.createAction('transactions/addTransaction') +var clearAllTransactions = toolkit.createAction('transactions/clearAllTransactions') +var finalizeTransaction = toolkit.createAction('transactions/finalizeTransaction') +var checkedTransaction = toolkit.createAction('transactions/checkedTransaction') + +var SUPPORTED_TRANSACTION_TYPES = [ + TransactionType.ADD_LIQUIDITY_V2_POOL, + TransactionType.ADD_LIQUIDITY_V3_POOL, + TransactionType.CREATE_V3_POOL, + TransactionType.REMOVE_LIQUIDITY_V3, + TransactionType.SWAP, +] +var FIREBASE_API_KEY = process.env.REACT_APP_FIREBASE_KEY +var firebaseEnabled = typeof FIREBASE_API_KEY !== 'undefined' +if (firebaseEnabled) initializeFirebase() +function useMonitoringEventCallback() { + var chainId = useActiveWeb3React().chainId + return React.useCallback( + function log(type, _a) { + var transactionResponse = _a.transactionResponse, + walletAddress = _a.walletAddress + return __awaiter(this, void 0, void 0, function () { + var db + return __generator(this, function (_b) { + if (!firebaseEnabled) return [2 /*return*/] + db = database.getDatabase() + if (!walletAddress) { + console.debug('Wallet address required to log monitoring events.') + return [2 /*return*/] + } + try { + database.push(database.ref(db, 'trm'), { + chainId, + origin: window.location.origin, + timestamp: Date.now(), + tx: transactionResponse, + type, + walletAddress, + }) + } catch (e) { + console.debug('Error adding document: ', e) + } + return [2 /*return*/] + }) + }) + }, + [chainId] + ) +} +function useTransactionMonitoringEventCallback() { + var account = useActiveWeb3React().account + var log = useMonitoringEventCallback() + return React.useCallback( + function (info, transactionResponse) { + if (SUPPORTED_TRANSACTION_TYPES.includes(info.type)) { + log(TransactionType[info.type], { + transactionResponse: (function (_a) { + var hash = _a.hash, + v = _a.v, + r = _a.r, + s = _a.s + return { hash, v, r, s } + })(transactionResponse), + walletAddress: account !== null && account !== void 0 ? account : undefined, + }) + } + }, + [account, log] + ) +} +function useWalletConnectMonitoringEventCallback() { + var log = useMonitoringEventCallback() + return React.useCallback( + function (walletAddress) { + log('WALLET_CONNECTED', { transactionResponse: { hash: '', r: '', s: '', v: -1 }, walletAddress }) + }, + [log] + ) +} +function initializeFirebase() { + app.initializeApp({ + apiKey: process.env.REACT_APP_FIREBASE_KEY, + authDomain: 'interface-monitoring.firebaseapp.com', + databaseURL: 'https://interface-monitoring-default-rtdb.firebaseio.com', + projectId: 'interface-monitoring', + storageBucket: 'interface-monitoring.appspot.com', + messagingSenderId: '968187720053', + appId: '1:968187720053:web:acedf72dce629d470be33c', + }) +} + +// helper that can take a ethers library transaction response and add it to the list of transactions +function useTransactionAdder() { + var _a = useActiveWeb3React(), + chainId = _a.chainId, + account = _a.account + var dispatch = useAppDispatch() + var logMonitoringEvent = useTransactionMonitoringEventCallback() + return React.useCallback( + function (response, info) { + if (!account) return + if (!chainId) return + var hash = response.hash + if (!hash) { + throw Error('No transaction hash found.') + } + dispatch(addTransaction({ hash, from: account, info, chainId })) + logMonitoringEvent(info, response) + }, + [account, chainId, dispatch, logMonitoringEvent] + ) +} +// returns all the transactions for the current chain +function useAllTransactions() { + var _a + var chainId = useActiveWeb3React().chainId + var state = useAppSelector(function (state) { + return state.transactions + }) + return chainId ? ((_a = state[chainId]) !== null && _a !== void 0 ? _a : {}) : {} +} +function useTransaction(transactionHash) { + var allTransactions = useAllTransactions() + if (!transactionHash) { + return undefined + } + return allTransactions[transactionHash] +} +function useIsTransactionPending(transactionHash) { + var transactions = useAllTransactions() + if (!transactionHash || !transactions[transactionHash]) return false + return !transactions[transactionHash].receipt +} +function useIsTransactionConfirmed(transactionHash) { + var transactions = useAllTransactions() + if (!transactionHash || !transactions[transactionHash]) return false + return Boolean(transactions[transactionHash].receipt) +} +/** + * Returns whether a transaction happened in the last day (86400 seconds * 1000 milliseconds / second) + * @param tx to check for recency + */ +function isTransactionRecent(tx) { + return new Date().getTime() - tx.addedTime < 86400000 +} +// returns whether a token has a pending approval transaction +function useHasPendingApproval(token, spender) { + var allTransactions = useAllTransactions() + return React.useMemo( + function () { + return ( + typeof (token === null || token === void 0 ? void 0 : token.address) === 'string' && + typeof spender === 'string' && + Object.keys(allTransactions).some(function (hash) { + var tx = allTransactions[hash] + if (!tx) return false + if (tx.receipt) { + return false + } else { + if (tx.info.type !== TransactionType.APPROVAL) return false + return tx.info.spender === spender && tx.info.tokenAddress === token.address && isTransactionRecent(tx) + } + }) + ) + }, + [allTransactions, spender, token === null || token === void 0 ? void 0 : token.address] + ) +} +// watch for submissions to claim +// return null if not done loading, return undefined if not found +function useUserHasSubmittedClaim(account) { + var allTransactions = useAllTransactions() + // get the txn if it has been submitted + var claimTxn = React.useMemo( + function () { + var txnIndex = Object.keys(allTransactions).find(function (hash) { + var tx = allTransactions[hash] + return tx.info.type === TransactionType.CLAIM && tx.info.recipient === account + }) + return txnIndex && allTransactions[txnIndex] ? allTransactions[txnIndex] : undefined + }, + [account, allTransactions] + ) + return { claimSubmitted: Boolean(claimTxn), claimTxn } +} + +var FETCH_CLAIM_MAPPING_PROMISE = null +function fetchClaimMapping() { + return FETCH_CLAIM_MAPPING_PROMISE !== null && FETCH_CLAIM_MAPPING_PROMISE !== void 0 + ? FETCH_CLAIM_MAPPING_PROMISE + : (FETCH_CLAIM_MAPPING_PROMISE = fetch( + 'https://raw.githubusercontent.com/Uniswap/mrkl-drop-data-chunks/final/chunks/mapping.json' + ) + .then(function (res) { + return res.json() + }) + .catch(function (error) { + console.error('Failed to get claims mapping', error) + FETCH_CLAIM_MAPPING_PROMISE = null + })) +} +var FETCH_CLAIM_FILE_PROMISES = {} +function fetchClaimFile(key) { + var _a + return (_a = FETCH_CLAIM_FILE_PROMISES[key]) !== null && _a !== void 0 + ? _a + : (FETCH_CLAIM_FILE_PROMISES[key] = fetch( + 'https://raw.githubusercontent.com/Uniswap/mrkl-drop-data-chunks/final/chunks/' + key + '.json' + ) + .then(function (res) { + return res.json() + }) + .catch(function (error) { + console.error('Failed to get claim file mapping for starting address ' + key, error) + delete FETCH_CLAIM_FILE_PROMISES[key] + })) +} +var FETCH_CLAIM_PROMISES = {} +// returns the claim for the given address, or null if not valid +function fetchClaim(account) { + var _a + var formatted = isAddress(account) + if (!formatted) return Promise.reject(new Error('Invalid address')) + return (_a = FETCH_CLAIM_PROMISES[account]) !== null && _a !== void 0 + ? _a + : (FETCH_CLAIM_PROMISES[account] = fetchClaimMapping() + .then(function (mapping) { + var e_1, _a + var sorted = Object.keys(mapping).sort(function (a, b) { + return a.toLowerCase() < b.toLowerCase() ? -1 : 1 + }) + try { + for ( + var sorted_1 = __values(sorted), sorted_1_1 = sorted_1.next(); + !sorted_1_1.done; + sorted_1_1 = sorted_1.next() + ) { + var startingAddress = sorted_1_1.value + var lastAddress = mapping[startingAddress] + if (startingAddress.toLowerCase() <= formatted.toLowerCase()) { + if (formatted.toLowerCase() <= lastAddress.toLowerCase()) { + return startingAddress + } + } else { + throw new Error('Claim for ' + formatted + ' was not found in partial search') + } + } + } catch (e_1_1) { + e_1 = { error: e_1_1 } + } finally { + try { + if (sorted_1_1 && !sorted_1_1.done && (_a = sorted_1.return)) _a.call(sorted_1) + } finally { + if (e_1) throw e_1.error + } + } + throw new Error('Claim for ' + formatted + ' was not found after searching all mappings') + }) + .then(fetchClaimFile) + .then(function (result) { + if (result[formatted]) return result[formatted] + throw new Error('Claim for ' + formatted + ' was not found in claim file!') + }) + .catch(function (error) { + console.debug('Claim fetch failed', error) + throw error + })) +} +// parse distributorContract blob and detect if user has claim data +// null means we know it does not +function useUserClaimData(account) { + var chainId = useActiveWeb3React().chainId + var _a = __read(React.useState({}), 2), + claimInfo = _a[0], + setClaimInfo = _a[1] + React.useEffect( + function () { + if (!account || chainId !== 1) return + fetchClaim(account) + .then(function (accountClaimInfo) { + return setClaimInfo(function (claimInfo) { + var _a + return __assign(__assign({}, claimInfo), ((_a = {}), (_a[account] = accountClaimInfo), _a)) + }) + }) + .catch(function () { + setClaimInfo(function (claimInfo) { + var _a + return __assign(__assign({}, claimInfo), ((_a = {}), (_a[account] = null), _a)) + }) + }) + }, + [account, chainId] + ) + return account && chainId === 1 ? claimInfo[account] : null +} +// check if user is in blob and has not yet claimed UNI +function useUserHasAvailableClaim(account) { + var _a + var userClaimData = useUserClaimData(account) + var distributorContract = useMerkleDistributorContract() + var isClaimedResult = useSingleCallResult(distributorContract, 'isClaimed', [ + userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.index, + ]) + // user is in blob and contract marks as unclaimed + return Boolean( + userClaimData && + !isClaimedResult.loading && + ((_a = isClaimedResult.result) === null || _a === void 0 ? void 0 : _a[0]) === false + ) +} +function useUserUnclaimedAmount(account) { + var chainId = useActiveWeb3React().chainId + var userClaimData = useUserClaimData(account) + var canClaim = useUserHasAvailableClaim(account) + var uni = chainId ? UNI[chainId] : undefined + if (!uni) return undefined + if (!canClaim || !userClaimData) { + return sdkCore.CurrencyAmount.fromRawAmount(uni, JSBI__default['default'].BigInt(0)) + } + return sdkCore.CurrencyAmount.fromRawAmount(uni, JSBI__default['default'].BigInt(userClaimData.amount)) +} +function useClaimCallback(account) { + // get claim data for this account + var _a = useActiveWeb3React(), + library = _a.library, + chainId = _a.chainId + var claimData = useUserClaimData(account) + // used for popup summary + var unclaimedAmount = useUserUnclaimedAmount(account) + var addTransaction = useTransactionAdder() + var distributorContract = useMerkleDistributorContract() + var claimCallback = function () { + return __awaiter(this, void 0, void 0, function () { + var args + var _a + return __generator(this, function (_b) { + if (!claimData || !account || !library || !chainId || !distributorContract) return [2 /*return*/] + args = [claimData.index, account, claimData.amount, claimData.proof] + return [ + 2 /*return*/, + (_a = distributorContract.estimateGas)['claim'] + .apply(_a, __spreadArray(__spreadArray([], __read(args), false), [{}], false)) + .then(function (estimatedGasLimit) { + return distributorContract.claim + .apply( + distributorContract, + __spreadArray( + __spreadArray([], __read(args), false), + [{ value: null, gasLimit: calculateGasMargin(estimatedGasLimit) }], + false + ) + ) + .then(function (response) { + addTransaction(response, { + type: TransactionType.CLAIM, + recipient: account, + uniAmountRaw: + unclaimedAmount === null || unclaimedAmount === void 0 + ? void 0 + : unclaimedAmount.quotient.toString(), + }) + return response.hash + }) + }), + ] + }) + }) + } + return { claimCallback } +} + +var _a$d, _b$4, _c$3, _d$2, _e$1, _f, _g, _h +var WRAPPED_NATIVE_CURRENCIES_ONLY = Object.fromEntries( + Object.entries(WRAPPED_NATIVE_CURRENCY).map(function (_a) { + var _b = __read(_a, 2), + key = _b[0], + value = _b[1] + return [key, [value]] + }) +) +// used to construct intermediary pairs for trading +var BASES_TO_CHECK_TRADES_AGAINST = __assign( + __assign({}, WRAPPED_NATIVE_CURRENCIES_ONLY), + ((_a$d = {}), + (_a$d[SupportedChainId.MAINNET] = __spreadArray( + __spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.MAINNET]), false), + [DAI, USDC, USDT, WBTC], + false + )), + (_a$d[SupportedChainId.OPTIMISM] = __spreadArray( + __spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.OPTIMISM]), false), + [DAI_OPTIMISM, USDT_OPTIMISM, WBTC_OPTIMISM], + false + )), + (_a$d[SupportedChainId.ARBITRUM_ONE] = __spreadArray( + __spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.ARBITRUM_ONE]), false), + [DAI_ARBITRUM_ONE, USDT_ARBITRUM_ONE, WBTC_ARBITRUM_ONE], + false + )), + (_a$d[SupportedChainId.POLYGON] = __spreadArray( + __spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.POLYGON]), false), + [DAI_POLYGON, USDC_POLYGON, USDT_POLYGON, WETH_POLYGON], + false + )), + _a$d) +) +var ADDITIONAL_BASES = + ((_b$4 = {}), + (_b$4[SupportedChainId.MAINNET] = + ((_c$3 = { + '0xF16E4d813f4DcfDe4c5b44f305c908742De84eF0': [ETH2X_FLI], + }), + (_c$3[rETH2.address] = [sETH2]), + (_c$3[SWISE.address] = [sETH2]), + (_c$3[FEI.address] = [TRIBE]), + (_c$3[TRIBE.address] = [FEI]), + (_c$3[FRAX.address] = [FXS]), + (_c$3[FXS.address] = [FRAX]), + (_c$3[WBTC.address] = [renBTC]), + (_c$3[renBTC.address] = [WBTC]), + _c$3)), + _b$4) +/** + * Some tokens can only be swapped via certain pairs, so we override the list of bases that are considered for these + * tokens. + */ +var CUSTOM_BASES = + ((_d$2 = {}), + (_d$2[SupportedChainId.MAINNET] = + ((_e$1 = {}), (_e$1[AMPL.address] = [DAI, WRAPPED_NATIVE_CURRENCY[SupportedChainId.MAINNET]]), _e$1)), + _d$2) +/** + * Shows up in the currency select for swap and add liquidity + */ +var COMMON_BASES = + ((_f = {}), + (_f[SupportedChainId.MAINNET] = [ + nativeOnChain(SupportedChainId.MAINNET), + DAI, + USDC, + USDT, + WBTC, + WRAPPED_NATIVE_CURRENCY[SupportedChainId.MAINNET], + ]), + (_f[SupportedChainId.ROPSTEN] = [ + nativeOnChain(SupportedChainId.ROPSTEN), + WRAPPED_NATIVE_CURRENCY[SupportedChainId.ROPSTEN], + ]), + (_f[SupportedChainId.RINKEBY] = [ + nativeOnChain(SupportedChainId.RINKEBY), + WRAPPED_NATIVE_CURRENCY[SupportedChainId.RINKEBY], + ]), + (_f[SupportedChainId.GOERLI] = [ + nativeOnChain(SupportedChainId.GOERLI), + WRAPPED_NATIVE_CURRENCY[SupportedChainId.GOERLI], + ]), + (_f[SupportedChainId.KOVAN] = [ + nativeOnChain(SupportedChainId.KOVAN), + WRAPPED_NATIVE_CURRENCY[SupportedChainId.KOVAN], + ]), + (_f[SupportedChainId.ARBITRUM_ONE] = [ + nativeOnChain(SupportedChainId.ARBITRUM_ONE), + DAI_ARBITRUM_ONE, + USDC_ARBITRUM, + USDT_ARBITRUM_ONE, + WBTC_ARBITRUM_ONE, + WRAPPED_NATIVE_CURRENCY[SupportedChainId.ARBITRUM_ONE], + ]), + (_f[SupportedChainId.ARBITRUM_RINKEBY] = [ + nativeOnChain(SupportedChainId.ARBITRUM_RINKEBY), + WRAPPED_NATIVE_CURRENCY[SupportedChainId.ARBITRUM_RINKEBY], + ]), + (_f[SupportedChainId.OPTIMISM] = [ + nativeOnChain(SupportedChainId.OPTIMISM), + DAI_OPTIMISM, + USDC_OPTIMISM, + USDT_OPTIMISM, + WBTC_OPTIMISM, + ]), + (_f[SupportedChainId.OPTIMISTIC_KOVAN] = [nativeOnChain(SupportedChainId.OPTIMISTIC_KOVAN)]), + (_f[SupportedChainId.POLYGON] = [ + nativeOnChain(SupportedChainId.POLYGON), + WETH_POLYGON, + USDC_POLYGON, + DAI_POLYGON, + USDT_POLYGON, + WBTC_POLYGON, + ]), + (_f[SupportedChainId.POLYGON_MUMBAI] = [ + nativeOnChain(SupportedChainId.POLYGON_MUMBAI), + WRAPPED_NATIVE_CURRENCY[SupportedChainId.POLYGON_MUMBAI], + WETH_POLYGON_MUMBAI, + ]), + _f) +// used to construct the list of all pairs we consider by default in the frontend +__assign( + __assign({}, WRAPPED_NATIVE_CURRENCIES_ONLY), + ((_g = {}), + (_g[SupportedChainId.MAINNET] = __spreadArray( + __spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.MAINNET]), false), + [DAI, USDC, USDT, WBTC], + false + )), + _g) +) +;(_h = {}), + (_h[SupportedChainId.MAINNET] = [ + [ + new sdkCore.Token( + SupportedChainId.MAINNET, + '0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643', + 8, + 'cDAI', + 'Compound Dai' + ), + new sdkCore.Token( + SupportedChainId.MAINNET, + '0x39AA39c021dfbaE8faC545936693aC917d5E7563', + 8, + 'cUSDC', + 'Compound USD Coin' + ), + ], + [USDC, USDT], + [DAI, USDT], + ]), + _h + +var EthereumLogo = + 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAAAXNSR0IB2cksfwAAAAlwSFlzAAALEwAACxMBAJqcGAAADxdJREFUeJztXVtzFMcVplwuP8VVeYmf7HJ+RKqSl/AQP6X8H+yqXUEIjhMnQY5jO9oVCIzA5mowdzAYG4xAGAyWLC5G3IyDL8gOASUYKrarYGZWC7qi23b6692VV6uZ7e6ZnT3di07VV6JUaLfnnG+6z+lz+vScOXUoL6SzP52/2PtlQ9p7piHlLU2k3P2JJqcjkXLO8589/OdN/tPjvx8VEP8Wv+sp/J8O/A3+Fp+Bz8JnUj/XrPjIwjT7ybxm57fJlLsy2eR2cwPe4QZksYB/Nr4D34XvxHdTP/8DJ+k0e4S/lb9Jpr2WZJNzgRtjPDaDS4DvFmPgY8GYMDZq/dStNKQzv0qmnA1c6RkqgysQIoMxYqzU+qoLWZDO/jyZdl7lir1ObdwQZLiOseMZqPVonSTS7i+4AtsTTW6O2pDR4ebEs/Bnotar8dKw2Pk1n0I76Y0W16zgdOIZqfVsnCSbvaeEB2+AkWpCBEQS/Jmp9U4u3Fl6nIdWB6gNQgb+7NABtR1qLjxcejiZdhfxKXGA3AjUswHXAXQBnVDbpSbCPeO5fAr8hlrxpgE6gW6o7ROb5N96Z3l9ePZxgUcMXEd1NxssbMk8kWxyztEr2A5AV3XjGySb3acTSLYYoFjL4EF31PYLLXwaeyiZcltnp/woEJtIrdAltT21BEkR7tnuo1dgfQC6tCbRlGh1H02k3C5qpalg/bt3WdOGDPk4lACdct1S27eiLEgPPMbDmcvkylLAgiUOc/sm2LHuITavmX48KoBun1828DNqO/tKsiX7JF+zeqmVpIqPzg2xyckc++Sfw2ImoB6POtxe6Jra3tMEb75Nxv/Hmxk2MZGbIsCpz4bZn1d45OPSIQF0Tm13IViXbJn2i+i9NcYgRQIA+zsGyMelA6Fzap8AnqktDl8RO9r7WVFKCQAs3dJHPj4tcN2TRQcizrcs1Hv+NZf1D04GEqDj/JBwDqnHqYNCiFj7fYL8Jg+9AnTQfXmYlUo5AYAtbffIx6lNAm6L2hpfbO/atcO3dGsfy+VyUgIAL66yySEE3FzNto2R2ElYtrffkHbYd7fHWbkEEeDQyUHk6cnHrQkPtonV+CKla2FWDx6+nwQRAFi5K0s+bl3ANrGmkvP5fPoH1cFfX/fYyP2cNgG6Lg6z55a55OPXJgG3UVzGn2vbug98fvW+r/FlBADePtJPPn59iKKS6lYW5ad++8q4Vu+5G2h8FQIAr663JFlUAtiqqksBZ1Uj9UPp4neLHeb0TUQmwNEzg2xemv559OE2VsX4KE2ysXoXhpOJCgGAdXttShblAZtVpayMe5Zt1A+ji5fXZdj4uL/jF4YApy4NsxdaLXQIue2iGb/Ze4r6IcLg6rejUuPrEAB47yO7kkVTJIhyAsnG41rYylUVHQIAizdZlixqyh9DC2V8HGKkHrwuELffHZiUWz4kAVBEAueS+jl1EepAqo2ndLFW64guAYBNB2xMFjmdWsbHWXbqQesC0zMMGjcBgEVv2JYs4tDpT5BvzmDAoBWBxM2tH8a0jB+FAAe77EsWwaZKxkdLE9u2fPce65dbu4oEAFp32JYscnNK7WrQ14Z+sOpAMefwiLrjVy0CdF0cYguX2rU3ANtKCWBTdS9wqWcklPGjEgDYcdiuZBEaV1U0PtqbUQ9SB6/vyoY2fjUIALy81q5kUcUWduhxRz1AVcxvdthtb2aVT60JcOT0oKg4otaHKmBjX+OLA50GN2Esx+FT8mRPLQgAIO1MrQ91ArgZ31JytDqlHpwqXlrjsbExvZg/TgKcvDTM/rjcHocQtp45/ae9FuqBqeLr/6gle2pFAAChKLVeVAFbzyRAk3OBemAq2LhfPdlTSwIA6Y12JItg62nGR9tzyq7bqljY4rK+e5WrfCgJcPzskHBOqfUkJQC39bRW9+h9Tz0oFXx8Yahqxo+DAMCGfXY4hLB5SfjnrqQekAypjRntZA8FAU5/NixK0an1JQNsXrL+m1/4ceM7/WRPJcExsas3Rtn7nQNVJ8GBj82vHppWKBLrNStVAOrzqyWjPHzEWQGEbjBW81t9bPn2LNt9tF/UE1SLBMu2Ge4QcpsL4+MyJPLBVADi68HhcMmeUrnbP8kufDUyw8ggQBHoD7Dt4D3WyX2NqASAv/L7Fnr9VYK4CAs3YlEPpBLOfxk+2QP5wRlnZy7ztTnAUKUEKGLJpj72JnfmUFoehQTbDpldPQTb8/Xfe5Z6IEHA1BxWem+N8rdd/ib7EaAUq/dkxZoelgTYtaTWYxBwJR7y/8uoB+IHnMbB26sjY+M59uU1vr5/qj6FywhQxIodWfbOh/2ioZQOAZCzMLV6CLafU7hUkXww5Wjr8j/S7Sdo+3LxyojSGx+WAFN+wtY+tp1P7V0afsIbbxtaPcRtb2T1b+Mqj90flcf8t91x1v158PoeBwGKWLy5j23kfsIxBT/h5KfDoj8RtV7LIaqFTcwBfHUt+Eg35L//G2WnqxSyhSVAKdZwP+FgV2U/Yc9R85JFIieQwH25BgymCHTt9JPxiRy7ch3xe/QQrdoEKGLlzqzICgb5CQb2Je6ZU7g0mXogAmjR5mWnJ3uwB3Dp65nxu4kEKGIZ9xN2tN9jJy5OJ6txfYm57TEDGNPwCdm0otzJTLCzX+T31uMwfJwEmNpP2NLHNu2/y453/0gEw/oSe3MK16dTD2Sqf+/N78diN3qtCDDlMG7qY2v33mWHTg6Y1ZeY294YAhw7Ozi1P19L1IIA0/yEXdxpfMeQWUAQwJAlAClUtHOrdwL8fW3GpBPGnlFOIIDp8lh3dT19EwiAJe4PprWdKziBRoWBALaB1/JpEhsothMAdYJY8w3dDhZh4HkDBuIL7J7t+qDfWgKg57BRYV85uO0xA3SQD0SCl9ZkRP9eWwjwyrqM8bUABXQYkwySpU0xhb62Lcs6z5u7E4idPpUDIn8ypeOYSAYZkg5esTPLPr0yIu2+gd1CnA3QTcvGSYA0B6IY2TpfXNLQxo5a30BDyluKI2HPUA+kCHj/qNlDDl0WKsGxevd49LAxqvGxPM2XjBV+AJpNYp/DpJ1AURBiUkkYvP9i9S9yAnjTZX+DaffoJ+H9g7CGR1j3nEKDCIS12OLGd6HGwaRoQJSEmVYU+rfVHhu+/2MR6LWbo+JMQGUmO6Lo4kSIsDFMWKfSNRRLWWnJOdrPm3aAVBSFmlgWXt7sEQc4kB+QKRBv5Pb2e7ERAIUqssbROL629eDMMSzZbFiZeLEs3NSDISjhLpeh4Umx7ssaMiD+bpMUaOgQAE6b7DYxjAkdS7ouzoxScFUdtT7LMe1giIlHw/AmORn/g6AoFlWps0OdP7p7hiUA/AuVUi74A+gU4vf5KC2XOYkkBCg9Gmbq4VBMm0gRBwkqgGX7B1A+PO+ggpKgsO4vK+VhHXwBVAAFkQuhqqk3kE07HGry8XDU5FcStIWHl40Zo9LnwH9AXZ6MAHBCZUe8EaLiFLBsL2LVbjOrgWccDze5QQTeQpX27zj6tV3hJM4r6zPsg5Lpemr7lv9eRiIA5V4dCruR+wxuLz+jQYTpLWIwHQ8MqZ0P/Pb7MdYiuQMYpMLOI87vIcRU2ZrFUnPwhNp+A7arTb5xzLdFjOlNorCTpio4+o0zhSBOpc+EZy+LKJDD33lYLyNpYPXvNPg2ibKhTRzqA3QE9wUiHAzTtgXx/po9+jUJpreTD2wTlw8HzW4UCY/e7wpYmSCc1NmDRxQQpioJOQzTbxgLbBSZXwbMbxWLmDtsj8B/3RiteA8gMnr7QtYlItEjW3JMQMVWsflZwL1OPUgZEM6FFWwrI2dQWp+H4o3NB/S2kMuBo+zUepFB2ixaEMCSdvFf/Lvy+UGZIKpAW5hiNBDF+Cae+/MlgEq7eFsujMAWbdSegdXoEoZNKFmewAwoXhhRWAasuDIGTRuitI57kNrFK18ZA7Hp0qgPz4RvHhmVACZV90ihc2lUfhYwr3GEHxrS4XsIRiEAchQmVfdUgva1cRCbLo58sayKKG4CIOdvWnVPxZckzMWRYhYwsFAkCDpXxkYlgHHVPRUQ+upYQQDLLo/W7SkYhgAoOaN+Ti0CRLk8GpJIOQeoH0IVSOfeCagiqgYBUH1sYnVPILjtIhkf0pDOPM6diAHyh1EEpufxClVEYQmA4o9Gi66Mhc1gu8gEgCTT7iLqB9KBrIooDAGM7fUXRABus6oYH5JOs4e5M/EN9UNpsF+0gq8WAd4zuLrH9/m5rWCzqhEAkkw7c23YIi4CmTl0EI1KAFHdY9UVsW4Otqqq8UtIsJz+AdWBJhNRCYD0M/Vz6AA2isX4kPxS4JyjfkgdVKoikhHgrfctC/m4bao+9ZfLwpbMEwlDGkupoFIVUSUCtJ80v7qnDB5sE6vxi5Jsdp+2yR9AFdCoTxVREAEwaxjTy08JfN3nNqmJ8adIkHJb6R9cHbt9qoiCCIBOJNTj1QFsUVPjQ/ha8xCPNfdRP7wOcFmUjAC7j9hR3TNlfG4D2KLmBCiQ4JFEyu2iVoIqyquIyglgT3VPAVz3gSXetZJEq/tossm9TK4MRbSWVBGVEwDtXqjHpwqhc657UuMXZUF64DHuiPRSK0UVOLJdTgCcPKIelzrcXuic2u7TJNmSfdIWEhSriIoEsKm6BzqGrqnt7StgpS3LAc7to+MIqntMvM/HD9CtcW9+uWBdssUxxDk+dPGiHocSoFNT1nyZiIOmloWIJqMQ6tF6+7oi9gnEZpE9O4bmwc1Bh2RxfjUkv21sT+7AIHg1396NS5CksC2LSAnoqmaJnVqJSCWLeoLZJSEYophjeewpXUpBtYpN5WW1AnQSWyWPaQKGc7Y32lRtHJvhhQ7cxrp+64NElJw3OW3URqB76522qpVu2yw4vWLTMbTohne7I5/YqUfBIUZbTiWHMjx/ttAHNR8kwVn2fJOKeogYxGZOu/b5/FnJt6vJ9yyyI8tYZvhejF25LcusVBa0N0OPO5ObWWJsGKO0FdushBckRdDqFP1u0fSYsss5vluMgY8FY7IuYVMPgrbn6H2PCxBEJBHn9Tf8s4UHz78L3zmj5fqsmCG4DAk3YiWbvGfFvYgpdz888EJL/J7Chdkerk8XEP8Wv+vJzyo8EsHf8L/FZ+Czpi5YqjP5P2ey0rAsl+yGAAAAAElFTkSuQmCC' + +var arbitrumLogoUrl = + 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20viewBox%3D%220%200%20470.287%20514.251%22%20enable-background%3D%22new%200%200%20470.287%20514.251%22%20xml%3Aspace%3D%22preserve%22%3E%3Cg%20id%3D%22Background%22%3E%3C%2Fg%3E%3Cg%20id%3D%22Logos_and_symbols%22%3E%20%3Cg%20id%3D%22SYMBOL_VER_3%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_4_3_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_1_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_1_%22%3E%20%20%3Cg%20id%3D%22_x31_-3%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_14_%22%3E%20%20%20%3Cpath%20fill%3D%22%232D374B%22%20d%3D%22M291.134%2C237.469l35.654-60.5l96.103%2C149.684l0.046%2C28.727l-0.313-197.672%20%20%20%20c-0.228-4.832-2.794-9.252-6.887-11.859L242.715%2C46.324c-4.045-1.99-9.18-1.967-13.22%2C0.063c-0.546%2C0.272-1.06%2C0.57-1.548%2C0.895%20%20%20%20l-0.604%2C0.379L59.399%2C144.983l-0.651%2C0.296c-0.838%2C0.385-1.686%2C0.875-2.48%2C1.444c-3.185%2C2.283-5.299%2C5.66-5.983%2C9.448%20%20%20%20c-0.103%2C0.574-0.179%2C1.158-0.214%2C1.749l0.264%2C161.083l89.515-138.745c11.271-18.397%2C35.825-24.323%2C58.62-24.001l26.753%2C0.706%20%20%20%20L67.588%2C409.765l18.582%2C10.697L245.692%2C157.22l70.51-0.256L157.091%2C426.849l66.306%2C38.138l7.922%2C4.556%20%20%20%20c3.351%2C1.362%2C7.302%2C1.431%2C10.681%2C0.21l175.453-101.678l-33.544%2C19.438L291.134%2C237.469z%20M304.736%2C433.395l-66.969-105.108%20%20%20%20l40.881-69.371l87.952%2C138.628L304.736%2C433.395z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%2328A0F0%22%20points%3D%22237.768%2C328.286%20304.736%2C433.395%20366.601%2C397.543%20278.648%2C258.915%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2328A0F0%22%20d%3D%22M422.937%2C355.379l-0.046-28.727l-96.103-149.684l-35.654%2C60.5l92.774%2C150.043l33.544-19.438%20%20%20%20c3.29-2.673%2C5.281-6.594%2C5.49-10.825L422.937%2C355.379z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23FFFFFF%22%20d%3D%22M20.219%2C382.469l47.369%2C27.296l157.634-252.801l-26.753-0.706c-22.795-0.322-47.35%2C5.604-58.62%2C24.001%20%20%20%20L50.334%2C319.004l-30.115%2C46.271V382.469z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%23FFFFFF%22%20points%3D%22316.202%2C156.964%20245.692%2C157.22%2086.17%2C420.462%20141.928%2C452.565%20157.091%2C426.849%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2396BEDC%22%20d%3D%22M452.65%2C156.601c-0.59-14.746-8.574-28.245-21.08-36.104L256.28%2C19.692%20%20%20%20c-12.371-6.229-27.825-6.237-40.218-0.004c-1.465%2C0.739-170.465%2C98.752-170.465%2C98.752c-2.339%2C1.122-4.592%2C2.458-6.711%2C3.975%20%20%20%20c-11.164%2C8.001-17.969%2C20.435-18.668%2C34.095v208.765l30.115-46.271L50.07%2C157.921c0.035-0.589%2C0.109-1.169%2C0.214-1.741%20%20%20%20c0.681-3.79%2C2.797-7.171%2C5.983-9.456c0.795-0.569%2C172.682-100.064%2C173.228-100.337c4.04-2.029%2C9.175-2.053%2C13.22-0.063%20%20%20%20l173.022%2C99.523c4.093%2C2.607%2C6.659%2C7.027%2C6.887%2C11.859v199.542c-0.209%2C4.231-1.882%2C8.152-5.172%2C10.825l-33.544%2C19.438%20%20%20%20l-17.308%2C10.031l-61.864%2C35.852l-62.737%2C36.357c-3.379%2C1.221-7.33%2C1.152-10.681-0.21l-74.228-42.693l-15.163%2C25.717%20%20%20%20l66.706%2C38.406c2.206%2C1.255%2C4.171%2C2.367%2C5.784%2C3.272c2.497%2C1.4%2C4.199%2C2.337%2C4.8%2C2.629c4.741%2C2.303%2C11.563%2C3.643%2C17.71%2C3.643%20%20%20%20c5.636%2C0%2C11.132-1.035%2C16.332-3.072l182.225-105.531c10.459-8.104%2C16.612-20.325%2C17.166-33.564V156.601z%22%2F%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_13_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_6_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_3_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_15_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_3_%22%3E%20%20%20%3Cg%20id%3D%22_x33__7_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic%22%3E%20%20%20%3Cg%20id%3D%22_x33__3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_10_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x34__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_2_%22%3E%20%20%20%3Cg%20id%3D%22_x33__6_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_2_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_11_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_5_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_12_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_1_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_9_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_2_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol_1_%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_1_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_7_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_8_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Monochromatic_1_%22%3E%20%20%3Cg%20id%3D%22_x33__4_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E' + +var optimismLogoUrl = + 'data:image/svg+xml,%3Csvg%20width%3D%22170%22%20height%3D%22168%22%20viewBox%3D%220%200%20170%20168%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20clip-path%3D%22url%28%23clip0%29%22%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF505F%22%2F%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF0320%22%2F%3E%3Cpath%20d%3D%22M85.05%200C132.022%200%20170.1%2037.8949%20170.1%2084.6407C170.1%20131.386%200%20131.386%200%2084.6407C0%2037.8949%2038.0782%200%2085.05%200Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.665%2064.0394L112.444%2012.3742L89.0263%2078.9477L144.665%2064.0394Z%22%20fill%3D%22%23FF4E65%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.777%2064.215L112.444%2012.3742L165.349%2058.4347L143.777%2064.215Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.551%2063.613L142.479%20124.467L88.912%2078.5213L144.551%2063.613Z%22%20fill%3D%22%23D0001A%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.663%2063.7886L142.479%20124.467L165.235%2058.0083L143.663%2063.7886Z%22%20fill%3D%22%23FF697B%22%2F%3E%3C%2Fg%3E%3Cdefs%3E%3CclipPath%20id%3D%22clip0%22%3E%3Crect%20width%3D%22170%22%20height%3D%22168%22%20fill%3D%22white%22%2F%3E%3C%2FclipPath%3E%3C%2Fdefs%3E%3C%2Fsvg%3E' + +var polygonMaticLogo = + 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20viewBox%3D%220%200%2038.4%2033.5%22%20style%3D%22enable-background%3Anew%200%200%2038.4%2033.5%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cstyle%20type%3D%22text%2Fcss%22%3E%20.st0%7Bfill%3A%238247E5%3B%7D%3C%2Fstyle%3E%3Cg%3E%20%3Cpath%20class%3D%22st0%22%20d%3D%22M29%2C10.2c-0.7-0.4-1.6-0.4-2.4%2C0L21%2C13.5l-3.8%2C2.1l-5.5%2C3.3c-0.7%2C0.4-1.6%2C0.4-2.4%2C0L5%2C16.3%20%20c-0.7-0.4-1.2-1.2-1.2-2.1v-5c0-0.8%2C0.4-1.6%2C1.2-2.1l4.3-2.5c0.7-0.4%2C1.6-0.4%2C2.4%2C0L16%2C7.2c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v3.3l3.8-2.2V7%20%20c0-0.8-0.4-1.6-1.2-2.1l-8-4.7c-0.7-0.4-1.6-0.4-2.4%2C0L1.2%2C5C0.4%2C5.4%2C0%2C6.2%2C0%2C7v9.4c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l5.5-3.2l3.8-2.2l5.5-3.2c0.7-0.4%2C1.6-0.4%2C2.4%2C0l4.3%2C2.5c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v5c0%2C0.8-0.4%2C1.6-1.2%2C2.1%20%20L29%2C28.8c-0.7%2C0.4-1.6%2C0.4-2.4%2C0l-4.3-2.5c-0.7-0.4-1.2-1.2-1.2-2.1V21l-3.8%2C2.2v3.3c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l8.1-4.7c0.7-0.4%2C1.2-1.2%2C1.2-2.1V17c0-0.8-0.4-1.6-1.2-2.1L29%2C10.2z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E' + +var UNI_LIST = 'https://tokens.uniswap.org' +var AAVE_LIST = 'tokenlist.aave.eth' +var BA_LIST = 'https://raw.githubusercontent.com/The-Blockchain-Association/sec-notice-list/master/ba-sec-list.json' +var CMC_ALL_LIST = 'https://api.coinmarketcap.com/data-api/v3/uniswap/all.json' +var COINGECKO_LIST = 'https://tokens.coingecko.com/uniswap/all.json' +var COMPOUND_LIST = 'https://raw.githubusercontent.com/compound-finance/token-list/master/compound.tokenlist.json' +var GEMINI_LIST = 'https://www.gemini.com/uniswap/manifest.json' +var ARBITRUM_LIST = 'https://bridge.arbitrum.io/token-list-42161.json' +var KLEROS_LIST = 't2crtokens.eth' +var OPTIMISM_LIST = 'https://static.optimism.io/optimism.tokenlist.json' +var ROLL_LIST = 'https://app.tryroll.com/tokens.json' +var SET_LIST = 'https://raw.githubusercontent.com/SetProtocol/uniswap-tokenlist/main/set.tokenlist.json' +var WRAPPED_LIST = 'wrapped.tokensoft.eth' +var UNSUPPORTED_LIST_URLS = [BA_LIST] +// this is the default list of lists that are exposed to users +// lower index == higher priority for token import +var DEFAULT_LIST_OF_LISTS_TO_DISPLAY = [ + UNI_LIST, + COMPOUND_LIST, + AAVE_LIST, + CMC_ALL_LIST, + COINGECKO_LIST, + KLEROS_LIST, + GEMINI_LIST, + WRAPPED_LIST, + SET_LIST, + ROLL_LIST, + ARBITRUM_LIST, + OPTIMISM_LIST, +] +var DEFAULT_LIST_OF_LISTS = __spreadArray( + __spreadArray([], __read(DEFAULT_LIST_OF_LISTS_TO_DISPLAY), false), + __read(UNSUPPORTED_LIST_URLS), + false +) +// default lists to be 'active' aka searched across +var DEFAULT_ACTIVE_LIST_URLS = [UNI_LIST, GEMINI_LIST] + +var _a$c, _b$3 +var INFURA_KEY = process.env.REACT_APP_INFURA_KEY +if (typeof INFURA_KEY === 'undefined') { + throw new Error('REACT_APP_INFURA_KEY must be a defined environment variable') +} +/** + * These are the network URLs used by the interface when there is not another available source of chain data + */ +var INFURA_NETWORK_URLS = + ((_a$c = {}), + (_a$c[SupportedChainId.MAINNET] = 'https://mainnet.infura.io/v3/' + INFURA_KEY), + (_a$c[SupportedChainId.RINKEBY] = 'https://rinkeby.infura.io/v3/' + INFURA_KEY), + (_a$c[SupportedChainId.ROPSTEN] = 'https://ropsten.infura.io/v3/' + INFURA_KEY), + (_a$c[SupportedChainId.GOERLI] = 'https://goerli.infura.io/v3/' + INFURA_KEY), + (_a$c[SupportedChainId.KOVAN] = 'https://kovan.infura.io/v3/' + INFURA_KEY), + (_a$c[SupportedChainId.OPTIMISM] = 'https://optimism-mainnet.infura.io/v3/' + INFURA_KEY), + (_a$c[SupportedChainId.OPTIMISTIC_KOVAN] = 'https://optimism-kovan.infura.io/v3/' + INFURA_KEY), + (_a$c[SupportedChainId.ARBITRUM_ONE] = 'https://arbitrum-mainnet.infura.io/v3/' + INFURA_KEY), + (_a$c[SupportedChainId.ARBITRUM_RINKEBY] = 'https://arbitrum-rinkeby.infura.io/v3/' + INFURA_KEY), + (_a$c[SupportedChainId.POLYGON] = 'https://polygon-mainnet.infura.io/v3/' + INFURA_KEY), + (_a$c[SupportedChainId.POLYGON_MUMBAI] = 'https://polygon-mumbai.infura.io/v3/' + INFURA_KEY), + _a$c) +var NetworkType +;(function (NetworkType) { + NetworkType[(NetworkType['L1'] = 0)] = 'L1' + NetworkType[(NetworkType['L2'] = 1)] = 'L2' +})(NetworkType || (NetworkType = {})) +var CHAIN_INFO = + ((_b$3 = {}), + (_b$3[SupportedChainId.MAINNET] = { + networkType: NetworkType.L1, + docs: 'https://docs.uniswap.org/', + explorer: 'https://etherscan.io/', + infoLink: 'https://info.uniswap.org/#/', + label: 'Ethereum', + logoUrl: EthereumLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, + rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.MAINNET], + }, + }), + (_b$3[SupportedChainId.RINKEBY] = { + networkType: NetworkType.L1, + docs: 'https://docs.uniswap.org/', + explorer: 'https://rinkeby.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/', + label: 'Rinkeby', + logoUrl: EthereumLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Rinkeby Ether', symbol: 'rETH', decimals: 18 }, + rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.RINKEBY], + }, + }), + (_b$3[SupportedChainId.ROPSTEN] = { + networkType: NetworkType.L1, + docs: 'https://docs.uniswap.org/', + explorer: 'https://ropsten.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/', + label: 'Ropsten', + logoUrl: EthereumLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Ropsten Ether', symbol: 'ropETH', decimals: 18 }, + rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.ROPSTEN], + }, + }), + (_b$3[SupportedChainId.KOVAN] = { + networkType: NetworkType.L1, + docs: 'https://docs.uniswap.org/', + explorer: 'https://kovan.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/', + label: 'Kovan', + logoUrl: EthereumLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Kovan Ether', symbol: 'kovETH', decimals: 18 }, + rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.KOVAN], + }, + }), + (_b$3[SupportedChainId.GOERLI] = { + networkType: NetworkType.L1, + docs: 'https://docs.uniswap.org/', + explorer: 'https://goerli.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/', + label: 'Görli', + logoUrl: EthereumLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Görli Ether', symbol: 'görETH', decimals: 18 }, + rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.GOERLI], + }, + }), + (_b$3[SupportedChainId.OPTIMISM] = { + networkType: NetworkType.L2, + blockWaitMsBeforeWarning: ms__default['default']( + templateObject_1$1m || (templateObject_1$1m = __makeTemplateObject(['25m'], ['25m'])) + ), + bridge: 'https://gateway.optimism.io/?chainId=1', + defaultListUrl: OPTIMISM_LIST, + docs: 'https://optimism.io/', + explorer: 'https://optimistic.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/optimism/', + label: 'Optimism', + logoUrl: optimismLogoUrl, + statusPage: 'https://optimism.io/status', + helpCenterUrl: 'https://help.uniswap.org/en/collections/3137778-uniswap-on-optimistic-ethereum-oξ', + addNetworkInfo: { + nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, + rpcUrl: 'https://mainnet.optimism.io', + }, + }), + (_b$3[SupportedChainId.OPTIMISTIC_KOVAN] = { + networkType: NetworkType.L2, + blockWaitMsBeforeWarning: ms__default['default']( + templateObject_2$10 || (templateObject_2$10 = __makeTemplateObject(['25m'], ['25m'])) + ), + bridge: 'https://gateway.optimism.io/', + defaultListUrl: OPTIMISM_LIST, + docs: 'https://optimism.io/', + explorer: 'https://optimistic.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/optimism/', + label: 'Optimistic Kovan', + logoUrl: optimismLogoUrl, + statusPage: 'https://optimism.io/status', + helpCenterUrl: 'https://help.uniswap.org/en/collections/3137778-uniswap-on-optimistic-ethereum-oξ', + addNetworkInfo: { + nativeCurrency: { name: 'Optimistic Kovan Ether', symbol: 'kovOpETH', decimals: 18 }, + rpcUrl: 'https://kovan.optimism.io', + }, + }), + (_b$3[SupportedChainId.ARBITRUM_ONE] = { + networkType: NetworkType.L2, + blockWaitMsBeforeWarning: ms__default['default']( + templateObject_3$T || (templateObject_3$T = __makeTemplateObject(['10m'], ['10m'])) + ), + bridge: 'https://bridge.arbitrum.io/', + docs: 'https://offchainlabs.com/', + explorer: 'https://arbiscan.io/', + infoLink: 'https://info.uniswap.org/#/arbitrum', + label: 'Arbitrum', + logoUrl: arbitrumLogoUrl, + defaultListUrl: ARBITRUM_LIST, + helpCenterUrl: 'https://help.uniswap.org/en/collections/3137787-uniswap-on-arbitrum', + addNetworkInfo: { + nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, + rpcUrl: 'https://arb1.arbitrum.io/rpc', + }, + }), + (_b$3[SupportedChainId.ARBITRUM_RINKEBY] = { + networkType: NetworkType.L2, + blockWaitMsBeforeWarning: ms__default['default']( + templateObject_4$H || (templateObject_4$H = __makeTemplateObject(['10m'], ['10m'])) + ), + bridge: 'https://bridge.arbitrum.io/', + docs: 'https://offchainlabs.com/', + explorer: 'https://rinkeby-explorer.arbitrum.io/', + infoLink: 'https://info.uniswap.org/#/arbitrum/', + label: 'Arbitrum Rinkeby', + logoUrl: arbitrumLogoUrl, + defaultListUrl: ARBITRUM_LIST, + helpCenterUrl: 'https://help.uniswap.org/en/collections/3137787-uniswap-on-arbitrum', + addNetworkInfo: { + nativeCurrency: { name: 'Rinkeby Arbitrum Ether', symbol: 'rinkArbETH', decimals: 18 }, + rpcUrl: 'https://rinkeby.arbitrum.io/rpc', + }, + }), + (_b$3[SupportedChainId.POLYGON] = { + networkType: NetworkType.L1, + blockWaitMsBeforeWarning: ms__default['default']( + templateObject_5$y || (templateObject_5$y = __makeTemplateObject(['10m'], ['10m'])) + ), + bridge: 'https://wallet.polygon.technology/bridge', + docs: 'https://polygon.io/', + explorer: 'https://polygonscan.com/', + infoLink: 'https://info.uniswap.org/#/polygon/', + label: 'Polygon', + logoUrl: polygonMaticLogo, + addNetworkInfo: { + rpcUrl: 'https://polygon-rpc.com/', + nativeCurrency: { name: 'Polygon Matic', symbol: 'MATIC', decimals: 18 }, + }, + }), + (_b$3[SupportedChainId.POLYGON_MUMBAI] = { + networkType: NetworkType.L1, + blockWaitMsBeforeWarning: ms__default['default']( + templateObject_6$p || (templateObject_6$p = __makeTemplateObject(['10m'], ['10m'])) + ), + bridge: 'https://wallet.polygon.technology/bridge', + docs: 'https://polygon.io/', + explorer: 'https://mumbai.polygonscan.com/', + infoLink: 'https://info.uniswap.org/#/polygon/', + label: 'Polygon Mumbai', + logoUrl: polygonMaticLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Polygon Mumbai Matic', symbol: 'mMATIC', decimals: 18 }, + rpcUrl: 'https://rpc-endpoints.superfluid.dev/mumbai', + }, + }), + _b$3) +var templateObject_1$1m, + templateObject_2$10, + templateObject_3$T, + templateObject_4$H, + templateObject_5$y, + templateObject_6$p + +function useNativeCurrency() { + var chainId = useActiveWeb3React().chainId + return React.useMemo( + function () { + return chainId + ? nativeOnChain(chainId) + : // display mainnet when not connected + nativeOnChain(SupportedChainId.MAINNET) + }, + [chainId] + ) +} + +var EMPTY_CONNECTOR = core$1.initializeConnector(function () { + return empty.EMPTY +}) +utils.atomWithDefault(function () { + return EMPTY_CONNECTOR +}) +utils.atomWithDefault(function () { + return EMPTY_CONNECTOR +}) + +var REGISTRAR_ABI = [ + { + constant: true, + inputs: [ + { + name: 'node', + type: 'bytes32', + }, + ], + name: 'resolver', + outputs: [ + { + name: 'resolverAddress', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, +] +var REGISTRAR_ADDRESS = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e' +var RESOLVER_ABI = [ + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'contenthash', + outputs: [ + { + internalType: 'bytes', + name: '', + type: 'bytes', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, +] +// cache the resolver contracts since most of them are the public resolver +function resolverContract(resolverAddress, provider) { + return new contracts.Contract(resolverAddress, RESOLVER_ABI, provider) +} +/** + * Fetches and decodes the result of an ENS contenthash lookup on mainnet to a URI + * @param ensName to resolve + * @param provider provider to use to fetch the data + */ +function resolveENSContentHash(ensName, provider) { + return __awaiter(this, void 0, void 0, function () { + var ensRegistrarContract, hash$1, resolverAddress + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + ensRegistrarContract = new contracts.Contract(REGISTRAR_ADDRESS, REGISTRAR_ABI, provider) + hash$1 = hash.namehash(ensName) + return [4 /*yield*/, ensRegistrarContract.resolver(hash$1)] + case 1: + resolverAddress = _a.sent() + return [2 /*return*/, resolverContract(resolverAddress, provider).contenthash(hash$1)] + } + }) + }) +} + +function hexToUint8Array(hex) { + hex = hex.startsWith('0x') ? hex.substr(2) : hex + if (hex.length % 2 !== 0) throw new Error('hex must have length that is multiple of 2') + var arr = new Uint8Array(hex.length / 2) + for (var i = 0; i < arr.length; i++) { + arr[i] = parseInt(hex.substr(i * 2, 2), 16) + } + return arr +} +var UTF_8_DECODER = new TextDecoder('utf-8') +/** + * Returns the URI representation of the content hash for supported codecs + * @param contenthash to decode + */ +function contenthashToUri(contenthash) { + var data = hexToUint8Array(contenthash) + var codec = multicodec.getNameFromData(data) + switch (codec) { + case 'ipfs-ns': { + var unprefixedData = multicodec.rmPrefix(data) + var cid = new CID__default['default'](unprefixedData) + return 'ipfs://' + multihashes.toB58String(cid.multihash) + } + case 'ipns-ns': { + var unprefixedData = multicodec.rmPrefix(data) + var cid = new CID__default['default'](unprefixedData) + var multihash = multihashes.decode(cid.multihash) + if (multihash.name === 'identity') { + return 'ipns://' + UTF_8_DECODER.decode(multihash.digest).trim() + } else { + return 'ipns://' + multihashes.toB58String(cid.multihash) + } + } + default: + throw new Error('Unrecognized codec: ' + codec) + } +} + +var ENS_NAME_REGEX$1 = /^(([a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\.)+)eth(\/.*)?$/ +function parseENSAddress(ensAddress) { + var match = ensAddress.match(ENS_NAME_REGEX$1) + if (!match) return undefined + return { ensName: match[1].toLowerCase() + 'eth', ensPath: match[4] } +} + +/** + * Given a URI that may be ipfs, ipns, http, https, ar, or data protocol, return the fetch-able http(s) URLs for the same content + * @param uri to convert to fetch-able http url + */ +function uriToHttp(uri) { + var _a, _b, _c + var protocol = uri.split(':')[0].toLowerCase() + switch (protocol) { + case 'data': + return [uri] + case 'https': + return [uri] + case 'http': + return ['https' + uri.substr(4), uri] + case 'ipfs': + var hash = (_a = uri.match(/^ipfs:(\/\/)?(.*)$/i)) === null || _a === void 0 ? void 0 : _a[2] + return ['https://cloudflare-ipfs.com/ipfs/' + hash + '/', 'https://ipfs.io/ipfs/' + hash + '/'] + case 'ipns': + var name_1 = (_b = uri.match(/^ipns:(\/\/)?(.*)$/i)) === null || _b === void 0 ? void 0 : _b[2] + return ['https://cloudflare-ipfs.com/ipns/' + name_1 + '/', 'https://ipfs.io/ipns/' + name_1 + '/'] + case 'ar': + var tx = (_c = uri.match(/^ar:(\/\/)?(.*)$/i)) === null || _c === void 0 ? void 0 : _c[2] + return ['https://arweave.net/' + tx] + default: + return [] + } +} + +var ValidationSchema +;(function (ValidationSchema) { + ValidationSchema['LIST'] = 'list' + ValidationSchema['TOKENS'] = 'tokens' +})(ValidationSchema || (ValidationSchema = {})) +var validator = new Promise(function (resolve) { + return __awaiter(void 0, void 0, void 0, function () { + var _a, ajv, schema, validator + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + return [ + 4 /*yield*/, + Promise.all([ + Promise.resolve().then(function () { + return /*#__PURE__*/ _interopNamespace(require('ajv')) + }), + Promise.resolve().then(function () { + return tokenlist_schema$1 + }), + ]), + ] + case 1: + ;(_a = __read.apply(void 0, [_b.sent(), 2])), (ajv = _a[0]), (schema = _a[1]) + validator = new ajv.default({ allErrors: true }) + .addSchema(schema, ValidationSchema.LIST) + // Adds a meta scheme of Pick + .addSchema( + __assign(__assign({}, schema), { $id: schema.$id + '#tokens', required: ['tokens'] }), + ValidationSchema.TOKENS + ) + resolve(validator) + return [2 /*return*/] + } + }) + }) +}) +function getValidationErrors(validate) { + var _a, _b + return (_b = + (_a = validate === null || validate === void 0 ? void 0 : validate.errors) === null || _a === void 0 + ? void 0 + : _a + .map(function (error) { + return [error.dataPath, error.message].filter(Boolean).join(' ') + }) + .join('; ')) !== null && _b !== void 0 + ? _b + : 'unknown error' +} +/** + * Validates a token list. + * @param json the TokenList to validate + */ +function validateTokenList(json) { + return __awaiter(this, void 0, void 0, function () { + var validate + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + return [4 /*yield*/, validator] + case 1: + validate = _a.sent().getSchema(ValidationSchema.LIST) + if (validate === null || validate === void 0 ? void 0 : validate(json)) { + return [2 /*return*/, json] + } + throw new Error('Token list failed validation: ' + getValidationErrors(validate)) + } + }) + }) +} + +var listCache = new Map() +/** Fetches and validates a token list. */ +function fetchTokenList$1(listUrl, resolveENSContentHash) { + var _a + return __awaiter(this, void 0, void 0, function () { + var cached, + urls, + parsedENS, + contentHashUri, + error_1, + message, + translatedUri, + message, + i, + url, + isLast, + response, + error_2, + message, + message, + json, + list + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + cached = listCache === null || listCache === void 0 ? void 0 : listCache.get(listUrl) // avoid spurious re-fetches + if (cached) { + return [2 /*return*/, cached] + } + parsedENS = parseENSAddress(listUrl) + if (!parsedENS) return [3 /*break*/, 5] + contentHashUri = void 0 + _b.label = 1 + case 1: + _b.trys.push([1, 3, , 4]) + return [4 /*yield*/, resolveENSContentHash(parsedENS.ensName)] + case 2: + contentHashUri = _b.sent() + return [3 /*break*/, 4] + case 3: + error_1 = _b.sent() + message = 'failed to resolve ENS name: ' + parsedENS.ensName + console.debug(message, error_1) + throw new Error(message) + case 4: + translatedUri = void 0 + try { + translatedUri = contenthashToUri(contentHashUri) + } catch (error) { + message = 'failed to translate contenthash to URI: ' + contentHashUri + console.debug(message, error) + throw new Error(message) + } + urls = uriToHttp('' + translatedUri + ((_a = parsedENS.ensPath) !== null && _a !== void 0 ? _a : '')) + return [3 /*break*/, 6] + case 5: + urls = uriToHttp(listUrl) + _b.label = 6 + case 6: + i = 0 + _b.label = 7 + case 7: + if (!(i < urls.length)) return [3 /*break*/, 15] + url = urls[i] + isLast = i === urls.length - 1 + response = void 0 + _b.label = 8 + case 8: + _b.trys.push([8, 10, , 11]) + return [4 /*yield*/, fetch(url, { credentials: 'omit' })] + case 9: + response = _b.sent() + return [3 /*break*/, 11] + case 10: + error_2 = _b.sent() + message = 'failed to fetch list: ' + listUrl + console.debug(message, error_2) + if (isLast) throw new Error(message) + return [3 /*break*/, 14] + case 11: + if (!response.ok) { + message = 'failed to fetch list: ' + listUrl + console.debug(message, response.statusText) + if (isLast) throw new Error(message) + return [3 /*break*/, 14] + } + return [4 /*yield*/, response.json()] + case 12: + json = _b.sent() + return [4 /*yield*/, validateTokenList(json)] + case 13: + list = _b.sent() + listCache === null || listCache === void 0 ? void 0 : listCache.set(listUrl, list) + return [2 /*return*/, list] + case 14: + i++ + return [3 /*break*/, 7] + case 15: + throw new Error('Unrecognized list URL protocol.') + } + }) + }) +} + +/** + * Returns a map of the given addresses to their eventually consistent ETH balances. + */ +function useNativeCurrencyBalances(uncheckedAddresses) { + var chainId = useActiveWeb3React().chainId + var multicallContract = useInterfaceMulticall() + var validAddressInputs = React.useMemo( + function () { + return uncheckedAddresses + ? uncheckedAddresses + .map(isAddress) + .filter(function (a) { + return a !== false + }) + .sort() + .map(function (addr) { + return [addr] + }) + : [] + }, + [uncheckedAddresses] + ) + var results = useSingleContractMultipleData(multicallContract, 'getEthBalance', validAddressInputs) + return React.useMemo( + function () { + return validAddressInputs.reduce(function (memo, _a, i) { + var _b, _c + var _d = __read(_a, 1), + address = _d[0] + var value = + (_c = + (_b = results === null || results === void 0 ? void 0 : results[i]) === null || _b === void 0 + ? void 0 + : _b.result) === null || _c === void 0 + ? void 0 + : _c[0] + if (value && chainId) + memo[address] = sdkCore.CurrencyAmount.fromRawAmount( + nativeOnChain(chainId), + JSBI__default['default'].BigInt(value.toString()) + ) + return memo + }, {}) + }, + [validAddressInputs, chainId, results] + ) +} +var ERC20Interface = new abi$7.Interface(ERC20ABI) +var tokenBalancesGasRequirement = { gasRequired: 125000 } +/** + * Returns a map of token addresses to their eventually consistent token balances for a single account. + */ +function useTokenBalancesWithLoadingIndicator(address, tokens) { + var validatedTokens = React.useMemo( + function () { + var _a + return (_a = + tokens === null || tokens === void 0 + ? void 0 + : tokens.filter(function (t) { + return isAddress(t === null || t === void 0 ? void 0 : t.address) !== false + })) !== null && _a !== void 0 + ? _a + : [] + }, + [tokens] + ) + var validatedTokenAddresses = React.useMemo( + function () { + return validatedTokens.map(function (vt) { + return vt.address + }) + }, + [validatedTokens] + ) + var balances = useMultipleContractSingleData( + validatedTokenAddresses, + ERC20Interface, + 'balanceOf', + React.useMemo( + function () { + return [address] + }, + [address] + ), + tokenBalancesGasRequirement + ) + var anyLoading = React.useMemo( + function () { + return balances.some(function (callState) { + return callState.loading + }) + }, + [balances] + ) + return React.useMemo( + function () { + return [ + address && validatedTokens.length > 0 + ? validatedTokens.reduce(function (memo, token, i) { + var _a, _b + var value = + (_b = + (_a = balances === null || balances === void 0 ? void 0 : balances[i]) === null || _a === void 0 + ? void 0 + : _a.result) === null || _b === void 0 + ? void 0 + : _b[0] + var amount = value ? JSBI__default['default'].BigInt(value.toString()) : undefined + if (amount) { + memo[token.address] = sdkCore.CurrencyAmount.fromRawAmount(token, amount) + } + return memo + }, {}) + : {}, + anyLoading, + ] + }, + [address, validatedTokens, anyLoading, balances] + ) +} +function useTokenBalances(address, tokens) { + return useTokenBalancesWithLoadingIndicator(address, tokens)[0] +} +// get the balance for a single token/account combo +function useTokenBalance(account, token) { + var tokenBalances = useTokenBalances( + account, + React.useMemo( + function () { + return [token] + }, + [token] + ) + ) + if (!token) return undefined + return tokenBalances[token.address] +} +function useCurrencyBalances(account, currencies) { + var tokens = React.useMemo( + function () { + var _a + return (_a = + currencies === null || currencies === void 0 + ? void 0 + : currencies.filter(function (currency) { + var _a + return (_a = currency === null || currency === void 0 ? void 0 : currency.isToken) !== null && + _a !== void 0 + ? _a + : false + })) !== null && _a !== void 0 + ? _a + : [] + }, + [currencies] + ) + var tokenBalances = useTokenBalances(account, tokens) + var containsETH = React.useMemo( + function () { + var _a + return (_a = + currencies === null || currencies === void 0 + ? void 0 + : currencies.some(function (currency) { + return currency === null || currency === void 0 ? void 0 : currency.isNative + })) !== null && _a !== void 0 + ? _a + : false + }, + [currencies] + ) + var ethBalance = useNativeCurrencyBalances( + React.useMemo( + function () { + return containsETH ? [account] : [] + }, + [containsETH, account] + ) + ) + return React.useMemo( + function () { + var _a + return (_a = + currencies === null || currencies === void 0 + ? void 0 + : currencies.map(function (currency) { + if (!account || !currency) return undefined + if (currency.isToken) return tokenBalances[currency.address] + if (currency.isNative) return ethBalance[account] + return undefined + })) !== null && _a !== void 0 + ? _a + : [] + }, + [account, currencies, ethBalance, tokenBalances] + ) +} +function useCurrencyBalance(account, currency) { + return useCurrencyBalances( + account, + React.useMemo( + function () { + return [currency] + }, + [currency] + ) + )[0] +} + +var alwaysTrue = function () { + return true +} +/** Creates a filter function that filters tokens that do not match the query. */ +function getTokenFilter(query) { + var searchingAddress = isAddress(query) + if (searchingAddress) { + var address_1 = searchingAddress.toLowerCase() + return function (t) { + return 'address' in t && address_1 === t.address.toLowerCase() + } + } + var queryParts = query + .toLowerCase() + .split(/\s+/) + .filter(function (s) { + return s.length > 0 + }) + if (queryParts.length === 0) return alwaysTrue + var match = function (s) { + var parts = s + .toLowerCase() + .split(/\s+/) + .filter(function (s) { + return s.length > 0 + }) + return queryParts.every(function (p) { + return ( + p.length === 0 || + parts.some(function (sp) { + return sp.startsWith(p) || sp.endsWith(p) + }) + ) + }) + } + return function (_a) { + var name = _a.name, + symbol = _a.symbol + return Boolean((symbol && match(symbol)) || (name && match(name))) + } +} + +/** Sorts currency amounts (descending). */ +function balanceComparator(a, b) { + if (a && b) { + return a.greaterThan(b) ? -1 : a.equalTo(b) ? 0 : 1 + } else if (a === null || a === void 0 ? void 0 : a.greaterThan('0')) { + return -1 + } else if (b === null || b === void 0 ? void 0 : b.greaterThan('0')) { + return 1 + } + return 0 +} +/** Sorts tokens by currency amount (descending), then symbol (ascending). */ +function tokenComparator(balances, a, b) { + // Sorts by balances + var balanceComparison = balanceComparator(balances[a.address], balances[b.address]) + if (balanceComparison !== 0) return balanceComparison + // Sorts by symbol + if (a.symbol && b.symbol) { + return a.symbol.toLowerCase() < b.symbol.toLowerCase() ? -1 : 1 + } + return -1 +} +/** Sorts tokens by query, giving precedence to exact matches and partial matches. */ +function useSortTokensByQuery(query, tokens) { + return React.useMemo( + function () { + if (!tokens) { + return [] + } + var matches = query + .toLowerCase() + .split(/\s+/) + .filter(function (s) { + return s.length > 0 + }) + if (matches.length > 1) { + return tokens + } + var exactMatches = [] + var symbolSubtrings = [] + var rest = [] + // sort tokens by exact match -> subtring on symbol match -> rest + tokens.map(function (token) { + var _a, _b + if (((_a = token.symbol) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === matches[0]) { + return exactMatches.push(token) + } else if ( + (_b = token.symbol) === null || _b === void 0 + ? void 0 + : _b.toLowerCase().startsWith(query.toLowerCase().trim()) + ) { + return symbolSubtrings.push(token) + } else { + return rest.push(token) + } + }) + return __spreadArray( + __spreadArray(__spreadArray([], __read(exactMatches), false), __read(symbolSubtrings), false), + __read(rest), + false + ) + }, + [tokens, query] + ) +} + +/** + * Token instances created from token info on a token list. + */ +var WrappedTokenInfo = /** @class */ (function () { + function WrappedTokenInfo(tokenInfo, list) { + this.isNative = false + this.isToken = true + this._checksummedAddress = null + this._tags = null + this.tokenInfo = tokenInfo + this.list = list + } + Object.defineProperty(WrappedTokenInfo.prototype, 'address', { + get() { + if (this._checksummedAddress) return this._checksummedAddress + var checksummedAddress = isAddress(this.tokenInfo.address) + if (!checksummedAddress) throw new Error('Invalid token address: ' + this.tokenInfo.address) + return (this._checksummedAddress = checksummedAddress) + }, + enumerable: false, + configurable: true, + }) + Object.defineProperty(WrappedTokenInfo.prototype, 'chainId', { + get() { + return this.tokenInfo.chainId + }, + enumerable: false, + configurable: true, + }) + Object.defineProperty(WrappedTokenInfo.prototype, 'decimals', { + get() { + return this.tokenInfo.decimals + }, + enumerable: false, + configurable: true, + }) + Object.defineProperty(WrappedTokenInfo.prototype, 'name', { + get() { + return this.tokenInfo.name + }, + enumerable: false, + configurable: true, + }) + Object.defineProperty(WrappedTokenInfo.prototype, 'symbol', { + get() { + return this.tokenInfo.symbol + }, + enumerable: false, + configurable: true, + }) + Object.defineProperty(WrappedTokenInfo.prototype, 'logoURI', { + get() { + return this.tokenInfo.logoURI + }, + enumerable: false, + configurable: true, + }) + Object.defineProperty(WrappedTokenInfo.prototype, 'tags', { + get() { + var _a + if (this._tags !== null) return this._tags + if (!this.tokenInfo.tags) return (this._tags = []) + var listTags = (_a = this.list) === null || _a === void 0 ? void 0 : _a.tags + if (!listTags) return (this._tags = []) + return (this._tags = this.tokenInfo.tags.map(function (tagId) { + return __assign(__assign({}, listTags[tagId]), { id: tagId }) + })) + }, + enumerable: false, + configurable: true, + }) + WrappedTokenInfo.prototype.equals = function (other) { + return other.chainId === this.chainId && other.isToken && other.address.toLowerCase() === this.address.toLowerCase() + } + WrappedTokenInfo.prototype.sortsBefore = function (other) { + if (this.equals(other)) throw new Error('Addresses should not be equal') + return this.address.toLowerCase() < other.address.toLowerCase() + } + Object.defineProperty(WrappedTokenInfo.prototype, 'wrapped', { + get() { + return this + }, + enumerable: false, + configurable: true, + }) + return WrappedTokenInfo +})() + +var mapCache = typeof WeakMap !== 'undefined' ? new WeakMap() : null +function tokensToChainTokenMap(tokens) { + var cached = mapCache === null || mapCache === void 0 ? void 0 : mapCache.get(tokens) + if (cached) return cached + var _a = __read(Array.isArray(tokens) ? [undefined, tokens] : [tokens, tokens.tokens], 2), + list = _a[0], + infos = _a[1] + var map = infos.reduce(function (map, info) { + var _a + var token = new WrappedTokenInfo(info, list) + if (((_a = map[token.chainId]) === null || _a === void 0 ? void 0 : _a[token.address]) !== undefined) { + console.warn('Duplicate token skipped: ' + token.address) + return map + } + if (!map[token.chainId]) { + map[token.chainId] = {} + } + map[token.chainId][token.address] = { token, list } + return map + }, {}) + mapCache === null || mapCache === void 0 ? void 0 : mapCache.set(tokens, map) + return map +} + +jotai.atom({}) + +// parse a name or symbol from a token response +var BYTES32_REGEX = /^0x[a-fA-F0-9]{64}$/ +function parseStringOrBytes32(str, bytes32, defaultValue) { + return str && str.length > 0 + ? str + : // need to check for proper bytes string and valid terminator + bytes32 && BYTES32_REGEX.test(bytes32) && bytes.arrayify(bytes32)[31] === 0 + ? strings.parseBytes32String(bytes32) + : defaultValue +} +/** + * Returns a Token from the tokenAddress. + * Returns null if token is loading or null was passed. + * Returns undefined if tokenAddress is invalid or token does not exist. + */ +function useTokenFromMap(tokens, tokenAddress) { + var chainId = useActiveWeb3React().chainId + var address = isAddress(tokenAddress) + var tokenContract = useTokenContract(address ? address : undefined, false) + var tokenContractBytes32 = useBytes32TokenContract(address ? address : undefined, false) + var token = address ? tokens[address] : undefined + var tokenName = useSingleCallResult(token ? undefined : tokenContract, 'name', undefined, reduxMulticall.NEVER_RELOAD) + var tokenNameBytes32 = useSingleCallResult( + token ? undefined : tokenContractBytes32, + 'name', + undefined, + reduxMulticall.NEVER_RELOAD + ) + var symbol = useSingleCallResult(token ? undefined : tokenContract, 'symbol', undefined, reduxMulticall.NEVER_RELOAD) + var symbolBytes32 = useSingleCallResult( + token ? undefined : tokenContractBytes32, + 'symbol', + undefined, + reduxMulticall.NEVER_RELOAD + ) + var decimals = useSingleCallResult( + token ? undefined : tokenContract, + 'decimals', + undefined, + reduxMulticall.NEVER_RELOAD + ) + return React.useMemo( + function () { + var _a, _b, _c, _d + if (token) return token + if (tokenAddress === null) return null + if (!chainId || !address) return undefined + if (decimals.loading || symbol.loading || tokenName.loading) return null + if (decimals.result) { + return new sdkCore.Token( + chainId, + address, + decimals.result[0], + parseStringOrBytes32( + (_a = symbol.result) === null || _a === void 0 ? void 0 : _a[0], + (_b = symbolBytes32.result) === null || _b === void 0 ? void 0 : _b[0], + 'UNKNOWN' + ), + parseStringOrBytes32( + (_c = tokenName.result) === null || _c === void 0 ? void 0 : _c[0], + (_d = tokenNameBytes32.result) === null || _d === void 0 ? void 0 : _d[0], + 'Unknown Token' + ) + ) + } + return undefined + }, + [ + address, + chainId, + decimals.loading, + decimals.result, + symbol.loading, + symbol.result, + symbolBytes32.result, + token, + tokenAddress, + tokenName.loading, + tokenName.result, + tokenNameBytes32.result, + ] + ) +} +/** + * Returns a Currency from the currencyId. + * Returns null if currency is loading or null was passed. + * Returns undefined if currencyId is invalid or token does not exist. + */ +function useCurrencyFromMap(tokens, currencyId) { + var _a + var nativeCurrency = useNativeCurrency() + var isNative = Boolean( + nativeCurrency && (currencyId === null || currencyId === void 0 ? void 0 : currencyId.toUpperCase()) === 'ETH' + ) + var token = useTokenFromMap(tokens, isNative ? undefined : currencyId) + if (currencyId === null || currencyId === undefined) return currencyId + // this case so we use our builtin wrapped token instead of wrapped tokens on token lists + var wrappedNative = nativeCurrency === null || nativeCurrency === void 0 ? void 0 : nativeCurrency.wrapped + if ( + ((_a = wrappedNative === null || wrappedNative === void 0 ? void 0 : wrappedNative.address) === null || + _a === void 0 + ? void 0 + : _a.toUpperCase()) === (currencyId === null || currencyId === void 0 ? void 0 : currencyId.toUpperCase()) + ) + return wrappedNative + return isNative ? nativeCurrency : token +} + +var DEFAULT_LIST_PRIORITIES = DEFAULT_LIST_OF_LISTS.reduce(function (memo, listUrl, index) { + memo[listUrl] = index + 1 + return memo +}, {}) +// use ordering of default list of lists to assign priority +function sortByListPriority(urlA, urlB) { + if (DEFAULT_LIST_PRIORITIES[urlA] && DEFAULT_LIST_PRIORITIES[urlB]) { + return DEFAULT_LIST_PRIORITIES[urlA] - DEFAULT_LIST_PRIORITIES[urlB] + } + return 0 +} + +var name$1 = 'Broken Token List' +var timestamp$1 = '2021-01-05T20:47:02.923Z' +var version$1 = { + major: 1, + minor: 0, + patch: 0, +} +var tags$1 = {} +var logoURI$1 = 'ipfs://QmNa8mQkrNKp1WEEeGjFezDmDeodkWRevGFN8JCV7b4Xir' +var keywords$1 = ['uniswap', 'broken'] +var tokens$1 = [ + { + name: 'UNI HODL', + address: '0x4bf5dc91E2555449293D7824028Eb8Fe5879B689', + symbol: 'UniH', + decimals: 18, + chainId: 1, + logoURI: '', + }, +] +var BROKEN_LIST = { + name: name$1, + timestamp: timestamp$1, + version: version$1, + tags: tags$1, + logoURI: logoURI$1, + keywords: keywords$1, + tokens: tokens$1, +} + +var name = 'Unsupported Tokens' +var timestamp = '2021-01-05T20:47:02.923Z' +var version = { + major: 1, + minor: 0, + patch: 0, +} +var tags = {} +var logoURI = 'ipfs://QmNa8mQkrNKp1WEEeGjFezDmDeodkWRevGFN8JCV7b4Xir' +var keywords = ['uniswap', 'unsupported'] +var tokens = [ + { + name: 'Gold Tether', + address: '0x4922a015c4407F87432B179bb209e125432E4a2A', + symbol: 'XAUt', + decimals: 6, + chainId: 1, + logoURI: + 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4922a015c4407F87432B179bb209e125432E4a2A/logo.png', + }, + { + name: 'Grump Cat', + address: '0x93B2FfF814FCaEFFB01406e80B4Ecd89Ca6A021b', + symbol: 'GRUMPY', + decimals: 9, + chainId: 1, + logoURI: + 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4922a015c4407F87432B179bb209e125432E4a2A/logo.png', + }, + { + name: 'apeUSD-UMA Synthetic USD (Dec 2021)', + address: '0xfA5e27893aee4805283D86e4283Da64F8c72dd56', + symbol: 'apeUSD-UMA-DEC21', + decimals: 18, + chainId: 1, + logoURI: '', + }, + { + chainId: 1, + address: '0xc6b11850241c5127eab73af4b6c68bc267cbbff4', + name: 'oWETHp Put 360 DEC2520', + symbol: 'oWETH-360P-12/25/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oYFIp Put 25000 OCT0220', + address: '0x452b421be5b30f0c6ad8c3f03c06bdaab4f5c56c', + symbol: 'oYFI-25000P-10/02/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oWETHp Put 360 OCT3020', + address: '0x0578779e746d7186253a36cf651ea786acfcf087', + symbol: 'oWETH-360P-10/30/20', + decimals: 7, + }, + { + chainId: 1, + name: 'ETHc Call 500 OCT3020', + address: '0xf9aba2e43fb19184408ea3b572a0fd672946f87b', + symbol: 'oETH-500C-10/30/20', + decimals: 6, + }, + { + chainId: 1, + name: 'oBALp Put 22 OCT0220', + address: '0xdb0991dfc7e828b5a2837dc82d68e16490562c8d', + symbol: 'oBAL-22P-10/02/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oCOMPp Put 150 SEP2520', + address: '0xe951ebe6b4420ab3f4844cf36dedd263d095b416', + symbol: 'oCOMP-150P-09/25/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oCRVp Put 3 SEP252020', + address: '0x9215bd49b59748419eac6bad9dbe247df06ebdb9', + symbol: 'oCRV-3P-09/25/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oETHp Put 180 SEP2520', + address: '0xE3A2c34Fa2F59ffa95C4ACd1E5663633d45Bc3AD', + symbol: 'oETH-180P-09/25/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oETHc Call 400 SEP2520', + address: '0x05977EBC26825C0CD6097E0Ad7204721516711Eb', + symbol: 'oETH-400C-09/25/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oWETHp Put 380 SEP1820', + address: '0x31f88266301b08631f9f0e33fd5c43c2a5d1e5b2', + symbol: 'oWETH-380P-09/18/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oYFIp Put 8500 SEP1820', + address: '0xd1cec2f67fdc4c60e0963515dfc3343f31e32e47', + symbol: 'oYFI-8500P-09/18/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oWETHp Put 370 SEP1120', + address: '0x15844029b2c2bf24506e9937739a9a912f1e4354', + symbol: 'oWETH-370P-09/11/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oWETHp Put 400 SEP0420', + address: '0x5562c33c383f6386be4f6dcdbd35a3a99bbcfde6', + symbol: 'oWETH-400P-09/04/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oETHp Put 200 AUG2820', + address: '0x3CBFC1397deF0602c2d211c70A1c0c38CEDB5448', + symbol: 'oWETH-400P-09/04/20', + decimals: 7, + }, + { + chainId: 1, + name: 'Opyn cDai Insurance', + symbol: 'ocDai', + address: '0x98cc3bd6af1880fcfda17ac477b2f612980e5e33', + decimals: 8, + }, + { + chainId: 1, + name: 'Opyn cUSDC Insurance', + symbol: 'ocUSDC', + address: '0x8ED9f862363fFdFD3a07546e618214b6D59F03d4', + decimals: 8, + }, + { + chainId: 1, + address: '0x176C674Ee533C6139B0dc8b458D72A93dCB3e705', + symbol: 'iAAVE', + name: 'Synth Inverse Aave', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iAAVE.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x8A8079c7149B8A1611e5C5d978DCA3bE16545F83', + symbol: 'iADA', + name: 'Synth Inverse Cardano', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iADA.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0xAFD870F32CE54EfdBF677466B612bf8ad164454B', + symbol: 'iBNB', + name: 'Synth Inverse Binance Coin', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iBNB.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0xD6014EA05BDe904448B743833dDF07c3C7837481', + symbol: 'iBTC', + name: 'Synth Inverse Bitcoin', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iBTC.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x336213e1DDFC69f4701Fc3F86F4ef4A160c1159d', + symbol: 'iCEX', + name: 'Synth Inverse Centralised Exchange Index', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iCEX.svg', + tags: ['index', 'inverse', 'synth'], + }, + { + chainId: 1, + address: '0x6345728B1ccE16E6f8C509950b5c84FFF88530d9', + symbol: 'iCOMP', + name: 'Synth Inverse Compound', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iCOMP.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0xCB98f42221b2C251A4E74A1609722eE09f0cc08E', + symbol: 'iDASH', + name: 'Synth Inverse Dash', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDASH.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x14d10003807AC60d07BB0ba82cAeaC8d2087c157', + symbol: 'iDEFI', + name: 'Synth Inverse DeFi Index', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDEFI.svg', + tags: ['index', 'inverse', 'synth'], + }, + { + chainId: 1, + address: '0x46a97629C9C1F58De6EC18C7F536e7E6d6A6ecDe', + symbol: 'iDOT', + name: 'Synth Inverse Polkadot', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDOT.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0xF4EebDD0704021eF2a6Bbe993fdf93030Cd784b4', + symbol: 'iEOS', + name: 'Synth Inverse EOS', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iEOS.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0xd50c1746D835d2770dDA3703B69187bFfeB14126', + symbol: 'iETC', + name: 'Synth Inverse Ethereum Classic', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iETC.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0xA9859874e1743A32409f75bB11549892138BBA1E', + symbol: 'iETH', + name: 'Synth Inverse Ether', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iETH.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x2d7aC061fc3db53c39fe1607fB8cec1B2C162B01', + symbol: 'iLINK', + name: 'Synth Inverse Chainlink', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iLINK.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x79da1431150C9b82D2E5dfc1C68B33216846851e', + symbol: 'iLTC', + name: 'Synth Inverse Litecoin', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iLTC.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0xA5a5DF41883Cdc00c4cCC6E8097130535399d9a3', + symbol: 'iOIL', + name: 'Synth Inverse Perpetual Oil Futures', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iOIL.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x0fEd38108bdb8e62ef7b5680E8E0726E2F29e0De', + symbol: 'iREN', + name: 'Synth Inverse Ren', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iREN.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0xC5807183a9661A533CB08CbC297594a0B864dc12', + symbol: 'iTRX', + name: 'Synth Inverse TRON', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iTRX.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x36A00FF9072570eF4B9292117850B8FE08d96cce', + symbol: 'iUNI', + name: 'Synth Inverse Uniswap', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iUNI.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x4AdF728E2Df4945082cDD6053869f51278fae196', + symbol: 'iXMR', + name: 'Synth Inverse Monero', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXMR.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x27269b3e45A4D3E79A3D6BFeE0C8fB13d0D711A6', + symbol: 'iXRP', + name: 'Synth Inverse Ripple', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXRP.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x8deef89058090ac5655A99EEB451a4f9183D1678', + symbol: 'iXTZ', + name: 'Synth Inverse Tezos', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXTZ.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x592244301CeA952d6daB2fdC1fE6bd9E53917306', + symbol: 'iYFI', + name: 'Synth Inverse yearn.finance', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iYFI.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0xcD39b5434a0A92cf47D1F567a7dF84bE356814F0', + symbol: 's1INCH', + name: 'Synth 1inch', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/s1INCH.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x7537AAe01f3B218DAE75e10d952473823F961B87', + symbol: 'sAAPL', + name: 'Synth Apple', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAAPL.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xd2dF355C19471c8bd7D8A3aa27Ff4e26A21b4076', + symbol: 'sAAVE', + name: 'Synth Aave', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAAVE.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xe36E2D3c7c34281FA3bC737950a68571736880A1', + symbol: 'sADA', + name: 'Synth Cardano', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sADA.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x9CF7E61853ea30A41b02169391b393B901eac457', + symbol: 'sAMZN', + name: 'Synth Amazon', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAMZN.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xF48e200EAF9906362BB1442fca31e0835773b8B4', + symbol: 'sAUD', + name: 'Synth Australian Dollars', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAUD.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x617aeCB6137B5108D1E7D4918e3725C8cEbdB848', + symbol: 'sBNB', + name: 'Synth Binance Coin', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sBNB.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xfE18be6b3Bd88A2D2A7f928d00292E7a9963CfC6', + symbol: 'sBTC', + name: 'Synth Bitcoin', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sBTC.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xeABACD844A196D7Faf3CE596edeBF9900341B420', + symbol: 'sCEX', + name: 'Synth Centralised Exchange Index', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCEX.svg', + tags: ['index', 'synth'], + }, + { + chainId: 1, + address: '0x0F83287FF768D1c1e17a42F44d644D7F22e8ee1d', + symbol: 'sCHF', + name: 'Synth Swiss Franc', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCHF.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x9EeF4CA7aB9fa8bc0650127341C2d3F707a40f8A', + symbol: 'sCOIN', + name: 'Synth Coinbase', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCOIN.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xEb029507d3e043DD6C87F2917C4E82B902c35618', + symbol: 'sCOMP', + name: 'Synth Compound', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCOMP.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xD38aEb759891882e78E957c80656572503D8c1B1', + symbol: 'sCRV', + name: 'Synth Curve DAO Token', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCRV.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xfE33ae95A9f0DA8A845aF33516EDc240DCD711d6', + symbol: 'sDASH', + name: 'Synth Dash', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDASH.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xe1aFe1Fd76Fd88f78cBf599ea1846231B8bA3B6B', + symbol: 'sDEFI', + name: 'Synth DeFi Index', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDEFI.svg', + tags: ['index', 'synth'], + }, + { + chainId: 1, + address: '0x1715AC0743102BF5Cd58EfBB6Cf2dC2685d967b6', + symbol: 'sDOT', + name: 'Synth Polkadot', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDOT.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x88C8Cf3A212c0369698D13FE98Fcb76620389841', + symbol: 'sEOS', + name: 'Synth EOS', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sEOS.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x22602469d704BfFb0936c7A7cfcD18f7aA269375', + symbol: 'sETC', + name: 'Synth Ethereum Classic', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sETC.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x5e74C9036fb86BD7eCdcb084a0673EFc32eA31cb', + symbol: 'sETH', + name: 'Synth Ether', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sETH.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xD71eCFF9342A5Ced620049e616c5035F1dB98620', + symbol: 'sEUR', + name: 'Synth Euros', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sEUR.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xf50B5e535F62a56A9BD2d8e2434204E726c027Fa', + symbol: 'sFB', + name: 'Synth Facebook', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sFB.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x23348160D7f5aca21195dF2b70f28Fce2B0be9fC', + symbol: 'sFTSE', + name: 'Synth FTSE 100 Index', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sFTSE.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x97fe22E7341a0Cd8Db6F6C021A24Dc8f4DAD855F', + symbol: 'sGBP', + name: 'Synth Pound Sterling', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sGBP.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xC63B8ECCE56aB9C46184eC6aB85e4771fEa4c8AD', + symbol: 'sGOOG', + name: 'Synth Alphabet', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sGOOG.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xF6b1C627e95BFc3c1b4c9B825a032Ff0fBf3e07d', + symbol: 'sJPY', + name: 'Synth Japanese Yen', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sJPY.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x269895a3dF4D73b077Fc823dD6dA1B95f72Aaf9B', + symbol: 'sKRW', + name: 'Synth South Korean Won', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sKRW.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xbBC455cb4F1B9e4bFC4B73970d360c8f032EfEE6', + symbol: 'sLINK', + name: 'Synth Chainlink', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sLINK.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xC14103C2141E842e228FBaC594579e798616ce7A', + symbol: 'sLTC', + name: 'Synth Litecoin', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sLTC.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x745a824D6aBBD236AA794b5530062778A6Ad7523', + symbol: 'sMSFT', + name: 'Synth Microsoft', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sMSFT.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x5A7E3c07604EB515C16b36cd51906a65f021F609', + symbol: 'sNFLX', + name: 'Synth Netflix', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sNFLX.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x757de3ac6B830a931eF178C6634c5C551773155c', + symbol: 'sNIKKEI', + name: 'Synth Nikkei 225 Index', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sNIKKEI.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x6d16cF3EC5F763d4d99cB0B0b110eefD93B11B56', + symbol: 'sOIL', + name: 'Synth Perpetual Oil Futures', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sOIL.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xD31533E8d0f3DF62060e94B3F1318137bB6E3525', + symbol: 'sREN', + name: 'Synth Ren', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sREN.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x0352557B007A4Aae1511C114409b932F06F9E2f4', + symbol: 'sRUNE', + name: 'Synth THORChain', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sRUNE.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xf2E08356588EC5cd9E437552Da87C0076b4970B0', + symbol: 'sTRX', + name: 'Synth TRON', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sTRX.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x918dA91Ccbc32B7a6A0cc4eCd5987bbab6E31e6D', + symbol: 'sTSLA', + name: 'Synth Tesla', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sTSLA.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x30635297E450b930f8693297eBa160D9e6c8eBcf', + symbol: 'sUNI', + name: 'Synth Uniswap', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sUNI.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x6A22e5e94388464181578Aa7A6B869e00fE27846', + symbol: 'sXAG', + name: 'Synth Silver Ounce', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXAG.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x261EfCdD24CeA98652B9700800a13DfBca4103fF', + symbol: 'sXAU', + name: 'Synth Gold Ounce', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXAU.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x5299d6F7472DCc137D7f3C4BcfBBB514BaBF341A', + symbol: 'sXMR', + name: 'Synth Monero', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXMR.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xa2B0fDe6D710e201d0d608e924A484d1A5fEd57c', + symbol: 'sXRP', + name: 'Synth Ripple', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXRP.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x2e59005c5c0f0a4D77CcA82653d48b46322EE5Cd', + symbol: 'sXTZ', + name: 'Synth Tezos', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXTZ.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x992058B7DB08F9734d84485bfbC243C4ee6954A7', + symbol: 'sYFI', + name: 'Synth yearn.finance', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sYFI.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x81ab848898b5ffD3354dbbEfb333D5D183eEDcB5', + name: 'yUSD Synthetic Expiring 1 September 2020', + symbol: 'yUSDSEP20', + decimals: 18, + }, + { + chainId: 1, + address: '0xB2FdD60AD80ca7bA89B9BAb3b5336c2601C020b4', + name: 'yUSD Synthetic Expiring 1 October 2020', + symbol: 'yUSDOCT20', + decimals: 18, + }, + { + chainId: 1, + address: '0x208d174775dc39fe18b1b374972f77ddec6c0f73', + name: 'uUSDrBTC Synthetic Expiring 1 Oct 2020', + symbol: 'uUSDrBTC-OCT', + decimals: 18, + }, + { + chainId: 1, + address: '0xf06ddacf71e2992e2122a1a0168c6967afdf63ce', + name: 'uUSDrBTC Synthetic Expiring 31 Dec 2020', + symbol: 'uUSDrBTC-DEC', + decimals: 18, + }, + { + chainId: 1, + address: '0xd16c79c8a39d44b2f3eb45d2019cd6a42b03e2a9', + name: 'uUSDwETH Synthetic Expiring 31 Dec 2020', + symbol: 'uUSDwETH-DEC', + decimals: 18, + }, + { + chainId: 1, + address: '0x3d995510f8d82c2ea341845932b5ddde0bead9a3', + name: 'uGAS-JAN21 Token Expiring 31 Jan 2021', + symbol: 'uGAS-JAN21', + decimals: 18, + }, + { + chainId: 1, + address: '0x90f802c7e8fb5d40b0de583e34c065a3bd2020d8', + name: 'YD-ETH-MAR21 Token Expiring 31 Mar 2021', + symbol: 'YD-ETH-MAR21', + decimals: 18, + }, + { + chainId: 1, + address: '0x002f0b1a71c5730cf2f4da1970a889207bdb6d0d', + name: 'YD-BTC-MAR21 Token Expiring 31 Mar 2021', + symbol: 'YD-BTC-MAR21', + decimals: 18, + }, + { + chainId: 1, + address: '0x1062ad0e59fa67fa0b27369113098cc941dd0d5f', + name: 'UMA 35 Call Expirying 30 Apr 2021', + symbol: 'UMAc35-0421', + decimals: 18, + }, + { + chainId: 1, + address: '0xf93340b1a3adf7eedcaec25fae8171d4b736e89f', + name: 'pxUSD Synthetic USD Expiring 1 April 2021', + symbol: 'pxUSD_MAR2021', + decimals: 18, + }, + { + chainId: 1, + address: '0x84bd083b1c8bf929f39c98bc17cf518f40154f58', + name: 'Mario Cash Synthetic Token Expiring 15 January 2021', + symbol: 'Mario Cash-JAN-2021', + decimals: 18, + }, + { + chainId: 1, + address: '0x81fab276aec924fbde190cf379783526d413cf70', + name: 'uGAS-FEB21 Token Expiring 28 Feb 2021', + symbol: 'uGAS-FEB21', + decimals: 18, + }, + { + chainId: 1, + address: '0x4e110603e70b0b5f1c403ee543b37e1f1244cf28', + name: 'uGAS-MAR21 Token Expiring 31 Mar 2021', + symbol: 'uGAS-MAR21', + decimals: 18, + }, + { + chainId: 1, + address: '0xcf55a7f92d5e0c6683debbc1fc20c0a6e056df13', + name: 'Zelda Elastic Cash', + symbol: 'Zelda Elastic Cash', + decimals: 18, + }, + { + chainId: 1, + address: '0x654eebac62240e6c56bab5f6adf7cfa74a894510', + name: 'Zelda Spring Nuts Cash', + symbol: 'Zelda Spring Nuts Cash', + decimals: 18, + }, + { + chainId: 1, + address: '0xa48920cc1ad85d8ea13af5d7be180c0338c306dd', + name: 'Zelda Summer Nuts Cash', + symbol: 'Zelda Summer Nuts Cash', + decimals: 18, + }, + { + chainId: 1, + address: '0x249a198d59b57fda5dda90630febc86fd8c7594c', + name: 'Zelda Whirlwind Cash', + symbol: 'Zelda Whirlwind Cash', + decimals: 18, + }, + { + chainId: 1, + address: '0x5ed1406873c9eb91f6f9a67ac4e152387c1132e7', + name: 'Zelda Reinforced Cash', + symbol: 'Zelda Reinforced Cash', + decimals: 18, + }, + { + chainId: 1, + address: '0x8104c9f13118320eefe5fbea8a44d600b85981ef', + name: 'Mini Mario Summer Cash', + symbol: 'Mini Mario Summer Cash', + decimals: 18, + }, + { + chainId: 1, + address: '0x69746c719e59674b147df25f50e7cfa0673cb625', + name: 'Mini Mario Spring Cash', + symbol: 'Mini Mario Spring Cash', + decimals: 18, + }, + { + chainId: 1, + address: '0x6b1257641d18791141f025eab36fb567c4b564ff', + name: 'Bitcoin Dominance Token 31 March 2021', + symbol: 'BTCDOM-MAR2021', + decimals: 18, + }, + { + chainId: 1, + address: '0x4e83b6287588a96321b2661c5e041845ff7814af', + name: 'Altcoin Dominance Token 31 March 2021', + symbol: 'ALTDOM-MAR2021', + decimals: 18, + }, + { + chainId: 1, + address: '0x59fec83ec709c893aedd1a144cf1828eb04127cd', + name: 'pxGOLD Synthetic GOLD Expiring 31 May 2021', + symbol: 'pxGOLD_MAY2021', + decimals: 18, + }, + { + chainId: 1, + address: '0x89337BFb7938804c3776C9FB921EccAf5ab76758', + name: 'Compound Annualized Rate Future Expiring 28 March 2021', + symbol: 'CAR-USDC-MAR21', + decimals: 18, + }, + { + chainId: 1, + address: '0xec58d3aefc9aaa2e0036fa65f70d569f49d9d1ed', + name: 'uSTONKS Index Token April 2021', + symbol: 'uSTONKS_APR21', + decimals: 6, + }, + { + chainId: 1, + address: '0xa6B9d7E3d76cF23549293Fb22c488E0Ea591A44e', + name: 'uGAS-JUN21 Token Expiring 30 Jun 2021', + symbol: 'uGAS-JUN21', + decimals: 18, + }, + { + chainId: 1, + address: '0xe813b65da6c38a04591aed3f082d32db7d53c382', + name: 'Yield Dollar [WETH Dec 2021]', + symbol: 'YD-ETH-DEC21', + decimals: 18, + }, + { + chainId: 1, + address: '0x4b606e9eb2228c70f44453afe5a73e1fea258ce1', + name: 'pxUSD Synthetic USD Expiring 31 Mar 2022', + symbol: 'pxUSD_MAR2022', + decimals: 18, + }, + { + chainId: 1, + address: '0x5247c0db4044fb6f97f32c7e1b48758019a5a912', + name: 'pxGOLD Synthetic Gold Expiring 31 Mar 2022', + symbol: 'pxGOLD_MAR2022', + decimals: 18, + }, + { + chainId: 1, + address: '0x56fb1acaff95c0b6ebcd17c8361a63d98b1a5a11', + name: 'uForex CNYUSD Synthetic Token April 2021', + symbol: 'uCNYUSD-APR', + decimals: 6, + }, + { + chainId: 1, + address: '0xd49fa405dce086c65d66ca1ca41f8e98583812b4', + name: 'uForex EURUSD Synthetic Token April 2021', + symbol: 'uEURUSD-APR', + decimals: 6, + }, + { + chainId: 1, + address: '0x29dddacba3b231ee8d673dd0f0fa759ea145561b', + name: 'DEFI_PULSE_TOTAL_TVL Synthetic Token Expiring 15 April 2021', + symbol: 'TVL_ALL_APRIL15', + decimals: 6, + }, + { + chainId: 1, + address: '0xcbe430927370e95b4b10cfc702c6017ec7abefc3', + name: 'Yield Dollar [WETH Jun 2021]', + symbol: 'YD-ETH-JUN21', + decimals: 18, + }, + { + chainId: 1, + address: '0x4b7fb448df91c8ed973494f8c8c4f12daf3a8521', + name: 'Yield Dollar [renBTC Jun 2021]', + symbol: 'YD-BTC-JUN21', + decimals: 8, + }, + { + chainId: 1, + address: '0x3108c33b6fb38efedaefd8b5f7ca01d5f5c7372d', + name: 'Yield Dollar UMA 21', + symbol: 'yUMA21', + decimals: 18, + }, + { + chainId: 1, + address: '0x0cae9e4d663793c2a2A0b211c1Cf4bBca2B9cAa7', + name: 'Mirrored Amazon', + symbol: 'MAMZN', + decimals: 18, + }, + { + chainId: 1, + address: '0x31c63146a635EB7465e5853020b39713AC356991', + name: 'M US Oil', + symbol: 'MUSO', + decimals: 18, + }, + { + chainId: 1, + address: '0x59A921Db27Dd6d4d974745B7FfC5c33932653442', + name: 'M Google', + symbol: 'MGOOGL', + decimals: 18, + }, + { + chainId: 1, + address: '0xf72FCd9DCF0190923Fadd44811E240Ef4533fc86', + name: 'Mirrored ProShares', + symbol: 'MVIXY', + decimals: 18, + }, + { + chainId: 1, + address: '0x56aA298a19C93c6801FDde870fA63EF75Cc0aF72', + name: 'Mirrored Alibaba', + symbol: 'MBABA', + decimals: 18, + }, + { + chainId: 1, + address: '0x0e99cC0535BB6251F6679Fa6E65d6d3b430e840B', + name: 'Mirrored Facebook', + symbol: 'MFB', + decimals: 18, + }, + { + chainId: 1, + address: '0x13B02c8dE71680e71F0820c996E4bE43c2F57d15', + name: 'Mirrored Invesco QQ', + symbol: 'MQQQ', + decimals: 18, + }, + { + chainId: 1, + address: '0x41BbEDd7286dAab5910a1f15d12CBda839852BD7', + name: 'Mirrored Microsoft', + symbol: 'MMSFT', + decimals: 18, + }, + { + chainId: 1, + address: '0x9d1555d8cB3C846Bb4f7D5B1B1080872c3166676', + name: 'Mirrored iShares Si', + symbol: 'MSLV', + decimals: 18, + }, + { + chainId: 1, + address: '0x21cA39943E91d704678F5D00b6616650F066fD63', + name: 'Mirrored Tesla', + symbol: 'MTSLA', + decimals: 18, + }, + { + chainId: 1, + address: '0xe82bbB62fA81d0701643d1675FB50ec52fD3Df92', + name: 'DYDX Token', + symbol: 'DYDX', + decimals: 18, + }, + { + chainId: 10, + address: '0xE405de8F52ba7559f9df3C368500B6E6ae6Cee49', + name: 'sETH', + symbol: 'Synth Ether', + decimals: 18, + }, + { + chainId: 10, + address: '0x298B9B95708152ff6968aafd889c6586e9169f1D', + name: 'sBTC', + symbol: 'Synth Bitcoin', + decimals: 18, + }, + { + chainId: 10, + address: '0xc5Db22719A06418028A40A9B5E9A7c02959D0d08', + name: 'sLINK', + symbol: 'Synth Link', + decimals: 18, + }, + { + chainId: 1, + address: '0x6B60eE11b73230045cF9095E6e43AE9Ea638e172', + name: 'Shatner', + symbol: 'SHAT', + decimals: 18, + }, + { + chainId: 1, + address: '0x7277a44D1325D81Ac58893002a1B40a41bea43fe', + name: 'FAANG Index', + symbol: 'FAANG', + decimals: 18, + }, + { + chainId: 1, + address: '0x76175599887730786bdA1545D0D7AcE8737fEBB1', + name: 'ENS DAO', + symbol: 'ENS', + decimals: 18, + }, + { + chainId: 1, + address: '0xa82AA729AE2F0d78e961D66db53949e27a9E866d', + name: 'BMEX', + symbol: 'BMEX', + decimals: 18, + }, +] +var UNSUPPORTED_TOKEN_LIST = { + name, + timestamp, + version, + tags, + logoURI, + keywords, + tokens, +} + +function useAllLists() { + return useAppSelector(function (state) { + return state.lists.byUrl + }) +} +/** + * Combine the tokens in map2 with the tokens on map1, where tokens on map1 take precedence + * @param map1 the base token map + * @param map2 the map of additioanl tokens to add to the base map + */ +function combineMaps(map1, map2) { + var chainIds = Object.keys( + Object.keys(map1) + .concat(Object.keys(map2)) + .reduce(function (memo, value) { + memo[value] = true + return memo + }, {}) + ).map(function (id) { + return parseInt(id) + }) + return chainIds.reduce(function (memo, chainId) { + memo[chainId] = __assign(__assign({}, map2[chainId]), map1[chainId]) + return memo + }, {}) +} +// merge tokens contained within lists from urls +function useCombinedTokenMapFromUrls(urls) { + var lists = useAllLists() + return React.useMemo( + function () { + if (!urls) return {} + return ( + urls + .slice() + // sort by priority so top priority goes last + .sort(sortByListPriority) + .reduce(function (allTokens, currentUrl) { + var _a + var current = (_a = lists[currentUrl]) === null || _a === void 0 ? void 0 : _a.current + if (!current) return allTokens + try { + return combineMaps(allTokens, tokensToChainTokenMap(current)) + } catch (error) { + console.error('Could not show token list due to error', error) + return allTokens + } + }, {}) + ) + }, + [lists, urls] + ) +} +// filter out unsupported lists +function useActiveListUrls() { + var activeListUrls = useAppSelector(function (state) { + return state.lists.activeListUrls + }) + return React.useMemo( + function () { + return activeListUrls === null || activeListUrls === void 0 + ? void 0 + : activeListUrls.filter(function (url) { + return !UNSUPPORTED_LIST_URLS.includes(url) + }) + }, + [activeListUrls] + ) +} +function useInactiveListUrls() { + var lists = useAllLists() + var allActiveListUrls = useActiveListUrls() + return React.useMemo( + function () { + return Object.keys(lists).filter(function (url) { + return ( + !(allActiveListUrls === null || allActiveListUrls === void 0 ? void 0 : allActiveListUrls.includes(url)) && + !UNSUPPORTED_LIST_URLS.includes(url) + ) + }) + }, + [lists, allActiveListUrls] + ) +} +// get all the tokens from active lists, combine with local default tokens +function useCombinedActiveList() { + var activeListUrls = useActiveListUrls() + var activeTokens = useCombinedTokenMapFromUrls(activeListUrls) + return activeTokens +} +// list of tokens not supported on interface for various reasons, used to show warnings and prevent swaps and adds +function useUnsupportedTokenList() { + // get hard-coded broken tokens + var brokenListMap = React.useMemo(function () { + return tokensToChainTokenMap(BROKEN_LIST) + }, []) + // get hard-coded list of unsupported tokens + var localUnsupportedListMap = React.useMemo(function () { + return tokensToChainTokenMap(UNSUPPORTED_TOKEN_LIST) + }, []) + // get dynamic list of unsupported tokens + var loadedUnsupportedListMap = useCombinedTokenMapFromUrls(UNSUPPORTED_LIST_URLS) + // format into one token address map + return React.useMemo( + function () { + return combineMaps(brokenListMap, combineMaps(localUnsupportedListMap, loadedUnsupportedListMap)) + }, + [brokenListMap, localUnsupportedListMap, loadedUnsupportedListMap] + ) +} +function useIsListActive(url) { + var activeListUrls = useActiveListUrls() + return Boolean(activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(url)) +} -var _a$9; -// List of supported subgraphs. Note that the app currently only support one active subgraph at a time -var CHAIN_SUBGRAPH_URL = (_a$9 = {}, - _a$9[SupportedChainId.MAINNET] = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3', - _a$9[SupportedChainId.RINKEBY] = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3', - _a$9[SupportedChainId.ARBITRUM_ONE] = 'https://api.thegraph.com/subgraphs/name/ianlapham/arbitrum-minimal', - _a$9[SupportedChainId.OPTIMISM] = 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-optimism-dev', - _a$9[SupportedChainId.POLYGON] = 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-v3-polygon', - _a$9); -var api$1 = react.createApi({ - reducerPath: 'dataApi', - baseQuery: graphqlRequestBaseQuery(), - endpoints: function (builder) { return ({ - allV3Ticks: builder.query({ - query: function (_a) { - var poolAddress = _a.poolAddress, _b = _a.skip, skip = _b === void 0 ? 0 : _b; - return ({ - document: graphqlRequest.gql(templateObject_1$1c || (templateObject_1$1c = __makeTemplateObject(["\n query allV3Ticks($poolAddress: String!, $skip: Int!) {\n ticks(first: 1000, skip: $skip, where: { poolAddress: $poolAddress }, orderBy: tickIdx) {\n tick: tickIdx\n liquidityNet\n price0\n price1\n }\n }\n "], ["\n query allV3Ticks($poolAddress: String!, $skip: Int!) {\n ticks(first: 1000, skip: $skip, where: { poolAddress: $poolAddress }, orderBy: tickIdx) {\n tick: tickIdx\n liquidityNet\n price0\n price1\n }\n }\n "]))), - variables: { - poolAddress: poolAddress, - skip: skip, - }, - }); - }, - }), - feeTierDistribution: builder.query({ - query: function (_a) { - var token0 = _a.token0, token1 = _a.token1; - return ({ - document: graphqlRequest.gql(templateObject_2$S || (templateObject_2$S = __makeTemplateObject(["\n query feeTierDistribution($token0: String!, $token1: String!) {\n _meta {\n block {\n number\n }\n }\n asToken0: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token0, token1: $token1 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n asToken1: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token1, token1: $token0 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n }\n "], ["\n query feeTierDistribution($token0: String!, $token1: String!) {\n _meta {\n block {\n number\n }\n }\n asToken0: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token0, token1: $token1 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n asToken1: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token1, token1: $token0 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n }\n "]))), - variables: { - token0: token0, - token1: token1, - }, - }); - }, - }), - }); }, -}); -// Graphql query client wrapper that builds a dynamic url based on chain id -function graphqlRequestBaseQuery() { - var _this = this; - return function (_a, _b) { - var document = _a.document, variables = _a.variables; - var getState = _b.getState; - return __awaiter(_this, void 0, void 0, function () { - var chainId, subgraphUrl, error_1, name_1, message, stack, request, response; - var _c; - return __generator(this, function (_d) { - switch (_d.label) { - case 0: - _d.trys.push([0, 2, , 3]); - chainId = getState().application.chainId; - subgraphUrl = chainId ? CHAIN_SUBGRAPH_URL[chainId] : undefined; - if (!subgraphUrl) { - return [2 /*return*/, { - error: { - name: 'UnsupportedChainId', - message: "Subgraph queries against ChainId " + chainId + " are not supported.", - stack: '', - }, - }]; - } - _c = {}; - return [4 /*yield*/, new graphqlRequest.GraphQLClient(subgraphUrl).request(document, variables)]; - case 1: return [2 /*return*/, (_c.data = _d.sent(), _c.meta = {}, _c)]; - case 2: - error_1 = _d.sent(); - if (error_1 instanceof graphqlRequest.ClientError) { - name_1 = error_1.name, message = error_1.message, stack = error_1.stack, request = error_1.request, response = error_1.response; - return [2 /*return*/, { error: { name: name_1, message: message, stack: stack }, meta: { request: request, response: response } }]; - } - throw error_1; - case 3: return [2 /*return*/]; - } - }); - }); - }; -} -var templateObject_1$1c, templateObject_2$S; +// reduce token map into standard address <-> Token mapping, optionally include user added tokens +function useTokensFromMap(tokenMap, includeUserAdded) { + var chainId = useActiveWeb3React().chainId + var userAddedTokens = useUserAddedTokens() + return React.useMemo( + function () { + var _a + if (!chainId) return {} + // reduce to just tokens + var mapWithoutUrls = Object.keys((_a = tokenMap[chainId]) !== null && _a !== void 0 ? _a : {}).reduce(function ( + newMap, + address + ) { + newMap[address] = tokenMap[chainId][address].token + return newMap + }, + {}) + if (includeUserAdded) { + return ( + userAddedTokens + // reduce into all ALL_TOKENS filtered by the current chain + .reduce(function (tokenMap, token) { + tokenMap[token.address] = token + return tokenMap + }, __assign({}, mapWithoutUrls)) + ) + } + return mapWithoutUrls + }, + [chainId, userAddedTokens, tokenMap, includeUserAdded] + ) +} +function useAllTokens() { + var allTokens = useCombinedActiveList() + return useTokensFromMap(allTokens, true) +} +function useUnsupportedTokens() { + var chainId = useActiveWeb3React().chainId + var listsByUrl = useAllLists() + var unsupportedTokensMap = useUnsupportedTokenList() + var unsupportedTokens = useTokensFromMap(unsupportedTokensMap, false) + // checks the default L2 lists to see if `bridgeInfo` has an L1 address value that is unsupported + var l2InferredBlockedTokens = React.useMemo( + function () { + if (!chainId || !L2_CHAIN_IDS.includes(chainId)) { + return {} + } + if (!listsByUrl) { + return {} + } + var listUrl = CHAIN_INFO[chainId].defaultListUrl + var list = listsByUrl[listUrl].current + if (!list) { + return {} + } + var unsupportedSet = new Set(Object.keys(unsupportedTokens)) + return list.tokens.reduce(function (acc, tokenInfo) { + var _a + var _b + var bridgeInfo = (_b = tokenInfo.extensions) === null || _b === void 0 ? void 0 : _b.bridgeInfo + if ( + bridgeInfo && + bridgeInfo[SupportedChainId.MAINNET] && + bridgeInfo[SupportedChainId.MAINNET].tokenAddress && + unsupportedSet.has(bridgeInfo[SupportedChainId.MAINNET].tokenAddress) + ) { + var address = bridgeInfo[SupportedChainId.MAINNET].tokenAddress + // don't rely on decimals--it's possible that a token could be bridged w/ different decimals on the L2 + return __assign( + __assign({}, acc), + ((_a = {}), (_a[address] = new sdkCore.Token(SupportedChainId.MAINNET, address, tokenInfo.decimals)), _a) + ) + } + return acc + }, {}) + }, + [chainId, listsByUrl, unsupportedTokens] + ) + return __assign(__assign({}, unsupportedTokens), l2InferredBlockedTokens) +} +function useSearchInactiveTokenLists(search, minResults) { + if (minResults === void 0) { + minResults = 10 + } + var lists = useAllLists() + var inactiveUrls = useInactiveListUrls() + var chainId = useActiveWeb3React().chainId + var activeTokens = useAllTokens() + return React.useMemo( + function () { + var e_1, _a, e_2, _b + if (!search || search.trim().length === 0) return [] + var tokenFilter = getTokenFilter(search) + var result = [] + var addressSet = {} + try { + for ( + var inactiveUrls_1 = __values(inactiveUrls), inactiveUrls_1_1 = inactiveUrls_1.next(); + !inactiveUrls_1_1.done; + inactiveUrls_1_1 = inactiveUrls_1.next() + ) { + var url = inactiveUrls_1_1.value + var list = lists[url].current + if (!list) continue + try { + for (var _c = ((e_2 = void 0), __values(list.tokens)), _d = _c.next(); !_d.done; _d = _c.next()) { + var tokenInfo = _d.value + if (tokenInfo.chainId === chainId && tokenFilter(tokenInfo)) { + var wrapped = new WrappedTokenInfo(tokenInfo, list) + if (!(wrapped.address in activeTokens) && !addressSet[wrapped.address]) { + addressSet[wrapped.address] = true + result.push(wrapped) + if (result.length >= minResults) return result + } + } + } + } catch (e_2_1) { + e_2 = { error: e_2_1 } + } finally { + try { + if (_d && !_d.done && (_b = _c.return)) _b.call(_c) + } finally { + if (e_2) throw e_2.error + } + } + } + } catch (e_1_1) { + e_1 = { error: e_1_1 } + } finally { + try { + if (inactiveUrls_1_1 && !inactiveUrls_1_1.done && (_a = inactiveUrls_1.return)) _a.call(inactiveUrls_1) + } finally { + if (e_1) throw e_1.error + } + } + return result + }, + [activeTokens, chainId, inactiveUrls, lists, minResults, search] + ) +} +function useIsTokenActive(token) { + var activeTokens = useAllTokens() + if (!activeTokens || !token) { + return false + } + return !!activeTokens[token.address] +} +// Check if currency is included in custom list from user storage +function useIsUserAddedToken(currency) { + var userAddedTokens = useUserAddedTokens() + if (!currency) { + return false + } + return !!userAddedTokens.find(function (token) { + return currency.equals(token) + }) +} +// undefined if invalid or does not exist +// null if loading or null was passed +// otherwise returns the token +function useToken(tokenAddress) { + var tokens = useAllTokens() + return useTokenFromMap(tokens, tokenAddress) +} +function useCurrency(currencyId) { + var tokens = useAllTokens() + return useCurrencyFromMap(tokens, currencyId) +} -// fired once when the app reloads but before the app renders -// allows any updates to be applied to store data loaded from localStorage -var updateVersion = toolkit.createAction('global/updateVersion'); +function serializeToken(token) { + return { + chainId: token.chainId, + address: token.address, + decimals: token.decimals, + symbol: token.symbol, + name: token.name, + } +} +function deserializeToken(serializedToken) { + return new sdkCore.Token( + serializedToken.chainId, + serializedToken.address, + serializedToken.decimals, + serializedToken.symbol, + serializedToken.name + ) +} +function useIsDarkMode() { + var _a = useAppSelector(function (_a) { + var _b = _a.user, + matchesDarkMode = _b.matchesDarkMode, + userDarkMode = _b.userDarkMode + return { + userDarkMode, + matchesDarkMode, + } + }, reactRedux.shallowEqual), + userDarkMode = _a.userDarkMode, + matchesDarkMode = _a.matchesDarkMode + return userDarkMode === null ? matchesDarkMode : userDarkMode +} +function useDarkModeManager() { + var dispatch = useAppDispatch() + var darkMode = useIsDarkMode() + var toggleSetDarkMode = React.useCallback( + function () { + dispatch(updateUserDarkMode({ userDarkMode: !darkMode })) + }, + [darkMode, dispatch] + ) + return [darkMode, toggleSetDarkMode] +} +function useUserLocale() { + return useAppSelector(function (state) { + return state.user.userLocale + }) +} +function useUserLocaleManager() { + var dispatch = useAppDispatch() + var locale = useUserLocale() + var setLocale = React.useCallback( + function (newLocale) { + dispatch(updateUserLocale({ userLocale: newLocale })) + }, + [dispatch] + ) + return [locale, setLocale] +} +function useIsExpertMode() { + return useAppSelector(function (state) { + return state.user.userExpertMode + }) +} +function useExpertModeManager() { + var dispatch = useAppDispatch() + var expertMode = useIsExpertMode() + var toggleSetExpertMode = React.useCallback( + function () { + dispatch(updateUserExpertMode({ userExpertMode: !expertMode })) + }, + [expertMode, dispatch] + ) + return [expertMode, toggleSetExpertMode] +} +function useShowSurveyPopup() { + var dispatch = useAppDispatch() + var showSurveyPopup = useAppSelector(function (state) { + return state.user.showSurveyPopup + }) + var toggleShowSurveyPopup = React.useCallback( + function (showPopup) { + dispatch(updateShowSurveyPopup({ showSurveyPopup: showPopup })) + }, + [dispatch] + ) + return [showSurveyPopup, toggleShowSurveyPopup] +} +function useClientSideRouter() { + var dispatch = useAppDispatch() + var clientSideRouter = useAppSelector(function (state) { + return Boolean(state.user.userClientSideRouter) + }) + var setClientSideRouter = React.useCallback( + function (newClientSideRouter) { + dispatch(updateUserClientSideRouter({ userClientSideRouter: newClientSideRouter })) + }, + [dispatch] + ) + return [clientSideRouter, setClientSideRouter] +} +function useSetUserSlippageTolerance() { + var dispatch = useAppDispatch() + return React.useCallback( + function (userSlippageTolerance) { + var value + try { + value = + userSlippageTolerance === 'auto' + ? 'auto' + : JSBI__default['default'].toNumber(userSlippageTolerance.multiply(10000).quotient) + } catch (error) { + value = 'auto' + } + dispatch( + updateUserSlippageTolerance({ + userSlippageTolerance: value, + }) + ) + }, + [dispatch] + ) +} +/** + * Return the user's slippage tolerance, from the redux store, and a function to update the slippage tolerance + */ +function useUserSlippageTolerance() { + var userSlippageTolerance = useAppSelector(function (state) { + return state.user.userSlippageTolerance + }) + return React.useMemo( + function () { + return userSlippageTolerance === 'auto' ? 'auto' : new sdkCore.Percent(userSlippageTolerance, 10000) + }, + [userSlippageTolerance] + ) +} +/** + * Same as above but replaces the auto with a default value + * @param defaultSlippageTolerance the default value to replace auto with + */ +function useUserSlippageToleranceWithDefault(defaultSlippageTolerance) { + var allowedSlippage = useUserSlippageTolerance() + return React.useMemo( + function () { + return allowedSlippage === 'auto' ? defaultSlippageTolerance : allowedSlippage + }, + [allowedSlippage, defaultSlippageTolerance] + ) +} +function useUserTransactionTTL() { + var chainId = useActiveWeb3React().chainId + var dispatch = useAppDispatch() + var userDeadline = useAppSelector(function (state) { + return state.user.userDeadline + }) + var onL2 = Boolean(chainId && L2_CHAIN_IDS.includes(chainId)) + var deadline = onL2 ? L2_DEADLINE_FROM_NOW : userDeadline + var setUserDeadline = React.useCallback( + function (userDeadline) { + dispatch(updateUserDeadline({ userDeadline })) + }, + [dispatch] + ) + return [deadline, setUserDeadline] +} +function useAddUserToken() { + var dispatch = useAppDispatch() + return React.useCallback( + function (token) { + dispatch(addSerializedToken({ serializedToken: serializeToken(token) })) + }, + [dispatch] + ) +} +function useRemoveUserAddedToken() { + var dispatch = useAppDispatch() + return React.useCallback( + function (chainId, address) { + dispatch(removeSerializedToken({ chainId, address })) + }, + [dispatch] + ) +} +function useUserAddedTokens() { + var chainId = useActiveWeb3React().chainId + var serializedTokensMap = useAppSelector(function (_a) { + var tokens = _a.user.tokens + return tokens + }) + return React.useMemo( + function () { + if (!chainId) return [] + var tokenMap = ( + serializedTokensMap === null || serializedTokensMap === void 0 ? void 0 : serializedTokensMap[chainId] + ) + ? Object.values(serializedTokensMap[chainId]).map(deserializeToken) + : [] + return tokenMap + }, + [serializedTokensMap, chainId] + ) +} +function useURLWarningVisible() { + return useAppSelector(function (state) { + return state.user.URLWarningVisible + }) +} -var fetchTokenList = { - pending: toolkit.createAction('lists/fetchTokenList/pending'), - fulfilled: toolkit.createAction('lists/fetchTokenList/fulfilled'), - rejected: toolkit.createAction('lists/fetchTokenList/rejected'), -}; -// add and remove from list options -var addList = toolkit.createAction('lists/addList'); -var removeList = toolkit.createAction('lists/removeList'); -// select which lists to search across from loaded lists -var enableList = toolkit.createAction('lists/enableList'); -var disableList = toolkit.createAction('lists/disableList'); -// versioning -var acceptListUpdate = toolkit.createAction('lists/acceptListUpdate'); - -var NEW_LIST_STATE = { - error: null, - current: null, - loadingRequestId: null, - pendingUpdate: null, -}; -var initialState$5 = { - lastInitializedDefaultListOfLists: DEFAULT_LIST_OF_LISTS, - byUrl: __assign({}, DEFAULT_LIST_OF_LISTS.reduce(function (memo, listUrl) { - memo[listUrl] = NEW_LIST_STATE; - return memo; - }, {})), - activeListUrls: DEFAULT_ACTIVE_LIST_URLS, -}; -var lists = toolkit.createReducer(initialState$5, function (builder) { - return builder - .addCase(fetchTokenList.pending, function (state, _a) { - var _b, _c, _d, _e; - var _f = _a.payload, requestId = _f.requestId, url = _f.url; - var current = (_c = (_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.current) !== null && _c !== void 0 ? _c : null; - var pendingUpdate = (_e = (_d = state.byUrl[url]) === null || _d === void 0 ? void 0 : _d.pendingUpdate) !== null && _e !== void 0 ? _e : null; - state.byUrl[url] = { - current: current, - pendingUpdate: pendingUpdate, - loadingRequestId: requestId, - error: null, - }; - }) - .addCase(fetchTokenList.fulfilled, function (state, _a) { - var _b, _c, _d; - var _e = _a.payload, requestId = _e.requestId, tokenList = _e.tokenList, url = _e.url; - var current = (_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.current; - var loadingRequestId = (_c = state.byUrl[url]) === null || _c === void 0 ? void 0 : _c.loadingRequestId; - // no-op if update does nothing - if (current) { - var upgradeType = tokenLists.getVersionUpgrade(current.version, tokenList.version); - if (upgradeType === tokenLists.VersionUpgrade.NONE) - return; - if (loadingRequestId === null || loadingRequestId === requestId) { - state.byUrl[url] = { - current: current, - pendingUpdate: tokenList, - loadingRequestId: null, - error: null, - }; - } - } - else { - // activate if on default active - if (DEFAULT_ACTIVE_LIST_URLS.includes(url)) { - (_d = state.activeListUrls) === null || _d === void 0 ? void 0 : _d.push(url); - } - state.byUrl[url] = { - current: tokenList, - pendingUpdate: null, - loadingRequestId: null, - error: null, - }; - } - }) - .addCase(fetchTokenList.rejected, function (state, _a) { - var _b; - var _c = _a.payload, url = _c.url, requestId = _c.requestId, errorMessage = _c.errorMessage; - if (((_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.loadingRequestId) !== requestId) { - // no-op since it's not the latest request - return; - } - state.byUrl[url] = { - current: state.byUrl[url].current ? state.byUrl[url].current : null, - pendingUpdate: null, - loadingRequestId: null, - error: errorMessage, - }; - }) - .addCase(addList, function (state, _a) { - var url = _a.payload; - if (!state.byUrl[url]) { - state.byUrl[url] = NEW_LIST_STATE; - } - }) - .addCase(removeList, function (state, _a) { - var url = _a.payload; - if (state.byUrl[url]) { - delete state.byUrl[url]; - } - // remove list from active urls if needed - if (state.activeListUrls && state.activeListUrls.includes(url)) { - state.activeListUrls = state.activeListUrls.filter(function (u) { return u !== url; }); - } - }) - .addCase(enableList, function (state, _a) { - var url = _a.payload; - if (!state.byUrl[url]) { - state.byUrl[url] = NEW_LIST_STATE; - } - if (state.activeListUrls && !state.activeListUrls.includes(url)) { - state.activeListUrls.push(url); - } - if (!state.activeListUrls) { - state.activeListUrls = [url]; - } - }) - .addCase(disableList, function (state, _a) { - var url = _a.payload; - if (state.activeListUrls && state.activeListUrls.includes(url)) { - state.activeListUrls = state.activeListUrls.filter(function (u) { return u !== url; }); - } - }) - .addCase(acceptListUpdate, function (state, _a) { - var _b; - var url = _a.payload; - if (!((_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.pendingUpdate)) { - throw new Error('accept list update called without pending update'); - } - state.byUrl[url] = __assign(__assign({}, state.byUrl[url]), { current: state.byUrl[url].pendingUpdate, pendingUpdate: null }); - }) - .addCase(updateVersion, function (state) { - // state loaded from localStorage, but new lists have never been initialized - if (!state.lastInitializedDefaultListOfLists) { - state.byUrl = initialState$5.byUrl; - state.activeListUrls = initialState$5.activeListUrls; - } - else if (state.lastInitializedDefaultListOfLists) { - var lastInitializedSet_1 = state.lastInitializedDefaultListOfLists.reduce(function (s, l) { return s.add(l); }, new Set()); - var newListOfListsSet_1 = DEFAULT_LIST_OF_LISTS.reduce(function (s, l) { return s.add(l); }, new Set()); - DEFAULT_LIST_OF_LISTS.forEach(function (listUrl) { - if (!lastInitializedSet_1.has(listUrl)) { - state.byUrl[listUrl] = NEW_LIST_STATE; - } - }); - state.lastInitializedDefaultListOfLists.forEach(function (listUrl) { - if (!newListOfListsSet_1.has(listUrl)) { - delete state.byUrl[listUrl]; - } - }); - } - state.lastInitializedDefaultListOfLists = DEFAULT_LIST_OF_LISTS; - // if no active lists, activate defaults - if (!state.activeListUrls) { - state.activeListUrls = DEFAULT_ACTIVE_LIST_URLS; - // for each list on default list, initialize if needed - DEFAULT_ACTIVE_LIST_URLS.map(function (listUrl) { - if (!state.byUrl[listUrl]) { - state.byUrl[listUrl] = NEW_LIST_STATE; - } - return true; - }); - } - }); -}); +var EXPLORER_HOSTNAMES = { + 'etherscan.io': true, + 'ropsten.etherscan.io': true, + 'rinkeby.etherscan.io': true, + 'kovan.etherscan.io': true, + 'goerli.etherscan.io': true, + 'optimistic.etherscan.io': true, + 'kovan-optimistic.etherscan.io': true, + 'rinkeby-explorer.arbitrum.io': true, + 'arbiscan.io': true, +} +/** + * Returns the anonymized version of the given href, i.e. one that does not leak user information + * @param href the link to anonymize, i.e. remove any personal data from + * @return string anonymized version of the given href + */ +function anonymizeLink(href) { + try { + var url = new URL(href) + if (EXPLORER_HOSTNAMES[url.hostname]) { + var pathPieces = url.pathname.split('/') + var anonymizedPath = pathPieces + .map(function (pc) { + return /0x[a-fA-F0-9]+/.test(pc) ? '***' : pc + }) + .join('/') + return url.protocol + '//' + url.hostname + anonymizedPath + } + return href + } catch (error) { + return href + } +} -/** - * Converts a filter to the corresponding string key - * @param filter the filter to convert - */ -function filterToKey(filter) { - var _a, _b, _c, _d; - return ((_a = filter.address) !== null && _a !== void 0 ? _a : '') + ":" + ((_d = (_c = (_b = filter.topics) === null || _b === void 0 ? void 0 : _b.map(function (topic) { return (topic ? (Array.isArray(topic) ? topic.join(';') : topic) : '\0'); })) === null || _c === void 0 ? void 0 : _c.join('-')) !== null && _d !== void 0 ? _d : ''); -} -/** - * Convert a filter key to the corresponding filter - * @param key key to convert - */ -function keyToFilter(key) { - var pcs = key.split(':'); - var address = pcs[0]; - var topics = pcs[1].split('-').map(function (topic) { - if (topic === '\0') - return null; - var parts = topic.split(';'); - if (parts.length === 1) - return parts[0]; - return parts; - }); - return { - address: address.length === 0 ? undefined : address, - topics: topics, - }; +var ButtonText = styled__default['default'].button( + templateObject_1$1l || + (templateObject_1$1l = __makeTemplateObject( + [ + '\n outline: none;\n border: none;\n font-size: inherit;\n padding: 0;\n margin: 0;\n background: none;\n cursor: pointer;\n\n :hover {\n opacity: 0.7;\n }\n\n :focus {\n text-decoration: underline;\n }\n', + ], + [ + '\n outline: none;\n border: none;\n font-size: inherit;\n padding: 0;\n margin: 0;\n background: none;\n cursor: pointer;\n\n :hover {\n opacity: 0.7;\n }\n\n :focus {\n text-decoration: underline;\n }\n', + ] + )) +) +var CloseIcon$2 = styled__default['default'](reactFeather.X)( + templateObject_2$$ || + (templateObject_2$$ = __makeTemplateObject( + ['\n cursor: pointer;\n'], + [ + '\n cursor: pointer;\n', + // for wrapper react feather icons + ] + )) +) +// for wrapper react feather icons +var IconWrapper$4 = styled__default['default'].div( + templateObject_3$S || + (templateObject_3$S = __makeTemplateObject( + [ + '\n display: flex;\n align-items: center;\n justify-content: center;\n width: ', + ';\n height: ', + ';\n margin-right: ', + ';\n margin-left: ', + ';\n & > * {\n stroke: ', + ';\n }\n', + ], + [ + '\n display: flex;\n align-items: center;\n justify-content: center;\n width: ', + ';\n height: ', + ';\n margin-right: ', + ';\n margin-left: ', + ';\n & > * {\n stroke: ', + ';\n }\n', + // A button that triggers some onClick result, but looks like a link. + ] + )), + function (_a) { + var size = _a.size + return size !== null && size !== void 0 ? size : '20px' + }, + function (_a) { + var size = _a.size + return size !== null && size !== void 0 ? size : '20px' + }, + function (_a) { + var marginRight = _a.marginRight + return marginRight !== null && marginRight !== void 0 ? marginRight : 0 + }, + function (_a) { + var marginLeft = _a.marginLeft + return marginLeft !== null && marginLeft !== void 0 ? marginLeft : 0 + }, + function (_a) { + var theme = _a.theme, + stroke = _a.stroke + return stroke !== null && stroke !== void 0 ? stroke : theme.blue1 + } +) +// A button that triggers some onClick result, but looks like a link. +var LinkStyledButton = styled__default['default'].button( + templateObject_4$G || + (templateObject_4$G = __makeTemplateObject( + [ + '\n border: none;\n text-decoration: none;\n background: none;\n\n cursor: ', + ';\n color: ', + ';\n font-weight: 500;\n\n :hover {\n text-decoration: ', + ';\n }\n\n :focus {\n outline: none;\n text-decoration: ', + ';\n }\n\n :active {\n text-decoration: none;\n }\n', + ], + [ + '\n border: none;\n text-decoration: none;\n background: none;\n\n cursor: ', + ';\n color: ', + ';\n font-weight: 500;\n\n :hover {\n text-decoration: ', + ';\n }\n\n :focus {\n outline: none;\n text-decoration: ', + ';\n }\n\n :active {\n text-decoration: none;\n }\n', + // An internal link from the react-router-dom library that is correctly styled + ] + )), + function (_a) { + var disabled = _a.disabled + return disabled ? 'default' : 'pointer' + }, + function (_a) { + var theme = _a.theme, + disabled = _a.disabled + return disabled ? theme.text2 : theme.primary1 + }, + function (_a) { + var disabled = _a.disabled + return disabled ? null : 'underline' + }, + function (_a) { + var disabled = _a.disabled + return disabled ? null : 'underline' + } +) +// An internal link from the react-router-dom library that is correctly styled +var StyledInternalLink = styled__default['default'](reactRouterDom.Link)( + templateObject_5$x || + (templateObject_5$x = __makeTemplateObject( + [ + '\n text-decoration: none;\n cursor: pointer;\n color: ', + ';\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 text-decoration: none;\n cursor: pointer;\n color: ', + ';\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', + ] + )), + function (_a) { + var theme = _a.theme + return theme.primary1 + } +) +var StyledLink = styled__default['default'].a( + templateObject_6$o || + (templateObject_6$o = __makeTemplateObject( + [ + '\n text-decoration: none;\n cursor: pointer;\n color: ', + ';\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 text-decoration: none;\n cursor: pointer;\n color: ', + ';\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', + ] + )), + function (_a) { + var theme = _a.theme + return theme.primary1 + } +) +var LinkIconWrapper = styled__default['default'].a( + templateObject_7$k || + (templateObject_7$k = __makeTemplateObject( + [ + '\n text-decoration: none;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n text-decoration: none;\n opacity: 0.7;\n }\n\n :focus {\n outline: none;\n text-decoration: none;\n }\n\n :active {\n text-decoration: none;\n }\n', + ], + [ + '\n text-decoration: none;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n text-decoration: none;\n opacity: 0.7;\n }\n\n :focus {\n outline: none;\n text-decoration: none;\n }\n\n :active {\n text-decoration: none;\n }\n', + ] + )) +) +var LinkIcon = styled__default['default'](reactFeather.ExternalLink)( + templateObject_8$h || + (templateObject_8$h = __makeTemplateObject( + ['\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ', ';\n'], + ['\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ', ';\n'] + )), + function (_a) { + var theme = _a.theme + return theme.blue1 + } +) +var TrashIcon = styled__default['default'](reactFeather.Trash)( + templateObject_9$g || + (templateObject_9$g = __makeTemplateObject( + [ + '\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ', + ';\n\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n opacity: 0.7;\n }\n', + ], + [ + '\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ', + ';\n\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n opacity: 0.7;\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.text3 + } +) +var rotateImg = styled.keyframes( + templateObject_10$c || + (templateObject_10$c = __makeTemplateObject( + [ + '\n 0% {\n transform: perspective(1000px) rotateY(0deg);\n }\n\n 100% {\n transform: perspective(1000px) rotateY(360deg);\n }\n', + ], + [ + '\n 0% {\n transform: perspective(1000px) rotateY(0deg);\n }\n\n 100% {\n transform: perspective(1000px) rotateY(360deg);\n }\n', + ] + )) +) +var UniTokenAnimated = styled__default['default'].img( + templateObject_11$a || + (templateObject_11$a = __makeTemplateObject( + [ + '\n animation: ', + ' 5s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n padding: 2rem 0 0 0;\n filter: drop-shadow(0px 2px 4px rgba(0, 0, 0, 0.15));\n', + ], + [ + '\n animation: ', + ' 5s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n padding: 2rem 0 0 0;\n filter: drop-shadow(0px 2px 4px rgba(0, 0, 0, 0.15));\n', + ] + )), + rotateImg +) +function handleClickExternalLink(event) { + var _a = event.currentTarget, + target = _a.target, + href = _a.href + var anonymizedHref = anonymizeLink(href) + // don't prevent default, don't redirect if it's a new tab + if (target === '_blank' || event.ctrlKey || event.metaKey) { + ReactGA__default['default'].outboundLink({ label: anonymizedHref }, function () { + console.debug('Fired outbound link event', anonymizedHref) + }) + } else { + event.preventDefault() + // send a ReactGA event and then trigger a location change + ReactGA__default['default'].outboundLink({ label: anonymizedHref }, function () { + window.location.href = anonymizedHref + }) + } +} +/** + * Outbound link that handles firing google analytics events + */ +function ExternalLink(_a) { + var _b = _a.target, + target = _b === void 0 ? '_blank' : _b, + href = _a.href, + _c = _a.rel, + rel = _c === void 0 ? 'noopener noreferrer' : _c, + rest = __rest(_a, ['target', 'href', 'rel']) + return jsxRuntime.jsx(StyledLink, __assign({ target, rel, href, onClick: handleClickExternalLink }, rest), void 0) +} +function ExternalLinkIcon(_a) { + var _b = _a.target, + target = _b === void 0 ? '_blank' : _b, + href = _a.href, + _c = _a.rel, + rel = _c === void 0 ? 'noopener noreferrer' : _c, + rest = __rest(_a, ['target', 'href', 'rel']) + return jsxRuntime.jsx( + LinkIconWrapper, + __assign({ target, rel, href, onClick: handleClickExternalLink }, rest, { + children: jsxRuntime.jsx(LinkIcon, {}, void 0), + }), + void 0 + ) +} +var rotate$1 = styled.keyframes( + templateObject_12$a || + (templateObject_12$a = __makeTemplateObject( + ['\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n'], + ['\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n'] + )) +) +var Spinner$2 = styled__default['default'].img( + templateObject_13$6 || + (templateObject_13$6 = __makeTemplateObject( + ['\n animation: 2s ', ' linear infinite;\n width: 16px;\n height: 16px;\n'], + ['\n animation: 2s ', ' linear infinite;\n width: 16px;\n height: 16px;\n'] + )), + rotate$1 +) +styled__default['default'](StyledInternalLink)( + templateObject_14$6 || (templateObject_14$6 = __makeTemplateObject(['\n color: ', ';\n'], ['\n color: ', ';\n'])), + function (_a) { + var theme = _a.theme + return theme.text1 + } +) +var CustomLightSpinner = styled__default['default'](Spinner$2)( + templateObject_15$4 || + (templateObject_15$4 = __makeTemplateObject( + ['\n height: ', ';\n width: ', ';\n'], + ['\n height: ', ';\n width: ', ';\n'] + )), + function (_a) { + var size = _a.size + return size + }, + function (_a) { + var size = _a.size + return size + } +) +var HideSmall = styled__default['default'].span( + templateObject_17$2 || (templateObject_17$2 = __makeTemplateObject(['\n ', ';\n'], ['\n ', ';\n'])), + function (_a) { + var theme = _a.theme + return theme.mediaWidth.upToSmall( + templateObject_16$3 || + (templateObject_16$3 = __makeTemplateObject(['\n display: none;\n '], ['\n display: none;\n '])) + ) + } +) +styled__default['default'].span( + templateObject_19$2 || (templateObject_19$2 = __makeTemplateObject(['\n ', ';\n'], ['\n ', ';\n'])), + function (_a) { + var theme = _a.theme + return theme.mediaWidth.upToExtraSmall( + templateObject_18$2 || + (templateObject_18$2 = __makeTemplateObject(['\n display: none;\n '], ['\n display: none;\n '])) + ) + } +) +styled__default['default'].span( + templateObject_21$1 || + (templateObject_21$1 = __makeTemplateObject(['\n display: none;\n ', ';\n'], ['\n display: none;\n ', ';\n'])), + function (_a) { + var theme = _a.theme + return theme.mediaWidth.upToSmall( + templateObject_20$1 || + (templateObject_20$1 = __makeTemplateObject(['\n display: block;\n '], ['\n display: block;\n '])) + ) + } +) +var Separator$1 = styled__default['default'].div( + templateObject_22 || + (templateObject_22 = __makeTemplateObject( + ['\n width: 100%;\n height: 1px;\n background-color: ', ';\n'], + ['\n width: 100%;\n height: 1px;\n background-color: ', ';\n'] + )), + function (_a) { + var theme = _a.theme + return theme.bg2 + } +) +var templateObject_1$1l, + templateObject_2$$, + templateObject_3$S, + templateObject_4$G, + templateObject_5$x, + templateObject_6$o, + templateObject_7$k, + templateObject_8$h, + templateObject_9$g, + templateObject_10$c, + templateObject_11$a, + templateObject_12$a, + templateObject_13$6, + templateObject_14$6, + templateObject_15$4, + templateObject_16$3, + templateObject_17$2, + templateObject_18$2, + templateObject_19$2, + templateObject_20$1, + templateObject_21$1, + templateObject_22 + +var MEDIA_WIDTHS = { + upToExtraSmall: 500, + upToSmall: 720, + upToMedium: 960, + upToLarge: 1280, +} +// Migrating to a standard z-index system https://getbootstrap.com/docs/5.0/layout/z-index/ +// Please avoid using deprecated numbers +var Z_INDEX +;(function (Z_INDEX) { + Z_INDEX[(Z_INDEX['deprecated_zero'] = 0)] = 'deprecated_zero' + Z_INDEX[(Z_INDEX['deprecated_content'] = 1)] = 'deprecated_content' + Z_INDEX[(Z_INDEX['dropdown'] = 1000)] = 'dropdown' + Z_INDEX[(Z_INDEX['sticky'] = 1020)] = 'sticky' + Z_INDEX[(Z_INDEX['fixed'] = 1030)] = 'fixed' + Z_INDEX[(Z_INDEX['modalBackdrop'] = 1040)] = 'modalBackdrop' + Z_INDEX[(Z_INDEX['offcanvas'] = 1050)] = 'offcanvas' + Z_INDEX[(Z_INDEX['modal'] = 1060)] = 'modal' + Z_INDEX[(Z_INDEX['popover'] = 1070)] = 'popover' + Z_INDEX[(Z_INDEX['tooltip'] = 1080)] = 'tooltip' +})(Z_INDEX || (Z_INDEX = {})) +var mediaWidthTemplates = Object.keys(MEDIA_WIDTHS).reduce(function (accumulator, size) { + accumulator[size] = function (a, b, c) { + return styled.css( + templateObject_1$1k || + (templateObject_1$1k = __makeTemplateObject( + ['\n @media (max-width: ', 'px) {\n ', '\n }\n '], + ['\n @media (max-width: ', 'px) {\n ', '\n }\n '] + )), + MEDIA_WIDTHS[size], + styled.css(a, b, c) + ) + } + return accumulator +}, {}) +var white = '#FFFFFF' +var black = '#000000' +function colors$2(darkMode) { + return { + darkMode, + // base + white, + black, + // text + text1: darkMode ? '#FFFFFF' : '#000000', + text2: darkMode ? '#C3C5CB' : '#565A69', + text3: darkMode ? '#8F96AC' : '#6E727D', + text4: darkMode ? '#B2B9D2' : '#C3C5CB', + text5: darkMode ? '#2C2F36' : '#EDEEF2', + // backgrounds / greys + bg0: darkMode ? '#191B1F' : '#FFF', + bg1: darkMode ? '#212429' : '#F7F8FA', + bg2: darkMode ? '#2C2F36' : '#EDEEF2', + bg3: darkMode ? '#40444F' : '#CED0D9', + bg4: darkMode ? '#565A69' : '#888D9B', + bg5: darkMode ? '#6C7284' : '#888D9B', + bg6: darkMode ? '#1A2028' : '#6C7284', + //specialty colors + modalBG: darkMode ? 'rgba(0,0,0,.425)' : 'rgba(0,0,0,0.3)', + advancedBG: darkMode ? 'rgba(0,0,0,0.1)' : 'rgba(255,255,255,0.6)', + //primary colors + primary1: darkMode ? '#2172E5' : '#E8006F', + primary2: darkMode ? '#3680E7' : '#FF8CC3', + primary3: darkMode ? '#4D8FEA' : '#FF99C9', + primary4: darkMode ? '#376bad70' : '#F6DDE8', + primary5: darkMode ? '#153d6f70' : '#FDEAF1', + // color text + primaryText1: darkMode ? '#5090ea' : '#D50066', + // secondary colors + secondary1: darkMode ? '#2172E5' : '#E8006F', + secondary2: darkMode ? '#17000b26' : '#F6DDE8', + secondary3: darkMode ? '#17000b26' : '#FDEAF1', + // other + red1: darkMode ? '#FF4343' : '#DA2D2B', + red2: darkMode ? '#F82D3A' : '#DF1F38', + red3: '#D60000', + green1: darkMode ? '#27AE60' : '#007D35', + yellow1: '#E3A507', + yellow2: '#FF8F00', + yellow3: '#F3B71E', + blue1: darkMode ? '#2172E5' : '#0068FC', + blue2: darkMode ? '#5199FF' : '#0068FC', + error: darkMode ? '#FD4040' : '#DF1F38', + success: darkMode ? '#27AE60' : '#007D35', + warning: '#FF8F00', + // dont wanna forget these blue yet + blue4: darkMode ? '#153d6f70' : '#C4D9F8', + // blue5: darkMode ? '#153d6f70' : '#EBF4FF', + } +} +function theme(darkMode) { + return __assign(__assign({}, colors$2(darkMode)), { + grids: { + sm: 8, + md: 12, + lg: 24, + }, + //shadows + shadow1: darkMode ? '#000' : '#2F80ED', + // media queries + mediaWidth: mediaWidthTemplates, + // css snippets + flexColumnNoWrap: styled.css( + templateObject_2$_ || + (templateObject_2$_ = __makeTemplateObject( + ['\n display: flex;\n flex-flow: column nowrap;\n '], + ['\n display: flex;\n flex-flow: column nowrap;\n '] + )) + ), + flexRowNoWrap: styled.css( + templateObject_3$R || + (templateObject_3$R = __makeTemplateObject( + ['\n display: flex;\n flex-flow: row nowrap;\n '], + ['\n display: flex;\n flex-flow: row nowrap;\n '] + )) + ), + }) +} +function ThemeProvider(_a) { + var children = _a.children + var darkMode = useIsDarkMode() + var themeObject = React.useMemo( + function () { + return theme(darkMode) + }, + [darkMode] + ) + return jsxRuntime.jsx(styled.ThemeProvider, __assign({ theme: themeObject }, { children }), void 0) +} +var TextWrapper$1 = styled__default['default'](rebass.Text)( + templateObject_4$F || + (templateObject_4$F = __makeTemplateObject( + ['\n color: ', ';\n'], + [ + '\n color: ', + ';\n', + /** + * Preset styles of the Rebass Text component + */ + ] + )), + function (_a) { + var color = _a.color, + theme = _a.theme + return theme[color] + } +) +/** + * Preset styles of the Rebass Text component + */ +var ThemedText = { + Main(props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text2' }, props), void 0) + }, + Link(props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'primary1' }, props), void 0) + }, + Label(props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 600, color: 'text1' }, props), void 0) + }, + Black(props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text1' }, props), void 0) + }, + White(props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'white' }, props), void 0) + }, + Body(props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 400, fontSize: 16, color: 'text1' }, props), void 0) + }, + LargeHeader(props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 600, fontSize: 24 }, props), void 0) + }, + MediumHeader(props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, fontSize: 20 }, props), void 0) + }, + SubHeader(props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 400, fontSize: 14 }, props), void 0) + }, + Small(props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, fontSize: 11 }, props), void 0) + }, + Blue(props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'blue1' }, props), void 0) + }, + Yellow(props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'yellow3' }, props), void 0) + }, + DarkGray(props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text3' }, props), void 0) + }, + Gray(props) { + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'bg3' }, props), void 0) + }, + Italic(props) { + return jsxRuntime.jsx( + TextWrapper$1, + __assign({ fontWeight: 500, fontSize: 12, fontStyle: 'italic', color: 'text2' }, props), + void 0 + ) + }, + Error(_a) { + var error = _a.error, + props = __rest(_a, ['error']) + return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: error ? 'red1' : 'text2' }, props), void 0) + }, +} +var ThemedGlobalStyle = styled.createGlobalStyle( + templateObject_5$w || + (templateObject_5$w = __makeTemplateObject( + ['\nhtml {\n color: ', ';\n background-color: ', ' !important;\n}\n\na {\n color: ', '; \n}\n'], + ['\nhtml {\n color: ', ';\n background-color: ', ' !important;\n}\n\na {\n color: ', '; \n}\n'] + )), + function (_a) { + var theme = _a.theme + return theme.text1 + }, + function (_a) { + var theme = _a.theme + return theme.bg1 + }, + function (_a) { + var theme = _a.theme + return theme.blue1 + } +) +var templateObject_1$1k, templateObject_2$_, templateObject_3$R, templateObject_4$F, templateObject_5$w + +var _a$b +var ETHERSCAN_PREFIXES = + ((_a$b = {}), + (_a$b[SupportedChainId.MAINNET] = 'https://etherscan.io'), + (_a$b[SupportedChainId.ROPSTEN] = 'https://ropsten.etherscan.io'), + (_a$b[SupportedChainId.RINKEBY] = 'https://rinkeby.etherscan.io'), + (_a$b[SupportedChainId.GOERLI] = 'https://goerli.etherscan.io'), + (_a$b[SupportedChainId.KOVAN] = 'https://kovan.etherscan.io'), + (_a$b[SupportedChainId.OPTIMISM] = 'https://optimistic.etherscan.io'), + (_a$b[SupportedChainId.OPTIMISTIC_KOVAN] = 'https://kovan-optimistic.etherscan.io'), + (_a$b[SupportedChainId.POLYGON_MUMBAI] = 'https://mumbai.polygonscan.com'), + (_a$b[SupportedChainId.POLYGON] = 'https://polygonscan.com'), + _a$b) +var ExplorerDataType +;(function (ExplorerDataType) { + ExplorerDataType['TRANSACTION'] = 'transaction' + ExplorerDataType['TOKEN'] = 'token' + ExplorerDataType['ADDRESS'] = 'address' + ExplorerDataType['BLOCK'] = 'block' +})(ExplorerDataType || (ExplorerDataType = {})) +/** + * Return the explorer link for the given data and data type + * @param chainId the ID of the chain for which to return the data + * @param data the data to return a link for + * @param type the type of the data + */ +function getExplorerLink(chainId, data, type) { + var _a + if (chainId === SupportedChainId.ARBITRUM_ONE) { + switch (type) { + case ExplorerDataType.TRANSACTION: + return 'https://arbiscan.io/tx/' + data + case ExplorerDataType.ADDRESS: + case ExplorerDataType.TOKEN: + return 'https://arbiscan.io/address/' + data + case ExplorerDataType.BLOCK: + return 'https://arbiscan.io/block/' + data + default: + return 'https://arbiscan.io/' + } + } + if (chainId === SupportedChainId.ARBITRUM_RINKEBY) { + switch (type) { + case ExplorerDataType.TRANSACTION: + return 'https://rinkeby-explorer.arbitrum.io/tx/' + data + case ExplorerDataType.ADDRESS: + case ExplorerDataType.TOKEN: + return 'https://rinkeby-explorer.arbitrum.io/address/' + data + case ExplorerDataType.BLOCK: + return 'https://rinkeby-explorer.arbitrum.io/block/' + data + default: + return 'https://rinkeby-explorer.arbitrum.io/' + } + } + var prefix = (_a = ETHERSCAN_PREFIXES[chainId]) !== null && _a !== void 0 ? _a : 'https://etherscan.io' + switch (type) { + case ExplorerDataType.TRANSACTION: + return prefix + '/tx/' + data + case ExplorerDataType.TOKEN: + return prefix + '/token/' + data + case ExplorerDataType.BLOCK: + if (chainId === SupportedChainId.OPTIMISM || chainId === SupportedChainId.OPTIMISTIC_KOVAN) { + return prefix + '/tx/' + data + } + return prefix + '/block/' + data + case ExplorerDataType.ADDRESS: + return prefix + '/address/' + data + default: + return '' + prefix + } } -var _a$8; -var slice = toolkit.createSlice({ - name: 'logs', - initialState: {}, - reducers: { - addListener: function (state, _a) { - var _b = _a.payload, chainId = _b.chainId, filter = _b.filter; - if (!state[chainId]) - state[chainId] = {}; - var key = filterToKey(filter); - if (!state[chainId][key]) - state[chainId][key] = { - listeners: 1, - }; - else - state[chainId][key].listeners++; - }, - fetchingLogs: function (state, _a) { - var e_1, _b; - var _c = _a.payload, chainId = _c.chainId, filters = _c.filters, blockNumber = _c.blockNumber; - if (!state[chainId]) - return; - try { - for (var filters_1 = __values(filters), filters_1_1 = filters_1.next(); !filters_1_1.done; filters_1_1 = filters_1.next()) { - var filter = filters_1_1.value; - var key = filterToKey(filter); - if (!state[chainId][key]) - continue; - state[chainId][key].fetchingBlockNumber = blockNumber; - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (filters_1_1 && !filters_1_1.done && (_b = filters_1.return)) _b.call(filters_1); - } - finally { if (e_1) throw e_1.error; } - } - }, - fetchedLogs: function (state, _a) { - var _b = _a.payload, chainId = _b.chainId, filter = _b.filter, results = _b.results; - if (!state[chainId]) - return; - var key = filterToKey(filter); - var fetchState = state[chainId][key]; - if (!fetchState || (fetchState.results && fetchState.results.blockNumber > results.blockNumber)) - return; - fetchState.results = results; - }, - fetchedLogsError: function (state, _a) { - var _b = _a.payload, chainId = _b.chainId, filter = _b.filter, blockNumber = _b.blockNumber; - if (!state[chainId]) - return; - var key = filterToKey(filter); - var fetchState = state[chainId][key]; - if (!fetchState || (fetchState.results && fetchState.results.blockNumber > blockNumber)) - return; - fetchState.results = { - blockNumber: blockNumber, - error: true, - }; - }, - removeListener: function (state, _a) { - var _b = _a.payload, chainId = _b.chainId, filter = _b.filter; - if (!state[chainId]) - return; - var key = filterToKey(filter); - if (!state[chainId][key]) - return; - state[chainId][key].listeners--; - }, - }, -}); -var logs = slice.reducer; -(_a$8 = slice.actions, _a$8.addListener); _a$8.removeListener; var fetchedLogs = _a$8.fetchedLogs, fetchedLogsError = _a$8.fetchedLogsError, fetchingLogs = _a$8.fetchingLogs; - -var Field$2; -(function (Field) { - Field["CURRENCY_A"] = "CURRENCY_A"; - Field["CURRENCY_B"] = "CURRENCY_B"; -})(Field$2 || (Field$2 = {})); -var typeInput$2 = toolkit.createAction('mint/typeInputMint'); -var resetMintState$1 = toolkit.createAction('mint/resetMintState'); - -var initialState$4 = { - independentField: Field$2.CURRENCY_A, - typedValue: '', - otherTypedValue: '', - startPriceTypedValue: '', - leftRangeTypedValue: '', - rightRangeTypedValue: '', -}; -var mint = toolkit.createReducer(initialState$4, function (builder) { - return builder - .addCase(resetMintState$1, function () { return initialState$4; }) - .addCase(typeInput$2, function (state, _a) { - var _b = _a.payload, field = _b.field, typedValue = _b.typedValue, noLiquidity = _b.noLiquidity; - if (noLiquidity) { - // they're typing into the field they've last typed in - if (field === state.independentField) { - return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); - } - // they're typing into a new field, store the other value - else { - return __assign(__assign({}, state), { independentField: field, typedValue: typedValue, otherTypedValue: state.typedValue }); - } - } - else { - return __assign(__assign({}, state), { independentField: field, typedValue: typedValue, otherTypedValue: '' }); - } - }); -}); +var Column = styled__default['default'].div( + templateObject_1$1j || + (templateObject_1$1j = __makeTemplateObject( + ['\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n'], + ['\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n'] + )) +) +var ColumnCenter = styled__default['default'](Column)( + templateObject_2$Z || + (templateObject_2$Z = __makeTemplateObject( + ['\n width: 100%;\n align-items: center;\n'], + ['\n width: 100%;\n align-items: center;\n'] + )) +) +var AutoColumn = styled__default['default'].div( + templateObject_3$Q || + (templateObject_3$Q = __makeTemplateObject( + ['\n display: grid;\n grid-auto-rows: auto;\n grid-row-gap: ', ';\n justify-items: ', ';\n'], + ['\n display: grid;\n grid-auto-rows: auto;\n grid-row-gap: ', ';\n justify-items: ', ';\n'] + )), + function (_a) { + var gap = _a.gap + return (gap === 'sm' && '8px') || (gap === 'md' && '12px') || (gap === 'lg' && '24px') || gap + }, + function (_a) { + var justify = _a.justify + return justify && justify + } +) +var templateObject_1$1j, templateObject_2$Z, templateObject_3$Q + +var Row$1 = styled__default['default'](styledComponents.Box)( + templateObject_1$1i || + (templateObject_1$1i = __makeTemplateObject( + [ + '\n width: ', + ';\n display: flex;\n padding: 0;\n align-items: ', + ';\n justify-content: ', + ';\n padding: ', + ';\n border: ', + ';\n border-radius: ', + ';\n', + ], + [ + '\n width: ', + ';\n display: flex;\n padding: 0;\n align-items: ', + ';\n justify-content: ', + ';\n padding: ', + ';\n border: ', + ';\n border-radius: ', + ';\n', + ] + )), + function (_a) { + var width = _a.width + return width !== null && width !== void 0 ? width : '100%' + }, + function (_a) { + var align = _a.align + return align !== null && align !== void 0 ? align : 'center' + }, + function (_a) { + var justify = _a.justify + return justify !== null && justify !== void 0 ? justify : 'flex-start' + }, + function (_a) { + var padding = _a.padding + return padding + }, + function (_a) { + var border = _a.border + return border + }, + function (_a) { + var borderRadius = _a.borderRadius + return borderRadius + } +) +var RowBetween = styled__default['default'](Row$1)( + templateObject_2$Y || + (templateObject_2$Y = __makeTemplateObject( + ['\n justify-content: space-between;\n'], + ['\n justify-content: space-between;\n'] + )) +) +styled__default['default'].div( + templateObject_3$P || + (templateObject_3$P = __makeTemplateObject( + ['\n display: flex;\n align-items: flex-end;\n'], + ['\n display: flex;\n align-items: flex-end;\n'] + )) +) +var AutoRow = styled__default['default'](Row$1)( + templateObject_4$E || + (templateObject_4$E = __makeTemplateObject( + [ + '\n flex-wrap: wrap;\n margin: ', + ';\n justify-content: ', + ';\n\n & > * {\n margin: ', + ' !important;\n }\n', + ], + [ + '\n flex-wrap: wrap;\n margin: ', + ';\n justify-content: ', + ';\n\n & > * {\n margin: ', + ' !important;\n }\n', + ] + )), + function (_a) { + var gap = _a.gap + return gap && '-' + gap + }, + function (_a) { + var justify = _a.justify + return justify && justify + }, + function (_a) { + var gap = _a.gap + return gap + } +) +var RowFixed = styled__default['default'](Row$1)( + templateObject_5$v || + (templateObject_5$v = __makeTemplateObject( + ['\n width: fit-content;\n margin: ', ';\n'], + ['\n width: fit-content;\n margin: ', ';\n'] + )), + function (_a) { + var gap = _a.gap + return gap && '-' + gap + } +) +var templateObject_1$1i, templateObject_2$Y, templateObject_3$P, templateObject_4$E, templateObject_5$v + +var InputPanel$1 = styled__default['default'].div( + templateObject_1$1h || + (templateObject_1$1h = __makeTemplateObject( + [ + '\n ', + '\n position: relative;\n border-radius: 1.25rem;\n background-color: ', + ';\n z-index: 1;\n width: 100%;\n', + ], + [ + '\n ', + '\n position: relative;\n border-radius: 1.25rem;\n background-color: ', + ';\n z-index: 1;\n width: 100%;\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.flexColumnNoWrap + }, + function (_a) { + var theme = _a.theme + return theme.bg1 + } +) +var ContainerRow = styled__default['default'].div( + templateObject_2$X || + (templateObject_2$X = __makeTemplateObject( + [ + '\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 1.25rem;\n border: 1px solid ', + ';\n transition: border-color 300ms ', + ',\n color 500ms ', + ';\n background-color: ', + ';\n', + ], + [ + '\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 1.25rem;\n border: 1px solid ', + ';\n transition: border-color 300ms ', + ',\n color 500ms ', + ';\n background-color: ', + ';\n', + ] + )), + function (_a) { + var error = _a.error, + theme = _a.theme + return error ? theme.red1 : theme.bg2 + }, + function (_a) { + var error = _a.error + return error ? 'step-end' : 'step-start' + }, + function (_a) { + var error = _a.error + return error ? 'step-end' : 'step-start' + }, + function (_a) { + var theme = _a.theme + return theme.bg1 + } +) +var InputContainer = styled__default['default'].div( + templateObject_3$O || + (templateObject_3$O = __makeTemplateObject( + ['\n flex: 1;\n padding: 1rem;\n'], + ['\n flex: 1;\n padding: 1rem;\n'] + )) +) +var Input$2 = styled__default['default'].input( + templateObject_4$D || + (templateObject_4$D = __makeTemplateObject( + [ + '\n font-size: 1.25rem;\n outline: none;\n border: none;\n flex: 1 1 auto;\n width: 0;\n background-color: ', + ';\n transition: color 300ms ', + ';\n color: ', + ';\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 500;\n width: 100%;\n ::placeholder {\n color: ', + ';\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: ', + ';\n }\n', + ], + [ + '\n font-size: 1.25rem;\n outline: none;\n border: none;\n flex: 1 1 auto;\n width: 0;\n background-color: ', + ';\n transition: color 300ms ', + ';\n color: ', + ';\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 500;\n width: 100%;\n ::placeholder {\n color: ', + ';\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: ', + ';\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.bg1 + }, + function (_a) { + var error = _a.error + return error ? 'step-end' : 'step-start' + }, + function (_a) { + var error = _a.error, + theme = _a.theme + return error ? theme.red1 : theme.text1 + }, + function (_a) { + var theme = _a.theme + return theme.text4 + }, + function (_a) { + var theme = _a.theme + return theme.text4 + } +) +function AddressInputPanel(_a) { + var id = _a.id, + _b = _a.className, + className = _b === void 0 ? 'recipient-address-input' : _b, + label = _a.label, + placeholder = _a.placeholder, + value = _a.value, + onChange = _a.onChange + var chainId = useActiveWeb3React().chainId + var theme = React.useContext(styled.ThemeContext) + var _c = useENS(value), + address = _c.address, + loading = _c.loading, + name = _c.name + var handleInput = React.useCallback( + function (event) { + var input = event.target.value + var withoutSpaces = input.replace(/\s+/g, '') + onChange(withoutSpaces) + }, + [onChange] + ) + var error = Boolean(value.length > 0 && !loading && !address) + return jsxRuntime.jsx( + InputPanel$1, + __assign( + { id }, + { + children: jsxRuntime.jsx( + ContainerRow, + __assign( + { error }, + { + children: jsxRuntime.jsx( + InputContainer, + { + children: jsxRuntime.jsxs( + AutoColumn, + __assign( + { gap: 'md' }, + { + children: [ + jsxRuntime.jsxs( + RowBetween, + { + children: [ + jsxRuntime.jsx( + ThemedText.Black, + __assign( + { color: theme.text2, fontWeight: 500, fontSize: 14 }, + { + children: + label !== null && label !== void 0 + ? label + : jsxRuntime.jsx(macro.Trans, { children: 'Recipient' }, void 0), + } + ), + void 0 + ), + address && + chainId && + jsxRuntime.jsx( + ExternalLink, + __assign( + { + href: getExplorerLink( + chainId, + name !== null && name !== void 0 ? name : address, + ExplorerDataType.ADDRESS + ), + style: { fontSize: '14px' }, + }, + { + children: jsxRuntime.jsx( + macro.Trans, + { children: '(View on Explorer)' }, + void 0 + ), + } + ), + void 0 + ), + ], + }, + void 0 + ), + jsxRuntime.jsx( + Input$2, + { + className, + type: 'text', + autoComplete: 'off', + autoCorrect: 'off', + autoCapitalize: 'off', + spellCheck: 'false', + placeholder: + placeholder !== null && placeholder !== void 0 + ? placeholder + : macro.t( + templateObject_5$u || + (templateObject_5$u = __makeTemplateObject( + ['Wallet Address or ENS name'], + ['Wallet Address or ENS name'] + )) + ), + error, + pattern: '^(0x[a-fA-F0-9]{40})$', + onChange: handleInput, + value, + }, + void 0 + ), + ], + } + ), + void 0 + ), + }, + void 0 + ), + } + ), + void 0 + ), + } + ), + void 0 + ) +} +var templateObject_1$1h, templateObject_2$X, templateObject_3$O, templateObject_4$D, templateObject_5$u -var Field$1; -(function (Field) { - Field["CURRENCY_A"] = "CURRENCY_A"; - Field["CURRENCY_B"] = "CURRENCY_B"; -})(Field$1 || (Field$1 = {})); -var Bound; -(function (Bound) { - Bound["LOWER"] = "LOWER"; - Bound["UPPER"] = "UPPER"; -})(Bound || (Bound = {})); -var typeInput$1 = toolkit.createAction('mintV3/typeInputMint'); -var typeStartPriceInput = toolkit.createAction('mintV3/typeStartPriceInput'); -var typeLeftRangeInput = toolkit.createAction('mintV3/typeLeftRangeInput'); -var typeRightRangeInput = toolkit.createAction('mintV3/typeRightRangeInput'); -var resetMintState = toolkit.createAction('mintV3/resetMintState'); -var setFullRange = toolkit.createAction('mintV3/setFullRange'); - -var initialState$3 = { - independentField: Field$1.CURRENCY_A, - typedValue: '', - startPriceTypedValue: '', - leftRangeTypedValue: '', - rightRangeTypedValue: '', -}; -var mintV3 = toolkit.createReducer(initialState$3, function (builder) { - return builder - .addCase(resetMintState, function () { return initialState$3; }) - .addCase(setFullRange, function (state) { - return __assign(__assign({}, state), { leftRangeTypedValue: true, rightRangeTypedValue: true }); - }) - .addCase(typeStartPriceInput, function (state, _a) { - var typedValue = _a.payload.typedValue; - return __assign(__assign({}, state), { startPriceTypedValue: typedValue }); - }) - .addCase(typeLeftRangeInput, function (state, _a) { - var typedValue = _a.payload.typedValue; - return __assign(__assign({}, state), { leftRangeTypedValue: typedValue }); - }) - .addCase(typeRightRangeInput, function (state, _a) { - var typedValue = _a.payload.typedValue; - return __assign(__assign({}, state), { rightRangeTypedValue: typedValue }); - }) - .addCase(typeInput$1, function (state, _a) { - var _b = _a.payload, field = _b.field, typedValue = _b.typedValue, noLiquidity = _b.noLiquidity; - if (noLiquidity) { - // they're typing into the field they've last typed in - if (field === state.independentField) { - return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); - } - // they're typing into a new field, store the other value - else { - return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); - } - } - else { - return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); - } - }); -}); +function useTheme() { + return React.useContext(styled.ThemeContext) +} -var protocols = [routerSdk.Protocol.V2, routerSdk.Protocol.V3]; -var DEFAULT_QUERY_PARAMS = { - protocols: protocols.map(function (p) { return p.toLowerCase(); }).join(','), - // example other params - // forceCrossProtocol: 'true', - // minSplits: '5', -}; -function getClientSideQuote(_a) { - var tokenInAddress = _a.tokenInAddress, tokenInChainId = _a.tokenInChainId, tokenInDecimals = _a.tokenInDecimals, tokenInSymbol = _a.tokenInSymbol, tokenOutAddress = _a.tokenOutAddress, tokenOutChainId = _a.tokenOutChainId, tokenOutDecimals = _a.tokenOutDecimals, tokenOutSymbol = _a.tokenOutSymbol, amount = _a.amount, type = _a.type; - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, Promise.resolve().then(function () { return index; })]; - case 1: return [2 /*return*/, (_b.sent()).getQuote({ - type: type, - chainId: tokenInChainId, - tokenIn: { - address: tokenInAddress, - chainId: tokenInChainId, - decimals: tokenInDecimals, - symbol: tokenInSymbol, - }, - tokenOut: { - address: tokenOutAddress, - chainId: tokenOutChainId, - decimals: tokenOutDecimals, - symbol: tokenOutSymbol, - }, - amount: amount, - }, { protocols: protocols })]; - } - }); - }); -} -var routingApi = react.createApi({ - reducerPath: 'routingApi', - baseQuery: react.fetchBaseQuery({ - baseUrl: 'https://api.uniswap.org/v1/', - }), - endpoints: function (build) { return ({ - getQuote: build.query({ - queryFn: function (args, _api, _extraOptions, fetch) { - return __awaiter(this, void 0, void 0, function () { - var tokenInAddress, tokenInChainId, tokenOutAddress, tokenOutChainId, amount, useClientSideRouter, type, result, query, e_1; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - tokenInAddress = args.tokenInAddress, tokenInChainId = args.tokenInChainId, tokenOutAddress = args.tokenOutAddress, tokenOutChainId = args.tokenOutChainId, amount = args.amount, useClientSideRouter = args.useClientSideRouter, type = args.type; - _a.label = 1; - case 1: - _a.trys.push([1, 6, , 7]); - if (!useClientSideRouter) return [3 /*break*/, 3]; - return [4 /*yield*/, getClientSideQuote(args)]; - case 2: - result = _a.sent(); - return [3 /*break*/, 5]; - case 3: - query = qs__default["default"].stringify(__assign(__assign({}, DEFAULT_QUERY_PARAMS), { tokenInAddress: tokenInAddress, tokenInChainId: tokenInChainId, tokenOutAddress: tokenOutAddress, tokenOutChainId: tokenOutChainId, amount: amount, type: type })); - return [4 /*yield*/, fetch("quote?" + query)]; - case 4: - result = _a.sent(); - _a.label = 5; - case 5: return [2 /*return*/, { data: result.data }]; - case 6: - e_1 = _a.sent(); - // TODO: fall back to client-side quoter when auto router fails. - // deprecate 'legacy' v2/v3 routers first. - return [2 /*return*/, { error: e_1 }]; - case 7: return [2 /*return*/]; - } - }); - }); - }, - keepUnusedDataFor: ms__default["default"](templateObject_1$1b || (templateObject_1$1b = __makeTemplateObject(["10s"], ["10s"]))), - extraOptions: { - maxRetries: 0, - }, - }), - }); }, -}); -var useGetQuoteQuery = routingApi.useGetQuoteQuery; -var templateObject_1$1b; - -var Field; -(function (Field) { - Field["INPUT"] = "INPUT"; - Field["OUTPUT"] = "OUTPUT"; -})(Field || (Field = {})); -var selectCurrency = toolkit.createAction('swap/selectCurrency'); -var switchCurrencies = toolkit.createAction('swap/switchCurrencies'); -var typeInput = toolkit.createAction('swap/typeInput'); -var replaceSwapState = toolkit.createAction('swap/replaceSwapState'); -var setRecipient = toolkit.createAction('swap/setRecipient'); - -var CHAIN_DATA_ABI = [ - { - inputs: [], - name: 'latestAnswer', - outputs: [{ internalType: 'int256', name: '', type: 'int256' }], - stateMutability: 'view', - type: 'function', - }, -]; -/** - * Returns the price of 1 gas in WEI for the currently selected network using the chainlink fast gas price oracle - */ -function useGasPrice() { - var _a, _b; - var address = useENSAddress('fast-gas-gwei.data.eth').address; - var contract = useContract(address !== null && address !== void 0 ? address : undefined, CHAIN_DATA_ABI, false); - var resultStr = (_b = (_a = useSingleCallResult(contract, 'latestAnswer').result) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.toString(); - return typeof resultStr === 'string' ? JSBI__default["default"].BigInt(resultStr) : undefined; +var BaseButton = styled__default['default'](styledComponents.Button)( + templateObject_1$1g || + (templateObject_1$1g = __makeTemplateObject( + [ + '\n padding: ', + ';\n width: ', + ';\n font-weight: 500;\n text-align: center;\n border-radius: ', + ';\n outline: none;\n border: 1px solid transparent;\n color: ', + ';\n text-decoration: none;\n display: flex;\n justify-content: center;\n flex-wrap: nowrap;\n align-items: center;\n cursor: pointer;\n position: relative;\n z-index: 1;\n &:disabled {\n opacity: 50%;\n cursor: auto;\n pointer-events: none;\n }\n\n will-change: transform;\n transition: transform 450ms ease;\n transform: perspective(1px) translateZ(0);\n\n > * {\n user-select: none;\n }\n\n > a {\n text-decoration: none;\n }\n', + ], + [ + '\n padding: ', + ';\n width: ', + ';\n font-weight: 500;\n text-align: center;\n border-radius: ', + ';\n outline: none;\n border: 1px solid transparent;\n color: ', + ';\n text-decoration: none;\n display: flex;\n justify-content: center;\n flex-wrap: nowrap;\n align-items: center;\n cursor: pointer;\n position: relative;\n z-index: 1;\n &:disabled {\n opacity: 50%;\n cursor: auto;\n pointer-events: none;\n }\n\n will-change: transform;\n transition: transform 450ms ease;\n transform: perspective(1px) translateZ(0);\n\n > * {\n user-select: none;\n }\n\n > a {\n text-decoration: none;\n }\n', + ] + )), + function (_a) { + var padding = _a.padding + return padding !== null && padding !== void 0 ? padding : '16px' + }, + function (_a) { + var width = _a.width + return width !== null && width !== void 0 ? width : '100%' + }, + function (_a) { + var $borderRadius = _a.$borderRadius + return $borderRadius !== null && $borderRadius !== void 0 ? $borderRadius : '20px' + }, + function (_a) { + var theme = _a.theme + return theme.text1 + } +) +var ButtonPrimary = styled__default['default'](BaseButton)( + templateObject_2$W || + (templateObject_2$W = __makeTemplateObject( + [ + '\n background-color: ', + ';\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:hover {\n background-color: ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:disabled {\n background-color: ', + ';\n color: ', + ';\n cursor: auto;\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n', + ], + [ + '\n background-color: ', + ';\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:hover {\n background-color: ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:disabled {\n background-color: ', + ';\n color: ', + ';\n cursor: auto;\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.primary1 + }, + function (_a) { + var theme = _a.theme + return polished.darken(0.05, theme.primary1) + }, + function (_a) { + var theme = _a.theme + return polished.darken(0.05, theme.primary1) + }, + function (_a) { + var theme = _a.theme + return polished.darken(0.05, theme.primary1) + }, + function (_a) { + var theme = _a.theme + return polished.darken(0.1, theme.primary1) + }, + function (_a) { + var theme = _a.theme + return polished.darken(0.1, theme.primary1) + }, + function (_a) { + var theme = _a.theme, + altDisabledStyle = _a.altDisabledStyle, + disabled = _a.disabled + return altDisabledStyle ? (disabled ? theme.primary1 : theme.bg2) : theme.bg2 + }, + function (_a) { + var altDisabledStyle = _a.altDisabledStyle, + disabled = _a.disabled, + theme = _a.theme + return altDisabledStyle ? (disabled ? theme.white : theme.text2) : theme.text2 + } +) +var ButtonLight = styled__default['default'](BaseButton)( + templateObject_3$N || + (templateObject_3$N = __makeTemplateObject( + [ + '\n background-color: ', + ';\n color: ', + ';\n font-size: 16px;\n font-weight: 500;\n &:focus {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:hover {\n background-color: ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n :disabled {\n opacity: 0.4;\n :hover {\n cursor: auto;\n background-color: ', + ';\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n }\n', + ], + [ + '\n background-color: ', + ';\n color: ', + ';\n font-size: 16px;\n font-weight: 500;\n &:focus {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:hover {\n background-color: ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n :disabled {\n opacity: 0.4;\n :hover {\n cursor: auto;\n background-color: ', + ';\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.primary5 + }, + function (_a) { + var theme = _a.theme + return theme.primaryText1 + }, + function (_a) { + var theme = _a.theme, + disabled = _a.disabled + return !disabled && polished.darken(0.03, theme.primary5) + }, + function (_a) { + var theme = _a.theme, + disabled = _a.disabled + return !disabled && polished.darken(0.03, theme.primary5) + }, + function (_a) { + var theme = _a.theme, + disabled = _a.disabled + return !disabled && polished.darken(0.03, theme.primary5) + }, + function (_a) { + var theme = _a.theme, + disabled = _a.disabled + return !disabled && polished.darken(0.05, theme.primary5) + }, + function (_a) { + var theme = _a.theme, + disabled = _a.disabled + return !disabled && polished.darken(0.05, theme.primary5) + }, + function (_a) { + var theme = _a.theme + return theme.primary5 + } +) +var ButtonGray = styled__default['default'](BaseButton)( + templateObject_4$C || + (templateObject_4$C = __makeTemplateObject( + [ + '\n background-color: ', + ';\n color: ', + ';\n font-size: 16px;\n font-weight: 500;\n\n &:hover {\n background-color: ', + ';\n }\n &:active {\n background-color: ', + ';\n }\n', + ], + [ + '\n background-color: ', + ';\n color: ', + ';\n font-size: 16px;\n font-weight: 500;\n\n &:hover {\n background-color: ', + ';\n }\n &:active {\n background-color: ', + ';\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.bg1 + }, + function (_a) { + var theme = _a.theme + return theme.text2 + }, + function (_a) { + var theme = _a.theme, + disabled = _a.disabled + return !disabled && polished.darken(0.05, theme.bg2) + }, + function (_a) { + var theme = _a.theme, + disabled = _a.disabled + return !disabled && polished.darken(0.1, theme.bg2) + } +) +var ButtonSecondary = styled__default['default'](BaseButton)( + templateObject_5$t || + (templateObject_5$t = __makeTemplateObject( + [ + '\n border: 1px solid ', + ';\n color: ', + ';\n background-color: transparent;\n font-size: 16px;\n border-radius: 12px;\n padding: ', + ';\n\n &:focus {\n box-shadow: 0 0 0 1pt ', + ';\n border: 1px solid ', + ';\n }\n &:hover {\n border: 1px solid ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', + ';\n border: 1px solid ', + ';\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n a:hover {\n text-decoration: none;\n }\n', + ], + [ + '\n border: 1px solid ', + ';\n color: ', + ';\n background-color: transparent;\n font-size: 16px;\n border-radius: 12px;\n padding: ', + ';\n\n &:focus {\n box-shadow: 0 0 0 1pt ', + ';\n border: 1px solid ', + ';\n }\n &:hover {\n border: 1px solid ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', + ';\n border: 1px solid ', + ';\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n a:hover {\n text-decoration: none;\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.primary4 + }, + function (_a) { + var theme = _a.theme + return theme.primary1 + }, + function (_a) { + var padding = _a.padding + return padding ? padding : '10px' + }, + function (_a) { + var theme = _a.theme + return theme.primary4 + }, + function (_a) { + var theme = _a.theme + return theme.primary3 + }, + function (_a) { + var theme = _a.theme + return theme.primary3 + }, + function (_a) { + var theme = _a.theme + return theme.primary4 + }, + function (_a) { + var theme = _a.theme + return theme.primary3 + } +) +var ButtonOutlined = styled__default['default'](BaseButton)( + templateObject_6$n || + (templateObject_6$n = __makeTemplateObject( + [ + '\n border: 1px solid ', + ';\n background-color: transparent;\n color: ', + ';\n &:focus {\n box-shadow: 0 0 0 1px ', + ';\n }\n &:hover {\n box-shadow: 0 0 0 1px ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1px ', + ';\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n', + ], + [ + '\n border: 1px solid ', + ';\n background-color: transparent;\n color: ', + ';\n &:focus {\n box-shadow: 0 0 0 1px ', + ';\n }\n &:hover {\n box-shadow: 0 0 0 1px ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1px ', + ';\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.bg2 + }, + function (_a) { + var theme = _a.theme + return theme.text1 + }, + function (_a) { + var theme = _a.theme + return theme.bg4 + }, + function (_a) { + var theme = _a.theme + return theme.bg4 + }, + function (_a) { + var theme = _a.theme + return theme.bg4 + } +) +styled__default['default'](BaseButton)( + templateObject_7$j || + (templateObject_7$j = __makeTemplateObject( + [ + '\n background-color: ', + ';\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:hover {\n background-color: ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:disabled {\n background-color: ', + ';\n opacity: 50%;\n cursor: auto;\n }\n', + ], + [ + '\n background-color: ', + ';\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:hover {\n background-color: ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:disabled {\n background-color: ', + ';\n opacity: 50%;\n cursor: auto;\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.yellow3 + }, + function (_a) { + var theme = _a.theme + return polished.darken(0.05, theme.yellow3) + }, + function (_a) { + var theme = _a.theme + return polished.darken(0.05, theme.yellow3) + }, + function (_a) { + var theme = _a.theme + return polished.darken(0.05, theme.yellow3) + }, + function (_a) { + var theme = _a.theme + return polished.darken(0.1, theme.yellow3) + }, + function (_a) { + var theme = _a.theme + return polished.darken(0.1, theme.yellow3) + }, + function (_a) { + var theme = _a.theme + return theme.yellow3 + } +) +var ButtonEmpty = styled__default['default'](BaseButton)( + templateObject_8$g || + (templateObject_8$g = __makeTemplateObject( + [ + '\n background-color: transparent;\n color: ', + ';\n display: flex;\n justify-content: center;\n align-items: center;\n\n &:focus {\n text-decoration: underline;\n }\n &:hover {\n text-decoration: none;\n }\n &:active {\n text-decoration: none;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n', + ], + [ + '\n background-color: transparent;\n color: ', + ';\n display: flex;\n justify-content: center;\n align-items: center;\n\n &:focus {\n text-decoration: underline;\n }\n &:hover {\n text-decoration: none;\n }\n &:active {\n text-decoration: none;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.primary1 + } +) +styled__default['default'](BaseButton)( + templateObject_9$f || + (templateObject_9$f = __makeTemplateObject( + [ + '\n padding: 0;\n width: fit-content;\n background: none;\n text-decoration: none;\n &:focus {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n text-decoration: underline;\n }\n &:hover {\n // text-decoration: underline;\n opacity: 0.9;\n }\n &:active {\n text-decoration: underline;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n', + ], + [ + '\n padding: 0;\n width: fit-content;\n background: none;\n text-decoration: none;\n &:focus {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n text-decoration: underline;\n }\n &:hover {\n // text-decoration: underline;\n opacity: 0.9;\n }\n &:active {\n text-decoration: underline;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n', + ] + )) +) +var ButtonConfirmedStyle = styled__default['default'](BaseButton)( + templateObject_10$b || + (templateObject_10$b = __makeTemplateObject( + [ + '\n background-color: ', + ';\n color: ', + ';\n /* border: 1px solid ', + '; */\n\n &:disabled {\n opacity: 50%;\n background-color: ', + ';\n color: ', + ';\n cursor: auto;\n }\n', + ], + [ + '\n background-color: ', + ';\n color: ', + ';\n /* border: 1px solid ', + '; */\n\n &:disabled {\n opacity: 50%;\n background-color: ', + ';\n color: ', + ';\n cursor: auto;\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.bg3 + }, + function (_a) { + var theme = _a.theme + return theme.text1 + }, + function (_a) { + var theme = _a.theme + return theme.green1 + }, + function (_a) { + var theme = _a.theme + return theme.bg2 + }, + function (_a) { + var theme = _a.theme + return theme.text2 + } +) +var ButtonErrorStyle = styled__default['default'](BaseButton)( + templateObject_11$9 || + (templateObject_11$9 = __makeTemplateObject( + [ + '\n background-color: ', + ';\n border: 1px solid ', + ';\n\n &:focus {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:hover {\n background-color: ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n box-shadow: none;\n background-color: ', + ';\n border: 1px solid ', + ';\n }\n', + ], + [ + '\n background-color: ', + ';\n border: 1px solid ', + ';\n\n &:focus {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:hover {\n background-color: ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n box-shadow: none;\n background-color: ', + ';\n border: 1px solid ', + ';\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.red1 + }, + function (_a) { + var theme = _a.theme + return theme.red1 + }, + function (_a) { + var theme = _a.theme + return polished.darken(0.05, theme.red1) + }, + function (_a) { + var theme = _a.theme + return polished.darken(0.05, theme.red1) + }, + function (_a) { + var theme = _a.theme + return polished.darken(0.05, theme.red1) + }, + function (_a) { + var theme = _a.theme + return polished.darken(0.1, theme.red1) + }, + function (_a) { + var theme = _a.theme + return polished.darken(0.1, theme.red1) + }, + function (_a) { + var theme = _a.theme + return theme.red1 + }, + function (_a) { + var theme = _a.theme + return theme.red1 + } +) +function ButtonConfirmed(_a) { + var confirmed = _a.confirmed, + altDisabledStyle = _a.altDisabledStyle, + rest = __rest(_a, ['confirmed', 'altDisabledStyle']) + if (confirmed) { + return jsxRuntime.jsx(ButtonConfirmedStyle, __assign({}, rest), void 0) + } else { + return jsxRuntime.jsx(ButtonPrimary, __assign({}, rest, { altDisabledStyle }), void 0) + } +} +function ButtonError(_a) { + var error = _a.error, + rest = __rest(_a, ['error']) + if (error) { + return jsxRuntime.jsx(ButtonErrorStyle, __assign({}, rest), void 0) + } else { + return jsxRuntime.jsx(ButtonPrimary, __assign({}, rest), void 0) + } +} +styled__default['default'](ButtonOutlined)( + templateObject_12$9 || + (templateObject_12$9 = __makeTemplateObject( + ['\n border: 1px solid;\n border-color: ', ';\n'], + ['\n border: 1px solid;\n border-color: ', ';\n'] + )), + function (_a) { + var theme = _a.theme + return theme.primary1 + } +) +styled__default['default'].div( + templateObject_13$5 || + (templateObject_13$5 = __makeTemplateObject( + [ + '\n height: 17px;\n width: 17px;\n border-radius: 50%;\n background-color: ', + ';\n display: flex;\n align-items: center;\n justify-content: center;\n', + ], + [ + '\n height: 17px;\n width: 17px;\n border-radius: 50%;\n background-color: ', + ';\n display: flex;\n align-items: center;\n justify-content: center;\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.primary1 + } +) +styled__default['default'].div( + templateObject_14$5 || + (templateObject_14$5 = __makeTemplateObject( + ['\n width: 20px;\n padding: 0 10px;\n position: absolute;\n top: 11px;\n right: 15px;\n'], + ['\n width: 20px;\n padding: 0 10px;\n position: absolute;\n top: 11px;\n right: 15px;\n'] + )) +) +styled__default['default'](reactFeather.Check)( + templateObject_15$3 || (templateObject_15$3 = __makeTemplateObject(['\n size: 13px;\n'], ['\n size: 13px;\n'])) +) +var templateObject_1$1g, + templateObject_2$W, + templateObject_3$N, + templateObject_4$C, + templateObject_5$t, + templateObject_6$n, + templateObject_7$j, + templateObject_8$g, + templateObject_9$f, + templateObject_10$b, + templateObject_11$9, + templateObject_12$9, + templateObject_13$5, + templateObject_14$5, + templateObject_15$3 + +var isClient = typeof window === 'object' +function getSize() { + return { + width: isClient ? window.innerWidth : undefined, + height: isClient ? window.innerHeight : undefined, + } +} +// https://usehooks.com/useWindowSize/ +function useWindowSize() { + var _a = __read(React.useState(getSize), 2), + windowSize = _a[0], + setWindowSize = _a[1] + React.useEffect(function () { + function handleResize() { + setWindowSize(getSize()) + } + if (isClient) { + window.addEventListener('resize', handleResize) + return function () { + window.removeEventListener('resize', handleResize) + } + } + return undefined + }, []) + return windowSize } -/** - * Parses a CurrencyAmount from the passed string. - * Returns the CurrencyAmount, or undefined if parsing fails. - */ -function tryParseCurrencyAmount(value, currency) { - if (!value || !currency) { - return undefined; - } - try { - var typedValueParsed = units.parseUnits(value, currency.decimals).toString(); - if (typedValueParsed !== '0') { - return sdkCore.CurrencyAmount.fromRawAmount(currency, JSBI__default["default"].BigInt(typedValueParsed)); - } - } - catch (error) { - // fails if the user specifies too many decimal places of precision (or maybe exceed max uint?) - console.debug("Failed to parse input amount: \"" + value + "\"", error); - } - return undefined; +// eslint-disable-next-line react/prop-types +function Confetti(_a) { + var start = _a.start, + variant = _a.variant + var _b = useWindowSize(), + width = _b.width, + height = _b.height + var _variant = variant ? variant : height && width && height > 1.5 * width ? 'bottom' : variant + return start && width && height + ? jsxRuntime.jsx( + ReactConfetti__default['default'], + { + style: { zIndex: 1401 }, + numberOfPieces: 400, + recycle: false, + run: true, + width, + height, + confettiSource: { + h: height, + w: width, + x: 0, + y: _variant === 'top' ? height * 0.25 : _variant === 'bottom' ? height * 0.75 : height * 0.5, + }, + initialVelocityX: 15, + initialVelocityY: 30, + gravity: 0.45, + tweenDuration: 100, + wind: 0.05, + }, + void 0 + ) + : null } -// returns whether tradeB is better than tradeA by at least a threshold percentage amount -// only used by v2 hooks -function isTradeBetter(tradeA, tradeB, minimumDelta) { - if (minimumDelta === void 0) { minimumDelta = ZERO_PERCENT; } - if (tradeA && !tradeB) - return false; - if (tradeB && !tradeA) - return true; - if (!tradeA || !tradeB) - return undefined; - if (tradeA.tradeType !== tradeB.tradeType || - !tradeA.inputAmount.currency.equals(tradeB.inputAmount.currency) || - !tradeA.outputAmount.currency.equals(tradeB.outputAmount.currency)) { - throw new Error('Comparing incomparable trades'); - } - if (minimumDelta.equalTo(ZERO_PERCENT)) { - return tradeA.executionPrice.lessThan(tradeB.executionPrice); - } - else { - return tradeA.executionPrice.asFraction - .multiply(minimumDelta.add(ONE_HUNDRED_PERCENT)) - .lessThan(tradeB.executionPrice); - } +var uImage = '10f062d02df4af77.png' + +var noise = 'f158a440053a5ad2.png' + +var xlUnicorn = 'c2cd04251aa24c34.png' + +var DataCard = styled__default['default'](AutoColumn)( + templateObject_1$1f || + (templateObject_1$1f = __makeTemplateObject( + [ + '\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #2172e5 100%);\n border-radius: 12px;\n width: 100%;\n position: relative;\n overflow: hidden;\n', + ], + [ + '\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #2172e5 100%);\n border-radius: 12px;\n width: 100%;\n position: relative;\n overflow: hidden;\n', + ] + )) +) +var CardBGImage = styled__default['default'].span( + templateObject_2$V || + (templateObject_2$V = __makeTemplateObject( + [ + '\n background: url(', + ');\n width: 1000px;\n height: 600px;\n position: absolute;\n border-radius: 12px;\n opacity: 0.4;\n top: -100px;\n left: -100px;\n transform: rotate(-15deg);\n user-select: none;\n ', + '\n', + ], + [ + '\n background: url(', + ');\n width: 1000px;\n height: 600px;\n position: absolute;\n border-radius: 12px;\n opacity: 0.4;\n top: -100px;\n left: -100px;\n transform: rotate(-15deg);\n user-select: none;\n ', + '\n', + ] + )), + uImage, + function (_a) { + var desaturate = _a.desaturate + return desaturate && 'filter: saturate(0)' + } +) +var CardBGImageSmaller = styled__default['default'].span( + templateObject_3$M || + (templateObject_3$M = __makeTemplateObject( + [ + '\n background: url(', + ');\n width: 1200px;\n height: 1200px;\n position: absolute;\n border-radius: 12px;\n top: -300px;\n left: -300px;\n opacity: 0.4;\n user-select: none;\n\n ', + '\n', + ], + [ + '\n background: url(', + ');\n width: 1200px;\n height: 1200px;\n position: absolute;\n border-radius: 12px;\n top: -300px;\n left: -300px;\n opacity: 0.4;\n user-select: none;\n\n ', + '\n', + ] + )), + xlUnicorn, + function (_a) { + var desaturate = _a.desaturate + return desaturate && 'filter: saturate(0)' + } +) +var CardNoise = styled__default['default'].span( + templateObject_4$B || + (templateObject_4$B = __makeTemplateObject( + [ + '\n background: url(', + ');\n background-size: cover;\n mix-blend-mode: overlay;\n border-radius: 12px;\n width: 100%;\n height: 100%;\n opacity: 0.15;\n position: absolute;\n top: 0;\n left: 0;\n user-select: none;\n', + ], + [ + '\n background: url(', + ');\n background-size: cover;\n mix-blend-mode: overlay;\n border-radius: 12px;\n width: 100%;\n height: 100%;\n opacity: 0.15;\n position: absolute;\n top: 0;\n left: 0;\n user-select: none;\n', + ] + )), + noise +) +var CardSection = styled__default['default'](AutoColumn)( + templateObject_5$s || + (templateObject_5$s = __makeTemplateObject( + ['\n padding: 1rem;\n z-index: 1;\n opacity: ', ';\n'], + ['\n padding: 1rem;\n z-index: 1;\n opacity: ', ';\n'] + )), + function (_a) { + var disabled = _a.disabled + return disabled && '0.4' + } +) +var Break$1 = styled__default['default'].div( + templateObject_6$m || + (templateObject_6$m = __makeTemplateObject( + ['\n width: 100%;\n background-color: rgba(255, 255, 255, 0.2);\n height: 1px;\n'], + ['\n width: 100%;\n background-color: rgba(255, 255, 255, 0.2);\n height: 1px;\n'] + )) +) +var templateObject_1$1f, + templateObject_2$V, + templateObject_3$M, + templateObject_4$B, + templateObject_5$s, + templateObject_6$m + +var parser = new uaParserJs.UAParser(window.navigator.userAgent) +var type$1 = parser.getDevice().type +var userAgent = parser.getResult() +var isMobile = type$1 === 'mobile' || type$1 === 'tablet' + +var AnimatedDialogOverlay = reactSpring.animated(dialog.DialogOverlay) +// eslint-disable-next-line @typescript-eslint/no-unused-vars +var StyledDialogOverlay = styled__default['default'](AnimatedDialogOverlay)( + templateObject_1$1e || + (templateObject_1$1e = __makeTemplateObject( + [ + '\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: ', + ';\n }\n', + ], + [ + '\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: ', + ';\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.modalBG + } +) +var AnimatedDialogContent = reactSpring.animated(dialog.DialogContent) +// destructure to not pass custom props to Dialog DOM element +// eslint-disable-next-line @typescript-eslint/no-unused-vars +var StyledDialogContent = styled__default['default'](function (_a) { + _a.minHeight + _a.maxHeight + _a.mobile + _a.isOpen + var rest = __rest(_a, ['minHeight', 'maxHeight', 'mobile', 'isOpen']) + return jsxRuntime.jsx(AnimatedDialogContent, __assign({}, rest), void 0) +}).attrs({ + 'aria-label': 'dialog', +})( + templateObject_7$i || + (templateObject_7$i = __makeTemplateObject( + [ + '\n overflow-y: auto;\n\n &[data-reach-dialog-content] {\n margin: 0 0 2rem 0;\n background-color: ', + ';\n border: 1px solid ', + ';\n box-shadow: 0 4px 8px 0 ', + ';\n padding: 0px;\n width: 50vw;\n overflow-y: auto;\n overflow-x: hidden;\n\n align-self: ', + ';\n\n max-width: 420px;\n ', + '\n ', + '\n display: flex;\n border-radius: 20px;\n ', + '\n ', + '\n }\n', + ], + [ + '\n overflow-y: auto;\n\n &[data-reach-dialog-content] {\n margin: 0 0 2rem 0;\n background-color: ', + ';\n border: 1px solid ', + ';\n box-shadow: 0 4px 8px 0 ', + ';\n padding: 0px;\n width: 50vw;\n overflow-y: auto;\n overflow-x: hidden;\n\n align-self: ', + ';\n\n max-width: 420px;\n ', + '\n ', + '\n display: flex;\n border-radius: 20px;\n ', + '\n ', + '\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.bg0 + }, + function (_a) { + var theme = _a.theme + return theme.bg1 + }, + function (_a) { + var theme = _a.theme + return polished.transparentize(0.95, theme.shadow1) + }, + function (_a) { + var mobile = _a.mobile + return mobile ? 'flex-end' : 'center' + }, + function (_a) { + var maxHeight = _a.maxHeight + return ( + maxHeight && + styled.css( + templateObject_2$U || + (templateObject_2$U = __makeTemplateObject( + ['\n max-height: ', 'vh;\n '], + ['\n max-height: ', 'vh;\n '] + )), + maxHeight + ) + ) + }, + function (_a) { + var minHeight = _a.minHeight + return ( + minHeight && + styled.css( + templateObject_3$L || + (templateObject_3$L = __makeTemplateObject( + ['\n min-height: ', 'vh;\n '], + ['\n min-height: ', 'vh;\n '] + )), + minHeight + ) + ) + }, + function (_a) { + var theme = _a.theme + return theme.mediaWidth.upToMedium( + templateObject_4$A || + (templateObject_4$A = __makeTemplateObject( + ['\n width: 65vw;\n margin: 0;\n '], + ['\n width: 65vw;\n margin: 0;\n '] + )) + ) + }, + function (_a) { + var theme = _a.theme, + mobile = _a.mobile + return theme.mediaWidth.upToSmall( + templateObject_6$l || + (templateObject_6$l = __makeTemplateObject( + ['\n width: 85vw;\n ', '\n '], + ['\n width: 85vw;\n ', '\n '] + )), + mobile && + styled.css( + templateObject_5$r || + (templateObject_5$r = __makeTemplateObject( + [ + '\n width: 100vw;\n border-radius: 20px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n ', + ], + [ + '\n width: 100vw;\n border-radius: 20px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n ', + ] + )) + ) + ) + } +) +function Modal(_a) { + var isOpen = _a.isOpen, + onDismiss = _a.onDismiss, + _b = _a.minHeight, + minHeight = _b === void 0 ? false : _b, + _c = _a.maxHeight, + maxHeight = _c === void 0 ? 90 : _c, + initialFocusRef = _a.initialFocusRef, + children = _a.children + var fadeTransition = reactSpring.useTransition(isOpen, null, { + config: { duration: 200 }, + from: { opacity: 0 }, + enter: { opacity: 1 }, + leave: { opacity: 0 }, + }) + var _d = __read( + reactSpring.useSpring(function () { + return { y: 0, config: { mass: 1, tension: 210, friction: 20 } } + }), + 2 + ), + y = _d[0].y, + set = _d[1] + var bind = reactUseGesture.useGesture({ + onDrag(state) { + set({ + y: state.down ? state.movement[1] : 0, + }) + if (state.movement[1] > 300 || (state.velocity > 3 && state.direction[1] > 0)) { + onDismiss() + } + }, + }) + return jsxRuntime.jsx( + jsxRuntime.Fragment, + { + children: fadeTransition.map(function (_a) { + var item = _a.item, + key = _a.key, + props = _a.props + return ( + item && + jsxRuntime.jsx( + StyledDialogOverlay, + __assign( + { + style: props, + onDismiss, + initialFocusRef, + unstable_lockFocusAcrossFrames: false, + }, + { + children: jsxRuntime.jsxs( + StyledDialogContent, + __assign( + {}, + isMobile + ? __assign(__assign({}, bind()), { + style: { + transform: y.interpolate(function (y) { + return 'translateY(' + (y > 0 ? y : 0) + 'px)' + }), + }, + }) + : {}, + { 'aria-label': 'dialog content', minHeight, maxHeight, mobile: isMobile }, + { + children: [ + !initialFocusRef && isMobile ? jsxRuntime.jsx('div', { tabIndex: 1 }, void 0) : null, + children, + ], + } + ), + void 0 + ), + } + ), + key + ) + ) + }), + }, + void 0 + ) +} +var templateObject_1$1e, + templateObject_2$U, + templateObject_3$L, + templateObject_4$A, + templateObject_5$r, + templateObject_6$l, + templateObject_7$i + +var ContentWrapper$4 = styled__default['default'](AutoColumn)( + templateObject_1$1d || (templateObject_1$1d = __makeTemplateObject(['\n width: 100%;\n'], ['\n width: 100%;\n'])) +) +var ModalUpper$1 = styled__default['default'](DataCard)( + templateObject_2$T || + (templateObject_2$T = __makeTemplateObject( + [ + '\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n', + ], + [ + '\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n', + ] + )) +) +var ConfirmOrLoadingWrapper$1 = styled__default['default'].div( + templateObject_3$K || + (templateObject_3$K = __makeTemplateObject( + ['\n width: 100%;\n padding: 24px;\n position: relative;\n background: ', ';\n'], + ['\n width: 100%;\n padding: 24px;\n position: relative;\n background: ', ';\n'] + )), + function (_a) { + var activeBG = _a.activeBG + return ( + activeBG && + 'radial-gradient(76.02% 75.41% at 1.84% 0%, rgba(255, 0, 122, 0.2) 0%, rgba(33, 114, 229, 0.2) 100%), #FFFFFF;' + ) + } +) +var ConfirmedIcon$2 = styled__default['default'](ColumnCenter)( + templateObject_4$z || + (templateObject_4$z = __makeTemplateObject(['\n padding: 60px 0;\n'], ['\n padding: 60px 0;\n'])) +) +function AddressClaimModal(_a) { + var _b, _c + var isOpen = _a.isOpen, + onDismiss = _a.onDismiss + var chainId = useActiveWeb3React().chainId + // state for smart contract input + var _d = __read(React.useState(''), 2), + typed = _d[0], + setTyped = _d[1] + function handleRecipientType(val) { + setTyped(val) + } + // monitor for third party recipient of claim + var parsedAddress = useENS(typed).address + // used for UI loading states + var _e = __read(React.useState(false), 2), + attempting = _e[0], + setAttempting = _e[1] + // monitor the status of the claim from contracts and txns + var claimCallback = useClaimCallback(parsedAddress).claimCallback + var unclaimedAmount = useUserUnclaimedAmount(parsedAddress) + // check if the user has something available + var hasAvailableClaim = useUserHasAvailableClaim(parsedAddress) + var _f = __read(React.useState(), 2), + hash = _f[0], + setHash = _f[1] + // monitor the status of the claim from contracts and txns + var claimPending = useIsTransactionPending(hash !== null && hash !== void 0 ? hash : '') + var claimConfirmed = hash && !claimPending + // use the hash to monitor this txn + function onClaim() { + setAttempting(true) + claimCallback() + .then(function (hash) { + setHash(hash) + }) + // reset modal and log error + .catch(function (error) { + setAttempting(false) + console.log(error) + }) + } + function wrappedOnDismiss() { + setAttempting(false) + setHash(undefined) + setTyped('') + onDismiss() + } + return jsxRuntime.jsxs( + Modal, + __assign( + { isOpen, onDismiss: wrappedOnDismiss, maxHeight: 90 }, + { + children: [ + jsxRuntime.jsx(Confetti, { start: Boolean(isOpen && claimConfirmed && attempting) }, void 0), + !attempting && + jsxRuntime.jsxs( + ContentWrapper$4, + __assign( + { gap: 'lg' }, + { + children: [ + jsxRuntime.jsxs( + ModalUpper$1, + { + children: [ + jsxRuntime.jsx(CardBGImage, {}, void 0), + jsxRuntime.jsx(CardNoise, {}, void 0), + jsxRuntime.jsxs( + CardSection, + __assign( + { gap: 'md' }, + { + children: [ + jsxRuntime.jsxs( + RowBetween, + { + children: [ + jsxRuntime.jsx( + ThemedText.White, + __assign( + { fontWeight: 500 }, + { + children: jsxRuntime.jsx( + macro.Trans, + { children: 'Claim UNI Token' }, + void 0 + ), + } + ), + void 0 + ), + jsxRuntime.jsx( + CloseIcon$2, + { onClick: wrappedOnDismiss, style: { zIndex: 99 }, stroke: 'white' }, + void 0 + ), + ], + }, + void 0 + ), + jsxRuntime.jsx( + ThemedText.White, + __assign( + { fontWeight: 700, fontSize: 36 }, + { + children: jsxRuntime.jsxs( + macro.Trans, + { + children: [ + unclaimedAmount === null || unclaimedAmount === void 0 + ? void 0 + : unclaimedAmount.toFixed( + 0, + (_b = { groupSeparator: ',' }) !== null && _b !== void 0 ? _b : '-' + ), + ' UNI', + ], + }, + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + jsxRuntime.jsx(Break$1, {}, void 0), + ], + }, + void 0 + ), + jsxRuntime.jsxs( + AutoColumn, + __assign( + { gap: 'md', style: { padding: '1rem', paddingTop: '0' }, justify: 'center' }, + { + children: [ + jsxRuntime.jsx( + ThemedText.SubHeader, + __assign( + { fontWeight: 500 }, + { + children: jsxRuntime.jsx( + macro.Trans, + { + children: + 'Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.', + }, + void 0 + ), + } + ), + void 0 + ), + jsxRuntime.jsx(AddressInputPanel, { value: typed, onChange: handleRecipientType }, void 0), + parsedAddress && + !hasAvailableClaim && + jsxRuntime.jsx( + ThemedText.Error, + __assign( + { error: true }, + { + children: jsxRuntime.jsx( + macro.Trans, + { children: 'Address has no available claim' }, + void 0 + ), + } + ), + void 0 + ), + jsxRuntime.jsx( + ButtonPrimary, + __assign( + { + disabled: + !address.isAddress( + parsedAddress !== null && parsedAddress !== void 0 ? parsedAddress : '' + ) || !hasAvailableClaim, + padding: '16px 16px', + width: '100%', + $borderRadius: '12px', + mt: '1rem', + onClick: onClaim, + }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'Claim UNI' }, void 0) } + ), + void 0 + ), + ], + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + (attempting || claimConfirmed) && + jsxRuntime.jsxs( + ConfirmOrLoadingWrapper$1, + __assign( + { activeBG: true }, + { + children: [ + jsxRuntime.jsx(CardNoise, {}, void 0), + jsxRuntime.jsx(CardBGImageSmaller, { desaturate: true }, void 0), + jsxRuntime.jsxs( + RowBetween, + { + children: [ + jsxRuntime.jsx('div', {}, void 0), + jsxRuntime.jsx( + CloseIcon$2, + { onClick: wrappedOnDismiss, style: { zIndex: 99 }, stroke: 'black' }, + void 0 + ), + ], + }, + void 0 + ), + jsxRuntime.jsx( + ConfirmedIcon$2, + { + children: !claimConfirmed + ? jsxRuntime.jsx(CustomLightSpinner, { src: Circle$1, alt: 'loader', size: '90px' }, void 0) + : jsxRuntime.jsx( + UniTokenAnimated, + { width: '72px', src: tokenLogo, alt: 'UNI logo' }, + void 0 + ), + }, + void 0 + ), + jsxRuntime.jsxs( + AutoColumn, + __assign( + { gap: '100px', justify: 'center' }, + { + children: [ + jsxRuntime.jsxs( + AutoColumn, + __assign( + { gap: '12px', justify: 'center' }, + { + children: [ + jsxRuntime.jsx( + ThemedText.LargeHeader, + __assign( + { fontWeight: 600, color: 'black' }, + { + children: claimConfirmed + ? jsxRuntime.jsx(macro.Trans, { children: 'Claimed' }, void 0) + : jsxRuntime.jsx(macro.Trans, { children: 'Claiming' }, void 0), + } + ), + void 0 + ), + !claimConfirmed && + jsxRuntime.jsx( + rebass.Text, + __assign( + { fontSize: 36, color: '#ff007a', fontWeight: 800 }, + { + children: jsxRuntime.jsxs( + macro.Trans, + { + children: [ + unclaimedAmount === null || unclaimedAmount === void 0 + ? void 0 + : unclaimedAmount.toFixed( + 0, + (_c = { groupSeparator: ',' }) !== null && _c !== void 0 + ? _c + : '-' + ), + ' UNI', + ], + }, + void 0 + ), + } + ), + void 0 + ), + parsedAddress && + jsxRuntime.jsx( + ThemedText.LargeHeader, + __assign( + { fontWeight: 600, color: 'black' }, + { + children: jsxRuntime.jsxs( + macro.Trans, + { children: ['for ', shortenAddress(parsedAddress)] }, + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + claimConfirmed && + jsxRuntime.jsx( + jsxRuntime.Fragment, + { + children: jsxRuntime.jsxs( + ThemedText.SubHeader, + __assign( + { fontWeight: 500, color: 'black' }, + { + children: [ + jsxRuntime.jsxs( + 'span', + __assign( + { role: 'img', 'aria-label': 'party-hat' }, + { children: ['\uD83C\uDF89', ' '] } + ), + void 0 + ), + jsxRuntime.jsx( + macro.Trans, + { children: 'Welcome to team Unicorn :) ' }, + void 0 + ), + jsxRuntime.jsx( + 'span', + __assign( + { role: 'img', 'aria-label': 'party-hat' }, + { children: '\uD83C\uDF89' } + ), + void 0 + ), + ], + } + ), + void 0 + ), + }, + void 0 + ), + attempting && + !hash && + jsxRuntime.jsx( + ThemedText.SubHeader, + __assign( + { color: 'black' }, + { + children: jsxRuntime.jsx( + macro.Trans, + { children: 'Confirm this transaction in your wallet' }, + void 0 + ), + } + ), + void 0 + ), + attempting && + hash && + !claimConfirmed && + chainId && + hash && + jsxRuntime.jsx( + ExternalLink, + __assign( + { + href: getExplorerLink(chainId, hash, ExplorerDataType.TRANSACTION), + style: { zIndex: 99 }, + }, + { + children: jsxRuntime.jsx( + macro.Trans, + { children: 'View transaction on Explorer' }, + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + ], + } + ), + void 0 + ) } +var templateObject_1$1d, templateObject_2$T, templateObject_3$K, templateObject_4$z + +var _a$a +var ApplicationModal +;(function (ApplicationModal) { + ApplicationModal[(ApplicationModal['WALLET'] = 0)] = 'WALLET' + ApplicationModal[(ApplicationModal['SETTINGS'] = 1)] = 'SETTINGS' + ApplicationModal[(ApplicationModal['SELF_CLAIM'] = 2)] = 'SELF_CLAIM' + ApplicationModal[(ApplicationModal['ADDRESS_CLAIM'] = 3)] = 'ADDRESS_CLAIM' + ApplicationModal[(ApplicationModal['CLAIM_POPUP'] = 4)] = 'CLAIM_POPUP' + ApplicationModal[(ApplicationModal['MENU'] = 5)] = 'MENU' + ApplicationModal[(ApplicationModal['DELEGATE'] = 6)] = 'DELEGATE' + ApplicationModal[(ApplicationModal['VOTE'] = 7)] = 'VOTE' + ApplicationModal[(ApplicationModal['POOL_OVERVIEW_OPTIONS'] = 8)] = 'POOL_OVERVIEW_OPTIONS' + ApplicationModal[(ApplicationModal['NETWORK_SELECTOR'] = 9)] = 'NETWORK_SELECTOR' + ApplicationModal[(ApplicationModal['PRIVACY_POLICY'] = 10)] = 'PRIVACY_POLICY' +})(ApplicationModal || (ApplicationModal = {})) +var initialState$8 = { + chainId: null, + openModal: null, + popupList: [], +} +var applicationSlice = toolkit.createSlice({ + name: 'application', + initialState: initialState$8, + reducers: { + updateChainId(state, action) { + var chainId = action.payload.chainId + state.chainId = chainId + }, + setOpenModal(state, action) { + state.openModal = action.payload + }, + addPopup(state, _a) { + var _b = _a.payload, + content = _b.content, + key = _b.key, + _c = _b.removeAfterMs, + removeAfterMs = _c === void 0 ? DEFAULT_TXN_DISMISS_MS : _c + state.popupList = ( + key + ? state.popupList.filter(function (popup) { + return popup.key !== key + }) + : state.popupList + ).concat([ + { + key: key || toolkit.nanoid(), + show: true, + content, + removeAfterMs, + }, + ]) + }, + removePopup(state, _a) { + var key = _a.payload.key + state.popupList.forEach(function (p) { + if (p.key === key) { + p.show = false + } + }) + }, + }, +}) +var updateChainId = ((_a$a = applicationSlice.actions), _a$a.updateChainId), + setOpenModal = _a$a.setOpenModal, + addPopup = _a$a.addPopup, + removePopup = _a$a.removePopup +var application = applicationSlice.reducer + +var Field$3 +;(function (Field) { + Field['LIQUIDITY_PERCENT'] = 'LIQUIDITY_PERCENT' + Field['LIQUIDITY'] = 'LIQUIDITY' + Field['CURRENCY_A'] = 'CURRENCY_A' + Field['CURRENCY_B'] = 'CURRENCY_B' +})(Field$3 || (Field$3 = {})) +var typeInput$3 = toolkit.createAction('burn/typeInputBurn') + +var initialState$7 = { + independentField: Field$3.LIQUIDITY_PERCENT, + typedValue: '0', +} +var burn = toolkit.createReducer(initialState$7, function (builder) { + return builder.addCase(typeInput$3, function (state, _a) { + var _b = _a.payload, + field = _b.field, + typedValue = _b.typedValue + return __assign(__assign({}, state), { independentField: field, typedValue }) + }) +}) -function useAllCurrencyCombinations(currencyA, currencyB) { - var chainId = currencyA === null || currencyA === void 0 ? void 0 : currencyA.chainId; - var _a = __read(chainId ? [currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped, currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped] : [undefined, undefined], 2), tokenA = _a[0], tokenB = _a[1]; - var bases = React.useMemo(function () { - var _a, _b, _c, _d, _e; - if (!chainId || chainId !== (tokenB === null || tokenB === void 0 ? void 0 : tokenB.chainId)) - return []; - var common = (_a = BASES_TO_CHECK_TRADES_AGAINST[chainId]) !== null && _a !== void 0 ? _a : []; - var additionalA = tokenA ? (_c = (_b = ADDITIONAL_BASES[chainId]) === null || _b === void 0 ? void 0 : _b[tokenA.address]) !== null && _c !== void 0 ? _c : [] : []; - var additionalB = tokenB ? (_e = (_d = ADDITIONAL_BASES[chainId]) === null || _d === void 0 ? void 0 : _d[tokenB.address]) !== null && _e !== void 0 ? _e : [] : []; - return __spreadArray(__spreadArray(__spreadArray([], __read(common), false), __read(additionalA), false), __read(additionalB), false); - }, [chainId, tokenA, tokenB]); - var basePairs = React.useMemo(function () { - return bases - .flatMap(function (base) { return bases.map(function (otherBase) { return [base, otherBase]; }); }) - // though redundant with the first filter below, that expression runs more often, so this is probably worthwhile - .filter(function (_a) { - var _b = __read(_a, 2), t0 = _b[0], t1 = _b[1]; - return !t0.equals(t1); - }); - }, [bases]); - return React.useMemo(function () { - return tokenA && tokenB - ? __spreadArray(__spreadArray(__spreadArray([ - // the direct pair - [tokenA, tokenB] - ], __read(bases.map(function (base) { return [tokenA, base]; })), false), __read(bases.map(function (base) { return [tokenB, base]; })), false), __read(basePairs), false).filter(function (_a) { - var _b = __read(_a, 2), t0 = _b[0], t1 = _b[1]; - return !t0.equals(t1); - }) - // filter out duplicate pairs - .filter(function (_a, i, otherPairs) { - var _b = __read(_a, 2), t0 = _b[0], t1 = _b[1]; - // find the first index in the array at which there are the same 2 tokens as the current - var firstIndexInOtherPairs = otherPairs.findIndex(function (_a) { - var _b = __read(_a, 2), t0Other = _b[0], t1Other = _b[1]; - return (t0.equals(t0Other) && t1.equals(t1Other)) || (t0.equals(t1Other) && t1.equals(t0Other)); - }); - // only accept the first occurrence of the same 2 tokens - return firstIndexInOtherPairs === i; - }) - // optionally filter out some pairs for tokens with custom bases defined - .filter(function (_a) { - var _b = __read(_a, 2), tokenA = _b[0], tokenB = _b[1]; - if (!chainId) - return true; - var customBases = CUSTOM_BASES[chainId]; - var customBasesA = customBases === null || customBases === void 0 ? void 0 : customBases[tokenA.address]; - var customBasesB = customBases === null || customBases === void 0 ? void 0 : customBases[tokenB.address]; - if (!customBasesA && !customBasesB) - return true; - if (customBasesA && !customBasesA.find(function (base) { return tokenB.equals(base); })) - return false; - if (customBasesB && !customBasesB.find(function (base) { return tokenA.equals(base); })) - return false; - return true; - }) - : []; - }, [tokenA, tokenB, bases, basePairs, chainId]); -} - -var PAIR_INTERFACE = new abi$7.Interface(abi$4); -var PairState; -(function (PairState) { - PairState[PairState["LOADING"] = 0] = "LOADING"; - PairState[PairState["NOT_EXISTS"] = 1] = "NOT_EXISTS"; - PairState[PairState["EXISTS"] = 2] = "EXISTS"; - PairState[PairState["INVALID"] = 3] = "INVALID"; -})(PairState || (PairState = {})); -function useV2Pairs(currencies) { - var tokens = React.useMemo(function () { return currencies.map(function (_a) { - var _b = __read(_a, 2), currencyA = _b[0], currencyB = _b[1]; - return [currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped, currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped]; - }); }, [currencies]); - var pairAddresses = React.useMemo(function () { - return tokens.map(function (_a) { - var _b = __read(_a, 2), tokenA = _b[0], tokenB = _b[1]; - return tokenA && - tokenB && - tokenA.chainId === tokenB.chainId && - !tokenA.equals(tokenB) && - V2_FACTORY_ADDRESSES[tokenA.chainId] - ? v2Sdk.computePairAddress({ factoryAddress: V2_FACTORY_ADDRESSES[tokenA.chainId], tokenA: tokenA, tokenB: tokenB }) - : undefined; - }); - }, [tokens]); - var results = useMultipleContractSingleData(pairAddresses, PAIR_INTERFACE, 'getReserves'); - return React.useMemo(function () { - return results.map(function (result, i) { - var reserves = result.result, loading = result.loading; - var tokenA = tokens[i][0]; - var tokenB = tokens[i][1]; - if (loading) - return [PairState.LOADING, null]; - if (!tokenA || !tokenB || tokenA.equals(tokenB)) - return [PairState.INVALID, null]; - if (!reserves) - return [PairState.NOT_EXISTS, null]; - var reserve0 = reserves.reserve0, reserve1 = reserves.reserve1; - var _a = __read(tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA], 2), token0 = _a[0], token1 = _a[1]; - return [ - PairState.EXISTS, - new v2Sdk.Pair(sdkCore.CurrencyAmount.fromRawAmount(token0, reserve0.toString()), sdkCore.CurrencyAmount.fromRawAmount(token1, reserve1.toString())), - ]; - }); - }, [results, tokens]); +var selectPercent = toolkit.createAction('burnV3/selectBurnPercent') + +var initialState$6 = { + percent: 0, +} +var burnV3 = toolkit.createReducer(initialState$6, function (builder) { + return builder.addCase(selectPercent, function (state, _a) { + var percent = _a.payload.percent + return __assign(__assign({}, state), { percent }) + }) +}) + +var _a$9 +// List of supported subgraphs. Note that the app currently only support one active subgraph at a time +var CHAIN_SUBGRAPH_URL = + ((_a$9 = {}), + (_a$9[SupportedChainId.MAINNET] = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3'), + (_a$9[SupportedChainId.RINKEBY] = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3'), + (_a$9[SupportedChainId.ARBITRUM_ONE] = 'https://api.thegraph.com/subgraphs/name/ianlapham/arbitrum-minimal'), + (_a$9[SupportedChainId.OPTIMISM] = 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-optimism-dev'), + (_a$9[SupportedChainId.POLYGON] = 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-v3-polygon'), + _a$9) +var api$1 = react.createApi({ + reducerPath: 'dataApi', + baseQuery: graphqlRequestBaseQuery(), + endpoints(builder) { + return { + allV3Ticks: builder.query({ + query(_a) { + var poolAddress = _a.poolAddress, + _b = _a.skip, + skip = _b === void 0 ? 0 : _b + return { + document: graphqlRequest.gql( + templateObject_1$1c || + (templateObject_1$1c = __makeTemplateObject( + [ + '\n query allV3Ticks($poolAddress: String!, $skip: Int!) {\n ticks(first: 1000, skip: $skip, where: { poolAddress: $poolAddress }, orderBy: tickIdx) {\n tick: tickIdx\n liquidityNet\n price0\n price1\n }\n }\n ', + ], + [ + '\n query allV3Ticks($poolAddress: String!, $skip: Int!) {\n ticks(first: 1000, skip: $skip, where: { poolAddress: $poolAddress }, orderBy: tickIdx) {\n tick: tickIdx\n liquidityNet\n price0\n price1\n }\n }\n ', + ] + )) + ), + variables: { + poolAddress, + skip, + }, + } + }, + }), + feeTierDistribution: builder.query({ + query(_a) { + var token0 = _a.token0, + token1 = _a.token1 + return { + document: graphqlRequest.gql( + templateObject_2$S || + (templateObject_2$S = __makeTemplateObject( + [ + '\n query feeTierDistribution($token0: String!, $token1: String!) {\n _meta {\n block {\n number\n }\n }\n asToken0: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token0, token1: $token1 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n asToken1: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token1, token1: $token0 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n }\n ', + ], + [ + '\n query feeTierDistribution($token0: String!, $token1: String!) {\n _meta {\n block {\n number\n }\n }\n asToken0: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token0, token1: $token1 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n asToken1: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token1, token1: $token0 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n }\n ', + ] + )) + ), + variables: { + token0, + token1, + }, + } + }, + }), + } + }, +}) +// Graphql query client wrapper that builds a dynamic url based on chain id +function graphqlRequestBaseQuery() { + var _this = this + return function (_a, _b) { + var document = _a.document, + variables = _a.variables + var getState = _b.getState + return __awaiter(_this, void 0, void 0, function () { + var chainId, subgraphUrl, error_1, name_1, message, stack, request, response + var _c + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + chainId = getState().application.chainId + subgraphUrl = chainId ? CHAIN_SUBGRAPH_URL[chainId] : undefined + if (!subgraphUrl) { + return [ + 2 /*return*/, + { + error: { + name: 'UnsupportedChainId', + message: 'Subgraph queries against ChainId ' + chainId + ' are not supported.', + stack: '', + }, + }, + ] + } + _c = {} + return [4 /*yield*/, new graphqlRequest.GraphQLClient(subgraphUrl).request(document, variables)] + case 1: + return [2 /*return*/, ((_c.data = _d.sent()), (_c.meta = {}), _c)] + case 2: + error_1 = _d.sent() + if (error_1 instanceof graphqlRequest.ClientError) { + ;(name_1 = error_1.name), + (message = error_1.message), + (stack = error_1.stack), + (request = error_1.request), + (response = error_1.response) + return [ + 2 /*return*/, + { + error: { name: name_1, message, stack }, + meta: { request, response }, + }, + ] + } + throw error_1 + case 3: + return [2 /*return*/] + } + }) + }) + } } +var templateObject_1$1c, templateObject_2$S -function useAllCommonPairs(currencyA, currencyB) { - var allCurrencyCombinations = useAllCurrencyCombinations(currencyA, currencyB); - var allPairs = useV2Pairs(allCurrencyCombinations); - return React.useMemo(function () { - return Object.values(allPairs - // filter out invalid pairs - .filter(function (result) { return Boolean(result[0] === PairState.EXISTS && result[1]); }) - .map(function (_a) { - var _b = __read(_a, 2), pair = _b[1]; - return pair; - })); - }, [allPairs]); -} -var MAX_HOPS = 3; -/** - * Returns the best v2 trade for a desired swap - * @param tradeType whether the swap is an exact in/out - * @param amountSpecified the exact amount to swap in/out - * @param otherCurrency the desired output/payment currency - */ -function useBestV2Trade(tradeType, amountSpecified, otherCurrency, _a) { - var _b = _a === void 0 ? {} : _a, _c = _b.maxHops, maxHops = _c === void 0 ? MAX_HOPS : _c; - var _d = __read(React.useMemo(function () { - return tradeType === sdkCore.TradeType.EXACT_INPUT - ? [amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, otherCurrency] - : [otherCurrency, amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency]; - }, [tradeType, amountSpecified, otherCurrency]), 2), currencyIn = _d[0], currencyOut = _d[1]; - var allowedPairs = useAllCommonPairs(currencyIn, currencyOut); - return React.useMemo(function () { - var _a, _b, _c, _d; - if (amountSpecified && currencyIn && currencyOut && allowedPairs.length > 0) { - if (maxHops === 1) { - var options = { maxHops: 1, maxNumResults: 1 }; - if (tradeType === sdkCore.TradeType.EXACT_INPUT) { - var amountIn = amountSpecified; - return (_a = v2Sdk.Trade.bestTradeExactIn(allowedPairs, amountIn, currencyOut, options)[0]) !== null && _a !== void 0 ? _a : null; - } - else { - var amountOut = amountSpecified; - return (_b = v2Sdk.Trade.bestTradeExactOut(allowedPairs, currencyIn, amountOut, options)[0]) !== null && _b !== void 0 ? _b : null; - } - } - // search through trades with varying hops, find best trade out of them - var bestTradeSoFar = null; - for (var i = 1; i <= maxHops; i++) { - var options = { maxHops: i, maxNumResults: 1 }; - var currentTrade = void 0; - if (tradeType === sdkCore.TradeType.EXACT_INPUT) { - var amountIn = amountSpecified; - currentTrade = (_c = v2Sdk.Trade.bestTradeExactIn(allowedPairs, amountIn, currencyOut, options)[0]) !== null && _c !== void 0 ? _c : null; - } - else { - var amountOut = amountSpecified; - currentTrade = (_d = v2Sdk.Trade.bestTradeExactOut(allowedPairs, currencyIn, amountOut, options)[0]) !== null && _d !== void 0 ? _d : null; - } - // if current trade is best yet, save it - if (isTradeBetter(bestTradeSoFar, currentTrade, BETTER_TRADE_LESS_HOPS_THRESHOLD)) { - bestTradeSoFar = currentTrade; - } - } - return bestTradeSoFar; - } - return null; - }, [tradeType, amountSpecified, currencyIn, currencyOut, allowedPairs, maxHops]); -} - -var TradeState; -(function (TradeState) { - TradeState[TradeState["LOADING"] = 0] = "LOADING"; - TradeState[TradeState["INVALID"] = 1] = "INVALID"; - TradeState[TradeState["NO_ROUTE_FOUND"] = 2] = "NO_ROUTE_FOUND"; - TradeState[TradeState["VALID"] = 3] = "VALID"; - TradeState[TradeState["SYNCING"] = 4] = "SYNCING"; -})(TradeState || (TradeState = {})); -var InterfaceTrade = /** @class */ (function (_super) { - __extends(InterfaceTrade, _super); - function InterfaceTrade(_a) { - var gasUseEstimateUSD = _a.gasUseEstimateUSD, routes = __rest(_a, ["gasUseEstimateUSD"]); - var _this = _super.call(this, routes) || this; - _this.gasUseEstimateUSD = gasUseEstimateUSD; - return _this; - } - return InterfaceTrade; -}(routerSdk.Trade)); +// fired once when the app reloads but before the app renders +// allows any updates to be applied to store data loaded from localStorage +var updateVersion = toolkit.createAction('global/updateVersion') -var abi = [ - { - inputs: [ - ], - name: "feeGrowthGlobal0X128", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - ], - name: "feeGrowthGlobal1X128", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - ], - name: "liquidity", - outputs: [ - { - internalType: "uint128", - name: "", - type: "uint128" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "index", - type: "uint256" - } - ], - name: "observations", - outputs: [ - { - internalType: "uint32", - name: "blockTimestamp", - type: "uint32" - }, - { - internalType: "int56", - name: "tickCumulative", - type: "int56" - }, - { - internalType: "uint160", - name: "secondsPerLiquidityCumulativeX128", - type: "uint160" - }, - { - internalType: "bool", - name: "initialized", - type: "bool" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "bytes32", - name: "key", - type: "bytes32" - } - ], - name: "positions", - outputs: [ - { - internalType: "uint128", - name: "_liquidity", - type: "uint128" - }, - { - internalType: "uint256", - name: "feeGrowthInside0LastX128", - type: "uint256" - }, - { - internalType: "uint256", - name: "feeGrowthInside1LastX128", - type: "uint256" - }, - { - internalType: "uint128", - name: "tokensOwed0", - type: "uint128" - }, - { - internalType: "uint128", - name: "tokensOwed1", - type: "uint128" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - ], - name: "protocolFees", - outputs: [ - { - internalType: "uint128", - name: "token0", - type: "uint128" - }, - { - internalType: "uint128", - name: "token1", - type: "uint128" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - ], - name: "slot0", - outputs: [ - { - internalType: "uint160", - name: "sqrtPriceX96", - type: "uint160" - }, - { - internalType: "int24", - name: "tick", - type: "int24" - }, - { - internalType: "uint16", - name: "observationIndex", - type: "uint16" - }, - { - internalType: "uint16", - name: "observationCardinality", - type: "uint16" - }, - { - internalType: "uint16", - name: "observationCardinalityNext", - type: "uint16" - }, - { - internalType: "uint8", - name: "feeProtocol", - type: "uint8" - }, - { - internalType: "bool", - name: "unlocked", - type: "bool" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "int16", - name: "wordPosition", - type: "int16" - } - ], - name: "tickBitmap", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "int24", - name: "tick", - type: "int24" - } - ], - name: "ticks", - outputs: [ - { - internalType: "uint128", - name: "liquidityGross", - type: "uint128" - }, - { - internalType: "int128", - name: "liquidityNet", - type: "int128" - }, - { - internalType: "uint256", - name: "feeGrowthOutside0X128", - type: "uint256" - }, - { - internalType: "uint256", - name: "feeGrowthOutside1X128", - type: "uint256" - }, - { - internalType: "int56", - name: "tickCumulativeOutside", - type: "int56" - }, - { - internalType: "uint160", - name: "secondsPerLiquidityOutsideX128", - type: "uint160" - }, - { - internalType: "uint32", - name: "secondsOutside", - type: "uint32" - }, - { - internalType: "bool", - name: "initialized", - type: "bool" - } - ], - stateMutability: "view", - type: "function" - } -]; +var fetchTokenList = { + pending: toolkit.createAction('lists/fetchTokenList/pending'), + fulfilled: toolkit.createAction('lists/fetchTokenList/fulfilled'), + rejected: toolkit.createAction('lists/fetchTokenList/rejected'), +} +// add and remove from list options +var addList = toolkit.createAction('lists/addList') +var removeList = toolkit.createAction('lists/removeList') +// select which lists to search across from loaded lists +var enableList = toolkit.createAction('lists/enableList') +var disableList = toolkit.createAction('lists/disableList') +// versioning +var acceptListUpdate = toolkit.createAction('lists/acceptListUpdate') + +var NEW_LIST_STATE = { + error: null, + current: null, + loadingRequestId: null, + pendingUpdate: null, +} +var initialState$5 = { + lastInitializedDefaultListOfLists: DEFAULT_LIST_OF_LISTS, + byUrl: __assign( + {}, + DEFAULT_LIST_OF_LISTS.reduce(function (memo, listUrl) { + memo[listUrl] = NEW_LIST_STATE + return memo + }, {}) + ), + activeListUrls: DEFAULT_ACTIVE_LIST_URLS, +} +var lists = toolkit.createReducer(initialState$5, function (builder) { + return builder + .addCase(fetchTokenList.pending, function (state, _a) { + var _b, _c, _d, _e + var _f = _a.payload, + requestId = _f.requestId, + url = _f.url + var current = + (_c = (_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.current) !== null && _c !== void 0 + ? _c + : null + var pendingUpdate = + (_e = (_d = state.byUrl[url]) === null || _d === void 0 ? void 0 : _d.pendingUpdate) !== null && _e !== void 0 + ? _e + : null + state.byUrl[url] = { + current, + pendingUpdate, + loadingRequestId: requestId, + error: null, + } + }) + .addCase(fetchTokenList.fulfilled, function (state, _a) { + var _b, _c, _d + var _e = _a.payload, + requestId = _e.requestId, + tokenList = _e.tokenList, + url = _e.url + var current = (_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.current + var loadingRequestId = (_c = state.byUrl[url]) === null || _c === void 0 ? void 0 : _c.loadingRequestId + // no-op if update does nothing + if (current) { + var upgradeType = tokenLists.getVersionUpgrade(current.version, tokenList.version) + if (upgradeType === tokenLists.VersionUpgrade.NONE) return + if (loadingRequestId === null || loadingRequestId === requestId) { + state.byUrl[url] = { + current, + pendingUpdate: tokenList, + loadingRequestId: null, + error: null, + } + } + } else { + // activate if on default active + if (DEFAULT_ACTIVE_LIST_URLS.includes(url)) { + ;(_d = state.activeListUrls) === null || _d === void 0 ? void 0 : _d.push(url) + } + state.byUrl[url] = { + current: tokenList, + pendingUpdate: null, + loadingRequestId: null, + error: null, + } + } + }) + .addCase(fetchTokenList.rejected, function (state, _a) { + var _b + var _c = _a.payload, + url = _c.url, + requestId = _c.requestId, + errorMessage = _c.errorMessage + if (((_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.loadingRequestId) !== requestId) { + // no-op since it's not the latest request + return + } + state.byUrl[url] = { + current: state.byUrl[url].current ? state.byUrl[url].current : null, + pendingUpdate: null, + loadingRequestId: null, + error: errorMessage, + } + }) + .addCase(addList, function (state, _a) { + var url = _a.payload + if (!state.byUrl[url]) { + state.byUrl[url] = NEW_LIST_STATE + } + }) + .addCase(removeList, function (state, _a) { + var url = _a.payload + if (state.byUrl[url]) { + delete state.byUrl[url] + } + // remove list from active urls if needed + if (state.activeListUrls && state.activeListUrls.includes(url)) { + state.activeListUrls = state.activeListUrls.filter(function (u) { + return u !== url + }) + } + }) + .addCase(enableList, function (state, _a) { + var url = _a.payload + if (!state.byUrl[url]) { + state.byUrl[url] = NEW_LIST_STATE + } + if (state.activeListUrls && !state.activeListUrls.includes(url)) { + state.activeListUrls.push(url) + } + if (!state.activeListUrls) { + state.activeListUrls = [url] + } + }) + .addCase(disableList, function (state, _a) { + var url = _a.payload + if (state.activeListUrls && state.activeListUrls.includes(url)) { + state.activeListUrls = state.activeListUrls.filter(function (u) { + return u !== url + }) + } + }) + .addCase(acceptListUpdate, function (state, _a) { + var _b + var url = _a.payload + if (!((_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.pendingUpdate)) { + throw new Error('accept list update called without pending update') + } + state.byUrl[url] = __assign(__assign({}, state.byUrl[url]), { + current: state.byUrl[url].pendingUpdate, + pendingUpdate: null, + }) + }) + .addCase(updateVersion, function (state) { + // state loaded from localStorage, but new lists have never been initialized + if (!state.lastInitializedDefaultListOfLists) { + state.byUrl = initialState$5.byUrl + state.activeListUrls = initialState$5.activeListUrls + } else if (state.lastInitializedDefaultListOfLists) { + var lastInitializedSet_1 = state.lastInitializedDefaultListOfLists.reduce(function (s, l) { + return s.add(l) + }, new Set()) + var newListOfListsSet_1 = DEFAULT_LIST_OF_LISTS.reduce(function (s, l) { + return s.add(l) + }, new Set()) + DEFAULT_LIST_OF_LISTS.forEach(function (listUrl) { + if (!lastInitializedSet_1.has(listUrl)) { + state.byUrl[listUrl] = NEW_LIST_STATE + } + }) + state.lastInitializedDefaultListOfLists.forEach(function (listUrl) { + if (!newListOfListsSet_1.has(listUrl)) { + delete state.byUrl[listUrl] + } + }) + } + state.lastInitializedDefaultListOfLists = DEFAULT_LIST_OF_LISTS + // if no active lists, activate defaults + if (!state.activeListUrls) { + state.activeListUrls = DEFAULT_ACTIVE_LIST_URLS + // for each list on default list, initialize if needed + DEFAULT_ACTIVE_LIST_URLS.map(function (listUrl) { + if (!state.byUrl[listUrl]) { + state.byUrl[listUrl] = NEW_LIST_STATE + } + return true + }) + } + }) +}) + +/** + * Converts a filter to the corresponding string key + * @param filter the filter to convert + */ +function filterToKey(filter) { + var _a, _b, _c, _d + return ( + ((_a = filter.address) !== null && _a !== void 0 ? _a : '') + + ':' + + ((_d = + (_c = + (_b = filter.topics) === null || _b === void 0 + ? void 0 + : _b.map(function (topic) { + return topic ? (Array.isArray(topic) ? topic.join(';') : topic) : '\0' + })) === null || _c === void 0 + ? void 0 + : _c.join('-')) !== null && _d !== void 0 + ? _d + : '') + ) +} +/** + * Convert a filter key to the corresponding filter + * @param key key to convert + */ +function keyToFilter(key) { + var pcs = key.split(':') + var address = pcs[0] + var topics = pcs[1].split('-').map(function (topic) { + if (topic === '\0') return null + var parts = topic.split(';') + if (parts.length === 1) return parts[0] + return parts + }) + return { + address: address.length === 0 ? undefined : address, + topics, + } +} -var POOL_STATE_INTERFACE = new abi$7.Interface(abi); -var PoolState; -(function (PoolState) { - PoolState[PoolState["LOADING"] = 0] = "LOADING"; - PoolState[PoolState["NOT_EXISTS"] = 1] = "NOT_EXISTS"; - PoolState[PoolState["EXISTS"] = 2] = "EXISTS"; - PoolState[PoolState["INVALID"] = 3] = "INVALID"; -})(PoolState || (PoolState = {})); -function usePools(poolKeys) { - var chainId = useActiveWeb3React().chainId; - var transformed = React.useMemo(function () { - return poolKeys.map(function (_a) { - var _b = __read(_a, 3), currencyA = _b[0], currencyB = _b[1], feeAmount = _b[2]; - if (!chainId || !currencyA || !currencyB || !feeAmount) - return null; - var tokenA = currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped; - var tokenB = currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped; - if (!tokenA || !tokenB || tokenA.equals(tokenB)) - return null; - var _c = __read(tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA], 2), token0 = _c[0], token1 = _c[1]; - return [token0, token1, feeAmount]; - }); - }, [chainId, poolKeys]); - var poolAddresses = React.useMemo(function () { - var v3CoreFactoryAddress = chainId && V3_CORE_FACTORY_ADDRESSES[chainId]; - return transformed.map(function (value) { - if (!v3CoreFactoryAddress || !value) - return undefined; - return v3Sdk.computePoolAddress({ - factoryAddress: v3CoreFactoryAddress, - tokenA: value[0], - tokenB: value[1], - fee: value[2], - }); - }); - }, [chainId, transformed]); - var slot0s = useMultipleContractSingleData(poolAddresses, POOL_STATE_INTERFACE, 'slot0'); - var liquidities = useMultipleContractSingleData(poolAddresses, POOL_STATE_INTERFACE, 'liquidity'); - return React.useMemo(function () { - return poolKeys.map(function (_key, index) { - var _a; - var _b = __read((_a = transformed[index]) !== null && _a !== void 0 ? _a : [], 3), token0 = _b[0], token1 = _b[1], fee = _b[2]; - if (!token0 || !token1 || !fee) - return [PoolState.INVALID, null]; - var _c = slot0s[index], slot0 = _c.result, slot0Loading = _c.loading, slot0Valid = _c.valid; - var _d = liquidities[index], liquidity = _d.result, liquidityLoading = _d.loading, liquidityValid = _d.valid; - if (!slot0Valid || !liquidityValid) - return [PoolState.INVALID, null]; - if (slot0Loading || liquidityLoading) - return [PoolState.LOADING, null]; - if (!slot0 || !liquidity) - return [PoolState.NOT_EXISTS, null]; - if (!slot0.sqrtPriceX96 || slot0.sqrtPriceX96.eq(0)) - return [PoolState.NOT_EXISTS, null]; - try { - return [PoolState.EXISTS, new v3Sdk.Pool(token0, token1, fee, slot0.sqrtPriceX96, liquidity[0], slot0.tick)]; - } - catch (error) { - console.error('Error when constructing the pool', error); - return [PoolState.NOT_EXISTS, null]; - } - }); - }, [liquidities, poolKeys, slot0s, transformed]); +var _a$8 +var slice = toolkit.createSlice({ + name: 'logs', + initialState: {}, + reducers: { + addListener(state, _a) { + var _b = _a.payload, + chainId = _b.chainId, + filter = _b.filter + if (!state[chainId]) state[chainId] = {} + var key = filterToKey(filter) + if (!state[chainId][key]) + state[chainId][key] = { + listeners: 1, + } + else state[chainId][key].listeners++ + }, + fetchingLogs(state, _a) { + var e_1, _b + var _c = _a.payload, + chainId = _c.chainId, + filters = _c.filters, + blockNumber = _c.blockNumber + if (!state[chainId]) return + try { + for ( + var filters_1 = __values(filters), filters_1_1 = filters_1.next(); + !filters_1_1.done; + filters_1_1 = filters_1.next() + ) { + var filter = filters_1_1.value + var key = filterToKey(filter) + if (!state[chainId][key]) continue + state[chainId][key].fetchingBlockNumber = blockNumber + } + } catch (e_1_1) { + e_1 = { error: e_1_1 } + } finally { + try { + if (filters_1_1 && !filters_1_1.done && (_b = filters_1.return)) _b.call(filters_1) + } finally { + if (e_1) throw e_1.error + } + } + }, + fetchedLogs(state, _a) { + var _b = _a.payload, + chainId = _b.chainId, + filter = _b.filter, + results = _b.results + if (!state[chainId]) return + var key = filterToKey(filter) + var fetchState = state[chainId][key] + if (!fetchState || (fetchState.results && fetchState.results.blockNumber > results.blockNumber)) return + fetchState.results = results + }, + fetchedLogsError(state, _a) { + var _b = _a.payload, + chainId = _b.chainId, + filter = _b.filter, + blockNumber = _b.blockNumber + if (!state[chainId]) return + var key = filterToKey(filter) + var fetchState = state[chainId][key] + if (!fetchState || (fetchState.results && fetchState.results.blockNumber > blockNumber)) return + fetchState.results = { + blockNumber, + error: true, + } + }, + removeListener(state, _a) { + var _b = _a.payload, + chainId = _b.chainId, + filter = _b.filter + if (!state[chainId]) return + var key = filterToKey(filter) + if (!state[chainId][key]) return + state[chainId][key].listeners-- + }, + }, +}) +var logs = slice.reducer +;(_a$8 = slice.actions), _a$8.addListener +_a$8.removeListener +var fetchedLogs = _a$8.fetchedLogs, + fetchedLogsError = _a$8.fetchedLogsError, + fetchingLogs = _a$8.fetchingLogs + +var Field$2 +;(function (Field) { + Field['CURRENCY_A'] = 'CURRENCY_A' + Field['CURRENCY_B'] = 'CURRENCY_B' +})(Field$2 || (Field$2 = {})) +var typeInput$2 = toolkit.createAction('mint/typeInputMint') +var resetMintState$1 = toolkit.createAction('mint/resetMintState') + +var initialState$4 = { + independentField: Field$2.CURRENCY_A, + typedValue: '', + otherTypedValue: '', + startPriceTypedValue: '', + leftRangeTypedValue: '', + rightRangeTypedValue: '', +} +var mint = toolkit.createReducer(initialState$4, function (builder) { + return builder + .addCase(resetMintState$1, function () { + return initialState$4 + }) + .addCase(typeInput$2, function (state, _a) { + var _b = _a.payload, + field = _b.field, + typedValue = _b.typedValue, + noLiquidity = _b.noLiquidity + if (noLiquidity) { + // they're typing into the field they've last typed in + if (field === state.independentField) { + return __assign(__assign({}, state), { independentField: field, typedValue }) + } + // they're typing into a new field, store the other value + else { + return __assign(__assign({}, state), { + independentField: field, + typedValue, + otherTypedValue: state.typedValue, + }) + } + } else { + return __assign(__assign({}, state), { independentField: field, typedValue, otherTypedValue: '' }) + } + }) +}) + +var Field$1 +;(function (Field) { + Field['CURRENCY_A'] = 'CURRENCY_A' + Field['CURRENCY_B'] = 'CURRENCY_B' +})(Field$1 || (Field$1 = {})) +var Bound +;(function (Bound) { + Bound['LOWER'] = 'LOWER' + Bound['UPPER'] = 'UPPER' +})(Bound || (Bound = {})) +var typeInput$1 = toolkit.createAction('mintV3/typeInputMint') +var typeStartPriceInput = toolkit.createAction('mintV3/typeStartPriceInput') +var typeLeftRangeInput = toolkit.createAction('mintV3/typeLeftRangeInput') +var typeRightRangeInput = toolkit.createAction('mintV3/typeRightRangeInput') +var resetMintState = toolkit.createAction('mintV3/resetMintState') +var setFullRange = toolkit.createAction('mintV3/setFullRange') + +var initialState$3 = { + independentField: Field$1.CURRENCY_A, + typedValue: '', + startPriceTypedValue: '', + leftRangeTypedValue: '', + rightRangeTypedValue: '', +} +var mintV3 = toolkit.createReducer(initialState$3, function (builder) { + return builder + .addCase(resetMintState, function () { + return initialState$3 + }) + .addCase(setFullRange, function (state) { + return __assign(__assign({}, state), { leftRangeTypedValue: true, rightRangeTypedValue: true }) + }) + .addCase(typeStartPriceInput, function (state, _a) { + var typedValue = _a.payload.typedValue + return __assign(__assign({}, state), { startPriceTypedValue: typedValue }) + }) + .addCase(typeLeftRangeInput, function (state, _a) { + var typedValue = _a.payload.typedValue + return __assign(__assign({}, state), { leftRangeTypedValue: typedValue }) + }) + .addCase(typeRightRangeInput, function (state, _a) { + var typedValue = _a.payload.typedValue + return __assign(__assign({}, state), { rightRangeTypedValue: typedValue }) + }) + .addCase(typeInput$1, function (state, _a) { + var _b = _a.payload, + field = _b.field, + typedValue = _b.typedValue, + noLiquidity = _b.noLiquidity + if (noLiquidity) { + // they're typing into the field they've last typed in + if (field === state.independentField) { + return __assign(__assign({}, state), { independentField: field, typedValue }) + } + // they're typing into a new field, store the other value + else { + return __assign(__assign({}, state), { independentField: field, typedValue }) + } + } else { + return __assign(__assign({}, state), { independentField: field, typedValue }) + } + }) +}) + +var protocols = [routerSdk.Protocol.V2, routerSdk.Protocol.V3] +var DEFAULT_QUERY_PARAMS = { + protocols: protocols + .map(function (p) { + return p.toLowerCase() + }) + .join(','), + // example other params + // forceCrossProtocol: 'true', + // minSplits: '5', +} +function getClientSideQuote(_a) { + var tokenInAddress = _a.tokenInAddress, + tokenInChainId = _a.tokenInChainId, + tokenInDecimals = _a.tokenInDecimals, + tokenInSymbol = _a.tokenInSymbol, + tokenOutAddress = _a.tokenOutAddress, + tokenOutChainId = _a.tokenOutChainId, + tokenOutDecimals = _a.tokenOutDecimals, + tokenOutSymbol = _a.tokenOutSymbol, + amount = _a.amount, + type = _a.type + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + return [ + 4 /*yield*/, + Promise.resolve().then(function () { + return index + }), + ] + case 1: + return [ + 2 /*return*/, + _b.sent().getQuote( + { + type, + chainId: tokenInChainId, + tokenIn: { + address: tokenInAddress, + chainId: tokenInChainId, + decimals: tokenInDecimals, + symbol: tokenInSymbol, + }, + tokenOut: { + address: tokenOutAddress, + chainId: tokenOutChainId, + decimals: tokenOutDecimals, + symbol: tokenOutSymbol, + }, + amount, + }, + { protocols } + ), + ] + } + }) + }) +} +var routingApi = react.createApi({ + reducerPath: 'routingApi', + baseQuery: react.fetchBaseQuery({ + baseUrl: 'https://api.uniswap.org/v1/', + }), + endpoints(build) { + return { + getQuote: build.query({ + queryFn(args, _api, _extraOptions, fetch) { + return __awaiter(this, void 0, void 0, function () { + var tokenInAddress, + tokenInChainId, + tokenOutAddress, + tokenOutChainId, + amount, + useClientSideRouter, + type, + result, + query, + e_1 + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + ;(tokenInAddress = args.tokenInAddress), + (tokenInChainId = args.tokenInChainId), + (tokenOutAddress = args.tokenOutAddress), + (tokenOutChainId = args.tokenOutChainId), + (amount = args.amount), + (useClientSideRouter = args.useClientSideRouter), + (type = args.type) + _a.label = 1 + case 1: + _a.trys.push([1, 6, , 7]) + if (!useClientSideRouter) return [3 /*break*/, 3] + return [4 /*yield*/, getClientSideQuote(args)] + case 2: + result = _a.sent() + return [3 /*break*/, 5] + case 3: + query = qs__default['default'].stringify( + __assign(__assign({}, DEFAULT_QUERY_PARAMS), { + tokenInAddress, + tokenInChainId, + tokenOutAddress, + tokenOutChainId, + amount, + type, + }) + ) + return [4 /*yield*/, fetch('quote?' + query)] + case 4: + result = _a.sent() + _a.label = 5 + case 5: + return [2 /*return*/, { data: result.data }] + case 6: + e_1 = _a.sent() + // TODO: fall back to client-side quoter when auto router fails. + // deprecate 'legacy' v2/v3 routers first. + return [2 /*return*/, { error: e_1 }] + case 7: + return [2 /*return*/] + } + }) + }) + }, + keepUnusedDataFor: ms__default['default']( + templateObject_1$1b || (templateObject_1$1b = __makeTemplateObject(['10s'], ['10s'])) + ), + extraOptions: { + maxRetries: 0, + }, + }), + } + }, +}) +var useGetQuoteQuery = routingApi.useGetQuoteQuery +var templateObject_1$1b + +var Field +;(function (Field) { + Field['INPUT'] = 'INPUT' + Field['OUTPUT'] = 'OUTPUT' +})(Field || (Field = {})) +var selectCurrency = toolkit.createAction('swap/selectCurrency') +var switchCurrencies = toolkit.createAction('swap/switchCurrencies') +var typeInput = toolkit.createAction('swap/typeInput') +var replaceSwapState = toolkit.createAction('swap/replaceSwapState') +var setRecipient = toolkit.createAction('swap/setRecipient') + +var CHAIN_DATA_ABI = [ + { + inputs: [], + name: 'latestAnswer', + outputs: [{ internalType: 'int256', name: '', type: 'int256' }], + stateMutability: 'view', + type: 'function', + }, +] +/** + * Returns the price of 1 gas in WEI for the currently selected network using the chainlink fast gas price oracle + */ +function useGasPrice() { + var _a, _b + var address = useENSAddress('fast-gas-gwei.data.eth').address + var contract = useContract(address !== null && address !== void 0 ? address : undefined, CHAIN_DATA_ABI, false) + var resultStr = + (_b = (_a = useSingleCallResult(contract, 'latestAnswer').result) === null || _a === void 0 ? void 0 : _a[0]) === + null || _b === void 0 + ? void 0 + : _b.toString() + return typeof resultStr === 'string' ? JSBI__default['default'].BigInt(resultStr) : undefined } -/** - * Returns all the existing pools that should be considered for swapping between an input currency and an output currency - * @param currencyIn the input currency - * @param currencyOut the output currency - */ -function useV3SwapPools(currencyIn, currencyOut) { - var chainId = useActiveWeb3React().chainId; - var allCurrencyCombinations = useAllCurrencyCombinations(currencyIn, currencyOut); - var allCurrencyCombinationsWithAllFees = React.useMemo(function () { - return allCurrencyCombinations.reduce(function (list, _a) { - var _b = __read(_a, 2), tokenA = _b[0], tokenB = _b[1]; - return chainId === SupportedChainId.MAINNET - ? list.concat([ - [tokenA, tokenB, v3Sdk.FeeAmount.LOW], - [tokenA, tokenB, v3Sdk.FeeAmount.MEDIUM], - [tokenA, tokenB, v3Sdk.FeeAmount.HIGH], - ]) - : list.concat([ - [tokenA, tokenB, v3Sdk.FeeAmount.LOWEST], - [tokenA, tokenB, v3Sdk.FeeAmount.LOW], - [tokenA, tokenB, v3Sdk.FeeAmount.MEDIUM], - [tokenA, tokenB, v3Sdk.FeeAmount.HIGH], - ]); - }, []); - }, [allCurrencyCombinations, chainId]); - var pools = usePools(allCurrencyCombinationsWithAllFees); - return React.useMemo(function () { - return { - pools: pools - .filter(function (tuple) { - return tuple[0] === PoolState.EXISTS && tuple[1] !== null; - }) - .map(function (_a) { - var _b = __read(_a, 2), pool = _b[1]; - return pool; - }), - loading: pools.some(function (_a) { - var _b = __read(_a, 1), state = _b[0]; - return state === PoolState.LOADING; - }), - }; - }, [pools]); +/** + * Parses a CurrencyAmount from the passed string. + * Returns the CurrencyAmount, or undefined if parsing fails. + */ +function tryParseCurrencyAmount(value, currency) { + if (!value || !currency) { + return undefined + } + try { + var typedValueParsed = units.parseUnits(value, currency.decimals).toString() + if (typedValueParsed !== '0') { + return sdkCore.CurrencyAmount.fromRawAmount(currency, JSBI__default['default'].BigInt(typedValueParsed)) + } + } catch (error) { + // fails if the user specifies too many decimal places of precision (or maybe exceed max uint?) + console.debug('Failed to parse input amount: "' + value + '"', error) + } + return undefined } -/** - * Returns true if poolA is equivalent to poolB - * @param poolA one of the two pools - * @param poolB the other pool - */ -function poolEquals(poolA, poolB) { - return (poolA === poolB || - (poolA.token0.equals(poolB.token0) && poolA.token1.equals(poolB.token1) && poolA.fee === poolB.fee)); -} -function computeAllRoutes(currencyIn, currencyOut, pools, chainId, currentPath, allPaths, startCurrencyIn, maxHops) { - var e_1, _a; - if (currentPath === void 0) { currentPath = []; } - if (allPaths === void 0) { allPaths = []; } - if (startCurrencyIn === void 0) { startCurrencyIn = currencyIn; } - if (maxHops === void 0) { maxHops = 2; } - var tokenIn = currencyIn === null || currencyIn === void 0 ? void 0 : currencyIn.wrapped; - var tokenOut = currencyOut === null || currencyOut === void 0 ? void 0 : currencyOut.wrapped; - if (!tokenIn || !tokenOut) - throw new Error('Missing tokenIn/tokenOut'); - var _loop_1 = function (pool) { - if (!pool.involvesToken(tokenIn) || currentPath.find(function (pathPool) { return poolEquals(pool, pathPool); })) - return "continue"; - var outputToken = pool.token0.equals(tokenIn) ? pool.token1 : pool.token0; - if (outputToken.equals(tokenOut)) { - allPaths.push(new v3Sdk.Route(__spreadArray(__spreadArray([], __read(currentPath), false), [pool], false), startCurrencyIn, currencyOut)); - } - else if (maxHops > 1) { - computeAllRoutes(outputToken, currencyOut, pools, chainId, __spreadArray(__spreadArray([], __read(currentPath), false), [pool], false), allPaths, startCurrencyIn, maxHops - 1); - } - }; - try { - for (var pools_1 = __values(pools), pools_1_1 = pools_1.next(); !pools_1_1.done; pools_1_1 = pools_1.next()) { - var pool = pools_1_1.value; - _loop_1(pool); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (pools_1_1 && !pools_1_1.done && (_a = pools_1.return)) _a.call(pools_1); - } - finally { if (e_1) throw e_1.error; } - } - return allPaths; -} -/** - * Returns all the routes from an input currency to an output currency - * @param currencyIn the input currency - * @param currencyOut the output currency - */ -function useAllV3Routes(currencyIn, currencyOut) { - var chainId = useActiveWeb3React().chainId; - var _a = useV3SwapPools(currencyIn, currencyOut), pools = _a.pools, poolsLoading = _a.loading; - return React.useMemo(function () { - if (poolsLoading || !chainId || !pools || !currencyIn || !currencyOut) - return { loading: true, routes: [] }; - var routes = computeAllRoutes(currencyIn, currencyOut, pools, chainId, [], [], currencyIn, 2); - return { loading: false, routes: routes }; - }, [chainId, currencyIn, currencyOut, pools, poolsLoading]); -} - -var _a$7; -var QUOTE_GAS_OVERRIDES = (_a$7 = {}, - _a$7[SupportedChainId.ARBITRUM_ONE] = 25000000, - _a$7[SupportedChainId.ARBITRUM_RINKEBY] = 25000000, - _a$7); -var DEFAULT_GAS_QUOTE = 2000000; -/** - * Returns the best v3 trade for a desired swap - * @param tradeType whether the swap is an exact in/out - * @param amountSpecified the exact amount to swap in/out - * @param otherCurrency the desired output/payment currency - */ -function useClientSideV3Trade(tradeType, amountSpecified, otherCurrency) { - var _a; - var _b = __read(React.useMemo(function () { - return tradeType === sdkCore.TradeType.EXACT_INPUT - ? [amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, otherCurrency] - : [otherCurrency, amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency]; - }, [tradeType, amountSpecified, otherCurrency]), 2), currencyIn = _b[0], currencyOut = _b[1]; - var _c = useAllV3Routes(currencyIn, currencyOut), routes = _c.routes, routesLoading = _c.loading; - var quoter = useV3Quoter(); - var chainId = useActiveWeb3React().chainId; - var quotesResults = useSingleContractWithCallData(quoter, amountSpecified - ? routes.map(function (route) { return v3Sdk.SwapQuoter.quoteCallParameters(route, amountSpecified, tradeType).calldata; }) - : [], { - gasRequired: chainId ? (_a = QUOTE_GAS_OVERRIDES[chainId]) !== null && _a !== void 0 ? _a : DEFAULT_GAS_QUOTE : undefined, - }); - return React.useMemo(function () { - if (!amountSpecified || - !currencyIn || - !currencyOut || - quotesResults.some(function (_a) { - var valid = _a.valid; - return !valid; - }) || - // skip when tokens are the same - (tradeType === sdkCore.TradeType.EXACT_INPUT - ? amountSpecified.currency.equals(currencyOut) - : amountSpecified.currency.equals(currencyIn))) { - return { - state: TradeState.INVALID, - trade: undefined, - }; - } - if (routesLoading || quotesResults.some(function (_a) { - var loading = _a.loading; - return loading; - })) { - return { - state: TradeState.LOADING, - trade: undefined, - }; - } - var _a = quotesResults.reduce(function (currentBest, _a, i) { - var result = _a.result; - if (!result) - return currentBest; - // overwrite the current best if it's not defined or if this route is better - if (tradeType === sdkCore.TradeType.EXACT_INPUT) { - var amountOut_1 = sdkCore.CurrencyAmount.fromRawAmount(currencyOut, result.amountOut.toString()); - if (currentBest.amountOut === null || JSBI__default["default"].lessThan(currentBest.amountOut.quotient, amountOut_1.quotient)) { - return { - bestRoute: routes[i], - amountIn: amountSpecified, - amountOut: amountOut_1, - }; - } - } - else { - var amountIn_1 = sdkCore.CurrencyAmount.fromRawAmount(currencyIn, result.amountIn.toString()); - if (currentBest.amountIn === null || JSBI__default["default"].greaterThan(currentBest.amountIn.quotient, amountIn_1.quotient)) { - return { - bestRoute: routes[i], - amountIn: amountIn_1, - amountOut: amountSpecified, - }; - } - } - return currentBest; - }, { - bestRoute: null, - amountIn: null, - amountOut: null, - }), bestRoute = _a.bestRoute, amountIn = _a.amountIn, amountOut = _a.amountOut; - if (!bestRoute || !amountIn || !amountOut) { - return { - state: TradeState.NO_ROUTE_FOUND, - trade: undefined, - }; - } - return { - state: TradeState.VALID, - trade: new InterfaceTrade({ - v2Routes: [], - v3Routes: [ - { - routev3: bestRoute, - inputAmount: amountIn, - outputAmount: amountOut, - }, - ], - tradeType: tradeType, - }), - }; - }, [amountSpecified, currencyIn, currencyOut, quotesResults, routes, routesLoading, tradeType]); -} - -var _a$6; -// Stablecoin amounts used when calculating spot price for a given currency. -// The amount is large enough to filter low liquidity pairs. -var STABLECOIN_AMOUNT_OUT = (_a$6 = {}, - _a$6[SupportedChainId.MAINNET] = sdkCore.CurrencyAmount.fromRawAmount(USDC, 100000000000), - _a$6[SupportedChainId.ARBITRUM_ONE] = sdkCore.CurrencyAmount.fromRawAmount(USDC_ARBITRUM, 10000000000), - _a$6[SupportedChainId.OPTIMISM] = sdkCore.CurrencyAmount.fromRawAmount(DAI_OPTIMISM, 1e+22), - _a$6[SupportedChainId.POLYGON] = sdkCore.CurrencyAmount.fromRawAmount(USDC_POLYGON, 10000000000), - _a$6); -/** - * Returns the price in USDC of the input currency - * @param currency currency to compute the USDC price of - */ -function useUSDCPrice(currency) { - var chainId = currency === null || currency === void 0 ? void 0 : currency.chainId; - var amountOut = chainId ? STABLECOIN_AMOUNT_OUT[chainId] : undefined; - var stablecoin = amountOut === null || amountOut === void 0 ? void 0 : amountOut.currency; - // TODO(#2808): remove dependency on useBestV2Trade - var v2USDCTrade = useBestV2Trade(sdkCore.TradeType.EXACT_OUTPUT, amountOut, currency, { - maxHops: 2, - }); - var v3USDCTrade = useClientSideV3Trade(sdkCore.TradeType.EXACT_OUTPUT, amountOut, currency); - return React.useMemo(function () { - if (!currency || !stablecoin) { - return undefined; - } - // handle usdc - if (currency === null || currency === void 0 ? void 0 : currency.wrapped.equals(stablecoin)) { - return new sdkCore.Price(stablecoin, stablecoin, '1', '1'); - } - // use v2 price if available, v3 as fallback - if (v2USDCTrade) { - var _a = v2USDCTrade.route.midPrice, numerator = _a.numerator, denominator = _a.denominator; - return new sdkCore.Price(currency, stablecoin, denominator, numerator); - } - else if (v3USDCTrade.trade) { - var _b = v3USDCTrade.trade.routes[0].midPrice, numerator = _b.numerator, denominator = _b.denominator; - return new sdkCore.Price(currency, stablecoin, denominator, numerator); - } - return undefined; - }, [currency, stablecoin, v2USDCTrade, v3USDCTrade.trade]); -} -function useUSDCValue(currencyAmount) { - var price = useUSDCPrice(currencyAmount === null || currencyAmount === void 0 ? void 0 : currencyAmount.currency); - return React.useMemo(function () { - if (!price || !currencyAmount) - return null; - try { - return price.quote(currencyAmount); - } - catch (error) { - return null; - } - }, [currencyAmount, price]); -} -/** - * - * @param fiatValue string representation of a USD amount - * @returns CurrencyAmount where currency is stablecoin on active chain - */ -function useStablecoinAmountFromFiatValue(fiatValue) { - var _a; - var chainId = useActiveWeb3React().chainId; - var stablecoin = chainId ? (_a = STABLECOIN_AMOUNT_OUT[chainId]) === null || _a === void 0 ? void 0 : _a.currency : undefined; - if (fiatValue === null || fiatValue === undefined || !chainId || !stablecoin) { - return undefined; - } - // trim for decimal precision when parsing - var parsedForDecimals = parseFloat(fiatValue).toFixed(stablecoin.decimals).toString(); - try { - // parse USD string into CurrencyAmount based on stablecoin decimals - return tryParseCurrencyAmount(parsedForDecimals, stablecoin); - } - catch (error) { - return undefined; - } +// returns whether tradeB is better than tradeA by at least a threshold percentage amount +// only used by v2 hooks +function isTradeBetter(tradeA, tradeB, minimumDelta) { + if (minimumDelta === void 0) { + minimumDelta = ZERO_PERCENT + } + if (tradeA && !tradeB) return false + if (tradeB && !tradeA) return true + if (!tradeA || !tradeB) return undefined + if ( + tradeA.tradeType !== tradeB.tradeType || + !tradeA.inputAmount.currency.equals(tradeB.inputAmount.currency) || + !tradeA.outputAmount.currency.equals(tradeB.outputAmount.currency) + ) { + throw new Error('Comparing incomparable trades') + } + if (minimumDelta.equalTo(ZERO_PERCENT)) { + return tradeA.executionPrice.lessThan(tradeB.executionPrice) + } else { + return tradeA.executionPrice.asFraction + .multiply(minimumDelta.add(ONE_HUNDRED_PERCENT)) + .lessThan(tradeB.executionPrice) + } } -var V3_SWAP_DEFAULT_SLIPPAGE = new sdkCore.Percent(50, 10000); // .50% -var ONE_TENTHS_PERCENT = new sdkCore.Percent(10, 10000); // .10% -/** - * Return a guess of the gas cost used in computing slippage tolerance for a given trade - * @param trade the trade for which to _guess_ the amount of gas it would cost to execute - */ -function guesstimateGas(trade) { - if (!!trade) { - return 100000 + trade.swaps.reduce(function (memo, swap) { return swap.route.pools.length + memo; }, 0) * 30000; - } - return undefined; -} -var MIN_AUTO_SLIPPAGE_TOLERANCE = new sdkCore.Percent(5, 1000); // 0.5% -var MAX_AUTO_SLIPPAGE_TOLERANCE = new sdkCore.Percent(25, 100); // 25% -/** - * Returns slippage tolerance based on values from current trade, gas estimates from api, and active network. - */ -function useAutoSlippageTolerance(trade) { - var chainId = useActiveWeb3React().chainId; - var onL2 = chainId && L2_CHAIN_IDS.includes(chainId); - var outputDollarValue = useUSDCValue(trade === null || trade === void 0 ? void 0 : trade.outputAmount); - var nativeGasPrice = useGasPrice(); - var gasEstimate = guesstimateGas(trade); - var nativeCurrency = useNativeCurrency(); - var nativeCurrencyPrice = useUSDCPrice(nativeCurrency !== null && nativeCurrency !== void 0 ? nativeCurrency : undefined); - return React.useMemo(function () { - if (!trade || onL2) - return ONE_TENTHS_PERCENT; - var nativeGasCost = nativeGasPrice && typeof gasEstimate === 'number' - ? JSBI__default["default"].multiply(nativeGasPrice, JSBI__default["default"].BigInt(gasEstimate)) - : undefined; - var dollarGasCost = nativeCurrency && nativeGasCost && nativeCurrencyPrice - ? nativeCurrencyPrice.quote(sdkCore.CurrencyAmount.fromRawAmount(nativeCurrency, nativeGasCost)) - : undefined; - // if valid estimate from api and using api trade, use gas estimate from api - // NOTE - dont use gas estimate for L2s yet - need to verify accuracy - // if not, use local heuristic - var dollarCostToUse = chainId && SUPPORTED_GAS_ESTIMATE_CHAIN_IDS.includes(chainId) && (trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) - ? trade.gasUseEstimateUSD - : dollarGasCost; - if (outputDollarValue && dollarCostToUse) { - // the rationale is that a user will not want their trade to fail for a loss due to slippage that is less than - // the cost of the gas of the failed transaction - var fraction = dollarCostToUse.asFraction.divide(outputDollarValue.asFraction); - var result = new sdkCore.Percent(fraction.numerator, fraction.denominator); - if (result.greaterThan(MAX_AUTO_SLIPPAGE_TOLERANCE)) - return MAX_AUTO_SLIPPAGE_TOLERANCE; - if (result.lessThan(MIN_AUTO_SLIPPAGE_TOLERANCE)) - return MIN_AUTO_SLIPPAGE_TOLERANCE; - return result; - } - return V3_SWAP_DEFAULT_SLIPPAGE; - }, [trade, onL2, nativeGasPrice, gasEstimate, nativeCurrency, nativeCurrencyPrice, chainId, outputDollarValue]); +function useAllCurrencyCombinations(currencyA, currencyB) { + var chainId = currencyA === null || currencyA === void 0 ? void 0 : currencyA.chainId + var _a = __read( + chainId + ? [ + currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped, + currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped, + ] + : [undefined, undefined], + 2 + ), + tokenA = _a[0], + tokenB = _a[1] + var bases = React.useMemo( + function () { + var _a, _b, _c, _d, _e + if (!chainId || chainId !== (tokenB === null || tokenB === void 0 ? void 0 : tokenB.chainId)) return [] + var common = (_a = BASES_TO_CHECK_TRADES_AGAINST[chainId]) !== null && _a !== void 0 ? _a : [] + var additionalA = tokenA + ? (_c = (_b = ADDITIONAL_BASES[chainId]) === null || _b === void 0 ? void 0 : _b[tokenA.address]) !== null && + _c !== void 0 + ? _c + : [] + : [] + var additionalB = tokenB + ? (_e = (_d = ADDITIONAL_BASES[chainId]) === null || _d === void 0 ? void 0 : _d[tokenB.address]) !== null && + _e !== void 0 + ? _e + : [] + : [] + return __spreadArray( + __spreadArray(__spreadArray([], __read(common), false), __read(additionalA), false), + __read(additionalB), + false + ) + }, + [chainId, tokenA, tokenB] + ) + var basePairs = React.useMemo( + function () { + return ( + bases + .flatMap(function (base) { + return bases.map(function (otherBase) { + return [base, otherBase] + }) + }) + // though redundant with the first filter below, that expression runs more often, so this is probably worthwhile + .filter(function (_a) { + var _b = __read(_a, 2), + t0 = _b[0], + t1 = _b[1] + return !t0.equals(t1) + }) + ) + }, + [bases] + ) + return React.useMemo( + function () { + return tokenA && tokenB + ? __spreadArray( + __spreadArray( + __spreadArray( + [ + // the direct pair + [tokenA, tokenB], + ], + __read( + bases.map(function (base) { + return [tokenA, base] + }) + ), + false + ), + __read( + bases.map(function (base) { + return [tokenB, base] + }) + ), + false + ), + __read(basePairs), + false + ) + .filter(function (_a) { + var _b = __read(_a, 2), + t0 = _b[0], + t1 = _b[1] + return !t0.equals(t1) + }) + // filter out duplicate pairs + .filter(function (_a, i, otherPairs) { + var _b = __read(_a, 2), + t0 = _b[0], + t1 = _b[1] + // find the first index in the array at which there are the same 2 tokens as the current + var firstIndexInOtherPairs = otherPairs.findIndex(function (_a) { + var _b = __read(_a, 2), + t0Other = _b[0], + t1Other = _b[1] + return (t0.equals(t0Other) && t1.equals(t1Other)) || (t0.equals(t1Other) && t1.equals(t0Other)) + }) + // only accept the first occurrence of the same 2 tokens + return firstIndexInOtherPairs === i + }) + // optionally filter out some pairs for tokens with custom bases defined + .filter(function (_a) { + var _b = __read(_a, 2), + tokenA = _b[0], + tokenB = _b[1] + if (!chainId) return true + var customBases = CUSTOM_BASES[chainId] + var customBasesA = customBases === null || customBases === void 0 ? void 0 : customBases[tokenA.address] + var customBasesB = customBases === null || customBases === void 0 ? void 0 : customBases[tokenB.address] + if (!customBasesA && !customBasesB) return true + if ( + customBasesA && + !customBasesA.find(function (base) { + return tokenB.equals(base) + }) + ) + return false + if ( + customBasesB && + !customBasesB.find(function (base) { + return tokenA.equals(base) + }) + ) + return false + return true + }) + : [] + }, + [tokenA, tokenB, bases, basePairs, chainId] + ) } -/** - * Transforms a Routing API quote into an array of routes that can be used to create - * a `Trade`. - */ -function computeRoutes(currencyIn, currencyOut, tradeType, quoteResult) { - if (!quoteResult || !quoteResult.route || !currencyIn || !currencyOut) - return undefined; - if (quoteResult.route.length === 0) - return []; - var parsedTokenIn = parseToken(quoteResult.route[0][0].tokenIn); - var parsedTokenOut = parseToken(quoteResult.route[0][quoteResult.route[0].length - 1].tokenOut); - if (parsedTokenIn.address !== currencyIn.wrapped.address) - return undefined; - if (parsedTokenOut.address !== currencyOut.wrapped.address) - return undefined; - var parsedCurrencyIn = currencyIn.isNative ? nativeOnChain(currencyIn.chainId) : parsedTokenIn; - var parsedCurrencyOut = currencyOut.isNative ? nativeOnChain(currencyOut.chainId) : parsedTokenOut; - try { - return quoteResult.route.map(function (route) { - if (route.length === 0) { - throw new Error('Expected route to have at least one pair or pool'); - } - var rawAmountIn = route[0].amountIn; - var rawAmountOut = route[route.length - 1].amountOut; - if (!rawAmountIn || !rawAmountOut) { - throw new Error('Expected both amountIn and amountOut to be present'); - } - return { - routev3: isV3Route(route) ? new v3Sdk.Route(route.map(parsePool), parsedCurrencyIn, parsedCurrencyOut) : null, - routev2: !isV3Route(route) ? new v2Sdk.Route(route.map(parsePair), parsedCurrencyIn, parsedCurrencyOut) : null, - inputAmount: sdkCore.CurrencyAmount.fromRawAmount(parsedCurrencyIn, rawAmountIn), - outputAmount: sdkCore.CurrencyAmount.fromRawAmount(parsedCurrencyOut, rawAmountOut), - }; - }); - } - catch (e) { - // `Route` constructor may throw if inputs/outputs are temporarily out of sync - // (RTK-Query always returns the latest data which may not be the right inputs/outputs) - // This is not fatal and will fix itself in future render cycles - console.error(e); - return undefined; - } -} -function transformRoutesToTrade(route, tradeType, gasUseEstimateUSD) { - var _a, _b; - return new InterfaceTrade({ - v2Routes: (_a = route === null || route === void 0 ? void 0 : route.filter(function (r) { return r.routev2 !== null; }).map(function (_a) { - var routev2 = _a.routev2, inputAmount = _a.inputAmount, outputAmount = _a.outputAmount; - return ({ routev2: routev2, inputAmount: inputAmount, outputAmount: outputAmount }); - })) !== null && _a !== void 0 ? _a : [], - v3Routes: (_b = route === null || route === void 0 ? void 0 : route.filter(function (r) { return r.routev3 !== null; }).map(function (_a) { - var routev3 = _a.routev3, inputAmount = _a.inputAmount, outputAmount = _a.outputAmount; - return ({ routev3: routev3, inputAmount: inputAmount, outputAmount: outputAmount }); - })) !== null && _b !== void 0 ? _b : [], - tradeType: tradeType, - gasUseEstimateUSD: gasUseEstimateUSD, - }); -} -var parseToken = function (_a) { - var address = _a.address, chainId = _a.chainId, decimals = _a.decimals, symbol = _a.symbol; - return new sdkCore.Token(chainId, address, parseInt(decimals.toString()), symbol); -}; -var parsePool = function (_a) { - var fee = _a.fee, sqrtRatioX96 = _a.sqrtRatioX96, liquidity = _a.liquidity, tickCurrent = _a.tickCurrent, tokenIn = _a.tokenIn, tokenOut = _a.tokenOut; - return new v3Sdk.Pool(parseToken(tokenIn), parseToken(tokenOut), parseInt(fee), sqrtRatioX96, liquidity, parseInt(tickCurrent)); -}; -var parsePair = function (_a) { - var reserve0 = _a.reserve0, reserve1 = _a.reserve1; - return new v2Sdk.Pair(sdkCore.CurrencyAmount.fromRawAmount(parseToken(reserve0.token), reserve0.quotient), sdkCore.CurrencyAmount.fromRawAmount(parseToken(reserve1.token), reserve1.quotient)); -}; -function isV3Route(route) { - return route[0].type === 'v3-pool'; +var PAIR_INTERFACE = new abi$7.Interface(abi$4) +var PairState +;(function (PairState) { + PairState[(PairState['LOADING'] = 0)] = 'LOADING' + PairState[(PairState['NOT_EXISTS'] = 1)] = 'NOT_EXISTS' + PairState[(PairState['EXISTS'] = 2)] = 'EXISTS' + PairState[(PairState['INVALID'] = 3)] = 'INVALID' +})(PairState || (PairState = {})) +function useV2Pairs(currencies) { + var tokens = React.useMemo( + function () { + return currencies.map(function (_a) { + var _b = __read(_a, 2), + currencyA = _b[0], + currencyB = _b[1] + return [ + currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped, + currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped, + ] + }) + }, + [currencies] + ) + var pairAddresses = React.useMemo( + function () { + return tokens.map(function (_a) { + var _b = __read(_a, 2), + tokenA = _b[0], + tokenB = _b[1] + return tokenA && + tokenB && + tokenA.chainId === tokenB.chainId && + !tokenA.equals(tokenB) && + V2_FACTORY_ADDRESSES[tokenA.chainId] + ? v2Sdk.computePairAddress({ + factoryAddress: V2_FACTORY_ADDRESSES[tokenA.chainId], + tokenA, + tokenB, + }) + : undefined + }) + }, + [tokens] + ) + var results = useMultipleContractSingleData(pairAddresses, PAIR_INTERFACE, 'getReserves') + return React.useMemo( + function () { + return results.map(function (result, i) { + var reserves = result.result, + loading = result.loading + var tokenA = tokens[i][0] + var tokenB = tokens[i][1] + if (loading) return [PairState.LOADING, null] + if (!tokenA || !tokenB || tokenA.equals(tokenB)) return [PairState.INVALID, null] + if (!reserves) return [PairState.NOT_EXISTS, null] + var reserve0 = reserves.reserve0, + reserve1 = reserves.reserve1 + var _a = __read(tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA], 2), + token0 = _a[0], + token1 = _a[1] + return [ + PairState.EXISTS, + new v2Sdk.Pair( + sdkCore.CurrencyAmount.fromRawAmount(token0, reserve0.toString()), + sdkCore.CurrencyAmount.fromRawAmount(token1, reserve1.toString()) + ), + ] + }) + }, + [results, tokens] + ) } -function useFreshData(data, dataBlockNumber, maxBlockAge) { - if (maxBlockAge === void 0) { maxBlockAge = 10; } - var localBlockNumber = useBlockNumber(); - if (!localBlockNumber) - return undefined; - if (localBlockNumber - dataBlockNumber > maxBlockAge) { - return undefined; - } - return data; -} -/** - * Returns query arguments for the Routing API query or undefined if the - * query should be skipped. - */ -function useRoutingAPIArguments(_a) { - var tokenIn = _a.tokenIn, tokenOut = _a.tokenOut, amount = _a.amount, tradeType = _a.tradeType; - var _b = __read(useClientSideRouter(), 1), clientSideRouter = _b[0]; - return React.useMemo(function () { - return !tokenIn || !tokenOut || !amount || tokenIn.equals(tokenOut) - ? undefined - : { - amount: amount.quotient.toString(), - tokenInAddress: tokenIn.wrapped.address, - tokenInChainId: tokenIn.wrapped.chainId, - tokenInDecimals: tokenIn.wrapped.decimals, - tokenInSymbol: tokenIn.wrapped.symbol, - tokenOutAddress: tokenOut.wrapped.address, - tokenOutChainId: tokenOut.wrapped.chainId, - tokenOutDecimals: tokenOut.wrapped.decimals, - tokenOutSymbol: tokenOut.wrapped.symbol, - useClientSideRouter: clientSideRouter, - type: (tradeType === sdkCore.TradeType.EXACT_INPUT ? 'exactIn' : 'exactOut'), - }; - }, [amount, clientSideRouter, tokenIn, tokenOut, tradeType]); -} -/** - * Returns the best trade by invoking the routing api or the smart order router on the client - * @param tradeType whether the swap is an exact in/out - * @param amountSpecified the exact amount to swap in/out - * @param otherCurrency the desired output/payment currency - */ -function useRoutingAPITrade(tradeType, amountSpecified, otherCurrency) { - var _a; - var _b = __read(React.useMemo(function () { - return tradeType === sdkCore.TradeType.EXACT_INPUT - ? [amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, otherCurrency] - : [otherCurrency, amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency]; - }, [amountSpecified, otherCurrency, tradeType]), 2), currencyIn = _b[0], currencyOut = _b[1]; - var queryArgs = useRoutingAPIArguments({ - tokenIn: currencyIn, - tokenOut: currencyOut, - amount: amountSpecified, - tradeType: tradeType, - }); - var _c = useGetQuoteQuery(queryArgs !== null && queryArgs !== void 0 ? queryArgs : react.skipToken, { - pollingInterval: ms__default["default"](templateObject_1$1a || (templateObject_1$1a = __makeTemplateObject(["15s"], ["15s"]))), - refetchOnFocus: true, - }), isLoading = _c.isLoading, isError = _c.isError, data = _c.data; - var quoteResult = useFreshData(data, Number(data === null || data === void 0 ? void 0 : data.blockNumber) || 0); - var route = React.useMemo(function () { return computeRoutes(currencyIn, currencyOut, tradeType, quoteResult); }, [currencyIn, currencyOut, quoteResult, tradeType]); - // get USD gas cost of trade in active chains stablecoin amount - var gasUseEstimateUSD = (_a = useStablecoinAmountFromFiatValue(quoteResult === null || quoteResult === void 0 ? void 0 : quoteResult.gasUseEstimateUSD)) !== null && _a !== void 0 ? _a : null; - return React.useMemo(function () { - if (!currencyIn || !currencyOut) { - return { - state: TradeState.INVALID, - trade: undefined, - }; - } - if (isLoading && !quoteResult) { - // only on first hook render - return { - state: TradeState.LOADING, - trade: undefined, - }; - } - var otherAmount = tradeType === sdkCore.TradeType.EXACT_INPUT - ? currencyOut && quoteResult - ? sdkCore.CurrencyAmount.fromRawAmount(currencyOut, quoteResult.quote) - : undefined - : currencyIn && quoteResult - ? sdkCore.CurrencyAmount.fromRawAmount(currencyIn, quoteResult.quote) - : undefined; - if (isError || !otherAmount || !route || route.length === 0 || !queryArgs) { - return { - state: TradeState.NO_ROUTE_FOUND, - trade: undefined, - }; - } - try { - var trade = transformRoutesToTrade(route, tradeType, gasUseEstimateUSD); - return { - // always return VALID regardless of isFetching status - state: TradeState.VALID, - trade: trade, - }; - } - catch (e) { - console.debug('transformRoutesToTrade failed: ', e); - return { state: TradeState.INVALID, trade: undefined }; - } - }, [currencyIn, currencyOut, isLoading, quoteResult, tradeType, isError, route, queryArgs, gasUseEstimateUSD]); -} -var templateObject_1$1a; +function useAllCommonPairs(currencyA, currencyB) { + var allCurrencyCombinations = useAllCurrencyCombinations(currencyA, currencyB) + var allPairs = useV2Pairs(allCurrencyCombinations) + return React.useMemo( + function () { + return Object.values( + allPairs + // filter out invalid pairs + .filter(function (result) { + return Boolean(result[0] === PairState.EXISTS && result[1]) + }) + .map(function (_a) { + var _b = __read(_a, 2), + pair = _b[1] + return pair + }) + ) + }, + [allPairs] + ) +} +var MAX_HOPS = 3 +/** + * Returns the best v2 trade for a desired swap + * @param tradeType whether the swap is an exact in/out + * @param amountSpecified the exact amount to swap in/out + * @param otherCurrency the desired output/payment currency + */ +function useBestV2Trade(tradeType, amountSpecified, otherCurrency, _a) { + var _b = _a === void 0 ? {} : _a, + _c = _b.maxHops, + maxHops = _c === void 0 ? MAX_HOPS : _c + var _d = __read( + React.useMemo( + function () { + return tradeType === sdkCore.TradeType.EXACT_INPUT + ? [ + amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, + otherCurrency, + ] + : [ + otherCurrency, + amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, + ] + }, + [tradeType, amountSpecified, otherCurrency] + ), + 2 + ), + currencyIn = _d[0], + currencyOut = _d[1] + var allowedPairs = useAllCommonPairs(currencyIn, currencyOut) + return React.useMemo( + function () { + var _a, _b, _c, _d + if (amountSpecified && currencyIn && currencyOut && allowedPairs.length > 0) { + if (maxHops === 1) { + var options = { maxHops: 1, maxNumResults: 1 } + if (tradeType === sdkCore.TradeType.EXACT_INPUT) { + var amountIn = amountSpecified + return (_a = v2Sdk.Trade.bestTradeExactIn(allowedPairs, amountIn, currencyOut, options)[0]) !== null && + _a !== void 0 + ? _a + : null + } else { + var amountOut = amountSpecified + return (_b = v2Sdk.Trade.bestTradeExactOut(allowedPairs, currencyIn, amountOut, options)[0]) !== null && + _b !== void 0 + ? _b + : null + } + } + // search through trades with varying hops, find best trade out of them + var bestTradeSoFar = null + for (var i = 1; i <= maxHops; i++) { + var options = { maxHops: i, maxNumResults: 1 } + var currentTrade = void 0 + if (tradeType === sdkCore.TradeType.EXACT_INPUT) { + var amountIn = amountSpecified + currentTrade = + (_c = v2Sdk.Trade.bestTradeExactIn(allowedPairs, amountIn, currencyOut, options)[0]) !== null && + _c !== void 0 + ? _c + : null + } else { + var amountOut = amountSpecified + currentTrade = + (_d = v2Sdk.Trade.bestTradeExactOut(allowedPairs, currencyIn, amountOut, options)[0]) !== null && + _d !== void 0 + ? _d + : null + } + // if current trade is best yet, save it + if (isTradeBetter(bestTradeSoFar, currentTrade, BETTER_TRADE_LESS_HOPS_THRESHOLD)) { + bestTradeSoFar = currentTrade + } + } + return bestTradeSoFar + } + return null + }, + [tradeType, amountSpecified, currencyIn, currencyOut, allowedPairs, maxHops] + ) +} -var AUTO_ROUTER_SUPPORTED_CHAINS = Object.values(smartOrderRouter.ChainId); +var TradeState +;(function (TradeState) { + TradeState[(TradeState['LOADING'] = 0)] = 'LOADING' + TradeState[(TradeState['INVALID'] = 1)] = 'INVALID' + TradeState[(TradeState['NO_ROUTE_FOUND'] = 2)] = 'NO_ROUTE_FOUND' + TradeState[(TradeState['VALID'] = 3)] = 'VALID' + TradeState[(TradeState['SYNCING'] = 4)] = 'SYNCING' +})(TradeState || (TradeState = {})) +var InterfaceTrade = /** @class */ (function (_super) { + __extends(InterfaceTrade, _super) + function InterfaceTrade(_a) { + var gasUseEstimateUSD = _a.gasUseEstimateUSD, + routes = __rest(_a, ['gasUseEstimateUSD']) + var _this = _super.call(this, routes) || this + _this.gasUseEstimateUSD = gasUseEstimateUSD + return _this + } + return InterfaceTrade +})(routerSdk.Trade) -function useAutoRouterSupported() { - var chainId = useActiveWeb3React().chainId; - return Boolean(chainId && AUTO_ROUTER_SUPPORTED_CHAINS.includes(chainId)); +var abi = [ + { + inputs: [], + name: 'feeGrowthGlobal0X128', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'feeGrowthGlobal1X128', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'liquidity', + outputs: [ + { + internalType: 'uint128', + name: '', + type: 'uint128', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'index', + type: 'uint256', + }, + ], + name: 'observations', + outputs: [ + { + internalType: 'uint32', + name: 'blockTimestamp', + type: 'uint32', + }, + { + internalType: 'int56', + name: 'tickCumulative', + type: 'int56', + }, + { + internalType: 'uint160', + name: 'secondsPerLiquidityCumulativeX128', + type: 'uint160', + }, + { + internalType: 'bool', + name: 'initialized', + type: 'bool', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'key', + type: 'bytes32', + }, + ], + name: 'positions', + outputs: [ + { + internalType: 'uint128', + name: '_liquidity', + type: 'uint128', + }, + { + internalType: 'uint256', + name: 'feeGrowthInside0LastX128', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'feeGrowthInside1LastX128', + type: 'uint256', + }, + { + internalType: 'uint128', + name: 'tokensOwed0', + type: 'uint128', + }, + { + internalType: 'uint128', + name: 'tokensOwed1', + type: 'uint128', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'protocolFees', + outputs: [ + { + internalType: 'uint128', + name: 'token0', + type: 'uint128', + }, + { + internalType: 'uint128', + name: 'token1', + type: 'uint128', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'slot0', + outputs: [ + { + internalType: 'uint160', + name: 'sqrtPriceX96', + type: 'uint160', + }, + { + internalType: 'int24', + name: 'tick', + type: 'int24', + }, + { + internalType: 'uint16', + name: 'observationIndex', + type: 'uint16', + }, + { + internalType: 'uint16', + name: 'observationCardinality', + type: 'uint16', + }, + { + internalType: 'uint16', + name: 'observationCardinalityNext', + type: 'uint16', + }, + { + internalType: 'uint8', + name: 'feeProtocol', + type: 'uint8', + }, + { + internalType: 'bool', + name: 'unlocked', + type: 'bool', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'int16', + name: 'wordPosition', + type: 'int16', + }, + ], + name: 'tickBitmap', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'int24', + name: 'tick', + type: 'int24', + }, + ], + name: 'ticks', + outputs: [ + { + internalType: 'uint128', + name: 'liquidityGross', + type: 'uint128', + }, + { + internalType: 'int128', + name: 'liquidityNet', + type: 'int128', + }, + { + internalType: 'uint256', + name: 'feeGrowthOutside0X128', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'feeGrowthOutside1X128', + type: 'uint256', + }, + { + internalType: 'int56', + name: 'tickCumulativeOutside', + type: 'int56', + }, + { + internalType: 'uint160', + name: 'secondsPerLiquidityOutsideX128', + type: 'uint160', + }, + { + internalType: 'uint32', + name: 'secondsOutside', + type: 'uint32', + }, + { + internalType: 'bool', + name: 'initialized', + type: 'bool', + }, + ], + stateMutability: 'view', + type: 'function', + }, +] + +var POOL_STATE_INTERFACE = new abi$7.Interface(abi) +var PoolState +;(function (PoolState) { + PoolState[(PoolState['LOADING'] = 0)] = 'LOADING' + PoolState[(PoolState['NOT_EXISTS'] = 1)] = 'NOT_EXISTS' + PoolState[(PoolState['EXISTS'] = 2)] = 'EXISTS' + PoolState[(PoolState['INVALID'] = 3)] = 'INVALID' +})(PoolState || (PoolState = {})) +function usePools(poolKeys) { + var chainId = useActiveWeb3React().chainId + var transformed = React.useMemo( + function () { + return poolKeys.map(function (_a) { + var _b = __read(_a, 3), + currencyA = _b[0], + currencyB = _b[1], + feeAmount = _b[2] + if (!chainId || !currencyA || !currencyB || !feeAmount) return null + var tokenA = currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped + var tokenB = currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped + if (!tokenA || !tokenB || tokenA.equals(tokenB)) return null + var _c = __read(tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA], 2), + token0 = _c[0], + token1 = _c[1] + return [token0, token1, feeAmount] + }) + }, + [chainId, poolKeys] + ) + var poolAddresses = React.useMemo( + function () { + var v3CoreFactoryAddress = chainId && V3_CORE_FACTORY_ADDRESSES[chainId] + return transformed.map(function (value) { + if (!v3CoreFactoryAddress || !value) return undefined + return v3Sdk.computePoolAddress({ + factoryAddress: v3CoreFactoryAddress, + tokenA: value[0], + tokenB: value[1], + fee: value[2], + }) + }) + }, + [chainId, transformed] + ) + var slot0s = useMultipleContractSingleData(poolAddresses, POOL_STATE_INTERFACE, 'slot0') + var liquidities = useMultipleContractSingleData(poolAddresses, POOL_STATE_INTERFACE, 'liquidity') + return React.useMemo( + function () { + return poolKeys.map(function (_key, index) { + var _a + var _b = __read((_a = transformed[index]) !== null && _a !== void 0 ? _a : [], 3), + token0 = _b[0], + token1 = _b[1], + fee = _b[2] + if (!token0 || !token1 || !fee) return [PoolState.INVALID, null] + var _c = slot0s[index], + slot0 = _c.result, + slot0Loading = _c.loading, + slot0Valid = _c.valid + var _d = liquidities[index], + liquidity = _d.result, + liquidityLoading = _d.loading, + liquidityValid = _d.valid + if (!slot0Valid || !liquidityValid) return [PoolState.INVALID, null] + if (slot0Loading || liquidityLoading) return [PoolState.LOADING, null] + if (!slot0 || !liquidity) return [PoolState.NOT_EXISTS, null] + if (!slot0.sqrtPriceX96 || slot0.sqrtPriceX96.eq(0)) return [PoolState.NOT_EXISTS, null] + try { + return [PoolState.EXISTS, new v3Sdk.Pool(token0, token1, fee, slot0.sqrtPriceX96, liquidity[0], slot0.tick)] + } catch (error) { + console.error('Error when constructing the pool', error) + return [PoolState.NOT_EXISTS, null] + } + }) + }, + [liquidities, poolKeys, slot0s, transformed] + ) } -/** - * Returns the best v2+v3 trade for a desired swap. - * @param tradeType whether the swap is an exact in/out - * @param amountSpecified the exact amount to swap in/out - * @param otherCurrency the desired output/payment currency - */ -function useBestTrade(tradeType, amountSpecified, otherCurrency) { - var autoRouterSupported = useAutoRouterSupported(); - var isWindowVisible = useIsWindowVisible(); - var _a = __read(useDebounce(React.useMemo(function () { return [amountSpecified, otherCurrency]; }, [amountSpecified, otherCurrency]), 200), 2), debouncedAmount = _a[0], debouncedOtherCurrency = _a[1]; - var routingAPITrade = useRoutingAPITrade(tradeType, autoRouterSupported && isWindowVisible ? debouncedAmount : undefined, debouncedOtherCurrency); - var isLoading = amountSpecified !== undefined && debouncedAmount === undefined; - // consider trade debouncing when inputs/outputs do not match - var debouncing = routingAPITrade.trade && - amountSpecified && - (tradeType === sdkCore.TradeType.EXACT_INPUT - ? !routingAPITrade.trade.inputAmount.equalTo(amountSpecified) || - !amountSpecified.currency.equals(routingAPITrade.trade.inputAmount.currency) || - !(debouncedOtherCurrency === null || debouncedOtherCurrency === void 0 ? void 0 : debouncedOtherCurrency.equals(routingAPITrade.trade.outputAmount.currency)) - : !routingAPITrade.trade.outputAmount.equalTo(amountSpecified) || - !amountSpecified.currency.equals(routingAPITrade.trade.outputAmount.currency) || - !(debouncedOtherCurrency === null || debouncedOtherCurrency === void 0 ? void 0 : debouncedOtherCurrency.equals(routingAPITrade.trade.inputAmount.currency))); - var useFallback = !autoRouterSupported || (!debouncing && routingAPITrade.state === TradeState.NO_ROUTE_FOUND); - // only use client side router if routing api trade failed or is not supported - var bestV3Trade = useClientSideV3Trade(tradeType, useFallback ? debouncedAmount : undefined, useFallback ? debouncedOtherCurrency : undefined); - // only return gas estimate from api if routing api trade is used - return React.useMemo(function () { return (__assign(__assign(__assign({}, (useFallback ? bestV3Trade : routingAPITrade)), (debouncing ? { state: TradeState.SYNCING } : {})), (isLoading ? { state: TradeState.LOADING } : {}))); }, [bestV3Trade, debouncing, isLoading, routingAPITrade, useFallback]); -} - -// gets the current timestamp from the blockchain -function useCurrentBlockTimestamp() { - var _a, _b; - var multicall = useInterfaceMulticall(); - return (_b = (_a = useSingleCallResult(multicall, 'getCurrentBlockTimestamp')) === null || _a === void 0 ? void 0 : _a.result) === null || _b === void 0 ? void 0 : _b[0]; +/** + * Returns all the existing pools that should be considered for swapping between an input currency and an output currency + * @param currencyIn the input currency + * @param currencyOut the output currency + */ +function useV3SwapPools(currencyIn, currencyOut) { + var chainId = useActiveWeb3React().chainId + var allCurrencyCombinations = useAllCurrencyCombinations(currencyIn, currencyOut) + var allCurrencyCombinationsWithAllFees = React.useMemo( + function () { + return allCurrencyCombinations.reduce(function (list, _a) { + var _b = __read(_a, 2), + tokenA = _b[0], + tokenB = _b[1] + return chainId === SupportedChainId.MAINNET + ? list.concat([ + [tokenA, tokenB, v3Sdk.FeeAmount.LOW], + [tokenA, tokenB, v3Sdk.FeeAmount.MEDIUM], + [tokenA, tokenB, v3Sdk.FeeAmount.HIGH], + ]) + : list.concat([ + [tokenA, tokenB, v3Sdk.FeeAmount.LOWEST], + [tokenA, tokenB, v3Sdk.FeeAmount.LOW], + [tokenA, tokenB, v3Sdk.FeeAmount.MEDIUM], + [tokenA, tokenB, v3Sdk.FeeAmount.HIGH], + ]) + }, []) + }, + [allCurrencyCombinations, chainId] + ) + var pools = usePools(allCurrencyCombinationsWithAllFees) + return React.useMemo( + function () { + return { + pools: pools + .filter(function (tuple) { + return tuple[0] === PoolState.EXISTS && tuple[1] !== null + }) + .map(function (_a) { + var _b = __read(_a, 2), + pool = _b[1] + return pool + }), + loading: pools.some(function (_a) { + var _b = __read(_a, 1), + state = _b[0] + return state === PoolState.LOADING + }), + } + }, + [pools] + ) } -new abi$7.Interface(abi$6); -({ - 1: [ - { - tokens: [WRAPPED_NATIVE_CURRENCY[1], DAI], - stakingRewardAddress: '0xa1484C3aa22a66C62b77E0AE78E15258bd0cB711', - }, - { - tokens: [WRAPPED_NATIVE_CURRENCY[1], USDC], - stakingRewardAddress: '0x7FBa4B8Dc5E7616e59622806932DBea72537A56b', - }, - { - tokens: [WRAPPED_NATIVE_CURRENCY[1], USDT], - stakingRewardAddress: '0x6C3e4cb2E96B01F4b866965A91ed4437839A121a', - }, - { - tokens: [WRAPPED_NATIVE_CURRENCY[1], WBTC], - stakingRewardAddress: '0xCA35e32e7926b96A9988f61d510E038108d8068e', - }, - ], -}); +/** + * Returns true if poolA is equivalent to poolB + * @param poolA one of the two pools + * @param poolB the other pool + */ +function poolEquals(poolA, poolB) { + return ( + poolA === poolB || + (poolA.token0.equals(poolB.token0) && poolA.token1.equals(poolB.token1) && poolA.fee === poolB.fee) + ) +} +function computeAllRoutes(currencyIn, currencyOut, pools, chainId, currentPath, allPaths, startCurrencyIn, maxHops) { + var e_1, _a + if (currentPath === void 0) { + currentPath = [] + } + if (allPaths === void 0) { + allPaths = [] + } + if (startCurrencyIn === void 0) { + startCurrencyIn = currencyIn + } + if (maxHops === void 0) { + maxHops = 2 + } + var tokenIn = currencyIn === null || currencyIn === void 0 ? void 0 : currencyIn.wrapped + var tokenOut = currencyOut === null || currencyOut === void 0 ? void 0 : currencyOut.wrapped + if (!tokenIn || !tokenOut) throw new Error('Missing tokenIn/tokenOut') + var _loop_1 = function (pool) { + if ( + !pool.involvesToken(tokenIn) || + currentPath.find(function (pathPool) { + return poolEquals(pool, pathPool) + }) + ) + return 'continue' + var outputToken = pool.token0.equals(tokenIn) ? pool.token1 : pool.token0 + if (outputToken.equals(tokenOut)) { + allPaths.push( + new v3Sdk.Route( + __spreadArray(__spreadArray([], __read(currentPath), false), [pool], false), + startCurrencyIn, + currencyOut + ) + ) + } else if (maxHops > 1) { + computeAllRoutes( + outputToken, + currencyOut, + pools, + chainId, + __spreadArray(__spreadArray([], __read(currentPath), false), [pool], false), + allPaths, + startCurrencyIn, + maxHops - 1 + ) + } + } + try { + for (var pools_1 = __values(pools), pools_1_1 = pools_1.next(); !pools_1_1.done; pools_1_1 = pools_1.next()) { + var pool = pools_1_1.value + _loop_1(pool) + } + } catch (e_1_1) { + e_1 = { error: e_1_1 } + } finally { + try { + if (pools_1_1 && !pools_1_1.done && (_a = pools_1.return)) _a.call(pools_1) + } finally { + if (e_1) throw e_1.error + } + } + return allPaths +} +/** + * Returns all the routes from an input currency to an output currency + * @param currencyIn the input currency + * @param currencyOut the output currency + */ +function useAllV3Routes(currencyIn, currencyOut) { + var chainId = useActiveWeb3React().chainId + var _a = useV3SwapPools(currencyIn, currencyOut), + pools = _a.pools, + poolsLoading = _a.loading + return React.useMemo( + function () { + if (poolsLoading || !chainId || !pools || !currencyIn || !currencyOut) return { loading: true, routes: [] } + var routes = computeAllRoutes(currencyIn, currencyOut, pools, chainId, [], [], currencyIn, 2) + return { loading: false, routes } + }, + [chainId, currencyIn, currencyOut, pools, poolsLoading] + ) +} -// mimics useAllBalances -function useAllTokenBalances() { - var account = useActiveWeb3React().account; - var allTokens = useAllTokens(); - var allTokensArray = React.useMemo(function () { return Object.values(allTokens !== null && allTokens !== void 0 ? allTokens : {}); }, [allTokens]); - var balances = useTokenBalances(account !== null && account !== void 0 ? account : undefined, allTokensArray); - return balances !== null && balances !== void 0 ? balances : {}; +var _a$7 +var QUOTE_GAS_OVERRIDES = + ((_a$7 = {}), + (_a$7[SupportedChainId.ARBITRUM_ONE] = 25000000), + (_a$7[SupportedChainId.ARBITRUM_RINKEBY] = 25000000), + _a$7) +var DEFAULT_GAS_QUOTE = 2000000 +/** + * Returns the best v3 trade for a desired swap + * @param tradeType whether the swap is an exact in/out + * @param amountSpecified the exact amount to swap in/out + * @param otherCurrency the desired output/payment currency + */ +function useClientSideV3Trade(tradeType, amountSpecified, otherCurrency) { + var _a + var _b = __read( + React.useMemo( + function () { + return tradeType === sdkCore.TradeType.EXACT_INPUT + ? [ + amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, + otherCurrency, + ] + : [ + otherCurrency, + amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, + ] + }, + [tradeType, amountSpecified, otherCurrency] + ), + 2 + ), + currencyIn = _b[0], + currencyOut = _b[1] + var _c = useAllV3Routes(currencyIn, currencyOut), + routes = _c.routes, + routesLoading = _c.loading + var quoter = useV3Quoter() + var chainId = useActiveWeb3React().chainId + var quotesResults = useSingleContractWithCallData( + quoter, + amountSpecified + ? routes.map(function (route) { + return v3Sdk.SwapQuoter.quoteCallParameters(route, amountSpecified, tradeType).calldata + }) + : [], + { + gasRequired: chainId + ? (_a = QUOTE_GAS_OVERRIDES[chainId]) !== null && _a !== void 0 + ? _a + : DEFAULT_GAS_QUOTE + : undefined, + } + ) + return React.useMemo( + function () { + if ( + !amountSpecified || + !currencyIn || + !currencyOut || + quotesResults.some(function (_a) { + var valid = _a.valid + return !valid + }) || + // skip when tokens are the same + (tradeType === sdkCore.TradeType.EXACT_INPUT + ? amountSpecified.currency.equals(currencyOut) + : amountSpecified.currency.equals(currencyIn)) + ) { + return { + state: TradeState.INVALID, + trade: undefined, + } + } + if ( + routesLoading || + quotesResults.some(function (_a) { + var loading = _a.loading + return loading + }) + ) { + return { + state: TradeState.LOADING, + trade: undefined, + } + } + var _a = quotesResults.reduce( + function (currentBest, _a, i) { + var result = _a.result + if (!result) return currentBest + // overwrite the current best if it's not defined or if this route is better + if (tradeType === sdkCore.TradeType.EXACT_INPUT) { + var amountOut_1 = sdkCore.CurrencyAmount.fromRawAmount(currencyOut, result.amountOut.toString()) + if ( + currentBest.amountOut === null || + JSBI__default['default'].lessThan(currentBest.amountOut.quotient, amountOut_1.quotient) + ) { + return { + bestRoute: routes[i], + amountIn: amountSpecified, + amountOut: amountOut_1, + } + } + } else { + var amountIn_1 = sdkCore.CurrencyAmount.fromRawAmount(currencyIn, result.amountIn.toString()) + if ( + currentBest.amountIn === null || + JSBI__default['default'].greaterThan(currentBest.amountIn.quotient, amountIn_1.quotient) + ) { + return { + bestRoute: routes[i], + amountIn: amountIn_1, + amountOut: amountSpecified, + } + } + } + return currentBest + }, + { + bestRoute: null, + amountIn: null, + amountOut: null, + } + ), + bestRoute = _a.bestRoute, + amountIn = _a.amountIn, + amountOut = _a.amountOut + if (!bestRoute || !amountIn || !amountOut) { + return { + state: TradeState.NO_ROUTE_FOUND, + trade: undefined, + } + } + return { + state: TradeState.VALID, + trade: new InterfaceTrade({ + v2Routes: [], + v3Routes: [ + { + routev3: bestRoute, + inputAmount: amountIn, + outputAmount: amountOut, + }, + ], + tradeType, + }), + } + }, + [amountSpecified, currencyIn, currencyOut, quotesResults, routes, routesLoading, tradeType] + ) } -function useSwapState() { - return useAppSelector(function (state) { return state.swap; }); -} -function useSwapActionHandlers() { - var dispatch = useAppDispatch(); - var onCurrencySelection = React.useCallback(function (field, currency) { - dispatch(selectCurrency({ - field: field, - currencyId: currency.isToken ? currency.address : currency.isNative ? 'ETH' : '', - })); - }, [dispatch]); - var onSwitchTokens = React.useCallback(function () { - dispatch(switchCurrencies()); - }, [dispatch]); - var onUserInput = React.useCallback(function (field, typedValue) { - dispatch(typeInput({ field: field, typedValue: typedValue })); - }, [dispatch]); - var onChangeRecipient = React.useCallback(function (recipient) { - dispatch(setRecipient({ recipient: recipient })); - }, [dispatch]); - return { - onSwitchTokens: onSwitchTokens, - onCurrencySelection: onCurrencySelection, - onUserInput: onUserInput, - onChangeRecipient: onChangeRecipient, - }; -} -var BAD_RECIPIENT_ADDRESSES = { - '0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f': true, - '0xf164fC0Ec4E93095b804a4795bBe1e041497b92a': true, - '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D': true, // v2 router 02 -}; -// from the current swap inputs, compute the best trade and return it. -function useDerivedSwapInfo() { - var _a, _b; - var account = useActiveWeb3React().account; - var _c = useSwapState(), independentField = _c.independentField, typedValue = _c.typedValue, _d = Field.INPUT, inputCurrencyId = _c[_d].currencyId, _e = Field.OUTPUT, outputCurrencyId = _c[_e].currencyId, recipient = _c.recipient; - var inputCurrency = useCurrency(inputCurrencyId); - var outputCurrency = useCurrency(outputCurrencyId); - var recipientLookup = useENS(recipient !== null && recipient !== void 0 ? recipient : undefined); - var to = (_a = (recipient === null ? account : recipientLookup.address)) !== null && _a !== void 0 ? _a : null; - var relevantTokenBalances = useCurrencyBalances(account !== null && account !== void 0 ? account : undefined, React.useMemo(function () { return [inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : undefined, outputCurrency !== null && outputCurrency !== void 0 ? outputCurrency : undefined]; }, [inputCurrency, outputCurrency])); - var isExactIn = independentField === Field.INPUT; - var parsedAmount = React.useMemo(function () { var _a; return tryParseCurrencyAmount(typedValue, (_a = (isExactIn ? inputCurrency : outputCurrency)) !== null && _a !== void 0 ? _a : undefined); }, [inputCurrency, isExactIn, outputCurrency, typedValue]); - var trade = useBestTrade(isExactIn ? sdkCore.TradeType.EXACT_INPUT : sdkCore.TradeType.EXACT_OUTPUT, parsedAmount, (_b = (isExactIn ? outputCurrency : inputCurrency)) !== null && _b !== void 0 ? _b : undefined); - var currencyBalances = React.useMemo(function () { - var _a; - return (_a = {}, - _a[Field.INPUT] = relevantTokenBalances[0], - _a[Field.OUTPUT] = relevantTokenBalances[1], - _a); - }, [relevantTokenBalances]); - var currencies = React.useMemo(function () { - var _a; - return (_a = {}, - _a[Field.INPUT] = inputCurrency, - _a[Field.OUTPUT] = outputCurrency, - _a); - }, [inputCurrency, outputCurrency]); - // allowed slippage is either auto slippage, or custom user defined slippage if auto slippage disabled - var autoSlippageTolerance = useAutoSlippageTolerance(trade.trade); - var allowedSlippage = useUserSlippageToleranceWithDefault(autoSlippageTolerance); - var inputError = React.useMemo(function () { - var _a; - var inputError; - if (!account) { - inputError = jsxRuntime.jsx(macro.Trans, { children: "Connect Wallet" }, void 0); - } - if (!currencies[Field.INPUT] || !currencies[Field.OUTPUT]) { - inputError = inputError !== null && inputError !== void 0 ? inputError : jsxRuntime.jsx(macro.Trans, { children: "Select a token" }, void 0); - } - if (!parsedAmount) { - inputError = inputError !== null && inputError !== void 0 ? inputError : jsxRuntime.jsx(macro.Trans, { children: "Enter an amount" }, void 0); - } - var formattedTo = isAddress(to); - if (!to || !formattedTo) { - inputError = inputError !== null && inputError !== void 0 ? inputError : jsxRuntime.jsx(macro.Trans, { children: "Enter a recipient" }, void 0); - } - else { - if (BAD_RECIPIENT_ADDRESSES[formattedTo]) { - inputError = inputError !== null && inputError !== void 0 ? inputError : jsxRuntime.jsx(macro.Trans, { children: "Invalid recipient" }, void 0); - } - } - // compare input balance to max input based on version - var _b = __read([currencyBalances[Field.INPUT], (_a = trade.trade) === null || _a === void 0 ? void 0 : _a.maximumAmountIn(allowedSlippage)], 2), balanceIn = _b[0], amountIn = _b[1]; - if (balanceIn && amountIn && balanceIn.lessThan(amountIn)) { - inputError = jsxRuntime.jsxs(macro.Trans, { children: ["Insufficient ", amountIn.currency.symbol, " balance"] }, void 0); - } - return inputError; - }, [account, allowedSlippage, currencies, currencyBalances, parsedAmount, to, trade.trade]); - return React.useMemo(function () { return ({ - currencies: currencies, - currencyBalances: currencyBalances, - parsedAmount: parsedAmount, - inputError: inputError, - trade: trade, - allowedSlippage: allowedSlippage, - }); }, [allowedSlippage, currencies, currencyBalances, inputError, parsedAmount, trade]); -} -function parseCurrencyFromURLParameter(urlParam) { - if (typeof urlParam === 'string') { - var valid = isAddress(urlParam); - if (valid) - return valid; - if (urlParam.toUpperCase() === 'ETH') - return 'ETH'; - } - return ''; -} -function parseTokenAmountURLParameter(urlParam) { - return typeof urlParam === 'string' && !isNaN(parseFloat(urlParam)) ? urlParam : ''; -} -function parseIndependentFieldURLParameter(urlParam) { - return typeof urlParam === 'string' && urlParam.toLowerCase() === 'output' ? Field.OUTPUT : Field.INPUT; -} -var ENS_NAME_REGEX = /^[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)?$/; -var ADDRESS_REGEX = /^0x[a-fA-F0-9]{40}$/; -function validatedRecipient(recipient) { - if (typeof recipient !== 'string') - return null; - var address = isAddress(recipient); - if (address) - return address; - if (ENS_NAME_REGEX.test(recipient)) - return recipient; - if (ADDRESS_REGEX.test(recipient)) - return recipient; - return null; -} -function queryParametersToSwapState(parsedQs) { - var _a; - var inputCurrency = parseCurrencyFromURLParameter(parsedQs.inputCurrency); - var outputCurrency = parseCurrencyFromURLParameter(parsedQs.outputCurrency); - if (inputCurrency === '' && outputCurrency === '') { - // default to ETH input - inputCurrency = 'ETH'; - } - else if (inputCurrency === outputCurrency) { - // clear output if identical - outputCurrency = ''; - } - var recipient = validatedRecipient(parsedQs.recipient); - return _a = {}, - _a[Field.INPUT] = { - currencyId: inputCurrency === '' ? null : inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : null, - }, - _a[Field.OUTPUT] = { - currencyId: outputCurrency === '' ? null : outputCurrency !== null && outputCurrency !== void 0 ? outputCurrency : null, - }, - _a.typedValue = parseTokenAmountURLParameter(parsedQs.exactAmount), - _a.independentField = parseIndependentFieldURLParameter(parsedQs.exactField), - _a.recipient = recipient, - _a; -} -// updates the swap state to use the defaults for a given network -function useDefaultsFromURLSearch() { - var chainId = useActiveWeb3React().chainId; - var dispatch = useAppDispatch(); - var parsedQs = useParsedQueryString(); - var _a = __read(React.useState(), 2), result = _a[0], setResult = _a[1]; - React.useEffect(function () { - var _a, _b; - if (!chainId) - return; - var parsed = queryParametersToSwapState(parsedQs); - var inputCurrencyId = (_a = parsed[Field.INPUT].currencyId) !== null && _a !== void 0 ? _a : undefined; - var outputCurrencyId = (_b = parsed[Field.OUTPUT].currencyId) !== null && _b !== void 0 ? _b : undefined; - dispatch(replaceSwapState({ - typedValue: parsed.typedValue, - field: parsed.independentField, - inputCurrencyId: inputCurrencyId, - outputCurrencyId: outputCurrencyId, - recipient: parsed.recipient, - })); - setResult({ inputCurrencyId: inputCurrencyId, outputCurrencyId: outputCurrencyId }); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [dispatch, chainId]); - return result; +var _a$6 +// Stablecoin amounts used when calculating spot price for a given currency. +// The amount is large enough to filter low liquidity pairs. +var STABLECOIN_AMOUNT_OUT = + ((_a$6 = {}), + (_a$6[SupportedChainId.MAINNET] = sdkCore.CurrencyAmount.fromRawAmount(USDC, 100000000000)), + (_a$6[SupportedChainId.ARBITRUM_ONE] = sdkCore.CurrencyAmount.fromRawAmount(USDC_ARBITRUM, 10000000000)), + (_a$6[SupportedChainId.OPTIMISM] = sdkCore.CurrencyAmount.fromRawAmount(DAI_OPTIMISM, 1e22)), + (_a$6[SupportedChainId.POLYGON] = sdkCore.CurrencyAmount.fromRawAmount(USDC_POLYGON, 10000000000)), + _a$6) +/** + * Returns the price in USDC of the input currency + * @param currency currency to compute the USDC price of + */ +function useUSDCPrice(currency) { + var chainId = currency === null || currency === void 0 ? void 0 : currency.chainId + var amountOut = chainId ? STABLECOIN_AMOUNT_OUT[chainId] : undefined + var stablecoin = amountOut === null || amountOut === void 0 ? void 0 : amountOut.currency + // TODO(#2808): remove dependency on useBestV2Trade + var v2USDCTrade = useBestV2Trade(sdkCore.TradeType.EXACT_OUTPUT, amountOut, currency, { + maxHops: 2, + }) + var v3USDCTrade = useClientSideV3Trade(sdkCore.TradeType.EXACT_OUTPUT, amountOut, currency) + return React.useMemo( + function () { + if (!currency || !stablecoin) { + return undefined + } + // handle usdc + if (currency === null || currency === void 0 ? void 0 : currency.wrapped.equals(stablecoin)) { + return new sdkCore.Price(stablecoin, stablecoin, '1', '1') + } + // use v2 price if available, v3 as fallback + if (v2USDCTrade) { + var _a = v2USDCTrade.route.midPrice, + numerator = _a.numerator, + denominator = _a.denominator + return new sdkCore.Price(currency, stablecoin, denominator, numerator) + } else if (v3USDCTrade.trade) { + var _b = v3USDCTrade.trade.routes[0].midPrice, + numerator = _b.numerator, + denominator = _b.denominator + return new sdkCore.Price(currency, stablecoin, denominator, numerator) + } + return undefined + }, + [currency, stablecoin, v2USDCTrade, v3USDCTrade.trade] + ) +} +function useUSDCValue(currencyAmount) { + var price = useUSDCPrice(currencyAmount === null || currencyAmount === void 0 ? void 0 : currencyAmount.currency) + return React.useMemo( + function () { + if (!price || !currencyAmount) return null + try { + return price.quote(currencyAmount) + } catch (error) { + return null + } + }, + [currencyAmount, price] + ) +} +/** + * + * @param fiatValue string representation of a USD amount + * @returns CurrencyAmount where currency is stablecoin on active chain + */ +function useStablecoinAmountFromFiatValue(fiatValue) { + var _a + var chainId = useActiveWeb3React().chainId + var stablecoin = chainId + ? (_a = STABLECOIN_AMOUNT_OUT[chainId]) === null || _a === void 0 + ? void 0 + : _a.currency + : undefined + if (fiatValue === null || fiatValue === undefined || !chainId || !stablecoin) { + return undefined + } + // trim for decimal precision when parsing + var parsedForDecimals = parseFloat(fiatValue).toFixed(stablecoin.decimals).toString() + try { + // parse USD string into CurrencyAmount based on stablecoin decimals + return tryParseCurrencyAmount(parsedForDecimals, stablecoin) + } catch (error) { + return undefined + } +} + +var V3_SWAP_DEFAULT_SLIPPAGE = new sdkCore.Percent(50, 10000) // .50% +var ONE_TENTHS_PERCENT = new sdkCore.Percent(10, 10000) // .10% +/** + * Return a guess of the gas cost used in computing slippage tolerance for a given trade + * @param trade the trade for which to _guess_ the amount of gas it would cost to execute + */ +function guesstimateGas(trade) { + if (!!trade) { + return ( + 100000 + + trade.swaps.reduce(function (memo, swap) { + return swap.route.pools.length + memo + }, 0) * + 30000 + ) + } + return undefined +} +var MIN_AUTO_SLIPPAGE_TOLERANCE = new sdkCore.Percent(5, 1000) // 0.5% +var MAX_AUTO_SLIPPAGE_TOLERANCE = new sdkCore.Percent(25, 100) // 25% +/** + * Returns slippage tolerance based on values from current trade, gas estimates from api, and active network. + */ +function useAutoSlippageTolerance(trade) { + var chainId = useActiveWeb3React().chainId + var onL2 = chainId && L2_CHAIN_IDS.includes(chainId) + var outputDollarValue = useUSDCValue(trade === null || trade === void 0 ? void 0 : trade.outputAmount) + var nativeGasPrice = useGasPrice() + var gasEstimate = guesstimateGas(trade) + var nativeCurrency = useNativeCurrency() + var nativeCurrencyPrice = useUSDCPrice( + nativeCurrency !== null && nativeCurrency !== void 0 ? nativeCurrency : undefined + ) + return React.useMemo( + function () { + if (!trade || onL2) return ONE_TENTHS_PERCENT + var nativeGasCost = + nativeGasPrice && typeof gasEstimate === 'number' + ? JSBI__default['default'].multiply(nativeGasPrice, JSBI__default['default'].BigInt(gasEstimate)) + : undefined + var dollarGasCost = + nativeCurrency && nativeGasCost && nativeCurrencyPrice + ? nativeCurrencyPrice.quote(sdkCore.CurrencyAmount.fromRawAmount(nativeCurrency, nativeGasCost)) + : undefined + // if valid estimate from api and using api trade, use gas estimate from api + // NOTE - dont use gas estimate for L2s yet - need to verify accuracy + // if not, use local heuristic + var dollarCostToUse = + chainId && + SUPPORTED_GAS_ESTIMATE_CHAIN_IDS.includes(chainId) && + (trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) + ? trade.gasUseEstimateUSD + : dollarGasCost + if (outputDollarValue && dollarCostToUse) { + // the rationale is that a user will not want their trade to fail for a loss due to slippage that is less than + // the cost of the gas of the failed transaction + var fraction = dollarCostToUse.asFraction.divide(outputDollarValue.asFraction) + var result = new sdkCore.Percent(fraction.numerator, fraction.denominator) + if (result.greaterThan(MAX_AUTO_SLIPPAGE_TOLERANCE)) return MAX_AUTO_SLIPPAGE_TOLERANCE + if (result.lessThan(MIN_AUTO_SLIPPAGE_TOLERANCE)) return MIN_AUTO_SLIPPAGE_TOLERANCE + return result + } + return V3_SWAP_DEFAULT_SLIPPAGE + }, + [trade, onL2, nativeGasPrice, gasEstimate, nativeCurrency, nativeCurrencyPrice, chainId, outputDollarValue] + ) } -var initialState$2 = queryParametersToSwapState(parsedQueryString()); -var swap = toolkit.createReducer(initialState$2, function (builder) { - return builder - .addCase(replaceSwapState, function (state, _a) { - var _b; - var _c = _a.payload, typedValue = _c.typedValue, recipient = _c.recipient, field = _c.field, inputCurrencyId = _c.inputCurrencyId, outputCurrencyId = _c.outputCurrencyId; - return _b = {}, - _b[Field.INPUT] = { - currencyId: inputCurrencyId !== null && inputCurrencyId !== void 0 ? inputCurrencyId : null, - }, - _b[Field.OUTPUT] = { - currencyId: outputCurrencyId !== null && outputCurrencyId !== void 0 ? outputCurrencyId : null, - }, - _b.independentField = field, - _b.typedValue = typedValue, - _b.recipient = recipient, - _b; - }) - .addCase(selectCurrency, function (state, _a) { - var _b, _c; - var _d = _a.payload, currencyId = _d.currencyId, field = _d.field; - var otherField = field === Field.INPUT ? Field.OUTPUT : Field.INPUT; - if (currencyId === state[otherField].currencyId) { - // the case where we have to swap the order - return __assign(__assign({}, state), (_b = { independentField: state.independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT }, _b[field] = { currencyId: currencyId }, _b[otherField] = { currencyId: state[field].currencyId }, _b)); - } - else { - // the normal case - return __assign(__assign({}, state), (_c = {}, _c[field] = { currencyId: currencyId }, _c)); - } - }) - .addCase(switchCurrencies, function (state) { - var _a; - return __assign(__assign({}, state), (_a = { independentField: state.independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT }, _a[Field.INPUT] = { currencyId: state[Field.OUTPUT].currencyId }, _a[Field.OUTPUT] = { currencyId: state[Field.INPUT].currencyId }, _a)); - }) - .addCase(typeInput, function (state, _a) { - var _b = _a.payload, field = _b.field, typedValue = _b.typedValue; - return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); - }) - .addCase(setRecipient, function (state, _a) { - var recipient = _a.payload.recipient; - state.recipient = recipient; - }); -}); +/** + * Transforms a Routing API quote into an array of routes that can be used to create + * a `Trade`. + */ +function computeRoutes(currencyIn, currencyOut, tradeType, quoteResult) { + if (!quoteResult || !quoteResult.route || !currencyIn || !currencyOut) return undefined + if (quoteResult.route.length === 0) return [] + var parsedTokenIn = parseToken(quoteResult.route[0][0].tokenIn) + var parsedTokenOut = parseToken(quoteResult.route[0][quoteResult.route[0].length - 1].tokenOut) + if (parsedTokenIn.address !== currencyIn.wrapped.address) return undefined + if (parsedTokenOut.address !== currencyOut.wrapped.address) return undefined + var parsedCurrencyIn = currencyIn.isNative ? nativeOnChain(currencyIn.chainId) : parsedTokenIn + var parsedCurrencyOut = currencyOut.isNative ? nativeOnChain(currencyOut.chainId) : parsedTokenOut + try { + return quoteResult.route.map(function (route) { + if (route.length === 0) { + throw new Error('Expected route to have at least one pair or pool') + } + var rawAmountIn = route[0].amountIn + var rawAmountOut = route[route.length - 1].amountOut + if (!rawAmountIn || !rawAmountOut) { + throw new Error('Expected both amountIn and amountOut to be present') + } + return { + routev3: isV3Route(route) ? new v3Sdk.Route(route.map(parsePool), parsedCurrencyIn, parsedCurrencyOut) : null, + routev2: !isV3Route(route) ? new v2Sdk.Route(route.map(parsePair), parsedCurrencyIn, parsedCurrencyOut) : null, + inputAmount: sdkCore.CurrencyAmount.fromRawAmount(parsedCurrencyIn, rawAmountIn), + outputAmount: sdkCore.CurrencyAmount.fromRawAmount(parsedCurrencyOut, rawAmountOut), + } + }) + } catch (e) { + // `Route` constructor may throw if inputs/outputs are temporarily out of sync + // (RTK-Query always returns the latest data which may not be the right inputs/outputs) + // This is not fatal and will fix itself in future render cycles + console.error(e) + return undefined + } +} +function transformRoutesToTrade(route, tradeType, gasUseEstimateUSD) { + var _a, _b + return new InterfaceTrade({ + v2Routes: + (_a = + route === null || route === void 0 + ? void 0 + : route + .filter(function (r) { + return r.routev2 !== null + }) + .map(function (_a) { + var routev2 = _a.routev2, + inputAmount = _a.inputAmount, + outputAmount = _a.outputAmount + return { routev2, inputAmount, outputAmount } + })) !== null && _a !== void 0 + ? _a + : [], + v3Routes: + (_b = + route === null || route === void 0 + ? void 0 + : route + .filter(function (r) { + return r.routev3 !== null + }) + .map(function (_a) { + var routev3 = _a.routev3, + inputAmount = _a.inputAmount, + outputAmount = _a.outputAmount + return { routev3, inputAmount, outputAmount } + })) !== null && _b !== void 0 + ? _b + : [], + tradeType, + gasUseEstimateUSD, + }) +} +var parseToken = function (_a) { + var address = _a.address, + chainId = _a.chainId, + decimals = _a.decimals, + symbol = _a.symbol + return new sdkCore.Token(chainId, address, parseInt(decimals.toString()), symbol) +} +var parsePool = function (_a) { + var fee = _a.fee, + sqrtRatioX96 = _a.sqrtRatioX96, + liquidity = _a.liquidity, + tickCurrent = _a.tickCurrent, + tokenIn = _a.tokenIn, + tokenOut = _a.tokenOut + return new v3Sdk.Pool( + parseToken(tokenIn), + parseToken(tokenOut), + parseInt(fee), + sqrtRatioX96, + liquidity, + parseInt(tickCurrent) + ) +} +var parsePair = function (_a) { + var reserve0 = _a.reserve0, + reserve1 = _a.reserve1 + return new v2Sdk.Pair( + sdkCore.CurrencyAmount.fromRawAmount(parseToken(reserve0.token), reserve0.quotient), + sdkCore.CurrencyAmount.fromRawAmount(parseToken(reserve1.token), reserve1.quotient) + ) +} +function isV3Route(route) { + return route[0].type === 'v3-pool' +} -var now = function () { return new Date().getTime(); }; -var initialState$1 = {}; -var transactions = toolkit.createReducer(initialState$1, function (builder) { - return builder - .addCase(updateVersion, function (transactions) { - // in case there are any transactions in the store with the old format, remove them - Object.keys(transactions).forEach(function (chainId) { - var chainTransactions = transactions[chainId]; - Object.keys(chainTransactions).forEach(function (hash) { - if (!('info' in chainTransactions[hash])) { - // clear old transactions that don't have the right format - delete chainTransactions[hash]; - } - }); - }); - }) - .addCase(addTransaction, function (transactions, _a) { - var _b, _c; - var _d = _a.payload, chainId = _d.chainId, from = _d.from, hash = _d.hash, info = _d.info; - if ((_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash]) { - throw Error('Attempted to add existing transaction.'); - } - var txs = (_c = transactions[chainId]) !== null && _c !== void 0 ? _c : {}; - txs[hash] = { hash: hash, info: info, from: from, addedTime: now() }; - transactions[chainId] = txs; - }) - .addCase(clearAllTransactions, function (transactions, _a) { - var chainId = _a.payload.chainId; - if (!transactions[chainId]) - return; - transactions[chainId] = {}; - }) - .addCase(checkedTransaction, function (transactions, _a) { - var _b; - var _c = _a.payload, chainId = _c.chainId, hash = _c.hash, blockNumber = _c.blockNumber; - var tx = (_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash]; - if (!tx) { - return; - } - if (!tx.lastCheckedBlockNumber) { - tx.lastCheckedBlockNumber = blockNumber; - } - else { - tx.lastCheckedBlockNumber = Math.max(blockNumber, tx.lastCheckedBlockNumber); - } - }) - .addCase(finalizeTransaction, function (transactions, _a) { - var _b; - var _c = _a.payload, hash = _c.hash, chainId = _c.chainId, receipt = _c.receipt; - var tx = (_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash]; - if (!tx) { - return; - } - tx.receipt = receipt; - tx.confirmedTime = now(); - }); -}); +function useFreshData(data, dataBlockNumber, maxBlockAge) { + if (maxBlockAge === void 0) { + maxBlockAge = 10 + } + var localBlockNumber = useBlockNumber() + if (!localBlockNumber) return undefined + if (localBlockNumber - dataBlockNumber > maxBlockAge) { + return undefined + } + return data +} +/** + * Returns query arguments for the Routing API query or undefined if the + * query should be skipped. + */ +function useRoutingAPIArguments(_a) { + var tokenIn = _a.tokenIn, + tokenOut = _a.tokenOut, + amount = _a.amount, + tradeType = _a.tradeType + var _b = __read(useClientSideRouter(), 1), + clientSideRouter = _b[0] + return React.useMemo( + function () { + return !tokenIn || !tokenOut || !amount || tokenIn.equals(tokenOut) + ? undefined + : { + amount: amount.quotient.toString(), + tokenInAddress: tokenIn.wrapped.address, + tokenInChainId: tokenIn.wrapped.chainId, + tokenInDecimals: tokenIn.wrapped.decimals, + tokenInSymbol: tokenIn.wrapped.symbol, + tokenOutAddress: tokenOut.wrapped.address, + tokenOutChainId: tokenOut.wrapped.chainId, + tokenOutDecimals: tokenOut.wrapped.decimals, + tokenOutSymbol: tokenOut.wrapped.symbol, + useClientSideRouter: clientSideRouter, + type: tradeType === sdkCore.TradeType.EXACT_INPUT ? 'exactIn' : 'exactOut', + } + }, + [amount, clientSideRouter, tokenIn, tokenOut, tradeType] + ) +} +/** + * Returns the best trade by invoking the routing api or the smart order router on the client + * @param tradeType whether the swap is an exact in/out + * @param amountSpecified the exact amount to swap in/out + * @param otherCurrency the desired output/payment currency + */ +function useRoutingAPITrade(tradeType, amountSpecified, otherCurrency) { + var _a + var _b = __read( + React.useMemo( + function () { + return tradeType === sdkCore.TradeType.EXACT_INPUT + ? [ + amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, + otherCurrency, + ] + : [ + otherCurrency, + amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, + ] + }, + [amountSpecified, otherCurrency, tradeType] + ), + 2 + ), + currencyIn = _b[0], + currencyOut = _b[1] + var queryArgs = useRoutingAPIArguments({ + tokenIn: currencyIn, + tokenOut: currencyOut, + amount: amountSpecified, + tradeType, + }) + var _c = useGetQuoteQuery(queryArgs !== null && queryArgs !== void 0 ? queryArgs : react.skipToken, { + pollingInterval: ms__default['default']( + templateObject_1$1a || (templateObject_1$1a = __makeTemplateObject(['15s'], ['15s'])) + ), + refetchOnFocus: true, + }), + isLoading = _c.isLoading, + isError = _c.isError, + data = _c.data + var quoteResult = useFreshData(data, Number(data === null || data === void 0 ? void 0 : data.blockNumber) || 0) + var route = React.useMemo( + function () { + return computeRoutes(currencyIn, currencyOut, tradeType, quoteResult) + }, + [currencyIn, currencyOut, quoteResult, tradeType] + ) + // get USD gas cost of trade in active chains stablecoin amount + var gasUseEstimateUSD = + (_a = useStablecoinAmountFromFiatValue( + quoteResult === null || quoteResult === void 0 ? void 0 : quoteResult.gasUseEstimateUSD + )) !== null && _a !== void 0 + ? _a + : null + return React.useMemo( + function () { + if (!currencyIn || !currencyOut) { + return { + state: TradeState.INVALID, + trade: undefined, + } + } + if (isLoading && !quoteResult) { + // only on first hook render + return { + state: TradeState.LOADING, + trade: undefined, + } + } + var otherAmount = + tradeType === sdkCore.TradeType.EXACT_INPUT + ? currencyOut && quoteResult + ? sdkCore.CurrencyAmount.fromRawAmount(currencyOut, quoteResult.quote) + : undefined + : currencyIn && quoteResult + ? sdkCore.CurrencyAmount.fromRawAmount(currencyIn, quoteResult.quote) + : undefined + if (isError || !otherAmount || !route || route.length === 0 || !queryArgs) { + return { + state: TradeState.NO_ROUTE_FOUND, + trade: undefined, + } + } + try { + var trade = transformRoutesToTrade(route, tradeType, gasUseEstimateUSD) + return { + // always return VALID regardless of isFetching status + state: TradeState.VALID, + trade, + } + } catch (e) { + console.debug('transformRoutesToTrade failed: ', e) + return { state: TradeState.INVALID, trade: undefined } + } + }, + [currencyIn, currencyOut, isLoading, quoteResult, tradeType, isError, route, queryArgs, gasUseEstimateUSD] + ) +} +var templateObject_1$1a -var currentTimestamp = function () { return new Date().getTime(); }; -function pairKey(token0Address, token1Address) { - return token0Address + ";" + token1Address; -} -var initialState = { - matchesDarkMode: false, - userDarkMode: null, - userExpertMode: false, - userLocale: null, - userClientSideRouter: false, - userHideClosedPositions: false, - userSlippageTolerance: 'auto', - userSlippageToleranceHasBeenMigratedToAuto: true, - userDeadline: DEFAULT_DEADLINE_FROM_NOW, - tokens: {}, - pairs: {}, - timestamp: currentTimestamp(), - URLWarningVisible: true, - showSurveyPopup: undefined, -}; -var user = toolkit.createReducer(initialState, function (builder) { - return builder - .addCase(updateVersion, function (state) { - // slippage isnt being tracked in local storage, reset to default - // noinspection SuspiciousTypeOfGuard - if (typeof state.userSlippageTolerance !== 'number' || - !Number.isInteger(state.userSlippageTolerance) || - state.userSlippageTolerance < 0 || - state.userSlippageTolerance > 5000) { - state.userSlippageTolerance = 'auto'; - } - else { - if (!state.userSlippageToleranceHasBeenMigratedToAuto && - [10, 50, 100].indexOf(state.userSlippageTolerance) !== -1) { - state.userSlippageTolerance = 'auto'; - state.userSlippageToleranceHasBeenMigratedToAuto = true; - } - } - // deadline isnt being tracked in local storage, reset to default - // noinspection SuspiciousTypeOfGuard - if (typeof state.userDeadline !== 'number' || - !Number.isInteger(state.userDeadline) || - state.userDeadline < 60 || - state.userDeadline > 180 * 60) { - state.userDeadline = DEFAULT_DEADLINE_FROM_NOW; - } - state.lastUpdateVersionTimestamp = currentTimestamp(); - }) - .addCase(updateUserDarkMode, function (state, action) { - state.userDarkMode = action.payload.userDarkMode; - state.timestamp = currentTimestamp(); - }) - .addCase(updateMatchesDarkMode, function (state, action) { - state.matchesDarkMode = action.payload.matchesDarkMode; - state.timestamp = currentTimestamp(); - }) - .addCase(updateUserExpertMode, function (state, action) { - state.userExpertMode = action.payload.userExpertMode; - state.timestamp = currentTimestamp(); - }) - .addCase(updateUserLocale, function (state, action) { - state.userLocale = action.payload.userLocale; - state.timestamp = currentTimestamp(); - }) - .addCase(updateUserSlippageTolerance, function (state, action) { - state.userSlippageTolerance = action.payload.userSlippageTolerance; - state.timestamp = currentTimestamp(); - }) - .addCase(updateUserDeadline, function (state, action) { - state.userDeadline = action.payload.userDeadline; - state.timestamp = currentTimestamp(); - }) - .addCase(updateUserClientSideRouter, function (state, action) { - state.userClientSideRouter = action.payload.userClientSideRouter; - }) - .addCase(updateHideClosedPositions, function (state, action) { - state.userHideClosedPositions = action.payload.userHideClosedPositions; - }) - .addCase(updateShowSurveyPopup, function (state, action) { - state.showSurveyPopup = action.payload.showSurveyPopup; - }) - .addCase(addSerializedToken, function (state, _a) { - var serializedToken = _a.payload.serializedToken; - if (!state.tokens) { - state.tokens = {}; - } - state.tokens[serializedToken.chainId] = state.tokens[serializedToken.chainId] || {}; - state.tokens[serializedToken.chainId][serializedToken.address] = serializedToken; - state.timestamp = currentTimestamp(); - }) - .addCase(removeSerializedToken, function (state, _a) { - var _b = _a.payload, address = _b.address, chainId = _b.chainId; - if (!state.tokens) { - state.tokens = {}; - } - state.tokens[chainId] = state.tokens[chainId] || {}; - delete state.tokens[chainId][address]; - state.timestamp = currentTimestamp(); - }) - .addCase(addSerializedPair, function (state, _a) { - var serializedPair = _a.payload.serializedPair; - if (serializedPair.token0.chainId === serializedPair.token1.chainId && - serializedPair.token0.address !== serializedPair.token1.address) { - var chainId = serializedPair.token0.chainId; - state.pairs[chainId] = state.pairs[chainId] || {}; - state.pairs[chainId][pairKey(serializedPair.token0.address, serializedPair.token1.address)] = serializedPair; - } - state.timestamp = currentTimestamp(); - }) - .addCase(removeSerializedPair, function (state, _a) { - var _b = _a.payload, chainId = _b.chainId, tokenAAddress = _b.tokenAAddress, tokenBAddress = _b.tokenBAddress; - if (state.pairs[chainId]) { - // just delete both keys if either exists - delete state.pairs[chainId][pairKey(tokenAAddress, tokenBAddress)]; - delete state.pairs[chainId][pairKey(tokenBAddress, tokenAAddress)]; - } - state.timestamp = currentTimestamp(); - }); -}); +var AUTO_ROUTER_SUPPORTED_CHAINS = Object.values(smartOrderRouter.ChainId) -var _a$5; -var PERSISTED_KEYS = ['user', 'transactions', 'lists']; -var store = toolkit.configureStore({ - reducer: (_a$5 = { - application: application, - user: user, - transactions: transactions, - swap: swap, - mint: mint, - mintV3: mintV3, - burn: burn, - burnV3: burnV3, - multicall: multicall.reducer, - lists: lists, - logs: logs - }, - _a$5[api$1.reducerPath] = api$1.reducer, - _a$5[routingApi.reducerPath] = routingApi.reducer, - _a$5), - middleware: function (getDefaultMiddleware) { - return getDefaultMiddleware({ thunk: true }) - .concat(api$1.middleware) - .concat(routingApi.middleware) - .concat(reduxLocalstorageSimple.save({ states: PERSISTED_KEYS, debounce: 1000 })); - }, - preloadedState: reduxLocalstorageSimple.load({ states: PERSISTED_KEYS, disableWarnings: process.env.NODE_ENV === 'test' }), -}); -store.dispatch(updateVersion()); -react.setupListeners(store.dispatch); +function useAutoRouterSupported() { + var chainId = useActiveWeb3React().chainId + return Boolean(chainId && AUTO_ROUTER_SUPPORTED_CHAINS.includes(chainId)) +} -var FallbackWrapper = styled__default["default"].div(templateObject_1$19 || (templateObject_1$19 = __makeTemplateObject(["\n display: flex;\n flex-direction: column;\n width: 100%;\n align-items: center;\n z-index: 1;\n"], ["\n display: flex;\n flex-direction: column;\n width: 100%;\n align-items: center;\n z-index: 1;\n"]))); -var BodyWrapper$2 = styled__default["default"].div(templateObject_2$R || (templateObject_2$R = __makeTemplateObject(["\n padding: 1rem;\n width: 100%;\n white-space: ;\n"], ["\n padding: 1rem;\n width: 100%;\n white-space: ;\n"]))); -var CodeBlockWrapper = styled__default["default"].div(templateObject_3$J || (templateObject_3$J = __makeTemplateObject(["\n background: ", ";\n overflow: auto;\n white-space: pre;\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 border-radius: 24px;\n padding: 18px 24px;\n color: ", ";\n"], ["\n background: ", ";\n overflow: auto;\n white-space: pre;\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 border-radius: 24px;\n padding: 18px 24px;\n color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg0; -}, function (_a) { - var theme = _a.theme; - return theme.text1; -}); -var LinkWrapper = styled__default["default"].div(templateObject_4$y || (templateObject_4$y = __makeTemplateObject(["\n color: ", ";\n padding: 6px 24px;\n"], ["\n color: ", ";\n padding: 6px 24px;\n"])), function (_a) { - var theme = _a.theme; - return theme.blue1; -}); -var SomethingWentWrongWrapper = styled__default["default"].div(templateObject_5$q || (templateObject_5$q = __makeTemplateObject(["\n padding: 6px 24px;\n"], ["\n padding: 6px 24px;\n"]))); -var IS_UNISWAP = window.location.hostname === 'app.uniswap.org'; -var ErrorBoundary = /** @class */ (function (_super) { - __extends(ErrorBoundary, _super); - function ErrorBoundary(props) { - var _this = _super.call(this, props) || this; - _this.state = { error: null }; - return _this; - } - ErrorBoundary.getDerivedStateFromError = function (error) { - return { error: error }; - }; - ErrorBoundary.prototype.componentDidCatch = function (error, errorInfo) { - ReactGA__default["default"].exception(__assign(__assign(__assign({}, error), errorInfo), { fatal: true })); - }; - ErrorBoundary.prototype.render = function () { - var error = this.state.error; - if (error !== null) { - var encodedBody = encodeURIComponent(issueBody(error)); - return (jsxRuntime.jsx(FallbackWrapper, { children: jsxRuntime.jsx(BodyWrapper$2, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: 'md' }, { children: [jsxRuntime.jsx(SomethingWentWrongWrapper, { children: jsxRuntime.jsx(ThemedText.Label, __assign({ fontSize: 24, fontWeight: 600 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Something went wrong" }, void 0) }), void 0) }, void 0), jsxRuntime.jsx(CodeBlockWrapper, { children: jsxRuntime.jsx("code", { children: jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: 10 }, { children: error.stack }), void 0) }, void 0) }, void 0), IS_UNISWAP ? (jsxRuntime.jsxs(AutoRow, { children: [jsxRuntime.jsx(LinkWrapper, { children: jsxRuntime.jsx(ExternalLink, __assign({ id: "create-github-issue-link", href: "https://github.com/Uniswap/uniswap-interface/issues/new?assignees=&labels=bug&body=" + encodedBody + "&title=" + encodeURIComponent("Crash report: `" + error.name + (error.message && ": " + error.message) + "`"), target: "_blank" }, { children: jsxRuntime.jsxs(ThemedText.Link, __assign({ fontSize: 16 }, { children: [jsxRuntime.jsx(macro.Trans, { children: "Create an issue on GitHub" }, void 0), jsxRuntime.jsx("span", { children: "\u2197" }, void 0)] }), void 0) }), void 0) }, void 0), jsxRuntime.jsx(LinkWrapper, { children: jsxRuntime.jsx(ExternalLink, __assign({ id: "get-support-on-discord", href: "https://discord.gg/FCfyBSbCU5", target: "_blank" }, { children: jsxRuntime.jsxs(ThemedText.Link, __assign({ fontSize: 16 }, { children: [jsxRuntime.jsx(macro.Trans, { children: "Get support on Discord" }, void 0), jsxRuntime.jsx("span", { children: "\u2197" }, void 0)] }), void 0) }), void 0) }, void 0)] }, void 0)) : null] }), void 0) }, void 0) }, void 0)); - } - return this.props.children; - }; - return ErrorBoundary; -}(React__default["default"].Component)); -function getRelevantState() { - var path = window.location.hash; - if (!path.startsWith('#/')) { - return null; - } - var pieces = path.substring(2).split(/[/\\?]/); - switch (pieces[0]) { - case 'swap': - return 'swap'; - case 'add': - if (pieces[1] === 'v2') - return 'mint'; - else - return 'mintV3'; - case 'remove': - if (pieces[1] === 'v2') - return 'burn'; - else - return 'burnV3'; - } - return null; -} -function issueBody(error) { - var relevantState = getRelevantState(); - var deviceData = userAgent; - return "## URL\n \n" + window.location.href + "\n\n" + (relevantState - ? "## `" + relevantState + "` state\n \n```json\n" + JSON.stringify(store.getState()[relevantState], null, 2) + "\n```\n" - : '') + "\n" + (error.name && - "## Error\n\n```\n" + error.name + (error.message && ": " + error.message) + "\n```\n") + "\n" + (error.stack && - "## Stacktrace\n\n```\n" + error.stack + "\n```\n") + "\n" + (deviceData && - "## Device data\n\n```json\n" + JSON.stringify(deviceData, null, 2) + "\n```\n") + "\n"; -} -var templateObject_1$19, templateObject_2$R, templateObject_3$J, templateObject_4$y, templateObject_5$q; +/** + * Returns the best v2+v3 trade for a desired swap. + * @param tradeType whether the swap is an exact in/out + * @param amountSpecified the exact amount to swap in/out + * @param otherCurrency the desired output/payment currency + */ +function useBestTrade(tradeType, amountSpecified, otherCurrency) { + var autoRouterSupported = useAutoRouterSupported() + var isWindowVisible = useIsWindowVisible() + var _a = __read( + useDebounce( + React.useMemo( + function () { + return [amountSpecified, otherCurrency] + }, + [amountSpecified, otherCurrency] + ), + 200 + ), + 2 + ), + debouncedAmount = _a[0], + debouncedOtherCurrency = _a[1] + var routingAPITrade = useRoutingAPITrade( + tradeType, + autoRouterSupported && isWindowVisible ? debouncedAmount : undefined, + debouncedOtherCurrency + ) + var isLoading = amountSpecified !== undefined && debouncedAmount === undefined + // consider trade debouncing when inputs/outputs do not match + var debouncing = + routingAPITrade.trade && + amountSpecified && + (tradeType === sdkCore.TradeType.EXACT_INPUT + ? !routingAPITrade.trade.inputAmount.equalTo(amountSpecified) || + !amountSpecified.currency.equals(routingAPITrade.trade.inputAmount.currency) || + !(debouncedOtherCurrency === null || debouncedOtherCurrency === void 0 + ? void 0 + : debouncedOtherCurrency.equals(routingAPITrade.trade.outputAmount.currency)) + : !routingAPITrade.trade.outputAmount.equalTo(amountSpecified) || + !amountSpecified.currency.equals(routingAPITrade.trade.outputAmount.currency) || + !(debouncedOtherCurrency === null || debouncedOtherCurrency === void 0 + ? void 0 + : debouncedOtherCurrency.equals(routingAPITrade.trade.inputAmount.currency))) + var useFallback = !autoRouterSupported || (!debouncing && routingAPITrade.state === TradeState.NO_ROUTE_FOUND) + // only use client side router if routing api trade failed or is not supported + var bestV3Trade = useClientSideV3Trade( + tradeType, + useFallback ? debouncedAmount : undefined, + useFallback ? debouncedOtherCurrency : undefined + ) + // only return gas estimate from api if routing api trade is used + return React.useMemo( + function () { + return __assign( + __assign( + __assign({}, useFallback ? bestV3Trade : routingAPITrade), + debouncing ? { state: TradeState.SYNCING } : {} + ), + isLoading ? { state: TradeState.LOADING } : {} + ) + }, + [bestV3Trade, debouncing, isLoading, routingAPITrade, useFallback] + ) +} -function useModalOpen(modal) { - var openModal = useAppSelector(function (state) { return state.application.openModal; }); - return openModal === modal; -} -function useToggleModal(modal) { - var open = useModalOpen(modal); - var dispatch = useAppDispatch(); - return React.useCallback(function () { return dispatch(setOpenModal(open ? null : modal)); }, [dispatch, modal, open]); -} -function useWalletModalToggle() { - return useToggleModal(ApplicationModal.WALLET); -} -function useToggleSettingsMenu() { - return useToggleModal(ApplicationModal.SETTINGS); -} -function useShowClaimPopup() { - return useModalOpen(ApplicationModal.CLAIM_POPUP); -} -function useToggleShowClaimPopup() { - return useToggleModal(ApplicationModal.CLAIM_POPUP); -} -function useToggleSelfClaimModal() { - return useToggleModal(ApplicationModal.SELF_CLAIM); -} -function useTogglePrivacyPolicy() { - return useToggleModal(ApplicationModal.PRIVACY_POLICY); -} -// returns a function that allows adding a popup -function useAddPopup() { - var dispatch = useAppDispatch(); - return React.useCallback(function (content, key, removeAfterMs) { - dispatch(addPopup({ content: content, key: key, removeAfterMs: removeAfterMs !== null && removeAfterMs !== void 0 ? removeAfterMs : DEFAULT_TXN_DISMISS_MS })); - }, [dispatch]); -} -// returns a function that allows removing a popup via its key -function useRemovePopup() { - var dispatch = useAppDispatch(); - return React.useCallback(function (key) { - dispatch(removePopup({ key: key })); - }, [dispatch]); -} -// get the list of active popups -function useActivePopups() { - var list = useAppSelector(function (state) { return state.application.popupList; }); - return React.useMemo(function () { return list.filter(function (item) { return item.show; }); }, [list]); +// gets the current timestamp from the blockchain +function useCurrentBlockTimestamp() { + var _a, _b + var multicall = useInterfaceMulticall() + return (_b = + (_a = useSingleCallResult(multicall, 'getCurrentBlockTimestamp')) === null || _a === void 0 + ? void 0 + : _a.result) === null || _b === void 0 + ? void 0 + : _b[0] } -var _path$5, _path2$2, _path3$1, _path4, _path5, _path6, _path7, _path8, _path9; +new abi$7.Interface(abi$6) +;({ + 1: [ + { + tokens: [WRAPPED_NATIVE_CURRENCY[1], DAI], + stakingRewardAddress: '0xa1484C3aa22a66C62b77E0AE78E15258bd0cB711', + }, + { + tokens: [WRAPPED_NATIVE_CURRENCY[1], USDC], + stakingRewardAddress: '0x7FBa4B8Dc5E7616e59622806932DBea72537A56b', + }, + { + tokens: [WRAPPED_NATIVE_CURRENCY[1], USDT], + stakingRewardAddress: '0x6C3e4cb2E96B01F4b866965A91ed4437839A121a', + }, + { + tokens: [WRAPPED_NATIVE_CURRENCY[1], WBTC], + stakingRewardAddress: '0xCA35e32e7926b96A9988f61d510E038108d8068e', + }, + ], +}) + +// mimics useAllBalances +function useAllTokenBalances() { + var account = useActiveWeb3React().account + var allTokens = useAllTokens() + var allTokensArray = React.useMemo( + function () { + return Object.values(allTokens !== null && allTokens !== void 0 ? allTokens : {}) + }, + [allTokens] + ) + var balances = useTokenBalances(account !== null && account !== void 0 ? account : undefined, allTokensArray) + return balances !== null && balances !== void 0 ? balances : {} +} -function _extends$7() { _extends$7 = 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$7.apply(this, arguments); } +function useSwapState() { + return useAppSelector(function (state) { + return state.swap + }) +} +function useSwapActionHandlers() { + var dispatch = useAppDispatch() + var onCurrencySelection = React.useCallback( + function (field, currency) { + dispatch( + selectCurrency({ + field, + currencyId: currency.isToken ? currency.address : currency.isNative ? 'ETH' : '', + }) + ) + }, + [dispatch] + ) + var onSwitchTokens = React.useCallback( + function () { + dispatch(switchCurrencies()) + }, + [dispatch] + ) + var onUserInput = React.useCallback( + function (field, typedValue) { + dispatch(typeInput({ field, typedValue })) + }, + [dispatch] + ) + var onChangeRecipient = React.useCallback( + function (recipient) { + dispatch(setRecipient({ recipient })) + }, + [dispatch] + ) + return { + onSwitchTokens, + onCurrencySelection, + onUserInput, + onChangeRecipient, + } +} +var BAD_RECIPIENT_ADDRESSES = { + '0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f': true, + '0xf164fC0Ec4E93095b804a4795bBe1e041497b92a': true, + '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D': true, // v2 router 02 +} +// from the current swap inputs, compute the best trade and return it. +function useDerivedSwapInfo() { + var _a, _b + var account = useActiveWeb3React().account + var _c = useSwapState(), + independentField = _c.independentField, + typedValue = _c.typedValue, + _d = Field.INPUT, + inputCurrencyId = _c[_d].currencyId, + _e = Field.OUTPUT, + outputCurrencyId = _c[_e].currencyId, + recipient = _c.recipient + var inputCurrency = useCurrency(inputCurrencyId) + var outputCurrency = useCurrency(outputCurrencyId) + var recipientLookup = useENS(recipient !== null && recipient !== void 0 ? recipient : undefined) + var to = (_a = recipient === null ? account : recipientLookup.address) !== null && _a !== void 0 ? _a : null + var relevantTokenBalances = useCurrencyBalances( + account !== null && account !== void 0 ? account : undefined, + React.useMemo( + function () { + return [ + inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : undefined, + outputCurrency !== null && outputCurrency !== void 0 ? outputCurrency : undefined, + ] + }, + [inputCurrency, outputCurrency] + ) + ) + var isExactIn = independentField === Field.INPUT + var parsedAmount = React.useMemo( + function () { + var _a + return tryParseCurrencyAmount( + typedValue, + (_a = isExactIn ? inputCurrency : outputCurrency) !== null && _a !== void 0 ? _a : undefined + ) + }, + [inputCurrency, isExactIn, outputCurrency, typedValue] + ) + var trade = useBestTrade( + isExactIn ? sdkCore.TradeType.EXACT_INPUT : sdkCore.TradeType.EXACT_OUTPUT, + parsedAmount, + (_b = isExactIn ? outputCurrency : inputCurrency) !== null && _b !== void 0 ? _b : undefined + ) + var currencyBalances = React.useMemo( + function () { + var _a + return (_a = {}), (_a[Field.INPUT] = relevantTokenBalances[0]), (_a[Field.OUTPUT] = relevantTokenBalances[1]), _a + }, + [relevantTokenBalances] + ) + var currencies = React.useMemo( + function () { + var _a + return (_a = {}), (_a[Field.INPUT] = inputCurrency), (_a[Field.OUTPUT] = outputCurrency), _a + }, + [inputCurrency, outputCurrency] + ) + // allowed slippage is either auto slippage, or custom user defined slippage if auto slippage disabled + var autoSlippageTolerance = useAutoSlippageTolerance(trade.trade) + var allowedSlippage = useUserSlippageToleranceWithDefault(autoSlippageTolerance) + var inputError = React.useMemo( + function () { + var _a + var inputError + if (!account) { + inputError = jsxRuntime.jsx(macro.Trans, { children: 'Connect Wallet' }, void 0) + } + if (!currencies[Field.INPUT] || !currencies[Field.OUTPUT]) { + inputError = + inputError !== null && inputError !== void 0 + ? inputError + : jsxRuntime.jsx(macro.Trans, { children: 'Select a token' }, void 0) + } + if (!parsedAmount) { + inputError = + inputError !== null && inputError !== void 0 + ? inputError + : jsxRuntime.jsx(macro.Trans, { children: 'Enter an amount' }, void 0) + } + var formattedTo = isAddress(to) + if (!to || !formattedTo) { + inputError = + inputError !== null && inputError !== void 0 + ? inputError + : jsxRuntime.jsx(macro.Trans, { children: 'Enter a recipient' }, void 0) + } else { + if (BAD_RECIPIENT_ADDRESSES[formattedTo]) { + inputError = + inputError !== null && inputError !== void 0 + ? inputError + : jsxRuntime.jsx(macro.Trans, { children: 'Invalid recipient' }, void 0) + } + } + // compare input balance to max input based on version + var _b = __read( + [ + currencyBalances[Field.INPUT], + (_a = trade.trade) === null || _a === void 0 ? void 0 : _a.maximumAmountIn(allowedSlippage), + ], + 2 + ), + balanceIn = _b[0], + amountIn = _b[1] + if (balanceIn && amountIn && balanceIn.lessThan(amountIn)) { + inputError = jsxRuntime.jsxs( + macro.Trans, + { children: ['Insufficient ', amountIn.currency.symbol, ' balance'] }, + void 0 + ) + } + return inputError + }, + [account, allowedSlippage, currencies, currencyBalances, parsedAmount, to, trade.trade] + ) + return React.useMemo( + function () { + return { + currencies, + currencyBalances, + parsedAmount, + inputError, + trade, + allowedSlippage, + } + }, + [allowedSlippage, currencies, currencyBalances, inputError, parsedAmount, trade] + ) +} +function parseCurrencyFromURLParameter(urlParam) { + if (typeof urlParam === 'string') { + var valid = isAddress(urlParam) + if (valid) return valid + if (urlParam.toUpperCase() === 'ETH') return 'ETH' + } + return '' +} +function parseTokenAmountURLParameter(urlParam) { + return typeof urlParam === 'string' && !isNaN(parseFloat(urlParam)) ? urlParam : '' +} +function parseIndependentFieldURLParameter(urlParam) { + return typeof urlParam === 'string' && urlParam.toLowerCase() === 'output' ? Field.OUTPUT : Field.INPUT +} +var ENS_NAME_REGEX = /^[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)?$/ +var ADDRESS_REGEX = /^0x[a-fA-F0-9]{40}$/ +function validatedRecipient(recipient) { + if (typeof recipient !== 'string') return null + var address = isAddress(recipient) + if (address) return address + if (ENS_NAME_REGEX.test(recipient)) return recipient + if (ADDRESS_REGEX.test(recipient)) return recipient + return null +} +function queryParametersToSwapState(parsedQs) { + var _a + var inputCurrency = parseCurrencyFromURLParameter(parsedQs.inputCurrency) + var outputCurrency = parseCurrencyFromURLParameter(parsedQs.outputCurrency) + if (inputCurrency === '' && outputCurrency === '') { + // default to ETH input + inputCurrency = 'ETH' + } else if (inputCurrency === outputCurrency) { + // clear output if identical + outputCurrency = '' + } + var recipient = validatedRecipient(parsedQs.recipient) + return ( + (_a = {}), + (_a[Field.INPUT] = { + currencyId: + inputCurrency === '' ? null : inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : null, + }), + (_a[Field.OUTPUT] = { + currencyId: + outputCurrency === '' ? null : outputCurrency !== null && outputCurrency !== void 0 ? outputCurrency : null, + }), + (_a.typedValue = parseTokenAmountURLParameter(parsedQs.exactAmount)), + (_a.independentField = parseIndependentFieldURLParameter(parsedQs.exactField)), + (_a.recipient = recipient), + _a + ) +} +// updates the swap state to use the defaults for a given network +function useDefaultsFromURLSearch() { + var chainId = useActiveWeb3React().chainId + var dispatch = useAppDispatch() + var parsedQs = useParsedQueryString() + var _a = __read(React.useState(), 2), + result = _a[0], + setResult = _a[1] + React.useEffect( + function () { + var _a, _b + if (!chainId) return + var parsed = queryParametersToSwapState(parsedQs) + var inputCurrencyId = (_a = parsed[Field.INPUT].currencyId) !== null && _a !== void 0 ? _a : undefined + var outputCurrencyId = (_b = parsed[Field.OUTPUT].currencyId) !== null && _b !== void 0 ? _b : undefined + dispatch( + replaceSwapState({ + typedValue: parsed.typedValue, + field: parsed.independentField, + inputCurrencyId, + outputCurrencyId, + recipient: parsed.recipient, + }) + ) + setResult({ inputCurrencyId, outputCurrencyId }) + // eslint-disable-next-line react-hooks/exhaustive-deps + }, + [dispatch, chainId] + ) + return result +} -var SvgLogo = function SvgLogo(props) { - return /*#__PURE__*/React__namespace.createElement("svg", _extends$7({ - width: 14, - height: 15, - viewBox: "0 0 14 15", - fill: "black", - xmlns: "http://www.w3.org/2000/svg" - }, props), /*#__PURE__*/React__namespace.createElement("g", { - style: { - mixBlendMode: "darken" +var initialState$2 = queryParametersToSwapState(parsedQueryString()) +var swap = toolkit.createReducer(initialState$2, function (builder) { + return builder + .addCase(replaceSwapState, function (state, _a) { + var _b + var _c = _a.payload, + typedValue = _c.typedValue, + recipient = _c.recipient, + field = _c.field, + inputCurrencyId = _c.inputCurrencyId, + outputCurrencyId = _c.outputCurrencyId + return ( + (_b = {}), + (_b[Field.INPUT] = { + currencyId: inputCurrencyId !== null && inputCurrencyId !== void 0 ? inputCurrencyId : null, + }), + (_b[Field.OUTPUT] = { + currencyId: outputCurrencyId !== null && outputCurrencyId !== void 0 ? outputCurrencyId : null, + }), + (_b.independentField = field), + (_b.typedValue = typedValue), + (_b.recipient = recipient), + _b + ) + }) + .addCase(selectCurrency, function (state, _a) { + var _b, _c + var _d = _a.payload, + currencyId = _d.currencyId, + field = _d.field + var otherField = field === Field.INPUT ? Field.OUTPUT : Field.INPUT + if (currencyId === state[otherField].currencyId) { + // the case where we have to swap the order + return __assign( + __assign({}, state), + ((_b = { independentField: state.independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT }), + (_b[field] = { currencyId }), + (_b[otherField] = { currencyId: state[field].currencyId }), + _b) + ) + } else { + // the normal case + return __assign(__assign({}, state), ((_c = {}), (_c[field] = { currencyId }), _c)) + } + }) + .addCase(switchCurrencies, function (state) { + var _a + return __assign( + __assign({}, state), + ((_a = { independentField: state.independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT }), + (_a[Field.INPUT] = { currencyId: state[Field.OUTPUT].currencyId }), + (_a[Field.OUTPUT] = { currencyId: state[Field.INPUT].currencyId }), + _a) + ) + }) + .addCase(typeInput, function (state, _a) { + var _b = _a.payload, + field = _b.field, + typedValue = _b.typedValue + return __assign(__assign({}, state), { independentField: field, typedValue }) + }) + .addCase(setRecipient, function (state, _a) { + var recipient = _a.payload.recipient + state.recipient = recipient + }) +}) + +var now = function () { + return new Date().getTime() +} +var initialState$1 = {} +var transactions = toolkit.createReducer(initialState$1, function (builder) { + return builder + .addCase(updateVersion, function (transactions) { + // in case there are any transactions in the store with the old format, remove them + Object.keys(transactions).forEach(function (chainId) { + var chainTransactions = transactions[chainId] + Object.keys(chainTransactions).forEach(function (hash) { + if (!('info' in chainTransactions[hash])) { + // clear old transactions that don't have the right format + delete chainTransactions[hash] + } + }) + }) + }) + .addCase(addTransaction, function (transactions, _a) { + var _b, _c + var _d = _a.payload, + chainId = _d.chainId, + from = _d.from, + hash = _d.hash, + info = _d.info + if ((_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash]) { + throw Error('Attempted to add existing transaction.') + } + var txs = (_c = transactions[chainId]) !== null && _c !== void 0 ? _c : {} + txs[hash] = { hash, info, from, addedTime: now() } + transactions[chainId] = txs + }) + .addCase(clearAllTransactions, function (transactions, _a) { + var chainId = _a.payload.chainId + if (!transactions[chainId]) return + transactions[chainId] = {} + }) + .addCase(checkedTransaction, function (transactions, _a) { + var _b + var _c = _a.payload, + chainId = _c.chainId, + hash = _c.hash, + blockNumber = _c.blockNumber + var tx = (_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash] + if (!tx) { + return + } + if (!tx.lastCheckedBlockNumber) { + tx.lastCheckedBlockNumber = blockNumber + } else { + tx.lastCheckedBlockNumber = Math.max(blockNumber, tx.lastCheckedBlockNumber) + } + }) + .addCase(finalizeTransaction, function (transactions, _a) { + var _b + var _c = _a.payload, + hash = _c.hash, + chainId = _c.chainId, + receipt = _c.receipt + var tx = (_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash] + if (!tx) { + return + } + tx.receipt = receipt + tx.confirmedTime = now() + }) +}) + +var currentTimestamp = function () { + return new Date().getTime() +} +function pairKey(token0Address, token1Address) { + return token0Address + ';' + token1Address +} +var initialState = { + matchesDarkMode: false, + userDarkMode: null, + userExpertMode: false, + userLocale: null, + userClientSideRouter: false, + userHideClosedPositions: false, + userSlippageTolerance: 'auto', + userSlippageToleranceHasBeenMigratedToAuto: true, + userDeadline: DEFAULT_DEADLINE_FROM_NOW, + tokens: {}, + pairs: {}, + timestamp: currentTimestamp(), + URLWarningVisible: true, + showSurveyPopup: undefined, +} +var user = toolkit.createReducer(initialState, function (builder) { + return builder + .addCase(updateVersion, function (state) { + // slippage isnt being tracked in local storage, reset to default + // noinspection SuspiciousTypeOfGuard + if ( + typeof state.userSlippageTolerance !== 'number' || + !Number.isInteger(state.userSlippageTolerance) || + state.userSlippageTolerance < 0 || + state.userSlippageTolerance > 5000 + ) { + state.userSlippageTolerance = 'auto' + } else { + if ( + !state.userSlippageToleranceHasBeenMigratedToAuto && + [10, 50, 100].indexOf(state.userSlippageTolerance) !== -1 + ) { + state.userSlippageTolerance = 'auto' + state.userSlippageToleranceHasBeenMigratedToAuto = true + } + } + // deadline isnt being tracked in local storage, reset to default + // noinspection SuspiciousTypeOfGuard + if ( + typeof state.userDeadline !== 'number' || + !Number.isInteger(state.userDeadline) || + state.userDeadline < 60 || + state.userDeadline > 180 * 60 + ) { + state.userDeadline = DEFAULT_DEADLINE_FROM_NOW + } + state.lastUpdateVersionTimestamp = currentTimestamp() + }) + .addCase(updateUserDarkMode, function (state, action) { + state.userDarkMode = action.payload.userDarkMode + state.timestamp = currentTimestamp() + }) + .addCase(updateMatchesDarkMode, function (state, action) { + state.matchesDarkMode = action.payload.matchesDarkMode + state.timestamp = currentTimestamp() + }) + .addCase(updateUserExpertMode, function (state, action) { + state.userExpertMode = action.payload.userExpertMode + state.timestamp = currentTimestamp() + }) + .addCase(updateUserLocale, function (state, action) { + state.userLocale = action.payload.userLocale + state.timestamp = currentTimestamp() + }) + .addCase(updateUserSlippageTolerance, function (state, action) { + state.userSlippageTolerance = action.payload.userSlippageTolerance + state.timestamp = currentTimestamp() + }) + .addCase(updateUserDeadline, function (state, action) { + state.userDeadline = action.payload.userDeadline + state.timestamp = currentTimestamp() + }) + .addCase(updateUserClientSideRouter, function (state, action) { + state.userClientSideRouter = action.payload.userClientSideRouter + }) + .addCase(updateHideClosedPositions, function (state, action) { + state.userHideClosedPositions = action.payload.userHideClosedPositions + }) + .addCase(updateShowSurveyPopup, function (state, action) { + state.showSurveyPopup = action.payload.showSurveyPopup + }) + .addCase(addSerializedToken, function (state, _a) { + var serializedToken = _a.payload.serializedToken + if (!state.tokens) { + state.tokens = {} + } + state.tokens[serializedToken.chainId] = state.tokens[serializedToken.chainId] || {} + state.tokens[serializedToken.chainId][serializedToken.address] = serializedToken + state.timestamp = currentTimestamp() + }) + .addCase(removeSerializedToken, function (state, _a) { + var _b = _a.payload, + address = _b.address, + chainId = _b.chainId + if (!state.tokens) { + state.tokens = {} + } + state.tokens[chainId] = state.tokens[chainId] || {} + delete state.tokens[chainId][address] + state.timestamp = currentTimestamp() + }) + .addCase(addSerializedPair, function (state, _a) { + var serializedPair = _a.payload.serializedPair + if ( + serializedPair.token0.chainId === serializedPair.token1.chainId && + serializedPair.token0.address !== serializedPair.token1.address + ) { + var chainId = serializedPair.token0.chainId + state.pairs[chainId] = state.pairs[chainId] || {} + state.pairs[chainId][pairKey(serializedPair.token0.address, serializedPair.token1.address)] = serializedPair + } + state.timestamp = currentTimestamp() + }) + .addCase(removeSerializedPair, function (state, _a) { + var _b = _a.payload, + chainId = _b.chainId, + tokenAAddress = _b.tokenAAddress, + tokenBAddress = _b.tokenBAddress + if (state.pairs[chainId]) { + // just delete both keys if either exists + delete state.pairs[chainId][pairKey(tokenAAddress, tokenBAddress)] + delete state.pairs[chainId][pairKey(tokenBAddress, tokenAAddress)] + } + state.timestamp = currentTimestamp() + }) +}) + +var _a$5 +var PERSISTED_KEYS = ['user', 'transactions', 'lists'] +var store = toolkit.configureStore({ + reducer: + ((_a$5 = { + application, + user, + transactions, + swap, + mint, + mintV3, + burn, + burnV3, + multicall: multicall.reducer, + lists, + logs, + }), + (_a$5[api$1.reducerPath] = api$1.reducer), + (_a$5[routingApi.reducerPath] = routingApi.reducer), + _a$5), + middleware(getDefaultMiddleware) { + return getDefaultMiddleware({ thunk: true }) + .concat(api$1.middleware) + .concat(routingApi.middleware) + .concat(reduxLocalstorageSimple.save({ states: PERSISTED_KEYS, debounce: 1000 })) + }, + preloadedState: reduxLocalstorageSimple.load({ + states: PERSISTED_KEYS, + disableWarnings: process.env.NODE_ENV === 'test', + }), +}) +store.dispatch(updateVersion()) +react.setupListeners(store.dispatch) + +var FallbackWrapper = styled__default['default'].div( + templateObject_1$19 || + (templateObject_1$19 = __makeTemplateObject( + ['\n display: flex;\n flex-direction: column;\n width: 100%;\n align-items: center;\n z-index: 1;\n'], + ['\n display: flex;\n flex-direction: column;\n width: 100%;\n align-items: center;\n z-index: 1;\n'] + )) +) +var BodyWrapper$2 = styled__default['default'].div( + templateObject_2$R || + (templateObject_2$R = __makeTemplateObject( + ['\n padding: 1rem;\n width: 100%;\n white-space: ;\n'], + ['\n padding: 1rem;\n width: 100%;\n white-space: ;\n'] + )) +) +var CodeBlockWrapper = styled__default['default'].div( + templateObject_3$J || + (templateObject_3$J = __makeTemplateObject( + [ + '\n background: ', + ';\n overflow: auto;\n white-space: pre;\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 border-radius: 24px;\n padding: 18px 24px;\n color: ', + ';\n', + ], + [ + '\n background: ', + ';\n overflow: auto;\n white-space: pre;\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 border-radius: 24px;\n padding: 18px 24px;\n color: ', + ';\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.bg0 + }, + function (_a) { + var theme = _a.theme + return theme.text1 + } +) +var LinkWrapper = styled__default['default'].div( + templateObject_4$y || + (templateObject_4$y = __makeTemplateObject( + ['\n color: ', ';\n padding: 6px 24px;\n'], + ['\n color: ', ';\n padding: 6px 24px;\n'] + )), + function (_a) { + var theme = _a.theme + return theme.blue1 + } +) +var SomethingWentWrongWrapper = styled__default['default'].div( + templateObject_5$q || + (templateObject_5$q = __makeTemplateObject(['\n padding: 6px 24px;\n'], ['\n padding: 6px 24px;\n'])) +) +var IS_UNISWAP = window.location.hostname === 'app.uniswap.org' +var ErrorBoundary = /** @class */ (function (_super) { + __extends(ErrorBoundary, _super) + function ErrorBoundary(props) { + var _this = _super.call(this, props) || this + _this.state = { error: null } + return _this + } + ErrorBoundary.getDerivedStateFromError = function (error) { + return { error } + } + ErrorBoundary.prototype.componentDidCatch = function (error, errorInfo) { + ReactGA__default['default'].exception(__assign(__assign(__assign({}, error), errorInfo), { fatal: true })) + } + ErrorBoundary.prototype.render = function () { + var error = this.state.error + if (error !== null) { + var encodedBody = encodeURIComponent(issueBody(error)) + return jsxRuntime.jsx( + FallbackWrapper, + { + children: jsxRuntime.jsx( + BodyWrapper$2, + { + children: jsxRuntime.jsxs( + AutoColumn, + __assign( + { gap: 'md' }, + { + children: [ + jsxRuntime.jsx( + SomethingWentWrongWrapper, + { + children: jsxRuntime.jsx( + ThemedText.Label, + __assign( + { fontSize: 24, fontWeight: 600 }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'Something went wrong' }, void 0) } + ), + void 0 + ), + }, + void 0 + ), + jsxRuntime.jsx( + CodeBlockWrapper, + { + children: jsxRuntime.jsx( + 'code', + { + children: jsxRuntime.jsx( + ThemedText.Main, + __assign({ fontSize: 10 }, { children: error.stack }), + void 0 + ), + }, + void 0 + ), + }, + void 0 + ), + IS_UNISWAP + ? jsxRuntime.jsxs( + AutoRow, + { + children: [ + jsxRuntime.jsx( + LinkWrapper, + { + children: jsxRuntime.jsx( + ExternalLink, + __assign( + { + id: 'create-github-issue-link', + href: + 'https://github.com/Uniswap/uniswap-interface/issues/new?assignees=&labels=bug&body=' + + encodedBody + + '&title=' + + encodeURIComponent( + 'Crash report: `' + + error.name + + (error.message && ': ' + error.message) + + '`' + ), + target: '_blank', + }, + { + children: jsxRuntime.jsxs( + ThemedText.Link, + __assign( + { fontSize: 16 }, + { + children: [ + jsxRuntime.jsx( + macro.Trans, + { children: 'Create an issue on GitHub' }, + void 0 + ), + jsxRuntime.jsx('span', { children: '\u2197' }, void 0), + ], + } + ), + void 0 + ), + } + ), + void 0 + ), + }, + void 0 + ), + jsxRuntime.jsx( + LinkWrapper, + { + children: jsxRuntime.jsx( + ExternalLink, + __assign( + { + id: 'get-support-on-discord', + href: 'https://discord.gg/FCfyBSbCU5', + target: '_blank', + }, + { + children: jsxRuntime.jsxs( + ThemedText.Link, + __assign( + { fontSize: 16 }, + { + children: [ + jsxRuntime.jsx( + macro.Trans, + { children: 'Get support on Discord' }, + void 0 + ), + jsxRuntime.jsx('span', { children: '\u2197' }, void 0), + ], + } + ), + void 0 + ), + } + ), + void 0 + ), + }, + void 0 + ), + ], + }, + void 0 + ) + : null, + ], + } + ), + void 0 + ), + }, + void 0 + ), + }, + void 0 + ) } - }, _path$5 || (_path$5 = /*#__PURE__*/React__namespace.createElement("path", { - d: "M4.15217 1.55141C3.96412 1.52242 3.95619 1.51902 4.04468 1.5055C4.21427 1.47958 4.61472 1.51491 4.89067 1.58012C5.53489 1.73232 6.12109 2.12221 6.74683 2.81466L6.91307 2.99862L7.15088 2.96062C8.15274 2.8006 9.17194 2.92778 10.0244 3.31918C10.2589 3.42686 10.6287 3.64121 10.6749 3.69629C10.6896 3.71384 10.7166 3.82684 10.7349 3.94742C10.7982 4.36458 10.7665 4.68434 10.6382 4.92317C10.5683 5.05313 10.5644 5.09432 10.6114 5.20554C10.6489 5.2943 10.7534 5.35999 10.8569 5.35985C11.0687 5.35956 11.2968 5.0192 11.4024 4.54561L11.4444 4.3575L11.5275 4.45109C11.9835 4.96459 12.3417 5.66488 12.4032 6.16335L12.4192 6.29332L12.3426 6.17517C12.2107 5.97186 12.0781 5.83346 11.9084 5.72183C11.6024 5.52062 11.2789 5.45215 10.4222 5.40727C9.64839 5.36675 9.21045 5.30106 8.77621 5.16032C8.03738 4.9209 7.66493 4.60204 6.78729 3.4576C6.39748 2.94928 6.15654 2.66804 5.91687 2.44155C5.37228 1.92691 4.83716 1.65701 4.15217 1.55141Z" - })), _path2$2 || (_path2$2 = /*#__PURE__*/React__namespace.createElement("path", { - d: "M10.8494 2.68637C10.8689 2.34575 10.9153 2.12108 11.0088 1.9159C11.0458 1.83469 11.0804 1.76822 11.0858 1.76822C11.0911 1.76822 11.075 1.82816 11.05 1.90142C10.9821 2.10054 10.9709 2.3729 11.0177 2.68978C11.0771 3.09184 11.1109 3.14985 11.5385 3.58416C11.739 3.78788 11.9723 4.0448 12.0568 4.15511L12.2106 4.35568L12.0568 4.21234C11.8688 4.03705 11.4364 3.6952 11.3409 3.64633C11.2768 3.61356 11.2673 3.61413 11.2278 3.65321C11.1914 3.68922 11.1837 3.74333 11.1787 3.99915C11.1708 4.39786 11.1161 4.65377 10.9842 4.90965C10.9128 5.04805 10.9015 5.01851 10.9661 4.8623C11.0143 4.74566 11.0192 4.69439 11.0189 4.30842C11.0181 3.53291 10.9255 3.34647 10.3823 3.02709C10.2447 2.94618 10.0179 2.8295 9.87839 2.76778C9.73887 2.70606 9.62805 2.6523 9.63208 2.64828C9.64746 2.63307 10.1772 2.78675 10.3905 2.86828C10.7077 2.98954 10.76 3.00526 10.7985 2.99063C10.8244 2.98082 10.8369 2.90608 10.8494 2.68637Z" - })), _path3$1 || (_path3$1 = /*#__PURE__*/React__namespace.createElement("path", { - d: "M4.51745 4.01304C4.13569 3.49066 3.89948 2.68973 3.95062 2.091L3.96643 1.90572L4.05333 1.92148C4.21652 1.95106 4.49789 2.05515 4.62964 2.13469C4.9912 2.35293 5.14773 2.64027 5.30697 3.37811C5.35362 3.59423 5.41482 3.8388 5.44298 3.9216C5.48831 4.05487 5.65962 4.36617 5.7989 4.56834C5.89922 4.71395 5.83258 4.78295 5.61082 4.76305C5.27215 4.73267 4.8134 4.41799 4.51745 4.01304Z" - })), _path4 || (_path4 = /*#__PURE__*/React__namespace.createElement("path", { - d: "M10.3863 7.90088C8.60224 7.18693 7.97389 6.56721 7.97389 5.52157C7.97389 5.36769 7.97922 5.24179 7.98571 5.24179C7.99221 5.24179 8.06124 5.29257 8.1391 5.35465C8.50088 5.64305 8.906 5.76623 10.0275 5.92885C10.6875 6.02455 11.0589 6.10185 11.4015 6.21477C12.4904 6.57371 13.1641 7.30212 13.3248 8.29426C13.3715 8.58255 13.3441 9.12317 13.2684 9.4081C13.2087 9.63315 13.0263 10.0388 12.9779 10.0544C12.9645 10.0587 12.9514 10.0076 12.9479 9.93809C12.9296 9.56554 12.7402 9.20285 12.4221 8.93116C12.0604 8.62227 11.5745 8.37633 10.3863 7.90088Z" - })), _path5 || (_path5 = /*#__PURE__*/React__namespace.createElement("path", { - d: "M9.13385 8.19748C9.11149 8.06527 9.07272 7.89643 9.04769 7.82228L9.00217 7.68748L9.08672 7.7818C9.20374 7.91233 9.2962 8.07937 9.37457 8.30185C9.43438 8.47165 9.44111 8.52215 9.44066 8.79807C9.4402 9.06896 9.43273 9.12575 9.3775 9.27858C9.29042 9.51959 9.18233 9.69048 9.00097 9.87391C8.67507 10.2036 8.25607 10.3861 7.65143 10.4618C7.54633 10.4749 7.24 10.4971 6.97069 10.511C6.292 10.5461 5.84531 10.6186 5.44393 10.7587C5.38623 10.7788 5.3347 10.7911 5.32947 10.7859C5.31323 10.7698 5.58651 10.6079 5.81223 10.4998C6.1305 10.3474 6.44733 10.2643 7.15719 10.1468C7.50785 10.0887 7.86998 10.0183 7.96194 9.99029C8.83033 9.72566 9.27671 9.04276 9.13385 8.19748Z" - })), _path6 || (_path6 = /*#__PURE__*/React__namespace.createElement("path", { - d: "M9.95169 9.64109C9.71465 9.13463 9.66022 8.64564 9.79009 8.18961C9.80399 8.14088 9.82632 8.101 9.83976 8.101C9.85319 8.101 9.90913 8.13105 9.96404 8.16777C10.0733 8.24086 10.2924 8.36395 10.876 8.68023C11.6043 9.0749 12.0196 9.3805 12.302 9.72965C12.5493 10.0354 12.7023 10.3837 12.776 10.8084C12.8177 11.0489 12.7932 11.6277 12.7311 11.8699C12.5353 12.6337 12.0802 13.2336 11.4311 13.5837C11.336 13.635 11.2506 13.6771 11.2414 13.6773C11.2321 13.6775 11.2668 13.5899 11.3184 13.4827C11.5367 13.029 11.5616 12.5877 11.3965 12.0965C11.2954 11.7957 11.0893 11.4287 10.6732 10.8084C10.1893 10.0873 10.0707 9.89539 9.95169 9.64109Z" - })), _path7 || (_path7 = /*#__PURE__*/React__namespace.createElement("path", { - d: "M3.25046 12.3737C3.91252 11.8181 4.73629 11.4234 5.48666 11.3022C5.81005 11.25 6.34877 11.2707 6.64823 11.3469C7.12824 11.469 7.55763 11.7425 7.78094 12.0683C7.99918 12.3867 8.09281 12.6642 8.19029 13.2816C8.22875 13.5252 8.27057 13.7697 8.28323 13.8251C8.35644 14.1451 8.4989 14.4008 8.67544 14.5293C8.95583 14.7333 9.43865 14.7459 9.91362 14.5618C9.99423 14.5305 10.0642 14.5089 10.0691 14.5138C10.0864 14.5308 9.84719 14.6899 9.67847 14.7737C9.45143 14.8864 9.2709 14.93 9.03102 14.93C8.59601 14.93 8.23486 14.7101 7.9335 14.2616C7.87419 14.1733 7.7409 13.909 7.63729 13.6741C7.3191 12.9528 7.16199 12.7331 6.79255 12.4926C6.47104 12.2834 6.05641 12.2459 5.74449 12.3979C5.33475 12.5976 5.22043 13.118 5.51389 13.4478C5.63053 13.5789 5.84803 13.6919 6.02588 13.7139C6.35861 13.7551 6.64455 13.5035 6.64455 13.1696C6.64455 12.9528 6.56071 12.8291 6.34966 12.7344C6.0614 12.6051 5.75156 12.7562 5.75304 13.0254C5.75368 13.1402 5.80396 13.2122 5.91971 13.2643C5.99397 13.2977 5.99569 13.3003 5.93514 13.2878C5.67066 13.2333 5.6087 12.9164 5.82135 12.706C6.07667 12.4535 6.60461 12.5649 6.78591 12.9097C6.86208 13.0545 6.87092 13.3429 6.80451 13.517C6.6559 13.9068 6.22256 14.1117 5.78297 14.0002C5.48368 13.9242 5.36181 13.842 5.00097 13.4726C4.37395 12.8306 4.13053 12.7062 3.22657 12.566L3.05335 12.5391L3.25046 12.3737Z" - })), _path8 || (_path8 = /*#__PURE__*/React__namespace.createElement("path", { - fillRule: "evenodd", - clipRule: "evenodd", - d: "M0.308383 0.883984C2.40235 3.40996 3.84457 4.45213 4.00484 4.67231C4.13717 4.85412 4.08737 5.01757 3.86067 5.14567C3.7346 5.21689 3.47541 5.28905 3.34564 5.28905C3.19887 5.28905 3.14847 5.23278 3.14847 5.23278C3.06337 5.15255 3.01544 5.16658 2.5784 4.39555C1.97166 3.45981 1.46389 2.68357 1.45004 2.67057C1.41801 2.64052 1.41856 2.64153 2.51654 4.59413C2.69394 5.0011 2.55182 5.15049 2.55182 5.20845C2.55182 5.32636 2.51946 5.38834 2.37311 5.55059C2.12914 5.8211 2.02008 6.12505 1.94135 6.7541C1.8531 7.45926 1.60492 7.95737 0.917156 8.80989C0.514562 9.30893 0.448686 9.4004 0.3471 9.60153C0.219144 9.85482 0.183961 9.99669 0.169701 10.3165C0.154629 10.6547 0.183983 10.8732 0.287934 11.1965C0.378939 11.4796 0.473932 11.6665 0.716778 12.0403C0.926351 12.3629 1.04702 12.6027 1.04702 12.6965C1.04702 12.7711 1.06136 12.7712 1.38611 12.6983C2.16328 12.5239 2.79434 12.2171 3.14925 11.8411C3.36891 11.6084 3.42048 11.4799 3.42215 11.1611C3.42325 10.9525 3.41587 10.9088 3.35914 10.7888C3.2668 10.5935 3.09869 10.4311 2.72817 10.1794C2.2427 9.84953 2.03534 9.58398 1.97807 9.21878C1.93108 8.91913 1.98559 8.70771 2.25416 8.14825C2.53214 7.56916 2.60103 7.32239 2.64763 6.73869C2.67773 6.36158 2.71941 6.21286 2.82842 6.09348C2.94212 5.969 3.04447 5.92684 3.32584 5.88863C3.78457 5.82635 4.07667 5.70839 4.31677 5.48849C4.52505 5.29772 4.61221 5.11391 4.62558 4.8372L4.63574 4.62747L4.51934 4.49259C4.09783 4.00411 0.0261003 0.5 0.000160437 0.5C-0.00538105 0.5 0.133325 0.672804 0.308383 0.883984ZM1.28364 10.6992C1.37894 10.5314 1.3283 10.3158 1.16889 10.2104C1.01827 10.1109 0.78428 10.1578 0.78428 10.2875C0.78428 10.3271 0.806303 10.3559 0.855937 10.3813C0.939514 10.424 0.945581 10.4721 0.879823 10.5703C0.81323 10.6698 0.818604 10.7573 0.894991 10.8167C1.0181 10.9125 1.19237 10.8598 1.28364 10.6992Z" - })), _path9 || (_path9 = /*#__PURE__*/React__namespace.createElement("path", { - fillRule: "evenodd", - clipRule: "evenodd", - d: "M4.92523 5.99865C4.70988 6.06439 4.50054 6.29124 4.43574 6.5291C4.39621 6.67421 4.41864 6.92875 4.47785 7.00736C4.57351 7.13433 4.66602 7.16778 4.91651 7.16603C5.40693 7.16263 5.83327 6.95358 5.88284 6.69224C5.92347 6.47801 5.73622 6.18112 5.4783 6.05078C5.34521 5.98355 5.06217 5.95688 4.92523 5.99865ZM5.49853 6.44422C5.57416 6.33741 5.54107 6.22198 5.41245 6.14391C5.1675 5.99525 4.79708 6.11827 4.79708 6.34826C4.79708 6.46274 4.99025 6.58765 5.16731 6.58765C5.28516 6.58765 5.44644 6.5178 5.49853 6.44422Z" - })))); -}; -var UNISWAP_LOGO_URL = "data:image/svg+xml,%3Csvg%20width%3D%2214%22%20height%3D%2215%22%20viewBox%3D%220%200%2014%2015%22%20fill%3D%22black%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20style%3D%22mix-blend-mode%3Adarken%22%3E%3Cpath%20d%3D%22M4.15217%201.55141C3.96412%201.52242%203.95619%201.51902%204.04468%201.5055C4.21427%201.47958%204.61472%201.51491%204.89067%201.58012C5.53489%201.73232%206.12109%202.12221%206.74683%202.81466L6.91307%202.99862L7.15088%202.96062C8.15274%202.8006%209.17194%202.92778%2010.0244%203.31918C10.2589%203.42686%2010.6287%203.64121%2010.6749%203.69629C10.6896%203.71384%2010.7166%203.82684%2010.7349%203.94742C10.7982%204.36458%2010.7665%204.68434%2010.6382%204.92317C10.5683%205.05313%2010.5644%205.09432%2010.6114%205.20554C10.6489%205.2943%2010.7534%205.35999%2010.8569%205.35985C11.0687%205.35956%2011.2968%205.0192%2011.4024%204.54561L11.4444%204.3575L11.5275%204.45109C11.9835%204.96459%2012.3417%205.66488%2012.4032%206.16335L12.4192%206.29332L12.3426%206.17517C12.2107%205.97186%2012.0781%205.83346%2011.9084%205.72183C11.6024%205.52062%2011.2789%205.45215%2010.4222%205.40727C9.64839%205.36675%209.21045%205.30106%208.77621%205.16032C8.03738%204.9209%207.66493%204.60204%206.78729%203.4576C6.39748%202.94928%206.15654%202.66804%205.91687%202.44155C5.37228%201.92691%204.83716%201.65701%204.15217%201.55141Z%22%2F%3E%3Cpath%20d%3D%22M10.8494%202.68637C10.8689%202.34575%2010.9153%202.12108%2011.0088%201.9159C11.0458%201.83469%2011.0804%201.76822%2011.0858%201.76822C11.0911%201.76822%2011.075%201.82816%2011.05%201.90142C10.9821%202.10054%2010.9709%202.3729%2011.0177%202.68978C11.0771%203.09184%2011.1109%203.14985%2011.5385%203.58416C11.739%203.78788%2011.9723%204.0448%2012.0568%204.15511L12.2106%204.35568L12.0568%204.21234C11.8688%204.03705%2011.4364%203.6952%2011.3409%203.64633C11.2768%203.61356%2011.2673%203.61413%2011.2278%203.65321C11.1914%203.68922%2011.1837%203.74333%2011.1787%203.99915C11.1708%204.39786%2011.1161%204.65377%2010.9842%204.90965C10.9128%205.04805%2010.9015%205.01851%2010.9661%204.8623C11.0143%204.74566%2011.0192%204.69439%2011.0189%204.30842C11.0181%203.53291%2010.9255%203.34647%2010.3823%203.02709C10.2447%202.94618%2010.0179%202.8295%209.87839%202.76778C9.73887%202.70606%209.62805%202.6523%209.63208%202.64828C9.64746%202.63307%2010.1772%202.78675%2010.3905%202.86828C10.7077%202.98954%2010.76%203.00526%2010.7985%202.99063C10.8244%202.98082%2010.8369%202.90608%2010.8494%202.68637Z%22%2F%3E%3Cpath%20d%3D%22M4.51745%204.01304C4.13569%203.49066%203.89948%202.68973%203.95062%202.091L3.96643%201.90572L4.05333%201.92148C4.21652%201.95106%204.49789%202.05515%204.62964%202.13469C4.9912%202.35293%205.14773%202.64027%205.30697%203.37811C5.35362%203.59423%205.41482%203.8388%205.44298%203.9216C5.48831%204.05487%205.65962%204.36617%205.7989%204.56834C5.89922%204.71395%205.83258%204.78295%205.61082%204.76305C5.27215%204.73267%204.8134%204.41799%204.51745%204.01304Z%22%2F%3E%3Cpath%20d%3D%22M10.3863%207.90088C8.60224%207.18693%207.97389%206.56721%207.97389%205.52157C7.97389%205.36769%207.97922%205.24179%207.98571%205.24179C7.99221%205.24179%208.06124%205.29257%208.1391%205.35465C8.50088%205.64305%208.906%205.76623%2010.0275%205.92885C10.6875%206.02455%2011.0589%206.10185%2011.4015%206.21477C12.4904%206.57371%2013.1641%207.30212%2013.3248%208.29426C13.3715%208.58255%2013.3441%209.12317%2013.2684%209.4081C13.2087%209.63315%2013.0263%2010.0388%2012.9779%2010.0544C12.9645%2010.0587%2012.9514%2010.0076%2012.9479%209.93809C12.9296%209.56554%2012.7402%209.20285%2012.4221%208.93116C12.0604%208.62227%2011.5745%208.37633%2010.3863%207.90088Z%22%2F%3E%3Cpath%20d%3D%22M9.13385%208.19748C9.11149%208.06527%209.07272%207.89643%209.04769%207.82228L9.00217%207.68748L9.08672%207.7818C9.20374%207.91233%209.2962%208.07937%209.37457%208.30185C9.43438%208.47165%209.44111%208.52215%209.44066%208.79807C9.4402%209.06896%209.43273%209.12575%209.3775%209.27858C9.29042%209.51959%209.18233%209.69048%209.00097%209.87391C8.67507%2010.2036%208.25607%2010.3861%207.65143%2010.4618C7.54633%2010.4749%207.24%2010.4971%206.97069%2010.511C6.292%2010.5461%205.84531%2010.6186%205.44393%2010.7587C5.38623%2010.7788%205.3347%2010.7911%205.32947%2010.7859C5.31323%2010.7698%205.58651%2010.6079%205.81223%2010.4998C6.1305%2010.3474%206.44733%2010.2643%207.15719%2010.1468C7.50785%2010.0887%207.86998%2010.0183%207.96194%209.99029C8.83033%209.72566%209.27671%209.04276%209.13385%208.19748Z%22%2F%3E%3Cpath%20d%3D%22M9.95169%209.64109C9.71465%209.13463%209.66022%208.64564%209.79009%208.18961C9.80399%208.14088%209.82632%208.101%209.83976%208.101C9.85319%208.101%209.90913%208.13105%209.96404%208.16777C10.0733%208.24086%2010.2924%208.36395%2010.876%208.68023C11.6043%209.0749%2012.0196%209.3805%2012.302%209.72965C12.5493%2010.0354%2012.7023%2010.3837%2012.776%2010.8084C12.8177%2011.0489%2012.7932%2011.6277%2012.7311%2011.8699C12.5353%2012.6337%2012.0802%2013.2336%2011.4311%2013.5837C11.336%2013.635%2011.2506%2013.6771%2011.2414%2013.6773C11.2321%2013.6775%2011.2668%2013.5899%2011.3184%2013.4827C11.5367%2013.029%2011.5616%2012.5877%2011.3965%2012.0965C11.2954%2011.7957%2011.0893%2011.4287%2010.6732%2010.8084C10.1893%2010.0873%2010.0707%209.89539%209.95169%209.64109Z%22%2F%3E%3Cpath%20d%3D%22M3.25046%2012.3737C3.91252%2011.8181%204.73629%2011.4234%205.48666%2011.3022C5.81005%2011.25%206.34877%2011.2707%206.64823%2011.3469C7.12824%2011.469%207.55763%2011.7425%207.78094%2012.0683C7.99918%2012.3867%208.09281%2012.6642%208.19029%2013.2816C8.22875%2013.5252%208.27057%2013.7697%208.28323%2013.8251C8.35644%2014.1451%208.4989%2014.4008%208.67544%2014.5293C8.95583%2014.7333%209.43865%2014.7459%209.91362%2014.5618C9.99423%2014.5305%2010.0642%2014.5089%2010.0691%2014.5138C10.0864%2014.5308%209.84719%2014.6899%209.67847%2014.7737C9.45143%2014.8864%209.2709%2014.93%209.03102%2014.93C8.59601%2014.93%208.23486%2014.7101%207.9335%2014.2616C7.87419%2014.1733%207.7409%2013.909%207.63729%2013.6741C7.3191%2012.9528%207.16199%2012.7331%206.79255%2012.4926C6.47104%2012.2834%206.05641%2012.2459%205.74449%2012.3979C5.33475%2012.5976%205.22043%2013.118%205.51389%2013.4478C5.63053%2013.5789%205.84803%2013.6919%206.02588%2013.7139C6.35861%2013.7551%206.64455%2013.5035%206.64455%2013.1696C6.64455%2012.9528%206.56071%2012.8291%206.34966%2012.7344C6.0614%2012.6051%205.75156%2012.7562%205.75304%2013.0254C5.75368%2013.1402%205.80396%2013.2122%205.91971%2013.2643C5.99397%2013.2977%205.99569%2013.3003%205.93514%2013.2878C5.67066%2013.2333%205.6087%2012.9164%205.82135%2012.706C6.07667%2012.4535%206.60461%2012.5649%206.78591%2012.9097C6.86208%2013.0545%206.87092%2013.3429%206.80451%2013.517C6.6559%2013.9068%206.22256%2014.1117%205.78297%2014.0002C5.48368%2013.9242%205.36181%2013.842%205.00097%2013.4726C4.37395%2012.8306%204.13053%2012.7062%203.22657%2012.566L3.05335%2012.5391L3.25046%2012.3737Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M0.308383%200.883984C2.40235%203.40996%203.84457%204.45213%204.00484%204.67231C4.13717%204.85412%204.08737%205.01757%203.86067%205.14567C3.7346%205.21689%203.47541%205.28905%203.34564%205.28905C3.19887%205.28905%203.14847%205.23278%203.14847%205.23278C3.06337%205.15255%203.01544%205.16658%202.5784%204.39555C1.97166%203.45981%201.46389%202.68357%201.45004%202.67057C1.41801%202.64052%201.41856%202.64153%202.51654%204.59413C2.69394%205.0011%202.55182%205.15049%202.55182%205.20845C2.55182%205.32636%202.51946%205.38834%202.37311%205.55059C2.12914%205.8211%202.02008%206.12505%201.94135%206.7541C1.8531%207.45926%201.60492%207.95737%200.917156%208.80989C0.514562%209.30893%200.448686%209.4004%200.3471%209.60153C0.219144%209.85482%200.183961%209.99669%200.169701%2010.3165C0.154629%2010.6547%200.183983%2010.8732%200.287934%2011.1965C0.378939%2011.4796%200.473932%2011.6665%200.716778%2012.0403C0.926351%2012.3629%201.04702%2012.6027%201.04702%2012.6965C1.04702%2012.7711%201.06136%2012.7712%201.38611%2012.6983C2.16328%2012.5239%202.79434%2012.2171%203.14925%2011.8411C3.36891%2011.6084%203.42048%2011.4799%203.42215%2011.1611C3.42325%2010.9525%203.41587%2010.9088%203.35914%2010.7888C3.2668%2010.5935%203.09869%2010.4311%202.72817%2010.1794C2.2427%209.84953%202.03534%209.58398%201.97807%209.21878C1.93108%208.91913%201.98559%208.70771%202.25416%208.14825C2.53214%207.56916%202.60103%207.32239%202.64763%206.73869C2.67773%206.36158%202.71941%206.21286%202.82842%206.09348C2.94212%205.969%203.04447%205.92684%203.32584%205.88863C3.78457%205.82635%204.07667%205.70839%204.31677%205.48849C4.52505%205.29772%204.61221%205.11391%204.62558%204.8372L4.63574%204.62747L4.51934%204.49259C4.09783%204.00411%200.0261003%200.5%200.000160437%200.5C-0.00538105%200.5%200.133325%200.672804%200.308383%200.883984ZM1.28364%2010.6992C1.37894%2010.5314%201.3283%2010.3158%201.16889%2010.2104C1.01827%2010.1109%200.78428%2010.1578%200.78428%2010.2875C0.78428%2010.3271%200.806303%2010.3559%200.855937%2010.3813C0.939514%2010.424%200.945581%2010.4721%200.879823%2010.5703C0.81323%2010.6698%200.818604%2010.7573%200.894991%2010.8167C1.0181%2010.9125%201.19237%2010.8598%201.28364%2010.6992Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M4.92523%205.99865C4.70988%206.06439%204.50054%206.29124%204.43574%206.5291C4.39621%206.67421%204.41864%206.92875%204.47785%207.00736C4.57351%207.13433%204.66602%207.16778%204.91651%207.16603C5.40693%207.16263%205.83327%206.95358%205.88284%206.69224C5.92347%206.47801%205.73622%206.18112%205.4783%206.05078C5.34521%205.98355%205.06217%205.95688%204.92523%205.99865ZM5.49853%206.44422C5.57416%206.33741%205.54107%206.22198%205.41245%206.14391C5.1675%205.99525%204.79708%206.11827%204.79708%206.34826C4.79708%206.46274%204.99025%206.58765%205.16731%206.58765C5.28516%206.58765%205.44644%206.5178%205.49853%206.44422Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"; - -var ContentWrapper$3 = styled__default["default"](AutoColumn)(templateObject_1$18 || (templateObject_1$18 = __makeTemplateObject(["\n width: 100%;\n"], ["\n width: 100%;\n"]))); -var ModalUpper = styled__default["default"](DataCard)(templateObject_2$Q || (templateObject_2$Q = __makeTemplateObject(["\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n"], ["\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n"]))); -var ConfirmOrLoadingWrapper = styled__default["default"].div(templateObject_3$I || (templateObject_3$I = __makeTemplateObject(["\n width: 100%;\n padding: 24px;\n position: relative;\n background: ", ";\n"], ["\n width: 100%;\n padding: 24px;\n position: relative;\n background: ", ";\n"])), function (_a) { - var activeBG = _a.activeBG; - return activeBG && - 'radial-gradient(76.02% 75.41% at 1.84% 0%, rgba(255, 0, 122, 0.2) 0%, rgba(33, 114, 229, 0.2) 100%), #FFFFFF;'; -}); -var ConfirmedIcon$1 = styled__default["default"](ColumnCenter)(templateObject_4$x || (templateObject_4$x = __makeTemplateObject(["\n padding: 60px 0;\n"], ["\n padding: 60px 0;\n"]))); -var SOCKS_AMOUNT = 1000; -var USER_AMOUNT = 400; -function ClaimModal() { - var _a, _b, _c, _d, _e, _f, _g; - var isOpen = useModalOpen(ApplicationModal.SELF_CLAIM); - var toggleClaimModal = useToggleSelfClaimModal(); - var _h = useActiveWeb3React(), account = _h.account, chainId = _h.chainId; - // used for UI loading states - var _j = __read(React.useState(false), 2), attempting = _j[0], setAttempting = _j[1]; - // get user claim data - var userClaimData = useUserClaimData(account); - // monitor the status of the claim from contracts and txns - var claimCallback = useClaimCallback(account).claimCallback; - var unclaimedAmount = useUserUnclaimedAmount(account); - var _k = useUserHasSubmittedClaim(account !== null && account !== void 0 ? account : undefined), claimSubmitted = _k.claimSubmitted, claimTxn = _k.claimTxn; - var claimConfirmed = Boolean(claimTxn === null || claimTxn === void 0 ? void 0 : claimTxn.receipt); - function onClaim() { - setAttempting(true); - claimCallback() - // reset modal and log error - .catch(function (error) { - setAttempting(false); - console.log(error); - }); - } - // once confirmed txn is found, if modal is closed open, mark as not attempting regradless - React.useEffect(function () { - if (claimConfirmed && claimSubmitted && attempting) { - setAttempting(false); - if (!isOpen) { - toggleClaimModal(); - } - } - }, [attempting, claimConfirmed, claimSubmitted, isOpen, toggleClaimModal]); - var nonLPAmount = JSBI__default["default"].multiply(JSBI__default["default"].BigInt((((_a = userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.flags) === null || _a === void 0 ? void 0 : _a.isSOCKS) ? SOCKS_AMOUNT : 0) + (((_b = userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.flags) === null || _b === void 0 ? void 0 : _b.isUser) ? USER_AMOUNT : 0)), JSBI__default["default"].exponentiate(JSBI__default["default"].BigInt(10), JSBI__default["default"].BigInt(18))); - return (jsxRuntime.jsxs(Modal, __assign({ isOpen: isOpen, onDismiss: toggleClaimModal, maxHeight: 90 }, { children: [jsxRuntime.jsx(Confetti, { start: Boolean(isOpen && claimConfirmed) }, void 0), !attempting && !claimConfirmed && (jsxRuntime.jsxs(ContentWrapper$3, __assign({ gap: "lg" }, { children: [jsxRuntime.jsxs(ModalUpper, { children: [jsxRuntime.jsx(CardBGImage, {}, void 0), jsxRuntime.jsx(CardNoise, {}, void 0), jsxRuntime.jsxs(CardSection, __assign({ gap: "md" }, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(ThemedText.White, __assign({ fontWeight: 500 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Claim UNI" }, void 0) }), void 0), jsxRuntime.jsx(CloseIcon$2, { onClick: toggleClaimModal, style: { zIndex: 99 }, color: "white" }, void 0)] }, void 0), jsxRuntime.jsx(ThemedText.White, __assign({ fontWeight: 700, fontSize: 36 }, { children: jsxRuntime.jsxs(macro.Trans, { children: [unclaimedAmount === null || unclaimedAmount === void 0 ? void 0 : unclaimedAmount.toFixed(0, (_c = { groupSeparator: ',' }) !== null && _c !== void 0 ? _c : '-'), " UNI"] }, void 0) }), void 0)] }), void 0), jsxRuntime.jsx(Break$1, {}, void 0), jsxRuntime.jsxs(CardSection, __assign({ gap: "sm" }, { children: [((_d = userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.flags) === null || _d === void 0 ? void 0 : _d.isSOCKS) && (jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(ThemedText.SubHeader, __assign({ color: "white" }, { children: "SOCKS" }), void 0), jsxRuntime.jsx(ThemedText.SubHeader, __assign({ color: "white" }, { children: jsxRuntime.jsxs(macro.Trans, { children: [SOCKS_AMOUNT, " UNI"] }, void 0) }), void 0)] }, void 0)), ((_e = userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.flags) === null || _e === void 0 ? void 0 : _e.isLP) && - unclaimedAmount && - JSBI__default["default"].greaterThanOrEqual(unclaimedAmount.quotient, nonLPAmount) && (jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(ThemedText.SubHeader, __assign({ color: "white" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Liquidity" }, void 0) }), void 0), jsxRuntime.jsx(ThemedText.SubHeader, __assign({ color: "white" }, { children: jsxRuntime.jsxs(macro.Trans, { children: [unclaimedAmount - .subtract(sdkCore.CurrencyAmount.fromRawAmount(unclaimedAmount.currency, nonLPAmount)) - .toFixed(0, { groupSeparator: ',' }), ' ', "UNI"] }, void 0) }), void 0)] }, void 0)), ((_f = userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.flags) === null || _f === void 0 ? void 0 : _f.isUser) && (jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(ThemedText.SubHeader, __assign({ color: "white" }, { children: jsxRuntime.jsx(macro.Trans, { children: "User" }, void 0) }), void 0), jsxRuntime.jsx(ThemedText.SubHeader, __assign({ color: "white" }, { children: jsxRuntime.jsxs(macro.Trans, { children: [USER_AMOUNT, " UNI"] }, void 0) }), void 0)] }, void 0))] }), void 0)] }, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "md", style: { padding: '1rem', paddingTop: '0' }, justify: "center" }, { children: [jsxRuntime.jsx(ThemedText.SubHeader, __assign({ fontWeight: 500 }, { children: jsxRuntime.jsxs(macro.Trans, { children: ["As a member of the Uniswap community you may claim UNI to be used for voting and governance.", jsxRuntime.jsx("br", {}, void 0), jsxRuntime.jsx("br", {}, void 0), jsxRuntime.jsx(ExternalLink, __assign({ href: "https://uniswap.org/blog/uni" }, { children: "Read more about UNI" }), void 0)] }, void 0) }), void 0), jsxRuntime.jsx(ButtonPrimary, __assign({ disabled: !address.isAddress(account !== null && account !== void 0 ? account : ''), padding: "16px 16px", width: "100%", "$borderRadius": "12px", mt: "1rem", onClick: onClaim }, { children: jsxRuntime.jsx(macro.Trans, { children: "Claim UNI" }, void 0) }), void 0)] }), void 0)] }), void 0)), (attempting || claimConfirmed) && (jsxRuntime.jsxs(ConfirmOrLoadingWrapper, __assign({ activeBG: true }, { children: [jsxRuntime.jsx(CardNoise, {}, void 0), jsxRuntime.jsx(CardBGImageSmaller, { desaturate: true }, void 0), jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx("div", {}, void 0), jsxRuntime.jsx(CloseIcon$2, { onClick: toggleClaimModal, style: { zIndex: 99 }, stroke: "black" }, void 0)] }, void 0), jsxRuntime.jsx(ConfirmedIcon$1, { children: !claimConfirmed ? (jsxRuntime.jsx(CustomLightSpinner, { src: Circle$1, alt: "loader", size: '90px' }, void 0)) : (jsxRuntime.jsx(UniTokenAnimated, { width: "72px", src: tokenLogo, alt: "UNI" }, void 0)) }, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "100px", justify: 'center' }, { children: [jsxRuntime.jsxs(AutoColumn, __assign({ gap: "12px", justify: 'center' }, { children: [jsxRuntime.jsx(ThemedText.LargeHeader, __assign({ fontWeight: 600, color: "black" }, { children: claimConfirmed ? jsxRuntime.jsx(macro.Trans, { children: "Claimed!" }, void 0) : jsxRuntime.jsx(macro.Trans, { children: "Claiming" }, void 0) }), void 0), !claimConfirmed && (jsxRuntime.jsx(rebass.Text, __assign({ fontSize: 36, color: '#ff007a', fontWeight: 800 }, { children: jsxRuntime.jsxs(macro.Trans, { children: [unclaimedAmount === null || unclaimedAmount === void 0 ? void 0 : unclaimedAmount.toFixed(0, (_g = { groupSeparator: ',' }) !== null && _g !== void 0 ? _g : '-'), " UNI"] }, void 0) }), void 0))] }), void 0), claimConfirmed && (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsx(ThemedText.SubHeader, __assign({ fontWeight: 500, color: "black" }, { children: jsxRuntime.jsxs(macro.Trans, { children: [jsxRuntime.jsxs("span", __assign({ role: "img", "aria-label": "party-hat" }, { children: ["\uD83C\uDF89", ' '] }), void 0), "Welcome to team Unicorn :)", ' ', jsxRuntime.jsx("span", __assign({ role: "img", "aria-label": "party-hat" }, { children: "\uD83C\uDF89" }), void 0)] }, void 0) }), void 0) }, void 0)), attempting && !claimSubmitted && (jsxRuntime.jsx(ThemedText.SubHeader, __assign({ color: "black" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Confirm this transaction in your wallet" }, void 0) }), void 0)), attempting && claimSubmitted && !claimConfirmed && chainId && (claimTxn === null || claimTxn === void 0 ? void 0 : claimTxn.hash) && (jsxRuntime.jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, claimTxn === null || claimTxn === void 0 ? void 0 : claimTxn.hash, ExplorerDataType.TRANSACTION), style: { zIndex: 99 } }, { children: jsxRuntime.jsx(macro.Trans, { children: "View transaction on Explorer" }, void 0) }), void 0))] }), void 0)] }), void 0))] }), void 0)); -} -var templateObject_1$18, templateObject_2$Q, templateObject_3$I, templateObject_4$x; + return this.props.children + } + return ErrorBoundary +})(React__default['default'].Component) +function getRelevantState() { + var path = window.location.hash + if (!path.startsWith('#/')) { + return null + } + var pieces = path.substring(2).split(/[/\\?]/) + switch (pieces[0]) { + case 'swap': + return 'swap' + case 'add': + if (pieces[1] === 'v2') return 'mint' + else return 'mintV3' + case 'remove': + if (pieces[1] === 'v2') return 'burn' + else return 'burnV3' + } + return null +} +function issueBody(error) { + var relevantState = getRelevantState() + var deviceData = userAgent + return ( + '## URL\n \n' + + window.location.href + + '\n\n' + + (relevantState + ? '## `' + + relevantState + + '` state\n \n```json\n' + + JSON.stringify(store.getState()[relevantState], null, 2) + + '\n```\n' + : '') + + '\n' + + (error.name && '## Error\n\n```\n' + error.name + (error.message && ': ' + error.message) + '\n```\n') + + '\n' + + (error.stack && '## Stacktrace\n\n```\n' + error.stack + '\n```\n') + + '\n' + + (deviceData && '## Device data\n\n```json\n' + JSON.stringify(deviceData, null, 2) + '\n```\n') + + '\n' + ) +} +var templateObject_1$19, templateObject_2$R, templateObject_3$J, templateObject_4$y, templateObject_5$q -var Card = styled__default["default"](styledComponents.Box)(templateObject_1$17 || (templateObject_1$17 = __makeTemplateObject(["\n width: ", ";\n padding: ", ";\n border-radius: ", ";\n border: ", ";\n"], ["\n width: ", ";\n padding: ", ";\n border-radius: ", ";\n border: ", ";\n"])), function (_a) { - var width = _a.width; - return width !== null && width !== void 0 ? width : '100%'; -}, function (_a) { - var padding = _a.padding; - return padding !== null && padding !== void 0 ? padding : '1rem'; -}, function (_a) { - var $borderRadius = _a.$borderRadius; - return $borderRadius !== null && $borderRadius !== void 0 ? $borderRadius : '16px'; -}, function (_a) { - var border = _a.border; - return border; -}); -var LightCard = styled__default["default"](Card)(templateObject_2$P || (templateObject_2$P = __makeTemplateObject(["\n border: 1px solid ", ";\n background-color: ", ";\n"], ["\n border: 1px solid ", ";\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}); -var LightGreyCard = styled__default["default"](Card)(templateObject_3$H || (templateObject_3$H = __makeTemplateObject(["\n background-color: ", ";\n"], ["\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}); -var GreyCard = styled__default["default"](Card)(templateObject_4$w || (templateObject_4$w = __makeTemplateObject(["\n background-color: ", ";\n"], ["\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg3; -}); -var DarkGreyCard = styled__default["default"](Card)(templateObject_5$p || (templateObject_5$p = __makeTemplateObject(["\n background-color: ", ";\n"], ["\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}); -styled__default["default"](Card)(templateObject_6$k || (templateObject_6$k = __makeTemplateObject(["\n background-color: ", ";\n"], ["\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg0; -}); -var OutlineCard = styled__default["default"](Card)(templateObject_7$h || (templateObject_7$h = __makeTemplateObject(["\n border: 1px solid ", ";\n"], ["\n border: 1px solid ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg3; -}); -styled__default["default"](Card)(templateObject_8$f || (templateObject_8$f = __makeTemplateObject(["\n background-color: rgba(243, 132, 30, 0.05);\n color: ", ";\n font-weight: 500;\n"], ["\n background-color: rgba(243, 132, 30, 0.05);\n color: ", ";\n font-weight: 500;\n"])), function (_a) { - var theme = _a.theme; - return theme.yellow3; -}); -styled__default["default"](Card)(templateObject_9$e || (templateObject_9$e = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n border-radius: 12px;\n"], ["\n background-color: ", ";\n color: ", ";\n border-radius: 12px;\n"])), function (_a) { - var theme = _a.theme; - return theme.primary5; -}, function (_a) { - var theme = _a.theme; - return theme.blue2; -}); -var templateObject_1$17, templateObject_2$P, templateObject_3$H, templateObject_4$w, templateObject_5$p, templateObject_6$k, templateObject_7$h, templateObject_8$f, templateObject_9$e; +function useModalOpen(modal) { + var openModal = useAppSelector(function (state) { + return state.application.openModal + }) + return openModal === modal +} +function useToggleModal(modal) { + var open = useModalOpen(modal) + var dispatch = useAppDispatch() + return React.useCallback( + function () { + return dispatch(setOpenModal(open ? null : modal)) + }, + [dispatch, modal, open] + ) +} +function useWalletModalToggle() { + return useToggleModal(ApplicationModal.WALLET) +} +function useToggleSettingsMenu() { + return useToggleModal(ApplicationModal.SETTINGS) +} +function useShowClaimPopup() { + return useModalOpen(ApplicationModal.CLAIM_POPUP) +} +function useToggleShowClaimPopup() { + return useToggleModal(ApplicationModal.CLAIM_POPUP) +} +function useToggleSelfClaimModal() { + return useToggleModal(ApplicationModal.SELF_CLAIM) +} +function useTogglePrivacyPolicy() { + return useToggleModal(ApplicationModal.PRIVACY_POLICY) +} +// returns a function that allows adding a popup +function useAddPopup() { + var dispatch = useAppDispatch() + return React.useCallback( + function (content, key, removeAfterMs) { + dispatch( + addPopup({ + content, + key, + removeAfterMs: removeAfterMs !== null && removeAfterMs !== void 0 ? removeAfterMs : DEFAULT_TXN_DISMISS_MS, + }) + ) + }, + [dispatch] + ) +} +// returns a function that allows removing a popup via its key +function useRemovePopup() { + var dispatch = useAppDispatch() + return React.useCallback( + function (key) { + dispatch(removePopup({ key })) + }, + [dispatch] + ) +} +// get the list of active popups +function useActivePopups() { + var list = useAppSelector(function (state) { + return state.application.popupList + }) + return React.useMemo( + function () { + return list.filter(function (item) { + return item.show + }) + }, + [list] + ) +} -var Wrapper$h = styled__default["default"].div(templateObject_1$16 || (templateObject_1$16 = __makeTemplateObject(["\n max-height: 70vh;\n overflow: auto;\n padding: 0 1rem;\n"], ["\n max-height: 70vh;\n overflow: auto;\n padding: 0 1rem;\n"]))); -var StyledExternalCard = styled__default["default"](Card)(templateObject_2$O || (templateObject_2$O = __makeTemplateObject(["\n background-color: ", ";\n padding: 0.5rem;\n width: 100%;\n\n :hover,\n :focus,\n :active {\n background-color: ", ";\n }\n"], ["\n background-color: ", ";\n padding: 0.5rem;\n width: 100%;\n\n :hover,\n :focus,\n :active {\n background-color: ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.primary5; -}, function (_a) { - var theme = _a.theme; - return theme.primary4; -}); -var HoverText$1 = styled__default["default"].div(templateObject_3$G || (templateObject_3$G = __makeTemplateObject(["\n text-decoration: none;\n color: ", ";\n display: flex;\n align-items: center;\n\n :hover {\n cursor: pointer;\n }\n"], ["\n text-decoration: none;\n color: ", ";\n display: flex;\n align-items: center;\n\n :hover {\n cursor: pointer;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.text1; -}); -var StyledLinkOut = styled__default["default"](reactFeather.ArrowDown)(templateObject_4$v || (templateObject_4$v = __makeTemplateObject(["\n transform: rotate(230deg);\n"], ["\n transform: rotate(230deg);\n"]))); -var EXTERNAL_APIS = [ - { - name: 'Auto Router', - description: jsxRuntime.jsx(macro.Trans, { children: "The app fetches the optimal trade route from a Uniswap Labs server." }, void 0), - }, - { - name: 'Infura', - description: jsxRuntime.jsx(macro.Trans, { children: "The app fetches on-chain data and constructs contract calls with an Infura API." }, void 0), - }, - { - name: 'TRM Labs', - description: (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(macro.Trans, { children: "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons." }, void 0), ' ', jsxRuntime.jsx(ExternalLink, __assign({ href: "https://help.uniswap.org/en/articles/5675203-terms-of-service-faq" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Learn more" }, void 0) }), void 0)] }, void 0)), - }, - { - name: 'Google Analytics', - description: jsxRuntime.jsx(macro.Trans, { children: "The app logs anonymized usage statistics in order to improve over time." }, void 0), - }, - { - name: 'The Graph', - description: jsxRuntime.jsx(macro.Trans, { children: "The app fetches blockchain data from The Graph\u2019s hosted service." }, void 0), - }, -]; -function PrivacyPolicyModal() { - var node = React.useRef(); - var open = useModalOpen(ApplicationModal.PRIVACY_POLICY); - var toggle = useTogglePrivacyPolicy(); - React.useEffect(function () { - if (!open) - return; - ReactGA__default["default"].event({ - category: 'Modal', - action: 'Show Legal', - }); - }, [open]); - return (jsxRuntime.jsx(Modal, __assign({ isOpen: open, onDismiss: function () { return toggle(); } }, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "12px", ref: node }, { children: [jsxRuntime.jsxs(RowBetween, __assign({ padding: "1rem 1rem 0.5rem 1rem" }, { children: [jsxRuntime.jsx(ThemedText.MediumHeader, { children: jsxRuntime.jsx(macro.Trans, { children: "Legal & Privacy" }, void 0) }, void 0), jsxRuntime.jsx(HoverText$1, __assign({ onClick: function () { return toggle(); } }, { children: jsxRuntime.jsx(reactFeather.X, { size: 24 }, void 0) }), void 0)] }), void 0), jsxRuntime.jsx(PrivacyPolicy, {}, void 0)] }), void 0) }), void 0)); -} -function PrivacyPolicy() { - return (jsxRuntime.jsx(Wrapper$h, __assign({ draggable: "true", onTouchMove: function (e) { - // prevent modal gesture handler from dismissing modal when content is scrolling - if (isMobile) { - e.stopPropagation(); - } - } }, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "16px" }, { children: [jsxRuntime.jsxs(AutoColumn, __assign({ gap: "8px", style: { width: '100%' } }, { children: [jsxRuntime.jsx(StyledExternalCard, { children: jsxRuntime.jsx(ExternalLink, __assign({ href: 'https://uniswap.org/terms-of-service' }, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsxs(AutoRow, __assign({ gap: "4px" }, { children: [jsxRuntime.jsx(reactFeather.Info, { size: 20 }, void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: 14, color: 'primaryText1' }, { children: jsxRuntime.jsx(macro.Trans, { children: "Uniswap Labs' Terms of Service" }, void 0) }), void 0)] }), void 0), jsxRuntime.jsx(StyledLinkOut, { size: 20 }, void 0)] }, void 0) }), void 0) }, void 0), jsxRuntime.jsx(StyledExternalCard, { children: jsxRuntime.jsx(ExternalLink, __assign({ href: 'https://uniswap.org/disclaimer/' }, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsxs(AutoRow, __assign({ gap: "4px" }, { children: [jsxRuntime.jsx(reactFeather.Info, { size: 20 }, void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: 14, color: 'primaryText1' }, { children: jsxRuntime.jsx(macro.Trans, { children: "Protocol Disclaimer" }, void 0) }), void 0)] }), void 0), jsxRuntime.jsx(StyledLinkOut, { size: 20 }, void 0)] }, void 0) }), void 0) }, void 0)] }), void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: 14 }, { children: jsxRuntime.jsx(macro.Trans, { children: "This app uses the following third-party APIs:" }, void 0) }), void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "12px" }, { children: [EXTERNAL_APIS.map(function (_a, i) { - var name = _a.name, description = _a.description; - return (jsxRuntime.jsx(DarkGreyCard, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "8px" }, { children: [jsxRuntime.jsxs(AutoRow, __assign({ gap: "4px" }, { children: [jsxRuntime.jsx(reactFeather.Info, { size: 18 }, void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: 14, color: 'text1' }, { children: name }), void 0)] }), void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: 14 }, { children: description }), void 0)] }), void 0) }, i)); - }), jsxRuntime.jsx(Row$1, __assign({ justify: "center", marginBottom: "1rem" }, { children: jsxRuntime.jsx(ExternalLink, __assign({ href: "https://help.uniswap.org/en/articles/5675203-terms-of-service-faq" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Learn more" }, void 0) }), void 0) }), void 0)] }), void 0)] }), void 0) }), void 0)); -} -var templateObject_1$16, templateObject_2$O, templateObject_3$G, templateObject_4$v; +var _path$5, _path2$2, _path3$1, _path4, _path5, _path6, _path7, _path8, _path9 + +function _extends$7() { + _extends$7 = + 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$7.apply(this, arguments) +} + +var SvgLogo = function SvgLogo(props) { + return /*#__PURE__*/ React__namespace.createElement( + 'svg', + _extends$7( + { + width: 14, + height: 15, + viewBox: '0 0 14 15', + fill: 'black', + xmlns: 'http://www.w3.org/2000/svg', + }, + props + ), + /*#__PURE__*/ React__namespace.createElement( + 'g', + { + style: { + mixBlendMode: 'darken', + }, + }, + _path$5 || + (_path$5 = /*#__PURE__*/ React__namespace.createElement('path', { + d: 'M4.15217 1.55141C3.96412 1.52242 3.95619 1.51902 4.04468 1.5055C4.21427 1.47958 4.61472 1.51491 4.89067 1.58012C5.53489 1.73232 6.12109 2.12221 6.74683 2.81466L6.91307 2.99862L7.15088 2.96062C8.15274 2.8006 9.17194 2.92778 10.0244 3.31918C10.2589 3.42686 10.6287 3.64121 10.6749 3.69629C10.6896 3.71384 10.7166 3.82684 10.7349 3.94742C10.7982 4.36458 10.7665 4.68434 10.6382 4.92317C10.5683 5.05313 10.5644 5.09432 10.6114 5.20554C10.6489 5.2943 10.7534 5.35999 10.8569 5.35985C11.0687 5.35956 11.2968 5.0192 11.4024 4.54561L11.4444 4.3575L11.5275 4.45109C11.9835 4.96459 12.3417 5.66488 12.4032 6.16335L12.4192 6.29332L12.3426 6.17517C12.2107 5.97186 12.0781 5.83346 11.9084 5.72183C11.6024 5.52062 11.2789 5.45215 10.4222 5.40727C9.64839 5.36675 9.21045 5.30106 8.77621 5.16032C8.03738 4.9209 7.66493 4.60204 6.78729 3.4576C6.39748 2.94928 6.15654 2.66804 5.91687 2.44155C5.37228 1.92691 4.83716 1.65701 4.15217 1.55141Z', + })), + _path2$2 || + (_path2$2 = /*#__PURE__*/ React__namespace.createElement('path', { + d: 'M10.8494 2.68637C10.8689 2.34575 10.9153 2.12108 11.0088 1.9159C11.0458 1.83469 11.0804 1.76822 11.0858 1.76822C11.0911 1.76822 11.075 1.82816 11.05 1.90142C10.9821 2.10054 10.9709 2.3729 11.0177 2.68978C11.0771 3.09184 11.1109 3.14985 11.5385 3.58416C11.739 3.78788 11.9723 4.0448 12.0568 4.15511L12.2106 4.35568L12.0568 4.21234C11.8688 4.03705 11.4364 3.6952 11.3409 3.64633C11.2768 3.61356 11.2673 3.61413 11.2278 3.65321C11.1914 3.68922 11.1837 3.74333 11.1787 3.99915C11.1708 4.39786 11.1161 4.65377 10.9842 4.90965C10.9128 5.04805 10.9015 5.01851 10.9661 4.8623C11.0143 4.74566 11.0192 4.69439 11.0189 4.30842C11.0181 3.53291 10.9255 3.34647 10.3823 3.02709C10.2447 2.94618 10.0179 2.8295 9.87839 2.76778C9.73887 2.70606 9.62805 2.6523 9.63208 2.64828C9.64746 2.63307 10.1772 2.78675 10.3905 2.86828C10.7077 2.98954 10.76 3.00526 10.7985 2.99063C10.8244 2.98082 10.8369 2.90608 10.8494 2.68637Z', + })), + _path3$1 || + (_path3$1 = /*#__PURE__*/ React__namespace.createElement('path', { + d: 'M4.51745 4.01304C4.13569 3.49066 3.89948 2.68973 3.95062 2.091L3.96643 1.90572L4.05333 1.92148C4.21652 1.95106 4.49789 2.05515 4.62964 2.13469C4.9912 2.35293 5.14773 2.64027 5.30697 3.37811C5.35362 3.59423 5.41482 3.8388 5.44298 3.9216C5.48831 4.05487 5.65962 4.36617 5.7989 4.56834C5.89922 4.71395 5.83258 4.78295 5.61082 4.76305C5.27215 4.73267 4.8134 4.41799 4.51745 4.01304Z', + })), + _path4 || + (_path4 = /*#__PURE__*/ React__namespace.createElement('path', { + d: 'M10.3863 7.90088C8.60224 7.18693 7.97389 6.56721 7.97389 5.52157C7.97389 5.36769 7.97922 5.24179 7.98571 5.24179C7.99221 5.24179 8.06124 5.29257 8.1391 5.35465C8.50088 5.64305 8.906 5.76623 10.0275 5.92885C10.6875 6.02455 11.0589 6.10185 11.4015 6.21477C12.4904 6.57371 13.1641 7.30212 13.3248 8.29426C13.3715 8.58255 13.3441 9.12317 13.2684 9.4081C13.2087 9.63315 13.0263 10.0388 12.9779 10.0544C12.9645 10.0587 12.9514 10.0076 12.9479 9.93809C12.9296 9.56554 12.7402 9.20285 12.4221 8.93116C12.0604 8.62227 11.5745 8.37633 10.3863 7.90088Z', + })), + _path5 || + (_path5 = /*#__PURE__*/ React__namespace.createElement('path', { + d: 'M9.13385 8.19748C9.11149 8.06527 9.07272 7.89643 9.04769 7.82228L9.00217 7.68748L9.08672 7.7818C9.20374 7.91233 9.2962 8.07937 9.37457 8.30185C9.43438 8.47165 9.44111 8.52215 9.44066 8.79807C9.4402 9.06896 9.43273 9.12575 9.3775 9.27858C9.29042 9.51959 9.18233 9.69048 9.00097 9.87391C8.67507 10.2036 8.25607 10.3861 7.65143 10.4618C7.54633 10.4749 7.24 10.4971 6.97069 10.511C6.292 10.5461 5.84531 10.6186 5.44393 10.7587C5.38623 10.7788 5.3347 10.7911 5.32947 10.7859C5.31323 10.7698 5.58651 10.6079 5.81223 10.4998C6.1305 10.3474 6.44733 10.2643 7.15719 10.1468C7.50785 10.0887 7.86998 10.0183 7.96194 9.99029C8.83033 9.72566 9.27671 9.04276 9.13385 8.19748Z', + })), + _path6 || + (_path6 = /*#__PURE__*/ React__namespace.createElement('path', { + d: 'M9.95169 9.64109C9.71465 9.13463 9.66022 8.64564 9.79009 8.18961C9.80399 8.14088 9.82632 8.101 9.83976 8.101C9.85319 8.101 9.90913 8.13105 9.96404 8.16777C10.0733 8.24086 10.2924 8.36395 10.876 8.68023C11.6043 9.0749 12.0196 9.3805 12.302 9.72965C12.5493 10.0354 12.7023 10.3837 12.776 10.8084C12.8177 11.0489 12.7932 11.6277 12.7311 11.8699C12.5353 12.6337 12.0802 13.2336 11.4311 13.5837C11.336 13.635 11.2506 13.6771 11.2414 13.6773C11.2321 13.6775 11.2668 13.5899 11.3184 13.4827C11.5367 13.029 11.5616 12.5877 11.3965 12.0965C11.2954 11.7957 11.0893 11.4287 10.6732 10.8084C10.1893 10.0873 10.0707 9.89539 9.95169 9.64109Z', + })), + _path7 || + (_path7 = /*#__PURE__*/ React__namespace.createElement('path', { + d: 'M3.25046 12.3737C3.91252 11.8181 4.73629 11.4234 5.48666 11.3022C5.81005 11.25 6.34877 11.2707 6.64823 11.3469C7.12824 11.469 7.55763 11.7425 7.78094 12.0683C7.99918 12.3867 8.09281 12.6642 8.19029 13.2816C8.22875 13.5252 8.27057 13.7697 8.28323 13.8251C8.35644 14.1451 8.4989 14.4008 8.67544 14.5293C8.95583 14.7333 9.43865 14.7459 9.91362 14.5618C9.99423 14.5305 10.0642 14.5089 10.0691 14.5138C10.0864 14.5308 9.84719 14.6899 9.67847 14.7737C9.45143 14.8864 9.2709 14.93 9.03102 14.93C8.59601 14.93 8.23486 14.7101 7.9335 14.2616C7.87419 14.1733 7.7409 13.909 7.63729 13.6741C7.3191 12.9528 7.16199 12.7331 6.79255 12.4926C6.47104 12.2834 6.05641 12.2459 5.74449 12.3979C5.33475 12.5976 5.22043 13.118 5.51389 13.4478C5.63053 13.5789 5.84803 13.6919 6.02588 13.7139C6.35861 13.7551 6.64455 13.5035 6.64455 13.1696C6.64455 12.9528 6.56071 12.8291 6.34966 12.7344C6.0614 12.6051 5.75156 12.7562 5.75304 13.0254C5.75368 13.1402 5.80396 13.2122 5.91971 13.2643C5.99397 13.2977 5.99569 13.3003 5.93514 13.2878C5.67066 13.2333 5.6087 12.9164 5.82135 12.706C6.07667 12.4535 6.60461 12.5649 6.78591 12.9097C6.86208 13.0545 6.87092 13.3429 6.80451 13.517C6.6559 13.9068 6.22256 14.1117 5.78297 14.0002C5.48368 13.9242 5.36181 13.842 5.00097 13.4726C4.37395 12.8306 4.13053 12.7062 3.22657 12.566L3.05335 12.5391L3.25046 12.3737Z', + })), + _path8 || + (_path8 = /*#__PURE__*/ React__namespace.createElement('path', { + fillRule: 'evenodd', + clipRule: 'evenodd', + d: 'M0.308383 0.883984C2.40235 3.40996 3.84457 4.45213 4.00484 4.67231C4.13717 4.85412 4.08737 5.01757 3.86067 5.14567C3.7346 5.21689 3.47541 5.28905 3.34564 5.28905C3.19887 5.28905 3.14847 5.23278 3.14847 5.23278C3.06337 5.15255 3.01544 5.16658 2.5784 4.39555C1.97166 3.45981 1.46389 2.68357 1.45004 2.67057C1.41801 2.64052 1.41856 2.64153 2.51654 4.59413C2.69394 5.0011 2.55182 5.15049 2.55182 5.20845C2.55182 5.32636 2.51946 5.38834 2.37311 5.55059C2.12914 5.8211 2.02008 6.12505 1.94135 6.7541C1.8531 7.45926 1.60492 7.95737 0.917156 8.80989C0.514562 9.30893 0.448686 9.4004 0.3471 9.60153C0.219144 9.85482 0.183961 9.99669 0.169701 10.3165C0.154629 10.6547 0.183983 10.8732 0.287934 11.1965C0.378939 11.4796 0.473932 11.6665 0.716778 12.0403C0.926351 12.3629 1.04702 12.6027 1.04702 12.6965C1.04702 12.7711 1.06136 12.7712 1.38611 12.6983C2.16328 12.5239 2.79434 12.2171 3.14925 11.8411C3.36891 11.6084 3.42048 11.4799 3.42215 11.1611C3.42325 10.9525 3.41587 10.9088 3.35914 10.7888C3.2668 10.5935 3.09869 10.4311 2.72817 10.1794C2.2427 9.84953 2.03534 9.58398 1.97807 9.21878C1.93108 8.91913 1.98559 8.70771 2.25416 8.14825C2.53214 7.56916 2.60103 7.32239 2.64763 6.73869C2.67773 6.36158 2.71941 6.21286 2.82842 6.09348C2.94212 5.969 3.04447 5.92684 3.32584 5.88863C3.78457 5.82635 4.07667 5.70839 4.31677 5.48849C4.52505 5.29772 4.61221 5.11391 4.62558 4.8372L4.63574 4.62747L4.51934 4.49259C4.09783 4.00411 0.0261003 0.5 0.000160437 0.5C-0.00538105 0.5 0.133325 0.672804 0.308383 0.883984ZM1.28364 10.6992C1.37894 10.5314 1.3283 10.3158 1.16889 10.2104C1.01827 10.1109 0.78428 10.1578 0.78428 10.2875C0.78428 10.3271 0.806303 10.3559 0.855937 10.3813C0.939514 10.424 0.945581 10.4721 0.879823 10.5703C0.81323 10.6698 0.818604 10.7573 0.894991 10.8167C1.0181 10.9125 1.19237 10.8598 1.28364 10.6992Z', + })), + _path9 || + (_path9 = /*#__PURE__*/ React__namespace.createElement('path', { + fillRule: 'evenodd', + clipRule: 'evenodd', + d: 'M4.92523 5.99865C4.70988 6.06439 4.50054 6.29124 4.43574 6.5291C4.39621 6.67421 4.41864 6.92875 4.47785 7.00736C4.57351 7.13433 4.66602 7.16778 4.91651 7.16603C5.40693 7.16263 5.83327 6.95358 5.88284 6.69224C5.92347 6.47801 5.73622 6.18112 5.4783 6.05078C5.34521 5.98355 5.06217 5.95688 4.92523 5.99865ZM5.49853 6.44422C5.57416 6.33741 5.54107 6.22198 5.41245 6.14391C5.1675 5.99525 4.79708 6.11827 4.79708 6.34826C4.79708 6.46274 4.99025 6.58765 5.16731 6.58765C5.28516 6.58765 5.44644 6.5178 5.49853 6.44422Z', + })) + ) + ) +} +var UNISWAP_LOGO_URL = + 'data:image/svg+xml,%3Csvg%20width%3D%2214%22%20height%3D%2215%22%20viewBox%3D%220%200%2014%2015%22%20fill%3D%22black%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20style%3D%22mix-blend-mode%3Adarken%22%3E%3Cpath%20d%3D%22M4.15217%201.55141C3.96412%201.52242%203.95619%201.51902%204.04468%201.5055C4.21427%201.47958%204.61472%201.51491%204.89067%201.58012C5.53489%201.73232%206.12109%202.12221%206.74683%202.81466L6.91307%202.99862L7.15088%202.96062C8.15274%202.8006%209.17194%202.92778%2010.0244%203.31918C10.2589%203.42686%2010.6287%203.64121%2010.6749%203.69629C10.6896%203.71384%2010.7166%203.82684%2010.7349%203.94742C10.7982%204.36458%2010.7665%204.68434%2010.6382%204.92317C10.5683%205.05313%2010.5644%205.09432%2010.6114%205.20554C10.6489%205.2943%2010.7534%205.35999%2010.8569%205.35985C11.0687%205.35956%2011.2968%205.0192%2011.4024%204.54561L11.4444%204.3575L11.5275%204.45109C11.9835%204.96459%2012.3417%205.66488%2012.4032%206.16335L12.4192%206.29332L12.3426%206.17517C12.2107%205.97186%2012.0781%205.83346%2011.9084%205.72183C11.6024%205.52062%2011.2789%205.45215%2010.4222%205.40727C9.64839%205.36675%209.21045%205.30106%208.77621%205.16032C8.03738%204.9209%207.66493%204.60204%206.78729%203.4576C6.39748%202.94928%206.15654%202.66804%205.91687%202.44155C5.37228%201.92691%204.83716%201.65701%204.15217%201.55141Z%22%2F%3E%3Cpath%20d%3D%22M10.8494%202.68637C10.8689%202.34575%2010.9153%202.12108%2011.0088%201.9159C11.0458%201.83469%2011.0804%201.76822%2011.0858%201.76822C11.0911%201.76822%2011.075%201.82816%2011.05%201.90142C10.9821%202.10054%2010.9709%202.3729%2011.0177%202.68978C11.0771%203.09184%2011.1109%203.14985%2011.5385%203.58416C11.739%203.78788%2011.9723%204.0448%2012.0568%204.15511L12.2106%204.35568L12.0568%204.21234C11.8688%204.03705%2011.4364%203.6952%2011.3409%203.64633C11.2768%203.61356%2011.2673%203.61413%2011.2278%203.65321C11.1914%203.68922%2011.1837%203.74333%2011.1787%203.99915C11.1708%204.39786%2011.1161%204.65377%2010.9842%204.90965C10.9128%205.04805%2010.9015%205.01851%2010.9661%204.8623C11.0143%204.74566%2011.0192%204.69439%2011.0189%204.30842C11.0181%203.53291%2010.9255%203.34647%2010.3823%203.02709C10.2447%202.94618%2010.0179%202.8295%209.87839%202.76778C9.73887%202.70606%209.62805%202.6523%209.63208%202.64828C9.64746%202.63307%2010.1772%202.78675%2010.3905%202.86828C10.7077%202.98954%2010.76%203.00526%2010.7985%202.99063C10.8244%202.98082%2010.8369%202.90608%2010.8494%202.68637Z%22%2F%3E%3Cpath%20d%3D%22M4.51745%204.01304C4.13569%203.49066%203.89948%202.68973%203.95062%202.091L3.96643%201.90572L4.05333%201.92148C4.21652%201.95106%204.49789%202.05515%204.62964%202.13469C4.9912%202.35293%205.14773%202.64027%205.30697%203.37811C5.35362%203.59423%205.41482%203.8388%205.44298%203.9216C5.48831%204.05487%205.65962%204.36617%205.7989%204.56834C5.89922%204.71395%205.83258%204.78295%205.61082%204.76305C5.27215%204.73267%204.8134%204.41799%204.51745%204.01304Z%22%2F%3E%3Cpath%20d%3D%22M10.3863%207.90088C8.60224%207.18693%207.97389%206.56721%207.97389%205.52157C7.97389%205.36769%207.97922%205.24179%207.98571%205.24179C7.99221%205.24179%208.06124%205.29257%208.1391%205.35465C8.50088%205.64305%208.906%205.76623%2010.0275%205.92885C10.6875%206.02455%2011.0589%206.10185%2011.4015%206.21477C12.4904%206.57371%2013.1641%207.30212%2013.3248%208.29426C13.3715%208.58255%2013.3441%209.12317%2013.2684%209.4081C13.2087%209.63315%2013.0263%2010.0388%2012.9779%2010.0544C12.9645%2010.0587%2012.9514%2010.0076%2012.9479%209.93809C12.9296%209.56554%2012.7402%209.20285%2012.4221%208.93116C12.0604%208.62227%2011.5745%208.37633%2010.3863%207.90088Z%22%2F%3E%3Cpath%20d%3D%22M9.13385%208.19748C9.11149%208.06527%209.07272%207.89643%209.04769%207.82228L9.00217%207.68748L9.08672%207.7818C9.20374%207.91233%209.2962%208.07937%209.37457%208.30185C9.43438%208.47165%209.44111%208.52215%209.44066%208.79807C9.4402%209.06896%209.43273%209.12575%209.3775%209.27858C9.29042%209.51959%209.18233%209.69048%209.00097%209.87391C8.67507%2010.2036%208.25607%2010.3861%207.65143%2010.4618C7.54633%2010.4749%207.24%2010.4971%206.97069%2010.511C6.292%2010.5461%205.84531%2010.6186%205.44393%2010.7587C5.38623%2010.7788%205.3347%2010.7911%205.32947%2010.7859C5.31323%2010.7698%205.58651%2010.6079%205.81223%2010.4998C6.1305%2010.3474%206.44733%2010.2643%207.15719%2010.1468C7.50785%2010.0887%207.86998%2010.0183%207.96194%209.99029C8.83033%209.72566%209.27671%209.04276%209.13385%208.19748Z%22%2F%3E%3Cpath%20d%3D%22M9.95169%209.64109C9.71465%209.13463%209.66022%208.64564%209.79009%208.18961C9.80399%208.14088%209.82632%208.101%209.83976%208.101C9.85319%208.101%209.90913%208.13105%209.96404%208.16777C10.0733%208.24086%2010.2924%208.36395%2010.876%208.68023C11.6043%209.0749%2012.0196%209.3805%2012.302%209.72965C12.5493%2010.0354%2012.7023%2010.3837%2012.776%2010.8084C12.8177%2011.0489%2012.7932%2011.6277%2012.7311%2011.8699C12.5353%2012.6337%2012.0802%2013.2336%2011.4311%2013.5837C11.336%2013.635%2011.2506%2013.6771%2011.2414%2013.6773C11.2321%2013.6775%2011.2668%2013.5899%2011.3184%2013.4827C11.5367%2013.029%2011.5616%2012.5877%2011.3965%2012.0965C11.2954%2011.7957%2011.0893%2011.4287%2010.6732%2010.8084C10.1893%2010.0873%2010.0707%209.89539%209.95169%209.64109Z%22%2F%3E%3Cpath%20d%3D%22M3.25046%2012.3737C3.91252%2011.8181%204.73629%2011.4234%205.48666%2011.3022C5.81005%2011.25%206.34877%2011.2707%206.64823%2011.3469C7.12824%2011.469%207.55763%2011.7425%207.78094%2012.0683C7.99918%2012.3867%208.09281%2012.6642%208.19029%2013.2816C8.22875%2013.5252%208.27057%2013.7697%208.28323%2013.8251C8.35644%2014.1451%208.4989%2014.4008%208.67544%2014.5293C8.95583%2014.7333%209.43865%2014.7459%209.91362%2014.5618C9.99423%2014.5305%2010.0642%2014.5089%2010.0691%2014.5138C10.0864%2014.5308%209.84719%2014.6899%209.67847%2014.7737C9.45143%2014.8864%209.2709%2014.93%209.03102%2014.93C8.59601%2014.93%208.23486%2014.7101%207.9335%2014.2616C7.87419%2014.1733%207.7409%2013.909%207.63729%2013.6741C7.3191%2012.9528%207.16199%2012.7331%206.79255%2012.4926C6.47104%2012.2834%206.05641%2012.2459%205.74449%2012.3979C5.33475%2012.5976%205.22043%2013.118%205.51389%2013.4478C5.63053%2013.5789%205.84803%2013.6919%206.02588%2013.7139C6.35861%2013.7551%206.64455%2013.5035%206.64455%2013.1696C6.64455%2012.9528%206.56071%2012.8291%206.34966%2012.7344C6.0614%2012.6051%205.75156%2012.7562%205.75304%2013.0254C5.75368%2013.1402%205.80396%2013.2122%205.91971%2013.2643C5.99397%2013.2977%205.99569%2013.3003%205.93514%2013.2878C5.67066%2013.2333%205.6087%2012.9164%205.82135%2012.706C6.07667%2012.4535%206.60461%2012.5649%206.78591%2012.9097C6.86208%2013.0545%206.87092%2013.3429%206.80451%2013.517C6.6559%2013.9068%206.22256%2014.1117%205.78297%2014.0002C5.48368%2013.9242%205.36181%2013.842%205.00097%2013.4726C4.37395%2012.8306%204.13053%2012.7062%203.22657%2012.566L3.05335%2012.5391L3.25046%2012.3737Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M0.308383%200.883984C2.40235%203.40996%203.84457%204.45213%204.00484%204.67231C4.13717%204.85412%204.08737%205.01757%203.86067%205.14567C3.7346%205.21689%203.47541%205.28905%203.34564%205.28905C3.19887%205.28905%203.14847%205.23278%203.14847%205.23278C3.06337%205.15255%203.01544%205.16658%202.5784%204.39555C1.97166%203.45981%201.46389%202.68357%201.45004%202.67057C1.41801%202.64052%201.41856%202.64153%202.51654%204.59413C2.69394%205.0011%202.55182%205.15049%202.55182%205.20845C2.55182%205.32636%202.51946%205.38834%202.37311%205.55059C2.12914%205.8211%202.02008%206.12505%201.94135%206.7541C1.8531%207.45926%201.60492%207.95737%200.917156%208.80989C0.514562%209.30893%200.448686%209.4004%200.3471%209.60153C0.219144%209.85482%200.183961%209.99669%200.169701%2010.3165C0.154629%2010.6547%200.183983%2010.8732%200.287934%2011.1965C0.378939%2011.4796%200.473932%2011.6665%200.716778%2012.0403C0.926351%2012.3629%201.04702%2012.6027%201.04702%2012.6965C1.04702%2012.7711%201.06136%2012.7712%201.38611%2012.6983C2.16328%2012.5239%202.79434%2012.2171%203.14925%2011.8411C3.36891%2011.6084%203.42048%2011.4799%203.42215%2011.1611C3.42325%2010.9525%203.41587%2010.9088%203.35914%2010.7888C3.2668%2010.5935%203.09869%2010.4311%202.72817%2010.1794C2.2427%209.84953%202.03534%209.58398%201.97807%209.21878C1.93108%208.91913%201.98559%208.70771%202.25416%208.14825C2.53214%207.56916%202.60103%207.32239%202.64763%206.73869C2.67773%206.36158%202.71941%206.21286%202.82842%206.09348C2.94212%205.969%203.04447%205.92684%203.32584%205.88863C3.78457%205.82635%204.07667%205.70839%204.31677%205.48849C4.52505%205.29772%204.61221%205.11391%204.62558%204.8372L4.63574%204.62747L4.51934%204.49259C4.09783%204.00411%200.0261003%200.5%200.000160437%200.5C-0.00538105%200.5%200.133325%200.672804%200.308383%200.883984ZM1.28364%2010.6992C1.37894%2010.5314%201.3283%2010.3158%201.16889%2010.2104C1.01827%2010.1109%200.78428%2010.1578%200.78428%2010.2875C0.78428%2010.3271%200.806303%2010.3559%200.855937%2010.3813C0.939514%2010.424%200.945581%2010.4721%200.879823%2010.5703C0.81323%2010.6698%200.818604%2010.7573%200.894991%2010.8167C1.0181%2010.9125%201.19237%2010.8598%201.28364%2010.6992Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M4.92523%205.99865C4.70988%206.06439%204.50054%206.29124%204.43574%206.5291C4.39621%206.67421%204.41864%206.92875%204.47785%207.00736C4.57351%207.13433%204.66602%207.16778%204.91651%207.16603C5.40693%207.16263%205.83327%206.95358%205.88284%206.69224C5.92347%206.47801%205.73622%206.18112%205.4783%206.05078C5.34521%205.98355%205.06217%205.95688%204.92523%205.99865ZM5.49853%206.44422C5.57416%206.33741%205.54107%206.22198%205.41245%206.14391C5.1675%205.99525%204.79708%206.11827%204.79708%206.34826C4.79708%206.46274%204.99025%206.58765%205.16731%206.58765C5.28516%206.58765%205.44644%206.5178%205.49853%206.44422Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E' + +var ContentWrapper$3 = styled__default['default'](AutoColumn)( + templateObject_1$18 || (templateObject_1$18 = __makeTemplateObject(['\n width: 100%;\n'], ['\n width: 100%;\n'])) +) +var ModalUpper = styled__default['default'](DataCard)( + templateObject_2$Q || + (templateObject_2$Q = __makeTemplateObject( + [ + '\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n', + ], + [ + '\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n', + ] + )) +) +var ConfirmOrLoadingWrapper = styled__default['default'].div( + templateObject_3$I || + (templateObject_3$I = __makeTemplateObject( + ['\n width: 100%;\n padding: 24px;\n position: relative;\n background: ', ';\n'], + ['\n width: 100%;\n padding: 24px;\n position: relative;\n background: ', ';\n'] + )), + function (_a) { + var activeBG = _a.activeBG + return ( + activeBG && + 'radial-gradient(76.02% 75.41% at 1.84% 0%, rgba(255, 0, 122, 0.2) 0%, rgba(33, 114, 229, 0.2) 100%), #FFFFFF;' + ) + } +) +var ConfirmedIcon$1 = styled__default['default'](ColumnCenter)( + templateObject_4$x || + (templateObject_4$x = __makeTemplateObject(['\n padding: 60px 0;\n'], ['\n padding: 60px 0;\n'])) +) +var SOCKS_AMOUNT = 1000 +var USER_AMOUNT = 400 +function ClaimModal() { + var _a, _b, _c, _d, _e, _f, _g + var isOpen = useModalOpen(ApplicationModal.SELF_CLAIM) + var toggleClaimModal = useToggleSelfClaimModal() + var _h = useActiveWeb3React(), + account = _h.account, + chainId = _h.chainId + // used for UI loading states + var _j = __read(React.useState(false), 2), + attempting = _j[0], + setAttempting = _j[1] + // get user claim data + var userClaimData = useUserClaimData(account) + // monitor the status of the claim from contracts and txns + var claimCallback = useClaimCallback(account).claimCallback + var unclaimedAmount = useUserUnclaimedAmount(account) + var _k = useUserHasSubmittedClaim(account !== null && account !== void 0 ? account : undefined), + claimSubmitted = _k.claimSubmitted, + claimTxn = _k.claimTxn + var claimConfirmed = Boolean(claimTxn === null || claimTxn === void 0 ? void 0 : claimTxn.receipt) + function onClaim() { + setAttempting(true) + claimCallback() + // reset modal and log error + .catch(function (error) { + setAttempting(false) + console.log(error) + }) + } + // once confirmed txn is found, if modal is closed open, mark as not attempting regradless + React.useEffect( + function () { + if (claimConfirmed && claimSubmitted && attempting) { + setAttempting(false) + if (!isOpen) { + toggleClaimModal() + } + } + }, + [attempting, claimConfirmed, claimSubmitted, isOpen, toggleClaimModal] + ) + var nonLPAmount = JSBI__default['default'].multiply( + JSBI__default['default'].BigInt( + (( + (_a = userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.flags) === null || + _a === void 0 + ? void 0 + : _a.isSOCKS + ) + ? SOCKS_AMOUNT + : 0) + + (( + (_b = userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.flags) === null || + _b === void 0 + ? void 0 + : _b.isUser + ) + ? USER_AMOUNT + : 0) + ), + JSBI__default['default'].exponentiate(JSBI__default['default'].BigInt(10), JSBI__default['default'].BigInt(18)) + ) + return jsxRuntime.jsxs( + Modal, + __assign( + { isOpen, onDismiss: toggleClaimModal, maxHeight: 90 }, + { + children: [ + jsxRuntime.jsx(Confetti, { start: Boolean(isOpen && claimConfirmed) }, void 0), + !attempting && + !claimConfirmed && + jsxRuntime.jsxs( + ContentWrapper$3, + __assign( + { gap: 'lg' }, + { + children: [ + jsxRuntime.jsxs( + ModalUpper, + { + children: [ + jsxRuntime.jsx(CardBGImage, {}, void 0), + jsxRuntime.jsx(CardNoise, {}, void 0), + jsxRuntime.jsxs( + CardSection, + __assign( + { gap: 'md' }, + { + children: [ + jsxRuntime.jsxs( + RowBetween, + { + children: [ + jsxRuntime.jsx( + ThemedText.White, + __assign( + { fontWeight: 500 }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'Claim UNI' }, void 0) } + ), + void 0 + ), + jsxRuntime.jsx( + CloseIcon$2, + { onClick: toggleClaimModal, style: { zIndex: 99 }, color: 'white' }, + void 0 + ), + ], + }, + void 0 + ), + jsxRuntime.jsx( + ThemedText.White, + __assign( + { fontWeight: 700, fontSize: 36 }, + { + children: jsxRuntime.jsxs( + macro.Trans, + { + children: [ + unclaimedAmount === null || unclaimedAmount === void 0 + ? void 0 + : unclaimedAmount.toFixed( + 0, + (_c = { groupSeparator: ',' }) !== null && _c !== void 0 ? _c : '-' + ), + ' UNI', + ], + }, + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + jsxRuntime.jsx(Break$1, {}, void 0), + jsxRuntime.jsxs( + CardSection, + __assign( + { gap: 'sm' }, + { + children: [ + ((_d = + userClaimData === null || userClaimData === void 0 + ? void 0 + : userClaimData.flags) === null || _d === void 0 + ? void 0 + : _d.isSOCKS) && + jsxRuntime.jsxs( + RowBetween, + { + children: [ + jsxRuntime.jsx( + ThemedText.SubHeader, + __assign({ color: 'white' }, { children: 'SOCKS' }), + void 0 + ), + jsxRuntime.jsx( + ThemedText.SubHeader, + __assign( + { color: 'white' }, + { + children: jsxRuntime.jsxs( + macro.Trans, + { children: [SOCKS_AMOUNT, ' UNI'] }, + void 0 + ), + } + ), + void 0 + ), + ], + }, + void 0 + ), + ((_e = + userClaimData === null || userClaimData === void 0 + ? void 0 + : userClaimData.flags) === null || _e === void 0 + ? void 0 + : _e.isLP) && + unclaimedAmount && + JSBI__default['default'].greaterThanOrEqual( + unclaimedAmount.quotient, + nonLPAmount + ) && + jsxRuntime.jsxs( + RowBetween, + { + children: [ + jsxRuntime.jsx( + ThemedText.SubHeader, + __assign( + { color: 'white' }, + { + children: jsxRuntime.jsx( + macro.Trans, + { children: 'Liquidity' }, + void 0 + ), + } + ), + void 0 + ), + jsxRuntime.jsx( + ThemedText.SubHeader, + __assign( + { color: 'white' }, + { + children: jsxRuntime.jsxs( + macro.Trans, + { + children: [ + unclaimedAmount + .subtract( + sdkCore.CurrencyAmount.fromRawAmount( + unclaimedAmount.currency, + nonLPAmount + ) + ) + .toFixed(0, { groupSeparator: ',' }), + ' ', + 'UNI', + ], + }, + void 0 + ), + } + ), + void 0 + ), + ], + }, + void 0 + ), + ((_f = + userClaimData === null || userClaimData === void 0 + ? void 0 + : userClaimData.flags) === null || _f === void 0 + ? void 0 + : _f.isUser) && + jsxRuntime.jsxs( + RowBetween, + { + children: [ + jsxRuntime.jsx( + ThemedText.SubHeader, + __assign( + { color: 'white' }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'User' }, void 0) } + ), + void 0 + ), + jsxRuntime.jsx( + ThemedText.SubHeader, + __assign( + { color: 'white' }, + { + children: jsxRuntime.jsxs( + macro.Trans, + { children: [USER_AMOUNT, ' UNI'] }, + void 0 + ), + } + ), + void 0 + ), + ], + }, + void 0 + ), + ], + } + ), + void 0 + ), + ], + }, + void 0 + ), + jsxRuntime.jsxs( + AutoColumn, + __assign( + { gap: 'md', style: { padding: '1rem', paddingTop: '0' }, justify: 'center' }, + { + children: [ + jsxRuntime.jsx( + ThemedText.SubHeader, + __assign( + { fontWeight: 500 }, + { + children: jsxRuntime.jsxs( + macro.Trans, + { + children: [ + 'As a member of the Uniswap community you may claim UNI to be used for voting and governance.', + jsxRuntime.jsx('br', {}, void 0), + jsxRuntime.jsx('br', {}, void 0), + jsxRuntime.jsx( + ExternalLink, + __assign( + { href: 'https://uniswap.org/blog/uni' }, + { children: 'Read more about UNI' } + ), + void 0 + ), + ], + }, + void 0 + ), + } + ), + void 0 + ), + jsxRuntime.jsx( + ButtonPrimary, + __assign( + { + disabled: !address.isAddress(account !== null && account !== void 0 ? account : ''), + padding: '16px 16px', + width: '100%', + $borderRadius: '12px', + mt: '1rem', + onClick: onClaim, + }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'Claim UNI' }, void 0) } + ), + void 0 + ), + ], + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + (attempting || claimConfirmed) && + jsxRuntime.jsxs( + ConfirmOrLoadingWrapper, + __assign( + { activeBG: true }, + { + children: [ + jsxRuntime.jsx(CardNoise, {}, void 0), + jsxRuntime.jsx(CardBGImageSmaller, { desaturate: true }, void 0), + jsxRuntime.jsxs( + RowBetween, + { + children: [ + jsxRuntime.jsx('div', {}, void 0), + jsxRuntime.jsx( + CloseIcon$2, + { onClick: toggleClaimModal, style: { zIndex: 99 }, stroke: 'black' }, + void 0 + ), + ], + }, + void 0 + ), + jsxRuntime.jsx( + ConfirmedIcon$1, + { + children: !claimConfirmed + ? jsxRuntime.jsx(CustomLightSpinner, { src: Circle$1, alt: 'loader', size: '90px' }, void 0) + : jsxRuntime.jsx(UniTokenAnimated, { width: '72px', src: tokenLogo, alt: 'UNI' }, void 0), + }, + void 0 + ), + jsxRuntime.jsxs( + AutoColumn, + __assign( + { gap: '100px', justify: 'center' }, + { + children: [ + jsxRuntime.jsxs( + AutoColumn, + __assign( + { gap: '12px', justify: 'center' }, + { + children: [ + jsxRuntime.jsx( + ThemedText.LargeHeader, + __assign( + { fontWeight: 600, color: 'black' }, + { + children: claimConfirmed + ? jsxRuntime.jsx(macro.Trans, { children: 'Claimed!' }, void 0) + : jsxRuntime.jsx(macro.Trans, { children: 'Claiming' }, void 0), + } + ), + void 0 + ), + !claimConfirmed && + jsxRuntime.jsx( + rebass.Text, + __assign( + { fontSize: 36, color: '#ff007a', fontWeight: 800 }, + { + children: jsxRuntime.jsxs( + macro.Trans, + { + children: [ + unclaimedAmount === null || unclaimedAmount === void 0 + ? void 0 + : unclaimedAmount.toFixed( + 0, + (_g = { groupSeparator: ',' }) !== null && _g !== void 0 + ? _g + : '-' + ), + ' UNI', + ], + }, + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + claimConfirmed && + jsxRuntime.jsx( + jsxRuntime.Fragment, + { + children: jsxRuntime.jsx( + ThemedText.SubHeader, + __assign( + { fontWeight: 500, color: 'black' }, + { + children: jsxRuntime.jsxs( + macro.Trans, + { + children: [ + jsxRuntime.jsxs( + 'span', + __assign( + { role: 'img', 'aria-label': 'party-hat' }, + { children: ['\uD83C\uDF89', ' '] } + ), + void 0 + ), + 'Welcome to team Unicorn :)', + ' ', + jsxRuntime.jsx( + 'span', + __assign( + { role: 'img', 'aria-label': 'party-hat' }, + { children: '\uD83C\uDF89' } + ), + void 0 + ), + ], + }, + void 0 + ), + } + ), + void 0 + ), + }, + void 0 + ), + attempting && + !claimSubmitted && + jsxRuntime.jsx( + ThemedText.SubHeader, + __assign( + { color: 'black' }, + { + children: jsxRuntime.jsx( + macro.Trans, + { children: 'Confirm this transaction in your wallet' }, + void 0 + ), + } + ), + void 0 + ), + attempting && + claimSubmitted && + !claimConfirmed && + chainId && + (claimTxn === null || claimTxn === void 0 ? void 0 : claimTxn.hash) && + jsxRuntime.jsx( + ExternalLink, + __assign( + { + href: getExplorerLink( + chainId, + claimTxn === null || claimTxn === void 0 ? void 0 : claimTxn.hash, + ExplorerDataType.TRANSACTION + ), + style: { zIndex: 99 }, + }, + { + children: jsxRuntime.jsx( + macro.Trans, + { children: 'View transaction on Explorer' }, + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + ], + } + ), + void 0 + ) +} +var templateObject_1$18, templateObject_2$Q, templateObject_3$I, templateObject_4$x + +var Card = styled__default['default'](styledComponents.Box)( + templateObject_1$17 || + (templateObject_1$17 = __makeTemplateObject( + ['\n width: ', ';\n padding: ', ';\n border-radius: ', ';\n border: ', ';\n'], + ['\n width: ', ';\n padding: ', ';\n border-radius: ', ';\n border: ', ';\n'] + )), + function (_a) { + var width = _a.width + return width !== null && width !== void 0 ? width : '100%' + }, + function (_a) { + var padding = _a.padding + return padding !== null && padding !== void 0 ? padding : '1rem' + }, + function (_a) { + var $borderRadius = _a.$borderRadius + return $borderRadius !== null && $borderRadius !== void 0 ? $borderRadius : '16px' + }, + function (_a) { + var border = _a.border + return border + } +) +var LightCard = styled__default['default'](Card)( + templateObject_2$P || + (templateObject_2$P = __makeTemplateObject( + ['\n border: 1px solid ', ';\n background-color: ', ';\n'], + ['\n border: 1px solid ', ';\n background-color: ', ';\n'] + )), + function (_a) { + var theme = _a.theme + return theme.bg2 + }, + function (_a) { + var theme = _a.theme + return theme.bg1 + } +) +var LightGreyCard = styled__default['default'](Card)( + templateObject_3$H || + (templateObject_3$H = __makeTemplateObject(['\n background-color: ', ';\n'], ['\n background-color: ', ';\n'])), + function (_a) { + var theme = _a.theme + return theme.bg2 + } +) +var GreyCard = styled__default['default'](Card)( + templateObject_4$w || + (templateObject_4$w = __makeTemplateObject(['\n background-color: ', ';\n'], ['\n background-color: ', ';\n'])), + function (_a) { + var theme = _a.theme + return theme.bg3 + } +) +var DarkGreyCard = styled__default['default'](Card)( + templateObject_5$p || + (templateObject_5$p = __makeTemplateObject(['\n background-color: ', ';\n'], ['\n background-color: ', ';\n'])), + function (_a) { + var theme = _a.theme + return theme.bg2 + } +) +styled__default['default'](Card)( + templateObject_6$k || + (templateObject_6$k = __makeTemplateObject(['\n background-color: ', ';\n'], ['\n background-color: ', ';\n'])), + function (_a) { + var theme = _a.theme + return theme.bg0 + } +) +var OutlineCard = styled__default['default'](Card)( + templateObject_7$h || + (templateObject_7$h = __makeTemplateObject(['\n border: 1px solid ', ';\n'], ['\n border: 1px solid ', ';\n'])), + function (_a) { + var theme = _a.theme + return theme.bg3 + } +) +styled__default['default'](Card)( + templateObject_8$f || + (templateObject_8$f = __makeTemplateObject( + ['\n background-color: rgba(243, 132, 30, 0.05);\n color: ', ';\n font-weight: 500;\n'], + ['\n background-color: rgba(243, 132, 30, 0.05);\n color: ', ';\n font-weight: 500;\n'] + )), + function (_a) { + var theme = _a.theme + return theme.yellow3 + } +) +styled__default['default'](Card)( + templateObject_9$e || + (templateObject_9$e = __makeTemplateObject( + ['\n background-color: ', ';\n color: ', ';\n border-radius: 12px;\n'], + ['\n background-color: ', ';\n color: ', ';\n border-radius: 12px;\n'] + )), + function (_a) { + var theme = _a.theme + return theme.primary5 + }, + function (_a) { + var theme = _a.theme + return theme.blue2 + } +) +var templateObject_1$17, + templateObject_2$P, + templateObject_3$H, + templateObject_4$w, + templateObject_5$p, + templateObject_6$k, + templateObject_7$h, + templateObject_8$f, + templateObject_9$e + +var Wrapper$h = styled__default['default'].div( + templateObject_1$16 || + (templateObject_1$16 = __makeTemplateObject( + ['\n max-height: 70vh;\n overflow: auto;\n padding: 0 1rem;\n'], + ['\n max-height: 70vh;\n overflow: auto;\n padding: 0 1rem;\n'] + )) +) +var StyledExternalCard = styled__default['default'](Card)( + templateObject_2$O || + (templateObject_2$O = __makeTemplateObject( + [ + '\n background-color: ', + ';\n padding: 0.5rem;\n width: 100%;\n\n :hover,\n :focus,\n :active {\n background-color: ', + ';\n }\n', + ], + [ + '\n background-color: ', + ';\n padding: 0.5rem;\n width: 100%;\n\n :hover,\n :focus,\n :active {\n background-color: ', + ';\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.primary5 + }, + function (_a) { + var theme = _a.theme + return theme.primary4 + } +) +var HoverText$1 = styled__default['default'].div( + templateObject_3$G || + (templateObject_3$G = __makeTemplateObject( + [ + '\n text-decoration: none;\n color: ', + ';\n display: flex;\n align-items: center;\n\n :hover {\n cursor: pointer;\n }\n', + ], + [ + '\n text-decoration: none;\n color: ', + ';\n display: flex;\n align-items: center;\n\n :hover {\n cursor: pointer;\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.text1 + } +) +var StyledLinkOut = styled__default['default'](reactFeather.ArrowDown)( + templateObject_4$v || + (templateObject_4$v = __makeTemplateObject( + ['\n transform: rotate(230deg);\n'], + ['\n transform: rotate(230deg);\n'] + )) +) +var EXTERNAL_APIS = [ + { + name: 'Auto Router', + description: jsxRuntime.jsx( + macro.Trans, + { children: 'The app fetches the optimal trade route from a Uniswap Labs server.' }, + void 0 + ), + }, + { + name: 'Infura', + description: jsxRuntime.jsx( + macro.Trans, + { children: 'The app fetches on-chain data and constructs contract calls with an Infura API.' }, + void 0 + ), + }, + { + name: 'TRM Labs', + description: jsxRuntime.jsxs( + jsxRuntime.Fragment, + { + children: [ + jsxRuntime.jsx( + macro.Trans, + { + children: + 'The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.', + }, + void 0 + ), + ' ', + jsxRuntime.jsx( + ExternalLink, + __assign( + { href: 'https://help.uniswap.org/en/articles/5675203-terms-of-service-faq' }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'Learn more' }, void 0) } + ), + void 0 + ), + ], + }, + void 0 + ), + }, + { + name: 'Google Analytics', + description: jsxRuntime.jsx( + macro.Trans, + { children: 'The app logs anonymized usage statistics in order to improve over time.' }, + void 0 + ), + }, + { + name: 'The Graph', + description: jsxRuntime.jsx( + macro.Trans, + { children: 'The app fetches blockchain data from The Graph\u2019s hosted service.' }, + void 0 + ), + }, +] +function PrivacyPolicyModal() { + var node = React.useRef() + var open = useModalOpen(ApplicationModal.PRIVACY_POLICY) + var toggle = useTogglePrivacyPolicy() + React.useEffect( + function () { + if (!open) return + ReactGA__default['default'].event({ + category: 'Modal', + action: 'Show Legal', + }) + }, + [open] + ) + return jsxRuntime.jsx( + Modal, + __assign( + { + isOpen: open, + onDismiss() { + return toggle() + }, + }, + { + children: jsxRuntime.jsxs( + AutoColumn, + __assign( + { gap: '12px', ref: node }, + { + children: [ + jsxRuntime.jsxs( + RowBetween, + __assign( + { padding: '1rem 1rem 0.5rem 1rem' }, + { + children: [ + jsxRuntime.jsx( + ThemedText.MediumHeader, + { children: jsxRuntime.jsx(macro.Trans, { children: 'Legal & Privacy' }, void 0) }, + void 0 + ), + jsxRuntime.jsx( + HoverText$1, + __assign( + { + onClick() { + return toggle() + }, + }, + { children: jsxRuntime.jsx(reactFeather.X, { size: 24 }, void 0) } + ), + void 0 + ), + ], + } + ), + void 0 + ), + jsxRuntime.jsx(PrivacyPolicy, {}, void 0), + ], + } + ), + void 0 + ), + } + ), + void 0 + ) +} +function PrivacyPolicy() { + return jsxRuntime.jsx( + Wrapper$h, + __assign( + { + draggable: 'true', + onTouchMove(e) { + // prevent modal gesture handler from dismissing modal when content is scrolling + if (isMobile) { + e.stopPropagation() + } + }, + }, + { + children: jsxRuntime.jsxs( + AutoColumn, + __assign( + { gap: '16px' }, + { + children: [ + jsxRuntime.jsxs( + AutoColumn, + __assign( + { gap: '8px', style: { width: '100%' } }, + { + children: [ + jsxRuntime.jsx( + StyledExternalCard, + { + children: jsxRuntime.jsx( + ExternalLink, + __assign( + { href: 'https://uniswap.org/terms-of-service' }, + { + children: jsxRuntime.jsxs( + RowBetween, + { + children: [ + jsxRuntime.jsxs( + AutoRow, + __assign( + { gap: '4px' }, + { + children: [ + jsxRuntime.jsx(reactFeather.Info, { size: 20 }, void 0), + jsxRuntime.jsx( + ThemedText.Main, + __assign( + { fontSize: 14, color: 'primaryText1' }, + { + children: jsxRuntime.jsx( + macro.Trans, + { children: "Uniswap Labs' Terms of Service" }, + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + jsxRuntime.jsx(StyledLinkOut, { size: 20 }, void 0), + ], + }, + void 0 + ), + } + ), + void 0 + ), + }, + void 0 + ), + jsxRuntime.jsx( + StyledExternalCard, + { + children: jsxRuntime.jsx( + ExternalLink, + __assign( + { href: 'https://uniswap.org/disclaimer/' }, + { + children: jsxRuntime.jsxs( + RowBetween, + { + children: [ + jsxRuntime.jsxs( + AutoRow, + __assign( + { gap: '4px' }, + { + children: [ + jsxRuntime.jsx(reactFeather.Info, { size: 20 }, void 0), + jsxRuntime.jsx( + ThemedText.Main, + __assign( + { fontSize: 14, color: 'primaryText1' }, + { + children: jsxRuntime.jsx( + macro.Trans, + { children: 'Protocol Disclaimer' }, + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + jsxRuntime.jsx(StyledLinkOut, { size: 20 }, void 0), + ], + }, + void 0 + ), + } + ), + void 0 + ), + }, + void 0 + ), + ], + } + ), + void 0 + ), + jsxRuntime.jsx( + ThemedText.Main, + __assign( + { fontSize: 14 }, + { + children: jsxRuntime.jsx( + macro.Trans, + { children: 'This app uses the following third-party APIs:' }, + void 0 + ), + } + ), + void 0 + ), + jsxRuntime.jsxs( + AutoColumn, + __assign( + { gap: '12px' }, + { + children: [ + EXTERNAL_APIS.map(function (_a, i) { + var name = _a.name, + description = _a.description + return jsxRuntime.jsx( + DarkGreyCard, + { + children: jsxRuntime.jsxs( + AutoColumn, + __assign( + { gap: '8px' }, + { + children: [ + jsxRuntime.jsxs( + AutoRow, + __assign( + { gap: '4px' }, + { + children: [ + jsxRuntime.jsx(reactFeather.Info, { size: 18 }, void 0), + jsxRuntime.jsx( + ThemedText.Main, + __assign({ fontSize: 14, color: 'text1' }, { children: name }), + void 0 + ), + ], + } + ), + void 0 + ), + jsxRuntime.jsx( + ThemedText.Main, + __assign({ fontSize: 14 }, { children: description }), + void 0 + ), + ], + } + ), + void 0 + ), + }, + i + ) + }), + jsxRuntime.jsx( + Row$1, + __assign( + { justify: 'center', marginBottom: '1rem' }, + { + children: jsxRuntime.jsx( + ExternalLink, + __assign( + { href: 'https://help.uniswap.org/en/articles/5675203-terms-of-service-faq' }, + { children: jsxRuntime.jsx(macro.Trans, { children: 'Learn more' }, void 0) } + ), + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + } + ), + void 0 + ) +} +var templateObject_1$16, templateObject_2$O, templateObject_3$G, templateObject_4$v function getAugmentedNamespace(n) { - if (n.__esModule) return n; - var a = Object.defineProperty({}, '__esModule', {value: true}); - Object.keys(n).forEach(function (k) { - var d = Object.getOwnPropertyDescriptor(n, k); - Object.defineProperty(a, k, d.get ? d : { - enumerable: true, - get: function () { - return n[k]; - } - }); - }); - return a; + if (n.__esModule) return n + var a = Object.defineProperty({}, '__esModule', { value: true }) + Object.keys(n).forEach(function (k) { + var d = Object.getOwnPropertyDescriptor(n, k) + Object.defineProperty( + a, + k, + d.get + ? d + : { + enumerable: true, + get() { + return n[k] + }, + } + ) + }) + return a } /*eslint-disable*/ From 6ee71f53d53b193986a4e6f816e6f88da0512d19 Mon Sep 17 00:00:00 2001 From: David Wisner Date: Sun, 30 Jan 2022 15:40:53 +0800 Subject: [PATCH 10/15] recompile --- .env | 1 + dist2/snowflake.esm.js | 20352 ++++++++++++++++++++ dist2/snowflake.js | 25389 ------------------------- dist2/snowflake.js.map | 1 - package.json | 9 +- rollup.config.ts => rollup.config.js | 62 +- tsconfig.json | 18 +- yarn.lock | 18 +- 8 files changed, 20434 insertions(+), 25416 deletions(-) create mode 100644 dist2/snowflake.esm.js delete mode 100644 dist2/snowflake.js delete mode 100644 dist2/snowflake.js.map rename rollup.config.ts => rollup.config.js (65%) diff --git a/.env b/.env index 6015177c84a..b281d877c93 100644 --- a/.env +++ b/.env @@ -1 +1,2 @@ REACT_APP_INFURA_KEY="4bf032f2d38a4ed6bb975b80d6340847" +NODE_ENV="development" \ No newline at end of file diff --git a/dist2/snowflake.esm.js b/dist2/snowflake.esm.js new file mode 100644 index 00000000000..00beaa70597 --- /dev/null +++ b/dist2/snowflake.esm.js @@ -0,0 +1,20352 @@ +import { jsx, jsxs, Fragment } from 'react/jsx-runtime'; +import styled, { keyframes, css, createGlobalStyle, ThemeProvider as ThemeProvider$1, ThemeContext, useTheme as useTheme$1 } from 'styled-components/macro'; +import * as React from 'react'; +import React__default, { useMemo, useEffect, useState, useCallback, useContext, useRef, useLayoutEffect, memo, Suspense } from 'react'; +import { useDispatch, useSelector, shallowEqual, Provider as Provider$1 } from 'react-redux'; +import { createAction, createSlice, nanoid, createReducer, configureStore } from '@reduxjs/toolkit'; +import qs, { parse, stringify } from 'qs'; +import { useLocation, Link as Link$1, useHistory, NavLink, Redirect, Route as Route$3, Switch, HashRouter } from 'react-router-dom'; +import { getAddress, isAddress as isAddress$1 } from '@ethersproject/address'; +import { Trans, t, Plural } from '@lingui/macro'; +import { useWeb3React, UnsupportedChainIdError, createWeb3ReactRoot, Web3ReactProvider } from '@web3-react/core'; +import { Percent, Token, WETH9, NativeCurrency, Ether, CurrencyAmount, TradeType, Price, Fraction } from '@uniswap/sdk-core'; +import JSBI from 'jsbi'; +import { Text as Text$1, Box as Box$1 } from 'rebass'; +import { AddressZero, MaxUint256 } from '@ethersproject/constants'; +import { Contract } from '@ethersproject/contracts'; +import { atom } from 'jotai'; +import { useAtomValue, useUpdateAtom, atomWithDefault } from 'jotai/utils'; +import { createMulticall, NEVER_RELOAD } from '@uniswap/redux-multicall'; +import { FACTORY_ADDRESS, Pair, computePairAddress, Trade, Route as Route$2, Router } from '@uniswap/v2-sdk'; +import { FACTORY_ADDRESS as FACTORY_ADDRESS$1, Pool as Pool$1, computePoolAddress, FeeAmount, Route as Route$1, SwapQuoter, toHex, Trade as Trade$2, SwapRouter } from '@uniswap/v3-sdk'; +import { combineReducers, createStore } from 'redux'; +import { namehash } from '@ethersproject/hash'; +import { initializeApp } from 'firebase/app'; +import { getDatabase, push, ref } from 'firebase/database'; +import { arrayify, hexZeroPad, hexStripZeros, splitSignature } from '@ethersproject/bytes'; +import { parseBytes32String } from '@ethersproject/strings'; +import { initializeConnector } from 'widgets-web3-react/core'; +import { EMPTY } from 'widgets-web3-react/empty'; +import CID from 'cids'; +import { getNameFromData, rmPrefix } from 'multicodec'; +import { decode, toB58String } from 'multihashes'; +import { Interface } from '@ethersproject/abi'; +import { X, ExternalLink as ExternalLink$1, Trash, Check, ArrowDown, Info, HelpCircle, Coffee, MessageCircle, Globe, Moon, Sun, BookOpen, FileText, ChevronLeft, AlertTriangle, CheckCircle, Copy as Copy$1, Triangle, ArrowLeft, ArrowRight, Activity, ArrowDownCircle, ChevronDown, AlertOctagon, Heart, AlertCircle, ArrowUpRight, Slash, Plus, Edit, Settings, Lock, ArrowUpCircle } from 'react-feather'; +import ReactGA from 'react-ga'; +import { Box, Button as Button$1 } from 'rebass/styled-components'; +import { darken, transparentize, readableColor, shade } from 'polished'; +import ReactConfetti from 'react-confetti'; +import { DialogOverlay, DialogContent } from '@reach/dialog'; +import { animated, useTransition, useSpring } from 'react-spring'; +import { useGesture } from 'react-use-gesture'; +import { UAParser } from 'ua-parser-js'; +import { createApi, fetchBaseQuery, skipToken, setupListeners } from '@reduxjs/toolkit/query/react'; +import { save, load } from 'redux-localstorage-simple'; +import { gql, ClientError, GraphQLClient } from 'graphql-request'; +import { getVersionUpgrade, VersionUpgrade, minVersionBump } from '@uniswap/token-lists'; +import { Protocol, Trade as Trade$1, SwapRouter as SwapRouter$1 } from '@uniswap/router-sdk'; +import ms from 'ms.macro'; +import { parseUnits } from '@ethersproject/units'; +import useScrollPosition from '@react-hook/window-scroll'; +import Portal from '@reach/portal'; +import { usePopper } from 'react-popper'; +import { SafeAppConnector } from '@gnosis.pm/safe-apps-web3-react'; +import { InjectedConnector } from '@web3-react/injected-connector'; +import { PortisConnector } from '@web3-react/portis-connector'; +import { WalletConnectConnector } from '@web3-react/walletconnect-connector'; +import { WalletLinkConnector } from '@web3-react/walletlink-connector'; +import { Web3Provider } from '@ethersproject/providers'; +import { FortmaticConnector as FortmaticConnector$1 } from '@web3-react/fortmatic-connector'; +import { AbstractConnector } from '@web3-react/abstract-connector'; +import invariant from 'tiny-invariant'; +import jazzicon from '@metamask/jazzicon'; +import { BigNumber } from '@ethersproject/bignumber'; +import copy from 'copy-to-clipboard'; +import { useSpring as useSpring$1 } from 'react-spring/web'; +import useResizeObserver from 'use-resize-observer'; +import AutoSizer from 'react-virtualized-auto-sizer'; +import { FixedSizeList } from 'react-window'; +import Vibrant from 'node-vibrant/lib/bundle'; +import { hex } from 'wcag-contrast'; +import { i18n } from '@lingui/core'; +import { I18nProvider } from '@lingui/react'; +import { af, ar, ca, cs, da, de, el, en, es, fi, fr, he, hu, id, it, ja, ko, nl, no, pl, pt, ro, ru, sr, sv, sw, tr, uk, vi, zh } from 'make-plural/plurals'; +import { ChainId, routeAmountsToString, IMetric, setGlobalMetric, AlphaRouter } from '@uniswap/smart-order-router'; +import { providers } from 'ethers/lib/ethers'; + +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ +/* global Reflect, Promise */ + +var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); +}; + +function __extends(d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +} + +var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; + +function __rest(s, e) { + var t = {}; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { + if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) + t[p[i]] = s[p[i]]; + } + return t; +} + +function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +} + +function __generator(thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +} + +function __values(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +} + +function __read(o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +} + +function __spreadArray(to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); +} + +function __makeTemplateObject(cooked, raw) { + if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } + return cooked; +} + +var rotate$2 = keyframes(templateObject_1$1n || (templateObject_1$1n = __makeTemplateObject(["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"], ["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"]))); +var StyledSVG = styled.svg(templateObject_2$11 || (templateObject_2$11 = __makeTemplateObject(["\n animation: 2s ", " linear infinite;\n height: ", ";\n width: ", ";\n path {\n stroke: ", ";\n }\n"], ["\n animation: 2s ", " linear infinite;\n height: ", ";\n width: ", ";\n path {\n stroke: ", ";\n }\n" + /** + * Takes in custom size and stroke for circle color, default to primary color as fill, + * need ...rest for layered styles on top + */ +])), rotate$2, function (_a) { + var size = _a.size; + return size; +}, function (_a) { + var size = _a.size; + return size; +}, function (_a) { + var stroke = _a.stroke, theme = _a.theme; + return stroke !== null && stroke !== void 0 ? stroke : theme.primary1; +}); +/** + * Takes in custom size and stroke for circle color, default to primary color as fill, + * need ...rest for layered styles on top + */ +function Loader(_a) { + var _b = _a.size, size = _b === void 0 ? '16px' : _b, stroke = _a.stroke, rest = __rest(_a, ["size", "stroke"]); + return (jsx(StyledSVG, __assign({ viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", size: size, stroke: stroke }, rest, { children: jsx("path", { d: "M12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22C17.5228 22 22 17.5228 22 12C22 9.27455 20.9097 6.80375 19.1414 5", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round" }, void 0) }), void 0)); +} +var templateObject_1$1n, templateObject_2$11; + +var useAppDispatch = function () { return useDispatch(); }; +var useAppSelector = useSelector; + +var updateMatchesDarkMode = createAction('user/updateMatchesDarkMode'); +var updateUserDarkMode = createAction('user/updateUserDarkMode'); +var updateUserExpertMode = createAction('user/updateUserExpertMode'); +var updateUserLocale = createAction('user/updateUserLocale'); +var updateShowSurveyPopup = createAction('user/updateShowSurveyPopup'); +var updateUserClientSideRouter = createAction('user/updateUserClientSideRouter'); +var updateHideClosedPositions = createAction('user/hideClosedPositions'); +var updateUserSlippageTolerance = createAction('user/updateUserSlippageTolerance'); +var updateUserDeadline = createAction('user/updateUserDeadline'); +var addSerializedToken = createAction('user/addSerializedToken'); +var removeSerializedToken = createAction('user/removeSerializedToken'); +var addSerializedPair = createAction('user/addSerializedPair'); +var removeSerializedPair = createAction('user/removeSerializedPair'); + +function parsedQueryString(search) { + if (!search) { + // react-router-dom places search string in the hash + var hash = window.location.hash; + search = hash.substr(hash.indexOf('?')); + } + return search && search.length > 1 ? parse(search, { parseArrays: false, ignoreQueryPrefix: true }) : {}; +} +function useParsedQueryString() { + var search = useLocation().search; + return useMemo(function () { return parsedQueryString(search); }, [search]); +} + +function ApeModeQueryParamReader() { + useApeModeQueryParamReader(); + return null; +} +function useApeModeQueryParamReader() { + var dispatch = useAppDispatch(); + var ape = useParsedQueryString().ape; + useEffect(function () { + if (typeof ape !== 'string') + return; + if (ape === '' || ape.toLowerCase() === 'true') { + dispatch(updateUserExpertMode({ userExpertMode: true })); + } + }); +} + +var NetworkContextName = 'NETWORK'; +var IS_IN_IFRAME = window.parent !== window; +// 30 minutes, denominated in seconds +var DEFAULT_DEADLINE_FROM_NOW = 60 * 30; +var L2_DEADLINE_FROM_NOW = 60 * 5; +// transaction popup dismisal amounts +var DEFAULT_TXN_DISMISS_MS = 25000; +var L2_TXN_DISMISS_MS = 5000; +// used for rewards deadlines +JSBI.BigInt(60 * 60 * 24 * 7); +JSBI.BigInt(0); +// one basis JSBI.BigInt +var BIPS_BASE = JSBI.BigInt(10000); +new Percent(JSBI.BigInt(1), BIPS_BASE); +// used for warning states +var ALLOWED_PRICE_IMPACT_LOW = new Percent(JSBI.BigInt(100), BIPS_BASE); // 1% +var ALLOWED_PRICE_IMPACT_MEDIUM = new Percent(JSBI.BigInt(300), BIPS_BASE); // 3% +var ALLOWED_PRICE_IMPACT_HIGH = new Percent(JSBI.BigInt(500), BIPS_BASE); // 5% +// if the price slippage exceeds this number, force the user to type 'confirm' to execute +var PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN = new Percent(JSBI.BigInt(1000), BIPS_BASE); // 10% +// for non expert mode disable swaps above this +var BLOCKED_PRICE_IMPACT_NON_EXPERT = new Percent(JSBI.BigInt(1500), BIPS_BASE); // 15% +var BETTER_TRADE_LESS_HOPS_THRESHOLD = new Percent(JSBI.BigInt(50), BIPS_BASE); +var ZERO_PERCENT = new Percent('0'); +new Percent(JSBI.BigInt(200), BIPS_BASE); +var ONE_HUNDRED_PERCENT = new Percent('1'); + +function useActiveWeb3React() { + // if (false) { + // return useWidgetsWeb3React() + // } + var interfaceContext = useWeb3React(); + var interfaceNetworkContext = useWeb3React(NetworkContextName); + if (interfaceContext.active) { + return interfaceContext; + } + return interfaceNetworkContext; +} + +var Circle$1 = "data:image/svg+xml,%3Csvg%20width%3D%2294%22%20height%3D%2294%22%20viewBox%3D%220%200%2094%2094%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%20%20%3Cpath%20d%3D%22M92%2047C92%2022.1472%2071.8528%202%2047%202C22.1472%202%202%2022.1472%202%2047C2%2071.8528%2022.1472%2092%2047%2092%22%20stroke%3D%22%232172E5%22%20stroke-width%3D%223%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E"; + +var tokenLogo = "data:image/png;base64,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"; + +// returns the checksummed address if the address is valid, otherwise returns false +function isAddress(value) { + try { + return getAddress(value); + } + catch (_a) { + return false; + } +} +// shorten the checksummed version of the input address to have 0x + 4 characters at start and end +function shortenAddress(address, chars) { + if (chars === void 0) { chars = 4; } + var parsed = isAddress(address); + if (!parsed) { + throw Error("Invalid 'address' parameter '" + address + "'."); + } + return parsed.substring(0, chars + 2) + "..." + parsed.substring(42 - chars); +} +// account is not optional +function getSigner(library, account) { + return library.getSigner(account).connectUnchecked(); +} +// account is optional +function getProviderOrSigner(library, account) { + return account ? getSigner(library, account) : library; +} +// account is optional +function getContract(address, ABI, library, account) { + if (!isAddress(address) || address === AddressZero) { + throw Error("Invalid 'address' parameter '" + address + "'."); + } + return new Contract(address, ABI, getProviderOrSigner(library, account)); +} +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} +function isTokenOnList(chainTokenMap, token) { + var _a; + return Boolean((token === null || token === void 0 ? void 0 : token.isToken) && ((_a = chainTokenMap[token.chainId]) === null || _a === void 0 ? void 0 : _a[token.address])); +} + +/** + * Debounces updates to a value. + * Non-primitives *must* wrap the value in useMemo, or the value will be updated due to referential inequality. + */ +// modified from https://usehooks.com/useDebounce/ +function useDebounce(value, delay) { + var _a = __read(useState(value), 2), debouncedValue = _a[0], setDebouncedValue = _a[1]; + useEffect(function () { + // Update debounced value after delay + var handler = setTimeout(function () { + setDebouncedValue(value); + }, delay); + // Cancel the timeout if value changes (also on delay change or unmount) + // This is how we prevent debounced value from updating if value is changed ... + // .. within the delay period. Timeout gets cleared and restarted. + return function () { + clearTimeout(handler); + }; + }, [value, delay]); + return debouncedValue; +} + +var VISIBILITY_STATE_SUPPORTED = 'visibilityState' in document; +function isWindowVisible() { + return !VISIBILITY_STATE_SUPPORTED || document.visibilityState !== 'hidden'; +} +/** + * Returns whether the window is currently visible to the user. + */ +function useIsWindowVisible() { + var _a = __read(useState(isWindowVisible()), 2), focused = _a[0], setFocused = _a[1]; + var listener = useCallback(function () { + setFocused(isWindowVisible()); + }, [setFocused]); + useEffect(function () { + if (!VISIBILITY_STATE_SUPPORTED) + return undefined; + document.addEventListener('visibilitychange', listener); + return function () { + document.removeEventListener('visibilitychange', listener); + }; + }, [listener]); + return focused; +} + +function useBlock() { + var _a = useActiveWeb3React(), chainId = _a.chainId, library = _a.library; + var windowVisible = useIsWindowVisible(); + var _b = __read(useState({ chainId: chainId }), 2), state = _b[0], setState = _b[1]; + var onBlock = useCallback(function (block) { + setState(function (state) { + if (state.chainId === chainId) { + if (typeof state.block !== 'number') + return { chainId: chainId, block: block }; + return { chainId: chainId, block: Math.max(block, state.block) }; + } + return state; + }); + }, [chainId]); + useEffect(function () { + if (library && chainId && windowVisible) { + setState({ chainId: chainId }); + library + .getBlockNumber() + .then(onBlock) + .catch(function (error) { + console.error("Failed to get block number for chainId " + chainId, error); + }); + library.on('block', onBlock); + return function () { + library.removeListener('block', onBlock); + }; + } + return undefined; + }, [chainId, library, onBlock, windowVisible]); + var debouncedBlock = useDebounce(state.block, 100); + return state.block ? debouncedBlock : undefined; +} +var blockAtom = atom(undefined); +function BlockUpdater() { + var setBlock = useUpdateAtom(blockAtom); + var block = useBlock(); + useEffect(function () { + setBlock(block); + }, [block, setBlock]); + return null; +} +/** Requires that BlockUpdater be installed in the DOM tree. */ +function useBlockNumber() { + var chainId = useActiveWeb3React().chainId; + var block = useAtomValue(blockAtom); + return chainId ? block : undefined; +} +function useFastForwardBlockNumber() { + return useUpdateAtom(blockAtom); +} + +var abi$6 = [ + { + inputs: [ + { + internalType: "address", + name: "_rewardsDistribution", + type: "address" + }, + { + internalType: "address", + name: "_rewardsToken", + type: "address" + }, + { + internalType: "address", + name: "_stakingToken", + type: "address" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint256", + name: "reward", + type: "uint256" + } + ], + name: "RewardAdded", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "user", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "reward", + type: "uint256" + } + ], + name: "RewardPaid", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "user", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "Staked", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "user", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "Withdrawn", + type: "event" + }, + { + constant: true, + inputs: [ + { + internalType: "address", + name: "account", + type: "address" + } + ], + name: "balanceOf", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "address", + name: "account", + type: "address" + } + ], + name: "earned", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + ], + name: "exit", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + ], + name: "getReward", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "getRewardForDuration", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "lastTimeRewardApplicable", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "lastUpdateTime", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "uint256", + name: "reward", + type: "uint256" + } + ], + name: "notifyRewardAmount", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "periodFinish", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "rewardPerToken", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "rewardPerTokenStored", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "rewardRate", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "rewards", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "rewardsDistribution", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "rewardsDuration", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "rewardsToken", + outputs: [ + { + internalType: "contract IERC20", + name: "", + type: "address" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "stake", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + }, + { + internalType: "uint8", + name: "v", + type: "uint8" + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32" + } + ], + name: "stakeWithPermit", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "stakingToken", + outputs: [ + { + internalType: "contract IERC20", + name: "", + type: "address" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "totalSupply", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "userRewardPerTokenPaid", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "withdraw", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + } +]; + +var abi$5 = [ + { + inputs: [ + { + internalType: "address", + name: "token_", + type: "address" + }, + { + internalType: "bytes32", + name: "merkleRoot_", + type: "bytes32" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint256", + name: "index", + type: "uint256" + }, + { + indexed: false, + internalType: "address", + name: "account", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "Claimed", + type: "event" + }, + { + inputs: [ + { + internalType: "uint256", + name: "index", + type: "uint256" + }, + { + internalType: "address", + name: "account", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + }, + { + internalType: "bytes32[]", + name: "merkleProof", + type: "bytes32[]" + } + ], + name: "claim", + outputs: [ + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "index", + type: "uint256" + } + ], + name: "isClaimed", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + ], + name: "merkleRoot", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + ], + name: "token", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + } +]; + +var abi$4 = [ + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "owner", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "spender", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "Approval", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "sender", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "amount0", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "amount1", + type: "uint256" + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address" + } + ], + name: "Burn", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "sender", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "amount0", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "amount1", + type: "uint256" + } + ], + name: "Mint", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "sender", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "amount0In", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "amount1In", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "amount0Out", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "amount1Out", + type: "uint256" + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address" + } + ], + name: "Swap", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint112", + name: "reserve0", + type: "uint112" + }, + { + indexed: false, + internalType: "uint112", + name: "reserve1", + type: "uint112" + } + ], + name: "Sync", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "from", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "Transfer", + type: "event" + }, + { + constant: true, + inputs: [ + ], + name: "DOMAIN_SEPARATOR", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "MINIMUM_LIQUIDITY", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "pure", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "PERMIT_TYPEHASH", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + payable: false, + stateMutability: "pure", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "spender", + type: "address" + } + ], + name: "allowance", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "approve", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + } + ], + name: "balanceOf", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "address", + name: "to", + type: "address" + } + ], + name: "burn", + outputs: [ + { + internalType: "uint256", + name: "amount0", + type: "uint256" + }, + { + internalType: "uint256", + name: "amount1", + type: "uint256" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "decimals", + outputs: [ + { + internalType: "uint8", + name: "", + type: "uint8" + } + ], + payable: false, + stateMutability: "pure", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "factory", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "getReserves", + outputs: [ + { + internalType: "uint112", + name: "reserve0", + type: "uint112" + }, + { + internalType: "uint112", + name: "reserve1", + type: "uint112" + }, + { + internalType: "uint32", + name: "blockTimestampLast", + type: "uint32" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "address", + name: "", + type: "address" + }, + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "initialize", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "kLast", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "address", + name: "to", + type: "address" + } + ], + name: "mint", + outputs: [ + { + internalType: "uint256", + name: "liquidity", + type: "uint256" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "name", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + payable: false, + stateMutability: "pure", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + } + ], + name: "nonces", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + }, + { + internalType: "uint8", + name: "v", + type: "uint8" + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32" + } + ], + name: "permit", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "price0CumulativeLast", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "price1CumulativeLast", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "address", + name: "to", + type: "address" + } + ], + name: "skim", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "uint256", + name: "amount0Out", + type: "uint256" + }, + { + internalType: "uint256", + name: "amount1Out", + type: "uint256" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "swap", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "symbol", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + payable: false, + stateMutability: "pure", + type: "function" + }, + { + constant: false, + inputs: [ + ], + name: "sync", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "token0", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "token1", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "totalSupply", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "transfer", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "address", + name: "from", + type: "address" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "transferFrom", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + } +]; + +var abi$3 = [ + { + inputs: [ + ], + name: "WETH", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "tokenA", + type: "address" + }, + { + internalType: "address", + name: "tokenB", + type: "address" + }, + { + internalType: "uint256", + name: "amountADesired", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountBDesired", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountAMin", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountBMin", + type: "uint256" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "addLiquidity", + outputs: [ + { + internalType: "uint256", + name: "amountA", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountB", + type: "uint256" + }, + { + internalType: "uint256", + name: "liquidity", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address" + }, + { + internalType: "uint256", + name: "amountTokenDesired", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountTokenMin", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountETHMin", + type: "uint256" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "addLiquidityETH", + outputs: [ + { + internalType: "uint256", + name: "amountToken", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountETH", + type: "uint256" + }, + { + internalType: "uint256", + name: "liquidity", + type: "uint256" + } + ], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + ], + name: "factory", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountOut", + type: "uint256" + }, + { + internalType: "uint256", + name: "reserveIn", + type: "uint256" + }, + { + internalType: "uint256", + name: "reserveOut", + type: "uint256" + } + ], + name: "getAmountIn", + outputs: [ + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + }, + { + internalType: "uint256", + name: "reserveIn", + type: "uint256" + }, + { + internalType: "uint256", + name: "reserveOut", + type: "uint256" + } + ], + name: "getAmountOut", + outputs: [ + { + internalType: "uint256", + name: "amountOut", + type: "uint256" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountOut", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + } + ], + name: "getAmountsIn", + outputs: [ + { + internalType: "uint256[]", + name: "amounts", + type: "uint256[]" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + } + ], + name: "getAmountsOut", + outputs: [ + { + internalType: "uint256[]", + name: "amounts", + type: "uint256[]" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountA", + type: "uint256" + }, + { + internalType: "uint256", + name: "reserveA", + type: "uint256" + }, + { + internalType: "uint256", + name: "reserveB", + type: "uint256" + } + ], + name: "quote", + outputs: [ + { + internalType: "uint256", + name: "amountB", + type: "uint256" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "tokenA", + type: "address" + }, + { + internalType: "address", + name: "tokenB", + type: "address" + }, + { + internalType: "uint256", + name: "liquidity", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountAMin", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountBMin", + type: "uint256" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "removeLiquidity", + outputs: [ + { + internalType: "uint256", + name: "amountA", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountB", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address" + }, + { + internalType: "uint256", + name: "liquidity", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountTokenMin", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountETHMin", + type: "uint256" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "removeLiquidityETH", + outputs: [ + { + internalType: "uint256", + name: "amountToken", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountETH", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address" + }, + { + internalType: "uint256", + name: "liquidity", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountTokenMin", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountETHMin", + type: "uint256" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "removeLiquidityETHSupportingFeeOnTransferTokens", + outputs: [ + { + internalType: "uint256", + name: "amountETH", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address" + }, + { + internalType: "uint256", + name: "liquidity", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountTokenMin", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountETHMin", + type: "uint256" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + }, + { + internalType: "bool", + name: "approveMax", + type: "bool" + }, + { + internalType: "uint8", + name: "v", + type: "uint8" + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32" + } + ], + name: "removeLiquidityETHWithPermit", + outputs: [ + { + internalType: "uint256", + name: "amountToken", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountETH", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address" + }, + { + internalType: "uint256", + name: "liquidity", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountTokenMin", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountETHMin", + type: "uint256" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + }, + { + internalType: "bool", + name: "approveMax", + type: "bool" + }, + { + internalType: "uint8", + name: "v", + type: "uint8" + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32" + } + ], + name: "removeLiquidityETHWithPermitSupportingFeeOnTransferTokens", + outputs: [ + { + internalType: "uint256", + name: "amountETH", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "tokenA", + type: "address" + }, + { + internalType: "address", + name: "tokenB", + type: "address" + }, + { + internalType: "uint256", + name: "liquidity", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountAMin", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountBMin", + type: "uint256" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + }, + { + internalType: "bool", + name: "approveMax", + type: "bool" + }, + { + internalType: "uint8", + name: "v", + type: "uint8" + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32" + } + ], + name: "removeLiquidityWithPermit", + outputs: [ + { + internalType: "uint256", + name: "amountA", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountB", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountOut", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "swapETHForExactTokens", + outputs: [ + { + internalType: "uint256[]", + name: "amounts", + type: "uint256[]" + } + ], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountOutMin", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "swapExactETHForTokens", + outputs: [ + { + internalType: "uint256[]", + name: "amounts", + type: "uint256[]" + } + ], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountOutMin", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "swapExactETHForTokensSupportingFeeOnTransferTokens", + outputs: [ + ], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountOutMin", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "swapExactTokensForETH", + outputs: [ + { + internalType: "uint256[]", + name: "amounts", + type: "uint256[]" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountOutMin", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "swapExactTokensForETHSupportingFeeOnTransferTokens", + outputs: [ + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountOutMin", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "swapExactTokensForTokens", + outputs: [ + { + internalType: "uint256[]", + name: "amounts", + type: "uint256[]" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountOutMin", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "swapExactTokensForTokensSupportingFeeOnTransferTokens", + outputs: [ + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountOut", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountInMax", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "swapTokensForExactETH", + outputs: [ + { + internalType: "uint256[]", + name: "amounts", + type: "uint256[]" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountOut", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountInMax", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "swapTokensForExactTokens", + outputs: [ + { + internalType: "uint256[]", + name: "amounts", + type: "uint256[]" + } + ], + stateMutability: "nonpayable", + type: "function" + } +]; + +var abi$2 = [ + { + inputs: [ + { + internalType: "address", + name: "_factory", + type: "address" + }, + { + internalType: "address", + name: "_WETH9", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + inputs: [ + ], + name: "WETH9", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + ], + name: "factory", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes", + name: "path", + type: "bytes" + }, + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + } + ], + name: "quoteExactInput", + outputs: [ + { + internalType: "uint256", + name: "amountOut", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "tokenIn", + type: "address" + }, + { + internalType: "address", + name: "tokenOut", + type: "address" + }, + { + internalType: "uint24", + name: "fee", + type: "uint24" + }, + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + }, + { + internalType: "uint160", + name: "sqrtPriceLimitX96", + type: "uint160" + } + ], + name: "quoteExactInputSingle", + outputs: [ + { + internalType: "uint256", + name: "amountOut", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes", + name: "path", + type: "bytes" + }, + { + internalType: "uint256", + name: "amountOut", + type: "uint256" + } + ], + name: "quoteExactOutput", + outputs: [ + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "tokenIn", + type: "address" + }, + { + internalType: "address", + name: "tokenOut", + type: "address" + }, + { + internalType: "uint24", + name: "fee", + type: "uint24" + }, + { + internalType: "uint256", + name: "amountOut", + type: "uint256" + }, + { + internalType: "uint160", + name: "sqrtPriceLimitX96", + type: "uint160" + } + ], + name: "quoteExactOutputSingle", + outputs: [ + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "int256", + name: "amount0Delta", + type: "int256" + }, + { + internalType: "int256", + name: "amount1Delta", + type: "int256" + }, + { + internalType: "bytes", + name: "path", + type: "bytes" + } + ], + name: "uniswapV3SwapCallback", + outputs: [ + ], + stateMutability: "view", + type: "function" + } +]; + +var abi$1 = [ + { + inputs: [ + ], + name: "getCurrentBlockTimestamp", + outputs: [ + { + internalType: "uint256", + name: "timestamp", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "addr", + type: "address" + } + ], + name: "getEthBalance", + outputs: [ + { + internalType: "uint256", + name: "balance", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "uint256", + name: "gasLimit", + type: "uint256" + }, + { + internalType: "bytes", + name: "callData", + type: "bytes" + } + ], + internalType: "struct UniswapInterfaceMulticall.Call[]", + name: "calls", + type: "tuple[]" + } + ], + name: "multicall", + outputs: [ + { + internalType: "uint256", + name: "blockNumber", + type: "uint256" + }, + { + components: [ + { + internalType: "bool", + name: "success", + type: "bool" + }, + { + internalType: "uint256", + name: "gasUsed", + type: "uint256" + }, + { + internalType: "bytes", + name: "returnData", + type: "bytes" + } + ], + internalType: "struct UniswapInterfaceMulticall.Result[]", + name: "returnData", + type: "tuple[]" + } + ], + stateMutability: "nonpayable", + type: "function" + } +]; + +var ARGENT_WALLET_DETECTOR_ABI = [ + { + inputs: [ + { + internalType: "bytes32[]", + name: "_codes", + type: "bytes32[]" + }, + { + internalType: "address[]", + name: "_implementations", + type: "address[]" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "code", + type: "bytes32" + } + ], + name: "CodeAdded", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "implementation", + type: "address" + } + ], + name: "ImplementationAdded", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "_newOwner", + type: "address" + } + ], + name: "OwnerChanged", + type: "event" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + name: "acceptedCodes", + outputs: [ + { + internalType: "bool", + name: "exists", + type: "bool" + }, + { + internalType: "uint128", + name: "index", + type: "uint128" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "acceptedImplementations", + outputs: [ + { + internalType: "bool", + name: "exists", + type: "bool" + }, + { + internalType: "uint128", + name: "index", + type: "uint128" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "_code", + type: "bytes32" + } + ], + name: "addCode", + outputs: [ + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "_argentWallet", + type: "address" + } + ], + name: "addCodeAndImplementationFromWallet", + outputs: [ + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "_impl", + type: "address" + } + ], + name: "addImplementation", + outputs: [ + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "_newOwner", + type: "address" + } + ], + name: "changeOwner", + outputs: [ + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + ], + name: "getCodes", + outputs: [ + { + internalType: "bytes32[]", + name: "", + type: "bytes32[]" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + ], + name: "getImplementations", + outputs: [ + { + internalType: "address[]", + name: "", + type: "address[]" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "_wallet", + type: "address" + } + ], + name: "isArgentWallet", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + ], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + } +]; + +var EIP_2612 = [ + { + constant: true, + inputs: [ + { + name: "owner", + type: "address" + } + ], + name: "nonces", + outputs: [ + { + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "DOMAIN_SEPARATOR", + outputs: [ + { + name: "", + type: "bytes32" + } + ], + payable: false, + stateMutability: "view", + type: "function" + } +]; + +var ENS_PUBLIC_RESOLVER_ABI = [ + { + inputs: [ + { + internalType: "contract ENS", + name: "_ens", + type: "address" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: true, + internalType: "uint256", + name: "contentType", + type: "uint256" + } + ], + name: "ABIChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "address", + name: "a", + type: "address" + } + ], + name: "AddrChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "uint256", + name: "coinType", + type: "uint256" + }, + { + indexed: false, + internalType: "bytes", + name: "newAddress", + type: "bytes" + } + ], + name: "AddressChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: true, + internalType: "address", + name: "owner", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "target", + type: "address" + }, + { + indexed: false, + internalType: "bool", + name: "isAuthorised", + type: "bool" + } + ], + name: "AuthorisationChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "bytes", + name: "hash", + type: "bytes" + } + ], + name: "ContenthashChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "bytes", + name: "name", + type: "bytes" + }, + { + indexed: false, + internalType: "uint16", + name: "resource", + type: "uint16" + }, + { + indexed: false, + internalType: "bytes", + name: "record", + type: "bytes" + } + ], + name: "DNSRecordChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "bytes", + name: "name", + type: "bytes" + }, + { + indexed: false, + internalType: "uint16", + name: "resource", + type: "uint16" + } + ], + name: "DNSRecordDeleted", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "DNSZoneCleared", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: true, + internalType: "bytes4", + name: "interfaceID", + type: "bytes4" + }, + { + indexed: false, + internalType: "address", + name: "implementer", + type: "address" + } + ], + name: "InterfaceChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "string", + name: "name", + type: "string" + } + ], + name: "NameChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "bytes32", + name: "x", + type: "bytes32" + }, + { + indexed: false, + internalType: "bytes32", + name: "y", + type: "bytes32" + } + ], + name: "PubkeyChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: true, + internalType: "string", + name: "indexedKey", + type: "string" + }, + { + indexed: false, + internalType: "string", + name: "key", + type: "string" + } + ], + name: "TextChanged", + type: "event" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "uint256", + name: "contentTypes", + type: "uint256" + } + ], + name: "ABI", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + }, + { + internalType: "bytes", + name: "", + type: "bytes" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "addr", + outputs: [ + { + internalType: "address payable", + name: "", + type: "address" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + }, + { + internalType: "address", + name: "", + type: "address" + }, + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "authorisations", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "clearDNSZone", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "contenthash", + outputs: [ + { + internalType: "bytes", + name: "", + type: "bytes" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "name", + type: "bytes32" + }, + { + internalType: "uint16", + name: "resource", + type: "uint16" + } + ], + name: "dnsRecord", + outputs: [ + { + internalType: "bytes", + name: "", + type: "bytes" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "name", + type: "bytes32" + } + ], + name: "hasDNSRecords", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "bytes4", + name: "interfaceID", + type: "bytes4" + } + ], + name: "interfaceImplementer", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "name", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "pubkey", + outputs: [ + { + internalType: "bytes32", + name: "x", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "y", + type: "bytes32" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "uint256", + name: "contentType", + type: "uint256" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "setABI", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "uint256", + name: "coinType", + type: "uint256" + }, + { + internalType: "bytes", + name: "a", + type: "bytes" + } + ], + name: "setAddr", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "address", + name: "a", + type: "address" + } + ], + name: "setAddr", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "bool", + name: "isAuthorised", + type: "bool" + } + ], + name: "setAuthorisation", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "bytes", + name: "hash", + type: "bytes" + } + ], + name: "setContenthash", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "setDNSRecords", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "bytes4", + name: "interfaceID", + type: "bytes4" + }, + { + internalType: "address", + name: "implementer", + type: "address" + } + ], + name: "setInterface", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "string", + name: "name", + type: "string" + } + ], + name: "setName", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "x", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "y", + type: "bytes32" + } + ], + name: "setPubkey", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "string", + name: "key", + type: "string" + }, + { + internalType: "string", + name: "value", + type: "string" + } + ], + name: "setText", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes4", + name: "interfaceID", + type: "bytes4" + } + ], + name: "supportsInterface", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "pure", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "string", + name: "key", + type: "string" + } + ], + name: "text", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + payable: false, + stateMutability: "view", + type: "function" + } +]; + +var ENS_ABI = [ + { + inputs: [ + { + internalType: "contract ENS", + name: "_old", + type: "address" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "owner", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "operator", + type: "address" + }, + { + indexed: false, + internalType: "bool", + name: "approved", + type: "bool" + } + ], + name: "ApprovalForAll", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: true, + internalType: "bytes32", + name: "label", + type: "bytes32" + }, + { + indexed: false, + internalType: "address", + name: "owner", + type: "address" + } + ], + name: "NewOwner", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "address", + name: "resolver", + type: "address" + } + ], + name: "NewResolver", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "uint64", + name: "ttl", + type: "uint64" + } + ], + name: "NewTTL", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "address", + name: "owner", + type: "address" + } + ], + name: "Transfer", + type: "event" + }, + { + constant: true, + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "operator", + type: "address" + } + ], + name: "isApprovedForAll", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "old", + outputs: [ + { + internalType: "contract ENS", + name: "", + type: "address" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "recordExists", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "resolver", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "address", + name: "operator", + type: "address" + }, + { + internalType: "bool", + name: "approved", + type: "bool" + } + ], + name: "setApprovalForAll", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "address", + name: "owner", + type: "address" + } + ], + name: "setOwner", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "resolver", + type: "address" + }, + { + internalType: "uint64", + name: "ttl", + type: "uint64" + } + ], + name: "setRecord", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "address", + name: "resolver", + type: "address" + } + ], + name: "setResolver", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "label", + type: "bytes32" + }, + { + internalType: "address", + name: "owner", + type: "address" + } + ], + name: "setSubnodeOwner", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "label", + type: "bytes32" + }, + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "resolver", + type: "address" + }, + { + internalType: "uint64", + name: "ttl", + type: "uint64" + } + ], + name: "setSubnodeRecord", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "uint64", + name: "ttl", + type: "uint64" + } + ], + name: "setTTL", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "ttl", + outputs: [ + { + internalType: "uint64", + name: "", + type: "uint64" + } + ], + payable: false, + stateMutability: "view", + type: "function" + } +]; + +var ERC20ABI = [ + { + constant: true, + inputs: [ + ], + name: "name", + outputs: [ + { + name: "", + type: "string" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + name: "_spender", + type: "address" + }, + { + name: "_value", + type: "uint256" + } + ], + name: "approve", + outputs: [ + { + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "totalSupply", + outputs: [ + { + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + name: "_from", + type: "address" + }, + { + name: "_to", + type: "address" + }, + { + name: "_value", + type: "uint256" + } + ], + name: "transferFrom", + outputs: [ + { + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "decimals", + outputs: [ + { + name: "", + type: "uint8" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + name: "_owner", + type: "address" + } + ], + name: "balanceOf", + outputs: [ + { + name: "balance", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "symbol", + outputs: [ + { + name: "", + type: "string" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + name: "_to", + type: "address" + }, + { + name: "_value", + type: "uint256" + } + ], + name: "transfer", + outputs: [ + { + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + { + name: "_owner", + type: "address" + }, + { + name: "_spender", + type: "address" + } + ], + name: "allowance", + outputs: [ + { + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + payable: true, + stateMutability: "payable", + type: "fallback" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: "owner", + type: "address" + }, + { + indexed: true, + name: "spender", + type: "address" + }, + { + indexed: false, + name: "value", + type: "uint256" + } + ], + name: "Approval", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: "from", + type: "address" + }, + { + indexed: true, + name: "to", + type: "address" + }, + { + indexed: false, + name: "value", + type: "uint256" + } + ], + name: "Transfer", + type: "event" + } +]; + +var ERC20_BYTES32_ABI = [ + { + constant: true, + inputs: [ + ], + name: "name", + outputs: [ + { + name: "", + type: "bytes32" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "symbol", + outputs: [ + { + name: "", + type: "bytes32" + } + ], + payable: false, + stateMutability: "view", + type: "function" + } +]; + +var ERC721_ABI = [ + { + inputs: [ + { + internalType: "uint256", + name: "tokenId", + type: "uint256" + } + ], + name: "ownerOf", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "tokenId", + type: "uint256" + } + ], + name: "tokenURI", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "view", + type: "function" + } +]; + +var ERC1155_ABI = [ + { + constant: true, + inputs: [ + { + internalType: "address", + name: "_owner", + type: "address" + }, + { + internalType: "uint256", + name: "_id", + type: "uint256" + } + ], + name: "balanceOf", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "uint256", + name: "_id", + type: "uint256" + } + ], + name: "uri", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + payable: false, + stateMutability: "view", + type: "function" + } +]; + +var WETH_ABI = [ + { + constant: true, + inputs: [ + ], + name: "name", + outputs: [ + { + name: "", + type: "string" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + name: "guy", + type: "address" + }, + { + name: "wad", + type: "uint256" + } + ], + name: "approve", + outputs: [ + { + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "totalSupply", + outputs: [ + { + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + name: "src", + type: "address" + }, + { + name: "dst", + type: "address" + }, + { + name: "wad", + type: "uint256" + } + ], + name: "transferFrom", + outputs: [ + { + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + name: "wad", + type: "uint256" + } + ], + name: "withdraw", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "decimals", + outputs: [ + { + name: "", + type: "uint8" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + name: "", + type: "address" + } + ], + name: "balanceOf", + outputs: [ + { + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "symbol", + outputs: [ + { + name: "", + type: "string" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + name: "dst", + type: "address" + }, + { + name: "wad", + type: "uint256" + } + ], + name: "transfer", + outputs: [ + { + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + ], + name: "deposit", + outputs: [ + ], + payable: true, + stateMutability: "payable", + type: "function" + }, + { + constant: true, + inputs: [ + { + name: "", + type: "address" + }, + { + name: "", + type: "address" + } + ], + name: "allowance", + outputs: [ + { + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + payable: true, + stateMutability: "payable", + type: "fallback" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: "src", + type: "address" + }, + { + indexed: true, + name: "guy", + type: "address" + }, + { + indexed: false, + name: "wad", + type: "uint256" + } + ], + name: "Approval", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: "src", + type: "address" + }, + { + indexed: true, + name: "dst", + type: "address" + }, + { + indexed: false, + name: "wad", + type: "uint256" + } + ], + name: "Transfer", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: "dst", + type: "address" + }, + { + indexed: false, + name: "wad", + type: "uint256" + } + ], + name: "Deposit", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: "src", + type: "address" + }, + { + indexed: false, + name: "wad", + type: "uint256" + } + ], + name: "Withdrawal", + type: "event" + } +]; + +var _a$h; +/** + * List of all the networks supported by the Uniswap Interface + */ +var SupportedChainId; +(function (SupportedChainId) { + SupportedChainId[SupportedChainId["MAINNET"] = 1] = "MAINNET"; + SupportedChainId[SupportedChainId["ROPSTEN"] = 3] = "ROPSTEN"; + SupportedChainId[SupportedChainId["RINKEBY"] = 4] = "RINKEBY"; + SupportedChainId[SupportedChainId["GOERLI"] = 5] = "GOERLI"; + SupportedChainId[SupportedChainId["KOVAN"] = 42] = "KOVAN"; + SupportedChainId[SupportedChainId["ARBITRUM_ONE"] = 42161] = "ARBITRUM_ONE"; + SupportedChainId[SupportedChainId["ARBITRUM_RINKEBY"] = 421611] = "ARBITRUM_RINKEBY"; + SupportedChainId[SupportedChainId["OPTIMISM"] = 10] = "OPTIMISM"; + SupportedChainId[SupportedChainId["OPTIMISTIC_KOVAN"] = 69] = "OPTIMISTIC_KOVAN"; + SupportedChainId[SupportedChainId["POLYGON"] = 137] = "POLYGON"; + SupportedChainId[SupportedChainId["POLYGON_MUMBAI"] = 80001] = "POLYGON_MUMBAI"; +})(SupportedChainId || (SupportedChainId = {})); +var CHAIN_IDS_TO_NAMES = (_a$h = {}, + _a$h[SupportedChainId.MAINNET] = 'mainnet', + _a$h[SupportedChainId.ROPSTEN] = 'ropsten', + _a$h[SupportedChainId.RINKEBY] = 'rinkeby', + _a$h[SupportedChainId.GOERLI] = 'goerli', + _a$h[SupportedChainId.KOVAN] = 'kovan', + _a$h[SupportedChainId.POLYGON] = 'polygon', + _a$h[SupportedChainId.POLYGON_MUMBAI] = 'polygon_mumbai', + _a$h[SupportedChainId.ARBITRUM_ONE] = 'arbitrum', + _a$h[SupportedChainId.ARBITRUM_RINKEBY] = 'arbitrum_rinkeby', + _a$h[SupportedChainId.OPTIMISM] = 'optimism', + _a$h[SupportedChainId.OPTIMISTIC_KOVAN] = 'optimistic_kovan', + _a$h); +/** + * Array of all the supported chain IDs + */ +var ALL_SUPPORTED_CHAIN_IDS = Object.values(SupportedChainId).filter(function (id) { return typeof id === 'number'; }); +var SUPPORTED_GAS_ESTIMATE_CHAIN_IDS = [SupportedChainId.MAINNET, SupportedChainId.POLYGON]; +/** + * All the chain IDs that are running the Ethereum protocol. + */ +[ + SupportedChainId.MAINNET, + SupportedChainId.ROPSTEN, + SupportedChainId.RINKEBY, + SupportedChainId.GOERLI, + SupportedChainId.KOVAN, + SupportedChainId.POLYGON, + SupportedChainId.POLYGON_MUMBAI, +]; +/** + * Controls some L2 specific behavior, e.g. slippage tolerance, special UI behavior. + * The expectation is that all of these networks have immediate transaction confirmation. + */ +var L2_CHAIN_IDS = [ + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, +]; + +var DEFAULT_NETWORKS = [ + SupportedChainId.MAINNET, + SupportedChainId.ROPSTEN, + SupportedChainId.RINKEBY, + SupportedChainId.GOERLI, + SupportedChainId.KOVAN, +]; +function constructSameAddressMap(address, additionalNetworks) { + if (additionalNetworks === void 0) { additionalNetworks = []; } + return DEFAULT_NETWORKS.concat(additionalNetworks).reduce(function (memo, chainId) { + memo[chainId] = address; + return memo; + }, {}); +} + +var _a$g, _b$6, _c$4, _d$3, _e$2, _f$1, _g$1, _h$1; +var UNI_ADDRESS = constructSameAddressMap('0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984'); +var MULTICALL_ADDRESS = __assign(__assign({}, constructSameAddressMap('0x1F98415757620B543A52E61c46B32eB19261F984', [ + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.OPTIMISM, + SupportedChainId.POLYGON_MUMBAI, + SupportedChainId.POLYGON, +])), (_a$g = {}, _a$g[SupportedChainId.ARBITRUM_ONE] = '0xadF885960B47eA2CD9B55E6DAc6B42b7Cb2806dB', _a$g[SupportedChainId.ARBITRUM_RINKEBY] = '0xa501c031958F579dB7676fF1CE78AD305794d579', _a$g)); +var V2_FACTORY_ADDRESSES = constructSameAddressMap(FACTORY_ADDRESS); +var V2_ROUTER_ADDRESS = constructSameAddressMap('0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D'); +var V3_ROUTER_ADDRESS = constructSameAddressMap('0xE592427A0AEce92De3Edee1F18E0157C05861564', [ + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON, + SupportedChainId.POLYGON_MUMBAI, +]); +var SWAP_ROUTER_ADDRESSES = constructSameAddressMap('0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45', [ + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON, + SupportedChainId.POLYGON_MUMBAI, +]); +/** + * The oldest V0 governance address + */ +constructSameAddressMap('0x5e4be8Bc9637f0EAA1A755019e06A68ce081D58F'); +/** + * The older V1 governance address + */ +(_b$6 = {}, + _b$6[SupportedChainId.MAINNET] = '0xC4e172459f1E7939D522503B81AFAaC1014CE6F6', + _b$6); +/** + * The latest governor bravo that is currently admin of timelock + */ +(_c$4 = {}, + _c$4[SupportedChainId.MAINNET] = '0x408ED6354d4973f66138C91495F2f2FCbd8724C3', + _c$4); +constructSameAddressMap('0x1a9C8182C09F50C8318d769245beA52c32BE35BC'); +var MERKLE_DISTRIBUTOR_ADDRESS = (_d$3 = {}, + _d$3[SupportedChainId.MAINNET] = '0x090D4613473dEE047c3f2706764f49E0821D256e', + _d$3); +var ARGENT_WALLET_DETECTOR_ADDRESS = (_e$2 = {}, + _e$2[SupportedChainId.MAINNET] = '0xeca4B0bDBf7c55E9b7925919d03CbF8Dc82537E8', + _e$2); +var V3_CORE_FACTORY_ADDRESSES = constructSameAddressMap(FACTORY_ADDRESS$1, [ + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON_MUMBAI, + SupportedChainId.POLYGON, +]); +var QUOTER_ADDRESSES = constructSameAddressMap('0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6', [ + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON_MUMBAI, + SupportedChainId.POLYGON, +]); +constructSameAddressMap('0xC36442b4a4522E871399CD717aBDD847Ab11FE88', [ + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON_MUMBAI, + SupportedChainId.POLYGON, +]); +var ENS_REGISTRAR_ADDRESSES = (_f$1 = {}, + _f$1[SupportedChainId.MAINNET] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', + _f$1[SupportedChainId.ROPSTEN] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', + _f$1[SupportedChainId.GOERLI] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', + _f$1[SupportedChainId.RINKEBY] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', + _f$1); +var SOCKS_CONTROLLER_ADDRESSES = (_g$1 = {}, + _g$1[SupportedChainId.MAINNET] = '0x65770b5283117639760beA3F867b69b3697a91dd', + _g$1); +constructSameAddressMap('0xA5644E29708357803b5A882D272c41cC0dF92B34', [ + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON_MUMBAI, + SupportedChainId.POLYGON, +]); +(_h$1 = {}, + _h$1[SupportedChainId.ARBITRUM_ONE] = '0xbfd8137f7d1516D3ea5cA83523914859ec47F573', + _h$1[SupportedChainId.ARBITRUM_RINKEBY] = '0xbfd8137f7d1516D3ea5cA83523914859ec47F573', + _h$1); + +var _a$f, _b$5; +var AMPL = new Token(SupportedChainId.MAINNET, '0xD46bA6D942050d489DBd938a2C909A5d5039A161', 9, 'AMPL', 'Ampleforth'); +var DAI = new Token(SupportedChainId.MAINNET, '0x6B175474E89094C44Da98b954EedeAC495271d0F', 18, 'DAI', 'Dai Stablecoin'); +var DAI_ARBITRUM_ONE = new Token(SupportedChainId.ARBITRUM_ONE, '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', 18, 'DAI', 'Dai stable coin'); +var DAI_OPTIMISM = new Token(SupportedChainId.OPTIMISM, '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', 18, 'DAI', 'Dai stable coin'); +var USDC = new Token(SupportedChainId.MAINNET, '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', 6, 'USDC', 'USD//C'); +var USDC_ARBITRUM = new Token(SupportedChainId.ARBITRUM_ONE, '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8', 6, 'USDC', 'USD//C'); +var USDC_POLYGON = new Token(SupportedChainId.POLYGON, '0x2791bca1f2de4661ed88a30c99a7a9449aa84174', 6, 'USDC', 'USD//C'); +var DAI_POLYGON = new Token(SupportedChainId.POLYGON, '0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063', 18, 'DAI', 'Dai Stablecoin'); +var USDT_POLYGON = new Token(SupportedChainId.POLYGON, '0xc2132d05d31c914a87c6611c10748aeb04b58e8f', 6, 'USDT', 'Tether USD'); +var WBTC_POLYGON = new Token(SupportedChainId.POLYGON, '0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6', 8, 'WBTC', 'Wrapped BTC'); +var USDC_OPTIMISM = new Token(SupportedChainId.OPTIMISM, '0x7F5c764cBc14f9669B88837ca1490cCa17c31607', 6, 'USDC', 'USD//C'); +var USDT = new Token(SupportedChainId.MAINNET, '0xdAC17F958D2ee523a2206206994597C13D831ec7', 6, 'USDT', 'Tether USD'); +var USDT_ARBITRUM_ONE = new Token(SupportedChainId.ARBITRUM_ONE, '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9', 6, 'USDT', 'Tether USD'); +var USDT_OPTIMISM = new Token(SupportedChainId.OPTIMISM, '0x94b008aA00579c1307B0EF2c499aD98a8ce58e58', 6, 'USDT', 'Tether USD'); +var WBTC = new Token(SupportedChainId.MAINNET, '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', 8, 'WBTC', 'Wrapped BTC'); +var WBTC_ARBITRUM_ONE = new Token(SupportedChainId.ARBITRUM_ONE, '0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f', 8, 'WBTC', 'Wrapped BTC'); +var WBTC_OPTIMISM = new Token(SupportedChainId.OPTIMISM, '0x68f180fcCe6836688e9084f035309E29Bf0A2095', 8, 'WBTC', 'Wrapped BTC'); +var FEI = new Token(SupportedChainId.MAINNET, '0x956F47F50A910163D8BF957Cf5846D573E7f87CA', 18, 'FEI', 'Fei USD'); +var TRIBE = new Token(SupportedChainId.MAINNET, '0xc7283b66Eb1EB5FB86327f08e1B5816b0720212B', 18, 'TRIBE', 'Tribe'); +var FRAX = new Token(SupportedChainId.MAINNET, '0x853d955aCEf822Db058eb8505911ED77F175b99e', 18, 'FRAX', 'Frax'); +var FXS = new Token(SupportedChainId.MAINNET, '0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0', 18, 'FXS', 'Frax Share'); +var renBTC = new Token(SupportedChainId.MAINNET, '0xEB4C2781e4ebA804CE9a9803C67d0893436bB27D', 8, 'renBTC', 'renBTC'); +var ETH2X_FLI = new Token(SupportedChainId.MAINNET, '0xAa6E8127831c9DE45ae56bB1b0d4D4Da6e5665BD', 18, 'ETH2x-FLI', 'ETH 2x Flexible Leverage Index'); +var sETH2 = new Token(SupportedChainId.MAINNET, '0xFe2e637202056d30016725477c5da089Ab0A043A', 18, 'sETH2', 'StakeWise Staked ETH2'); +var rETH2 = new Token(SupportedChainId.MAINNET, '0x20BC832ca081b91433ff6c17f85701B6e92486c5', 18, 'rETH2', 'StakeWise Reward ETH2'); +var SWISE = new Token(SupportedChainId.MAINNET, '0x48C3399719B582dD63eB5AADf12A40B4C3f52FA2', 18, 'SWISE', 'StakeWise'); +var WETH_POLYGON_MUMBAI = new Token(SupportedChainId.POLYGON_MUMBAI, '0xa6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa', 18, 'WETH', 'Wrapped Ether'); +var WETH_POLYGON = new Token(SupportedChainId.POLYGON, '0x7ceb23fd6bc0add59e62ac25578270cff1b9f619', 18, 'WETH', 'Wrapped Ether'); +var UNI = (_a$f = {}, + _a$f[SupportedChainId.MAINNET] = new Token(SupportedChainId.MAINNET, UNI_ADDRESS[1], 18, 'UNI', 'Uniswap'), + _a$f[SupportedChainId.RINKEBY] = new Token(SupportedChainId.RINKEBY, UNI_ADDRESS[4], 18, 'UNI', 'Uniswap'), + _a$f[SupportedChainId.ROPSTEN] = new Token(SupportedChainId.ROPSTEN, UNI_ADDRESS[3], 18, 'UNI', 'Uniswap'), + _a$f[SupportedChainId.GOERLI] = new Token(SupportedChainId.GOERLI, UNI_ADDRESS[5], 18, 'UNI', 'Uniswap'), + _a$f[SupportedChainId.KOVAN] = new Token(SupportedChainId.KOVAN, UNI_ADDRESS[42], 18, 'UNI', 'Uniswap'), + _a$f); +var WRAPPED_NATIVE_CURRENCY = __assign(__assign({}, WETH9), (_b$5 = {}, _b$5[SupportedChainId.OPTIMISM] = new Token(SupportedChainId.OPTIMISM, '0x4200000000000000000000000000000000000006', 18, 'WETH', 'Wrapped Ether'), _b$5[SupportedChainId.OPTIMISTIC_KOVAN] = new Token(SupportedChainId.OPTIMISTIC_KOVAN, '0x4200000000000000000000000000000000000006', 18, 'WETH', 'Wrapped Ether'), _b$5[SupportedChainId.ARBITRUM_ONE] = new Token(SupportedChainId.ARBITRUM_ONE, '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1', 18, 'WETH', 'Wrapped Ether'), _b$5[SupportedChainId.ARBITRUM_RINKEBY] = new Token(SupportedChainId.ARBITRUM_RINKEBY, '0xB47e6A5f8b33b3F17603C83a0535A9dcD7E32681', 18, 'WETH', 'Wrapped Ether'), _b$5[SupportedChainId.POLYGON] = new Token(SupportedChainId.POLYGON, '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270', 18, 'WMATIC', 'Wrapped MATIC'), _b$5[SupportedChainId.POLYGON_MUMBAI] = new Token(SupportedChainId.POLYGON_MUMBAI, '0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889', 18, 'WMATIC', 'Wrapped MATIC'), _b$5)); +function isMatic(chainId) { + return chainId === SupportedChainId.POLYGON_MUMBAI || chainId === SupportedChainId.POLYGON; +} +var MaticNativeCurrency = /** @class */ (function (_super) { + __extends(MaticNativeCurrency, _super); + function MaticNativeCurrency(chainId) { + var _this = this; + if (!isMatic(chainId)) + throw new Error('Not matic'); + _this = _super.call(this, chainId, 18, 'MATIC', 'Polygon Matic') || this; + return _this; + } + MaticNativeCurrency.prototype.equals = function (other) { + return other.isNative && other.chainId === this.chainId; + }; + Object.defineProperty(MaticNativeCurrency.prototype, "wrapped", { + get: function () { + if (!isMatic(this.chainId)) + throw new Error('Not matic'); + return WRAPPED_NATIVE_CURRENCY[this.chainId]; + }, + enumerable: false, + configurable: true + }); + return MaticNativeCurrency; +}(NativeCurrency)); +var ExtendedEther = /** @class */ (function (_super) { + __extends(ExtendedEther, _super); + function ExtendedEther() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(ExtendedEther.prototype, "wrapped", { + get: function () { + if (this.chainId in WRAPPED_NATIVE_CURRENCY) + return WRAPPED_NATIVE_CURRENCY[this.chainId]; + throw new Error('Unsupported chain ID'); + }, + enumerable: false, + configurable: true + }); + ExtendedEther.onChain = function (chainId) { + var _a; + return (_a = this._cachedExtendedEther[chainId]) !== null && _a !== void 0 ? _a : (this._cachedExtendedEther[chainId] = new ExtendedEther(chainId)); + }; + ExtendedEther._cachedExtendedEther = {}; + return ExtendedEther; +}(Ether)); +var cachedNativeCurrency = {}; +function nativeOnChain(chainId) { + var _a; + return ((_a = cachedNativeCurrency[chainId]) !== null && _a !== void 0 ? _a : (cachedNativeCurrency[chainId] = isMatic(chainId) + ? new MaticNativeCurrency(chainId) + : ExtendedEther.onChain(chainId))); +} + +// returns null on errors +function useContract(addressOrAddressMap, ABI, withSignerIfPossible) { + if (withSignerIfPossible === void 0) { withSignerIfPossible = true; } + var _a = useActiveWeb3React(), library = _a.library, account = _a.account, chainId = _a.chainId; + return useMemo(function () { + if (!addressOrAddressMap || !ABI || !library || !chainId) + return null; + var address; + if (typeof addressOrAddressMap === 'string') + address = addressOrAddressMap; + else + address = addressOrAddressMap[chainId]; + if (!address) + return null; + try { + return getContract(address, ABI, library, withSignerIfPossible && account ? account : undefined); + } + catch (error) { + console.error('Failed to get contract', error); + return null; + } + }, [addressOrAddressMap, ABI, library, chainId, withSignerIfPossible, account]); +} +function useTokenContract(tokenAddress, withSignerIfPossible) { + return useContract(tokenAddress, ERC20ABI, withSignerIfPossible); +} +function useWETHContract(withSignerIfPossible) { + var _a; + var chainId = useActiveWeb3React().chainId; + return useContract(chainId ? (_a = WRAPPED_NATIVE_CURRENCY[chainId]) === null || _a === void 0 ? void 0 : _a.address : undefined, WETH_ABI, withSignerIfPossible); +} +function useERC721Contract(nftAddress) { + return useContract(nftAddress, ERC721_ABI, false); +} +function useERC1155Contract(nftAddress) { + return useContract(nftAddress, ERC1155_ABI, false); +} +function useArgentWalletDetectorContract() { + return useContract(ARGENT_WALLET_DETECTOR_ADDRESS, ARGENT_WALLET_DETECTOR_ABI, false); +} +function useENSRegistrarContract(withSignerIfPossible) { + return useContract(ENS_REGISTRAR_ADDRESSES, ENS_ABI, withSignerIfPossible); +} +function useENSResolverContract(address, withSignerIfPossible) { + return useContract(address, ENS_PUBLIC_RESOLVER_ABI, withSignerIfPossible); +} +function useBytes32TokenContract(tokenAddress, withSignerIfPossible) { + return useContract(tokenAddress, ERC20_BYTES32_ABI, withSignerIfPossible); +} +function useEIP2612Contract(tokenAddress) { + return useContract(tokenAddress, EIP_2612, false); +} +function useV2RouterContract() { + return useContract(V2_ROUTER_ADDRESS, abi$3, true); +} +function useInterfaceMulticall() { + return useContract(MULTICALL_ADDRESS, abi$1, false); +} +function useMerkleDistributorContract() { + return useContract(MERKLE_DISTRIBUTOR_ADDRESS, abi$5, true); +} +function useV3Quoter() { + return useContract(QUOTER_ADDRESSES, abi$2); +} + +var _a$e; +var multicall = createMulticall(); +var reducer = combineReducers((_a$e = {}, _a$e[multicall.reducerPath] = multicall.reducer, _a$e)); +createStore(reducer); +function MulticallUpdater() { + var latestBlockNumber = useBlockNumber(); + var chainId = useActiveWeb3React().chainId; + var contract = useInterfaceMulticall(); + return jsx(multicall.Updater, { chainId: chainId, latestBlockNumber: latestBlockNumber, contract: contract }, void 0); +} + +function useMultipleContractSingleData() { + var _a; + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var _b = useCallContext(), chainId = _b.chainId, latestBlock = _b.latestBlock; + return (_a = multicall.hooks).useMultipleContractSingleData.apply(_a, __spreadArray([chainId, latestBlock], __read(args), false)); +} +function useSingleCallResult() { + var _a; + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var _b = useCallContext(), chainId = _b.chainId, latestBlock = _b.latestBlock; + return (_a = multicall.hooks).useSingleCallResult.apply(_a, __spreadArray([chainId, latestBlock], __read(args), false)); +} +function useSingleContractMultipleData() { + var _a; + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var _b = useCallContext(), chainId = _b.chainId, latestBlock = _b.latestBlock; + return (_a = multicall.hooks).useSingleContractMultipleData.apply(_a, __spreadArray([chainId, latestBlock], __read(args), false)); +} +function useSingleContractWithCallData() { + var _a; + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var _b = useCallContext(), chainId = _b.chainId, latestBlock = _b.latestBlock; + return (_a = multicall.hooks).useSingleContractWithCallData.apply(_a, __spreadArray([chainId, latestBlock], __read(args), false)); +} +function useCallContext() { + var chainId = useActiveWeb3React().chainId; + var latestBlock = useBlockNumber(); + return { chainId: chainId, latestBlock: latestBlock }; +} + +function safeNamehash(name) { + if (name === undefined) + return undefined; + try { + return namehash(name); + } + catch (error) { + console.debug(error); + return undefined; + } +} + +/** + * Returns true if the string value is zero in hex + * @param hexNumberString + */ +function isZero(hexNumberString) { + return /^0x0*$/.test(hexNumberString); +} + +/** + * Does a lookup for an ENS name to find its address. + */ +function useENSAddress(ensName) { + var _a; + var debouncedName = useDebounce(ensName, 200); + var ensNodeArgument = useMemo(function () { return [debouncedName === null ? undefined : safeNamehash(debouncedName)]; }, [debouncedName]); + var registrarContract = useENSRegistrarContract(false); + var resolverAddress = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument); + var resolverAddressResult = (_a = resolverAddress.result) === null || _a === void 0 ? void 0 : _a[0]; + var resolverContract = useENSResolverContract(resolverAddressResult && !isZero(resolverAddressResult) ? resolverAddressResult : undefined, false); + var addr = useSingleCallResult(resolverContract, 'addr', ensNodeArgument); + var changed = debouncedName !== ensName; + return useMemo(function () { + var _a, _b; + return ({ + address: changed ? null : (_b = (_a = addr.result) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : null, + loading: changed || resolverAddress.loading || addr.loading, + }); + }, [addr.loading, addr.result, changed, resolverAddress.loading]); +} + +/** + * Does a reverse lookup for an address to find its ENS name. + * Note this is not the same as looking up an ENS name to find an address. + */ +function useENSName(address) { + var _a, _b; + var debouncedAddress = useDebounce(address, 200); + var ensNodeArgument = useMemo(function () { + if (!debouncedAddress || !isAddress(debouncedAddress)) + return [undefined]; + return [namehash(debouncedAddress.toLowerCase().substr(2) + ".addr.reverse")]; + }, [debouncedAddress]); + var registrarContract = useENSRegistrarContract(false); + var resolverAddress = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument); + var resolverAddressResult = (_a = resolverAddress.result) === null || _a === void 0 ? void 0 : _a[0]; + var resolverContract = useENSResolverContract(resolverAddressResult && !isZero(resolverAddressResult) ? resolverAddressResult : undefined, false); + var nameCallRes = useSingleCallResult(resolverContract, 'name', ensNodeArgument); + var name = (_b = nameCallRes.result) === null || _b === void 0 ? void 0 : _b[0]; + /* ENS does not enforce that an address owns a .eth domain before setting it as a reverse proxy + and recommends that you perform a match on the forward resolution + see: https://docs.ens.domains/dapp-developer-guide/resolving-names#reverse-resolution + */ + var fwdAddr = useENSAddress(name); + var checkedName = address === (fwdAddr === null || fwdAddr === void 0 ? void 0 : fwdAddr.address) ? name : null; + var changed = debouncedAddress !== address; + return useMemo(function () { return ({ + ENSName: changed ? null : checkedName, + loading: changed || resolverAddress.loading || nameCallRes.loading, + }); }, [changed, nameCallRes.loading, checkedName, resolverAddress.loading]); +} + +/** + * Given a name or address, does a lookup to resolve to an address and name + * @param nameOrAddress ENS name or address + */ +function useENS(nameOrAddress) { + var validated = isAddress(nameOrAddress); + var reverseLookup = useENSName(validated ? validated : undefined); + var lookup = useENSAddress(nameOrAddress); + return useMemo(function () { return ({ + loading: reverseLookup.loading || lookup.loading, + address: validated ? validated : lookup.address, + name: reverseLookup.ENSName ? reverseLookup.ENSName : !validated && lookup.address ? nameOrAddress || null : null, + }); }, [lookup.address, lookup.loading, nameOrAddress, reverseLookup.ENSName, reverseLookup.loading, validated]); +} + +/** + * Returns the gas value plus a margin for unexpected or variable gas costs + * @param value the gas value to pad + */ +function calculateGasMargin(value) { + return value.mul(120).div(100); +} + +/** + * Be careful adding to this enum, always assign a unique value (typescript will not prevent duplicate values). + * These values is persisted in state and if you change the value it will cause errors + */ +var TransactionType; +(function (TransactionType) { + TransactionType[TransactionType["APPROVAL"] = 0] = "APPROVAL"; + TransactionType[TransactionType["SWAP"] = 1] = "SWAP"; + TransactionType[TransactionType["DEPOSIT_LIQUIDITY_STAKING"] = 2] = "DEPOSIT_LIQUIDITY_STAKING"; + TransactionType[TransactionType["WITHDRAW_LIQUIDITY_STAKING"] = 3] = "WITHDRAW_LIQUIDITY_STAKING"; + TransactionType[TransactionType["CLAIM"] = 4] = "CLAIM"; + TransactionType[TransactionType["VOTE"] = 5] = "VOTE"; + TransactionType[TransactionType["DELEGATE"] = 6] = "DELEGATE"; + TransactionType[TransactionType["WRAP"] = 7] = "WRAP"; + TransactionType[TransactionType["CREATE_V3_POOL"] = 8] = "CREATE_V3_POOL"; + TransactionType[TransactionType["ADD_LIQUIDITY_V3_POOL"] = 9] = "ADD_LIQUIDITY_V3_POOL"; + TransactionType[TransactionType["ADD_LIQUIDITY_V2_POOL"] = 10] = "ADD_LIQUIDITY_V2_POOL"; + TransactionType[TransactionType["MIGRATE_LIQUIDITY_V3"] = 11] = "MIGRATE_LIQUIDITY_V3"; + TransactionType[TransactionType["COLLECT_FEES"] = 12] = "COLLECT_FEES"; + TransactionType[TransactionType["REMOVE_LIQUIDITY_V3"] = 13] = "REMOVE_LIQUIDITY_V3"; + TransactionType[TransactionType["SUBMIT_PROPOSAL"] = 14] = "SUBMIT_PROPOSAL"; +})(TransactionType || (TransactionType = {})); +var addTransaction = createAction('transactions/addTransaction'); +var clearAllTransactions = createAction('transactions/clearAllTransactions'); +var finalizeTransaction = createAction('transactions/finalizeTransaction'); +var checkedTransaction = createAction('transactions/checkedTransaction'); + +var SUPPORTED_TRANSACTION_TYPES = [ + TransactionType.ADD_LIQUIDITY_V2_POOL, + TransactionType.ADD_LIQUIDITY_V3_POOL, + TransactionType.CREATE_V3_POOL, + TransactionType.REMOVE_LIQUIDITY_V3, + TransactionType.SWAP, +]; +var FIREBASE_API_KEY = process.env.REACT_APP_FIREBASE_KEY; +var firebaseEnabled = typeof FIREBASE_API_KEY !== 'undefined'; +if (firebaseEnabled) + initializeFirebase(); +function useMonitoringEventCallback() { + var chainId = useActiveWeb3React().chainId; + return useCallback(function log(type, _a) { + var transactionResponse = _a.transactionResponse, walletAddress = _a.walletAddress; + return __awaiter(this, void 0, void 0, function () { + var db; + return __generator(this, function (_b) { + if (!firebaseEnabled) + return [2 /*return*/]; + db = getDatabase(); + if (!walletAddress) { + console.debug('Wallet address required to log monitoring events.'); + return [2 /*return*/]; + } + try { + push(ref(db, 'trm'), { + chainId: chainId, + origin: window.location.origin, + timestamp: Date.now(), + tx: transactionResponse, + type: type, + walletAddress: walletAddress, + }); + } + catch (e) { + console.debug('Error adding document: ', e); + } + return [2 /*return*/]; + }); + }); + }, [chainId]); +} +function useTransactionMonitoringEventCallback() { + var account = useActiveWeb3React().account; + var log = useMonitoringEventCallback(); + return useCallback(function (info, transactionResponse) { + if (SUPPORTED_TRANSACTION_TYPES.includes(info.type)) { + log(TransactionType[info.type], { + transactionResponse: (function (_a) { + var hash = _a.hash, v = _a.v, r = _a.r, s = _a.s; + return ({ hash: hash, v: v, r: r, s: s }); + })(transactionResponse), + walletAddress: account !== null && account !== void 0 ? account : undefined, + }); + } + }, [account, log]); +} +function useWalletConnectMonitoringEventCallback() { + var log = useMonitoringEventCallback(); + return useCallback(function (walletAddress) { + log('WALLET_CONNECTED', { transactionResponse: { hash: '', r: '', s: '', v: -1 }, walletAddress: walletAddress }); + }, [log]); +} +function initializeFirebase() { + initializeApp({ + apiKey: process.env.REACT_APP_FIREBASE_KEY, + authDomain: 'interface-monitoring.firebaseapp.com', + databaseURL: 'https://interface-monitoring-default-rtdb.firebaseio.com', + projectId: 'interface-monitoring', + storageBucket: 'interface-monitoring.appspot.com', + messagingSenderId: '968187720053', + appId: '1:968187720053:web:acedf72dce629d470be33c', + }); +} + +// helper that can take a ethers library transaction response and add it to the list of transactions +function useTransactionAdder() { + var _a = useActiveWeb3React(), chainId = _a.chainId, account = _a.account; + var dispatch = useAppDispatch(); + var logMonitoringEvent = useTransactionMonitoringEventCallback(); + return useCallback(function (response, info) { + if (!account) + return; + if (!chainId) + return; + var hash = response.hash; + if (!hash) { + throw Error('No transaction hash found.'); + } + dispatch(addTransaction({ hash: hash, from: account, info: info, chainId: chainId })); + logMonitoringEvent(info, response); + }, [account, chainId, dispatch, logMonitoringEvent]); +} +// returns all the transactions for the current chain +function useAllTransactions() { + var _a; + var chainId = useActiveWeb3React().chainId; + var state = useAppSelector(function (state) { return state.transactions; }); + return chainId ? (_a = state[chainId]) !== null && _a !== void 0 ? _a : {} : {}; +} +function useTransaction(transactionHash) { + var allTransactions = useAllTransactions(); + if (!transactionHash) { + return undefined; + } + return allTransactions[transactionHash]; +} +function useIsTransactionPending(transactionHash) { + var transactions = useAllTransactions(); + if (!transactionHash || !transactions[transactionHash]) + return false; + return !transactions[transactionHash].receipt; +} +function useIsTransactionConfirmed(transactionHash) { + var transactions = useAllTransactions(); + if (!transactionHash || !transactions[transactionHash]) + return false; + return Boolean(transactions[transactionHash].receipt); +} +/** + * Returns whether a transaction happened in the last day (86400 seconds * 1000 milliseconds / second) + * @param tx to check for recency + */ +function isTransactionRecent(tx) { + return new Date().getTime() - tx.addedTime < 86400000; +} +// returns whether a token has a pending approval transaction +function useHasPendingApproval(token, spender) { + var allTransactions = useAllTransactions(); + return useMemo(function () { + return typeof (token === null || token === void 0 ? void 0 : token.address) === 'string' && + typeof spender === 'string' && + Object.keys(allTransactions).some(function (hash) { + var tx = allTransactions[hash]; + if (!tx) + return false; + if (tx.receipt) { + return false; + } + else { + if (tx.info.type !== TransactionType.APPROVAL) + return false; + return tx.info.spender === spender && tx.info.tokenAddress === token.address && isTransactionRecent(tx); + } + }); + }, [allTransactions, spender, token === null || token === void 0 ? void 0 : token.address]); +} +// watch for submissions to claim +// return null if not done loading, return undefined if not found +function useUserHasSubmittedClaim(account) { + var allTransactions = useAllTransactions(); + // get the txn if it has been submitted + var claimTxn = useMemo(function () { + var txnIndex = Object.keys(allTransactions).find(function (hash) { + var tx = allTransactions[hash]; + return tx.info.type === TransactionType.CLAIM && tx.info.recipient === account; + }); + return txnIndex && allTransactions[txnIndex] ? allTransactions[txnIndex] : undefined; + }, [account, allTransactions]); + return { claimSubmitted: Boolean(claimTxn), claimTxn: claimTxn }; +} + +var FETCH_CLAIM_MAPPING_PROMISE = null; +function fetchClaimMapping() { + return (FETCH_CLAIM_MAPPING_PROMISE !== null && FETCH_CLAIM_MAPPING_PROMISE !== void 0 ? FETCH_CLAIM_MAPPING_PROMISE : (FETCH_CLAIM_MAPPING_PROMISE = fetch("https://raw.githubusercontent.com/Uniswap/mrkl-drop-data-chunks/final/chunks/mapping.json") + .then(function (res) { return res.json(); }) + .catch(function (error) { + console.error('Failed to get claims mapping', error); + FETCH_CLAIM_MAPPING_PROMISE = null; + }))); +} +var FETCH_CLAIM_FILE_PROMISES = {}; +function fetchClaimFile(key) { + var _a; + return ((_a = FETCH_CLAIM_FILE_PROMISES[key]) !== null && _a !== void 0 ? _a : (FETCH_CLAIM_FILE_PROMISES[key] = fetch("https://raw.githubusercontent.com/Uniswap/mrkl-drop-data-chunks/final/chunks/" + key + ".json") + .then(function (res) { return res.json(); }) + .catch(function (error) { + console.error("Failed to get claim file mapping for starting address " + key, error); + delete FETCH_CLAIM_FILE_PROMISES[key]; + }))); +} +var FETCH_CLAIM_PROMISES = {}; +// returns the claim for the given address, or null if not valid +function fetchClaim(account) { + var _a; + var formatted = isAddress(account); + if (!formatted) + return Promise.reject(new Error('Invalid address')); + return ((_a = FETCH_CLAIM_PROMISES[account]) !== null && _a !== void 0 ? _a : (FETCH_CLAIM_PROMISES[account] = fetchClaimMapping() + .then(function (mapping) { + var e_1, _a; + var sorted = Object.keys(mapping).sort(function (a, b) { return (a.toLowerCase() < b.toLowerCase() ? -1 : 1); }); + try { + for (var sorted_1 = __values(sorted), sorted_1_1 = sorted_1.next(); !sorted_1_1.done; sorted_1_1 = sorted_1.next()) { + var startingAddress = sorted_1_1.value; + var lastAddress = mapping[startingAddress]; + if (startingAddress.toLowerCase() <= formatted.toLowerCase()) { + if (formatted.toLowerCase() <= lastAddress.toLowerCase()) { + return startingAddress; + } + } + else { + throw new Error("Claim for " + formatted + " was not found in partial search"); + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (sorted_1_1 && !sorted_1_1.done && (_a = sorted_1.return)) _a.call(sorted_1); + } + finally { if (e_1) throw e_1.error; } + } + throw new Error("Claim for " + formatted + " was not found after searching all mappings"); + }) + .then(fetchClaimFile) + .then(function (result) { + if (result[formatted]) + return result[formatted]; + throw new Error("Claim for " + formatted + " was not found in claim file!"); + }) + .catch(function (error) { + console.debug('Claim fetch failed', error); + throw error; + }))); +} +// parse distributorContract blob and detect if user has claim data +// null means we know it does not +function useUserClaimData(account) { + var chainId = useActiveWeb3React().chainId; + var _a = __read(useState({}), 2), claimInfo = _a[0], setClaimInfo = _a[1]; + useEffect(function () { + if (!account || chainId !== 1) + return; + fetchClaim(account) + .then(function (accountClaimInfo) { + return setClaimInfo(function (claimInfo) { + var _a; + return __assign(__assign({}, claimInfo), (_a = {}, _a[account] = accountClaimInfo, _a)); + }); + }) + .catch(function () { + setClaimInfo(function (claimInfo) { + var _a; + return __assign(__assign({}, claimInfo), (_a = {}, _a[account] = null, _a)); + }); + }); + }, [account, chainId]); + return account && chainId === 1 ? claimInfo[account] : null; +} +// check if user is in blob and has not yet claimed UNI +function useUserHasAvailableClaim(account) { + var _a; + var userClaimData = useUserClaimData(account); + var distributorContract = useMerkleDistributorContract(); + var isClaimedResult = useSingleCallResult(distributorContract, 'isClaimed', [userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.index]); + // user is in blob and contract marks as unclaimed + return Boolean(userClaimData && !isClaimedResult.loading && ((_a = isClaimedResult.result) === null || _a === void 0 ? void 0 : _a[0]) === false); +} +function useUserUnclaimedAmount(account) { + var chainId = useActiveWeb3React().chainId; + var userClaimData = useUserClaimData(account); + var canClaim = useUserHasAvailableClaim(account); + var uni = chainId ? UNI[chainId] : undefined; + if (!uni) + return undefined; + if (!canClaim || !userClaimData) { + return CurrencyAmount.fromRawAmount(uni, JSBI.BigInt(0)); + } + return CurrencyAmount.fromRawAmount(uni, JSBI.BigInt(userClaimData.amount)); +} +function useClaimCallback(account) { + // get claim data for this account + var _a = useActiveWeb3React(), library = _a.library, chainId = _a.chainId; + var claimData = useUserClaimData(account); + // used for popup summary + var unclaimedAmount = useUserUnclaimedAmount(account); + var addTransaction = useTransactionAdder(); + var distributorContract = useMerkleDistributorContract(); + var claimCallback = function () { + return __awaiter(this, void 0, void 0, function () { + var args; + var _a; + return __generator(this, function (_b) { + if (!claimData || !account || !library || !chainId || !distributorContract) + return [2 /*return*/]; + args = [claimData.index, account, claimData.amount, claimData.proof]; + return [2 /*return*/, (_a = distributorContract.estimateGas)['claim'].apply(_a, __spreadArray(__spreadArray([], __read(args), false), [{}], false)).then(function (estimatedGasLimit) { + return distributorContract + .claim.apply(distributorContract, __spreadArray(__spreadArray([], __read(args), false), [{ value: null, gasLimit: calculateGasMargin(estimatedGasLimit) }], false)).then(function (response) { + addTransaction(response, { + type: TransactionType.CLAIM, + recipient: account, + uniAmountRaw: unclaimedAmount === null || unclaimedAmount === void 0 ? void 0 : unclaimedAmount.quotient.toString(), + }); + return response.hash; + }); + })]; + }); + }); + }; + return { claimCallback: claimCallback }; +} + +var _a$d, _b$4, _c$3, _d$2, _e$1, _f, _g, _h; +var WRAPPED_NATIVE_CURRENCIES_ONLY = Object.fromEntries(Object.entries(WRAPPED_NATIVE_CURRENCY).map(function (_a) { + var _b = __read(_a, 2), key = _b[0], value = _b[1]; + return [key, [value]]; +})); +// used to construct intermediary pairs for trading +var BASES_TO_CHECK_TRADES_AGAINST = __assign(__assign({}, WRAPPED_NATIVE_CURRENCIES_ONLY), (_a$d = {}, _a$d[SupportedChainId.MAINNET] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.MAINNET]), false), [DAI, USDC, USDT, WBTC], false), _a$d[SupportedChainId.OPTIMISM] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.OPTIMISM]), false), [ + DAI_OPTIMISM, + USDT_OPTIMISM, + WBTC_OPTIMISM, +], false), _a$d[SupportedChainId.ARBITRUM_ONE] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.ARBITRUM_ONE]), false), [ + DAI_ARBITRUM_ONE, + USDT_ARBITRUM_ONE, + WBTC_ARBITRUM_ONE, +], false), _a$d[SupportedChainId.POLYGON] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.POLYGON]), false), [ + DAI_POLYGON, + USDC_POLYGON, + USDT_POLYGON, + WETH_POLYGON, +], false), _a$d)); +var ADDITIONAL_BASES = (_b$4 = {}, + _b$4[SupportedChainId.MAINNET] = (_c$3 = { + '0xF16E4d813f4DcfDe4c5b44f305c908742De84eF0': [ETH2X_FLI] + }, + _c$3[rETH2.address] = [sETH2], + _c$3[SWISE.address] = [sETH2], + _c$3[FEI.address] = [TRIBE], + _c$3[TRIBE.address] = [FEI], + _c$3[FRAX.address] = [FXS], + _c$3[FXS.address] = [FRAX], + _c$3[WBTC.address] = [renBTC], + _c$3[renBTC.address] = [WBTC], + _c$3), + _b$4); +/** + * Some tokens can only be swapped via certain pairs, so we override the list of bases that are considered for these + * tokens. + */ +var CUSTOM_BASES = (_d$2 = {}, + _d$2[SupportedChainId.MAINNET] = (_e$1 = {}, + _e$1[AMPL.address] = [DAI, WRAPPED_NATIVE_CURRENCY[SupportedChainId.MAINNET]], + _e$1), + _d$2); +/** + * Shows up in the currency select for swap and add liquidity + */ +var COMMON_BASES = (_f = {}, + _f[SupportedChainId.MAINNET] = [ + nativeOnChain(SupportedChainId.MAINNET), + DAI, + USDC, + USDT, + WBTC, + WRAPPED_NATIVE_CURRENCY[SupportedChainId.MAINNET], + ], + _f[SupportedChainId.ROPSTEN] = [ + nativeOnChain(SupportedChainId.ROPSTEN), + WRAPPED_NATIVE_CURRENCY[SupportedChainId.ROPSTEN], + ], + _f[SupportedChainId.RINKEBY] = [ + nativeOnChain(SupportedChainId.RINKEBY), + WRAPPED_NATIVE_CURRENCY[SupportedChainId.RINKEBY], + ], + _f[SupportedChainId.GOERLI] = [nativeOnChain(SupportedChainId.GOERLI), WRAPPED_NATIVE_CURRENCY[SupportedChainId.GOERLI]], + _f[SupportedChainId.KOVAN] = [nativeOnChain(SupportedChainId.KOVAN), WRAPPED_NATIVE_CURRENCY[SupportedChainId.KOVAN]], + _f[SupportedChainId.ARBITRUM_ONE] = [ + nativeOnChain(SupportedChainId.ARBITRUM_ONE), + DAI_ARBITRUM_ONE, + USDC_ARBITRUM, + USDT_ARBITRUM_ONE, + WBTC_ARBITRUM_ONE, + WRAPPED_NATIVE_CURRENCY[SupportedChainId.ARBITRUM_ONE], + ], + _f[SupportedChainId.ARBITRUM_RINKEBY] = [ + nativeOnChain(SupportedChainId.ARBITRUM_RINKEBY), + WRAPPED_NATIVE_CURRENCY[SupportedChainId.ARBITRUM_RINKEBY], + ], + _f[SupportedChainId.OPTIMISM] = [ + nativeOnChain(SupportedChainId.OPTIMISM), + DAI_OPTIMISM, + USDC_OPTIMISM, + USDT_OPTIMISM, + WBTC_OPTIMISM, + ], + _f[SupportedChainId.OPTIMISTIC_KOVAN] = [nativeOnChain(SupportedChainId.OPTIMISTIC_KOVAN)], + _f[SupportedChainId.POLYGON] = [ + nativeOnChain(SupportedChainId.POLYGON), + WETH_POLYGON, + USDC_POLYGON, + DAI_POLYGON, + USDT_POLYGON, + WBTC_POLYGON, + ], + _f[SupportedChainId.POLYGON_MUMBAI] = [ + nativeOnChain(SupportedChainId.POLYGON_MUMBAI), + WRAPPED_NATIVE_CURRENCY[SupportedChainId.POLYGON_MUMBAI], + WETH_POLYGON_MUMBAI, + ], + _f); +// used to construct the list of all pairs we consider by default in the frontend +__assign(__assign({}, WRAPPED_NATIVE_CURRENCIES_ONLY), (_g = {}, _g[SupportedChainId.MAINNET] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.MAINNET]), false), [DAI, USDC, USDT, WBTC], false), _g)); +(_h = {}, + _h[SupportedChainId.MAINNET] = [ + [ + new Token(SupportedChainId.MAINNET, '0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643', 8, 'cDAI', 'Compound Dai'), + new Token(SupportedChainId.MAINNET, '0x39AA39c021dfbaE8faC545936693aC917d5E7563', 8, 'cUSDC', 'Compound USD Coin'), + ], + [USDC, USDT], + [DAI, USDT], + ], + _h); + +var EthereumLogo = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAAAXNSR0IB2cksfwAAAAlwSFlzAAALEwAACxMBAJqcGAAADxdJREFUeJztXVtzFMcVplwuP8VVeYmf7HJ+RKqSl/AQP6X8H+yqXUEIjhMnQY5jO9oVCIzA5mowdzAYG4xAGAyWLC5G3IyDL8gOASUYKrarYGZWC7qi23b6692VV6uZ7e6ZnT3di07VV6JUaLfnnG+6z+lz+vScOXUoL6SzP52/2PtlQ9p7piHlLU2k3P2JJqcjkXLO8589/OdN/tPjvx8VEP8Wv+sp/J8O/A3+Fp+Bz8JnUj/XrPjIwjT7ybxm57fJlLsy2eR2cwPe4QZksYB/Nr4D34XvxHdTP/8DJ+k0e4S/lb9Jpr2WZJNzgRtjPDaDS4DvFmPgY8GYMDZq/dStNKQzv0qmnA1c6RkqgysQIoMxYqzU+qoLWZDO/jyZdl7lir1ObdwQZLiOseMZqPVonSTS7i+4AtsTTW6O2pDR4ebEs/Bnotar8dKw2Pk1n0I76Y0W16zgdOIZqfVsnCSbvaeEB2+AkWpCBEQS/Jmp9U4u3Fl6nIdWB6gNQgb+7NABtR1qLjxcejiZdhfxKXGA3AjUswHXAXQBnVDbpSbCPeO5fAr8hlrxpgE6gW6o7ROb5N96Z3l9ePZxgUcMXEd1NxssbMk8kWxyztEr2A5AV3XjGySb3acTSLYYoFjL4EF31PYLLXwaeyiZcltnp/woEJtIrdAltT21BEkR7tnuo1dgfQC6tCbRlGh1H02k3C5qpalg/bt3WdOGDPk4lACdct1S27eiLEgPPMbDmcvkylLAgiUOc/sm2LHuITavmX48KoBun1828DNqO/tKsiX7JF+zeqmVpIqPzg2xyckc++Sfw2ImoB6POtxe6Jra3tMEb75Nxv/Hmxk2MZGbIsCpz4bZn1d45OPSIQF0Tm13IViXbJn2i+i9NcYgRQIA+zsGyMelA6Fzap8AnqktDl8RO9r7WVFKCQAs3dJHPj4tcN2TRQcizrcs1Hv+NZf1D04GEqDj/JBwDqnHqYNCiFj7fYL8Jg+9AnTQfXmYlUo5AYAtbffIx6lNAm6L2hpfbO/atcO3dGsfy+VyUgIAL66yySEE3FzNto2R2ElYtrffkHbYd7fHWbkEEeDQyUHk6cnHrQkPtonV+CKla2FWDx6+nwQRAFi5K0s+bl3ANrGmkvP5fPoH1cFfX/fYyP2cNgG6Lg6z55a55OPXJgG3UVzGn2vbug98fvW+r/FlBADePtJPPn59iKKS6lYW5ad++8q4Vu+5G2h8FQIAr663JFlUAtiqqksBZ1Uj9UPp4neLHeb0TUQmwNEzg2xemv559OE2VsX4KE2ysXoXhpOJCgGAdXttShblAZtVpayMe5Zt1A+ji5fXZdj4uL/jF4YApy4NsxdaLXQIue2iGb/Ze4r6IcLg6rejUuPrEAB47yO7kkVTJIhyAsnG41rYylUVHQIAizdZlixqyh9DC2V8HGKkHrwuELffHZiUWz4kAVBEAueS+jl1EepAqo2ndLFW64guAYBNB2xMFjmdWsbHWXbqQesC0zMMGjcBgEVv2JYs4tDpT5BvzmDAoBWBxM2tH8a0jB+FAAe77EsWwaZKxkdLE9u2fPce65dbu4oEAFp32JYscnNK7WrQ14Z+sOpAMefwiLrjVy0CdF0cYguX2rU3ANtKCWBTdS9wqWcklPGjEgDYcdiuZBEaV1U0PtqbUQ9SB6/vyoY2fjUIALy81q5kUcUWduhxRz1AVcxvdthtb2aVT60JcOT0oKg4otaHKmBjX+OLA50GN2Esx+FT8mRPLQgAIO1MrQ91ArgZ31JytDqlHpwqXlrjsbExvZg/TgKcvDTM/rjcHocQtp45/ae9FuqBqeLr/6gle2pFAAChKLVeVAFbzyRAk3OBemAq2LhfPdlTSwIA6Y12JItg62nGR9tzyq7bqljY4rK+e5WrfCgJcPzskHBOqfUkJQC39bRW9+h9Tz0oFXx8Yahqxo+DAMCGfXY4hLB5SfjnrqQekAypjRntZA8FAU5/NixK0an1JQNsXrL+m1/4ceM7/WRPJcExsas3Rtn7nQNVJ8GBj82vHppWKBLrNStVAOrzqyWjPHzEWQGEbjBW81t9bPn2LNt9tF/UE1SLBMu2Ge4QcpsL4+MyJPLBVADi68HhcMmeUrnbP8kufDUyw8ggQBHoD7Dt4D3WyX2NqASAv/L7Fnr9VYK4CAs3YlEPpBLOfxk+2QP5wRlnZy7ztTnAUKUEKGLJpj72JnfmUFoehQTbDpldPQTb8/Xfe5Z6IEHA1BxWem+N8rdd/ib7EaAUq/dkxZoelgTYtaTWYxBwJR7y/8uoB+IHnMbB26sjY+M59uU1vr5/qj6FywhQxIodWfbOh/2ioZQOAZCzMLV6CLafU7hUkXww5Wjr8j/S7Sdo+3LxyojSGx+WAFN+wtY+tp1P7V0afsIbbxtaPcRtb2T1b+Mqj90flcf8t91x1v158PoeBwGKWLy5j23kfsIxBT/h5KfDoj8RtV7LIaqFTcwBfHUt+Eg35L//G2WnqxSyhSVAKdZwP+FgV2U/Yc9R85JFIieQwH25BgymCHTt9JPxiRy7ch3xe/QQrdoEKGLlzqzICgb5CQb2Je6ZU7g0mXogAmjR5mWnJ3uwB3Dp65nxu4kEKGIZ9xN2tN9jJy5OJ6txfYm57TEDGNPwCdm0otzJTLCzX+T31uMwfJwEmNpP2NLHNu2/y453/0gEw/oSe3MK16dTD2Sqf+/N78diN3qtCDDlMG7qY2v33mWHTg6Y1ZeY294YAhw7Ozi1P19L1IIA0/yEXdxpfMeQWUAQwJAlAClUtHOrdwL8fW3GpBPGnlFOIIDp8lh3dT19EwiAJe4PprWdKziBRoWBALaB1/JpEhsothMAdYJY8w3dDhZh4HkDBuIL7J7t+qDfWgKg57BRYV85uO0xA3SQD0SCl9ZkRP9eWwjwyrqM8bUABXQYkwySpU0xhb62Lcs6z5u7E4idPpUDIn8ypeOYSAYZkg5esTPLPr0yIu2+gd1CnA3QTcvGSYA0B6IY2TpfXNLQxo5a30BDyluKI2HPUA+kCHj/qNlDDl0WKsGxevd49LAxqvGxPM2XjBV+AJpNYp/DpJ1AURBiUkkYvP9i9S9yAnjTZX+DaffoJ+H9g7CGR1j3nEKDCIS12OLGd6HGwaRoQJSEmVYU+rfVHhu+/2MR6LWbo+JMQGUmO6Lo4kSIsDFMWKfSNRRLWWnJOdrPm3aAVBSFmlgWXt7sEQc4kB+QKRBv5Pb2e7ERAIUqssbROL629eDMMSzZbFiZeLEs3NSDISjhLpeh4Umx7ssaMiD+bpMUaOgQAE6b7DYxjAkdS7ouzoxScFUdtT7LMe1giIlHw/AmORn/g6AoFlWps0OdP7p7hiUA/AuVUi74A+gU4vf5KC2XOYkkBCg9Gmbq4VBMm0gRBwkqgGX7B1A+PO+ggpKgsO4vK+VhHXwBVAAFkQuhqqk3kE07HGry8XDU5FcStIWHl40Zo9LnwH9AXZ6MAHBCZUe8EaLiFLBsL2LVbjOrgWccDze5QQTeQpX27zj6tV3hJM4r6zPsg5Lpemr7lv9eRiIA5V4dCruR+wxuLz+jQYTpLWIwHQ8MqZ0P/Pb7MdYiuQMYpMLOI87vIcRU2ZrFUnPwhNp+A7arTb5xzLdFjOlNorCTpio4+o0zhSBOpc+EZy+LKJDD33lYLyNpYPXvNPg2ibKhTRzqA3QE9wUiHAzTtgXx/po9+jUJpreTD2wTlw8HzW4UCY/e7wpYmSCc1NmDRxQQpioJOQzTbxgLbBSZXwbMbxWLmDtsj8B/3RiteA8gMnr7QtYlItEjW3JMQMVWsflZwL1OPUgZEM6FFWwrI2dQWp+H4o3NB/S2kMuBo+zUepFB2ixaEMCSdvFf/Lvy+UGZIKpAW5hiNBDF+Cae+/MlgEq7eFsujMAWbdSegdXoEoZNKFmewAwoXhhRWAasuDIGTRuitI57kNrFK18ZA7Hp0qgPz4RvHhmVACZV90ihc2lUfhYwr3GEHxrS4XsIRiEAchQmVfdUgva1cRCbLo58sayKKG4CIOdvWnVPxZckzMWRYhYwsFAkCDpXxkYlgHHVPRUQ+upYQQDLLo/W7SkYhgAoOaN+Ti0CRLk8GpJIOQeoH0IVSOfeCagiqgYBUH1sYnVPILjtIhkf0pDOPM6diAHyh1EEpufxClVEYQmA4o9Gi66Mhc1gu8gEgCTT7iLqB9KBrIooDAGM7fUXRABus6oYH5JOs4e5M/EN9UNpsF+0gq8WAd4zuLrH9/m5rWCzqhEAkkw7c23YIi4CmTl0EI1KAFHdY9UVsW4Otqqq8UtIsJz+AdWBJhNRCYD0M/Vz6AA2isX4kPxS4JyjfkgdVKoikhHgrfctC/m4bao+9ZfLwpbMEwlDGkupoFIVUSUCtJ80v7qnDB5sE6vxi5Jsdp+2yR9AFdCoTxVREAEwaxjTy08JfN3nNqmJ8adIkHJb6R9cHbt9qoiCCIBOJNTj1QFsUVPjQ/ha8xCPNfdRP7wOcFmUjAC7j9hR3TNlfG4D2KLmBCiQ4JFEyu2iVoIqyquIyglgT3VPAVz3gSXetZJEq/tossm9TK4MRbSWVBGVEwDtXqjHpwqhc657UuMXZUF64DHuiPRSK0UVOLJdTgCcPKIelzrcXuic2u7TJNmSfdIWEhSriIoEsKm6BzqGrqnt7StgpS3LAc7to+MIqntMvM/HD9CtcW9+uWBdssUxxDk+dPGiHocSoFNT1nyZiIOmloWIJqMQ6tF6+7oi9gnEZpE9O4bmwc1Bh2RxfjUkv21sT+7AIHg1396NS5CksC2LSAnoqmaJnVqJSCWLeoLZJSEYophjeewpXUpBtYpN5WW1AnQSWyWPaQKGc7Y32lRtHJvhhQ7cxrp+64NElJw3OW3URqB76522qpVu2yw4vWLTMbTohne7I5/YqUfBIUZbTiWHMjx/ttAHNR8kwVn2fJOKeogYxGZOu/b5/FnJt6vJ9yyyI8tYZvhejF25LcusVBa0N0OPO5ObWWJsGKO0FdushBckRdDqFP1u0fSYsss5vluMgY8FY7IuYVMPgrbn6H2PCxBEJBHn9Tf8s4UHz78L3zmj5fqsmCG4DAk3YiWbvGfFvYgpdz888EJL/J7Chdkerk8XEP8Wv+vJzyo8EsHf8L/FZ+Czpi5YqjP5P2ey0rAsl+yGAAAAAElFTkSuQmCC"; + +var arbitrumLogoUrl = "data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20viewBox%3D%220%200%20470.287%20514.251%22%20enable-background%3D%22new%200%200%20470.287%20514.251%22%20xml%3Aspace%3D%22preserve%22%3E%3Cg%20id%3D%22Background%22%3E%3C%2Fg%3E%3Cg%20id%3D%22Logos_and_symbols%22%3E%20%3Cg%20id%3D%22SYMBOL_VER_3%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_4_3_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_1_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_1_%22%3E%20%20%3Cg%20id%3D%22_x31_-3%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_14_%22%3E%20%20%20%3Cpath%20fill%3D%22%232D374B%22%20d%3D%22M291.134%2C237.469l35.654-60.5l96.103%2C149.684l0.046%2C28.727l-0.313-197.672%20%20%20%20c-0.228-4.832-2.794-9.252-6.887-11.859L242.715%2C46.324c-4.045-1.99-9.18-1.967-13.22%2C0.063c-0.546%2C0.272-1.06%2C0.57-1.548%2C0.895%20%20%20%20l-0.604%2C0.379L59.399%2C144.983l-0.651%2C0.296c-0.838%2C0.385-1.686%2C0.875-2.48%2C1.444c-3.185%2C2.283-5.299%2C5.66-5.983%2C9.448%20%20%20%20c-0.103%2C0.574-0.179%2C1.158-0.214%2C1.749l0.264%2C161.083l89.515-138.745c11.271-18.397%2C35.825-24.323%2C58.62-24.001l26.753%2C0.706%20%20%20%20L67.588%2C409.765l18.582%2C10.697L245.692%2C157.22l70.51-0.256L157.091%2C426.849l66.306%2C38.138l7.922%2C4.556%20%20%20%20c3.351%2C1.362%2C7.302%2C1.431%2C10.681%2C0.21l175.453-101.678l-33.544%2C19.438L291.134%2C237.469z%20M304.736%2C433.395l-66.969-105.108%20%20%20%20l40.881-69.371l87.952%2C138.628L304.736%2C433.395z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%2328A0F0%22%20points%3D%22237.768%2C328.286%20304.736%2C433.395%20366.601%2C397.543%20278.648%2C258.915%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2328A0F0%22%20d%3D%22M422.937%2C355.379l-0.046-28.727l-96.103-149.684l-35.654%2C60.5l92.774%2C150.043l33.544-19.438%20%20%20%20c3.29-2.673%2C5.281-6.594%2C5.49-10.825L422.937%2C355.379z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23FFFFFF%22%20d%3D%22M20.219%2C382.469l47.369%2C27.296l157.634-252.801l-26.753-0.706c-22.795-0.322-47.35%2C5.604-58.62%2C24.001%20%20%20%20L50.334%2C319.004l-30.115%2C46.271V382.469z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%23FFFFFF%22%20points%3D%22316.202%2C156.964%20245.692%2C157.22%2086.17%2C420.462%20141.928%2C452.565%20157.091%2C426.849%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2396BEDC%22%20d%3D%22M452.65%2C156.601c-0.59-14.746-8.574-28.245-21.08-36.104L256.28%2C19.692%20%20%20%20c-12.371-6.229-27.825-6.237-40.218-0.004c-1.465%2C0.739-170.465%2C98.752-170.465%2C98.752c-2.339%2C1.122-4.592%2C2.458-6.711%2C3.975%20%20%20%20c-11.164%2C8.001-17.969%2C20.435-18.668%2C34.095v208.765l30.115-46.271L50.07%2C157.921c0.035-0.589%2C0.109-1.169%2C0.214-1.741%20%20%20%20c0.681-3.79%2C2.797-7.171%2C5.983-9.456c0.795-0.569%2C172.682-100.064%2C173.228-100.337c4.04-2.029%2C9.175-2.053%2C13.22-0.063%20%20%20%20l173.022%2C99.523c4.093%2C2.607%2C6.659%2C7.027%2C6.887%2C11.859v199.542c-0.209%2C4.231-1.882%2C8.152-5.172%2C10.825l-33.544%2C19.438%20%20%20%20l-17.308%2C10.031l-61.864%2C35.852l-62.737%2C36.357c-3.379%2C1.221-7.33%2C1.152-10.681-0.21l-74.228-42.693l-15.163%2C25.717%20%20%20%20l66.706%2C38.406c2.206%2C1.255%2C4.171%2C2.367%2C5.784%2C3.272c2.497%2C1.4%2C4.199%2C2.337%2C4.8%2C2.629c4.741%2C2.303%2C11.563%2C3.643%2C17.71%2C3.643%20%20%20%20c5.636%2C0%2C11.132-1.035%2C16.332-3.072l182.225-105.531c10.459-8.104%2C16.612-20.325%2C17.166-33.564V156.601z%22%2F%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_13_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_6_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_3_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_15_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_3_%22%3E%20%20%20%3Cg%20id%3D%22_x33__7_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic%22%3E%20%20%20%3Cg%20id%3D%22_x33__3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_10_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x34__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_2_%22%3E%20%20%20%3Cg%20id%3D%22_x33__6_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_2_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_11_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_5_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_12_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_1_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_9_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_2_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol_1_%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_1_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_7_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_8_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Monochromatic_1_%22%3E%20%20%3Cg%20id%3D%22_x33__4_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E"; + +var optimismLogoUrl = "data:image/svg+xml,%3Csvg%20width%3D%22170%22%20height%3D%22168%22%20viewBox%3D%220%200%20170%20168%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20clip-path%3D%22url%28%23clip0%29%22%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF505F%22%2F%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF0320%22%2F%3E%3Cpath%20d%3D%22M85.05%200C132.022%200%20170.1%2037.8949%20170.1%2084.6407C170.1%20131.386%200%20131.386%200%2084.6407C0%2037.8949%2038.0782%200%2085.05%200Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.665%2064.0394L112.444%2012.3742L89.0263%2078.9477L144.665%2064.0394Z%22%20fill%3D%22%23FF4E65%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.777%2064.215L112.444%2012.3742L165.349%2058.4347L143.777%2064.215Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.551%2063.613L142.479%20124.467L88.912%2078.5213L144.551%2063.613Z%22%20fill%3D%22%23D0001A%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.663%2063.7886L142.479%20124.467L165.235%2058.0083L143.663%2063.7886Z%22%20fill%3D%22%23FF697B%22%2F%3E%3C%2Fg%3E%3Cdefs%3E%3CclipPath%20id%3D%22clip0%22%3E%3Crect%20width%3D%22170%22%20height%3D%22168%22%20fill%3D%22white%22%2F%3E%3C%2FclipPath%3E%3C%2Fdefs%3E%3C%2Fsvg%3E"; + +var polygonMaticLogo = "data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20viewBox%3D%220%200%2038.4%2033.5%22%20style%3D%22enable-background%3Anew%200%200%2038.4%2033.5%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cstyle%20type%3D%22text%2Fcss%22%3E%20.st0%7Bfill%3A%238247E5%3B%7D%3C%2Fstyle%3E%3Cg%3E%20%3Cpath%20class%3D%22st0%22%20d%3D%22M29%2C10.2c-0.7-0.4-1.6-0.4-2.4%2C0L21%2C13.5l-3.8%2C2.1l-5.5%2C3.3c-0.7%2C0.4-1.6%2C0.4-2.4%2C0L5%2C16.3%20%20c-0.7-0.4-1.2-1.2-1.2-2.1v-5c0-0.8%2C0.4-1.6%2C1.2-2.1l4.3-2.5c0.7-0.4%2C1.6-0.4%2C2.4%2C0L16%2C7.2c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v3.3l3.8-2.2V7%20%20c0-0.8-0.4-1.6-1.2-2.1l-8-4.7c-0.7-0.4-1.6-0.4-2.4%2C0L1.2%2C5C0.4%2C5.4%2C0%2C6.2%2C0%2C7v9.4c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l5.5-3.2l3.8-2.2l5.5-3.2c0.7-0.4%2C1.6-0.4%2C2.4%2C0l4.3%2C2.5c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v5c0%2C0.8-0.4%2C1.6-1.2%2C2.1%20%20L29%2C28.8c-0.7%2C0.4-1.6%2C0.4-2.4%2C0l-4.3-2.5c-0.7-0.4-1.2-1.2-1.2-2.1V21l-3.8%2C2.2v3.3c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l8.1-4.7c0.7-0.4%2C1.2-1.2%2C1.2-2.1V17c0-0.8-0.4-1.6-1.2-2.1L29%2C10.2z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"; + +var UNI_LIST = 'https://tokens.uniswap.org'; +var AAVE_LIST = 'tokenlist.aave.eth'; +var BA_LIST = 'https://raw.githubusercontent.com/The-Blockchain-Association/sec-notice-list/master/ba-sec-list.json'; +var CMC_ALL_LIST = 'https://api.coinmarketcap.com/data-api/v3/uniswap/all.json'; +var COINGECKO_LIST = 'https://tokens.coingecko.com/uniswap/all.json'; +var COMPOUND_LIST = 'https://raw.githubusercontent.com/compound-finance/token-list/master/compound.tokenlist.json'; +var GEMINI_LIST = 'https://www.gemini.com/uniswap/manifest.json'; +var ARBITRUM_LIST = 'https://bridge.arbitrum.io/token-list-42161.json'; +var KLEROS_LIST = 't2crtokens.eth'; +var OPTIMISM_LIST = 'https://static.optimism.io/optimism.tokenlist.json'; +var ROLL_LIST = 'https://app.tryroll.com/tokens.json'; +var SET_LIST = 'https://raw.githubusercontent.com/SetProtocol/uniswap-tokenlist/main/set.tokenlist.json'; +var WRAPPED_LIST = 'wrapped.tokensoft.eth'; +var UNSUPPORTED_LIST_URLS = [BA_LIST]; +// this is the default list of lists that are exposed to users +// lower index == higher priority for token import +var DEFAULT_LIST_OF_LISTS_TO_DISPLAY = [ + UNI_LIST, + COMPOUND_LIST, + AAVE_LIST, + CMC_ALL_LIST, + COINGECKO_LIST, + KLEROS_LIST, + GEMINI_LIST, + WRAPPED_LIST, + SET_LIST, + ROLL_LIST, + ARBITRUM_LIST, + OPTIMISM_LIST, +]; +var DEFAULT_LIST_OF_LISTS = __spreadArray(__spreadArray([], __read(DEFAULT_LIST_OF_LISTS_TO_DISPLAY), false), __read(UNSUPPORTED_LIST_URLS), false); +// default lists to be 'active' aka searched across +var DEFAULT_ACTIVE_LIST_URLS = [UNI_LIST, GEMINI_LIST]; + +var _a$c, _b$3; +var INFURA_KEY = process.env.REACT_APP_INFURA_KEY; +if (typeof INFURA_KEY === 'undefined') { + throw new Error("REACT_APP_INFURA_KEY must be a defined environment variable"); +} +/** + * These are the network URLs used by the interface when there is not another available source of chain data + */ +var INFURA_NETWORK_URLS = (_a$c = {}, + _a$c[SupportedChainId.MAINNET] = "https://mainnet.infura.io/v3/" + INFURA_KEY, + _a$c[SupportedChainId.RINKEBY] = "https://rinkeby.infura.io/v3/" + INFURA_KEY, + _a$c[SupportedChainId.ROPSTEN] = "https://ropsten.infura.io/v3/" + INFURA_KEY, + _a$c[SupportedChainId.GOERLI] = "https://goerli.infura.io/v3/" + INFURA_KEY, + _a$c[SupportedChainId.KOVAN] = "https://kovan.infura.io/v3/" + INFURA_KEY, + _a$c[SupportedChainId.OPTIMISM] = "https://optimism-mainnet.infura.io/v3/" + INFURA_KEY, + _a$c[SupportedChainId.OPTIMISTIC_KOVAN] = "https://optimism-kovan.infura.io/v3/" + INFURA_KEY, + _a$c[SupportedChainId.ARBITRUM_ONE] = "https://arbitrum-mainnet.infura.io/v3/" + INFURA_KEY, + _a$c[SupportedChainId.ARBITRUM_RINKEBY] = "https://arbitrum-rinkeby.infura.io/v3/" + INFURA_KEY, + _a$c[SupportedChainId.POLYGON] = "https://polygon-mainnet.infura.io/v3/" + INFURA_KEY, + _a$c[SupportedChainId.POLYGON_MUMBAI] = "https://polygon-mumbai.infura.io/v3/" + INFURA_KEY, + _a$c); +var NetworkType; +(function (NetworkType) { + NetworkType[NetworkType["L1"] = 0] = "L1"; + NetworkType[NetworkType["L2"] = 1] = "L2"; +})(NetworkType || (NetworkType = {})); +var CHAIN_INFO = (_b$3 = {}, + _b$3[SupportedChainId.MAINNET] = { + networkType: NetworkType.L1, + docs: 'https://docs.uniswap.org/', + explorer: 'https://etherscan.io/', + infoLink: 'https://info.uniswap.org/#/', + label: 'Ethereum', + logoUrl: EthereumLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, + rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.MAINNET], + }, + }, + _b$3[SupportedChainId.RINKEBY] = { + networkType: NetworkType.L1, + docs: 'https://docs.uniswap.org/', + explorer: 'https://rinkeby.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/', + label: 'Rinkeby', + logoUrl: EthereumLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Rinkeby Ether', symbol: 'rETH', decimals: 18 }, + rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.RINKEBY], + }, + }, + _b$3[SupportedChainId.ROPSTEN] = { + networkType: NetworkType.L1, + docs: 'https://docs.uniswap.org/', + explorer: 'https://ropsten.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/', + label: 'Ropsten', + logoUrl: EthereumLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Ropsten Ether', symbol: 'ropETH', decimals: 18 }, + rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.ROPSTEN], + }, + }, + _b$3[SupportedChainId.KOVAN] = { + networkType: NetworkType.L1, + docs: 'https://docs.uniswap.org/', + explorer: 'https://kovan.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/', + label: 'Kovan', + logoUrl: EthereumLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Kovan Ether', symbol: 'kovETH', decimals: 18 }, + rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.KOVAN], + }, + }, + _b$3[SupportedChainId.GOERLI] = { + networkType: NetworkType.L1, + docs: 'https://docs.uniswap.org/', + explorer: 'https://goerli.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/', + label: 'Görli', + logoUrl: EthereumLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Görli Ether', symbol: 'görETH', decimals: 18 }, + rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.GOERLI], + }, + }, + _b$3[SupportedChainId.OPTIMISM] = { + networkType: NetworkType.L2, + blockWaitMsBeforeWarning: ms(templateObject_1$1m || (templateObject_1$1m = __makeTemplateObject(["25m"], ["25m"]))), + bridge: 'https://gateway.optimism.io/?chainId=1', + defaultListUrl: OPTIMISM_LIST, + docs: 'https://optimism.io/', + explorer: 'https://optimistic.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/optimism/', + label: 'Optimism', + logoUrl: optimismLogoUrl, + statusPage: 'https://optimism.io/status', + helpCenterUrl: 'https://help.uniswap.org/en/collections/3137778-uniswap-on-optimistic-ethereum-oξ', + addNetworkInfo: { + nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, + rpcUrl: 'https://mainnet.optimism.io', + }, + }, + _b$3[SupportedChainId.OPTIMISTIC_KOVAN] = { + networkType: NetworkType.L2, + blockWaitMsBeforeWarning: ms(templateObject_2$10 || (templateObject_2$10 = __makeTemplateObject(["25m"], ["25m"]))), + bridge: 'https://gateway.optimism.io/', + defaultListUrl: OPTIMISM_LIST, + docs: 'https://optimism.io/', + explorer: 'https://optimistic.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/optimism/', + label: 'Optimistic Kovan', + logoUrl: optimismLogoUrl, + statusPage: 'https://optimism.io/status', + helpCenterUrl: 'https://help.uniswap.org/en/collections/3137778-uniswap-on-optimistic-ethereum-oξ', + addNetworkInfo: { + nativeCurrency: { name: 'Optimistic Kovan Ether', symbol: 'kovOpETH', decimals: 18 }, + rpcUrl: 'https://kovan.optimism.io', + }, + }, + _b$3[SupportedChainId.ARBITRUM_ONE] = { + networkType: NetworkType.L2, + blockWaitMsBeforeWarning: ms(templateObject_3$T || (templateObject_3$T = __makeTemplateObject(["10m"], ["10m"]))), + bridge: 'https://bridge.arbitrum.io/', + docs: 'https://offchainlabs.com/', + explorer: 'https://arbiscan.io/', + infoLink: 'https://info.uniswap.org/#/arbitrum', + label: 'Arbitrum', + logoUrl: arbitrumLogoUrl, + defaultListUrl: ARBITRUM_LIST, + helpCenterUrl: 'https://help.uniswap.org/en/collections/3137787-uniswap-on-arbitrum', + addNetworkInfo: { + nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, + rpcUrl: 'https://arb1.arbitrum.io/rpc', + }, + }, + _b$3[SupportedChainId.ARBITRUM_RINKEBY] = { + networkType: NetworkType.L2, + blockWaitMsBeforeWarning: ms(templateObject_4$H || (templateObject_4$H = __makeTemplateObject(["10m"], ["10m"]))), + bridge: 'https://bridge.arbitrum.io/', + docs: 'https://offchainlabs.com/', + explorer: 'https://rinkeby-explorer.arbitrum.io/', + infoLink: 'https://info.uniswap.org/#/arbitrum/', + label: 'Arbitrum Rinkeby', + logoUrl: arbitrumLogoUrl, + defaultListUrl: ARBITRUM_LIST, + helpCenterUrl: 'https://help.uniswap.org/en/collections/3137787-uniswap-on-arbitrum', + addNetworkInfo: { + nativeCurrency: { name: 'Rinkeby Arbitrum Ether', symbol: 'rinkArbETH', decimals: 18 }, + rpcUrl: 'https://rinkeby.arbitrum.io/rpc', + }, + }, + _b$3[SupportedChainId.POLYGON] = { + networkType: NetworkType.L1, + blockWaitMsBeforeWarning: ms(templateObject_5$y || (templateObject_5$y = __makeTemplateObject(["10m"], ["10m"]))), + bridge: 'https://wallet.polygon.technology/bridge', + docs: 'https://polygon.io/', + explorer: 'https://polygonscan.com/', + infoLink: 'https://info.uniswap.org/#/polygon/', + label: 'Polygon', + logoUrl: polygonMaticLogo, + addNetworkInfo: { + rpcUrl: 'https://polygon-rpc.com/', + nativeCurrency: { name: 'Polygon Matic', symbol: 'MATIC', decimals: 18 }, + }, + }, + _b$3[SupportedChainId.POLYGON_MUMBAI] = { + networkType: NetworkType.L1, + blockWaitMsBeforeWarning: ms(templateObject_6$p || (templateObject_6$p = __makeTemplateObject(["10m"], ["10m"]))), + bridge: 'https://wallet.polygon.technology/bridge', + docs: 'https://polygon.io/', + explorer: 'https://mumbai.polygonscan.com/', + infoLink: 'https://info.uniswap.org/#/polygon/', + label: 'Polygon Mumbai', + logoUrl: polygonMaticLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Polygon Mumbai Matic', symbol: 'mMATIC', decimals: 18 }, + rpcUrl: 'https://rpc-endpoints.superfluid.dev/mumbai', + }, + }, + _b$3); +var templateObject_1$1m, templateObject_2$10, templateObject_3$T, templateObject_4$H, templateObject_5$y, templateObject_6$p; + +function useNativeCurrency() { + var chainId = useActiveWeb3React().chainId; + return useMemo(function () { + return chainId + ? nativeOnChain(chainId) + : // display mainnet when not connected + nativeOnChain(SupportedChainId.MAINNET); + }, [chainId]); +} + +var EMPTY_CONNECTOR = initializeConnector(function () { return EMPTY; }); +atomWithDefault(function () { return EMPTY_CONNECTOR; }); +atomWithDefault(function () { return EMPTY_CONNECTOR; }); + +var REGISTRAR_ABI = [ + { + constant: true, + inputs: [ + { + name: 'node', + type: 'bytes32', + }, + ], + name: 'resolver', + outputs: [ + { + name: 'resolverAddress', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, +]; +var REGISTRAR_ADDRESS = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'; +var RESOLVER_ABI = [ + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'contenthash', + outputs: [ + { + internalType: 'bytes', + name: '', + type: 'bytes', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, +]; +// cache the resolver contracts since most of them are the public resolver +function resolverContract(resolverAddress, provider) { + return new Contract(resolverAddress, RESOLVER_ABI, provider); +} +/** + * Fetches and decodes the result of an ENS contenthash lookup on mainnet to a URI + * @param ensName to resolve + * @param provider provider to use to fetch the data + */ +function resolveENSContentHash(ensName, provider) { + return __awaiter(this, void 0, void 0, function () { + var ensRegistrarContract, hash, resolverAddress; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + ensRegistrarContract = new Contract(REGISTRAR_ADDRESS, REGISTRAR_ABI, provider); + hash = namehash(ensName); + return [4 /*yield*/, ensRegistrarContract.resolver(hash)]; + case 1: + resolverAddress = _a.sent(); + return [2 /*return*/, resolverContract(resolverAddress, provider).contenthash(hash)]; + } + }); + }); +} + +function hexToUint8Array(hex) { + hex = hex.startsWith('0x') ? hex.substr(2) : hex; + if (hex.length % 2 !== 0) + throw new Error('hex must have length that is multiple of 2'); + var arr = new Uint8Array(hex.length / 2); + for (var i = 0; i < arr.length; i++) { + arr[i] = parseInt(hex.substr(i * 2, 2), 16); + } + return arr; +} +var UTF_8_DECODER = new TextDecoder('utf-8'); +/** + * Returns the URI representation of the content hash for supported codecs + * @param contenthash to decode + */ +function contenthashToUri(contenthash) { + var data = hexToUint8Array(contenthash); + var codec = getNameFromData(data); + switch (codec) { + case 'ipfs-ns': { + var unprefixedData = rmPrefix(data); + var cid = new CID(unprefixedData); + return "ipfs://" + toB58String(cid.multihash); + } + case 'ipns-ns': { + var unprefixedData = rmPrefix(data); + var cid = new CID(unprefixedData); + var multihash = decode(cid.multihash); + if (multihash.name === 'identity') { + return "ipns://" + UTF_8_DECODER.decode(multihash.digest).trim(); + } + else { + return "ipns://" + toB58String(cid.multihash); + } + } + default: + throw new Error("Unrecognized codec: " + codec); + } +} + +var ENS_NAME_REGEX$1 = /^(([a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\.)+)eth(\/.*)?$/; +function parseENSAddress(ensAddress) { + var match = ensAddress.match(ENS_NAME_REGEX$1); + if (!match) + return undefined; + return { ensName: match[1].toLowerCase() + "eth", ensPath: match[4] }; +} + +/** + * Given a URI that may be ipfs, ipns, http, https, ar, or data protocol, return the fetch-able http(s) URLs for the same content + * @param uri to convert to fetch-able http url + */ +function uriToHttp(uri) { + var _a, _b, _c; + var protocol = uri.split(':')[0].toLowerCase(); + switch (protocol) { + case 'data': + return [uri]; + case 'https': + return [uri]; + case 'http': + return ['https' + uri.substr(4), uri]; + case 'ipfs': + var hash = (_a = uri.match(/^ipfs:(\/\/)?(.*)$/i)) === null || _a === void 0 ? void 0 : _a[2]; + return ["https://cloudflare-ipfs.com/ipfs/" + hash + "/", "https://ipfs.io/ipfs/" + hash + "/"]; + case 'ipns': + var name_1 = (_b = uri.match(/^ipns:(\/\/)?(.*)$/i)) === null || _b === void 0 ? void 0 : _b[2]; + return ["https://cloudflare-ipfs.com/ipns/" + name_1 + "/", "https://ipfs.io/ipns/" + name_1 + "/"]; + case 'ar': + var tx = (_c = uri.match(/^ar:(\/\/)?(.*)$/i)) === null || _c === void 0 ? void 0 : _c[2]; + return ["https://arweave.net/" + tx]; + default: + return []; + } +} + +var ValidationSchema; +(function (ValidationSchema) { + ValidationSchema["LIST"] = "list"; + ValidationSchema["TOKENS"] = "tokens"; +})(ValidationSchema || (ValidationSchema = {})); +var validator = new Promise(function (resolve) { return __awaiter(void 0, void 0, void 0, function () { + var _a, ajv, schema, validator; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: return [4 /*yield*/, Promise.all([import('ajv'), Promise.resolve().then(function () { return tokenlist_schema$1; })])]; + case 1: + _a = __read.apply(void 0, [_b.sent(), 2]), ajv = _a[0], schema = _a[1]; + validator = new ajv.default({ allErrors: true }) + .addSchema(schema, ValidationSchema.LIST) + // Adds a meta scheme of Pick + .addSchema(__assign(__assign({}, schema), { $id: schema.$id + '#tokens', required: ['tokens'] }), ValidationSchema.TOKENS); + resolve(validator); + return [2 /*return*/]; + } + }); +}); }); +function getValidationErrors(validate) { + var _a, _b; + return ((_b = (_a = validate === null || validate === void 0 ? void 0 : validate.errors) === null || _a === void 0 ? void 0 : _a.map(function (error) { return [error.dataPath, error.message].filter(Boolean).join(' '); }).join('; ')) !== null && _b !== void 0 ? _b : 'unknown error'); +} +/** + * Validates a token list. + * @param json the TokenList to validate + */ +function validateTokenList(json) { + return __awaiter(this, void 0, void 0, function () { + var validate; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, validator]; + case 1: + validate = (_a.sent()).getSchema(ValidationSchema.LIST); + if (validate === null || validate === void 0 ? void 0 : validate(json)) { + return [2 /*return*/, json]; + } + throw new Error("Token list failed validation: " + getValidationErrors(validate)); + } + }); + }); +} + +var listCache = new Map(); +/** Fetches and validates a token list. */ +function fetchTokenList$1(listUrl, resolveENSContentHash) { + var _a; + return __awaiter(this, void 0, void 0, function () { + var cached, urls, parsedENS, contentHashUri, error_1, message, translatedUri, message, i, url, isLast, response, error_2, message, message, json, list; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + cached = listCache === null || listCache === void 0 ? void 0 : listCache.get(listUrl) // avoid spurious re-fetches + ; + if (cached) { + return [2 /*return*/, cached]; + } + parsedENS = parseENSAddress(listUrl); + if (!parsedENS) return [3 /*break*/, 5]; + contentHashUri = void 0; + _b.label = 1; + case 1: + _b.trys.push([1, 3, , 4]); + return [4 /*yield*/, resolveENSContentHash(parsedENS.ensName)]; + case 2: + contentHashUri = _b.sent(); + return [3 /*break*/, 4]; + case 3: + error_1 = _b.sent(); + message = "failed to resolve ENS name: " + parsedENS.ensName; + console.debug(message, error_1); + throw new Error(message); + case 4: + translatedUri = void 0; + try { + translatedUri = contenthashToUri(contentHashUri); + } + catch (error) { + message = "failed to translate contenthash to URI: " + contentHashUri; + console.debug(message, error); + throw new Error(message); + } + urls = uriToHttp("" + translatedUri + ((_a = parsedENS.ensPath) !== null && _a !== void 0 ? _a : '')); + return [3 /*break*/, 6]; + case 5: + urls = uriToHttp(listUrl); + _b.label = 6; + case 6: + i = 0; + _b.label = 7; + case 7: + if (!(i < urls.length)) return [3 /*break*/, 15]; + url = urls[i]; + isLast = i === urls.length - 1; + response = void 0; + _b.label = 8; + case 8: + _b.trys.push([8, 10, , 11]); + return [4 /*yield*/, fetch(url, { credentials: 'omit' })]; + case 9: + response = _b.sent(); + return [3 /*break*/, 11]; + case 10: + error_2 = _b.sent(); + message = "failed to fetch list: " + listUrl; + console.debug(message, error_2); + if (isLast) + throw new Error(message); + return [3 /*break*/, 14]; + case 11: + if (!response.ok) { + message = "failed to fetch list: " + listUrl; + console.debug(message, response.statusText); + if (isLast) + throw new Error(message); + return [3 /*break*/, 14]; + } + return [4 /*yield*/, response.json()]; + case 12: + json = _b.sent(); + return [4 /*yield*/, validateTokenList(json)]; + case 13: + list = _b.sent(); + listCache === null || listCache === void 0 ? void 0 : listCache.set(listUrl, list); + return [2 /*return*/, list]; + case 14: + i++; + return [3 /*break*/, 7]; + case 15: throw new Error('Unrecognized list URL protocol.'); + } + }); + }); +} + +/** + * Returns a map of the given addresses to their eventually consistent ETH balances. + */ +function useNativeCurrencyBalances(uncheckedAddresses) { + var chainId = useActiveWeb3React().chainId; + var multicallContract = useInterfaceMulticall(); + var validAddressInputs = useMemo(function () { + return uncheckedAddresses + ? uncheckedAddresses + .map(isAddress) + .filter(function (a) { return a !== false; }) + .sort() + .map(function (addr) { return [addr]; }) + : []; + }, [uncheckedAddresses]); + var results = useSingleContractMultipleData(multicallContract, 'getEthBalance', validAddressInputs); + return useMemo(function () { + return validAddressInputs.reduce(function (memo, _a, i) { + var _b, _c; + var _d = __read(_a, 1), address = _d[0]; + var value = (_c = (_b = results === null || results === void 0 ? void 0 : results[i]) === null || _b === void 0 ? void 0 : _b.result) === null || _c === void 0 ? void 0 : _c[0]; + if (value && chainId) + memo[address] = CurrencyAmount.fromRawAmount(nativeOnChain(chainId), JSBI.BigInt(value.toString())); + return memo; + }, {}); + }, [validAddressInputs, chainId, results]); +} +var ERC20Interface = new Interface(ERC20ABI); +var tokenBalancesGasRequirement = { gasRequired: 125000 }; +/** + * Returns a map of token addresses to their eventually consistent token balances for a single account. + */ +function useTokenBalancesWithLoadingIndicator(address, tokens) { + var validatedTokens = useMemo(function () { var _a; return (_a = tokens === null || tokens === void 0 ? void 0 : tokens.filter(function (t) { return isAddress(t === null || t === void 0 ? void 0 : t.address) !== false; })) !== null && _a !== void 0 ? _a : []; }, [tokens]); + var validatedTokenAddresses = useMemo(function () { return validatedTokens.map(function (vt) { return vt.address; }); }, [validatedTokens]); + var balances = useMultipleContractSingleData(validatedTokenAddresses, ERC20Interface, 'balanceOf', useMemo(function () { return [address]; }, [address]), tokenBalancesGasRequirement); + var anyLoading = useMemo(function () { return balances.some(function (callState) { return callState.loading; }); }, [balances]); + return useMemo(function () { return [ + address && validatedTokens.length > 0 + ? validatedTokens.reduce(function (memo, token, i) { + var _a, _b; + var value = (_b = (_a = balances === null || balances === void 0 ? void 0 : balances[i]) === null || _a === void 0 ? void 0 : _a.result) === null || _b === void 0 ? void 0 : _b[0]; + var amount = value ? JSBI.BigInt(value.toString()) : undefined; + if (amount) { + memo[token.address] = CurrencyAmount.fromRawAmount(token, amount); + } + return memo; + }, {}) + : {}, + anyLoading, + ]; }, [address, validatedTokens, anyLoading, balances]); +} +function useTokenBalances(address, tokens) { + return useTokenBalancesWithLoadingIndicator(address, tokens)[0]; +} +// get the balance for a single token/account combo +function useTokenBalance(account, token) { + var tokenBalances = useTokenBalances(account, useMemo(function () { return [token]; }, [token])); + if (!token) + return undefined; + return tokenBalances[token.address]; +} +function useCurrencyBalances(account, currencies) { + var tokens = useMemo(function () { var _a; return (_a = currencies === null || currencies === void 0 ? void 0 : currencies.filter(function (currency) { var _a; return (_a = currency === null || currency === void 0 ? void 0 : currency.isToken) !== null && _a !== void 0 ? _a : false; })) !== null && _a !== void 0 ? _a : []; }, [currencies]); + var tokenBalances = useTokenBalances(account, tokens); + var containsETH = useMemo(function () { var _a; return (_a = currencies === null || currencies === void 0 ? void 0 : currencies.some(function (currency) { return currency === null || currency === void 0 ? void 0 : currency.isNative; })) !== null && _a !== void 0 ? _a : false; }, [currencies]); + var ethBalance = useNativeCurrencyBalances(useMemo(function () { return (containsETH ? [account] : []); }, [containsETH, account])); + return useMemo(function () { + var _a; + return (_a = currencies === null || currencies === void 0 ? void 0 : currencies.map(function (currency) { + if (!account || !currency) + return undefined; + if (currency.isToken) + return tokenBalances[currency.address]; + if (currency.isNative) + return ethBalance[account]; + return undefined; + })) !== null && _a !== void 0 ? _a : []; + }, [account, currencies, ethBalance, tokenBalances]); +} +function useCurrencyBalance(account, currency) { + return useCurrencyBalances(account, useMemo(function () { return [currency]; }, [currency]))[0]; +} + +var alwaysTrue = function () { return true; }; +/** Creates a filter function that filters tokens that do not match the query. */ +function getTokenFilter(query) { + var searchingAddress = isAddress(query); + if (searchingAddress) { + var address_1 = searchingAddress.toLowerCase(); + return function (t) { return 'address' in t && address_1 === t.address.toLowerCase(); }; + } + var queryParts = query + .toLowerCase() + .split(/\s+/) + .filter(function (s) { return s.length > 0; }); + if (queryParts.length === 0) + return alwaysTrue; + var match = function (s) { + var parts = s + .toLowerCase() + .split(/\s+/) + .filter(function (s) { return s.length > 0; }); + return queryParts.every(function (p) { return p.length === 0 || parts.some(function (sp) { return sp.startsWith(p) || sp.endsWith(p); }); }); + }; + return function (_a) { + var name = _a.name, symbol = _a.symbol; + return Boolean((symbol && match(symbol)) || (name && match(name))); + }; +} + +/** Sorts currency amounts (descending). */ +function balanceComparator(a, b) { + if (a && b) { + return a.greaterThan(b) ? -1 : a.equalTo(b) ? 0 : 1; + } + else if (a === null || a === void 0 ? void 0 : a.greaterThan('0')) { + return -1; + } + else if (b === null || b === void 0 ? void 0 : b.greaterThan('0')) { + return 1; + } + return 0; +} +/** Sorts tokens by currency amount (descending), then symbol (ascending). */ +function tokenComparator(balances, a, b) { + // Sorts by balances + var balanceComparison = balanceComparator(balances[a.address], balances[b.address]); + if (balanceComparison !== 0) + return balanceComparison; + // Sorts by symbol + if (a.symbol && b.symbol) { + return a.symbol.toLowerCase() < b.symbol.toLowerCase() ? -1 : 1; + } + return -1; +} +/** Sorts tokens by query, giving precedence to exact matches and partial matches. */ +function useSortTokensByQuery(query, tokens) { + return useMemo(function () { + if (!tokens) { + return []; + } + var matches = query + .toLowerCase() + .split(/\s+/) + .filter(function (s) { return s.length > 0; }); + if (matches.length > 1) { + return tokens; + } + var exactMatches = []; + var symbolSubtrings = []; + var rest = []; + // sort tokens by exact match -> subtring on symbol match -> rest + tokens.map(function (token) { + var _a, _b; + if (((_a = token.symbol) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === matches[0]) { + return exactMatches.push(token); + } + else if ((_b = token.symbol) === null || _b === void 0 ? void 0 : _b.toLowerCase().startsWith(query.toLowerCase().trim())) { + return symbolSubtrings.push(token); + } + else { + return rest.push(token); + } + }); + return __spreadArray(__spreadArray(__spreadArray([], __read(exactMatches), false), __read(symbolSubtrings), false), __read(rest), false); + }, [tokens, query]); +} + +/** + * Token instances created from token info on a token list. + */ +var WrappedTokenInfo = /** @class */ (function () { + function WrappedTokenInfo(tokenInfo, list) { + this.isNative = false; + this.isToken = true; + this._checksummedAddress = null; + this._tags = null; + this.tokenInfo = tokenInfo; + this.list = list; + } + Object.defineProperty(WrappedTokenInfo.prototype, "address", { + get: function () { + if (this._checksummedAddress) + return this._checksummedAddress; + var checksummedAddress = isAddress(this.tokenInfo.address); + if (!checksummedAddress) + throw new Error("Invalid token address: " + this.tokenInfo.address); + return (this._checksummedAddress = checksummedAddress); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(WrappedTokenInfo.prototype, "chainId", { + get: function () { + return this.tokenInfo.chainId; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(WrappedTokenInfo.prototype, "decimals", { + get: function () { + return this.tokenInfo.decimals; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(WrappedTokenInfo.prototype, "name", { + get: function () { + return this.tokenInfo.name; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(WrappedTokenInfo.prototype, "symbol", { + get: function () { + return this.tokenInfo.symbol; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(WrappedTokenInfo.prototype, "logoURI", { + get: function () { + return this.tokenInfo.logoURI; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(WrappedTokenInfo.prototype, "tags", { + get: function () { + var _a; + if (this._tags !== null) + return this._tags; + if (!this.tokenInfo.tags) + return (this._tags = []); + var listTags = (_a = this.list) === null || _a === void 0 ? void 0 : _a.tags; + if (!listTags) + return (this._tags = []); + return (this._tags = this.tokenInfo.tags.map(function (tagId) { + return __assign(__assign({}, listTags[tagId]), { id: tagId }); + })); + }, + enumerable: false, + configurable: true + }); + WrappedTokenInfo.prototype.equals = function (other) { + return other.chainId === this.chainId && other.isToken && other.address.toLowerCase() === this.address.toLowerCase(); + }; + WrappedTokenInfo.prototype.sortsBefore = function (other) { + if (this.equals(other)) + throw new Error('Addresses should not be equal'); + return this.address.toLowerCase() < other.address.toLowerCase(); + }; + Object.defineProperty(WrappedTokenInfo.prototype, "wrapped", { + get: function () { + return this; + }, + enumerable: false, + configurable: true + }); + return WrappedTokenInfo; +}()); + +var mapCache = typeof WeakMap !== 'undefined' ? new WeakMap() : null; +function tokensToChainTokenMap(tokens) { + var cached = mapCache === null || mapCache === void 0 ? void 0 : mapCache.get(tokens); + if (cached) + return cached; + var _a = __read(Array.isArray(tokens) ? [undefined, tokens] : [tokens, tokens.tokens], 2), list = _a[0], infos = _a[1]; + var map = infos.reduce(function (map, info) { + var _a; + var token = new WrappedTokenInfo(info, list); + if (((_a = map[token.chainId]) === null || _a === void 0 ? void 0 : _a[token.address]) !== undefined) { + console.warn("Duplicate token skipped: " + token.address); + return map; + } + if (!map[token.chainId]) { + map[token.chainId] = {}; + } + map[token.chainId][token.address] = { token: token, list: list }; + return map; + }, {}); + mapCache === null || mapCache === void 0 ? void 0 : mapCache.set(tokens, map); + return map; +} + +atom({}); + +// parse a name or symbol from a token response +var BYTES32_REGEX = /^0x[a-fA-F0-9]{64}$/; +function parseStringOrBytes32(str, bytes32, defaultValue) { + return str && str.length > 0 + ? str + : // need to check for proper bytes string and valid terminator + bytes32 && BYTES32_REGEX.test(bytes32) && arrayify(bytes32)[31] === 0 + ? parseBytes32String(bytes32) + : defaultValue; +} +/** + * Returns a Token from the tokenAddress. + * Returns null if token is loading or null was passed. + * Returns undefined if tokenAddress is invalid or token does not exist. + */ +function useTokenFromMap(tokens, tokenAddress) { + var chainId = useActiveWeb3React().chainId; + var address = isAddress(tokenAddress); + var tokenContract = useTokenContract(address ? address : undefined, false); + var tokenContractBytes32 = useBytes32TokenContract(address ? address : undefined, false); + var token = address ? tokens[address] : undefined; + var tokenName = useSingleCallResult(token ? undefined : tokenContract, 'name', undefined, NEVER_RELOAD); + var tokenNameBytes32 = useSingleCallResult(token ? undefined : tokenContractBytes32, 'name', undefined, NEVER_RELOAD); + var symbol = useSingleCallResult(token ? undefined : tokenContract, 'symbol', undefined, NEVER_RELOAD); + var symbolBytes32 = useSingleCallResult(token ? undefined : tokenContractBytes32, 'symbol', undefined, NEVER_RELOAD); + var decimals = useSingleCallResult(token ? undefined : tokenContract, 'decimals', undefined, NEVER_RELOAD); + return useMemo(function () { + var _a, _b, _c, _d; + if (token) + return token; + if (tokenAddress === null) + return null; + if (!chainId || !address) + return undefined; + if (decimals.loading || symbol.loading || tokenName.loading) + return null; + if (decimals.result) { + return new Token(chainId, address, decimals.result[0], parseStringOrBytes32((_a = symbol.result) === null || _a === void 0 ? void 0 : _a[0], (_b = symbolBytes32.result) === null || _b === void 0 ? void 0 : _b[0], 'UNKNOWN'), parseStringOrBytes32((_c = tokenName.result) === null || _c === void 0 ? void 0 : _c[0], (_d = tokenNameBytes32.result) === null || _d === void 0 ? void 0 : _d[0], 'Unknown Token')); + } + return undefined; + }, [ + address, + chainId, + decimals.loading, + decimals.result, + symbol.loading, + symbol.result, + symbolBytes32.result, + token, + tokenAddress, + tokenName.loading, + tokenName.result, + tokenNameBytes32.result, + ]); +} +/** + * Returns a Currency from the currencyId. + * Returns null if currency is loading or null was passed. + * Returns undefined if currencyId is invalid or token does not exist. + */ +function useCurrencyFromMap(tokens, currencyId) { + var _a; + var nativeCurrency = useNativeCurrency(); + var isNative = Boolean(nativeCurrency && (currencyId === null || currencyId === void 0 ? void 0 : currencyId.toUpperCase()) === 'ETH'); + var token = useTokenFromMap(tokens, isNative ? undefined : currencyId); + if (currencyId === null || currencyId === undefined) + return currencyId; + // this case so we use our builtin wrapped token instead of wrapped tokens on token lists + var wrappedNative = nativeCurrency === null || nativeCurrency === void 0 ? void 0 : nativeCurrency.wrapped; + if (((_a = wrappedNative === null || wrappedNative === void 0 ? void 0 : wrappedNative.address) === null || _a === void 0 ? void 0 : _a.toUpperCase()) === (currencyId === null || currencyId === void 0 ? void 0 : currencyId.toUpperCase())) + return wrappedNative; + return isNative ? nativeCurrency : token; +} + +var DEFAULT_LIST_PRIORITIES = DEFAULT_LIST_OF_LISTS.reduce(function (memo, listUrl, index) { + memo[listUrl] = index + 1; + return memo; +}, {}); +// use ordering of default list of lists to assign priority +function sortByListPriority(urlA, urlB) { + if (DEFAULT_LIST_PRIORITIES[urlA] && DEFAULT_LIST_PRIORITIES[urlB]) { + return DEFAULT_LIST_PRIORITIES[urlA] - DEFAULT_LIST_PRIORITIES[urlB]; + } + return 0; +} + +var name$1 = "Broken Token List"; +var timestamp$1 = "2021-01-05T20:47:02.923Z"; +var version$1 = { + major: 1, + minor: 0, + patch: 0 +}; +var tags$1 = { +}; +var logoURI$1 = "ipfs://QmNa8mQkrNKp1WEEeGjFezDmDeodkWRevGFN8JCV7b4Xir"; +var keywords$1 = [ + "uniswap", + "broken" +]; +var tokens$1 = [ + { + name: "UNI HODL", + address: "0x4bf5dc91E2555449293D7824028Eb8Fe5879B689", + symbol: "UniH", + decimals: 18, + chainId: 1, + logoURI: "" + } +]; +var BROKEN_LIST = { + name: name$1, + timestamp: timestamp$1, + version: version$1, + tags: tags$1, + logoURI: logoURI$1, + keywords: keywords$1, + tokens: tokens$1 +}; + +var name = "Unsupported Tokens"; +var timestamp = "2021-01-05T20:47:02.923Z"; +var version = { + major: 1, + minor: 0, + patch: 0 +}; +var tags = { +}; +var logoURI = "ipfs://QmNa8mQkrNKp1WEEeGjFezDmDeodkWRevGFN8JCV7b4Xir"; +var keywords = [ + "uniswap", + "unsupported" +]; +var tokens = [ + { + name: "Gold Tether", + address: "0x4922a015c4407F87432B179bb209e125432E4a2A", + symbol: "XAUt", + decimals: 6, + chainId: 1, + logoURI: "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4922a015c4407F87432B179bb209e125432E4a2A/logo.png" + }, + { + name: "Grump Cat", + address: "0x93B2FfF814FCaEFFB01406e80B4Ecd89Ca6A021b", + symbol: "GRUMPY", + decimals: 9, + chainId: 1, + logoURI: "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4922a015c4407F87432B179bb209e125432E4a2A/logo.png" + }, + { + name: "apeUSD-UMA Synthetic USD (Dec 2021)", + address: "0xfA5e27893aee4805283D86e4283Da64F8c72dd56", + symbol: "apeUSD-UMA-DEC21", + decimals: 18, + chainId: 1, + logoURI: "" + }, + { + chainId: 1, + address: "0xc6b11850241c5127eab73af4b6c68bc267cbbff4", + name: "oWETHp Put 360 DEC2520", + symbol: "oWETH-360P-12/25/20", + decimals: 7 + }, + { + chainId: 1, + name: "oYFIp Put 25000 OCT0220", + address: "0x452b421be5b30f0c6ad8c3f03c06bdaab4f5c56c", + symbol: "oYFI-25000P-10/02/20", + decimals: 7 + }, + { + chainId: 1, + name: "oWETHp Put 360 OCT3020", + address: "0x0578779e746d7186253a36cf651ea786acfcf087", + symbol: "oWETH-360P-10/30/20", + decimals: 7 + }, + { + chainId: 1, + name: "ETHc Call 500 OCT3020", + address: "0xf9aba2e43fb19184408ea3b572a0fd672946f87b", + symbol: "oETH-500C-10/30/20", + decimals: 6 + }, + { + chainId: 1, + name: "oBALp Put 22 OCT0220", + address: "0xdb0991dfc7e828b5a2837dc82d68e16490562c8d", + symbol: "oBAL-22P-10/02/20", + decimals: 7 + }, + { + chainId: 1, + name: "oCOMPp Put 150 SEP2520", + address: "0xe951ebe6b4420ab3f4844cf36dedd263d095b416", + symbol: "oCOMP-150P-09/25/20", + decimals: 7 + }, + { + chainId: 1, + name: "oCRVp Put 3 SEP252020", + address: "0x9215bd49b59748419eac6bad9dbe247df06ebdb9", + symbol: "oCRV-3P-09/25/20", + decimals: 7 + }, + { + chainId: 1, + name: "oETHp Put 180 SEP2520", + address: "0xE3A2c34Fa2F59ffa95C4ACd1E5663633d45Bc3AD", + symbol: "oETH-180P-09/25/20", + decimals: 7 + }, + { + chainId: 1, + name: "oETHc Call 400 SEP2520", + address: "0x05977EBC26825C0CD6097E0Ad7204721516711Eb", + symbol: "oETH-400C-09/25/20", + decimals: 7 + }, + { + chainId: 1, + name: "oWETHp Put 380 SEP1820", + address: "0x31f88266301b08631f9f0e33fd5c43c2a5d1e5b2", + symbol: "oWETH-380P-09/18/20", + decimals: 7 + }, + { + chainId: 1, + name: "oYFIp Put 8500 SEP1820", + address: "0xd1cec2f67fdc4c60e0963515dfc3343f31e32e47", + symbol: "oYFI-8500P-09/18/20", + decimals: 7 + }, + { + chainId: 1, + name: "oWETHp Put 370 SEP1120", + address: "0x15844029b2c2bf24506e9937739a9a912f1e4354", + symbol: "oWETH-370P-09/11/20", + decimals: 7 + }, + { + chainId: 1, + name: "oWETHp Put 400 SEP0420", + address: "0x5562c33c383f6386be4f6dcdbd35a3a99bbcfde6", + symbol: "oWETH-400P-09/04/20", + decimals: 7 + }, + { + chainId: 1, + name: "oETHp Put 200 AUG2820", + address: "0x3CBFC1397deF0602c2d211c70A1c0c38CEDB5448", + symbol: "oWETH-400P-09/04/20", + decimals: 7 + }, + { + chainId: 1, + name: "Opyn cDai Insurance", + symbol: "ocDai", + address: "0x98cc3bd6af1880fcfda17ac477b2f612980e5e33", + decimals: 8 + }, + { + chainId: 1, + name: "Opyn cUSDC Insurance", + symbol: "ocUSDC", + address: "0x8ED9f862363fFdFD3a07546e618214b6D59F03d4", + decimals: 8 + }, + { + chainId: 1, + address: "0x176C674Ee533C6139B0dc8b458D72A93dCB3e705", + symbol: "iAAVE", + name: "Synth Inverse Aave", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iAAVE.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x8A8079c7149B8A1611e5C5d978DCA3bE16545F83", + symbol: "iADA", + name: "Synth Inverse Cardano", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iADA.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0xAFD870F32CE54EfdBF677466B612bf8ad164454B", + symbol: "iBNB", + name: "Synth Inverse Binance Coin", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iBNB.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0xD6014EA05BDe904448B743833dDF07c3C7837481", + symbol: "iBTC", + name: "Synth Inverse Bitcoin", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iBTC.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x336213e1DDFC69f4701Fc3F86F4ef4A160c1159d", + symbol: "iCEX", + name: "Synth Inverse Centralised Exchange Index", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iCEX.svg", + tags: [ + "index", + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x6345728B1ccE16E6f8C509950b5c84FFF88530d9", + symbol: "iCOMP", + name: "Synth Inverse Compound", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iCOMP.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0xCB98f42221b2C251A4E74A1609722eE09f0cc08E", + symbol: "iDASH", + name: "Synth Inverse Dash", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDASH.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x14d10003807AC60d07BB0ba82cAeaC8d2087c157", + symbol: "iDEFI", + name: "Synth Inverse DeFi Index", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDEFI.svg", + tags: [ + "index", + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x46a97629C9C1F58De6EC18C7F536e7E6d6A6ecDe", + symbol: "iDOT", + name: "Synth Inverse Polkadot", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDOT.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0xF4EebDD0704021eF2a6Bbe993fdf93030Cd784b4", + symbol: "iEOS", + name: "Synth Inverse EOS", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iEOS.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0xd50c1746D835d2770dDA3703B69187bFfeB14126", + symbol: "iETC", + name: "Synth Inverse Ethereum Classic", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iETC.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0xA9859874e1743A32409f75bB11549892138BBA1E", + symbol: "iETH", + name: "Synth Inverse Ether", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iETH.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x2d7aC061fc3db53c39fe1607fB8cec1B2C162B01", + symbol: "iLINK", + name: "Synth Inverse Chainlink", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iLINK.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x79da1431150C9b82D2E5dfc1C68B33216846851e", + symbol: "iLTC", + name: "Synth Inverse Litecoin", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iLTC.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0xA5a5DF41883Cdc00c4cCC6E8097130535399d9a3", + symbol: "iOIL", + name: "Synth Inverse Perpetual Oil Futures", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iOIL.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x0fEd38108bdb8e62ef7b5680E8E0726E2F29e0De", + symbol: "iREN", + name: "Synth Inverse Ren", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iREN.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0xC5807183a9661A533CB08CbC297594a0B864dc12", + symbol: "iTRX", + name: "Synth Inverse TRON", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iTRX.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x36A00FF9072570eF4B9292117850B8FE08d96cce", + symbol: "iUNI", + name: "Synth Inverse Uniswap", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iUNI.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x4AdF728E2Df4945082cDD6053869f51278fae196", + symbol: "iXMR", + name: "Synth Inverse Monero", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXMR.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x27269b3e45A4D3E79A3D6BFeE0C8fB13d0D711A6", + symbol: "iXRP", + name: "Synth Inverse Ripple", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXRP.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x8deef89058090ac5655A99EEB451a4f9183D1678", + symbol: "iXTZ", + name: "Synth Inverse Tezos", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXTZ.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x592244301CeA952d6daB2fdC1fE6bd9E53917306", + symbol: "iYFI", + name: "Synth Inverse yearn.finance", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iYFI.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0xcD39b5434a0A92cf47D1F567a7dF84bE356814F0", + symbol: "s1INCH", + name: "Synth 1inch", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/s1INCH.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x7537AAe01f3B218DAE75e10d952473823F961B87", + symbol: "sAAPL", + name: "Synth Apple", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAAPL.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xd2dF355C19471c8bd7D8A3aa27Ff4e26A21b4076", + symbol: "sAAVE", + name: "Synth Aave", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAAVE.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xe36E2D3c7c34281FA3bC737950a68571736880A1", + symbol: "sADA", + name: "Synth Cardano", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sADA.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x9CF7E61853ea30A41b02169391b393B901eac457", + symbol: "sAMZN", + name: "Synth Amazon", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAMZN.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xF48e200EAF9906362BB1442fca31e0835773b8B4", + symbol: "sAUD", + name: "Synth Australian Dollars", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAUD.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x617aeCB6137B5108D1E7D4918e3725C8cEbdB848", + symbol: "sBNB", + name: "Synth Binance Coin", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sBNB.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xfE18be6b3Bd88A2D2A7f928d00292E7a9963CfC6", + symbol: "sBTC", + name: "Synth Bitcoin", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sBTC.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xeABACD844A196D7Faf3CE596edeBF9900341B420", + symbol: "sCEX", + name: "Synth Centralised Exchange Index", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCEX.svg", + tags: [ + "index", + "synth" + ] + }, + { + chainId: 1, + address: "0x0F83287FF768D1c1e17a42F44d644D7F22e8ee1d", + symbol: "sCHF", + name: "Synth Swiss Franc", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCHF.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x9EeF4CA7aB9fa8bc0650127341C2d3F707a40f8A", + symbol: "sCOIN", + name: "Synth Coinbase", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCOIN.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xEb029507d3e043DD6C87F2917C4E82B902c35618", + symbol: "sCOMP", + name: "Synth Compound", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCOMP.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xD38aEb759891882e78E957c80656572503D8c1B1", + symbol: "sCRV", + name: "Synth Curve DAO Token", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCRV.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xfE33ae95A9f0DA8A845aF33516EDc240DCD711d6", + symbol: "sDASH", + name: "Synth Dash", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDASH.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xe1aFe1Fd76Fd88f78cBf599ea1846231B8bA3B6B", + symbol: "sDEFI", + name: "Synth DeFi Index", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDEFI.svg", + tags: [ + "index", + "synth" + ] + }, + { + chainId: 1, + address: "0x1715AC0743102BF5Cd58EfBB6Cf2dC2685d967b6", + symbol: "sDOT", + name: "Synth Polkadot", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDOT.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x88C8Cf3A212c0369698D13FE98Fcb76620389841", + symbol: "sEOS", + name: "Synth EOS", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sEOS.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x22602469d704BfFb0936c7A7cfcD18f7aA269375", + symbol: "sETC", + name: "Synth Ethereum Classic", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sETC.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x5e74C9036fb86BD7eCdcb084a0673EFc32eA31cb", + symbol: "sETH", + name: "Synth Ether", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sETH.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xD71eCFF9342A5Ced620049e616c5035F1dB98620", + symbol: "sEUR", + name: "Synth Euros", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sEUR.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xf50B5e535F62a56A9BD2d8e2434204E726c027Fa", + symbol: "sFB", + name: "Synth Facebook", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sFB.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x23348160D7f5aca21195dF2b70f28Fce2B0be9fC", + symbol: "sFTSE", + name: "Synth FTSE 100 Index", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sFTSE.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x97fe22E7341a0Cd8Db6F6C021A24Dc8f4DAD855F", + symbol: "sGBP", + name: "Synth Pound Sterling", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sGBP.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xC63B8ECCE56aB9C46184eC6aB85e4771fEa4c8AD", + symbol: "sGOOG", + name: "Synth Alphabet", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sGOOG.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xF6b1C627e95BFc3c1b4c9B825a032Ff0fBf3e07d", + symbol: "sJPY", + name: "Synth Japanese Yen", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sJPY.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x269895a3dF4D73b077Fc823dD6dA1B95f72Aaf9B", + symbol: "sKRW", + name: "Synth South Korean Won", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sKRW.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xbBC455cb4F1B9e4bFC4B73970d360c8f032EfEE6", + symbol: "sLINK", + name: "Synth Chainlink", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sLINK.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xC14103C2141E842e228FBaC594579e798616ce7A", + symbol: "sLTC", + name: "Synth Litecoin", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sLTC.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x745a824D6aBBD236AA794b5530062778A6Ad7523", + symbol: "sMSFT", + name: "Synth Microsoft", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sMSFT.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x5A7E3c07604EB515C16b36cd51906a65f021F609", + symbol: "sNFLX", + name: "Synth Netflix", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sNFLX.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x757de3ac6B830a931eF178C6634c5C551773155c", + symbol: "sNIKKEI", + name: "Synth Nikkei 225 Index", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sNIKKEI.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x6d16cF3EC5F763d4d99cB0B0b110eefD93B11B56", + symbol: "sOIL", + name: "Synth Perpetual Oil Futures", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sOIL.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xD31533E8d0f3DF62060e94B3F1318137bB6E3525", + symbol: "sREN", + name: "Synth Ren", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sREN.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x0352557B007A4Aae1511C114409b932F06F9E2f4", + symbol: "sRUNE", + name: "Synth THORChain", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sRUNE.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xf2E08356588EC5cd9E437552Da87C0076b4970B0", + symbol: "sTRX", + name: "Synth TRON", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sTRX.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x918dA91Ccbc32B7a6A0cc4eCd5987bbab6E31e6D", + symbol: "sTSLA", + name: "Synth Tesla", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sTSLA.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x30635297E450b930f8693297eBa160D9e6c8eBcf", + symbol: "sUNI", + name: "Synth Uniswap", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sUNI.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x6A22e5e94388464181578Aa7A6B869e00fE27846", + symbol: "sXAG", + name: "Synth Silver Ounce", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXAG.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x261EfCdD24CeA98652B9700800a13DfBca4103fF", + symbol: "sXAU", + name: "Synth Gold Ounce", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXAU.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x5299d6F7472DCc137D7f3C4BcfBBB514BaBF341A", + symbol: "sXMR", + name: "Synth Monero", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXMR.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xa2B0fDe6D710e201d0d608e924A484d1A5fEd57c", + symbol: "sXRP", + name: "Synth Ripple", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXRP.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x2e59005c5c0f0a4D77CcA82653d48b46322EE5Cd", + symbol: "sXTZ", + name: "Synth Tezos", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXTZ.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x992058B7DB08F9734d84485bfbC243C4ee6954A7", + symbol: "sYFI", + name: "Synth yearn.finance", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sYFI.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x81ab848898b5ffD3354dbbEfb333D5D183eEDcB5", + name: "yUSD Synthetic Expiring 1 September 2020", + symbol: "yUSDSEP20", + decimals: 18 + }, + { + chainId: 1, + address: "0xB2FdD60AD80ca7bA89B9BAb3b5336c2601C020b4", + name: "yUSD Synthetic Expiring 1 October 2020", + symbol: "yUSDOCT20", + decimals: 18 + }, + { + chainId: 1, + address: "0x208d174775dc39fe18b1b374972f77ddec6c0f73", + name: "uUSDrBTC Synthetic Expiring 1 Oct 2020", + symbol: "uUSDrBTC-OCT", + decimals: 18 + }, + { + chainId: 1, + address: "0xf06ddacf71e2992e2122a1a0168c6967afdf63ce", + name: "uUSDrBTC Synthetic Expiring 31 Dec 2020", + symbol: "uUSDrBTC-DEC", + decimals: 18 + }, + { + chainId: 1, + address: "0xd16c79c8a39d44b2f3eb45d2019cd6a42b03e2a9", + name: "uUSDwETH Synthetic Expiring 31 Dec 2020", + symbol: "uUSDwETH-DEC", + decimals: 18 + }, + { + chainId: 1, + address: "0x3d995510f8d82c2ea341845932b5ddde0bead9a3", + name: "uGAS-JAN21 Token Expiring 31 Jan 2021", + symbol: "uGAS-JAN21", + decimals: 18 + }, + { + chainId: 1, + address: "0x90f802c7e8fb5d40b0de583e34c065a3bd2020d8", + name: "YD-ETH-MAR21 Token Expiring 31 Mar 2021", + symbol: "YD-ETH-MAR21", + decimals: 18 + }, + { + chainId: 1, + address: "0x002f0b1a71c5730cf2f4da1970a889207bdb6d0d", + name: "YD-BTC-MAR21 Token Expiring 31 Mar 2021", + symbol: "YD-BTC-MAR21", + decimals: 18 + }, + { + chainId: 1, + address: "0x1062ad0e59fa67fa0b27369113098cc941dd0d5f", + name: "UMA 35 Call Expirying 30 Apr 2021", + symbol: "UMAc35-0421", + decimals: 18 + }, + { + chainId: 1, + address: "0xf93340b1a3adf7eedcaec25fae8171d4b736e89f", + name: "pxUSD Synthetic USD Expiring 1 April 2021", + symbol: "pxUSD_MAR2021", + decimals: 18 + }, + { + chainId: 1, + address: "0x84bd083b1c8bf929f39c98bc17cf518f40154f58", + name: "Mario Cash Synthetic Token Expiring 15 January 2021", + symbol: "Mario Cash-JAN-2021", + decimals: 18 + }, + { + chainId: 1, + address: "0x81fab276aec924fbde190cf379783526d413cf70", + name: "uGAS-FEB21 Token Expiring 28 Feb 2021", + symbol: "uGAS-FEB21", + decimals: 18 + }, + { + chainId: 1, + address: "0x4e110603e70b0b5f1c403ee543b37e1f1244cf28", + name: "uGAS-MAR21 Token Expiring 31 Mar 2021", + symbol: "uGAS-MAR21", + decimals: 18 + }, + { + chainId: 1, + address: "0xcf55a7f92d5e0c6683debbc1fc20c0a6e056df13", + name: "Zelda Elastic Cash", + symbol: "Zelda Elastic Cash", + decimals: 18 + }, + { + chainId: 1, + address: "0x654eebac62240e6c56bab5f6adf7cfa74a894510", + name: "Zelda Spring Nuts Cash", + symbol: "Zelda Spring Nuts Cash", + decimals: 18 + }, + { + chainId: 1, + address: "0xa48920cc1ad85d8ea13af5d7be180c0338c306dd", + name: "Zelda Summer Nuts Cash", + symbol: "Zelda Summer Nuts Cash", + decimals: 18 + }, + { + chainId: 1, + address: "0x249a198d59b57fda5dda90630febc86fd8c7594c", + name: "Zelda Whirlwind Cash", + symbol: "Zelda Whirlwind Cash", + decimals: 18 + }, + { + chainId: 1, + address: "0x5ed1406873c9eb91f6f9a67ac4e152387c1132e7", + name: "Zelda Reinforced Cash", + symbol: "Zelda Reinforced Cash", + decimals: 18 + }, + { + chainId: 1, + address: "0x8104c9f13118320eefe5fbea8a44d600b85981ef", + name: "Mini Mario Summer Cash", + symbol: "Mini Mario Summer Cash", + decimals: 18 + }, + { + chainId: 1, + address: "0x69746c719e59674b147df25f50e7cfa0673cb625", + name: "Mini Mario Spring Cash", + symbol: "Mini Mario Spring Cash", + decimals: 18 + }, + { + chainId: 1, + address: "0x6b1257641d18791141f025eab36fb567c4b564ff", + name: "Bitcoin Dominance Token 31 March 2021", + symbol: "BTCDOM-MAR2021", + decimals: 18 + }, + { + chainId: 1, + address: "0x4e83b6287588a96321b2661c5e041845ff7814af", + name: "Altcoin Dominance Token 31 March 2021", + symbol: "ALTDOM-MAR2021", + decimals: 18 + }, + { + chainId: 1, + address: "0x59fec83ec709c893aedd1a144cf1828eb04127cd", + name: "pxGOLD Synthetic GOLD Expiring 31 May 2021", + symbol: "pxGOLD_MAY2021", + decimals: 18 + }, + { + chainId: 1, + address: "0x89337BFb7938804c3776C9FB921EccAf5ab76758", + name: "Compound Annualized Rate Future Expiring 28 March 2021", + symbol: "CAR-USDC-MAR21", + decimals: 18 + }, + { + chainId: 1, + address: "0xec58d3aefc9aaa2e0036fa65f70d569f49d9d1ed", + name: "uSTONKS Index Token April 2021", + symbol: "uSTONKS_APR21", + decimals: 6 + }, + { + chainId: 1, + address: "0xa6B9d7E3d76cF23549293Fb22c488E0Ea591A44e", + name: "uGAS-JUN21 Token Expiring 30 Jun 2021", + symbol: "uGAS-JUN21", + decimals: 18 + }, + { + chainId: 1, + address: "0xe813b65da6c38a04591aed3f082d32db7d53c382", + name: "Yield Dollar [WETH Dec 2021]", + symbol: "YD-ETH-DEC21", + decimals: 18 + }, + { + chainId: 1, + address: "0x4b606e9eb2228c70f44453afe5a73e1fea258ce1", + name: "pxUSD Synthetic USD Expiring 31 Mar 2022", + symbol: "pxUSD_MAR2022", + decimals: 18 + }, + { + chainId: 1, + address: "0x5247c0db4044fb6f97f32c7e1b48758019a5a912", + name: "pxGOLD Synthetic Gold Expiring 31 Mar 2022", + symbol: "pxGOLD_MAR2022", + decimals: 18 + }, + { + chainId: 1, + address: "0x56fb1acaff95c0b6ebcd17c8361a63d98b1a5a11", + name: "uForex CNYUSD Synthetic Token April 2021", + symbol: "uCNYUSD-APR", + decimals: 6 + }, + { + chainId: 1, + address: "0xd49fa405dce086c65d66ca1ca41f8e98583812b4", + name: "uForex EURUSD Synthetic Token April 2021", + symbol: "uEURUSD-APR", + decimals: 6 + }, + { + chainId: 1, + address: "0x29dddacba3b231ee8d673dd0f0fa759ea145561b", + name: "DEFI_PULSE_TOTAL_TVL Synthetic Token Expiring 15 April 2021", + symbol: "TVL_ALL_APRIL15", + decimals: 6 + }, + { + chainId: 1, + address: "0xcbe430927370e95b4b10cfc702c6017ec7abefc3", + name: "Yield Dollar [WETH Jun 2021]", + symbol: "YD-ETH-JUN21", + decimals: 18 + }, + { + chainId: 1, + address: "0x4b7fb448df91c8ed973494f8c8c4f12daf3a8521", + name: "Yield Dollar [renBTC Jun 2021]", + symbol: "YD-BTC-JUN21", + decimals: 8 + }, + { + chainId: 1, + address: "0x3108c33b6fb38efedaefd8b5f7ca01d5f5c7372d", + name: "Yield Dollar UMA 21", + symbol: "yUMA21", + decimals: 18 + }, + { + chainId: 1, + address: "0x0cae9e4d663793c2a2A0b211c1Cf4bBca2B9cAa7", + name: "Mirrored Amazon", + symbol: "MAMZN", + decimals: 18 + }, + { + chainId: 1, + address: "0x31c63146a635EB7465e5853020b39713AC356991", + name: "M US Oil", + symbol: "MUSO", + decimals: 18 + }, + { + chainId: 1, + address: "0x59A921Db27Dd6d4d974745B7FfC5c33932653442", + name: "M Google", + symbol: "MGOOGL", + decimals: 18 + }, + { + chainId: 1, + address: "0xf72FCd9DCF0190923Fadd44811E240Ef4533fc86", + name: "Mirrored ProShares", + symbol: "MVIXY", + decimals: 18 + }, + { + chainId: 1, + address: "0x56aA298a19C93c6801FDde870fA63EF75Cc0aF72", + name: "Mirrored Alibaba", + symbol: "MBABA", + decimals: 18 + }, + { + chainId: 1, + address: "0x0e99cC0535BB6251F6679Fa6E65d6d3b430e840B", + name: "Mirrored Facebook", + symbol: "MFB", + decimals: 18 + }, + { + chainId: 1, + address: "0x13B02c8dE71680e71F0820c996E4bE43c2F57d15", + name: "Mirrored Invesco QQ", + symbol: "MQQQ", + decimals: 18 + }, + { + chainId: 1, + address: "0x41BbEDd7286dAab5910a1f15d12CBda839852BD7", + name: "Mirrored Microsoft", + symbol: "MMSFT", + decimals: 18 + }, + { + chainId: 1, + address: "0x9d1555d8cB3C846Bb4f7D5B1B1080872c3166676", + name: "Mirrored iShares Si", + symbol: "MSLV", + decimals: 18 + }, + { + chainId: 1, + address: "0x21cA39943E91d704678F5D00b6616650F066fD63", + name: "Mirrored Tesla", + symbol: "MTSLA", + decimals: 18 + }, + { + chainId: 1, + address: "0xe82bbB62fA81d0701643d1675FB50ec52fD3Df92", + name: "DYDX Token", + symbol: "DYDX", + decimals: 18 + }, + { + chainId: 10, + address: "0xE405de8F52ba7559f9df3C368500B6E6ae6Cee49", + name: "sETH", + symbol: "Synth Ether", + decimals: 18 + }, + { + chainId: 10, + address: "0x298B9B95708152ff6968aafd889c6586e9169f1D", + name: "sBTC", + symbol: "Synth Bitcoin", + decimals: 18 + }, + { + chainId: 10, + address: "0xc5Db22719A06418028A40A9B5E9A7c02959D0d08", + name: "sLINK", + symbol: "Synth Link", + decimals: 18 + }, + { + chainId: 1, + address: "0x6B60eE11b73230045cF9095E6e43AE9Ea638e172", + name: "Shatner", + symbol: "SHAT", + decimals: 18 + }, + { + chainId: 1, + address: "0x7277a44D1325D81Ac58893002a1B40a41bea43fe", + name: "FAANG Index", + symbol: "FAANG", + decimals: 18 + }, + { + chainId: 1, + address: "0x76175599887730786bdA1545D0D7AcE8737fEBB1", + name: "ENS DAO", + symbol: "ENS", + decimals: 18 + }, + { + chainId: 1, + address: "0xa82AA729AE2F0d78e961D66db53949e27a9E866d", + name: "BMEX", + symbol: "BMEX", + decimals: 18 + } +]; +var UNSUPPORTED_TOKEN_LIST = { + name: name, + timestamp: timestamp, + version: version, + tags: tags, + logoURI: logoURI, + keywords: keywords, + tokens: tokens +}; + +function useAllLists() { + return useAppSelector(function (state) { return state.lists.byUrl; }); +} +/** + * Combine the tokens in map2 with the tokens on map1, where tokens on map1 take precedence + * @param map1 the base token map + * @param map2 the map of additioanl tokens to add to the base map + */ +function combineMaps(map1, map2) { + var chainIds = Object.keys(Object.keys(map1) + .concat(Object.keys(map2)) + .reduce(function (memo, value) { + memo[value] = true; + return memo; + }, {})).map(function (id) { return parseInt(id); }); + return chainIds.reduce(function (memo, chainId) { + memo[chainId] = __assign(__assign({}, map2[chainId]), map1[chainId]); + return memo; + }, {}); +} +// merge tokens contained within lists from urls +function useCombinedTokenMapFromUrls(urls) { + var lists = useAllLists(); + return useMemo(function () { + if (!urls) + return {}; + return (urls + .slice() + // sort by priority so top priority goes last + .sort(sortByListPriority) + .reduce(function (allTokens, currentUrl) { + var _a; + var current = (_a = lists[currentUrl]) === null || _a === void 0 ? void 0 : _a.current; + if (!current) + return allTokens; + try { + return combineMaps(allTokens, tokensToChainTokenMap(current)); + } + catch (error) { + console.error('Could not show token list due to error', error); + return allTokens; + } + }, {})); + }, [lists, urls]); +} +// filter out unsupported lists +function useActiveListUrls() { + var activeListUrls = useAppSelector(function (state) { return state.lists.activeListUrls; }); + return useMemo(function () { return activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.filter(function (url) { return !UNSUPPORTED_LIST_URLS.includes(url); }); }, [activeListUrls]); +} +function useInactiveListUrls() { + var lists = useAllLists(); + var allActiveListUrls = useActiveListUrls(); + return useMemo(function () { return Object.keys(lists).filter(function (url) { return !(allActiveListUrls === null || allActiveListUrls === void 0 ? void 0 : allActiveListUrls.includes(url)) && !UNSUPPORTED_LIST_URLS.includes(url); }); }, [lists, allActiveListUrls]); +} +// get all the tokens from active lists, combine with local default tokens +function useCombinedActiveList() { + var activeListUrls = useActiveListUrls(); + var activeTokens = useCombinedTokenMapFromUrls(activeListUrls); + return activeTokens; +} +// list of tokens not supported on interface for various reasons, used to show warnings and prevent swaps and adds +function useUnsupportedTokenList() { + // get hard-coded broken tokens + var brokenListMap = useMemo(function () { return tokensToChainTokenMap(BROKEN_LIST); }, []); + // get hard-coded list of unsupported tokens + var localUnsupportedListMap = useMemo(function () { return tokensToChainTokenMap(UNSUPPORTED_TOKEN_LIST); }, []); + // get dynamic list of unsupported tokens + var loadedUnsupportedListMap = useCombinedTokenMapFromUrls(UNSUPPORTED_LIST_URLS); + // format into one token address map + return useMemo(function () { return combineMaps(brokenListMap, combineMaps(localUnsupportedListMap, loadedUnsupportedListMap)); }, [brokenListMap, localUnsupportedListMap, loadedUnsupportedListMap]); +} +function useIsListActive(url) { + var activeListUrls = useActiveListUrls(); + return Boolean(activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(url)); +} + +// reduce token map into standard address <-> Token mapping, optionally include user added tokens +function useTokensFromMap(tokenMap, includeUserAdded) { + var chainId = useActiveWeb3React().chainId; + var userAddedTokens = useUserAddedTokens(); + return useMemo(function () { + var _a; + if (!chainId) + return {}; + // reduce to just tokens + var mapWithoutUrls = Object.keys((_a = tokenMap[chainId]) !== null && _a !== void 0 ? _a : {}).reduce(function (newMap, address) { + newMap[address] = tokenMap[chainId][address].token; + return newMap; + }, {}); + if (includeUserAdded) { + return (userAddedTokens + // reduce into all ALL_TOKENS filtered by the current chain + .reduce(function (tokenMap, token) { + tokenMap[token.address] = token; + return tokenMap; + }, __assign({}, mapWithoutUrls))); + } + return mapWithoutUrls; + }, [chainId, userAddedTokens, tokenMap, includeUserAdded]); +} +function useAllTokens() { + var allTokens = useCombinedActiveList(); + return useTokensFromMap(allTokens, true); +} +function useUnsupportedTokens() { + var chainId = useActiveWeb3React().chainId; + var listsByUrl = useAllLists(); + var unsupportedTokensMap = useUnsupportedTokenList(); + var unsupportedTokens = useTokensFromMap(unsupportedTokensMap, false); + // checks the default L2 lists to see if `bridgeInfo` has an L1 address value that is unsupported + var l2InferredBlockedTokens = useMemo(function () { + if (!chainId || !L2_CHAIN_IDS.includes(chainId)) { + return {}; + } + if (!listsByUrl) { + return {}; + } + var listUrl = CHAIN_INFO[chainId].defaultListUrl; + var list = listsByUrl[listUrl].current; + if (!list) { + return {}; + } + var unsupportedSet = new Set(Object.keys(unsupportedTokens)); + return list.tokens.reduce(function (acc, tokenInfo) { + var _a; + var _b; + var bridgeInfo = (_b = tokenInfo.extensions) === null || _b === void 0 ? void 0 : _b.bridgeInfo; + if (bridgeInfo && + bridgeInfo[SupportedChainId.MAINNET] && + bridgeInfo[SupportedChainId.MAINNET].tokenAddress && + unsupportedSet.has(bridgeInfo[SupportedChainId.MAINNET].tokenAddress)) { + var address = bridgeInfo[SupportedChainId.MAINNET].tokenAddress; + // don't rely on decimals--it's possible that a token could be bridged w/ different decimals on the L2 + return __assign(__assign({}, acc), (_a = {}, _a[address] = new Token(SupportedChainId.MAINNET, address, tokenInfo.decimals), _a)); + } + return acc; + }, {}); + }, [chainId, listsByUrl, unsupportedTokens]); + return __assign(__assign({}, unsupportedTokens), l2InferredBlockedTokens); +} +function useSearchInactiveTokenLists(search, minResults) { + if (minResults === void 0) { minResults = 10; } + var lists = useAllLists(); + var inactiveUrls = useInactiveListUrls(); + var chainId = useActiveWeb3React().chainId; + var activeTokens = useAllTokens(); + return useMemo(function () { + var e_1, _a, e_2, _b; + if (!search || search.trim().length === 0) + return []; + var tokenFilter = getTokenFilter(search); + var result = []; + var addressSet = {}; + try { + for (var inactiveUrls_1 = __values(inactiveUrls), inactiveUrls_1_1 = inactiveUrls_1.next(); !inactiveUrls_1_1.done; inactiveUrls_1_1 = inactiveUrls_1.next()) { + var url = inactiveUrls_1_1.value; + var list = lists[url].current; + if (!list) + continue; + try { + for (var _c = (e_2 = void 0, __values(list.tokens)), _d = _c.next(); !_d.done; _d = _c.next()) { + var tokenInfo = _d.value; + if (tokenInfo.chainId === chainId && tokenFilter(tokenInfo)) { + var wrapped = new WrappedTokenInfo(tokenInfo, list); + if (!(wrapped.address in activeTokens) && !addressSet[wrapped.address]) { + addressSet[wrapped.address] = true; + result.push(wrapped); + if (result.length >= minResults) + return result; + } + } + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_d && !_d.done && (_b = _c.return)) _b.call(_c); + } + finally { if (e_2) throw e_2.error; } + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (inactiveUrls_1_1 && !inactiveUrls_1_1.done && (_a = inactiveUrls_1.return)) _a.call(inactiveUrls_1); + } + finally { if (e_1) throw e_1.error; } + } + return result; + }, [activeTokens, chainId, inactiveUrls, lists, minResults, search]); +} +function useIsTokenActive(token) { + var activeTokens = useAllTokens(); + if (!activeTokens || !token) { + return false; + } + return !!activeTokens[token.address]; +} +// Check if currency is included in custom list from user storage +function useIsUserAddedToken(currency) { + var userAddedTokens = useUserAddedTokens(); + if (!currency) { + return false; + } + return !!userAddedTokens.find(function (token) { return currency.equals(token); }); +} +// undefined if invalid or does not exist +// null if loading or null was passed +// otherwise returns the token +function useToken(tokenAddress) { + var tokens = useAllTokens(); + return useTokenFromMap(tokens, tokenAddress); +} +function useCurrency(currencyId) { + var tokens = useAllTokens(); + return useCurrencyFromMap(tokens, currencyId); +} + +function serializeToken(token) { + return { + chainId: token.chainId, + address: token.address, + decimals: token.decimals, + symbol: token.symbol, + name: token.name, + }; +} +function deserializeToken(serializedToken) { + return new Token(serializedToken.chainId, serializedToken.address, serializedToken.decimals, serializedToken.symbol, serializedToken.name); +} +function useIsDarkMode() { + var _a = useAppSelector(function (_a) { + var _b = _a.user, matchesDarkMode = _b.matchesDarkMode, userDarkMode = _b.userDarkMode; + return ({ + userDarkMode: userDarkMode, + matchesDarkMode: matchesDarkMode, + }); + }, shallowEqual), userDarkMode = _a.userDarkMode, matchesDarkMode = _a.matchesDarkMode; + return userDarkMode === null ? matchesDarkMode : userDarkMode; +} +function useDarkModeManager() { + var dispatch = useAppDispatch(); + var darkMode = useIsDarkMode(); + var toggleSetDarkMode = useCallback(function () { + dispatch(updateUserDarkMode({ userDarkMode: !darkMode })); + }, [darkMode, dispatch]); + return [darkMode, toggleSetDarkMode]; +} +function useUserLocale() { + return useAppSelector(function (state) { return state.user.userLocale; }); +} +function useUserLocaleManager() { + var dispatch = useAppDispatch(); + var locale = useUserLocale(); + var setLocale = useCallback(function (newLocale) { + dispatch(updateUserLocale({ userLocale: newLocale })); + }, [dispatch]); + return [locale, setLocale]; +} +function useIsExpertMode() { + return useAppSelector(function (state) { return state.user.userExpertMode; }); +} +function useExpertModeManager() { + var dispatch = useAppDispatch(); + var expertMode = useIsExpertMode(); + var toggleSetExpertMode = useCallback(function () { + dispatch(updateUserExpertMode({ userExpertMode: !expertMode })); + }, [expertMode, dispatch]); + return [expertMode, toggleSetExpertMode]; +} +function useShowSurveyPopup() { + var dispatch = useAppDispatch(); + var showSurveyPopup = useAppSelector(function (state) { return state.user.showSurveyPopup; }); + var toggleShowSurveyPopup = useCallback(function (showPopup) { + dispatch(updateShowSurveyPopup({ showSurveyPopup: showPopup })); + }, [dispatch]); + return [showSurveyPopup, toggleShowSurveyPopup]; +} +function useClientSideRouter() { + var dispatch = useAppDispatch(); + var clientSideRouter = useAppSelector(function (state) { return Boolean(state.user.userClientSideRouter); }); + var setClientSideRouter = useCallback(function (newClientSideRouter) { + dispatch(updateUserClientSideRouter({ userClientSideRouter: newClientSideRouter })); + }, [dispatch]); + return [clientSideRouter, setClientSideRouter]; +} +function useSetUserSlippageTolerance() { + var dispatch = useAppDispatch(); + return useCallback(function (userSlippageTolerance) { + var value; + try { + value = + userSlippageTolerance === 'auto' ? 'auto' : JSBI.toNumber(userSlippageTolerance.multiply(10000).quotient); + } + catch (error) { + value = 'auto'; + } + dispatch(updateUserSlippageTolerance({ + userSlippageTolerance: value, + })); + }, [dispatch]); +} +/** + * Return the user's slippage tolerance, from the redux store, and a function to update the slippage tolerance + */ +function useUserSlippageTolerance() { + var userSlippageTolerance = useAppSelector(function (state) { + return state.user.userSlippageTolerance; + }); + return useMemo(function () { return (userSlippageTolerance === 'auto' ? 'auto' : new Percent(userSlippageTolerance, 10000)); }, [userSlippageTolerance]); +} +/** + * Same as above but replaces the auto with a default value + * @param defaultSlippageTolerance the default value to replace auto with + */ +function useUserSlippageToleranceWithDefault(defaultSlippageTolerance) { + var allowedSlippage = useUserSlippageTolerance(); + return useMemo(function () { return (allowedSlippage === 'auto' ? defaultSlippageTolerance : allowedSlippage); }, [allowedSlippage, defaultSlippageTolerance]); +} +function useUserTransactionTTL() { + var chainId = useActiveWeb3React().chainId; + var dispatch = useAppDispatch(); + var userDeadline = useAppSelector(function (state) { return state.user.userDeadline; }); + var onL2 = Boolean(chainId && L2_CHAIN_IDS.includes(chainId)); + var deadline = onL2 ? L2_DEADLINE_FROM_NOW : userDeadline; + var setUserDeadline = useCallback(function (userDeadline) { + dispatch(updateUserDeadline({ userDeadline: userDeadline })); + }, [dispatch]); + return [deadline, setUserDeadline]; +} +function useAddUserToken() { + var dispatch = useAppDispatch(); + return useCallback(function (token) { + dispatch(addSerializedToken({ serializedToken: serializeToken(token) })); + }, [dispatch]); +} +function useRemoveUserAddedToken() { + var dispatch = useAppDispatch(); + return useCallback(function (chainId, address) { + dispatch(removeSerializedToken({ chainId: chainId, address: address })); + }, [dispatch]); +} +function useUserAddedTokens() { + var chainId = useActiveWeb3React().chainId; + var serializedTokensMap = useAppSelector(function (_a) { + var tokens = _a.user.tokens; + return tokens; + }); + return useMemo(function () { + if (!chainId) + return []; + var tokenMap = (serializedTokensMap === null || serializedTokensMap === void 0 ? void 0 : serializedTokensMap[chainId]) + ? Object.values(serializedTokensMap[chainId]).map(deserializeToken) + : []; + return tokenMap; + }, [serializedTokensMap, chainId]); +} +function useURLWarningVisible() { + return useAppSelector(function (state) { return state.user.URLWarningVisible; }); +} + +var EXPLORER_HOSTNAMES = { + 'etherscan.io': true, + 'ropsten.etherscan.io': true, + 'rinkeby.etherscan.io': true, + 'kovan.etherscan.io': true, + 'goerli.etherscan.io': true, + 'optimistic.etherscan.io': true, + 'kovan-optimistic.etherscan.io': true, + 'rinkeby-explorer.arbitrum.io': true, + 'arbiscan.io': true, +}; +/** + * Returns the anonymized version of the given href, i.e. one that does not leak user information + * @param href the link to anonymize, i.e. remove any personal data from + * @return string anonymized version of the given href + */ +function anonymizeLink(href) { + try { + var url = new URL(href); + if (EXPLORER_HOSTNAMES[url.hostname]) { + var pathPieces = url.pathname.split('/'); + var anonymizedPath = pathPieces.map(function (pc) { return (/0x[a-fA-F0-9]+/.test(pc) ? '***' : pc); }).join('/'); + return url.protocol + "//" + url.hostname + anonymizedPath; + } + return href; + } + catch (error) { + return href; + } +} + +var ButtonText = styled.button(templateObject_1$1l || (templateObject_1$1l = __makeTemplateObject(["\n outline: none;\n border: none;\n font-size: inherit;\n padding: 0;\n margin: 0;\n background: none;\n cursor: pointer;\n\n :hover {\n opacity: 0.7;\n }\n\n :focus {\n text-decoration: underline;\n }\n"], ["\n outline: none;\n border: none;\n font-size: inherit;\n padding: 0;\n margin: 0;\n background: none;\n cursor: pointer;\n\n :hover {\n opacity: 0.7;\n }\n\n :focus {\n text-decoration: underline;\n }\n"]))); +var CloseIcon$2 = styled(X)(templateObject_2$$ || (templateObject_2$$ = __makeTemplateObject(["\n cursor: pointer;\n"], ["\n cursor: pointer;\n" + // for wrapper react feather icons +]))); +// for wrapper react feather icons +var IconWrapper$4 = styled.div(templateObject_3$S || (templateObject_3$S = __makeTemplateObject(["\n display: flex;\n align-items: center;\n justify-content: center;\n width: ", ";\n height: ", ";\n margin-right: ", ";\n margin-left: ", ";\n & > * {\n stroke: ", ";\n }\n"], ["\n display: flex;\n align-items: center;\n justify-content: center;\n width: ", ";\n height: ", ";\n margin-right: ", ";\n margin-left: ", ";\n & > * {\n stroke: ", ";\n }\n" + // A button that triggers some onClick result, but looks like a link. +])), function (_a) { + var size = _a.size; + return size !== null && size !== void 0 ? size : '20px'; +}, function (_a) { + var size = _a.size; + return size !== null && size !== void 0 ? size : '20px'; +}, function (_a) { + var marginRight = _a.marginRight; + return marginRight !== null && marginRight !== void 0 ? marginRight : 0; +}, function (_a) { + var marginLeft = _a.marginLeft; + return marginLeft !== null && marginLeft !== void 0 ? marginLeft : 0; +}, function (_a) { + var theme = _a.theme, stroke = _a.stroke; + return stroke !== null && stroke !== void 0 ? stroke : theme.blue1; +}); +// A button that triggers some onClick result, but looks like a link. +var LinkStyledButton = styled.button(templateObject_4$G || (templateObject_4$G = __makeTemplateObject(["\n border: none;\n text-decoration: none;\n background: none;\n\n cursor: ", ";\n color: ", ";\n font-weight: 500;\n\n :hover {\n text-decoration: ", ";\n }\n\n :focus {\n outline: none;\n text-decoration: ", ";\n }\n\n :active {\n text-decoration: none;\n }\n"], ["\n border: none;\n text-decoration: none;\n background: none;\n\n cursor: ", ";\n color: ", ";\n font-weight: 500;\n\n :hover {\n text-decoration: ", ";\n }\n\n :focus {\n outline: none;\n text-decoration: ", ";\n }\n\n :active {\n text-decoration: none;\n }\n" + // An internal link from the react-router-dom library that is correctly styled +])), function (_a) { + var disabled = _a.disabled; + return (disabled ? 'default' : 'pointer'); +}, function (_a) { + var theme = _a.theme, disabled = _a.disabled; + return (disabled ? theme.text2 : theme.primary1); +}, function (_a) { + var disabled = _a.disabled; + return (disabled ? null : 'underline'); +}, function (_a) { + var disabled = _a.disabled; + return (disabled ? null : 'underline'); +}); +// An internal link from the react-router-dom library that is correctly styled +var StyledInternalLink = styled(Link$1)(templateObject_5$x || (templateObject_5$x = __makeTemplateObject(["\n text-decoration: none;\n cursor: pointer;\n color: ", ";\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 text-decoration: none;\n cursor: pointer;\n color: ", ";\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"])), function (_a) { + var theme = _a.theme; + return theme.primary1; +}); +var StyledLink = styled.a(templateObject_6$o || (templateObject_6$o = __makeTemplateObject(["\n text-decoration: none;\n cursor: pointer;\n color: ", ";\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 text-decoration: none;\n cursor: pointer;\n color: ", ";\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"])), function (_a) { + var theme = _a.theme; + return theme.primary1; +}); +var LinkIconWrapper = styled.a(templateObject_7$k || (templateObject_7$k = __makeTemplateObject(["\n text-decoration: none;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n text-decoration: none;\n opacity: 0.7;\n }\n\n :focus {\n outline: none;\n text-decoration: none;\n }\n\n :active {\n text-decoration: none;\n }\n"], ["\n text-decoration: none;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n text-decoration: none;\n opacity: 0.7;\n }\n\n :focus {\n outline: none;\n text-decoration: none;\n }\n\n :active {\n text-decoration: none;\n }\n"]))); +var LinkIcon = styled(ExternalLink$1)(templateObject_8$h || (templateObject_8$h = __makeTemplateObject(["\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ", ";\n"], ["\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.blue1; +}); +var TrashIcon = styled(Trash)(templateObject_9$g || (templateObject_9$g = __makeTemplateObject(["\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ", ";\n\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n opacity: 0.7;\n }\n"], ["\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ", ";\n\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n opacity: 0.7;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text3; +}); +var rotateImg = keyframes(templateObject_10$c || (templateObject_10$c = __makeTemplateObject(["\n 0% {\n transform: perspective(1000px) rotateY(0deg);\n }\n\n 100% {\n transform: perspective(1000px) rotateY(360deg);\n }\n"], ["\n 0% {\n transform: perspective(1000px) rotateY(0deg);\n }\n\n 100% {\n transform: perspective(1000px) rotateY(360deg);\n }\n"]))); +var UniTokenAnimated = styled.img(templateObject_11$a || (templateObject_11$a = __makeTemplateObject(["\n animation: ", " 5s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n padding: 2rem 0 0 0;\n filter: drop-shadow(0px 2px 4px rgba(0, 0, 0, 0.15));\n"], ["\n animation: ", " 5s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n padding: 2rem 0 0 0;\n filter: drop-shadow(0px 2px 4px rgba(0, 0, 0, 0.15));\n"])), rotateImg); +function handleClickExternalLink(event) { + var _a = event.currentTarget, target = _a.target, href = _a.href; + var anonymizedHref = anonymizeLink(href); + // don't prevent default, don't redirect if it's a new tab + if (target === '_blank' || event.ctrlKey || event.metaKey) { + ReactGA.outboundLink({ label: anonymizedHref }, function () { + console.debug('Fired outbound link event', anonymizedHref); + }); + } + else { + event.preventDefault(); + // send a ReactGA event and then trigger a location change + ReactGA.outboundLink({ label: anonymizedHref }, function () { + window.location.href = anonymizedHref; + }); + } +} +/** + * Outbound link that handles firing google analytics events + */ +function ExternalLink(_a) { + var _b = _a.target, target = _b === void 0 ? '_blank' : _b, href = _a.href, _c = _a.rel, rel = _c === void 0 ? 'noopener noreferrer' : _c, rest = __rest(_a, ["target", "href", "rel"]); + return jsx(StyledLink, __assign({ target: target, rel: rel, href: href, onClick: handleClickExternalLink }, rest), void 0); +} +function ExternalLinkIcon(_a) { + var _b = _a.target, target = _b === void 0 ? '_blank' : _b, href = _a.href, _c = _a.rel, rel = _c === void 0 ? 'noopener noreferrer' : _c, rest = __rest(_a, ["target", "href", "rel"]); + return (jsx(LinkIconWrapper, __assign({ target: target, rel: rel, href: href, onClick: handleClickExternalLink }, rest, { children: jsx(LinkIcon, {}, void 0) }), void 0)); +} +var rotate$1 = keyframes(templateObject_12$a || (templateObject_12$a = __makeTemplateObject(["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"], ["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"]))); +var Spinner$2 = styled.img(templateObject_13$6 || (templateObject_13$6 = __makeTemplateObject(["\n animation: 2s ", " linear infinite;\n width: 16px;\n height: 16px;\n"], ["\n animation: 2s ", " linear infinite;\n width: 16px;\n height: 16px;\n"])), rotate$1); +styled(StyledInternalLink)(templateObject_14$6 || (templateObject_14$6 = __makeTemplateObject(["\n color: ", ";\n"], ["\n color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.text1; +}); +var CustomLightSpinner = styled(Spinner$2)(templateObject_15$4 || (templateObject_15$4 = __makeTemplateObject(["\n height: ", ";\n width: ", ";\n"], ["\n height: ", ";\n width: ", ";\n"])), function (_a) { + var size = _a.size; + return size; +}, function (_a) { + var size = _a.size; + return size; +}); +var HideSmall = styled.span(templateObject_17$2 || (templateObject_17$2 = __makeTemplateObject(["\n ", ";\n"], ["\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToSmall(templateObject_16$3 || (templateObject_16$3 = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); +}); +styled.span(templateObject_19$2 || (templateObject_19$2 = __makeTemplateObject(["\n ", ";\n"], ["\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToExtraSmall(templateObject_18$2 || (templateObject_18$2 = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); +}); +styled.span(templateObject_21$1 || (templateObject_21$1 = __makeTemplateObject(["\n display: none;\n ", ";\n"], ["\n display: none;\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToSmall(templateObject_20$1 || (templateObject_20$1 = __makeTemplateObject(["\n display: block;\n "], ["\n display: block;\n "]))); +}); +var Separator$1 = styled.div(templateObject_22 || (templateObject_22 = __makeTemplateObject(["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"], ["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}); +var templateObject_1$1l, templateObject_2$$, templateObject_3$S, templateObject_4$G, templateObject_5$x, templateObject_6$o, templateObject_7$k, templateObject_8$h, templateObject_9$g, templateObject_10$c, templateObject_11$a, templateObject_12$a, templateObject_13$6, templateObject_14$6, templateObject_15$4, templateObject_16$3, templateObject_17$2, templateObject_18$2, templateObject_19$2, templateObject_20$1, templateObject_21$1, templateObject_22; + +var MEDIA_WIDTHS = { + upToExtraSmall: 500, + upToSmall: 720, + upToMedium: 960, + upToLarge: 1280, +}; +// Migrating to a standard z-index system https://getbootstrap.com/docs/5.0/layout/z-index/ +// Please avoid using deprecated numbers +var Z_INDEX; +(function (Z_INDEX) { + Z_INDEX[Z_INDEX["deprecated_zero"] = 0] = "deprecated_zero"; + Z_INDEX[Z_INDEX["deprecated_content"] = 1] = "deprecated_content"; + Z_INDEX[Z_INDEX["dropdown"] = 1000] = "dropdown"; + Z_INDEX[Z_INDEX["sticky"] = 1020] = "sticky"; + Z_INDEX[Z_INDEX["fixed"] = 1030] = "fixed"; + Z_INDEX[Z_INDEX["modalBackdrop"] = 1040] = "modalBackdrop"; + Z_INDEX[Z_INDEX["offcanvas"] = 1050] = "offcanvas"; + Z_INDEX[Z_INDEX["modal"] = 1060] = "modal"; + Z_INDEX[Z_INDEX["popover"] = 1070] = "popover"; + Z_INDEX[Z_INDEX["tooltip"] = 1080] = "tooltip"; +})(Z_INDEX || (Z_INDEX = {})); +var mediaWidthTemplates = Object.keys(MEDIA_WIDTHS).reduce(function (accumulator, size) { + accumulator[size] = function (a, b, c) { return css(templateObject_1$1k || (templateObject_1$1k = __makeTemplateObject(["\n @media (max-width: ", "px) {\n ", "\n }\n "], ["\n @media (max-width: ", "px) {\n ", "\n }\n "])), MEDIA_WIDTHS[size], css(a, b, c)); }; + return accumulator; +}, {}); +var white = '#FFFFFF'; +var black = '#000000'; +function colors(darkMode) { + return { + darkMode: darkMode, + // base + white: white, + black: black, + // text + text1: darkMode ? '#FFFFFF' : '#000000', + text2: darkMode ? '#C3C5CB' : '#565A69', + text3: darkMode ? '#8F96AC' : '#6E727D', + text4: darkMode ? '#B2B9D2' : '#C3C5CB', + text5: darkMode ? '#2C2F36' : '#EDEEF2', + // backgrounds / greys + bg0: darkMode ? '#191B1F' : '#FFF', + bg1: darkMode ? '#212429' : '#F7F8FA', + bg2: darkMode ? '#2C2F36' : '#EDEEF2', + bg3: darkMode ? '#40444F' : '#CED0D9', + bg4: darkMode ? '#565A69' : '#888D9B', + bg5: darkMode ? '#6C7284' : '#888D9B', + bg6: darkMode ? '#1A2028' : '#6C7284', + //specialty colors + modalBG: darkMode ? 'rgba(0,0,0,.425)' : 'rgba(0,0,0,0.3)', + advancedBG: darkMode ? 'rgba(0,0,0,0.1)' : 'rgba(255,255,255,0.6)', + //primary colors + primary1: darkMode ? '#2172E5' : '#E8006F', + primary2: darkMode ? '#3680E7' : '#FF8CC3', + primary3: darkMode ? '#4D8FEA' : '#FF99C9', + primary4: darkMode ? '#376bad70' : '#F6DDE8', + primary5: darkMode ? '#153d6f70' : '#FDEAF1', + // color text + primaryText1: darkMode ? '#5090ea' : '#D50066', + // secondary colors + secondary1: darkMode ? '#2172E5' : '#E8006F', + secondary2: darkMode ? '#17000b26' : '#F6DDE8', + secondary3: darkMode ? '#17000b26' : '#FDEAF1', + // other + red1: darkMode ? '#FF4343' : '#DA2D2B', + red2: darkMode ? '#F82D3A' : '#DF1F38', + red3: '#D60000', + green1: darkMode ? '#27AE60' : '#007D35', + yellow1: '#E3A507', + yellow2: '#FF8F00', + yellow3: '#F3B71E', + blue1: darkMode ? '#2172E5' : '#0068FC', + blue2: darkMode ? '#5199FF' : '#0068FC', + error: darkMode ? '#FD4040' : '#DF1F38', + success: darkMode ? '#27AE60' : '#007D35', + warning: '#FF8F00', + // dont wanna forget these blue yet + blue4: darkMode ? '#153d6f70' : '#C4D9F8', + // blue5: darkMode ? '#153d6f70' : '#EBF4FF', + }; +} +function theme(darkMode) { + return __assign(__assign({}, colors(darkMode)), { grids: { + sm: 8, + md: 12, + lg: 24, + }, + //shadows + shadow1: darkMode ? '#000' : '#2F80ED', + // media queries + mediaWidth: mediaWidthTemplates, + // css snippets + flexColumnNoWrap: css(templateObject_2$_ || (templateObject_2$_ = __makeTemplateObject(["\n display: flex;\n flex-flow: column nowrap;\n "], ["\n display: flex;\n flex-flow: column nowrap;\n "]))), flexRowNoWrap: css(templateObject_3$R || (templateObject_3$R = __makeTemplateObject(["\n display: flex;\n flex-flow: row nowrap;\n "], ["\n display: flex;\n flex-flow: row nowrap;\n "]))) }); +} +function ThemeProvider(_a) { + var children = _a.children; + var darkMode = useIsDarkMode(); + var themeObject = useMemo(function () { return theme(darkMode); }, [darkMode]); + return jsx(ThemeProvider$1, __assign({ theme: themeObject }, { children: children }), void 0); +} +var TextWrapper$1 = styled(Text$1)(templateObject_4$F || (templateObject_4$F = __makeTemplateObject(["\n color: ", ";\n"], ["\n color: ", ";\n" + /** + * Preset styles of the Rebass Text component + */ +])), function (_a) { + var color = _a.color, theme = _a.theme; + return theme[color]; +}); +/** + * Preset styles of the Rebass Text component + */ +var ThemedText = { + Main: function (props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text2' }, props), void 0); + }, + Link: function (props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'primary1' }, props), void 0); + }, + Label: function (props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 600, color: 'text1' }, props), void 0); + }, + Black: function (props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text1' }, props), void 0); + }, + White: function (props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'white' }, props), void 0); + }, + Body: function (props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 400, fontSize: 16, color: 'text1' }, props), void 0); + }, + LargeHeader: function (props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 600, fontSize: 24 }, props), void 0); + }, + MediumHeader: function (props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 500, fontSize: 20 }, props), void 0); + }, + SubHeader: function (props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 400, fontSize: 14 }, props), void 0); + }, + Small: function (props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 500, fontSize: 11 }, props), void 0); + }, + Blue: function (props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'blue1' }, props), void 0); + }, + Yellow: function (props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'yellow3' }, props), void 0); + }, + DarkGray: function (props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text3' }, props), void 0); + }, + Gray: function (props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'bg3' }, props), void 0); + }, + Italic: function (props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 500, fontSize: 12, fontStyle: 'italic', color: 'text2' }, props), void 0); + }, + Error: function (_a) { + var error = _a.error, props = __rest(_a, ["error"]); + return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: error ? 'red1' : 'text2' }, props), void 0); + }, +}; +var ThemedGlobalStyle = createGlobalStyle(templateObject_5$w || (templateObject_5$w = __makeTemplateObject(["\nhtml {\n color: ", ";\n background-color: ", " !important;\n}\n\na {\n color: ", "; \n}\n"], ["\nhtml {\n color: ", ";\n background-color: ", " !important;\n}\n\na {\n color: ", "; \n}\n"])), function (_a) { + var theme = _a.theme; + return theme.text1; +}, function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var theme = _a.theme; + return theme.blue1; +}); +var templateObject_1$1k, templateObject_2$_, templateObject_3$R, templateObject_4$F, templateObject_5$w; + +var _a$b; +var ETHERSCAN_PREFIXES = (_a$b = {}, + _a$b[SupportedChainId.MAINNET] = 'https://etherscan.io', + _a$b[SupportedChainId.ROPSTEN] = 'https://ropsten.etherscan.io', + _a$b[SupportedChainId.RINKEBY] = 'https://rinkeby.etherscan.io', + _a$b[SupportedChainId.GOERLI] = 'https://goerli.etherscan.io', + _a$b[SupportedChainId.KOVAN] = 'https://kovan.etherscan.io', + _a$b[SupportedChainId.OPTIMISM] = 'https://optimistic.etherscan.io', + _a$b[SupportedChainId.OPTIMISTIC_KOVAN] = 'https://kovan-optimistic.etherscan.io', + _a$b[SupportedChainId.POLYGON_MUMBAI] = 'https://mumbai.polygonscan.com', + _a$b[SupportedChainId.POLYGON] = 'https://polygonscan.com', + _a$b); +var ExplorerDataType; +(function (ExplorerDataType) { + ExplorerDataType["TRANSACTION"] = "transaction"; + ExplorerDataType["TOKEN"] = "token"; + ExplorerDataType["ADDRESS"] = "address"; + ExplorerDataType["BLOCK"] = "block"; +})(ExplorerDataType || (ExplorerDataType = {})); +/** + * Return the explorer link for the given data and data type + * @param chainId the ID of the chain for which to return the data + * @param data the data to return a link for + * @param type the type of the data + */ +function getExplorerLink(chainId, data, type) { + var _a; + if (chainId === SupportedChainId.ARBITRUM_ONE) { + switch (type) { + case ExplorerDataType.TRANSACTION: + return "https://arbiscan.io/tx/" + data; + case ExplorerDataType.ADDRESS: + case ExplorerDataType.TOKEN: + return "https://arbiscan.io/address/" + data; + case ExplorerDataType.BLOCK: + return "https://arbiscan.io/block/" + data; + default: + return "https://arbiscan.io/"; + } + } + if (chainId === SupportedChainId.ARBITRUM_RINKEBY) { + switch (type) { + case ExplorerDataType.TRANSACTION: + return "https://rinkeby-explorer.arbitrum.io/tx/" + data; + case ExplorerDataType.ADDRESS: + case ExplorerDataType.TOKEN: + return "https://rinkeby-explorer.arbitrum.io/address/" + data; + case ExplorerDataType.BLOCK: + return "https://rinkeby-explorer.arbitrum.io/block/" + data; + default: + return "https://rinkeby-explorer.arbitrum.io/"; + } + } + var prefix = (_a = ETHERSCAN_PREFIXES[chainId]) !== null && _a !== void 0 ? _a : 'https://etherscan.io'; + switch (type) { + case ExplorerDataType.TRANSACTION: + return prefix + "/tx/" + data; + case ExplorerDataType.TOKEN: + return prefix + "/token/" + data; + case ExplorerDataType.BLOCK: + if (chainId === SupportedChainId.OPTIMISM || chainId === SupportedChainId.OPTIMISTIC_KOVAN) { + return prefix + "/tx/" + data; + } + return prefix + "/block/" + data; + case ExplorerDataType.ADDRESS: + return prefix + "/address/" + data; + default: + return "" + prefix; + } +} + +var Column = styled.div(templateObject_1$1j || (templateObject_1$1j = __makeTemplateObject(["\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n"], ["\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n"]))); +var ColumnCenter = styled(Column)(templateObject_2$Z || (templateObject_2$Z = __makeTemplateObject(["\n width: 100%;\n align-items: center;\n"], ["\n width: 100%;\n align-items: center;\n"]))); +var AutoColumn = styled.div(templateObject_3$Q || (templateObject_3$Q = __makeTemplateObject(["\n display: grid;\n grid-auto-rows: auto;\n grid-row-gap: ", ";\n justify-items: ", ";\n"], ["\n display: grid;\n grid-auto-rows: auto;\n grid-row-gap: ", ";\n justify-items: ", ";\n"])), function (_a) { + var gap = _a.gap; + return (gap === 'sm' && '8px') || (gap === 'md' && '12px') || (gap === 'lg' && '24px') || gap; +}, function (_a) { + var justify = _a.justify; + return justify && justify; +}); +var templateObject_1$1j, templateObject_2$Z, templateObject_3$Q; + +var Row$1 = styled(Box)(templateObject_1$1i || (templateObject_1$1i = __makeTemplateObject(["\n width: ", ";\n display: flex;\n padding: 0;\n align-items: ", ";\n justify-content: ", ";\n padding: ", ";\n border: ", ";\n border-radius: ", ";\n"], ["\n width: ", ";\n display: flex;\n padding: 0;\n align-items: ", ";\n justify-content: ", ";\n padding: ", ";\n border: ", ";\n border-radius: ", ";\n"])), function (_a) { + var width = _a.width; + return width !== null && width !== void 0 ? width : '100%'; +}, function (_a) { + var align = _a.align; + return align !== null && align !== void 0 ? align : 'center'; +}, function (_a) { + var justify = _a.justify; + return justify !== null && justify !== void 0 ? justify : 'flex-start'; +}, function (_a) { + var padding = _a.padding; + return padding; +}, function (_a) { + var border = _a.border; + return border; +}, function (_a) { + var borderRadius = _a.borderRadius; + return borderRadius; +}); +var RowBetween = styled(Row$1)(templateObject_2$Y || (templateObject_2$Y = __makeTemplateObject(["\n justify-content: space-between;\n"], ["\n justify-content: space-between;\n"]))); +styled.div(templateObject_3$P || (templateObject_3$P = __makeTemplateObject(["\n display: flex;\n align-items: flex-end;\n"], ["\n display: flex;\n align-items: flex-end;\n"]))); +var AutoRow = styled(Row$1)(templateObject_4$E || (templateObject_4$E = __makeTemplateObject(["\n flex-wrap: wrap;\n margin: ", ";\n justify-content: ", ";\n\n & > * {\n margin: ", " !important;\n }\n"], ["\n flex-wrap: wrap;\n margin: ", ";\n justify-content: ", ";\n\n & > * {\n margin: ", " !important;\n }\n"])), function (_a) { + var gap = _a.gap; + return gap && "-" + gap; +}, function (_a) { + var justify = _a.justify; + return justify && justify; +}, function (_a) { + var gap = _a.gap; + return gap; +}); +var RowFixed = styled(Row$1)(templateObject_5$v || (templateObject_5$v = __makeTemplateObject(["\n width: fit-content;\n margin: ", ";\n"], ["\n width: fit-content;\n margin: ", ";\n"])), function (_a) { + var gap = _a.gap; + return gap && "-" + gap; +}); +var templateObject_1$1i, templateObject_2$Y, templateObject_3$P, templateObject_4$E, templateObject_5$v; + +var InputPanel$1 = styled.div(templateObject_1$1h || (templateObject_1$1h = __makeTemplateObject(["\n ", "\n position: relative;\n border-radius: 1.25rem;\n background-color: ", ";\n z-index: 1;\n width: 100%;\n"], ["\n ", "\n position: relative;\n border-radius: 1.25rem;\n background-color: ", ";\n z-index: 1;\n width: 100%;\n"])), function (_a) { + var theme = _a.theme; + return theme.flexColumnNoWrap; +}, function (_a) { + var theme = _a.theme; + return theme.bg1; +}); +var ContainerRow = styled.div(templateObject_2$X || (templateObject_2$X = __makeTemplateObject(["\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 1.25rem;\n border: 1px solid ", ";\n transition: border-color 300ms ", ",\n color 500ms ", ";\n background-color: ", ";\n"], ["\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 1.25rem;\n border: 1px solid ", ";\n transition: border-color 300ms ", ",\n color 500ms ", ";\n background-color: ", ";\n"])), function (_a) { + var error = _a.error, theme = _a.theme; + return (error ? theme.red1 : theme.bg2); +}, function (_a) { + var error = _a.error; + return (error ? 'step-end' : 'step-start'); +}, function (_a) { + var error = _a.error; + return (error ? 'step-end' : 'step-start'); +}, function (_a) { + var theme = _a.theme; + return theme.bg1; +}); +var InputContainer = styled.div(templateObject_3$O || (templateObject_3$O = __makeTemplateObject(["\n flex: 1;\n padding: 1rem;\n"], ["\n flex: 1;\n padding: 1rem;\n"]))); +var Input$2 = styled.input(templateObject_4$D || (templateObject_4$D = __makeTemplateObject(["\n font-size: 1.25rem;\n outline: none;\n border: none;\n flex: 1 1 auto;\n width: 0;\n background-color: ", ";\n transition: color 300ms ", ";\n color: ", ";\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 500;\n width: 100%;\n ::placeholder {\n color: ", ";\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: ", ";\n }\n"], ["\n font-size: 1.25rem;\n outline: none;\n border: none;\n flex: 1 1 auto;\n width: 0;\n background-color: ", ";\n transition: color 300ms ", ";\n color: ", ";\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 500;\n width: 100%;\n ::placeholder {\n color: ", ";\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: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var error = _a.error; + return (error ? 'step-end' : 'step-start'); +}, function (_a) { + var error = _a.error, theme = _a.theme; + return (error ? theme.red1 : theme.text1); +}, function (_a) { + var theme = _a.theme; + return theme.text4; +}, function (_a) { + var theme = _a.theme; + return theme.text4; +}); +function AddressInputPanel(_a) { + var id = _a.id, _b = _a.className, className = _b === void 0 ? 'recipient-address-input' : _b, label = _a.label, placeholder = _a.placeholder, value = _a.value, onChange = _a.onChange; + var chainId = useActiveWeb3React().chainId; + var theme = useContext(ThemeContext); + var _c = useENS(value), address = _c.address, loading = _c.loading, name = _c.name; + var handleInput = useCallback(function (event) { + var input = event.target.value; + var withoutSpaces = input.replace(/\s+/g, ''); + onChange(withoutSpaces); + }, [onChange]); + var error = Boolean(value.length > 0 && !loading && !address); + return (jsx(InputPanel$1, __assign({ id: id }, { children: jsx(ContainerRow, __assign({ error: error }, { children: jsx(InputContainer, { children: jsxs(AutoColumn, __assign({ gap: "md" }, { children: [jsxs(RowBetween, { children: [jsx(ThemedText.Black, __assign({ color: theme.text2, fontWeight: 500, fontSize: 14 }, { children: label !== null && label !== void 0 ? label : jsx(Trans, { children: "Recipient" }, void 0) }), void 0), address && chainId && (jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, name !== null && name !== void 0 ? name : address, ExplorerDataType.ADDRESS), style: { fontSize: '14px' } }, { children: jsx(Trans, { children: "(View on Explorer)" }, void 0) }), void 0))] }, void 0), jsx(Input$2, { className: className, type: "text", autoComplete: "off", autoCorrect: "off", autoCapitalize: "off", spellCheck: "false", placeholder: placeholder !== null && placeholder !== void 0 ? placeholder : t(templateObject_5$u || (templateObject_5$u = __makeTemplateObject(["Wallet Address or ENS name"], ["Wallet Address or ENS name"]))), error: error, pattern: "^(0x[a-fA-F0-9]{40})$", onChange: handleInput, value: value }, void 0)] }), void 0) }, void 0) }), void 0) }), void 0)); +} +var templateObject_1$1h, templateObject_2$X, templateObject_3$O, templateObject_4$D, templateObject_5$u; + +function useTheme() { + return useContext(ThemeContext); +} + +var BaseButton = styled(Button$1)(templateObject_1$1g || (templateObject_1$1g = __makeTemplateObject(["\n padding: ", ";\n width: ", ";\n font-weight: 500;\n text-align: center;\n border-radius: ", ";\n outline: none;\n border: 1px solid transparent;\n color: ", ";\n text-decoration: none;\n display: flex;\n justify-content: center;\n flex-wrap: nowrap;\n align-items: center;\n cursor: pointer;\n position: relative;\n z-index: 1;\n &:disabled {\n opacity: 50%;\n cursor: auto;\n pointer-events: none;\n }\n\n will-change: transform;\n transition: transform 450ms ease;\n transform: perspective(1px) translateZ(0);\n\n > * {\n user-select: none;\n }\n\n > a {\n text-decoration: none;\n }\n"], ["\n padding: ", ";\n width: ", ";\n font-weight: 500;\n text-align: center;\n border-radius: ", ";\n outline: none;\n border: 1px solid transparent;\n color: ", ";\n text-decoration: none;\n display: flex;\n justify-content: center;\n flex-wrap: nowrap;\n align-items: center;\n cursor: pointer;\n position: relative;\n z-index: 1;\n &:disabled {\n opacity: 50%;\n cursor: auto;\n pointer-events: none;\n }\n\n will-change: transform;\n transition: transform 450ms ease;\n transform: perspective(1px) translateZ(0);\n\n > * {\n user-select: none;\n }\n\n > a {\n text-decoration: none;\n }\n"])), function (_a) { + var padding = _a.padding; + return padding !== null && padding !== void 0 ? padding : '16px'; +}, function (_a) { + var width = _a.width; + return width !== null && width !== void 0 ? width : '100%'; +}, function (_a) { + var $borderRadius = _a.$borderRadius; + return $borderRadius !== null && $borderRadius !== void 0 ? $borderRadius : '20px'; +}, function (_a) { + var theme = _a.theme; + return theme.text1; +}); +var ButtonPrimary = styled(BaseButton)(templateObject_2$W || (templateObject_2$W = __makeTemplateObject(["\n background-color: ", ";\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n background-color: ", ";\n color: ", ";\n cursor: auto;\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n"], ["\n background-color: ", ";\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n background-color: ", ";\n color: ", ";\n cursor: auto;\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.primary1; +}, function (_a) { + var theme = _a.theme; + return darken(0.05, theme.primary1); +}, function (_a) { + var theme = _a.theme; + return darken(0.05, theme.primary1); +}, function (_a) { + var theme = _a.theme; + return darken(0.05, theme.primary1); +}, function (_a) { + var theme = _a.theme; + return darken(0.1, theme.primary1); +}, function (_a) { + var theme = _a.theme; + return darken(0.1, theme.primary1); +}, function (_a) { + var theme = _a.theme, altDisabledStyle = _a.altDisabledStyle, disabled = _a.disabled; + return altDisabledStyle ? (disabled ? theme.primary1 : theme.bg2) : theme.bg2; +}, function (_a) { + var altDisabledStyle = _a.altDisabledStyle, disabled = _a.disabled, theme = _a.theme; + return altDisabledStyle ? (disabled ? theme.white : theme.text2) : theme.text2; +}); +var ButtonLight = styled(BaseButton)(templateObject_3$N || (templateObject_3$N = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n font-size: 16px;\n font-weight: 500;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n :disabled {\n opacity: 0.4;\n :hover {\n cursor: auto;\n background-color: ", ";\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n }\n"], ["\n background-color: ", ";\n color: ", ";\n font-size: 16px;\n font-weight: 500;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n :disabled {\n opacity: 0.4;\n :hover {\n cursor: auto;\n background-color: ", ";\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.primary5; +}, function (_a) { + var theme = _a.theme; + return theme.primaryText1; +}, function (_a) { + var theme = _a.theme, disabled = _a.disabled; + return !disabled && darken(0.03, theme.primary5); +}, function (_a) { + var theme = _a.theme, disabled = _a.disabled; + return !disabled && darken(0.03, theme.primary5); +}, function (_a) { + var theme = _a.theme, disabled = _a.disabled; + return !disabled && darken(0.03, theme.primary5); +}, function (_a) { + var theme = _a.theme, disabled = _a.disabled; + return !disabled && darken(0.05, theme.primary5); +}, function (_a) { + var theme = _a.theme, disabled = _a.disabled; + return !disabled && darken(0.05, theme.primary5); +}, function (_a) { + var theme = _a.theme; + return theme.primary5; +}); +var ButtonGray = styled(BaseButton)(templateObject_4$C || (templateObject_4$C = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n font-size: 16px;\n font-weight: 500;\n\n &:hover {\n background-color: ", ";\n }\n &:active {\n background-color: ", ";\n }\n"], ["\n background-color: ", ";\n color: ", ";\n font-size: 16px;\n font-weight: 500;\n\n &:hover {\n background-color: ", ";\n }\n &:active {\n background-color: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var theme = _a.theme; + return theme.text2; +}, function (_a) { + var theme = _a.theme, disabled = _a.disabled; + return !disabled && darken(0.05, theme.bg2); +}, function (_a) { + var theme = _a.theme, disabled = _a.disabled; + return !disabled && darken(0.1, theme.bg2); +}); +var ButtonSecondary = styled(BaseButton)(templateObject_5$t || (templateObject_5$t = __makeTemplateObject(["\n border: 1px solid ", ";\n color: ", ";\n background-color: transparent;\n font-size: 16px;\n border-radius: 12px;\n padding: ", ";\n\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n border: 1px solid ", ";\n }\n &:hover {\n border: 1px solid ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n border: 1px solid ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n a:hover {\n text-decoration: none;\n }\n"], ["\n border: 1px solid ", ";\n color: ", ";\n background-color: transparent;\n font-size: 16px;\n border-radius: 12px;\n padding: ", ";\n\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n border: 1px solid ", ";\n }\n &:hover {\n border: 1px solid ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n border: 1px solid ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n a:hover {\n text-decoration: none;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.primary4; +}, function (_a) { + var theme = _a.theme; + return theme.primary1; +}, function (_a) { + var padding = _a.padding; + return (padding ? padding : '10px'); +}, function (_a) { + var theme = _a.theme; + return theme.primary4; +}, function (_a) { + var theme = _a.theme; + return theme.primary3; +}, function (_a) { + var theme = _a.theme; + return theme.primary3; +}, function (_a) { + var theme = _a.theme; + return theme.primary4; +}, function (_a) { + var theme = _a.theme; + return theme.primary3; +}); +var ButtonOutlined = styled(BaseButton)(templateObject_6$n || (templateObject_6$n = __makeTemplateObject(["\n border: 1px solid ", ";\n background-color: transparent;\n color: ", ";\n &:focus {\n box-shadow: 0 0 0 1px ", ";\n }\n &:hover {\n box-shadow: 0 0 0 1px ", ";\n }\n &:active {\n box-shadow: 0 0 0 1px ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"], ["\n border: 1px solid ", ";\n background-color: transparent;\n color: ", ";\n &:focus {\n box-shadow: 0 0 0 1px ", ";\n }\n &:hover {\n box-shadow: 0 0 0 1px ", ";\n }\n &:active {\n box-shadow: 0 0 0 1px ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}, function (_a) { + var theme = _a.theme; + return theme.text1; +}, function (_a) { + var theme = _a.theme; + return theme.bg4; +}, function (_a) { + var theme = _a.theme; + return theme.bg4; +}, function (_a) { + var theme = _a.theme; + return theme.bg4; +}); +styled(BaseButton)(templateObject_7$j || (templateObject_7$j = __makeTemplateObject(["\n background-color: ", ";\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n background-color: ", ";\n opacity: 50%;\n cursor: auto;\n }\n"], ["\n background-color: ", ";\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n background-color: ", ";\n opacity: 50%;\n cursor: auto;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.yellow3; +}, function (_a) { + var theme = _a.theme; + return darken(0.05, theme.yellow3); +}, function (_a) { + var theme = _a.theme; + return darken(0.05, theme.yellow3); +}, function (_a) { + var theme = _a.theme; + return darken(0.05, theme.yellow3); +}, function (_a) { + var theme = _a.theme; + return darken(0.1, theme.yellow3); +}, function (_a) { + var theme = _a.theme; + return darken(0.1, theme.yellow3); +}, function (_a) { + var theme = _a.theme; + return theme.yellow3; +}); +var ButtonEmpty = styled(BaseButton)(templateObject_8$g || (templateObject_8$g = __makeTemplateObject(["\n background-color: transparent;\n color: ", ";\n display: flex;\n justify-content: center;\n align-items: center;\n\n &:focus {\n text-decoration: underline;\n }\n &:hover {\n text-decoration: none;\n }\n &:active {\n text-decoration: none;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"], ["\n background-color: transparent;\n color: ", ";\n display: flex;\n justify-content: center;\n align-items: center;\n\n &:focus {\n text-decoration: underline;\n }\n &:hover {\n text-decoration: none;\n }\n &:active {\n text-decoration: none;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.primary1; +}); +styled(BaseButton)(templateObject_9$f || (templateObject_9$f = __makeTemplateObject(["\n padding: 0;\n width: fit-content;\n background: none;\n text-decoration: none;\n &:focus {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n text-decoration: underline;\n }\n &:hover {\n // text-decoration: underline;\n opacity: 0.9;\n }\n &:active {\n text-decoration: underline;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"], ["\n padding: 0;\n width: fit-content;\n background: none;\n text-decoration: none;\n &:focus {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n text-decoration: underline;\n }\n &:hover {\n // text-decoration: underline;\n opacity: 0.9;\n }\n &:active {\n text-decoration: underline;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"]))); +var ButtonConfirmedStyle = styled(BaseButton)(templateObject_10$b || (templateObject_10$b = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n /* border: 1px solid ", "; */\n\n &:disabled {\n opacity: 50%;\n background-color: ", ";\n color: ", ";\n cursor: auto;\n }\n"], ["\n background-color: ", ";\n color: ", ";\n /* border: 1px solid ", "; */\n\n &:disabled {\n opacity: 50%;\n background-color: ", ";\n color: ", ";\n cursor: auto;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.bg3; +}, function (_a) { + var theme = _a.theme; + return theme.text1; +}, function (_a) { + var theme = _a.theme; + return theme.green1; +}, function (_a) { + var theme = _a.theme; + return theme.bg2; +}, function (_a) { + var theme = _a.theme; + return theme.text2; +}); +var ButtonErrorStyle = styled(BaseButton)(templateObject_11$9 || (templateObject_11$9 = __makeTemplateObject(["\n background-color: ", ";\n border: 1px solid ", ";\n\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n box-shadow: none;\n background-color: ", ";\n border: 1px solid ", ";\n }\n"], ["\n background-color: ", ";\n border: 1px solid ", ";\n\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n box-shadow: none;\n background-color: ", ";\n border: 1px solid ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.red1; +}, function (_a) { + var theme = _a.theme; + return theme.red1; +}, function (_a) { + var theme = _a.theme; + return darken(0.05, theme.red1); +}, function (_a) { + var theme = _a.theme; + return darken(0.05, theme.red1); +}, function (_a) { + var theme = _a.theme; + return darken(0.05, theme.red1); +}, function (_a) { + var theme = _a.theme; + return darken(0.1, theme.red1); +}, function (_a) { + var theme = _a.theme; + return darken(0.1, theme.red1); +}, function (_a) { + var theme = _a.theme; + return theme.red1; +}, function (_a) { + var theme = _a.theme; + return theme.red1; +}); +function ButtonConfirmed(_a) { + var confirmed = _a.confirmed, altDisabledStyle = _a.altDisabledStyle, rest = __rest(_a, ["confirmed", "altDisabledStyle"]); + if (confirmed) { + return jsx(ButtonConfirmedStyle, __assign({}, rest), void 0); + } + else { + return jsx(ButtonPrimary, __assign({}, rest, { altDisabledStyle: altDisabledStyle }), void 0); + } +} +function ButtonError(_a) { + var error = _a.error, rest = __rest(_a, ["error"]); + if (error) { + return jsx(ButtonErrorStyle, __assign({}, rest), void 0); + } + else { + return jsx(ButtonPrimary, __assign({}, rest), void 0); + } +} +styled(ButtonOutlined)(templateObject_12$9 || (templateObject_12$9 = __makeTemplateObject(["\n border: 1px solid;\n border-color: ", ";\n"], ["\n border: 1px solid;\n border-color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.primary1; +}); +styled.div(templateObject_13$5 || (templateObject_13$5 = __makeTemplateObject(["\n height: 17px;\n width: 17px;\n border-radius: 50%;\n background-color: ", ";\n display: flex;\n align-items: center;\n justify-content: center;\n"], ["\n height: 17px;\n width: 17px;\n border-radius: 50%;\n background-color: ", ";\n display: flex;\n align-items: center;\n justify-content: center;\n"])), function (_a) { + var theme = _a.theme; + return theme.primary1; +}); +styled.div(templateObject_14$5 || (templateObject_14$5 = __makeTemplateObject(["\n width: 20px;\n padding: 0 10px;\n position: absolute;\n top: 11px;\n right: 15px;\n"], ["\n width: 20px;\n padding: 0 10px;\n position: absolute;\n top: 11px;\n right: 15px;\n"]))); +styled(Check)(templateObject_15$3 || (templateObject_15$3 = __makeTemplateObject(["\n size: 13px;\n"], ["\n size: 13px;\n"]))); +var templateObject_1$1g, templateObject_2$W, templateObject_3$N, templateObject_4$C, templateObject_5$t, templateObject_6$n, templateObject_7$j, templateObject_8$g, templateObject_9$f, templateObject_10$b, templateObject_11$9, templateObject_12$9, templateObject_13$5, templateObject_14$5, templateObject_15$3; + +var isClient = typeof window === 'object'; +function getSize() { + return { + width: isClient ? window.innerWidth : undefined, + height: isClient ? window.innerHeight : undefined, + }; +} +// https://usehooks.com/useWindowSize/ +function useWindowSize() { + var _a = __read(useState(getSize), 2), windowSize = _a[0], setWindowSize = _a[1]; + useEffect(function () { + function handleResize() { + setWindowSize(getSize()); + } + if (isClient) { + window.addEventListener('resize', handleResize); + return function () { + window.removeEventListener('resize', handleResize); + }; + } + return undefined; + }, []); + return windowSize; +} + +// eslint-disable-next-line react/prop-types +function Confetti(_a) { + var start = _a.start, variant = _a.variant; + var _b = useWindowSize(), width = _b.width, height = _b.height; + var _variant = variant ? variant : height && width && height > 1.5 * width ? 'bottom' : variant; + return start && width && height ? (jsx(ReactConfetti, { style: { zIndex: 1401 }, numberOfPieces: 400, recycle: false, run: true, width: width, height: height, confettiSource: { + h: height, + w: width, + x: 0, + y: _variant === 'top' ? height * 0.25 : _variant === 'bottom' ? height * 0.75 : height * 0.5, + }, initialVelocityX: 15, initialVelocityY: 30, gravity: 0.45, tweenDuration: 100, wind: 0.05 }, void 0)) : null; +} + +var uImage = "10f062d02df4af77.png"; + +var noise = "f158a440053a5ad2.png"; + +var xlUnicorn = "c2cd04251aa24c34.png"; + +var DataCard = styled(AutoColumn)(templateObject_1$1f || (templateObject_1$1f = __makeTemplateObject(["\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #2172e5 100%);\n border-radius: 12px;\n width: 100%;\n position: relative;\n overflow: hidden;\n"], ["\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #2172e5 100%);\n border-radius: 12px;\n width: 100%;\n position: relative;\n overflow: hidden;\n"]))); +var CardBGImage = styled.span(templateObject_2$V || (templateObject_2$V = __makeTemplateObject(["\n background: url(", ");\n width: 1000px;\n height: 600px;\n position: absolute;\n border-radius: 12px;\n opacity: 0.4;\n top: -100px;\n left: -100px;\n transform: rotate(-15deg);\n user-select: none;\n ", "\n"], ["\n background: url(", ");\n width: 1000px;\n height: 600px;\n position: absolute;\n border-radius: 12px;\n opacity: 0.4;\n top: -100px;\n left: -100px;\n transform: rotate(-15deg);\n user-select: none;\n ", "\n"])), uImage, function (_a) { + var desaturate = _a.desaturate; + return desaturate && "filter: saturate(0)"; +}); +var CardBGImageSmaller = styled.span(templateObject_3$M || (templateObject_3$M = __makeTemplateObject(["\n background: url(", ");\n width: 1200px;\n height: 1200px;\n position: absolute;\n border-radius: 12px;\n top: -300px;\n left: -300px;\n opacity: 0.4;\n user-select: none;\n\n ", "\n"], ["\n background: url(", ");\n width: 1200px;\n height: 1200px;\n position: absolute;\n border-radius: 12px;\n top: -300px;\n left: -300px;\n opacity: 0.4;\n user-select: none;\n\n ", "\n"])), xlUnicorn, function (_a) { + var desaturate = _a.desaturate; + return desaturate && "filter: saturate(0)"; +}); +var CardNoise = styled.span(templateObject_4$B || (templateObject_4$B = __makeTemplateObject(["\n background: url(", ");\n background-size: cover;\n mix-blend-mode: overlay;\n border-radius: 12px;\n width: 100%;\n height: 100%;\n opacity: 0.15;\n position: absolute;\n top: 0;\n left: 0;\n user-select: none;\n"], ["\n background: url(", ");\n background-size: cover;\n mix-blend-mode: overlay;\n border-radius: 12px;\n width: 100%;\n height: 100%;\n opacity: 0.15;\n position: absolute;\n top: 0;\n left: 0;\n user-select: none;\n"])), noise); +var CardSection = styled(AutoColumn)(templateObject_5$s || (templateObject_5$s = __makeTemplateObject(["\n padding: 1rem;\n z-index: 1;\n opacity: ", ";\n"], ["\n padding: 1rem;\n z-index: 1;\n opacity: ", ";\n"])), function (_a) { + var disabled = _a.disabled; + return disabled && '0.4'; +}); +var Break$1 = styled.div(templateObject_6$m || (templateObject_6$m = __makeTemplateObject(["\n width: 100%;\n background-color: rgba(255, 255, 255, 0.2);\n height: 1px;\n"], ["\n width: 100%;\n background-color: rgba(255, 255, 255, 0.2);\n height: 1px;\n"]))); +var templateObject_1$1f, templateObject_2$V, templateObject_3$M, templateObject_4$B, templateObject_5$s, templateObject_6$m; + +var parser = new UAParser(window.navigator.userAgent); +var type$1 = parser.getDevice().type; +var userAgent = parser.getResult(); +var isMobile = type$1 === 'mobile' || type$1 === 'tablet'; + +var AnimatedDialogOverlay = animated(DialogOverlay); +// eslint-disable-next-line @typescript-eslint/no-unused-vars +var StyledDialogOverlay = styled(AnimatedDialogOverlay)(templateObject_1$1e || (templateObject_1$1e = __makeTemplateObject(["\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: ", ";\n }\n"], ["\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: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.modalBG; +}); +var AnimatedDialogContent = animated(DialogContent); +// destructure to not pass custom props to Dialog DOM element +// eslint-disable-next-line @typescript-eslint/no-unused-vars +var StyledDialogContent = styled(function (_a) { + _a.minHeight; _a.maxHeight; _a.mobile; _a.isOpen; var rest = __rest(_a, ["minHeight", "maxHeight", "mobile", "isOpen"]); + return (jsx(AnimatedDialogContent, __assign({}, rest), void 0)); +}).attrs({ + 'aria-label': 'dialog', +})(templateObject_7$i || (templateObject_7$i = __makeTemplateObject(["\n overflow-y: auto;\n\n &[data-reach-dialog-content] {\n margin: 0 0 2rem 0;\n background-color: ", ";\n border: 1px solid ", ";\n box-shadow: 0 4px 8px 0 ", ";\n padding: 0px;\n width: 50vw;\n overflow-y: auto;\n overflow-x: hidden;\n\n align-self: ", ";\n\n max-width: 420px;\n ", "\n ", "\n display: flex;\n border-radius: 20px;\n ", "\n ", "\n }\n"], ["\n overflow-y: auto;\n\n &[data-reach-dialog-content] {\n margin: 0 0 2rem 0;\n background-color: ", ";\n border: 1px solid ", ";\n box-shadow: 0 4px 8px 0 ", ";\n padding: 0px;\n width: 50vw;\n overflow-y: auto;\n overflow-x: hidden;\n\n align-self: ", ";\n\n max-width: 420px;\n ", "\n ", "\n display: flex;\n border-radius: 20px;\n ", "\n ", "\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.bg0; +}, function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var theme = _a.theme; + return transparentize(0.95, theme.shadow1); +}, function (_a) { + var mobile = _a.mobile; + return (mobile ? 'flex-end' : 'center'); +}, function (_a) { + var maxHeight = _a.maxHeight; + return maxHeight && css(templateObject_2$U || (templateObject_2$U = __makeTemplateObject(["\n max-height: ", "vh;\n "], ["\n max-height: ", "vh;\n "])), maxHeight); +}, function (_a) { + var minHeight = _a.minHeight; + return minHeight && css(templateObject_3$L || (templateObject_3$L = __makeTemplateObject(["\n min-height: ", "vh;\n "], ["\n min-height: ", "vh;\n "])), minHeight); +}, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToMedium(templateObject_4$A || (templateObject_4$A = __makeTemplateObject(["\n width: 65vw;\n margin: 0;\n "], ["\n width: 65vw;\n margin: 0;\n "]))); +}, function (_a) { + var theme = _a.theme, mobile = _a.mobile; + return theme.mediaWidth.upToSmall(templateObject_6$l || (templateObject_6$l = __makeTemplateObject(["\n width: 85vw;\n ", "\n "], ["\n width: 85vw;\n ", "\n "])), mobile && css(templateObject_5$r || (templateObject_5$r = __makeTemplateObject(["\n width: 100vw;\n border-radius: 20px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n "], ["\n width: 100vw;\n border-radius: 20px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n "])))); +}); +function Modal(_a) { + var isOpen = _a.isOpen, onDismiss = _a.onDismiss, _b = _a.minHeight, minHeight = _b === void 0 ? false : _b, _c = _a.maxHeight, maxHeight = _c === void 0 ? 90 : _c, initialFocusRef = _a.initialFocusRef, children = _a.children; + var fadeTransition = useTransition(isOpen, null, { + config: { duration: 200 }, + from: { opacity: 0 }, + enter: { opacity: 1 }, + leave: { opacity: 0 }, + }); + var _d = __read(useSpring(function () { return ({ y: 0, config: { mass: 1, tension: 210, friction: 20 } }); }), 2), y = _d[0].y, set = _d[1]; + var bind = useGesture({ + onDrag: function (state) { + set({ + y: state.down ? state.movement[1] : 0, + }); + if (state.movement[1] > 300 || (state.velocity > 3 && state.direction[1] > 0)) { + onDismiss(); + } + }, + }); + return (jsx(Fragment, { children: fadeTransition.map(function (_a) { + var item = _a.item, key = _a.key, props = _a.props; + return item && (jsx(StyledDialogOverlay, __assign({ style: props, onDismiss: onDismiss, initialFocusRef: initialFocusRef, unstable_lockFocusAcrossFrames: false }, { children: jsxs(StyledDialogContent, __assign({}, (isMobile + ? __assign(__assign({}, bind()), { style: { transform: y.interpolate(function (y) { return "translateY(" + (y > 0 ? y : 0) + "px)"; }) } }) : {}), { "aria-label": "dialog content", minHeight: minHeight, maxHeight: maxHeight, mobile: isMobile }, { children: [!initialFocusRef && isMobile ? jsx("div", { tabIndex: 1 }, void 0) : null, children] }), void 0) }), key)); + }) }, void 0)); +} +var templateObject_1$1e, templateObject_2$U, templateObject_3$L, templateObject_4$A, templateObject_5$r, templateObject_6$l, templateObject_7$i; + +var ContentWrapper$4 = styled(AutoColumn)(templateObject_1$1d || (templateObject_1$1d = __makeTemplateObject(["\n width: 100%;\n"], ["\n width: 100%;\n"]))); +var ModalUpper$1 = styled(DataCard)(templateObject_2$T || (templateObject_2$T = __makeTemplateObject(["\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n"], ["\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n"]))); +var ConfirmOrLoadingWrapper$1 = styled.div(templateObject_3$K || (templateObject_3$K = __makeTemplateObject(["\n width: 100%;\n padding: 24px;\n position: relative;\n background: ", ";\n"], ["\n width: 100%;\n padding: 24px;\n position: relative;\n background: ", ";\n"])), function (_a) { + var activeBG = _a.activeBG; + return activeBG && + 'radial-gradient(76.02% 75.41% at 1.84% 0%, rgba(255, 0, 122, 0.2) 0%, rgba(33, 114, 229, 0.2) 100%), #FFFFFF;'; +}); +var ConfirmedIcon$2 = styled(ColumnCenter)(templateObject_4$z || (templateObject_4$z = __makeTemplateObject(["\n padding: 60px 0;\n"], ["\n padding: 60px 0;\n"]))); +function AddressClaimModal(_a) { + var _b, _c; + var isOpen = _a.isOpen, onDismiss = _a.onDismiss; + var chainId = useActiveWeb3React().chainId; + // state for smart contract input + var _d = __read(useState(''), 2), typed = _d[0], setTyped = _d[1]; + function handleRecipientType(val) { + setTyped(val); + } + // monitor for third party recipient of claim + var parsedAddress = useENS(typed).address; + // used for UI loading states + var _e = __read(useState(false), 2), attempting = _e[0], setAttempting = _e[1]; + // monitor the status of the claim from contracts and txns + var claimCallback = useClaimCallback(parsedAddress).claimCallback; + var unclaimedAmount = useUserUnclaimedAmount(parsedAddress); + // check if the user has something available + var hasAvailableClaim = useUserHasAvailableClaim(parsedAddress); + var _f = __read(useState(), 2), hash = _f[0], setHash = _f[1]; + // monitor the status of the claim from contracts and txns + var claimPending = useIsTransactionPending(hash !== null && hash !== void 0 ? hash : ''); + var claimConfirmed = hash && !claimPending; + // use the hash to monitor this txn + function onClaim() { + setAttempting(true); + claimCallback() + .then(function (hash) { + setHash(hash); + }) + // reset modal and log error + .catch(function (error) { + setAttempting(false); + console.log(error); + }); + } + function wrappedOnDismiss() { + setAttempting(false); + setHash(undefined); + setTyped(''); + onDismiss(); + } + return (jsxs(Modal, __assign({ isOpen: isOpen, onDismiss: wrappedOnDismiss, maxHeight: 90 }, { children: [jsx(Confetti, { start: Boolean(isOpen && claimConfirmed && attempting) }, void 0), !attempting && (jsxs(ContentWrapper$4, __assign({ gap: "lg" }, { children: [jsxs(ModalUpper$1, { children: [jsx(CardBGImage, {}, void 0), jsx(CardNoise, {}, void 0), jsxs(CardSection, __assign({ gap: "md" }, { children: [jsxs(RowBetween, { children: [jsx(ThemedText.White, __assign({ fontWeight: 500 }, { children: jsx(Trans, { children: "Claim UNI Token" }, void 0) }), void 0), jsx(CloseIcon$2, { onClick: wrappedOnDismiss, style: { zIndex: 99 }, stroke: "white" }, void 0)] }, void 0), jsx(ThemedText.White, __assign({ fontWeight: 700, fontSize: 36 }, { children: jsxs(Trans, { children: [unclaimedAmount === null || unclaimedAmount === void 0 ? void 0 : unclaimedAmount.toFixed(0, (_b = { groupSeparator: ',' }) !== null && _b !== void 0 ? _b : '-'), " UNI"] }, void 0) }), void 0)] }), void 0), jsx(Break$1, {}, void 0)] }, void 0), jsxs(AutoColumn, __assign({ gap: "md", style: { padding: '1rem', paddingTop: '0' }, justify: "center" }, { children: [jsx(ThemedText.SubHeader, __assign({ fontWeight: 500 }, { children: jsx(Trans, { children: "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission." }, void 0) }), void 0), jsx(AddressInputPanel, { value: typed, onChange: handleRecipientType }, void 0), parsedAddress && !hasAvailableClaim && (jsx(ThemedText.Error, __assign({ error: true }, { children: jsx(Trans, { children: "Address has no available claim" }, void 0) }), void 0)), jsx(ButtonPrimary, __assign({ disabled: !isAddress$1(parsedAddress !== null && parsedAddress !== void 0 ? parsedAddress : '') || !hasAvailableClaim, padding: "16px 16px", width: "100%", "$borderRadius": "12px", mt: "1rem", onClick: onClaim }, { children: jsx(Trans, { children: "Claim UNI" }, void 0) }), void 0)] }), void 0)] }), void 0)), (attempting || claimConfirmed) && (jsxs(ConfirmOrLoadingWrapper$1, __assign({ activeBG: true }, { children: [jsx(CardNoise, {}, void 0), jsx(CardBGImageSmaller, { desaturate: true }, void 0), jsxs(RowBetween, { children: [jsx("div", {}, void 0), jsx(CloseIcon$2, { onClick: wrappedOnDismiss, style: { zIndex: 99 }, stroke: "black" }, void 0)] }, void 0), jsx(ConfirmedIcon$2, { children: !claimConfirmed ? (jsx(CustomLightSpinner, { src: Circle$1, alt: "loader", size: '90px' }, void 0)) : (jsx(UniTokenAnimated, { width: "72px", src: tokenLogo, alt: "UNI logo" }, void 0)) }, void 0), jsxs(AutoColumn, __assign({ gap: "100px", justify: 'center' }, { children: [jsxs(AutoColumn, __assign({ gap: "12px", justify: 'center' }, { children: [jsx(ThemedText.LargeHeader, __assign({ fontWeight: 600, color: "black" }, { children: claimConfirmed ? jsx(Trans, { children: "Claimed" }, void 0) : jsx(Trans, { children: "Claiming" }, void 0) }), void 0), !claimConfirmed && (jsx(Text$1, __assign({ fontSize: 36, color: '#ff007a', fontWeight: 800 }, { children: jsxs(Trans, { children: [unclaimedAmount === null || unclaimedAmount === void 0 ? void 0 : unclaimedAmount.toFixed(0, (_c = { groupSeparator: ',' }) !== null && _c !== void 0 ? _c : '-'), " UNI"] }, void 0) }), void 0)), parsedAddress && (jsx(ThemedText.LargeHeader, __assign({ fontWeight: 600, color: "black" }, { children: jsxs(Trans, { children: ["for ", shortenAddress(parsedAddress)] }, void 0) }), void 0))] }), void 0), claimConfirmed && (jsx(Fragment, { children: jsxs(ThemedText.SubHeader, __assign({ fontWeight: 500, color: "black" }, { children: [jsxs("span", __assign({ role: "img", "aria-label": "party-hat" }, { children: ["\uD83C\uDF89", ' '] }), void 0), jsx(Trans, { children: "Welcome to team Unicorn :) " }, void 0), jsx("span", __assign({ role: "img", "aria-label": "party-hat" }, { children: "\uD83C\uDF89" }), void 0)] }), void 0) }, void 0)), attempting && !hash && (jsx(ThemedText.SubHeader, __assign({ color: "black" }, { children: jsx(Trans, { children: "Confirm this transaction in your wallet" }, void 0) }), void 0)), attempting && hash && !claimConfirmed && chainId && hash && (jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, hash, ExplorerDataType.TRANSACTION), style: { zIndex: 99 } }, { children: jsx(Trans, { children: "View transaction on Explorer" }, void 0) }), void 0))] }), void 0)] }), void 0))] }), void 0)); +} +var templateObject_1$1d, templateObject_2$T, templateObject_3$K, templateObject_4$z; + +var _a$a; +var ApplicationModal; +(function (ApplicationModal) { + ApplicationModal[ApplicationModal["WALLET"] = 0] = "WALLET"; + ApplicationModal[ApplicationModal["SETTINGS"] = 1] = "SETTINGS"; + ApplicationModal[ApplicationModal["SELF_CLAIM"] = 2] = "SELF_CLAIM"; + ApplicationModal[ApplicationModal["ADDRESS_CLAIM"] = 3] = "ADDRESS_CLAIM"; + ApplicationModal[ApplicationModal["CLAIM_POPUP"] = 4] = "CLAIM_POPUP"; + ApplicationModal[ApplicationModal["MENU"] = 5] = "MENU"; + ApplicationModal[ApplicationModal["DELEGATE"] = 6] = "DELEGATE"; + ApplicationModal[ApplicationModal["VOTE"] = 7] = "VOTE"; + ApplicationModal[ApplicationModal["POOL_OVERVIEW_OPTIONS"] = 8] = "POOL_OVERVIEW_OPTIONS"; + ApplicationModal[ApplicationModal["NETWORK_SELECTOR"] = 9] = "NETWORK_SELECTOR"; + ApplicationModal[ApplicationModal["PRIVACY_POLICY"] = 10] = "PRIVACY_POLICY"; +})(ApplicationModal || (ApplicationModal = {})); +var initialState$8 = { + chainId: null, + openModal: null, + popupList: [], +}; +var applicationSlice = createSlice({ + name: 'application', + initialState: initialState$8, + reducers: { + updateChainId: function (state, action) { + var chainId = action.payload.chainId; + state.chainId = chainId; + }, + setOpenModal: function (state, action) { + state.openModal = action.payload; + }, + addPopup: function (state, _a) { + var _b = _a.payload, content = _b.content, key = _b.key, _c = _b.removeAfterMs, removeAfterMs = _c === void 0 ? DEFAULT_TXN_DISMISS_MS : _c; + state.popupList = (key ? state.popupList.filter(function (popup) { return popup.key !== key; }) : state.popupList).concat([ + { + key: key || nanoid(), + show: true, + content: content, + removeAfterMs: removeAfterMs, + }, + ]); + }, + removePopup: function (state, _a) { + var key = _a.payload.key; + state.popupList.forEach(function (p) { + if (p.key === key) { + p.show = false; + } + }); + }, + }, +}); +var updateChainId = (_a$a = applicationSlice.actions, _a$a.updateChainId), setOpenModal = _a$a.setOpenModal, addPopup = _a$a.addPopup, removePopup = _a$a.removePopup; +var application = applicationSlice.reducer; + +var Field$3; +(function (Field) { + Field["LIQUIDITY_PERCENT"] = "LIQUIDITY_PERCENT"; + Field["LIQUIDITY"] = "LIQUIDITY"; + Field["CURRENCY_A"] = "CURRENCY_A"; + Field["CURRENCY_B"] = "CURRENCY_B"; +})(Field$3 || (Field$3 = {})); +var typeInput$3 = createAction('burn/typeInputBurn'); + +var initialState$7 = { + independentField: Field$3.LIQUIDITY_PERCENT, + typedValue: '0', +}; +var burn = createReducer(initialState$7, function (builder) { + return builder.addCase(typeInput$3, function (state, _a) { + var _b = _a.payload, field = _b.field, typedValue = _b.typedValue; + return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); + }); +}); + +var selectPercent = createAction('burnV3/selectBurnPercent'); + +var initialState$6 = { + percent: 0, +}; +var burnV3 = createReducer(initialState$6, function (builder) { + return builder.addCase(selectPercent, function (state, _a) { + var percent = _a.payload.percent; + return __assign(__assign({}, state), { percent: percent }); + }); +}); + +var _a$9; +// List of supported subgraphs. Note that the app currently only support one active subgraph at a time +var CHAIN_SUBGRAPH_URL = (_a$9 = {}, + _a$9[SupportedChainId.MAINNET] = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3', + _a$9[SupportedChainId.RINKEBY] = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3', + _a$9[SupportedChainId.ARBITRUM_ONE] = 'https://api.thegraph.com/subgraphs/name/ianlapham/arbitrum-minimal', + _a$9[SupportedChainId.OPTIMISM] = 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-optimism-dev', + _a$9[SupportedChainId.POLYGON] = 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-v3-polygon', + _a$9); +var api$1 = createApi({ + reducerPath: 'dataApi', + baseQuery: graphqlRequestBaseQuery(), + endpoints: function (builder) { return ({ + allV3Ticks: builder.query({ + query: function (_a) { + var poolAddress = _a.poolAddress, _b = _a.skip, skip = _b === void 0 ? 0 : _b; + return ({ + document: gql(templateObject_1$1c || (templateObject_1$1c = __makeTemplateObject(["\n query allV3Ticks($poolAddress: String!, $skip: Int!) {\n ticks(first: 1000, skip: $skip, where: { poolAddress: $poolAddress }, orderBy: tickIdx) {\n tick: tickIdx\n liquidityNet\n price0\n price1\n }\n }\n "], ["\n query allV3Ticks($poolAddress: String!, $skip: Int!) {\n ticks(first: 1000, skip: $skip, where: { poolAddress: $poolAddress }, orderBy: tickIdx) {\n tick: tickIdx\n liquidityNet\n price0\n price1\n }\n }\n "]))), + variables: { + poolAddress: poolAddress, + skip: skip, + }, + }); + }, + }), + feeTierDistribution: builder.query({ + query: function (_a) { + var token0 = _a.token0, token1 = _a.token1; + return ({ + document: gql(templateObject_2$S || (templateObject_2$S = __makeTemplateObject(["\n query feeTierDistribution($token0: String!, $token1: String!) {\n _meta {\n block {\n number\n }\n }\n asToken0: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token0, token1: $token1 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n asToken1: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token1, token1: $token0 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n }\n "], ["\n query feeTierDistribution($token0: String!, $token1: String!) {\n _meta {\n block {\n number\n }\n }\n asToken0: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token0, token1: $token1 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n asToken1: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token1, token1: $token0 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n }\n "]))), + variables: { + token0: token0, + token1: token1, + }, + }); + }, + }), + }); }, +}); +// Graphql query client wrapper that builds a dynamic url based on chain id +function graphqlRequestBaseQuery() { + var _this = this; + return function (_a, _b) { + var document = _a.document, variables = _a.variables; + var getState = _b.getState; + return __awaiter(_this, void 0, void 0, function () { + var chainId, subgraphUrl, error_1, name_1, message, stack, request, response; + var _c; + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]); + chainId = getState().application.chainId; + subgraphUrl = chainId ? CHAIN_SUBGRAPH_URL[chainId] : undefined; + if (!subgraphUrl) { + return [2 /*return*/, { + error: { + name: 'UnsupportedChainId', + message: "Subgraph queries against ChainId " + chainId + " are not supported.", + stack: '', + }, + }]; + } + _c = {}; + return [4 /*yield*/, new GraphQLClient(subgraphUrl).request(document, variables)]; + case 1: return [2 /*return*/, (_c.data = _d.sent(), _c.meta = {}, _c)]; + case 2: + error_1 = _d.sent(); + if (error_1 instanceof ClientError) { + name_1 = error_1.name, message = error_1.message, stack = error_1.stack, request = error_1.request, response = error_1.response; + return [2 /*return*/, { error: { name: name_1, message: message, stack: stack }, meta: { request: request, response: response } }]; + } + throw error_1; + case 3: return [2 /*return*/]; + } + }); + }); + }; +} +var templateObject_1$1c, templateObject_2$S; + +// fired once when the app reloads but before the app renders +// allows any updates to be applied to store data loaded from localStorage +var updateVersion = createAction('global/updateVersion'); + +var fetchTokenList = { + pending: createAction('lists/fetchTokenList/pending'), + fulfilled: createAction('lists/fetchTokenList/fulfilled'), + rejected: createAction('lists/fetchTokenList/rejected'), +}; +// add and remove from list options +var addList = createAction('lists/addList'); +var removeList = createAction('lists/removeList'); +// select which lists to search across from loaded lists +var enableList = createAction('lists/enableList'); +var disableList = createAction('lists/disableList'); +// versioning +var acceptListUpdate = createAction('lists/acceptListUpdate'); + +var NEW_LIST_STATE = { + error: null, + current: null, + loadingRequestId: null, + pendingUpdate: null, +}; +var initialState$5 = { + lastInitializedDefaultListOfLists: DEFAULT_LIST_OF_LISTS, + byUrl: __assign({}, DEFAULT_LIST_OF_LISTS.reduce(function (memo, listUrl) { + memo[listUrl] = NEW_LIST_STATE; + return memo; + }, {})), + activeListUrls: DEFAULT_ACTIVE_LIST_URLS, +}; +var lists = createReducer(initialState$5, function (builder) { + return builder + .addCase(fetchTokenList.pending, function (state, _a) { + var _b, _c, _d, _e; + var _f = _a.payload, requestId = _f.requestId, url = _f.url; + var current = (_c = (_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.current) !== null && _c !== void 0 ? _c : null; + var pendingUpdate = (_e = (_d = state.byUrl[url]) === null || _d === void 0 ? void 0 : _d.pendingUpdate) !== null && _e !== void 0 ? _e : null; + state.byUrl[url] = { + current: current, + pendingUpdate: pendingUpdate, + loadingRequestId: requestId, + error: null, + }; + }) + .addCase(fetchTokenList.fulfilled, function (state, _a) { + var _b, _c, _d; + var _e = _a.payload, requestId = _e.requestId, tokenList = _e.tokenList, url = _e.url; + var current = (_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.current; + var loadingRequestId = (_c = state.byUrl[url]) === null || _c === void 0 ? void 0 : _c.loadingRequestId; + // no-op if update does nothing + if (current) { + var upgradeType = getVersionUpgrade(current.version, tokenList.version); + if (upgradeType === VersionUpgrade.NONE) + return; + if (loadingRequestId === null || loadingRequestId === requestId) { + state.byUrl[url] = { + current: current, + pendingUpdate: tokenList, + loadingRequestId: null, + error: null, + }; + } + } + else { + // activate if on default active + if (DEFAULT_ACTIVE_LIST_URLS.includes(url)) { + (_d = state.activeListUrls) === null || _d === void 0 ? void 0 : _d.push(url); + } + state.byUrl[url] = { + current: tokenList, + pendingUpdate: null, + loadingRequestId: null, + error: null, + }; + } + }) + .addCase(fetchTokenList.rejected, function (state, _a) { + var _b; + var _c = _a.payload, url = _c.url, requestId = _c.requestId, errorMessage = _c.errorMessage; + if (((_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.loadingRequestId) !== requestId) { + // no-op since it's not the latest request + return; + } + state.byUrl[url] = { + current: state.byUrl[url].current ? state.byUrl[url].current : null, + pendingUpdate: null, + loadingRequestId: null, + error: errorMessage, + }; + }) + .addCase(addList, function (state, _a) { + var url = _a.payload; + if (!state.byUrl[url]) { + state.byUrl[url] = NEW_LIST_STATE; + } + }) + .addCase(removeList, function (state, _a) { + var url = _a.payload; + if (state.byUrl[url]) { + delete state.byUrl[url]; + } + // remove list from active urls if needed + if (state.activeListUrls && state.activeListUrls.includes(url)) { + state.activeListUrls = state.activeListUrls.filter(function (u) { return u !== url; }); + } + }) + .addCase(enableList, function (state, _a) { + var url = _a.payload; + if (!state.byUrl[url]) { + state.byUrl[url] = NEW_LIST_STATE; + } + if (state.activeListUrls && !state.activeListUrls.includes(url)) { + state.activeListUrls.push(url); + } + if (!state.activeListUrls) { + state.activeListUrls = [url]; + } + }) + .addCase(disableList, function (state, _a) { + var url = _a.payload; + if (state.activeListUrls && state.activeListUrls.includes(url)) { + state.activeListUrls = state.activeListUrls.filter(function (u) { return u !== url; }); + } + }) + .addCase(acceptListUpdate, function (state, _a) { + var _b; + var url = _a.payload; + if (!((_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.pendingUpdate)) { + throw new Error('accept list update called without pending update'); + } + state.byUrl[url] = __assign(__assign({}, state.byUrl[url]), { current: state.byUrl[url].pendingUpdate, pendingUpdate: null }); + }) + .addCase(updateVersion, function (state) { + // state loaded from localStorage, but new lists have never been initialized + if (!state.lastInitializedDefaultListOfLists) { + state.byUrl = initialState$5.byUrl; + state.activeListUrls = initialState$5.activeListUrls; + } + else if (state.lastInitializedDefaultListOfLists) { + var lastInitializedSet_1 = state.lastInitializedDefaultListOfLists.reduce(function (s, l) { return s.add(l); }, new Set()); + var newListOfListsSet_1 = DEFAULT_LIST_OF_LISTS.reduce(function (s, l) { return s.add(l); }, new Set()); + DEFAULT_LIST_OF_LISTS.forEach(function (listUrl) { + if (!lastInitializedSet_1.has(listUrl)) { + state.byUrl[listUrl] = NEW_LIST_STATE; + } + }); + state.lastInitializedDefaultListOfLists.forEach(function (listUrl) { + if (!newListOfListsSet_1.has(listUrl)) { + delete state.byUrl[listUrl]; + } + }); + } + state.lastInitializedDefaultListOfLists = DEFAULT_LIST_OF_LISTS; + // if no active lists, activate defaults + if (!state.activeListUrls) { + state.activeListUrls = DEFAULT_ACTIVE_LIST_URLS; + // for each list on default list, initialize if needed + DEFAULT_ACTIVE_LIST_URLS.map(function (listUrl) { + if (!state.byUrl[listUrl]) { + state.byUrl[listUrl] = NEW_LIST_STATE; + } + return true; + }); + } + }); +}); + +/** + * Converts a filter to the corresponding string key + * @param filter the filter to convert + */ +function filterToKey(filter) { + var _a, _b, _c, _d; + return ((_a = filter.address) !== null && _a !== void 0 ? _a : '') + ":" + ((_d = (_c = (_b = filter.topics) === null || _b === void 0 ? void 0 : _b.map(function (topic) { return (topic ? (Array.isArray(topic) ? topic.join(';') : topic) : '\0'); })) === null || _c === void 0 ? void 0 : _c.join('-')) !== null && _d !== void 0 ? _d : ''); +} +/** + * Convert a filter key to the corresponding filter + * @param key key to convert + */ +function keyToFilter(key) { + var pcs = key.split(':'); + var address = pcs[0]; + var topics = pcs[1].split('-').map(function (topic) { + if (topic === '\0') + return null; + var parts = topic.split(';'); + if (parts.length === 1) + return parts[0]; + return parts; + }); + return { + address: address.length === 0 ? undefined : address, + topics: topics, + }; +} + +var _a$8; +var slice = createSlice({ + name: 'logs', + initialState: {}, + reducers: { + addListener: function (state, _a) { + var _b = _a.payload, chainId = _b.chainId, filter = _b.filter; + if (!state[chainId]) + state[chainId] = {}; + var key = filterToKey(filter); + if (!state[chainId][key]) + state[chainId][key] = { + listeners: 1, + }; + else + state[chainId][key].listeners++; + }, + fetchingLogs: function (state, _a) { + var e_1, _b; + var _c = _a.payload, chainId = _c.chainId, filters = _c.filters, blockNumber = _c.blockNumber; + if (!state[chainId]) + return; + try { + for (var filters_1 = __values(filters), filters_1_1 = filters_1.next(); !filters_1_1.done; filters_1_1 = filters_1.next()) { + var filter = filters_1_1.value; + var key = filterToKey(filter); + if (!state[chainId][key]) + continue; + state[chainId][key].fetchingBlockNumber = blockNumber; + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (filters_1_1 && !filters_1_1.done && (_b = filters_1.return)) _b.call(filters_1); + } + finally { if (e_1) throw e_1.error; } + } + }, + fetchedLogs: function (state, _a) { + var _b = _a.payload, chainId = _b.chainId, filter = _b.filter, results = _b.results; + if (!state[chainId]) + return; + var key = filterToKey(filter); + var fetchState = state[chainId][key]; + if (!fetchState || (fetchState.results && fetchState.results.blockNumber > results.blockNumber)) + return; + fetchState.results = results; + }, + fetchedLogsError: function (state, _a) { + var _b = _a.payload, chainId = _b.chainId, filter = _b.filter, blockNumber = _b.blockNumber; + if (!state[chainId]) + return; + var key = filterToKey(filter); + var fetchState = state[chainId][key]; + if (!fetchState || (fetchState.results && fetchState.results.blockNumber > blockNumber)) + return; + fetchState.results = { + blockNumber: blockNumber, + error: true, + }; + }, + removeListener: function (state, _a) { + var _b = _a.payload, chainId = _b.chainId, filter = _b.filter; + if (!state[chainId]) + return; + var key = filterToKey(filter); + if (!state[chainId][key]) + return; + state[chainId][key].listeners--; + }, + }, +}); +var logs = slice.reducer; +(_a$8 = slice.actions, _a$8.addListener); _a$8.removeListener; var fetchedLogs = _a$8.fetchedLogs, fetchedLogsError = _a$8.fetchedLogsError, fetchingLogs = _a$8.fetchingLogs; + +var Field$2; +(function (Field) { + Field["CURRENCY_A"] = "CURRENCY_A"; + Field["CURRENCY_B"] = "CURRENCY_B"; +})(Field$2 || (Field$2 = {})); +var typeInput$2 = createAction('mint/typeInputMint'); +var resetMintState$1 = createAction('mint/resetMintState'); + +var initialState$4 = { + independentField: Field$2.CURRENCY_A, + typedValue: '', + otherTypedValue: '', + startPriceTypedValue: '', + leftRangeTypedValue: '', + rightRangeTypedValue: '', +}; +var mint = createReducer(initialState$4, function (builder) { + return builder + .addCase(resetMintState$1, function () { return initialState$4; }) + .addCase(typeInput$2, function (state, _a) { + var _b = _a.payload, field = _b.field, typedValue = _b.typedValue, noLiquidity = _b.noLiquidity; + if (noLiquidity) { + // they're typing into the field they've last typed in + if (field === state.independentField) { + return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); + } + // they're typing into a new field, store the other value + else { + return __assign(__assign({}, state), { independentField: field, typedValue: typedValue, otherTypedValue: state.typedValue }); + } + } + else { + return __assign(__assign({}, state), { independentField: field, typedValue: typedValue, otherTypedValue: '' }); + } + }); +}); + +var Field$1; +(function (Field) { + Field["CURRENCY_A"] = "CURRENCY_A"; + Field["CURRENCY_B"] = "CURRENCY_B"; +})(Field$1 || (Field$1 = {})); +var Bound; +(function (Bound) { + Bound["LOWER"] = "LOWER"; + Bound["UPPER"] = "UPPER"; +})(Bound || (Bound = {})); +var typeInput$1 = createAction('mintV3/typeInputMint'); +var typeStartPriceInput = createAction('mintV3/typeStartPriceInput'); +var typeLeftRangeInput = createAction('mintV3/typeLeftRangeInput'); +var typeRightRangeInput = createAction('mintV3/typeRightRangeInput'); +var resetMintState = createAction('mintV3/resetMintState'); +var setFullRange = createAction('mintV3/setFullRange'); + +var initialState$3 = { + independentField: Field$1.CURRENCY_A, + typedValue: '', + startPriceTypedValue: '', + leftRangeTypedValue: '', + rightRangeTypedValue: '', +}; +var mintV3 = createReducer(initialState$3, function (builder) { + return builder + .addCase(resetMintState, function () { return initialState$3; }) + .addCase(setFullRange, function (state) { + return __assign(__assign({}, state), { leftRangeTypedValue: true, rightRangeTypedValue: true }); + }) + .addCase(typeStartPriceInput, function (state, _a) { + var typedValue = _a.payload.typedValue; + return __assign(__assign({}, state), { startPriceTypedValue: typedValue }); + }) + .addCase(typeLeftRangeInput, function (state, _a) { + var typedValue = _a.payload.typedValue; + return __assign(__assign({}, state), { leftRangeTypedValue: typedValue }); + }) + .addCase(typeRightRangeInput, function (state, _a) { + var typedValue = _a.payload.typedValue; + return __assign(__assign({}, state), { rightRangeTypedValue: typedValue }); + }) + .addCase(typeInput$1, function (state, _a) { + var _b = _a.payload, field = _b.field, typedValue = _b.typedValue, noLiquidity = _b.noLiquidity; + if (noLiquidity) { + // they're typing into the field they've last typed in + if (field === state.independentField) { + return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); + } + // they're typing into a new field, store the other value + else { + return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); + } + } + else { + return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); + } + }); +}); + +var protocols = [Protocol.V2, Protocol.V3]; +var DEFAULT_QUERY_PARAMS = { + protocols: protocols.map(function (p) { return p.toLowerCase(); }).join(','), + // example other params + // forceCrossProtocol: 'true', + // minSplits: '5', +}; +function getClientSideQuote(_a) { + var tokenInAddress = _a.tokenInAddress, tokenInChainId = _a.tokenInChainId, tokenInDecimals = _a.tokenInDecimals, tokenInSymbol = _a.tokenInSymbol, tokenOutAddress = _a.tokenOutAddress, tokenOutChainId = _a.tokenOutChainId, tokenOutDecimals = _a.tokenOutDecimals, tokenOutSymbol = _a.tokenOutSymbol, amount = _a.amount, type = _a.type; + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_b) { + switch (_b.label) { + case 0: return [4 /*yield*/, Promise.resolve().then(function () { return index; })]; + case 1: return [2 /*return*/, (_b.sent()).getQuote({ + type: type, + chainId: tokenInChainId, + tokenIn: { + address: tokenInAddress, + chainId: tokenInChainId, + decimals: tokenInDecimals, + symbol: tokenInSymbol, + }, + tokenOut: { + address: tokenOutAddress, + chainId: tokenOutChainId, + decimals: tokenOutDecimals, + symbol: tokenOutSymbol, + }, + amount: amount, + }, { protocols: protocols })]; + } + }); + }); +} +var routingApi = createApi({ + reducerPath: 'routingApi', + baseQuery: fetchBaseQuery({ + baseUrl: 'https://api.uniswap.org/v1/', + }), + endpoints: function (build) { return ({ + getQuote: build.query({ + queryFn: function (args, _api, _extraOptions, fetch) { + return __awaiter(this, void 0, void 0, function () { + var tokenInAddress, tokenInChainId, tokenOutAddress, tokenOutChainId, amount, useClientSideRouter, type, result, query, e_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + tokenInAddress = args.tokenInAddress, tokenInChainId = args.tokenInChainId, tokenOutAddress = args.tokenOutAddress, tokenOutChainId = args.tokenOutChainId, amount = args.amount, useClientSideRouter = args.useClientSideRouter, type = args.type; + _a.label = 1; + case 1: + _a.trys.push([1, 6, , 7]); + if (!useClientSideRouter) return [3 /*break*/, 3]; + return [4 /*yield*/, getClientSideQuote(args)]; + case 2: + result = _a.sent(); + return [3 /*break*/, 5]; + case 3: + query = qs.stringify(__assign(__assign({}, DEFAULT_QUERY_PARAMS), { tokenInAddress: tokenInAddress, tokenInChainId: tokenInChainId, tokenOutAddress: tokenOutAddress, tokenOutChainId: tokenOutChainId, amount: amount, type: type })); + return [4 /*yield*/, fetch("quote?" + query)]; + case 4: + result = _a.sent(); + _a.label = 5; + case 5: return [2 /*return*/, { data: result.data }]; + case 6: + e_1 = _a.sent(); + // TODO: fall back to client-side quoter when auto router fails. + // deprecate 'legacy' v2/v3 routers first. + return [2 /*return*/, { error: e_1 }]; + case 7: return [2 /*return*/]; + } + }); + }); + }, + keepUnusedDataFor: ms(templateObject_1$1b || (templateObject_1$1b = __makeTemplateObject(["10s"], ["10s"]))), + extraOptions: { + maxRetries: 0, + }, + }), + }); }, +}); +var useGetQuoteQuery = routingApi.useGetQuoteQuery; +var templateObject_1$1b; + +var Field; +(function (Field) { + Field["INPUT"] = "INPUT"; + Field["OUTPUT"] = "OUTPUT"; +})(Field || (Field = {})); +var selectCurrency = createAction('swap/selectCurrency'); +var switchCurrencies = createAction('swap/switchCurrencies'); +var typeInput = createAction('swap/typeInput'); +var replaceSwapState = createAction('swap/replaceSwapState'); +var setRecipient = createAction('swap/setRecipient'); + +var CHAIN_DATA_ABI = [ + { + inputs: [], + name: 'latestAnswer', + outputs: [{ internalType: 'int256', name: '', type: 'int256' }], + stateMutability: 'view', + type: 'function', + }, +]; +/** + * Returns the price of 1 gas in WEI for the currently selected network using the chainlink fast gas price oracle + */ +function useGasPrice() { + var _a, _b; + var address = useENSAddress('fast-gas-gwei.data.eth').address; + var contract = useContract(address !== null && address !== void 0 ? address : undefined, CHAIN_DATA_ABI, false); + var resultStr = (_b = (_a = useSingleCallResult(contract, 'latestAnswer').result) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.toString(); + return typeof resultStr === 'string' ? JSBI.BigInt(resultStr) : undefined; +} + +/** + * Parses a CurrencyAmount from the passed string. + * Returns the CurrencyAmount, or undefined if parsing fails. + */ +function tryParseCurrencyAmount(value, currency) { + if (!value || !currency) { + return undefined; + } + try { + var typedValueParsed = parseUnits(value, currency.decimals).toString(); + if (typedValueParsed !== '0') { + return CurrencyAmount.fromRawAmount(currency, JSBI.BigInt(typedValueParsed)); + } + } + catch (error) { + // fails if the user specifies too many decimal places of precision (or maybe exceed max uint?) + console.debug("Failed to parse input amount: \"" + value + "\"", error); + } + return undefined; +} + +// returns whether tradeB is better than tradeA by at least a threshold percentage amount +// only used by v2 hooks +function isTradeBetter(tradeA, tradeB, minimumDelta) { + if (minimumDelta === void 0) { minimumDelta = ZERO_PERCENT; } + if (tradeA && !tradeB) + return false; + if (tradeB && !tradeA) + return true; + if (!tradeA || !tradeB) + return undefined; + if (tradeA.tradeType !== tradeB.tradeType || + !tradeA.inputAmount.currency.equals(tradeB.inputAmount.currency) || + !tradeA.outputAmount.currency.equals(tradeB.outputAmount.currency)) { + throw new Error('Comparing incomparable trades'); + } + if (minimumDelta.equalTo(ZERO_PERCENT)) { + return tradeA.executionPrice.lessThan(tradeB.executionPrice); + } + else { + return tradeA.executionPrice.asFraction + .multiply(minimumDelta.add(ONE_HUNDRED_PERCENT)) + .lessThan(tradeB.executionPrice); + } +} + +function useAllCurrencyCombinations(currencyA, currencyB) { + var chainId = currencyA === null || currencyA === void 0 ? void 0 : currencyA.chainId; + var _a = __read(chainId ? [currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped, currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped] : [undefined, undefined], 2), tokenA = _a[0], tokenB = _a[1]; + var bases = useMemo(function () { + var _a, _b, _c, _d, _e; + if (!chainId || chainId !== (tokenB === null || tokenB === void 0 ? void 0 : tokenB.chainId)) + return []; + var common = (_a = BASES_TO_CHECK_TRADES_AGAINST[chainId]) !== null && _a !== void 0 ? _a : []; + var additionalA = tokenA ? (_c = (_b = ADDITIONAL_BASES[chainId]) === null || _b === void 0 ? void 0 : _b[tokenA.address]) !== null && _c !== void 0 ? _c : [] : []; + var additionalB = tokenB ? (_e = (_d = ADDITIONAL_BASES[chainId]) === null || _d === void 0 ? void 0 : _d[tokenB.address]) !== null && _e !== void 0 ? _e : [] : []; + return __spreadArray(__spreadArray(__spreadArray([], __read(common), false), __read(additionalA), false), __read(additionalB), false); + }, [chainId, tokenA, tokenB]); + var basePairs = useMemo(function () { + return bases + .flatMap(function (base) { return bases.map(function (otherBase) { return [base, otherBase]; }); }) + // though redundant with the first filter below, that expression runs more often, so this is probably worthwhile + .filter(function (_a) { + var _b = __read(_a, 2), t0 = _b[0], t1 = _b[1]; + return !t0.equals(t1); + }); + }, [bases]); + return useMemo(function () { + return tokenA && tokenB + ? __spreadArray(__spreadArray(__spreadArray([ + // the direct pair + [tokenA, tokenB] + ], __read(bases.map(function (base) { return [tokenA, base]; })), false), __read(bases.map(function (base) { return [tokenB, base]; })), false), __read(basePairs), false).filter(function (_a) { + var _b = __read(_a, 2), t0 = _b[0], t1 = _b[1]; + return !t0.equals(t1); + }) + // filter out duplicate pairs + .filter(function (_a, i, otherPairs) { + var _b = __read(_a, 2), t0 = _b[0], t1 = _b[1]; + // find the first index in the array at which there are the same 2 tokens as the current + var firstIndexInOtherPairs = otherPairs.findIndex(function (_a) { + var _b = __read(_a, 2), t0Other = _b[0], t1Other = _b[1]; + return (t0.equals(t0Other) && t1.equals(t1Other)) || (t0.equals(t1Other) && t1.equals(t0Other)); + }); + // only accept the first occurrence of the same 2 tokens + return firstIndexInOtherPairs === i; + }) + // optionally filter out some pairs for tokens with custom bases defined + .filter(function (_a) { + var _b = __read(_a, 2), tokenA = _b[0], tokenB = _b[1]; + if (!chainId) + return true; + var customBases = CUSTOM_BASES[chainId]; + var customBasesA = customBases === null || customBases === void 0 ? void 0 : customBases[tokenA.address]; + var customBasesB = customBases === null || customBases === void 0 ? void 0 : customBases[tokenB.address]; + if (!customBasesA && !customBasesB) + return true; + if (customBasesA && !customBasesA.find(function (base) { return tokenB.equals(base); })) + return false; + if (customBasesB && !customBasesB.find(function (base) { return tokenA.equals(base); })) + return false; + return true; + }) + : []; + }, [tokenA, tokenB, bases, basePairs, chainId]); +} + +var PAIR_INTERFACE = new Interface(abi$4); +var PairState; +(function (PairState) { + PairState[PairState["LOADING"] = 0] = "LOADING"; + PairState[PairState["NOT_EXISTS"] = 1] = "NOT_EXISTS"; + PairState[PairState["EXISTS"] = 2] = "EXISTS"; + PairState[PairState["INVALID"] = 3] = "INVALID"; +})(PairState || (PairState = {})); +function useV2Pairs(currencies) { + var tokens = useMemo(function () { return currencies.map(function (_a) { + var _b = __read(_a, 2), currencyA = _b[0], currencyB = _b[1]; + return [currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped, currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped]; + }); }, [currencies]); + var pairAddresses = useMemo(function () { + return tokens.map(function (_a) { + var _b = __read(_a, 2), tokenA = _b[0], tokenB = _b[1]; + return tokenA && + tokenB && + tokenA.chainId === tokenB.chainId && + !tokenA.equals(tokenB) && + V2_FACTORY_ADDRESSES[tokenA.chainId] + ? computePairAddress({ factoryAddress: V2_FACTORY_ADDRESSES[tokenA.chainId], tokenA: tokenA, tokenB: tokenB }) + : undefined; + }); + }, [tokens]); + var results = useMultipleContractSingleData(pairAddresses, PAIR_INTERFACE, 'getReserves'); + return useMemo(function () { + return results.map(function (result, i) { + var reserves = result.result, loading = result.loading; + var tokenA = tokens[i][0]; + var tokenB = tokens[i][1]; + if (loading) + return [PairState.LOADING, null]; + if (!tokenA || !tokenB || tokenA.equals(tokenB)) + return [PairState.INVALID, null]; + if (!reserves) + return [PairState.NOT_EXISTS, null]; + var reserve0 = reserves.reserve0, reserve1 = reserves.reserve1; + var _a = __read(tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA], 2), token0 = _a[0], token1 = _a[1]; + return [ + PairState.EXISTS, + new Pair(CurrencyAmount.fromRawAmount(token0, reserve0.toString()), CurrencyAmount.fromRawAmount(token1, reserve1.toString())), + ]; + }); + }, [results, tokens]); +} + +function useAllCommonPairs(currencyA, currencyB) { + var allCurrencyCombinations = useAllCurrencyCombinations(currencyA, currencyB); + var allPairs = useV2Pairs(allCurrencyCombinations); + return useMemo(function () { + return Object.values(allPairs + // filter out invalid pairs + .filter(function (result) { return Boolean(result[0] === PairState.EXISTS && result[1]); }) + .map(function (_a) { + var _b = __read(_a, 2), pair = _b[1]; + return pair; + })); + }, [allPairs]); +} +var MAX_HOPS = 3; +/** + * Returns the best v2 trade for a desired swap + * @param tradeType whether the swap is an exact in/out + * @param amountSpecified the exact amount to swap in/out + * @param otherCurrency the desired output/payment currency + */ +function useBestV2Trade(tradeType, amountSpecified, otherCurrency, _a) { + var _b = _a === void 0 ? {} : _a, _c = _b.maxHops, maxHops = _c === void 0 ? MAX_HOPS : _c; + var _d = __read(useMemo(function () { + return tradeType === TradeType.EXACT_INPUT + ? [amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, otherCurrency] + : [otherCurrency, amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency]; + }, [tradeType, amountSpecified, otherCurrency]), 2), currencyIn = _d[0], currencyOut = _d[1]; + var allowedPairs = useAllCommonPairs(currencyIn, currencyOut); + return useMemo(function () { + var _a, _b, _c, _d; + if (amountSpecified && currencyIn && currencyOut && allowedPairs.length > 0) { + if (maxHops === 1) { + var options = { maxHops: 1, maxNumResults: 1 }; + if (tradeType === TradeType.EXACT_INPUT) { + var amountIn = amountSpecified; + return (_a = Trade.bestTradeExactIn(allowedPairs, amountIn, currencyOut, options)[0]) !== null && _a !== void 0 ? _a : null; + } + else { + var amountOut = amountSpecified; + return (_b = Trade.bestTradeExactOut(allowedPairs, currencyIn, amountOut, options)[0]) !== null && _b !== void 0 ? _b : null; + } + } + // search through trades with varying hops, find best trade out of them + var bestTradeSoFar = null; + for (var i = 1; i <= maxHops; i++) { + var options = { maxHops: i, maxNumResults: 1 }; + var currentTrade = void 0; + if (tradeType === TradeType.EXACT_INPUT) { + var amountIn = amountSpecified; + currentTrade = (_c = Trade.bestTradeExactIn(allowedPairs, amountIn, currencyOut, options)[0]) !== null && _c !== void 0 ? _c : null; + } + else { + var amountOut = amountSpecified; + currentTrade = (_d = Trade.bestTradeExactOut(allowedPairs, currencyIn, amountOut, options)[0]) !== null && _d !== void 0 ? _d : null; + } + // if current trade is best yet, save it + if (isTradeBetter(bestTradeSoFar, currentTrade, BETTER_TRADE_LESS_HOPS_THRESHOLD)) { + bestTradeSoFar = currentTrade; + } + } + return bestTradeSoFar; + } + return null; + }, [tradeType, amountSpecified, currencyIn, currencyOut, allowedPairs, maxHops]); +} + +var TradeState; +(function (TradeState) { + TradeState[TradeState["LOADING"] = 0] = "LOADING"; + TradeState[TradeState["INVALID"] = 1] = "INVALID"; + TradeState[TradeState["NO_ROUTE_FOUND"] = 2] = "NO_ROUTE_FOUND"; + TradeState[TradeState["VALID"] = 3] = "VALID"; + TradeState[TradeState["SYNCING"] = 4] = "SYNCING"; +})(TradeState || (TradeState = {})); +var InterfaceTrade = /** @class */ (function (_super) { + __extends(InterfaceTrade, _super); + function InterfaceTrade(_a) { + var gasUseEstimateUSD = _a.gasUseEstimateUSD, routes = __rest(_a, ["gasUseEstimateUSD"]); + var _this = _super.call(this, routes) || this; + _this.gasUseEstimateUSD = gasUseEstimateUSD; + return _this; + } + return InterfaceTrade; +}(Trade$1)); + +var abi = [ + { + inputs: [ + ], + name: "feeGrowthGlobal0X128", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + ], + name: "feeGrowthGlobal1X128", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + ], + name: "liquidity", + outputs: [ + { + internalType: "uint128", + name: "", + type: "uint128" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "index", + type: "uint256" + } + ], + name: "observations", + outputs: [ + { + internalType: "uint32", + name: "blockTimestamp", + type: "uint32" + }, + { + internalType: "int56", + name: "tickCumulative", + type: "int56" + }, + { + internalType: "uint160", + name: "secondsPerLiquidityCumulativeX128", + type: "uint160" + }, + { + internalType: "bool", + name: "initialized", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "key", + type: "bytes32" + } + ], + name: "positions", + outputs: [ + { + internalType: "uint128", + name: "_liquidity", + type: "uint128" + }, + { + internalType: "uint256", + name: "feeGrowthInside0LastX128", + type: "uint256" + }, + { + internalType: "uint256", + name: "feeGrowthInside1LastX128", + type: "uint256" + }, + { + internalType: "uint128", + name: "tokensOwed0", + type: "uint128" + }, + { + internalType: "uint128", + name: "tokensOwed1", + type: "uint128" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + ], + name: "protocolFees", + outputs: [ + { + internalType: "uint128", + name: "token0", + type: "uint128" + }, + { + internalType: "uint128", + name: "token1", + type: "uint128" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + ], + name: "slot0", + outputs: [ + { + internalType: "uint160", + name: "sqrtPriceX96", + type: "uint160" + }, + { + internalType: "int24", + name: "tick", + type: "int24" + }, + { + internalType: "uint16", + name: "observationIndex", + type: "uint16" + }, + { + internalType: "uint16", + name: "observationCardinality", + type: "uint16" + }, + { + internalType: "uint16", + name: "observationCardinalityNext", + type: "uint16" + }, + { + internalType: "uint8", + name: "feeProtocol", + type: "uint8" + }, + { + internalType: "bool", + name: "unlocked", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "int16", + name: "wordPosition", + type: "int16" + } + ], + name: "tickBitmap", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "int24", + name: "tick", + type: "int24" + } + ], + name: "ticks", + outputs: [ + { + internalType: "uint128", + name: "liquidityGross", + type: "uint128" + }, + { + internalType: "int128", + name: "liquidityNet", + type: "int128" + }, + { + internalType: "uint256", + name: "feeGrowthOutside0X128", + type: "uint256" + }, + { + internalType: "uint256", + name: "feeGrowthOutside1X128", + type: "uint256" + }, + { + internalType: "int56", + name: "tickCumulativeOutside", + type: "int56" + }, + { + internalType: "uint160", + name: "secondsPerLiquidityOutsideX128", + type: "uint160" + }, + { + internalType: "uint32", + name: "secondsOutside", + type: "uint32" + }, + { + internalType: "bool", + name: "initialized", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + } +]; + +var POOL_STATE_INTERFACE = new Interface(abi); +var PoolState; +(function (PoolState) { + PoolState[PoolState["LOADING"] = 0] = "LOADING"; + PoolState[PoolState["NOT_EXISTS"] = 1] = "NOT_EXISTS"; + PoolState[PoolState["EXISTS"] = 2] = "EXISTS"; + PoolState[PoolState["INVALID"] = 3] = "INVALID"; +})(PoolState || (PoolState = {})); +function usePools(poolKeys) { + var chainId = useActiveWeb3React().chainId; + var transformed = useMemo(function () { + return poolKeys.map(function (_a) { + var _b = __read(_a, 3), currencyA = _b[0], currencyB = _b[1], feeAmount = _b[2]; + if (!chainId || !currencyA || !currencyB || !feeAmount) + return null; + var tokenA = currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped; + var tokenB = currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped; + if (!tokenA || !tokenB || tokenA.equals(tokenB)) + return null; + var _c = __read(tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA], 2), token0 = _c[0], token1 = _c[1]; + return [token0, token1, feeAmount]; + }); + }, [chainId, poolKeys]); + var poolAddresses = useMemo(function () { + var v3CoreFactoryAddress = chainId && V3_CORE_FACTORY_ADDRESSES[chainId]; + return transformed.map(function (value) { + if (!v3CoreFactoryAddress || !value) + return undefined; + return computePoolAddress({ + factoryAddress: v3CoreFactoryAddress, + tokenA: value[0], + tokenB: value[1], + fee: value[2], + }); + }); + }, [chainId, transformed]); + var slot0s = useMultipleContractSingleData(poolAddresses, POOL_STATE_INTERFACE, 'slot0'); + var liquidities = useMultipleContractSingleData(poolAddresses, POOL_STATE_INTERFACE, 'liquidity'); + return useMemo(function () { + return poolKeys.map(function (_key, index) { + var _a; + var _b = __read((_a = transformed[index]) !== null && _a !== void 0 ? _a : [], 3), token0 = _b[0], token1 = _b[1], fee = _b[2]; + if (!token0 || !token1 || !fee) + return [PoolState.INVALID, null]; + var _c = slot0s[index], slot0 = _c.result, slot0Loading = _c.loading, slot0Valid = _c.valid; + var _d = liquidities[index], liquidity = _d.result, liquidityLoading = _d.loading, liquidityValid = _d.valid; + if (!slot0Valid || !liquidityValid) + return [PoolState.INVALID, null]; + if (slot0Loading || liquidityLoading) + return [PoolState.LOADING, null]; + if (!slot0 || !liquidity) + return [PoolState.NOT_EXISTS, null]; + if (!slot0.sqrtPriceX96 || slot0.sqrtPriceX96.eq(0)) + return [PoolState.NOT_EXISTS, null]; + try { + return [PoolState.EXISTS, new Pool$1(token0, token1, fee, slot0.sqrtPriceX96, liquidity[0], slot0.tick)]; + } + catch (error) { + console.error('Error when constructing the pool', error); + return [PoolState.NOT_EXISTS, null]; + } + }); + }, [liquidities, poolKeys, slot0s, transformed]); +} + +/** + * Returns all the existing pools that should be considered for swapping between an input currency and an output currency + * @param currencyIn the input currency + * @param currencyOut the output currency + */ +function useV3SwapPools(currencyIn, currencyOut) { + var chainId = useActiveWeb3React().chainId; + var allCurrencyCombinations = useAllCurrencyCombinations(currencyIn, currencyOut); + var allCurrencyCombinationsWithAllFees = useMemo(function () { + return allCurrencyCombinations.reduce(function (list, _a) { + var _b = __read(_a, 2), tokenA = _b[0], tokenB = _b[1]; + return chainId === SupportedChainId.MAINNET + ? list.concat([ + [tokenA, tokenB, FeeAmount.LOW], + [tokenA, tokenB, FeeAmount.MEDIUM], + [tokenA, tokenB, FeeAmount.HIGH], + ]) + : list.concat([ + [tokenA, tokenB, FeeAmount.LOWEST], + [tokenA, tokenB, FeeAmount.LOW], + [tokenA, tokenB, FeeAmount.MEDIUM], + [tokenA, tokenB, FeeAmount.HIGH], + ]); + }, []); + }, [allCurrencyCombinations, chainId]); + var pools = usePools(allCurrencyCombinationsWithAllFees); + return useMemo(function () { + return { + pools: pools + .filter(function (tuple) { + return tuple[0] === PoolState.EXISTS && tuple[1] !== null; + }) + .map(function (_a) { + var _b = __read(_a, 2), pool = _b[1]; + return pool; + }), + loading: pools.some(function (_a) { + var _b = __read(_a, 1), state = _b[0]; + return state === PoolState.LOADING; + }), + }; + }, [pools]); +} + +/** + * Returns true if poolA is equivalent to poolB + * @param poolA one of the two pools + * @param poolB the other pool + */ +function poolEquals(poolA, poolB) { + return (poolA === poolB || + (poolA.token0.equals(poolB.token0) && poolA.token1.equals(poolB.token1) && poolA.fee === poolB.fee)); +} +function computeAllRoutes(currencyIn, currencyOut, pools, chainId, currentPath, allPaths, startCurrencyIn, maxHops) { + var e_1, _a; + if (currentPath === void 0) { currentPath = []; } + if (allPaths === void 0) { allPaths = []; } + if (startCurrencyIn === void 0) { startCurrencyIn = currencyIn; } + if (maxHops === void 0) { maxHops = 2; } + var tokenIn = currencyIn === null || currencyIn === void 0 ? void 0 : currencyIn.wrapped; + var tokenOut = currencyOut === null || currencyOut === void 0 ? void 0 : currencyOut.wrapped; + if (!tokenIn || !tokenOut) + throw new Error('Missing tokenIn/tokenOut'); + var _loop_1 = function (pool) { + if (!pool.involvesToken(tokenIn) || currentPath.find(function (pathPool) { return poolEquals(pool, pathPool); })) + return "continue"; + var outputToken = pool.token0.equals(tokenIn) ? pool.token1 : pool.token0; + if (outputToken.equals(tokenOut)) { + allPaths.push(new Route$1(__spreadArray(__spreadArray([], __read(currentPath), false), [pool], false), startCurrencyIn, currencyOut)); + } + else if (maxHops > 1) { + computeAllRoutes(outputToken, currencyOut, pools, chainId, __spreadArray(__spreadArray([], __read(currentPath), false), [pool], false), allPaths, startCurrencyIn, maxHops - 1); + } + }; + try { + for (var pools_1 = __values(pools), pools_1_1 = pools_1.next(); !pools_1_1.done; pools_1_1 = pools_1.next()) { + var pool = pools_1_1.value; + _loop_1(pool); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (pools_1_1 && !pools_1_1.done && (_a = pools_1.return)) _a.call(pools_1); + } + finally { if (e_1) throw e_1.error; } + } + return allPaths; +} +/** + * Returns all the routes from an input currency to an output currency + * @param currencyIn the input currency + * @param currencyOut the output currency + */ +function useAllV3Routes(currencyIn, currencyOut) { + var chainId = useActiveWeb3React().chainId; + var _a = useV3SwapPools(currencyIn, currencyOut), pools = _a.pools, poolsLoading = _a.loading; + return useMemo(function () { + if (poolsLoading || !chainId || !pools || !currencyIn || !currencyOut) + return { loading: true, routes: [] }; + var routes = computeAllRoutes(currencyIn, currencyOut, pools, chainId, [], [], currencyIn, 2); + return { loading: false, routes: routes }; + }, [chainId, currencyIn, currencyOut, pools, poolsLoading]); +} + +var _a$7; +var QUOTE_GAS_OVERRIDES = (_a$7 = {}, + _a$7[SupportedChainId.ARBITRUM_ONE] = 25000000, + _a$7[SupportedChainId.ARBITRUM_RINKEBY] = 25000000, + _a$7); +var DEFAULT_GAS_QUOTE = 2000000; +/** + * Returns the best v3 trade for a desired swap + * @param tradeType whether the swap is an exact in/out + * @param amountSpecified the exact amount to swap in/out + * @param otherCurrency the desired output/payment currency + */ +function useClientSideV3Trade(tradeType, amountSpecified, otherCurrency) { + var _a; + var _b = __read(useMemo(function () { + return tradeType === TradeType.EXACT_INPUT + ? [amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, otherCurrency] + : [otherCurrency, amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency]; + }, [tradeType, amountSpecified, otherCurrency]), 2), currencyIn = _b[0], currencyOut = _b[1]; + var _c = useAllV3Routes(currencyIn, currencyOut), routes = _c.routes, routesLoading = _c.loading; + var quoter = useV3Quoter(); + var chainId = useActiveWeb3React().chainId; + var quotesResults = useSingleContractWithCallData(quoter, amountSpecified + ? routes.map(function (route) { return SwapQuoter.quoteCallParameters(route, amountSpecified, tradeType).calldata; }) + : [], { + gasRequired: chainId ? (_a = QUOTE_GAS_OVERRIDES[chainId]) !== null && _a !== void 0 ? _a : DEFAULT_GAS_QUOTE : undefined, + }); + return useMemo(function () { + if (!amountSpecified || + !currencyIn || + !currencyOut || + quotesResults.some(function (_a) { + var valid = _a.valid; + return !valid; + }) || + // skip when tokens are the same + (tradeType === TradeType.EXACT_INPUT + ? amountSpecified.currency.equals(currencyOut) + : amountSpecified.currency.equals(currencyIn))) { + return { + state: TradeState.INVALID, + trade: undefined, + }; + } + if (routesLoading || quotesResults.some(function (_a) { + var loading = _a.loading; + return loading; + })) { + return { + state: TradeState.LOADING, + trade: undefined, + }; + } + var _a = quotesResults.reduce(function (currentBest, _a, i) { + var result = _a.result; + if (!result) + return currentBest; + // overwrite the current best if it's not defined or if this route is better + if (tradeType === TradeType.EXACT_INPUT) { + var amountOut_1 = CurrencyAmount.fromRawAmount(currencyOut, result.amountOut.toString()); + if (currentBest.amountOut === null || JSBI.lessThan(currentBest.amountOut.quotient, amountOut_1.quotient)) { + return { + bestRoute: routes[i], + amountIn: amountSpecified, + amountOut: amountOut_1, + }; + } + } + else { + var amountIn_1 = CurrencyAmount.fromRawAmount(currencyIn, result.amountIn.toString()); + if (currentBest.amountIn === null || JSBI.greaterThan(currentBest.amountIn.quotient, amountIn_1.quotient)) { + return { + bestRoute: routes[i], + amountIn: amountIn_1, + amountOut: amountSpecified, + }; + } + } + return currentBest; + }, { + bestRoute: null, + amountIn: null, + amountOut: null, + }), bestRoute = _a.bestRoute, amountIn = _a.amountIn, amountOut = _a.amountOut; + if (!bestRoute || !amountIn || !amountOut) { + return { + state: TradeState.NO_ROUTE_FOUND, + trade: undefined, + }; + } + return { + state: TradeState.VALID, + trade: new InterfaceTrade({ + v2Routes: [], + v3Routes: [ + { + routev3: bestRoute, + inputAmount: amountIn, + outputAmount: amountOut, + }, + ], + tradeType: tradeType, + }), + }; + }, [amountSpecified, currencyIn, currencyOut, quotesResults, routes, routesLoading, tradeType]); +} + +var _a$6; +// Stablecoin amounts used when calculating spot price for a given currency. +// The amount is large enough to filter low liquidity pairs. +var STABLECOIN_AMOUNT_OUT = (_a$6 = {}, + _a$6[SupportedChainId.MAINNET] = CurrencyAmount.fromRawAmount(USDC, 100000000000), + _a$6[SupportedChainId.ARBITRUM_ONE] = CurrencyAmount.fromRawAmount(USDC_ARBITRUM, 10000000000), + _a$6[SupportedChainId.OPTIMISM] = CurrencyAmount.fromRawAmount(DAI_OPTIMISM, 1e+22), + _a$6[SupportedChainId.POLYGON] = CurrencyAmount.fromRawAmount(USDC_POLYGON, 10000000000), + _a$6); +/** + * Returns the price in USDC of the input currency + * @param currency currency to compute the USDC price of + */ +function useUSDCPrice(currency) { + var chainId = currency === null || currency === void 0 ? void 0 : currency.chainId; + var amountOut = chainId ? STABLECOIN_AMOUNT_OUT[chainId] : undefined; + var stablecoin = amountOut === null || amountOut === void 0 ? void 0 : amountOut.currency; + // TODO(#2808): remove dependency on useBestV2Trade + var v2USDCTrade = useBestV2Trade(TradeType.EXACT_OUTPUT, amountOut, currency, { + maxHops: 2, + }); + var v3USDCTrade = useClientSideV3Trade(TradeType.EXACT_OUTPUT, amountOut, currency); + return useMemo(function () { + if (!currency || !stablecoin) { + return undefined; + } + // handle usdc + if (currency === null || currency === void 0 ? void 0 : currency.wrapped.equals(stablecoin)) { + return new Price(stablecoin, stablecoin, '1', '1'); + } + // use v2 price if available, v3 as fallback + if (v2USDCTrade) { + var _a = v2USDCTrade.route.midPrice, numerator = _a.numerator, denominator = _a.denominator; + return new Price(currency, stablecoin, denominator, numerator); + } + else if (v3USDCTrade.trade) { + var _b = v3USDCTrade.trade.routes[0].midPrice, numerator = _b.numerator, denominator = _b.denominator; + return new Price(currency, stablecoin, denominator, numerator); + } + return undefined; + }, [currency, stablecoin, v2USDCTrade, v3USDCTrade.trade]); +} +function useUSDCValue(currencyAmount) { + var price = useUSDCPrice(currencyAmount === null || currencyAmount === void 0 ? void 0 : currencyAmount.currency); + return useMemo(function () { + if (!price || !currencyAmount) + return null; + try { + return price.quote(currencyAmount); + } + catch (error) { + return null; + } + }, [currencyAmount, price]); +} +/** + * + * @param fiatValue string representation of a USD amount + * @returns CurrencyAmount where currency is stablecoin on active chain + */ +function useStablecoinAmountFromFiatValue(fiatValue) { + var _a; + var chainId = useActiveWeb3React().chainId; + var stablecoin = chainId ? (_a = STABLECOIN_AMOUNT_OUT[chainId]) === null || _a === void 0 ? void 0 : _a.currency : undefined; + if (fiatValue === null || fiatValue === undefined || !chainId || !stablecoin) { + return undefined; + } + // trim for decimal precision when parsing + var parsedForDecimals = parseFloat(fiatValue).toFixed(stablecoin.decimals).toString(); + try { + // parse USD string into CurrencyAmount based on stablecoin decimals + return tryParseCurrencyAmount(parsedForDecimals, stablecoin); + } + catch (error) { + return undefined; + } +} + +var V3_SWAP_DEFAULT_SLIPPAGE = new Percent(50, 10000); // .50% +var ONE_TENTHS_PERCENT = new Percent(10, 10000); // .10% +/** + * Return a guess of the gas cost used in computing slippage tolerance for a given trade + * @param trade the trade for which to _guess_ the amount of gas it would cost to execute + */ +function guesstimateGas(trade) { + if (!!trade) { + return 100000 + trade.swaps.reduce(function (memo, swap) { return swap.route.pools.length + memo; }, 0) * 30000; + } + return undefined; +} +var MIN_AUTO_SLIPPAGE_TOLERANCE = new Percent(5, 1000); // 0.5% +var MAX_AUTO_SLIPPAGE_TOLERANCE = new Percent(25, 100); // 25% +/** + * Returns slippage tolerance based on values from current trade, gas estimates from api, and active network. + */ +function useAutoSlippageTolerance(trade) { + var chainId = useActiveWeb3React().chainId; + var onL2 = chainId && L2_CHAIN_IDS.includes(chainId); + var outputDollarValue = useUSDCValue(trade === null || trade === void 0 ? void 0 : trade.outputAmount); + var nativeGasPrice = useGasPrice(); + var gasEstimate = guesstimateGas(trade); + var nativeCurrency = useNativeCurrency(); + var nativeCurrencyPrice = useUSDCPrice(nativeCurrency !== null && nativeCurrency !== void 0 ? nativeCurrency : undefined); + return useMemo(function () { + if (!trade || onL2) + return ONE_TENTHS_PERCENT; + var nativeGasCost = nativeGasPrice && typeof gasEstimate === 'number' + ? JSBI.multiply(nativeGasPrice, JSBI.BigInt(gasEstimate)) + : undefined; + var dollarGasCost = nativeCurrency && nativeGasCost && nativeCurrencyPrice + ? nativeCurrencyPrice.quote(CurrencyAmount.fromRawAmount(nativeCurrency, nativeGasCost)) + : undefined; + // if valid estimate from api and using api trade, use gas estimate from api + // NOTE - dont use gas estimate for L2s yet - need to verify accuracy + // if not, use local heuristic + var dollarCostToUse = chainId && SUPPORTED_GAS_ESTIMATE_CHAIN_IDS.includes(chainId) && (trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) + ? trade.gasUseEstimateUSD + : dollarGasCost; + if (outputDollarValue && dollarCostToUse) { + // the rationale is that a user will not want their trade to fail for a loss due to slippage that is less than + // the cost of the gas of the failed transaction + var fraction = dollarCostToUse.asFraction.divide(outputDollarValue.asFraction); + var result = new Percent(fraction.numerator, fraction.denominator); + if (result.greaterThan(MAX_AUTO_SLIPPAGE_TOLERANCE)) + return MAX_AUTO_SLIPPAGE_TOLERANCE; + if (result.lessThan(MIN_AUTO_SLIPPAGE_TOLERANCE)) + return MIN_AUTO_SLIPPAGE_TOLERANCE; + return result; + } + return V3_SWAP_DEFAULT_SLIPPAGE; + }, [trade, onL2, nativeGasPrice, gasEstimate, nativeCurrency, nativeCurrencyPrice, chainId, outputDollarValue]); +} + +/** + * Transforms a Routing API quote into an array of routes that can be used to create + * a `Trade`. + */ +function computeRoutes(currencyIn, currencyOut, tradeType, quoteResult) { + if (!quoteResult || !quoteResult.route || !currencyIn || !currencyOut) + return undefined; + if (quoteResult.route.length === 0) + return []; + var parsedTokenIn = parseToken(quoteResult.route[0][0].tokenIn); + var parsedTokenOut = parseToken(quoteResult.route[0][quoteResult.route[0].length - 1].tokenOut); + if (parsedTokenIn.address !== currencyIn.wrapped.address) + return undefined; + if (parsedTokenOut.address !== currencyOut.wrapped.address) + return undefined; + var parsedCurrencyIn = currencyIn.isNative ? nativeOnChain(currencyIn.chainId) : parsedTokenIn; + var parsedCurrencyOut = currencyOut.isNative ? nativeOnChain(currencyOut.chainId) : parsedTokenOut; + try { + return quoteResult.route.map(function (route) { + if (route.length === 0) { + throw new Error('Expected route to have at least one pair or pool'); + } + var rawAmountIn = route[0].amountIn; + var rawAmountOut = route[route.length - 1].amountOut; + if (!rawAmountIn || !rawAmountOut) { + throw new Error('Expected both amountIn and amountOut to be present'); + } + return { + routev3: isV3Route(route) ? new Route$1(route.map(parsePool), parsedCurrencyIn, parsedCurrencyOut) : null, + routev2: !isV3Route(route) ? new Route$2(route.map(parsePair), parsedCurrencyIn, parsedCurrencyOut) : null, + inputAmount: CurrencyAmount.fromRawAmount(parsedCurrencyIn, rawAmountIn), + outputAmount: CurrencyAmount.fromRawAmount(parsedCurrencyOut, rawAmountOut), + }; + }); + } + catch (e) { + // `Route` constructor may throw if inputs/outputs are temporarily out of sync + // (RTK-Query always returns the latest data which may not be the right inputs/outputs) + // This is not fatal and will fix itself in future render cycles + console.error(e); + return undefined; + } +} +function transformRoutesToTrade(route, tradeType, gasUseEstimateUSD) { + var _a, _b; + return new InterfaceTrade({ + v2Routes: (_a = route === null || route === void 0 ? void 0 : route.filter(function (r) { return r.routev2 !== null; }).map(function (_a) { + var routev2 = _a.routev2, inputAmount = _a.inputAmount, outputAmount = _a.outputAmount; + return ({ routev2: routev2, inputAmount: inputAmount, outputAmount: outputAmount }); + })) !== null && _a !== void 0 ? _a : [], + v3Routes: (_b = route === null || route === void 0 ? void 0 : route.filter(function (r) { return r.routev3 !== null; }).map(function (_a) { + var routev3 = _a.routev3, inputAmount = _a.inputAmount, outputAmount = _a.outputAmount; + return ({ routev3: routev3, inputAmount: inputAmount, outputAmount: outputAmount }); + })) !== null && _b !== void 0 ? _b : [], + tradeType: tradeType, + gasUseEstimateUSD: gasUseEstimateUSD, + }); +} +var parseToken = function (_a) { + var address = _a.address, chainId = _a.chainId, decimals = _a.decimals, symbol = _a.symbol; + return new Token(chainId, address, parseInt(decimals.toString()), symbol); +}; +var parsePool = function (_a) { + var fee = _a.fee, sqrtRatioX96 = _a.sqrtRatioX96, liquidity = _a.liquidity, tickCurrent = _a.tickCurrent, tokenIn = _a.tokenIn, tokenOut = _a.tokenOut; + return new Pool$1(parseToken(tokenIn), parseToken(tokenOut), parseInt(fee), sqrtRatioX96, liquidity, parseInt(tickCurrent)); +}; +var parsePair = function (_a) { + var reserve0 = _a.reserve0, reserve1 = _a.reserve1; + return new Pair(CurrencyAmount.fromRawAmount(parseToken(reserve0.token), reserve0.quotient), CurrencyAmount.fromRawAmount(parseToken(reserve1.token), reserve1.quotient)); +}; +function isV3Route(route) { + return route[0].type === 'v3-pool'; +} + +function useFreshData(data, dataBlockNumber, maxBlockAge) { + if (maxBlockAge === void 0) { maxBlockAge = 10; } + var localBlockNumber = useBlockNumber(); + if (!localBlockNumber) + return undefined; + if (localBlockNumber - dataBlockNumber > maxBlockAge) { + return undefined; + } + return data; +} +/** + * Returns query arguments for the Routing API query or undefined if the + * query should be skipped. + */ +function useRoutingAPIArguments(_a) { + var tokenIn = _a.tokenIn, tokenOut = _a.tokenOut, amount = _a.amount, tradeType = _a.tradeType; + var _b = __read(useClientSideRouter(), 1), clientSideRouter = _b[0]; + return useMemo(function () { + return !tokenIn || !tokenOut || !amount || tokenIn.equals(tokenOut) + ? undefined + : { + amount: amount.quotient.toString(), + tokenInAddress: tokenIn.wrapped.address, + tokenInChainId: tokenIn.wrapped.chainId, + tokenInDecimals: tokenIn.wrapped.decimals, + tokenInSymbol: tokenIn.wrapped.symbol, + tokenOutAddress: tokenOut.wrapped.address, + tokenOutChainId: tokenOut.wrapped.chainId, + tokenOutDecimals: tokenOut.wrapped.decimals, + tokenOutSymbol: tokenOut.wrapped.symbol, + useClientSideRouter: clientSideRouter, + type: (tradeType === TradeType.EXACT_INPUT ? 'exactIn' : 'exactOut'), + }; + }, [amount, clientSideRouter, tokenIn, tokenOut, tradeType]); +} +/** + * Returns the best trade by invoking the routing api or the smart order router on the client + * @param tradeType whether the swap is an exact in/out + * @param amountSpecified the exact amount to swap in/out + * @param otherCurrency the desired output/payment currency + */ +function useRoutingAPITrade(tradeType, amountSpecified, otherCurrency) { + var _a; + var _b = __read(useMemo(function () { + return tradeType === TradeType.EXACT_INPUT + ? [amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, otherCurrency] + : [otherCurrency, amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency]; + }, [amountSpecified, otherCurrency, tradeType]), 2), currencyIn = _b[0], currencyOut = _b[1]; + var queryArgs = useRoutingAPIArguments({ + tokenIn: currencyIn, + tokenOut: currencyOut, + amount: amountSpecified, + tradeType: tradeType, + }); + var _c = useGetQuoteQuery(queryArgs !== null && queryArgs !== void 0 ? queryArgs : skipToken, { + pollingInterval: ms(templateObject_1$1a || (templateObject_1$1a = __makeTemplateObject(["15s"], ["15s"]))), + refetchOnFocus: true, + }), isLoading = _c.isLoading, isError = _c.isError, data = _c.data; + var quoteResult = useFreshData(data, Number(data === null || data === void 0 ? void 0 : data.blockNumber) || 0); + var route = useMemo(function () { return computeRoutes(currencyIn, currencyOut, tradeType, quoteResult); }, [currencyIn, currencyOut, quoteResult, tradeType]); + // get USD gas cost of trade in active chains stablecoin amount + var gasUseEstimateUSD = (_a = useStablecoinAmountFromFiatValue(quoteResult === null || quoteResult === void 0 ? void 0 : quoteResult.gasUseEstimateUSD)) !== null && _a !== void 0 ? _a : null; + return useMemo(function () { + if (!currencyIn || !currencyOut) { + return { + state: TradeState.INVALID, + trade: undefined, + }; + } + if (isLoading && !quoteResult) { + // only on first hook render + return { + state: TradeState.LOADING, + trade: undefined, + }; + } + var otherAmount = tradeType === TradeType.EXACT_INPUT + ? currencyOut && quoteResult + ? CurrencyAmount.fromRawAmount(currencyOut, quoteResult.quote) + : undefined + : currencyIn && quoteResult + ? CurrencyAmount.fromRawAmount(currencyIn, quoteResult.quote) + : undefined; + if (isError || !otherAmount || !route || route.length === 0 || !queryArgs) { + return { + state: TradeState.NO_ROUTE_FOUND, + trade: undefined, + }; + } + try { + var trade = transformRoutesToTrade(route, tradeType, gasUseEstimateUSD); + return { + // always return VALID regardless of isFetching status + state: TradeState.VALID, + trade: trade, + }; + } + catch (e) { + console.debug('transformRoutesToTrade failed: ', e); + return { state: TradeState.INVALID, trade: undefined }; + } + }, [currencyIn, currencyOut, isLoading, quoteResult, tradeType, isError, route, queryArgs, gasUseEstimateUSD]); +} +var templateObject_1$1a; + +var AUTO_ROUTER_SUPPORTED_CHAINS = Object.values(ChainId); + +function useAutoRouterSupported() { + var chainId = useActiveWeb3React().chainId; + return Boolean(chainId && AUTO_ROUTER_SUPPORTED_CHAINS.includes(chainId)); +} + +/** + * Returns the best v2+v3 trade for a desired swap. + * @param tradeType whether the swap is an exact in/out + * @param amountSpecified the exact amount to swap in/out + * @param otherCurrency the desired output/payment currency + */ +function useBestTrade(tradeType, amountSpecified, otherCurrency) { + var autoRouterSupported = useAutoRouterSupported(); + var isWindowVisible = useIsWindowVisible(); + var _a = __read(useDebounce(useMemo(function () { return [amountSpecified, otherCurrency]; }, [amountSpecified, otherCurrency]), 200), 2), debouncedAmount = _a[0], debouncedOtherCurrency = _a[1]; + var routingAPITrade = useRoutingAPITrade(tradeType, autoRouterSupported && isWindowVisible ? debouncedAmount : undefined, debouncedOtherCurrency); + var isLoading = amountSpecified !== undefined && debouncedAmount === undefined; + // consider trade debouncing when inputs/outputs do not match + var debouncing = routingAPITrade.trade && + amountSpecified && + (tradeType === TradeType.EXACT_INPUT + ? !routingAPITrade.trade.inputAmount.equalTo(amountSpecified) || + !amountSpecified.currency.equals(routingAPITrade.trade.inputAmount.currency) || + !(debouncedOtherCurrency === null || debouncedOtherCurrency === void 0 ? void 0 : debouncedOtherCurrency.equals(routingAPITrade.trade.outputAmount.currency)) + : !routingAPITrade.trade.outputAmount.equalTo(amountSpecified) || + !amountSpecified.currency.equals(routingAPITrade.trade.outputAmount.currency) || + !(debouncedOtherCurrency === null || debouncedOtherCurrency === void 0 ? void 0 : debouncedOtherCurrency.equals(routingAPITrade.trade.inputAmount.currency))); + var useFallback = !autoRouterSupported || (!debouncing && routingAPITrade.state === TradeState.NO_ROUTE_FOUND); + // only use client side router if routing api trade failed or is not supported + var bestV3Trade = useClientSideV3Trade(tradeType, useFallback ? debouncedAmount : undefined, useFallback ? debouncedOtherCurrency : undefined); + // only return gas estimate from api if routing api trade is used + return useMemo(function () { return (__assign(__assign(__assign({}, (useFallback ? bestV3Trade : routingAPITrade)), (debouncing ? { state: TradeState.SYNCING } : {})), (isLoading ? { state: TradeState.LOADING } : {}))); }, [bestV3Trade, debouncing, isLoading, routingAPITrade, useFallback]); +} + +// gets the current timestamp from the blockchain +function useCurrentBlockTimestamp() { + var _a, _b; + var multicall = useInterfaceMulticall(); + return (_b = (_a = useSingleCallResult(multicall, 'getCurrentBlockTimestamp')) === null || _a === void 0 ? void 0 : _a.result) === null || _b === void 0 ? void 0 : _b[0]; +} + +new Interface(abi$6); +({ + 1: [ + { + tokens: [WRAPPED_NATIVE_CURRENCY[1], DAI], + stakingRewardAddress: '0xa1484C3aa22a66C62b77E0AE78E15258bd0cB711', + }, + { + tokens: [WRAPPED_NATIVE_CURRENCY[1], USDC], + stakingRewardAddress: '0x7FBa4B8Dc5E7616e59622806932DBea72537A56b', + }, + { + tokens: [WRAPPED_NATIVE_CURRENCY[1], USDT], + stakingRewardAddress: '0x6C3e4cb2E96B01F4b866965A91ed4437839A121a', + }, + { + tokens: [WRAPPED_NATIVE_CURRENCY[1], WBTC], + stakingRewardAddress: '0xCA35e32e7926b96A9988f61d510E038108d8068e', + }, + ], +}); + +// mimics useAllBalances +function useAllTokenBalances() { + var account = useActiveWeb3React().account; + var allTokens = useAllTokens(); + var allTokensArray = useMemo(function () { return Object.values(allTokens !== null && allTokens !== void 0 ? allTokens : {}); }, [allTokens]); + var balances = useTokenBalances(account !== null && account !== void 0 ? account : undefined, allTokensArray); + return balances !== null && balances !== void 0 ? balances : {}; +} + +function useSwapState() { + return useAppSelector(function (state) { return state.swap; }); +} +function useSwapActionHandlers() { + var dispatch = useAppDispatch(); + var onCurrencySelection = useCallback(function (field, currency) { + dispatch(selectCurrency({ + field: field, + currencyId: currency.isToken ? currency.address : currency.isNative ? 'ETH' : '', + })); + }, [dispatch]); + var onSwitchTokens = useCallback(function () { + dispatch(switchCurrencies()); + }, [dispatch]); + var onUserInput = useCallback(function (field, typedValue) { + dispatch(typeInput({ field: field, typedValue: typedValue })); + }, [dispatch]); + var onChangeRecipient = useCallback(function (recipient) { + dispatch(setRecipient({ recipient: recipient })); + }, [dispatch]); + return { + onSwitchTokens: onSwitchTokens, + onCurrencySelection: onCurrencySelection, + onUserInput: onUserInput, + onChangeRecipient: onChangeRecipient, + }; +} +var BAD_RECIPIENT_ADDRESSES = { + '0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f': true, + '0xf164fC0Ec4E93095b804a4795bBe1e041497b92a': true, + '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D': true, // v2 router 02 +}; +// from the current swap inputs, compute the best trade and return it. +function useDerivedSwapInfo() { + var _a, _b; + var account = useActiveWeb3React().account; + var _c = useSwapState(), independentField = _c.independentField, typedValue = _c.typedValue, _d = Field.INPUT, inputCurrencyId = _c[_d].currencyId, _e = Field.OUTPUT, outputCurrencyId = _c[_e].currencyId, recipient = _c.recipient; + var inputCurrency = useCurrency(inputCurrencyId); + var outputCurrency = useCurrency(outputCurrencyId); + var recipientLookup = useENS(recipient !== null && recipient !== void 0 ? recipient : undefined); + var to = (_a = (recipient === null ? account : recipientLookup.address)) !== null && _a !== void 0 ? _a : null; + var relevantTokenBalances = useCurrencyBalances(account !== null && account !== void 0 ? account : undefined, useMemo(function () { return [inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : undefined, outputCurrency !== null && outputCurrency !== void 0 ? outputCurrency : undefined]; }, [inputCurrency, outputCurrency])); + var isExactIn = independentField === Field.INPUT; + var parsedAmount = useMemo(function () { var _a; return tryParseCurrencyAmount(typedValue, (_a = (isExactIn ? inputCurrency : outputCurrency)) !== null && _a !== void 0 ? _a : undefined); }, [inputCurrency, isExactIn, outputCurrency, typedValue]); + var trade = useBestTrade(isExactIn ? TradeType.EXACT_INPUT : TradeType.EXACT_OUTPUT, parsedAmount, (_b = (isExactIn ? outputCurrency : inputCurrency)) !== null && _b !== void 0 ? _b : undefined); + var currencyBalances = useMemo(function () { + var _a; + return (_a = {}, + _a[Field.INPUT] = relevantTokenBalances[0], + _a[Field.OUTPUT] = relevantTokenBalances[1], + _a); + }, [relevantTokenBalances]); + var currencies = useMemo(function () { + var _a; + return (_a = {}, + _a[Field.INPUT] = inputCurrency, + _a[Field.OUTPUT] = outputCurrency, + _a); + }, [inputCurrency, outputCurrency]); + // allowed slippage is either auto slippage, or custom user defined slippage if auto slippage disabled + var autoSlippageTolerance = useAutoSlippageTolerance(trade.trade); + var allowedSlippage = useUserSlippageToleranceWithDefault(autoSlippageTolerance); + var inputError = useMemo(function () { + var _a; + var inputError; + if (!account) { + inputError = jsx(Trans, { children: "Connect Wallet" }, void 0); + } + if (!currencies[Field.INPUT] || !currencies[Field.OUTPUT]) { + inputError = inputError !== null && inputError !== void 0 ? inputError : jsx(Trans, { children: "Select a token" }, void 0); + } + if (!parsedAmount) { + inputError = inputError !== null && inputError !== void 0 ? inputError : jsx(Trans, { children: "Enter an amount" }, void 0); + } + var formattedTo = isAddress(to); + if (!to || !formattedTo) { + inputError = inputError !== null && inputError !== void 0 ? inputError : jsx(Trans, { children: "Enter a recipient" }, void 0); + } + else { + if (BAD_RECIPIENT_ADDRESSES[formattedTo]) { + inputError = inputError !== null && inputError !== void 0 ? inputError : jsx(Trans, { children: "Invalid recipient" }, void 0); + } + } + // compare input balance to max input based on version + var _b = __read([currencyBalances[Field.INPUT], (_a = trade.trade) === null || _a === void 0 ? void 0 : _a.maximumAmountIn(allowedSlippage)], 2), balanceIn = _b[0], amountIn = _b[1]; + if (balanceIn && amountIn && balanceIn.lessThan(amountIn)) { + inputError = jsxs(Trans, { children: ["Insufficient ", amountIn.currency.symbol, " balance"] }, void 0); + } + return inputError; + }, [account, allowedSlippage, currencies, currencyBalances, parsedAmount, to, trade.trade]); + return useMemo(function () { return ({ + currencies: currencies, + currencyBalances: currencyBalances, + parsedAmount: parsedAmount, + inputError: inputError, + trade: trade, + allowedSlippage: allowedSlippage, + }); }, [allowedSlippage, currencies, currencyBalances, inputError, parsedAmount, trade]); +} +function parseCurrencyFromURLParameter(urlParam) { + if (typeof urlParam === 'string') { + var valid = isAddress(urlParam); + if (valid) + return valid; + if (urlParam.toUpperCase() === 'ETH') + return 'ETH'; + } + return ''; +} +function parseTokenAmountURLParameter(urlParam) { + return typeof urlParam === 'string' && !isNaN(parseFloat(urlParam)) ? urlParam : ''; +} +function parseIndependentFieldURLParameter(urlParam) { + return typeof urlParam === 'string' && urlParam.toLowerCase() === 'output' ? Field.OUTPUT : Field.INPUT; +} +var ENS_NAME_REGEX = /^[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)?$/; +var ADDRESS_REGEX = /^0x[a-fA-F0-9]{40}$/; +function validatedRecipient(recipient) { + if (typeof recipient !== 'string') + return null; + var address = isAddress(recipient); + if (address) + return address; + if (ENS_NAME_REGEX.test(recipient)) + return recipient; + if (ADDRESS_REGEX.test(recipient)) + return recipient; + return null; +} +function queryParametersToSwapState(parsedQs) { + var _a; + var inputCurrency = parseCurrencyFromURLParameter(parsedQs.inputCurrency); + var outputCurrency = parseCurrencyFromURLParameter(parsedQs.outputCurrency); + if (inputCurrency === '' && outputCurrency === '') { + // default to ETH input + inputCurrency = 'ETH'; + } + else if (inputCurrency === outputCurrency) { + // clear output if identical + outputCurrency = ''; + } + var recipient = validatedRecipient(parsedQs.recipient); + return _a = {}, + _a[Field.INPUT] = { + currencyId: inputCurrency === '' ? null : inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : null, + }, + _a[Field.OUTPUT] = { + currencyId: outputCurrency === '' ? null : outputCurrency !== null && outputCurrency !== void 0 ? outputCurrency : null, + }, + _a.typedValue = parseTokenAmountURLParameter(parsedQs.exactAmount), + _a.independentField = parseIndependentFieldURLParameter(parsedQs.exactField), + _a.recipient = recipient, + _a; +} +// updates the swap state to use the defaults for a given network +function useDefaultsFromURLSearch() { + var chainId = useActiveWeb3React().chainId; + var dispatch = useAppDispatch(); + var parsedQs = useParsedQueryString(); + var _a = __read(useState(), 2), result = _a[0], setResult = _a[1]; + useEffect(function () { + var _a, _b; + if (!chainId) + return; + var parsed = queryParametersToSwapState(parsedQs); + var inputCurrencyId = (_a = parsed[Field.INPUT].currencyId) !== null && _a !== void 0 ? _a : undefined; + var outputCurrencyId = (_b = parsed[Field.OUTPUT].currencyId) !== null && _b !== void 0 ? _b : undefined; + dispatch(replaceSwapState({ + typedValue: parsed.typedValue, + field: parsed.independentField, + inputCurrencyId: inputCurrencyId, + outputCurrencyId: outputCurrencyId, + recipient: parsed.recipient, + })); + setResult({ inputCurrencyId: inputCurrencyId, outputCurrencyId: outputCurrencyId }); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [dispatch, chainId]); + return result; +} + +var initialState$2 = queryParametersToSwapState(parsedQueryString()); +var swap = createReducer(initialState$2, function (builder) { + return builder + .addCase(replaceSwapState, function (state, _a) { + var _b; + var _c = _a.payload, typedValue = _c.typedValue, recipient = _c.recipient, field = _c.field, inputCurrencyId = _c.inputCurrencyId, outputCurrencyId = _c.outputCurrencyId; + return _b = {}, + _b[Field.INPUT] = { + currencyId: inputCurrencyId !== null && inputCurrencyId !== void 0 ? inputCurrencyId : null, + }, + _b[Field.OUTPUT] = { + currencyId: outputCurrencyId !== null && outputCurrencyId !== void 0 ? outputCurrencyId : null, + }, + _b.independentField = field, + _b.typedValue = typedValue, + _b.recipient = recipient, + _b; + }) + .addCase(selectCurrency, function (state, _a) { + var _b, _c; + var _d = _a.payload, currencyId = _d.currencyId, field = _d.field; + var otherField = field === Field.INPUT ? Field.OUTPUT : Field.INPUT; + if (currencyId === state[otherField].currencyId) { + // the case where we have to swap the order + return __assign(__assign({}, state), (_b = { independentField: state.independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT }, _b[field] = { currencyId: currencyId }, _b[otherField] = { currencyId: state[field].currencyId }, _b)); + } + else { + // the normal case + return __assign(__assign({}, state), (_c = {}, _c[field] = { currencyId: currencyId }, _c)); + } + }) + .addCase(switchCurrencies, function (state) { + var _a; + return __assign(__assign({}, state), (_a = { independentField: state.independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT }, _a[Field.INPUT] = { currencyId: state[Field.OUTPUT].currencyId }, _a[Field.OUTPUT] = { currencyId: state[Field.INPUT].currencyId }, _a)); + }) + .addCase(typeInput, function (state, _a) { + var _b = _a.payload, field = _b.field, typedValue = _b.typedValue; + return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); + }) + .addCase(setRecipient, function (state, _a) { + var recipient = _a.payload.recipient; + state.recipient = recipient; + }); +}); + +var now = function () { return new Date().getTime(); }; +var initialState$1 = {}; +var transactions = createReducer(initialState$1, function (builder) { + return builder + .addCase(updateVersion, function (transactions) { + // in case there are any transactions in the store with the old format, remove them + Object.keys(transactions).forEach(function (chainId) { + var chainTransactions = transactions[chainId]; + Object.keys(chainTransactions).forEach(function (hash) { + if (!('info' in chainTransactions[hash])) { + // clear old transactions that don't have the right format + delete chainTransactions[hash]; + } + }); + }); + }) + .addCase(addTransaction, function (transactions, _a) { + var _b, _c; + var _d = _a.payload, chainId = _d.chainId, from = _d.from, hash = _d.hash, info = _d.info; + if ((_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash]) { + throw Error('Attempted to add existing transaction.'); + } + var txs = (_c = transactions[chainId]) !== null && _c !== void 0 ? _c : {}; + txs[hash] = { hash: hash, info: info, from: from, addedTime: now() }; + transactions[chainId] = txs; + }) + .addCase(clearAllTransactions, function (transactions, _a) { + var chainId = _a.payload.chainId; + if (!transactions[chainId]) + return; + transactions[chainId] = {}; + }) + .addCase(checkedTransaction, function (transactions, _a) { + var _b; + var _c = _a.payload, chainId = _c.chainId, hash = _c.hash, blockNumber = _c.blockNumber; + var tx = (_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash]; + if (!tx) { + return; + } + if (!tx.lastCheckedBlockNumber) { + tx.lastCheckedBlockNumber = blockNumber; + } + else { + tx.lastCheckedBlockNumber = Math.max(blockNumber, tx.lastCheckedBlockNumber); + } + }) + .addCase(finalizeTransaction, function (transactions, _a) { + var _b; + var _c = _a.payload, hash = _c.hash, chainId = _c.chainId, receipt = _c.receipt; + var tx = (_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash]; + if (!tx) { + return; + } + tx.receipt = receipt; + tx.confirmedTime = now(); + }); +}); + +var currentTimestamp = function () { return new Date().getTime(); }; +function pairKey(token0Address, token1Address) { + return token0Address + ";" + token1Address; +} +var initialState = { + matchesDarkMode: false, + userDarkMode: null, + userExpertMode: false, + userLocale: null, + userClientSideRouter: false, + userHideClosedPositions: false, + userSlippageTolerance: 'auto', + userSlippageToleranceHasBeenMigratedToAuto: true, + userDeadline: DEFAULT_DEADLINE_FROM_NOW, + tokens: {}, + pairs: {}, + timestamp: currentTimestamp(), + URLWarningVisible: true, + showSurveyPopup: undefined, +}; +var user = createReducer(initialState, function (builder) { + return builder + .addCase(updateVersion, function (state) { + // slippage isnt being tracked in local storage, reset to default + // noinspection SuspiciousTypeOfGuard + if (typeof state.userSlippageTolerance !== 'number' || + !Number.isInteger(state.userSlippageTolerance) || + state.userSlippageTolerance < 0 || + state.userSlippageTolerance > 5000) { + state.userSlippageTolerance = 'auto'; + } + else { + if (!state.userSlippageToleranceHasBeenMigratedToAuto && + [10, 50, 100].indexOf(state.userSlippageTolerance) !== -1) { + state.userSlippageTolerance = 'auto'; + state.userSlippageToleranceHasBeenMigratedToAuto = true; + } + } + // deadline isnt being tracked in local storage, reset to default + // noinspection SuspiciousTypeOfGuard + if (typeof state.userDeadline !== 'number' || + !Number.isInteger(state.userDeadline) || + state.userDeadline < 60 || + state.userDeadline > 180 * 60) { + state.userDeadline = DEFAULT_DEADLINE_FROM_NOW; + } + state.lastUpdateVersionTimestamp = currentTimestamp(); + }) + .addCase(updateUserDarkMode, function (state, action) { + state.userDarkMode = action.payload.userDarkMode; + state.timestamp = currentTimestamp(); + }) + .addCase(updateMatchesDarkMode, function (state, action) { + state.matchesDarkMode = action.payload.matchesDarkMode; + state.timestamp = currentTimestamp(); + }) + .addCase(updateUserExpertMode, function (state, action) { + state.userExpertMode = action.payload.userExpertMode; + state.timestamp = currentTimestamp(); + }) + .addCase(updateUserLocale, function (state, action) { + state.userLocale = action.payload.userLocale; + state.timestamp = currentTimestamp(); + }) + .addCase(updateUserSlippageTolerance, function (state, action) { + state.userSlippageTolerance = action.payload.userSlippageTolerance; + state.timestamp = currentTimestamp(); + }) + .addCase(updateUserDeadline, function (state, action) { + state.userDeadline = action.payload.userDeadline; + state.timestamp = currentTimestamp(); + }) + .addCase(updateUserClientSideRouter, function (state, action) { + state.userClientSideRouter = action.payload.userClientSideRouter; + }) + .addCase(updateHideClosedPositions, function (state, action) { + state.userHideClosedPositions = action.payload.userHideClosedPositions; + }) + .addCase(updateShowSurveyPopup, function (state, action) { + state.showSurveyPopup = action.payload.showSurveyPopup; + }) + .addCase(addSerializedToken, function (state, _a) { + var serializedToken = _a.payload.serializedToken; + if (!state.tokens) { + state.tokens = {}; + } + state.tokens[serializedToken.chainId] = state.tokens[serializedToken.chainId] || {}; + state.tokens[serializedToken.chainId][serializedToken.address] = serializedToken; + state.timestamp = currentTimestamp(); + }) + .addCase(removeSerializedToken, function (state, _a) { + var _b = _a.payload, address = _b.address, chainId = _b.chainId; + if (!state.tokens) { + state.tokens = {}; + } + state.tokens[chainId] = state.tokens[chainId] || {}; + delete state.tokens[chainId][address]; + state.timestamp = currentTimestamp(); + }) + .addCase(addSerializedPair, function (state, _a) { + var serializedPair = _a.payload.serializedPair; + if (serializedPair.token0.chainId === serializedPair.token1.chainId && + serializedPair.token0.address !== serializedPair.token1.address) { + var chainId = serializedPair.token0.chainId; + state.pairs[chainId] = state.pairs[chainId] || {}; + state.pairs[chainId][pairKey(serializedPair.token0.address, serializedPair.token1.address)] = serializedPair; + } + state.timestamp = currentTimestamp(); + }) + .addCase(removeSerializedPair, function (state, _a) { + var _b = _a.payload, chainId = _b.chainId, tokenAAddress = _b.tokenAAddress, tokenBAddress = _b.tokenBAddress; + if (state.pairs[chainId]) { + // just delete both keys if either exists + delete state.pairs[chainId][pairKey(tokenAAddress, tokenBAddress)]; + delete state.pairs[chainId][pairKey(tokenBAddress, tokenAAddress)]; + } + state.timestamp = currentTimestamp(); + }); +}); + +var _a$5; +var PERSISTED_KEYS = ['user', 'transactions', 'lists']; +var store = configureStore({ + reducer: (_a$5 = { + application: application, + user: user, + transactions: transactions, + swap: swap, + mint: mint, + mintV3: mintV3, + burn: burn, + burnV3: burnV3, + multicall: multicall.reducer, + lists: lists, + logs: logs + }, + _a$5[api$1.reducerPath] = api$1.reducer, + _a$5[routingApi.reducerPath] = routingApi.reducer, + _a$5), + middleware: function (getDefaultMiddleware) { + return getDefaultMiddleware({ thunk: true }) + .concat(api$1.middleware) + .concat(routingApi.middleware) + .concat(save({ states: PERSISTED_KEYS, debounce: 1000 })); + }, + preloadedState: load({ states: PERSISTED_KEYS, disableWarnings: process.env.NODE_ENV === 'test' }), +}); +store.dispatch(updateVersion()); +setupListeners(store.dispatch); + +var FallbackWrapper = styled.div(templateObject_1$19 || (templateObject_1$19 = __makeTemplateObject(["\n display: flex;\n flex-direction: column;\n width: 100%;\n align-items: center;\n z-index: 1;\n"], ["\n display: flex;\n flex-direction: column;\n width: 100%;\n align-items: center;\n z-index: 1;\n"]))); +var BodyWrapper$2 = styled.div(templateObject_2$R || (templateObject_2$R = __makeTemplateObject(["\n padding: 1rem;\n width: 100%;\n white-space: ;\n"], ["\n padding: 1rem;\n width: 100%;\n white-space: ;\n"]))); +var CodeBlockWrapper = styled.div(templateObject_3$J || (templateObject_3$J = __makeTemplateObject(["\n background: ", ";\n overflow: auto;\n white-space: pre;\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 border-radius: 24px;\n padding: 18px 24px;\n color: ", ";\n"], ["\n background: ", ";\n overflow: auto;\n white-space: pre;\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 border-radius: 24px;\n padding: 18px 24px;\n color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg0; +}, function (_a) { + var theme = _a.theme; + return theme.text1; +}); +var LinkWrapper = styled.div(templateObject_4$y || (templateObject_4$y = __makeTemplateObject(["\n color: ", ";\n padding: 6px 24px;\n"], ["\n color: ", ";\n padding: 6px 24px;\n"])), function (_a) { + var theme = _a.theme; + return theme.blue1; +}); +var SomethingWentWrongWrapper = styled.div(templateObject_5$q || (templateObject_5$q = __makeTemplateObject(["\n padding: 6px 24px;\n"], ["\n padding: 6px 24px;\n"]))); +var IS_UNISWAP = window.location.hostname === 'app.uniswap.org'; +var ErrorBoundary = /** @class */ (function (_super) { + __extends(ErrorBoundary, _super); + function ErrorBoundary(props) { + var _this = _super.call(this, props) || this; + _this.state = { error: null }; + return _this; + } + ErrorBoundary.getDerivedStateFromError = function (error) { + return { error: error }; + }; + ErrorBoundary.prototype.componentDidCatch = function (error, errorInfo) { + ReactGA.exception(__assign(__assign(__assign({}, error), errorInfo), { fatal: true })); + }; + ErrorBoundary.prototype.render = function () { + var error = this.state.error; + if (error !== null) { + var encodedBody = encodeURIComponent(issueBody(error)); + return (jsx(FallbackWrapper, { children: jsx(BodyWrapper$2, { children: jsxs(AutoColumn, __assign({ gap: 'md' }, { children: [jsx(SomethingWentWrongWrapper, { children: jsx(ThemedText.Label, __assign({ fontSize: 24, fontWeight: 600 }, { children: jsx(Trans, { children: "Something went wrong" }, void 0) }), void 0) }, void 0), jsx(CodeBlockWrapper, { children: jsx("code", { children: jsx(ThemedText.Main, __assign({ fontSize: 10 }, { children: error.stack }), void 0) }, void 0) }, void 0), IS_UNISWAP ? (jsxs(AutoRow, { children: [jsx(LinkWrapper, { children: jsx(ExternalLink, __assign({ id: "create-github-issue-link", href: "https://github.com/Uniswap/uniswap-interface/issues/new?assignees=&labels=bug&body=" + encodedBody + "&title=" + encodeURIComponent("Crash report: `" + error.name + (error.message && ": " + error.message) + "`"), target: "_blank" }, { children: jsxs(ThemedText.Link, __assign({ fontSize: 16 }, { children: [jsx(Trans, { children: "Create an issue on GitHub" }, void 0), jsx("span", { children: "\u2197" }, void 0)] }), void 0) }), void 0) }, void 0), jsx(LinkWrapper, { children: jsx(ExternalLink, __assign({ id: "get-support-on-discord", href: "https://discord.gg/FCfyBSbCU5", target: "_blank" }, { children: jsxs(ThemedText.Link, __assign({ fontSize: 16 }, { children: [jsx(Trans, { children: "Get support on Discord" }, void 0), jsx("span", { children: "\u2197" }, void 0)] }), void 0) }), void 0) }, void 0)] }, void 0)) : null] }), void 0) }, void 0) }, void 0)); + } + return this.props.children; + }; + return ErrorBoundary; +}(React__default.Component)); +function getRelevantState() { + var path = window.location.hash; + if (!path.startsWith('#/')) { + return null; + } + var pieces = path.substring(2).split(/[/\\?]/); + switch (pieces[0]) { + case 'swap': + return 'swap'; + case 'add': + if (pieces[1] === 'v2') + return 'mint'; + else + return 'mintV3'; + case 'remove': + if (pieces[1] === 'v2') + return 'burn'; + else + return 'burnV3'; + } + return null; +} +function issueBody(error) { + var relevantState = getRelevantState(); + var deviceData = userAgent; + return "## URL\n \n" + window.location.href + "\n\n" + (relevantState + ? "## `" + relevantState + "` state\n \n```json\n" + JSON.stringify(store.getState()[relevantState], null, 2) + "\n```\n" + : '') + "\n" + (error.name && + "## Error\n\n```\n" + error.name + (error.message && ": " + error.message) + "\n```\n") + "\n" + (error.stack && + "## Stacktrace\n\n```\n" + error.stack + "\n```\n") + "\n" + (deviceData && + "## Device data\n\n```json\n" + JSON.stringify(deviceData, null, 2) + "\n```\n") + "\n"; +} +var templateObject_1$19, templateObject_2$R, templateObject_3$J, templateObject_4$y, templateObject_5$q; + +function useModalOpen(modal) { + var openModal = useAppSelector(function (state) { return state.application.openModal; }); + return openModal === modal; +} +function useToggleModal(modal) { + var open = useModalOpen(modal); + var dispatch = useAppDispatch(); + return useCallback(function () { return dispatch(setOpenModal(open ? null : modal)); }, [dispatch, modal, open]); +} +function useWalletModalToggle() { + return useToggleModal(ApplicationModal.WALLET); +} +function useToggleSettingsMenu() { + return useToggleModal(ApplicationModal.SETTINGS); +} +function useShowClaimPopup() { + return useModalOpen(ApplicationModal.CLAIM_POPUP); +} +function useToggleShowClaimPopup() { + return useToggleModal(ApplicationModal.CLAIM_POPUP); +} +function useToggleSelfClaimModal() { + return useToggleModal(ApplicationModal.SELF_CLAIM); +} +function useTogglePrivacyPolicy() { + return useToggleModal(ApplicationModal.PRIVACY_POLICY); +} +// returns a function that allows adding a popup +function useAddPopup() { + var dispatch = useAppDispatch(); + return useCallback(function (content, key, removeAfterMs) { + dispatch(addPopup({ content: content, key: key, removeAfterMs: removeAfterMs !== null && removeAfterMs !== void 0 ? removeAfterMs : DEFAULT_TXN_DISMISS_MS })); + }, [dispatch]); +} +// returns a function that allows removing a popup via its key +function useRemovePopup() { + var dispatch = useAppDispatch(); + return useCallback(function (key) { + dispatch(removePopup({ key: key })); + }, [dispatch]); +} +// get the list of active popups +function useActivePopups() { + var list = useAppSelector(function (state) { return state.application.popupList; }); + return useMemo(function () { return list.filter(function (item) { return item.show; }); }, [list]); +} + +var _path$5, _path2$2, _path3$1, _path4, _path5, _path6, _path7, _path8, _path9; + +function _extends$7() { _extends$7 = 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$7.apply(this, arguments); } + +const SvgLogo = props => /*#__PURE__*/React.createElement("svg", _extends$7({ + width: 14, + height: 15, + viewBox: "0 0 14 15", + fill: "black", + xmlns: "http://www.w3.org/2000/svg" +}, props), /*#__PURE__*/React.createElement("g", { + style: { + mixBlendMode: "darken" + } +}, _path$5 || (_path$5 = /*#__PURE__*/React.createElement("path", { + d: "M4.15217 1.55141C3.96412 1.52242 3.95619 1.51902 4.04468 1.5055C4.21427 1.47958 4.61472 1.51491 4.89067 1.58012C5.53489 1.73232 6.12109 2.12221 6.74683 2.81466L6.91307 2.99862L7.15088 2.96062C8.15274 2.8006 9.17194 2.92778 10.0244 3.31918C10.2589 3.42686 10.6287 3.64121 10.6749 3.69629C10.6896 3.71384 10.7166 3.82684 10.7349 3.94742C10.7982 4.36458 10.7665 4.68434 10.6382 4.92317C10.5683 5.05313 10.5644 5.09432 10.6114 5.20554C10.6489 5.2943 10.7534 5.35999 10.8569 5.35985C11.0687 5.35956 11.2968 5.0192 11.4024 4.54561L11.4444 4.3575L11.5275 4.45109C11.9835 4.96459 12.3417 5.66488 12.4032 6.16335L12.4192 6.29332L12.3426 6.17517C12.2107 5.97186 12.0781 5.83346 11.9084 5.72183C11.6024 5.52062 11.2789 5.45215 10.4222 5.40727C9.64839 5.36675 9.21045 5.30106 8.77621 5.16032C8.03738 4.9209 7.66493 4.60204 6.78729 3.4576C6.39748 2.94928 6.15654 2.66804 5.91687 2.44155C5.37228 1.92691 4.83716 1.65701 4.15217 1.55141Z" +})), _path2$2 || (_path2$2 = /*#__PURE__*/React.createElement("path", { + d: "M10.8494 2.68637C10.8689 2.34575 10.9153 2.12108 11.0088 1.9159C11.0458 1.83469 11.0804 1.76822 11.0858 1.76822C11.0911 1.76822 11.075 1.82816 11.05 1.90142C10.9821 2.10054 10.9709 2.3729 11.0177 2.68978C11.0771 3.09184 11.1109 3.14985 11.5385 3.58416C11.739 3.78788 11.9723 4.0448 12.0568 4.15511L12.2106 4.35568L12.0568 4.21234C11.8688 4.03705 11.4364 3.6952 11.3409 3.64633C11.2768 3.61356 11.2673 3.61413 11.2278 3.65321C11.1914 3.68922 11.1837 3.74333 11.1787 3.99915C11.1708 4.39786 11.1161 4.65377 10.9842 4.90965C10.9128 5.04805 10.9015 5.01851 10.9661 4.8623C11.0143 4.74566 11.0192 4.69439 11.0189 4.30842C11.0181 3.53291 10.9255 3.34647 10.3823 3.02709C10.2447 2.94618 10.0179 2.8295 9.87839 2.76778C9.73887 2.70606 9.62805 2.6523 9.63208 2.64828C9.64746 2.63307 10.1772 2.78675 10.3905 2.86828C10.7077 2.98954 10.76 3.00526 10.7985 2.99063C10.8244 2.98082 10.8369 2.90608 10.8494 2.68637Z" +})), _path3$1 || (_path3$1 = /*#__PURE__*/React.createElement("path", { + d: "M4.51745 4.01304C4.13569 3.49066 3.89948 2.68973 3.95062 2.091L3.96643 1.90572L4.05333 1.92148C4.21652 1.95106 4.49789 2.05515 4.62964 2.13469C4.9912 2.35293 5.14773 2.64027 5.30697 3.37811C5.35362 3.59423 5.41482 3.8388 5.44298 3.9216C5.48831 4.05487 5.65962 4.36617 5.7989 4.56834C5.89922 4.71395 5.83258 4.78295 5.61082 4.76305C5.27215 4.73267 4.8134 4.41799 4.51745 4.01304Z" +})), _path4 || (_path4 = /*#__PURE__*/React.createElement("path", { + d: "M10.3863 7.90088C8.60224 7.18693 7.97389 6.56721 7.97389 5.52157C7.97389 5.36769 7.97922 5.24179 7.98571 5.24179C7.99221 5.24179 8.06124 5.29257 8.1391 5.35465C8.50088 5.64305 8.906 5.76623 10.0275 5.92885C10.6875 6.02455 11.0589 6.10185 11.4015 6.21477C12.4904 6.57371 13.1641 7.30212 13.3248 8.29426C13.3715 8.58255 13.3441 9.12317 13.2684 9.4081C13.2087 9.63315 13.0263 10.0388 12.9779 10.0544C12.9645 10.0587 12.9514 10.0076 12.9479 9.93809C12.9296 9.56554 12.7402 9.20285 12.4221 8.93116C12.0604 8.62227 11.5745 8.37633 10.3863 7.90088Z" +})), _path5 || (_path5 = /*#__PURE__*/React.createElement("path", { + d: "M9.13385 8.19748C9.11149 8.06527 9.07272 7.89643 9.04769 7.82228L9.00217 7.68748L9.08672 7.7818C9.20374 7.91233 9.2962 8.07937 9.37457 8.30185C9.43438 8.47165 9.44111 8.52215 9.44066 8.79807C9.4402 9.06896 9.43273 9.12575 9.3775 9.27858C9.29042 9.51959 9.18233 9.69048 9.00097 9.87391C8.67507 10.2036 8.25607 10.3861 7.65143 10.4618C7.54633 10.4749 7.24 10.4971 6.97069 10.511C6.292 10.5461 5.84531 10.6186 5.44393 10.7587C5.38623 10.7788 5.3347 10.7911 5.32947 10.7859C5.31323 10.7698 5.58651 10.6079 5.81223 10.4998C6.1305 10.3474 6.44733 10.2643 7.15719 10.1468C7.50785 10.0887 7.86998 10.0183 7.96194 9.99029C8.83033 9.72566 9.27671 9.04276 9.13385 8.19748Z" +})), _path6 || (_path6 = /*#__PURE__*/React.createElement("path", { + d: "M9.95169 9.64109C9.71465 9.13463 9.66022 8.64564 9.79009 8.18961C9.80399 8.14088 9.82632 8.101 9.83976 8.101C9.85319 8.101 9.90913 8.13105 9.96404 8.16777C10.0733 8.24086 10.2924 8.36395 10.876 8.68023C11.6043 9.0749 12.0196 9.3805 12.302 9.72965C12.5493 10.0354 12.7023 10.3837 12.776 10.8084C12.8177 11.0489 12.7932 11.6277 12.7311 11.8699C12.5353 12.6337 12.0802 13.2336 11.4311 13.5837C11.336 13.635 11.2506 13.6771 11.2414 13.6773C11.2321 13.6775 11.2668 13.5899 11.3184 13.4827C11.5367 13.029 11.5616 12.5877 11.3965 12.0965C11.2954 11.7957 11.0893 11.4287 10.6732 10.8084C10.1893 10.0873 10.0707 9.89539 9.95169 9.64109Z" +})), _path7 || (_path7 = /*#__PURE__*/React.createElement("path", { + d: "M3.25046 12.3737C3.91252 11.8181 4.73629 11.4234 5.48666 11.3022C5.81005 11.25 6.34877 11.2707 6.64823 11.3469C7.12824 11.469 7.55763 11.7425 7.78094 12.0683C7.99918 12.3867 8.09281 12.6642 8.19029 13.2816C8.22875 13.5252 8.27057 13.7697 8.28323 13.8251C8.35644 14.1451 8.4989 14.4008 8.67544 14.5293C8.95583 14.7333 9.43865 14.7459 9.91362 14.5618C9.99423 14.5305 10.0642 14.5089 10.0691 14.5138C10.0864 14.5308 9.84719 14.6899 9.67847 14.7737C9.45143 14.8864 9.2709 14.93 9.03102 14.93C8.59601 14.93 8.23486 14.7101 7.9335 14.2616C7.87419 14.1733 7.7409 13.909 7.63729 13.6741C7.3191 12.9528 7.16199 12.7331 6.79255 12.4926C6.47104 12.2834 6.05641 12.2459 5.74449 12.3979C5.33475 12.5976 5.22043 13.118 5.51389 13.4478C5.63053 13.5789 5.84803 13.6919 6.02588 13.7139C6.35861 13.7551 6.64455 13.5035 6.64455 13.1696C6.64455 12.9528 6.56071 12.8291 6.34966 12.7344C6.0614 12.6051 5.75156 12.7562 5.75304 13.0254C5.75368 13.1402 5.80396 13.2122 5.91971 13.2643C5.99397 13.2977 5.99569 13.3003 5.93514 13.2878C5.67066 13.2333 5.6087 12.9164 5.82135 12.706C6.07667 12.4535 6.60461 12.5649 6.78591 12.9097C6.86208 13.0545 6.87092 13.3429 6.80451 13.517C6.6559 13.9068 6.22256 14.1117 5.78297 14.0002C5.48368 13.9242 5.36181 13.842 5.00097 13.4726C4.37395 12.8306 4.13053 12.7062 3.22657 12.566L3.05335 12.5391L3.25046 12.3737Z" +})), _path8 || (_path8 = /*#__PURE__*/React.createElement("path", { + fillRule: "evenodd", + clipRule: "evenodd", + d: "M0.308383 0.883984C2.40235 3.40996 3.84457 4.45213 4.00484 4.67231C4.13717 4.85412 4.08737 5.01757 3.86067 5.14567C3.7346 5.21689 3.47541 5.28905 3.34564 5.28905C3.19887 5.28905 3.14847 5.23278 3.14847 5.23278C3.06337 5.15255 3.01544 5.16658 2.5784 4.39555C1.97166 3.45981 1.46389 2.68357 1.45004 2.67057C1.41801 2.64052 1.41856 2.64153 2.51654 4.59413C2.69394 5.0011 2.55182 5.15049 2.55182 5.20845C2.55182 5.32636 2.51946 5.38834 2.37311 5.55059C2.12914 5.8211 2.02008 6.12505 1.94135 6.7541C1.8531 7.45926 1.60492 7.95737 0.917156 8.80989C0.514562 9.30893 0.448686 9.4004 0.3471 9.60153C0.219144 9.85482 0.183961 9.99669 0.169701 10.3165C0.154629 10.6547 0.183983 10.8732 0.287934 11.1965C0.378939 11.4796 0.473932 11.6665 0.716778 12.0403C0.926351 12.3629 1.04702 12.6027 1.04702 12.6965C1.04702 12.7711 1.06136 12.7712 1.38611 12.6983C2.16328 12.5239 2.79434 12.2171 3.14925 11.8411C3.36891 11.6084 3.42048 11.4799 3.42215 11.1611C3.42325 10.9525 3.41587 10.9088 3.35914 10.7888C3.2668 10.5935 3.09869 10.4311 2.72817 10.1794C2.2427 9.84953 2.03534 9.58398 1.97807 9.21878C1.93108 8.91913 1.98559 8.70771 2.25416 8.14825C2.53214 7.56916 2.60103 7.32239 2.64763 6.73869C2.67773 6.36158 2.71941 6.21286 2.82842 6.09348C2.94212 5.969 3.04447 5.92684 3.32584 5.88863C3.78457 5.82635 4.07667 5.70839 4.31677 5.48849C4.52505 5.29772 4.61221 5.11391 4.62558 4.8372L4.63574 4.62747L4.51934 4.49259C4.09783 4.00411 0.0261003 0.5 0.000160437 0.5C-0.00538105 0.5 0.133325 0.672804 0.308383 0.883984ZM1.28364 10.6992C1.37894 10.5314 1.3283 10.3158 1.16889 10.2104C1.01827 10.1109 0.78428 10.1578 0.78428 10.2875C0.78428 10.3271 0.806303 10.3559 0.855937 10.3813C0.939514 10.424 0.945581 10.4721 0.879823 10.5703C0.81323 10.6698 0.818604 10.7573 0.894991 10.8167C1.0181 10.9125 1.19237 10.8598 1.28364 10.6992Z" +})), _path9 || (_path9 = /*#__PURE__*/React.createElement("path", { + fillRule: "evenodd", + clipRule: "evenodd", + d: "M4.92523 5.99865C4.70988 6.06439 4.50054 6.29124 4.43574 6.5291C4.39621 6.67421 4.41864 6.92875 4.47785 7.00736C4.57351 7.13433 4.66602 7.16778 4.91651 7.16603C5.40693 7.16263 5.83327 6.95358 5.88284 6.69224C5.92347 6.47801 5.73622 6.18112 5.4783 6.05078C5.34521 5.98355 5.06217 5.95688 4.92523 5.99865ZM5.49853 6.44422C5.57416 6.33741 5.54107 6.22198 5.41245 6.14391C5.1675 5.99525 4.79708 6.11827 4.79708 6.34826C4.79708 6.46274 4.99025 6.58765 5.16731 6.58765C5.28516 6.58765 5.44644 6.5178 5.49853 6.44422Z" +})))); +var UNISWAP_LOGO_URL = "data:image/svg+xml,%3Csvg%20width%3D%2214%22%20height%3D%2215%22%20viewBox%3D%220%200%2014%2015%22%20fill%3D%22black%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20style%3D%22mix-blend-mode%3Adarken%22%3E%3Cpath%20d%3D%22M4.15217%201.55141C3.96412%201.52242%203.95619%201.51902%204.04468%201.5055C4.21427%201.47958%204.61472%201.51491%204.89067%201.58012C5.53489%201.73232%206.12109%202.12221%206.74683%202.81466L6.91307%202.99862L7.15088%202.96062C8.15274%202.8006%209.17194%202.92778%2010.0244%203.31918C10.2589%203.42686%2010.6287%203.64121%2010.6749%203.69629C10.6896%203.71384%2010.7166%203.82684%2010.7349%203.94742C10.7982%204.36458%2010.7665%204.68434%2010.6382%204.92317C10.5683%205.05313%2010.5644%205.09432%2010.6114%205.20554C10.6489%205.2943%2010.7534%205.35999%2010.8569%205.35985C11.0687%205.35956%2011.2968%205.0192%2011.4024%204.54561L11.4444%204.3575L11.5275%204.45109C11.9835%204.96459%2012.3417%205.66488%2012.4032%206.16335L12.4192%206.29332L12.3426%206.17517C12.2107%205.97186%2012.0781%205.83346%2011.9084%205.72183C11.6024%205.52062%2011.2789%205.45215%2010.4222%205.40727C9.64839%205.36675%209.21045%205.30106%208.77621%205.16032C8.03738%204.9209%207.66493%204.60204%206.78729%203.4576C6.39748%202.94928%206.15654%202.66804%205.91687%202.44155C5.37228%201.92691%204.83716%201.65701%204.15217%201.55141Z%22%2F%3E%3Cpath%20d%3D%22M10.8494%202.68637C10.8689%202.34575%2010.9153%202.12108%2011.0088%201.9159C11.0458%201.83469%2011.0804%201.76822%2011.0858%201.76822C11.0911%201.76822%2011.075%201.82816%2011.05%201.90142C10.9821%202.10054%2010.9709%202.3729%2011.0177%202.68978C11.0771%203.09184%2011.1109%203.14985%2011.5385%203.58416C11.739%203.78788%2011.9723%204.0448%2012.0568%204.15511L12.2106%204.35568L12.0568%204.21234C11.8688%204.03705%2011.4364%203.6952%2011.3409%203.64633C11.2768%203.61356%2011.2673%203.61413%2011.2278%203.65321C11.1914%203.68922%2011.1837%203.74333%2011.1787%203.99915C11.1708%204.39786%2011.1161%204.65377%2010.9842%204.90965C10.9128%205.04805%2010.9015%205.01851%2010.9661%204.8623C11.0143%204.74566%2011.0192%204.69439%2011.0189%204.30842C11.0181%203.53291%2010.9255%203.34647%2010.3823%203.02709C10.2447%202.94618%2010.0179%202.8295%209.87839%202.76778C9.73887%202.70606%209.62805%202.6523%209.63208%202.64828C9.64746%202.63307%2010.1772%202.78675%2010.3905%202.86828C10.7077%202.98954%2010.76%203.00526%2010.7985%202.99063C10.8244%202.98082%2010.8369%202.90608%2010.8494%202.68637Z%22%2F%3E%3Cpath%20d%3D%22M4.51745%204.01304C4.13569%203.49066%203.89948%202.68973%203.95062%202.091L3.96643%201.90572L4.05333%201.92148C4.21652%201.95106%204.49789%202.05515%204.62964%202.13469C4.9912%202.35293%205.14773%202.64027%205.30697%203.37811C5.35362%203.59423%205.41482%203.8388%205.44298%203.9216C5.48831%204.05487%205.65962%204.36617%205.7989%204.56834C5.89922%204.71395%205.83258%204.78295%205.61082%204.76305C5.27215%204.73267%204.8134%204.41799%204.51745%204.01304Z%22%2F%3E%3Cpath%20d%3D%22M10.3863%207.90088C8.60224%207.18693%207.97389%206.56721%207.97389%205.52157C7.97389%205.36769%207.97922%205.24179%207.98571%205.24179C7.99221%205.24179%208.06124%205.29257%208.1391%205.35465C8.50088%205.64305%208.906%205.76623%2010.0275%205.92885C10.6875%206.02455%2011.0589%206.10185%2011.4015%206.21477C12.4904%206.57371%2013.1641%207.30212%2013.3248%208.29426C13.3715%208.58255%2013.3441%209.12317%2013.2684%209.4081C13.2087%209.63315%2013.0263%2010.0388%2012.9779%2010.0544C12.9645%2010.0587%2012.9514%2010.0076%2012.9479%209.93809C12.9296%209.56554%2012.7402%209.20285%2012.4221%208.93116C12.0604%208.62227%2011.5745%208.37633%2010.3863%207.90088Z%22%2F%3E%3Cpath%20d%3D%22M9.13385%208.19748C9.11149%208.06527%209.07272%207.89643%209.04769%207.82228L9.00217%207.68748L9.08672%207.7818C9.20374%207.91233%209.2962%208.07937%209.37457%208.30185C9.43438%208.47165%209.44111%208.52215%209.44066%208.79807C9.4402%209.06896%209.43273%209.12575%209.3775%209.27858C9.29042%209.51959%209.18233%209.69048%209.00097%209.87391C8.67507%2010.2036%208.25607%2010.3861%207.65143%2010.4618C7.54633%2010.4749%207.24%2010.4971%206.97069%2010.511C6.292%2010.5461%205.84531%2010.6186%205.44393%2010.7587C5.38623%2010.7788%205.3347%2010.7911%205.32947%2010.7859C5.31323%2010.7698%205.58651%2010.6079%205.81223%2010.4998C6.1305%2010.3474%206.44733%2010.2643%207.15719%2010.1468C7.50785%2010.0887%207.86998%2010.0183%207.96194%209.99029C8.83033%209.72566%209.27671%209.04276%209.13385%208.19748Z%22%2F%3E%3Cpath%20d%3D%22M9.95169%209.64109C9.71465%209.13463%209.66022%208.64564%209.79009%208.18961C9.80399%208.14088%209.82632%208.101%209.83976%208.101C9.85319%208.101%209.90913%208.13105%209.96404%208.16777C10.0733%208.24086%2010.2924%208.36395%2010.876%208.68023C11.6043%209.0749%2012.0196%209.3805%2012.302%209.72965C12.5493%2010.0354%2012.7023%2010.3837%2012.776%2010.8084C12.8177%2011.0489%2012.7932%2011.6277%2012.7311%2011.8699C12.5353%2012.6337%2012.0802%2013.2336%2011.4311%2013.5837C11.336%2013.635%2011.2506%2013.6771%2011.2414%2013.6773C11.2321%2013.6775%2011.2668%2013.5899%2011.3184%2013.4827C11.5367%2013.029%2011.5616%2012.5877%2011.3965%2012.0965C11.2954%2011.7957%2011.0893%2011.4287%2010.6732%2010.8084C10.1893%2010.0873%2010.0707%209.89539%209.95169%209.64109Z%22%2F%3E%3Cpath%20d%3D%22M3.25046%2012.3737C3.91252%2011.8181%204.73629%2011.4234%205.48666%2011.3022C5.81005%2011.25%206.34877%2011.2707%206.64823%2011.3469C7.12824%2011.469%207.55763%2011.7425%207.78094%2012.0683C7.99918%2012.3867%208.09281%2012.6642%208.19029%2013.2816C8.22875%2013.5252%208.27057%2013.7697%208.28323%2013.8251C8.35644%2014.1451%208.4989%2014.4008%208.67544%2014.5293C8.95583%2014.7333%209.43865%2014.7459%209.91362%2014.5618C9.99423%2014.5305%2010.0642%2014.5089%2010.0691%2014.5138C10.0864%2014.5308%209.84719%2014.6899%209.67847%2014.7737C9.45143%2014.8864%209.2709%2014.93%209.03102%2014.93C8.59601%2014.93%208.23486%2014.7101%207.9335%2014.2616C7.87419%2014.1733%207.7409%2013.909%207.63729%2013.6741C7.3191%2012.9528%207.16199%2012.7331%206.79255%2012.4926C6.47104%2012.2834%206.05641%2012.2459%205.74449%2012.3979C5.33475%2012.5976%205.22043%2013.118%205.51389%2013.4478C5.63053%2013.5789%205.84803%2013.6919%206.02588%2013.7139C6.35861%2013.7551%206.64455%2013.5035%206.64455%2013.1696C6.64455%2012.9528%206.56071%2012.8291%206.34966%2012.7344C6.0614%2012.6051%205.75156%2012.7562%205.75304%2013.0254C5.75368%2013.1402%205.80396%2013.2122%205.91971%2013.2643C5.99397%2013.2977%205.99569%2013.3003%205.93514%2013.2878C5.67066%2013.2333%205.6087%2012.9164%205.82135%2012.706C6.07667%2012.4535%206.60461%2012.5649%206.78591%2012.9097C6.86208%2013.0545%206.87092%2013.3429%206.80451%2013.517C6.6559%2013.9068%206.22256%2014.1117%205.78297%2014.0002C5.48368%2013.9242%205.36181%2013.842%205.00097%2013.4726C4.37395%2012.8306%204.13053%2012.7062%203.22657%2012.566L3.05335%2012.5391L3.25046%2012.3737Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M0.308383%200.883984C2.40235%203.40996%203.84457%204.45213%204.00484%204.67231C4.13717%204.85412%204.08737%205.01757%203.86067%205.14567C3.7346%205.21689%203.47541%205.28905%203.34564%205.28905C3.19887%205.28905%203.14847%205.23278%203.14847%205.23278C3.06337%205.15255%203.01544%205.16658%202.5784%204.39555C1.97166%203.45981%201.46389%202.68357%201.45004%202.67057C1.41801%202.64052%201.41856%202.64153%202.51654%204.59413C2.69394%205.0011%202.55182%205.15049%202.55182%205.20845C2.55182%205.32636%202.51946%205.38834%202.37311%205.55059C2.12914%205.8211%202.02008%206.12505%201.94135%206.7541C1.8531%207.45926%201.60492%207.95737%200.917156%208.80989C0.514562%209.30893%200.448686%209.4004%200.3471%209.60153C0.219144%209.85482%200.183961%209.99669%200.169701%2010.3165C0.154629%2010.6547%200.183983%2010.8732%200.287934%2011.1965C0.378939%2011.4796%200.473932%2011.6665%200.716778%2012.0403C0.926351%2012.3629%201.04702%2012.6027%201.04702%2012.6965C1.04702%2012.7711%201.06136%2012.7712%201.38611%2012.6983C2.16328%2012.5239%202.79434%2012.2171%203.14925%2011.8411C3.36891%2011.6084%203.42048%2011.4799%203.42215%2011.1611C3.42325%2010.9525%203.41587%2010.9088%203.35914%2010.7888C3.2668%2010.5935%203.09869%2010.4311%202.72817%2010.1794C2.2427%209.84953%202.03534%209.58398%201.97807%209.21878C1.93108%208.91913%201.98559%208.70771%202.25416%208.14825C2.53214%207.56916%202.60103%207.32239%202.64763%206.73869C2.67773%206.36158%202.71941%206.21286%202.82842%206.09348C2.94212%205.969%203.04447%205.92684%203.32584%205.88863C3.78457%205.82635%204.07667%205.70839%204.31677%205.48849C4.52505%205.29772%204.61221%205.11391%204.62558%204.8372L4.63574%204.62747L4.51934%204.49259C4.09783%204.00411%200.0261003%200.5%200.000160437%200.5C-0.00538105%200.5%200.133325%200.672804%200.308383%200.883984ZM1.28364%2010.6992C1.37894%2010.5314%201.3283%2010.3158%201.16889%2010.2104C1.01827%2010.1109%200.78428%2010.1578%200.78428%2010.2875C0.78428%2010.3271%200.806303%2010.3559%200.855937%2010.3813C0.939514%2010.424%200.945581%2010.4721%200.879823%2010.5703C0.81323%2010.6698%200.818604%2010.7573%200.894991%2010.8167C1.0181%2010.9125%201.19237%2010.8598%201.28364%2010.6992Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M4.92523%205.99865C4.70988%206.06439%204.50054%206.29124%204.43574%206.5291C4.39621%206.67421%204.41864%206.92875%204.47785%207.00736C4.57351%207.13433%204.66602%207.16778%204.91651%207.16603C5.40693%207.16263%205.83327%206.95358%205.88284%206.69224C5.92347%206.47801%205.73622%206.18112%205.4783%206.05078C5.34521%205.98355%205.06217%205.95688%204.92523%205.99865ZM5.49853%206.44422C5.57416%206.33741%205.54107%206.22198%205.41245%206.14391C5.1675%205.99525%204.79708%206.11827%204.79708%206.34826C4.79708%206.46274%204.99025%206.58765%205.16731%206.58765C5.28516%206.58765%205.44644%206.5178%205.49853%206.44422Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"; + +var ContentWrapper$3 = styled(AutoColumn)(templateObject_1$18 || (templateObject_1$18 = __makeTemplateObject(["\n width: 100%;\n"], ["\n width: 100%;\n"]))); +var ModalUpper = styled(DataCard)(templateObject_2$Q || (templateObject_2$Q = __makeTemplateObject(["\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n"], ["\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n"]))); +var ConfirmOrLoadingWrapper = styled.div(templateObject_3$I || (templateObject_3$I = __makeTemplateObject(["\n width: 100%;\n padding: 24px;\n position: relative;\n background: ", ";\n"], ["\n width: 100%;\n padding: 24px;\n position: relative;\n background: ", ";\n"])), function (_a) { + var activeBG = _a.activeBG; + return activeBG && + 'radial-gradient(76.02% 75.41% at 1.84% 0%, rgba(255, 0, 122, 0.2) 0%, rgba(33, 114, 229, 0.2) 100%), #FFFFFF;'; +}); +var ConfirmedIcon$1 = styled(ColumnCenter)(templateObject_4$x || (templateObject_4$x = __makeTemplateObject(["\n padding: 60px 0;\n"], ["\n padding: 60px 0;\n"]))); +var SOCKS_AMOUNT = 1000; +var USER_AMOUNT = 400; +function ClaimModal() { + var _a, _b, _c, _d, _e, _f, _g; + var isOpen = useModalOpen(ApplicationModal.SELF_CLAIM); + var toggleClaimModal = useToggleSelfClaimModal(); + var _h = useActiveWeb3React(), account = _h.account, chainId = _h.chainId; + // used for UI loading states + var _j = __read(useState(false), 2), attempting = _j[0], setAttempting = _j[1]; + // get user claim data + var userClaimData = useUserClaimData(account); + // monitor the status of the claim from contracts and txns + var claimCallback = useClaimCallback(account).claimCallback; + var unclaimedAmount = useUserUnclaimedAmount(account); + var _k = useUserHasSubmittedClaim(account !== null && account !== void 0 ? account : undefined), claimSubmitted = _k.claimSubmitted, claimTxn = _k.claimTxn; + var claimConfirmed = Boolean(claimTxn === null || claimTxn === void 0 ? void 0 : claimTxn.receipt); + function onClaim() { + setAttempting(true); + claimCallback() + // reset modal and log error + .catch(function (error) { + setAttempting(false); + console.log(error); + }); + } + // once confirmed txn is found, if modal is closed open, mark as not attempting regradless + useEffect(function () { + if (claimConfirmed && claimSubmitted && attempting) { + setAttempting(false); + if (!isOpen) { + toggleClaimModal(); + } + } + }, [attempting, claimConfirmed, claimSubmitted, isOpen, toggleClaimModal]); + var nonLPAmount = JSBI.multiply(JSBI.BigInt((((_a = userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.flags) === null || _a === void 0 ? void 0 : _a.isSOCKS) ? SOCKS_AMOUNT : 0) + (((_b = userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.flags) === null || _b === void 0 ? void 0 : _b.isUser) ? USER_AMOUNT : 0)), JSBI.exponentiate(JSBI.BigInt(10), JSBI.BigInt(18))); + return (jsxs(Modal, __assign({ isOpen: isOpen, onDismiss: toggleClaimModal, maxHeight: 90 }, { children: [jsx(Confetti, { start: Boolean(isOpen && claimConfirmed) }, void 0), !attempting && !claimConfirmed && (jsxs(ContentWrapper$3, __assign({ gap: "lg" }, { children: [jsxs(ModalUpper, { children: [jsx(CardBGImage, {}, void 0), jsx(CardNoise, {}, void 0), jsxs(CardSection, __assign({ gap: "md" }, { children: [jsxs(RowBetween, { children: [jsx(ThemedText.White, __assign({ fontWeight: 500 }, { children: jsx(Trans, { children: "Claim UNI" }, void 0) }), void 0), jsx(CloseIcon$2, { onClick: toggleClaimModal, style: { zIndex: 99 }, color: "white" }, void 0)] }, void 0), jsx(ThemedText.White, __assign({ fontWeight: 700, fontSize: 36 }, { children: jsxs(Trans, { children: [unclaimedAmount === null || unclaimedAmount === void 0 ? void 0 : unclaimedAmount.toFixed(0, (_c = { groupSeparator: ',' }) !== null && _c !== void 0 ? _c : '-'), " UNI"] }, void 0) }), void 0)] }), void 0), jsx(Break$1, {}, void 0), jsxs(CardSection, __assign({ gap: "sm" }, { children: [((_d = userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.flags) === null || _d === void 0 ? void 0 : _d.isSOCKS) && (jsxs(RowBetween, { children: [jsx(ThemedText.SubHeader, __assign({ color: "white" }, { children: "SOCKS" }), void 0), jsx(ThemedText.SubHeader, __assign({ color: "white" }, { children: jsxs(Trans, { children: [SOCKS_AMOUNT, " UNI"] }, void 0) }), void 0)] }, void 0)), ((_e = userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.flags) === null || _e === void 0 ? void 0 : _e.isLP) && + unclaimedAmount && + JSBI.greaterThanOrEqual(unclaimedAmount.quotient, nonLPAmount) && (jsxs(RowBetween, { children: [jsx(ThemedText.SubHeader, __assign({ color: "white" }, { children: jsx(Trans, { children: "Liquidity" }, void 0) }), void 0), jsx(ThemedText.SubHeader, __assign({ color: "white" }, { children: jsxs(Trans, { children: [unclaimedAmount + .subtract(CurrencyAmount.fromRawAmount(unclaimedAmount.currency, nonLPAmount)) + .toFixed(0, { groupSeparator: ',' }), ' ', "UNI"] }, void 0) }), void 0)] }, void 0)), ((_f = userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.flags) === null || _f === void 0 ? void 0 : _f.isUser) && (jsxs(RowBetween, { children: [jsx(ThemedText.SubHeader, __assign({ color: "white" }, { children: jsx(Trans, { children: "User" }, void 0) }), void 0), jsx(ThemedText.SubHeader, __assign({ color: "white" }, { children: jsxs(Trans, { children: [USER_AMOUNT, " UNI"] }, void 0) }), void 0)] }, void 0))] }), void 0)] }, void 0), jsxs(AutoColumn, __assign({ gap: "md", style: { padding: '1rem', paddingTop: '0' }, justify: "center" }, { children: [jsx(ThemedText.SubHeader, __assign({ fontWeight: 500 }, { children: jsxs(Trans, { children: ["As a member of the Uniswap community you may claim UNI to be used for voting and governance.", jsx("br", {}, void 0), jsx("br", {}, void 0), jsx(ExternalLink, __assign({ href: "https://uniswap.org/blog/uni" }, { children: "Read more about UNI" }), void 0)] }, void 0) }), void 0), jsx(ButtonPrimary, __assign({ disabled: !isAddress$1(account !== null && account !== void 0 ? account : ''), padding: "16px 16px", width: "100%", "$borderRadius": "12px", mt: "1rem", onClick: onClaim }, { children: jsx(Trans, { children: "Claim UNI" }, void 0) }), void 0)] }), void 0)] }), void 0)), (attempting || claimConfirmed) && (jsxs(ConfirmOrLoadingWrapper, __assign({ activeBG: true }, { children: [jsx(CardNoise, {}, void 0), jsx(CardBGImageSmaller, { desaturate: true }, void 0), jsxs(RowBetween, { children: [jsx("div", {}, void 0), jsx(CloseIcon$2, { onClick: toggleClaimModal, style: { zIndex: 99 }, stroke: "black" }, void 0)] }, void 0), jsx(ConfirmedIcon$1, { children: !claimConfirmed ? (jsx(CustomLightSpinner, { src: Circle$1, alt: "loader", size: '90px' }, void 0)) : (jsx(UniTokenAnimated, { width: "72px", src: tokenLogo, alt: "UNI" }, void 0)) }, void 0), jsxs(AutoColumn, __assign({ gap: "100px", justify: 'center' }, { children: [jsxs(AutoColumn, __assign({ gap: "12px", justify: 'center' }, { children: [jsx(ThemedText.LargeHeader, __assign({ fontWeight: 600, color: "black" }, { children: claimConfirmed ? jsx(Trans, { children: "Claimed!" }, void 0) : jsx(Trans, { children: "Claiming" }, void 0) }), void 0), !claimConfirmed && (jsx(Text$1, __assign({ fontSize: 36, color: '#ff007a', fontWeight: 800 }, { children: jsxs(Trans, { children: [unclaimedAmount === null || unclaimedAmount === void 0 ? void 0 : unclaimedAmount.toFixed(0, (_g = { groupSeparator: ',' }) !== null && _g !== void 0 ? _g : '-'), " UNI"] }, void 0) }), void 0))] }), void 0), claimConfirmed && (jsx(Fragment, { children: jsx(ThemedText.SubHeader, __assign({ fontWeight: 500, color: "black" }, { children: jsxs(Trans, { children: [jsxs("span", __assign({ role: "img", "aria-label": "party-hat" }, { children: ["\uD83C\uDF89", ' '] }), void 0), "Welcome to team Unicorn :)", ' ', jsx("span", __assign({ role: "img", "aria-label": "party-hat" }, { children: "\uD83C\uDF89" }), void 0)] }, void 0) }), void 0) }, void 0)), attempting && !claimSubmitted && (jsx(ThemedText.SubHeader, __assign({ color: "black" }, { children: jsx(Trans, { children: "Confirm this transaction in your wallet" }, void 0) }), void 0)), attempting && claimSubmitted && !claimConfirmed && chainId && (claimTxn === null || claimTxn === void 0 ? void 0 : claimTxn.hash) && (jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, claimTxn === null || claimTxn === void 0 ? void 0 : claimTxn.hash, ExplorerDataType.TRANSACTION), style: { zIndex: 99 } }, { children: jsx(Trans, { children: "View transaction on Explorer" }, void 0) }), void 0))] }), void 0)] }), void 0))] }), void 0)); +} +var templateObject_1$18, templateObject_2$Q, templateObject_3$I, templateObject_4$x; + +var Card = styled(Box)(templateObject_1$17 || (templateObject_1$17 = __makeTemplateObject(["\n width: ", ";\n padding: ", ";\n border-radius: ", ";\n border: ", ";\n"], ["\n width: ", ";\n padding: ", ";\n border-radius: ", ";\n border: ", ";\n"])), function (_a) { + var width = _a.width; + return width !== null && width !== void 0 ? width : '100%'; +}, function (_a) { + var padding = _a.padding; + return padding !== null && padding !== void 0 ? padding : '1rem'; +}, function (_a) { + var $borderRadius = _a.$borderRadius; + return $borderRadius !== null && $borderRadius !== void 0 ? $borderRadius : '16px'; +}, function (_a) { + var border = _a.border; + return border; +}); +var LightCard = styled(Card)(templateObject_2$P || (templateObject_2$P = __makeTemplateObject(["\n border: 1px solid ", ";\n background-color: ", ";\n"], ["\n border: 1px solid ", ";\n background-color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}, function (_a) { + var theme = _a.theme; + return theme.bg1; +}); +var LightGreyCard = styled(Card)(templateObject_3$H || (templateObject_3$H = __makeTemplateObject(["\n background-color: ", ";\n"], ["\n background-color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}); +var GreyCard = styled(Card)(templateObject_4$w || (templateObject_4$w = __makeTemplateObject(["\n background-color: ", ";\n"], ["\n background-color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg3; +}); +var DarkGreyCard = styled(Card)(templateObject_5$p || (templateObject_5$p = __makeTemplateObject(["\n background-color: ", ";\n"], ["\n background-color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}); +styled(Card)(templateObject_6$k || (templateObject_6$k = __makeTemplateObject(["\n background-color: ", ";\n"], ["\n background-color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg0; +}); +var OutlineCard = styled(Card)(templateObject_7$h || (templateObject_7$h = __makeTemplateObject(["\n border: 1px solid ", ";\n"], ["\n border: 1px solid ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg3; +}); +styled(Card)(templateObject_8$f || (templateObject_8$f = __makeTemplateObject(["\n background-color: rgba(243, 132, 30, 0.05);\n color: ", ";\n font-weight: 500;\n"], ["\n background-color: rgba(243, 132, 30, 0.05);\n color: ", ";\n font-weight: 500;\n"])), function (_a) { + var theme = _a.theme; + return theme.yellow3; +}); +styled(Card)(templateObject_9$e || (templateObject_9$e = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n border-radius: 12px;\n"], ["\n background-color: ", ";\n color: ", ";\n border-radius: 12px;\n"])), function (_a) { + var theme = _a.theme; + return theme.primary5; +}, function (_a) { + var theme = _a.theme; + return theme.blue2; +}); +var templateObject_1$17, templateObject_2$P, templateObject_3$H, templateObject_4$w, templateObject_5$p, templateObject_6$k, templateObject_7$h, templateObject_8$f, templateObject_9$e; + +var Wrapper$h = styled.div(templateObject_1$16 || (templateObject_1$16 = __makeTemplateObject(["\n max-height: 70vh;\n overflow: auto;\n padding: 0 1rem;\n"], ["\n max-height: 70vh;\n overflow: auto;\n padding: 0 1rem;\n"]))); +var StyledExternalCard = styled(Card)(templateObject_2$O || (templateObject_2$O = __makeTemplateObject(["\n background-color: ", ";\n padding: 0.5rem;\n width: 100%;\n\n :hover,\n :focus,\n :active {\n background-color: ", ";\n }\n"], ["\n background-color: ", ";\n padding: 0.5rem;\n width: 100%;\n\n :hover,\n :focus,\n :active {\n background-color: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.primary5; +}, function (_a) { + var theme = _a.theme; + return theme.primary4; +}); +var HoverText$1 = styled.div(templateObject_3$G || (templateObject_3$G = __makeTemplateObject(["\n text-decoration: none;\n color: ", ";\n display: flex;\n align-items: center;\n\n :hover {\n cursor: pointer;\n }\n"], ["\n text-decoration: none;\n color: ", ";\n display: flex;\n align-items: center;\n\n :hover {\n cursor: pointer;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text1; +}); +var StyledLinkOut = styled(ArrowDown)(templateObject_4$v || (templateObject_4$v = __makeTemplateObject(["\n transform: rotate(230deg);\n"], ["\n transform: rotate(230deg);\n"]))); +var EXTERNAL_APIS = [ + { + name: 'Auto Router', + description: jsx(Trans, { children: "The app fetches the optimal trade route from a Uniswap Labs server." }, void 0), + }, + { + name: 'Infura', + description: jsx(Trans, { children: "The app fetches on-chain data and constructs contract calls with an Infura API." }, void 0), + }, + { + name: 'TRM Labs', + description: (jsxs(Fragment, { children: [jsx(Trans, { children: "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons." }, void 0), ' ', jsx(ExternalLink, __assign({ href: "https://help.uniswap.org/en/articles/5675203-terms-of-service-faq" }, { children: jsx(Trans, { children: "Learn more" }, void 0) }), void 0)] }, void 0)), + }, + { + name: 'Google Analytics', + description: jsx(Trans, { children: "The app logs anonymized usage statistics in order to improve over time." }, void 0), + }, + { + name: 'The Graph', + description: jsx(Trans, { children: "The app fetches blockchain data from The Graph\u2019s hosted service." }, void 0), + }, +]; +function PrivacyPolicyModal() { + var node = useRef(); + var open = useModalOpen(ApplicationModal.PRIVACY_POLICY); + var toggle = useTogglePrivacyPolicy(); + useEffect(function () { + if (!open) + return; + ReactGA.event({ + category: 'Modal', + action: 'Show Legal', + }); + }, [open]); + return (jsx(Modal, __assign({ isOpen: open, onDismiss: function () { return toggle(); } }, { children: jsxs(AutoColumn, __assign({ gap: "12px", ref: node }, { children: [jsxs(RowBetween, __assign({ padding: "1rem 1rem 0.5rem 1rem" }, { children: [jsx(ThemedText.MediumHeader, { children: jsx(Trans, { children: "Legal & Privacy" }, void 0) }, void 0), jsx(HoverText$1, __assign({ onClick: function () { return toggle(); } }, { children: jsx(X, { size: 24 }, void 0) }), void 0)] }), void 0), jsx(PrivacyPolicy, {}, void 0)] }), void 0) }), void 0)); +} +function PrivacyPolicy() { + return (jsx(Wrapper$h, __assign({ draggable: "true", onTouchMove: function (e) { + // prevent modal gesture handler from dismissing modal when content is scrolling + if (isMobile) { + e.stopPropagation(); + } + } }, { children: jsxs(AutoColumn, __assign({ gap: "16px" }, { children: [jsxs(AutoColumn, __assign({ gap: "8px", style: { width: '100%' } }, { children: [jsx(StyledExternalCard, { children: jsx(ExternalLink, __assign({ href: 'https://uniswap.org/terms-of-service' }, { children: jsxs(RowBetween, { children: [jsxs(AutoRow, __assign({ gap: "4px" }, { children: [jsx(Info, { size: 20 }, void 0), jsx(ThemedText.Main, __assign({ fontSize: 14, color: 'primaryText1' }, { children: jsx(Trans, { children: "Uniswap Labs' Terms of Service" }, void 0) }), void 0)] }), void 0), jsx(StyledLinkOut, { size: 20 }, void 0)] }, void 0) }), void 0) }, void 0), jsx(StyledExternalCard, { children: jsx(ExternalLink, __assign({ href: 'https://uniswap.org/disclaimer/' }, { children: jsxs(RowBetween, { children: [jsxs(AutoRow, __assign({ gap: "4px" }, { children: [jsx(Info, { size: 20 }, void 0), jsx(ThemedText.Main, __assign({ fontSize: 14, color: 'primaryText1' }, { children: jsx(Trans, { children: "Protocol Disclaimer" }, void 0) }), void 0)] }), void 0), jsx(StyledLinkOut, { size: 20 }, void 0)] }, void 0) }), void 0) }, void 0)] }), void 0), jsx(ThemedText.Main, __assign({ fontSize: 14 }, { children: jsx(Trans, { children: "This app uses the following third-party APIs:" }, void 0) }), void 0), jsxs(AutoColumn, __assign({ gap: "12px" }, { children: [EXTERNAL_APIS.map(function (_a, i) { + var name = _a.name, description = _a.description; + return (jsx(DarkGreyCard, { children: jsxs(AutoColumn, __assign({ gap: "8px" }, { children: [jsxs(AutoRow, __assign({ gap: "4px" }, { children: [jsx(Info, { size: 18 }, void 0), jsx(ThemedText.Main, __assign({ fontSize: 14, color: 'text1' }, { children: name }), void 0)] }), void 0), jsx(ThemedText.Main, __assign({ fontSize: 14 }, { children: description }), void 0)] }), void 0) }, i)); + }), jsx(Row$1, __assign({ justify: "center", marginBottom: "1rem" }, { children: jsx(ExternalLink, __assign({ href: "https://help.uniswap.org/en/articles/5675203-terms-of-service-faq" }, { children: jsx(Trans, { children: "Learn more" }, void 0) }), void 0) }), void 0)] }), void 0)] }), void 0) }), void 0)); +} +var templateObject_1$16, templateObject_2$O, templateObject_3$G, templateObject_4$v; + +/*eslint-disable*/module.exports={messages:{"$-":"$-","$<0/>":"$<0/>","${0}":["$",["0"]],"(${0})":["($",["0"],")"],"(View on Explorer)":"(View on Explorer)","(clear all)":"(clear all)","(edit)":"(edit)","- Remove recipient":"- Remove recipient","0 UNI / week":"0 UNI / week","25%":"25%","50%":"50%","75%":"75%","<0/> All Proposals":"<0/> All Proposals","<0/> Votes":"<0/> Votes","<0>Account analytics and accrued fees<1> ↗ ":"<0>Account analytics and accrued fees<1> ↗ ","<0>Current Price:<1><2/><3>{0} per {1}":["<0>Current Price:<1><2/><3>",["0"]," per ",["1"],""],"<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.":"<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.","<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.":"<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.","<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.":"<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.","<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.":"<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.","<0>Unlock voting to prepare for the next proposal.":"<0>Unlock voting to prepare for the next proposal.","<0>🎉 Welcome to team Unicorn :) <1>🎉":"<0>🎉 Welcome to team Unicorn :) <1>🎉","A minimum threshold of 0.25% of the total UNI supply is required to submit proposals":"A minimum threshold of 0.25% of the total UNI supply is required to submit proposals","About":"About","Accept":"Accept","Account":"Account","Active":"Active","Add":"Add","Add <0/> and <1/> to Uniswap V2":"Add <0/> and <1/> to Uniswap V2","Add Delegate +":"Add Delegate +","Add Liquidity":"Add Liquidity","Add V2 Liquidity":"Add V2 Liquidity","Add liquidity.":"Add liquidity.","Add more liquidity":"Add more liquidity","Add {0} to Metamask <0/>":["Add ",["0"]," to Metamask <0/>"],"Add {0}-{1} liquidity":["Add ",["0"],"-",["1"]," liquidity"],"Add {0}/{1} V3 liquidity":["Add ",["0"],"/",["1"]," V3 liquidity"],"Added {0}":["Added ",["0"]],"Address has no available claim":"Address has no available claim","Against":"Against","Allow LP token migration":"Allow LP token migration","Allow high price impact trades and skip the confirm screen. Use at your own risk.":"Allow high price impact trades and skip the confirm screen. Use at your own risk.","Allow the Uniswap Protocol to use your {0}":["Allow the Uniswap Protocol to use your ",["0"]],"Allowed":"Allowed","Amount":"Amount","An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.":"An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.","Approval pending <0/>":"Approval pending <0/>","Approve":"Approve","Approve Token":"Approve Token","Approve {0}":["Approve ",["0"]],"Approve {0} first":["Approve ",["0"]," first"],"Approved":"Approved","Approving":"Approving","Approving {0}":["Approving ",["0"]],"Arbiscan":"Arbiscan","Arbitrum Bridge":"Arbitrum Bridge","Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.":"Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.","Are you sure?":"Are you sure?","As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI":"As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI","At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.":["At least ",["0"]," ",["1"]," and ",["2"]," ",["3"]," will be refunded to your wallet due to selected price range."],"Auto":"Auto","Auto Router API":"Auto Router API","Available to deposit: {0}":["Available to deposit: ",["0"]],"Balance: {0}":["Balance: ",["0"]],"Best for exotic pairs.":"Best for exotic pairs.","Best for most pairs.":"Best for most pairs.","Best for stable pairs.":"Best for stable pairs.","Best for very stable pairs.":"Best for very stable pairs.","Best price route costs ~{formattedGasPriceString} in gas.":["Best price route costs ~",["formattedGasPriceString"]," in gas."],"Blocked address":"Blocked address","Bridge":"Bridge","By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.":"By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.","By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.":"By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.","By connecting a wallet, you agree to Uniswap Labs’ <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.":"By connecting a wallet, you agree to Uniswap Labs’ <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.","Canceled":"Canceled","Change":"Change","Charts":"Charts","Check network status":"Check network status","Check out our v3 LP walkthrough and migration guides.":"Check out our v3 LP walkthrough and migration guides.","Claim":"Claim","Claim <0/> for {0}":["Claim <0/> for ",["0"]],"Claim UNI":"Claim UNI","Claim UNI Token":"Claim UNI Token","Claim UNI reward for {0}":["Claim UNI reward for ",["0"]],"Claim fees":"Claim fees","Claim your UNI tokens":"Claim your UNI tokens","Claimed":"Claimed","Claimed UNI!":"Claimed UNI!","Claimed!":"Claimed!","Claiming":"Claiming","Claiming UNI":"Claiming UNI","Claiming {0} UNI":["Claiming ",["0"]," UNI"],"Clear All":"Clear All","Clear all":"Clear all","Close":"Close","Closed":"Closed","Collect":"Collect","Collect as WETH":"Collect as WETH","Collect fees":"Collect fees","Collect {0}/{1} fees":["Collect ",["0"],"/",["1"]," fees"],"Collected":"Collected","Collecting":"Collecting","Collecting fees":"Collecting fees","Collecting fees will withdraw currently available fees for you.":"Collecting fees will withdraw currently available fees for you.","Confirm":"Confirm","Confirm Supply":"Confirm Supply","Confirm Swap":"Confirm Swap","Confirm swap":"Confirm swap","Confirm this transaction in your wallet":"Confirm this transaction in your wallet","Confirm transaction in wallet":"Confirm transaction in wallet","Connect Wallet":"Connect Wallet","Connect a wallet":"Connect a wallet","Connect to a wallet to find pools":"Connect to a wallet to find pools","Connect to a wallet to view your V2 liquidity.":"Connect to a wallet to view your V2 liquidity.","Connect to a wallet to view your liquidity.":"Connect to a wallet to view your liquidity.","Connect wallet to swap":"Connect wallet to swap","Connected with {name}":["Connected with ",["name"]],"Copied":"Copied","Copy Address":"Copy Address","Create Pool & Supply":"Create Pool & Supply","Create Proposal":"Create Proposal","Create a pair":"Create a pair","Create a pool":"Create a pool","Create an issue on GitHub":"Create an issue on GitHub","Create pool and add {0}/{1} V3 liquidity":["Create pool and add ",["0"],"/",["1"]," V3 liquidity"],"Create pool.":"Create pool.","Create {0}/{1} V3 pool":["Create ",["0"],"/",["1"]," V3 pool"],"Current price":"Current price","Current {0} Price:":["Current ",["0"]," Price:"],"Custom":"Custom","Dark Theme":"Dark Theme","Defeated":"Defeated","Delegate Votes":"Delegate Votes","Delegate voting power to {0}":["Delegate voting power to ",["0"]],"Delegated to:":"Delegated to:","Delegating votes":"Delegating votes","Deposit":"Deposit","Deposit Amounts":"Deposit Amounts","Deposit UNI-V2 LP Tokens":"Deposit UNI-V2 LP Tokens","Deposit liquidity":"Deposit liquidity","Deposit tokens to the {label} network.":["Deposit tokens to the ",["label"]," network."],"Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.":"Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.","Deposited liquidity:":"Deposited liquidity:","Deposited {0} UNI-V2":["Deposited ",["0"]," UNI-V2"],"Depositing Liquidity":"Depositing Liquidity","Description":"Description","Detailed":"Detailed","Details":"Details","Disconnect":"Disconnect","Discord":"Discord","Dismiss":"Dismiss","Docs":"Docs","Don’t see one of your v2 positions? <0>Import it.":"Don’t see one of your v2 positions? <0>Import it.","Earned UNI tokens represent voting shares in Uniswap governance.":"Earned UNI tokens represent voting shares in Uniswap governance.","Edit":"Edit","Efficiency Comparison":"Efficiency Comparison","Enter a percent":"Enter a percent","Enter a recipient":"Enter a recipient","Enter a valid slippage percentage":"Enter a valid slippage percentage","Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.":"Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.","Enter an amount":"Enter an amount","Enter valid list location":"Enter valid list location","Enter valid token address":"Enter valid token address","Enter {0} amount":["Enter ",["0"]," amount"],"Error":"Error","Error connecting":"Error connecting","Error connecting. Try refreshing the page.":"Error connecting. Try refreshing the page.","Error details":"Error details","Error importing list":"Error importing list","Estimate may differ due to your wallet gas settings":"Estimate may differ due to your wallet gas settings","Estimated network fee":"Estimated network fee","Etherscan":"Etherscan","Executed":"Executed","Expanded results from inactive Token Lists":"Expanded results from inactive Token Lists","Expected Output":"Expected Output","Expert Mode":"Expert Mode","Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.":"Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.","Expired":"Expired","Explore Uniswap Analytics.":"Explore Uniswap Analytics.","Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.":["Failed to switch networks from the Uniswap Interface. In order to use Uniswap on ",["0"],", you must change the network in your wallet."],"Fee Tier":"Fee Tier","Fee tier":"Fee tier","Fetching best price...":"Fetching best price...","Fetching best price…":"Fetching best price…","For":"For","For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.":"For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.","From":"From","From (at most)":"From (at most)","Full Range":"Full Range","Full range positions may earn less fees than concentrated positions. Learn more <0>here.":"Full range positions may earn less fees than concentrated positions. Learn more <0>here.","Get support on Discord":"Get support on Discord","Help Center":"Help Center","Hide":"Hide","Hide closed positions":"Hide closed positions","High Price Impact":"High Price Impact","How this app uses APIs":"How this app uses APIs","I understand":"I understand","If you purchase a token from this list, you may not be able to sell it back.":"If you purchase a token from this list, you may not be able to sell it back.","Import":"Import","Import List":"Import List","Import Pool":"Import Pool","Import V2 Pool":"Import V2 Pool","Import at your own risk":"Import at your own risk","In range":"In range","Increase Liquidity":"Increase Liquidity","Initial prices and pool share":"Initial prices and pool share","Initializing...":"Initializing...","Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.":["Input is estimated. You will sell at most <0>",["0"]," ",["1"]," or the transaction will revert."],"Install Metamask":"Install Metamask","Insufficient liquidity for this trade.":"Insufficient liquidity for this trade.","Insufficient {0}":["Insufficient ",["0"]],"Insufficient {0} balance":["Insufficient ",["0"]," balance"],"Interface Settings":"Interface Settings","Invalid pair":"Invalid pair","Invalid pair.":"Invalid pair.","Invalid price input":"Invalid price input","Invalid range selected. The min price must be lower than the max price.":"Invalid range selected. The min price must be lower than the max price.","Invalid recipient":"Invalid recipient","Language":"Language","Learn":"Learn","Learn about providing liquidity":"Learn about providing liquidity","Learn more":"Learn more","Legal & Privacy":"Legal & Privacy","Light Theme":"Light Theme","Liquidity":"Liquidity","Liquidity data not available.":"Liquidity data not available.","Liquidity provider rewards":"Liquidity provider rewards","Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.":"Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.","Lists":"Lists","Loaded":"Loaded","Loading":"Loading","MAX":"MAX","Manage":"Manage","Manage Liquidity in Rewards Pool":"Manage Liquidity in Rewards Pool","Manage Token Lists":"Manage Token Lists","Manage this pool.":"Manage this pool.","Max":"Max","Max Price":"Max Price","Max price":"Max price","Max slippage":"Max slippage","Max:":"Max:","Maximum sent":"Maximum sent","Menu":"Menu","Migrate":"Migrate","Migrate Liquidity to V3":"Migrate Liquidity to V3","Migrate V2 Liquidity":"Migrate V2 Liquidity","Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.":"Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.","Migrate {0}/{1} liquidity to V3":["Migrate ",["0"],"/",["1"]," liquidity to V3"],"Migrating":"Migrating","Min Price":"Min Price","Min price":"Min price","Min:":"Min:","Minimum received":"Minimum received","Missing dependencies":"Missing dependencies","Mock Toggle":"Mock Toggle","More":"More","Network Fee":"Network Fee","Network Warning":"Network Warning","Network fees exceed 50% of the swap amount!":"Network fees exceed 50% of the swap amount!","New Position":"New Position","No V2 Liquidity found.":"No V2 Liquidity found.","No active pools":"No active pools","No data":"No data","No description.":"No description.","No liquidity found.":"No liquidity found.","No pool found.":"No pool found.","No proposals found.":"No proposals found.","No results found.":"No results found.","Not created":"Not created","OFF":"OFF","ON":"ON","ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.":"ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.","Off":"Off","On":"On","Once you are happy with the rate click supply to review.":"Once you are happy with the rate click supply to review.","Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.":["Only UNI votes that were self delegated or delegated to another address before block ",["0"]," are eligible for voting."],"Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.":"Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.","Optimism Gateway":"Optimism Gateway","Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.":"Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.","Optimistic Etherscan":"Optimistic Etherscan","Out of range":"Out of range","Output is estimated.":"Output is estimated.","Output is estimated. If the price changes by more than {0}% your transaction will revert.":["Output is estimated. If the price changes by more than ",["0"],"% your transaction will revert."],"Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.":["Output is estimated. You will receive at least <0>",["0"]," ",["1"]," or the transaction will revert."],"Output will be sent to <0>{0}":["Output will be sent to <0>",["0"],""],"Owner":"Owner","Participating pools":"Participating pools","Pending":"Pending","Please confirm you would like to remove this list by typing REMOVE":"Please confirm you would like to remove this list by typing REMOVE","Please connect to Layer 1 Ethereum":"Please connect to Layer 1 Ethereum","Please connect to a supported network in the dropdown menu or in your wallet.":"Please connect to a supported network in the dropdown menu or in your wallet.","Please type the word \"{confirmWord}\" to enable expert mode.":["Please type the word \"",["confirmWord"],"\" to enable expert mode."],"Polygon Bridge":"Polygon Bridge","Polygonscan":"Polygonscan","Pool":"Pool","Pool Found!":"Pool Found!","Pool Rate":"Pool Rate","Pool rate":"Pool rate","Pool tokens in rewards pool:":"Pool tokens in rewards pool:","Pooled {0}:":["Pooled ",["0"],":"],"Pools Overview":"Pools Overview","Preview":"Preview","Price":"Price","Price Difference:":"Price Difference:","Price Impact":"Price Impact","Price Impact Too High":"Price Impact Too High","Price Updated":"Price Updated","Price impact":"Price impact","Price range":"Price range","Price updated":"Price updated","Price:":"Price:","Prices and pool share":"Prices and pool share","Proposal":"Proposal","Proposal Submitted":"Proposal Submitted","Proposal Title":"Proposal Title","Proposals":"Proposals","Proposals submitted by community members will appear here.":"Proposals submitted by community members will appear here.","Proposed Action":"Proposed Action","Proposer":"Proposer","Protocol Disclaimer":"Protocol Disclaimer","Queued":"Queued","Rates":"Rates","Read more about UNI":"Read more about UNI","Read more about Uniswap governance":"Read more about Uniswap governance","Read more about providing liquidity":"Read more about providing liquidity","Read more about unsupported assets":"Read more about unsupported assets","Recent Transactions":"Recent Transactions","Recent transactions":"Recent transactions","Recipient":"Recipient","Reload the page":"Reload the page","Remove":"Remove","Remove <0/> and <1/>":"Remove <0/> and <1/>","Remove Amount":"Remove Amount","Remove Delegate":"Remove Delegate","Remove Liquidity":"Remove Liquidity","Remove list":"Remove list","Removing {0} {1} and {2} {3}":["Removing ",["0"]," ",["1"]," and ",["2"]," ",["3"]],"Removing {0} {1} and{2} {3}":["Removing ",["0"]," ",["1"]," and",["2"]," ",["3"]],"Request Features":"Request Features","Reset":"Reset","Return":"Return","Review swap":"Review swap","Search by token name or address":"Search by token name or address","Search name or paste address":"Search name or paste address","Select Pair":"Select Pair","Select a network":"Select a network","Select a token":"Select a token","Select a token to find your v2 liquidity.":"Select a token to find your v2 liquidity.","Select an action":"Select an action","Selected Range":"Selected Range","Self":"Self","Self Delegate":"Self Delegate","Set Price Range":"Set Price Range","Set Starting Price":"Set Starting Price","Settings":"Settings","Share of Pool":"Share of Pool","Share of Pool:":"Share of Pool:","Show Portis":"Show Portis","Show closed positions":"Show closed positions","Simple":"Simple","Slippage tolerance":"Slippage tolerance","Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.":"Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.","Something went wrong":"Something went wrong","Something went wrong.":"Something went wrong.","Step 1. Get UNI-V2 Liquidity tokens":"Step 1. Get UNI-V2 Liquidity tokens","Submit new proposal":"Submit new proposal","Submitting Proposal":"Submitting Proposal","Submitting Vote":"Submitting Vote","Succeeded":"Succeeded","Success":"Success","Supply":"Supply","Supplying {0} {1} and {2} {3}":["Supplying ",["0"]," ",["1"]," and ",["2"]," ",["3"]],"Swap":"Swap","Swap <0/> for exactly <1/>":"Swap <0/> for exactly <1/>","Swap Anyway":"Swap Anyway","Swap details":"Swap details","Swap exactly <0/> for <1/>":"Swap exactly <0/> for <1/>","Swap failed: {0}":["Swap failed: ",["0"]],"Swap summary":"Swap summary","Swapping {0} {1} for {2} {3}":["Swapping ",["0"]," ",["1"]," for ",["2"]," ",["3"]],"Take a 10 minute survey to help us improve your experience in the Uniswap app.":"Take a 10 minute survey to help us improve your experience in the Uniswap app.","Tell us what you think ↗":"Tell us what you think ↗","Thanks for being part of the Uniswap community <0/>":"Thanks for being part of the Uniswap community <0/>","The % you will earn in fees.":"The % you will earn in fees.","The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.":"The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.","The app fetches blockchain data from The Graph’s hosted service.":"The app fetches blockchain data from The Graph’s hosted service.","The app fetches on-chain data and constructs contract calls with an Infura API.":"The app fetches on-chain data and constructs contract calls with an Infura API.","The app fetches the optimal trade route from a Uniswap Labs server.":"The app fetches the optimal trade route from a Uniswap Labs server.","The app logs anonymized usage statistics in order to improve over time.":"The app logs anonymized usage statistics in order to improve over time.","The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.":"The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.","The cost of sending this transaction is more than half of the value of the input amount.":"The cost of sending this transaction is more than half of the value of the input amount.","The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.":"The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.","The estimated difference between the USD values of input and output amounts.":"The estimated difference between the USD values of input and output amounts.","The input token cannot be transferred. There may be an issue with the input token.":"The input token cannot be transferred. There may be an issue with the input token.","The market price is outside your specified price range. Single-asset deposit only.":"The market price is outside your specified price range. Single-asset deposit only.","The most recent block number on this network. Prices update on every block.":"The most recent block number on this network. Prices update on every block.","The output token cannot be transferred. There may be an issue with the output token.":"The output token cannot be transferred. There may be an issue with the output token.","The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.":"The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.","The price of this pool is outside of your selected range. Your position is not currently earning fees.":"The price of this pool is outside of your selected range. Your position is not currently earning fees.","The price of this pool is within your selected range. Your position is currently earning fees.":"The price of this pool is within your selected range. Your position is currently earning fees.","The ratio of tokens you add will set the price of this pool.":"The ratio of tokens you add will set the price of this pool.","The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.":"The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.","There is no liquidity data.":"There is no liquidity data.","This app uses the following third-party APIs:":"This app uses the following third-party APIs:","This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.":"This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.","This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.":"This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.","This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.":"This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.","This token is not supported in the Uniswap Labs app":"This token is not supported in the Uniswap Labs app","This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the":["This tool will safely migrate your ",["0"]," liquidity to V3. The process is completely trustless thanks to the"],"This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.":"This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.","This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.":"This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.","Tip: Custom tokens are stored locally in your browser":"Tip: Custom tokens are stored locally in your browser","To":"To","To (at least)":"To (at least)","Token not supported":"Token not supported","Tokens":"Tokens","Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.":"Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.","Top pools":"Top pools","Total deposited":"Total deposited","Total deposits":"Total deposits","Trade Route":"Trade Route","Trading":"Trading","Transaction Settings":"Transaction Settings","Transaction Submitted":"Transaction Submitted","Transaction completed in":"Transaction completed in","Transaction deadline":"Transaction deadline","Transaction pending":"Transaction pending","Transaction rejected.":"Transaction rejected.","Transaction submitted":"Transaction submitted","Transfer Token":"Transfer Token","Try Again":"Try Again","Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.":"Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.","Turn On Expert Mode":"Turn On Expert Mode","UNI has arrived":"UNI has arrived","UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.":"UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.","UNI {0}/{1} Burned":["UNI ",["0"],"/",["1"]," Burned"],"UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.":["UNI-V2 LP tokens are required. Once you've added liquidity to the ",["0"],"-",["1"]," pool you can stake your liquidity tokens on this page."],"UNI-V2 {0}-{1}":["UNI-V2 ",["0"],"-",["1"]],"Unclaimed UNI":"Unclaimed UNI","Unclaimed fees":"Unclaimed fees","Undetermined":"Undetermined","Unexpected error. Could not estimate gas for the swap.":"Unexpected error. Could not estimate gas for the swap.","Unexpected issue with estimating the gas. Please try again.":"Unexpected issue with estimating the gas. Please try again.","Uniswap Governance":"Uniswap Governance","Uniswap Labs' Terms of Service":"Uniswap Labs' Terms of Service","Uniswap available in: <0>{0}":["Uniswap available in: <0>",["0"],""],"Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.":"Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.","Uniswap liquidity mining":"Uniswap liquidity mining","Uniswap migration contract↗":"Uniswap migration contract↗","Unknown Source":"Unknown Source","Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.":["Unknown error",["0"],". Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3."],"Unlock Votes":"Unlock Votes","Unlock Voting":"Unlock Voting","Unlocking Votes":"Unlocking Votes","Unsupported Asset":"Unsupported Asset","Unsupported Assets":"Unsupported Assets","Unsupported network–switch to another to trade.":"Unsupported network–switch to another to trade.","Untitled":"Untitled","Unwrap":"Unwrap","Unwrap <0/> to {0}":["Unwrap <0/> to ",["0"]],"Update Delegation":"Update Delegation","Update list":"Update list","Use the Uniswap Labs API to get faster quotes.":"Use the Uniswap Labs API to get faster quotes.","User":"User","V2 is not available on Layer 2. Switch to Layer 1 Ethereum.":"V2 is not available on Layer 2. Switch to Layer 1 Ethereum.","V2 liquidity":"V2 liquidity","V3 {0} Price:":["V3 ",["0"]," Price:"],"View accrued fees and analytics<0>↗":"View accrued fees and analytics<0>↗","View list":"View list","View on Etherscan":"View on Etherscan","View on Explorer":"View on Explorer","View transaction on Explorer":"View transaction on Explorer","Vote":"Vote","Vote Against":"Vote Against","Vote For":"Vote For","Vote against proposal {proposalId}":["Vote against proposal ",["proposalId"]],"Vote against proposal {proposalKey}":["Vote against proposal ",["proposalKey"]],"Vote against proposal {proposalKey} with reason \"{0}\"":["Vote against proposal ",["proposalKey"]," with reason \"",["0"],"\""],"Vote for proposal {proposalId}":["Vote for proposal ",["proposalId"]],"Vote for proposal {proposalKey}":["Vote for proposal ",["proposalKey"]],"Vote for proposal {proposalKey} with reason \"{0}\"":["Vote for proposal ",["proposalKey"]," with reason \"",["0"],"\""],"Vote to abstain on proposal {proposalId}":["Vote to abstain on proposal ",["proposalId"]],"Vote to abstain on proposal {proposalKey}":["Vote to abstain on proposal ",["proposalKey"]],"Vote to abstain on proposal {proposalKey} with reason \"{0}\"":["Vote to abstain on proposal ",["proposalKey"]," with reason \"",["0"],"\""],"Voting ended {0}":["Voting ended ",["0"]],"Voting ends approximately {0}":["Voting ends approximately ",["0"]],"Voting starts approximately {0}":["Voting starts approximately ",["0"]],"Waiting For Confirmation":"Waiting For Confirmation","Wallet Address or ENS name":"Wallet Address or ENS name","Weekly Rewards":"Weekly Rewards","Welcome to team Unicorn :)":"Welcome to team Unicorn :)","When you claim without withdrawing your liquidity remains in the mining pool.":"When you claim without withdrawing your liquidity remains in the mining pool.","When you withdraw, the contract will automagically claim UNI on your behalf!":"When you withdraw, the contract will automagically claim UNI on your behalf!","When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.":"When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.","Withdraw":"Withdraw","Withdraw & Claim":"Withdraw & Claim","Withdraw deposited liquidity":"Withdraw deposited liquidity","Withdrawing {0} UNI-V2":["Withdrawing ",["0"]," UNI-V2"],"Withdrew UNI-V2!":"Withdrew UNI-V2!","Wrap":"Wrap","Wrap <0/> to {0}":["Wrap <0/> to ",["0"]],"Wrong Network":"Wrong Network","You already have an active or pending proposal":"You already have an active or pending proposal","You are creating a pool":"You are creating a pool","You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.":["You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current ",["0"]," price."],"You are the first liquidity provider.":"You are the first liquidity provider.","You can either vote on each proposal yourself or delegate your votes to a third party.":"You can either vote on each proposal yourself or delegate your votes to a third party.","You can now trade {0}":["You can now trade ",["0"]],"You don't have enough votes to submit a proposal":"You don't have enough votes to submit a proposal","You don’t have liquidity in this pool yet.":"You don’t have liquidity in this pool yet.","You may have lost your network connection, or {label} might be down right now.":["You may have lost your network connection, or ",["label"]," might be down right now."],"You may have lost your network connection.":"You may have lost your network connection.","You might consider waiting until the network fees go down to complete this transaction.":"You might consider waiting until the network fees go down to complete this transaction.","You must connect an account.":"You must connect an account.","You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.":["You must give the Uniswap smart contracts permission to use your ",["0"],". You only have to do this once per token."],"You must have {formattedProposalThreshold} votes to submit a proposal":["You must have ",["formattedProposalThreshold"]," votes to submit a proposal"],"You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.":"You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.","You will also collect fees earned from this position.":"You will also collect fees earned from this position.","You will receive":"You will receive","You will receive at least {0} {1} or the transaction will revert.":["You will receive at least ",["0"]," ",["1"]," or the transaction will revert."],"You will send at most {0} {1} or the transaction will revert.":["You will send at most ",["0"]," ",["1"]," or the transaction will revert."],"Your V2 liquidity":"Your V2 liquidity","Your active V3 liquidity positions will appear here.":"Your active V3 liquidity positions will appear here.","Your liquidity deposits":"Your liquidity deposits","Your pool share:":"Your pool share:","Your position":"Your position","Your position has 0 liquidity, and is not earning fees.":"Your position has 0 liquidity, and is not earning fees.","Your position will appear here.":"Your position will appear here.","Your position will be 100% composed of {0} at this price":["Your position will be 100% composed of ",["0"]," at this price"],"Your position will be 100% {0} at this price.":["Your position will be 100% ",["0"]," at this price."],"Your position will not earn fees or be used in trades until the market price moves into your range.":"Your position will not earn fees or be used in trades until the market price moves into your range.","Your positions":"Your positions","Your rate":"Your rate","Your total pool tokens:":"Your total pool tokens:","Your transaction cost will be much higher as it includes the gas to create the pool.":"Your transaction cost will be much higher as it includes the gas to create the pool.","Your transaction may be frontrun":"Your transaction may be frontrun","Your transaction may fail":"Your transaction may fail","Your transaction will revert if it has been pending for longer than this period of time.":"Your transaction will revert if it has been pending for longer than this period of time.","Your transaction will revert if it is pending for more than this period of time.":"Your transaction will revert if it is pending for more than this period of time.","Your transaction will revert if the price changes unfavorably by more than this percentage.":"Your transaction will revert if the price changes unfavorably by more than this percentage.","Your transactions will appear here...":"Your transactions will appear here...","Your unclaimed UNI":"Your unclaimed UNI","after slippage":"after slippage","confirm":"confirm","for {0}":["for ",["0"]],"gwei":"gwei","has socks emoji":"has socks emoji","here.":"here.","https:// or ipfs:// or ENS name":"https:// or ipfs:// or ENS name","minutes":"minutes","via {0}":["via ",["0"]],"via {0} token list":["via ",["0"]," token list"],"{0, plural, one {Import token} other {Import tokens}}":[["0","plural",{one:"Import token",other:"Import tokens"}]],"{0}":[["0"]],"{0} %":[["0"]," %"],"{0} <0/> per <1/>":[["0"]," <0/> per <1/>"],"{0} Custom Tokens":[["0"]," Custom Tokens"],"{0} Deposited":[["0"]," Deposited"],"{0} ETH":[["0"]," ETH"],"{0} Fees Earned:":[["0"]," Fees Earned:"],"{0} Pending":[["0"]," Pending"],"{0} UNI":[["0"]," UNI"],"{0} UNI / week":[["0"]," UNI / week"],"{0} UNI-V2":[["0"]," UNI-V2"],"{0} UNI-V2 LP tokens available":[["0"]," UNI-V2 LP tokens available"],"{0} Votes":[["0"]," Votes"],"{0} per {1}":[["0"]," per ",["1"]],"{0} tokens":[["0"]," tokens"],"{0} {1} Price:":[["0"]," ",["1"]," Price:"],"{0} {nativeCurrencySymbol}":[["0"]," ",["nativeCurrencySymbol"]],"{0} • Added by user":[["0"]," • Added by user"],"{0}%":[["0"],"%"],"{0}% fee tier":[["0"],"% fee tier"],"{0}% pool":[["0"],"% pool"],"{0}% select":[["0"],"% select"],"{0}-{1} Liquidity Mining":[["0"],"-",["1"]," Liquidity Mining"],"{0}/{1} LP NFT":[["0"],"/",["1"]," LP NFT"],"{0}/{1} LP Tokens":[["0"],"/",["1"]," LP Tokens"],"{SOCKS_AMOUNT} UNI":[["SOCKS_AMOUNT"]," UNI"],"{USER_AMOUNT} UNI":[["USER_AMOUNT"]," UNI"],"{activeTokensOnThisChain} tokens":[["activeTokensOnThisChain"]," tokens"],"{integrator} fee":[["integrator"]," fee"],"{label} token bridge":[["label"]," token bridge"],"{min}m {sec}s":[["min"],"m ",["sec"],"s"],"{percentForSlider}%":[["percentForSlider"],"%"],"{sec}s":[["sec"],"s"],"{tokenB} per {tokenA}":[["tokenB"]," per ",["tokenA"]],"← Back to Pools Overview":"← Back to Pools Overview"}}; + +var enUS = /*#__PURE__*/Object.freeze({ + __proto__: null +}); + +var SUPPORTED_LOCALES = [ + // order as they appear in the language dropdown + 'en-US', + 'af-ZA', + 'ar-SA', + 'ca-ES', + 'cs-CZ', + 'da-DK', + 'de-DE', + 'el-GR', + 'es-ES', + 'fi-FI', + 'fr-FR', + 'he-IL', + 'hu-HU', + 'id-ID', + 'it-IT', + 'ja-JP', + 'ko-KR', + 'nl-NL', + 'no-NO', + 'pl-PL', + 'pt-BR', + 'pt-PT', + 'ro-RO', + 'ru-RU', + 'sr-SP', + 'sv-SE', + 'sw-TZ', + 'tr-TR', + 'uk-UA', + 'vi-VN', + 'zh-CN', + 'zh-TW', +]; +var DEFAULT_LOCALE = 'en-US'; +var DEFAULT_CATALOG = enUS; +var LOCALE_LABEL = { + 'af-ZA': 'Afrikaans', + 'ar-SA': 'العربية', + 'ca-ES': 'Català', + 'cs-CZ': 'čeština', + 'da-DK': 'dansk', + 'de-DE': 'Deutsch', + 'el-GR': 'ελληνικά', + 'en-US': 'English', + 'es-ES': 'Español', + 'fi-FI': 'suomi', + 'fr-FR': 'français', + 'he-IL': 'עִברִית', + 'hu-HU': 'Magyar', + 'id-ID': 'bahasa Indonesia', + 'it-IT': 'Italiano', + 'ja-JP': '日本語', + 'ko-KR': '한국어', + 'nl-NL': 'Nederlands', + 'no-NO': 'norsk', + 'pl-PL': 'Polskie', + 'pt-BR': 'português', + 'pt-PT': 'português', + 'ro-RO': 'Română', + 'ru-RU': 'русский', + 'sr-SP': 'Српски', + 'sv-SE': 'svenska', + 'sw-TZ': 'Kiswahili', + 'tr-TR': 'Türkçe', + 'uk-UA': 'Український', + 'vi-VN': 'Tiếng Việt', + 'zh-CN': '简体中文', + 'zh-TW': '繁体中文', + pseudo: 'ƥƨèúδô', +}; + +var _a$4, _b$2, _c$2; +/** + * Given a locale string (e.g. from user agent), return the best match for corresponding SupportedLocale + * @param maybeSupportedLocale the fuzzy locale identifier + */ +function parseLocale(maybeSupportedLocale) { + if (typeof maybeSupportedLocale !== 'string') + return undefined; + var lowerMaybeSupportedLocale = maybeSupportedLocale.toLowerCase(); + return SUPPORTED_LOCALES.find(function (locale) { return locale.toLowerCase() === lowerMaybeSupportedLocale || locale.split('-')[0] === lowerMaybeSupportedLocale; }); +} +/** + * Returns the supported locale read from the user agent (navigator) + */ +function navigatorLocale() { + var _a; + if (!navigator.language) + return undefined; + var _b = __read(navigator.language.split('-'), 2), language = _b[0], region = _b[1]; + if (region) { + return (_a = parseLocale(language + "-" + region.toUpperCase())) !== null && _a !== void 0 ? _a : parseLocale(language); + } + return parseLocale(language); +} +function storeLocale() { + var _a; + return (_a = store.getState().user.userLocale) !== null && _a !== void 0 ? _a : undefined; +} +var initialLocale = (_c$2 = (_b$2 = (_a$4 = parseLocale(parsedQueryString().lng)) !== null && _a$4 !== void 0 ? _a$4 : storeLocale()) !== null && _b$2 !== void 0 ? _b$2 : navigatorLocale()) !== null && _c$2 !== void 0 ? _c$2 : DEFAULT_LOCALE; +function useUrlLocale() { + var parsed = useParsedQueryString(); + return parseLocale(parsed.lng); +} +/** + * Returns the currently active locale, from a combination of user agent, query string, and user settings stored in redux + * Stores the query string locale in redux (if set) to persist across sessions + */ +function useActiveLocale() { + var urlLocale = useUrlLocale(); + var userLocale = useUserLocale(); + return useMemo(function () { var _a, _b; return (_b = (_a = urlLocale !== null && urlLocale !== void 0 ? urlLocale : userLocale) !== null && _a !== void 0 ? _a : navigatorLocale()) !== null && _b !== void 0 ? _b : DEFAULT_LOCALE; }, [urlLocale, userLocale]); +} + +function useLocationLinkProps(locale) { + var location = useLocation(); + var qs = useParsedQueryString(); + var activeLocale = useActiveLocale(); + return useMemo(function () { + return !locale + ? {} + : { + to: __assign(__assign({}, location), { search: stringify(__assign(__assign({}, qs), { lng: locale })) }), + onClick: function () { + ReactGA.event({ + category: 'Localization', + action: 'Switch Locale', + label: activeLocale + " -> " + locale, + }); + }, + }; + }, [location, qs, activeLocale, locale]); +} + +var _path$4, _path2$1, _path3; + +function _extends$6() { _extends$6 = 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$6.apply(this, arguments); } + +const SvgMenu = props => /*#__PURE__*/React.createElement("svg", _extends$6({ + width: 24, + height: 24, + viewBox: "0 0 24 24", + fill: "none", + xmlns: "http://www.w3.org/2000/svg" +}, props), _path$4 || (_path$4 = /*#__PURE__*/React.createElement("path", { + d: "M12 13C12.5523 13 13 12.5523 13 12C13 11.4477 12.5523 11 12 11C11.4477 11 11 11.4477 11 12C11 12.5523 11.4477 13 12 13Z", + stroke: "black", + strokeWidth: 2, + strokeLinecap: "round", + strokeLinejoin: "round" +})), _path2$1 || (_path2$1 = /*#__PURE__*/React.createElement("path", { + d: "M19 13C19.5523 13 20 12.5523 20 12C20 11.4477 19.5523 11 19 11C18.4477 11 18 11.4477 18 12C18 12.5523 18.4477 13 19 13Z", + stroke: "black", + strokeWidth: 2, + strokeLinecap: "round", + strokeLinejoin: "round" +})), _path3 || (_path3 = /*#__PURE__*/React.createElement("path", { + d: "M5 13C5.55228 13 6 12.5523 6 12C6 11.4477 5.55228 11 5 11C4.44772 11 4 11.4477 4 12C4 12.5523 4.44772 13 5 13Z", + stroke: "black", + strokeWidth: 2, + strokeLinecap: "round", + strokeLinejoin: "round" +}))); + +function useOnClickOutside(node, handler) { + var handlerRef = useRef(handler); + useEffect(function () { + handlerRef.current = handler; + }, [handler]); + useEffect(function () { + var handleClickOutside = function (e) { + var _a, _b; + if ((_b = (_a = node.current) === null || _a === void 0 ? void 0 : _a.contains(e.target)) !== null && _b !== void 0 ? _b : false) { + return; + } + if (handlerRef.current) + handlerRef.current(); + }; + document.addEventListener('mousedown', handleClickOutside); + return function () { + document.removeEventListener('mousedown', handleClickOutside); + }; + }, [node]); +} + +var FlyoutAlignment; +(function (FlyoutAlignment) { + FlyoutAlignment["LEFT"] = "LEFT"; + FlyoutAlignment["RIGHT"] = "RIGHT"; +})(FlyoutAlignment || (FlyoutAlignment = {})); +var StyledMenuIcon$1 = styled(SvgMenu)(templateObject_1$15 || (templateObject_1$15 = __makeTemplateObject(["\n path {\n stroke: ", ";\n }\n"], ["\n path {\n stroke: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text1; +}); +var StyledMenuButton$1 = styled.button(templateObject_2$N || (templateObject_2$N = __makeTemplateObject(["\n width: 100%;\n height: 100%;\n border: none;\n background-color: transparent;\n margin: 0;\n padding: 0;\n height: 40px;\n background-color: ", ";\n border: 1px solid ", ";\n padding: 0.15rem 0.5rem;\n border-radius: 16px;\n\n :hover,\n :focus {\n cursor: pointer;\n outline: none;\n border: 1px solid ", ";\n }\n\n svg {\n margin-top: 2px;\n }\n"], ["\n width: 100%;\n height: 100%;\n border: none;\n background-color: transparent;\n margin: 0;\n padding: 0;\n height: 40px;\n background-color: ", ";\n border: 1px solid ", ";\n padding: 0.15rem 0.5rem;\n border-radius: 16px;\n\n :hover,\n :focus {\n cursor: pointer;\n outline: none;\n border: 1px solid ", ";\n }\n\n svg {\n margin-top: 2px;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.bg0; +}, function (_a) { + var theme = _a.theme; + return theme.bg0; +}, function (_a) { + var theme = _a.theme; + return theme.bg3; +}); +var UNIbutton = styled(ButtonPrimary)(templateObject_3$F || (templateObject_3$F = __makeTemplateObject(["\n background-color: ", ";\n background: radial-gradient(174.47% 188.91% at 1.84% 0%, #ff007a 0%, #2172e5 100%), #edeef2;\n border: none;\n"], ["\n background-color: ", ";\n background: radial-gradient(174.47% 188.91% at 1.84% 0%, #ff007a 0%, #2172e5 100%), #edeef2;\n border: none;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg3; +}); +var StyledMenu$2 = styled.div(templateObject_4$u || (templateObject_4$u = __makeTemplateObject(["\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n text-align: left;\n"], ["\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n text-align: left;\n"]))); +var MenuFlyout$1 = styled.span(templateObject_8$e || (templateObject_8$e = __makeTemplateObject(["\n min-width: 196px;\n max-height: 350px;\n overflow: auto;\n background-color: ", ";\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 border: 1px solid ", ";\n border-radius: 12px;\n padding: 0.5rem;\n display: flex;\n flex-direction: column;\n font-size: 16px;\n position: absolute;\n top: 3rem;\n z-index: 100;\n\n ", ";\n ", ";\n"], ["\n min-width: 196px;\n max-height: 350px;\n overflow: auto;\n background-color: ", ";\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 border: 1px solid ", ";\n border-radius: 12px;\n padding: 0.5rem;\n display: flex;\n flex-direction: column;\n font-size: 16px;\n position: absolute;\n top: 3rem;\n z-index: 100;\n\n ", ";\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var theme = _a.theme; + return theme.bg0; +}, function (_a) { + var _b = _a.flyoutAlignment, flyoutAlignment = _b === void 0 ? FlyoutAlignment.RIGHT : _b; + return flyoutAlignment === FlyoutAlignment.RIGHT + ? css(templateObject_5$o || (templateObject_5$o = __makeTemplateObject(["\n right: 0rem;\n "], ["\n right: 0rem;\n "]))) : css(templateObject_6$j || (templateObject_6$j = __makeTemplateObject(["\n left: 0rem;\n "], ["\n left: 0rem;\n "]))); +}, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToMedium(templateObject_7$g || (templateObject_7$g = __makeTemplateObject(["\n bottom: unset;\n right: 0;\n left: unset;\n "], ["\n bottom: unset;\n right: 0;\n left: unset;\n "]))); +}); +var MenuItem$1 = styled(ExternalLink)(templateObject_9$d || (templateObject_9$d = __makeTemplateObject(["\n display: flex;\n flex: 1;\n flex-direction: row;\n align-items: center;\n padding: 0.5rem 0.5rem;\n justify-content: space-between;\n color: ", ";\n :hover {\n color: ", ";\n cursor: pointer;\n text-decoration: none;\n }\n"], ["\n display: flex;\n flex: 1;\n flex-direction: row;\n align-items: center;\n padding: 0.5rem 0.5rem;\n justify-content: space-between;\n color: ", ";\n :hover {\n color: ", ";\n cursor: pointer;\n text-decoration: none;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text2; +}, function (_a) { + var theme = _a.theme; + return theme.text1; +}); +var InternalMenuItem = styled(Link$1)(templateObject_10$a || (templateObject_10$a = __makeTemplateObject(["\n flex: 1;\n padding: 0.5rem 0.5rem;\n color: ", ";\n :hover {\n color: ", ";\n cursor: pointer;\n text-decoration: none;\n }\n > svg {\n margin-right: 8px;\n }\n"], ["\n flex: 1;\n padding: 0.5rem 0.5rem;\n color: ", ";\n :hover {\n color: ", ";\n cursor: pointer;\n text-decoration: none;\n }\n > svg {\n margin-right: 8px;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text2; +}, function (_a) { + var theme = _a.theme; + return theme.text1; +}); +var InternalLinkMenuItem = styled(InternalMenuItem)(templateObject_11$8 || (templateObject_11$8 = __makeTemplateObject(["\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: 0.5rem 0.5rem;\n justify-content: space-between;\n text-decoration: none;\n :hover {\n color: ", ";\n cursor: pointer;\n text-decoration: none;\n }\n"], ["\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: 0.5rem 0.5rem;\n justify-content: space-between;\n text-decoration: none;\n :hover {\n color: ", ";\n cursor: pointer;\n text-decoration: none;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text1; +}); +var ToggleMenuItem = styled.button(templateObject_12$8 || (templateObject_12$8 = __makeTemplateObject(["\n background-color: transparent;\n margin: 0;\n padding: 0;\n border: none;\n display: flex;\n flex: 1;\n flex-direction: row;\n align-items: center;\n padding: 0.5rem 0.5rem;\n justify-content: space-between;\n font-size: 1rem;\n font-weight: 500;\n color: ", ";\n :hover {\n color: ", ";\n cursor: pointer;\n text-decoration: none;\n }\n"], ["\n background-color: transparent;\n margin: 0;\n padding: 0;\n border: none;\n display: flex;\n flex: 1;\n flex-direction: row;\n align-items: center;\n padding: 0.5rem 0.5rem;\n justify-content: space-between;\n font-size: 1rem;\n font-weight: 500;\n color: ", ";\n :hover {\n color: ", ";\n cursor: pointer;\n text-decoration: none;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text2; +}, function (_a) { + var theme = _a.theme; + return theme.text1; +}); +function LanguageMenuItem(_a) { + var locale = _a.locale, active = _a.active, key = _a.key; + var _b = useLocationLinkProps(locale), to = _b.to, onClick = _b.onClick; + if (!to) + return null; + return (jsxs(InternalLinkMenuItem, __assign({ onClick: onClick, to: to }, { children: [jsx("div", { children: LOCALE_LABEL[locale] }, void 0), active && jsx(Check, { opacity: 0.6, size: 16 }, void 0)] }), key)); +} +function LanguageMenu(_a) { + var close = _a.close; + var activeLocale = useActiveLocale(); + return (jsxs(MenuFlyout$1, { children: [jsx(ToggleMenuItem, __assign({ onClick: close }, { children: jsx(ChevronLeft, { size: 16 }, void 0) }), void 0), SUPPORTED_LOCALES.map(function (locale) { return (jsx(LanguageMenuItem, { locale: locale, active: activeLocale === locale }, locale)); })] }, void 0)); +} +function Menu() { + var _a = useActiveWeb3React(), account = _a.account, chainId = _a.chainId; + var node = useRef(); + var open = useModalOpen(ApplicationModal.MENU); + var toggleMenu = useToggleModal(ApplicationModal.MENU); + useOnClickOutside(node, open ? toggleMenu : undefined); + var togglePrivacyPolicy = useToggleModal(ApplicationModal.PRIVACY_POLICY); + var openClaimModal = useToggleModal(ApplicationModal.ADDRESS_CLAIM); + var showUNIClaimOption = Boolean(!!account && !!chainId && !L2_CHAIN_IDS.includes(chainId)); + var _b = __read(useDarkModeManager(), 2), darkMode = _b[0], toggleDarkMode = _b[1]; + var _c = __read(useState('main'), 2), menu = _c[0], setMenu = _c[1]; + useEffect(function () { + setMenu('main'); + }, [open]); + return (jsxs(Fragment, { children: [jsxs(StyledMenu$2, __assign({ ref: node }, { children: [jsx(StyledMenuButton$1, __assign({ onClick: toggleMenu, "aria-label": t(templateObject_13$4 || (templateObject_13$4 = __makeTemplateObject(["Menu"], ["Menu"]))) }, { children: jsx(StyledMenuIcon$1, {}, void 0) }), void 0), open && + (function () { + switch (menu) { + case 'lang': + return jsx(LanguageMenu, { close: function () { return setMenu('main'); } }, void 0); + case 'main': + default: + return (jsxs(MenuFlyout$1, { children: [jsxs(MenuItem$1, __assign({ href: "https://uniswap.org/" }, { children: [jsx("div", { children: jsx(Trans, { children: "About" }, void 0) }, void 0), jsx(Info, { opacity: 0.6, size: 16 }, void 0)] }), void 0), jsxs(MenuItem$1, __assign({ href: "https://help.uniswap.org/" }, { children: [jsx("div", { children: jsx(Trans, { children: "Help Center" }, void 0) }, void 0), jsx(HelpCircle, { opacity: 0.6, size: 16 }, void 0)] }), void 0), jsxs(MenuItem$1, __assign({ href: "https://uniswap.canny.io/feature-requests" }, { children: [jsx("div", { children: jsx(Trans, { children: "Request Features" }, void 0) }, void 0), jsx(Coffee, { opacity: 0.6, size: 16 }, void 0)] }), void 0), jsxs(MenuItem$1, __assign({ href: "https://discord.gg/FCfyBSbCU5" }, { children: [jsx("div", { children: jsx(Trans, { children: "Discord" }, void 0) }, void 0), jsx(MessageCircle, { opacity: 0.6, size: 16 }, void 0)] }), void 0), jsxs(ToggleMenuItem, __assign({ onClick: function () { return setMenu('lang'); } }, { children: [jsx("div", { children: jsx(Trans, { children: "Language" }, void 0) }, void 0), jsx(Globe, { opacity: 0.6, size: 16 }, void 0)] }), void 0), jsxs(ToggleMenuItem, __assign({ onClick: function () { return toggleDarkMode(); } }, { children: [jsx("div", { children: darkMode ? jsx(Trans, { children: "Light Theme" }, void 0) : jsx(Trans, { children: "Dark Theme" }, void 0) }, void 0), darkMode ? jsx(Moon, { opacity: 0.6, size: 16 }, void 0) : jsx(Sun, { opacity: 0.6, size: 16 }, void 0)] }), void 0), jsxs(MenuItem$1, __assign({ href: "https://docs.uniswap.org/" }, { children: [jsx("div", { children: jsx(Trans, { children: "Docs" }, void 0) }, void 0), jsx(BookOpen, { opacity: 0.6, size: 16 }, void 0)] }), void 0), jsxs(ToggleMenuItem, __assign({ onClick: function () { return togglePrivacyPolicy(); } }, { children: [jsx("div", { children: jsx(Trans, { children: "Legal & Privacy" }, void 0) }, void 0), jsx(FileText, { opacity: 0.6, size: 16 }, void 0)] }), void 0), showUNIClaimOption && (jsx(UNIbutton, __assign({ onClick: openClaimModal, padding: "8px 16px", width: "100%", "$borderRadius": "12px", mt: "0.5rem" }, { children: jsx(Trans, { children: "Claim UNI" }, void 0) }), void 0))] }, void 0)); + } + })()] }), void 0), jsx(PrivacyPolicyModal, {}, void 0)] }, void 0)); +} +styled(MenuFlyout$1)(templateObject_14$4 || (templateObject_14$4 = __makeTemplateObject(["\n top: 3rem !important;\n"], ["\n top: 3rem !important;\n"]))); +styled(InternalMenuItem)(templateObject_15$2 || (templateObject_15$2 = __makeTemplateObject(["\n width: max-content;\n text-decoration: none;\n"], ["\n width: max-content;\n text-decoration: none;\n"]))); +styled(MenuItem$1)(templateObject_16$2 || (templateObject_16$2 = __makeTemplateObject(["\n width: max-content;\n text-decoration: none;\n"], ["\n width: max-content;\n text-decoration: none;\n"]))); +var templateObject_1$15, templateObject_2$N, templateObject_3$F, templateObject_4$u, templateObject_5$o, templateObject_6$j, templateObject_7$g, templateObject_8$e, templateObject_9$d, templateObject_10$a, templateObject_11$8, templateObject_12$8, templateObject_13$4, templateObject_14$4, templateObject_15$2, templateObject_16$2; + +var loadingAnimation = keyframes(templateObject_1$14 || (templateObject_1$14 = __makeTemplateObject(["\n 0% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0% 50%;\n }\n"], ["\n 0% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0% 50%;\n }\n"]))); +var LoadingRows = styled.div(templateObject_2$M || (templateObject_2$M = __makeTemplateObject(["\n display: grid;\n\n & > div {\n animation: ", " 1.5s infinite;\n animation-fill-mode: both;\n background: linear-gradient(\n to left,\n ", " 25%,\n ", " 50%,\n ", " 75%\n );\n background-size: 400%;\n border-radius: 12px;\n height: 2.4em;\n will-change: background-position;\n }\n"], ["\n display: grid;\n\n & > div {\n animation: ", " 1.5s infinite;\n animation-fill-mode: both;\n background: linear-gradient(\n to left,\n ", " 25%,\n ", " 50%,\n ", " 75%\n );\n background-size: 400%;\n border-radius: 12px;\n height: 2.4em;\n will-change: background-position;\n }\n"])), loadingAnimation, function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var theme = _a.theme; + return theme.bg2; +}, function (_a) { + var theme = _a.theme; + return theme.bg1; +}); +var loadingOpacityMixin = css(templateObject_3$E || (templateObject_3$E = __makeTemplateObject(["\n filter: ", ";\n opacity: ", ";\n transition: opacity 0.2s ease-in-out;\n"], ["\n filter: ", ";\n opacity: ", ";\n transition: opacity 0.2s ease-in-out;\n"])), function (_a) { + var $loading = _a.$loading; + return ($loading ? 'grayscale(1)' : 'none'); +}, function (_a) { + var $loading = _a.$loading; + return ($loading ? '0.4' : '1'); +}); +var LoadingOpacityContainer = styled.div(templateObject_4$t || (templateObject_4$t = __makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), loadingOpacityMixin); +var templateObject_1$14, templateObject_2$M, templateObject_3$E, templateObject_4$t; + +/** + * Invokes callback repeatedly over an interval defined by the delay + * @param callback + * @param delay if null, the callback will not be invoked + * @param leading if true, the callback will be invoked immediately (on the leading edge); otherwise, it will be invoked after delay + */ +function useInterval(callback, delay, leading) { + if (leading === void 0) { leading = true; } + var savedCallback = useRef(); + // Remember the latest callback. + useEffect(function () { + savedCallback.current = callback; + }, [callback]); + // Set up the interval. + useEffect(function () { + function tick() { + var current = savedCallback.current; + current && current(); + } + if (delay !== null) { + if (leading) + tick(); + var id_1 = setInterval(tick, delay); + return function () { return clearInterval(id_1); }; + } + return; + }, [delay, leading]); +} + +var PopoverContainer$1 = styled.div(templateObject_1$13 || (templateObject_1$13 = __makeTemplateObject(["\n z-index: 9999;\n visibility: ", ";\n opacity: ", ";\n transition: visibility 150ms linear, opacity 150ms linear;\n color: ", ";\n"], ["\n z-index: 9999;\n visibility: ", ";\n opacity: ", ";\n transition: visibility 150ms linear, opacity 150ms linear;\n color: ", ";\n"])), function (props) { return (props.show ? 'visible' : 'hidden'); }, function (props) { return (props.show ? 1 : 0); }, function (_a) { + var theme = _a.theme; + return theme.text2; +}); +var ReferenceElement = styled.div(templateObject_2$L || (templateObject_2$L = __makeTemplateObject(["\n display: inline-block;\n"], ["\n display: inline-block;\n"]))); +var Arrow = styled.div(templateObject_3$D || (templateObject_3$D = __makeTemplateObject(["\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 ", ";\n transform: rotate(45deg);\n background: ", ";\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 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 ", ";\n transform: rotate(45deg);\n background: ", ";\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"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}, function (_a) { + var theme = _a.theme; + return theme.bg0; +}); +function Popover(_a) { + var _b, _c; + var content = _a.content, show = _a.show, children = _a.children, _d = _a.placement, placement = _d === void 0 ? 'auto' : _d; + var _e = __read(useState(null), 2), referenceElement = _e[0], setReferenceElement = _e[1]; + var _f = __read(useState(null), 2), popperElement = _f[0], setPopperElement = _f[1]; + var _g = __read(useState(null), 2), arrowElement = _g[0], setArrowElement = _g[1]; + var options = useMemo(function () { return ({ + placement: placement, + strategy: 'fixed', + modifiers: [ + { name: 'offset', options: { offset: [8, 8] } }, + { name: 'arrow', options: { element: arrowElement } }, + { name: 'preventOverflow', options: { padding: 8 } }, + ], + }); }, [arrowElement, placement]); + var _h = usePopper(referenceElement, popperElement, options), styles = _h.styles, update = _h.update, attributes = _h.attributes; + var updateCallback = useCallback(function () { + update && update(); + }, [update]); + useInterval(updateCallback, show ? 100 : null); + return (jsxs(Fragment, { children: [jsx(ReferenceElement, __assign({ ref: setReferenceElement }, { children: children }), void 0), jsx(Portal, { children: jsxs(PopoverContainer$1, __assign({ show: show, ref: setPopperElement, style: styles.popper }, attributes.popper, { children: [content, jsx(Arrow, __assign({ className: "arrow-" + ((_c = (_b = attributes.popper) === null || _b === void 0 ? void 0 : _b['data-popper-placement']) !== null && _c !== void 0 ? _c : ''), ref: setArrowElement, style: styles.arrow }, attributes.arrow), void 0)] }), void 0) }, void 0)] }, void 0)); +} +var templateObject_1$13, templateObject_2$L, templateObject_3$D; + +var TooltipContainer = styled.div(templateObject_1$12 || (templateObject_1$12 = __makeTemplateObject(["\n max-width: 256px;\n padding: 0.6rem 1rem;\n font-weight: 400;\n word-break: break-word;\n\n background: ", ";\n border-radius: 12px;\n border: 1px solid ", ";\n box-shadow: 0 4px 8px 0 ", ";\n"], ["\n max-width: 256px;\n padding: 0.6rem 1rem;\n font-weight: 400;\n word-break: break-word;\n\n background: ", ";\n border-radius: 12px;\n border: 1px solid ", ";\n box-shadow: 0 4px 8px 0 ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg0; +}, function (_a) { + var theme = _a.theme; + return theme.bg2; +}, function (_a) { + var theme = _a.theme; + return transparentize(0.9, theme.shadow1); +}); +function Tooltip(_a) { + var text = _a.text, rest = __rest(_a, ["text"]); + return jsx(Popover, __assign({ content: jsx(TooltipContainer, { children: text }, void 0) }, rest), void 0); +} +function TooltipContent(_a) { + var content = _a.content, _b = _a.wrap, wrap = _b === void 0 ? false : _b, rest = __rest(_a, ["content", "wrap"]); + return jsx(Popover, __assign({ content: wrap ? jsx(TooltipContainer, { children: content }, void 0) : content }, rest), void 0); +} +function MouseoverTooltip(_a) { + var children = _a.children, rest = __rest(_a, ["children"]); + var _b = __read(useState(false), 2), show = _b[0], setShow = _b[1]; + var open = useCallback(function () { return setShow(true); }, [setShow]); + var close = useCallback(function () { return setShow(false); }, [setShow]); + return (jsx(Tooltip, __assign({}, rest, { show: show }, { children: jsx("div", __assign({ onMouseEnter: open, onMouseLeave: close }, { children: children }), void 0) }), void 0)); +} +function MouseoverTooltipContent(_a) { + var content = _a.content, children = _a.children, _b = _a.onOpen, openCallback = _b === void 0 ? undefined : _b, disableHover = _a.disableHover, rest = __rest(_a, ["content", "children", "onOpen", "disableHover"]); + var _c = __read(useState(false), 2), show = _c[0], setShow = _c[1]; + var open = useCallback(function () { + setShow(true); + openCallback === null || openCallback === void 0 ? void 0 : openCallback(); + }, [openCallback]); + var close = useCallback(function () { return setShow(false); }, [setShow]); + return (jsx(TooltipContent, __assign({}, rest, { show: show, content: disableHover ? null : content }, { children: jsx("div", __assign({ style: { display: 'inline-block', lineHeight: 0, padding: '0.25rem' }, onMouseEnter: open, onMouseLeave: close }, { children: children }), void 0) }), void 0)); +} +var templateObject_1$12; + +var StyledPriceContainer = styled.button(templateObject_1$11 || (templateObject_1$11 = __makeTemplateObject(["\n background-color: transparent;\n border: none;\n cursor: pointer;\n align-items: center;\n justify-content: flex-start;\n padding: 0;\n grid-template-columns: 1fr auto;\n grid-gap: 0.25rem;\n display: flex;\n flex-direction: row;\n text-align: left;\n flex-wrap: wrap;\n padding: 8px 0;\n user-select: text;\n"], ["\n background-color: transparent;\n border: none;\n cursor: pointer;\n align-items: center;\n justify-content: flex-start;\n padding: 0;\n grid-template-columns: 1fr auto;\n grid-gap: 0.25rem;\n display: flex;\n flex-direction: row;\n text-align: left;\n flex-wrap: wrap;\n padding: 8px 0;\n user-select: text;\n"]))); +function TradePrice(_a) { + var _b, _c, _d, _e, _f, _g; + var price = _a.price, showInverted = _a.showInverted, setShowInverted = _a.setShowInverted; + var theme = useContext(ThemeContext); + var usdcPrice = useUSDCPrice(showInverted ? price.baseCurrency : price.quoteCurrency); + var formattedPrice; + try { + formattedPrice = showInverted ? price.toSignificant(4) : (_b = price.invert()) === null || _b === void 0 ? void 0 : _b.toSignificant(4); + } + catch (error) { + formattedPrice = '0'; + } + var label = showInverted ? "" + ((_c = price.quoteCurrency) === null || _c === void 0 ? void 0 : _c.symbol) : ((_d = price.baseCurrency) === null || _d === void 0 ? void 0 : _d.symbol) + " "; + var labelInverted = showInverted ? ((_e = price.baseCurrency) === null || _e === void 0 ? void 0 : _e.symbol) + " " : "" + ((_f = price.quoteCurrency) === null || _f === void 0 ? void 0 : _f.symbol); + var flipPrice = useCallback(function () { return setShowInverted(!showInverted); }, [setShowInverted, showInverted]); + var text = ((_g = '1 ' + labelInverted + ' = ' + formattedPrice) !== null && _g !== void 0 ? _g : '-') + " " + label; + return (jsxs(StyledPriceContainer, __assign({ onClick: function (e) { + e.stopPropagation(); // dont want this click to affect dropdowns / hovers + flipPrice(); + }, title: text }, { children: [jsx(Text$1, __assign({ fontWeight: 500, color: theme.text1 }, { children: text }), void 0), ' ', usdcPrice && (jsx(ThemedText.DarkGray, { children: jsxs(Trans, { children: ["($", usdcPrice.toSignificant(6, { groupSeparator: ',' }), ")"] }, void 0) }, void 0))] }), void 0)); +} +var templateObject_1$11; + +var Wrapper$g = styled.div(templateObject_1$10 || (templateObject_1$10 = __makeTemplateObject(["\n position: relative;\n padding: 8px;\n"], ["\n position: relative;\n padding: 8px;\n"]))); +var ArrowWrapper$1 = styled.div(templateObject_3$C || (templateObject_3$C = __makeTemplateObject(["\n padding: 4px;\n border-radius: 12px;\n height: 32px;\n width: 32px;\n position: relative;\n margin-top: -14px;\n margin-bottom: -14px;\n left: calc(50% - 16px);\n /* transform: rotate(90deg); */\n background-color: ", ";\n border: 4px solid ", ";\n z-index: 2;\n ", "\n"], ["\n padding: 4px;\n border-radius: 12px;\n height: 32px;\n width: 32px;\n position: relative;\n margin-top: -14px;\n margin-bottom: -14px;\n left: calc(50% - 16px);\n /* transform: rotate(90deg); */\n background-color: ", ";\n border: 4px solid ", ";\n z-index: 2;\n ", "\n"])), function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var theme = _a.theme; + return theme.bg0; +}, function (_a) { + var clickable = _a.clickable; + return clickable + ? css(templateObject_2$K || (templateObject_2$K = __makeTemplateObject(["\n :hover {\n cursor: pointer;\n opacity: 0.8;\n }\n "], ["\n :hover {\n cursor: pointer;\n opacity: 0.8;\n }\n "]))) : null; +}); +var SectionBreak = styled.div(templateObject_4$s || (templateObject_4$s = __makeTemplateObject(["\n height: 1px;\n width: 100%;\n background-color: ", ";\n"], ["\n height: 1px;\n width: 100%;\n background-color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg3; +}); +var ErrorText = styled(Text$1)(templateObject_5$n || (templateObject_5$n = __makeTemplateObject(["\n color: ", ";\n"], ["\n color: ", ";\n"])), function (_a) { + var theme = _a.theme, severity = _a.severity; + return severity === 3 || severity === 4 + ? theme.red1 + : severity === 2 + ? theme.yellow2 + : severity === 1 + ? theme.text1 + : theme.text2; +}); +var TruncatedText = styled(Text$1)(templateObject_6$i || (templateObject_6$i = __makeTemplateObject(["\n text-overflow: ellipsis;\n max-width: 220px;\n overflow: hidden;\n text-align: right;\n"], ["\n text-overflow: ellipsis;\n max-width: 220px;\n overflow: hidden;\n text-align: right;\n" + // styles +]))); +// styles +var Dots = styled.span(templateObject_7$f || (templateObject_7$f = __makeTemplateObject(["\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 &::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"]))); +var SwapCallbackErrorInner = styled.div(templateObject_8$d || (templateObject_8$d = __makeTemplateObject(["\n background-color: ", ";\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: ", ";\n z-index: -1;\n p {\n padding: 0;\n margin: 0;\n font-weight: 500;\n }\n"], ["\n background-color: ", ";\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: ", ";\n z-index: -1;\n p {\n padding: 0;\n margin: 0;\n font-weight: 500;\n }\n"])), function (_a) { + var theme = _a.theme; + return transparentize(0.9, theme.red1); +}, function (_a) { + var theme = _a.theme; + return theme.red1; +}); +var SwapCallbackErrorInnerAlertTriangle = styled.div(templateObject_9$c || (templateObject_9$c = __makeTemplateObject(["\n background-color: ", ";\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 background-color: ", ";\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"])), function (_a) { + var theme = _a.theme; + return transparentize(0.9, theme.red1); +}); +function SwapCallbackError(_a) { + var error = _a.error; + return (jsxs(SwapCallbackErrorInner, { children: [jsx(SwapCallbackErrorInnerAlertTriangle, { children: jsx(AlertTriangle, { size: 24 }, void 0) }, void 0), jsx("p", __assign({ style: { wordBreak: 'break-word' } }, { children: error }), void 0)] }, void 0)); +} +var SwapShowAcceptChanges = styled(AutoColumn)(templateObject_10$9 || (templateObject_10$9 = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n padding: 0.5rem;\n border-radius: 12px;\n margin-top: 8px;\n"], ["\n background-color: ", ";\n color: ", ";\n padding: 0.5rem;\n border-radius: 12px;\n margin-top: 8px;\n"])), function (_a) { + var theme = _a.theme; + return transparentize(0.95, theme.primary3); +}, function (_a) { + var theme = _a.theme; + return theme.primaryText1; +}); +styled(ThemedText.Black)(templateObject_11$7 || (templateObject_11$7 = __makeTemplateObject(["\n border-bottom: 1px solid ", ";\n padding-bottom: 0.5rem;\n"], ["\n border-bottom: 1px solid ", ";\n padding-bottom: 0.5rem;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}); +var ResponsiveTooltipContainer = styled(TooltipContainer)(templateObject_13$3 || (templateObject_13$3 = __makeTemplateObject(["\n background-color: ", ";\n border: 1px solid ", ";\n padding: 1rem;\n width: ", ";\n\n ", "\n"], ["\n background-color: ", ";\n border: 1px solid ", ";\n padding: 1rem;\n width: ", ";\n\n ", "\n"])), function (_a) { + var theme = _a.theme; + return theme.bg0; +}, function (_a) { + var theme = _a.theme; + return theme.bg2; +}, function (_a) { + var width = _a.width; + return width !== null && width !== void 0 ? width : 'auto'; +}, function (_a) { + var theme = _a.theme, origin = _a.origin; + return theme.mediaWidth.upToExtraSmall(templateObject_12$7 || (templateObject_12$7 = __makeTemplateObject(["\n transform: scale(0.8);\n transform-origin: ", ";\n "], ["\n transform: scale(0.8);\n transform-origin: ", ";\n "])), origin !== null && origin !== void 0 ? origin : 'top left'); +}); +styled(TradePrice)(templateObject_14$3 || (templateObject_14$3 = __makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), loadingOpacityMixin); +var templateObject_1$10, templateObject_2$K, templateObject_3$C, templateObject_4$s, templateObject_5$n, templateObject_6$i, templateObject_7$f, templateObject_8$d, templateObject_9$c, templateObject_10$9, templateObject_11$7, templateObject_12$7, templateObject_13$3, templateObject_14$3; + +// technically a 721, not an ERC20, but suffices for our purposes +var SOCKS = new Token(SupportedChainId.MAINNET, SOCKS_CONTROLLER_ADDRESSES[SupportedChainId.MAINNET], 0); +function useHasSocks() { + var _a = useActiveWeb3React(), account = _a.account, chainId = _a.chainId; + var balance = useTokenBalance(account !== null && account !== void 0 ? account : undefined, chainId === SupportedChainId.MAINNET ? SOCKS : undefined); + return useMemo(function () { return Boolean(balance === null || balance === void 0 ? void 0 : balance.greaterThan(0)); }, [balance]); +} + +var COINBASE_ICON_URL = "d13f13f5694ec91f.svg"; + +var FORTMATIC_ICON_URL = "data:image/png;base64,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"; + +var PORTIS_ICON_URL = "data:image/png;base64,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"; + +var WALLETCONNECT_ICON_URL = "data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%3E%20%20%3Crect%20width%3D%2224%22%20height%3D%2215.0867%22%20fill%3D%22url%28%23pattern0%29%22%2F%3E%20%20%3Cdefs%3E%20%20%20%20%3Cpattern%20id%3D%22pattern0%22%20patternContentUnits%3D%22objectBoundingBox%22%20width%3D%221%22%20height%3D%221%22%3E%20%20%20%20%20%20%3Cuse%20xlink%3Ahref%3D%22%23image0%22%20transform%3D%22translate%28-0.00968744%29%20scale%280.00339792%200.00540541%29%22%2F%3E%20%20%20%20%3C%2Fpattern%3E%20%20%20%20%3Cimage%20id%3D%22image0%22%20width%3D%22300%22%20height%3D%22185%22%20xlink%3Ahref%3D%22data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAASwAAAC5CAYAAACSoQIxAAAgAElEQVR4Ae19fZgdVZnn761TnQ%2FCtwmugxhkGPXZDIjDoENIuu9twsAm4CS7EpFhWHYktN23AwzC6Dg6xI%2FVWcGsk%2FTtNgQ0MogQ9lkQDAtLTN%2FuhDjIk5koG10eWRwQdAjRYBLIR9epd5%2B3um%2FS6dx7%2B35U3Vt16tx%2Fqu6pc96P33vqd8%2BtOu85BPuxCFRAYF4%2Fn%2BJ4ONNV3izt0AzycRwRzQBjBgPHEfszfMIMIjqOGDNAmAHguDGRb4HxJhPeZOa3yMFe%2BM5%2BR74DbzHzmyC8ST7vZXJ%2Fs9fFL7Z10e8qmGMvpRwBSrn%2F1n0AF97Np07d753rK2eOw%2F4fENG7ffCZYDrTIZzYTJAY%2BB3AvwDoX5nk6PxcaWfHb2fgJ9v%2FC73RTFusrvghYAkrfjGJ1KL21XyO4%2BgPMvhch%2BhcAHMAzIpUaUjCmfEagP8D4ucA2u6z%2BtFwjn4WkngrJgEIWMJKQJDqNfE%2FfJNnvXVQz3OYLwToAmZ8iAjT65UXy3aMfSD8E3x%2BlhVtPdimtv7wevptLG21RjWMgCWshiGMj4DzvsUnn3RAZx2NLDvcSSAZPaXq4zN8Av8YwCZi2rST1PCOHO1LFQgGO2sJK%2BHB7cjzBWDvcihc7jD9UcLdicR8Zv4hkfOY1s73h5fTc5EosUKbgoAlrKbAHJ6Ss1fx1He26UvIx4dBuBzAO8KTbr4kZvwrgx91GI%2FyLneosII88702x0NLWAmJZTCSIn29A3wMwAkJMTvWZjLjN8z8bZrmDhSupxdibaw1LkDAElaMO8JF9%2FAJ6qB%2FrQP%2FegKdF2NTE28ag7cw0V2vjqj1L9xIBxPvkKEOWMKKYWDb8zzXgV5GhKsATIuhicaa5DP2EHAvjai%2BwZvpeWMdTahjlrBiEjgZTU095P9nH%2F4NxHROTMxKtRkMfpqJ1thRV3y6gSWsFsciczefjUP6UwRcY0dTLQ5GGfWjoy6%2BS7vuys1d9Osy1WxxExCwhNUEkEupGCOqLzJjqUNwStWxZTFDgHGQgbXaVV%2B2xNWa2FjCajLulqiaDHgU6ixxRYFqVTItYVUFU%2BOV2vN8hkP6y2N%2F%2FRoXaCXEAgFm%2FgeP3M9v6aHdsTDIcCMsYUUcYHmY7h7yPuv4dBMIUyNWZ8W3AgHGbhB9aY9yVm%2FropFWmJAWnZawIop0ZgW7fJrf7YD%2FDsDMiNRYsXFCgPGiT%2Fj0UI%2F7UJzMMskWS1gRRDPbN3Kx76DfAb0nAvFWZMwRkEmo2nG7Nn%2BCfhpzUxNnniWsEEMmy7nsP6BXEYIJnyFKtqIShwDDA%2FF%2F36PcFdu66K3E2R9Tgy1hhREYZur8hp%2Fzmb9EwElhiLQyjEHgZQDLB3vcR43xqIWOWMJqEPxsH89h8tYR0R83KMo2NxuBR5lVVyFH%2F2a2m9F6ZwmrXnxXsJM9zf%2B0D77dAabUK8a2Sw8CPvBbYvQUcu6D6fE6XE8tYdWB5%2BjkT%2B8BAp1fR3PbJO0IMP7nm6xu%2BFEv%2FSbtUNTqv00JqQUxZmrP65twUP%2FEklUtwNm6RyFA%2BI%2FTSf80kx%2B57Khy%2B2VSBOwIa1KIRitk1vBMaL2egGyVTWw1i8CkCDCj7%2FVZ6pM7ltKhSSvbCrCEVUUnyPTzn4D1I0R4exXVbRWLQE0IMPO%2F%2BFPc%2FzS8jH5RU8MUVrZ%2FCSsFnZkyffqzBL3FklUloOy1RhAgog%2BoEf3jbL%2F34UbkpKGtHWGVifIH%2B%2Fhtx5F%2BkAgXl6liiy0CoSPgM68ayrXdFLpgQwRawioRyMwafh95%2Bn%2BDcEaJy7bIIhApAj54q4Z7uV0B4liY7V%2FCCZhk%2B7yF5OlnLVlNAMZ%2BbRoCDmiuy%2Fqf5YezaUoTosgS1rhAZfv1Z9jB90E4flyxPbUINB0BIpwpP5zyA9p05TFWaP8SjgUn2%2B99B8DVMY6VNS2lCDDRrYVu9bWUun%2BU26knrGAnZaUfI8IlRyFjv1gEYoQAg79e6Gn7qxiZ1BJTUk1YQlZnuPoJAJmWoG%2BVWgRqQMBnfHOoR10PIq6hmVFVU0tYF67k6dOm6cctWRnVn9PgzEO8U11dWEFeGpyd6GMqH7rPyfPxU6Z5Gy1ZTewO9nsCELgSp%2BlH5d9BAmwN3cTUjbDOvZdnnLrXe4qILgwdTSvQItAkBJh58%2BtwF%2B7I0b4mqYyFmlQR1odW8YnTlfcDu9heCH2PsY%2BB34H4DTkS6HeQ74w34PDosik%2BvQ2EkwGcxOCT4ONkIjopWJXVTh1pOAjM%2FE%2F7tXvpMzfSnoaFJURAaghLUm2mO94mB3RuQmLTOjODjUL5ZSJ6yWe87BC9xOCXoPklV7kvezvxcqPPUGRXIecdmA3fm%2B379C44NJuYZ%2Fs%2BZpOD2QycYRdGnLwLMHj7fs%2FtSAtppYKw%2FnSATzvke1uI6A8m7wKprLELjGENGoZ2hod%2Fix9jBfktRWI9q8xr%2BABcv4OY28GYD8IpLbUppsqFtDy4nWlI5TGesC65h3%2FPO6i3AHh3TPtbK8z6FQPDTDTskzOUiO2omGn%2BAM5xMEpgDLQ7hNNaAV4cdTJ4B5SbKXTRrjjaF5ZNRhPWgjX8Lq31ZgDvCguwBMt5GeAHR%2BA%2BuKWHtiXYj1HTmakjjz8BeVc5oKUg%2FLvE%2B9SgA8z8PFx3nsmkZSxhtef5DEX6GQDvaLAfJLn56wz%2Bjtbu%2F9i8nJ5OsiOT2d45MNKpmT7qMK5M819H%2BXtY6Gn7wGR4JfW6sYSVyY88m9K3gW%2BCcT85%2FMCm7rZNSe2YjdgdJAw7wWa2f9GInMS29fkrg71tn0ms%2FRUMN5KwMnnvOiJ8q4LfJl76NTOt3K%2Bdu9LyxmiyIMqb4RmOn%2FPBNznAqZPVN%2Bj6G4M9rpEvKIwkrGy%2F9z0AqVhulsE%2FZqb%2FNpRzv2vQDRe6K5m893Em%2FmsH9J7QhcdRoK%2F%2BcLCXdsTRtEZschtpHNe2zHwWkZFcPB7yR4n4HwZT%2BrdvPBDVnBdy7j0A7sn2eX%2FGxJ8kovnVtEtqHQLellTbK9ltJGGBYGxiKDMe86E%2BNZyjn1UKrL1WGoHBXldG39%2Bbv4o%2FqFxvJYEuKl0z4aUK%2Fy%2FhHpQ030zCAv1fAOeV9DihhcEra0JvIdcmSdv20yACm2%2BkHwGYlxnwroKPO4lweoMiY9NcUnYGe%2BjV2BgUoiFGrtbgAPeGiFFLRTHjNz5RTyHX9r5CjyWrsINR6HYfwHHqbPbpc8zYH7b8Vshjh77aCr3N0Gnsg56O%2FpGnZTH%2FZoAYlQ5ZZXKvclds6woSi6NSY%2BWOITB%2FDb%2FD9fTfg3BtYkFhfGcw516TWPsnMdxYwjp%2FDR93gqcfTei%2BggXtqBuGP0E%2FnyR%2B9nIECMzr5%2FNdePcQ6P0RiI9OJGP9YM79aHQKWi%2FZyL%2BEAuu2LnrrFa0WMeOp1sNcnQU%2Bw2fmzw%2FuVBdbsqoOsyhqSerSK577IWZ8Iwr5Uchk4IHBWcr4TVSMHWEVO8X5a7jtBE9viPsmE8x4zYX6yMYcSaK2%2FcQEgUy%2Ft5gY%2Fxjnrd%2BErArd6uo0rPVuPGFJvw9IS%2BuHCVgUk%2FvgKDMYGIRSS01OWj3K4YR9yQzwmWDvkVj%2BRWTcO9ijrksDWUm3SQVhiaOyYBxm6fVEWBKb%2B4XhMdFnC93OV9PS4WKDfY2GjI7UvTuI6KYam0ZXnbF2sEd1panvpIawir0m0%2B89QEDLH0wy4RVPq49s6SVZUcJ%2BEoJAZsC7HIz7gmWeW2gzM%2FoKOXd5C01oiWpjH7qXQ7MwU%2F25%2FOcvd70Z5T74J8pVf2zJqhloh6uj0O1%2B33PVBwG8HK7k6qWllawEodSNsIJuwUyZAX0%2FIViCpPqeEkJNeV61V6nL5S1mCOKsiBYhkFnDM6G9Jwh0fjNNSDNZCc7pJCzxnJmy%2FXpdUycJygPSWeovsZR0Mzu51RUNAplv8TTs1w8RcHk0Go6Wysx3FnJttx1dmq5v6SUsifMoaa0BYVn0YafbB3vUF6LXYzU0FQFZqvkb3t87TH8dpV6Zn1fIta2IUkcSZKebsMYilM17d0VFWgyMyCguyFlLQo%2BwNtaFQHveu1YRvglA1SWgQiNmuq2QU3dWqJKaS5awxkKdyY98PYJX1geIeFFalypOzV005mhnfuRPmUiWr5kWnu%2F0ycEetTI8ecmWZAlrXPwyeW81EXrHFdV%2FytinoS4dztHW%2BoXYlklDoD3Pcx3ojUSY3qjtRLR8U7fqa1SOSe0tYU2IZiY%2FIpMDb51QXNtXxj4fqnMoR8%2FW1tDWNgGBMEjLZ9wwlHPXmoBHmD6kbh7WZODJWxh5wDlZvXLXfcYeS1bl0ElHuYyqfagFYOyr1WMG2JJVedTsCKsMNpm8vpWI7yhzuXQxYzdDdRZytL10BVuaJgQ68nyBA72p2sTpMbK6bjjnGrMAZdjxtoRVAdEaSWsXfJUxcaeSChDZS5MgIKQF6I0O4cRKVYWsQLjavk2uhFKaJ45WxuXw1c4B3cvMqw8XlD7ZhUNq3uDN9Hzpy7Y0zQhk8nweQw9VIC3NhGssWU3eS%2BwIa3KM0JH3ljmEu0pVlXWsaER1WLIqhY4tKyJQgbS0T7hyqNt9uFjXHssjYB%2B6l8fm8BV5W0Og7sMFR05%2B5Ss135LVEUDsWWkE5LkmQXXIKh3jarzpM5ZYshqHyCSndoQ1CUDjL49NDPwbBhOBdrpT1c1PfZx%2BNb6OPbcIVELgvG%2FxySfv84It6BzX%2FfmmbjO346qEgb1mEbAIWAQsAhYBi4BFwCJgEbAIWAQsAhaBOhCI5BnWJffw740c8JaDcGFgE9Mb5PDAYHfbk3XYaJskBIHsKn4%2FlL6FiWeLycT0kvbVncPL6bmEuGDNrAOB7MDIpexTN4hPDuLuY6vX5q7e3EW%2FrkNcxSahE1YmP3InEX2ylFYGb%2FMd92N2z71S6CS37Pw1fNIJWq8jYHEZLx7ao9Qyu4N1GXQSWjz%2FG%2FzvHd%2F7rgM6t6QLPn9lsLftMyWv1VkYGmFVu5WW5NoBaoFNDK4zYjFrdvFafrs%2B5A0R0XsrmcbMz6spbscPltFrlerZa8lAoIYZ%2FBv2KrVkWxeNhOFZKPOwzl7FU4PNSqvY909m%2B0p%2B1ajDYbhgZbQKgc4BPt0%2FpLdORlZin9SRukJwrbLX6g0HgbHVKDZVmLl%2FWJHsBSrcIBxxuLCBk4ZHWGLIGa5%2BQrb%2Bq8kOu15UTXDFrXJAVqyfJiB4XlW1fYwXyVHtdv5R1YjFqmIDS%2BcUfumpy164kQ424lBDhHXhSp4%2BbZp%2BvGayGrOYGfvh88LC8rZCI07Yts1FoPNunu0f0kM1k1Ux7sBLzhTVsel6eqm5llttjSCQWT2SgUOPN7A4YeHAAbXwh7fQ%2FnrtqPsv4Zw8Hz9lmrexXrISg8VxcuiJAIh6PbDtmopAQFYH6xhZjbNSiM4%2FqJ8WWeOK7WmMEejoG7lE7tUGyEq8ywhnCHfU62pdI6wPreITp7veRgJdUK%2Fio9oxDvrMVwz1tj11VLn9EisEFvTzWR7rYSKcHoZhzHjVJdW%2BsYdeDEOelRENAmNktYGAtjA0MPjZ%2FZ674JkbaU%2Bt8momrHn9fIoLbxOBgnyoWhWWqy%2B7yxCwZLDH3VCuji1vHQLZr%2FN7uU0PESHUh%2Bay2oVLaq4lrdbFtpLmbL%2B3iIGHwyKroi4Gb9%2FvuR21klZNhDVGVpsJNKeoONQjwwNhsSWtUFFtWJiQFaboLQBmNiyshAC7RE8JUGJQJGQFxiMguFGYI6Tlwe3c0kO7q5Vf9TMs2ZrbhRcdWYnFAgzjkY4Bb0m1Dth60SKQ7eM5UZJVEHYZtU3RWwJd0bpjpVeJQHAPRkhWQdxB5wmnCLdUaRaqIqxg7oznbYlsZDXeWoLrMB6ypDUelNacy6JzIL05qpHVBK9mii5LWhNQacHXzIB3ldyDUY2sxrsUcIrnbal2ft6kfwllvg37ehiEs8YrasK5XTa2CSCXU1FhhcxyTcIptxt5hINjnVKErMC4n5q9fDrjRWeKmjtZJkTFEVZxcmALyErgVgKcbAFeJ%2Fa2WZ0ISBbCJGuQ1ym5imaEU0S3zYSoAquQqwT3WivISvwgnCWZEMI5ldwqS1jBfJt6ZjJX0lbjNWF5h7DOklaNwDVQXYhCUqeqSbtoQE3FpjZ9qyI8kVwc27dAEtgn%2FdcViQEiVEiLK8%2FPK0lYMt9GJvbVO5M5TIeKpCWAhinXyjoWgWKOWLX76B0rIcQSwvFCnGJTiFKtqBIIFDdZaSlZjdlVnFQsHFTC1GMfussrbI8loTWcyYGllNZaNkZad8mWW7W2tfWrQ0CyDRzojbEgq6LJo6S10ZJWEZDwj3JPldsRKnxt1UkU7hEOCqbTTGhy1PAv6vk2E3TX9ZWIlm%2FqVn11NbaNSiIgZCVpFyCEklFfUkkDhTbntAHwKjStcs%2FNChIiv3TMfp%2BH%2FxI2Y75NGO7JpqayI3MYsqwMoJgjFleykhgVc07FVhuzcBCQe6iKDYLDUVa%2FlJkT5%2BcFI6yArJxgJnOwxGn98pvZkv52sEd9uZkaTdOV7fMWwkGiUqEIWLipx%2F1fpsWimf5k%2BvRnyeEvNlNng7re8Bx10eZP0E%2Bd89fwcXD0YwASRFbiPv%2FXzMDIlxoEIrXNs33enyWNrIKoA49n%2B70PpzZwDTqe7Rv5csLISjw%2BWfn6UTlxTvD8vwLw7gZxaElzYvrbTH7kKy1RnmClmbz3ETh4JMEufC%2FT75VbPz7BbkVrekffyNfg0N9EqyUa6QT8frZf3%2BIAfqIDT0Sflo0vooHJPKmZvPdRIjyUdM8IeDjb5y1Nuh%2FNsr9jYGSl49AtzdIXjR6%2BwiGis6MR3jypsktPJu%2Btbp7GZGqStAsifCeZ1pew2sH9QSpJiUu26AgC2bx3l8Mk%2F6SS%2FWG8T94Sesn2YtR6IvRKYMB81FQNE3wLw4di2kWQ8hSGwHjICNK3LGmVCQYzBfcEwYhJ1z7gOMz8szLuJq%2BYsCwzoO9KnuHRWpzJex9XhG%2FHYSZz2J6KT8T4bvuA95dhy066vGy%2FXgtDyEpiQcBzDoiMusEJuL4j792T9M4Wlv3ZvO4hwt1hyYurHMW4J9uvb4irfc22K9vv3QvCx5utN0p9BPSPzsPq92Qt9QVRKmu2bAbuK%2FS4f9FsvXHS19GvlzvgVXGyKWpbNKh3uEflo9YTZ%2FnZvHcfCH8eZxtrtY2B7xd63CuCme67p6srmflfahUS5%2FoEXJPp974bZxujtG30FXC6yErwVOC%2Bzn59c5TYxll2Nu89aBpZ%2BcT%2FvN9TAQEffkAd%2Bk44MYkqMx7G62ppYQUZ8XKhGlgl7YKI76imrql1mOm2Qk6lZrpLZgW7mKXXE8Go5cUn7rBzmLCk48p%2BYbMo2BEnnO27YnI3MLABO9XiNJBWdkB%2FDsxfiAn0LTUjLaR1%2FhpuO0Fr2dlmUUsBD1m5D966i91Ld%2BRoX1H04eRnKZALr7PbKRWLFUw4BoE8TT8igTXBn3I%2BZPIjd1iyOoKOjDIzA%2Fr2IyXmnQVk5WnZM9A4sjp0wF0wnqwkekcRlhRIBakIwKjt4yWgJ3h6w9mrOJZLqDR6KwlZEZFdxWICkMS8IiDyCeUmfJW%2BLH2aCKatYlEQDiq1pf1RfwnHB1HAeKfSj5kIxi89ddkLN9LB8f4m%2BVxm%2BcvE2ST7ELXtzHxnIdd2W9R6miX%2FwpU8fdo0%2Fbhs%2F94snc3Qw4ynXtHqinL3Z1nCEuMODzcNZPADB9TCUgzejKCEqcOSVfVoMqOvkHOXV98injWFrKZM8zY6IKOWjxay2uuqRdu6aKQc8hUJSxqZ%2FECv3LCzHFixKpe0i369xqSZzE3Bl7F2MOcmdoKpvBibSd6TxpEVsGGvUksqkZX0j2OeYU3sNIGAnWpxMD1g4sUEf5eAy6%2BUdIDEuTFKVussWdUROcKypOacFt%2FiG0dWMvVop1o8GVlJtCcdYR3uEutZZXbp%2Bwi46nCZAScT53nE3qUjZGX3a2wkWIx7B3vUdUEmYiNymtTW2HmSwAOFmeoaLCVdDZTVE5ZIY6bMgJZdYU0jre37PbfjmRtpTzWgtayOoT8arcKT5WbpVlfHnbTm9fMpLoL5kee1Cqso9NaDf22EJVYb%2BgvP4O0e3M4tPbQ7iuA0LFPI6nX9kGkzmRvGpUEBwU1Twy98g%2Bpqbj5GVpsJNKfmxnFuUOcIt3bCEhAMfeDL4B1QbqbQRbviFGtT0y7igrE8ny3MUldW%2B7ekWXZn1vBMaK9gIFmtHexRXfWMbOsjrLGImbQ4WLETMvPzcN15cSGtgKxO04%2BYNpO5iHdcjnHLOb14Lb9dH%2FKGiOi9ccEoDDsanVrSEGGJAybOAxLSUlPcjh8so9fCCFK9MkydUlIvHlG3k5zTal6tR22HkJV%2FSG8FoeR27VHrj0p%2Bo2Qldk06rWEy42Uinswinqxekq7Lr5p0GOk4rbL7cNqFYTlircKzGr3F9C35oaimfhR1Ogf4dDPJSjINGp%2B02zBhSdAk5cH3DVshgHCWdBzpQFF0zEoyhazOcPUTBqZFVXI7FtcE81blnHbezbN91k%2BbN7Liz4eVFtXwX8LxvczEdZgYeMmZojo2XU8vjfc1qnNTc8SiwitCuYVm5pwGZHVQP02Epv9ARoihvJ8LdV2yUAlLHDeStBivOlPVRVGTlqlpF1HeEBHLLjQj53RBP5%2FlsR42jayIaPmmbtUXZoxCJywxrnNA9zKzUfsEMuNVl1T7xh56McwAFGUV0y4IZNTiiUX%2FknostYhcmL6MkdVWIrTseWmY%2FhRlRUFWIjsSwhLBHXlvGRHWmLS1FDNec0nNDZu0TE27KHbepB8lfUsWtpy4mFyjfmW%2Fzu%2FlNj1kElmxzNJkdA3l3LWN4lOqfWSEJcpk806HsM400qIR1TF4Mz1fCtBay0xNu6gVh7jXDzvnNNvHc%2BBoWSRzZtx9r9Y%2BISufcd1wzr232ja11gvlLWE5pYHhDKM2uAx%2BDafozZkB%2FsNyfldbfuHdfKpL3hCBjMoR88E%2FYeLnqsUhCfXkr%2Fp05RXkB6ZRe9tX8zm%2Bo4dNIivBJGqyEh2REpYoKOTcdRpm7ZEGYBazHsqu4vfX23kl7WLKIW%2BQmM6pV0Yc2zFj3VBP2%2FsL3W3nAvh2HG2s1yYi%2BoAkITdCWvP7%2BI%2BUo4cc4NR67YhjOyZ8LMqRVdHnSP8SFpXIsWPAW%2BL4WA%2BCO7480eeM3QzVWcjR9lr8CHLEPG%2BLaWkXmJjQam6ifF05px15vgDQGx3CibX0l1jXZXi%2Bg6VD3e7DzbAz8hFW0YnAIcJiMMzZH5BwCkMPjXbEoqeVj8HseTPJShJaj15fioiDMkYkD2ArIx3d1SAZ2fO2BD88VaqRPuJAbzKNrEBY3CyyEqibRliibLDH3SAOMlB2zeYq4x%2BbatIBpSNWQ1rFtAvTRlaSIxYsO0zExwRGSCvn3iB1jrmW4IIghp63pZr0rfY8z5U%2BAkLyVrctE6PgHiYsDu7pMnWiKG4qYYkD4iD7vAgMY3atkY4oHVI6ZrkgBWRlZtpFVTliJuecVkrfGiOrjSaRldy7cg83m6zk3mo6YYnSod62p9jnywwkrY2lSKuYI0bA7HKElsTyWrfOknwy0xLlJe9P8v9KkVZm9UjGgd5IhOlJjG8pm5mxX%2B5duYdLXY%2B6rCWEJU4VlrcVxHEBIGonmyVfOqZ0UOmoRZ0yk9mXHDHDyApEf1dPQutoGzJqN2aJbUBad%2FPhH6SOvpFLyCFJYDeKrHyoBXLvFvt3s49Ne0tYzrH5q%2Fki19FPGDVkBg744JUM51cO8%2BdMmskscQwjoTXbr28D%2BKvl%2BkUiyxn%2F5jv0BdL%2BbHLoU4n0oZzRjH0a6tLhHG0tV6UZ5S0nLHHSyNe9zYheC3SEmSNmYs5pC0ISuUqfsQdQC4Zy9GzkyiZREAvCEhszeT5PpggY9dp3EvCTdDmqHDHJOXUIdyUJi1TZWudcw6gwig1hiYNCWjT6%2Brfh9IeoAEuj3KhzxExMlDeinzB2g9X8wV7aERd%2FYkVYAoqJSaFxCXY9dkRNVkWbTEyUL%2FqW0OMu%2BCoTJ7ISHGNHWGKUictuJLTTaiZcU%2Bh2H2iG%2FZkB7ypi3AdANUOf1VEaAVlGKcwVSUprqa80loQlrpi6sFl9YWpBqybniBU9DHJOGQ9Z0ioi0txjVGu%2BheVFy%2BZhTeaALJIni%2BXJSp%2BT1bXXQ0ZA8j2bnCNW9EDy0nzClUblnBadi%2FlxbFXd0BeoDNPt2I6wik4Gs8QP6SHjJl4WHYzZUXLECFjSirSL8VBk%2B71FDDxMQMu23Bpvj%2Bnnzd5spV48YzvCKjokGz84pC4CI5K11It67FFmhLYuR2wi%2FkbmnE50Mi7fGS%2FKPRb1JithuBv7EVbRSVN3wy361%2BpjkCLl88JWpl2UwkDSnCTFBYSppa7bsgYRELKaoua2epfzar2I%2FQir6IgAKsDKNvLFMnsMCQHGvlbniJXzxMSc03K%2BNrtc7qUkkZXgk5gRVjGYwaJp2isEi6gVC%2B2xfgRGyaozDmkXlZyQVTAU9JOG5ZxWcjnSawyua9XUSI2qQnjiCEt8GttpZrMlrSoiXKFKnHLEKph5%2BJLNOT0MRUMnDN7uwe3c0kO7GxLUgsaJJCzByW6P1WBviVmOWLXe2PStapEqXU%2FIar%2FndjxzI%2B0pXSPepYl5hjURRvl1EOBlv7iJ1%2Bz3SRHYJTlitW6eManUJlQIbGY1H5LnZj81ITC2t2JiyUqcTewIqxgp2eJ9JnlPOqCyyxMX69pjgMAuHFLzwtoItlWY2pzT2pD3wVt3sXtp2LtX12ZF47UTO8Iqui4BOHTAXSABKZbZY2kEJO3CBLIS74Kk3ENqXuBTaXdt6REECnKPJJ2sxJ3Ej7CKMblwJU%2BfNk0%2FLqvUFMvs8QgCY2kX7ZLydKQ0%2BWdjOafDRDg9%2Bd5E4kHhl5667IUbyYhNX4whLAn12at46qA5Wb8AAAVoSURBVDuVfowIl0QS%2BoQKTUraRb3wBulbsm6%2BJa2jIGTGU69odYUpZCXOJf4v4fgISWD2ukpy0DaML0%2F1eYLSLuqNU5C%2BNVVdJMRcrwzT2sk9IPeCSWQlMTKKsMShbV00gp1KNmu1pDWWdrGpm4xf8cLmnB6h3KDv71SLg3vhSLERZ8YRlkSlsIK8gLQYDxsRpTqcSGLaRR1uHtVEiDnt6VssfX6nWhzcA0ehY8YXo55hHROS9awyu%2FR9BFx1zDWDC5KadhFWSIL0Lc%2FbEmwnH5bQBMhh4IHCTHUNlpJOgLl1mWg2YQkkzJTt1%2BtAuLYuhBLWKMlpF2FCnbqcU8a9gz3qOhBxmDjGTZb5hCWIp4S0kp52EfbNkZr0rZSQlfQPI59hHdPxiTj49WGsPeaaIQUmpF2EHYpUpG8x1qZhZFXsG%2BkYYRW9DfY%2B9FYToXdcUeJPTUm7iCoQpqZvMaOvkHOXR4VbHOWmY4Q1DnkJsAR6XFHST41Ju4gqECambzHznWkjK%2BkfqRthFW%2BKTH7kDiK6tfg9iUcTZzJHGQdT0rdGyarttiixiqvs1BKWBCQzoG8n5hVxDU4lu4SsZCaziZMDK%2Fnd6LXkp2%2FR7YM96guN4pDU9qkmLAlaJq9vJeI7khTAIO1CqSWWrOqL2vlruO0ErWULsUX1SWhNK2a6rZBTd7ZGezy0pu4Z1kTYpQMQUWIeXBZnMluymhjJ6r8H2CUsfUv6aNrJSiKc%2BhFWsZt3DuheZl5d%2FB7HYxpmMjcT98wKdjFLryfCkmbqrVWXz7hhKOcaOyWnFjwsYY1DqyPvLSPCGoohkQdk1a2uNn0m87hwNOc0xulbLFOeGV2WrI50BUtYR7AIztrz3rUOYV2sSCtFM5knhKM5X2OYCSFk5TOuG8659zYHhGRosYRVIk6ZAe8qMO6PBWmNzmTusiOrEoEKsyhGpCVkBcLVhW73gTBdNEFW6h%2B6lwpi0FEIVwNoada7THAdzLk3WLIqFaWQy%2BKTvqUtWZWPrR1hlccGHQPeEsfHehDcCtUiuZTmyYGRAFqD0Ey%2BRelbDM93sHSo203tOm6ThcmOsCogFHQcgqxeOlKhWuiXLFmFDmlNAkfTt7ip852CPkZYbMmqcqgsYVXGB4M97gb2WdaJbxJp0e2FXDrTLiYJRVMvBzFg%2FmIzlErfkj4mfa0Z%2BpKsw%2F4lrDJ6HX0jlzhEj4EwtcomNVezM5lrhizyBpFnQjAO%2BsxXDPW2PRW5MwYosIRVQxAzq0cycOhxIkyvoVlVVWUm86ZuZdIqElX5nYRKUZEWM%2FbD54WF5W2FJOAQBxstYdUYhfY8z3WgN4ZJWnYmc41BaEH10DMhGPs01KXDObI7ltcQT0tYNYBVrCqkpaCfBOH4Ylk9RzuTuR7UWtcmtEwIxj4fqnMoR8%2B2zptkaraEVWfcOvJ8AaA3OoQT6xFhZzLXg1rr2zSaCeEz9gBqgSWr%2BmJpCas%2B3IJWmTyfR9CbQDilRjGaCdfYmcw1ohaT6nWTFmM3Q3UWcrQ9Jq4kzgxLWA2GLNvHc0B6c9WkZScHNoh4PJpL%2BhYx7gOgqrRoF3yVGeylHVXWt9VKIGAJqwQotRYFpOVoedMzs2JbhgfCYjvfpiJKiblYQybELhxS8wZvpucT41xMDbUTR0MIjPxqakfN9X3%2BaVlxjN0%2B80JLVmURStwFmZVO4EWjz6VKmy%2B7cEvfsGRVGp9aS%2B0Iq1bEJqnfPqC7iP1bHNB7pCozXiOiVXuUk9%2FWRb%2BbpLm9nEAEZMPWNvJ7wSwr184K4g7%2BGZi%2BVsi59yTQJWty2hBoX8vvnt%2FP56bN77T7KzHvvJtnpx2HqPz%2F%2F6omxnsqyGCHAAAAAElFTkSuQmCC%22%2F%3E%20%20%3C%2Fdefs%3E%3C%2Fsvg%3E"; + +var _a$3; +var NETWORK_POLLING_INTERVALS = (_a$3 = {}, + _a$3[SupportedChainId.ARBITRUM_ONE] = ms(templateObject_1$$ || (templateObject_1$$ = __makeTemplateObject(["1s"], ["1s"]))), + _a$3[SupportedChainId.ARBITRUM_RINKEBY] = ms(templateObject_2$J || (templateObject_2$J = __makeTemplateObject(["1s"], ["1s"]))), + _a$3[SupportedChainId.OPTIMISM] = ms(templateObject_3$B || (templateObject_3$B = __makeTemplateObject(["1s"], ["1s"]))), + _a$3[SupportedChainId.OPTIMISTIC_KOVAN] = ms(templateObject_4$r || (templateObject_4$r = __makeTemplateObject(["1s"], ["1s"]))), + _a$3); +function getLibrary(provider) { + var library = new Web3Provider(provider, typeof provider.chainId === 'number' + ? provider.chainId + : typeof provider.chainId === 'string' + ? parseInt(provider.chainId) + : 'any'); + library.pollingInterval = 15000; + library.detectNetwork().then(function (network) { + var networkPollingInterval = NETWORK_POLLING_INTERVALS[network.chainId]; + if (networkPollingInterval) { + console.debug('Setting polling interval', networkPollingInterval); + library.pollingInterval = networkPollingInterval; + } + }); + return library; +} +var templateObject_1$$, templateObject_2$J, templateObject_3$B, templateObject_4$r; + +var OVERLAY_READY = 'OVERLAY_READY'; +var CHAIN_ID_NETWORK_ARGUMENT = { + 1: undefined, + 3: 'ropsten', + 4: 'rinkeby', + 42: 'kovan', +}; +var FortmaticConnector = /** @class */ (function (_super) { + __extends(FortmaticConnector, _super); + function FortmaticConnector() { + return _super !== null && _super.apply(this, arguments) || this; + } + FortmaticConnector.prototype.activate = function () { + return __awaiter(this, void 0, void 0, function () { + var Fortmatic, _a, apiKey, chainId, provider, pollForOverlayReady, _b, account; + var _this = this; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + if (!!this.fortmatic) return [3 /*break*/, 2]; + return [4 /*yield*/, Promise.resolve().then(function () { return fortmatic; })]; + case 1: + Fortmatic = (_c.sent()).default; + _a = this, apiKey = _a.apiKey, chainId = _a.chainId; + if (chainId in CHAIN_ID_NETWORK_ARGUMENT) { + this.fortmatic = new Fortmatic(apiKey, CHAIN_ID_NETWORK_ARGUMENT[chainId]); + } + else { + throw new Error("Unsupported network ID: " + chainId); + } + _c.label = 2; + case 2: + provider = this.fortmatic.getProvider(); + pollForOverlayReady = new Promise(function (resolve) { + var interval = setInterval(function () { + if (provider.overlayReady) { + clearInterval(interval); + _this.emit(OVERLAY_READY); + resolve(); + } + }, 200); + }); + return [4 /*yield*/, Promise.all([ + provider.enable().then(function (accounts) { return accounts[0]; }), + pollForOverlayReady, + ])]; + case 3: + _b = __read.apply(void 0, [_c.sent(), 1]), account = _b[0]; + return [2 /*return*/, { provider: this.fortmatic.getProvider(), chainId: this.chainId, account: account }]; + } + }); + }); + }; + return FortmaticConnector; +}(FortmaticConnector$1)); + +var RequestError = /** @class */ (function (_super) { + __extends(RequestError, _super); + function RequestError(message, code, data) { + var _this = _super.call(this, message) || this; + _this.code = code; + _this.data = data; + return _this; + } + return RequestError; +}(Error)); +var MiniRpcProvider = /** @class */ (function () { + function MiniRpcProvider(connector, chainId, url, batchWaitTimeMs) { + var _this = this; + this.isMetaMask = false; + this.nextId = 1; + this.batchTimeoutId = null; + this.batch = []; + this.clearBatch = function () { return __awaiter(_this, void 0, void 0, function () { + var batch, response, json, byKey, json_1, json_1_1, result, _a, resolve, reject, method; + var e_1, _b; + var _this = this; + var _c, _d, _e; + return __generator(this, function (_f) { + switch (_f.label) { + case 0: + console.debug('Clearing batch', this.batch); + batch = this.batch; + batch = batch.filter(function (b) { + if (b.request.method === 'wallet_switchEthereumChain') { + try { + _this.connector.changeChainId(parseInt(b.request.params[0].chainId)); + b.resolve({ id: b.request.id }); + } + catch (error) { + b.reject(error); + } + return false; + } + return true; + }); + this.batch = []; + this.batchTimeoutId = null; + _f.label = 1; + case 1: + _f.trys.push([1, 3, , 4]); + return [4 /*yield*/, fetch(this.url, { + method: 'POST', + headers: { 'content-type': 'application/json', accept: 'application/json' }, + body: JSON.stringify(batch.map(function (item) { return item.request; })), + })]; + case 2: + response = _f.sent(); + return [3 /*break*/, 4]; + case 3: + _f.sent(); + batch.forEach(function (_a) { + var reject = _a.reject; + return reject(new Error('Failed to send batch call')); + }); + return [2 /*return*/]; + case 4: + if (!response.ok) { + batch.forEach(function (_a) { + var reject = _a.reject; + return reject(new RequestError(response.status + ": " + response.statusText, -32000)); + }); + return [2 /*return*/]; + } + _f.label = 5; + case 5: + _f.trys.push([5, 7, , 8]); + return [4 /*yield*/, response.json()]; + case 6: + json = _f.sent(); + return [3 /*break*/, 8]; + case 7: + _f.sent(); + batch.forEach(function (_a) { + var reject = _a.reject; + return reject(new Error('Failed to parse JSON response')); + }); + return [2 /*return*/]; + case 8: + byKey = batch.reduce(function (memo, current) { + memo[current.request.id] = current; + return memo; + }, {}); + try { + for (json_1 = __values(json), json_1_1 = json_1.next(); !json_1_1.done; json_1_1 = json_1.next()) { + result = json_1_1.value; + _a = byKey[result.id], resolve = _a.resolve, reject = _a.reject, method = _a.request.method; + if ('error' in result) { + reject(new RequestError((_c = result === null || result === void 0 ? void 0 : result.error) === null || _c === void 0 ? void 0 : _c.message, (_d = result === null || result === void 0 ? void 0 : result.error) === null || _d === void 0 ? void 0 : _d.code, (_e = result === null || result === void 0 ? void 0 : result.error) === null || _e === void 0 ? void 0 : _e.data)); + } + else if ('result' in result && resolve) { + resolve(result.result); + } + else { + reject(new RequestError("Received unexpected JSON-RPC response to " + method + " request.", -32000, result)); + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (json_1_1 && !json_1_1.done && (_b = json_1.return)) _b.call(json_1); + } + finally { if (e_1) throw e_1.error; } + } + return [2 /*return*/]; + } + }); + }); }; + this.sendAsync = function (request, callback) { + _this.request(request.method, request.params) + .then(function (result) { return callback(null, { jsonrpc: '2.0', id: request.id, result: result }); }) + .catch(function (error) { return callback(error, null); }); + }; + this.request = function (method, params) { return __awaiter(_this, void 0, void 0, function () { + var promise; + var _this = this; + var _a; + return __generator(this, function (_b) { + if (typeof method !== 'string') { + return [2 /*return*/, this.request(method.method, method.params)]; + } + if (method === 'eth_chainId') { + return [2 /*return*/, "0x" + this.chainId.toString(16)]; + } + promise = new Promise(function (resolve, reject) { + _this.batch.push({ + request: { + jsonrpc: '2.0', + id: _this.nextId++, + method: method, + params: params, + }, + resolve: resolve, + reject: reject, + }); + }); + this.batchTimeoutId = (_a = this.batchTimeoutId) !== null && _a !== void 0 ? _a : setTimeout(this.clearBatch, this.batchWaitTimeMs); + return [2 /*return*/, promise]; + }); + }); }; + this.connector = connector; + this.chainId = chainId; + this.url = url; + var parsed = new URL(url); + this.host = parsed.host; + this.path = parsed.pathname; + // how long to wait to batch calls + this.batchWaitTimeMs = batchWaitTimeMs !== null && batchWaitTimeMs !== void 0 ? batchWaitTimeMs : 50; + } + return MiniRpcProvider; +}()); +var NetworkConnector = /** @class */ (function (_super) { + __extends(NetworkConnector, _super); + function NetworkConnector(_a) { + var urls = _a.urls, defaultChainId = _a.defaultChainId; + var _this = this; + invariant(defaultChainId || Object.keys(urls).length === 1, 'defaultChainId is a required argument with >1 url'); + _this = _super.call(this, { supportedChainIds: Object.keys(urls).map(function (k) { return Number(k); }) }) || this; + _this.currentChainId = defaultChainId !== null && defaultChainId !== void 0 ? defaultChainId : Number(Object.keys(urls)[0]); + _this.providers = Object.keys(urls).reduce(function (accumulator, chainId) { + accumulator[Number(chainId)] = new MiniRpcProvider(_this, Number(chainId), urls[Number(chainId)]); + return accumulator; + }, {}); + return _this; + } + Object.defineProperty(NetworkConnector.prototype, "provider", { + get: function () { + return this.providers[this.currentChainId]; + }, + enumerable: false, + configurable: true + }); + NetworkConnector.prototype.activate = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, { provider: this.providers[this.currentChainId], chainId: this.currentChainId, account: null }]; + }); + }); + }; + NetworkConnector.prototype.getProvider = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.providers[this.currentChainId]]; + }); + }); + }; + NetworkConnector.prototype.getChainId = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.currentChainId]; + }); + }); + }; + NetworkConnector.prototype.getAccount = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, null]; + }); + }); + }; + NetworkConnector.prototype.deactivate = function () { + return; + }; + /** + * Meant to be called only by MiniRpcProvider + * @param chainId the new chain id + */ + NetworkConnector.prototype.changeChainId = function (chainId) { + if (chainId in this.providers) { + this.currentChainId = chainId; + this.emitUpdate({ + chainId: chainId, + account: null, + provider: this.providers[chainId], + }); + } + else { + throw new Error("Unsupported chain ID: " + chainId); + } + }; + return NetworkConnector; +}(AbstractConnector)); + +var FORMATIC_KEY = process.env.REACT_APP_FORTMATIC_KEY; +var PORTIS_ID = process.env.REACT_APP_PORTIS_ID; +var network = new NetworkConnector({ + urls: INFURA_NETWORK_URLS, + defaultChainId: 1, +}); +var networkLibrary; +function getNetworkLibrary() { + return (networkLibrary = networkLibrary !== null && networkLibrary !== void 0 ? networkLibrary : getLibrary(network.provider)); +} +var injected = new InjectedConnector({ + supportedChainIds: ALL_SUPPORTED_CHAIN_IDS, +}); +var gnosisSafe = new SafeAppConnector(); +var walletconnect = new WalletConnectConnector({ + supportedChainIds: ALL_SUPPORTED_CHAIN_IDS, + rpc: INFURA_NETWORK_URLS, + qrcode: true, +}); +// mainnet only +var fortmatic$1 = new FortmaticConnector({ + apiKey: FORMATIC_KEY !== null && FORMATIC_KEY !== void 0 ? FORMATIC_KEY : '', + chainId: 1, +}); +// mainnet only +var portis = new PortisConnector({ + dAppId: PORTIS_ID !== null && PORTIS_ID !== void 0 ? PORTIS_ID : '', + networks: [1], +}); +var walletlink = new WalletLinkConnector({ + url: INFURA_NETWORK_URLS[SupportedChainId.MAINNET], + appName: 'Uniswap', + appLogoUrl: UNISWAP_LOGO_URL, + supportedChainIds: [SupportedChainId.MAINNET, SupportedChainId.POLYGON], +}); + +/** + * Returns the ENS avatar URI, if available. + * Spec: https://gist.github.com/Arachnid/9db60bd75277969ee1689c8742b75182. + */ +function useENSAvatar(address, enforceOwnership) { + if (enforceOwnership === void 0) { enforceOwnership = true; } + var debouncedAddress = useDebounce(address, 200); + var node = useMemo(function () { + if (!debouncedAddress || !isAddress(debouncedAddress)) + return undefined; + return namehash(debouncedAddress.toLowerCase().substr(2) + ".addr.reverse"); + }, [debouncedAddress]); + var addressAvatar = useAvatarFromNode(node); + var ENSName = useENSName(address).ENSName; + var nameAvatar = useAvatarFromNode(ENSName === null ? undefined : safeNamehash(ENSName)); + var avatar = addressAvatar.avatar || nameAvatar.avatar; + var nftAvatar = useAvatarFromNFT(avatar, enforceOwnership); + avatar = nftAvatar.avatar || avatar; + var http = avatar && uriToHttp(avatar)[0]; + var changed = debouncedAddress !== address; + return useMemo(function () { return ({ + avatar: changed ? null : http !== null && http !== void 0 ? http : null, + loading: changed || addressAvatar.loading || nameAvatar.loading || nftAvatar.loading, + }); }, [addressAvatar.loading, changed, http, nameAvatar.loading, nftAvatar.loading]); +} +function useAvatarFromNode(node) { + var _a; + var nodeArgument = useMemo(function () { return [node]; }, [node]); + var textArgument = useMemo(function () { return [node, 'avatar']; }, [node]); + var registrarContract = useENSRegistrarContract(false); + var resolverAddress = useSingleCallResult(registrarContract, 'resolver', nodeArgument); + var resolverAddressResult = (_a = resolverAddress.result) === null || _a === void 0 ? void 0 : _a[0]; + var resolverContract = useENSResolverContract(resolverAddressResult && !isZero(resolverAddressResult) ? resolverAddressResult : undefined, false); + var avatar = useSingleCallResult(resolverContract, 'text', textArgument); + return useMemo(function () { + var _a; + return ({ + avatar: (_a = avatar.result) === null || _a === void 0 ? void 0 : _a[0], + loading: resolverAddress.loading || avatar.loading, + }); + }, [avatar.loading, avatar.result, resolverAddress.loading]); +} +function useAvatarFromNFT(nftUri, enforceOwnership) { + var _a, _b, _c, _d; + if (nftUri === void 0) { nftUri = ''; } + var parts = nftUri.toLowerCase().split(':'); + var protocol = parts[0]; + // ignore the chain from eip155 + // TODO: when we are able, pull only from the specified chain + var _e = __read((_b = (_a = parts[1]) === null || _a === void 0 ? void 0 : _a.split('/')) !== null && _b !== void 0 ? _b : [], 2), erc = _e[1]; + var _f = __read((_d = (_c = parts[2]) === null || _c === void 0 ? void 0 : _c.split('/')) !== null && _d !== void 0 ? _d : [], 2), contractAddress = _f[0], id = _f[1]; + var isERC721 = protocol === 'eip155' && erc === 'erc721'; + var isERC1155 = protocol === 'eip155' && erc === 'erc1155'; + var erc721 = useERC721Uri(isERC721 ? contractAddress : undefined, id, enforceOwnership); + var erc1155 = useERC1155Uri(isERC1155 ? contractAddress : undefined, id, enforceOwnership); + var uri = erc721.uri || erc1155.uri; + var http = uri && uriToHttp(uri)[0]; + var _g = __read(useState(false), 2), loading = _g[0], setLoading = _g[1]; + var _h = __read(useState(undefined), 2), avatar = _h[0], setAvatar = _h[1]; + useEffect(function () { + setAvatar(undefined); + if (http) { + setLoading(true); + fetch(http) + .then(function (res) { return res.json(); }) + .then(function (_a) { + var image = _a.image; + setAvatar(image); + }) + .catch(function (e) { return console.warn(e); }) + .finally(function () { + setLoading(false); + }); + } + }, [http]); + return useMemo(function () { return ({ avatar: avatar, loading: erc721.loading || erc1155.loading || loading }); }, [avatar, erc1155.loading, erc721.loading, loading]); +} +function useERC721Uri(contractAddress, id, enforceOwnership) { + var idArgument = useMemo(function () { return [id]; }, [id]); + var account = useActiveWeb3React().account; + var contract = useERC721Contract(contractAddress); + var owner = useSingleCallResult(contract, 'ownerOf', idArgument); + var uri = useSingleCallResult(contract, 'tokenURI', idArgument); + return useMemo(function () { + var _a, _b; + return ({ + uri: !enforceOwnership || account === ((_a = owner.result) === null || _a === void 0 ? void 0 : _a[0]) ? (_b = uri.result) === null || _b === void 0 ? void 0 : _b[0] : undefined, + loading: owner.loading || uri.loading, + }); + }, [account, enforceOwnership, owner.loading, owner.result, uri.loading, uri.result]); +} +function useERC1155Uri(contractAddress, id, enforceOwnership) { + var account = useActiveWeb3React().account; + var idArgument = useMemo(function () { return [id]; }, [id]); + var accountArgument = useMemo(function () { return [account || '', id]; }, [account, id]); + var contract = useERC1155Contract(contractAddress); + var balance = useSingleCallResult(contract, 'balanceOf', accountArgument); + var uri = useSingleCallResult(contract, 'uri', idArgument); + // ERC-1155 allows a generic {id} in the URL, so prepare to replace if relevant, + // in lowercase hexadecimal (with no 0x prefix) and leading zero padded to 64 hex characters. + var idHex = id ? hexZeroPad(BigNumber.from(id).toHexString(), 32).substring(2) : id; + return useMemo(function () { + var _a, _b, _c; + return ({ + uri: !enforceOwnership || ((_a = balance.result) === null || _a === void 0 ? void 0 : _a[0]) > 0 ? (_c = (_b = uri.result) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.replaceAll('{id}', idHex) : undefined, + loading: balance.loading || uri.loading, + }); + }, [balance.loading, balance.result, enforceOwnership, uri.loading, uri.result, idHex]); +} + +var StyledIdenticon = styled.div(templateObject_1$_ || (templateObject_1$_ = __makeTemplateObject(["\n height: 1rem;\n width: 1rem;\n border-radius: 1.125rem;\n background-color: ", ";\n font-size: initial;\n"], ["\n height: 1rem;\n width: 1rem;\n border-radius: 1.125rem;\n background-color: ", ";\n font-size: initial;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg4; +}); +var StyledAvatar = styled.img(templateObject_2$I || (templateObject_2$I = __makeTemplateObject(["\n height: inherit;\n width: inherit;\n border-radius: inherit;\n"], ["\n height: inherit;\n width: inherit;\n border-radius: inherit;\n"]))); +function Identicon() { + var account = useActiveWeb3React().account; + var avatar = useENSAvatar(account !== null && account !== void 0 ? account : undefined).avatar; + var _a = __read(useState(true), 2), fetchable = _a[0], setFetchable = _a[1]; + var icon = useMemo(function () { return account && jazzicon(16, parseInt(account.slice(2, 10), 16)); }, [account]); + var iconRef = useRef(null); + useLayoutEffect(function () { + var current = iconRef.current; + if (icon) { + current === null || current === void 0 ? void 0 : current.appendChild(icon); + return function () { + try { + current === null || current === void 0 ? void 0 : current.removeChild(icon); + } + catch (e) { + console.error('Avatar icon not found'); + } + }; + } + return; + }, [icon, iconRef]); + return (jsx(StyledIdenticon, { children: avatar && fetchable ? (jsx(StyledAvatar, { alt: "avatar", src: avatar, onError: function () { return setFetchable(false); } }, void 0)) : (jsx("span", { ref: iconRef }, void 0)) }, void 0)); +} +var templateObject_1$_, templateObject_2$I; + +function StatusIcon(_a) { + var connector = _a.connector; + switch (connector) { + case injected: + return jsx(Identicon, {}, void 0); + case walletconnect: + return jsx("img", { src: WALLETCONNECT_ICON_URL, alt: 'WalletConnect' }, void 0); + case walletlink: + return jsx("img", { src: COINBASE_ICON_URL, alt: 'Coinbase Wallet' }, void 0); + case fortmatic$1: + return jsx("img", { src: FORTMATIC_ICON_URL, alt: 'Fortmatic' }, void 0); + case portis: + return jsx("img", { src: PORTIS_ICON_URL, alt: 'Portis' }, void 0); + default: + return null; + } +} + +var MetaMaskLogo = "f89237c6bc3f84db.png"; + +var _line$2, _line2$1; + +function _extends$5() { _extends$5 = 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$5.apply(this, arguments); } + +const SvgX = props => /*#__PURE__*/React.createElement("svg", _extends$5({ + xmlns: "http://www.w3.org/2000/svg", + width: 20, + height: 20, + viewBox: "0 0 20 20", + fill: "none", + stroke: "currentColor", + strokeWidth: 2, + strokeLinecap: "round", + strokeLinejoin: "round", + className: "feather feather-x" +}, props), _line$2 || (_line$2 = /*#__PURE__*/React.createElement("line", { + x1: 18, + y1: 6, + x2: 6, + y2: 18 +})), _line2$1 || (_line2$1 = /*#__PURE__*/React.createElement("line", { + x1: 6, + y1: 6, + x2: 18, + y2: 18 +}))); + +var INJECTED_ICON_URL = "data:image/svg+xml,%3Csvg%20width%3D%2218%22%20height%3D%2218%22%20viewBox%3D%220%200%2018%2018%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M9.79261%2016.1108L17.5398%208.36364L9.79261%200.616477L8.25852%202.15057L13.3807%207.25568H0V9.47159H13.3807L8.25852%2014.5852L9.79261%2016.1108Z%22%20fill%3D%22%23333639%22%2F%3E%3C%2Fsvg%3E"; + +var SUPPORTED_WALLETS = { + INJECTED: { + connector: injected, + name: 'Injected', + iconURL: INJECTED_ICON_URL, + description: 'Injected web3 provider.', + href: null, + color: '#010101', + primary: true, + }, + METAMASK: { + connector: injected, + name: 'MetaMask', + iconURL: MetaMaskLogo, + description: 'Easy-to-use browser extension.', + href: null, + color: '#E8831D', + }, + WALLET_CONNECT: { + connector: walletconnect, + name: 'WalletConnect', + iconURL: WALLETCONNECT_ICON_URL, + description: 'Connect to Trust Wallet, Rainbow Wallet and more...', + href: null, + color: '#4196FC', + mobile: true, + }, + WALLET_LINK: { + connector: walletlink, + name: 'Coinbase Wallet', + iconURL: COINBASE_ICON_URL, + description: 'Use Coinbase Wallet app on mobile device', + href: null, + color: '#315CF5', + }, + COINBASE_LINK: { + name: 'Open in Coinbase Wallet', + iconURL: COINBASE_ICON_URL, + description: 'Open in Coinbase Wallet app.', + href: 'https://go.cb-w.com/mtUDhEZPy1', + color: '#315CF5', + mobile: true, + mobileOnly: true, + }, + FORTMATIC: { + connector: fortmatic$1, + name: 'Fortmatic', + iconURL: FORTMATIC_ICON_URL, + description: 'Login using Fortmatic hosted wallet', + href: null, + color: '#6748FF', + mobile: true, + }, + Portis: { + connector: portis, + name: 'Portis', + iconURL: PORTIS_ICON_URL, + description: 'Login using Portis hosted wallet', + href: null, + color: '#4A6C9B', + mobile: true, + }, +}; + +// modified from https://usehooks.com/usePrevious/ +function usePrevious(value) { + // The ref object is a generic container whose current property is mutable ... + // ... and can hold any value, similar to an instance property on a class + var ref = useRef(); + // Store current value in ref + useEffect(function () { + ref.current = value; + }, [value]); // Only re-run if value changes + // Return previous value (happens before update in useEffect above) + return ref.current; +} + +function useCopyClipboard(timeout) { + if (timeout === void 0) { timeout = 500; } + var _a = __read(useState(false), 2), isCopied = _a[0], setIsCopied = _a[1]; + var staticCopy = useCallback(function (text) { + var didCopy = copy(text); + setIsCopied(didCopy); + }, []); + useEffect(function () { + if (isCopied) { + var hide_1 = setTimeout(function () { + setIsCopied(false); + }, timeout); + return function () { + clearTimeout(hide_1); + }; + } + return undefined; + }, [isCopied, setIsCopied, timeout]); + return [isCopied, staticCopy]; +} + +var CopyIcon = styled(LinkStyledButton)(templateObject_1$Z || (templateObject_1$Z = __makeTemplateObject(["\n color: ", ";\n flex-shrink: 0;\n display: flex;\n text-decoration: none;\n font-size: 0.825rem;\n :hover,\n :active,\n :focus {\n text-decoration: none;\n color: ", ";\n }\n"], ["\n color: ", ";\n flex-shrink: 0;\n display: flex;\n text-decoration: none;\n font-size: 0.825rem;\n :hover,\n :active,\n :focus {\n text-decoration: none;\n color: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text3; +}, function (_a) { + var theme = _a.theme; + return theme.text2; +}); +var TransactionStatusText$1 = styled.span(templateObject_2$H || (templateObject_2$H = __makeTemplateObject(["\n margin-left: 0.25rem;\n font-size: 0.825rem;\n ", ";\n align-items: center;\n"], ["\n margin-left: 0.25rem;\n font-size: 0.825rem;\n ", ";\n align-items: center;\n"])), function (_a) { + var theme = _a.theme; + return theme.flexRowNoWrap; +}); +function CopyHelper(props) { + var _a = __read(useCopyClipboard(), 2), isCopied = _a[0], setCopied = _a[1]; + return (jsxs(CopyIcon, __assign({ onClick: function () { return setCopied(props.toCopy); } }, { children: [isCopied ? (jsxs(TransactionStatusText$1, { children: [jsx(CheckCircle, { size: '16' }, void 0), jsx(TransactionStatusText$1, { children: jsx(Trans, { children: "Copied" }, void 0) }, void 0)] }, void 0)) : (jsx(TransactionStatusText$1, { children: jsx(Copy$1, { size: '16' }, void 0) }, void 0)), isCopied ? '' : props.children] }), void 0)); +} +var templateObject_1$Z, templateObject_2$H; + +var VoteOption; +(function (VoteOption) { + VoteOption[VoteOption["Against"] = 0] = "Against"; + VoteOption[VoteOption["For"] = 1] = "For"; + VoteOption[VoteOption["Abstain"] = 2] = "Abstain"; +})(VoteOption || (VoteOption = {})); + +function formatAmount(amountRaw, decimals, sigFigs) { + return new Fraction(amountRaw, JSBI.exponentiate(JSBI.BigInt(10), JSBI.BigInt(decimals))).toSignificant(sigFigs); +} +function FormattedCurrencyAmount(_a) { + var rawAmount = _a.rawAmount, symbol = _a.symbol, decimals = _a.decimals, sigFigs = _a.sigFigs; + return (jsxs(Fragment, { children: [formatAmount(rawAmount, decimals, sigFigs), " ", symbol] }, void 0)); +} +function FormattedCurrencyAmountManaged(_a) { + var _b; + var rawAmount = _a.rawAmount, currencyId = _a.currencyId, _c = _a.sigFigs, sigFigs = _c === void 0 ? 6 : _c; + var currency = useCurrency(currencyId); + return currency ? (jsx(FormattedCurrencyAmount, { rawAmount: rawAmount, decimals: currency.decimals, sigFigs: sigFigs, symbol: (_b = currency.symbol) !== null && _b !== void 0 ? _b : '???' }, void 0)) : null; +} +function ClaimSummary(_a) { + var _b = _a.info, recipient = _b.recipient, uniAmountRaw = _b.uniAmountRaw; + var ENSName = useENSName().ENSName; + return typeof uniAmountRaw === 'string' ? (jsxs(Trans, { children: ["Claim ", jsx(FormattedCurrencyAmount, { rawAmount: uniAmountRaw, symbol: 'UNI', decimals: 18, sigFigs: 4 }, void 0), " for", ' ', ENSName !== null && ENSName !== void 0 ? ENSName : recipient] }, void 0)) : (jsxs(Trans, { children: ["Claim UNI reward for ", ENSName !== null && ENSName !== void 0 ? ENSName : recipient] }, void 0)); +} +function SubmitProposalTransactionSummary(_) { + return jsx(Trans, { children: "Submit new proposal" }, void 0); +} +function ApprovalSummary(_a) { + var info = _a.info; + var token = useToken(info.tokenAddress); + return jsxs(Trans, { children: ["Approve ", token === null || token === void 0 ? void 0 : token.symbol] }, void 0); +} +function VoteSummary(_a) { + var info = _a.info; + var proposalKey = info.governorAddress + "/" + info.proposalId; + if (info.reason && info.reason.trim().length > 0) { + switch (info.decision) { + case VoteOption.For: + return jsxs(Trans, { children: ["Vote for proposal ", proposalKey] }, void 0); + case VoteOption.Abstain: + return jsxs(Trans, { children: ["Vote to abstain on proposal ", proposalKey] }, void 0); + case VoteOption.Against: + return jsxs(Trans, { children: ["Vote against proposal ", proposalKey] }, void 0); + } + } + else { + switch (info.decision) { + case VoteOption.For: + return (jsxs(Trans, { children: ["Vote for proposal ", proposalKey, " with reason \"", info.reason, "\""] }, void 0)); + case VoteOption.Abstain: + return (jsxs(Trans, { children: ["Vote to abstain on proposal ", proposalKey, " with reason \"", info.reason, "\""] }, void 0)); + case VoteOption.Against: + return (jsxs(Trans, { children: ["Vote against proposal ", proposalKey, " with reason \"", info.reason, "\""] }, void 0)); + } + } +} +function DelegateSummary(_a) { + var delegatee = _a.info.delegatee; + var ENSName = useENSName(delegatee).ENSName; + return jsxs(Trans, { children: ["Delegate voting power to ", ENSName !== null && ENSName !== void 0 ? ENSName : delegatee] }, void 0); +} +function WrapSummary(_a) { + var _b, _c, _d, _e, _f, _g; + var _h = _a.info, chainId = _h.chainId, currencyAmountRaw = _h.currencyAmountRaw, unwrapped = _h.unwrapped; + var native = chainId ? nativeOnChain(chainId) : undefined; + if (unwrapped) { + return (jsxs(Trans, { children: ["Unwrap", ' ', jsx(FormattedCurrencyAmount, { rawAmount: currencyAmountRaw, symbol: (_c = (_b = native === null || native === void 0 ? void 0 : native.wrapped) === null || _b === void 0 ? void 0 : _b.symbol) !== null && _c !== void 0 ? _c : 'WETH', decimals: 18, sigFigs: 6 }, void 0), ' ', "to ", (_d = native === null || native === void 0 ? void 0 : native.symbol) !== null && _d !== void 0 ? _d : 'ETH'] }, void 0)); + } + else { + return (jsxs(Trans, { children: ["Wrap", ' ', jsx(FormattedCurrencyAmount, { rawAmount: currencyAmountRaw, symbol: (_e = native === null || native === void 0 ? void 0 : native.symbol) !== null && _e !== void 0 ? _e : 'ETH', decimals: 18, sigFigs: 6 }, void 0), ' ', "to ", (_g = (_f = native === null || native === void 0 ? void 0 : native.wrapped) === null || _f === void 0 ? void 0 : _f.symbol) !== null && _g !== void 0 ? _g : 'WETH'] }, void 0)); + } +} +function DepositLiquidityStakingSummary(_) { + // not worth rendering the tokens since you can should no longer deposit liquidity in the staking contracts + // todo: deprecate and delete the code paths that allow this, show user more information + return jsx(Trans, { children: "Deposit liquidity" }, void 0); +} +function WithdrawLiquidityStakingSummary(_) { + return jsx(Trans, { children: "Withdraw deposited liquidity" }, void 0); +} +function MigrateLiquidityToV3Summary(_a) { + var _b = _a.info, baseCurrencyId = _b.baseCurrencyId, quoteCurrencyId = _b.quoteCurrencyId; + var baseCurrency = useCurrency(baseCurrencyId); + var quoteCurrency = useCurrency(quoteCurrencyId); + return (jsxs(Trans, { children: ["Migrate ", baseCurrency === null || baseCurrency === void 0 ? void 0 : baseCurrency.symbol, "/", quoteCurrency === null || quoteCurrency === void 0 ? void 0 : quoteCurrency.symbol, " liquidity to V3"] }, void 0)); +} +function CreateV3PoolSummary(_a) { + var _b = _a.info, quoteCurrencyId = _b.quoteCurrencyId, baseCurrencyId = _b.baseCurrencyId; + var baseCurrency = useCurrency(baseCurrencyId); + var quoteCurrency = useCurrency(quoteCurrencyId); + return (jsxs(Trans, { children: ["Create ", baseCurrency === null || baseCurrency === void 0 ? void 0 : baseCurrency.symbol, "/", quoteCurrency === null || quoteCurrency === void 0 ? void 0 : quoteCurrency.symbol, " V3 pool"] }, void 0)); +} +function CollectFeesSummary(_a) { + var _b = _a.info, currencyId0 = _b.currencyId0, currencyId1 = _b.currencyId1; + var currency0 = useCurrency(currencyId0); + var currency1 = useCurrency(currencyId1); + return (jsxs(Trans, { children: ["Collect ", currency0 === null || currency0 === void 0 ? void 0 : currency0.symbol, "/", currency1 === null || currency1 === void 0 ? void 0 : currency1.symbol, " fees"] }, void 0)); +} +function RemoveLiquidityV3Summary(_a) { + var _b = _a.info, baseCurrencyId = _b.baseCurrencyId, quoteCurrencyId = _b.quoteCurrencyId, expectedAmountBaseRaw = _b.expectedAmountBaseRaw, expectedAmountQuoteRaw = _b.expectedAmountQuoteRaw; + return (jsxs(Trans, { children: ["Remove", ' ', jsx(FormattedCurrencyAmountManaged, { rawAmount: expectedAmountBaseRaw, currencyId: baseCurrencyId, sigFigs: 3 }, void 0), " and", ' ', jsx(FormattedCurrencyAmountManaged, { rawAmount: expectedAmountQuoteRaw, currencyId: quoteCurrencyId, sigFigs: 3 }, void 0)] }, void 0)); +} +function AddLiquidityV3PoolSummary(_a) { + var _b = _a.info, createPool = _b.createPool, quoteCurrencyId = _b.quoteCurrencyId, baseCurrencyId = _b.baseCurrencyId; + var baseCurrency = useCurrency(baseCurrencyId); + var quoteCurrency = useCurrency(quoteCurrencyId); + return createPool ? (jsxs(Trans, { children: ["Create pool and add ", baseCurrency === null || baseCurrency === void 0 ? void 0 : baseCurrency.symbol, "/", quoteCurrency === null || quoteCurrency === void 0 ? void 0 : quoteCurrency.symbol, " V3 liquidity"] }, void 0)) : (jsxs(Trans, { children: ["Add ", baseCurrency === null || baseCurrency === void 0 ? void 0 : baseCurrency.symbol, "/", quoteCurrency === null || quoteCurrency === void 0 ? void 0 : quoteCurrency.symbol, " V3 liquidity"] }, void 0)); +} +function AddLiquidityV2PoolSummary(_a) { + var _b = _a.info, quoteCurrencyId = _b.quoteCurrencyId, expectedAmountBaseRaw = _b.expectedAmountBaseRaw, expectedAmountQuoteRaw = _b.expectedAmountQuoteRaw, baseCurrencyId = _b.baseCurrencyId; + return (jsxs(Trans, { children: ["Add ", jsx(FormattedCurrencyAmountManaged, { rawAmount: expectedAmountBaseRaw, currencyId: baseCurrencyId, sigFigs: 3 }, void 0), ' ', "and ", jsx(FormattedCurrencyAmountManaged, { rawAmount: expectedAmountQuoteRaw, currencyId: quoteCurrencyId, sigFigs: 3 }, void 0), ' ', "to Uniswap V2"] }, void 0)); +} +function SwapSummary(_a) { + var info = _a.info; + if (info.tradeType === TradeType.EXACT_INPUT) { + return (jsxs(Trans, { children: ["Swap exactly", ' ', jsx(FormattedCurrencyAmountManaged, { rawAmount: info.inputCurrencyAmountRaw, currencyId: info.inputCurrencyId, sigFigs: 6 }, void 0), ' ', "for", ' ', jsx(FormattedCurrencyAmountManaged, { rawAmount: info.expectedOutputCurrencyAmountRaw, currencyId: info.outputCurrencyId, sigFigs: 6 }, void 0)] }, void 0)); + } + else { + return (jsxs(Trans, { children: ["Swap", ' ', jsx(FormattedCurrencyAmountManaged, { rawAmount: info.expectedInputCurrencyAmountRaw, currencyId: info.inputCurrencyId, sigFigs: 6 }, void 0), ' ', "for exactly", ' ', jsx(FormattedCurrencyAmountManaged, { rawAmount: info.outputCurrencyAmountRaw, currencyId: info.outputCurrencyId, sigFigs: 6 }, void 0)] }, void 0)); + } +} +function TransactionSummary(_a) { + var info = _a.info; + switch (info.type) { + case TransactionType.ADD_LIQUIDITY_V3_POOL: + return jsx(AddLiquidityV3PoolSummary, { info: info }, void 0); + case TransactionType.ADD_LIQUIDITY_V2_POOL: + return jsx(AddLiquidityV2PoolSummary, { info: info }, void 0); + case TransactionType.CLAIM: + return jsx(ClaimSummary, { info: info }, void 0); + case TransactionType.DEPOSIT_LIQUIDITY_STAKING: + return jsx(DepositLiquidityStakingSummary, { info: info }, void 0); + case TransactionType.WITHDRAW_LIQUIDITY_STAKING: + return jsx(WithdrawLiquidityStakingSummary, { info: info }, void 0); + case TransactionType.SWAP: + return jsx(SwapSummary, { info: info }, void 0); + case TransactionType.APPROVAL: + return jsx(ApprovalSummary, { info: info }, void 0); + case TransactionType.VOTE: + return jsx(VoteSummary, { info: info }, void 0); + case TransactionType.DELEGATE: + return jsx(DelegateSummary, { info: info }, void 0); + case TransactionType.WRAP: + return jsx(WrapSummary, { info: info }, void 0); + case TransactionType.CREATE_V3_POOL: + return jsx(CreateV3PoolSummary, { info: info }, void 0); + case TransactionType.MIGRATE_LIQUIDITY_V3: + return jsx(MigrateLiquidityToV3Summary, { info: info }, void 0); + case TransactionType.COLLECT_FEES: + return jsx(CollectFeesSummary, { info: info }, void 0); + case TransactionType.REMOVE_LIQUIDITY_V3: + return jsx(RemoveLiquidityV3Summary, { info: info }, void 0); + case TransactionType.SUBMIT_PROPOSAL: + return jsx(SubmitProposalTransactionSummary, { info: info }, void 0); + } +} + +var TransactionStatusText = styled.div(templateObject_1$Y || (templateObject_1$Y = __makeTemplateObject(["\n margin-right: 0.5rem;\n display: flex;\n align-items: center;\n :hover {\n text-decoration: underline;\n }\n"], ["\n margin-right: 0.5rem;\n display: flex;\n align-items: center;\n :hover {\n text-decoration: underline;\n }\n"]))); +var TransactionState = styled(ExternalLink)(templateObject_2$G || (templateObject_2$G = __makeTemplateObject(["\n display: flex;\n justify-content: space-between;\n align-items: center;\n text-decoration: none !important;\n border-radius: 0.5rem;\n padding: 0.25rem 0rem;\n font-weight: 500;\n font-size: 0.825rem;\n color: ", ";\n"], ["\n display: flex;\n justify-content: space-between;\n align-items: center;\n text-decoration: none !important;\n border-radius: 0.5rem;\n padding: 0.25rem 0rem;\n font-weight: 500;\n font-size: 0.825rem;\n color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.primary1; +}); +var IconWrapper$3 = styled.div(templateObject_3$A || (templateObject_3$A = __makeTemplateObject(["\n color: ", ";\n"], ["\n color: ", ";\n"])), function (_a) { + var pending = _a.pending, success = _a.success, theme = _a.theme; + return (pending ? theme.primary1 : success ? theme.green1 : theme.red1); +}); +function Transaction(_a) { + var _b, _c; + var hash = _a.hash; + var chainId = useActiveWeb3React().chainId; + var allTransactions = useAllTransactions(); + var tx = allTransactions === null || allTransactions === void 0 ? void 0 : allTransactions[hash]; + var info = tx === null || tx === void 0 ? void 0 : tx.info; + var pending = !(tx === null || tx === void 0 ? void 0 : tx.receipt); + var success = !pending && tx && (((_b = tx.receipt) === null || _b === void 0 ? void 0 : _b.status) === 1 || typeof ((_c = tx.receipt) === null || _c === void 0 ? void 0 : _c.status) === 'undefined'); + if (!chainId) + return null; + return (jsx("div", { children: jsxs(TransactionState, __assign({ href: getExplorerLink(chainId, hash, ExplorerDataType.TRANSACTION), pending: pending, success: success }, { children: [jsx(RowFixed, { children: jsxs(TransactionStatusText, { children: [jsx(TransactionSummary, { info: info }, void 0), " \u2197"] }, void 0) }, void 0), jsx(IconWrapper$3, __assign({ pending: pending, success: success }, { children: pending ? jsx(Loader, {}, void 0) : success ? jsx(CheckCircle, { size: "16" }, void 0) : jsx(Triangle, { size: "16" }, void 0) }), void 0)] }), void 0) }, void 0)); +} +var templateObject_1$Y, templateObject_2$G, templateObject_3$A; + +var HeaderRow$1 = styled.div(templateObject_2$F || (templateObject_2$F = __makeTemplateObject(["\n ", ";\n padding: 1rem 1rem;\n font-weight: 500;\n color: ", ";\n ", ";\n"], ["\n ", ";\n padding: 1rem 1rem;\n font-weight: 500;\n color: ", ";\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.flexRowNoWrap; +}, function (props) { return (props.color === 'blue' ? function (_a) { + var theme = _a.theme; + return theme.primary1; +} : 'inherit'); }, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToMedium(templateObject_1$X || (templateObject_1$X = __makeTemplateObject(["\n padding: 1rem;\n "], ["\n padding: 1rem;\n "]))); +}); +var UpperSection$1 = styled.div(templateObject_3$z || (templateObject_3$z = __makeTemplateObject(["\n position: relative;\n\n h5 {\n margin: 0;\n margin-bottom: 0.5rem;\n font-size: 1rem;\n font-weight: 400;\n }\n\n h5:last-child {\n margin-bottom: 0px;\n }\n\n h4 {\n margin-top: 0;\n font-weight: 500;\n }\n"], ["\n position: relative;\n\n h5 {\n margin: 0;\n margin-bottom: 0.5rem;\n font-size: 1rem;\n font-weight: 400;\n }\n\n h5:last-child {\n margin-bottom: 0px;\n }\n\n h4 {\n margin-top: 0;\n font-weight: 500;\n }\n"]))); +var InfoCard$1 = styled.div(templateObject_4$q || (templateObject_4$q = __makeTemplateObject(["\n padding: 1rem;\n border: 1px solid ", ";\n border-radius: 20px;\n position: relative;\n display: grid;\n grid-row-gap: 12px;\n margin-bottom: 20px;\n"], ["\n padding: 1rem;\n border: 1px solid ", ";\n border-radius: 20px;\n position: relative;\n display: grid;\n grid-row-gap: 12px;\n margin-bottom: 20px;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg3; +}); +var AccountGroupingRow = styled.div(templateObject_5$m || (templateObject_5$m = __makeTemplateObject(["\n ", ";\n justify-content: space-between;\n align-items: center;\n font-weight: 400;\n color: ", ";\n\n div {\n ", "\n align-items: center;\n }\n"], ["\n ", ";\n justify-content: space-between;\n align-items: center;\n font-weight: 400;\n color: ", ";\n\n div {\n ", "\n align-items: center;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.flexRowNoWrap; +}, function (_a) { + var theme = _a.theme; + return theme.text1; +}, function (_a) { + var theme = _a.theme; + return theme.flexRowNoWrap; +}); +var AccountSection = styled.div(templateObject_7$e || (templateObject_7$e = __makeTemplateObject(["\n padding: 0rem 1rem;\n ", ";\n"], ["\n padding: 0rem 1rem;\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToMedium(templateObject_6$h || (templateObject_6$h = __makeTemplateObject(["padding: 0rem 1rem 1.5rem 1rem;"], ["padding: 0rem 1rem 1.5rem 1rem;"]))); +}); +var YourAccount = styled.div(templateObject_8$c || (templateObject_8$c = __makeTemplateObject(["\n h5 {\n margin: 0 0 1rem 0;\n font-weight: 400;\n }\n\n h4 {\n margin: 0;\n font-weight: 500;\n }\n"], ["\n h5 {\n margin: 0 0 1rem 0;\n font-weight: 400;\n }\n\n h4 {\n margin: 0;\n font-weight: 500;\n }\n"]))); +var LowerSection = styled.div(templateObject_9$b || (templateObject_9$b = __makeTemplateObject(["\n ", "\n padding: 1.5rem;\n flex-grow: 1;\n overflow: auto;\n background-color: ", ";\n border-bottom-left-radius: 20px;\n border-bottom-right-radius: 20px;\n\n h5 {\n margin: 0;\n font-weight: 400;\n color: ", ";\n }\n"], ["\n ", "\n padding: 1.5rem;\n flex-grow: 1;\n overflow: auto;\n background-color: ", ";\n border-bottom-left-radius: 20px;\n border-bottom-right-radius: 20px;\n\n h5 {\n margin: 0;\n font-weight: 400;\n color: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.flexColumnNoWrap; +}, function (_a) { + var theme = _a.theme; + return theme.bg2; +}, function (_a) { + var theme = _a.theme; + return theme.text3; +}); +var AccountControl = styled.div(templateObject_10$8 || (templateObject_10$8 = __makeTemplateObject(["\n display: flex;\n justify-content: space-between;\n min-width: 0;\n width: 100%;\n\n font-weight: 500;\n font-size: 1.25rem;\n\n a:hover {\n text-decoration: underline;\n }\n\n p {\n min-width: 0;\n margin: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n"], ["\n display: flex;\n justify-content: space-between;\n min-width: 0;\n width: 100%;\n\n font-weight: 500;\n font-size: 1.25rem;\n\n a:hover {\n text-decoration: underline;\n }\n\n p {\n min-width: 0;\n margin: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n"]))); +var AddressLink = styled(ExternalLink)(templateObject_11$6 || (templateObject_11$6 = __makeTemplateObject(["\n font-size: 0.825rem;\n color: ", ";\n margin-left: 1rem;\n font-size: 0.825rem;\n display: flex;\n :hover {\n color: ", ";\n }\n"], ["\n font-size: 0.825rem;\n color: ", ";\n margin-left: 1rem;\n font-size: 0.825rem;\n display: flex;\n :hover {\n color: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text3; +}, function (_a) { + var theme = _a.theme; + return theme.text2; +}); +var CloseIcon$1 = styled.div(templateObject_12$6 || (templateObject_12$6 = __makeTemplateObject(["\n position: absolute;\n right: 1rem;\n top: 14px;\n &:hover {\n cursor: pointer;\n opacity: 0.6;\n }\n"], ["\n position: absolute;\n right: 1rem;\n top: 14px;\n &:hover {\n cursor: pointer;\n opacity: 0.6;\n }\n"]))); +var CloseColor$1 = styled(SvgX)(templateObject_13$2 || (templateObject_13$2 = __makeTemplateObject(["\n path {\n stroke: ", ";\n }\n"], ["\n path {\n stroke: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text4; +}); +var WalletName = styled.div(templateObject_14$2 || (templateObject_14$2 = __makeTemplateObject(["\n width: initial;\n font-size: 0.825rem;\n font-weight: 500;\n color: ", ";\n"], ["\n width: initial;\n font-size: 0.825rem;\n font-weight: 500;\n color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.text3; +}); +var IconWrapper$2 = styled.div(templateObject_16$1 || (templateObject_16$1 = __makeTemplateObject(["\n ", ";\n align-items: center;\n justify-content: center;\n margin-right: 8px;\n & > img,\n span {\n height: ", ";\n width: ", ";\n }\n ", ";\n"], ["\n ", ";\n align-items: center;\n justify-content: center;\n margin-right: 8px;\n & > img,\n span {\n height: ", ";\n width: ", ";\n }\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.flexColumnNoWrap; +}, function (_a) { + var size = _a.size; + return (size ? size + 'px' : '32px'); +}, function (_a) { + var size = _a.size; + return (size ? size + 'px' : '32px'); +}, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToMedium(templateObject_15$1 || (templateObject_15$1 = __makeTemplateObject(["\n align-items: flex-end;\n "], ["\n align-items: flex-end;\n "]))); +}); +function WrappedStatusIcon$1(_a) { + var connector = _a.connector; + return (jsxs(IconWrapper$2, __assign({ size: 16 }, { children: [jsx(StatusIcon, { connector: connector }, void 0), connector === portis && (jsx(MainWalletAction, __assign({ onClick: function () { + portis.portis.showPortis(); + } }, { children: jsx(Trans, { children: "Show Portis" }, void 0) }), void 0))] }), void 0)); +} +var TransactionListWrapper = styled.div(templateObject_17$1 || (templateObject_17$1 = __makeTemplateObject(["\n ", ";\n"], ["\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.flexColumnNoWrap; +}); +var WalletAction = styled(ButtonSecondary)(templateObject_18$1 || (templateObject_18$1 = __makeTemplateObject(["\n width: fit-content;\n font-weight: 400;\n margin-left: 8px;\n font-size: 0.825rem;\n padding: 4px 6px;\n :hover {\n cursor: pointer;\n text-decoration: underline;\n }\n"], ["\n width: fit-content;\n font-weight: 400;\n margin-left: 8px;\n font-size: 0.825rem;\n padding: 4px 6px;\n :hover {\n cursor: pointer;\n text-decoration: underline;\n }\n"]))); +var MainWalletAction = styled(WalletAction)(templateObject_19$1 || (templateObject_19$1 = __makeTemplateObject(["\n color: ", ";\n"], ["\n color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.primary1; +}); +function renderTransactions(transactions) { + return (jsx(TransactionListWrapper, { children: transactions.map(function (hash, i) { + return jsx(Transaction, { hash: hash }, i); + }) }, void 0)); +} +function AccountDetails(_a) { + var toggleWalletModal = _a.toggleWalletModal, pendingTransactions = _a.pendingTransactions, confirmedTransactions = _a.confirmedTransactions, ENSName = _a.ENSName, openOptions = _a.openOptions; + var _b = useActiveWeb3React(), chainId = _b.chainId, account = _b.account, connector = _b.connector; + var theme = useContext(ThemeContext); + var dispatch = useAppDispatch(); + function formatConnectorName() { + var ethereum = window.ethereum; + var isMetaMask = !!(ethereum && ethereum.isMetaMask); + var name = Object.keys(SUPPORTED_WALLETS) + .filter(function (k) { + return SUPPORTED_WALLETS[k].connector === connector && (connector !== injected || isMetaMask === (k === 'METAMASK')); + }) + .map(function (k) { return SUPPORTED_WALLETS[k].name; })[0]; + return (jsx(WalletName, { children: jsxs(Trans, { children: ["Connected with ", name] }, void 0) }, void 0)); + } + var clearAllTransactionsCallback = useCallback(function () { + if (chainId) + dispatch(clearAllTransactions({ chainId: chainId })); + }, [dispatch, chainId]); + return (jsxs(Fragment, { children: [jsxs(UpperSection$1, { children: [jsx(CloseIcon$1, __assign({ onClick: toggleWalletModal }, { children: jsx(CloseColor$1, {}, void 0) }), void 0), jsx(HeaderRow$1, { children: jsx(Trans, { children: "Account" }, void 0) }, void 0), jsx(AccountSection, { children: jsx(YourAccount, { children: jsxs(InfoCard$1, { children: [jsxs(AccountGroupingRow, { children: [formatConnectorName(), jsxs("div", { children: [connector !== injected && connector !== walletlink && (jsx(WalletAction, __assign({ style: { fontSize: '.825rem', fontWeight: 400, marginRight: '8px' }, onClick: function () { + connector.close(); + } }, { children: jsx(Trans, { children: "Disconnect" }, void 0) }), void 0)), jsx(WalletAction, __assign({ style: { fontSize: '.825rem', fontWeight: 400 }, onClick: function () { + openOptions(); + } }, { children: jsx(Trans, { children: "Change" }, void 0) }), void 0)] }, void 0)] }, void 0), jsx(AccountGroupingRow, __assign({ id: "web3-account-identifier-row" }, { children: jsx(AccountControl, { children: ENSName ? (jsx(Fragment, { children: jsxs("div", { children: [connector && jsx(WrappedStatusIcon$1, { connector: connector }, void 0), jsxs("p", { children: [" ", ENSName] }, void 0)] }, void 0) }, void 0)) : (jsx(Fragment, { children: jsxs("div", { children: [connector && jsx(WrappedStatusIcon$1, { connector: connector }, void 0), jsxs("p", { children: [" ", account && shortenAddress(account)] }, void 0)] }, void 0) }, void 0)) }, void 0) }), void 0), jsx(AccountGroupingRow, { children: ENSName ? (jsx(Fragment, { children: jsx(AccountControl, { children: jsxs("div", { children: [account && (jsx(CopyHelper, __assign({ toCopy: account }, { children: jsx("span", __assign({ style: { marginLeft: '4px' } }, { children: jsx(Trans, { children: "Copy Address" }, void 0) }), void 0) }), void 0)), chainId && account && (jsxs(AddressLink, __assign({ hasENS: !!ENSName, isENS: true, href: getExplorerLink(chainId, ENSName, ExplorerDataType.ADDRESS) }, { children: [jsx(ExternalLink$1, { size: 16 }, void 0), jsx("span", __assign({ style: { marginLeft: '4px' } }, { children: jsx(Trans, { children: "View on Explorer" }, void 0) }), void 0)] }), void 0))] }, void 0) }, void 0) }, void 0)) : (jsx(Fragment, { children: jsx(AccountControl, { children: jsxs("div", { children: [account && (jsx(CopyHelper, __assign({ toCopy: account }, { children: jsx("span", __assign({ style: { marginLeft: '4px' } }, { children: jsx(Trans, { children: "Copy Address" }, void 0) }), void 0) }), void 0)), chainId && account && (jsxs(AddressLink, __assign({ hasENS: !!ENSName, isENS: false, href: getExplorerLink(chainId, account, ExplorerDataType.ADDRESS) }, { children: [jsx(ExternalLink$1, { size: 16 }, void 0), jsx("span", __assign({ style: { marginLeft: '4px' } }, { children: jsx(Trans, { children: "View on Explorer" }, void 0) }), void 0)] }), void 0))] }, void 0) }, void 0) }, void 0)) }, void 0)] }, void 0) }, void 0) }, void 0)] }, void 0), !!pendingTransactions.length || !!confirmedTransactions.length ? (jsxs(LowerSection, { children: [jsxs(AutoRow, __assign({ mb: '1rem', style: { justifyContent: 'space-between' } }, { children: [jsx(ThemedText.Body, { children: jsx(Trans, { children: "Recent Transactions" }, void 0) }, void 0), jsx(LinkStyledButton, __assign({ onClick: clearAllTransactionsCallback }, { children: jsx(Trans, { children: "(clear all)" }, void 0) }), void 0)] }), void 0), renderTransactions(pendingTransactions), renderTransactions(confirmedTransactions)] }, void 0)) : (jsx(LowerSection, { children: jsx(ThemedText.Body, __assign({ color: theme.text1 }, { children: jsx(Trans, { children: "Your transactions will appear here..." }, void 0) }), void 0) }, void 0))] }, void 0)); +} +var templateObject_1$X, templateObject_2$F, templateObject_3$z, templateObject_4$q, templateObject_5$m, templateObject_6$h, templateObject_7$e, templateObject_8$c, templateObject_9$b, templateObject_10$8, templateObject_11$6, templateObject_12$6, templateObject_13$2, templateObject_14$2, templateObject_15$1, templateObject_16$1, templateObject_17$1, templateObject_18$1, templateObject_19$1; + +var InfoCard = styled.button(templateObject_1$W || (templateObject_1$W = __makeTemplateObject(["\n background-color: ", ";\n padding: 1rem;\n outline: none;\n border: 1px solid;\n border-radius: 12px;\n width: 100% !important;\n &:focus {\n box-shadow: 0 0 0 1px ", ";\n }\n border-color: ", ";\n"], ["\n background-color: ", ";\n padding: 1rem;\n outline: none;\n border: 1px solid;\n border-radius: 12px;\n width: 100% !important;\n &:focus {\n box-shadow: 0 0 0 1px ", ";\n }\n border-color: ", ";\n"])), function (_a) { + var theme = _a.theme, active = _a.active; + return (active ? theme.bg3 : theme.bg2); +}, function (_a) { + var theme = _a.theme; + return theme.primary1; +}, function (_a) { + var theme = _a.theme, active = _a.active; + return (active ? 'transparent' : theme.bg3); +}); +var OptionCard = styled(InfoCard)(templateObject_2$E || (templateObject_2$E = __makeTemplateObject(["\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n margin-top: 2rem;\n padding: 1rem;\n"], ["\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n margin-top: 2rem;\n padding: 1rem;\n"]))); +var OptionCardLeft = styled.div(templateObject_3$y || (templateObject_3$y = __makeTemplateObject(["\n ", ";\n justify-content: center;\n height: 100%;\n"], ["\n ", ";\n justify-content: center;\n height: 100%;\n"])), function (_a) { + var theme = _a.theme; + return theme.flexColumnNoWrap; +}); +var OptionCardClickable = styled(OptionCard)(templateObject_4$p || (templateObject_4$p = __makeTemplateObject(["\n margin-top: 0;\n &:hover {\n cursor: ", ";\n border: ", ";\n }\n opacity: ", ";\n"], ["\n margin-top: 0;\n &:hover {\n cursor: ", ";\n border: ", ";\n }\n opacity: ", ";\n"])), function (_a) { + var clickable = _a.clickable; + return (clickable ? 'pointer' : ''); +}, function (_a) { + var clickable = _a.clickable, theme = _a.theme; + return (clickable ? "1px solid " + theme.primary1 : ""); +}, function (_a) { + var disabled = _a.disabled; + return (disabled ? '0.5' : '1'); +}); +var GreenCircle = styled.div(templateObject_5$l || (templateObject_5$l = __makeTemplateObject(["\n ", "\n justify-content: center;\n align-items: center;\n\n &:first-child {\n height: 8px;\n width: 8px;\n margin-right: 8px;\n background-color: ", ";\n border-radius: 50%;\n }\n"], ["\n ", "\n justify-content: center;\n align-items: center;\n\n &:first-child {\n height: 8px;\n width: 8px;\n margin-right: 8px;\n background-color: ", ";\n border-radius: 50%;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.flexRowNoWrap; +}, function (_a) { + var theme = _a.theme; + return theme.green1; +}); +var CircleWrapper = styled.div(templateObject_6$g || (templateObject_6$g = __makeTemplateObject(["\n color: ", ";\n display: flex;\n justify-content: center;\n align-items: center;\n"], ["\n color: ", ";\n display: flex;\n justify-content: center;\n align-items: center;\n"])), function (_a) { + var theme = _a.theme; + return theme.green1; +}); +var HeaderText = styled.div(templateObject_7$d || (templateObject_7$d = __makeTemplateObject(["\n ", ";\n color: ", ";\n font-size: 1rem;\n font-weight: 500;\n"], ["\n ", ";\n color: ", ";\n font-size: 1rem;\n font-weight: 500;\n"])), function (_a) { + var theme = _a.theme; + return theme.flexRowNoWrap; +}, function (props) { return (props.color === 'blue' ? function (_a) { + var theme = _a.theme; + return theme.primary1; +} : function (_a) { + var theme = _a.theme; + return theme.text1; +}); }); +var SubHeader = styled.div(templateObject_8$b || (templateObject_8$b = __makeTemplateObject(["\n color: ", ";\n margin-top: 10px;\n font-size: 12px;\n"], ["\n color: ", ";\n margin-top: 10px;\n font-size: 12px;\n"])), function (_a) { + var theme = _a.theme; + return theme.text1; +}); +var IconWrapper$1 = styled.div(templateObject_10$7 || (templateObject_10$7 = __makeTemplateObject(["\n ", ";\n align-items: center;\n justify-content: center;\n & > img,\n span {\n height: ", ";\n width: ", ";\n }\n ", ";\n"], ["\n ", ";\n align-items: center;\n justify-content: center;\n & > img,\n span {\n height: ", ";\n width: ", ";\n }\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.flexColumnNoWrap; +}, function (_a) { + var size = _a.size; + return (size ? size + 'px' : '24px'); +}, function (_a) { + var size = _a.size; + return (size ? size + 'px' : '24px'); +}, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToMedium(templateObject_9$a || (templateObject_9$a = __makeTemplateObject(["\n align-items: flex-end;\n "], ["\n align-items: flex-end;\n "]))); +}); +function Option$1(_a) { + var _b = _a.link, link = _b === void 0 ? null : _b, _c = _a.clickable, clickable = _c === void 0 ? true : _c, size = _a.size, _d = _a.onClick, onClick = _d === void 0 ? null : _d, color = _a.color, header = _a.header, _e = _a.subheader, subheader = _e === void 0 ? null : _e, icon = _a.icon, _f = _a.active, active = _f === void 0 ? false : _f, id = _a.id; + var content = (jsxs(OptionCardClickable, __assign({ id: id, onClick: onClick, clickable: clickable && !active, active: active }, { children: [jsxs(OptionCardLeft, { children: [jsxs(HeaderText, __assign({ color: color }, { children: [active ? (jsx(CircleWrapper, { children: jsx(GreenCircle, { children: jsx("div", {}, void 0) }, void 0) }, void 0)) : (''), header] }), void 0), subheader && jsx(SubHeader, { children: subheader }, void 0)] }, void 0), jsx(IconWrapper$1, __assign({ size: size }, { children: jsx("img", { src: icon, alt: 'Icon' }, void 0) }), void 0)] }), void 0)); + if (link) { + return jsx(ExternalLink, __assign({ href: link }, { children: content }), void 0); + } + return content; +} +var templateObject_1$W, templateObject_2$E, templateObject_3$y, templateObject_4$p, templateObject_5$l, templateObject_6$g, templateObject_7$d, templateObject_8$b, templateObject_9$a, templateObject_10$7; + +var PendingSection = styled.div(templateObject_1$V || (templateObject_1$V = __makeTemplateObject(["\n ", ";\n align-items: center;\n justify-content: center;\n width: 100%;\n & > * {\n width: 100%;\n }\n"], ["\n ", ";\n align-items: center;\n justify-content: center;\n width: 100%;\n & > * {\n width: 100%;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.flexColumnNoWrap; +}); +var StyledLoader = styled(Loader)(templateObject_2$D || (templateObject_2$D = __makeTemplateObject(["\n margin-right: 1rem;\n"], ["\n margin-right: 1rem;\n"]))); +var LoadingMessage = styled.div(templateObject_3$x || (templateObject_3$x = __makeTemplateObject(["\n ", ";\n align-items: center;\n justify-content: flex-start;\n border-radius: 12px;\n margin-bottom: 20px;\n color: ", ";\n border: 1px solid ", ";\n\n & > * {\n padding: 1rem;\n }\n"], ["\n ", ";\n align-items: center;\n justify-content: flex-start;\n border-radius: 12px;\n margin-bottom: 20px;\n color: ", ";\n border: 1px solid ", ";\n\n & > * {\n padding: 1rem;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.flexRowNoWrap; +}, function (_a) { + var theme = _a.theme, error = _a.error; + return (error ? theme.red1 : 'inherit'); +}, function (_a) { + var theme = _a.theme, error = _a.error; + return (error ? theme.red1 : theme.text4); +}); +var ErrorGroup = styled.div(templateObject_4$o || (templateObject_4$o = __makeTemplateObject(["\n ", ";\n align-items: center;\n justify-content: flex-start;\n"], ["\n ", ";\n align-items: center;\n justify-content: flex-start;\n"])), function (_a) { + var theme = _a.theme; + return theme.flexRowNoWrap; +}); +var ErrorButton = styled.div(templateObject_5$k || (templateObject_5$k = __makeTemplateObject(["\n border-radius: 8px;\n font-size: 12px;\n color: ", ";\n background-color: ", ";\n margin-left: 1rem;\n padding: 0.5rem;\n font-weight: 600;\n user-select: none;\n\n &:hover {\n cursor: pointer;\n background-color: ", ";\n }\n"], ["\n border-radius: 8px;\n font-size: 12px;\n color: ", ";\n background-color: ", ";\n margin-left: 1rem;\n padding: 0.5rem;\n font-weight: 600;\n user-select: none;\n\n &:hover {\n cursor: pointer;\n background-color: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text1; +}, function (_a) { + var theme = _a.theme; + return theme.bg4; +}, function (_a) { + var theme = _a.theme; + return darken(0.1, theme.text4); +}); +var LoadingWrapper = styled.div(templateObject_6$f || (templateObject_6$f = __makeTemplateObject(["\n ", ";\n align-items: center;\n justify-content: center;\n"], ["\n ", ";\n align-items: center;\n justify-content: center;\n"])), function (_a) { + var theme = _a.theme; + return theme.flexRowNoWrap; +}); +function PendingView(_a) { + var _b; + var connector = _a.connector, _c = _a.error, error = _c === void 0 ? false : _c, setPendingError = _a.setPendingError, tryActivation = _a.tryActivation; + var isMetamask = (_b = window === null || window === void 0 ? void 0 : window.ethereum) === null || _b === void 0 ? void 0 : _b.isMetaMask; + return (jsxs(PendingSection, { children: [jsx(LoadingMessage, __assign({ error: error }, { children: jsx(LoadingWrapper, { children: error ? (jsxs(ErrorGroup, { children: [jsx("div", { children: jsx(Trans, { children: "Error connecting" }, void 0) }, void 0), jsx(ErrorButton, __assign({ onClick: function () { + setPendingError(false); + connector && tryActivation(connector); + } }, { children: jsx(Trans, { children: "Try Again" }, void 0) }), void 0)] }, void 0)) : (jsxs(Fragment, { children: [jsx(StyledLoader, {}, void 0), jsx(Trans, { children: "Initializing..." }, void 0)] }, void 0)) }, void 0) }), void 0), Object.keys(SUPPORTED_WALLETS).map(function (key) { + var option = SUPPORTED_WALLETS[key]; + if (option.connector === connector) { + if (option.connector === injected) { + if (isMetamask && option.name !== 'MetaMask') { + return null; + } + if (!isMetamask && option.name === 'MetaMask') { + return null; + } + } + return (jsx(Option$1, { id: "connect-" + key, clickable: false, color: option.color, header: option.name, subheader: option.description, icon: option.iconURL }, key)); + } + return null; + })] }, void 0)); +} +var templateObject_1$V, templateObject_2$D, templateObject_3$x, templateObject_4$o, templateObject_5$k, templateObject_6$f; + +var CloseIcon = styled.div(templateObject_1$U || (templateObject_1$U = __makeTemplateObject(["\n position: absolute;\n right: 1rem;\n top: 14px;\n &:hover {\n cursor: pointer;\n opacity: 0.6;\n }\n"], ["\n position: absolute;\n right: 1rem;\n top: 14px;\n &:hover {\n cursor: pointer;\n opacity: 0.6;\n }\n"]))); +var CloseColor = styled(SvgX)(templateObject_2$C || (templateObject_2$C = __makeTemplateObject(["\n path {\n stroke: ", ";\n }\n"], ["\n path {\n stroke: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text4; +}); +var Wrapper$f = styled.div(templateObject_3$w || (templateObject_3$w = __makeTemplateObject(["\n ", "\n margin: 0;\n padding: 0;\n width: 100%;\n"], ["\n ", "\n margin: 0;\n padding: 0;\n width: 100%;\n"])), function (_a) { + var theme = _a.theme; + return theme.flexColumnNoWrap; +}); +var HeaderRow = styled.div(templateObject_5$j || (templateObject_5$j = __makeTemplateObject(["\n ", ";\n padding: 1rem 1rem;\n font-weight: 500;\n color: ", ";\n ", ";\n"], ["\n ", ";\n padding: 1rem 1rem;\n font-weight: 500;\n color: ", ";\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.flexRowNoWrap; +}, function (props) { return (props.color === 'blue' ? function (_a) { + var theme = _a.theme; + return theme.primary1; +} : 'inherit'); }, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToMedium(templateObject_4$n || (templateObject_4$n = __makeTemplateObject(["\n padding: 1rem;\n "], ["\n padding: 1rem;\n "]))); +}); +var ContentWrapper$2 = styled.div(templateObject_7$c || (templateObject_7$c = __makeTemplateObject(["\n background-color: ", ";\n padding: 0 1rem 1rem 1rem;\n border-bottom-left-radius: 20px;\n border-bottom-right-radius: 20px;\n\n ", ";\n"], ["\n background-color: ", ";\n padding: 0 1rem 1rem 1rem;\n border-bottom-left-radius: 20px;\n border-bottom-right-radius: 20px;\n\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg0; +}, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToMedium(templateObject_6$e || (templateObject_6$e = __makeTemplateObject(["padding: 0 1rem 1rem 1rem"], ["padding: 0 1rem 1rem 1rem"]))); +}); +var UpperSection = styled.div(templateObject_8$a || (templateObject_8$a = __makeTemplateObject(["\n position: relative;\n\n h5 {\n margin: 0;\n margin-bottom: 0.5rem;\n font-size: 1rem;\n font-weight: 400;\n }\n\n h5:last-child {\n margin-bottom: 0px;\n }\n\n h4 {\n margin-top: 0;\n font-weight: 500;\n }\n"], ["\n position: relative;\n\n h5 {\n margin: 0;\n margin-bottom: 0.5rem;\n font-size: 1rem;\n font-weight: 400;\n }\n\n h5:last-child {\n margin-bottom: 0px;\n }\n\n h4 {\n margin-top: 0;\n font-weight: 500;\n }\n"]))); +var OptionGrid = styled.div(templateObject_10$6 || (templateObject_10$6 = __makeTemplateObject(["\n display: grid;\n grid-gap: 10px;\n ", ";\n"], ["\n display: grid;\n grid-gap: 10px;\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToMedium(templateObject_9$9 || (templateObject_9$9 = __makeTemplateObject(["\n grid-template-columns: 1fr;\n grid-gap: 10px;\n "], ["\n grid-template-columns: 1fr;\n grid-gap: 10px;\n "]))); +}); +var HoverText = styled.div(templateObject_11$5 || (templateObject_11$5 = __makeTemplateObject(["\n text-decoration: none;\n color: ", ";\n display: flex;\n align-items: center;\n\n :hover {\n cursor: pointer;\n }\n"], ["\n text-decoration: none;\n color: ", ";\n display: flex;\n align-items: center;\n\n :hover {\n cursor: pointer;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text1; +}); +var LinkCard = styled(Card)(templateObject_12$5 || (templateObject_12$5 = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n\n :hover {\n cursor: pointer;\n filter: brightness(0.9);\n }\n"], ["\n background-color: ", ";\n color: ", ";\n\n :hover {\n cursor: pointer;\n filter: brightness(0.9);\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var theme = _a.theme; + return theme.text3; +}); +var WALLET_VIEWS = { + OPTIONS: 'options', + OPTIONS_SECONDARY: 'options_secondary', + ACCOUNT: 'account', + PENDING: 'pending', + LEGAL: 'legal', +}; +function WalletModal(_a) { + var _this = this; + var pendingTransactions = _a.pendingTransactions, confirmedTransactions = _a.confirmedTransactions, ENSName = _a.ENSName; + // important that these are destructed from the account-specific web3-react context + var _b = useWeb3React(), active = _b.active, account = _b.account, connector = _b.connector, activate = _b.activate, error = _b.error; + var _c = __read(useState(WALLET_VIEWS.ACCOUNT), 2), walletView = _c[0], setWalletView = _c[1]; + var previousWalletView = usePrevious(walletView); + var _d = __read(useState(), 2), pendingWallet = _d[0], setPendingWallet = _d[1]; + var _e = __read(useState(), 2), pendingError = _e[0], setPendingError = _e[1]; + var walletModalOpen = useModalOpen(ApplicationModal.WALLET); + var toggleWalletModal = useWalletModalToggle(); + var previousAccount = usePrevious(account); + var logMonitoringEvent = useWalletConnectMonitoringEventCallback(); + // close on connection, when logged out before + useEffect(function () { + if (account && !previousAccount && walletModalOpen) { + toggleWalletModal(); + } + }, [account, previousAccount, toggleWalletModal, walletModalOpen]); + // always reset to account view + useEffect(function () { + if (walletModalOpen) { + setPendingError(false); + setWalletView(WALLET_VIEWS.ACCOUNT); + } + }, [walletModalOpen]); + // close modal when a connection is successful + var activePrevious = usePrevious(active); + var connectorPrevious = usePrevious(connector); + useEffect(function () { + if (walletModalOpen && ((active && !activePrevious) || (connector && connector !== connectorPrevious && !error))) { + setWalletView(WALLET_VIEWS.ACCOUNT); + } + }, [setWalletView, active, error, connector, walletModalOpen, activePrevious, connectorPrevious]); + var tryActivation = function (connector) { return __awaiter(_this, void 0, void 0, function () { + var name; + var _this = this; + return __generator(this, function (_a) { + name = ''; + Object.keys(SUPPORTED_WALLETS).map(function (key) { + if (connector === SUPPORTED_WALLETS[key].connector) { + return (name = SUPPORTED_WALLETS[key].name); + } + return true; + }); + // log selected wallet + ReactGA.event({ + category: 'Wallet', + action: 'Change Wallet', + label: name, + }); + setPendingWallet(connector); // set wallet for pending view + setWalletView(WALLET_VIEWS.PENDING); + // if the connector is walletconnect and the user has already tried to connect, manually reset the connector + if (connector instanceof WalletConnectConnector) { + connector.walletConnectProvider = undefined; + } + connector && + activate(connector, undefined, true) + .then(function () { return __awaiter(_this, void 0, void 0, function () { + var walletAddress; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, connector.getAccount()]; + case 1: + walletAddress = _a.sent(); + logMonitoringEvent({ walletAddress: walletAddress }); + return [2 /*return*/]; + } + }); + }); }) + .catch(function (error) { + if (error instanceof UnsupportedChainIdError) { + activate(connector); // a little janky...can't use setError because the connector isn't set + } + else { + setPendingError(true); + } + }); + return [2 /*return*/]; + }); + }); }; + // close wallet modal if fortmatic modal is active + useEffect(function () { + fortmatic$1.on(OVERLAY_READY, function () { + toggleWalletModal(); + }); + }, [toggleWalletModal]); + // get wallets user can switch too, depending on device/browser + function getOptions() { + var isMetamask = window.ethereum && window.ethereum.isMetaMask; + return Object.keys(SUPPORTED_WALLETS).map(function (key) { + var option = SUPPORTED_WALLETS[key]; + // check for mobile options + if (isMobile) { + //disable portis on mobile for now + if (option.connector === portis) { + return null; + } + if (!window.web3 && !window.ethereum && option.mobile) { + return (jsx(Option$1, { onClick: function () { + option.connector !== connector && !option.href && tryActivation(option.connector); + }, id: "connect-" + key, active: option.connector && option.connector === connector, color: option.color, link: option.href, header: option.name, subheader: null, icon: option.iconURL }, key)); + } + return null; + } + // overwrite injected when needed + if (option.connector === injected) { + // don't show injected if there's no injected provider + if (!(window.web3 || window.ethereum)) { + if (option.name === 'MetaMask') { + return (jsx(Option$1, { id: "connect-" + key, color: '#E8831D', header: jsx(Trans, { children: "Install Metamask" }, void 0), subheader: null, link: 'https://metamask.io/', icon: MetaMaskLogo }, key)); + } + else { + return null; //dont want to return install twice + } + } + // don't return metamask if injected provider isn't metamask + else if (option.name === 'MetaMask' && !isMetamask) { + return null; + } + // likewise for generic + else if (option.name === 'Injected' && isMetamask) { + return null; + } + } + // return rest of options + return (!isMobile && + !option.mobileOnly && (jsx(Option$1, { id: "connect-" + key, onClick: function () { + option.connector === connector + ? setWalletView(WALLET_VIEWS.ACCOUNT) + : !option.href && tryActivation(option.connector); + }, active: option.connector === connector, color: option.color, link: option.href, header: option.name, subheader: null, icon: option.iconURL }, key))); + }); + } + function getModalContent() { + if (error) { + return (jsxs(UpperSection, { children: [jsx(CloseIcon, __assign({ onClick: toggleWalletModal }, { children: jsx(CloseColor, {}, void 0) }), void 0), jsx(HeaderRow, { children: error instanceof UnsupportedChainIdError ? jsx(Trans, { children: "Wrong Network" }, void 0) : jsx(Trans, { children: "Error connecting" }, void 0) }, void 0), jsx(ContentWrapper$2, { children: error instanceof UnsupportedChainIdError ? (jsx("h5", { children: jsx(Trans, { children: "Please connect to a supported network in the dropdown menu or in your wallet." }, void 0) }, void 0)) : (jsx(Trans, { children: "Error connecting. Try refreshing the page." }, void 0)) }, void 0)] }, void 0)); + } + if (walletView === WALLET_VIEWS.LEGAL) { + return (jsxs(UpperSection, { children: [jsxs(HeaderRow, { children: [jsx(HoverText, __assign({ onClick: function () { + var _a; + setWalletView((_a = (previousWalletView === WALLET_VIEWS.LEGAL ? WALLET_VIEWS.ACCOUNT : previousWalletView)) !== null && _a !== void 0 ? _a : WALLET_VIEWS.ACCOUNT); + } }, { children: jsx(ArrowLeft, {}, void 0) }), void 0), jsx(Row$1, __assign({ justify: "center" }, { children: jsx(ThemedText.MediumHeader, { children: jsx(Trans, { children: "Legal & Privacy" }, void 0) }, void 0) }), void 0)] }, void 0), jsx(PrivacyPolicy, {}, void 0)] }, void 0)); + } + if (account && walletView === WALLET_VIEWS.ACCOUNT) { + return (jsx(AccountDetails, { toggleWalletModal: toggleWalletModal, pendingTransactions: pendingTransactions, confirmedTransactions: confirmedTransactions, ENSName: ENSName, openOptions: function () { return setWalletView(WALLET_VIEWS.OPTIONS); } }, void 0)); + } + return (jsxs(UpperSection, { children: [jsx(CloseIcon, __assign({ onClick: toggleWalletModal }, { children: jsx(CloseColor, {}, void 0) }), void 0), walletView !== WALLET_VIEWS.ACCOUNT ? (jsx(HeaderRow, __assign({ color: "blue" }, { children: jsx(HoverText, __assign({ onClick: function () { + setPendingError(false); + setWalletView(WALLET_VIEWS.ACCOUNT); + } }, { children: jsx(ArrowLeft, {}, void 0) }), void 0) }), void 0)) : (jsx(HeaderRow, { children: jsx(HoverText, { children: jsx(Trans, { children: "Connect a wallet" }, void 0) }, void 0) }, void 0)), jsx(ContentWrapper$2, { children: jsxs(AutoColumn, __assign({ gap: "16px" }, { children: [jsx(LightCard, { children: jsx(AutoRow, __assign({ style: { flexWrap: 'nowrap' } }, { children: jsx(ThemedText.Black, __assign({ fontSize: 14 }, { children: jsxs(Trans, { children: ["By connecting a wallet, you agree to Uniswap Labs\u2019", ' ', jsx(ExternalLink, __assign({ href: "https://uniswap.org/terms-of-service/" }, { children: "Terms of Service" }), void 0), " and acknowledge that you have read and understand the Uniswap", ' ', jsx(ExternalLink, __assign({ href: "https://uniswap.org/disclaimer/" }, { children: "Protocol Disclaimer" }), void 0), "."] }, void 0) }), void 0) }), void 0) }, void 0), walletView === WALLET_VIEWS.PENDING ? (jsx(PendingView, { connector: pendingWallet, error: pendingError, setPendingError: setPendingError, tryActivation: tryActivation }, void 0)) : (jsx(OptionGrid, { children: getOptions() }, void 0)), jsx(LinkCard, __assign({ padding: ".5rem", "$borderRadius": ".75rem", onClick: function () { return setWalletView(WALLET_VIEWS.LEGAL); } }, { children: jsxs(RowBetween, { children: [jsxs(AutoRow, __assign({ gap: "4px" }, { children: [jsx(Info, { size: 20 }, void 0), jsx(ThemedText.Label, __assign({ fontSize: 14 }, { children: jsx(Trans, { children: "How this app uses APIs" }, void 0) }), void 0)] }), void 0), jsx(ArrowRight, { size: 16 }, void 0)] }, void 0) }), void 0)] }), void 0) }, void 0)] }, void 0)); + } + return (jsx(Modal, __assign({ isOpen: walletModalOpen, onDismiss: toggleWalletModal, minHeight: false, maxHeight: 90 }, { children: jsx(Wrapper$f, { children: getModalContent() }, void 0) }), void 0)); +} +var templateObject_1$U, templateObject_2$C, templateObject_3$w, templateObject_4$n, templateObject_5$j, templateObject_6$e, templateObject_7$c, templateObject_8$a, templateObject_9$9, templateObject_10$6, templateObject_11$5, templateObject_12$5; + +var IconWrapper = styled.div(templateObject_1$T || (templateObject_1$T = __makeTemplateObject(["\n ", ";\n align-items: center;\n justify-content: center;\n & > * {\n height: ", ";\n width: ", ";\n }\n"], ["\n ", ";\n align-items: center;\n justify-content: center;\n & > * {\n height: ", ";\n width: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.flexColumnNoWrap; +}, function (_a) { + var size = _a.size; + return (size ? size + 'px' : '32px'); +}, function (_a) { + var size = _a.size; + return (size ? size + 'px' : '32px'); +}); +var Web3StatusGeneric = styled(ButtonSecondary)(templateObject_2$B || (templateObject_2$B = __makeTemplateObject(["\n ", "\n width: 100%;\n align-items: center;\n padding: 0.5rem;\n border-radius: 14px;\n cursor: pointer;\n user-select: none;\n height: 36px;\n margin-right: 2px;\n margin-left: 1px;\n :focus {\n outline: none;\n }\n"], ["\n ", "\n width: 100%;\n align-items: center;\n padding: 0.5rem;\n border-radius: 14px;\n cursor: pointer;\n user-select: none;\n height: 36px;\n margin-right: 2px;\n margin-left: 1px;\n :focus {\n outline: none;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.flexRowNoWrap; +}); +var Web3StatusError = styled(Web3StatusGeneric)(templateObject_3$v || (templateObject_3$v = __makeTemplateObject(["\n background-color: ", ";\n border: 1px solid ", ";\n color: ", ";\n font-weight: 500;\n :hover,\n :focus {\n background-color: ", ";\n }\n"], ["\n background-color: ", ";\n border: 1px solid ", ";\n color: ", ";\n font-weight: 500;\n :hover,\n :focus {\n background-color: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.red1; +}, function (_a) { + var theme = _a.theme; + return theme.red1; +}, function (_a) { + var theme = _a.theme; + return theme.white; +}, function (_a) { + var theme = _a.theme; + return darken(0.1, theme.red1); +}); +var Web3StatusConnect = styled(Web3StatusGeneric)(templateObject_5$i || (templateObject_5$i = __makeTemplateObject(["\n background-color: ", ";\n border: none;\n\n color: ", ";\n font-weight: 500;\n\n :hover,\n :focus {\n border: 1px solid ", ";\n color: ", ";\n }\n\n ", "\n"], ["\n background-color: ", ";\n border: none;\n\n color: ", ";\n font-weight: 500;\n\n :hover,\n :focus {\n border: 1px solid ", ";\n color: ", ";\n }\n\n ", "\n"])), function (_a) { + var theme = _a.theme; + return theme.primary4; +}, function (_a) { + var theme = _a.theme; + return theme.primaryText1; +}, function (_a) { + var theme = _a.theme; + return darken(0.05, theme.primary4); +}, function (_a) { + var theme = _a.theme; + return theme.primaryText1; +}, function (_a) { + var faded = _a.faded; + return faded && css(templateObject_4$m || (templateObject_4$m = __makeTemplateObject(["\n background-color: ", ";\n border: 1px solid ", ";\n color: ", ";\n\n :hover,\n :focus {\n border: 1px solid ", ";\n color: ", ";\n }\n "], ["\n background-color: ", ";\n border: 1px solid ", ";\n color: ", ";\n\n :hover,\n :focus {\n border: 1px solid ", ";\n color: ", ";\n }\n "])), function (_a) { + var theme = _a.theme; + return theme.primary5; + }, function (_a) { + var theme = _a.theme; + return theme.primary5; + }, function (_a) { + var theme = _a.theme; + return theme.primaryText1; + }, function (_a) { + var theme = _a.theme; + return darken(0.05, theme.primary4); + }, function (_a) { + var theme = _a.theme; + return darken(0.05, theme.primaryText1); + }); +}); +var Web3StatusConnected = styled(Web3StatusGeneric)(templateObject_6$d || (templateObject_6$d = __makeTemplateObject(["\n background-color: ", ";\n border: 1px solid ", ";\n color: ", ";\n font-weight: 500;\n :hover,\n :focus {\n border: 1px solid ", ";\n\n :focus {\n border: 1px solid ", ";\n }\n }\n"], ["\n background-color: ", ";\n border: 1px solid ", ";\n color: ", ";\n font-weight: 500;\n :hover,\n :focus {\n border: 1px solid ", ";\n\n :focus {\n border: 1px solid ", ";\n }\n }\n"])), function (_a) { + var pending = _a.pending, theme = _a.theme; + return (pending ? theme.primary1 : theme.bg1); +}, function (_a) { + var pending = _a.pending, theme = _a.theme; + return (pending ? theme.primary1 : theme.bg1); +}, function (_a) { + var pending = _a.pending, theme = _a.theme; + return (pending ? theme.white : theme.text1); +}, function (_a) { + var theme = _a.theme; + return darken(0.05, theme.bg3); +}, function (_a) { + var pending = _a.pending, theme = _a.theme; + return (pending ? darken(0.1, theme.primary1) : darken(0.1, theme.bg2)); +}); +var Text = styled.p(templateObject_7$b || (templateObject_7$b = __makeTemplateObject(["\n flex: 1 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n margin: 0 0.5rem 0 0.25rem;\n font-size: 1rem;\n width: fit-content;\n font-weight: 500;\n"], ["\n flex: 1 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n margin: 0 0.5rem 0 0.25rem;\n font-size: 1rem;\n width: fit-content;\n font-weight: 500;\n"]))); +var NetworkIcon = styled(Activity)(templateObject_8$9 || (templateObject_8$9 = __makeTemplateObject(["\n margin-left: 0.25rem;\n margin-right: 0.5rem;\n width: 16px;\n height: 16px;\n"], ["\n margin-left: 0.25rem;\n margin-right: 0.5rem;\n width: 16px;\n height: 16px;\n" + // we want the latest one to come first, so return negative if a is after b +]))); +// we want the latest one to come first, so return negative if a is after b +function newTransactionsFirst(a, b) { + return b.addedTime - a.addedTime; +} +function Sock() { + return (jsx("span", __assign({ role: "img", "aria-label": t(templateObject_9$8 || (templateObject_9$8 = __makeTemplateObject(["has socks emoji"], ["has socks emoji"]))), style: { marginTop: -4, marginBottom: -4 } }, { children: "\uD83E\uDDE6" }), void 0)); +} +function WrappedStatusIcon(_a) { + var connector = _a.connector; + return (jsx(IconWrapper, __assign({ size: 16 }, { children: jsx(StatusIcon, { connector: connector }, void 0) }), void 0)); +} +function Web3StatusInner() { + var _a = useWeb3React(), account = _a.account, connector = _a.connector, error = _a.error; + var ENSName = useENSName(account !== null && account !== void 0 ? account : undefined).ENSName; + var allTransactions = useAllTransactions(); + var sortedRecentTransactions = useMemo(function () { + var txs = Object.values(allTransactions); + return txs.filter(isTransactionRecent).sort(newTransactionsFirst); + }, [allTransactions]); + var pending = sortedRecentTransactions.filter(function (tx) { return !tx.receipt; }).map(function (tx) { return tx.hash; }); + var hasPendingTransactions = !!pending.length; + var hasSocks = useHasSocks(); + var toggleWalletModal = useWalletModalToggle(); + if (account) { + return (jsxs(Web3StatusConnected, __assign({ id: "web3-status-connected", onClick: toggleWalletModal, pending: hasPendingTransactions }, { children: [hasPendingTransactions ? (jsxs(RowBetween, { children: [jsx(Text, { children: jsxs(Trans, { children: [pending === null || pending === void 0 ? void 0 : pending.length, " Pending"] }, void 0) }, void 0), ' ', jsx(Loader, { stroke: "white" }, void 0)] }, void 0)) : (jsxs(Fragment, { children: [hasSocks ? jsx(Sock, {}, void 0) : null, jsx(Text, { children: ENSName || shortenAddress(account) }, void 0)] }, void 0)), !hasPendingTransactions && connector && jsx(WrappedStatusIcon, { connector: connector }, void 0)] }), void 0)); + } + else if (error) { + return (jsxs(Web3StatusError, __assign({ onClick: toggleWalletModal }, { children: [jsx(NetworkIcon, {}, void 0), jsx(Text, { children: error instanceof UnsupportedChainIdError ? jsx(Trans, { children: "Wrong Network" }, void 0) : jsx(Trans, { children: "Error" }, void 0) }, void 0)] }), void 0)); + } + else { + return (jsx(Web3StatusConnect, __assign({ id: "connect-wallet", onClick: toggleWalletModal, faded: !account }, { children: jsx(Text, { children: jsx(Trans, { children: "Connect Wallet" }, void 0) }, void 0) }), void 0)); + } +} +function Web3Status() { + var _a = useWeb3React(), active = _a.active, account = _a.account; + var contextNetwork = useWeb3React(NetworkContextName); + var ENSName = useENSName(account !== null && account !== void 0 ? account : undefined).ENSName; + var allTransactions = useAllTransactions(); + var sortedRecentTransactions = useMemo(function () { + var txs = Object.values(allTransactions); + return txs.filter(isTransactionRecent).sort(newTransactionsFirst); + }, [allTransactions]); + var pending = sortedRecentTransactions.filter(function (tx) { return !tx.receipt; }).map(function (tx) { return tx.hash; }); + var confirmed = sortedRecentTransactions.filter(function (tx) { return tx.receipt; }).map(function (tx) { return tx.hash; }); + return (jsxs(Fragment, { children: [jsx(Web3StatusInner, {}, void 0), (contextNetwork.active || active) && (jsx(WalletModal, { ENSName: ENSName !== null && ENSName !== void 0 ? ENSName : undefined, pendingTransactions: pending, confirmedTransactions: confirmed }, void 0))] }, void 0)); +} +var templateObject_1$T, templateObject_2$B, templateObject_3$v, templateObject_4$m, templateObject_5$i, templateObject_6$d, templateObject_7$b, templateObject_8$9, templateObject_9$8; + +var SantaHat = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEYAAAA3CAYAAACxUDzgAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAaGVYSWZNTQAqAAAACAAEAQYAAwAAAAEAAgAAARIAAwAAAAEAAQAAASgAAwAAAAEAAgAAh2kABAAAAAEAAAA+AAAAAAADoAEAAwAAAAEAAQAAoAIABAAAAAEAAABGoAMABAAAAAEAAAA3AAAAAChoTFwAAALiaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA2LjAuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjE8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlBob3RvbWV0cmljSW50ZXJwcmV0YXRpb24+MjwvdGlmZjpQaG90b21ldHJpY0ludGVycHJldGF0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NzA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjU1PC9leGlmOlBpeGVsWURpbWVuc2lv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"; + +var SantaHatImage = styled.img(templateObject_1$S || (templateObject_1$S = __makeTemplateObject(["\n position: absolute;\n top: -4px;\n right: -4px;\n height: 18px;\n"], ["\n position: absolute;\n top: -4px;\n right: -4px;\n height: 18px;\n"]))); +var Christmas = jsx(SantaHatImage, { src: SantaHat, alt: "Santa hat" }, void 0); +var DATE_TO_ORNAMENT = { + '12-24': Christmas, + '12-25': Christmas, +}; +var HolidayOrnament = function () { + // months in javascript are 0 indexed... + var today = new Date().getMonth() + 1 + "-" + new Date().getDate(); + return DATE_TO_ORNAMENT[today] || null; +}; +var templateObject_1$S; + +var replaceURLParam = function (search, param, newValue) { + var searchParams = new URLSearchParams(search); + searchParams.set(param, newValue); + return searchParams.toString(); +}; + +// provider.request returns Promise, but wallet_switchEthereumChain must return null or throw +// see https://github.com/rekmarks/EIPs/blob/3326-create/EIPS/eip-3326.md for more info on wallet_switchEthereumChain +function switchToNetwork(_a) { + var _b; + var library = _a.library, chainId = _a.chainId; + return __awaiter(this, void 0, void 0, function () { + var formattedChainId, error_1, info, error_2; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + if (!((_b = library === null || library === void 0 ? void 0 : library.provider) === null || _b === void 0 ? void 0 : _b.request)) { + return [2 /*return*/]; + } + formattedChainId = hexStripZeros(BigNumber.from(chainId).toHexString()); + _c.label = 1; + case 1: + _c.trys.push([1, 3, , 11]); + return [4 /*yield*/, library.provider.request({ + method: 'wallet_switchEthereumChain', + params: [{ chainId: formattedChainId }], + })]; + case 2: + _c.sent(); + return [3 /*break*/, 11]; + case 3: + error_1 = _c.sent(); + if (!(error_1.code === 4902)) return [3 /*break*/, 9]; + info = CHAIN_INFO[chainId]; + return [4 /*yield*/, library.provider.request({ + method: 'wallet_addEthereumChain', + params: [ + { + chainId: formattedChainId, + chainName: info.label, + rpcUrls: [info.addNetworkInfo.rpcUrl], + nativeCurrency: info.addNetworkInfo.nativeCurrency, + blockExplorerUrls: [info.explorer], + }, + ], + }) + // metamask (only known implementer) automatically switches after a network is added + // the second call is done here because that behavior is not a part of the spec and cannot be relied upon in the future + // metamask's behavior when switching to the current network is just to return null (a no-op) + ]; + case 4: + _c.sent(); + _c.label = 5; + case 5: + _c.trys.push([5, 7, , 8]); + return [4 /*yield*/, library.provider.request({ + method: 'wallet_switchEthereumChain', + params: [{ chainId: formattedChainId }], + })]; + case 6: + _c.sent(); + return [3 /*break*/, 8]; + case 7: + error_2 = _c.sent(); + console.debug('Added network but could not switch chains', error_2); + return [3 /*break*/, 8]; + case 8: return [3 /*break*/, 10]; + case 9: throw error_1; + case 10: return [3 /*break*/, 11]; + case 11: return [2 /*return*/]; + } + }); + }); +} + +var ActiveRowLinkList = styled.div(templateObject_1$R || (templateObject_1$R = __makeTemplateObject(["\n display: flex;\n flex-direction: column;\n padding: 0 8px;\n & > a {\n align-items: center;\n color: ", ";\n display: flex;\n flex-direction: row;\n font-size: 14px;\n font-weight: 500;\n justify-content: space-between;\n padding: 8px 0 4px;\n text-decoration: none;\n }\n & > a:first-child {\n margin: 0;\n margin-top: 0px;\n padding-top: 10px;\n }\n"], ["\n display: flex;\n flex-direction: column;\n padding: 0 8px;\n & > a {\n align-items: center;\n color: ", ";\n display: flex;\n flex-direction: row;\n font-size: 14px;\n font-weight: 500;\n justify-content: space-between;\n padding: 8px 0 4px;\n text-decoration: none;\n }\n & > a:first-child {\n margin: 0;\n margin-top: 0px;\n padding-top: 10px;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text2; +}); +var ActiveRowWrapper = styled.div(templateObject_2$A || (templateObject_2$A = __makeTemplateObject(["\n background-color: ", ";\n border-radius: 8px;\n cursor: pointer;\n padding: 8px;\n width: 100%;\n"], ["\n background-color: ", ";\n border-radius: 8px;\n cursor: pointer;\n padding: 8px;\n width: 100%;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg1; +}); +var FlyoutHeader = styled.div(templateObject_3$u || (templateObject_3$u = __makeTemplateObject(["\n color: ", ";\n font-weight: 400;\n"], ["\n color: ", ";\n font-weight: 400;\n"])), function (_a) { + var theme = _a.theme; + return theme.text2; +}); +var FlyoutMenu = styled.div(templateObject_4$l || (templateObject_4$l = __makeTemplateObject(["\n align-items: flex-start;\n background-color: ", ";\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 border-radius: 20px;\n display: flex;\n flex-direction: column;\n font-size: 16px;\n overflow: auto;\n padding: 16px;\n position: absolute;\n top: 64px;\n width: 272px;\n z-index: 99;\n & > *:not(:last-child) {\n margin-bottom: 12px;\n }\n @media screen and (min-width: ", "px) {\n top: 50px;\n }\n"], ["\n align-items: flex-start;\n background-color: ", ";\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 border-radius: 20px;\n display: flex;\n flex-direction: column;\n font-size: 16px;\n overflow: auto;\n padding: 16px;\n position: absolute;\n top: 64px;\n width: 272px;\n z-index: 99;\n & > *:not(:last-child) {\n margin-bottom: 12px;\n }\n @media screen and (min-width: ", "px) {\n top: 50px;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.bg0; +}, MEDIA_WIDTHS.upToSmall); +var FlyoutRow = styled.div(templateObject_5$h || (templateObject_5$h = __makeTemplateObject(["\n align-items: center;\n background-color: ", ";\n border-radius: 8px;\n cursor: pointer;\n display: flex;\n font-weight: 500;\n justify-content: space-between;\n padding: 6px 8px;\n text-align: left;\n width: 100%;\n"], ["\n align-items: center;\n background-color: ", ";\n border-radius: 8px;\n cursor: pointer;\n display: flex;\n font-weight: 500;\n justify-content: space-between;\n padding: 6px 8px;\n text-align: left;\n width: 100%;\n"])), function (_a) { + var active = _a.active, theme = _a.theme; + return (active ? theme.bg1 : 'transparent'); +}); +var FlyoutRowActiveIndicator = styled.div(templateObject_6$c || (templateObject_6$c = __makeTemplateObject(["\n background-color: ", ";\n border-radius: 50%;\n height: 9px;\n width: 9px;\n"], ["\n background-color: ", ";\n border-radius: 50%;\n height: 9px;\n width: 9px;\n"])), function (_a) { + var theme = _a.theme; + return theme.green1; +}); +var LinkOutCircle = styled(ArrowDownCircle)(templateObject_7$a || (templateObject_7$a = __makeTemplateObject(["\n transform: rotate(230deg);\n width: 16px;\n height: 16px;\n"], ["\n transform: rotate(230deg);\n width: 16px;\n height: 16px;\n"]))); +var Logo$1 = styled.img(templateObject_8$8 || (templateObject_8$8 = __makeTemplateObject(["\n height: 20px;\n width: 20px;\n margin-right: 8px;\n"], ["\n height: 20px;\n width: 20px;\n margin-right: 8px;\n"]))); +var NetworkLabel = styled.div(templateObject_9$7 || (templateObject_9$7 = __makeTemplateObject(["\n flex: 1 1 auto;\n"], ["\n flex: 1 1 auto;\n"]))); +var SelectorLabel = styled(NetworkLabel)(templateObject_10$5 || (templateObject_10$5 = __makeTemplateObject(["\n display: none;\n @media screen and (min-width: ", "px) {\n display: block;\n margin-right: 8px;\n }\n"], ["\n display: none;\n @media screen and (min-width: ", "px) {\n display: block;\n margin-right: 8px;\n }\n"])), MEDIA_WIDTHS.upToSmall); +var SelectorControls = styled.div(templateObject_11$4 || (templateObject_11$4 = __makeTemplateObject(["\n align-items: center;\n background-color: ", ";\n border: 2px solid ", ";\n border-radius: 16px;\n color: ", ";\n cursor: ", ";\n display: flex;\n font-weight: 500;\n justify-content: space-between;\n padding: 6px 8px;\n"], ["\n align-items: center;\n background-color: ", ";\n border: 2px solid ", ";\n border-radius: 16px;\n color: ", ";\n cursor: ", ";\n display: flex;\n font-weight: 500;\n justify-content: space-between;\n padding: 6px 8px;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg0; +}, function (_a) { + var theme = _a.theme; + return theme.bg0; +}, function (_a) { + var theme = _a.theme; + return theme.text1; +}, function (_a) { + var interactive = _a.interactive; + return (interactive ? 'pointer' : 'auto'); +}); +var SelectorLogo = styled(Logo$1)(templateObject_12$4 || (templateObject_12$4 = __makeTemplateObject(["\n margin-right: ", "px;\n @media screen and (min-width: ", "px) {\n margin-right: 8px;\n }\n"], ["\n margin-right: ", "px;\n @media screen and (min-width: ", "px) {\n margin-right: 8px;\n }\n"])), function (_a) { + var interactive = _a.interactive; + return (interactive ? 8 : 0); +}, MEDIA_WIDTHS.upToSmall); +var SelectorWrapper = styled.div(templateObject_13$1 || (templateObject_13$1 = __makeTemplateObject(["\n @media screen and (min-width: ", "px) {\n position: relative;\n }\n"], ["\n @media screen and (min-width: ", "px) {\n position: relative;\n }\n"])), MEDIA_WIDTHS.upToSmall); +var StyledChevronDown = styled(ChevronDown)(templateObject_14$1 || (templateObject_14$1 = __makeTemplateObject(["\n width: 16px;\n"], ["\n width: 16px;\n"]))); +var BridgeLabel = function (_a) { + var chainId = _a.chainId; + switch (chainId) { + case SupportedChainId.ARBITRUM_ONE: + case SupportedChainId.ARBITRUM_RINKEBY: + return jsx(Trans, { children: "Arbitrum Bridge" }, void 0); + case SupportedChainId.OPTIMISM: + case SupportedChainId.OPTIMISTIC_KOVAN: + return jsx(Trans, { children: "Optimism Gateway" }, void 0); + case SupportedChainId.POLYGON: + case SupportedChainId.POLYGON_MUMBAI: + return jsx(Trans, { children: "Polygon Bridge" }, void 0); + default: + return jsx(Trans, { children: "Bridge" }, void 0); + } +}; +var ExplorerLabel = function (_a) { + var chainId = _a.chainId; + switch (chainId) { + case SupportedChainId.ARBITRUM_ONE: + case SupportedChainId.ARBITRUM_RINKEBY: + return jsx(Trans, { children: "Arbiscan" }, void 0); + case SupportedChainId.OPTIMISM: + case SupportedChainId.OPTIMISTIC_KOVAN: + return jsx(Trans, { children: "Optimistic Etherscan" }, void 0); + case SupportedChainId.POLYGON: + case SupportedChainId.POLYGON_MUMBAI: + return jsx(Trans, { children: "Polygonscan" }, void 0); + default: + return jsx(Trans, { children: "Etherscan" }, void 0); + } +}; +function Row(_a) { + var targetChain = _a.targetChain, onSelectChain = _a.onSelectChain; + var _b = useActiveWeb3React(), library = _b.library, chainId = _b.chainId; + if (!library || !chainId) { + return null; + } + var active = chainId === targetChain; + var _c = CHAIN_INFO[targetChain], helpCenterUrl = _c.helpCenterUrl, explorer = _c.explorer, bridge = _c.bridge, label = _c.label, logoUrl = _c.logoUrl; + var rowContent = (jsxs(FlyoutRow, __assign({ onClick: function () { return onSelectChain(targetChain); }, active: active }, { children: [jsx(Logo$1, { src: logoUrl }, void 0), jsx(NetworkLabel, { children: label }, void 0), chainId === targetChain && jsx(FlyoutRowActiveIndicator, {}, void 0)] }), void 0)); + if (active) { + return (jsxs(ActiveRowWrapper, { children: [rowContent, jsxs(ActiveRowLinkList, { children: [bridge ? (jsxs(ExternalLink, __assign({ href: bridge }, { children: [jsx(BridgeLabel, { chainId: chainId }, void 0), " ", jsx(LinkOutCircle, {}, void 0)] }), void 0)) : null, explorer ? (jsxs(ExternalLink, __assign({ href: explorer }, { children: [jsx(ExplorerLabel, { chainId: chainId }, void 0), " ", jsx(LinkOutCircle, {}, void 0)] }), void 0)) : null, helpCenterUrl ? (jsxs(ExternalLink, __assign({ href: helpCenterUrl }, { children: [jsx(Trans, { children: "Help Center" }, void 0), " ", jsx(LinkOutCircle, {}, void 0)] }), void 0)) : null] }, void 0)] }, void 0)); + } + return rowContent; +} +var getParsedChainId = function (parsedQs) { + var chain = parsedQs === null || parsedQs === void 0 ? void 0 : parsedQs.chain; + if (!chain || typeof chain !== 'string') + return { urlChain: undefined, urlChainId: undefined }; + return { urlChain: chain.toLowerCase(), urlChainId: getChainIdFromName(chain) }; +}; +var getChainIdFromName = function (name) { + var entry = Object.entries(CHAIN_IDS_TO_NAMES).find(function (_a) { + var _b = __read(_a, 2); _b[0]; var n = _b[1]; + return n === name; + }); + var chainId = entry === null || entry === void 0 ? void 0 : entry[0]; + return chainId ? parseInt(chainId) : undefined; +}; +var getChainNameFromId = function (id) { + // casting here may not be right but fine to return undefined if it's not a supported chain ID + return CHAIN_IDS_TO_NAMES[id] || ''; +}; +function NetworkSelector() { + var _a = useActiveWeb3React(), chainId = _a.chainId, library = _a.library; + var parsedQs = useParsedQueryString(); + var _b = getParsedChainId(parsedQs), urlChain = _b.urlChain, urlChainId = _b.urlChainId; + var prevChainId = usePrevious(chainId); + var node = useRef(); + var open = useModalOpen(ApplicationModal.NETWORK_SELECTOR); + var toggle = useToggleModal(ApplicationModal.NETWORK_SELECTOR); + useOnClickOutside(node, open ? toggle : undefined); + var history = useHistory(); + var info = chainId ? CHAIN_INFO[chainId] : undefined; + var dispatch = useAppDispatch(); + var handleChainSwitch = useCallback(function (targetChain, skipToggle) { + if (!library) + return; + switchToNetwork({ library: library, chainId: targetChain }) + .then(function () { + if (!skipToggle) { + toggle(); + } + history.replace({ + search: replaceURLParam(history.location.search, 'chain', getChainNameFromId(targetChain)), + }); + }) + .catch(function (error) { + console.error('Failed to switch networks', error); + // we want app network <-> chainId param to be in sync, so if user changes the network by changing the URL + // but the request fails, revert the URL back to current chainId + if (chainId) { + history.replace({ search: replaceURLParam(history.location.search, 'chain', getChainNameFromId(chainId)) }); + } + if (!skipToggle) { + toggle(); + } + dispatch(addPopup({ content: { failedSwitchNetwork: targetChain }, key: "failed-network-switch" })); + }); + }, [dispatch, library, toggle, history, chainId]); + useEffect(function () { + if (!chainId || !prevChainId) + return; + // when network change originates from wallet or dropdown selector, just update URL + if (chainId !== prevChainId) { + history.replace({ search: replaceURLParam(history.location.search, 'chain', getChainNameFromId(chainId)) }); + // otherwise assume network change originates from URL + } + else if (urlChainId && urlChainId !== chainId) { + handleChainSwitch(urlChainId, true); + } + }, [chainId, urlChainId, prevChainId, handleChainSwitch, history]); + // set chain parameter on initial load if not there + useEffect(function () { + if (chainId && !urlChainId) { + history.replace({ search: replaceURLParam(history.location.search, 'chain', getChainNameFromId(chainId)) }); + } + }, [chainId, history, urlChainId, urlChain]); + if (!chainId || !info || !library) { + return null; + } + return (jsxs(SelectorWrapper, __assign({ ref: node }, { children: [jsxs(SelectorControls, __assign({ onClick: toggle, interactive: true }, { children: [jsx(SelectorLogo, { interactive: true, src: info.logoUrl }, void 0), jsx(SelectorLabel, { children: info.label }, void 0), jsx(StyledChevronDown, {}, void 0)] }), void 0), open && (jsxs(FlyoutMenu, __assign({ onMouseLeave: toggle }, { children: [jsx(FlyoutHeader, { children: jsx(Trans, { children: "Select a network" }, void 0) }, void 0), jsx(Row, { onSelectChain: handleChainSwitch, targetChain: SupportedChainId.MAINNET }, void 0), jsx(Row, { onSelectChain: handleChainSwitch, targetChain: SupportedChainId.POLYGON }, void 0), jsx(Row, { onSelectChain: handleChainSwitch, targetChain: SupportedChainId.OPTIMISM }, void 0), jsx(Row, { onSelectChain: handleChainSwitch, targetChain: SupportedChainId.ARBITRUM_ONE }, void 0)] }), void 0))] }), void 0)); +} +var templateObject_1$R, templateObject_2$A, templateObject_3$u, templateObject_4$l, templateObject_5$h, templateObject_6$c, templateObject_7$a, templateObject_8$8, templateObject_9$7, templateObject_10$5, templateObject_11$4, templateObject_12$4, templateObject_13$1, templateObject_14$1; + +var HeaderFrame = styled.div(templateObject_4$k || (templateObject_4$k = __makeTemplateObject(["\n display: grid;\n grid-template-columns: 120px 1fr 120px;\n align-items: center;\n justify-content: space-between;\n align-items: center;\n flex-direction: row;\n width: 100%;\n top: 0;\n position: relative;\n padding: 1rem;\n z-index: 21;\n position: relative;\n /* Background slide effect on scroll. */\n background-image: ", ";\n background-position: ", ";\n background-size: 100% 200%;\n box-shadow: 0px 0px 0px 1px ", ";\n transition: background-position 0.1s, box-shadow 0.1s;\n background-blend-mode: hard-light;\n\n ", ";\n\n ", ";\n\n ", ";\n"], ["\n display: grid;\n grid-template-columns: 120px 1fr 120px;\n align-items: center;\n justify-content: space-between;\n align-items: center;\n flex-direction: row;\n width: 100%;\n top: 0;\n position: relative;\n padding: 1rem;\n z-index: 21;\n position: relative;\n /* Background slide effect on scroll. */\n background-image: ", ";\n background-position: ", ";\n background-size: 100% 200%;\n box-shadow: 0px 0px 0px 1px ", ";\n transition: background-position 0.1s, box-shadow 0.1s;\n background-blend-mode: hard-light;\n\n ", ";\n\n ", ";\n\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return "linear-gradient(to bottom, transparent 50%, " + theme.bg0 + " 50% )}}"; +}, function (_a) { + var showBackground = _a.showBackground; + return (showBackground ? '0 -100%' : '0 0'); +}, function (_a) { + var theme = _a.theme, showBackground = _a.showBackground; + return (showBackground ? theme.bg2 : 'transparent;'); +}, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToLarge(templateObject_1$Q || (templateObject_1$Q = __makeTemplateObject(["\n grid-template-columns: 48px 1fr 1fr;\n "], ["\n grid-template-columns: 48px 1fr 1fr;\n "]))); +}, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToMedium(templateObject_2$z || (templateObject_2$z = __makeTemplateObject(["\n padding: 1rem;\n grid-template-columns: 1fr 1fr;\n "], ["\n padding: 1rem;\n grid-template-columns: 1fr 1fr;\n "]))); +}, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToSmall(templateObject_3$t || (templateObject_3$t = __makeTemplateObject(["\n padding: 1rem;\n grid-template-columns: 36px 1fr;\n "], ["\n padding: 1rem;\n grid-template-columns: 36px 1fr;\n "]))); +}); +var HeaderControls = styled.div(templateObject_5$g || (templateObject_5$g = __makeTemplateObject(["\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-self: flex-end;\n"], ["\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-self: flex-end;\n"]))); +var HeaderElement = styled.div(templateObject_7$9 || (templateObject_7$9 = __makeTemplateObject(["\n display: flex;\n align-items: center;\n\n &:not(:first-child) {\n margin-left: 0.5em;\n }\n\n /* addresses safari's lack of support for \"gap\" */\n & > *:not(:first-child) {\n margin-left: 8px;\n }\n\n ", ";\n"], ["\n display: flex;\n align-items: center;\n\n &:not(:first-child) {\n margin-left: 0.5em;\n }\n\n /* addresses safari's lack of support for \"gap\" */\n & > *:not(:first-child) {\n margin-left: 8px;\n }\n\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToMedium(templateObject_6$b || (templateObject_6$b = __makeTemplateObject(["\n align-items: center;\n "], ["\n align-items: center;\n "]))); +}); +var HeaderLinks = styled(Row$1)(templateObject_11$3 || (templateObject_11$3 = __makeTemplateObject(["\n justify-self: center;\n background-color: ", ";\n width: fit-content;\n padding: 2px;\n border-radius: 16px;\n display: grid;\n grid-auto-flow: column;\n grid-gap: 10px;\n overflow: auto;\n align-items: center;\n ", ";\n ", ";\n ", ";\n"], ["\n justify-self: center;\n background-color: ", ";\n width: fit-content;\n padding: 2px;\n border-radius: 16px;\n display: grid;\n grid-auto-flow: column;\n grid-gap: 10px;\n overflow: auto;\n align-items: center;\n ", ";\n ", ";\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg0; +}, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToLarge(templateObject_8$7 || (templateObject_8$7 = __makeTemplateObject(["\n justify-self: start; \n "], ["\n justify-self: start; \n "]))); +}, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToMedium(templateObject_9$6 || (templateObject_9$6 = __makeTemplateObject(["\n justify-self: center;\n "], ["\n justify-self: center;\n "]))); +}, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToMedium(templateObject_10$4 || (templateObject_10$4 = __makeTemplateObject(["\n flex-direction: row;\n justify-content: space-between;\n justify-self: center;\n z-index: 99;\n position: fixed;\n bottom: 0; right: 50%;\n transform: translate(50%,-50%);\n margin: 0 auto;\n background-color: ", ";\n border: 1px solid ", ";\n box-shadow: 0px 6px 10px rgb(0 0 0 / 2%);\n "], ["\n flex-direction: row;\n justify-content: space-between;\n justify-self: center;\n z-index: 99;\n position: fixed;\n bottom: 0; right: 50%;\n transform: translate(50%,-50%);\n margin: 0 auto;\n background-color: ", ";\n border: 1px solid ", ";\n box-shadow: 0px 6px 10px rgb(0 0 0 / 2%);\n "])), function (_a) { + var theme = _a.theme; + return theme.bg0; + }, function (_a) { + var theme = _a.theme; + return theme.bg2; + }); +}); +var AccountElement = styled.div(templateObject_12$3 || (templateObject_12$3 = __makeTemplateObject(["\n display: flex;\n flex-direction: row;\n align-items: center;\n background-color: ", ";\n border-radius: 16px;\n white-space: nowrap;\n width: 100%;\n height: 40px;\n\n :focus {\n border: 1px solid blue;\n }\n"], ["\n display: flex;\n flex-direction: row;\n align-items: center;\n background-color: ", ";\n border-radius: 16px;\n white-space: nowrap;\n width: 100%;\n height: 40px;\n\n :focus {\n border: 1px solid blue;\n }\n"])), function (_a) { + var theme = _a.theme, active = _a.active; + return (!active ? theme.bg0 : theme.bg0); +}); +var UNIAmount = styled(AccountElement)(templateObject_13 || (templateObject_13 = __makeTemplateObject(["\n color: white;\n padding: 4px 8px;\n height: 36px;\n font-weight: 500;\n background-color: ", ";\n background: radial-gradient(174.47% 188.91% at 1.84% 0%, #ff007a 0%, #2172e5 100%), #edeef2;\n"], ["\n color: white;\n padding: 4px 8px;\n height: 36px;\n font-weight: 500;\n background-color: ", ";\n background: radial-gradient(174.47% 188.91% at 1.84% 0%, #ff007a 0%, #2172e5 100%), #edeef2;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg3; +}); +var UNIWrapper = styled.span(templateObject_14 || (templateObject_14 = __makeTemplateObject(["\n width: fit-content;\n position: relative;\n cursor: pointer;\n\n :hover {\n opacity: 0.8;\n }\n\n :active {\n opacity: 0.9;\n }\n"], ["\n width: fit-content;\n position: relative;\n cursor: pointer;\n\n :hover {\n opacity: 0.8;\n }\n\n :active {\n opacity: 0.9;\n }\n"]))); +var BalanceText = styled(Text$1)(templateObject_16 || (templateObject_16 = __makeTemplateObject(["\n ", ";\n"], ["\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToExtraSmall(templateObject_15 || (templateObject_15 = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); +}); +var Title = styled.a(templateObject_18 || (templateObject_18 = __makeTemplateObject(["\n display: flex;\n align-items: center;\n pointer-events: auto;\n justify-self: flex-start;\n margin-right: 12px;\n ", ";\n :hover {\n cursor: pointer;\n }\n"], ["\n display: flex;\n align-items: center;\n pointer-events: auto;\n justify-self: flex-start;\n margin-right: 12px;\n ", ";\n :hover {\n cursor: pointer;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToSmall(templateObject_17 || (templateObject_17 = __makeTemplateObject(["\n justify-self: center;\n "], ["\n justify-self: center;\n "]))); +}); +var UniIcon = styled.div(templateObject_19 || (templateObject_19 = __makeTemplateObject(["\n transition: transform 0.3s ease;\n :hover {\n transform: rotate(-5deg);\n }\n\n position: relative;\n"], ["\n transition: transform 0.3s ease;\n :hover {\n transform: rotate(-5deg);\n }\n\n position: relative;\n"]))); +var activeClassName = 'ACTIVE'; +var StyledNavLink = styled(NavLink).attrs({ + activeClassName: activeClassName, +})(templateObject_20 || (templateObject_20 = __makeTemplateObject(["\n ", "\n align-items: left;\n border-radius: 3rem;\n outline: none;\n cursor: pointer;\n text-decoration: none;\n color: ", ";\n font-size: 1rem;\n font-weight: 500;\n padding: 8px 12px;\n word-break: break-word;\n overflow: hidden;\n white-space: nowrap;\n &.", " {\n border-radius: 14px;\n font-weight: 600;\n justify-content: center;\n color: ", ";\n background-color: ", ";\n }\n\n :hover,\n :focus {\n color: ", ";\n }\n"], ["\n ", "\n align-items: left;\n border-radius: 3rem;\n outline: none;\n cursor: pointer;\n text-decoration: none;\n color: ", ";\n font-size: 1rem;\n font-weight: 500;\n padding: 8px 12px;\n word-break: break-word;\n overflow: hidden;\n white-space: nowrap;\n &.", " {\n border-radius: 14px;\n font-weight: 600;\n justify-content: center;\n color: ", ";\n background-color: ", ";\n }\n\n :hover,\n :focus {\n color: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.flexRowNoWrap; +}, function (_a) { + var theme = _a.theme; + return theme.text2; +}, activeClassName, function (_a) { + var theme = _a.theme; + return theme.text1; +}, function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var theme = _a.theme; + return darken(0.1, theme.text1); +}); +var StyledExternalLink = styled(ExternalLink).attrs({ + activeClassName: activeClassName, +})(templateObject_21 || (templateObject_21 = __makeTemplateObject(["\n ", "\n align-items: left;\n border-radius: 3rem;\n outline: none;\n cursor: pointer;\n text-decoration: none;\n color: ", ";\n font-size: 1rem;\n width: fit-content;\n margin: 0 12px;\n font-weight: 500;\n\n &.", " {\n border-radius: 14px;\n font-weight: 600;\n color: ", ";\n }\n\n :hover,\n :focus {\n color: ", ";\n text-decoration: none;\n }\n"], ["\n ", "\n align-items: left;\n border-radius: 3rem;\n outline: none;\n cursor: pointer;\n text-decoration: none;\n color: ", ";\n font-size: 1rem;\n width: fit-content;\n margin: 0 12px;\n font-weight: 500;\n\n &.", " {\n border-radius: 14px;\n font-weight: 600;\n color: ", ";\n }\n\n :hover,\n :focus {\n color: ", ";\n text-decoration: none;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.flexRowNoWrap; +}, function (_a) { + var theme = _a.theme; + return theme.text2; +}, activeClassName, function (_a) { + var theme = _a.theme; + return theme.text1; +}, function (_a) { + var theme = _a.theme; + return darken(0.1, theme.text1); +}); +function Header$2() { + var _a; + var _b = useActiveWeb3React(), account = _b.account, chainId = _b.chainId; + var userEthBalance = (_a = useNativeCurrencyBalances(account ? [account] : [])) === null || _a === void 0 ? void 0 : _a[account !== null && account !== void 0 ? account : '']; + var _c = __read(useDarkModeManager(), 1), darkMode = _c[0]; + var _d = useTheme(), white = _d.white, black = _d.black; + var toggleClaimModal = useToggleSelfClaimModal(); + var availableClaim = useUserHasAvailableClaim(account); + var claimTxn = useUserHasSubmittedClaim(account !== null && account !== void 0 ? account : undefined).claimTxn; + var showClaimPopup = useShowClaimPopup(); + var scrollY = useScrollPosition(); + var _e = CHAIN_INFO[chainId ? chainId : SupportedChainId.MAINNET], infoLink = _e.infoLink, nativeCurrencySymbol = _e.addNetworkInfo.nativeCurrency.symbol; + return (jsxs(HeaderFrame, __assign({ showBackground: scrollY > 45 }, { children: [jsx(ClaimModal, {}, void 0), jsx(Title, __assign({ href: "." }, { children: jsxs(UniIcon, { children: [jsx(SvgLogo, { fill: darkMode ? white : black, width: "24px", height: "100%", title: "logo" }, void 0), jsx(HolidayOrnament, {}, void 0)] }, void 0) }), void 0), jsxs(HeaderLinks, { children: [jsx(StyledNavLink, __assign({ id: "swap-nav-link", to: '/swap' }, { children: jsx(Trans, { children: "Swap" }, void 0) }), void 0), jsx(StyledNavLink, __assign({ id: "pool-nav-link", to: '/pool', isActive: function (match, _a) { + var pathname = _a.pathname; + return Boolean(match) || + pathname.startsWith('/add') || + pathname.startsWith('/remove') || + pathname.startsWith('/increase') || + pathname.startsWith('/find'); + } }, { children: jsx(Trans, { children: "Pool" }, void 0) }), void 0), (!chainId || chainId === SupportedChainId.MAINNET) && (jsx(StyledNavLink, __assign({ id: "vote-nav-link", to: '/vote' }, { children: jsx(Trans, { children: "Vote" }, void 0) }), void 0)), jsxs(StyledExternalLink, __assign({ id: "charts-nav-link", href: infoLink }, { children: [jsx(Trans, { children: "Charts" }, void 0), jsx("sup", { children: "\u2197" }, void 0)] }), void 0)] }, void 0), jsxs(HeaderControls, { children: [jsx(HeaderElement, { children: jsx(NetworkSelector, {}, void 0) }, void 0), jsxs(HeaderElement, { children: [availableClaim && !showClaimPopup && (jsxs(UNIWrapper, __assign({ onClick: toggleClaimModal }, { children: [jsx(UNIAmount, __assign({ active: !!account && !availableClaim, style: { pointerEvents: 'auto' } }, { children: jsx(ThemedText.White, __assign({ padding: "0 2px" }, { children: claimTxn && !(claimTxn === null || claimTxn === void 0 ? void 0 : claimTxn.receipt) ? (jsx(Dots, { children: jsx(Trans, { children: "Claiming UNI" }, void 0) }, void 0)) : (jsx(Trans, { children: "Claim UNI" }, void 0)) }), void 0) }), void 0), jsx(CardNoise, {}, void 0)] }), void 0)), jsxs(AccountElement, __assign({ active: !!account }, { children: [account && userEthBalance ? (jsx(BalanceText, __assign({ style: { flexShrink: 0, userSelect: 'none' }, pl: "0.75rem", pr: "0.5rem", fontWeight: 500 }, { children: jsxs(Trans, { children: [userEthBalance === null || userEthBalance === void 0 ? void 0 : userEthBalance.toSignificant(3), " ", nativeCurrencySymbol] }, void 0) }), void 0)) : null, jsx(Web3Status, {}, void 0)] }), void 0)] }, void 0), jsx(HeaderElement, { children: jsx(Menu, {}, void 0) }, void 0)] }, void 0)] }), void 0)); +} +var templateObject_1$Q, templateObject_2$z, templateObject_3$t, templateObject_4$k, templateObject_5$g, templateObject_6$b, templateObject_7$9, templateObject_8$7, templateObject_9$6, templateObject_10$4, templateObject_11$3, templateObject_12$3, templateObject_13, templateObject_14, templateObject_15, templateObject_16, templateObject_17, templateObject_18, templateObject_19, templateObject_20, templateObject_21; + +var useMachineTimeMs = function (updateInterval) { + var _a = __read(useState(Date.now()), 2), now = _a[0], setNow = _a[1]; + useInterval(function () { + setNow(Date.now()); + }, updateInterval); + return now; +}; + +var BodyRow = styled.div(templateObject_1$P || (templateObject_1$P = __makeTemplateObject(["\n color: ", ";\n font-size: 12px;\n"], ["\n color: ", ";\n font-size: 12px;\n"])), function (_a) { + var theme = _a.theme; + return theme.black; +}); +var CautionIcon = styled(AlertOctagon)(templateObject_2$y || (templateObject_2$y = __makeTemplateObject(["\n color: ", ";\n"], ["\n color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.black; +}); +var Link = styled(ExternalLink)(templateObject_3$s || (templateObject_3$s = __makeTemplateObject(["\n color: ", ";\n text-decoration: underline;\n"], ["\n color: ", ";\n text-decoration: underline;\n"])), function (_a) { + var theme = _a.theme; + return theme.black; +}); +var TitleRow = styled.div(templateObject_4$j || (templateObject_4$j = __makeTemplateObject(["\n align-items: center;\n display: flex;\n justify-content: flex-start;\n margin-bottom: 8px;\n"], ["\n align-items: center;\n display: flex;\n justify-content: flex-start;\n margin-bottom: 8px;\n"]))); +var TitleText = styled.div(templateObject_5$f || (templateObject_5$f = __makeTemplateObject(["\n color: black;\n font-weight: 600;\n font-size: 16px;\n line-height: 20px;\n margin: 0px 12px;\n"], ["\n color: black;\n font-weight: 600;\n font-size: 16px;\n line-height: 20px;\n margin: 0px 12px;\n"]))); +var Wrapper$e = styled.div(templateObject_6$a || (templateObject_6$a = __makeTemplateObject(["\n background-color: ", ";\n border-radius: 12px;\n bottom: 60px;\n display: none;\n max-width: 348px;\n padding: 16px 20px;\n position: absolute;\n right: 16px;\n @media screen and (min-width: ", "px) {\n display: block;\n }\n"], ["\n background-color: ", ";\n border-radius: 12px;\n bottom: 60px;\n display: none;\n max-width: 348px;\n padding: 16px 20px;\n position: absolute;\n right: 16px;\n @media screen and (min-width: ", "px) {\n display: block;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.yellow3; +}, MEDIA_WIDTHS.upToMedium); +function ChainConnectivityWarning() { + var chainId = useActiveWeb3React().chainId; + var info = CHAIN_INFO[chainId !== null && chainId !== void 0 ? chainId : SupportedChainId.MAINNET]; + var label = info === null || info === void 0 ? void 0 : info.label; + return (jsxs(Wrapper$e, { children: [jsxs(TitleRow, { children: [jsx(CautionIcon, {}, void 0), jsx(TitleText, { children: jsx(Trans, { children: "Network Warning" }, void 0) }, void 0)] }, void 0), jsxs(BodyRow, { children: [chainId === SupportedChainId.MAINNET ? (jsx(Trans, { children: "You may have lost your network connection." }, void 0)) : (jsxs(Trans, { children: ["You may have lost your network connection, or ", label, " might be down right now."] }, void 0)), ' ', info.statusPage !== undefined && (jsxs("span", { children: [jsx(Trans, { children: "Check network status" }, void 0), ' ', jsx(Link, __assign({ href: info.statusPage || '' }, { children: jsx(Trans, { children: "here." }, void 0) }), void 0)] }, void 0))] }, void 0)] }, void 0)); +} +var templateObject_1$P, templateObject_2$y, templateObject_3$s, templateObject_4$j, templateObject_5$f, templateObject_6$a; + +var StyledPolling$1 = styled.div(templateObject_2$x || (templateObject_2$x = __makeTemplateObject(["\n position: fixed;\n display: flex;\n align-items: center;\n right: 0;\n bottom: 0;\n padding: 1rem;\n color: ", ";\n transition: 250ms ease color;\n\n ", "\n"], ["\n position: fixed;\n display: flex;\n align-items: center;\n right: 0;\n bottom: 0;\n padding: 1rem;\n color: ", ";\n transition: 250ms ease color;\n\n ", "\n"])), function (_a) { + var theme = _a.theme, warning = _a.warning; + return (warning ? theme.yellow3 : theme.green1); +}, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToMedium(templateObject_1$O || (templateObject_1$O = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); +}); +var StyledPollingNumber = styled(ThemedText.Small)(templateObject_3$r || (templateObject_3$r = __makeTemplateObject(["\n transition: opacity 0.25s ease;\n opacity: ", ";\n :hover {\n opacity: 1;\n }\n\n a {\n color: unset;\n }\n a:hover {\n text-decoration: none;\n color: unset;\n }\n"], ["\n transition: opacity 0.25s ease;\n opacity: ", ";\n :hover {\n opacity: 1;\n }\n\n a {\n color: unset;\n }\n a:hover {\n text-decoration: none;\n color: unset;\n }\n"])), function (_a) { + var breathe = _a.breathe, hovering = _a.hovering; + return (hovering ? 0.7 : breathe ? 1 : 0.5); +}); +var StyledPollingDot$1 = styled.div(templateObject_4$i || (templateObject_4$i = __makeTemplateObject(["\n width: 8px;\n height: 8px;\n min-height: 8px;\n min-width: 8px;\n border-radius: 50%;\n position: relative;\n background-color: ", ";\n transition: 250ms ease background-color;\n"], ["\n width: 8px;\n height: 8px;\n min-height: 8px;\n min-width: 8px;\n border-radius: 50%;\n position: relative;\n background-color: ", ";\n transition: 250ms ease background-color;\n"])), function (_a) { + var theme = _a.theme, warning = _a.warning; + return (warning ? theme.yellow3 : theme.green1); +}); +var StyledGasDot = styled.div(templateObject_5$e || (templateObject_5$e = __makeTemplateObject(["\n background-color: ", ";\n border-radius: 50%;\n height: 4px;\n min-height: 4px;\n min-width: 4px;\n position: relative;\n transition: 250ms ease background-color;\n width: 4px;\n"], ["\n background-color: ", ";\n border-radius: 50%;\n height: 4px;\n min-height: 4px;\n min-width: 4px;\n position: relative;\n transition: 250ms ease background-color;\n width: 4px;\n"])), function (_a) { + var theme = _a.theme; + return theme.text3; +}); +var rotate360$1 = keyframes(templateObject_6$9 || (templateObject_6$9 = __makeTemplateObject(["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"], ["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"]))); +var Spinner$1 = styled.div(templateObject_7$8 || (templateObject_7$8 = __makeTemplateObject(["\n animation: ", " 1s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n transform: translateZ(0);\n\n border-top: 1px solid transparent;\n border-right: 1px solid transparent;\n border-bottom: 1px solid transparent;\n border-left: 2px solid ", ";\n background: transparent;\n width: 14px;\n height: 14px;\n border-radius: 50%;\n position: relative;\n transition: 250ms ease border-color;\n\n left: -3px;\n top: -3px;\n"], ["\n animation: ", " 1s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n transform: translateZ(0);\n\n border-top: 1px solid transparent;\n border-right: 1px solid transparent;\n border-bottom: 1px solid transparent;\n border-left: 2px solid ", ";\n background: transparent;\n width: 14px;\n height: 14px;\n border-radius: 50%;\n position: relative;\n transition: 250ms ease border-color;\n\n left: -3px;\n top: -3px;\n"])), rotate360$1, function (_a) { + var theme = _a.theme, warning = _a.warning; + return (warning ? theme.yellow3 : theme.green1); +}); +var DEFAULT_MS_BEFORE_WARNING = ms(templateObject_8$6 || (templateObject_8$6 = __makeTemplateObject(["10m"], ["10m"]))); +var NETWORK_HEALTH_CHECK_MS = ms(templateObject_9$5 || (templateObject_9$5 = __makeTemplateObject(["10s"], ["10s"]))); +function Polling() { + var _a, _b; + var chainId = useActiveWeb3React().chainId; + var blockNumber = useBlockNumber(); + var _c = __read(useState(false), 2), isMounting = _c[0], setIsMounting = _c[1]; + var _d = __read(useState(false), 2), isHover = _d[0], setIsHover = _d[1]; + var machineTime = useMachineTimeMs(NETWORK_HEALTH_CHECK_MS); + var blockTime = useCurrentBlockTimestamp(); + var theme = useTheme(); + var ethGasPrice = useGasPrice(); + var priceGwei = ethGasPrice ? JSBI.divide(ethGasPrice, JSBI.BigInt(1000000000)) : undefined; + var waitMsBeforeWarning = (_b = (chainId ? (_a = CHAIN_INFO[chainId]) === null || _a === void 0 ? void 0 : _a.blockWaitMsBeforeWarning : DEFAULT_MS_BEFORE_WARNING)) !== null && _b !== void 0 ? _b : DEFAULT_MS_BEFORE_WARNING; + var warning = Boolean(!!blockTime && machineTime - blockTime.mul(1000).toNumber() > waitMsBeforeWarning); + useEffect(function () { + if (!blockNumber) { + return; + } + setIsMounting(true); + var mountingTimer = setTimeout(function () { return setIsMounting(false); }, 1000); + // this will clear Timeout when component unmount like in willComponentUnmount + return function () { + clearTimeout(mountingTimer); + }; + }, [blockNumber] //useEffect will run only one time + //if you pass a value to array, like this [data] than clearTimeout will run every time this value changes (useEffect re-run) + ); + //TODO - chainlink gas oracle is really slow. Can we get a better data source? + return (jsx(Fragment, { children: jsxs(RowFixed, { children: [jsxs(StyledPolling$1, __assign({ onMouseEnter: function () { return setIsHover(true); }, onMouseLeave: function () { return setIsHover(false); }, warning: warning }, { children: [jsx(ExternalLink, __assign({ href: 'https://etherscan.io/gastracker' }, { children: priceGwei ? (jsxs(RowFixed, __assign({ style: { marginRight: '8px' } }, { children: [jsx(ThemedText.Main, __assign({ fontSize: "11px", mr: "8px", color: theme.text3 }, { children: jsxs(MouseoverTooltip, __assign({ text: jsx(Trans, { children: "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI." }, void 0) }, { children: [priceGwei.toString(), " ", jsx(Trans, { children: "gwei" }, void 0)] }), void 0) }), void 0), jsx(StyledGasDot, {}, void 0)] }), void 0)) : null }), void 0), jsx(StyledPollingNumber, __assign({ breathe: isMounting, hovering: isHover }, { children: jsx(ExternalLink, __assign({ href: chainId && blockNumber ? getExplorerLink(chainId, blockNumber.toString(), ExplorerDataType.BLOCK) : '' }, { children: jsxs(MouseoverTooltip, __assign({ text: jsx(Trans, { children: "The most recent block number on this network. Prices update on every block." }, void 0) }, { children: [blockNumber, "\u2002"] }), void 0) }), void 0) }), void 0), jsx(StyledPollingDot$1, __assign({ warning: warning }, { children: isMounting && jsx(Spinner$1, { warning: warning }, void 0) }), void 0), ' '] }), void 0), warning && jsx(ChainConnectivityWarning, {}, void 0)] }, void 0) }, void 0)); +} +var templateObject_1$O, templateObject_2$x, templateObject_3$r, templateObject_4$i, templateObject_5$e, templateObject_6$9, templateObject_7$8, templateObject_8$6, templateObject_9$5; + +var StyledClaimPopup = styled(AutoColumn)(templateObject_1$N || (templateObject_1$N = __makeTemplateObject(["\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n border-radius: 20px;\n padding: 1.5rem;\n overflow: hidden;\n position: relative;\n max-width: 360px;\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n"], ["\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n border-radius: 20px;\n padding: 1.5rem;\n overflow: hidden;\n position: relative;\n max-width: 360px;\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n"]))); +var StyledClose$1 = styled(X)(templateObject_2$w || (templateObject_2$w = __makeTemplateObject(["\n position: absolute;\n right: 10px;\n top: 10px;\n\n :hover {\n cursor: pointer;\n }\n"], ["\n position: absolute;\n right: 10px;\n top: 10px;\n\n :hover {\n cursor: pointer;\n }\n"]))); +var rotate = keyframes(templateObject_3$q || (templateObject_3$q = __makeTemplateObject(["\n 0% {\n transform: perspective(1000px) rotateY(0deg);\n }\n\n 100% {\n transform: perspective(1000px) rotateY(360deg);\n }\n"], ["\n 0% {\n transform: perspective(1000px) rotateY(0deg);\n }\n\n 100% {\n transform: perspective(1000px) rotateY(360deg);\n }\n"]))); +var UniToken = styled.img(templateObject_4$h || (templateObject_4$h = __makeTemplateObject(["\n animation: ", " 5s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n"], ["\n animation: ", " 5s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n"])), rotate); +function ClaimPopup() { + var _a; + var account = useActiveWeb3React().account; + // dont store these in persisted state yet + var showClaimPopup = useShowClaimPopup(); + var toggleShowClaimPopup = useToggleShowClaimPopup(); + // toggle for showing this modal + var showClaimModal = useModalOpen(ApplicationModal.SELF_CLAIM); + var toggleSelfClaimModal = useToggleSelfClaimModal(); + var handleToggleSelfClaimModal = useCallback(function () { + ReactGA.event({ + category: 'MerkleDrop', + action: 'Toggle self claim modal', + }); + toggleSelfClaimModal(); + }, [toggleSelfClaimModal]); + // const userHasAvailableclaim = useUserHasAvailableClaim() + var userHasAvailableclaim = useUserHasAvailableClaim(account); + var unclaimedAmount = useUserUnclaimedAmount(account); + // listen for available claim and show popup if needed + useEffect(function () { + if (userHasAvailableclaim) { + ReactGA.event({ + category: 'MerkleDrop', + action: 'Show claim popup', + }); + toggleShowClaimPopup(); + } + // the toggleShowClaimPopup function changes every time the popup changes, so this will cause an infinite loop. + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [userHasAvailableclaim]); + return (jsx(Fragment, { children: showClaimPopup && !showClaimModal && (jsxs(StyledClaimPopup, __assign({ gap: "md" }, { children: [jsx(CardBGImage, {}, void 0), jsx(CardNoise, {}, void 0), jsx(StyledClose$1, { stroke: "white", onClick: toggleShowClaimPopup }, void 0), jsxs(AutoColumn, __assign({ style: { padding: '2rem 0', zIndex: 10 }, justify: "center" }, { children: [jsx(UniToken, { width: "48px", src: tokenLogo }, void 0), ' ', jsxs(ThemedText.White, __assign({ style: { marginTop: '1rem' }, fontSize: 36, fontWeight: 600 }, { children: [unclaimedAmount === null || unclaimedAmount === void 0 ? void 0 : unclaimedAmount.toFixed(0, (_a = { groupSeparator: ',' }) !== null && _a !== void 0 ? _a : '-'), " UNI"] }), void 0), jsxs(ThemedText.White, __assign({ style: { paddingTop: '1.25rem', textAlign: 'center' }, fontWeight: 600, color: "white" }, { children: [jsx("span", __assign({ role: "img", "aria-label": "party" }, { children: "\uD83C\uDF89" }), void 0), ' ', jsx(Trans, { children: "UNI has arrived" }, void 0), ' ', jsx("span", __assign({ role: "img", "aria-label": "party" }, { children: "\uD83C\uDF89" }), void 0)] }), void 0), jsx(ThemedText.SubHeader, __assign({ style: { paddingTop: '0.5rem', textAlign: 'center' }, color: "white" }, { children: jsxs(Trans, { children: ["Thanks for being part of the Uniswap community ", jsx(Heart, { size: 12 }, void 0)] }, void 0) }), void 0)] }), void 0), jsx(AutoColumn, __assign({ style: { zIndex: 10 }, justify: "center" }, { children: jsx(ButtonPrimary, __assign({ padding: "8px", "$borderRadius": "8px", width: 'fit-content', onClick: handleToggleSelfClaimModal }, { children: jsx(Trans, { children: "Claim your UNI tokens" }, void 0) }), void 0) }), void 0)] }), void 0)) }, void 0)); +} +var templateObject_1$N, templateObject_2$w, templateObject_3$q, templateObject_4$h; + +var RowNoFlex$1 = styled(AutoRow)(templateObject_1$M || (templateObject_1$M = __makeTemplateObject(["\n flex-wrap: nowrap;\n"], ["\n flex-wrap: nowrap;\n"]))); +function FailedNetworkSwitchPopup(_a) { + var chainId = _a.chainId; + var chainInfo = CHAIN_INFO[chainId]; + var theme = useContext(ThemeContext); + return (jsxs(RowNoFlex$1, { children: [jsx("div", __assign({ style: { paddingRight: 16 } }, { children: jsx(AlertCircle, { color: theme.red1, size: 24 }, void 0) }), void 0), jsx(AutoColumn, __assign({ gap: "8px" }, { children: jsx(ThemedText.Body, __assign({ fontWeight: 500 }, { children: jsxs(Trans, { children: ["Failed to switch networks from the Uniswap Interface. In order to use Uniswap on ", chainInfo.label, ", you must change the network in your wallet."] }, void 0) }), void 0) }), void 0)] }, void 0)); +} +var templateObject_1$M; + +var RowNoFlex = styled(AutoRow)(templateObject_1$L || (templateObject_1$L = __makeTemplateObject(["\n flex-wrap: nowrap;\n"], ["\n flex-wrap: nowrap;\n"]))); +function TransactionPopup(_a) { + var hash = _a.hash; + var chainId = useActiveWeb3React().chainId; + var tx = useTransaction(hash); + var theme = useContext(ThemeContext); + if (!tx) + return null; + var success = Boolean(tx.receipt && tx.receipt.status === 1); + return (jsxs(RowNoFlex, { children: [jsx("div", __assign({ style: { paddingRight: 16 } }, { children: success ? jsx(CheckCircle, { color: theme.green1, size: 24 }, void 0) : jsx(AlertCircle, { color: theme.red1, size: 24 }, void 0) }), void 0), jsxs(AutoColumn, __assign({ gap: "8px" }, { children: [jsx(ThemedText.Body, __assign({ fontWeight: 500 }, { children: jsx(TransactionSummary, { info: tx.info }, void 0) }), void 0), chainId && (jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, hash, ExplorerDataType.TRANSACTION) }, { children: "View on Explorer" }), void 0))] }), void 0)] }, void 0)); +} +var templateObject_1$L; + +var StyledClose = styled(X)(templateObject_1$K || (templateObject_1$K = __makeTemplateObject(["\n position: absolute;\n right: 10px;\n top: 10px;\n\n :hover {\n cursor: pointer;\n }\n"], ["\n position: absolute;\n right: 10px;\n top: 10px;\n\n :hover {\n cursor: pointer;\n }\n"]))); +var Popup = styled.div(templateObject_3$p || (templateObject_3$p = __makeTemplateObject(["\n display: inline-block;\n width: 100%;\n padding: 1em;\n background-color: ", ";\n position: relative;\n border-radius: 10px;\n padding: 20px;\n padding-right: 35px;\n overflow: hidden;\n\n ", "\n"], ["\n display: inline-block;\n width: 100%;\n padding: 1em;\n background-color: ", ";\n position: relative;\n border-radius: 10px;\n padding: 20px;\n padding-right: 35px;\n overflow: hidden;\n\n ", "\n"])), function (_a) { + var theme = _a.theme; + return theme.bg0; +}, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToSmall(templateObject_2$v || (templateObject_2$v = __makeTemplateObject(["\n min-width: 290px;\n &:not(:last-of-type) {\n margin-right: 20px;\n }\n "], ["\n min-width: 290px;\n &:not(:last-of-type) {\n margin-right: 20px;\n }\n "]))); +}); +var Fader = styled.div(templateObject_4$g || (templateObject_4$g = __makeTemplateObject(["\n position: absolute;\n bottom: 0px;\n left: 0px;\n width: 100%;\n height: 2px;\n background-color: ", ";\n"], ["\n position: absolute;\n bottom: 0px;\n left: 0px;\n width: 100%;\n height: 2px;\n background-color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg3; +}); +var AnimatedFader = animated(Fader); +function PopupItem(_a) { + var removeAfterMs = _a.removeAfterMs, content = _a.content, popKey = _a.popKey; + var removePopup = useRemovePopup(); + var removeThisPopup = useCallback(function () { return removePopup(popKey); }, [popKey, removePopup]); + useEffect(function () { + if (removeAfterMs === null) + return undefined; + var timeout = setTimeout(function () { + removeThisPopup(); + }, removeAfterMs); + return function () { + clearTimeout(timeout); + }; + }, [removeAfterMs, removeThisPopup]); + var theme = useContext(ThemeContext); + var popupContent; + if ('txn' in content) { + var hash = content.txn.hash; + popupContent = jsx(TransactionPopup, { hash: hash }, void 0); + } + else if ('failedSwitchNetwork' in content) { + popupContent = jsx(FailedNetworkSwitchPopup, { chainId: content.failedSwitchNetwork }, void 0); + } + var faderStyle = useSpring$1({ + from: { width: '100%' }, + to: { width: '0%' }, + config: { duration: removeAfterMs !== null && removeAfterMs !== void 0 ? removeAfterMs : undefined }, + }); + return (jsxs(Popup, { children: [jsx(StyledClose, { color: theme.text2, onClick: removeThisPopup }, void 0), popupContent, removeAfterMs !== null ? jsx(AnimatedFader, { style: faderStyle }, void 0) : null] }, void 0)); +} +var templateObject_1$K, templateObject_2$v, templateObject_3$p, templateObject_4$g; + +var BGImage = "055f83ffb7252729.svg"; + +var Wrapper$d = styled(AutoColumn)(templateObject_2$u || (templateObject_2$u = __makeTemplateObject(["\n background: #edeef2;\n position: relative;\n border-radius: 12px;\n padding: 18px;\n max-width: 360px;\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n color: ", ";\n overflow: hidden;\n\n ", "\n"], ["\n background: #edeef2;\n position: relative;\n border-radius: 12px;\n padding: 18px;\n max-width: 360px;\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n color: ", ";\n overflow: hidden;\n\n ", "\n"])), function (_a) { + var theme = _a.theme; + return theme.text1; +}, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToSmall(templateObject_1$J || (templateObject_1$J = __makeTemplateObject(["\n max-width: 100%;\n "], ["\n max-width: 100%;\n "]))); +}); +var BGOrb = styled.img(templateObject_3$o || (templateObject_3$o = __makeTemplateObject(["\n position: absolute;\n right: -64px;\n top: -64px;\n width: 180px;\n z-index: ", ";\n"], ["\n position: absolute;\n right: -64px;\n top: -64px;\n width: 180px;\n z-index: ", ";\n"])), Z_INDEX.sticky); +var WrappedCloseIcon = styled(X)(templateObject_4$f || (templateObject_4$f = __makeTemplateObject(["\n position: absolute;\n top: 10px;\n right: 10px;\n width: 20px;\n height: 20px;\n stroke: #7c7c80;\n z-index: ", ";\n :hover {\n cursor: pointer;\n opacity: 0.8;\n }\n"], ["\n position: absolute;\n top: 10px;\n right: 10px;\n width: 20px;\n height: 20px;\n stroke: #7c7c80;\n z-index: ", ";\n :hover {\n cursor: pointer;\n opacity: 0.8;\n }\n"])), Z_INDEX.fixed); +var END_TIMESTAMP = 1642272346; // Jan 15th +function SurveyPopup() { + var theme = useTheme(); + var _a = __read(useShowSurveyPopup(), 2), showPopup = _a[0], setShowSurveyPopup = _a[1]; + // show popup to 1% of users + useEffect(function () { + // has not visited page during A/B testing if undefined + if (showPopup === undefined) { + if (Math.random() < 0.01) { + setShowSurveyPopup(true); + // log a case of succesful view + ReactGA.event({ + category: 'Survey', + action: 'Saw Survey', + }); + } + } + }, [setShowSurveyPopup, showPopup]); + // limit survey to 24 hours based on timestamps + var timestamp = useCurrentBlockTimestamp(); + var durationOver = timestamp ? timestamp.toNumber() > END_TIMESTAMP : false; + return (jsx(Fragment, { children: !showPopup || durationOver ? null : (jsxs(Wrapper$d, __assign({ gap: "10px" }, { children: [jsx(WrappedCloseIcon, { onClick: function () { + ReactGA.event({ + category: 'Survey', + action: 'Clicked Survey Link', + }); + setShowSurveyPopup(false); + } }, void 0), jsx(BGOrb, { src: BGImage }, void 0), jsx(ExternalLink, __assign({ href: "https://www.surveymonkey.com/r/YGWV9VD" }, { children: jsxs(RowFixed, { children: [jsx(MessageCircle, { stroke: theme.black, size: "20px", strokeWidth: "1px" }, void 0), jsx(ThemedText.White, __assign({ fontWeight: 600, color: theme.black, ml: "6px" }, { children: jsx(Trans, { children: "Tell us what you think \u2197" }, void 0) }), void 0)] }, void 0) }), void 0), jsx(ThemedText.Black, __assign({ style: { zIndex: Z_INDEX.fixed }, fontWeight: 400, fontSize: "12px", color: theme.black }, { children: jsx(Trans, { children: "Take a 10 minute survey to help us improve your experience in the Uniswap app." }, void 0) }), void 0)] }), void 0)) }, void 0)); +} +var templateObject_1$J, templateObject_2$u, templateObject_3$o, templateObject_4$f; + +var MobilePopupWrapper = styled.div(templateObject_2$t || (templateObject_2$t = __makeTemplateObject(["\n position: relative;\n max-width: 100%;\n height: ", ";\n margin: ", ";\n margin-bottom: ", "};\n\n display: none;\n ", ";\n"], ["\n position: relative;\n max-width: 100%;\n height: ", ";\n margin: ", ";\n margin-bottom: ", "};\n\n display: none;\n ", ";\n"])), function (_a) { + var height = _a.height; + return height; +}, function (_a) { + var height = _a.height; + return (height ? '0 auto;' : 0); +}, function (_a) { + var height = _a.height; + return (height ? '20px' : 0); +}, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToSmall(templateObject_1$I || (templateObject_1$I = __makeTemplateObject(["\n display: block;\n "], ["\n display: block;\n "]))); +}); +var MobilePopupInner = styled.div(templateObject_3$n || (templateObject_3$n = __makeTemplateObject(["\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 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"]))); +var StopOverflowQuery = "@media screen and (min-width: " + (MEDIA_WIDTHS.upToMedium + 1) + "px) and (max-width: " + (MEDIA_WIDTHS.upToMedium + 500) + "px)"; +var FixedPopupColumn = styled(AutoColumn)(templateObject_5$d || (templateObject_5$d = __makeTemplateObject(["\n position: fixed;\n top: ", ";\n right: 1rem;\n max-width: 355px !important;\n width: 100%;\n z-index: 3;\n\n ", ";\n\n ", " {\n top: ", ";\n }\n"], ["\n position: fixed;\n top: ", ";\n right: 1rem;\n max-width: 355px !important;\n width: 100%;\n z-index: 3;\n\n ", ";\n\n ", " {\n top: ", ";\n }\n"])), function (_a) { + var extraPadding = _a.extraPadding; + return (extraPadding ? '64px' : '56px'); +}, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToSmall(templateObject_4$e || (templateObject_4$e = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); +}, StopOverflowQuery, function (_a) { + var extraPadding = _a.extraPadding, xlPadding = _a.xlPadding; + return (xlPadding ? '64px' : extraPadding ? '64px' : '56px'); +}); +function Popups() { + // get all popups + var activePopups = useActivePopups(); + // show survey popup if user has not closed + var _a = __read(useShowSurveyPopup(), 1), showSurveyPopup = _a[0]; + var urlWarningActive = useURLWarningVisible(); + // need extra padding if network is not L1 Ethereum + var chainId = useActiveWeb3React().chainId; + var isNotOnMainnet = Boolean(chainId && chainId !== SupportedChainId.MAINNET); + return (jsxs(Fragment, { children: [jsxs(FixedPopupColumn, __assign({ gap: "20px", extraPadding: urlWarningActive, xlPadding: isNotOnMainnet }, { children: [jsx(ClaimPopup, {}, void 0), jsx(SurveyPopup, {}, void 0), activePopups.map(function (item) { return (jsx(PopupItem, { content: item.content, popKey: item.key, removeAfterMs: item.removeAfterMs }, item.key)); })] }), void 0), jsx(MobilePopupWrapper, __assign({ height: (activePopups === null || activePopups === void 0 ? void 0 : activePopups.length) > 0 || showSurveyPopup ? 'fit-content' : 0 }, { children: jsxs(MobilePopupInner, { children: [jsx(SurveyPopup, {}, void 0), activePopups // reverse so new items up front + .slice(0) + .reverse() + .map(function (item) { return (jsx(PopupItem, { content: item.content, popKey: item.key, removeAfterMs: item.removeAfterMs }, item.key)); })] }, void 0) }), void 0)] }, void 0)); +} +var templateObject_1$I, templateObject_2$t, templateObject_3$n, templateObject_4$e, templateObject_5$d; + +function useEagerConnect() { + var _a = useWeb3React(), activate = _a.activate, active = _a.active; + var _b = __read(useState(false), 2), tried = _b[0], setTried = _b[1]; + // gnosisSafe.isSafeApp() races a timeout against postMessage, so it delays pageload if we are not in a safe app; + // if we are not embedded in an iframe, it is not worth checking + var _c = __read(useState(!IS_IN_IFRAME), 2), triedSafe = _c[0], setTriedSafe = _c[1]; + // first, try connecting to a gnosis safe + useEffect(function () { + if (!triedSafe) { + gnosisSafe.isSafeApp().then(function (loadedInSafe) { + if (loadedInSafe) { + activate(gnosisSafe, undefined, true).catch(function () { + setTriedSafe(true); + }); + } + else { + setTriedSafe(true); + } + }); + } + }, [activate, setTriedSafe, triedSafe]); + // then, if that fails, try connecting to an injected connector + useEffect(function () { + if (!active && triedSafe) { + injected.isAuthorized().then(function (isAuthorized) { + if (isAuthorized) { + activate(injected, undefined, true).catch(function () { + setTried(true); + }); + } + else { + if (isMobile && window.ethereum) { + activate(injected, undefined, true).catch(function () { + setTried(true); + }); + } + else { + setTried(true); + } + } + }); + } + }, [activate, active, triedSafe]); + // wait until we get confirmation of a connection to flip the flag + useEffect(function () { + if (active) { + setTried(true); + } + }, [active]); + return tried; +} +/** + * Use for network and injected - logs user in + * and out after checking what network theyre on + */ +function useInactiveListener(suppress) { + if (suppress === void 0) { suppress = false; } + var _a = useWeb3React(), active = _a.active, error = _a.error, activate = _a.activate; + useEffect(function () { + var ethereum = window.ethereum; + if (ethereum && ethereum.on && !active && !error && !suppress) { + var handleChainChanged_1 = function () { + // eat errors + activate(injected, undefined, true).catch(function (error) { + console.error('Failed to activate after chain changed', error); + }); + }; + var handleAccountsChanged_1 = function (accounts) { + if (accounts.length > 0) { + // eat errors + activate(injected, undefined, true).catch(function (error) { + console.error('Failed to activate after accounts changed', error); + }); + } + }; + ethereum.on('chainChanged', handleChainChanged_1); + ethereum.on('accountsChanged', handleAccountsChanged_1); + return function () { + if (ethereum.removeListener) { + ethereum.removeListener('chainChanged', handleChainChanged_1); + ethereum.removeListener('accountsChanged', handleAccountsChanged_1); + } + }; + } + return undefined; + }, [active, error, suppress, activate]); +} + +var MessageWrapper = styled.div(templateObject_1$H || (templateObject_1$H = __makeTemplateObject(["\n display: flex;\n align-items: center;\n justify-content: center;\n height: 20rem;\n"], ["\n display: flex;\n align-items: center;\n justify-content: center;\n height: 20rem;\n"]))); +var Message = styled.h2(templateObject_2$s || (templateObject_2$s = __makeTemplateObject(["\n color: ", ";\n"], ["\n color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.secondary1; +}); +function Web3ReactManager(_a) { + var children = _a.children; + var active = useWeb3React().active; + var _b = useWeb3React(NetworkContextName), networkActive = _b.active, networkError = _b.error, activateNetwork = _b.activate; + // try to eagerly connect to an injected provider, if it exists and has granted access already + var triedEager = useEagerConnect(); + // after eagerly trying injected, if the network connect ever isn't active or in an error state, activate itd + useEffect(function () { + if (triedEager && !networkActive && !networkError && !active) { + activateNetwork(network); + } + }, [triedEager, networkActive, networkError, activateNetwork, active]); + // when there's no account connected, react to logins (broadly speaking) on the injected provider, if it exists + useInactiveListener(!triedEager); + // if the account context isn't active, and there's an error on the network context, it's an irrecoverable error + if (triedEager && !active && networkError) { + return (jsx(MessageWrapper, { children: jsx(Message, { children: jsx(Trans, { children: "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device." }, void 0) }, void 0) }, void 0)); + } + return children; +} +var templateObject_1$H, templateObject_2$s; + +function DarkModeQueryParamReader(_a) { + var search = _a.location.search; + var dispatch = useAppDispatch(); + useEffect(function () { + if (!search) + return; + if (search.length < 2) + return; + var parsed = parse(search, { + parseArrays: false, + ignoreQueryPrefix: true, + }); + var theme = parsed.theme; + if (typeof theme !== 'string') + return; + if (theme.toLowerCase() === 'light') { + dispatch(updateUserDarkMode({ userDarkMode: false })); + } + else if (theme.toLowerCase() === 'dark') { + dispatch(updateUserDarkMode({ userDarkMode: true })); + } + }, [dispatch, search]); + return null; +} + +var _a$2, _b$1, _c$1, _d$1; +var L2Icon = styled.img(templateObject_1$G || (templateObject_1$G = __makeTemplateObject(["\n width: 24px;\n height: 24px;\n margin-right: 16px;\n"], ["\n width: 24px;\n height: 24px;\n margin-right: 16px;\n"]))); +styled.div(templateObject_2$r || (templateObject_2$r = __makeTemplateObject(["\n align-items: center;\n display: flex;\n justify-content: flex-start;\n padding: 0 20px 20px 20px;\n"], ["\n align-items: center;\n display: flex;\n justify-content: flex-start;\n padding: 0 20px 20px 20px;\n"]))); +var BodyText = styled.div(templateObject_3$m || (templateObject_3$m = __makeTemplateObject(["\n color: ", ";\n display: flex;\n align-items: center;\n justify-content: flex-start;\n margin: 8px;\n font-size: 14px;\n"], ["\n color: ", ";\n display: flex;\n align-items: center;\n justify-content: flex-start;\n margin: 8px;\n font-size: 14px;\n"])), function (_a) { + var color = _a.color; + return color; +}); +var RootWrapper = styled.div(templateObject_4$d || (templateObject_4$d = __makeTemplateObject(["\n position: relative;\n margin-top: 16px;\n"], ["\n position: relative;\n margin-top: 16px;\n"]))); +var SHOULD_SHOW_ALERT = (_a$2 = {}, + _a$2[SupportedChainId.OPTIMISM] = true, + _a$2[SupportedChainId.OPTIMISTIC_KOVAN] = true, + _a$2[SupportedChainId.ARBITRUM_ONE] = true, + _a$2[SupportedChainId.ARBITRUM_RINKEBY] = true, + _a$2[SupportedChainId.POLYGON] = true, + _a$2[SupportedChainId.POLYGON_MUMBAI] = true, + _a$2); +var BG_COLORS_BY_DARK_MODE_AND_CHAIN_ID = { + dark: (_b$1 = {}, + _b$1[SupportedChainId.POLYGON] = 'radial-gradient(100% 93.36% at 0% 6.64%, rgba(160, 108, 247, 0.1) 0%, rgba(82, 32, 166, 0.1) 100%)', + _b$1[SupportedChainId.POLYGON_MUMBAI] = 'radial-gradient(100% 93.36% at 0% 6.64%, rgba(160, 108, 247, 0.1) 0%, rgba(82, 32, 166, 0.1) 100%)', + _b$1[SupportedChainId.OPTIMISM] = 'radial-gradient(948% 292% at 42% 0%, rgba(255, 58, 212, 0.01) 0%, rgba(255, 255, 255, 0.04) 100%),radial-gradient(98% 96% at 2% 0%, rgba(255, 39, 39, 0.01) 0%, rgba(235, 0, 255, 0.01) 96%)', + _b$1[SupportedChainId.OPTIMISTIC_KOVAN] = 'radial-gradient(948% 292% at 42% 0%, rgba(255, 58, 212, 0.04) 0%, rgba(255, 255, 255, 0.04) 100%),radial-gradient(98% 96% at 2% 0%, rgba(255, 39, 39, 0.04) 0%, rgba(235, 0, 255, 0.01 96%)', + _b$1[SupportedChainId.ARBITRUM_ONE] = 'radial-gradient(285% 8200% at 30% 50%, rgba(40, 160, 240, 0.01) 0%, rgba(219, 255, 0, 0) 100%),radial-gradient(75% 75% at 0% 0%, rgba(150, 190, 220, 0.05) 0%, rgba(33, 114, 229, 0.05) 100%), hsla(0, 0%, 100%, 0.05)', + _b$1[SupportedChainId.ARBITRUM_RINKEBY] = 'radial-gradient(285% 8200% at 30% 50%, rgba(40, 160, 240, 0.05) 0%, rgba(219, 255, 0, 0) 100%),radial-gradient(75% 75% at 0% 0%, rgba(150, 190, 220, 0.05) 0%, rgba(33, 114, 229, 0.1) 100%), hsla(0, 0%, 100%, 0.05)', + _b$1), + light: (_c$1 = {}, + _c$1[SupportedChainId.POLYGON] = 'radial-gradient(182.71% 205.59% at 2.81% 7.69%, rgba(130, 71, 229, 0.2) 0%, rgba(167, 202, 255, 0.2) 100%)', + _c$1[SupportedChainId.POLYGON_MUMBAI] = 'radial-gradient(182.71% 205.59% at 2.81% 7.69%, rgba(130, 71, 229, 0.2) 0%, rgba(167, 202, 255, 0.2) 100%)', + _c$1[SupportedChainId.OPTIMISM] = 'radial-gradient(92% 105% at 50% 7%, rgba(255, 58, 212, 0.04) 0%, rgba(255, 255, 255, 0.03) 100%),radial-gradient(100% 97% at 0% 12%, rgba(235, 0, 255, 0.1) 0%, rgba(243, 19, 19, 0.1) 100%), hsla(0, 0%, 100%, 0.1)', + _c$1[SupportedChainId.OPTIMISTIC_KOVAN] = 'radial-gradient(92% 105% at 50% 7%, rgba(255, 58, 212, 0.04) 0%, rgba(255, 255, 255, 0.03) 100%),radial-gradient(100% 97% at 0% 12%, rgba(235, 0, 255, 0.1) 0%, rgba(243, 19, 19, 0.1) 100%), hsla(0, 0%, 100%, 0.1)', + _c$1[SupportedChainId.ARBITRUM_ONE] = 'radial-gradient(285% 8200% at 30% 50%, rgba(40, 160, 240, 0.1) 0%, rgba(219, 255, 0, 0) 100%),radial-gradient(circle at top left, hsla(206, 50%, 75%, 0.01), hsla(215, 79%, 51%, 0.12)), hsla(0, 0%, 100%, 0.1)', + _c$1[SupportedChainId.ARBITRUM_RINKEBY] = 'radial-gradient(285% 8200% at 30% 50%, rgba(40, 160, 240, 0.1) 0%, rgba(219, 255, 0, 0) 100%),radial-gradient(circle at top left, hsla(206, 50%, 75%, 0.01), hsla(215, 79%, 51%, 0.12)), hsla(0, 0%, 100%, 0.1)', + _c$1), +}; +var ContentWrapper$1 = styled.div(templateObject_5$c || (templateObject_5$c = __makeTemplateObject(["\n background: ", ";\n border-radius: 20px;\n display: flex;\n flex-direction: row;\n overflow: hidden;\n position: relative;\n width: 100%;\n\n :before {\n background-image: url(", ");\n background-repeat: no-repeat;\n background-size: 300px;\n content: '';\n height: 300px;\n opacity: 0.1;\n position: absolute;\n transform: rotate(25deg) translate(-90px, -40px);\n width: 300px;\n z-index: -1;\n }\n"], ["\n background: ", ";\n border-radius: 20px;\n display: flex;\n flex-direction: row;\n overflow: hidden;\n position: relative;\n width: 100%;\n\n :before {\n background-image: url(", ");\n background-repeat: no-repeat;\n background-size: 300px;\n content: '';\n height: 300px;\n opacity: 0.1;\n position: absolute;\n transform: rotate(25deg) translate(-90px, -40px);\n width: 300px;\n z-index: -1;\n }\n"])), function (_a) { + var chainId = _a.chainId, darkMode = _a.darkMode; + return BG_COLORS_BY_DARK_MODE_AND_CHAIN_ID[darkMode ? 'dark' : 'light'][chainId]; +}, function (_a) { + var logoUrl = _a.logoUrl; + return logoUrl; +}); +var Header$1 = styled.h2(templateObject_6$8 || (templateObject_6$8 = __makeTemplateObject(["\n font-weight: 600;\n font-size: 16px;\n margin: 0;\n"], ["\n font-weight: 600;\n font-size: 16px;\n margin: 0;\n"]))); +var LinkOutToBridge = styled(ExternalLink)(templateObject_7$7 || (templateObject_7$7 = __makeTemplateObject(["\n align-items: center;\n border-radius: 8px;\n color: white;\n display: flex;\n font-size: 16px;\n justify-content: space-between;\n padding: 6px 8px;\n margin-right: 12px;\n text-decoration: none !important;\n width: 100%;\n"], ["\n align-items: center;\n border-radius: 8px;\n color: white;\n display: flex;\n font-size: 16px;\n justify-content: space-between;\n padding: 6px 8px;\n margin-right: 12px;\n text-decoration: none !important;\n width: 100%;\n"]))); +var StyledArrowUpRight = styled(ArrowUpRight)(templateObject_8$5 || (templateObject_8$5 = __makeTemplateObject(["\n margin-left: 12px;\n width: 24px;\n height: 24px;\n"], ["\n margin-left: 12px;\n width: 24px;\n height: 24px;\n"]))); +var TEXT_COLORS = (_d$1 = {}, + _d$1[SupportedChainId.POLYGON] = 'rgba(130, 71, 229)', + _d$1[SupportedChainId.POLYGON_MUMBAI] = 'rgba(130, 71, 229)', + _d$1[SupportedChainId.OPTIMISM] = '#ff3856', + _d$1[SupportedChainId.OPTIMISTIC_KOVAN] = '#ff3856', + _d$1[SupportedChainId.ARBITRUM_ONE] = '#0490ed', + _d$1[SupportedChainId.ARBITRUM_RINKEBY] = '#0490ed', + _d$1); +function shouldShowAlert(chainId) { + return Boolean(chainId && SHOULD_SHOW_ALERT[chainId]); +} +function NetworkAlert() { + var chainId = useActiveWeb3React().chainId; + var _a = __read(useDarkModeManager(), 1), darkMode = _a[0]; + if (!shouldShowAlert(chainId)) { + return null; + } + var _b = CHAIN_INFO[chainId], label = _b.label, logoUrl = _b.logoUrl, bridge = _b.bridge; + var textColor = TEXT_COLORS[chainId]; + return bridge ? (jsx(RootWrapper, { children: jsx(ContentWrapper$1, __assign({ chainId: chainId, darkMode: darkMode, logoUrl: logoUrl }, { children: jsxs(LinkOutToBridge, __assign({ href: bridge }, { children: [jsxs(BodyText, __assign({ color: textColor }, { children: [jsx(L2Icon, { src: logoUrl }, void 0), jsxs(AutoRow, { children: [jsx(Header$1, { children: jsxs(Trans, { children: [label, " token bridge"] }, void 0) }, void 0), jsx(HideSmall, { children: jsxs(Trans, { children: ["Deposit tokens to the ", label, " network."] }, void 0) }, void 0)] }, void 0)] }), void 0), jsx(StyledArrowUpRight, { color: textColor }, void 0)] }), void 0) }), void 0) }, void 0)) : null; +} +var templateObject_1$G, templateObject_2$r, templateObject_3$m, templateObject_4$d, templateObject_5$c, templateObject_6$8, templateObject_7$7, templateObject_8$5; + +/** + * @param open conditional to show content or hide + * @returns Wrapper to smoothly hide and expand content + */ +function AnimatedDropdown(_a) { + var open = _a.open, children = _a.children; + var _b = useResizeObserver(), ref = _b.ref, height = _b.height; + var props = useSpring({ + height: open ? height !== null && height !== void 0 ? height : 0 : 0, + config: { + mass: 1.2, + tension: 300, + friction: 20, + clamp: true, + velocity: 0.01, + }, + }); + return (jsx(animated.div, __assign({ style: __assign(__assign({}, props), { overflow: 'hidden', width: '100%', willChange: 'height' }) }, { children: jsx("div", __assign({ ref: ref }, { children: children }), void 0) }), void 0)); +} + +var THIRTY_BIPS_FEE = new Percent(JSBI.BigInt(30), JSBI.BigInt(10000)); +var INPUT_FRACTION_AFTER_FEE = ONE_HUNDRED_PERCENT.subtract(THIRTY_BIPS_FEE); +// computes realized lp fee as a percent +function computeRealizedLPFeePercent(trade) { + var e_1, _a; + var percent; + // Since routes are either all v2 or all v3 right now, calculate separately + if (trade.swaps[0].route.pools instanceof Pair) { + // for each hop in our trade, take away the x*y=k price impact from 0.3% fees + // e.g. for 3 tokens/2 hops: 1 - ((1 - .03) * (1-.03)) + percent = ONE_HUNDRED_PERCENT.subtract(trade.swaps.reduce(function (currentFee) { return currentFee.multiply(INPUT_FRACTION_AFTER_FEE); }, ONE_HUNDRED_PERCENT)); + } + else { + percent = ZERO_PERCENT; + try { + for (var _b = __values(trade.swaps), _c = _b.next(); !_c.done; _c = _b.next()) { + var swap = _c.value; + var _d = swap.inputAmount.divide(trade.inputAmount), numerator = _d.numerator, denominator = _d.denominator; + var overallPercent = new Percent(numerator, denominator); + var routeRealizedLPFeePercent = overallPercent.multiply(ONE_HUNDRED_PERCENT.subtract(swap.route.pools.reduce(function (currentFee, pool) { + var fee = pool instanceof Pair + ? // not currently possible given protocol check above, but not fatal + FeeAmount.MEDIUM + : pool.fee; + return currentFee.multiply(ONE_HUNDRED_PERCENT.subtract(new Fraction(fee, 1000000))); + }, ONE_HUNDRED_PERCENT))); + percent = percent.add(routeRealizedLPFeePercent); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_1) throw e_1.error; } + } + } + return new Percent(percent.numerator, percent.denominator); +} +var IMPACT_TIERS = [ + BLOCKED_PRICE_IMPACT_NON_EXPERT, + ALLOWED_PRICE_IMPACT_HIGH, + ALLOWED_PRICE_IMPACT_MEDIUM, + ALLOWED_PRICE_IMPACT_LOW, +]; +function warningSeverity(priceImpact) { + var e_2, _a; + if (!priceImpact) + return 4; + var impact = IMPACT_TIERS.length; + try { + for (var IMPACT_TIERS_1 = __values(IMPACT_TIERS), IMPACT_TIERS_1_1 = IMPACT_TIERS_1.next(); !IMPACT_TIERS_1_1.done; IMPACT_TIERS_1_1 = IMPACT_TIERS_1.next()) { + var impactLevel = IMPACT_TIERS_1_1.value; + if (impactLevel.lessThan(priceImpact)) + return impact; + impact--; + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (IMPACT_TIERS_1_1 && !IMPACT_TIERS_1_1.done && (_a = IMPACT_TIERS_1.return)) _a.call(IMPACT_TIERS_1); + } + finally { if (e_2) throw e_2.error; } + } + return 0; +} + +/** + * Formatted version of price impact text with warning colors + */ +function FormattedPriceImpact(_a) { + var priceImpact = _a.priceImpact; + return (jsx(ErrorText, __assign({ fontWeight: 500, fontSize: 14, severity: warningSeverity(priceImpact) }, { children: priceImpact ? priceImpact.multiply(-1).toFixed(2) + "%" : '-' }), void 0)); +} + +var StyledCard$1 = styled(Card)(templateObject_1$F || (templateObject_1$F = __makeTemplateObject(["\n padding: 0;\n"], ["\n padding: 0;\n"]))); +function TextWithLoadingPlaceholder(_a) { + var syncing = _a.syncing, width = _a.width, children = _a.children; + return syncing ? (jsx(LoadingRows, { children: jsx("div", { style: { height: '15px', width: width + "px" } }, void 0) }, void 0)) : (children); +} +function AdvancedSwapDetails(_a) { + var trade = _a.trade, allowedSlippage = _a.allowedSlippage, _b = _a.syncing, syncing = _b === void 0 ? false : _b; + var theme = useContext(ThemeContext); + var chainId = useActiveWeb3React().chainId; + var _c = useMemo(function () { + if (!trade) + return { expectedOutputAmount: undefined, priceImpact: undefined }; + var expectedOutputAmount = trade.outputAmount; + var realizedLpFeePercent = computeRealizedLPFeePercent(trade); + var priceImpact = trade.priceImpact.subtract(realizedLpFeePercent); + return { expectedOutputAmount: expectedOutputAmount, priceImpact: priceImpact }; + }, [trade]), expectedOutputAmount = _c.expectedOutputAmount, priceImpact = _c.priceImpact; + return !trade ? null : (jsx(StyledCard$1, { children: jsxs(AutoColumn, __assign({ gap: "8px" }, { children: [jsxs(RowBetween, { children: [jsx(RowFixed, { children: jsx(ThemedText.SubHeader, __assign({ color: theme.text1 }, { children: jsx(Trans, { children: "Expected Output" }, void 0) }), void 0) }, void 0), jsx(TextWithLoadingPlaceholder, __assign({ syncing: syncing, width: 65 }, { children: jsx(ThemedText.Black, __assign({ textAlign: "right", fontSize: 14 }, { children: expectedOutputAmount + ? expectedOutputAmount.toSignificant(6) + " " + expectedOutputAmount.currency.symbol + : '-' }), void 0) }), void 0)] }, void 0), jsxs(RowBetween, { children: [jsx(RowFixed, { children: jsx(ThemedText.SubHeader, __assign({ color: theme.text1 }, { children: jsx(Trans, { children: "Price Impact" }, void 0) }), void 0) }, void 0), jsx(TextWithLoadingPlaceholder, __assign({ syncing: syncing, width: 50 }, { children: jsx(ThemedText.Black, __assign({ textAlign: "right", fontSize: 14 }, { children: jsx(FormattedPriceImpact, { priceImpact: priceImpact }, void 0) }), void 0) }), void 0)] }, void 0), jsx(Separator$1, {}, void 0), jsxs(RowBetween, { children: [jsx(RowFixed, __assign({ style: { marginRight: '20px' } }, { children: jsxs(ThemedText.SubHeader, __assign({ color: theme.text3 }, { children: [trade.tradeType === TradeType.EXACT_INPUT ? (jsx(Trans, { children: "Minimum received" }, void 0)) : (jsx(Trans, { children: "Maximum sent" }, void 0)), ' ', jsx(Trans, { children: "after slippage" }, void 0), " (", allowedSlippage.toFixed(2), "%)"] }), void 0) }), void 0), jsx(TextWithLoadingPlaceholder, __assign({ syncing: syncing, width: 70 }, { children: jsx(ThemedText.Black, __assign({ textAlign: "right", fontSize: 14, color: theme.text3 }, { children: trade.tradeType === TradeType.EXACT_INPUT + ? trade.minimumAmountOut(allowedSlippage).toSignificant(6) + " " + trade.outputAmount.currency.symbol + : trade.maximumAmountIn(allowedSlippage).toSignificant(6) + " " + trade.inputAmount.currency.symbol }), void 0) }), void 0)] }, void 0), !(trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) || !chainId || !SUPPORTED_GAS_ESTIMATE_CHAIN_IDS.includes(chainId) ? null : (jsxs(RowBetween, { children: [jsx(ThemedText.SubHeader, __assign({ color: theme.text3 }, { children: jsx(Trans, { children: "Network Fee" }, void 0) }), void 0), jsx(TextWithLoadingPlaceholder, __assign({ syncing: syncing, width: 50 }, { children: jsxs(ThemedText.Black, __assign({ textAlign: "right", fontSize: 14, color: theme.text3 }, { children: ["~$", trade.gasUseEstimateUSD.toFixed(2)] }), void 0) }), void 0)] }, void 0))] }), void 0) }, void 0)); +} +var templateObject_1$F; + +var _path$3, _line$1, _line2, _path2; + +function _extends$4() { _extends$4 = 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$4.apply(this, arguments); } + +const SvgGasIcon = props => /*#__PURE__*/React.createElement("svg", _extends$4({ + width: 16, + height: 16, + viewBox: "0 0 16 16", + fill: "none", + xmlns: "http://www.w3.org/2000/svg" +}, props), _path$3 || (_path$3 = /*#__PURE__*/React.createElement("path", { + d: "M10.0047 9.26921H10.2714C11.0078 9.26921 11.6047 9.86617 11.6047 10.6025V12.1359C11.6047 12.7987 12.142 13.3359 12.8047 13.3359C13.4675 13.3359 14.0047 12.7995 14.0047 12.1367V5.22059C14.0047 4.86697 13.7758 4.56227 13.5258 4.31223L10.6714 1.33594M4.00472 2.00254H8.00472C8.7411 2.00254 9.33805 2.59949 9.33805 3.33587V14.0015H2.67139V3.33587C2.67139 2.59949 3.26834 2.00254 4.00472 2.00254ZM14.0047 5.33587C14.0047 6.07225 13.4078 6.66921 12.6714 6.66921C11.935 6.66921 11.3381 6.07225 11.3381 5.33587C11.3381 4.59949 11.935 4.00254 12.6714 4.00254C13.4078 4.00254 14.0047 4.59949 14.0047 5.33587Z", + stroke: "white" +})), _line$1 || (_line$1 = /*#__PURE__*/React.createElement("line", { + x1: 4, + y1: 9.99414, + x2: 8, + y2: 9.99414, + stroke: "white" +})), _line2 || (_line2 = /*#__PURE__*/React.createElement("line", { + x1: 4, + y1: 11.9941, + x2: 8, + y2: 11.9941, + stroke: "white" +})), _path2 || (_path2 = /*#__PURE__*/React.createElement("path", { + d: "M4 8.16113H8", + stroke: "white" +}))); + +var BadgeVariant; +(function (BadgeVariant) { + BadgeVariant["DEFAULT"] = "DEFAULT"; + BadgeVariant["NEGATIVE"] = "NEGATIVE"; + BadgeVariant["POSITIVE"] = "POSITIVE"; + BadgeVariant["PRIMARY"] = "PRIMARY"; + BadgeVariant["WARNING"] = "WARNING"; + BadgeVariant["WARNING_OUTLINE"] = "WARNING_OUTLINE"; +})(BadgeVariant || (BadgeVariant = {})); +function pickBackgroundColor(variant, theme) { + switch (variant) { + case BadgeVariant.NEGATIVE: + return theme.error; + case BadgeVariant.POSITIVE: + return theme.success; + case BadgeVariant.PRIMARY: + return theme.primary1; + case BadgeVariant.WARNING: + return theme.warning; + case BadgeVariant.WARNING_OUTLINE: + return 'transparent'; + default: + return theme.bg2; + } +} +function pickBorder(variant, theme) { + switch (variant) { + case BadgeVariant.WARNING_OUTLINE: + return "1px solid " + theme.warning; + default: + return 'unset'; + } +} +function pickFontColor(variant, theme) { + switch (variant) { + case BadgeVariant.NEGATIVE: + return readableColor(theme.error); + case BadgeVariant.POSITIVE: + return readableColor(theme.success); + case BadgeVariant.WARNING: + return readableColor(theme.warning); + case BadgeVariant.WARNING_OUTLINE: + return theme.warning; + default: + return readableColor(theme.bg2); + } +} +var Badge = styled.div(templateObject_1$E || (templateObject_1$E = __makeTemplateObject(["\n align-items: center;\n background-color: ", ";\n border: ", ";\n border-radius: 0.5rem;\n color: ", ";\n display: inline-flex;\n padding: 4px 6px;\n justify-content: center;\n font-weight: 500;\n"], ["\n align-items: center;\n background-color: ", ";\n border: ", ";\n border-radius: 0.5rem;\n color: ", ";\n display: inline-flex;\n padding: 4px 6px;\n justify-content: center;\n font-weight: 500;\n"])), function (_a) { + var theme = _a.theme, variant = _a.variant; + return pickBackgroundColor(variant, theme); +}, function (_a) { + var theme = _a.theme, variant = _a.variant; + return pickBorder(variant, theme); +}, function (_a) { + var theme = _a.theme, variant = _a.variant; + return pickFontColor(variant, theme); +}); +var templateObject_1$E; + +/** + * Does a lookup for an ENS name to find its contenthash. + */ +function useENSContentHash(ensName) { + var _a; + var ensNodeArgument = useMemo(function () { return [ensName === null ? undefined : safeNamehash(ensName)]; }, [ensName]); + var registrarContract = useENSRegistrarContract(false); + var resolverAddressResult = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument); + var resolverAddress = (_a = resolverAddressResult.result) === null || _a === void 0 ? void 0 : _a[0]; + var resolverContract = useENSResolverContract(resolverAddress && isZero(resolverAddress) ? undefined : resolverAddress, false); + var contenthash = useSingleCallResult(resolverContract, 'contenthash', ensNodeArgument); + return useMemo(function () { + var _a, _b; + return ({ + contenthash: (_b = (_a = contenthash.result) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : null, + loading: resolverAddressResult.loading || contenthash.loading, + }); + }, [contenthash.loading, contenthash.result, resolverAddressResult.loading]); +} + +function useHttpLocations(uri) { + var ens = useMemo(function () { return (uri ? parseENSAddress(uri) : undefined); }, [uri]); + var resolvedContentHash = useENSContentHash(ens === null || ens === void 0 ? void 0 : ens.ensName); + return useMemo(function () { + if (ens) { + return resolvedContentHash.contenthash ? uriToHttp(contenthashToUri(resolvedContentHash.contenthash)) : []; + } + else { + return uri ? uriToHttp(uri) : []; + } + }, [ens, resolvedContentHash.contenthash, uri]); +} + +var MaticLogo = "data:image/svg+xml,%3Csvg%20width%3D%221024%22%20height%3D%221024%22%20viewBox%3D%220%200%201024%201024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Ccircle%20cx%3D%22512%22%20cy%3D%22512%22%20r%3D%22512%22%20fill%3D%22%238247E5%22%2F%3E%3Cpath%20d%3D%22M681.469%20402.456C669.189%20395.312%20653.224%20395.312%20639.716%20402.456L543.928%20457.228L478.842%20492.949L383.055%20547.721C370.774%20554.865%20354.81%20554.865%20341.301%20547.721L265.162%20504.856C252.882%20497.712%20244.286%20484.614%20244.286%20470.325V385.786C244.286%20371.498%20251.654%20358.4%20265.162%20351.256L340.073%20309.581C352.353%20302.437%20368.318%20302.437%20381.827%20309.581L456.737%20351.256C469.018%20358.4%20477.614%20371.498%20477.614%20385.786V440.558L542.7%20403.646V348.874C542.7%20334.586%20535.332%20321.488%20521.824%20314.344L383.055%20235.758C370.774%20228.614%20354.81%20228.614%20341.301%20235.758L200.076%20314.344C186.567%20321.488%20179.199%20334.586%20179.199%20348.874V507.237C179.199%20521.525%20186.567%20534.623%20200.076%20541.767L341.301%20620.353C353.582%20627.498%20369.546%20627.498%20383.055%20620.353L478.842%20566.772L543.928%20529.86L639.716%20476.279C651.996%20469.135%20667.961%20469.135%20681.469%20476.279L756.38%20517.953C768.66%20525.098%20777.257%20538.195%20777.257%20552.484V637.023C777.257%20651.312%20769.888%20664.409%20756.38%20671.553L681.469%20714.419C669.189%20721.563%20653.224%20721.563%20639.716%20714.419L564.805%20672.744C552.525%20665.6%20543.928%20652.502%20543.928%20638.214V583.442L478.842%20620.353V675.125C478.842%20689.414%20486.21%20702.512%20499.719%20709.656L640.944%20788.242C653.224%20795.386%20669.189%20795.386%20682.697%20788.242L823.922%20709.656C836.203%20702.512%20844.799%20689.414%20844.799%20675.125V516.763C844.799%20502.474%20837.431%20489.377%20823.922%20482.232L681.469%20402.456Z%22%20fill%3D%22white%22%2F%3E%3C%2Fsvg%3E"; + +function chainIdToNetworkName(networkId) { + switch (networkId) { + case SupportedChainId.MAINNET: + return 'ethereum'; + case SupportedChainId.ARBITRUM_ONE: + return 'arbitrum'; + case SupportedChainId.OPTIMISM: + return 'optimism'; + default: + return 'ethereum'; + } +} +function getNativeLogoURI(chainId) { + if (chainId === void 0) { chainId = SupportedChainId.MAINNET; } + switch (chainId) { + case SupportedChainId.POLYGON_MUMBAI: + case SupportedChainId.POLYGON: + return MaticLogo; + default: + return EthereumLogo; + } +} +function getTokenLogoURI(address, chainId) { + if (chainId === void 0) { chainId = SupportedChainId.MAINNET; } + var networkName = chainIdToNetworkName(chainId); + var networksWithUrls = [SupportedChainId.ARBITRUM_ONE, SupportedChainId.MAINNET, SupportedChainId.OPTIMISM]; + if (networksWithUrls.includes(chainId)) { + return "https://raw.githubusercontent.com/Uniswap/assets/master/blockchains/" + networkName + "/assets/" + address + "/logo.png"; + } +} +function useCurrencyLogoURIs(currency) { + var locations = useHttpLocations(currency instanceof WrappedTokenInfo ? currency.logoURI : undefined); + return useMemo(function () { + var logoURIs = __spreadArray([], __read(locations), false); + if (currency) { + if (currency.isNative) { + logoURIs.push(getNativeLogoURI(currency.chainId)); + } + else if (currency.isToken) { + var logoURI = getTokenLogoURI(currency.address, currency.chainId); + if (logoURI) { + logoURIs.push(logoURI); + } + } + } + return logoURIs; + }, [currency, locations]); +} + +var BAD_SRCS = {}; +/** + * Renders an image by sequentially trying a list of URIs, and then eventually a fallback triangle alert + */ +function Logo(_a) { + var srcs = _a.srcs, alt = _a.alt, style = _a.style, rest = __rest(_a, ["srcs", "alt", "style"]); + var _b = __read(useState(0), 2), refresh = _b[1]; + var theme = useTheme(); + var src = srcs.find(function (src) { return !BAD_SRCS[src]; }); + if (src) { + return (jsx("img", __assign({}, rest, { alt: alt, src: src, style: style, onError: function () { + if (src) + BAD_SRCS[src] = true; + refresh(function (i) { return i + 1; }); + } }), void 0)); + } + return jsx(Slash, __assign({}, rest, { style: __assign(__assign({}, style), { color: theme.bg4 }) }), void 0); +} + +var StyledLogo$1 = styled(Logo)(templateObject_1$D || (templateObject_1$D = __makeTemplateObject(["\n width: ", ";\n height: ", ";\n background: radial-gradient(white 50%, #ffffff00 calc(75% + 1px), #ffffff00 100%);\n border-radius: 50%;\n -mox-box-shadow: 0 0 1px ", ";\n -webkit-box-shadow: 0 0 1px ", ";\n box-shadow: 0 0 1px ", ";\n border: 0px solid rgba(255, 255, 255, 0);\n"], ["\n width: ", ";\n height: ", ";\n background: radial-gradient(white 50%, #ffffff00 calc(75% + 1px), #ffffff00 100%);\n border-radius: 50%;\n -mox-box-shadow: 0 0 1px ", ";\n -webkit-box-shadow: 0 0 1px ", ";\n box-shadow: 0 0 1px ", ";\n border: 0px solid rgba(255, 255, 255, 0);\n"])), function (_a) { + var size = _a.size; + return size; +}, function (_a) { + var size = _a.size; + return size; +}, function (_a) { + var native = _a.native; + return (native ? 'white' : 'black'); +}, function (_a) { + var native = _a.native; + return (native ? 'white' : 'black'); +}, function (_a) { + var native = _a.native; + return (native ? 'white' : 'black'); +}); +function CurrencyLogo(_a) { + var _b, _c; + var currency = _a.currency, _d = _a.size, size = _d === void 0 ? '24px' : _d, style = _a.style, rest = __rest(_a, ["currency", "size", "style"]); + var logoURIs = useCurrencyLogoURIs(currency); + return (jsx(StyledLogo$1, __assign({ size: size, native: (_b = currency === null || currency === void 0 ? void 0 : currency.isNative) !== null && _b !== void 0 ? _b : false, srcs: logoURIs, alt: ((_c = currency === null || currency === void 0 ? void 0 : currency.symbol) !== null && _c !== void 0 ? _c : 'token') + " logo", style: style }, rest), void 0)); +} +var templateObject_1$D; + +var Wrapper$c = styled.div(templateObject_1$C || (templateObject_1$C = __makeTemplateObject(["\n position: relative;\n display: flex;\n flex-direction: row;\n margin-left: ", ";\n"], ["\n position: relative;\n display: flex;\n flex-direction: row;\n margin-left: ", ";\n"])), function (_a) { + var sizeraw = _a.sizeraw, margin = _a.margin; + return margin && (sizeraw / 3 + 8).toString() + 'px'; +}); +var HigherLogo = styled(CurrencyLogo)(templateObject_2$q || (templateObject_2$q = __makeTemplateObject(["\n z-index: 2;\n"], ["\n z-index: 2;\n"]))); +var CoveredLogo = styled(CurrencyLogo)(templateObject_3$l || (templateObject_3$l = __makeTemplateObject(["\n position: absolute;\n left: ", " !important;\n"], ["\n position: absolute;\n left: ", " !important;\n"])), function (_a) { + var sizeraw = _a.sizeraw; + return '-' + (sizeraw / 2).toString() + 'px'; +}); +function DoubleCurrencyLogo(_a) { + var currency0 = _a.currency0, currency1 = _a.currency1, _b = _a.size, size = _b === void 0 ? 16 : _b, _c = _a.margin, margin = _c === void 0 ? false : _c; + return (jsxs(Wrapper$c, __assign({ sizeraw: size, margin: margin }, { children: [currency0 && jsx(HigherLogo, { currency: currency0, size: size.toString() + 'px' }, void 0), currency1 && jsx(CoveredLogo, { currency: currency1, size: size.toString() + 'px', sizeraw: size }, void 0)] }), void 0)); +} +var templateObject_1$C, templateObject_2$q, templateObject_3$l; + +/** + * Returns a WrappedTokenInfo from the active token lists when possible, + * or the passed token otherwise. */ +function useTokenInfoFromActiveList(currency) { + var chainId = useActiveWeb3React().chainId; + var activeList = useCombinedActiveList(); + return useMemo(function () { + if (!chainId) + return; + if (currency.isNative) + return currency; + try { + return activeList[chainId][currency.wrapped.address].token; + } + catch (e) { + return currency; + } + }, [activeList, chainId, currency]); +} + +var _line; + +function _extends$3() { _extends$3 = 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$3.apply(this, arguments); } + +const SvgDotLine = props => /*#__PURE__*/React.createElement("svg", _extends$3({ + width: "100%", + height: 35, + viewBox: "800 0 300 200", + xmlns: "http://www.w3.org/2000/svg" +}, props), _line || (_line = /*#__PURE__*/React.createElement("line", { + x1: 0, + x2: 2000, + y1: 100, + y2: 100, + stroke: "currentColor", + strokeWidth: 20, + strokeLinecap: "round", + strokeDasharray: "1, 45" +}))); + +var Wrapper$b = styled(Box$1)(templateObject_1$B || (templateObject_1$B = __makeTemplateObject(["\n align-items: center;\n width: 100%;\n"], ["\n align-items: center;\n width: 100%;\n"]))); +var RouteContainerRow = styled(Row$1)(templateObject_2$p || (templateObject_2$p = __makeTemplateObject(["\n display: grid;\n grid-template-columns: 24px 1fr 24px;\n"], ["\n display: grid;\n grid-template-columns: 24px 1fr 24px;\n"]))); +var RouteRow = styled(Row$1)(templateObject_3$k || (templateObject_3$k = __makeTemplateObject(["\n align-items: center;\n display: flex;\n justify-content: center;\n padding: 0.1rem 0.5rem;\n position: relative;\n"], ["\n align-items: center;\n display: flex;\n justify-content: center;\n padding: 0.1rem 0.5rem;\n position: relative;\n"]))); +var PoolBadge = styled(Badge)(templateObject_4$c || (templateObject_4$c = __makeTemplateObject(["\n display: flex;\n padding: 4px 4px;\n"], ["\n display: flex;\n padding: 4px 4px;\n"]))); +var DottedLine = styled.div(templateObject_5$b || (templateObject_5$b = __makeTemplateObject(["\n display: flex;\n align-items: center;\n position: absolute;\n width: calc(100%);\n z-index: 1;\n opacity: 0.5;\n"], ["\n display: flex;\n align-items: center;\n position: absolute;\n width: calc(100%);\n z-index: 1;\n opacity: 0.5;\n"]))); +var DotColor = styled(SvgDotLine)(templateObject_6$7 || (templateObject_6$7 = __makeTemplateObject(["\n path {\n stroke: ", ";\n }\n"], ["\n path {\n stroke: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.bg4; +}); +var OpaqueBadge = styled(Badge)(templateObject_7$6 || (templateObject_7$6 = __makeTemplateObject(["\n background-color: ", ";\n border-radius: 8px;\n display: grid;\n font-size: 12px;\n grid-gap: 4px;\n grid-auto-flow: column;\n justify-content: start;\n padding: 4px 6px 4px 4px;\n z-index: ", ";\n"], ["\n background-color: ", ";\n border-radius: 8px;\n display: grid;\n font-size: 12px;\n grid-gap: 4px;\n grid-auto-flow: column;\n justify-content: start;\n padding: 4px 6px 4px 4px;\n z-index: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}, Z_INDEX.sticky); +var ProtocolBadge = styled(Badge)(templateObject_8$4 || (templateObject_8$4 = __makeTemplateObject(["\n background-color: ", ";\n border-radius: 4px;\n color: ", ";\n font-size: 10px;\n padding: 2px 4px;\n z-index: ", ";\n"], ["\n background-color: ", ";\n border-radius: 4px;\n color: ", ";\n font-size: 10px;\n padding: 2px 4px;\n z-index: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg3; +}, function (_a) { + var theme = _a.theme; + return theme.text2; +}, Z_INDEX.sticky + 1); +var BadgeText = styled(ThemedText.Small)(templateObject_9$4 || (templateObject_9$4 = __makeTemplateObject(["\n word-break: normal;\n"], ["\n word-break: normal;\n"]))); +function RoutingDiagram(_a) { + var currencyIn = _a.currencyIn, currencyOut = _a.currencyOut, routes = _a.routes; + var tokenIn = useTokenInfoFromActiveList(currencyIn); + var tokenOut = useTokenInfoFromActiveList(currencyOut); + return (jsx(Wrapper$b, { children: routes.map(function (entry, index) { return (jsxs(RouteContainerRow, { children: [jsx(CurrencyLogo, { currency: tokenIn, size: '20px' }, void 0), jsx(Route, { entry: entry }, void 0), jsx(CurrencyLogo, { currency: tokenOut, size: '20px' }, void 0)] }, index)); }) }, void 0)); +} +function Route(_a) { + var _b = _a.entry, percent = _b.percent, path = _b.path, protocol = _b.protocol; + return (jsxs(RouteRow, { children: [jsx(DottedLine, { children: jsx(DotColor, {}, void 0) }, void 0), jsxs(OpaqueBadge, { children: [jsx(ProtocolBadge, { children: jsx(BadgeText, __assign({ fontSize: 12 }, { children: protocol.toUpperCase() }), void 0) }, void 0), jsxs(BadgeText, __assign({ fontSize: 14, style: { minWidth: 'auto' } }, { children: [percent.toSignificant(2), "%"] }), void 0)] }, void 0), jsx(AutoRow, __assign({ gap: "1px", width: "100%", style: { justifyContent: 'space-evenly', zIndex: 2 } }, { children: path.map(function (_a, index) { + var _b = __read(_a, 3), currency0 = _b[0], currency1 = _b[1], feeAmount = _b[2]; + return (jsx(Pool, { currency0: currency0, currency1: currency1, feeAmount: feeAmount }, index)); + }) }), void 0)] }, void 0)); +} +function Pool(_a) { + var currency0 = _a.currency0, currency1 = _a.currency1, feeAmount = _a.feeAmount; + var tokenInfo0 = useTokenInfoFromActiveList(currency0); + var tokenInfo1 = useTokenInfoFromActiveList(currency1); + // TODO - link pool icon to info.uniswap.org via query params + return (jsx(MouseoverTooltip, __assign({ text: jsxs(Trans, { children: [(tokenInfo0 === null || tokenInfo0 === void 0 ? void 0 : tokenInfo0.symbol) + '/' + (tokenInfo1 === null || tokenInfo1 === void 0 ? void 0 : tokenInfo1.symbol) + ' ' + feeAmount / 10000, "% pool"] }, void 0) }, { children: jsxs(PoolBadge, { children: [jsx(Box$1, __assign({ margin: "0 4px 0 12px" }, { children: jsx(DoubleCurrencyLogo, { currency0: tokenInfo1, currency1: tokenInfo0, size: 20 }, void 0) }), void 0), jsxs(ThemedText.Small, __assign({ fontSize: 14 }, { children: [feeAmount / 10000, "%"] }), void 0)] }, void 0) }), void 0)); +} +var templateObject_1$B, templateObject_2$p, templateObject_3$k, templateObject_4$c, templateObject_5$b, templateObject_6$7, templateObject_7$6, templateObject_8$4, templateObject_9$4; + +var _defs, _path$2; + +function _extends$2() { _extends$2 = 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$2.apply(this, arguments); } + +const SvgAutoRouter = props => /*#__PURE__*/React.createElement("svg", _extends$2({ + width: 23, + height: 20, + viewBox: "0 0 23 20", + fill: "none", + xmlns: "http://www.w3.org/2000/svg" +}, props), _defs || (_defs = /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement("linearGradient", { + id: "gradient1", + x1: 0, + y1: 0, + x2: 1, + y2: 0, + gradientTransform: "rotate(95)" +}, /*#__PURE__*/React.createElement("stop", { + id: "stop1", + offset: 0, + stopColor: "#2274E2" +}), /*#__PURE__*/React.createElement("stop", { + id: "stop1", + offset: 0.5, + stopColor: "#2274E2" +}), /*#__PURE__*/React.createElement("stop", { + id: "stop2", + offset: 1, + stopColor: "#3FB672" +})))), _path$2 || (_path$2 = /*#__PURE__*/React.createElement("path", { + d: "M16 16C10 16 9 10 5 10M16 16C16 17.6569 17.3431 19 19 19C20.6569 19 22 17.6569 22 16C22 14.3431 20.6569 13 19 13C17.3431 13 16 14.3431 16 16ZM5 10C9 10 10 4 16 4M5 10H1.5M16 4C16 5.65685 17.3431 7 19 7C20.6569 7 22 5.65685 22 4C22 2.34315 20.6569 1 19 1C17.3431 1 16 2.34315 16 4Z", + strokeWidth: 2, + strokeLinecap: "round", + strokeLinejoin: "round", + stroke: "url(#gradient1)" +}))); + +var _path$1; + +function _extends$1() { _extends$1 = 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$1.apply(this, arguments); } + +const SvgStaticRoute = props => /*#__PURE__*/React.createElement("svg", _extends$1({ + width: 20, + height: 20, + viewBox: "0 0 20 22", + fill: "none", + xmlns: "http://www.w3.org/2000/svg" +}, props), _path$1 || (_path$1 = /*#__PURE__*/React.createElement("path", { + d: "M19 18C19 18.5523 18.5523 19 18 19V21C19.6569 21 21 19.6569 21 18H19ZM18 19C17.4477 19 17 18.5523 17 18H15C15 19.6569 16.3431 21 18 21V19ZM17 18C17 17.4477 17.4477 17 18 17V15C16.3431 15 15 16.3431 15 18H17ZM18 17C18.5523 17 19 17.4477 19 18H21C21 16.3431 19.6569 15 18 15V17ZM8 7H16V5H8V7ZM16 11H8V13H16V11ZM8 19H16V17H8V19ZM4 15C4 17.2091 5.79086 19 8 19V17C6.89543 17 6 16.1046 6 15H4ZM8 11C5.79086 11 4 12.7909 4 15H6C6 13.8954 6.89543 13 8 13V11ZM18 9C18 10.1046 17.1046 11 16 11V13C18.2091 13 20 11.2091 20 9H18ZM16 7C17.1046 7 18 7.89543 18 9H20C20 6.79086 18.2091 5 16 5V7ZM7 6C7 6.55228 6.55228 7 6 7V9C7.65685 9 9 7.65685 9 6H7ZM6 7C5.44772 7 5 6.55228 5 6H3C3 7.65685 4.34315 9 6 9V7ZM5 6C5 5.44772 5.44772 5 6 5V3C4.34315 3 3 4.34315 3 6H5ZM6 5C6.55228 5 7 5.44772 7 6H9C9 4.34315 7.65685 3 6 3V5Z" +}))); + +var StyledAutoRouterIcon = styled(SvgAutoRouter)(templateObject_1$A || (templateObject_1$A = __makeTemplateObject(["\n height: 16px;\n width: 16px;\n\n :hover {\n filter: brightness(1.3);\n }\n"], ["\n height: 16px;\n width: 16px;\n\n :hover {\n filter: brightness(1.3);\n }\n"]))); +var StyledStaticRouterIcon = styled(SvgStaticRoute)(templateObject_2$o || (templateObject_2$o = __makeTemplateObject(["\n height: 16px;\n width: 16px;\n\n fill: ", ";\n\n :hover {\n filter: brightness(1.3);\n }\n"], ["\n height: 16px;\n width: 16px;\n\n fill: ", ";\n\n :hover {\n filter: brightness(1.3);\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text3; +}); +var StyledAutoRouterLabel = styled(ThemedText.Black)(templateObject_3$j || (templateObject_3$j = __makeTemplateObject(["\n line-height: 1rem;\n\n /* fallback color */\n color: ", ";\n\n @supports (-webkit-background-clip: text) and (-webkit-text-fill-color: transparent) {\n background-image: linear-gradient(90deg, #2172e5 0%, #54e521 163.16%);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n }\n"], ["\n line-height: 1rem;\n\n /* fallback color */\n color: ", ";\n\n @supports (-webkit-background-clip: text) and (-webkit-text-fill-color: transparent) {\n background-image: linear-gradient(90deg, #2172e5 0%, #54e521 163.16%);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.green1; +}); +function AutoRouterLogo() { + var autoRouterSupported = useAutoRouterSupported(); + return autoRouterSupported ? jsx(StyledAutoRouterIcon, {}, void 0) : jsx(StyledStaticRouterIcon, {}, void 0); +} +function AutoRouterLabel() { + var autoRouterSupported = useAutoRouterSupported(); + return autoRouterSupported ? (jsx(StyledAutoRouterLabel, __assign({ fontSize: 14 }, { children: "Auto Router" }), void 0)) : (jsx(ThemedText.Black, __assign({ fontSize: 14 }, { children: jsx(Trans, { children: "Trade Route" }, void 0) }), void 0)); +} +var templateObject_1$A, templateObject_2$o, templateObject_3$j; + +var Wrapper$a = styled(AutoColumn)(templateObject_1$z || (templateObject_1$z = __makeTemplateObject(["\n padding: ", ";\n border-radius: 16px;\n border: 1px solid ", ";\n cursor: pointer;\n"], ["\n padding: ", ";\n border-radius: 16px;\n border: 1px solid ", ";\n cursor: pointer;\n"])), function (_a) { + var fixedOpen = _a.fixedOpen; + return (fixedOpen ? '12px' : '12px 8px 12px 12px'); +}, function (_a) { + var theme = _a.theme, fixedOpen = _a.fixedOpen; + return (fixedOpen ? 'transparent' : theme.bg2); +}); +var OpenCloseIcon = styled(Plus)(templateObject_2$n || (templateObject_2$n = __makeTemplateObject(["\n margin-left: 8px;\n height: 20px;\n stroke-width: 2px;\n transition: transform 0.1s;\n transform: ", ";\n stroke: ", ";\n cursor: pointer;\n :hover {\n opacity: 0.8;\n }\n"], ["\n margin-left: 8px;\n height: 20px;\n stroke-width: 2px;\n transition: transform 0.1s;\n transform: ", ";\n stroke: ", ";\n cursor: pointer;\n :hover {\n opacity: 0.8;\n }\n"])), function (_a) { + var open = _a.open; + return (open ? 'rotate(45deg)' : 'none'); +}, function (_a) { + var theme = _a.theme; + return theme.text3; +}); +var V2_DEFAULT_FEE_TIER = 3000; +var SwapRoute = memo(function SwapRoute(_a) { + var trade = _a.trade, syncing = _a.syncing, _b = _a.fixedOpen, fixedOpen = _b === void 0 ? false : _b, rest = __rest(_a, ["trade", "syncing", "fixedOpen"]); + var autoRouterSupported = useAutoRouterSupported(); + var routes = getTokenPath(trade); + var _c = __read(useState(false), 2), open = _c[0], setOpen = _c[1]; + var chainId = useActiveWeb3React().chainId; + var _d = __read(useDarkModeManager(), 1), darkMode = _d[0]; + var formattedGasPriceString = (trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) + ? trade.gasUseEstimateUSD.toFixed(2) === '0.00' + ? '<$0.01' + : '$' + trade.gasUseEstimateUSD.toFixed(2) + : undefined; + return (jsxs(Wrapper$a, __assign({}, rest, { darkMode: darkMode, fixedOpen: fixedOpen }, { children: [jsxs(RowBetween, __assign({ onClick: function () { return setOpen(!open); } }, { children: [jsxs(AutoRow, __assign({ gap: "4px", width: "auto" }, { children: [jsx(AutoRouterLogo, {}, void 0), jsx(AutoRouterLabel, {}, void 0)] }), void 0), fixedOpen ? null : jsx(OpenCloseIcon, { open: open }, void 0)] }), void 0), jsx(AnimatedDropdown, __assign({ open: open || fixedOpen }, { children: jsxs(AutoRow, __assign({ gap: "4px", width: "auto", style: { paddingTop: '12px', margin: 0 } }, { children: [syncing ? (jsx(LoadingRows, { children: jsx("div", { style: { width: '400px', height: '30px' } }, void 0) }, void 0)) : (jsx(RoutingDiagram, { currencyIn: trade.inputAmount.currency, currencyOut: trade.outputAmount.currency, routes: routes }, void 0)), autoRouterSupported && (jsxs(Fragment, { children: [jsx(Separator$1, {}, void 0), syncing ? (jsx(LoadingRows, { children: jsx("div", { style: { width: '250px', height: '15px' } }, void 0) }, void 0)) : (jsxs(ThemedText.Main, __assign({ fontSize: 12, width: 400, margin: 0 }, { children: [(trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) && chainId && SUPPORTED_GAS_ESTIMATE_CHAIN_IDS.includes(chainId) ? (jsxs(Trans, { children: ["Best price route costs ~", formattedGasPriceString, " in gas. "] }, void 0)) : null, ' ', jsx(Trans, { children: "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step." }, void 0)] }), void 0))] }, void 0))] }), void 0) }), void 0)] }), void 0)); +}); +function getTokenPath(trade) { + return trade.swaps.map(function (_a) { + var _b = _a.route, tokenPath = _b.path, pools = _b.pools, protocol = _b.protocol, inputAmount = _a.inputAmount, outputAmount = _a.outputAmount; + var portion = trade.tradeType === TradeType.EXACT_INPUT + ? inputAmount.divide(trade.inputAmount) + : outputAmount.divide(trade.outputAmount); + var percent = new Percent(portion.numerator, portion.denominator); + var path = []; + for (var i = 0; i < pools.length; i++) { + var nextPool = pools[i]; + var tokenIn = tokenPath[i]; + var tokenOut = tokenPath[i + 1]; + var entry = [ + tokenIn, + tokenOut, + nextPool instanceof Pair ? V2_DEFAULT_FEE_TIER : nextPool.fee, + ]; + path.push(entry); + } + return { + percent: percent, + path: path, + protocol: protocol, + }; + }); +} +var templateObject_1$z, templateObject_2$n; + +var GasWrapper = styled(RowFixed)(templateObject_1$y || (templateObject_1$y = __makeTemplateObject(["\n border-radius: 8px;\n padding: 4px 6px;\n height: 24px;\n color: ", ";\n background-color: ", ";\n font-size: 14px;\n font-weight: 500;\n user-select: none;\n"], ["\n border-radius: 8px;\n padding: 4px 6px;\n height: 24px;\n color: ", ";\n background-color: ", ";\n font-size: 14px;\n font-weight: 500;\n user-select: none;\n"])), function (_a) { + var theme = _a.theme; + return theme.text3; +}, function (_a) { + var theme = _a.theme; + return theme.bg1; +}); +var StyledGasIcon = styled(SvgGasIcon)(templateObject_2$m || (templateObject_2$m = __makeTemplateObject(["\n margin-right: 4px;\n height: 14px;\n & > * {\n stroke: ", ";\n }\n"], ["\n margin-right: 4px;\n height: 14px;\n & > * {\n stroke: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text3; +}); +function GasEstimateBadge(_a) { + var _b; + var trade = _a.trade, loading = _a.loading, showRoute = _a.showRoute, disableHover = _a.disableHover; + var formattedGasPriceString = (trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) + ? trade.gasUseEstimateUSD.toFixed(2) === '0.00' + ? '<$0.01' + : '$' + trade.gasUseEstimateUSD.toFixed(2) + : undefined; + return (jsx(MouseoverTooltipContent, __assign({ wrap: false, disableHover: disableHover, content: loading ? null : (jsx(ResponsiveTooltipContainer, __assign({ origin: "top right", style: { + padding: showRoute ? '0' : '12px', + border: 'none', + borderRadius: showRoute ? '16px' : '12px', + maxWidth: '400px', + } }, { children: showRoute ? (trade ? (jsx(SwapRoute, { trade: trade, syncing: loading, fixedOpen: showRoute }, void 0)) : null) : (jsxs(AutoColumn, __assign({ gap: "4px", justify: "center" }, { children: [jsx(ThemedText.Main, __assign({ fontSize: "12px", textAlign: "center" }, { children: jsx(Trans, { children: "Estimated network fee" }, void 0) }), void 0), jsx(ThemedText.Body, __assign({ textAlign: "center", fontWeight: 500, style: { userSelect: 'none' } }, { children: jsxs(Trans, { children: ["$", (_b = trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) === null || _b === void 0 ? void 0 : _b.toFixed(2)] }, void 0) }), void 0), jsx(ThemedText.Main, __assign({ fontSize: "10px", textAlign: "center", maxWidth: "140px", color: "text3" }, { children: jsx(Trans, { children: "Estimate may differ due to your wallet gas settings" }, void 0) }), void 0)] }), void 0)) }), void 0)), placement: "bottom", onOpen: function () { + return ReactGA.event({ + category: 'Gas', + action: 'Gas Details Tooltip Open', + }); + } }, { children: jsx(LoadingOpacityContainer, __assign({ "$loading": loading }, { children: jsxs(GasWrapper, { children: [jsx(StyledGasIcon, {}, void 0), formattedGasPriceString !== null && formattedGasPriceString !== void 0 ? formattedGasPriceString : null] }, void 0) }), void 0) }), void 0)); +} +var templateObject_1$y, templateObject_2$m; + +var Wrapper$9 = styled(Row$1)(templateObject_1$x || (templateObject_1$x = __makeTemplateObject(["\n width: 100%;\n justify-content: center;\n"], ["\n width: 100%;\n justify-content: center;\n"]))); +var StyledInfoIcon = styled(Info)(templateObject_2$l || (templateObject_2$l = __makeTemplateObject(["\n height: 16px;\n width: 16px;\n margin-right: 4px;\n color: ", ";\n"], ["\n height: 16px;\n width: 16px;\n margin-right: 4px;\n color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.text3; +}); +var StyledCard = styled(OutlineCard)(templateObject_3$i || (templateObject_3$i = __makeTemplateObject(["\n padding: 12px;\n border: 1px solid ", ";\n"], ["\n padding: 12px;\n border: 1px solid ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}); +var StyledHeaderRow = styled(RowBetween)(templateObject_4$b || (templateObject_4$b = __makeTemplateObject(["\n padding: 4px 8px;\n border-radius: 12px;\n background-color: ", ";\n align-items: center;\n cursor: ", ";\n min-height: 40px;\n\n :hover {\n background-color: ", ";\n }\n"], ["\n padding: 4px 8px;\n border-radius: 12px;\n background-color: ", ";\n align-items: center;\n cursor: ", ";\n min-height: 40px;\n\n :hover {\n background-color: ", ";\n }\n"])), function (_a) { + var open = _a.open, theme = _a.theme; + return (open ? theme.bg1 : 'transparent'); +}, function (_a) { + var disabled = _a.disabled; + return (disabled ? 'initial' : 'pointer'); +}, function (_a) { + var theme = _a.theme, disabled = _a.disabled; + return (disabled ? theme.bg1 : darken(0.015, theme.bg1)); +}); +var RotatingArrow = styled(ChevronDown)(templateObject_5$a || (templateObject_5$a = __makeTemplateObject(["\n transform: ", ";\n transition: transform 0.1s linear;\n"], ["\n transform: ", ";\n transition: transform 0.1s linear;\n"])), function (_a) { + var open = _a.open; + return (open ? 'rotate(180deg)' : 'none'); +}); +var StyledPolling = styled.div(templateObject_7$5 || (templateObject_7$5 = __makeTemplateObject(["\n display: flex;\n height: 16px;\n width: 16px;\n margin-right: 2px;\n margin-left: 10px;\n align-items: center;\n color: ", ";\n transition: 250ms ease color;\n\n ", "\n"], ["\n display: flex;\n height: 16px;\n width: 16px;\n margin-right: 2px;\n margin-left: 10px;\n align-items: center;\n color: ", ";\n transition: 250ms ease color;\n\n ", "\n"])), function (_a) { + var theme = _a.theme; + return theme.text1; +}, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToMedium(templateObject_6$6 || (templateObject_6$6 = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); +}); +var StyledPollingDot = styled.div(templateObject_8$3 || (templateObject_8$3 = __makeTemplateObject(["\n width: 8px;\n height: 8px;\n min-height: 8px;\n min-width: 8px;\n border-radius: 50%;\n position: relative;\n background-color: ", ";\n transition: 250ms ease background-color;\n"], ["\n width: 8px;\n height: 8px;\n min-height: 8px;\n min-width: 8px;\n border-radius: 50%;\n position: relative;\n background-color: ", ";\n transition: 250ms ease background-color;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}); +var rotate360 = keyframes(templateObject_9$3 || (templateObject_9$3 = __makeTemplateObject(["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"], ["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"]))); +var Spinner = styled.div(templateObject_10$3 || (templateObject_10$3 = __makeTemplateObject(["\n animation: ", " 1s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n transform: translateZ(0);\n border-top: 1px solid transparent;\n border-right: 1px solid transparent;\n border-bottom: 1px solid transparent;\n border-left: 2px solid ", ";\n background: transparent;\n width: 14px;\n height: 14px;\n border-radius: 50%;\n position: relative;\n transition: 250ms ease border-color;\n left: -3px;\n top: -3px;\n"], ["\n animation: ", " 1s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n transform: translateZ(0);\n border-top: 1px solid transparent;\n border-right: 1px solid transparent;\n border-bottom: 1px solid transparent;\n border-left: 2px solid ", ";\n background: transparent;\n width: 14px;\n height: 14px;\n border-radius: 50%;\n position: relative;\n transition: 250ms ease border-color;\n left: -3px;\n top: -3px;\n"])), rotate360, function (_a) { + var theme = _a.theme; + return theme.text1; +}); +function SwapDetailsDropdown(_a) { + var trade = _a.trade, syncing = _a.syncing, loading = _a.loading, showInverted = _a.showInverted, setShowInverted = _a.setShowInverted, allowedSlippage = _a.allowedSlippage; + var theme = useTheme$1(); + var chainId = useActiveWeb3React().chainId; + var _b = __read(useState(false), 2), showDetails = _b[0], setShowDetails = _b[1]; + return (jsx(Wrapper$9, { children: jsxs(AutoColumn, __assign({ gap: '8px', style: { width: '100%', marginBottom: '-8px' } }, { children: [jsxs(StyledHeaderRow, __assign({ onClick: function () { return setShowDetails(!showDetails); }, disabled: !trade, open: showDetails }, { children: [jsxs(RowFixed, __assign({ style: { position: 'relative' } }, { children: [loading || syncing ? (jsx(StyledPolling, { children: jsx(StyledPollingDot, { children: jsx(Spinner, {}, void 0) }, void 0) }, void 0)) : (jsx(HideSmall, { children: jsx(MouseoverTooltipContent, __assign({ wrap: false, content: jsx(ResponsiveTooltipContainer, __assign({ origin: "top right", style: { padding: '0' } }, { children: jsx(Card, __assign({ padding: "12px" }, { children: jsx(AdvancedSwapDetails, { trade: trade, allowedSlippage: allowedSlippage, syncing: syncing }, void 0) }), void 0) }), void 0), placement: "bottom", disableHover: showDetails }, { children: jsx(StyledInfoIcon, { color: trade ? theme.text3 : theme.bg3 }, void 0) }), void 0) }, void 0)), trade ? (jsx(LoadingOpacityContainer, __assign({ "$loading": syncing }, { children: jsx(TradePrice, { price: trade.executionPrice, showInverted: showInverted, setShowInverted: setShowInverted }, void 0) }), void 0)) : loading || syncing ? (jsx(ThemedText.Main, __assign({ fontSize: 14 }, { children: jsx(Trans, { children: "Fetching best price..." }, void 0) }), void 0)) : null] }), void 0), jsxs(RowFixed, { children: [!(trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) || + showDetails || + !chainId || + !SUPPORTED_GAS_ESTIMATE_CHAIN_IDS.includes(chainId) ? null : (jsx(GasEstimateBadge, { trade: trade, loading: syncing || loading, showRoute: !showDetails, disableHover: showDetails }, void 0)), jsx(RotatingArrow, { stroke: trade ? theme.text3 : theme.bg3, open: Boolean(trade && showDetails) }, void 0)] }, void 0)] }), void 0), jsx(AnimatedDropdown, __assign({ open: showDetails }, { children: jsxs(AutoColumn, __assign({ gap: '8px', style: { padding: '0', paddingBottom: '8px' } }, { children: [trade ? (jsx(StyledCard, { children: jsx(AdvancedSwapDetails, { trade: trade, allowedSlippage: allowedSlippage, syncing: syncing }, void 0) }, void 0)) : null, trade ? jsx(SwapRoute, { trade: trade, syncing: syncing }, void 0) : null] }), void 0) }), void 0)] }), void 0) }, void 0)); +} +var templateObject_1$x, templateObject_2$l, templateObject_3$i, templateObject_4$b, templateObject_5$a, templateObject_6$6, templateObject_7$5, templateObject_8$3, templateObject_9$3, templateObject_10$3; + +var DetailsFooter = styled.div(templateObject_1$w || (templateObject_1$w = __makeTemplateObject(["\n padding-top: calc(16px + 2rem);\n padding-bottom: 20px;\n margin-left: auto;\n margin-right: auto;\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: ", ";\n background-color: ", ";\n z-index: ", ";\n\n transform: ", ";\n transition: transform 300ms ease-in-out;\n text-align: center;\n"], ["\n padding-top: calc(16px + 2rem);\n padding-bottom: 20px;\n margin-left: auto;\n margin-right: auto;\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: ", ";\n background-color: ", ";\n z-index: ", ";\n\n transform: ", ";\n transition: transform 300ms ease-in-out;\n text-align: center;\n"])), function (_a) { + var theme = _a.theme; + return theme.text2; +}, function (_a) { + var theme = _a.theme; + return theme.advancedBG; +}, Z_INDEX.deprecated_zero, function (_a) { + var show = _a.show; + return (show ? 'translateY(0%)' : 'translateY(-100%)'); +}); +var StyledButtonEmpty = styled(ButtonEmpty)(templateObject_2$k || (templateObject_2$k = __makeTemplateObject(["\n text-decoration: none;\n"], ["\n text-decoration: none;\n"]))); +var AddressText$1 = styled(ThemedText.Blue)(templateObject_4$a || (templateObject_4$a = __makeTemplateObject(["\n font-size: 12px;\n\n ", "\n"], ["\n font-size: 12px;\n\n ", "\n"])), function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToSmall(templateObject_3$h || (templateObject_3$h = __makeTemplateObject(["\n font-size: 10px;\n"], ["\n font-size: 10px;\n"]))); +}); +function UnsupportedCurrencyFooter(_a) { + var show = _a.show, currencies = _a.currencies; + var chainId = useActiveWeb3React().chainId; + var _b = __read(useState(false), 2), showDetails = _b[0], setShowDetails = _b[1]; + var tokens = chainId && currencies + ? currencies.map(function (currency) { + return currency === null || currency === void 0 ? void 0 : currency.wrapped; + }) + : []; + var unsupportedTokens = useUnsupportedTokens(); + return (jsxs(DetailsFooter, __assign({ show: show }, { children: [jsx(Modal, __assign({ isOpen: showDetails, onDismiss: function () { return setShowDetails(false); } }, { children: jsx(Card, __assign({ padding: "2rem" }, { children: jsxs(AutoColumn, __assign({ gap: "lg" }, { children: [jsxs(RowBetween, { children: [jsx(ThemedText.MediumHeader, { children: jsx(Trans, { children: "Unsupported Assets" }, void 0) }, void 0), jsx(CloseIcon$2, { onClick: function () { return setShowDetails(false); } }, void 0)] }, void 0), tokens.map(function (token) { + var _a; + return (token && + unsupportedTokens && + Object.keys(unsupportedTokens).includes(token.address) && (jsx(OutlineCard, { children: jsxs(AutoColumn, __assign({ gap: "10px" }, { children: [jsxs(AutoRow, __assign({ gap: "5px", align: "center" }, { children: [jsx(CurrencyLogo, { currency: token, size: '24px' }, void 0), jsx(ThemedText.Body, __assign({ fontWeight: 500 }, { children: token.symbol }), void 0)] }), void 0), chainId && (jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, token.address, ExplorerDataType.ADDRESS) }, { children: jsx(AddressText$1, { children: token.address }, void 0) }), void 0))] }), void 0) }, (_a = token.address) === null || _a === void 0 ? void 0 : _a.concat('not-supported')))); + }), jsx(AutoColumn, __assign({ gap: "lg" }, { children: jsx(ThemedText.Body, __assign({ fontWeight: 500 }, { children: jsx(Trans, { children: "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons." }, void 0) }), void 0) }), void 0)] }), void 0) }), void 0) }), void 0), jsx(StyledButtonEmpty, __assign({ padding: '0', onClick: function () { return setShowDetails(true); } }, { children: jsx(ThemedText.Blue, { children: jsx(Trans, { children: "Read more about unsupported assets" }, void 0) }, void 0) }), void 0)] }), void 0)); +} +var templateObject_1$w, templateObject_2$k, templateObject_3$h, templateObject_4$a; + +var ERC20_INTERFACE = new Interface([ + { + constant: false, + inputs: [ + { name: '_spender', type: 'address' }, + { name: '_value', type: 'uint256' }, + ], + name: 'approve', + outputs: [{ name: '', type: 'bool' }], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, +]); +function approveAmountCalldata(amount, spender) { + if (!amount.currency.isToken) + throw new Error('Must call with an amount of token'); + var approveData = ERC20_INTERFACE.encodeFunctionData('approve', [spender, toHex(amount.quotient)]); + return { + to: amount.currency.address, + data: approveData, + value: '0x0', + }; +} + +var ArgentWalletContractABI = [ + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "_transactions", + type: "tuple[]" + } + ], + name: "wc_multiCall", + outputs: [ + { + internalType: "bytes[]", + name: "", + type: "bytes[]" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "_msgHash", + type: "bytes32" + }, + { + internalType: "bytes", + name: "_signature", + type: "bytes" + } + ], + name: "isValidSignature", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4" + } + ], + stateMutability: "view", + type: "function" + } +]; + +function useIsArgentWallet() { + var _a, _b; + var account = useActiveWeb3React().account; + var argentWalletDetector = useArgentWalletDetectorContract(); + var inputs = useMemo(function () { return [account !== null && account !== void 0 ? account : undefined]; }, [account]); + var call = useSingleCallResult(argentWalletDetector, 'isArgentWallet', inputs, NEVER_RELOAD); + return (_b = (_a = call === null || call === void 0 ? void 0 : call.result) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : false; +} + +function useArgentWalletContract() { + var account = useActiveWeb3React().account; + var isArgentWallet = useIsArgentWallet(); + return useContract(isArgentWallet ? account !== null && account !== void 0 ? account : undefined : undefined, ArgentWalletContractABI, true); +} + +/** + * Returns the swap calls that can be used to make the trade + * @param trade trade to execute + * @param allowedSlippage user allowed slippage + * @param recipientAddressOrName the ENS name or address of the recipient of the swap output + * @param signatureData the signature data of the permit of the input token amount, if available + */ +function useSwapCallArguments(trade, allowedSlippage, recipientAddressOrName, signatureData, deadline) { + var _a = useActiveWeb3React(), account = _a.account, chainId = _a.chainId, library = _a.library; + var recipientAddress = useENS(recipientAddressOrName).address; + var recipient = recipientAddressOrName === null ? account : recipientAddress; + var routerContract = useV2RouterContract(); + var argentWalletContract = useArgentWalletContract(); + return useMemo(function () { + if (!trade || !recipient || !library || !account || !chainId || !deadline) + return []; + if (trade instanceof Trade) { + if (!routerContract) + return []; + var swapMethods = []; + swapMethods.push(Router.swapCallParameters(trade, { + feeOnTransfer: false, + allowedSlippage: allowedSlippage, + recipient: recipient, + deadline: deadline.toNumber(), + })); + if (trade.tradeType === TradeType.EXACT_INPUT) { + swapMethods.push(Router.swapCallParameters(trade, { + feeOnTransfer: true, + allowedSlippage: allowedSlippage, + recipient: recipient, + deadline: deadline.toNumber(), + })); + } + return swapMethods.map(function (_a) { + var methodName = _a.methodName, args = _a.args, value = _a.value; + if (argentWalletContract && trade.inputAmount.currency.isToken) { + return { + address: argentWalletContract.address, + calldata: argentWalletContract.interface.encodeFunctionData('wc_multiCall', [ + [ + approveAmountCalldata(trade.maximumAmountIn(allowedSlippage), routerContract.address), + { + to: routerContract.address, + value: value, + data: routerContract.interface.encodeFunctionData(methodName, args), + }, + ], + ]), + value: '0x0', + }; + } + else { + return { + address: routerContract.address, + calldata: routerContract.interface.encodeFunctionData(methodName, args), + value: value, + }; + } + }); + } + else { + // swap options shared by v3 and v2+v3 swap routers + var sharedSwapOptions = __assign({ recipient: recipient, slippageTolerance: allowedSlippage }, (signatureData + ? { + inputTokenPermit: 'allowed' in signatureData + ? { + expiry: signatureData.deadline, + nonce: signatureData.nonce, + s: signatureData.s, + r: signatureData.r, + v: signatureData.v, + } + : { + deadline: signatureData.deadline, + amount: signatureData.amount, + s: signatureData.s, + r: signatureData.r, + v: signatureData.v, + }, + } + : {})); + var swapRouterAddress = chainId + ? trade instanceof Trade$2 + ? V3_ROUTER_ADDRESS[chainId] + : SWAP_ROUTER_ADDRESSES[chainId] + : undefined; + if (!swapRouterAddress) + return []; + var _a = trade instanceof Trade$2 + ? SwapRouter.swapCallParameters(trade, __assign(__assign({}, sharedSwapOptions), { deadline: deadline.toString() })) + : SwapRouter$1.swapCallParameters(trade, __assign(__assign({}, sharedSwapOptions), { deadlineOrPreviousBlockhash: deadline.toString() })), value = _a.value, calldata = _a.calldata; + if (argentWalletContract && trade.inputAmount.currency.isToken) { + return [ + { + address: argentWalletContract.address, + calldata: argentWalletContract.interface.encodeFunctionData('wc_multiCall', [ + [ + approveAmountCalldata(trade.maximumAmountIn(allowedSlippage), swapRouterAddress), + { + to: swapRouterAddress, + value: value, + data: calldata, + }, + ], + ]), + value: '0x0', + }, + ]; + } + return [ + { + address: swapRouterAddress, + calldata: calldata, + value: value, + }, + ]; + } + }, [ + trade, + recipient, + library, + account, + chainId, + deadline, + routerContract, + allowedSlippage, + argentWalletContract, + signatureData, + ]); +} + +/** + * This is hacking out the revert reason from the ethers provider thrown error however it can. + * This object seems to be undocumented by ethers. + * @param error an error from the ethers provider + */ +function swapErrorToUserReadableMessage(error) { + var _a, _b, _c, _d; + var reason; + while (Boolean(error)) { + reason = (_b = (_a = error.reason) !== null && _a !== void 0 ? _a : error.message) !== null && _b !== void 0 ? _b : reason; + error = (_c = error.error) !== null && _c !== void 0 ? _c : (_d = error.data) === null || _d === void 0 ? void 0 : _d.originalError; + } + if ((reason === null || reason === void 0 ? void 0 : reason.indexOf('execution reverted: ')) === 0) + reason = reason.substr('execution reverted: '.length); + switch (reason) { + case 'UniswapV2Router: EXPIRED': + return (jsx(Trans, { children: "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low." }, void 0)); + case 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT': + case 'UniswapV2Router: EXCESSIVE_INPUT_AMOUNT': + return (jsx(Trans, { children: "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance." }, void 0)); + case 'TransferHelper: TRANSFER_FROM_FAILED': + return jsx(Trans, { children: "The input token cannot be transferred. There may be an issue with the input token." }, void 0); + case 'UniswapV2: TRANSFER_FAILED': + return jsx(Trans, { children: "The output token cannot be transferred. There may be an issue with the output token." }, void 0); + case 'UniswapV2: K': + return (jsx(Trans, { children: "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer." }, void 0)); + case 'Too little received': + case 'Too much requested': + case 'STF': + return (jsx(Trans, { children: "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3." }, void 0)); + case 'TF': + return (jsx(Trans, { children: "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3." }, void 0)); + default: + if ((reason === null || reason === void 0 ? void 0 : reason.indexOf('undefined is not an object')) !== -1) { + console.error(error, reason); + return (jsx(Trans, { children: "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3." }, void 0)); + } + return (jsxs(Trans, { children: ["Unknown error", reason ? ": \"" + reason + "\"" : '', ". Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3."] }, void 0)); + } +} + +// returns a function that will execute a swap, if the parameters are all valid +function useSendSwapTransaction(account, chainId, library, trade, // trade to execute, required +swapCalls) { + return useMemo(function () { + if (!trade || !library || !account || !chainId) { + return { callback: null }; + } + return { + callback: function onSwap() { + return __awaiter(this, void 0, void 0, function () { + var estimatedCalls, bestCallOption, errorCalls, firstNoErrorCall, _a, address, calldata, value; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: return [4 /*yield*/, Promise.all(swapCalls.map(function (call) { + var address = call.address, calldata = call.calldata, value = call.value; + var tx = !value || isZero(value) + ? { from: account, to: address, data: calldata } + : { + from: account, + to: address, + data: calldata, + value: value, + }; + return library + .estimateGas(tx) + .then(function (gasEstimate) { + return { + call: call, + gasEstimate: gasEstimate, + }; + }) + .catch(function (gasError) { + console.debug('Gas estimate failed, trying eth_call to extract error', call); + return library + .call(tx) + .then(function (result) { + console.debug('Unexpected successful call after failed estimate gas', call, gasError, result); + return { call: call, error: jsx(Trans, { children: "Unexpected issue with estimating the gas. Please try again." }, void 0) }; + }) + .catch(function (callError) { + console.debug('Call threw error', call, callError); + return { call: call, error: swapErrorToUserReadableMessage(callError) }; + }); + }); + })) + // a successful estimation is a bignumber gas estimate and the next call is also a bignumber gas estimate + ]; + case 1: + estimatedCalls = _b.sent(); + bestCallOption = estimatedCalls.find(function (el, ix, list) { + return 'gasEstimate' in el && (ix === list.length - 1 || 'gasEstimate' in list[ix + 1]); + }); + // check if any calls errored with a recognizable error + if (!bestCallOption) { + errorCalls = estimatedCalls.filter(function (call) { return 'error' in call; }); + if (errorCalls.length > 0) + throw errorCalls[errorCalls.length - 1].error; + firstNoErrorCall = estimatedCalls.find(function (call) { return !('error' in call); }); + if (!firstNoErrorCall) + throw new Error(t(templateObject_1$v || (templateObject_1$v = __makeTemplateObject(["Unexpected error. Could not estimate gas for the swap."], ["Unexpected error. Could not estimate gas for the swap."])))); + bestCallOption = firstNoErrorCall; + } + _a = bestCallOption.call, address = _a.address, calldata = _a.calldata, value = _a.value; + return [2 /*return*/, library + .getSigner() + .sendTransaction(__assign(__assign({ from: account, to: address, data: calldata }, ('gasEstimate' in bestCallOption ? { gasLimit: calculateGasMargin(bestCallOption.gasEstimate) } : {})), (value && !isZero(value) ? { value: value } : {}))) + .then(function (response) { + return response; + }) + .catch(function (error) { + // if the user rejected the tx, pass this along + if ((error === null || error === void 0 ? void 0 : error.code) === 4001) { + throw new Error(t(templateObject_2$j || (templateObject_2$j = __makeTemplateObject(["Transaction rejected."], ["Transaction rejected."])))); + } + else { + // otherwise, the error was unexpected and we need to convey that + console.error("Swap failed", error, address, calldata, value); + throw new Error(t(templateObject_3$g || (templateObject_3$g = __makeTemplateObject(["Swap failed: ", ""], ["Swap failed: ", ""])), swapErrorToUserReadableMessage(error))); + } + })]; + } + }); + }); + }, + }; + }, [account, chainId, library, swapCalls, trade]); +} +var templateObject_1$v, templateObject_2$j, templateObject_3$g; + +var SwapCallbackState; +(function (SwapCallbackState) { + SwapCallbackState[SwapCallbackState["INVALID"] = 0] = "INVALID"; + SwapCallbackState[SwapCallbackState["LOADING"] = 1] = "LOADING"; + SwapCallbackState[SwapCallbackState["VALID"] = 2] = "VALID"; +})(SwapCallbackState || (SwapCallbackState = {})); +// returns a function that will execute a swap, if the parameters are all valid +// and the user has approved the slippage adjusted input amount for the trade +function useSwapCallback$1(trade, // trade to execute, required +allowedSlippage, // in bips +recipientAddressOrName, // the ENS name or address of the recipient of the trade, or null if swap should be returned to sender +signatureData, deadline) { + var _a = useActiveWeb3React(), account = _a.account, chainId = _a.chainId, library = _a.library; + var swapCalls = useSwapCallArguments(trade, allowedSlippage, recipientAddressOrName, signatureData, deadline); + var callback = useSendSwapTransaction(account, chainId, library, trade, swapCalls).callback; + var recipientAddress = useENS(recipientAddressOrName).address; + var recipient = recipientAddressOrName === null ? account : recipientAddress; + return useMemo(function () { + if (!trade || !library || !account || !chainId || !callback) { + return { state: SwapCallbackState.INVALID, callback: null, error: jsx(Trans, { children: "Missing dependencies" }, void 0) }; + } + if (!recipient) { + if (recipientAddressOrName !== null) { + return { state: SwapCallbackState.INVALID, callback: null, error: jsx(Trans, { children: "Invalid recipient" }, void 0) }; + } + else { + return { state: SwapCallbackState.LOADING, callback: null, error: null }; + } + } + return { + state: SwapCallbackState.VALID, + callback: function onSwap() { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, callback().then(function (response) { + return response; + })]; + }); + }); + }, + error: null, + }; + }, [trade, library, account, chainId, callback, recipient, recipientAddressOrName]); +} + +function currencyId(currency) { + if (currency.isNative) + return 'ETH'; + if (currency.isToken) + return currency.address; + throw new Error('invalid currency'); +} + +// combines the block timestamp with the user setting to give the deadline that should be used for any submitted transaction +function useTransactionDeadline() { + var chainId = useActiveWeb3React().chainId; + var ttl = useAppSelector(function (state) { return state.user.userDeadline; }); + var blockTimestamp = useCurrentBlockTimestamp(); + return useMemo(function () { + if (blockTimestamp && chainId && L2_CHAIN_IDS.includes(chainId)) + return blockTimestamp.add(L2_DEADLINE_FROM_NOW); + if (blockTimestamp && ttl) + return blockTimestamp.add(ttl); + return undefined; + }, [blockTimestamp, chainId, ttl]); +} + +// eslint-disable-next-line no-restricted-imports +// returns a function that will execute a swap, if the parameters are all valid +// and the user has approved the slippage adjusted input amount for the trade +function useSwapCallback(trade, // trade to execute, required +allowedSlippage, // in bips +recipientAddressOrName, // the ENS name or address of the recipient of the trade, or null if swap should be returned to sender +signatureData) { + var account = useActiveWeb3React().account; + var deadline = useTransactionDeadline(); + var addTransaction = useTransactionAdder(); + var recipientAddress = useENS(recipientAddressOrName).address; + var recipient = recipientAddressOrName === null ? account : recipientAddress; + var _a = useSwapCallback$1(trade, allowedSlippage, recipient, signatureData, deadline), state = _a.state, libCallback = _a.callback, error = _a.error; + var callback = useMemo(function () { + if (!libCallback || !trade) { + return null; + } + return function () { + return libCallback().then(function (response) { + addTransaction(response, trade.tradeType === TradeType.EXACT_INPUT + ? { + type: TransactionType.SWAP, + tradeType: TradeType.EXACT_INPUT, + inputCurrencyId: currencyId(trade.inputAmount.currency), + inputCurrencyAmountRaw: trade.inputAmount.quotient.toString(), + expectedOutputCurrencyAmountRaw: trade.outputAmount.quotient.toString(), + outputCurrencyId: currencyId(trade.outputAmount.currency), + minimumOutputCurrencyAmountRaw: trade.minimumAmountOut(allowedSlippage).quotient.toString(), + } + : { + type: TransactionType.SWAP, + tradeType: TradeType.EXACT_OUTPUT, + inputCurrencyId: currencyId(trade.inputAmount.currency), + maximumInputCurrencyAmountRaw: trade.maximumAmountIn(allowedSlippage).quotient.toString(), + outputCurrencyId: currencyId(trade.outputAmount.currency), + outputCurrencyAmountRaw: trade.outputAmount.quotient.toString(), + expectedInputCurrencyAmountRaw: trade.inputAmount.quotient.toString(), + }); + return response.hash; + }); + }; + }, [addTransaction, allowedSlippage, libCallback, trade]); + return { + state: state, + callback: callback, + error: error, + }; +} + +function formatCurrencyAmount(amount, sigFigs) { + if (!amount) { + return '-'; + } + if (JSBI.equal(amount.quotient, JSBI.BigInt(0))) { + return '0'; + } + if (amount.divide(amount.decimalScale).lessThan(new Fraction(1, 100000))) { + return '<0.00001'; + } + return amount.toSignificant(sigFigs); +} + +var _path; + +function _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); } + +const SvgDropdown = props => /*#__PURE__*/React.createElement("svg", _extends({ + width: 12, + height: 7, + viewBox: "0 0 12 7", + fill: "none", + xmlns: "http://www.w3.org/2000/svg" +}, props), _path || (_path = /*#__PURE__*/React.createElement("path", { + d: "M0.97168 1L6.20532 6L11.439 1", + stroke: "#AEAEAE" +}))); + +var StyledInput = styled.input(templateObject_1$u || (templateObject_1$u = __makeTemplateObject(["\n color: ", ";\n width: 0;\n position: relative;\n font-weight: 500;\n outline: none;\n border: none;\n flex: 1 1 auto;\n background-color: ", ";\n font-size: ", ";\n text-align: ", ";\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 0px;\n -webkit-appearance: textfield;\n text-align: right;\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: ", ";\n }\n"], ["\n color: ", ";\n width: 0;\n position: relative;\n font-weight: 500;\n outline: none;\n border: none;\n flex: 1 1 auto;\n background-color: ", ";\n font-size: ", ";\n text-align: ", ";\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 0px;\n -webkit-appearance: textfield;\n text-align: right;\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: ", ";\n }\n"])), function (_a) { + var error = _a.error, theme = _a.theme; + return (error ? theme.red1 : theme.text1); +}, function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var fontSize = _a.fontSize; + return fontSize !== null && fontSize !== void 0 ? fontSize : '28px'; +}, function (_a) { + var align = _a.align; + return align && align; +}, function (_a) { + var theme = _a.theme; + return theme.text4; +}); +var inputRegex = RegExp("^\\d*(?:\\\\[.])?\\d*$"); // match escaped "." characters via in a non-capturing group +var Input$1 = React__default.memo(function InnerInput(_a) { + var value = _a.value, onUserInput = _a.onUserInput, placeholder = _a.placeholder, prependSymbol = _a.prependSymbol, rest = __rest(_a, ["value", "onUserInput", "placeholder", "prependSymbol"]); + var enforcer = function (nextUserInput) { + if (nextUserInput === '' || inputRegex.test(escapeRegExp(nextUserInput))) { + onUserInput(nextUserInput); + } + }; + return (jsx(StyledInput, __assign({}, rest, { value: prependSymbol && value ? prependSymbol + value : value, onChange: function (event) { + if (prependSymbol) { + var value_1 = event.target.value; + // cut off prepended symbol + var formattedValue = value_1.toString().includes(prependSymbol) + ? value_1.toString().slice(1, value_1.toString().length + 1) + : value_1; + // replace commas with periods, because uniswap exclusively uses period as the decimal separator + enforcer(formattedValue.replace(/,/g, '.')); + } + else { + enforcer(event.target.value.replace(/,/g, '.')); + } + }, + // universal input options + inputMode: "decimal", autoComplete: "off", autoCorrect: "off", + // text-specific options + type: "text", pattern: "^[0-9]*[.,]?[0-9]*$", placeholder: placeholder || '0.0', minLength: 1, maxLength: 79, spellCheck: "false" }), void 0)); +}); +var templateObject_1$u; + +/** + * Returns the last value of type T that passes a filter function + * @param value changing value + * @param filterFn function that determines whether a given value should be considered for the last value + */ +function useLast(value, filterFn) { + var _a = __read(useState(filterFn && filterFn(value) ? value : undefined), 2), last = _a[0], setLast = _a[1]; + useEffect(function () { + setLast(function (last) { + var shouldUse = filterFn ? filterFn(value) : true; + if (shouldUse) + return value; + return last; + }); + }, [filterFn, value]); + return last; +} + +function useToggle(initialState) { + if (initialState === void 0) { initialState = false; } + var _a = __read(useState(initialState), 2), state = _a[0], setState = _a[1]; + var toggle = useCallback(function () { return setState(function (state) { return !state; }); }, []); + return [state, toggle]; +} + +var MobileWrapper = styled(AutoColumn)(templateObject_2$i || (templateObject_2$i = __makeTemplateObject(["\n ", ";\n"], ["\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToSmall(templateObject_1$t || (templateObject_1$t = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); +}); +var BaseWrapper = styled.div(templateObject_3$f || (templateObject_3$f = __makeTemplateObject(["\n border: 1px solid ", ";\n border-radius: 10px;\n display: flex;\n padding: 6px;\n\n align-items: center;\n :hover {\n cursor: ", ";\n background-color: ", ";\n }\n\n color: ", ";\n background-color: ", ";\n filter: ", ";\n"], ["\n border: 1px solid ", ";\n border-radius: 10px;\n display: flex;\n padding: 6px;\n\n align-items: center;\n :hover {\n cursor: ", ";\n background-color: ", ";\n }\n\n color: ", ";\n background-color: ", ";\n filter: ", ";\n"])), function (_a) { + var theme = _a.theme, disable = _a.disable; + return (disable ? 'transparent' : theme.bg3); +}, function (_a) { + var disable = _a.disable; + return !disable && 'pointer'; +}, function (_a) { + var theme = _a.theme, disable = _a.disable; + return !disable && theme.bg2; +}, function (_a) { + var theme = _a.theme, disable = _a.disable; + return disable && theme.text3; +}, function (_a) { + var theme = _a.theme, disable = _a.disable; + return disable && theme.bg3; +}, function (_a) { + var disable = _a.disable; + return disable && 'grayscale(1)'; +}); +function CommonBases(_a) { + var _b; + var chainId = _a.chainId, onSelect = _a.onSelect, selectedCurrency = _a.selectedCurrency; + var bases = typeof chainId !== 'undefined' ? (_b = COMMON_BASES[chainId]) !== null && _b !== void 0 ? _b : [] : []; + return bases.length > 0 ? (jsx(MobileWrapper, __assign({ gap: "md" }, { children: jsx(AutoRow, __assign({ gap: "4px" }, { children: bases.map(function (currency) { + var isSelected = selectedCurrency === null || selectedCurrency === void 0 ? void 0 : selectedCurrency.equals(currency); + return (jsxs(BaseWrapper, __assign({ onClick: function () { return !isSelected && onSelect(currency); }, disable: isSelected }, { children: [jsx(CurrencyLogoFromList, { currency: currency }, void 0), jsx(Text$1, __assign({ fontWeight: 500, fontSize: 16 }, { children: currency.symbol }), void 0)] }), currencyId(currency))); + }) }), void 0) }), void 0)) : null; +} +/** helper component to retrieve a base currency from the active token lists */ +function CurrencyLogoFromList(_a) { + var currency = _a.currency; + var token = useTokenInfoFromActiveList(currency); + return jsx(CurrencyLogo, { currency: token, style: { marginRight: 8 } }, void 0); +} +var templateObject_1$t, templateObject_2$i, templateObject_3$f; + +var QuestionWrapper = styled.div(templateObject_1$s || (templateObject_1$s = __makeTemplateObject(["\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0px;\n width: 18px;\n height: 18px;\n border: none;\n background: none;\n outline: none;\n cursor: default;\n border-radius: 36px;\n font-size: 12px;\n background-color: ", ";\n color: ", ";\n\n :hover,\n :focus {\n opacity: 0.7;\n }\n"], ["\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0px;\n width: 18px;\n height: 18px;\n border: none;\n background: none;\n outline: none;\n cursor: default;\n border-radius: 36px;\n font-size: 12px;\n background-color: ", ";\n color: ", ";\n\n :hover,\n :focus {\n opacity: 0.7;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}, function (_a) { + var theme = _a.theme; + return theme.text2; +}); +var QuestionMark = styled.span(templateObject_2$h || (templateObject_2$h = __makeTemplateObject(["\n font-size: 14px;\n"], ["\n font-size: 14px;\n"]))); +function QuestionHelper(_a) { + var text = _a.text; + var _b = __read(useState(false), 2), show = _b[0], setShow = _b[1]; + var open = useCallback(function () { return setShow(true); }, [setShow]); + var close = useCallback(function () { return setShow(false); }, [setShow]); + return (jsx("span", __assign({ style: { marginLeft: 4, display: 'flex', alignItems: 'center' } }, { children: jsx(Tooltip, __assign({ text: text, show: show }, { children: jsx(QuestionWrapper, __assign({ onClick: open, onMouseEnter: open, onMouseLeave: close }, { children: jsx(QuestionMark, { children: "?" }, void 0) }), void 0) }), void 0) }), void 0)); +} +var templateObject_1$s, templateObject_2$h; + +var TokenListLogo = "data:image/svg+xml,%3Csvg%20width%3D%22225%22%20height%3D%22225%22%20viewBox%3D%220%200%20225%20225%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M74.8125%20190.529C65.7561%20190.513%2055.5298%20183.748%2051.9715%20175.42L19.9417%20100.456C16.3834%2092.1277%2020.8404%2085.39%2029.8968%2085.4068L111.417%2085.5579C120.473%2085.5747%20130.699%2092.3395%20134.258%20100.668L166.288%20175.632C169.846%20183.96%20165.389%20190.697%20156.332%20190.681L74.8125%20190.529Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint0_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint1_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint2_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint3_radial%29%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M92.958%20165.95C82.7695%20165.931%2071.265%20158.321%2067.2619%20148.952L26.2489%2052.9632C22.2458%2043.5941%2027.26%2036.0143%2037.4485%2036.0332L141.832%2036.2266C152.02%2036.2455%20163.525%2043.8559%20167.528%2053.225L208.541%20149.214C212.544%20158.583%20207.53%20166.163%20197.341%20166.144L92.958%20165.95ZM71.3614%20148.959C74.475%20156.246%2083.4229%20162.166%2091.3473%20162.18L195.73%20162.374C203.655%20162.388%20207.555%20156.493%20204.441%20149.206L163.428%2053.2174C160.315%2045.9304%20151.367%2040.0111%20143.442%2039.9964L39.0592%2039.803C31.1349%2039.7883%2027.2349%2045.6837%2030.3485%2052.9708L71.3614%20148.959Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M68.565%2053.3425C81.1781%2053.3659%2095.4205%2062.7875%20100.376%2074.3862C105.332%2085.985%2099.1246%2095.3687%2086.5115%2095.3454C73.8984%2095.322%2059.6559%2085.9004%2054.7001%2074.3016C49.7443%2062.7028%2055.9518%2053.3191%2068.565%2053.3425Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M90.6891%20104.981C103.302%20105.004%20117.545%20114.425%20122.5%20126.024C127.456%20137.623%20121.249%20147.007%20108.636%20146.983C96.0225%20146.96%2081.7801%20137.538%2076.8243%20125.94C71.8685%20114.341%2078.076%20104.957%2090.6891%20104.981Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M147.538%20105.142C160.151%20105.166%20174.394%20114.587%20179.349%20126.186C184.305%20137.785%20178.098%20147.168%20165.485%20147.145C152.871%20147.122%20138.629%20137.7%20133.673%20126.101C128.717%20114.503%20134.925%20105.119%20147.538%20105.142Z%22%20fill%3D%22%23131313%22%2F%3E%3Cdefs%3E%3CradialGradient%20id%3D%22paint0_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%28134.41%2068.3006%29%20rotate%28-33.9533%29%20scale%2890.6795%2083.3208%29%22%3E%3Cstop%20offset%3D%220.661458%22%20stop-color%3D%22%23C4FCF8%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint1_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%2842.7873%20129.218%29%20rotate%28-24.1606%29%20scale%28213.359%20196.045%29%22%3E%3Cstop%20stop-color%3D%22%23FF0099%22%20stop-opacity%3D%220.9%22%2F%3E%3Cstop%20offset%3D%220.770833%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint2_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%28176.854%20148.655%29%20rotate%28-53.4908%29%20scale%28107.342%2098.6309%29%22%3E%3Cstop%20stop-color%3D%22%23FFEC43%22%2F%3E%3Cstop%20offset%3D%220.805707%22%20stop-color%3D%22%23FFF6A8%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint3_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%2857.5443%2053.4752%29%20rotate%2820.3896%29%20scale%28137.027%20125.907%29%22%3E%3Cstop%20offset%3D%220.125%22%20stop-color%3D%22%235886FE%22%20stop-opacity%3D%220.46%22%2F%3E%3Cstop%20offset%3D%220.673044%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3C%2Fdefs%3E%3C%2Fsvg%3E"; + +var StyledListLogo = styled(Logo)(templateObject_1$r || (templateObject_1$r = __makeTemplateObject(["\n width: ", ";\n height: ", ";\n"], ["\n width: ", ";\n height: ", ";\n"])), function (_a) { + var size = _a.size; + return size; +}, function (_a) { + var size = _a.size; + return size; +}); +function ListLogo(_a) { + var logoURI = _a.logoURI, style = _a.style, _b = _a.size, size = _b === void 0 ? '24px' : _b, alt = _a.alt; + var srcs = useHttpLocations(logoURI); + return jsx(StyledListLogo, { alt: alt, size: size, srcs: srcs, style: style }, void 0); +} +var templateObject_1$r; + +var TokenSection = styled.div(templateObject_1$q || (templateObject_1$q = __makeTemplateObject(["\n padding: 4px 20px;\n height: 56px;\n display: grid;\n grid-template-columns: auto minmax(auto, 1fr) auto;\n grid-gap: 16px;\n align-items: center;\n\n opacity: ", ";\n"], ["\n padding: 4px 20px;\n height: 56px;\n display: grid;\n grid-template-columns: auto minmax(auto, 1fr) auto;\n grid-gap: 16px;\n align-items: center;\n\n opacity: ", ";\n"])), function (_a) { + var dim = _a.dim; + return (dim ? '0.4' : '1'); +}); +var CheckIcon = styled(CheckCircle)(templateObject_2$g || (templateObject_2$g = __makeTemplateObject(["\n height: 16px;\n width: 16px;\n margin-right: 6px;\n stroke: ", ";\n"], ["\n height: 16px;\n width: 16px;\n margin-right: 6px;\n stroke: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.green1; +}); +var NameOverflow = styled.div(templateObject_3$e || (templateObject_3$e = __makeTemplateObject(["\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 140px;\n font-size: 12px;\n"], ["\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 140px;\n font-size: 12px;\n"]))); +function ImportRow(_a) { + var token = _a.token, style = _a.style, dim = _a.dim, showImportView = _a.showImportView, setImportToken = _a.setImportToken; + var theme = useTheme(); + // check if already active on list or local storage tokens + var isAdded = useIsUserAddedToken(token); + var isActive = useIsTokenActive(token); + var list = token instanceof WrappedTokenInfo ? token.list : undefined; + return (jsxs(TokenSection, __assign({ style: style }, { children: [jsx(CurrencyLogo, { currency: token, size: '24px', style: { opacity: dim ? '0.6' : '1' } }, void 0), jsxs(AutoColumn, __assign({ gap: "4px", style: { opacity: dim ? '0.6' : '1' } }, { children: [jsxs(AutoRow, { children: [jsx(ThemedText.Body, __assign({ fontWeight: 500 }, { children: token.symbol }), void 0), jsx(ThemedText.DarkGray, __assign({ ml: "8px", fontWeight: 300 }, { children: jsx(NameOverflow, __assign({ title: token.name }, { children: token.name }), void 0) }), void 0)] }, void 0), list && list.logoURI && (jsxs(RowFixed, { children: [jsx(ThemedText.Small, __assign({ mr: "4px", color: theme.text3 }, { children: jsxs(Trans, { children: ["via ", list.name, " "] }, void 0) }), void 0), jsx(ListLogo, { logoURI: list.logoURI, size: "12px" }, void 0)] }, void 0))] }), void 0), !isActive && !isAdded ? (jsx(ButtonPrimary, __assign({ width: "fit-content", padding: "6px 12px", fontWeight: 500, fontSize: "14px", onClick: function () { + setImportToken && setImportToken(token); + showImportView(); + } }, { children: jsx(Trans, { children: "Import" }, void 0) }), void 0)) : (jsxs(RowFixed, __assign({ style: { minWidth: 'fit-content' } }, { children: [jsx(CheckIcon, {}, void 0), jsx(ThemedText.Main, __assign({ color: theme.green1 }, { children: jsx(Trans, { children: "Active" }, void 0) }), void 0)] }), void 0))] }), void 0)); +} +var templateObject_1$q, templateObject_2$g, templateObject_3$e; + +var TextDot = styled.div(templateObject_1$p || (templateObject_1$p = __makeTemplateObject(["\n height: 3px;\n width: 3px;\n background-color: ", ";\n border-radius: 50%;\n"], ["\n height: 3px;\n width: 3px;\n background-color: ", ";\n border-radius: 50%;\n"])), function (_a) { + var theme = _a.theme; + return theme.text2; +}); +var Checkbox = styled.input(templateObject_2$f || (templateObject_2$f = __makeTemplateObject(["\n border: 1px solid ", ";\n height: 20px;\n margin: 0;\n"], ["\n border: 1px solid ", ";\n height: 20px;\n margin: 0;\n"])), function (_a) { + var theme = _a.theme; + return theme.red3; +}); +var PaddedColumn = styled(AutoColumn)(templateObject_3$d || (templateObject_3$d = __makeTemplateObject(["\n padding: 20px;\n"], ["\n padding: 20px;\n"]))); +var MenuItem = styled(RowBetween)(templateObject_4$9 || (templateObject_4$9 = __makeTemplateObject(["\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: ", ";\n pointer-events: ", ";\n :hover {\n background-color: ", ";\n }\n opacity: ", ";\n"], ["\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: ", ";\n pointer-events: ", ";\n :hover {\n background-color: ", ";\n }\n opacity: ", ";\n"])), function (_a) { + var disabled = _a.disabled; + return !disabled && 'pointer'; +}, function (_a) { + var disabled = _a.disabled; + return disabled && 'none'; +}, function (_a) { + var theme = _a.theme, disabled = _a.disabled; + return !disabled && theme.bg2; +}, function (_a) { + var disabled = _a.disabled, selected = _a.selected; + return (disabled || selected ? 0.5 : 1); +}); +var SearchInput = styled.input(templateObject_5$9 || (templateObject_5$9 = __makeTemplateObject(["\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: ", ";\n border-style: solid;\n border: 1px solid ", ";\n -webkit-appearance: none;\n\n font-size: 18px;\n\n ::placeholder {\n color: ", ";\n }\n transition: border 100ms;\n :focus {\n border: 1px solid ", ";\n outline: none;\n }\n"], ["\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: ", ";\n border-style: solid;\n border: 1px solid ", ";\n -webkit-appearance: none;\n\n font-size: 18px;\n\n ::placeholder {\n color: ", ";\n }\n transition: border 100ms;\n :focus {\n border: 1px solid ", ";\n outline: none;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text1; +}, function (_a) { + var theme = _a.theme; + return theme.bg3; +}, function (_a) { + var theme = _a.theme; + return theme.text3; +}, function (_a) { + var theme = _a.theme; + return theme.primary1; +}); +var Separator = styled.div(templateObject_6$5 || (templateObject_6$5 = __makeTemplateObject(["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"], ["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}); +var SeparatorDark = styled.div(templateObject_7$4 || (templateObject_7$4 = __makeTemplateObject(["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"], ["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg3; +}); +var templateObject_1$p, templateObject_2$f, templateObject_3$d, templateObject_4$9, templateObject_5$9, templateObject_6$5, templateObject_7$4; + +function currencyKey(currency) { + return currency.isToken ? currency.address : 'ETHER'; +} +var StyledBalanceText = styled(Text$1)(templateObject_1$o || (templateObject_1$o = __makeTemplateObject(["\n white-space: nowrap;\n overflow: hidden;\n max-width: 5rem;\n text-overflow: ellipsis;\n"], ["\n white-space: nowrap;\n overflow: hidden;\n max-width: 5rem;\n text-overflow: ellipsis;\n"]))); +var Tag = styled.div(templateObject_2$e || (templateObject_2$e = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\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 background-color: ", ";\n color: ", ";\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"])), function (_a) { + var theme = _a.theme; + return theme.bg3; +}, function (_a) { + var theme = _a.theme; + return theme.text2; +}); +var FixedContentRow = styled.div(templateObject_3$c || (templateObject_3$c = __makeTemplateObject(["\n padding: 4px 20px;\n height: 56px;\n display: grid;\n grid-gap: 16px;\n align-items: center;\n"], ["\n padding: 4px 20px;\n height: 56px;\n display: grid;\n grid-gap: 16px;\n align-items: center;\n"]))); +function Balance(_a) { + var balance = _a.balance; + return jsx(StyledBalanceText, __assign({ title: balance.toExact() }, { children: balance.toSignificant(4) }), void 0); +} +var TagContainer = styled.div(templateObject_4$8 || (templateObject_4$8 = __makeTemplateObject(["\n display: flex;\n justify-content: flex-end;\n"], ["\n display: flex;\n justify-content: flex-end;\n"]))); +var TokenListLogoWrapper = styled.img(templateObject_5$8 || (templateObject_5$8 = __makeTemplateObject(["\n height: 20px;\n"], ["\n height: 20px;\n"]))); +function TokenTags(_a) { + var currency = _a.currency; + if (!(currency instanceof WrappedTokenInfo)) { + return jsx("span", {}, void 0); + } + var tags = currency.tags; + if (!tags || tags.length === 0) + return jsx("span", {}, void 0); + var tag = tags[0]; + return (jsxs(TagContainer, { children: [jsx(MouseoverTooltip, __assign({ text: tag.description }, { children: jsx(Tag, { children: tag.name }, tag.id) }), void 0), tags.length > 1 ? (jsx(MouseoverTooltip, __assign({ text: tags + .slice(1) + .map(function (_a) { + var name = _a.name, description = _a.description; + return name + ": " + description; + }) + .join('; \n') }, { children: jsx(Tag, { children: "..." }, void 0) }), void 0)) : null] }, void 0)); +} +function CurrencyRow(_a) { + var currency = _a.currency, onSelect = _a.onSelect, isSelected = _a.isSelected, otherSelected = _a.otherSelected, style = _a.style, showCurrencyAmount = _a.showCurrencyAmount; + var account = useActiveWeb3React().account; + var key = currencyKey(currency); + var selectedTokenList = useCombinedActiveList(); + var isOnSelectedList = isTokenOnList(selectedTokenList, currency.isToken ? currency : undefined); + var customAdded = useIsUserAddedToken(currency); + var balance = useCurrencyBalance(account !== null && account !== void 0 ? account : undefined, currency); + // only show add or remove buttons if not on selected list + return (jsxs(MenuItem, __assign({ style: style, className: "token-item-" + key, onClick: function () { return (isSelected ? null : onSelect()); }, disabled: isSelected, selected: otherSelected }, { children: [jsx(CurrencyLogo, { currency: currency, size: '24px' }, void 0), jsxs(Column, { children: [jsx(Text$1, __assign({ title: currency.name, fontWeight: 500 }, { children: currency.symbol }), void 0), jsx(ThemedText.DarkGray, __assign({ ml: "0px", fontSize: '12px', fontWeight: 300 }, { children: !currency.isNative && !isOnSelectedList && customAdded ? (jsxs(Trans, { children: [currency.name, " \u2022 Added by user"] }, void 0)) : (currency.name) }), void 0)] }, void 0), jsx(TokenTags, { currency: currency }, void 0), showCurrencyAmount && (jsx(RowFixed, __assign({ style: { justifySelf: 'flex-end' } }, { children: balance ? jsx(Balance, { balance: balance }, void 0) : account ? jsx(Loader, {}, void 0) : null }), void 0))] }), void 0)); +} +var BREAK_LINE = 'BREAK'; +function isBreakLine(x) { + return x === BREAK_LINE; +} +function BreakLineComponent(_a) { + var style = _a.style; + var theme = useTheme(); + return (jsx(FixedContentRow, __assign({ style: style }, { children: jsx(LightGreyCard, __assign({ padding: "8px 12px", "$borderRadius": "8px" }, { children: jsxs(RowBetween, { children: [jsxs(RowFixed, { children: [jsx(TokenListLogoWrapper, { src: TokenListLogo }, void 0), jsx(ThemedText.Main, __assign({ ml: "6px", fontSize: "12px", color: theme.text1 }, { children: jsx(Trans, { children: "Expanded results from inactive Token Lists" }, void 0) }), void 0)] }, void 0), jsx(QuestionHelper, { text: jsx(Trans, { children: "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists." }, void 0) }, void 0)] }, void 0) }), void 0) }), void 0)); +} +function CurrencyList(_a) { + var height = _a.height, currencies = _a.currencies, otherListTokens = _a.otherListTokens, selectedCurrency = _a.selectedCurrency, onCurrencySelect = _a.onCurrencySelect, otherCurrency = _a.otherCurrency, fixedListRef = _a.fixedListRef, showImportView = _a.showImportView, setImportToken = _a.setImportToken, showCurrencyAmount = _a.showCurrencyAmount; + var itemData = useMemo(function () { + if (otherListTokens && (otherListTokens === null || otherListTokens === void 0 ? void 0 : otherListTokens.length) > 0) { + return __spreadArray(__spreadArray(__spreadArray([], __read(currencies), false), [BREAK_LINE], false), __read(otherListTokens), false); + } + return currencies; + }, [currencies, otherListTokens]); + var Row = useCallback(function TokenRow(_a) { + var data = _a.data, index = _a.index, style = _a.style; + var row = data[index]; + if (isBreakLine(row)) { + return jsx(BreakLineComponent, { style: style }, void 0); + } + var currency = row; + var isSelected = Boolean(currency && selectedCurrency && selectedCurrency.equals(currency)); + var otherSelected = Boolean(currency && otherCurrency && otherCurrency.equals(currency)); + var handleSelect = function () { return currency && onCurrencySelect(currency); }; + var token = currency === null || currency === void 0 ? void 0 : currency.wrapped; + var showImport = index > currencies.length; + if (showImport && token) { + return (jsx(ImportRow, { style: style, token: token, showImportView: showImportView, setImportToken: setImportToken, dim: true }, void 0)); + } + else if (currency) { + return (jsx(CurrencyRow, { style: style, currency: currency, isSelected: isSelected, onSelect: handleSelect, otherSelected: otherSelected, showCurrencyAmount: showCurrencyAmount }, void 0)); + } + else { + return null; + } + }, [ + currencies.length, + onCurrencySelect, + otherCurrency, + selectedCurrency, + setImportToken, + showImportView, + showCurrencyAmount, + ]); + var itemKey = useCallback(function (index, data) { + var currency = data[index]; + if (isBreakLine(currency)) + return BREAK_LINE; + return currencyKey(currency); + }, []); + return (jsx(FixedSizeList, __assign({ height: height, ref: fixedListRef, width: "100%", itemData: itemData, itemCount: itemData.length, itemSize: 56, itemKey: itemKey }, { children: Row }), void 0)); +} +var templateObject_1$o, templateObject_2$e, templateObject_3$c, templateObject_4$8, templateObject_5$8; + +var ContentWrapper = styled(Column)(templateObject_1$n || (templateObject_1$n = __makeTemplateObject(["\n width: 100%;\n flex: 1 1;\n position: relative;\n"], ["\n width: 100%;\n flex: 1 1;\n position: relative;\n"]))); +var Footer$1 = styled.div(templateObject_2$d || (templateObject_2$d = __makeTemplateObject(["\n width: 100%;\n border-radius: 20px;\n padding: 20px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n background-color: ", ";\n border-top: 1px solid ", ";\n"], ["\n width: 100%;\n border-radius: 20px;\n padding: 20px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n background-color: ", ";\n border-top: 1px solid ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var theme = _a.theme; + return theme.bg2; +}); +function CurrencySearch(_a) { + var selectedCurrency = _a.selectedCurrency, onCurrencySelect = _a.onCurrencySelect, otherSelectedCurrency = _a.otherSelectedCurrency, showCommonBases = _a.showCommonBases, showCurrencyAmount = _a.showCurrencyAmount, disableNonToken = _a.disableNonToken, onDismiss = _a.onDismiss, isOpen = _a.isOpen, showManageView = _a.showManageView, showImportView = _a.showImportView, setImportToken = _a.setImportToken; + var chainId = useActiveWeb3React().chainId; + var theme = useTheme(); + // refs for fixed size lists + var fixedList = useRef(); + var _b = __read(useState(''), 2), searchQuery = _b[0], setSearchQuery = _b[1]; + var debouncedQuery = useDebounce(searchQuery, 200); + var allTokens = useAllTokens(); + // if they input an address, use it + var isAddressSearch = isAddress(debouncedQuery); + var searchToken = useToken(debouncedQuery); + var searchTokenIsAdded = useIsUserAddedToken(searchToken); + useEffect(function () { + if (isAddressSearch) { + ReactGA.event({ + category: 'Currency Select', + action: 'Search by address', + label: isAddressSearch, + }); + } + }, [isAddressSearch]); + var filteredTokens = useMemo(function () { + return Object.values(allTokens).filter(getTokenFilter(debouncedQuery)); + }, [allTokens, debouncedQuery]); + var balances = useAllTokenBalances(); + var sortedTokens = useMemo(function () { + return filteredTokens.sort(tokenComparator.bind(null, balances)); + }, [balances, filteredTokens]); + var filteredSortedTokens = useSortTokensByQuery(debouncedQuery, sortedTokens); + var native = useNativeCurrency(); + var filteredSortedTokensWithETH = useMemo(function () { + var _a, _b; + if (!native) + return filteredSortedTokens; + var s = debouncedQuery.toLowerCase().trim(); + if (((_b = (_a = native.symbol) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === null || _b === void 0 ? void 0 : _b.indexOf(s)) !== -1) { + return native ? __spreadArray([native], __read(filteredSortedTokens), false) : filteredSortedTokens; + } + return filteredSortedTokens; + }, [debouncedQuery, native, filteredSortedTokens]); + var handleCurrencySelect = useCallback(function (currency) { + onCurrencySelect(currency); + onDismiss(); + }, [onDismiss, onCurrencySelect]); + // clear the input on open + useEffect(function () { + if (isOpen) + setSearchQuery(''); + }, [isOpen]); + // manage focus on modal show + var inputRef = useRef(); + var handleInput = useCallback(function (event) { + var _a; + var input = event.target.value; + var checksummedInput = isAddress(input); + setSearchQuery(checksummedInput || input); + (_a = fixedList.current) === null || _a === void 0 ? void 0 : _a.scrollTo(0); + }, []); + var handleEnter = useCallback(function (e) { + var _a, _b; + if (e.key === 'Enter') { + var s = debouncedQuery.toLowerCase().trim(); + if (s === ((_a = native === null || native === void 0 ? void 0 : native.symbol) === null || _a === void 0 ? void 0 : _a.toLowerCase())) { + handleCurrencySelect(native); + } + else if (filteredSortedTokensWithETH.length > 0) { + if (((_b = filteredSortedTokensWithETH[0].symbol) === null || _b === void 0 ? void 0 : _b.toLowerCase()) === debouncedQuery.trim().toLowerCase() || + filteredSortedTokensWithETH.length === 1) { + handleCurrencySelect(filteredSortedTokensWithETH[0]); + } + } + } + }, [debouncedQuery, native, filteredSortedTokensWithETH, handleCurrencySelect]); + // menu ui + var _c = __read(useToggle(false), 2), open = _c[0], toggle = _c[1]; + var node = useRef(); + useOnClickOutside(node, open ? toggle : undefined); + // if no results on main list, show option to expand into inactive + var filteredInactiveTokens = useSearchInactiveTokenLists(filteredTokens.length === 0 || (debouncedQuery.length > 2 && !isAddressSearch) ? debouncedQuery : undefined); + return (jsxs(ContentWrapper, { children: [jsxs(PaddedColumn, __assign({ gap: "16px" }, { children: [jsxs(RowBetween, { children: [jsx(Text$1, __assign({ fontWeight: 500, fontSize: 16 }, { children: jsx(Trans, { children: "Select a token" }, void 0) }), void 0), jsx(CloseIcon$2, { onClick: onDismiss }, void 0)] }, void 0), jsx(Row$1, { children: jsx(SearchInput, { type: "text", id: "token-search-input", placeholder: t(templateObject_3$b || (templateObject_3$b = __makeTemplateObject(["Search name or paste address"], ["Search name or paste address"]))), autoComplete: "off", value: searchQuery, ref: inputRef, onChange: handleInput, onKeyDown: handleEnter }, void 0) }, void 0), showCommonBases && (jsx(CommonBases, { chainId: chainId, onSelect: handleCurrencySelect, selectedCurrency: selectedCurrency }, void 0))] }), void 0), jsx(Separator, {}, void 0), searchToken && !searchTokenIsAdded ? (jsx(Column, __assign({ style: { padding: '20px 0', height: '100%' } }, { children: jsx(ImportRow, { token: searchToken, showImportView: showImportView, setImportToken: setImportToken }, void 0) }), void 0)) : (filteredSortedTokens === null || filteredSortedTokens === void 0 ? void 0 : filteredSortedTokens.length) > 0 || (filteredInactiveTokens === null || filteredInactiveTokens === void 0 ? void 0 : filteredInactiveTokens.length) > 0 ? (jsx("div", __assign({ style: { flex: '1' } }, { children: jsx(AutoSizer, __assign({ disableWidth: true }, { children: function (_a) { + var height = _a.height; + return (jsx(CurrencyList, { height: height, currencies: disableNonToken ? filteredSortedTokens : filteredSortedTokensWithETH, otherListTokens: filteredInactiveTokens, onCurrencySelect: handleCurrencySelect, otherCurrency: otherSelectedCurrency, selectedCurrency: selectedCurrency, fixedListRef: fixedList, showImportView: showImportView, setImportToken: setImportToken, showCurrencyAmount: showCurrencyAmount }, void 0)); + } }), void 0) }), void 0)) : (jsx(Column, __assign({ style: { padding: '20px', height: '100%' } }, { children: jsx(ThemedText.Main, __assign({ color: theme.text3, textAlign: "center", mb: "20px" }, { children: jsx(Trans, { children: "No results found." }, void 0) }), void 0) }), void 0)), jsx(Footer$1, { children: jsx(Row$1, __assign({ justify: "center" }, { children: jsx(ButtonText, __assign({ onClick: showManageView, color: theme.primary1, className: "list-token-manage-button" }, { children: jsxs(RowFixed, { children: [jsx(IconWrapper$4, __assign({ size: "16px", marginRight: "6px", stroke: theme.primaryText1 }, { children: jsx(Edit, {}, void 0) }), void 0), jsx(ThemedText.Main, __assign({ color: theme.primaryText1 }, { children: jsx(Trans, { children: "Manage Token Lists" }, void 0) }), void 0)] }, void 0) }), void 0) }), void 0) }, void 0)] }, void 0)); +} +var templateObject_1$n, templateObject_2$d, templateObject_3$b; + +function useFetchListCallback() { + var _this = this; + var _a = useActiveWeb3React(), chainId = _a.chainId, library = _a.library; + var dispatch = useAppDispatch(); + var ensResolver = useCallback(function (ensName) { return __awaiter(_this, void 0, void 0, function () { + var networkLibrary, network; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!(!library || chainId !== 1)) return [3 /*break*/, 2]; + networkLibrary = getNetworkLibrary(); + return [4 /*yield*/, networkLibrary.getNetwork()]; + case 1: + network = _a.sent(); + if (networkLibrary && network.chainId === 1) { + return [2 /*return*/, resolveENSContentHash(ensName, networkLibrary)]; + } + throw new Error('Could not construct mainnet ENS resolver'); + case 2: return [2 /*return*/, resolveENSContentHash(ensName, library)]; + } + }); + }); }, [chainId, library]); + // note: prevent dispatch if using for list search or unsupported list + return useCallback(function (listUrl, sendDispatch) { + if (sendDispatch === void 0) { sendDispatch = true; } + return __awaiter(_this, void 0, void 0, function () { + var requestId; + return __generator(this, function (_a) { + requestId = nanoid(); + sendDispatch && dispatch(fetchTokenList.pending({ requestId: requestId, url: listUrl })); + return [2 /*return*/, fetchTokenList$1(listUrl, ensResolver) + .then(function (tokenList) { + sendDispatch && dispatch(fetchTokenList.fulfilled({ url: listUrl, tokenList: tokenList, requestId: requestId })); + return tokenList; + }) + .catch(function (error) { + console.debug("Failed to get list at url " + listUrl, error); + sendDispatch && dispatch(fetchTokenList.rejected({ url: listUrl, requestId: requestId, errorMessage: error.message })); + throw error; + })]; + }); + }); + }, [dispatch, ensResolver]); +} + +var Wrapper$8 = styled.div(templateObject_1$m || (templateObject_1$m = __makeTemplateObject(["\n position: relative;\n width: 100%;\n overflow: auto;\n"], ["\n position: relative;\n width: 100%;\n overflow: auto;\n"]))); +function ImportList(_a) { + var _b; + var listURL = _a.listURL, list = _a.list, setModalView = _a.setModalView, onDismiss = _a.onDismiss; + var theme = useTheme(); + var dispatch = useAppDispatch(); + // user must accept + var _c = __read(useState(false), 2), confirmed = _c[0], setConfirmed = _c[1]; + var lists = useAllLists(); + var fetchList = useFetchListCallback(); + // monitor is list is loading + var adding = Boolean((_b = lists[listURL]) === null || _b === void 0 ? void 0 : _b.loadingRequestId); + var _d = __read(useState(null), 2), addError = _d[0], setAddError = _d[1]; + var handleAddList = useCallback(function () { + if (adding) + return; + setAddError(null); + fetchList(listURL) + .then(function () { + ReactGA.event({ + category: 'Lists', + action: 'Add List', + label: listURL, + }); + // turn list on + dispatch(enableList(listURL)); + // go back to lists + setModalView(CurrencyModalView.manage); + }) + .catch(function (error) { + ReactGA.event({ + category: 'Lists', + action: 'Add List Failed', + label: listURL, + }); + setAddError(error.message); + dispatch(removeList(listURL)); + }); + }, [adding, dispatch, fetchList, listURL, setModalView]); + return (jsxs(Wrapper$8, { children: [jsx(PaddedColumn, __assign({ gap: "14px", style: { width: '100%', flex: '1 1' } }, { children: jsxs(RowBetween, { children: [jsx(ArrowLeft, { style: { cursor: 'pointer' }, onClick: function () { return setModalView(CurrencyModalView.manage); } }, void 0), jsx(ThemedText.MediumHeader, { children: jsx(Trans, { children: "Import List" }, void 0) }, void 0), jsx(CloseIcon$2, { onClick: onDismiss }, void 0)] }, void 0) }), void 0), jsx(SectionBreak, {}, void 0), jsx(PaddedColumn, __assign({ gap: "md" }, { children: jsxs(AutoColumn, __assign({ gap: "md" }, { children: [jsx(Card, __assign({ backgroundColor: theme.bg2, padding: "12px 20px" }, { children: jsx(RowBetween, { children: jsxs(RowFixed, { children: [list.logoURI && jsx(ListLogo, { logoURI: list.logoURI, size: "40px" }, void 0), jsxs(AutoColumn, __assign({ gap: "sm", style: { marginLeft: '20px' } }, { children: [jsxs(RowFixed, { children: [jsx(ThemedText.Body, __assign({ fontWeight: 600, mr: "6px" }, { children: list.name }), void 0), jsx(TextDot, {}, void 0), jsx(ThemedText.Main, __assign({ fontSize: '16px', ml: "6px" }, { children: jsxs(Trans, { children: [list.tokens.length, " tokens"] }, void 0) }), void 0)] }, void 0), jsx(ExternalLink, __assign({ href: "https://tokenlists.org/token-list?url=" + listURL }, { children: jsx(ThemedText.Main, __assign({ fontSize: '12px', color: theme.blue1 }, { children: listURL }), void 0) }), void 0)] }), void 0)] }, void 0) }, void 0) }), void 0), jsxs(Card, __assign({ style: { backgroundColor: transparentize(0.8, theme.red1) } }, { children: [jsxs(AutoColumn, __assign({ justify: "center", style: { textAlign: 'center', gap: '16px', marginBottom: '12px' } }, { children: [jsx(AlertTriangle, { stroke: theme.red1, size: 32 }, void 0), jsx(ThemedText.Body, __assign({ fontWeight: 500, fontSize: 20, color: theme.red1 }, { children: jsx(Trans, { children: "Import at your own risk" }, void 0) }), void 0)] }), void 0), jsxs(AutoColumn, __assign({ style: { textAlign: 'center', gap: '16px', marginBottom: '12px' } }, { children: [jsx(ThemedText.Body, __assign({ fontWeight: 500, color: theme.red1 }, { children: jsx(Trans, { children: "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one." }, void 0) }), void 0), jsx(ThemedText.Body, __assign({ fontWeight: 600, color: theme.red1 }, { children: jsx(Trans, { children: "If you purchase a token from this list, you may not be able to sell it back." }, void 0) }), void 0)] }), void 0), jsxs(AutoRow, __assign({ justify: "center", style: { cursor: 'pointer' }, onClick: function () { return setConfirmed(!confirmed); } }, { children: [jsx(Checkbox, { name: "confirmed", type: "checkbox", checked: confirmed, onChange: function () { return setConfirmed(!confirmed); } }, void 0), jsx(ThemedText.Body, __assign({ ml: "10px", fontSize: "16px", color: theme.red1, fontWeight: 500 }, { children: jsx(Trans, { children: "I understand" }, void 0) }), void 0)] }), void 0)] }), void 0), jsx(ButtonPrimary, __assign({ disabled: !confirmed, altDisabledStyle: true, "$borderRadius": "20px", padding: "10px 1rem", onClick: handleAddList }, { children: jsx(Trans, { children: "Import" }, void 0) }), void 0), addError ? (jsx(ThemedText.Error, __assign({ title: addError, style: { textOverflow: 'ellipsis', overflow: 'hidden' }, error: true }, { children: addError }), void 0)) : null] }), void 0) }), void 0)] }, void 0)); +} +var templateObject_1$m; + +var WarningWrapper = styled(Card)(templateObject_1$l || (templateObject_1$l = __makeTemplateObject(["\n background-color: ", ";\n width: fit-content;\n"], ["\n background-color: ", ";\n width: fit-content;\n"])), function (_a) { + var theme = _a.theme, highWarning = _a.highWarning; + return highWarning ? transparentize(0.8, theme.red1) : transparentize(0.8, theme.yellow2); +}); +var AddressText = styled(ThemedText.Blue)(templateObject_3$a || (templateObject_3$a = __makeTemplateObject(["\n font-size: 12px;\n word-break: break-all;\n\n ", "\n"], ["\n font-size: 12px;\n word-break: break-all;\n\n ", "\n"])), function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToSmall(templateObject_2$c || (templateObject_2$c = __makeTemplateObject(["\n font-size: 10px;\n "], ["\n font-size: 10px;\n "]))); +}); +var TokenImportCard = function (_a) { + var list = _a.list, token = _a.token; + var theme = useTheme$1(); + var chainId = useActiveWeb3React().chainId; + return (jsx(Card, __assign({ backgroundColor: theme.bg2, padding: "2rem" }, { children: jsxs(AutoColumn, __assign({ gap: "10px", justify: "center" }, { children: [jsx(CurrencyLogo, { currency: token, size: '32px' }, void 0), jsxs(AutoColumn, __assign({ gap: "4px", justify: "center" }, { children: [jsx(ThemedText.Body, __assign({ ml: "8px", mr: "8px", fontWeight: 500, fontSize: 20 }, { children: token.symbol }), void 0), jsx(ThemedText.DarkGray, __assign({ fontWeight: 400, fontSize: 14 }, { children: token.name }), void 0)] }), void 0), chainId && (jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, token.address, ExplorerDataType.ADDRESS) }, { children: jsx(AddressText, __assign({ fontSize: 12 }, { children: token.address }), void 0) }), void 0)), list !== undefined ? (jsxs(RowFixed, { children: [list.logoURI && jsx(ListLogo, { logoURI: list.logoURI, size: "16px" }, void 0), jsx(ThemedText.Small, __assign({ ml: "6px", fontSize: 14, color: theme.text3 }, { children: jsxs(Trans, { children: ["via ", list.name, " token list"] }, void 0) }), void 0)] }, void 0)) : (jsx(WarningWrapper, __assign({ "$borderRadius": "4px", padding: "4px", highWarning: true }, { children: jsxs(RowFixed, { children: [jsx(AlertCircle, { stroke: theme.red1, size: "10px" }, void 0), jsx(ThemedText.Body, __assign({ color: theme.red1, ml: "4px", fontSize: "10px", fontWeight: 500 }, { children: jsx(Trans, { children: "Unknown Source" }, void 0) }), void 0)] }, void 0) }), void 0))] }), void 0) }), void 0)); +}; +var templateObject_1$l, templateObject_2$c, templateObject_3$a; + +var Wrapper$7 = styled.div(templateObject_1$k || (templateObject_1$k = __makeTemplateObject(["\n align-items: center;\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n height: 100%;\n width: 100%;\n"], ["\n align-items: center;\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n height: 100%;\n width: 100%;\n"]))); +var Button = styled(ButtonPrimary)(templateObject_2$b || (templateObject_2$b = __makeTemplateObject(["\n margin-top: 1em;\n padding: 10px 1em;\n"], ["\n margin-top: 1em;\n padding: 10px 1em;\n"]))); +var Content = styled.div(templateObject_3$9 || (templateObject_3$9 = __makeTemplateObject(["\n padding: 1em;\n"], ["\n padding: 1em;\n"]))); +var Copy = styled(ThemedText.Body)(templateObject_4$7 || (templateObject_4$7 = __makeTemplateObject(["\n text-align: center;\n margin: 0 2em 1em !important;\n font-weight: 400;\n font-size: 16px;\n"], ["\n text-align: center;\n margin: 0 2em 1em !important;\n font-weight: 400;\n font-size: 16px;\n"]))); +var Header = styled.div(templateObject_5$7 || (templateObject_5$7 = __makeTemplateObject(["\n align-items: center;\n display: flex;\n gap: 14px;\n justify-content: space-between;\n padding: 20px;\n width: 100%;\n"], ["\n align-items: center;\n display: flex;\n gap: 14px;\n justify-content: space-between;\n padding: 20px;\n width: 100%;\n"]))); +var Icon = styled(AlertCircle)(templateObject_6$4 || (templateObject_6$4 = __makeTemplateObject(["\n stroke: ", ";\n width: 48px;\n height: 48px;\n"], ["\n stroke: ", ";\n width: 48px;\n height: 48px;\n"])), function (_a) { + var theme = _a.theme; + return theme.text2; +}); +var BlockedToken = function (_a) { + var onBack = _a.onBack, onDismiss = _a.onDismiss, blockedTokens = _a.blockedTokens; + return (jsxs(Wrapper$7, { children: [jsxs(Header, { children: [onBack ? jsx(ArrowLeft, { style: { cursor: 'pointer' }, onClick: onBack }, void 0) : jsx("div", {}, void 0), jsx(ThemedText.MediumHeader, { children: jsx(Trans, { children: "Token not supported" }, void 0) }, void 0), onDismiss ? jsx(CloseIcon$2, { onClick: onDismiss }, void 0) : jsx("div", {}, void 0)] }, void 0), jsx(Icon, {}, void 0), jsxs(Content, { children: [jsx(Copy, { children: jsx(Trans, { children: "This token is not supported in the Uniswap Labs app" }, void 0) }, void 0), jsx(TokenImportCard, { token: blockedTokens[0] }, void 0), jsx(Button, __assign({ disabled: true }, { children: jsx(Trans, { children: "Import" }, void 0) }), void 0)] }, void 0)] }, void 0)); +}; +var templateObject_1$k, templateObject_2$b, templateObject_3$9, templateObject_4$7, templateObject_5$7, templateObject_6$4; + +var Wrapper$6 = styled.div(templateObject_1$j || (templateObject_1$j = __makeTemplateObject(["\n position: relative;\n width: 100%;\n overflow: auto;\n"], ["\n position: relative;\n width: 100%;\n overflow: auto;\n"]))); +function ImportToken(props) { + var tokens = props.tokens, list = props.list, onBack = props.onBack, onDismiss = props.onDismiss, handleCurrencySelect = props.handleCurrencySelect; + var theme = useTheme(); + var addToken = useAddUserToken(); + var unsupportedTokens = useUnsupportedTokens(); + var unsupportedSet = new Set(Object.keys(unsupportedTokens)); + var intersection = new Set(tokens.filter(function (token) { return unsupportedSet.has(token.address); })); + if (intersection.size > 0) { + return jsx(BlockedToken, { onBack: onBack, onDismiss: onDismiss, blockedTokens: Array.from(intersection) }, void 0); + } + return (jsxs(Wrapper$6, { children: [jsx(PaddedColumn, __assign({ gap: "14px", style: { width: '100%', flex: '1 1' } }, { children: jsxs(RowBetween, { children: [onBack ? jsx(ArrowLeft, { style: { cursor: 'pointer' }, onClick: onBack }, void 0) : jsx("div", {}, void 0), jsx(ThemedText.MediumHeader, { children: jsx(Plural, { value: tokens.length, one: "Import token", other: "Import tokens" }, void 0) }, void 0), onDismiss ? jsx(CloseIcon$2, { onClick: onDismiss }, void 0) : jsx("div", {}, void 0)] }, void 0) }), void 0), jsx(SectionBreak, {}, void 0), jsxs(AutoColumn, __assign({ gap: "md", style: { marginBottom: '32px', padding: '1rem' } }, { children: [jsxs(AutoColumn, __assign({ justify: "center", style: { textAlign: 'center', gap: '16px', padding: '1rem' } }, { children: [jsx(AlertCircle, { size: 48, stroke: theme.text2, strokeWidth: 1 }, void 0), jsx(ThemedText.Body, __assign({ fontWeight: 400, fontSize: 16 }, { children: jsx(Trans, { children: "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade." }, void 0) }), void 0)] }), void 0), tokens.map(function (token) { return (jsx(TokenImportCard, { token: token, list: list }, 'import' + token.address)); }), jsx(ButtonPrimary, __assign({ altDisabledStyle: true, "$borderRadius": "20px", padding: "10px 1rem", onClick: function () { + tokens.map(function (token) { return addToken(token); }); + handleCurrencySelect && handleCurrencySelect(tokens[0]); + }, className: ".token-dismiss-button" }, { children: jsx(Trans, { children: "Import" }, void 0) }), void 0)] }), void 0)] }, void 0)); +} +var templateObject_1$j; + +function getColorFromUriPath(uri) { + return __awaiter(this, void 0, void 0, function () { + var formattedPath, palette, detectedHex, AAscore; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + formattedPath = uriToHttp(uri)[0]; + return [4 /*yield*/, Vibrant.from(formattedPath).getPalette()]; + case 1: + palette = _a.sent(); + if (!(palette === null || palette === void 0 ? void 0 : palette.Vibrant)) { + return [2 /*return*/, null]; + } + detectedHex = palette.Vibrant.hex; + AAscore = hex(detectedHex, '#FFF'); + while (AAscore < 3) { + detectedHex = shade(0.005, detectedHex); + AAscore = hex(detectedHex, '#FFF'); + } + return [2 /*return*/, detectedHex]; + } + }); + }); +} +function useListColor(listImageUri) { + var _a = __read(useState('#2172E5'), 2), color = _a[0], setColor = _a[1]; + useLayoutEffect(function () { + var stale = false; + if (listImageUri) { + getColorFromUriPath(listImageUri).then(function (color) { + if (!stale && color !== null) { + setColor(color); + } + }); + } + return function () { + stale = true; + setColor('#2172E5'); + }; + }, [listImageUri]); + return color; +} + +function listVersionLabel(version) { + return "v" + version.major + "." + version.minor + "." + version.patch; +} + +var Wrapper$5 = styled.button(templateObject_1$i || (templateObject_1$i = __makeTemplateObject(["\n border-radius: 20px;\n border: none;\n background: ", ";\n display: flex;\n width: fit-content;\n cursor: pointer;\n outline: none;\n padding: 0.4rem 0.4rem;\n align-items: center;\n"], ["\n border-radius: 20px;\n border: none;\n background: ", ";\n display: flex;\n width: fit-content;\n cursor: pointer;\n outline: none;\n padding: 0.4rem 0.4rem;\n align-items: center;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg1; +}); +var ToggleElement$1 = styled.span(templateObject_2$a || (templateObject_2$a = __makeTemplateObject(["\n border-radius: 50%;\n height: 24px;\n width: 24px;\n background-color: ", ";\n :hover {\n opacity: 0.8;\n }\n"], ["\n border-radius: 50%;\n height: 24px;\n width: 24px;\n background-color: ", ";\n :hover {\n opacity: 0.8;\n }\n"])), function (_a) { + var isActive = _a.isActive, bgColor = _a.bgColor, theme = _a.theme; + return (isActive ? bgColor : theme.bg4); +}); +var StatusText = styled(ThemedText.Main)(templateObject_3$8 || (templateObject_3$8 = __makeTemplateObject(["\n margin: 0 10px;\n width: 24px;\n color: ", ";\n"], ["\n margin: 0 10px;\n width: 24px;\n color: ", ";\n"])), function (_a) { + var theme = _a.theme, isActive = _a.isActive; + return (isActive ? theme.text1 : theme.text3); +}); +function ListToggle(_a) { + var id = _a.id, isActive = _a.isActive, bgColor = _a.bgColor, toggle = _a.toggle; + return (jsxs(Wrapper$5, __assign({ id: id, isActive: isActive, onClick: toggle }, { children: [isActive && (jsx(StatusText, __assign({ fontWeight: "600", margin: "0 6px", isActive: true }, { children: jsx(Trans, { children: "ON" }, void 0) }), void 0)), jsx(ToggleElement$1, { isActive: isActive, bgColor: bgColor }, void 0), !isActive && (jsx(StatusText, __assign({ fontWeight: "600", margin: "0 6px", isActive: false }, { children: jsx(Trans, { children: "OFF" }, void 0) }), void 0))] }), void 0)); +} +var templateObject_1$i, templateObject_2$a, templateObject_3$8; + +var Wrapper$4 = styled(Column)(templateObject_1$h || (templateObject_1$h = __makeTemplateObject(["\n flex: 1;\n overflow-y: hidden;\n"], ["\n flex: 1;\n overflow-y: hidden;\n"]))); +var UnpaddedLinkStyledButton = styled(LinkStyledButton)(templateObject_2$9 || (templateObject_2$9 = __makeTemplateObject(["\n padding: 0;\n font-size: 1rem;\n opacity: ", ";\n"], ["\n padding: 0;\n font-size: 1rem;\n opacity: ", ";\n"])), function (_a) { + var disabled = _a.disabled; + return (disabled ? '0.4' : '1'); +}); +var PopoverContainer = styled.div(templateObject_3$7 || (templateObject_3$7 = __makeTemplateObject(["\n z-index: 100;\n visibility: ", ";\n opacity: ", ";\n transition: visibility 150ms linear, opacity 150ms linear;\n background: ", ";\n border: 1px solid ", ";\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: ", ";\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 z-index: 100;\n visibility: ", ";\n opacity: ", ";\n transition: visibility 150ms linear, opacity 150ms linear;\n background: ", ";\n border: 1px solid ", ";\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: ", ";\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"])), function (props) { return (props.show ? 'visible' : 'hidden'); }, function (props) { return (props.show ? 1 : 0); }, function (_a) { + var theme = _a.theme; + return theme.bg2; +}, function (_a) { + var theme = _a.theme; + return theme.bg3; +}, function (_a) { + var theme = _a.theme; + return theme.text2; +}); +var StyledMenu$1 = styled.div(templateObject_4$6 || (templateObject_4$6 = __makeTemplateObject(["\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n"], ["\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n"]))); +var StyledTitleText = styled.div(templateObject_5$6 || (templateObject_5$6 = __makeTemplateObject(["\n font-size: 16px;\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 600;\n color: ", ";\n"], ["\n font-size: 16px;\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 600;\n color: ", ";\n"])), function (_a) { + var theme = _a.theme, active = _a.active; + return (active ? theme.white : theme.text2); +}); +var StyledListUrlText = styled(ThemedText.Main)(templateObject_6$3 || (templateObject_6$3 = __makeTemplateObject(["\n font-size: 12px;\n color: ", ";\n"], ["\n font-size: 12px;\n color: ", ";\n"])), function (_a) { + var theme = _a.theme, active = _a.active; + return (active ? theme.white : theme.text2); +}); +var RowWrapper = styled(Row$1)(templateObject_7$3 || (templateObject_7$3 = __makeTemplateObject(["\n background-color: ", ";\n opacity: ", ";\n transition: 200ms;\n align-items: center;\n padding: 1rem;\n border-radius: 20px;\n"], ["\n background-color: ", ";\n opacity: ", ";\n transition: 200ms;\n align-items: center;\n padding: 1rem;\n border-radius: 20px;\n"])), function (_a) { + var bgColor = _a.bgColor, active = _a.active, theme = _a.theme; + return (active ? bgColor !== null && bgColor !== void 0 ? bgColor : 'transparent' : theme.bg2); +}, function (_a) { + var hasActiveTokens = _a.hasActiveTokens; + return (hasActiveTokens ? 1 : 0.4); +}); +function listUrlRowHTMLId(listUrl) { + return "list-row-" + listUrl.replace(/\./g, '-'); +} +var ListRow = memo(function ListRow(_a) { + var listUrl = _a.listUrl; + var chainId = useActiveWeb3React().chainId; + var listsByUrl = useAppSelector(function (state) { return state.lists.byUrl; }); + var dispatch = useAppDispatch(); + var _b = listsByUrl[listUrl], list = _b.current, pending = _b.pendingUpdate; + var activeTokensOnThisChain = useMemo(function () { + if (!list || !chainId) { + return 0; + } + return list.tokens.reduce(function (acc, cur) { return (cur.chainId === chainId ? acc + 1 : acc); }, 0); + }, [chainId, list]); + var theme = useTheme(); + var listColor = useListColor(list === null || list === void 0 ? void 0 : list.logoURI); + var isActive = useIsListActive(listUrl); + var _c = __read(useToggle(false), 2), open = _c[0], toggle = _c[1]; + var node = useRef(); + var _d = __read(useState(), 2), referenceElement = _d[0], setReferenceElement = _d[1]; + var _e = __read(useState(), 2), popperElement = _e[0], setPopperElement = _e[1]; + var _f = usePopper(referenceElement, popperElement, { + placement: 'auto', + strategy: 'fixed', + modifiers: [{ name: 'offset', options: { offset: [8, 8] } }], + }), styles = _f.styles, attributes = _f.attributes; + useOnClickOutside(node, open ? toggle : undefined); + var handleAcceptListUpdate = useCallback(function () { + if (!pending) + return; + ReactGA.event({ + category: 'Lists', + action: 'Update List from List Select', + label: listUrl, + }); + dispatch(acceptListUpdate(listUrl)); + }, [dispatch, listUrl, pending]); + var handleRemoveList = useCallback(function () { + ReactGA.event({ + category: 'Lists', + action: 'Start Remove List', + label: listUrl, + }); + if (window.prompt(t(templateObject_8$2 || (templateObject_8$2 = __makeTemplateObject(["Please confirm you would like to remove this list by typing REMOVE"], ["Please confirm you would like to remove this list by typing REMOVE"])))) === "REMOVE") { + ReactGA.event({ + category: 'Lists', + action: 'Confirm Remove List', + label: listUrl, + }); + dispatch(removeList(listUrl)); + } + }, [dispatch, listUrl]); + var handleEnableList = useCallback(function () { + ReactGA.event({ + category: 'Lists', + action: 'Enable List', + label: listUrl, + }); + dispatch(enableList(listUrl)); + }, [dispatch, listUrl]); + var handleDisableList = useCallback(function () { + ReactGA.event({ + category: 'Lists', + action: 'Disable List', + label: listUrl, + }); + dispatch(disableList(listUrl)); + }, [dispatch, listUrl]); + if (!list) + return null; + return (jsxs(RowWrapper, __assign({ active: isActive, hasActiveTokens: activeTokensOnThisChain > 0, bgColor: listColor, id: listUrlRowHTMLId(listUrl) }, { children: [list.logoURI ? (jsx(ListLogo, { size: "40px", style: { marginRight: '1rem' }, logoURI: list.logoURI, alt: list.name + " list logo" }, void 0)) : (jsx("div", { style: { width: '24px', height: '24px', marginRight: '1rem' } }, void 0)), jsxs(Column, __assign({ style: { flex: '1' } }, { children: [jsx(Row$1, { children: jsx(StyledTitleText, __assign({ active: isActive }, { children: list.name }), void 0) }, void 0), jsxs(RowFixed, __assign({ mt: "4px" }, { children: [jsx(StyledListUrlText, __assign({ active: isActive, mr: "6px" }, { children: jsxs(Trans, { children: [activeTokensOnThisChain, " tokens"] }, void 0) }), void 0), jsxs(StyledMenu$1, __assign({ ref: node }, { children: [jsx(ButtonEmpty, __assign({ onClick: toggle, ref: setReferenceElement, padding: "0" }, { children: jsx(Settings, { stroke: isActive ? theme.bg1 : theme.text1, size: 12 }, void 0) }), void 0), open && (jsxs(PopoverContainer, __assign({ show: true, ref: setPopperElement, style: styles.popper }, attributes.popper, { children: [jsx("div", { children: list && listVersionLabel(list.version) }, void 0), jsx(SeparatorDark, {}, void 0), jsx(ExternalLink, __assign({ href: "https://tokenlists.org/token-list?url=" + listUrl }, { children: jsx(Trans, { children: "View list" }, void 0) }), void 0), jsx(UnpaddedLinkStyledButton, __assign({ onClick: handleRemoveList, disabled: Object.keys(listsByUrl).length === 1 }, { children: jsx(Trans, { children: "Remove list" }, void 0) }), void 0), pending && (jsx(UnpaddedLinkStyledButton, __assign({ onClick: handleAcceptListUpdate }, { children: jsx(Trans, { children: "Update list" }, void 0) }), void 0))] }), void 0))] }), void 0)] }), void 0)] }), void 0), jsx(ListToggle, { isActive: isActive, bgColor: listColor, toggle: function () { + isActive ? handleDisableList() : handleEnableList(); + } }, void 0)] }), listUrl)); +}); +var ListContainer = styled.div(templateObject_9$2 || (templateObject_9$2 = __makeTemplateObject(["\n padding: 1rem;\n height: 100%;\n overflow: auto;\n flex: 1;\n"], ["\n padding: 1rem;\n height: 100%;\n overflow: auto;\n flex: 1;\n"]))); +function ManageLists(_a) { + var setModalView = _a.setModalView, setImportList = _a.setImportList, setListUrl = _a.setListUrl; + var chainId = useActiveWeb3React().chainId; + var theme = useTheme(); + var _b = __read(useState(''), 2), listUrlInput = _b[0], setListUrlInput = _b[1]; + var lists = useAllLists(); + var tokenCountByListName = useMemo(function () { + return Object.values(lists).reduce(function (acc, _a) { + var _b; + var list = _a.current; + if (!list) { + return acc; + } + return __assign(__assign({}, acc), (_b = {}, _b[list.name] = list.tokens.reduce(function (count, token) { return (token.chainId === chainId ? count + 1 : count); }, 0), _b)); + }, {}); + }, [chainId, lists]); + // sort by active but only if not visible + var activeListUrls = useActiveListUrls(); + var handleInput = useCallback(function (e) { + setListUrlInput(e.target.value); + }, []); + var fetchList = useFetchListCallback(); + var validUrl = useMemo(function () { + return uriToHttp(listUrlInput).length > 0 || Boolean(parseENSAddress(listUrlInput)); + }, [listUrlInput]); + var sortedLists = useMemo(function () { + var listUrls = Object.keys(lists); + return listUrls + .filter(function (listUrl) { + // only show loaded lists, hide unsupported lists + return Boolean(lists[listUrl].current) && !Boolean(UNSUPPORTED_LIST_URLS.includes(listUrl)); + }) + .sort(function (listUrlA, listUrlB) { + var listA = lists[listUrlA].current; + var listB = lists[listUrlB].current; + // first filter on active lists + if ((activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(listUrlA)) && !(activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(listUrlB))) { + return -1; + } + if (!(activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(listUrlA)) && (activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(listUrlB))) { + return 1; + } + if (listA && listB) { + if (tokenCountByListName[listA.name] > tokenCountByListName[listB.name]) { + return -1; + } + if (tokenCountByListName[listA.name] < tokenCountByListName[listB.name]) { + return 1; + } + return listA.name.toLowerCase() < listB.name.toLowerCase() + ? -1 + : listA.name.toLowerCase() === listB.name.toLowerCase() + ? 0 + : 1; + } + if (listA) + return -1; + if (listB) + return 1; + return 0; + }); + }, [lists, activeListUrls, tokenCountByListName]); + // temporary fetched list for import flow + var _c = __read(useState(), 2), tempList = _c[0], setTempList = _c[1]; + var _d = __read(useState(), 2), addError = _d[0], setAddError = _d[1]; + useEffect(function () { + function fetchTempList() { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + fetchList(listUrlInput, false) + .then(function (list) { return setTempList(list); }) + .catch(function () { return setAddError(t(templateObject_10$2 || (templateObject_10$2 = __makeTemplateObject(["Error importing list"], ["Error importing list"])))); }); + return [2 /*return*/]; + }); + }); + } + // if valid url, fetch details for card + if (validUrl) { + fetchTempList(); + } + else { + setTempList(undefined); + listUrlInput !== '' && setAddError(t(templateObject_11$2 || (templateObject_11$2 = __makeTemplateObject(["Enter valid list location"], ["Enter valid list location"])))); + } + // reset error + if (listUrlInput === '') { + setAddError(undefined); + } + }, [fetchList, listUrlInput, validUrl]); + // check if list is already imported + var isImported = Object.keys(lists).includes(listUrlInput); + // set list values and have parent modal switch to import list view + var handleImport = useCallback(function () { + if (!tempList) + return; + setImportList(tempList); + setModalView(CurrencyModalView.importList); + setListUrl(listUrlInput); + }, [listUrlInput, setImportList, setListUrl, setModalView, tempList]); + return (jsxs(Wrapper$4, { children: [jsxs(PaddedColumn, __assign({ gap: "14px" }, { children: [jsx(Row$1, { children: jsx(SearchInput, { type: "text", id: "list-add-input", placeholder: t(templateObject_12$2 || (templateObject_12$2 = __makeTemplateObject(["https:// or ipfs:// or ENS name"], ["https:// or ipfs:// or ENS name"]))), value: listUrlInput, onChange: handleInput }, void 0) }, void 0), addError ? (jsx(ThemedText.Error, __assign({ title: addError, style: { textOverflow: 'ellipsis', overflow: 'hidden' }, error: true }, { children: addError }), void 0)) : null] }), void 0), tempList && (jsx(PaddedColumn, __assign({ style: { paddingTop: 0 } }, { children: jsx(Card, __assign({ backgroundColor: theme.bg2, padding: "12px 20px" }, { children: jsxs(RowBetween, { children: [jsxs(RowFixed, { children: [tempList.logoURI && jsx(ListLogo, { logoURI: tempList.logoURI, size: "40px" }, void 0), jsxs(AutoColumn, __assign({ gap: "4px", style: { marginLeft: '20px' } }, { children: [jsx(ThemedText.Body, __assign({ fontWeight: 600 }, { children: tempList.name }), void 0), jsx(ThemedText.Main, __assign({ fontSize: '12px' }, { children: jsxs(Trans, { children: [tempList.tokens.length, " tokens"] }, void 0) }), void 0)] }), void 0)] }, void 0), isImported ? (jsxs(RowFixed, { children: [jsx(IconWrapper$4, __assign({ stroke: theme.text2, size: "16px", marginRight: '10px' }, { children: jsx(CheckCircle, {}, void 0) }), void 0), jsx(ThemedText.Body, __assign({ color: theme.text2 }, { children: jsx(Trans, { children: "Loaded" }, void 0) }), void 0)] }, void 0)) : (jsx(ButtonPrimary, __assign({ style: { fontSize: '14px' }, padding: "6px 8px", width: "fit-content", onClick: handleImport }, { children: jsx(Trans, { children: "Import" }, void 0) }), void 0))] }, void 0) }), void 0) }), void 0)), jsx(Separator, {}, void 0), jsx(ListContainer, { children: jsx(AutoColumn, __assign({ gap: "md" }, { children: sortedLists.map(function (listUrl) { return (jsx(ListRow, { listUrl: listUrl }, listUrl)); }) }), void 0) }, void 0)] }, void 0)); +} +var templateObject_1$h, templateObject_2$9, templateObject_3$7, templateObject_4$6, templateObject_5$6, templateObject_6$3, templateObject_7$3, templateObject_8$2, templateObject_9$2, templateObject_10$2, templateObject_11$2, templateObject_12$2; + +var Wrapper$3 = styled.div(templateObject_1$g || (templateObject_1$g = __makeTemplateObject(["\n width: 100%;\n height: calc(100% - 60px);\n position: relative;\n padding-bottom: 80px;\n"], ["\n width: 100%;\n height: calc(100% - 60px);\n position: relative;\n padding-bottom: 80px;\n"]))); +var Footer = styled.div(templateObject_2$8 || (templateObject_2$8 = __makeTemplateObject(["\n position: absolute;\n bottom: 0;\n width: 100%;\n border-radius: 20px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n border-top: 1px solid ", ";\n padding: 20px;\n text-align: center;\n"], ["\n position: absolute;\n bottom: 0;\n width: 100%;\n border-radius: 20px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n border-top: 1px solid ", ";\n padding: 20px;\n text-align: center;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg3; +}); +function ManageTokens(_a) { + var setModalView = _a.setModalView, setImportToken = _a.setImportToken; + var chainId = useActiveWeb3React().chainId; + var _b = __read(useState(''), 2), searchQuery = _b[0], setSearchQuery = _b[1]; + var theme = useTheme(); + // manage focus on modal show + var inputRef = useRef(); + var handleInput = useCallback(function (event) { + var input = event.target.value; + var checksummedInput = isAddress(input); + setSearchQuery(checksummedInput || input); + }, []); + // if they input an address, use it + var isAddressSearch = isAddress(searchQuery); + var searchToken = useToken(searchQuery); + // all tokens for local lisr + var userAddedTokens = useUserAddedTokens(); + var removeToken = useRemoveUserAddedToken(); + var handleRemoveAll = useCallback(function () { + if (chainId && userAddedTokens) { + userAddedTokens.map(function (token) { + return removeToken(chainId, token.address); + }); + } + }, [removeToken, userAddedTokens, chainId]); + var tokenList = useMemo(function () { + return (chainId && + userAddedTokens.map(function (token) { return (jsxs(RowBetween, __assign({ width: "100%" }, { children: [jsxs(RowFixed, { children: [jsx(CurrencyLogo, { currency: token, size: '20px' }, void 0), jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, token.address, ExplorerDataType.ADDRESS) }, { children: jsx(ThemedText.Main, __assign({ ml: '10px', fontWeight: 600 }, { children: token.symbol }), void 0) }), void 0)] }, void 0), jsxs(RowFixed, { children: [jsx(TrashIcon, { onClick: function () { return removeToken(chainId, token.address); } }, void 0), jsx(ExternalLinkIcon, { href: getExplorerLink(chainId, token.address, ExplorerDataType.ADDRESS) }, void 0)] }, void 0)] }), token.address)); })); + }, [userAddedTokens, chainId, removeToken]); + return (jsxs(Wrapper$3, { children: [jsxs(Column, __assign({ style: { width: '100%', height: '100%', flex: '1 1' } }, { children: [jsxs(PaddedColumn, __assign({ gap: "14px" }, { children: [jsx(Row$1, { children: jsx(SearchInput, { type: "text", id: "token-search-input", placeholder: '0x0000', value: searchQuery, autoComplete: "off", ref: inputRef, onChange: handleInput }, void 0) }, void 0), searchQuery !== '' && !isAddressSearch && (jsx(ThemedText.Error, __assign({ error: true }, { children: jsx(Trans, { children: "Enter valid token address" }, void 0) }), void 0)), searchToken && (jsx(Card, __assign({ backgroundColor: theme.bg2, padding: "10px 0" }, { children: jsx(ImportRow, { token: searchToken, showImportView: function () { return setModalView(CurrencyModalView.importToken); }, setImportToken: setImportToken, style: { height: 'fit-content' } }, void 0) }), void 0))] }), void 0), jsx(Separator, {}, void 0), jsxs(PaddedColumn, __assign({ gap: "lg", style: { overflow: 'auto', marginBottom: '10px' } }, { children: [jsxs(RowBetween, { children: [jsx(ThemedText.Main, __assign({ fontWeight: 600 }, { children: jsxs(Trans, { children: [userAddedTokens === null || userAddedTokens === void 0 ? void 0 : userAddedTokens.length, " Custom Tokens"] }, void 0) }), void 0), userAddedTokens.length > 0 && (jsx(ButtonText, __assign({ onClick: handleRemoveAll }, { children: jsx(ThemedText.Blue, { children: jsx(Trans, { children: "Clear all" }, void 0) }, void 0) }), void 0))] }, void 0), tokenList] }), void 0)] }), void 0), jsx(Footer, { children: jsx(ThemedText.DarkGray, { children: jsx(Trans, { children: "Tip: Custom tokens are stored locally in your browser" }, void 0) }, void 0) }, void 0)] }, void 0)); +} +var templateObject_1$g, templateObject_2$8; + +var Wrapper$2 = styled.div(templateObject_1$f || (templateObject_1$f = __makeTemplateObject(["\n width: 100%;\n position: relative;\n display: flex;\n flex-flow: column;\n"], ["\n width: 100%;\n position: relative;\n display: flex;\n flex-flow: column;\n"]))); +var ToggleWrapper = styled(RowBetween)(templateObject_2$7 || (templateObject_2$7 = __makeTemplateObject(["\n background-color: ", ";\n border-radius: 12px;\n padding: 6px;\n"], ["\n background-color: ", ";\n border-radius: 12px;\n padding: 6px;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg3; +}); +var ToggleOption = styled.div(templateObject_3$6 || (templateObject_3$6 = __makeTemplateObject(["\n width: 48%;\n padding: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 12px;\n font-weight: 600;\n background-color: ", ";\n color: ", ";\n user-select: none;\n\n :hover {\n cursor: pointer;\n opacity: 0.7;\n }\n"], ["\n width: 48%;\n padding: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 12px;\n font-weight: 600;\n background-color: ", ";\n color: ", ";\n user-select: none;\n\n :hover {\n cursor: pointer;\n opacity: 0.7;\n }\n"])), function (_a) { + var theme = _a.theme, active = _a.active; + return (active ? theme.bg1 : theme.bg3); +}, function (_a) { + var theme = _a.theme, active = _a.active; + return (active ? theme.text1 : theme.text2); +}); +function Manage(_a) { + var onDismiss = _a.onDismiss, setModalView = _a.setModalView, setImportList = _a.setImportList, setImportToken = _a.setImportToken, setListUrl = _a.setListUrl; + // toggle between tokens and lists + var _b = __read(useState(true), 2), showLists = _b[0], setShowLists = _b[1]; + return (jsxs(Wrapper$2, { children: [jsx(PaddedColumn, { children: jsxs(RowBetween, { children: [jsx(ArrowLeft, { style: { cursor: 'pointer' }, onClick: function () { return setModalView(CurrencyModalView.search); } }, void 0), jsx(Text$1, __assign({ fontWeight: 500, fontSize: 20 }, { children: jsx(Trans, { children: "Manage" }, void 0) }), void 0), jsx(CloseIcon$2, { onClick: onDismiss }, void 0)] }, void 0) }, void 0), jsx(Separator, {}, void 0), jsx(PaddedColumn, __assign({ style: { paddingBottom: 0 } }, { children: jsxs(ToggleWrapper, { children: [jsx(ToggleOption, __assign({ onClick: function () { return setShowLists(!showLists); }, active: showLists }, { children: jsx(Trans, { children: "Lists" }, void 0) }), void 0), jsx(ToggleOption, __assign({ onClick: function () { return setShowLists(!showLists); }, active: !showLists }, { children: jsx(Trans, { children: "Tokens" }, void 0) }), void 0)] }, void 0) }), void 0), showLists ? (jsx(ManageLists, { setModalView: setModalView, setImportList: setImportList, setListUrl: setListUrl }, void 0)) : (jsx(ManageTokens, { setModalView: setModalView, setImportToken: setImportToken }, void 0))] }, void 0)); +} +var templateObject_1$f, templateObject_2$7, templateObject_3$6; + +var CurrencyModalView; +(function (CurrencyModalView) { + CurrencyModalView[CurrencyModalView["search"] = 0] = "search"; + CurrencyModalView[CurrencyModalView["manage"] = 1] = "manage"; + CurrencyModalView[CurrencyModalView["importToken"] = 2] = "importToken"; + CurrencyModalView[CurrencyModalView["importList"] = 3] = "importList"; +})(CurrencyModalView || (CurrencyModalView = {})); +function CurrencySearchModal(_a) { + var isOpen = _a.isOpen, onDismiss = _a.onDismiss, onCurrencySelect = _a.onCurrencySelect, selectedCurrency = _a.selectedCurrency, otherSelectedCurrency = _a.otherSelectedCurrency, _b = _a.showCommonBases, showCommonBases = _b === void 0 ? false : _b, _c = _a.showCurrencyAmount, showCurrencyAmount = _c === void 0 ? true : _c, _d = _a.disableNonToken, disableNonToken = _d === void 0 ? false : _d; + var _e = __read(useState(CurrencyModalView.manage), 2), modalView = _e[0], setModalView = _e[1]; + var lastOpen = useLast(isOpen); + useEffect(function () { + if (isOpen && !lastOpen) { + setModalView(CurrencyModalView.search); + } + }, [isOpen, lastOpen]); + var handleCurrencySelect = useCallback(function (currency) { + onCurrencySelect(currency); + onDismiss(); + }, [onDismiss, onCurrencySelect]); + // for token import view + var prevView = usePrevious(modalView); + // used for import token flow + var _f = __read(useState(), 2), importToken = _f[0], setImportToken = _f[1]; + // used for import list + var _g = __read(useState(), 2), importList = _g[0], setImportList = _g[1]; + var _h = __read(useState(), 2), listURL = _h[0], setListUrl = _h[1]; + var showImportView = useCallback(function () { return setModalView(CurrencyModalView.importToken); }, [setModalView]); + var showManageView = useCallback(function () { return setModalView(CurrencyModalView.manage); }, [setModalView]); + var handleBackImport = useCallback(function () { return setModalView(prevView && prevView !== CurrencyModalView.importToken ? prevView : CurrencyModalView.search); }, [setModalView, prevView]); + // change min height if not searching + var minHeight = modalView === CurrencyModalView.importToken || modalView === CurrencyModalView.importList ? 40 : 80; + var content = null; + switch (modalView) { + case CurrencyModalView.search: + content = (jsx(CurrencySearch, { isOpen: isOpen, onDismiss: onDismiss, onCurrencySelect: handleCurrencySelect, selectedCurrency: selectedCurrency, otherSelectedCurrency: otherSelectedCurrency, showCommonBases: showCommonBases, showCurrencyAmount: showCurrencyAmount, disableNonToken: disableNonToken, showImportView: showImportView, setImportToken: setImportToken, showManageView: showManageView }, void 0)); + break; + case CurrencyModalView.importToken: + if (importToken) { + content = (jsx(ImportToken, { tokens: [importToken], onDismiss: onDismiss, list: importToken instanceof WrappedTokenInfo ? importToken.list : undefined, onBack: handleBackImport, handleCurrencySelect: handleCurrencySelect }, void 0)); + } + break; + case CurrencyModalView.importList: + if (importList && listURL) { + content = jsx(ImportList, { list: importList, listURL: listURL, onDismiss: onDismiss, setModalView: setModalView }, void 0); + } + break; + case CurrencyModalView.manage: + content = (jsx(Manage, { onDismiss: onDismiss, setModalView: setModalView, setImportToken: setImportToken, setImportList: setImportList, setListUrl: setListUrl }, void 0)); + break; + } + return (jsx(Modal, __assign({ isOpen: isOpen, onDismiss: onDismiss, maxHeight: 80, minHeight: minHeight }, { children: content }), void 0)); +} + +var TextWrapper = styled.span(templateObject_1$e || (templateObject_1$e = __makeTemplateObject(["\n margin-left: ", ";\n color: ", ";\n font-size: ", ";\n\n @media screen and (max-width: 600px) {\n font-size: ", ";\n }\n"], ["\n margin-left: ", ";\n color: ", ";\n font-size: ", ";\n\n @media screen and (max-width: 600px) {\n font-size: ", ";\n }\n"])), function (_a) { + var margin = _a.margin; + return margin && '4px'; +}, function (_a) { + var theme = _a.theme, link = _a.link, textColor = _a.textColor; + return (link ? theme.blue1 : textColor !== null && textColor !== void 0 ? textColor : theme.text1); +}, function (_a) { + var fontSize = _a.fontSize; + return fontSize !== null && fontSize !== void 0 ? fontSize : 'inherit'; +}, function (_a) { + var adjustSize = _a.adjustSize; + return adjustSize && '12px'; +}); +var HoverInlineText = function (_a) { + var text = _a.text, _b = _a.maxCharacters, maxCharacters = _b === void 0 ? 20 : _b, _c = _a.margin, margin = _c === void 0 ? false : _c, _d = _a.adjustSize, adjustSize = _d === void 0 ? false : _d, fontSize = _a.fontSize, textColor = _a.textColor, link = _a.link, rest = __rest(_a, ["text", "maxCharacters", "margin", "adjustSize", "fontSize", "textColor", "link"]); + var _e = __read(useState(false), 2), showHover = _e[0], setShowHover = _e[1]; + if (!text) { + return jsx("span", {}, void 0); + } + if (text.length > maxCharacters) { + return (jsx(Tooltip, __assign({ text: text, show: showHover }, { children: jsx(TextWrapper, __assign({ onMouseEnter: function () { return setShowHover(true); }, onMouseLeave: function () { return setShowHover(false); }, margin: margin, adjustSize: adjustSize, textColor: textColor, link: link, fontSize: fontSize }, rest, { children: ' ' + text.slice(0, maxCharacters - 1) + '...' }), void 0) }), void 0)); + } + return (jsx(TextWrapper, __assign({ margin: margin, adjustSize: adjustSize, link: link, fontSize: fontSize, textColor: textColor }, rest, { children: text }), void 0)); +}; +var templateObject_1$e; + +function FiatValue(_a) { + var fiatValue = _a.fiatValue, priceImpact = _a.priceImpact; + var theme = useTheme(); + var priceImpactColor = useMemo(function () { + if (!priceImpact) + return undefined; + if (priceImpact.lessThan('0')) + return theme.green1; + var severity = warningSeverity(priceImpact); + if (severity < 1) + return theme.text3; + if (severity < 3) + return theme.yellow1; + return theme.red1; + }, [priceImpact, theme.green1, theme.red1, theme.text3, theme.yellow1]); + return (jsxs(ThemedText.Body, __assign({ fontSize: 14, color: fiatValue ? theme.text3 : theme.text4 }, { children: [fiatValue ? (jsxs(Trans, { children: ["$", jsx(HoverInlineText, { text: fiatValue === null || fiatValue === void 0 ? void 0 : fiatValue.toSignificant(6, { groupSeparator: ',' }), textColor: fiatValue ? theme.text3 : theme.text4 }, void 0)] }, void 0)) : (''), priceImpact ? (jsxs("span", __assign({ style: { color: priceImpactColor } }, { children: [' ', jsxs(MouseoverTooltip, __assign({ text: t(templateObject_1$d || (templateObject_1$d = __makeTemplateObject(["The estimated difference between the USD values of input and output amounts."], ["The estimated difference between the USD values of input and output amounts."]))) }, { children: ["(", jsxs(Trans, { children: [priceImpact.multiply(-1).toSignificant(3), "%"] }, void 0), ")"] }), void 0)] }), void 0)) : null] }), void 0)); +} +var templateObject_1$d; + +var InputPanel = styled.div(templateObject_1$c || (templateObject_1$c = __makeTemplateObject(["\n ", "\n position: relative;\n border-radius: ", ";\n background-color: ", ";\n z-index: 1;\n width: ", ";\n transition: height 1s ease;\n will-change: height;\n"], ["\n ", "\n position: relative;\n border-radius: ", ";\n background-color: ", ";\n z-index: 1;\n width: ", ";\n transition: height 1s ease;\n will-change: height;\n"])), function (_a) { + var theme = _a.theme; + return theme.flexColumnNoWrap; +}, function (_a) { + var hideInput = _a.hideInput; + return (hideInput ? '16px' : '20px'); +}, function (_a) { + var theme = _a.theme, hideInput = _a.hideInput; + return (hideInput ? 'transparent' : theme.bg2); +}, function (_a) { + var hideInput = _a.hideInput; + return (hideInput ? '100%' : 'initial'); +}); +var FixedContainer = styled.div(templateObject_2$6 || (templateObject_2$6 = __makeTemplateObject(["\n width: 100%;\n height: 100%;\n position: absolute;\n border-radius: 20px;\n background-color: ", ";\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 2;\n"], ["\n width: 100%;\n height: 100%;\n position: absolute;\n border-radius: 20px;\n background-color: ", ";\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 2;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}); +var Container$1 = styled.div(templateObject_3$5 || (templateObject_3$5 = __makeTemplateObject(["\n border-radius: ", ";\n border: 1px solid ", ";\n background-color: ", ";\n width: ", ";\n :focus,\n :hover {\n border: 1px solid ", ";\n }\n"], ["\n border-radius: ", ";\n border: 1px solid ", ";\n background-color: ", ";\n width: ", ";\n :focus,\n :hover {\n border: 1px solid ", ";\n }\n"])), function (_a) { + var hideInput = _a.hideInput; + return (hideInput ? '16px' : '20px'); +}, function (_a) { + var theme = _a.theme; + return theme.bg0; +}, function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var hideInput = _a.hideInput; + return (hideInput ? '100%' : 'initial'); +}, function (_a) { + var theme = _a.theme, hideInput = _a.hideInput; + return (hideInput ? ' transparent' : theme.bg3); +}); +var CurrencySelect = styled(ButtonGray)(templateObject_4$5 || (templateObject_4$5 = __makeTemplateObject(["\n align-items: center;\n background-color: ", ";\n box-shadow: ", ";\n box-shadow: 0px 6px 10px rgba(0, 0, 0, 0.075);\n color: ", ";\n cursor: pointer;\n border-radius: 16px;\n outline: none;\n user-select: none;\n border: none;\n font-size: 24px;\n font-weight: 500;\n height: ", ";\n width: ", ";\n padding: 0 8px;\n justify-content: space-between;\n margin-left: ", ";\n :focus,\n :hover {\n background-color: ", ";\n }\n visibility: ", ";\n"], ["\n align-items: center;\n background-color: ", ";\n box-shadow: ", ";\n box-shadow: 0px 6px 10px rgba(0, 0, 0, 0.075);\n color: ", ";\n cursor: pointer;\n border-radius: 16px;\n outline: none;\n user-select: none;\n border: none;\n font-size: 24px;\n font-weight: 500;\n height: ", ";\n width: ", ";\n padding: 0 8px;\n justify-content: space-between;\n margin-left: ", ";\n :focus,\n :hover {\n background-color: ", ";\n }\n visibility: ", ";\n"])), function (_a) { + var selected = _a.selected, theme = _a.theme; + return (selected ? theme.bg2 : theme.primary1); +}, function (_a) { + var selected = _a.selected; + return (selected ? 'none' : '0px 6px 10px rgba(0, 0, 0, 0.075)'); +}, function (_a) { + var selected = _a.selected, theme = _a.theme; + return (selected ? theme.text1 : theme.white); +}, function (_a) { + var hideInput = _a.hideInput; + return (hideInput ? '2.8rem' : '2.4rem'); +}, function (_a) { + var hideInput = _a.hideInput; + return (hideInput ? '100%' : 'initial'); +}, function (_a) { + var hideInput = _a.hideInput; + return (hideInput ? '0' : '12px'); +}, function (_a) { + var selected = _a.selected, theme = _a.theme; + return (selected ? theme.bg3 : darken(0.05, theme.primary1)); +}, function (_a) { + var visible = _a.visible; + return (visible ? 'visible' : 'hidden'); +}); +var InputRow = styled.div(templateObject_5$5 || (templateObject_5$5 = __makeTemplateObject(["\n ", "\n align-items: center;\n justify-content: space-between;\n padding: ", ";\n"], ["\n ", "\n align-items: center;\n justify-content: space-between;\n padding: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.flexRowNoWrap; +}, function (_a) { + var selected = _a.selected; + return (selected ? ' 1rem 1rem 0.75rem 1rem' : '1rem 1rem 1rem 1rem'); +}); +var LabelRow = styled.div(templateObject_6$2 || (templateObject_6$2 = __makeTemplateObject(["\n ", "\n align-items: center;\n color: ", ";\n font-size: 0.75rem;\n line-height: 1rem;\n padding: 0 1rem 1rem;\n span:hover {\n cursor: pointer;\n color: ", ";\n }\n"], ["\n ", "\n align-items: center;\n color: ", ";\n font-size: 0.75rem;\n line-height: 1rem;\n padding: 0 1rem 1rem;\n span:hover {\n cursor: pointer;\n color: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.flexRowNoWrap; +}, function (_a) { + var theme = _a.theme; + return theme.text1; +}, function (_a) { + var theme = _a.theme; + return darken(0.2, theme.text2); +}); +var FiatRow = styled(LabelRow)(templateObject_7$2 || (templateObject_7$2 = __makeTemplateObject(["\n justify-content: flex-end;\n"], ["\n justify-content: flex-end;\n"]))); +var Aligner = styled.span(templateObject_8$1 || (templateObject_8$1 = __makeTemplateObject(["\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n"], ["\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n"]))); +var StyledDropDown = styled(SvgDropdown)(templateObject_9$1 || (templateObject_9$1 = __makeTemplateObject(["\n margin: 0 0.25rem 0 0.35rem;\n height: 35%;\n\n path {\n stroke: ", ";\n stroke-width: 1.5px;\n }\n"], ["\n margin: 0 0.25rem 0 0.35rem;\n height: 35%;\n\n path {\n stroke: ", ";\n stroke-width: 1.5px;\n }\n"])), function (_a) { + var selected = _a.selected, theme = _a.theme; + return (selected ? theme.text1 : theme.white); +}); +var StyledTokenName = styled.span(templateObject_10$1 || (templateObject_10$1 = __makeTemplateObject(["\n ", "\n font-size: ", ";\n"], ["\n ", "\n font-size: ", ";\n"])), function (_a) { + var active = _a.active; + return (active ? ' margin: 0 0.25rem 0 0.25rem;' : ' margin: 0 0.25rem 0 0.25rem;'); +}, function (_a) { + var active = _a.active; + return (active ? '18px' : '18px'); +}); +var StyledBalanceMax = styled.button(templateObject_11$1 || (templateObject_11$1 = __makeTemplateObject(["\n background-color: transparent;\n background-color: ", ";\n border: none;\n border-radius: 12px;\n color: ", ";\n cursor: pointer;\n font-size: 11px;\n font-weight: 500;\n margin-left: 0.25rem;\n opacity: ", ";\n padding: 4px 6px;\n pointer-events: ", ";\n\n :hover {\n opacity: ", ";\n }\n\n :focus {\n outline: none;\n }\n"], ["\n background-color: transparent;\n background-color: ", ";\n border: none;\n border-radius: 12px;\n color: ", ";\n cursor: pointer;\n font-size: 11px;\n font-weight: 500;\n margin-left: 0.25rem;\n opacity: ", ";\n padding: 4px 6px;\n pointer-events: ", ";\n\n :hover {\n opacity: ", ";\n }\n\n :focus {\n outline: none;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.primary5; +}, function (_a) { + var theme = _a.theme; + return theme.primary1; +}, function (_a) { + var disabled = _a.disabled; + return (!disabled ? 1 : 0.4); +}, function (_a) { + var disabled = _a.disabled; + return (!disabled ? 'initial' : 'none'); +}, function (_a) { + var disabled = _a.disabled; + return (!disabled ? 0.8 : 0.4); +}); +var StyledNumericalInput = styled(Input$1)(templateObject_12$1 || (templateObject_12$1 = __makeTemplateObject(["\n ", ";\n text-align: left;\n"], ["\n ", ";\n text-align: left;\n"])), loadingOpacityMixin); +function CurrencyInputPanel(_a) { + var value = _a.value, onUserInput = _a.onUserInput, onMax = _a.onMax, showMaxButton = _a.showMaxButton, onCurrencySelect = _a.onCurrencySelect, currency = _a.currency, otherCurrency = _a.otherCurrency, id = _a.id, showCommonBases = _a.showCommonBases, showCurrencyAmount = _a.showCurrencyAmount, disableNonToken = _a.disableNonToken, renderBalance = _a.renderBalance, fiatValue = _a.fiatValue, priceImpact = _a.priceImpact, _b = _a.hideBalance, hideBalance = _b === void 0 ? false : _b, _c = _a.pair, pair = _c === void 0 ? null : _c, // used for double token logo + _d = _a.hideInput, // used for double token logo + hideInput = _d === void 0 ? false : _d, _e = _a.locked, locked = _e === void 0 ? false : _e, _f = _a.loading, loading = _f === void 0 ? false : _f, rest = __rest(_a, ["value", "onUserInput", "onMax", "showMaxButton", "onCurrencySelect", "currency", "otherCurrency", "id", "showCommonBases", "showCurrencyAmount", "disableNonToken", "renderBalance", "fiatValue", "priceImpact", "hideBalance", "pair", "hideInput", "locked", "loading"]); + var _g = __read(useState(false), 2), modalOpen = _g[0], setModalOpen = _g[1]; + var account = useActiveWeb3React().account; + var selectedCurrencyBalance = useCurrencyBalance(account !== null && account !== void 0 ? account : undefined, currency !== null && currency !== void 0 ? currency : undefined); + var theme = useTheme(); + var handleDismissSearch = useCallback(function () { + setModalOpen(false); + }, [setModalOpen]); + return (jsxs(InputPanel, __assign({ id: id, hideInput: hideInput }, rest, { children: [locked && (jsx(FixedContainer, { children: jsxs(AutoColumn, __assign({ gap: "sm", justify: "center" }, { children: [jsx(Lock, {}, void 0), jsx(ThemedText.Label, __assign({ fontSize: "12px", textAlign: "center", padding: "0 12px" }, { children: jsx(Trans, { children: "The market price is outside your specified price range. Single-asset deposit only." }, void 0) }), void 0)] }), void 0) }, void 0)), jsxs(Container$1, __assign({ hideInput: hideInput }, { children: [jsxs(InputRow, __assign({ style: hideInput ? { padding: '0', borderRadius: '8px' } : {}, selected: !onCurrencySelect }, { children: [!hideInput && (jsx(StyledNumericalInput, { className: "token-amount-input", value: value, onUserInput: onUserInput, "$loading": loading }, void 0)), jsx(CurrencySelect, __assign({ visible: currency !== undefined, selected: !!currency, hideInput: hideInput, className: "open-currency-select-button", onClick: function () { + if (onCurrencySelect) { + setModalOpen(true); + } + } }, { children: jsxs(Aligner, { children: [jsxs(RowFixed, { children: [pair ? (jsx("span", __assign({ style: { marginRight: '0.5rem' } }, { children: jsx(DoubleCurrencyLogo, { currency0: pair.token0, currency1: pair.token1, size: 24, margin: true }, void 0) }), void 0)) : currency ? (jsx(CurrencyLogo, { style: { marginRight: '0.5rem' }, currency: currency, size: '24px' }, void 0)) : null, pair ? (jsxs(StyledTokenName, __assign({ className: "pair-name-container" }, { children: [pair === null || pair === void 0 ? void 0 : pair.token0.symbol, ":", pair === null || pair === void 0 ? void 0 : pair.token1.symbol] }), void 0)) : (jsx(StyledTokenName, __assign({ className: "token-symbol-container", active: Boolean(currency && currency.symbol) }, { children: (currency && currency.symbol && currency.symbol.length > 20 + ? currency.symbol.slice(0, 4) + + '...' + + currency.symbol.slice(currency.symbol.length - 5, currency.symbol.length) + : currency === null || currency === void 0 ? void 0 : currency.symbol) || jsx(Trans, { children: "Select a token" }, void 0) }), void 0))] }, void 0), onCurrencySelect && jsx(StyledDropDown, { selected: !!currency }, void 0)] }, void 0) }), void 0)] }), void 0), !hideInput && !hideBalance && currency && (jsx(FiatRow, { children: jsxs(RowBetween, { children: [jsx(LoadingOpacityContainer, __assign({ "$loading": loading }, { children: jsx(FiatValue, { fiatValue: fiatValue, priceImpact: priceImpact }, void 0) }), void 0), account ? (jsxs(RowFixed, __assign({ style: { height: '17px' } }, { children: [jsx(ThemedText.Body, __assign({ onClick: onMax, color: theme.text3, fontWeight: 500, fontSize: 14, style: { display: 'inline', cursor: 'pointer' } }, { children: !hideBalance && currency && selectedCurrencyBalance ? (renderBalance ? (renderBalance(selectedCurrencyBalance)) : (jsxs(Trans, { children: ["Balance: ", formatCurrencyAmount(selectedCurrencyBalance, 4)] }, void 0))) : null }), void 0), showMaxButton && selectedCurrencyBalance ? (jsx(StyledBalanceMax, __assign({ onClick: onMax }, { children: jsx(Trans, { children: "MAX" }, void 0) }), void 0)) : null] }), void 0)) : (jsx("span", {}, void 0))] }, void 0) }, void 0))] }), void 0), onCurrencySelect && (jsx(CurrencySearchModal, { isOpen: modalOpen, onDismiss: handleDismissSearch, onCurrencySelect: onCurrencySelect, selectedCurrency: currency, otherSelectedCurrency: otherCurrency, showCommonBases: showCommonBases, showCurrencyAmount: showCurrencyAmount, disableNonToken: disableNonToken }, void 0))] }), void 0)); +} +var templateObject_1$c, templateObject_2$6, templateObject_3$5, templateObject_4$5, templateObject_5$5, templateObject_6$2, templateObject_7$2, templateObject_8$1, templateObject_9$1, templateObject_10$1, templateObject_11$1, templateObject_12$1; + +/** + * Given the price impact, get user confirmation. + * + * @param priceImpactWithoutFee price impact of the trade without the fee. + */ +function confirmPriceImpactWithoutFee(priceImpactWithoutFee) { + if (!priceImpactWithoutFee.lessThan(PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN)) { + return (window.prompt("This swap has a price impact of at least " + PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN.toFixed(0) + "%. Please type the word \"confirm\" to continue with this swap.") === 'confirm'); + } + else if (!priceImpactWithoutFee.lessThan(ALLOWED_PRICE_IMPACT_HIGH)) { + return window.confirm("This swap has a price impact of at least " + ALLOWED_PRICE_IMPACT_HIGH.toFixed(0) + "%. Please confirm that you would like to continue with this swap."); + } + return true; +} + +/** + * Returns true if the trade requires a confirmation of details before we can submit it + * @param args either a pair of V2 trades or a pair of V3 trades + */ +function tradeMeaningfullyDiffers() { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var _a = __read(args, 2), tradeA = _a[0], tradeB = _a[1]; + return (tradeA.tradeType !== tradeB.tradeType || + !tradeA.inputAmount.currency.equals(tradeB.inputAmount.currency) || + !tradeA.inputAmount.equalTo(tradeB.inputAmount) || + !tradeA.outputAmount.currency.equals(tradeB.outputAmount.currency) || + !tradeA.outputAmount.equalTo(tradeB.outputAmount)); +} + +function useAddTokenToMetamask(currencyToAdd) { + var library = useActiveWeb3React().library; + var token = currencyToAdd === null || currencyToAdd === void 0 ? void 0 : currencyToAdd.wrapped; + var _a = __read(useState(), 2), success = _a[0], setSuccess = _a[1]; + var logoURL = useCurrencyLogoURIs(token)[0]; + var addToken = useCallback(function () { + if (library && library.provider.isMetaMask && library.provider.request && token) { + library.provider + .request({ + method: 'wallet_watchAsset', + params: { + //@ts-ignore // need this for incorrect ethers provider type + type: 'ERC20', + options: { + address: token.address, + symbol: token.symbol, + decimals: token.decimals, + image: logoURL, + }, + }, + }) + .then(function (success) { + setSuccess(success); + }) + .catch(function () { return setSuccess(false); }); + } + else { + setSuccess(false); + } + }, [library, logoURL, token]); + return { addToken: addToken, success: success }; +} + +var Wrapper$1 = styled.div(templateObject_1$b || (templateObject_1$b = __makeTemplateObject(["\n height: 90px;\n width: 90px;\n"], ["\n height: 90px;\n width: 90px;\n"]))); +var dash = keyframes(templateObject_2$5 || (templateObject_2$5 = __makeTemplateObject(["\n 0% {\n stroke-dashoffset: 1000;\n }\n 100% {\n stroke-dashoffset: 0;\n }\n"], ["\n 0% {\n stroke-dashoffset: 1000;\n }\n 100% {\n stroke-dashoffset: 0;\n }\n"]))); +var dashCheck = keyframes(templateObject_3$4 || (templateObject_3$4 = __makeTemplateObject(["\n 0% {\n stroke-dashoffset: -100;\n }\n 100% {\n stroke-dashoffset: 900;\n }\n"], ["\n 0% {\n stroke-dashoffset: -100;\n }\n 100% {\n stroke-dashoffset: 900;\n }\n"]))); +var Circle = styled.circle(templateObject_4$4 || (templateObject_4$4 = __makeTemplateObject(["\n stroke-dasharray: 1000;\n stroke-dashoffset: 0;\n -webkit-animation: ", " 0.9s ease-in-out;\n animation: ", " 0.9s ease-in-out;\n"], ["\n stroke-dasharray: 1000;\n stroke-dashoffset: 0;\n -webkit-animation: ", " 0.9s ease-in-out;\n animation: ", " 0.9s ease-in-out;\n"])), dash, dash); +var PolyLine = styled.polyline(templateObject_5$4 || (templateObject_5$4 = __makeTemplateObject(["\n stroke-dasharray: 1000;\n stroke-dashoffset: 0;\n stroke-dashoffset: -100;\n -webkit-animation: ", " 0.9s 0.35s ease-in-out forwards;\n animation: ", " 0.9s 0.35s ease-in-out forwards;\n"], ["\n stroke-dasharray: 1000;\n stroke-dashoffset: 0;\n stroke-dashoffset: -100;\n -webkit-animation: ", " 0.9s 0.35s ease-in-out forwards;\n animation: ", " 0.9s 0.35s ease-in-out forwards;\n"])), dashCheck, dashCheck); +function AnimatedConfirmation() { + var theme = useTheme(); + return (jsx(Wrapper$1, __assign({ className: "w4rAnimated_checkmark" }, { children: jsxs("svg", __assign({ version: "1.1", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 130.2 130.2" }, { children: [jsx(Circle, { className: "path circle", fill: "none", stroke: theme.green1, strokeWidth: "6", strokeMiterlimit: "10", cx: "65.1", cy: "65.1", r: "62.1" }, void 0), jsx(PolyLine, { className: "path check", fill: "none", stroke: theme.green1, strokeWidth: "6", strokeLinecap: "round", strokeMiterlimit: "10", points: "100.2,40.2 51.5,88.8 29.8,67.5 " }, void 0)] }), void 0) }), void 0)); +} +var templateObject_1$b, templateObject_2$5, templateObject_3$4, templateObject_4$4, templateObject_5$4; + +var Wrapper = styled.div(templateObject_1$a || (templateObject_1$a = __makeTemplateObject(["\n width: 100%;\n padding: 1rem;\n"], ["\n width: 100%;\n padding: 1rem;\n"]))); +var Section = styled(AutoColumn)(templateObject_2$4 || (templateObject_2$4 = __makeTemplateObject(["\n padding: ", ";\n"], ["\n padding: ", ";\n"])), function (_a) { + var inline = _a.inline; + return (inline ? '0' : '0'); +}); +var BottomSection = styled(Section)(templateObject_3$3 || (templateObject_3$3 = __makeTemplateObject(["\n border-bottom-left-radius: 20px;\n border-bottom-right-radius: 20px;\n"], ["\n border-bottom-left-radius: 20px;\n border-bottom-right-radius: 20px;\n"]))); +var ConfirmedIcon = styled(ColumnCenter)(templateObject_4$3 || (templateObject_4$3 = __makeTemplateObject(["\n padding: ", ";\n"], ["\n padding: ", ";\n"])), function (_a) { + var inline = _a.inline; + return (inline ? '20px 0' : '32px 0;'); +}); +var StyledLogo = styled.img(templateObject_5$3 || (templateObject_5$3 = __makeTemplateObject(["\n height: 16px;\n width: 16px;\n margin-left: 6px;\n"], ["\n height: 16px;\n width: 16px;\n margin-left: 6px;\n"]))); +function ConfirmationPendingContent(_a) { + var onDismiss = _a.onDismiss, pendingText = _a.pendingText, inline = _a.inline; + return (jsx(Wrapper, { children: jsxs(AutoColumn, __assign({ gap: "md" }, { children: [!inline && (jsxs(RowBetween, { children: [jsx("div", {}, void 0), jsx(CloseIcon$2, { onClick: onDismiss }, void 0)] }, void 0)), jsx(ConfirmedIcon, __assign({ inline: inline }, { children: jsx(CustomLightSpinner, { src: Circle$1, alt: "loader", size: inline ? '40px' : '90px' }, void 0) }), void 0), jsxs(AutoColumn, __assign({ gap: "12px", justify: 'center' }, { children: [jsx(Text$1, __assign({ fontWeight: 500, fontSize: 20, textAlign: "center" }, { children: jsx(Trans, { children: "Waiting For Confirmation" }, void 0) }), void 0), jsx(Text$1, __assign({ fontWeight: 400, fontSize: 16, textAlign: "center" }, { children: pendingText }), void 0), jsx(Text$1, __assign({ fontWeight: 500, fontSize: 14, color: "#565A69", textAlign: "center", marginBottom: "12px" }, { children: jsx(Trans, { children: "Confirm this transaction in your wallet" }, void 0) }), void 0)] }), void 0)] }), void 0) }, void 0)); +} +function TransactionSubmittedContent(_a) { + var _b; + var onDismiss = _a.onDismiss, chainId = _a.chainId, hash = _a.hash, currencyToAdd = _a.currencyToAdd, inline = _a.inline; + var theme = useContext(ThemeContext); + var library = useActiveWeb3React().library; + var _c = useAddTokenToMetamask(currencyToAdd), addToken = _c.addToken, success = _c.success; + return (jsx(Wrapper, { children: jsxs(Section, __assign({ inline: inline }, { children: [!inline && (jsxs(RowBetween, { children: [jsx("div", {}, void 0), jsx(CloseIcon$2, { onClick: onDismiss }, void 0)] }, void 0)), jsx(ConfirmedIcon, __assign({ inline: inline }, { children: jsx(ArrowUpCircle, { strokeWidth: 0.5, size: inline ? '40px' : '90px', color: theme.primary1 }, void 0) }), void 0), jsxs(AutoColumn, __assign({ gap: "12px", justify: 'center' }, { children: [jsx(Text$1, __assign({ fontWeight: 500, fontSize: 20, textAlign: "center" }, { children: jsx(Trans, { children: "Transaction Submitted" }, void 0) }), void 0), chainId && hash && (jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, hash, ExplorerDataType.TRANSACTION) }, { children: jsx(Text$1, __assign({ fontWeight: 500, fontSize: 14, color: theme.primary1 }, { children: jsx(Trans, { children: "View on Explorer" }, void 0) }), void 0) }), void 0)), currencyToAdd && ((_b = library === null || library === void 0 ? void 0 : library.provider) === null || _b === void 0 ? void 0 : _b.isMetaMask) && (jsx(ButtonLight, __assign({ mt: "12px", padding: "6px 12px", width: "fit-content", onClick: addToken }, { children: !success ? (jsx(RowFixed, { children: jsxs(Trans, { children: ["Add ", currencyToAdd.symbol, " to Metamask ", jsx(StyledLogo, { src: MetaMaskLogo }, void 0)] }, void 0) }, void 0)) : (jsxs(RowFixed, { children: [jsxs(Trans, { children: ["Added ", currencyToAdd.symbol, " "] }, void 0), jsx(CheckCircle, { size: '16px', stroke: theme.green1, style: { marginLeft: '6px' } }, void 0)] }, void 0)) }), void 0)), jsx(ButtonPrimary, __assign({ onClick: onDismiss, style: { margin: '20px 0 0 0' } }, { children: jsx(Text$1, __assign({ fontWeight: 500, fontSize: 20 }, { children: inline ? jsx(Trans, { children: "Return" }, void 0) : jsx(Trans, { children: "Close" }, void 0) }), void 0) }), void 0)] }), void 0)] }), void 0) }, void 0)); +} +function ConfirmationModalContent(_a) { + var title = _a.title, bottomContent = _a.bottomContent, onDismiss = _a.onDismiss, topContent = _a.topContent; + return (jsxs(Wrapper, { children: [jsxs(Section, { children: [jsxs(RowBetween, { children: [jsx(Text$1, __assign({ fontWeight: 500, fontSize: 16 }, { children: title }), void 0), jsx(CloseIcon$2, { onClick: onDismiss }, void 0)] }, void 0), topContent()] }, void 0), bottomContent && jsx(BottomSection, __assign({ gap: "12px" }, { children: bottomContent() }), void 0)] }, void 0)); +} +function TransactionErrorContent(_a) { + var message = _a.message, onDismiss = _a.onDismiss; + var theme = useContext(ThemeContext); + return (jsxs(Wrapper, { children: [jsxs(Section, { children: [jsxs(RowBetween, { children: [jsx(Text$1, __assign({ fontWeight: 500, fontSize: 20 }, { children: jsx(Trans, { children: "Error" }, void 0) }), void 0), jsx(CloseIcon$2, { onClick: onDismiss }, void 0)] }, void 0), jsxs(AutoColumn, __assign({ style: { marginTop: 20, padding: '2rem 0' }, gap: "24px", justify: "center" }, { children: [jsx(AlertTriangle, { color: theme.red1, style: { strokeWidth: 1.5 }, size: 64 }, void 0), jsx(Text$1, __assign({ fontWeight: 500, fontSize: 16, color: theme.red1, style: { textAlign: 'center', width: '85%', wordBreak: 'break-word' } }, { children: message }), void 0)] }), void 0)] }, void 0), jsx(BottomSection, __assign({ gap: "12px" }, { children: jsx(ButtonPrimary, __assign({ onClick: onDismiss }, { children: jsx(Trans, { children: "Dismiss" }, void 0) }), void 0) }), void 0)] }, void 0)); +} +function L2Content(_a) { + var _b; + var onDismiss = _a.onDismiss, chainId = _a.chainId, hash = _a.hash, pendingText = _a.pendingText, inline = _a.inline; + var theme = useContext(ThemeContext); + var transaction = useTransaction(hash); + var confirmed = useIsTransactionConfirmed(hash); + var transactionSuccess = ((_b = transaction === null || transaction === void 0 ? void 0 : transaction.receipt) === null || _b === void 0 ? void 0 : _b.status) === 1; + // convert unix time difference to seconds + var secondsToConfirm = (transaction === null || transaction === void 0 ? void 0 : transaction.confirmedTime) + ? (transaction.confirmedTime - transaction.addedTime) / 1000 + : undefined; + var info = CHAIN_INFO[chainId]; + return (jsx(Wrapper, { children: jsxs(Section, __assign({ inline: inline }, { children: [!inline && (jsxs(RowBetween, __assign({ mb: "16px" }, { children: [jsx(Badge, { children: jsxs(RowFixed, { children: [jsx(StyledLogo, { src: info.logoUrl, style: { margin: '0 8px 0 0' } }, void 0), info.label] }, void 0) }, void 0), jsx(CloseIcon$2, { onClick: onDismiss }, void 0)] }), void 0)), jsx(ConfirmedIcon, __assign({ inline: inline }, { children: confirmed ? (transactionSuccess ? ( + // + jsx(AnimatedConfirmation, {}, void 0)) : (jsx(AlertCircle, { strokeWidth: 1, size: inline ? '40px' : '90px', color: theme.red1 }, void 0))) : (jsx(CustomLightSpinner, { src: Circle$1, alt: "loader", size: inline ? '40px' : '90px' }, void 0)) }), void 0), jsxs(AutoColumn, __assign({ gap: "12px", justify: 'center' }, { children: [jsx(Text$1, __assign({ fontWeight: 500, fontSize: 20, textAlign: "center" }, { children: !hash ? (jsx(Trans, { children: "Confirm transaction in wallet" }, void 0)) : !confirmed ? (jsx(Trans, { children: "Transaction Submitted" }, void 0)) : transactionSuccess ? (jsx(Trans, { children: "Success" }, void 0)) : (jsx(Trans, { children: "Error" }, void 0)) }), void 0), jsx(Text$1, __assign({ fontWeight: 400, fontSize: 16, textAlign: "center" }, { children: transaction ? jsx(TransactionSummary, { info: transaction.info }, void 0) : pendingText }), void 0), chainId && hash ? (jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, hash, ExplorerDataType.TRANSACTION) }, { children: jsx(Text$1, __assign({ fontWeight: 500, fontSize: 14, color: theme.primary1 }, { children: jsx(Trans, { children: "View on Explorer" }, void 0) }), void 0) }), void 0)) : (jsx("div", { style: { height: '17px' } }, void 0)), jsx(Text$1, __assign({ color: theme.text3, style: { margin: '20px 0 0 0' }, fontSize: '14px' }, { children: !secondsToConfirm ? (jsx("div", { style: { height: '24px' } }, void 0)) : (jsxs("div", { children: [jsx(Trans, { children: "Transaction completed in " }, void 0), jsxs("span", __assign({ style: { fontWeight: 500, marginLeft: '4px', color: theme.text1 } }, { children: [secondsToConfirm, " seconds \uD83C\uDF89"] }), void 0)] }, void 0)) }), void 0), jsx(ButtonPrimary, __assign({ onClick: onDismiss, style: { margin: '4px 0 0 0' } }, { children: jsx(Text$1, __assign({ fontWeight: 500, fontSize: 20 }, { children: inline ? jsx(Trans, { children: "Return" }, void 0) : jsx(Trans, { children: "Close" }, void 0) }), void 0) }), void 0)] }), void 0)] }), void 0) }, void 0)); +} +function TransactionConfirmationModal(_a) { + var isOpen = _a.isOpen, onDismiss = _a.onDismiss, attemptingTxn = _a.attemptingTxn, hash = _a.hash, pendingText = _a.pendingText, content = _a.content, currencyToAdd = _a.currencyToAdd; + var chainId = useActiveWeb3React().chainId; + var isL2 = Boolean(chainId && L2_CHAIN_IDS.includes(chainId)); + if (!chainId) + return null; + // confirmation screen + return (jsx(Modal, __assign({ isOpen: isOpen, onDismiss: onDismiss, maxHeight: 90 }, { children: isL2 && (hash || attemptingTxn) ? (jsx(L2Content, { chainId: chainId, hash: hash, onDismiss: onDismiss, pendingText: pendingText }, void 0)) : attemptingTxn ? (jsx(ConfirmationPendingContent, { onDismiss: onDismiss, pendingText: pendingText }, void 0)) : hash ? (jsx(TransactionSubmittedContent, { chainId: chainId, hash: hash, onDismiss: onDismiss, currencyToAdd: currencyToAdd }, void 0)) : (content()) }), void 0)); +} +var templateObject_1$a, templateObject_2$4, templateObject_3$3, templateObject_4$3, templateObject_5$3; + +function SwapModalFooter(_a) { + var onConfirm = _a.onConfirm, swapErrorMessage = _a.swapErrorMessage, disabledConfirm = _a.disabledConfirm; + return (jsx(Fragment, { children: jsxs(AutoRow, { children: [jsx(ButtonError, __assign({ onClick: onConfirm, disabled: disabledConfirm, style: { margin: '10px 0 0 0' }, id: "confirm-swap-or-send" }, { children: jsx(Text$1, __assign({ fontSize: 20, fontWeight: 500 }, { children: jsx(Trans, { children: "Confirm Swap" }, void 0) }), void 0) }), void 0), swapErrorMessage ? jsx(SwapCallbackError, { error: swapErrorMessage }, void 0) : null] }, void 0) }, void 0)); +} + +function computeFiatValuePriceImpact(fiatValueInput, fiatValueOutput) { + if (!fiatValueOutput || !fiatValueInput) + return undefined; + if (!fiatValueInput.currency.equals(fiatValueOutput.currency)) + return undefined; + if (JSBI.equal(fiatValueInput.quotient, JSBI.BigInt(0))) + return undefined; + var pct = ONE_HUNDRED_PERCENT.subtract(fiatValueOutput.divide(fiatValueInput)); + return new Percent(pct.numerator, pct.denominator); +} + +var ArrowWrapper = styled.div(templateObject_1$9 || (templateObject_1$9 = __makeTemplateObject(["\n padding: 4px;\n border-radius: 12px;\n height: 32px;\n width: 32px;\n position: relative;\n margin-top: -18px;\n margin-bottom: -18px;\n left: calc(50% - 16px);\n display: flex;\n justify-content: center;\n align-items: center;\n background-color: ", ";\n border: 4px solid;\n border-color: ", ";\n z-index: 2;\n"], ["\n padding: 4px;\n border-radius: 12px;\n height: 32px;\n width: 32px;\n position: relative;\n margin-top: -18px;\n margin-bottom: -18px;\n left: calc(50% - 16px);\n display: flex;\n justify-content: center;\n align-items: center;\n background-color: ", ";\n border: 4px solid;\n border-color: ", ";\n z-index: 2;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var theme = _a.theme; + return theme.bg0; +}); +function SwapModalHeader(_a) { + var trade = _a.trade, allowedSlippage = _a.allowedSlippage, recipient = _a.recipient, showAcceptChanges = _a.showAcceptChanges, onAcceptChanges = _a.onAcceptChanges; + var theme = useContext(ThemeContext); + var _b = __read(useState(false), 2), showInverted = _b[0], setShowInverted = _b[1]; + var fiatValueInput = useUSDCValue(trade.inputAmount); + var fiatValueOutput = useUSDCValue(trade.outputAmount); + return (jsxs(AutoColumn, __assign({ gap: '4px', style: { marginTop: '1rem' } }, { children: [jsx(LightCard, __assign({ padding: "0.75rem 1rem" }, { children: jsxs(AutoColumn, __assign({ gap: '8px' }, { children: [jsxs(RowBetween, __assign({ align: "center" }, { children: [jsx(RowFixed, __assign({ gap: '0px' }, { children: jsx(TruncatedText, __assign({ fontSize: 24, fontWeight: 500, color: showAcceptChanges && trade.tradeType === TradeType.EXACT_OUTPUT ? theme.primary1 : '' }, { children: trade.inputAmount.toSignificant(6) }), void 0) }), void 0), jsxs(RowFixed, __assign({ gap: '0px' }, { children: [jsx(CurrencyLogo, { currency: trade.inputAmount.currency, size: '20px', style: { marginRight: '12px' } }, void 0), jsx(Text$1, __assign({ fontSize: 20, fontWeight: 500 }, { children: trade.inputAmount.currency.symbol }), void 0)] }), void 0)] }), void 0), jsx(RowBetween, { children: jsx(FiatValue, { fiatValue: fiatValueInput }, void 0) }, void 0)] }), void 0) }), void 0), jsx(ArrowWrapper, { children: jsx(ArrowDown, { size: "16", color: theme.text2 }, void 0) }, void 0), jsx(LightCard, __assign({ padding: "0.75rem 1rem", style: { marginBottom: '0.25rem' } }, { children: jsxs(AutoColumn, __assign({ gap: '8px' }, { children: [jsxs(RowBetween, __assign({ align: "flex-end" }, { children: [jsx(RowFixed, __assign({ gap: '0px' }, { children: jsx(TruncatedText, __assign({ fontSize: 24, fontWeight: 500 }, { children: trade.outputAmount.toSignificant(6) }), void 0) }), void 0), jsxs(RowFixed, __assign({ gap: '0px' }, { children: [jsx(CurrencyLogo, { currency: trade.outputAmount.currency, size: '20px', style: { marginRight: '12px' } }, void 0), jsx(Text$1, __assign({ fontSize: 20, fontWeight: 500 }, { children: trade.outputAmount.currency.symbol }), void 0)] }), void 0)] }), void 0), jsx(RowBetween, { children: jsx(ThemedText.Body, __assign({ fontSize: 14, color: theme.text3 }, { children: jsx(FiatValue, { fiatValue: fiatValueOutput, priceImpact: computeFiatValuePriceImpact(fiatValueInput, fiatValueOutput) }, void 0) }), void 0) }, void 0)] }), void 0) }), void 0), jsx(RowBetween, __assign({ style: { marginTop: '0.25rem', padding: '0 1rem' } }, { children: jsx(TradePrice, { price: trade.executionPrice, showInverted: showInverted, setShowInverted: setShowInverted }, void 0) }), void 0), jsx(LightCard, __assign({ style: { padding: '.75rem', marginTop: '0.5rem' } }, { children: jsx(AdvancedSwapDetails, { trade: trade, allowedSlippage: allowedSlippage }, void 0) }), void 0), showAcceptChanges ? (jsx(SwapShowAcceptChanges, __assign({ justify: "flex-start", gap: '0px' }, { children: jsxs(RowBetween, { children: [jsxs(RowFixed, { children: [jsx(AlertTriangle, { size: 20, style: { marginRight: '8px', minWidth: 24 } }, void 0), jsx(ThemedText.Main, __assign({ color: theme.primary1 }, { children: jsx(Trans, { children: "Price Updated" }, void 0) }), void 0)] }, void 0), jsx(ButtonPrimary, __assign({ style: { padding: '.5rem', width: 'fit-content', fontSize: '0.825rem', borderRadius: '12px' }, onClick: onAcceptChanges }, { children: jsx(Trans, { children: "Accept" }, void 0) }), void 0)] }, void 0) }), void 0)) : null, jsx(AutoColumn, __assign({ justify: "flex-start", gap: "sm", style: { padding: '.75rem 1rem' } }, { children: trade.tradeType === TradeType.EXACT_INPUT ? (jsx(ThemedText.Italic, __assign({ fontWeight: 400, textAlign: "left", style: { width: '100%' } }, { children: jsxs(Trans, { children: ["Output is estimated. You will receive at least", ' ', jsxs("b", { children: [trade.minimumAmountOut(allowedSlippage).toSignificant(6), " ", trade.outputAmount.currency.symbol] }, void 0), ' ', "or the transaction will revert."] }, void 0) }), void 0)) : (jsx(ThemedText.Italic, __assign({ fontWeight: 400, textAlign: "left", style: { width: '100%' } }, { children: jsxs(Trans, { children: ["Input is estimated. You will sell at most", ' ', jsxs("b", { children: [trade.maximumAmountIn(allowedSlippage).toSignificant(6), " ", trade.inputAmount.currency.symbol] }, void 0), ' ', "or the transaction will revert."] }, void 0) }), void 0)) }), void 0), recipient !== null ? (jsx(AutoColumn, __assign({ justify: "flex-start", gap: "sm", style: { padding: '12px 0 0 0px' } }, { children: jsx(ThemedText.Main, { children: jsxs(Trans, { children: ["Output will be sent to", ' ', jsx("b", __assign({ title: recipient }, { children: isAddress(recipient) ? shortenAddress(recipient) : recipient }), void 0)] }, void 0) }, void 0) }), void 0)) : null] }), void 0)); +} +var templateObject_1$9; + +function ConfirmSwapModal(_a) { + var _b, _c, _d, _e, _f, _g; + var trade = _a.trade, originalTrade = _a.originalTrade, onAcceptChanges = _a.onAcceptChanges, allowedSlippage = _a.allowedSlippage, onConfirm = _a.onConfirm, onDismiss = _a.onDismiss, recipient = _a.recipient, swapErrorMessage = _a.swapErrorMessage, isOpen = _a.isOpen, attemptingTxn = _a.attemptingTxn, txHash = _a.txHash; + var showAcceptChanges = useMemo(function () { return Boolean(trade && originalTrade && tradeMeaningfullyDiffers(trade, originalTrade)); }, [originalTrade, trade]); + var modalHeader = useCallback(function () { + return trade ? (jsx(SwapModalHeader, { trade: trade, allowedSlippage: allowedSlippage, recipient: recipient, showAcceptChanges: showAcceptChanges, onAcceptChanges: onAcceptChanges }, void 0)) : null; + }, [allowedSlippage, onAcceptChanges, recipient, showAcceptChanges, trade]); + var modalBottom = useCallback(function () { + return trade ? (jsx(SwapModalFooter, { onConfirm: onConfirm, trade: trade, disabledConfirm: showAcceptChanges, swapErrorMessage: swapErrorMessage }, void 0)) : null; + }, [onConfirm, showAcceptChanges, swapErrorMessage, trade]); + // text to show while loading + var pendingText = (jsxs(Trans, { children: ["Swapping ", (_b = trade === null || trade === void 0 ? void 0 : trade.inputAmount) === null || _b === void 0 ? void 0 : _b.toSignificant(6), " ", (_d = (_c = trade === null || trade === void 0 ? void 0 : trade.inputAmount) === null || _c === void 0 ? void 0 : _c.currency) === null || _d === void 0 ? void 0 : _d.symbol, " for", ' ', (_e = trade === null || trade === void 0 ? void 0 : trade.outputAmount) === null || _e === void 0 ? void 0 : _e.toSignificant(6), " ", (_g = (_f = trade === null || trade === void 0 ? void 0 : trade.outputAmount) === null || _f === void 0 ? void 0 : _f.currency) === null || _g === void 0 ? void 0 : _g.symbol] }, void 0)); + var confirmationContent = useCallback(function () { + return swapErrorMessage ? (jsx(TransactionErrorContent, { onDismiss: onDismiss, message: swapErrorMessage }, void 0)) : (jsx(ConfirmationModalContent, { title: jsx(Trans, { children: "Confirm Swap" }, void 0), onDismiss: onDismiss, topContent: modalHeader, bottomContent: modalBottom }, void 0)); + }, [onDismiss, modalBottom, modalHeader, swapErrorMessage]); + return (jsx(TransactionConfirmationModal, { isOpen: isOpen, onDismiss: onDismiss, attemptingTxn: attemptingTxn, hash: txHash, content: confirmationContent, pendingText: pendingText, currencyToAdd: trade === null || trade === void 0 ? void 0 : trade.outputAmount.currency }, void 0)); +} + +var ToggleElement = styled.span(templateObject_1$8 || (templateObject_1$8 = __makeTemplateObject(["\n padding: 0.25rem 0.6rem;\n border-radius: 9px;\n background: ", ";\n color: ", ";\n font-size: 14px;\n font-weight: ", ";\n :hover {\n user-select: ", ";\n background: ", ";\n color: ", ";\n }\n"], ["\n padding: 0.25rem 0.6rem;\n border-radius: 9px;\n background: ", ";\n color: ", ";\n font-size: 14px;\n font-weight: ", ";\n :hover {\n user-select: ", ";\n background: ", ";\n color: ", ";\n }\n"])), function (_a) { + var theme = _a.theme, isActive = _a.isActive, isOnSwitch = _a.isOnSwitch; + return (isActive ? (isOnSwitch ? theme.primary1 : theme.bg4) : 'none'); +}, function (_a) { + var theme = _a.theme, isActive = _a.isActive; + return (isActive ? theme.white : theme.text2); +}, function (_a) { + var isOnSwitch = _a.isOnSwitch; + return (isOnSwitch ? '500' : '400'); +}, function (_a) { + var isOnSwitch = _a.isOnSwitch; + return (isOnSwitch ? 'none' : 'initial'); +}, function (_a) { + var theme = _a.theme, isActive = _a.isActive, isOnSwitch = _a.isOnSwitch; + return isActive ? (isOnSwitch ? darken(0.05, theme.primary1) : darken(0.05, theme.bg4)) : 'none'; +}, function (_a) { + var theme = _a.theme, isActive = _a.isActive, isOnSwitch = _a.isOnSwitch; + return (isActive ? (isOnSwitch ? theme.white : theme.white) : theme.text3); +}); +var StyledToggle = styled.button(templateObject_2$3 || (templateObject_2$3 = __makeTemplateObject(["\n border-radius: 12px;\n border: none;\n background: ", ";\n display: flex;\n width: fit-content;\n cursor: pointer;\n outline: none;\n padding: 2px;\n"], ["\n border-radius: 12px;\n border: none;\n background: ", ";\n display: flex;\n width: fit-content;\n cursor: pointer;\n outline: none;\n padding: 2px;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg0; +}); +function Toggle(_a) { + var id = _a.id, isActive = _a.isActive, toggle = _a.toggle, _b = _a.checked, checked = _b === void 0 ? jsx(Trans, { children: "On" }, void 0) : _b, _c = _a.unchecked, unchecked = _c === void 0 ? jsx(Trans, { children: "Off" }, void 0) : _c; + return (jsxs(StyledToggle, __assign({ id: id, isActive: isActive, onClick: toggle }, { children: [jsx(ToggleElement, __assign({ isActive: isActive, isOnSwitch: true }, { children: checked }), void 0), jsx(ToggleElement, __assign({ isActive: !isActive, isOnSwitch: false }, { children: unchecked }), void 0)] }), void 0)); +} +var templateObject_1$8, templateObject_2$3; + +var SlippageError; +(function (SlippageError) { + SlippageError["InvalidInput"] = "InvalidInput"; +})(SlippageError || (SlippageError = {})); +var DeadlineError; +(function (DeadlineError) { + DeadlineError["InvalidInput"] = "InvalidInput"; +})(DeadlineError || (DeadlineError = {})); +var FancyButton = styled.button(templateObject_1$7 || (templateObject_1$7 = __makeTemplateObject(["\n color: ", ";\n align-items: center;\n height: 2rem;\n border-radius: 36px;\n font-size: 1rem;\n width: auto;\n min-width: 3.5rem;\n border: 1px solid ", ";\n outline: none;\n background: ", ";\n :hover {\n border: 1px solid ", ";\n }\n :focus {\n border: 1px solid ", ";\n }\n"], ["\n color: ", ";\n align-items: center;\n height: 2rem;\n border-radius: 36px;\n font-size: 1rem;\n width: auto;\n min-width: 3.5rem;\n border: 1px solid ", ";\n outline: none;\n background: ", ";\n :hover {\n border: 1px solid ", ";\n }\n :focus {\n border: 1px solid ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text1; +}, function (_a) { + var theme = _a.theme; + return theme.bg3; +}, function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var theme = _a.theme; + return theme.bg4; +}, function (_a) { + var theme = _a.theme; + return theme.primary1; +}); +var Option = styled(FancyButton)(templateObject_2$2 || (templateObject_2$2 = __makeTemplateObject(["\n margin-right: 8px;\n :hover {\n cursor: pointer;\n }\n background-color: ", ";\n color: ", ";\n"], ["\n margin-right: 8px;\n :hover {\n cursor: pointer;\n }\n background-color: ", ";\n color: ", ";\n"])), function (_a) { + var active = _a.active, theme = _a.theme; + return active && theme.primary1; +}, function (_a) { + var active = _a.active, theme = _a.theme; + return (active ? theme.white : theme.text1); +}); +var Input = styled.input(templateObject_3$2 || (templateObject_3$2 = __makeTemplateObject(["\n background: ", ";\n font-size: 16px;\n width: auto;\n outline: none;\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n }\n color: ", ";\n text-align: right;\n"], ["\n background: ", ";\n font-size: 16px;\n width: auto;\n outline: none;\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n }\n color: ", ";\n text-align: right;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var theme = _a.theme, color = _a.color; + return (color === 'red' ? theme.red1 : theme.text1); +}); +var OptionCustom = styled(FancyButton)(templateObject_4$2 || (templateObject_4$2 = __makeTemplateObject(["\n height: 2rem;\n position: relative;\n padding: 0 0.75rem;\n flex: 1;\n border: ", ";\n :hover {\n border: ", ";\n }\n\n input {\n width: 100%;\n height: 100%;\n border: 0px;\n border-radius: 2rem;\n }\n"], ["\n height: 2rem;\n position: relative;\n padding: 0 0.75rem;\n flex: 1;\n border: ", ";\n :hover {\n border: ", ";\n }\n\n input {\n width: 100%;\n height: 100%;\n border: 0px;\n border-radius: 2rem;\n }\n"])), function (_a) { + var theme = _a.theme, active = _a.active, warning = _a.warning; + return active ? "1px solid " + (warning ? theme.red1 : theme.primary1) : warning && "1px solid " + theme.red1; +}, function (_a) { + var theme = _a.theme, active = _a.active, warning = _a.warning; + return active && "1px solid " + (warning ? darken(0.1, theme.red1) : darken(0.1, theme.primary1)); +}); +var SlippageEmojiContainer = styled.span(templateObject_6$1 || (templateObject_6$1 = __makeTemplateObject(["\n color: #f3841e;\n ", "\n"], ["\n color: #f3841e;\n ", "\n"])), function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToSmall(templateObject_5$2 || (templateObject_5$2 = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); +}); +var THREE_DAYS_IN_SECONDS = ms(templateObject_7$1 || (templateObject_7$1 = __makeTemplateObject(["3 days"], ["3 days"]))) / 1000; +function TransactionSettings(_a) { + var placeholderSlippage = _a.placeholderSlippage; + var chainId = useActiveWeb3React().chainId; + var theme = useContext(ThemeContext); + var userSlippageTolerance = useUserSlippageTolerance(); + var setUserSlippageTolerance = useSetUserSlippageTolerance(); + var _b = __read(useUserTransactionTTL(), 2), deadline = _b[0], setDeadline = _b[1]; + var _c = __read(useState(''), 2), slippageInput = _c[0], setSlippageInput = _c[1]; + var _d = __read(useState(false), 2), slippageError = _d[0], setSlippageError = _d[1]; + var _e = __read(useState(''), 2), deadlineInput = _e[0], setDeadlineInput = _e[1]; + var _f = __read(useState(false), 2), deadlineError = _f[0], setDeadlineError = _f[1]; + function parseSlippageInput(value) { + // populate what the user typed and clear the error + setSlippageInput(value); + setSlippageError(false); + if (value.length === 0) { + setUserSlippageTolerance('auto'); + } + else { + var parsed = Math.floor(Number.parseFloat(value) * 100); + if (!Number.isInteger(parsed) || parsed < 0 || parsed > 5000) { + setUserSlippageTolerance('auto'); + if (value !== '.') { + setSlippageError(SlippageError.InvalidInput); + } + } + else { + setUserSlippageTolerance(new Percent(parsed, 10000)); + } + } + } + var tooLow = userSlippageTolerance !== 'auto' && userSlippageTolerance.lessThan(new Percent(5, 10000)); + var tooHigh = userSlippageTolerance !== 'auto' && userSlippageTolerance.greaterThan(new Percent(1, 100)); + function parseCustomDeadline(value) { + // populate what the user typed and clear the error + setDeadlineInput(value); + setDeadlineError(false); + if (value.length === 0) { + setDeadline(DEFAULT_DEADLINE_FROM_NOW); + } + else { + try { + var parsed = Math.floor(Number.parseFloat(value) * 60); + if (!Number.isInteger(parsed) || parsed < 60 || parsed > THREE_DAYS_IN_SECONDS) { + setDeadlineError(DeadlineError.InvalidInput); + } + else { + setDeadline(parsed); + } + } + catch (error) { + console.error(error); + setDeadlineError(DeadlineError.InvalidInput); + } + } + } + var showCustomDeadlineRow = Boolean(chainId && !L2_CHAIN_IDS.includes(chainId)); + return (jsxs(AutoColumn, __assign({ gap: "md" }, { children: [jsxs(AutoColumn, __assign({ gap: "sm" }, { children: [jsxs(RowFixed, { children: [jsx(ThemedText.Black, __assign({ fontWeight: 400, fontSize: 14, color: theme.text2 }, { children: jsx(Trans, { children: "Slippage tolerance" }, void 0) }), void 0), jsx(QuestionHelper, { text: jsx(Trans, { children: "Your transaction will revert if the price changes unfavorably by more than this percentage." }, void 0) }, void 0)] }, void 0), jsxs(RowBetween, { children: [jsx(Option, __assign({ onClick: function () { + parseSlippageInput(''); + }, active: userSlippageTolerance === 'auto' }, { children: jsx(Trans, { children: "Auto" }, void 0) }), void 0), jsx(OptionCustom, __assign({ active: userSlippageTolerance !== 'auto', warning: !!slippageError, tabIndex: -1 }, { children: jsxs(RowBetween, { children: [tooLow || tooHigh ? (jsx(SlippageEmojiContainer, { children: jsx("span", __assign({ role: "img", "aria-label": "warning" }, { children: "\u26A0\uFE0F" }), void 0) }, void 0)) : null, jsx(Input, { placeholder: placeholderSlippage.toFixed(2), value: slippageInput.length > 0 + ? slippageInput + : userSlippageTolerance === 'auto' + ? '' + : userSlippageTolerance.toFixed(2), onChange: function (e) { return parseSlippageInput(e.target.value); }, onBlur: function () { + setSlippageInput(''); + setSlippageError(false); + }, color: slippageError ? 'red' : '' }, void 0), "%"] }, void 0) }), void 0)] }, void 0), slippageError || tooLow || tooHigh ? (jsx(RowBetween, __assign({ style: { + fontSize: '14px', + paddingTop: '7px', + color: slippageError ? 'red' : '#F3841E', + } }, { children: slippageError ? (jsx(Trans, { children: "Enter a valid slippage percentage" }, void 0)) : tooLow ? (jsx(Trans, { children: "Your transaction may fail" }, void 0)) : (jsx(Trans, { children: "Your transaction may be frontrun" }, void 0)) }), void 0)) : null] }), void 0), showCustomDeadlineRow && (jsxs(AutoColumn, __assign({ gap: "sm" }, { children: [jsxs(RowFixed, { children: [jsx(ThemedText.Black, __assign({ fontSize: 14, fontWeight: 400, color: theme.text2 }, { children: jsx(Trans, { children: "Transaction deadline" }, void 0) }), void 0), jsx(QuestionHelper, { text: jsx(Trans, { children: "Your transaction will revert if it is pending for more than this period of time." }, void 0) }, void 0)] }, void 0), jsxs(RowFixed, { children: [jsx(OptionCustom, __assign({ style: { width: '80px' }, warning: !!deadlineError, tabIndex: -1 }, { children: jsx(Input, { placeholder: (DEFAULT_DEADLINE_FROM_NOW / 60).toString(), value: deadlineInput.length > 0 + ? deadlineInput + : deadline === DEFAULT_DEADLINE_FROM_NOW + ? '' + : (deadline / 60).toString(), onChange: function (e) { return parseCustomDeadline(e.target.value); }, onBlur: function () { + setDeadlineInput(''); + setDeadlineError(false); + }, color: deadlineError ? 'red' : '' }, void 0) }), void 0), jsx(ThemedText.Body, __assign({ style: { paddingLeft: '8px' }, fontSize: 14 }, { children: jsx(Trans, { children: "minutes" }, void 0) }), void 0)] }, void 0)] }), void 0))] }), void 0)); +} +var templateObject_1$7, templateObject_2$2, templateObject_3$2, templateObject_4$2, templateObject_5$2, templateObject_6$1, templateObject_7$1; + +var StyledMenuIcon = styled(Settings)(templateObject_1$6 || (templateObject_1$6 = __makeTemplateObject(["\n height: 20px;\n width: 20px;\n\n > * {\n stroke: ", ";\n }\n\n :hover {\n opacity: 0.7;\n }\n"], ["\n height: 20px;\n width: 20px;\n\n > * {\n stroke: ", ";\n }\n\n :hover {\n opacity: 0.7;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text1; +}); +var StyledCloseIcon = styled(X)(templateObject_2$1 || (templateObject_2$1 = __makeTemplateObject(["\n height: 20px;\n width: 20px;\n :hover {\n cursor: pointer;\n }\n\n > * {\n stroke: ", ";\n }\n"], ["\n height: 20px;\n width: 20px;\n :hover {\n cursor: pointer;\n }\n\n > * {\n stroke: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text1; +}); +var StyledMenuButton = styled.button(templateObject_3$1 || (templateObject_3$1 = __makeTemplateObject(["\n position: relative;\n width: 100%;\n height: 100%;\n border: none;\n background-color: transparent;\n margin: 0;\n padding: 0;\n border-radius: 0.5rem;\n height: 20px;\n\n :hover,\n :focus {\n cursor: pointer;\n outline: none;\n }\n"], ["\n position: relative;\n width: 100%;\n height: 100%;\n border: none;\n background-color: transparent;\n margin: 0;\n padding: 0;\n border-radius: 0.5rem;\n height: 20px;\n\n :hover,\n :focus {\n cursor: pointer;\n outline: none;\n }\n"]))); +var EmojiWrapper = styled.div(templateObject_4$1 || (templateObject_4$1 = __makeTemplateObject(["\n position: absolute;\n bottom: -6px;\n right: 0px;\n font-size: 14px;\n"], ["\n position: absolute;\n bottom: -6px;\n right: 0px;\n font-size: 14px;\n"]))); +var StyledMenu = styled.div(templateObject_5$1 || (templateObject_5$1 = __makeTemplateObject(["\n margin-left: 0.5rem;\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n text-align: left;\n"], ["\n margin-left: 0.5rem;\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n text-align: left;\n"]))); +var MenuFlyout = styled.span(templateObject_7 || (templateObject_7 = __makeTemplateObject(["\n min-width: 20.125rem;\n background-color: ", ";\n border: 1px solid ", ";\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 border-radius: 12px;\n display: flex;\n flex-direction: column;\n font-size: 1rem;\n position: absolute;\n top: 2rem;\n right: 0rem;\n z-index: 100;\n\n ", ";\n\n user-select: none;\n"], ["\n min-width: 20.125rem;\n background-color: ", ";\n border: 1px solid ", ";\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 border-radius: 12px;\n display: flex;\n flex-direction: column;\n font-size: 1rem;\n position: absolute;\n top: 2rem;\n right: 0rem;\n z-index: 100;\n\n ", ";\n\n user-select: none;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}, function (_a) { + var theme = _a.theme; + return theme.bg3; +}, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToMedium(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n min-width: 18.125rem;\n "], ["\n min-width: 18.125rem;\n "]))); +}); +var Break = styled.div(templateObject_8 || (templateObject_8 = __makeTemplateObject(["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"], ["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg3; +}); +var ModalContentWrapper = styled.div(templateObject_9 || (templateObject_9 = __makeTemplateObject(["\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 2rem 0;\n background-color: ", ";\n border-radius: 20px;\n"], ["\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 2rem 0;\n background-color: ", ";\n border-radius: 20px;\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}); +function SettingsTab(_a) { + var placeholderSlippage = _a.placeholderSlippage; + var chainId = useActiveWeb3React().chainId; + var node = useRef(); + var open = useModalOpen(ApplicationModal.SETTINGS); + var toggle = useToggleSettingsMenu(); + var theme = useContext(ThemeContext); + var _b = __read(useExpertModeManager(), 2), expertMode = _b[0], toggleExpertMode = _b[1]; + var _c = __read(useClientSideRouter(), 2), clientSideRouter = _c[0], setClientSideRouter = _c[1]; + // show confirmation view before turning on + var _d = __read(useState(false), 2), showConfirmation = _d[0], setShowConfirmation = _d[1]; + useOnClickOutside(node, open ? toggle : undefined); + return ( + // https://github.com/DefinitelyTyped/DefinitelyTyped/issues/30451 + jsxs(StyledMenu, __assign({ ref: node }, { children: [jsx(Modal, __assign({ isOpen: showConfirmation, onDismiss: function () { return setShowConfirmation(false); }, maxHeight: 100 }, { children: jsx(ModalContentWrapper, { children: jsxs(AutoColumn, __assign({ gap: "lg" }, { children: [jsxs(RowBetween, __assign({ style: { padding: '0 2rem' } }, { children: [jsx("div", {}, void 0), jsx(Text$1, __assign({ fontWeight: 500, fontSize: 20 }, { children: jsx(Trans, { children: "Are you sure?" }, void 0) }), void 0), jsx(StyledCloseIcon, { onClick: function () { return setShowConfirmation(false); } }, void 0)] }), void 0), jsx(Break, {}, void 0), jsxs(AutoColumn, __assign({ gap: "lg", style: { padding: '0 2rem' } }, { children: [jsx(Text$1, __assign({ fontWeight: 500, fontSize: 20 }, { children: jsx(Trans, { children: "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds." }, void 0) }), void 0), jsx(Text$1, __assign({ fontWeight: 600, fontSize: 20 }, { children: jsx(Trans, { children: "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING." }, void 0) }), void 0), jsx(ButtonError, __assign({ error: true, padding: '12px', onClick: function () { + var confirmWord = t(templateObject_10 || (templateObject_10 = __makeTemplateObject(["confirm"], ["confirm"]))); + if (window.prompt(t(templateObject_11 || (templateObject_11 = __makeTemplateObject(["Please type the word \"", "\" to enable expert mode."], ["Please type the word \"", "\" to enable expert mode."])), confirmWord)) === confirmWord) { + toggleExpertMode(); + setShowConfirmation(false); + } + } }, { children: jsx(Text$1, __assign({ fontSize: 20, fontWeight: 500, id: "confirm-expert-mode" }, { children: jsx(Trans, { children: "Turn On Expert Mode" }, void 0) }), void 0) }), void 0)] }), void 0)] }), void 0) }, void 0) }), void 0), jsxs(StyledMenuButton, __assign({ onClick: toggle, id: "open-settings-dialog-button", "aria-label": t(templateObject_12 || (templateObject_12 = __makeTemplateObject(["Transaction Settings"], ["Transaction Settings"]))) }, { children: [jsx(StyledMenuIcon, {}, void 0), expertMode ? (jsx(EmojiWrapper, { children: jsx("span", __assign({ role: "img", "aria-label": "wizard-icon" }, { children: "\uD83E\uDDD9" }), void 0) }, void 0)) : null] }), void 0), open && (jsx(MenuFlyout, { children: jsxs(AutoColumn, __assign({ gap: "md", style: { padding: '1rem' } }, { children: [jsx(Text$1, __assign({ fontWeight: 600, fontSize: 14 }, { children: jsx(Trans, { children: "Transaction Settings" }, void 0) }), void 0), jsx(TransactionSettings, { placeholderSlippage: placeholderSlippage }, void 0), jsx(Text$1, __assign({ fontWeight: 600, fontSize: 14 }, { children: jsx(Trans, { children: "Interface Settings" }, void 0) }), void 0), chainId && AUTO_ROUTER_SUPPORTED_CHAINS.includes(chainId) && (jsxs(RowBetween, { children: [jsxs(RowFixed, { children: [jsx(ThemedText.Black, __assign({ fontWeight: 400, fontSize: 14, color: theme.text2 }, { children: jsx(Trans, { children: "Auto Router API" }, void 0) }), void 0), jsx(QuestionHelper, { text: jsx(Trans, { children: "Use the Uniswap Labs API to get faster quotes." }, void 0) }, void 0)] }, void 0), jsx(Toggle, { id: "toggle-optimized-router-button", isActive: !clientSideRouter, toggle: function () { + ReactGA.event({ + category: 'Routing', + action: clientSideRouter ? 'enable routing API' : 'disable routing API', + }); + setClientSideRouter(!clientSideRouter); + } }, void 0)] }, void 0)), jsxs(RowBetween, { children: [jsxs(RowFixed, { children: [jsx(ThemedText.Black, __assign({ fontWeight: 400, fontSize: 14, color: theme.text2 }, { children: jsx(Trans, { children: "Expert Mode" }, void 0) }), void 0), jsx(QuestionHelper, { text: jsx(Trans, { children: "Allow high price impact trades and skip the confirm screen. Use at your own risk." }, void 0) }, void 0)] }, void 0), jsx(Toggle, { id: "toggle-expert-mode-button", isActive: expertMode, toggle: expertMode + ? function () { + toggleExpertMode(); + setShowConfirmation(false); + } + : function () { + toggle(); + setShowConfirmation(true); + } }, void 0)] }, void 0)] }), void 0) }, void 0))] }), void 0)); +} +var templateObject_1$6, templateObject_2$1, templateObject_3$1, templateObject_4$1, templateObject_5$1, templateObject_6, templateObject_7, templateObject_8, templateObject_9, templateObject_10, templateObject_11, templateObject_12; + +var StyledSwapHeader = styled.div(templateObject_1$5 || (templateObject_1$5 = __makeTemplateObject(["\n padding: 1rem 1.25rem 0.5rem 1.25rem;\n width: 100%;\n color: ", ";\n"], ["\n padding: 1rem 1.25rem 0.5rem 1.25rem;\n width: 100%;\n color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.text2; +}); +function SwapHeader(_a) { + var allowedSlippage = _a.allowedSlippage; + return (jsx(StyledSwapHeader, { children: jsxs(RowBetween, { children: [jsx(RowFixed, { children: jsx(ThemedText.Black, __assign({ fontWeight: 500, fontSize: 16, style: { marginRight: '8px' } }, { children: jsx(Trans, { children: "Swap" }, void 0) }), void 0) }, void 0), jsx(RowFixed, { children: jsx(SettingsTab, { placeholderSlippage: allowedSlippage }, void 0) }, void 0)] }, void 0) }, void 0)); +} +var templateObject_1$5; + +var Container = styled(ThemedText.Small)(templateObject_1$4 || (templateObject_1$4 = __makeTemplateObject(["\n opacity: 0.6;\n :hover {\n opacity: 1;\n }\n margin-top: 1rem !important;\n"], ["\n opacity: 0.6;\n :hover {\n opacity: 1;\n }\n margin-top: 1rem !important;\n"]))); +var useTargetLocale = function (activeLocale) { + var browserLocale = useMemo(function () { return navigatorLocale(); }, []); + if (browserLocale && (browserLocale !== DEFAULT_LOCALE || activeLocale !== DEFAULT_LOCALE)) { + if (activeLocale === browserLocale) { + return DEFAULT_LOCALE; + } + else { + return browserLocale; + } + } + return null; +}; +function SwitchLocaleLink() { + var activeLocale = useActiveLocale(); + var targetLocale = useTargetLocale(activeLocale); + var _a = useLocationLinkProps(targetLocale), to = _a.to, onClick = _a.onClick; + if (!targetLocale || !to) + return null; + return (jsx(Container, { children: jsxs(Trans, { children: ["Uniswap available in:", ' ', jsx(StyledInternalLink, __assign({ onClick: onClick, to: to }, { children: LOCALE_LABEL[targetLocale] }), void 0)] }, void 0) }, void 0)); +} +var templateObject_1$4; + +function TokenWarningModal(_a) { + var isOpen = _a.isOpen, tokens = _a.tokens, onConfirm = _a.onConfirm, onDismiss = _a.onDismiss; + return (jsx(Modal, __assign({ isOpen: isOpen, onDismiss: onDismiss, maxHeight: 100 }, { children: jsx(ImportToken, { tokens: tokens, handleCurrencySelect: onConfirm }, void 0) }), void 0)); +} + +function useTokenAllowance(token, owner, spender) { + var contract = useTokenContract(token === null || token === void 0 ? void 0 : token.address, false); + var inputs = useMemo(function () { return [owner, spender]; }, [owner, spender]); + var allowance = useSingleCallResult(contract, 'allowance', inputs).result; + return useMemo(function () { return (token && allowance ? CurrencyAmount.fromRawAmount(token, allowance.toString()) : undefined); }, [token, allowance]); +} + +var ApprovalState; +(function (ApprovalState) { + ApprovalState["UNKNOWN"] = "UNKNOWN"; + ApprovalState["NOT_APPROVED"] = "NOT_APPROVED"; + ApprovalState["PENDING"] = "PENDING"; + ApprovalState["APPROVED"] = "APPROVED"; +})(ApprovalState || (ApprovalState = {})); +function useApprovalStateForSpender(amountToApprove, spender, useIsPendingApproval) { + var _a; + var account = useActiveWeb3React().account; + var token = ((_a = amountToApprove === null || amountToApprove === void 0 ? void 0 : amountToApprove.currency) === null || _a === void 0 ? void 0 : _a.isToken) ? amountToApprove.currency : undefined; + var currentAllowance = useTokenAllowance(token, account !== null && account !== void 0 ? account : undefined, spender); + var pendingApproval = useIsPendingApproval(token, spender); + return useMemo(function () { + if (!amountToApprove || !spender) + return ApprovalState.UNKNOWN; + if (amountToApprove.currency.isNative) + return ApprovalState.APPROVED; + // we might not have enough data to know whether or not we need to approve + if (!currentAllowance) + return ApprovalState.UNKNOWN; + // amountToApprove will be defined if currentAllowance is + return currentAllowance.lessThan(amountToApprove) + ? pendingApproval + ? ApprovalState.PENDING + : ApprovalState.NOT_APPROVED + : ApprovalState.APPROVED; + }, [amountToApprove, currentAllowance, pendingApproval, spender]); +} +function useApproval(amountToApprove, spender, useIsPendingApproval) { + var _this = this; + var _a; + var chainId = useActiveWeb3React().chainId; + var token = ((_a = amountToApprove === null || amountToApprove === void 0 ? void 0 : amountToApprove.currency) === null || _a === void 0 ? void 0 : _a.isToken) ? amountToApprove.currency : undefined; + // check the current approval status + var approvalState = useApprovalStateForSpender(amountToApprove, spender, useIsPendingApproval); + var tokenContract = useTokenContract(token === null || token === void 0 ? void 0 : token.address); + var approve = useCallback(function () { return __awaiter(_this, void 0, void 0, function () { + function logFailure(error) { + console.warn(((token === null || token === void 0 ? void 0 : token.symbol) || 'Token') + " approval failed:", error); + return; + } + var useExact, estimatedGas; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + // Bail early if there is an issue. + if (approvalState !== ApprovalState.NOT_APPROVED) { + return [2 /*return*/, logFailure('approve was called unnecessarily')]; + } + else if (!chainId) { + return [2 /*return*/, logFailure('no chainId')]; + } + else if (!token) { + return [2 /*return*/, logFailure('no token')]; + } + else if (!tokenContract) { + return [2 /*return*/, logFailure('tokenContract is null')]; + } + else if (!amountToApprove) { + return [2 /*return*/, logFailure('missing amount to approve')]; + } + else if (!spender) { + return [2 /*return*/, logFailure('no spender')]; + } + useExact = false; + return [4 /*yield*/, tokenContract.estimateGas.approve(spender, MaxUint256).catch(function () { + // general fallback for tokens which restrict approval amounts + useExact = true; + return tokenContract.estimateGas.approve(spender, amountToApprove.quotient.toString()); + })]; + case 1: + estimatedGas = _a.sent(); + return [2 /*return*/, tokenContract + .approve(spender, useExact ? amountToApprove.quotient.toString() : MaxUint256, { + gasLimit: calculateGasMargin(estimatedGas), + }) + .then(function (response) { return ({ + response: response, + tokenAddress: token.address, + spenderAddress: spender, + }); }) + .catch(function (error) { + logFailure(error); + throw error; + })]; + } + }); + }); }, [approvalState, token, tokenContract, amountToApprove, spender, chainId]); + return [approvalState, approve]; +} + +var SwapRouterVersion; +(function (SwapRouterVersion) { + SwapRouterVersion[SwapRouterVersion["V2"] = 0] = "V2"; + SwapRouterVersion[SwapRouterVersion["V3"] = 1] = "V3"; + SwapRouterVersion[SwapRouterVersion["V2V3"] = 2] = "V2V3"; +})(SwapRouterVersion || (SwapRouterVersion = {})); +/** + * Returns the swap router that will result in the least amount of txs (less gas) for a given swap. + * Heuristic: + * - if trade contains a single v2-only trade & V2 SwapRouter is approved: use V2 SwapRouter + * - if trade contains only v3 & V3 SwapRouter is approved: use V3 SwapRouter + * - else: approve and use V2+V3 SwapRouter + */ +function getTxOptimizedSwapRouter(_a) { + var onlyV2Routes = _a.onlyV2Routes, onlyV3Routes = _a.onlyV3Routes, tradeHasSplits = _a.tradeHasSplits, approvalStates = _a.approvalStates; + if ([approvalStates.v2, approvalStates.v3, approvalStates.v2V3].includes(ApprovalState.PENDING)) + return undefined; + if (approvalStates.v2V3 === ApprovalState.APPROVED) + return SwapRouterVersion.V2V3; + if (approvalStates.v2 === ApprovalState.APPROVED && onlyV2Routes && !tradeHasSplits) + return SwapRouterVersion.V2; + if (approvalStates.v3 === ApprovalState.APPROVED && onlyV3Routes) + return SwapRouterVersion.V3; + return SwapRouterVersion.V2V3; +} + +/** Returns approval state for all known swap routers */ +function useSwapApprovalStates(trade, allowedSlippage, useIsPendingApproval) { + var chainId = useActiveWeb3React().chainId; + var amountToApprove = useMemo(function () { return (trade && trade.inputAmount.currency.isToken ? trade.maximumAmountIn(allowedSlippage) : undefined); }, [trade, allowedSlippage]); + var v2RouterAddress = chainId ? V2_ROUTER_ADDRESS[chainId] : undefined; + var v3RouterAddress = chainId ? V3_ROUTER_ADDRESS[chainId] : undefined; + var swapRouterAddress = chainId ? SWAP_ROUTER_ADDRESSES[chainId] : undefined; + var v2 = useApprovalStateForSpender(amountToApprove, v2RouterAddress, useIsPendingApproval); + var v3 = useApprovalStateForSpender(amountToApprove, v3RouterAddress, useIsPendingApproval); + var v2V3 = useApprovalStateForSpender(amountToApprove, swapRouterAddress, useIsPendingApproval); + return useMemo(function () { return ({ v2: v2, v3: v3, v2V3: v2V3 }); }, [v2, v2V3, v3]); +} +function useSwapRouterAddress(trade) { + var chainId = useActiveWeb3React().chainId; + return useMemo(function () { + return chainId + ? trade instanceof Trade + ? V2_ROUTER_ADDRESS[chainId] + : trade instanceof Trade$2 + ? V3_ROUTER_ADDRESS[chainId] + : SWAP_ROUTER_ADDRESSES[chainId] + : undefined; + }, [chainId, trade]); +} +// wraps useApproveCallback in the context of a swap +function useSwapApproval(trade, allowedSlippage, useIsPendingApproval) { + var amountToApprove = useMemo(function () { return (trade && trade.inputAmount.currency.isToken ? trade.maximumAmountIn(allowedSlippage) : undefined); }, [trade, allowedSlippage]); + var spender = useSwapRouterAddress(trade); + var approval = useApproval(amountToApprove, spender, useIsPendingApproval); + if (trade instanceof Trade || trade instanceof Trade$2) { + var approvalState = approval[0]; + invariant(approvalState === ApprovalState.APPROVED, 'Trying to approve legacy router'); + } + return approval; +} +function useSwapApprovalOptimizedTrade(trade, allowedSlippage, useIsPendingApproval) { + var _a; + var onlyV2Routes = trade === null || trade === void 0 ? void 0 : trade.routes.every(function (route) { return route.protocol === Protocol.V2; }); + var onlyV3Routes = trade === null || trade === void 0 ? void 0 : trade.routes.every(function (route) { return route.protocol === Protocol.V3; }); + var tradeHasSplits = ((_a = trade === null || trade === void 0 ? void 0 : trade.routes.length) !== null && _a !== void 0 ? _a : 0) > 1; + var approvalStates = useSwapApprovalStates(trade, allowedSlippage, useIsPendingApproval); + var optimizedSwapRouter = useMemo(function () { return getTxOptimizedSwapRouter({ onlyV2Routes: onlyV2Routes, onlyV3Routes: onlyV3Routes, tradeHasSplits: tradeHasSplits, approvalStates: approvalStates }); }, [approvalStates, tradeHasSplits, onlyV2Routes, onlyV3Routes]); + return useMemo(function () { + if (!trade) + return undefined; + try { + switch (optimizedSwapRouter) { + case SwapRouterVersion.V2V3: + return trade; + case SwapRouterVersion.V2: + var pairs = trade.swaps[0].route.pools.filter(function (pool) { return pool instanceof Pair; }); + var v2Route = new Route$2(pairs, trade.inputAmount.currency, trade.outputAmount.currency); + return new Trade(v2Route, trade.inputAmount, trade.tradeType); + case SwapRouterVersion.V3: + return Trade$2.createUncheckedTradeWithMultipleRoutes({ + routes: trade.swaps.map(function (_a) { + var route = _a.route, inputAmount = _a.inputAmount, outputAmount = _a.outputAmount; + return ({ + route: new Route$1(route.pools.filter(function (p) { return p instanceof Pool$1; }), inputAmount.currency, outputAmount.currency), + inputAmount: inputAmount, + outputAmount: outputAmount, + }); + }), + tradeType: trade.tradeType, + }); + default: + return undefined; + } + } + catch (e) { + // TODO(#2989): remove try-catch + console.debug(e); + return undefined; + } + }, [trade, optimizedSwapRouter]); +} + +function useGetAndTrackApproval(getApproval) { + var addTransaction = useTransactionAdder(); + return useCallback(function () { + return getApproval().then(function (pending) { + if (pending) { + var response = pending.response, tokenAddress = pending.tokenAddress, spender = pending.spenderAddress; + addTransaction(response, { type: TransactionType.APPROVAL, tokenAddress: tokenAddress, spender: spender }); + } + }); + }, [addTransaction, getApproval]); +} +function useApprovalOptimizedTrade(trade, allowedSlippage) { + return useSwapApprovalOptimizedTrade(trade, allowedSlippage, useHasPendingApproval); +} +function useApproveCallbackFromTrade(trade, allowedSlippage) { + var _a = __read(useSwapApproval(trade, allowedSlippage, useHasPendingApproval), 2), approval = _a[0], getApproval = _a[1]; + return [approval, useGetAndTrackApproval(getApproval)]; +} + +var _a$1, _b, _c, _d, _e; +var PermitType; +(function (PermitType) { + PermitType[PermitType["AMOUNT"] = 1] = "AMOUNT"; + PermitType[PermitType["ALLOWED"] = 2] = "ALLOWED"; +})(PermitType || (PermitType = {})); +// 20 minutes to submit after signing +var PERMIT_VALIDITY_BUFFER = 20 * 60; +// todo: read this information from extensions on token lists or elsewhere (permit registry?) +var PERMITTABLE_TOKENS = { + 1: (_a$1 = {}, + _a$1[USDC.address] = { type: PermitType.AMOUNT, name: 'USD Coin', version: '2' }, + _a$1[DAI.address] = { type: PermitType.ALLOWED, name: 'Dai Stablecoin', version: '1' }, + _a$1[UNI[1].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }, + _a$1), + 4: (_b = { + '0xc7AD46e0b8a400Bb3C915120d284AafbA8fc4735': { type: PermitType.ALLOWED, name: 'Dai Stablecoin', version: '1' } + }, + _b[UNI[4].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }, + _b), + 3: (_c = {}, + _c[UNI[3].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }, + _c['0x07865c6E87B9F70255377e024ace6630C1Eaa37F'] = { type: PermitType.AMOUNT, name: 'USD Coin', version: '2' }, + _c), + 5: (_d = {}, + _d[UNI[5].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }, + _d), + 42: (_e = {}, + _e[UNI[42].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }, + _e), +}; +var UseERC20PermitState; +(function (UseERC20PermitState) { + // returned for any reason, e.g. it is an argent wallet, or the currency does not support it + UseERC20PermitState[UseERC20PermitState["NOT_APPLICABLE"] = 0] = "NOT_APPLICABLE"; + UseERC20PermitState[UseERC20PermitState["LOADING"] = 1] = "LOADING"; + UseERC20PermitState[UseERC20PermitState["NOT_SIGNED"] = 2] = "NOT_SIGNED"; + UseERC20PermitState[UseERC20PermitState["SIGNED"] = 3] = "SIGNED"; +})(UseERC20PermitState || (UseERC20PermitState = {})); +var EIP712_DOMAIN_TYPE = [ + { name: 'name', type: 'string' }, + { name: 'version', type: 'string' }, + { name: 'chainId', type: 'uint256' }, + { name: 'verifyingContract', type: 'address' }, +]; +var EIP712_DOMAIN_TYPE_NO_VERSION = [ + { name: 'name', type: 'string' }, + { name: 'chainId', type: 'uint256' }, + { name: 'verifyingContract', type: 'address' }, +]; +var EIP2612_TYPE = [ + { name: 'owner', type: 'address' }, + { name: 'spender', type: 'address' }, + { name: 'value', type: 'uint256' }, + { name: 'nonce', type: 'uint256' }, + { name: 'deadline', type: 'uint256' }, +]; +var PERMIT_ALLOWED_TYPE = [ + { name: 'holder', type: 'address' }, + { name: 'spender', type: 'address' }, + { name: 'nonce', type: 'uint256' }, + { name: 'expiry', type: 'uint256' }, + { name: 'allowed', type: 'bool' }, +]; +function useERC20Permit(currencyAmount, spender, transactionDeadline, overridePermitInfo) { + var _a, _b; + var _c = useActiveWeb3React(), account = _c.account, chainId = _c.chainId, library = _c.library; + var tokenAddress = ((_a = currencyAmount === null || currencyAmount === void 0 ? void 0 : currencyAmount.currency) === null || _a === void 0 ? void 0 : _a.isToken) ? currencyAmount.currency.address : undefined; + var eip2612Contract = useEIP2612Contract(tokenAddress); + var isArgentWallet = useIsArgentWallet(); + var nonceInputs = useMemo(function () { return [account !== null && account !== void 0 ? account : undefined]; }, [account]); + var tokenNonceState = useSingleCallResult(eip2612Contract, 'nonces', nonceInputs); + var permitInfo = overridePermitInfo !== null && overridePermitInfo !== void 0 ? overridePermitInfo : (chainId && tokenAddress ? (_b = PERMITTABLE_TOKENS[chainId]) === null || _b === void 0 ? void 0 : _b[tokenAddress] : undefined); + var _d = __read(useState(null), 2), signatureData = _d[0], setSignatureData = _d[1]; + return useMemo(function () { + var _a, _b; + if (isArgentWallet || + !currencyAmount || + !eip2612Contract || + !account || + !chainId || + !transactionDeadline || + !library || + !tokenNonceState.valid || + !tokenAddress || + !spender || + !permitInfo) { + return { + state: UseERC20PermitState.NOT_APPLICABLE, + signatureData: null, + gatherPermitSignature: null, + }; + } + var nonceNumber = (_b = (_a = tokenNonceState.result) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.toNumber(); + if (tokenNonceState.loading || typeof nonceNumber !== 'number') { + return { + state: UseERC20PermitState.LOADING, + signatureData: null, + gatherPermitSignature: null, + }; + } + var isSignatureDataValid = signatureData && + signatureData.owner === account && + signatureData.deadline >= transactionDeadline.toNumber() && + signatureData.tokenAddress === tokenAddress && + signatureData.nonce === nonceNumber && + signatureData.spender === spender && + ('allowed' in signatureData || JSBI.equal(JSBI.BigInt(signatureData.amount), currencyAmount.quotient)); + return { + state: isSignatureDataValid ? UseERC20PermitState.SIGNED : UseERC20PermitState.NOT_SIGNED, + signatureData: isSignatureDataValid ? signatureData : null, + gatherPermitSignature: function gatherPermitSignature() { + return __awaiter(this, void 0, void 0, function () { + var allowed, signatureDeadline, value, message, domain, data; + return __generator(this, function (_a) { + allowed = permitInfo.type === PermitType.ALLOWED; + signatureDeadline = transactionDeadline.toNumber() + PERMIT_VALIDITY_BUFFER; + value = currencyAmount.quotient.toString(); + message = allowed + ? { + holder: account, + spender: spender, + allowed: allowed, + nonce: nonceNumber, + expiry: signatureDeadline, + } + : { + owner: account, + spender: spender, + value: value, + nonce: nonceNumber, + deadline: signatureDeadline, + }; + domain = permitInfo.version + ? { + name: permitInfo.name, + version: permitInfo.version, + verifyingContract: tokenAddress, + chainId: chainId, + } + : { + name: permitInfo.name, + verifyingContract: tokenAddress, + chainId: chainId, + }; + data = JSON.stringify({ + types: { + EIP712Domain: permitInfo.version ? EIP712_DOMAIN_TYPE : EIP712_DOMAIN_TYPE_NO_VERSION, + Permit: allowed ? PERMIT_ALLOWED_TYPE : EIP2612_TYPE, + }, + domain: domain, + primaryType: 'Permit', + message: message, + }); + return [2 /*return*/, library + .send('eth_signTypedData_v4', [account, data]) + .then(splitSignature) + .then(function (signature) { + setSignatureData(__assign(__assign({ v: signature.v, r: signature.r, s: signature.s, deadline: signatureDeadline }, (allowed ? { allowed: allowed } : { amount: value })), { nonce: nonceNumber, chainId: chainId, owner: account, spender: spender, tokenAddress: tokenAddress, permitType: permitInfo.type })); + })]; + }); + }); + }, + }; + }, [ + currencyAmount, + eip2612Contract, + account, + chainId, + isArgentWallet, + transactionDeadline, + library, + tokenNonceState.loading, + tokenNonceState.valid, + tokenNonceState.result, + tokenAddress, + spender, + permitInfo, + signatureData, + ]); +} +function useERC20PermitFromTrade(trade, allowedSlippage, transactionDeadline) { + var chainId = useActiveWeb3React().chainId; + var swapRouterAddress = chainId + ? // v2 router does not support + trade instanceof Trade + ? undefined + : trade instanceof Trade$2 + ? V3_ROUTER_ADDRESS[chainId] + : SWAP_ROUTER_ADDRESSES[chainId] + : undefined; + var amountToApprove = useMemo(function () { return (trade ? trade.maximumAmountIn(allowedSlippage) : undefined); }, [trade, allowedSlippage]); + return useERC20Permit(amountToApprove, swapRouterAddress, transactionDeadline, null); +} + +/** + * Returns true if the input currency or output currency cannot be traded in the interface + * @param currencyIn the input currency to check + * @param currencyOut the output currency to check + */ +function useIsSwapUnsupported(currencyIn, currencyOut) { + var unsupportedTokens = useUnsupportedTokens(); + return useMemo(function () { + if (!unsupportedTokens) { + return false; + } + var currencyInUnsupported = Boolean((currencyIn === null || currencyIn === void 0 ? void 0 : currencyIn.isToken) && unsupportedTokens[currencyIn.address]); + var currencyOutUnsupported = Boolean((currencyOut === null || currencyOut === void 0 ? void 0 : currencyOut.isToken) && unsupportedTokens[currencyOut.address]); + return currencyInUnsupported || currencyOutUnsupported; + }, [currencyIn, currencyOut, unsupportedTokens]); +} + +var WrapType; +(function (WrapType) { + WrapType[WrapType["NOT_APPLICABLE"] = 0] = "NOT_APPLICABLE"; + WrapType[WrapType["WRAP"] = 1] = "WRAP"; + WrapType[WrapType["UNWRAP"] = 2] = "UNWRAP"; +})(WrapType || (WrapType = {})); +var NOT_APPLICABLE = { wrapType: WrapType.NOT_APPLICABLE }; +var WrapInputError; +(function (WrapInputError) { + WrapInputError[WrapInputError["NO_ERROR"] = 0] = "NO_ERROR"; + WrapInputError[WrapInputError["ENTER_NATIVE_AMOUNT"] = 1] = "ENTER_NATIVE_AMOUNT"; + WrapInputError[WrapInputError["ENTER_WRAPPED_AMOUNT"] = 2] = "ENTER_WRAPPED_AMOUNT"; + WrapInputError[WrapInputError["INSUFFICIENT_NATIVE_BALANCE"] = 3] = "INSUFFICIENT_NATIVE_BALANCE"; + WrapInputError[WrapInputError["INSUFFICIENT_WRAPPED_BALANCE"] = 4] = "INSUFFICIENT_WRAPPED_BALANCE"; +})(WrapInputError || (WrapInputError = {})); +function WrapErrorText(_a) { + var wrapInputError = _a.wrapInputError; + var native = useNativeCurrency(); + var wrapped = native === null || native === void 0 ? void 0 : native.wrapped; + switch (wrapInputError) { + case WrapInputError.NO_ERROR: + return null; + case WrapInputError.ENTER_NATIVE_AMOUNT: + return jsxs(Trans, { children: ["Enter ", native === null || native === void 0 ? void 0 : native.symbol, " amount"] }, void 0); + case WrapInputError.ENTER_WRAPPED_AMOUNT: + return jsxs(Trans, { children: ["Enter ", wrapped === null || wrapped === void 0 ? void 0 : wrapped.symbol, " amount"] }, void 0); + case WrapInputError.INSUFFICIENT_NATIVE_BALANCE: + return jsxs(Trans, { children: ["Insufficient ", native === null || native === void 0 ? void 0 : native.symbol, " balance"] }, void 0); + case WrapInputError.INSUFFICIENT_WRAPPED_BALANCE: + return jsxs(Trans, { children: ["Insufficient ", wrapped === null || wrapped === void 0 ? void 0 : wrapped.symbol, " balance"] }, void 0); + } +} +/** + * Given the selected input and output currency, return a wrap callback + * @param inputCurrency the selected input currency + * @param outputCurrency the selected output currency + * @param typedValue the user input value + */ +function useWrapCallback(inputCurrency, outputCurrency, typedValue) { + var _this = this; + var _a = useActiveWeb3React(), chainId = _a.chainId, account = _a.account; + var wethContract = useWETHContract(); + var balance = useCurrencyBalance(account !== null && account !== void 0 ? account : undefined, inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : undefined); + // we can always parse the amount typed as the input currency, since wrapping is 1:1 + var inputAmount = useMemo(function () { return tryParseCurrencyAmount(typedValue, inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : undefined); }, [inputCurrency, typedValue]); + var addTransaction = useTransactionAdder(); + return useMemo(function () { + if (!wethContract || !chainId || !inputCurrency || !outputCurrency) + return NOT_APPLICABLE; + var weth = WRAPPED_NATIVE_CURRENCY[chainId]; + if (!weth) + return NOT_APPLICABLE; + var hasInputAmount = Boolean(inputAmount === null || inputAmount === void 0 ? void 0 : inputAmount.greaterThan('0')); + var sufficientBalance = inputAmount && balance && !balance.lessThan(inputAmount); + if (inputCurrency.isNative && weth.equals(outputCurrency)) { + return { + wrapType: WrapType.WRAP, + execute: sufficientBalance && inputAmount + ? function () { return __awaiter(_this, void 0, void 0, function () { + var txReceipt, error_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 2, , 3]); + return [4 /*yield*/, wethContract.deposit({ value: "0x" + inputAmount.quotient.toString(16) })]; + case 1: + txReceipt = _a.sent(); + addTransaction(txReceipt, { + type: TransactionType.WRAP, + unwrapped: false, + currencyAmountRaw: inputAmount === null || inputAmount === void 0 ? void 0 : inputAmount.quotient.toString(), + chainId: chainId, + }); + return [3 /*break*/, 3]; + case 2: + error_1 = _a.sent(); + console.error('Could not deposit', error_1); + return [3 /*break*/, 3]; + case 3: return [2 /*return*/]; + } + }); + }); } + : undefined, + inputError: sufficientBalance + ? undefined + : hasInputAmount + ? WrapInputError.INSUFFICIENT_NATIVE_BALANCE + : WrapInputError.ENTER_NATIVE_AMOUNT, + }; + } + else if (weth.equals(inputCurrency) && outputCurrency.isNative) { + return { + wrapType: WrapType.UNWRAP, + execute: sufficientBalance && inputAmount + ? function () { return __awaiter(_this, void 0, void 0, function () { + var txReceipt, error_2; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 2, , 3]); + return [4 /*yield*/, wethContract.withdraw("0x" + inputAmount.quotient.toString(16))]; + case 1: + txReceipt = _a.sent(); + addTransaction(txReceipt, { + type: TransactionType.WRAP, + unwrapped: true, + currencyAmountRaw: inputAmount === null || inputAmount === void 0 ? void 0 : inputAmount.quotient.toString(), + chainId: chainId, + }); + return [3 /*break*/, 3]; + case 2: + error_2 = _a.sent(); + console.error('Could not withdraw', error_2); + return [3 /*break*/, 3]; + case 3: return [2 /*return*/]; + } + }); + }); } + : undefined, + inputError: sufficientBalance + ? undefined + : hasInputAmount + ? WrapInputError.INSUFFICIENT_WRAPPED_BALANCE + : WrapInputError.ENTER_WRAPPED_AMOUNT, + }; + } + else { + return NOT_APPLICABLE; + } + }, [wethContract, chainId, inputCurrency, outputCurrency, inputAmount, balance, addTransaction]); +} + +var MIN_NATIVE_CURRENCY_FOR_GAS = JSBI.exponentiate(JSBI.BigInt(10), JSBI.BigInt(16)); // .01 ETH +/** + * Given some token amount, return the max that can be spent of it + * @param currencyAmount to return max of + */ +function maxAmountSpend(currencyAmount) { + if (!currencyAmount) + return undefined; + if (currencyAmount.currency.isNative) { + if (JSBI.greaterThan(currencyAmount.quotient, MIN_NATIVE_CURRENCY_FOR_GAS)) { + return CurrencyAmount.fromRawAmount(currencyAmount.currency, JSBI.subtract(currencyAmount.quotient, MIN_NATIVE_CURRENCY_FOR_GAS)); + } + else { + return CurrencyAmount.fromRawAmount(currencyAmount.currency, JSBI.BigInt(0)); + } + } + return currencyAmount; +} + +var BodyWrapper$1 = styled.main(templateObject_1$3 || (templateObject_1$3 = __makeTemplateObject(["\n position: relative;\n margin-top: ", ";\n max-width: ", ";\n width: 100%;\n background: ", ";\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 border-radius: 24px;\n margin-top: 1rem;\n margin-left: auto;\n margin-right: auto;\n z-index: ", ";\n"], ["\n position: relative;\n margin-top: ", ";\n max-width: ", ";\n width: 100%;\n background: ", ";\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 border-radius: 24px;\n margin-top: 1rem;\n margin-left: auto;\n margin-right: auto;\n z-index: ", ";\n" + /** + * The styled container element that wraps the content of most pages and the tabs. + */ +])), function (_a) { + var margin = _a.margin; + return margin !== null && margin !== void 0 ? margin : '0px'; +}, function (_a) { + var maxWidth = _a.maxWidth; + return maxWidth !== null && maxWidth !== void 0 ? maxWidth : '480px'; +}, function (_a) { + var theme = _a.theme; + return theme.bg0; +}, Z_INDEX.deprecated_content); +/** + * The styled container element that wraps the content of most pages and the tabs. + */ +function AppBody(_a) { + var children = _a.children, rest = __rest(_a, ["children"]); + return jsx(BodyWrapper$1, __assign({}, rest, { children: children }), void 0); +} +var templateObject_1$3; + +var AlertWrapper = styled.div(templateObject_1$2 || (templateObject_1$2 = __makeTemplateObject(["\n max-width: 460px;\n width: 100%;\n"], ["\n max-width: 460px;\n width: 100%;\n"]))); +function Swap(_a) { + var _this = this; + var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l; + var history = _a.history; + var account = useActiveWeb3React().account; + var loadedUrlParams = useDefaultsFromURLSearch(); + // token warning stuff + var _m = __read([ + useCurrency(loadedUrlParams === null || loadedUrlParams === void 0 ? void 0 : loadedUrlParams.inputCurrencyId), + useCurrency(loadedUrlParams === null || loadedUrlParams === void 0 ? void 0 : loadedUrlParams.outputCurrencyId), + ], 2), loadedInputCurrency = _m[0], loadedOutputCurrency = _m[1]; + var _o = __read(useState(false), 2), dismissTokenWarning = _o[0], setDismissTokenWarning = _o[1]; + var urlLoadedTokens = useMemo(function () { var _a, _b; return (_b = (_a = [loadedInputCurrency, loadedOutputCurrency]) === null || _a === void 0 ? void 0 : _a.filter(function (c) { var _a; return (_a = c === null || c === void 0 ? void 0 : c.isToken) !== null && _a !== void 0 ? _a : false; })) !== null && _b !== void 0 ? _b : []; }, [loadedInputCurrency, loadedOutputCurrency]); + var handleConfirmTokenWarning = useCallback(function () { + setDismissTokenWarning(true); + }, []); + // dismiss warning if all imported tokens are in active lists + var defaultTokens = useAllTokens(); + var importTokensNotInDefault = useMemo(function () { + return urlLoadedTokens && + urlLoadedTokens.filter(function (token) { + return !Boolean(token.address in defaultTokens); + }); + }, [defaultTokens, urlLoadedTokens]); + var theme = useContext(ThemeContext); + // toggle wallet when disconnected + var toggleWalletModal = useWalletModalToggle(); + // for expert mode + var _p = __read(useExpertModeManager(), 1), isExpertMode = _p[0]; + // swap state + var _q = useSwapState(), independentField = _q.independentField, typedValue = _q.typedValue, recipient = _q.recipient; + var _r = useDerivedSwapInfo(), _s = _r.trade, tradeState = _s.state, trade = _s.trade, allowedSlippage = _r.allowedSlippage, currencyBalances = _r.currencyBalances, parsedAmount = _r.parsedAmount, currencies = _r.currencies, swapInputError = _r.inputError; + var _t = useWrapCallback(currencies[Field.INPUT], currencies[Field.OUTPUT], typedValue), wrapType = _t.wrapType, onWrap = _t.execute, wrapInputError = _t.inputError; + var showWrap = wrapType !== WrapType.NOT_APPLICABLE; + var recipientAddress = useENSAddress(recipient).address; + var parsedAmounts = useMemo(function () { + var _a, _b; + return showWrap + ? (_a = {}, + _a[Field.INPUT] = parsedAmount, + _a[Field.OUTPUT] = parsedAmount, + _a) : (_b = {}, + _b[Field.INPUT] = independentField === Field.INPUT ? parsedAmount : trade === null || trade === void 0 ? void 0 : trade.inputAmount, + _b[Field.OUTPUT] = independentField === Field.OUTPUT ? parsedAmount : trade === null || trade === void 0 ? void 0 : trade.outputAmount, + _b); + }, [independentField, parsedAmount, showWrap, trade]); + var _u = __read(useMemo(function () { return [!(trade === null || trade === void 0 ? void 0 : trade.swaps), TradeState.LOADING === tradeState, TradeState.SYNCING === tradeState]; }, [trade, tradeState]), 3), routeNotFound = _u[0], routeIsLoading = _u[1], routeIsSyncing = _u[2]; + var fiatValueInput = useUSDCValue(parsedAmounts[Field.INPUT]); + var fiatValueOutput = useUSDCValue(parsedAmounts[Field.OUTPUT]); + var priceImpact = useMemo(function () { return (routeIsSyncing ? undefined : computeFiatValuePriceImpact(fiatValueInput, fiatValueOutput)); }, [fiatValueInput, fiatValueOutput, routeIsSyncing]); + var _v = useSwapActionHandlers(), onSwitchTokens = _v.onSwitchTokens, onCurrencySelection = _v.onCurrencySelection, onUserInput = _v.onUserInput, onChangeRecipient = _v.onChangeRecipient; + var isValid = !swapInputError; + var dependentField = independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT; + var handleTypeInput = useCallback(function (value) { + onUserInput(Field.INPUT, value); + }, [onUserInput]); + var handleTypeOutput = useCallback(function (value) { + onUserInput(Field.OUTPUT, value); + }, [onUserInput]); + // reset if they close warning without tokens in params + var handleDismissTokenWarning = useCallback(function () { + setDismissTokenWarning(true); + history.push('/swap/'); + }, [history]); + // modal and loading + var _w = __read(useState({ + showConfirm: false, + tradeToConfirm: undefined, + attemptingTxn: false, + swapErrorMessage: undefined, + txHash: undefined, + }), 2), _x = _w[0], showConfirm = _x.showConfirm, tradeToConfirm = _x.tradeToConfirm, swapErrorMessage = _x.swapErrorMessage, attemptingTxn = _x.attemptingTxn, txHash = _x.txHash, setSwapState = _w[1]; + var formattedAmounts = useMemo(function () { + var _a; + var _b, _c, _d, _e; + return (_a = {}, + _a[independentField] = typedValue, + _a[dependentField] = showWrap + ? (_c = (_b = parsedAmounts[independentField]) === null || _b === void 0 ? void 0 : _b.toExact()) !== null && _c !== void 0 ? _c : '' + : (_e = (_d = parsedAmounts[dependentField]) === null || _d === void 0 ? void 0 : _d.toSignificant(6)) !== null && _e !== void 0 ? _e : '', + _a); + }, [dependentField, independentField, parsedAmounts, showWrap, typedValue]); + var userHasSpecifiedInputOutput = Boolean(currencies[Field.INPUT] && currencies[Field.OUTPUT] && ((_b = parsedAmounts[independentField]) === null || _b === void 0 ? void 0 : _b.greaterThan(JSBI.BigInt(0)))); + var approvalOptimizedTrade = useApprovalOptimizedTrade(trade, allowedSlippage); + var approvalOptimizedTradeString = approvalOptimizedTrade instanceof Trade + ? 'V2SwapRouter' + : approvalOptimizedTrade instanceof Trade$2 + ? 'V3SwapRouter' + : 'SwapRouter'; + // check whether the user has approved the router on the input token + var _y = __read(useApproveCallbackFromTrade(approvalOptimizedTrade, allowedSlippage), 2), approvalState = _y[0], approveCallback = _y[1]; + var transactionDeadline = useTransactionDeadline(); + var _z = useERC20PermitFromTrade(approvalOptimizedTrade, allowedSlippage, transactionDeadline), signatureState = _z.state, signatureData = _z.signatureData, gatherPermitSignature = _z.gatherPermitSignature; + var handleApprove = useCallback(function () { return __awaiter(_this, void 0, void 0, function () { + var error_1; + var _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + if (!(signatureState === UseERC20PermitState.NOT_SIGNED && gatherPermitSignature)) return [3 /*break*/, 7]; + _b.label = 1; + case 1: + _b.trys.push([1, 3, , 6]); + return [4 /*yield*/, gatherPermitSignature()]; + case 2: + _b.sent(); + return [3 /*break*/, 6]; + case 3: + error_1 = _b.sent(); + if (!((error_1 === null || error_1 === void 0 ? void 0 : error_1.code) !== 4001)) return [3 /*break*/, 5]; + return [4 /*yield*/, approveCallback()]; + case 4: + _b.sent(); + _b.label = 5; + case 5: return [3 /*break*/, 6]; + case 6: return [3 /*break*/, 9]; + case 7: return [4 /*yield*/, approveCallback()]; + case 8: + _b.sent(); + ReactGA.event({ + category: 'Swap', + action: 'Approve', + label: [approvalOptimizedTradeString, (_a = approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 ? void 0 : approvalOptimizedTrade.inputAmount) === null || _a === void 0 ? void 0 : _a.currency.symbol].join('/'), + }); + _b.label = 9; + case 9: return [2 /*return*/]; + } + }); + }); }, [ + signatureState, + gatherPermitSignature, + approveCallback, + approvalOptimizedTradeString, + (_c = approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 ? void 0 : approvalOptimizedTrade.inputAmount) === null || _c === void 0 ? void 0 : _c.currency.symbol, + ]); + // check if user has gone through approval process, used to show two step buttons, reset on token change + var _0 = __read(useState(false), 2), approvalSubmitted = _0[0], setApprovalSubmitted = _0[1]; + // mark when a user has submitted an approval, reset onTokenSelection for input field + useEffect(function () { + if (approvalState === ApprovalState.PENDING) { + setApprovalSubmitted(true); + } + }, [approvalState, approvalSubmitted]); + var maxInputAmount = useMemo(function () { return maxAmountSpend(currencyBalances[Field.INPUT]); }, [currencyBalances]); + var showMaxButton = Boolean((maxInputAmount === null || maxInputAmount === void 0 ? void 0 : maxInputAmount.greaterThan(0)) && !((_d = parsedAmounts[Field.INPUT]) === null || _d === void 0 ? void 0 : _d.equalTo(maxInputAmount))); + // the callback to execute the swap + var _1 = useSwapCallback(approvalOptimizedTrade, allowedSlippage, recipient, signatureData), swapCallback = _1.callback, swapCallbackError = _1.error; + var handleSwap = useCallback(function () { + if (!swapCallback) { + return; + } + if (priceImpact && !confirmPriceImpactWithoutFee(priceImpact)) { + return; + } + setSwapState({ attemptingTxn: true, tradeToConfirm: tradeToConfirm, showConfirm: showConfirm, swapErrorMessage: undefined, txHash: undefined }); + swapCallback() + .then(function (hash) { + var _a, _b, _c, _d; + setSwapState({ attemptingTxn: false, tradeToConfirm: tradeToConfirm, showConfirm: showConfirm, swapErrorMessage: undefined, txHash: hash }); + ReactGA.event({ + category: 'Swap', + action: recipient === null + ? 'Swap w/o Send' + : (recipientAddress !== null && recipientAddress !== void 0 ? recipientAddress : recipient) === account + ? 'Swap w/o Send + recipient' + : 'Swap w/ Send', + label: [ + approvalOptimizedTradeString, + (_b = (_a = approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 ? void 0 : approvalOptimizedTrade.inputAmount) === null || _a === void 0 ? void 0 : _a.currency) === null || _b === void 0 ? void 0 : _b.symbol, + (_d = (_c = approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 ? void 0 : approvalOptimizedTrade.outputAmount) === null || _c === void 0 ? void 0 : _c.currency) === null || _d === void 0 ? void 0 : _d.symbol, + 'MH', + ].join('/'), + }); + }) + .catch(function (error) { + setSwapState({ + attemptingTxn: false, + tradeToConfirm: tradeToConfirm, + showConfirm: showConfirm, + swapErrorMessage: error.message, + txHash: undefined, + }); + }); + }, [ + swapCallback, + priceImpact, + tradeToConfirm, + showConfirm, + recipient, + recipientAddress, + account, + approvalOptimizedTradeString, + (_f = (_e = approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 ? void 0 : approvalOptimizedTrade.inputAmount) === null || _e === void 0 ? void 0 : _e.currency) === null || _f === void 0 ? void 0 : _f.symbol, + (_h = (_g = approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 ? void 0 : approvalOptimizedTrade.outputAmount) === null || _g === void 0 ? void 0 : _g.currency) === null || _h === void 0 ? void 0 : _h.symbol, + ]); + // errors + var _2 = __read(useState(false), 2), showInverted = _2[0], setShowInverted = _2[1]; + // warnings on the greater of fiat value price impact and execution price impact + var priceImpactSeverity = useMemo(function () { + var executionPriceImpact = trade === null || trade === void 0 ? void 0 : trade.priceImpact; + return warningSeverity(executionPriceImpact && priceImpact + ? executionPriceImpact.greaterThan(priceImpact) + ? executionPriceImpact + : priceImpact + : executionPriceImpact !== null && executionPriceImpact !== void 0 ? executionPriceImpact : priceImpact); + }, [priceImpact, trade]); + var isArgentWallet = useIsArgentWallet(); + // show approve flow when: no error on inputs, not approved or pending, or approved in current session + // never show if price impact is above threshold in non expert mode + var showApproveFlow = !isArgentWallet && + !swapInputError && + (approvalState === ApprovalState.NOT_APPROVED || + approvalState === ApprovalState.PENDING || + (approvalSubmitted && approvalState === ApprovalState.APPROVED)) && + !(priceImpactSeverity > 3 && !isExpertMode); + var handleConfirmDismiss = useCallback(function () { + setSwapState({ showConfirm: false, tradeToConfirm: tradeToConfirm, attemptingTxn: attemptingTxn, swapErrorMessage: swapErrorMessage, txHash: txHash }); + // if there was a tx hash, we want to clear the input + if (txHash) { + onUserInput(Field.INPUT, ''); + } + }, [attemptingTxn, onUserInput, swapErrorMessage, tradeToConfirm, txHash]); + var handleAcceptChanges = useCallback(function () { + setSwapState({ tradeToConfirm: trade, swapErrorMessage: swapErrorMessage, txHash: txHash, attemptingTxn: attemptingTxn, showConfirm: showConfirm }); + }, [attemptingTxn, showConfirm, swapErrorMessage, trade, txHash]); + var handleInputSelect = useCallback(function (inputCurrency) { + setApprovalSubmitted(false); // reset 2 step UI for approvals + onCurrencySelection(Field.INPUT, inputCurrency); + }, [onCurrencySelection]); + var handleMaxInput = useCallback(function () { + maxInputAmount && onUserInput(Field.INPUT, maxInputAmount.toExact()); + ReactGA.event({ + category: 'Swap', + action: 'Max', + }); + }, [maxInputAmount, onUserInput]); + var handleOutputSelect = useCallback(function (outputCurrency) { return onCurrencySelection(Field.OUTPUT, outputCurrency); }, [onCurrencySelection]); + var swapIsUnsupported = useIsSwapUnsupported(currencies[Field.INPUT], currencies[Field.OUTPUT]); + var priceImpactTooHigh = priceImpactSeverity > 3 && !isExpertMode; + return (jsxs(Fragment, { children: [jsx(TokenWarningModal, { isOpen: importTokensNotInDefault.length > 0 && !dismissTokenWarning, tokens: importTokensNotInDefault, onConfirm: handleConfirmTokenWarning, onDismiss: handleDismissTokenWarning }, void 0), jsxs(AppBody, { children: [jsx(SwapHeader, { allowedSlippage: allowedSlippage }, void 0), jsxs(Wrapper$g, __assign({ id: "swap-page" }, { children: [jsx(ConfirmSwapModal, { isOpen: showConfirm, trade: trade, originalTrade: tradeToConfirm, onAcceptChanges: handleAcceptChanges, attemptingTxn: attemptingTxn, txHash: txHash, recipient: recipient, allowedSlippage: allowedSlippage, onConfirm: handleSwap, swapErrorMessage: swapErrorMessage, onDismiss: handleConfirmDismiss }, void 0), jsxs(AutoColumn, __assign({ gap: 'sm' }, { children: [jsxs("div", __assign({ style: { display: 'relative' } }, { children: [jsx(CurrencyInputPanel, { label: independentField === Field.OUTPUT && !showWrap ? jsx(Trans, { children: "From (at most)" }, void 0) : jsx(Trans, { children: "From" }, void 0), value: formattedAmounts[Field.INPUT], showMaxButton: showMaxButton, currency: currencies[Field.INPUT], onUserInput: handleTypeInput, onMax: handleMaxInput, fiatValue: fiatValueInput !== null && fiatValueInput !== void 0 ? fiatValueInput : undefined, onCurrencySelect: handleInputSelect, otherCurrency: currencies[Field.OUTPUT], showCommonBases: true, id: "swap-currency-input", loading: independentField === Field.OUTPUT && routeIsSyncing }, void 0), jsx(ArrowWrapper$1, __assign({ clickable: true }, { children: jsx(ArrowDown, { size: "16", onClick: function () { + setApprovalSubmitted(false); // reset 2 step UI for approvals + onSwitchTokens(); + }, color: currencies[Field.INPUT] && currencies[Field.OUTPUT] ? theme.text1 : theme.text3 }, void 0) }), void 0), jsx(CurrencyInputPanel, { value: formattedAmounts[Field.OUTPUT], onUserInput: handleTypeOutput, label: independentField === Field.INPUT && !showWrap ? jsx(Trans, { children: "To (at least)" }, void 0) : jsx(Trans, { children: "To" }, void 0), showMaxButton: false, hideBalance: false, fiatValue: fiatValueOutput !== null && fiatValueOutput !== void 0 ? fiatValueOutput : undefined, priceImpact: priceImpact, currency: currencies[Field.OUTPUT], onCurrencySelect: handleOutputSelect, otherCurrency: currencies[Field.INPUT], showCommonBases: true, id: "swap-currency-output", loading: independentField === Field.INPUT && routeIsSyncing }, void 0)] }), void 0), recipient !== null && !showWrap ? (jsxs(Fragment, { children: [jsxs(AutoRow, __assign({ justify: "space-between", style: { padding: '0 1rem' } }, { children: [jsx(ArrowWrapper$1, __assign({ clickable: false }, { children: jsx(ArrowDown, { size: "16", color: theme.text2 }, void 0) }), void 0), jsx(LinkStyledButton, __assign({ id: "remove-recipient-button", onClick: function () { return onChangeRecipient(null); } }, { children: jsx(Trans, { children: "- Remove recipient" }, void 0) }), void 0)] }), void 0), jsx(AddressInputPanel, { id: "recipient", value: recipient, onChange: onChangeRecipient }, void 0)] }, void 0)) : null, !showWrap && userHasSpecifiedInputOutput && (trade || routeIsLoading || routeIsSyncing) && (jsx(SwapDetailsDropdown, { trade: trade, syncing: routeIsSyncing, loading: routeIsLoading, showInverted: showInverted, setShowInverted: setShowInverted, allowedSlippage: allowedSlippage }, void 0)), jsxs("div", { children: [swapIsUnsupported ? (jsx(ButtonPrimary, __assign({ disabled: true }, { children: jsx(ThemedText.Main, __assign({ mb: "4px" }, { children: jsx(Trans, { children: "Unsupported Asset" }, void 0) }), void 0) }), void 0)) : !account ? (jsx(ButtonLight, __assign({ onClick: toggleWalletModal }, { children: jsx(Trans, { children: "Connect Wallet" }, void 0) }), void 0)) : showWrap ? (jsx(ButtonPrimary, __assign({ disabled: Boolean(wrapInputError), onClick: onWrap }, { children: wrapInputError ? (jsx(WrapErrorText, { wrapInputError: wrapInputError }, void 0)) : wrapType === WrapType.WRAP ? (jsx(Trans, { children: "Wrap" }, void 0)) : wrapType === WrapType.UNWRAP ? (jsx(Trans, { children: "Unwrap" }, void 0)) : null }), void 0)) : routeNotFound && userHasSpecifiedInputOutput && !routeIsLoading && !routeIsSyncing ? (jsx(GreyCard, __assign({ style: { textAlign: 'center' } }, { children: jsx(ThemedText.Main, __assign({ mb: "4px" }, { children: jsx(Trans, { children: "Insufficient liquidity for this trade." }, void 0) }), void 0) }), void 0)) : showApproveFlow ? (jsx(AutoRow, __assign({ style: { flexWrap: 'nowrap', width: '100%' } }, { children: jsxs(AutoColumn, __assign({ style: { width: '100%' }, gap: "12px" }, { children: [jsx(ButtonConfirmed, __assign({ onClick: handleApprove, disabled: approvalState !== ApprovalState.NOT_APPROVED || + approvalSubmitted || + signatureState === UseERC20PermitState.SIGNED, width: "100%", altDisabledStyle: approvalState === ApprovalState.PENDING, confirmed: approvalState === ApprovalState.APPROVED || signatureState === UseERC20PermitState.SIGNED }, { children: jsxs(AutoRow, __assign({ justify: "space-between", style: { flexWrap: 'nowrap' } }, { children: [jsxs("span", __assign({ style: { display: 'flex', alignItems: 'center' } }, { children: [jsx(CurrencyLogo, { currency: currencies[Field.INPUT], size: '20px', style: { marginRight: '8px', flexShrink: 0 } }, void 0), approvalState === ApprovalState.APPROVED || signatureState === UseERC20PermitState.SIGNED ? (jsxs(Trans, { children: ["You can now trade ", (_j = currencies[Field.INPUT]) === null || _j === void 0 ? void 0 : _j.symbol] }, void 0)) : (jsxs(Trans, { children: ["Allow the Uniswap Protocol to use your ", (_k = currencies[Field.INPUT]) === null || _k === void 0 ? void 0 : _k.symbol] }, void 0))] }), void 0), approvalState === ApprovalState.PENDING ? (jsx(Loader, { stroke: "white" }, void 0)) : (approvalSubmitted && approvalState === ApprovalState.APPROVED) || + signatureState === UseERC20PermitState.SIGNED ? (jsx(CheckCircle, { size: "20", color: theme.green1 }, void 0)) : (jsx(MouseoverTooltip, __assign({ text: jsxs(Trans, { children: ["You must give the Uniswap smart contracts permission to use your", ' ', (_l = currencies[Field.INPUT]) === null || _l === void 0 ? void 0 : _l.symbol, ". You only have to do this once per token."] }, void 0) }, { children: jsx(HelpCircle, { size: "20", color: 'white', style: { marginLeft: '8px' } }, void 0) }), void 0))] }), void 0) }), void 0), jsx(ButtonError, __assign({ onClick: function () { + if (isExpertMode) { + handleSwap(); + } + else { + setSwapState({ + tradeToConfirm: trade, + attemptingTxn: false, + swapErrorMessage: undefined, + showConfirm: true, + txHash: undefined, + }); + } + }, width: "100%", id: "swap-button", disabled: !isValid || + routeIsSyncing || + routeIsLoading || + (approvalState !== ApprovalState.APPROVED && signatureState !== UseERC20PermitState.SIGNED) || + priceImpactTooHigh, error: isValid && priceImpactSeverity > 2 }, { children: jsx(Text$1, __assign({ fontSize: 16, fontWeight: 500 }, { children: priceImpactTooHigh ? (jsx(Trans, { children: "High Price Impact" }, void 0)) : trade && priceImpactSeverity > 2 ? (jsx(Trans, { children: "Swap Anyway" }, void 0)) : (jsx(Trans, { children: "Swap" }, void 0)) }), void 0) }), void 0)] }), void 0) }), void 0)) : (jsx(ButtonError, __assign({ onClick: function () { + if (isExpertMode) { + handleSwap(); + } + else { + setSwapState({ + tradeToConfirm: trade, + attemptingTxn: false, + swapErrorMessage: undefined, + showConfirm: true, + txHash: undefined, + }); + } + }, id: "swap-button", disabled: !isValid || routeIsSyncing || routeIsLoading || priceImpactTooHigh || !!swapCallbackError, error: isValid && priceImpactSeverity > 2 && !swapCallbackError }, { children: jsx(Text$1, __assign({ fontSize: 20, fontWeight: 500 }, { children: swapInputError ? (swapInputError) : routeIsSyncing || routeIsLoading ? (jsx(Trans, { children: "Swap" }, void 0)) : priceImpactSeverity > 2 ? (jsx(Trans, { children: "Swap Anyway" }, void 0)) : priceImpactTooHigh ? (jsx(Trans, { children: "Price Impact Too High" }, void 0)) : (jsx(Trans, { children: "Swap" }, void 0)) }), void 0) }), void 0)), isExpertMode && swapErrorMessage ? jsx(SwapCallbackError, { error: swapErrorMessage }, void 0) : null] }, void 0)] }), void 0)] }), void 0)] }, void 0), jsx(AlertWrapper, { children: jsx(NetworkAlert, {}, void 0) }, void 0), jsx(SwitchLocaleLink, {}, void 0), !swapIsUnsupported ? null : (jsx(UnsupportedCurrencyFooter, { show: swapIsUnsupported, currencies: [currencies[Field.INPUT], currencies[Field.OUTPUT]] }, void 0))] }, void 0)); +} +var templateObject_1$2; + +// Redirects to swap but only replace the pathname +function RedirectPathToSwapOnly(_a) { + var location = _a.location; + return jsx(Redirect, { to: __assign(__assign({}, location), { pathname: '/swap' }) }, void 0); +} +// Redirects from the /swap/:outputCurrency path to the /swap?outputCurrency=:outputCurrency format +function RedirectToSwap(props) { + var search = props.location.search, outputCurrency = props.match.params.outputCurrency; + return (jsx(Redirect, { to: __assign(__assign({}, props.location), { pathname: '/swap', search: search && search.length > 1 + ? search + "&outputCurrency=" + outputCurrency + : "?outputCurrency=" + outputCurrency }) }, void 0)); +} + +// const Vote = lazy(() => import('./Vote')) +var AppWrapper = styled.div(templateObject_1$1 || (templateObject_1$1 = __makeTemplateObject(["\n display: flex;\n flex-flow: column;\n align-items: flex-start;\n"], ["\n display: flex;\n flex-flow: column;\n align-items: flex-start;\n"]))); +var BodyWrapper = styled.div(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n display: flex;\n flex-direction: column;\n width: 100%;\n padding: 120px 16px 0px 16px;\n align-items: center;\n flex: 1;\n z-index: 1;\n\n ", ";\n"], ["\n display: flex;\n flex-direction: column;\n width: 100%;\n padding: 120px 16px 0px 16px;\n align-items: center;\n flex: 1;\n z-index: 1;\n\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToSmall(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n padding: 4rem 8px 16px 8px;\n "], ["\n padding: 4rem 8px 16px 8px;\n "]))); +}); +var HeaderWrapper = styled.div(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n ", "\n width: 100%;\n justify-content: space-between;\n position: fixed;\n top: 0;\n z-index: 2;\n"], ["\n ", "\n width: 100%;\n justify-content: space-between;\n position: fixed;\n top: 0;\n z-index: 2;\n"])), function (_a) { + var theme = _a.theme; + return theme.flexRowNoWrap; +}); +var Marginer = styled.div(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n margin-top: 5rem;\n"], ["\n margin-top: 5rem;\n"]))); +function TopLevelModals() { + var open = useModalOpen(ApplicationModal.ADDRESS_CLAIM); + var toggle = useToggleModal(ApplicationModal.ADDRESS_CLAIM); + return jsx(AddressClaimModal, { isOpen: open, onDismiss: toggle }, void 0); +} +function App() { + return (jsxs(ErrorBoundary, { children: [jsx(Route$3, { component: DarkModeQueryParamReader }, void 0), jsx(Route$3, { component: ApeModeQueryParamReader }, void 0), jsx(Web3ReactManager, { children: jsxs(AppWrapper, { children: [jsx(HeaderWrapper, { children: jsx(Header$2, {}, void 0) }, void 0), jsxs(BodyWrapper, { children: [jsx(Popups, {}, void 0), jsx(Polling, {}, void 0), jsx(TopLevelModals, {}, void 0), jsx(Suspense, __assign({ fallback: jsx(Loader, {}, void 0) }, { children: jsxs(Switch, { children: [jsx(Route$3, { exact: true, strict: true, path: "/swap/:outputCurrency", component: RedirectToSwap }, void 0), jsx(Route$3, { exact: true, strict: true, path: "/swap", component: Swap }, void 0), jsx(Route$3, { component: RedirectPathToSwapOnly }, void 0)] }, void 0) }), void 0), jsx(Marginer, {}, void 0)] }, void 0)] }, void 0) }, void 0)] }, void 0)); +} +var templateObject_1$1, templateObject_2, templateObject_3, templateObject_4, templateObject_5; + +// This optional code is used to register a service worker. +// register() is not called by default. +// This lets the app load faster on subsequent visits in production, and gives +// it offline capabilities. However, it also means that developers (and users) +// will only see deployed updates on subsequent visits to a page, after all the +// existing tabs open on the page have been closed, since previously cached +// resources are updated in the background. +// To learn more about the benefits of this model and instructions on how to +// opt-in, read https://cra.link/PWA +var isLocalhost = Boolean(window.location.hostname === 'localhost' || + // [::1] is the IPv6 localhost address. + window.location.hostname === '[::1]' || + // 127.0.0.0/8 are considered localhost for IPv4. + window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)); +function registerValidSW(swUrl, config) { + navigator.serviceWorker + .register(swUrl) + .then(function (registration) { + registration.onupdatefound = function () { + var installingWorker = registration.installing; + if (installingWorker == null) { + return; + } + installingWorker.onstatechange = function () { + if (installingWorker.state === 'installed') { + if (navigator.serviceWorker.controller) { + // At this point, the updated precached content has been fetched, + // but the previous service worker will still serve the older + // content until all client tabs are closed. + console.log('New content is available and will be used when all ' + + 'tabs for this page are closed. See https://cra.link/PWA.'); + // Execute callback + if (config && config.onUpdate) { + config.onUpdate(registration); + } + } + else { + // At this point, everything has been precached. + // It's the perfect time to display a + // "Content is cached for offline use." message. + console.log('Content is cached for offline use.'); + // Execute callback + if (config && config.onSuccess) { + config.onSuccess(registration); + } + } + } + }; + }; + }) + .catch(function (error) { + console.error('Error during service worker registration:', error); + }); +} +function checkValidServiceWorker(swUrl, config) { + // Check if the service worker can be found. If it can't reload the page. + fetch(swUrl, { + headers: { 'Service-Worker': 'script' }, + }) + .then(function (response) { + // Ensure service worker exists, and that we really are getting a JS file. + var contentType = response.headers.get('content-type'); + if (response.status === 404 || (contentType != null && contentType.indexOf('javascript') === -1)) { + // No service worker found. Probably a different app. Reload the page. + navigator.serviceWorker.ready.then(function (registration) { + registration.unregister().then(function () { + window.location.reload(); + }); + }); + } + else { + // Service worker found. Proceed as normal. + registerValidSW(swUrl, config); + } + }) + .catch(function () { + console.log('No internet connection found. App is running in offline mode.'); + }); +} +function register(config) { + if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { + // The URL constructor is available in all browsers that support SW. + var publicUrl = new URL(process.env.PUBLIC_URL, window.location.href); + if (publicUrl.origin !== window.location.origin) { + // Our service worker won't work if PUBLIC_URL is on a different origin + // from what our page is served on. This might happen if a CDN is used to + // serve assets; see https://github.com/facebook/create-react-app/issues/2374 + return; + } + window.addEventListener('load', function () { + var swUrl = process.env.PUBLIC_URL + "/service-worker.js"; + if (isLocalhost) { + // This is running on localhost. Let's check if a service worker still exists or not. + checkValidServiceWorker(swUrl, config); + // Add some additional logging to localhost, pointing developers to the + // service worker/PWA documentation. + navigator.serviceWorker.ready.then(function () { + console.log('This web app is being served cache-first by a service ' + + 'worker. To learn more, visit https://cra.link/PWA'); + }); + } + else { + // Is not localhost. Just register service worker + registerValidSW(swUrl, config); + } + }); + } +} +function unregister() { + if ('serviceWorker' in navigator) { + navigator.serviceWorker.ready + .then(function (registration) { + registration.unregister(); + }) + .catch(function (error) { + console.error(error.message); + }); + } +} + +var serviceWorkerRegistration = /*#__PURE__*/Object.freeze({ + __proto__: null, + register: register, + unregister: unregister +}); + +// SDN OFAC addresses +var BLOCKED_ADDRESSES = [ + '0x7Db418b5D567A4e0E8c59Ad71BE1FcE48f3E6107', + '0x72a5843cc08275C8171E582972Aa4fDa8C397B2A', + '0x7F19720A857F834887FC9A7bC0a0fBe7Fc7f8102', + '0xA7e5d5A720f06526557c513402f2e6B5fA20b008', + '0x1da5821544e25c636c1417Ba96Ade4Cf6D2f9B5A', + '0x9F4cda013E354b8fC285BF4b9A60460cEe7f7Ea9', + '0x19Aa5Fe80D33a56D56c78e82eA5E50E5d80b4Dff', + '0x2f389cE8bD8ff92De3402FFCe4691d17fC4f6535', + '0xe7aa314c77F4233C18C6CC84384A9247c0cf367B', + '0x7F367cC41522cE07553e823bf3be79A889DEbe1B', + '0xd882cFc20F52f2599D84b8e8D58C7FB62cfE344b', + '0x901bb9583b24D97e995513C6778dc6888AB6870e', + '0x8576aCC5C05D6Ce88f4e49bf65BdF0C62F91353C', + '0xC8a65Fadf0e0dDAf421F28FEAb69Bf6E2E589963', + '0x308eD4B7b49797e1A98D3818bFF6fe5385410370', + '0x67d40EE1A85bf4a4Bb7Ffae16De985e8427B', + '0x6f1ca141a28907f78ebaa64fb83a9088b02a83', + '0x6acdfba02d390b97ac2b2d42a63e85293bcc1', + '0x48549a34ae37b12f6a30566245176994e17c6', + '0x5512d943ed1f7c8a43f3435c85f7ab68b30121', + '0xc455f7fd3e0e12afd51fba5c106909934d8a0e', + '0x3cbded43efdaf0fc77b9c55f6fc9988fcc9b757d', + '0x67d40EE1A85bf4a4Bb7Ffae16De985e8427B6b45', + '0x6f1ca141a28907f78ebaa64fb83a9088b02a8352', + '0x6acdfba02d390b97ac2b2d42a63e85293bcc160e', + '0x48549a34ae37b12f6a30566245176994e17c6b4a', + '0x5512d943ed1f7c8a43f3435c85f7ab68b30121b0', + '0xc455f7fd3e0e12afd51fba5c106909934d8a0e4a', +]; +function Blocklist(_a) { + var children = _a.children; + var account = useActiveWeb3React().account; + var blocked = useMemo(function () { return Boolean(account && BLOCKED_ADDRESSES.indexOf(account) !== -1); }, [account]); + if (blocked) { + return (jsx("div", { children: jsx(Trans, { children: "Blocked address" }, void 0) }, void 0)); + } + return jsx(Fragment, { children: children }, void 0); +} + +var plurals = { + 'af-ZA': af, + 'ar-SA': ar, + 'ca-ES': ca, + 'cs-CZ': cs, + 'da-DK': da, + 'de-DE': de, + 'el-GR': el, + 'en-US': en, + 'es-ES': es, + 'fi-FI': fi, + 'fr-FR': fr, + 'he-IL': he, + 'hu-HU': hu, + 'id-ID': id, + 'it-IT': it, + 'ja-JP': ja, + 'ko-KR': ko, + 'nl-NL': nl, + 'no-NO': no, + 'pl-PL': pl, + 'pt-BR': pt, + 'pt-PT': pt, + 'ro-RO': ro, + 'ru-RU': ru, + 'sr-SP': sr, + 'sv-SE': sv, + 'sw-TZ': sw, + 'tr-TR': tr, + 'uk-UA': uk, + 'vi-VN': vi, + 'zh-CN': zh, + 'zh-TW': zh, + pseudo: en, +}; +function dynamicActivate(locale) { + return __awaiter(this, void 0, void 0, function () { + var catalog, _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + i18n.loadLocaleData(locale, { plurals: function () { return plurals[locale]; } }); + if (!(locale === DEFAULT_LOCALE)) return [3 /*break*/, 1]; + _a = DEFAULT_CATALOG; + return [3 /*break*/, 3]; + case 1: return [4 /*yield*/, import("locales/" + locale)]; + case 2: + _a = _b.sent(); + _b.label = 3; + case 3: + catalog = _a; + i18n.load(locale, catalog.messages); + i18n.activate(locale); + return [2 /*return*/]; + } + }); + }); +} +function Provider(_a) { + var locale = _a.locale, _b = _a.forceRenderAfterLocaleChange, forceRenderAfterLocaleChange = _b === void 0 ? true : _b, onActivate = _a.onActivate, children = _a.children; + useEffect(function () { + dynamicActivate(locale) + .then(function () { return onActivate === null || onActivate === void 0 ? void 0 : onActivate(locale); }) + .catch(function (error) { + console.error('Failed to activate locale', locale, error); + }); + }, [locale, onActivate]); + return (jsx(I18nProvider, __assign({ forceRenderOnLocaleChange: forceRenderAfterLocaleChange, i18n: i18n }, { children: children }), void 0)); +} + +dynamicActivate(initialLocale); +function LanguageProvider(_a) { + var children = _a.children; + var locale = useActiveLocale(); + var _b = __read(useUserLocaleManager(), 2), setUserLocale = _b[1]; + var onActivate = useCallback(function (locale) { + document.documentElement.setAttribute('lang', locale); + setUserLocale(locale); // stores the selected locale to persist across sessions + }, [setUserLocale]); + return (jsx(Provider, __assign({ locale: locale, forceRenderAfterLocaleChange: false, onActivate: onActivate }, { children: children }), void 0)); +} + +var Bundle_OrderBy; +(function (Bundle_OrderBy) { + Bundle_OrderBy["Id"] = "id"; + Bundle_OrderBy["EthPriceUsd"] = "ethPriceUSD"; +})(Bundle_OrderBy || (Bundle_OrderBy = {})); +var Burn_OrderBy; +(function (Burn_OrderBy) { + Burn_OrderBy["Id"] = "id"; + Burn_OrderBy["Transaction"] = "transaction"; + Burn_OrderBy["Pool"] = "pool"; + Burn_OrderBy["Token0"] = "token0"; + Burn_OrderBy["Token1"] = "token1"; + Burn_OrderBy["Timestamp"] = "timestamp"; + Burn_OrderBy["Owner"] = "owner"; + Burn_OrderBy["Origin"] = "origin"; + Burn_OrderBy["Amount"] = "amount"; + Burn_OrderBy["Amount0"] = "amount0"; + Burn_OrderBy["Amount1"] = "amount1"; + Burn_OrderBy["AmountUsd"] = "amountUSD"; + Burn_OrderBy["TickLower"] = "tickLower"; + Burn_OrderBy["TickUpper"] = "tickUpper"; + Burn_OrderBy["LogIndex"] = "logIndex"; +})(Burn_OrderBy || (Burn_OrderBy = {})); +var Collect_OrderBy; +(function (Collect_OrderBy) { + Collect_OrderBy["Id"] = "id"; + Collect_OrderBy["Transaction"] = "transaction"; + Collect_OrderBy["Timestamp"] = "timestamp"; + Collect_OrderBy["Pool"] = "pool"; + Collect_OrderBy["Owner"] = "owner"; + Collect_OrderBy["Amount0"] = "amount0"; + Collect_OrderBy["Amount1"] = "amount1"; + Collect_OrderBy["AmountUsd"] = "amountUSD"; + Collect_OrderBy["TickLower"] = "tickLower"; + Collect_OrderBy["TickUpper"] = "tickUpper"; + Collect_OrderBy["LogIndex"] = "logIndex"; +})(Collect_OrderBy || (Collect_OrderBy = {})); +var Factory_OrderBy; +(function (Factory_OrderBy) { + Factory_OrderBy["Id"] = "id"; + Factory_OrderBy["PoolCount"] = "poolCount"; + Factory_OrderBy["TxCount"] = "txCount"; + Factory_OrderBy["TotalVolumeUsd"] = "totalVolumeUSD"; + Factory_OrderBy["TotalVolumeEth"] = "totalVolumeETH"; + Factory_OrderBy["TotalFeesUsd"] = "totalFeesUSD"; + Factory_OrderBy["TotalFeesEth"] = "totalFeesETH"; + Factory_OrderBy["UntrackedVolumeUsd"] = "untrackedVolumeUSD"; + Factory_OrderBy["TotalValueLockedUsd"] = "totalValueLockedUSD"; + Factory_OrderBy["TotalValueLockedEth"] = "totalValueLockedETH"; + Factory_OrderBy["TotalValueLockedUsdUntracked"] = "totalValueLockedUSDUntracked"; + Factory_OrderBy["TotalValueLockedEthUntracked"] = "totalValueLockedETHUntracked"; + Factory_OrderBy["Owner"] = "owner"; +})(Factory_OrderBy || (Factory_OrderBy = {})); +var Flash_OrderBy; +(function (Flash_OrderBy) { + Flash_OrderBy["Id"] = "id"; + Flash_OrderBy["Transaction"] = "transaction"; + Flash_OrderBy["Timestamp"] = "timestamp"; + Flash_OrderBy["Pool"] = "pool"; + Flash_OrderBy["Sender"] = "sender"; + Flash_OrderBy["Recipient"] = "recipient"; + Flash_OrderBy["Amount0"] = "amount0"; + Flash_OrderBy["Amount1"] = "amount1"; + Flash_OrderBy["AmountUsd"] = "amountUSD"; + Flash_OrderBy["Amount0Paid"] = "amount0Paid"; + Flash_OrderBy["Amount1Paid"] = "amount1Paid"; + Flash_OrderBy["LogIndex"] = "logIndex"; +})(Flash_OrderBy || (Flash_OrderBy = {})); +var Mint_OrderBy; +(function (Mint_OrderBy) { + Mint_OrderBy["Id"] = "id"; + Mint_OrderBy["Transaction"] = "transaction"; + Mint_OrderBy["Timestamp"] = "timestamp"; + Mint_OrderBy["Pool"] = "pool"; + Mint_OrderBy["Token0"] = "token0"; + Mint_OrderBy["Token1"] = "token1"; + Mint_OrderBy["Owner"] = "owner"; + Mint_OrderBy["Sender"] = "sender"; + Mint_OrderBy["Origin"] = "origin"; + Mint_OrderBy["Amount"] = "amount"; + Mint_OrderBy["Amount0"] = "amount0"; + Mint_OrderBy["Amount1"] = "amount1"; + Mint_OrderBy["AmountUsd"] = "amountUSD"; + Mint_OrderBy["TickLower"] = "tickLower"; + Mint_OrderBy["TickUpper"] = "tickUpper"; + Mint_OrderBy["LogIndex"] = "logIndex"; +})(Mint_OrderBy || (Mint_OrderBy = {})); +var OrderDirection; +(function (OrderDirection) { + OrderDirection["Asc"] = "asc"; + OrderDirection["Desc"] = "desc"; +})(OrderDirection || (OrderDirection = {})); +var PoolDayData_OrderBy; +(function (PoolDayData_OrderBy) { + PoolDayData_OrderBy["Id"] = "id"; + PoolDayData_OrderBy["Date"] = "date"; + PoolDayData_OrderBy["Pool"] = "pool"; + PoolDayData_OrderBy["Liquidity"] = "liquidity"; + PoolDayData_OrderBy["SqrtPrice"] = "sqrtPrice"; + PoolDayData_OrderBy["Token0Price"] = "token0Price"; + PoolDayData_OrderBy["Token1Price"] = "token1Price"; + PoolDayData_OrderBy["Tick"] = "tick"; + PoolDayData_OrderBy["FeeGrowthGlobal0X128"] = "feeGrowthGlobal0X128"; + PoolDayData_OrderBy["FeeGrowthGlobal1X128"] = "feeGrowthGlobal1X128"; + PoolDayData_OrderBy["TvlUsd"] = "tvlUSD"; + PoolDayData_OrderBy["VolumeToken0"] = "volumeToken0"; + PoolDayData_OrderBy["VolumeToken1"] = "volumeToken1"; + PoolDayData_OrderBy["VolumeUsd"] = "volumeUSD"; + PoolDayData_OrderBy["FeesUsd"] = "feesUSD"; + PoolDayData_OrderBy["TxCount"] = "txCount"; + PoolDayData_OrderBy["Open"] = "open"; + PoolDayData_OrderBy["High"] = "high"; + PoolDayData_OrderBy["Low"] = "low"; + PoolDayData_OrderBy["Close"] = "close"; +})(PoolDayData_OrderBy || (PoolDayData_OrderBy = {})); +var PoolHourData_OrderBy; +(function (PoolHourData_OrderBy) { + PoolHourData_OrderBy["Id"] = "id"; + PoolHourData_OrderBy["PeriodStartUnix"] = "periodStartUnix"; + PoolHourData_OrderBy["Pool"] = "pool"; + PoolHourData_OrderBy["Liquidity"] = "liquidity"; + PoolHourData_OrderBy["SqrtPrice"] = "sqrtPrice"; + PoolHourData_OrderBy["Token0Price"] = "token0Price"; + PoolHourData_OrderBy["Token1Price"] = "token1Price"; + PoolHourData_OrderBy["Tick"] = "tick"; + PoolHourData_OrderBy["FeeGrowthGlobal0X128"] = "feeGrowthGlobal0X128"; + PoolHourData_OrderBy["FeeGrowthGlobal1X128"] = "feeGrowthGlobal1X128"; + PoolHourData_OrderBy["TvlUsd"] = "tvlUSD"; + PoolHourData_OrderBy["VolumeToken0"] = "volumeToken0"; + PoolHourData_OrderBy["VolumeToken1"] = "volumeToken1"; + PoolHourData_OrderBy["VolumeUsd"] = "volumeUSD"; + PoolHourData_OrderBy["FeesUsd"] = "feesUSD"; + PoolHourData_OrderBy["TxCount"] = "txCount"; + PoolHourData_OrderBy["Open"] = "open"; + PoolHourData_OrderBy["High"] = "high"; + PoolHourData_OrderBy["Low"] = "low"; + PoolHourData_OrderBy["Close"] = "close"; +})(PoolHourData_OrderBy || (PoolHourData_OrderBy = {})); +var Pool_OrderBy; +(function (Pool_OrderBy) { + Pool_OrderBy["Id"] = "id"; + Pool_OrderBy["CreatedAtTimestamp"] = "createdAtTimestamp"; + Pool_OrderBy["CreatedAtBlockNumber"] = "createdAtBlockNumber"; + Pool_OrderBy["Token0"] = "token0"; + Pool_OrderBy["Token1"] = "token1"; + Pool_OrderBy["FeeTier"] = "feeTier"; + Pool_OrderBy["Liquidity"] = "liquidity"; + Pool_OrderBy["SqrtPrice"] = "sqrtPrice"; + Pool_OrderBy["FeeGrowthGlobal0X128"] = "feeGrowthGlobal0X128"; + Pool_OrderBy["FeeGrowthGlobal1X128"] = "feeGrowthGlobal1X128"; + Pool_OrderBy["Token0Price"] = "token0Price"; + Pool_OrderBy["Token1Price"] = "token1Price"; + Pool_OrderBy["Tick"] = "tick"; + Pool_OrderBy["ObservationIndex"] = "observationIndex"; + Pool_OrderBy["VolumeToken0"] = "volumeToken0"; + Pool_OrderBy["VolumeToken1"] = "volumeToken1"; + Pool_OrderBy["VolumeUsd"] = "volumeUSD"; + Pool_OrderBy["UntrackedVolumeUsd"] = "untrackedVolumeUSD"; + Pool_OrderBy["FeesUsd"] = "feesUSD"; + Pool_OrderBy["TxCount"] = "txCount"; + Pool_OrderBy["CollectedFeesToken0"] = "collectedFeesToken0"; + Pool_OrderBy["CollectedFeesToken1"] = "collectedFeesToken1"; + Pool_OrderBy["CollectedFeesUsd"] = "collectedFeesUSD"; + Pool_OrderBy["TotalValueLockedToken0"] = "totalValueLockedToken0"; + Pool_OrderBy["TotalValueLockedToken1"] = "totalValueLockedToken1"; + Pool_OrderBy["TotalValueLockedEth"] = "totalValueLockedETH"; + Pool_OrderBy["TotalValueLockedUsd"] = "totalValueLockedUSD"; + Pool_OrderBy["TotalValueLockedUsdUntracked"] = "totalValueLockedUSDUntracked"; + Pool_OrderBy["LiquidityProviderCount"] = "liquidityProviderCount"; + Pool_OrderBy["PoolHourData"] = "poolHourData"; + Pool_OrderBy["PoolDayData"] = "poolDayData"; + Pool_OrderBy["Mints"] = "mints"; + Pool_OrderBy["Burns"] = "burns"; + Pool_OrderBy["Swaps"] = "swaps"; + Pool_OrderBy["Collects"] = "collects"; + Pool_OrderBy["Ticks"] = "ticks"; +})(Pool_OrderBy || (Pool_OrderBy = {})); +var PositionSnapshot_OrderBy; +(function (PositionSnapshot_OrderBy) { + PositionSnapshot_OrderBy["Id"] = "id"; + PositionSnapshot_OrderBy["Owner"] = "owner"; + PositionSnapshot_OrderBy["Pool"] = "pool"; + PositionSnapshot_OrderBy["Position"] = "position"; + PositionSnapshot_OrderBy["BlockNumber"] = "blockNumber"; + PositionSnapshot_OrderBy["Timestamp"] = "timestamp"; + PositionSnapshot_OrderBy["Liquidity"] = "liquidity"; + PositionSnapshot_OrderBy["DepositedToken0"] = "depositedToken0"; + PositionSnapshot_OrderBy["DepositedToken1"] = "depositedToken1"; + PositionSnapshot_OrderBy["WithdrawnToken0"] = "withdrawnToken0"; + PositionSnapshot_OrderBy["WithdrawnToken1"] = "withdrawnToken1"; + PositionSnapshot_OrderBy["CollectedFeesToken0"] = "collectedFeesToken0"; + PositionSnapshot_OrderBy["CollectedFeesToken1"] = "collectedFeesToken1"; + PositionSnapshot_OrderBy["Transaction"] = "transaction"; + PositionSnapshot_OrderBy["FeeGrowthInside0LastX128"] = "feeGrowthInside0LastX128"; + PositionSnapshot_OrderBy["FeeGrowthInside1LastX128"] = "feeGrowthInside1LastX128"; +})(PositionSnapshot_OrderBy || (PositionSnapshot_OrderBy = {})); +var Position_OrderBy; +(function (Position_OrderBy) { + Position_OrderBy["Id"] = "id"; + Position_OrderBy["Owner"] = "owner"; + Position_OrderBy["Pool"] = "pool"; + Position_OrderBy["Token0"] = "token0"; + Position_OrderBy["Token1"] = "token1"; + Position_OrderBy["TickLower"] = "tickLower"; + Position_OrderBy["TickUpper"] = "tickUpper"; + Position_OrderBy["Liquidity"] = "liquidity"; + Position_OrderBy["DepositedToken0"] = "depositedToken0"; + Position_OrderBy["DepositedToken1"] = "depositedToken1"; + Position_OrderBy["WithdrawnToken0"] = "withdrawnToken0"; + Position_OrderBy["WithdrawnToken1"] = "withdrawnToken1"; + Position_OrderBy["CollectedFeesToken0"] = "collectedFeesToken0"; + Position_OrderBy["CollectedFeesToken1"] = "collectedFeesToken1"; + Position_OrderBy["Transaction"] = "transaction"; + Position_OrderBy["FeeGrowthInside0LastX128"] = "feeGrowthInside0LastX128"; + Position_OrderBy["FeeGrowthInside1LastX128"] = "feeGrowthInside1LastX128"; +})(Position_OrderBy || (Position_OrderBy = {})); +var Swap_OrderBy; +(function (Swap_OrderBy) { + Swap_OrderBy["Id"] = "id"; + Swap_OrderBy["Transaction"] = "transaction"; + Swap_OrderBy["Timestamp"] = "timestamp"; + Swap_OrderBy["Pool"] = "pool"; + Swap_OrderBy["Token0"] = "token0"; + Swap_OrderBy["Token1"] = "token1"; + Swap_OrderBy["Sender"] = "sender"; + Swap_OrderBy["Recipient"] = "recipient"; + Swap_OrderBy["Origin"] = "origin"; + Swap_OrderBy["Amount0"] = "amount0"; + Swap_OrderBy["Amount1"] = "amount1"; + Swap_OrderBy["AmountUsd"] = "amountUSD"; + Swap_OrderBy["SqrtPriceX96"] = "sqrtPriceX96"; + Swap_OrderBy["Tick"] = "tick"; + Swap_OrderBy["LogIndex"] = "logIndex"; +})(Swap_OrderBy || (Swap_OrderBy = {})); +var TickDayData_OrderBy; +(function (TickDayData_OrderBy) { + TickDayData_OrderBy["Id"] = "id"; + TickDayData_OrderBy["Date"] = "date"; + TickDayData_OrderBy["Pool"] = "pool"; + TickDayData_OrderBy["Tick"] = "tick"; + TickDayData_OrderBy["LiquidityGross"] = "liquidityGross"; + TickDayData_OrderBy["LiquidityNet"] = "liquidityNet"; + TickDayData_OrderBy["VolumeToken0"] = "volumeToken0"; + TickDayData_OrderBy["VolumeToken1"] = "volumeToken1"; + TickDayData_OrderBy["VolumeUsd"] = "volumeUSD"; + TickDayData_OrderBy["FeesUsd"] = "feesUSD"; + TickDayData_OrderBy["FeeGrowthOutside0X128"] = "feeGrowthOutside0X128"; + TickDayData_OrderBy["FeeGrowthOutside1X128"] = "feeGrowthOutside1X128"; +})(TickDayData_OrderBy || (TickDayData_OrderBy = {})); +var TickHourData_OrderBy; +(function (TickHourData_OrderBy) { + TickHourData_OrderBy["Id"] = "id"; + TickHourData_OrderBy["PeriodStartUnix"] = "periodStartUnix"; + TickHourData_OrderBy["Pool"] = "pool"; + TickHourData_OrderBy["Tick"] = "tick"; + TickHourData_OrderBy["LiquidityGross"] = "liquidityGross"; + TickHourData_OrderBy["LiquidityNet"] = "liquidityNet"; + TickHourData_OrderBy["VolumeToken0"] = "volumeToken0"; + TickHourData_OrderBy["VolumeToken1"] = "volumeToken1"; + TickHourData_OrderBy["VolumeUsd"] = "volumeUSD"; + TickHourData_OrderBy["FeesUsd"] = "feesUSD"; +})(TickHourData_OrderBy || (TickHourData_OrderBy = {})); +var Tick_OrderBy; +(function (Tick_OrderBy) { + Tick_OrderBy["Id"] = "id"; + Tick_OrderBy["PoolAddress"] = "poolAddress"; + Tick_OrderBy["TickIdx"] = "tickIdx"; + Tick_OrderBy["Pool"] = "pool"; + Tick_OrderBy["LiquidityGross"] = "liquidityGross"; + Tick_OrderBy["LiquidityNet"] = "liquidityNet"; + Tick_OrderBy["Price0"] = "price0"; + Tick_OrderBy["Price1"] = "price1"; + Tick_OrderBy["VolumeToken0"] = "volumeToken0"; + Tick_OrderBy["VolumeToken1"] = "volumeToken1"; + Tick_OrderBy["VolumeUsd"] = "volumeUSD"; + Tick_OrderBy["UntrackedVolumeUsd"] = "untrackedVolumeUSD"; + Tick_OrderBy["FeesUsd"] = "feesUSD"; + Tick_OrderBy["CollectedFeesToken0"] = "collectedFeesToken0"; + Tick_OrderBy["CollectedFeesToken1"] = "collectedFeesToken1"; + Tick_OrderBy["CollectedFeesUsd"] = "collectedFeesUSD"; + Tick_OrderBy["CreatedAtTimestamp"] = "createdAtTimestamp"; + Tick_OrderBy["CreatedAtBlockNumber"] = "createdAtBlockNumber"; + Tick_OrderBy["LiquidityProviderCount"] = "liquidityProviderCount"; + Tick_OrderBy["FeeGrowthOutside0X128"] = "feeGrowthOutside0X128"; + Tick_OrderBy["FeeGrowthOutside1X128"] = "feeGrowthOutside1X128"; +})(Tick_OrderBy || (Tick_OrderBy = {})); +var TokenDayData_OrderBy; +(function (TokenDayData_OrderBy) { + TokenDayData_OrderBy["Id"] = "id"; + TokenDayData_OrderBy["Date"] = "date"; + TokenDayData_OrderBy["Token"] = "token"; + TokenDayData_OrderBy["Volume"] = "volume"; + TokenDayData_OrderBy["VolumeUsd"] = "volumeUSD"; + TokenDayData_OrderBy["UntrackedVolumeUsd"] = "untrackedVolumeUSD"; + TokenDayData_OrderBy["TotalValueLocked"] = "totalValueLocked"; + TokenDayData_OrderBy["TotalValueLockedUsd"] = "totalValueLockedUSD"; + TokenDayData_OrderBy["PriceUsd"] = "priceUSD"; + TokenDayData_OrderBy["FeesUsd"] = "feesUSD"; + TokenDayData_OrderBy["Open"] = "open"; + TokenDayData_OrderBy["High"] = "high"; + TokenDayData_OrderBy["Low"] = "low"; + TokenDayData_OrderBy["Close"] = "close"; +})(TokenDayData_OrderBy || (TokenDayData_OrderBy = {})); +var TokenHourData_OrderBy; +(function (TokenHourData_OrderBy) { + TokenHourData_OrderBy["Id"] = "id"; + TokenHourData_OrderBy["PeriodStartUnix"] = "periodStartUnix"; + TokenHourData_OrderBy["Token"] = "token"; + TokenHourData_OrderBy["Volume"] = "volume"; + TokenHourData_OrderBy["VolumeUsd"] = "volumeUSD"; + TokenHourData_OrderBy["UntrackedVolumeUsd"] = "untrackedVolumeUSD"; + TokenHourData_OrderBy["TotalValueLocked"] = "totalValueLocked"; + TokenHourData_OrderBy["TotalValueLockedUsd"] = "totalValueLockedUSD"; + TokenHourData_OrderBy["PriceUsd"] = "priceUSD"; + TokenHourData_OrderBy["FeesUsd"] = "feesUSD"; + TokenHourData_OrderBy["Open"] = "open"; + TokenHourData_OrderBy["High"] = "high"; + TokenHourData_OrderBy["Low"] = "low"; + TokenHourData_OrderBy["Close"] = "close"; +})(TokenHourData_OrderBy || (TokenHourData_OrderBy = {})); +var Token_OrderBy; +(function (Token_OrderBy) { + Token_OrderBy["Id"] = "id"; + Token_OrderBy["Symbol"] = "symbol"; + Token_OrderBy["Name"] = "name"; + Token_OrderBy["Decimals"] = "decimals"; + Token_OrderBy["TotalSupply"] = "totalSupply"; + Token_OrderBy["Volume"] = "volume"; + Token_OrderBy["VolumeUsd"] = "volumeUSD"; + Token_OrderBy["UntrackedVolumeUsd"] = "untrackedVolumeUSD"; + Token_OrderBy["FeesUsd"] = "feesUSD"; + Token_OrderBy["TxCount"] = "txCount"; + Token_OrderBy["PoolCount"] = "poolCount"; + Token_OrderBy["TotalValueLocked"] = "totalValueLocked"; + Token_OrderBy["TotalValueLockedUsd"] = "totalValueLockedUSD"; + Token_OrderBy["TotalValueLockedUsdUntracked"] = "totalValueLockedUSDUntracked"; + Token_OrderBy["DerivedEth"] = "derivedETH"; + Token_OrderBy["WhitelistPools"] = "whitelistPools"; + Token_OrderBy["TokenDayData"] = "tokenDayData"; +})(Token_OrderBy || (Token_OrderBy = {})); +var Transaction_OrderBy; +(function (Transaction_OrderBy) { + Transaction_OrderBy["Id"] = "id"; + Transaction_OrderBy["BlockNumber"] = "blockNumber"; + Transaction_OrderBy["Timestamp"] = "timestamp"; + Transaction_OrderBy["GasUsed"] = "gasUsed"; + Transaction_OrderBy["GasPrice"] = "gasPrice"; + Transaction_OrderBy["Mints"] = "mints"; + Transaction_OrderBy["Burns"] = "burns"; + Transaction_OrderBy["Swaps"] = "swaps"; + Transaction_OrderBy["Flashed"] = "flashed"; + Transaction_OrderBy["Collects"] = "collects"; +})(Transaction_OrderBy || (Transaction_OrderBy = {})); +var UniswapDayData_OrderBy; +(function (UniswapDayData_OrderBy) { + UniswapDayData_OrderBy["Id"] = "id"; + UniswapDayData_OrderBy["Date"] = "date"; + UniswapDayData_OrderBy["VolumeEth"] = "volumeETH"; + UniswapDayData_OrderBy["VolumeUsd"] = "volumeUSD"; + UniswapDayData_OrderBy["VolumeUsdUntracked"] = "volumeUSDUntracked"; + UniswapDayData_OrderBy["FeesUsd"] = "feesUSD"; + UniswapDayData_OrderBy["TxCount"] = "txCount"; + UniswapDayData_OrderBy["TvlUsd"] = "tvlUSD"; +})(UniswapDayData_OrderBy || (UniswapDayData_OrderBy = {})); +var _SubgraphErrorPolicy_; +(function (_SubgraphErrorPolicy_) { + /** Data will be returned even if the subgraph has indexing errors */ + _SubgraphErrorPolicy_["Allow"] = "allow"; + /** If the subgraph has indexing errors, data will be omitted. The default. */ + _SubgraphErrorPolicy_["Deny"] = "deny"; +})(_SubgraphErrorPolicy_ || (_SubgraphErrorPolicy_ = {})); +var AllV3TicksDocument = "\n query allV3Ticks($poolAddress: String!, $skip: Int!) {\n ticks(\n first: 1000\n skip: $skip\n where: {poolAddress: $poolAddress}\n orderBy: tickIdx\n ) {\n tick: tickIdx\n liquidityNet\n price0\n price1\n }\n}\n "; +var FeeTierDistributionDocument = "\n query feeTierDistribution($token0: String!, $token1: String!) {\n _meta {\n block {\n number\n }\n }\n asToken0: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: {token0: $token0, token1: $token1}\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n asToken1: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: {token0: $token1, token1: $token0}\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n}\n "; +var injectedRtkApi = api$1.injectEndpoints({ + endpoints: function (build) { return ({ + allV3Ticks: build.query({ + query: function (variables) { return ({ document: AllV3TicksDocument, variables: variables }); } + }), + feeTierDistribution: build.query({ + query: function (variables) { return ({ document: FeeTierDistributionDocument, variables: variables }); } + }), + }); }, +}); +injectedRtkApi.useAllV3TicksQuery; injectedRtkApi.useLazyAllV3TicksQuery; injectedRtkApi.useFeeTierDistributionQuery; injectedRtkApi.useLazyFeeTierDistributionQuery; + +// tag that should be applied to queries that need to be invalidated when the chain changes +var CHAIN_TAG = 'Chain'; +// enhanced api to provide/invalidate tags +var api = injectedRtkApi.enhanceEndpoints({ + addTagTypes: [CHAIN_TAG], + endpoints: { + allV3Ticks: { + providesTags: [CHAIN_TAG], + }, + feeTierDistribution: { + providesTags: [CHAIN_TAG], + }, + }, +}); +api.useAllV3TicksQuery; api.useFeeTierDistributionQuery; + +/** + * Returns the input chain ID if chain is supported. If not, return undefined + * @param chainId a chain ID, which will be returned if it is a supported chain ID + */ +function supportedChainId(chainId) { + if (chainId in SupportedChainId) { + return chainId; + } + return undefined; +} + +function useQueryCacheInvalidator() { + var dispatch = useAppDispatch(); + // subscribe to `chainId` changes in the redux store rather than Web3 + // this will ensure that when `invalidateTags` is called, the latest + // `chainId` is available in redux to build the subgraph url + var chainId = useAppSelector(function (state) { return state.application.chainId; }); + useEffect(function () { + dispatch(api.util.invalidateTags([CHAIN_TAG])); + }, [chainId, dispatch]); +} +function Updater$5() { + var _a = useActiveWeb3React(), chainId = _a.chainId, library = _a.library; + var dispatch = useAppDispatch(); + var windowVisible = useIsWindowVisible(); + var _b = __read(useState(chainId), 2), activeChainId = _b[0], setActiveChainId = _b[1]; + useQueryCacheInvalidator(); + useEffect(function () { + if (library && chainId && windowVisible) { + setActiveChainId(chainId); + } + }, [dispatch, chainId, library, windowVisible]); + var debouncedChainId = useDebounce(activeChainId, 100); + useEffect(function () { + var _a; + var chainId = debouncedChainId ? (_a = supportedChainId(debouncedChainId)) !== null && _a !== void 0 ? _a : null : null; + dispatch(updateChainId({ chainId: chainId })); + }, [dispatch, debouncedChainId]); + return null; +} + +function Updater$4() { + var _a = useActiveWeb3React(), chainId = _a.chainId, library = _a.library; + var dispatch = useAppDispatch(); + var isWindowVisible = useIsWindowVisible(); + // get all loaded lists, and the active urls + var lists = useAllLists(); + var activeListUrls = useActiveListUrls(); + var fetchList = useFetchListCallback(); + var fetchAllListsCallback = useCallback(function () { + if (!isWindowVisible) + return; + Object.keys(lists).forEach(function (url) { + return fetchList(url).catch(function (error) { return console.debug('interval list fetching error', error); }); + }); + }, [fetchList, isWindowVisible, lists]); + useEffect(function () { + if (chainId && [SupportedChainId.OPTIMISM, SupportedChainId.OPTIMISTIC_KOVAN].includes(chainId)) { + dispatch(enableList(OPTIMISM_LIST)); + } + if (chainId && [SupportedChainId.ARBITRUM_ONE, SupportedChainId.ARBITRUM_RINKEBY].includes(chainId)) { + dispatch(enableList(ARBITRUM_LIST)); + } + }, [chainId, dispatch]); + // fetch all lists every 10 minutes, but only after we initialize library + useInterval(fetchAllListsCallback, library ? 1000 * 60 * 10 : null); + // whenever a list is not loaded and not loading, try again to load it + useEffect(function () { + Object.keys(lists).forEach(function (listUrl) { + var list = lists[listUrl]; + if (!list.current && !list.loadingRequestId && !list.error) { + fetchList(listUrl).catch(function (error) { return console.debug('list added fetching error', error); }); + } + }); + }, [dispatch, fetchList, library, lists]); + // if any lists from unsupported lists are loaded, check them too (in case new updates since last visit) + useEffect(function () { + UNSUPPORTED_LIST_URLS.forEach(function (listUrl) { + var list = lists[listUrl]; + if (!list || (!list.current && !list.loadingRequestId && !list.error)) { + fetchList(listUrl).catch(function (error) { return console.debug('list added fetching error', error); }); + } + }); + }, [dispatch, fetchList, library, lists]); + // automatically update lists if versions are minor/patch + useEffect(function () { + Object.keys(lists).forEach(function (listUrl) { + var list = lists[listUrl]; + if (list.current && list.pendingUpdate) { + var bump = getVersionUpgrade(list.current.version, list.pendingUpdate.version); + switch (bump) { + case VersionUpgrade.NONE: + throw new Error('unexpected no version bump'); + case VersionUpgrade.PATCH: + case VersionUpgrade.MINOR: + var min = minVersionBump(list.current.tokens, list.pendingUpdate.tokens); + // automatically update minor/patch as long as bump matches the min update + if (bump >= min) { + dispatch(acceptListUpdate(listUrl)); + } + else { + console.error("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"); + } + break; + // update any active or inactive lists + case VersionUpgrade.MAJOR: + dispatch(acceptListUpdate(listUrl)); + } + } + }); + }, [dispatch, lists, activeListUrls]); + return null; +} + +function Updater$3() { + var dispatch = useAppDispatch(); + var state = useAppSelector(function (state) { return state.logs; }); + var _a = useActiveWeb3React(), chainId = _a.chainId, library = _a.library; + var blockNumber = useBlockNumber(); + var filtersNeedFetch = useMemo(function () { + if (!chainId || typeof blockNumber !== 'number') + return []; + var active = state[chainId]; + if (!active) + return []; + return Object.keys(active) + .filter(function (key) { + var _a = active[key], fetchingBlockNumber = _a.fetchingBlockNumber, results = _a.results, listeners = _a.listeners; + if (listeners === 0) + return false; + if (typeof fetchingBlockNumber === 'number' && fetchingBlockNumber >= blockNumber) + return false; + if (results && typeof results.blockNumber === 'number' && results.blockNumber >= blockNumber) + return false; + return true; + }) + .map(function (key) { return keyToFilter(key); }); + }, [blockNumber, chainId, state]); + useEffect(function () { + if (!library || !chainId || typeof blockNumber !== 'number' || filtersNeedFetch.length === 0) + return; + dispatch(fetchingLogs({ chainId: chainId, filters: filtersNeedFetch, blockNumber: blockNumber })); + filtersNeedFetch.forEach(function (filter) { + library + .getLogs(__assign(__assign({}, filter), { fromBlock: 0, toBlock: blockNumber })) + .then(function (logs) { + dispatch(fetchedLogs({ + chainId: chainId, + filter: filter, + results: { logs: logs, blockNumber: blockNumber }, + })); + }) + .catch(function (error) { + console.error('Failed to get logs', filter, error); + dispatch(fetchedLogsError({ + chainId: chainId, + filter: filter, + blockNumber: blockNumber, + })); + }); + }); + }, [blockNumber, chainId, dispatch, filtersNeedFetch, library]); + return null; +} + +function wait(ms) { + return new Promise(function (resolve) { return setTimeout(resolve, ms); }); +} +function waitRandom(min, max) { + return wait(min + Math.round(Math.random() * Math.max(0, max - min))); +} +/** + * This error is thrown if the function is cancelled before completing + */ +var CancelledError = /** @class */ (function (_super) { + __extends(CancelledError, _super); + function CancelledError() { + var _this = _super.call(this, 'Cancelled') || this; + _this.isCancelledError = true; + return _this; + } + return CancelledError; +}(Error)); +/** + * Throw this error if the function should retry + */ +var RetryableError = /** @class */ (function (_super) { + __extends(RetryableError, _super); + function RetryableError() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.isRetryableError = true; + return _this; + } + return RetryableError; +}(Error)); +/** + * Retries the function that returns the promise until the promise successfully resolves up to n retries + * @param fn function to retry + * @param n how many times to retry + * @param minWait min wait between retries in ms + * @param maxWait max wait between retries in ms + */ +function retry(fn, _a) { + var _this = this; + var n = _a.n, minWait = _a.minWait, maxWait = _a.maxWait; + var completed = false; + var rejectCancelled; + var promise = new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () { + var result, error_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + rejectCancelled = reject; + _a.label = 1; + case 1: + result = void 0; + _a.label = 2; + case 2: + _a.trys.push([2, 4, , 5]); + return [4 /*yield*/, fn()]; + case 3: + result = _a.sent(); + if (!completed) { + resolve(result); + completed = true; + } + return [3 /*break*/, 7]; + case 4: + error_1 = _a.sent(); + if (completed) { + return [3 /*break*/, 7]; + } + if (n <= 0 || !error_1.isRetryableError) { + reject(error_1); + completed = true; + return [3 /*break*/, 7]; + } + n--; + return [3 /*break*/, 5]; + case 5: return [4 /*yield*/, waitRandom(minWait, maxWait)]; + case 6: + _a.sent(); + return [3 /*break*/, 1]; + case 7: return [2 /*return*/]; + } + }); + }); }); + return { + promise: promise, + cancel: function () { + if (completed) + return; + completed = true; + rejectCancelled(new CancelledError()); + }, + }; +} + +var _a; +function shouldCheck(lastBlockNumber, tx) { + if (tx.receipt) + return false; + if (!tx.lastCheckedBlockNumber) + return true; + var blocksSinceCheck = lastBlockNumber - tx.lastCheckedBlockNumber; + if (blocksSinceCheck < 1) + return false; + var minutesPending = (new Date().getTime() - tx.addedTime) / ms(templateObject_1 || (templateObject_1 = __makeTemplateObject(["1m"], ["1m"]))); + if (minutesPending > 60) { + // every 10 blocks if pending longer than an hour + return blocksSinceCheck > 9; + } + else if (minutesPending > 5) { + // every 3 blocks if pending longer than 5 minutes + return blocksSinceCheck > 2; + } + else { + // otherwise every block + return true; + } +} +var RETRY_OPTIONS_BY_CHAIN_ID = (_a = {}, + _a[SupportedChainId.ARBITRUM_ONE] = { n: 10, minWait: 250, maxWait: 1000 }, + _a[SupportedChainId.ARBITRUM_RINKEBY] = { n: 10, minWait: 250, maxWait: 1000 }, + _a[SupportedChainId.OPTIMISTIC_KOVAN] = { n: 10, minWait: 250, maxWait: 1000 }, + _a[SupportedChainId.OPTIMISM] = { n: 10, minWait: 250, maxWait: 1000 }, + _a); +var DEFAULT_RETRY_OPTIONS = { n: 1, minWait: 0, maxWait: 0 }; +function Updater$2(_a) { + var pendingTransactions = _a.pendingTransactions, onCheck = _a.onCheck, onReceipt = _a.onReceipt; + var _b = useActiveWeb3React(), chainId = _b.chainId, library = _b.library; + var lastBlockNumber = useBlockNumber(); + var fastForwardBlockNumber = useFastForwardBlockNumber(); + var getReceipt = useCallback(function (hash) { + var _a; + if (!library || !chainId) + throw new Error('No library or chainId'); + var retryOptions = (_a = RETRY_OPTIONS_BY_CHAIN_ID[chainId]) !== null && _a !== void 0 ? _a : DEFAULT_RETRY_OPTIONS; + return retry(function () { + return library.getTransactionReceipt(hash).then(function (receipt) { + if (receipt === null) { + console.debug("Retrying tranasaction receipt for " + hash); + throw new RetryableError(); + } + return receipt; + }); + }, retryOptions); + }, [chainId, library]); + useEffect(function () { + if (!chainId || !library || !lastBlockNumber) + return; + var cancels = Object.keys(pendingTransactions) + .filter(function (hash) { return shouldCheck(lastBlockNumber, pendingTransactions[hash]); }) + .map(function (hash) { + var _a = getReceipt(hash), promise = _a.promise, cancel = _a.cancel; + promise + .then(function (receipt) { + if (receipt) { + onReceipt({ chainId: chainId, hash: hash, receipt: receipt }); + } + else { + onCheck({ chainId: chainId, hash: hash, blockNumber: lastBlockNumber }); + } + }) + .catch(function (error) { + if (!error.isCancelledError) { + console.warn("Failed to get transaction receipt for " + hash, error); + } + }); + return cancel; + }); + return function () { + cancels.forEach(function (cancel) { return cancel(); }); + }; + }, [chainId, library, lastBlockNumber, getReceipt, fastForwardBlockNumber, onReceipt, onCheck, pendingTransactions]); + return null; +} +var templateObject_1; + +function Updater$1() { + var chainId = useActiveWeb3React().chainId; + var addPopup = useAddPopup(); + // speed up popup dismisall time if on L2 + var isL2 = Boolean(chainId && L2_CHAIN_IDS.includes(chainId)); + var dispatch = useAppDispatch(); + var onCheck = useCallback(function (_a) { + var chainId = _a.chainId, hash = _a.hash, blockNumber = _a.blockNumber; + return dispatch(checkedTransaction({ chainId: chainId, hash: hash, blockNumber: blockNumber })); + }, [dispatch]); + var onReceipt = useCallback(function (_a) { + var chainId = _a.chainId, hash = _a.hash, receipt = _a.receipt; + dispatch(finalizeTransaction({ + chainId: chainId, + hash: hash, + receipt: { + blockHash: receipt.blockHash, + blockNumber: receipt.blockNumber, + contractAddress: receipt.contractAddress, + from: receipt.from, + status: receipt.status, + to: receipt.to, + transactionHash: receipt.transactionHash, + transactionIndex: receipt.transactionIndex, + }, + })); + addPopup({ + txn: { hash: hash }, + }, hash, isL2 ? L2_TXN_DISMISS_MS : DEFAULT_TXN_DISMISS_MS); + }, [addPopup, dispatch, isL2]); + var state = useAppSelector(function (state) { return state.transactions; }); + var pendingTransactions = useMemo(function () { var _a; return (chainId ? (_a = state[chainId]) !== null && _a !== void 0 ? _a : {} : {}); }, [chainId, state]); + return jsx(Updater$2, { pendingTransactions: pendingTransactions, onCheck: onCheck, onReceipt: onReceipt }, void 0); +} + +function Updater() { + var dispatch = useAppDispatch(); + // keep dark mode in sync with the system + useEffect(function () { + var darkHandler = function (match) { + dispatch(updateMatchesDarkMode({ matchesDarkMode: match.matches })); + }; + var match = window === null || window === void 0 ? void 0 : window.matchMedia('(prefers-color-scheme: dark)'); + dispatch(updateMatchesDarkMode({ matchesDarkMode: match.matches })); + if (match === null || match === void 0 ? void 0 : match.addListener) { + match === null || match === void 0 ? void 0 : match.addListener(darkHandler); + } + else if (match === null || match === void 0 ? void 0 : match.addEventListener) { + match === null || match === void 0 ? void 0 : match.addEventListener('change', darkHandler); + } + return function () { + if (match === null || match === void 0 ? void 0 : match.removeListener) { + match === null || match === void 0 ? void 0 : match.removeListener(darkHandler); + } + else if (match === null || match === void 0 ? void 0 : match.removeEventListener) { + match === null || match === void 0 ? void 0 : match.removeEventListener('change', darkHandler); + } + }; + }, [dispatch]); + return null; +} + +var initialStyles = { + width: '200vw', + height: '200vh', + transform: 'translate(-50vw, -100vh)', + backgroundBlendMode: '', +}; +var backgroundResetStyles = { + width: '100vw', + height: '100vh', + transform: 'unset', + backgroundBlendMode: '', +}; +var backgroundRadialGradientElement = document.getElementById('background-radial-gradient'); +var setBackground = function (newValues) { + return Object.entries(newValues).forEach(function (_a) { + var _b = __read(_a, 2), key = _b[0], value = _b[1]; + if (backgroundRadialGradientElement) { + backgroundRadialGradientElement.style[key] = value; + } + }); +}; +function RadialGradientByChainUpdater() { + var chainId = useActiveWeb3React().chainId; + var _a = __read(useDarkModeManager(), 1), darkMode = _a[0]; + // manage background color + useEffect(function () { + if (!backgroundRadialGradientElement) { + return; + } + switch (chainId) { + case SupportedChainId.ARBITRUM_ONE: + case SupportedChainId.ARBITRUM_RINKEBY: + setBackground(backgroundResetStyles); + var arbitrumLightGradient = 'radial-gradient(150% 100% at 50% 0%, #CDE8FB 0%, #FCF3F9 50%, #FFFFFF 100%)'; + var arbitrumDarkGradient = 'radial-gradient(150% 100% at 50% 0%, #0A294B 0%, #221E30 50%, #1F2128 100%)'; + backgroundRadialGradientElement.style.background = darkMode ? arbitrumDarkGradient : arbitrumLightGradient; + break; + case SupportedChainId.OPTIMISM: + case SupportedChainId.OPTIMISTIC_KOVAN: + setBackground(backgroundResetStyles); + var optimismLightGradient = 'radial-gradient(150% 100% at 50% 0%, #FFFBF2 2%, #FFF4F9 53%, #FFFFFF 100%)'; + var optimismDarkGradient = 'radial-gradient(150% 100% at 50% 0%, #3E2E38 2%, #2C1F2D 53%, #1F2128 100%)'; + backgroundRadialGradientElement.style.background = darkMode ? optimismDarkGradient : optimismLightGradient; + break; + case SupportedChainId.POLYGON: + case SupportedChainId.POLYGON_MUMBAI: + setBackground(backgroundResetStyles); + var polygonLightGradient = 'radial-gradient(153.32% 100% at 47.26% 0%, rgba(130, 71, 229, 0.0864) 0%, rgba(0, 41, 255, 0.06) 48.19%, rgba(0, 41, 255, 0.012) 100%), #FFFFFF'; + var polygonDarkGradient = 'radial-gradient(150.6% 98.22% at 48.06% 0%, rgba(130, 71, 229, 0.6) 0%, rgba(200, 168, 255, 0) 100%), #1F2128'; + backgroundRadialGradientElement.style.background = darkMode ? polygonDarkGradient : polygonLightGradient; + backgroundRadialGradientElement.style.backgroundBlendMode = darkMode ? 'overlay,normal' : 'multiply,normal'; + break; + default: + setBackground(initialStyles); + backgroundRadialGradientElement.style.background = ''; + } + }, [darkMode, chainId]); + return null; +} + +function Updaters() { + return (jsxs(Fragment, { children: [jsx(RadialGradientByChainUpdater, {}, void 0), jsx(Updater$4, {}, void 0), jsx(Updater, {}, void 0), jsx(Updater$5, {}, void 0), jsx(Updater$1, {}, void 0), jsx(BlockUpdater, {}, void 0), jsx(MulticallUpdater, {}, void 0), jsx(Updater$3, {}, void 0)] }, void 0)); +} + +var Web3ProviderNetwork = createWeb3ReactRoot(NetworkContextName); +var Providers = function (props) { return (jsx(Provider$1, __assign({ store: store }, { children: jsx(HashRouter, { children: jsx(LanguageProvider, { children: jsx(Web3ReactProvider, __assign({ getLibrary: getLibrary }, { children: jsx(Web3ProviderNetwork, __assign({ getLibrary: getLibrary }, { children: jsxs(Blocklist, { children: [jsx(Updaters, {}, void 0), jsxs(ThemeProvider, { children: [jsx(ThemedGlobalStyle, {}, void 0), props.children] }, void 0)] }, void 0) }), void 0) }), void 0) }, void 0) }, void 0) }), void 0)); }; + +var $schema = "http://json-schema.org/draft-07/schema#"; +var $id = "https://uniswap.org/tokenlist.schema.json"; +var title = "Uniswap Token List"; +var description = "Schema for lists of tokens compatible with the Uniswap Interface"; +var definitions = { + Version: { + type: "object", + description: "The version of the list, used in change detection", + examples: [ + { + major: 1, + minor: 0, + patch: 0 + } + ], + additionalProperties: false, + properties: { + major: { + type: "integer", + description: "The major version of the list. Must be incremented when tokens are removed from the list or token addresses are changed.", + minimum: 0, + examples: [ + 1, + 2 + ] + }, + minor: { + type: "integer", + description: "The minor version of the list. Must be incremented when tokens are added to the list.", + minimum: 0, + examples: [ + 0, + 1 + ] + }, + patch: { + type: "integer", + description: "The patch version of the list. Must be incremented for any changes to the list.", + minimum: 0, + examples: [ + 0, + 1 + ] + } + }, + required: [ + "major", + "minor", + "patch" + ] + }, + TagIdentifier: { + type: "string", + description: "The unique identifier of a tag", + minLength: 1, + maxLength: 10, + pattern: "^[\\w]+$", + examples: [ + "compound", + "stablecoin" + ] + }, + ExtensionIdentifier: { + type: "string", + description: "The name of a token extension property", + minLength: 1, + maxLength: 40, + pattern: "^[\\w]+$", + examples: [ + "color", + "is_fee_on_transfer", + "aliases" + ] + }, + ExtensionMap: { + type: "object", + description: "An object containing any arbitrary or vendor-specific token metadata", + maxProperties: 10, + propertyNames: { + $ref: "#/definitions/ExtensionIdentifier" + }, + additionalProperties: { + $ref: "#/definitions/ExtensionValue" + }, + examples: [ + { + color: "#000000", + is_verified_by_me: true + }, + { + "x-bridged-addresses-by-chain": { + "1": { + bridgeAddress: "0x4200000000000000000000000000000000000010", + tokenAddress: "0x4200000000000000000000000000000000000010" + } + } + } + ] + }, + ExtensionPrimitiveValue: { + anyOf: [ + { + type: "string", + minLength: 1, + maxLength: 42, + examples: [ + "#00000" + ] + }, + { + type: "boolean", + examples: [ + true + ] + }, + { + type: "number", + examples: [ + 15 + ] + }, + { + type: "null" + } + ] + }, + ExtensionValue: { + anyOf: [ + { + $ref: "#/definitions/ExtensionPrimitiveValue" + }, + { + type: "object", + maxProperties: 10, + propertyNames: { + $ref: "#/definitions/ExtensionIdentifier" + }, + additionalProperties: { + $ref: "#/definitions/ExtensionValueInner0" + } + } + ] + }, + ExtensionValueInner0: { + anyOf: [ + { + $ref: "#/definitions/ExtensionPrimitiveValue" + }, + { + type: "object", + maxProperties: 10, + propertyNames: { + $ref: "#/definitions/ExtensionIdentifier" + }, + additionalProperties: { + $ref: "#/definitions/ExtensionValueInner1" + } + } + ] + }, + ExtensionValueInner1: { + anyOf: [ + { + $ref: "#/definitions/ExtensionPrimitiveValue" + } + ] + }, + TagDefinition: { + type: "object", + description: "Definition of a tag that can be associated with a token via its identifier", + additionalProperties: false, + properties: { + name: { + type: "string", + description: "The name of the tag", + pattern: "^[ \\w]+$", + minLength: 1, + maxLength: 20 + }, + description: { + type: "string", + description: "A user-friendly description of the tag", + pattern: "^[ \\w\\.,:]+$", + minLength: 1, + maxLength: 200 + } + }, + required: [ + "name", + "description" + ], + examples: [ + { + name: "Stablecoin", + description: "A token with value pegged to another asset" + } + ] + }, + TokenInfo: { + type: "object", + description: "Metadata for a single token in a token list", + additionalProperties: false, + properties: { + chainId: { + type: "integer", + description: "The chain ID of the Ethereum network where this token is deployed", + minimum: 1, + examples: [ + 1, + 42 + ] + }, + address: { + type: "string", + description: "The checksummed address of the token on the specified chain ID", + pattern: "^0x[a-fA-F0-9]{40}$", + examples: [ + "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48" + ] + }, + decimals: { + type: "integer", + description: "The number of decimals for the token balance", + minimum: 0, + maximum: 255, + examples: [ + 18 + ] + }, + name: { + type: "string", + description: "The name of the token", + minLength: 1, + maxLength: 40, + pattern: "^[ \\w.'+\\-%/À-ÖØ-öø-ÿ:&\\[\\]\\(\\)]+$", + examples: [ + "USD Coin" + ] + }, + symbol: { + type: "string", + description: "The symbol for the token; must be alphanumeric", + pattern: "^[a-zA-Z0-9+\\-%/$.]+$", + minLength: 1, + maxLength: 20, + examples: [ + "USDC" + ] + }, + logoURI: { + type: "string", + description: "A URI to the token logo asset; if not set, interface will attempt to find a logo based on the token address; suggest SVG or PNG of size 64x64", + format: "uri", + examples: [ + "ipfs://QmXfzKRvjZz3u5JRgC4v5mGVbm9ahrUiB4DgzHBsnWbTMM" + ] + }, + tags: { + type: "array", + description: "An array of tag identifiers associated with the token; tags are defined at the list level", + items: { + $ref: "#/definitions/TagIdentifier" + }, + maxItems: 10, + examples: [ + "stablecoin", + "compound" + ] + }, + extensions: { + $ref: "#/definitions/ExtensionMap" + } + }, + required: [ + "chainId", + "address", + "decimals", + "name", + "symbol" + ] + } +}; +var type = "object"; +var additionalProperties = false; +var properties = { + name: { + type: "string", + description: "The name of the token list", + minLength: 1, + maxLength: 20, + pattern: "^[\\w ]+$", + examples: [ + "My Token List" + ] + }, + timestamp: { + type: "string", + format: "date-time", + description: "The timestamp of this list version; i.e. when this immutable version of the list was created" + }, + version: { + $ref: "#/definitions/Version" + }, + tokens: { + type: "array", + description: "The list of tokens included in the list", + items: { + $ref: "#/definitions/TokenInfo" + }, + minItems: 1, + maxItems: 10000 + }, + keywords: { + type: "array", + description: "Keywords associated with the contents of the list; may be used in list discoverability", + items: { + type: "string", + description: "A keyword to describe the contents of the list", + minLength: 1, + maxLength: 20, + pattern: "^[\\w ]+$", + examples: [ + "compound", + "lending", + "personal tokens" + ] + }, + maxItems: 20, + uniqueItems: true + }, + tags: { + type: "object", + description: "A mapping of tag identifiers to their name and description", + propertyNames: { + $ref: "#/definitions/TagIdentifier" + }, + additionalProperties: { + $ref: "#/definitions/TagDefinition" + }, + maxProperties: 20, + examples: [ + { + stablecoin: { + name: "Stablecoin", + description: "A token with value pegged to another asset" + } + } + ] + }, + logoURI: { + type: "string", + description: "A URI for the logo of the token list; prefer SVG or PNG of size 256x256", + format: "uri", + examples: [ + "ipfs://QmXfzKRvjZz3u5JRgC4v5mGVbm9ahrUiB4DgzHBsnWbTMM" + ] + } +}; +var required = [ + "name", + "timestamp", + "version", + "tokens" +]; +var tokenlist_schema = { + $schema: $schema, + $id: $id, + title: title, + description: description, + definitions: definitions, + type: type, + additionalProperties: additionalProperties, + properties: properties, + required: required +}; + +var tokenlist_schema$1 = /*#__PURE__*/Object.freeze({ + __proto__: null, + $schema: $schema, + $id: $id, + title: title, + description: description, + definitions: definitions, + type: type, + additionalProperties: additionalProperties, + properties: properties, + required: required, + 'default': tokenlist_schema +}); + +// from routing-api (https://github.com/Uniswap/routing-api/blob/main/lib/handlers/quote/quote.ts#L243-L311) +function transformSwapRouteToGetQuoteResult(type, amount, _a) { + var e_1, _b; + var quote = _a.quote, quoteGasAdjusted = _a.quoteGasAdjusted, route = _a.route, estimatedGasUsed = _a.estimatedGasUsed, estimatedGasUsedQuoteToken = _a.estimatedGasUsedQuoteToken, estimatedGasUsedUSD = _a.estimatedGasUsedUSD, gasPriceWei = _a.gasPriceWei, methodParameters = _a.methodParameters, blockNumber = _a.blockNumber; + var routeResponse = []; + try { + for (var route_1 = __values(route), route_1_1 = route_1.next(); !route_1_1.done; route_1_1 = route_1.next()) { + var subRoute = route_1_1.value; + var amount_1 = subRoute.amount, quote_1 = subRoute.quote, tokenPath = subRoute.tokenPath; + if (subRoute.protocol === Protocol.V3) { + var pools = subRoute.route.pools; + var curRoute = []; + for (var i = 0; i < pools.length; i++) { + var nextPool = pools[i]; + var tokenIn = tokenPath[i]; + var tokenOut = tokenPath[i + 1]; + var edgeAmountIn = undefined; + if (i === 0) { + edgeAmountIn = type === 'exactIn' ? amount_1.quotient.toString() : quote_1.quotient.toString(); + } + var edgeAmountOut = undefined; + if (i === pools.length - 1) { + edgeAmountOut = type === 'exactIn' ? quote_1.quotient.toString() : amount_1.quotient.toString(); + } + curRoute.push({ + type: 'v3-pool', + tokenIn: { + chainId: tokenIn.chainId, + decimals: tokenIn.decimals, + address: tokenIn.address, + symbol: tokenIn.symbol, + }, + tokenOut: { + chainId: tokenOut.chainId, + decimals: tokenOut.decimals, + address: tokenOut.address, + symbol: tokenOut.symbol, + }, + fee: nextPool.fee.toString(), + liquidity: nextPool.liquidity.toString(), + sqrtRatioX96: nextPool.sqrtRatioX96.toString(), + tickCurrent: nextPool.tickCurrent.toString(), + amountIn: edgeAmountIn, + amountOut: edgeAmountOut, + }); + } + routeResponse.push(curRoute); + } + else if (subRoute.protocol === Protocol.V2) { + var pools = subRoute.route.pairs; + var curRoute = []; + for (var i = 0; i < pools.length; i++) { + var nextPool = pools[i]; + var tokenIn = tokenPath[i]; + var tokenOut = tokenPath[i + 1]; + var edgeAmountIn = undefined; + if (i === 0) { + edgeAmountIn = type === 'exactIn' ? amount_1.quotient.toString() : quote_1.quotient.toString(); + } + var edgeAmountOut = undefined; + if (i === pools.length - 1) { + edgeAmountOut = type === 'exactIn' ? quote_1.quotient.toString() : amount_1.quotient.toString(); + } + var reserve0 = nextPool.reserve0; + var reserve1 = nextPool.reserve1; + curRoute.push({ + type: 'v2-pool', + tokenIn: { + chainId: tokenIn.chainId, + decimals: tokenIn.decimals, + address: tokenIn.address, + symbol: tokenIn.symbol, + }, + tokenOut: { + chainId: tokenOut.chainId, + decimals: tokenOut.decimals, + address: tokenOut.address, + symbol: tokenOut.symbol, + }, + reserve0: { + token: { + chainId: reserve0.currency.wrapped.chainId, + decimals: reserve0.currency.wrapped.decimals, + address: reserve0.currency.wrapped.address, + symbol: reserve0.currency.wrapped.symbol, + }, + quotient: reserve0.quotient.toString(), + }, + reserve1: { + token: { + chainId: reserve1.currency.wrapped.chainId, + decimals: reserve1.currency.wrapped.decimals, + address: reserve1.currency.wrapped.address, + symbol: reserve1.currency.wrapped.symbol, + }, + quotient: reserve1.quotient.toString(), + }, + amountIn: edgeAmountIn, + amountOut: edgeAmountOut, + }); + } + routeResponse.push(curRoute); + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (route_1_1 && !route_1_1.done && (_b = route_1.return)) _b.call(route_1); + } + finally { if (e_1) throw e_1.error; } + } + var result = { + methodParameters: methodParameters, + blockNumber: blockNumber.toString(), + amount: amount.quotient.toString(), + amountDecimals: amount.toExact(), + quote: quote.quotient.toString(), + quoteDecimals: quote.toExact(), + quoteGasAdjusted: quoteGasAdjusted.quotient.toString(), + quoteGasAdjustedDecimals: quoteGasAdjusted.toExact(), + gasUseEstimateQuote: estimatedGasUsedQuoteToken.quotient.toString(), + gasUseEstimateQuoteDecimals: estimatedGasUsedQuoteToken.toExact(), + gasUseEstimate: estimatedGasUsed.toString(), + gasUseEstimateUSD: estimatedGasUsedUSD.toExact(), + gasPriceWei: gasPriceWei.toString(), + route: routeResponse, + routeString: routeAmountsToString(route), + }; + return result; +} + +/** Minimal set of dependencies for the router to work locally. */ +function buildDependencies() { + var e_1, _a; + var dependenciesByChain = {}; + try { + for (var AUTO_ROUTER_SUPPORTED_CHAINS_1 = __values(AUTO_ROUTER_SUPPORTED_CHAINS), AUTO_ROUTER_SUPPORTED_CHAINS_1_1 = AUTO_ROUTER_SUPPORTED_CHAINS_1.next(); !AUTO_ROUTER_SUPPORTED_CHAINS_1_1.done; AUTO_ROUTER_SUPPORTED_CHAINS_1_1 = AUTO_ROUTER_SUPPORTED_CHAINS_1.next()) { + var chainId = AUTO_ROUTER_SUPPORTED_CHAINS_1_1.value; + var provider = new providers.JsonRpcProvider(INFURA_NETWORK_URLS[chainId]); + dependenciesByChain[chainId] = { + chainId: chainId, + provider: provider, + }; + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (AUTO_ROUTER_SUPPORTED_CHAINS_1_1 && !AUTO_ROUTER_SUPPORTED_CHAINS_1_1.done && (_a = AUTO_ROUTER_SUPPORTED_CHAINS_1.return)) _a.call(AUTO_ROUTER_SUPPORTED_CHAINS_1); + } + finally { if (e_1) throw e_1.error; } + } + return dependenciesByChain; +} +var GAMetric = /** @class */ (function (_super) { + __extends(GAMetric, _super); + function GAMetric() { + return _super !== null && _super.apply(this, arguments) || this; + } + GAMetric.prototype.putDimensions = function () { + return; + }; + GAMetric.prototype.putMetric = function (key, value, unit) { + ReactGA.timing({ + category: 'Routing API', + variable: key + " | " + unit, + value: value, + label: 'client', + }); + }; + return GAMetric; +}(IMetric)); +setGlobalMetric(new GAMetric()); + +var routerParamsByChain = buildDependencies(); +function getQuote(_a, alphaRouterConfig) { + var type = _a.type, chainId = _a.chainId, tokenIn = _a.tokenIn, tokenOut = _a.tokenOut, amountRaw = _a.amount; + return __awaiter(this, void 0, void 0, function () { + var params, router, currencyIn, currencyOut, baseCurrency, quoteCurrency, amount, swapRoute; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + params = routerParamsByChain[chainId]; + if (!params) { + throw new Error('Router dependencies not initialized.'); + } + router = new AlphaRouter(params); + currencyIn = new Token(tokenIn.chainId, tokenIn.address, tokenIn.decimals, tokenIn.symbol); + currencyOut = new Token(tokenOut.chainId, tokenOut.address, tokenOut.decimals, tokenOut.symbol); + baseCurrency = type === 'exactIn' ? currencyIn : currencyOut; + quoteCurrency = type === 'exactIn' ? currencyOut : currencyIn; + amount = CurrencyAmount.fromRawAmount(baseCurrency, JSBI.BigInt(amountRaw)); + return [4 /*yield*/, router.route(amount, quoteCurrency, type === 'exactIn' ? TradeType.EXACT_INPUT : TradeType.EXACT_OUTPUT, + /*swapConfig=*/ undefined, alphaRouterConfig)]; + case 1: + swapRoute = _b.sent(); + if (!swapRoute) + throw new Error('Failed to generate client side quote'); + return [2 /*return*/, { data: transformSwapRouteToGetQuoteResult(type, amount, swapRoute) }]; + } + }); + }); +} + +var index = /*#__PURE__*/Object.freeze({ + __proto__: null, + getQuote: getQuote +}); + +module.exports=function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n});},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0});},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=3)}([function(e,t){e.exports=function(e){return e&&e.__esModule?e:{default:e}};},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")};},function(e,t,r){function n(){return Math.floor(9e4*Math.random())+1e4}Object.defineProperty(t,"__esModule",{value:!0}),t.sendAsyncWrapper=function(e,t){var r=this;return new Promise(function(o,a){r.sendAsync({jsonrpc:"2.0",id:n(),method:e,params:t||[]},function(e,t){e?a(e):o(t.result);});})},t.sendFortmaticAsyncWrapper=function(e){var t=this;return new Promise(function(r,n){t.getProvider().sendFortmaticAsync(e,function(e,t){e?n(e):r(t?t.result:{});});})},t.randomId=n,t.findExistingResponse=function(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},t=new v(m);return t.params=[e],i.sendFortmaticAsyncWrapper.call(g,t)};};var v=function e(t,r){(0, o.default)(this,e),this.id=(0, i.randomId)(),this.method=t,this.params=r?[r]:[{}];};},function(e,t,r){var n=r(0);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=n(r(6)),a=n(r(9)),i=n(r(1)),s=n(r(10)),c=r(11),u=n(r(12)),l=r(2),f=function(){function e(t,r){if((0, i.default)(this,e),this.fortmaticClient=t,this.requests={},this.queue=[],this.account=null,this.network=null,this.isFortmatic=!0,this.overlayReady=!1,this.isLoggedIn=!1,this.postMessages={FORTMATIC_HANDLE_BATCH_REQUEST:"FORTMATIC_HANDLE_BATCH_REQUEST",FORTMATIC_HANDLE_REQUEST:"FORTMATIC_HANDLE_REQUEST",FORTMATIC_HANDLE_FORTMATIC_REQUEST:"FORTMATIC_HANDLE_FORTMATIC_REQUEST",FORTMATIC_HANDLE_RESPONSE:"FORTMATIC_HANDLE_RESPONSE",FORTMATIC_OVERLAY_READY:"FORTMATIC_OVERLAY_READY",FORTMATIC_SHOW_OVERLAY:"FORTMATIC_SHOW_OVERLAY",FORTMATIC_HIDE_OVERLAY:"FORTMATIC_HIDE_OVERLAY",FORTMATIC_USER_DENIED:"FORTMATIC_USER_DENIED",FORTMATIC_USER_LOGOUT:"FORTMATIC_USER_LOGOUT",FORTMATIC_UNAUTHORIZED_API_KEY:"FORTMATIC_UNAUTHORIZED_API_KEY"},!r.API_KEY)throw new Error("Please provide a Fortmatic API key that you acquired from the developer dashboard.");this.options={API_KEY:r.API_KEY,ETH_NETWORK:r.ETH_NETWORK,DOMAIN_ORIGIN:window.location?window.location.origin:"",version:c.version},this.queryParams=btoa(JSON.stringify(this.options)),this.constructPostMessage(),this.overlay=this.createOverlay(),this.listenMessage();}return (0, s.default)(e,[{key:"constructPostMessage",value:function(){var e=this;Object.keys(this.postMessages).map(function(t){e.postMessages[t]+="-".concat(e.queryParams);});}},{key:"createOverlay",value:function(){var e=this;return new Promise(function(t,r){var n=function(){if(function(){var t=!0,r=!1,n=void 0;try{for(var o,a=document.getElementsByClassName("fortmatic-iframe")[Symbol.iterator]();!(t=(o=a.next()).done);t=!0)if(o.value.src.includes(e.queryParams))return !1}catch(e){r=!0,n=e;}finally{try{t||null==a.return||a.return();}finally{if(r)throw n}}return !0}()){var r=document.createElement("style");r.innerHTML=u.default.css,r.type="text/css",document.head.appendChild(r);var n=document.createElement("iframe");n.className="fortmatic-iframe",n.src="".concat(e.fortmaticClient,"/send?params=").concat(e.queryParams),document.body.appendChild(n);var o=document.createElement("img");o.src="https://static.fortmatic.com/assets/trans.gif",document.body.appendChild(o),t({iframe:n});}else console.error("Fortmatic: Duplicate instances found.");};["loaded","interactive","complete"].indexOf(document.readyState)>-1?n():window.addEventListener("load",n.bind(e),!1);})}},{key:"showOverlay",value:function(){var e=(0, a.default)(o.default.mark(function e(){return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.overlay;case 2:e.sent.iframe.style.display="block";case 4:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"hideOverlay",value:function(){var e=(0, a.default)(o.default.mark(function e(){return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.overlay;case 2:e.sent.iframe.style.display="none";case 4:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"sendAsync",value:function(e,t){e.length>0?this.enqueue({payload:{id:(0, l.randomId)(),batch:e.map(function(e){return e.id=(0, l.randomId)(),e}),method:"eth_batchRequest"},cb:t}):this.enqueue({payload:e,cb:t});}},{key:"sendFortmaticAsync",value:function(e,t){this.enqueue({payload:e,cb:t,isNative:!0});}},{key:"send",value:function(e,t){if("string"==typeof e)return l.sendAsyncWrapper.call(this,e,t);if(!t){console.warn("Non-async web3 methods will be deprecated in web3 > 1.0, and are not supported by the Fortmatic provider. An async method to be used instead."),this.sendAsync(e,function(){});var r={};switch(e.method){case"eth_accounts":r=this.account?[this.account]:[];break;case"eth_coinbase":r=this.account;break;case"net_version":r=this.network||(this.options.API_KEY.startsWith("pk_live")?1:4);break;case"eth_uninstallFilter":r=!0;break;default:r={};}return {id:e.id,jsonrpc:e.jsonrpc,result:r}}this.sendAsync(e,t);}},{key:"enqueue",value:function(e){this.queue.push(e),this.overlayReady&&this.dequeue();}},{key:"dequeue",value:function(){var e=(0, a.default)(o.default.mark(function e(){var t,r,n,a=this;return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(0!==this.queue.length){e.next=2;break}return e.abrupt("return");case 2:if(!(t=this.queue.shift())){e.next=11;break}return r=t.payload,n=t.cb,r.id=(0, l.randomId)(),e.next=9,this.postMessage(t.isNative?this.postMessages.FORTMATIC_HANDLE_FORTMATIC_REQUEST:this.postMessages.FORTMATIC_HANDLE_REQUEST,t.payload);case 9:r.batch&&r.batch.length>0?(r.batch.forEach(function(e){a.requests[e.id]={parentId:r.id,payload:e,cb:function(e,t){var n=a.requests[r.id].batchResponse;if(e&&e.response&&!(0, l.findExistingResponse)(n,e.response.id))throw n.push({jsonrpc:"2.0",id:e.response.id,error:{code:e.response.code,message:e.response.message}}),a.requests[r.id].cb(null,n),e.response;if(t&&t.result&&!(0, l.findExistingResponse)(n,t.id))return n.push(t);throw new Error("Fortmatic: unexpected callback behavior")}};}),this.requests[r.id]={payload:r,cb:n,batchResponse:[]}):this.requests[r.id]={payload:r,cb:n},this.dequeue();case 11:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"postMessage",value:function(){var e=(0, a.default)(o.default.mark(function e(t,r){var n;return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.overlay;case 2:if(!(n=e.sent).iframe.contentWindow){e.next=7;break}n.iframe.contentWindow.postMessage({msgType:t,payload:r},"*"),e.next=8;break;case 7:throw new Error("Fortmatic: Modal is not ready.");case 8:case"end":return e.stop()}},e,this)}));return function(t,r){return e.apply(this,arguments)}}()},{key:"enable",value:function(){return l.sendAsyncWrapper.call(this,"eth_accounts")}},{key:"listenMessage",value:function(){var e=this;window.addEventListener("message",function(t){if(t.origin===e.fortmaticClient){var r=t.data.response?t.data.response.id:null;switch(t.data.msgType){case e.postMessages.FORTMATIC_OVERLAY_READY:e.overlayReady=!0,e.dequeue();break;case e.postMessages.FORTMATIC_HANDLE_RESPONSE:try{e.requests[r].cb(null,t.data.response);var n=e.requests[r].parentId;n&&e.requests[n].payload.batch.length===e.requests[n].batchResponse.length&&e.requests[n].cb(null,e.requests[n].batchResponse),"eth_accounts"===e.requests[r].payload.method?e.account=t.data.response.result[0]:"eth_coinbase"===e.requests[r].payload.method?e.account=t.data.response.result:"net_version"===e.requests[r].payload.method&&(e.network=t.data.response.result);}catch(e){}e.isLoggedIn=!0,e.dequeue();break;case e.postMessages.FORTMATIC_HIDE_OVERLAY:e.hideOverlay();break;case e.postMessages.FORTMATIC_SHOW_OVERLAY:e.showOverlay();break;case e.postMessages.FORTMATIC_USER_LOGOUT:e.account=null,e.network=null,e.isLoggedIn=!1;break;case e.postMessages.FORTMATIC_UNAUTHORIZED_API_KEY:throw e.overlayReady=!1,new Error("Given API key is not authorized to access the resource.");case e.postMessages.FORTMATIC_USER_DENIED:if(r){var o=t.data.response&&t.data.response.message?t.data.response.message:"Fortmatic: Modal was closed without executing action!",a=t.data.response&&t.data.response.code?t.data.response.code:1;e.requests[r].cb({message:o,code:a,response:t.data.response});}else e.queue.forEach(function(e){return e.cb({message:"Fortmatic: Modal was closed without executing action!",code:1})});e.dequeue();}}});}}]),e}();t.default=f;},function(e,t,r){e.exports=r(7);},function(e,t,r){var n=function(){return this||"object"==typeof self&&self}()||Function("return this")(),o=n.regeneratorRuntime&&Object.getOwnPropertyNames(n).indexOf("regeneratorRuntime")>=0,a=o&&n.regeneratorRuntime;if(n.regeneratorRuntime=void 0,e.exports=r(8),o)n.regeneratorRuntime=a;else try{delete n.regeneratorRuntime;}catch(e){n.regeneratorRuntime=void 0;}},function(e,t){!function(t){var r,n=Object.prototype,o=n.hasOwnProperty,a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",s=a.asyncIterator||"@@asyncIterator",c=a.toStringTag||"@@toStringTag",u="object"==typeof e,l=t.regeneratorRuntime;if(l)u&&(e.exports=l);else {(l=t.regeneratorRuntime=u?e.exports:{}).wrap=_;var f="suspendedStart",d="suspendedYield",h="executing",p="completed",m={},y={};y[i]=function(){return this};var v=Object.getPrototypeOf,g=v&&v(v(L([])));g&&g!==n&&o.call(g,i)&&(y=g);var b=A.prototype=w.prototype=Object.create(y);T.prototype=b.constructor=A,A.constructor=T,A[c]=T.displayName="GeneratorFunction",l.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return !!t&&(t===T||"GeneratorFunction"===(t.displayName||t.name))},l.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,A):(e.__proto__=A,c in e||(e[c]="GeneratorFunction")),e.prototype=Object.create(b),e},l.awrap=function(e){return {__await:e}},O(R.prototype),R.prototype[s]=function(){return this},l.AsyncIterator=R,l.async=function(e,t,r,n){var o=new R(_(e,t,r,n));return l.isGeneratorFunction(t)?o:o.next().then(function(e){return e.done?e.value:o.next()})},O(b),b[c]="Generator",b[i]=function(){return this},b.toString=function(){return "[object Generator]"},l.keys=function(e){var t=[];for(var r in e)t.push(r);return t.reverse(),function r(){for(;t.length;){var n=t.pop();if(n in e)return r.value=n,r.done=!1,r}return r.done=!0,r}},l.values=L,F.prototype={constructor:F,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=r,this.done=!1,this.delegate=null,this.method="next",this.arg=r,this.tryEntries.forEach(M),!e)for(var t in this)"t"===t.charAt(0)&&o.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=r);},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function n(n,o){return s.type="throw",s.arg=e,t.next=n,o&&(t.method="next",t.arg=r),!!o}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],s=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var c=o.call(i,"catchLoc"),u=o.call(i,"finallyLoc");if(c&&u){if(this.prev=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&o.call(n,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),M(r),m}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var o=n.arg;M(r);}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:L(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=r),m}};}function _(e,t,r,n){var o=t&&t.prototype instanceof w?t:w,a=Object.create(o.prototype),i=new F(n||[]);return a._invoke=function(e,t,r){var n=f;return function(o,a){if(n===h)throw new Error("Generator is already running");if(n===p){if("throw"===o)throw a;return k()}for(r.method=o,r.arg=a;;){var i=r.delegate;if(i){var s=I(i,r);if(s){if(s===m)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(n===f)throw n=p,r.arg;r.dispatchException(r.arg);}else "return"===r.method&&r.abrupt("return",r.arg);n=h;var c=E(e,t,r);if("normal"===c.type){if(n=r.done?p:d,c.arg===m)continue;return {value:c.arg,done:r.done}}"throw"===c.type&&(n=p,r.method="throw",r.arg=c.arg);}}}(e,r,i),a}function E(e,t,r){try{return {type:"normal",arg:e.call(t,r)}}catch(e){return {type:"throw",arg:e}}}function w(){}function T(){}function A(){}function O(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)};});}function R(e){var t;this._invoke=function(r,n){function a(){return new Promise(function(t,a){!function t(r,n,a,i){var s=E(e[r],e,n);if("throw"!==s.type){var c=s.arg,u=c.value;return u&&"object"==typeof u&&o.call(u,"__await")?Promise.resolve(u.__await).then(function(e){t("next",e,a,i);},function(e){t("throw",e,a,i);}):Promise.resolve(u).then(function(e){c.value=e,a(c);},function(e){return t("throw",e,a,i)})}i(s.arg);}(r,n,t,a);})}return t=t?t.then(a,a):a()};}function I(e,t){var n=e.iterator[t.method];if(n===r){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=r,I(e,t),"throw"===t.method))return m;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method");}return m}var o=E(n,e.iterator,t.arg);if("throw"===o.type)return t.method="throw",t.arg=o.arg,t.delegate=null,m;var a=o.arg;return a?a.done?(t[e.resultName]=a.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=r),t.delegate=null,m):a:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,m)}function x(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t);}function M(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t;}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(x,this),this.reset(!0);}function L(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n (https://fortmatic.com/)",license:"MIT",repository:{type:"git",url:"https://github.com/fortmatic/fortmatic-js"},keywords:["Auth","Login","Web3","Crypto","Ethereum","MetaMask","Wallet","Blockchain","Dapp"],homepage:"https://www.fortmatic.com",ava:{require:["@babel/register"],files:["test/**/*.spec.js"],babel:{testOptions:{presets:["@babel/env"],plugins:["@babel/plugin-proposal-function-bind","@babel/plugin-transform-runtime"]}},verbose:!0},nyc:{all:!1,"check-coverage":!0,"per-file":!0,lines:80,statements:80,functions:80,branches:80,include:["src/**/*.js"],exclude:["*/style.js"],require:[],reporter:["html","lcov"]},dependencies:{"@babel/runtime":"7.3.4"},devDependencies:{"@babel/core":"7.3.4","@babel/plugin-proposal-function-bind":"7.2.0","@babel/plugin-transform-modules-commonjs":"7.2.0","@babel/plugin-transform-runtime":"7.3.4","@babel/preset-env":"7.3.4","@babel/register":"7.0.0",ava:"2.2.0","babel-eslint":"10.0.1","babel-loader":"8.0.5",eslint:"5.9.0",lodash:"4.17.11",nyc:"13.1.0",sinon:"7.1.1",webpack:"4.26.1","webpack-cli":"3.1.2"}};},function(e,t,r){t.css="\n .fortmatic-iframe {\n display: none;\n position: fixed;\n top: 0;\n right: 0;\n width: 100%;\n height: 100%;\n border: none;\n border-radius: 0;\n z-index: 2147483647;\n }\n";}]); + +var fortmatic = /*#__PURE__*/Object.freeze({ + __proto__: null +}); + +export { App, INFURA_NETWORK_URLS, Providers, Swap, Updaters, serviceWorkerRegistration }; diff --git a/dist2/snowflake.js b/dist2/snowflake.js deleted file mode 100644 index 277e69eb7aa..00000000000 --- a/dist2/snowflake.js +++ /dev/null @@ -1,25389 +0,0 @@ -Object.defineProperty(exports, '__esModule', { value: true }) - -var jsxRuntime = require('react/jsx-runtime') -var styled = require('styled-components/macro') -var React = require('react') -var reactRedux = require('react-redux') -var toolkit = require('@reduxjs/toolkit') -var qs = require('qs') -var reactRouterDom = require('react-router-dom') -var address = require('@ethersproject/address') -var macro = require('@lingui/macro') -var core = require('@web3-react/core') -var sdkCore = require('@uniswap/sdk-core') -var JSBI = require('jsbi') -var rebass = require('rebass') -var constants = require('@ethersproject/constants') -var contracts = require('@ethersproject/contracts') -var jotai = require('jotai') -var utils = require('jotai/utils') -var reduxMulticall = require('@uniswap/redux-multicall') -var v2Sdk = require('@uniswap/v2-sdk') -var v3Sdk = require('@uniswap/v3-sdk') -var redux = require('redux') -var hash = require('@ethersproject/hash') -var app = require('firebase/app') -var database = require('firebase/database') -var bytes = require('@ethersproject/bytes') -var strings = require('@ethersproject/strings') -var core$1 = require('widgets-web3-react/core') -var empty = require('widgets-web3-react/empty') -var CID = require('cids') -var multicodec = require('multicodec') -var multihashes = require('multihashes') -var abi$7 = require('@ethersproject/abi') -var reactFeather = require('react-feather') -var ReactGA = require('react-ga') -var styledComponents = require('rebass/styled-components') -var polished = require('polished') -var ReactConfetti = require('react-confetti') -var dialog = require('@reach/dialog') -var reactSpring = require('react-spring') -var reactUseGesture = require('react-use-gesture') -var uaParserJs = require('ua-parser-js') -var react = require('@reduxjs/toolkit/query/react') -var reduxLocalstorageSimple = require('redux-localstorage-simple') -var graphqlRequest = require('graphql-request') -var tokenLists = require('@uniswap/token-lists') -var routerSdk = require('@uniswap/router-sdk') -var ms = require('ms.macro') -var units = require('@ethersproject/units') -var useScrollPosition = require('@react-hook/window-scroll') -var Portal = require('@reach/portal') -var reactPopper = require('react-popper') -var safeAppsWeb3React = require('@gnosis.pm/safe-apps-web3-react') -var injectedConnector = require('@web3-react/injected-connector') -var portisConnector = require('@web3-react/portis-connector') -var walletconnectConnector = require('@web3-react/walletconnect-connector') -var walletlinkConnector = require('@web3-react/walletlink-connector') -var providers = require('@ethersproject/providers') -var fortmaticConnector = require('@web3-react/fortmatic-connector') -var abstractConnector = require('@web3-react/abstract-connector') -var invariant = require('tiny-invariant') -var clone$1 = require('clone') -var colorConvert = require('color-convert') -var colorString = require('color-string') -var bignumber = require('@ethersproject/bignumber') -var copy = require('copy-to-clipboard') -var web = require('react-spring/web') -var useResizeObserver = require('use-resize-observer') -var AutoSizer = require('react-virtualized-auto-sizer') -var reactWindow = require('react-window') -var Vibrant = require('node-vibrant/lib/bundle') -var wcagContrast = require('wcag-contrast') -var core$2 = require('@lingui/core') -var react$1 = require('@lingui/react') -var plurals$1 = require('make-plural/plurals') -var smartOrderRouter = require('@uniswap/smart-order-router') -var ethers = require('ethers/lib/ethers') - -function _interopDefaultLegacy(e) { - return e && typeof e === 'object' && 'default' in e ? e : { default: e } -} - -function _interopNamespace(e) { - if (e && e.__esModule) return e - var n = Object.create(null) - if (e) { - Object.keys(e).forEach(function (k) { - if (k !== 'default') { - var d = Object.getOwnPropertyDescriptor(e, k) - Object.defineProperty( - n, - k, - d.get - ? d - : { - enumerable: true, - get() { - return e[k] - }, - } - ) - } - }) - } - n['default'] = e - return Object.freeze(n) -} - -function _mergeNamespaces(n, m) { - m.forEach(function (e) { - e && - typeof e !== 'string' && - !Array.isArray(e) && - Object.keys(e).forEach(function (k) { - if (k !== 'default' && !(k in n)) { - var d = Object.getOwnPropertyDescriptor(e, k) - Object.defineProperty( - n, - k, - d.get - ? d - : { - enumerable: true, - get() { - return e[k] - }, - } - ) - } - }) - }) - return Object.freeze(n) -} - -var styled__default = /*#__PURE__*/ _interopDefaultLegacy(styled) -var React__default = /*#__PURE__*/ _interopDefaultLegacy(React) -var React__namespace = /*#__PURE__*/ _interopNamespace(React) -var qs__default = /*#__PURE__*/ _interopDefaultLegacy(qs) -var JSBI__default = /*#__PURE__*/ _interopDefaultLegacy(JSBI) -var CID__default = /*#__PURE__*/ _interopDefaultLegacy(CID) -var ReactGA__default = /*#__PURE__*/ _interopDefaultLegacy(ReactGA) -var ReactConfetti__default = /*#__PURE__*/ _interopDefaultLegacy(ReactConfetti) -var ms__default = /*#__PURE__*/ _interopDefaultLegacy(ms) -var useScrollPosition__default = /*#__PURE__*/ _interopDefaultLegacy(useScrollPosition) -var Portal__default = /*#__PURE__*/ _interopDefaultLegacy(Portal) -var invariant__default = /*#__PURE__*/ _interopDefaultLegacy(invariant) -var clone__namespace = /*#__PURE__*/ _interopNamespace(clone$1) -var colorConvert__namespace = /*#__PURE__*/ _interopNamespace(colorConvert) -var colorString__namespace = /*#__PURE__*/ _interopNamespace(colorString) -var copy__default = /*#__PURE__*/ _interopDefaultLegacy(copy) -var useResizeObserver__default = /*#__PURE__*/ _interopDefaultLegacy(useResizeObserver) -var AutoSizer__default = /*#__PURE__*/ _interopDefaultLegacy(AutoSizer) -var Vibrant__default = /*#__PURE__*/ _interopDefaultLegacy(Vibrant) - -/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */ -/* global Reflect, Promise */ - -var extendStatics = function (d, b) { - extendStatics = - Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && - function (d, b) { - d.__proto__ = b - }) || - function (d, b) { - for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p] - } - return extendStatics(d, b) -} - -function __extends(d, b) { - if (typeof b !== 'function' && b !== null) - throw new TypeError('Class extends value ' + String(b) + ' is not a constructor or null') - extendStatics(d, b) - function __() { - this.constructor = d - } - d.prototype = b === null ? Object.create(b) : ((__.prototype = b.prototype), new __()) -} - -var __assign = function () { - __assign = - Object.assign || - function __assign(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i] - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p] - } - return t - } - return __assign.apply(this, arguments) -} - -function __rest(s, e) { - var t = {} - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p] - if (s != null && typeof Object.getOwnPropertySymbols === 'function') - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]] - } - return t -} - -function __awaiter(thisArg, _arguments, P, generator) { - function adopt(value) { - return value instanceof P - ? value - : new P(function (resolve) { - resolve(value) - }) - } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { - try { - step(generator.next(value)) - } catch (e) { - reject(e) - } - } - function rejected(value) { - try { - step(generator['throw'](value)) - } catch (e) { - reject(e) - } - } - function step(result) { - result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected) - } - step((generator = generator.apply(thisArg, _arguments || [])).next()) - }) -} - -function __generator(thisArg, body) { - var _ = { - label: 0, - sent() { - if (t[0] & 1) throw t[1] - return t[1] - }, - trys: [], - ops: [], - }, - f, - y, - t, - g - return ( - (g = { next: verb(0), throw: verb(1), return: verb(2) }), - typeof Symbol === 'function' && - (g[Symbol.iterator] = function () { - return this - }), - g - ) - function verb(n) { - return function (v) { - return step([n, v]) - } - } - function step(op) { - if (f) throw new TypeError('Generator is already executing.') - while (_) - try { - if ( - ((f = 1), - y && - (t = op[0] & 2 ? y['return'] : op[0] ? y['throw'] || ((t = y['return']) && t.call(y), 0) : y.next) && - !(t = t.call(y, op[1])).done) - ) - return t - if (((y = 0), t)) op = [op[0] & 2, t.value] - switch (op[0]) { - case 0: - case 1: - t = op - break - case 4: - _.label++ - return { value: op[1], done: false } - case 5: - _.label++ - y = op[1] - op = [0] - continue - case 7: - op = _.ops.pop() - _.trys.pop() - continue - default: - if (!((t = _.trys), (t = t.length > 0 && t[t.length - 1])) && (op[0] === 6 || op[0] === 2)) { - _ = 0 - continue - } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { - _.label = op[1] - break - } - if (op[0] === 6 && _.label < t[1]) { - _.label = t[1] - t = op - break - } - if (t && _.label < t[2]) { - _.label = t[2] - _.ops.push(op) - break - } - if (t[2]) _.ops.pop() - _.trys.pop() - continue - } - op = body.call(thisArg, _) - } catch (e) { - op = [6, e] - y = 0 - } finally { - f = t = 0 - } - if (op[0] & 5) throw op[1] - return { value: op[0] ? op[1] : void 0, done: true } - } -} - -function __values(o) { - var s = typeof Symbol === 'function' && Symbol.iterator, - m = s && o[s], - i = 0 - if (m) return m.call(o) - if (o && typeof o.length === 'number') - return { - next() { - if (o && i >= o.length) o = void 0 - return { value: o && o[i++], done: !o } - }, - } - throw new TypeError(s ? 'Object is not iterable.' : 'Symbol.iterator is not defined.') -} - -function __read(o, n) { - var m = typeof Symbol === 'function' && o[Symbol.iterator] - if (!m) return o - var i = m.call(o), - r, - ar = [], - e - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value) - } catch (error) { - e = { error } - } finally { - try { - if (r && !r.done && (m = i['return'])) m.call(i) - } finally { - if (e) throw e.error - } - } - return ar -} - -function __spreadArray(to, from, pack) { - if (pack || arguments.length === 2) - for (var i = 0, l = from.length, ar; i < l; i++) { - if (ar || !(i in from)) { - if (!ar) ar = Array.prototype.slice.call(from, 0, i) - ar[i] = from[i] - } - } - return to.concat(ar || Array.prototype.slice.call(from)) -} - -function __makeTemplateObject(cooked, raw) { - if (Object.defineProperty) { - Object.defineProperty(cooked, 'raw', { value: raw }) - } else { - cooked.raw = raw - } - return cooked -} - -var rotate$2 = styled.keyframes( - templateObject_1$1n || - (templateObject_1$1n = __makeTemplateObject( - ['\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n'], - ['\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n'] - )) -) -var StyledSVG = styled__default['default'].svg( - templateObject_2$11 || - (templateObject_2$11 = __makeTemplateObject( - ['\n animation: 2s ', ' linear infinite;\n height: ', ';\n width: ', ';\n path {\n stroke: ', ';\n }\n'], - [ - '\n animation: 2s ', - ' linear infinite;\n height: ', - ';\n width: ', - ';\n path {\n stroke: ', - ';\n }\n', - /** - * Takes in custom size and stroke for circle color, default to primary color as fill, - * need ...rest for layered styles on top - */ - ] - )), - rotate$2, - function (_a) { - var size = _a.size - return size - }, - function (_a) { - var size = _a.size - return size - }, - function (_a) { - var stroke = _a.stroke, - theme = _a.theme - return stroke !== null && stroke !== void 0 ? stroke : theme.primary1 - } -) -/** - * Takes in custom size and stroke for circle color, default to primary color as fill, - * need ...rest for layered styles on top - */ -function Loader(_a) { - var _b = _a.size, - size = _b === void 0 ? '16px' : _b, - stroke = _a.stroke, - rest = __rest(_a, ['size', 'stroke']) - return jsxRuntime.jsx( - StyledSVG, - __assign({ viewBox: '0 0 24 24', fill: 'none', xmlns: 'http://www.w3.org/2000/svg', size, stroke }, rest, { - children: jsxRuntime.jsx( - 'path', - { - d: 'M12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22C17.5228 22 22 17.5228 22 12C22 9.27455 20.9097 6.80375 19.1414 5', - strokeWidth: '2.5', - strokeLinecap: 'round', - strokeLinejoin: 'round', - }, - void 0 - ), - }), - void 0 - ) -} -var templateObject_1$1n, templateObject_2$11 - -var useAppDispatch = function () { - return reactRedux.useDispatch() -} -var useAppSelector = reactRedux.useSelector - -var updateMatchesDarkMode = toolkit.createAction('user/updateMatchesDarkMode') -var updateUserDarkMode = toolkit.createAction('user/updateUserDarkMode') -var updateUserExpertMode = toolkit.createAction('user/updateUserExpertMode') -var updateUserLocale = toolkit.createAction('user/updateUserLocale') -var updateShowSurveyPopup = toolkit.createAction('user/updateShowSurveyPopup') -var updateUserClientSideRouter = toolkit.createAction('user/updateUserClientSideRouter') -var updateHideClosedPositions = toolkit.createAction('user/hideClosedPositions') -var updateUserSlippageTolerance = toolkit.createAction('user/updateUserSlippageTolerance') -var updateUserDeadline = toolkit.createAction('user/updateUserDeadline') -var addSerializedToken = toolkit.createAction('user/addSerializedToken') -var removeSerializedToken = toolkit.createAction('user/removeSerializedToken') -var addSerializedPair = toolkit.createAction('user/addSerializedPair') -var removeSerializedPair = toolkit.createAction('user/removeSerializedPair') - -function parsedQueryString(search) { - if (!search) { - // react-router-dom places search string in the hash - var hash = window.location.hash - search = hash.substr(hash.indexOf('?')) - } - return search && search.length > 1 ? qs.parse(search, { parseArrays: false, ignoreQueryPrefix: true }) : {} -} -function useParsedQueryString() { - var search = reactRouterDom.useLocation().search - return React.useMemo( - function () { - return parsedQueryString(search) - }, - [search] - ) -} - -function ApeModeQueryParamReader() { - useApeModeQueryParamReader() - return null -} -function useApeModeQueryParamReader() { - var dispatch = useAppDispatch() - var ape = useParsedQueryString().ape - React.useEffect(function () { - if (typeof ape !== 'string') return - if (ape === '' || ape.toLowerCase() === 'true') { - dispatch(updateUserExpertMode({ userExpertMode: true })) - } - }) -} - -var NetworkContextName = 'NETWORK' -var IS_IN_IFRAME = window.parent !== window -// 30 minutes, denominated in seconds -var DEFAULT_DEADLINE_FROM_NOW = 60 * 30 -var L2_DEADLINE_FROM_NOW = 60 * 5 -// transaction popup dismisal amounts -var DEFAULT_TXN_DISMISS_MS = 25000 -var L2_TXN_DISMISS_MS = 5000 -// used for rewards deadlines -JSBI__default['default'].BigInt(60 * 60 * 24 * 7) -JSBI__default['default'].BigInt(0) -// one basis JSBI.BigInt -var BIPS_BASE = JSBI__default['default'].BigInt(10000) -new sdkCore.Percent(JSBI__default['default'].BigInt(1), BIPS_BASE) -// used for warning states -var ALLOWED_PRICE_IMPACT_LOW = new sdkCore.Percent(JSBI__default['default'].BigInt(100), BIPS_BASE) // 1% -var ALLOWED_PRICE_IMPACT_MEDIUM = new sdkCore.Percent(JSBI__default['default'].BigInt(300), BIPS_BASE) // 3% -var ALLOWED_PRICE_IMPACT_HIGH = new sdkCore.Percent(JSBI__default['default'].BigInt(500), BIPS_BASE) // 5% -// if the price slippage exceeds this number, force the user to type 'confirm' to execute -var PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN = new sdkCore.Percent(JSBI__default['default'].BigInt(1000), BIPS_BASE) // 10% -// for non expert mode disable swaps above this -var BLOCKED_PRICE_IMPACT_NON_EXPERT = new sdkCore.Percent(JSBI__default['default'].BigInt(1500), BIPS_BASE) // 15% -var BETTER_TRADE_LESS_HOPS_THRESHOLD = new sdkCore.Percent(JSBI__default['default'].BigInt(50), BIPS_BASE) -var ZERO_PERCENT = new sdkCore.Percent('0') -new sdkCore.Percent(JSBI__default['default'].BigInt(200), BIPS_BASE) -var ONE_HUNDRED_PERCENT = new sdkCore.Percent('1') - -function useActiveWeb3React() { - // if (false) { - // return useWidgetsWeb3React() - // } - var interfaceContext = core.useWeb3React() - var interfaceNetworkContext = core.useWeb3React(NetworkContextName) - if (interfaceContext.active) { - return interfaceContext - } - return interfaceNetworkContext -} - -var Circle$1 = - 'data:image/svg+xml,%3Csvg%20width%3D%2294%22%20height%3D%2294%22%20viewBox%3D%220%200%2094%2094%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%20%20%3Cpath%20d%3D%22M92%2047C92%2022.1472%2071.8528%202%2047%202C22.1472%202%202%2022.1472%202%2047C2%2071.8528%2022.1472%2092%2047%2092%22%20stroke%3D%22%232172E5%22%20stroke-width%3D%223%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E' - -var tokenLogo = - 'data:image/png;base64,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' - -// returns the checksummed address if the address is valid, otherwise returns false -function isAddress(value) { - try { - return address.getAddress(value) - } catch (_a) { - return false - } -} -// shorten the checksummed version of the input address to have 0x + 4 characters at start and end -function shortenAddress(address, chars) { - if (chars === void 0) { - chars = 4 - } - var parsed = isAddress(address) - if (!parsed) { - throw Error("Invalid 'address' parameter '" + address + "'.") - } - return parsed.substring(0, chars + 2) + '...' + parsed.substring(42 - chars) -} -// account is not optional -function getSigner(library, account) { - return library.getSigner(account).connectUnchecked() -} -// account is optional -function getProviderOrSigner(library, account) { - return account ? getSigner(library, account) : library -} -// account is optional -function getContract(address, ABI, library, account) { - if (!isAddress(address) || address === constants.AddressZero) { - throw Error("Invalid 'address' parameter '" + address + "'.") - } - return new contracts.Contract(address, ABI, getProviderOrSigner(library, account)) -} -function escapeRegExp(string) { - return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') // $& means the whole matched string -} -function isTokenOnList(chainTokenMap, token) { - var _a - return Boolean( - (token === null || token === void 0 ? void 0 : token.isToken) && - ((_a = chainTokenMap[token.chainId]) === null || _a === void 0 ? void 0 : _a[token.address]) - ) -} - -/** - * Debounces updates to a value. - * Non-primitives *must* wrap the value in useMemo, or the value will be updated due to referential inequality. - */ -// modified from https://usehooks.com/useDebounce/ -function useDebounce(value, delay) { - var _a = __read(React.useState(value), 2), - debouncedValue = _a[0], - setDebouncedValue = _a[1] - React.useEffect( - function () { - // Update debounced value after delay - var handler = setTimeout(function () { - setDebouncedValue(value) - }, delay) - // Cancel the timeout if value changes (also on delay change or unmount) - // This is how we prevent debounced value from updating if value is changed ... - // .. within the delay period. Timeout gets cleared and restarted. - return function () { - clearTimeout(handler) - } - }, - [value, delay] - ) - return debouncedValue -} - -var VISIBILITY_STATE_SUPPORTED = 'visibilityState' in document -function isWindowVisible() { - return !VISIBILITY_STATE_SUPPORTED || document.visibilityState !== 'hidden' -} -/** - * Returns whether the window is currently visible to the user. - */ -function useIsWindowVisible() { - var _a = __read(React.useState(isWindowVisible()), 2), - focused = _a[0], - setFocused = _a[1] - var listener = React.useCallback( - function () { - setFocused(isWindowVisible()) - }, - [setFocused] - ) - React.useEffect( - function () { - if (!VISIBILITY_STATE_SUPPORTED) return undefined - document.addEventListener('visibilitychange', listener) - return function () { - document.removeEventListener('visibilitychange', listener) - } - }, - [listener] - ) - return focused -} - -function useBlock() { - var _a = useActiveWeb3React(), - chainId = _a.chainId, - library = _a.library - var windowVisible = useIsWindowVisible() - var _b = __read(React.useState({ chainId }), 2), - state = _b[0], - setState = _b[1] - var onBlock = React.useCallback( - function (block) { - setState(function (state) { - if (state.chainId === chainId) { - if (typeof state.block !== 'number') return { chainId, block } - return { chainId, block: Math.max(block, state.block) } - } - return state - }) - }, - [chainId] - ) - React.useEffect( - function () { - if (library && chainId && windowVisible) { - setState({ chainId }) - library - .getBlockNumber() - .then(onBlock) - .catch(function (error) { - console.error('Failed to get block number for chainId ' + chainId, error) - }) - library.on('block', onBlock) - return function () { - library.removeListener('block', onBlock) - } - } - return undefined - }, - [chainId, library, onBlock, windowVisible] - ) - var debouncedBlock = useDebounce(state.block, 100) - return state.block ? debouncedBlock : undefined -} -var blockAtom = jotai.atom(undefined) -function BlockUpdater() { - var setBlock = utils.useUpdateAtom(blockAtom) - var block = useBlock() - React.useEffect( - function () { - setBlock(block) - }, - [block, setBlock] - ) - return null -} -/** Requires that BlockUpdater be installed in the DOM tree. */ -function useBlockNumber() { - var chainId = useActiveWeb3React().chainId - var block = utils.useAtomValue(blockAtom) - return chainId ? block : undefined -} -function useFastForwardBlockNumber() { - return utils.useUpdateAtom(blockAtom) -} - -var abi$6 = [ - { - inputs: [ - { - internalType: 'address', - name: '_rewardsDistribution', - type: 'address', - }, - { - internalType: 'address', - name: '_rewardsToken', - type: 'address', - }, - { - internalType: 'address', - name: '_stakingToken', - type: 'address', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'constructor', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'reward', - type: 'uint256', - }, - ], - name: 'RewardAdded', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'user', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'reward', - type: 'uint256', - }, - ], - name: 'RewardPaid', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'user', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'Staked', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'user', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'Withdrawn', - type: 'event', - }, - { - constant: true, - inputs: [ - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'balanceOf', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'earned', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [], - name: 'exit', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [], - name: 'getReward', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'getRewardForDuration', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'lastTimeRewardApplicable', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'lastUpdateTime', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'uint256', - name: 'reward', - type: 'uint256', - }, - ], - name: 'notifyRewardAmount', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'periodFinish', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'rewardPerToken', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'rewardPerTokenStored', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'rewardRate', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'rewards', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'rewardsDistribution', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'rewardsDuration', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'rewardsToken', - outputs: [ - { - internalType: 'contract IERC20', - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'stake', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - { - internalType: 'uint8', - name: 'v', - type: 'uint8', - }, - { - internalType: 'bytes32', - name: 'r', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 's', - type: 'bytes32', - }, - ], - name: 'stakeWithPermit', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'stakingToken', - outputs: [ - { - internalType: 'contract IERC20', - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'totalSupply', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'userRewardPerTokenPaid', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'withdraw', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, -] - -var abi$5 = [ - { - inputs: [ - { - internalType: 'address', - name: 'token_', - type: 'address', - }, - { - internalType: 'bytes32', - name: 'merkleRoot_', - type: 'bytes32', - }, - ], - stateMutability: 'nonpayable', - type: 'constructor', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'index', - type: 'uint256', - }, - { - indexed: false, - internalType: 'address', - name: 'account', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'Claimed', - type: 'event', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'index', - type: 'uint256', - }, - { - internalType: 'address', - name: 'account', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - { - internalType: 'bytes32[]', - name: 'merkleProof', - type: 'bytes32[]', - }, - ], - name: 'claim', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'index', - type: 'uint256', - }, - ], - name: 'isClaimed', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'merkleRoot', - outputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'token', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, -] - -var abi$4 = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'Approval', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'sender', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount0', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount1', - type: 'uint256', - }, - { - indexed: true, - internalType: 'address', - name: 'to', - type: 'address', - }, - ], - name: 'Burn', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'sender', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount0', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount1', - type: 'uint256', - }, - ], - name: 'Mint', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'sender', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount0In', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount1In', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount0Out', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount1Out', - type: 'uint256', - }, - { - indexed: true, - internalType: 'address', - name: 'to', - type: 'address', - }, - ], - name: 'Swap', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint112', - name: 'reserve0', - type: 'uint112', - }, - { - indexed: false, - internalType: 'uint112', - name: 'reserve1', - type: 'uint112', - }, - ], - name: 'Sync', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'from', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'to', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'Transfer', - type: 'event', - }, - { - constant: true, - inputs: [], - name: 'DOMAIN_SEPARATOR', - outputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'MINIMUM_LIQUIDITY', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'pure', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'PERMIT_TYPEHASH', - outputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - ], - payable: false, - stateMutability: 'pure', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - ], - name: 'allowance', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'approve', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'balanceOf', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'address', - name: 'to', - type: 'address', - }, - ], - name: 'burn', - outputs: [ - { - internalType: 'uint256', - name: 'amount0', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amount1', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'decimals', - outputs: [ - { - internalType: 'uint8', - name: '', - type: 'uint8', - }, - ], - payable: false, - stateMutability: 'pure', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'factory', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'getReserves', - outputs: [ - { - internalType: 'uint112', - name: 'reserve0', - type: 'uint112', - }, - { - internalType: 'uint112', - name: 'reserve1', - type: 'uint112', - }, - { - internalType: 'uint32', - name: 'blockTimestampLast', - type: 'uint32', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'initialize', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'kLast', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'address', - name: 'to', - type: 'address', - }, - ], - name: 'mint', - outputs: [ - { - internalType: 'uint256', - name: 'liquidity', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'name', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - payable: false, - stateMutability: 'pure', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'nonces', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - { - internalType: 'uint8', - name: 'v', - type: 'uint8', - }, - { - internalType: 'bytes32', - name: 'r', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 's', - type: 'bytes32', - }, - ], - name: 'permit', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'price0CumulativeLast', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'price1CumulativeLast', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'address', - name: 'to', - type: 'address', - }, - ], - name: 'skim', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'uint256', - name: 'amount0Out', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amount1Out', - type: 'uint256', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'bytes', - name: 'data', - type: 'bytes', - }, - ], - name: 'swap', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'symbol', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - payable: false, - stateMutability: 'pure', - type: 'function', - }, - { - constant: false, - inputs: [], - name: 'sync', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'token0', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'token1', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'totalSupply', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'transfer', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'address', - name: 'from', - type: 'address', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'transferFrom', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, -] - -var abi$3 = [ - { - inputs: [], - name: 'WETH', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'pure', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'tokenA', - type: 'address', - }, - { - internalType: 'address', - name: 'tokenB', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amountADesired', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountBDesired', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountAMin', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountBMin', - type: 'uint256', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - ], - name: 'addLiquidity', - outputs: [ - { - internalType: 'uint256', - name: 'amountA', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountB', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'liquidity', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'token', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amountTokenDesired', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountTokenMin', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountETHMin', - type: 'uint256', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - ], - name: 'addLiquidityETH', - outputs: [ - { - internalType: 'uint256', - name: 'amountToken', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountETH', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'liquidity', - type: 'uint256', - }, - ], - stateMutability: 'payable', - type: 'function', - }, - { - inputs: [], - name: 'factory', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'pure', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountOut', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'reserveIn', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'reserveOut', - type: 'uint256', - }, - ], - name: 'getAmountIn', - outputs: [ - { - internalType: 'uint256', - name: 'amountIn', - type: 'uint256', - }, - ], - stateMutability: 'pure', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountIn', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'reserveIn', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'reserveOut', - type: 'uint256', - }, - ], - name: 'getAmountOut', - outputs: [ - { - internalType: 'uint256', - name: 'amountOut', - type: 'uint256', - }, - ], - stateMutability: 'pure', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountOut', - type: 'uint256', - }, - { - internalType: 'address[]', - name: 'path', - type: 'address[]', - }, - ], - name: 'getAmountsIn', - outputs: [ - { - internalType: 'uint256[]', - name: 'amounts', - type: 'uint256[]', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountIn', - type: 'uint256', - }, - { - internalType: 'address[]', - name: 'path', - type: 'address[]', - }, - ], - name: 'getAmountsOut', - outputs: [ - { - internalType: 'uint256[]', - name: 'amounts', - type: 'uint256[]', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountA', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'reserveA', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'reserveB', - type: 'uint256', - }, - ], - name: 'quote', - outputs: [ - { - internalType: 'uint256', - name: 'amountB', - type: 'uint256', - }, - ], - stateMutability: 'pure', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'tokenA', - type: 'address', - }, - { - internalType: 'address', - name: 'tokenB', - type: 'address', - }, - { - internalType: 'uint256', - name: 'liquidity', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountAMin', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountBMin', - type: 'uint256', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - ], - name: 'removeLiquidity', - outputs: [ - { - internalType: 'uint256', - name: 'amountA', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountB', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'token', - type: 'address', - }, - { - internalType: 'uint256', - name: 'liquidity', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountTokenMin', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountETHMin', - type: 'uint256', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - ], - name: 'removeLiquidityETH', - outputs: [ - { - internalType: 'uint256', - name: 'amountToken', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountETH', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'token', - type: 'address', - }, - { - internalType: 'uint256', - name: 'liquidity', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountTokenMin', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountETHMin', - type: 'uint256', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - ], - name: 'removeLiquidityETHSupportingFeeOnTransferTokens', - outputs: [ - { - internalType: 'uint256', - name: 'amountETH', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'token', - type: 'address', - }, - { - internalType: 'uint256', - name: 'liquidity', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountTokenMin', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountETHMin', - type: 'uint256', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - { - internalType: 'bool', - name: 'approveMax', - type: 'bool', - }, - { - internalType: 'uint8', - name: 'v', - type: 'uint8', - }, - { - internalType: 'bytes32', - name: 'r', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 's', - type: 'bytes32', - }, - ], - name: 'removeLiquidityETHWithPermit', - outputs: [ - { - internalType: 'uint256', - name: 'amountToken', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountETH', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'token', - type: 'address', - }, - { - internalType: 'uint256', - name: 'liquidity', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountTokenMin', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountETHMin', - type: 'uint256', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - { - internalType: 'bool', - name: 'approveMax', - type: 'bool', - }, - { - internalType: 'uint8', - name: 'v', - type: 'uint8', - }, - { - internalType: 'bytes32', - name: 'r', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 's', - type: 'bytes32', - }, - ], - name: 'removeLiquidityETHWithPermitSupportingFeeOnTransferTokens', - outputs: [ - { - internalType: 'uint256', - name: 'amountETH', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'tokenA', - type: 'address', - }, - { - internalType: 'address', - name: 'tokenB', - type: 'address', - }, - { - internalType: 'uint256', - name: 'liquidity', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountAMin', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountBMin', - type: 'uint256', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - { - internalType: 'bool', - name: 'approveMax', - type: 'bool', - }, - { - internalType: 'uint8', - name: 'v', - type: 'uint8', - }, - { - internalType: 'bytes32', - name: 'r', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 's', - type: 'bytes32', - }, - ], - name: 'removeLiquidityWithPermit', - outputs: [ - { - internalType: 'uint256', - name: 'amountA', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountB', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountOut', - type: 'uint256', - }, - { - internalType: 'address[]', - name: 'path', - type: 'address[]', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - ], - name: 'swapETHForExactTokens', - outputs: [ - { - internalType: 'uint256[]', - name: 'amounts', - type: 'uint256[]', - }, - ], - stateMutability: 'payable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountOutMin', - type: 'uint256', - }, - { - internalType: 'address[]', - name: 'path', - type: 'address[]', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - ], - name: 'swapExactETHForTokens', - outputs: [ - { - internalType: 'uint256[]', - name: 'amounts', - type: 'uint256[]', - }, - ], - stateMutability: 'payable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountOutMin', - type: 'uint256', - }, - { - internalType: 'address[]', - name: 'path', - type: 'address[]', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - ], - name: 'swapExactETHForTokensSupportingFeeOnTransferTokens', - outputs: [], - stateMutability: 'payable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountIn', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountOutMin', - type: 'uint256', - }, - { - internalType: 'address[]', - name: 'path', - type: 'address[]', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - ], - name: 'swapExactTokensForETH', - outputs: [ - { - internalType: 'uint256[]', - name: 'amounts', - type: 'uint256[]', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountIn', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountOutMin', - type: 'uint256', - }, - { - internalType: 'address[]', - name: 'path', - type: 'address[]', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - ], - name: 'swapExactTokensForETHSupportingFeeOnTransferTokens', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountIn', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountOutMin', - type: 'uint256', - }, - { - internalType: 'address[]', - name: 'path', - type: 'address[]', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - ], - name: 'swapExactTokensForTokens', - outputs: [ - { - internalType: 'uint256[]', - name: 'amounts', - type: 'uint256[]', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountIn', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountOutMin', - type: 'uint256', - }, - { - internalType: 'address[]', - name: 'path', - type: 'address[]', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - ], - name: 'swapExactTokensForTokensSupportingFeeOnTransferTokens', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountOut', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountInMax', - type: 'uint256', - }, - { - internalType: 'address[]', - name: 'path', - type: 'address[]', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - ], - name: 'swapTokensForExactETH', - outputs: [ - { - internalType: 'uint256[]', - name: 'amounts', - type: 'uint256[]', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountOut', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountInMax', - type: 'uint256', - }, - { - internalType: 'address[]', - name: 'path', - type: 'address[]', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - ], - name: 'swapTokensForExactTokens', - outputs: [ - { - internalType: 'uint256[]', - name: 'amounts', - type: 'uint256[]', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, -] - -var abi$2 = [ - { - inputs: [ - { - internalType: 'address', - name: '_factory', - type: 'address', - }, - { - internalType: 'address', - name: '_WETH9', - type: 'address', - }, - ], - stateMutability: 'nonpayable', - type: 'constructor', - }, - { - inputs: [], - name: 'WETH9', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'factory', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes', - name: 'path', - type: 'bytes', - }, - { - internalType: 'uint256', - name: 'amountIn', - type: 'uint256', - }, - ], - name: 'quoteExactInput', - outputs: [ - { - internalType: 'uint256', - name: 'amountOut', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'tokenIn', - type: 'address', - }, - { - internalType: 'address', - name: 'tokenOut', - type: 'address', - }, - { - internalType: 'uint24', - name: 'fee', - type: 'uint24', - }, - { - internalType: 'uint256', - name: 'amountIn', - type: 'uint256', - }, - { - internalType: 'uint160', - name: 'sqrtPriceLimitX96', - type: 'uint160', - }, - ], - name: 'quoteExactInputSingle', - outputs: [ - { - internalType: 'uint256', - name: 'amountOut', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes', - name: 'path', - type: 'bytes', - }, - { - internalType: 'uint256', - name: 'amountOut', - type: 'uint256', - }, - ], - name: 'quoteExactOutput', - outputs: [ - { - internalType: 'uint256', - name: 'amountIn', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'tokenIn', - type: 'address', - }, - { - internalType: 'address', - name: 'tokenOut', - type: 'address', - }, - { - internalType: 'uint24', - name: 'fee', - type: 'uint24', - }, - { - internalType: 'uint256', - name: 'amountOut', - type: 'uint256', - }, - { - internalType: 'uint160', - name: 'sqrtPriceLimitX96', - type: 'uint160', - }, - ], - name: 'quoteExactOutputSingle', - outputs: [ - { - internalType: 'uint256', - name: 'amountIn', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'int256', - name: 'amount0Delta', - type: 'int256', - }, - { - internalType: 'int256', - name: 'amount1Delta', - type: 'int256', - }, - { - internalType: 'bytes', - name: 'path', - type: 'bytes', - }, - ], - name: 'uniswapV3SwapCallback', - outputs: [], - stateMutability: 'view', - type: 'function', - }, -] - -var abi$1 = [ - { - inputs: [], - name: 'getCurrentBlockTimestamp', - outputs: [ - { - internalType: 'uint256', - name: 'timestamp', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'addr', - type: 'address', - }, - ], - name: 'getEthBalance', - outputs: [ - { - internalType: 'uint256', - name: 'balance', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - components: [ - { - internalType: 'address', - name: 'target', - type: 'address', - }, - { - internalType: 'uint256', - name: 'gasLimit', - type: 'uint256', - }, - { - internalType: 'bytes', - name: 'callData', - type: 'bytes', - }, - ], - internalType: 'struct UniswapInterfaceMulticall.Call[]', - name: 'calls', - type: 'tuple[]', - }, - ], - name: 'multicall', - outputs: [ - { - internalType: 'uint256', - name: 'blockNumber', - type: 'uint256', - }, - { - components: [ - { - internalType: 'bool', - name: 'success', - type: 'bool', - }, - { - internalType: 'uint256', - name: 'gasUsed', - type: 'uint256', - }, - { - internalType: 'bytes', - name: 'returnData', - type: 'bytes', - }, - ], - internalType: 'struct UniswapInterfaceMulticall.Result[]', - name: 'returnData', - type: 'tuple[]', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, -] - -var ARGENT_WALLET_DETECTOR_ABI = [ - { - inputs: [ - { - internalType: 'bytes32[]', - name: '_codes', - type: 'bytes32[]', - }, - { - internalType: 'address[]', - name: '_implementations', - type: 'address[]', - }, - ], - stateMutability: 'nonpayable', - type: 'constructor', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'code', - type: 'bytes32', - }, - ], - name: 'CodeAdded', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'implementation', - type: 'address', - }, - ], - name: 'ImplementationAdded', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: '_newOwner', - type: 'address', - }, - ], - name: 'OwnerChanged', - type: 'event', - }, - { - inputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - ], - name: 'acceptedCodes', - outputs: [ - { - internalType: 'bool', - name: 'exists', - type: 'bool', - }, - { - internalType: 'uint128', - name: 'index', - type: 'uint128', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'acceptedImplementations', - outputs: [ - { - internalType: 'bool', - name: 'exists', - type: 'bool', - }, - { - internalType: 'uint128', - name: 'index', - type: 'uint128', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes32', - name: '_code', - type: 'bytes32', - }, - ], - name: 'addCode', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_argentWallet', - type: 'address', - }, - ], - name: 'addCodeAndImplementationFromWallet', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_impl', - type: 'address', - }, - ], - name: 'addImplementation', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_newOwner', - type: 'address', - }, - ], - name: 'changeOwner', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'getCodes', - outputs: [ - { - internalType: 'bytes32[]', - name: '', - type: 'bytes32[]', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'getImplementations', - outputs: [ - { - internalType: 'address[]', - name: '', - type: 'address[]', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_wallet', - type: 'address', - }, - ], - name: 'isArgentWallet', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'owner', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, -] - -var EIP_2612 = [ - { - constant: true, - inputs: [ - { - name: 'owner', - type: 'address', - }, - ], - name: 'nonces', - outputs: [ - { - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'DOMAIN_SEPARATOR', - outputs: [ - { - name: '', - type: 'bytes32', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, -] - -var ENS_PUBLIC_RESOLVER_ABI = [ - { - inputs: [ - { - internalType: 'contract ENS', - name: '_ens', - type: 'address', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'constructor', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: true, - internalType: 'uint256', - name: 'contentType', - type: 'uint256', - }, - ], - name: 'ABIChanged', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: false, - internalType: 'address', - name: 'a', - type: 'address', - }, - ], - name: 'AddrChanged', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: false, - internalType: 'uint256', - name: 'coinType', - type: 'uint256', - }, - { - indexed: false, - internalType: 'bytes', - name: 'newAddress', - type: 'bytes', - }, - ], - name: 'AddressChanged', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'target', - type: 'address', - }, - { - indexed: false, - internalType: 'bool', - name: 'isAuthorised', - type: 'bool', - }, - ], - name: 'AuthorisationChanged', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: false, - internalType: 'bytes', - name: 'hash', - type: 'bytes', - }, - ], - name: 'ContenthashChanged', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: false, - internalType: 'bytes', - name: 'name', - type: 'bytes', - }, - { - indexed: false, - internalType: 'uint16', - name: 'resource', - type: 'uint16', - }, - { - indexed: false, - internalType: 'bytes', - name: 'record', - type: 'bytes', - }, - ], - name: 'DNSRecordChanged', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: false, - internalType: 'bytes', - name: 'name', - type: 'bytes', - }, - { - indexed: false, - internalType: 'uint16', - name: 'resource', - type: 'uint16', - }, - ], - name: 'DNSRecordDeleted', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - ], - name: 'DNSZoneCleared', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: true, - internalType: 'bytes4', - name: 'interfaceID', - type: 'bytes4', - }, - { - indexed: false, - internalType: 'address', - name: 'implementer', - type: 'address', - }, - ], - name: 'InterfaceChanged', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: false, - internalType: 'string', - name: 'name', - type: 'string', - }, - ], - name: 'NameChanged', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: false, - internalType: 'bytes32', - name: 'x', - type: 'bytes32', - }, - { - indexed: false, - internalType: 'bytes32', - name: 'y', - type: 'bytes32', - }, - ], - name: 'PubkeyChanged', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: true, - internalType: 'string', - name: 'indexedKey', - type: 'string', - }, - { - indexed: false, - internalType: 'string', - name: 'key', - type: 'string', - }, - ], - name: 'TextChanged', - type: 'event', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'uint256', - name: 'contentTypes', - type: 'uint256', - }, - ], - name: 'ABI', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - { - internalType: 'bytes', - name: '', - type: 'bytes', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - ], - name: 'addr', - outputs: [ - { - internalType: 'address payable', - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - { - internalType: 'address', - name: '', - type: 'address', - }, - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'authorisations', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - ], - name: 'clearDNSZone', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - ], - name: 'contenthash', - outputs: [ - { - internalType: 'bytes', - name: '', - type: 'bytes', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 'name', - type: 'bytes32', - }, - { - internalType: 'uint16', - name: 'resource', - type: 'uint16', - }, - ], - name: 'dnsRecord', - outputs: [ - { - internalType: 'bytes', - name: '', - type: 'bytes', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 'name', - type: 'bytes32', - }, - ], - name: 'hasDNSRecords', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'bytes4', - name: 'interfaceID', - type: 'bytes4', - }, - ], - name: 'interfaceImplementer', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - ], - name: 'name', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - ], - name: 'pubkey', - outputs: [ - { - internalType: 'bytes32', - name: 'x', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 'y', - type: 'bytes32', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'uint256', - name: 'contentType', - type: 'uint256', - }, - { - internalType: 'bytes', - name: 'data', - type: 'bytes', - }, - ], - name: 'setABI', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'uint256', - name: 'coinType', - type: 'uint256', - }, - { - internalType: 'bytes', - name: 'a', - type: 'bytes', - }, - ], - name: 'setAddr', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'address', - name: 'a', - type: 'address', - }, - ], - name: 'setAddr', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'address', - name: 'target', - type: 'address', - }, - { - internalType: 'bool', - name: 'isAuthorised', - type: 'bool', - }, - ], - name: 'setAuthorisation', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'bytes', - name: 'hash', - type: 'bytes', - }, - ], - name: 'setContenthash', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'bytes', - name: 'data', - type: 'bytes', - }, - ], - name: 'setDNSRecords', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'bytes4', - name: 'interfaceID', - type: 'bytes4', - }, - { - internalType: 'address', - name: 'implementer', - type: 'address', - }, - ], - name: 'setInterface', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'string', - name: 'name', - type: 'string', - }, - ], - name: 'setName', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 'x', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 'y', - type: 'bytes32', - }, - ], - name: 'setPubkey', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'string', - name: 'key', - type: 'string', - }, - { - internalType: 'string', - name: 'value', - type: 'string', - }, - ], - name: 'setText', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes4', - name: 'interfaceID', - type: 'bytes4', - }, - ], - name: 'supportsInterface', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'pure', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'string', - name: 'key', - type: 'string', - }, - ], - name: 'text', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, -] - -var ENS_ABI = [ - { - inputs: [ - { - internalType: 'contract ENS', - name: '_old', - type: 'address', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'constructor', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'operator', - type: 'address', - }, - { - indexed: false, - internalType: 'bool', - name: 'approved', - type: 'bool', - }, - ], - name: 'ApprovalForAll', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: true, - internalType: 'bytes32', - name: 'label', - type: 'bytes32', - }, - { - indexed: false, - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'NewOwner', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: false, - internalType: 'address', - name: 'resolver', - type: 'address', - }, - ], - name: 'NewResolver', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: false, - internalType: 'uint64', - name: 'ttl', - type: 'uint64', - }, - ], - name: 'NewTTL', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: false, - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'Transfer', - type: 'event', - }, - { - constant: true, - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - internalType: 'address', - name: 'operator', - type: 'address', - }, - ], - name: 'isApprovedForAll', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'old', - outputs: [ - { - internalType: 'contract ENS', - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - ], - name: 'owner', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - ], - name: 'recordExists', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - ], - name: 'resolver', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'address', - name: 'operator', - type: 'address', - }, - { - internalType: 'bool', - name: 'approved', - type: 'bool', - }, - ], - name: 'setApprovalForAll', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'setOwner', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - internalType: 'address', - name: 'resolver', - type: 'address', - }, - { - internalType: 'uint64', - name: 'ttl', - type: 'uint64', - }, - ], - name: 'setRecord', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'address', - name: 'resolver', - type: 'address', - }, - ], - name: 'setResolver', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 'label', - type: 'bytes32', - }, - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'setSubnodeOwner', - outputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 'label', - type: 'bytes32', - }, - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - internalType: 'address', - name: 'resolver', - type: 'address', - }, - { - internalType: 'uint64', - name: 'ttl', - type: 'uint64', - }, - ], - name: 'setSubnodeRecord', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'uint64', - name: 'ttl', - type: 'uint64', - }, - ], - name: 'setTTL', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - ], - name: 'ttl', - outputs: [ - { - internalType: 'uint64', - name: '', - type: 'uint64', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, -] - -var ERC20ABI = [ - { - constant: true, - inputs: [], - name: 'name', - outputs: [ - { - name: '', - type: 'string', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - name: '_spender', - type: 'address', - }, - { - name: '_value', - type: 'uint256', - }, - ], - name: 'approve', - outputs: [ - { - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'totalSupply', - outputs: [ - { - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - name: '_from', - type: 'address', - }, - { - name: '_to', - type: 'address', - }, - { - name: '_value', - type: 'uint256', - }, - ], - name: 'transferFrom', - outputs: [ - { - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'decimals', - outputs: [ - { - name: '', - type: 'uint8', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - name: '_owner', - type: 'address', - }, - ], - name: 'balanceOf', - outputs: [ - { - name: 'balance', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'symbol', - outputs: [ - { - name: '', - type: 'string', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - name: '_to', - type: 'address', - }, - { - name: '_value', - type: 'uint256', - }, - ], - name: 'transfer', - outputs: [ - { - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [ - { - name: '_owner', - type: 'address', - }, - { - name: '_spender', - type: 'address', - }, - ], - name: 'allowance', - outputs: [ - { - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - payable: true, - stateMutability: 'payable', - type: 'fallback', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: 'owner', - type: 'address', - }, - { - indexed: true, - name: 'spender', - type: 'address', - }, - { - indexed: false, - name: 'value', - type: 'uint256', - }, - ], - name: 'Approval', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: 'from', - type: 'address', - }, - { - indexed: true, - name: 'to', - type: 'address', - }, - { - indexed: false, - name: 'value', - type: 'uint256', - }, - ], - name: 'Transfer', - type: 'event', - }, -] - -var ERC20_BYTES32_ABI = [ - { - constant: true, - inputs: [], - name: 'name', - outputs: [ - { - name: '', - type: 'bytes32', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'symbol', - outputs: [ - { - name: '', - type: 'bytes32', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, -] - -var ERC721_ABI = [ - { - inputs: [ - { - internalType: 'uint256', - name: 'tokenId', - type: 'uint256', - }, - ], - name: 'ownerOf', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'tokenId', - type: 'uint256', - }, - ], - name: 'tokenURI', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, -] - -var ERC1155_ABI = [ - { - constant: true, - inputs: [ - { - internalType: 'address', - name: '_owner', - type: 'address', - }, - { - internalType: 'uint256', - name: '_id', - type: 'uint256', - }, - ], - name: 'balanceOf', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'uint256', - name: '_id', - type: 'uint256', - }, - ], - name: 'uri', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, -] - -var WETH_ABI = [ - { - constant: true, - inputs: [], - name: 'name', - outputs: [ - { - name: '', - type: 'string', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - name: 'guy', - type: 'address', - }, - { - name: 'wad', - type: 'uint256', - }, - ], - name: 'approve', - outputs: [ - { - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'totalSupply', - outputs: [ - { - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - name: 'src', - type: 'address', - }, - { - name: 'dst', - type: 'address', - }, - { - name: 'wad', - type: 'uint256', - }, - ], - name: 'transferFrom', - outputs: [ - { - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - name: 'wad', - type: 'uint256', - }, - ], - name: 'withdraw', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'decimals', - outputs: [ - { - name: '', - type: 'uint8', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - name: '', - type: 'address', - }, - ], - name: 'balanceOf', - outputs: [ - { - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'symbol', - outputs: [ - { - name: '', - type: 'string', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - name: 'dst', - type: 'address', - }, - { - name: 'wad', - type: 'uint256', - }, - ], - name: 'transfer', - outputs: [ - { - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [], - name: 'deposit', - outputs: [], - payable: true, - stateMutability: 'payable', - type: 'function', - }, - { - constant: true, - inputs: [ - { - name: '', - type: 'address', - }, - { - name: '', - type: 'address', - }, - ], - name: 'allowance', - outputs: [ - { - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - payable: true, - stateMutability: 'payable', - type: 'fallback', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: 'src', - type: 'address', - }, - { - indexed: true, - name: 'guy', - type: 'address', - }, - { - indexed: false, - name: 'wad', - type: 'uint256', - }, - ], - name: 'Approval', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: 'src', - type: 'address', - }, - { - indexed: true, - name: 'dst', - type: 'address', - }, - { - indexed: false, - name: 'wad', - type: 'uint256', - }, - ], - name: 'Transfer', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: 'dst', - type: 'address', - }, - { - indexed: false, - name: 'wad', - type: 'uint256', - }, - ], - name: 'Deposit', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: 'src', - type: 'address', - }, - { - indexed: false, - name: 'wad', - type: 'uint256', - }, - ], - name: 'Withdrawal', - type: 'event', - }, -] - -var _a$h -/** - * List of all the networks supported by the Uniswap Interface - */ -var SupportedChainId -;(function (SupportedChainId) { - SupportedChainId[(SupportedChainId['MAINNET'] = 1)] = 'MAINNET' - SupportedChainId[(SupportedChainId['ROPSTEN'] = 3)] = 'ROPSTEN' - SupportedChainId[(SupportedChainId['RINKEBY'] = 4)] = 'RINKEBY' - SupportedChainId[(SupportedChainId['GOERLI'] = 5)] = 'GOERLI' - SupportedChainId[(SupportedChainId['KOVAN'] = 42)] = 'KOVAN' - SupportedChainId[(SupportedChainId['ARBITRUM_ONE'] = 42161)] = 'ARBITRUM_ONE' - SupportedChainId[(SupportedChainId['ARBITRUM_RINKEBY'] = 421611)] = 'ARBITRUM_RINKEBY' - SupportedChainId[(SupportedChainId['OPTIMISM'] = 10)] = 'OPTIMISM' - SupportedChainId[(SupportedChainId['OPTIMISTIC_KOVAN'] = 69)] = 'OPTIMISTIC_KOVAN' - SupportedChainId[(SupportedChainId['POLYGON'] = 137)] = 'POLYGON' - SupportedChainId[(SupportedChainId['POLYGON_MUMBAI'] = 80001)] = 'POLYGON_MUMBAI' -})(SupportedChainId || (SupportedChainId = {})) -var CHAIN_IDS_TO_NAMES = - ((_a$h = {}), - (_a$h[SupportedChainId.MAINNET] = 'mainnet'), - (_a$h[SupportedChainId.ROPSTEN] = 'ropsten'), - (_a$h[SupportedChainId.RINKEBY] = 'rinkeby'), - (_a$h[SupportedChainId.GOERLI] = 'goerli'), - (_a$h[SupportedChainId.KOVAN] = 'kovan'), - (_a$h[SupportedChainId.POLYGON] = 'polygon'), - (_a$h[SupportedChainId.POLYGON_MUMBAI] = 'polygon_mumbai'), - (_a$h[SupportedChainId.ARBITRUM_ONE] = 'arbitrum'), - (_a$h[SupportedChainId.ARBITRUM_RINKEBY] = 'arbitrum_rinkeby'), - (_a$h[SupportedChainId.OPTIMISM] = 'optimism'), - (_a$h[SupportedChainId.OPTIMISTIC_KOVAN] = 'optimistic_kovan'), - _a$h) -/** - * Array of all the supported chain IDs - */ -var ALL_SUPPORTED_CHAIN_IDS = Object.values(SupportedChainId).filter(function (id) { - return typeof id === 'number' -}) -var SUPPORTED_GAS_ESTIMATE_CHAIN_IDS = [SupportedChainId.MAINNET, SupportedChainId.POLYGON] -/** - * All the chain IDs that are running the Ethereum protocol. - */ -;[ - SupportedChainId.MAINNET, - SupportedChainId.ROPSTEN, - SupportedChainId.RINKEBY, - SupportedChainId.GOERLI, - SupportedChainId.KOVAN, - SupportedChainId.POLYGON, - SupportedChainId.POLYGON_MUMBAI, -] -/** - * Controls some L2 specific behavior, e.g. slippage tolerance, special UI behavior. - * The expectation is that all of these networks have immediate transaction confirmation. - */ -var L2_CHAIN_IDS = [ - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, -] - -var DEFAULT_NETWORKS = [ - SupportedChainId.MAINNET, - SupportedChainId.ROPSTEN, - SupportedChainId.RINKEBY, - SupportedChainId.GOERLI, - SupportedChainId.KOVAN, -] -function constructSameAddressMap(address, additionalNetworks) { - if (additionalNetworks === void 0) { - additionalNetworks = [] - } - return DEFAULT_NETWORKS.concat(additionalNetworks).reduce(function (memo, chainId) { - memo[chainId] = address - return memo - }, {}) -} - -var _a$g, _b$6, _c$4, _d$3, _e$2, _f$1, _g$1, _h$1 -var UNI_ADDRESS = constructSameAddressMap('0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984') -var MULTICALL_ADDRESS = __assign( - __assign( - {}, - constructSameAddressMap('0x1F98415757620B543A52E61c46B32eB19261F984', [ - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.OPTIMISM, - SupportedChainId.POLYGON_MUMBAI, - SupportedChainId.POLYGON, - ]) - ), - ((_a$g = {}), - (_a$g[SupportedChainId.ARBITRUM_ONE] = '0xadF885960B47eA2CD9B55E6DAc6B42b7Cb2806dB'), - (_a$g[SupportedChainId.ARBITRUM_RINKEBY] = '0xa501c031958F579dB7676fF1CE78AD305794d579'), - _a$g) -) -var V2_FACTORY_ADDRESSES = constructSameAddressMap(v2Sdk.FACTORY_ADDRESS) -var V2_ROUTER_ADDRESS = constructSameAddressMap('0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D') -var V3_ROUTER_ADDRESS = constructSameAddressMap('0xE592427A0AEce92De3Edee1F18E0157C05861564', [ - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON, - SupportedChainId.POLYGON_MUMBAI, -]) -var SWAP_ROUTER_ADDRESSES = constructSameAddressMap('0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45', [ - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON, - SupportedChainId.POLYGON_MUMBAI, -]) -/** - * The oldest V0 governance address - */ -constructSameAddressMap('0x5e4be8Bc9637f0EAA1A755019e06A68ce081D58F') -/** - * The older V1 governance address - */ -;(_b$6 = {}), (_b$6[SupportedChainId.MAINNET] = '0xC4e172459f1E7939D522503B81AFAaC1014CE6F6'), _b$6 -/** - * The latest governor bravo that is currently admin of timelock - */ -;(_c$4 = {}), (_c$4[SupportedChainId.MAINNET] = '0x408ED6354d4973f66138C91495F2f2FCbd8724C3'), _c$4 -constructSameAddressMap('0x1a9C8182C09F50C8318d769245beA52c32BE35BC') -var MERKLE_DISTRIBUTOR_ADDRESS = - ((_d$3 = {}), (_d$3[SupportedChainId.MAINNET] = '0x090D4613473dEE047c3f2706764f49E0821D256e'), _d$3) -var ARGENT_WALLET_DETECTOR_ADDRESS = - ((_e$2 = {}), (_e$2[SupportedChainId.MAINNET] = '0xeca4B0bDBf7c55E9b7925919d03CbF8Dc82537E8'), _e$2) -var V3_CORE_FACTORY_ADDRESSES = constructSameAddressMap(v3Sdk.FACTORY_ADDRESS, [ - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON_MUMBAI, - SupportedChainId.POLYGON, -]) -var QUOTER_ADDRESSES = constructSameAddressMap('0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6', [ - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON_MUMBAI, - SupportedChainId.POLYGON, -]) -constructSameAddressMap('0xC36442b4a4522E871399CD717aBDD847Ab11FE88', [ - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON_MUMBAI, - SupportedChainId.POLYGON, -]) -var ENS_REGISTRAR_ADDRESSES = - ((_f$1 = {}), - (_f$1[SupportedChainId.MAINNET] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'), - (_f$1[SupportedChainId.ROPSTEN] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'), - (_f$1[SupportedChainId.GOERLI] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'), - (_f$1[SupportedChainId.RINKEBY] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'), - _f$1) -var SOCKS_CONTROLLER_ADDRESSES = - ((_g$1 = {}), (_g$1[SupportedChainId.MAINNET] = '0x65770b5283117639760beA3F867b69b3697a91dd'), _g$1) -constructSameAddressMap('0xA5644E29708357803b5A882D272c41cC0dF92B34', [ - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON_MUMBAI, - SupportedChainId.POLYGON, -]) -;(_h$1 = {}), - (_h$1[SupportedChainId.ARBITRUM_ONE] = '0xbfd8137f7d1516D3ea5cA83523914859ec47F573'), - (_h$1[SupportedChainId.ARBITRUM_RINKEBY] = '0xbfd8137f7d1516D3ea5cA83523914859ec47F573'), - _h$1 - -var _a$f, _b$5 -var AMPL = new sdkCore.Token( - SupportedChainId.MAINNET, - '0xD46bA6D942050d489DBd938a2C909A5d5039A161', - 9, - 'AMPL', - 'Ampleforth' -) -var DAI = new sdkCore.Token( - SupportedChainId.MAINNET, - '0x6B175474E89094C44Da98b954EedeAC495271d0F', - 18, - 'DAI', - 'Dai Stablecoin' -) -var DAI_ARBITRUM_ONE = new sdkCore.Token( - SupportedChainId.ARBITRUM_ONE, - '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', - 18, - 'DAI', - 'Dai stable coin' -) -var DAI_OPTIMISM = new sdkCore.Token( - SupportedChainId.OPTIMISM, - '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', - 18, - 'DAI', - 'Dai stable coin' -) -var USDC = new sdkCore.Token( - SupportedChainId.MAINNET, - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', - 6, - 'USDC', - 'USD//C' -) -var USDC_ARBITRUM = new sdkCore.Token( - SupportedChainId.ARBITRUM_ONE, - '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8', - 6, - 'USDC', - 'USD//C' -) -var USDC_POLYGON = new sdkCore.Token( - SupportedChainId.POLYGON, - '0x2791bca1f2de4661ed88a30c99a7a9449aa84174', - 6, - 'USDC', - 'USD//C' -) -var DAI_POLYGON = new sdkCore.Token( - SupportedChainId.POLYGON, - '0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063', - 18, - 'DAI', - 'Dai Stablecoin' -) -var USDT_POLYGON = new sdkCore.Token( - SupportedChainId.POLYGON, - '0xc2132d05d31c914a87c6611c10748aeb04b58e8f', - 6, - 'USDT', - 'Tether USD' -) -var WBTC_POLYGON = new sdkCore.Token( - SupportedChainId.POLYGON, - '0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6', - 8, - 'WBTC', - 'Wrapped BTC' -) -var USDC_OPTIMISM = new sdkCore.Token( - SupportedChainId.OPTIMISM, - '0x7F5c764cBc14f9669B88837ca1490cCa17c31607', - 6, - 'USDC', - 'USD//C' -) -var USDT = new sdkCore.Token( - SupportedChainId.MAINNET, - '0xdAC17F958D2ee523a2206206994597C13D831ec7', - 6, - 'USDT', - 'Tether USD' -) -var USDT_ARBITRUM_ONE = new sdkCore.Token( - SupportedChainId.ARBITRUM_ONE, - '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9', - 6, - 'USDT', - 'Tether USD' -) -var USDT_OPTIMISM = new sdkCore.Token( - SupportedChainId.OPTIMISM, - '0x94b008aA00579c1307B0EF2c499aD98a8ce58e58', - 6, - 'USDT', - 'Tether USD' -) -var WBTC = new sdkCore.Token( - SupportedChainId.MAINNET, - '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', - 8, - 'WBTC', - 'Wrapped BTC' -) -var WBTC_ARBITRUM_ONE = new sdkCore.Token( - SupportedChainId.ARBITRUM_ONE, - '0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f', - 8, - 'WBTC', - 'Wrapped BTC' -) -var WBTC_OPTIMISM = new sdkCore.Token( - SupportedChainId.OPTIMISM, - '0x68f180fcCe6836688e9084f035309E29Bf0A2095', - 8, - 'WBTC', - 'Wrapped BTC' -) -var FEI = new sdkCore.Token( - SupportedChainId.MAINNET, - '0x956F47F50A910163D8BF957Cf5846D573E7f87CA', - 18, - 'FEI', - 'Fei USD' -) -var TRIBE = new sdkCore.Token( - SupportedChainId.MAINNET, - '0xc7283b66Eb1EB5FB86327f08e1B5816b0720212B', - 18, - 'TRIBE', - 'Tribe' -) -var FRAX = new sdkCore.Token(SupportedChainId.MAINNET, '0x853d955aCEf822Db058eb8505911ED77F175b99e', 18, 'FRAX', 'Frax') -var FXS = new sdkCore.Token( - SupportedChainId.MAINNET, - '0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0', - 18, - 'FXS', - 'Frax Share' -) -var renBTC = new sdkCore.Token( - SupportedChainId.MAINNET, - '0xEB4C2781e4ebA804CE9a9803C67d0893436bB27D', - 8, - 'renBTC', - 'renBTC' -) -var ETH2X_FLI = new sdkCore.Token( - SupportedChainId.MAINNET, - '0xAa6E8127831c9DE45ae56bB1b0d4D4Da6e5665BD', - 18, - 'ETH2x-FLI', - 'ETH 2x Flexible Leverage Index' -) -var sETH2 = new sdkCore.Token( - SupportedChainId.MAINNET, - '0xFe2e637202056d30016725477c5da089Ab0A043A', - 18, - 'sETH2', - 'StakeWise Staked ETH2' -) -var rETH2 = new sdkCore.Token( - SupportedChainId.MAINNET, - '0x20BC832ca081b91433ff6c17f85701B6e92486c5', - 18, - 'rETH2', - 'StakeWise Reward ETH2' -) -var SWISE = new sdkCore.Token( - SupportedChainId.MAINNET, - '0x48C3399719B582dD63eB5AADf12A40B4C3f52FA2', - 18, - 'SWISE', - 'StakeWise' -) -var WETH_POLYGON_MUMBAI = new sdkCore.Token( - SupportedChainId.POLYGON_MUMBAI, - '0xa6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa', - 18, - 'WETH', - 'Wrapped Ether' -) -var WETH_POLYGON = new sdkCore.Token( - SupportedChainId.POLYGON, - '0x7ceb23fd6bc0add59e62ac25578270cff1b9f619', - 18, - 'WETH', - 'Wrapped Ether' -) -var UNI = - ((_a$f = {}), - (_a$f[SupportedChainId.MAINNET] = new sdkCore.Token(SupportedChainId.MAINNET, UNI_ADDRESS[1], 18, 'UNI', 'Uniswap')), - (_a$f[SupportedChainId.RINKEBY] = new sdkCore.Token(SupportedChainId.RINKEBY, UNI_ADDRESS[4], 18, 'UNI', 'Uniswap')), - (_a$f[SupportedChainId.ROPSTEN] = new sdkCore.Token(SupportedChainId.ROPSTEN, UNI_ADDRESS[3], 18, 'UNI', 'Uniswap')), - (_a$f[SupportedChainId.GOERLI] = new sdkCore.Token(SupportedChainId.GOERLI, UNI_ADDRESS[5], 18, 'UNI', 'Uniswap')), - (_a$f[SupportedChainId.KOVAN] = new sdkCore.Token(SupportedChainId.KOVAN, UNI_ADDRESS[42], 18, 'UNI', 'Uniswap')), - _a$f) -var WRAPPED_NATIVE_CURRENCY = __assign( - __assign({}, sdkCore.WETH9), - ((_b$5 = {}), - (_b$5[SupportedChainId.OPTIMISM] = new sdkCore.Token( - SupportedChainId.OPTIMISM, - '0x4200000000000000000000000000000000000006', - 18, - 'WETH', - 'Wrapped Ether' - )), - (_b$5[SupportedChainId.OPTIMISTIC_KOVAN] = new sdkCore.Token( - SupportedChainId.OPTIMISTIC_KOVAN, - '0x4200000000000000000000000000000000000006', - 18, - 'WETH', - 'Wrapped Ether' - )), - (_b$5[SupportedChainId.ARBITRUM_ONE] = new sdkCore.Token( - SupportedChainId.ARBITRUM_ONE, - '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1', - 18, - 'WETH', - 'Wrapped Ether' - )), - (_b$5[SupportedChainId.ARBITRUM_RINKEBY] = new sdkCore.Token( - SupportedChainId.ARBITRUM_RINKEBY, - '0xB47e6A5f8b33b3F17603C83a0535A9dcD7E32681', - 18, - 'WETH', - 'Wrapped Ether' - )), - (_b$5[SupportedChainId.POLYGON] = new sdkCore.Token( - SupportedChainId.POLYGON, - '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270', - 18, - 'WMATIC', - 'Wrapped MATIC' - )), - (_b$5[SupportedChainId.POLYGON_MUMBAI] = new sdkCore.Token( - SupportedChainId.POLYGON_MUMBAI, - '0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889', - 18, - 'WMATIC', - 'Wrapped MATIC' - )), - _b$5) -) -function isMatic(chainId) { - return chainId === SupportedChainId.POLYGON_MUMBAI || chainId === SupportedChainId.POLYGON -} -var MaticNativeCurrency = /** @class */ (function (_super) { - __extends(MaticNativeCurrency, _super) - function MaticNativeCurrency(chainId) { - var _this = this - if (!isMatic(chainId)) throw new Error('Not matic') - _this = _super.call(this, chainId, 18, 'MATIC', 'Polygon Matic') || this - return _this - } - MaticNativeCurrency.prototype.equals = function (other) { - return other.isNative && other.chainId === this.chainId - } - Object.defineProperty(MaticNativeCurrency.prototype, 'wrapped', { - get() { - if (!isMatic(this.chainId)) throw new Error('Not matic') - return WRAPPED_NATIVE_CURRENCY[this.chainId] - }, - enumerable: false, - configurable: true, - }) - return MaticNativeCurrency -})(sdkCore.NativeCurrency) -var ExtendedEther = /** @class */ (function (_super) { - __extends(ExtendedEther, _super) - function ExtendedEther() { - return (_super !== null && _super.apply(this, arguments)) || this - } - Object.defineProperty(ExtendedEther.prototype, 'wrapped', { - get() { - if (this.chainId in WRAPPED_NATIVE_CURRENCY) return WRAPPED_NATIVE_CURRENCY[this.chainId] - throw new Error('Unsupported chain ID') - }, - enumerable: false, - configurable: true, - }) - ExtendedEther.onChain = function (chainId) { - var _a - return (_a = this._cachedExtendedEther[chainId]) !== null && _a !== void 0 - ? _a - : (this._cachedExtendedEther[chainId] = new ExtendedEther(chainId)) - } - ExtendedEther._cachedExtendedEther = {} - return ExtendedEther -})(sdkCore.Ether) -var cachedNativeCurrency = {} -function nativeOnChain(chainId) { - var _a - return (_a = cachedNativeCurrency[chainId]) !== null && _a !== void 0 - ? _a - : (cachedNativeCurrency[chainId] = isMatic(chainId) - ? new MaticNativeCurrency(chainId) - : ExtendedEther.onChain(chainId)) -} - -// returns null on errors -function useContract(addressOrAddressMap, ABI, withSignerIfPossible) { - if (withSignerIfPossible === void 0) { - withSignerIfPossible = true - } - var _a = useActiveWeb3React(), - library = _a.library, - account = _a.account, - chainId = _a.chainId - return React.useMemo( - function () { - if (!addressOrAddressMap || !ABI || !library || !chainId) return null - var address - if (typeof addressOrAddressMap === 'string') address = addressOrAddressMap - else address = addressOrAddressMap[chainId] - if (!address) return null - try { - return getContract(address, ABI, library, withSignerIfPossible && account ? account : undefined) - } catch (error) { - console.error('Failed to get contract', error) - return null - } - }, - [addressOrAddressMap, ABI, library, chainId, withSignerIfPossible, account] - ) -} -function useTokenContract(tokenAddress, withSignerIfPossible) { - return useContract(tokenAddress, ERC20ABI, withSignerIfPossible) -} -function useWETHContract(withSignerIfPossible) { - var _a - var chainId = useActiveWeb3React().chainId - return useContract( - chainId ? ((_a = WRAPPED_NATIVE_CURRENCY[chainId]) === null || _a === void 0 ? void 0 : _a.address) : undefined, - WETH_ABI, - withSignerIfPossible - ) -} -function useERC721Contract(nftAddress) { - return useContract(nftAddress, ERC721_ABI, false) -} -function useERC1155Contract(nftAddress) { - return useContract(nftAddress, ERC1155_ABI, false) -} -function useArgentWalletDetectorContract() { - return useContract(ARGENT_WALLET_DETECTOR_ADDRESS, ARGENT_WALLET_DETECTOR_ABI, false) -} -function useENSRegistrarContract(withSignerIfPossible) { - return useContract(ENS_REGISTRAR_ADDRESSES, ENS_ABI, withSignerIfPossible) -} -function useENSResolverContract(address, withSignerIfPossible) { - return useContract(address, ENS_PUBLIC_RESOLVER_ABI, withSignerIfPossible) -} -function useBytes32TokenContract(tokenAddress, withSignerIfPossible) { - return useContract(tokenAddress, ERC20_BYTES32_ABI, withSignerIfPossible) -} -function useEIP2612Contract(tokenAddress) { - return useContract(tokenAddress, EIP_2612, false) -} -function useV2RouterContract() { - return useContract(V2_ROUTER_ADDRESS, abi$3, true) -} -function useInterfaceMulticall() { - return useContract(MULTICALL_ADDRESS, abi$1, false) -} -function useMerkleDistributorContract() { - return useContract(MERKLE_DISTRIBUTOR_ADDRESS, abi$5, true) -} -function useV3Quoter() { - return useContract(QUOTER_ADDRESSES, abi$2) -} - -var _a$e -var multicall = reduxMulticall.createMulticall() -var reducer = redux.combineReducers(((_a$e = {}), (_a$e[multicall.reducerPath] = multicall.reducer), _a$e)) -redux.createStore(reducer) -function MulticallUpdater() { - var latestBlockNumber = useBlockNumber() - var chainId = useActiveWeb3React().chainId - var contract = useInterfaceMulticall() - return jsxRuntime.jsx(multicall.Updater, { chainId, latestBlockNumber, contract }, void 0) -} - -function useMultipleContractSingleData() { - var _a - var args = [] - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i] - } - var _b = useCallContext(), - chainId = _b.chainId, - latestBlock = _b.latestBlock - return (_a = multicall.hooks).useMultipleContractSingleData.apply( - _a, - __spreadArray([chainId, latestBlock], __read(args), false) - ) -} -function useSingleCallResult() { - var _a - var args = [] - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i] - } - var _b = useCallContext(), - chainId = _b.chainId, - latestBlock = _b.latestBlock - return (_a = multicall.hooks).useSingleCallResult.apply( - _a, - __spreadArray([chainId, latestBlock], __read(args), false) - ) -} -function useSingleContractMultipleData() { - var _a - var args = [] - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i] - } - var _b = useCallContext(), - chainId = _b.chainId, - latestBlock = _b.latestBlock - return (_a = multicall.hooks).useSingleContractMultipleData.apply( - _a, - __spreadArray([chainId, latestBlock], __read(args), false) - ) -} -function useSingleContractWithCallData() { - var _a - var args = [] - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i] - } - var _b = useCallContext(), - chainId = _b.chainId, - latestBlock = _b.latestBlock - return (_a = multicall.hooks).useSingleContractWithCallData.apply( - _a, - __spreadArray([chainId, latestBlock], __read(args), false) - ) -} -function useCallContext() { - var chainId = useActiveWeb3React().chainId - var latestBlock = useBlockNumber() - return { chainId, latestBlock } -} - -function safeNamehash(name) { - if (name === undefined) return undefined - try { - return hash.namehash(name) - } catch (error) { - console.debug(error) - return undefined - } -} - -/** - * Returns true if the string value is zero in hex - * @param hexNumberString - */ -function isZero(hexNumberString) { - return /^0x0*$/.test(hexNumberString) -} - -/** - * Does a lookup for an ENS name to find its address. - */ -function useENSAddress(ensName) { - var _a - var debouncedName = useDebounce(ensName, 200) - var ensNodeArgument = React.useMemo( - function () { - return [debouncedName === null ? undefined : safeNamehash(debouncedName)] - }, - [debouncedName] - ) - var registrarContract = useENSRegistrarContract(false) - var resolverAddress = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument) - var resolverAddressResult = (_a = resolverAddress.result) === null || _a === void 0 ? void 0 : _a[0] - var resolverContract = useENSResolverContract( - resolverAddressResult && !isZero(resolverAddressResult) ? resolverAddressResult : undefined, - false - ) - var addr = useSingleCallResult(resolverContract, 'addr', ensNodeArgument) - var changed = debouncedName !== ensName - return React.useMemo( - function () { - var _a, _b - return { - address: changed - ? null - : (_b = (_a = addr.result) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 - ? _b - : null, - loading: changed || resolverAddress.loading || addr.loading, - } - }, - [addr.loading, addr.result, changed, resolverAddress.loading] - ) -} - -/** - * Does a reverse lookup for an address to find its ENS name. - * Note this is not the same as looking up an ENS name to find an address. - */ -function useENSName(address) { - var _a, _b - var debouncedAddress = useDebounce(address, 200) - var ensNodeArgument = React.useMemo( - function () { - if (!debouncedAddress || !isAddress(debouncedAddress)) return [undefined] - return [hash.namehash(debouncedAddress.toLowerCase().substr(2) + '.addr.reverse')] - }, - [debouncedAddress] - ) - var registrarContract = useENSRegistrarContract(false) - var resolverAddress = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument) - var resolverAddressResult = (_a = resolverAddress.result) === null || _a === void 0 ? void 0 : _a[0] - var resolverContract = useENSResolverContract( - resolverAddressResult && !isZero(resolverAddressResult) ? resolverAddressResult : undefined, - false - ) - var nameCallRes = useSingleCallResult(resolverContract, 'name', ensNodeArgument) - var name = (_b = nameCallRes.result) === null || _b === void 0 ? void 0 : _b[0] - /* ENS does not enforce that an address owns a .eth domain before setting it as a reverse proxy - and recommends that you perform a match on the forward resolution - see: https://docs.ens.domains/dapp-developer-guide/resolving-names#reverse-resolution - */ - var fwdAddr = useENSAddress(name) - var checkedName = address === (fwdAddr === null || fwdAddr === void 0 ? void 0 : fwdAddr.address) ? name : null - var changed = debouncedAddress !== address - return React.useMemo( - function () { - return { - ENSName: changed ? null : checkedName, - loading: changed || resolverAddress.loading || nameCallRes.loading, - } - }, - [changed, nameCallRes.loading, checkedName, resolverAddress.loading] - ) -} - -/** - * Given a name or address, does a lookup to resolve to an address and name - * @param nameOrAddress ENS name or address - */ -function useENS(nameOrAddress) { - var validated = isAddress(nameOrAddress) - var reverseLookup = useENSName(validated ? validated : undefined) - var lookup = useENSAddress(nameOrAddress) - return React.useMemo( - function () { - return { - loading: reverseLookup.loading || lookup.loading, - address: validated ? validated : lookup.address, - name: reverseLookup.ENSName - ? reverseLookup.ENSName - : !validated && lookup.address - ? nameOrAddress || null - : null, - } - }, - [lookup.address, lookup.loading, nameOrAddress, reverseLookup.ENSName, reverseLookup.loading, validated] - ) -} - -/** - * Returns the gas value plus a margin for unexpected or variable gas costs - * @param value the gas value to pad - */ -function calculateGasMargin(value) { - return value.mul(120).div(100) -} - -/** - * Be careful adding to this enum, always assign a unique value (typescript will not prevent duplicate values). - * These values is persisted in state and if you change the value it will cause errors - */ -var TransactionType -;(function (TransactionType) { - TransactionType[(TransactionType['APPROVAL'] = 0)] = 'APPROVAL' - TransactionType[(TransactionType['SWAP'] = 1)] = 'SWAP' - TransactionType[(TransactionType['DEPOSIT_LIQUIDITY_STAKING'] = 2)] = 'DEPOSIT_LIQUIDITY_STAKING' - TransactionType[(TransactionType['WITHDRAW_LIQUIDITY_STAKING'] = 3)] = 'WITHDRAW_LIQUIDITY_STAKING' - TransactionType[(TransactionType['CLAIM'] = 4)] = 'CLAIM' - TransactionType[(TransactionType['VOTE'] = 5)] = 'VOTE' - TransactionType[(TransactionType['DELEGATE'] = 6)] = 'DELEGATE' - TransactionType[(TransactionType['WRAP'] = 7)] = 'WRAP' - TransactionType[(TransactionType['CREATE_V3_POOL'] = 8)] = 'CREATE_V3_POOL' - TransactionType[(TransactionType['ADD_LIQUIDITY_V3_POOL'] = 9)] = 'ADD_LIQUIDITY_V3_POOL' - TransactionType[(TransactionType['ADD_LIQUIDITY_V2_POOL'] = 10)] = 'ADD_LIQUIDITY_V2_POOL' - TransactionType[(TransactionType['MIGRATE_LIQUIDITY_V3'] = 11)] = 'MIGRATE_LIQUIDITY_V3' - TransactionType[(TransactionType['COLLECT_FEES'] = 12)] = 'COLLECT_FEES' - TransactionType[(TransactionType['REMOVE_LIQUIDITY_V3'] = 13)] = 'REMOVE_LIQUIDITY_V3' - TransactionType[(TransactionType['SUBMIT_PROPOSAL'] = 14)] = 'SUBMIT_PROPOSAL' -})(TransactionType || (TransactionType = {})) -var addTransaction = toolkit.createAction('transactions/addTransaction') -var clearAllTransactions = toolkit.createAction('transactions/clearAllTransactions') -var finalizeTransaction = toolkit.createAction('transactions/finalizeTransaction') -var checkedTransaction = toolkit.createAction('transactions/checkedTransaction') - -var SUPPORTED_TRANSACTION_TYPES = [ - TransactionType.ADD_LIQUIDITY_V2_POOL, - TransactionType.ADD_LIQUIDITY_V3_POOL, - TransactionType.CREATE_V3_POOL, - TransactionType.REMOVE_LIQUIDITY_V3, - TransactionType.SWAP, -] -var FIREBASE_API_KEY = process.env.REACT_APP_FIREBASE_KEY -var firebaseEnabled = typeof FIREBASE_API_KEY !== 'undefined' -if (firebaseEnabled) initializeFirebase() -function useMonitoringEventCallback() { - var chainId = useActiveWeb3React().chainId - return React.useCallback( - function log(type, _a) { - var transactionResponse = _a.transactionResponse, - walletAddress = _a.walletAddress - return __awaiter(this, void 0, void 0, function () { - var db - return __generator(this, function (_b) { - if (!firebaseEnabled) return [2 /*return*/] - db = database.getDatabase() - if (!walletAddress) { - console.debug('Wallet address required to log monitoring events.') - return [2 /*return*/] - } - try { - database.push(database.ref(db, 'trm'), { - chainId, - origin: window.location.origin, - timestamp: Date.now(), - tx: transactionResponse, - type, - walletAddress, - }) - } catch (e) { - console.debug('Error adding document: ', e) - } - return [2 /*return*/] - }) - }) - }, - [chainId] - ) -} -function useTransactionMonitoringEventCallback() { - var account = useActiveWeb3React().account - var log = useMonitoringEventCallback() - return React.useCallback( - function (info, transactionResponse) { - if (SUPPORTED_TRANSACTION_TYPES.includes(info.type)) { - log(TransactionType[info.type], { - transactionResponse: (function (_a) { - var hash = _a.hash, - v = _a.v, - r = _a.r, - s = _a.s - return { hash, v, r, s } - })(transactionResponse), - walletAddress: account !== null && account !== void 0 ? account : undefined, - }) - } - }, - [account, log] - ) -} -function useWalletConnectMonitoringEventCallback() { - var log = useMonitoringEventCallback() - return React.useCallback( - function (walletAddress) { - log('WALLET_CONNECTED', { transactionResponse: { hash: '', r: '', s: '', v: -1 }, walletAddress }) - }, - [log] - ) -} -function initializeFirebase() { - app.initializeApp({ - apiKey: process.env.REACT_APP_FIREBASE_KEY, - authDomain: 'interface-monitoring.firebaseapp.com', - databaseURL: 'https://interface-monitoring-default-rtdb.firebaseio.com', - projectId: 'interface-monitoring', - storageBucket: 'interface-monitoring.appspot.com', - messagingSenderId: '968187720053', - appId: '1:968187720053:web:acedf72dce629d470be33c', - }) -} - -// helper that can take a ethers library transaction response and add it to the list of transactions -function useTransactionAdder() { - var _a = useActiveWeb3React(), - chainId = _a.chainId, - account = _a.account - var dispatch = useAppDispatch() - var logMonitoringEvent = useTransactionMonitoringEventCallback() - return React.useCallback( - function (response, info) { - if (!account) return - if (!chainId) return - var hash = response.hash - if (!hash) { - throw Error('No transaction hash found.') - } - dispatch(addTransaction({ hash, from: account, info, chainId })) - logMonitoringEvent(info, response) - }, - [account, chainId, dispatch, logMonitoringEvent] - ) -} -// returns all the transactions for the current chain -function useAllTransactions() { - var _a - var chainId = useActiveWeb3React().chainId - var state = useAppSelector(function (state) { - return state.transactions - }) - return chainId ? ((_a = state[chainId]) !== null && _a !== void 0 ? _a : {}) : {} -} -function useTransaction(transactionHash) { - var allTransactions = useAllTransactions() - if (!transactionHash) { - return undefined - } - return allTransactions[transactionHash] -} -function useIsTransactionPending(transactionHash) { - var transactions = useAllTransactions() - if (!transactionHash || !transactions[transactionHash]) return false - return !transactions[transactionHash].receipt -} -function useIsTransactionConfirmed(transactionHash) { - var transactions = useAllTransactions() - if (!transactionHash || !transactions[transactionHash]) return false - return Boolean(transactions[transactionHash].receipt) -} -/** - * Returns whether a transaction happened in the last day (86400 seconds * 1000 milliseconds / second) - * @param tx to check for recency - */ -function isTransactionRecent(tx) { - return new Date().getTime() - tx.addedTime < 86400000 -} -// returns whether a token has a pending approval transaction -function useHasPendingApproval(token, spender) { - var allTransactions = useAllTransactions() - return React.useMemo( - function () { - return ( - typeof (token === null || token === void 0 ? void 0 : token.address) === 'string' && - typeof spender === 'string' && - Object.keys(allTransactions).some(function (hash) { - var tx = allTransactions[hash] - if (!tx) return false - if (tx.receipt) { - return false - } else { - if (tx.info.type !== TransactionType.APPROVAL) return false - return tx.info.spender === spender && tx.info.tokenAddress === token.address && isTransactionRecent(tx) - } - }) - ) - }, - [allTransactions, spender, token === null || token === void 0 ? void 0 : token.address] - ) -} -// watch for submissions to claim -// return null if not done loading, return undefined if not found -function useUserHasSubmittedClaim(account) { - var allTransactions = useAllTransactions() - // get the txn if it has been submitted - var claimTxn = React.useMemo( - function () { - var txnIndex = Object.keys(allTransactions).find(function (hash) { - var tx = allTransactions[hash] - return tx.info.type === TransactionType.CLAIM && tx.info.recipient === account - }) - return txnIndex && allTransactions[txnIndex] ? allTransactions[txnIndex] : undefined - }, - [account, allTransactions] - ) - return { claimSubmitted: Boolean(claimTxn), claimTxn } -} - -var FETCH_CLAIM_MAPPING_PROMISE = null -function fetchClaimMapping() { - return FETCH_CLAIM_MAPPING_PROMISE !== null && FETCH_CLAIM_MAPPING_PROMISE !== void 0 - ? FETCH_CLAIM_MAPPING_PROMISE - : (FETCH_CLAIM_MAPPING_PROMISE = fetch( - 'https://raw.githubusercontent.com/Uniswap/mrkl-drop-data-chunks/final/chunks/mapping.json' - ) - .then(function (res) { - return res.json() - }) - .catch(function (error) { - console.error('Failed to get claims mapping', error) - FETCH_CLAIM_MAPPING_PROMISE = null - })) -} -var FETCH_CLAIM_FILE_PROMISES = {} -function fetchClaimFile(key) { - var _a - return (_a = FETCH_CLAIM_FILE_PROMISES[key]) !== null && _a !== void 0 - ? _a - : (FETCH_CLAIM_FILE_PROMISES[key] = fetch( - 'https://raw.githubusercontent.com/Uniswap/mrkl-drop-data-chunks/final/chunks/' + key + '.json' - ) - .then(function (res) { - return res.json() - }) - .catch(function (error) { - console.error('Failed to get claim file mapping for starting address ' + key, error) - delete FETCH_CLAIM_FILE_PROMISES[key] - })) -} -var FETCH_CLAIM_PROMISES = {} -// returns the claim for the given address, or null if not valid -function fetchClaim(account) { - var _a - var formatted = isAddress(account) - if (!formatted) return Promise.reject(new Error('Invalid address')) - return (_a = FETCH_CLAIM_PROMISES[account]) !== null && _a !== void 0 - ? _a - : (FETCH_CLAIM_PROMISES[account] = fetchClaimMapping() - .then(function (mapping) { - var e_1, _a - var sorted = Object.keys(mapping).sort(function (a, b) { - return a.toLowerCase() < b.toLowerCase() ? -1 : 1 - }) - try { - for ( - var sorted_1 = __values(sorted), sorted_1_1 = sorted_1.next(); - !sorted_1_1.done; - sorted_1_1 = sorted_1.next() - ) { - var startingAddress = sorted_1_1.value - var lastAddress = mapping[startingAddress] - if (startingAddress.toLowerCase() <= formatted.toLowerCase()) { - if (formatted.toLowerCase() <= lastAddress.toLowerCase()) { - return startingAddress - } - } else { - throw new Error('Claim for ' + formatted + ' was not found in partial search') - } - } - } catch (e_1_1) { - e_1 = { error: e_1_1 } - } finally { - try { - if (sorted_1_1 && !sorted_1_1.done && (_a = sorted_1.return)) _a.call(sorted_1) - } finally { - if (e_1) throw e_1.error - } - } - throw new Error('Claim for ' + formatted + ' was not found after searching all mappings') - }) - .then(fetchClaimFile) - .then(function (result) { - if (result[formatted]) return result[formatted] - throw new Error('Claim for ' + formatted + ' was not found in claim file!') - }) - .catch(function (error) { - console.debug('Claim fetch failed', error) - throw error - })) -} -// parse distributorContract blob and detect if user has claim data -// null means we know it does not -function useUserClaimData(account) { - var chainId = useActiveWeb3React().chainId - var _a = __read(React.useState({}), 2), - claimInfo = _a[0], - setClaimInfo = _a[1] - React.useEffect( - function () { - if (!account || chainId !== 1) return - fetchClaim(account) - .then(function (accountClaimInfo) { - return setClaimInfo(function (claimInfo) { - var _a - return __assign(__assign({}, claimInfo), ((_a = {}), (_a[account] = accountClaimInfo), _a)) - }) - }) - .catch(function () { - setClaimInfo(function (claimInfo) { - var _a - return __assign(__assign({}, claimInfo), ((_a = {}), (_a[account] = null), _a)) - }) - }) - }, - [account, chainId] - ) - return account && chainId === 1 ? claimInfo[account] : null -} -// check if user is in blob and has not yet claimed UNI -function useUserHasAvailableClaim(account) { - var _a - var userClaimData = useUserClaimData(account) - var distributorContract = useMerkleDistributorContract() - var isClaimedResult = useSingleCallResult(distributorContract, 'isClaimed', [ - userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.index, - ]) - // user is in blob and contract marks as unclaimed - return Boolean( - userClaimData && - !isClaimedResult.loading && - ((_a = isClaimedResult.result) === null || _a === void 0 ? void 0 : _a[0]) === false - ) -} -function useUserUnclaimedAmount(account) { - var chainId = useActiveWeb3React().chainId - var userClaimData = useUserClaimData(account) - var canClaim = useUserHasAvailableClaim(account) - var uni = chainId ? UNI[chainId] : undefined - if (!uni) return undefined - if (!canClaim || !userClaimData) { - return sdkCore.CurrencyAmount.fromRawAmount(uni, JSBI__default['default'].BigInt(0)) - } - return sdkCore.CurrencyAmount.fromRawAmount(uni, JSBI__default['default'].BigInt(userClaimData.amount)) -} -function useClaimCallback(account) { - // get claim data for this account - var _a = useActiveWeb3React(), - library = _a.library, - chainId = _a.chainId - var claimData = useUserClaimData(account) - // used for popup summary - var unclaimedAmount = useUserUnclaimedAmount(account) - var addTransaction = useTransactionAdder() - var distributorContract = useMerkleDistributorContract() - var claimCallback = function () { - return __awaiter(this, void 0, void 0, function () { - var args - var _a - return __generator(this, function (_b) { - if (!claimData || !account || !library || !chainId || !distributorContract) return [2 /*return*/] - args = [claimData.index, account, claimData.amount, claimData.proof] - return [ - 2 /*return*/, - (_a = distributorContract.estimateGas)['claim'] - .apply(_a, __spreadArray(__spreadArray([], __read(args), false), [{}], false)) - .then(function (estimatedGasLimit) { - return distributorContract.claim - .apply( - distributorContract, - __spreadArray( - __spreadArray([], __read(args), false), - [{ value: null, gasLimit: calculateGasMargin(estimatedGasLimit) }], - false - ) - ) - .then(function (response) { - addTransaction(response, { - type: TransactionType.CLAIM, - recipient: account, - uniAmountRaw: - unclaimedAmount === null || unclaimedAmount === void 0 - ? void 0 - : unclaimedAmount.quotient.toString(), - }) - return response.hash - }) - }), - ] - }) - }) - } - return { claimCallback } -} - -var _a$d, _b$4, _c$3, _d$2, _e$1, _f, _g, _h -var WRAPPED_NATIVE_CURRENCIES_ONLY = Object.fromEntries( - Object.entries(WRAPPED_NATIVE_CURRENCY).map(function (_a) { - var _b = __read(_a, 2), - key = _b[0], - value = _b[1] - return [key, [value]] - }) -) -// used to construct intermediary pairs for trading -var BASES_TO_CHECK_TRADES_AGAINST = __assign( - __assign({}, WRAPPED_NATIVE_CURRENCIES_ONLY), - ((_a$d = {}), - (_a$d[SupportedChainId.MAINNET] = __spreadArray( - __spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.MAINNET]), false), - [DAI, USDC, USDT, WBTC], - false - )), - (_a$d[SupportedChainId.OPTIMISM] = __spreadArray( - __spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.OPTIMISM]), false), - [DAI_OPTIMISM, USDT_OPTIMISM, WBTC_OPTIMISM], - false - )), - (_a$d[SupportedChainId.ARBITRUM_ONE] = __spreadArray( - __spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.ARBITRUM_ONE]), false), - [DAI_ARBITRUM_ONE, USDT_ARBITRUM_ONE, WBTC_ARBITRUM_ONE], - false - )), - (_a$d[SupportedChainId.POLYGON] = __spreadArray( - __spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.POLYGON]), false), - [DAI_POLYGON, USDC_POLYGON, USDT_POLYGON, WETH_POLYGON], - false - )), - _a$d) -) -var ADDITIONAL_BASES = - ((_b$4 = {}), - (_b$4[SupportedChainId.MAINNET] = - ((_c$3 = { - '0xF16E4d813f4DcfDe4c5b44f305c908742De84eF0': [ETH2X_FLI], - }), - (_c$3[rETH2.address] = [sETH2]), - (_c$3[SWISE.address] = [sETH2]), - (_c$3[FEI.address] = [TRIBE]), - (_c$3[TRIBE.address] = [FEI]), - (_c$3[FRAX.address] = [FXS]), - (_c$3[FXS.address] = [FRAX]), - (_c$3[WBTC.address] = [renBTC]), - (_c$3[renBTC.address] = [WBTC]), - _c$3)), - _b$4) -/** - * Some tokens can only be swapped via certain pairs, so we override the list of bases that are considered for these - * tokens. - */ -var CUSTOM_BASES = - ((_d$2 = {}), - (_d$2[SupportedChainId.MAINNET] = - ((_e$1 = {}), (_e$1[AMPL.address] = [DAI, WRAPPED_NATIVE_CURRENCY[SupportedChainId.MAINNET]]), _e$1)), - _d$2) -/** - * Shows up in the currency select for swap and add liquidity - */ -var COMMON_BASES = - ((_f = {}), - (_f[SupportedChainId.MAINNET] = [ - nativeOnChain(SupportedChainId.MAINNET), - DAI, - USDC, - USDT, - WBTC, - WRAPPED_NATIVE_CURRENCY[SupportedChainId.MAINNET], - ]), - (_f[SupportedChainId.ROPSTEN] = [ - nativeOnChain(SupportedChainId.ROPSTEN), - WRAPPED_NATIVE_CURRENCY[SupportedChainId.ROPSTEN], - ]), - (_f[SupportedChainId.RINKEBY] = [ - nativeOnChain(SupportedChainId.RINKEBY), - WRAPPED_NATIVE_CURRENCY[SupportedChainId.RINKEBY], - ]), - (_f[SupportedChainId.GOERLI] = [ - nativeOnChain(SupportedChainId.GOERLI), - WRAPPED_NATIVE_CURRENCY[SupportedChainId.GOERLI], - ]), - (_f[SupportedChainId.KOVAN] = [ - nativeOnChain(SupportedChainId.KOVAN), - WRAPPED_NATIVE_CURRENCY[SupportedChainId.KOVAN], - ]), - (_f[SupportedChainId.ARBITRUM_ONE] = [ - nativeOnChain(SupportedChainId.ARBITRUM_ONE), - DAI_ARBITRUM_ONE, - USDC_ARBITRUM, - USDT_ARBITRUM_ONE, - WBTC_ARBITRUM_ONE, - WRAPPED_NATIVE_CURRENCY[SupportedChainId.ARBITRUM_ONE], - ]), - (_f[SupportedChainId.ARBITRUM_RINKEBY] = [ - nativeOnChain(SupportedChainId.ARBITRUM_RINKEBY), - WRAPPED_NATIVE_CURRENCY[SupportedChainId.ARBITRUM_RINKEBY], - ]), - (_f[SupportedChainId.OPTIMISM] = [ - nativeOnChain(SupportedChainId.OPTIMISM), - DAI_OPTIMISM, - USDC_OPTIMISM, - USDT_OPTIMISM, - WBTC_OPTIMISM, - ]), - (_f[SupportedChainId.OPTIMISTIC_KOVAN] = [nativeOnChain(SupportedChainId.OPTIMISTIC_KOVAN)]), - (_f[SupportedChainId.POLYGON] = [ - nativeOnChain(SupportedChainId.POLYGON), - WETH_POLYGON, - USDC_POLYGON, - DAI_POLYGON, - USDT_POLYGON, - WBTC_POLYGON, - ]), - (_f[SupportedChainId.POLYGON_MUMBAI] = [ - nativeOnChain(SupportedChainId.POLYGON_MUMBAI), - WRAPPED_NATIVE_CURRENCY[SupportedChainId.POLYGON_MUMBAI], - WETH_POLYGON_MUMBAI, - ]), - _f) -// used to construct the list of all pairs we consider by default in the frontend -__assign( - __assign({}, WRAPPED_NATIVE_CURRENCIES_ONLY), - ((_g = {}), - (_g[SupportedChainId.MAINNET] = __spreadArray( - __spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.MAINNET]), false), - [DAI, USDC, USDT, WBTC], - false - )), - _g) -) -;(_h = {}), - (_h[SupportedChainId.MAINNET] = [ - [ - new sdkCore.Token( - SupportedChainId.MAINNET, - '0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643', - 8, - 'cDAI', - 'Compound Dai' - ), - new sdkCore.Token( - SupportedChainId.MAINNET, - '0x39AA39c021dfbaE8faC545936693aC917d5E7563', - 8, - 'cUSDC', - 'Compound USD Coin' - ), - ], - [USDC, USDT], - [DAI, USDT], - ]), - _h - -var EthereumLogo = - 'data:image/png;base64,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' - -var arbitrumLogoUrl = - 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20viewBox%3D%220%200%20470.287%20514.251%22%20enable-background%3D%22new%200%200%20470.287%20514.251%22%20xml%3Aspace%3D%22preserve%22%3E%3Cg%20id%3D%22Background%22%3E%3C%2Fg%3E%3Cg%20id%3D%22Logos_and_symbols%22%3E%20%3Cg%20id%3D%22SYMBOL_VER_3%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_4_3_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_1_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_1_%22%3E%20%20%3Cg%20id%3D%22_x31_-3%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_14_%22%3E%20%20%20%3Cpath%20fill%3D%22%232D374B%22%20d%3D%22M291.134%2C237.469l35.654-60.5l96.103%2C149.684l0.046%2C28.727l-0.313-197.672%20%20%20%20c-0.228-4.832-2.794-9.252-6.887-11.859L242.715%2C46.324c-4.045-1.99-9.18-1.967-13.22%2C0.063c-0.546%2C0.272-1.06%2C0.57-1.548%2C0.895%20%20%20%20l-0.604%2C0.379L59.399%2C144.983l-0.651%2C0.296c-0.838%2C0.385-1.686%2C0.875-2.48%2C1.444c-3.185%2C2.283-5.299%2C5.66-5.983%2C9.448%20%20%20%20c-0.103%2C0.574-0.179%2C1.158-0.214%2C1.749l0.264%2C161.083l89.515-138.745c11.271-18.397%2C35.825-24.323%2C58.62-24.001l26.753%2C0.706%20%20%20%20L67.588%2C409.765l18.582%2C10.697L245.692%2C157.22l70.51-0.256L157.091%2C426.849l66.306%2C38.138l7.922%2C4.556%20%20%20%20c3.351%2C1.362%2C7.302%2C1.431%2C10.681%2C0.21l175.453-101.678l-33.544%2C19.438L291.134%2C237.469z%20M304.736%2C433.395l-66.969-105.108%20%20%20%20l40.881-69.371l87.952%2C138.628L304.736%2C433.395z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%2328A0F0%22%20points%3D%22237.768%2C328.286%20304.736%2C433.395%20366.601%2C397.543%20278.648%2C258.915%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2328A0F0%22%20d%3D%22M422.937%2C355.379l-0.046-28.727l-96.103-149.684l-35.654%2C60.5l92.774%2C150.043l33.544-19.438%20%20%20%20c3.29-2.673%2C5.281-6.594%2C5.49-10.825L422.937%2C355.379z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23FFFFFF%22%20d%3D%22M20.219%2C382.469l47.369%2C27.296l157.634-252.801l-26.753-0.706c-22.795-0.322-47.35%2C5.604-58.62%2C24.001%20%20%20%20L50.334%2C319.004l-30.115%2C46.271V382.469z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%23FFFFFF%22%20points%3D%22316.202%2C156.964%20245.692%2C157.22%2086.17%2C420.462%20141.928%2C452.565%20157.091%2C426.849%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2396BEDC%22%20d%3D%22M452.65%2C156.601c-0.59-14.746-8.574-28.245-21.08-36.104L256.28%2C19.692%20%20%20%20c-12.371-6.229-27.825-6.237-40.218-0.004c-1.465%2C0.739-170.465%2C98.752-170.465%2C98.752c-2.339%2C1.122-4.592%2C2.458-6.711%2C3.975%20%20%20%20c-11.164%2C8.001-17.969%2C20.435-18.668%2C34.095v208.765l30.115-46.271L50.07%2C157.921c0.035-0.589%2C0.109-1.169%2C0.214-1.741%20%20%20%20c0.681-3.79%2C2.797-7.171%2C5.983-9.456c0.795-0.569%2C172.682-100.064%2C173.228-100.337c4.04-2.029%2C9.175-2.053%2C13.22-0.063%20%20%20%20l173.022%2C99.523c4.093%2C2.607%2C6.659%2C7.027%2C6.887%2C11.859v199.542c-0.209%2C4.231-1.882%2C8.152-5.172%2C10.825l-33.544%2C19.438%20%20%20%20l-17.308%2C10.031l-61.864%2C35.852l-62.737%2C36.357c-3.379%2C1.221-7.33%2C1.152-10.681-0.21l-74.228-42.693l-15.163%2C25.717%20%20%20%20l66.706%2C38.406c2.206%2C1.255%2C4.171%2C2.367%2C5.784%2C3.272c2.497%2C1.4%2C4.199%2C2.337%2C4.8%2C2.629c4.741%2C2.303%2C11.563%2C3.643%2C17.71%2C3.643%20%20%20%20c5.636%2C0%2C11.132-1.035%2C16.332-3.072l182.225-105.531c10.459-8.104%2C16.612-20.325%2C17.166-33.564V156.601z%22%2F%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_13_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_6_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_3_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_15_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_3_%22%3E%20%20%20%3Cg%20id%3D%22_x33__7_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic%22%3E%20%20%20%3Cg%20id%3D%22_x33__3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_10_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x34__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_2_%22%3E%20%20%20%3Cg%20id%3D%22_x33__6_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_2_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_11_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_5_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_12_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_1_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_9_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_2_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol_1_%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_1_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_7_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_8_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Monochromatic_1_%22%3E%20%20%3Cg%20id%3D%22_x33__4_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E' - -var optimismLogoUrl = - 'data:image/svg+xml,%3Csvg%20width%3D%22170%22%20height%3D%22168%22%20viewBox%3D%220%200%20170%20168%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20clip-path%3D%22url%28%23clip0%29%22%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF505F%22%2F%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF0320%22%2F%3E%3Cpath%20d%3D%22M85.05%200C132.022%200%20170.1%2037.8949%20170.1%2084.6407C170.1%20131.386%200%20131.386%200%2084.6407C0%2037.8949%2038.0782%200%2085.05%200Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.665%2064.0394L112.444%2012.3742L89.0263%2078.9477L144.665%2064.0394Z%22%20fill%3D%22%23FF4E65%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.777%2064.215L112.444%2012.3742L165.349%2058.4347L143.777%2064.215Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.551%2063.613L142.479%20124.467L88.912%2078.5213L144.551%2063.613Z%22%20fill%3D%22%23D0001A%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.663%2063.7886L142.479%20124.467L165.235%2058.0083L143.663%2063.7886Z%22%20fill%3D%22%23FF697B%22%2F%3E%3C%2Fg%3E%3Cdefs%3E%3CclipPath%20id%3D%22clip0%22%3E%3Crect%20width%3D%22170%22%20height%3D%22168%22%20fill%3D%22white%22%2F%3E%3C%2FclipPath%3E%3C%2Fdefs%3E%3C%2Fsvg%3E' - -var polygonMaticLogo = - 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20viewBox%3D%220%200%2038.4%2033.5%22%20style%3D%22enable-background%3Anew%200%200%2038.4%2033.5%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cstyle%20type%3D%22text%2Fcss%22%3E%20.st0%7Bfill%3A%238247E5%3B%7D%3C%2Fstyle%3E%3Cg%3E%20%3Cpath%20class%3D%22st0%22%20d%3D%22M29%2C10.2c-0.7-0.4-1.6-0.4-2.4%2C0L21%2C13.5l-3.8%2C2.1l-5.5%2C3.3c-0.7%2C0.4-1.6%2C0.4-2.4%2C0L5%2C16.3%20%20c-0.7-0.4-1.2-1.2-1.2-2.1v-5c0-0.8%2C0.4-1.6%2C1.2-2.1l4.3-2.5c0.7-0.4%2C1.6-0.4%2C2.4%2C0L16%2C7.2c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v3.3l3.8-2.2V7%20%20c0-0.8-0.4-1.6-1.2-2.1l-8-4.7c-0.7-0.4-1.6-0.4-2.4%2C0L1.2%2C5C0.4%2C5.4%2C0%2C6.2%2C0%2C7v9.4c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l5.5-3.2l3.8-2.2l5.5-3.2c0.7-0.4%2C1.6-0.4%2C2.4%2C0l4.3%2C2.5c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v5c0%2C0.8-0.4%2C1.6-1.2%2C2.1%20%20L29%2C28.8c-0.7%2C0.4-1.6%2C0.4-2.4%2C0l-4.3-2.5c-0.7-0.4-1.2-1.2-1.2-2.1V21l-3.8%2C2.2v3.3c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l8.1-4.7c0.7-0.4%2C1.2-1.2%2C1.2-2.1V17c0-0.8-0.4-1.6-1.2-2.1L29%2C10.2z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E' - -var UNI_LIST = 'https://tokens.uniswap.org' -var AAVE_LIST = 'tokenlist.aave.eth' -var BA_LIST = 'https://raw.githubusercontent.com/The-Blockchain-Association/sec-notice-list/master/ba-sec-list.json' -var CMC_ALL_LIST = 'https://api.coinmarketcap.com/data-api/v3/uniswap/all.json' -var COINGECKO_LIST = 'https://tokens.coingecko.com/uniswap/all.json' -var COMPOUND_LIST = 'https://raw.githubusercontent.com/compound-finance/token-list/master/compound.tokenlist.json' -var GEMINI_LIST = 'https://www.gemini.com/uniswap/manifest.json' -var ARBITRUM_LIST = 'https://bridge.arbitrum.io/token-list-42161.json' -var KLEROS_LIST = 't2crtokens.eth' -var OPTIMISM_LIST = 'https://static.optimism.io/optimism.tokenlist.json' -var ROLL_LIST = 'https://app.tryroll.com/tokens.json' -var SET_LIST = 'https://raw.githubusercontent.com/SetProtocol/uniswap-tokenlist/main/set.tokenlist.json' -var WRAPPED_LIST = 'wrapped.tokensoft.eth' -var UNSUPPORTED_LIST_URLS = [BA_LIST] -// this is the default list of lists that are exposed to users -// lower index == higher priority for token import -var DEFAULT_LIST_OF_LISTS_TO_DISPLAY = [ - UNI_LIST, - COMPOUND_LIST, - AAVE_LIST, - CMC_ALL_LIST, - COINGECKO_LIST, - KLEROS_LIST, - GEMINI_LIST, - WRAPPED_LIST, - SET_LIST, - ROLL_LIST, - ARBITRUM_LIST, - OPTIMISM_LIST, -] -var DEFAULT_LIST_OF_LISTS = __spreadArray( - __spreadArray([], __read(DEFAULT_LIST_OF_LISTS_TO_DISPLAY), false), - __read(UNSUPPORTED_LIST_URLS), - false -) -// default lists to be 'active' aka searched across -var DEFAULT_ACTIVE_LIST_URLS = [UNI_LIST, GEMINI_LIST] - -var _a$c, _b$3 -var INFURA_KEY = process.env.REACT_APP_INFURA_KEY -if (typeof INFURA_KEY === 'undefined') { - throw new Error('REACT_APP_INFURA_KEY must be a defined environment variable') -} -/** - * These are the network URLs used by the interface when there is not another available source of chain data - */ -var INFURA_NETWORK_URLS = - ((_a$c = {}), - (_a$c[SupportedChainId.MAINNET] = 'https://mainnet.infura.io/v3/' + INFURA_KEY), - (_a$c[SupportedChainId.RINKEBY] = 'https://rinkeby.infura.io/v3/' + INFURA_KEY), - (_a$c[SupportedChainId.ROPSTEN] = 'https://ropsten.infura.io/v3/' + INFURA_KEY), - (_a$c[SupportedChainId.GOERLI] = 'https://goerli.infura.io/v3/' + INFURA_KEY), - (_a$c[SupportedChainId.KOVAN] = 'https://kovan.infura.io/v3/' + INFURA_KEY), - (_a$c[SupportedChainId.OPTIMISM] = 'https://optimism-mainnet.infura.io/v3/' + INFURA_KEY), - (_a$c[SupportedChainId.OPTIMISTIC_KOVAN] = 'https://optimism-kovan.infura.io/v3/' + INFURA_KEY), - (_a$c[SupportedChainId.ARBITRUM_ONE] = 'https://arbitrum-mainnet.infura.io/v3/' + INFURA_KEY), - (_a$c[SupportedChainId.ARBITRUM_RINKEBY] = 'https://arbitrum-rinkeby.infura.io/v3/' + INFURA_KEY), - (_a$c[SupportedChainId.POLYGON] = 'https://polygon-mainnet.infura.io/v3/' + INFURA_KEY), - (_a$c[SupportedChainId.POLYGON_MUMBAI] = 'https://polygon-mumbai.infura.io/v3/' + INFURA_KEY), - _a$c) -var NetworkType -;(function (NetworkType) { - NetworkType[(NetworkType['L1'] = 0)] = 'L1' - NetworkType[(NetworkType['L2'] = 1)] = 'L2' -})(NetworkType || (NetworkType = {})) -var CHAIN_INFO = - ((_b$3 = {}), - (_b$3[SupportedChainId.MAINNET] = { - networkType: NetworkType.L1, - docs: 'https://docs.uniswap.org/', - explorer: 'https://etherscan.io/', - infoLink: 'https://info.uniswap.org/#/', - label: 'Ethereum', - logoUrl: EthereumLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, - rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.MAINNET], - }, - }), - (_b$3[SupportedChainId.RINKEBY] = { - networkType: NetworkType.L1, - docs: 'https://docs.uniswap.org/', - explorer: 'https://rinkeby.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/', - label: 'Rinkeby', - logoUrl: EthereumLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Rinkeby Ether', symbol: 'rETH', decimals: 18 }, - rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.RINKEBY], - }, - }), - (_b$3[SupportedChainId.ROPSTEN] = { - networkType: NetworkType.L1, - docs: 'https://docs.uniswap.org/', - explorer: 'https://ropsten.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/', - label: 'Ropsten', - logoUrl: EthereumLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Ropsten Ether', symbol: 'ropETH', decimals: 18 }, - rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.ROPSTEN], - }, - }), - (_b$3[SupportedChainId.KOVAN] = { - networkType: NetworkType.L1, - docs: 'https://docs.uniswap.org/', - explorer: 'https://kovan.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/', - label: 'Kovan', - logoUrl: EthereumLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Kovan Ether', symbol: 'kovETH', decimals: 18 }, - rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.KOVAN], - }, - }), - (_b$3[SupportedChainId.GOERLI] = { - networkType: NetworkType.L1, - docs: 'https://docs.uniswap.org/', - explorer: 'https://goerli.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/', - label: 'Görli', - logoUrl: EthereumLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Görli Ether', symbol: 'görETH', decimals: 18 }, - rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.GOERLI], - }, - }), - (_b$3[SupportedChainId.OPTIMISM] = { - networkType: NetworkType.L2, - blockWaitMsBeforeWarning: ms__default['default']( - templateObject_1$1m || (templateObject_1$1m = __makeTemplateObject(['25m'], ['25m'])) - ), - bridge: 'https://gateway.optimism.io/?chainId=1', - defaultListUrl: OPTIMISM_LIST, - docs: 'https://optimism.io/', - explorer: 'https://optimistic.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/optimism/', - label: 'Optimism', - logoUrl: optimismLogoUrl, - statusPage: 'https://optimism.io/status', - helpCenterUrl: 'https://help.uniswap.org/en/collections/3137778-uniswap-on-optimistic-ethereum-oξ', - addNetworkInfo: { - nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, - rpcUrl: 'https://mainnet.optimism.io', - }, - }), - (_b$3[SupportedChainId.OPTIMISTIC_KOVAN] = { - networkType: NetworkType.L2, - blockWaitMsBeforeWarning: ms__default['default']( - templateObject_2$10 || (templateObject_2$10 = __makeTemplateObject(['25m'], ['25m'])) - ), - bridge: 'https://gateway.optimism.io/', - defaultListUrl: OPTIMISM_LIST, - docs: 'https://optimism.io/', - explorer: 'https://optimistic.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/optimism/', - label: 'Optimistic Kovan', - logoUrl: optimismLogoUrl, - statusPage: 'https://optimism.io/status', - helpCenterUrl: 'https://help.uniswap.org/en/collections/3137778-uniswap-on-optimistic-ethereum-oξ', - addNetworkInfo: { - nativeCurrency: { name: 'Optimistic Kovan Ether', symbol: 'kovOpETH', decimals: 18 }, - rpcUrl: 'https://kovan.optimism.io', - }, - }), - (_b$3[SupportedChainId.ARBITRUM_ONE] = { - networkType: NetworkType.L2, - blockWaitMsBeforeWarning: ms__default['default']( - templateObject_3$T || (templateObject_3$T = __makeTemplateObject(['10m'], ['10m'])) - ), - bridge: 'https://bridge.arbitrum.io/', - docs: 'https://offchainlabs.com/', - explorer: 'https://arbiscan.io/', - infoLink: 'https://info.uniswap.org/#/arbitrum', - label: 'Arbitrum', - logoUrl: arbitrumLogoUrl, - defaultListUrl: ARBITRUM_LIST, - helpCenterUrl: 'https://help.uniswap.org/en/collections/3137787-uniswap-on-arbitrum', - addNetworkInfo: { - nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, - rpcUrl: 'https://arb1.arbitrum.io/rpc', - }, - }), - (_b$3[SupportedChainId.ARBITRUM_RINKEBY] = { - networkType: NetworkType.L2, - blockWaitMsBeforeWarning: ms__default['default']( - templateObject_4$H || (templateObject_4$H = __makeTemplateObject(['10m'], ['10m'])) - ), - bridge: 'https://bridge.arbitrum.io/', - docs: 'https://offchainlabs.com/', - explorer: 'https://rinkeby-explorer.arbitrum.io/', - infoLink: 'https://info.uniswap.org/#/arbitrum/', - label: 'Arbitrum Rinkeby', - logoUrl: arbitrumLogoUrl, - defaultListUrl: ARBITRUM_LIST, - helpCenterUrl: 'https://help.uniswap.org/en/collections/3137787-uniswap-on-arbitrum', - addNetworkInfo: { - nativeCurrency: { name: 'Rinkeby Arbitrum Ether', symbol: 'rinkArbETH', decimals: 18 }, - rpcUrl: 'https://rinkeby.arbitrum.io/rpc', - }, - }), - (_b$3[SupportedChainId.POLYGON] = { - networkType: NetworkType.L1, - blockWaitMsBeforeWarning: ms__default['default']( - templateObject_5$y || (templateObject_5$y = __makeTemplateObject(['10m'], ['10m'])) - ), - bridge: 'https://wallet.polygon.technology/bridge', - docs: 'https://polygon.io/', - explorer: 'https://polygonscan.com/', - infoLink: 'https://info.uniswap.org/#/polygon/', - label: 'Polygon', - logoUrl: polygonMaticLogo, - addNetworkInfo: { - rpcUrl: 'https://polygon-rpc.com/', - nativeCurrency: { name: 'Polygon Matic', symbol: 'MATIC', decimals: 18 }, - }, - }), - (_b$3[SupportedChainId.POLYGON_MUMBAI] = { - networkType: NetworkType.L1, - blockWaitMsBeforeWarning: ms__default['default']( - templateObject_6$p || (templateObject_6$p = __makeTemplateObject(['10m'], ['10m'])) - ), - bridge: 'https://wallet.polygon.technology/bridge', - docs: 'https://polygon.io/', - explorer: 'https://mumbai.polygonscan.com/', - infoLink: 'https://info.uniswap.org/#/polygon/', - label: 'Polygon Mumbai', - logoUrl: polygonMaticLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Polygon Mumbai Matic', symbol: 'mMATIC', decimals: 18 }, - rpcUrl: 'https://rpc-endpoints.superfluid.dev/mumbai', - }, - }), - _b$3) -var templateObject_1$1m, - templateObject_2$10, - templateObject_3$T, - templateObject_4$H, - templateObject_5$y, - templateObject_6$p - -function useNativeCurrency() { - var chainId = useActiveWeb3React().chainId - return React.useMemo( - function () { - return chainId - ? nativeOnChain(chainId) - : // display mainnet when not connected - nativeOnChain(SupportedChainId.MAINNET) - }, - [chainId] - ) -} - -var EMPTY_CONNECTOR = core$1.initializeConnector(function () { - return empty.EMPTY -}) -utils.atomWithDefault(function () { - return EMPTY_CONNECTOR -}) -utils.atomWithDefault(function () { - return EMPTY_CONNECTOR -}) - -var REGISTRAR_ABI = [ - { - constant: true, - inputs: [ - { - name: 'node', - type: 'bytes32', - }, - ], - name: 'resolver', - outputs: [ - { - name: 'resolverAddress', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, -] -var REGISTRAR_ADDRESS = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e' -var RESOLVER_ABI = [ - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - ], - name: 'contenthash', - outputs: [ - { - internalType: 'bytes', - name: '', - type: 'bytes', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, -] -// cache the resolver contracts since most of them are the public resolver -function resolverContract(resolverAddress, provider) { - return new contracts.Contract(resolverAddress, RESOLVER_ABI, provider) -} -/** - * Fetches and decodes the result of an ENS contenthash lookup on mainnet to a URI - * @param ensName to resolve - * @param provider provider to use to fetch the data - */ -function resolveENSContentHash(ensName, provider) { - return __awaiter(this, void 0, void 0, function () { - var ensRegistrarContract, hash$1, resolverAddress - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - ensRegistrarContract = new contracts.Contract(REGISTRAR_ADDRESS, REGISTRAR_ABI, provider) - hash$1 = hash.namehash(ensName) - return [4 /*yield*/, ensRegistrarContract.resolver(hash$1)] - case 1: - resolverAddress = _a.sent() - return [2 /*return*/, resolverContract(resolverAddress, provider).contenthash(hash$1)] - } - }) - }) -} - -function hexToUint8Array(hex) { - hex = hex.startsWith('0x') ? hex.substr(2) : hex - if (hex.length % 2 !== 0) throw new Error('hex must have length that is multiple of 2') - var arr = new Uint8Array(hex.length / 2) - for (var i = 0; i < arr.length; i++) { - arr[i] = parseInt(hex.substr(i * 2, 2), 16) - } - return arr -} -var UTF_8_DECODER = new TextDecoder('utf-8') -/** - * Returns the URI representation of the content hash for supported codecs - * @param contenthash to decode - */ -function contenthashToUri(contenthash) { - var data = hexToUint8Array(contenthash) - var codec = multicodec.getNameFromData(data) - switch (codec) { - case 'ipfs-ns': { - var unprefixedData = multicodec.rmPrefix(data) - var cid = new CID__default['default'](unprefixedData) - return 'ipfs://' + multihashes.toB58String(cid.multihash) - } - case 'ipns-ns': { - var unprefixedData = multicodec.rmPrefix(data) - var cid = new CID__default['default'](unprefixedData) - var multihash = multihashes.decode(cid.multihash) - if (multihash.name === 'identity') { - return 'ipns://' + UTF_8_DECODER.decode(multihash.digest).trim() - } else { - return 'ipns://' + multihashes.toB58String(cid.multihash) - } - } - default: - throw new Error('Unrecognized codec: ' + codec) - } -} - -var ENS_NAME_REGEX$1 = /^(([a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\.)+)eth(\/.*)?$/ -function parseENSAddress(ensAddress) { - var match = ensAddress.match(ENS_NAME_REGEX$1) - if (!match) return undefined - return { ensName: match[1].toLowerCase() + 'eth', ensPath: match[4] } -} - -/** - * Given a URI that may be ipfs, ipns, http, https, ar, or data protocol, return the fetch-able http(s) URLs for the same content - * @param uri to convert to fetch-able http url - */ -function uriToHttp(uri) { - var _a, _b, _c - var protocol = uri.split(':')[0].toLowerCase() - switch (protocol) { - case 'data': - return [uri] - case 'https': - return [uri] - case 'http': - return ['https' + uri.substr(4), uri] - case 'ipfs': - var hash = (_a = uri.match(/^ipfs:(\/\/)?(.*)$/i)) === null || _a === void 0 ? void 0 : _a[2] - return ['https://cloudflare-ipfs.com/ipfs/' + hash + '/', 'https://ipfs.io/ipfs/' + hash + '/'] - case 'ipns': - var name_1 = (_b = uri.match(/^ipns:(\/\/)?(.*)$/i)) === null || _b === void 0 ? void 0 : _b[2] - return ['https://cloudflare-ipfs.com/ipns/' + name_1 + '/', 'https://ipfs.io/ipns/' + name_1 + '/'] - case 'ar': - var tx = (_c = uri.match(/^ar:(\/\/)?(.*)$/i)) === null || _c === void 0 ? void 0 : _c[2] - return ['https://arweave.net/' + tx] - default: - return [] - } -} - -var ValidationSchema -;(function (ValidationSchema) { - ValidationSchema['LIST'] = 'list' - ValidationSchema['TOKENS'] = 'tokens' -})(ValidationSchema || (ValidationSchema = {})) -var validator = new Promise(function (resolve) { - return __awaiter(void 0, void 0, void 0, function () { - var _a, ajv, schema, validator - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - return [ - 4 /*yield*/, - Promise.all([ - Promise.resolve().then(function () { - return /*#__PURE__*/ _interopNamespace(require('ajv')) - }), - Promise.resolve().then(function () { - return tokenlist_schema$1 - }), - ]), - ] - case 1: - ;(_a = __read.apply(void 0, [_b.sent(), 2])), (ajv = _a[0]), (schema = _a[1]) - validator = new ajv.default({ allErrors: true }) - .addSchema(schema, ValidationSchema.LIST) - // Adds a meta scheme of Pick - .addSchema( - __assign(__assign({}, schema), { $id: schema.$id + '#tokens', required: ['tokens'] }), - ValidationSchema.TOKENS - ) - resolve(validator) - return [2 /*return*/] - } - }) - }) -}) -function getValidationErrors(validate) { - var _a, _b - return (_b = - (_a = validate === null || validate === void 0 ? void 0 : validate.errors) === null || _a === void 0 - ? void 0 - : _a - .map(function (error) { - return [error.dataPath, error.message].filter(Boolean).join(' ') - }) - .join('; ')) !== null && _b !== void 0 - ? _b - : 'unknown error' -} -/** - * Validates a token list. - * @param json the TokenList to validate - */ -function validateTokenList(json) { - return __awaiter(this, void 0, void 0, function () { - var validate - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - return [4 /*yield*/, validator] - case 1: - validate = _a.sent().getSchema(ValidationSchema.LIST) - if (validate === null || validate === void 0 ? void 0 : validate(json)) { - return [2 /*return*/, json] - } - throw new Error('Token list failed validation: ' + getValidationErrors(validate)) - } - }) - }) -} - -var listCache = new Map() -/** Fetches and validates a token list. */ -function fetchTokenList$1(listUrl, resolveENSContentHash) { - var _a - return __awaiter(this, void 0, void 0, function () { - var cached, - urls, - parsedENS, - contentHashUri, - error_1, - message, - translatedUri, - message, - i, - url, - isLast, - response, - error_2, - message, - message, - json, - list - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - cached = listCache === null || listCache === void 0 ? void 0 : listCache.get(listUrl) // avoid spurious re-fetches - if (cached) { - return [2 /*return*/, cached] - } - parsedENS = parseENSAddress(listUrl) - if (!parsedENS) return [3 /*break*/, 5] - contentHashUri = void 0 - _b.label = 1 - case 1: - _b.trys.push([1, 3, , 4]) - return [4 /*yield*/, resolveENSContentHash(parsedENS.ensName)] - case 2: - contentHashUri = _b.sent() - return [3 /*break*/, 4] - case 3: - error_1 = _b.sent() - message = 'failed to resolve ENS name: ' + parsedENS.ensName - console.debug(message, error_1) - throw new Error(message) - case 4: - translatedUri = void 0 - try { - translatedUri = contenthashToUri(contentHashUri) - } catch (error) { - message = 'failed to translate contenthash to URI: ' + contentHashUri - console.debug(message, error) - throw new Error(message) - } - urls = uriToHttp('' + translatedUri + ((_a = parsedENS.ensPath) !== null && _a !== void 0 ? _a : '')) - return [3 /*break*/, 6] - case 5: - urls = uriToHttp(listUrl) - _b.label = 6 - case 6: - i = 0 - _b.label = 7 - case 7: - if (!(i < urls.length)) return [3 /*break*/, 15] - url = urls[i] - isLast = i === urls.length - 1 - response = void 0 - _b.label = 8 - case 8: - _b.trys.push([8, 10, , 11]) - return [4 /*yield*/, fetch(url, { credentials: 'omit' })] - case 9: - response = _b.sent() - return [3 /*break*/, 11] - case 10: - error_2 = _b.sent() - message = 'failed to fetch list: ' + listUrl - console.debug(message, error_2) - if (isLast) throw new Error(message) - return [3 /*break*/, 14] - case 11: - if (!response.ok) { - message = 'failed to fetch list: ' + listUrl - console.debug(message, response.statusText) - if (isLast) throw new Error(message) - return [3 /*break*/, 14] - } - return [4 /*yield*/, response.json()] - case 12: - json = _b.sent() - return [4 /*yield*/, validateTokenList(json)] - case 13: - list = _b.sent() - listCache === null || listCache === void 0 ? void 0 : listCache.set(listUrl, list) - return [2 /*return*/, list] - case 14: - i++ - return [3 /*break*/, 7] - case 15: - throw new Error('Unrecognized list URL protocol.') - } - }) - }) -} - -/** - * Returns a map of the given addresses to their eventually consistent ETH balances. - */ -function useNativeCurrencyBalances(uncheckedAddresses) { - var chainId = useActiveWeb3React().chainId - var multicallContract = useInterfaceMulticall() - var validAddressInputs = React.useMemo( - function () { - return uncheckedAddresses - ? uncheckedAddresses - .map(isAddress) - .filter(function (a) { - return a !== false - }) - .sort() - .map(function (addr) { - return [addr] - }) - : [] - }, - [uncheckedAddresses] - ) - var results = useSingleContractMultipleData(multicallContract, 'getEthBalance', validAddressInputs) - return React.useMemo( - function () { - return validAddressInputs.reduce(function (memo, _a, i) { - var _b, _c - var _d = __read(_a, 1), - address = _d[0] - var value = - (_c = - (_b = results === null || results === void 0 ? void 0 : results[i]) === null || _b === void 0 - ? void 0 - : _b.result) === null || _c === void 0 - ? void 0 - : _c[0] - if (value && chainId) - memo[address] = sdkCore.CurrencyAmount.fromRawAmount( - nativeOnChain(chainId), - JSBI__default['default'].BigInt(value.toString()) - ) - return memo - }, {}) - }, - [validAddressInputs, chainId, results] - ) -} -var ERC20Interface = new abi$7.Interface(ERC20ABI) -var tokenBalancesGasRequirement = { gasRequired: 125000 } -/** - * Returns a map of token addresses to their eventually consistent token balances for a single account. - */ -function useTokenBalancesWithLoadingIndicator(address, tokens) { - var validatedTokens = React.useMemo( - function () { - var _a - return (_a = - tokens === null || tokens === void 0 - ? void 0 - : tokens.filter(function (t) { - return isAddress(t === null || t === void 0 ? void 0 : t.address) !== false - })) !== null && _a !== void 0 - ? _a - : [] - }, - [tokens] - ) - var validatedTokenAddresses = React.useMemo( - function () { - return validatedTokens.map(function (vt) { - return vt.address - }) - }, - [validatedTokens] - ) - var balances = useMultipleContractSingleData( - validatedTokenAddresses, - ERC20Interface, - 'balanceOf', - React.useMemo( - function () { - return [address] - }, - [address] - ), - tokenBalancesGasRequirement - ) - var anyLoading = React.useMemo( - function () { - return balances.some(function (callState) { - return callState.loading - }) - }, - [balances] - ) - return React.useMemo( - function () { - return [ - address && validatedTokens.length > 0 - ? validatedTokens.reduce(function (memo, token, i) { - var _a, _b - var value = - (_b = - (_a = balances === null || balances === void 0 ? void 0 : balances[i]) === null || _a === void 0 - ? void 0 - : _a.result) === null || _b === void 0 - ? void 0 - : _b[0] - var amount = value ? JSBI__default['default'].BigInt(value.toString()) : undefined - if (amount) { - memo[token.address] = sdkCore.CurrencyAmount.fromRawAmount(token, amount) - } - return memo - }, {}) - : {}, - anyLoading, - ] - }, - [address, validatedTokens, anyLoading, balances] - ) -} -function useTokenBalances(address, tokens) { - return useTokenBalancesWithLoadingIndicator(address, tokens)[0] -} -// get the balance for a single token/account combo -function useTokenBalance(account, token) { - var tokenBalances = useTokenBalances( - account, - React.useMemo( - function () { - return [token] - }, - [token] - ) - ) - if (!token) return undefined - return tokenBalances[token.address] -} -function useCurrencyBalances(account, currencies) { - var tokens = React.useMemo( - function () { - var _a - return (_a = - currencies === null || currencies === void 0 - ? void 0 - : currencies.filter(function (currency) { - var _a - return (_a = currency === null || currency === void 0 ? void 0 : currency.isToken) !== null && - _a !== void 0 - ? _a - : false - })) !== null && _a !== void 0 - ? _a - : [] - }, - [currencies] - ) - var tokenBalances = useTokenBalances(account, tokens) - var containsETH = React.useMemo( - function () { - var _a - return (_a = - currencies === null || currencies === void 0 - ? void 0 - : currencies.some(function (currency) { - return currency === null || currency === void 0 ? void 0 : currency.isNative - })) !== null && _a !== void 0 - ? _a - : false - }, - [currencies] - ) - var ethBalance = useNativeCurrencyBalances( - React.useMemo( - function () { - return containsETH ? [account] : [] - }, - [containsETH, account] - ) - ) - return React.useMemo( - function () { - var _a - return (_a = - currencies === null || currencies === void 0 - ? void 0 - : currencies.map(function (currency) { - if (!account || !currency) return undefined - if (currency.isToken) return tokenBalances[currency.address] - if (currency.isNative) return ethBalance[account] - return undefined - })) !== null && _a !== void 0 - ? _a - : [] - }, - [account, currencies, ethBalance, tokenBalances] - ) -} -function useCurrencyBalance(account, currency) { - return useCurrencyBalances( - account, - React.useMemo( - function () { - return [currency] - }, - [currency] - ) - )[0] -} - -var alwaysTrue = function () { - return true -} -/** Creates a filter function that filters tokens that do not match the query. */ -function getTokenFilter(query) { - var searchingAddress = isAddress(query) - if (searchingAddress) { - var address_1 = searchingAddress.toLowerCase() - return function (t) { - return 'address' in t && address_1 === t.address.toLowerCase() - } - } - var queryParts = query - .toLowerCase() - .split(/\s+/) - .filter(function (s) { - return s.length > 0 - }) - if (queryParts.length === 0) return alwaysTrue - var match = function (s) { - var parts = s - .toLowerCase() - .split(/\s+/) - .filter(function (s) { - return s.length > 0 - }) - return queryParts.every(function (p) { - return ( - p.length === 0 || - parts.some(function (sp) { - return sp.startsWith(p) || sp.endsWith(p) - }) - ) - }) - } - return function (_a) { - var name = _a.name, - symbol = _a.symbol - return Boolean((symbol && match(symbol)) || (name && match(name))) - } -} - -/** Sorts currency amounts (descending). */ -function balanceComparator(a, b) { - if (a && b) { - return a.greaterThan(b) ? -1 : a.equalTo(b) ? 0 : 1 - } else if (a === null || a === void 0 ? void 0 : a.greaterThan('0')) { - return -1 - } else if (b === null || b === void 0 ? void 0 : b.greaterThan('0')) { - return 1 - } - return 0 -} -/** Sorts tokens by currency amount (descending), then symbol (ascending). */ -function tokenComparator(balances, a, b) { - // Sorts by balances - var balanceComparison = balanceComparator(balances[a.address], balances[b.address]) - if (balanceComparison !== 0) return balanceComparison - // Sorts by symbol - if (a.symbol && b.symbol) { - return a.symbol.toLowerCase() < b.symbol.toLowerCase() ? -1 : 1 - } - return -1 -} -/** Sorts tokens by query, giving precedence to exact matches and partial matches. */ -function useSortTokensByQuery(query, tokens) { - return React.useMemo( - function () { - if (!tokens) { - return [] - } - var matches = query - .toLowerCase() - .split(/\s+/) - .filter(function (s) { - return s.length > 0 - }) - if (matches.length > 1) { - return tokens - } - var exactMatches = [] - var symbolSubtrings = [] - var rest = [] - // sort tokens by exact match -> subtring on symbol match -> rest - tokens.map(function (token) { - var _a, _b - if (((_a = token.symbol) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === matches[0]) { - return exactMatches.push(token) - } else if ( - (_b = token.symbol) === null || _b === void 0 - ? void 0 - : _b.toLowerCase().startsWith(query.toLowerCase().trim()) - ) { - return symbolSubtrings.push(token) - } else { - return rest.push(token) - } - }) - return __spreadArray( - __spreadArray(__spreadArray([], __read(exactMatches), false), __read(symbolSubtrings), false), - __read(rest), - false - ) - }, - [tokens, query] - ) -} - -/** - * Token instances created from token info on a token list. - */ -var WrappedTokenInfo = /** @class */ (function () { - function WrappedTokenInfo(tokenInfo, list) { - this.isNative = false - this.isToken = true - this._checksummedAddress = null - this._tags = null - this.tokenInfo = tokenInfo - this.list = list - } - Object.defineProperty(WrappedTokenInfo.prototype, 'address', { - get() { - if (this._checksummedAddress) return this._checksummedAddress - var checksummedAddress = isAddress(this.tokenInfo.address) - if (!checksummedAddress) throw new Error('Invalid token address: ' + this.tokenInfo.address) - return (this._checksummedAddress = checksummedAddress) - }, - enumerable: false, - configurable: true, - }) - Object.defineProperty(WrappedTokenInfo.prototype, 'chainId', { - get() { - return this.tokenInfo.chainId - }, - enumerable: false, - configurable: true, - }) - Object.defineProperty(WrappedTokenInfo.prototype, 'decimals', { - get() { - return this.tokenInfo.decimals - }, - enumerable: false, - configurable: true, - }) - Object.defineProperty(WrappedTokenInfo.prototype, 'name', { - get() { - return this.tokenInfo.name - }, - enumerable: false, - configurable: true, - }) - Object.defineProperty(WrappedTokenInfo.prototype, 'symbol', { - get() { - return this.tokenInfo.symbol - }, - enumerable: false, - configurable: true, - }) - Object.defineProperty(WrappedTokenInfo.prototype, 'logoURI', { - get() { - return this.tokenInfo.logoURI - }, - enumerable: false, - configurable: true, - }) - Object.defineProperty(WrappedTokenInfo.prototype, 'tags', { - get() { - var _a - if (this._tags !== null) return this._tags - if (!this.tokenInfo.tags) return (this._tags = []) - var listTags = (_a = this.list) === null || _a === void 0 ? void 0 : _a.tags - if (!listTags) return (this._tags = []) - return (this._tags = this.tokenInfo.tags.map(function (tagId) { - return __assign(__assign({}, listTags[tagId]), { id: tagId }) - })) - }, - enumerable: false, - configurable: true, - }) - WrappedTokenInfo.prototype.equals = function (other) { - return other.chainId === this.chainId && other.isToken && other.address.toLowerCase() === this.address.toLowerCase() - } - WrappedTokenInfo.prototype.sortsBefore = function (other) { - if (this.equals(other)) throw new Error('Addresses should not be equal') - return this.address.toLowerCase() < other.address.toLowerCase() - } - Object.defineProperty(WrappedTokenInfo.prototype, 'wrapped', { - get() { - return this - }, - enumerable: false, - configurable: true, - }) - return WrappedTokenInfo -})() - -var mapCache = typeof WeakMap !== 'undefined' ? new WeakMap() : null -function tokensToChainTokenMap(tokens) { - var cached = mapCache === null || mapCache === void 0 ? void 0 : mapCache.get(tokens) - if (cached) return cached - var _a = __read(Array.isArray(tokens) ? [undefined, tokens] : [tokens, tokens.tokens], 2), - list = _a[0], - infos = _a[1] - var map = infos.reduce(function (map, info) { - var _a - var token = new WrappedTokenInfo(info, list) - if (((_a = map[token.chainId]) === null || _a === void 0 ? void 0 : _a[token.address]) !== undefined) { - console.warn('Duplicate token skipped: ' + token.address) - return map - } - if (!map[token.chainId]) { - map[token.chainId] = {} - } - map[token.chainId][token.address] = { token, list } - return map - }, {}) - mapCache === null || mapCache === void 0 ? void 0 : mapCache.set(tokens, map) - return map -} - -jotai.atom({}) - -// parse a name or symbol from a token response -var BYTES32_REGEX = /^0x[a-fA-F0-9]{64}$/ -function parseStringOrBytes32(str, bytes32, defaultValue) { - return str && str.length > 0 - ? str - : // need to check for proper bytes string and valid terminator - bytes32 && BYTES32_REGEX.test(bytes32) && bytes.arrayify(bytes32)[31] === 0 - ? strings.parseBytes32String(bytes32) - : defaultValue -} -/** - * Returns a Token from the tokenAddress. - * Returns null if token is loading or null was passed. - * Returns undefined if tokenAddress is invalid or token does not exist. - */ -function useTokenFromMap(tokens, tokenAddress) { - var chainId = useActiveWeb3React().chainId - var address = isAddress(tokenAddress) - var tokenContract = useTokenContract(address ? address : undefined, false) - var tokenContractBytes32 = useBytes32TokenContract(address ? address : undefined, false) - var token = address ? tokens[address] : undefined - var tokenName = useSingleCallResult(token ? undefined : tokenContract, 'name', undefined, reduxMulticall.NEVER_RELOAD) - var tokenNameBytes32 = useSingleCallResult( - token ? undefined : tokenContractBytes32, - 'name', - undefined, - reduxMulticall.NEVER_RELOAD - ) - var symbol = useSingleCallResult(token ? undefined : tokenContract, 'symbol', undefined, reduxMulticall.NEVER_RELOAD) - var symbolBytes32 = useSingleCallResult( - token ? undefined : tokenContractBytes32, - 'symbol', - undefined, - reduxMulticall.NEVER_RELOAD - ) - var decimals = useSingleCallResult( - token ? undefined : tokenContract, - 'decimals', - undefined, - reduxMulticall.NEVER_RELOAD - ) - return React.useMemo( - function () { - var _a, _b, _c, _d - if (token) return token - if (tokenAddress === null) return null - if (!chainId || !address) return undefined - if (decimals.loading || symbol.loading || tokenName.loading) return null - if (decimals.result) { - return new sdkCore.Token( - chainId, - address, - decimals.result[0], - parseStringOrBytes32( - (_a = symbol.result) === null || _a === void 0 ? void 0 : _a[0], - (_b = symbolBytes32.result) === null || _b === void 0 ? void 0 : _b[0], - 'UNKNOWN' - ), - parseStringOrBytes32( - (_c = tokenName.result) === null || _c === void 0 ? void 0 : _c[0], - (_d = tokenNameBytes32.result) === null || _d === void 0 ? void 0 : _d[0], - 'Unknown Token' - ) - ) - } - return undefined - }, - [ - address, - chainId, - decimals.loading, - decimals.result, - symbol.loading, - symbol.result, - symbolBytes32.result, - token, - tokenAddress, - tokenName.loading, - tokenName.result, - tokenNameBytes32.result, - ] - ) -} -/** - * Returns a Currency from the currencyId. - * Returns null if currency is loading or null was passed. - * Returns undefined if currencyId is invalid or token does not exist. - */ -function useCurrencyFromMap(tokens, currencyId) { - var _a - var nativeCurrency = useNativeCurrency() - var isNative = Boolean( - nativeCurrency && (currencyId === null || currencyId === void 0 ? void 0 : currencyId.toUpperCase()) === 'ETH' - ) - var token = useTokenFromMap(tokens, isNative ? undefined : currencyId) - if (currencyId === null || currencyId === undefined) return currencyId - // this case so we use our builtin wrapped token instead of wrapped tokens on token lists - var wrappedNative = nativeCurrency === null || nativeCurrency === void 0 ? void 0 : nativeCurrency.wrapped - if ( - ((_a = wrappedNative === null || wrappedNative === void 0 ? void 0 : wrappedNative.address) === null || - _a === void 0 - ? void 0 - : _a.toUpperCase()) === (currencyId === null || currencyId === void 0 ? void 0 : currencyId.toUpperCase()) - ) - return wrappedNative - return isNative ? nativeCurrency : token -} - -var DEFAULT_LIST_PRIORITIES = DEFAULT_LIST_OF_LISTS.reduce(function (memo, listUrl, index) { - memo[listUrl] = index + 1 - return memo -}, {}) -// use ordering of default list of lists to assign priority -function sortByListPriority(urlA, urlB) { - if (DEFAULT_LIST_PRIORITIES[urlA] && DEFAULT_LIST_PRIORITIES[urlB]) { - return DEFAULT_LIST_PRIORITIES[urlA] - DEFAULT_LIST_PRIORITIES[urlB] - } - return 0 -} - -var name$1 = 'Broken Token List' -var timestamp$1 = '2021-01-05T20:47:02.923Z' -var version$1 = { - major: 1, - minor: 0, - patch: 0, -} -var tags$1 = {} -var logoURI$1 = 'ipfs://QmNa8mQkrNKp1WEEeGjFezDmDeodkWRevGFN8JCV7b4Xir' -var keywords$1 = ['uniswap', 'broken'] -var tokens$1 = [ - { - name: 'UNI HODL', - address: '0x4bf5dc91E2555449293D7824028Eb8Fe5879B689', - symbol: 'UniH', - decimals: 18, - chainId: 1, - logoURI: '', - }, -] -var BROKEN_LIST = { - name: name$1, - timestamp: timestamp$1, - version: version$1, - tags: tags$1, - logoURI: logoURI$1, - keywords: keywords$1, - tokens: tokens$1, -} - -var name = 'Unsupported Tokens' -var timestamp = '2021-01-05T20:47:02.923Z' -var version = { - major: 1, - minor: 0, - patch: 0, -} -var tags = {} -var logoURI = 'ipfs://QmNa8mQkrNKp1WEEeGjFezDmDeodkWRevGFN8JCV7b4Xir' -var keywords = ['uniswap', 'unsupported'] -var tokens = [ - { - name: 'Gold Tether', - address: '0x4922a015c4407F87432B179bb209e125432E4a2A', - symbol: 'XAUt', - decimals: 6, - chainId: 1, - logoURI: - 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4922a015c4407F87432B179bb209e125432E4a2A/logo.png', - }, - { - name: 'Grump Cat', - address: '0x93B2FfF814FCaEFFB01406e80B4Ecd89Ca6A021b', - symbol: 'GRUMPY', - decimals: 9, - chainId: 1, - logoURI: - 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4922a015c4407F87432B179bb209e125432E4a2A/logo.png', - }, - { - name: 'apeUSD-UMA Synthetic USD (Dec 2021)', - address: '0xfA5e27893aee4805283D86e4283Da64F8c72dd56', - symbol: 'apeUSD-UMA-DEC21', - decimals: 18, - chainId: 1, - logoURI: '', - }, - { - chainId: 1, - address: '0xc6b11850241c5127eab73af4b6c68bc267cbbff4', - name: 'oWETHp Put 360 DEC2520', - symbol: 'oWETH-360P-12/25/20', - decimals: 7, - }, - { - chainId: 1, - name: 'oYFIp Put 25000 OCT0220', - address: '0x452b421be5b30f0c6ad8c3f03c06bdaab4f5c56c', - symbol: 'oYFI-25000P-10/02/20', - decimals: 7, - }, - { - chainId: 1, - name: 'oWETHp Put 360 OCT3020', - address: '0x0578779e746d7186253a36cf651ea786acfcf087', - symbol: 'oWETH-360P-10/30/20', - decimals: 7, - }, - { - chainId: 1, - name: 'ETHc Call 500 OCT3020', - address: '0xf9aba2e43fb19184408ea3b572a0fd672946f87b', - symbol: 'oETH-500C-10/30/20', - decimals: 6, - }, - { - chainId: 1, - name: 'oBALp Put 22 OCT0220', - address: '0xdb0991dfc7e828b5a2837dc82d68e16490562c8d', - symbol: 'oBAL-22P-10/02/20', - decimals: 7, - }, - { - chainId: 1, - name: 'oCOMPp Put 150 SEP2520', - address: '0xe951ebe6b4420ab3f4844cf36dedd263d095b416', - symbol: 'oCOMP-150P-09/25/20', - decimals: 7, - }, - { - chainId: 1, - name: 'oCRVp Put 3 SEP252020', - address: '0x9215bd49b59748419eac6bad9dbe247df06ebdb9', - symbol: 'oCRV-3P-09/25/20', - decimals: 7, - }, - { - chainId: 1, - name: 'oETHp Put 180 SEP2520', - address: '0xE3A2c34Fa2F59ffa95C4ACd1E5663633d45Bc3AD', - symbol: 'oETH-180P-09/25/20', - decimals: 7, - }, - { - chainId: 1, - name: 'oETHc Call 400 SEP2520', - address: '0x05977EBC26825C0CD6097E0Ad7204721516711Eb', - symbol: 'oETH-400C-09/25/20', - decimals: 7, - }, - { - chainId: 1, - name: 'oWETHp Put 380 SEP1820', - address: '0x31f88266301b08631f9f0e33fd5c43c2a5d1e5b2', - symbol: 'oWETH-380P-09/18/20', - decimals: 7, - }, - { - chainId: 1, - name: 'oYFIp Put 8500 SEP1820', - address: '0xd1cec2f67fdc4c60e0963515dfc3343f31e32e47', - symbol: 'oYFI-8500P-09/18/20', - decimals: 7, - }, - { - chainId: 1, - name: 'oWETHp Put 370 SEP1120', - address: '0x15844029b2c2bf24506e9937739a9a912f1e4354', - symbol: 'oWETH-370P-09/11/20', - decimals: 7, - }, - { - chainId: 1, - name: 'oWETHp Put 400 SEP0420', - address: '0x5562c33c383f6386be4f6dcdbd35a3a99bbcfde6', - symbol: 'oWETH-400P-09/04/20', - decimals: 7, - }, - { - chainId: 1, - name: 'oETHp Put 200 AUG2820', - address: '0x3CBFC1397deF0602c2d211c70A1c0c38CEDB5448', - symbol: 'oWETH-400P-09/04/20', - decimals: 7, - }, - { - chainId: 1, - name: 'Opyn cDai Insurance', - symbol: 'ocDai', - address: '0x98cc3bd6af1880fcfda17ac477b2f612980e5e33', - decimals: 8, - }, - { - chainId: 1, - name: 'Opyn cUSDC Insurance', - symbol: 'ocUSDC', - address: '0x8ED9f862363fFdFD3a07546e618214b6D59F03d4', - decimals: 8, - }, - { - chainId: 1, - address: '0x176C674Ee533C6139B0dc8b458D72A93dCB3e705', - symbol: 'iAAVE', - name: 'Synth Inverse Aave', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iAAVE.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0x8A8079c7149B8A1611e5C5d978DCA3bE16545F83', - symbol: 'iADA', - name: 'Synth Inverse Cardano', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iADA.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0xAFD870F32CE54EfdBF677466B612bf8ad164454B', - symbol: 'iBNB', - name: 'Synth Inverse Binance Coin', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iBNB.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0xD6014EA05BDe904448B743833dDF07c3C7837481', - symbol: 'iBTC', - name: 'Synth Inverse Bitcoin', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iBTC.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0x336213e1DDFC69f4701Fc3F86F4ef4A160c1159d', - symbol: 'iCEX', - name: 'Synth Inverse Centralised Exchange Index', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iCEX.svg', - tags: ['index', 'inverse', 'synth'], - }, - { - chainId: 1, - address: '0x6345728B1ccE16E6f8C509950b5c84FFF88530d9', - symbol: 'iCOMP', - name: 'Synth Inverse Compound', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iCOMP.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0xCB98f42221b2C251A4E74A1609722eE09f0cc08E', - symbol: 'iDASH', - name: 'Synth Inverse Dash', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDASH.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0x14d10003807AC60d07BB0ba82cAeaC8d2087c157', - symbol: 'iDEFI', - name: 'Synth Inverse DeFi Index', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDEFI.svg', - tags: ['index', 'inverse', 'synth'], - }, - { - chainId: 1, - address: '0x46a97629C9C1F58De6EC18C7F536e7E6d6A6ecDe', - symbol: 'iDOT', - name: 'Synth Inverse Polkadot', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDOT.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0xF4EebDD0704021eF2a6Bbe993fdf93030Cd784b4', - symbol: 'iEOS', - name: 'Synth Inverse EOS', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iEOS.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0xd50c1746D835d2770dDA3703B69187bFfeB14126', - symbol: 'iETC', - name: 'Synth Inverse Ethereum Classic', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iETC.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0xA9859874e1743A32409f75bB11549892138BBA1E', - symbol: 'iETH', - name: 'Synth Inverse Ether', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iETH.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0x2d7aC061fc3db53c39fe1607fB8cec1B2C162B01', - symbol: 'iLINK', - name: 'Synth Inverse Chainlink', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iLINK.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0x79da1431150C9b82D2E5dfc1C68B33216846851e', - symbol: 'iLTC', - name: 'Synth Inverse Litecoin', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iLTC.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0xA5a5DF41883Cdc00c4cCC6E8097130535399d9a3', - symbol: 'iOIL', - name: 'Synth Inverse Perpetual Oil Futures', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iOIL.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0x0fEd38108bdb8e62ef7b5680E8E0726E2F29e0De', - symbol: 'iREN', - name: 'Synth Inverse Ren', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iREN.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0xC5807183a9661A533CB08CbC297594a0B864dc12', - symbol: 'iTRX', - name: 'Synth Inverse TRON', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iTRX.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0x36A00FF9072570eF4B9292117850B8FE08d96cce', - symbol: 'iUNI', - name: 'Synth Inverse Uniswap', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iUNI.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0x4AdF728E2Df4945082cDD6053869f51278fae196', - symbol: 'iXMR', - name: 'Synth Inverse Monero', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXMR.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0x27269b3e45A4D3E79A3D6BFeE0C8fB13d0D711A6', - symbol: 'iXRP', - name: 'Synth Inverse Ripple', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXRP.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0x8deef89058090ac5655A99EEB451a4f9183D1678', - symbol: 'iXTZ', - name: 'Synth Inverse Tezos', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXTZ.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0x592244301CeA952d6daB2fdC1fE6bd9E53917306', - symbol: 'iYFI', - name: 'Synth Inverse yearn.finance', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iYFI.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0xcD39b5434a0A92cf47D1F567a7dF84bE356814F0', - symbol: 's1INCH', - name: 'Synth 1inch', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/s1INCH.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x7537AAe01f3B218DAE75e10d952473823F961B87', - symbol: 'sAAPL', - name: 'Synth Apple', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAAPL.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xd2dF355C19471c8bd7D8A3aa27Ff4e26A21b4076', - symbol: 'sAAVE', - name: 'Synth Aave', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAAVE.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xe36E2D3c7c34281FA3bC737950a68571736880A1', - symbol: 'sADA', - name: 'Synth Cardano', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sADA.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x9CF7E61853ea30A41b02169391b393B901eac457', - symbol: 'sAMZN', - name: 'Synth Amazon', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAMZN.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xF48e200EAF9906362BB1442fca31e0835773b8B4', - symbol: 'sAUD', - name: 'Synth Australian Dollars', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAUD.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x617aeCB6137B5108D1E7D4918e3725C8cEbdB848', - symbol: 'sBNB', - name: 'Synth Binance Coin', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sBNB.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xfE18be6b3Bd88A2D2A7f928d00292E7a9963CfC6', - symbol: 'sBTC', - name: 'Synth Bitcoin', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sBTC.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xeABACD844A196D7Faf3CE596edeBF9900341B420', - symbol: 'sCEX', - name: 'Synth Centralised Exchange Index', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCEX.svg', - tags: ['index', 'synth'], - }, - { - chainId: 1, - address: '0x0F83287FF768D1c1e17a42F44d644D7F22e8ee1d', - symbol: 'sCHF', - name: 'Synth Swiss Franc', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCHF.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x9EeF4CA7aB9fa8bc0650127341C2d3F707a40f8A', - symbol: 'sCOIN', - name: 'Synth Coinbase', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCOIN.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xEb029507d3e043DD6C87F2917C4E82B902c35618', - symbol: 'sCOMP', - name: 'Synth Compound', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCOMP.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xD38aEb759891882e78E957c80656572503D8c1B1', - symbol: 'sCRV', - name: 'Synth Curve DAO Token', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCRV.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xfE33ae95A9f0DA8A845aF33516EDc240DCD711d6', - symbol: 'sDASH', - name: 'Synth Dash', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDASH.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xe1aFe1Fd76Fd88f78cBf599ea1846231B8bA3B6B', - symbol: 'sDEFI', - name: 'Synth DeFi Index', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDEFI.svg', - tags: ['index', 'synth'], - }, - { - chainId: 1, - address: '0x1715AC0743102BF5Cd58EfBB6Cf2dC2685d967b6', - symbol: 'sDOT', - name: 'Synth Polkadot', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDOT.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x88C8Cf3A212c0369698D13FE98Fcb76620389841', - symbol: 'sEOS', - name: 'Synth EOS', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sEOS.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x22602469d704BfFb0936c7A7cfcD18f7aA269375', - symbol: 'sETC', - name: 'Synth Ethereum Classic', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sETC.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x5e74C9036fb86BD7eCdcb084a0673EFc32eA31cb', - symbol: 'sETH', - name: 'Synth Ether', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sETH.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xD71eCFF9342A5Ced620049e616c5035F1dB98620', - symbol: 'sEUR', - name: 'Synth Euros', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sEUR.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xf50B5e535F62a56A9BD2d8e2434204E726c027Fa', - symbol: 'sFB', - name: 'Synth Facebook', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sFB.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x23348160D7f5aca21195dF2b70f28Fce2B0be9fC', - symbol: 'sFTSE', - name: 'Synth FTSE 100 Index', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sFTSE.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x97fe22E7341a0Cd8Db6F6C021A24Dc8f4DAD855F', - symbol: 'sGBP', - name: 'Synth Pound Sterling', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sGBP.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xC63B8ECCE56aB9C46184eC6aB85e4771fEa4c8AD', - symbol: 'sGOOG', - name: 'Synth Alphabet', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sGOOG.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xF6b1C627e95BFc3c1b4c9B825a032Ff0fBf3e07d', - symbol: 'sJPY', - name: 'Synth Japanese Yen', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sJPY.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x269895a3dF4D73b077Fc823dD6dA1B95f72Aaf9B', - symbol: 'sKRW', - name: 'Synth South Korean Won', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sKRW.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xbBC455cb4F1B9e4bFC4B73970d360c8f032EfEE6', - symbol: 'sLINK', - name: 'Synth Chainlink', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sLINK.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xC14103C2141E842e228FBaC594579e798616ce7A', - symbol: 'sLTC', - name: 'Synth Litecoin', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sLTC.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x745a824D6aBBD236AA794b5530062778A6Ad7523', - symbol: 'sMSFT', - name: 'Synth Microsoft', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sMSFT.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x5A7E3c07604EB515C16b36cd51906a65f021F609', - symbol: 'sNFLX', - name: 'Synth Netflix', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sNFLX.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x757de3ac6B830a931eF178C6634c5C551773155c', - symbol: 'sNIKKEI', - name: 'Synth Nikkei 225 Index', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sNIKKEI.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x6d16cF3EC5F763d4d99cB0B0b110eefD93B11B56', - symbol: 'sOIL', - name: 'Synth Perpetual Oil Futures', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sOIL.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xD31533E8d0f3DF62060e94B3F1318137bB6E3525', - symbol: 'sREN', - name: 'Synth Ren', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sREN.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x0352557B007A4Aae1511C114409b932F06F9E2f4', - symbol: 'sRUNE', - name: 'Synth THORChain', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sRUNE.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xf2E08356588EC5cd9E437552Da87C0076b4970B0', - symbol: 'sTRX', - name: 'Synth TRON', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sTRX.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x918dA91Ccbc32B7a6A0cc4eCd5987bbab6E31e6D', - symbol: 'sTSLA', - name: 'Synth Tesla', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sTSLA.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x30635297E450b930f8693297eBa160D9e6c8eBcf', - symbol: 'sUNI', - name: 'Synth Uniswap', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sUNI.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x6A22e5e94388464181578Aa7A6B869e00fE27846', - symbol: 'sXAG', - name: 'Synth Silver Ounce', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXAG.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x261EfCdD24CeA98652B9700800a13DfBca4103fF', - symbol: 'sXAU', - name: 'Synth Gold Ounce', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXAU.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x5299d6F7472DCc137D7f3C4BcfBBB514BaBF341A', - symbol: 'sXMR', - name: 'Synth Monero', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXMR.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xa2B0fDe6D710e201d0d608e924A484d1A5fEd57c', - symbol: 'sXRP', - name: 'Synth Ripple', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXRP.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x2e59005c5c0f0a4D77CcA82653d48b46322EE5Cd', - symbol: 'sXTZ', - name: 'Synth Tezos', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXTZ.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x992058B7DB08F9734d84485bfbC243C4ee6954A7', - symbol: 'sYFI', - name: 'Synth yearn.finance', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sYFI.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x81ab848898b5ffD3354dbbEfb333D5D183eEDcB5', - name: 'yUSD Synthetic Expiring 1 September 2020', - symbol: 'yUSDSEP20', - decimals: 18, - }, - { - chainId: 1, - address: '0xB2FdD60AD80ca7bA89B9BAb3b5336c2601C020b4', - name: 'yUSD Synthetic Expiring 1 October 2020', - symbol: 'yUSDOCT20', - decimals: 18, - }, - { - chainId: 1, - address: '0x208d174775dc39fe18b1b374972f77ddec6c0f73', - name: 'uUSDrBTC Synthetic Expiring 1 Oct 2020', - symbol: 'uUSDrBTC-OCT', - decimals: 18, - }, - { - chainId: 1, - address: '0xf06ddacf71e2992e2122a1a0168c6967afdf63ce', - name: 'uUSDrBTC Synthetic Expiring 31 Dec 2020', - symbol: 'uUSDrBTC-DEC', - decimals: 18, - }, - { - chainId: 1, - address: '0xd16c79c8a39d44b2f3eb45d2019cd6a42b03e2a9', - name: 'uUSDwETH Synthetic Expiring 31 Dec 2020', - symbol: 'uUSDwETH-DEC', - decimals: 18, - }, - { - chainId: 1, - address: '0x3d995510f8d82c2ea341845932b5ddde0bead9a3', - name: 'uGAS-JAN21 Token Expiring 31 Jan 2021', - symbol: 'uGAS-JAN21', - decimals: 18, - }, - { - chainId: 1, - address: '0x90f802c7e8fb5d40b0de583e34c065a3bd2020d8', - name: 'YD-ETH-MAR21 Token Expiring 31 Mar 2021', - symbol: 'YD-ETH-MAR21', - decimals: 18, - }, - { - chainId: 1, - address: '0x002f0b1a71c5730cf2f4da1970a889207bdb6d0d', - name: 'YD-BTC-MAR21 Token Expiring 31 Mar 2021', - symbol: 'YD-BTC-MAR21', - decimals: 18, - }, - { - chainId: 1, - address: '0x1062ad0e59fa67fa0b27369113098cc941dd0d5f', - name: 'UMA 35 Call Expirying 30 Apr 2021', - symbol: 'UMAc35-0421', - decimals: 18, - }, - { - chainId: 1, - address: '0xf93340b1a3adf7eedcaec25fae8171d4b736e89f', - name: 'pxUSD Synthetic USD Expiring 1 April 2021', - symbol: 'pxUSD_MAR2021', - decimals: 18, - }, - { - chainId: 1, - address: '0x84bd083b1c8bf929f39c98bc17cf518f40154f58', - name: 'Mario Cash Synthetic Token Expiring 15 January 2021', - symbol: 'Mario Cash-JAN-2021', - decimals: 18, - }, - { - chainId: 1, - address: '0x81fab276aec924fbde190cf379783526d413cf70', - name: 'uGAS-FEB21 Token Expiring 28 Feb 2021', - symbol: 'uGAS-FEB21', - decimals: 18, - }, - { - chainId: 1, - address: '0x4e110603e70b0b5f1c403ee543b37e1f1244cf28', - name: 'uGAS-MAR21 Token Expiring 31 Mar 2021', - symbol: 'uGAS-MAR21', - decimals: 18, - }, - { - chainId: 1, - address: '0xcf55a7f92d5e0c6683debbc1fc20c0a6e056df13', - name: 'Zelda Elastic Cash', - symbol: 'Zelda Elastic Cash', - decimals: 18, - }, - { - chainId: 1, - address: '0x654eebac62240e6c56bab5f6adf7cfa74a894510', - name: 'Zelda Spring Nuts Cash', - symbol: 'Zelda Spring Nuts Cash', - decimals: 18, - }, - { - chainId: 1, - address: '0xa48920cc1ad85d8ea13af5d7be180c0338c306dd', - name: 'Zelda Summer Nuts Cash', - symbol: 'Zelda Summer Nuts Cash', - decimals: 18, - }, - { - chainId: 1, - address: '0x249a198d59b57fda5dda90630febc86fd8c7594c', - name: 'Zelda Whirlwind Cash', - symbol: 'Zelda Whirlwind Cash', - decimals: 18, - }, - { - chainId: 1, - address: '0x5ed1406873c9eb91f6f9a67ac4e152387c1132e7', - name: 'Zelda Reinforced Cash', - symbol: 'Zelda Reinforced Cash', - decimals: 18, - }, - { - chainId: 1, - address: '0x8104c9f13118320eefe5fbea8a44d600b85981ef', - name: 'Mini Mario Summer Cash', - symbol: 'Mini Mario Summer Cash', - decimals: 18, - }, - { - chainId: 1, - address: '0x69746c719e59674b147df25f50e7cfa0673cb625', - name: 'Mini Mario Spring Cash', - symbol: 'Mini Mario Spring Cash', - decimals: 18, - }, - { - chainId: 1, - address: '0x6b1257641d18791141f025eab36fb567c4b564ff', - name: 'Bitcoin Dominance Token 31 March 2021', - symbol: 'BTCDOM-MAR2021', - decimals: 18, - }, - { - chainId: 1, - address: '0x4e83b6287588a96321b2661c5e041845ff7814af', - name: 'Altcoin Dominance Token 31 March 2021', - symbol: 'ALTDOM-MAR2021', - decimals: 18, - }, - { - chainId: 1, - address: '0x59fec83ec709c893aedd1a144cf1828eb04127cd', - name: 'pxGOLD Synthetic GOLD Expiring 31 May 2021', - symbol: 'pxGOLD_MAY2021', - decimals: 18, - }, - { - chainId: 1, - address: '0x89337BFb7938804c3776C9FB921EccAf5ab76758', - name: 'Compound Annualized Rate Future Expiring 28 March 2021', - symbol: 'CAR-USDC-MAR21', - decimals: 18, - }, - { - chainId: 1, - address: '0xec58d3aefc9aaa2e0036fa65f70d569f49d9d1ed', - name: 'uSTONKS Index Token April 2021', - symbol: 'uSTONKS_APR21', - decimals: 6, - }, - { - chainId: 1, - address: '0xa6B9d7E3d76cF23549293Fb22c488E0Ea591A44e', - name: 'uGAS-JUN21 Token Expiring 30 Jun 2021', - symbol: 'uGAS-JUN21', - decimals: 18, - }, - { - chainId: 1, - address: '0xe813b65da6c38a04591aed3f082d32db7d53c382', - name: 'Yield Dollar [WETH Dec 2021]', - symbol: 'YD-ETH-DEC21', - decimals: 18, - }, - { - chainId: 1, - address: '0x4b606e9eb2228c70f44453afe5a73e1fea258ce1', - name: 'pxUSD Synthetic USD Expiring 31 Mar 2022', - symbol: 'pxUSD_MAR2022', - decimals: 18, - }, - { - chainId: 1, - address: '0x5247c0db4044fb6f97f32c7e1b48758019a5a912', - name: 'pxGOLD Synthetic Gold Expiring 31 Mar 2022', - symbol: 'pxGOLD_MAR2022', - decimals: 18, - }, - { - chainId: 1, - address: '0x56fb1acaff95c0b6ebcd17c8361a63d98b1a5a11', - name: 'uForex CNYUSD Synthetic Token April 2021', - symbol: 'uCNYUSD-APR', - decimals: 6, - }, - { - chainId: 1, - address: '0xd49fa405dce086c65d66ca1ca41f8e98583812b4', - name: 'uForex EURUSD Synthetic Token April 2021', - symbol: 'uEURUSD-APR', - decimals: 6, - }, - { - chainId: 1, - address: '0x29dddacba3b231ee8d673dd0f0fa759ea145561b', - name: 'DEFI_PULSE_TOTAL_TVL Synthetic Token Expiring 15 April 2021', - symbol: 'TVL_ALL_APRIL15', - decimals: 6, - }, - { - chainId: 1, - address: '0xcbe430927370e95b4b10cfc702c6017ec7abefc3', - name: 'Yield Dollar [WETH Jun 2021]', - symbol: 'YD-ETH-JUN21', - decimals: 18, - }, - { - chainId: 1, - address: '0x4b7fb448df91c8ed973494f8c8c4f12daf3a8521', - name: 'Yield Dollar [renBTC Jun 2021]', - symbol: 'YD-BTC-JUN21', - decimals: 8, - }, - { - chainId: 1, - address: '0x3108c33b6fb38efedaefd8b5f7ca01d5f5c7372d', - name: 'Yield Dollar UMA 21', - symbol: 'yUMA21', - decimals: 18, - }, - { - chainId: 1, - address: '0x0cae9e4d663793c2a2A0b211c1Cf4bBca2B9cAa7', - name: 'Mirrored Amazon', - symbol: 'MAMZN', - decimals: 18, - }, - { - chainId: 1, - address: '0x31c63146a635EB7465e5853020b39713AC356991', - name: 'M US Oil', - symbol: 'MUSO', - decimals: 18, - }, - { - chainId: 1, - address: '0x59A921Db27Dd6d4d974745B7FfC5c33932653442', - name: 'M Google', - symbol: 'MGOOGL', - decimals: 18, - }, - { - chainId: 1, - address: '0xf72FCd9DCF0190923Fadd44811E240Ef4533fc86', - name: 'Mirrored ProShares', - symbol: 'MVIXY', - decimals: 18, - }, - { - chainId: 1, - address: '0x56aA298a19C93c6801FDde870fA63EF75Cc0aF72', - name: 'Mirrored Alibaba', - symbol: 'MBABA', - decimals: 18, - }, - { - chainId: 1, - address: '0x0e99cC0535BB6251F6679Fa6E65d6d3b430e840B', - name: 'Mirrored Facebook', - symbol: 'MFB', - decimals: 18, - }, - { - chainId: 1, - address: '0x13B02c8dE71680e71F0820c996E4bE43c2F57d15', - name: 'Mirrored Invesco QQ', - symbol: 'MQQQ', - decimals: 18, - }, - { - chainId: 1, - address: '0x41BbEDd7286dAab5910a1f15d12CBda839852BD7', - name: 'Mirrored Microsoft', - symbol: 'MMSFT', - decimals: 18, - }, - { - chainId: 1, - address: '0x9d1555d8cB3C846Bb4f7D5B1B1080872c3166676', - name: 'Mirrored iShares Si', - symbol: 'MSLV', - decimals: 18, - }, - { - chainId: 1, - address: '0x21cA39943E91d704678F5D00b6616650F066fD63', - name: 'Mirrored Tesla', - symbol: 'MTSLA', - decimals: 18, - }, - { - chainId: 1, - address: '0xe82bbB62fA81d0701643d1675FB50ec52fD3Df92', - name: 'DYDX Token', - symbol: 'DYDX', - decimals: 18, - }, - { - chainId: 10, - address: '0xE405de8F52ba7559f9df3C368500B6E6ae6Cee49', - name: 'sETH', - symbol: 'Synth Ether', - decimals: 18, - }, - { - chainId: 10, - address: '0x298B9B95708152ff6968aafd889c6586e9169f1D', - name: 'sBTC', - symbol: 'Synth Bitcoin', - decimals: 18, - }, - { - chainId: 10, - address: '0xc5Db22719A06418028A40A9B5E9A7c02959D0d08', - name: 'sLINK', - symbol: 'Synth Link', - decimals: 18, - }, - { - chainId: 1, - address: '0x6B60eE11b73230045cF9095E6e43AE9Ea638e172', - name: 'Shatner', - symbol: 'SHAT', - decimals: 18, - }, - { - chainId: 1, - address: '0x7277a44D1325D81Ac58893002a1B40a41bea43fe', - name: 'FAANG Index', - symbol: 'FAANG', - decimals: 18, - }, - { - chainId: 1, - address: '0x76175599887730786bdA1545D0D7AcE8737fEBB1', - name: 'ENS DAO', - symbol: 'ENS', - decimals: 18, - }, - { - chainId: 1, - address: '0xa82AA729AE2F0d78e961D66db53949e27a9E866d', - name: 'BMEX', - symbol: 'BMEX', - decimals: 18, - }, -] -var UNSUPPORTED_TOKEN_LIST = { - name, - timestamp, - version, - tags, - logoURI, - keywords, - tokens, -} - -function useAllLists() { - return useAppSelector(function (state) { - return state.lists.byUrl - }) -} -/** - * Combine the tokens in map2 with the tokens on map1, where tokens on map1 take precedence - * @param map1 the base token map - * @param map2 the map of additioanl tokens to add to the base map - */ -function combineMaps(map1, map2) { - var chainIds = Object.keys( - Object.keys(map1) - .concat(Object.keys(map2)) - .reduce(function (memo, value) { - memo[value] = true - return memo - }, {}) - ).map(function (id) { - return parseInt(id) - }) - return chainIds.reduce(function (memo, chainId) { - memo[chainId] = __assign(__assign({}, map2[chainId]), map1[chainId]) - return memo - }, {}) -} -// merge tokens contained within lists from urls -function useCombinedTokenMapFromUrls(urls) { - var lists = useAllLists() - return React.useMemo( - function () { - if (!urls) return {} - return ( - urls - .slice() - // sort by priority so top priority goes last - .sort(sortByListPriority) - .reduce(function (allTokens, currentUrl) { - var _a - var current = (_a = lists[currentUrl]) === null || _a === void 0 ? void 0 : _a.current - if (!current) return allTokens - try { - return combineMaps(allTokens, tokensToChainTokenMap(current)) - } catch (error) { - console.error('Could not show token list due to error', error) - return allTokens - } - }, {}) - ) - }, - [lists, urls] - ) -} -// filter out unsupported lists -function useActiveListUrls() { - var activeListUrls = useAppSelector(function (state) { - return state.lists.activeListUrls - }) - return React.useMemo( - function () { - return activeListUrls === null || activeListUrls === void 0 - ? void 0 - : activeListUrls.filter(function (url) { - return !UNSUPPORTED_LIST_URLS.includes(url) - }) - }, - [activeListUrls] - ) -} -function useInactiveListUrls() { - var lists = useAllLists() - var allActiveListUrls = useActiveListUrls() - return React.useMemo( - function () { - return Object.keys(lists).filter(function (url) { - return ( - !(allActiveListUrls === null || allActiveListUrls === void 0 ? void 0 : allActiveListUrls.includes(url)) && - !UNSUPPORTED_LIST_URLS.includes(url) - ) - }) - }, - [lists, allActiveListUrls] - ) -} -// get all the tokens from active lists, combine with local default tokens -function useCombinedActiveList() { - var activeListUrls = useActiveListUrls() - var activeTokens = useCombinedTokenMapFromUrls(activeListUrls) - return activeTokens -} -// list of tokens not supported on interface for various reasons, used to show warnings and prevent swaps and adds -function useUnsupportedTokenList() { - // get hard-coded broken tokens - var brokenListMap = React.useMemo(function () { - return tokensToChainTokenMap(BROKEN_LIST) - }, []) - // get hard-coded list of unsupported tokens - var localUnsupportedListMap = React.useMemo(function () { - return tokensToChainTokenMap(UNSUPPORTED_TOKEN_LIST) - }, []) - // get dynamic list of unsupported tokens - var loadedUnsupportedListMap = useCombinedTokenMapFromUrls(UNSUPPORTED_LIST_URLS) - // format into one token address map - return React.useMemo( - function () { - return combineMaps(brokenListMap, combineMaps(localUnsupportedListMap, loadedUnsupportedListMap)) - }, - [brokenListMap, localUnsupportedListMap, loadedUnsupportedListMap] - ) -} -function useIsListActive(url) { - var activeListUrls = useActiveListUrls() - return Boolean(activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(url)) -} - -// reduce token map into standard address <-> Token mapping, optionally include user added tokens -function useTokensFromMap(tokenMap, includeUserAdded) { - var chainId = useActiveWeb3React().chainId - var userAddedTokens = useUserAddedTokens() - return React.useMemo( - function () { - var _a - if (!chainId) return {} - // reduce to just tokens - var mapWithoutUrls = Object.keys((_a = tokenMap[chainId]) !== null && _a !== void 0 ? _a : {}).reduce(function ( - newMap, - address - ) { - newMap[address] = tokenMap[chainId][address].token - return newMap - }, - {}) - if (includeUserAdded) { - return ( - userAddedTokens - // reduce into all ALL_TOKENS filtered by the current chain - .reduce(function (tokenMap, token) { - tokenMap[token.address] = token - return tokenMap - }, __assign({}, mapWithoutUrls)) - ) - } - return mapWithoutUrls - }, - [chainId, userAddedTokens, tokenMap, includeUserAdded] - ) -} -function useAllTokens() { - var allTokens = useCombinedActiveList() - return useTokensFromMap(allTokens, true) -} -function useUnsupportedTokens() { - var chainId = useActiveWeb3React().chainId - var listsByUrl = useAllLists() - var unsupportedTokensMap = useUnsupportedTokenList() - var unsupportedTokens = useTokensFromMap(unsupportedTokensMap, false) - // checks the default L2 lists to see if `bridgeInfo` has an L1 address value that is unsupported - var l2InferredBlockedTokens = React.useMemo( - function () { - if (!chainId || !L2_CHAIN_IDS.includes(chainId)) { - return {} - } - if (!listsByUrl) { - return {} - } - var listUrl = CHAIN_INFO[chainId].defaultListUrl - var list = listsByUrl[listUrl].current - if (!list) { - return {} - } - var unsupportedSet = new Set(Object.keys(unsupportedTokens)) - return list.tokens.reduce(function (acc, tokenInfo) { - var _a - var _b - var bridgeInfo = (_b = tokenInfo.extensions) === null || _b === void 0 ? void 0 : _b.bridgeInfo - if ( - bridgeInfo && - bridgeInfo[SupportedChainId.MAINNET] && - bridgeInfo[SupportedChainId.MAINNET].tokenAddress && - unsupportedSet.has(bridgeInfo[SupportedChainId.MAINNET].tokenAddress) - ) { - var address = bridgeInfo[SupportedChainId.MAINNET].tokenAddress - // don't rely on decimals--it's possible that a token could be bridged w/ different decimals on the L2 - return __assign( - __assign({}, acc), - ((_a = {}), (_a[address] = new sdkCore.Token(SupportedChainId.MAINNET, address, tokenInfo.decimals)), _a) - ) - } - return acc - }, {}) - }, - [chainId, listsByUrl, unsupportedTokens] - ) - return __assign(__assign({}, unsupportedTokens), l2InferredBlockedTokens) -} -function useSearchInactiveTokenLists(search, minResults) { - if (minResults === void 0) { - minResults = 10 - } - var lists = useAllLists() - var inactiveUrls = useInactiveListUrls() - var chainId = useActiveWeb3React().chainId - var activeTokens = useAllTokens() - return React.useMemo( - function () { - var e_1, _a, e_2, _b - if (!search || search.trim().length === 0) return [] - var tokenFilter = getTokenFilter(search) - var result = [] - var addressSet = {} - try { - for ( - var inactiveUrls_1 = __values(inactiveUrls), inactiveUrls_1_1 = inactiveUrls_1.next(); - !inactiveUrls_1_1.done; - inactiveUrls_1_1 = inactiveUrls_1.next() - ) { - var url = inactiveUrls_1_1.value - var list = lists[url].current - if (!list) continue - try { - for (var _c = ((e_2 = void 0), __values(list.tokens)), _d = _c.next(); !_d.done; _d = _c.next()) { - var tokenInfo = _d.value - if (tokenInfo.chainId === chainId && tokenFilter(tokenInfo)) { - var wrapped = new WrappedTokenInfo(tokenInfo, list) - if (!(wrapped.address in activeTokens) && !addressSet[wrapped.address]) { - addressSet[wrapped.address] = true - result.push(wrapped) - if (result.length >= minResults) return result - } - } - } - } catch (e_2_1) { - e_2 = { error: e_2_1 } - } finally { - try { - if (_d && !_d.done && (_b = _c.return)) _b.call(_c) - } finally { - if (e_2) throw e_2.error - } - } - } - } catch (e_1_1) { - e_1 = { error: e_1_1 } - } finally { - try { - if (inactiveUrls_1_1 && !inactiveUrls_1_1.done && (_a = inactiveUrls_1.return)) _a.call(inactiveUrls_1) - } finally { - if (e_1) throw e_1.error - } - } - return result - }, - [activeTokens, chainId, inactiveUrls, lists, minResults, search] - ) -} -function useIsTokenActive(token) { - var activeTokens = useAllTokens() - if (!activeTokens || !token) { - return false - } - return !!activeTokens[token.address] -} -// Check if currency is included in custom list from user storage -function useIsUserAddedToken(currency) { - var userAddedTokens = useUserAddedTokens() - if (!currency) { - return false - } - return !!userAddedTokens.find(function (token) { - return currency.equals(token) - }) -} -// undefined if invalid or does not exist -// null if loading or null was passed -// otherwise returns the token -function useToken(tokenAddress) { - var tokens = useAllTokens() - return useTokenFromMap(tokens, tokenAddress) -} -function useCurrency(currencyId) { - var tokens = useAllTokens() - return useCurrencyFromMap(tokens, currencyId) -} - -function serializeToken(token) { - return { - chainId: token.chainId, - address: token.address, - decimals: token.decimals, - symbol: token.symbol, - name: token.name, - } -} -function deserializeToken(serializedToken) { - return new sdkCore.Token( - serializedToken.chainId, - serializedToken.address, - serializedToken.decimals, - serializedToken.symbol, - serializedToken.name - ) -} -function useIsDarkMode() { - var _a = useAppSelector(function (_a) { - var _b = _a.user, - matchesDarkMode = _b.matchesDarkMode, - userDarkMode = _b.userDarkMode - return { - userDarkMode, - matchesDarkMode, - } - }, reactRedux.shallowEqual), - userDarkMode = _a.userDarkMode, - matchesDarkMode = _a.matchesDarkMode - return userDarkMode === null ? matchesDarkMode : userDarkMode -} -function useDarkModeManager() { - var dispatch = useAppDispatch() - var darkMode = useIsDarkMode() - var toggleSetDarkMode = React.useCallback( - function () { - dispatch(updateUserDarkMode({ userDarkMode: !darkMode })) - }, - [darkMode, dispatch] - ) - return [darkMode, toggleSetDarkMode] -} -function useUserLocale() { - return useAppSelector(function (state) { - return state.user.userLocale - }) -} -function useUserLocaleManager() { - var dispatch = useAppDispatch() - var locale = useUserLocale() - var setLocale = React.useCallback( - function (newLocale) { - dispatch(updateUserLocale({ userLocale: newLocale })) - }, - [dispatch] - ) - return [locale, setLocale] -} -function useIsExpertMode() { - return useAppSelector(function (state) { - return state.user.userExpertMode - }) -} -function useExpertModeManager() { - var dispatch = useAppDispatch() - var expertMode = useIsExpertMode() - var toggleSetExpertMode = React.useCallback( - function () { - dispatch(updateUserExpertMode({ userExpertMode: !expertMode })) - }, - [expertMode, dispatch] - ) - return [expertMode, toggleSetExpertMode] -} -function useShowSurveyPopup() { - var dispatch = useAppDispatch() - var showSurveyPopup = useAppSelector(function (state) { - return state.user.showSurveyPopup - }) - var toggleShowSurveyPopup = React.useCallback( - function (showPopup) { - dispatch(updateShowSurveyPopup({ showSurveyPopup: showPopup })) - }, - [dispatch] - ) - return [showSurveyPopup, toggleShowSurveyPopup] -} -function useClientSideRouter() { - var dispatch = useAppDispatch() - var clientSideRouter = useAppSelector(function (state) { - return Boolean(state.user.userClientSideRouter) - }) - var setClientSideRouter = React.useCallback( - function (newClientSideRouter) { - dispatch(updateUserClientSideRouter({ userClientSideRouter: newClientSideRouter })) - }, - [dispatch] - ) - return [clientSideRouter, setClientSideRouter] -} -function useSetUserSlippageTolerance() { - var dispatch = useAppDispatch() - return React.useCallback( - function (userSlippageTolerance) { - var value - try { - value = - userSlippageTolerance === 'auto' - ? 'auto' - : JSBI__default['default'].toNumber(userSlippageTolerance.multiply(10000).quotient) - } catch (error) { - value = 'auto' - } - dispatch( - updateUserSlippageTolerance({ - userSlippageTolerance: value, - }) - ) - }, - [dispatch] - ) -} -/** - * Return the user's slippage tolerance, from the redux store, and a function to update the slippage tolerance - */ -function useUserSlippageTolerance() { - var userSlippageTolerance = useAppSelector(function (state) { - return state.user.userSlippageTolerance - }) - return React.useMemo( - function () { - return userSlippageTolerance === 'auto' ? 'auto' : new sdkCore.Percent(userSlippageTolerance, 10000) - }, - [userSlippageTolerance] - ) -} -/** - * Same as above but replaces the auto with a default value - * @param defaultSlippageTolerance the default value to replace auto with - */ -function useUserSlippageToleranceWithDefault(defaultSlippageTolerance) { - var allowedSlippage = useUserSlippageTolerance() - return React.useMemo( - function () { - return allowedSlippage === 'auto' ? defaultSlippageTolerance : allowedSlippage - }, - [allowedSlippage, defaultSlippageTolerance] - ) -} -function useUserTransactionTTL() { - var chainId = useActiveWeb3React().chainId - var dispatch = useAppDispatch() - var userDeadline = useAppSelector(function (state) { - return state.user.userDeadline - }) - var onL2 = Boolean(chainId && L2_CHAIN_IDS.includes(chainId)) - var deadline = onL2 ? L2_DEADLINE_FROM_NOW : userDeadline - var setUserDeadline = React.useCallback( - function (userDeadline) { - dispatch(updateUserDeadline({ userDeadline })) - }, - [dispatch] - ) - return [deadline, setUserDeadline] -} -function useAddUserToken() { - var dispatch = useAppDispatch() - return React.useCallback( - function (token) { - dispatch(addSerializedToken({ serializedToken: serializeToken(token) })) - }, - [dispatch] - ) -} -function useRemoveUserAddedToken() { - var dispatch = useAppDispatch() - return React.useCallback( - function (chainId, address) { - dispatch(removeSerializedToken({ chainId, address })) - }, - [dispatch] - ) -} -function useUserAddedTokens() { - var chainId = useActiveWeb3React().chainId - var serializedTokensMap = useAppSelector(function (_a) { - var tokens = _a.user.tokens - return tokens - }) - return React.useMemo( - function () { - if (!chainId) return [] - var tokenMap = ( - serializedTokensMap === null || serializedTokensMap === void 0 ? void 0 : serializedTokensMap[chainId] - ) - ? Object.values(serializedTokensMap[chainId]).map(deserializeToken) - : [] - return tokenMap - }, - [serializedTokensMap, chainId] - ) -} -function useURLWarningVisible() { - return useAppSelector(function (state) { - return state.user.URLWarningVisible - }) -} - -var EXPLORER_HOSTNAMES = { - 'etherscan.io': true, - 'ropsten.etherscan.io': true, - 'rinkeby.etherscan.io': true, - 'kovan.etherscan.io': true, - 'goerli.etherscan.io': true, - 'optimistic.etherscan.io': true, - 'kovan-optimistic.etherscan.io': true, - 'rinkeby-explorer.arbitrum.io': true, - 'arbiscan.io': true, -} -/** - * Returns the anonymized version of the given href, i.e. one that does not leak user information - * @param href the link to anonymize, i.e. remove any personal data from - * @return string anonymized version of the given href - */ -function anonymizeLink(href) { - try { - var url = new URL(href) - if (EXPLORER_HOSTNAMES[url.hostname]) { - var pathPieces = url.pathname.split('/') - var anonymizedPath = pathPieces - .map(function (pc) { - return /0x[a-fA-F0-9]+/.test(pc) ? '***' : pc - }) - .join('/') - return url.protocol + '//' + url.hostname + anonymizedPath - } - return href - } catch (error) { - return href - } -} - -var ButtonText = styled__default['default'].button( - templateObject_1$1l || - (templateObject_1$1l = __makeTemplateObject( - [ - '\n outline: none;\n border: none;\n font-size: inherit;\n padding: 0;\n margin: 0;\n background: none;\n cursor: pointer;\n\n :hover {\n opacity: 0.7;\n }\n\n :focus {\n text-decoration: underline;\n }\n', - ], - [ - '\n outline: none;\n border: none;\n font-size: inherit;\n padding: 0;\n margin: 0;\n background: none;\n cursor: pointer;\n\n :hover {\n opacity: 0.7;\n }\n\n :focus {\n text-decoration: underline;\n }\n', - ] - )) -) -var CloseIcon$2 = styled__default['default'](reactFeather.X)( - templateObject_2$$ || - (templateObject_2$$ = __makeTemplateObject( - ['\n cursor: pointer;\n'], - [ - '\n cursor: pointer;\n', - // for wrapper react feather icons - ] - )) -) -// for wrapper react feather icons -var IconWrapper$4 = styled__default['default'].div( - templateObject_3$S || - (templateObject_3$S = __makeTemplateObject( - [ - '\n display: flex;\n align-items: center;\n justify-content: center;\n width: ', - ';\n height: ', - ';\n margin-right: ', - ';\n margin-left: ', - ';\n & > * {\n stroke: ', - ';\n }\n', - ], - [ - '\n display: flex;\n align-items: center;\n justify-content: center;\n width: ', - ';\n height: ', - ';\n margin-right: ', - ';\n margin-left: ', - ';\n & > * {\n stroke: ', - ';\n }\n', - // A button that triggers some onClick result, but looks like a link. - ] - )), - function (_a) { - var size = _a.size - return size !== null && size !== void 0 ? size : '20px' - }, - function (_a) { - var size = _a.size - return size !== null && size !== void 0 ? size : '20px' - }, - function (_a) { - var marginRight = _a.marginRight - return marginRight !== null && marginRight !== void 0 ? marginRight : 0 - }, - function (_a) { - var marginLeft = _a.marginLeft - return marginLeft !== null && marginLeft !== void 0 ? marginLeft : 0 - }, - function (_a) { - var theme = _a.theme, - stroke = _a.stroke - return stroke !== null && stroke !== void 0 ? stroke : theme.blue1 - } -) -// A button that triggers some onClick result, but looks like a link. -var LinkStyledButton = styled__default['default'].button( - templateObject_4$G || - (templateObject_4$G = __makeTemplateObject( - [ - '\n border: none;\n text-decoration: none;\n background: none;\n\n cursor: ', - ';\n color: ', - ';\n font-weight: 500;\n\n :hover {\n text-decoration: ', - ';\n }\n\n :focus {\n outline: none;\n text-decoration: ', - ';\n }\n\n :active {\n text-decoration: none;\n }\n', - ], - [ - '\n border: none;\n text-decoration: none;\n background: none;\n\n cursor: ', - ';\n color: ', - ';\n font-weight: 500;\n\n :hover {\n text-decoration: ', - ';\n }\n\n :focus {\n outline: none;\n text-decoration: ', - ';\n }\n\n :active {\n text-decoration: none;\n }\n', - // An internal link from the react-router-dom library that is correctly styled - ] - )), - function (_a) { - var disabled = _a.disabled - return disabled ? 'default' : 'pointer' - }, - function (_a) { - var theme = _a.theme, - disabled = _a.disabled - return disabled ? theme.text2 : theme.primary1 - }, - function (_a) { - var disabled = _a.disabled - return disabled ? null : 'underline' - }, - function (_a) { - var disabled = _a.disabled - return disabled ? null : 'underline' - } -) -// An internal link from the react-router-dom library that is correctly styled -var StyledInternalLink = styled__default['default'](reactRouterDom.Link)( - templateObject_5$x || - (templateObject_5$x = __makeTemplateObject( - [ - '\n text-decoration: none;\n cursor: pointer;\n color: ', - ';\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 text-decoration: none;\n cursor: pointer;\n color: ', - ';\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', - ] - )), - function (_a) { - var theme = _a.theme - return theme.primary1 - } -) -var StyledLink = styled__default['default'].a( - templateObject_6$o || - (templateObject_6$o = __makeTemplateObject( - [ - '\n text-decoration: none;\n cursor: pointer;\n color: ', - ';\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 text-decoration: none;\n cursor: pointer;\n color: ', - ';\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', - ] - )), - function (_a) { - var theme = _a.theme - return theme.primary1 - } -) -var LinkIconWrapper = styled__default['default'].a( - templateObject_7$k || - (templateObject_7$k = __makeTemplateObject( - [ - '\n text-decoration: none;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n text-decoration: none;\n opacity: 0.7;\n }\n\n :focus {\n outline: none;\n text-decoration: none;\n }\n\n :active {\n text-decoration: none;\n }\n', - ], - [ - '\n text-decoration: none;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n text-decoration: none;\n opacity: 0.7;\n }\n\n :focus {\n outline: none;\n text-decoration: none;\n }\n\n :active {\n text-decoration: none;\n }\n', - ] - )) -) -var LinkIcon = styled__default['default'](reactFeather.ExternalLink)( - templateObject_8$h || - (templateObject_8$h = __makeTemplateObject( - ['\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ', ';\n'], - ['\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ', ';\n'] - )), - function (_a) { - var theme = _a.theme - return theme.blue1 - } -) -var TrashIcon = styled__default['default'](reactFeather.Trash)( - templateObject_9$g || - (templateObject_9$g = __makeTemplateObject( - [ - '\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ', - ';\n\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n opacity: 0.7;\n }\n', - ], - [ - '\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ', - ';\n\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n opacity: 0.7;\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.text3 - } -) -var rotateImg = styled.keyframes( - templateObject_10$c || - (templateObject_10$c = __makeTemplateObject( - [ - '\n 0% {\n transform: perspective(1000px) rotateY(0deg);\n }\n\n 100% {\n transform: perspective(1000px) rotateY(360deg);\n }\n', - ], - [ - '\n 0% {\n transform: perspective(1000px) rotateY(0deg);\n }\n\n 100% {\n transform: perspective(1000px) rotateY(360deg);\n }\n', - ] - )) -) -var UniTokenAnimated = styled__default['default'].img( - templateObject_11$a || - (templateObject_11$a = __makeTemplateObject( - [ - '\n animation: ', - ' 5s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n padding: 2rem 0 0 0;\n filter: drop-shadow(0px 2px 4px rgba(0, 0, 0, 0.15));\n', - ], - [ - '\n animation: ', - ' 5s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n padding: 2rem 0 0 0;\n filter: drop-shadow(0px 2px 4px rgba(0, 0, 0, 0.15));\n', - ] - )), - rotateImg -) -function handleClickExternalLink(event) { - var _a = event.currentTarget, - target = _a.target, - href = _a.href - var anonymizedHref = anonymizeLink(href) - // don't prevent default, don't redirect if it's a new tab - if (target === '_blank' || event.ctrlKey || event.metaKey) { - ReactGA__default['default'].outboundLink({ label: anonymizedHref }, function () { - console.debug('Fired outbound link event', anonymizedHref) - }) - } else { - event.preventDefault() - // send a ReactGA event and then trigger a location change - ReactGA__default['default'].outboundLink({ label: anonymizedHref }, function () { - window.location.href = anonymizedHref - }) - } -} -/** - * Outbound link that handles firing google analytics events - */ -function ExternalLink(_a) { - var _b = _a.target, - target = _b === void 0 ? '_blank' : _b, - href = _a.href, - _c = _a.rel, - rel = _c === void 0 ? 'noopener noreferrer' : _c, - rest = __rest(_a, ['target', 'href', 'rel']) - return jsxRuntime.jsx(StyledLink, __assign({ target, rel, href, onClick: handleClickExternalLink }, rest), void 0) -} -function ExternalLinkIcon(_a) { - var _b = _a.target, - target = _b === void 0 ? '_blank' : _b, - href = _a.href, - _c = _a.rel, - rel = _c === void 0 ? 'noopener noreferrer' : _c, - rest = __rest(_a, ['target', 'href', 'rel']) - return jsxRuntime.jsx( - LinkIconWrapper, - __assign({ target, rel, href, onClick: handleClickExternalLink }, rest, { - children: jsxRuntime.jsx(LinkIcon, {}, void 0), - }), - void 0 - ) -} -var rotate$1 = styled.keyframes( - templateObject_12$a || - (templateObject_12$a = __makeTemplateObject( - ['\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n'], - ['\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n'] - )) -) -var Spinner$2 = styled__default['default'].img( - templateObject_13$6 || - (templateObject_13$6 = __makeTemplateObject( - ['\n animation: 2s ', ' linear infinite;\n width: 16px;\n height: 16px;\n'], - ['\n animation: 2s ', ' linear infinite;\n width: 16px;\n height: 16px;\n'] - )), - rotate$1 -) -styled__default['default'](StyledInternalLink)( - templateObject_14$6 || (templateObject_14$6 = __makeTemplateObject(['\n color: ', ';\n'], ['\n color: ', ';\n'])), - function (_a) { - var theme = _a.theme - return theme.text1 - } -) -var CustomLightSpinner = styled__default['default'](Spinner$2)( - templateObject_15$4 || - (templateObject_15$4 = __makeTemplateObject( - ['\n height: ', ';\n width: ', ';\n'], - ['\n height: ', ';\n width: ', ';\n'] - )), - function (_a) { - var size = _a.size - return size - }, - function (_a) { - var size = _a.size - return size - } -) -var HideSmall = styled__default['default'].span( - templateObject_17$2 || (templateObject_17$2 = __makeTemplateObject(['\n ', ';\n'], ['\n ', ';\n'])), - function (_a) { - var theme = _a.theme - return theme.mediaWidth.upToSmall( - templateObject_16$3 || - (templateObject_16$3 = __makeTemplateObject(['\n display: none;\n '], ['\n display: none;\n '])) - ) - } -) -styled__default['default'].span( - templateObject_19$2 || (templateObject_19$2 = __makeTemplateObject(['\n ', ';\n'], ['\n ', ';\n'])), - function (_a) { - var theme = _a.theme - return theme.mediaWidth.upToExtraSmall( - templateObject_18$2 || - (templateObject_18$2 = __makeTemplateObject(['\n display: none;\n '], ['\n display: none;\n '])) - ) - } -) -styled__default['default'].span( - templateObject_21$1 || - (templateObject_21$1 = __makeTemplateObject(['\n display: none;\n ', ';\n'], ['\n display: none;\n ', ';\n'])), - function (_a) { - var theme = _a.theme - return theme.mediaWidth.upToSmall( - templateObject_20$1 || - (templateObject_20$1 = __makeTemplateObject(['\n display: block;\n '], ['\n display: block;\n '])) - ) - } -) -var Separator$1 = styled__default['default'].div( - templateObject_22 || - (templateObject_22 = __makeTemplateObject( - ['\n width: 100%;\n height: 1px;\n background-color: ', ';\n'], - ['\n width: 100%;\n height: 1px;\n background-color: ', ';\n'] - )), - function (_a) { - var theme = _a.theme - return theme.bg2 - } -) -var templateObject_1$1l, - templateObject_2$$, - templateObject_3$S, - templateObject_4$G, - templateObject_5$x, - templateObject_6$o, - templateObject_7$k, - templateObject_8$h, - templateObject_9$g, - templateObject_10$c, - templateObject_11$a, - templateObject_12$a, - templateObject_13$6, - templateObject_14$6, - templateObject_15$4, - templateObject_16$3, - templateObject_17$2, - templateObject_18$2, - templateObject_19$2, - templateObject_20$1, - templateObject_21$1, - templateObject_22 - -var MEDIA_WIDTHS = { - upToExtraSmall: 500, - upToSmall: 720, - upToMedium: 960, - upToLarge: 1280, -} -// Migrating to a standard z-index system https://getbootstrap.com/docs/5.0/layout/z-index/ -// Please avoid using deprecated numbers -var Z_INDEX -;(function (Z_INDEX) { - Z_INDEX[(Z_INDEX['deprecated_zero'] = 0)] = 'deprecated_zero' - Z_INDEX[(Z_INDEX['deprecated_content'] = 1)] = 'deprecated_content' - Z_INDEX[(Z_INDEX['dropdown'] = 1000)] = 'dropdown' - Z_INDEX[(Z_INDEX['sticky'] = 1020)] = 'sticky' - Z_INDEX[(Z_INDEX['fixed'] = 1030)] = 'fixed' - Z_INDEX[(Z_INDEX['modalBackdrop'] = 1040)] = 'modalBackdrop' - Z_INDEX[(Z_INDEX['offcanvas'] = 1050)] = 'offcanvas' - Z_INDEX[(Z_INDEX['modal'] = 1060)] = 'modal' - Z_INDEX[(Z_INDEX['popover'] = 1070)] = 'popover' - Z_INDEX[(Z_INDEX['tooltip'] = 1080)] = 'tooltip' -})(Z_INDEX || (Z_INDEX = {})) -var mediaWidthTemplates = Object.keys(MEDIA_WIDTHS).reduce(function (accumulator, size) { - accumulator[size] = function (a, b, c) { - return styled.css( - templateObject_1$1k || - (templateObject_1$1k = __makeTemplateObject( - ['\n @media (max-width: ', 'px) {\n ', '\n }\n '], - ['\n @media (max-width: ', 'px) {\n ', '\n }\n '] - )), - MEDIA_WIDTHS[size], - styled.css(a, b, c) - ) - } - return accumulator -}, {}) -var white = '#FFFFFF' -var black = '#000000' -function colors$2(darkMode) { - return { - darkMode, - // base - white, - black, - // text - text1: darkMode ? '#FFFFFF' : '#000000', - text2: darkMode ? '#C3C5CB' : '#565A69', - text3: darkMode ? '#8F96AC' : '#6E727D', - text4: darkMode ? '#B2B9D2' : '#C3C5CB', - text5: darkMode ? '#2C2F36' : '#EDEEF2', - // backgrounds / greys - bg0: darkMode ? '#191B1F' : '#FFF', - bg1: darkMode ? '#212429' : '#F7F8FA', - bg2: darkMode ? '#2C2F36' : '#EDEEF2', - bg3: darkMode ? '#40444F' : '#CED0D9', - bg4: darkMode ? '#565A69' : '#888D9B', - bg5: darkMode ? '#6C7284' : '#888D9B', - bg6: darkMode ? '#1A2028' : '#6C7284', - //specialty colors - modalBG: darkMode ? 'rgba(0,0,0,.425)' : 'rgba(0,0,0,0.3)', - advancedBG: darkMode ? 'rgba(0,0,0,0.1)' : 'rgba(255,255,255,0.6)', - //primary colors - primary1: darkMode ? '#2172E5' : '#E8006F', - primary2: darkMode ? '#3680E7' : '#FF8CC3', - primary3: darkMode ? '#4D8FEA' : '#FF99C9', - primary4: darkMode ? '#376bad70' : '#F6DDE8', - primary5: darkMode ? '#153d6f70' : '#FDEAF1', - // color text - primaryText1: darkMode ? '#5090ea' : '#D50066', - // secondary colors - secondary1: darkMode ? '#2172E5' : '#E8006F', - secondary2: darkMode ? '#17000b26' : '#F6DDE8', - secondary3: darkMode ? '#17000b26' : '#FDEAF1', - // other - red1: darkMode ? '#FF4343' : '#DA2D2B', - red2: darkMode ? '#F82D3A' : '#DF1F38', - red3: '#D60000', - green1: darkMode ? '#27AE60' : '#007D35', - yellow1: '#E3A507', - yellow2: '#FF8F00', - yellow3: '#F3B71E', - blue1: darkMode ? '#2172E5' : '#0068FC', - blue2: darkMode ? '#5199FF' : '#0068FC', - error: darkMode ? '#FD4040' : '#DF1F38', - success: darkMode ? '#27AE60' : '#007D35', - warning: '#FF8F00', - // dont wanna forget these blue yet - blue4: darkMode ? '#153d6f70' : '#C4D9F8', - // blue5: darkMode ? '#153d6f70' : '#EBF4FF', - } -} -function theme(darkMode) { - return __assign(__assign({}, colors$2(darkMode)), { - grids: { - sm: 8, - md: 12, - lg: 24, - }, - //shadows - shadow1: darkMode ? '#000' : '#2F80ED', - // media queries - mediaWidth: mediaWidthTemplates, - // css snippets - flexColumnNoWrap: styled.css( - templateObject_2$_ || - (templateObject_2$_ = __makeTemplateObject( - ['\n display: flex;\n flex-flow: column nowrap;\n '], - ['\n display: flex;\n flex-flow: column nowrap;\n '] - )) - ), - flexRowNoWrap: styled.css( - templateObject_3$R || - (templateObject_3$R = __makeTemplateObject( - ['\n display: flex;\n flex-flow: row nowrap;\n '], - ['\n display: flex;\n flex-flow: row nowrap;\n '] - )) - ), - }) -} -function ThemeProvider(_a) { - var children = _a.children - var darkMode = useIsDarkMode() - var themeObject = React.useMemo( - function () { - return theme(darkMode) - }, - [darkMode] - ) - return jsxRuntime.jsx(styled.ThemeProvider, __assign({ theme: themeObject }, { children }), void 0) -} -var TextWrapper$1 = styled__default['default'](rebass.Text)( - templateObject_4$F || - (templateObject_4$F = __makeTemplateObject( - ['\n color: ', ';\n'], - [ - '\n color: ', - ';\n', - /** - * Preset styles of the Rebass Text component - */ - ] - )), - function (_a) { - var color = _a.color, - theme = _a.theme - return theme[color] - } -) -/** - * Preset styles of the Rebass Text component - */ -var ThemedText = { - Main(props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text2' }, props), void 0) - }, - Link(props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'primary1' }, props), void 0) - }, - Label(props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 600, color: 'text1' }, props), void 0) - }, - Black(props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text1' }, props), void 0) - }, - White(props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'white' }, props), void 0) - }, - Body(props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 400, fontSize: 16, color: 'text1' }, props), void 0) - }, - LargeHeader(props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 600, fontSize: 24 }, props), void 0) - }, - MediumHeader(props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, fontSize: 20 }, props), void 0) - }, - SubHeader(props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 400, fontSize: 14 }, props), void 0) - }, - Small(props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, fontSize: 11 }, props), void 0) - }, - Blue(props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'blue1' }, props), void 0) - }, - Yellow(props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'yellow3' }, props), void 0) - }, - DarkGray(props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text3' }, props), void 0) - }, - Gray(props) { - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'bg3' }, props), void 0) - }, - Italic(props) { - return jsxRuntime.jsx( - TextWrapper$1, - __assign({ fontWeight: 500, fontSize: 12, fontStyle: 'italic', color: 'text2' }, props), - void 0 - ) - }, - Error(_a) { - var error = _a.error, - props = __rest(_a, ['error']) - return jsxRuntime.jsx(TextWrapper$1, __assign({ fontWeight: 500, color: error ? 'red1' : 'text2' }, props), void 0) - }, -} -var ThemedGlobalStyle = styled.createGlobalStyle( - templateObject_5$w || - (templateObject_5$w = __makeTemplateObject( - ['\nhtml {\n color: ', ';\n background-color: ', ' !important;\n}\n\na {\n color: ', '; \n}\n'], - ['\nhtml {\n color: ', ';\n background-color: ', ' !important;\n}\n\na {\n color: ', '; \n}\n'] - )), - function (_a) { - var theme = _a.theme - return theme.text1 - }, - function (_a) { - var theme = _a.theme - return theme.bg1 - }, - function (_a) { - var theme = _a.theme - return theme.blue1 - } -) -var templateObject_1$1k, templateObject_2$_, templateObject_3$R, templateObject_4$F, templateObject_5$w - -var _a$b -var ETHERSCAN_PREFIXES = - ((_a$b = {}), - (_a$b[SupportedChainId.MAINNET] = 'https://etherscan.io'), - (_a$b[SupportedChainId.ROPSTEN] = 'https://ropsten.etherscan.io'), - (_a$b[SupportedChainId.RINKEBY] = 'https://rinkeby.etherscan.io'), - (_a$b[SupportedChainId.GOERLI] = 'https://goerli.etherscan.io'), - (_a$b[SupportedChainId.KOVAN] = 'https://kovan.etherscan.io'), - (_a$b[SupportedChainId.OPTIMISM] = 'https://optimistic.etherscan.io'), - (_a$b[SupportedChainId.OPTIMISTIC_KOVAN] = 'https://kovan-optimistic.etherscan.io'), - (_a$b[SupportedChainId.POLYGON_MUMBAI] = 'https://mumbai.polygonscan.com'), - (_a$b[SupportedChainId.POLYGON] = 'https://polygonscan.com'), - _a$b) -var ExplorerDataType -;(function (ExplorerDataType) { - ExplorerDataType['TRANSACTION'] = 'transaction' - ExplorerDataType['TOKEN'] = 'token' - ExplorerDataType['ADDRESS'] = 'address' - ExplorerDataType['BLOCK'] = 'block' -})(ExplorerDataType || (ExplorerDataType = {})) -/** - * Return the explorer link for the given data and data type - * @param chainId the ID of the chain for which to return the data - * @param data the data to return a link for - * @param type the type of the data - */ -function getExplorerLink(chainId, data, type) { - var _a - if (chainId === SupportedChainId.ARBITRUM_ONE) { - switch (type) { - case ExplorerDataType.TRANSACTION: - return 'https://arbiscan.io/tx/' + data - case ExplorerDataType.ADDRESS: - case ExplorerDataType.TOKEN: - return 'https://arbiscan.io/address/' + data - case ExplorerDataType.BLOCK: - return 'https://arbiscan.io/block/' + data - default: - return 'https://arbiscan.io/' - } - } - if (chainId === SupportedChainId.ARBITRUM_RINKEBY) { - switch (type) { - case ExplorerDataType.TRANSACTION: - return 'https://rinkeby-explorer.arbitrum.io/tx/' + data - case ExplorerDataType.ADDRESS: - case ExplorerDataType.TOKEN: - return 'https://rinkeby-explorer.arbitrum.io/address/' + data - case ExplorerDataType.BLOCK: - return 'https://rinkeby-explorer.arbitrum.io/block/' + data - default: - return 'https://rinkeby-explorer.arbitrum.io/' - } - } - var prefix = (_a = ETHERSCAN_PREFIXES[chainId]) !== null && _a !== void 0 ? _a : 'https://etherscan.io' - switch (type) { - case ExplorerDataType.TRANSACTION: - return prefix + '/tx/' + data - case ExplorerDataType.TOKEN: - return prefix + '/token/' + data - case ExplorerDataType.BLOCK: - if (chainId === SupportedChainId.OPTIMISM || chainId === SupportedChainId.OPTIMISTIC_KOVAN) { - return prefix + '/tx/' + data - } - return prefix + '/block/' + data - case ExplorerDataType.ADDRESS: - return prefix + '/address/' + data - default: - return '' + prefix - } -} - -var Column = styled__default['default'].div( - templateObject_1$1j || - (templateObject_1$1j = __makeTemplateObject( - ['\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n'], - ['\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n'] - )) -) -var ColumnCenter = styled__default['default'](Column)( - templateObject_2$Z || - (templateObject_2$Z = __makeTemplateObject( - ['\n width: 100%;\n align-items: center;\n'], - ['\n width: 100%;\n align-items: center;\n'] - )) -) -var AutoColumn = styled__default['default'].div( - templateObject_3$Q || - (templateObject_3$Q = __makeTemplateObject( - ['\n display: grid;\n grid-auto-rows: auto;\n grid-row-gap: ', ';\n justify-items: ', ';\n'], - ['\n display: grid;\n grid-auto-rows: auto;\n grid-row-gap: ', ';\n justify-items: ', ';\n'] - )), - function (_a) { - var gap = _a.gap - return (gap === 'sm' && '8px') || (gap === 'md' && '12px') || (gap === 'lg' && '24px') || gap - }, - function (_a) { - var justify = _a.justify - return justify && justify - } -) -var templateObject_1$1j, templateObject_2$Z, templateObject_3$Q - -var Row$1 = styled__default['default'](styledComponents.Box)( - templateObject_1$1i || - (templateObject_1$1i = __makeTemplateObject( - [ - '\n width: ', - ';\n display: flex;\n padding: 0;\n align-items: ', - ';\n justify-content: ', - ';\n padding: ', - ';\n border: ', - ';\n border-radius: ', - ';\n', - ], - [ - '\n width: ', - ';\n display: flex;\n padding: 0;\n align-items: ', - ';\n justify-content: ', - ';\n padding: ', - ';\n border: ', - ';\n border-radius: ', - ';\n', - ] - )), - function (_a) { - var width = _a.width - return width !== null && width !== void 0 ? width : '100%' - }, - function (_a) { - var align = _a.align - return align !== null && align !== void 0 ? align : 'center' - }, - function (_a) { - var justify = _a.justify - return justify !== null && justify !== void 0 ? justify : 'flex-start' - }, - function (_a) { - var padding = _a.padding - return padding - }, - function (_a) { - var border = _a.border - return border - }, - function (_a) { - var borderRadius = _a.borderRadius - return borderRadius - } -) -var RowBetween = styled__default['default'](Row$1)( - templateObject_2$Y || - (templateObject_2$Y = __makeTemplateObject( - ['\n justify-content: space-between;\n'], - ['\n justify-content: space-between;\n'] - )) -) -styled__default['default'].div( - templateObject_3$P || - (templateObject_3$P = __makeTemplateObject( - ['\n display: flex;\n align-items: flex-end;\n'], - ['\n display: flex;\n align-items: flex-end;\n'] - )) -) -var AutoRow = styled__default['default'](Row$1)( - templateObject_4$E || - (templateObject_4$E = __makeTemplateObject( - [ - '\n flex-wrap: wrap;\n margin: ', - ';\n justify-content: ', - ';\n\n & > * {\n margin: ', - ' !important;\n }\n', - ], - [ - '\n flex-wrap: wrap;\n margin: ', - ';\n justify-content: ', - ';\n\n & > * {\n margin: ', - ' !important;\n }\n', - ] - )), - function (_a) { - var gap = _a.gap - return gap && '-' + gap - }, - function (_a) { - var justify = _a.justify - return justify && justify - }, - function (_a) { - var gap = _a.gap - return gap - } -) -var RowFixed = styled__default['default'](Row$1)( - templateObject_5$v || - (templateObject_5$v = __makeTemplateObject( - ['\n width: fit-content;\n margin: ', ';\n'], - ['\n width: fit-content;\n margin: ', ';\n'] - )), - function (_a) { - var gap = _a.gap - return gap && '-' + gap - } -) -var templateObject_1$1i, templateObject_2$Y, templateObject_3$P, templateObject_4$E, templateObject_5$v - -var InputPanel$1 = styled__default['default'].div( - templateObject_1$1h || - (templateObject_1$1h = __makeTemplateObject( - [ - '\n ', - '\n position: relative;\n border-radius: 1.25rem;\n background-color: ', - ';\n z-index: 1;\n width: 100%;\n', - ], - [ - '\n ', - '\n position: relative;\n border-radius: 1.25rem;\n background-color: ', - ';\n z-index: 1;\n width: 100%;\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.flexColumnNoWrap - }, - function (_a) { - var theme = _a.theme - return theme.bg1 - } -) -var ContainerRow = styled__default['default'].div( - templateObject_2$X || - (templateObject_2$X = __makeTemplateObject( - [ - '\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 1.25rem;\n border: 1px solid ', - ';\n transition: border-color 300ms ', - ',\n color 500ms ', - ';\n background-color: ', - ';\n', - ], - [ - '\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 1.25rem;\n border: 1px solid ', - ';\n transition: border-color 300ms ', - ',\n color 500ms ', - ';\n background-color: ', - ';\n', - ] - )), - function (_a) { - var error = _a.error, - theme = _a.theme - return error ? theme.red1 : theme.bg2 - }, - function (_a) { - var error = _a.error - return error ? 'step-end' : 'step-start' - }, - function (_a) { - var error = _a.error - return error ? 'step-end' : 'step-start' - }, - function (_a) { - var theme = _a.theme - return theme.bg1 - } -) -var InputContainer = styled__default['default'].div( - templateObject_3$O || - (templateObject_3$O = __makeTemplateObject( - ['\n flex: 1;\n padding: 1rem;\n'], - ['\n flex: 1;\n padding: 1rem;\n'] - )) -) -var Input$2 = styled__default['default'].input( - templateObject_4$D || - (templateObject_4$D = __makeTemplateObject( - [ - '\n font-size: 1.25rem;\n outline: none;\n border: none;\n flex: 1 1 auto;\n width: 0;\n background-color: ', - ';\n transition: color 300ms ', - ';\n color: ', - ';\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 500;\n width: 100%;\n ::placeholder {\n color: ', - ';\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: ', - ';\n }\n', - ], - [ - '\n font-size: 1.25rem;\n outline: none;\n border: none;\n flex: 1 1 auto;\n width: 0;\n background-color: ', - ';\n transition: color 300ms ', - ';\n color: ', - ';\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 500;\n width: 100%;\n ::placeholder {\n color: ', - ';\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: ', - ';\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.bg1 - }, - function (_a) { - var error = _a.error - return error ? 'step-end' : 'step-start' - }, - function (_a) { - var error = _a.error, - theme = _a.theme - return error ? theme.red1 : theme.text1 - }, - function (_a) { - var theme = _a.theme - return theme.text4 - }, - function (_a) { - var theme = _a.theme - return theme.text4 - } -) -function AddressInputPanel(_a) { - var id = _a.id, - _b = _a.className, - className = _b === void 0 ? 'recipient-address-input' : _b, - label = _a.label, - placeholder = _a.placeholder, - value = _a.value, - onChange = _a.onChange - var chainId = useActiveWeb3React().chainId - var theme = React.useContext(styled.ThemeContext) - var _c = useENS(value), - address = _c.address, - loading = _c.loading, - name = _c.name - var handleInput = React.useCallback( - function (event) { - var input = event.target.value - var withoutSpaces = input.replace(/\s+/g, '') - onChange(withoutSpaces) - }, - [onChange] - ) - var error = Boolean(value.length > 0 && !loading && !address) - return jsxRuntime.jsx( - InputPanel$1, - __assign( - { id }, - { - children: jsxRuntime.jsx( - ContainerRow, - __assign( - { error }, - { - children: jsxRuntime.jsx( - InputContainer, - { - children: jsxRuntime.jsxs( - AutoColumn, - __assign( - { gap: 'md' }, - { - children: [ - jsxRuntime.jsxs( - RowBetween, - { - children: [ - jsxRuntime.jsx( - ThemedText.Black, - __assign( - { color: theme.text2, fontWeight: 500, fontSize: 14 }, - { - children: - label !== null && label !== void 0 - ? label - : jsxRuntime.jsx(macro.Trans, { children: 'Recipient' }, void 0), - } - ), - void 0 - ), - address && - chainId && - jsxRuntime.jsx( - ExternalLink, - __assign( - { - href: getExplorerLink( - chainId, - name !== null && name !== void 0 ? name : address, - ExplorerDataType.ADDRESS - ), - style: { fontSize: '14px' }, - }, - { - children: jsxRuntime.jsx( - macro.Trans, - { children: '(View on Explorer)' }, - void 0 - ), - } - ), - void 0 - ), - ], - }, - void 0 - ), - jsxRuntime.jsx( - Input$2, - { - className, - type: 'text', - autoComplete: 'off', - autoCorrect: 'off', - autoCapitalize: 'off', - spellCheck: 'false', - placeholder: - placeholder !== null && placeholder !== void 0 - ? placeholder - : macro.t( - templateObject_5$u || - (templateObject_5$u = __makeTemplateObject( - ['Wallet Address or ENS name'], - ['Wallet Address or ENS name'] - )) - ), - error, - pattern: '^(0x[a-fA-F0-9]{40})$', - onChange: handleInput, - value, - }, - void 0 - ), - ], - } - ), - void 0 - ), - }, - void 0 - ), - } - ), - void 0 - ), - } - ), - void 0 - ) -} -var templateObject_1$1h, templateObject_2$X, templateObject_3$O, templateObject_4$D, templateObject_5$u - -function useTheme() { - return React.useContext(styled.ThemeContext) -} - -var BaseButton = styled__default['default'](styledComponents.Button)( - templateObject_1$1g || - (templateObject_1$1g = __makeTemplateObject( - [ - '\n padding: ', - ';\n width: ', - ';\n font-weight: 500;\n text-align: center;\n border-radius: ', - ';\n outline: none;\n border: 1px solid transparent;\n color: ', - ';\n text-decoration: none;\n display: flex;\n justify-content: center;\n flex-wrap: nowrap;\n align-items: center;\n cursor: pointer;\n position: relative;\n z-index: 1;\n &:disabled {\n opacity: 50%;\n cursor: auto;\n pointer-events: none;\n }\n\n will-change: transform;\n transition: transform 450ms ease;\n transform: perspective(1px) translateZ(0);\n\n > * {\n user-select: none;\n }\n\n > a {\n text-decoration: none;\n }\n', - ], - [ - '\n padding: ', - ';\n width: ', - ';\n font-weight: 500;\n text-align: center;\n border-radius: ', - ';\n outline: none;\n border: 1px solid transparent;\n color: ', - ';\n text-decoration: none;\n display: flex;\n justify-content: center;\n flex-wrap: nowrap;\n align-items: center;\n cursor: pointer;\n position: relative;\n z-index: 1;\n &:disabled {\n opacity: 50%;\n cursor: auto;\n pointer-events: none;\n }\n\n will-change: transform;\n transition: transform 450ms ease;\n transform: perspective(1px) translateZ(0);\n\n > * {\n user-select: none;\n }\n\n > a {\n text-decoration: none;\n }\n', - ] - )), - function (_a) { - var padding = _a.padding - return padding !== null && padding !== void 0 ? padding : '16px' - }, - function (_a) { - var width = _a.width - return width !== null && width !== void 0 ? width : '100%' - }, - function (_a) { - var $borderRadius = _a.$borderRadius - return $borderRadius !== null && $borderRadius !== void 0 ? $borderRadius : '20px' - }, - function (_a) { - var theme = _a.theme - return theme.text1 - } -) -var ButtonPrimary = styled__default['default'](BaseButton)( - templateObject_2$W || - (templateObject_2$W = __makeTemplateObject( - [ - '\n background-color: ', - ';\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n &:hover {\n background-color: ', - ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n &:disabled {\n background-color: ', - ';\n color: ', - ';\n cursor: auto;\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n', - ], - [ - '\n background-color: ', - ';\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n &:hover {\n background-color: ', - ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n &:disabled {\n background-color: ', - ';\n color: ', - ';\n cursor: auto;\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.primary1 - }, - function (_a) { - var theme = _a.theme - return polished.darken(0.05, theme.primary1) - }, - function (_a) { - var theme = _a.theme - return polished.darken(0.05, theme.primary1) - }, - function (_a) { - var theme = _a.theme - return polished.darken(0.05, theme.primary1) - }, - function (_a) { - var theme = _a.theme - return polished.darken(0.1, theme.primary1) - }, - function (_a) { - var theme = _a.theme - return polished.darken(0.1, theme.primary1) - }, - function (_a) { - var theme = _a.theme, - altDisabledStyle = _a.altDisabledStyle, - disabled = _a.disabled - return altDisabledStyle ? (disabled ? theme.primary1 : theme.bg2) : theme.bg2 - }, - function (_a) { - var altDisabledStyle = _a.altDisabledStyle, - disabled = _a.disabled, - theme = _a.theme - return altDisabledStyle ? (disabled ? theme.white : theme.text2) : theme.text2 - } -) -var ButtonLight = styled__default['default'](BaseButton)( - templateObject_3$N || - (templateObject_3$N = __makeTemplateObject( - [ - '\n background-color: ', - ';\n color: ', - ';\n font-size: 16px;\n font-weight: 500;\n &:focus {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n &:hover {\n background-color: ', - ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n :disabled {\n opacity: 0.4;\n :hover {\n cursor: auto;\n background-color: ', - ';\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n }\n', - ], - [ - '\n background-color: ', - ';\n color: ', - ';\n font-size: 16px;\n font-weight: 500;\n &:focus {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n &:hover {\n background-color: ', - ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n :disabled {\n opacity: 0.4;\n :hover {\n cursor: auto;\n background-color: ', - ';\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.primary5 - }, - function (_a) { - var theme = _a.theme - return theme.primaryText1 - }, - function (_a) { - var theme = _a.theme, - disabled = _a.disabled - return !disabled && polished.darken(0.03, theme.primary5) - }, - function (_a) { - var theme = _a.theme, - disabled = _a.disabled - return !disabled && polished.darken(0.03, theme.primary5) - }, - function (_a) { - var theme = _a.theme, - disabled = _a.disabled - return !disabled && polished.darken(0.03, theme.primary5) - }, - function (_a) { - var theme = _a.theme, - disabled = _a.disabled - return !disabled && polished.darken(0.05, theme.primary5) - }, - function (_a) { - var theme = _a.theme, - disabled = _a.disabled - return !disabled && polished.darken(0.05, theme.primary5) - }, - function (_a) { - var theme = _a.theme - return theme.primary5 - } -) -var ButtonGray = styled__default['default'](BaseButton)( - templateObject_4$C || - (templateObject_4$C = __makeTemplateObject( - [ - '\n background-color: ', - ';\n color: ', - ';\n font-size: 16px;\n font-weight: 500;\n\n &:hover {\n background-color: ', - ';\n }\n &:active {\n background-color: ', - ';\n }\n', - ], - [ - '\n background-color: ', - ';\n color: ', - ';\n font-size: 16px;\n font-weight: 500;\n\n &:hover {\n background-color: ', - ';\n }\n &:active {\n background-color: ', - ';\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.bg1 - }, - function (_a) { - var theme = _a.theme - return theme.text2 - }, - function (_a) { - var theme = _a.theme, - disabled = _a.disabled - return !disabled && polished.darken(0.05, theme.bg2) - }, - function (_a) { - var theme = _a.theme, - disabled = _a.disabled - return !disabled && polished.darken(0.1, theme.bg2) - } -) -var ButtonSecondary = styled__default['default'](BaseButton)( - templateObject_5$t || - (templateObject_5$t = __makeTemplateObject( - [ - '\n border: 1px solid ', - ';\n color: ', - ';\n background-color: transparent;\n font-size: 16px;\n border-radius: 12px;\n padding: ', - ';\n\n &:focus {\n box-shadow: 0 0 0 1pt ', - ';\n border: 1px solid ', - ';\n }\n &:hover {\n border: 1px solid ', - ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', - ';\n border: 1px solid ', - ';\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n a:hover {\n text-decoration: none;\n }\n', - ], - [ - '\n border: 1px solid ', - ';\n color: ', - ';\n background-color: transparent;\n font-size: 16px;\n border-radius: 12px;\n padding: ', - ';\n\n &:focus {\n box-shadow: 0 0 0 1pt ', - ';\n border: 1px solid ', - ';\n }\n &:hover {\n border: 1px solid ', - ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', - ';\n border: 1px solid ', - ';\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n a:hover {\n text-decoration: none;\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.primary4 - }, - function (_a) { - var theme = _a.theme - return theme.primary1 - }, - function (_a) { - var padding = _a.padding - return padding ? padding : '10px' - }, - function (_a) { - var theme = _a.theme - return theme.primary4 - }, - function (_a) { - var theme = _a.theme - return theme.primary3 - }, - function (_a) { - var theme = _a.theme - return theme.primary3 - }, - function (_a) { - var theme = _a.theme - return theme.primary4 - }, - function (_a) { - var theme = _a.theme - return theme.primary3 - } -) -var ButtonOutlined = styled__default['default'](BaseButton)( - templateObject_6$n || - (templateObject_6$n = __makeTemplateObject( - [ - '\n border: 1px solid ', - ';\n background-color: transparent;\n color: ', - ';\n &:focus {\n box-shadow: 0 0 0 1px ', - ';\n }\n &:hover {\n box-shadow: 0 0 0 1px ', - ';\n }\n &:active {\n box-shadow: 0 0 0 1px ', - ';\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n', - ], - [ - '\n border: 1px solid ', - ';\n background-color: transparent;\n color: ', - ';\n &:focus {\n box-shadow: 0 0 0 1px ', - ';\n }\n &:hover {\n box-shadow: 0 0 0 1px ', - ';\n }\n &:active {\n box-shadow: 0 0 0 1px ', - ';\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.bg2 - }, - function (_a) { - var theme = _a.theme - return theme.text1 - }, - function (_a) { - var theme = _a.theme - return theme.bg4 - }, - function (_a) { - var theme = _a.theme - return theme.bg4 - }, - function (_a) { - var theme = _a.theme - return theme.bg4 - } -) -styled__default['default'](BaseButton)( - templateObject_7$j || - (templateObject_7$j = __makeTemplateObject( - [ - '\n background-color: ', - ';\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n &:hover {\n background-color: ', - ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n &:disabled {\n background-color: ', - ';\n opacity: 50%;\n cursor: auto;\n }\n', - ], - [ - '\n background-color: ', - ';\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n &:hover {\n background-color: ', - ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n &:disabled {\n background-color: ', - ';\n opacity: 50%;\n cursor: auto;\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.yellow3 - }, - function (_a) { - var theme = _a.theme - return polished.darken(0.05, theme.yellow3) - }, - function (_a) { - var theme = _a.theme - return polished.darken(0.05, theme.yellow3) - }, - function (_a) { - var theme = _a.theme - return polished.darken(0.05, theme.yellow3) - }, - function (_a) { - var theme = _a.theme - return polished.darken(0.1, theme.yellow3) - }, - function (_a) { - var theme = _a.theme - return polished.darken(0.1, theme.yellow3) - }, - function (_a) { - var theme = _a.theme - return theme.yellow3 - } -) -var ButtonEmpty = styled__default['default'](BaseButton)( - templateObject_8$g || - (templateObject_8$g = __makeTemplateObject( - [ - '\n background-color: transparent;\n color: ', - ';\n display: flex;\n justify-content: center;\n align-items: center;\n\n &:focus {\n text-decoration: underline;\n }\n &:hover {\n text-decoration: none;\n }\n &:active {\n text-decoration: none;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n', - ], - [ - '\n background-color: transparent;\n color: ', - ';\n display: flex;\n justify-content: center;\n align-items: center;\n\n &:focus {\n text-decoration: underline;\n }\n &:hover {\n text-decoration: none;\n }\n &:active {\n text-decoration: none;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.primary1 - } -) -styled__default['default'](BaseButton)( - templateObject_9$f || - (templateObject_9$f = __makeTemplateObject( - [ - '\n padding: 0;\n width: fit-content;\n background: none;\n text-decoration: none;\n &:focus {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n text-decoration: underline;\n }\n &:hover {\n // text-decoration: underline;\n opacity: 0.9;\n }\n &:active {\n text-decoration: underline;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n', - ], - [ - '\n padding: 0;\n width: fit-content;\n background: none;\n text-decoration: none;\n &:focus {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n text-decoration: underline;\n }\n &:hover {\n // text-decoration: underline;\n opacity: 0.9;\n }\n &:active {\n text-decoration: underline;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n', - ] - )) -) -var ButtonConfirmedStyle = styled__default['default'](BaseButton)( - templateObject_10$b || - (templateObject_10$b = __makeTemplateObject( - [ - '\n background-color: ', - ';\n color: ', - ';\n /* border: 1px solid ', - '; */\n\n &:disabled {\n opacity: 50%;\n background-color: ', - ';\n color: ', - ';\n cursor: auto;\n }\n', - ], - [ - '\n background-color: ', - ';\n color: ', - ';\n /* border: 1px solid ', - '; */\n\n &:disabled {\n opacity: 50%;\n background-color: ', - ';\n color: ', - ';\n cursor: auto;\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.bg3 - }, - function (_a) { - var theme = _a.theme - return theme.text1 - }, - function (_a) { - var theme = _a.theme - return theme.green1 - }, - function (_a) { - var theme = _a.theme - return theme.bg2 - }, - function (_a) { - var theme = _a.theme - return theme.text2 - } -) -var ButtonErrorStyle = styled__default['default'](BaseButton)( - templateObject_11$9 || - (templateObject_11$9 = __makeTemplateObject( - [ - '\n background-color: ', - ';\n border: 1px solid ', - ';\n\n &:focus {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n &:hover {\n background-color: ', - ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n box-shadow: none;\n background-color: ', - ';\n border: 1px solid ', - ';\n }\n', - ], - [ - '\n background-color: ', - ';\n border: 1px solid ', - ';\n\n &:focus {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n &:hover {\n background-color: ', - ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n box-shadow: none;\n background-color: ', - ';\n border: 1px solid ', - ';\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.red1 - }, - function (_a) { - var theme = _a.theme - return theme.red1 - }, - function (_a) { - var theme = _a.theme - return polished.darken(0.05, theme.red1) - }, - function (_a) { - var theme = _a.theme - return polished.darken(0.05, theme.red1) - }, - function (_a) { - var theme = _a.theme - return polished.darken(0.05, theme.red1) - }, - function (_a) { - var theme = _a.theme - return polished.darken(0.1, theme.red1) - }, - function (_a) { - var theme = _a.theme - return polished.darken(0.1, theme.red1) - }, - function (_a) { - var theme = _a.theme - return theme.red1 - }, - function (_a) { - var theme = _a.theme - return theme.red1 - } -) -function ButtonConfirmed(_a) { - var confirmed = _a.confirmed, - altDisabledStyle = _a.altDisabledStyle, - rest = __rest(_a, ['confirmed', 'altDisabledStyle']) - if (confirmed) { - return jsxRuntime.jsx(ButtonConfirmedStyle, __assign({}, rest), void 0) - } else { - return jsxRuntime.jsx(ButtonPrimary, __assign({}, rest, { altDisabledStyle }), void 0) - } -} -function ButtonError(_a) { - var error = _a.error, - rest = __rest(_a, ['error']) - if (error) { - return jsxRuntime.jsx(ButtonErrorStyle, __assign({}, rest), void 0) - } else { - return jsxRuntime.jsx(ButtonPrimary, __assign({}, rest), void 0) - } -} -styled__default['default'](ButtonOutlined)( - templateObject_12$9 || - (templateObject_12$9 = __makeTemplateObject( - ['\n border: 1px solid;\n border-color: ', ';\n'], - ['\n border: 1px solid;\n border-color: ', ';\n'] - )), - function (_a) { - var theme = _a.theme - return theme.primary1 - } -) -styled__default['default'].div( - templateObject_13$5 || - (templateObject_13$5 = __makeTemplateObject( - [ - '\n height: 17px;\n width: 17px;\n border-radius: 50%;\n background-color: ', - ';\n display: flex;\n align-items: center;\n justify-content: center;\n', - ], - [ - '\n height: 17px;\n width: 17px;\n border-radius: 50%;\n background-color: ', - ';\n display: flex;\n align-items: center;\n justify-content: center;\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.primary1 - } -) -styled__default['default'].div( - templateObject_14$5 || - (templateObject_14$5 = __makeTemplateObject( - ['\n width: 20px;\n padding: 0 10px;\n position: absolute;\n top: 11px;\n right: 15px;\n'], - ['\n width: 20px;\n padding: 0 10px;\n position: absolute;\n top: 11px;\n right: 15px;\n'] - )) -) -styled__default['default'](reactFeather.Check)( - templateObject_15$3 || (templateObject_15$3 = __makeTemplateObject(['\n size: 13px;\n'], ['\n size: 13px;\n'])) -) -var templateObject_1$1g, - templateObject_2$W, - templateObject_3$N, - templateObject_4$C, - templateObject_5$t, - templateObject_6$n, - templateObject_7$j, - templateObject_8$g, - templateObject_9$f, - templateObject_10$b, - templateObject_11$9, - templateObject_12$9, - templateObject_13$5, - templateObject_14$5, - templateObject_15$3 - -var isClient = typeof window === 'object' -function getSize() { - return { - width: isClient ? window.innerWidth : undefined, - height: isClient ? window.innerHeight : undefined, - } -} -// https://usehooks.com/useWindowSize/ -function useWindowSize() { - var _a = __read(React.useState(getSize), 2), - windowSize = _a[0], - setWindowSize = _a[1] - React.useEffect(function () { - function handleResize() { - setWindowSize(getSize()) - } - if (isClient) { - window.addEventListener('resize', handleResize) - return function () { - window.removeEventListener('resize', handleResize) - } - } - return undefined - }, []) - return windowSize -} - -// eslint-disable-next-line react/prop-types -function Confetti(_a) { - var start = _a.start, - variant = _a.variant - var _b = useWindowSize(), - width = _b.width, - height = _b.height - var _variant = variant ? variant : height && width && height > 1.5 * width ? 'bottom' : variant - return start && width && height - ? jsxRuntime.jsx( - ReactConfetti__default['default'], - { - style: { zIndex: 1401 }, - numberOfPieces: 400, - recycle: false, - run: true, - width, - height, - confettiSource: { - h: height, - w: width, - x: 0, - y: _variant === 'top' ? height * 0.25 : _variant === 'bottom' ? height * 0.75 : height * 0.5, - }, - initialVelocityX: 15, - initialVelocityY: 30, - gravity: 0.45, - tweenDuration: 100, - wind: 0.05, - }, - void 0 - ) - : null -} - -var uImage = '10f062d02df4af77.png' - -var noise = 'f158a440053a5ad2.png' - -var xlUnicorn = 'c2cd04251aa24c34.png' - -var DataCard = styled__default['default'](AutoColumn)( - templateObject_1$1f || - (templateObject_1$1f = __makeTemplateObject( - [ - '\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #2172e5 100%);\n border-radius: 12px;\n width: 100%;\n position: relative;\n overflow: hidden;\n', - ], - [ - '\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #2172e5 100%);\n border-radius: 12px;\n width: 100%;\n position: relative;\n overflow: hidden;\n', - ] - )) -) -var CardBGImage = styled__default['default'].span( - templateObject_2$V || - (templateObject_2$V = __makeTemplateObject( - [ - '\n background: url(', - ');\n width: 1000px;\n height: 600px;\n position: absolute;\n border-radius: 12px;\n opacity: 0.4;\n top: -100px;\n left: -100px;\n transform: rotate(-15deg);\n user-select: none;\n ', - '\n', - ], - [ - '\n background: url(', - ');\n width: 1000px;\n height: 600px;\n position: absolute;\n border-radius: 12px;\n opacity: 0.4;\n top: -100px;\n left: -100px;\n transform: rotate(-15deg);\n user-select: none;\n ', - '\n', - ] - )), - uImage, - function (_a) { - var desaturate = _a.desaturate - return desaturate && 'filter: saturate(0)' - } -) -var CardBGImageSmaller = styled__default['default'].span( - templateObject_3$M || - (templateObject_3$M = __makeTemplateObject( - [ - '\n background: url(', - ');\n width: 1200px;\n height: 1200px;\n position: absolute;\n border-radius: 12px;\n top: -300px;\n left: -300px;\n opacity: 0.4;\n user-select: none;\n\n ', - '\n', - ], - [ - '\n background: url(', - ');\n width: 1200px;\n height: 1200px;\n position: absolute;\n border-radius: 12px;\n top: -300px;\n left: -300px;\n opacity: 0.4;\n user-select: none;\n\n ', - '\n', - ] - )), - xlUnicorn, - function (_a) { - var desaturate = _a.desaturate - return desaturate && 'filter: saturate(0)' - } -) -var CardNoise = styled__default['default'].span( - templateObject_4$B || - (templateObject_4$B = __makeTemplateObject( - [ - '\n background: url(', - ');\n background-size: cover;\n mix-blend-mode: overlay;\n border-radius: 12px;\n width: 100%;\n height: 100%;\n opacity: 0.15;\n position: absolute;\n top: 0;\n left: 0;\n user-select: none;\n', - ], - [ - '\n background: url(', - ');\n background-size: cover;\n mix-blend-mode: overlay;\n border-radius: 12px;\n width: 100%;\n height: 100%;\n opacity: 0.15;\n position: absolute;\n top: 0;\n left: 0;\n user-select: none;\n', - ] - )), - noise -) -var CardSection = styled__default['default'](AutoColumn)( - templateObject_5$s || - (templateObject_5$s = __makeTemplateObject( - ['\n padding: 1rem;\n z-index: 1;\n opacity: ', ';\n'], - ['\n padding: 1rem;\n z-index: 1;\n opacity: ', ';\n'] - )), - function (_a) { - var disabled = _a.disabled - return disabled && '0.4' - } -) -var Break$1 = styled__default['default'].div( - templateObject_6$m || - (templateObject_6$m = __makeTemplateObject( - ['\n width: 100%;\n background-color: rgba(255, 255, 255, 0.2);\n height: 1px;\n'], - ['\n width: 100%;\n background-color: rgba(255, 255, 255, 0.2);\n height: 1px;\n'] - )) -) -var templateObject_1$1f, - templateObject_2$V, - templateObject_3$M, - templateObject_4$B, - templateObject_5$s, - templateObject_6$m - -var parser = new uaParserJs.UAParser(window.navigator.userAgent) -var type$1 = parser.getDevice().type -var userAgent = parser.getResult() -var isMobile = type$1 === 'mobile' || type$1 === 'tablet' - -var AnimatedDialogOverlay = reactSpring.animated(dialog.DialogOverlay) -// eslint-disable-next-line @typescript-eslint/no-unused-vars -var StyledDialogOverlay = styled__default['default'](AnimatedDialogOverlay)( - templateObject_1$1e || - (templateObject_1$1e = __makeTemplateObject( - [ - '\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: ', - ';\n }\n', - ], - [ - '\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: ', - ';\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.modalBG - } -) -var AnimatedDialogContent = reactSpring.animated(dialog.DialogContent) -// destructure to not pass custom props to Dialog DOM element -// eslint-disable-next-line @typescript-eslint/no-unused-vars -var StyledDialogContent = styled__default['default'](function (_a) { - _a.minHeight - _a.maxHeight - _a.mobile - _a.isOpen - var rest = __rest(_a, ['minHeight', 'maxHeight', 'mobile', 'isOpen']) - return jsxRuntime.jsx(AnimatedDialogContent, __assign({}, rest), void 0) -}).attrs({ - 'aria-label': 'dialog', -})( - templateObject_7$i || - (templateObject_7$i = __makeTemplateObject( - [ - '\n overflow-y: auto;\n\n &[data-reach-dialog-content] {\n margin: 0 0 2rem 0;\n background-color: ', - ';\n border: 1px solid ', - ';\n box-shadow: 0 4px 8px 0 ', - ';\n padding: 0px;\n width: 50vw;\n overflow-y: auto;\n overflow-x: hidden;\n\n align-self: ', - ';\n\n max-width: 420px;\n ', - '\n ', - '\n display: flex;\n border-radius: 20px;\n ', - '\n ', - '\n }\n', - ], - [ - '\n overflow-y: auto;\n\n &[data-reach-dialog-content] {\n margin: 0 0 2rem 0;\n background-color: ', - ';\n border: 1px solid ', - ';\n box-shadow: 0 4px 8px 0 ', - ';\n padding: 0px;\n width: 50vw;\n overflow-y: auto;\n overflow-x: hidden;\n\n align-self: ', - ';\n\n max-width: 420px;\n ', - '\n ', - '\n display: flex;\n border-radius: 20px;\n ', - '\n ', - '\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.bg0 - }, - function (_a) { - var theme = _a.theme - return theme.bg1 - }, - function (_a) { - var theme = _a.theme - return polished.transparentize(0.95, theme.shadow1) - }, - function (_a) { - var mobile = _a.mobile - return mobile ? 'flex-end' : 'center' - }, - function (_a) { - var maxHeight = _a.maxHeight - return ( - maxHeight && - styled.css( - templateObject_2$U || - (templateObject_2$U = __makeTemplateObject( - ['\n max-height: ', 'vh;\n '], - ['\n max-height: ', 'vh;\n '] - )), - maxHeight - ) - ) - }, - function (_a) { - var minHeight = _a.minHeight - return ( - minHeight && - styled.css( - templateObject_3$L || - (templateObject_3$L = __makeTemplateObject( - ['\n min-height: ', 'vh;\n '], - ['\n min-height: ', 'vh;\n '] - )), - minHeight - ) - ) - }, - function (_a) { - var theme = _a.theme - return theme.mediaWidth.upToMedium( - templateObject_4$A || - (templateObject_4$A = __makeTemplateObject( - ['\n width: 65vw;\n margin: 0;\n '], - ['\n width: 65vw;\n margin: 0;\n '] - )) - ) - }, - function (_a) { - var theme = _a.theme, - mobile = _a.mobile - return theme.mediaWidth.upToSmall( - templateObject_6$l || - (templateObject_6$l = __makeTemplateObject( - ['\n width: 85vw;\n ', '\n '], - ['\n width: 85vw;\n ', '\n '] - )), - mobile && - styled.css( - templateObject_5$r || - (templateObject_5$r = __makeTemplateObject( - [ - '\n width: 100vw;\n border-radius: 20px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n ', - ], - [ - '\n width: 100vw;\n border-radius: 20px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n ', - ] - )) - ) - ) - } -) -function Modal(_a) { - var isOpen = _a.isOpen, - onDismiss = _a.onDismiss, - _b = _a.minHeight, - minHeight = _b === void 0 ? false : _b, - _c = _a.maxHeight, - maxHeight = _c === void 0 ? 90 : _c, - initialFocusRef = _a.initialFocusRef, - children = _a.children - var fadeTransition = reactSpring.useTransition(isOpen, null, { - config: { duration: 200 }, - from: { opacity: 0 }, - enter: { opacity: 1 }, - leave: { opacity: 0 }, - }) - var _d = __read( - reactSpring.useSpring(function () { - return { y: 0, config: { mass: 1, tension: 210, friction: 20 } } - }), - 2 - ), - y = _d[0].y, - set = _d[1] - var bind = reactUseGesture.useGesture({ - onDrag(state) { - set({ - y: state.down ? state.movement[1] : 0, - }) - if (state.movement[1] > 300 || (state.velocity > 3 && state.direction[1] > 0)) { - onDismiss() - } - }, - }) - return jsxRuntime.jsx( - jsxRuntime.Fragment, - { - children: fadeTransition.map(function (_a) { - var item = _a.item, - key = _a.key, - props = _a.props - return ( - item && - jsxRuntime.jsx( - StyledDialogOverlay, - __assign( - { - style: props, - onDismiss, - initialFocusRef, - unstable_lockFocusAcrossFrames: false, - }, - { - children: jsxRuntime.jsxs( - StyledDialogContent, - __assign( - {}, - isMobile - ? __assign(__assign({}, bind()), { - style: { - transform: y.interpolate(function (y) { - return 'translateY(' + (y > 0 ? y : 0) + 'px)' - }), - }, - }) - : {}, - { 'aria-label': 'dialog content', minHeight, maxHeight, mobile: isMobile }, - { - children: [ - !initialFocusRef && isMobile ? jsxRuntime.jsx('div', { tabIndex: 1 }, void 0) : null, - children, - ], - } - ), - void 0 - ), - } - ), - key - ) - ) - }), - }, - void 0 - ) -} -var templateObject_1$1e, - templateObject_2$U, - templateObject_3$L, - templateObject_4$A, - templateObject_5$r, - templateObject_6$l, - templateObject_7$i - -var ContentWrapper$4 = styled__default['default'](AutoColumn)( - templateObject_1$1d || (templateObject_1$1d = __makeTemplateObject(['\n width: 100%;\n'], ['\n width: 100%;\n'])) -) -var ModalUpper$1 = styled__default['default'](DataCard)( - templateObject_2$T || - (templateObject_2$T = __makeTemplateObject( - [ - '\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n', - ], - [ - '\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n', - ] - )) -) -var ConfirmOrLoadingWrapper$1 = styled__default['default'].div( - templateObject_3$K || - (templateObject_3$K = __makeTemplateObject( - ['\n width: 100%;\n padding: 24px;\n position: relative;\n background: ', ';\n'], - ['\n width: 100%;\n padding: 24px;\n position: relative;\n background: ', ';\n'] - )), - function (_a) { - var activeBG = _a.activeBG - return ( - activeBG && - 'radial-gradient(76.02% 75.41% at 1.84% 0%, rgba(255, 0, 122, 0.2) 0%, rgba(33, 114, 229, 0.2) 100%), #FFFFFF;' - ) - } -) -var ConfirmedIcon$2 = styled__default['default'](ColumnCenter)( - templateObject_4$z || - (templateObject_4$z = __makeTemplateObject(['\n padding: 60px 0;\n'], ['\n padding: 60px 0;\n'])) -) -function AddressClaimModal(_a) { - var _b, _c - var isOpen = _a.isOpen, - onDismiss = _a.onDismiss - var chainId = useActiveWeb3React().chainId - // state for smart contract input - var _d = __read(React.useState(''), 2), - typed = _d[0], - setTyped = _d[1] - function handleRecipientType(val) { - setTyped(val) - } - // monitor for third party recipient of claim - var parsedAddress = useENS(typed).address - // used for UI loading states - var _e = __read(React.useState(false), 2), - attempting = _e[0], - setAttempting = _e[1] - // monitor the status of the claim from contracts and txns - var claimCallback = useClaimCallback(parsedAddress).claimCallback - var unclaimedAmount = useUserUnclaimedAmount(parsedAddress) - // check if the user has something available - var hasAvailableClaim = useUserHasAvailableClaim(parsedAddress) - var _f = __read(React.useState(), 2), - hash = _f[0], - setHash = _f[1] - // monitor the status of the claim from contracts and txns - var claimPending = useIsTransactionPending(hash !== null && hash !== void 0 ? hash : '') - var claimConfirmed = hash && !claimPending - // use the hash to monitor this txn - function onClaim() { - setAttempting(true) - claimCallback() - .then(function (hash) { - setHash(hash) - }) - // reset modal and log error - .catch(function (error) { - setAttempting(false) - console.log(error) - }) - } - function wrappedOnDismiss() { - setAttempting(false) - setHash(undefined) - setTyped('') - onDismiss() - } - return jsxRuntime.jsxs( - Modal, - __assign( - { isOpen, onDismiss: wrappedOnDismiss, maxHeight: 90 }, - { - children: [ - jsxRuntime.jsx(Confetti, { start: Boolean(isOpen && claimConfirmed && attempting) }, void 0), - !attempting && - jsxRuntime.jsxs( - ContentWrapper$4, - __assign( - { gap: 'lg' }, - { - children: [ - jsxRuntime.jsxs( - ModalUpper$1, - { - children: [ - jsxRuntime.jsx(CardBGImage, {}, void 0), - jsxRuntime.jsx(CardNoise, {}, void 0), - jsxRuntime.jsxs( - CardSection, - __assign( - { gap: 'md' }, - { - children: [ - jsxRuntime.jsxs( - RowBetween, - { - children: [ - jsxRuntime.jsx( - ThemedText.White, - __assign( - { fontWeight: 500 }, - { - children: jsxRuntime.jsx( - macro.Trans, - { children: 'Claim UNI Token' }, - void 0 - ), - } - ), - void 0 - ), - jsxRuntime.jsx( - CloseIcon$2, - { onClick: wrappedOnDismiss, style: { zIndex: 99 }, stroke: 'white' }, - void 0 - ), - ], - }, - void 0 - ), - jsxRuntime.jsx( - ThemedText.White, - __assign( - { fontWeight: 700, fontSize: 36 }, - { - children: jsxRuntime.jsxs( - macro.Trans, - { - children: [ - unclaimedAmount === null || unclaimedAmount === void 0 - ? void 0 - : unclaimedAmount.toFixed( - 0, - (_b = { groupSeparator: ',' }) !== null && _b !== void 0 ? _b : '-' - ), - ' UNI', - ], - }, - void 0 - ), - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - jsxRuntime.jsx(Break$1, {}, void 0), - ], - }, - void 0 - ), - jsxRuntime.jsxs( - AutoColumn, - __assign( - { gap: 'md', style: { padding: '1rem', paddingTop: '0' }, justify: 'center' }, - { - children: [ - jsxRuntime.jsx( - ThemedText.SubHeader, - __assign( - { fontWeight: 500 }, - { - children: jsxRuntime.jsx( - macro.Trans, - { - children: - 'Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.', - }, - void 0 - ), - } - ), - void 0 - ), - jsxRuntime.jsx(AddressInputPanel, { value: typed, onChange: handleRecipientType }, void 0), - parsedAddress && - !hasAvailableClaim && - jsxRuntime.jsx( - ThemedText.Error, - __assign( - { error: true }, - { - children: jsxRuntime.jsx( - macro.Trans, - { children: 'Address has no available claim' }, - void 0 - ), - } - ), - void 0 - ), - jsxRuntime.jsx( - ButtonPrimary, - __assign( - { - disabled: - !address.isAddress( - parsedAddress !== null && parsedAddress !== void 0 ? parsedAddress : '' - ) || !hasAvailableClaim, - padding: '16px 16px', - width: '100%', - $borderRadius: '12px', - mt: '1rem', - onClick: onClaim, - }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'Claim UNI' }, void 0) } - ), - void 0 - ), - ], - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - (attempting || claimConfirmed) && - jsxRuntime.jsxs( - ConfirmOrLoadingWrapper$1, - __assign( - { activeBG: true }, - { - children: [ - jsxRuntime.jsx(CardNoise, {}, void 0), - jsxRuntime.jsx(CardBGImageSmaller, { desaturate: true }, void 0), - jsxRuntime.jsxs( - RowBetween, - { - children: [ - jsxRuntime.jsx('div', {}, void 0), - jsxRuntime.jsx( - CloseIcon$2, - { onClick: wrappedOnDismiss, style: { zIndex: 99 }, stroke: 'black' }, - void 0 - ), - ], - }, - void 0 - ), - jsxRuntime.jsx( - ConfirmedIcon$2, - { - children: !claimConfirmed - ? jsxRuntime.jsx(CustomLightSpinner, { src: Circle$1, alt: 'loader', size: '90px' }, void 0) - : jsxRuntime.jsx( - UniTokenAnimated, - { width: '72px', src: tokenLogo, alt: 'UNI logo' }, - void 0 - ), - }, - void 0 - ), - jsxRuntime.jsxs( - AutoColumn, - __assign( - { gap: '100px', justify: 'center' }, - { - children: [ - jsxRuntime.jsxs( - AutoColumn, - __assign( - { gap: '12px', justify: 'center' }, - { - children: [ - jsxRuntime.jsx( - ThemedText.LargeHeader, - __assign( - { fontWeight: 600, color: 'black' }, - { - children: claimConfirmed - ? jsxRuntime.jsx(macro.Trans, { children: 'Claimed' }, void 0) - : jsxRuntime.jsx(macro.Trans, { children: 'Claiming' }, void 0), - } - ), - void 0 - ), - !claimConfirmed && - jsxRuntime.jsx( - rebass.Text, - __assign( - { fontSize: 36, color: '#ff007a', fontWeight: 800 }, - { - children: jsxRuntime.jsxs( - macro.Trans, - { - children: [ - unclaimedAmount === null || unclaimedAmount === void 0 - ? void 0 - : unclaimedAmount.toFixed( - 0, - (_c = { groupSeparator: ',' }) !== null && _c !== void 0 - ? _c - : '-' - ), - ' UNI', - ], - }, - void 0 - ), - } - ), - void 0 - ), - parsedAddress && - jsxRuntime.jsx( - ThemedText.LargeHeader, - __assign( - { fontWeight: 600, color: 'black' }, - { - children: jsxRuntime.jsxs( - macro.Trans, - { children: ['for ', shortenAddress(parsedAddress)] }, - void 0 - ), - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - claimConfirmed && - jsxRuntime.jsx( - jsxRuntime.Fragment, - { - children: jsxRuntime.jsxs( - ThemedText.SubHeader, - __assign( - { fontWeight: 500, color: 'black' }, - { - children: [ - jsxRuntime.jsxs( - 'span', - __assign( - { role: 'img', 'aria-label': 'party-hat' }, - { children: ['\uD83C\uDF89', ' '] } - ), - void 0 - ), - jsxRuntime.jsx( - macro.Trans, - { children: 'Welcome to team Unicorn :) ' }, - void 0 - ), - jsxRuntime.jsx( - 'span', - __assign( - { role: 'img', 'aria-label': 'party-hat' }, - { children: '\uD83C\uDF89' } - ), - void 0 - ), - ], - } - ), - void 0 - ), - }, - void 0 - ), - attempting && - !hash && - jsxRuntime.jsx( - ThemedText.SubHeader, - __assign( - { color: 'black' }, - { - children: jsxRuntime.jsx( - macro.Trans, - { children: 'Confirm this transaction in your wallet' }, - void 0 - ), - } - ), - void 0 - ), - attempting && - hash && - !claimConfirmed && - chainId && - hash && - jsxRuntime.jsx( - ExternalLink, - __assign( - { - href: getExplorerLink(chainId, hash, ExplorerDataType.TRANSACTION), - style: { zIndex: 99 }, - }, - { - children: jsxRuntime.jsx( - macro.Trans, - { children: 'View transaction on Explorer' }, - void 0 - ), - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - ], - } - ), - void 0 - ) -} -var templateObject_1$1d, templateObject_2$T, templateObject_3$K, templateObject_4$z - -var _a$a -var ApplicationModal -;(function (ApplicationModal) { - ApplicationModal[(ApplicationModal['WALLET'] = 0)] = 'WALLET' - ApplicationModal[(ApplicationModal['SETTINGS'] = 1)] = 'SETTINGS' - ApplicationModal[(ApplicationModal['SELF_CLAIM'] = 2)] = 'SELF_CLAIM' - ApplicationModal[(ApplicationModal['ADDRESS_CLAIM'] = 3)] = 'ADDRESS_CLAIM' - ApplicationModal[(ApplicationModal['CLAIM_POPUP'] = 4)] = 'CLAIM_POPUP' - ApplicationModal[(ApplicationModal['MENU'] = 5)] = 'MENU' - ApplicationModal[(ApplicationModal['DELEGATE'] = 6)] = 'DELEGATE' - ApplicationModal[(ApplicationModal['VOTE'] = 7)] = 'VOTE' - ApplicationModal[(ApplicationModal['POOL_OVERVIEW_OPTIONS'] = 8)] = 'POOL_OVERVIEW_OPTIONS' - ApplicationModal[(ApplicationModal['NETWORK_SELECTOR'] = 9)] = 'NETWORK_SELECTOR' - ApplicationModal[(ApplicationModal['PRIVACY_POLICY'] = 10)] = 'PRIVACY_POLICY' -})(ApplicationModal || (ApplicationModal = {})) -var initialState$8 = { - chainId: null, - openModal: null, - popupList: [], -} -var applicationSlice = toolkit.createSlice({ - name: 'application', - initialState: initialState$8, - reducers: { - updateChainId(state, action) { - var chainId = action.payload.chainId - state.chainId = chainId - }, - setOpenModal(state, action) { - state.openModal = action.payload - }, - addPopup(state, _a) { - var _b = _a.payload, - content = _b.content, - key = _b.key, - _c = _b.removeAfterMs, - removeAfterMs = _c === void 0 ? DEFAULT_TXN_DISMISS_MS : _c - state.popupList = ( - key - ? state.popupList.filter(function (popup) { - return popup.key !== key - }) - : state.popupList - ).concat([ - { - key: key || toolkit.nanoid(), - show: true, - content, - removeAfterMs, - }, - ]) - }, - removePopup(state, _a) { - var key = _a.payload.key - state.popupList.forEach(function (p) { - if (p.key === key) { - p.show = false - } - }) - }, - }, -}) -var updateChainId = ((_a$a = applicationSlice.actions), _a$a.updateChainId), - setOpenModal = _a$a.setOpenModal, - addPopup = _a$a.addPopup, - removePopup = _a$a.removePopup -var application = applicationSlice.reducer - -var Field$3 -;(function (Field) { - Field['LIQUIDITY_PERCENT'] = 'LIQUIDITY_PERCENT' - Field['LIQUIDITY'] = 'LIQUIDITY' - Field['CURRENCY_A'] = 'CURRENCY_A' - Field['CURRENCY_B'] = 'CURRENCY_B' -})(Field$3 || (Field$3 = {})) -var typeInput$3 = toolkit.createAction('burn/typeInputBurn') - -var initialState$7 = { - independentField: Field$3.LIQUIDITY_PERCENT, - typedValue: '0', -} -var burn = toolkit.createReducer(initialState$7, function (builder) { - return builder.addCase(typeInput$3, function (state, _a) { - var _b = _a.payload, - field = _b.field, - typedValue = _b.typedValue - return __assign(__assign({}, state), { independentField: field, typedValue }) - }) -}) - -var selectPercent = toolkit.createAction('burnV3/selectBurnPercent') - -var initialState$6 = { - percent: 0, -} -var burnV3 = toolkit.createReducer(initialState$6, function (builder) { - return builder.addCase(selectPercent, function (state, _a) { - var percent = _a.payload.percent - return __assign(__assign({}, state), { percent }) - }) -}) - -var _a$9 -// List of supported subgraphs. Note that the app currently only support one active subgraph at a time -var CHAIN_SUBGRAPH_URL = - ((_a$9 = {}), - (_a$9[SupportedChainId.MAINNET] = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3'), - (_a$9[SupportedChainId.RINKEBY] = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3'), - (_a$9[SupportedChainId.ARBITRUM_ONE] = 'https://api.thegraph.com/subgraphs/name/ianlapham/arbitrum-minimal'), - (_a$9[SupportedChainId.OPTIMISM] = 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-optimism-dev'), - (_a$9[SupportedChainId.POLYGON] = 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-v3-polygon'), - _a$9) -var api$1 = react.createApi({ - reducerPath: 'dataApi', - baseQuery: graphqlRequestBaseQuery(), - endpoints(builder) { - return { - allV3Ticks: builder.query({ - query(_a) { - var poolAddress = _a.poolAddress, - _b = _a.skip, - skip = _b === void 0 ? 0 : _b - return { - document: graphqlRequest.gql( - templateObject_1$1c || - (templateObject_1$1c = __makeTemplateObject( - [ - '\n query allV3Ticks($poolAddress: String!, $skip: Int!) {\n ticks(first: 1000, skip: $skip, where: { poolAddress: $poolAddress }, orderBy: tickIdx) {\n tick: tickIdx\n liquidityNet\n price0\n price1\n }\n }\n ', - ], - [ - '\n query allV3Ticks($poolAddress: String!, $skip: Int!) {\n ticks(first: 1000, skip: $skip, where: { poolAddress: $poolAddress }, orderBy: tickIdx) {\n tick: tickIdx\n liquidityNet\n price0\n price1\n }\n }\n ', - ] - )) - ), - variables: { - poolAddress, - skip, - }, - } - }, - }), - feeTierDistribution: builder.query({ - query(_a) { - var token0 = _a.token0, - token1 = _a.token1 - return { - document: graphqlRequest.gql( - templateObject_2$S || - (templateObject_2$S = __makeTemplateObject( - [ - '\n query feeTierDistribution($token0: String!, $token1: String!) {\n _meta {\n block {\n number\n }\n }\n asToken0: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token0, token1: $token1 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n asToken1: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token1, token1: $token0 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n }\n ', - ], - [ - '\n query feeTierDistribution($token0: String!, $token1: String!) {\n _meta {\n block {\n number\n }\n }\n asToken0: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token0, token1: $token1 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n asToken1: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token1, token1: $token0 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n }\n ', - ] - )) - ), - variables: { - token0, - token1, - }, - } - }, - }), - } - }, -}) -// Graphql query client wrapper that builds a dynamic url based on chain id -function graphqlRequestBaseQuery() { - var _this = this - return function (_a, _b) { - var document = _a.document, - variables = _a.variables - var getState = _b.getState - return __awaiter(_this, void 0, void 0, function () { - var chainId, subgraphUrl, error_1, name_1, message, stack, request, response - var _c - return __generator(this, function (_d) { - switch (_d.label) { - case 0: - _d.trys.push([0, 2, , 3]) - chainId = getState().application.chainId - subgraphUrl = chainId ? CHAIN_SUBGRAPH_URL[chainId] : undefined - if (!subgraphUrl) { - return [ - 2 /*return*/, - { - error: { - name: 'UnsupportedChainId', - message: 'Subgraph queries against ChainId ' + chainId + ' are not supported.', - stack: '', - }, - }, - ] - } - _c = {} - return [4 /*yield*/, new graphqlRequest.GraphQLClient(subgraphUrl).request(document, variables)] - case 1: - return [2 /*return*/, ((_c.data = _d.sent()), (_c.meta = {}), _c)] - case 2: - error_1 = _d.sent() - if (error_1 instanceof graphqlRequest.ClientError) { - ;(name_1 = error_1.name), - (message = error_1.message), - (stack = error_1.stack), - (request = error_1.request), - (response = error_1.response) - return [ - 2 /*return*/, - { - error: { name: name_1, message, stack }, - meta: { request, response }, - }, - ] - } - throw error_1 - case 3: - return [2 /*return*/] - } - }) - }) - } -} -var templateObject_1$1c, templateObject_2$S - -// fired once when the app reloads but before the app renders -// allows any updates to be applied to store data loaded from localStorage -var updateVersion = toolkit.createAction('global/updateVersion') - -var fetchTokenList = { - pending: toolkit.createAction('lists/fetchTokenList/pending'), - fulfilled: toolkit.createAction('lists/fetchTokenList/fulfilled'), - rejected: toolkit.createAction('lists/fetchTokenList/rejected'), -} -// add and remove from list options -var addList = toolkit.createAction('lists/addList') -var removeList = toolkit.createAction('lists/removeList') -// select which lists to search across from loaded lists -var enableList = toolkit.createAction('lists/enableList') -var disableList = toolkit.createAction('lists/disableList') -// versioning -var acceptListUpdate = toolkit.createAction('lists/acceptListUpdate') - -var NEW_LIST_STATE = { - error: null, - current: null, - loadingRequestId: null, - pendingUpdate: null, -} -var initialState$5 = { - lastInitializedDefaultListOfLists: DEFAULT_LIST_OF_LISTS, - byUrl: __assign( - {}, - DEFAULT_LIST_OF_LISTS.reduce(function (memo, listUrl) { - memo[listUrl] = NEW_LIST_STATE - return memo - }, {}) - ), - activeListUrls: DEFAULT_ACTIVE_LIST_URLS, -} -var lists = toolkit.createReducer(initialState$5, function (builder) { - return builder - .addCase(fetchTokenList.pending, function (state, _a) { - var _b, _c, _d, _e - var _f = _a.payload, - requestId = _f.requestId, - url = _f.url - var current = - (_c = (_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.current) !== null && _c !== void 0 - ? _c - : null - var pendingUpdate = - (_e = (_d = state.byUrl[url]) === null || _d === void 0 ? void 0 : _d.pendingUpdate) !== null && _e !== void 0 - ? _e - : null - state.byUrl[url] = { - current, - pendingUpdate, - loadingRequestId: requestId, - error: null, - } - }) - .addCase(fetchTokenList.fulfilled, function (state, _a) { - var _b, _c, _d - var _e = _a.payload, - requestId = _e.requestId, - tokenList = _e.tokenList, - url = _e.url - var current = (_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.current - var loadingRequestId = (_c = state.byUrl[url]) === null || _c === void 0 ? void 0 : _c.loadingRequestId - // no-op if update does nothing - if (current) { - var upgradeType = tokenLists.getVersionUpgrade(current.version, tokenList.version) - if (upgradeType === tokenLists.VersionUpgrade.NONE) return - if (loadingRequestId === null || loadingRequestId === requestId) { - state.byUrl[url] = { - current, - pendingUpdate: tokenList, - loadingRequestId: null, - error: null, - } - } - } else { - // activate if on default active - if (DEFAULT_ACTIVE_LIST_URLS.includes(url)) { - ;(_d = state.activeListUrls) === null || _d === void 0 ? void 0 : _d.push(url) - } - state.byUrl[url] = { - current: tokenList, - pendingUpdate: null, - loadingRequestId: null, - error: null, - } - } - }) - .addCase(fetchTokenList.rejected, function (state, _a) { - var _b - var _c = _a.payload, - url = _c.url, - requestId = _c.requestId, - errorMessage = _c.errorMessage - if (((_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.loadingRequestId) !== requestId) { - // no-op since it's not the latest request - return - } - state.byUrl[url] = { - current: state.byUrl[url].current ? state.byUrl[url].current : null, - pendingUpdate: null, - loadingRequestId: null, - error: errorMessage, - } - }) - .addCase(addList, function (state, _a) { - var url = _a.payload - if (!state.byUrl[url]) { - state.byUrl[url] = NEW_LIST_STATE - } - }) - .addCase(removeList, function (state, _a) { - var url = _a.payload - if (state.byUrl[url]) { - delete state.byUrl[url] - } - // remove list from active urls if needed - if (state.activeListUrls && state.activeListUrls.includes(url)) { - state.activeListUrls = state.activeListUrls.filter(function (u) { - return u !== url - }) - } - }) - .addCase(enableList, function (state, _a) { - var url = _a.payload - if (!state.byUrl[url]) { - state.byUrl[url] = NEW_LIST_STATE - } - if (state.activeListUrls && !state.activeListUrls.includes(url)) { - state.activeListUrls.push(url) - } - if (!state.activeListUrls) { - state.activeListUrls = [url] - } - }) - .addCase(disableList, function (state, _a) { - var url = _a.payload - if (state.activeListUrls && state.activeListUrls.includes(url)) { - state.activeListUrls = state.activeListUrls.filter(function (u) { - return u !== url - }) - } - }) - .addCase(acceptListUpdate, function (state, _a) { - var _b - var url = _a.payload - if (!((_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.pendingUpdate)) { - throw new Error('accept list update called without pending update') - } - state.byUrl[url] = __assign(__assign({}, state.byUrl[url]), { - current: state.byUrl[url].pendingUpdate, - pendingUpdate: null, - }) - }) - .addCase(updateVersion, function (state) { - // state loaded from localStorage, but new lists have never been initialized - if (!state.lastInitializedDefaultListOfLists) { - state.byUrl = initialState$5.byUrl - state.activeListUrls = initialState$5.activeListUrls - } else if (state.lastInitializedDefaultListOfLists) { - var lastInitializedSet_1 = state.lastInitializedDefaultListOfLists.reduce(function (s, l) { - return s.add(l) - }, new Set()) - var newListOfListsSet_1 = DEFAULT_LIST_OF_LISTS.reduce(function (s, l) { - return s.add(l) - }, new Set()) - DEFAULT_LIST_OF_LISTS.forEach(function (listUrl) { - if (!lastInitializedSet_1.has(listUrl)) { - state.byUrl[listUrl] = NEW_LIST_STATE - } - }) - state.lastInitializedDefaultListOfLists.forEach(function (listUrl) { - if (!newListOfListsSet_1.has(listUrl)) { - delete state.byUrl[listUrl] - } - }) - } - state.lastInitializedDefaultListOfLists = DEFAULT_LIST_OF_LISTS - // if no active lists, activate defaults - if (!state.activeListUrls) { - state.activeListUrls = DEFAULT_ACTIVE_LIST_URLS - // for each list on default list, initialize if needed - DEFAULT_ACTIVE_LIST_URLS.map(function (listUrl) { - if (!state.byUrl[listUrl]) { - state.byUrl[listUrl] = NEW_LIST_STATE - } - return true - }) - } - }) -}) - -/** - * Converts a filter to the corresponding string key - * @param filter the filter to convert - */ -function filterToKey(filter) { - var _a, _b, _c, _d - return ( - ((_a = filter.address) !== null && _a !== void 0 ? _a : '') + - ':' + - ((_d = - (_c = - (_b = filter.topics) === null || _b === void 0 - ? void 0 - : _b.map(function (topic) { - return topic ? (Array.isArray(topic) ? topic.join(';') : topic) : '\0' - })) === null || _c === void 0 - ? void 0 - : _c.join('-')) !== null && _d !== void 0 - ? _d - : '') - ) -} -/** - * Convert a filter key to the corresponding filter - * @param key key to convert - */ -function keyToFilter(key) { - var pcs = key.split(':') - var address = pcs[0] - var topics = pcs[1].split('-').map(function (topic) { - if (topic === '\0') return null - var parts = topic.split(';') - if (parts.length === 1) return parts[0] - return parts - }) - return { - address: address.length === 0 ? undefined : address, - topics, - } -} - -var _a$8 -var slice = toolkit.createSlice({ - name: 'logs', - initialState: {}, - reducers: { - addListener(state, _a) { - var _b = _a.payload, - chainId = _b.chainId, - filter = _b.filter - if (!state[chainId]) state[chainId] = {} - var key = filterToKey(filter) - if (!state[chainId][key]) - state[chainId][key] = { - listeners: 1, - } - else state[chainId][key].listeners++ - }, - fetchingLogs(state, _a) { - var e_1, _b - var _c = _a.payload, - chainId = _c.chainId, - filters = _c.filters, - blockNumber = _c.blockNumber - if (!state[chainId]) return - try { - for ( - var filters_1 = __values(filters), filters_1_1 = filters_1.next(); - !filters_1_1.done; - filters_1_1 = filters_1.next() - ) { - var filter = filters_1_1.value - var key = filterToKey(filter) - if (!state[chainId][key]) continue - state[chainId][key].fetchingBlockNumber = blockNumber - } - } catch (e_1_1) { - e_1 = { error: e_1_1 } - } finally { - try { - if (filters_1_1 && !filters_1_1.done && (_b = filters_1.return)) _b.call(filters_1) - } finally { - if (e_1) throw e_1.error - } - } - }, - fetchedLogs(state, _a) { - var _b = _a.payload, - chainId = _b.chainId, - filter = _b.filter, - results = _b.results - if (!state[chainId]) return - var key = filterToKey(filter) - var fetchState = state[chainId][key] - if (!fetchState || (fetchState.results && fetchState.results.blockNumber > results.blockNumber)) return - fetchState.results = results - }, - fetchedLogsError(state, _a) { - var _b = _a.payload, - chainId = _b.chainId, - filter = _b.filter, - blockNumber = _b.blockNumber - if (!state[chainId]) return - var key = filterToKey(filter) - var fetchState = state[chainId][key] - if (!fetchState || (fetchState.results && fetchState.results.blockNumber > blockNumber)) return - fetchState.results = { - blockNumber, - error: true, - } - }, - removeListener(state, _a) { - var _b = _a.payload, - chainId = _b.chainId, - filter = _b.filter - if (!state[chainId]) return - var key = filterToKey(filter) - if (!state[chainId][key]) return - state[chainId][key].listeners-- - }, - }, -}) -var logs = slice.reducer -;(_a$8 = slice.actions), _a$8.addListener -_a$8.removeListener -var fetchedLogs = _a$8.fetchedLogs, - fetchedLogsError = _a$8.fetchedLogsError, - fetchingLogs = _a$8.fetchingLogs - -var Field$2 -;(function (Field) { - Field['CURRENCY_A'] = 'CURRENCY_A' - Field['CURRENCY_B'] = 'CURRENCY_B' -})(Field$2 || (Field$2 = {})) -var typeInput$2 = toolkit.createAction('mint/typeInputMint') -var resetMintState$1 = toolkit.createAction('mint/resetMintState') - -var initialState$4 = { - independentField: Field$2.CURRENCY_A, - typedValue: '', - otherTypedValue: '', - startPriceTypedValue: '', - leftRangeTypedValue: '', - rightRangeTypedValue: '', -} -var mint = toolkit.createReducer(initialState$4, function (builder) { - return builder - .addCase(resetMintState$1, function () { - return initialState$4 - }) - .addCase(typeInput$2, function (state, _a) { - var _b = _a.payload, - field = _b.field, - typedValue = _b.typedValue, - noLiquidity = _b.noLiquidity - if (noLiquidity) { - // they're typing into the field they've last typed in - if (field === state.independentField) { - return __assign(__assign({}, state), { independentField: field, typedValue }) - } - // they're typing into a new field, store the other value - else { - return __assign(__assign({}, state), { - independentField: field, - typedValue, - otherTypedValue: state.typedValue, - }) - } - } else { - return __assign(__assign({}, state), { independentField: field, typedValue, otherTypedValue: '' }) - } - }) -}) - -var Field$1 -;(function (Field) { - Field['CURRENCY_A'] = 'CURRENCY_A' - Field['CURRENCY_B'] = 'CURRENCY_B' -})(Field$1 || (Field$1 = {})) -var Bound -;(function (Bound) { - Bound['LOWER'] = 'LOWER' - Bound['UPPER'] = 'UPPER' -})(Bound || (Bound = {})) -var typeInput$1 = toolkit.createAction('mintV3/typeInputMint') -var typeStartPriceInput = toolkit.createAction('mintV3/typeStartPriceInput') -var typeLeftRangeInput = toolkit.createAction('mintV3/typeLeftRangeInput') -var typeRightRangeInput = toolkit.createAction('mintV3/typeRightRangeInput') -var resetMintState = toolkit.createAction('mintV3/resetMintState') -var setFullRange = toolkit.createAction('mintV3/setFullRange') - -var initialState$3 = { - independentField: Field$1.CURRENCY_A, - typedValue: '', - startPriceTypedValue: '', - leftRangeTypedValue: '', - rightRangeTypedValue: '', -} -var mintV3 = toolkit.createReducer(initialState$3, function (builder) { - return builder - .addCase(resetMintState, function () { - return initialState$3 - }) - .addCase(setFullRange, function (state) { - return __assign(__assign({}, state), { leftRangeTypedValue: true, rightRangeTypedValue: true }) - }) - .addCase(typeStartPriceInput, function (state, _a) { - var typedValue = _a.payload.typedValue - return __assign(__assign({}, state), { startPriceTypedValue: typedValue }) - }) - .addCase(typeLeftRangeInput, function (state, _a) { - var typedValue = _a.payload.typedValue - return __assign(__assign({}, state), { leftRangeTypedValue: typedValue }) - }) - .addCase(typeRightRangeInput, function (state, _a) { - var typedValue = _a.payload.typedValue - return __assign(__assign({}, state), { rightRangeTypedValue: typedValue }) - }) - .addCase(typeInput$1, function (state, _a) { - var _b = _a.payload, - field = _b.field, - typedValue = _b.typedValue, - noLiquidity = _b.noLiquidity - if (noLiquidity) { - // they're typing into the field they've last typed in - if (field === state.independentField) { - return __assign(__assign({}, state), { independentField: field, typedValue }) - } - // they're typing into a new field, store the other value - else { - return __assign(__assign({}, state), { independentField: field, typedValue }) - } - } else { - return __assign(__assign({}, state), { independentField: field, typedValue }) - } - }) -}) - -var protocols = [routerSdk.Protocol.V2, routerSdk.Protocol.V3] -var DEFAULT_QUERY_PARAMS = { - protocols: protocols - .map(function (p) { - return p.toLowerCase() - }) - .join(','), - // example other params - // forceCrossProtocol: 'true', - // minSplits: '5', -} -function getClientSideQuote(_a) { - var tokenInAddress = _a.tokenInAddress, - tokenInChainId = _a.tokenInChainId, - tokenInDecimals = _a.tokenInDecimals, - tokenInSymbol = _a.tokenInSymbol, - tokenOutAddress = _a.tokenOutAddress, - tokenOutChainId = _a.tokenOutChainId, - tokenOutDecimals = _a.tokenOutDecimals, - tokenOutSymbol = _a.tokenOutSymbol, - amount = _a.amount, - type = _a.type - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - return [ - 4 /*yield*/, - Promise.resolve().then(function () { - return index - }), - ] - case 1: - return [ - 2 /*return*/, - _b.sent().getQuote( - { - type, - chainId: tokenInChainId, - tokenIn: { - address: tokenInAddress, - chainId: tokenInChainId, - decimals: tokenInDecimals, - symbol: tokenInSymbol, - }, - tokenOut: { - address: tokenOutAddress, - chainId: tokenOutChainId, - decimals: tokenOutDecimals, - symbol: tokenOutSymbol, - }, - amount, - }, - { protocols } - ), - ] - } - }) - }) -} -var routingApi = react.createApi({ - reducerPath: 'routingApi', - baseQuery: react.fetchBaseQuery({ - baseUrl: 'https://api.uniswap.org/v1/', - }), - endpoints(build) { - return { - getQuote: build.query({ - queryFn(args, _api, _extraOptions, fetch) { - return __awaiter(this, void 0, void 0, function () { - var tokenInAddress, - tokenInChainId, - tokenOutAddress, - tokenOutChainId, - amount, - useClientSideRouter, - type, - result, - query, - e_1 - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - ;(tokenInAddress = args.tokenInAddress), - (tokenInChainId = args.tokenInChainId), - (tokenOutAddress = args.tokenOutAddress), - (tokenOutChainId = args.tokenOutChainId), - (amount = args.amount), - (useClientSideRouter = args.useClientSideRouter), - (type = args.type) - _a.label = 1 - case 1: - _a.trys.push([1, 6, , 7]) - if (!useClientSideRouter) return [3 /*break*/, 3] - return [4 /*yield*/, getClientSideQuote(args)] - case 2: - result = _a.sent() - return [3 /*break*/, 5] - case 3: - query = qs__default['default'].stringify( - __assign(__assign({}, DEFAULT_QUERY_PARAMS), { - tokenInAddress, - tokenInChainId, - tokenOutAddress, - tokenOutChainId, - amount, - type, - }) - ) - return [4 /*yield*/, fetch('quote?' + query)] - case 4: - result = _a.sent() - _a.label = 5 - case 5: - return [2 /*return*/, { data: result.data }] - case 6: - e_1 = _a.sent() - // TODO: fall back to client-side quoter when auto router fails. - // deprecate 'legacy' v2/v3 routers first. - return [2 /*return*/, { error: e_1 }] - case 7: - return [2 /*return*/] - } - }) - }) - }, - keepUnusedDataFor: ms__default['default']( - templateObject_1$1b || (templateObject_1$1b = __makeTemplateObject(['10s'], ['10s'])) - ), - extraOptions: { - maxRetries: 0, - }, - }), - } - }, -}) -var useGetQuoteQuery = routingApi.useGetQuoteQuery -var templateObject_1$1b - -var Field -;(function (Field) { - Field['INPUT'] = 'INPUT' - Field['OUTPUT'] = 'OUTPUT' -})(Field || (Field = {})) -var selectCurrency = toolkit.createAction('swap/selectCurrency') -var switchCurrencies = toolkit.createAction('swap/switchCurrencies') -var typeInput = toolkit.createAction('swap/typeInput') -var replaceSwapState = toolkit.createAction('swap/replaceSwapState') -var setRecipient = toolkit.createAction('swap/setRecipient') - -var CHAIN_DATA_ABI = [ - { - inputs: [], - name: 'latestAnswer', - outputs: [{ internalType: 'int256', name: '', type: 'int256' }], - stateMutability: 'view', - type: 'function', - }, -] -/** - * Returns the price of 1 gas in WEI for the currently selected network using the chainlink fast gas price oracle - */ -function useGasPrice() { - var _a, _b - var address = useENSAddress('fast-gas-gwei.data.eth').address - var contract = useContract(address !== null && address !== void 0 ? address : undefined, CHAIN_DATA_ABI, false) - var resultStr = - (_b = (_a = useSingleCallResult(contract, 'latestAnswer').result) === null || _a === void 0 ? void 0 : _a[0]) === - null || _b === void 0 - ? void 0 - : _b.toString() - return typeof resultStr === 'string' ? JSBI__default['default'].BigInt(resultStr) : undefined -} - -/** - * Parses a CurrencyAmount from the passed string. - * Returns the CurrencyAmount, or undefined if parsing fails. - */ -function tryParseCurrencyAmount(value, currency) { - if (!value || !currency) { - return undefined - } - try { - var typedValueParsed = units.parseUnits(value, currency.decimals).toString() - if (typedValueParsed !== '0') { - return sdkCore.CurrencyAmount.fromRawAmount(currency, JSBI__default['default'].BigInt(typedValueParsed)) - } - } catch (error) { - // fails if the user specifies too many decimal places of precision (or maybe exceed max uint?) - console.debug('Failed to parse input amount: "' + value + '"', error) - } - return undefined -} - -// returns whether tradeB is better than tradeA by at least a threshold percentage amount -// only used by v2 hooks -function isTradeBetter(tradeA, tradeB, minimumDelta) { - if (minimumDelta === void 0) { - minimumDelta = ZERO_PERCENT - } - if (tradeA && !tradeB) return false - if (tradeB && !tradeA) return true - if (!tradeA || !tradeB) return undefined - if ( - tradeA.tradeType !== tradeB.tradeType || - !tradeA.inputAmount.currency.equals(tradeB.inputAmount.currency) || - !tradeA.outputAmount.currency.equals(tradeB.outputAmount.currency) - ) { - throw new Error('Comparing incomparable trades') - } - if (minimumDelta.equalTo(ZERO_PERCENT)) { - return tradeA.executionPrice.lessThan(tradeB.executionPrice) - } else { - return tradeA.executionPrice.asFraction - .multiply(minimumDelta.add(ONE_HUNDRED_PERCENT)) - .lessThan(tradeB.executionPrice) - } -} - -function useAllCurrencyCombinations(currencyA, currencyB) { - var chainId = currencyA === null || currencyA === void 0 ? void 0 : currencyA.chainId - var _a = __read( - chainId - ? [ - currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped, - currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped, - ] - : [undefined, undefined], - 2 - ), - tokenA = _a[0], - tokenB = _a[1] - var bases = React.useMemo( - function () { - var _a, _b, _c, _d, _e - if (!chainId || chainId !== (tokenB === null || tokenB === void 0 ? void 0 : tokenB.chainId)) return [] - var common = (_a = BASES_TO_CHECK_TRADES_AGAINST[chainId]) !== null && _a !== void 0 ? _a : [] - var additionalA = tokenA - ? (_c = (_b = ADDITIONAL_BASES[chainId]) === null || _b === void 0 ? void 0 : _b[tokenA.address]) !== null && - _c !== void 0 - ? _c - : [] - : [] - var additionalB = tokenB - ? (_e = (_d = ADDITIONAL_BASES[chainId]) === null || _d === void 0 ? void 0 : _d[tokenB.address]) !== null && - _e !== void 0 - ? _e - : [] - : [] - return __spreadArray( - __spreadArray(__spreadArray([], __read(common), false), __read(additionalA), false), - __read(additionalB), - false - ) - }, - [chainId, tokenA, tokenB] - ) - var basePairs = React.useMemo( - function () { - return ( - bases - .flatMap(function (base) { - return bases.map(function (otherBase) { - return [base, otherBase] - }) - }) - // though redundant with the first filter below, that expression runs more often, so this is probably worthwhile - .filter(function (_a) { - var _b = __read(_a, 2), - t0 = _b[0], - t1 = _b[1] - return !t0.equals(t1) - }) - ) - }, - [bases] - ) - return React.useMemo( - function () { - return tokenA && tokenB - ? __spreadArray( - __spreadArray( - __spreadArray( - [ - // the direct pair - [tokenA, tokenB], - ], - __read( - bases.map(function (base) { - return [tokenA, base] - }) - ), - false - ), - __read( - bases.map(function (base) { - return [tokenB, base] - }) - ), - false - ), - __read(basePairs), - false - ) - .filter(function (_a) { - var _b = __read(_a, 2), - t0 = _b[0], - t1 = _b[1] - return !t0.equals(t1) - }) - // filter out duplicate pairs - .filter(function (_a, i, otherPairs) { - var _b = __read(_a, 2), - t0 = _b[0], - t1 = _b[1] - // find the first index in the array at which there are the same 2 tokens as the current - var firstIndexInOtherPairs = otherPairs.findIndex(function (_a) { - var _b = __read(_a, 2), - t0Other = _b[0], - t1Other = _b[1] - return (t0.equals(t0Other) && t1.equals(t1Other)) || (t0.equals(t1Other) && t1.equals(t0Other)) - }) - // only accept the first occurrence of the same 2 tokens - return firstIndexInOtherPairs === i - }) - // optionally filter out some pairs for tokens with custom bases defined - .filter(function (_a) { - var _b = __read(_a, 2), - tokenA = _b[0], - tokenB = _b[1] - if (!chainId) return true - var customBases = CUSTOM_BASES[chainId] - var customBasesA = customBases === null || customBases === void 0 ? void 0 : customBases[tokenA.address] - var customBasesB = customBases === null || customBases === void 0 ? void 0 : customBases[tokenB.address] - if (!customBasesA && !customBasesB) return true - if ( - customBasesA && - !customBasesA.find(function (base) { - return tokenB.equals(base) - }) - ) - return false - if ( - customBasesB && - !customBasesB.find(function (base) { - return tokenA.equals(base) - }) - ) - return false - return true - }) - : [] - }, - [tokenA, tokenB, bases, basePairs, chainId] - ) -} - -var PAIR_INTERFACE = new abi$7.Interface(abi$4) -var PairState -;(function (PairState) { - PairState[(PairState['LOADING'] = 0)] = 'LOADING' - PairState[(PairState['NOT_EXISTS'] = 1)] = 'NOT_EXISTS' - PairState[(PairState['EXISTS'] = 2)] = 'EXISTS' - PairState[(PairState['INVALID'] = 3)] = 'INVALID' -})(PairState || (PairState = {})) -function useV2Pairs(currencies) { - var tokens = React.useMemo( - function () { - return currencies.map(function (_a) { - var _b = __read(_a, 2), - currencyA = _b[0], - currencyB = _b[1] - return [ - currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped, - currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped, - ] - }) - }, - [currencies] - ) - var pairAddresses = React.useMemo( - function () { - return tokens.map(function (_a) { - var _b = __read(_a, 2), - tokenA = _b[0], - tokenB = _b[1] - return tokenA && - tokenB && - tokenA.chainId === tokenB.chainId && - !tokenA.equals(tokenB) && - V2_FACTORY_ADDRESSES[tokenA.chainId] - ? v2Sdk.computePairAddress({ - factoryAddress: V2_FACTORY_ADDRESSES[tokenA.chainId], - tokenA, - tokenB, - }) - : undefined - }) - }, - [tokens] - ) - var results = useMultipleContractSingleData(pairAddresses, PAIR_INTERFACE, 'getReserves') - return React.useMemo( - function () { - return results.map(function (result, i) { - var reserves = result.result, - loading = result.loading - var tokenA = tokens[i][0] - var tokenB = tokens[i][1] - if (loading) return [PairState.LOADING, null] - if (!tokenA || !tokenB || tokenA.equals(tokenB)) return [PairState.INVALID, null] - if (!reserves) return [PairState.NOT_EXISTS, null] - var reserve0 = reserves.reserve0, - reserve1 = reserves.reserve1 - var _a = __read(tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA], 2), - token0 = _a[0], - token1 = _a[1] - return [ - PairState.EXISTS, - new v2Sdk.Pair( - sdkCore.CurrencyAmount.fromRawAmount(token0, reserve0.toString()), - sdkCore.CurrencyAmount.fromRawAmount(token1, reserve1.toString()) - ), - ] - }) - }, - [results, tokens] - ) -} - -function useAllCommonPairs(currencyA, currencyB) { - var allCurrencyCombinations = useAllCurrencyCombinations(currencyA, currencyB) - var allPairs = useV2Pairs(allCurrencyCombinations) - return React.useMemo( - function () { - return Object.values( - allPairs - // filter out invalid pairs - .filter(function (result) { - return Boolean(result[0] === PairState.EXISTS && result[1]) - }) - .map(function (_a) { - var _b = __read(_a, 2), - pair = _b[1] - return pair - }) - ) - }, - [allPairs] - ) -} -var MAX_HOPS = 3 -/** - * Returns the best v2 trade for a desired swap - * @param tradeType whether the swap is an exact in/out - * @param amountSpecified the exact amount to swap in/out - * @param otherCurrency the desired output/payment currency - */ -function useBestV2Trade(tradeType, amountSpecified, otherCurrency, _a) { - var _b = _a === void 0 ? {} : _a, - _c = _b.maxHops, - maxHops = _c === void 0 ? MAX_HOPS : _c - var _d = __read( - React.useMemo( - function () { - return tradeType === sdkCore.TradeType.EXACT_INPUT - ? [ - amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, - otherCurrency, - ] - : [ - otherCurrency, - amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, - ] - }, - [tradeType, amountSpecified, otherCurrency] - ), - 2 - ), - currencyIn = _d[0], - currencyOut = _d[1] - var allowedPairs = useAllCommonPairs(currencyIn, currencyOut) - return React.useMemo( - function () { - var _a, _b, _c, _d - if (amountSpecified && currencyIn && currencyOut && allowedPairs.length > 0) { - if (maxHops === 1) { - var options = { maxHops: 1, maxNumResults: 1 } - if (tradeType === sdkCore.TradeType.EXACT_INPUT) { - var amountIn = amountSpecified - return (_a = v2Sdk.Trade.bestTradeExactIn(allowedPairs, amountIn, currencyOut, options)[0]) !== null && - _a !== void 0 - ? _a - : null - } else { - var amountOut = amountSpecified - return (_b = v2Sdk.Trade.bestTradeExactOut(allowedPairs, currencyIn, amountOut, options)[0]) !== null && - _b !== void 0 - ? _b - : null - } - } - // search through trades with varying hops, find best trade out of them - var bestTradeSoFar = null - for (var i = 1; i <= maxHops; i++) { - var options = { maxHops: i, maxNumResults: 1 } - var currentTrade = void 0 - if (tradeType === sdkCore.TradeType.EXACT_INPUT) { - var amountIn = amountSpecified - currentTrade = - (_c = v2Sdk.Trade.bestTradeExactIn(allowedPairs, amountIn, currencyOut, options)[0]) !== null && - _c !== void 0 - ? _c - : null - } else { - var amountOut = amountSpecified - currentTrade = - (_d = v2Sdk.Trade.bestTradeExactOut(allowedPairs, currencyIn, amountOut, options)[0]) !== null && - _d !== void 0 - ? _d - : null - } - // if current trade is best yet, save it - if (isTradeBetter(bestTradeSoFar, currentTrade, BETTER_TRADE_LESS_HOPS_THRESHOLD)) { - bestTradeSoFar = currentTrade - } - } - return bestTradeSoFar - } - return null - }, - [tradeType, amountSpecified, currencyIn, currencyOut, allowedPairs, maxHops] - ) -} - -var TradeState -;(function (TradeState) { - TradeState[(TradeState['LOADING'] = 0)] = 'LOADING' - TradeState[(TradeState['INVALID'] = 1)] = 'INVALID' - TradeState[(TradeState['NO_ROUTE_FOUND'] = 2)] = 'NO_ROUTE_FOUND' - TradeState[(TradeState['VALID'] = 3)] = 'VALID' - TradeState[(TradeState['SYNCING'] = 4)] = 'SYNCING' -})(TradeState || (TradeState = {})) -var InterfaceTrade = /** @class */ (function (_super) { - __extends(InterfaceTrade, _super) - function InterfaceTrade(_a) { - var gasUseEstimateUSD = _a.gasUseEstimateUSD, - routes = __rest(_a, ['gasUseEstimateUSD']) - var _this = _super.call(this, routes) || this - _this.gasUseEstimateUSD = gasUseEstimateUSD - return _this - } - return InterfaceTrade -})(routerSdk.Trade) - -var abi = [ - { - inputs: [], - name: 'feeGrowthGlobal0X128', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'feeGrowthGlobal1X128', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'liquidity', - outputs: [ - { - internalType: 'uint128', - name: '', - type: 'uint128', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'index', - type: 'uint256', - }, - ], - name: 'observations', - outputs: [ - { - internalType: 'uint32', - name: 'blockTimestamp', - type: 'uint32', - }, - { - internalType: 'int56', - name: 'tickCumulative', - type: 'int56', - }, - { - internalType: 'uint160', - name: 'secondsPerLiquidityCumulativeX128', - type: 'uint160', - }, - { - internalType: 'bool', - name: 'initialized', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes32', - name: 'key', - type: 'bytes32', - }, - ], - name: 'positions', - outputs: [ - { - internalType: 'uint128', - name: '_liquidity', - type: 'uint128', - }, - { - internalType: 'uint256', - name: 'feeGrowthInside0LastX128', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'feeGrowthInside1LastX128', - type: 'uint256', - }, - { - internalType: 'uint128', - name: 'tokensOwed0', - type: 'uint128', - }, - { - internalType: 'uint128', - name: 'tokensOwed1', - type: 'uint128', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'protocolFees', - outputs: [ - { - internalType: 'uint128', - name: 'token0', - type: 'uint128', - }, - { - internalType: 'uint128', - name: 'token1', - type: 'uint128', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'slot0', - outputs: [ - { - internalType: 'uint160', - name: 'sqrtPriceX96', - type: 'uint160', - }, - { - internalType: 'int24', - name: 'tick', - type: 'int24', - }, - { - internalType: 'uint16', - name: 'observationIndex', - type: 'uint16', - }, - { - internalType: 'uint16', - name: 'observationCardinality', - type: 'uint16', - }, - { - internalType: 'uint16', - name: 'observationCardinalityNext', - type: 'uint16', - }, - { - internalType: 'uint8', - name: 'feeProtocol', - type: 'uint8', - }, - { - internalType: 'bool', - name: 'unlocked', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'int16', - name: 'wordPosition', - type: 'int16', - }, - ], - name: 'tickBitmap', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'int24', - name: 'tick', - type: 'int24', - }, - ], - name: 'ticks', - outputs: [ - { - internalType: 'uint128', - name: 'liquidityGross', - type: 'uint128', - }, - { - internalType: 'int128', - name: 'liquidityNet', - type: 'int128', - }, - { - internalType: 'uint256', - name: 'feeGrowthOutside0X128', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'feeGrowthOutside1X128', - type: 'uint256', - }, - { - internalType: 'int56', - name: 'tickCumulativeOutside', - type: 'int56', - }, - { - internalType: 'uint160', - name: 'secondsPerLiquidityOutsideX128', - type: 'uint160', - }, - { - internalType: 'uint32', - name: 'secondsOutside', - type: 'uint32', - }, - { - internalType: 'bool', - name: 'initialized', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, -] - -var POOL_STATE_INTERFACE = new abi$7.Interface(abi) -var PoolState -;(function (PoolState) { - PoolState[(PoolState['LOADING'] = 0)] = 'LOADING' - PoolState[(PoolState['NOT_EXISTS'] = 1)] = 'NOT_EXISTS' - PoolState[(PoolState['EXISTS'] = 2)] = 'EXISTS' - PoolState[(PoolState['INVALID'] = 3)] = 'INVALID' -})(PoolState || (PoolState = {})) -function usePools(poolKeys) { - var chainId = useActiveWeb3React().chainId - var transformed = React.useMemo( - function () { - return poolKeys.map(function (_a) { - var _b = __read(_a, 3), - currencyA = _b[0], - currencyB = _b[1], - feeAmount = _b[2] - if (!chainId || !currencyA || !currencyB || !feeAmount) return null - var tokenA = currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped - var tokenB = currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped - if (!tokenA || !tokenB || tokenA.equals(tokenB)) return null - var _c = __read(tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA], 2), - token0 = _c[0], - token1 = _c[1] - return [token0, token1, feeAmount] - }) - }, - [chainId, poolKeys] - ) - var poolAddresses = React.useMemo( - function () { - var v3CoreFactoryAddress = chainId && V3_CORE_FACTORY_ADDRESSES[chainId] - return transformed.map(function (value) { - if (!v3CoreFactoryAddress || !value) return undefined - return v3Sdk.computePoolAddress({ - factoryAddress: v3CoreFactoryAddress, - tokenA: value[0], - tokenB: value[1], - fee: value[2], - }) - }) - }, - [chainId, transformed] - ) - var slot0s = useMultipleContractSingleData(poolAddresses, POOL_STATE_INTERFACE, 'slot0') - var liquidities = useMultipleContractSingleData(poolAddresses, POOL_STATE_INTERFACE, 'liquidity') - return React.useMemo( - function () { - return poolKeys.map(function (_key, index) { - var _a - var _b = __read((_a = transformed[index]) !== null && _a !== void 0 ? _a : [], 3), - token0 = _b[0], - token1 = _b[1], - fee = _b[2] - if (!token0 || !token1 || !fee) return [PoolState.INVALID, null] - var _c = slot0s[index], - slot0 = _c.result, - slot0Loading = _c.loading, - slot0Valid = _c.valid - var _d = liquidities[index], - liquidity = _d.result, - liquidityLoading = _d.loading, - liquidityValid = _d.valid - if (!slot0Valid || !liquidityValid) return [PoolState.INVALID, null] - if (slot0Loading || liquidityLoading) return [PoolState.LOADING, null] - if (!slot0 || !liquidity) return [PoolState.NOT_EXISTS, null] - if (!slot0.sqrtPriceX96 || slot0.sqrtPriceX96.eq(0)) return [PoolState.NOT_EXISTS, null] - try { - return [PoolState.EXISTS, new v3Sdk.Pool(token0, token1, fee, slot0.sqrtPriceX96, liquidity[0], slot0.tick)] - } catch (error) { - console.error('Error when constructing the pool', error) - return [PoolState.NOT_EXISTS, null] - } - }) - }, - [liquidities, poolKeys, slot0s, transformed] - ) -} - -/** - * Returns all the existing pools that should be considered for swapping between an input currency and an output currency - * @param currencyIn the input currency - * @param currencyOut the output currency - */ -function useV3SwapPools(currencyIn, currencyOut) { - var chainId = useActiveWeb3React().chainId - var allCurrencyCombinations = useAllCurrencyCombinations(currencyIn, currencyOut) - var allCurrencyCombinationsWithAllFees = React.useMemo( - function () { - return allCurrencyCombinations.reduce(function (list, _a) { - var _b = __read(_a, 2), - tokenA = _b[0], - tokenB = _b[1] - return chainId === SupportedChainId.MAINNET - ? list.concat([ - [tokenA, tokenB, v3Sdk.FeeAmount.LOW], - [tokenA, tokenB, v3Sdk.FeeAmount.MEDIUM], - [tokenA, tokenB, v3Sdk.FeeAmount.HIGH], - ]) - : list.concat([ - [tokenA, tokenB, v3Sdk.FeeAmount.LOWEST], - [tokenA, tokenB, v3Sdk.FeeAmount.LOW], - [tokenA, tokenB, v3Sdk.FeeAmount.MEDIUM], - [tokenA, tokenB, v3Sdk.FeeAmount.HIGH], - ]) - }, []) - }, - [allCurrencyCombinations, chainId] - ) - var pools = usePools(allCurrencyCombinationsWithAllFees) - return React.useMemo( - function () { - return { - pools: pools - .filter(function (tuple) { - return tuple[0] === PoolState.EXISTS && tuple[1] !== null - }) - .map(function (_a) { - var _b = __read(_a, 2), - pool = _b[1] - return pool - }), - loading: pools.some(function (_a) { - var _b = __read(_a, 1), - state = _b[0] - return state === PoolState.LOADING - }), - } - }, - [pools] - ) -} - -/** - * Returns true if poolA is equivalent to poolB - * @param poolA one of the two pools - * @param poolB the other pool - */ -function poolEquals(poolA, poolB) { - return ( - poolA === poolB || - (poolA.token0.equals(poolB.token0) && poolA.token1.equals(poolB.token1) && poolA.fee === poolB.fee) - ) -} -function computeAllRoutes(currencyIn, currencyOut, pools, chainId, currentPath, allPaths, startCurrencyIn, maxHops) { - var e_1, _a - if (currentPath === void 0) { - currentPath = [] - } - if (allPaths === void 0) { - allPaths = [] - } - if (startCurrencyIn === void 0) { - startCurrencyIn = currencyIn - } - if (maxHops === void 0) { - maxHops = 2 - } - var tokenIn = currencyIn === null || currencyIn === void 0 ? void 0 : currencyIn.wrapped - var tokenOut = currencyOut === null || currencyOut === void 0 ? void 0 : currencyOut.wrapped - if (!tokenIn || !tokenOut) throw new Error('Missing tokenIn/tokenOut') - var _loop_1 = function (pool) { - if ( - !pool.involvesToken(tokenIn) || - currentPath.find(function (pathPool) { - return poolEquals(pool, pathPool) - }) - ) - return 'continue' - var outputToken = pool.token0.equals(tokenIn) ? pool.token1 : pool.token0 - if (outputToken.equals(tokenOut)) { - allPaths.push( - new v3Sdk.Route( - __spreadArray(__spreadArray([], __read(currentPath), false), [pool], false), - startCurrencyIn, - currencyOut - ) - ) - } else if (maxHops > 1) { - computeAllRoutes( - outputToken, - currencyOut, - pools, - chainId, - __spreadArray(__spreadArray([], __read(currentPath), false), [pool], false), - allPaths, - startCurrencyIn, - maxHops - 1 - ) - } - } - try { - for (var pools_1 = __values(pools), pools_1_1 = pools_1.next(); !pools_1_1.done; pools_1_1 = pools_1.next()) { - var pool = pools_1_1.value - _loop_1(pool) - } - } catch (e_1_1) { - e_1 = { error: e_1_1 } - } finally { - try { - if (pools_1_1 && !pools_1_1.done && (_a = pools_1.return)) _a.call(pools_1) - } finally { - if (e_1) throw e_1.error - } - } - return allPaths -} -/** - * Returns all the routes from an input currency to an output currency - * @param currencyIn the input currency - * @param currencyOut the output currency - */ -function useAllV3Routes(currencyIn, currencyOut) { - var chainId = useActiveWeb3React().chainId - var _a = useV3SwapPools(currencyIn, currencyOut), - pools = _a.pools, - poolsLoading = _a.loading - return React.useMemo( - function () { - if (poolsLoading || !chainId || !pools || !currencyIn || !currencyOut) return { loading: true, routes: [] } - var routes = computeAllRoutes(currencyIn, currencyOut, pools, chainId, [], [], currencyIn, 2) - return { loading: false, routes } - }, - [chainId, currencyIn, currencyOut, pools, poolsLoading] - ) -} - -var _a$7 -var QUOTE_GAS_OVERRIDES = - ((_a$7 = {}), - (_a$7[SupportedChainId.ARBITRUM_ONE] = 25000000), - (_a$7[SupportedChainId.ARBITRUM_RINKEBY] = 25000000), - _a$7) -var DEFAULT_GAS_QUOTE = 2000000 -/** - * Returns the best v3 trade for a desired swap - * @param tradeType whether the swap is an exact in/out - * @param amountSpecified the exact amount to swap in/out - * @param otherCurrency the desired output/payment currency - */ -function useClientSideV3Trade(tradeType, amountSpecified, otherCurrency) { - var _a - var _b = __read( - React.useMemo( - function () { - return tradeType === sdkCore.TradeType.EXACT_INPUT - ? [ - amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, - otherCurrency, - ] - : [ - otherCurrency, - amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, - ] - }, - [tradeType, amountSpecified, otherCurrency] - ), - 2 - ), - currencyIn = _b[0], - currencyOut = _b[1] - var _c = useAllV3Routes(currencyIn, currencyOut), - routes = _c.routes, - routesLoading = _c.loading - var quoter = useV3Quoter() - var chainId = useActiveWeb3React().chainId - var quotesResults = useSingleContractWithCallData( - quoter, - amountSpecified - ? routes.map(function (route) { - return v3Sdk.SwapQuoter.quoteCallParameters(route, amountSpecified, tradeType).calldata - }) - : [], - { - gasRequired: chainId - ? (_a = QUOTE_GAS_OVERRIDES[chainId]) !== null && _a !== void 0 - ? _a - : DEFAULT_GAS_QUOTE - : undefined, - } - ) - return React.useMemo( - function () { - if ( - !amountSpecified || - !currencyIn || - !currencyOut || - quotesResults.some(function (_a) { - var valid = _a.valid - return !valid - }) || - // skip when tokens are the same - (tradeType === sdkCore.TradeType.EXACT_INPUT - ? amountSpecified.currency.equals(currencyOut) - : amountSpecified.currency.equals(currencyIn)) - ) { - return { - state: TradeState.INVALID, - trade: undefined, - } - } - if ( - routesLoading || - quotesResults.some(function (_a) { - var loading = _a.loading - return loading - }) - ) { - return { - state: TradeState.LOADING, - trade: undefined, - } - } - var _a = quotesResults.reduce( - function (currentBest, _a, i) { - var result = _a.result - if (!result) return currentBest - // overwrite the current best if it's not defined or if this route is better - if (tradeType === sdkCore.TradeType.EXACT_INPUT) { - var amountOut_1 = sdkCore.CurrencyAmount.fromRawAmount(currencyOut, result.amountOut.toString()) - if ( - currentBest.amountOut === null || - JSBI__default['default'].lessThan(currentBest.amountOut.quotient, amountOut_1.quotient) - ) { - return { - bestRoute: routes[i], - amountIn: amountSpecified, - amountOut: amountOut_1, - } - } - } else { - var amountIn_1 = sdkCore.CurrencyAmount.fromRawAmount(currencyIn, result.amountIn.toString()) - if ( - currentBest.amountIn === null || - JSBI__default['default'].greaterThan(currentBest.amountIn.quotient, amountIn_1.quotient) - ) { - return { - bestRoute: routes[i], - amountIn: amountIn_1, - amountOut: amountSpecified, - } - } - } - return currentBest - }, - { - bestRoute: null, - amountIn: null, - amountOut: null, - } - ), - bestRoute = _a.bestRoute, - amountIn = _a.amountIn, - amountOut = _a.amountOut - if (!bestRoute || !amountIn || !amountOut) { - return { - state: TradeState.NO_ROUTE_FOUND, - trade: undefined, - } - } - return { - state: TradeState.VALID, - trade: new InterfaceTrade({ - v2Routes: [], - v3Routes: [ - { - routev3: bestRoute, - inputAmount: amountIn, - outputAmount: amountOut, - }, - ], - tradeType, - }), - } - }, - [amountSpecified, currencyIn, currencyOut, quotesResults, routes, routesLoading, tradeType] - ) -} - -var _a$6 -// Stablecoin amounts used when calculating spot price for a given currency. -// The amount is large enough to filter low liquidity pairs. -var STABLECOIN_AMOUNT_OUT = - ((_a$6 = {}), - (_a$6[SupportedChainId.MAINNET] = sdkCore.CurrencyAmount.fromRawAmount(USDC, 100000000000)), - (_a$6[SupportedChainId.ARBITRUM_ONE] = sdkCore.CurrencyAmount.fromRawAmount(USDC_ARBITRUM, 10000000000)), - (_a$6[SupportedChainId.OPTIMISM] = sdkCore.CurrencyAmount.fromRawAmount(DAI_OPTIMISM, 1e22)), - (_a$6[SupportedChainId.POLYGON] = sdkCore.CurrencyAmount.fromRawAmount(USDC_POLYGON, 10000000000)), - _a$6) -/** - * Returns the price in USDC of the input currency - * @param currency currency to compute the USDC price of - */ -function useUSDCPrice(currency) { - var chainId = currency === null || currency === void 0 ? void 0 : currency.chainId - var amountOut = chainId ? STABLECOIN_AMOUNT_OUT[chainId] : undefined - var stablecoin = amountOut === null || amountOut === void 0 ? void 0 : amountOut.currency - // TODO(#2808): remove dependency on useBestV2Trade - var v2USDCTrade = useBestV2Trade(sdkCore.TradeType.EXACT_OUTPUT, amountOut, currency, { - maxHops: 2, - }) - var v3USDCTrade = useClientSideV3Trade(sdkCore.TradeType.EXACT_OUTPUT, amountOut, currency) - return React.useMemo( - function () { - if (!currency || !stablecoin) { - return undefined - } - // handle usdc - if (currency === null || currency === void 0 ? void 0 : currency.wrapped.equals(stablecoin)) { - return new sdkCore.Price(stablecoin, stablecoin, '1', '1') - } - // use v2 price if available, v3 as fallback - if (v2USDCTrade) { - var _a = v2USDCTrade.route.midPrice, - numerator = _a.numerator, - denominator = _a.denominator - return new sdkCore.Price(currency, stablecoin, denominator, numerator) - } else if (v3USDCTrade.trade) { - var _b = v3USDCTrade.trade.routes[0].midPrice, - numerator = _b.numerator, - denominator = _b.denominator - return new sdkCore.Price(currency, stablecoin, denominator, numerator) - } - return undefined - }, - [currency, stablecoin, v2USDCTrade, v3USDCTrade.trade] - ) -} -function useUSDCValue(currencyAmount) { - var price = useUSDCPrice(currencyAmount === null || currencyAmount === void 0 ? void 0 : currencyAmount.currency) - return React.useMemo( - function () { - if (!price || !currencyAmount) return null - try { - return price.quote(currencyAmount) - } catch (error) { - return null - } - }, - [currencyAmount, price] - ) -} -/** - * - * @param fiatValue string representation of a USD amount - * @returns CurrencyAmount where currency is stablecoin on active chain - */ -function useStablecoinAmountFromFiatValue(fiatValue) { - var _a - var chainId = useActiveWeb3React().chainId - var stablecoin = chainId - ? (_a = STABLECOIN_AMOUNT_OUT[chainId]) === null || _a === void 0 - ? void 0 - : _a.currency - : undefined - if (fiatValue === null || fiatValue === undefined || !chainId || !stablecoin) { - return undefined - } - // trim for decimal precision when parsing - var parsedForDecimals = parseFloat(fiatValue).toFixed(stablecoin.decimals).toString() - try { - // parse USD string into CurrencyAmount based on stablecoin decimals - return tryParseCurrencyAmount(parsedForDecimals, stablecoin) - } catch (error) { - return undefined - } -} - -var V3_SWAP_DEFAULT_SLIPPAGE = new sdkCore.Percent(50, 10000) // .50% -var ONE_TENTHS_PERCENT = new sdkCore.Percent(10, 10000) // .10% -/** - * Return a guess of the gas cost used in computing slippage tolerance for a given trade - * @param trade the trade for which to _guess_ the amount of gas it would cost to execute - */ -function guesstimateGas(trade) { - if (!!trade) { - return ( - 100000 + - trade.swaps.reduce(function (memo, swap) { - return swap.route.pools.length + memo - }, 0) * - 30000 - ) - } - return undefined -} -var MIN_AUTO_SLIPPAGE_TOLERANCE = new sdkCore.Percent(5, 1000) // 0.5% -var MAX_AUTO_SLIPPAGE_TOLERANCE = new sdkCore.Percent(25, 100) // 25% -/** - * Returns slippage tolerance based on values from current trade, gas estimates from api, and active network. - */ -function useAutoSlippageTolerance(trade) { - var chainId = useActiveWeb3React().chainId - var onL2 = chainId && L2_CHAIN_IDS.includes(chainId) - var outputDollarValue = useUSDCValue(trade === null || trade === void 0 ? void 0 : trade.outputAmount) - var nativeGasPrice = useGasPrice() - var gasEstimate = guesstimateGas(trade) - var nativeCurrency = useNativeCurrency() - var nativeCurrencyPrice = useUSDCPrice( - nativeCurrency !== null && nativeCurrency !== void 0 ? nativeCurrency : undefined - ) - return React.useMemo( - function () { - if (!trade || onL2) return ONE_TENTHS_PERCENT - var nativeGasCost = - nativeGasPrice && typeof gasEstimate === 'number' - ? JSBI__default['default'].multiply(nativeGasPrice, JSBI__default['default'].BigInt(gasEstimate)) - : undefined - var dollarGasCost = - nativeCurrency && nativeGasCost && nativeCurrencyPrice - ? nativeCurrencyPrice.quote(sdkCore.CurrencyAmount.fromRawAmount(nativeCurrency, nativeGasCost)) - : undefined - // if valid estimate from api and using api trade, use gas estimate from api - // NOTE - dont use gas estimate for L2s yet - need to verify accuracy - // if not, use local heuristic - var dollarCostToUse = - chainId && - SUPPORTED_GAS_ESTIMATE_CHAIN_IDS.includes(chainId) && - (trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) - ? trade.gasUseEstimateUSD - : dollarGasCost - if (outputDollarValue && dollarCostToUse) { - // the rationale is that a user will not want their trade to fail for a loss due to slippage that is less than - // the cost of the gas of the failed transaction - var fraction = dollarCostToUse.asFraction.divide(outputDollarValue.asFraction) - var result = new sdkCore.Percent(fraction.numerator, fraction.denominator) - if (result.greaterThan(MAX_AUTO_SLIPPAGE_TOLERANCE)) return MAX_AUTO_SLIPPAGE_TOLERANCE - if (result.lessThan(MIN_AUTO_SLIPPAGE_TOLERANCE)) return MIN_AUTO_SLIPPAGE_TOLERANCE - return result - } - return V3_SWAP_DEFAULT_SLIPPAGE - }, - [trade, onL2, nativeGasPrice, gasEstimate, nativeCurrency, nativeCurrencyPrice, chainId, outputDollarValue] - ) -} - -/** - * Transforms a Routing API quote into an array of routes that can be used to create - * a `Trade`. - */ -function computeRoutes(currencyIn, currencyOut, tradeType, quoteResult) { - if (!quoteResult || !quoteResult.route || !currencyIn || !currencyOut) return undefined - if (quoteResult.route.length === 0) return [] - var parsedTokenIn = parseToken(quoteResult.route[0][0].tokenIn) - var parsedTokenOut = parseToken(quoteResult.route[0][quoteResult.route[0].length - 1].tokenOut) - if (parsedTokenIn.address !== currencyIn.wrapped.address) return undefined - if (parsedTokenOut.address !== currencyOut.wrapped.address) return undefined - var parsedCurrencyIn = currencyIn.isNative ? nativeOnChain(currencyIn.chainId) : parsedTokenIn - var parsedCurrencyOut = currencyOut.isNative ? nativeOnChain(currencyOut.chainId) : parsedTokenOut - try { - return quoteResult.route.map(function (route) { - if (route.length === 0) { - throw new Error('Expected route to have at least one pair or pool') - } - var rawAmountIn = route[0].amountIn - var rawAmountOut = route[route.length - 1].amountOut - if (!rawAmountIn || !rawAmountOut) { - throw new Error('Expected both amountIn and amountOut to be present') - } - return { - routev3: isV3Route(route) ? new v3Sdk.Route(route.map(parsePool), parsedCurrencyIn, parsedCurrencyOut) : null, - routev2: !isV3Route(route) ? new v2Sdk.Route(route.map(parsePair), parsedCurrencyIn, parsedCurrencyOut) : null, - inputAmount: sdkCore.CurrencyAmount.fromRawAmount(parsedCurrencyIn, rawAmountIn), - outputAmount: sdkCore.CurrencyAmount.fromRawAmount(parsedCurrencyOut, rawAmountOut), - } - }) - } catch (e) { - // `Route` constructor may throw if inputs/outputs are temporarily out of sync - // (RTK-Query always returns the latest data which may not be the right inputs/outputs) - // This is not fatal and will fix itself in future render cycles - console.error(e) - return undefined - } -} -function transformRoutesToTrade(route, tradeType, gasUseEstimateUSD) { - var _a, _b - return new InterfaceTrade({ - v2Routes: - (_a = - route === null || route === void 0 - ? void 0 - : route - .filter(function (r) { - return r.routev2 !== null - }) - .map(function (_a) { - var routev2 = _a.routev2, - inputAmount = _a.inputAmount, - outputAmount = _a.outputAmount - return { routev2, inputAmount, outputAmount } - })) !== null && _a !== void 0 - ? _a - : [], - v3Routes: - (_b = - route === null || route === void 0 - ? void 0 - : route - .filter(function (r) { - return r.routev3 !== null - }) - .map(function (_a) { - var routev3 = _a.routev3, - inputAmount = _a.inputAmount, - outputAmount = _a.outputAmount - return { routev3, inputAmount, outputAmount } - })) !== null && _b !== void 0 - ? _b - : [], - tradeType, - gasUseEstimateUSD, - }) -} -var parseToken = function (_a) { - var address = _a.address, - chainId = _a.chainId, - decimals = _a.decimals, - symbol = _a.symbol - return new sdkCore.Token(chainId, address, parseInt(decimals.toString()), symbol) -} -var parsePool = function (_a) { - var fee = _a.fee, - sqrtRatioX96 = _a.sqrtRatioX96, - liquidity = _a.liquidity, - tickCurrent = _a.tickCurrent, - tokenIn = _a.tokenIn, - tokenOut = _a.tokenOut - return new v3Sdk.Pool( - parseToken(tokenIn), - parseToken(tokenOut), - parseInt(fee), - sqrtRatioX96, - liquidity, - parseInt(tickCurrent) - ) -} -var parsePair = function (_a) { - var reserve0 = _a.reserve0, - reserve1 = _a.reserve1 - return new v2Sdk.Pair( - sdkCore.CurrencyAmount.fromRawAmount(parseToken(reserve0.token), reserve0.quotient), - sdkCore.CurrencyAmount.fromRawAmount(parseToken(reserve1.token), reserve1.quotient) - ) -} -function isV3Route(route) { - return route[0].type === 'v3-pool' -} - -function useFreshData(data, dataBlockNumber, maxBlockAge) { - if (maxBlockAge === void 0) { - maxBlockAge = 10 - } - var localBlockNumber = useBlockNumber() - if (!localBlockNumber) return undefined - if (localBlockNumber - dataBlockNumber > maxBlockAge) { - return undefined - } - return data -} -/** - * Returns query arguments for the Routing API query or undefined if the - * query should be skipped. - */ -function useRoutingAPIArguments(_a) { - var tokenIn = _a.tokenIn, - tokenOut = _a.tokenOut, - amount = _a.amount, - tradeType = _a.tradeType - var _b = __read(useClientSideRouter(), 1), - clientSideRouter = _b[0] - return React.useMemo( - function () { - return !tokenIn || !tokenOut || !amount || tokenIn.equals(tokenOut) - ? undefined - : { - amount: amount.quotient.toString(), - tokenInAddress: tokenIn.wrapped.address, - tokenInChainId: tokenIn.wrapped.chainId, - tokenInDecimals: tokenIn.wrapped.decimals, - tokenInSymbol: tokenIn.wrapped.symbol, - tokenOutAddress: tokenOut.wrapped.address, - tokenOutChainId: tokenOut.wrapped.chainId, - tokenOutDecimals: tokenOut.wrapped.decimals, - tokenOutSymbol: tokenOut.wrapped.symbol, - useClientSideRouter: clientSideRouter, - type: tradeType === sdkCore.TradeType.EXACT_INPUT ? 'exactIn' : 'exactOut', - } - }, - [amount, clientSideRouter, tokenIn, tokenOut, tradeType] - ) -} -/** - * Returns the best trade by invoking the routing api or the smart order router on the client - * @param tradeType whether the swap is an exact in/out - * @param amountSpecified the exact amount to swap in/out - * @param otherCurrency the desired output/payment currency - */ -function useRoutingAPITrade(tradeType, amountSpecified, otherCurrency) { - var _a - var _b = __read( - React.useMemo( - function () { - return tradeType === sdkCore.TradeType.EXACT_INPUT - ? [ - amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, - otherCurrency, - ] - : [ - otherCurrency, - amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, - ] - }, - [amountSpecified, otherCurrency, tradeType] - ), - 2 - ), - currencyIn = _b[0], - currencyOut = _b[1] - var queryArgs = useRoutingAPIArguments({ - tokenIn: currencyIn, - tokenOut: currencyOut, - amount: amountSpecified, - tradeType, - }) - var _c = useGetQuoteQuery(queryArgs !== null && queryArgs !== void 0 ? queryArgs : react.skipToken, { - pollingInterval: ms__default['default']( - templateObject_1$1a || (templateObject_1$1a = __makeTemplateObject(['15s'], ['15s'])) - ), - refetchOnFocus: true, - }), - isLoading = _c.isLoading, - isError = _c.isError, - data = _c.data - var quoteResult = useFreshData(data, Number(data === null || data === void 0 ? void 0 : data.blockNumber) || 0) - var route = React.useMemo( - function () { - return computeRoutes(currencyIn, currencyOut, tradeType, quoteResult) - }, - [currencyIn, currencyOut, quoteResult, tradeType] - ) - // get USD gas cost of trade in active chains stablecoin amount - var gasUseEstimateUSD = - (_a = useStablecoinAmountFromFiatValue( - quoteResult === null || quoteResult === void 0 ? void 0 : quoteResult.gasUseEstimateUSD - )) !== null && _a !== void 0 - ? _a - : null - return React.useMemo( - function () { - if (!currencyIn || !currencyOut) { - return { - state: TradeState.INVALID, - trade: undefined, - } - } - if (isLoading && !quoteResult) { - // only on first hook render - return { - state: TradeState.LOADING, - trade: undefined, - } - } - var otherAmount = - tradeType === sdkCore.TradeType.EXACT_INPUT - ? currencyOut && quoteResult - ? sdkCore.CurrencyAmount.fromRawAmount(currencyOut, quoteResult.quote) - : undefined - : currencyIn && quoteResult - ? sdkCore.CurrencyAmount.fromRawAmount(currencyIn, quoteResult.quote) - : undefined - if (isError || !otherAmount || !route || route.length === 0 || !queryArgs) { - return { - state: TradeState.NO_ROUTE_FOUND, - trade: undefined, - } - } - try { - var trade = transformRoutesToTrade(route, tradeType, gasUseEstimateUSD) - return { - // always return VALID regardless of isFetching status - state: TradeState.VALID, - trade, - } - } catch (e) { - console.debug('transformRoutesToTrade failed: ', e) - return { state: TradeState.INVALID, trade: undefined } - } - }, - [currencyIn, currencyOut, isLoading, quoteResult, tradeType, isError, route, queryArgs, gasUseEstimateUSD] - ) -} -var templateObject_1$1a - -var AUTO_ROUTER_SUPPORTED_CHAINS = Object.values(smartOrderRouter.ChainId) - -function useAutoRouterSupported() { - var chainId = useActiveWeb3React().chainId - return Boolean(chainId && AUTO_ROUTER_SUPPORTED_CHAINS.includes(chainId)) -} - -/** - * Returns the best v2+v3 trade for a desired swap. - * @param tradeType whether the swap is an exact in/out - * @param amountSpecified the exact amount to swap in/out - * @param otherCurrency the desired output/payment currency - */ -function useBestTrade(tradeType, amountSpecified, otherCurrency) { - var autoRouterSupported = useAutoRouterSupported() - var isWindowVisible = useIsWindowVisible() - var _a = __read( - useDebounce( - React.useMemo( - function () { - return [amountSpecified, otherCurrency] - }, - [amountSpecified, otherCurrency] - ), - 200 - ), - 2 - ), - debouncedAmount = _a[0], - debouncedOtherCurrency = _a[1] - var routingAPITrade = useRoutingAPITrade( - tradeType, - autoRouterSupported && isWindowVisible ? debouncedAmount : undefined, - debouncedOtherCurrency - ) - var isLoading = amountSpecified !== undefined && debouncedAmount === undefined - // consider trade debouncing when inputs/outputs do not match - var debouncing = - routingAPITrade.trade && - amountSpecified && - (tradeType === sdkCore.TradeType.EXACT_INPUT - ? !routingAPITrade.trade.inputAmount.equalTo(amountSpecified) || - !amountSpecified.currency.equals(routingAPITrade.trade.inputAmount.currency) || - !(debouncedOtherCurrency === null || debouncedOtherCurrency === void 0 - ? void 0 - : debouncedOtherCurrency.equals(routingAPITrade.trade.outputAmount.currency)) - : !routingAPITrade.trade.outputAmount.equalTo(amountSpecified) || - !amountSpecified.currency.equals(routingAPITrade.trade.outputAmount.currency) || - !(debouncedOtherCurrency === null || debouncedOtherCurrency === void 0 - ? void 0 - : debouncedOtherCurrency.equals(routingAPITrade.trade.inputAmount.currency))) - var useFallback = !autoRouterSupported || (!debouncing && routingAPITrade.state === TradeState.NO_ROUTE_FOUND) - // only use client side router if routing api trade failed or is not supported - var bestV3Trade = useClientSideV3Trade( - tradeType, - useFallback ? debouncedAmount : undefined, - useFallback ? debouncedOtherCurrency : undefined - ) - // only return gas estimate from api if routing api trade is used - return React.useMemo( - function () { - return __assign( - __assign( - __assign({}, useFallback ? bestV3Trade : routingAPITrade), - debouncing ? { state: TradeState.SYNCING } : {} - ), - isLoading ? { state: TradeState.LOADING } : {} - ) - }, - [bestV3Trade, debouncing, isLoading, routingAPITrade, useFallback] - ) -} - -// gets the current timestamp from the blockchain -function useCurrentBlockTimestamp() { - var _a, _b - var multicall = useInterfaceMulticall() - return (_b = - (_a = useSingleCallResult(multicall, 'getCurrentBlockTimestamp')) === null || _a === void 0 - ? void 0 - : _a.result) === null || _b === void 0 - ? void 0 - : _b[0] -} - -new abi$7.Interface(abi$6) -;({ - 1: [ - { - tokens: [WRAPPED_NATIVE_CURRENCY[1], DAI], - stakingRewardAddress: '0xa1484C3aa22a66C62b77E0AE78E15258bd0cB711', - }, - { - tokens: [WRAPPED_NATIVE_CURRENCY[1], USDC], - stakingRewardAddress: '0x7FBa4B8Dc5E7616e59622806932DBea72537A56b', - }, - { - tokens: [WRAPPED_NATIVE_CURRENCY[1], USDT], - stakingRewardAddress: '0x6C3e4cb2E96B01F4b866965A91ed4437839A121a', - }, - { - tokens: [WRAPPED_NATIVE_CURRENCY[1], WBTC], - stakingRewardAddress: '0xCA35e32e7926b96A9988f61d510E038108d8068e', - }, - ], -}) - -// mimics useAllBalances -function useAllTokenBalances() { - var account = useActiveWeb3React().account - var allTokens = useAllTokens() - var allTokensArray = React.useMemo( - function () { - return Object.values(allTokens !== null && allTokens !== void 0 ? allTokens : {}) - }, - [allTokens] - ) - var balances = useTokenBalances(account !== null && account !== void 0 ? account : undefined, allTokensArray) - return balances !== null && balances !== void 0 ? balances : {} -} - -function useSwapState() { - return useAppSelector(function (state) { - return state.swap - }) -} -function useSwapActionHandlers() { - var dispatch = useAppDispatch() - var onCurrencySelection = React.useCallback( - function (field, currency) { - dispatch( - selectCurrency({ - field, - currencyId: currency.isToken ? currency.address : currency.isNative ? 'ETH' : '', - }) - ) - }, - [dispatch] - ) - var onSwitchTokens = React.useCallback( - function () { - dispatch(switchCurrencies()) - }, - [dispatch] - ) - var onUserInput = React.useCallback( - function (field, typedValue) { - dispatch(typeInput({ field, typedValue })) - }, - [dispatch] - ) - var onChangeRecipient = React.useCallback( - function (recipient) { - dispatch(setRecipient({ recipient })) - }, - [dispatch] - ) - return { - onSwitchTokens, - onCurrencySelection, - onUserInput, - onChangeRecipient, - } -} -var BAD_RECIPIENT_ADDRESSES = { - '0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f': true, - '0xf164fC0Ec4E93095b804a4795bBe1e041497b92a': true, - '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D': true, // v2 router 02 -} -// from the current swap inputs, compute the best trade and return it. -function useDerivedSwapInfo() { - var _a, _b - var account = useActiveWeb3React().account - var _c = useSwapState(), - independentField = _c.independentField, - typedValue = _c.typedValue, - _d = Field.INPUT, - inputCurrencyId = _c[_d].currencyId, - _e = Field.OUTPUT, - outputCurrencyId = _c[_e].currencyId, - recipient = _c.recipient - var inputCurrency = useCurrency(inputCurrencyId) - var outputCurrency = useCurrency(outputCurrencyId) - var recipientLookup = useENS(recipient !== null && recipient !== void 0 ? recipient : undefined) - var to = (_a = recipient === null ? account : recipientLookup.address) !== null && _a !== void 0 ? _a : null - var relevantTokenBalances = useCurrencyBalances( - account !== null && account !== void 0 ? account : undefined, - React.useMemo( - function () { - return [ - inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : undefined, - outputCurrency !== null && outputCurrency !== void 0 ? outputCurrency : undefined, - ] - }, - [inputCurrency, outputCurrency] - ) - ) - var isExactIn = independentField === Field.INPUT - var parsedAmount = React.useMemo( - function () { - var _a - return tryParseCurrencyAmount( - typedValue, - (_a = isExactIn ? inputCurrency : outputCurrency) !== null && _a !== void 0 ? _a : undefined - ) - }, - [inputCurrency, isExactIn, outputCurrency, typedValue] - ) - var trade = useBestTrade( - isExactIn ? sdkCore.TradeType.EXACT_INPUT : sdkCore.TradeType.EXACT_OUTPUT, - parsedAmount, - (_b = isExactIn ? outputCurrency : inputCurrency) !== null && _b !== void 0 ? _b : undefined - ) - var currencyBalances = React.useMemo( - function () { - var _a - return (_a = {}), (_a[Field.INPUT] = relevantTokenBalances[0]), (_a[Field.OUTPUT] = relevantTokenBalances[1]), _a - }, - [relevantTokenBalances] - ) - var currencies = React.useMemo( - function () { - var _a - return (_a = {}), (_a[Field.INPUT] = inputCurrency), (_a[Field.OUTPUT] = outputCurrency), _a - }, - [inputCurrency, outputCurrency] - ) - // allowed slippage is either auto slippage, or custom user defined slippage if auto slippage disabled - var autoSlippageTolerance = useAutoSlippageTolerance(trade.trade) - var allowedSlippage = useUserSlippageToleranceWithDefault(autoSlippageTolerance) - var inputError = React.useMemo( - function () { - var _a - var inputError - if (!account) { - inputError = jsxRuntime.jsx(macro.Trans, { children: 'Connect Wallet' }, void 0) - } - if (!currencies[Field.INPUT] || !currencies[Field.OUTPUT]) { - inputError = - inputError !== null && inputError !== void 0 - ? inputError - : jsxRuntime.jsx(macro.Trans, { children: 'Select a token' }, void 0) - } - if (!parsedAmount) { - inputError = - inputError !== null && inputError !== void 0 - ? inputError - : jsxRuntime.jsx(macro.Trans, { children: 'Enter an amount' }, void 0) - } - var formattedTo = isAddress(to) - if (!to || !formattedTo) { - inputError = - inputError !== null && inputError !== void 0 - ? inputError - : jsxRuntime.jsx(macro.Trans, { children: 'Enter a recipient' }, void 0) - } else { - if (BAD_RECIPIENT_ADDRESSES[formattedTo]) { - inputError = - inputError !== null && inputError !== void 0 - ? inputError - : jsxRuntime.jsx(macro.Trans, { children: 'Invalid recipient' }, void 0) - } - } - // compare input balance to max input based on version - var _b = __read( - [ - currencyBalances[Field.INPUT], - (_a = trade.trade) === null || _a === void 0 ? void 0 : _a.maximumAmountIn(allowedSlippage), - ], - 2 - ), - balanceIn = _b[0], - amountIn = _b[1] - if (balanceIn && amountIn && balanceIn.lessThan(amountIn)) { - inputError = jsxRuntime.jsxs( - macro.Trans, - { children: ['Insufficient ', amountIn.currency.symbol, ' balance'] }, - void 0 - ) - } - return inputError - }, - [account, allowedSlippage, currencies, currencyBalances, parsedAmount, to, trade.trade] - ) - return React.useMemo( - function () { - return { - currencies, - currencyBalances, - parsedAmount, - inputError, - trade, - allowedSlippage, - } - }, - [allowedSlippage, currencies, currencyBalances, inputError, parsedAmount, trade] - ) -} -function parseCurrencyFromURLParameter(urlParam) { - if (typeof urlParam === 'string') { - var valid = isAddress(urlParam) - if (valid) return valid - if (urlParam.toUpperCase() === 'ETH') return 'ETH' - } - return '' -} -function parseTokenAmountURLParameter(urlParam) { - return typeof urlParam === 'string' && !isNaN(parseFloat(urlParam)) ? urlParam : '' -} -function parseIndependentFieldURLParameter(urlParam) { - return typeof urlParam === 'string' && urlParam.toLowerCase() === 'output' ? Field.OUTPUT : Field.INPUT -} -var ENS_NAME_REGEX = /^[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)?$/ -var ADDRESS_REGEX = /^0x[a-fA-F0-9]{40}$/ -function validatedRecipient(recipient) { - if (typeof recipient !== 'string') return null - var address = isAddress(recipient) - if (address) return address - if (ENS_NAME_REGEX.test(recipient)) return recipient - if (ADDRESS_REGEX.test(recipient)) return recipient - return null -} -function queryParametersToSwapState(parsedQs) { - var _a - var inputCurrency = parseCurrencyFromURLParameter(parsedQs.inputCurrency) - var outputCurrency = parseCurrencyFromURLParameter(parsedQs.outputCurrency) - if (inputCurrency === '' && outputCurrency === '') { - // default to ETH input - inputCurrency = 'ETH' - } else if (inputCurrency === outputCurrency) { - // clear output if identical - outputCurrency = '' - } - var recipient = validatedRecipient(parsedQs.recipient) - return ( - (_a = {}), - (_a[Field.INPUT] = { - currencyId: - inputCurrency === '' ? null : inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : null, - }), - (_a[Field.OUTPUT] = { - currencyId: - outputCurrency === '' ? null : outputCurrency !== null && outputCurrency !== void 0 ? outputCurrency : null, - }), - (_a.typedValue = parseTokenAmountURLParameter(parsedQs.exactAmount)), - (_a.independentField = parseIndependentFieldURLParameter(parsedQs.exactField)), - (_a.recipient = recipient), - _a - ) -} -// updates the swap state to use the defaults for a given network -function useDefaultsFromURLSearch() { - var chainId = useActiveWeb3React().chainId - var dispatch = useAppDispatch() - var parsedQs = useParsedQueryString() - var _a = __read(React.useState(), 2), - result = _a[0], - setResult = _a[1] - React.useEffect( - function () { - var _a, _b - if (!chainId) return - var parsed = queryParametersToSwapState(parsedQs) - var inputCurrencyId = (_a = parsed[Field.INPUT].currencyId) !== null && _a !== void 0 ? _a : undefined - var outputCurrencyId = (_b = parsed[Field.OUTPUT].currencyId) !== null && _b !== void 0 ? _b : undefined - dispatch( - replaceSwapState({ - typedValue: parsed.typedValue, - field: parsed.independentField, - inputCurrencyId, - outputCurrencyId, - recipient: parsed.recipient, - }) - ) - setResult({ inputCurrencyId, outputCurrencyId }) - // eslint-disable-next-line react-hooks/exhaustive-deps - }, - [dispatch, chainId] - ) - return result -} - -var initialState$2 = queryParametersToSwapState(parsedQueryString()) -var swap = toolkit.createReducer(initialState$2, function (builder) { - return builder - .addCase(replaceSwapState, function (state, _a) { - var _b - var _c = _a.payload, - typedValue = _c.typedValue, - recipient = _c.recipient, - field = _c.field, - inputCurrencyId = _c.inputCurrencyId, - outputCurrencyId = _c.outputCurrencyId - return ( - (_b = {}), - (_b[Field.INPUT] = { - currencyId: inputCurrencyId !== null && inputCurrencyId !== void 0 ? inputCurrencyId : null, - }), - (_b[Field.OUTPUT] = { - currencyId: outputCurrencyId !== null && outputCurrencyId !== void 0 ? outputCurrencyId : null, - }), - (_b.independentField = field), - (_b.typedValue = typedValue), - (_b.recipient = recipient), - _b - ) - }) - .addCase(selectCurrency, function (state, _a) { - var _b, _c - var _d = _a.payload, - currencyId = _d.currencyId, - field = _d.field - var otherField = field === Field.INPUT ? Field.OUTPUT : Field.INPUT - if (currencyId === state[otherField].currencyId) { - // the case where we have to swap the order - return __assign( - __assign({}, state), - ((_b = { independentField: state.independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT }), - (_b[field] = { currencyId }), - (_b[otherField] = { currencyId: state[field].currencyId }), - _b) - ) - } else { - // the normal case - return __assign(__assign({}, state), ((_c = {}), (_c[field] = { currencyId }), _c)) - } - }) - .addCase(switchCurrencies, function (state) { - var _a - return __assign( - __assign({}, state), - ((_a = { independentField: state.independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT }), - (_a[Field.INPUT] = { currencyId: state[Field.OUTPUT].currencyId }), - (_a[Field.OUTPUT] = { currencyId: state[Field.INPUT].currencyId }), - _a) - ) - }) - .addCase(typeInput, function (state, _a) { - var _b = _a.payload, - field = _b.field, - typedValue = _b.typedValue - return __assign(__assign({}, state), { independentField: field, typedValue }) - }) - .addCase(setRecipient, function (state, _a) { - var recipient = _a.payload.recipient - state.recipient = recipient - }) -}) - -var now = function () { - return new Date().getTime() -} -var initialState$1 = {} -var transactions = toolkit.createReducer(initialState$1, function (builder) { - return builder - .addCase(updateVersion, function (transactions) { - // in case there are any transactions in the store with the old format, remove them - Object.keys(transactions).forEach(function (chainId) { - var chainTransactions = transactions[chainId] - Object.keys(chainTransactions).forEach(function (hash) { - if (!('info' in chainTransactions[hash])) { - // clear old transactions that don't have the right format - delete chainTransactions[hash] - } - }) - }) - }) - .addCase(addTransaction, function (transactions, _a) { - var _b, _c - var _d = _a.payload, - chainId = _d.chainId, - from = _d.from, - hash = _d.hash, - info = _d.info - if ((_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash]) { - throw Error('Attempted to add existing transaction.') - } - var txs = (_c = transactions[chainId]) !== null && _c !== void 0 ? _c : {} - txs[hash] = { hash, info, from, addedTime: now() } - transactions[chainId] = txs - }) - .addCase(clearAllTransactions, function (transactions, _a) { - var chainId = _a.payload.chainId - if (!transactions[chainId]) return - transactions[chainId] = {} - }) - .addCase(checkedTransaction, function (transactions, _a) { - var _b - var _c = _a.payload, - chainId = _c.chainId, - hash = _c.hash, - blockNumber = _c.blockNumber - var tx = (_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash] - if (!tx) { - return - } - if (!tx.lastCheckedBlockNumber) { - tx.lastCheckedBlockNumber = blockNumber - } else { - tx.lastCheckedBlockNumber = Math.max(blockNumber, tx.lastCheckedBlockNumber) - } - }) - .addCase(finalizeTransaction, function (transactions, _a) { - var _b - var _c = _a.payload, - hash = _c.hash, - chainId = _c.chainId, - receipt = _c.receipt - var tx = (_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash] - if (!tx) { - return - } - tx.receipt = receipt - tx.confirmedTime = now() - }) -}) - -var currentTimestamp = function () { - return new Date().getTime() -} -function pairKey(token0Address, token1Address) { - return token0Address + ';' + token1Address -} -var initialState = { - matchesDarkMode: false, - userDarkMode: null, - userExpertMode: false, - userLocale: null, - userClientSideRouter: false, - userHideClosedPositions: false, - userSlippageTolerance: 'auto', - userSlippageToleranceHasBeenMigratedToAuto: true, - userDeadline: DEFAULT_DEADLINE_FROM_NOW, - tokens: {}, - pairs: {}, - timestamp: currentTimestamp(), - URLWarningVisible: true, - showSurveyPopup: undefined, -} -var user = toolkit.createReducer(initialState, function (builder) { - return builder - .addCase(updateVersion, function (state) { - // slippage isnt being tracked in local storage, reset to default - // noinspection SuspiciousTypeOfGuard - if ( - typeof state.userSlippageTolerance !== 'number' || - !Number.isInteger(state.userSlippageTolerance) || - state.userSlippageTolerance < 0 || - state.userSlippageTolerance > 5000 - ) { - state.userSlippageTolerance = 'auto' - } else { - if ( - !state.userSlippageToleranceHasBeenMigratedToAuto && - [10, 50, 100].indexOf(state.userSlippageTolerance) !== -1 - ) { - state.userSlippageTolerance = 'auto' - state.userSlippageToleranceHasBeenMigratedToAuto = true - } - } - // deadline isnt being tracked in local storage, reset to default - // noinspection SuspiciousTypeOfGuard - if ( - typeof state.userDeadline !== 'number' || - !Number.isInteger(state.userDeadline) || - state.userDeadline < 60 || - state.userDeadline > 180 * 60 - ) { - state.userDeadline = DEFAULT_DEADLINE_FROM_NOW - } - state.lastUpdateVersionTimestamp = currentTimestamp() - }) - .addCase(updateUserDarkMode, function (state, action) { - state.userDarkMode = action.payload.userDarkMode - state.timestamp = currentTimestamp() - }) - .addCase(updateMatchesDarkMode, function (state, action) { - state.matchesDarkMode = action.payload.matchesDarkMode - state.timestamp = currentTimestamp() - }) - .addCase(updateUserExpertMode, function (state, action) { - state.userExpertMode = action.payload.userExpertMode - state.timestamp = currentTimestamp() - }) - .addCase(updateUserLocale, function (state, action) { - state.userLocale = action.payload.userLocale - state.timestamp = currentTimestamp() - }) - .addCase(updateUserSlippageTolerance, function (state, action) { - state.userSlippageTolerance = action.payload.userSlippageTolerance - state.timestamp = currentTimestamp() - }) - .addCase(updateUserDeadline, function (state, action) { - state.userDeadline = action.payload.userDeadline - state.timestamp = currentTimestamp() - }) - .addCase(updateUserClientSideRouter, function (state, action) { - state.userClientSideRouter = action.payload.userClientSideRouter - }) - .addCase(updateHideClosedPositions, function (state, action) { - state.userHideClosedPositions = action.payload.userHideClosedPositions - }) - .addCase(updateShowSurveyPopup, function (state, action) { - state.showSurveyPopup = action.payload.showSurveyPopup - }) - .addCase(addSerializedToken, function (state, _a) { - var serializedToken = _a.payload.serializedToken - if (!state.tokens) { - state.tokens = {} - } - state.tokens[serializedToken.chainId] = state.tokens[serializedToken.chainId] || {} - state.tokens[serializedToken.chainId][serializedToken.address] = serializedToken - state.timestamp = currentTimestamp() - }) - .addCase(removeSerializedToken, function (state, _a) { - var _b = _a.payload, - address = _b.address, - chainId = _b.chainId - if (!state.tokens) { - state.tokens = {} - } - state.tokens[chainId] = state.tokens[chainId] || {} - delete state.tokens[chainId][address] - state.timestamp = currentTimestamp() - }) - .addCase(addSerializedPair, function (state, _a) { - var serializedPair = _a.payload.serializedPair - if ( - serializedPair.token0.chainId === serializedPair.token1.chainId && - serializedPair.token0.address !== serializedPair.token1.address - ) { - var chainId = serializedPair.token0.chainId - state.pairs[chainId] = state.pairs[chainId] || {} - state.pairs[chainId][pairKey(serializedPair.token0.address, serializedPair.token1.address)] = serializedPair - } - state.timestamp = currentTimestamp() - }) - .addCase(removeSerializedPair, function (state, _a) { - var _b = _a.payload, - chainId = _b.chainId, - tokenAAddress = _b.tokenAAddress, - tokenBAddress = _b.tokenBAddress - if (state.pairs[chainId]) { - // just delete both keys if either exists - delete state.pairs[chainId][pairKey(tokenAAddress, tokenBAddress)] - delete state.pairs[chainId][pairKey(tokenBAddress, tokenAAddress)] - } - state.timestamp = currentTimestamp() - }) -}) - -var _a$5 -var PERSISTED_KEYS = ['user', 'transactions', 'lists'] -var store = toolkit.configureStore({ - reducer: - ((_a$5 = { - application, - user, - transactions, - swap, - mint, - mintV3, - burn, - burnV3, - multicall: multicall.reducer, - lists, - logs, - }), - (_a$5[api$1.reducerPath] = api$1.reducer), - (_a$5[routingApi.reducerPath] = routingApi.reducer), - _a$5), - middleware(getDefaultMiddleware) { - return getDefaultMiddleware({ thunk: true }) - .concat(api$1.middleware) - .concat(routingApi.middleware) - .concat(reduxLocalstorageSimple.save({ states: PERSISTED_KEYS, debounce: 1000 })) - }, - preloadedState: reduxLocalstorageSimple.load({ - states: PERSISTED_KEYS, - disableWarnings: process.env.NODE_ENV === 'test', - }), -}) -store.dispatch(updateVersion()) -react.setupListeners(store.dispatch) - -var FallbackWrapper = styled__default['default'].div( - templateObject_1$19 || - (templateObject_1$19 = __makeTemplateObject( - ['\n display: flex;\n flex-direction: column;\n width: 100%;\n align-items: center;\n z-index: 1;\n'], - ['\n display: flex;\n flex-direction: column;\n width: 100%;\n align-items: center;\n z-index: 1;\n'] - )) -) -var BodyWrapper$2 = styled__default['default'].div( - templateObject_2$R || - (templateObject_2$R = __makeTemplateObject( - ['\n padding: 1rem;\n width: 100%;\n white-space: ;\n'], - ['\n padding: 1rem;\n width: 100%;\n white-space: ;\n'] - )) -) -var CodeBlockWrapper = styled__default['default'].div( - templateObject_3$J || - (templateObject_3$J = __makeTemplateObject( - [ - '\n background: ', - ';\n overflow: auto;\n white-space: pre;\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 border-radius: 24px;\n padding: 18px 24px;\n color: ', - ';\n', - ], - [ - '\n background: ', - ';\n overflow: auto;\n white-space: pre;\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 border-radius: 24px;\n padding: 18px 24px;\n color: ', - ';\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.bg0 - }, - function (_a) { - var theme = _a.theme - return theme.text1 - } -) -var LinkWrapper = styled__default['default'].div( - templateObject_4$y || - (templateObject_4$y = __makeTemplateObject( - ['\n color: ', ';\n padding: 6px 24px;\n'], - ['\n color: ', ';\n padding: 6px 24px;\n'] - )), - function (_a) { - var theme = _a.theme - return theme.blue1 - } -) -var SomethingWentWrongWrapper = styled__default['default'].div( - templateObject_5$q || - (templateObject_5$q = __makeTemplateObject(['\n padding: 6px 24px;\n'], ['\n padding: 6px 24px;\n'])) -) -var IS_UNISWAP = window.location.hostname === 'app.uniswap.org' -var ErrorBoundary = /** @class */ (function (_super) { - __extends(ErrorBoundary, _super) - function ErrorBoundary(props) { - var _this = _super.call(this, props) || this - _this.state = { error: null } - return _this - } - ErrorBoundary.getDerivedStateFromError = function (error) { - return { error } - } - ErrorBoundary.prototype.componentDidCatch = function (error, errorInfo) { - ReactGA__default['default'].exception(__assign(__assign(__assign({}, error), errorInfo), { fatal: true })) - } - ErrorBoundary.prototype.render = function () { - var error = this.state.error - if (error !== null) { - var encodedBody = encodeURIComponent(issueBody(error)) - return jsxRuntime.jsx( - FallbackWrapper, - { - children: jsxRuntime.jsx( - BodyWrapper$2, - { - children: jsxRuntime.jsxs( - AutoColumn, - __assign( - { gap: 'md' }, - { - children: [ - jsxRuntime.jsx( - SomethingWentWrongWrapper, - { - children: jsxRuntime.jsx( - ThemedText.Label, - __assign( - { fontSize: 24, fontWeight: 600 }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'Something went wrong' }, void 0) } - ), - void 0 - ), - }, - void 0 - ), - jsxRuntime.jsx( - CodeBlockWrapper, - { - children: jsxRuntime.jsx( - 'code', - { - children: jsxRuntime.jsx( - ThemedText.Main, - __assign({ fontSize: 10 }, { children: error.stack }), - void 0 - ), - }, - void 0 - ), - }, - void 0 - ), - IS_UNISWAP - ? jsxRuntime.jsxs( - AutoRow, - { - children: [ - jsxRuntime.jsx( - LinkWrapper, - { - children: jsxRuntime.jsx( - ExternalLink, - __assign( - { - id: 'create-github-issue-link', - href: - 'https://github.com/Uniswap/uniswap-interface/issues/new?assignees=&labels=bug&body=' + - encodedBody + - '&title=' + - encodeURIComponent( - 'Crash report: `' + - error.name + - (error.message && ': ' + error.message) + - '`' - ), - target: '_blank', - }, - { - children: jsxRuntime.jsxs( - ThemedText.Link, - __assign( - { fontSize: 16 }, - { - children: [ - jsxRuntime.jsx( - macro.Trans, - { children: 'Create an issue on GitHub' }, - void 0 - ), - jsxRuntime.jsx('span', { children: '\u2197' }, void 0), - ], - } - ), - void 0 - ), - } - ), - void 0 - ), - }, - void 0 - ), - jsxRuntime.jsx( - LinkWrapper, - { - children: jsxRuntime.jsx( - ExternalLink, - __assign( - { - id: 'get-support-on-discord', - href: 'https://discord.gg/FCfyBSbCU5', - target: '_blank', - }, - { - children: jsxRuntime.jsxs( - ThemedText.Link, - __assign( - { fontSize: 16 }, - { - children: [ - jsxRuntime.jsx( - macro.Trans, - { children: 'Get support on Discord' }, - void 0 - ), - jsxRuntime.jsx('span', { children: '\u2197' }, void 0), - ], - } - ), - void 0 - ), - } - ), - void 0 - ), - }, - void 0 - ), - ], - }, - void 0 - ) - : null, - ], - } - ), - void 0 - ), - }, - void 0 - ), - }, - void 0 - ) - } - return this.props.children - } - return ErrorBoundary -})(React__default['default'].Component) -function getRelevantState() { - var path = window.location.hash - if (!path.startsWith('#/')) { - return null - } - var pieces = path.substring(2).split(/[/\\?]/) - switch (pieces[0]) { - case 'swap': - return 'swap' - case 'add': - if (pieces[1] === 'v2') return 'mint' - else return 'mintV3' - case 'remove': - if (pieces[1] === 'v2') return 'burn' - else return 'burnV3' - } - return null -} -function issueBody(error) { - var relevantState = getRelevantState() - var deviceData = userAgent - return ( - '## URL\n \n' + - window.location.href + - '\n\n' + - (relevantState - ? '## `' + - relevantState + - '` state\n \n```json\n' + - JSON.stringify(store.getState()[relevantState], null, 2) + - '\n```\n' - : '') + - '\n' + - (error.name && '## Error\n\n```\n' + error.name + (error.message && ': ' + error.message) + '\n```\n') + - '\n' + - (error.stack && '## Stacktrace\n\n```\n' + error.stack + '\n```\n') + - '\n' + - (deviceData && '## Device data\n\n```json\n' + JSON.stringify(deviceData, null, 2) + '\n```\n') + - '\n' - ) -} -var templateObject_1$19, templateObject_2$R, templateObject_3$J, templateObject_4$y, templateObject_5$q - -function useModalOpen(modal) { - var openModal = useAppSelector(function (state) { - return state.application.openModal - }) - return openModal === modal -} -function useToggleModal(modal) { - var open = useModalOpen(modal) - var dispatch = useAppDispatch() - return React.useCallback( - function () { - return dispatch(setOpenModal(open ? null : modal)) - }, - [dispatch, modal, open] - ) -} -function useWalletModalToggle() { - return useToggleModal(ApplicationModal.WALLET) -} -function useToggleSettingsMenu() { - return useToggleModal(ApplicationModal.SETTINGS) -} -function useShowClaimPopup() { - return useModalOpen(ApplicationModal.CLAIM_POPUP) -} -function useToggleShowClaimPopup() { - return useToggleModal(ApplicationModal.CLAIM_POPUP) -} -function useToggleSelfClaimModal() { - return useToggleModal(ApplicationModal.SELF_CLAIM) -} -function useTogglePrivacyPolicy() { - return useToggleModal(ApplicationModal.PRIVACY_POLICY) -} -// returns a function that allows adding a popup -function useAddPopup() { - var dispatch = useAppDispatch() - return React.useCallback( - function (content, key, removeAfterMs) { - dispatch( - addPopup({ - content, - key, - removeAfterMs: removeAfterMs !== null && removeAfterMs !== void 0 ? removeAfterMs : DEFAULT_TXN_DISMISS_MS, - }) - ) - }, - [dispatch] - ) -} -// returns a function that allows removing a popup via its key -function useRemovePopup() { - var dispatch = useAppDispatch() - return React.useCallback( - function (key) { - dispatch(removePopup({ key })) - }, - [dispatch] - ) -} -// get the list of active popups -function useActivePopups() { - var list = useAppSelector(function (state) { - return state.application.popupList - }) - return React.useMemo( - function () { - return list.filter(function (item) { - return item.show - }) - }, - [list] - ) -} - -var _path$5, _path2$2, _path3$1, _path4, _path5, _path6, _path7, _path8, _path9 - -function _extends$7() { - _extends$7 = - 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$7.apply(this, arguments) -} - -var SvgLogo = function SvgLogo(props) { - return /*#__PURE__*/ React__namespace.createElement( - 'svg', - _extends$7( - { - width: 14, - height: 15, - viewBox: '0 0 14 15', - fill: 'black', - xmlns: 'http://www.w3.org/2000/svg', - }, - props - ), - /*#__PURE__*/ React__namespace.createElement( - 'g', - { - style: { - mixBlendMode: 'darken', - }, - }, - _path$5 || - (_path$5 = /*#__PURE__*/ React__namespace.createElement('path', { - d: 'M4.15217 1.55141C3.96412 1.52242 3.95619 1.51902 4.04468 1.5055C4.21427 1.47958 4.61472 1.51491 4.89067 1.58012C5.53489 1.73232 6.12109 2.12221 6.74683 2.81466L6.91307 2.99862L7.15088 2.96062C8.15274 2.8006 9.17194 2.92778 10.0244 3.31918C10.2589 3.42686 10.6287 3.64121 10.6749 3.69629C10.6896 3.71384 10.7166 3.82684 10.7349 3.94742C10.7982 4.36458 10.7665 4.68434 10.6382 4.92317C10.5683 5.05313 10.5644 5.09432 10.6114 5.20554C10.6489 5.2943 10.7534 5.35999 10.8569 5.35985C11.0687 5.35956 11.2968 5.0192 11.4024 4.54561L11.4444 4.3575L11.5275 4.45109C11.9835 4.96459 12.3417 5.66488 12.4032 6.16335L12.4192 6.29332L12.3426 6.17517C12.2107 5.97186 12.0781 5.83346 11.9084 5.72183C11.6024 5.52062 11.2789 5.45215 10.4222 5.40727C9.64839 5.36675 9.21045 5.30106 8.77621 5.16032C8.03738 4.9209 7.66493 4.60204 6.78729 3.4576C6.39748 2.94928 6.15654 2.66804 5.91687 2.44155C5.37228 1.92691 4.83716 1.65701 4.15217 1.55141Z', - })), - _path2$2 || - (_path2$2 = /*#__PURE__*/ React__namespace.createElement('path', { - d: 'M10.8494 2.68637C10.8689 2.34575 10.9153 2.12108 11.0088 1.9159C11.0458 1.83469 11.0804 1.76822 11.0858 1.76822C11.0911 1.76822 11.075 1.82816 11.05 1.90142C10.9821 2.10054 10.9709 2.3729 11.0177 2.68978C11.0771 3.09184 11.1109 3.14985 11.5385 3.58416C11.739 3.78788 11.9723 4.0448 12.0568 4.15511L12.2106 4.35568L12.0568 4.21234C11.8688 4.03705 11.4364 3.6952 11.3409 3.64633C11.2768 3.61356 11.2673 3.61413 11.2278 3.65321C11.1914 3.68922 11.1837 3.74333 11.1787 3.99915C11.1708 4.39786 11.1161 4.65377 10.9842 4.90965C10.9128 5.04805 10.9015 5.01851 10.9661 4.8623C11.0143 4.74566 11.0192 4.69439 11.0189 4.30842C11.0181 3.53291 10.9255 3.34647 10.3823 3.02709C10.2447 2.94618 10.0179 2.8295 9.87839 2.76778C9.73887 2.70606 9.62805 2.6523 9.63208 2.64828C9.64746 2.63307 10.1772 2.78675 10.3905 2.86828C10.7077 2.98954 10.76 3.00526 10.7985 2.99063C10.8244 2.98082 10.8369 2.90608 10.8494 2.68637Z', - })), - _path3$1 || - (_path3$1 = /*#__PURE__*/ React__namespace.createElement('path', { - d: 'M4.51745 4.01304C4.13569 3.49066 3.89948 2.68973 3.95062 2.091L3.96643 1.90572L4.05333 1.92148C4.21652 1.95106 4.49789 2.05515 4.62964 2.13469C4.9912 2.35293 5.14773 2.64027 5.30697 3.37811C5.35362 3.59423 5.41482 3.8388 5.44298 3.9216C5.48831 4.05487 5.65962 4.36617 5.7989 4.56834C5.89922 4.71395 5.83258 4.78295 5.61082 4.76305C5.27215 4.73267 4.8134 4.41799 4.51745 4.01304Z', - })), - _path4 || - (_path4 = /*#__PURE__*/ React__namespace.createElement('path', { - d: 'M10.3863 7.90088C8.60224 7.18693 7.97389 6.56721 7.97389 5.52157C7.97389 5.36769 7.97922 5.24179 7.98571 5.24179C7.99221 5.24179 8.06124 5.29257 8.1391 5.35465C8.50088 5.64305 8.906 5.76623 10.0275 5.92885C10.6875 6.02455 11.0589 6.10185 11.4015 6.21477C12.4904 6.57371 13.1641 7.30212 13.3248 8.29426C13.3715 8.58255 13.3441 9.12317 13.2684 9.4081C13.2087 9.63315 13.0263 10.0388 12.9779 10.0544C12.9645 10.0587 12.9514 10.0076 12.9479 9.93809C12.9296 9.56554 12.7402 9.20285 12.4221 8.93116C12.0604 8.62227 11.5745 8.37633 10.3863 7.90088Z', - })), - _path5 || - (_path5 = /*#__PURE__*/ React__namespace.createElement('path', { - d: 'M9.13385 8.19748C9.11149 8.06527 9.07272 7.89643 9.04769 7.82228L9.00217 7.68748L9.08672 7.7818C9.20374 7.91233 9.2962 8.07937 9.37457 8.30185C9.43438 8.47165 9.44111 8.52215 9.44066 8.79807C9.4402 9.06896 9.43273 9.12575 9.3775 9.27858C9.29042 9.51959 9.18233 9.69048 9.00097 9.87391C8.67507 10.2036 8.25607 10.3861 7.65143 10.4618C7.54633 10.4749 7.24 10.4971 6.97069 10.511C6.292 10.5461 5.84531 10.6186 5.44393 10.7587C5.38623 10.7788 5.3347 10.7911 5.32947 10.7859C5.31323 10.7698 5.58651 10.6079 5.81223 10.4998C6.1305 10.3474 6.44733 10.2643 7.15719 10.1468C7.50785 10.0887 7.86998 10.0183 7.96194 9.99029C8.83033 9.72566 9.27671 9.04276 9.13385 8.19748Z', - })), - _path6 || - (_path6 = /*#__PURE__*/ React__namespace.createElement('path', { - d: 'M9.95169 9.64109C9.71465 9.13463 9.66022 8.64564 9.79009 8.18961C9.80399 8.14088 9.82632 8.101 9.83976 8.101C9.85319 8.101 9.90913 8.13105 9.96404 8.16777C10.0733 8.24086 10.2924 8.36395 10.876 8.68023C11.6043 9.0749 12.0196 9.3805 12.302 9.72965C12.5493 10.0354 12.7023 10.3837 12.776 10.8084C12.8177 11.0489 12.7932 11.6277 12.7311 11.8699C12.5353 12.6337 12.0802 13.2336 11.4311 13.5837C11.336 13.635 11.2506 13.6771 11.2414 13.6773C11.2321 13.6775 11.2668 13.5899 11.3184 13.4827C11.5367 13.029 11.5616 12.5877 11.3965 12.0965C11.2954 11.7957 11.0893 11.4287 10.6732 10.8084C10.1893 10.0873 10.0707 9.89539 9.95169 9.64109Z', - })), - _path7 || - (_path7 = /*#__PURE__*/ React__namespace.createElement('path', { - d: 'M3.25046 12.3737C3.91252 11.8181 4.73629 11.4234 5.48666 11.3022C5.81005 11.25 6.34877 11.2707 6.64823 11.3469C7.12824 11.469 7.55763 11.7425 7.78094 12.0683C7.99918 12.3867 8.09281 12.6642 8.19029 13.2816C8.22875 13.5252 8.27057 13.7697 8.28323 13.8251C8.35644 14.1451 8.4989 14.4008 8.67544 14.5293C8.95583 14.7333 9.43865 14.7459 9.91362 14.5618C9.99423 14.5305 10.0642 14.5089 10.0691 14.5138C10.0864 14.5308 9.84719 14.6899 9.67847 14.7737C9.45143 14.8864 9.2709 14.93 9.03102 14.93C8.59601 14.93 8.23486 14.7101 7.9335 14.2616C7.87419 14.1733 7.7409 13.909 7.63729 13.6741C7.3191 12.9528 7.16199 12.7331 6.79255 12.4926C6.47104 12.2834 6.05641 12.2459 5.74449 12.3979C5.33475 12.5976 5.22043 13.118 5.51389 13.4478C5.63053 13.5789 5.84803 13.6919 6.02588 13.7139C6.35861 13.7551 6.64455 13.5035 6.64455 13.1696C6.64455 12.9528 6.56071 12.8291 6.34966 12.7344C6.0614 12.6051 5.75156 12.7562 5.75304 13.0254C5.75368 13.1402 5.80396 13.2122 5.91971 13.2643C5.99397 13.2977 5.99569 13.3003 5.93514 13.2878C5.67066 13.2333 5.6087 12.9164 5.82135 12.706C6.07667 12.4535 6.60461 12.5649 6.78591 12.9097C6.86208 13.0545 6.87092 13.3429 6.80451 13.517C6.6559 13.9068 6.22256 14.1117 5.78297 14.0002C5.48368 13.9242 5.36181 13.842 5.00097 13.4726C4.37395 12.8306 4.13053 12.7062 3.22657 12.566L3.05335 12.5391L3.25046 12.3737Z', - })), - _path8 || - (_path8 = /*#__PURE__*/ React__namespace.createElement('path', { - fillRule: 'evenodd', - clipRule: 'evenodd', - d: 'M0.308383 0.883984C2.40235 3.40996 3.84457 4.45213 4.00484 4.67231C4.13717 4.85412 4.08737 5.01757 3.86067 5.14567C3.7346 5.21689 3.47541 5.28905 3.34564 5.28905C3.19887 5.28905 3.14847 5.23278 3.14847 5.23278C3.06337 5.15255 3.01544 5.16658 2.5784 4.39555C1.97166 3.45981 1.46389 2.68357 1.45004 2.67057C1.41801 2.64052 1.41856 2.64153 2.51654 4.59413C2.69394 5.0011 2.55182 5.15049 2.55182 5.20845C2.55182 5.32636 2.51946 5.38834 2.37311 5.55059C2.12914 5.8211 2.02008 6.12505 1.94135 6.7541C1.8531 7.45926 1.60492 7.95737 0.917156 8.80989C0.514562 9.30893 0.448686 9.4004 0.3471 9.60153C0.219144 9.85482 0.183961 9.99669 0.169701 10.3165C0.154629 10.6547 0.183983 10.8732 0.287934 11.1965C0.378939 11.4796 0.473932 11.6665 0.716778 12.0403C0.926351 12.3629 1.04702 12.6027 1.04702 12.6965C1.04702 12.7711 1.06136 12.7712 1.38611 12.6983C2.16328 12.5239 2.79434 12.2171 3.14925 11.8411C3.36891 11.6084 3.42048 11.4799 3.42215 11.1611C3.42325 10.9525 3.41587 10.9088 3.35914 10.7888C3.2668 10.5935 3.09869 10.4311 2.72817 10.1794C2.2427 9.84953 2.03534 9.58398 1.97807 9.21878C1.93108 8.91913 1.98559 8.70771 2.25416 8.14825C2.53214 7.56916 2.60103 7.32239 2.64763 6.73869C2.67773 6.36158 2.71941 6.21286 2.82842 6.09348C2.94212 5.969 3.04447 5.92684 3.32584 5.88863C3.78457 5.82635 4.07667 5.70839 4.31677 5.48849C4.52505 5.29772 4.61221 5.11391 4.62558 4.8372L4.63574 4.62747L4.51934 4.49259C4.09783 4.00411 0.0261003 0.5 0.000160437 0.5C-0.00538105 0.5 0.133325 0.672804 0.308383 0.883984ZM1.28364 10.6992C1.37894 10.5314 1.3283 10.3158 1.16889 10.2104C1.01827 10.1109 0.78428 10.1578 0.78428 10.2875C0.78428 10.3271 0.806303 10.3559 0.855937 10.3813C0.939514 10.424 0.945581 10.4721 0.879823 10.5703C0.81323 10.6698 0.818604 10.7573 0.894991 10.8167C1.0181 10.9125 1.19237 10.8598 1.28364 10.6992Z', - })), - _path9 || - (_path9 = /*#__PURE__*/ React__namespace.createElement('path', { - fillRule: 'evenodd', - clipRule: 'evenodd', - d: 'M4.92523 5.99865C4.70988 6.06439 4.50054 6.29124 4.43574 6.5291C4.39621 6.67421 4.41864 6.92875 4.47785 7.00736C4.57351 7.13433 4.66602 7.16778 4.91651 7.16603C5.40693 7.16263 5.83327 6.95358 5.88284 6.69224C5.92347 6.47801 5.73622 6.18112 5.4783 6.05078C5.34521 5.98355 5.06217 5.95688 4.92523 5.99865ZM5.49853 6.44422C5.57416 6.33741 5.54107 6.22198 5.41245 6.14391C5.1675 5.99525 4.79708 6.11827 4.79708 6.34826C4.79708 6.46274 4.99025 6.58765 5.16731 6.58765C5.28516 6.58765 5.44644 6.5178 5.49853 6.44422Z', - })) - ) - ) -} -var UNISWAP_LOGO_URL = - 'data:image/svg+xml,%3Csvg%20width%3D%2214%22%20height%3D%2215%22%20viewBox%3D%220%200%2014%2015%22%20fill%3D%22black%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20style%3D%22mix-blend-mode%3Adarken%22%3E%3Cpath%20d%3D%22M4.15217%201.55141C3.96412%201.52242%203.95619%201.51902%204.04468%201.5055C4.21427%201.47958%204.61472%201.51491%204.89067%201.58012C5.53489%201.73232%206.12109%202.12221%206.74683%202.81466L6.91307%202.99862L7.15088%202.96062C8.15274%202.8006%209.17194%202.92778%2010.0244%203.31918C10.2589%203.42686%2010.6287%203.64121%2010.6749%203.69629C10.6896%203.71384%2010.7166%203.82684%2010.7349%203.94742C10.7982%204.36458%2010.7665%204.68434%2010.6382%204.92317C10.5683%205.05313%2010.5644%205.09432%2010.6114%205.20554C10.6489%205.2943%2010.7534%205.35999%2010.8569%205.35985C11.0687%205.35956%2011.2968%205.0192%2011.4024%204.54561L11.4444%204.3575L11.5275%204.45109C11.9835%204.96459%2012.3417%205.66488%2012.4032%206.16335L12.4192%206.29332L12.3426%206.17517C12.2107%205.97186%2012.0781%205.83346%2011.9084%205.72183C11.6024%205.52062%2011.2789%205.45215%2010.4222%205.40727C9.64839%205.36675%209.21045%205.30106%208.77621%205.16032C8.03738%204.9209%207.66493%204.60204%206.78729%203.4576C6.39748%202.94928%206.15654%202.66804%205.91687%202.44155C5.37228%201.92691%204.83716%201.65701%204.15217%201.55141Z%22%2F%3E%3Cpath%20d%3D%22M10.8494%202.68637C10.8689%202.34575%2010.9153%202.12108%2011.0088%201.9159C11.0458%201.83469%2011.0804%201.76822%2011.0858%201.76822C11.0911%201.76822%2011.075%201.82816%2011.05%201.90142C10.9821%202.10054%2010.9709%202.3729%2011.0177%202.68978C11.0771%203.09184%2011.1109%203.14985%2011.5385%203.58416C11.739%203.78788%2011.9723%204.0448%2012.0568%204.15511L12.2106%204.35568L12.0568%204.21234C11.8688%204.03705%2011.4364%203.6952%2011.3409%203.64633C11.2768%203.61356%2011.2673%203.61413%2011.2278%203.65321C11.1914%203.68922%2011.1837%203.74333%2011.1787%203.99915C11.1708%204.39786%2011.1161%204.65377%2010.9842%204.90965C10.9128%205.04805%2010.9015%205.01851%2010.9661%204.8623C11.0143%204.74566%2011.0192%204.69439%2011.0189%204.30842C11.0181%203.53291%2010.9255%203.34647%2010.3823%203.02709C10.2447%202.94618%2010.0179%202.8295%209.87839%202.76778C9.73887%202.70606%209.62805%202.6523%209.63208%202.64828C9.64746%202.63307%2010.1772%202.78675%2010.3905%202.86828C10.7077%202.98954%2010.76%203.00526%2010.7985%202.99063C10.8244%202.98082%2010.8369%202.90608%2010.8494%202.68637Z%22%2F%3E%3Cpath%20d%3D%22M4.51745%204.01304C4.13569%203.49066%203.89948%202.68973%203.95062%202.091L3.96643%201.90572L4.05333%201.92148C4.21652%201.95106%204.49789%202.05515%204.62964%202.13469C4.9912%202.35293%205.14773%202.64027%205.30697%203.37811C5.35362%203.59423%205.41482%203.8388%205.44298%203.9216C5.48831%204.05487%205.65962%204.36617%205.7989%204.56834C5.89922%204.71395%205.83258%204.78295%205.61082%204.76305C5.27215%204.73267%204.8134%204.41799%204.51745%204.01304Z%22%2F%3E%3Cpath%20d%3D%22M10.3863%207.90088C8.60224%207.18693%207.97389%206.56721%207.97389%205.52157C7.97389%205.36769%207.97922%205.24179%207.98571%205.24179C7.99221%205.24179%208.06124%205.29257%208.1391%205.35465C8.50088%205.64305%208.906%205.76623%2010.0275%205.92885C10.6875%206.02455%2011.0589%206.10185%2011.4015%206.21477C12.4904%206.57371%2013.1641%207.30212%2013.3248%208.29426C13.3715%208.58255%2013.3441%209.12317%2013.2684%209.4081C13.2087%209.63315%2013.0263%2010.0388%2012.9779%2010.0544C12.9645%2010.0587%2012.9514%2010.0076%2012.9479%209.93809C12.9296%209.56554%2012.7402%209.20285%2012.4221%208.93116C12.0604%208.62227%2011.5745%208.37633%2010.3863%207.90088Z%22%2F%3E%3Cpath%20d%3D%22M9.13385%208.19748C9.11149%208.06527%209.07272%207.89643%209.04769%207.82228L9.00217%207.68748L9.08672%207.7818C9.20374%207.91233%209.2962%208.07937%209.37457%208.30185C9.43438%208.47165%209.44111%208.52215%209.44066%208.79807C9.4402%209.06896%209.43273%209.12575%209.3775%209.27858C9.29042%209.51959%209.18233%209.69048%209.00097%209.87391C8.67507%2010.2036%208.25607%2010.3861%207.65143%2010.4618C7.54633%2010.4749%207.24%2010.4971%206.97069%2010.511C6.292%2010.5461%205.84531%2010.6186%205.44393%2010.7587C5.38623%2010.7788%205.3347%2010.7911%205.32947%2010.7859C5.31323%2010.7698%205.58651%2010.6079%205.81223%2010.4998C6.1305%2010.3474%206.44733%2010.2643%207.15719%2010.1468C7.50785%2010.0887%207.86998%2010.0183%207.96194%209.99029C8.83033%209.72566%209.27671%209.04276%209.13385%208.19748Z%22%2F%3E%3Cpath%20d%3D%22M9.95169%209.64109C9.71465%209.13463%209.66022%208.64564%209.79009%208.18961C9.80399%208.14088%209.82632%208.101%209.83976%208.101C9.85319%208.101%209.90913%208.13105%209.96404%208.16777C10.0733%208.24086%2010.2924%208.36395%2010.876%208.68023C11.6043%209.0749%2012.0196%209.3805%2012.302%209.72965C12.5493%2010.0354%2012.7023%2010.3837%2012.776%2010.8084C12.8177%2011.0489%2012.7932%2011.6277%2012.7311%2011.8699C12.5353%2012.6337%2012.0802%2013.2336%2011.4311%2013.5837C11.336%2013.635%2011.2506%2013.6771%2011.2414%2013.6773C11.2321%2013.6775%2011.2668%2013.5899%2011.3184%2013.4827C11.5367%2013.029%2011.5616%2012.5877%2011.3965%2012.0965C11.2954%2011.7957%2011.0893%2011.4287%2010.6732%2010.8084C10.1893%2010.0873%2010.0707%209.89539%209.95169%209.64109Z%22%2F%3E%3Cpath%20d%3D%22M3.25046%2012.3737C3.91252%2011.8181%204.73629%2011.4234%205.48666%2011.3022C5.81005%2011.25%206.34877%2011.2707%206.64823%2011.3469C7.12824%2011.469%207.55763%2011.7425%207.78094%2012.0683C7.99918%2012.3867%208.09281%2012.6642%208.19029%2013.2816C8.22875%2013.5252%208.27057%2013.7697%208.28323%2013.8251C8.35644%2014.1451%208.4989%2014.4008%208.67544%2014.5293C8.95583%2014.7333%209.43865%2014.7459%209.91362%2014.5618C9.99423%2014.5305%2010.0642%2014.5089%2010.0691%2014.5138C10.0864%2014.5308%209.84719%2014.6899%209.67847%2014.7737C9.45143%2014.8864%209.2709%2014.93%209.03102%2014.93C8.59601%2014.93%208.23486%2014.7101%207.9335%2014.2616C7.87419%2014.1733%207.7409%2013.909%207.63729%2013.6741C7.3191%2012.9528%207.16199%2012.7331%206.79255%2012.4926C6.47104%2012.2834%206.05641%2012.2459%205.74449%2012.3979C5.33475%2012.5976%205.22043%2013.118%205.51389%2013.4478C5.63053%2013.5789%205.84803%2013.6919%206.02588%2013.7139C6.35861%2013.7551%206.64455%2013.5035%206.64455%2013.1696C6.64455%2012.9528%206.56071%2012.8291%206.34966%2012.7344C6.0614%2012.6051%205.75156%2012.7562%205.75304%2013.0254C5.75368%2013.1402%205.80396%2013.2122%205.91971%2013.2643C5.99397%2013.2977%205.99569%2013.3003%205.93514%2013.2878C5.67066%2013.2333%205.6087%2012.9164%205.82135%2012.706C6.07667%2012.4535%206.60461%2012.5649%206.78591%2012.9097C6.86208%2013.0545%206.87092%2013.3429%206.80451%2013.517C6.6559%2013.9068%206.22256%2014.1117%205.78297%2014.0002C5.48368%2013.9242%205.36181%2013.842%205.00097%2013.4726C4.37395%2012.8306%204.13053%2012.7062%203.22657%2012.566L3.05335%2012.5391L3.25046%2012.3737Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M0.308383%200.883984C2.40235%203.40996%203.84457%204.45213%204.00484%204.67231C4.13717%204.85412%204.08737%205.01757%203.86067%205.14567C3.7346%205.21689%203.47541%205.28905%203.34564%205.28905C3.19887%205.28905%203.14847%205.23278%203.14847%205.23278C3.06337%205.15255%203.01544%205.16658%202.5784%204.39555C1.97166%203.45981%201.46389%202.68357%201.45004%202.67057C1.41801%202.64052%201.41856%202.64153%202.51654%204.59413C2.69394%205.0011%202.55182%205.15049%202.55182%205.20845C2.55182%205.32636%202.51946%205.38834%202.37311%205.55059C2.12914%205.8211%202.02008%206.12505%201.94135%206.7541C1.8531%207.45926%201.60492%207.95737%200.917156%208.80989C0.514562%209.30893%200.448686%209.4004%200.3471%209.60153C0.219144%209.85482%200.183961%209.99669%200.169701%2010.3165C0.154629%2010.6547%200.183983%2010.8732%200.287934%2011.1965C0.378939%2011.4796%200.473932%2011.6665%200.716778%2012.0403C0.926351%2012.3629%201.04702%2012.6027%201.04702%2012.6965C1.04702%2012.7711%201.06136%2012.7712%201.38611%2012.6983C2.16328%2012.5239%202.79434%2012.2171%203.14925%2011.8411C3.36891%2011.6084%203.42048%2011.4799%203.42215%2011.1611C3.42325%2010.9525%203.41587%2010.9088%203.35914%2010.7888C3.2668%2010.5935%203.09869%2010.4311%202.72817%2010.1794C2.2427%209.84953%202.03534%209.58398%201.97807%209.21878C1.93108%208.91913%201.98559%208.70771%202.25416%208.14825C2.53214%207.56916%202.60103%207.32239%202.64763%206.73869C2.67773%206.36158%202.71941%206.21286%202.82842%206.09348C2.94212%205.969%203.04447%205.92684%203.32584%205.88863C3.78457%205.82635%204.07667%205.70839%204.31677%205.48849C4.52505%205.29772%204.61221%205.11391%204.62558%204.8372L4.63574%204.62747L4.51934%204.49259C4.09783%204.00411%200.0261003%200.5%200.000160437%200.5C-0.00538105%200.5%200.133325%200.672804%200.308383%200.883984ZM1.28364%2010.6992C1.37894%2010.5314%201.3283%2010.3158%201.16889%2010.2104C1.01827%2010.1109%200.78428%2010.1578%200.78428%2010.2875C0.78428%2010.3271%200.806303%2010.3559%200.855937%2010.3813C0.939514%2010.424%200.945581%2010.4721%200.879823%2010.5703C0.81323%2010.6698%200.818604%2010.7573%200.894991%2010.8167C1.0181%2010.9125%201.19237%2010.8598%201.28364%2010.6992Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M4.92523%205.99865C4.70988%206.06439%204.50054%206.29124%204.43574%206.5291C4.39621%206.67421%204.41864%206.92875%204.47785%207.00736C4.57351%207.13433%204.66602%207.16778%204.91651%207.16603C5.40693%207.16263%205.83327%206.95358%205.88284%206.69224C5.92347%206.47801%205.73622%206.18112%205.4783%206.05078C5.34521%205.98355%205.06217%205.95688%204.92523%205.99865ZM5.49853%206.44422C5.57416%206.33741%205.54107%206.22198%205.41245%206.14391C5.1675%205.99525%204.79708%206.11827%204.79708%206.34826C4.79708%206.46274%204.99025%206.58765%205.16731%206.58765C5.28516%206.58765%205.44644%206.5178%205.49853%206.44422Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E' - -var ContentWrapper$3 = styled__default['default'](AutoColumn)( - templateObject_1$18 || (templateObject_1$18 = __makeTemplateObject(['\n width: 100%;\n'], ['\n width: 100%;\n'])) -) -var ModalUpper = styled__default['default'](DataCard)( - templateObject_2$Q || - (templateObject_2$Q = __makeTemplateObject( - [ - '\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n', - ], - [ - '\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n', - ] - )) -) -var ConfirmOrLoadingWrapper = styled__default['default'].div( - templateObject_3$I || - (templateObject_3$I = __makeTemplateObject( - ['\n width: 100%;\n padding: 24px;\n position: relative;\n background: ', ';\n'], - ['\n width: 100%;\n padding: 24px;\n position: relative;\n background: ', ';\n'] - )), - function (_a) { - var activeBG = _a.activeBG - return ( - activeBG && - 'radial-gradient(76.02% 75.41% at 1.84% 0%, rgba(255, 0, 122, 0.2) 0%, rgba(33, 114, 229, 0.2) 100%), #FFFFFF;' - ) - } -) -var ConfirmedIcon$1 = styled__default['default'](ColumnCenter)( - templateObject_4$x || - (templateObject_4$x = __makeTemplateObject(['\n padding: 60px 0;\n'], ['\n padding: 60px 0;\n'])) -) -var SOCKS_AMOUNT = 1000 -var USER_AMOUNT = 400 -function ClaimModal() { - var _a, _b, _c, _d, _e, _f, _g - var isOpen = useModalOpen(ApplicationModal.SELF_CLAIM) - var toggleClaimModal = useToggleSelfClaimModal() - var _h = useActiveWeb3React(), - account = _h.account, - chainId = _h.chainId - // used for UI loading states - var _j = __read(React.useState(false), 2), - attempting = _j[0], - setAttempting = _j[1] - // get user claim data - var userClaimData = useUserClaimData(account) - // monitor the status of the claim from contracts and txns - var claimCallback = useClaimCallback(account).claimCallback - var unclaimedAmount = useUserUnclaimedAmount(account) - var _k = useUserHasSubmittedClaim(account !== null && account !== void 0 ? account : undefined), - claimSubmitted = _k.claimSubmitted, - claimTxn = _k.claimTxn - var claimConfirmed = Boolean(claimTxn === null || claimTxn === void 0 ? void 0 : claimTxn.receipt) - function onClaim() { - setAttempting(true) - claimCallback() - // reset modal and log error - .catch(function (error) { - setAttempting(false) - console.log(error) - }) - } - // once confirmed txn is found, if modal is closed open, mark as not attempting regradless - React.useEffect( - function () { - if (claimConfirmed && claimSubmitted && attempting) { - setAttempting(false) - if (!isOpen) { - toggleClaimModal() - } - } - }, - [attempting, claimConfirmed, claimSubmitted, isOpen, toggleClaimModal] - ) - var nonLPAmount = JSBI__default['default'].multiply( - JSBI__default['default'].BigInt( - (( - (_a = userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.flags) === null || - _a === void 0 - ? void 0 - : _a.isSOCKS - ) - ? SOCKS_AMOUNT - : 0) + - (( - (_b = userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.flags) === null || - _b === void 0 - ? void 0 - : _b.isUser - ) - ? USER_AMOUNT - : 0) - ), - JSBI__default['default'].exponentiate(JSBI__default['default'].BigInt(10), JSBI__default['default'].BigInt(18)) - ) - return jsxRuntime.jsxs( - Modal, - __assign( - { isOpen, onDismiss: toggleClaimModal, maxHeight: 90 }, - { - children: [ - jsxRuntime.jsx(Confetti, { start: Boolean(isOpen && claimConfirmed) }, void 0), - !attempting && - !claimConfirmed && - jsxRuntime.jsxs( - ContentWrapper$3, - __assign( - { gap: 'lg' }, - { - children: [ - jsxRuntime.jsxs( - ModalUpper, - { - children: [ - jsxRuntime.jsx(CardBGImage, {}, void 0), - jsxRuntime.jsx(CardNoise, {}, void 0), - jsxRuntime.jsxs( - CardSection, - __assign( - { gap: 'md' }, - { - children: [ - jsxRuntime.jsxs( - RowBetween, - { - children: [ - jsxRuntime.jsx( - ThemedText.White, - __assign( - { fontWeight: 500 }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'Claim UNI' }, void 0) } - ), - void 0 - ), - jsxRuntime.jsx( - CloseIcon$2, - { onClick: toggleClaimModal, style: { zIndex: 99 }, color: 'white' }, - void 0 - ), - ], - }, - void 0 - ), - jsxRuntime.jsx( - ThemedText.White, - __assign( - { fontWeight: 700, fontSize: 36 }, - { - children: jsxRuntime.jsxs( - macro.Trans, - { - children: [ - unclaimedAmount === null || unclaimedAmount === void 0 - ? void 0 - : unclaimedAmount.toFixed( - 0, - (_c = { groupSeparator: ',' }) !== null && _c !== void 0 ? _c : '-' - ), - ' UNI', - ], - }, - void 0 - ), - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - jsxRuntime.jsx(Break$1, {}, void 0), - jsxRuntime.jsxs( - CardSection, - __assign( - { gap: 'sm' }, - { - children: [ - ((_d = - userClaimData === null || userClaimData === void 0 - ? void 0 - : userClaimData.flags) === null || _d === void 0 - ? void 0 - : _d.isSOCKS) && - jsxRuntime.jsxs( - RowBetween, - { - children: [ - jsxRuntime.jsx( - ThemedText.SubHeader, - __assign({ color: 'white' }, { children: 'SOCKS' }), - void 0 - ), - jsxRuntime.jsx( - ThemedText.SubHeader, - __assign( - { color: 'white' }, - { - children: jsxRuntime.jsxs( - macro.Trans, - { children: [SOCKS_AMOUNT, ' UNI'] }, - void 0 - ), - } - ), - void 0 - ), - ], - }, - void 0 - ), - ((_e = - userClaimData === null || userClaimData === void 0 - ? void 0 - : userClaimData.flags) === null || _e === void 0 - ? void 0 - : _e.isLP) && - unclaimedAmount && - JSBI__default['default'].greaterThanOrEqual( - unclaimedAmount.quotient, - nonLPAmount - ) && - jsxRuntime.jsxs( - RowBetween, - { - children: [ - jsxRuntime.jsx( - ThemedText.SubHeader, - __assign( - { color: 'white' }, - { - children: jsxRuntime.jsx( - macro.Trans, - { children: 'Liquidity' }, - void 0 - ), - } - ), - void 0 - ), - jsxRuntime.jsx( - ThemedText.SubHeader, - __assign( - { color: 'white' }, - { - children: jsxRuntime.jsxs( - macro.Trans, - { - children: [ - unclaimedAmount - .subtract( - sdkCore.CurrencyAmount.fromRawAmount( - unclaimedAmount.currency, - nonLPAmount - ) - ) - .toFixed(0, { groupSeparator: ',' }), - ' ', - 'UNI', - ], - }, - void 0 - ), - } - ), - void 0 - ), - ], - }, - void 0 - ), - ((_f = - userClaimData === null || userClaimData === void 0 - ? void 0 - : userClaimData.flags) === null || _f === void 0 - ? void 0 - : _f.isUser) && - jsxRuntime.jsxs( - RowBetween, - { - children: [ - jsxRuntime.jsx( - ThemedText.SubHeader, - __assign( - { color: 'white' }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'User' }, void 0) } - ), - void 0 - ), - jsxRuntime.jsx( - ThemedText.SubHeader, - __assign( - { color: 'white' }, - { - children: jsxRuntime.jsxs( - macro.Trans, - { children: [USER_AMOUNT, ' UNI'] }, - void 0 - ), - } - ), - void 0 - ), - ], - }, - void 0 - ), - ], - } - ), - void 0 - ), - ], - }, - void 0 - ), - jsxRuntime.jsxs( - AutoColumn, - __assign( - { gap: 'md', style: { padding: '1rem', paddingTop: '0' }, justify: 'center' }, - { - children: [ - jsxRuntime.jsx( - ThemedText.SubHeader, - __assign( - { fontWeight: 500 }, - { - children: jsxRuntime.jsxs( - macro.Trans, - { - children: [ - 'As a member of the Uniswap community you may claim UNI to be used for voting and governance.', - jsxRuntime.jsx('br', {}, void 0), - jsxRuntime.jsx('br', {}, void 0), - jsxRuntime.jsx( - ExternalLink, - __assign( - { href: 'https://uniswap.org/blog/uni' }, - { children: 'Read more about UNI' } - ), - void 0 - ), - ], - }, - void 0 - ), - } - ), - void 0 - ), - jsxRuntime.jsx( - ButtonPrimary, - __assign( - { - disabled: !address.isAddress(account !== null && account !== void 0 ? account : ''), - padding: '16px 16px', - width: '100%', - $borderRadius: '12px', - mt: '1rem', - onClick: onClaim, - }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'Claim UNI' }, void 0) } - ), - void 0 - ), - ], - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - (attempting || claimConfirmed) && - jsxRuntime.jsxs( - ConfirmOrLoadingWrapper, - __assign( - { activeBG: true }, - { - children: [ - jsxRuntime.jsx(CardNoise, {}, void 0), - jsxRuntime.jsx(CardBGImageSmaller, { desaturate: true }, void 0), - jsxRuntime.jsxs( - RowBetween, - { - children: [ - jsxRuntime.jsx('div', {}, void 0), - jsxRuntime.jsx( - CloseIcon$2, - { onClick: toggleClaimModal, style: { zIndex: 99 }, stroke: 'black' }, - void 0 - ), - ], - }, - void 0 - ), - jsxRuntime.jsx( - ConfirmedIcon$1, - { - children: !claimConfirmed - ? jsxRuntime.jsx(CustomLightSpinner, { src: Circle$1, alt: 'loader', size: '90px' }, void 0) - : jsxRuntime.jsx(UniTokenAnimated, { width: '72px', src: tokenLogo, alt: 'UNI' }, void 0), - }, - void 0 - ), - jsxRuntime.jsxs( - AutoColumn, - __assign( - { gap: '100px', justify: 'center' }, - { - children: [ - jsxRuntime.jsxs( - AutoColumn, - __assign( - { gap: '12px', justify: 'center' }, - { - children: [ - jsxRuntime.jsx( - ThemedText.LargeHeader, - __assign( - { fontWeight: 600, color: 'black' }, - { - children: claimConfirmed - ? jsxRuntime.jsx(macro.Trans, { children: 'Claimed!' }, void 0) - : jsxRuntime.jsx(macro.Trans, { children: 'Claiming' }, void 0), - } - ), - void 0 - ), - !claimConfirmed && - jsxRuntime.jsx( - rebass.Text, - __assign( - { fontSize: 36, color: '#ff007a', fontWeight: 800 }, - { - children: jsxRuntime.jsxs( - macro.Trans, - { - children: [ - unclaimedAmount === null || unclaimedAmount === void 0 - ? void 0 - : unclaimedAmount.toFixed( - 0, - (_g = { groupSeparator: ',' }) !== null && _g !== void 0 - ? _g - : '-' - ), - ' UNI', - ], - }, - void 0 - ), - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - claimConfirmed && - jsxRuntime.jsx( - jsxRuntime.Fragment, - { - children: jsxRuntime.jsx( - ThemedText.SubHeader, - __assign( - { fontWeight: 500, color: 'black' }, - { - children: jsxRuntime.jsxs( - macro.Trans, - { - children: [ - jsxRuntime.jsxs( - 'span', - __assign( - { role: 'img', 'aria-label': 'party-hat' }, - { children: ['\uD83C\uDF89', ' '] } - ), - void 0 - ), - 'Welcome to team Unicorn :)', - ' ', - jsxRuntime.jsx( - 'span', - __assign( - { role: 'img', 'aria-label': 'party-hat' }, - { children: '\uD83C\uDF89' } - ), - void 0 - ), - ], - }, - void 0 - ), - } - ), - void 0 - ), - }, - void 0 - ), - attempting && - !claimSubmitted && - jsxRuntime.jsx( - ThemedText.SubHeader, - __assign( - { color: 'black' }, - { - children: jsxRuntime.jsx( - macro.Trans, - { children: 'Confirm this transaction in your wallet' }, - void 0 - ), - } - ), - void 0 - ), - attempting && - claimSubmitted && - !claimConfirmed && - chainId && - (claimTxn === null || claimTxn === void 0 ? void 0 : claimTxn.hash) && - jsxRuntime.jsx( - ExternalLink, - __assign( - { - href: getExplorerLink( - chainId, - claimTxn === null || claimTxn === void 0 ? void 0 : claimTxn.hash, - ExplorerDataType.TRANSACTION - ), - style: { zIndex: 99 }, - }, - { - children: jsxRuntime.jsx( - macro.Trans, - { children: 'View transaction on Explorer' }, - void 0 - ), - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - ], - } - ), - void 0 - ) -} -var templateObject_1$18, templateObject_2$Q, templateObject_3$I, templateObject_4$x - -var Card = styled__default['default'](styledComponents.Box)( - templateObject_1$17 || - (templateObject_1$17 = __makeTemplateObject( - ['\n width: ', ';\n padding: ', ';\n border-radius: ', ';\n border: ', ';\n'], - ['\n width: ', ';\n padding: ', ';\n border-radius: ', ';\n border: ', ';\n'] - )), - function (_a) { - var width = _a.width - return width !== null && width !== void 0 ? width : '100%' - }, - function (_a) { - var padding = _a.padding - return padding !== null && padding !== void 0 ? padding : '1rem' - }, - function (_a) { - var $borderRadius = _a.$borderRadius - return $borderRadius !== null && $borderRadius !== void 0 ? $borderRadius : '16px' - }, - function (_a) { - var border = _a.border - return border - } -) -var LightCard = styled__default['default'](Card)( - templateObject_2$P || - (templateObject_2$P = __makeTemplateObject( - ['\n border: 1px solid ', ';\n background-color: ', ';\n'], - ['\n border: 1px solid ', ';\n background-color: ', ';\n'] - )), - function (_a) { - var theme = _a.theme - return theme.bg2 - }, - function (_a) { - var theme = _a.theme - return theme.bg1 - } -) -var LightGreyCard = styled__default['default'](Card)( - templateObject_3$H || - (templateObject_3$H = __makeTemplateObject(['\n background-color: ', ';\n'], ['\n background-color: ', ';\n'])), - function (_a) { - var theme = _a.theme - return theme.bg2 - } -) -var GreyCard = styled__default['default'](Card)( - templateObject_4$w || - (templateObject_4$w = __makeTemplateObject(['\n background-color: ', ';\n'], ['\n background-color: ', ';\n'])), - function (_a) { - var theme = _a.theme - return theme.bg3 - } -) -var DarkGreyCard = styled__default['default'](Card)( - templateObject_5$p || - (templateObject_5$p = __makeTemplateObject(['\n background-color: ', ';\n'], ['\n background-color: ', ';\n'])), - function (_a) { - var theme = _a.theme - return theme.bg2 - } -) -styled__default['default'](Card)( - templateObject_6$k || - (templateObject_6$k = __makeTemplateObject(['\n background-color: ', ';\n'], ['\n background-color: ', ';\n'])), - function (_a) { - var theme = _a.theme - return theme.bg0 - } -) -var OutlineCard = styled__default['default'](Card)( - templateObject_7$h || - (templateObject_7$h = __makeTemplateObject(['\n border: 1px solid ', ';\n'], ['\n border: 1px solid ', ';\n'])), - function (_a) { - var theme = _a.theme - return theme.bg3 - } -) -styled__default['default'](Card)( - templateObject_8$f || - (templateObject_8$f = __makeTemplateObject( - ['\n background-color: rgba(243, 132, 30, 0.05);\n color: ', ';\n font-weight: 500;\n'], - ['\n background-color: rgba(243, 132, 30, 0.05);\n color: ', ';\n font-weight: 500;\n'] - )), - function (_a) { - var theme = _a.theme - return theme.yellow3 - } -) -styled__default['default'](Card)( - templateObject_9$e || - (templateObject_9$e = __makeTemplateObject( - ['\n background-color: ', ';\n color: ', ';\n border-radius: 12px;\n'], - ['\n background-color: ', ';\n color: ', ';\n border-radius: 12px;\n'] - )), - function (_a) { - var theme = _a.theme - return theme.primary5 - }, - function (_a) { - var theme = _a.theme - return theme.blue2 - } -) -var templateObject_1$17, - templateObject_2$P, - templateObject_3$H, - templateObject_4$w, - templateObject_5$p, - templateObject_6$k, - templateObject_7$h, - templateObject_8$f, - templateObject_9$e - -var Wrapper$h = styled__default['default'].div( - templateObject_1$16 || - (templateObject_1$16 = __makeTemplateObject( - ['\n max-height: 70vh;\n overflow: auto;\n padding: 0 1rem;\n'], - ['\n max-height: 70vh;\n overflow: auto;\n padding: 0 1rem;\n'] - )) -) -var StyledExternalCard = styled__default['default'](Card)( - templateObject_2$O || - (templateObject_2$O = __makeTemplateObject( - [ - '\n background-color: ', - ';\n padding: 0.5rem;\n width: 100%;\n\n :hover,\n :focus,\n :active {\n background-color: ', - ';\n }\n', - ], - [ - '\n background-color: ', - ';\n padding: 0.5rem;\n width: 100%;\n\n :hover,\n :focus,\n :active {\n background-color: ', - ';\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.primary5 - }, - function (_a) { - var theme = _a.theme - return theme.primary4 - } -) -var HoverText$1 = styled__default['default'].div( - templateObject_3$G || - (templateObject_3$G = __makeTemplateObject( - [ - '\n text-decoration: none;\n color: ', - ';\n display: flex;\n align-items: center;\n\n :hover {\n cursor: pointer;\n }\n', - ], - [ - '\n text-decoration: none;\n color: ', - ';\n display: flex;\n align-items: center;\n\n :hover {\n cursor: pointer;\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.text1 - } -) -var StyledLinkOut = styled__default['default'](reactFeather.ArrowDown)( - templateObject_4$v || - (templateObject_4$v = __makeTemplateObject( - ['\n transform: rotate(230deg);\n'], - ['\n transform: rotate(230deg);\n'] - )) -) -var EXTERNAL_APIS = [ - { - name: 'Auto Router', - description: jsxRuntime.jsx( - macro.Trans, - { children: 'The app fetches the optimal trade route from a Uniswap Labs server.' }, - void 0 - ), - }, - { - name: 'Infura', - description: jsxRuntime.jsx( - macro.Trans, - { children: 'The app fetches on-chain data and constructs contract calls with an Infura API.' }, - void 0 - ), - }, - { - name: 'TRM Labs', - description: jsxRuntime.jsxs( - jsxRuntime.Fragment, - { - children: [ - jsxRuntime.jsx( - macro.Trans, - { - children: - 'The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.', - }, - void 0 - ), - ' ', - jsxRuntime.jsx( - ExternalLink, - __assign( - { href: 'https://help.uniswap.org/en/articles/5675203-terms-of-service-faq' }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'Learn more' }, void 0) } - ), - void 0 - ), - ], - }, - void 0 - ), - }, - { - name: 'Google Analytics', - description: jsxRuntime.jsx( - macro.Trans, - { children: 'The app logs anonymized usage statistics in order to improve over time.' }, - void 0 - ), - }, - { - name: 'The Graph', - description: jsxRuntime.jsx( - macro.Trans, - { children: 'The app fetches blockchain data from The Graph\u2019s hosted service.' }, - void 0 - ), - }, -] -function PrivacyPolicyModal() { - var node = React.useRef() - var open = useModalOpen(ApplicationModal.PRIVACY_POLICY) - var toggle = useTogglePrivacyPolicy() - React.useEffect( - function () { - if (!open) return - ReactGA__default['default'].event({ - category: 'Modal', - action: 'Show Legal', - }) - }, - [open] - ) - return jsxRuntime.jsx( - Modal, - __assign( - { - isOpen: open, - onDismiss() { - return toggle() - }, - }, - { - children: jsxRuntime.jsxs( - AutoColumn, - __assign( - { gap: '12px', ref: node }, - { - children: [ - jsxRuntime.jsxs( - RowBetween, - __assign( - { padding: '1rem 1rem 0.5rem 1rem' }, - { - children: [ - jsxRuntime.jsx( - ThemedText.MediumHeader, - { children: jsxRuntime.jsx(macro.Trans, { children: 'Legal & Privacy' }, void 0) }, - void 0 - ), - jsxRuntime.jsx( - HoverText$1, - __assign( - { - onClick() { - return toggle() - }, - }, - { children: jsxRuntime.jsx(reactFeather.X, { size: 24 }, void 0) } - ), - void 0 - ), - ], - } - ), - void 0 - ), - jsxRuntime.jsx(PrivacyPolicy, {}, void 0), - ], - } - ), - void 0 - ), - } - ), - void 0 - ) -} -function PrivacyPolicy() { - return jsxRuntime.jsx( - Wrapper$h, - __assign( - { - draggable: 'true', - onTouchMove(e) { - // prevent modal gesture handler from dismissing modal when content is scrolling - if (isMobile) { - e.stopPropagation() - } - }, - }, - { - children: jsxRuntime.jsxs( - AutoColumn, - __assign( - { gap: '16px' }, - { - children: [ - jsxRuntime.jsxs( - AutoColumn, - __assign( - { gap: '8px', style: { width: '100%' } }, - { - children: [ - jsxRuntime.jsx( - StyledExternalCard, - { - children: jsxRuntime.jsx( - ExternalLink, - __assign( - { href: 'https://uniswap.org/terms-of-service' }, - { - children: jsxRuntime.jsxs( - RowBetween, - { - children: [ - jsxRuntime.jsxs( - AutoRow, - __assign( - { gap: '4px' }, - { - children: [ - jsxRuntime.jsx(reactFeather.Info, { size: 20 }, void 0), - jsxRuntime.jsx( - ThemedText.Main, - __assign( - { fontSize: 14, color: 'primaryText1' }, - { - children: jsxRuntime.jsx( - macro.Trans, - { children: "Uniswap Labs' Terms of Service" }, - void 0 - ), - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - jsxRuntime.jsx(StyledLinkOut, { size: 20 }, void 0), - ], - }, - void 0 - ), - } - ), - void 0 - ), - }, - void 0 - ), - jsxRuntime.jsx( - StyledExternalCard, - { - children: jsxRuntime.jsx( - ExternalLink, - __assign( - { href: 'https://uniswap.org/disclaimer/' }, - { - children: jsxRuntime.jsxs( - RowBetween, - { - children: [ - jsxRuntime.jsxs( - AutoRow, - __assign( - { gap: '4px' }, - { - children: [ - jsxRuntime.jsx(reactFeather.Info, { size: 20 }, void 0), - jsxRuntime.jsx( - ThemedText.Main, - __assign( - { fontSize: 14, color: 'primaryText1' }, - { - children: jsxRuntime.jsx( - macro.Trans, - { children: 'Protocol Disclaimer' }, - void 0 - ), - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - jsxRuntime.jsx(StyledLinkOut, { size: 20 }, void 0), - ], - }, - void 0 - ), - } - ), - void 0 - ), - }, - void 0 - ), - ], - } - ), - void 0 - ), - jsxRuntime.jsx( - ThemedText.Main, - __assign( - { fontSize: 14 }, - { - children: jsxRuntime.jsx( - macro.Trans, - { children: 'This app uses the following third-party APIs:' }, - void 0 - ), - } - ), - void 0 - ), - jsxRuntime.jsxs( - AutoColumn, - __assign( - { gap: '12px' }, - { - children: [ - EXTERNAL_APIS.map(function (_a, i) { - var name = _a.name, - description = _a.description - return jsxRuntime.jsx( - DarkGreyCard, - { - children: jsxRuntime.jsxs( - AutoColumn, - __assign( - { gap: '8px' }, - { - children: [ - jsxRuntime.jsxs( - AutoRow, - __assign( - { gap: '4px' }, - { - children: [ - jsxRuntime.jsx(reactFeather.Info, { size: 18 }, void 0), - jsxRuntime.jsx( - ThemedText.Main, - __assign({ fontSize: 14, color: 'text1' }, { children: name }), - void 0 - ), - ], - } - ), - void 0 - ), - jsxRuntime.jsx( - ThemedText.Main, - __assign({ fontSize: 14 }, { children: description }), - void 0 - ), - ], - } - ), - void 0 - ), - }, - i - ) - }), - jsxRuntime.jsx( - Row$1, - __assign( - { justify: 'center', marginBottom: '1rem' }, - { - children: jsxRuntime.jsx( - ExternalLink, - __assign( - { href: 'https://help.uniswap.org/en/articles/5675203-terms-of-service-faq' }, - { children: jsxRuntime.jsx(macro.Trans, { children: 'Learn more' }, void 0) } - ), - void 0 - ), - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - } - ), - void 0 - ) -} -var templateObject_1$16, templateObject_2$O, templateObject_3$G, templateObject_4$v - -function getAugmentedNamespace(n) { - if (n.__esModule) return n - var a = Object.defineProperty({}, '__esModule', { value: true }) - Object.keys(n).forEach(function (k) { - var d = Object.getOwnPropertyDescriptor(n, k) - Object.defineProperty( - a, - k, - d.get - ? d - : { - enumerable: true, - get() { - return n[k] - }, - } - ) - }) - return a -} - -/*eslint-disable*/ - -var enUS={messages:{"$-":"$-","$<0/>":"$<0/>","${0}":["$",["0"]],"(${0})":["($",["0"],")"],"(View on Explorer)":"(View on Explorer)","(clear all)":"(clear all)","(edit)":"(edit)","- Remove recipient":"- Remove recipient","0 UNI / week":"0 UNI / week","25%":"25%","50%":"50%","75%":"75%","<0/> All Proposals":"<0/> All Proposals","<0/> Votes":"<0/> Votes","<0>Account analytics and accrued fees<1> ↗ ":"<0>Account analytics and accrued fees<1> ↗ ","<0>Current Price:<1><2/><3>{0} per {1}":["<0>Current Price:<1><2/><3>",["0"]," per ",["1"],""],"<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.":"<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.","<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.":"<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.","<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.":"<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.","<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.":"<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.","<0>Unlock voting to prepare for the next proposal.":"<0>Unlock voting to prepare for the next proposal.","<0>🎉 Welcome to team Unicorn :) <1>🎉":"<0>🎉 Welcome to team Unicorn :) <1>🎉","A minimum threshold of 0.25% of the total UNI supply is required to submit proposals":"A minimum threshold of 0.25% of the total UNI supply is required to submit proposals","About":"About","Accept":"Accept","Account":"Account","Active":"Active","Add":"Add","Add <0/> and <1/> to Uniswap V2":"Add <0/> and <1/> to Uniswap V2","Add Delegate +":"Add Delegate +","Add Liquidity":"Add Liquidity","Add V2 Liquidity":"Add V2 Liquidity","Add liquidity.":"Add liquidity.","Add more liquidity":"Add more liquidity","Add {0} to Metamask <0/>":["Add ",["0"]," to Metamask <0/>"],"Add {0}-{1} liquidity":["Add ",["0"],"-",["1"]," liquidity"],"Add {0}/{1} V3 liquidity":["Add ",["0"],"/",["1"]," V3 liquidity"],"Added {0}":["Added ",["0"]],"Address has no available claim":"Address has no available claim","Against":"Against","Allow LP token migration":"Allow LP token migration","Allow high price impact trades and skip the confirm screen. Use at your own risk.":"Allow high price impact trades and skip the confirm screen. Use at your own risk.","Allow the Uniswap Protocol to use your {0}":["Allow the Uniswap Protocol to use your ",["0"]],"Allowed":"Allowed","Amount":"Amount","An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.":"An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.","Approval pending <0/>":"Approval pending <0/>","Approve":"Approve","Approve Token":"Approve Token","Approve {0}":["Approve ",["0"]],"Approve {0} first":["Approve ",["0"]," first"],"Approved":"Approved","Approving":"Approving","Approving {0}":["Approving ",["0"]],"Arbiscan":"Arbiscan","Arbitrum Bridge":"Arbitrum Bridge","Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.":"Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.","Are you sure?":"Are you sure?","As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI":"As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI","At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.":["At least ",["0"]," ",["1"]," and ",["2"]," ",["3"]," will be refunded to your wallet due to selected price range."],"Auto":"Auto","Auto Router API":"Auto Router API","Available to deposit: {0}":["Available to deposit: ",["0"]],"Balance: {0}":["Balance: ",["0"]],"Best for exotic pairs.":"Best for exotic pairs.","Best for most pairs.":"Best for most pairs.","Best for stable pairs.":"Best for stable pairs.","Best for very stable pairs.":"Best for very stable pairs.","Best price route costs ~{formattedGasPriceString} in gas.":["Best price route costs ~",["formattedGasPriceString"]," in gas."],"Blocked address":"Blocked address","Bridge":"Bridge","By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.":"By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.","By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.":"By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.","By connecting a wallet, you agree to Uniswap Labs’ <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.":"By connecting a wallet, you agree to Uniswap Labs’ <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.","Canceled":"Canceled","Change":"Change","Charts":"Charts","Check network status":"Check network status","Check out our v3 LP walkthrough and migration guides.":"Check out our v3 LP walkthrough and migration guides.","Claim":"Claim","Claim <0/> for {0}":["Claim <0/> for ",["0"]],"Claim UNI":"Claim UNI","Claim UNI Token":"Claim UNI Token","Claim UNI reward for {0}":["Claim UNI reward for ",["0"]],"Claim fees":"Claim fees","Claim your UNI tokens":"Claim your UNI tokens","Claimed":"Claimed","Claimed UNI!":"Claimed UNI!","Claimed!":"Claimed!","Claiming":"Claiming","Claiming UNI":"Claiming UNI","Claiming {0} UNI":["Claiming ",["0"]," UNI"],"Clear All":"Clear All","Clear all":"Clear all","Close":"Close","Closed":"Closed","Collect":"Collect","Collect as WETH":"Collect as WETH","Collect fees":"Collect fees","Collect {0}/{1} fees":["Collect ",["0"],"/",["1"]," fees"],"Collected":"Collected","Collecting":"Collecting","Collecting fees":"Collecting fees","Collecting fees will withdraw currently available fees for you.":"Collecting fees will withdraw currently available fees for you.","Confirm":"Confirm","Confirm Supply":"Confirm Supply","Confirm Swap":"Confirm Swap","Confirm swap":"Confirm swap","Confirm this transaction in your wallet":"Confirm this transaction in your wallet","Confirm transaction in wallet":"Confirm transaction in wallet","Connect Wallet":"Connect Wallet","Connect a wallet":"Connect a wallet","Connect to a wallet to find pools":"Connect to a wallet to find pools","Connect to a wallet to view your V2 liquidity.":"Connect to a wallet to view your V2 liquidity.","Connect to a wallet to view your liquidity.":"Connect to a wallet to view your liquidity.","Connect wallet to swap":"Connect wallet to swap","Connected with {name}":["Connected with ",["name"]],"Copied":"Copied","Copy Address":"Copy Address","Create Pool & Supply":"Create Pool & Supply","Create Proposal":"Create Proposal","Create a pair":"Create a pair","Create a pool":"Create a pool","Create an issue on GitHub":"Create an issue on GitHub","Create pool and add {0}/{1} V3 liquidity":["Create pool and add ",["0"],"/",["1"]," V3 liquidity"],"Create pool.":"Create pool.","Create {0}/{1} V3 pool":["Create ",["0"],"/",["1"]," V3 pool"],"Current price":"Current price","Current {0} Price:":["Current ",["0"]," Price:"],"Custom":"Custom","Dark Theme":"Dark Theme","Defeated":"Defeated","Delegate Votes":"Delegate Votes","Delegate voting power to {0}":["Delegate voting power to ",["0"]],"Delegated to:":"Delegated to:","Delegating votes":"Delegating votes","Deposit":"Deposit","Deposit Amounts":"Deposit Amounts","Deposit UNI-V2 LP Tokens":"Deposit UNI-V2 LP Tokens","Deposit liquidity":"Deposit liquidity","Deposit tokens to the {label} network.":["Deposit tokens to the ",["label"]," network."],"Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.":"Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.","Deposited liquidity:":"Deposited liquidity:","Deposited {0} UNI-V2":["Deposited ",["0"]," UNI-V2"],"Depositing Liquidity":"Depositing Liquidity","Description":"Description","Detailed":"Detailed","Details":"Details","Disconnect":"Disconnect","Discord":"Discord","Dismiss":"Dismiss","Docs":"Docs","Don’t see one of your v2 positions? <0>Import it.":"Don’t see one of your v2 positions? <0>Import it.","Earned UNI tokens represent voting shares in Uniswap governance.":"Earned UNI tokens represent voting shares in Uniswap governance.","Edit":"Edit","Efficiency Comparison":"Efficiency Comparison","Enter a percent":"Enter a percent","Enter a recipient":"Enter a recipient","Enter a valid slippage percentage":"Enter a valid slippage percentage","Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.":"Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.","Enter an amount":"Enter an amount","Enter valid list location":"Enter valid list location","Enter valid token address":"Enter valid token address","Enter {0} amount":["Enter ",["0"]," amount"],"Error":"Error","Error connecting":"Error connecting","Error connecting. Try refreshing the page.":"Error connecting. Try refreshing the page.","Error details":"Error details","Error importing list":"Error importing list","Estimate may differ due to your wallet gas settings":"Estimate may differ due to your wallet gas settings","Estimated network fee":"Estimated network fee","Etherscan":"Etherscan","Executed":"Executed","Expanded results from inactive Token Lists":"Expanded results from inactive Token Lists","Expected Output":"Expected Output","Expert Mode":"Expert Mode","Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.":"Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.","Expired":"Expired","Explore Uniswap Analytics.":"Explore Uniswap Analytics.","Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.":["Failed to switch networks from the Uniswap Interface. In order to use Uniswap on ",["0"],", you must change the network in your wallet."],"Fee Tier":"Fee Tier","Fee tier":"Fee tier","Fetching best price...":"Fetching best price...","Fetching best price…":"Fetching best price…","For":"For","For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.":"For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.","From":"From","From (at most)":"From (at most)","Full Range":"Full Range","Full range positions may earn less fees than concentrated positions. Learn more <0>here.":"Full range positions may earn less fees than concentrated positions. Learn more <0>here.","Get support on Discord":"Get support on Discord","Help Center":"Help Center","Hide":"Hide","Hide closed positions":"Hide closed positions","High Price Impact":"High Price Impact","How this app uses APIs":"How this app uses APIs","I understand":"I understand","If you purchase a token from this list, you may not be able to sell it back.":"If you purchase a token from this list, you may not be able to sell it back.","Import":"Import","Import List":"Import List","Import Pool":"Import Pool","Import V2 Pool":"Import V2 Pool","Import at your own risk":"Import at your own risk","In range":"In range","Increase Liquidity":"Increase Liquidity","Initial prices and pool share":"Initial prices and pool share","Initializing...":"Initializing...","Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.":["Input is estimated. You will sell at most <0>",["0"]," ",["1"]," or the transaction will revert."],"Install Metamask":"Install Metamask","Insufficient liquidity for this trade.":"Insufficient liquidity for this trade.","Insufficient {0}":["Insufficient ",["0"]],"Insufficient {0} balance":["Insufficient ",["0"]," balance"],"Interface Settings":"Interface Settings","Invalid pair":"Invalid pair","Invalid pair.":"Invalid pair.","Invalid price input":"Invalid price input","Invalid range selected. The min price must be lower than the max price.":"Invalid range selected. The min price must be lower than the max price.","Invalid recipient":"Invalid recipient","Language":"Language","Learn":"Learn","Learn about providing liquidity":"Learn about providing liquidity","Learn more":"Learn more","Legal & Privacy":"Legal & Privacy","Light Theme":"Light Theme","Liquidity":"Liquidity","Liquidity data not available.":"Liquidity data not available.","Liquidity provider rewards":"Liquidity provider rewards","Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.":"Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.","Lists":"Lists","Loaded":"Loaded","Loading":"Loading","MAX":"MAX","Manage":"Manage","Manage Liquidity in Rewards Pool":"Manage Liquidity in Rewards Pool","Manage Token Lists":"Manage Token Lists","Manage this pool.":"Manage this pool.","Max":"Max","Max Price":"Max Price","Max price":"Max price","Max slippage":"Max slippage","Max:":"Max:","Maximum sent":"Maximum sent","Menu":"Menu","Migrate":"Migrate","Migrate Liquidity to V3":"Migrate Liquidity to V3","Migrate V2 Liquidity":"Migrate V2 Liquidity","Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.":"Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.","Migrate {0}/{1} liquidity to V3":["Migrate ",["0"],"/",["1"]," liquidity to V3"],"Migrating":"Migrating","Min Price":"Min Price","Min price":"Min price","Min:":"Min:","Minimum received":"Minimum received","Missing dependencies":"Missing dependencies","Mock Toggle":"Mock Toggle","More":"More","Network Fee":"Network Fee","Network Warning":"Network Warning","Network fees exceed 50% of the swap amount!":"Network fees exceed 50% of the swap amount!","New Position":"New Position","No V2 Liquidity found.":"No V2 Liquidity found.","No active pools":"No active pools","No data":"No data","No description.":"No description.","No liquidity found.":"No liquidity found.","No pool found.":"No pool found.","No proposals found.":"No proposals found.","No results found.":"No results found.","Not created":"Not created","OFF":"OFF","ON":"ON","ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.":"ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.","Off":"Off","On":"On","Once you are happy with the rate click supply to review.":"Once you are happy with the rate click supply to review.","Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.":["Only UNI votes that were self delegated or delegated to another address before block ",["0"]," are eligible for voting."],"Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.":"Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.","Optimism Gateway":"Optimism Gateway","Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.":"Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.","Optimistic Etherscan":"Optimistic Etherscan","Out of range":"Out of range","Output is estimated.":"Output is estimated.","Output is estimated. If the price changes by more than {0}% your transaction will revert.":["Output is estimated. If the price changes by more than ",["0"],"% your transaction will revert."],"Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.":["Output is estimated. You will receive at least <0>",["0"]," ",["1"]," or the transaction will revert."],"Output will be sent to <0>{0}":["Output will be sent to <0>",["0"],""],"Owner":"Owner","Participating pools":"Participating pools","Pending":"Pending","Please confirm you would like to remove this list by typing REMOVE":"Please confirm you would like to remove this list by typing REMOVE","Please connect to Layer 1 Ethereum":"Please connect to Layer 1 Ethereum","Please connect to a supported network in the dropdown menu or in your wallet.":"Please connect to a supported network in the dropdown menu or in your wallet.","Please type the word \"{confirmWord}\" to enable expert mode.":["Please type the word \"",["confirmWord"],"\" to enable expert mode."],"Polygon Bridge":"Polygon Bridge","Polygonscan":"Polygonscan","Pool":"Pool","Pool Found!":"Pool Found!","Pool Rate":"Pool Rate","Pool rate":"Pool rate","Pool tokens in rewards pool:":"Pool tokens in rewards pool:","Pooled {0}:":["Pooled ",["0"],":"],"Pools Overview":"Pools Overview","Preview":"Preview","Price":"Price","Price Difference:":"Price Difference:","Price Impact":"Price Impact","Price Impact Too High":"Price Impact Too High","Price Updated":"Price Updated","Price impact":"Price impact","Price range":"Price range","Price updated":"Price updated","Price:":"Price:","Prices and pool share":"Prices and pool share","Proposal":"Proposal","Proposal Submitted":"Proposal Submitted","Proposal Title":"Proposal Title","Proposals":"Proposals","Proposals submitted by community members will appear here.":"Proposals submitted by community members will appear here.","Proposed Action":"Proposed Action","Proposer":"Proposer","Protocol Disclaimer":"Protocol Disclaimer","Queued":"Queued","Rates":"Rates","Read more about UNI":"Read more about UNI","Read more about Uniswap governance":"Read more about Uniswap governance","Read more about providing liquidity":"Read more about providing liquidity","Read more about unsupported assets":"Read more about unsupported assets","Recent Transactions":"Recent Transactions","Recent transactions":"Recent transactions","Recipient":"Recipient","Reload the page":"Reload the page","Remove":"Remove","Remove <0/> and <1/>":"Remove <0/> and <1/>","Remove Amount":"Remove Amount","Remove Delegate":"Remove Delegate","Remove Liquidity":"Remove Liquidity","Remove list":"Remove list","Removing {0} {1} and {2} {3}":["Removing ",["0"]," ",["1"]," and ",["2"]," ",["3"]],"Removing {0} {1} and{2} {3}":["Removing ",["0"]," ",["1"]," and",["2"]," ",["3"]],"Request Features":"Request Features","Reset":"Reset","Return":"Return","Review swap":"Review swap","Search by token name or address":"Search by token name or address","Search name or paste address":"Search name or paste address","Select Pair":"Select Pair","Select a network":"Select a network","Select a token":"Select a token","Select a token to find your v2 liquidity.":"Select a token to find your v2 liquidity.","Select an action":"Select an action","Selected Range":"Selected Range","Self":"Self","Self Delegate":"Self Delegate","Set Price Range":"Set Price Range","Set Starting Price":"Set Starting Price","Settings":"Settings","Share of Pool":"Share of Pool","Share of Pool:":"Share of Pool:","Show Portis":"Show Portis","Show closed positions":"Show closed positions","Simple":"Simple","Slippage tolerance":"Slippage tolerance","Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.":"Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.","Something went wrong":"Something went wrong","Something went wrong.":"Something went wrong.","Step 1. Get UNI-V2 Liquidity tokens":"Step 1. Get UNI-V2 Liquidity tokens","Submit new proposal":"Submit new proposal","Submitting Proposal":"Submitting Proposal","Submitting Vote":"Submitting Vote","Succeeded":"Succeeded","Success":"Success","Supply":"Supply","Supplying {0} {1} and {2} {3}":["Supplying ",["0"]," ",["1"]," and ",["2"]," ",["3"]],"Swap":"Swap","Swap <0/> for exactly <1/>":"Swap <0/> for exactly <1/>","Swap Anyway":"Swap Anyway","Swap details":"Swap details","Swap exactly <0/> for <1/>":"Swap exactly <0/> for <1/>","Swap failed: {0}":["Swap failed: ",["0"]],"Swap summary":"Swap summary","Swapping {0} {1} for {2} {3}":["Swapping ",["0"]," ",["1"]," for ",["2"]," ",["3"]],"Take a 10 minute survey to help us improve your experience in the Uniswap app.":"Take a 10 minute survey to help us improve your experience in the Uniswap app.","Tell us what you think ↗":"Tell us what you think ↗","Thanks for being part of the Uniswap community <0/>":"Thanks for being part of the Uniswap community <0/>","The % you will earn in fees.":"The % you will earn in fees.","The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.":"The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.","The app fetches blockchain data from The Graph’s hosted service.":"The app fetches blockchain data from The Graph’s hosted service.","The app fetches on-chain data and constructs contract calls with an Infura API.":"The app fetches on-chain data and constructs contract calls with an Infura API.","The app fetches the optimal trade route from a Uniswap Labs server.":"The app fetches the optimal trade route from a Uniswap Labs server.","The app logs anonymized usage statistics in order to improve over time.":"The app logs anonymized usage statistics in order to improve over time.","The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.":"The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.","The cost of sending this transaction is more than half of the value of the input amount.":"The cost of sending this transaction is more than half of the value of the input amount.","The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.":"The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.","The estimated difference between the USD values of input and output amounts.":"The estimated difference between the USD values of input and output amounts.","The input token cannot be transferred. There may be an issue with the input token.":"The input token cannot be transferred. There may be an issue with the input token.","The market price is outside your specified price range. Single-asset deposit only.":"The market price is outside your specified price range. Single-asset deposit only.","The most recent block number on this network. Prices update on every block.":"The most recent block number on this network. Prices update on every block.","The output token cannot be transferred. There may be an issue with the output token.":"The output token cannot be transferred. There may be an issue with the output token.","The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.":"The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.","The price of this pool is outside of your selected range. Your position is not currently earning fees.":"The price of this pool is outside of your selected range. Your position is not currently earning fees.","The price of this pool is within your selected range. Your position is currently earning fees.":"The price of this pool is within your selected range. Your position is currently earning fees.","The ratio of tokens you add will set the price of this pool.":"The ratio of tokens you add will set the price of this pool.","The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.":"The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.","There is no liquidity data.":"There is no liquidity data.","This app uses the following third-party APIs:":"This app uses the following third-party APIs:","This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.":"This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.","This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.":"This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.","This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.":"This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.","This token is not supported in the Uniswap Labs app":"This token is not supported in the Uniswap Labs app","This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the":["This tool will safely migrate your ",["0"]," liquidity to V3. The process is completely trustless thanks to the"],"This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.":"This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.","This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.":"This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.","Tip: Custom tokens are stored locally in your browser":"Tip: Custom tokens are stored locally in your browser","To":"To","To (at least)":"To (at least)","Token not supported":"Token not supported","Tokens":"Tokens","Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.":"Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.","Top pools":"Top pools","Total deposited":"Total deposited","Total deposits":"Total deposits","Trade Route":"Trade Route","Trading":"Trading","Transaction Settings":"Transaction Settings","Transaction Submitted":"Transaction Submitted","Transaction completed in":"Transaction completed in","Transaction deadline":"Transaction deadline","Transaction pending":"Transaction pending","Transaction rejected.":"Transaction rejected.","Transaction submitted":"Transaction submitted","Transfer Token":"Transfer Token","Try Again":"Try Again","Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.":"Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.","Turn On Expert Mode":"Turn On Expert Mode","UNI has arrived":"UNI has arrived","UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.":"UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.","UNI {0}/{1} Burned":["UNI ",["0"],"/",["1"]," Burned"],"UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.":["UNI-V2 LP tokens are required. Once you've added liquidity to the ",["0"],"-",["1"]," pool you can stake your liquidity tokens on this page."],"UNI-V2 {0}-{1}":["UNI-V2 ",["0"],"-",["1"]],"Unclaimed UNI":"Unclaimed UNI","Unclaimed fees":"Unclaimed fees","Undetermined":"Undetermined","Unexpected error. Could not estimate gas for the swap.":"Unexpected error. Could not estimate gas for the swap.","Unexpected issue with estimating the gas. Please try again.":"Unexpected issue with estimating the gas. Please try again.","Uniswap Governance":"Uniswap Governance","Uniswap Labs' Terms of Service":"Uniswap Labs' Terms of Service","Uniswap available in: <0>{0}":["Uniswap available in: <0>",["0"],""],"Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.":"Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.","Uniswap liquidity mining":"Uniswap liquidity mining","Uniswap migration contract↗":"Uniswap migration contract↗","Unknown Source":"Unknown Source","Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.":["Unknown error",["0"],". Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3."],"Unlock Votes":"Unlock Votes","Unlock Voting":"Unlock Voting","Unlocking Votes":"Unlocking Votes","Unsupported Asset":"Unsupported Asset","Unsupported Assets":"Unsupported Assets","Unsupported network–switch to another to trade.":"Unsupported network–switch to another to trade.","Untitled":"Untitled","Unwrap":"Unwrap","Unwrap <0/> to {0}":["Unwrap <0/> to ",["0"]],"Update Delegation":"Update Delegation","Update list":"Update list","Use the Uniswap Labs API to get faster quotes.":"Use the Uniswap Labs API to get faster quotes.","User":"User","V2 is not available on Layer 2. Switch to Layer 1 Ethereum.":"V2 is not available on Layer 2. Switch to Layer 1 Ethereum.","V2 liquidity":"V2 liquidity","V3 {0} Price:":["V3 ",["0"]," Price:"],"View accrued fees and analytics<0>↗":"View accrued fees and analytics<0>↗","View list":"View list","View on Etherscan":"View on Etherscan","View on Explorer":"View on Explorer","View transaction on Explorer":"View transaction on Explorer","Vote":"Vote","Vote Against":"Vote Against","Vote For":"Vote For","Vote against proposal {proposalId}":["Vote against proposal ",["proposalId"]],"Vote against proposal {proposalKey}":["Vote against proposal ",["proposalKey"]],"Vote against proposal {proposalKey} with reason \"{0}\"":["Vote against proposal ",["proposalKey"]," with reason \"",["0"],"\""],"Vote for proposal {proposalId}":["Vote for proposal ",["proposalId"]],"Vote for proposal {proposalKey}":["Vote for proposal ",["proposalKey"]],"Vote for proposal {proposalKey} with reason \"{0}\"":["Vote for proposal ",["proposalKey"]," with reason \"",["0"],"\""],"Vote to abstain on proposal {proposalId}":["Vote to abstain on proposal ",["proposalId"]],"Vote to abstain on proposal {proposalKey}":["Vote to abstain on proposal ",["proposalKey"]],"Vote to abstain on proposal {proposalKey} with reason \"{0}\"":["Vote to abstain on proposal ",["proposalKey"]," with reason \"",["0"],"\""],"Voting ended {0}":["Voting ended ",["0"]],"Voting ends approximately {0}":["Voting ends approximately ",["0"]],"Voting starts approximately {0}":["Voting starts approximately ",["0"]],"Waiting For Confirmation":"Waiting For Confirmation","Wallet Address or ENS name":"Wallet Address or ENS name","Weekly Rewards":"Weekly Rewards","Welcome to team Unicorn :)":"Welcome to team Unicorn :)","When you claim without withdrawing your liquidity remains in the mining pool.":"When you claim without withdrawing your liquidity remains in the mining pool.","When you withdraw, the contract will automagically claim UNI on your behalf!":"When you withdraw, the contract will automagically claim UNI on your behalf!","When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.":"When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.","Withdraw":"Withdraw","Withdraw & Claim":"Withdraw & Claim","Withdraw deposited liquidity":"Withdraw deposited liquidity","Withdrawing {0} UNI-V2":["Withdrawing ",["0"]," UNI-V2"],"Withdrew UNI-V2!":"Withdrew UNI-V2!","Wrap":"Wrap","Wrap <0/> to {0}":["Wrap <0/> to ",["0"]],"Wrong Network":"Wrong Network","You already have an active or pending proposal":"You already have an active or pending proposal","You are creating a pool":"You are creating a pool","You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.":["You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current ",["0"]," price."],"You are the first liquidity provider.":"You are the first liquidity provider.","You can either vote on each proposal yourself or delegate your votes to a third party.":"You can either vote on each proposal yourself or delegate your votes to a third party.","You can now trade {0}":["You can now trade ",["0"]],"You don't have enough votes to submit a proposal":"You don't have enough votes to submit a proposal","You don’t have liquidity in this pool yet.":"You don’t have liquidity in this pool yet.","You may have lost your network connection, or {label} might be down right now.":["You may have lost your network connection, or ",["label"]," might be down right now."],"You may have lost your network connection.":"You may have lost your network connection.","You might consider waiting until the network fees go down to complete this transaction.":"You might consider waiting until the network fees go down to complete this transaction.","You must connect an account.":"You must connect an account.","You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.":["You must give the Uniswap smart contracts permission to use your ",["0"],". You only have to do this once per token."],"You must have {formattedProposalThreshold} votes to submit a proposal":["You must have ",["formattedProposalThreshold"]," votes to submit a proposal"],"You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.":"You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.","You will also collect fees earned from this position.":"You will also collect fees earned from this position.","You will receive":"You will receive","You will receive at least {0} {1} or the transaction will revert.":["You will receive at least ",["0"]," ",["1"]," or the transaction will revert."],"You will send at most {0} {1} or the transaction will revert.":["You will send at most ",["0"]," ",["1"]," or the transaction will revert."],"Your V2 liquidity":"Your V2 liquidity","Your active V3 liquidity positions will appear here.":"Your active V3 liquidity positions will appear here.","Your liquidity deposits":"Your liquidity deposits","Your pool share:":"Your pool share:","Your position":"Your position","Your position has 0 liquidity, and is not earning fees.":"Your position has 0 liquidity, and is not earning fees.","Your position will appear here.":"Your position will appear here.","Your position will be 100% composed of {0} at this price":["Your position will be 100% composed of ",["0"]," at this price"],"Your position will be 100% {0} at this price.":["Your position will be 100% ",["0"]," at this price."],"Your position will not earn fees or be used in trades until the market price moves into your range.":"Your position will not earn fees or be used in trades until the market price moves into your range.","Your positions":"Your positions","Your rate":"Your rate","Your total pool tokens:":"Your total pool tokens:","Your transaction cost will be much higher as it includes the gas to create the pool.":"Your transaction cost will be much higher as it includes the gas to create the pool.","Your transaction may be frontrun":"Your transaction may be frontrun","Your transaction may fail":"Your transaction may fail","Your transaction will revert if it has been pending for longer than this period of time.":"Your transaction will revert if it has been pending for longer than this period of time.","Your transaction will revert if it is pending for more than this period of time.":"Your transaction will revert if it is pending for more than this period of time.","Your transaction will revert if the price changes unfavorably by more than this percentage.":"Your transaction will revert if the price changes unfavorably by more than this percentage.","Your transactions will appear here...":"Your transactions will appear here...","Your unclaimed UNI":"Your unclaimed UNI","after slippage":"after slippage","confirm":"confirm","for {0}":["for ",["0"]],"gwei":"gwei","has socks emoji":"has socks emoji","here.":"here.","https:// or ipfs:// or ENS name":"https:// or ipfs:// or ENS name","minutes":"minutes","via {0}":["via ",["0"]],"via {0} token list":["via ",["0"]," token list"],"{0, plural, one {Import token} other {Import tokens}}":[["0","plural",{one:"Import token",other:"Import tokens"}]],"{0}":[["0"]],"{0} %":[["0"]," %"],"{0} <0/> per <1/>":[["0"]," <0/> per <1/>"],"{0} Custom Tokens":[["0"]," Custom Tokens"],"{0} Deposited":[["0"]," Deposited"],"{0} ETH":[["0"]," ETH"],"{0} Fees Earned:":[["0"]," Fees Earned:"],"{0} Pending":[["0"]," Pending"],"{0} UNI":[["0"]," UNI"],"{0} UNI / week":[["0"]," UNI / week"],"{0} UNI-V2":[["0"]," UNI-V2"],"{0} UNI-V2 LP tokens available":[["0"]," UNI-V2 LP tokens available"],"{0} Votes":[["0"]," Votes"],"{0} per {1}":[["0"]," per ",["1"]],"{0} tokens":[["0"]," tokens"],"{0} {1} Price:":[["0"]," ",["1"]," Price:"],"{0} {nativeCurrencySymbol}":[["0"]," ",["nativeCurrencySymbol"]],"{0} • Added by user":[["0"]," • Added by user"],"{0}%":[["0"],"%"],"{0}% fee tier":[["0"],"% fee tier"],"{0}% pool":[["0"],"% pool"],"{0}% select":[["0"],"% select"],"{0}-{1} Liquidity Mining":[["0"],"-",["1"]," Liquidity Mining"],"{0}/{1} LP NFT":[["0"],"/",["1"]," LP NFT"],"{0}/{1} LP Tokens":[["0"],"/",["1"]," LP Tokens"],"{SOCKS_AMOUNT} UNI":[["SOCKS_AMOUNT"]," UNI"],"{USER_AMOUNT} UNI":[["USER_AMOUNT"]," UNI"],"{activeTokensOnThisChain} tokens":[["activeTokensOnThisChain"]," tokens"],"{integrator} fee":[["integrator"]," fee"],"{label} token bridge":[["label"]," token bridge"],"{min}m {sec}s":[["min"],"m ",["sec"],"s"],"{percentForSlider}%":[["percentForSlider"],"%"],"{sec}s":[["sec"],"s"],"{tokenB} per {tokenA}":[["tokenB"]," per ",["tokenA"]],"← Back to Pools Overview":"← Back to Pools Overview"}}; - -var enUS$1 = /*#__PURE__*/Object.freeze(/*#__PURE__*/_mergeNamespaces({ - __proto__: null, - 'default': enUS -}, [enUS])); - -var SUPPORTED_LOCALES = [ - // order as they appear in the language dropdown - 'en-US', - 'af-ZA', - 'ar-SA', - 'ca-ES', - 'cs-CZ', - 'da-DK', - 'de-DE', - 'el-GR', - 'es-ES', - 'fi-FI', - 'fr-FR', - 'he-IL', - 'hu-HU', - 'id-ID', - 'it-IT', - 'ja-JP', - 'ko-KR', - 'nl-NL', - 'no-NO', - 'pl-PL', - 'pt-BR', - 'pt-PT', - 'ro-RO', - 'ru-RU', - 'sr-SP', - 'sv-SE', - 'sw-TZ', - 'tr-TR', - 'uk-UA', - 'vi-VN', - 'zh-CN', - 'zh-TW', -]; -var DEFAULT_LOCALE = 'en-US'; -var DEFAULT_CATALOG = enUS$1; -var LOCALE_LABEL = { - 'af-ZA': 'Afrikaans', - 'ar-SA': 'العربية', - 'ca-ES': 'Català', - 'cs-CZ': 'čeština', - 'da-DK': 'dansk', - 'de-DE': 'Deutsch', - 'el-GR': 'ελληνικά', - 'en-US': 'English', - 'es-ES': 'Español', - 'fi-FI': 'suomi', - 'fr-FR': 'français', - 'he-IL': 'עִברִית', - 'hu-HU': 'Magyar', - 'id-ID': 'bahasa Indonesia', - 'it-IT': 'Italiano', - 'ja-JP': '日本語', - 'ko-KR': '한국어', - 'nl-NL': 'Nederlands', - 'no-NO': 'norsk', - 'pl-PL': 'Polskie', - 'pt-BR': 'português', - 'pt-PT': 'português', - 'ro-RO': 'Română', - 'ru-RU': 'русский', - 'sr-SP': 'Српски', - 'sv-SE': 'svenska', - 'sw-TZ': 'Kiswahili', - 'tr-TR': 'Türkçe', - 'uk-UA': 'Український', - 'vi-VN': 'Tiếng Việt', - 'zh-CN': '简体中文', - 'zh-TW': '繁体中文', - pseudo: 'ƥƨèúδô', -}; - -var _a$4, _b$2, _c$2; -/** - * Given a locale string (e.g. from user agent), return the best match for corresponding SupportedLocale - * @param maybeSupportedLocale the fuzzy locale identifier - */ -function parseLocale(maybeSupportedLocale) { - if (typeof maybeSupportedLocale !== 'string') - return undefined; - var lowerMaybeSupportedLocale = maybeSupportedLocale.toLowerCase(); - return SUPPORTED_LOCALES.find(function (locale) { return locale.toLowerCase() === lowerMaybeSupportedLocale || locale.split('-')[0] === lowerMaybeSupportedLocale; }); -} -/** - * Returns the supported locale read from the user agent (navigator) - */ -function navigatorLocale() { - var _a; - if (!navigator.language) - return undefined; - var _b = __read(navigator.language.split('-'), 2), language = _b[0], region = _b[1]; - if (region) { - return (_a = parseLocale(language + "-" + region.toUpperCase())) !== null && _a !== void 0 ? _a : parseLocale(language); - } - return parseLocale(language); -} -function storeLocale() { - var _a; - return (_a = store.getState().user.userLocale) !== null && _a !== void 0 ? _a : undefined; -} -var initialLocale = (_c$2 = (_b$2 = (_a$4 = parseLocale(parsedQueryString().lng)) !== null && _a$4 !== void 0 ? _a$4 : storeLocale()) !== null && _b$2 !== void 0 ? _b$2 : navigatorLocale()) !== null && _c$2 !== void 0 ? _c$2 : DEFAULT_LOCALE; -function useUrlLocale() { - var parsed = useParsedQueryString(); - return parseLocale(parsed.lng); -} -/** - * Returns the currently active locale, from a combination of user agent, query string, and user settings stored in redux - * Stores the query string locale in redux (if set) to persist across sessions - */ -function useActiveLocale() { - var urlLocale = useUrlLocale(); - var userLocale = useUserLocale(); - return React.useMemo(function () { var _a, _b; return (_b = (_a = urlLocale !== null && urlLocale !== void 0 ? urlLocale : userLocale) !== null && _a !== void 0 ? _a : navigatorLocale()) !== null && _b !== void 0 ? _b : DEFAULT_LOCALE; }, [urlLocale, userLocale]); -} - -function useLocationLinkProps(locale) { - var location = reactRouterDom.useLocation(); - var qs$1 = useParsedQueryString(); - var activeLocale = useActiveLocale(); - return React.useMemo(function () { - return !locale - ? {} - : { - to: __assign(__assign({}, location), { search: qs.stringify(__assign(__assign({}, qs$1), { lng: locale })) }), - onClick: function () { - ReactGA__default["default"].event({ - category: 'Localization', - action: 'Switch Locale', - label: activeLocale + " -> " + locale, - }); - }, - }; - }, [location, qs$1, activeLocale, locale]); -} - -var _path$4, _path2$1, _path3; - -function _extends$6() { _extends$6 = 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$6.apply(this, arguments); } - -var SvgMenu = function SvgMenu(props) { - return /*#__PURE__*/React__namespace.createElement("svg", _extends$6({ - width: 24, - height: 24, - viewBox: "0 0 24 24", - fill: "none", - xmlns: "http://www.w3.org/2000/svg" - }, props), _path$4 || (_path$4 = /*#__PURE__*/React__namespace.createElement("path", { - d: "M12 13C12.5523 13 13 12.5523 13 12C13 11.4477 12.5523 11 12 11C11.4477 11 11 11.4477 11 12C11 12.5523 11.4477 13 12 13Z", - stroke: "black", - strokeWidth: 2, - strokeLinecap: "round", - strokeLinejoin: "round" - })), _path2$1 || (_path2$1 = /*#__PURE__*/React__namespace.createElement("path", { - d: "M19 13C19.5523 13 20 12.5523 20 12C20 11.4477 19.5523 11 19 11C18.4477 11 18 11.4477 18 12C18 12.5523 18.4477 13 19 13Z", - stroke: "black", - strokeWidth: 2, - strokeLinecap: "round", - strokeLinejoin: "round" - })), _path3 || (_path3 = /*#__PURE__*/React__namespace.createElement("path", { - d: "M5 13C5.55228 13 6 12.5523 6 12C6 11.4477 5.55228 11 5 11C4.44772 11 4 11.4477 4 12C4 12.5523 4.44772 13 5 13Z", - stroke: "black", - strokeWidth: 2, - strokeLinecap: "round", - strokeLinejoin: "round" - }))); -}; - -function useOnClickOutside(node, handler) { - var handlerRef = React.useRef(handler); - React.useEffect(function () { - handlerRef.current = handler; - }, [handler]); - React.useEffect(function () { - var handleClickOutside = function (e) { - var _a, _b; - if ((_b = (_a = node.current) === null || _a === void 0 ? void 0 : _a.contains(e.target)) !== null && _b !== void 0 ? _b : false) { - return; - } - if (handlerRef.current) - handlerRef.current(); - }; - document.addEventListener('mousedown', handleClickOutside); - return function () { - document.removeEventListener('mousedown', handleClickOutside); - }; - }, [node]); -} - -var FlyoutAlignment; -(function (FlyoutAlignment) { - FlyoutAlignment["LEFT"] = "LEFT"; - FlyoutAlignment["RIGHT"] = "RIGHT"; -})(FlyoutAlignment || (FlyoutAlignment = {})); -var StyledMenuIcon$1 = styled__default["default"](SvgMenu)(templateObject_1$15 || (templateObject_1$15 = __makeTemplateObject(["\n path {\n stroke: ", ";\n }\n"], ["\n path {\n stroke: ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.text1; -}); -var StyledMenuButton$1 = styled__default["default"].button(templateObject_2$N || (templateObject_2$N = __makeTemplateObject(["\n width: 100%;\n height: 100%;\n border: none;\n background-color: transparent;\n margin: 0;\n padding: 0;\n height: 40px;\n background-color: ", ";\n border: 1px solid ", ";\n padding: 0.15rem 0.5rem;\n border-radius: 16px;\n\n :hover,\n :focus {\n cursor: pointer;\n outline: none;\n border: 1px solid ", ";\n }\n\n svg {\n margin-top: 2px;\n }\n"], ["\n width: 100%;\n height: 100%;\n border: none;\n background-color: transparent;\n margin: 0;\n padding: 0;\n height: 40px;\n background-color: ", ";\n border: 1px solid ", ";\n padding: 0.15rem 0.5rem;\n border-radius: 16px;\n\n :hover,\n :focus {\n cursor: pointer;\n outline: none;\n border: 1px solid ", ";\n }\n\n svg {\n margin-top: 2px;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.bg0; -}, function (_a) { - var theme = _a.theme; - return theme.bg0; -}, function (_a) { - var theme = _a.theme; - return theme.bg3; -}); -var UNIbutton = styled__default["default"](ButtonPrimary)(templateObject_3$F || (templateObject_3$F = __makeTemplateObject(["\n background-color: ", ";\n background: radial-gradient(174.47% 188.91% at 1.84% 0%, #ff007a 0%, #2172e5 100%), #edeef2;\n border: none;\n"], ["\n background-color: ", ";\n background: radial-gradient(174.47% 188.91% at 1.84% 0%, #ff007a 0%, #2172e5 100%), #edeef2;\n border: none;\n"])), function (_a) { - var theme = _a.theme; - return theme.bg3; -}); -var StyledMenu$2 = styled__default["default"].div(templateObject_4$u || (templateObject_4$u = __makeTemplateObject(["\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n text-align: left;\n"], ["\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n text-align: left;\n"]))); -var MenuFlyout$1 = styled__default["default"].span(templateObject_8$e || (templateObject_8$e = __makeTemplateObject(["\n min-width: 196px;\n max-height: 350px;\n overflow: auto;\n background-color: ", ";\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 border: 1px solid ", ";\n border-radius: 12px;\n padding: 0.5rem;\n display: flex;\n flex-direction: column;\n font-size: 16px;\n position: absolute;\n top: 3rem;\n z-index: 100;\n\n ", ";\n ", ";\n"], ["\n min-width: 196px;\n max-height: 350px;\n overflow: auto;\n background-color: ", ";\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 border: 1px solid ", ";\n border-radius: 12px;\n padding: 0.5rem;\n display: flex;\n flex-direction: column;\n font-size: 16px;\n position: absolute;\n top: 3rem;\n z-index: 100;\n\n ", ";\n ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var theme = _a.theme; - return theme.bg0; -}, function (_a) { - var _b = _a.flyoutAlignment, flyoutAlignment = _b === void 0 ? FlyoutAlignment.RIGHT : _b; - return flyoutAlignment === FlyoutAlignment.RIGHT - ? styled.css(templateObject_5$o || (templateObject_5$o = __makeTemplateObject(["\n right: 0rem;\n "], ["\n right: 0rem;\n "]))) : styled.css(templateObject_6$j || (templateObject_6$j = __makeTemplateObject(["\n left: 0rem;\n "], ["\n left: 0rem;\n "]))); -}, function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToMedium(templateObject_7$g || (templateObject_7$g = __makeTemplateObject(["\n bottom: unset;\n right: 0;\n left: unset;\n "], ["\n bottom: unset;\n right: 0;\n left: unset;\n "]))); -}); -var MenuItem$1 = styled__default["default"](ExternalLink)(templateObject_9$d || (templateObject_9$d = __makeTemplateObject(["\n display: flex;\n flex: 1;\n flex-direction: row;\n align-items: center;\n padding: 0.5rem 0.5rem;\n justify-content: space-between;\n color: ", ";\n :hover {\n color: ", ";\n cursor: pointer;\n text-decoration: none;\n }\n"], ["\n display: flex;\n flex: 1;\n flex-direction: row;\n align-items: center;\n padding: 0.5rem 0.5rem;\n justify-content: space-between;\n color: ", ";\n :hover {\n color: ", ";\n cursor: pointer;\n text-decoration: none;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.text2; -}, function (_a) { - var theme = _a.theme; - return theme.text1; -}); -var InternalMenuItem = styled__default["default"](reactRouterDom.Link)(templateObject_10$a || (templateObject_10$a = __makeTemplateObject(["\n flex: 1;\n padding: 0.5rem 0.5rem;\n color: ", ";\n :hover {\n color: ", ";\n cursor: pointer;\n text-decoration: none;\n }\n > svg {\n margin-right: 8px;\n }\n"], ["\n flex: 1;\n padding: 0.5rem 0.5rem;\n color: ", ";\n :hover {\n color: ", ";\n cursor: pointer;\n text-decoration: none;\n }\n > svg {\n margin-right: 8px;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.text2; -}, function (_a) { - var theme = _a.theme; - return theme.text1; -}); -var InternalLinkMenuItem = styled__default["default"](InternalMenuItem)(templateObject_11$8 || (templateObject_11$8 = __makeTemplateObject(["\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: 0.5rem 0.5rem;\n justify-content: space-between;\n text-decoration: none;\n :hover {\n color: ", ";\n cursor: pointer;\n text-decoration: none;\n }\n"], ["\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: 0.5rem 0.5rem;\n justify-content: space-between;\n text-decoration: none;\n :hover {\n color: ", ";\n cursor: pointer;\n text-decoration: none;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.text1; -}); -var ToggleMenuItem = styled__default["default"].button(templateObject_12$8 || (templateObject_12$8 = __makeTemplateObject(["\n background-color: transparent;\n margin: 0;\n padding: 0;\n border: none;\n display: flex;\n flex: 1;\n flex-direction: row;\n align-items: center;\n padding: 0.5rem 0.5rem;\n justify-content: space-between;\n font-size: 1rem;\n font-weight: 500;\n color: ", ";\n :hover {\n color: ", ";\n cursor: pointer;\n text-decoration: none;\n }\n"], ["\n background-color: transparent;\n margin: 0;\n padding: 0;\n border: none;\n display: flex;\n flex: 1;\n flex-direction: row;\n align-items: center;\n padding: 0.5rem 0.5rem;\n justify-content: space-between;\n font-size: 1rem;\n font-weight: 500;\n color: ", ";\n :hover {\n color: ", ";\n cursor: pointer;\n text-decoration: none;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.text2; -}, function (_a) { - var theme = _a.theme; - return theme.text1; -}); -function LanguageMenuItem(_a) { - var locale = _a.locale, active = _a.active, key = _a.key; - var _b = useLocationLinkProps(locale), to = _b.to, onClick = _b.onClick; - if (!to) - return null; - return (jsxRuntime.jsxs(InternalLinkMenuItem, __assign({ onClick: onClick, to: to }, { children: [jsxRuntime.jsx("div", { children: LOCALE_LABEL[locale] }, void 0), active && jsxRuntime.jsx(reactFeather.Check, { opacity: 0.6, size: 16 }, void 0)] }), key)); -} -function LanguageMenu(_a) { - var close = _a.close; - var activeLocale = useActiveLocale(); - return (jsxRuntime.jsxs(MenuFlyout$1, { children: [jsxRuntime.jsx(ToggleMenuItem, __assign({ onClick: close }, { children: jsxRuntime.jsx(reactFeather.ChevronLeft, { size: 16 }, void 0) }), void 0), SUPPORTED_LOCALES.map(function (locale) { return (jsxRuntime.jsx(LanguageMenuItem, { locale: locale, active: activeLocale === locale }, locale)); })] }, void 0)); -} -function Menu() { - var _a = useActiveWeb3React(), account = _a.account, chainId = _a.chainId; - var node = React.useRef(); - var open = useModalOpen(ApplicationModal.MENU); - var toggleMenu = useToggleModal(ApplicationModal.MENU); - useOnClickOutside(node, open ? toggleMenu : undefined); - var togglePrivacyPolicy = useToggleModal(ApplicationModal.PRIVACY_POLICY); - var openClaimModal = useToggleModal(ApplicationModal.ADDRESS_CLAIM); - var showUNIClaimOption = Boolean(!!account && !!chainId && !L2_CHAIN_IDS.includes(chainId)); - var _b = __read(useDarkModeManager(), 2), darkMode = _b[0], toggleDarkMode = _b[1]; - var _c = __read(React.useState('main'), 2), menu = _c[0], setMenu = _c[1]; - React.useEffect(function () { - setMenu('main'); - }, [open]); - return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs(StyledMenu$2, __assign({ ref: node }, { children: [jsxRuntime.jsx(StyledMenuButton$1, __assign({ onClick: toggleMenu, "aria-label": macro.t(templateObject_13$4 || (templateObject_13$4 = __makeTemplateObject(["Menu"], ["Menu"]))) }, { children: jsxRuntime.jsx(StyledMenuIcon$1, {}, void 0) }), void 0), open && - (function () { - switch (menu) { - case 'lang': - return jsxRuntime.jsx(LanguageMenu, { close: function () { return setMenu('main'); } }, void 0); - case 'main': - default: - return (jsxRuntime.jsxs(MenuFlyout$1, { children: [jsxRuntime.jsxs(MenuItem$1, __assign({ href: "https://uniswap.org/" }, { children: [jsxRuntime.jsx("div", { children: jsxRuntime.jsx(macro.Trans, { children: "About" }, void 0) }, void 0), jsxRuntime.jsx(reactFeather.Info, { opacity: 0.6, size: 16 }, void 0)] }), void 0), jsxRuntime.jsxs(MenuItem$1, __assign({ href: "https://help.uniswap.org/" }, { children: [jsxRuntime.jsx("div", { children: jsxRuntime.jsx(macro.Trans, { children: "Help Center" }, void 0) }, void 0), jsxRuntime.jsx(reactFeather.HelpCircle, { opacity: 0.6, size: 16 }, void 0)] }), void 0), jsxRuntime.jsxs(MenuItem$1, __assign({ href: "https://uniswap.canny.io/feature-requests" }, { children: [jsxRuntime.jsx("div", { children: jsxRuntime.jsx(macro.Trans, { children: "Request Features" }, void 0) }, void 0), jsxRuntime.jsx(reactFeather.Coffee, { opacity: 0.6, size: 16 }, void 0)] }), void 0), jsxRuntime.jsxs(MenuItem$1, __assign({ href: "https://discord.gg/FCfyBSbCU5" }, { children: [jsxRuntime.jsx("div", { children: jsxRuntime.jsx(macro.Trans, { children: "Discord" }, void 0) }, void 0), jsxRuntime.jsx(reactFeather.MessageCircle, { opacity: 0.6, size: 16 }, void 0)] }), void 0), jsxRuntime.jsxs(ToggleMenuItem, __assign({ onClick: function () { return setMenu('lang'); } }, { children: [jsxRuntime.jsx("div", { children: jsxRuntime.jsx(macro.Trans, { children: "Language" }, void 0) }, void 0), jsxRuntime.jsx(reactFeather.Globe, { opacity: 0.6, size: 16 }, void 0)] }), void 0), jsxRuntime.jsxs(ToggleMenuItem, __assign({ onClick: function () { return toggleDarkMode(); } }, { children: [jsxRuntime.jsx("div", { children: darkMode ? jsxRuntime.jsx(macro.Trans, { children: "Light Theme" }, void 0) : jsxRuntime.jsx(macro.Trans, { children: "Dark Theme" }, void 0) }, void 0), darkMode ? jsxRuntime.jsx(reactFeather.Moon, { opacity: 0.6, size: 16 }, void 0) : jsxRuntime.jsx(reactFeather.Sun, { opacity: 0.6, size: 16 }, void 0)] }), void 0), jsxRuntime.jsxs(MenuItem$1, __assign({ href: "https://docs.uniswap.org/" }, { children: [jsxRuntime.jsx("div", { children: jsxRuntime.jsx(macro.Trans, { children: "Docs" }, void 0) }, void 0), jsxRuntime.jsx(reactFeather.BookOpen, { opacity: 0.6, size: 16 }, void 0)] }), void 0), jsxRuntime.jsxs(ToggleMenuItem, __assign({ onClick: function () { return togglePrivacyPolicy(); } }, { children: [jsxRuntime.jsx("div", { children: jsxRuntime.jsx(macro.Trans, { children: "Legal & Privacy" }, void 0) }, void 0), jsxRuntime.jsx(reactFeather.FileText, { opacity: 0.6, size: 16 }, void 0)] }), void 0), showUNIClaimOption && (jsxRuntime.jsx(UNIbutton, __assign({ onClick: openClaimModal, padding: "8px 16px", width: "100%", "$borderRadius": "12px", mt: "0.5rem" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Claim UNI" }, void 0) }), void 0))] }, void 0)); - } - })()] }), void 0), jsxRuntime.jsx(PrivacyPolicyModal, {}, void 0)] }, void 0)); -} -styled__default["default"](MenuFlyout$1)(templateObject_14$4 || (templateObject_14$4 = __makeTemplateObject(["\n top: 3rem !important;\n"], ["\n top: 3rem !important;\n"]))); -styled__default["default"](InternalMenuItem)(templateObject_15$2 || (templateObject_15$2 = __makeTemplateObject(["\n width: max-content;\n text-decoration: none;\n"], ["\n width: max-content;\n text-decoration: none;\n"]))); -styled__default["default"](MenuItem$1)(templateObject_16$2 || (templateObject_16$2 = __makeTemplateObject(["\n width: max-content;\n text-decoration: none;\n"], ["\n width: max-content;\n text-decoration: none;\n"]))); -var templateObject_1$15, templateObject_2$N, templateObject_3$F, templateObject_4$u, templateObject_5$o, templateObject_6$j, templateObject_7$g, templateObject_8$e, templateObject_9$d, templateObject_10$a, templateObject_11$8, templateObject_12$8, templateObject_13$4, templateObject_14$4, templateObject_15$2, templateObject_16$2; - -var loadingAnimation = styled.keyframes(templateObject_1$14 || (templateObject_1$14 = __makeTemplateObject(["\n 0% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0% 50%;\n }\n"], ["\n 0% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0% 50%;\n }\n"]))); -var LoadingRows = styled__default["default"].div(templateObject_2$M || (templateObject_2$M = __makeTemplateObject(["\n display: grid;\n\n & > div {\n animation: ", " 1.5s infinite;\n animation-fill-mode: both;\n background: linear-gradient(\n to left,\n ", " 25%,\n ", " 50%,\n ", " 75%\n );\n background-size: 400%;\n border-radius: 12px;\n height: 2.4em;\n will-change: background-position;\n }\n"], ["\n display: grid;\n\n & > div {\n animation: ", " 1.5s infinite;\n animation-fill-mode: both;\n background: linear-gradient(\n to left,\n ", " 25%,\n ", " 50%,\n ", " 75%\n );\n background-size: 400%;\n border-radius: 12px;\n height: 2.4em;\n will-change: background-position;\n }\n"])), loadingAnimation, function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var theme = _a.theme; - return theme.bg2; -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}); -var loadingOpacityMixin = styled.css(templateObject_3$E || (templateObject_3$E = __makeTemplateObject(["\n filter: ", ";\n opacity: ", ";\n transition: opacity 0.2s ease-in-out;\n"], ["\n filter: ", ";\n opacity: ", ";\n transition: opacity 0.2s ease-in-out;\n"])), function (_a) { - var $loading = _a.$loading; - return ($loading ? 'grayscale(1)' : 'none'); -}, function (_a) { - var $loading = _a.$loading; - return ($loading ? '0.4' : '1'); -}); -var LoadingOpacityContainer = styled__default["default"].div(templateObject_4$t || (templateObject_4$t = __makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), loadingOpacityMixin); -var templateObject_1$14, templateObject_2$M, templateObject_3$E, templateObject_4$t; - -/** - * Invokes callback repeatedly over an interval defined by the delay - * @param callback - * @param delay if null, the callback will not be invoked - * @param leading if true, the callback will be invoked immediately (on the leading edge); otherwise, it will be invoked after delay - */ -function useInterval(callback, delay, leading) { - if (leading === void 0) { leading = true; } - var savedCallback = React.useRef(); - // Remember the latest callback. - React.useEffect(function () { - savedCallback.current = callback; - }, [callback]); - // Set up the interval. - React.useEffect(function () { - function tick() { - var current = savedCallback.current; - current && current(); - } - if (delay !== null) { - if (leading) - tick(); - var id_1 = setInterval(tick, delay); - return function () { return clearInterval(id_1); }; - } - return; - }, [delay, leading]); -} - -var PopoverContainer$1 = styled__default["default"].div(templateObject_1$13 || (templateObject_1$13 = __makeTemplateObject(["\n z-index: 9999;\n visibility: ", ";\n opacity: ", ";\n transition: visibility 150ms linear, opacity 150ms linear;\n color: ", ";\n"], ["\n z-index: 9999;\n visibility: ", ";\n opacity: ", ";\n transition: visibility 150ms linear, opacity 150ms linear;\n color: ", ";\n"])), function (props) { return (props.show ? 'visible' : 'hidden'); }, function (props) { return (props.show ? 1 : 0); }, function (_a) { - var theme = _a.theme; - return theme.text2; -}); -var ReferenceElement = styled__default["default"].div(templateObject_2$L || (templateObject_2$L = __makeTemplateObject(["\n display: inline-block;\n"], ["\n display: inline-block;\n"]))); -var Arrow = styled__default["default"].div(templateObject_3$D || (templateObject_3$D = __makeTemplateObject(["\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 ", ";\n transform: rotate(45deg);\n background: ", ";\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 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 ", ";\n transform: rotate(45deg);\n background: ", ";\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"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}, function (_a) { - var theme = _a.theme; - return theme.bg0; -}); -function Popover(_a) { - var _b, _c; - var content = _a.content, show = _a.show, children = _a.children, _d = _a.placement, placement = _d === void 0 ? 'auto' : _d; - var _e = __read(React.useState(null), 2), referenceElement = _e[0], setReferenceElement = _e[1]; - var _f = __read(React.useState(null), 2), popperElement = _f[0], setPopperElement = _f[1]; - var _g = __read(React.useState(null), 2), arrowElement = _g[0], setArrowElement = _g[1]; - var options = React.useMemo(function () { return ({ - placement: placement, - strategy: 'fixed', - modifiers: [ - { name: 'offset', options: { offset: [8, 8] } }, - { name: 'arrow', options: { element: arrowElement } }, - { name: 'preventOverflow', options: { padding: 8 } }, - ], - }); }, [arrowElement, placement]); - var _h = reactPopper.usePopper(referenceElement, popperElement, options), styles = _h.styles, update = _h.update, attributes = _h.attributes; - var updateCallback = React.useCallback(function () { - update && update(); - }, [update]); - useInterval(updateCallback, show ? 100 : null); - return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(ReferenceElement, __assign({ ref: setReferenceElement }, { children: children }), void 0), jsxRuntime.jsx(Portal__default["default"], { children: jsxRuntime.jsxs(PopoverContainer$1, __assign({ show: show, ref: setPopperElement, style: styles.popper }, attributes.popper, { children: [content, jsxRuntime.jsx(Arrow, __assign({ className: "arrow-" + ((_c = (_b = attributes.popper) === null || _b === void 0 ? void 0 : _b['data-popper-placement']) !== null && _c !== void 0 ? _c : ''), ref: setArrowElement, style: styles.arrow }, attributes.arrow), void 0)] }), void 0) }, void 0)] }, void 0)); -} -var templateObject_1$13, templateObject_2$L, templateObject_3$D; - -var TooltipContainer = styled__default["default"].div(templateObject_1$12 || (templateObject_1$12 = __makeTemplateObject(["\n max-width: 256px;\n padding: 0.6rem 1rem;\n font-weight: 400;\n word-break: break-word;\n\n background: ", ";\n border-radius: 12px;\n border: 1px solid ", ";\n box-shadow: 0 4px 8px 0 ", ";\n"], ["\n max-width: 256px;\n padding: 0.6rem 1rem;\n font-weight: 400;\n word-break: break-word;\n\n background: ", ";\n border-radius: 12px;\n border: 1px solid ", ";\n box-shadow: 0 4px 8px 0 ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg0; -}, function (_a) { - var theme = _a.theme; - return theme.bg2; -}, function (_a) { - var theme = _a.theme; - return polished.transparentize(0.9, theme.shadow1); -}); -function Tooltip(_a) { - var text = _a.text, rest = __rest(_a, ["text"]); - return jsxRuntime.jsx(Popover, __assign({ content: jsxRuntime.jsx(TooltipContainer, { children: text }, void 0) }, rest), void 0); -} -function TooltipContent(_a) { - var content = _a.content, _b = _a.wrap, wrap = _b === void 0 ? false : _b, rest = __rest(_a, ["content", "wrap"]); - return jsxRuntime.jsx(Popover, __assign({ content: wrap ? jsxRuntime.jsx(TooltipContainer, { children: content }, void 0) : content }, rest), void 0); -} -function MouseoverTooltip(_a) { - var children = _a.children, rest = __rest(_a, ["children"]); - var _b = __read(React.useState(false), 2), show = _b[0], setShow = _b[1]; - var open = React.useCallback(function () { return setShow(true); }, [setShow]); - var close = React.useCallback(function () { return setShow(false); }, [setShow]); - return (jsxRuntime.jsx(Tooltip, __assign({}, rest, { show: show }, { children: jsxRuntime.jsx("div", __assign({ onMouseEnter: open, onMouseLeave: close }, { children: children }), void 0) }), void 0)); -} -function MouseoverTooltipContent(_a) { - var content = _a.content, children = _a.children, _b = _a.onOpen, openCallback = _b === void 0 ? undefined : _b, disableHover = _a.disableHover, rest = __rest(_a, ["content", "children", "onOpen", "disableHover"]); - var _c = __read(React.useState(false), 2), show = _c[0], setShow = _c[1]; - var open = React.useCallback(function () { - setShow(true); - openCallback === null || openCallback === void 0 ? void 0 : openCallback(); - }, [openCallback]); - var close = React.useCallback(function () { return setShow(false); }, [setShow]); - return (jsxRuntime.jsx(TooltipContent, __assign({}, rest, { show: show, content: disableHover ? null : content }, { children: jsxRuntime.jsx("div", __assign({ style: { display: 'inline-block', lineHeight: 0, padding: '0.25rem' }, onMouseEnter: open, onMouseLeave: close }, { children: children }), void 0) }), void 0)); -} -var templateObject_1$12; - -var StyledPriceContainer = styled__default["default"].button(templateObject_1$11 || (templateObject_1$11 = __makeTemplateObject(["\n background-color: transparent;\n border: none;\n cursor: pointer;\n align-items: center;\n justify-content: flex-start;\n padding: 0;\n grid-template-columns: 1fr auto;\n grid-gap: 0.25rem;\n display: flex;\n flex-direction: row;\n text-align: left;\n flex-wrap: wrap;\n padding: 8px 0;\n user-select: text;\n"], ["\n background-color: transparent;\n border: none;\n cursor: pointer;\n align-items: center;\n justify-content: flex-start;\n padding: 0;\n grid-template-columns: 1fr auto;\n grid-gap: 0.25rem;\n display: flex;\n flex-direction: row;\n text-align: left;\n flex-wrap: wrap;\n padding: 8px 0;\n user-select: text;\n"]))); -function TradePrice(_a) { - var _b, _c, _d, _e, _f, _g; - var price = _a.price, showInverted = _a.showInverted, setShowInverted = _a.setShowInverted; - var theme = React.useContext(styled.ThemeContext); - var usdcPrice = useUSDCPrice(showInverted ? price.baseCurrency : price.quoteCurrency); - var formattedPrice; - try { - formattedPrice = showInverted ? price.toSignificant(4) : (_b = price.invert()) === null || _b === void 0 ? void 0 : _b.toSignificant(4); - } - catch (error) { - formattedPrice = '0'; - } - var label = showInverted ? "" + ((_c = price.quoteCurrency) === null || _c === void 0 ? void 0 : _c.symbol) : ((_d = price.baseCurrency) === null || _d === void 0 ? void 0 : _d.symbol) + " "; - var labelInverted = showInverted ? ((_e = price.baseCurrency) === null || _e === void 0 ? void 0 : _e.symbol) + " " : "" + ((_f = price.quoteCurrency) === null || _f === void 0 ? void 0 : _f.symbol); - var flipPrice = React.useCallback(function () { return setShowInverted(!showInverted); }, [setShowInverted, showInverted]); - var text = ((_g = '1 ' + labelInverted + ' = ' + formattedPrice) !== null && _g !== void 0 ? _g : '-') + " " + label; - return (jsxRuntime.jsxs(StyledPriceContainer, __assign({ onClick: function (e) { - e.stopPropagation(); // dont want this click to affect dropdowns / hovers - flipPrice(); - }, title: text }, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, color: theme.text1 }, { children: text }), void 0), ' ', usdcPrice && (jsxRuntime.jsx(ThemedText.DarkGray, { children: jsxRuntime.jsxs(macro.Trans, { children: ["($", usdcPrice.toSignificant(6, { groupSeparator: ',' }), ")"] }, void 0) }, void 0))] }), void 0)); -} -var templateObject_1$11; - -var Wrapper$g = styled__default["default"].div(templateObject_1$10 || (templateObject_1$10 = __makeTemplateObject(["\n position: relative;\n padding: 8px;\n"], ["\n position: relative;\n padding: 8px;\n"]))); -var ArrowWrapper$1 = styled__default["default"].div(templateObject_3$C || (templateObject_3$C = __makeTemplateObject(["\n padding: 4px;\n border-radius: 12px;\n height: 32px;\n width: 32px;\n position: relative;\n margin-top: -14px;\n margin-bottom: -14px;\n left: calc(50% - 16px);\n /* transform: rotate(90deg); */\n background-color: ", ";\n border: 4px solid ", ";\n z-index: 2;\n ", "\n"], ["\n padding: 4px;\n border-radius: 12px;\n height: 32px;\n width: 32px;\n position: relative;\n margin-top: -14px;\n margin-bottom: -14px;\n left: calc(50% - 16px);\n /* transform: rotate(90deg); */\n background-color: ", ";\n border: 4px solid ", ";\n z-index: 2;\n ", "\n"])), function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var theme = _a.theme; - return theme.bg0; -}, function (_a) { - var clickable = _a.clickable; - return clickable - ? styled.css(templateObject_2$K || (templateObject_2$K = __makeTemplateObject(["\n :hover {\n cursor: pointer;\n opacity: 0.8;\n }\n "], ["\n :hover {\n cursor: pointer;\n opacity: 0.8;\n }\n "]))) : null; -}); -var SectionBreak = styled__default["default"].div(templateObject_4$s || (templateObject_4$s = __makeTemplateObject(["\n height: 1px;\n width: 100%;\n background-color: ", ";\n"], ["\n height: 1px;\n width: 100%;\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg3; -}); -var ErrorText = styled__default["default"](rebass.Text)(templateObject_5$n || (templateObject_5$n = __makeTemplateObject(["\n color: ", ";\n"], ["\n color: ", ";\n"])), function (_a) { - var theme = _a.theme, severity = _a.severity; - return severity === 3 || severity === 4 - ? theme.red1 - : severity === 2 - ? theme.yellow2 - : severity === 1 - ? theme.text1 - : theme.text2; -}); -var TruncatedText = styled__default["default"](rebass.Text)(templateObject_6$i || (templateObject_6$i = __makeTemplateObject(["\n text-overflow: ellipsis;\n max-width: 220px;\n overflow: hidden;\n text-align: right;\n"], ["\n text-overflow: ellipsis;\n max-width: 220px;\n overflow: hidden;\n text-align: right;\n" - // styles -]))); -// styles -var Dots = styled__default["default"].span(templateObject_7$f || (templateObject_7$f = __makeTemplateObject(["\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 &::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"]))); -var SwapCallbackErrorInner = styled__default["default"].div(templateObject_8$d || (templateObject_8$d = __makeTemplateObject(["\n background-color: ", ";\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: ", ";\n z-index: -1;\n p {\n padding: 0;\n margin: 0;\n font-weight: 500;\n }\n"], ["\n background-color: ", ";\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: ", ";\n z-index: -1;\n p {\n padding: 0;\n margin: 0;\n font-weight: 500;\n }\n"])), function (_a) { - var theme = _a.theme; - return polished.transparentize(0.9, theme.red1); -}, function (_a) { - var theme = _a.theme; - return theme.red1; -}); -var SwapCallbackErrorInnerAlertTriangle = styled__default["default"].div(templateObject_9$c || (templateObject_9$c = __makeTemplateObject(["\n background-color: ", ";\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 background-color: ", ";\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"])), function (_a) { - var theme = _a.theme; - return polished.transparentize(0.9, theme.red1); -}); -function SwapCallbackError(_a) { - var error = _a.error; - return (jsxRuntime.jsxs(SwapCallbackErrorInner, { children: [jsxRuntime.jsx(SwapCallbackErrorInnerAlertTriangle, { children: jsxRuntime.jsx(reactFeather.AlertTriangle, { size: 24 }, void 0) }, void 0), jsxRuntime.jsx("p", __assign({ style: { wordBreak: 'break-word' } }, { children: error }), void 0)] }, void 0)); -} -var SwapShowAcceptChanges = styled__default["default"](AutoColumn)(templateObject_10$9 || (templateObject_10$9 = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n padding: 0.5rem;\n border-radius: 12px;\n margin-top: 8px;\n"], ["\n background-color: ", ";\n color: ", ";\n padding: 0.5rem;\n border-radius: 12px;\n margin-top: 8px;\n"])), function (_a) { - var theme = _a.theme; - return polished.transparentize(0.95, theme.primary3); -}, function (_a) { - var theme = _a.theme; - return theme.primaryText1; -}); -styled__default["default"](ThemedText.Black)(templateObject_11$7 || (templateObject_11$7 = __makeTemplateObject(["\n border-bottom: 1px solid ", ";\n padding-bottom: 0.5rem;\n"], ["\n border-bottom: 1px solid ", ";\n padding-bottom: 0.5rem;\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}); -var ResponsiveTooltipContainer = styled__default["default"](TooltipContainer)(templateObject_13$3 || (templateObject_13$3 = __makeTemplateObject(["\n background-color: ", ";\n border: 1px solid ", ";\n padding: 1rem;\n width: ", ";\n\n ", "\n"], ["\n background-color: ", ";\n border: 1px solid ", ";\n padding: 1rem;\n width: ", ";\n\n ", "\n"])), function (_a) { - var theme = _a.theme; - return theme.bg0; -}, function (_a) { - var theme = _a.theme; - return theme.bg2; -}, function (_a) { - var width = _a.width; - return width !== null && width !== void 0 ? width : 'auto'; -}, function (_a) { - var theme = _a.theme, origin = _a.origin; - return theme.mediaWidth.upToExtraSmall(templateObject_12$7 || (templateObject_12$7 = __makeTemplateObject(["\n transform: scale(0.8);\n transform-origin: ", ";\n "], ["\n transform: scale(0.8);\n transform-origin: ", ";\n "])), origin !== null && origin !== void 0 ? origin : 'top left'); -}); -styled__default["default"](TradePrice)(templateObject_14$3 || (templateObject_14$3 = __makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), loadingOpacityMixin); -var templateObject_1$10, templateObject_2$K, templateObject_3$C, templateObject_4$s, templateObject_5$n, templateObject_6$i, templateObject_7$f, templateObject_8$d, templateObject_9$c, templateObject_10$9, templateObject_11$7, templateObject_12$7, templateObject_13$3, templateObject_14$3; - -// technically a 721, not an ERC20, but suffices for our purposes -var SOCKS = new sdkCore.Token(SupportedChainId.MAINNET, SOCKS_CONTROLLER_ADDRESSES[SupportedChainId.MAINNET], 0); -function useHasSocks() { - var _a = useActiveWeb3React(), account = _a.account, chainId = _a.chainId; - var balance = useTokenBalance(account !== null && account !== void 0 ? account : undefined, chainId === SupportedChainId.MAINNET ? SOCKS : undefined); - return React.useMemo(function () { return Boolean(balance === null || balance === void 0 ? void 0 : balance.greaterThan(0)); }, [balance]); -} - -var COINBASE_ICON_URL = "d13f13f5694ec91f.svg"; - -var FORTMATIC_ICON_URL = "data:image/png;base64,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"; - -var PORTIS_ICON_URL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfQAAAH0CAYAAADL1t+KAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gMdDiIcy6bS3gAAIABJREFUeNrt3XucXHV9//HPmetesjuz991c9pKQiwmXREBCSEmwYiHeYotVW9uEQqlCKKtEEc2vbmvR+it9dBXEVlADVdRWDRBEfqJABCTcIYAJ2UCyySbZzd5mdmbnei6/P5JNc9nZ7OzO5Vxez8ejj0cNuex+Znbe8/3O+5yvCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARXXjQ7vXf+JrD25mEoC9uRgBYF/tW/YGDUXp1GKJq65o/04rEwEIdAAWpHq0DhEJGGKUuzRPJxMBCHQAFnP9L3cvFTFuOv4LhnzkgxvuXs1kAAIdgJV+uHXltBW5LrKZyQAEOgCLuPGh3etFZNU4/6llzYa7O5gQQKADMLmxItxEv4WCHECgAzA51ZPuFJHABL8lQEEOINABmNiGrV2rRZR1Z/yNFOQAAh2AqU165U1BDiDQAZjQDQ93tYvIeVn8EQpyAIEOwEzat+wNKoZMJZwpyAEEOgCzmEQRLhMKcgCBDsAMJl2Ey4SCHECgAzCFaa+wdZHNa9t/EGSUAIEOoAimUITLpCWlqu1MFCDQARTYNIpwmXyFghxAoAMosGkU4TK/IKiezUwWINABFMi0i3CZrbpywz1rmTBAoAMojLxdaqaI0UlBDiDQAeRZDotwmVCQAwh0APmUhyJcJhTkAAIdQL7kowiX8cWBghxAoAPIvTwW4TKhIAcQ6ADyoOD3XKcgBxDoAHKoAEW4TCjIAQQ6gFxo37KztUBFuEwoyAEEOoDp0ryeghXhMr5QUJADCHQAU7dha9dqw5CPmOBLoSAHEOgApsE0K2MKcgCBDmBqq/MOEWkx0ZdEQQ4g0AFko33LzlYRMWN4UpADCHQAk2WGIlzGFw0KcgCBDuDMTFSEy2TVmhu/u55HCiDQAUzM/CtgQ6EgBxDoACZYnXeIuYpwmQRSqtbBIwYQ6ABOYeIiXKZl+k1rrv/uUh45gEAHcAIzF+Eyv4IonTxyAIEO4BgLFOEyoSAHEOgATrDZsl85BTmAQAdgqSJcJhTkAAIdcDbrFeEyLtMpyAEEOuBclizCZXw1oSAHEOiAA1m4CJcJBTmAQAecpX3L3qBYuQiXCQU5gEAHnET1qO1i7SJcJhTkAAIdcMrqfGeriHzFvt8hBTmAQAccsTp3wPGjFOQAAh2wsw1b96wVkVUO+FYpyAEEOmBPR4twhnNWrhTkAAIdsCMbF+EyoSAHEOiA3Vbndi/CZVymU5ADCHTATqtzBxThMr/KbOYZABDogOU5qAiXgXLeB264u51nAkCgA5bluCJcBoYiHRTkAAIdsCwHFuEyCSRVlWvTAQIdsOLq3KlFuPEpIus+uOHu1UwCINABi63OHVyEy0Dn4weAQAeshCJcxnU6BTmAQAesgSLcxCjIAQQ6YAkU4c6IghxAoANmX51ThJsMCnIAgQ6YfHVOEW6yKMgBBDpgSjc+tHu9UITLZp1OQQ4g0AFzad+yN2goCivOLFGQAwh0wFRUj9YhIgEmkTUKcgCBDpjD9b/cvVTEuIlJTA0FOYBAB8zxQ6Sz1T5dFOQAAh0oKopwOVunU5ADCHSgOCjC5RYFOYBAB4qCIlzOBVKaupkxAAQ6UDAU4fK1TJePUJADCHSgcD84FOHyRhdhlQ4Q6ED+UYTLu5Y1G+7uYAwAgQ7kDUW4wo36ivbvtDIGgEAH8oIiXMEEXJqHN04AgQ7kHkW4AqMgBxDoQF5+WCjCFRwFOYBAB3KKIlzRUJADCHQgNyjCFf8hoCAHEOjAtFGEKzoKcgCBDkzPhq1dqynCmQAFOYBAB6aJlaFJUJADCHRgSm54uKtdRM5jEqZBQQ4g0IHstG/ZG1QMITxM+NBQkAMIdGDSVE+6UyjCmREFOYBABybnaBFOWcckTIqCHECgA5PECtDkKMgBBDowIYpwlkFBDiDQgfFRhLOcr1CQAwh04DQU4Sz4AqZ6NjMFgEAHjqMIZ1mrrtxwz1rGABDowBiKcBaliNG5tv0HQSYBAh1wOIpwlteSUtV2xgACHXAwinC2QUEOBDojgJNRhLPRixkFORDogDNRhLMdCnIg0AGHoghnMxTkQKADDkMRzrYoyIFAB5yifcvOVopwtkZBDgQ64ASa10MRzu4vbBTkQKAD9rZha9dqw5CPMAnboyAHAh2wOVZuDkFBDgQ6YN/VeYeItDAJx6AgBwIdsJv2LTtbRYQXd+ehIAcCHbATinAOfpGjIAcCHbAHinCOR0EOBDpgE6zQHE4RYzMFORDogLVX5x1CEQ4igZSqdTAGEOiABVGEw8mMm9Zc/92lzAEEOmAxFOFw+iuewoE8INABK6EIhwxWrbnxu+sZAwh0wDo2MwKMy1C4gxwIdMAiq/MOoQiHzCjIgUAHzI4iHCa5TKcgBwIdMDOKcJj8qx8FORDogClRhEOWKMiBQAfMpn3L3qBQhEO2KMiBQAfMRfWo7UIRDtmjIAcCHTDP6nxnq4h8hUlgist0CnIg0AFzrM45HhPTfSWkIAcCHSiqDVv3rBWRVUwC00RBDgQ6UCxHi3AGKyvkBgU5EOhAcVCEQ45RkAOBDhR+dU4RDnlZplOQA4EOFHZ1ThEOeXtV5LkFAh0oBIpwyC/lvA/ccDfnAYBAB/KJIhwKwVCkg4IcCHQgjyjCoUACSVXljSMIdCA/q3OKcCgcRWTdBzfcvZpJgEAHcr46pwiHwtL5eAcEOpBbFOFQpHU6BTkQ6ECuUIRDMVGQA4EO5AhFOBQZBTkQ6MD0V+cU4VB8FORAoAPTXp1ThIM5UJADgQ5M0Y0P7V4vFOFgnnU6BTkQ6EC22rfsDRqKwooIpkJBDgQ6kCXVo3WISIBJwGQoyIFABybr+l/uXipi3MQkYEYU5ECgA5N9UupstcPcKMiBQAfOgCIcLLJOpyAHAh3IhCIcrISCHAh0IAOKcLCYQEpTNzMGEOjACSjCwZrLdPkIBTkQ6MCJT0SKcLAoXYRVOgh0QIQiHCyvZc2GuzsYAwh0OBpFONjlqXxF+3daGQMIdDgWRTjYRMCleXhjCgIdzkQRDrZCQQ4EOhz75KMIB5uhIAcCHY5DEQ42RUEOBDqcgyIc7P4UpyAHAh2OQBEONkdBDgQ67G/D1q7VFOFgexTkQKDDAVi5wBEoyIFAh23d8HBXu4icxyTgEBTkQKDDftq37A0qhvDiBsc99SnIgUCHraiedKdQhIPzUJADgQ77OFqEU9YxCTgSBTkQ6LARVihwNApyINBheRThABGhIAcCHVZGEQ44yVcoyIFAhyVRhANOecFVPZuZAgh0WApFOGBcq67ccM9axgACHVZCEQ4YhyJG59r2HwSZBAh0mB5FOGBCLSlVbWcMINBhahThgEmhIAcCHeZGEc6cDDXJEMz24ktBDgQ6zIoinAnfYIX69Z4nHpVDu5/XdE0NMxFToSCHnFIYAXIY6K8Kn52bQmzfLqO/6x0ldPiwiIgMh/bLkCZSWV4psxoX9vn9MxqYkil0+zyepQ90Xh1iFJguDyNALtzwcFe7GIR5sYVe324MHuhVogOD475ZHxkdkZG3X2goLymXhrrWvsqKeoK9uMYKch2MAqzQUXTtW3a2qh7Pq8Jn58WRjOnDXW+4enftkVQsPu5vGVuhn8rv80tDTfNAVXBmuaK4Shlmcegete3Rzs/sYxJghY6i0ryeTjEI82IEed+rL7r639nr0tLq1P6KVFL2H+6qPXhkrzTWzA7XVM3RXW5PFcMtrGMFudVMAqzQUTRHi3DyBJMoHDXUr/e+8pJr8MDBSf+ZTCv08dQFG+JNDQtSLreHN2kFZIjy0V/dee0DTAIEOooV6PtEpIVJ5N+pRbdsZBPoYyjQFRwFOUwLW+6YTph3EOb5d6aiW75QoCs4CnJghY7CowiXZ8lRY7jrTWWiolu+V+inokBXGBTkwAodBUURLj+MRFSOvPay9L+zV5lq0S1v7zEo0BUEBTmwQkfBUITLvXSoT3pfeVWGDvTk5e/PxQp9PBTo8vTGjoIcCHQUKND3CZ+d58Ro9y4Z2P2OTKXoZoZAH0OBLufCPo+nlYIcssGWO7IN8w7CPAcB+/p2GTrQK9GBQVt8P2MFOr/PL7MazqJAN32BlKp1iAjHrIIVOnKPItz0GImohPbslN5dXTkpuplphX4qv88vtcGmcG1Ni48C3TToxrJH7rruVQYBVujIKYpwUw/yY0U3MVvRLV+SqaQcPLIv0DvYI3XBxuH62jYXn7NPgUvpFApyYIWOXKIIl718F93MvEIfT12wIV5f1zbq9ZbW8uzI5lXauPqRO67bzCBAoCNXgb5P+Ox8UgpVdLNaoI+hQJc1CnKYFLbcMZkw7yDMJxGaNiu65QsFuqxRkAMrdExf+5adrZrb/ZqhKJVM43TFLLpZdYV+Kgp0k0RBDqzQMR2a19NpGEKYjxPkTiu65QsFusnxuuROEVnJJMAKHVmjCHc6MxXd7LJCHw8Fukyv2BTkQKAjS+1b9gb9WmTfqL+UlZKYs+hm50AfQ4HuZH7DSBlebwMFOYyHLXeMq+3Qrs1dzWc5PswpuhUXBbqTJRXFtyA68t8i8n6eHWCFjjO6r+O+lc+ff/FTTv3+jURUht9+S/p2vmXqopsTVuinrVAp0ImIyOqBgU984Se3/pRXK7BCx4QONbdudWqQU3Qz+QqVAp2IiOyvrPgPESHQcRI3I8CJvve1n3x9d9uC9znpe06H+uTQs8/IvmeflejgkBi6brvvMZEIS9yw0ZsvQ5dofKS0b3B/iZaOx0tLZoTdbm+ZU56zw25PyboFl855fMdjD/GqhTFsueO4H335Ry07z1m0J1Re6YidG6sX3bIKAJtsuU/EaQW6cl03Lgr1t228f1M3r14QYcsdJxipmXGvE8J8+I0XZGDPPomNjPCg2+n567AC3ajLpQz7yh8QkWU8+mCFjuPsXoQzElEZ+MNrMvBOt22KbqzQJ+aUAh0FObBCx0nsWoRTh3tlcPduim4O5JQC3e5A5Q+EghyEUhzEnkW4saLb/hdesm3RLRt2K8Vlw+4Fuojb7f2rhauWPrHj14S6w7Hl7nB2K8KNdu+S3jd3cSOYUzhxy30idivQUZCDCFvujtdf7f+RHcKcohuyYbcC3ajLpRzxz/itiJzFo8sKHQ70hb/bdFXsg+v+x6pfv9OLbqzQc8cuBTqXyGUP3/m3T/KIskKHw4wuPvfHVnxHR9ENuWaXAp0uRqeILOURdSZKcQ618aav/lw7//IlVvqaKbpNnZNLcdmwfoFOaVxw4YfDXS9s3c6j6TxsuTvQLdfdck5kxZ/scNXMscZOAkW3aWPLfeosWKAL+zyeVo5YdR623B0oXl3zayuEOUU3mIEFC3SBpKp2ish6Hj1W6LCxL/z1TRtiH9twh1m/PopurNDNzu32SGPNbNMX6CjIsUKHzY2ef8m/m/FdHEU3WIWmqccLdNUVNfGmhgUpMxboKMg58M0mI3COz9182zZ92fvazPQ1UXQrDEpxuWcYusQSo96xAp3fVzrk8fhmmOcrpCDnNGy5O8Qt191yTvR9f75DKa00x04BRbeCYsu9MCrLK6Wxft6BstKgWUoqFOQchC13h4jPnPNbM4Q5RTfY2cjoiIzsfWWOiQp0FORYocNOvviZTbdE16z7l2L9+xTdWKE7lVkKdBTkWKHDJiKLzv3nYrxzo+gGpzNLgY6CnEPeQDICeytGEY6im/lQiiuu4hfoKMg5AVvuNlboIhxFN/Niy918ilCgoyBnc2y521ihinAU3YDsFaFAF0hp6mYRWcv0WaHDQvJdhKPoxgoduVWoAh0FOVbosJh8FeEougH5UagCnS6yWURambgN3xQyAvvJRxGOopu1UYqzjgIU6ILz3/Nhpev5razSbYYtd5vJdRGOops9sOVubXko0IV1j7r00c7P7GO69sGWu83kqghH0Q0wjzwU6AIuzdMpFORYocOcpluEMxJROfLayzJ0oIeiGyt0mFiuCnQU5Fihw6SmWoRLh/qk/40dMnTgEEU3wAJyVaCjIGezN3qMwB7+vv0ft8v572/O5s8kevfK4Reel/0vvCix4TBFNxujFGdPOSjQUZCzEbbcbSDbIhxFN+dhy905plCgoyBnE2y520C0YeZTkwnz4TdekN5dXXw+DtjYFAp0FORYocMMNl7z+X9NrL1uY6b/TtENrNCdbbIFOgpyrNBRZPELV31uvHdlFN0AiEy+QEdBzgZv3hiBdX32lv+7Qz97ZeOJv0bRDeOhFIdJFOgoyFkcW+4WdWoRjqIbJsKWO8YzToGOgpyFseVuUbGWs55RSispugGYsvEKdBTkWKGjgP781jsuUTxlTw/sp+gGVujInbECXYmv/NKn7vvyDiZiscePEVjPm0//6sDy8upEJJ1arbr9LiaCM+EzdEyGYWivjcYj69/Y0vkc02CFjgL75Jq/2dZbWnmp6iphGGCFjqkKKyLtBx+/fzOjsC5Wdxb340e+v2p+PHRuXay/m2kAmMKq7ps+3ddKmLNCh4lce+XVV+33lf447quk7AhW6DjTi/820aX94JP3v8o0CHSY1F+uufrnh0oDf8o2PAh0jKNbEelgRW4/bLnb0I8e+cGfjW3DKwZ3iQNw3D/6dN9SwpwVOizo2iuvvuqQ1//DiD/oZxqs0OHYF/ptmq6v733yJ/uYBoEOi1t3xfo795cHb2AbnkCHo3SLYrQf+u2PH2AUBDps5k8/cM2+gdKqFkOhN0egw8bCItLp032d+57cHGIcBDps6ro168855PY9Ey6prmAaBDps96r+oK7p7WyvE+hwkHVXrL+zp7TiMylPOeVIAh3W1+1yudb3/OaHTzIKAh0O9ecfuHZHb2nwHLbhCXRYUlhEOg89fn8Ho3A2VmaQ//7lPecuig2cWxUf6GcagIUYxr0+3ddKmIMVOk5zzZXrbzngK/tn7jbHCh2mTvLXXC53O9vrINBxRp9c8zfbDpZVX8o2PIEOUwkbonQcfvxHnYwCp+L4VIyrN1CzT0aHzm5UjJlJ/wwGYnEcn2p9Wiomaiz0kpaIPBI/vHcXEwErdGQUXLo66PZ614phdIhIy9ivN/tKpbZutiR8AYbECh0Fpqsp0RJR0fWTbuPcbYh06qq6OfTqk1xnDgIdx4J8+RWt7nS6XRRlvYhkTO3zA7WSDjYKd5sj0JF/hhiixyOiphMT/bawKMoDmtvdEdr+6D6mRqDDoWoveN9qQ1HWi2Gsm+yfqXF7ZX5Vg4xUNDJAAh15oqVioiVGxZCsPid5UBHpHHjxN08yQQIdDlFz4eXrDV1vVxTlvKn+Hc2+UqmvmSmxkioGSqAjR3Q1JVo8IroxrQerWxSlQ0unH2A7nkCHDQWXrg56PJ52Q6RdJthWz9a5M4IiNbPZhifQMQ2GoYkWj4qmJnP514YVkU7V49nMdjyBDhuou/DypbpIezbb6lOxvHa2RGbUCpe5EejIjpYcFS0Zy3Z7PctXeuVexTA2sx1PoMOCai68fL0YxnoRWVWof7PZVyqNVQ0SLavlASDQcaYgVxOix0enu72e5U6A8ZricnUOvvDYZh4BAh0mFly6OujyeNYrR7fVW4r1dZw7IyiuqkZJebh+nUDH6aGqiRaLiKalivllHN2OV9VOPmcn0GGmIF9+Ratb0zrEMNZKDj8fn67lNU0SqWhgG55Ahxy7DC0ZEzU5arIUUO51iXT2v/DYqzxKBDqKpPaC9602RDqkgNvq2apxe2Ve7Sy24Ql0R9PScdETsYJur0/BNlGUzWzHE+go1Go8w93czG5haYWUVzdytzkC3Vmrck0VLREt9vZ6trgLHYGOvAb5JO/mZnbvqWqQ0UAT2/AEur2DXAzRE1FRU3ErfxvchY5ARy5N5W5uZlfj9sr8miYZKa/nASbQbUdLx0WLR/N7GVrhbVNEOrjsjUDHFH1g0z1PxUfDK3c9/4QkkwnbfX9swxPodqKrKdGTMattr0+K1+OXmc1ni9vjf/mF+//pfB5tc2Lf08Qq6hsXt7WtkgUrLpeXf/UTeXvH87b6/t6KR0QORjj0BZY2yUNULKuuvk3mNC8Vr8cn8VRsLo84gY4pKK+uD4iIeEpK5T0fvVrmLr1YXv5/P5PBvoO2+j5fCg9ITTTMoS+wnCkeomIJZaWVMm/BxVJWGjz+a6W+siCPunm5GYE5XfHl761sOGvRNSf9gFXVyrwLLpUSr18GD+4VTVNt8/3GDV16YiNSGhuWyhK/qG5W67mUSIQlbjCHXNHVlKixsGg2XJV7PX6Z07pU5s27SLze038OaxZdtKvntcff5FnACh2T/aEqLVuf6b/Nv+RyaTt/pbz5+IPyhxe22er73p+Ky/6DXRz6AlPK0yEqptE0c6E0zVwsXo8v4+9xebyfEJGf8mwg0DFJ/pLSCYsnnpJSOW/NJ6Rt2Qp56dH/lt79b9vq+98RDYlEQxz6AtMoyCEqRTKjsk7a2t590vZ6Jm6X5xyeDebkYgTmVFpZ0TqZ31fZ1CyXXb1RVnzoU+L32281u32gRyKH3pKyxDBPChSFrqYkHRkUNWm/z8q9Hr/MnX+xLFn83kmFuYiI3+2fybOCFTqyEGhqzqp80vLuS2TW4nfbdxv+8Nsc+oKCMskhKnnTNHOhzJ59jrhc2VWpfF5/Kc8Oc6IUZ0JX/sP3P149q+WqbP+cy+OVxvlny7ylF0v4cLdEw/Za1falEtI7MiDz3IakfGUiChtMk0UpLosgP3aISjoWFsOw38X7wepZsvBdq6SmulmUKf4MVS+8KHxwx+PbebaYC6+IZnyX5fEtnc6fLwvWyGVXb5TVH7tOKgNVtpvP9sHD0nvgTZkRG+DJgpzS1ISokSHznYiWA16PX+YvulQWLlgpJb7y6b1Geb2reLaYD1vuJuQrKb04F39P0+Jl8idzF8nu3z8mrz31K1vNaFBLy2DfPjl3RohteEx/VW7z7fXZzedIU+PCrLfXMwY6xTgCHZNTHgyel7MHuKRUFr/3w9L67kvklV/9VPbvft1Wsxprw3PoC6YU5PY4RCWjYPUsmTv3PRNehjal1xWXp4ZnD4GOSfCXV+Z8uVkWrJFLPnm9LNy7S5578D4Zsdnn688P90nNyBCHvmDSbHqIytGf99JKaZl7gVRW1OXl7+eOcebE4SwmtGFrV95fYf7w+EPCoS/OweEsJ6zKrXlG+aS1zD1f6mvbcra9nsnhob7WV+7f1M0zyjxouZvMVBvu2aprWygtZ18oajwqwza7N/ygmpLDkSFpUzTRfX7R2Yan5S7/e4hKOhGxbXt98ZL3SaCibsrt9WykUqPdNN3NhVc6k3G5PE2F+rfKgjW2PvTl+DY8h744ntMOUSnIa5XbczbPLAIdE/CXla8t9L9Z27ZI3v/pTdL1zGPy+lOP2GobflBLy+BAjzSPDEpt3Wy24R1GV1OiJaKi66rtvrexM8ob688qyr/vVlxn8Qwj0DHhCt1dtMQZO/TFjmevjx36wtnrzmAYmuiJUUecUV608HD7FvJMI9Axgcnewz1vT4gTzl5//cmHbXfoy0vhAZHwAIe+2BiHqBSG4lJ4V0ygwwpq2xbJZW2LpPvlZ+SlX//Mdm347ce24etrZkqspIoH3AZ0NSVaPCK6DQtvXo9f5rS9W+pqmk3zNfm9fj6/ItAxkWwPZck3pxz6wtnr1uWEM8qncohKvrkUN5c9mwwPiMkU4hr0qRo5vN+WZ6+PWV7TJJGKBltuw9vxOvSxQ1Tsur0erJ4lc+acbYrt9Uy4Ft1cuA7dRK748vdWVs9u+Ruzfn3+ioC0LVshtfWzZOjgO7bbhu+JR0WPDEqj1yMpb5mtvje7XYeuqQnRRkdsuSr3evwyb8ElMmfWEvF6zb1rxLXo5sKWu5neXXm9F1jh6+TQFxRtVc4hKgCBjhw/cU449OW5LT+w3Tb82KEvdt6Gt1SQH9tet+OxpiJHt9dbWpdN+1jTQuPmMgQ6Mv1weLyW++EYO3t9wKaHvmwfPCw1oQEOfSkiux+iMqtlqVQHmyz59XNzGZNlCCMwD6/PZ9kfjtq2RfKB9q/JeX90pfj99mqLD2pp2X5kv2i9b0lJKswTtVCrck0VdTQkajxiyzBvmXu+LDnn/ZYNc7BCh83Z+ez1t+IRkYMRzl7Pd5BzRjlAoMMcHHP2Ooe+5JzdD1HJ5xnlRQkQbv9KoGN8xbyPez6MbcNz6AvOhENUrInbvxLoyKDY93HPFw59QSZjZ5RziApAoMMqT7QTDn2x49nrL4UHpCYalvlVDRz6Mkl2PkSlWGeUg0AHCmbs7HU7Hvpy4jY8h75kxiEqAIEOG+HQF+fhEBWAQIddn3wlpXLemk9I27IVtjz05fjd5jh7nTPKgQLgxjIousqmZrns6o2y4kOfst1NaUSOnr0eOfSWzIgNOC/I1YSkI4OiJu13KZrX45e58y+WJYvfS5iDFTpworFteDse+rI/FZf9Djr0hUNUAAIdTn9CcuiLtYOcQ1QAAh040dihL4f/8Iq8/Ov/se2hL/NqZ0m0rNYW35OWjoueiNm2vd561kXcdx0EOjBVJ569vuv5J+x3mVvfPllYOijl1Y2WvducoamiJaK23V5vmXu+1Ne2sb0OAh2Y9pP0hG14Dn0xUZBziApAoANT4ZhDXyxw9rrdzyi32yEqINABUxo79OUPjz9kz234I/tljvugVNY3i1FSY6qvzwmHqLC9DgId05aKxwZFhAtaJ2nxez8sC1ZcbstDXw5omsjhvbK4pFeU+rliuEuL+vVwiApAoCML6WSqR0TmMYksnsA2P/TlD4m4VPfslJkVAdGri/PUsPsZ5RyiArvgTnGwhbFDXy5435/a7m5zQ7oub4SHJbL/FVESgwX7d3U1JenokKiJqC3v8tYzwWiXAAAVqklEQVQy93w557wrCfPpvNnT0vuYAit0IC/sfPb62Db8Qv8h8TSclbdteCccotI0czHb67l406frYaZAoAP5e1If24ZftPyPbXnoy1vJpMj+N+XsQJUYVc1iKN7crbg4RAWwLLbcTSQZG32AKeSO3Q99eSM8LCMH3hDXaO/0V1pqikNUAFbogLnZ+ez1A5omB470yEJ/v3jqWsTwVmb15+1+iApnlOdXWk2xCCHQgQI/0Y+dvT5/xeW2PPTlrWRSpGe3nD2jUozatjNuw3OICmA/CiMwlw1buwymkH92PfRFRKTa5ZJZ1fWiVcw+/mvDof0ydOzMFE1NiB4f5RAVTNvQSN8ntt+36adMgkAHgV5UaiJuy7PXxyz0+8VTPVOMkhoZDu2XwZS9D1HhjPLCe+TOvyVDTIQtd5NJjITUksogj0shnvx2P/QlmRQ5vFeWlB8Rn6FIKha15ePIISoAgW5KydGRaEllkCpuAdn90Jc3R+35OTmHqBRXKp2MMwVz4bI1k9HTNr1ZtgWMHfpy3h9dacvL3OykZe75suSc9xPmRaQZWpIpsELHBOKjo29ViTQyieKx8za81bG9bqJA57avBDomlk6l9ojIKiZRXCduw9vx0BfLPR4comI63PbVfNhyN9sPiZp+gymYh50PfbECDlEx8wpdfZYpEOiYgJFObWEK5jP/ksvlw+1fk3nnvodhFEhdfZucs3SNNNafxTDMuPgw9D6mYC5cQ2hCXItubgN7d8nrTz5su7vNmQWHqFgD16CbD5+hm1D48P5QoKmZVzOTqm1bJJe1LZLul5+Rl379M0kmuTAhF7wev8xpe7fU1TQzDJNTtbTKFAh0TEIqHhsUEQLd5Ox86EuhcYiKtaS1dJQpEOiYzA9LMtUjIvOYhAV+gI4d+tK2bIUtz17Pt2D1LJkz52y21632GpVOvsYUzIdSnAlxLrr1jJ29vvpj10lloIqBnIHX45f5iy6VhQtWEuYWpBn6HqbACh2TcKzp/u9MwnqaFi+TP5m7yNaHvkwXh6jY4DVKVx9jCuZDS9GkPvOzHbrbX8rjY2Gx0KAtz16fKs4otw8a7ubElrtJRYf6uQuTxZUFa9iGl6N3eRvbXifMrS+eioWYAoGOLIyGQpRObKJp8TLHHvoydohKdbCJJ4JNcA938+IzdJM6Vozjnu424qRDXzhExb7SmvoSU2CFjixwC1h7Gjv05fK/vsmW2/BlpZXyriXvlYULVhLmdg30VOIXTMGcKDaY2LU/eiFdUhlkF8XGup55TF5/6hHL323O6/HLzOazue+6zemGZjz67U+zEDQpwsLEIgO93SWVQW4wY2PzL7lc2s5fKS//6ify9o7nLfk91NW3yZzmpazIHSCRTHAgC4GOqYhFok8Kd4yz/w9hSam856NXy9ylF1vq7HXOKHeelJ7czhTMi60TE0vHY5uZgnOMnb2+4kOfMnUb3uvxy9z5F3NGuQPpavonTMG8+Azd5Pgc3ZnURNyUh75wiIqDw5zPz02PoDA5Pkd36A+myQ594Yxy8Pm5+fFuy+SOfY4Ohxo79KVY2/Bj2+tLFr+XMHc4Pj9nhY5p0uKjXxWRa5iEs42dvV7IQ184RAUn4vNz8+MzdAtYv/np2IyahlImAZH8H/rCISo4laql1V9/53ovkzA3ttwtYORI3/NMAWPydejLiWeUE+Y4UTwd72YK5seWuxV+mKLh7wj3dccpTjx7fdfzT0zrbnMtc8+X+to2ttcx/go9lfwfpmB+bLlbBOejYyKx0OCUDn3hEBVMBuefWwNb7hYxdLD7HaaATLI99IVDVDDpN4uJ0V6mQKAjh0bDYba8cEa1bYsmPHvd6/EfP6O8sqKOgeGMkmril0zBGthGsRC23ZENNRE/6dAXDlHBVBwe6mt95f5NlOIIdOTSx7+5dU/d3EXcNQ5ZGdi7S468+baUeGmuIzuxxGjvk/e0NzEJa2DL3ULYdsdUVM5qIcwxJWy3E+jIk4f/4VO3asm4wSSQjVQiJrqiMwhkLZFSv8oUCHTkCW13ZCsaCfPhGrIWS4z28tk5gY58vjgPD9/JFJCNtJoWo4wiHLKTTMU2MwVr4X27BXFGOrKx/8BuUWIpSe8bYBiYFM4+Z4WOAhk6uP8ZpoBJ/5D7vKL4OFcDkzeaHOWjPQIdhRALhzYxBUxGKhU/+v+w5Y4spFPxLzMF62HL3aL+6ru/HQ40NQeZBCYSGjwkUTUpIiLxHXvFrfMeHmd4E5hOxn/znxvKmAQrdBTqhfrIkZ8zBZxJLBb73/9RyiodZzaajN7PFAh0FNDWTZ+8lmvScSaq/O/1574AN5fBxHRDM7j2nEBHEfS90/U7poBMDF0T1wllOPcMdlFxptX56Dtce06gowgox2EiqXTi5F8o84khbOogs3gs8vdMgUBHETx62zVP97+z620mgfEMD/Sdvmrn6jVkCvNULPTi/R2PMAkCHUXCneOQSVpNn/ZrSlkJg8G4EonR/2AK1sZlazbAJWwYT0/f3tNX6JGEpN/uYzg4iaql1V9/53r2b1iho9i4hA2nOn5DmVPfwVewQsfpIvGRe5kCgQ4T2Lrpk9cmRkIqk8CY8FB/xv+muzhKFSc8H7hUjUCHufTt3cM7bByXSMYz/jelopQB4bhobOR3XKpGoINVOkxKKcl8Vzh/QzUDwvHV+WgytY5JEOgwGU5hg4hIMjk68W/genSwOifQYW6J8PA6bgeL8a4/PxXXo4PVOYEOE3vktmu7uR0sUvqZP3nx1nGVI6tzVucEOky/SuezdOfStPRJ92/PxB2YwbBYnbM6J9Bh+lU6jXfHioT6J/cb/R4xuHyN1TkIdJgbjXcHv1CPRif/m8u5yQyrcxDoMD1W6c5j6JqIf/JtN39TDUNzoJF4+EFW5/bEvdxtjHu8O2x1PjIoofhIVn8m8do+cRm8DDgF92xnhQ6LGjp08B+ZgnOEQoPZv6Of4WdwDhIZDd3OFFihw6L+8tuPHq5qntfIJOzN0DU52L8/+z8YS0lq92EG6ADxVCz0xHdvqmISrNBhUYOHDn6MKdjfaDQ0tT9Y5hNd4V5Ejgj0ROTTTIFAh4U9ets1Tx/auWMbk7C3qWy3j2Hb3f4iiZG3t9+36adMgkCHxXGzGXvLtt1+Ktru9qYbmhGNxf+YSRDosIFHbru2u/fttyjD2FR4uG96fwHb7rbGZWrOQSnOQbiMzZ4OHNgtim96VyKlewbEGBhlmDZDEY4VOmyqv3vfhziNzV40LT3tMBfhsBbbBjpFOAId9vTobdc8zWls9jI0kKNLzvwe0b2817OTkdHhbRThCHTY2C++8Gero4N9cSZhkxWYls7Z3+WfVcdAbULV0ir3ayfQ4QB97+y+milYX3RkUFzu3P0IK8FyynE2EY4OfZ4inPO4GYHz7Nn24Juzl62+rKKuoZVpWNeRIz0i7tz+CBvJlEiCKxwt/UYvHn7195u/yJt2VuhwCrberU1NJ0V8uT9jw9tYzXCt/LzQ0moknljLJAh0OAxb79bV338oP3+x3yOan6tZrYqtdmdjy93B9mx78M2Z5/3R0sr6pkVMwzo0LS0jiZG8/f3e8lLRBqMM2mJGRoe3PXvvrVym5mC8FQc3nLGYoYGDEtNSef03Em90i4uP0i0jlU7Gf/OfG8qYhLOx5Q4Z7N67lBvOWIOhaxJNJfL+7/hbGhi2ReiGZkTiofczCbDlDul66qFw49mXlASbZq9kGuY2PHhYVNHz/u8ofo+k+0KisIlneqHR4e9vv/dLdzIJ8NOK4666/YFXGhcuWcokzLs6P9C7L6fXnk9EOxIS7VCYwZtYJDHy9lP33HwWk4AIW+44wc82rl3GpWwmXp0P9RYszEVE3PVBbjRjYql0Ms6xqCDQkdHO555dzufp5lydF+Kz81N5m+hKmpFuaEY0HrqaS9Rw0ptwRoATHXzxsb6GxReHq2bOuYJpmGh1XqDPzk97x19eIumBsCg6j4GZDI4M3Pncf226nUmAQMeEup7csp3r0821Oh8ID4jiKk7lxV1aIvowZ6WbxbFbu3I3OJyGUhwy+vg3t+6pm7toHpMorsOH9opW5LfeyTf3i5Lmk5hii6dioSe+e1MVk8B4+AwdGUWO9P0xJbniUtPJooe5iIj/rJk8GEWWSifjoWiEq1BAoCN7j9x2bfeRrl3voiRXPL29Juk8+T1iVPh4QIqEEhwmg8/QMaGupx4K1y26cFegtv7PXB4vH9EUUCwyJHE9bZ4Xi0C5aEdG+JyuCIZG+j/33H9t+h6TAIGOadmz7cE3m869dE6wcea7mUZhGLomfUO9RSvCjUdxKaK4RIxIkgeogIajg9/bft+XvsQkQKAjJ3Y//vOHGpasINQLZOBIj2gm/EDMVV4i6uAIl7EVSHh08Lnfb/7ih5kEJvWmmxEgGzTf8y+VisuR4V7zfoFJVZI7e7jPe55xW1dk/YabESAbP73pQ2f1v7PrbSaRH4auSd+RHnN/kX6PuBsCPFh5FEuM9hLmINBRkFAf3v92L5PIvf7+HlG8HtN/nZ6mKjHoSOZFKp2Mh2PR5UwCBDoKYvhQz3KuUc+t6MigpMQ6H077Fs0WrmfMfZgPRkLv4vI0EOgomLFr1An13FDTSRmKDFvqa1bcLvHNa+DBI8xBoINQh8jRz80P93aLy2O9i06UihJRqkp5EAlzEOgg1NHf3yOKz2vZr9/bUi9GCVfAEuYg0EGoO9jQwEFLfW6eiW/+TNHJdMIcBDoIdSeKjgxKTEvZ4ntR3C4pWTBLDGpyhDkIdBDqjnoxT8UlFB+x1zfl94h/wUxCnTAHgQ5C3RnUdFJ6Bw7Z85sr8xHqhDmKhE+9kHNdTz0UnrlkxQ/VVOJD5VW11Uzk5DA/1N8jLreN30t73eKpLBN1MMLtYQlzFBA/bcgr7v3usDA/USwlyd2HCPVjIomRtw8MHLhg3wOdIaYBAh2WdNXtD7zSuHDJUifPIDoyaL/PzAn1rMKce7Mj3/gMHXn3s41rl3W/9uL3nPr9j4T7nRnmIsc/U9cV536mHooNPUCYoxD4DB0Fsfvxnz9U/66LSiqqay5xeZxzqseRvm6JqUlnP/het7jrKkUbjjjqHHXd0IzQ6PD3n/3BF/+SVwAQ6LBXqD/xi9/WLbpwV1lFYK3HX2Lr3SFNS8vBw3tFd/GploiI4lLEUx8QdTQuSkpzRphHBj65/d4vfZ1HHwX7OWMEKLQ1X76nJdDcujPYMLPU7fba7vuLjgzKUGTYkvdmL8ibnYGwqD0h2774pI104vBQz0Vv/PhrO3i0QaDDEa74xk/2lVUEWmobZonPZ/0DPjQtLUeO9IhGM+WMDE2XVNchURL2Wa3rHhFthvfQaHxgxe//bSOXpYFAh7OsvPWue6qaW69xG4bU1c8Sv7/ckt/H0MBBiSbjrMqzDfZIQpLv9IrLsO5LkVHqFv+cehnuPfjAtq/93Ud5VEGgw7GWf/6Oj1fPmfNDX1mZR0+lZUZpuQSq6sUK2/HRkUEZHhkSxevhgZyGdPcR0Ydjlrm8TVcMcQfLxNtYLZpiGAPv7P3cs7dv6OSRBIEOx1tx8+0tZVUN22c0NjQe/8VkWoLBGimfERTFZa6VL0Geh5WupovaM2DqYNf8ipQ01YgSPLqTFBscCkWP9Cxlix0EOnCKVV/6zy1Vc9vWnrQa0nTxaIZUBqqKGu6alpahgcMS19LOudtbsYLzSEjU3mFR9OLPWfca4q0LiqumUpQTHveh7u5tv/vq367m0QKBDmSw/PN3fDzY0HhfSTDgG3cll0hJib9UAtV1eS/TqemkREcGJRKLiuLz8uAUWlKVdH9I9KFIwcJdVwwxyrxSUhc8vhI/USoWU/v27PnMS9/aeA8PEAh04AxW3Hx7i39G8IHAnOYz3jJWiyfE7/XLjIqA+ErKphzyhq5JWk1JeKhfkqmE6B43K3GThbsWjkpqcESUlCYuY/qPjSGG6C5DpMwnJbVBUUr9Iv7MH6NEe/t6Y8N9y9liB4EOZLta/2znprr58//J7cv+7nJaPCEiIi7FJV7P6atrVVdF045eNuUuLWHYFmREjj7GqYGQ6JomYohIPHX6b/S6j/6fiJTUBkXcbpEy30lb6BM+l1JpY6h73zee+cYNtzJ1EOjANFbrpxXmgAJhVQ4CHcixS2759terW1pvmcpqHcgWq3IQ6ECeV+uT/WwdYFUOAh0wuYs33tkemNn4tZLKylKmgVxJxWLq8P6ez3OTGBDoQIGtvPU7j1bNaX4/2/CYDi2VNsKHD/2O68pBoANFdPa1t51b3zz7F5Uzm+YxDWQr2tvXGxke+thz/3bT00wDBDpgAhdvvLO9oq72K2U11UGmgTNJjIzEw4d6v8T2Ogh0wKSW33zHt6pb5nzGV1bGjdZxmlQspo4cPnTv01+//lqmAQIdsICVt951T6Cx6WpveTm3ewOfk4NAB6ysdW17sPmcJQ8EmmZeSnHO2UGuxsLruAwNBDpgcStuvr3FUxa4l2AnyAECHbBJsLt8Zf+nsmnmOj5jt6dULKZG+/ufIchBoAMOsfLWu+6ZUVf/F9ycxvrUeEp0Q6XsBgIdcLKLP3fnnRW11X9RVl9bxTSsJTk8IpGB4VAiFv3Ri3d8dgMTAYEOQC648d+vKg8G/nlGXc0Cb1kpPxsmpauaxPuHjejQ0IF0Mn3zi3d99mdMBSDQgfFX7Rvv+nlFdfC9ZfW13KTGJNKRmIz0Homl4vHfP/etmy5nIgCBDmS1ai+rqNhYXlN1gT9Q4WYihaXGUxIfHNYiw+E9ejq9idU4QKAD07b8pm/dUhasvL6spmqWp6yUcM8TXdVktHdAi4XDB1Op5F0vffvmbzAVgEAH8hPun7/j46VlpV/0VwQWlwQDPiYyfalYTI0PDrwRj8X/Zfu/3vhTJgIQ6EBBXXTzN1eW+Etu9peXXVLW0FDHRCYn3j8sWjo1kk7EHk8kE//GaWcAgQ6YysUb7/p52YyyZb6Kiln+QAWr92PSkZjEhkOpxGjsoJpMvaKL3vHSnZ97nckABDpgeituvr1F8ZR+2u32XFYSCCx02tGuscGhUDoW3ZdKJB811Ph/cOc2gEAHbGP55+/4uKLIR0pKS9/lLZvRapeQjw0OhdRkclBLJF5PpdLbOGccINABx7no5m+udCnuC7yl/rUer2+2x++v8VdUBMx2kIyWShvJSCSsJpODajrVo6VSz2q6/iolNoBABzCZFb2hNLm9rrNdHu9ZIiIlMyrOG/vvLre7bLpN+0QonNI1LXb8f0cjr4mI6Gp6j5bW3zAU4zChDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYnv8P8S6c/DUC+IQAAAAASUVORK5CYII="; - -var WALLETCONNECT_ICON_URL = "data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%3E%20%20%3Crect%20width%3D%2224%22%20height%3D%2215.0867%22%20fill%3D%22url%28%23pattern0%29%22%2F%3E%20%20%3Cdefs%3E%20%20%20%20%3Cpattern%20id%3D%22pattern0%22%20patternContentUnits%3D%22objectBoundingBox%22%20width%3D%221%22%20height%3D%221%22%3E%20%20%20%20%20%20%3Cuse%20xlink%3Ahref%3D%22%23image0%22%20transform%3D%22translate%28-0.00968744%29%20scale%280.00339792%200.00540541%29%22%2F%3E%20%20%20%20%3C%2Fpattern%3E%20%20%20%20%3Cimage%20id%3D%22image0%22%20width%3D%22300%22%20height%3D%22185%22%20xlink%3Ahref%3D%22data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAASwAAAC5CAYAAACSoQIxAAAgAElEQVR4Ae19fZgdVZnn761TnQ%2FCtwmugxhkGPXZDIjDoENIuu9twsAm4CS7EpFhWHYktN23AwzC6Dg6xI%2FVWcGsk%2FTtNgQ0MogQ9lkQDAtLTN%2FuhDjIk5koG10eWRwQdAjRYBLIR9epd5%2B3um%2FS6dx7%2B35U3Vt16tx%2Fqu6pc96P33vqd8%2BtOu85BPuxCFRAYF4%2Fn%2BJ4ONNV3izt0AzycRwRzQBjBgPHEfszfMIMIjqOGDNAmAHguDGRb4HxJhPeZOa3yMFe%2BM5%2BR74DbzHzmyC8ST7vZXJ%2Fs9fFL7Z10e8qmGMvpRwBSrn%2F1n0AF97Np07d753rK2eOw%2F4fENG7ffCZYDrTIZzYTJAY%2BB3AvwDoX5nk6PxcaWfHb2fgJ9v%2FC73RTFusrvghYAkrfjGJ1KL21XyO4%2BgPMvhch%2BhcAHMAzIpUaUjCmfEagP8D4ucA2u6z%2BtFwjn4WkngrJgEIWMJKQJDqNfE%2FfJNnvXVQz3OYLwToAmZ8iAjT65UXy3aMfSD8E3x%2BlhVtPdimtv7wevptLG21RjWMgCWshiGMj4DzvsUnn3RAZx2NLDvcSSAZPaXq4zN8Av8YwCZi2rST1PCOHO1LFQgGO2sJK%2BHB7cjzBWDvcihc7jD9UcLdicR8Zv4hkfOY1s73h5fTc5EosUKbgoAlrKbAHJ6Ss1fx1He26UvIx4dBuBzAO8KTbr4kZvwrgx91GI%2FyLneosII88702x0NLWAmJZTCSIn29A3wMwAkJMTvWZjLjN8z8bZrmDhSupxdibaw1LkDAElaMO8JF9%2FAJ6qB%2FrQP%2FegKdF2NTE28ag7cw0V2vjqj1L9xIBxPvkKEOWMKKYWDb8zzXgV5GhKsATIuhicaa5DP2EHAvjai%2BwZvpeWMdTahjlrBiEjgZTU095P9nH%2F4NxHROTMxKtRkMfpqJ1thRV3y6gSWsFsciczefjUP6UwRcY0dTLQ5GGfWjoy6%2BS7vuys1d9Osy1WxxExCwhNUEkEupGCOqLzJjqUNwStWxZTFDgHGQgbXaVV%2B2xNWa2FjCajLulqiaDHgU6ixxRYFqVTItYVUFU%2BOV2vN8hkP6y2N%2F%2FRoXaCXEAgFm%2FgeP3M9v6aHdsTDIcCMsYUUcYHmY7h7yPuv4dBMIUyNWZ8W3AgHGbhB9aY9yVm%2FropFWmJAWnZawIop0ZgW7fJrf7YD%2FDsDMiNRYsXFCgPGiT%2Fj0UI%2F7UJzMMskWS1gRRDPbN3Kx76DfAb0nAvFWZMwRkEmo2nG7Nn%2BCfhpzUxNnniWsEEMmy7nsP6BXEYIJnyFKtqIShwDDA%2FF%2F36PcFdu66K3E2R9Tgy1hhREYZur8hp%2Fzmb9EwElhiLQyjEHgZQDLB3vcR43xqIWOWMJqEPxsH89h8tYR0R83KMo2NxuBR5lVVyFH%2F2a2m9F6ZwmrXnxXsJM9zf%2B0D77dAabUK8a2Sw8CPvBbYvQUcu6D6fE6XE8tYdWB5%2BjkT%2B8BAp1fR3PbJO0IMP7nm6xu%2BFEv%2FSbtUNTqv00JqQUxZmrP65twUP%2FEklUtwNm6RyFA%2BI%2FTSf80kx%2B57Khy%2B2VSBOwIa1KIRitk1vBMaL2egGyVTWw1i8CkCDCj7%2FVZ6pM7ltKhSSvbCrCEVUUnyPTzn4D1I0R4exXVbRWLQE0IMPO%2F%2BFPc%2FzS8jH5RU8MUVrZ%2FCSsFnZkyffqzBL3FklUloOy1RhAgog%2BoEf3jbL%2F34UbkpKGtHWGVifIH%2B%2Fhtx5F%2BkAgXl6liiy0CoSPgM68ayrXdFLpgQwRawioRyMwafh95%2Bn%2BDcEaJy7bIIhApAj54q4Z7uV0B4liY7V%2FCCZhk%2B7yF5OlnLVlNAMZ%2BbRoCDmiuy%2Fqf5YezaUoTosgS1rhAZfv1Z9jB90E4flyxPbUINB0BIpwpP5zyA9p05TFWaP8SjgUn2%2B99B8DVMY6VNS2lCDDRrYVu9bWUun%2BU26knrGAnZaUfI8IlRyFjv1gEYoQAg79e6Gn7qxiZ1BJTUk1YQlZnuPoJAJmWoG%2BVWgRqQMBnfHOoR10PIq6hmVFVU0tYF67k6dOm6cctWRnVn9PgzEO8U11dWEFeGpyd6GMqH7rPyfPxU6Z5Gy1ZTewO9nsCELgSp%2BlH5d9BAmwN3cTUjbDOvZdnnLrXe4qILgwdTSvQItAkBJh58%2BtwF%2B7I0b4mqYyFmlQR1odW8YnTlfcDu9heCH2PsY%2BB34H4DTkS6HeQ74w34PDosik%2BvQ2EkwGcxOCT4ONkIjopWJXVTh1pOAjM%2FE%2F7tXvpMzfSnoaFJURAaghLUm2mO94mB3RuQmLTOjODjUL5ZSJ6yWe87BC9xOCXoPklV7kvezvxcqPPUGRXIecdmA3fm%2B379C44NJuYZ%2Fs%2BZpOD2QycYRdGnLwLMHj7fs%2FtSAtppYKw%2FnSATzvke1uI6A8m7wKprLELjGENGoZ2hod%2Fix9jBfktRWI9q8xr%2BABcv4OY28GYD8IpLbUppsqFtDy4nWlI5TGesC65h3%2FPO6i3AHh3TPtbK8z6FQPDTDTskzOUiO2omGn%2BAM5xMEpgDLQ7hNNaAV4cdTJ4B5SbKXTRrjjaF5ZNRhPWgjX8Lq31ZgDvCguwBMt5GeAHR%2BA%2BuKWHtiXYj1HTmakjjz8BeVc5oKUg%2FLvE%2B9SgA8z8PFx3nsmkZSxhtef5DEX6GQDvaLAfJLn56wz%2Bjtbu%2F9i8nJ5OsiOT2d45MNKpmT7qMK5M819H%2BXtY6Gn7wGR4JfW6sYSVyY88m9K3gW%2BCcT85%2FMCm7rZNSe2YjdgdJAw7wWa2f9GInMS29fkrg71tn0ms%2FRUMN5KwMnnvOiJ8q4LfJl76NTOt3K%2Bdu9LyxmiyIMqb4RmOn%2FPBNznAqZPVN%2Bj6G4M9rpEvKIwkrGy%2F9z0AqVhulsE%2FZqb%2FNpRzv2vQDRe6K5m893Em%2FmsH9J7QhcdRoK%2F%2BcLCXdsTRtEZschtpHNe2zHwWkZFcPB7yR4n4HwZT%2BrdvPBDVnBdy7j0A7sn2eX%2FGxJ8kovnVtEtqHQLellTbK9ltJGGBYGxiKDMe86E%2BNZyjn1UKrL1WGoHBXldG39%2Bbv4o%2FqFxvJYEuKl0z4aUK%2Fy%2FhHpQ030zCAv1fAOeV9DihhcEra0JvIdcmSdv20yACm2%2BkHwGYlxnwroKPO4lweoMiY9NcUnYGe%2BjV2BgUoiFGrtbgAPeGiFFLRTHjNz5RTyHX9r5CjyWrsINR6HYfwHHqbPbpc8zYH7b8Vshjh77aCr3N0Gnsg56O%2FpGnZTH%2FZoAYlQ5ZZXKvclds6woSi6NSY%2BWOITB%2FDb%2FD9fTfg3BtYkFhfGcw516TWPsnMdxYwjp%2FDR93gqcfTei%2BggXtqBuGP0E%2FnyR%2B9nIECMzr5%2FNdePcQ6P0RiI9OJGP9YM79aHQKWi%2FZyL%2BEAuu2LnrrFa0WMeOp1sNcnQU%2Bw2fmzw%2FuVBdbsqoOsyhqSerSK577IWZ8Iwr5Uchk4IHBWcr4TVSMHWEVO8X5a7jtBE9viPsmE8x4zYX6yMYcSaK2%2FcQEgUy%2Ft5gY%2Fxjnrd%2BErArd6uo0rPVuPGFJvw9IS%2BuHCVgUk%2FvgKDMYGIRSS01OWj3K4YR9yQzwmWDvkVj%2BRWTcO9ijrksDWUm3SQVhiaOyYBxm6fVEWBKb%2B4XhMdFnC93OV9PS4WKDfY2GjI7UvTuI6KYam0ZXnbF2sEd1panvpIawir0m0%2B89QEDLH0wy4RVPq49s6SVZUcJ%2BEoJAZsC7HIz7gmWeW2gzM%2FoKOXd5C01oiWpjH7qXQ7MwU%2F25%2FOcvd70Z5T74J8pVf2zJqhloh6uj0O1%2B33PVBwG8HK7k6qWllawEodSNsIJuwUyZAX0%2FIViCpPqeEkJNeV61V6nL5S1mCOKsiBYhkFnDM6G9Jwh0fjNNSDNZCc7pJCzxnJmy%2FXpdUycJygPSWeovsZR0Mzu51RUNAplv8TTs1w8RcHk0Go6Wysx3FnJttx1dmq5v6SUsifMoaa0BYVn0YafbB3vUF6LXYzU0FQFZqvkb3t87TH8dpV6Zn1fIta2IUkcSZKebsMYilM17d0VFWgyMyCguyFlLQo%2BwNtaFQHveu1YRvglA1SWgQiNmuq2QU3dWqJKaS5awxkKdyY98PYJX1geIeFFalypOzV005mhnfuRPmUiWr5kWnu%2F0ycEetTI8ecmWZAlrXPwyeW81EXrHFdV%2FytinoS4dztHW%2BoXYlklDoD3Pcx3ojUSY3qjtRLR8U7fqa1SOSe0tYU2IZiY%2FIpMDb51QXNtXxj4fqnMoR8%2FW1tDWNgGBMEjLZ9wwlHPXmoBHmD6kbh7WZODJWxh5wDlZvXLXfcYeS1bl0ElHuYyqfagFYOyr1WMG2JJVedTsCKsMNpm8vpWI7yhzuXQxYzdDdRZytL10BVuaJgQ68nyBA72p2sTpMbK6bjjnGrMAZdjxtoRVAdEaSWsXfJUxcaeSChDZS5MgIKQF6I0O4cRKVYWsQLjavk2uhFKaJ45WxuXw1c4B3cvMqw8XlD7ZhUNq3uDN9Hzpy7Y0zQhk8nweQw9VIC3NhGssWU3eS%2BwIa3KM0JH3ljmEu0pVlXWsaER1WLIqhY4tKyJQgbS0T7hyqNt9uFjXHssjYB%2B6l8fm8BV5W0Og7sMFR05%2B5Ss135LVEUDsWWkE5LkmQXXIKh3jarzpM5ZYshqHyCSndoQ1CUDjL49NDPwbBhOBdrpT1c1PfZx%2BNb6OPbcIVELgvG%2FxySfv84It6BzX%2FfmmbjO346qEgb1mEbAIWAQsAhYBi4BFwCJgEbAIWAQsAhaBOhCI5BnWJffw740c8JaDcGFgE9Mb5PDAYHfbk3XYaJskBIHsKn4%2FlL6FiWeLycT0kvbVncPL6bmEuGDNrAOB7MDIpexTN4hPDuLuY6vX5q7e3EW%2FrkNcxSahE1YmP3InEX2ylFYGb%2FMd92N2z71S6CS37Pw1fNIJWq8jYHEZLx7ao9Qyu4N1GXQSWjz%2FG%2FzvHd%2F7rgM6t6QLPn9lsLftMyWv1VkYGmFVu5WW5NoBaoFNDK4zYjFrdvFafrs%2B5A0R0XsrmcbMz6spbscPltFrlerZa8lAoIYZ%2FBv2KrVkWxeNhOFZKPOwzl7FU4PNSqvY909m%2B0p%2B1ajDYbhgZbQKgc4BPt0%2FpLdORlZin9SRukJwrbLX6g0HgbHVKDZVmLl%2FWJHsBSrcIBxxuLCBk4ZHWGLIGa5%2BQrb%2Bq8kOu15UTXDFrXJAVqyfJiB4XlW1fYwXyVHtdv5R1YjFqmIDS%2BcUfumpy164kQ424lBDhHXhSp4%2BbZp%2BvGayGrOYGfvh88LC8rZCI07Yts1FoPNunu0f0kM1k1Ux7sBLzhTVsel6eqm5llttjSCQWT2SgUOPN7A4YeHAAbXwh7fQ%2FnrtqPsv4Zw8Hz9lmrexXrISg8VxcuiJAIh6PbDtmopAQFYH6xhZjbNSiM4%2FqJ8WWeOK7WmMEejoG7lE7tUGyEq8ywhnCHfU62pdI6wPreITp7veRgJdUK%2Fio9oxDvrMVwz1tj11VLn9EisEFvTzWR7rYSKcHoZhzHjVJdW%2BsYdeDEOelRENAmNktYGAtjA0MPjZ%2FZ674JkbaU%2Bt8momrHn9fIoLbxOBgnyoWhWWqy%2B7yxCwZLDH3VCuji1vHQLZr%2FN7uU0PESHUh%2Bay2oVLaq4lrdbFtpLmbL%2B3iIGHwyKroi4Gb9%2FvuR21klZNhDVGVpsJNKeoONQjwwNhsSWtUFFtWJiQFaboLQBmNiyshAC7RE8JUGJQJGQFxiMguFGYI6Tlwe3c0kO7q5Vf9TMs2ZrbhRcdWYnFAgzjkY4Bb0m1Dth60SKQ7eM5UZJVEHYZtU3RWwJd0bpjpVeJQHAPRkhWQdxB5wmnCLdUaRaqIqxg7oznbYlsZDXeWoLrMB6ypDUelNacy6JzIL05qpHVBK9mii5LWhNQacHXzIB3ldyDUY2sxrsUcIrnbal2ft6kfwllvg37ehiEs8YrasK5XTa2CSCXU1FhhcxyTcIptxt5hINjnVKErMC4n5q9fDrjRWeKmjtZJkTFEVZxcmALyErgVgKcbAFeJ%2Fa2WZ0ISBbCJGuQ1ym5imaEU0S3zYSoAquQqwT3WivISvwgnCWZEMI5ldwqS1jBfJt6ZjJX0lbjNWF5h7DOklaNwDVQXYhCUqeqSbtoQE3FpjZ9qyI8kVwc27dAEtgn%2FdcViQEiVEiLK8%2FPK0lYMt9GJvbVO5M5TIeKpCWAhinXyjoWgWKOWLX76B0rIcQSwvFCnGJTiFKtqBIIFDdZaSlZjdlVnFQsHFTC1GMfussrbI8loTWcyYGllNZaNkZad8mWW7W2tfWrQ0CyDRzojbEgq6LJo6S10ZJWEZDwj3JPldsRKnxt1UkU7hEOCqbTTGhy1PAv6vk2E3TX9ZWIlm%2FqVn11NbaNSiIgZCVpFyCEklFfUkkDhTbntAHwKjStcs%2FNChIiv3TMfp%2BH%2FxI2Y75NGO7JpqayI3MYsqwMoJgjFleykhgVc07FVhuzcBCQe6iKDYLDUVa%2FlJkT5%2BcFI6yArJxgJnOwxGn98pvZkv52sEd9uZkaTdOV7fMWwkGiUqEIWLipx%2F1fpsWimf5k%2BvRnyeEvNlNng7re8Bx10eZP0E%2Bd89fwcXD0YwASRFbiPv%2FXzMDIlxoEIrXNs33enyWNrIKoA49n%2B70PpzZwDTqe7Rv5csLISjw%2BWfn6UTlxTvD8vwLw7gZxaElzYvrbTH7kKy1RnmClmbz3ETh4JMEufC%2FT75VbPz7BbkVrekffyNfg0N9EqyUa6QT8frZf3%2BIAfqIDT0Sflo0vooHJPKmZvPdRIjyUdM8IeDjb5y1Nuh%2FNsr9jYGSl49AtzdIXjR6%2BwiGis6MR3jypsktPJu%2Btbp7GZGqStAsifCeZ1pew2sH9QSpJiUu26AgC2bx3l8Mk%2F6SS%2FWG8T94Sesn2YtR6IvRKYMB81FQNE3wLw4di2kWQ8hSGwHjICNK3LGmVCQYzBfcEwYhJ1z7gOMz8szLuJq%2BYsCwzoO9KnuHRWpzJex9XhG%2FHYSZz2J6KT8T4bvuA95dhy066vGy%2FXgtDyEpiQcBzDoiMusEJuL4j792T9M4Wlv3ZvO4hwt1hyYurHMW4J9uvb4irfc22K9vv3QvCx5utN0p9BPSPzsPq92Qt9QVRKmu2bAbuK%2FS4f9FsvXHS19GvlzvgVXGyKWpbNKh3uEflo9YTZ%2FnZvHcfCH8eZxtrtY2B7xd63CuCme67p6srmflfahUS5%2FoEXJPp974bZxujtG30FXC6yErwVOC%2Bzn59c5TYxll2Nu89aBpZ%2BcT%2FvN9TAQEffkAd%2Bk44MYkqMx7G62ppYQUZ8XKhGlgl7YKI76imrql1mOm2Qk6lZrpLZgW7mKXXE8Go5cUn7rBzmLCk48p%2BYbMo2BEnnO27YnI3MLABO9XiNJBWdkB%2FDsxfiAn0LTUjLaR1%2FhpuO0Fr2dlmUUsBD1m5D966i91Ld%2BRoX1H04eRnKZALr7PbKRWLFUw4BoE8TT8igTXBn3I%2BZPIjd1iyOoKOjDIzA%2Fr2IyXmnQVk5WnZM9A4sjp0wF0wnqwkekcRlhRIBakIwKjt4yWgJ3h6w9mrOJZLqDR6KwlZEZFdxWICkMS8IiDyCeUmfJW%2BLH2aCKatYlEQDiq1pf1RfwnHB1HAeKfSj5kIxi89ddkLN9LB8f4m%2BVxm%2BcvE2ST7ELXtzHxnIdd2W9R6miX%2FwpU8fdo0%2Fbhs%2F94snc3Qw4ynXtHqinL3Z1nCEuMODzcNZPADB9TCUgzejKCEqcOSVfVoMqOvkHOXV98injWFrKZM8zY6IKOWjxay2uuqRdu6aKQc8hUJSxqZ%2FECv3LCzHFixKpe0i369xqSZzE3Bl7F2MOcmdoKpvBibSd6TxpEVsGGvUksqkZX0j2OeYU3sNIGAnWpxMD1g4sUEf5eAy6%2BUdIDEuTFKVussWdUROcKypOacFt%2FiG0dWMvVop1o8GVlJtCcdYR3uEutZZXbp%2Bwi46nCZAScT53nE3qUjZGX3a2wkWIx7B3vUdUEmYiNymtTW2HmSwAOFmeoaLCVdDZTVE5ZIY6bMgJZdYU0jre37PbfjmRtpTzWgtayOoT8arcKT5WbpVlfHnbTm9fMpLoL5kee1Cqso9NaDf22EJVYb%2BgvP4O0e3M4tPbQ7iuA0LFPI6nX9kGkzmRvGpUEBwU1Twy98g%2Bpqbj5GVpsJNKfmxnFuUOcIt3bCEhAMfeDL4B1QbqbQRbviFGtT0y7igrE8ny3MUldW%2B7ekWXZn1vBMaK9gIFmtHexRXfWMbOsjrLGImbQ4WLETMvPzcN15cSGtgKxO04%2BYNpO5iHdcjnHLOb14Lb9dH%2FKGiOi9ccEoDDsanVrSEGGJAybOAxLSUlPcjh8so9fCCFK9MkydUlIvHlG3k5zTal6tR22HkJV%2FSG8FoeR27VHrj0p%2Bo2Qldk06rWEy42Uinswinqxekq7Lr5p0GOk4rbL7cNqFYTlircKzGr3F9C35oaimfhR1Ogf4dDPJSjINGp%2B02zBhSdAk5cH3DVshgHCWdBzpQFF0zEoyhazOcPUTBqZFVXI7FtcE81blnHbezbN91k%2BbN7Liz4eVFtXwX8LxvczEdZgYeMmZojo2XU8vjfc1qnNTc8SiwitCuYVm5pwGZHVQP02Epv9ARoihvJ8LdV2yUAlLHDeStBivOlPVRVGTlqlpF1HeEBHLLjQj53RBP5%2FlsR42jayIaPmmbtUXZoxCJywxrnNA9zKzUfsEMuNVl1T7xh56McwAFGUV0y4IZNTiiUX%2FknostYhcmL6MkdVWIrTseWmY%2FhRlRUFWIjsSwhLBHXlvGRHWmLS1FDNec0nNDZu0TE27KHbepB8lfUsWtpy4mFyjfmW%2Fzu%2FlNj1kElmxzNJkdA3l3LWN4lOqfWSEJcpk806HsM400qIR1TF4Mz1fCtBay0xNu6gVh7jXDzvnNNvHc%2BBoWSRzZtx9r9Y%2BISufcd1wzr232ja11gvlLWE5pYHhDKM2uAx%2BDafozZkB%2FsNyfldbfuHdfKpL3hCBjMoR88E%2FYeLnqsUhCfXkr%2Fp05RXkB6ZRe9tX8zm%2Bo4dNIivBJGqyEh2REpYoKOTcdRpm7ZEGYBazHsqu4vfX23kl7WLKIW%2BQmM6pV0Yc2zFj3VBP2%2FsL3W3nAvh2HG2s1yYi%2BoAkITdCWvP7%2BI%2BUo4cc4NR67YhjOyZ8LMqRVdHnSP8SFpXIsWPAW%2BL4WA%2BCO7480eeM3QzVWcjR9lr8CHLEPG%2BLaWkXmJjQam6ifF05px15vgDQGx3CibX0l1jXZXi%2Bg6VD3e7DzbAz8hFW0YnAIcJiMMzZH5BwCkMPjXbEoqeVj8HseTPJShJaj15fioiDMkYkD2ArIx3d1SAZ2fO2BD88VaqRPuJAbzKNrEBY3CyyEqibRliibLDH3SAOMlB2zeYq4x%2BbatIBpSNWQ1rFtAvTRlaSIxYsO0zExwRGSCvn3iB1jrmW4IIghp63pZr0rfY8z5U%2BAkLyVrctE6PgHiYsDu7pMnWiKG4qYYkD4iD7vAgMY3atkY4oHVI6ZrkgBWRlZtpFVTliJuecVkrfGiOrjSaRldy7cg83m6zk3mo6YYnSod62p9jnywwkrY2lSKuYI0bA7HKElsTyWrfOknwy0xLlJe9P8v9KkVZm9UjGgd5IhOlJjG8pm5mxX%2B5duYdLXY%2B6rCWEJU4VlrcVxHEBIGonmyVfOqZ0UOmoRZ0yk9mXHDHDyApEf1dPQutoGzJqN2aJbUBad%2FPhH6SOvpFLyCFJYDeKrHyoBXLvFvt3s49Ne0tYzrH5q%2Fki19FPGDVkBg744JUM51cO8%2BdMmskscQwjoTXbr28D%2BKvl%2BkUiyxn%2F5jv0BdL%2BbHLoU4n0oZzRjH0a6tLhHG0tV6UZ5S0nLHHSyNe9zYheC3SEmSNmYs5pC0ISuUqfsQdQC4Zy9GzkyiZREAvCEhszeT5PpggY9dp3EvCTdDmqHDHJOXUIdyUJi1TZWudcw6gwig1hiYNCWjT6%2Brfh9IeoAEuj3KhzxExMlDeinzB2g9X8wV7aERd%2FYkVYAoqJSaFxCXY9dkRNVkWbTEyUL%2FqW0OMu%2BCoTJ7ISHGNHWGKUictuJLTTaiZcU%2Bh2H2iG%2FZkB7ypi3AdANUOf1VEaAVlGKcwVSUprqa80loQlrpi6sFl9YWpBqybniBU9DHJOGQ9Z0ioi0txjVGu%2BheVFy%2BZhTeaALJIni%2BXJSp%2BT1bXXQ0ZA8j2bnCNW9EDy0nzClUblnBadi%2FlxbFXd0BeoDNPt2I6wik4Gs8QP6SHjJl4WHYzZUXLECFjSirSL8VBk%2B71FDDxMQMu23Bpvj%2Bnnzd5spV48YzvCKjokGz84pC4CI5K11It67FFmhLYuR2wi%2FkbmnE50Mi7fGS%2FKPRb1JithuBv7EVbRSVN3wy361%2BpjkCLl88JWpl2UwkDSnCTFBYSppa7bsgYRELKaoua2epfzar2I%2FQir6IgAKsDKNvLFMnsMCQHGvlbniJXzxMSc03K%2BNrtc7qUkkZXgk5gRVjGYwaJp2isEi6gVC%2B2xfgRGyaozDmkXlZyQVTAU9JOG5ZxWcjnSawyua9XUSI2qQnjiCEt8GttpZrMlrSoiXKFKnHLEKph5%2BJLNOT0MRUMnDN7uwe3c0kO7GxLUgsaJJCzByW6P1WBviVmOWLXe2PStapEqXU%2FIar%2FndjxzI%2B0pXSPepYl5hjURRvl1EOBlv7iJ1%2Bz3SRHYJTlitW6eManUJlQIbGY1H5LnZj81ITC2t2JiyUqcTewIqxgp2eJ9JnlPOqCyyxMX69pjgMAuHFLzwtoItlWY2pzT2pD3wVt3sXtp2LtX12ZF47UTO8Iqui4BOHTAXSABKZbZY2kEJO3CBLIS74Kk3ENqXuBTaXdt6REECnKPJJ2sxJ3Ej7CKMblwJU%2BfNk0%2FLqvUFMvs8QgCY2kX7ZLydKQ0%2BWdjOafDRDg9%2Bd5E4kHhl5667IUbyYhNX4whLAn12at46qA5Wb8AAAVoSURBVDuVfowIl0QS%2BoQKTUraRb3wBulbsm6%2BJa2jIGTGU69odYUpZCXOJf4v4fgISWD2ukpy0DaML0%2F1eYLSLuqNU5C%2BNVVdJMRcrwzT2sk9IPeCSWQlMTKKsMShbV00gp1KNmu1pDWWdrGpm4xf8cLmnB6h3KDv71SLg3vhSLERZ8YRlkSlsIK8gLQYDxsRpTqcSGLaRR1uHtVEiDnt6VssfX6nWhzcA0ehY8YXo55hHROS9awyu%2FR9BFx1zDWDC5KadhFWSIL0Lc%2FbEmwnH5bQBMhh4IHCTHUNlpJOgLl1mWg2YQkkzJTt1%2BtAuLYuhBLWKMlpF2FCnbqcU8a9gz3qOhBxmDjGTZb5hCWIp4S0kp52EfbNkZr0rZSQlfQPI59hHdPxiTj49WGsPeaaIQUmpF2EHYpUpG8x1qZhZFXsG%2BkYYRW9DfY%2B9FYToXdcUeJPTUm7iCoQpqZvMaOvkHOXR4VbHOWmY4Q1DnkJsAR6XFHST41Ju4gqECambzHznWkjK%2BkfqRthFW%2BKTH7kDiK6tfg9iUcTZzJHGQdT0rdGyarttiixiqvs1BKWBCQzoG8n5hVxDU4lu4SsZCaziZMDK%2Fnd6LXkp2%2FR7YM96guN4pDU9qkmLAlaJq9vJeI7khTAIO1CqSWWrOqL2vlruO0ErWULsUX1SWhNK2a6rZBTd7ZGezy0pu4Z1kTYpQMQUWIeXBZnMluymhjJ6r8H2CUsfUv6aNrJSiKc%2BhFWsZt3DuheZl5d%2FB7HYxpmMjcT98wKdjFLryfCkmbqrVWXz7hhKOcaOyWnFjwsYY1DqyPvLSPCGoohkQdk1a2uNn0m87hwNOc0xulbLFOeGV2WrI50BUtYR7AIztrz3rUOYV2sSCtFM5knhKM5X2OYCSFk5TOuG8659zYHhGRosYRVIk6ZAe8qMO6PBWmNzmTusiOrEoEKsyhGpCVkBcLVhW73gTBdNEFW6h%2B6lwpi0FEIVwNoada7THAdzLk3WLIqFaWQy%2BKTvqUtWZWPrR1hlccGHQPeEsfHehDcCtUiuZTmyYGRAFqD0Ey%2BRelbDM93sHSo203tOm6ThcmOsCogFHQcgqxeOlKhWuiXLFmFDmlNAkfTt7ip852CPkZYbMmqcqgsYVXGB4M97gb2WdaJbxJp0e2FXDrTLiYJRVMvBzFg%2FmIzlErfkj4mfa0Z%2BpKsw%2F4lrDJ6HX0jlzhEj4EwtcomNVezM5lrhizyBpFnQjAO%2BsxXDPW2PRW5MwYosIRVQxAzq0cycOhxIkyvoVlVVWUm86ZuZdIqElX5nYRKUZEWM%2FbD54WF5W2FJOAQBxstYdUYhfY8z3WgN4ZJWnYmc41BaEH10DMhGPs01KXDObI7ltcQT0tYNYBVrCqkpaCfBOH4Ylk9RzuTuR7UWtcmtEwIxj4fqnMoR8%2B2zptkaraEVWfcOvJ8AaA3OoQT6xFhZzLXg1rr2zSaCeEz9gBqgSWr%2BmJpCas%2B3IJWmTyfR9CbQDilRjGaCdfYmcw1ohaT6nWTFmM3Q3UWcrQ9Jq4kzgxLWA2GLNvHc0B6c9WkZScHNoh4PJpL%2BhYx7gOgqrRoF3yVGeylHVXWt9VKIGAJqwQotRYFpOVoedMzs2JbhgfCYjvfpiJKiblYQybELhxS8wZvpucT41xMDbUTR0MIjPxqakfN9X3%2BaVlxjN0%2B80JLVmURStwFmZVO4EWjz6VKmy%2B7cEvfsGRVGp9aS%2B0Iq1bEJqnfPqC7iP1bHNB7pCozXiOiVXuUk9%2FWRb%2BbpLm9nEAEZMPWNvJ7wSwr184K4g7%2BGZi%2BVsi59yTQJWty2hBoX8vvnt%2FP56bN77T7KzHvvJtnpx2HqPz%2F%2F6omxnsqyGCHAAAAAElFTkSuQmCC%22%2F%3E%20%20%3C%2Fdefs%3E%3C%2Fsvg%3E"; - -var _a$3; -var NETWORK_POLLING_INTERVALS = (_a$3 = {}, - _a$3[SupportedChainId.ARBITRUM_ONE] = ms__default["default"](templateObject_1$$ || (templateObject_1$$ = __makeTemplateObject(["1s"], ["1s"]))), - _a$3[SupportedChainId.ARBITRUM_RINKEBY] = ms__default["default"](templateObject_2$J || (templateObject_2$J = __makeTemplateObject(["1s"], ["1s"]))), - _a$3[SupportedChainId.OPTIMISM] = ms__default["default"](templateObject_3$B || (templateObject_3$B = __makeTemplateObject(["1s"], ["1s"]))), - _a$3[SupportedChainId.OPTIMISTIC_KOVAN] = ms__default["default"](templateObject_4$r || (templateObject_4$r = __makeTemplateObject(["1s"], ["1s"]))), - _a$3); -function getLibrary(provider) { - var library = new providers.Web3Provider(provider, typeof provider.chainId === 'number' - ? provider.chainId - : typeof provider.chainId === 'string' - ? parseInt(provider.chainId) - : 'any'); - library.pollingInterval = 15000; - library.detectNetwork().then(function (network) { - var networkPollingInterval = NETWORK_POLLING_INTERVALS[network.chainId]; - if (networkPollingInterval) { - console.debug('Setting polling interval', networkPollingInterval); - library.pollingInterval = networkPollingInterval; - } - }); - return library; -} -var templateObject_1$$, templateObject_2$J, templateObject_3$B, templateObject_4$r; - -var OVERLAY_READY = 'OVERLAY_READY'; -var CHAIN_ID_NETWORK_ARGUMENT = { - 1: undefined, - 3: 'ropsten', - 4: 'rinkeby', - 42: 'kovan', -}; -var FortmaticConnector = /** @class */ (function (_super) { - __extends(FortmaticConnector, _super); - function FortmaticConnector() { - return _super !== null && _super.apply(this, arguments) || this; - } - FortmaticConnector.prototype.activate = function () { - return __awaiter(this, void 0, void 0, function () { - var Fortmatic, _a, apiKey, chainId, provider, pollForOverlayReady, _b, account; - var _this = this; - return __generator(this, function (_c) { - switch (_c.label) { - case 0: - if (!!this.fortmatic) return [3 /*break*/, 2]; - return [4 /*yield*/, Promise.resolve().then(function () { return fortmatic$1; })]; - case 1: - Fortmatic = (_c.sent()).default; - _a = this, apiKey = _a.apiKey, chainId = _a.chainId; - if (chainId in CHAIN_ID_NETWORK_ARGUMENT) { - this.fortmatic = new Fortmatic(apiKey, CHAIN_ID_NETWORK_ARGUMENT[chainId]); - } - else { - throw new Error("Unsupported network ID: " + chainId); - } - _c.label = 2; - case 2: - provider = this.fortmatic.getProvider(); - pollForOverlayReady = new Promise(function (resolve) { - var interval = setInterval(function () { - if (provider.overlayReady) { - clearInterval(interval); - _this.emit(OVERLAY_READY); - resolve(); - } - }, 200); - }); - return [4 /*yield*/, Promise.all([ - provider.enable().then(function (accounts) { return accounts[0]; }), - pollForOverlayReady, - ])]; - case 3: - _b = __read.apply(void 0, [_c.sent(), 1]), account = _b[0]; - return [2 /*return*/, { provider: this.fortmatic.getProvider(), chainId: this.chainId, account: account }]; - } - }); - }); - }; - return FortmaticConnector; -}(fortmaticConnector.FortmaticConnector)); - -var RequestError = /** @class */ (function (_super) { - __extends(RequestError, _super); - function RequestError(message, code, data) { - var _this = _super.call(this, message) || this; - _this.code = code; - _this.data = data; - return _this; - } - return RequestError; -}(Error)); -var MiniRpcProvider = /** @class */ (function () { - function MiniRpcProvider(connector, chainId, url, batchWaitTimeMs) { - var _this = this; - this.isMetaMask = false; - this.nextId = 1; - this.batchTimeoutId = null; - this.batch = []; - this.clearBatch = function () { return __awaiter(_this, void 0, void 0, function () { - var batch, response, json, byKey, json_1, json_1_1, result, _a, resolve, reject, method; - var e_1, _b; - var _this = this; - var _c, _d, _e; - return __generator(this, function (_f) { - switch (_f.label) { - case 0: - console.debug('Clearing batch', this.batch); - batch = this.batch; - batch = batch.filter(function (b) { - if (b.request.method === 'wallet_switchEthereumChain') { - try { - _this.connector.changeChainId(parseInt(b.request.params[0].chainId)); - b.resolve({ id: b.request.id }); - } - catch (error) { - b.reject(error); - } - return false; - } - return true; - }); - this.batch = []; - this.batchTimeoutId = null; - _f.label = 1; - case 1: - _f.trys.push([1, 3, , 4]); - return [4 /*yield*/, fetch(this.url, { - method: 'POST', - headers: { 'content-type': 'application/json', accept: 'application/json' }, - body: JSON.stringify(batch.map(function (item) { return item.request; })), - })]; - case 2: - response = _f.sent(); - return [3 /*break*/, 4]; - case 3: - _f.sent(); - batch.forEach(function (_a) { - var reject = _a.reject; - return reject(new Error('Failed to send batch call')); - }); - return [2 /*return*/]; - case 4: - if (!response.ok) { - batch.forEach(function (_a) { - var reject = _a.reject; - return reject(new RequestError(response.status + ": " + response.statusText, -32000)); - }); - return [2 /*return*/]; - } - _f.label = 5; - case 5: - _f.trys.push([5, 7, , 8]); - return [4 /*yield*/, response.json()]; - case 6: - json = _f.sent(); - return [3 /*break*/, 8]; - case 7: - _f.sent(); - batch.forEach(function (_a) { - var reject = _a.reject; - return reject(new Error('Failed to parse JSON response')); - }); - return [2 /*return*/]; - case 8: - byKey = batch.reduce(function (memo, current) { - memo[current.request.id] = current; - return memo; - }, {}); - try { - for (json_1 = __values(json), json_1_1 = json_1.next(); !json_1_1.done; json_1_1 = json_1.next()) { - result = json_1_1.value; - _a = byKey[result.id], resolve = _a.resolve, reject = _a.reject, method = _a.request.method; - if ('error' in result) { - reject(new RequestError((_c = result === null || result === void 0 ? void 0 : result.error) === null || _c === void 0 ? void 0 : _c.message, (_d = result === null || result === void 0 ? void 0 : result.error) === null || _d === void 0 ? void 0 : _d.code, (_e = result === null || result === void 0 ? void 0 : result.error) === null || _e === void 0 ? void 0 : _e.data)); - } - else if ('result' in result && resolve) { - resolve(result.result); - } - else { - reject(new RequestError("Received unexpected JSON-RPC response to " + method + " request.", -32000, result)); - } - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (json_1_1 && !json_1_1.done && (_b = json_1.return)) _b.call(json_1); - } - finally { if (e_1) throw e_1.error; } - } - return [2 /*return*/]; - } - }); - }); }; - this.sendAsync = function (request, callback) { - _this.request(request.method, request.params) - .then(function (result) { return callback(null, { jsonrpc: '2.0', id: request.id, result: result }); }) - .catch(function (error) { return callback(error, null); }); - }; - this.request = function (method, params) { return __awaiter(_this, void 0, void 0, function () { - var promise; - var _this = this; - var _a; - return __generator(this, function (_b) { - if (typeof method !== 'string') { - return [2 /*return*/, this.request(method.method, method.params)]; - } - if (method === 'eth_chainId') { - return [2 /*return*/, "0x" + this.chainId.toString(16)]; - } - promise = new Promise(function (resolve, reject) { - _this.batch.push({ - request: { - jsonrpc: '2.0', - id: _this.nextId++, - method: method, - params: params, - }, - resolve: resolve, - reject: reject, - }); - }); - this.batchTimeoutId = (_a = this.batchTimeoutId) !== null && _a !== void 0 ? _a : setTimeout(this.clearBatch, this.batchWaitTimeMs); - return [2 /*return*/, promise]; - }); - }); }; - this.connector = connector; - this.chainId = chainId; - this.url = url; - var parsed = new URL(url); - this.host = parsed.host; - this.path = parsed.pathname; - // how long to wait to batch calls - this.batchWaitTimeMs = batchWaitTimeMs !== null && batchWaitTimeMs !== void 0 ? batchWaitTimeMs : 50; - } - return MiniRpcProvider; -}()); -var NetworkConnector = /** @class */ (function (_super) { - __extends(NetworkConnector, _super); - function NetworkConnector(_a) { - var urls = _a.urls, defaultChainId = _a.defaultChainId; - var _this = this; - invariant__default["default"](defaultChainId || Object.keys(urls).length === 1, 'defaultChainId is a required argument with >1 url'); - _this = _super.call(this, { supportedChainIds: Object.keys(urls).map(function (k) { return Number(k); }) }) || this; - _this.currentChainId = defaultChainId !== null && defaultChainId !== void 0 ? defaultChainId : Number(Object.keys(urls)[0]); - _this.providers = Object.keys(urls).reduce(function (accumulator, chainId) { - accumulator[Number(chainId)] = new MiniRpcProvider(_this, Number(chainId), urls[Number(chainId)]); - return accumulator; - }, {}); - return _this; - } - Object.defineProperty(NetworkConnector.prototype, "provider", { - get: function () { - return this.providers[this.currentChainId]; - }, - enumerable: false, - configurable: true - }); - NetworkConnector.prototype.activate = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, { provider: this.providers[this.currentChainId], chainId: this.currentChainId, account: null }]; - }); - }); - }; - NetworkConnector.prototype.getProvider = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, this.providers[this.currentChainId]]; - }); - }); - }; - NetworkConnector.prototype.getChainId = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, this.currentChainId]; - }); - }); - }; - NetworkConnector.prototype.getAccount = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, null]; - }); - }); - }; - NetworkConnector.prototype.deactivate = function () { - return; - }; - /** - * Meant to be called only by MiniRpcProvider - * @param chainId the new chain id - */ - NetworkConnector.prototype.changeChainId = function (chainId) { - if (chainId in this.providers) { - this.currentChainId = chainId; - this.emitUpdate({ - chainId: chainId, - account: null, - provider: this.providers[chainId], - }); - } - else { - throw new Error("Unsupported chain ID: " + chainId); - } - }; - return NetworkConnector; -}(abstractConnector.AbstractConnector)); - -var FORMATIC_KEY = process.env.REACT_APP_FORTMATIC_KEY; -var PORTIS_ID = process.env.REACT_APP_PORTIS_ID; -var network = new NetworkConnector({ - urls: INFURA_NETWORK_URLS, - defaultChainId: 1, -}); -var networkLibrary; -function getNetworkLibrary() { - return (networkLibrary = networkLibrary !== null && networkLibrary !== void 0 ? networkLibrary : getLibrary(network.provider)); -} -var injected = new injectedConnector.InjectedConnector({ - supportedChainIds: ALL_SUPPORTED_CHAIN_IDS, -}); -var gnosisSafe = new safeAppsWeb3React.SafeAppConnector(); -var walletconnect = new walletconnectConnector.WalletConnectConnector({ - supportedChainIds: ALL_SUPPORTED_CHAIN_IDS, - rpc: INFURA_NETWORK_URLS, - qrcode: true, -}); -// mainnet only -var fortmatic$2 = new FortmaticConnector({ - apiKey: FORMATIC_KEY !== null && FORMATIC_KEY !== void 0 ? FORMATIC_KEY : '', - chainId: 1, -}); -// mainnet only -var portis = new portisConnector.PortisConnector({ - dAppId: PORTIS_ID !== null && PORTIS_ID !== void 0 ? PORTIS_ID : '', - networks: [1], -}); -var walletlink = new walletlinkConnector.WalletLinkConnector({ - url: INFURA_NETWORK_URLS[SupportedChainId.MAINNET], - appName: 'Uniswap', - appLogoUrl: UNISWAP_LOGO_URL, - supportedChainIds: [SupportedChainId.MAINNET, SupportedChainId.POLYGON], -}); - -/* - https://github.com/banksean wrapped Makoto Matsumoto and Takuji Nishimura's code in a namespace - so it's better encapsulated. Now you can have multiple random number generators - and they won't stomp all over eachother's state. - - If you want to use this as a substitute for Math.random(), use the random() - method like so: - - var m = new MersenneTwister(); - var randomNumber = m.random(); - - You can also call the other genrand_{foo}() methods on the instance. - - If you want to use a specific seed in order to get a repeatable random - sequence, pass an integer into the constructor: - - var m = new MersenneTwister(123); - - and that will always produce the same random sequence. - - Sean McCullough (banksean@gmail.com) -*/ - -/* - A C-program for MT19937, with initialization improved 2002/1/26. - Coded by Takuji Nishimura and Makoto Matsumoto. - - Before using, initialize the state by using init_seed(seed) - or init_by_array(init_key, key_length). - - Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura, - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. The names of its contributors may not be used to endorse or promote - products derived from this software without specific prior written - permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - - Any feedback is very welcome. - http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html - email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space) -*/ - -var MersenneTwister$1 = function(seed) { - if (seed == undefined) { - seed = new Date().getTime(); - } - - /* Period parameters */ - this.N = 624; - this.M = 397; - this.MATRIX_A = 0x9908b0df; /* constant vector a */ - this.UPPER_MASK = 0x80000000; /* most significant w-r bits */ - this.LOWER_MASK = 0x7fffffff; /* least significant r bits */ - - this.mt = new Array(this.N); /* the array for the state vector */ - this.mti=this.N+1; /* mti==N+1 means mt[N] is not initialized */ - - if (seed.constructor == Array) { - this.init_by_array(seed, seed.length); - } - else { - this.init_seed(seed); - } -}; - -/* initializes mt[N] with a seed */ -/* origin name init_genrand */ -MersenneTwister$1.prototype.init_seed = function(s) { - this.mt[0] = s >>> 0; - for (this.mti=1; this.mti>> 30); - this.mt[this.mti] = (((((s & 0xffff0000) >>> 16) * 1812433253) << 16) + (s & 0x0000ffff) * 1812433253) - + this.mti; - /* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */ - /* In the previous versions, MSBs of the seed affect */ - /* only MSBs of the array mt[]. */ - /* 2002/01/09 modified by Makoto Matsumoto */ - this.mt[this.mti] >>>= 0; - /* for >32 bit machines */ - } -}; - -/* initialize by an array with array-length */ -/* init_key is the array for initializing keys */ -/* key_length is its length */ -/* slight change for C++, 2004/2/26 */ -MersenneTwister$1.prototype.init_by_array = function(init_key, key_length) { - var i, j, k; - this.init_seed(19650218); - i=1; j=0; - k = (this.N>key_length ? this.N : key_length); - for (; k; k--) { - var s = this.mt[i-1] ^ (this.mt[i-1] >>> 30); - this.mt[i] = (this.mt[i] ^ (((((s & 0xffff0000) >>> 16) * 1664525) << 16) + ((s & 0x0000ffff) * 1664525))) - + init_key[j] + j; /* non linear */ - this.mt[i] >>>= 0; /* for WORDSIZE > 32 machines */ - i++; j++; - if (i>=this.N) { this.mt[0] = this.mt[this.N-1]; i=1; } - if (j>=key_length) j=0; - } - for (k=this.N-1; k; k--) { - var s = this.mt[i-1] ^ (this.mt[i-1] >>> 30); - this.mt[i] = (this.mt[i] ^ (((((s & 0xffff0000) >>> 16) * 1566083941) << 16) + (s & 0x0000ffff) * 1566083941)) - - i; /* non linear */ - this.mt[i] >>>= 0; /* for WORDSIZE > 32 machines */ - i++; - if (i>=this.N) { this.mt[0] = this.mt[this.N-1]; i=1; } - } - - this.mt[0] = 0x80000000; /* MSB is 1; assuring non-zero initial array */ -}; - -/* generates a random number on [0,0xffffffff]-interval */ -/* origin name genrand_int32 */ -MersenneTwister$1.prototype.random_int = function() { - var y; - var mag01 = new Array(0x0, this.MATRIX_A); - /* mag01[x] = x * MATRIX_A for x=0,1 */ - - if (this.mti >= this.N) { /* generate N words at one time */ - var kk; - - if (this.mti == this.N+1) /* if init_seed() has not been called, */ - this.init_seed(5489); /* a default initial seed is used */ - - for (kk=0;kk>> 1) ^ mag01[y & 0x1]; - } - for (;kk>> 1) ^ mag01[y & 0x1]; - } - y = (this.mt[this.N-1]&this.UPPER_MASK)|(this.mt[0]&this.LOWER_MASK); - this.mt[this.N-1] = this.mt[this.M-1] ^ (y >>> 1) ^ mag01[y & 0x1]; - - this.mti = 0; - } - - y = this.mt[this.mti++]; - - /* Tempering */ - y ^= (y >>> 11); - y ^= (y << 7) & 0x9d2c5680; - y ^= (y << 15) & 0xefc60000; - y ^= (y >>> 18); - - return y >>> 0; -}; - -/* generates a random number on [0,0x7fffffff]-interval */ -/* origin name genrand_int31 */ -MersenneTwister$1.prototype.random_int31 = function() { - return (this.random_int()>>>1); -}; - -/* generates a random number on [0,1]-real-interval */ -/* origin name genrand_real1 */ -MersenneTwister$1.prototype.random_incl = function() { - return this.random_int()*(1.0/4294967295.0); - /* divided by 2^32-1 */ -}; - -/* generates a random number on [0,1)-real-interval */ -MersenneTwister$1.prototype.random = function() { - return this.random_int()*(1.0/4294967296.0); - /* divided by 2^32 */ -}; - -/* generates a random number on (0,1)-real-interval */ -/* origin name genrand_real3 */ -MersenneTwister$1.prototype.random_excl = function() { - return (this.random_int() + 0.5)*(1.0/4294967296.0); - /* divided by 2^32 */ -}; - -/* generates a random number on [0,1) with 53-bit resolution*/ -/* origin name genrand_res53 */ -MersenneTwister$1.prototype.random_long = function() { - var a=this.random_int()>>>5, b=this.random_int()>>>6; - return (a*67108864.0+b)*(1.0/9007199254740992.0); -}; - -/* These real versions are due to Isaku Wada, 2002/01/09 added */ - -var mersenneTwister = MersenneTwister$1; - -function newPaper(diameter, color) { - var container = document.createElement('div'); - container.style.borderRadius = '50px'; - container.style.overflow = 'hidden'; - container.style.padding = '0px'; - container.style.margin = '0px'; - container.style.width = '' + diameter + 'px'; - container.style.height = '' + diameter + 'px'; - container.style.display = 'inline-block'; - container.style.background = color; - return { - container: container, - } -} - -var paper = newPaper; - -var require$$0 = /*@__PURE__*/getAugmentedNamespace(clone__namespace); - -var require$$1 = /*@__PURE__*/getAugmentedNamespace(colorConvert__namespace); - -var require$$2 = /*@__PURE__*/getAugmentedNamespace(colorString__namespace); - -/* MIT license */ - -var clone = require$$0; -var convert = require$$1; -var string = require$$2; - -var Color$1 = function (obj) { - if (obj instanceof Color$1) { - return obj; - } - if (!(this instanceof Color$1)) { - return new Color$1(obj); - } - - this.values = { - rgb: [0, 0, 0], - hsl: [0, 0, 0], - hsv: [0, 0, 0], - hwb: [0, 0, 0], - cmyk: [0, 0, 0, 0], - alpha: 1 - }; - - // parse Color() argument - var vals; - if (typeof obj === 'string') { - vals = string.getRgba(obj); - if (vals) { - this.setValues('rgb', vals); - } else if (vals = string.getHsla(obj)) { - this.setValues('hsl', vals); - } else if (vals = string.getHwb(obj)) { - this.setValues('hwb', vals); - } else { - throw new Error('Unable to parse color from string "' + obj + '"'); - } - } else if (typeof obj === 'object') { - vals = obj; - if (vals.r !== undefined || vals.red !== undefined) { - this.setValues('rgb', vals); - } else if (vals.l !== undefined || vals.lightness !== undefined) { - this.setValues('hsl', vals); - } else if (vals.v !== undefined || vals.value !== undefined) { - this.setValues('hsv', vals); - } else if (vals.w !== undefined || vals.whiteness !== undefined) { - this.setValues('hwb', vals); - } else if (vals.c !== undefined || vals.cyan !== undefined) { - this.setValues('cmyk', vals); - } else { - throw new Error('Unable to parse color from object ' + JSON.stringify(obj)); - } - } -}; - -Color$1.prototype = { - rgb: function () { - return this.setSpace('rgb', arguments); - }, - hsl: function () { - return this.setSpace('hsl', arguments); - }, - hsv: function () { - return this.setSpace('hsv', arguments); - }, - hwb: function () { - return this.setSpace('hwb', arguments); - }, - cmyk: function () { - return this.setSpace('cmyk', arguments); - }, - - rgbArray: function () { - return this.values.rgb; - }, - hslArray: function () { - return this.values.hsl; - }, - hsvArray: function () { - return this.values.hsv; - }, - hwbArray: function () { - if (this.values.alpha !== 1) { - return this.values.hwb.concat([this.values.alpha]); - } - return this.values.hwb; - }, - cmykArray: function () { - return this.values.cmyk; - }, - rgbaArray: function () { - var rgb = this.values.rgb; - return rgb.concat([this.values.alpha]); - }, - rgbaArrayNormalized: function () { - var rgb = this.values.rgb; - var glRgba = []; - for (var i = 0; i < 3; i++) { - glRgba[i] = rgb[i] / 255; - } - glRgba.push(this.values.alpha); - return glRgba; - }, - hslaArray: function () { - var hsl = this.values.hsl; - return hsl.concat([this.values.alpha]); - }, - alpha: function (val) { - if (val === undefined) { - return this.values.alpha; - } - this.setValues('alpha', val); - return this; - }, - - red: function (val) { - return this.setChannel('rgb', 0, val); - }, - green: function (val) { - return this.setChannel('rgb', 1, val); - }, - blue: function (val) { - return this.setChannel('rgb', 2, val); - }, - hue: function (val) { - if (val) { - val %= 360; - val = val < 0 ? 360 + val : val; - } - return this.setChannel('hsl', 0, val); - }, - saturation: function (val) { - return this.setChannel('hsl', 1, val); - }, - lightness: function (val) { - return this.setChannel('hsl', 2, val); - }, - saturationv: function (val) { - return this.setChannel('hsv', 1, val); - }, - whiteness: function (val) { - return this.setChannel('hwb', 1, val); - }, - blackness: function (val) { - return this.setChannel('hwb', 2, val); - }, - value: function (val) { - return this.setChannel('hsv', 2, val); - }, - cyan: function (val) { - return this.setChannel('cmyk', 0, val); - }, - magenta: function (val) { - return this.setChannel('cmyk', 1, val); - }, - yellow: function (val) { - return this.setChannel('cmyk', 2, val); - }, - black: function (val) { - return this.setChannel('cmyk', 3, val); - }, - - hexString: function () { - return string.hexString(this.values.rgb); - }, - rgbString: function () { - return string.rgbString(this.values.rgb, this.values.alpha); - }, - rgbaString: function () { - return string.rgbaString(this.values.rgb, this.values.alpha); - }, - percentString: function () { - return string.percentString(this.values.rgb, this.values.alpha); - }, - hslString: function () { - return string.hslString(this.values.hsl, this.values.alpha); - }, - hslaString: function () { - return string.hslaString(this.values.hsl, this.values.alpha); - }, - hwbString: function () { - return string.hwbString(this.values.hwb, this.values.alpha); - }, - keyword: function () { - return string.keyword(this.values.rgb, this.values.alpha); - }, - - rgbNumber: function () { - return (this.values.rgb[0] << 16) | (this.values.rgb[1] << 8) | this.values.rgb[2]; - }, - - luminosity: function () { - // http://www.w3.org/TR/WCAG20/#relativeluminancedef - var rgb = this.values.rgb; - var lum = []; - for (var i = 0; i < rgb.length; i++) { - var chan = rgb[i] / 255; - lum[i] = (chan <= 0.03928) ? chan / 12.92 : Math.pow(((chan + 0.055) / 1.055), 2.4); - } - return 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2]; - }, - - contrast: function (color2) { - // http://www.w3.org/TR/WCAG20/#contrast-ratiodef - var lum1 = this.luminosity(); - var lum2 = color2.luminosity(); - if (lum1 > lum2) { - return (lum1 + 0.05) / (lum2 + 0.05); - } - return (lum2 + 0.05) / (lum1 + 0.05); - }, - - level: function (color2) { - var contrastRatio = this.contrast(color2); - if (contrastRatio >= 7.1) { - return 'AAA'; - } - - return (contrastRatio >= 4.5) ? 'AA' : ''; - }, - - dark: function () { - // YIQ equation from http://24ways.org/2010/calculating-color-contrast - var rgb = this.values.rgb; - var yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000; - return yiq < 128; - }, - - light: function () { - return !this.dark(); - }, - - negate: function () { - var rgb = []; - for (var i = 0; i < 3; i++) { - rgb[i] = 255 - this.values.rgb[i]; - } - this.setValues('rgb', rgb); - return this; - }, - - lighten: function (ratio) { - this.values.hsl[2] += this.values.hsl[2] * ratio; - this.setValues('hsl', this.values.hsl); - return this; - }, - - darken: function (ratio) { - this.values.hsl[2] -= this.values.hsl[2] * ratio; - this.setValues('hsl', this.values.hsl); - return this; - }, - - saturate: function (ratio) { - this.values.hsl[1] += this.values.hsl[1] * ratio; - this.setValues('hsl', this.values.hsl); - return this; - }, - - desaturate: function (ratio) { - this.values.hsl[1] -= this.values.hsl[1] * ratio; - this.setValues('hsl', this.values.hsl); - return this; - }, - - whiten: function (ratio) { - this.values.hwb[1] += this.values.hwb[1] * ratio; - this.setValues('hwb', this.values.hwb); - return this; - }, - - blacken: function (ratio) { - this.values.hwb[2] += this.values.hwb[2] * ratio; - this.setValues('hwb', this.values.hwb); - return this; - }, - - greyscale: function () { - var rgb = this.values.rgb; - // http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale - var val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11; - this.setValues('rgb', [val, val, val]); - return this; - }, - - clearer: function (ratio) { - this.setValues('alpha', this.values.alpha - (this.values.alpha * ratio)); - return this; - }, - - opaquer: function (ratio) { - this.setValues('alpha', this.values.alpha + (this.values.alpha * ratio)); - return this; - }, - - rotate: function (degrees) { - var hue = this.values.hsl[0]; - hue = (hue + degrees) % 360; - hue = hue < 0 ? 360 + hue : hue; - this.values.hsl[0] = hue; - this.setValues('hsl', this.values.hsl); - return this; - }, - - /** - * Ported from sass implementation in C - * https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209 - */ - mix: function (mixinColor, weight) { - var color1 = this; - var color2 = mixinColor; - var p = weight === undefined ? 0.5 : weight; - - var w = 2 * p - 1; - var a = color1.alpha() - color2.alpha(); - - var w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0; - var w2 = 1 - w1; - - return this - .rgb( - w1 * color1.red() + w2 * color2.red(), - w1 * color1.green() + w2 * color2.green(), - w1 * color1.blue() + w2 * color2.blue() - ) - .alpha(color1.alpha() * p + color2.alpha() * (1 - p)); - }, - - toJSON: function () { - return this.rgb(); - }, - - clone: function () { - var col = new Color$1(); - col.values = clone(this.values); - return col; - } -}; - -Color$1.prototype.getValues = function (space) { - var vals = {}; - - for (var i = 0; i < space.length; i++) { - vals[space.charAt(i)] = this.values[space][i]; - } - - if (this.values.alpha !== 1) { - vals.a = this.values.alpha; - } - - // {r: 255, g: 255, b: 255, a: 0.4} - return vals; -}; - -Color$1.prototype.setValues = function (space, vals) { - var spaces = { - rgb: ['red', 'green', 'blue'], - hsl: ['hue', 'saturation', 'lightness'], - hsv: ['hue', 'saturation', 'value'], - hwb: ['hue', 'whiteness', 'blackness'], - cmyk: ['cyan', 'magenta', 'yellow', 'black'] - }; - - var maxes = { - rgb: [255, 255, 255], - hsl: [360, 100, 100], - hsv: [360, 100, 100], - hwb: [360, 100, 100], - cmyk: [100, 100, 100, 100] - }; - - var i; - var alpha = 1; - if (space === 'alpha') { - alpha = vals; - } else if (vals.length) { - // [10, 10, 10] - this.values[space] = vals.slice(0, space.length); - alpha = vals[space.length]; - } else if (vals[space.charAt(0)] !== undefined) { - // {r: 10, g: 10, b: 10} - for (i = 0; i < space.length; i++) { - this.values[space][i] = vals[space.charAt(i)]; - } - - alpha = vals.a; - } else if (vals[spaces[space][0]] !== undefined) { - // {red: 10, green: 10, blue: 10} - var chans = spaces[space]; - - for (i = 0; i < space.length; i++) { - this.values[space][i] = vals[chans[i]]; - } - - alpha = vals.alpha; - } - - this.values.alpha = Math.max(0, Math.min(1, (alpha === undefined ? this.values.alpha : alpha))); - - if (space === 'alpha') { - return false; - } - - var capped; - - // cap values of the space prior converting all values - for (i = 0; i < space.length; i++) { - capped = Math.max(0, Math.min(maxes[space][i], this.values[space][i])); - this.values[space][i] = Math.round(capped); - } - - // convert to all the other color spaces - for (var sname in spaces) { - if (sname !== space) { - this.values[sname] = convert[space][sname](this.values[space]); - } - - // cap values - for (i = 0; i < sname.length; i++) { - capped = Math.max(0, Math.min(maxes[sname][i], this.values[sname][i])); - this.values[sname][i] = Math.round(capped); - } - } - - return true; -}; - -Color$1.prototype.setSpace = function (space, args) { - var vals = args[0]; - - if (vals === undefined) { - // color.rgb() - return this.getValues(space); - } - - // color.rgb(10, 10, 10) - if (typeof vals === 'number') { - vals = Array.prototype.slice.call(args); - } - - this.setValues(space, vals); - return this; -}; - -Color$1.prototype.setChannel = function (space, index, val) { - if (val === undefined) { - // color.red() - return this.values[space][index]; - } else if (val === this.values[space][index]) { - // color.red(color.red()) - return this; - } - - // color.red(100) - this.values[space][index] = val; - this.setValues(space, this.values[space]); - - return this; -}; - -var color = Color$1; - -var colors$1 = [ - '#01888C', // teal - '#FC7500', // bright orange - '#034F5D', // dark teal - '#F73F01', // orangered - '#FC1960', // magenta - '#C7144C', // raspberry - '#F3C100', // goldenrod - '#1598F2', // lightning blue - '#2465E1', // sail blue - '#F19E02', // gold -]; - -var MersenneTwister = mersenneTwister; -var paperGen = paper; -var Color = color; -var colors = colors$1; -var shapeCount = 4; -var svgns = 'http://www.w3.org/2000/svg'; - -var jazzicon = generateIdenticon; - -var generator; -function generateIdenticon(diameter, seed) { - generator = new MersenneTwister(seed); - var remainingColors = hueShift(colors.slice(), generator); - - var elements = paperGen(diameter, genColor(remainingColors)); - var container = elements.container; - - var svg = document.createElementNS(svgns, 'svg'); - svg.setAttributeNS(null, 'x', '0'); - svg.setAttributeNS(null, 'y', '0'); - svg.setAttributeNS(null, 'width', diameter); - svg.setAttributeNS(null, 'height', diameter); - - container.appendChild(svg); - - for(var i = 0; i < shapeCount - 1; i++) { - genShape(remainingColors, diameter, i, shapeCount - 1, svg); - } - - return container -} - -function genShape(remainingColors, diameter, i, total, svg) { - var center = diameter / 2; - - var shape = document.createElementNS(svgns, 'rect'); - shape.setAttributeNS(null, 'x', '0'); - shape.setAttributeNS(null, 'y', '0'); - shape.setAttributeNS(null, 'width', diameter); - shape.setAttributeNS(null, 'height', diameter); - - var firstRot = generator.random(); - var angle = Math.PI * 2 * firstRot; - var velocity = diameter / total * generator.random() + (i * diameter / total); - - var tx = (Math.cos(angle) * velocity); - var ty = (Math.sin(angle) * velocity); - - var translate = 'translate(' + tx + ' ' + ty + ')'; - - // Third random is a shape rotation on top of all of that. - var secondRot = generator.random(); - var rot = (firstRot * 360) + secondRot * 180; - var rotate = 'rotate(' + rot.toFixed(1) + ' ' + center + ' ' + center + ')'; - var transform = translate + ' ' + rotate; - shape.setAttributeNS(null, 'transform', transform); - var fill = genColor(remainingColors); - shape.setAttributeNS(null, 'fill', fill); - - svg.appendChild(shape); -} - -function genColor(colors) { - generator.random(); - var idx = Math.floor(colors.length * generator.random()); - var color = colors.splice(idx,1)[0]; - return color -} - -var wobble = 30; -function hueShift(colors, generator) { - var amount = (generator.random() * 30) - (wobble / 2); - return colors.map(function(hex) { - var color = Color(hex); - color.rotate(amount); - return color.hexString() - }) -} - -/** - * Returns the ENS avatar URI, if available. - * Spec: https://gist.github.com/Arachnid/9db60bd75277969ee1689c8742b75182. - */ -function useENSAvatar(address, enforceOwnership) { - if (enforceOwnership === void 0) { enforceOwnership = true; } - var debouncedAddress = useDebounce(address, 200); - var node = React.useMemo(function () { - if (!debouncedAddress || !isAddress(debouncedAddress)) - return undefined; - return hash.namehash(debouncedAddress.toLowerCase().substr(2) + ".addr.reverse"); - }, [debouncedAddress]); - var addressAvatar = useAvatarFromNode(node); - var ENSName = useENSName(address).ENSName; - var nameAvatar = useAvatarFromNode(ENSName === null ? undefined : safeNamehash(ENSName)); - var avatar = addressAvatar.avatar || nameAvatar.avatar; - var nftAvatar = useAvatarFromNFT(avatar, enforceOwnership); - avatar = nftAvatar.avatar || avatar; - var http = avatar && uriToHttp(avatar)[0]; - var changed = debouncedAddress !== address; - return React.useMemo(function () { return ({ - avatar: changed ? null : http !== null && http !== void 0 ? http : null, - loading: changed || addressAvatar.loading || nameAvatar.loading || nftAvatar.loading, - }); }, [addressAvatar.loading, changed, http, nameAvatar.loading, nftAvatar.loading]); -} -function useAvatarFromNode(node) { - var _a; - var nodeArgument = React.useMemo(function () { return [node]; }, [node]); - var textArgument = React.useMemo(function () { return [node, 'avatar']; }, [node]); - var registrarContract = useENSRegistrarContract(false); - var resolverAddress = useSingleCallResult(registrarContract, 'resolver', nodeArgument); - var resolverAddressResult = (_a = resolverAddress.result) === null || _a === void 0 ? void 0 : _a[0]; - var resolverContract = useENSResolverContract(resolverAddressResult && !isZero(resolverAddressResult) ? resolverAddressResult : undefined, false); - var avatar = useSingleCallResult(resolverContract, 'text', textArgument); - return React.useMemo(function () { - var _a; - return ({ - avatar: (_a = avatar.result) === null || _a === void 0 ? void 0 : _a[0], - loading: resolverAddress.loading || avatar.loading, - }); - }, [avatar.loading, avatar.result, resolverAddress.loading]); -} -function useAvatarFromNFT(nftUri, enforceOwnership) { - var _a, _b, _c, _d; - if (nftUri === void 0) { nftUri = ''; } - var parts = nftUri.toLowerCase().split(':'); - var protocol = parts[0]; - // ignore the chain from eip155 - // TODO: when we are able, pull only from the specified chain - var _e = __read((_b = (_a = parts[1]) === null || _a === void 0 ? void 0 : _a.split('/')) !== null && _b !== void 0 ? _b : [], 2), erc = _e[1]; - var _f = __read((_d = (_c = parts[2]) === null || _c === void 0 ? void 0 : _c.split('/')) !== null && _d !== void 0 ? _d : [], 2), contractAddress = _f[0], id = _f[1]; - var isERC721 = protocol === 'eip155' && erc === 'erc721'; - var isERC1155 = protocol === 'eip155' && erc === 'erc1155'; - var erc721 = useERC721Uri(isERC721 ? contractAddress : undefined, id, enforceOwnership); - var erc1155 = useERC1155Uri(isERC1155 ? contractAddress : undefined, id, enforceOwnership); - var uri = erc721.uri || erc1155.uri; - var http = uri && uriToHttp(uri)[0]; - var _g = __read(React.useState(false), 2), loading = _g[0], setLoading = _g[1]; - var _h = __read(React.useState(undefined), 2), avatar = _h[0], setAvatar = _h[1]; - React.useEffect(function () { - setAvatar(undefined); - if (http) { - setLoading(true); - fetch(http) - .then(function (res) { return res.json(); }) - .then(function (_a) { - var image = _a.image; - setAvatar(image); - }) - .catch(function (e) { return console.warn(e); }) - .finally(function () { - setLoading(false); - }); - } - }, [http]); - return React.useMemo(function () { return ({ avatar: avatar, loading: erc721.loading || erc1155.loading || loading }); }, [avatar, erc1155.loading, erc721.loading, loading]); -} -function useERC721Uri(contractAddress, id, enforceOwnership) { - var idArgument = React.useMemo(function () { return [id]; }, [id]); - var account = useActiveWeb3React().account; - var contract = useERC721Contract(contractAddress); - var owner = useSingleCallResult(contract, 'ownerOf', idArgument); - var uri = useSingleCallResult(contract, 'tokenURI', idArgument); - return React.useMemo(function () { - var _a, _b; - return ({ - uri: !enforceOwnership || account === ((_a = owner.result) === null || _a === void 0 ? void 0 : _a[0]) ? (_b = uri.result) === null || _b === void 0 ? void 0 : _b[0] : undefined, - loading: owner.loading || uri.loading, - }); - }, [account, enforceOwnership, owner.loading, owner.result, uri.loading, uri.result]); -} -function useERC1155Uri(contractAddress, id, enforceOwnership) { - var account = useActiveWeb3React().account; - var idArgument = React.useMemo(function () { return [id]; }, [id]); - var accountArgument = React.useMemo(function () { return [account || '', id]; }, [account, id]); - var contract = useERC1155Contract(contractAddress); - var balance = useSingleCallResult(contract, 'balanceOf', accountArgument); - var uri = useSingleCallResult(contract, 'uri', idArgument); - // ERC-1155 allows a generic {id} in the URL, so prepare to replace if relevant, - // in lowercase hexadecimal (with no 0x prefix) and leading zero padded to 64 hex characters. - var idHex = id ? bytes.hexZeroPad(bignumber.BigNumber.from(id).toHexString(), 32).substring(2) : id; - return React.useMemo(function () { - var _a, _b, _c; - return ({ - uri: !enforceOwnership || ((_a = balance.result) === null || _a === void 0 ? void 0 : _a[0]) > 0 ? (_c = (_b = uri.result) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.replaceAll('{id}', idHex) : undefined, - loading: balance.loading || uri.loading, - }); - }, [balance.loading, balance.result, enforceOwnership, uri.loading, uri.result, idHex]); -} - -var StyledIdenticon = styled__default["default"].div(templateObject_1$_ || (templateObject_1$_ = __makeTemplateObject(["\n height: 1rem;\n width: 1rem;\n border-radius: 1.125rem;\n background-color: ", ";\n font-size: initial;\n"], ["\n height: 1rem;\n width: 1rem;\n border-radius: 1.125rem;\n background-color: ", ";\n font-size: initial;\n"])), function (_a) { - var theme = _a.theme; - return theme.bg4; -}); -var StyledAvatar = styled__default["default"].img(templateObject_2$I || (templateObject_2$I = __makeTemplateObject(["\n height: inherit;\n width: inherit;\n border-radius: inherit;\n"], ["\n height: inherit;\n width: inherit;\n border-radius: inherit;\n"]))); -function Identicon() { - var account = useActiveWeb3React().account; - var avatar = useENSAvatar(account !== null && account !== void 0 ? account : undefined).avatar; - var _a = __read(React.useState(true), 2), fetchable = _a[0], setFetchable = _a[1]; - var icon = React.useMemo(function () { return account && jazzicon(16, parseInt(account.slice(2, 10), 16)); }, [account]); - var iconRef = React.useRef(null); - React.useLayoutEffect(function () { - var current = iconRef.current; - if (icon) { - current === null || current === void 0 ? void 0 : current.appendChild(icon); - return function () { - try { - current === null || current === void 0 ? void 0 : current.removeChild(icon); - } - catch (e) { - console.error('Avatar icon not found'); - } - }; - } - return; - }, [icon, iconRef]); - return (jsxRuntime.jsx(StyledIdenticon, { children: avatar && fetchable ? (jsxRuntime.jsx(StyledAvatar, { alt: "avatar", src: avatar, onError: function () { return setFetchable(false); } }, void 0)) : (jsxRuntime.jsx("span", { ref: iconRef }, void 0)) }, void 0)); -} -var templateObject_1$_, templateObject_2$I; - -function StatusIcon(_a) { - var connector = _a.connector; - switch (connector) { - case injected: - return jsxRuntime.jsx(Identicon, {}, void 0); - case walletconnect: - return jsxRuntime.jsx("img", { src: WALLETCONNECT_ICON_URL, alt: 'WalletConnect' }, void 0); - case walletlink: - return jsxRuntime.jsx("img", { src: COINBASE_ICON_URL, alt: 'Coinbase Wallet' }, void 0); - case fortmatic$2: - return jsxRuntime.jsx("img", { src: FORTMATIC_ICON_URL, alt: 'Fortmatic' }, void 0); - case portis: - return jsxRuntime.jsx("img", { src: PORTIS_ICON_URL, alt: 'Portis' }, void 0); - default: - return null; - } -} - -var MetaMaskLogo = "f89237c6bc3f84db.png"; - -var _line$2, _line2$1; - -function _extends$5() { _extends$5 = 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$5.apply(this, arguments); } - -var SvgX = function SvgX(props) { - return /*#__PURE__*/React__namespace.createElement("svg", _extends$5({ - xmlns: "http://www.w3.org/2000/svg", - width: 20, - height: 20, - viewBox: "0 0 20 20", - fill: "none", - stroke: "currentColor", - strokeWidth: 2, - strokeLinecap: "round", - strokeLinejoin: "round", - className: "feather feather-x" - }, props), _line$2 || (_line$2 = /*#__PURE__*/React__namespace.createElement("line", { - x1: 18, - y1: 6, - x2: 6, - y2: 18 - })), _line2$1 || (_line2$1 = /*#__PURE__*/React__namespace.createElement("line", { - x1: 6, - y1: 6, - x2: 18, - y2: 18 - }))); -}; - -var INJECTED_ICON_URL = "data:image/svg+xml,%3Csvg%20width%3D%2218%22%20height%3D%2218%22%20viewBox%3D%220%200%2018%2018%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M9.79261%2016.1108L17.5398%208.36364L9.79261%200.616477L8.25852%202.15057L13.3807%207.25568H0V9.47159H13.3807L8.25852%2014.5852L9.79261%2016.1108Z%22%20fill%3D%22%23333639%22%2F%3E%3C%2Fsvg%3E"; - -var SUPPORTED_WALLETS = { - INJECTED: { - connector: injected, - name: 'Injected', - iconURL: INJECTED_ICON_URL, - description: 'Injected web3 provider.', - href: null, - color: '#010101', - primary: true, - }, - METAMASK: { - connector: injected, - name: 'MetaMask', - iconURL: MetaMaskLogo, - description: 'Easy-to-use browser extension.', - href: null, - color: '#E8831D', - }, - WALLET_CONNECT: { - connector: walletconnect, - name: 'WalletConnect', - iconURL: WALLETCONNECT_ICON_URL, - description: 'Connect to Trust Wallet, Rainbow Wallet and more...', - href: null, - color: '#4196FC', - mobile: true, - }, - WALLET_LINK: { - connector: walletlink, - name: 'Coinbase Wallet', - iconURL: COINBASE_ICON_URL, - description: 'Use Coinbase Wallet app on mobile device', - href: null, - color: '#315CF5', - }, - COINBASE_LINK: { - name: 'Open in Coinbase Wallet', - iconURL: COINBASE_ICON_URL, - description: 'Open in Coinbase Wallet app.', - href: 'https://go.cb-w.com/mtUDhEZPy1', - color: '#315CF5', - mobile: true, - mobileOnly: true, - }, - FORTMATIC: { - connector: fortmatic$2, - name: 'Fortmatic', - iconURL: FORTMATIC_ICON_URL, - description: 'Login using Fortmatic hosted wallet', - href: null, - color: '#6748FF', - mobile: true, - }, - Portis: { - connector: portis, - name: 'Portis', - iconURL: PORTIS_ICON_URL, - description: 'Login using Portis hosted wallet', - href: null, - color: '#4A6C9B', - mobile: true, - }, -}; - -// modified from https://usehooks.com/usePrevious/ -function usePrevious(value) { - // The ref object is a generic container whose current property is mutable ... - // ... and can hold any value, similar to an instance property on a class - var ref = React.useRef(); - // Store current value in ref - React.useEffect(function () { - ref.current = value; - }, [value]); // Only re-run if value changes - // Return previous value (happens before update in useEffect above) - return ref.current; -} - -function useCopyClipboard(timeout) { - if (timeout === void 0) { timeout = 500; } - var _a = __read(React.useState(false), 2), isCopied = _a[0], setIsCopied = _a[1]; - var staticCopy = React.useCallback(function (text) { - var didCopy = copy__default["default"](text); - setIsCopied(didCopy); - }, []); - React.useEffect(function () { - if (isCopied) { - var hide_1 = setTimeout(function () { - setIsCopied(false); - }, timeout); - return function () { - clearTimeout(hide_1); - }; - } - return undefined; - }, [isCopied, setIsCopied, timeout]); - return [isCopied, staticCopy]; -} - -var CopyIcon = styled__default["default"](LinkStyledButton)(templateObject_1$Z || (templateObject_1$Z = __makeTemplateObject(["\n color: ", ";\n flex-shrink: 0;\n display: flex;\n text-decoration: none;\n font-size: 0.825rem;\n :hover,\n :active,\n :focus {\n text-decoration: none;\n color: ", ";\n }\n"], ["\n color: ", ";\n flex-shrink: 0;\n display: flex;\n text-decoration: none;\n font-size: 0.825rem;\n :hover,\n :active,\n :focus {\n text-decoration: none;\n color: ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.text3; -}, function (_a) { - var theme = _a.theme; - return theme.text2; -}); -var TransactionStatusText$1 = styled__default["default"].span(templateObject_2$H || (templateObject_2$H = __makeTemplateObject(["\n margin-left: 0.25rem;\n font-size: 0.825rem;\n ", ";\n align-items: center;\n"], ["\n margin-left: 0.25rem;\n font-size: 0.825rem;\n ", ";\n align-items: center;\n"])), function (_a) { - var theme = _a.theme; - return theme.flexRowNoWrap; -}); -function CopyHelper(props) { - var _a = __read(useCopyClipboard(), 2), isCopied = _a[0], setCopied = _a[1]; - return (jsxRuntime.jsxs(CopyIcon, __assign({ onClick: function () { return setCopied(props.toCopy); } }, { children: [isCopied ? (jsxRuntime.jsxs(TransactionStatusText$1, { children: [jsxRuntime.jsx(reactFeather.CheckCircle, { size: '16' }, void 0), jsxRuntime.jsx(TransactionStatusText$1, { children: jsxRuntime.jsx(macro.Trans, { children: "Copied" }, void 0) }, void 0)] }, void 0)) : (jsxRuntime.jsx(TransactionStatusText$1, { children: jsxRuntime.jsx(reactFeather.Copy, { size: '16' }, void 0) }, void 0)), isCopied ? '' : props.children] }), void 0)); -} -var templateObject_1$Z, templateObject_2$H; - -var VoteOption; -(function (VoteOption) { - VoteOption[VoteOption["Against"] = 0] = "Against"; - VoteOption[VoteOption["For"] = 1] = "For"; - VoteOption[VoteOption["Abstain"] = 2] = "Abstain"; -})(VoteOption || (VoteOption = {})); - -function formatAmount(amountRaw, decimals, sigFigs) { - return new sdkCore.Fraction(amountRaw, JSBI__default["default"].exponentiate(JSBI__default["default"].BigInt(10), JSBI__default["default"].BigInt(decimals))).toSignificant(sigFigs); -} -function FormattedCurrencyAmount(_a) { - var rawAmount = _a.rawAmount, symbol = _a.symbol, decimals = _a.decimals, sigFigs = _a.sigFigs; - return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [formatAmount(rawAmount, decimals, sigFigs), " ", symbol] }, void 0)); -} -function FormattedCurrencyAmountManaged(_a) { - var _b; - var rawAmount = _a.rawAmount, currencyId = _a.currencyId, _c = _a.sigFigs, sigFigs = _c === void 0 ? 6 : _c; - var currency = useCurrency(currencyId); - return currency ? (jsxRuntime.jsx(FormattedCurrencyAmount, { rawAmount: rawAmount, decimals: currency.decimals, sigFigs: sigFigs, symbol: (_b = currency.symbol) !== null && _b !== void 0 ? _b : '???' }, void 0)) : null; -} -function ClaimSummary(_a) { - var _b = _a.info, recipient = _b.recipient, uniAmountRaw = _b.uniAmountRaw; - var ENSName = useENSName().ENSName; - return typeof uniAmountRaw === 'string' ? (jsxRuntime.jsxs(macro.Trans, { children: ["Claim ", jsxRuntime.jsx(FormattedCurrencyAmount, { rawAmount: uniAmountRaw, symbol: 'UNI', decimals: 18, sigFigs: 4 }, void 0), " for", ' ', ENSName !== null && ENSName !== void 0 ? ENSName : recipient] }, void 0)) : (jsxRuntime.jsxs(macro.Trans, { children: ["Claim UNI reward for ", ENSName !== null && ENSName !== void 0 ? ENSName : recipient] }, void 0)); -} -function SubmitProposalTransactionSummary(_) { - return jsxRuntime.jsx(macro.Trans, { children: "Submit new proposal" }, void 0); -} -function ApprovalSummary(_a) { - var info = _a.info; - var token = useToken(info.tokenAddress); - return jsxRuntime.jsxs(macro.Trans, { children: ["Approve ", token === null || token === void 0 ? void 0 : token.symbol] }, void 0); -} -function VoteSummary(_a) { - var info = _a.info; - var proposalKey = info.governorAddress + "/" + info.proposalId; - if (info.reason && info.reason.trim().length > 0) { - switch (info.decision) { - case VoteOption.For: - return jsxRuntime.jsxs(macro.Trans, { children: ["Vote for proposal ", proposalKey] }, void 0); - case VoteOption.Abstain: - return jsxRuntime.jsxs(macro.Trans, { children: ["Vote to abstain on proposal ", proposalKey] }, void 0); - case VoteOption.Against: - return jsxRuntime.jsxs(macro.Trans, { children: ["Vote against proposal ", proposalKey] }, void 0); - } - } - else { - switch (info.decision) { - case VoteOption.For: - return (jsxRuntime.jsxs(macro.Trans, { children: ["Vote for proposal ", proposalKey, " with reason \"", info.reason, "\""] }, void 0)); - case VoteOption.Abstain: - return (jsxRuntime.jsxs(macro.Trans, { children: ["Vote to abstain on proposal ", proposalKey, " with reason \"", info.reason, "\""] }, void 0)); - case VoteOption.Against: - return (jsxRuntime.jsxs(macro.Trans, { children: ["Vote against proposal ", proposalKey, " with reason \"", info.reason, "\""] }, void 0)); - } - } -} -function DelegateSummary(_a) { - var delegatee = _a.info.delegatee; - var ENSName = useENSName(delegatee).ENSName; - return jsxRuntime.jsxs(macro.Trans, { children: ["Delegate voting power to ", ENSName !== null && ENSName !== void 0 ? ENSName : delegatee] }, void 0); -} -function WrapSummary(_a) { - var _b, _c, _d, _e, _f, _g; - var _h = _a.info, chainId = _h.chainId, currencyAmountRaw = _h.currencyAmountRaw, unwrapped = _h.unwrapped; - var native = chainId ? nativeOnChain(chainId) : undefined; - if (unwrapped) { - return (jsxRuntime.jsxs(macro.Trans, { children: ["Unwrap", ' ', jsxRuntime.jsx(FormattedCurrencyAmount, { rawAmount: currencyAmountRaw, symbol: (_c = (_b = native === null || native === void 0 ? void 0 : native.wrapped) === null || _b === void 0 ? void 0 : _b.symbol) !== null && _c !== void 0 ? _c : 'WETH', decimals: 18, sigFigs: 6 }, void 0), ' ', "to ", (_d = native === null || native === void 0 ? void 0 : native.symbol) !== null && _d !== void 0 ? _d : 'ETH'] }, void 0)); - } - else { - return (jsxRuntime.jsxs(macro.Trans, { children: ["Wrap", ' ', jsxRuntime.jsx(FormattedCurrencyAmount, { rawAmount: currencyAmountRaw, symbol: (_e = native === null || native === void 0 ? void 0 : native.symbol) !== null && _e !== void 0 ? _e : 'ETH', decimals: 18, sigFigs: 6 }, void 0), ' ', "to ", (_g = (_f = native === null || native === void 0 ? void 0 : native.wrapped) === null || _f === void 0 ? void 0 : _f.symbol) !== null && _g !== void 0 ? _g : 'WETH'] }, void 0)); - } -} -function DepositLiquidityStakingSummary(_) { - // not worth rendering the tokens since you can should no longer deposit liquidity in the staking contracts - // todo: deprecate and delete the code paths that allow this, show user more information - return jsxRuntime.jsx(macro.Trans, { children: "Deposit liquidity" }, void 0); -} -function WithdrawLiquidityStakingSummary(_) { - return jsxRuntime.jsx(macro.Trans, { children: "Withdraw deposited liquidity" }, void 0); -} -function MigrateLiquidityToV3Summary(_a) { - var _b = _a.info, baseCurrencyId = _b.baseCurrencyId, quoteCurrencyId = _b.quoteCurrencyId; - var baseCurrency = useCurrency(baseCurrencyId); - var quoteCurrency = useCurrency(quoteCurrencyId); - return (jsxRuntime.jsxs(macro.Trans, { children: ["Migrate ", baseCurrency === null || baseCurrency === void 0 ? void 0 : baseCurrency.symbol, "/", quoteCurrency === null || quoteCurrency === void 0 ? void 0 : quoteCurrency.symbol, " liquidity to V3"] }, void 0)); -} -function CreateV3PoolSummary(_a) { - var _b = _a.info, quoteCurrencyId = _b.quoteCurrencyId, baseCurrencyId = _b.baseCurrencyId; - var baseCurrency = useCurrency(baseCurrencyId); - var quoteCurrency = useCurrency(quoteCurrencyId); - return (jsxRuntime.jsxs(macro.Trans, { children: ["Create ", baseCurrency === null || baseCurrency === void 0 ? void 0 : baseCurrency.symbol, "/", quoteCurrency === null || quoteCurrency === void 0 ? void 0 : quoteCurrency.symbol, " V3 pool"] }, void 0)); -} -function CollectFeesSummary(_a) { - var _b = _a.info, currencyId0 = _b.currencyId0, currencyId1 = _b.currencyId1; - var currency0 = useCurrency(currencyId0); - var currency1 = useCurrency(currencyId1); - return (jsxRuntime.jsxs(macro.Trans, { children: ["Collect ", currency0 === null || currency0 === void 0 ? void 0 : currency0.symbol, "/", currency1 === null || currency1 === void 0 ? void 0 : currency1.symbol, " fees"] }, void 0)); -} -function RemoveLiquidityV3Summary(_a) { - var _b = _a.info, baseCurrencyId = _b.baseCurrencyId, quoteCurrencyId = _b.quoteCurrencyId, expectedAmountBaseRaw = _b.expectedAmountBaseRaw, expectedAmountQuoteRaw = _b.expectedAmountQuoteRaw; - return (jsxRuntime.jsxs(macro.Trans, { children: ["Remove", ' ', jsxRuntime.jsx(FormattedCurrencyAmountManaged, { rawAmount: expectedAmountBaseRaw, currencyId: baseCurrencyId, sigFigs: 3 }, void 0), " and", ' ', jsxRuntime.jsx(FormattedCurrencyAmountManaged, { rawAmount: expectedAmountQuoteRaw, currencyId: quoteCurrencyId, sigFigs: 3 }, void 0)] }, void 0)); -} -function AddLiquidityV3PoolSummary(_a) { - var _b = _a.info, createPool = _b.createPool, quoteCurrencyId = _b.quoteCurrencyId, baseCurrencyId = _b.baseCurrencyId; - var baseCurrency = useCurrency(baseCurrencyId); - var quoteCurrency = useCurrency(quoteCurrencyId); - return createPool ? (jsxRuntime.jsxs(macro.Trans, { children: ["Create pool and add ", baseCurrency === null || baseCurrency === void 0 ? void 0 : baseCurrency.symbol, "/", quoteCurrency === null || quoteCurrency === void 0 ? void 0 : quoteCurrency.symbol, " V3 liquidity"] }, void 0)) : (jsxRuntime.jsxs(macro.Trans, { children: ["Add ", baseCurrency === null || baseCurrency === void 0 ? void 0 : baseCurrency.symbol, "/", quoteCurrency === null || quoteCurrency === void 0 ? void 0 : quoteCurrency.symbol, " V3 liquidity"] }, void 0)); -} -function AddLiquidityV2PoolSummary(_a) { - var _b = _a.info, quoteCurrencyId = _b.quoteCurrencyId, expectedAmountBaseRaw = _b.expectedAmountBaseRaw, expectedAmountQuoteRaw = _b.expectedAmountQuoteRaw, baseCurrencyId = _b.baseCurrencyId; - return (jsxRuntime.jsxs(macro.Trans, { children: ["Add ", jsxRuntime.jsx(FormattedCurrencyAmountManaged, { rawAmount: expectedAmountBaseRaw, currencyId: baseCurrencyId, sigFigs: 3 }, void 0), ' ', "and ", jsxRuntime.jsx(FormattedCurrencyAmountManaged, { rawAmount: expectedAmountQuoteRaw, currencyId: quoteCurrencyId, sigFigs: 3 }, void 0), ' ', "to Uniswap V2"] }, void 0)); -} -function SwapSummary(_a) { - var info = _a.info; - if (info.tradeType === sdkCore.TradeType.EXACT_INPUT) { - return (jsxRuntime.jsxs(macro.Trans, { children: ["Swap exactly", ' ', jsxRuntime.jsx(FormattedCurrencyAmountManaged, { rawAmount: info.inputCurrencyAmountRaw, currencyId: info.inputCurrencyId, sigFigs: 6 }, void 0), ' ', "for", ' ', jsxRuntime.jsx(FormattedCurrencyAmountManaged, { rawAmount: info.expectedOutputCurrencyAmountRaw, currencyId: info.outputCurrencyId, sigFigs: 6 }, void 0)] }, void 0)); - } - else { - return (jsxRuntime.jsxs(macro.Trans, { children: ["Swap", ' ', jsxRuntime.jsx(FormattedCurrencyAmountManaged, { rawAmount: info.expectedInputCurrencyAmountRaw, currencyId: info.inputCurrencyId, sigFigs: 6 }, void 0), ' ', "for exactly", ' ', jsxRuntime.jsx(FormattedCurrencyAmountManaged, { rawAmount: info.outputCurrencyAmountRaw, currencyId: info.outputCurrencyId, sigFigs: 6 }, void 0)] }, void 0)); - } -} -function TransactionSummary(_a) { - var info = _a.info; - switch (info.type) { - case TransactionType.ADD_LIQUIDITY_V3_POOL: - return jsxRuntime.jsx(AddLiquidityV3PoolSummary, { info: info }, void 0); - case TransactionType.ADD_LIQUIDITY_V2_POOL: - return jsxRuntime.jsx(AddLiquidityV2PoolSummary, { info: info }, void 0); - case TransactionType.CLAIM: - return jsxRuntime.jsx(ClaimSummary, { info: info }, void 0); - case TransactionType.DEPOSIT_LIQUIDITY_STAKING: - return jsxRuntime.jsx(DepositLiquidityStakingSummary, { info: info }, void 0); - case TransactionType.WITHDRAW_LIQUIDITY_STAKING: - return jsxRuntime.jsx(WithdrawLiquidityStakingSummary, { info: info }, void 0); - case TransactionType.SWAP: - return jsxRuntime.jsx(SwapSummary, { info: info }, void 0); - case TransactionType.APPROVAL: - return jsxRuntime.jsx(ApprovalSummary, { info: info }, void 0); - case TransactionType.VOTE: - return jsxRuntime.jsx(VoteSummary, { info: info }, void 0); - case TransactionType.DELEGATE: - return jsxRuntime.jsx(DelegateSummary, { info: info }, void 0); - case TransactionType.WRAP: - return jsxRuntime.jsx(WrapSummary, { info: info }, void 0); - case TransactionType.CREATE_V3_POOL: - return jsxRuntime.jsx(CreateV3PoolSummary, { info: info }, void 0); - case TransactionType.MIGRATE_LIQUIDITY_V3: - return jsxRuntime.jsx(MigrateLiquidityToV3Summary, { info: info }, void 0); - case TransactionType.COLLECT_FEES: - return jsxRuntime.jsx(CollectFeesSummary, { info: info }, void 0); - case TransactionType.REMOVE_LIQUIDITY_V3: - return jsxRuntime.jsx(RemoveLiquidityV3Summary, { info: info }, void 0); - case TransactionType.SUBMIT_PROPOSAL: - return jsxRuntime.jsx(SubmitProposalTransactionSummary, { info: info }, void 0); - } -} - -var TransactionStatusText = styled__default["default"].div(templateObject_1$Y || (templateObject_1$Y = __makeTemplateObject(["\n margin-right: 0.5rem;\n display: flex;\n align-items: center;\n :hover {\n text-decoration: underline;\n }\n"], ["\n margin-right: 0.5rem;\n display: flex;\n align-items: center;\n :hover {\n text-decoration: underline;\n }\n"]))); -var TransactionState = styled__default["default"](ExternalLink)(templateObject_2$G || (templateObject_2$G = __makeTemplateObject(["\n display: flex;\n justify-content: space-between;\n align-items: center;\n text-decoration: none !important;\n border-radius: 0.5rem;\n padding: 0.25rem 0rem;\n font-weight: 500;\n font-size: 0.825rem;\n color: ", ";\n"], ["\n display: flex;\n justify-content: space-between;\n align-items: center;\n text-decoration: none !important;\n border-radius: 0.5rem;\n padding: 0.25rem 0rem;\n font-weight: 500;\n font-size: 0.825rem;\n color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.primary1; -}); -var IconWrapper$3 = styled__default["default"].div(templateObject_3$A || (templateObject_3$A = __makeTemplateObject(["\n color: ", ";\n"], ["\n color: ", ";\n"])), function (_a) { - var pending = _a.pending, success = _a.success, theme = _a.theme; - return (pending ? theme.primary1 : success ? theme.green1 : theme.red1); -}); -function Transaction(_a) { - var _b, _c; - var hash = _a.hash; - var chainId = useActiveWeb3React().chainId; - var allTransactions = useAllTransactions(); - var tx = allTransactions === null || allTransactions === void 0 ? void 0 : allTransactions[hash]; - var info = tx === null || tx === void 0 ? void 0 : tx.info; - var pending = !(tx === null || tx === void 0 ? void 0 : tx.receipt); - var success = !pending && tx && (((_b = tx.receipt) === null || _b === void 0 ? void 0 : _b.status) === 1 || typeof ((_c = tx.receipt) === null || _c === void 0 ? void 0 : _c.status) === 'undefined'); - if (!chainId) - return null; - return (jsxRuntime.jsx("div", { children: jsxRuntime.jsxs(TransactionState, __assign({ href: getExplorerLink(chainId, hash, ExplorerDataType.TRANSACTION), pending: pending, success: success }, { children: [jsxRuntime.jsx(RowFixed, { children: jsxRuntime.jsxs(TransactionStatusText, { children: [jsxRuntime.jsx(TransactionSummary, { info: info }, void 0), " \u2197"] }, void 0) }, void 0), jsxRuntime.jsx(IconWrapper$3, __assign({ pending: pending, success: success }, { children: pending ? jsxRuntime.jsx(Loader, {}, void 0) : success ? jsxRuntime.jsx(reactFeather.CheckCircle, { size: "16" }, void 0) : jsxRuntime.jsx(reactFeather.Triangle, { size: "16" }, void 0) }), void 0)] }), void 0) }, void 0)); -} -var templateObject_1$Y, templateObject_2$G, templateObject_3$A; - -var HeaderRow$1 = styled__default["default"].div(templateObject_2$F || (templateObject_2$F = __makeTemplateObject(["\n ", ";\n padding: 1rem 1rem;\n font-weight: 500;\n color: ", ";\n ", ";\n"], ["\n ", ";\n padding: 1rem 1rem;\n font-weight: 500;\n color: ", ";\n ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.flexRowNoWrap; -}, function (props) { return (props.color === 'blue' ? function (_a) { - var theme = _a.theme; - return theme.primary1; -} : 'inherit'); }, function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToMedium(templateObject_1$X || (templateObject_1$X = __makeTemplateObject(["\n padding: 1rem;\n "], ["\n padding: 1rem;\n "]))); -}); -var UpperSection$1 = styled__default["default"].div(templateObject_3$z || (templateObject_3$z = __makeTemplateObject(["\n position: relative;\n\n h5 {\n margin: 0;\n margin-bottom: 0.5rem;\n font-size: 1rem;\n font-weight: 400;\n }\n\n h5:last-child {\n margin-bottom: 0px;\n }\n\n h4 {\n margin-top: 0;\n font-weight: 500;\n }\n"], ["\n position: relative;\n\n h5 {\n margin: 0;\n margin-bottom: 0.5rem;\n font-size: 1rem;\n font-weight: 400;\n }\n\n h5:last-child {\n margin-bottom: 0px;\n }\n\n h4 {\n margin-top: 0;\n font-weight: 500;\n }\n"]))); -var InfoCard$1 = styled__default["default"].div(templateObject_4$q || (templateObject_4$q = __makeTemplateObject(["\n padding: 1rem;\n border: 1px solid ", ";\n border-radius: 20px;\n position: relative;\n display: grid;\n grid-row-gap: 12px;\n margin-bottom: 20px;\n"], ["\n padding: 1rem;\n border: 1px solid ", ";\n border-radius: 20px;\n position: relative;\n display: grid;\n grid-row-gap: 12px;\n margin-bottom: 20px;\n"])), function (_a) { - var theme = _a.theme; - return theme.bg3; -}); -var AccountGroupingRow = styled__default["default"].div(templateObject_5$m || (templateObject_5$m = __makeTemplateObject(["\n ", ";\n justify-content: space-between;\n align-items: center;\n font-weight: 400;\n color: ", ";\n\n div {\n ", "\n align-items: center;\n }\n"], ["\n ", ";\n justify-content: space-between;\n align-items: center;\n font-weight: 400;\n color: ", ";\n\n div {\n ", "\n align-items: center;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.flexRowNoWrap; -}, function (_a) { - var theme = _a.theme; - return theme.text1; -}, function (_a) { - var theme = _a.theme; - return theme.flexRowNoWrap; -}); -var AccountSection = styled__default["default"].div(templateObject_7$e || (templateObject_7$e = __makeTemplateObject(["\n padding: 0rem 1rem;\n ", ";\n"], ["\n padding: 0rem 1rem;\n ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToMedium(templateObject_6$h || (templateObject_6$h = __makeTemplateObject(["padding: 0rem 1rem 1.5rem 1rem;"], ["padding: 0rem 1rem 1.5rem 1rem;"]))); -}); -var YourAccount = styled__default["default"].div(templateObject_8$c || (templateObject_8$c = __makeTemplateObject(["\n h5 {\n margin: 0 0 1rem 0;\n font-weight: 400;\n }\n\n h4 {\n margin: 0;\n font-weight: 500;\n }\n"], ["\n h5 {\n margin: 0 0 1rem 0;\n font-weight: 400;\n }\n\n h4 {\n margin: 0;\n font-weight: 500;\n }\n"]))); -var LowerSection = styled__default["default"].div(templateObject_9$b || (templateObject_9$b = __makeTemplateObject(["\n ", "\n padding: 1.5rem;\n flex-grow: 1;\n overflow: auto;\n background-color: ", ";\n border-bottom-left-radius: 20px;\n border-bottom-right-radius: 20px;\n\n h5 {\n margin: 0;\n font-weight: 400;\n color: ", ";\n }\n"], ["\n ", "\n padding: 1.5rem;\n flex-grow: 1;\n overflow: auto;\n background-color: ", ";\n border-bottom-left-radius: 20px;\n border-bottom-right-radius: 20px;\n\n h5 {\n margin: 0;\n font-weight: 400;\n color: ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.flexColumnNoWrap; -}, function (_a) { - var theme = _a.theme; - return theme.bg2; -}, function (_a) { - var theme = _a.theme; - return theme.text3; -}); -var AccountControl = styled__default["default"].div(templateObject_10$8 || (templateObject_10$8 = __makeTemplateObject(["\n display: flex;\n justify-content: space-between;\n min-width: 0;\n width: 100%;\n\n font-weight: 500;\n font-size: 1.25rem;\n\n a:hover {\n text-decoration: underline;\n }\n\n p {\n min-width: 0;\n margin: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n"], ["\n display: flex;\n justify-content: space-between;\n min-width: 0;\n width: 100%;\n\n font-weight: 500;\n font-size: 1.25rem;\n\n a:hover {\n text-decoration: underline;\n }\n\n p {\n min-width: 0;\n margin: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n"]))); -var AddressLink = styled__default["default"](ExternalLink)(templateObject_11$6 || (templateObject_11$6 = __makeTemplateObject(["\n font-size: 0.825rem;\n color: ", ";\n margin-left: 1rem;\n font-size: 0.825rem;\n display: flex;\n :hover {\n color: ", ";\n }\n"], ["\n font-size: 0.825rem;\n color: ", ";\n margin-left: 1rem;\n font-size: 0.825rem;\n display: flex;\n :hover {\n color: ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.text3; -}, function (_a) { - var theme = _a.theme; - return theme.text2; -}); -var CloseIcon$1 = styled__default["default"].div(templateObject_12$6 || (templateObject_12$6 = __makeTemplateObject(["\n position: absolute;\n right: 1rem;\n top: 14px;\n &:hover {\n cursor: pointer;\n opacity: 0.6;\n }\n"], ["\n position: absolute;\n right: 1rem;\n top: 14px;\n &:hover {\n cursor: pointer;\n opacity: 0.6;\n }\n"]))); -var CloseColor$1 = styled__default["default"](SvgX)(templateObject_13$2 || (templateObject_13$2 = __makeTemplateObject(["\n path {\n stroke: ", ";\n }\n"], ["\n path {\n stroke: ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.text4; -}); -var WalletName = styled__default["default"].div(templateObject_14$2 || (templateObject_14$2 = __makeTemplateObject(["\n width: initial;\n font-size: 0.825rem;\n font-weight: 500;\n color: ", ";\n"], ["\n width: initial;\n font-size: 0.825rem;\n font-weight: 500;\n color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.text3; -}); -var IconWrapper$2 = styled__default["default"].div(templateObject_16$1 || (templateObject_16$1 = __makeTemplateObject(["\n ", ";\n align-items: center;\n justify-content: center;\n margin-right: 8px;\n & > img,\n span {\n height: ", ";\n width: ", ";\n }\n ", ";\n"], ["\n ", ";\n align-items: center;\n justify-content: center;\n margin-right: 8px;\n & > img,\n span {\n height: ", ";\n width: ", ";\n }\n ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.flexColumnNoWrap; -}, function (_a) { - var size = _a.size; - return (size ? size + 'px' : '32px'); -}, function (_a) { - var size = _a.size; - return (size ? size + 'px' : '32px'); -}, function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToMedium(templateObject_15$1 || (templateObject_15$1 = __makeTemplateObject(["\n align-items: flex-end;\n "], ["\n align-items: flex-end;\n "]))); -}); -function WrappedStatusIcon$1(_a) { - var connector = _a.connector; - return (jsxRuntime.jsxs(IconWrapper$2, __assign({ size: 16 }, { children: [jsxRuntime.jsx(StatusIcon, { connector: connector }, void 0), connector === portis && (jsxRuntime.jsx(MainWalletAction, __assign({ onClick: function () { - portis.portis.showPortis(); - } }, { children: jsxRuntime.jsx(macro.Trans, { children: "Show Portis" }, void 0) }), void 0))] }), void 0)); -} -var TransactionListWrapper = styled__default["default"].div(templateObject_17$1 || (templateObject_17$1 = __makeTemplateObject(["\n ", ";\n"], ["\n ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.flexColumnNoWrap; -}); -var WalletAction = styled__default["default"](ButtonSecondary)(templateObject_18$1 || (templateObject_18$1 = __makeTemplateObject(["\n width: fit-content;\n font-weight: 400;\n margin-left: 8px;\n font-size: 0.825rem;\n padding: 4px 6px;\n :hover {\n cursor: pointer;\n text-decoration: underline;\n }\n"], ["\n width: fit-content;\n font-weight: 400;\n margin-left: 8px;\n font-size: 0.825rem;\n padding: 4px 6px;\n :hover {\n cursor: pointer;\n text-decoration: underline;\n }\n"]))); -var MainWalletAction = styled__default["default"](WalletAction)(templateObject_19$1 || (templateObject_19$1 = __makeTemplateObject(["\n color: ", ";\n"], ["\n color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.primary1; -}); -function renderTransactions(transactions) { - return (jsxRuntime.jsx(TransactionListWrapper, { children: transactions.map(function (hash, i) { - return jsxRuntime.jsx(Transaction, { hash: hash }, i); - }) }, void 0)); -} -function AccountDetails(_a) { - var toggleWalletModal = _a.toggleWalletModal, pendingTransactions = _a.pendingTransactions, confirmedTransactions = _a.confirmedTransactions, ENSName = _a.ENSName, openOptions = _a.openOptions; - var _b = useActiveWeb3React(), chainId = _b.chainId, account = _b.account, connector = _b.connector; - var theme = React.useContext(styled.ThemeContext); - var dispatch = useAppDispatch(); - function formatConnectorName() { - var ethereum = window.ethereum; - var isMetaMask = !!(ethereum && ethereum.isMetaMask); - var name = Object.keys(SUPPORTED_WALLETS) - .filter(function (k) { - return SUPPORTED_WALLETS[k].connector === connector && (connector !== injected || isMetaMask === (k === 'METAMASK')); - }) - .map(function (k) { return SUPPORTED_WALLETS[k].name; })[0]; - return (jsxRuntime.jsx(WalletName, { children: jsxRuntime.jsxs(macro.Trans, { children: ["Connected with ", name] }, void 0) }, void 0)); - } - var clearAllTransactionsCallback = React.useCallback(function () { - if (chainId) - dispatch(clearAllTransactions({ chainId: chainId })); - }, [dispatch, chainId]); - return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs(UpperSection$1, { children: [jsxRuntime.jsx(CloseIcon$1, __assign({ onClick: toggleWalletModal }, { children: jsxRuntime.jsx(CloseColor$1, {}, void 0) }), void 0), jsxRuntime.jsx(HeaderRow$1, { children: jsxRuntime.jsx(macro.Trans, { children: "Account" }, void 0) }, void 0), jsxRuntime.jsx(AccountSection, { children: jsxRuntime.jsx(YourAccount, { children: jsxRuntime.jsxs(InfoCard$1, { children: [jsxRuntime.jsxs(AccountGroupingRow, { children: [formatConnectorName(), jsxRuntime.jsxs("div", { children: [connector !== injected && connector !== walletlink && (jsxRuntime.jsx(WalletAction, __assign({ style: { fontSize: '.825rem', fontWeight: 400, marginRight: '8px' }, onClick: function () { - connector.close(); - } }, { children: jsxRuntime.jsx(macro.Trans, { children: "Disconnect" }, void 0) }), void 0)), jsxRuntime.jsx(WalletAction, __assign({ style: { fontSize: '.825rem', fontWeight: 400 }, onClick: function () { - openOptions(); - } }, { children: jsxRuntime.jsx(macro.Trans, { children: "Change" }, void 0) }), void 0)] }, void 0)] }, void 0), jsxRuntime.jsx(AccountGroupingRow, __assign({ id: "web3-account-identifier-row" }, { children: jsxRuntime.jsx(AccountControl, { children: ENSName ? (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs("div", { children: [connector && jsxRuntime.jsx(WrappedStatusIcon$1, { connector: connector }, void 0), jsxRuntime.jsxs("p", { children: [" ", ENSName] }, void 0)] }, void 0) }, void 0)) : (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs("div", { children: [connector && jsxRuntime.jsx(WrappedStatusIcon$1, { connector: connector }, void 0), jsxRuntime.jsxs("p", { children: [" ", account && shortenAddress(account)] }, void 0)] }, void 0) }, void 0)) }, void 0) }), void 0), jsxRuntime.jsx(AccountGroupingRow, { children: ENSName ? (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsx(AccountControl, { children: jsxRuntime.jsxs("div", { children: [account && (jsxRuntime.jsx(CopyHelper, __assign({ toCopy: account }, { children: jsxRuntime.jsx("span", __assign({ style: { marginLeft: '4px' } }, { children: jsxRuntime.jsx(macro.Trans, { children: "Copy Address" }, void 0) }), void 0) }), void 0)), chainId && account && (jsxRuntime.jsxs(AddressLink, __assign({ hasENS: !!ENSName, isENS: true, href: getExplorerLink(chainId, ENSName, ExplorerDataType.ADDRESS) }, { children: [jsxRuntime.jsx(reactFeather.ExternalLink, { size: 16 }, void 0), jsxRuntime.jsx("span", __assign({ style: { marginLeft: '4px' } }, { children: jsxRuntime.jsx(macro.Trans, { children: "View on Explorer" }, void 0) }), void 0)] }), void 0))] }, void 0) }, void 0) }, void 0)) : (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsx(AccountControl, { children: jsxRuntime.jsxs("div", { children: [account && (jsxRuntime.jsx(CopyHelper, __assign({ toCopy: account }, { children: jsxRuntime.jsx("span", __assign({ style: { marginLeft: '4px' } }, { children: jsxRuntime.jsx(macro.Trans, { children: "Copy Address" }, void 0) }), void 0) }), void 0)), chainId && account && (jsxRuntime.jsxs(AddressLink, __assign({ hasENS: !!ENSName, isENS: false, href: getExplorerLink(chainId, account, ExplorerDataType.ADDRESS) }, { children: [jsxRuntime.jsx(reactFeather.ExternalLink, { size: 16 }, void 0), jsxRuntime.jsx("span", __assign({ style: { marginLeft: '4px' } }, { children: jsxRuntime.jsx(macro.Trans, { children: "View on Explorer" }, void 0) }), void 0)] }), void 0))] }, void 0) }, void 0) }, void 0)) }, void 0)] }, void 0) }, void 0) }, void 0)] }, void 0), !!pendingTransactions.length || !!confirmedTransactions.length ? (jsxRuntime.jsxs(LowerSection, { children: [jsxRuntime.jsxs(AutoRow, __assign({ mb: '1rem', style: { justifyContent: 'space-between' } }, { children: [jsxRuntime.jsx(ThemedText.Body, { children: jsxRuntime.jsx(macro.Trans, { children: "Recent Transactions" }, void 0) }, void 0), jsxRuntime.jsx(LinkStyledButton, __assign({ onClick: clearAllTransactionsCallback }, { children: jsxRuntime.jsx(macro.Trans, { children: "(clear all)" }, void 0) }), void 0)] }), void 0), renderTransactions(pendingTransactions), renderTransactions(confirmedTransactions)] }, void 0)) : (jsxRuntime.jsx(LowerSection, { children: jsxRuntime.jsx(ThemedText.Body, __assign({ color: theme.text1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Your transactions will appear here..." }, void 0) }), void 0) }, void 0))] }, void 0)); -} -var templateObject_1$X, templateObject_2$F, templateObject_3$z, templateObject_4$q, templateObject_5$m, templateObject_6$h, templateObject_7$e, templateObject_8$c, templateObject_9$b, templateObject_10$8, templateObject_11$6, templateObject_12$6, templateObject_13$2, templateObject_14$2, templateObject_15$1, templateObject_16$1, templateObject_17$1, templateObject_18$1, templateObject_19$1; - -var InfoCard = styled__default["default"].button(templateObject_1$W || (templateObject_1$W = __makeTemplateObject(["\n background-color: ", ";\n padding: 1rem;\n outline: none;\n border: 1px solid;\n border-radius: 12px;\n width: 100% !important;\n &:focus {\n box-shadow: 0 0 0 1px ", ";\n }\n border-color: ", ";\n"], ["\n background-color: ", ";\n padding: 1rem;\n outline: none;\n border: 1px solid;\n border-radius: 12px;\n width: 100% !important;\n &:focus {\n box-shadow: 0 0 0 1px ", ";\n }\n border-color: ", ";\n"])), function (_a) { - var theme = _a.theme, active = _a.active; - return (active ? theme.bg3 : theme.bg2); -}, function (_a) { - var theme = _a.theme; - return theme.primary1; -}, function (_a) { - var theme = _a.theme, active = _a.active; - return (active ? 'transparent' : theme.bg3); -}); -var OptionCard = styled__default["default"](InfoCard)(templateObject_2$E || (templateObject_2$E = __makeTemplateObject(["\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n margin-top: 2rem;\n padding: 1rem;\n"], ["\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n margin-top: 2rem;\n padding: 1rem;\n"]))); -var OptionCardLeft = styled__default["default"].div(templateObject_3$y || (templateObject_3$y = __makeTemplateObject(["\n ", ";\n justify-content: center;\n height: 100%;\n"], ["\n ", ";\n justify-content: center;\n height: 100%;\n"])), function (_a) { - var theme = _a.theme; - return theme.flexColumnNoWrap; -}); -var OptionCardClickable = styled__default["default"](OptionCard)(templateObject_4$p || (templateObject_4$p = __makeTemplateObject(["\n margin-top: 0;\n &:hover {\n cursor: ", ";\n border: ", ";\n }\n opacity: ", ";\n"], ["\n margin-top: 0;\n &:hover {\n cursor: ", ";\n border: ", ";\n }\n opacity: ", ";\n"])), function (_a) { - var clickable = _a.clickable; - return (clickable ? 'pointer' : ''); -}, function (_a) { - var clickable = _a.clickable, theme = _a.theme; - return (clickable ? "1px solid " + theme.primary1 : ""); -}, function (_a) { - var disabled = _a.disabled; - return (disabled ? '0.5' : '1'); -}); -var GreenCircle = styled__default["default"].div(templateObject_5$l || (templateObject_5$l = __makeTemplateObject(["\n ", "\n justify-content: center;\n align-items: center;\n\n &:first-child {\n height: 8px;\n width: 8px;\n margin-right: 8px;\n background-color: ", ";\n border-radius: 50%;\n }\n"], ["\n ", "\n justify-content: center;\n align-items: center;\n\n &:first-child {\n height: 8px;\n width: 8px;\n margin-right: 8px;\n background-color: ", ";\n border-radius: 50%;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.flexRowNoWrap; -}, function (_a) { - var theme = _a.theme; - return theme.green1; -}); -var CircleWrapper = styled__default["default"].div(templateObject_6$g || (templateObject_6$g = __makeTemplateObject(["\n color: ", ";\n display: flex;\n justify-content: center;\n align-items: center;\n"], ["\n color: ", ";\n display: flex;\n justify-content: center;\n align-items: center;\n"])), function (_a) { - var theme = _a.theme; - return theme.green1; -}); -var HeaderText = styled__default["default"].div(templateObject_7$d || (templateObject_7$d = __makeTemplateObject(["\n ", ";\n color: ", ";\n font-size: 1rem;\n font-weight: 500;\n"], ["\n ", ";\n color: ", ";\n font-size: 1rem;\n font-weight: 500;\n"])), function (_a) { - var theme = _a.theme; - return theme.flexRowNoWrap; -}, function (props) { return (props.color === 'blue' ? function (_a) { - var theme = _a.theme; - return theme.primary1; -} : function (_a) { - var theme = _a.theme; - return theme.text1; -}); }); -var SubHeader = styled__default["default"].div(templateObject_8$b || (templateObject_8$b = __makeTemplateObject(["\n color: ", ";\n margin-top: 10px;\n font-size: 12px;\n"], ["\n color: ", ";\n margin-top: 10px;\n font-size: 12px;\n"])), function (_a) { - var theme = _a.theme; - return theme.text1; -}); -var IconWrapper$1 = styled__default["default"].div(templateObject_10$7 || (templateObject_10$7 = __makeTemplateObject(["\n ", ";\n align-items: center;\n justify-content: center;\n & > img,\n span {\n height: ", ";\n width: ", ";\n }\n ", ";\n"], ["\n ", ";\n align-items: center;\n justify-content: center;\n & > img,\n span {\n height: ", ";\n width: ", ";\n }\n ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.flexColumnNoWrap; -}, function (_a) { - var size = _a.size; - return (size ? size + 'px' : '24px'); -}, function (_a) { - var size = _a.size; - return (size ? size + 'px' : '24px'); -}, function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToMedium(templateObject_9$a || (templateObject_9$a = __makeTemplateObject(["\n align-items: flex-end;\n "], ["\n align-items: flex-end;\n "]))); -}); -function Option$1(_a) { - var _b = _a.link, link = _b === void 0 ? null : _b, _c = _a.clickable, clickable = _c === void 0 ? true : _c, size = _a.size, _d = _a.onClick, onClick = _d === void 0 ? null : _d, color = _a.color, header = _a.header, _e = _a.subheader, subheader = _e === void 0 ? null : _e, icon = _a.icon, _f = _a.active, active = _f === void 0 ? false : _f, id = _a.id; - var content = (jsxRuntime.jsxs(OptionCardClickable, __assign({ id: id, onClick: onClick, clickable: clickable && !active, active: active }, { children: [jsxRuntime.jsxs(OptionCardLeft, { children: [jsxRuntime.jsxs(HeaderText, __assign({ color: color }, { children: [active ? (jsxRuntime.jsx(CircleWrapper, { children: jsxRuntime.jsx(GreenCircle, { children: jsxRuntime.jsx("div", {}, void 0) }, void 0) }, void 0)) : (''), header] }), void 0), subheader && jsxRuntime.jsx(SubHeader, { children: subheader }, void 0)] }, void 0), jsxRuntime.jsx(IconWrapper$1, __assign({ size: size }, { children: jsxRuntime.jsx("img", { src: icon, alt: 'Icon' }, void 0) }), void 0)] }), void 0)); - if (link) { - return jsxRuntime.jsx(ExternalLink, __assign({ href: link }, { children: content }), void 0); - } - return content; -} -var templateObject_1$W, templateObject_2$E, templateObject_3$y, templateObject_4$p, templateObject_5$l, templateObject_6$g, templateObject_7$d, templateObject_8$b, templateObject_9$a, templateObject_10$7; - -var PendingSection = styled__default["default"].div(templateObject_1$V || (templateObject_1$V = __makeTemplateObject(["\n ", ";\n align-items: center;\n justify-content: center;\n width: 100%;\n & > * {\n width: 100%;\n }\n"], ["\n ", ";\n align-items: center;\n justify-content: center;\n width: 100%;\n & > * {\n width: 100%;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.flexColumnNoWrap; -}); -var StyledLoader = styled__default["default"](Loader)(templateObject_2$D || (templateObject_2$D = __makeTemplateObject(["\n margin-right: 1rem;\n"], ["\n margin-right: 1rem;\n"]))); -var LoadingMessage = styled__default["default"].div(templateObject_3$x || (templateObject_3$x = __makeTemplateObject(["\n ", ";\n align-items: center;\n justify-content: flex-start;\n border-radius: 12px;\n margin-bottom: 20px;\n color: ", ";\n border: 1px solid ", ";\n\n & > * {\n padding: 1rem;\n }\n"], ["\n ", ";\n align-items: center;\n justify-content: flex-start;\n border-radius: 12px;\n margin-bottom: 20px;\n color: ", ";\n border: 1px solid ", ";\n\n & > * {\n padding: 1rem;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.flexRowNoWrap; -}, function (_a) { - var theme = _a.theme, error = _a.error; - return (error ? theme.red1 : 'inherit'); -}, function (_a) { - var theme = _a.theme, error = _a.error; - return (error ? theme.red1 : theme.text4); -}); -var ErrorGroup = styled__default["default"].div(templateObject_4$o || (templateObject_4$o = __makeTemplateObject(["\n ", ";\n align-items: center;\n justify-content: flex-start;\n"], ["\n ", ";\n align-items: center;\n justify-content: flex-start;\n"])), function (_a) { - var theme = _a.theme; - return theme.flexRowNoWrap; -}); -var ErrorButton = styled__default["default"].div(templateObject_5$k || (templateObject_5$k = __makeTemplateObject(["\n border-radius: 8px;\n font-size: 12px;\n color: ", ";\n background-color: ", ";\n margin-left: 1rem;\n padding: 0.5rem;\n font-weight: 600;\n user-select: none;\n\n &:hover {\n cursor: pointer;\n background-color: ", ";\n }\n"], ["\n border-radius: 8px;\n font-size: 12px;\n color: ", ";\n background-color: ", ";\n margin-left: 1rem;\n padding: 0.5rem;\n font-weight: 600;\n user-select: none;\n\n &:hover {\n cursor: pointer;\n background-color: ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.text1; -}, function (_a) { - var theme = _a.theme; - return theme.bg4; -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.1, theme.text4); -}); -var LoadingWrapper = styled__default["default"].div(templateObject_6$f || (templateObject_6$f = __makeTemplateObject(["\n ", ";\n align-items: center;\n justify-content: center;\n"], ["\n ", ";\n align-items: center;\n justify-content: center;\n"])), function (_a) { - var theme = _a.theme; - return theme.flexRowNoWrap; -}); -function PendingView(_a) { - var _b; - var connector = _a.connector, _c = _a.error, error = _c === void 0 ? false : _c, setPendingError = _a.setPendingError, tryActivation = _a.tryActivation; - var isMetamask = (_b = window === null || window === void 0 ? void 0 : window.ethereum) === null || _b === void 0 ? void 0 : _b.isMetaMask; - return (jsxRuntime.jsxs(PendingSection, { children: [jsxRuntime.jsx(LoadingMessage, __assign({ error: error }, { children: jsxRuntime.jsx(LoadingWrapper, { children: error ? (jsxRuntime.jsxs(ErrorGroup, { children: [jsxRuntime.jsx("div", { children: jsxRuntime.jsx(macro.Trans, { children: "Error connecting" }, void 0) }, void 0), jsxRuntime.jsx(ErrorButton, __assign({ onClick: function () { - setPendingError(false); - connector && tryActivation(connector); - } }, { children: jsxRuntime.jsx(macro.Trans, { children: "Try Again" }, void 0) }), void 0)] }, void 0)) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(StyledLoader, {}, void 0), jsxRuntime.jsx(macro.Trans, { children: "Initializing..." }, void 0)] }, void 0)) }, void 0) }), void 0), Object.keys(SUPPORTED_WALLETS).map(function (key) { - var option = SUPPORTED_WALLETS[key]; - if (option.connector === connector) { - if (option.connector === injected) { - if (isMetamask && option.name !== 'MetaMask') { - return null; - } - if (!isMetamask && option.name === 'MetaMask') { - return null; - } - } - return (jsxRuntime.jsx(Option$1, { id: "connect-" + key, clickable: false, color: option.color, header: option.name, subheader: option.description, icon: option.iconURL }, key)); - } - return null; - })] }, void 0)); -} -var templateObject_1$V, templateObject_2$D, templateObject_3$x, templateObject_4$o, templateObject_5$k, templateObject_6$f; - -var CloseIcon = styled__default["default"].div(templateObject_1$U || (templateObject_1$U = __makeTemplateObject(["\n position: absolute;\n right: 1rem;\n top: 14px;\n &:hover {\n cursor: pointer;\n opacity: 0.6;\n }\n"], ["\n position: absolute;\n right: 1rem;\n top: 14px;\n &:hover {\n cursor: pointer;\n opacity: 0.6;\n }\n"]))); -var CloseColor = styled__default["default"](SvgX)(templateObject_2$C || (templateObject_2$C = __makeTemplateObject(["\n path {\n stroke: ", ";\n }\n"], ["\n path {\n stroke: ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.text4; -}); -var Wrapper$f = styled__default["default"].div(templateObject_3$w || (templateObject_3$w = __makeTemplateObject(["\n ", "\n margin: 0;\n padding: 0;\n width: 100%;\n"], ["\n ", "\n margin: 0;\n padding: 0;\n width: 100%;\n"])), function (_a) { - var theme = _a.theme; - return theme.flexColumnNoWrap; -}); -var HeaderRow = styled__default["default"].div(templateObject_5$j || (templateObject_5$j = __makeTemplateObject(["\n ", ";\n padding: 1rem 1rem;\n font-weight: 500;\n color: ", ";\n ", ";\n"], ["\n ", ";\n padding: 1rem 1rem;\n font-weight: 500;\n color: ", ";\n ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.flexRowNoWrap; -}, function (props) { return (props.color === 'blue' ? function (_a) { - var theme = _a.theme; - return theme.primary1; -} : 'inherit'); }, function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToMedium(templateObject_4$n || (templateObject_4$n = __makeTemplateObject(["\n padding: 1rem;\n "], ["\n padding: 1rem;\n "]))); -}); -var ContentWrapper$2 = styled__default["default"].div(templateObject_7$c || (templateObject_7$c = __makeTemplateObject(["\n background-color: ", ";\n padding: 0 1rem 1rem 1rem;\n border-bottom-left-radius: 20px;\n border-bottom-right-radius: 20px;\n\n ", ";\n"], ["\n background-color: ", ";\n padding: 0 1rem 1rem 1rem;\n border-bottom-left-radius: 20px;\n border-bottom-right-radius: 20px;\n\n ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg0; -}, function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToMedium(templateObject_6$e || (templateObject_6$e = __makeTemplateObject(["padding: 0 1rem 1rem 1rem"], ["padding: 0 1rem 1rem 1rem"]))); -}); -var UpperSection = styled__default["default"].div(templateObject_8$a || (templateObject_8$a = __makeTemplateObject(["\n position: relative;\n\n h5 {\n margin: 0;\n margin-bottom: 0.5rem;\n font-size: 1rem;\n font-weight: 400;\n }\n\n h5:last-child {\n margin-bottom: 0px;\n }\n\n h4 {\n margin-top: 0;\n font-weight: 500;\n }\n"], ["\n position: relative;\n\n h5 {\n margin: 0;\n margin-bottom: 0.5rem;\n font-size: 1rem;\n font-weight: 400;\n }\n\n h5:last-child {\n margin-bottom: 0px;\n }\n\n h4 {\n margin-top: 0;\n font-weight: 500;\n }\n"]))); -var OptionGrid = styled__default["default"].div(templateObject_10$6 || (templateObject_10$6 = __makeTemplateObject(["\n display: grid;\n grid-gap: 10px;\n ", ";\n"], ["\n display: grid;\n grid-gap: 10px;\n ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToMedium(templateObject_9$9 || (templateObject_9$9 = __makeTemplateObject(["\n grid-template-columns: 1fr;\n grid-gap: 10px;\n "], ["\n grid-template-columns: 1fr;\n grid-gap: 10px;\n "]))); -}); -var HoverText = styled__default["default"].div(templateObject_11$5 || (templateObject_11$5 = __makeTemplateObject(["\n text-decoration: none;\n color: ", ";\n display: flex;\n align-items: center;\n\n :hover {\n cursor: pointer;\n }\n"], ["\n text-decoration: none;\n color: ", ";\n display: flex;\n align-items: center;\n\n :hover {\n cursor: pointer;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.text1; -}); -var LinkCard = styled__default["default"](Card)(templateObject_12$5 || (templateObject_12$5 = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n\n :hover {\n cursor: pointer;\n filter: brightness(0.9);\n }\n"], ["\n background-color: ", ";\n color: ", ";\n\n :hover {\n cursor: pointer;\n filter: brightness(0.9);\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var theme = _a.theme; - return theme.text3; -}); -var WALLET_VIEWS = { - OPTIONS: 'options', - OPTIONS_SECONDARY: 'options_secondary', - ACCOUNT: 'account', - PENDING: 'pending', - LEGAL: 'legal', -}; -function WalletModal(_a) { - var _this = this; - var pendingTransactions = _a.pendingTransactions, confirmedTransactions = _a.confirmedTransactions, ENSName = _a.ENSName; - // important that these are destructed from the account-specific web3-react context - var _b = core.useWeb3React(), active = _b.active, account = _b.account, connector = _b.connector, activate = _b.activate, error = _b.error; - var _c = __read(React.useState(WALLET_VIEWS.ACCOUNT), 2), walletView = _c[0], setWalletView = _c[1]; - var previousWalletView = usePrevious(walletView); - var _d = __read(React.useState(), 2), pendingWallet = _d[0], setPendingWallet = _d[1]; - var _e = __read(React.useState(), 2), pendingError = _e[0], setPendingError = _e[1]; - var walletModalOpen = useModalOpen(ApplicationModal.WALLET); - var toggleWalletModal = useWalletModalToggle(); - var previousAccount = usePrevious(account); - var logMonitoringEvent = useWalletConnectMonitoringEventCallback(); - // close on connection, when logged out before - React.useEffect(function () { - if (account && !previousAccount && walletModalOpen) { - toggleWalletModal(); - } - }, [account, previousAccount, toggleWalletModal, walletModalOpen]); - // always reset to account view - React.useEffect(function () { - if (walletModalOpen) { - setPendingError(false); - setWalletView(WALLET_VIEWS.ACCOUNT); - } - }, [walletModalOpen]); - // close modal when a connection is successful - var activePrevious = usePrevious(active); - var connectorPrevious = usePrevious(connector); - React.useEffect(function () { - if (walletModalOpen && ((active && !activePrevious) || (connector && connector !== connectorPrevious && !error))) { - setWalletView(WALLET_VIEWS.ACCOUNT); - } - }, [setWalletView, active, error, connector, walletModalOpen, activePrevious, connectorPrevious]); - var tryActivation = function (connector) { return __awaiter(_this, void 0, void 0, function () { - var name; - var _this = this; - return __generator(this, function (_a) { - name = ''; - Object.keys(SUPPORTED_WALLETS).map(function (key) { - if (connector === SUPPORTED_WALLETS[key].connector) { - return (name = SUPPORTED_WALLETS[key].name); - } - return true; - }); - // log selected wallet - ReactGA__default["default"].event({ - category: 'Wallet', - action: 'Change Wallet', - label: name, - }); - setPendingWallet(connector); // set wallet for pending view - setWalletView(WALLET_VIEWS.PENDING); - // if the connector is walletconnect and the user has already tried to connect, manually reset the connector - if (connector instanceof walletconnectConnector.WalletConnectConnector) { - connector.walletConnectProvider = undefined; - } - connector && - activate(connector, undefined, true) - .then(function () { return __awaiter(_this, void 0, void 0, function () { - var walletAddress; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, connector.getAccount()]; - case 1: - walletAddress = _a.sent(); - logMonitoringEvent({ walletAddress: walletAddress }); - return [2 /*return*/]; - } - }); - }); }) - .catch(function (error) { - if (error instanceof core.UnsupportedChainIdError) { - activate(connector); // a little janky...can't use setError because the connector isn't set - } - else { - setPendingError(true); - } - }); - return [2 /*return*/]; - }); - }); }; - // close wallet modal if fortmatic modal is active - React.useEffect(function () { - fortmatic$2.on(OVERLAY_READY, function () { - toggleWalletModal(); - }); - }, [toggleWalletModal]); - // get wallets user can switch too, depending on device/browser - function getOptions() { - var isMetamask = window.ethereum && window.ethereum.isMetaMask; - return Object.keys(SUPPORTED_WALLETS).map(function (key) { - var option = SUPPORTED_WALLETS[key]; - // check for mobile options - if (isMobile) { - //disable portis on mobile for now - if (option.connector === portis) { - return null; - } - if (!window.web3 && !window.ethereum && option.mobile) { - return (jsxRuntime.jsx(Option$1, { onClick: function () { - option.connector !== connector && !option.href && tryActivation(option.connector); - }, id: "connect-" + key, active: option.connector && option.connector === connector, color: option.color, link: option.href, header: option.name, subheader: null, icon: option.iconURL }, key)); - } - return null; - } - // overwrite injected when needed - if (option.connector === injected) { - // don't show injected if there's no injected provider - if (!(window.web3 || window.ethereum)) { - if (option.name === 'MetaMask') { - return (jsxRuntime.jsx(Option$1, { id: "connect-" + key, color: '#E8831D', header: jsxRuntime.jsx(macro.Trans, { children: "Install Metamask" }, void 0), subheader: null, link: 'https://metamask.io/', icon: MetaMaskLogo }, key)); - } - else { - return null; //dont want to return install twice - } - } - // don't return metamask if injected provider isn't metamask - else if (option.name === 'MetaMask' && !isMetamask) { - return null; - } - // likewise for generic - else if (option.name === 'Injected' && isMetamask) { - return null; - } - } - // return rest of options - return (!isMobile && - !option.mobileOnly && (jsxRuntime.jsx(Option$1, { id: "connect-" + key, onClick: function () { - option.connector === connector - ? setWalletView(WALLET_VIEWS.ACCOUNT) - : !option.href && tryActivation(option.connector); - }, active: option.connector === connector, color: option.color, link: option.href, header: option.name, subheader: null, icon: option.iconURL }, key))); - }); - } - function getModalContent() { - if (error) { - return (jsxRuntime.jsxs(UpperSection, { children: [jsxRuntime.jsx(CloseIcon, __assign({ onClick: toggleWalletModal }, { children: jsxRuntime.jsx(CloseColor, {}, void 0) }), void 0), jsxRuntime.jsx(HeaderRow, { children: error instanceof core.UnsupportedChainIdError ? jsxRuntime.jsx(macro.Trans, { children: "Wrong Network" }, void 0) : jsxRuntime.jsx(macro.Trans, { children: "Error connecting" }, void 0) }, void 0), jsxRuntime.jsx(ContentWrapper$2, { children: error instanceof core.UnsupportedChainIdError ? (jsxRuntime.jsx("h5", { children: jsxRuntime.jsx(macro.Trans, { children: "Please connect to a supported network in the dropdown menu or in your wallet." }, void 0) }, void 0)) : (jsxRuntime.jsx(macro.Trans, { children: "Error connecting. Try refreshing the page." }, void 0)) }, void 0)] }, void 0)); - } - if (walletView === WALLET_VIEWS.LEGAL) { - return (jsxRuntime.jsxs(UpperSection, { children: [jsxRuntime.jsxs(HeaderRow, { children: [jsxRuntime.jsx(HoverText, __assign({ onClick: function () { - var _a; - setWalletView((_a = (previousWalletView === WALLET_VIEWS.LEGAL ? WALLET_VIEWS.ACCOUNT : previousWalletView)) !== null && _a !== void 0 ? _a : WALLET_VIEWS.ACCOUNT); - } }, { children: jsxRuntime.jsx(reactFeather.ArrowLeft, {}, void 0) }), void 0), jsxRuntime.jsx(Row$1, __assign({ justify: "center" }, { children: jsxRuntime.jsx(ThemedText.MediumHeader, { children: jsxRuntime.jsx(macro.Trans, { children: "Legal & Privacy" }, void 0) }, void 0) }), void 0)] }, void 0), jsxRuntime.jsx(PrivacyPolicy, {}, void 0)] }, void 0)); - } - if (account && walletView === WALLET_VIEWS.ACCOUNT) { - return (jsxRuntime.jsx(AccountDetails, { toggleWalletModal: toggleWalletModal, pendingTransactions: pendingTransactions, confirmedTransactions: confirmedTransactions, ENSName: ENSName, openOptions: function () { return setWalletView(WALLET_VIEWS.OPTIONS); } }, void 0)); - } - return (jsxRuntime.jsxs(UpperSection, { children: [jsxRuntime.jsx(CloseIcon, __assign({ onClick: toggleWalletModal }, { children: jsxRuntime.jsx(CloseColor, {}, void 0) }), void 0), walletView !== WALLET_VIEWS.ACCOUNT ? (jsxRuntime.jsx(HeaderRow, __assign({ color: "blue" }, { children: jsxRuntime.jsx(HoverText, __assign({ onClick: function () { - setPendingError(false); - setWalletView(WALLET_VIEWS.ACCOUNT); - } }, { children: jsxRuntime.jsx(reactFeather.ArrowLeft, {}, void 0) }), void 0) }), void 0)) : (jsxRuntime.jsx(HeaderRow, { children: jsxRuntime.jsx(HoverText, { children: jsxRuntime.jsx(macro.Trans, { children: "Connect a wallet" }, void 0) }, void 0) }, void 0)), jsxRuntime.jsx(ContentWrapper$2, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "16px" }, { children: [jsxRuntime.jsx(LightCard, { children: jsxRuntime.jsx(AutoRow, __assign({ style: { flexWrap: 'nowrap' } }, { children: jsxRuntime.jsx(ThemedText.Black, __assign({ fontSize: 14 }, { children: jsxRuntime.jsxs(macro.Trans, { children: ["By connecting a wallet, you agree to Uniswap Labs\u2019", ' ', jsxRuntime.jsx(ExternalLink, __assign({ href: "https://uniswap.org/terms-of-service/" }, { children: "Terms of Service" }), void 0), " and acknowledge that you have read and understand the Uniswap", ' ', jsxRuntime.jsx(ExternalLink, __assign({ href: "https://uniswap.org/disclaimer/" }, { children: "Protocol Disclaimer" }), void 0), "."] }, void 0) }), void 0) }), void 0) }, void 0), walletView === WALLET_VIEWS.PENDING ? (jsxRuntime.jsx(PendingView, { connector: pendingWallet, error: pendingError, setPendingError: setPendingError, tryActivation: tryActivation }, void 0)) : (jsxRuntime.jsx(OptionGrid, { children: getOptions() }, void 0)), jsxRuntime.jsx(LinkCard, __assign({ padding: ".5rem", "$borderRadius": ".75rem", onClick: function () { return setWalletView(WALLET_VIEWS.LEGAL); } }, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsxs(AutoRow, __assign({ gap: "4px" }, { children: [jsxRuntime.jsx(reactFeather.Info, { size: 20 }, void 0), jsxRuntime.jsx(ThemedText.Label, __assign({ fontSize: 14 }, { children: jsxRuntime.jsx(macro.Trans, { children: "How this app uses APIs" }, void 0) }), void 0)] }), void 0), jsxRuntime.jsx(reactFeather.ArrowRight, { size: 16 }, void 0)] }, void 0) }), void 0)] }), void 0) }, void 0)] }, void 0)); - } - return (jsxRuntime.jsx(Modal, __assign({ isOpen: walletModalOpen, onDismiss: toggleWalletModal, minHeight: false, maxHeight: 90 }, { children: jsxRuntime.jsx(Wrapper$f, { children: getModalContent() }, void 0) }), void 0)); -} -var templateObject_1$U, templateObject_2$C, templateObject_3$w, templateObject_4$n, templateObject_5$j, templateObject_6$e, templateObject_7$c, templateObject_8$a, templateObject_9$9, templateObject_10$6, templateObject_11$5, templateObject_12$5; - -var IconWrapper = styled__default["default"].div(templateObject_1$T || (templateObject_1$T = __makeTemplateObject(["\n ", ";\n align-items: center;\n justify-content: center;\n & > * {\n height: ", ";\n width: ", ";\n }\n"], ["\n ", ";\n align-items: center;\n justify-content: center;\n & > * {\n height: ", ";\n width: ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.flexColumnNoWrap; -}, function (_a) { - var size = _a.size; - return (size ? size + 'px' : '32px'); -}, function (_a) { - var size = _a.size; - return (size ? size + 'px' : '32px'); -}); -var Web3StatusGeneric = styled__default["default"](ButtonSecondary)(templateObject_2$B || (templateObject_2$B = __makeTemplateObject(["\n ", "\n width: 100%;\n align-items: center;\n padding: 0.5rem;\n border-radius: 14px;\n cursor: pointer;\n user-select: none;\n height: 36px;\n margin-right: 2px;\n margin-left: 1px;\n :focus {\n outline: none;\n }\n"], ["\n ", "\n width: 100%;\n align-items: center;\n padding: 0.5rem;\n border-radius: 14px;\n cursor: pointer;\n user-select: none;\n height: 36px;\n margin-right: 2px;\n margin-left: 1px;\n :focus {\n outline: none;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.flexRowNoWrap; -}); -var Web3StatusError = styled__default["default"](Web3StatusGeneric)(templateObject_3$v || (templateObject_3$v = __makeTemplateObject(["\n background-color: ", ";\n border: 1px solid ", ";\n color: ", ";\n font-weight: 500;\n :hover,\n :focus {\n background-color: ", ";\n }\n"], ["\n background-color: ", ";\n border: 1px solid ", ";\n color: ", ";\n font-weight: 500;\n :hover,\n :focus {\n background-color: ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.red1; -}, function (_a) { - var theme = _a.theme; - return theme.red1; -}, function (_a) { - var theme = _a.theme; - return theme.white; -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.1, theme.red1); -}); -var Web3StatusConnect = styled__default["default"](Web3StatusGeneric)(templateObject_5$i || (templateObject_5$i = __makeTemplateObject(["\n background-color: ", ";\n border: none;\n\n color: ", ";\n font-weight: 500;\n\n :hover,\n :focus {\n border: 1px solid ", ";\n color: ", ";\n }\n\n ", "\n"], ["\n background-color: ", ";\n border: none;\n\n color: ", ";\n font-weight: 500;\n\n :hover,\n :focus {\n border: 1px solid ", ";\n color: ", ";\n }\n\n ", "\n"])), function (_a) { - var theme = _a.theme; - return theme.primary4; -}, function (_a) { - var theme = _a.theme; - return theme.primaryText1; -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.05, theme.primary4); -}, function (_a) { - var theme = _a.theme; - return theme.primaryText1; -}, function (_a) { - var faded = _a.faded; - return faded && styled.css(templateObject_4$m || (templateObject_4$m = __makeTemplateObject(["\n background-color: ", ";\n border: 1px solid ", ";\n color: ", ";\n\n :hover,\n :focus {\n border: 1px solid ", ";\n color: ", ";\n }\n "], ["\n background-color: ", ";\n border: 1px solid ", ";\n color: ", ";\n\n :hover,\n :focus {\n border: 1px solid ", ";\n color: ", ";\n }\n "])), function (_a) { - var theme = _a.theme; - return theme.primary5; - }, function (_a) { - var theme = _a.theme; - return theme.primary5; - }, function (_a) { - var theme = _a.theme; - return theme.primaryText1; - }, function (_a) { - var theme = _a.theme; - return polished.darken(0.05, theme.primary4); - }, function (_a) { - var theme = _a.theme; - return polished.darken(0.05, theme.primaryText1); - }); -}); -var Web3StatusConnected = styled__default["default"](Web3StatusGeneric)(templateObject_6$d || (templateObject_6$d = __makeTemplateObject(["\n background-color: ", ";\n border: 1px solid ", ";\n color: ", ";\n font-weight: 500;\n :hover,\n :focus {\n border: 1px solid ", ";\n\n :focus {\n border: 1px solid ", ";\n }\n }\n"], ["\n background-color: ", ";\n border: 1px solid ", ";\n color: ", ";\n font-weight: 500;\n :hover,\n :focus {\n border: 1px solid ", ";\n\n :focus {\n border: 1px solid ", ";\n }\n }\n"])), function (_a) { - var pending = _a.pending, theme = _a.theme; - return (pending ? theme.primary1 : theme.bg1); -}, function (_a) { - var pending = _a.pending, theme = _a.theme; - return (pending ? theme.primary1 : theme.bg1); -}, function (_a) { - var pending = _a.pending, theme = _a.theme; - return (pending ? theme.white : theme.text1); -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.05, theme.bg3); -}, function (_a) { - var pending = _a.pending, theme = _a.theme; - return (pending ? polished.darken(0.1, theme.primary1) : polished.darken(0.1, theme.bg2)); -}); -var Text = styled__default["default"].p(templateObject_7$b || (templateObject_7$b = __makeTemplateObject(["\n flex: 1 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n margin: 0 0.5rem 0 0.25rem;\n font-size: 1rem;\n width: fit-content;\n font-weight: 500;\n"], ["\n flex: 1 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n margin: 0 0.5rem 0 0.25rem;\n font-size: 1rem;\n width: fit-content;\n font-weight: 500;\n"]))); -var NetworkIcon = styled__default["default"](reactFeather.Activity)(templateObject_8$9 || (templateObject_8$9 = __makeTemplateObject(["\n margin-left: 0.25rem;\n margin-right: 0.5rem;\n width: 16px;\n height: 16px;\n"], ["\n margin-left: 0.25rem;\n margin-right: 0.5rem;\n width: 16px;\n height: 16px;\n" - // we want the latest one to come first, so return negative if a is after b -]))); -// we want the latest one to come first, so return negative if a is after b -function newTransactionsFirst(a, b) { - return b.addedTime - a.addedTime; -} -function Sock() { - return (jsxRuntime.jsx("span", __assign({ role: "img", "aria-label": macro.t(templateObject_9$8 || (templateObject_9$8 = __makeTemplateObject(["has socks emoji"], ["has socks emoji"]))), style: { marginTop: -4, marginBottom: -4 } }, { children: "\uD83E\uDDE6" }), void 0)); -} -function WrappedStatusIcon(_a) { - var connector = _a.connector; - return (jsxRuntime.jsx(IconWrapper, __assign({ size: 16 }, { children: jsxRuntime.jsx(StatusIcon, { connector: connector }, void 0) }), void 0)); -} -function Web3StatusInner() { - var _a = core.useWeb3React(), account = _a.account, connector = _a.connector, error = _a.error; - var ENSName = useENSName(account !== null && account !== void 0 ? account : undefined).ENSName; - var allTransactions = useAllTransactions(); - var sortedRecentTransactions = React.useMemo(function () { - var txs = Object.values(allTransactions); - return txs.filter(isTransactionRecent).sort(newTransactionsFirst); - }, [allTransactions]); - var pending = sortedRecentTransactions.filter(function (tx) { return !tx.receipt; }).map(function (tx) { return tx.hash; }); - var hasPendingTransactions = !!pending.length; - var hasSocks = useHasSocks(); - var toggleWalletModal = useWalletModalToggle(); - if (account) { - return (jsxRuntime.jsxs(Web3StatusConnected, __assign({ id: "web3-status-connected", onClick: toggleWalletModal, pending: hasPendingTransactions }, { children: [hasPendingTransactions ? (jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(Text, { children: jsxRuntime.jsxs(macro.Trans, { children: [pending === null || pending === void 0 ? void 0 : pending.length, " Pending"] }, void 0) }, void 0), ' ', jsxRuntime.jsx(Loader, { stroke: "white" }, void 0)] }, void 0)) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [hasSocks ? jsxRuntime.jsx(Sock, {}, void 0) : null, jsxRuntime.jsx(Text, { children: ENSName || shortenAddress(account) }, void 0)] }, void 0)), !hasPendingTransactions && connector && jsxRuntime.jsx(WrappedStatusIcon, { connector: connector }, void 0)] }), void 0)); - } - else if (error) { - return (jsxRuntime.jsxs(Web3StatusError, __assign({ onClick: toggleWalletModal }, { children: [jsxRuntime.jsx(NetworkIcon, {}, void 0), jsxRuntime.jsx(Text, { children: error instanceof core.UnsupportedChainIdError ? jsxRuntime.jsx(macro.Trans, { children: "Wrong Network" }, void 0) : jsxRuntime.jsx(macro.Trans, { children: "Error" }, void 0) }, void 0)] }), void 0)); - } - else { - return (jsxRuntime.jsx(Web3StatusConnect, __assign({ id: "connect-wallet", onClick: toggleWalletModal, faded: !account }, { children: jsxRuntime.jsx(Text, { children: jsxRuntime.jsx(macro.Trans, { children: "Connect Wallet" }, void 0) }, void 0) }), void 0)); - } -} -function Web3Status() { - var _a = core.useWeb3React(), active = _a.active, account = _a.account; - var contextNetwork = core.useWeb3React(NetworkContextName); - var ENSName = useENSName(account !== null && account !== void 0 ? account : undefined).ENSName; - var allTransactions = useAllTransactions(); - var sortedRecentTransactions = React.useMemo(function () { - var txs = Object.values(allTransactions); - return txs.filter(isTransactionRecent).sort(newTransactionsFirst); - }, [allTransactions]); - var pending = sortedRecentTransactions.filter(function (tx) { return !tx.receipt; }).map(function (tx) { return tx.hash; }); - var confirmed = sortedRecentTransactions.filter(function (tx) { return tx.receipt; }).map(function (tx) { return tx.hash; }); - return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(Web3StatusInner, {}, void 0), (contextNetwork.active || active) && (jsxRuntime.jsx(WalletModal, { ENSName: ENSName !== null && ENSName !== void 0 ? ENSName : undefined, pendingTransactions: pending, confirmedTransactions: confirmed }, void 0))] }, void 0)); -} -var templateObject_1$T, templateObject_2$B, templateObject_3$v, templateObject_4$m, templateObject_5$i, templateObject_6$d, templateObject_7$b, templateObject_8$9, templateObject_9$8; - -var SantaHat = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEYAAAA3CAYAAACxUDzgAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAaGVYSWZNTQAqAAAACAAEAQYAAwAAAAEAAgAAARIAAwAAAAEAAQAAASgAAwAAAAEAAgAAh2kABAAAAAEAAAA+AAAAAAADoAEAAwAAAAEAAQAAoAIABAAAAAEAAABGoAMABAAAAAEAAAA3AAAAAChoTFwAAALiaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA2LjAuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjE8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlBob3RvbWV0cmljSW50ZXJwcmV0YXRpb24+MjwvdGlmZjpQaG90b21ldHJpY0ludGVycHJldGF0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NzA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjU1PC9leGlmOlBpeGVsWURpbWVuc2lv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"; - -var SantaHatImage = styled__default["default"].img(templateObject_1$S || (templateObject_1$S = __makeTemplateObject(["\n position: absolute;\n top: -4px;\n right: -4px;\n height: 18px;\n"], ["\n position: absolute;\n top: -4px;\n right: -4px;\n height: 18px;\n"]))); -var Christmas = jsxRuntime.jsx(SantaHatImage, { src: SantaHat, alt: "Santa hat" }, void 0); -var DATE_TO_ORNAMENT = { - '12-24': Christmas, - '12-25': Christmas, -}; -var HolidayOrnament = function () { - // months in javascript are 0 indexed... - var today = new Date().getMonth() + 1 + "-" + new Date().getDate(); - return DATE_TO_ORNAMENT[today] || null; -}; -var templateObject_1$S; - -var replaceURLParam = function (search, param, newValue) { - var searchParams = new URLSearchParams(search); - searchParams.set(param, newValue); - return searchParams.toString(); -}; - -// provider.request returns Promise, but wallet_switchEthereumChain must return null or throw -// see https://github.com/rekmarks/EIPs/blob/3326-create/EIPS/eip-3326.md for more info on wallet_switchEthereumChain -function switchToNetwork(_a) { - var _b; - var library = _a.library, chainId = _a.chainId; - return __awaiter(this, void 0, void 0, function () { - var formattedChainId, error_1, info, error_2; - return __generator(this, function (_c) { - switch (_c.label) { - case 0: - if (!((_b = library === null || library === void 0 ? void 0 : library.provider) === null || _b === void 0 ? void 0 : _b.request)) { - return [2 /*return*/]; - } - formattedChainId = bytes.hexStripZeros(bignumber.BigNumber.from(chainId).toHexString()); - _c.label = 1; - case 1: - _c.trys.push([1, 3, , 11]); - return [4 /*yield*/, library.provider.request({ - method: 'wallet_switchEthereumChain', - params: [{ chainId: formattedChainId }], - })]; - case 2: - _c.sent(); - return [3 /*break*/, 11]; - case 3: - error_1 = _c.sent(); - if (!(error_1.code === 4902)) return [3 /*break*/, 9]; - info = CHAIN_INFO[chainId]; - return [4 /*yield*/, library.provider.request({ - method: 'wallet_addEthereumChain', - params: [ - { - chainId: formattedChainId, - chainName: info.label, - rpcUrls: [info.addNetworkInfo.rpcUrl], - nativeCurrency: info.addNetworkInfo.nativeCurrency, - blockExplorerUrls: [info.explorer], - }, - ], - }) - // metamask (only known implementer) automatically switches after a network is added - // the second call is done here because that behavior is not a part of the spec and cannot be relied upon in the future - // metamask's behavior when switching to the current network is just to return null (a no-op) - ]; - case 4: - _c.sent(); - _c.label = 5; - case 5: - _c.trys.push([5, 7, , 8]); - return [4 /*yield*/, library.provider.request({ - method: 'wallet_switchEthereumChain', - params: [{ chainId: formattedChainId }], - })]; - case 6: - _c.sent(); - return [3 /*break*/, 8]; - case 7: - error_2 = _c.sent(); - console.debug('Added network but could not switch chains', error_2); - return [3 /*break*/, 8]; - case 8: return [3 /*break*/, 10]; - case 9: throw error_1; - case 10: return [3 /*break*/, 11]; - case 11: return [2 /*return*/]; - } - }); - }); -} - -var ActiveRowLinkList = styled__default["default"].div(templateObject_1$R || (templateObject_1$R = __makeTemplateObject(["\n display: flex;\n flex-direction: column;\n padding: 0 8px;\n & > a {\n align-items: center;\n color: ", ";\n display: flex;\n flex-direction: row;\n font-size: 14px;\n font-weight: 500;\n justify-content: space-between;\n padding: 8px 0 4px;\n text-decoration: none;\n }\n & > a:first-child {\n margin: 0;\n margin-top: 0px;\n padding-top: 10px;\n }\n"], ["\n display: flex;\n flex-direction: column;\n padding: 0 8px;\n & > a {\n align-items: center;\n color: ", ";\n display: flex;\n flex-direction: row;\n font-size: 14px;\n font-weight: 500;\n justify-content: space-between;\n padding: 8px 0 4px;\n text-decoration: none;\n }\n & > a:first-child {\n margin: 0;\n margin-top: 0px;\n padding-top: 10px;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.text2; -}); -var ActiveRowWrapper = styled__default["default"].div(templateObject_2$A || (templateObject_2$A = __makeTemplateObject(["\n background-color: ", ";\n border-radius: 8px;\n cursor: pointer;\n padding: 8px;\n width: 100%;\n"], ["\n background-color: ", ";\n border-radius: 8px;\n cursor: pointer;\n padding: 8px;\n width: 100%;\n"])), function (_a) { - var theme = _a.theme; - return theme.bg1; -}); -var FlyoutHeader = styled__default["default"].div(templateObject_3$u || (templateObject_3$u = __makeTemplateObject(["\n color: ", ";\n font-weight: 400;\n"], ["\n color: ", ";\n font-weight: 400;\n"])), function (_a) { - var theme = _a.theme; - return theme.text2; -}); -var FlyoutMenu = styled__default["default"].div(templateObject_4$l || (templateObject_4$l = __makeTemplateObject(["\n align-items: flex-start;\n background-color: ", ";\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 border-radius: 20px;\n display: flex;\n flex-direction: column;\n font-size: 16px;\n overflow: auto;\n padding: 16px;\n position: absolute;\n top: 64px;\n width: 272px;\n z-index: 99;\n & > *:not(:last-child) {\n margin-bottom: 12px;\n }\n @media screen and (min-width: ", "px) {\n top: 50px;\n }\n"], ["\n align-items: flex-start;\n background-color: ", ";\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 border-radius: 20px;\n display: flex;\n flex-direction: column;\n font-size: 16px;\n overflow: auto;\n padding: 16px;\n position: absolute;\n top: 64px;\n width: 272px;\n z-index: 99;\n & > *:not(:last-child) {\n margin-bottom: 12px;\n }\n @media screen and (min-width: ", "px) {\n top: 50px;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.bg0; -}, MEDIA_WIDTHS.upToSmall); -var FlyoutRow = styled__default["default"].div(templateObject_5$h || (templateObject_5$h = __makeTemplateObject(["\n align-items: center;\n background-color: ", ";\n border-radius: 8px;\n cursor: pointer;\n display: flex;\n font-weight: 500;\n justify-content: space-between;\n padding: 6px 8px;\n text-align: left;\n width: 100%;\n"], ["\n align-items: center;\n background-color: ", ";\n border-radius: 8px;\n cursor: pointer;\n display: flex;\n font-weight: 500;\n justify-content: space-between;\n padding: 6px 8px;\n text-align: left;\n width: 100%;\n"])), function (_a) { - var active = _a.active, theme = _a.theme; - return (active ? theme.bg1 : 'transparent'); -}); -var FlyoutRowActiveIndicator = styled__default["default"].div(templateObject_6$c || (templateObject_6$c = __makeTemplateObject(["\n background-color: ", ";\n border-radius: 50%;\n height: 9px;\n width: 9px;\n"], ["\n background-color: ", ";\n border-radius: 50%;\n height: 9px;\n width: 9px;\n"])), function (_a) { - var theme = _a.theme; - return theme.green1; -}); -var LinkOutCircle = styled__default["default"](reactFeather.ArrowDownCircle)(templateObject_7$a || (templateObject_7$a = __makeTemplateObject(["\n transform: rotate(230deg);\n width: 16px;\n height: 16px;\n"], ["\n transform: rotate(230deg);\n width: 16px;\n height: 16px;\n"]))); -var Logo$1 = styled__default["default"].img(templateObject_8$8 || (templateObject_8$8 = __makeTemplateObject(["\n height: 20px;\n width: 20px;\n margin-right: 8px;\n"], ["\n height: 20px;\n width: 20px;\n margin-right: 8px;\n"]))); -var NetworkLabel = styled__default["default"].div(templateObject_9$7 || (templateObject_9$7 = __makeTemplateObject(["\n flex: 1 1 auto;\n"], ["\n flex: 1 1 auto;\n"]))); -var SelectorLabel = styled__default["default"](NetworkLabel)(templateObject_10$5 || (templateObject_10$5 = __makeTemplateObject(["\n display: none;\n @media screen and (min-width: ", "px) {\n display: block;\n margin-right: 8px;\n }\n"], ["\n display: none;\n @media screen and (min-width: ", "px) {\n display: block;\n margin-right: 8px;\n }\n"])), MEDIA_WIDTHS.upToSmall); -var SelectorControls = styled__default["default"].div(templateObject_11$4 || (templateObject_11$4 = __makeTemplateObject(["\n align-items: center;\n background-color: ", ";\n border: 2px solid ", ";\n border-radius: 16px;\n color: ", ";\n cursor: ", ";\n display: flex;\n font-weight: 500;\n justify-content: space-between;\n padding: 6px 8px;\n"], ["\n align-items: center;\n background-color: ", ";\n border: 2px solid ", ";\n border-radius: 16px;\n color: ", ";\n cursor: ", ";\n display: flex;\n font-weight: 500;\n justify-content: space-between;\n padding: 6px 8px;\n"])), function (_a) { - var theme = _a.theme; - return theme.bg0; -}, function (_a) { - var theme = _a.theme; - return theme.bg0; -}, function (_a) { - var theme = _a.theme; - return theme.text1; -}, function (_a) { - var interactive = _a.interactive; - return (interactive ? 'pointer' : 'auto'); -}); -var SelectorLogo = styled__default["default"](Logo$1)(templateObject_12$4 || (templateObject_12$4 = __makeTemplateObject(["\n margin-right: ", "px;\n @media screen and (min-width: ", "px) {\n margin-right: 8px;\n }\n"], ["\n margin-right: ", "px;\n @media screen and (min-width: ", "px) {\n margin-right: 8px;\n }\n"])), function (_a) { - var interactive = _a.interactive; - return (interactive ? 8 : 0); -}, MEDIA_WIDTHS.upToSmall); -var SelectorWrapper = styled__default["default"].div(templateObject_13$1 || (templateObject_13$1 = __makeTemplateObject(["\n @media screen and (min-width: ", "px) {\n position: relative;\n }\n"], ["\n @media screen and (min-width: ", "px) {\n position: relative;\n }\n"])), MEDIA_WIDTHS.upToSmall); -var StyledChevronDown = styled__default["default"](reactFeather.ChevronDown)(templateObject_14$1 || (templateObject_14$1 = __makeTemplateObject(["\n width: 16px;\n"], ["\n width: 16px;\n"]))); -var BridgeLabel = function (_a) { - var chainId = _a.chainId; - switch (chainId) { - case SupportedChainId.ARBITRUM_ONE: - case SupportedChainId.ARBITRUM_RINKEBY: - return jsxRuntime.jsx(macro.Trans, { children: "Arbitrum Bridge" }, void 0); - case SupportedChainId.OPTIMISM: - case SupportedChainId.OPTIMISTIC_KOVAN: - return jsxRuntime.jsx(macro.Trans, { children: "Optimism Gateway" }, void 0); - case SupportedChainId.POLYGON: - case SupportedChainId.POLYGON_MUMBAI: - return jsxRuntime.jsx(macro.Trans, { children: "Polygon Bridge" }, void 0); - default: - return jsxRuntime.jsx(macro.Trans, { children: "Bridge" }, void 0); - } -}; -var ExplorerLabel = function (_a) { - var chainId = _a.chainId; - switch (chainId) { - case SupportedChainId.ARBITRUM_ONE: - case SupportedChainId.ARBITRUM_RINKEBY: - return jsxRuntime.jsx(macro.Trans, { children: "Arbiscan" }, void 0); - case SupportedChainId.OPTIMISM: - case SupportedChainId.OPTIMISTIC_KOVAN: - return jsxRuntime.jsx(macro.Trans, { children: "Optimistic Etherscan" }, void 0); - case SupportedChainId.POLYGON: - case SupportedChainId.POLYGON_MUMBAI: - return jsxRuntime.jsx(macro.Trans, { children: "Polygonscan" }, void 0); - default: - return jsxRuntime.jsx(macro.Trans, { children: "Etherscan" }, void 0); - } -}; -function Row(_a) { - var targetChain = _a.targetChain, onSelectChain = _a.onSelectChain; - var _b = useActiveWeb3React(), library = _b.library, chainId = _b.chainId; - if (!library || !chainId) { - return null; - } - var active = chainId === targetChain; - var _c = CHAIN_INFO[targetChain], helpCenterUrl = _c.helpCenterUrl, explorer = _c.explorer, bridge = _c.bridge, label = _c.label, logoUrl = _c.logoUrl; - var rowContent = (jsxRuntime.jsxs(FlyoutRow, __assign({ onClick: function () { return onSelectChain(targetChain); }, active: active }, { children: [jsxRuntime.jsx(Logo$1, { src: logoUrl }, void 0), jsxRuntime.jsx(NetworkLabel, { children: label }, void 0), chainId === targetChain && jsxRuntime.jsx(FlyoutRowActiveIndicator, {}, void 0)] }), void 0)); - if (active) { - return (jsxRuntime.jsxs(ActiveRowWrapper, { children: [rowContent, jsxRuntime.jsxs(ActiveRowLinkList, { children: [bridge ? (jsxRuntime.jsxs(ExternalLink, __assign({ href: bridge }, { children: [jsxRuntime.jsx(BridgeLabel, { chainId: chainId }, void 0), " ", jsxRuntime.jsx(LinkOutCircle, {}, void 0)] }), void 0)) : null, explorer ? (jsxRuntime.jsxs(ExternalLink, __assign({ href: explorer }, { children: [jsxRuntime.jsx(ExplorerLabel, { chainId: chainId }, void 0), " ", jsxRuntime.jsx(LinkOutCircle, {}, void 0)] }), void 0)) : null, helpCenterUrl ? (jsxRuntime.jsxs(ExternalLink, __assign({ href: helpCenterUrl }, { children: [jsxRuntime.jsx(macro.Trans, { children: "Help Center" }, void 0), " ", jsxRuntime.jsx(LinkOutCircle, {}, void 0)] }), void 0)) : null] }, void 0)] }, void 0)); - } - return rowContent; -} -var getParsedChainId = function (parsedQs) { - var chain = parsedQs === null || parsedQs === void 0 ? void 0 : parsedQs.chain; - if (!chain || typeof chain !== 'string') - return { urlChain: undefined, urlChainId: undefined }; - return { urlChain: chain.toLowerCase(), urlChainId: getChainIdFromName(chain) }; -}; -var getChainIdFromName = function (name) { - var entry = Object.entries(CHAIN_IDS_TO_NAMES).find(function (_a) { - var _b = __read(_a, 2); _b[0]; var n = _b[1]; - return n === name; - }); - var chainId = entry === null || entry === void 0 ? void 0 : entry[0]; - return chainId ? parseInt(chainId) : undefined; -}; -var getChainNameFromId = function (id) { - // casting here may not be right but fine to return undefined if it's not a supported chain ID - return CHAIN_IDS_TO_NAMES[id] || ''; -}; -function NetworkSelector() { - var _a = useActiveWeb3React(), chainId = _a.chainId, library = _a.library; - var parsedQs = useParsedQueryString(); - var _b = getParsedChainId(parsedQs), urlChain = _b.urlChain, urlChainId = _b.urlChainId; - var prevChainId = usePrevious(chainId); - var node = React.useRef(); - var open = useModalOpen(ApplicationModal.NETWORK_SELECTOR); - var toggle = useToggleModal(ApplicationModal.NETWORK_SELECTOR); - useOnClickOutside(node, open ? toggle : undefined); - var history = reactRouterDom.useHistory(); - var info = chainId ? CHAIN_INFO[chainId] : undefined; - var dispatch = useAppDispatch(); - var handleChainSwitch = React.useCallback(function (targetChain, skipToggle) { - if (!library) - return; - switchToNetwork({ library: library, chainId: targetChain }) - .then(function () { - if (!skipToggle) { - toggle(); - } - history.replace({ - search: replaceURLParam(history.location.search, 'chain', getChainNameFromId(targetChain)), - }); - }) - .catch(function (error) { - console.error('Failed to switch networks', error); - // we want app network <-> chainId param to be in sync, so if user changes the network by changing the URL - // but the request fails, revert the URL back to current chainId - if (chainId) { - history.replace({ search: replaceURLParam(history.location.search, 'chain', getChainNameFromId(chainId)) }); - } - if (!skipToggle) { - toggle(); - } - dispatch(addPopup({ content: { failedSwitchNetwork: targetChain }, key: "failed-network-switch" })); - }); - }, [dispatch, library, toggle, history, chainId]); - React.useEffect(function () { - if (!chainId || !prevChainId) - return; - // when network change originates from wallet or dropdown selector, just update URL - if (chainId !== prevChainId) { - history.replace({ search: replaceURLParam(history.location.search, 'chain', getChainNameFromId(chainId)) }); - // otherwise assume network change originates from URL - } - else if (urlChainId && urlChainId !== chainId) { - handleChainSwitch(urlChainId, true); - } - }, [chainId, urlChainId, prevChainId, handleChainSwitch, history]); - // set chain parameter on initial load if not there - React.useEffect(function () { - if (chainId && !urlChainId) { - history.replace({ search: replaceURLParam(history.location.search, 'chain', getChainNameFromId(chainId)) }); - } - }, [chainId, history, urlChainId, urlChain]); - if (!chainId || !info || !library) { - return null; - } - return (jsxRuntime.jsxs(SelectorWrapper, __assign({ ref: node }, { children: [jsxRuntime.jsxs(SelectorControls, __assign({ onClick: toggle, interactive: true }, { children: [jsxRuntime.jsx(SelectorLogo, { interactive: true, src: info.logoUrl }, void 0), jsxRuntime.jsx(SelectorLabel, { children: info.label }, void 0), jsxRuntime.jsx(StyledChevronDown, {}, void 0)] }), void 0), open && (jsxRuntime.jsxs(FlyoutMenu, __assign({ onMouseLeave: toggle }, { children: [jsxRuntime.jsx(FlyoutHeader, { children: jsxRuntime.jsx(macro.Trans, { children: "Select a network" }, void 0) }, void 0), jsxRuntime.jsx(Row, { onSelectChain: handleChainSwitch, targetChain: SupportedChainId.MAINNET }, void 0), jsxRuntime.jsx(Row, { onSelectChain: handleChainSwitch, targetChain: SupportedChainId.POLYGON }, void 0), jsxRuntime.jsx(Row, { onSelectChain: handleChainSwitch, targetChain: SupportedChainId.OPTIMISM }, void 0), jsxRuntime.jsx(Row, { onSelectChain: handleChainSwitch, targetChain: SupportedChainId.ARBITRUM_ONE }, void 0)] }), void 0))] }), void 0)); -} -var templateObject_1$R, templateObject_2$A, templateObject_3$u, templateObject_4$l, templateObject_5$h, templateObject_6$c, templateObject_7$a, templateObject_8$8, templateObject_9$7, templateObject_10$5, templateObject_11$4, templateObject_12$4, templateObject_13$1, templateObject_14$1; - -var HeaderFrame = styled__default["default"].div(templateObject_4$k || (templateObject_4$k = __makeTemplateObject(["\n display: grid;\n grid-template-columns: 120px 1fr 120px;\n align-items: center;\n justify-content: space-between;\n align-items: center;\n flex-direction: row;\n width: 100%;\n top: 0;\n position: relative;\n padding: 1rem;\n z-index: 21;\n position: relative;\n /* Background slide effect on scroll. */\n background-image: ", ";\n background-position: ", ";\n background-size: 100% 200%;\n box-shadow: 0px 0px 0px 1px ", ";\n transition: background-position 0.1s, box-shadow 0.1s;\n background-blend-mode: hard-light;\n\n ", ";\n\n ", ";\n\n ", ";\n"], ["\n display: grid;\n grid-template-columns: 120px 1fr 120px;\n align-items: center;\n justify-content: space-between;\n align-items: center;\n flex-direction: row;\n width: 100%;\n top: 0;\n position: relative;\n padding: 1rem;\n z-index: 21;\n position: relative;\n /* Background slide effect on scroll. */\n background-image: ", ";\n background-position: ", ";\n background-size: 100% 200%;\n box-shadow: 0px 0px 0px 1px ", ";\n transition: background-position 0.1s, box-shadow 0.1s;\n background-blend-mode: hard-light;\n\n ", ";\n\n ", ";\n\n ", ";\n"])), function (_a) { - var theme = _a.theme; - return "linear-gradient(to bottom, transparent 50%, " + theme.bg0 + " 50% )}}"; -}, function (_a) { - var showBackground = _a.showBackground; - return (showBackground ? '0 -100%' : '0 0'); -}, function (_a) { - var theme = _a.theme, showBackground = _a.showBackground; - return (showBackground ? theme.bg2 : 'transparent;'); -}, function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToLarge(templateObject_1$Q || (templateObject_1$Q = __makeTemplateObject(["\n grid-template-columns: 48px 1fr 1fr;\n "], ["\n grid-template-columns: 48px 1fr 1fr;\n "]))); -}, function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToMedium(templateObject_2$z || (templateObject_2$z = __makeTemplateObject(["\n padding: 1rem;\n grid-template-columns: 1fr 1fr;\n "], ["\n padding: 1rem;\n grid-template-columns: 1fr 1fr;\n "]))); -}, function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToSmall(templateObject_3$t || (templateObject_3$t = __makeTemplateObject(["\n padding: 1rem;\n grid-template-columns: 36px 1fr;\n "], ["\n padding: 1rem;\n grid-template-columns: 36px 1fr;\n "]))); -}); -var HeaderControls = styled__default["default"].div(templateObject_5$g || (templateObject_5$g = __makeTemplateObject(["\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-self: flex-end;\n"], ["\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-self: flex-end;\n"]))); -var HeaderElement = styled__default["default"].div(templateObject_7$9 || (templateObject_7$9 = __makeTemplateObject(["\n display: flex;\n align-items: center;\n\n &:not(:first-child) {\n margin-left: 0.5em;\n }\n\n /* addresses safari's lack of support for \"gap\" */\n & > *:not(:first-child) {\n margin-left: 8px;\n }\n\n ", ";\n"], ["\n display: flex;\n align-items: center;\n\n &:not(:first-child) {\n margin-left: 0.5em;\n }\n\n /* addresses safari's lack of support for \"gap\" */\n & > *:not(:first-child) {\n margin-left: 8px;\n }\n\n ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToMedium(templateObject_6$b || (templateObject_6$b = __makeTemplateObject(["\n align-items: center;\n "], ["\n align-items: center;\n "]))); -}); -var HeaderLinks = styled__default["default"](Row$1)(templateObject_11$3 || (templateObject_11$3 = __makeTemplateObject(["\n justify-self: center;\n background-color: ", ";\n width: fit-content;\n padding: 2px;\n border-radius: 16px;\n display: grid;\n grid-auto-flow: column;\n grid-gap: 10px;\n overflow: auto;\n align-items: center;\n ", ";\n ", ";\n ", ";\n"], ["\n justify-self: center;\n background-color: ", ";\n width: fit-content;\n padding: 2px;\n border-radius: 16px;\n display: grid;\n grid-auto-flow: column;\n grid-gap: 10px;\n overflow: auto;\n align-items: center;\n ", ";\n ", ";\n ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg0; -}, function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToLarge(templateObject_8$7 || (templateObject_8$7 = __makeTemplateObject(["\n justify-self: start; \n "], ["\n justify-self: start; \n "]))); -}, function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToMedium(templateObject_9$6 || (templateObject_9$6 = __makeTemplateObject(["\n justify-self: center;\n "], ["\n justify-self: center;\n "]))); -}, function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToMedium(templateObject_10$4 || (templateObject_10$4 = __makeTemplateObject(["\n flex-direction: row;\n justify-content: space-between;\n justify-self: center;\n z-index: 99;\n position: fixed;\n bottom: 0; right: 50%;\n transform: translate(50%,-50%);\n margin: 0 auto;\n background-color: ", ";\n border: 1px solid ", ";\n box-shadow: 0px 6px 10px rgb(0 0 0 / 2%);\n "], ["\n flex-direction: row;\n justify-content: space-between;\n justify-self: center;\n z-index: 99;\n position: fixed;\n bottom: 0; right: 50%;\n transform: translate(50%,-50%);\n margin: 0 auto;\n background-color: ", ";\n border: 1px solid ", ";\n box-shadow: 0px 6px 10px rgb(0 0 0 / 2%);\n "])), function (_a) { - var theme = _a.theme; - return theme.bg0; - }, function (_a) { - var theme = _a.theme; - return theme.bg2; - }); -}); -var AccountElement = styled__default["default"].div(templateObject_12$3 || (templateObject_12$3 = __makeTemplateObject(["\n display: flex;\n flex-direction: row;\n align-items: center;\n background-color: ", ";\n border-radius: 16px;\n white-space: nowrap;\n width: 100%;\n height: 40px;\n\n :focus {\n border: 1px solid blue;\n }\n"], ["\n display: flex;\n flex-direction: row;\n align-items: center;\n background-color: ", ";\n border-radius: 16px;\n white-space: nowrap;\n width: 100%;\n height: 40px;\n\n :focus {\n border: 1px solid blue;\n }\n"])), function (_a) { - var theme = _a.theme, active = _a.active; - return (!active ? theme.bg0 : theme.bg0); -}); -var UNIAmount = styled__default["default"](AccountElement)(templateObject_13 || (templateObject_13 = __makeTemplateObject(["\n color: white;\n padding: 4px 8px;\n height: 36px;\n font-weight: 500;\n background-color: ", ";\n background: radial-gradient(174.47% 188.91% at 1.84% 0%, #ff007a 0%, #2172e5 100%), #edeef2;\n"], ["\n color: white;\n padding: 4px 8px;\n height: 36px;\n font-weight: 500;\n background-color: ", ";\n background: radial-gradient(174.47% 188.91% at 1.84% 0%, #ff007a 0%, #2172e5 100%), #edeef2;\n"])), function (_a) { - var theme = _a.theme; - return theme.bg3; -}); -var UNIWrapper = styled__default["default"].span(templateObject_14 || (templateObject_14 = __makeTemplateObject(["\n width: fit-content;\n position: relative;\n cursor: pointer;\n\n :hover {\n opacity: 0.8;\n }\n\n :active {\n opacity: 0.9;\n }\n"], ["\n width: fit-content;\n position: relative;\n cursor: pointer;\n\n :hover {\n opacity: 0.8;\n }\n\n :active {\n opacity: 0.9;\n }\n"]))); -var BalanceText = styled__default["default"](rebass.Text)(templateObject_16 || (templateObject_16 = __makeTemplateObject(["\n ", ";\n"], ["\n ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToExtraSmall(templateObject_15 || (templateObject_15 = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); -}); -var Title = styled__default["default"].a(templateObject_18 || (templateObject_18 = __makeTemplateObject(["\n display: flex;\n align-items: center;\n pointer-events: auto;\n justify-self: flex-start;\n margin-right: 12px;\n ", ";\n :hover {\n cursor: pointer;\n }\n"], ["\n display: flex;\n align-items: center;\n pointer-events: auto;\n justify-self: flex-start;\n margin-right: 12px;\n ", ";\n :hover {\n cursor: pointer;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToSmall(templateObject_17 || (templateObject_17 = __makeTemplateObject(["\n justify-self: center;\n "], ["\n justify-self: center;\n "]))); -}); -var UniIcon = styled__default["default"].div(templateObject_19 || (templateObject_19 = __makeTemplateObject(["\n transition: transform 0.3s ease;\n :hover {\n transform: rotate(-5deg);\n }\n\n position: relative;\n"], ["\n transition: transform 0.3s ease;\n :hover {\n transform: rotate(-5deg);\n }\n\n position: relative;\n"]))); -var activeClassName = 'ACTIVE'; -var StyledNavLink = styled__default["default"](reactRouterDom.NavLink).attrs({ - activeClassName: activeClassName, -})(templateObject_20 || (templateObject_20 = __makeTemplateObject(["\n ", "\n align-items: left;\n border-radius: 3rem;\n outline: none;\n cursor: pointer;\n text-decoration: none;\n color: ", ";\n font-size: 1rem;\n font-weight: 500;\n padding: 8px 12px;\n word-break: break-word;\n overflow: hidden;\n white-space: nowrap;\n &.", " {\n border-radius: 14px;\n font-weight: 600;\n justify-content: center;\n color: ", ";\n background-color: ", ";\n }\n\n :hover,\n :focus {\n color: ", ";\n }\n"], ["\n ", "\n align-items: left;\n border-radius: 3rem;\n outline: none;\n cursor: pointer;\n text-decoration: none;\n color: ", ";\n font-size: 1rem;\n font-weight: 500;\n padding: 8px 12px;\n word-break: break-word;\n overflow: hidden;\n white-space: nowrap;\n &.", " {\n border-radius: 14px;\n font-weight: 600;\n justify-content: center;\n color: ", ";\n background-color: ", ";\n }\n\n :hover,\n :focus {\n color: ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.flexRowNoWrap; -}, function (_a) { - var theme = _a.theme; - return theme.text2; -}, activeClassName, function (_a) { - var theme = _a.theme; - return theme.text1; -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.1, theme.text1); -}); -var StyledExternalLink = styled__default["default"](ExternalLink).attrs({ - activeClassName: activeClassName, -})(templateObject_21 || (templateObject_21 = __makeTemplateObject(["\n ", "\n align-items: left;\n border-radius: 3rem;\n outline: none;\n cursor: pointer;\n text-decoration: none;\n color: ", ";\n font-size: 1rem;\n width: fit-content;\n margin: 0 12px;\n font-weight: 500;\n\n &.", " {\n border-radius: 14px;\n font-weight: 600;\n color: ", ";\n }\n\n :hover,\n :focus {\n color: ", ";\n text-decoration: none;\n }\n"], ["\n ", "\n align-items: left;\n border-radius: 3rem;\n outline: none;\n cursor: pointer;\n text-decoration: none;\n color: ", ";\n font-size: 1rem;\n width: fit-content;\n margin: 0 12px;\n font-weight: 500;\n\n &.", " {\n border-radius: 14px;\n font-weight: 600;\n color: ", ";\n }\n\n :hover,\n :focus {\n color: ", ";\n text-decoration: none;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.flexRowNoWrap; -}, function (_a) { - var theme = _a.theme; - return theme.text2; -}, activeClassName, function (_a) { - var theme = _a.theme; - return theme.text1; -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.1, theme.text1); -}); -function Header$2() { - var _a; - var _b = useActiveWeb3React(), account = _b.account, chainId = _b.chainId; - var userEthBalance = (_a = useNativeCurrencyBalances(account ? [account] : [])) === null || _a === void 0 ? void 0 : _a[account !== null && account !== void 0 ? account : '']; - var _c = __read(useDarkModeManager(), 1), darkMode = _c[0]; - var _d = useTheme(), white = _d.white, black = _d.black; - var toggleClaimModal = useToggleSelfClaimModal(); - var availableClaim = useUserHasAvailableClaim(account); - var claimTxn = useUserHasSubmittedClaim(account !== null && account !== void 0 ? account : undefined).claimTxn; - var showClaimPopup = useShowClaimPopup(); - var scrollY = useScrollPosition__default["default"](); - var _e = CHAIN_INFO[chainId ? chainId : SupportedChainId.MAINNET], infoLink = _e.infoLink, nativeCurrencySymbol = _e.addNetworkInfo.nativeCurrency.symbol; - return (jsxRuntime.jsxs(HeaderFrame, __assign({ showBackground: scrollY > 45 }, { children: [jsxRuntime.jsx(ClaimModal, {}, void 0), jsxRuntime.jsx(Title, __assign({ href: "." }, { children: jsxRuntime.jsxs(UniIcon, { children: [jsxRuntime.jsx(SvgLogo, { fill: darkMode ? white : black, width: "24px", height: "100%", title: "logo" }, void 0), jsxRuntime.jsx(HolidayOrnament, {}, void 0)] }, void 0) }), void 0), jsxRuntime.jsxs(HeaderLinks, { children: [jsxRuntime.jsx(StyledNavLink, __assign({ id: "swap-nav-link", to: '/swap' }, { children: jsxRuntime.jsx(macro.Trans, { children: "Swap" }, void 0) }), void 0), jsxRuntime.jsx(StyledNavLink, __assign({ id: "pool-nav-link", to: '/pool', isActive: function (match, _a) { - var pathname = _a.pathname; - return Boolean(match) || - pathname.startsWith('/add') || - pathname.startsWith('/remove') || - pathname.startsWith('/increase') || - pathname.startsWith('/find'); - } }, { children: jsxRuntime.jsx(macro.Trans, { children: "Pool" }, void 0) }), void 0), (!chainId || chainId === SupportedChainId.MAINNET) && (jsxRuntime.jsx(StyledNavLink, __assign({ id: "vote-nav-link", to: '/vote' }, { children: jsxRuntime.jsx(macro.Trans, { children: "Vote" }, void 0) }), void 0)), jsxRuntime.jsxs(StyledExternalLink, __assign({ id: "charts-nav-link", href: infoLink }, { children: [jsxRuntime.jsx(macro.Trans, { children: "Charts" }, void 0), jsxRuntime.jsx("sup", { children: "\u2197" }, void 0)] }), void 0)] }, void 0), jsxRuntime.jsxs(HeaderControls, { children: [jsxRuntime.jsx(HeaderElement, { children: jsxRuntime.jsx(NetworkSelector, {}, void 0) }, void 0), jsxRuntime.jsxs(HeaderElement, { children: [availableClaim && !showClaimPopup && (jsxRuntime.jsxs(UNIWrapper, __assign({ onClick: toggleClaimModal }, { children: [jsxRuntime.jsx(UNIAmount, __assign({ active: !!account && !availableClaim, style: { pointerEvents: 'auto' } }, { children: jsxRuntime.jsx(ThemedText.White, __assign({ padding: "0 2px" }, { children: claimTxn && !(claimTxn === null || claimTxn === void 0 ? void 0 : claimTxn.receipt) ? (jsxRuntime.jsx(Dots, { children: jsxRuntime.jsx(macro.Trans, { children: "Claiming UNI" }, void 0) }, void 0)) : (jsxRuntime.jsx(macro.Trans, { children: "Claim UNI" }, void 0)) }), void 0) }), void 0), jsxRuntime.jsx(CardNoise, {}, void 0)] }), void 0)), jsxRuntime.jsxs(AccountElement, __assign({ active: !!account }, { children: [account && userEthBalance ? (jsxRuntime.jsx(BalanceText, __assign({ style: { flexShrink: 0, userSelect: 'none' }, pl: "0.75rem", pr: "0.5rem", fontWeight: 500 }, { children: jsxRuntime.jsxs(macro.Trans, { children: [userEthBalance === null || userEthBalance === void 0 ? void 0 : userEthBalance.toSignificant(3), " ", nativeCurrencySymbol] }, void 0) }), void 0)) : null, jsxRuntime.jsx(Web3Status, {}, void 0)] }), void 0)] }, void 0), jsxRuntime.jsx(HeaderElement, { children: jsxRuntime.jsx(Menu, {}, void 0) }, void 0)] }, void 0)] }), void 0)); -} -var templateObject_1$Q, templateObject_2$z, templateObject_3$t, templateObject_4$k, templateObject_5$g, templateObject_6$b, templateObject_7$9, templateObject_8$7, templateObject_9$6, templateObject_10$4, templateObject_11$3, templateObject_12$3, templateObject_13, templateObject_14, templateObject_15, templateObject_16, templateObject_17, templateObject_18, templateObject_19, templateObject_20, templateObject_21; - -var useMachineTimeMs = function (updateInterval) { - var _a = __read(React.useState(Date.now()), 2), now = _a[0], setNow = _a[1]; - useInterval(function () { - setNow(Date.now()); - }, updateInterval); - return now; -}; - -var BodyRow = styled__default["default"].div(templateObject_1$P || (templateObject_1$P = __makeTemplateObject(["\n color: ", ";\n font-size: 12px;\n"], ["\n color: ", ";\n font-size: 12px;\n"])), function (_a) { - var theme = _a.theme; - return theme.black; -}); -var CautionIcon = styled__default["default"](reactFeather.AlertOctagon)(templateObject_2$y || (templateObject_2$y = __makeTemplateObject(["\n color: ", ";\n"], ["\n color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.black; -}); -var Link = styled__default["default"](ExternalLink)(templateObject_3$s || (templateObject_3$s = __makeTemplateObject(["\n color: ", ";\n text-decoration: underline;\n"], ["\n color: ", ";\n text-decoration: underline;\n"])), function (_a) { - var theme = _a.theme; - return theme.black; -}); -var TitleRow = styled__default["default"].div(templateObject_4$j || (templateObject_4$j = __makeTemplateObject(["\n align-items: center;\n display: flex;\n justify-content: flex-start;\n margin-bottom: 8px;\n"], ["\n align-items: center;\n display: flex;\n justify-content: flex-start;\n margin-bottom: 8px;\n"]))); -var TitleText = styled__default["default"].div(templateObject_5$f || (templateObject_5$f = __makeTemplateObject(["\n color: black;\n font-weight: 600;\n font-size: 16px;\n line-height: 20px;\n margin: 0px 12px;\n"], ["\n color: black;\n font-weight: 600;\n font-size: 16px;\n line-height: 20px;\n margin: 0px 12px;\n"]))); -var Wrapper$e = styled__default["default"].div(templateObject_6$a || (templateObject_6$a = __makeTemplateObject(["\n background-color: ", ";\n border-radius: 12px;\n bottom: 60px;\n display: none;\n max-width: 348px;\n padding: 16px 20px;\n position: absolute;\n right: 16px;\n @media screen and (min-width: ", "px) {\n display: block;\n }\n"], ["\n background-color: ", ";\n border-radius: 12px;\n bottom: 60px;\n display: none;\n max-width: 348px;\n padding: 16px 20px;\n position: absolute;\n right: 16px;\n @media screen and (min-width: ", "px) {\n display: block;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.yellow3; -}, MEDIA_WIDTHS.upToMedium); -function ChainConnectivityWarning() { - var chainId = useActiveWeb3React().chainId; - var info = CHAIN_INFO[chainId !== null && chainId !== void 0 ? chainId : SupportedChainId.MAINNET]; - var label = info === null || info === void 0 ? void 0 : info.label; - return (jsxRuntime.jsxs(Wrapper$e, { children: [jsxRuntime.jsxs(TitleRow, { children: [jsxRuntime.jsx(CautionIcon, {}, void 0), jsxRuntime.jsx(TitleText, { children: jsxRuntime.jsx(macro.Trans, { children: "Network Warning" }, void 0) }, void 0)] }, void 0), jsxRuntime.jsxs(BodyRow, { children: [chainId === SupportedChainId.MAINNET ? (jsxRuntime.jsx(macro.Trans, { children: "You may have lost your network connection." }, void 0)) : (jsxRuntime.jsxs(macro.Trans, { children: ["You may have lost your network connection, or ", label, " might be down right now."] }, void 0)), ' ', info.statusPage !== undefined && (jsxRuntime.jsxs("span", { children: [jsxRuntime.jsx(macro.Trans, { children: "Check network status" }, void 0), ' ', jsxRuntime.jsx(Link, __assign({ href: info.statusPage || '' }, { children: jsxRuntime.jsx(macro.Trans, { children: "here." }, void 0) }), void 0)] }, void 0))] }, void 0)] }, void 0)); -} -var templateObject_1$P, templateObject_2$y, templateObject_3$s, templateObject_4$j, templateObject_5$f, templateObject_6$a; - -var StyledPolling$1 = styled__default["default"].div(templateObject_2$x || (templateObject_2$x = __makeTemplateObject(["\n position: fixed;\n display: flex;\n align-items: center;\n right: 0;\n bottom: 0;\n padding: 1rem;\n color: ", ";\n transition: 250ms ease color;\n\n ", "\n"], ["\n position: fixed;\n display: flex;\n align-items: center;\n right: 0;\n bottom: 0;\n padding: 1rem;\n color: ", ";\n transition: 250ms ease color;\n\n ", "\n"])), function (_a) { - var theme = _a.theme, warning = _a.warning; - return (warning ? theme.yellow3 : theme.green1); -}, function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToMedium(templateObject_1$O || (templateObject_1$O = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); -}); -var StyledPollingNumber = styled__default["default"](ThemedText.Small)(templateObject_3$r || (templateObject_3$r = __makeTemplateObject(["\n transition: opacity 0.25s ease;\n opacity: ", ";\n :hover {\n opacity: 1;\n }\n\n a {\n color: unset;\n }\n a:hover {\n text-decoration: none;\n color: unset;\n }\n"], ["\n transition: opacity 0.25s ease;\n opacity: ", ";\n :hover {\n opacity: 1;\n }\n\n a {\n color: unset;\n }\n a:hover {\n text-decoration: none;\n color: unset;\n }\n"])), function (_a) { - var breathe = _a.breathe, hovering = _a.hovering; - return (hovering ? 0.7 : breathe ? 1 : 0.5); -}); -var StyledPollingDot$1 = styled__default["default"].div(templateObject_4$i || (templateObject_4$i = __makeTemplateObject(["\n width: 8px;\n height: 8px;\n min-height: 8px;\n min-width: 8px;\n border-radius: 50%;\n position: relative;\n background-color: ", ";\n transition: 250ms ease background-color;\n"], ["\n width: 8px;\n height: 8px;\n min-height: 8px;\n min-width: 8px;\n border-radius: 50%;\n position: relative;\n background-color: ", ";\n transition: 250ms ease background-color;\n"])), function (_a) { - var theme = _a.theme, warning = _a.warning; - return (warning ? theme.yellow3 : theme.green1); -}); -var StyledGasDot = styled__default["default"].div(templateObject_5$e || (templateObject_5$e = __makeTemplateObject(["\n background-color: ", ";\n border-radius: 50%;\n height: 4px;\n min-height: 4px;\n min-width: 4px;\n position: relative;\n transition: 250ms ease background-color;\n width: 4px;\n"], ["\n background-color: ", ";\n border-radius: 50%;\n height: 4px;\n min-height: 4px;\n min-width: 4px;\n position: relative;\n transition: 250ms ease background-color;\n width: 4px;\n"])), function (_a) { - var theme = _a.theme; - return theme.text3; -}); -var rotate360$1 = styled.keyframes(templateObject_6$9 || (templateObject_6$9 = __makeTemplateObject(["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"], ["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"]))); -var Spinner$1 = styled__default["default"].div(templateObject_7$8 || (templateObject_7$8 = __makeTemplateObject(["\n animation: ", " 1s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n transform: translateZ(0);\n\n border-top: 1px solid transparent;\n border-right: 1px solid transparent;\n border-bottom: 1px solid transparent;\n border-left: 2px solid ", ";\n background: transparent;\n width: 14px;\n height: 14px;\n border-radius: 50%;\n position: relative;\n transition: 250ms ease border-color;\n\n left: -3px;\n top: -3px;\n"], ["\n animation: ", " 1s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n transform: translateZ(0);\n\n border-top: 1px solid transparent;\n border-right: 1px solid transparent;\n border-bottom: 1px solid transparent;\n border-left: 2px solid ", ";\n background: transparent;\n width: 14px;\n height: 14px;\n border-radius: 50%;\n position: relative;\n transition: 250ms ease border-color;\n\n left: -3px;\n top: -3px;\n"])), rotate360$1, function (_a) { - var theme = _a.theme, warning = _a.warning; - return (warning ? theme.yellow3 : theme.green1); -}); -var DEFAULT_MS_BEFORE_WARNING = ms__default["default"](templateObject_8$6 || (templateObject_8$6 = __makeTemplateObject(["10m"], ["10m"]))); -var NETWORK_HEALTH_CHECK_MS = ms__default["default"](templateObject_9$5 || (templateObject_9$5 = __makeTemplateObject(["10s"], ["10s"]))); -function Polling() { - var _a, _b; - var chainId = useActiveWeb3React().chainId; - var blockNumber = useBlockNumber(); - var _c = __read(React.useState(false), 2), isMounting = _c[0], setIsMounting = _c[1]; - var _d = __read(React.useState(false), 2), isHover = _d[0], setIsHover = _d[1]; - var machineTime = useMachineTimeMs(NETWORK_HEALTH_CHECK_MS); - var blockTime = useCurrentBlockTimestamp(); - var theme = useTheme(); - var ethGasPrice = useGasPrice(); - var priceGwei = ethGasPrice ? JSBI__default["default"].divide(ethGasPrice, JSBI__default["default"].BigInt(1000000000)) : undefined; - var waitMsBeforeWarning = (_b = (chainId ? (_a = CHAIN_INFO[chainId]) === null || _a === void 0 ? void 0 : _a.blockWaitMsBeforeWarning : DEFAULT_MS_BEFORE_WARNING)) !== null && _b !== void 0 ? _b : DEFAULT_MS_BEFORE_WARNING; - var warning = Boolean(!!blockTime && machineTime - blockTime.mul(1000).toNumber() > waitMsBeforeWarning); - React.useEffect(function () { - if (!blockNumber) { - return; - } - setIsMounting(true); - var mountingTimer = setTimeout(function () { return setIsMounting(false); }, 1000); - // this will clear Timeout when component unmount like in willComponentUnmount - return function () { - clearTimeout(mountingTimer); - }; - }, [blockNumber] //useEffect will run only one time - //if you pass a value to array, like this [data] than clearTimeout will run every time this value changes (useEffect re-run) - ); - //TODO - chainlink gas oracle is really slow. Can we get a better data source? - return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsxs(StyledPolling$1, __assign({ onMouseEnter: function () { return setIsHover(true); }, onMouseLeave: function () { return setIsHover(false); }, warning: warning }, { children: [jsxRuntime.jsx(ExternalLink, __assign({ href: 'https://etherscan.io/gastracker' }, { children: priceGwei ? (jsxRuntime.jsxs(RowFixed, __assign({ style: { marginRight: '8px' } }, { children: [jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: "11px", mr: "8px", color: theme.text3 }, { children: jsxRuntime.jsxs(MouseoverTooltip, __assign({ text: jsxRuntime.jsx(macro.Trans, { children: "The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI." }, void 0) }, { children: [priceGwei.toString(), " ", jsxRuntime.jsx(macro.Trans, { children: "gwei" }, void 0)] }), void 0) }), void 0), jsxRuntime.jsx(StyledGasDot, {}, void 0)] }), void 0)) : null }), void 0), jsxRuntime.jsx(StyledPollingNumber, __assign({ breathe: isMounting, hovering: isHover }, { children: jsxRuntime.jsx(ExternalLink, __assign({ href: chainId && blockNumber ? getExplorerLink(chainId, blockNumber.toString(), ExplorerDataType.BLOCK) : '' }, { children: jsxRuntime.jsxs(MouseoverTooltip, __assign({ text: jsxRuntime.jsx(macro.Trans, { children: "The most recent block number on this network. Prices update on every block." }, void 0) }, { children: [blockNumber, "\u2002"] }), void 0) }), void 0) }), void 0), jsxRuntime.jsx(StyledPollingDot$1, __assign({ warning: warning }, { children: isMounting && jsxRuntime.jsx(Spinner$1, { warning: warning }, void 0) }), void 0), ' '] }), void 0), warning && jsxRuntime.jsx(ChainConnectivityWarning, {}, void 0)] }, void 0) }, void 0)); -} -var templateObject_1$O, templateObject_2$x, templateObject_3$r, templateObject_4$i, templateObject_5$e, templateObject_6$9, templateObject_7$8, templateObject_8$6, templateObject_9$5; - -var StyledClaimPopup = styled__default["default"](AutoColumn)(templateObject_1$N || (templateObject_1$N = __makeTemplateObject(["\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n border-radius: 20px;\n padding: 1.5rem;\n overflow: hidden;\n position: relative;\n max-width: 360px;\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n"], ["\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n border-radius: 20px;\n padding: 1.5rem;\n overflow: hidden;\n position: relative;\n max-width: 360px;\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n"]))); -var StyledClose$1 = styled__default["default"](reactFeather.X)(templateObject_2$w || (templateObject_2$w = __makeTemplateObject(["\n position: absolute;\n right: 10px;\n top: 10px;\n\n :hover {\n cursor: pointer;\n }\n"], ["\n position: absolute;\n right: 10px;\n top: 10px;\n\n :hover {\n cursor: pointer;\n }\n"]))); -var rotate = styled.keyframes(templateObject_3$q || (templateObject_3$q = __makeTemplateObject(["\n 0% {\n transform: perspective(1000px) rotateY(0deg);\n }\n\n 100% {\n transform: perspective(1000px) rotateY(360deg);\n }\n"], ["\n 0% {\n transform: perspective(1000px) rotateY(0deg);\n }\n\n 100% {\n transform: perspective(1000px) rotateY(360deg);\n }\n"]))); -var UniToken = styled__default["default"].img(templateObject_4$h || (templateObject_4$h = __makeTemplateObject(["\n animation: ", " 5s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n"], ["\n animation: ", " 5s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n"])), rotate); -function ClaimPopup() { - var _a; - var account = useActiveWeb3React().account; - // dont store these in persisted state yet - var showClaimPopup = useShowClaimPopup(); - var toggleShowClaimPopup = useToggleShowClaimPopup(); - // toggle for showing this modal - var showClaimModal = useModalOpen(ApplicationModal.SELF_CLAIM); - var toggleSelfClaimModal = useToggleSelfClaimModal(); - var handleToggleSelfClaimModal = React.useCallback(function () { - ReactGA__default["default"].event({ - category: 'MerkleDrop', - action: 'Toggle self claim modal', - }); - toggleSelfClaimModal(); - }, [toggleSelfClaimModal]); - // const userHasAvailableclaim = useUserHasAvailableClaim() - var userHasAvailableclaim = useUserHasAvailableClaim(account); - var unclaimedAmount = useUserUnclaimedAmount(account); - // listen for available claim and show popup if needed - React.useEffect(function () { - if (userHasAvailableclaim) { - ReactGA__default["default"].event({ - category: 'MerkleDrop', - action: 'Show claim popup', - }); - toggleShowClaimPopup(); - } - // the toggleShowClaimPopup function changes every time the popup changes, so this will cause an infinite loop. - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [userHasAvailableclaim]); - return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: showClaimPopup && !showClaimModal && (jsxRuntime.jsxs(StyledClaimPopup, __assign({ gap: "md" }, { children: [jsxRuntime.jsx(CardBGImage, {}, void 0), jsxRuntime.jsx(CardNoise, {}, void 0), jsxRuntime.jsx(StyledClose$1, { stroke: "white", onClick: toggleShowClaimPopup }, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ style: { padding: '2rem 0', zIndex: 10 }, justify: "center" }, { children: [jsxRuntime.jsx(UniToken, { width: "48px", src: tokenLogo }, void 0), ' ', jsxRuntime.jsxs(ThemedText.White, __assign({ style: { marginTop: '1rem' }, fontSize: 36, fontWeight: 600 }, { children: [unclaimedAmount === null || unclaimedAmount === void 0 ? void 0 : unclaimedAmount.toFixed(0, (_a = { groupSeparator: ',' }) !== null && _a !== void 0 ? _a : '-'), " UNI"] }), void 0), jsxRuntime.jsxs(ThemedText.White, __assign({ style: { paddingTop: '1.25rem', textAlign: 'center' }, fontWeight: 600, color: "white" }, { children: [jsxRuntime.jsx("span", __assign({ role: "img", "aria-label": "party" }, { children: "\uD83C\uDF89" }), void 0), ' ', jsxRuntime.jsx(macro.Trans, { children: "UNI has arrived" }, void 0), ' ', jsxRuntime.jsx("span", __assign({ role: "img", "aria-label": "party" }, { children: "\uD83C\uDF89" }), void 0)] }), void 0), jsxRuntime.jsx(ThemedText.SubHeader, __assign({ style: { paddingTop: '0.5rem', textAlign: 'center' }, color: "white" }, { children: jsxRuntime.jsxs(macro.Trans, { children: ["Thanks for being part of the Uniswap community ", jsxRuntime.jsx(reactFeather.Heart, { size: 12 }, void 0)] }, void 0) }), void 0)] }), void 0), jsxRuntime.jsx(AutoColumn, __assign({ style: { zIndex: 10 }, justify: "center" }, { children: jsxRuntime.jsx(ButtonPrimary, __assign({ padding: "8px", "$borderRadius": "8px", width: 'fit-content', onClick: handleToggleSelfClaimModal }, { children: jsxRuntime.jsx(macro.Trans, { children: "Claim your UNI tokens" }, void 0) }), void 0) }), void 0)] }), void 0)) }, void 0)); -} -var templateObject_1$N, templateObject_2$w, templateObject_3$q, templateObject_4$h; - -var RowNoFlex$1 = styled__default["default"](AutoRow)(templateObject_1$M || (templateObject_1$M = __makeTemplateObject(["\n flex-wrap: nowrap;\n"], ["\n flex-wrap: nowrap;\n"]))); -function FailedNetworkSwitchPopup(_a) { - var chainId = _a.chainId; - var chainInfo = CHAIN_INFO[chainId]; - var theme = React.useContext(styled.ThemeContext); - return (jsxRuntime.jsxs(RowNoFlex$1, { children: [jsxRuntime.jsx("div", __assign({ style: { paddingRight: 16 } }, { children: jsxRuntime.jsx(reactFeather.AlertCircle, { color: theme.red1, size: 24 }, void 0) }), void 0), jsxRuntime.jsx(AutoColumn, __assign({ gap: "8px" }, { children: jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 500 }, { children: jsxRuntime.jsxs(macro.Trans, { children: ["Failed to switch networks from the Uniswap Interface. In order to use Uniswap on ", chainInfo.label, ", you must change the network in your wallet."] }, void 0) }), void 0) }), void 0)] }, void 0)); -} -var templateObject_1$M; - -var RowNoFlex = styled__default["default"](AutoRow)(templateObject_1$L || (templateObject_1$L = __makeTemplateObject(["\n flex-wrap: nowrap;\n"], ["\n flex-wrap: nowrap;\n"]))); -function TransactionPopup(_a) { - var hash = _a.hash; - var chainId = useActiveWeb3React().chainId; - var tx = useTransaction(hash); - var theme = React.useContext(styled.ThemeContext); - if (!tx) - return null; - var success = Boolean(tx.receipt && tx.receipt.status === 1); - return (jsxRuntime.jsxs(RowNoFlex, { children: [jsxRuntime.jsx("div", __assign({ style: { paddingRight: 16 } }, { children: success ? jsxRuntime.jsx(reactFeather.CheckCircle, { color: theme.green1, size: 24 }, void 0) : jsxRuntime.jsx(reactFeather.AlertCircle, { color: theme.red1, size: 24 }, void 0) }), void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "8px" }, { children: [jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 500 }, { children: jsxRuntime.jsx(TransactionSummary, { info: tx.info }, void 0) }), void 0), chainId && (jsxRuntime.jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, hash, ExplorerDataType.TRANSACTION) }, { children: "View on Explorer" }), void 0))] }), void 0)] }, void 0)); -} -var templateObject_1$L; - -var StyledClose = styled__default["default"](reactFeather.X)(templateObject_1$K || (templateObject_1$K = __makeTemplateObject(["\n position: absolute;\n right: 10px;\n top: 10px;\n\n :hover {\n cursor: pointer;\n }\n"], ["\n position: absolute;\n right: 10px;\n top: 10px;\n\n :hover {\n cursor: pointer;\n }\n"]))); -var Popup = styled__default["default"].div(templateObject_3$p || (templateObject_3$p = __makeTemplateObject(["\n display: inline-block;\n width: 100%;\n padding: 1em;\n background-color: ", ";\n position: relative;\n border-radius: 10px;\n padding: 20px;\n padding-right: 35px;\n overflow: hidden;\n\n ", "\n"], ["\n display: inline-block;\n width: 100%;\n padding: 1em;\n background-color: ", ";\n position: relative;\n border-radius: 10px;\n padding: 20px;\n padding-right: 35px;\n overflow: hidden;\n\n ", "\n"])), function (_a) { - var theme = _a.theme; - return theme.bg0; -}, function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToSmall(templateObject_2$v || (templateObject_2$v = __makeTemplateObject(["\n min-width: 290px;\n &:not(:last-of-type) {\n margin-right: 20px;\n }\n "], ["\n min-width: 290px;\n &:not(:last-of-type) {\n margin-right: 20px;\n }\n "]))); -}); -var Fader = styled__default["default"].div(templateObject_4$g || (templateObject_4$g = __makeTemplateObject(["\n position: absolute;\n bottom: 0px;\n left: 0px;\n width: 100%;\n height: 2px;\n background-color: ", ";\n"], ["\n position: absolute;\n bottom: 0px;\n left: 0px;\n width: 100%;\n height: 2px;\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg3; -}); -var AnimatedFader = reactSpring.animated(Fader); -function PopupItem(_a) { - var removeAfterMs = _a.removeAfterMs, content = _a.content, popKey = _a.popKey; - var removePopup = useRemovePopup(); - var removeThisPopup = React.useCallback(function () { return removePopup(popKey); }, [popKey, removePopup]); - React.useEffect(function () { - if (removeAfterMs === null) - return undefined; - var timeout = setTimeout(function () { - removeThisPopup(); - }, removeAfterMs); - return function () { - clearTimeout(timeout); - }; - }, [removeAfterMs, removeThisPopup]); - var theme = React.useContext(styled.ThemeContext); - var popupContent; - if ('txn' in content) { - var hash = content.txn.hash; - popupContent = jsxRuntime.jsx(TransactionPopup, { hash: hash }, void 0); - } - else if ('failedSwitchNetwork' in content) { - popupContent = jsxRuntime.jsx(FailedNetworkSwitchPopup, { chainId: content.failedSwitchNetwork }, void 0); - } - var faderStyle = web.useSpring({ - from: { width: '100%' }, - to: { width: '0%' }, - config: { duration: removeAfterMs !== null && removeAfterMs !== void 0 ? removeAfterMs : undefined }, - }); - return (jsxRuntime.jsxs(Popup, { children: [jsxRuntime.jsx(StyledClose, { color: theme.text2, onClick: removeThisPopup }, void 0), popupContent, removeAfterMs !== null ? jsxRuntime.jsx(AnimatedFader, { style: faderStyle }, void 0) : null] }, void 0)); -} -var templateObject_1$K, templateObject_2$v, templateObject_3$p, templateObject_4$g; - -var BGImage = "055f83ffb7252729.svg"; - -var Wrapper$d = styled__default["default"](AutoColumn)(templateObject_2$u || (templateObject_2$u = __makeTemplateObject(["\n background: #edeef2;\n position: relative;\n border-radius: 12px;\n padding: 18px;\n max-width: 360px;\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n color: ", ";\n overflow: hidden;\n\n ", "\n"], ["\n background: #edeef2;\n position: relative;\n border-radius: 12px;\n padding: 18px;\n max-width: 360px;\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n color: ", ";\n overflow: hidden;\n\n ", "\n"])), function (_a) { - var theme = _a.theme; - return theme.text1; -}, function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToSmall(templateObject_1$J || (templateObject_1$J = __makeTemplateObject(["\n max-width: 100%;\n "], ["\n max-width: 100%;\n "]))); -}); -var BGOrb = styled__default["default"].img(templateObject_3$o || (templateObject_3$o = __makeTemplateObject(["\n position: absolute;\n right: -64px;\n top: -64px;\n width: 180px;\n z-index: ", ";\n"], ["\n position: absolute;\n right: -64px;\n top: -64px;\n width: 180px;\n z-index: ", ";\n"])), Z_INDEX.sticky); -var WrappedCloseIcon = styled__default["default"](reactFeather.X)(templateObject_4$f || (templateObject_4$f = __makeTemplateObject(["\n position: absolute;\n top: 10px;\n right: 10px;\n width: 20px;\n height: 20px;\n stroke: #7c7c80;\n z-index: ", ";\n :hover {\n cursor: pointer;\n opacity: 0.8;\n }\n"], ["\n position: absolute;\n top: 10px;\n right: 10px;\n width: 20px;\n height: 20px;\n stroke: #7c7c80;\n z-index: ", ";\n :hover {\n cursor: pointer;\n opacity: 0.8;\n }\n"])), Z_INDEX.fixed); -var END_TIMESTAMP = 1642272346; // Jan 15th -function SurveyPopup() { - var theme = useTheme(); - var _a = __read(useShowSurveyPopup(), 2), showPopup = _a[0], setShowSurveyPopup = _a[1]; - // show popup to 1% of users - React.useEffect(function () { - // has not visited page during A/B testing if undefined - if (showPopup === undefined) { - if (Math.random() < 0.01) { - setShowSurveyPopup(true); - // log a case of succesful view - ReactGA__default["default"].event({ - category: 'Survey', - action: 'Saw Survey', - }); - } - } - }, [setShowSurveyPopup, showPopup]); - // limit survey to 24 hours based on timestamps - var timestamp = useCurrentBlockTimestamp(); - var durationOver = timestamp ? timestamp.toNumber() > END_TIMESTAMP : false; - return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: !showPopup || durationOver ? null : (jsxRuntime.jsxs(Wrapper$d, __assign({ gap: "10px" }, { children: [jsxRuntime.jsx(WrappedCloseIcon, { onClick: function () { - ReactGA__default["default"].event({ - category: 'Survey', - action: 'Clicked Survey Link', - }); - setShowSurveyPopup(false); - } }, void 0), jsxRuntime.jsx(BGOrb, { src: BGImage }, void 0), jsxRuntime.jsx(ExternalLink, __assign({ href: "https://www.surveymonkey.com/r/YGWV9VD" }, { children: jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(reactFeather.MessageCircle, { stroke: theme.black, size: "20px", strokeWidth: "1px" }, void 0), jsxRuntime.jsx(ThemedText.White, __assign({ fontWeight: 600, color: theme.black, ml: "6px" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Tell us what you think \u2197" }, void 0) }), void 0)] }, void 0) }), void 0), jsxRuntime.jsx(ThemedText.Black, __assign({ style: { zIndex: Z_INDEX.fixed }, fontWeight: 400, fontSize: "12px", color: theme.black }, { children: jsxRuntime.jsx(macro.Trans, { children: "Take a 10 minute survey to help us improve your experience in the Uniswap app." }, void 0) }), void 0)] }), void 0)) }, void 0)); -} -var templateObject_1$J, templateObject_2$u, templateObject_3$o, templateObject_4$f; - -var MobilePopupWrapper = styled__default["default"].div(templateObject_2$t || (templateObject_2$t = __makeTemplateObject(["\n position: relative;\n max-width: 100%;\n height: ", ";\n margin: ", ";\n margin-bottom: ", "};\n\n display: none;\n ", ";\n"], ["\n position: relative;\n max-width: 100%;\n height: ", ";\n margin: ", ";\n margin-bottom: ", "};\n\n display: none;\n ", ";\n"])), function (_a) { - var height = _a.height; - return height; -}, function (_a) { - var height = _a.height; - return (height ? '0 auto;' : 0); -}, function (_a) { - var height = _a.height; - return (height ? '20px' : 0); -}, function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToSmall(templateObject_1$I || (templateObject_1$I = __makeTemplateObject(["\n display: block;\n "], ["\n display: block;\n "]))); -}); -var MobilePopupInner = styled__default["default"].div(templateObject_3$n || (templateObject_3$n = __makeTemplateObject(["\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 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"]))); -var StopOverflowQuery = "@media screen and (min-width: " + (MEDIA_WIDTHS.upToMedium + 1) + "px) and (max-width: " + (MEDIA_WIDTHS.upToMedium + 500) + "px)"; -var FixedPopupColumn = styled__default["default"](AutoColumn)(templateObject_5$d || (templateObject_5$d = __makeTemplateObject(["\n position: fixed;\n top: ", ";\n right: 1rem;\n max-width: 355px !important;\n width: 100%;\n z-index: 3;\n\n ", ";\n\n ", " {\n top: ", ";\n }\n"], ["\n position: fixed;\n top: ", ";\n right: 1rem;\n max-width: 355px !important;\n width: 100%;\n z-index: 3;\n\n ", ";\n\n ", " {\n top: ", ";\n }\n"])), function (_a) { - var extraPadding = _a.extraPadding; - return (extraPadding ? '64px' : '56px'); -}, function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToSmall(templateObject_4$e || (templateObject_4$e = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); -}, StopOverflowQuery, function (_a) { - var extraPadding = _a.extraPadding, xlPadding = _a.xlPadding; - return (xlPadding ? '64px' : extraPadding ? '64px' : '56px'); -}); -function Popups() { - // get all popups - var activePopups = useActivePopups(); - // show survey popup if user has not closed - var _a = __read(useShowSurveyPopup(), 1), showSurveyPopup = _a[0]; - var urlWarningActive = useURLWarningVisible(); - // need extra padding if network is not L1 Ethereum - var chainId = useActiveWeb3React().chainId; - var isNotOnMainnet = Boolean(chainId && chainId !== SupportedChainId.MAINNET); - return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs(FixedPopupColumn, __assign({ gap: "20px", extraPadding: urlWarningActive, xlPadding: isNotOnMainnet }, { children: [jsxRuntime.jsx(ClaimPopup, {}, void 0), jsxRuntime.jsx(SurveyPopup, {}, void 0), activePopups.map(function (item) { return (jsxRuntime.jsx(PopupItem, { content: item.content, popKey: item.key, removeAfterMs: item.removeAfterMs }, item.key)); })] }), void 0), jsxRuntime.jsx(MobilePopupWrapper, __assign({ height: (activePopups === null || activePopups === void 0 ? void 0 : activePopups.length) > 0 || showSurveyPopup ? 'fit-content' : 0 }, { children: jsxRuntime.jsxs(MobilePopupInner, { children: [jsxRuntime.jsx(SurveyPopup, {}, void 0), activePopups // reverse so new items up front - .slice(0) - .reverse() - .map(function (item) { return (jsxRuntime.jsx(PopupItem, { content: item.content, popKey: item.key, removeAfterMs: item.removeAfterMs }, item.key)); })] }, void 0) }), void 0)] }, void 0)); -} -var templateObject_1$I, templateObject_2$t, templateObject_3$n, templateObject_4$e, templateObject_5$d; - -function useEagerConnect() { - var _a = core.useWeb3React(), activate = _a.activate, active = _a.active; - var _b = __read(React.useState(false), 2), tried = _b[0], setTried = _b[1]; - // gnosisSafe.isSafeApp() races a timeout against postMessage, so it delays pageload if we are not in a safe app; - // if we are not embedded in an iframe, it is not worth checking - var _c = __read(React.useState(!IS_IN_IFRAME), 2), triedSafe = _c[0], setTriedSafe = _c[1]; - // first, try connecting to a gnosis safe - React.useEffect(function () { - if (!triedSafe) { - gnosisSafe.isSafeApp().then(function (loadedInSafe) { - if (loadedInSafe) { - activate(gnosisSafe, undefined, true).catch(function () { - setTriedSafe(true); - }); - } - else { - setTriedSafe(true); - } - }); - } - }, [activate, setTriedSafe, triedSafe]); - // then, if that fails, try connecting to an injected connector - React.useEffect(function () { - if (!active && triedSafe) { - injected.isAuthorized().then(function (isAuthorized) { - if (isAuthorized) { - activate(injected, undefined, true).catch(function () { - setTried(true); - }); - } - else { - if (isMobile && window.ethereum) { - activate(injected, undefined, true).catch(function () { - setTried(true); - }); - } - else { - setTried(true); - } - } - }); - } - }, [activate, active, triedSafe]); - // wait until we get confirmation of a connection to flip the flag - React.useEffect(function () { - if (active) { - setTried(true); - } - }, [active]); - return tried; -} -/** - * Use for network and injected - logs user in - * and out after checking what network theyre on - */ -function useInactiveListener(suppress) { - if (suppress === void 0) { suppress = false; } - var _a = core.useWeb3React(), active = _a.active, error = _a.error, activate = _a.activate; - React.useEffect(function () { - var ethereum = window.ethereum; - if (ethereum && ethereum.on && !active && !error && !suppress) { - var handleChainChanged_1 = function () { - // eat errors - activate(injected, undefined, true).catch(function (error) { - console.error('Failed to activate after chain changed', error); - }); - }; - var handleAccountsChanged_1 = function (accounts) { - if (accounts.length > 0) { - // eat errors - activate(injected, undefined, true).catch(function (error) { - console.error('Failed to activate after accounts changed', error); - }); - } - }; - ethereum.on('chainChanged', handleChainChanged_1); - ethereum.on('accountsChanged', handleAccountsChanged_1); - return function () { - if (ethereum.removeListener) { - ethereum.removeListener('chainChanged', handleChainChanged_1); - ethereum.removeListener('accountsChanged', handleAccountsChanged_1); - } - }; - } - return undefined; - }, [active, error, suppress, activate]); -} - -var MessageWrapper = styled__default["default"].div(templateObject_1$H || (templateObject_1$H = __makeTemplateObject(["\n display: flex;\n align-items: center;\n justify-content: center;\n height: 20rem;\n"], ["\n display: flex;\n align-items: center;\n justify-content: center;\n height: 20rem;\n"]))); -var Message = styled__default["default"].h2(templateObject_2$s || (templateObject_2$s = __makeTemplateObject(["\n color: ", ";\n"], ["\n color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.secondary1; -}); -function Web3ReactManager(_a) { - var children = _a.children; - var active = core.useWeb3React().active; - var _b = core.useWeb3React(NetworkContextName), networkActive = _b.active, networkError = _b.error, activateNetwork = _b.activate; - // try to eagerly connect to an injected provider, if it exists and has granted access already - var triedEager = useEagerConnect(); - // after eagerly trying injected, if the network connect ever isn't active or in an error state, activate itd - React.useEffect(function () { - if (triedEager && !networkActive && !networkError && !active) { - activateNetwork(network); - } - }, [triedEager, networkActive, networkError, activateNetwork, active]); - // when there's no account connected, react to logins (broadly speaking) on the injected provider, if it exists - useInactiveListener(!triedEager); - // if the account context isn't active, and there's an error on the network context, it's an irrecoverable error - if (triedEager && !active && networkError) { - return (jsxRuntime.jsx(MessageWrapper, { children: jsxRuntime.jsx(Message, { children: jsxRuntime.jsx(macro.Trans, { children: "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device." }, void 0) }, void 0) }, void 0)); - } - return children; -} -var templateObject_1$H, templateObject_2$s; - -function DarkModeQueryParamReader(_a) { - var search = _a.location.search; - var dispatch = useAppDispatch(); - React.useEffect(function () { - if (!search) - return; - if (search.length < 2) - return; - var parsed = qs.parse(search, { - parseArrays: false, - ignoreQueryPrefix: true, - }); - var theme = parsed.theme; - if (typeof theme !== 'string') - return; - if (theme.toLowerCase() === 'light') { - dispatch(updateUserDarkMode({ userDarkMode: false })); - } - else if (theme.toLowerCase() === 'dark') { - dispatch(updateUserDarkMode({ userDarkMode: true })); - } - }, [dispatch, search]); - return null; -} - -var _a$2, _b$1, _c$1, _d$1; -var L2Icon = styled__default["default"].img(templateObject_1$G || (templateObject_1$G = __makeTemplateObject(["\n width: 24px;\n height: 24px;\n margin-right: 16px;\n"], ["\n width: 24px;\n height: 24px;\n margin-right: 16px;\n"]))); -styled__default["default"].div(templateObject_2$r || (templateObject_2$r = __makeTemplateObject(["\n align-items: center;\n display: flex;\n justify-content: flex-start;\n padding: 0 20px 20px 20px;\n"], ["\n align-items: center;\n display: flex;\n justify-content: flex-start;\n padding: 0 20px 20px 20px;\n"]))); -var BodyText = styled__default["default"].div(templateObject_3$m || (templateObject_3$m = __makeTemplateObject(["\n color: ", ";\n display: flex;\n align-items: center;\n justify-content: flex-start;\n margin: 8px;\n font-size: 14px;\n"], ["\n color: ", ";\n display: flex;\n align-items: center;\n justify-content: flex-start;\n margin: 8px;\n font-size: 14px;\n"])), function (_a) { - var color = _a.color; - return color; -}); -var RootWrapper = styled__default["default"].div(templateObject_4$d || (templateObject_4$d = __makeTemplateObject(["\n position: relative;\n margin-top: 16px;\n"], ["\n position: relative;\n margin-top: 16px;\n"]))); -var SHOULD_SHOW_ALERT = (_a$2 = {}, - _a$2[SupportedChainId.OPTIMISM] = true, - _a$2[SupportedChainId.OPTIMISTIC_KOVAN] = true, - _a$2[SupportedChainId.ARBITRUM_ONE] = true, - _a$2[SupportedChainId.ARBITRUM_RINKEBY] = true, - _a$2[SupportedChainId.POLYGON] = true, - _a$2[SupportedChainId.POLYGON_MUMBAI] = true, - _a$2); -var BG_COLORS_BY_DARK_MODE_AND_CHAIN_ID = { - dark: (_b$1 = {}, - _b$1[SupportedChainId.POLYGON] = 'radial-gradient(100% 93.36% at 0% 6.64%, rgba(160, 108, 247, 0.1) 0%, rgba(82, 32, 166, 0.1) 100%)', - _b$1[SupportedChainId.POLYGON_MUMBAI] = 'radial-gradient(100% 93.36% at 0% 6.64%, rgba(160, 108, 247, 0.1) 0%, rgba(82, 32, 166, 0.1) 100%)', - _b$1[SupportedChainId.OPTIMISM] = 'radial-gradient(948% 292% at 42% 0%, rgba(255, 58, 212, 0.01) 0%, rgba(255, 255, 255, 0.04) 100%),radial-gradient(98% 96% at 2% 0%, rgba(255, 39, 39, 0.01) 0%, rgba(235, 0, 255, 0.01) 96%)', - _b$1[SupportedChainId.OPTIMISTIC_KOVAN] = 'radial-gradient(948% 292% at 42% 0%, rgba(255, 58, 212, 0.04) 0%, rgba(255, 255, 255, 0.04) 100%),radial-gradient(98% 96% at 2% 0%, rgba(255, 39, 39, 0.04) 0%, rgba(235, 0, 255, 0.01 96%)', - _b$1[SupportedChainId.ARBITRUM_ONE] = 'radial-gradient(285% 8200% at 30% 50%, rgba(40, 160, 240, 0.01) 0%, rgba(219, 255, 0, 0) 100%),radial-gradient(75% 75% at 0% 0%, rgba(150, 190, 220, 0.05) 0%, rgba(33, 114, 229, 0.05) 100%), hsla(0, 0%, 100%, 0.05)', - _b$1[SupportedChainId.ARBITRUM_RINKEBY] = 'radial-gradient(285% 8200% at 30% 50%, rgba(40, 160, 240, 0.05) 0%, rgba(219, 255, 0, 0) 100%),radial-gradient(75% 75% at 0% 0%, rgba(150, 190, 220, 0.05) 0%, rgba(33, 114, 229, 0.1) 100%), hsla(0, 0%, 100%, 0.05)', - _b$1), - light: (_c$1 = {}, - _c$1[SupportedChainId.POLYGON] = 'radial-gradient(182.71% 205.59% at 2.81% 7.69%, rgba(130, 71, 229, 0.2) 0%, rgba(167, 202, 255, 0.2) 100%)', - _c$1[SupportedChainId.POLYGON_MUMBAI] = 'radial-gradient(182.71% 205.59% at 2.81% 7.69%, rgba(130, 71, 229, 0.2) 0%, rgba(167, 202, 255, 0.2) 100%)', - _c$1[SupportedChainId.OPTIMISM] = 'radial-gradient(92% 105% at 50% 7%, rgba(255, 58, 212, 0.04) 0%, rgba(255, 255, 255, 0.03) 100%),radial-gradient(100% 97% at 0% 12%, rgba(235, 0, 255, 0.1) 0%, rgba(243, 19, 19, 0.1) 100%), hsla(0, 0%, 100%, 0.1)', - _c$1[SupportedChainId.OPTIMISTIC_KOVAN] = 'radial-gradient(92% 105% at 50% 7%, rgba(255, 58, 212, 0.04) 0%, rgba(255, 255, 255, 0.03) 100%),radial-gradient(100% 97% at 0% 12%, rgba(235, 0, 255, 0.1) 0%, rgba(243, 19, 19, 0.1) 100%), hsla(0, 0%, 100%, 0.1)', - _c$1[SupportedChainId.ARBITRUM_ONE] = 'radial-gradient(285% 8200% at 30% 50%, rgba(40, 160, 240, 0.1) 0%, rgba(219, 255, 0, 0) 100%),radial-gradient(circle at top left, hsla(206, 50%, 75%, 0.01), hsla(215, 79%, 51%, 0.12)), hsla(0, 0%, 100%, 0.1)', - _c$1[SupportedChainId.ARBITRUM_RINKEBY] = 'radial-gradient(285% 8200% at 30% 50%, rgba(40, 160, 240, 0.1) 0%, rgba(219, 255, 0, 0) 100%),radial-gradient(circle at top left, hsla(206, 50%, 75%, 0.01), hsla(215, 79%, 51%, 0.12)), hsla(0, 0%, 100%, 0.1)', - _c$1), -}; -var ContentWrapper$1 = styled__default["default"].div(templateObject_5$c || (templateObject_5$c = __makeTemplateObject(["\n background: ", ";\n border-radius: 20px;\n display: flex;\n flex-direction: row;\n overflow: hidden;\n position: relative;\n width: 100%;\n\n :before {\n background-image: url(", ");\n background-repeat: no-repeat;\n background-size: 300px;\n content: '';\n height: 300px;\n opacity: 0.1;\n position: absolute;\n transform: rotate(25deg) translate(-90px, -40px);\n width: 300px;\n z-index: -1;\n }\n"], ["\n background: ", ";\n border-radius: 20px;\n display: flex;\n flex-direction: row;\n overflow: hidden;\n position: relative;\n width: 100%;\n\n :before {\n background-image: url(", ");\n background-repeat: no-repeat;\n background-size: 300px;\n content: '';\n height: 300px;\n opacity: 0.1;\n position: absolute;\n transform: rotate(25deg) translate(-90px, -40px);\n width: 300px;\n z-index: -1;\n }\n"])), function (_a) { - var chainId = _a.chainId, darkMode = _a.darkMode; - return BG_COLORS_BY_DARK_MODE_AND_CHAIN_ID[darkMode ? 'dark' : 'light'][chainId]; -}, function (_a) { - var logoUrl = _a.logoUrl; - return logoUrl; -}); -var Header$1 = styled__default["default"].h2(templateObject_6$8 || (templateObject_6$8 = __makeTemplateObject(["\n font-weight: 600;\n font-size: 16px;\n margin: 0;\n"], ["\n font-weight: 600;\n font-size: 16px;\n margin: 0;\n"]))); -var LinkOutToBridge = styled__default["default"](ExternalLink)(templateObject_7$7 || (templateObject_7$7 = __makeTemplateObject(["\n align-items: center;\n border-radius: 8px;\n color: white;\n display: flex;\n font-size: 16px;\n justify-content: space-between;\n padding: 6px 8px;\n margin-right: 12px;\n text-decoration: none !important;\n width: 100%;\n"], ["\n align-items: center;\n border-radius: 8px;\n color: white;\n display: flex;\n font-size: 16px;\n justify-content: space-between;\n padding: 6px 8px;\n margin-right: 12px;\n text-decoration: none !important;\n width: 100%;\n"]))); -var StyledArrowUpRight = styled__default["default"](reactFeather.ArrowUpRight)(templateObject_8$5 || (templateObject_8$5 = __makeTemplateObject(["\n margin-left: 12px;\n width: 24px;\n height: 24px;\n"], ["\n margin-left: 12px;\n width: 24px;\n height: 24px;\n"]))); -var TEXT_COLORS = (_d$1 = {}, - _d$1[SupportedChainId.POLYGON] = 'rgba(130, 71, 229)', - _d$1[SupportedChainId.POLYGON_MUMBAI] = 'rgba(130, 71, 229)', - _d$1[SupportedChainId.OPTIMISM] = '#ff3856', - _d$1[SupportedChainId.OPTIMISTIC_KOVAN] = '#ff3856', - _d$1[SupportedChainId.ARBITRUM_ONE] = '#0490ed', - _d$1[SupportedChainId.ARBITRUM_RINKEBY] = '#0490ed', - _d$1); -function shouldShowAlert(chainId) { - return Boolean(chainId && SHOULD_SHOW_ALERT[chainId]); -} -function NetworkAlert() { - var chainId = useActiveWeb3React().chainId; - var _a = __read(useDarkModeManager(), 1), darkMode = _a[0]; - if (!shouldShowAlert(chainId)) { - return null; - } - var _b = CHAIN_INFO[chainId], label = _b.label, logoUrl = _b.logoUrl, bridge = _b.bridge; - var textColor = TEXT_COLORS[chainId]; - return bridge ? (jsxRuntime.jsx(RootWrapper, { children: jsxRuntime.jsx(ContentWrapper$1, __assign({ chainId: chainId, darkMode: darkMode, logoUrl: logoUrl }, { children: jsxRuntime.jsxs(LinkOutToBridge, __assign({ href: bridge }, { children: [jsxRuntime.jsxs(BodyText, __assign({ color: textColor }, { children: [jsxRuntime.jsx(L2Icon, { src: logoUrl }, void 0), jsxRuntime.jsxs(AutoRow, { children: [jsxRuntime.jsx(Header$1, { children: jsxRuntime.jsxs(macro.Trans, { children: [label, " token bridge"] }, void 0) }, void 0), jsxRuntime.jsx(HideSmall, { children: jsxRuntime.jsxs(macro.Trans, { children: ["Deposit tokens to the ", label, " network."] }, void 0) }, void 0)] }, void 0)] }), void 0), jsxRuntime.jsx(StyledArrowUpRight, { color: textColor }, void 0)] }), void 0) }), void 0) }, void 0)) : null; -} -var templateObject_1$G, templateObject_2$r, templateObject_3$m, templateObject_4$d, templateObject_5$c, templateObject_6$8, templateObject_7$7, templateObject_8$5; - -/** - * @param open conditional to show content or hide - * @returns Wrapper to smoothly hide and expand content - */ -function AnimatedDropdown(_a) { - var open = _a.open, children = _a.children; - var _b = useResizeObserver__default["default"](), ref = _b.ref, height = _b.height; - var props = reactSpring.useSpring({ - height: open ? height !== null && height !== void 0 ? height : 0 : 0, - config: { - mass: 1.2, - tension: 300, - friction: 20, - clamp: true, - velocity: 0.01, - }, - }); - return (jsxRuntime.jsx(reactSpring.animated.div, __assign({ style: __assign(__assign({}, props), { overflow: 'hidden', width: '100%', willChange: 'height' }) }, { children: jsxRuntime.jsx("div", __assign({ ref: ref }, { children: children }), void 0) }), void 0)); -} - -var THIRTY_BIPS_FEE = new sdkCore.Percent(JSBI__default["default"].BigInt(30), JSBI__default["default"].BigInt(10000)); -var INPUT_FRACTION_AFTER_FEE = ONE_HUNDRED_PERCENT.subtract(THIRTY_BIPS_FEE); -// computes realized lp fee as a percent -function computeRealizedLPFeePercent(trade) { - var e_1, _a; - var percent; - // Since routes are either all v2 or all v3 right now, calculate separately - if (trade.swaps[0].route.pools instanceof v2Sdk.Pair) { - // for each hop in our trade, take away the x*y=k price impact from 0.3% fees - // e.g. for 3 tokens/2 hops: 1 - ((1 - .03) * (1-.03)) - percent = ONE_HUNDRED_PERCENT.subtract(trade.swaps.reduce(function (currentFee) { return currentFee.multiply(INPUT_FRACTION_AFTER_FEE); }, ONE_HUNDRED_PERCENT)); - } - else { - percent = ZERO_PERCENT; - try { - for (var _b = __values(trade.swaps), _c = _b.next(); !_c.done; _c = _b.next()) { - var swap = _c.value; - var _d = swap.inputAmount.divide(trade.inputAmount), numerator = _d.numerator, denominator = _d.denominator; - var overallPercent = new sdkCore.Percent(numerator, denominator); - var routeRealizedLPFeePercent = overallPercent.multiply(ONE_HUNDRED_PERCENT.subtract(swap.route.pools.reduce(function (currentFee, pool) { - var fee = pool instanceof v2Sdk.Pair - ? // not currently possible given protocol check above, but not fatal - v3Sdk.FeeAmount.MEDIUM - : pool.fee; - return currentFee.multiply(ONE_HUNDRED_PERCENT.subtract(new sdkCore.Fraction(fee, 1000000))); - }, ONE_HUNDRED_PERCENT))); - percent = percent.add(routeRealizedLPFeePercent); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_1) throw e_1.error; } - } - } - return new sdkCore.Percent(percent.numerator, percent.denominator); -} -var IMPACT_TIERS = [ - BLOCKED_PRICE_IMPACT_NON_EXPERT, - ALLOWED_PRICE_IMPACT_HIGH, - ALLOWED_PRICE_IMPACT_MEDIUM, - ALLOWED_PRICE_IMPACT_LOW, -]; -function warningSeverity(priceImpact) { - var e_2, _a; - if (!priceImpact) - return 4; - var impact = IMPACT_TIERS.length; - try { - for (var IMPACT_TIERS_1 = __values(IMPACT_TIERS), IMPACT_TIERS_1_1 = IMPACT_TIERS_1.next(); !IMPACT_TIERS_1_1.done; IMPACT_TIERS_1_1 = IMPACT_TIERS_1.next()) { - var impactLevel = IMPACT_TIERS_1_1.value; - if (impactLevel.lessThan(priceImpact)) - return impact; - impact--; - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (IMPACT_TIERS_1_1 && !IMPACT_TIERS_1_1.done && (_a = IMPACT_TIERS_1.return)) _a.call(IMPACT_TIERS_1); - } - finally { if (e_2) throw e_2.error; } - } - return 0; -} - -/** - * Formatted version of price impact text with warning colors - */ -function FormattedPriceImpact(_a) { - var priceImpact = _a.priceImpact; - return (jsxRuntime.jsx(ErrorText, __assign({ fontWeight: 500, fontSize: 14, severity: warningSeverity(priceImpact) }, { children: priceImpact ? priceImpact.multiply(-1).toFixed(2) + "%" : '-' }), void 0)); -} - -var StyledCard$1 = styled__default["default"](Card)(templateObject_1$F || (templateObject_1$F = __makeTemplateObject(["\n padding: 0;\n"], ["\n padding: 0;\n"]))); -function TextWithLoadingPlaceholder(_a) { - var syncing = _a.syncing, width = _a.width, children = _a.children; - return syncing ? (jsxRuntime.jsx(LoadingRows, { children: jsxRuntime.jsx("div", { style: { height: '15px', width: width + "px" } }, void 0) }, void 0)) : (children); -} -function AdvancedSwapDetails(_a) { - var trade = _a.trade, allowedSlippage = _a.allowedSlippage, _b = _a.syncing, syncing = _b === void 0 ? false : _b; - var theme = React.useContext(styled.ThemeContext); - var chainId = useActiveWeb3React().chainId; - var _c = React.useMemo(function () { - if (!trade) - return { expectedOutputAmount: undefined, priceImpact: undefined }; - var expectedOutputAmount = trade.outputAmount; - var realizedLpFeePercent = computeRealizedLPFeePercent(trade); - var priceImpact = trade.priceImpact.subtract(realizedLpFeePercent); - return { expectedOutputAmount: expectedOutputAmount, priceImpact: priceImpact }; - }, [trade]), expectedOutputAmount = _c.expectedOutputAmount, priceImpact = _c.priceImpact; - return !trade ? null : (jsxRuntime.jsx(StyledCard$1, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "8px" }, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(RowFixed, { children: jsxRuntime.jsx(ThemedText.SubHeader, __assign({ color: theme.text1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Expected Output" }, void 0) }), void 0) }, void 0), jsxRuntime.jsx(TextWithLoadingPlaceholder, __assign({ syncing: syncing, width: 65 }, { children: jsxRuntime.jsx(ThemedText.Black, __assign({ textAlign: "right", fontSize: 14 }, { children: expectedOutputAmount - ? expectedOutputAmount.toSignificant(6) + " " + expectedOutputAmount.currency.symbol - : '-' }), void 0) }), void 0)] }, void 0), jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(RowFixed, { children: jsxRuntime.jsx(ThemedText.SubHeader, __assign({ color: theme.text1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Price Impact" }, void 0) }), void 0) }, void 0), jsxRuntime.jsx(TextWithLoadingPlaceholder, __assign({ syncing: syncing, width: 50 }, { children: jsxRuntime.jsx(ThemedText.Black, __assign({ textAlign: "right", fontSize: 14 }, { children: jsxRuntime.jsx(FormattedPriceImpact, { priceImpact: priceImpact }, void 0) }), void 0) }), void 0)] }, void 0), jsxRuntime.jsx(Separator$1, {}, void 0), jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(RowFixed, __assign({ style: { marginRight: '20px' } }, { children: jsxRuntime.jsxs(ThemedText.SubHeader, __assign({ color: theme.text3 }, { children: [trade.tradeType === sdkCore.TradeType.EXACT_INPUT ? (jsxRuntime.jsx(macro.Trans, { children: "Minimum received" }, void 0)) : (jsxRuntime.jsx(macro.Trans, { children: "Maximum sent" }, void 0)), ' ', jsxRuntime.jsx(macro.Trans, { children: "after slippage" }, void 0), " (", allowedSlippage.toFixed(2), "%)"] }), void 0) }), void 0), jsxRuntime.jsx(TextWithLoadingPlaceholder, __assign({ syncing: syncing, width: 70 }, { children: jsxRuntime.jsx(ThemedText.Black, __assign({ textAlign: "right", fontSize: 14, color: theme.text3 }, { children: trade.tradeType === sdkCore.TradeType.EXACT_INPUT - ? trade.minimumAmountOut(allowedSlippage).toSignificant(6) + " " + trade.outputAmount.currency.symbol - : trade.maximumAmountIn(allowedSlippage).toSignificant(6) + " " + trade.inputAmount.currency.symbol }), void 0) }), void 0)] }, void 0), !(trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) || !chainId || !SUPPORTED_GAS_ESTIMATE_CHAIN_IDS.includes(chainId) ? null : (jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(ThemedText.SubHeader, __assign({ color: theme.text3 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Network Fee" }, void 0) }), void 0), jsxRuntime.jsx(TextWithLoadingPlaceholder, __assign({ syncing: syncing, width: 50 }, { children: jsxRuntime.jsxs(ThemedText.Black, __assign({ textAlign: "right", fontSize: 14, color: theme.text3 }, { children: ["~$", trade.gasUseEstimateUSD.toFixed(2)] }), void 0) }), void 0)] }, void 0))] }), void 0) }, void 0)); -} -var templateObject_1$F; - -var _path$3, _line$1, _line2, _path2; - -function _extends$4() { _extends$4 = 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$4.apply(this, arguments); } - -var SvgGasIcon = function SvgGasIcon(props) { - return /*#__PURE__*/React__namespace.createElement("svg", _extends$4({ - width: 16, - height: 16, - viewBox: "0 0 16 16", - fill: "none", - xmlns: "http://www.w3.org/2000/svg" - }, props), _path$3 || (_path$3 = /*#__PURE__*/React__namespace.createElement("path", { - d: "M10.0047 9.26921H10.2714C11.0078 9.26921 11.6047 9.86617 11.6047 10.6025V12.1359C11.6047 12.7987 12.142 13.3359 12.8047 13.3359C13.4675 13.3359 14.0047 12.7995 14.0047 12.1367V5.22059C14.0047 4.86697 13.7758 4.56227 13.5258 4.31223L10.6714 1.33594M4.00472 2.00254H8.00472C8.7411 2.00254 9.33805 2.59949 9.33805 3.33587V14.0015H2.67139V3.33587C2.67139 2.59949 3.26834 2.00254 4.00472 2.00254ZM14.0047 5.33587C14.0047 6.07225 13.4078 6.66921 12.6714 6.66921C11.935 6.66921 11.3381 6.07225 11.3381 5.33587C11.3381 4.59949 11.935 4.00254 12.6714 4.00254C13.4078 4.00254 14.0047 4.59949 14.0047 5.33587Z", - stroke: "white" - })), _line$1 || (_line$1 = /*#__PURE__*/React__namespace.createElement("line", { - x1: 4, - y1: 9.99414, - x2: 8, - y2: 9.99414, - stroke: "white" - })), _line2 || (_line2 = /*#__PURE__*/React__namespace.createElement("line", { - x1: 4, - y1: 11.9941, - x2: 8, - y2: 11.9941, - stroke: "white" - })), _path2 || (_path2 = /*#__PURE__*/React__namespace.createElement("path", { - d: "M4 8.16113H8", - stroke: "white" - }))); -}; - -var BadgeVariant; -(function (BadgeVariant) { - BadgeVariant["DEFAULT"] = "DEFAULT"; - BadgeVariant["NEGATIVE"] = "NEGATIVE"; - BadgeVariant["POSITIVE"] = "POSITIVE"; - BadgeVariant["PRIMARY"] = "PRIMARY"; - BadgeVariant["WARNING"] = "WARNING"; - BadgeVariant["WARNING_OUTLINE"] = "WARNING_OUTLINE"; -})(BadgeVariant || (BadgeVariant = {})); -function pickBackgroundColor(variant, theme) { - switch (variant) { - case BadgeVariant.NEGATIVE: - return theme.error; - case BadgeVariant.POSITIVE: - return theme.success; - case BadgeVariant.PRIMARY: - return theme.primary1; - case BadgeVariant.WARNING: - return theme.warning; - case BadgeVariant.WARNING_OUTLINE: - return 'transparent'; - default: - return theme.bg2; - } -} -function pickBorder(variant, theme) { - switch (variant) { - case BadgeVariant.WARNING_OUTLINE: - return "1px solid " + theme.warning; - default: - return 'unset'; - } -} -function pickFontColor(variant, theme) { - switch (variant) { - case BadgeVariant.NEGATIVE: - return polished.readableColor(theme.error); - case BadgeVariant.POSITIVE: - return polished.readableColor(theme.success); - case BadgeVariant.WARNING: - return polished.readableColor(theme.warning); - case BadgeVariant.WARNING_OUTLINE: - return theme.warning; - default: - return polished.readableColor(theme.bg2); - } -} -var Badge = styled__default["default"].div(templateObject_1$E || (templateObject_1$E = __makeTemplateObject(["\n align-items: center;\n background-color: ", ";\n border: ", ";\n border-radius: 0.5rem;\n color: ", ";\n display: inline-flex;\n padding: 4px 6px;\n justify-content: center;\n font-weight: 500;\n"], ["\n align-items: center;\n background-color: ", ";\n border: ", ";\n border-radius: 0.5rem;\n color: ", ";\n display: inline-flex;\n padding: 4px 6px;\n justify-content: center;\n font-weight: 500;\n"])), function (_a) { - var theme = _a.theme, variant = _a.variant; - return pickBackgroundColor(variant, theme); -}, function (_a) { - var theme = _a.theme, variant = _a.variant; - return pickBorder(variant, theme); -}, function (_a) { - var theme = _a.theme, variant = _a.variant; - return pickFontColor(variant, theme); -}); -var templateObject_1$E; - -/** - * Does a lookup for an ENS name to find its contenthash. - */ -function useENSContentHash(ensName) { - var _a; - var ensNodeArgument = React.useMemo(function () { return [ensName === null ? undefined : safeNamehash(ensName)]; }, [ensName]); - var registrarContract = useENSRegistrarContract(false); - var resolverAddressResult = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument); - var resolverAddress = (_a = resolverAddressResult.result) === null || _a === void 0 ? void 0 : _a[0]; - var resolverContract = useENSResolverContract(resolverAddress && isZero(resolverAddress) ? undefined : resolverAddress, false); - var contenthash = useSingleCallResult(resolverContract, 'contenthash', ensNodeArgument); - return React.useMemo(function () { - var _a, _b; - return ({ - contenthash: (_b = (_a = contenthash.result) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : null, - loading: resolverAddressResult.loading || contenthash.loading, - }); - }, [contenthash.loading, contenthash.result, resolverAddressResult.loading]); -} - -function useHttpLocations(uri) { - var ens = React.useMemo(function () { return (uri ? parseENSAddress(uri) : undefined); }, [uri]); - var resolvedContentHash = useENSContentHash(ens === null || ens === void 0 ? void 0 : ens.ensName); - return React.useMemo(function () { - if (ens) { - return resolvedContentHash.contenthash ? uriToHttp(contenthashToUri(resolvedContentHash.contenthash)) : []; - } - else { - return uri ? uriToHttp(uri) : []; - } - }, [ens, resolvedContentHash.contenthash, uri]); -} - -var MaticLogo = "data:image/svg+xml,%3Csvg%20width%3D%221024%22%20height%3D%221024%22%20viewBox%3D%220%200%201024%201024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Ccircle%20cx%3D%22512%22%20cy%3D%22512%22%20r%3D%22512%22%20fill%3D%22%238247E5%22%2F%3E%3Cpath%20d%3D%22M681.469%20402.456C669.189%20395.312%20653.224%20395.312%20639.716%20402.456L543.928%20457.228L478.842%20492.949L383.055%20547.721C370.774%20554.865%20354.81%20554.865%20341.301%20547.721L265.162%20504.856C252.882%20497.712%20244.286%20484.614%20244.286%20470.325V385.786C244.286%20371.498%20251.654%20358.4%20265.162%20351.256L340.073%20309.581C352.353%20302.437%20368.318%20302.437%20381.827%20309.581L456.737%20351.256C469.018%20358.4%20477.614%20371.498%20477.614%20385.786V440.558L542.7%20403.646V348.874C542.7%20334.586%20535.332%20321.488%20521.824%20314.344L383.055%20235.758C370.774%20228.614%20354.81%20228.614%20341.301%20235.758L200.076%20314.344C186.567%20321.488%20179.199%20334.586%20179.199%20348.874V507.237C179.199%20521.525%20186.567%20534.623%20200.076%20541.767L341.301%20620.353C353.582%20627.498%20369.546%20627.498%20383.055%20620.353L478.842%20566.772L543.928%20529.86L639.716%20476.279C651.996%20469.135%20667.961%20469.135%20681.469%20476.279L756.38%20517.953C768.66%20525.098%20777.257%20538.195%20777.257%20552.484V637.023C777.257%20651.312%20769.888%20664.409%20756.38%20671.553L681.469%20714.419C669.189%20721.563%20653.224%20721.563%20639.716%20714.419L564.805%20672.744C552.525%20665.6%20543.928%20652.502%20543.928%20638.214V583.442L478.842%20620.353V675.125C478.842%20689.414%20486.21%20702.512%20499.719%20709.656L640.944%20788.242C653.224%20795.386%20669.189%20795.386%20682.697%20788.242L823.922%20709.656C836.203%20702.512%20844.799%20689.414%20844.799%20675.125V516.763C844.799%20502.474%20837.431%20489.377%20823.922%20482.232L681.469%20402.456Z%22%20fill%3D%22white%22%2F%3E%3C%2Fsvg%3E"; - -function chainIdToNetworkName(networkId) { - switch (networkId) { - case SupportedChainId.MAINNET: - return 'ethereum'; - case SupportedChainId.ARBITRUM_ONE: - return 'arbitrum'; - case SupportedChainId.OPTIMISM: - return 'optimism'; - default: - return 'ethereum'; - } -} -function getNativeLogoURI(chainId) { - if (chainId === void 0) { chainId = SupportedChainId.MAINNET; } - switch (chainId) { - case SupportedChainId.POLYGON_MUMBAI: - case SupportedChainId.POLYGON: - return MaticLogo; - default: - return EthereumLogo; - } -} -function getTokenLogoURI(address, chainId) { - if (chainId === void 0) { chainId = SupportedChainId.MAINNET; } - var networkName = chainIdToNetworkName(chainId); - var networksWithUrls = [SupportedChainId.ARBITRUM_ONE, SupportedChainId.MAINNET, SupportedChainId.OPTIMISM]; - if (networksWithUrls.includes(chainId)) { - return "https://raw.githubusercontent.com/Uniswap/assets/master/blockchains/" + networkName + "/assets/" + address + "/logo.png"; - } -} -function useCurrencyLogoURIs(currency) { - var locations = useHttpLocations(currency instanceof WrappedTokenInfo ? currency.logoURI : undefined); - return React.useMemo(function () { - var logoURIs = __spreadArray([], __read(locations), false); - if (currency) { - if (currency.isNative) { - logoURIs.push(getNativeLogoURI(currency.chainId)); - } - else if (currency.isToken) { - var logoURI = getTokenLogoURI(currency.address, currency.chainId); - if (logoURI) { - logoURIs.push(logoURI); - } - } - } - return logoURIs; - }, [currency, locations]); -} - -var BAD_SRCS = {}; -/** - * Renders an image by sequentially trying a list of URIs, and then eventually a fallback triangle alert - */ -function Logo(_a) { - var srcs = _a.srcs, alt = _a.alt, style = _a.style, rest = __rest(_a, ["srcs", "alt", "style"]); - var _b = __read(React.useState(0), 2), refresh = _b[1]; - var theme = useTheme(); - var src = srcs.find(function (src) { return !BAD_SRCS[src]; }); - if (src) { - return (jsxRuntime.jsx("img", __assign({}, rest, { alt: alt, src: src, style: style, onError: function () { - if (src) - BAD_SRCS[src] = true; - refresh(function (i) { return i + 1; }); - } }), void 0)); - } - return jsxRuntime.jsx(reactFeather.Slash, __assign({}, rest, { style: __assign(__assign({}, style), { color: theme.bg4 }) }), void 0); -} - -var StyledLogo$1 = styled__default["default"](Logo)(templateObject_1$D || (templateObject_1$D = __makeTemplateObject(["\n width: ", ";\n height: ", ";\n background: radial-gradient(white 50%, #ffffff00 calc(75% + 1px), #ffffff00 100%);\n border-radius: 50%;\n -mox-box-shadow: 0 0 1px ", ";\n -webkit-box-shadow: 0 0 1px ", ";\n box-shadow: 0 0 1px ", ";\n border: 0px solid rgba(255, 255, 255, 0);\n"], ["\n width: ", ";\n height: ", ";\n background: radial-gradient(white 50%, #ffffff00 calc(75% + 1px), #ffffff00 100%);\n border-radius: 50%;\n -mox-box-shadow: 0 0 1px ", ";\n -webkit-box-shadow: 0 0 1px ", ";\n box-shadow: 0 0 1px ", ";\n border: 0px solid rgba(255, 255, 255, 0);\n"])), function (_a) { - var size = _a.size; - return size; -}, function (_a) { - var size = _a.size; - return size; -}, function (_a) { - var native = _a.native; - return (native ? 'white' : 'black'); -}, function (_a) { - var native = _a.native; - return (native ? 'white' : 'black'); -}, function (_a) { - var native = _a.native; - return (native ? 'white' : 'black'); -}); -function CurrencyLogo(_a) { - var _b, _c; - var currency = _a.currency, _d = _a.size, size = _d === void 0 ? '24px' : _d, style = _a.style, rest = __rest(_a, ["currency", "size", "style"]); - var logoURIs = useCurrencyLogoURIs(currency); - return (jsxRuntime.jsx(StyledLogo$1, __assign({ size: size, native: (_b = currency === null || currency === void 0 ? void 0 : currency.isNative) !== null && _b !== void 0 ? _b : false, srcs: logoURIs, alt: ((_c = currency === null || currency === void 0 ? void 0 : currency.symbol) !== null && _c !== void 0 ? _c : 'token') + " logo", style: style }, rest), void 0)); -} -var templateObject_1$D; - -var Wrapper$c = styled__default["default"].div(templateObject_1$C || (templateObject_1$C = __makeTemplateObject(["\n position: relative;\n display: flex;\n flex-direction: row;\n margin-left: ", ";\n"], ["\n position: relative;\n display: flex;\n flex-direction: row;\n margin-left: ", ";\n"])), function (_a) { - var sizeraw = _a.sizeraw, margin = _a.margin; - return margin && (sizeraw / 3 + 8).toString() + 'px'; -}); -var HigherLogo = styled__default["default"](CurrencyLogo)(templateObject_2$q || (templateObject_2$q = __makeTemplateObject(["\n z-index: 2;\n"], ["\n z-index: 2;\n"]))); -var CoveredLogo = styled__default["default"](CurrencyLogo)(templateObject_3$l || (templateObject_3$l = __makeTemplateObject(["\n position: absolute;\n left: ", " !important;\n"], ["\n position: absolute;\n left: ", " !important;\n"])), function (_a) { - var sizeraw = _a.sizeraw; - return '-' + (sizeraw / 2).toString() + 'px'; -}); -function DoubleCurrencyLogo(_a) { - var currency0 = _a.currency0, currency1 = _a.currency1, _b = _a.size, size = _b === void 0 ? 16 : _b, _c = _a.margin, margin = _c === void 0 ? false : _c; - return (jsxRuntime.jsxs(Wrapper$c, __assign({ sizeraw: size, margin: margin }, { children: [currency0 && jsxRuntime.jsx(HigherLogo, { currency: currency0, size: size.toString() + 'px' }, void 0), currency1 && jsxRuntime.jsx(CoveredLogo, { currency: currency1, size: size.toString() + 'px', sizeraw: size }, void 0)] }), void 0)); -} -var templateObject_1$C, templateObject_2$q, templateObject_3$l; - -/** - * Returns a WrappedTokenInfo from the active token lists when possible, - * or the passed token otherwise. */ -function useTokenInfoFromActiveList(currency) { - var chainId = useActiveWeb3React().chainId; - var activeList = useCombinedActiveList(); - return React.useMemo(function () { - if (!chainId) - return; - if (currency.isNative) - return currency; - try { - return activeList[chainId][currency.wrapped.address].token; - } - catch (e) { - return currency; - } - }, [activeList, chainId, currency]); -} - -var _line; - -function _extends$3() { _extends$3 = 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$3.apply(this, arguments); } - -var SvgDotLine = function SvgDotLine(props) { - return /*#__PURE__*/React__namespace.createElement("svg", _extends$3({ - width: "100%", - height: 35, - viewBox: "800 0 300 200", - xmlns: "http://www.w3.org/2000/svg" - }, props), _line || (_line = /*#__PURE__*/React__namespace.createElement("line", { - x1: 0, - x2: 2000, - y1: 100, - y2: 100, - stroke: "currentColor", - strokeWidth: 20, - strokeLinecap: "round", - strokeDasharray: "1, 45" - }))); -}; - -var Wrapper$b = styled__default["default"](rebass.Box)(templateObject_1$B || (templateObject_1$B = __makeTemplateObject(["\n align-items: center;\n width: 100%;\n"], ["\n align-items: center;\n width: 100%;\n"]))); -var RouteContainerRow = styled__default["default"](Row$1)(templateObject_2$p || (templateObject_2$p = __makeTemplateObject(["\n display: grid;\n grid-template-columns: 24px 1fr 24px;\n"], ["\n display: grid;\n grid-template-columns: 24px 1fr 24px;\n"]))); -var RouteRow = styled__default["default"](Row$1)(templateObject_3$k || (templateObject_3$k = __makeTemplateObject(["\n align-items: center;\n display: flex;\n justify-content: center;\n padding: 0.1rem 0.5rem;\n position: relative;\n"], ["\n align-items: center;\n display: flex;\n justify-content: center;\n padding: 0.1rem 0.5rem;\n position: relative;\n"]))); -var PoolBadge = styled__default["default"](Badge)(templateObject_4$c || (templateObject_4$c = __makeTemplateObject(["\n display: flex;\n padding: 4px 4px;\n"], ["\n display: flex;\n padding: 4px 4px;\n"]))); -var DottedLine = styled__default["default"].div(templateObject_5$b || (templateObject_5$b = __makeTemplateObject(["\n display: flex;\n align-items: center;\n position: absolute;\n width: calc(100%);\n z-index: 1;\n opacity: 0.5;\n"], ["\n display: flex;\n align-items: center;\n position: absolute;\n width: calc(100%);\n z-index: 1;\n opacity: 0.5;\n"]))); -var DotColor = styled__default["default"](SvgDotLine)(templateObject_6$7 || (templateObject_6$7 = __makeTemplateObject(["\n path {\n stroke: ", ";\n }\n"], ["\n path {\n stroke: ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.bg4; -}); -var OpaqueBadge = styled__default["default"](Badge)(templateObject_7$6 || (templateObject_7$6 = __makeTemplateObject(["\n background-color: ", ";\n border-radius: 8px;\n display: grid;\n font-size: 12px;\n grid-gap: 4px;\n grid-auto-flow: column;\n justify-content: start;\n padding: 4px 6px 4px 4px;\n z-index: ", ";\n"], ["\n background-color: ", ";\n border-radius: 8px;\n display: grid;\n font-size: 12px;\n grid-gap: 4px;\n grid-auto-flow: column;\n justify-content: start;\n padding: 4px 6px 4px 4px;\n z-index: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}, Z_INDEX.sticky); -var ProtocolBadge = styled__default["default"](Badge)(templateObject_8$4 || (templateObject_8$4 = __makeTemplateObject(["\n background-color: ", ";\n border-radius: 4px;\n color: ", ";\n font-size: 10px;\n padding: 2px 4px;\n z-index: ", ";\n"], ["\n background-color: ", ";\n border-radius: 4px;\n color: ", ";\n font-size: 10px;\n padding: 2px 4px;\n z-index: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg3; -}, function (_a) { - var theme = _a.theme; - return theme.text2; -}, Z_INDEX.sticky + 1); -var BadgeText = styled__default["default"](ThemedText.Small)(templateObject_9$4 || (templateObject_9$4 = __makeTemplateObject(["\n word-break: normal;\n"], ["\n word-break: normal;\n"]))); -function RoutingDiagram(_a) { - var currencyIn = _a.currencyIn, currencyOut = _a.currencyOut, routes = _a.routes; - var tokenIn = useTokenInfoFromActiveList(currencyIn); - var tokenOut = useTokenInfoFromActiveList(currencyOut); - return (jsxRuntime.jsx(Wrapper$b, { children: routes.map(function (entry, index) { return (jsxRuntime.jsxs(RouteContainerRow, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: tokenIn, size: '20px' }, void 0), jsxRuntime.jsx(Route, { entry: entry }, void 0), jsxRuntime.jsx(CurrencyLogo, { currency: tokenOut, size: '20px' }, void 0)] }, index)); }) }, void 0)); -} -function Route(_a) { - var _b = _a.entry, percent = _b.percent, path = _b.path, protocol = _b.protocol; - return (jsxRuntime.jsxs(RouteRow, { children: [jsxRuntime.jsx(DottedLine, { children: jsxRuntime.jsx(DotColor, {}, void 0) }, void 0), jsxRuntime.jsxs(OpaqueBadge, { children: [jsxRuntime.jsx(ProtocolBadge, { children: jsxRuntime.jsx(BadgeText, __assign({ fontSize: 12 }, { children: protocol.toUpperCase() }), void 0) }, void 0), jsxRuntime.jsxs(BadgeText, __assign({ fontSize: 14, style: { minWidth: 'auto' } }, { children: [percent.toSignificant(2), "%"] }), void 0)] }, void 0), jsxRuntime.jsx(AutoRow, __assign({ gap: "1px", width: "100%", style: { justifyContent: 'space-evenly', zIndex: 2 } }, { children: path.map(function (_a, index) { - var _b = __read(_a, 3), currency0 = _b[0], currency1 = _b[1], feeAmount = _b[2]; - return (jsxRuntime.jsx(Pool, { currency0: currency0, currency1: currency1, feeAmount: feeAmount }, index)); - }) }), void 0)] }, void 0)); -} -function Pool(_a) { - var currency0 = _a.currency0, currency1 = _a.currency1, feeAmount = _a.feeAmount; - var tokenInfo0 = useTokenInfoFromActiveList(currency0); - var tokenInfo1 = useTokenInfoFromActiveList(currency1); - // TODO - link pool icon to info.uniswap.org via query params - return (jsxRuntime.jsx(MouseoverTooltip, __assign({ text: jsxRuntime.jsxs(macro.Trans, { children: [(tokenInfo0 === null || tokenInfo0 === void 0 ? void 0 : tokenInfo0.symbol) + '/' + (tokenInfo1 === null || tokenInfo1 === void 0 ? void 0 : tokenInfo1.symbol) + ' ' + feeAmount / 10000, "% pool"] }, void 0) }, { children: jsxRuntime.jsxs(PoolBadge, { children: [jsxRuntime.jsx(rebass.Box, __assign({ margin: "0 4px 0 12px" }, { children: jsxRuntime.jsx(DoubleCurrencyLogo, { currency0: tokenInfo1, currency1: tokenInfo0, size: 20 }, void 0) }), void 0), jsxRuntime.jsxs(ThemedText.Small, __assign({ fontSize: 14 }, { children: [feeAmount / 10000, "%"] }), void 0)] }, void 0) }), void 0)); -} -var templateObject_1$B, templateObject_2$p, templateObject_3$k, templateObject_4$c, templateObject_5$b, templateObject_6$7, templateObject_7$6, templateObject_8$4, templateObject_9$4; - -var _defs, _path$2; - -function _extends$2() { _extends$2 = 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$2.apply(this, arguments); } - -var SvgAutoRouter = function SvgAutoRouter(props) { - return /*#__PURE__*/React__namespace.createElement("svg", _extends$2({ - width: 23, - height: 20, - viewBox: "0 0 23 20", - fill: "none", - xmlns: "http://www.w3.org/2000/svg" - }, props), _defs || (_defs = /*#__PURE__*/React__namespace.createElement("defs", null, /*#__PURE__*/React__namespace.createElement("linearGradient", { - id: "gradient1", - x1: 0, - y1: 0, - x2: 1, - y2: 0, - gradientTransform: "rotate(95)" - }, /*#__PURE__*/React__namespace.createElement("stop", { - id: "stop1", - offset: 0, - stopColor: "#2274E2" - }), /*#__PURE__*/React__namespace.createElement("stop", { - id: "stop1", - offset: 0.5, - stopColor: "#2274E2" - }), /*#__PURE__*/React__namespace.createElement("stop", { - id: "stop2", - offset: 1, - stopColor: "#3FB672" - })))), _path$2 || (_path$2 = /*#__PURE__*/React__namespace.createElement("path", { - d: "M16 16C10 16 9 10 5 10M16 16C16 17.6569 17.3431 19 19 19C20.6569 19 22 17.6569 22 16C22 14.3431 20.6569 13 19 13C17.3431 13 16 14.3431 16 16ZM5 10C9 10 10 4 16 4M5 10H1.5M16 4C16 5.65685 17.3431 7 19 7C20.6569 7 22 5.65685 22 4C22 2.34315 20.6569 1 19 1C17.3431 1 16 2.34315 16 4Z", - strokeWidth: 2, - strokeLinecap: "round", - strokeLinejoin: "round", - stroke: "url(#gradient1)" - }))); -}; - -var _path$1; - -function _extends$1() { _extends$1 = 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$1.apply(this, arguments); } - -var SvgStaticRoute = function SvgStaticRoute(props) { - return /*#__PURE__*/React__namespace.createElement("svg", _extends$1({ - width: 20, - height: 20, - viewBox: "0 0 20 22", - fill: "none", - xmlns: "http://www.w3.org/2000/svg" - }, props), _path$1 || (_path$1 = /*#__PURE__*/React__namespace.createElement("path", { - d: "M19 18C19 18.5523 18.5523 19 18 19V21C19.6569 21 21 19.6569 21 18H19ZM18 19C17.4477 19 17 18.5523 17 18H15C15 19.6569 16.3431 21 18 21V19ZM17 18C17 17.4477 17.4477 17 18 17V15C16.3431 15 15 16.3431 15 18H17ZM18 17C18.5523 17 19 17.4477 19 18H21C21 16.3431 19.6569 15 18 15V17ZM8 7H16V5H8V7ZM16 11H8V13H16V11ZM8 19H16V17H8V19ZM4 15C4 17.2091 5.79086 19 8 19V17C6.89543 17 6 16.1046 6 15H4ZM8 11C5.79086 11 4 12.7909 4 15H6C6 13.8954 6.89543 13 8 13V11ZM18 9C18 10.1046 17.1046 11 16 11V13C18.2091 13 20 11.2091 20 9H18ZM16 7C17.1046 7 18 7.89543 18 9H20C20 6.79086 18.2091 5 16 5V7ZM7 6C7 6.55228 6.55228 7 6 7V9C7.65685 9 9 7.65685 9 6H7ZM6 7C5.44772 7 5 6.55228 5 6H3C3 7.65685 4.34315 9 6 9V7ZM5 6C5 5.44772 5.44772 5 6 5V3C4.34315 3 3 4.34315 3 6H5ZM6 5C6.55228 5 7 5.44772 7 6H9C9 4.34315 7.65685 3 6 3V5Z" - }))); -}; - -var StyledAutoRouterIcon = styled__default["default"](SvgAutoRouter)(templateObject_1$A || (templateObject_1$A = __makeTemplateObject(["\n height: 16px;\n width: 16px;\n\n :hover {\n filter: brightness(1.3);\n }\n"], ["\n height: 16px;\n width: 16px;\n\n :hover {\n filter: brightness(1.3);\n }\n"]))); -var StyledStaticRouterIcon = styled__default["default"](SvgStaticRoute)(templateObject_2$o || (templateObject_2$o = __makeTemplateObject(["\n height: 16px;\n width: 16px;\n\n fill: ", ";\n\n :hover {\n filter: brightness(1.3);\n }\n"], ["\n height: 16px;\n width: 16px;\n\n fill: ", ";\n\n :hover {\n filter: brightness(1.3);\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.text3; -}); -var StyledAutoRouterLabel = styled__default["default"](ThemedText.Black)(templateObject_3$j || (templateObject_3$j = __makeTemplateObject(["\n line-height: 1rem;\n\n /* fallback color */\n color: ", ";\n\n @supports (-webkit-background-clip: text) and (-webkit-text-fill-color: transparent) {\n background-image: linear-gradient(90deg, #2172e5 0%, #54e521 163.16%);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n }\n"], ["\n line-height: 1rem;\n\n /* fallback color */\n color: ", ";\n\n @supports (-webkit-background-clip: text) and (-webkit-text-fill-color: transparent) {\n background-image: linear-gradient(90deg, #2172e5 0%, #54e521 163.16%);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.green1; -}); -function AutoRouterLogo() { - var autoRouterSupported = useAutoRouterSupported(); - return autoRouterSupported ? jsxRuntime.jsx(StyledAutoRouterIcon, {}, void 0) : jsxRuntime.jsx(StyledStaticRouterIcon, {}, void 0); -} -function AutoRouterLabel() { - var autoRouterSupported = useAutoRouterSupported(); - return autoRouterSupported ? (jsxRuntime.jsx(StyledAutoRouterLabel, __assign({ fontSize: 14 }, { children: "Auto Router" }), void 0)) : (jsxRuntime.jsx(ThemedText.Black, __assign({ fontSize: 14 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Trade Route" }, void 0) }), void 0)); -} -var templateObject_1$A, templateObject_2$o, templateObject_3$j; - -var Wrapper$a = styled__default["default"](AutoColumn)(templateObject_1$z || (templateObject_1$z = __makeTemplateObject(["\n padding: ", ";\n border-radius: 16px;\n border: 1px solid ", ";\n cursor: pointer;\n"], ["\n padding: ", ";\n border-radius: 16px;\n border: 1px solid ", ";\n cursor: pointer;\n"])), function (_a) { - var fixedOpen = _a.fixedOpen; - return (fixedOpen ? '12px' : '12px 8px 12px 12px'); -}, function (_a) { - var theme = _a.theme, fixedOpen = _a.fixedOpen; - return (fixedOpen ? 'transparent' : theme.bg2); -}); -var OpenCloseIcon = styled__default["default"](reactFeather.Plus)(templateObject_2$n || (templateObject_2$n = __makeTemplateObject(["\n margin-left: 8px;\n height: 20px;\n stroke-width: 2px;\n transition: transform 0.1s;\n transform: ", ";\n stroke: ", ";\n cursor: pointer;\n :hover {\n opacity: 0.8;\n }\n"], ["\n margin-left: 8px;\n height: 20px;\n stroke-width: 2px;\n transition: transform 0.1s;\n transform: ", ";\n stroke: ", ";\n cursor: pointer;\n :hover {\n opacity: 0.8;\n }\n"])), function (_a) { - var open = _a.open; - return (open ? 'rotate(45deg)' : 'none'); -}, function (_a) { - var theme = _a.theme; - return theme.text3; -}); -var V2_DEFAULT_FEE_TIER = 3000; -var SwapRoute = React.memo(function SwapRoute(_a) { - var trade = _a.trade, syncing = _a.syncing, _b = _a.fixedOpen, fixedOpen = _b === void 0 ? false : _b, rest = __rest(_a, ["trade", "syncing", "fixedOpen"]); - var autoRouterSupported = useAutoRouterSupported(); - var routes = getTokenPath(trade); - var _c = __read(React.useState(false), 2), open = _c[0], setOpen = _c[1]; - var chainId = useActiveWeb3React().chainId; - var _d = __read(useDarkModeManager(), 1), darkMode = _d[0]; - var formattedGasPriceString = (trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) - ? trade.gasUseEstimateUSD.toFixed(2) === '0.00' - ? '<$0.01' - : '$' + trade.gasUseEstimateUSD.toFixed(2) - : undefined; - return (jsxRuntime.jsxs(Wrapper$a, __assign({}, rest, { darkMode: darkMode, fixedOpen: fixedOpen }, { children: [jsxRuntime.jsxs(RowBetween, __assign({ onClick: function () { return setOpen(!open); } }, { children: [jsxRuntime.jsxs(AutoRow, __assign({ gap: "4px", width: "auto" }, { children: [jsxRuntime.jsx(AutoRouterLogo, {}, void 0), jsxRuntime.jsx(AutoRouterLabel, {}, void 0)] }), void 0), fixedOpen ? null : jsxRuntime.jsx(OpenCloseIcon, { open: open }, void 0)] }), void 0), jsxRuntime.jsx(AnimatedDropdown, __assign({ open: open || fixedOpen }, { children: jsxRuntime.jsxs(AutoRow, __assign({ gap: "4px", width: "auto", style: { paddingTop: '12px', margin: 0 } }, { children: [syncing ? (jsxRuntime.jsx(LoadingRows, { children: jsxRuntime.jsx("div", { style: { width: '400px', height: '30px' } }, void 0) }, void 0)) : (jsxRuntime.jsx(RoutingDiagram, { currencyIn: trade.inputAmount.currency, currencyOut: trade.outputAmount.currency, routes: routes }, void 0)), autoRouterSupported && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(Separator$1, {}, void 0), syncing ? (jsxRuntime.jsx(LoadingRows, { children: jsxRuntime.jsx("div", { style: { width: '250px', height: '15px' } }, void 0) }, void 0)) : (jsxRuntime.jsxs(ThemedText.Main, __assign({ fontSize: 12, width: 400, margin: 0 }, { children: [(trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) && chainId && SUPPORTED_GAS_ESTIMATE_CHAIN_IDS.includes(chainId) ? (jsxRuntime.jsxs(macro.Trans, { children: ["Best price route costs ~", formattedGasPriceString, " in gas. "] }, void 0)) : null, ' ', jsxRuntime.jsx(macro.Trans, { children: "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step." }, void 0)] }), void 0))] }, void 0))] }), void 0) }), void 0)] }), void 0)); -}); -function getTokenPath(trade) { - return trade.swaps.map(function (_a) { - var _b = _a.route, tokenPath = _b.path, pools = _b.pools, protocol = _b.protocol, inputAmount = _a.inputAmount, outputAmount = _a.outputAmount; - var portion = trade.tradeType === sdkCore.TradeType.EXACT_INPUT - ? inputAmount.divide(trade.inputAmount) - : outputAmount.divide(trade.outputAmount); - var percent = new sdkCore.Percent(portion.numerator, portion.denominator); - var path = []; - for (var i = 0; i < pools.length; i++) { - var nextPool = pools[i]; - var tokenIn = tokenPath[i]; - var tokenOut = tokenPath[i + 1]; - var entry = [ - tokenIn, - tokenOut, - nextPool instanceof v2Sdk.Pair ? V2_DEFAULT_FEE_TIER : nextPool.fee, - ]; - path.push(entry); - } - return { - percent: percent, - path: path, - protocol: protocol, - }; - }); -} -var templateObject_1$z, templateObject_2$n; - -var GasWrapper = styled__default["default"](RowFixed)(templateObject_1$y || (templateObject_1$y = __makeTemplateObject(["\n border-radius: 8px;\n padding: 4px 6px;\n height: 24px;\n color: ", ";\n background-color: ", ";\n font-size: 14px;\n font-weight: 500;\n user-select: none;\n"], ["\n border-radius: 8px;\n padding: 4px 6px;\n height: 24px;\n color: ", ";\n background-color: ", ";\n font-size: 14px;\n font-weight: 500;\n user-select: none;\n"])), function (_a) { - var theme = _a.theme; - return theme.text3; -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}); -var StyledGasIcon = styled__default["default"](SvgGasIcon)(templateObject_2$m || (templateObject_2$m = __makeTemplateObject(["\n margin-right: 4px;\n height: 14px;\n & > * {\n stroke: ", ";\n }\n"], ["\n margin-right: 4px;\n height: 14px;\n & > * {\n stroke: ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.text3; -}); -function GasEstimateBadge(_a) { - var _b; - var trade = _a.trade, loading = _a.loading, showRoute = _a.showRoute, disableHover = _a.disableHover; - var formattedGasPriceString = (trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) - ? trade.gasUseEstimateUSD.toFixed(2) === '0.00' - ? '<$0.01' - : '$' + trade.gasUseEstimateUSD.toFixed(2) - : undefined; - return (jsxRuntime.jsx(MouseoverTooltipContent, __assign({ wrap: false, disableHover: disableHover, content: loading ? null : (jsxRuntime.jsx(ResponsiveTooltipContainer, __assign({ origin: "top right", style: { - padding: showRoute ? '0' : '12px', - border: 'none', - borderRadius: showRoute ? '16px' : '12px', - maxWidth: '400px', - } }, { children: showRoute ? (trade ? (jsxRuntime.jsx(SwapRoute, { trade: trade, syncing: loading, fixedOpen: showRoute }, void 0)) : null) : (jsxRuntime.jsxs(AutoColumn, __assign({ gap: "4px", justify: "center" }, { children: [jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: "12px", textAlign: "center" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Estimated network fee" }, void 0) }), void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ textAlign: "center", fontWeight: 500, style: { userSelect: 'none' } }, { children: jsxRuntime.jsxs(macro.Trans, { children: ["$", (_b = trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) === null || _b === void 0 ? void 0 : _b.toFixed(2)] }, void 0) }), void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: "10px", textAlign: "center", maxWidth: "140px", color: "text3" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Estimate may differ due to your wallet gas settings" }, void 0) }), void 0)] }), void 0)) }), void 0)), placement: "bottom", onOpen: function () { - return ReactGA__default["default"].event({ - category: 'Gas', - action: 'Gas Details Tooltip Open', - }); - } }, { children: jsxRuntime.jsx(LoadingOpacityContainer, __assign({ "$loading": loading }, { children: jsxRuntime.jsxs(GasWrapper, { children: [jsxRuntime.jsx(StyledGasIcon, {}, void 0), formattedGasPriceString !== null && formattedGasPriceString !== void 0 ? formattedGasPriceString : null] }, void 0) }), void 0) }), void 0)); -} -var templateObject_1$y, templateObject_2$m; - -var Wrapper$9 = styled__default["default"](Row$1)(templateObject_1$x || (templateObject_1$x = __makeTemplateObject(["\n width: 100%;\n justify-content: center;\n"], ["\n width: 100%;\n justify-content: center;\n"]))); -var StyledInfoIcon = styled__default["default"](reactFeather.Info)(templateObject_2$l || (templateObject_2$l = __makeTemplateObject(["\n height: 16px;\n width: 16px;\n margin-right: 4px;\n color: ", ";\n"], ["\n height: 16px;\n width: 16px;\n margin-right: 4px;\n color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.text3; -}); -var StyledCard = styled__default["default"](OutlineCard)(templateObject_3$i || (templateObject_3$i = __makeTemplateObject(["\n padding: 12px;\n border: 1px solid ", ";\n"], ["\n padding: 12px;\n border: 1px solid ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}); -var StyledHeaderRow = styled__default["default"](RowBetween)(templateObject_4$b || (templateObject_4$b = __makeTemplateObject(["\n padding: 4px 8px;\n border-radius: 12px;\n background-color: ", ";\n align-items: center;\n cursor: ", ";\n min-height: 40px;\n\n :hover {\n background-color: ", ";\n }\n"], ["\n padding: 4px 8px;\n border-radius: 12px;\n background-color: ", ";\n align-items: center;\n cursor: ", ";\n min-height: 40px;\n\n :hover {\n background-color: ", ";\n }\n"])), function (_a) { - var open = _a.open, theme = _a.theme; - return (open ? theme.bg1 : 'transparent'); -}, function (_a) { - var disabled = _a.disabled; - return (disabled ? 'initial' : 'pointer'); -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return (disabled ? theme.bg1 : polished.darken(0.015, theme.bg1)); -}); -var RotatingArrow = styled__default["default"](reactFeather.ChevronDown)(templateObject_5$a || (templateObject_5$a = __makeTemplateObject(["\n transform: ", ";\n transition: transform 0.1s linear;\n"], ["\n transform: ", ";\n transition: transform 0.1s linear;\n"])), function (_a) { - var open = _a.open; - return (open ? 'rotate(180deg)' : 'none'); -}); -var StyledPolling = styled__default["default"].div(templateObject_7$5 || (templateObject_7$5 = __makeTemplateObject(["\n display: flex;\n height: 16px;\n width: 16px;\n margin-right: 2px;\n margin-left: 10px;\n align-items: center;\n color: ", ";\n transition: 250ms ease color;\n\n ", "\n"], ["\n display: flex;\n height: 16px;\n width: 16px;\n margin-right: 2px;\n margin-left: 10px;\n align-items: center;\n color: ", ";\n transition: 250ms ease color;\n\n ", "\n"])), function (_a) { - var theme = _a.theme; - return theme.text1; -}, function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToMedium(templateObject_6$6 || (templateObject_6$6 = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); -}); -var StyledPollingDot = styled__default["default"].div(templateObject_8$3 || (templateObject_8$3 = __makeTemplateObject(["\n width: 8px;\n height: 8px;\n min-height: 8px;\n min-width: 8px;\n border-radius: 50%;\n position: relative;\n background-color: ", ";\n transition: 250ms ease background-color;\n"], ["\n width: 8px;\n height: 8px;\n min-height: 8px;\n min-width: 8px;\n border-radius: 50%;\n position: relative;\n background-color: ", ";\n transition: 250ms ease background-color;\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}); -var rotate360 = styled.keyframes(templateObject_9$3 || (templateObject_9$3 = __makeTemplateObject(["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"], ["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"]))); -var Spinner = styled__default["default"].div(templateObject_10$3 || (templateObject_10$3 = __makeTemplateObject(["\n animation: ", " 1s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n transform: translateZ(0);\n border-top: 1px solid transparent;\n border-right: 1px solid transparent;\n border-bottom: 1px solid transparent;\n border-left: 2px solid ", ";\n background: transparent;\n width: 14px;\n height: 14px;\n border-radius: 50%;\n position: relative;\n transition: 250ms ease border-color;\n left: -3px;\n top: -3px;\n"], ["\n animation: ", " 1s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n transform: translateZ(0);\n border-top: 1px solid transparent;\n border-right: 1px solid transparent;\n border-bottom: 1px solid transparent;\n border-left: 2px solid ", ";\n background: transparent;\n width: 14px;\n height: 14px;\n border-radius: 50%;\n position: relative;\n transition: 250ms ease border-color;\n left: -3px;\n top: -3px;\n"])), rotate360, function (_a) { - var theme = _a.theme; - return theme.text1; -}); -function SwapDetailsDropdown(_a) { - var trade = _a.trade, syncing = _a.syncing, loading = _a.loading, showInverted = _a.showInverted, setShowInverted = _a.setShowInverted, allowedSlippage = _a.allowedSlippage; - var theme = styled.useTheme(); - var chainId = useActiveWeb3React().chainId; - var _b = __read(React.useState(false), 2), showDetails = _b[0], setShowDetails = _b[1]; - return (jsxRuntime.jsx(Wrapper$9, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: '8px', style: { width: '100%', marginBottom: '-8px' } }, { children: [jsxRuntime.jsxs(StyledHeaderRow, __assign({ onClick: function () { return setShowDetails(!showDetails); }, disabled: !trade, open: showDetails }, { children: [jsxRuntime.jsxs(RowFixed, __assign({ style: { position: 'relative' } }, { children: [loading || syncing ? (jsxRuntime.jsx(StyledPolling, { children: jsxRuntime.jsx(StyledPollingDot, { children: jsxRuntime.jsx(Spinner, {}, void 0) }, void 0) }, void 0)) : (jsxRuntime.jsx(HideSmall, { children: jsxRuntime.jsx(MouseoverTooltipContent, __assign({ wrap: false, content: jsxRuntime.jsx(ResponsiveTooltipContainer, __assign({ origin: "top right", style: { padding: '0' } }, { children: jsxRuntime.jsx(Card, __assign({ padding: "12px" }, { children: jsxRuntime.jsx(AdvancedSwapDetails, { trade: trade, allowedSlippage: allowedSlippage, syncing: syncing }, void 0) }), void 0) }), void 0), placement: "bottom", disableHover: showDetails }, { children: jsxRuntime.jsx(StyledInfoIcon, { color: trade ? theme.text3 : theme.bg3 }, void 0) }), void 0) }, void 0)), trade ? (jsxRuntime.jsx(LoadingOpacityContainer, __assign({ "$loading": syncing }, { children: jsxRuntime.jsx(TradePrice, { price: trade.executionPrice, showInverted: showInverted, setShowInverted: setShowInverted }, void 0) }), void 0)) : loading || syncing ? (jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: 14 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Fetching best price..." }, void 0) }), void 0)) : null] }), void 0), jsxRuntime.jsxs(RowFixed, { children: [!(trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) || - showDetails || - !chainId || - !SUPPORTED_GAS_ESTIMATE_CHAIN_IDS.includes(chainId) ? null : (jsxRuntime.jsx(GasEstimateBadge, { trade: trade, loading: syncing || loading, showRoute: !showDetails, disableHover: showDetails }, void 0)), jsxRuntime.jsx(RotatingArrow, { stroke: trade ? theme.text3 : theme.bg3, open: Boolean(trade && showDetails) }, void 0)] }, void 0)] }), void 0), jsxRuntime.jsx(AnimatedDropdown, __assign({ open: showDetails }, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: '8px', style: { padding: '0', paddingBottom: '8px' } }, { children: [trade ? (jsxRuntime.jsx(StyledCard, { children: jsxRuntime.jsx(AdvancedSwapDetails, { trade: trade, allowedSlippage: allowedSlippage, syncing: syncing }, void 0) }, void 0)) : null, trade ? jsxRuntime.jsx(SwapRoute, { trade: trade, syncing: syncing }, void 0) : null] }), void 0) }), void 0)] }), void 0) }, void 0)); -} -var templateObject_1$x, templateObject_2$l, templateObject_3$i, templateObject_4$b, templateObject_5$a, templateObject_6$6, templateObject_7$5, templateObject_8$3, templateObject_9$3, templateObject_10$3; - -var DetailsFooter = styled__default["default"].div(templateObject_1$w || (templateObject_1$w = __makeTemplateObject(["\n padding-top: calc(16px + 2rem);\n padding-bottom: 20px;\n margin-left: auto;\n margin-right: auto;\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: ", ";\n background-color: ", ";\n z-index: ", ";\n\n transform: ", ";\n transition: transform 300ms ease-in-out;\n text-align: center;\n"], ["\n padding-top: calc(16px + 2rem);\n padding-bottom: 20px;\n margin-left: auto;\n margin-right: auto;\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: ", ";\n background-color: ", ";\n z-index: ", ";\n\n transform: ", ";\n transition: transform 300ms ease-in-out;\n text-align: center;\n"])), function (_a) { - var theme = _a.theme; - return theme.text2; -}, function (_a) { - var theme = _a.theme; - return theme.advancedBG; -}, Z_INDEX.deprecated_zero, function (_a) { - var show = _a.show; - return (show ? 'translateY(0%)' : 'translateY(-100%)'); -}); -var StyledButtonEmpty = styled__default["default"](ButtonEmpty)(templateObject_2$k || (templateObject_2$k = __makeTemplateObject(["\n text-decoration: none;\n"], ["\n text-decoration: none;\n"]))); -var AddressText$1 = styled__default["default"](ThemedText.Blue)(templateObject_4$a || (templateObject_4$a = __makeTemplateObject(["\n font-size: 12px;\n\n ", "\n"], ["\n font-size: 12px;\n\n ", "\n"])), function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToSmall(templateObject_3$h || (templateObject_3$h = __makeTemplateObject(["\n font-size: 10px;\n"], ["\n font-size: 10px;\n"]))); -}); -function UnsupportedCurrencyFooter(_a) { - var show = _a.show, currencies = _a.currencies; - var chainId = useActiveWeb3React().chainId; - var _b = __read(React.useState(false), 2), showDetails = _b[0], setShowDetails = _b[1]; - var tokens = chainId && currencies - ? currencies.map(function (currency) { - return currency === null || currency === void 0 ? void 0 : currency.wrapped; - }) - : []; - var unsupportedTokens = useUnsupportedTokens(); - return (jsxRuntime.jsxs(DetailsFooter, __assign({ show: show }, { children: [jsxRuntime.jsx(Modal, __assign({ isOpen: showDetails, onDismiss: function () { return setShowDetails(false); } }, { children: jsxRuntime.jsx(Card, __assign({ padding: "2rem" }, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "lg" }, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(ThemedText.MediumHeader, { children: jsxRuntime.jsx(macro.Trans, { children: "Unsupported Assets" }, void 0) }, void 0), jsxRuntime.jsx(CloseIcon$2, { onClick: function () { return setShowDetails(false); } }, void 0)] }, void 0), tokens.map(function (token) { - var _a; - return (token && - unsupportedTokens && - Object.keys(unsupportedTokens).includes(token.address) && (jsxRuntime.jsx(OutlineCard, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "10px" }, { children: [jsxRuntime.jsxs(AutoRow, __assign({ gap: "5px", align: "center" }, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: token, size: '24px' }, void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 500 }, { children: token.symbol }), void 0)] }), void 0), chainId && (jsxRuntime.jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, token.address, ExplorerDataType.ADDRESS) }, { children: jsxRuntime.jsx(AddressText$1, { children: token.address }, void 0) }), void 0))] }), void 0) }, (_a = token.address) === null || _a === void 0 ? void 0 : _a.concat('not-supported')))); - }), jsxRuntime.jsx(AutoColumn, __assign({ gap: "lg" }, { children: jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 500 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons." }, void 0) }), void 0) }), void 0)] }), void 0) }), void 0) }), void 0), jsxRuntime.jsx(StyledButtonEmpty, __assign({ padding: '0', onClick: function () { return setShowDetails(true); } }, { children: jsxRuntime.jsx(ThemedText.Blue, { children: jsxRuntime.jsx(macro.Trans, { children: "Read more about unsupported assets" }, void 0) }, void 0) }), void 0)] }), void 0)); -} -var templateObject_1$w, templateObject_2$k, templateObject_3$h, templateObject_4$a; - -var ERC20_INTERFACE = new abi$7.Interface([ - { - constant: false, - inputs: [ - { name: '_spender', type: 'address' }, - { name: '_value', type: 'uint256' }, - ], - name: 'approve', - outputs: [{ name: '', type: 'bool' }], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, -]); -function approveAmountCalldata(amount, spender) { - if (!amount.currency.isToken) - throw new Error('Must call with an amount of token'); - var approveData = ERC20_INTERFACE.encodeFunctionData('approve', [spender, v3Sdk.toHex(amount.quotient)]); - return { - to: amount.currency.address, - data: approveData, - value: '0x0', - }; -} - -var ArgentWalletContractABI = [ - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "value", - type: "uint256" - }, - { - internalType: "bytes", - name: "data", - type: "bytes" - } - ], - name: "_transactions", - type: "tuple[]" - } - ], - name: "wc_multiCall", - outputs: [ - { - internalType: "bytes[]", - name: "", - type: "bytes[]" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "bytes32", - name: "_msgHash", - type: "bytes32" - }, - { - internalType: "bytes", - name: "_signature", - type: "bytes" - } - ], - name: "isValidSignature", - outputs: [ - { - internalType: "bytes4", - name: "", - type: "bytes4" - } - ], - stateMutability: "view", - type: "function" - } -]; - -function useIsArgentWallet() { - var _a, _b; - var account = useActiveWeb3React().account; - var argentWalletDetector = useArgentWalletDetectorContract(); - var inputs = React.useMemo(function () { return [account !== null && account !== void 0 ? account : undefined]; }, [account]); - var call = useSingleCallResult(argentWalletDetector, 'isArgentWallet', inputs, reduxMulticall.NEVER_RELOAD); - return (_b = (_a = call === null || call === void 0 ? void 0 : call.result) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : false; -} - -function useArgentWalletContract() { - var account = useActiveWeb3React().account; - var isArgentWallet = useIsArgentWallet(); - return useContract(isArgentWallet ? account !== null && account !== void 0 ? account : undefined : undefined, ArgentWalletContractABI, true); -} - -/** - * Returns the swap calls that can be used to make the trade - * @param trade trade to execute - * @param allowedSlippage user allowed slippage - * @param recipientAddressOrName the ENS name or address of the recipient of the swap output - * @param signatureData the signature data of the permit of the input token amount, if available - */ -function useSwapCallArguments(trade, allowedSlippage, recipientAddressOrName, signatureData, deadline) { - var _a = useActiveWeb3React(), account = _a.account, chainId = _a.chainId, library = _a.library; - var recipientAddress = useENS(recipientAddressOrName).address; - var recipient = recipientAddressOrName === null ? account : recipientAddress; - var routerContract = useV2RouterContract(); - var argentWalletContract = useArgentWalletContract(); - return React.useMemo(function () { - if (!trade || !recipient || !library || !account || !chainId || !deadline) - return []; - if (trade instanceof v2Sdk.Trade) { - if (!routerContract) - return []; - var swapMethods = []; - swapMethods.push(v2Sdk.Router.swapCallParameters(trade, { - feeOnTransfer: false, - allowedSlippage: allowedSlippage, - recipient: recipient, - deadline: deadline.toNumber(), - })); - if (trade.tradeType === sdkCore.TradeType.EXACT_INPUT) { - swapMethods.push(v2Sdk.Router.swapCallParameters(trade, { - feeOnTransfer: true, - allowedSlippage: allowedSlippage, - recipient: recipient, - deadline: deadline.toNumber(), - })); - } - return swapMethods.map(function (_a) { - var methodName = _a.methodName, args = _a.args, value = _a.value; - if (argentWalletContract && trade.inputAmount.currency.isToken) { - return { - address: argentWalletContract.address, - calldata: argentWalletContract.interface.encodeFunctionData('wc_multiCall', [ - [ - approveAmountCalldata(trade.maximumAmountIn(allowedSlippage), routerContract.address), - { - to: routerContract.address, - value: value, - data: routerContract.interface.encodeFunctionData(methodName, args), - }, - ], - ]), - value: '0x0', - }; - } - else { - return { - address: routerContract.address, - calldata: routerContract.interface.encodeFunctionData(methodName, args), - value: value, - }; - } - }); - } - else { - // swap options shared by v3 and v2+v3 swap routers - var sharedSwapOptions = __assign({ recipient: recipient, slippageTolerance: allowedSlippage }, (signatureData - ? { - inputTokenPermit: 'allowed' in signatureData - ? { - expiry: signatureData.deadline, - nonce: signatureData.nonce, - s: signatureData.s, - r: signatureData.r, - v: signatureData.v, - } - : { - deadline: signatureData.deadline, - amount: signatureData.amount, - s: signatureData.s, - r: signatureData.r, - v: signatureData.v, - }, - } - : {})); - var swapRouterAddress = chainId - ? trade instanceof v3Sdk.Trade - ? V3_ROUTER_ADDRESS[chainId] - : SWAP_ROUTER_ADDRESSES[chainId] - : undefined; - if (!swapRouterAddress) - return []; - var _a = trade instanceof v3Sdk.Trade - ? v3Sdk.SwapRouter.swapCallParameters(trade, __assign(__assign({}, sharedSwapOptions), { deadline: deadline.toString() })) - : routerSdk.SwapRouter.swapCallParameters(trade, __assign(__assign({}, sharedSwapOptions), { deadlineOrPreviousBlockhash: deadline.toString() })), value = _a.value, calldata = _a.calldata; - if (argentWalletContract && trade.inputAmount.currency.isToken) { - return [ - { - address: argentWalletContract.address, - calldata: argentWalletContract.interface.encodeFunctionData('wc_multiCall', [ - [ - approveAmountCalldata(trade.maximumAmountIn(allowedSlippage), swapRouterAddress), - { - to: swapRouterAddress, - value: value, - data: calldata, - }, - ], - ]), - value: '0x0', - }, - ]; - } - return [ - { - address: swapRouterAddress, - calldata: calldata, - value: value, - }, - ]; - } - }, [ - trade, - recipient, - library, - account, - chainId, - deadline, - routerContract, - allowedSlippage, - argentWalletContract, - signatureData, - ]); -} - -/** - * This is hacking out the revert reason from the ethers provider thrown error however it can. - * This object seems to be undocumented by ethers. - * @param error an error from the ethers provider - */ -function swapErrorToUserReadableMessage(error) { - var _a, _b, _c, _d; - var reason; - while (Boolean(error)) { - reason = (_b = (_a = error.reason) !== null && _a !== void 0 ? _a : error.message) !== null && _b !== void 0 ? _b : reason; - error = (_c = error.error) !== null && _c !== void 0 ? _c : (_d = error.data) === null || _d === void 0 ? void 0 : _d.originalError; - } - if ((reason === null || reason === void 0 ? void 0 : reason.indexOf('execution reverted: ')) === 0) - reason = reason.substr('execution reverted: '.length); - switch (reason) { - case 'UniswapV2Router: EXPIRED': - return (jsxRuntime.jsx(macro.Trans, { children: "The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low." }, void 0)); - case 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT': - case 'UniswapV2Router: EXCESSIVE_INPUT_AMOUNT': - return (jsxRuntime.jsx(macro.Trans, { children: "This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance." }, void 0)); - case 'TransferHelper: TRANSFER_FROM_FAILED': - return jsxRuntime.jsx(macro.Trans, { children: "The input token cannot be transferred. There may be an issue with the input token." }, void 0); - case 'UniswapV2: TRANSFER_FAILED': - return jsxRuntime.jsx(macro.Trans, { children: "The output token cannot be transferred. There may be an issue with the output token." }, void 0); - case 'UniswapV2: K': - return (jsxRuntime.jsx(macro.Trans, { children: "The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer." }, void 0)); - case 'Too little received': - case 'Too much requested': - case 'STF': - return (jsxRuntime.jsx(macro.Trans, { children: "This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3." }, void 0)); - case 'TF': - return (jsxRuntime.jsx(macro.Trans, { children: "The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3." }, void 0)); - default: - if ((reason === null || reason === void 0 ? void 0 : reason.indexOf('undefined is not an object')) !== -1) { - console.error(error, reason); - return (jsxRuntime.jsx(macro.Trans, { children: "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3." }, void 0)); - } - return (jsxRuntime.jsxs(macro.Trans, { children: ["Unknown error", reason ? ": \"" + reason + "\"" : '', ". Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3."] }, void 0)); - } -} - -// returns a function that will execute a swap, if the parameters are all valid -function useSendSwapTransaction(account, chainId, library, trade, // trade to execute, required -swapCalls) { - return React.useMemo(function () { - if (!trade || !library || !account || !chainId) { - return { callback: null }; - } - return { - callback: function onSwap() { - return __awaiter(this, void 0, void 0, function () { - var estimatedCalls, bestCallOption, errorCalls, firstNoErrorCall, _a, address, calldata, value; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, Promise.all(swapCalls.map(function (call) { - var address = call.address, calldata = call.calldata, value = call.value; - var tx = !value || isZero(value) - ? { from: account, to: address, data: calldata } - : { - from: account, - to: address, - data: calldata, - value: value, - }; - return library - .estimateGas(tx) - .then(function (gasEstimate) { - return { - call: call, - gasEstimate: gasEstimate, - }; - }) - .catch(function (gasError) { - console.debug('Gas estimate failed, trying eth_call to extract error', call); - return library - .call(tx) - .then(function (result) { - console.debug('Unexpected successful call after failed estimate gas', call, gasError, result); - return { call: call, error: jsxRuntime.jsx(macro.Trans, { children: "Unexpected issue with estimating the gas. Please try again." }, void 0) }; - }) - .catch(function (callError) { - console.debug('Call threw error', call, callError); - return { call: call, error: swapErrorToUserReadableMessage(callError) }; - }); - }); - })) - // a successful estimation is a bignumber gas estimate and the next call is also a bignumber gas estimate - ]; - case 1: - estimatedCalls = _b.sent(); - bestCallOption = estimatedCalls.find(function (el, ix, list) { - return 'gasEstimate' in el && (ix === list.length - 1 || 'gasEstimate' in list[ix + 1]); - }); - // check if any calls errored with a recognizable error - if (!bestCallOption) { - errorCalls = estimatedCalls.filter(function (call) { return 'error' in call; }); - if (errorCalls.length > 0) - throw errorCalls[errorCalls.length - 1].error; - firstNoErrorCall = estimatedCalls.find(function (call) { return !('error' in call); }); - if (!firstNoErrorCall) - throw new Error(macro.t(templateObject_1$v || (templateObject_1$v = __makeTemplateObject(["Unexpected error. Could not estimate gas for the swap."], ["Unexpected error. Could not estimate gas for the swap."])))); - bestCallOption = firstNoErrorCall; - } - _a = bestCallOption.call, address = _a.address, calldata = _a.calldata, value = _a.value; - return [2 /*return*/, library - .getSigner() - .sendTransaction(__assign(__assign({ from: account, to: address, data: calldata }, ('gasEstimate' in bestCallOption ? { gasLimit: calculateGasMargin(bestCallOption.gasEstimate) } : {})), (value && !isZero(value) ? { value: value } : {}))) - .then(function (response) { - return response; - }) - .catch(function (error) { - // if the user rejected the tx, pass this along - if ((error === null || error === void 0 ? void 0 : error.code) === 4001) { - throw new Error(macro.t(templateObject_2$j || (templateObject_2$j = __makeTemplateObject(["Transaction rejected."], ["Transaction rejected."])))); - } - else { - // otherwise, the error was unexpected and we need to convey that - console.error("Swap failed", error, address, calldata, value); - throw new Error(macro.t(templateObject_3$g || (templateObject_3$g = __makeTemplateObject(["Swap failed: ", ""], ["Swap failed: ", ""])), swapErrorToUserReadableMessage(error))); - } - })]; - } - }); - }); - }, - }; - }, [account, chainId, library, swapCalls, trade]); -} -var templateObject_1$v, templateObject_2$j, templateObject_3$g; - -var SwapCallbackState; -(function (SwapCallbackState) { - SwapCallbackState[SwapCallbackState["INVALID"] = 0] = "INVALID"; - SwapCallbackState[SwapCallbackState["LOADING"] = 1] = "LOADING"; - SwapCallbackState[SwapCallbackState["VALID"] = 2] = "VALID"; -})(SwapCallbackState || (SwapCallbackState = {})); -// returns a function that will execute a swap, if the parameters are all valid -// and the user has approved the slippage adjusted input amount for the trade -function useSwapCallback$1(trade, // trade to execute, required -allowedSlippage, // in bips -recipientAddressOrName, // the ENS name or address of the recipient of the trade, or null if swap should be returned to sender -signatureData, deadline) { - var _a = useActiveWeb3React(), account = _a.account, chainId = _a.chainId, library = _a.library; - var swapCalls = useSwapCallArguments(trade, allowedSlippage, recipientAddressOrName, signatureData, deadline); - var callback = useSendSwapTransaction(account, chainId, library, trade, swapCalls).callback; - var recipientAddress = useENS(recipientAddressOrName).address; - var recipient = recipientAddressOrName === null ? account : recipientAddress; - return React.useMemo(function () { - if (!trade || !library || !account || !chainId || !callback) { - return { state: SwapCallbackState.INVALID, callback: null, error: jsxRuntime.jsx(macro.Trans, { children: "Missing dependencies" }, void 0) }; - } - if (!recipient) { - if (recipientAddressOrName !== null) { - return { state: SwapCallbackState.INVALID, callback: null, error: jsxRuntime.jsx(macro.Trans, { children: "Invalid recipient" }, void 0) }; - } - else { - return { state: SwapCallbackState.LOADING, callback: null, error: null }; - } - } - return { - state: SwapCallbackState.VALID, - callback: function onSwap() { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, callback().then(function (response) { - return response; - })]; - }); - }); - }, - error: null, - }; - }, [trade, library, account, chainId, callback, recipient, recipientAddressOrName]); -} - -function currencyId(currency) { - if (currency.isNative) - return 'ETH'; - if (currency.isToken) - return currency.address; - throw new Error('invalid currency'); -} - -// combines the block timestamp with the user setting to give the deadline that should be used for any submitted transaction -function useTransactionDeadline() { - var chainId = useActiveWeb3React().chainId; - var ttl = useAppSelector(function (state) { return state.user.userDeadline; }); - var blockTimestamp = useCurrentBlockTimestamp(); - return React.useMemo(function () { - if (blockTimestamp && chainId && L2_CHAIN_IDS.includes(chainId)) - return blockTimestamp.add(L2_DEADLINE_FROM_NOW); - if (blockTimestamp && ttl) - return blockTimestamp.add(ttl); - return undefined; - }, [blockTimestamp, chainId, ttl]); -} - -// eslint-disable-next-line no-restricted-imports -// returns a function that will execute a swap, if the parameters are all valid -// and the user has approved the slippage adjusted input amount for the trade -function useSwapCallback(trade, // trade to execute, required -allowedSlippage, // in bips -recipientAddressOrName, // the ENS name or address of the recipient of the trade, or null if swap should be returned to sender -signatureData) { - var account = useActiveWeb3React().account; - var deadline = useTransactionDeadline(); - var addTransaction = useTransactionAdder(); - var recipientAddress = useENS(recipientAddressOrName).address; - var recipient = recipientAddressOrName === null ? account : recipientAddress; - var _a = useSwapCallback$1(trade, allowedSlippage, recipient, signatureData, deadline), state = _a.state, libCallback = _a.callback, error = _a.error; - var callback = React.useMemo(function () { - if (!libCallback || !trade) { - return null; - } - return function () { - return libCallback().then(function (response) { - addTransaction(response, trade.tradeType === sdkCore.TradeType.EXACT_INPUT - ? { - type: TransactionType.SWAP, - tradeType: sdkCore.TradeType.EXACT_INPUT, - inputCurrencyId: currencyId(trade.inputAmount.currency), - inputCurrencyAmountRaw: trade.inputAmount.quotient.toString(), - expectedOutputCurrencyAmountRaw: trade.outputAmount.quotient.toString(), - outputCurrencyId: currencyId(trade.outputAmount.currency), - minimumOutputCurrencyAmountRaw: trade.minimumAmountOut(allowedSlippage).quotient.toString(), - } - : { - type: TransactionType.SWAP, - tradeType: sdkCore.TradeType.EXACT_OUTPUT, - inputCurrencyId: currencyId(trade.inputAmount.currency), - maximumInputCurrencyAmountRaw: trade.maximumAmountIn(allowedSlippage).quotient.toString(), - outputCurrencyId: currencyId(trade.outputAmount.currency), - outputCurrencyAmountRaw: trade.outputAmount.quotient.toString(), - expectedInputCurrencyAmountRaw: trade.inputAmount.quotient.toString(), - }); - return response.hash; - }); - }; - }, [addTransaction, allowedSlippage, libCallback, trade]); - return { - state: state, - callback: callback, - error: error, - }; -} - -function formatCurrencyAmount(amount, sigFigs) { - if (!amount) { - return '-'; - } - if (JSBI__default["default"].equal(amount.quotient, JSBI__default["default"].BigInt(0))) { - return '0'; - } - if (amount.divide(amount.decimalScale).lessThan(new sdkCore.Fraction(1, 100000))) { - return '<0.00001'; - } - return amount.toSignificant(sigFigs); -} - -var _path; - -function _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); } - -var SvgDropdown = function SvgDropdown(props) { - return /*#__PURE__*/React__namespace.createElement("svg", _extends({ - width: 12, - height: 7, - viewBox: "0 0 12 7", - fill: "none", - xmlns: "http://www.w3.org/2000/svg" - }, props), _path || (_path = /*#__PURE__*/React__namespace.createElement("path", { - d: "M0.97168 1L6.20532 6L11.439 1", - stroke: "#AEAEAE" - }))); -}; - -var StyledInput = styled__default["default"].input(templateObject_1$u || (templateObject_1$u = __makeTemplateObject(["\n color: ", ";\n width: 0;\n position: relative;\n font-weight: 500;\n outline: none;\n border: none;\n flex: 1 1 auto;\n background-color: ", ";\n font-size: ", ";\n text-align: ", ";\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 0px;\n -webkit-appearance: textfield;\n text-align: right;\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: ", ";\n }\n"], ["\n color: ", ";\n width: 0;\n position: relative;\n font-weight: 500;\n outline: none;\n border: none;\n flex: 1 1 auto;\n background-color: ", ";\n font-size: ", ";\n text-align: ", ";\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 0px;\n -webkit-appearance: textfield;\n text-align: right;\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: ", ";\n }\n"])), function (_a) { - var error = _a.error, theme = _a.theme; - return (error ? theme.red1 : theme.text1); -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var fontSize = _a.fontSize; - return fontSize !== null && fontSize !== void 0 ? fontSize : '28px'; -}, function (_a) { - var align = _a.align; - return align && align; -}, function (_a) { - var theme = _a.theme; - return theme.text4; -}); -var inputRegex = RegExp("^\\d*(?:\\\\[.])?\\d*$"); // match escaped "." characters via in a non-capturing group -var Input$1 = React__default["default"].memo(function InnerInput(_a) { - var value = _a.value, onUserInput = _a.onUserInput, placeholder = _a.placeholder, prependSymbol = _a.prependSymbol, rest = __rest(_a, ["value", "onUserInput", "placeholder", "prependSymbol"]); - var enforcer = function (nextUserInput) { - if (nextUserInput === '' || inputRegex.test(escapeRegExp(nextUserInput))) { - onUserInput(nextUserInput); - } - }; - return (jsxRuntime.jsx(StyledInput, __assign({}, rest, { value: prependSymbol && value ? prependSymbol + value : value, onChange: function (event) { - if (prependSymbol) { - var value_1 = event.target.value; - // cut off prepended symbol - var formattedValue = value_1.toString().includes(prependSymbol) - ? value_1.toString().slice(1, value_1.toString().length + 1) - : value_1; - // replace commas with periods, because uniswap exclusively uses period as the decimal separator - enforcer(formattedValue.replace(/,/g, '.')); - } - else { - enforcer(event.target.value.replace(/,/g, '.')); - } - }, - // universal input options - inputMode: "decimal", autoComplete: "off", autoCorrect: "off", - // text-specific options - type: "text", pattern: "^[0-9]*[.,]?[0-9]*$", placeholder: placeholder || '0.0', minLength: 1, maxLength: 79, spellCheck: "false" }), void 0)); -}); -var templateObject_1$u; - -/** - * Returns the last value of type T that passes a filter function - * @param value changing value - * @param filterFn function that determines whether a given value should be considered for the last value - */ -function useLast(value, filterFn) { - var _a = __read(React.useState(filterFn && filterFn(value) ? value : undefined), 2), last = _a[0], setLast = _a[1]; - React.useEffect(function () { - setLast(function (last) { - var shouldUse = filterFn ? filterFn(value) : true; - if (shouldUse) - return value; - return last; - }); - }, [filterFn, value]); - return last; -} - -function useToggle(initialState) { - if (initialState === void 0) { initialState = false; } - var _a = __read(React.useState(initialState), 2), state = _a[0], setState = _a[1]; - var toggle = React.useCallback(function () { return setState(function (state) { return !state; }); }, []); - return [state, toggle]; -} - -var MobileWrapper = styled__default["default"](AutoColumn)(templateObject_2$i || (templateObject_2$i = __makeTemplateObject(["\n ", ";\n"], ["\n ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToSmall(templateObject_1$t || (templateObject_1$t = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); -}); -var BaseWrapper = styled__default["default"].div(templateObject_3$f || (templateObject_3$f = __makeTemplateObject(["\n border: 1px solid ", ";\n border-radius: 10px;\n display: flex;\n padding: 6px;\n\n align-items: center;\n :hover {\n cursor: ", ";\n background-color: ", ";\n }\n\n color: ", ";\n background-color: ", ";\n filter: ", ";\n"], ["\n border: 1px solid ", ";\n border-radius: 10px;\n display: flex;\n padding: 6px;\n\n align-items: center;\n :hover {\n cursor: ", ";\n background-color: ", ";\n }\n\n color: ", ";\n background-color: ", ";\n filter: ", ";\n"])), function (_a) { - var theme = _a.theme, disable = _a.disable; - return (disable ? 'transparent' : theme.bg3); -}, function (_a) { - var disable = _a.disable; - return !disable && 'pointer'; -}, function (_a) { - var theme = _a.theme, disable = _a.disable; - return !disable && theme.bg2; -}, function (_a) { - var theme = _a.theme, disable = _a.disable; - return disable && theme.text3; -}, function (_a) { - var theme = _a.theme, disable = _a.disable; - return disable && theme.bg3; -}, function (_a) { - var disable = _a.disable; - return disable && 'grayscale(1)'; -}); -function CommonBases(_a) { - var _b; - var chainId = _a.chainId, onSelect = _a.onSelect, selectedCurrency = _a.selectedCurrency; - var bases = typeof chainId !== 'undefined' ? (_b = COMMON_BASES[chainId]) !== null && _b !== void 0 ? _b : [] : []; - return bases.length > 0 ? (jsxRuntime.jsx(MobileWrapper, __assign({ gap: "md" }, { children: jsxRuntime.jsx(AutoRow, __assign({ gap: "4px" }, { children: bases.map(function (currency) { - var isSelected = selectedCurrency === null || selectedCurrency === void 0 ? void 0 : selectedCurrency.equals(currency); - return (jsxRuntime.jsxs(BaseWrapper, __assign({ onClick: function () { return !isSelected && onSelect(currency); }, disable: isSelected }, { children: [jsxRuntime.jsx(CurrencyLogoFromList, { currency: currency }, void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 16 }, { children: currency.symbol }), void 0)] }), currencyId(currency))); - }) }), void 0) }), void 0)) : null; -} -/** helper component to retrieve a base currency from the active token lists */ -function CurrencyLogoFromList(_a) { - var currency = _a.currency; - var token = useTokenInfoFromActiveList(currency); - return jsxRuntime.jsx(CurrencyLogo, { currency: token, style: { marginRight: 8 } }, void 0); -} -var templateObject_1$t, templateObject_2$i, templateObject_3$f; - -var QuestionWrapper = styled__default["default"].div(templateObject_1$s || (templateObject_1$s = __makeTemplateObject(["\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0px;\n width: 18px;\n height: 18px;\n border: none;\n background: none;\n outline: none;\n cursor: default;\n border-radius: 36px;\n font-size: 12px;\n background-color: ", ";\n color: ", ";\n\n :hover,\n :focus {\n opacity: 0.7;\n }\n"], ["\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0px;\n width: 18px;\n height: 18px;\n border: none;\n background: none;\n outline: none;\n cursor: default;\n border-radius: 36px;\n font-size: 12px;\n background-color: ", ";\n color: ", ";\n\n :hover,\n :focus {\n opacity: 0.7;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}, function (_a) { - var theme = _a.theme; - return theme.text2; -}); -var QuestionMark = styled__default["default"].span(templateObject_2$h || (templateObject_2$h = __makeTemplateObject(["\n font-size: 14px;\n"], ["\n font-size: 14px;\n"]))); -function QuestionHelper(_a) { - var text = _a.text; - var _b = __read(React.useState(false), 2), show = _b[0], setShow = _b[1]; - var open = React.useCallback(function () { return setShow(true); }, [setShow]); - var close = React.useCallback(function () { return setShow(false); }, [setShow]); - return (jsxRuntime.jsx("span", __assign({ style: { marginLeft: 4, display: 'flex', alignItems: 'center' } }, { children: jsxRuntime.jsx(Tooltip, __assign({ text: text, show: show }, { children: jsxRuntime.jsx(QuestionWrapper, __assign({ onClick: open, onMouseEnter: open, onMouseLeave: close }, { children: jsxRuntime.jsx(QuestionMark, { children: "?" }, void 0) }), void 0) }), void 0) }), void 0)); -} -var templateObject_1$s, templateObject_2$h; - -var TokenListLogo = "data:image/svg+xml,%3Csvg%20width%3D%22225%22%20height%3D%22225%22%20viewBox%3D%220%200%20225%20225%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M74.8125%20190.529C65.7561%20190.513%2055.5298%20183.748%2051.9715%20175.42L19.9417%20100.456C16.3834%2092.1277%2020.8404%2085.39%2029.8968%2085.4068L111.417%2085.5579C120.473%2085.5747%20130.699%2092.3395%20134.258%20100.668L166.288%20175.632C169.846%20183.96%20165.389%20190.697%20156.332%20190.681L74.8125%20190.529Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint0_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint1_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint2_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint3_radial%29%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M92.958%20165.95C82.7695%20165.931%2071.265%20158.321%2067.2619%20148.952L26.2489%2052.9632C22.2458%2043.5941%2027.26%2036.0143%2037.4485%2036.0332L141.832%2036.2266C152.02%2036.2455%20163.525%2043.8559%20167.528%2053.225L208.541%20149.214C212.544%20158.583%20207.53%20166.163%20197.341%20166.144L92.958%20165.95ZM71.3614%20148.959C74.475%20156.246%2083.4229%20162.166%2091.3473%20162.18L195.73%20162.374C203.655%20162.388%20207.555%20156.493%20204.441%20149.206L163.428%2053.2174C160.315%2045.9304%20151.367%2040.0111%20143.442%2039.9964L39.0592%2039.803C31.1349%2039.7883%2027.2349%2045.6837%2030.3485%2052.9708L71.3614%20148.959Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M68.565%2053.3425C81.1781%2053.3659%2095.4205%2062.7875%20100.376%2074.3862C105.332%2085.985%2099.1246%2095.3687%2086.5115%2095.3454C73.8984%2095.322%2059.6559%2085.9004%2054.7001%2074.3016C49.7443%2062.7028%2055.9518%2053.3191%2068.565%2053.3425Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M90.6891%20104.981C103.302%20105.004%20117.545%20114.425%20122.5%20126.024C127.456%20137.623%20121.249%20147.007%20108.636%20146.983C96.0225%20146.96%2081.7801%20137.538%2076.8243%20125.94C71.8685%20114.341%2078.076%20104.957%2090.6891%20104.981Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M147.538%20105.142C160.151%20105.166%20174.394%20114.587%20179.349%20126.186C184.305%20137.785%20178.098%20147.168%20165.485%20147.145C152.871%20147.122%20138.629%20137.7%20133.673%20126.101C128.717%20114.503%20134.925%20105.119%20147.538%20105.142Z%22%20fill%3D%22%23131313%22%2F%3E%3Cdefs%3E%3CradialGradient%20id%3D%22paint0_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%28134.41%2068.3006%29%20rotate%28-33.9533%29%20scale%2890.6795%2083.3208%29%22%3E%3Cstop%20offset%3D%220.661458%22%20stop-color%3D%22%23C4FCF8%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint1_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%2842.7873%20129.218%29%20rotate%28-24.1606%29%20scale%28213.359%20196.045%29%22%3E%3Cstop%20stop-color%3D%22%23FF0099%22%20stop-opacity%3D%220.9%22%2F%3E%3Cstop%20offset%3D%220.770833%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint2_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%28176.854%20148.655%29%20rotate%28-53.4908%29%20scale%28107.342%2098.6309%29%22%3E%3Cstop%20stop-color%3D%22%23FFEC43%22%2F%3E%3Cstop%20offset%3D%220.805707%22%20stop-color%3D%22%23FFF6A8%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint3_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%2857.5443%2053.4752%29%20rotate%2820.3896%29%20scale%28137.027%20125.907%29%22%3E%3Cstop%20offset%3D%220.125%22%20stop-color%3D%22%235886FE%22%20stop-opacity%3D%220.46%22%2F%3E%3Cstop%20offset%3D%220.673044%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3C%2Fdefs%3E%3C%2Fsvg%3E"; - -var StyledListLogo = styled__default["default"](Logo)(templateObject_1$r || (templateObject_1$r = __makeTemplateObject(["\n width: ", ";\n height: ", ";\n"], ["\n width: ", ";\n height: ", ";\n"])), function (_a) { - var size = _a.size; - return size; -}, function (_a) { - var size = _a.size; - return size; -}); -function ListLogo(_a) { - var logoURI = _a.logoURI, style = _a.style, _b = _a.size, size = _b === void 0 ? '24px' : _b, alt = _a.alt; - var srcs = useHttpLocations(logoURI); - return jsxRuntime.jsx(StyledListLogo, { alt: alt, size: size, srcs: srcs, style: style }, void 0); -} -var templateObject_1$r; - -var TokenSection = styled__default["default"].div(templateObject_1$q || (templateObject_1$q = __makeTemplateObject(["\n padding: 4px 20px;\n height: 56px;\n display: grid;\n grid-template-columns: auto minmax(auto, 1fr) auto;\n grid-gap: 16px;\n align-items: center;\n\n opacity: ", ";\n"], ["\n padding: 4px 20px;\n height: 56px;\n display: grid;\n grid-template-columns: auto minmax(auto, 1fr) auto;\n grid-gap: 16px;\n align-items: center;\n\n opacity: ", ";\n"])), function (_a) { - var dim = _a.dim; - return (dim ? '0.4' : '1'); -}); -var CheckIcon = styled__default["default"](reactFeather.CheckCircle)(templateObject_2$g || (templateObject_2$g = __makeTemplateObject(["\n height: 16px;\n width: 16px;\n margin-right: 6px;\n stroke: ", ";\n"], ["\n height: 16px;\n width: 16px;\n margin-right: 6px;\n stroke: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.green1; -}); -var NameOverflow = styled__default["default"].div(templateObject_3$e || (templateObject_3$e = __makeTemplateObject(["\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 140px;\n font-size: 12px;\n"], ["\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 140px;\n font-size: 12px;\n"]))); -function ImportRow(_a) { - var token = _a.token, style = _a.style, dim = _a.dim, showImportView = _a.showImportView, setImportToken = _a.setImportToken; - var theme = useTheme(); - // check if already active on list or local storage tokens - var isAdded = useIsUserAddedToken(token); - var isActive = useIsTokenActive(token); - var list = token instanceof WrappedTokenInfo ? token.list : undefined; - return (jsxRuntime.jsxs(TokenSection, __assign({ style: style }, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: token, size: '24px', style: { opacity: dim ? '0.6' : '1' } }, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "4px", style: { opacity: dim ? '0.6' : '1' } }, { children: [jsxRuntime.jsxs(AutoRow, { children: [jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 500 }, { children: token.symbol }), void 0), jsxRuntime.jsx(ThemedText.DarkGray, __assign({ ml: "8px", fontWeight: 300 }, { children: jsxRuntime.jsx(NameOverflow, __assign({ title: token.name }, { children: token.name }), void 0) }), void 0)] }, void 0), list && list.logoURI && (jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(ThemedText.Small, __assign({ mr: "4px", color: theme.text3 }, { children: jsxRuntime.jsxs(macro.Trans, { children: ["via ", list.name, " "] }, void 0) }), void 0), jsxRuntime.jsx(ListLogo, { logoURI: list.logoURI, size: "12px" }, void 0)] }, void 0))] }), void 0), !isActive && !isAdded ? (jsxRuntime.jsx(ButtonPrimary, __assign({ width: "fit-content", padding: "6px 12px", fontWeight: 500, fontSize: "14px", onClick: function () { - setImportToken && setImportToken(token); - showImportView(); - } }, { children: jsxRuntime.jsx(macro.Trans, { children: "Import" }, void 0) }), void 0)) : (jsxRuntime.jsxs(RowFixed, __assign({ style: { minWidth: 'fit-content' } }, { children: [jsxRuntime.jsx(CheckIcon, {}, void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ color: theme.green1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Active" }, void 0) }), void 0)] }), void 0))] }), void 0)); -} -var templateObject_1$q, templateObject_2$g, templateObject_3$e; - -var TextDot = styled__default["default"].div(templateObject_1$p || (templateObject_1$p = __makeTemplateObject(["\n height: 3px;\n width: 3px;\n background-color: ", ";\n border-radius: 50%;\n"], ["\n height: 3px;\n width: 3px;\n background-color: ", ";\n border-radius: 50%;\n"])), function (_a) { - var theme = _a.theme; - return theme.text2; -}); -var Checkbox = styled__default["default"].input(templateObject_2$f || (templateObject_2$f = __makeTemplateObject(["\n border: 1px solid ", ";\n height: 20px;\n margin: 0;\n"], ["\n border: 1px solid ", ";\n height: 20px;\n margin: 0;\n"])), function (_a) { - var theme = _a.theme; - return theme.red3; -}); -var PaddedColumn = styled__default["default"](AutoColumn)(templateObject_3$d || (templateObject_3$d = __makeTemplateObject(["\n padding: 20px;\n"], ["\n padding: 20px;\n"]))); -var MenuItem = styled__default["default"](RowBetween)(templateObject_4$9 || (templateObject_4$9 = __makeTemplateObject(["\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: ", ";\n pointer-events: ", ";\n :hover {\n background-color: ", ";\n }\n opacity: ", ";\n"], ["\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: ", ";\n pointer-events: ", ";\n :hover {\n background-color: ", ";\n }\n opacity: ", ";\n"])), function (_a) { - var disabled = _a.disabled; - return !disabled && 'pointer'; -}, function (_a) { - var disabled = _a.disabled; - return disabled && 'none'; -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return !disabled && theme.bg2; -}, function (_a) { - var disabled = _a.disabled, selected = _a.selected; - return (disabled || selected ? 0.5 : 1); -}); -var SearchInput = styled__default["default"].input(templateObject_5$9 || (templateObject_5$9 = __makeTemplateObject(["\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: ", ";\n border-style: solid;\n border: 1px solid ", ";\n -webkit-appearance: none;\n\n font-size: 18px;\n\n ::placeholder {\n color: ", ";\n }\n transition: border 100ms;\n :focus {\n border: 1px solid ", ";\n outline: none;\n }\n"], ["\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: ", ";\n border-style: solid;\n border: 1px solid ", ";\n -webkit-appearance: none;\n\n font-size: 18px;\n\n ::placeholder {\n color: ", ";\n }\n transition: border 100ms;\n :focus {\n border: 1px solid ", ";\n outline: none;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.text1; -}, function (_a) { - var theme = _a.theme; - return theme.bg3; -}, function (_a) { - var theme = _a.theme; - return theme.text3; -}, function (_a) { - var theme = _a.theme; - return theme.primary1; -}); -var Separator = styled__default["default"].div(templateObject_6$5 || (templateObject_6$5 = __makeTemplateObject(["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"], ["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}); -var SeparatorDark = styled__default["default"].div(templateObject_7$4 || (templateObject_7$4 = __makeTemplateObject(["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"], ["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg3; -}); -var templateObject_1$p, templateObject_2$f, templateObject_3$d, templateObject_4$9, templateObject_5$9, templateObject_6$5, templateObject_7$4; - -function currencyKey(currency) { - return currency.isToken ? currency.address : 'ETHER'; -} -var StyledBalanceText = styled__default["default"](rebass.Text)(templateObject_1$o || (templateObject_1$o = __makeTemplateObject(["\n white-space: nowrap;\n overflow: hidden;\n max-width: 5rem;\n text-overflow: ellipsis;\n"], ["\n white-space: nowrap;\n overflow: hidden;\n max-width: 5rem;\n text-overflow: ellipsis;\n"]))); -var Tag = styled__default["default"].div(templateObject_2$e || (templateObject_2$e = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\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 background-color: ", ";\n color: ", ";\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"])), function (_a) { - var theme = _a.theme; - return theme.bg3; -}, function (_a) { - var theme = _a.theme; - return theme.text2; -}); -var FixedContentRow = styled__default["default"].div(templateObject_3$c || (templateObject_3$c = __makeTemplateObject(["\n padding: 4px 20px;\n height: 56px;\n display: grid;\n grid-gap: 16px;\n align-items: center;\n"], ["\n padding: 4px 20px;\n height: 56px;\n display: grid;\n grid-gap: 16px;\n align-items: center;\n"]))); -function Balance(_a) { - var balance = _a.balance; - return jsxRuntime.jsx(StyledBalanceText, __assign({ title: balance.toExact() }, { children: balance.toSignificant(4) }), void 0); -} -var TagContainer = styled__default["default"].div(templateObject_4$8 || (templateObject_4$8 = __makeTemplateObject(["\n display: flex;\n justify-content: flex-end;\n"], ["\n display: flex;\n justify-content: flex-end;\n"]))); -var TokenListLogoWrapper = styled__default["default"].img(templateObject_5$8 || (templateObject_5$8 = __makeTemplateObject(["\n height: 20px;\n"], ["\n height: 20px;\n"]))); -function TokenTags(_a) { - var currency = _a.currency; - if (!(currency instanceof WrappedTokenInfo)) { - return jsxRuntime.jsx("span", {}, void 0); - } - var tags = currency.tags; - if (!tags || tags.length === 0) - return jsxRuntime.jsx("span", {}, void 0); - var tag = tags[0]; - return (jsxRuntime.jsxs(TagContainer, { children: [jsxRuntime.jsx(MouseoverTooltip, __assign({ text: tag.description }, { children: jsxRuntime.jsx(Tag, { children: tag.name }, tag.id) }), void 0), tags.length > 1 ? (jsxRuntime.jsx(MouseoverTooltip, __assign({ text: tags - .slice(1) - .map(function (_a) { - var name = _a.name, description = _a.description; - return name + ": " + description; - }) - .join('; \n') }, { children: jsxRuntime.jsx(Tag, { children: "..." }, void 0) }), void 0)) : null] }, void 0)); -} -function CurrencyRow(_a) { - var currency = _a.currency, onSelect = _a.onSelect, isSelected = _a.isSelected, otherSelected = _a.otherSelected, style = _a.style, showCurrencyAmount = _a.showCurrencyAmount; - var account = useActiveWeb3React().account; - var key = currencyKey(currency); - var selectedTokenList = useCombinedActiveList(); - var isOnSelectedList = isTokenOnList(selectedTokenList, currency.isToken ? currency : undefined); - var customAdded = useIsUserAddedToken(currency); - var balance = useCurrencyBalance(account !== null && account !== void 0 ? account : undefined, currency); - // only show add or remove buttons if not on selected list - return (jsxRuntime.jsxs(MenuItem, __assign({ style: style, className: "token-item-" + key, onClick: function () { return (isSelected ? null : onSelect()); }, disabled: isSelected, selected: otherSelected }, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: currency, size: '24px' }, void 0), jsxRuntime.jsxs(Column, { children: [jsxRuntime.jsx(rebass.Text, __assign({ title: currency.name, fontWeight: 500 }, { children: currency.symbol }), void 0), jsxRuntime.jsx(ThemedText.DarkGray, __assign({ ml: "0px", fontSize: '12px', fontWeight: 300 }, { children: !currency.isNative && !isOnSelectedList && customAdded ? (jsxRuntime.jsxs(macro.Trans, { children: [currency.name, " \u2022 Added by user"] }, void 0)) : (currency.name) }), void 0)] }, void 0), jsxRuntime.jsx(TokenTags, { currency: currency }, void 0), showCurrencyAmount && (jsxRuntime.jsx(RowFixed, __assign({ style: { justifySelf: 'flex-end' } }, { children: balance ? jsxRuntime.jsx(Balance, { balance: balance }, void 0) : account ? jsxRuntime.jsx(Loader, {}, void 0) : null }), void 0))] }), void 0)); -} -var BREAK_LINE = 'BREAK'; -function isBreakLine(x) { - return x === BREAK_LINE; -} -function BreakLineComponent(_a) { - var style = _a.style; - var theme = useTheme(); - return (jsxRuntime.jsx(FixedContentRow, __assign({ style: style }, { children: jsxRuntime.jsx(LightGreyCard, __assign({ padding: "8px 12px", "$borderRadius": "8px" }, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(TokenListLogoWrapper, { src: TokenListLogo }, void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ ml: "6px", fontSize: "12px", color: theme.text1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Expanded results from inactive Token Lists" }, void 0) }), void 0)] }, void 0), jsxRuntime.jsx(QuestionHelper, { text: jsxRuntime.jsx(macro.Trans, { children: "Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists." }, void 0) }, void 0)] }, void 0) }), void 0) }), void 0)); -} -function CurrencyList(_a) { - var height = _a.height, currencies = _a.currencies, otherListTokens = _a.otherListTokens, selectedCurrency = _a.selectedCurrency, onCurrencySelect = _a.onCurrencySelect, otherCurrency = _a.otherCurrency, fixedListRef = _a.fixedListRef, showImportView = _a.showImportView, setImportToken = _a.setImportToken, showCurrencyAmount = _a.showCurrencyAmount; - var itemData = React.useMemo(function () { - if (otherListTokens && (otherListTokens === null || otherListTokens === void 0 ? void 0 : otherListTokens.length) > 0) { - return __spreadArray(__spreadArray(__spreadArray([], __read(currencies), false), [BREAK_LINE], false), __read(otherListTokens), false); - } - return currencies; - }, [currencies, otherListTokens]); - var Row = React.useCallback(function TokenRow(_a) { - var data = _a.data, index = _a.index, style = _a.style; - var row = data[index]; - if (isBreakLine(row)) { - return jsxRuntime.jsx(BreakLineComponent, { style: style }, void 0); - } - var currency = row; - var isSelected = Boolean(currency && selectedCurrency && selectedCurrency.equals(currency)); - var otherSelected = Boolean(currency && otherCurrency && otherCurrency.equals(currency)); - var handleSelect = function () { return currency && onCurrencySelect(currency); }; - var token = currency === null || currency === void 0 ? void 0 : currency.wrapped; - var showImport = index > currencies.length; - if (showImport && token) { - return (jsxRuntime.jsx(ImportRow, { style: style, token: token, showImportView: showImportView, setImportToken: setImportToken, dim: true }, void 0)); - } - else if (currency) { - return (jsxRuntime.jsx(CurrencyRow, { style: style, currency: currency, isSelected: isSelected, onSelect: handleSelect, otherSelected: otherSelected, showCurrencyAmount: showCurrencyAmount }, void 0)); - } - else { - return null; - } - }, [ - currencies.length, - onCurrencySelect, - otherCurrency, - selectedCurrency, - setImportToken, - showImportView, - showCurrencyAmount, - ]); - var itemKey = React.useCallback(function (index, data) { - var currency = data[index]; - if (isBreakLine(currency)) - return BREAK_LINE; - return currencyKey(currency); - }, []); - return (jsxRuntime.jsx(reactWindow.FixedSizeList, __assign({ height: height, ref: fixedListRef, width: "100%", itemData: itemData, itemCount: itemData.length, itemSize: 56, itemKey: itemKey }, { children: Row }), void 0)); -} -var templateObject_1$o, templateObject_2$e, templateObject_3$c, templateObject_4$8, templateObject_5$8; - -var ContentWrapper = styled__default["default"](Column)(templateObject_1$n || (templateObject_1$n = __makeTemplateObject(["\n width: 100%;\n flex: 1 1;\n position: relative;\n"], ["\n width: 100%;\n flex: 1 1;\n position: relative;\n"]))); -var Footer$1 = styled__default["default"].div(templateObject_2$d || (templateObject_2$d = __makeTemplateObject(["\n width: 100%;\n border-radius: 20px;\n padding: 20px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n background-color: ", ";\n border-top: 1px solid ", ";\n"], ["\n width: 100%;\n border-radius: 20px;\n padding: 20px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n background-color: ", ";\n border-top: 1px solid ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var theme = _a.theme; - return theme.bg2; -}); -function CurrencySearch(_a) { - var selectedCurrency = _a.selectedCurrency, onCurrencySelect = _a.onCurrencySelect, otherSelectedCurrency = _a.otherSelectedCurrency, showCommonBases = _a.showCommonBases, showCurrencyAmount = _a.showCurrencyAmount, disableNonToken = _a.disableNonToken, onDismiss = _a.onDismiss, isOpen = _a.isOpen, showManageView = _a.showManageView, showImportView = _a.showImportView, setImportToken = _a.setImportToken; - var chainId = useActiveWeb3React().chainId; - var theme = useTheme(); - // refs for fixed size lists - var fixedList = React.useRef(); - var _b = __read(React.useState(''), 2), searchQuery = _b[0], setSearchQuery = _b[1]; - var debouncedQuery = useDebounce(searchQuery, 200); - var allTokens = useAllTokens(); - // if they input an address, use it - var isAddressSearch = isAddress(debouncedQuery); - var searchToken = useToken(debouncedQuery); - var searchTokenIsAdded = useIsUserAddedToken(searchToken); - React.useEffect(function () { - if (isAddressSearch) { - ReactGA__default["default"].event({ - category: 'Currency Select', - action: 'Search by address', - label: isAddressSearch, - }); - } - }, [isAddressSearch]); - var filteredTokens = React.useMemo(function () { - return Object.values(allTokens).filter(getTokenFilter(debouncedQuery)); - }, [allTokens, debouncedQuery]); - var balances = useAllTokenBalances(); - var sortedTokens = React.useMemo(function () { - return filteredTokens.sort(tokenComparator.bind(null, balances)); - }, [balances, filteredTokens]); - var filteredSortedTokens = useSortTokensByQuery(debouncedQuery, sortedTokens); - var native = useNativeCurrency(); - var filteredSortedTokensWithETH = React.useMemo(function () { - var _a, _b; - if (!native) - return filteredSortedTokens; - var s = debouncedQuery.toLowerCase().trim(); - if (((_b = (_a = native.symbol) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === null || _b === void 0 ? void 0 : _b.indexOf(s)) !== -1) { - return native ? __spreadArray([native], __read(filteredSortedTokens), false) : filteredSortedTokens; - } - return filteredSortedTokens; - }, [debouncedQuery, native, filteredSortedTokens]); - var handleCurrencySelect = React.useCallback(function (currency) { - onCurrencySelect(currency); - onDismiss(); - }, [onDismiss, onCurrencySelect]); - // clear the input on open - React.useEffect(function () { - if (isOpen) - setSearchQuery(''); - }, [isOpen]); - // manage focus on modal show - var inputRef = React.useRef(); - var handleInput = React.useCallback(function (event) { - var _a; - var input = event.target.value; - var checksummedInput = isAddress(input); - setSearchQuery(checksummedInput || input); - (_a = fixedList.current) === null || _a === void 0 ? void 0 : _a.scrollTo(0); - }, []); - var handleEnter = React.useCallback(function (e) { - var _a, _b; - if (e.key === 'Enter') { - var s = debouncedQuery.toLowerCase().trim(); - if (s === ((_a = native === null || native === void 0 ? void 0 : native.symbol) === null || _a === void 0 ? void 0 : _a.toLowerCase())) { - handleCurrencySelect(native); - } - else if (filteredSortedTokensWithETH.length > 0) { - if (((_b = filteredSortedTokensWithETH[0].symbol) === null || _b === void 0 ? void 0 : _b.toLowerCase()) === debouncedQuery.trim().toLowerCase() || - filteredSortedTokensWithETH.length === 1) { - handleCurrencySelect(filteredSortedTokensWithETH[0]); - } - } - } - }, [debouncedQuery, native, filteredSortedTokensWithETH, handleCurrencySelect]); - // menu ui - var _c = __read(useToggle(false), 2), open = _c[0], toggle = _c[1]; - var node = React.useRef(); - useOnClickOutside(node, open ? toggle : undefined); - // if no results on main list, show option to expand into inactive - var filteredInactiveTokens = useSearchInactiveTokenLists(filteredTokens.length === 0 || (debouncedQuery.length > 2 && !isAddressSearch) ? debouncedQuery : undefined); - return (jsxRuntime.jsxs(ContentWrapper, { children: [jsxRuntime.jsxs(PaddedColumn, __assign({ gap: "16px" }, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 16 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Select a token" }, void 0) }), void 0), jsxRuntime.jsx(CloseIcon$2, { onClick: onDismiss }, void 0)] }, void 0), jsxRuntime.jsx(Row$1, { children: jsxRuntime.jsx(SearchInput, { type: "text", id: "token-search-input", placeholder: macro.t(templateObject_3$b || (templateObject_3$b = __makeTemplateObject(["Search name or paste address"], ["Search name or paste address"]))), autoComplete: "off", value: searchQuery, ref: inputRef, onChange: handleInput, onKeyDown: handleEnter }, void 0) }, void 0), showCommonBases && (jsxRuntime.jsx(CommonBases, { chainId: chainId, onSelect: handleCurrencySelect, selectedCurrency: selectedCurrency }, void 0))] }), void 0), jsxRuntime.jsx(Separator, {}, void 0), searchToken && !searchTokenIsAdded ? (jsxRuntime.jsx(Column, __assign({ style: { padding: '20px 0', height: '100%' } }, { children: jsxRuntime.jsx(ImportRow, { token: searchToken, showImportView: showImportView, setImportToken: setImportToken }, void 0) }), void 0)) : (filteredSortedTokens === null || filteredSortedTokens === void 0 ? void 0 : filteredSortedTokens.length) > 0 || (filteredInactiveTokens === null || filteredInactiveTokens === void 0 ? void 0 : filteredInactiveTokens.length) > 0 ? (jsxRuntime.jsx("div", __assign({ style: { flex: '1' } }, { children: jsxRuntime.jsx(AutoSizer__default["default"], __assign({ disableWidth: true }, { children: function (_a) { - var height = _a.height; - return (jsxRuntime.jsx(CurrencyList, { height: height, currencies: disableNonToken ? filteredSortedTokens : filteredSortedTokensWithETH, otherListTokens: filteredInactiveTokens, onCurrencySelect: handleCurrencySelect, otherCurrency: otherSelectedCurrency, selectedCurrency: selectedCurrency, fixedListRef: fixedList, showImportView: showImportView, setImportToken: setImportToken, showCurrencyAmount: showCurrencyAmount }, void 0)); - } }), void 0) }), void 0)) : (jsxRuntime.jsx(Column, __assign({ style: { padding: '20px', height: '100%' } }, { children: jsxRuntime.jsx(ThemedText.Main, __assign({ color: theme.text3, textAlign: "center", mb: "20px" }, { children: jsxRuntime.jsx(macro.Trans, { children: "No results found." }, void 0) }), void 0) }), void 0)), jsxRuntime.jsx(Footer$1, { children: jsxRuntime.jsx(Row$1, __assign({ justify: "center" }, { children: jsxRuntime.jsx(ButtonText, __assign({ onClick: showManageView, color: theme.primary1, className: "list-token-manage-button" }, { children: jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(IconWrapper$4, __assign({ size: "16px", marginRight: "6px", stroke: theme.primaryText1 }, { children: jsxRuntime.jsx(reactFeather.Edit, {}, void 0) }), void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ color: theme.primaryText1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Manage Token Lists" }, void 0) }), void 0)] }, void 0) }), void 0) }), void 0) }, void 0)] }, void 0)); -} -var templateObject_1$n, templateObject_2$d, templateObject_3$b; - -function useFetchListCallback() { - var _this = this; - var _a = useActiveWeb3React(), chainId = _a.chainId, library = _a.library; - var dispatch = useAppDispatch(); - var ensResolver = React.useCallback(function (ensName) { return __awaiter(_this, void 0, void 0, function () { - var networkLibrary, network; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - if (!(!library || chainId !== 1)) return [3 /*break*/, 2]; - networkLibrary = getNetworkLibrary(); - return [4 /*yield*/, networkLibrary.getNetwork()]; - case 1: - network = _a.sent(); - if (networkLibrary && network.chainId === 1) { - return [2 /*return*/, resolveENSContentHash(ensName, networkLibrary)]; - } - throw new Error('Could not construct mainnet ENS resolver'); - case 2: return [2 /*return*/, resolveENSContentHash(ensName, library)]; - } - }); - }); }, [chainId, library]); - // note: prevent dispatch if using for list search or unsupported list - return React.useCallback(function (listUrl, sendDispatch) { - if (sendDispatch === void 0) { sendDispatch = true; } - return __awaiter(_this, void 0, void 0, function () { - var requestId; - return __generator(this, function (_a) { - requestId = toolkit.nanoid(); - sendDispatch && dispatch(fetchTokenList.pending({ requestId: requestId, url: listUrl })); - return [2 /*return*/, fetchTokenList$1(listUrl, ensResolver) - .then(function (tokenList) { - sendDispatch && dispatch(fetchTokenList.fulfilled({ url: listUrl, tokenList: tokenList, requestId: requestId })); - return tokenList; - }) - .catch(function (error) { - console.debug("Failed to get list at url " + listUrl, error); - sendDispatch && dispatch(fetchTokenList.rejected({ url: listUrl, requestId: requestId, errorMessage: error.message })); - throw error; - })]; - }); - }); - }, [dispatch, ensResolver]); -} - -var Wrapper$8 = styled__default["default"].div(templateObject_1$m || (templateObject_1$m = __makeTemplateObject(["\n position: relative;\n width: 100%;\n overflow: auto;\n"], ["\n position: relative;\n width: 100%;\n overflow: auto;\n"]))); -function ImportList(_a) { - var _b; - var listURL = _a.listURL, list = _a.list, setModalView = _a.setModalView, onDismiss = _a.onDismiss; - var theme = useTheme(); - var dispatch = useAppDispatch(); - // user must accept - var _c = __read(React.useState(false), 2), confirmed = _c[0], setConfirmed = _c[1]; - var lists = useAllLists(); - var fetchList = useFetchListCallback(); - // monitor is list is loading - var adding = Boolean((_b = lists[listURL]) === null || _b === void 0 ? void 0 : _b.loadingRequestId); - var _d = __read(React.useState(null), 2), addError = _d[0], setAddError = _d[1]; - var handleAddList = React.useCallback(function () { - if (adding) - return; - setAddError(null); - fetchList(listURL) - .then(function () { - ReactGA__default["default"].event({ - category: 'Lists', - action: 'Add List', - label: listURL, - }); - // turn list on - dispatch(enableList(listURL)); - // go back to lists - setModalView(CurrencyModalView.manage); - }) - .catch(function (error) { - ReactGA__default["default"].event({ - category: 'Lists', - action: 'Add List Failed', - label: listURL, - }); - setAddError(error.message); - dispatch(removeList(listURL)); - }); - }, [adding, dispatch, fetchList, listURL, setModalView]); - return (jsxRuntime.jsxs(Wrapper$8, { children: [jsxRuntime.jsx(PaddedColumn, __assign({ gap: "14px", style: { width: '100%', flex: '1 1' } }, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(reactFeather.ArrowLeft, { style: { cursor: 'pointer' }, onClick: function () { return setModalView(CurrencyModalView.manage); } }, void 0), jsxRuntime.jsx(ThemedText.MediumHeader, { children: jsxRuntime.jsx(macro.Trans, { children: "Import List" }, void 0) }, void 0), jsxRuntime.jsx(CloseIcon$2, { onClick: onDismiss }, void 0)] }, void 0) }), void 0), jsxRuntime.jsx(SectionBreak, {}, void 0), jsxRuntime.jsx(PaddedColumn, __assign({ gap: "md" }, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "md" }, { children: [jsxRuntime.jsx(Card, __assign({ backgroundColor: theme.bg2, padding: "12px 20px" }, { children: jsxRuntime.jsx(RowBetween, { children: jsxRuntime.jsxs(RowFixed, { children: [list.logoURI && jsxRuntime.jsx(ListLogo, { logoURI: list.logoURI, size: "40px" }, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "sm", style: { marginLeft: '20px' } }, { children: [jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 600, mr: "6px" }, { children: list.name }), void 0), jsxRuntime.jsx(TextDot, {}, void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: '16px', ml: "6px" }, { children: jsxRuntime.jsxs(macro.Trans, { children: [list.tokens.length, " tokens"] }, void 0) }), void 0)] }, void 0), jsxRuntime.jsx(ExternalLink, __assign({ href: "https://tokenlists.org/token-list?url=" + listURL }, { children: jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: '12px', color: theme.blue1 }, { children: listURL }), void 0) }), void 0)] }), void 0)] }, void 0) }, void 0) }), void 0), jsxRuntime.jsxs(Card, __assign({ style: { backgroundColor: polished.transparentize(0.8, theme.red1) } }, { children: [jsxRuntime.jsxs(AutoColumn, __assign({ justify: "center", style: { textAlign: 'center', gap: '16px', marginBottom: '12px' } }, { children: [jsxRuntime.jsx(reactFeather.AlertTriangle, { stroke: theme.red1, size: 32 }, void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 500, fontSize: 20, color: theme.red1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Import at your own risk" }, void 0) }), void 0)] }), void 0), jsxRuntime.jsxs(AutoColumn, __assign({ style: { textAlign: 'center', gap: '16px', marginBottom: '12px' } }, { children: [jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 500, color: theme.red1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one." }, void 0) }), void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 600, color: theme.red1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "If you purchase a token from this list, you may not be able to sell it back." }, void 0) }), void 0)] }), void 0), jsxRuntime.jsxs(AutoRow, __assign({ justify: "center", style: { cursor: 'pointer' }, onClick: function () { return setConfirmed(!confirmed); } }, { children: [jsxRuntime.jsx(Checkbox, { name: "confirmed", type: "checkbox", checked: confirmed, onChange: function () { return setConfirmed(!confirmed); } }, void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ ml: "10px", fontSize: "16px", color: theme.red1, fontWeight: 500 }, { children: jsxRuntime.jsx(macro.Trans, { children: "I understand" }, void 0) }), void 0)] }), void 0)] }), void 0), jsxRuntime.jsx(ButtonPrimary, __assign({ disabled: !confirmed, altDisabledStyle: true, "$borderRadius": "20px", padding: "10px 1rem", onClick: handleAddList }, { children: jsxRuntime.jsx(macro.Trans, { children: "Import" }, void 0) }), void 0), addError ? (jsxRuntime.jsx(ThemedText.Error, __assign({ title: addError, style: { textOverflow: 'ellipsis', overflow: 'hidden' }, error: true }, { children: addError }), void 0)) : null] }), void 0) }), void 0)] }, void 0)); -} -var templateObject_1$m; - -var WarningWrapper = styled__default["default"](Card)(templateObject_1$l || (templateObject_1$l = __makeTemplateObject(["\n background-color: ", ";\n width: fit-content;\n"], ["\n background-color: ", ";\n width: fit-content;\n"])), function (_a) { - var theme = _a.theme, highWarning = _a.highWarning; - return highWarning ? polished.transparentize(0.8, theme.red1) : polished.transparentize(0.8, theme.yellow2); -}); -var AddressText = styled__default["default"](ThemedText.Blue)(templateObject_3$a || (templateObject_3$a = __makeTemplateObject(["\n font-size: 12px;\n word-break: break-all;\n\n ", "\n"], ["\n font-size: 12px;\n word-break: break-all;\n\n ", "\n"])), function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToSmall(templateObject_2$c || (templateObject_2$c = __makeTemplateObject(["\n font-size: 10px;\n "], ["\n font-size: 10px;\n "]))); -}); -var TokenImportCard = function (_a) { - var list = _a.list, token = _a.token; - var theme = styled.useTheme(); - var chainId = useActiveWeb3React().chainId; - return (jsxRuntime.jsx(Card, __assign({ backgroundColor: theme.bg2, padding: "2rem" }, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "10px", justify: "center" }, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: token, size: '32px' }, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "4px", justify: "center" }, { children: [jsxRuntime.jsx(ThemedText.Body, __assign({ ml: "8px", mr: "8px", fontWeight: 500, fontSize: 20 }, { children: token.symbol }), void 0), jsxRuntime.jsx(ThemedText.DarkGray, __assign({ fontWeight: 400, fontSize: 14 }, { children: token.name }), void 0)] }), void 0), chainId && (jsxRuntime.jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, token.address, ExplorerDataType.ADDRESS) }, { children: jsxRuntime.jsx(AddressText, __assign({ fontSize: 12 }, { children: token.address }), void 0) }), void 0)), list !== undefined ? (jsxRuntime.jsxs(RowFixed, { children: [list.logoURI && jsxRuntime.jsx(ListLogo, { logoURI: list.logoURI, size: "16px" }, void 0), jsxRuntime.jsx(ThemedText.Small, __assign({ ml: "6px", fontSize: 14, color: theme.text3 }, { children: jsxRuntime.jsxs(macro.Trans, { children: ["via ", list.name, " token list"] }, void 0) }), void 0)] }, void 0)) : (jsxRuntime.jsx(WarningWrapper, __assign({ "$borderRadius": "4px", padding: "4px", highWarning: true }, { children: jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(reactFeather.AlertCircle, { stroke: theme.red1, size: "10px" }, void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ color: theme.red1, ml: "4px", fontSize: "10px", fontWeight: 500 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Unknown Source" }, void 0) }), void 0)] }, void 0) }), void 0))] }), void 0) }), void 0)); -}; -var templateObject_1$l, templateObject_2$c, templateObject_3$a; - -var Wrapper$7 = styled__default["default"].div(templateObject_1$k || (templateObject_1$k = __makeTemplateObject(["\n align-items: center;\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n height: 100%;\n width: 100%;\n"], ["\n align-items: center;\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n height: 100%;\n width: 100%;\n"]))); -var Button = styled__default["default"](ButtonPrimary)(templateObject_2$b || (templateObject_2$b = __makeTemplateObject(["\n margin-top: 1em;\n padding: 10px 1em;\n"], ["\n margin-top: 1em;\n padding: 10px 1em;\n"]))); -var Content = styled__default["default"].div(templateObject_3$9 || (templateObject_3$9 = __makeTemplateObject(["\n padding: 1em;\n"], ["\n padding: 1em;\n"]))); -var Copy = styled__default["default"](ThemedText.Body)(templateObject_4$7 || (templateObject_4$7 = __makeTemplateObject(["\n text-align: center;\n margin: 0 2em 1em !important;\n font-weight: 400;\n font-size: 16px;\n"], ["\n text-align: center;\n margin: 0 2em 1em !important;\n font-weight: 400;\n font-size: 16px;\n"]))); -var Header = styled__default["default"].div(templateObject_5$7 || (templateObject_5$7 = __makeTemplateObject(["\n align-items: center;\n display: flex;\n gap: 14px;\n justify-content: space-between;\n padding: 20px;\n width: 100%;\n"], ["\n align-items: center;\n display: flex;\n gap: 14px;\n justify-content: space-between;\n padding: 20px;\n width: 100%;\n"]))); -var Icon = styled__default["default"](reactFeather.AlertCircle)(templateObject_6$4 || (templateObject_6$4 = __makeTemplateObject(["\n stroke: ", ";\n width: 48px;\n height: 48px;\n"], ["\n stroke: ", ";\n width: 48px;\n height: 48px;\n"])), function (_a) { - var theme = _a.theme; - return theme.text2; -}); -var BlockedToken = function (_a) { - var onBack = _a.onBack, onDismiss = _a.onDismiss, blockedTokens = _a.blockedTokens; - return (jsxRuntime.jsxs(Wrapper$7, { children: [jsxRuntime.jsxs(Header, { children: [onBack ? jsxRuntime.jsx(reactFeather.ArrowLeft, { style: { cursor: 'pointer' }, onClick: onBack }, void 0) : jsxRuntime.jsx("div", {}, void 0), jsxRuntime.jsx(ThemedText.MediumHeader, { children: jsxRuntime.jsx(macro.Trans, { children: "Token not supported" }, void 0) }, void 0), onDismiss ? jsxRuntime.jsx(CloseIcon$2, { onClick: onDismiss }, void 0) : jsxRuntime.jsx("div", {}, void 0)] }, void 0), jsxRuntime.jsx(Icon, {}, void 0), jsxRuntime.jsxs(Content, { children: [jsxRuntime.jsx(Copy, { children: jsxRuntime.jsx(macro.Trans, { children: "This token is not supported in the Uniswap Labs app" }, void 0) }, void 0), jsxRuntime.jsx(TokenImportCard, { token: blockedTokens[0] }, void 0), jsxRuntime.jsx(Button, __assign({ disabled: true }, { children: jsxRuntime.jsx(macro.Trans, { children: "Import" }, void 0) }), void 0)] }, void 0)] }, void 0)); -}; -var templateObject_1$k, templateObject_2$b, templateObject_3$9, templateObject_4$7, templateObject_5$7, templateObject_6$4; - -var Wrapper$6 = styled__default["default"].div(templateObject_1$j || (templateObject_1$j = __makeTemplateObject(["\n position: relative;\n width: 100%;\n overflow: auto;\n"], ["\n position: relative;\n width: 100%;\n overflow: auto;\n"]))); -function ImportToken(props) { - var tokens = props.tokens, list = props.list, onBack = props.onBack, onDismiss = props.onDismiss, handleCurrencySelect = props.handleCurrencySelect; - var theme = useTheme(); - var addToken = useAddUserToken(); - var unsupportedTokens = useUnsupportedTokens(); - var unsupportedSet = new Set(Object.keys(unsupportedTokens)); - var intersection = new Set(tokens.filter(function (token) { return unsupportedSet.has(token.address); })); - if (intersection.size > 0) { - return jsxRuntime.jsx(BlockedToken, { onBack: onBack, onDismiss: onDismiss, blockedTokens: Array.from(intersection) }, void 0); - } - return (jsxRuntime.jsxs(Wrapper$6, { children: [jsxRuntime.jsx(PaddedColumn, __assign({ gap: "14px", style: { width: '100%', flex: '1 1' } }, { children: jsxRuntime.jsxs(RowBetween, { children: [onBack ? jsxRuntime.jsx(reactFeather.ArrowLeft, { style: { cursor: 'pointer' }, onClick: onBack }, void 0) : jsxRuntime.jsx("div", {}, void 0), jsxRuntime.jsx(ThemedText.MediumHeader, { children: jsxRuntime.jsx(macro.Plural, { value: tokens.length, one: "Import token", other: "Import tokens" }, void 0) }, void 0), onDismiss ? jsxRuntime.jsx(CloseIcon$2, { onClick: onDismiss }, void 0) : jsxRuntime.jsx("div", {}, void 0)] }, void 0) }), void 0), jsxRuntime.jsx(SectionBreak, {}, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "md", style: { marginBottom: '32px', padding: '1rem' } }, { children: [jsxRuntime.jsxs(AutoColumn, __assign({ justify: "center", style: { textAlign: 'center', gap: '16px', padding: '1rem' } }, { children: [jsxRuntime.jsx(reactFeather.AlertCircle, { size: 48, stroke: theme.text2, strokeWidth: 1 }, void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 400, fontSize: 16 }, { children: jsxRuntime.jsx(macro.Trans, { children: "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade." }, void 0) }), void 0)] }), void 0), tokens.map(function (token) { return (jsxRuntime.jsx(TokenImportCard, { token: token, list: list }, 'import' + token.address)); }), jsxRuntime.jsx(ButtonPrimary, __assign({ altDisabledStyle: true, "$borderRadius": "20px", padding: "10px 1rem", onClick: function () { - tokens.map(function (token) { return addToken(token); }); - handleCurrencySelect && handleCurrencySelect(tokens[0]); - }, className: ".token-dismiss-button" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Import" }, void 0) }), void 0)] }), void 0)] }, void 0)); -} -var templateObject_1$j; - -function getColorFromUriPath(uri) { - return __awaiter(this, void 0, void 0, function () { - var formattedPath, palette, detectedHex, AAscore; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - formattedPath = uriToHttp(uri)[0]; - return [4 /*yield*/, Vibrant__default["default"].from(formattedPath).getPalette()]; - case 1: - palette = _a.sent(); - if (!(palette === null || palette === void 0 ? void 0 : palette.Vibrant)) { - return [2 /*return*/, null]; - } - detectedHex = palette.Vibrant.hex; - AAscore = wcagContrast.hex(detectedHex, '#FFF'); - while (AAscore < 3) { - detectedHex = polished.shade(0.005, detectedHex); - AAscore = wcagContrast.hex(detectedHex, '#FFF'); - } - return [2 /*return*/, detectedHex]; - } - }); - }); -} -function useListColor(listImageUri) { - var _a = __read(React.useState('#2172E5'), 2), color = _a[0], setColor = _a[1]; - React.useLayoutEffect(function () { - var stale = false; - if (listImageUri) { - getColorFromUriPath(listImageUri).then(function (color) { - if (!stale && color !== null) { - setColor(color); - } - }); - } - return function () { - stale = true; - setColor('#2172E5'); - }; - }, [listImageUri]); - return color; -} - -function listVersionLabel(version) { - return "v" + version.major + "." + version.minor + "." + version.patch; -} - -var Wrapper$5 = styled__default["default"].button(templateObject_1$i || (templateObject_1$i = __makeTemplateObject(["\n border-radius: 20px;\n border: none;\n background: ", ";\n display: flex;\n width: fit-content;\n cursor: pointer;\n outline: none;\n padding: 0.4rem 0.4rem;\n align-items: center;\n"], ["\n border-radius: 20px;\n border: none;\n background: ", ";\n display: flex;\n width: fit-content;\n cursor: pointer;\n outline: none;\n padding: 0.4rem 0.4rem;\n align-items: center;\n"])), function (_a) { - var theme = _a.theme; - return theme.bg1; -}); -var ToggleElement$1 = styled__default["default"].span(templateObject_2$a || (templateObject_2$a = __makeTemplateObject(["\n border-radius: 50%;\n height: 24px;\n width: 24px;\n background-color: ", ";\n :hover {\n opacity: 0.8;\n }\n"], ["\n border-radius: 50%;\n height: 24px;\n width: 24px;\n background-color: ", ";\n :hover {\n opacity: 0.8;\n }\n"])), function (_a) { - var isActive = _a.isActive, bgColor = _a.bgColor, theme = _a.theme; - return (isActive ? bgColor : theme.bg4); -}); -var StatusText = styled__default["default"](ThemedText.Main)(templateObject_3$8 || (templateObject_3$8 = __makeTemplateObject(["\n margin: 0 10px;\n width: 24px;\n color: ", ";\n"], ["\n margin: 0 10px;\n width: 24px;\n color: ", ";\n"])), function (_a) { - var theme = _a.theme, isActive = _a.isActive; - return (isActive ? theme.text1 : theme.text3); -}); -function ListToggle(_a) { - var id = _a.id, isActive = _a.isActive, bgColor = _a.bgColor, toggle = _a.toggle; - return (jsxRuntime.jsxs(Wrapper$5, __assign({ id: id, isActive: isActive, onClick: toggle }, { children: [isActive && (jsxRuntime.jsx(StatusText, __assign({ fontWeight: "600", margin: "0 6px", isActive: true }, { children: jsxRuntime.jsx(macro.Trans, { children: "ON" }, void 0) }), void 0)), jsxRuntime.jsx(ToggleElement$1, { isActive: isActive, bgColor: bgColor }, void 0), !isActive && (jsxRuntime.jsx(StatusText, __assign({ fontWeight: "600", margin: "0 6px", isActive: false }, { children: jsxRuntime.jsx(macro.Trans, { children: "OFF" }, void 0) }), void 0))] }), void 0)); -} -var templateObject_1$i, templateObject_2$a, templateObject_3$8; - -var Wrapper$4 = styled__default["default"](Column)(templateObject_1$h || (templateObject_1$h = __makeTemplateObject(["\n flex: 1;\n overflow-y: hidden;\n"], ["\n flex: 1;\n overflow-y: hidden;\n"]))); -var UnpaddedLinkStyledButton = styled__default["default"](LinkStyledButton)(templateObject_2$9 || (templateObject_2$9 = __makeTemplateObject(["\n padding: 0;\n font-size: 1rem;\n opacity: ", ";\n"], ["\n padding: 0;\n font-size: 1rem;\n opacity: ", ";\n"])), function (_a) { - var disabled = _a.disabled; - return (disabled ? '0.4' : '1'); -}); -var PopoverContainer = styled__default["default"].div(templateObject_3$7 || (templateObject_3$7 = __makeTemplateObject(["\n z-index: 100;\n visibility: ", ";\n opacity: ", ";\n transition: visibility 150ms linear, opacity 150ms linear;\n background: ", ";\n border: 1px solid ", ";\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: ", ";\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 z-index: 100;\n visibility: ", ";\n opacity: ", ";\n transition: visibility 150ms linear, opacity 150ms linear;\n background: ", ";\n border: 1px solid ", ";\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: ", ";\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"])), function (props) { return (props.show ? 'visible' : 'hidden'); }, function (props) { return (props.show ? 1 : 0); }, function (_a) { - var theme = _a.theme; - return theme.bg2; -}, function (_a) { - var theme = _a.theme; - return theme.bg3; -}, function (_a) { - var theme = _a.theme; - return theme.text2; -}); -var StyledMenu$1 = styled__default["default"].div(templateObject_4$6 || (templateObject_4$6 = __makeTemplateObject(["\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n"], ["\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n"]))); -var StyledTitleText = styled__default["default"].div(templateObject_5$6 || (templateObject_5$6 = __makeTemplateObject(["\n font-size: 16px;\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 600;\n color: ", ";\n"], ["\n font-size: 16px;\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 600;\n color: ", ";\n"])), function (_a) { - var theme = _a.theme, active = _a.active; - return (active ? theme.white : theme.text2); -}); -var StyledListUrlText = styled__default["default"](ThemedText.Main)(templateObject_6$3 || (templateObject_6$3 = __makeTemplateObject(["\n font-size: 12px;\n color: ", ";\n"], ["\n font-size: 12px;\n color: ", ";\n"])), function (_a) { - var theme = _a.theme, active = _a.active; - return (active ? theme.white : theme.text2); -}); -var RowWrapper = styled__default["default"](Row$1)(templateObject_7$3 || (templateObject_7$3 = __makeTemplateObject(["\n background-color: ", ";\n opacity: ", ";\n transition: 200ms;\n align-items: center;\n padding: 1rem;\n border-radius: 20px;\n"], ["\n background-color: ", ";\n opacity: ", ";\n transition: 200ms;\n align-items: center;\n padding: 1rem;\n border-radius: 20px;\n"])), function (_a) { - var bgColor = _a.bgColor, active = _a.active, theme = _a.theme; - return (active ? bgColor !== null && bgColor !== void 0 ? bgColor : 'transparent' : theme.bg2); -}, function (_a) { - var hasActiveTokens = _a.hasActiveTokens; - return (hasActiveTokens ? 1 : 0.4); -}); -function listUrlRowHTMLId(listUrl) { - return "list-row-" + listUrl.replace(/\./g, '-'); -} -var ListRow = React.memo(function ListRow(_a) { - var listUrl = _a.listUrl; - var chainId = useActiveWeb3React().chainId; - var listsByUrl = useAppSelector(function (state) { return state.lists.byUrl; }); - var dispatch = useAppDispatch(); - var _b = listsByUrl[listUrl], list = _b.current, pending = _b.pendingUpdate; - var activeTokensOnThisChain = React.useMemo(function () { - if (!list || !chainId) { - return 0; - } - return list.tokens.reduce(function (acc, cur) { return (cur.chainId === chainId ? acc + 1 : acc); }, 0); - }, [chainId, list]); - var theme = useTheme(); - var listColor = useListColor(list === null || list === void 0 ? void 0 : list.logoURI); - var isActive = useIsListActive(listUrl); - var _c = __read(useToggle(false), 2), open = _c[0], toggle = _c[1]; - var node = React.useRef(); - var _d = __read(React.useState(), 2), referenceElement = _d[0], setReferenceElement = _d[1]; - var _e = __read(React.useState(), 2), popperElement = _e[0], setPopperElement = _e[1]; - var _f = reactPopper.usePopper(referenceElement, popperElement, { - placement: 'auto', - strategy: 'fixed', - modifiers: [{ name: 'offset', options: { offset: [8, 8] } }], - }), styles = _f.styles, attributes = _f.attributes; - useOnClickOutside(node, open ? toggle : undefined); - var handleAcceptListUpdate = React.useCallback(function () { - if (!pending) - return; - ReactGA__default["default"].event({ - category: 'Lists', - action: 'Update List from List Select', - label: listUrl, - }); - dispatch(acceptListUpdate(listUrl)); - }, [dispatch, listUrl, pending]); - var handleRemoveList = React.useCallback(function () { - ReactGA__default["default"].event({ - category: 'Lists', - action: 'Start Remove List', - label: listUrl, - }); - if (window.prompt(macro.t(templateObject_8$2 || (templateObject_8$2 = __makeTemplateObject(["Please confirm you would like to remove this list by typing REMOVE"], ["Please confirm you would like to remove this list by typing REMOVE"])))) === "REMOVE") { - ReactGA__default["default"].event({ - category: 'Lists', - action: 'Confirm Remove List', - label: listUrl, - }); - dispatch(removeList(listUrl)); - } - }, [dispatch, listUrl]); - var handleEnableList = React.useCallback(function () { - ReactGA__default["default"].event({ - category: 'Lists', - action: 'Enable List', - label: listUrl, - }); - dispatch(enableList(listUrl)); - }, [dispatch, listUrl]); - var handleDisableList = React.useCallback(function () { - ReactGA__default["default"].event({ - category: 'Lists', - action: 'Disable List', - label: listUrl, - }); - dispatch(disableList(listUrl)); - }, [dispatch, listUrl]); - if (!list) - return null; - return (jsxRuntime.jsxs(RowWrapper, __assign({ active: isActive, hasActiveTokens: activeTokensOnThisChain > 0, bgColor: listColor, id: listUrlRowHTMLId(listUrl) }, { children: [list.logoURI ? (jsxRuntime.jsx(ListLogo, { size: "40px", style: { marginRight: '1rem' }, logoURI: list.logoURI, alt: list.name + " list logo" }, void 0)) : (jsxRuntime.jsx("div", { style: { width: '24px', height: '24px', marginRight: '1rem' } }, void 0)), jsxRuntime.jsxs(Column, __assign({ style: { flex: '1' } }, { children: [jsxRuntime.jsx(Row$1, { children: jsxRuntime.jsx(StyledTitleText, __assign({ active: isActive }, { children: list.name }), void 0) }, void 0), jsxRuntime.jsxs(RowFixed, __assign({ mt: "4px" }, { children: [jsxRuntime.jsx(StyledListUrlText, __assign({ active: isActive, mr: "6px" }, { children: jsxRuntime.jsxs(macro.Trans, { children: [activeTokensOnThisChain, " tokens"] }, void 0) }), void 0), jsxRuntime.jsxs(StyledMenu$1, __assign({ ref: node }, { children: [jsxRuntime.jsx(ButtonEmpty, __assign({ onClick: toggle, ref: setReferenceElement, padding: "0" }, { children: jsxRuntime.jsx(reactFeather.Settings, { stroke: isActive ? theme.bg1 : theme.text1, size: 12 }, void 0) }), void 0), open && (jsxRuntime.jsxs(PopoverContainer, __assign({ show: true, ref: setPopperElement, style: styles.popper }, attributes.popper, { children: [jsxRuntime.jsx("div", { children: list && listVersionLabel(list.version) }, void 0), jsxRuntime.jsx(SeparatorDark, {}, void 0), jsxRuntime.jsx(ExternalLink, __assign({ href: "https://tokenlists.org/token-list?url=" + listUrl }, { children: jsxRuntime.jsx(macro.Trans, { children: "View list" }, void 0) }), void 0), jsxRuntime.jsx(UnpaddedLinkStyledButton, __assign({ onClick: handleRemoveList, disabled: Object.keys(listsByUrl).length === 1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Remove list" }, void 0) }), void 0), pending && (jsxRuntime.jsx(UnpaddedLinkStyledButton, __assign({ onClick: handleAcceptListUpdate }, { children: jsxRuntime.jsx(macro.Trans, { children: "Update list" }, void 0) }), void 0))] }), void 0))] }), void 0)] }), void 0)] }), void 0), jsxRuntime.jsx(ListToggle, { isActive: isActive, bgColor: listColor, toggle: function () { - isActive ? handleDisableList() : handleEnableList(); - } }, void 0)] }), listUrl)); -}); -var ListContainer = styled__default["default"].div(templateObject_9$2 || (templateObject_9$2 = __makeTemplateObject(["\n padding: 1rem;\n height: 100%;\n overflow: auto;\n flex: 1;\n"], ["\n padding: 1rem;\n height: 100%;\n overflow: auto;\n flex: 1;\n"]))); -function ManageLists(_a) { - var setModalView = _a.setModalView, setImportList = _a.setImportList, setListUrl = _a.setListUrl; - var chainId = useActiveWeb3React().chainId; - var theme = useTheme(); - var _b = __read(React.useState(''), 2), listUrlInput = _b[0], setListUrlInput = _b[1]; - var lists = useAllLists(); - var tokenCountByListName = React.useMemo(function () { - return Object.values(lists).reduce(function (acc, _a) { - var _b; - var list = _a.current; - if (!list) { - return acc; - } - return __assign(__assign({}, acc), (_b = {}, _b[list.name] = list.tokens.reduce(function (count, token) { return (token.chainId === chainId ? count + 1 : count); }, 0), _b)); - }, {}); - }, [chainId, lists]); - // sort by active but only if not visible - var activeListUrls = useActiveListUrls(); - var handleInput = React.useCallback(function (e) { - setListUrlInput(e.target.value); - }, []); - var fetchList = useFetchListCallback(); - var validUrl = React.useMemo(function () { - return uriToHttp(listUrlInput).length > 0 || Boolean(parseENSAddress(listUrlInput)); - }, [listUrlInput]); - var sortedLists = React.useMemo(function () { - var listUrls = Object.keys(lists); - return listUrls - .filter(function (listUrl) { - // only show loaded lists, hide unsupported lists - return Boolean(lists[listUrl].current) && !Boolean(UNSUPPORTED_LIST_URLS.includes(listUrl)); - }) - .sort(function (listUrlA, listUrlB) { - var listA = lists[listUrlA].current; - var listB = lists[listUrlB].current; - // first filter on active lists - if ((activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(listUrlA)) && !(activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(listUrlB))) { - return -1; - } - if (!(activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(listUrlA)) && (activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(listUrlB))) { - return 1; - } - if (listA && listB) { - if (tokenCountByListName[listA.name] > tokenCountByListName[listB.name]) { - return -1; - } - if (tokenCountByListName[listA.name] < tokenCountByListName[listB.name]) { - return 1; - } - return listA.name.toLowerCase() < listB.name.toLowerCase() - ? -1 - : listA.name.toLowerCase() === listB.name.toLowerCase() - ? 0 - : 1; - } - if (listA) - return -1; - if (listB) - return 1; - return 0; - }); - }, [lists, activeListUrls, tokenCountByListName]); - // temporary fetched list for import flow - var _c = __read(React.useState(), 2), tempList = _c[0], setTempList = _c[1]; - var _d = __read(React.useState(), 2), addError = _d[0], setAddError = _d[1]; - React.useEffect(function () { - function fetchTempList() { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - fetchList(listUrlInput, false) - .then(function (list) { return setTempList(list); }) - .catch(function () { return setAddError(macro.t(templateObject_10$2 || (templateObject_10$2 = __makeTemplateObject(["Error importing list"], ["Error importing list"])))); }); - return [2 /*return*/]; - }); - }); - } - // if valid url, fetch details for card - if (validUrl) { - fetchTempList(); - } - else { - setTempList(undefined); - listUrlInput !== '' && setAddError(macro.t(templateObject_11$2 || (templateObject_11$2 = __makeTemplateObject(["Enter valid list location"], ["Enter valid list location"])))); - } - // reset error - if (listUrlInput === '') { - setAddError(undefined); - } - }, [fetchList, listUrlInput, validUrl]); - // check if list is already imported - var isImported = Object.keys(lists).includes(listUrlInput); - // set list values and have parent modal switch to import list view - var handleImport = React.useCallback(function () { - if (!tempList) - return; - setImportList(tempList); - setModalView(CurrencyModalView.importList); - setListUrl(listUrlInput); - }, [listUrlInput, setImportList, setListUrl, setModalView, tempList]); - return (jsxRuntime.jsxs(Wrapper$4, { children: [jsxRuntime.jsxs(PaddedColumn, __assign({ gap: "14px" }, { children: [jsxRuntime.jsx(Row$1, { children: jsxRuntime.jsx(SearchInput, { type: "text", id: "list-add-input", placeholder: macro.t(templateObject_12$2 || (templateObject_12$2 = __makeTemplateObject(["https:// or ipfs:// or ENS name"], ["https:// or ipfs:// or ENS name"]))), value: listUrlInput, onChange: handleInput }, void 0) }, void 0), addError ? (jsxRuntime.jsx(ThemedText.Error, __assign({ title: addError, style: { textOverflow: 'ellipsis', overflow: 'hidden' }, error: true }, { children: addError }), void 0)) : null] }), void 0), tempList && (jsxRuntime.jsx(PaddedColumn, __assign({ style: { paddingTop: 0 } }, { children: jsxRuntime.jsx(Card, __assign({ backgroundColor: theme.bg2, padding: "12px 20px" }, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsxs(RowFixed, { children: [tempList.logoURI && jsxRuntime.jsx(ListLogo, { logoURI: tempList.logoURI, size: "40px" }, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "4px", style: { marginLeft: '20px' } }, { children: [jsxRuntime.jsx(ThemedText.Body, __assign({ fontWeight: 600 }, { children: tempList.name }), void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ fontSize: '12px' }, { children: jsxRuntime.jsxs(macro.Trans, { children: [tempList.tokens.length, " tokens"] }, void 0) }), void 0)] }), void 0)] }, void 0), isImported ? (jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(IconWrapper$4, __assign({ stroke: theme.text2, size: "16px", marginRight: '10px' }, { children: jsxRuntime.jsx(reactFeather.CheckCircle, {}, void 0) }), void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ color: theme.text2 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Loaded" }, void 0) }), void 0)] }, void 0)) : (jsxRuntime.jsx(ButtonPrimary, __assign({ style: { fontSize: '14px' }, padding: "6px 8px", width: "fit-content", onClick: handleImport }, { children: jsxRuntime.jsx(macro.Trans, { children: "Import" }, void 0) }), void 0))] }, void 0) }), void 0) }), void 0)), jsxRuntime.jsx(Separator, {}, void 0), jsxRuntime.jsx(ListContainer, { children: jsxRuntime.jsx(AutoColumn, __assign({ gap: "md" }, { children: sortedLists.map(function (listUrl) { return (jsxRuntime.jsx(ListRow, { listUrl: listUrl }, listUrl)); }) }), void 0) }, void 0)] }, void 0)); -} -var templateObject_1$h, templateObject_2$9, templateObject_3$7, templateObject_4$6, templateObject_5$6, templateObject_6$3, templateObject_7$3, templateObject_8$2, templateObject_9$2, templateObject_10$2, templateObject_11$2, templateObject_12$2; - -var Wrapper$3 = styled__default["default"].div(templateObject_1$g || (templateObject_1$g = __makeTemplateObject(["\n width: 100%;\n height: calc(100% - 60px);\n position: relative;\n padding-bottom: 80px;\n"], ["\n width: 100%;\n height: calc(100% - 60px);\n position: relative;\n padding-bottom: 80px;\n"]))); -var Footer = styled__default["default"].div(templateObject_2$8 || (templateObject_2$8 = __makeTemplateObject(["\n position: absolute;\n bottom: 0;\n width: 100%;\n border-radius: 20px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n border-top: 1px solid ", ";\n padding: 20px;\n text-align: center;\n"], ["\n position: absolute;\n bottom: 0;\n width: 100%;\n border-radius: 20px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n border-top: 1px solid ", ";\n padding: 20px;\n text-align: center;\n"])), function (_a) { - var theme = _a.theme; - return theme.bg3; -}); -function ManageTokens(_a) { - var setModalView = _a.setModalView, setImportToken = _a.setImportToken; - var chainId = useActiveWeb3React().chainId; - var _b = __read(React.useState(''), 2), searchQuery = _b[0], setSearchQuery = _b[1]; - var theme = useTheme(); - // manage focus on modal show - var inputRef = React.useRef(); - var handleInput = React.useCallback(function (event) { - var input = event.target.value; - var checksummedInput = isAddress(input); - setSearchQuery(checksummedInput || input); - }, []); - // if they input an address, use it - var isAddressSearch = isAddress(searchQuery); - var searchToken = useToken(searchQuery); - // all tokens for local lisr - var userAddedTokens = useUserAddedTokens(); - var removeToken = useRemoveUserAddedToken(); - var handleRemoveAll = React.useCallback(function () { - if (chainId && userAddedTokens) { - userAddedTokens.map(function (token) { - return removeToken(chainId, token.address); - }); - } - }, [removeToken, userAddedTokens, chainId]); - var tokenList = React.useMemo(function () { - return (chainId && - userAddedTokens.map(function (token) { return (jsxRuntime.jsxs(RowBetween, __assign({ width: "100%" }, { children: [jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: token, size: '20px' }, void 0), jsxRuntime.jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, token.address, ExplorerDataType.ADDRESS) }, { children: jsxRuntime.jsx(ThemedText.Main, __assign({ ml: '10px', fontWeight: 600 }, { children: token.symbol }), void 0) }), void 0)] }, void 0), jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(TrashIcon, { onClick: function () { return removeToken(chainId, token.address); } }, void 0), jsxRuntime.jsx(ExternalLinkIcon, { href: getExplorerLink(chainId, token.address, ExplorerDataType.ADDRESS) }, void 0)] }, void 0)] }), token.address)); })); - }, [userAddedTokens, chainId, removeToken]); - return (jsxRuntime.jsxs(Wrapper$3, { children: [jsxRuntime.jsxs(Column, __assign({ style: { width: '100%', height: '100%', flex: '1 1' } }, { children: [jsxRuntime.jsxs(PaddedColumn, __assign({ gap: "14px" }, { children: [jsxRuntime.jsx(Row$1, { children: jsxRuntime.jsx(SearchInput, { type: "text", id: "token-search-input", placeholder: '0x0000', value: searchQuery, autoComplete: "off", ref: inputRef, onChange: handleInput }, void 0) }, void 0), searchQuery !== '' && !isAddressSearch && (jsxRuntime.jsx(ThemedText.Error, __assign({ error: true }, { children: jsxRuntime.jsx(macro.Trans, { children: "Enter valid token address" }, void 0) }), void 0)), searchToken && (jsxRuntime.jsx(Card, __assign({ backgroundColor: theme.bg2, padding: "10px 0" }, { children: jsxRuntime.jsx(ImportRow, { token: searchToken, showImportView: function () { return setModalView(CurrencyModalView.importToken); }, setImportToken: setImportToken, style: { height: 'fit-content' } }, void 0) }), void 0))] }), void 0), jsxRuntime.jsx(Separator, {}, void 0), jsxRuntime.jsxs(PaddedColumn, __assign({ gap: "lg", style: { overflow: 'auto', marginBottom: '10px' } }, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(ThemedText.Main, __assign({ fontWeight: 600 }, { children: jsxRuntime.jsxs(macro.Trans, { children: [userAddedTokens === null || userAddedTokens === void 0 ? void 0 : userAddedTokens.length, " Custom Tokens"] }, void 0) }), void 0), userAddedTokens.length > 0 && (jsxRuntime.jsx(ButtonText, __assign({ onClick: handleRemoveAll }, { children: jsxRuntime.jsx(ThemedText.Blue, { children: jsxRuntime.jsx(macro.Trans, { children: "Clear all" }, void 0) }, void 0) }), void 0))] }, void 0), tokenList] }), void 0)] }), void 0), jsxRuntime.jsx(Footer, { children: jsxRuntime.jsx(ThemedText.DarkGray, { children: jsxRuntime.jsx(macro.Trans, { children: "Tip: Custom tokens are stored locally in your browser" }, void 0) }, void 0) }, void 0)] }, void 0)); -} -var templateObject_1$g, templateObject_2$8; - -var Wrapper$2 = styled__default["default"].div(templateObject_1$f || (templateObject_1$f = __makeTemplateObject(["\n width: 100%;\n position: relative;\n display: flex;\n flex-flow: column;\n"], ["\n width: 100%;\n position: relative;\n display: flex;\n flex-flow: column;\n"]))); -var ToggleWrapper = styled__default["default"](RowBetween)(templateObject_2$7 || (templateObject_2$7 = __makeTemplateObject(["\n background-color: ", ";\n border-radius: 12px;\n padding: 6px;\n"], ["\n background-color: ", ";\n border-radius: 12px;\n padding: 6px;\n"])), function (_a) { - var theme = _a.theme; - return theme.bg3; -}); -var ToggleOption = styled__default["default"].div(templateObject_3$6 || (templateObject_3$6 = __makeTemplateObject(["\n width: 48%;\n padding: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 12px;\n font-weight: 600;\n background-color: ", ";\n color: ", ";\n user-select: none;\n\n :hover {\n cursor: pointer;\n opacity: 0.7;\n }\n"], ["\n width: 48%;\n padding: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 12px;\n font-weight: 600;\n background-color: ", ";\n color: ", ";\n user-select: none;\n\n :hover {\n cursor: pointer;\n opacity: 0.7;\n }\n"])), function (_a) { - var theme = _a.theme, active = _a.active; - return (active ? theme.bg1 : theme.bg3); -}, function (_a) { - var theme = _a.theme, active = _a.active; - return (active ? theme.text1 : theme.text2); -}); -function Manage(_a) { - var onDismiss = _a.onDismiss, setModalView = _a.setModalView, setImportList = _a.setImportList, setImportToken = _a.setImportToken, setListUrl = _a.setListUrl; - // toggle between tokens and lists - var _b = __read(React.useState(true), 2), showLists = _b[0], setShowLists = _b[1]; - return (jsxRuntime.jsxs(Wrapper$2, { children: [jsxRuntime.jsx(PaddedColumn, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(reactFeather.ArrowLeft, { style: { cursor: 'pointer' }, onClick: function () { return setModalView(CurrencyModalView.search); } }, void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Manage" }, void 0) }), void 0), jsxRuntime.jsx(CloseIcon$2, { onClick: onDismiss }, void 0)] }, void 0) }, void 0), jsxRuntime.jsx(Separator, {}, void 0), jsxRuntime.jsx(PaddedColumn, __assign({ style: { paddingBottom: 0 } }, { children: jsxRuntime.jsxs(ToggleWrapper, { children: [jsxRuntime.jsx(ToggleOption, __assign({ onClick: function () { return setShowLists(!showLists); }, active: showLists }, { children: jsxRuntime.jsx(macro.Trans, { children: "Lists" }, void 0) }), void 0), jsxRuntime.jsx(ToggleOption, __assign({ onClick: function () { return setShowLists(!showLists); }, active: !showLists }, { children: jsxRuntime.jsx(macro.Trans, { children: "Tokens" }, void 0) }), void 0)] }, void 0) }), void 0), showLists ? (jsxRuntime.jsx(ManageLists, { setModalView: setModalView, setImportList: setImportList, setListUrl: setListUrl }, void 0)) : (jsxRuntime.jsx(ManageTokens, { setModalView: setModalView, setImportToken: setImportToken }, void 0))] }, void 0)); -} -var templateObject_1$f, templateObject_2$7, templateObject_3$6; - -var CurrencyModalView; -(function (CurrencyModalView) { - CurrencyModalView[CurrencyModalView["search"] = 0] = "search"; - CurrencyModalView[CurrencyModalView["manage"] = 1] = "manage"; - CurrencyModalView[CurrencyModalView["importToken"] = 2] = "importToken"; - CurrencyModalView[CurrencyModalView["importList"] = 3] = "importList"; -})(CurrencyModalView || (CurrencyModalView = {})); -function CurrencySearchModal(_a) { - var isOpen = _a.isOpen, onDismiss = _a.onDismiss, onCurrencySelect = _a.onCurrencySelect, selectedCurrency = _a.selectedCurrency, otherSelectedCurrency = _a.otherSelectedCurrency, _b = _a.showCommonBases, showCommonBases = _b === void 0 ? false : _b, _c = _a.showCurrencyAmount, showCurrencyAmount = _c === void 0 ? true : _c, _d = _a.disableNonToken, disableNonToken = _d === void 0 ? false : _d; - var _e = __read(React.useState(CurrencyModalView.manage), 2), modalView = _e[0], setModalView = _e[1]; - var lastOpen = useLast(isOpen); - React.useEffect(function () { - if (isOpen && !lastOpen) { - setModalView(CurrencyModalView.search); - } - }, [isOpen, lastOpen]); - var handleCurrencySelect = React.useCallback(function (currency) { - onCurrencySelect(currency); - onDismiss(); - }, [onDismiss, onCurrencySelect]); - // for token import view - var prevView = usePrevious(modalView); - // used for import token flow - var _f = __read(React.useState(), 2), importToken = _f[0], setImportToken = _f[1]; - // used for import list - var _g = __read(React.useState(), 2), importList = _g[0], setImportList = _g[1]; - var _h = __read(React.useState(), 2), listURL = _h[0], setListUrl = _h[1]; - var showImportView = React.useCallback(function () { return setModalView(CurrencyModalView.importToken); }, [setModalView]); - var showManageView = React.useCallback(function () { return setModalView(CurrencyModalView.manage); }, [setModalView]); - var handleBackImport = React.useCallback(function () { return setModalView(prevView && prevView !== CurrencyModalView.importToken ? prevView : CurrencyModalView.search); }, [setModalView, prevView]); - // change min height if not searching - var minHeight = modalView === CurrencyModalView.importToken || modalView === CurrencyModalView.importList ? 40 : 80; - var content = null; - switch (modalView) { - case CurrencyModalView.search: - content = (jsxRuntime.jsx(CurrencySearch, { isOpen: isOpen, onDismiss: onDismiss, onCurrencySelect: handleCurrencySelect, selectedCurrency: selectedCurrency, otherSelectedCurrency: otherSelectedCurrency, showCommonBases: showCommonBases, showCurrencyAmount: showCurrencyAmount, disableNonToken: disableNonToken, showImportView: showImportView, setImportToken: setImportToken, showManageView: showManageView }, void 0)); - break; - case CurrencyModalView.importToken: - if (importToken) { - content = (jsxRuntime.jsx(ImportToken, { tokens: [importToken], onDismiss: onDismiss, list: importToken instanceof WrappedTokenInfo ? importToken.list : undefined, onBack: handleBackImport, handleCurrencySelect: handleCurrencySelect }, void 0)); - } - break; - case CurrencyModalView.importList: - if (importList && listURL) { - content = jsxRuntime.jsx(ImportList, { list: importList, listURL: listURL, onDismiss: onDismiss, setModalView: setModalView }, void 0); - } - break; - case CurrencyModalView.manage: - content = (jsxRuntime.jsx(Manage, { onDismiss: onDismiss, setModalView: setModalView, setImportToken: setImportToken, setImportList: setImportList, setListUrl: setListUrl }, void 0)); - break; - } - return (jsxRuntime.jsx(Modal, __assign({ isOpen: isOpen, onDismiss: onDismiss, maxHeight: 80, minHeight: minHeight }, { children: content }), void 0)); -} - -var TextWrapper = styled__default["default"].span(templateObject_1$e || (templateObject_1$e = __makeTemplateObject(["\n margin-left: ", ";\n color: ", ";\n font-size: ", ";\n\n @media screen and (max-width: 600px) {\n font-size: ", ";\n }\n"], ["\n margin-left: ", ";\n color: ", ";\n font-size: ", ";\n\n @media screen and (max-width: 600px) {\n font-size: ", ";\n }\n"])), function (_a) { - var margin = _a.margin; - return margin && '4px'; -}, function (_a) { - var theme = _a.theme, link = _a.link, textColor = _a.textColor; - return (link ? theme.blue1 : textColor !== null && textColor !== void 0 ? textColor : theme.text1); -}, function (_a) { - var fontSize = _a.fontSize; - return fontSize !== null && fontSize !== void 0 ? fontSize : 'inherit'; -}, function (_a) { - var adjustSize = _a.adjustSize; - return adjustSize && '12px'; -}); -var HoverInlineText = function (_a) { - var text = _a.text, _b = _a.maxCharacters, maxCharacters = _b === void 0 ? 20 : _b, _c = _a.margin, margin = _c === void 0 ? false : _c, _d = _a.adjustSize, adjustSize = _d === void 0 ? false : _d, fontSize = _a.fontSize, textColor = _a.textColor, link = _a.link, rest = __rest(_a, ["text", "maxCharacters", "margin", "adjustSize", "fontSize", "textColor", "link"]); - var _e = __read(React.useState(false), 2), showHover = _e[0], setShowHover = _e[1]; - if (!text) { - return jsxRuntime.jsx("span", {}, void 0); - } - if (text.length > maxCharacters) { - return (jsxRuntime.jsx(Tooltip, __assign({ text: text, show: showHover }, { children: jsxRuntime.jsx(TextWrapper, __assign({ onMouseEnter: function () { return setShowHover(true); }, onMouseLeave: function () { return setShowHover(false); }, margin: margin, adjustSize: adjustSize, textColor: textColor, link: link, fontSize: fontSize }, rest, { children: ' ' + text.slice(0, maxCharacters - 1) + '...' }), void 0) }), void 0)); - } - return (jsxRuntime.jsx(TextWrapper, __assign({ margin: margin, adjustSize: adjustSize, link: link, fontSize: fontSize, textColor: textColor }, rest, { children: text }), void 0)); -}; -var templateObject_1$e; - -function FiatValue(_a) { - var fiatValue = _a.fiatValue, priceImpact = _a.priceImpact; - var theme = useTheme(); - var priceImpactColor = React.useMemo(function () { - if (!priceImpact) - return undefined; - if (priceImpact.lessThan('0')) - return theme.green1; - var severity = warningSeverity(priceImpact); - if (severity < 1) - return theme.text3; - if (severity < 3) - return theme.yellow1; - return theme.red1; - }, [priceImpact, theme.green1, theme.red1, theme.text3, theme.yellow1]); - return (jsxRuntime.jsxs(ThemedText.Body, __assign({ fontSize: 14, color: fiatValue ? theme.text3 : theme.text4 }, { children: [fiatValue ? (jsxRuntime.jsxs(macro.Trans, { children: ["$", jsxRuntime.jsx(HoverInlineText, { text: fiatValue === null || fiatValue === void 0 ? void 0 : fiatValue.toSignificant(6, { groupSeparator: ',' }), textColor: fiatValue ? theme.text3 : theme.text4 }, void 0)] }, void 0)) : (''), priceImpact ? (jsxRuntime.jsxs("span", __assign({ style: { color: priceImpactColor } }, { children: [' ', jsxRuntime.jsxs(MouseoverTooltip, __assign({ text: macro.t(templateObject_1$d || (templateObject_1$d = __makeTemplateObject(["The estimated difference between the USD values of input and output amounts."], ["The estimated difference between the USD values of input and output amounts."]))) }, { children: ["(", jsxRuntime.jsxs(macro.Trans, { children: [priceImpact.multiply(-1).toSignificant(3), "%"] }, void 0), ")"] }), void 0)] }), void 0)) : null] }), void 0)); -} -var templateObject_1$d; - -var InputPanel = styled__default["default"].div(templateObject_1$c || (templateObject_1$c = __makeTemplateObject(["\n ", "\n position: relative;\n border-radius: ", ";\n background-color: ", ";\n z-index: 1;\n width: ", ";\n transition: height 1s ease;\n will-change: height;\n"], ["\n ", "\n position: relative;\n border-radius: ", ";\n background-color: ", ";\n z-index: 1;\n width: ", ";\n transition: height 1s ease;\n will-change: height;\n"])), function (_a) { - var theme = _a.theme; - return theme.flexColumnNoWrap; -}, function (_a) { - var hideInput = _a.hideInput; - return (hideInput ? '16px' : '20px'); -}, function (_a) { - var theme = _a.theme, hideInput = _a.hideInput; - return (hideInput ? 'transparent' : theme.bg2); -}, function (_a) { - var hideInput = _a.hideInput; - return (hideInput ? '100%' : 'initial'); -}); -var FixedContainer = styled__default["default"].div(templateObject_2$6 || (templateObject_2$6 = __makeTemplateObject(["\n width: 100%;\n height: 100%;\n position: absolute;\n border-radius: 20px;\n background-color: ", ";\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 2;\n"], ["\n width: 100%;\n height: 100%;\n position: absolute;\n border-radius: 20px;\n background-color: ", ";\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 2;\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}); -var Container$1 = styled__default["default"].div(templateObject_3$5 || (templateObject_3$5 = __makeTemplateObject(["\n border-radius: ", ";\n border: 1px solid ", ";\n background-color: ", ";\n width: ", ";\n :focus,\n :hover {\n border: 1px solid ", ";\n }\n"], ["\n border-radius: ", ";\n border: 1px solid ", ";\n background-color: ", ";\n width: ", ";\n :focus,\n :hover {\n border: 1px solid ", ";\n }\n"])), function (_a) { - var hideInput = _a.hideInput; - return (hideInput ? '16px' : '20px'); -}, function (_a) { - var theme = _a.theme; - return theme.bg0; -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var hideInput = _a.hideInput; - return (hideInput ? '100%' : 'initial'); -}, function (_a) { - var theme = _a.theme, hideInput = _a.hideInput; - return (hideInput ? ' transparent' : theme.bg3); -}); -var CurrencySelect = styled__default["default"](ButtonGray)(templateObject_4$5 || (templateObject_4$5 = __makeTemplateObject(["\n align-items: center;\n background-color: ", ";\n box-shadow: ", ";\n box-shadow: 0px 6px 10px rgba(0, 0, 0, 0.075);\n color: ", ";\n cursor: pointer;\n border-radius: 16px;\n outline: none;\n user-select: none;\n border: none;\n font-size: 24px;\n font-weight: 500;\n height: ", ";\n width: ", ";\n padding: 0 8px;\n justify-content: space-between;\n margin-left: ", ";\n :focus,\n :hover {\n background-color: ", ";\n }\n visibility: ", ";\n"], ["\n align-items: center;\n background-color: ", ";\n box-shadow: ", ";\n box-shadow: 0px 6px 10px rgba(0, 0, 0, 0.075);\n color: ", ";\n cursor: pointer;\n border-radius: 16px;\n outline: none;\n user-select: none;\n border: none;\n font-size: 24px;\n font-weight: 500;\n height: ", ";\n width: ", ";\n padding: 0 8px;\n justify-content: space-between;\n margin-left: ", ";\n :focus,\n :hover {\n background-color: ", ";\n }\n visibility: ", ";\n"])), function (_a) { - var selected = _a.selected, theme = _a.theme; - return (selected ? theme.bg2 : theme.primary1); -}, function (_a) { - var selected = _a.selected; - return (selected ? 'none' : '0px 6px 10px rgba(0, 0, 0, 0.075)'); -}, function (_a) { - var selected = _a.selected, theme = _a.theme; - return (selected ? theme.text1 : theme.white); -}, function (_a) { - var hideInput = _a.hideInput; - return (hideInput ? '2.8rem' : '2.4rem'); -}, function (_a) { - var hideInput = _a.hideInput; - return (hideInput ? '100%' : 'initial'); -}, function (_a) { - var hideInput = _a.hideInput; - return (hideInput ? '0' : '12px'); -}, function (_a) { - var selected = _a.selected, theme = _a.theme; - return (selected ? theme.bg3 : polished.darken(0.05, theme.primary1)); -}, function (_a) { - var visible = _a.visible; - return (visible ? 'visible' : 'hidden'); -}); -var InputRow = styled__default["default"].div(templateObject_5$5 || (templateObject_5$5 = __makeTemplateObject(["\n ", "\n align-items: center;\n justify-content: space-between;\n padding: ", ";\n"], ["\n ", "\n align-items: center;\n justify-content: space-between;\n padding: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.flexRowNoWrap; -}, function (_a) { - var selected = _a.selected; - return (selected ? ' 1rem 1rem 0.75rem 1rem' : '1rem 1rem 1rem 1rem'); -}); -var LabelRow = styled__default["default"].div(templateObject_6$2 || (templateObject_6$2 = __makeTemplateObject(["\n ", "\n align-items: center;\n color: ", ";\n font-size: 0.75rem;\n line-height: 1rem;\n padding: 0 1rem 1rem;\n span:hover {\n cursor: pointer;\n color: ", ";\n }\n"], ["\n ", "\n align-items: center;\n color: ", ";\n font-size: 0.75rem;\n line-height: 1rem;\n padding: 0 1rem 1rem;\n span:hover {\n cursor: pointer;\n color: ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.flexRowNoWrap; -}, function (_a) { - var theme = _a.theme; - return theme.text1; -}, function (_a) { - var theme = _a.theme; - return polished.darken(0.2, theme.text2); -}); -var FiatRow = styled__default["default"](LabelRow)(templateObject_7$2 || (templateObject_7$2 = __makeTemplateObject(["\n justify-content: flex-end;\n"], ["\n justify-content: flex-end;\n"]))); -var Aligner = styled__default["default"].span(templateObject_8$1 || (templateObject_8$1 = __makeTemplateObject(["\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n"], ["\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n"]))); -var StyledDropDown = styled__default["default"](SvgDropdown)(templateObject_9$1 || (templateObject_9$1 = __makeTemplateObject(["\n margin: 0 0.25rem 0 0.35rem;\n height: 35%;\n\n path {\n stroke: ", ";\n stroke-width: 1.5px;\n }\n"], ["\n margin: 0 0.25rem 0 0.35rem;\n height: 35%;\n\n path {\n stroke: ", ";\n stroke-width: 1.5px;\n }\n"])), function (_a) { - var selected = _a.selected, theme = _a.theme; - return (selected ? theme.text1 : theme.white); -}); -var StyledTokenName = styled__default["default"].span(templateObject_10$1 || (templateObject_10$1 = __makeTemplateObject(["\n ", "\n font-size: ", ";\n"], ["\n ", "\n font-size: ", ";\n"])), function (_a) { - var active = _a.active; - return (active ? ' margin: 0 0.25rem 0 0.25rem;' : ' margin: 0 0.25rem 0 0.25rem;'); -}, function (_a) { - var active = _a.active; - return (active ? '18px' : '18px'); -}); -var StyledBalanceMax = styled__default["default"].button(templateObject_11$1 || (templateObject_11$1 = __makeTemplateObject(["\n background-color: transparent;\n background-color: ", ";\n border: none;\n border-radius: 12px;\n color: ", ";\n cursor: pointer;\n font-size: 11px;\n font-weight: 500;\n margin-left: 0.25rem;\n opacity: ", ";\n padding: 4px 6px;\n pointer-events: ", ";\n\n :hover {\n opacity: ", ";\n }\n\n :focus {\n outline: none;\n }\n"], ["\n background-color: transparent;\n background-color: ", ";\n border: none;\n border-radius: 12px;\n color: ", ";\n cursor: pointer;\n font-size: 11px;\n font-weight: 500;\n margin-left: 0.25rem;\n opacity: ", ";\n padding: 4px 6px;\n pointer-events: ", ";\n\n :hover {\n opacity: ", ";\n }\n\n :focus {\n outline: none;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.primary5; -}, function (_a) { - var theme = _a.theme; - return theme.primary1; -}, function (_a) { - var disabled = _a.disabled; - return (!disabled ? 1 : 0.4); -}, function (_a) { - var disabled = _a.disabled; - return (!disabled ? 'initial' : 'none'); -}, function (_a) { - var disabled = _a.disabled; - return (!disabled ? 0.8 : 0.4); -}); -var StyledNumericalInput = styled__default["default"](Input$1)(templateObject_12$1 || (templateObject_12$1 = __makeTemplateObject(["\n ", ";\n text-align: left;\n"], ["\n ", ";\n text-align: left;\n"])), loadingOpacityMixin); -function CurrencyInputPanel(_a) { - var value = _a.value, onUserInput = _a.onUserInput, onMax = _a.onMax, showMaxButton = _a.showMaxButton, onCurrencySelect = _a.onCurrencySelect, currency = _a.currency, otherCurrency = _a.otherCurrency, id = _a.id, showCommonBases = _a.showCommonBases, showCurrencyAmount = _a.showCurrencyAmount, disableNonToken = _a.disableNonToken, renderBalance = _a.renderBalance, fiatValue = _a.fiatValue, priceImpact = _a.priceImpact, _b = _a.hideBalance, hideBalance = _b === void 0 ? false : _b, _c = _a.pair, pair = _c === void 0 ? null : _c, // used for double token logo - _d = _a.hideInput, // used for double token logo - hideInput = _d === void 0 ? false : _d, _e = _a.locked, locked = _e === void 0 ? false : _e, _f = _a.loading, loading = _f === void 0 ? false : _f, rest = __rest(_a, ["value", "onUserInput", "onMax", "showMaxButton", "onCurrencySelect", "currency", "otherCurrency", "id", "showCommonBases", "showCurrencyAmount", "disableNonToken", "renderBalance", "fiatValue", "priceImpact", "hideBalance", "pair", "hideInput", "locked", "loading"]); - var _g = __read(React.useState(false), 2), modalOpen = _g[0], setModalOpen = _g[1]; - var account = useActiveWeb3React().account; - var selectedCurrencyBalance = useCurrencyBalance(account !== null && account !== void 0 ? account : undefined, currency !== null && currency !== void 0 ? currency : undefined); - var theme = useTheme(); - var handleDismissSearch = React.useCallback(function () { - setModalOpen(false); - }, [setModalOpen]); - return (jsxRuntime.jsxs(InputPanel, __assign({ id: id, hideInput: hideInput }, rest, { children: [locked && (jsxRuntime.jsx(FixedContainer, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "sm", justify: "center" }, { children: [jsxRuntime.jsx(reactFeather.Lock, {}, void 0), jsxRuntime.jsx(ThemedText.Label, __assign({ fontSize: "12px", textAlign: "center", padding: "0 12px" }, { children: jsxRuntime.jsx(macro.Trans, { children: "The market price is outside your specified price range. Single-asset deposit only." }, void 0) }), void 0)] }), void 0) }, void 0)), jsxRuntime.jsxs(Container$1, __assign({ hideInput: hideInput }, { children: [jsxRuntime.jsxs(InputRow, __assign({ style: hideInput ? { padding: '0', borderRadius: '8px' } : {}, selected: !onCurrencySelect }, { children: [!hideInput && (jsxRuntime.jsx(StyledNumericalInput, { className: "token-amount-input", value: value, onUserInput: onUserInput, "$loading": loading }, void 0)), jsxRuntime.jsx(CurrencySelect, __assign({ visible: currency !== undefined, selected: !!currency, hideInput: hideInput, className: "open-currency-select-button", onClick: function () { - if (onCurrencySelect) { - setModalOpen(true); - } - } }, { children: jsxRuntime.jsxs(Aligner, { children: [jsxRuntime.jsxs(RowFixed, { children: [pair ? (jsxRuntime.jsx("span", __assign({ style: { marginRight: '0.5rem' } }, { children: jsxRuntime.jsx(DoubleCurrencyLogo, { currency0: pair.token0, currency1: pair.token1, size: 24, margin: true }, void 0) }), void 0)) : currency ? (jsxRuntime.jsx(CurrencyLogo, { style: { marginRight: '0.5rem' }, currency: currency, size: '24px' }, void 0)) : null, pair ? (jsxRuntime.jsxs(StyledTokenName, __assign({ className: "pair-name-container" }, { children: [pair === null || pair === void 0 ? void 0 : pair.token0.symbol, ":", pair === null || pair === void 0 ? void 0 : pair.token1.symbol] }), void 0)) : (jsxRuntime.jsx(StyledTokenName, __assign({ className: "token-symbol-container", active: Boolean(currency && currency.symbol) }, { children: (currency && currency.symbol && currency.symbol.length > 20 - ? currency.symbol.slice(0, 4) + - '...' + - currency.symbol.slice(currency.symbol.length - 5, currency.symbol.length) - : currency === null || currency === void 0 ? void 0 : currency.symbol) || jsxRuntime.jsx(macro.Trans, { children: "Select a token" }, void 0) }), void 0))] }, void 0), onCurrencySelect && jsxRuntime.jsx(StyledDropDown, { selected: !!currency }, void 0)] }, void 0) }), void 0)] }), void 0), !hideInput && !hideBalance && currency && (jsxRuntime.jsx(FiatRow, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(LoadingOpacityContainer, __assign({ "$loading": loading }, { children: jsxRuntime.jsx(FiatValue, { fiatValue: fiatValue, priceImpact: priceImpact }, void 0) }), void 0), account ? (jsxRuntime.jsxs(RowFixed, __assign({ style: { height: '17px' } }, { children: [jsxRuntime.jsx(ThemedText.Body, __assign({ onClick: onMax, color: theme.text3, fontWeight: 500, fontSize: 14, style: { display: 'inline', cursor: 'pointer' } }, { children: !hideBalance && currency && selectedCurrencyBalance ? (renderBalance ? (renderBalance(selectedCurrencyBalance)) : (jsxRuntime.jsxs(macro.Trans, { children: ["Balance: ", formatCurrencyAmount(selectedCurrencyBalance, 4)] }, void 0))) : null }), void 0), showMaxButton && selectedCurrencyBalance ? (jsxRuntime.jsx(StyledBalanceMax, __assign({ onClick: onMax }, { children: jsxRuntime.jsx(macro.Trans, { children: "MAX" }, void 0) }), void 0)) : null] }), void 0)) : (jsxRuntime.jsx("span", {}, void 0))] }, void 0) }, void 0))] }), void 0), onCurrencySelect && (jsxRuntime.jsx(CurrencySearchModal, { isOpen: modalOpen, onDismiss: handleDismissSearch, onCurrencySelect: onCurrencySelect, selectedCurrency: currency, otherSelectedCurrency: otherCurrency, showCommonBases: showCommonBases, showCurrencyAmount: showCurrencyAmount, disableNonToken: disableNonToken }, void 0))] }), void 0)); -} -var templateObject_1$c, templateObject_2$6, templateObject_3$5, templateObject_4$5, templateObject_5$5, templateObject_6$2, templateObject_7$2, templateObject_8$1, templateObject_9$1, templateObject_10$1, templateObject_11$1, templateObject_12$1; - -/** - * Given the price impact, get user confirmation. - * - * @param priceImpactWithoutFee price impact of the trade without the fee. - */ -function confirmPriceImpactWithoutFee(priceImpactWithoutFee) { - if (!priceImpactWithoutFee.lessThan(PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN)) { - return (window.prompt("This swap has a price impact of at least " + PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN.toFixed(0) + "%. Please type the word \"confirm\" to continue with this swap.") === 'confirm'); - } - else if (!priceImpactWithoutFee.lessThan(ALLOWED_PRICE_IMPACT_HIGH)) { - return window.confirm("This swap has a price impact of at least " + ALLOWED_PRICE_IMPACT_HIGH.toFixed(0) + "%. Please confirm that you would like to continue with this swap."); - } - return true; -} - -/** - * Returns true if the trade requires a confirmation of details before we can submit it - * @param args either a pair of V2 trades or a pair of V3 trades - */ -function tradeMeaningfullyDiffers() { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var _a = __read(args, 2), tradeA = _a[0], tradeB = _a[1]; - return (tradeA.tradeType !== tradeB.tradeType || - !tradeA.inputAmount.currency.equals(tradeB.inputAmount.currency) || - !tradeA.inputAmount.equalTo(tradeB.inputAmount) || - !tradeA.outputAmount.currency.equals(tradeB.outputAmount.currency) || - !tradeA.outputAmount.equalTo(tradeB.outputAmount)); -} - -function useAddTokenToMetamask(currencyToAdd) { - var library = useActiveWeb3React().library; - var token = currencyToAdd === null || currencyToAdd === void 0 ? void 0 : currencyToAdd.wrapped; - var _a = __read(React.useState(), 2), success = _a[0], setSuccess = _a[1]; - var logoURL = useCurrencyLogoURIs(token)[0]; - var addToken = React.useCallback(function () { - if (library && library.provider.isMetaMask && library.provider.request && token) { - library.provider - .request({ - method: 'wallet_watchAsset', - params: { - //@ts-ignore // need this for incorrect ethers provider type - type: 'ERC20', - options: { - address: token.address, - symbol: token.symbol, - decimals: token.decimals, - image: logoURL, - }, - }, - }) - .then(function (success) { - setSuccess(success); - }) - .catch(function () { return setSuccess(false); }); - } - else { - setSuccess(false); - } - }, [library, logoURL, token]); - return { addToken: addToken, success: success }; -} - -var Wrapper$1 = styled__default["default"].div(templateObject_1$b || (templateObject_1$b = __makeTemplateObject(["\n height: 90px;\n width: 90px;\n"], ["\n height: 90px;\n width: 90px;\n"]))); -var dash = styled.keyframes(templateObject_2$5 || (templateObject_2$5 = __makeTemplateObject(["\n 0% {\n stroke-dashoffset: 1000;\n }\n 100% {\n stroke-dashoffset: 0;\n }\n"], ["\n 0% {\n stroke-dashoffset: 1000;\n }\n 100% {\n stroke-dashoffset: 0;\n }\n"]))); -var dashCheck = styled.keyframes(templateObject_3$4 || (templateObject_3$4 = __makeTemplateObject(["\n 0% {\n stroke-dashoffset: -100;\n }\n 100% {\n stroke-dashoffset: 900;\n }\n"], ["\n 0% {\n stroke-dashoffset: -100;\n }\n 100% {\n stroke-dashoffset: 900;\n }\n"]))); -var Circle = styled__default["default"].circle(templateObject_4$4 || (templateObject_4$4 = __makeTemplateObject(["\n stroke-dasharray: 1000;\n stroke-dashoffset: 0;\n -webkit-animation: ", " 0.9s ease-in-out;\n animation: ", " 0.9s ease-in-out;\n"], ["\n stroke-dasharray: 1000;\n stroke-dashoffset: 0;\n -webkit-animation: ", " 0.9s ease-in-out;\n animation: ", " 0.9s ease-in-out;\n"])), dash, dash); -var PolyLine = styled__default["default"].polyline(templateObject_5$4 || (templateObject_5$4 = __makeTemplateObject(["\n stroke-dasharray: 1000;\n stroke-dashoffset: 0;\n stroke-dashoffset: -100;\n -webkit-animation: ", " 0.9s 0.35s ease-in-out forwards;\n animation: ", " 0.9s 0.35s ease-in-out forwards;\n"], ["\n stroke-dasharray: 1000;\n stroke-dashoffset: 0;\n stroke-dashoffset: -100;\n -webkit-animation: ", " 0.9s 0.35s ease-in-out forwards;\n animation: ", " 0.9s 0.35s ease-in-out forwards;\n"])), dashCheck, dashCheck); -function AnimatedConfirmation() { - var theme = useTheme(); - return (jsxRuntime.jsx(Wrapper$1, __assign({ className: "w4rAnimated_checkmark" }, { children: jsxRuntime.jsxs("svg", __assign({ version: "1.1", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 130.2 130.2" }, { children: [jsxRuntime.jsx(Circle, { className: "path circle", fill: "none", stroke: theme.green1, strokeWidth: "6", strokeMiterlimit: "10", cx: "65.1", cy: "65.1", r: "62.1" }, void 0), jsxRuntime.jsx(PolyLine, { className: "path check", fill: "none", stroke: theme.green1, strokeWidth: "6", strokeLinecap: "round", strokeMiterlimit: "10", points: "100.2,40.2 51.5,88.8 29.8,67.5 " }, void 0)] }), void 0) }), void 0)); -} -var templateObject_1$b, templateObject_2$5, templateObject_3$4, templateObject_4$4, templateObject_5$4; - -var Wrapper = styled__default["default"].div(templateObject_1$a || (templateObject_1$a = __makeTemplateObject(["\n width: 100%;\n padding: 1rem;\n"], ["\n width: 100%;\n padding: 1rem;\n"]))); -var Section = styled__default["default"](AutoColumn)(templateObject_2$4 || (templateObject_2$4 = __makeTemplateObject(["\n padding: ", ";\n"], ["\n padding: ", ";\n"])), function (_a) { - var inline = _a.inline; - return (inline ? '0' : '0'); -}); -var BottomSection = styled__default["default"](Section)(templateObject_3$3 || (templateObject_3$3 = __makeTemplateObject(["\n border-bottom-left-radius: 20px;\n border-bottom-right-radius: 20px;\n"], ["\n border-bottom-left-radius: 20px;\n border-bottom-right-radius: 20px;\n"]))); -var ConfirmedIcon = styled__default["default"](ColumnCenter)(templateObject_4$3 || (templateObject_4$3 = __makeTemplateObject(["\n padding: ", ";\n"], ["\n padding: ", ";\n"])), function (_a) { - var inline = _a.inline; - return (inline ? '20px 0' : '32px 0;'); -}); -var StyledLogo = styled__default["default"].img(templateObject_5$3 || (templateObject_5$3 = __makeTemplateObject(["\n height: 16px;\n width: 16px;\n margin-left: 6px;\n"], ["\n height: 16px;\n width: 16px;\n margin-left: 6px;\n"]))); -function ConfirmationPendingContent(_a) { - var onDismiss = _a.onDismiss, pendingText = _a.pendingText, inline = _a.inline; - return (jsxRuntime.jsx(Wrapper, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "md" }, { children: [!inline && (jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx("div", {}, void 0), jsxRuntime.jsx(CloseIcon$2, { onClick: onDismiss }, void 0)] }, void 0)), jsxRuntime.jsx(ConfirmedIcon, __assign({ inline: inline }, { children: jsxRuntime.jsx(CustomLightSpinner, { src: Circle$1, alt: "loader", size: inline ? '40px' : '90px' }, void 0) }), void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "12px", justify: 'center' }, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20, textAlign: "center" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Waiting For Confirmation" }, void 0) }), void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 400, fontSize: 16, textAlign: "center" }, { children: pendingText }), void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 14, color: "#565A69", textAlign: "center", marginBottom: "12px" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Confirm this transaction in your wallet" }, void 0) }), void 0)] }), void 0)] }), void 0) }, void 0)); -} -function TransactionSubmittedContent(_a) { - var _b; - var onDismiss = _a.onDismiss, chainId = _a.chainId, hash = _a.hash, currencyToAdd = _a.currencyToAdd, inline = _a.inline; - var theme = React.useContext(styled.ThemeContext); - var library = useActiveWeb3React().library; - var _c = useAddTokenToMetamask(currencyToAdd), addToken = _c.addToken, success = _c.success; - return (jsxRuntime.jsx(Wrapper, { children: jsxRuntime.jsxs(Section, __assign({ inline: inline }, { children: [!inline && (jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx("div", {}, void 0), jsxRuntime.jsx(CloseIcon$2, { onClick: onDismiss }, void 0)] }, void 0)), jsxRuntime.jsx(ConfirmedIcon, __assign({ inline: inline }, { children: jsxRuntime.jsx(reactFeather.ArrowUpCircle, { strokeWidth: 0.5, size: inline ? '40px' : '90px', color: theme.primary1 }, void 0) }), void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "12px", justify: 'center' }, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20, textAlign: "center" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Transaction Submitted" }, void 0) }), void 0), chainId && hash && (jsxRuntime.jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, hash, ExplorerDataType.TRANSACTION) }, { children: jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 14, color: theme.primary1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "View on Explorer" }, void 0) }), void 0) }), void 0)), currencyToAdd && ((_b = library === null || library === void 0 ? void 0 : library.provider) === null || _b === void 0 ? void 0 : _b.isMetaMask) && (jsxRuntime.jsx(ButtonLight, __assign({ mt: "12px", padding: "6px 12px", width: "fit-content", onClick: addToken }, { children: !success ? (jsxRuntime.jsx(RowFixed, { children: jsxRuntime.jsxs(macro.Trans, { children: ["Add ", currencyToAdd.symbol, " to Metamask ", jsxRuntime.jsx(StyledLogo, { src: MetaMaskLogo }, void 0)] }, void 0) }, void 0)) : (jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsxs(macro.Trans, { children: ["Added ", currencyToAdd.symbol, " "] }, void 0), jsxRuntime.jsx(reactFeather.CheckCircle, { size: '16px', stroke: theme.green1, style: { marginLeft: '6px' } }, void 0)] }, void 0)) }), void 0)), jsxRuntime.jsx(ButtonPrimary, __assign({ onClick: onDismiss, style: { margin: '20px 0 0 0' } }, { children: jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20 }, { children: inline ? jsxRuntime.jsx(macro.Trans, { children: "Return" }, void 0) : jsxRuntime.jsx(macro.Trans, { children: "Close" }, void 0) }), void 0) }), void 0)] }), void 0)] }), void 0) }, void 0)); -} -function ConfirmationModalContent(_a) { - var title = _a.title, bottomContent = _a.bottomContent, onDismiss = _a.onDismiss, topContent = _a.topContent; - return (jsxRuntime.jsxs(Wrapper, { children: [jsxRuntime.jsxs(Section, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 16 }, { children: title }), void 0), jsxRuntime.jsx(CloseIcon$2, { onClick: onDismiss }, void 0)] }, void 0), topContent()] }, void 0), bottomContent && jsxRuntime.jsx(BottomSection, __assign({ gap: "12px" }, { children: bottomContent() }), void 0)] }, void 0)); -} -function TransactionErrorContent(_a) { - var message = _a.message, onDismiss = _a.onDismiss; - var theme = React.useContext(styled.ThemeContext); - return (jsxRuntime.jsxs(Wrapper, { children: [jsxRuntime.jsxs(Section, { children: [jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Error" }, void 0) }), void 0), jsxRuntime.jsx(CloseIcon$2, { onClick: onDismiss }, void 0)] }, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ style: { marginTop: 20, padding: '2rem 0' }, gap: "24px", justify: "center" }, { children: [jsxRuntime.jsx(reactFeather.AlertTriangle, { color: theme.red1, style: { strokeWidth: 1.5 }, size: 64 }, void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 16, color: theme.red1, style: { textAlign: 'center', width: '85%', wordBreak: 'break-word' } }, { children: message }), void 0)] }), void 0)] }, void 0), jsxRuntime.jsx(BottomSection, __assign({ gap: "12px" }, { children: jsxRuntime.jsx(ButtonPrimary, __assign({ onClick: onDismiss }, { children: jsxRuntime.jsx(macro.Trans, { children: "Dismiss" }, void 0) }), void 0) }), void 0)] }, void 0)); -} -function L2Content(_a) { - var _b; - var onDismiss = _a.onDismiss, chainId = _a.chainId, hash = _a.hash, pendingText = _a.pendingText, inline = _a.inline; - var theme = React.useContext(styled.ThemeContext); - var transaction = useTransaction(hash); - var confirmed = useIsTransactionConfirmed(hash); - var transactionSuccess = ((_b = transaction === null || transaction === void 0 ? void 0 : transaction.receipt) === null || _b === void 0 ? void 0 : _b.status) === 1; - // convert unix time difference to seconds - var secondsToConfirm = (transaction === null || transaction === void 0 ? void 0 : transaction.confirmedTime) - ? (transaction.confirmedTime - transaction.addedTime) / 1000 - : undefined; - var info = CHAIN_INFO[chainId]; - return (jsxRuntime.jsx(Wrapper, { children: jsxRuntime.jsxs(Section, __assign({ inline: inline }, { children: [!inline && (jsxRuntime.jsxs(RowBetween, __assign({ mb: "16px" }, { children: [jsxRuntime.jsx(Badge, { children: jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(StyledLogo, { src: info.logoUrl, style: { margin: '0 8px 0 0' } }, void 0), info.label] }, void 0) }, void 0), jsxRuntime.jsx(CloseIcon$2, { onClick: onDismiss }, void 0)] }), void 0)), jsxRuntime.jsx(ConfirmedIcon, __assign({ inline: inline }, { children: confirmed ? (transactionSuccess ? ( - // - jsxRuntime.jsx(AnimatedConfirmation, {}, void 0)) : (jsxRuntime.jsx(reactFeather.AlertCircle, { strokeWidth: 1, size: inline ? '40px' : '90px', color: theme.red1 }, void 0))) : (jsxRuntime.jsx(CustomLightSpinner, { src: Circle$1, alt: "loader", size: inline ? '40px' : '90px' }, void 0)) }), void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "12px", justify: 'center' }, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20, textAlign: "center" }, { children: !hash ? (jsxRuntime.jsx(macro.Trans, { children: "Confirm transaction in wallet" }, void 0)) : !confirmed ? (jsxRuntime.jsx(macro.Trans, { children: "Transaction Submitted" }, void 0)) : transactionSuccess ? (jsxRuntime.jsx(macro.Trans, { children: "Success" }, void 0)) : (jsxRuntime.jsx(macro.Trans, { children: "Error" }, void 0)) }), void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 400, fontSize: 16, textAlign: "center" }, { children: transaction ? jsxRuntime.jsx(TransactionSummary, { info: transaction.info }, void 0) : pendingText }), void 0), chainId && hash ? (jsxRuntime.jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, hash, ExplorerDataType.TRANSACTION) }, { children: jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 14, color: theme.primary1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "View on Explorer" }, void 0) }), void 0) }), void 0)) : (jsxRuntime.jsx("div", { style: { height: '17px' } }, void 0)), jsxRuntime.jsx(rebass.Text, __assign({ color: theme.text3, style: { margin: '20px 0 0 0' }, fontSize: '14px' }, { children: !secondsToConfirm ? (jsxRuntime.jsx("div", { style: { height: '24px' } }, void 0)) : (jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx(macro.Trans, { children: "Transaction completed in " }, void 0), jsxRuntime.jsxs("span", __assign({ style: { fontWeight: 500, marginLeft: '4px', color: theme.text1 } }, { children: [secondsToConfirm, " seconds \uD83C\uDF89"] }), void 0)] }, void 0)) }), void 0), jsxRuntime.jsx(ButtonPrimary, __assign({ onClick: onDismiss, style: { margin: '4px 0 0 0' } }, { children: jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20 }, { children: inline ? jsxRuntime.jsx(macro.Trans, { children: "Return" }, void 0) : jsxRuntime.jsx(macro.Trans, { children: "Close" }, void 0) }), void 0) }), void 0)] }), void 0)] }), void 0) }, void 0)); -} -function TransactionConfirmationModal(_a) { - var isOpen = _a.isOpen, onDismiss = _a.onDismiss, attemptingTxn = _a.attemptingTxn, hash = _a.hash, pendingText = _a.pendingText, content = _a.content, currencyToAdd = _a.currencyToAdd; - var chainId = useActiveWeb3React().chainId; - var isL2 = Boolean(chainId && L2_CHAIN_IDS.includes(chainId)); - if (!chainId) - return null; - // confirmation screen - return (jsxRuntime.jsx(Modal, __assign({ isOpen: isOpen, onDismiss: onDismiss, maxHeight: 90 }, { children: isL2 && (hash || attemptingTxn) ? (jsxRuntime.jsx(L2Content, { chainId: chainId, hash: hash, onDismiss: onDismiss, pendingText: pendingText }, void 0)) : attemptingTxn ? (jsxRuntime.jsx(ConfirmationPendingContent, { onDismiss: onDismiss, pendingText: pendingText }, void 0)) : hash ? (jsxRuntime.jsx(TransactionSubmittedContent, { chainId: chainId, hash: hash, onDismiss: onDismiss, currencyToAdd: currencyToAdd }, void 0)) : (content()) }), void 0)); -} -var templateObject_1$a, templateObject_2$4, templateObject_3$3, templateObject_4$3, templateObject_5$3; - -function SwapModalFooter(_a) { - var onConfirm = _a.onConfirm, swapErrorMessage = _a.swapErrorMessage, disabledConfirm = _a.disabledConfirm; - return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs(AutoRow, { children: [jsxRuntime.jsx(ButtonError, __assign({ onClick: onConfirm, disabled: disabledConfirm, style: { margin: '10px 0 0 0' }, id: "confirm-swap-or-send" }, { children: jsxRuntime.jsx(rebass.Text, __assign({ fontSize: 20, fontWeight: 500 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Confirm Swap" }, void 0) }), void 0) }), void 0), swapErrorMessage ? jsxRuntime.jsx(SwapCallbackError, { error: swapErrorMessage }, void 0) : null] }, void 0) }, void 0)); -} - -function computeFiatValuePriceImpact(fiatValueInput, fiatValueOutput) { - if (!fiatValueOutput || !fiatValueInput) - return undefined; - if (!fiatValueInput.currency.equals(fiatValueOutput.currency)) - return undefined; - if (JSBI__default["default"].equal(fiatValueInput.quotient, JSBI__default["default"].BigInt(0))) - return undefined; - var pct = ONE_HUNDRED_PERCENT.subtract(fiatValueOutput.divide(fiatValueInput)); - return new sdkCore.Percent(pct.numerator, pct.denominator); -} - -var ArrowWrapper = styled__default["default"].div(templateObject_1$9 || (templateObject_1$9 = __makeTemplateObject(["\n padding: 4px;\n border-radius: 12px;\n height: 32px;\n width: 32px;\n position: relative;\n margin-top: -18px;\n margin-bottom: -18px;\n left: calc(50% - 16px);\n display: flex;\n justify-content: center;\n align-items: center;\n background-color: ", ";\n border: 4px solid;\n border-color: ", ";\n z-index: 2;\n"], ["\n padding: 4px;\n border-radius: 12px;\n height: 32px;\n width: 32px;\n position: relative;\n margin-top: -18px;\n margin-bottom: -18px;\n left: calc(50% - 16px);\n display: flex;\n justify-content: center;\n align-items: center;\n background-color: ", ";\n border: 4px solid;\n border-color: ", ";\n z-index: 2;\n"])), function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var theme = _a.theme; - return theme.bg0; -}); -function SwapModalHeader(_a) { - var trade = _a.trade, allowedSlippage = _a.allowedSlippage, recipient = _a.recipient, showAcceptChanges = _a.showAcceptChanges, onAcceptChanges = _a.onAcceptChanges; - var theme = React.useContext(styled.ThemeContext); - var _b = __read(React.useState(false), 2), showInverted = _b[0], setShowInverted = _b[1]; - var fiatValueInput = useUSDCValue(trade.inputAmount); - var fiatValueOutput = useUSDCValue(trade.outputAmount); - return (jsxRuntime.jsxs(AutoColumn, __assign({ gap: '4px', style: { marginTop: '1rem' } }, { children: [jsxRuntime.jsx(LightCard, __assign({ padding: "0.75rem 1rem" }, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: '8px' }, { children: [jsxRuntime.jsxs(RowBetween, __assign({ align: "center" }, { children: [jsxRuntime.jsx(RowFixed, __assign({ gap: '0px' }, { children: jsxRuntime.jsx(TruncatedText, __assign({ fontSize: 24, fontWeight: 500, color: showAcceptChanges && trade.tradeType === sdkCore.TradeType.EXACT_OUTPUT ? theme.primary1 : '' }, { children: trade.inputAmount.toSignificant(6) }), void 0) }), void 0), jsxRuntime.jsxs(RowFixed, __assign({ gap: '0px' }, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: trade.inputAmount.currency, size: '20px', style: { marginRight: '12px' } }, void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontSize: 20, fontWeight: 500 }, { children: trade.inputAmount.currency.symbol }), void 0)] }), void 0)] }), void 0), jsxRuntime.jsx(RowBetween, { children: jsxRuntime.jsx(FiatValue, { fiatValue: fiatValueInput }, void 0) }, void 0)] }), void 0) }), void 0), jsxRuntime.jsx(ArrowWrapper, { children: jsxRuntime.jsx(reactFeather.ArrowDown, { size: "16", color: theme.text2 }, void 0) }, void 0), jsxRuntime.jsx(LightCard, __assign({ padding: "0.75rem 1rem", style: { marginBottom: '0.25rem' } }, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: '8px' }, { children: [jsxRuntime.jsxs(RowBetween, __assign({ align: "flex-end" }, { children: [jsxRuntime.jsx(RowFixed, __assign({ gap: '0px' }, { children: jsxRuntime.jsx(TruncatedText, __assign({ fontSize: 24, fontWeight: 500 }, { children: trade.outputAmount.toSignificant(6) }), void 0) }), void 0), jsxRuntime.jsxs(RowFixed, __assign({ gap: '0px' }, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: trade.outputAmount.currency, size: '20px', style: { marginRight: '12px' } }, void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontSize: 20, fontWeight: 500 }, { children: trade.outputAmount.currency.symbol }), void 0)] }), void 0)] }), void 0), jsxRuntime.jsx(RowBetween, { children: jsxRuntime.jsx(ThemedText.Body, __assign({ fontSize: 14, color: theme.text3 }, { children: jsxRuntime.jsx(FiatValue, { fiatValue: fiatValueOutput, priceImpact: computeFiatValuePriceImpact(fiatValueInput, fiatValueOutput) }, void 0) }), void 0) }, void 0)] }), void 0) }), void 0), jsxRuntime.jsx(RowBetween, __assign({ style: { marginTop: '0.25rem', padding: '0 1rem' } }, { children: jsxRuntime.jsx(TradePrice, { price: trade.executionPrice, showInverted: showInverted, setShowInverted: setShowInverted }, void 0) }), void 0), jsxRuntime.jsx(LightCard, __assign({ style: { padding: '.75rem', marginTop: '0.5rem' } }, { children: jsxRuntime.jsx(AdvancedSwapDetails, { trade: trade, allowedSlippage: allowedSlippage }, void 0) }), void 0), showAcceptChanges ? (jsxRuntime.jsx(SwapShowAcceptChanges, __assign({ justify: "flex-start", gap: '0px' }, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(reactFeather.AlertTriangle, { size: 20, style: { marginRight: '8px', minWidth: 24 } }, void 0), jsxRuntime.jsx(ThemedText.Main, __assign({ color: theme.primary1 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Price Updated" }, void 0) }), void 0)] }, void 0), jsxRuntime.jsx(ButtonPrimary, __assign({ style: { padding: '.5rem', width: 'fit-content', fontSize: '0.825rem', borderRadius: '12px' }, onClick: onAcceptChanges }, { children: jsxRuntime.jsx(macro.Trans, { children: "Accept" }, void 0) }), void 0)] }, void 0) }), void 0)) : null, jsxRuntime.jsx(AutoColumn, __assign({ justify: "flex-start", gap: "sm", style: { padding: '.75rem 1rem' } }, { children: trade.tradeType === sdkCore.TradeType.EXACT_INPUT ? (jsxRuntime.jsx(ThemedText.Italic, __assign({ fontWeight: 400, textAlign: "left", style: { width: '100%' } }, { children: jsxRuntime.jsxs(macro.Trans, { children: ["Output is estimated. You will receive at least", ' ', jsxRuntime.jsxs("b", { children: [trade.minimumAmountOut(allowedSlippage).toSignificant(6), " ", trade.outputAmount.currency.symbol] }, void 0), ' ', "or the transaction will revert."] }, void 0) }), void 0)) : (jsxRuntime.jsx(ThemedText.Italic, __assign({ fontWeight: 400, textAlign: "left", style: { width: '100%' } }, { children: jsxRuntime.jsxs(macro.Trans, { children: ["Input is estimated. You will sell at most", ' ', jsxRuntime.jsxs("b", { children: [trade.maximumAmountIn(allowedSlippage).toSignificant(6), " ", trade.inputAmount.currency.symbol] }, void 0), ' ', "or the transaction will revert."] }, void 0) }), void 0)) }), void 0), recipient !== null ? (jsxRuntime.jsx(AutoColumn, __assign({ justify: "flex-start", gap: "sm", style: { padding: '12px 0 0 0px' } }, { children: jsxRuntime.jsx(ThemedText.Main, { children: jsxRuntime.jsxs(macro.Trans, { children: ["Output will be sent to", ' ', jsxRuntime.jsx("b", __assign({ title: recipient }, { children: isAddress(recipient) ? shortenAddress(recipient) : recipient }), void 0)] }, void 0) }, void 0) }), void 0)) : null] }), void 0)); -} -var templateObject_1$9; - -function ConfirmSwapModal(_a) { - var _b, _c, _d, _e, _f, _g; - var trade = _a.trade, originalTrade = _a.originalTrade, onAcceptChanges = _a.onAcceptChanges, allowedSlippage = _a.allowedSlippage, onConfirm = _a.onConfirm, onDismiss = _a.onDismiss, recipient = _a.recipient, swapErrorMessage = _a.swapErrorMessage, isOpen = _a.isOpen, attemptingTxn = _a.attemptingTxn, txHash = _a.txHash; - var showAcceptChanges = React.useMemo(function () { return Boolean(trade && originalTrade && tradeMeaningfullyDiffers(trade, originalTrade)); }, [originalTrade, trade]); - var modalHeader = React.useCallback(function () { - return trade ? (jsxRuntime.jsx(SwapModalHeader, { trade: trade, allowedSlippage: allowedSlippage, recipient: recipient, showAcceptChanges: showAcceptChanges, onAcceptChanges: onAcceptChanges }, void 0)) : null; - }, [allowedSlippage, onAcceptChanges, recipient, showAcceptChanges, trade]); - var modalBottom = React.useCallback(function () { - return trade ? (jsxRuntime.jsx(SwapModalFooter, { onConfirm: onConfirm, trade: trade, disabledConfirm: showAcceptChanges, swapErrorMessage: swapErrorMessage }, void 0)) : null; - }, [onConfirm, showAcceptChanges, swapErrorMessage, trade]); - // text to show while loading - var pendingText = (jsxRuntime.jsxs(macro.Trans, { children: ["Swapping ", (_b = trade === null || trade === void 0 ? void 0 : trade.inputAmount) === null || _b === void 0 ? void 0 : _b.toSignificant(6), " ", (_d = (_c = trade === null || trade === void 0 ? void 0 : trade.inputAmount) === null || _c === void 0 ? void 0 : _c.currency) === null || _d === void 0 ? void 0 : _d.symbol, " for", ' ', (_e = trade === null || trade === void 0 ? void 0 : trade.outputAmount) === null || _e === void 0 ? void 0 : _e.toSignificant(6), " ", (_g = (_f = trade === null || trade === void 0 ? void 0 : trade.outputAmount) === null || _f === void 0 ? void 0 : _f.currency) === null || _g === void 0 ? void 0 : _g.symbol] }, void 0)); - var confirmationContent = React.useCallback(function () { - return swapErrorMessage ? (jsxRuntime.jsx(TransactionErrorContent, { onDismiss: onDismiss, message: swapErrorMessage }, void 0)) : (jsxRuntime.jsx(ConfirmationModalContent, { title: jsxRuntime.jsx(macro.Trans, { children: "Confirm Swap" }, void 0), onDismiss: onDismiss, topContent: modalHeader, bottomContent: modalBottom }, void 0)); - }, [onDismiss, modalBottom, modalHeader, swapErrorMessage]); - return (jsxRuntime.jsx(TransactionConfirmationModal, { isOpen: isOpen, onDismiss: onDismiss, attemptingTxn: attemptingTxn, hash: txHash, content: confirmationContent, pendingText: pendingText, currencyToAdd: trade === null || trade === void 0 ? void 0 : trade.outputAmount.currency }, void 0)); -} - -var ToggleElement = styled__default["default"].span(templateObject_1$8 || (templateObject_1$8 = __makeTemplateObject(["\n padding: 0.25rem 0.6rem;\n border-radius: 9px;\n background: ", ";\n color: ", ";\n font-size: 14px;\n font-weight: ", ";\n :hover {\n user-select: ", ";\n background: ", ";\n color: ", ";\n }\n"], ["\n padding: 0.25rem 0.6rem;\n border-radius: 9px;\n background: ", ";\n color: ", ";\n font-size: 14px;\n font-weight: ", ";\n :hover {\n user-select: ", ";\n background: ", ";\n color: ", ";\n }\n"])), function (_a) { - var theme = _a.theme, isActive = _a.isActive, isOnSwitch = _a.isOnSwitch; - return (isActive ? (isOnSwitch ? theme.primary1 : theme.bg4) : 'none'); -}, function (_a) { - var theme = _a.theme, isActive = _a.isActive; - return (isActive ? theme.white : theme.text2); -}, function (_a) { - var isOnSwitch = _a.isOnSwitch; - return (isOnSwitch ? '500' : '400'); -}, function (_a) { - var isOnSwitch = _a.isOnSwitch; - return (isOnSwitch ? 'none' : 'initial'); -}, function (_a) { - var theme = _a.theme, isActive = _a.isActive, isOnSwitch = _a.isOnSwitch; - return isActive ? (isOnSwitch ? polished.darken(0.05, theme.primary1) : polished.darken(0.05, theme.bg4)) : 'none'; -}, function (_a) { - var theme = _a.theme, isActive = _a.isActive, isOnSwitch = _a.isOnSwitch; - return (isActive ? (isOnSwitch ? theme.white : theme.white) : theme.text3); -}); -var StyledToggle = styled__default["default"].button(templateObject_2$3 || (templateObject_2$3 = __makeTemplateObject(["\n border-radius: 12px;\n border: none;\n background: ", ";\n display: flex;\n width: fit-content;\n cursor: pointer;\n outline: none;\n padding: 2px;\n"], ["\n border-radius: 12px;\n border: none;\n background: ", ";\n display: flex;\n width: fit-content;\n cursor: pointer;\n outline: none;\n padding: 2px;\n"])), function (_a) { - var theme = _a.theme; - return theme.bg0; -}); -function Toggle(_a) { - var id = _a.id, isActive = _a.isActive, toggle = _a.toggle, _b = _a.checked, checked = _b === void 0 ? jsxRuntime.jsx(macro.Trans, { children: "On" }, void 0) : _b, _c = _a.unchecked, unchecked = _c === void 0 ? jsxRuntime.jsx(macro.Trans, { children: "Off" }, void 0) : _c; - return (jsxRuntime.jsxs(StyledToggle, __assign({ id: id, isActive: isActive, onClick: toggle }, { children: [jsxRuntime.jsx(ToggleElement, __assign({ isActive: isActive, isOnSwitch: true }, { children: checked }), void 0), jsxRuntime.jsx(ToggleElement, __assign({ isActive: !isActive, isOnSwitch: false }, { children: unchecked }), void 0)] }), void 0)); -} -var templateObject_1$8, templateObject_2$3; - -var SlippageError; -(function (SlippageError) { - SlippageError["InvalidInput"] = "InvalidInput"; -})(SlippageError || (SlippageError = {})); -var DeadlineError; -(function (DeadlineError) { - DeadlineError["InvalidInput"] = "InvalidInput"; -})(DeadlineError || (DeadlineError = {})); -var FancyButton = styled__default["default"].button(templateObject_1$7 || (templateObject_1$7 = __makeTemplateObject(["\n color: ", ";\n align-items: center;\n height: 2rem;\n border-radius: 36px;\n font-size: 1rem;\n width: auto;\n min-width: 3.5rem;\n border: 1px solid ", ";\n outline: none;\n background: ", ";\n :hover {\n border: 1px solid ", ";\n }\n :focus {\n border: 1px solid ", ";\n }\n"], ["\n color: ", ";\n align-items: center;\n height: 2rem;\n border-radius: 36px;\n font-size: 1rem;\n width: auto;\n min-width: 3.5rem;\n border: 1px solid ", ";\n outline: none;\n background: ", ";\n :hover {\n border: 1px solid ", ";\n }\n :focus {\n border: 1px solid ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.text1; -}, function (_a) { - var theme = _a.theme; - return theme.bg3; -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var theme = _a.theme; - return theme.bg4; -}, function (_a) { - var theme = _a.theme; - return theme.primary1; -}); -var Option = styled__default["default"](FancyButton)(templateObject_2$2 || (templateObject_2$2 = __makeTemplateObject(["\n margin-right: 8px;\n :hover {\n cursor: pointer;\n }\n background-color: ", ";\n color: ", ";\n"], ["\n margin-right: 8px;\n :hover {\n cursor: pointer;\n }\n background-color: ", ";\n color: ", ";\n"])), function (_a) { - var active = _a.active, theme = _a.theme; - return active && theme.primary1; -}, function (_a) { - var active = _a.active, theme = _a.theme; - return (active ? theme.white : theme.text1); -}); -var Input = styled__default["default"].input(templateObject_3$2 || (templateObject_3$2 = __makeTemplateObject(["\n background: ", ";\n font-size: 16px;\n width: auto;\n outline: none;\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n }\n color: ", ";\n text-align: right;\n"], ["\n background: ", ";\n font-size: 16px;\n width: auto;\n outline: none;\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n }\n color: ", ";\n text-align: right;\n"])), function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var theme = _a.theme, color = _a.color; - return (color === 'red' ? theme.red1 : theme.text1); -}); -var OptionCustom = styled__default["default"](FancyButton)(templateObject_4$2 || (templateObject_4$2 = __makeTemplateObject(["\n height: 2rem;\n position: relative;\n padding: 0 0.75rem;\n flex: 1;\n border: ", ";\n :hover {\n border: ", ";\n }\n\n input {\n width: 100%;\n height: 100%;\n border: 0px;\n border-radius: 2rem;\n }\n"], ["\n height: 2rem;\n position: relative;\n padding: 0 0.75rem;\n flex: 1;\n border: ", ";\n :hover {\n border: ", ";\n }\n\n input {\n width: 100%;\n height: 100%;\n border: 0px;\n border-radius: 2rem;\n }\n"])), function (_a) { - var theme = _a.theme, active = _a.active, warning = _a.warning; - return active ? "1px solid " + (warning ? theme.red1 : theme.primary1) : warning && "1px solid " + theme.red1; -}, function (_a) { - var theme = _a.theme, active = _a.active, warning = _a.warning; - return active && "1px solid " + (warning ? polished.darken(0.1, theme.red1) : polished.darken(0.1, theme.primary1)); -}); -var SlippageEmojiContainer = styled__default["default"].span(templateObject_6$1 || (templateObject_6$1 = __makeTemplateObject(["\n color: #f3841e;\n ", "\n"], ["\n color: #f3841e;\n ", "\n"])), function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToSmall(templateObject_5$2 || (templateObject_5$2 = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); -}); -var THREE_DAYS_IN_SECONDS = ms__default["default"](templateObject_7$1 || (templateObject_7$1 = __makeTemplateObject(["3 days"], ["3 days"]))) / 1000; -function TransactionSettings(_a) { - var placeholderSlippage = _a.placeholderSlippage; - var chainId = useActiveWeb3React().chainId; - var theme = React.useContext(styled.ThemeContext); - var userSlippageTolerance = useUserSlippageTolerance(); - var setUserSlippageTolerance = useSetUserSlippageTolerance(); - var _b = __read(useUserTransactionTTL(), 2), deadline = _b[0], setDeadline = _b[1]; - var _c = __read(React.useState(''), 2), slippageInput = _c[0], setSlippageInput = _c[1]; - var _d = __read(React.useState(false), 2), slippageError = _d[0], setSlippageError = _d[1]; - var _e = __read(React.useState(''), 2), deadlineInput = _e[0], setDeadlineInput = _e[1]; - var _f = __read(React.useState(false), 2), deadlineError = _f[0], setDeadlineError = _f[1]; - function parseSlippageInput(value) { - // populate what the user typed and clear the error - setSlippageInput(value); - setSlippageError(false); - if (value.length === 0) { - setUserSlippageTolerance('auto'); - } - else { - var parsed = Math.floor(Number.parseFloat(value) * 100); - if (!Number.isInteger(parsed) || parsed < 0 || parsed > 5000) { - setUserSlippageTolerance('auto'); - if (value !== '.') { - setSlippageError(SlippageError.InvalidInput); - } - } - else { - setUserSlippageTolerance(new sdkCore.Percent(parsed, 10000)); - } - } - } - var tooLow = userSlippageTolerance !== 'auto' && userSlippageTolerance.lessThan(new sdkCore.Percent(5, 10000)); - var tooHigh = userSlippageTolerance !== 'auto' && userSlippageTolerance.greaterThan(new sdkCore.Percent(1, 100)); - function parseCustomDeadline(value) { - // populate what the user typed and clear the error - setDeadlineInput(value); - setDeadlineError(false); - if (value.length === 0) { - setDeadline(DEFAULT_DEADLINE_FROM_NOW); - } - else { - try { - var parsed = Math.floor(Number.parseFloat(value) * 60); - if (!Number.isInteger(parsed) || parsed < 60 || parsed > THREE_DAYS_IN_SECONDS) { - setDeadlineError(DeadlineError.InvalidInput); - } - else { - setDeadline(parsed); - } - } - catch (error) { - console.error(error); - setDeadlineError(DeadlineError.InvalidInput); - } - } - } - var showCustomDeadlineRow = Boolean(chainId && !L2_CHAIN_IDS.includes(chainId)); - return (jsxRuntime.jsxs(AutoColumn, __assign({ gap: "md" }, { children: [jsxRuntime.jsxs(AutoColumn, __assign({ gap: "sm" }, { children: [jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(ThemedText.Black, __assign({ fontWeight: 400, fontSize: 14, color: theme.text2 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Slippage tolerance" }, void 0) }), void 0), jsxRuntime.jsx(QuestionHelper, { text: jsxRuntime.jsx(macro.Trans, { children: "Your transaction will revert if the price changes unfavorably by more than this percentage." }, void 0) }, void 0)] }, void 0), jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(Option, __assign({ onClick: function () { - parseSlippageInput(''); - }, active: userSlippageTolerance === 'auto' }, { children: jsxRuntime.jsx(macro.Trans, { children: "Auto" }, void 0) }), void 0), jsxRuntime.jsx(OptionCustom, __assign({ active: userSlippageTolerance !== 'auto', warning: !!slippageError, tabIndex: -1 }, { children: jsxRuntime.jsxs(RowBetween, { children: [tooLow || tooHigh ? (jsxRuntime.jsx(SlippageEmojiContainer, { children: jsxRuntime.jsx("span", __assign({ role: "img", "aria-label": "warning" }, { children: "\u26A0\uFE0F" }), void 0) }, void 0)) : null, jsxRuntime.jsx(Input, { placeholder: placeholderSlippage.toFixed(2), value: slippageInput.length > 0 - ? slippageInput - : userSlippageTolerance === 'auto' - ? '' - : userSlippageTolerance.toFixed(2), onChange: function (e) { return parseSlippageInput(e.target.value); }, onBlur: function () { - setSlippageInput(''); - setSlippageError(false); - }, color: slippageError ? 'red' : '' }, void 0), "%"] }, void 0) }), void 0)] }, void 0), slippageError || tooLow || tooHigh ? (jsxRuntime.jsx(RowBetween, __assign({ style: { - fontSize: '14px', - paddingTop: '7px', - color: slippageError ? 'red' : '#F3841E', - } }, { children: slippageError ? (jsxRuntime.jsx(macro.Trans, { children: "Enter a valid slippage percentage" }, void 0)) : tooLow ? (jsxRuntime.jsx(macro.Trans, { children: "Your transaction may fail" }, void 0)) : (jsxRuntime.jsx(macro.Trans, { children: "Your transaction may be frontrun" }, void 0)) }), void 0)) : null] }), void 0), showCustomDeadlineRow && (jsxRuntime.jsxs(AutoColumn, __assign({ gap: "sm" }, { children: [jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(ThemedText.Black, __assign({ fontSize: 14, fontWeight: 400, color: theme.text2 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Transaction deadline" }, void 0) }), void 0), jsxRuntime.jsx(QuestionHelper, { text: jsxRuntime.jsx(macro.Trans, { children: "Your transaction will revert if it is pending for more than this period of time." }, void 0) }, void 0)] }, void 0), jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(OptionCustom, __assign({ style: { width: '80px' }, warning: !!deadlineError, tabIndex: -1 }, { children: jsxRuntime.jsx(Input, { placeholder: (DEFAULT_DEADLINE_FROM_NOW / 60).toString(), value: deadlineInput.length > 0 - ? deadlineInput - : deadline === DEFAULT_DEADLINE_FROM_NOW - ? '' - : (deadline / 60).toString(), onChange: function (e) { return parseCustomDeadline(e.target.value); }, onBlur: function () { - setDeadlineInput(''); - setDeadlineError(false); - }, color: deadlineError ? 'red' : '' }, void 0) }), void 0), jsxRuntime.jsx(ThemedText.Body, __assign({ style: { paddingLeft: '8px' }, fontSize: 14 }, { children: jsxRuntime.jsx(macro.Trans, { children: "minutes" }, void 0) }), void 0)] }, void 0)] }), void 0))] }), void 0)); -} -var templateObject_1$7, templateObject_2$2, templateObject_3$2, templateObject_4$2, templateObject_5$2, templateObject_6$1, templateObject_7$1; - -var StyledMenuIcon = styled__default["default"](reactFeather.Settings)(templateObject_1$6 || (templateObject_1$6 = __makeTemplateObject(["\n height: 20px;\n width: 20px;\n\n > * {\n stroke: ", ";\n }\n\n :hover {\n opacity: 0.7;\n }\n"], ["\n height: 20px;\n width: 20px;\n\n > * {\n stroke: ", ";\n }\n\n :hover {\n opacity: 0.7;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.text1; -}); -var StyledCloseIcon = styled__default["default"](reactFeather.X)(templateObject_2$1 || (templateObject_2$1 = __makeTemplateObject(["\n height: 20px;\n width: 20px;\n :hover {\n cursor: pointer;\n }\n\n > * {\n stroke: ", ";\n }\n"], ["\n height: 20px;\n width: 20px;\n :hover {\n cursor: pointer;\n }\n\n > * {\n stroke: ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.text1; -}); -var StyledMenuButton = styled__default["default"].button(templateObject_3$1 || (templateObject_3$1 = __makeTemplateObject(["\n position: relative;\n width: 100%;\n height: 100%;\n border: none;\n background-color: transparent;\n margin: 0;\n padding: 0;\n border-radius: 0.5rem;\n height: 20px;\n\n :hover,\n :focus {\n cursor: pointer;\n outline: none;\n }\n"], ["\n position: relative;\n width: 100%;\n height: 100%;\n border: none;\n background-color: transparent;\n margin: 0;\n padding: 0;\n border-radius: 0.5rem;\n height: 20px;\n\n :hover,\n :focus {\n cursor: pointer;\n outline: none;\n }\n"]))); -var EmojiWrapper = styled__default["default"].div(templateObject_4$1 || (templateObject_4$1 = __makeTemplateObject(["\n position: absolute;\n bottom: -6px;\n right: 0px;\n font-size: 14px;\n"], ["\n position: absolute;\n bottom: -6px;\n right: 0px;\n font-size: 14px;\n"]))); -var StyledMenu = styled__default["default"].div(templateObject_5$1 || (templateObject_5$1 = __makeTemplateObject(["\n margin-left: 0.5rem;\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n text-align: left;\n"], ["\n margin-left: 0.5rem;\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n text-align: left;\n"]))); -var MenuFlyout = styled__default["default"].span(templateObject_7 || (templateObject_7 = __makeTemplateObject(["\n min-width: 20.125rem;\n background-color: ", ";\n border: 1px solid ", ";\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 border-radius: 12px;\n display: flex;\n flex-direction: column;\n font-size: 1rem;\n position: absolute;\n top: 2rem;\n right: 0rem;\n z-index: 100;\n\n ", ";\n\n user-select: none;\n"], ["\n min-width: 20.125rem;\n background-color: ", ";\n border: 1px solid ", ";\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 border-radius: 12px;\n display: flex;\n flex-direction: column;\n font-size: 1rem;\n position: absolute;\n top: 2rem;\n right: 0rem;\n z-index: 100;\n\n ", ";\n\n user-select: none;\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}, function (_a) { - var theme = _a.theme; - return theme.bg3; -}, function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToMedium(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n min-width: 18.125rem;\n "], ["\n min-width: 18.125rem;\n "]))); -}); -var Break = styled__default["default"].div(templateObject_8 || (templateObject_8 = __makeTemplateObject(["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"], ["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg3; -}); -var ModalContentWrapper = styled__default["default"].div(templateObject_9 || (templateObject_9 = __makeTemplateObject(["\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 2rem 0;\n background-color: ", ";\n border-radius: 20px;\n"], ["\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 2rem 0;\n background-color: ", ";\n border-radius: 20px;\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}); -function SettingsTab(_a) { - var placeholderSlippage = _a.placeholderSlippage; - var chainId = useActiveWeb3React().chainId; - var node = React.useRef(); - var open = useModalOpen(ApplicationModal.SETTINGS); - var toggle = useToggleSettingsMenu(); - var theme = React.useContext(styled.ThemeContext); - var _b = __read(useExpertModeManager(), 2), expertMode = _b[0], toggleExpertMode = _b[1]; - var _c = __read(useClientSideRouter(), 2), clientSideRouter = _c[0], setClientSideRouter = _c[1]; - // show confirmation view before turning on - var _d = __read(React.useState(false), 2), showConfirmation = _d[0], setShowConfirmation = _d[1]; - useOnClickOutside(node, open ? toggle : undefined); - return ( - // https://github.com/DefinitelyTyped/DefinitelyTyped/issues/30451 - jsxRuntime.jsxs(StyledMenu, __assign({ ref: node }, { children: [jsxRuntime.jsx(Modal, __assign({ isOpen: showConfirmation, onDismiss: function () { return setShowConfirmation(false); }, maxHeight: 100 }, { children: jsxRuntime.jsx(ModalContentWrapper, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "lg" }, { children: [jsxRuntime.jsxs(RowBetween, __assign({ style: { padding: '0 2rem' } }, { children: [jsxRuntime.jsx("div", {}, void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Are you sure?" }, void 0) }), void 0), jsxRuntime.jsx(StyledCloseIcon, { onClick: function () { return setShowConfirmation(false); } }, void 0)] }), void 0), jsxRuntime.jsx(Break, {}, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: "lg", style: { padding: '0 2rem' } }, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 500, fontSize: 20 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds." }, void 0) }), void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 600, fontSize: 20 }, { children: jsxRuntime.jsx(macro.Trans, { children: "ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING." }, void 0) }), void 0), jsxRuntime.jsx(ButtonError, __assign({ error: true, padding: '12px', onClick: function () { - var confirmWord = macro.t(templateObject_10 || (templateObject_10 = __makeTemplateObject(["confirm"], ["confirm"]))); - if (window.prompt(macro.t(templateObject_11 || (templateObject_11 = __makeTemplateObject(["Please type the word \"", "\" to enable expert mode."], ["Please type the word \"", "\" to enable expert mode."])), confirmWord)) === confirmWord) { - toggleExpertMode(); - setShowConfirmation(false); - } - } }, { children: jsxRuntime.jsx(rebass.Text, __assign({ fontSize: 20, fontWeight: 500, id: "confirm-expert-mode" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Turn On Expert Mode" }, void 0) }), void 0) }), void 0)] }), void 0)] }), void 0) }, void 0) }), void 0), jsxRuntime.jsxs(StyledMenuButton, __assign({ onClick: toggle, id: "open-settings-dialog-button", "aria-label": macro.t(templateObject_12 || (templateObject_12 = __makeTemplateObject(["Transaction Settings"], ["Transaction Settings"]))) }, { children: [jsxRuntime.jsx(StyledMenuIcon, {}, void 0), expertMode ? (jsxRuntime.jsx(EmojiWrapper, { children: jsxRuntime.jsx("span", __assign({ role: "img", "aria-label": "wizard-icon" }, { children: "\uD83E\uDDD9" }), void 0) }, void 0)) : null] }), void 0), open && (jsxRuntime.jsx(MenuFlyout, { children: jsxRuntime.jsxs(AutoColumn, __assign({ gap: "md", style: { padding: '1rem' } }, { children: [jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 600, fontSize: 14 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Transaction Settings" }, void 0) }), void 0), jsxRuntime.jsx(TransactionSettings, { placeholderSlippage: placeholderSlippage }, void 0), jsxRuntime.jsx(rebass.Text, __assign({ fontWeight: 600, fontSize: 14 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Interface Settings" }, void 0) }), void 0), chainId && AUTO_ROUTER_SUPPORTED_CHAINS.includes(chainId) && (jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(ThemedText.Black, __assign({ fontWeight: 400, fontSize: 14, color: theme.text2 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Auto Router API" }, void 0) }), void 0), jsxRuntime.jsx(QuestionHelper, { text: jsxRuntime.jsx(macro.Trans, { children: "Use the Uniswap Labs API to get faster quotes." }, void 0) }, void 0)] }, void 0), jsxRuntime.jsx(Toggle, { id: "toggle-optimized-router-button", isActive: !clientSideRouter, toggle: function () { - ReactGA__default["default"].event({ - category: 'Routing', - action: clientSideRouter ? 'enable routing API' : 'disable routing API', - }); - setClientSideRouter(!clientSideRouter); - } }, void 0)] }, void 0)), jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsxs(RowFixed, { children: [jsxRuntime.jsx(ThemedText.Black, __assign({ fontWeight: 400, fontSize: 14, color: theme.text2 }, { children: jsxRuntime.jsx(macro.Trans, { children: "Expert Mode" }, void 0) }), void 0), jsxRuntime.jsx(QuestionHelper, { text: jsxRuntime.jsx(macro.Trans, { children: "Allow high price impact trades and skip the confirm screen. Use at your own risk." }, void 0) }, void 0)] }, void 0), jsxRuntime.jsx(Toggle, { id: "toggle-expert-mode-button", isActive: expertMode, toggle: expertMode - ? function () { - toggleExpertMode(); - setShowConfirmation(false); - } - : function () { - toggle(); - setShowConfirmation(true); - } }, void 0)] }, void 0)] }), void 0) }, void 0))] }), void 0)); -} -var templateObject_1$6, templateObject_2$1, templateObject_3$1, templateObject_4$1, templateObject_5$1, templateObject_6, templateObject_7, templateObject_8, templateObject_9, templateObject_10, templateObject_11, templateObject_12; - -var StyledSwapHeader = styled__default["default"].div(templateObject_1$5 || (templateObject_1$5 = __makeTemplateObject(["\n padding: 1rem 1.25rem 0.5rem 1.25rem;\n width: 100%;\n color: ", ";\n"], ["\n padding: 1rem 1.25rem 0.5rem 1.25rem;\n width: 100%;\n color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.text2; -}); -function SwapHeader(_a) { - var allowedSlippage = _a.allowedSlippage; - return (jsxRuntime.jsx(StyledSwapHeader, { children: jsxRuntime.jsxs(RowBetween, { children: [jsxRuntime.jsx(RowFixed, { children: jsxRuntime.jsx(ThemedText.Black, __assign({ fontWeight: 500, fontSize: 16, style: { marginRight: '8px' } }, { children: jsxRuntime.jsx(macro.Trans, { children: "Swap" }, void 0) }), void 0) }, void 0), jsxRuntime.jsx(RowFixed, { children: jsxRuntime.jsx(SettingsTab, { placeholderSlippage: allowedSlippage }, void 0) }, void 0)] }, void 0) }, void 0)); -} -var templateObject_1$5; - -var Container = styled__default["default"](ThemedText.Small)(templateObject_1$4 || (templateObject_1$4 = __makeTemplateObject(["\n opacity: 0.6;\n :hover {\n opacity: 1;\n }\n margin-top: 1rem !important;\n"], ["\n opacity: 0.6;\n :hover {\n opacity: 1;\n }\n margin-top: 1rem !important;\n"]))); -var useTargetLocale = function (activeLocale) { - var browserLocale = React.useMemo(function () { return navigatorLocale(); }, []); - if (browserLocale && (browserLocale !== DEFAULT_LOCALE || activeLocale !== DEFAULT_LOCALE)) { - if (activeLocale === browserLocale) { - return DEFAULT_LOCALE; - } - else { - return browserLocale; - } - } - return null; -}; -function SwitchLocaleLink() { - var activeLocale = useActiveLocale(); - var targetLocale = useTargetLocale(activeLocale); - var _a = useLocationLinkProps(targetLocale), to = _a.to, onClick = _a.onClick; - if (!targetLocale || !to) - return null; - return (jsxRuntime.jsx(Container, { children: jsxRuntime.jsxs(macro.Trans, { children: ["Uniswap available in:", ' ', jsxRuntime.jsx(StyledInternalLink, __assign({ onClick: onClick, to: to }, { children: LOCALE_LABEL[targetLocale] }), void 0)] }, void 0) }, void 0)); -} -var templateObject_1$4; - -function TokenWarningModal(_a) { - var isOpen = _a.isOpen, tokens = _a.tokens, onConfirm = _a.onConfirm, onDismiss = _a.onDismiss; - return (jsxRuntime.jsx(Modal, __assign({ isOpen: isOpen, onDismiss: onDismiss, maxHeight: 100 }, { children: jsxRuntime.jsx(ImportToken, { tokens: tokens, handleCurrencySelect: onConfirm }, void 0) }), void 0)); -} - -function useTokenAllowance(token, owner, spender) { - var contract = useTokenContract(token === null || token === void 0 ? void 0 : token.address, false); - var inputs = React.useMemo(function () { return [owner, spender]; }, [owner, spender]); - var allowance = useSingleCallResult(contract, 'allowance', inputs).result; - return React.useMemo(function () { return (token && allowance ? sdkCore.CurrencyAmount.fromRawAmount(token, allowance.toString()) : undefined); }, [token, allowance]); -} - -var ApprovalState; -(function (ApprovalState) { - ApprovalState["UNKNOWN"] = "UNKNOWN"; - ApprovalState["NOT_APPROVED"] = "NOT_APPROVED"; - ApprovalState["PENDING"] = "PENDING"; - ApprovalState["APPROVED"] = "APPROVED"; -})(ApprovalState || (ApprovalState = {})); -function useApprovalStateForSpender(amountToApprove, spender, useIsPendingApproval) { - var _a; - var account = useActiveWeb3React().account; - var token = ((_a = amountToApprove === null || amountToApprove === void 0 ? void 0 : amountToApprove.currency) === null || _a === void 0 ? void 0 : _a.isToken) ? amountToApprove.currency : undefined; - var currentAllowance = useTokenAllowance(token, account !== null && account !== void 0 ? account : undefined, spender); - var pendingApproval = useIsPendingApproval(token, spender); - return React.useMemo(function () { - if (!amountToApprove || !spender) - return ApprovalState.UNKNOWN; - if (amountToApprove.currency.isNative) - return ApprovalState.APPROVED; - // we might not have enough data to know whether or not we need to approve - if (!currentAllowance) - return ApprovalState.UNKNOWN; - // amountToApprove will be defined if currentAllowance is - return currentAllowance.lessThan(amountToApprove) - ? pendingApproval - ? ApprovalState.PENDING - : ApprovalState.NOT_APPROVED - : ApprovalState.APPROVED; - }, [amountToApprove, currentAllowance, pendingApproval, spender]); -} -function useApproval(amountToApprove, spender, useIsPendingApproval) { - var _this = this; - var _a; - var chainId = useActiveWeb3React().chainId; - var token = ((_a = amountToApprove === null || amountToApprove === void 0 ? void 0 : amountToApprove.currency) === null || _a === void 0 ? void 0 : _a.isToken) ? amountToApprove.currency : undefined; - // check the current approval status - var approvalState = useApprovalStateForSpender(amountToApprove, spender, useIsPendingApproval); - var tokenContract = useTokenContract(token === null || token === void 0 ? void 0 : token.address); - var approve = React.useCallback(function () { return __awaiter(_this, void 0, void 0, function () { - function logFailure(error) { - console.warn(((token === null || token === void 0 ? void 0 : token.symbol) || 'Token') + " approval failed:", error); - return; - } - var useExact, estimatedGas; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - // Bail early if there is an issue. - if (approvalState !== ApprovalState.NOT_APPROVED) { - return [2 /*return*/, logFailure('approve was called unnecessarily')]; - } - else if (!chainId) { - return [2 /*return*/, logFailure('no chainId')]; - } - else if (!token) { - return [2 /*return*/, logFailure('no token')]; - } - else if (!tokenContract) { - return [2 /*return*/, logFailure('tokenContract is null')]; - } - else if (!amountToApprove) { - return [2 /*return*/, logFailure('missing amount to approve')]; - } - else if (!spender) { - return [2 /*return*/, logFailure('no spender')]; - } - useExact = false; - return [4 /*yield*/, tokenContract.estimateGas.approve(spender, constants.MaxUint256).catch(function () { - // general fallback for tokens which restrict approval amounts - useExact = true; - return tokenContract.estimateGas.approve(spender, amountToApprove.quotient.toString()); - })]; - case 1: - estimatedGas = _a.sent(); - return [2 /*return*/, tokenContract - .approve(spender, useExact ? amountToApprove.quotient.toString() : constants.MaxUint256, { - gasLimit: calculateGasMargin(estimatedGas), - }) - .then(function (response) { return ({ - response: response, - tokenAddress: token.address, - spenderAddress: spender, - }); }) - .catch(function (error) { - logFailure(error); - throw error; - })]; - } - }); - }); }, [approvalState, token, tokenContract, amountToApprove, spender, chainId]); - return [approvalState, approve]; -} - -var SwapRouterVersion; -(function (SwapRouterVersion) { - SwapRouterVersion[SwapRouterVersion["V2"] = 0] = "V2"; - SwapRouterVersion[SwapRouterVersion["V3"] = 1] = "V3"; - SwapRouterVersion[SwapRouterVersion["V2V3"] = 2] = "V2V3"; -})(SwapRouterVersion || (SwapRouterVersion = {})); -/** - * Returns the swap router that will result in the least amount of txs (less gas) for a given swap. - * Heuristic: - * - if trade contains a single v2-only trade & V2 SwapRouter is approved: use V2 SwapRouter - * - if trade contains only v3 & V3 SwapRouter is approved: use V3 SwapRouter - * - else: approve and use V2+V3 SwapRouter - */ -function getTxOptimizedSwapRouter(_a) { - var onlyV2Routes = _a.onlyV2Routes, onlyV3Routes = _a.onlyV3Routes, tradeHasSplits = _a.tradeHasSplits, approvalStates = _a.approvalStates; - if ([approvalStates.v2, approvalStates.v3, approvalStates.v2V3].includes(ApprovalState.PENDING)) - return undefined; - if (approvalStates.v2V3 === ApprovalState.APPROVED) - return SwapRouterVersion.V2V3; - if (approvalStates.v2 === ApprovalState.APPROVED && onlyV2Routes && !tradeHasSplits) - return SwapRouterVersion.V2; - if (approvalStates.v3 === ApprovalState.APPROVED && onlyV3Routes) - return SwapRouterVersion.V3; - return SwapRouterVersion.V2V3; -} - -/** Returns approval state for all known swap routers */ -function useSwapApprovalStates(trade, allowedSlippage, useIsPendingApproval) { - var chainId = useActiveWeb3React().chainId; - var amountToApprove = React.useMemo(function () { return (trade && trade.inputAmount.currency.isToken ? trade.maximumAmountIn(allowedSlippage) : undefined); }, [trade, allowedSlippage]); - var v2RouterAddress = chainId ? V2_ROUTER_ADDRESS[chainId] : undefined; - var v3RouterAddress = chainId ? V3_ROUTER_ADDRESS[chainId] : undefined; - var swapRouterAddress = chainId ? SWAP_ROUTER_ADDRESSES[chainId] : undefined; - var v2 = useApprovalStateForSpender(amountToApprove, v2RouterAddress, useIsPendingApproval); - var v3 = useApprovalStateForSpender(amountToApprove, v3RouterAddress, useIsPendingApproval); - var v2V3 = useApprovalStateForSpender(amountToApprove, swapRouterAddress, useIsPendingApproval); - return React.useMemo(function () { return ({ v2: v2, v3: v3, v2V3: v2V3 }); }, [v2, v2V3, v3]); -} -function useSwapRouterAddress(trade) { - var chainId = useActiveWeb3React().chainId; - return React.useMemo(function () { - return chainId - ? trade instanceof v2Sdk.Trade - ? V2_ROUTER_ADDRESS[chainId] - : trade instanceof v3Sdk.Trade - ? V3_ROUTER_ADDRESS[chainId] - : SWAP_ROUTER_ADDRESSES[chainId] - : undefined; - }, [chainId, trade]); -} -// wraps useApproveCallback in the context of a swap -function useSwapApproval(trade, allowedSlippage, useIsPendingApproval) { - var amountToApprove = React.useMemo(function () { return (trade && trade.inputAmount.currency.isToken ? trade.maximumAmountIn(allowedSlippage) : undefined); }, [trade, allowedSlippage]); - var spender = useSwapRouterAddress(trade); - var approval = useApproval(amountToApprove, spender, useIsPendingApproval); - if (trade instanceof v2Sdk.Trade || trade instanceof v3Sdk.Trade) { - var approvalState = approval[0]; - invariant__default["default"](approvalState === ApprovalState.APPROVED, 'Trying to approve legacy router'); - } - return approval; -} -function useSwapApprovalOptimizedTrade(trade, allowedSlippage, useIsPendingApproval) { - var _a; - var onlyV2Routes = trade === null || trade === void 0 ? void 0 : trade.routes.every(function (route) { return route.protocol === routerSdk.Protocol.V2; }); - var onlyV3Routes = trade === null || trade === void 0 ? void 0 : trade.routes.every(function (route) { return route.protocol === routerSdk.Protocol.V3; }); - var tradeHasSplits = ((_a = trade === null || trade === void 0 ? void 0 : trade.routes.length) !== null && _a !== void 0 ? _a : 0) > 1; - var approvalStates = useSwapApprovalStates(trade, allowedSlippage, useIsPendingApproval); - var optimizedSwapRouter = React.useMemo(function () { return getTxOptimizedSwapRouter({ onlyV2Routes: onlyV2Routes, onlyV3Routes: onlyV3Routes, tradeHasSplits: tradeHasSplits, approvalStates: approvalStates }); }, [approvalStates, tradeHasSplits, onlyV2Routes, onlyV3Routes]); - return React.useMemo(function () { - if (!trade) - return undefined; - try { - switch (optimizedSwapRouter) { - case SwapRouterVersion.V2V3: - return trade; - case SwapRouterVersion.V2: - var pairs = trade.swaps[0].route.pools.filter(function (pool) { return pool instanceof v2Sdk.Pair; }); - var v2Route = new v2Sdk.Route(pairs, trade.inputAmount.currency, trade.outputAmount.currency); - return new v2Sdk.Trade(v2Route, trade.inputAmount, trade.tradeType); - case SwapRouterVersion.V3: - return v3Sdk.Trade.createUncheckedTradeWithMultipleRoutes({ - routes: trade.swaps.map(function (_a) { - var route = _a.route, inputAmount = _a.inputAmount, outputAmount = _a.outputAmount; - return ({ - route: new v3Sdk.Route(route.pools.filter(function (p) { return p instanceof v3Sdk.Pool; }), inputAmount.currency, outputAmount.currency), - inputAmount: inputAmount, - outputAmount: outputAmount, - }); - }), - tradeType: trade.tradeType, - }); - default: - return undefined; - } - } - catch (e) { - // TODO(#2989): remove try-catch - console.debug(e); - return undefined; - } - }, [trade, optimizedSwapRouter]); -} - -function useGetAndTrackApproval(getApproval) { - var addTransaction = useTransactionAdder(); - return React.useCallback(function () { - return getApproval().then(function (pending) { - if (pending) { - var response = pending.response, tokenAddress = pending.tokenAddress, spender = pending.spenderAddress; - addTransaction(response, { type: TransactionType.APPROVAL, tokenAddress: tokenAddress, spender: spender }); - } - }); - }, [addTransaction, getApproval]); -} -function useApprovalOptimizedTrade(trade, allowedSlippage) { - return useSwapApprovalOptimizedTrade(trade, allowedSlippage, useHasPendingApproval); -} -function useApproveCallbackFromTrade(trade, allowedSlippage) { - var _a = __read(useSwapApproval(trade, allowedSlippage, useHasPendingApproval), 2), approval = _a[0], getApproval = _a[1]; - return [approval, useGetAndTrackApproval(getApproval)]; -} - -var _a$1, _b, _c, _d, _e; -var PermitType; -(function (PermitType) { - PermitType[PermitType["AMOUNT"] = 1] = "AMOUNT"; - PermitType[PermitType["ALLOWED"] = 2] = "ALLOWED"; -})(PermitType || (PermitType = {})); -// 20 minutes to submit after signing -var PERMIT_VALIDITY_BUFFER = 20 * 60; -// todo: read this information from extensions on token lists or elsewhere (permit registry?) -var PERMITTABLE_TOKENS = { - 1: (_a$1 = {}, - _a$1[USDC.address] = { type: PermitType.AMOUNT, name: 'USD Coin', version: '2' }, - _a$1[DAI.address] = { type: PermitType.ALLOWED, name: 'Dai Stablecoin', version: '1' }, - _a$1[UNI[1].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }, - _a$1), - 4: (_b = { - '0xc7AD46e0b8a400Bb3C915120d284AafbA8fc4735': { type: PermitType.ALLOWED, name: 'Dai Stablecoin', version: '1' } - }, - _b[UNI[4].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }, - _b), - 3: (_c = {}, - _c[UNI[3].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }, - _c['0x07865c6E87B9F70255377e024ace6630C1Eaa37F'] = { type: PermitType.AMOUNT, name: 'USD Coin', version: '2' }, - _c), - 5: (_d = {}, - _d[UNI[5].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }, - _d), - 42: (_e = {}, - _e[UNI[42].address] = { type: PermitType.AMOUNT, name: 'Uniswap' }, - _e), -}; -var UseERC20PermitState; -(function (UseERC20PermitState) { - // returned for any reason, e.g. it is an argent wallet, or the currency does not support it - UseERC20PermitState[UseERC20PermitState["NOT_APPLICABLE"] = 0] = "NOT_APPLICABLE"; - UseERC20PermitState[UseERC20PermitState["LOADING"] = 1] = "LOADING"; - UseERC20PermitState[UseERC20PermitState["NOT_SIGNED"] = 2] = "NOT_SIGNED"; - UseERC20PermitState[UseERC20PermitState["SIGNED"] = 3] = "SIGNED"; -})(UseERC20PermitState || (UseERC20PermitState = {})); -var EIP712_DOMAIN_TYPE = [ - { name: 'name', type: 'string' }, - { name: 'version', type: 'string' }, - { name: 'chainId', type: 'uint256' }, - { name: 'verifyingContract', type: 'address' }, -]; -var EIP712_DOMAIN_TYPE_NO_VERSION = [ - { name: 'name', type: 'string' }, - { name: 'chainId', type: 'uint256' }, - { name: 'verifyingContract', type: 'address' }, -]; -var EIP2612_TYPE = [ - { name: 'owner', type: 'address' }, - { name: 'spender', type: 'address' }, - { name: 'value', type: 'uint256' }, - { name: 'nonce', type: 'uint256' }, - { name: 'deadline', type: 'uint256' }, -]; -var PERMIT_ALLOWED_TYPE = [ - { name: 'holder', type: 'address' }, - { name: 'spender', type: 'address' }, - { name: 'nonce', type: 'uint256' }, - { name: 'expiry', type: 'uint256' }, - { name: 'allowed', type: 'bool' }, -]; -function useERC20Permit(currencyAmount, spender, transactionDeadline, overridePermitInfo) { - var _a, _b; - var _c = useActiveWeb3React(), account = _c.account, chainId = _c.chainId, library = _c.library; - var tokenAddress = ((_a = currencyAmount === null || currencyAmount === void 0 ? void 0 : currencyAmount.currency) === null || _a === void 0 ? void 0 : _a.isToken) ? currencyAmount.currency.address : undefined; - var eip2612Contract = useEIP2612Contract(tokenAddress); - var isArgentWallet = useIsArgentWallet(); - var nonceInputs = React.useMemo(function () { return [account !== null && account !== void 0 ? account : undefined]; }, [account]); - var tokenNonceState = useSingleCallResult(eip2612Contract, 'nonces', nonceInputs); - var permitInfo = overridePermitInfo !== null && overridePermitInfo !== void 0 ? overridePermitInfo : (chainId && tokenAddress ? (_b = PERMITTABLE_TOKENS[chainId]) === null || _b === void 0 ? void 0 : _b[tokenAddress] : undefined); - var _d = __read(React.useState(null), 2), signatureData = _d[0], setSignatureData = _d[1]; - return React.useMemo(function () { - var _a, _b; - if (isArgentWallet || - !currencyAmount || - !eip2612Contract || - !account || - !chainId || - !transactionDeadline || - !library || - !tokenNonceState.valid || - !tokenAddress || - !spender || - !permitInfo) { - return { - state: UseERC20PermitState.NOT_APPLICABLE, - signatureData: null, - gatherPermitSignature: null, - }; - } - var nonceNumber = (_b = (_a = tokenNonceState.result) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.toNumber(); - if (tokenNonceState.loading || typeof nonceNumber !== 'number') { - return { - state: UseERC20PermitState.LOADING, - signatureData: null, - gatherPermitSignature: null, - }; - } - var isSignatureDataValid = signatureData && - signatureData.owner === account && - signatureData.deadline >= transactionDeadline.toNumber() && - signatureData.tokenAddress === tokenAddress && - signatureData.nonce === nonceNumber && - signatureData.spender === spender && - ('allowed' in signatureData || JSBI__default["default"].equal(JSBI__default["default"].BigInt(signatureData.amount), currencyAmount.quotient)); - return { - state: isSignatureDataValid ? UseERC20PermitState.SIGNED : UseERC20PermitState.NOT_SIGNED, - signatureData: isSignatureDataValid ? signatureData : null, - gatherPermitSignature: function gatherPermitSignature() { - return __awaiter(this, void 0, void 0, function () { - var allowed, signatureDeadline, value, message, domain, data; - return __generator(this, function (_a) { - allowed = permitInfo.type === PermitType.ALLOWED; - signatureDeadline = transactionDeadline.toNumber() + PERMIT_VALIDITY_BUFFER; - value = currencyAmount.quotient.toString(); - message = allowed - ? { - holder: account, - spender: spender, - allowed: allowed, - nonce: nonceNumber, - expiry: signatureDeadline, - } - : { - owner: account, - spender: spender, - value: value, - nonce: nonceNumber, - deadline: signatureDeadline, - }; - domain = permitInfo.version - ? { - name: permitInfo.name, - version: permitInfo.version, - verifyingContract: tokenAddress, - chainId: chainId, - } - : { - name: permitInfo.name, - verifyingContract: tokenAddress, - chainId: chainId, - }; - data = JSON.stringify({ - types: { - EIP712Domain: permitInfo.version ? EIP712_DOMAIN_TYPE : EIP712_DOMAIN_TYPE_NO_VERSION, - Permit: allowed ? PERMIT_ALLOWED_TYPE : EIP2612_TYPE, - }, - domain: domain, - primaryType: 'Permit', - message: message, - }); - return [2 /*return*/, library - .send('eth_signTypedData_v4', [account, data]) - .then(bytes.splitSignature) - .then(function (signature) { - setSignatureData(__assign(__assign({ v: signature.v, r: signature.r, s: signature.s, deadline: signatureDeadline }, (allowed ? { allowed: allowed } : { amount: value })), { nonce: nonceNumber, chainId: chainId, owner: account, spender: spender, tokenAddress: tokenAddress, permitType: permitInfo.type })); - })]; - }); - }); - }, - }; - }, [ - currencyAmount, - eip2612Contract, - account, - chainId, - isArgentWallet, - transactionDeadline, - library, - tokenNonceState.loading, - tokenNonceState.valid, - tokenNonceState.result, - tokenAddress, - spender, - permitInfo, - signatureData, - ]); -} -function useERC20PermitFromTrade(trade, allowedSlippage, transactionDeadline) { - var chainId = useActiveWeb3React().chainId; - var swapRouterAddress = chainId - ? // v2 router does not support - trade instanceof v2Sdk.Trade - ? undefined - : trade instanceof v3Sdk.Trade - ? V3_ROUTER_ADDRESS[chainId] - : SWAP_ROUTER_ADDRESSES[chainId] - : undefined; - var amountToApprove = React.useMemo(function () { return (trade ? trade.maximumAmountIn(allowedSlippage) : undefined); }, [trade, allowedSlippage]); - return useERC20Permit(amountToApprove, swapRouterAddress, transactionDeadline, null); -} - -/** - * Returns true if the input currency or output currency cannot be traded in the interface - * @param currencyIn the input currency to check - * @param currencyOut the output currency to check - */ -function useIsSwapUnsupported(currencyIn, currencyOut) { - var unsupportedTokens = useUnsupportedTokens(); - return React.useMemo(function () { - if (!unsupportedTokens) { - return false; - } - var currencyInUnsupported = Boolean((currencyIn === null || currencyIn === void 0 ? void 0 : currencyIn.isToken) && unsupportedTokens[currencyIn.address]); - var currencyOutUnsupported = Boolean((currencyOut === null || currencyOut === void 0 ? void 0 : currencyOut.isToken) && unsupportedTokens[currencyOut.address]); - return currencyInUnsupported || currencyOutUnsupported; - }, [currencyIn, currencyOut, unsupportedTokens]); -} - -var WrapType; -(function (WrapType) { - WrapType[WrapType["NOT_APPLICABLE"] = 0] = "NOT_APPLICABLE"; - WrapType[WrapType["WRAP"] = 1] = "WRAP"; - WrapType[WrapType["UNWRAP"] = 2] = "UNWRAP"; -})(WrapType || (WrapType = {})); -var NOT_APPLICABLE = { wrapType: WrapType.NOT_APPLICABLE }; -var WrapInputError; -(function (WrapInputError) { - WrapInputError[WrapInputError["NO_ERROR"] = 0] = "NO_ERROR"; - WrapInputError[WrapInputError["ENTER_NATIVE_AMOUNT"] = 1] = "ENTER_NATIVE_AMOUNT"; - WrapInputError[WrapInputError["ENTER_WRAPPED_AMOUNT"] = 2] = "ENTER_WRAPPED_AMOUNT"; - WrapInputError[WrapInputError["INSUFFICIENT_NATIVE_BALANCE"] = 3] = "INSUFFICIENT_NATIVE_BALANCE"; - WrapInputError[WrapInputError["INSUFFICIENT_WRAPPED_BALANCE"] = 4] = "INSUFFICIENT_WRAPPED_BALANCE"; -})(WrapInputError || (WrapInputError = {})); -function WrapErrorText(_a) { - var wrapInputError = _a.wrapInputError; - var native = useNativeCurrency(); - var wrapped = native === null || native === void 0 ? void 0 : native.wrapped; - switch (wrapInputError) { - case WrapInputError.NO_ERROR: - return null; - case WrapInputError.ENTER_NATIVE_AMOUNT: - return jsxRuntime.jsxs(macro.Trans, { children: ["Enter ", native === null || native === void 0 ? void 0 : native.symbol, " amount"] }, void 0); - case WrapInputError.ENTER_WRAPPED_AMOUNT: - return jsxRuntime.jsxs(macro.Trans, { children: ["Enter ", wrapped === null || wrapped === void 0 ? void 0 : wrapped.symbol, " amount"] }, void 0); - case WrapInputError.INSUFFICIENT_NATIVE_BALANCE: - return jsxRuntime.jsxs(macro.Trans, { children: ["Insufficient ", native === null || native === void 0 ? void 0 : native.symbol, " balance"] }, void 0); - case WrapInputError.INSUFFICIENT_WRAPPED_BALANCE: - return jsxRuntime.jsxs(macro.Trans, { children: ["Insufficient ", wrapped === null || wrapped === void 0 ? void 0 : wrapped.symbol, " balance"] }, void 0); - } -} -/** - * Given the selected input and output currency, return a wrap callback - * @param inputCurrency the selected input currency - * @param outputCurrency the selected output currency - * @param typedValue the user input value - */ -function useWrapCallback(inputCurrency, outputCurrency, typedValue) { - var _this = this; - var _a = useActiveWeb3React(), chainId = _a.chainId, account = _a.account; - var wethContract = useWETHContract(); - var balance = useCurrencyBalance(account !== null && account !== void 0 ? account : undefined, inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : undefined); - // we can always parse the amount typed as the input currency, since wrapping is 1:1 - var inputAmount = React.useMemo(function () { return tryParseCurrencyAmount(typedValue, inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : undefined); }, [inputCurrency, typedValue]); - var addTransaction = useTransactionAdder(); - return React.useMemo(function () { - if (!wethContract || !chainId || !inputCurrency || !outputCurrency) - return NOT_APPLICABLE; - var weth = WRAPPED_NATIVE_CURRENCY[chainId]; - if (!weth) - return NOT_APPLICABLE; - var hasInputAmount = Boolean(inputAmount === null || inputAmount === void 0 ? void 0 : inputAmount.greaterThan('0')); - var sufficientBalance = inputAmount && balance && !balance.lessThan(inputAmount); - if (inputCurrency.isNative && weth.equals(outputCurrency)) { - return { - wrapType: WrapType.WRAP, - execute: sufficientBalance && inputAmount - ? function () { return __awaiter(_this, void 0, void 0, function () { - var txReceipt, error_1; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - _a.trys.push([0, 2, , 3]); - return [4 /*yield*/, wethContract.deposit({ value: "0x" + inputAmount.quotient.toString(16) })]; - case 1: - txReceipt = _a.sent(); - addTransaction(txReceipt, { - type: TransactionType.WRAP, - unwrapped: false, - currencyAmountRaw: inputAmount === null || inputAmount === void 0 ? void 0 : inputAmount.quotient.toString(), - chainId: chainId, - }); - return [3 /*break*/, 3]; - case 2: - error_1 = _a.sent(); - console.error('Could not deposit', error_1); - return [3 /*break*/, 3]; - case 3: return [2 /*return*/]; - } - }); - }); } - : undefined, - inputError: sufficientBalance - ? undefined - : hasInputAmount - ? WrapInputError.INSUFFICIENT_NATIVE_BALANCE - : WrapInputError.ENTER_NATIVE_AMOUNT, - }; - } - else if (weth.equals(inputCurrency) && outputCurrency.isNative) { - return { - wrapType: WrapType.UNWRAP, - execute: sufficientBalance && inputAmount - ? function () { return __awaiter(_this, void 0, void 0, function () { - var txReceipt, error_2; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - _a.trys.push([0, 2, , 3]); - return [4 /*yield*/, wethContract.withdraw("0x" + inputAmount.quotient.toString(16))]; - case 1: - txReceipt = _a.sent(); - addTransaction(txReceipt, { - type: TransactionType.WRAP, - unwrapped: true, - currencyAmountRaw: inputAmount === null || inputAmount === void 0 ? void 0 : inputAmount.quotient.toString(), - chainId: chainId, - }); - return [3 /*break*/, 3]; - case 2: - error_2 = _a.sent(); - console.error('Could not withdraw', error_2); - return [3 /*break*/, 3]; - case 3: return [2 /*return*/]; - } - }); - }); } - : undefined, - inputError: sufficientBalance - ? undefined - : hasInputAmount - ? WrapInputError.INSUFFICIENT_WRAPPED_BALANCE - : WrapInputError.ENTER_WRAPPED_AMOUNT, - }; - } - else { - return NOT_APPLICABLE; - } - }, [wethContract, chainId, inputCurrency, outputCurrency, inputAmount, balance, addTransaction]); -} - -var MIN_NATIVE_CURRENCY_FOR_GAS = JSBI__default["default"].exponentiate(JSBI__default["default"].BigInt(10), JSBI__default["default"].BigInt(16)); // .01 ETH -/** - * Given some token amount, return the max that can be spent of it - * @param currencyAmount to return max of - */ -function maxAmountSpend(currencyAmount) { - if (!currencyAmount) - return undefined; - if (currencyAmount.currency.isNative) { - if (JSBI__default["default"].greaterThan(currencyAmount.quotient, MIN_NATIVE_CURRENCY_FOR_GAS)) { - return sdkCore.CurrencyAmount.fromRawAmount(currencyAmount.currency, JSBI__default["default"].subtract(currencyAmount.quotient, MIN_NATIVE_CURRENCY_FOR_GAS)); - } - else { - return sdkCore.CurrencyAmount.fromRawAmount(currencyAmount.currency, JSBI__default["default"].BigInt(0)); - } - } - return currencyAmount; -} - -var BodyWrapper$1 = styled__default["default"].main(templateObject_1$3 || (templateObject_1$3 = __makeTemplateObject(["\n position: relative;\n margin-top: ", ";\n max-width: ", ";\n width: 100%;\n background: ", ";\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 border-radius: 24px;\n margin-top: 1rem;\n margin-left: auto;\n margin-right: auto;\n z-index: ", ";\n"], ["\n position: relative;\n margin-top: ", ";\n max-width: ", ";\n width: 100%;\n background: ", ";\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 border-radius: 24px;\n margin-top: 1rem;\n margin-left: auto;\n margin-right: auto;\n z-index: ", ";\n" - /** - * The styled container element that wraps the content of most pages and the tabs. - */ -])), function (_a) { - var margin = _a.margin; - return margin !== null && margin !== void 0 ? margin : '0px'; -}, function (_a) { - var maxWidth = _a.maxWidth; - return maxWidth !== null && maxWidth !== void 0 ? maxWidth : '480px'; -}, function (_a) { - var theme = _a.theme; - return theme.bg0; -}, Z_INDEX.deprecated_content); -/** - * The styled container element that wraps the content of most pages and the tabs. - */ -function AppBody(_a) { - var children = _a.children, rest = __rest(_a, ["children"]); - return jsxRuntime.jsx(BodyWrapper$1, __assign({}, rest, { children: children }), void 0); -} -var templateObject_1$3; - -var AlertWrapper = styled__default["default"].div(templateObject_1$2 || (templateObject_1$2 = __makeTemplateObject(["\n max-width: 460px;\n width: 100%;\n"], ["\n max-width: 460px;\n width: 100%;\n"]))); -function Swap(_a) { - var _this = this; - var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l; - var history = _a.history; - var account = useActiveWeb3React().account; - var loadedUrlParams = useDefaultsFromURLSearch(); - // token warning stuff - var _m = __read([ - useCurrency(loadedUrlParams === null || loadedUrlParams === void 0 ? void 0 : loadedUrlParams.inputCurrencyId), - useCurrency(loadedUrlParams === null || loadedUrlParams === void 0 ? void 0 : loadedUrlParams.outputCurrencyId), - ], 2), loadedInputCurrency = _m[0], loadedOutputCurrency = _m[1]; - var _o = __read(React.useState(false), 2), dismissTokenWarning = _o[0], setDismissTokenWarning = _o[1]; - var urlLoadedTokens = React.useMemo(function () { var _a, _b; return (_b = (_a = [loadedInputCurrency, loadedOutputCurrency]) === null || _a === void 0 ? void 0 : _a.filter(function (c) { var _a; return (_a = c === null || c === void 0 ? void 0 : c.isToken) !== null && _a !== void 0 ? _a : false; })) !== null && _b !== void 0 ? _b : []; }, [loadedInputCurrency, loadedOutputCurrency]); - var handleConfirmTokenWarning = React.useCallback(function () { - setDismissTokenWarning(true); - }, []); - // dismiss warning if all imported tokens are in active lists - var defaultTokens = useAllTokens(); - var importTokensNotInDefault = React.useMemo(function () { - return urlLoadedTokens && - urlLoadedTokens.filter(function (token) { - return !Boolean(token.address in defaultTokens); - }); - }, [defaultTokens, urlLoadedTokens]); - var theme = React.useContext(styled.ThemeContext); - // toggle wallet when disconnected - var toggleWalletModal = useWalletModalToggle(); - // for expert mode - var _p = __read(useExpertModeManager(), 1), isExpertMode = _p[0]; - // swap state - var _q = useSwapState(), independentField = _q.independentField, typedValue = _q.typedValue, recipient = _q.recipient; - var _r = useDerivedSwapInfo(), _s = _r.trade, tradeState = _s.state, trade = _s.trade, allowedSlippage = _r.allowedSlippage, currencyBalances = _r.currencyBalances, parsedAmount = _r.parsedAmount, currencies = _r.currencies, swapInputError = _r.inputError; - var _t = useWrapCallback(currencies[Field.INPUT], currencies[Field.OUTPUT], typedValue), wrapType = _t.wrapType, onWrap = _t.execute, wrapInputError = _t.inputError; - var showWrap = wrapType !== WrapType.NOT_APPLICABLE; - var recipientAddress = useENSAddress(recipient).address; - var parsedAmounts = React.useMemo(function () { - var _a, _b; - return showWrap - ? (_a = {}, - _a[Field.INPUT] = parsedAmount, - _a[Field.OUTPUT] = parsedAmount, - _a) : (_b = {}, - _b[Field.INPUT] = independentField === Field.INPUT ? parsedAmount : trade === null || trade === void 0 ? void 0 : trade.inputAmount, - _b[Field.OUTPUT] = independentField === Field.OUTPUT ? parsedAmount : trade === null || trade === void 0 ? void 0 : trade.outputAmount, - _b); - }, [independentField, parsedAmount, showWrap, trade]); - var _u = __read(React.useMemo(function () { return [!(trade === null || trade === void 0 ? void 0 : trade.swaps), TradeState.LOADING === tradeState, TradeState.SYNCING === tradeState]; }, [trade, tradeState]), 3), routeNotFound = _u[0], routeIsLoading = _u[1], routeIsSyncing = _u[2]; - var fiatValueInput = useUSDCValue(parsedAmounts[Field.INPUT]); - var fiatValueOutput = useUSDCValue(parsedAmounts[Field.OUTPUT]); - var priceImpact = React.useMemo(function () { return (routeIsSyncing ? undefined : computeFiatValuePriceImpact(fiatValueInput, fiatValueOutput)); }, [fiatValueInput, fiatValueOutput, routeIsSyncing]); - var _v = useSwapActionHandlers(), onSwitchTokens = _v.onSwitchTokens, onCurrencySelection = _v.onCurrencySelection, onUserInput = _v.onUserInput, onChangeRecipient = _v.onChangeRecipient; - var isValid = !swapInputError; - var dependentField = independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT; - var handleTypeInput = React.useCallback(function (value) { - onUserInput(Field.INPUT, value); - }, [onUserInput]); - var handleTypeOutput = React.useCallback(function (value) { - onUserInput(Field.OUTPUT, value); - }, [onUserInput]); - // reset if they close warning without tokens in params - var handleDismissTokenWarning = React.useCallback(function () { - setDismissTokenWarning(true); - history.push('/swap/'); - }, [history]); - // modal and loading - var _w = __read(React.useState({ - showConfirm: false, - tradeToConfirm: undefined, - attemptingTxn: false, - swapErrorMessage: undefined, - txHash: undefined, - }), 2), _x = _w[0], showConfirm = _x.showConfirm, tradeToConfirm = _x.tradeToConfirm, swapErrorMessage = _x.swapErrorMessage, attemptingTxn = _x.attemptingTxn, txHash = _x.txHash, setSwapState = _w[1]; - var formattedAmounts = React.useMemo(function () { - var _a; - var _b, _c, _d, _e; - return (_a = {}, - _a[independentField] = typedValue, - _a[dependentField] = showWrap - ? (_c = (_b = parsedAmounts[independentField]) === null || _b === void 0 ? void 0 : _b.toExact()) !== null && _c !== void 0 ? _c : '' - : (_e = (_d = parsedAmounts[dependentField]) === null || _d === void 0 ? void 0 : _d.toSignificant(6)) !== null && _e !== void 0 ? _e : '', - _a); - }, [dependentField, independentField, parsedAmounts, showWrap, typedValue]); - var userHasSpecifiedInputOutput = Boolean(currencies[Field.INPUT] && currencies[Field.OUTPUT] && ((_b = parsedAmounts[independentField]) === null || _b === void 0 ? void 0 : _b.greaterThan(JSBI__default["default"].BigInt(0)))); - var approvalOptimizedTrade = useApprovalOptimizedTrade(trade, allowedSlippage); - var approvalOptimizedTradeString = approvalOptimizedTrade instanceof v2Sdk.Trade - ? 'V2SwapRouter' - : approvalOptimizedTrade instanceof v3Sdk.Trade - ? 'V3SwapRouter' - : 'SwapRouter'; - // check whether the user has approved the router on the input token - var _y = __read(useApproveCallbackFromTrade(approvalOptimizedTrade, allowedSlippage), 2), approvalState = _y[0], approveCallback = _y[1]; - var transactionDeadline = useTransactionDeadline(); - var _z = useERC20PermitFromTrade(approvalOptimizedTrade, allowedSlippage, transactionDeadline), signatureState = _z.state, signatureData = _z.signatureData, gatherPermitSignature = _z.gatherPermitSignature; - var handleApprove = React.useCallback(function () { return __awaiter(_this, void 0, void 0, function () { - var error_1; - var _a; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - if (!(signatureState === UseERC20PermitState.NOT_SIGNED && gatherPermitSignature)) return [3 /*break*/, 7]; - _b.label = 1; - case 1: - _b.trys.push([1, 3, , 6]); - return [4 /*yield*/, gatherPermitSignature()]; - case 2: - _b.sent(); - return [3 /*break*/, 6]; - case 3: - error_1 = _b.sent(); - if (!((error_1 === null || error_1 === void 0 ? void 0 : error_1.code) !== 4001)) return [3 /*break*/, 5]; - return [4 /*yield*/, approveCallback()]; - case 4: - _b.sent(); - _b.label = 5; - case 5: return [3 /*break*/, 6]; - case 6: return [3 /*break*/, 9]; - case 7: return [4 /*yield*/, approveCallback()]; - case 8: - _b.sent(); - ReactGA__default["default"].event({ - category: 'Swap', - action: 'Approve', - label: [approvalOptimizedTradeString, (_a = approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 ? void 0 : approvalOptimizedTrade.inputAmount) === null || _a === void 0 ? void 0 : _a.currency.symbol].join('/'), - }); - _b.label = 9; - case 9: return [2 /*return*/]; - } - }); - }); }, [ - signatureState, - gatherPermitSignature, - approveCallback, - approvalOptimizedTradeString, - (_c = approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 ? void 0 : approvalOptimizedTrade.inputAmount) === null || _c === void 0 ? void 0 : _c.currency.symbol, - ]); - // check if user has gone through approval process, used to show two step buttons, reset on token change - var _0 = __read(React.useState(false), 2), approvalSubmitted = _0[0], setApprovalSubmitted = _0[1]; - // mark when a user has submitted an approval, reset onTokenSelection for input field - React.useEffect(function () { - if (approvalState === ApprovalState.PENDING) { - setApprovalSubmitted(true); - } - }, [approvalState, approvalSubmitted]); - var maxInputAmount = React.useMemo(function () { return maxAmountSpend(currencyBalances[Field.INPUT]); }, [currencyBalances]); - var showMaxButton = Boolean((maxInputAmount === null || maxInputAmount === void 0 ? void 0 : maxInputAmount.greaterThan(0)) && !((_d = parsedAmounts[Field.INPUT]) === null || _d === void 0 ? void 0 : _d.equalTo(maxInputAmount))); - // the callback to execute the swap - var _1 = useSwapCallback(approvalOptimizedTrade, allowedSlippage, recipient, signatureData), swapCallback = _1.callback, swapCallbackError = _1.error; - var handleSwap = React.useCallback(function () { - if (!swapCallback) { - return; - } - if (priceImpact && !confirmPriceImpactWithoutFee(priceImpact)) { - return; - } - setSwapState({ attemptingTxn: true, tradeToConfirm: tradeToConfirm, showConfirm: showConfirm, swapErrorMessage: undefined, txHash: undefined }); - swapCallback() - .then(function (hash) { - var _a, _b, _c, _d; - setSwapState({ attemptingTxn: false, tradeToConfirm: tradeToConfirm, showConfirm: showConfirm, swapErrorMessage: undefined, txHash: hash }); - ReactGA__default["default"].event({ - category: 'Swap', - action: recipient === null - ? 'Swap w/o Send' - : (recipientAddress !== null && recipientAddress !== void 0 ? recipientAddress : recipient) === account - ? 'Swap w/o Send + recipient' - : 'Swap w/ Send', - label: [ - approvalOptimizedTradeString, - (_b = (_a = approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 ? void 0 : approvalOptimizedTrade.inputAmount) === null || _a === void 0 ? void 0 : _a.currency) === null || _b === void 0 ? void 0 : _b.symbol, - (_d = (_c = approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 ? void 0 : approvalOptimizedTrade.outputAmount) === null || _c === void 0 ? void 0 : _c.currency) === null || _d === void 0 ? void 0 : _d.symbol, - 'MH', - ].join('/'), - }); - }) - .catch(function (error) { - setSwapState({ - attemptingTxn: false, - tradeToConfirm: tradeToConfirm, - showConfirm: showConfirm, - swapErrorMessage: error.message, - txHash: undefined, - }); - }); - }, [ - swapCallback, - priceImpact, - tradeToConfirm, - showConfirm, - recipient, - recipientAddress, - account, - approvalOptimizedTradeString, - (_f = (_e = approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 ? void 0 : approvalOptimizedTrade.inputAmount) === null || _e === void 0 ? void 0 : _e.currency) === null || _f === void 0 ? void 0 : _f.symbol, - (_h = (_g = approvalOptimizedTrade === null || approvalOptimizedTrade === void 0 ? void 0 : approvalOptimizedTrade.outputAmount) === null || _g === void 0 ? void 0 : _g.currency) === null || _h === void 0 ? void 0 : _h.symbol, - ]); - // errors - var _2 = __read(React.useState(false), 2), showInverted = _2[0], setShowInverted = _2[1]; - // warnings on the greater of fiat value price impact and execution price impact - var priceImpactSeverity = React.useMemo(function () { - var executionPriceImpact = trade === null || trade === void 0 ? void 0 : trade.priceImpact; - return warningSeverity(executionPriceImpact && priceImpact - ? executionPriceImpact.greaterThan(priceImpact) - ? executionPriceImpact - : priceImpact - : executionPriceImpact !== null && executionPriceImpact !== void 0 ? executionPriceImpact : priceImpact); - }, [priceImpact, trade]); - var isArgentWallet = useIsArgentWallet(); - // show approve flow when: no error on inputs, not approved or pending, or approved in current session - // never show if price impact is above threshold in non expert mode - var showApproveFlow = !isArgentWallet && - !swapInputError && - (approvalState === ApprovalState.NOT_APPROVED || - approvalState === ApprovalState.PENDING || - (approvalSubmitted && approvalState === ApprovalState.APPROVED)) && - !(priceImpactSeverity > 3 && !isExpertMode); - var handleConfirmDismiss = React.useCallback(function () { - setSwapState({ showConfirm: false, tradeToConfirm: tradeToConfirm, attemptingTxn: attemptingTxn, swapErrorMessage: swapErrorMessage, txHash: txHash }); - // if there was a tx hash, we want to clear the input - if (txHash) { - onUserInput(Field.INPUT, ''); - } - }, [attemptingTxn, onUserInput, swapErrorMessage, tradeToConfirm, txHash]); - var handleAcceptChanges = React.useCallback(function () { - setSwapState({ tradeToConfirm: trade, swapErrorMessage: swapErrorMessage, txHash: txHash, attemptingTxn: attemptingTxn, showConfirm: showConfirm }); - }, [attemptingTxn, showConfirm, swapErrorMessage, trade, txHash]); - var handleInputSelect = React.useCallback(function (inputCurrency) { - setApprovalSubmitted(false); // reset 2 step UI for approvals - onCurrencySelection(Field.INPUT, inputCurrency); - }, [onCurrencySelection]); - var handleMaxInput = React.useCallback(function () { - maxInputAmount && onUserInput(Field.INPUT, maxInputAmount.toExact()); - ReactGA__default["default"].event({ - category: 'Swap', - action: 'Max', - }); - }, [maxInputAmount, onUserInput]); - var handleOutputSelect = React.useCallback(function (outputCurrency) { return onCurrencySelection(Field.OUTPUT, outputCurrency); }, [onCurrencySelection]); - var swapIsUnsupported = useIsSwapUnsupported(currencies[Field.INPUT], currencies[Field.OUTPUT]); - var priceImpactTooHigh = priceImpactSeverity > 3 && !isExpertMode; - return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(TokenWarningModal, { isOpen: importTokensNotInDefault.length > 0 && !dismissTokenWarning, tokens: importTokensNotInDefault, onConfirm: handleConfirmTokenWarning, onDismiss: handleDismissTokenWarning }, void 0), jsxRuntime.jsxs(AppBody, { children: [jsxRuntime.jsx(SwapHeader, { allowedSlippage: allowedSlippage }, void 0), jsxRuntime.jsxs(Wrapper$g, __assign({ id: "swap-page" }, { children: [jsxRuntime.jsx(ConfirmSwapModal, { isOpen: showConfirm, trade: trade, originalTrade: tradeToConfirm, onAcceptChanges: handleAcceptChanges, attemptingTxn: attemptingTxn, txHash: txHash, recipient: recipient, allowedSlippage: allowedSlippage, onConfirm: handleSwap, swapErrorMessage: swapErrorMessage, onDismiss: handleConfirmDismiss }, void 0), jsxRuntime.jsxs(AutoColumn, __assign({ gap: 'sm' }, { children: [jsxRuntime.jsxs("div", __assign({ style: { display: 'relative' } }, { children: [jsxRuntime.jsx(CurrencyInputPanel, { label: independentField === Field.OUTPUT && !showWrap ? jsxRuntime.jsx(macro.Trans, { children: "From (at most)" }, void 0) : jsxRuntime.jsx(macro.Trans, { children: "From" }, void 0), value: formattedAmounts[Field.INPUT], showMaxButton: showMaxButton, currency: currencies[Field.INPUT], onUserInput: handleTypeInput, onMax: handleMaxInput, fiatValue: fiatValueInput !== null && fiatValueInput !== void 0 ? fiatValueInput : undefined, onCurrencySelect: handleInputSelect, otherCurrency: currencies[Field.OUTPUT], showCommonBases: true, id: "swap-currency-input", loading: independentField === Field.OUTPUT && routeIsSyncing }, void 0), jsxRuntime.jsx(ArrowWrapper$1, __assign({ clickable: true }, { children: jsxRuntime.jsx(reactFeather.ArrowDown, { size: "16", onClick: function () { - setApprovalSubmitted(false); // reset 2 step UI for approvals - onSwitchTokens(); - }, color: currencies[Field.INPUT] && currencies[Field.OUTPUT] ? theme.text1 : theme.text3 }, void 0) }), void 0), jsxRuntime.jsx(CurrencyInputPanel, { value: formattedAmounts[Field.OUTPUT], onUserInput: handleTypeOutput, label: independentField === Field.INPUT && !showWrap ? jsxRuntime.jsx(macro.Trans, { children: "To (at least)" }, void 0) : jsxRuntime.jsx(macro.Trans, { children: "To" }, void 0), showMaxButton: false, hideBalance: false, fiatValue: fiatValueOutput !== null && fiatValueOutput !== void 0 ? fiatValueOutput : undefined, priceImpact: priceImpact, currency: currencies[Field.OUTPUT], onCurrencySelect: handleOutputSelect, otherCurrency: currencies[Field.INPUT], showCommonBases: true, id: "swap-currency-output", loading: independentField === Field.INPUT && routeIsSyncing }, void 0)] }), void 0), recipient !== null && !showWrap ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs(AutoRow, __assign({ justify: "space-between", style: { padding: '0 1rem' } }, { children: [jsxRuntime.jsx(ArrowWrapper$1, __assign({ clickable: false }, { children: jsxRuntime.jsx(reactFeather.ArrowDown, { size: "16", color: theme.text2 }, void 0) }), void 0), jsxRuntime.jsx(LinkStyledButton, __assign({ id: "remove-recipient-button", onClick: function () { return onChangeRecipient(null); } }, { children: jsxRuntime.jsx(macro.Trans, { children: "- Remove recipient" }, void 0) }), void 0)] }), void 0), jsxRuntime.jsx(AddressInputPanel, { id: "recipient", value: recipient, onChange: onChangeRecipient }, void 0)] }, void 0)) : null, !showWrap && userHasSpecifiedInputOutput && (trade || routeIsLoading || routeIsSyncing) && (jsxRuntime.jsx(SwapDetailsDropdown, { trade: trade, syncing: routeIsSyncing, loading: routeIsLoading, showInverted: showInverted, setShowInverted: setShowInverted, allowedSlippage: allowedSlippage }, void 0)), jsxRuntime.jsxs("div", { children: [swapIsUnsupported ? (jsxRuntime.jsx(ButtonPrimary, __assign({ disabled: true }, { children: jsxRuntime.jsx(ThemedText.Main, __assign({ mb: "4px" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Unsupported Asset" }, void 0) }), void 0) }), void 0)) : !account ? (jsxRuntime.jsx(ButtonLight, __assign({ onClick: toggleWalletModal }, { children: jsxRuntime.jsx(macro.Trans, { children: "Connect Wallet" }, void 0) }), void 0)) : showWrap ? (jsxRuntime.jsx(ButtonPrimary, __assign({ disabled: Boolean(wrapInputError), onClick: onWrap }, { children: wrapInputError ? (jsxRuntime.jsx(WrapErrorText, { wrapInputError: wrapInputError }, void 0)) : wrapType === WrapType.WRAP ? (jsxRuntime.jsx(macro.Trans, { children: "Wrap" }, void 0)) : wrapType === WrapType.UNWRAP ? (jsxRuntime.jsx(macro.Trans, { children: "Unwrap" }, void 0)) : null }), void 0)) : routeNotFound && userHasSpecifiedInputOutput && !routeIsLoading && !routeIsSyncing ? (jsxRuntime.jsx(GreyCard, __assign({ style: { textAlign: 'center' } }, { children: jsxRuntime.jsx(ThemedText.Main, __assign({ mb: "4px" }, { children: jsxRuntime.jsx(macro.Trans, { children: "Insufficient liquidity for this trade." }, void 0) }), void 0) }), void 0)) : showApproveFlow ? (jsxRuntime.jsx(AutoRow, __assign({ style: { flexWrap: 'nowrap', width: '100%' } }, { children: jsxRuntime.jsxs(AutoColumn, __assign({ style: { width: '100%' }, gap: "12px" }, { children: [jsxRuntime.jsx(ButtonConfirmed, __assign({ onClick: handleApprove, disabled: approvalState !== ApprovalState.NOT_APPROVED || - approvalSubmitted || - signatureState === UseERC20PermitState.SIGNED, width: "100%", altDisabledStyle: approvalState === ApprovalState.PENDING, confirmed: approvalState === ApprovalState.APPROVED || signatureState === UseERC20PermitState.SIGNED }, { children: jsxRuntime.jsxs(AutoRow, __assign({ justify: "space-between", style: { flexWrap: 'nowrap' } }, { children: [jsxRuntime.jsxs("span", __assign({ style: { display: 'flex', alignItems: 'center' } }, { children: [jsxRuntime.jsx(CurrencyLogo, { currency: currencies[Field.INPUT], size: '20px', style: { marginRight: '8px', flexShrink: 0 } }, void 0), approvalState === ApprovalState.APPROVED || signatureState === UseERC20PermitState.SIGNED ? (jsxRuntime.jsxs(macro.Trans, { children: ["You can now trade ", (_j = currencies[Field.INPUT]) === null || _j === void 0 ? void 0 : _j.symbol] }, void 0)) : (jsxRuntime.jsxs(macro.Trans, { children: ["Allow the Uniswap Protocol to use your ", (_k = currencies[Field.INPUT]) === null || _k === void 0 ? void 0 : _k.symbol] }, void 0))] }), void 0), approvalState === ApprovalState.PENDING ? (jsxRuntime.jsx(Loader, { stroke: "white" }, void 0)) : (approvalSubmitted && approvalState === ApprovalState.APPROVED) || - signatureState === UseERC20PermitState.SIGNED ? (jsxRuntime.jsx(reactFeather.CheckCircle, { size: "20", color: theme.green1 }, void 0)) : (jsxRuntime.jsx(MouseoverTooltip, __assign({ text: jsxRuntime.jsxs(macro.Trans, { children: ["You must give the Uniswap smart contracts permission to use your", ' ', (_l = currencies[Field.INPUT]) === null || _l === void 0 ? void 0 : _l.symbol, ". You only have to do this once per token."] }, void 0) }, { children: jsxRuntime.jsx(reactFeather.HelpCircle, { size: "20", color: 'white', style: { marginLeft: '8px' } }, void 0) }), void 0))] }), void 0) }), void 0), jsxRuntime.jsx(ButtonError, __assign({ onClick: function () { - if (isExpertMode) { - handleSwap(); - } - else { - setSwapState({ - tradeToConfirm: trade, - attemptingTxn: false, - swapErrorMessage: undefined, - showConfirm: true, - txHash: undefined, - }); - } - }, width: "100%", id: "swap-button", disabled: !isValid || - routeIsSyncing || - routeIsLoading || - (approvalState !== ApprovalState.APPROVED && signatureState !== UseERC20PermitState.SIGNED) || - priceImpactTooHigh, error: isValid && priceImpactSeverity > 2 }, { children: jsxRuntime.jsx(rebass.Text, __assign({ fontSize: 16, fontWeight: 500 }, { children: priceImpactTooHigh ? (jsxRuntime.jsx(macro.Trans, { children: "High Price Impact" }, void 0)) : trade && priceImpactSeverity > 2 ? (jsxRuntime.jsx(macro.Trans, { children: "Swap Anyway" }, void 0)) : (jsxRuntime.jsx(macro.Trans, { children: "Swap" }, void 0)) }), void 0) }), void 0)] }), void 0) }), void 0)) : (jsxRuntime.jsx(ButtonError, __assign({ onClick: function () { - if (isExpertMode) { - handleSwap(); - } - else { - setSwapState({ - tradeToConfirm: trade, - attemptingTxn: false, - swapErrorMessage: undefined, - showConfirm: true, - txHash: undefined, - }); - } - }, id: "swap-button", disabled: !isValid || routeIsSyncing || routeIsLoading || priceImpactTooHigh || !!swapCallbackError, error: isValid && priceImpactSeverity > 2 && !swapCallbackError }, { children: jsxRuntime.jsx(rebass.Text, __assign({ fontSize: 20, fontWeight: 500 }, { children: swapInputError ? (swapInputError) : routeIsSyncing || routeIsLoading ? (jsxRuntime.jsx(macro.Trans, { children: "Swap" }, void 0)) : priceImpactSeverity > 2 ? (jsxRuntime.jsx(macro.Trans, { children: "Swap Anyway" }, void 0)) : priceImpactTooHigh ? (jsxRuntime.jsx(macro.Trans, { children: "Price Impact Too High" }, void 0)) : (jsxRuntime.jsx(macro.Trans, { children: "Swap" }, void 0)) }), void 0) }), void 0)), isExpertMode && swapErrorMessage ? jsxRuntime.jsx(SwapCallbackError, { error: swapErrorMessage }, void 0) : null] }, void 0)] }), void 0)] }), void 0)] }, void 0), jsxRuntime.jsx(AlertWrapper, { children: jsxRuntime.jsx(NetworkAlert, {}, void 0) }, void 0), jsxRuntime.jsx(SwitchLocaleLink, {}, void 0), !swapIsUnsupported ? null : (jsxRuntime.jsx(UnsupportedCurrencyFooter, { show: swapIsUnsupported, currencies: [currencies[Field.INPUT], currencies[Field.OUTPUT]] }, void 0))] }, void 0)); -} -var templateObject_1$2; - -// Redirects to swap but only replace the pathname -function RedirectPathToSwapOnly(_a) { - var location = _a.location; - return jsxRuntime.jsx(reactRouterDom.Redirect, { to: __assign(__assign({}, location), { pathname: '/swap' }) }, void 0); -} -// Redirects from the /swap/:outputCurrency path to the /swap?outputCurrency=:outputCurrency format -function RedirectToSwap(props) { - var search = props.location.search, outputCurrency = props.match.params.outputCurrency; - return (jsxRuntime.jsx(reactRouterDom.Redirect, { to: __assign(__assign({}, props.location), { pathname: '/swap', search: search && search.length > 1 - ? search + "&outputCurrency=" + outputCurrency - : "?outputCurrency=" + outputCurrency }) }, void 0)); -} - -// const Vote = lazy(() => import('./Vote')) -var AppWrapper = styled__default["default"].div(templateObject_1$1 || (templateObject_1$1 = __makeTemplateObject(["\n display: flex;\n flex-flow: column;\n align-items: flex-start;\n"], ["\n display: flex;\n flex-flow: column;\n align-items: flex-start;\n"]))); -var BodyWrapper = styled__default["default"].div(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n display: flex;\n flex-direction: column;\n width: 100%;\n padding: 120px 16px 0px 16px;\n align-items: center;\n flex: 1;\n z-index: 1;\n\n ", ";\n"], ["\n display: flex;\n flex-direction: column;\n width: 100%;\n padding: 120px 16px 0px 16px;\n align-items: center;\n flex: 1;\n z-index: 1;\n\n ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToSmall(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n padding: 4rem 8px 16px 8px;\n "], ["\n padding: 4rem 8px 16px 8px;\n "]))); -}); -var HeaderWrapper = styled__default["default"].div(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n ", "\n width: 100%;\n justify-content: space-between;\n position: fixed;\n top: 0;\n z-index: 2;\n"], ["\n ", "\n width: 100%;\n justify-content: space-between;\n position: fixed;\n top: 0;\n z-index: 2;\n"])), function (_a) { - var theme = _a.theme; - return theme.flexRowNoWrap; -}); -var Marginer = styled__default["default"].div(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n margin-top: 5rem;\n"], ["\n margin-top: 5rem;\n"]))); -function TopLevelModals() { - var open = useModalOpen(ApplicationModal.ADDRESS_CLAIM); - var toggle = useToggleModal(ApplicationModal.ADDRESS_CLAIM); - return jsxRuntime.jsx(AddressClaimModal, { isOpen: open, onDismiss: toggle }, void 0); -} -function App() { - return (jsxRuntime.jsxs(ErrorBoundary, { children: [jsxRuntime.jsx(reactRouterDom.Route, { component: DarkModeQueryParamReader }, void 0), jsxRuntime.jsx(reactRouterDom.Route, { component: ApeModeQueryParamReader }, void 0), jsxRuntime.jsx(Web3ReactManager, { children: jsxRuntime.jsxs(AppWrapper, { children: [jsxRuntime.jsx(HeaderWrapper, { children: jsxRuntime.jsx(Header$2, {}, void 0) }, void 0), jsxRuntime.jsxs(BodyWrapper, { children: [jsxRuntime.jsx(Popups, {}, void 0), jsxRuntime.jsx(Polling, {}, void 0), jsxRuntime.jsx(TopLevelModals, {}, void 0), jsxRuntime.jsx(React.Suspense, __assign({ fallback: jsxRuntime.jsx(Loader, {}, void 0) }, { children: jsxRuntime.jsxs(reactRouterDom.Switch, { children: [jsxRuntime.jsx(reactRouterDom.Route, { exact: true, strict: true, path: "/swap/:outputCurrency", component: RedirectToSwap }, void 0), jsxRuntime.jsx(reactRouterDom.Route, { exact: true, strict: true, path: "/swap", component: Swap }, void 0), jsxRuntime.jsx(reactRouterDom.Route, { component: RedirectPathToSwapOnly }, void 0)] }, void 0) }), void 0), jsxRuntime.jsx(Marginer, {}, void 0)] }, void 0)] }, void 0) }, void 0)] }, void 0)); -} -var templateObject_1$1, templateObject_2, templateObject_3, templateObject_4, templateObject_5; - -// This optional code is used to register a service worker. -// register() is not called by default. -// This lets the app load faster on subsequent visits in production, and gives -// it offline capabilities. However, it also means that developers (and users) -// will only see deployed updates on subsequent visits to a page, after all the -// existing tabs open on the page have been closed, since previously cached -// resources are updated in the background. -// To learn more about the benefits of this model and instructions on how to -// opt-in, read https://cra.link/PWA -var isLocalhost = Boolean(window.location.hostname === 'localhost' || - // [::1] is the IPv6 localhost address. - window.location.hostname === '[::1]' || - // 127.0.0.0/8 are considered localhost for IPv4. - window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)); -function registerValidSW(swUrl, config) { - navigator.serviceWorker - .register(swUrl) - .then(function (registration) { - registration.onupdatefound = function () { - var installingWorker = registration.installing; - if (installingWorker == null) { - return; - } - installingWorker.onstatechange = function () { - if (installingWorker.state === 'installed') { - if (navigator.serviceWorker.controller) { - // At this point, the updated precached content has been fetched, - // but the previous service worker will still serve the older - // content until all client tabs are closed. - console.log('New content is available and will be used when all ' + - 'tabs for this page are closed. See https://cra.link/PWA.'); - // Execute callback - if (config && config.onUpdate) { - config.onUpdate(registration); - } - } - else { - // At this point, everything has been precached. - // It's the perfect time to display a - // "Content is cached for offline use." message. - console.log('Content is cached for offline use.'); - // Execute callback - if (config && config.onSuccess) { - config.onSuccess(registration); - } - } - } - }; - }; - }) - .catch(function (error) { - console.error('Error during service worker registration:', error); - }); -} -function checkValidServiceWorker(swUrl, config) { - // Check if the service worker can be found. If it can't reload the page. - fetch(swUrl, { - headers: { 'Service-Worker': 'script' }, - }) - .then(function (response) { - // Ensure service worker exists, and that we really are getting a JS file. - var contentType = response.headers.get('content-type'); - if (response.status === 404 || (contentType != null && contentType.indexOf('javascript') === -1)) { - // No service worker found. Probably a different app. Reload the page. - navigator.serviceWorker.ready.then(function (registration) { - registration.unregister().then(function () { - window.location.reload(); - }); - }); - } - else { - // Service worker found. Proceed as normal. - registerValidSW(swUrl, config); - } - }) - .catch(function () { - console.log('No internet connection found. App is running in offline mode.'); - }); -} -function register(config) { - if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { - // The URL constructor is available in all browsers that support SW. - var publicUrl = new URL(process.env.PUBLIC_URL, window.location.href); - if (publicUrl.origin !== window.location.origin) { - // Our service worker won't work if PUBLIC_URL is on a different origin - // from what our page is served on. This might happen if a CDN is used to - // serve assets; see https://github.com/facebook/create-react-app/issues/2374 - return; - } - window.addEventListener('load', function () { - var swUrl = process.env.PUBLIC_URL + "/service-worker.js"; - if (isLocalhost) { - // This is running on localhost. Let's check if a service worker still exists or not. - checkValidServiceWorker(swUrl, config); - // Add some additional logging to localhost, pointing developers to the - // service worker/PWA documentation. - navigator.serviceWorker.ready.then(function () { - console.log('This web app is being served cache-first by a service ' + - 'worker. To learn more, visit https://cra.link/PWA'); - }); - } - else { - // Is not localhost. Just register service worker - registerValidSW(swUrl, config); - } - }); - } -} -function unregister() { - if ('serviceWorker' in navigator) { - navigator.serviceWorker.ready - .then(function (registration) { - registration.unregister(); - }) - .catch(function (error) { - console.error(error.message); - }); - } -} - -var serviceWorkerRegistration = /*#__PURE__*/Object.freeze({ - __proto__: null, - register: register, - unregister: unregister -}); - -// SDN OFAC addresses -var BLOCKED_ADDRESSES = [ - '0x7Db418b5D567A4e0E8c59Ad71BE1FcE48f3E6107', - '0x72a5843cc08275C8171E582972Aa4fDa8C397B2A', - '0x7F19720A857F834887FC9A7bC0a0fBe7Fc7f8102', - '0xA7e5d5A720f06526557c513402f2e6B5fA20b008', - '0x1da5821544e25c636c1417Ba96Ade4Cf6D2f9B5A', - '0x9F4cda013E354b8fC285BF4b9A60460cEe7f7Ea9', - '0x19Aa5Fe80D33a56D56c78e82eA5E50E5d80b4Dff', - '0x2f389cE8bD8ff92De3402FFCe4691d17fC4f6535', - '0xe7aa314c77F4233C18C6CC84384A9247c0cf367B', - '0x7F367cC41522cE07553e823bf3be79A889DEbe1B', - '0xd882cFc20F52f2599D84b8e8D58C7FB62cfE344b', - '0x901bb9583b24D97e995513C6778dc6888AB6870e', - '0x8576aCC5C05D6Ce88f4e49bf65BdF0C62F91353C', - '0xC8a65Fadf0e0dDAf421F28FEAb69Bf6E2E589963', - '0x308eD4B7b49797e1A98D3818bFF6fe5385410370', - '0x67d40EE1A85bf4a4Bb7Ffae16De985e8427B', - '0x6f1ca141a28907f78ebaa64fb83a9088b02a83', - '0x6acdfba02d390b97ac2b2d42a63e85293bcc1', - '0x48549a34ae37b12f6a30566245176994e17c6', - '0x5512d943ed1f7c8a43f3435c85f7ab68b30121', - '0xc455f7fd3e0e12afd51fba5c106909934d8a0e', - '0x3cbded43efdaf0fc77b9c55f6fc9988fcc9b757d', - '0x67d40EE1A85bf4a4Bb7Ffae16De985e8427B6b45', - '0x6f1ca141a28907f78ebaa64fb83a9088b02a8352', - '0x6acdfba02d390b97ac2b2d42a63e85293bcc160e', - '0x48549a34ae37b12f6a30566245176994e17c6b4a', - '0x5512d943ed1f7c8a43f3435c85f7ab68b30121b0', - '0xc455f7fd3e0e12afd51fba5c106909934d8a0e4a', -]; -function Blocklist(_a) { - var children = _a.children; - var account = useActiveWeb3React().account; - var blocked = React.useMemo(function () { return Boolean(account && BLOCKED_ADDRESSES.indexOf(account) !== -1); }, [account]); - if (blocked) { - return (jsxRuntime.jsx("div", { children: jsxRuntime.jsx(macro.Trans, { children: "Blocked address" }, void 0) }, void 0)); - } - return jsxRuntime.jsx(jsxRuntime.Fragment, { children: children }, void 0); -} - -var plurals = { - 'af-ZA': plurals$1.af, - 'ar-SA': plurals$1.ar, - 'ca-ES': plurals$1.ca, - 'cs-CZ': plurals$1.cs, - 'da-DK': plurals$1.da, - 'de-DE': plurals$1.de, - 'el-GR': plurals$1.el, - 'en-US': plurals$1.en, - 'es-ES': plurals$1.es, - 'fi-FI': plurals$1.fi, - 'fr-FR': plurals$1.fr, - 'he-IL': plurals$1.he, - 'hu-HU': plurals$1.hu, - 'id-ID': plurals$1.id, - 'it-IT': plurals$1.it, - 'ja-JP': plurals$1.ja, - 'ko-KR': plurals$1.ko, - 'nl-NL': plurals$1.nl, - 'no-NO': plurals$1.no, - 'pl-PL': plurals$1.pl, - 'pt-BR': plurals$1.pt, - 'pt-PT': plurals$1.pt, - 'ro-RO': plurals$1.ro, - 'ru-RU': plurals$1.ru, - 'sr-SP': plurals$1.sr, - 'sv-SE': plurals$1.sv, - 'sw-TZ': plurals$1.sw, - 'tr-TR': plurals$1.tr, - 'uk-UA': plurals$1.uk, - 'vi-VN': plurals$1.vi, - 'zh-CN': plurals$1.zh, - 'zh-TW': plurals$1.zh, - pseudo: plurals$1.en, -}; -function dynamicActivate(locale) { - return __awaiter(this, void 0, void 0, function () { - var catalog, _a; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - core$2.i18n.loadLocaleData(locale, { plurals: function () { return plurals[locale]; } }); - if (!(locale === DEFAULT_LOCALE)) return [3 /*break*/, 1]; - _a = DEFAULT_CATALOG; - return [3 /*break*/, 3]; - case 1: return [4 /*yield*/, (function (t) { return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require(t)); }); })("locales/" + locale)]; - case 2: - _a = _b.sent(); - _b.label = 3; - case 3: - catalog = _a; - core$2.i18n.load(locale, catalog.messages); - core$2.i18n.activate(locale); - return [2 /*return*/]; - } - }); - }); -} -function Provider(_a) { - var locale = _a.locale, _b = _a.forceRenderAfterLocaleChange, forceRenderAfterLocaleChange = _b === void 0 ? true : _b, onActivate = _a.onActivate, children = _a.children; - React.useEffect(function () { - dynamicActivate(locale) - .then(function () { return onActivate === null || onActivate === void 0 ? void 0 : onActivate(locale); }) - .catch(function (error) { - console.error('Failed to activate locale', locale, error); - }); - }, [locale, onActivate]); - return (jsxRuntime.jsx(react$1.I18nProvider, __assign({ forceRenderOnLocaleChange: forceRenderAfterLocaleChange, i18n: core$2.i18n }, { children: children }), void 0)); -} - -dynamicActivate(initialLocale); -function LanguageProvider(_a) { - var children = _a.children; - var locale = useActiveLocale(); - var _b = __read(useUserLocaleManager(), 2), setUserLocale = _b[1]; - var onActivate = React.useCallback(function (locale) { - document.documentElement.setAttribute('lang', locale); - setUserLocale(locale); // stores the selected locale to persist across sessions - }, [setUserLocale]); - return (jsxRuntime.jsx(Provider, __assign({ locale: locale, forceRenderAfterLocaleChange: false, onActivate: onActivate }, { children: children }), void 0)); -} - -var Bundle_OrderBy; -(function (Bundle_OrderBy) { - Bundle_OrderBy["Id"] = "id"; - Bundle_OrderBy["EthPriceUsd"] = "ethPriceUSD"; -})(Bundle_OrderBy || (Bundle_OrderBy = {})); -var Burn_OrderBy; -(function (Burn_OrderBy) { - Burn_OrderBy["Id"] = "id"; - Burn_OrderBy["Transaction"] = "transaction"; - Burn_OrderBy["Pool"] = "pool"; - Burn_OrderBy["Token0"] = "token0"; - Burn_OrderBy["Token1"] = "token1"; - Burn_OrderBy["Timestamp"] = "timestamp"; - Burn_OrderBy["Owner"] = "owner"; - Burn_OrderBy["Origin"] = "origin"; - Burn_OrderBy["Amount"] = "amount"; - Burn_OrderBy["Amount0"] = "amount0"; - Burn_OrderBy["Amount1"] = "amount1"; - Burn_OrderBy["AmountUsd"] = "amountUSD"; - Burn_OrderBy["TickLower"] = "tickLower"; - Burn_OrderBy["TickUpper"] = "tickUpper"; - Burn_OrderBy["LogIndex"] = "logIndex"; -})(Burn_OrderBy || (Burn_OrderBy = {})); -var Collect_OrderBy; -(function (Collect_OrderBy) { - Collect_OrderBy["Id"] = "id"; - Collect_OrderBy["Transaction"] = "transaction"; - Collect_OrderBy["Timestamp"] = "timestamp"; - Collect_OrderBy["Pool"] = "pool"; - Collect_OrderBy["Owner"] = "owner"; - Collect_OrderBy["Amount0"] = "amount0"; - Collect_OrderBy["Amount1"] = "amount1"; - Collect_OrderBy["AmountUsd"] = "amountUSD"; - Collect_OrderBy["TickLower"] = "tickLower"; - Collect_OrderBy["TickUpper"] = "tickUpper"; - Collect_OrderBy["LogIndex"] = "logIndex"; -})(Collect_OrderBy || (Collect_OrderBy = {})); -var Factory_OrderBy; -(function (Factory_OrderBy) { - Factory_OrderBy["Id"] = "id"; - Factory_OrderBy["PoolCount"] = "poolCount"; - Factory_OrderBy["TxCount"] = "txCount"; - Factory_OrderBy["TotalVolumeUsd"] = "totalVolumeUSD"; - Factory_OrderBy["TotalVolumeEth"] = "totalVolumeETH"; - Factory_OrderBy["TotalFeesUsd"] = "totalFeesUSD"; - Factory_OrderBy["TotalFeesEth"] = "totalFeesETH"; - Factory_OrderBy["UntrackedVolumeUsd"] = "untrackedVolumeUSD"; - Factory_OrderBy["TotalValueLockedUsd"] = "totalValueLockedUSD"; - Factory_OrderBy["TotalValueLockedEth"] = "totalValueLockedETH"; - Factory_OrderBy["TotalValueLockedUsdUntracked"] = "totalValueLockedUSDUntracked"; - Factory_OrderBy["TotalValueLockedEthUntracked"] = "totalValueLockedETHUntracked"; - Factory_OrderBy["Owner"] = "owner"; -})(Factory_OrderBy || (Factory_OrderBy = {})); -var Flash_OrderBy; -(function (Flash_OrderBy) { - Flash_OrderBy["Id"] = "id"; - Flash_OrderBy["Transaction"] = "transaction"; - Flash_OrderBy["Timestamp"] = "timestamp"; - Flash_OrderBy["Pool"] = "pool"; - Flash_OrderBy["Sender"] = "sender"; - Flash_OrderBy["Recipient"] = "recipient"; - Flash_OrderBy["Amount0"] = "amount0"; - Flash_OrderBy["Amount1"] = "amount1"; - Flash_OrderBy["AmountUsd"] = "amountUSD"; - Flash_OrderBy["Amount0Paid"] = "amount0Paid"; - Flash_OrderBy["Amount1Paid"] = "amount1Paid"; - Flash_OrderBy["LogIndex"] = "logIndex"; -})(Flash_OrderBy || (Flash_OrderBy = {})); -var Mint_OrderBy; -(function (Mint_OrderBy) { - Mint_OrderBy["Id"] = "id"; - Mint_OrderBy["Transaction"] = "transaction"; - Mint_OrderBy["Timestamp"] = "timestamp"; - Mint_OrderBy["Pool"] = "pool"; - Mint_OrderBy["Token0"] = "token0"; - Mint_OrderBy["Token1"] = "token1"; - Mint_OrderBy["Owner"] = "owner"; - Mint_OrderBy["Sender"] = "sender"; - Mint_OrderBy["Origin"] = "origin"; - Mint_OrderBy["Amount"] = "amount"; - Mint_OrderBy["Amount0"] = "amount0"; - Mint_OrderBy["Amount1"] = "amount1"; - Mint_OrderBy["AmountUsd"] = "amountUSD"; - Mint_OrderBy["TickLower"] = "tickLower"; - Mint_OrderBy["TickUpper"] = "tickUpper"; - Mint_OrderBy["LogIndex"] = "logIndex"; -})(Mint_OrderBy || (Mint_OrderBy = {})); -var OrderDirection; -(function (OrderDirection) { - OrderDirection["Asc"] = "asc"; - OrderDirection["Desc"] = "desc"; -})(OrderDirection || (OrderDirection = {})); -var PoolDayData_OrderBy; -(function (PoolDayData_OrderBy) { - PoolDayData_OrderBy["Id"] = "id"; - PoolDayData_OrderBy["Date"] = "date"; - PoolDayData_OrderBy["Pool"] = "pool"; - PoolDayData_OrderBy["Liquidity"] = "liquidity"; - PoolDayData_OrderBy["SqrtPrice"] = "sqrtPrice"; - PoolDayData_OrderBy["Token0Price"] = "token0Price"; - PoolDayData_OrderBy["Token1Price"] = "token1Price"; - PoolDayData_OrderBy["Tick"] = "tick"; - PoolDayData_OrderBy["FeeGrowthGlobal0X128"] = "feeGrowthGlobal0X128"; - PoolDayData_OrderBy["FeeGrowthGlobal1X128"] = "feeGrowthGlobal1X128"; - PoolDayData_OrderBy["TvlUsd"] = "tvlUSD"; - PoolDayData_OrderBy["VolumeToken0"] = "volumeToken0"; - PoolDayData_OrderBy["VolumeToken1"] = "volumeToken1"; - PoolDayData_OrderBy["VolumeUsd"] = "volumeUSD"; - PoolDayData_OrderBy["FeesUsd"] = "feesUSD"; - PoolDayData_OrderBy["TxCount"] = "txCount"; - PoolDayData_OrderBy["Open"] = "open"; - PoolDayData_OrderBy["High"] = "high"; - PoolDayData_OrderBy["Low"] = "low"; - PoolDayData_OrderBy["Close"] = "close"; -})(PoolDayData_OrderBy || (PoolDayData_OrderBy = {})); -var PoolHourData_OrderBy; -(function (PoolHourData_OrderBy) { - PoolHourData_OrderBy["Id"] = "id"; - PoolHourData_OrderBy["PeriodStartUnix"] = "periodStartUnix"; - PoolHourData_OrderBy["Pool"] = "pool"; - PoolHourData_OrderBy["Liquidity"] = "liquidity"; - PoolHourData_OrderBy["SqrtPrice"] = "sqrtPrice"; - PoolHourData_OrderBy["Token0Price"] = "token0Price"; - PoolHourData_OrderBy["Token1Price"] = "token1Price"; - PoolHourData_OrderBy["Tick"] = "tick"; - PoolHourData_OrderBy["FeeGrowthGlobal0X128"] = "feeGrowthGlobal0X128"; - PoolHourData_OrderBy["FeeGrowthGlobal1X128"] = "feeGrowthGlobal1X128"; - PoolHourData_OrderBy["TvlUsd"] = "tvlUSD"; - PoolHourData_OrderBy["VolumeToken0"] = "volumeToken0"; - PoolHourData_OrderBy["VolumeToken1"] = "volumeToken1"; - PoolHourData_OrderBy["VolumeUsd"] = "volumeUSD"; - PoolHourData_OrderBy["FeesUsd"] = "feesUSD"; - PoolHourData_OrderBy["TxCount"] = "txCount"; - PoolHourData_OrderBy["Open"] = "open"; - PoolHourData_OrderBy["High"] = "high"; - PoolHourData_OrderBy["Low"] = "low"; - PoolHourData_OrderBy["Close"] = "close"; -})(PoolHourData_OrderBy || (PoolHourData_OrderBy = {})); -var Pool_OrderBy; -(function (Pool_OrderBy) { - Pool_OrderBy["Id"] = "id"; - Pool_OrderBy["CreatedAtTimestamp"] = "createdAtTimestamp"; - Pool_OrderBy["CreatedAtBlockNumber"] = "createdAtBlockNumber"; - Pool_OrderBy["Token0"] = "token0"; - Pool_OrderBy["Token1"] = "token1"; - Pool_OrderBy["FeeTier"] = "feeTier"; - Pool_OrderBy["Liquidity"] = "liquidity"; - Pool_OrderBy["SqrtPrice"] = "sqrtPrice"; - Pool_OrderBy["FeeGrowthGlobal0X128"] = "feeGrowthGlobal0X128"; - Pool_OrderBy["FeeGrowthGlobal1X128"] = "feeGrowthGlobal1X128"; - Pool_OrderBy["Token0Price"] = "token0Price"; - Pool_OrderBy["Token1Price"] = "token1Price"; - Pool_OrderBy["Tick"] = "tick"; - Pool_OrderBy["ObservationIndex"] = "observationIndex"; - Pool_OrderBy["VolumeToken0"] = "volumeToken0"; - Pool_OrderBy["VolumeToken1"] = "volumeToken1"; - Pool_OrderBy["VolumeUsd"] = "volumeUSD"; - Pool_OrderBy["UntrackedVolumeUsd"] = "untrackedVolumeUSD"; - Pool_OrderBy["FeesUsd"] = "feesUSD"; - Pool_OrderBy["TxCount"] = "txCount"; - Pool_OrderBy["CollectedFeesToken0"] = "collectedFeesToken0"; - Pool_OrderBy["CollectedFeesToken1"] = "collectedFeesToken1"; - Pool_OrderBy["CollectedFeesUsd"] = "collectedFeesUSD"; - Pool_OrderBy["TotalValueLockedToken0"] = "totalValueLockedToken0"; - Pool_OrderBy["TotalValueLockedToken1"] = "totalValueLockedToken1"; - Pool_OrderBy["TotalValueLockedEth"] = "totalValueLockedETH"; - Pool_OrderBy["TotalValueLockedUsd"] = "totalValueLockedUSD"; - Pool_OrderBy["TotalValueLockedUsdUntracked"] = "totalValueLockedUSDUntracked"; - Pool_OrderBy["LiquidityProviderCount"] = "liquidityProviderCount"; - Pool_OrderBy["PoolHourData"] = "poolHourData"; - Pool_OrderBy["PoolDayData"] = "poolDayData"; - Pool_OrderBy["Mints"] = "mints"; - Pool_OrderBy["Burns"] = "burns"; - Pool_OrderBy["Swaps"] = "swaps"; - Pool_OrderBy["Collects"] = "collects"; - Pool_OrderBy["Ticks"] = "ticks"; -})(Pool_OrderBy || (Pool_OrderBy = {})); -var PositionSnapshot_OrderBy; -(function (PositionSnapshot_OrderBy) { - PositionSnapshot_OrderBy["Id"] = "id"; - PositionSnapshot_OrderBy["Owner"] = "owner"; - PositionSnapshot_OrderBy["Pool"] = "pool"; - PositionSnapshot_OrderBy["Position"] = "position"; - PositionSnapshot_OrderBy["BlockNumber"] = "blockNumber"; - PositionSnapshot_OrderBy["Timestamp"] = "timestamp"; - PositionSnapshot_OrderBy["Liquidity"] = "liquidity"; - PositionSnapshot_OrderBy["DepositedToken0"] = "depositedToken0"; - PositionSnapshot_OrderBy["DepositedToken1"] = "depositedToken1"; - PositionSnapshot_OrderBy["WithdrawnToken0"] = "withdrawnToken0"; - PositionSnapshot_OrderBy["WithdrawnToken1"] = "withdrawnToken1"; - PositionSnapshot_OrderBy["CollectedFeesToken0"] = "collectedFeesToken0"; - PositionSnapshot_OrderBy["CollectedFeesToken1"] = "collectedFeesToken1"; - PositionSnapshot_OrderBy["Transaction"] = "transaction"; - PositionSnapshot_OrderBy["FeeGrowthInside0LastX128"] = "feeGrowthInside0LastX128"; - PositionSnapshot_OrderBy["FeeGrowthInside1LastX128"] = "feeGrowthInside1LastX128"; -})(PositionSnapshot_OrderBy || (PositionSnapshot_OrderBy = {})); -var Position_OrderBy; -(function (Position_OrderBy) { - Position_OrderBy["Id"] = "id"; - Position_OrderBy["Owner"] = "owner"; - Position_OrderBy["Pool"] = "pool"; - Position_OrderBy["Token0"] = "token0"; - Position_OrderBy["Token1"] = "token1"; - Position_OrderBy["TickLower"] = "tickLower"; - Position_OrderBy["TickUpper"] = "tickUpper"; - Position_OrderBy["Liquidity"] = "liquidity"; - Position_OrderBy["DepositedToken0"] = "depositedToken0"; - Position_OrderBy["DepositedToken1"] = "depositedToken1"; - Position_OrderBy["WithdrawnToken0"] = "withdrawnToken0"; - Position_OrderBy["WithdrawnToken1"] = "withdrawnToken1"; - Position_OrderBy["CollectedFeesToken0"] = "collectedFeesToken0"; - Position_OrderBy["CollectedFeesToken1"] = "collectedFeesToken1"; - Position_OrderBy["Transaction"] = "transaction"; - Position_OrderBy["FeeGrowthInside0LastX128"] = "feeGrowthInside0LastX128"; - Position_OrderBy["FeeGrowthInside1LastX128"] = "feeGrowthInside1LastX128"; -})(Position_OrderBy || (Position_OrderBy = {})); -var Swap_OrderBy; -(function (Swap_OrderBy) { - Swap_OrderBy["Id"] = "id"; - Swap_OrderBy["Transaction"] = "transaction"; - Swap_OrderBy["Timestamp"] = "timestamp"; - Swap_OrderBy["Pool"] = "pool"; - Swap_OrderBy["Token0"] = "token0"; - Swap_OrderBy["Token1"] = "token1"; - Swap_OrderBy["Sender"] = "sender"; - Swap_OrderBy["Recipient"] = "recipient"; - Swap_OrderBy["Origin"] = "origin"; - Swap_OrderBy["Amount0"] = "amount0"; - Swap_OrderBy["Amount1"] = "amount1"; - Swap_OrderBy["AmountUsd"] = "amountUSD"; - Swap_OrderBy["SqrtPriceX96"] = "sqrtPriceX96"; - Swap_OrderBy["Tick"] = "tick"; - Swap_OrderBy["LogIndex"] = "logIndex"; -})(Swap_OrderBy || (Swap_OrderBy = {})); -var TickDayData_OrderBy; -(function (TickDayData_OrderBy) { - TickDayData_OrderBy["Id"] = "id"; - TickDayData_OrderBy["Date"] = "date"; - TickDayData_OrderBy["Pool"] = "pool"; - TickDayData_OrderBy["Tick"] = "tick"; - TickDayData_OrderBy["LiquidityGross"] = "liquidityGross"; - TickDayData_OrderBy["LiquidityNet"] = "liquidityNet"; - TickDayData_OrderBy["VolumeToken0"] = "volumeToken0"; - TickDayData_OrderBy["VolumeToken1"] = "volumeToken1"; - TickDayData_OrderBy["VolumeUsd"] = "volumeUSD"; - TickDayData_OrderBy["FeesUsd"] = "feesUSD"; - TickDayData_OrderBy["FeeGrowthOutside0X128"] = "feeGrowthOutside0X128"; - TickDayData_OrderBy["FeeGrowthOutside1X128"] = "feeGrowthOutside1X128"; -})(TickDayData_OrderBy || (TickDayData_OrderBy = {})); -var TickHourData_OrderBy; -(function (TickHourData_OrderBy) { - TickHourData_OrderBy["Id"] = "id"; - TickHourData_OrderBy["PeriodStartUnix"] = "periodStartUnix"; - TickHourData_OrderBy["Pool"] = "pool"; - TickHourData_OrderBy["Tick"] = "tick"; - TickHourData_OrderBy["LiquidityGross"] = "liquidityGross"; - TickHourData_OrderBy["LiquidityNet"] = "liquidityNet"; - TickHourData_OrderBy["VolumeToken0"] = "volumeToken0"; - TickHourData_OrderBy["VolumeToken1"] = "volumeToken1"; - TickHourData_OrderBy["VolumeUsd"] = "volumeUSD"; - TickHourData_OrderBy["FeesUsd"] = "feesUSD"; -})(TickHourData_OrderBy || (TickHourData_OrderBy = {})); -var Tick_OrderBy; -(function (Tick_OrderBy) { - Tick_OrderBy["Id"] = "id"; - Tick_OrderBy["PoolAddress"] = "poolAddress"; - Tick_OrderBy["TickIdx"] = "tickIdx"; - Tick_OrderBy["Pool"] = "pool"; - Tick_OrderBy["LiquidityGross"] = "liquidityGross"; - Tick_OrderBy["LiquidityNet"] = "liquidityNet"; - Tick_OrderBy["Price0"] = "price0"; - Tick_OrderBy["Price1"] = "price1"; - Tick_OrderBy["VolumeToken0"] = "volumeToken0"; - Tick_OrderBy["VolumeToken1"] = "volumeToken1"; - Tick_OrderBy["VolumeUsd"] = "volumeUSD"; - Tick_OrderBy["UntrackedVolumeUsd"] = "untrackedVolumeUSD"; - Tick_OrderBy["FeesUsd"] = "feesUSD"; - Tick_OrderBy["CollectedFeesToken0"] = "collectedFeesToken0"; - Tick_OrderBy["CollectedFeesToken1"] = "collectedFeesToken1"; - Tick_OrderBy["CollectedFeesUsd"] = "collectedFeesUSD"; - Tick_OrderBy["CreatedAtTimestamp"] = "createdAtTimestamp"; - Tick_OrderBy["CreatedAtBlockNumber"] = "createdAtBlockNumber"; - Tick_OrderBy["LiquidityProviderCount"] = "liquidityProviderCount"; - Tick_OrderBy["FeeGrowthOutside0X128"] = "feeGrowthOutside0X128"; - Tick_OrderBy["FeeGrowthOutside1X128"] = "feeGrowthOutside1X128"; -})(Tick_OrderBy || (Tick_OrderBy = {})); -var TokenDayData_OrderBy; -(function (TokenDayData_OrderBy) { - TokenDayData_OrderBy["Id"] = "id"; - TokenDayData_OrderBy["Date"] = "date"; - TokenDayData_OrderBy["Token"] = "token"; - TokenDayData_OrderBy["Volume"] = "volume"; - TokenDayData_OrderBy["VolumeUsd"] = "volumeUSD"; - TokenDayData_OrderBy["UntrackedVolumeUsd"] = "untrackedVolumeUSD"; - TokenDayData_OrderBy["TotalValueLocked"] = "totalValueLocked"; - TokenDayData_OrderBy["TotalValueLockedUsd"] = "totalValueLockedUSD"; - TokenDayData_OrderBy["PriceUsd"] = "priceUSD"; - TokenDayData_OrderBy["FeesUsd"] = "feesUSD"; - TokenDayData_OrderBy["Open"] = "open"; - TokenDayData_OrderBy["High"] = "high"; - TokenDayData_OrderBy["Low"] = "low"; - TokenDayData_OrderBy["Close"] = "close"; -})(TokenDayData_OrderBy || (TokenDayData_OrderBy = {})); -var TokenHourData_OrderBy; -(function (TokenHourData_OrderBy) { - TokenHourData_OrderBy["Id"] = "id"; - TokenHourData_OrderBy["PeriodStartUnix"] = "periodStartUnix"; - TokenHourData_OrderBy["Token"] = "token"; - TokenHourData_OrderBy["Volume"] = "volume"; - TokenHourData_OrderBy["VolumeUsd"] = "volumeUSD"; - TokenHourData_OrderBy["UntrackedVolumeUsd"] = "untrackedVolumeUSD"; - TokenHourData_OrderBy["TotalValueLocked"] = "totalValueLocked"; - TokenHourData_OrderBy["TotalValueLockedUsd"] = "totalValueLockedUSD"; - TokenHourData_OrderBy["PriceUsd"] = "priceUSD"; - TokenHourData_OrderBy["FeesUsd"] = "feesUSD"; - TokenHourData_OrderBy["Open"] = "open"; - TokenHourData_OrderBy["High"] = "high"; - TokenHourData_OrderBy["Low"] = "low"; - TokenHourData_OrderBy["Close"] = "close"; -})(TokenHourData_OrderBy || (TokenHourData_OrderBy = {})); -var Token_OrderBy; -(function (Token_OrderBy) { - Token_OrderBy["Id"] = "id"; - Token_OrderBy["Symbol"] = "symbol"; - Token_OrderBy["Name"] = "name"; - Token_OrderBy["Decimals"] = "decimals"; - Token_OrderBy["TotalSupply"] = "totalSupply"; - Token_OrderBy["Volume"] = "volume"; - Token_OrderBy["VolumeUsd"] = "volumeUSD"; - Token_OrderBy["UntrackedVolumeUsd"] = "untrackedVolumeUSD"; - Token_OrderBy["FeesUsd"] = "feesUSD"; - Token_OrderBy["TxCount"] = "txCount"; - Token_OrderBy["PoolCount"] = "poolCount"; - Token_OrderBy["TotalValueLocked"] = "totalValueLocked"; - Token_OrderBy["TotalValueLockedUsd"] = "totalValueLockedUSD"; - Token_OrderBy["TotalValueLockedUsdUntracked"] = "totalValueLockedUSDUntracked"; - Token_OrderBy["DerivedEth"] = "derivedETH"; - Token_OrderBy["WhitelistPools"] = "whitelistPools"; - Token_OrderBy["TokenDayData"] = "tokenDayData"; -})(Token_OrderBy || (Token_OrderBy = {})); -var Transaction_OrderBy; -(function (Transaction_OrderBy) { - Transaction_OrderBy["Id"] = "id"; - Transaction_OrderBy["BlockNumber"] = "blockNumber"; - Transaction_OrderBy["Timestamp"] = "timestamp"; - Transaction_OrderBy["GasUsed"] = "gasUsed"; - Transaction_OrderBy["GasPrice"] = "gasPrice"; - Transaction_OrderBy["Mints"] = "mints"; - Transaction_OrderBy["Burns"] = "burns"; - Transaction_OrderBy["Swaps"] = "swaps"; - Transaction_OrderBy["Flashed"] = "flashed"; - Transaction_OrderBy["Collects"] = "collects"; -})(Transaction_OrderBy || (Transaction_OrderBy = {})); -var UniswapDayData_OrderBy; -(function (UniswapDayData_OrderBy) { - UniswapDayData_OrderBy["Id"] = "id"; - UniswapDayData_OrderBy["Date"] = "date"; - UniswapDayData_OrderBy["VolumeEth"] = "volumeETH"; - UniswapDayData_OrderBy["VolumeUsd"] = "volumeUSD"; - UniswapDayData_OrderBy["VolumeUsdUntracked"] = "volumeUSDUntracked"; - UniswapDayData_OrderBy["FeesUsd"] = "feesUSD"; - UniswapDayData_OrderBy["TxCount"] = "txCount"; - UniswapDayData_OrderBy["TvlUsd"] = "tvlUSD"; -})(UniswapDayData_OrderBy || (UniswapDayData_OrderBy = {})); -var _SubgraphErrorPolicy_; -(function (_SubgraphErrorPolicy_) { - /** Data will be returned even if the subgraph has indexing errors */ - _SubgraphErrorPolicy_["Allow"] = "allow"; - /** If the subgraph has indexing errors, data will be omitted. The default. */ - _SubgraphErrorPolicy_["Deny"] = "deny"; -})(_SubgraphErrorPolicy_ || (_SubgraphErrorPolicy_ = {})); -var AllV3TicksDocument = "\n query allV3Ticks($poolAddress: String!, $skip: Int!) {\n ticks(\n first: 1000\n skip: $skip\n where: {poolAddress: $poolAddress}\n orderBy: tickIdx\n ) {\n tick: tickIdx\n liquidityNet\n price0\n price1\n }\n}\n "; -var FeeTierDistributionDocument = "\n query feeTierDistribution($token0: String!, $token1: String!) {\n _meta {\n block {\n number\n }\n }\n asToken0: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: {token0: $token0, token1: $token1}\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n asToken1: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: {token0: $token1, token1: $token0}\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n}\n "; -var injectedRtkApi = api$1.injectEndpoints({ - endpoints: function (build) { return ({ - allV3Ticks: build.query({ - query: function (variables) { return ({ document: AllV3TicksDocument, variables: variables }); } - }), - feeTierDistribution: build.query({ - query: function (variables) { return ({ document: FeeTierDistributionDocument, variables: variables }); } - }), - }); }, -}); -injectedRtkApi.useAllV3TicksQuery; injectedRtkApi.useLazyAllV3TicksQuery; injectedRtkApi.useFeeTierDistributionQuery; injectedRtkApi.useLazyFeeTierDistributionQuery; - -// tag that should be applied to queries that need to be invalidated when the chain changes -var CHAIN_TAG = 'Chain'; -// enhanced api to provide/invalidate tags -var api = injectedRtkApi.enhanceEndpoints({ - addTagTypes: [CHAIN_TAG], - endpoints: { - allV3Ticks: { - providesTags: [CHAIN_TAG], - }, - feeTierDistribution: { - providesTags: [CHAIN_TAG], - }, - }, -}); -api.useAllV3TicksQuery; api.useFeeTierDistributionQuery; - -/** - * Returns the input chain ID if chain is supported. If not, return undefined - * @param chainId a chain ID, which will be returned if it is a supported chain ID - */ -function supportedChainId(chainId) { - if (chainId in SupportedChainId) { - return chainId; - } - return undefined; -} - -function useQueryCacheInvalidator() { - var dispatch = useAppDispatch(); - // subscribe to `chainId` changes in the redux store rather than Web3 - // this will ensure that when `invalidateTags` is called, the latest - // `chainId` is available in redux to build the subgraph url - var chainId = useAppSelector(function (state) { return state.application.chainId; }); - React.useEffect(function () { - dispatch(api.util.invalidateTags([CHAIN_TAG])); - }, [chainId, dispatch]); -} -function Updater$5() { - var _a = useActiveWeb3React(), chainId = _a.chainId, library = _a.library; - var dispatch = useAppDispatch(); - var windowVisible = useIsWindowVisible(); - var _b = __read(React.useState(chainId), 2), activeChainId = _b[0], setActiveChainId = _b[1]; - useQueryCacheInvalidator(); - React.useEffect(function () { - if (library && chainId && windowVisible) { - setActiveChainId(chainId); - } - }, [dispatch, chainId, library, windowVisible]); - var debouncedChainId = useDebounce(activeChainId, 100); - React.useEffect(function () { - var _a; - var chainId = debouncedChainId ? (_a = supportedChainId(debouncedChainId)) !== null && _a !== void 0 ? _a : null : null; - dispatch(updateChainId({ chainId: chainId })); - }, [dispatch, debouncedChainId]); - return null; -} - -function Updater$4() { - var _a = useActiveWeb3React(), chainId = _a.chainId, library = _a.library; - var dispatch = useAppDispatch(); - var isWindowVisible = useIsWindowVisible(); - // get all loaded lists, and the active urls - var lists = useAllLists(); - var activeListUrls = useActiveListUrls(); - var fetchList = useFetchListCallback(); - var fetchAllListsCallback = React.useCallback(function () { - if (!isWindowVisible) - return; - Object.keys(lists).forEach(function (url) { - return fetchList(url).catch(function (error) { return console.debug('interval list fetching error', error); }); - }); - }, [fetchList, isWindowVisible, lists]); - React.useEffect(function () { - if (chainId && [SupportedChainId.OPTIMISM, SupportedChainId.OPTIMISTIC_KOVAN].includes(chainId)) { - dispatch(enableList(OPTIMISM_LIST)); - } - if (chainId && [SupportedChainId.ARBITRUM_ONE, SupportedChainId.ARBITRUM_RINKEBY].includes(chainId)) { - dispatch(enableList(ARBITRUM_LIST)); - } - }, [chainId, dispatch]); - // fetch all lists every 10 minutes, but only after we initialize library - useInterval(fetchAllListsCallback, library ? 1000 * 60 * 10 : null); - // whenever a list is not loaded and not loading, try again to load it - React.useEffect(function () { - Object.keys(lists).forEach(function (listUrl) { - var list = lists[listUrl]; - if (!list.current && !list.loadingRequestId && !list.error) { - fetchList(listUrl).catch(function (error) { return console.debug('list added fetching error', error); }); - } - }); - }, [dispatch, fetchList, library, lists]); - // if any lists from unsupported lists are loaded, check them too (in case new updates since last visit) - React.useEffect(function () { - UNSUPPORTED_LIST_URLS.forEach(function (listUrl) { - var list = lists[listUrl]; - if (!list || (!list.current && !list.loadingRequestId && !list.error)) { - fetchList(listUrl).catch(function (error) { return console.debug('list added fetching error', error); }); - } - }); - }, [dispatch, fetchList, library, lists]); - // automatically update lists if versions are minor/patch - React.useEffect(function () { - Object.keys(lists).forEach(function (listUrl) { - var list = lists[listUrl]; - if (list.current && list.pendingUpdate) { - var bump = tokenLists.getVersionUpgrade(list.current.version, list.pendingUpdate.version); - switch (bump) { - case tokenLists.VersionUpgrade.NONE: - throw new Error('unexpected no version bump'); - case tokenLists.VersionUpgrade.PATCH: - case tokenLists.VersionUpgrade.MINOR: - var min = tokenLists.minVersionBump(list.current.tokens, list.pendingUpdate.tokens); - // automatically update minor/patch as long as bump matches the min update - if (bump >= min) { - dispatch(acceptListUpdate(listUrl)); - } - else { - console.error("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"); - } - break; - // update any active or inactive lists - case tokenLists.VersionUpgrade.MAJOR: - dispatch(acceptListUpdate(listUrl)); - } - } - }); - }, [dispatch, lists, activeListUrls]); - return null; -} - -function Updater$3() { - var dispatch = useAppDispatch(); - var state = useAppSelector(function (state) { return state.logs; }); - var _a = useActiveWeb3React(), chainId = _a.chainId, library = _a.library; - var blockNumber = useBlockNumber(); - var filtersNeedFetch = React.useMemo(function () { - if (!chainId || typeof blockNumber !== 'number') - return []; - var active = state[chainId]; - if (!active) - return []; - return Object.keys(active) - .filter(function (key) { - var _a = active[key], fetchingBlockNumber = _a.fetchingBlockNumber, results = _a.results, listeners = _a.listeners; - if (listeners === 0) - return false; - if (typeof fetchingBlockNumber === 'number' && fetchingBlockNumber >= blockNumber) - return false; - if (results && typeof results.blockNumber === 'number' && results.blockNumber >= blockNumber) - return false; - return true; - }) - .map(function (key) { return keyToFilter(key); }); - }, [blockNumber, chainId, state]); - React.useEffect(function () { - if (!library || !chainId || typeof blockNumber !== 'number' || filtersNeedFetch.length === 0) - return; - dispatch(fetchingLogs({ chainId: chainId, filters: filtersNeedFetch, blockNumber: blockNumber })); - filtersNeedFetch.forEach(function (filter) { - library - .getLogs(__assign(__assign({}, filter), { fromBlock: 0, toBlock: blockNumber })) - .then(function (logs) { - dispatch(fetchedLogs({ - chainId: chainId, - filter: filter, - results: { logs: logs, blockNumber: blockNumber }, - })); - }) - .catch(function (error) { - console.error('Failed to get logs', filter, error); - dispatch(fetchedLogsError({ - chainId: chainId, - filter: filter, - blockNumber: blockNumber, - })); - }); - }); - }, [blockNumber, chainId, dispatch, filtersNeedFetch, library]); - return null; -} - -function wait(ms) { - return new Promise(function (resolve) { return setTimeout(resolve, ms); }); -} -function waitRandom(min, max) { - return wait(min + Math.round(Math.random() * Math.max(0, max - min))); -} -/** - * This error is thrown if the function is cancelled before completing - */ -var CancelledError = /** @class */ (function (_super) { - __extends(CancelledError, _super); - function CancelledError() { - var _this = _super.call(this, 'Cancelled') || this; - _this.isCancelledError = true; - return _this; - } - return CancelledError; -}(Error)); -/** - * Throw this error if the function should retry - */ -var RetryableError = /** @class */ (function (_super) { - __extends(RetryableError, _super); - function RetryableError() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.isRetryableError = true; - return _this; - } - return RetryableError; -}(Error)); -/** - * Retries the function that returns the promise until the promise successfully resolves up to n retries - * @param fn function to retry - * @param n how many times to retry - * @param minWait min wait between retries in ms - * @param maxWait max wait between retries in ms - */ -function retry(fn, _a) { - var _this = this; - var n = _a.n, minWait = _a.minWait, maxWait = _a.maxWait; - var completed = false; - var rejectCancelled; - var promise = new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () { - var result, error_1; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - rejectCancelled = reject; - _a.label = 1; - case 1: - result = void 0; - _a.label = 2; - case 2: - _a.trys.push([2, 4, , 5]); - return [4 /*yield*/, fn()]; - case 3: - result = _a.sent(); - if (!completed) { - resolve(result); - completed = true; - } - return [3 /*break*/, 7]; - case 4: - error_1 = _a.sent(); - if (completed) { - return [3 /*break*/, 7]; - } - if (n <= 0 || !error_1.isRetryableError) { - reject(error_1); - completed = true; - return [3 /*break*/, 7]; - } - n--; - return [3 /*break*/, 5]; - case 5: return [4 /*yield*/, waitRandom(minWait, maxWait)]; - case 6: - _a.sent(); - return [3 /*break*/, 1]; - case 7: return [2 /*return*/]; - } - }); - }); }); - return { - promise: promise, - cancel: function () { - if (completed) - return; - completed = true; - rejectCancelled(new CancelledError()); - }, - }; -} - -var _a; -function shouldCheck(lastBlockNumber, tx) { - if (tx.receipt) - return false; - if (!tx.lastCheckedBlockNumber) - return true; - var blocksSinceCheck = lastBlockNumber - tx.lastCheckedBlockNumber; - if (blocksSinceCheck < 1) - return false; - var minutesPending = (new Date().getTime() - tx.addedTime) / ms__default["default"](templateObject_1 || (templateObject_1 = __makeTemplateObject(["1m"], ["1m"]))); - if (minutesPending > 60) { - // every 10 blocks if pending longer than an hour - return blocksSinceCheck > 9; - } - else if (minutesPending > 5) { - // every 3 blocks if pending longer than 5 minutes - return blocksSinceCheck > 2; - } - else { - // otherwise every block - return true; - } -} -var RETRY_OPTIONS_BY_CHAIN_ID = (_a = {}, - _a[SupportedChainId.ARBITRUM_ONE] = { n: 10, minWait: 250, maxWait: 1000 }, - _a[SupportedChainId.ARBITRUM_RINKEBY] = { n: 10, minWait: 250, maxWait: 1000 }, - _a[SupportedChainId.OPTIMISTIC_KOVAN] = { n: 10, minWait: 250, maxWait: 1000 }, - _a[SupportedChainId.OPTIMISM] = { n: 10, minWait: 250, maxWait: 1000 }, - _a); -var DEFAULT_RETRY_OPTIONS = { n: 1, minWait: 0, maxWait: 0 }; -function Updater$2(_a) { - var pendingTransactions = _a.pendingTransactions, onCheck = _a.onCheck, onReceipt = _a.onReceipt; - var _b = useActiveWeb3React(), chainId = _b.chainId, library = _b.library; - var lastBlockNumber = useBlockNumber(); - var fastForwardBlockNumber = useFastForwardBlockNumber(); - var getReceipt = React.useCallback(function (hash) { - var _a; - if (!library || !chainId) - throw new Error('No library or chainId'); - var retryOptions = (_a = RETRY_OPTIONS_BY_CHAIN_ID[chainId]) !== null && _a !== void 0 ? _a : DEFAULT_RETRY_OPTIONS; - return retry(function () { - return library.getTransactionReceipt(hash).then(function (receipt) { - if (receipt === null) { - console.debug("Retrying tranasaction receipt for " + hash); - throw new RetryableError(); - } - return receipt; - }); - }, retryOptions); - }, [chainId, library]); - React.useEffect(function () { - if (!chainId || !library || !lastBlockNumber) - return; - var cancels = Object.keys(pendingTransactions) - .filter(function (hash) { return shouldCheck(lastBlockNumber, pendingTransactions[hash]); }) - .map(function (hash) { - var _a = getReceipt(hash), promise = _a.promise, cancel = _a.cancel; - promise - .then(function (receipt) { - if (receipt) { - onReceipt({ chainId: chainId, hash: hash, receipt: receipt }); - } - else { - onCheck({ chainId: chainId, hash: hash, blockNumber: lastBlockNumber }); - } - }) - .catch(function (error) { - if (!error.isCancelledError) { - console.warn("Failed to get transaction receipt for " + hash, error); - } - }); - return cancel; - }); - return function () { - cancels.forEach(function (cancel) { return cancel(); }); - }; - }, [chainId, library, lastBlockNumber, getReceipt, fastForwardBlockNumber, onReceipt, onCheck, pendingTransactions]); - return null; -} -var templateObject_1; - -function Updater$1() { - var chainId = useActiveWeb3React().chainId; - var addPopup = useAddPopup(); - // speed up popup dismisall time if on L2 - var isL2 = Boolean(chainId && L2_CHAIN_IDS.includes(chainId)); - var dispatch = useAppDispatch(); - var onCheck = React.useCallback(function (_a) { - var chainId = _a.chainId, hash = _a.hash, blockNumber = _a.blockNumber; - return dispatch(checkedTransaction({ chainId: chainId, hash: hash, blockNumber: blockNumber })); - }, [dispatch]); - var onReceipt = React.useCallback(function (_a) { - var chainId = _a.chainId, hash = _a.hash, receipt = _a.receipt; - dispatch(finalizeTransaction({ - chainId: chainId, - hash: hash, - receipt: { - blockHash: receipt.blockHash, - blockNumber: receipt.blockNumber, - contractAddress: receipt.contractAddress, - from: receipt.from, - status: receipt.status, - to: receipt.to, - transactionHash: receipt.transactionHash, - transactionIndex: receipt.transactionIndex, - }, - })); - addPopup({ - txn: { hash: hash }, - }, hash, isL2 ? L2_TXN_DISMISS_MS : DEFAULT_TXN_DISMISS_MS); - }, [addPopup, dispatch, isL2]); - var state = useAppSelector(function (state) { return state.transactions; }); - var pendingTransactions = React.useMemo(function () { var _a; return (chainId ? (_a = state[chainId]) !== null && _a !== void 0 ? _a : {} : {}); }, [chainId, state]); - return jsxRuntime.jsx(Updater$2, { pendingTransactions: pendingTransactions, onCheck: onCheck, onReceipt: onReceipt }, void 0); -} - -function Updater() { - var dispatch = useAppDispatch(); - // keep dark mode in sync with the system - React.useEffect(function () { - var darkHandler = function (match) { - dispatch(updateMatchesDarkMode({ matchesDarkMode: match.matches })); - }; - var match = window === null || window === void 0 ? void 0 : window.matchMedia('(prefers-color-scheme: dark)'); - dispatch(updateMatchesDarkMode({ matchesDarkMode: match.matches })); - if (match === null || match === void 0 ? void 0 : match.addListener) { - match === null || match === void 0 ? void 0 : match.addListener(darkHandler); - } - else if (match === null || match === void 0 ? void 0 : match.addEventListener) { - match === null || match === void 0 ? void 0 : match.addEventListener('change', darkHandler); - } - return function () { - if (match === null || match === void 0 ? void 0 : match.removeListener) { - match === null || match === void 0 ? void 0 : match.removeListener(darkHandler); - } - else if (match === null || match === void 0 ? void 0 : match.removeEventListener) { - match === null || match === void 0 ? void 0 : match.removeEventListener('change', darkHandler); - } - }; - }, [dispatch]); - return null; -} - -var initialStyles = { - width: '200vw', - height: '200vh', - transform: 'translate(-50vw, -100vh)', - backgroundBlendMode: '', -}; -var backgroundResetStyles = { - width: '100vw', - height: '100vh', - transform: 'unset', - backgroundBlendMode: '', -}; -var backgroundRadialGradientElement = document.getElementById('background-radial-gradient'); -var setBackground = function (newValues) { - return Object.entries(newValues).forEach(function (_a) { - var _b = __read(_a, 2), key = _b[0], value = _b[1]; - if (backgroundRadialGradientElement) { - backgroundRadialGradientElement.style[key] = value; - } - }); -}; -function RadialGradientByChainUpdater() { - var chainId = useActiveWeb3React().chainId; - var _a = __read(useDarkModeManager(), 1), darkMode = _a[0]; - // manage background color - React.useEffect(function () { - if (!backgroundRadialGradientElement) { - return; - } - switch (chainId) { - case SupportedChainId.ARBITRUM_ONE: - case SupportedChainId.ARBITRUM_RINKEBY: - setBackground(backgroundResetStyles); - var arbitrumLightGradient = 'radial-gradient(150% 100% at 50% 0%, #CDE8FB 0%, #FCF3F9 50%, #FFFFFF 100%)'; - var arbitrumDarkGradient = 'radial-gradient(150% 100% at 50% 0%, #0A294B 0%, #221E30 50%, #1F2128 100%)'; - backgroundRadialGradientElement.style.background = darkMode ? arbitrumDarkGradient : arbitrumLightGradient; - break; - case SupportedChainId.OPTIMISM: - case SupportedChainId.OPTIMISTIC_KOVAN: - setBackground(backgroundResetStyles); - var optimismLightGradient = 'radial-gradient(150% 100% at 50% 0%, #FFFBF2 2%, #FFF4F9 53%, #FFFFFF 100%)'; - var optimismDarkGradient = 'radial-gradient(150% 100% at 50% 0%, #3E2E38 2%, #2C1F2D 53%, #1F2128 100%)'; - backgroundRadialGradientElement.style.background = darkMode ? optimismDarkGradient : optimismLightGradient; - break; - case SupportedChainId.POLYGON: - case SupportedChainId.POLYGON_MUMBAI: - setBackground(backgroundResetStyles); - var polygonLightGradient = 'radial-gradient(153.32% 100% at 47.26% 0%, rgba(130, 71, 229, 0.0864) 0%, rgba(0, 41, 255, 0.06) 48.19%, rgba(0, 41, 255, 0.012) 100%), #FFFFFF'; - var polygonDarkGradient = 'radial-gradient(150.6% 98.22% at 48.06% 0%, rgba(130, 71, 229, 0.6) 0%, rgba(200, 168, 255, 0) 100%), #1F2128'; - backgroundRadialGradientElement.style.background = darkMode ? polygonDarkGradient : polygonLightGradient; - backgroundRadialGradientElement.style.backgroundBlendMode = darkMode ? 'overlay,normal' : 'multiply,normal'; - break; - default: - setBackground(initialStyles); - backgroundRadialGradientElement.style.background = ''; - } - }, [darkMode, chainId]); - return null; -} - -function Updaters() { - return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(RadialGradientByChainUpdater, {}, void 0), jsxRuntime.jsx(Updater$4, {}, void 0), jsxRuntime.jsx(Updater, {}, void 0), jsxRuntime.jsx(Updater$5, {}, void 0), jsxRuntime.jsx(Updater$1, {}, void 0), jsxRuntime.jsx(BlockUpdater, {}, void 0), jsxRuntime.jsx(MulticallUpdater, {}, void 0), jsxRuntime.jsx(Updater$3, {}, void 0)] }, void 0)); -} - -var Web3ProviderNetwork = core.createWeb3ReactRoot(NetworkContextName); -var Providers = function (props) { return (jsxRuntime.jsx(reactRedux.Provider, __assign({ store: store }, { children: jsxRuntime.jsx(reactRouterDom.HashRouter, { children: jsxRuntime.jsx(LanguageProvider, { children: jsxRuntime.jsx(core.Web3ReactProvider, __assign({ getLibrary: getLibrary }, { children: jsxRuntime.jsx(Web3ProviderNetwork, __assign({ getLibrary: getLibrary }, { children: jsxRuntime.jsxs(Blocklist, { children: [jsxRuntime.jsx(Updaters, {}, void 0), jsxRuntime.jsxs(ThemeProvider, { children: [jsxRuntime.jsx(ThemedGlobalStyle, {}, void 0), props.children] }, void 0)] }, void 0) }), void 0) }), void 0) }, void 0) }, void 0) }), void 0)); }; - -var $schema = "http://json-schema.org/draft-07/schema#"; -var $id = "https://uniswap.org/tokenlist.schema.json"; -var title = "Uniswap Token List"; -var description = "Schema for lists of tokens compatible with the Uniswap Interface"; -var definitions = { - Version: { - type: "object", - description: "The version of the list, used in change detection", - examples: [ - { - major: 1, - minor: 0, - patch: 0 - } - ], - additionalProperties: false, - properties: { - major: { - type: "integer", - description: "The major version of the list. Must be incremented when tokens are removed from the list or token addresses are changed.", - minimum: 0, - examples: [ - 1, - 2 - ] - }, - minor: { - type: "integer", - description: "The minor version of the list. Must be incremented when tokens are added to the list.", - minimum: 0, - examples: [ - 0, - 1 - ] - }, - patch: { - type: "integer", - description: "The patch version of the list. Must be incremented for any changes to the list.", - minimum: 0, - examples: [ - 0, - 1 - ] - } - }, - required: [ - "major", - "minor", - "patch" - ] - }, - TagIdentifier: { - type: "string", - description: "The unique identifier of a tag", - minLength: 1, - maxLength: 10, - pattern: "^[\\w]+$", - examples: [ - "compound", - "stablecoin" - ] - }, - ExtensionIdentifier: { - type: "string", - description: "The name of a token extension property", - minLength: 1, - maxLength: 40, - pattern: "^[\\w]+$", - examples: [ - "color", - "is_fee_on_transfer", - "aliases" - ] - }, - ExtensionMap: { - type: "object", - description: "An object containing any arbitrary or vendor-specific token metadata", - maxProperties: 10, - propertyNames: { - $ref: "#/definitions/ExtensionIdentifier" - }, - additionalProperties: { - $ref: "#/definitions/ExtensionValue" - }, - examples: [ - { - color: "#000000", - is_verified_by_me: true - }, - { - "x-bridged-addresses-by-chain": { - "1": { - bridgeAddress: "0x4200000000000000000000000000000000000010", - tokenAddress: "0x4200000000000000000000000000000000000010" - } - } - } - ] - }, - ExtensionPrimitiveValue: { - anyOf: [ - { - type: "string", - minLength: 1, - maxLength: 42, - examples: [ - "#00000" - ] - }, - { - type: "boolean", - examples: [ - true - ] - }, - { - type: "number", - examples: [ - 15 - ] - }, - { - type: "null" - } - ] - }, - ExtensionValue: { - anyOf: [ - { - $ref: "#/definitions/ExtensionPrimitiveValue" - }, - { - type: "object", - maxProperties: 10, - propertyNames: { - $ref: "#/definitions/ExtensionIdentifier" - }, - additionalProperties: { - $ref: "#/definitions/ExtensionValueInner0" - } - } - ] - }, - ExtensionValueInner0: { - anyOf: [ - { - $ref: "#/definitions/ExtensionPrimitiveValue" - }, - { - type: "object", - maxProperties: 10, - propertyNames: { - $ref: "#/definitions/ExtensionIdentifier" - }, - additionalProperties: { - $ref: "#/definitions/ExtensionValueInner1" - } - } - ] - }, - ExtensionValueInner1: { - anyOf: [ - { - $ref: "#/definitions/ExtensionPrimitiveValue" - } - ] - }, - TagDefinition: { - type: "object", - description: "Definition of a tag that can be associated with a token via its identifier", - additionalProperties: false, - properties: { - name: { - type: "string", - description: "The name of the tag", - pattern: "^[ \\w]+$", - minLength: 1, - maxLength: 20 - }, - description: { - type: "string", - description: "A user-friendly description of the tag", - pattern: "^[ \\w\\.,:]+$", - minLength: 1, - maxLength: 200 - } - }, - required: [ - "name", - "description" - ], - examples: [ - { - name: "Stablecoin", - description: "A token with value pegged to another asset" - } - ] - }, - TokenInfo: { - type: "object", - description: "Metadata for a single token in a token list", - additionalProperties: false, - properties: { - chainId: { - type: "integer", - description: "The chain ID of the Ethereum network where this token is deployed", - minimum: 1, - examples: [ - 1, - 42 - ] - }, - address: { - type: "string", - description: "The checksummed address of the token on the specified chain ID", - pattern: "^0x[a-fA-F0-9]{40}$", - examples: [ - "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48" - ] - }, - decimals: { - type: "integer", - description: "The number of decimals for the token balance", - minimum: 0, - maximum: 255, - examples: [ - 18 - ] - }, - name: { - type: "string", - description: "The name of the token", - minLength: 1, - maxLength: 40, - pattern: "^[ \\w.'+\\-%/À-ÖØ-öø-ÿ:&\\[\\]\\(\\)]+$", - examples: [ - "USD Coin" - ] - }, - symbol: { - type: "string", - description: "The symbol for the token; must be alphanumeric", - pattern: "^[a-zA-Z0-9+\\-%/$.]+$", - minLength: 1, - maxLength: 20, - examples: [ - "USDC" - ] - }, - logoURI: { - type: "string", - description: "A URI to the token logo asset; if not set, interface will attempt to find a logo based on the token address; suggest SVG or PNG of size 64x64", - format: "uri", - examples: [ - "ipfs://QmXfzKRvjZz3u5JRgC4v5mGVbm9ahrUiB4DgzHBsnWbTMM" - ] - }, - tags: { - type: "array", - description: "An array of tag identifiers associated with the token; tags are defined at the list level", - items: { - $ref: "#/definitions/TagIdentifier" - }, - maxItems: 10, - examples: [ - "stablecoin", - "compound" - ] - }, - extensions: { - $ref: "#/definitions/ExtensionMap" - } - }, - required: [ - "chainId", - "address", - "decimals", - "name", - "symbol" - ] - } -}; -var type = "object"; -var additionalProperties = false; -var properties = { - name: { - type: "string", - description: "The name of the token list", - minLength: 1, - maxLength: 20, - pattern: "^[\\w ]+$", - examples: [ - "My Token List" - ] - }, - timestamp: { - type: "string", - format: "date-time", - description: "The timestamp of this list version; i.e. when this immutable version of the list was created" - }, - version: { - $ref: "#/definitions/Version" - }, - tokens: { - type: "array", - description: "The list of tokens included in the list", - items: { - $ref: "#/definitions/TokenInfo" - }, - minItems: 1, - maxItems: 10000 - }, - keywords: { - type: "array", - description: "Keywords associated with the contents of the list; may be used in list discoverability", - items: { - type: "string", - description: "A keyword to describe the contents of the list", - minLength: 1, - maxLength: 20, - pattern: "^[\\w ]+$", - examples: [ - "compound", - "lending", - "personal tokens" - ] - }, - maxItems: 20, - uniqueItems: true - }, - tags: { - type: "object", - description: "A mapping of tag identifiers to their name and description", - propertyNames: { - $ref: "#/definitions/TagIdentifier" - }, - additionalProperties: { - $ref: "#/definitions/TagDefinition" - }, - maxProperties: 20, - examples: [ - { - stablecoin: { - name: "Stablecoin", - description: "A token with value pegged to another asset" - } - } - ] - }, - logoURI: { - type: "string", - description: "A URI for the logo of the token list; prefer SVG or PNG of size 256x256", - format: "uri", - examples: [ - "ipfs://QmXfzKRvjZz3u5JRgC4v5mGVbm9ahrUiB4DgzHBsnWbTMM" - ] - } -}; -var required = [ - "name", - "timestamp", - "version", - "tokens" -]; -var tokenlist_schema = { - $schema: $schema, - $id: $id, - title: title, - description: description, - definitions: definitions, - type: type, - additionalProperties: additionalProperties, - properties: properties, - required: required -}; - -var tokenlist_schema$1 = /*#__PURE__*/Object.freeze({ - __proto__: null, - $schema: $schema, - $id: $id, - title: title, - description: description, - definitions: definitions, - type: type, - additionalProperties: additionalProperties, - properties: properties, - required: required, - 'default': tokenlist_schema -}); - -// from routing-api (https://github.com/Uniswap/routing-api/blob/main/lib/handlers/quote/quote.ts#L243-L311) -function transformSwapRouteToGetQuoteResult(type, amount, _a) { - var e_1, _b; - var quote = _a.quote, quoteGasAdjusted = _a.quoteGasAdjusted, route = _a.route, estimatedGasUsed = _a.estimatedGasUsed, estimatedGasUsedQuoteToken = _a.estimatedGasUsedQuoteToken, estimatedGasUsedUSD = _a.estimatedGasUsedUSD, gasPriceWei = _a.gasPriceWei, methodParameters = _a.methodParameters, blockNumber = _a.blockNumber; - var routeResponse = []; - try { - for (var route_1 = __values(route), route_1_1 = route_1.next(); !route_1_1.done; route_1_1 = route_1.next()) { - var subRoute = route_1_1.value; - var amount_1 = subRoute.amount, quote_1 = subRoute.quote, tokenPath = subRoute.tokenPath; - if (subRoute.protocol === routerSdk.Protocol.V3) { - var pools = subRoute.route.pools; - var curRoute = []; - for (var i = 0; i < pools.length; i++) { - var nextPool = pools[i]; - var tokenIn = tokenPath[i]; - var tokenOut = tokenPath[i + 1]; - var edgeAmountIn = undefined; - if (i === 0) { - edgeAmountIn = type === 'exactIn' ? amount_1.quotient.toString() : quote_1.quotient.toString(); - } - var edgeAmountOut = undefined; - if (i === pools.length - 1) { - edgeAmountOut = type === 'exactIn' ? quote_1.quotient.toString() : amount_1.quotient.toString(); - } - curRoute.push({ - type: 'v3-pool', - tokenIn: { - chainId: tokenIn.chainId, - decimals: tokenIn.decimals, - address: tokenIn.address, - symbol: tokenIn.symbol, - }, - tokenOut: { - chainId: tokenOut.chainId, - decimals: tokenOut.decimals, - address: tokenOut.address, - symbol: tokenOut.symbol, - }, - fee: nextPool.fee.toString(), - liquidity: nextPool.liquidity.toString(), - sqrtRatioX96: nextPool.sqrtRatioX96.toString(), - tickCurrent: nextPool.tickCurrent.toString(), - amountIn: edgeAmountIn, - amountOut: edgeAmountOut, - }); - } - routeResponse.push(curRoute); - } - else if (subRoute.protocol === routerSdk.Protocol.V2) { - var pools = subRoute.route.pairs; - var curRoute = []; - for (var i = 0; i < pools.length; i++) { - var nextPool = pools[i]; - var tokenIn = tokenPath[i]; - var tokenOut = tokenPath[i + 1]; - var edgeAmountIn = undefined; - if (i === 0) { - edgeAmountIn = type === 'exactIn' ? amount_1.quotient.toString() : quote_1.quotient.toString(); - } - var edgeAmountOut = undefined; - if (i === pools.length - 1) { - edgeAmountOut = type === 'exactIn' ? quote_1.quotient.toString() : amount_1.quotient.toString(); - } - var reserve0 = nextPool.reserve0; - var reserve1 = nextPool.reserve1; - curRoute.push({ - type: 'v2-pool', - tokenIn: { - chainId: tokenIn.chainId, - decimals: tokenIn.decimals, - address: tokenIn.address, - symbol: tokenIn.symbol, - }, - tokenOut: { - chainId: tokenOut.chainId, - decimals: tokenOut.decimals, - address: tokenOut.address, - symbol: tokenOut.symbol, - }, - reserve0: { - token: { - chainId: reserve0.currency.wrapped.chainId, - decimals: reserve0.currency.wrapped.decimals, - address: reserve0.currency.wrapped.address, - symbol: reserve0.currency.wrapped.symbol, - }, - quotient: reserve0.quotient.toString(), - }, - reserve1: { - token: { - chainId: reserve1.currency.wrapped.chainId, - decimals: reserve1.currency.wrapped.decimals, - address: reserve1.currency.wrapped.address, - symbol: reserve1.currency.wrapped.symbol, - }, - quotient: reserve1.quotient.toString(), - }, - amountIn: edgeAmountIn, - amountOut: edgeAmountOut, - }); - } - routeResponse.push(curRoute); - } - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (route_1_1 && !route_1_1.done && (_b = route_1.return)) _b.call(route_1); - } - finally { if (e_1) throw e_1.error; } - } - var result = { - methodParameters: methodParameters, - blockNumber: blockNumber.toString(), - amount: amount.quotient.toString(), - amountDecimals: amount.toExact(), - quote: quote.quotient.toString(), - quoteDecimals: quote.toExact(), - quoteGasAdjusted: quoteGasAdjusted.quotient.toString(), - quoteGasAdjustedDecimals: quoteGasAdjusted.toExact(), - gasUseEstimateQuote: estimatedGasUsedQuoteToken.quotient.toString(), - gasUseEstimateQuoteDecimals: estimatedGasUsedQuoteToken.toExact(), - gasUseEstimate: estimatedGasUsed.toString(), - gasUseEstimateUSD: estimatedGasUsedUSD.toExact(), - gasPriceWei: gasPriceWei.toString(), - route: routeResponse, - routeString: smartOrderRouter.routeAmountsToString(route), - }; - return result; -} - -/** Minimal set of dependencies for the router to work locally. */ -function buildDependencies() { - var e_1, _a; - var dependenciesByChain = {}; - try { - for (var AUTO_ROUTER_SUPPORTED_CHAINS_1 = __values(AUTO_ROUTER_SUPPORTED_CHAINS), AUTO_ROUTER_SUPPORTED_CHAINS_1_1 = AUTO_ROUTER_SUPPORTED_CHAINS_1.next(); !AUTO_ROUTER_SUPPORTED_CHAINS_1_1.done; AUTO_ROUTER_SUPPORTED_CHAINS_1_1 = AUTO_ROUTER_SUPPORTED_CHAINS_1.next()) { - var chainId = AUTO_ROUTER_SUPPORTED_CHAINS_1_1.value; - var provider = new ethers.providers.JsonRpcProvider(INFURA_NETWORK_URLS[chainId]); - dependenciesByChain[chainId] = { - chainId: chainId, - provider: provider, - }; - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (AUTO_ROUTER_SUPPORTED_CHAINS_1_1 && !AUTO_ROUTER_SUPPORTED_CHAINS_1_1.done && (_a = AUTO_ROUTER_SUPPORTED_CHAINS_1.return)) _a.call(AUTO_ROUTER_SUPPORTED_CHAINS_1); - } - finally { if (e_1) throw e_1.error; } - } - return dependenciesByChain; -} -var GAMetric = /** @class */ (function (_super) { - __extends(GAMetric, _super); - function GAMetric() { - return _super !== null && _super.apply(this, arguments) || this; - } - GAMetric.prototype.putDimensions = function () { - return; - }; - GAMetric.prototype.putMetric = function (key, value, unit) { - ReactGA__default["default"].timing({ - category: 'Routing API', - variable: key + " | " + unit, - value: value, - label: 'client', - }); - }; - return GAMetric; -}(smartOrderRouter.IMetric)); -smartOrderRouter.setGlobalMetric(new GAMetric()); - -var routerParamsByChain = buildDependencies(); -function getQuote(_a, alphaRouterConfig) { - var type = _a.type, chainId = _a.chainId, tokenIn = _a.tokenIn, tokenOut = _a.tokenOut, amountRaw = _a.amount; - return __awaiter(this, void 0, void 0, function () { - var params, router, currencyIn, currencyOut, baseCurrency, quoteCurrency, amount, swapRoute; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - params = routerParamsByChain[chainId]; - if (!params) { - throw new Error('Router dependencies not initialized.'); - } - router = new smartOrderRouter.AlphaRouter(params); - currencyIn = new sdkCore.Token(tokenIn.chainId, tokenIn.address, tokenIn.decimals, tokenIn.symbol); - currencyOut = new sdkCore.Token(tokenOut.chainId, tokenOut.address, tokenOut.decimals, tokenOut.symbol); - baseCurrency = type === 'exactIn' ? currencyIn : currencyOut; - quoteCurrency = type === 'exactIn' ? currencyOut : currencyIn; - amount = sdkCore.CurrencyAmount.fromRawAmount(baseCurrency, JSBI__default["default"].BigInt(amountRaw)); - return [4 /*yield*/, router.route(amount, quoteCurrency, type === 'exactIn' ? sdkCore.TradeType.EXACT_INPUT : sdkCore.TradeType.EXACT_OUTPUT, - /*swapConfig=*/ undefined, alphaRouterConfig)]; - case 1: - swapRoute = _b.sent(); - if (!swapRoute) - throw new Error('Failed to generate client side quote'); - return [2 /*return*/, { data: transformSwapRouteToGetQuoteResult(type, amount, swapRoute) }]; - } - }); - }); -} - -var index = /*#__PURE__*/Object.freeze({ - __proto__: null, - getQuote: getQuote -}); - -var fortmatic=function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n});},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0});},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=3)}([function(e,t){e.exports=function(e){return e&&e.__esModule?e:{default:e}};},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")};},function(e,t,r){function n(){return Math.floor(9e4*Math.random())+1e4}Object.defineProperty(t,"__esModule",{value:!0}),t.sendAsyncWrapper=function(e,t){var r=this;return new Promise(function(o,a){r.sendAsync({jsonrpc:"2.0",id:n(),method:e,params:t||[]},function(e,t){e?a(e):o(t.result);});})},t.sendFortmaticAsyncWrapper=function(e){var t=this;return new Promise(function(r,n){t.getProvider().sendFortmaticAsync(e,function(e,t){e?n(e):r(t?t.result:{});});})},t.randomId=n,t.findExistingResponse=function(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},t=new v(m);return t.params=[e],i.sendFortmaticAsyncWrapper.call(g,t)};};var v=function e(t,r){(0, o.default)(this,e),this.id=(0, i.randomId)(),this.method=t,this.params=r?[r]:[{}];};},function(e,t,r){var n=r(0);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=n(r(6)),a=n(r(9)),i=n(r(1)),s=n(r(10)),c=r(11),u=n(r(12)),l=r(2),f=function(){function e(t,r){if((0, i.default)(this,e),this.fortmaticClient=t,this.requests={},this.queue=[],this.account=null,this.network=null,this.isFortmatic=!0,this.overlayReady=!1,this.isLoggedIn=!1,this.postMessages={FORTMATIC_HANDLE_BATCH_REQUEST:"FORTMATIC_HANDLE_BATCH_REQUEST",FORTMATIC_HANDLE_REQUEST:"FORTMATIC_HANDLE_REQUEST",FORTMATIC_HANDLE_FORTMATIC_REQUEST:"FORTMATIC_HANDLE_FORTMATIC_REQUEST",FORTMATIC_HANDLE_RESPONSE:"FORTMATIC_HANDLE_RESPONSE",FORTMATIC_OVERLAY_READY:"FORTMATIC_OVERLAY_READY",FORTMATIC_SHOW_OVERLAY:"FORTMATIC_SHOW_OVERLAY",FORTMATIC_HIDE_OVERLAY:"FORTMATIC_HIDE_OVERLAY",FORTMATIC_USER_DENIED:"FORTMATIC_USER_DENIED",FORTMATIC_USER_LOGOUT:"FORTMATIC_USER_LOGOUT",FORTMATIC_UNAUTHORIZED_API_KEY:"FORTMATIC_UNAUTHORIZED_API_KEY"},!r.API_KEY)throw new Error("Please provide a Fortmatic API key that you acquired from the developer dashboard.");this.options={API_KEY:r.API_KEY,ETH_NETWORK:r.ETH_NETWORK,DOMAIN_ORIGIN:window.location?window.location.origin:"",version:c.version},this.queryParams=btoa(JSON.stringify(this.options)),this.constructPostMessage(),this.overlay=this.createOverlay(),this.listenMessage();}return (0, s.default)(e,[{key:"constructPostMessage",value:function(){var e=this;Object.keys(this.postMessages).map(function(t){e.postMessages[t]+="-".concat(e.queryParams);});}},{key:"createOverlay",value:function(){var e=this;return new Promise(function(t,r){var n=function(){if(function(){var t=!0,r=!1,n=void 0;try{for(var o,a=document.getElementsByClassName("fortmatic-iframe")[Symbol.iterator]();!(t=(o=a.next()).done);t=!0)if(o.value.src.includes(e.queryParams))return !1}catch(e){r=!0,n=e;}finally{try{t||null==a.return||a.return();}finally{if(r)throw n}}return !0}()){var r=document.createElement("style");r.innerHTML=u.default.css,r.type="text/css",document.head.appendChild(r);var n=document.createElement("iframe");n.className="fortmatic-iframe",n.src="".concat(e.fortmaticClient,"/send?params=").concat(e.queryParams),document.body.appendChild(n);var o=document.createElement("img");o.src="https://static.fortmatic.com/assets/trans.gif",document.body.appendChild(o),t({iframe:n});}else console.error("Fortmatic: Duplicate instances found.");};["loaded","interactive","complete"].indexOf(document.readyState)>-1?n():window.addEventListener("load",n.bind(e),!1);})}},{key:"showOverlay",value:function(){var e=(0, a.default)(o.default.mark(function e(){return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.overlay;case 2:e.sent.iframe.style.display="block";case 4:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"hideOverlay",value:function(){var e=(0, a.default)(o.default.mark(function e(){return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.overlay;case 2:e.sent.iframe.style.display="none";case 4:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"sendAsync",value:function(e,t){e.length>0?this.enqueue({payload:{id:(0, l.randomId)(),batch:e.map(function(e){return e.id=(0, l.randomId)(),e}),method:"eth_batchRequest"},cb:t}):this.enqueue({payload:e,cb:t});}},{key:"sendFortmaticAsync",value:function(e,t){this.enqueue({payload:e,cb:t,isNative:!0});}},{key:"send",value:function(e,t){if("string"==typeof e)return l.sendAsyncWrapper.call(this,e,t);if(!t){console.warn("Non-async web3 methods will be deprecated in web3 > 1.0, and are not supported by the Fortmatic provider. An async method to be used instead."),this.sendAsync(e,function(){});var r={};switch(e.method){case"eth_accounts":r=this.account?[this.account]:[];break;case"eth_coinbase":r=this.account;break;case"net_version":r=this.network||(this.options.API_KEY.startsWith("pk_live")?1:4);break;case"eth_uninstallFilter":r=!0;break;default:r={};}return {id:e.id,jsonrpc:e.jsonrpc,result:r}}this.sendAsync(e,t);}},{key:"enqueue",value:function(e){this.queue.push(e),this.overlayReady&&this.dequeue();}},{key:"dequeue",value:function(){var e=(0, a.default)(o.default.mark(function e(){var t,r,n,a=this;return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(0!==this.queue.length){e.next=2;break}return e.abrupt("return");case 2:if(!(t=this.queue.shift())){e.next=11;break}return r=t.payload,n=t.cb,r.id=(0, l.randomId)(),e.next=9,this.postMessage(t.isNative?this.postMessages.FORTMATIC_HANDLE_FORTMATIC_REQUEST:this.postMessages.FORTMATIC_HANDLE_REQUEST,t.payload);case 9:r.batch&&r.batch.length>0?(r.batch.forEach(function(e){a.requests[e.id]={parentId:r.id,payload:e,cb:function(e,t){var n=a.requests[r.id].batchResponse;if(e&&e.response&&!(0, l.findExistingResponse)(n,e.response.id))throw n.push({jsonrpc:"2.0",id:e.response.id,error:{code:e.response.code,message:e.response.message}}),a.requests[r.id].cb(null,n),e.response;if(t&&t.result&&!(0, l.findExistingResponse)(n,t.id))return n.push(t);throw new Error("Fortmatic: unexpected callback behavior")}};}),this.requests[r.id]={payload:r,cb:n,batchResponse:[]}):this.requests[r.id]={payload:r,cb:n},this.dequeue();case 11:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"postMessage",value:function(){var e=(0, a.default)(o.default.mark(function e(t,r){var n;return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.overlay;case 2:if(!(n=e.sent).iframe.contentWindow){e.next=7;break}n.iframe.contentWindow.postMessage({msgType:t,payload:r},"*"),e.next=8;break;case 7:throw new Error("Fortmatic: Modal is not ready.");case 8:case"end":return e.stop()}},e,this)}));return function(t,r){return e.apply(this,arguments)}}()},{key:"enable",value:function(){return l.sendAsyncWrapper.call(this,"eth_accounts")}},{key:"listenMessage",value:function(){var e=this;window.addEventListener("message",function(t){if(t.origin===e.fortmaticClient){var r=t.data.response?t.data.response.id:null;switch(t.data.msgType){case e.postMessages.FORTMATIC_OVERLAY_READY:e.overlayReady=!0,e.dequeue();break;case e.postMessages.FORTMATIC_HANDLE_RESPONSE:try{e.requests[r].cb(null,t.data.response);var n=e.requests[r].parentId;n&&e.requests[n].payload.batch.length===e.requests[n].batchResponse.length&&e.requests[n].cb(null,e.requests[n].batchResponse),"eth_accounts"===e.requests[r].payload.method?e.account=t.data.response.result[0]:"eth_coinbase"===e.requests[r].payload.method?e.account=t.data.response.result:"net_version"===e.requests[r].payload.method&&(e.network=t.data.response.result);}catch(e){}e.isLoggedIn=!0,e.dequeue();break;case e.postMessages.FORTMATIC_HIDE_OVERLAY:e.hideOverlay();break;case e.postMessages.FORTMATIC_SHOW_OVERLAY:e.showOverlay();break;case e.postMessages.FORTMATIC_USER_LOGOUT:e.account=null,e.network=null,e.isLoggedIn=!1;break;case e.postMessages.FORTMATIC_UNAUTHORIZED_API_KEY:throw e.overlayReady=!1,new Error("Given API key is not authorized to access the resource.");case e.postMessages.FORTMATIC_USER_DENIED:if(r){var o=t.data.response&&t.data.response.message?t.data.response.message:"Fortmatic: Modal was closed without executing action!",a=t.data.response&&t.data.response.code?t.data.response.code:1;e.requests[r].cb({message:o,code:a,response:t.data.response});}else e.queue.forEach(function(e){return e.cb({message:"Fortmatic: Modal was closed without executing action!",code:1})});e.dequeue();}}});}}]),e}();t.default=f;},function(e,t,r){e.exports=r(7);},function(e,t,r){var n=function(){return this||"object"==typeof self&&self}()||Function("return this")(),o=n.regeneratorRuntime&&Object.getOwnPropertyNames(n).indexOf("regeneratorRuntime")>=0,a=o&&n.regeneratorRuntime;if(n.regeneratorRuntime=void 0,e.exports=r(8),o)n.regeneratorRuntime=a;else try{delete n.regeneratorRuntime;}catch(e){n.regeneratorRuntime=void 0;}},function(e,t){!function(t){var r,n=Object.prototype,o=n.hasOwnProperty,a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",s=a.asyncIterator||"@@asyncIterator",c=a.toStringTag||"@@toStringTag",u="object"==typeof e,l=t.regeneratorRuntime;if(l)u&&(e.exports=l);else {(l=t.regeneratorRuntime=u?e.exports:{}).wrap=_;var f="suspendedStart",d="suspendedYield",h="executing",p="completed",m={},y={};y[i]=function(){return this};var v=Object.getPrototypeOf,g=v&&v(v(L([])));g&&g!==n&&o.call(g,i)&&(y=g);var b=A.prototype=w.prototype=Object.create(y);T.prototype=b.constructor=A,A.constructor=T,A[c]=T.displayName="GeneratorFunction",l.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return !!t&&(t===T||"GeneratorFunction"===(t.displayName||t.name))},l.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,A):(e.__proto__=A,c in e||(e[c]="GeneratorFunction")),e.prototype=Object.create(b),e},l.awrap=function(e){return {__await:e}},O(R.prototype),R.prototype[s]=function(){return this},l.AsyncIterator=R,l.async=function(e,t,r,n){var o=new R(_(e,t,r,n));return l.isGeneratorFunction(t)?o:o.next().then(function(e){return e.done?e.value:o.next()})},O(b),b[c]="Generator",b[i]=function(){return this},b.toString=function(){return "[object Generator]"},l.keys=function(e){var t=[];for(var r in e)t.push(r);return t.reverse(),function r(){for(;t.length;){var n=t.pop();if(n in e)return r.value=n,r.done=!1,r}return r.done=!0,r}},l.values=L,F.prototype={constructor:F,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=r,this.done=!1,this.delegate=null,this.method="next",this.arg=r,this.tryEntries.forEach(M),!e)for(var t in this)"t"===t.charAt(0)&&o.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=r);},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function n(n,o){return s.type="throw",s.arg=e,t.next=n,o&&(t.method="next",t.arg=r),!!o}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],s=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var c=o.call(i,"catchLoc"),u=o.call(i,"finallyLoc");if(c&&u){if(this.prev=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&o.call(n,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),M(r),m}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var o=n.arg;M(r);}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:L(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=r),m}};}function _(e,t,r,n){var o=t&&t.prototype instanceof w?t:w,a=Object.create(o.prototype),i=new F(n||[]);return a._invoke=function(e,t,r){var n=f;return function(o,a){if(n===h)throw new Error("Generator is already running");if(n===p){if("throw"===o)throw a;return k()}for(r.method=o,r.arg=a;;){var i=r.delegate;if(i){var s=I(i,r);if(s){if(s===m)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(n===f)throw n=p,r.arg;r.dispatchException(r.arg);}else "return"===r.method&&r.abrupt("return",r.arg);n=h;var c=E(e,t,r);if("normal"===c.type){if(n=r.done?p:d,c.arg===m)continue;return {value:c.arg,done:r.done}}"throw"===c.type&&(n=p,r.method="throw",r.arg=c.arg);}}}(e,r,i),a}function E(e,t,r){try{return {type:"normal",arg:e.call(t,r)}}catch(e){return {type:"throw",arg:e}}}function w(){}function T(){}function A(){}function O(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)};});}function R(e){var t;this._invoke=function(r,n){function a(){return new Promise(function(t,a){!function t(r,n,a,i){var s=E(e[r],e,n);if("throw"!==s.type){var c=s.arg,u=c.value;return u&&"object"==typeof u&&o.call(u,"__await")?Promise.resolve(u.__await).then(function(e){t("next",e,a,i);},function(e){t("throw",e,a,i);}):Promise.resolve(u).then(function(e){c.value=e,a(c);},function(e){return t("throw",e,a,i)})}i(s.arg);}(r,n,t,a);})}return t=t?t.then(a,a):a()};}function I(e,t){var n=e.iterator[t.method];if(n===r){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=r,I(e,t),"throw"===t.method))return m;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method");}return m}var o=E(n,e.iterator,t.arg);if("throw"===o.type)return t.method="throw",t.arg=o.arg,t.delegate=null,m;var a=o.arg;return a?a.done?(t[e.resultName]=a.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=r),t.delegate=null,m):a:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,m)}function x(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t);}function M(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t;}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(x,this),this.reset(!0);}function L(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n (https://fortmatic.com/)",license:"MIT",repository:{type:"git",url:"https://github.com/fortmatic/fortmatic-js"},keywords:["Auth","Login","Web3","Crypto","Ethereum","MetaMask","Wallet","Blockchain","Dapp"],homepage:"https://www.fortmatic.com",ava:{require:["@babel/register"],files:["test/**/*.spec.js"],babel:{testOptions:{presets:["@babel/env"],plugins:["@babel/plugin-proposal-function-bind","@babel/plugin-transform-runtime"]}},verbose:!0},nyc:{all:!1,"check-coverage":!0,"per-file":!0,lines:80,statements:80,functions:80,branches:80,include:["src/**/*.js"],exclude:["*/style.js"],require:[],reporter:["html","lcov"]},dependencies:{"@babel/runtime":"7.3.4"},devDependencies:{"@babel/core":"7.3.4","@babel/plugin-proposal-function-bind":"7.2.0","@babel/plugin-transform-modules-commonjs":"7.2.0","@babel/plugin-transform-runtime":"7.3.4","@babel/preset-env":"7.3.4","@babel/register":"7.0.0",ava:"2.2.0","babel-eslint":"10.0.1","babel-loader":"8.0.5",eslint:"5.9.0",lodash:"4.17.11",nyc:"13.1.0",sinon:"7.1.1",webpack:"4.26.1","webpack-cli":"3.1.2"}};},function(e,t,r){t.css="\n .fortmatic-iframe {\n display: none;\n position: fixed;\n top: 0;\n right: 0;\n width: 100%;\n height: 100%;\n border: none;\n border-radius: 0;\n z-index: 2147483647;\n }\n";}]); - -var fortmatic$1 = /*#__PURE__*/Object.freeze(/*#__PURE__*/_mergeNamespaces({ - __proto__: null, - 'default': fortmatic -}, [fortmatic])); - -exports.App = App; -exports.INFURA_NETWORK_URLS = INFURA_NETWORK_URLS; -exports.Providers = Providers; -exports.Swap = Swap; -exports.Updaters = Updaters; -exports.serviceWorkerRegistration = serviceWorkerRegistration; -//# sourceMappingURL=snowflake.js.map diff --git a/dist2/snowflake.js.map b/dist2/snowflake.js.map deleted file mode 100644 index 1b4bbfc286f..00000000000 --- a/dist2/snowflake.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"snowflake.js","sources":["../src/assets/images/blue-loader.svg","../src/assets/images/token-logo.png","../src/assets/images/ethereum-logo.png","../src/assets/svg/arbitrum_logo.svg","../src/assets/svg/optimistic_ethereum.svg","../src/assets/svg/polygon-matic-logo.svg","../src/assets/images/big_unicorn.png","../src/assets/images/noise.png","../src/assets/images/xl_uni.png","../src/assets/svg/logo.svg","../src/locales/en-US.js","../src/assets/images/menu.svg","../src/assets/images/coinbaseWalletIcon.svg","../src/assets/images/fortmaticIcon.png","../src/assets/images/portisIcon.png","../src/assets/images/walletConnectIcon.svg","../node_modules/mersenne-twister/src/mersenne-twister.js","../node_modules/@metamask/jazzicon/paper.js","../node_modules/color/index.js","../node_modules/@metamask/jazzicon/colors.js","../node_modules/@metamask/jazzicon/index.js","../src/assets/images/metamask.png","../src/assets/images/x.svg","../src/assets/images/arrow-right.svg","../src/assets/images/santa-hat.png","../src/assets/images/survey-orb.svg","../src/assets/images/gas-icon.svg","../src/assets/svg/matic-token-icon.svg","../src/assets/svg/dot_line.svg","../src/assets/svg/auto_router.svg","../src/assets/svg/static_route.svg","../src/assets/images/dropdown.svg","../src/assets/svg/tokenlist.svg","../node_modules/fortmatic/lib/fortmatic.js"],"sourcesContent":["export default \"data:image/svg+xml,%3Csvg%20width%3D%2294%22%20height%3D%2294%22%20viewBox%3D%220%200%2094%2094%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%20%20%3Cpath%20d%3D%22M92%2047C92%2022.1472%2071.8528%202%2047%202C22.1472%202%202%2022.1472%202%2047C2%2071.8528%2022.1472%2092%2047%2092%22%20stroke%3D%22%232172E5%22%20stroke-width%3D%223%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20viewBox%3D%220%200%20470.287%20514.251%22%20enable-background%3D%22new%200%200%20470.287%20514.251%22%20xml%3Aspace%3D%22preserve%22%3E%3Cg%20id%3D%22Background%22%3E%3C%2Fg%3E%3Cg%20id%3D%22Logos_and_symbols%22%3E%20%3Cg%20id%3D%22SYMBOL_VER_3%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_4_3_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_1_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_1_%22%3E%20%20%3Cg%20id%3D%22_x31_-3%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_14_%22%3E%20%20%20%3Cpath%20fill%3D%22%232D374B%22%20d%3D%22M291.134%2C237.469l35.654-60.5l96.103%2C149.684l0.046%2C28.727l-0.313-197.672%20%20%20%20c-0.228-4.832-2.794-9.252-6.887-11.859L242.715%2C46.324c-4.045-1.99-9.18-1.967-13.22%2C0.063c-0.546%2C0.272-1.06%2C0.57-1.548%2C0.895%20%20%20%20l-0.604%2C0.379L59.399%2C144.983l-0.651%2C0.296c-0.838%2C0.385-1.686%2C0.875-2.48%2C1.444c-3.185%2C2.283-5.299%2C5.66-5.983%2C9.448%20%20%20%20c-0.103%2C0.574-0.179%2C1.158-0.214%2C1.749l0.264%2C161.083l89.515-138.745c11.271-18.397%2C35.825-24.323%2C58.62-24.001l26.753%2C0.706%20%20%20%20L67.588%2C409.765l18.582%2C10.697L245.692%2C157.22l70.51-0.256L157.091%2C426.849l66.306%2C38.138l7.922%2C4.556%20%20%20%20c3.351%2C1.362%2C7.302%2C1.431%2C10.681%2C0.21l175.453-101.678l-33.544%2C19.438L291.134%2C237.469z%20M304.736%2C433.395l-66.969-105.108%20%20%20%20l40.881-69.371l87.952%2C138.628L304.736%2C433.395z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%2328A0F0%22%20points%3D%22237.768%2C328.286%20304.736%2C433.395%20366.601%2C397.543%20278.648%2C258.915%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2328A0F0%22%20d%3D%22M422.937%2C355.379l-0.046-28.727l-96.103-149.684l-35.654%2C60.5l92.774%2C150.043l33.544-19.438%20%20%20%20c3.29-2.673%2C5.281-6.594%2C5.49-10.825L422.937%2C355.379z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23FFFFFF%22%20d%3D%22M20.219%2C382.469l47.369%2C27.296l157.634-252.801l-26.753-0.706c-22.795-0.322-47.35%2C5.604-58.62%2C24.001%20%20%20%20L50.334%2C319.004l-30.115%2C46.271V382.469z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%23FFFFFF%22%20points%3D%22316.202%2C156.964%20245.692%2C157.22%2086.17%2C420.462%20141.928%2C452.565%20157.091%2C426.849%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2396BEDC%22%20d%3D%22M452.65%2C156.601c-0.59-14.746-8.574-28.245-21.08-36.104L256.28%2C19.692%20%20%20%20c-12.371-6.229-27.825-6.237-40.218-0.004c-1.465%2C0.739-170.465%2C98.752-170.465%2C98.752c-2.339%2C1.122-4.592%2C2.458-6.711%2C3.975%20%20%20%20c-11.164%2C8.001-17.969%2C20.435-18.668%2C34.095v208.765l30.115-46.271L50.07%2C157.921c0.035-0.589%2C0.109-1.169%2C0.214-1.741%20%20%20%20c0.681-3.79%2C2.797-7.171%2C5.983-9.456c0.795-0.569%2C172.682-100.064%2C173.228-100.337c4.04-2.029%2C9.175-2.053%2C13.22-0.063%20%20%20%20l173.022%2C99.523c4.093%2C2.607%2C6.659%2C7.027%2C6.887%2C11.859v199.542c-0.209%2C4.231-1.882%2C8.152-5.172%2C10.825l-33.544%2C19.438%20%20%20%20l-17.308%2C10.031l-61.864%2C35.852l-62.737%2C36.357c-3.379%2C1.221-7.33%2C1.152-10.681-0.21l-74.228-42.693l-15.163%2C25.717%20%20%20%20l66.706%2C38.406c2.206%2C1.255%2C4.171%2C2.367%2C5.784%2C3.272c2.497%2C1.4%2C4.199%2C2.337%2C4.8%2C2.629c4.741%2C2.303%2C11.563%2C3.643%2C17.71%2C3.643%20%20%20%20c5.636%2C0%2C11.132-1.035%2C16.332-3.072l182.225-105.531c10.459-8.104%2C16.612-20.325%2C17.166-33.564V156.601z%22%2F%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_13_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_6_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_3_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_15_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_3_%22%3E%20%20%20%3Cg%20id%3D%22_x33__7_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic%22%3E%20%20%20%3Cg%20id%3D%22_x33__3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_10_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x34__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_2_%22%3E%20%20%20%3Cg%20id%3D%22_x33__6_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_2_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_11_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_5_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_12_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_1_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_9_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_2_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol_1_%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_1_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_7_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_8_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Monochromatic_1_%22%3E%20%20%3Cg%20id%3D%22_x33__4_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%22170%22%20height%3D%22168%22%20viewBox%3D%220%200%20170%20168%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20clip-path%3D%22url%28%23clip0%29%22%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF505F%22%2F%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF0320%22%2F%3E%3Cpath%20d%3D%22M85.05%200C132.022%200%20170.1%2037.8949%20170.1%2084.6407C170.1%20131.386%200%20131.386%200%2084.6407C0%2037.8949%2038.0782%200%2085.05%200Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.665%2064.0394L112.444%2012.3742L89.0263%2078.9477L144.665%2064.0394Z%22%20fill%3D%22%23FF4E65%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.777%2064.215L112.444%2012.3742L165.349%2058.4347L143.777%2064.215Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.551%2063.613L142.479%20124.467L88.912%2078.5213L144.551%2063.613Z%22%20fill%3D%22%23D0001A%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.663%2063.7886L142.479%20124.467L165.235%2058.0083L143.663%2063.7886Z%22%20fill%3D%22%23FF697B%22%2F%3E%3C%2Fg%3E%3Cdefs%3E%3CclipPath%20id%3D%22clip0%22%3E%3Crect%20width%3D%22170%22%20height%3D%22168%22%20fill%3D%22white%22%2F%3E%3C%2FclipPath%3E%3C%2Fdefs%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20viewBox%3D%220%200%2038.4%2033.5%22%20style%3D%22enable-background%3Anew%200%200%2038.4%2033.5%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cstyle%20type%3D%22text%2Fcss%22%3E%20.st0%7Bfill%3A%238247E5%3B%7D%3C%2Fstyle%3E%3Cg%3E%20%3Cpath%20class%3D%22st0%22%20d%3D%22M29%2C10.2c-0.7-0.4-1.6-0.4-2.4%2C0L21%2C13.5l-3.8%2C2.1l-5.5%2C3.3c-0.7%2C0.4-1.6%2C0.4-2.4%2C0L5%2C16.3%20%20c-0.7-0.4-1.2-1.2-1.2-2.1v-5c0-0.8%2C0.4-1.6%2C1.2-2.1l4.3-2.5c0.7-0.4%2C1.6-0.4%2C2.4%2C0L16%2C7.2c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v3.3l3.8-2.2V7%20%20c0-0.8-0.4-1.6-1.2-2.1l-8-4.7c-0.7-0.4-1.6-0.4-2.4%2C0L1.2%2C5C0.4%2C5.4%2C0%2C6.2%2C0%2C7v9.4c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l5.5-3.2l3.8-2.2l5.5-3.2c0.7-0.4%2C1.6-0.4%2C2.4%2C0l4.3%2C2.5c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v5c0%2C0.8-0.4%2C1.6-1.2%2C2.1%20%20L29%2C28.8c-0.7%2C0.4-1.6%2C0.4-2.4%2C0l-4.3-2.5c-0.7-0.4-1.2-1.2-1.2-2.1V21l-3.8%2C2.2v3.3c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l8.1-4.7c0.7-0.4%2C1.2-1.2%2C1.2-2.1V17c0-0.8-0.4-1.6-1.2-2.1L29%2C10.2z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\"","export default \"10f062d02df4af77.png\"","export default \"f158a440053a5ad2.png\"","export default \"c2cd04251aa24c34.png\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2214%22%20height%3D%2215%22%20viewBox%3D%220%200%2014%2015%22%20fill%3D%22black%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20style%3D%22mix-blend-mode%3Adarken%22%3E%3Cpath%20d%3D%22M4.15217%201.55141C3.96412%201.52242%203.95619%201.51902%204.04468%201.5055C4.21427%201.47958%204.61472%201.51491%204.89067%201.58012C5.53489%201.73232%206.12109%202.12221%206.74683%202.81466L6.91307%202.99862L7.15088%202.96062C8.15274%202.8006%209.17194%202.92778%2010.0244%203.31918C10.2589%203.42686%2010.6287%203.64121%2010.6749%203.69629C10.6896%203.71384%2010.7166%203.82684%2010.7349%203.94742C10.7982%204.36458%2010.7665%204.68434%2010.6382%204.92317C10.5683%205.05313%2010.5644%205.09432%2010.6114%205.20554C10.6489%205.2943%2010.7534%205.35999%2010.8569%205.35985C11.0687%205.35956%2011.2968%205.0192%2011.4024%204.54561L11.4444%204.3575L11.5275%204.45109C11.9835%204.96459%2012.3417%205.66488%2012.4032%206.16335L12.4192%206.29332L12.3426%206.17517C12.2107%205.97186%2012.0781%205.83346%2011.9084%205.72183C11.6024%205.52062%2011.2789%205.45215%2010.4222%205.40727C9.64839%205.36675%209.21045%205.30106%208.77621%205.16032C8.03738%204.9209%207.66493%204.60204%206.78729%203.4576C6.39748%202.94928%206.15654%202.66804%205.91687%202.44155C5.37228%201.92691%204.83716%201.65701%204.15217%201.55141Z%22%2F%3E%3Cpath%20d%3D%22M10.8494%202.68637C10.8689%202.34575%2010.9153%202.12108%2011.0088%201.9159C11.0458%201.83469%2011.0804%201.76822%2011.0858%201.76822C11.0911%201.76822%2011.075%201.82816%2011.05%201.90142C10.9821%202.10054%2010.9709%202.3729%2011.0177%202.68978C11.0771%203.09184%2011.1109%203.14985%2011.5385%203.58416C11.739%203.78788%2011.9723%204.0448%2012.0568%204.15511L12.2106%204.35568L12.0568%204.21234C11.8688%204.03705%2011.4364%203.6952%2011.3409%203.64633C11.2768%203.61356%2011.2673%203.61413%2011.2278%203.65321C11.1914%203.68922%2011.1837%203.74333%2011.1787%203.99915C11.1708%204.39786%2011.1161%204.65377%2010.9842%204.90965C10.9128%205.04805%2010.9015%205.01851%2010.9661%204.8623C11.0143%204.74566%2011.0192%204.69439%2011.0189%204.30842C11.0181%203.53291%2010.9255%203.34647%2010.3823%203.02709C10.2447%202.94618%2010.0179%202.8295%209.87839%202.76778C9.73887%202.70606%209.62805%202.6523%209.63208%202.64828C9.64746%202.63307%2010.1772%202.78675%2010.3905%202.86828C10.7077%202.98954%2010.76%203.00526%2010.7985%202.99063C10.8244%202.98082%2010.8369%202.90608%2010.8494%202.68637Z%22%2F%3E%3Cpath%20d%3D%22M4.51745%204.01304C4.13569%203.49066%203.89948%202.68973%203.95062%202.091L3.96643%201.90572L4.05333%201.92148C4.21652%201.95106%204.49789%202.05515%204.62964%202.13469C4.9912%202.35293%205.14773%202.64027%205.30697%203.37811C5.35362%203.59423%205.41482%203.8388%205.44298%203.9216C5.48831%204.05487%205.65962%204.36617%205.7989%204.56834C5.89922%204.71395%205.83258%204.78295%205.61082%204.76305C5.27215%204.73267%204.8134%204.41799%204.51745%204.01304Z%22%2F%3E%3Cpath%20d%3D%22M10.3863%207.90088C8.60224%207.18693%207.97389%206.56721%207.97389%205.52157C7.97389%205.36769%207.97922%205.24179%207.98571%205.24179C7.99221%205.24179%208.06124%205.29257%208.1391%205.35465C8.50088%205.64305%208.906%205.76623%2010.0275%205.92885C10.6875%206.02455%2011.0589%206.10185%2011.4015%206.21477C12.4904%206.57371%2013.1641%207.30212%2013.3248%208.29426C13.3715%208.58255%2013.3441%209.12317%2013.2684%209.4081C13.2087%209.63315%2013.0263%2010.0388%2012.9779%2010.0544C12.9645%2010.0587%2012.9514%2010.0076%2012.9479%209.93809C12.9296%209.56554%2012.7402%209.20285%2012.4221%208.93116C12.0604%208.62227%2011.5745%208.37633%2010.3863%207.90088Z%22%2F%3E%3Cpath%20d%3D%22M9.13385%208.19748C9.11149%208.06527%209.07272%207.89643%209.04769%207.82228L9.00217%207.68748L9.08672%207.7818C9.20374%207.91233%209.2962%208.07937%209.37457%208.30185C9.43438%208.47165%209.44111%208.52215%209.44066%208.79807C9.4402%209.06896%209.43273%209.12575%209.3775%209.27858C9.29042%209.51959%209.18233%209.69048%209.00097%209.87391C8.67507%2010.2036%208.25607%2010.3861%207.65143%2010.4618C7.54633%2010.4749%207.24%2010.4971%206.97069%2010.511C6.292%2010.5461%205.84531%2010.6186%205.44393%2010.7587C5.38623%2010.7788%205.3347%2010.7911%205.32947%2010.7859C5.31323%2010.7698%205.58651%2010.6079%205.81223%2010.4998C6.1305%2010.3474%206.44733%2010.2643%207.15719%2010.1468C7.50785%2010.0887%207.86998%2010.0183%207.96194%209.99029C8.83033%209.72566%209.27671%209.04276%209.13385%208.19748Z%22%2F%3E%3Cpath%20d%3D%22M9.95169%209.64109C9.71465%209.13463%209.66022%208.64564%209.79009%208.18961C9.80399%208.14088%209.82632%208.101%209.83976%208.101C9.85319%208.101%209.90913%208.13105%209.96404%208.16777C10.0733%208.24086%2010.2924%208.36395%2010.876%208.68023C11.6043%209.0749%2012.0196%209.3805%2012.302%209.72965C12.5493%2010.0354%2012.7023%2010.3837%2012.776%2010.8084C12.8177%2011.0489%2012.7932%2011.6277%2012.7311%2011.8699C12.5353%2012.6337%2012.0802%2013.2336%2011.4311%2013.5837C11.336%2013.635%2011.2506%2013.6771%2011.2414%2013.6773C11.2321%2013.6775%2011.2668%2013.5899%2011.3184%2013.4827C11.5367%2013.029%2011.5616%2012.5877%2011.3965%2012.0965C11.2954%2011.7957%2011.0893%2011.4287%2010.6732%2010.8084C10.1893%2010.0873%2010.0707%209.89539%209.95169%209.64109Z%22%2F%3E%3Cpath%20d%3D%22M3.25046%2012.3737C3.91252%2011.8181%204.73629%2011.4234%205.48666%2011.3022C5.81005%2011.25%206.34877%2011.2707%206.64823%2011.3469C7.12824%2011.469%207.55763%2011.7425%207.78094%2012.0683C7.99918%2012.3867%208.09281%2012.6642%208.19029%2013.2816C8.22875%2013.5252%208.27057%2013.7697%208.28323%2013.8251C8.35644%2014.1451%208.4989%2014.4008%208.67544%2014.5293C8.95583%2014.7333%209.43865%2014.7459%209.91362%2014.5618C9.99423%2014.5305%2010.0642%2014.5089%2010.0691%2014.5138C10.0864%2014.5308%209.84719%2014.6899%209.67847%2014.7737C9.45143%2014.8864%209.2709%2014.93%209.03102%2014.93C8.59601%2014.93%208.23486%2014.7101%207.9335%2014.2616C7.87419%2014.1733%207.7409%2013.909%207.63729%2013.6741C7.3191%2012.9528%207.16199%2012.7331%206.79255%2012.4926C6.47104%2012.2834%206.05641%2012.2459%205.74449%2012.3979C5.33475%2012.5976%205.22043%2013.118%205.51389%2013.4478C5.63053%2013.5789%205.84803%2013.6919%206.02588%2013.7139C6.35861%2013.7551%206.64455%2013.5035%206.64455%2013.1696C6.64455%2012.9528%206.56071%2012.8291%206.34966%2012.7344C6.0614%2012.6051%205.75156%2012.7562%205.75304%2013.0254C5.75368%2013.1402%205.80396%2013.2122%205.91971%2013.2643C5.99397%2013.2977%205.99569%2013.3003%205.93514%2013.2878C5.67066%2013.2333%205.6087%2012.9164%205.82135%2012.706C6.07667%2012.4535%206.60461%2012.5649%206.78591%2012.9097C6.86208%2013.0545%206.87092%2013.3429%206.80451%2013.517C6.6559%2013.9068%206.22256%2014.1117%205.78297%2014.0002C5.48368%2013.9242%205.36181%2013.842%205.00097%2013.4726C4.37395%2012.8306%204.13053%2012.7062%203.22657%2012.566L3.05335%2012.5391L3.25046%2012.3737Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M0.308383%200.883984C2.40235%203.40996%203.84457%204.45213%204.00484%204.67231C4.13717%204.85412%204.08737%205.01757%203.86067%205.14567C3.7346%205.21689%203.47541%205.28905%203.34564%205.28905C3.19887%205.28905%203.14847%205.23278%203.14847%205.23278C3.06337%205.15255%203.01544%205.16658%202.5784%204.39555C1.97166%203.45981%201.46389%202.68357%201.45004%202.67057C1.41801%202.64052%201.41856%202.64153%202.51654%204.59413C2.69394%205.0011%202.55182%205.15049%202.55182%205.20845C2.55182%205.32636%202.51946%205.38834%202.37311%205.55059C2.12914%205.8211%202.02008%206.12505%201.94135%206.7541C1.8531%207.45926%201.60492%207.95737%200.917156%208.80989C0.514562%209.30893%200.448686%209.4004%200.3471%209.60153C0.219144%209.85482%200.183961%209.99669%200.169701%2010.3165C0.154629%2010.6547%200.183983%2010.8732%200.287934%2011.1965C0.378939%2011.4796%200.473932%2011.6665%200.716778%2012.0403C0.926351%2012.3629%201.04702%2012.6027%201.04702%2012.6965C1.04702%2012.7711%201.06136%2012.7712%201.38611%2012.6983C2.16328%2012.5239%202.79434%2012.2171%203.14925%2011.8411C3.36891%2011.6084%203.42048%2011.4799%203.42215%2011.1611C3.42325%2010.9525%203.41587%2010.9088%203.35914%2010.7888C3.2668%2010.5935%203.09869%2010.4311%202.72817%2010.1794C2.2427%209.84953%202.03534%209.58398%201.97807%209.21878C1.93108%208.91913%201.98559%208.70771%202.25416%208.14825C2.53214%207.56916%202.60103%207.32239%202.64763%206.73869C2.67773%206.36158%202.71941%206.21286%202.82842%206.09348C2.94212%205.969%203.04447%205.92684%203.32584%205.88863C3.78457%205.82635%204.07667%205.70839%204.31677%205.48849C4.52505%205.29772%204.61221%205.11391%204.62558%204.8372L4.63574%204.62747L4.51934%204.49259C4.09783%204.00411%200.0261003%200.5%200.000160437%200.5C-0.00538105%200.5%200.133325%200.672804%200.308383%200.883984ZM1.28364%2010.6992C1.37894%2010.5314%201.3283%2010.3158%201.16889%2010.2104C1.01827%2010.1109%200.78428%2010.1578%200.78428%2010.2875C0.78428%2010.3271%200.806303%2010.3559%200.855937%2010.3813C0.939514%2010.424%200.945581%2010.4721%200.879823%2010.5703C0.81323%2010.6698%200.818604%2010.7573%200.894991%2010.8167C1.0181%2010.9125%201.19237%2010.8598%201.28364%2010.6992Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M4.92523%205.99865C4.70988%206.06439%204.50054%206.29124%204.43574%206.5291C4.39621%206.67421%204.41864%206.92875%204.47785%207.00736C4.57351%207.13433%204.66602%207.16778%204.91651%207.16603C5.40693%207.16263%205.83327%206.95358%205.88284%206.69224C5.92347%206.47801%205.73622%206.18112%205.4783%206.05078C5.34521%205.98355%205.06217%205.95688%204.92523%205.99865ZM5.49853%206.44422C5.57416%206.33741%205.54107%206.22198%205.41245%206.14391C5.1675%205.99525%204.79708%206.11827%204.79708%206.34826C4.79708%206.46274%204.99025%206.58765%205.16731%206.58765C5.28516%206.58765%205.44644%206.5178%205.49853%206.44422Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\"","/*eslint-disable*/module.exports={messages:{\"$-\":\"$-\",\"$<0/>\":\"$<0/>\",\"${0}\":[\"$\",[\"0\"]],\"(${0})\":[\"($\",[\"0\"],\")\"],\"(View on Explorer)\":\"(View on Explorer)\",\"(clear all)\":\"(clear all)\",\"(edit)\":\"(edit)\",\"- Remove recipient\":\"- Remove recipient\",\"0 UNI / week\":\"0 UNI / week\",\"25%\":\"25%\",\"50%\":\"50%\",\"75%\":\"75%\",\"<0/> All Proposals\":\"<0/> All Proposals\",\"<0/> Votes\":\"<0/> Votes\",\"<0>Account analytics and accrued fees<1> ↗ \":\"<0>Account analytics and accrued fees<1> ↗ \",\"<0>Current Price:<1><2/><3>{0} per {1}\":[\"<0>Current Price:<1><2/><3>\",[\"0\"],\" per \",[\"1\"],\"\"],\"<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.\":\"<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.\",\"<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.\":\"<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.\",\"<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.\":\"<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.\",\"<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.\":\"<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.\",\"<0>Unlock voting to prepare for the next proposal.\":\"<0>Unlock voting to prepare for the next proposal.\",\"<0>🎉 Welcome to team Unicorn :) <1>🎉\":\"<0>🎉 Welcome to team Unicorn :) <1>🎉\",\"A minimum threshold of 0.25% of the total UNI supply is required to submit proposals\":\"A minimum threshold of 0.25% of the total UNI supply is required to submit proposals\",\"About\":\"About\",\"Accept\":\"Accept\",\"Account\":\"Account\",\"Active\":\"Active\",\"Add\":\"Add\",\"Add <0/> and <1/> to Uniswap V2\":\"Add <0/> and <1/> to Uniswap V2\",\"Add Delegate +\":\"Add Delegate +\",\"Add Liquidity\":\"Add Liquidity\",\"Add V2 Liquidity\":\"Add V2 Liquidity\",\"Add liquidity.\":\"Add liquidity.\",\"Add more liquidity\":\"Add more liquidity\",\"Add {0} to Metamask <0/>\":[\"Add \",[\"0\"],\" to Metamask <0/>\"],\"Add {0}-{1} liquidity\":[\"Add \",[\"0\"],\"-\",[\"1\"],\" liquidity\"],\"Add {0}/{1} V3 liquidity\":[\"Add \",[\"0\"],\"/\",[\"1\"],\" V3 liquidity\"],\"Added {0}\":[\"Added \",[\"0\"]],\"Address has no available claim\":\"Address has no available claim\",\"Against\":\"Against\",\"Allow LP token migration\":\"Allow LP token migration\",\"Allow high price impact trades and skip the confirm screen. Use at your own risk.\":\"Allow high price impact trades and skip the confirm screen. Use at your own risk.\",\"Allow the Uniswap Protocol to use your {0}\":[\"Allow the Uniswap Protocol to use your \",[\"0\"]],\"Allowed\":\"Allowed\",\"Amount\":\"Amount\",\"An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.\":\"An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.\",\"Approval pending <0/>\":\"Approval pending <0/>\",\"Approve\":\"Approve\",\"Approve Token\":\"Approve Token\",\"Approve {0}\":[\"Approve \",[\"0\"]],\"Approve {0} first\":[\"Approve \",[\"0\"],\" first\"],\"Approved\":\"Approved\",\"Approving\":\"Approving\",\"Approving {0}\":[\"Approving \",[\"0\"]],\"Arbiscan\":\"Arbiscan\",\"Arbitrum Bridge\":\"Arbitrum Bridge\",\"Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.\":\"Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.\",\"Are you sure?\":\"Are you sure?\",\"As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI\":\"As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI\",\"At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.\":[\"At least \",[\"0\"],\" \",[\"1\"],\" and \",[\"2\"],\" \",[\"3\"],\" will be refunded to your wallet due to selected price range.\"],\"Auto\":\"Auto\",\"Auto Router API\":\"Auto Router API\",\"Available to deposit: {0}\":[\"Available to deposit: \",[\"0\"]],\"Balance: {0}\":[\"Balance: \",[\"0\"]],\"Best for exotic pairs.\":\"Best for exotic pairs.\",\"Best for most pairs.\":\"Best for most pairs.\",\"Best for stable pairs.\":\"Best for stable pairs.\",\"Best for very stable pairs.\":\"Best for very stable pairs.\",\"Best price route costs ~{formattedGasPriceString} in gas.\":[\"Best price route costs ~\",[\"formattedGasPriceString\"],\" in gas.\"],\"Blocked address\":\"Blocked address\",\"Bridge\":\"Bridge\",\"By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.\":\"By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.\",\"By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.\":\"By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.\",\"By connecting a wallet, you agree to Uniswap Labs’ <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.\":\"By connecting a wallet, you agree to Uniswap Labs’ <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.\",\"Canceled\":\"Canceled\",\"Change\":\"Change\",\"Charts\":\"Charts\",\"Check network status\":\"Check network status\",\"Check out our v3 LP walkthrough and migration guides.\":\"Check out our v3 LP walkthrough and migration guides.\",\"Claim\":\"Claim\",\"Claim <0/> for {0}\":[\"Claim <0/> for \",[\"0\"]],\"Claim UNI\":\"Claim UNI\",\"Claim UNI Token\":\"Claim UNI Token\",\"Claim UNI reward for {0}\":[\"Claim UNI reward for \",[\"0\"]],\"Claim fees\":\"Claim fees\",\"Claim your UNI tokens\":\"Claim your UNI tokens\",\"Claimed\":\"Claimed\",\"Claimed UNI!\":\"Claimed UNI!\",\"Claimed!\":\"Claimed!\",\"Claiming\":\"Claiming\",\"Claiming UNI\":\"Claiming UNI\",\"Claiming {0} UNI\":[\"Claiming \",[\"0\"],\" UNI\"],\"Clear All\":\"Clear All\",\"Clear all\":\"Clear all\",\"Close\":\"Close\",\"Closed\":\"Closed\",\"Collect\":\"Collect\",\"Collect as WETH\":\"Collect as WETH\",\"Collect fees\":\"Collect fees\",\"Collect {0}/{1} fees\":[\"Collect \",[\"0\"],\"/\",[\"1\"],\" fees\"],\"Collected\":\"Collected\",\"Collecting\":\"Collecting\",\"Collecting fees\":\"Collecting fees\",\"Collecting fees will withdraw currently available fees for you.\":\"Collecting fees will withdraw currently available fees for you.\",\"Confirm\":\"Confirm\",\"Confirm Supply\":\"Confirm Supply\",\"Confirm Swap\":\"Confirm Swap\",\"Confirm swap\":\"Confirm swap\",\"Confirm this transaction in your wallet\":\"Confirm this transaction in your wallet\",\"Confirm transaction in wallet\":\"Confirm transaction in wallet\",\"Connect Wallet\":\"Connect Wallet\",\"Connect a wallet\":\"Connect a wallet\",\"Connect to a wallet to find pools\":\"Connect to a wallet to find pools\",\"Connect to a wallet to view your V2 liquidity.\":\"Connect to a wallet to view your V2 liquidity.\",\"Connect to a wallet to view your liquidity.\":\"Connect to a wallet to view your liquidity.\",\"Connect wallet to swap\":\"Connect wallet to swap\",\"Connected with {name}\":[\"Connected with \",[\"name\"]],\"Copied\":\"Copied\",\"Copy Address\":\"Copy Address\",\"Create Pool & Supply\":\"Create Pool & Supply\",\"Create Proposal\":\"Create Proposal\",\"Create a pair\":\"Create a pair\",\"Create a pool\":\"Create a pool\",\"Create an issue on GitHub\":\"Create an issue on GitHub\",\"Create pool and add {0}/{1} V3 liquidity\":[\"Create pool and add \",[\"0\"],\"/\",[\"1\"],\" V3 liquidity\"],\"Create pool.\":\"Create pool.\",\"Create {0}/{1} V3 pool\":[\"Create \",[\"0\"],\"/\",[\"1\"],\" V3 pool\"],\"Current price\":\"Current price\",\"Current {0} Price:\":[\"Current \",[\"0\"],\" Price:\"],\"Custom\":\"Custom\",\"Dark Theme\":\"Dark Theme\",\"Defeated\":\"Defeated\",\"Delegate Votes\":\"Delegate Votes\",\"Delegate voting power to {0}\":[\"Delegate voting power to \",[\"0\"]],\"Delegated to:\":\"Delegated to:\",\"Delegating votes\":\"Delegating votes\",\"Deposit\":\"Deposit\",\"Deposit Amounts\":\"Deposit Amounts\",\"Deposit UNI-V2 LP Tokens\":\"Deposit UNI-V2 LP Tokens\",\"Deposit liquidity\":\"Deposit liquidity\",\"Deposit tokens to the {label} network.\":[\"Deposit tokens to the \",[\"label\"],\" network.\"],\"Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.\":\"Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.\",\"Deposited liquidity:\":\"Deposited liquidity:\",\"Deposited {0} UNI-V2\":[\"Deposited \",[\"0\"],\" UNI-V2\"],\"Depositing Liquidity\":\"Depositing Liquidity\",\"Description\":\"Description\",\"Detailed\":\"Detailed\",\"Details\":\"Details\",\"Disconnect\":\"Disconnect\",\"Discord\":\"Discord\",\"Dismiss\":\"Dismiss\",\"Docs\":\"Docs\",\"Don’t see one of your v2 positions? <0>Import it.\":\"Don’t see one of your v2 positions? <0>Import it.\",\"Earned UNI tokens represent voting shares in Uniswap governance.\":\"Earned UNI tokens represent voting shares in Uniswap governance.\",\"Edit\":\"Edit\",\"Efficiency Comparison\":\"Efficiency Comparison\",\"Enter a percent\":\"Enter a percent\",\"Enter a recipient\":\"Enter a recipient\",\"Enter a valid slippage percentage\":\"Enter a valid slippage percentage\",\"Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.\":\"Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.\",\"Enter an amount\":\"Enter an amount\",\"Enter valid list location\":\"Enter valid list location\",\"Enter valid token address\":\"Enter valid token address\",\"Enter {0} amount\":[\"Enter \",[\"0\"],\" amount\"],\"Error\":\"Error\",\"Error connecting\":\"Error connecting\",\"Error connecting. Try refreshing the page.\":\"Error connecting. Try refreshing the page.\",\"Error details\":\"Error details\",\"Error importing list\":\"Error importing list\",\"Estimate may differ due to your wallet gas settings\":\"Estimate may differ due to your wallet gas settings\",\"Estimated network fee\":\"Estimated network fee\",\"Etherscan\":\"Etherscan\",\"Executed\":\"Executed\",\"Expanded results from inactive Token Lists\":\"Expanded results from inactive Token Lists\",\"Expected Output\":\"Expected Output\",\"Expert Mode\":\"Expert Mode\",\"Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.\":\"Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.\",\"Expired\":\"Expired\",\"Explore Uniswap Analytics.\":\"Explore Uniswap Analytics.\",\"Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.\":[\"Failed to switch networks from the Uniswap Interface. In order to use Uniswap on \",[\"0\"],\", you must change the network in your wallet.\"],\"Fee Tier\":\"Fee Tier\",\"Fee tier\":\"Fee tier\",\"Fetching best price...\":\"Fetching best price...\",\"Fetching best price…\":\"Fetching best price…\",\"For\":\"For\",\"For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.\":\"For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.\",\"From\":\"From\",\"From (at most)\":\"From (at most)\",\"Full Range\":\"Full Range\",\"Full range positions may earn less fees than concentrated positions. Learn more <0>here.\":\"Full range positions may earn less fees than concentrated positions. Learn more <0>here.\",\"Get support on Discord\":\"Get support on Discord\",\"Help Center\":\"Help Center\",\"Hide\":\"Hide\",\"Hide closed positions\":\"Hide closed positions\",\"High Price Impact\":\"High Price Impact\",\"How this app uses APIs\":\"How this app uses APIs\",\"I understand\":\"I understand\",\"If you purchase a token from this list, you may not be able to sell it back.\":\"If you purchase a token from this list, you may not be able to sell it back.\",\"Import\":\"Import\",\"Import List\":\"Import List\",\"Import Pool\":\"Import Pool\",\"Import V2 Pool\":\"Import V2 Pool\",\"Import at your own risk\":\"Import at your own risk\",\"In range\":\"In range\",\"Increase Liquidity\":\"Increase Liquidity\",\"Initial prices and pool share\":\"Initial prices and pool share\",\"Initializing...\":\"Initializing...\",\"Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.\":[\"Input is estimated. You will sell at most <0>\",[\"0\"],\" \",[\"1\"],\" or the transaction will revert.\"],\"Install Metamask\":\"Install Metamask\",\"Insufficient liquidity for this trade.\":\"Insufficient liquidity for this trade.\",\"Insufficient {0}\":[\"Insufficient \",[\"0\"]],\"Insufficient {0} balance\":[\"Insufficient \",[\"0\"],\" balance\"],\"Interface Settings\":\"Interface Settings\",\"Invalid pair\":\"Invalid pair\",\"Invalid pair.\":\"Invalid pair.\",\"Invalid price input\":\"Invalid price input\",\"Invalid range selected. The min price must be lower than the max price.\":\"Invalid range selected. The min price must be lower than the max price.\",\"Invalid recipient\":\"Invalid recipient\",\"Language\":\"Language\",\"Learn\":\"Learn\",\"Learn about providing liquidity\":\"Learn about providing liquidity\",\"Learn more\":\"Learn more\",\"Legal & Privacy\":\"Legal & Privacy\",\"Light Theme\":\"Light Theme\",\"Liquidity\":\"Liquidity\",\"Liquidity data not available.\":\"Liquidity data not available.\",\"Liquidity provider rewards\":\"Liquidity provider rewards\",\"Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.\":\"Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.\",\"Lists\":\"Lists\",\"Loaded\":\"Loaded\",\"Loading\":\"Loading\",\"MAX\":\"MAX\",\"Manage\":\"Manage\",\"Manage Liquidity in Rewards Pool\":\"Manage Liquidity in Rewards Pool\",\"Manage Token Lists\":\"Manage Token Lists\",\"Manage this pool.\":\"Manage this pool.\",\"Max\":\"Max\",\"Max Price\":\"Max Price\",\"Max price\":\"Max price\",\"Max slippage\":\"Max slippage\",\"Max:\":\"Max:\",\"Maximum sent\":\"Maximum sent\",\"Menu\":\"Menu\",\"Migrate\":\"Migrate\",\"Migrate Liquidity to V3\":\"Migrate Liquidity to V3\",\"Migrate V2 Liquidity\":\"Migrate V2 Liquidity\",\"Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.\":\"Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.\",\"Migrate {0}/{1} liquidity to V3\":[\"Migrate \",[\"0\"],\"/\",[\"1\"],\" liquidity to V3\"],\"Migrating\":\"Migrating\",\"Min Price\":\"Min Price\",\"Min price\":\"Min price\",\"Min:\":\"Min:\",\"Minimum received\":\"Minimum received\",\"Missing dependencies\":\"Missing dependencies\",\"Mock Toggle\":\"Mock Toggle\",\"More\":\"More\",\"Network Fee\":\"Network Fee\",\"Network Warning\":\"Network Warning\",\"Network fees exceed 50% of the swap amount!\":\"Network fees exceed 50% of the swap amount!\",\"New Position\":\"New Position\",\"No V2 Liquidity found.\":\"No V2 Liquidity found.\",\"No active pools\":\"No active pools\",\"No data\":\"No data\",\"No description.\":\"No description.\",\"No liquidity found.\":\"No liquidity found.\",\"No pool found.\":\"No pool found.\",\"No proposals found.\":\"No proposals found.\",\"No results found.\":\"No results found.\",\"Not created\":\"Not created\",\"OFF\":\"OFF\",\"ON\":\"ON\",\"ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.\":\"ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.\",\"Off\":\"Off\",\"On\":\"On\",\"Once you are happy with the rate click supply to review.\":\"Once you are happy with the rate click supply to review.\",\"Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.\":[\"Only UNI votes that were self delegated or delegated to another address before block \",[\"0\"],\" are eligible for voting.\"],\"Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.\":\"Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.\",\"Optimism Gateway\":\"Optimism Gateway\",\"Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.\":\"Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.\",\"Optimistic Etherscan\":\"Optimistic Etherscan\",\"Out of range\":\"Out of range\",\"Output is estimated.\":\"Output is estimated.\",\"Output is estimated. If the price changes by more than {0}% your transaction will revert.\":[\"Output is estimated. If the price changes by more than \",[\"0\"],\"% your transaction will revert.\"],\"Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.\":[\"Output is estimated. You will receive at least <0>\",[\"0\"],\" \",[\"1\"],\" or the transaction will revert.\"],\"Output will be sent to <0>{0}\":[\"Output will be sent to <0>\",[\"0\"],\"\"],\"Owner\":\"Owner\",\"Participating pools\":\"Participating pools\",\"Pending\":\"Pending\",\"Please confirm you would like to remove this list by typing REMOVE\":\"Please confirm you would like to remove this list by typing REMOVE\",\"Please connect to Layer 1 Ethereum\":\"Please connect to Layer 1 Ethereum\",\"Please connect to a supported network in the dropdown menu or in your wallet.\":\"Please connect to a supported network in the dropdown menu or in your wallet.\",\"Please type the word \\\"{confirmWord}\\\" to enable expert mode.\":[\"Please type the word \\\"\",[\"confirmWord\"],\"\\\" to enable expert mode.\"],\"Polygon Bridge\":\"Polygon Bridge\",\"Polygonscan\":\"Polygonscan\",\"Pool\":\"Pool\",\"Pool Found!\":\"Pool Found!\",\"Pool Rate\":\"Pool Rate\",\"Pool rate\":\"Pool rate\",\"Pool tokens in rewards pool:\":\"Pool tokens in rewards pool:\",\"Pooled {0}:\":[\"Pooled \",[\"0\"],\":\"],\"Pools Overview\":\"Pools Overview\",\"Preview\":\"Preview\",\"Price\":\"Price\",\"Price Difference:\":\"Price Difference:\",\"Price Impact\":\"Price Impact\",\"Price Impact Too High\":\"Price Impact Too High\",\"Price Updated\":\"Price Updated\",\"Price impact\":\"Price impact\",\"Price range\":\"Price range\",\"Price updated\":\"Price updated\",\"Price:\":\"Price:\",\"Prices and pool share\":\"Prices and pool share\",\"Proposal\":\"Proposal\",\"Proposal Submitted\":\"Proposal Submitted\",\"Proposal Title\":\"Proposal Title\",\"Proposals\":\"Proposals\",\"Proposals submitted by community members will appear here.\":\"Proposals submitted by community members will appear here.\",\"Proposed Action\":\"Proposed Action\",\"Proposer\":\"Proposer\",\"Protocol Disclaimer\":\"Protocol Disclaimer\",\"Queued\":\"Queued\",\"Rates\":\"Rates\",\"Read more about UNI\":\"Read more about UNI\",\"Read more about Uniswap governance\":\"Read more about Uniswap governance\",\"Read more about providing liquidity\":\"Read more about providing liquidity\",\"Read more about unsupported assets\":\"Read more about unsupported assets\",\"Recent Transactions\":\"Recent Transactions\",\"Recent transactions\":\"Recent transactions\",\"Recipient\":\"Recipient\",\"Reload the page\":\"Reload the page\",\"Remove\":\"Remove\",\"Remove <0/> and <1/>\":\"Remove <0/> and <1/>\",\"Remove Amount\":\"Remove Amount\",\"Remove Delegate\":\"Remove Delegate\",\"Remove Liquidity\":\"Remove Liquidity\",\"Remove list\":\"Remove list\",\"Removing {0} {1} and {2} {3}\":[\"Removing \",[\"0\"],\" \",[\"1\"],\" and \",[\"2\"],\" \",[\"3\"]],\"Removing {0} {1} and{2} {3}\":[\"Removing \",[\"0\"],\" \",[\"1\"],\" and\",[\"2\"],\" \",[\"3\"]],\"Request Features\":\"Request Features\",\"Reset\":\"Reset\",\"Return\":\"Return\",\"Review swap\":\"Review swap\",\"Search by token name or address\":\"Search by token name or address\",\"Search name or paste address\":\"Search name or paste address\",\"Select Pair\":\"Select Pair\",\"Select a network\":\"Select a network\",\"Select a token\":\"Select a token\",\"Select a token to find your v2 liquidity.\":\"Select a token to find your v2 liquidity.\",\"Select an action\":\"Select an action\",\"Selected Range\":\"Selected Range\",\"Self\":\"Self\",\"Self Delegate\":\"Self Delegate\",\"Set Price Range\":\"Set Price Range\",\"Set Starting Price\":\"Set Starting Price\",\"Settings\":\"Settings\",\"Share of Pool\":\"Share of Pool\",\"Share of Pool:\":\"Share of Pool:\",\"Show Portis\":\"Show Portis\",\"Show closed positions\":\"Show closed positions\",\"Simple\":\"Simple\",\"Slippage tolerance\":\"Slippage tolerance\",\"Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.\":\"Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.\",\"Something went wrong\":\"Something went wrong\",\"Something went wrong.\":\"Something went wrong.\",\"Step 1. Get UNI-V2 Liquidity tokens\":\"Step 1. Get UNI-V2 Liquidity tokens\",\"Submit new proposal\":\"Submit new proposal\",\"Submitting Proposal\":\"Submitting Proposal\",\"Submitting Vote\":\"Submitting Vote\",\"Succeeded\":\"Succeeded\",\"Success\":\"Success\",\"Supply\":\"Supply\",\"Supplying {0} {1} and {2} {3}\":[\"Supplying \",[\"0\"],\" \",[\"1\"],\" and \",[\"2\"],\" \",[\"3\"]],\"Swap\":\"Swap\",\"Swap <0/> for exactly <1/>\":\"Swap <0/> for exactly <1/>\",\"Swap Anyway\":\"Swap Anyway\",\"Swap details\":\"Swap details\",\"Swap exactly <0/> for <1/>\":\"Swap exactly <0/> for <1/>\",\"Swap failed: {0}\":[\"Swap failed: \",[\"0\"]],\"Swap summary\":\"Swap summary\",\"Swapping {0} {1} for {2} {3}\":[\"Swapping \",[\"0\"],\" \",[\"1\"],\" for \",[\"2\"],\" \",[\"3\"]],\"Take a 10 minute survey to help us improve your experience in the Uniswap app.\":\"Take a 10 minute survey to help us improve your experience in the Uniswap app.\",\"Tell us what you think ↗\":\"Tell us what you think ↗\",\"Thanks for being part of the Uniswap community <0/>\":\"Thanks for being part of the Uniswap community <0/>\",\"The % you will earn in fees.\":\"The % you will earn in fees.\",\"The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.\":\"The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.\",\"The app fetches blockchain data from The Graph’s hosted service.\":\"The app fetches blockchain data from The Graph’s hosted service.\",\"The app fetches on-chain data and constructs contract calls with an Infura API.\":\"The app fetches on-chain data and constructs contract calls with an Infura API.\",\"The app fetches the optimal trade route from a Uniswap Labs server.\":\"The app fetches the optimal trade route from a Uniswap Labs server.\",\"The app logs anonymized usage statistics in order to improve over time.\":\"The app logs anonymized usage statistics in order to improve over time.\",\"The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.\":\"The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.\",\"The cost of sending this transaction is more than half of the value of the input amount.\":\"The cost of sending this transaction is more than half of the value of the input amount.\",\"The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.\":\"The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.\",\"The estimated difference between the USD values of input and output amounts.\":\"The estimated difference between the USD values of input and output amounts.\",\"The input token cannot be transferred. There may be an issue with the input token.\":\"The input token cannot be transferred. There may be an issue with the input token.\",\"The market price is outside your specified price range. Single-asset deposit only.\":\"The market price is outside your specified price range. Single-asset deposit only.\",\"The most recent block number on this network. Prices update on every block.\":\"The most recent block number on this network. Prices update on every block.\",\"The output token cannot be transferred. There may be an issue with the output token.\":\"The output token cannot be transferred. There may be an issue with the output token.\",\"The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.\":\"The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.\",\"The price of this pool is outside of your selected range. Your position is not currently earning fees.\":\"The price of this pool is outside of your selected range. Your position is not currently earning fees.\",\"The price of this pool is within your selected range. Your position is currently earning fees.\":\"The price of this pool is within your selected range. Your position is currently earning fees.\",\"The ratio of tokens you add will set the price of this pool.\":\"The ratio of tokens you add will set the price of this pool.\",\"The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.\":\"The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.\",\"There is no liquidity data.\":\"There is no liquidity data.\",\"This app uses the following third-party APIs:\":\"This app uses the following third-party APIs:\",\"This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.\":\"This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.\",\"This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.\":\"This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.\",\"This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.\":\"This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.\",\"This token is not supported in the Uniswap Labs app\":\"This token is not supported in the Uniswap Labs app\",\"This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the\":[\"This tool will safely migrate your \",[\"0\"],\" liquidity to V3. The process is completely trustless thanks to the\"],\"This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.\":\"This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.\",\"This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.\":\"This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.\",\"Tip: Custom tokens are stored locally in your browser\":\"Tip: Custom tokens are stored locally in your browser\",\"To\":\"To\",\"To (at least)\":\"To (at least)\",\"Token not supported\":\"Token not supported\",\"Tokens\":\"Tokens\",\"Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.\":\"Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.\",\"Top pools\":\"Top pools\",\"Total deposited\":\"Total deposited\",\"Total deposits\":\"Total deposits\",\"Trade Route\":\"Trade Route\",\"Trading\":\"Trading\",\"Transaction Settings\":\"Transaction Settings\",\"Transaction Submitted\":\"Transaction Submitted\",\"Transaction completed in\":\"Transaction completed in\",\"Transaction deadline\":\"Transaction deadline\",\"Transaction pending\":\"Transaction pending\",\"Transaction rejected.\":\"Transaction rejected.\",\"Transaction submitted\":\"Transaction submitted\",\"Transfer Token\":\"Transfer Token\",\"Try Again\":\"Try Again\",\"Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.\":\"Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.\",\"Turn On Expert Mode\":\"Turn On Expert Mode\",\"UNI has arrived\":\"UNI has arrived\",\"UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.\":\"UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.\",\"UNI {0}/{1} Burned\":[\"UNI \",[\"0\"],\"/\",[\"1\"],\" Burned\"],\"UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.\":[\"UNI-V2 LP tokens are required. Once you've added liquidity to the \",[\"0\"],\"-\",[\"1\"],\" pool you can stake your liquidity tokens on this page.\"],\"UNI-V2 {0}-{1}\":[\"UNI-V2 \",[\"0\"],\"-\",[\"1\"]],\"Unclaimed UNI\":\"Unclaimed UNI\",\"Unclaimed fees\":\"Unclaimed fees\",\"Undetermined\":\"Undetermined\",\"Unexpected error. Could not estimate gas for the swap.\":\"Unexpected error. Could not estimate gas for the swap.\",\"Unexpected issue with estimating the gas. Please try again.\":\"Unexpected issue with estimating the gas. Please try again.\",\"Uniswap Governance\":\"Uniswap Governance\",\"Uniswap Labs' Terms of Service\":\"Uniswap Labs' Terms of Service\",\"Uniswap available in: <0>{0}\":[\"Uniswap available in: <0>\",[\"0\"],\"\"],\"Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.\":\"Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.\",\"Uniswap liquidity mining\":\"Uniswap liquidity mining\",\"Uniswap migration contract↗\":\"Uniswap migration contract↗\",\"Unknown Source\":\"Unknown Source\",\"Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.\":[\"Unknown error\",[\"0\"],\". Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.\"],\"Unlock Votes\":\"Unlock Votes\",\"Unlock Voting\":\"Unlock Voting\",\"Unlocking Votes\":\"Unlocking Votes\",\"Unsupported Asset\":\"Unsupported Asset\",\"Unsupported Assets\":\"Unsupported Assets\",\"Unsupported network–switch to another to trade.\":\"Unsupported network–switch to another to trade.\",\"Untitled\":\"Untitled\",\"Unwrap\":\"Unwrap\",\"Unwrap <0/> to {0}\":[\"Unwrap <0/> to \",[\"0\"]],\"Update Delegation\":\"Update Delegation\",\"Update list\":\"Update list\",\"Use the Uniswap Labs API to get faster quotes.\":\"Use the Uniswap Labs API to get faster quotes.\",\"User\":\"User\",\"V2 is not available on Layer 2. Switch to Layer 1 Ethereum.\":\"V2 is not available on Layer 2. Switch to Layer 1 Ethereum.\",\"V2 liquidity\":\"V2 liquidity\",\"V3 {0} Price:\":[\"V3 \",[\"0\"],\" Price:\"],\"View accrued fees and analytics<0>↗\":\"View accrued fees and analytics<0>↗\",\"View list\":\"View list\",\"View on Etherscan\":\"View on Etherscan\",\"View on Explorer\":\"View on Explorer\",\"View transaction on Explorer\":\"View transaction on Explorer\",\"Vote\":\"Vote\",\"Vote Against\":\"Vote Against\",\"Vote For\":\"Vote For\",\"Vote against proposal {proposalId}\":[\"Vote against proposal \",[\"proposalId\"]],\"Vote against proposal {proposalKey}\":[\"Vote against proposal \",[\"proposalKey\"]],\"Vote against proposal {proposalKey} with reason \\\"{0}\\\"\":[\"Vote against proposal \",[\"proposalKey\"],\" with reason \\\"\",[\"0\"],\"\\\"\"],\"Vote for proposal {proposalId}\":[\"Vote for proposal \",[\"proposalId\"]],\"Vote for proposal {proposalKey}\":[\"Vote for proposal \",[\"proposalKey\"]],\"Vote for proposal {proposalKey} with reason \\\"{0}\\\"\":[\"Vote for proposal \",[\"proposalKey\"],\" with reason \\\"\",[\"0\"],\"\\\"\"],\"Vote to abstain on proposal {proposalId}\":[\"Vote to abstain on proposal \",[\"proposalId\"]],\"Vote to abstain on proposal {proposalKey}\":[\"Vote to abstain on proposal \",[\"proposalKey\"]],\"Vote to abstain on proposal {proposalKey} with reason \\\"{0}\\\"\":[\"Vote to abstain on proposal \",[\"proposalKey\"],\" with reason \\\"\",[\"0\"],\"\\\"\"],\"Voting ended {0}\":[\"Voting ended \",[\"0\"]],\"Voting ends approximately {0}\":[\"Voting ends approximately \",[\"0\"]],\"Voting starts approximately {0}\":[\"Voting starts approximately \",[\"0\"]],\"Waiting For Confirmation\":\"Waiting For Confirmation\",\"Wallet Address or ENS name\":\"Wallet Address or ENS name\",\"Weekly Rewards\":\"Weekly Rewards\",\"Welcome to team Unicorn :)\":\"Welcome to team Unicorn :)\",\"When you claim without withdrawing your liquidity remains in the mining pool.\":\"When you claim without withdrawing your liquidity remains in the mining pool.\",\"When you withdraw, the contract will automagically claim UNI on your behalf!\":\"When you withdraw, the contract will automagically claim UNI on your behalf!\",\"When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.\":\"When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.\",\"Withdraw\":\"Withdraw\",\"Withdraw & Claim\":\"Withdraw & Claim\",\"Withdraw deposited liquidity\":\"Withdraw deposited liquidity\",\"Withdrawing {0} UNI-V2\":[\"Withdrawing \",[\"0\"],\" UNI-V2\"],\"Withdrew UNI-V2!\":\"Withdrew UNI-V2!\",\"Wrap\":\"Wrap\",\"Wrap <0/> to {0}\":[\"Wrap <0/> to \",[\"0\"]],\"Wrong Network\":\"Wrong Network\",\"You already have an active or pending proposal\":\"You already have an active or pending proposal\",\"You are creating a pool\":\"You are creating a pool\",\"You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.\":[\"You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current \",[\"0\"],\" price.\"],\"You are the first liquidity provider.\":\"You are the first liquidity provider.\",\"You can either vote on each proposal yourself or delegate your votes to a third party.\":\"You can either vote on each proposal yourself or delegate your votes to a third party.\",\"You can now trade {0}\":[\"You can now trade \",[\"0\"]],\"You don't have enough votes to submit a proposal\":\"You don't have enough votes to submit a proposal\",\"You don’t have liquidity in this pool yet.\":\"You don’t have liquidity in this pool yet.\",\"You may have lost your network connection, or {label} might be down right now.\":[\"You may have lost your network connection, or \",[\"label\"],\" might be down right now.\"],\"You may have lost your network connection.\":\"You may have lost your network connection.\",\"You might consider waiting until the network fees go down to complete this transaction.\":\"You might consider waiting until the network fees go down to complete this transaction.\",\"You must connect an account.\":\"You must connect an account.\",\"You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.\":[\"You must give the Uniswap smart contracts permission to use your \",[\"0\"],\". You only have to do this once per token.\"],\"You must have {formattedProposalThreshold} votes to submit a proposal\":[\"You must have \",[\"formattedProposalThreshold\"],\" votes to submit a proposal\"],\"You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.\":\"You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.\",\"You will also collect fees earned from this position.\":\"You will also collect fees earned from this position.\",\"You will receive\":\"You will receive\",\"You will receive at least {0} {1} or the transaction will revert.\":[\"You will receive at least \",[\"0\"],\" \",[\"1\"],\" or the transaction will revert.\"],\"You will send at most {0} {1} or the transaction will revert.\":[\"You will send at most \",[\"0\"],\" \",[\"1\"],\" or the transaction will revert.\"],\"Your V2 liquidity\":\"Your V2 liquidity\",\"Your active V3 liquidity positions will appear here.\":\"Your active V3 liquidity positions will appear here.\",\"Your liquidity deposits\":\"Your liquidity deposits\",\"Your pool share:\":\"Your pool share:\",\"Your position\":\"Your position\",\"Your position has 0 liquidity, and is not earning fees.\":\"Your position has 0 liquidity, and is not earning fees.\",\"Your position will appear here.\":\"Your position will appear here.\",\"Your position will be 100% composed of {0} at this price\":[\"Your position will be 100% composed of \",[\"0\"],\" at this price\"],\"Your position will be 100% {0} at this price.\":[\"Your position will be 100% \",[\"0\"],\" at this price.\"],\"Your position will not earn fees or be used in trades until the market price moves into your range.\":\"Your position will not earn fees or be used in trades until the market price moves into your range.\",\"Your positions\":\"Your positions\",\"Your rate\":\"Your rate\",\"Your total pool tokens:\":\"Your total pool tokens:\",\"Your transaction cost will be much higher as it includes the gas to create the pool.\":\"Your transaction cost will be much higher as it includes the gas to create the pool.\",\"Your transaction may be frontrun\":\"Your transaction may be frontrun\",\"Your transaction may fail\":\"Your transaction may fail\",\"Your transaction will revert if it has been pending for longer than this period of time.\":\"Your transaction will revert if it has been pending for longer than this period of time.\",\"Your transaction will revert if it is pending for more than this period of time.\":\"Your transaction will revert if it is pending for more than this period of time.\",\"Your transaction will revert if the price changes unfavorably by more than this percentage.\":\"Your transaction will revert if the price changes unfavorably by more than this percentage.\",\"Your transactions will appear here...\":\"Your transactions will appear here...\",\"Your unclaimed UNI\":\"Your unclaimed UNI\",\"after slippage\":\"after slippage\",\"confirm\":\"confirm\",\"for {0}\":[\"for \",[\"0\"]],\"gwei\":\"gwei\",\"has socks emoji\":\"has socks emoji\",\"here.\":\"here.\",\"https:// or ipfs:// or ENS name\":\"https:// or ipfs:// or ENS name\",\"minutes\":\"minutes\",\"via {0}\":[\"via \",[\"0\"]],\"via {0} token list\":[\"via \",[\"0\"],\" token list\"],\"{0, plural, one {Import token} other {Import tokens}}\":[[\"0\",\"plural\",{one:\"Import token\",other:\"Import tokens\"}]],\"{0}\":[[\"0\"]],\"{0} %\":[[\"0\"],\" %\"],\"{0} <0/> per <1/>\":[[\"0\"],\" <0/> per <1/>\"],\"{0} Custom Tokens\":[[\"0\"],\" Custom Tokens\"],\"{0} Deposited\":[[\"0\"],\" Deposited\"],\"{0} ETH\":[[\"0\"],\" ETH\"],\"{0} Fees Earned:\":[[\"0\"],\" Fees Earned:\"],\"{0} Pending\":[[\"0\"],\" Pending\"],\"{0} UNI\":[[\"0\"],\" UNI\"],\"{0} UNI / week\":[[\"0\"],\" UNI / week\"],\"{0} UNI-V2\":[[\"0\"],\" UNI-V2\"],\"{0} UNI-V2 LP tokens available\":[[\"0\"],\" UNI-V2 LP tokens available\"],\"{0} Votes\":[[\"0\"],\" Votes\"],\"{0} per {1}\":[[\"0\"],\" per \",[\"1\"]],\"{0} tokens\":[[\"0\"],\" tokens\"],\"{0} {1} Price:\":[[\"0\"],\" \",[\"1\"],\" Price:\"],\"{0} {nativeCurrencySymbol}\":[[\"0\"],\" \",[\"nativeCurrencySymbol\"]],\"{0} • Added by user\":[[\"0\"],\" • Added by user\"],\"{0}%\":[[\"0\"],\"%\"],\"{0}% fee tier\":[[\"0\"],\"% fee tier\"],\"{0}% pool\":[[\"0\"],\"% pool\"],\"{0}% select\":[[\"0\"],\"% select\"],\"{0}-{1} Liquidity Mining\":[[\"0\"],\"-\",[\"1\"],\" Liquidity Mining\"],\"{0}/{1} LP NFT\":[[\"0\"],\"/\",[\"1\"],\" LP NFT\"],\"{0}/{1} LP Tokens\":[[\"0\"],\"/\",[\"1\"],\" LP Tokens\"],\"{SOCKS_AMOUNT} UNI\":[[\"SOCKS_AMOUNT\"],\" UNI\"],\"{USER_AMOUNT} UNI\":[[\"USER_AMOUNT\"],\" UNI\"],\"{activeTokensOnThisChain} tokens\":[[\"activeTokensOnThisChain\"],\" tokens\"],\"{integrator} fee\":[[\"integrator\"],\" fee\"],\"{label} token bridge\":[[\"label\"],\" token bridge\"],\"{min}m {sec}s\":[[\"min\"],\"m \",[\"sec\"],\"s\"],\"{percentForSlider}%\":[[\"percentForSlider\"],\"%\"],\"{sec}s\":[[\"sec\"],\"s\"],\"{tokenB} per {tokenA}\":[[\"tokenB\"],\" per \",[\"tokenA\"]],\"← Back to Pools Overview\":\"← Back to Pools Overview\"}};","export default \"data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2013C12.5523%2013%2013%2012.5523%2013%2012C13%2011.4477%2012.5523%2011%2012%2011C11.4477%2011%2011%2011.4477%2011%2012C11%2012.5523%2011.4477%2013%2012%2013Z%22%20stroke%3D%22black%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3Cpath%20d%3D%22M19%2013C19.5523%2013%2020%2012.5523%2020%2012C20%2011.4477%2019.5523%2011%2019%2011C18.4477%2011%2018%2011.4477%2018%2012C18%2012.5523%2018.4477%2013%2019%2013Z%22%20stroke%3D%22black%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3Cpath%20d%3D%22M5%2013C5.55228%2013%206%2012.5523%206%2012C6%2011.4477%205.55228%2011%205%2011C4.44772%2011%204%2011.4477%204%2012C4%2012.5523%204.44772%2013%205%2013Z%22%20stroke%3D%22black%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E\"","export default \"d13f13f5694ec91f.svg\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%3E%20%20%3Crect%20width%3D%2224%22%20height%3D%2215.0867%22%20fill%3D%22url%28%23pattern0%29%22%2F%3E%20%20%3Cdefs%3E%20%20%20%20%3Cpattern%20id%3D%22pattern0%22%20patternContentUnits%3D%22objectBoundingBox%22%20width%3D%221%22%20height%3D%221%22%3E%20%20%20%20%20%20%3Cuse%20xlink%3Ahref%3D%22%23image0%22%20transform%3D%22translate%28-0.00968744%29%20scale%280.00339792%200.00540541%29%22%2F%3E%20%20%20%20%3C%2Fpattern%3E%20%20%20%20%3Cimage%20id%3D%22image0%22%20width%3D%22300%22%20height%3D%22185%22%20xlink%3Ahref%3D%22data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAASwAAAC5CAYAAACSoQIxAAAgAElEQVR4Ae19fZgdVZnn761TnQ%2FCtwmugxhkGPXZDIjDoENIuu9twsAm4CS7EpFhWHYktN23AwzC6Dg6xI%2FVWcGsk%2FTtNgQ0MogQ9lkQDAtLTN%2FuhDjIk5koG10eWRwQdAjRYBLIR9epd5%2B3um%2FS6dx7%2B35U3Vt16tx%2Fqu6pc96P33vqd8%2BtOu85BPuxCFRAYF4%2Fn%2BJ4ONNV3izt0AzycRwRzQBjBgPHEfszfMIMIjqOGDNAmAHguDGRb4HxJhPeZOa3yMFe%2BM5%2BR74DbzHzmyC8ST7vZXJ%2Fs9fFL7Z10e8qmGMvpRwBSrn%2F1n0AF97Np07d753rK2eOw%2F4fENG7ffCZYDrTIZzYTJAY%2BB3AvwDoX5nk6PxcaWfHb2fgJ9v%2FC73RTFusrvghYAkrfjGJ1KL21XyO4%2BgPMvhch%2BhcAHMAzIpUaUjCmfEagP8D4ucA2u6z%2BtFwjn4WkngrJgEIWMJKQJDqNfE%2FfJNnvXVQz3OYLwToAmZ8iAjT65UXy3aMfSD8E3x%2BlhVtPdimtv7wevptLG21RjWMgCWshiGMj4DzvsUnn3RAZx2NLDvcSSAZPaXq4zN8Av8YwCZi2rST1PCOHO1LFQgGO2sJK%2BHB7cjzBWDvcihc7jD9UcLdicR8Zv4hkfOY1s73h5fTc5EosUKbgoAlrKbAHJ6Ss1fx1He26UvIx4dBuBzAO8KTbr4kZvwrgx91GI%2FyLneosII88702x0NLWAmJZTCSIn29A3wMwAkJMTvWZjLjN8z8bZrmDhSupxdibaw1LkDAElaMO8JF9%2FAJ6qB%2FrQP%2FegKdF2NTE28ag7cw0V2vjqj1L9xIBxPvkKEOWMKKYWDb8zzXgV5GhKsATIuhicaa5DP2EHAvjai%2BwZvpeWMdTahjlrBiEjgZTU095P9nH%2F4NxHROTMxKtRkMfpqJ1thRV3y6gSWsFsciczefjUP6UwRcY0dTLQ5GGfWjoy6%2BS7vuys1d9Osy1WxxExCwhNUEkEupGCOqLzJjqUNwStWxZTFDgHGQgbXaVV%2B2xNWa2FjCajLulqiaDHgU6ixxRYFqVTItYVUFU%2BOV2vN8hkP6y2N%2F%2FRoXaCXEAgFm%2FgeP3M9v6aHdsTDIcCMsYUUcYHmY7h7yPuv4dBMIUyNWZ8W3AgHGbhB9aY9yVm%2FropFWmJAWnZawIop0ZgW7fJrf7YD%2FDsDMiNRYsXFCgPGiT%2Fj0UI%2F7UJzMMskWS1gRRDPbN3Kx76DfAb0nAvFWZMwRkEmo2nG7Nn%2BCfhpzUxNnniWsEEMmy7nsP6BXEYIJnyFKtqIShwDDA%2FF%2F36PcFdu66K3E2R9Tgy1hhREYZur8hp%2Fzmb9EwElhiLQyjEHgZQDLB3vcR43xqIWOWMJqEPxsH89h8tYR0R83KMo2NxuBR5lVVyFH%2F2a2m9F6ZwmrXnxXsJM9zf%2B0D77dAabUK8a2Sw8CPvBbYvQUcu6D6fE6XE8tYdWB5%2BjkT%2B8BAp1fR3PbJO0IMP7nm6xu%2BFEv%2FSbtUNTqv00JqQUxZmrP65twUP%2FEklUtwNm6RyFA%2BI%2FTSf80kx%2B57Khy%2B2VSBOwIa1KIRitk1vBMaL2egGyVTWw1i8CkCDCj7%2FVZ6pM7ltKhSSvbCrCEVUUnyPTzn4D1I0R4exXVbRWLQE0IMPO%2F%2BFPc%2FzS8jH5RU8MUVrZ%2FCSsFnZkyffqzBL3FklUloOy1RhAgog%2BoEf3jbL%2F34UbkpKGtHWGVifIH%2B%2Fhtx5F%2BkAgXl6liiy0CoSPgM68ayrXdFLpgQwRawioRyMwafh95%2Bn%2BDcEaJy7bIIhApAj54q4Z7uV0B4liY7V%2FCCZhk%2B7yF5OlnLVlNAMZ%2BbRoCDmiuy%2Fqf5YezaUoTosgS1rhAZfv1Z9jB90E4flyxPbUINB0BIpwpP5zyA9p05TFWaP8SjgUn2%2B99B8DVMY6VNS2lCDDRrYVu9bWUun%2BU26knrGAnZaUfI8IlRyFjv1gEYoQAg79e6Gn7qxiZ1BJTUk1YQlZnuPoJAJmWoG%2BVWgRqQMBnfHOoR10PIq6hmVFVU0tYF67k6dOm6cctWRnVn9PgzEO8U11dWEFeGpyd6GMqH7rPyfPxU6Z5Gy1ZTewO9nsCELgSp%2BlH5d9BAmwN3cTUjbDOvZdnnLrXe4qILgwdTSvQItAkBJh58%2BtwF%2B7I0b4mqYyFmlQR1odW8YnTlfcDu9heCH2PsY%2BB34H4DTkS6HeQ74w34PDosik%2BvQ2EkwGcxOCT4ONkIjopWJXVTh1pOAjM%2FE%2F7tXvpMzfSnoaFJURAaghLUm2mO94mB3RuQmLTOjODjUL5ZSJ6yWe87BC9xOCXoPklV7kvezvxcqPPUGRXIecdmA3fm%2B379C44NJuYZ%2Fs%2BZpOD2QycYRdGnLwLMHj7fs%2FtSAtppYKw%2FnSATzvke1uI6A8m7wKprLELjGENGoZ2hod%2Fix9jBfktRWI9q8xr%2BABcv4OY28GYD8IpLbUppsqFtDy4nWlI5TGesC65h3%2FPO6i3AHh3TPtbK8z6FQPDTDTskzOUiO2omGn%2BAM5xMEpgDLQ7hNNaAV4cdTJ4B5SbKXTRrjjaF5ZNRhPWgjX8Lq31ZgDvCguwBMt5GeAHR%2BA%2BuKWHtiXYj1HTmakjjz8BeVc5oKUg%2FLvE%2B9SgA8z8PFx3nsmkZSxhtef5DEX6GQDvaLAfJLn56wz%2Bjtbu%2F9i8nJ5OsiOT2d45MNKpmT7qMK5M819H%2BXtY6Gn7wGR4JfW6sYSVyY88m9K3gW%2BCcT85%2FMCm7rZNSe2YjdgdJAw7wWa2f9GInMS29fkrg71tn0ms%2FRUMN5KwMnnvOiJ8q4LfJl76NTOt3K%2Bdu9LyxmiyIMqb4RmOn%2FPBNznAqZPVN%2Bj6G4M9rpEvKIwkrGy%2F9z0AqVhulsE%2FZqb%2FNpRzv2vQDRe6K5m893Em%2FmsH9J7QhcdRoK%2F%2BcLCXdsTRtEZschtpHNe2zHwWkZFcPB7yR4n4HwZT%2BrdvPBDVnBdy7j0A7sn2eX%2FGxJ8kovnVtEtqHQLellTbK9ltJGGBYGxiKDMe86E%2BNZyjn1UKrL1WGoHBXldG39%2Bbv4o%2FqFxvJYEuKl0z4aUK%2Fy%2FhHpQ030zCAv1fAOeV9DihhcEra0JvIdcmSdv20yACm2%2BkHwGYlxnwroKPO4lweoMiY9NcUnYGe%2BjV2BgUoiFGrtbgAPeGiFFLRTHjNz5RTyHX9r5CjyWrsINR6HYfwHHqbPbpc8zYH7b8Vshjh77aCr3N0Gnsg56O%2FpGnZTH%2FZoAYlQ5ZZXKvclds6woSi6NSY%2BWOITB%2FDb%2FD9fTfg3BtYkFhfGcw516TWPsnMdxYwjp%2FDR93gqcfTei%2BggXtqBuGP0E%2FnyR%2B9nIECMzr5%2FNdePcQ6P0RiI9OJGP9YM79aHQKWi%2FZyL%2BEAuu2LnrrFa0WMeOp1sNcnQU%2Bw2fmzw%2FuVBdbsqoOsyhqSerSK577IWZ8Iwr5Uchk4IHBWcr4TVSMHWEVO8X5a7jtBE9viPsmE8x4zYX6yMYcSaK2%2FcQEgUy%2Ft5gY%2Fxjnrd%2BErArd6uo0rPVuPGFJvw9IS%2BuHCVgUk%2FvgKDMYGIRSS01OWj3K4YR9yQzwmWDvkVj%2BRWTcO9ijrksDWUm3SQVhiaOyYBxm6fVEWBKb%2B4XhMdFnC93OV9PS4WKDfY2GjI7UvTuI6KYam0ZXnbF2sEd1panvpIawir0m0%2B89QEDLH0wy4RVPq49s6SVZUcJ%2BEoJAZsC7HIz7gmWeW2gzM%2FoKOXd5C01oiWpjH7qXQ7MwU%2F25%2FOcvd70Z5T74J8pVf2zJqhloh6uj0O1%2B33PVBwG8HK7k6qWllawEodSNsIJuwUyZAX0%2FIViCpPqeEkJNeV61V6nL5S1mCOKsiBYhkFnDM6G9Jwh0fjNNSDNZCc7pJCzxnJmy%2FXpdUycJygPSWeovsZR0Mzu51RUNAplv8TTs1w8RcHk0Go6Wysx3FnJttx1dmq5v6SUsifMoaa0BYVn0YafbB3vUF6LXYzU0FQFZqvkb3t87TH8dpV6Zn1fIta2IUkcSZKebsMYilM17d0VFWgyMyCguyFlLQo%2BwNtaFQHveu1YRvglA1SWgQiNmuq2QU3dWqJKaS5awxkKdyY98PYJX1geIeFFalypOzV005mhnfuRPmUiWr5kWnu%2F0ycEetTI8ecmWZAlrXPwyeW81EXrHFdV%2FytinoS4dztHW%2BoXYlklDoD3Pcx3ojUSY3qjtRLR8U7fqa1SOSe0tYU2IZiY%2FIpMDb51QXNtXxj4fqnMoR8%2FW1tDWNgGBMEjLZ9wwlHPXmoBHmD6kbh7WZODJWxh5wDlZvXLXfcYeS1bl0ElHuYyqfagFYOyr1WMG2JJVedTsCKsMNpm8vpWI7yhzuXQxYzdDdRZytL10BVuaJgQ68nyBA72p2sTpMbK6bjjnGrMAZdjxtoRVAdEaSWsXfJUxcaeSChDZS5MgIKQF6I0O4cRKVYWsQLjavk2uhFKaJ45WxuXw1c4B3cvMqw8XlD7ZhUNq3uDN9Hzpy7Y0zQhk8nweQw9VIC3NhGssWU3eS%2BwIa3KM0JH3ljmEu0pVlXWsaER1WLIqhY4tKyJQgbS0T7hyqNt9uFjXHssjYB%2B6l8fm8BV5W0Og7sMFR05%2B5Ss135LVEUDsWWkE5LkmQXXIKh3jarzpM5ZYshqHyCSndoQ1CUDjL49NDPwbBhOBdrpT1c1PfZx%2BNb6OPbcIVELgvG%2FxySfv84It6BzX%2FfmmbjO346qEgb1mEbAIWAQsAhYBi4BFwCJgEbAIWAQsAhaBOhCI5BnWJffw740c8JaDcGFgE9Mb5PDAYHfbk3XYaJskBIHsKn4%2FlL6FiWeLycT0kvbVncPL6bmEuGDNrAOB7MDIpexTN4hPDuLuY6vX5q7e3EW%2FrkNcxSahE1YmP3InEX2ylFYGb%2FMd92N2z71S6CS37Pw1fNIJWq8jYHEZLx7ao9Qyu4N1GXQSWjz%2FG%2FzvHd%2F7rgM6t6QLPn9lsLftMyWv1VkYGmFVu5WW5NoBaoFNDK4zYjFrdvFafrs%2B5A0R0XsrmcbMz6spbscPltFrlerZa8lAoIYZ%2FBv2KrVkWxeNhOFZKPOwzl7FU4PNSqvY909m%2B0p%2B1ajDYbhgZbQKgc4BPt0%2FpLdORlZin9SRukJwrbLX6g0HgbHVKDZVmLl%2FWJHsBSrcIBxxuLCBk4ZHWGLIGa5%2BQrb%2Bq8kOu15UTXDFrXJAVqyfJiB4XlW1fYwXyVHtdv5R1YjFqmIDS%2BcUfumpy164kQ424lBDhHXhSp4%2BbZp%2BvGayGrOYGfvh88LC8rZCI07Yts1FoPNunu0f0kM1k1Ux7sBLzhTVsel6eqm5llttjSCQWT2SgUOPN7A4YeHAAbXwh7fQ%2FnrtqPsv4Zw8Hz9lmrexXrISg8VxcuiJAIh6PbDtmopAQFYH6xhZjbNSiM4%2FqJ8WWeOK7WmMEejoG7lE7tUGyEq8ywhnCHfU62pdI6wPreITp7veRgJdUK%2Fio9oxDvrMVwz1tj11VLn9EisEFvTzWR7rYSKcHoZhzHjVJdW%2BsYdeDEOelRENAmNktYGAtjA0MPjZ%2FZ674JkbaU%2Bt8momrHn9fIoLbxOBgnyoWhWWqy%2B7yxCwZLDH3VCuji1vHQLZr%2FN7uU0PESHUh%2Bay2oVLaq4lrdbFtpLmbL%2B3iIGHwyKroi4Gb9%2FvuR21klZNhDVGVpsJNKeoONQjwwNhsSWtUFFtWJiQFaboLQBmNiyshAC7RE8JUGJQJGQFxiMguFGYI6Tlwe3c0kO7q5Vf9TMs2ZrbhRcdWYnFAgzjkY4Bb0m1Dth60SKQ7eM5UZJVEHYZtU3RWwJd0bpjpVeJQHAPRkhWQdxB5wmnCLdUaRaqIqxg7oznbYlsZDXeWoLrMB6ypDUelNacy6JzIL05qpHVBK9mii5LWhNQacHXzIB3ldyDUY2sxrsUcIrnbal2ft6kfwllvg37ehiEs8YrasK5XTa2CSCXU1FhhcxyTcIptxt5hINjnVKErMC4n5q9fDrjRWeKmjtZJkTFEVZxcmALyErgVgKcbAFeJ%2Fa2WZ0ISBbCJGuQ1ym5imaEU0S3zYSoAquQqwT3WivISvwgnCWZEMI5ldwqS1jBfJt6ZjJX0lbjNWF5h7DOklaNwDVQXYhCUqeqSbtoQE3FpjZ9qyI8kVwc27dAEtgn%2FdcViQEiVEiLK8%2FPK0lYMt9GJvbVO5M5TIeKpCWAhinXyjoWgWKOWLX76B0rIcQSwvFCnGJTiFKtqBIIFDdZaSlZjdlVnFQsHFTC1GMfussrbI8loTWcyYGllNZaNkZad8mWW7W2tfWrQ0CyDRzojbEgq6LJo6S10ZJWEZDwj3JPldsRKnxt1UkU7hEOCqbTTGhy1PAv6vk2E3TX9ZWIlm%2FqVn11NbaNSiIgZCVpFyCEklFfUkkDhTbntAHwKjStcs%2FNChIiv3TMfp%2BH%2FxI2Y75NGO7JpqayI3MYsqwMoJgjFleykhgVc07FVhuzcBCQe6iKDYLDUVa%2FlJkT5%2BcFI6yArJxgJnOwxGn98pvZkv52sEd9uZkaTdOV7fMWwkGiUqEIWLipx%2F1fpsWimf5k%2BvRnyeEvNlNng7re8Bx10eZP0E%2Bd89fwcXD0YwASRFbiPv%2FXzMDIlxoEIrXNs33enyWNrIKoA49n%2B70PpzZwDTqe7Rv5csLISjw%2BWfn6UTlxTvD8vwLw7gZxaElzYvrbTH7kKy1RnmClmbz3ETh4JMEufC%2FT75VbPz7BbkVrekffyNfg0N9EqyUa6QT8frZf3%2BIAfqIDT0Sflo0vooHJPKmZvPdRIjyUdM8IeDjb5y1Nuh%2FNsr9jYGSl49AtzdIXjR6%2BwiGis6MR3jypsktPJu%2Btbp7GZGqStAsifCeZ1pew2sH9QSpJiUu26AgC2bx3l8Mk%2F6SS%2FWG8T94Sesn2YtR6IvRKYMB81FQNE3wLw4di2kWQ8hSGwHjICNK3LGmVCQYzBfcEwYhJ1z7gOMz8szLuJq%2BYsCwzoO9KnuHRWpzJex9XhG%2FHYSZz2J6KT8T4bvuA95dhy066vGy%2FXgtDyEpiQcBzDoiMusEJuL4j792T9M4Wlv3ZvO4hwt1hyYurHMW4J9uvb4irfc22K9vv3QvCx5utN0p9BPSPzsPq92Qt9QVRKmu2bAbuK%2FS4f9FsvXHS19GvlzvgVXGyKWpbNKh3uEflo9YTZ%2FnZvHcfCH8eZxtrtY2B7xd63CuCme67p6srmflfahUS5%2FoEXJPp974bZxujtG30FXC6yErwVOC%2Bzn59c5TYxll2Nu89aBpZ%2BcT%2FvN9TAQEffkAd%2Bk44MYkqMx7G62ppYQUZ8XKhGlgl7YKI76imrql1mOm2Qk6lZrpLZgW7mKXXE8Go5cUn7rBzmLCk48p%2BYbMo2BEnnO27YnI3MLABO9XiNJBWdkB%2FDsxfiAn0LTUjLaR1%2FhpuO0Fr2dlmUUsBD1m5D966i91Ld%2BRoX1H04eRnKZALr7PbKRWLFUw4BoE8TT8igTXBn3I%2BZPIjd1iyOoKOjDIzA%2Fr2IyXmnQVk5WnZM9A4sjp0wF0wnqwkekcRlhRIBakIwKjt4yWgJ3h6w9mrOJZLqDR6KwlZEZFdxWICkMS8IiDyCeUmfJW%2BLH2aCKatYlEQDiq1pf1RfwnHB1HAeKfSj5kIxi89ddkLN9LB8f4m%2BVxm%2BcvE2ST7ELXtzHxnIdd2W9R6miX%2FwpU8fdo0%2Fbhs%2F94snc3Qw4ynXtHqinL3Z1nCEuMODzcNZPADB9TCUgzejKCEqcOSVfVoMqOvkHOXV98injWFrKZM8zY6IKOWjxay2uuqRdu6aKQc8hUJSxqZ%2FECv3LCzHFixKpe0i369xqSZzE3Bl7F2MOcmdoKpvBibSd6TxpEVsGGvUksqkZX0j2OeYU3sNIGAnWpxMD1g4sUEf5eAy6%2BUdIDEuTFKVussWdUROcKypOacFt%2FiG0dWMvVop1o8GVlJtCcdYR3uEutZZXbp%2Bwi46nCZAScT53nE3qUjZGX3a2wkWIx7B3vUdUEmYiNymtTW2HmSwAOFmeoaLCVdDZTVE5ZIY6bMgJZdYU0jre37PbfjmRtpTzWgtayOoT8arcKT5WbpVlfHnbTm9fMpLoL5kee1Cqso9NaDf22EJVYb%2BgvP4O0e3M4tPbQ7iuA0LFPI6nX9kGkzmRvGpUEBwU1Twy98g%2Bpqbj5GVpsJNKfmxnFuUOcIt3bCEhAMfeDL4B1QbqbQRbviFGtT0y7igrE8ny3MUldW%2B7ekWXZn1vBMaK9gIFmtHexRXfWMbOsjrLGImbQ4WLETMvPzcN15cSGtgKxO04%2BYNpO5iHdcjnHLOb14Lb9dH%2FKGiOi9ccEoDDsanVrSEGGJAybOAxLSUlPcjh8so9fCCFK9MkydUlIvHlG3k5zTal6tR22HkJV%2FSG8FoeR27VHrj0p%2Bo2Qldk06rWEy42Uinswinqxekq7Lr5p0GOk4rbL7cNqFYTlircKzGr3F9C35oaimfhR1Ogf4dDPJSjINGp%2B02zBhSdAk5cH3DVshgHCWdBzpQFF0zEoyhazOcPUTBqZFVXI7FtcE81blnHbezbN91k%2BbN7Liz4eVFtXwX8LxvczEdZgYeMmZojo2XU8vjfc1qnNTc8SiwitCuYVm5pwGZHVQP02Epv9ARoihvJ8LdV2yUAlLHDeStBivOlPVRVGTlqlpF1HeEBHLLjQj53RBP5%2FlsR42jayIaPmmbtUXZoxCJywxrnNA9zKzUfsEMuNVl1T7xh56McwAFGUV0y4IZNTiiUX%2FknostYhcmL6MkdVWIrTseWmY%2FhRlRUFWIjsSwhLBHXlvGRHWmLS1FDNec0nNDZu0TE27KHbepB8lfUsWtpy4mFyjfmW%2Fzu%2FlNj1kElmxzNJkdA3l3LWN4lOqfWSEJcpk806HsM400qIR1TF4Mz1fCtBay0xNu6gVh7jXDzvnNNvHc%2BBoWSRzZtx9r9Y%2BISufcd1wzr232ja11gvlLWE5pYHhDKM2uAx%2BDafozZkB%2FsNyfldbfuHdfKpL3hCBjMoR88E%2FYeLnqsUhCfXkr%2Fp05RXkB6ZRe9tX8zm%2Bo4dNIivBJGqyEh2REpYoKOTcdRpm7ZEGYBazHsqu4vfX23kl7WLKIW%2BQmM6pV0Yc2zFj3VBP2%2FsL3W3nAvh2HG2s1yYi%2BoAkITdCWvP7%2BI%2BUo4cc4NR67YhjOyZ8LMqRVdHnSP8SFpXIsWPAW%2BL4WA%2BCO7480eeM3QzVWcjR9lr8CHLEPG%2BLaWkXmJjQam6ifF05px15vgDQGx3CibX0l1jXZXi%2Bg6VD3e7DzbAz8hFW0YnAIcJiMMzZH5BwCkMPjXbEoqeVj8HseTPJShJaj15fioiDMkYkD2ArIx3d1SAZ2fO2BD88VaqRPuJAbzKNrEBY3CyyEqibRliibLDH3SAOMlB2zeYq4x%2BbatIBpSNWQ1rFtAvTRlaSIxYsO0zExwRGSCvn3iB1jrmW4IIghp63pZr0rfY8z5U%2BAkLyVrctE6PgHiYsDu7pMnWiKG4qYYkD4iD7vAgMY3atkY4oHVI6ZrkgBWRlZtpFVTliJuecVkrfGiOrjSaRldy7cg83m6zk3mo6YYnSod62p9jnywwkrY2lSKuYI0bA7HKElsTyWrfOknwy0xLlJe9P8v9KkVZm9UjGgd5IhOlJjG8pm5mxX%2B5duYdLXY%2B6rCWEJU4VlrcVxHEBIGonmyVfOqZ0UOmoRZ0yk9mXHDHDyApEf1dPQutoGzJqN2aJbUBad%2FPhH6SOvpFLyCFJYDeKrHyoBXLvFvt3s49Ne0tYzrH5q%2Fki19FPGDVkBg744JUM51cO8%2BdMmskscQwjoTXbr28D%2BKvl%2BkUiyxn%2F5jv0BdL%2BbHLoU4n0oZzRjH0a6tLhHG0tV6UZ5S0nLHHSyNe9zYheC3SEmSNmYs5pC0ISuUqfsQdQC4Zy9GzkyiZREAvCEhszeT5PpggY9dp3EvCTdDmqHDHJOXUIdyUJi1TZWudcw6gwig1hiYNCWjT6%2Brfh9IeoAEuj3KhzxExMlDeinzB2g9X8wV7aERd%2FYkVYAoqJSaFxCXY9dkRNVkWbTEyUL%2FqW0OMu%2BCoTJ7ISHGNHWGKUictuJLTTaiZcU%2Bh2H2iG%2FZkB7ypi3AdANUOf1VEaAVlGKcwVSUprqa80loQlrpi6sFl9YWpBqybniBU9DHJOGQ9Z0ioi0txjVGu%2BheVFy%2BZhTeaALJIni%2BXJSp%2BT1bXXQ0ZA8j2bnCNW9EDy0nzClUblnBadi%2FlxbFXd0BeoDNPt2I6wik4Gs8QP6SHjJl4WHYzZUXLECFjSirSL8VBk%2B71FDDxMQMu23Bpvj%2Bnnzd5spV48YzvCKjokGz84pC4CI5K11It67FFmhLYuR2wi%2FkbmnE50Mi7fGS%2FKPRb1JithuBv7EVbRSVN3wy361%2BpjkCLl88JWpl2UwkDSnCTFBYSppa7bsgYRELKaoua2epfzar2I%2FQir6IgAKsDKNvLFMnsMCQHGvlbniJXzxMSc03K%2BNrtc7qUkkZXgk5gRVjGYwaJp2isEi6gVC%2B2xfgRGyaozDmkXlZyQVTAU9JOG5ZxWcjnSawyua9XUSI2qQnjiCEt8GttpZrMlrSoiXKFKnHLEKph5%2BJLNOT0MRUMnDN7uwe3c0kO7GxLUgsaJJCzByW6P1WBviVmOWLXe2PStapEqXU%2FIar%2FndjxzI%2B0pXSPepYl5hjURRvl1EOBlv7iJ1%2Bz3SRHYJTlitW6eManUJlQIbGY1H5LnZj81ITC2t2JiyUqcTewIqxgp2eJ9JnlPOqCyyxMX69pjgMAuHFLzwtoItlWY2pzT2pD3wVt3sXtp2LtX12ZF47UTO8Iqui4BOHTAXSABKZbZY2kEJO3CBLIS74Kk3ENqXuBTaXdt6REECnKPJJ2sxJ3Ej7CKMblwJU%2BfNk0%2FLqvUFMvs8QgCY2kX7ZLydKQ0%2BWdjOafDRDg9%2Bd5E4kHhl5667IUbyYhNX4whLAn12at46qA5Wb8AAAVoSURBVDuVfowIl0QS%2BoQKTUraRb3wBulbsm6%2BJa2jIGTGU69odYUpZCXOJf4v4fgISWD2ukpy0DaML0%2F1eYLSLuqNU5C%2BNVVdJMRcrwzT2sk9IPeCSWQlMTKKsMShbV00gp1KNmu1pDWWdrGpm4xf8cLmnB6h3KDv71SLg3vhSLERZ8YRlkSlsIK8gLQYDxsRpTqcSGLaRR1uHtVEiDnt6VssfX6nWhzcA0ehY8YXo55hHROS9awyu%2FR9BFx1zDWDC5KadhFWSIL0Lc%2FbEmwnH5bQBMhh4IHCTHUNlpJOgLl1mWg2YQkkzJTt1%2BtAuLYuhBLWKMlpF2FCnbqcU8a9gz3qOhBxmDjGTZb5hCWIp4S0kp52EfbNkZr0rZSQlfQPI59hHdPxiTj49WGsPeaaIQUmpF2EHYpUpG8x1qZhZFXsG%2BkYYRW9DfY%2B9FYToXdcUeJPTUm7iCoQpqZvMaOvkHOXR4VbHOWmY4Q1DnkJsAR6XFHST41Ju4gqECambzHznWkjK%2BkfqRthFW%2BKTH7kDiK6tfg9iUcTZzJHGQdT0rdGyarttiixiqvs1BKWBCQzoG8n5hVxDU4lu4SsZCaziZMDK%2Fnd6LXkp2%2FR7YM96guN4pDU9qkmLAlaJq9vJeI7khTAIO1CqSWWrOqL2vlruO0ErWULsUX1SWhNK2a6rZBTd7ZGezy0pu4Z1kTYpQMQUWIeXBZnMluymhjJ6r8H2CUsfUv6aNrJSiKc%2BhFWsZt3DuheZl5d%2FB7HYxpmMjcT98wKdjFLryfCkmbqrVWXz7hhKOcaOyWnFjwsYY1DqyPvLSPCGoohkQdk1a2uNn0m87hwNOc0xulbLFOeGV2WrI50BUtYR7AIztrz3rUOYV2sSCtFM5knhKM5X2OYCSFk5TOuG8659zYHhGRosYRVIk6ZAe8qMO6PBWmNzmTusiOrEoEKsyhGpCVkBcLVhW73gTBdNEFW6h%2B6lwpi0FEIVwNoada7THAdzLk3WLIqFaWQy%2BKTvqUtWZWPrR1hlccGHQPeEsfHehDcCtUiuZTmyYGRAFqD0Ey%2BRelbDM93sHSo203tOm6ThcmOsCogFHQcgqxeOlKhWuiXLFmFDmlNAkfTt7ip852CPkZYbMmqcqgsYVXGB4M97gb2WdaJbxJp0e2FXDrTLiYJRVMvBzFg%2FmIzlErfkj4mfa0Z%2BpKsw%2F4lrDJ6HX0jlzhEj4EwtcomNVezM5lrhizyBpFnQjAO%2BsxXDPW2PRW5MwYosIRVQxAzq0cycOhxIkyvoVlVVWUm86ZuZdIqElX5nYRKUZEWM%2FbD54WF5W2FJOAQBxstYdUYhfY8z3WgN4ZJWnYmc41BaEH10DMhGPs01KXDObI7ltcQT0tYNYBVrCqkpaCfBOH4Ylk9RzuTuR7UWtcmtEwIxj4fqnMoR8%2B2zptkaraEVWfcOvJ8AaA3OoQT6xFhZzLXg1rr2zSaCeEz9gBqgSWr%2BmJpCas%2B3IJWmTyfR9CbQDilRjGaCdfYmcw1ohaT6nWTFmM3Q3UWcrQ9Jq4kzgxLWA2GLNvHc0B6c9WkZScHNoh4PJpL%2BhYx7gOgqrRoF3yVGeylHVXWt9VKIGAJqwQotRYFpOVoedMzs2JbhgfCYjvfpiJKiblYQybELhxS8wZvpucT41xMDbUTR0MIjPxqakfN9X3%2BaVlxjN0%2B80JLVmURStwFmZVO4EWjz6VKmy%2B7cEvfsGRVGp9aS%2B0Iq1bEJqnfPqC7iP1bHNB7pCozXiOiVXuUk9%2FWRb%2BbpLm9nEAEZMPWNvJ7wSwr184K4g7%2BGZi%2BVsi59yTQJWty2hBoX8vvnt%2FP56bN77T7KzHvvJtnpx2HqPz%2F%2F6omxnsqyGCHAAAAAElFTkSuQmCC%22%2F%3E%20%20%3C%2Fdefs%3E%3C%2Fsvg%3E\"","/*\n https://github.com/banksean wrapped Makoto Matsumoto and Takuji Nishimura's code in a namespace\n so it's better encapsulated. Now you can have multiple random number generators\n and they won't stomp all over eachother's state.\n\n If you want to use this as a substitute for Math.random(), use the random()\n method like so:\n\n var m = new MersenneTwister();\n var randomNumber = m.random();\n\n You can also call the other genrand_{foo}() methods on the instance.\n\n If you want to use a specific seed in order to get a repeatable random\n sequence, pass an integer into the constructor:\n\n var m = new MersenneTwister(123);\n\n and that will always produce the same random sequence.\n\n Sean McCullough (banksean@gmail.com)\n*/\n\n/*\n A C-program for MT19937, with initialization improved 2002/1/26.\n Coded by Takuji Nishimura and Makoto Matsumoto.\n\n Before using, initialize the state by using init_seed(seed)\n or init_by_array(init_key, key_length).\n\n Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions\n are met:\n\n 1. Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n 3. The names of its contributors may not be used to endorse or promote\n products derived from this software without specific prior written\n permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\n Any feedback is very welcome.\n http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html\n email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space)\n*/\n\nvar MersenneTwister = function(seed) {\n\tif (seed == undefined) {\n\t\tseed = new Date().getTime();\n\t}\n\n\t/* Period parameters */\n\tthis.N = 624;\n\tthis.M = 397;\n\tthis.MATRIX_A = 0x9908b0df; /* constant vector a */\n\tthis.UPPER_MASK = 0x80000000; /* most significant w-r bits */\n\tthis.LOWER_MASK = 0x7fffffff; /* least significant r bits */\n\n\tthis.mt = new Array(this.N); /* the array for the state vector */\n\tthis.mti=this.N+1; /* mti==N+1 means mt[N] is not initialized */\n\n\tif (seed.constructor == Array) {\n\t\tthis.init_by_array(seed, seed.length);\n\t}\n\telse {\n\t\tthis.init_seed(seed);\n\t}\n}\n\n/* initializes mt[N] with a seed */\n/* origin name init_genrand */\nMersenneTwister.prototype.init_seed = function(s) {\n\tthis.mt[0] = s >>> 0;\n\tfor (this.mti=1; this.mti>> 30);\n\t\tthis.mt[this.mti] = (((((s & 0xffff0000) >>> 16) * 1812433253) << 16) + (s & 0x0000ffff) * 1812433253)\n\t\t+ this.mti;\n\t\t/* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */\n\t\t/* In the previous versions, MSBs of the seed affect */\n\t\t/* only MSBs of the array mt[]. */\n\t\t/* 2002/01/09 modified by Makoto Matsumoto */\n\t\tthis.mt[this.mti] >>>= 0;\n\t\t/* for >32 bit machines */\n\t}\n}\n\n/* initialize by an array with array-length */\n/* init_key is the array for initializing keys */\n/* key_length is its length */\n/* slight change for C++, 2004/2/26 */\nMersenneTwister.prototype.init_by_array = function(init_key, key_length) {\n\tvar i, j, k;\n\tthis.init_seed(19650218);\n\ti=1; j=0;\n\tk = (this.N>key_length ? this.N : key_length);\n\tfor (; k; k--) {\n\t\tvar s = this.mt[i-1] ^ (this.mt[i-1] >>> 30)\n\t\tthis.mt[i] = (this.mt[i] ^ (((((s & 0xffff0000) >>> 16) * 1664525) << 16) + ((s & 0x0000ffff) * 1664525)))\n\t\t+ init_key[j] + j; /* non linear */\n\t\tthis.mt[i] >>>= 0; /* for WORDSIZE > 32 machines */\n\t\ti++; j++;\n\t\tif (i>=this.N) { this.mt[0] = this.mt[this.N-1]; i=1; }\n\t\tif (j>=key_length) j=0;\n\t}\n\tfor (k=this.N-1; k; k--) {\n\t\tvar s = this.mt[i-1] ^ (this.mt[i-1] >>> 30);\n\t\tthis.mt[i] = (this.mt[i] ^ (((((s & 0xffff0000) >>> 16) * 1566083941) << 16) + (s & 0x0000ffff) * 1566083941))\n\t\t- i; /* non linear */\n\t\tthis.mt[i] >>>= 0; /* for WORDSIZE > 32 machines */\n\t\ti++;\n\t\tif (i>=this.N) { this.mt[0] = this.mt[this.N-1]; i=1; }\n\t}\n\n\tthis.mt[0] = 0x80000000; /* MSB is 1; assuring non-zero initial array */\n}\n\n/* generates a random number on [0,0xffffffff]-interval */\n/* origin name genrand_int32 */\nMersenneTwister.prototype.random_int = function() {\n\tvar y;\n\tvar mag01 = new Array(0x0, this.MATRIX_A);\n\t/* mag01[x] = x * MATRIX_A for x=0,1 */\n\n\tif (this.mti >= this.N) { /* generate N words at one time */\n\t\tvar kk;\n\n\t\tif (this.mti == this.N+1) /* if init_seed() has not been called, */\n\t\t\tthis.init_seed(5489); /* a default initial seed is used */\n\n\t\tfor (kk=0;kk>> 1) ^ mag01[y & 0x1];\n\t\t}\n\t\tfor (;kk>> 1) ^ mag01[y & 0x1];\n\t\t}\n\t\ty = (this.mt[this.N-1]&this.UPPER_MASK)|(this.mt[0]&this.LOWER_MASK);\n\t\tthis.mt[this.N-1] = this.mt[this.M-1] ^ (y >>> 1) ^ mag01[y & 0x1];\n\n\t\tthis.mti = 0;\n\t}\n\n\ty = this.mt[this.mti++];\n\n\t/* Tempering */\n\ty ^= (y >>> 11);\n\ty ^= (y << 7) & 0x9d2c5680;\n\ty ^= (y << 15) & 0xefc60000;\n\ty ^= (y >>> 18);\n\n\treturn y >>> 0;\n}\n\n/* generates a random number on [0,0x7fffffff]-interval */\n/* origin name genrand_int31 */\nMersenneTwister.prototype.random_int31 = function() {\n\treturn (this.random_int()>>>1);\n}\n\n/* generates a random number on [0,1]-real-interval */\n/* origin name genrand_real1 */\nMersenneTwister.prototype.random_incl = function() {\n\treturn this.random_int()*(1.0/4294967295.0);\n\t/* divided by 2^32-1 */\n}\n\n/* generates a random number on [0,1)-real-interval */\nMersenneTwister.prototype.random = function() {\n\treturn this.random_int()*(1.0/4294967296.0);\n\t/* divided by 2^32 */\n}\n\n/* generates a random number on (0,1)-real-interval */\n/* origin name genrand_real3 */\nMersenneTwister.prototype.random_excl = function() {\n\treturn (this.random_int() + 0.5)*(1.0/4294967296.0);\n\t/* divided by 2^32 */\n}\n\n/* generates a random number on [0,1) with 53-bit resolution*/\n/* origin name genrand_res53 */\nMersenneTwister.prototype.random_long = function() {\n\tvar a=this.random_int()>>>5, b=this.random_int()>>>6;\n\treturn(a*67108864.0+b)*(1.0/9007199254740992.0);\n}\n\n/* These real versions are due to Isaku Wada, 2002/01/09 added */\n\nmodule.exports = MersenneTwister;\n","function newPaper(diameter, color) {\n var container = document.createElement('div')\n container.style.borderRadius = '50px'\n container.style.overflow = 'hidden'\n container.style.padding = '0px'\n container.style.margin = '0px'\n container.style.width = '' + diameter + 'px'\n container.style.height = '' + diameter + 'px'\n container.style.display = 'inline-block'\n container.style.background = color\n return {\n container: container,\n }\n}\n\nmodule.exports = newPaper\n","/* MIT license */\nvar clone = require('clone');\nvar convert = require('color-convert');\nvar string = require('color-string');\n\nvar Color = function (obj) {\n\tif (obj instanceof Color) {\n\t\treturn obj;\n\t}\n\tif (!(this instanceof Color)) {\n\t\treturn new Color(obj);\n\t}\n\n\tthis.values = {\n\t\trgb: [0, 0, 0],\n\t\thsl: [0, 0, 0],\n\t\thsv: [0, 0, 0],\n\t\thwb: [0, 0, 0],\n\t\tcmyk: [0, 0, 0, 0],\n\t\talpha: 1\n\t};\n\n\t// parse Color() argument\n\tvar vals;\n\tif (typeof obj === 'string') {\n\t\tvals = string.getRgba(obj);\n\t\tif (vals) {\n\t\t\tthis.setValues('rgb', vals);\n\t\t} else if (vals = string.getHsla(obj)) {\n\t\t\tthis.setValues('hsl', vals);\n\t\t} else if (vals = string.getHwb(obj)) {\n\t\t\tthis.setValues('hwb', vals);\n\t\t} else {\n\t\t\tthrow new Error('Unable to parse color from string \"' + obj + '\"');\n\t\t}\n\t} else if (typeof obj === 'object') {\n\t\tvals = obj;\n\t\tif (vals.r !== undefined || vals.red !== undefined) {\n\t\t\tthis.setValues('rgb', vals);\n\t\t} else if (vals.l !== undefined || vals.lightness !== undefined) {\n\t\t\tthis.setValues('hsl', vals);\n\t\t} else if (vals.v !== undefined || vals.value !== undefined) {\n\t\t\tthis.setValues('hsv', vals);\n\t\t} else if (vals.w !== undefined || vals.whiteness !== undefined) {\n\t\t\tthis.setValues('hwb', vals);\n\t\t} else if (vals.c !== undefined || vals.cyan !== undefined) {\n\t\t\tthis.setValues('cmyk', vals);\n\t\t} else {\n\t\t\tthrow new Error('Unable to parse color from object ' + JSON.stringify(obj));\n\t\t}\n\t}\n};\n\nColor.prototype = {\n\trgb: function () {\n\t\treturn this.setSpace('rgb', arguments);\n\t},\n\thsl: function () {\n\t\treturn this.setSpace('hsl', arguments);\n\t},\n\thsv: function () {\n\t\treturn this.setSpace('hsv', arguments);\n\t},\n\thwb: function () {\n\t\treturn this.setSpace('hwb', arguments);\n\t},\n\tcmyk: function () {\n\t\treturn this.setSpace('cmyk', arguments);\n\t},\n\n\trgbArray: function () {\n\t\treturn this.values.rgb;\n\t},\n\thslArray: function () {\n\t\treturn this.values.hsl;\n\t},\n\thsvArray: function () {\n\t\treturn this.values.hsv;\n\t},\n\thwbArray: function () {\n\t\tif (this.values.alpha !== 1) {\n\t\t\treturn this.values.hwb.concat([this.values.alpha]);\n\t\t}\n\t\treturn this.values.hwb;\n\t},\n\tcmykArray: function () {\n\t\treturn this.values.cmyk;\n\t},\n\trgbaArray: function () {\n\t\tvar rgb = this.values.rgb;\n\t\treturn rgb.concat([this.values.alpha]);\n\t},\n\trgbaArrayNormalized: function () {\n\t\tvar rgb = this.values.rgb;\n\t\tvar glRgba = [];\n\t\tfor (var i = 0; i < 3; i++) {\n\t\t\tglRgba[i] = rgb[i] / 255;\n\t\t}\n\t\tglRgba.push(this.values.alpha);\n\t\treturn glRgba;\n\t},\n\thslaArray: function () {\n\t\tvar hsl = this.values.hsl;\n\t\treturn hsl.concat([this.values.alpha]);\n\t},\n\talpha: function (val) {\n\t\tif (val === undefined) {\n\t\t\treturn this.values.alpha;\n\t\t}\n\t\tthis.setValues('alpha', val);\n\t\treturn this;\n\t},\n\n\tred: function (val) {\n\t\treturn this.setChannel('rgb', 0, val);\n\t},\n\tgreen: function (val) {\n\t\treturn this.setChannel('rgb', 1, val);\n\t},\n\tblue: function (val) {\n\t\treturn this.setChannel('rgb', 2, val);\n\t},\n\thue: function (val) {\n\t\tif (val) {\n\t\t\tval %= 360;\n\t\t\tval = val < 0 ? 360 + val : val;\n\t\t}\n\t\treturn this.setChannel('hsl', 0, val);\n\t},\n\tsaturation: function (val) {\n\t\treturn this.setChannel('hsl', 1, val);\n\t},\n\tlightness: function (val) {\n\t\treturn this.setChannel('hsl', 2, val);\n\t},\n\tsaturationv: function (val) {\n\t\treturn this.setChannel('hsv', 1, val);\n\t},\n\twhiteness: function (val) {\n\t\treturn this.setChannel('hwb', 1, val);\n\t},\n\tblackness: function (val) {\n\t\treturn this.setChannel('hwb', 2, val);\n\t},\n\tvalue: function (val) {\n\t\treturn this.setChannel('hsv', 2, val);\n\t},\n\tcyan: function (val) {\n\t\treturn this.setChannel('cmyk', 0, val);\n\t},\n\tmagenta: function (val) {\n\t\treturn this.setChannel('cmyk', 1, val);\n\t},\n\tyellow: function (val) {\n\t\treturn this.setChannel('cmyk', 2, val);\n\t},\n\tblack: function (val) {\n\t\treturn this.setChannel('cmyk', 3, val);\n\t},\n\n\thexString: function () {\n\t\treturn string.hexString(this.values.rgb);\n\t},\n\trgbString: function () {\n\t\treturn string.rgbString(this.values.rgb, this.values.alpha);\n\t},\n\trgbaString: function () {\n\t\treturn string.rgbaString(this.values.rgb, this.values.alpha);\n\t},\n\tpercentString: function () {\n\t\treturn string.percentString(this.values.rgb, this.values.alpha);\n\t},\n\thslString: function () {\n\t\treturn string.hslString(this.values.hsl, this.values.alpha);\n\t},\n\thslaString: function () {\n\t\treturn string.hslaString(this.values.hsl, this.values.alpha);\n\t},\n\thwbString: function () {\n\t\treturn string.hwbString(this.values.hwb, this.values.alpha);\n\t},\n\tkeyword: function () {\n\t\treturn string.keyword(this.values.rgb, this.values.alpha);\n\t},\n\n\trgbNumber: function () {\n\t\treturn (this.values.rgb[0] << 16) | (this.values.rgb[1] << 8) | this.values.rgb[2];\n\t},\n\n\tluminosity: function () {\n\t\t// http://www.w3.org/TR/WCAG20/#relativeluminancedef\n\t\tvar rgb = this.values.rgb;\n\t\tvar lum = [];\n\t\tfor (var i = 0; i < rgb.length; i++) {\n\t\t\tvar chan = rgb[i] / 255;\n\t\t\tlum[i] = (chan <= 0.03928) ? chan / 12.92 : Math.pow(((chan + 0.055) / 1.055), 2.4);\n\t\t}\n\t\treturn 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2];\n\t},\n\n\tcontrast: function (color2) {\n\t\t// http://www.w3.org/TR/WCAG20/#contrast-ratiodef\n\t\tvar lum1 = this.luminosity();\n\t\tvar lum2 = color2.luminosity();\n\t\tif (lum1 > lum2) {\n\t\t\treturn (lum1 + 0.05) / (lum2 + 0.05);\n\t\t}\n\t\treturn (lum2 + 0.05) / (lum1 + 0.05);\n\t},\n\n\tlevel: function (color2) {\n\t\tvar contrastRatio = this.contrast(color2);\n\t\tif (contrastRatio >= 7.1) {\n\t\t\treturn 'AAA';\n\t\t}\n\n\t\treturn (contrastRatio >= 4.5) ? 'AA' : '';\n\t},\n\n\tdark: function () {\n\t\t// YIQ equation from http://24ways.org/2010/calculating-color-contrast\n\t\tvar rgb = this.values.rgb;\n\t\tvar yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000;\n\t\treturn yiq < 128;\n\t},\n\n\tlight: function () {\n\t\treturn !this.dark();\n\t},\n\n\tnegate: function () {\n\t\tvar rgb = [];\n\t\tfor (var i = 0; i < 3; i++) {\n\t\t\trgb[i] = 255 - this.values.rgb[i];\n\t\t}\n\t\tthis.setValues('rgb', rgb);\n\t\treturn this;\n\t},\n\n\tlighten: function (ratio) {\n\t\tthis.values.hsl[2] += this.values.hsl[2] * ratio;\n\t\tthis.setValues('hsl', this.values.hsl);\n\t\treturn this;\n\t},\n\n\tdarken: function (ratio) {\n\t\tthis.values.hsl[2] -= this.values.hsl[2] * ratio;\n\t\tthis.setValues('hsl', this.values.hsl);\n\t\treturn this;\n\t},\n\n\tsaturate: function (ratio) {\n\t\tthis.values.hsl[1] += this.values.hsl[1] * ratio;\n\t\tthis.setValues('hsl', this.values.hsl);\n\t\treturn this;\n\t},\n\n\tdesaturate: function (ratio) {\n\t\tthis.values.hsl[1] -= this.values.hsl[1] * ratio;\n\t\tthis.setValues('hsl', this.values.hsl);\n\t\treturn this;\n\t},\n\n\twhiten: function (ratio) {\n\t\tthis.values.hwb[1] += this.values.hwb[1] * ratio;\n\t\tthis.setValues('hwb', this.values.hwb);\n\t\treturn this;\n\t},\n\n\tblacken: function (ratio) {\n\t\tthis.values.hwb[2] += this.values.hwb[2] * ratio;\n\t\tthis.setValues('hwb', this.values.hwb);\n\t\treturn this;\n\t},\n\n\tgreyscale: function () {\n\t\tvar rgb = this.values.rgb;\n\t\t// http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale\n\t\tvar val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11;\n\t\tthis.setValues('rgb', [val, val, val]);\n\t\treturn this;\n\t},\n\n\tclearer: function (ratio) {\n\t\tthis.setValues('alpha', this.values.alpha - (this.values.alpha * ratio));\n\t\treturn this;\n\t},\n\n\topaquer: function (ratio) {\n\t\tthis.setValues('alpha', this.values.alpha + (this.values.alpha * ratio));\n\t\treturn this;\n\t},\n\n\trotate: function (degrees) {\n\t\tvar hue = this.values.hsl[0];\n\t\thue = (hue + degrees) % 360;\n\t\thue = hue < 0 ? 360 + hue : hue;\n\t\tthis.values.hsl[0] = hue;\n\t\tthis.setValues('hsl', this.values.hsl);\n\t\treturn this;\n\t},\n\n\t/**\n\t * Ported from sass implementation in C\n\t * https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209\n\t */\n\tmix: function (mixinColor, weight) {\n\t\tvar color1 = this;\n\t\tvar color2 = mixinColor;\n\t\tvar p = weight === undefined ? 0.5 : weight;\n\n\t\tvar w = 2 * p - 1;\n\t\tvar a = color1.alpha() - color2.alpha();\n\n\t\tvar w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n\t\tvar w2 = 1 - w1;\n\n\t\treturn this\n\t\t\t.rgb(\n\t\t\t\tw1 * color1.red() + w2 * color2.red(),\n\t\t\t\tw1 * color1.green() + w2 * color2.green(),\n\t\t\t\tw1 * color1.blue() + w2 * color2.blue()\n\t\t\t)\n\t\t\t.alpha(color1.alpha() * p + color2.alpha() * (1 - p));\n\t},\n\n\ttoJSON: function () {\n\t\treturn this.rgb();\n\t},\n\n\tclone: function () {\n\t\tvar col = new Color();\n\t\tcol.values = clone(this.values);\n\t\treturn col;\n\t}\n};\n\nColor.prototype.getValues = function (space) {\n\tvar vals = {};\n\n\tfor (var i = 0; i < space.length; i++) {\n\t\tvals[space.charAt(i)] = this.values[space][i];\n\t}\n\n\tif (this.values.alpha !== 1) {\n\t\tvals.a = this.values.alpha;\n\t}\n\n\t// {r: 255, g: 255, b: 255, a: 0.4}\n\treturn vals;\n};\n\nColor.prototype.setValues = function (space, vals) {\n\tvar spaces = {\n\t\trgb: ['red', 'green', 'blue'],\n\t\thsl: ['hue', 'saturation', 'lightness'],\n\t\thsv: ['hue', 'saturation', 'value'],\n\t\thwb: ['hue', 'whiteness', 'blackness'],\n\t\tcmyk: ['cyan', 'magenta', 'yellow', 'black']\n\t};\n\n\tvar maxes = {\n\t\trgb: [255, 255, 255],\n\t\thsl: [360, 100, 100],\n\t\thsv: [360, 100, 100],\n\t\thwb: [360, 100, 100],\n\t\tcmyk: [100, 100, 100, 100]\n\t};\n\n\tvar i;\n\tvar alpha = 1;\n\tif (space === 'alpha') {\n\t\talpha = vals;\n\t} else if (vals.length) {\n\t\t// [10, 10, 10]\n\t\tthis.values[space] = vals.slice(0, space.length);\n\t\talpha = vals[space.length];\n\t} else if (vals[space.charAt(0)] !== undefined) {\n\t\t// {r: 10, g: 10, b: 10}\n\t\tfor (i = 0; i < space.length; i++) {\n\t\t\tthis.values[space][i] = vals[space.charAt(i)];\n\t\t}\n\n\t\talpha = vals.a;\n\t} else if (vals[spaces[space][0]] !== undefined) {\n\t\t// {red: 10, green: 10, blue: 10}\n\t\tvar chans = spaces[space];\n\n\t\tfor (i = 0; i < space.length; i++) {\n\t\t\tthis.values[space][i] = vals[chans[i]];\n\t\t}\n\n\t\talpha = vals.alpha;\n\t}\n\n\tthis.values.alpha = Math.max(0, Math.min(1, (alpha === undefined ? this.values.alpha : alpha)));\n\n\tif (space === 'alpha') {\n\t\treturn false;\n\t}\n\n\tvar capped;\n\n\t// cap values of the space prior converting all values\n\tfor (i = 0; i < space.length; i++) {\n\t\tcapped = Math.max(0, Math.min(maxes[space][i], this.values[space][i]));\n\t\tthis.values[space][i] = Math.round(capped);\n\t}\n\n\t// convert to all the other color spaces\n\tfor (var sname in spaces) {\n\t\tif (sname !== space) {\n\t\t\tthis.values[sname] = convert[space][sname](this.values[space]);\n\t\t}\n\n\t\t// cap values\n\t\tfor (i = 0; i < sname.length; i++) {\n\t\t\tcapped = Math.max(0, Math.min(maxes[sname][i], this.values[sname][i]));\n\t\t\tthis.values[sname][i] = Math.round(capped);\n\t\t}\n\t}\n\n\treturn true;\n};\n\nColor.prototype.setSpace = function (space, args) {\n\tvar vals = args[0];\n\n\tif (vals === undefined) {\n\t\t// color.rgb()\n\t\treturn this.getValues(space);\n\t}\n\n\t// color.rgb(10, 10, 10)\n\tif (typeof vals === 'number') {\n\t\tvals = Array.prototype.slice.call(args);\n\t}\n\n\tthis.setValues(space, vals);\n\treturn this;\n};\n\nColor.prototype.setChannel = function (space, index, val) {\n\tif (val === undefined) {\n\t\t// color.red()\n\t\treturn this.values[space][index];\n\t} else if (val === this.values[space][index]) {\n\t\t// color.red(color.red())\n\t\treturn this;\n\t}\n\n\t// color.red(100)\n\tthis.values[space][index] = val;\n\tthis.setValues(space, this.values[space]);\n\n\treturn this;\n};\n\nmodule.exports = Color;\n","module.exports = [\n\t'#01888C', // teal\n '#FC7500', // bright orange\n '#034F5D', // dark teal\n '#F73F01', // orangered\n '#FC1960', // magenta\n '#C7144C', // raspberry\n '#F3C100', // goldenrod\n '#1598F2', // lightning blue\n '#2465E1', // sail blue\n '#F19E02', // gold\n]\n","var MersenneTwister = require('mersenne-twister');\nvar paperGen = require('./paper')\nvar Color = require('color')\nvar colors = require('./colors')\nvar shapeCount = 4\nvar svgns = 'http://www.w3.org/2000/svg'\n\nmodule.exports = generateIdenticon\n\nvar generator\nfunction generateIdenticon(diameter, seed) {\n generator = new MersenneTwister(seed);\n var remainingColors = hueShift(colors.slice(), generator)\n\n var elements = paperGen(diameter, genColor(remainingColors))\n var container = elements.container\n\n var svg = document.createElementNS(svgns, 'svg')\n svg.setAttributeNS(null, 'x', '0')\n svg.setAttributeNS(null, 'y', '0')\n svg.setAttributeNS(null, 'width', diameter)\n svg.setAttributeNS(null, 'height', diameter)\n\n container.appendChild(svg)\n\n for(var i = 0; i < shapeCount - 1; i++) {\n genShape(remainingColors, diameter, i, shapeCount - 1, svg)\n }\n\n return container\n}\n\nfunction genShape(remainingColors, diameter, i, total, svg) {\n var center = diameter / 2\n\n var shape = document.createElementNS(svgns, 'rect')\n shape.setAttributeNS(null, 'x', '0')\n shape.setAttributeNS(null, 'y', '0')\n shape.setAttributeNS(null, 'width', diameter)\n shape.setAttributeNS(null, 'height', diameter)\n\n var firstRot = generator.random()\n var angle = Math.PI * 2 * firstRot\n var velocity = diameter / total * generator.random() + (i * diameter / total)\n\n var tx = (Math.cos(angle) * velocity)\n var ty = (Math.sin(angle) * velocity)\n\n var translate = 'translate(' + tx + ' ' + ty + ')'\n\n // Third random is a shape rotation on top of all of that.\n var secondRot = generator.random()\n var rot = (firstRot * 360) + secondRot * 180\n var rotate = 'rotate(' + rot.toFixed(1) + ' ' + center + ' ' + center + ')'\n var transform = translate + ' ' + rotate\n shape.setAttributeNS(null, 'transform', transform)\n var fill = genColor(remainingColors)\n shape.setAttributeNS(null, 'fill', fill)\n\n svg.appendChild(shape)\n}\n\nfunction genColor(colors) {\n var rand = generator.random()\n var idx = Math.floor(colors.length * generator.random())\n var color = colors.splice(idx,1)[0]\n return color\n}\n\nvar wobble = 30\nfunction hueShift(colors, generator) {\n var amount = (generator.random() * 30) - (wobble / 2)\n return colors.map(function(hex) {\n var color = Color(hex)\n color.rotate(amount)\n return color.hexString()\n })\n}\n","export default \"f89237c6bc3f84db.png\"","export default \"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2020%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20class%3D%22feather%20feather-x%22%3E%3Cline%20x1%3D%2218%22%20y1%3D%226%22%20x2%3D%226%22%20y2%3D%2218%22%3E%3C%2Fline%3E%3Cline%20x1%3D%226%22%20y1%3D%226%22%20x2%3D%2218%22%20y2%3D%2218%22%3E%3C%2Fline%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2218%22%20height%3D%2218%22%20viewBox%3D%220%200%2018%2018%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M9.79261%2016.1108L17.5398%208.36364L9.79261%200.616477L8.25852%202.15057L13.3807%207.25568H0V9.47159H13.3807L8.25852%2014.5852L9.79261%2016.1108Z%22%20fill%3D%22%23333639%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEYAAAA3CAYAAACxUDzgAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAaGVYSWZNTQAqAAAACAAEAQYAAwAAAAEAAgAAARIAAwAAAAEAAQAAASgAAwAAAAEAAgAAh2kABAAAAAEAAAA+AAAAAAADoAEAAwAAAAEAAQAAoAIABAAAAAEAAABGoAMABAAAAAEAAAA3AAAAAChoTFwAAALiaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA2LjAuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjE8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlBob3RvbWV0cmljSW50ZXJwcmV0YXRpb24+MjwvdGlmZjpQaG90b21ldHJpY0ludGVycHJldGF0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NzA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjU1PC9leGlmOlBpeGVsWURpbWVuc2lv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\"","export default \"055f83ffb7252729.svg\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M10.0047%209.26921H10.2714C11.0078%209.26921%2011.6047%209.86617%2011.6047%2010.6025V12.1359C11.6047%2012.7987%2012.142%2013.3359%2012.8047%2013.3359C13.4675%2013.3359%2014.0047%2012.7995%2014.0047%2012.1367V5.22059C14.0047%204.86697%2013.7758%204.56227%2013.5258%204.31223L10.6714%201.33594M4.00472%202.00254H8.00472C8.7411%202.00254%209.33805%202.59949%209.33805%203.33587V14.0015H2.67139V3.33587C2.67139%202.59949%203.26834%202.00254%204.00472%202.00254ZM14.0047%205.33587C14.0047%206.07225%2013.4078%206.66921%2012.6714%206.66921C11.935%206.66921%2011.3381%206.07225%2011.3381%205.33587C11.3381%204.59949%2011.935%204.00254%2012.6714%204.00254C13.4078%204.00254%2014.0047%204.59949%2014.0047%205.33587Z%22%20stroke%3D%22white%22%2F%3E%3Cline%20x1%3D%224%22%20y1%3D%229.99414%22%20x2%3D%228%22%20y2%3D%229.99414%22%20stroke%3D%22white%22%2F%3E%3Cline%20x1%3D%224%22%20y1%3D%2211.9941%22%20x2%3D%228%22%20y2%3D%2211.9941%22%20stroke%3D%22white%22%2F%3E%3Cpath%20d%3D%22M4%208.16113H8%22%20stroke%3D%22white%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%221024%22%20height%3D%221024%22%20viewBox%3D%220%200%201024%201024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Ccircle%20cx%3D%22512%22%20cy%3D%22512%22%20r%3D%22512%22%20fill%3D%22%238247E5%22%2F%3E%3Cpath%20d%3D%22M681.469%20402.456C669.189%20395.312%20653.224%20395.312%20639.716%20402.456L543.928%20457.228L478.842%20492.949L383.055%20547.721C370.774%20554.865%20354.81%20554.865%20341.301%20547.721L265.162%20504.856C252.882%20497.712%20244.286%20484.614%20244.286%20470.325V385.786C244.286%20371.498%20251.654%20358.4%20265.162%20351.256L340.073%20309.581C352.353%20302.437%20368.318%20302.437%20381.827%20309.581L456.737%20351.256C469.018%20358.4%20477.614%20371.498%20477.614%20385.786V440.558L542.7%20403.646V348.874C542.7%20334.586%20535.332%20321.488%20521.824%20314.344L383.055%20235.758C370.774%20228.614%20354.81%20228.614%20341.301%20235.758L200.076%20314.344C186.567%20321.488%20179.199%20334.586%20179.199%20348.874V507.237C179.199%20521.525%20186.567%20534.623%20200.076%20541.767L341.301%20620.353C353.582%20627.498%20369.546%20627.498%20383.055%20620.353L478.842%20566.772L543.928%20529.86L639.716%20476.279C651.996%20469.135%20667.961%20469.135%20681.469%20476.279L756.38%20517.953C768.66%20525.098%20777.257%20538.195%20777.257%20552.484V637.023C777.257%20651.312%20769.888%20664.409%20756.38%20671.553L681.469%20714.419C669.189%20721.563%20653.224%20721.563%20639.716%20714.419L564.805%20672.744C552.525%20665.6%20543.928%20652.502%20543.928%20638.214V583.442L478.842%20620.353V675.125C478.842%20689.414%20486.21%20702.512%20499.719%20709.656L640.944%20788.242C653.224%20795.386%20669.189%20795.386%20682.697%20788.242L823.922%20709.656C836.203%20702.512%20844.799%20689.414%20844.799%20675.125V516.763C844.799%20502.474%20837.431%20489.377%20823.922%20482.232L681.469%20402.456Z%22%20fill%3D%22white%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%22100%25%22%20height%3D%2235%22%20%20viewBox%3D%22800%200%20300%20200%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%20%20%20%20%3Cline%20x1%3D%220%22%20x2%3D%222000%22%20y1%3D%22100%22%20y2%3D%22100%22%20stroke%3D%22currentColor%22%20stroke-width%3D%2220%22%20stroke-linecap%3D%22round%22%20stroke-dasharray%3D%221%2C%2045%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2223%22%20height%3D%2220%22%20viewBox%3D%220%200%2023%2020%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cdefs%3E%20%3ClinearGradient%20id%3D%22gradient1%22%20x1%3D%220%22%20y1%3D%220%22%20x2%3D%221%22%20y2%3D%220%22%20gradientTransform%3D%22rotate%2895%29%22%3E%20%20%20%20%3Cstop%20id%3D%22stop1%22%20offset%3D%220%22%20stop-color%3D%22%232274E2%22%2F%3E%20%20%20%20%3Cstop%20id%3D%22stop1%22%20offset%3D%220.5%22%20stop-color%3D%22%232274E2%22%2F%3E%20%20%20%20%3Cstop%20id%3D%22stop2%22%20offset%3D%221%22%20stop-color%3D%22%233FB672%22%20%2F%3E%20%20%3C%2FlinearGradient%3E%20%20%3C%2Fdefs%3E%3Cpath%20d%3D%22M16%2016C10%2016%209%2010%205%2010M16%2016C16%2017.6569%2017.3431%2019%2019%2019C20.6569%2019%2022%2017.6569%2022%2016C22%2014.3431%2020.6569%2013%2019%2013C17.3431%2013%2016%2014.3431%2016%2016ZM5%2010C9%2010%2010%204%2016%204M5%2010H1.5M16%204C16%205.65685%2017.3431%207%2019%207C20.6569%207%2022%205.65685%2022%204C22%202.34315%2020.6569%201%2019%201C17.3431%201%2016%202.34315%2016%204Z%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20stroke%3D%22url%28%23gradient1%29%22%20%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2022%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M19%2018C19%2018.5523%2018.5523%2019%2018%2019V21C19.6569%2021%2021%2019.6569%2021%2018H19ZM18%2019C17.4477%2019%2017%2018.5523%2017%2018H15C15%2019.6569%2016.3431%2021%2018%2021V19ZM17%2018C17%2017.4477%2017.4477%2017%2018%2017V15C16.3431%2015%2015%2016.3431%2015%2018H17ZM18%2017C18.5523%2017%2019%2017.4477%2019%2018H21C21%2016.3431%2019.6569%2015%2018%2015V17ZM8%207H16V5H8V7ZM16%2011H8V13H16V11ZM8%2019H16V17H8V19ZM4%2015C4%2017.2091%205.79086%2019%208%2019V17C6.89543%2017%206%2016.1046%206%2015H4ZM8%2011C5.79086%2011%204%2012.7909%204%2015H6C6%2013.8954%206.89543%2013%208%2013V11ZM18%209C18%2010.1046%2017.1046%2011%2016%2011V13C18.2091%2013%2020%2011.2091%2020%209H18ZM16%207C17.1046%207%2018%207.89543%2018%209H20C20%206.79086%2018.2091%205%2016%205V7ZM7%206C7%206.55228%206.55228%207%206%207V9C7.65685%209%209%207.65685%209%206H7ZM6%207C5.44772%207%205%206.55228%205%206H3C3%207.65685%204.34315%209%206%209V7ZM5%206C5%205.44772%205.44772%205%206%205V3C4.34315%203%203%204.34315%203%206H5ZM6%205C6.55228%205%207%205.44772%207%206H9C9%204.34315%207.65685%203%206%203V5Z%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%227%22%20viewBox%3D%220%200%2012%207%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%20%20%20%20%3Cpath%20d%3D%22M0.97168%201L6.20532%206L11.439%201%22%20stroke%3D%22%23AEAEAE%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%22225%22%20height%3D%22225%22%20viewBox%3D%220%200%20225%20225%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M74.8125%20190.529C65.7561%20190.513%2055.5298%20183.748%2051.9715%20175.42L19.9417%20100.456C16.3834%2092.1277%2020.8404%2085.39%2029.8968%2085.4068L111.417%2085.5579C120.473%2085.5747%20130.699%2092.3395%20134.258%20100.668L166.288%20175.632C169.846%20183.96%20165.389%20190.697%20156.332%20190.681L74.8125%20190.529Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint0_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint1_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint2_radial%29%22%2F%3E%3Cpath%20d%3D%22M92.1541%20164.065C83.0977%20164.049%2072.8715%20157.284%2069.3132%20148.956L28.3003%2052.9672C24.7419%2044.6391%2029.199%2037.9015%2038.2554%2037.9182L142.638%2038.1117C151.695%2038.1285%20161.921%2044.8933%20165.479%2053.2214L206.492%20149.21C210.051%20157.538%20205.594%20164.276%20196.537%20164.259L92.1541%20164.065Z%22%20fill%3D%22url%28%23paint3_radial%29%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M92.958%20165.95C82.7695%20165.931%2071.265%20158.321%2067.2619%20148.952L26.2489%2052.9632C22.2458%2043.5941%2027.26%2036.0143%2037.4485%2036.0332L141.832%2036.2266C152.02%2036.2455%20163.525%2043.8559%20167.528%2053.225L208.541%20149.214C212.544%20158.583%20207.53%20166.163%20197.341%20166.144L92.958%20165.95ZM71.3614%20148.959C74.475%20156.246%2083.4229%20162.166%2091.3473%20162.18L195.73%20162.374C203.655%20162.388%20207.555%20156.493%20204.441%20149.206L163.428%2053.2174C160.315%2045.9304%20151.367%2040.0111%20143.442%2039.9964L39.0592%2039.803C31.1349%2039.7883%2027.2349%2045.6837%2030.3485%2052.9708L71.3614%20148.959Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M68.565%2053.3425C81.1781%2053.3659%2095.4205%2062.7875%20100.376%2074.3862C105.332%2085.985%2099.1246%2095.3687%2086.5115%2095.3454C73.8984%2095.322%2059.6559%2085.9004%2054.7001%2074.3016C49.7443%2062.7028%2055.9518%2053.3191%2068.565%2053.3425Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M90.6891%20104.981C103.302%20105.004%20117.545%20114.425%20122.5%20126.024C127.456%20137.623%20121.249%20147.007%20108.636%20146.983C96.0225%20146.96%2081.7801%20137.538%2076.8243%20125.94C71.8685%20114.341%2078.076%20104.957%2090.6891%20104.981Z%22%20fill%3D%22%23131313%22%2F%3E%3Cpath%20d%3D%22M147.538%20105.142C160.151%20105.166%20174.394%20114.587%20179.349%20126.186C184.305%20137.785%20178.098%20147.168%20165.485%20147.145C152.871%20147.122%20138.629%20137.7%20133.673%20126.101C128.717%20114.503%20134.925%20105.119%20147.538%20105.142Z%22%20fill%3D%22%23131313%22%2F%3E%3Cdefs%3E%3CradialGradient%20id%3D%22paint0_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%28134.41%2068.3006%29%20rotate%28-33.9533%29%20scale%2890.6795%2083.3208%29%22%3E%3Cstop%20offset%3D%220.661458%22%20stop-color%3D%22%23C4FCF8%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint1_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%2842.7873%20129.218%29%20rotate%28-24.1606%29%20scale%28213.359%20196.045%29%22%3E%3Cstop%20stop-color%3D%22%23FF0099%22%20stop-opacity%3D%220.9%22%2F%3E%3Cstop%20offset%3D%220.770833%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint2_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%28176.854%20148.655%29%20rotate%28-53.4908%29%20scale%28107.342%2098.6309%29%22%3E%3Cstop%20stop-color%3D%22%23FFEC43%22%2F%3E%3Cstop%20offset%3D%220.805707%22%20stop-color%3D%22%23FFF6A8%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient%20id%3D%22paint3_radial%22%20cx%3D%220%22%20cy%3D%220%22%20r%3D%221%22%20gradientUnits%3D%22userSpaceOnUse%22%20gradientTransform%3D%22translate%2857.5443%2053.4752%29%20rotate%2820.3896%29%20scale%28137.027%20125.907%29%22%3E%3Cstop%20offset%3D%220.125%22%20stop-color%3D%22%235886FE%22%20stop-opacity%3D%220.46%22%2F%3E%3Cstop%20offset%3D%220.673044%22%20stop-color%3D%22white%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3C%2Fdefs%3E%3C%2Fsvg%3E\"","module.exports=function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,\"a\",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p=\"\",r(r.s=3)}([function(e,t){e.exports=function(e){return e&&e.__esModule?e:{default:e}}},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}},function(e,t,r){\"use strict\";function n(){return Math.floor(9e4*Math.random())+1e4}Object.defineProperty(t,\"__esModule\",{value:!0}),t.sendAsyncWrapper=function(e,t){var r=this;return new Promise(function(o,a){r.sendAsync({jsonrpc:\"2.0\",id:n(),method:e,params:t||[]},function(e,t){e?a(e):o(t.result)})})},t.sendFortmaticAsyncWrapper=function(e){var t=this;return new Promise(function(r,n){t.getProvider().sendFortmaticAsync(e,function(e,t){e?n(e):r(t?t.result:{})})})},t.randomId=n,t.findExistingResponse=function(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},t=new v(m);return t.params=[e],i.sendFortmaticAsyncWrapper.call(g,t)}};var v=function e(t,r){(0,o.default)(this,e),this.id=(0,i.randomId)(),this.method=t,this.params=r?[r]:[{}]}},function(e,t,r){\"use strict\";var n=r(0);Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var o=n(r(6)),a=n(r(9)),i=n(r(1)),s=n(r(10)),c=r(11),u=n(r(12)),l=r(2),f=function(){function e(t,r){if((0,i.default)(this,e),this.fortmaticClient=t,this.requests={},this.queue=[],this.account=null,this.network=null,this.isFortmatic=!0,this.overlayReady=!1,this.isLoggedIn=!1,this.postMessages={FORTMATIC_HANDLE_BATCH_REQUEST:\"FORTMATIC_HANDLE_BATCH_REQUEST\",FORTMATIC_HANDLE_REQUEST:\"FORTMATIC_HANDLE_REQUEST\",FORTMATIC_HANDLE_FORTMATIC_REQUEST:\"FORTMATIC_HANDLE_FORTMATIC_REQUEST\",FORTMATIC_HANDLE_RESPONSE:\"FORTMATIC_HANDLE_RESPONSE\",FORTMATIC_OVERLAY_READY:\"FORTMATIC_OVERLAY_READY\",FORTMATIC_SHOW_OVERLAY:\"FORTMATIC_SHOW_OVERLAY\",FORTMATIC_HIDE_OVERLAY:\"FORTMATIC_HIDE_OVERLAY\",FORTMATIC_USER_DENIED:\"FORTMATIC_USER_DENIED\",FORTMATIC_USER_LOGOUT:\"FORTMATIC_USER_LOGOUT\",FORTMATIC_UNAUTHORIZED_API_KEY:\"FORTMATIC_UNAUTHORIZED_API_KEY\"},!r.API_KEY)throw new Error(\"Please provide a Fortmatic API key that you acquired from the developer dashboard.\");this.options={API_KEY:r.API_KEY,ETH_NETWORK:r.ETH_NETWORK,DOMAIN_ORIGIN:window.location?window.location.origin:\"\",version:c.version},this.queryParams=btoa(JSON.stringify(this.options)),this.constructPostMessage(),this.overlay=this.createOverlay(),this.listenMessage()}return(0,s.default)(e,[{key:\"constructPostMessage\",value:function(){var e=this;Object.keys(this.postMessages).map(function(t){e.postMessages[t]+=\"-\".concat(e.queryParams)})}},{key:\"createOverlay\",value:function(){var e=this;return new Promise(function(t,r){var n=function(){if(function(){var t=!0,r=!1,n=void 0;try{for(var o,a=document.getElementsByClassName(\"fortmatic-iframe\")[Symbol.iterator]();!(t=(o=a.next()).done);t=!0)if(o.value.src.includes(e.queryParams))return!1}catch(e){r=!0,n=e}finally{try{t||null==a.return||a.return()}finally{if(r)throw n}}return!0}()){var r=document.createElement(\"style\");r.innerHTML=u.default.css,r.type=\"text/css\",document.head.appendChild(r);var n=document.createElement(\"iframe\");n.className=\"fortmatic-iframe\",n.src=\"\".concat(e.fortmaticClient,\"/send?params=\").concat(e.queryParams),document.body.appendChild(n);var o=document.createElement(\"img\");o.src=\"https://static.fortmatic.com/assets/trans.gif\",document.body.appendChild(o),t({iframe:n})}else console.error(\"Fortmatic: Duplicate instances found.\")};[\"loaded\",\"interactive\",\"complete\"].indexOf(document.readyState)>-1?n():window.addEventListener(\"load\",n.bind(e),!1)})}},{key:\"showOverlay\",value:function(){var e=(0,a.default)(o.default.mark(function e(){return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.overlay;case 2:e.sent.iframe.style.display=\"block\";case 4:case\"end\":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:\"hideOverlay\",value:function(){var e=(0,a.default)(o.default.mark(function e(){return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.overlay;case 2:e.sent.iframe.style.display=\"none\";case 4:case\"end\":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:\"sendAsync\",value:function(e,t){e.length>0?this.enqueue({payload:{id:(0,l.randomId)(),batch:e.map(function(e){return e.id=(0,l.randomId)(),e}),method:\"eth_batchRequest\"},cb:t}):this.enqueue({payload:e,cb:t})}},{key:\"sendFortmaticAsync\",value:function(e,t){this.enqueue({payload:e,cb:t,isNative:!0})}},{key:\"send\",value:function(e,t){if(\"string\"==typeof e)return l.sendAsyncWrapper.call(this,e,t);if(!t){console.warn(\"Non-async web3 methods will be deprecated in web3 > 1.0, and are not supported by the Fortmatic provider. An async method to be used instead.\"),this.sendAsync(e,function(){});var r={};switch(e.method){case\"eth_accounts\":r=this.account?[this.account]:[];break;case\"eth_coinbase\":r=this.account;break;case\"net_version\":r=this.network||(this.options.API_KEY.startsWith(\"pk_live\")?1:4);break;case\"eth_uninstallFilter\":r=!0;break;default:r={}}return{id:e.id,jsonrpc:e.jsonrpc,result:r}}this.sendAsync(e,t)}},{key:\"enqueue\",value:function(e){this.queue.push(e),this.overlayReady&&this.dequeue()}},{key:\"dequeue\",value:function(){var e=(0,a.default)(o.default.mark(function e(){var t,r,n,a=this;return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(0!==this.queue.length){e.next=2;break}return e.abrupt(\"return\");case 2:if(!(t=this.queue.shift())){e.next=11;break}return r=t.payload,n=t.cb,r.id=(0,l.randomId)(),e.next=9,this.postMessage(t.isNative?this.postMessages.FORTMATIC_HANDLE_FORTMATIC_REQUEST:this.postMessages.FORTMATIC_HANDLE_REQUEST,t.payload);case 9:r.batch&&r.batch.length>0?(r.batch.forEach(function(e){a.requests[e.id]={parentId:r.id,payload:e,cb:function(e,t){var n=a.requests[r.id].batchResponse;if(e&&e.response&&!(0,l.findExistingResponse)(n,e.response.id))throw n.push({jsonrpc:\"2.0\",id:e.response.id,error:{code:e.response.code,message:e.response.message}}),a.requests[r.id].cb(null,n),e.response;if(t&&t.result&&!(0,l.findExistingResponse)(n,t.id))return n.push(t);throw new Error(\"Fortmatic: unexpected callback behavior\")}}}),this.requests[r.id]={payload:r,cb:n,batchResponse:[]}):this.requests[r.id]={payload:r,cb:n},this.dequeue();case 11:case\"end\":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:\"postMessage\",value:function(){var e=(0,a.default)(o.default.mark(function e(t,r){var n;return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.overlay;case 2:if(!(n=e.sent).iframe.contentWindow){e.next=7;break}n.iframe.contentWindow.postMessage({msgType:t,payload:r},\"*\"),e.next=8;break;case 7:throw new Error(\"Fortmatic: Modal is not ready.\");case 8:case\"end\":return e.stop()}},e,this)}));return function(t,r){return e.apply(this,arguments)}}()},{key:\"enable\",value:function(){return l.sendAsyncWrapper.call(this,\"eth_accounts\")}},{key:\"listenMessage\",value:function(){var e=this;window.addEventListener(\"message\",function(t){if(t.origin===e.fortmaticClient){var r=t.data.response?t.data.response.id:null;switch(t.data.msgType){case e.postMessages.FORTMATIC_OVERLAY_READY:e.overlayReady=!0,e.dequeue();break;case e.postMessages.FORTMATIC_HANDLE_RESPONSE:try{e.requests[r].cb(null,t.data.response);var n=e.requests[r].parentId;n&&e.requests[n].payload.batch.length===e.requests[n].batchResponse.length&&e.requests[n].cb(null,e.requests[n].batchResponse),\"eth_accounts\"===e.requests[r].payload.method?e.account=t.data.response.result[0]:\"eth_coinbase\"===e.requests[r].payload.method?e.account=t.data.response.result:\"net_version\"===e.requests[r].payload.method&&(e.network=t.data.response.result)}catch(e){}e.isLoggedIn=!0,e.dequeue();break;case e.postMessages.FORTMATIC_HIDE_OVERLAY:e.hideOverlay();break;case e.postMessages.FORTMATIC_SHOW_OVERLAY:e.showOverlay();break;case e.postMessages.FORTMATIC_USER_LOGOUT:e.account=null,e.network=null,e.isLoggedIn=!1;break;case e.postMessages.FORTMATIC_UNAUTHORIZED_API_KEY:throw e.overlayReady=!1,new Error(\"Given API key is not authorized to access the resource.\");case e.postMessages.FORTMATIC_USER_DENIED:if(r){var o=t.data.response&&t.data.response.message?t.data.response.message:\"Fortmatic: Modal was closed without executing action!\",a=t.data.response&&t.data.response.code?t.data.response.code:1;e.requests[r].cb({message:o,code:a,response:t.data.response})}else e.queue.forEach(function(e){return e.cb({message:\"Fortmatic: Modal was closed without executing action!\",code:1})});e.dequeue()}}})}}]),e}();t.default=f},function(e,t,r){e.exports=r(7)},function(e,t,r){var n=function(){return this||\"object\"==typeof self&&self}()||Function(\"return this\")(),o=n.regeneratorRuntime&&Object.getOwnPropertyNames(n).indexOf(\"regeneratorRuntime\")>=0,a=o&&n.regeneratorRuntime;if(n.regeneratorRuntime=void 0,e.exports=r(8),o)n.regeneratorRuntime=a;else try{delete n.regeneratorRuntime}catch(e){n.regeneratorRuntime=void 0}},function(e,t){!function(t){\"use strict\";var r,n=Object.prototype,o=n.hasOwnProperty,a=\"function\"==typeof Symbol?Symbol:{},i=a.iterator||\"@@iterator\",s=a.asyncIterator||\"@@asyncIterator\",c=a.toStringTag||\"@@toStringTag\",u=\"object\"==typeof e,l=t.regeneratorRuntime;if(l)u&&(e.exports=l);else{(l=t.regeneratorRuntime=u?e.exports:{}).wrap=_;var f=\"suspendedStart\",d=\"suspendedYield\",h=\"executing\",p=\"completed\",m={},y={};y[i]=function(){return this};var v=Object.getPrototypeOf,g=v&&v(v(L([])));g&&g!==n&&o.call(g,i)&&(y=g);var b=A.prototype=w.prototype=Object.create(y);T.prototype=b.constructor=A,A.constructor=T,A[c]=T.displayName=\"GeneratorFunction\",l.isGeneratorFunction=function(e){var t=\"function\"==typeof e&&e.constructor;return!!t&&(t===T||\"GeneratorFunction\"===(t.displayName||t.name))},l.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,A):(e.__proto__=A,c in e||(e[c]=\"GeneratorFunction\")),e.prototype=Object.create(b),e},l.awrap=function(e){return{__await:e}},O(R.prototype),R.prototype[s]=function(){return this},l.AsyncIterator=R,l.async=function(e,t,r,n){var o=new R(_(e,t,r,n));return l.isGeneratorFunction(t)?o:o.next().then(function(e){return e.done?e.value:o.next()})},O(b),b[c]=\"Generator\",b[i]=function(){return this},b.toString=function(){return\"[object Generator]\"},l.keys=function(e){var t=[];for(var r in e)t.push(r);return t.reverse(),function r(){for(;t.length;){var n=t.pop();if(n in e)return r.value=n,r.done=!1,r}return r.done=!0,r}},l.values=L,F.prototype={constructor:F,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=r,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=r,this.tryEntries.forEach(M),!e)for(var t in this)\"t\"===t.charAt(0)&&o.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=r)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if(\"throw\"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function n(n,o){return s.type=\"throw\",s.arg=e,t.next=n,o&&(t.method=\"next\",t.arg=r),!!o}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],s=i.completion;if(\"root\"===i.tryLoc)return n(\"end\");if(i.tryLoc<=this.prev){var c=o.call(i,\"catchLoc\"),u=o.call(i,\"finallyLoc\");if(c&&u){if(this.prev=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&o.call(n,\"finallyLoc\")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),M(r),m}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if(\"throw\"===n.type){var o=n.arg;M(r)}return o}}throw new Error(\"illegal catch attempt\")},delegateYield:function(e,t,n){return this.delegate={iterator:L(e),resultName:t,nextLoc:n},\"next\"===this.method&&(this.arg=r),m}}}function _(e,t,r,n){var o=t&&t.prototype instanceof w?t:w,a=Object.create(o.prototype),i=new F(n||[]);return a._invoke=function(e,t,r){var n=f;return function(o,a){if(n===h)throw new Error(\"Generator is already running\");if(n===p){if(\"throw\"===o)throw a;return k()}for(r.method=o,r.arg=a;;){var i=r.delegate;if(i){var s=I(i,r);if(s){if(s===m)continue;return s}}if(\"next\"===r.method)r.sent=r._sent=r.arg;else if(\"throw\"===r.method){if(n===f)throw n=p,r.arg;r.dispatchException(r.arg)}else\"return\"===r.method&&r.abrupt(\"return\",r.arg);n=h;var c=E(e,t,r);if(\"normal\"===c.type){if(n=r.done?p:d,c.arg===m)continue;return{value:c.arg,done:r.done}}\"throw\"===c.type&&(n=p,r.method=\"throw\",r.arg=c.arg)}}}(e,r,i),a}function E(e,t,r){try{return{type:\"normal\",arg:e.call(t,r)}}catch(e){return{type:\"throw\",arg:e}}}function w(){}function T(){}function A(){}function O(e){[\"next\",\"throw\",\"return\"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function R(e){var t;this._invoke=function(r,n){function a(){return new Promise(function(t,a){!function t(r,n,a,i){var s=E(e[r],e,n);if(\"throw\"!==s.type){var c=s.arg,u=c.value;return u&&\"object\"==typeof u&&o.call(u,\"__await\")?Promise.resolve(u.__await).then(function(e){t(\"next\",e,a,i)},function(e){t(\"throw\",e,a,i)}):Promise.resolve(u).then(function(e){c.value=e,a(c)},function(e){return t(\"throw\",e,a,i)})}i(s.arg)}(r,n,t,a)})}return t=t?t.then(a,a):a()}}function I(e,t){var n=e.iterator[t.method];if(n===r){if(t.delegate=null,\"throw\"===t.method){if(e.iterator.return&&(t.method=\"return\",t.arg=r,I(e,t),\"throw\"===t.method))return m;t.method=\"throw\",t.arg=new TypeError(\"The iterator does not provide a 'throw' method\")}return m}var o=E(n,e.iterator,t.arg);if(\"throw\"===o.type)return t.method=\"throw\",t.arg=o.arg,t.delegate=null,m;var a=o.arg;return a?a.done?(t[e.resultName]=a.value,t.next=e.nextLoc,\"return\"!==t.method&&(t.method=\"next\",t.arg=r),t.delegate=null,m):a:(t.method=\"throw\",t.arg=new TypeError(\"iterator result is not an object\"),t.delegate=null,m)}function x(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function M(e){var t=e.completion||{};t.type=\"normal\",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:\"root\"}],e.forEach(x,this),this.reset(!0)}function L(e){if(e){var t=e[i];if(t)return t.call(e);if(\"function\"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n (https://fortmatic.com/)\",license:\"MIT\",repository:{type:\"git\",url:\"https://github.com/fortmatic/fortmatic-js\"},keywords:[\"Auth\",\"Login\",\"Web3\",\"Crypto\",\"Ethereum\",\"MetaMask\",\"Wallet\",\"Blockchain\",\"Dapp\"],homepage:\"https://www.fortmatic.com\",ava:{require:[\"@babel/register\"],files:[\"test/**/*.spec.js\"],babel:{testOptions:{presets:[\"@babel/env\"],plugins:[\"@babel/plugin-proposal-function-bind\",\"@babel/plugin-transform-runtime\"]}},verbose:!0},nyc:{all:!1,\"check-coverage\":!0,\"per-file\":!0,lines:80,statements:80,functions:80,branches:80,include:[\"src/**/*.js\"],exclude:[\"*/style.js\"],require:[],reporter:[\"html\",\"lcov\"]},dependencies:{\"@babel/runtime\":\"7.3.4\"},devDependencies:{\"@babel/core\":\"7.3.4\",\"@babel/plugin-proposal-function-bind\":\"7.2.0\",\"@babel/plugin-transform-modules-commonjs\":\"7.2.0\",\"@babel/plugin-transform-runtime\":\"7.3.4\",\"@babel/preset-env\":\"7.3.4\",\"@babel/register\":\"7.0.0\",ava:\"2.2.0\",\"babel-eslint\":\"10.0.1\",\"babel-loader\":\"8.0.5\",eslint:\"5.9.0\",lodash:\"4.17.11\",nyc:\"13.1.0\",sinon:\"7.1.1\",webpack:\"4.26.1\",\"webpack-cli\":\"3.1.2\"}}},function(e,t,r){\"use strict\";t.css=\"\\n .fortmatic-iframe {\\n display: none;\\n position: fixed;\\n top: 0;\\n right: 0;\\n width: 100%;\\n height: 100%;\\n border: none;\\n border-radius: 0;\\n z-index: 2147483647;\\n }\\n\"}]);"],"names":["_path","_path2","_path3","_extends","React","MersenneTwister","Color","colors","require$$0","require$$1","require$$2","require$$3","_line","_line2"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBA,eAAe,mcAAmc;;ACvBld,gBAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAf,mBAAe;;AC+Lf,sBAAe,0kPAA0kP;;ACvIzlP,sBAAe,0sDAA0sD;;AC7BztD,uBAAe,k3CAAk3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3Bj4C,aAAe;;ACAf,YAAe;;ACAf,gBAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpBhZ,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACA8k5jB,cAAc,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACwFD,oBAAe,0tLAA0tL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICzGzuL,SAAc,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CA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"} \ No newline at end of file diff --git a/package.json b/package.json index 4581536e090..5c65d59c8a2 100644 --- a/package.json +++ b/package.json @@ -2,12 +2,12 @@ "name": "@uniswap/interface", "description": "Uniswap Interface", "homepage": ".", - "main": "dist2/snowflake.js", - "types": "dist2/snowflake.d.ts", + "main": "dist2/snowflake.esm.js", + "module": "dist2/snowflake.esm.js", "files": [ "dist2" ], - "version": "1.0.2", + "version": "1.0.3", "private": false, "resolutions": { "@walletconnect/ethereum-provider": "1.7.1" @@ -217,5 +217,8 @@ "workbox-core": "^6.1.0", "workbox-precaching": "^6.1.0", "workbox-routing": "^6.1.0" + }, + "devDependencies": { + "rollup-plugin-node-polyfills": "^0.2.1" } } diff --git a/rollup.config.ts b/rollup.config.js similarity index 65% rename from rollup.config.ts rename to rollup.config.js index ced2c024106..ff8e6db0b0e 100644 --- a/rollup.config.ts +++ b/rollup.config.js @@ -2,18 +2,21 @@ * Bundles the widgets library, which is released independently of the interface application. * This library lives in src/lib, but shares code with the interface application. */ - -import eslint from '@rollup/plugin-eslint' +require('dotenv').config() +// import eslint from '@rollup/plugin-eslint' // import babel from '@rollup/plugin-babel' import commonjs from '@rollup/plugin-commonjs' +import babel, { getBabelOutputPlugin } from '@rollup/plugin-babel' +import nodePolyfills from 'rollup-plugin-node-polyfills' + +// import { getBabelOutputPlugin } from '@rollup/plugin-babel' import json from '@rollup/plugin-json' -// import resolve from '@rollup/plugin-node-resolve' +import resolve from '@rollup/plugin-node-resolve' import url from '@rollup/plugin-url' import svgr from '@svgr/rollup' import dts from 'rollup-plugin-dts' import sass from 'rollup-plugin-scss' // import { DEFAULT_EXTENSIONS } from '@babel/core' - import typescript from 'rollup-plugin-typescript2' // import babel from '@rollup/plugin-babel' @@ -24,6 +27,7 @@ import replace from '@rollup/plugin-replace' // import { dependencies } from './package.json' // const deps = Object.keys(dependencies) +const extensions = ['.ts', '.tsx'] const replacements = { 'process.env.REACT_APP_IS_WIDGET': false, @@ -32,20 +36,36 @@ const replacements = { // const ignore = ['styled-components'] const library = { + external: ['@babel/runtime', '@metamask/jazzicon'], input: 'src/snowflake/index.ts', output: [ - { - file: 'dist2/snowflake.js', - format: 'cjs', - inlineDynamicImports: true, - sourcemap: true, - }, // { - // file: 'dist/widgets.esm.js', - // format: 'esm', + // file: 'dist2/snowflake.js', + // format: 'cjs', // inlineDynamicImports: true, // sourcemap: true, // }, + { + file: 'dist2/snowflake.esm.js', + format: 'esm', + inlineDynamicImports: true, + sourcemap: false, + plugins: [ + // getBabelOutputPlugin({ + // presets: [ + // [ + // 'react-app', + // { + // runtime: 'automatic', + // }, + // ], + // ], + // // include: ['./src/**'], + // // extensions, + // // babelHelpers: 'runtime', + // }), + ], + }, ], // necessary because some nested imports (eg jotai/*) would otherwise not resolve. // external: (source: string) => Boolean(deps.find((dep) => source === dep || source.startsWith(dep + '/'))), @@ -53,10 +73,24 @@ const library = { plugins: [ // external(), // eslint({ include: ['**/*.js', '**/*.jsx', '**/*.ts', '**/*.tsx'] }), + nodePolyfills(), + // resolve({ + // extensions, + // browser: true, + // }), + // commonjs(), + replace({ ...replacements, preventAssignment: true }), + // babel({ + // presets: [['babel-preset-react-app/dependencies', { helpers: true }]], + // exclude: /@babel(?:\/|\\{1,2})runtime/, + // extensions: ['js', 'mjs'], + // babelHelpers: 'bundled', + // }), + typescript({ tsconfig: './tsconfig.json', useTsconfigDeclarationDir: true }), - commonjs({ esmExternals: true, requireReturnsDefault: false }), + // commonjs({ esmExternals: true, requireReturnsDefault: false }), // resolve(), // babel({ @@ -80,7 +114,7 @@ const typings = { file: 'dist2/snowflake.d.ts', format: 'es', }, - external: (source: string) => source.endsWith('.scss'), + external: (source) => source.endsWith('.scss'), // plugins: [dts()], plugins: [dts({ compilerOptions: { baseUrl: 'dist2/types' } })], } diff --git a/tsconfig.json b/tsconfig.json index 113e5ab28bc..ec70a0b29b4 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,13 +2,15 @@ "extends": "./tsconfig.base.json", "compilerOptions": { "jsx": "react-jsx", - "baseUrl": "src" - // "outDir": "dist2", - // "moduleResolution": "node", - // "declaration": true, - // "declarationDir": "dist2/types", - // "emitDeclarationOnly": true + "baseUrl": "src", + "noEmit": true }, - "exclude": ["node_modules", "cypress", "src/**/*.test.*"], - "include": ["src/**/*"] + "exclude": [ + "node_modules", + "cypress", + "src/**/*.test.*" + ], + "include": [ + "src/**/*" + ] } diff --git a/yarn.lock b/yarn.lock index 65d004e1e37..472d3f99e08 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14870,7 +14870,7 @@ lz-string@^1.4.4: resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" integrity sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY= -magic-string@^0.25.0, magic-string@^0.25.7: +magic-string@^0.25.0, magic-string@^0.25.3, magic-string@^0.25.7: version "0.25.7" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== @@ -18969,6 +18969,22 @@ rollup-plugin-dts@^4.1.0: optionalDependencies: "@babel/code-frame" "^7.16.0" +rollup-plugin-inject@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz#e4233855bfba6c0c12a312fd6649dff9a13ee9f4" + integrity sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w== + dependencies: + estree-walker "^0.6.1" + magic-string "^0.25.3" + rollup-pluginutils "^2.8.1" + +rollup-plugin-node-polyfills@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz#53092a2744837164d5b8a28812ba5f3ff61109fd" + integrity sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA== + dependencies: + rollup-plugin-inject "^3.0.0" + rollup-plugin-peer-deps-external@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/rollup-plugin-peer-deps-external/-/rollup-plugin-peer-deps-external-2.2.4.tgz#8a420bbfd6dccc30aeb68c9bf57011f2f109570d" From f8a0925bdfa7231d59740eb5c991897dcb3e7b77 Mon Sep 17 00:00:00 2001 From: Lint Action Date: Sun, 30 Jan 2022 09:29:10 +0000 Subject: [PATCH 11/15] Fix code style issues with ESLint --- dist2/snowflake.esm.js | 28138 ++++++++++++++++++++++----------------- rollup.config.js | 5 +- 2 files changed, 16088 insertions(+), 12055 deletions(-) diff --git a/dist2/snowflake.esm.js b/dist2/snowflake.esm.js index 00beaa70597..5bf782315ea 100644 --- a/dist2/snowflake.esm.js +++ b/dist2/snowflake.esm.js @@ -1,12150 +1,16186 @@ -import { jsx, jsxs, Fragment } from 'react/jsx-runtime'; -import styled, { keyframes, css, createGlobalStyle, ThemeProvider as ThemeProvider$1, ThemeContext, useTheme as useTheme$1 } from 'styled-components/macro'; -import * as React from 'react'; -import React__default, { useMemo, useEffect, useState, useCallback, useContext, useRef, useLayoutEffect, memo, Suspense } from 'react'; -import { useDispatch, useSelector, shallowEqual, Provider as Provider$1 } from 'react-redux'; -import { createAction, createSlice, nanoid, createReducer, configureStore } from '@reduxjs/toolkit'; -import qs, { parse, stringify } from 'qs'; -import { useLocation, Link as Link$1, useHistory, NavLink, Redirect, Route as Route$3, Switch, HashRouter } from 'react-router-dom'; -import { getAddress, isAddress as isAddress$1 } from '@ethersproject/address'; -import { Trans, t, Plural } from '@lingui/macro'; -import { useWeb3React, UnsupportedChainIdError, createWeb3ReactRoot, Web3ReactProvider } from '@web3-react/core'; -import { Percent, Token, WETH9, NativeCurrency, Ether, CurrencyAmount, TradeType, Price, Fraction } from '@uniswap/sdk-core'; -import JSBI from 'jsbi'; -import { Text as Text$1, Box as Box$1 } from 'rebass'; -import { AddressZero, MaxUint256 } from '@ethersproject/constants'; -import { Contract } from '@ethersproject/contracts'; -import { atom } from 'jotai'; -import { useAtomValue, useUpdateAtom, atomWithDefault } from 'jotai/utils'; -import { createMulticall, NEVER_RELOAD } from '@uniswap/redux-multicall'; -import { FACTORY_ADDRESS, Pair, computePairAddress, Trade, Route as Route$2, Router } from '@uniswap/v2-sdk'; -import { FACTORY_ADDRESS as FACTORY_ADDRESS$1, Pool as Pool$1, computePoolAddress, FeeAmount, Route as Route$1, SwapQuoter, toHex, Trade as Trade$2, SwapRouter } from '@uniswap/v3-sdk'; -import { combineReducers, createStore } from 'redux'; -import { namehash } from '@ethersproject/hash'; -import { initializeApp } from 'firebase/app'; -import { getDatabase, push, ref } from 'firebase/database'; -import { arrayify, hexZeroPad, hexStripZeros, splitSignature } from '@ethersproject/bytes'; -import { parseBytes32String } from '@ethersproject/strings'; -import { initializeConnector } from 'widgets-web3-react/core'; -import { EMPTY } from 'widgets-web3-react/empty'; -import CID from 'cids'; -import { getNameFromData, rmPrefix } from 'multicodec'; -import { decode, toB58String } from 'multihashes'; -import { Interface } from '@ethersproject/abi'; -import { X, ExternalLink as ExternalLink$1, Trash, Check, ArrowDown, Info, HelpCircle, Coffee, MessageCircle, Globe, Moon, Sun, BookOpen, FileText, ChevronLeft, AlertTriangle, CheckCircle, Copy as Copy$1, Triangle, ArrowLeft, ArrowRight, Activity, ArrowDownCircle, ChevronDown, AlertOctagon, Heart, AlertCircle, ArrowUpRight, Slash, Plus, Edit, Settings, Lock, ArrowUpCircle } from 'react-feather'; -import ReactGA from 'react-ga'; -import { Box, Button as Button$1 } from 'rebass/styled-components'; -import { darken, transparentize, readableColor, shade } from 'polished'; -import ReactConfetti from 'react-confetti'; -import { DialogOverlay, DialogContent } from '@reach/dialog'; -import { animated, useTransition, useSpring } from 'react-spring'; -import { useGesture } from 'react-use-gesture'; -import { UAParser } from 'ua-parser-js'; -import { createApi, fetchBaseQuery, skipToken, setupListeners } from '@reduxjs/toolkit/query/react'; -import { save, load } from 'redux-localstorage-simple'; -import { gql, ClientError, GraphQLClient } from 'graphql-request'; -import { getVersionUpgrade, VersionUpgrade, minVersionBump } from '@uniswap/token-lists'; -import { Protocol, Trade as Trade$1, SwapRouter as SwapRouter$1 } from '@uniswap/router-sdk'; -import ms from 'ms.macro'; -import { parseUnits } from '@ethersproject/units'; -import useScrollPosition from '@react-hook/window-scroll'; -import Portal from '@reach/portal'; -import { usePopper } from 'react-popper'; -import { SafeAppConnector } from '@gnosis.pm/safe-apps-web3-react'; -import { InjectedConnector } from '@web3-react/injected-connector'; -import { PortisConnector } from '@web3-react/portis-connector'; -import { WalletConnectConnector } from '@web3-react/walletconnect-connector'; -import { WalletLinkConnector } from '@web3-react/walletlink-connector'; -import { Web3Provider } from '@ethersproject/providers'; -import { FortmaticConnector as FortmaticConnector$1 } from '@web3-react/fortmatic-connector'; -import { AbstractConnector } from '@web3-react/abstract-connector'; -import invariant from 'tiny-invariant'; -import jazzicon from '@metamask/jazzicon'; -import { BigNumber } from '@ethersproject/bignumber'; -import copy from 'copy-to-clipboard'; -import { useSpring as useSpring$1 } from 'react-spring/web'; -import useResizeObserver from 'use-resize-observer'; -import AutoSizer from 'react-virtualized-auto-sizer'; -import { FixedSizeList } from 'react-window'; -import Vibrant from 'node-vibrant/lib/bundle'; -import { hex } from 'wcag-contrast'; -import { i18n } from '@lingui/core'; -import { I18nProvider } from '@lingui/react'; -import { af, ar, ca, cs, da, de, el, en, es, fi, fr, he, hu, id, it, ja, ko, nl, no, pl, pt, ro, ru, sr, sv, sw, tr, uk, vi, zh } from 'make-plural/plurals'; -import { ChainId, routeAmountsToString, IMetric, setGlobalMetric, AlphaRouter } from '@uniswap/smart-order-router'; -import { providers } from 'ethers/lib/ethers'; - -/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */ -/* global Reflect, Promise */ - -var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); -}; - -function __extends(d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); -} - -var __assign = function() { - __assign = Object.assign || function __assign(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); -}; - -function __rest(s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -} - -function __awaiter(thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -} - -function __generator(thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -} - -function __values(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -} - -function __read(o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; -} - -function __spreadArray(to, from, pack) { - if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { - if (ar || !(i in from)) { - if (!ar) ar = Array.prototype.slice.call(from, 0, i); - ar[i] = from[i]; - } - } - return to.concat(ar || Array.prototype.slice.call(from)); -} - -function __makeTemplateObject(cooked, raw) { - if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } - return cooked; +import { jsx, jsxs, Fragment } from 'react/jsx-runtime' +import styled, { + keyframes, + css, + createGlobalStyle, + ThemeProvider as ThemeProvider$1, + ThemeContext, + useTheme as useTheme$1, +} from 'styled-components/macro' +import * as React from 'react' +import React__default, { + useMemo, + useEffect, + useState, + useCallback, + useContext, + useRef, + useLayoutEffect, + memo, + Suspense, +} from 'react' +import { useDispatch, useSelector, shallowEqual, Provider as Provider$1 } from 'react-redux' +import { createAction, createSlice, nanoid, createReducer, configureStore } from '@reduxjs/toolkit' +import qs, { parse, stringify } from 'qs' +import { + useLocation, + Link as Link$1, + useHistory, + NavLink, + Redirect, + Route as Route$3, + Switch, + HashRouter, +} from 'react-router-dom' +import { getAddress, isAddress as isAddress$1 } from '@ethersproject/address' +import { Trans, t, Plural } from '@lingui/macro' +import { useWeb3React, UnsupportedChainIdError, createWeb3ReactRoot, Web3ReactProvider } from '@web3-react/core' +import { + Percent, + Token, + WETH9, + NativeCurrency, + Ether, + CurrencyAmount, + TradeType, + Price, + Fraction, +} from '@uniswap/sdk-core' +import JSBI from 'jsbi' +import { Text as Text$1, Box as Box$1 } from 'rebass' +import { AddressZero, MaxUint256 } from '@ethersproject/constants' +import { Contract } from '@ethersproject/contracts' +import { atom } from 'jotai' +import { useAtomValue, useUpdateAtom, atomWithDefault } from 'jotai/utils' +import { createMulticall, NEVER_RELOAD } from '@uniswap/redux-multicall' +import { FACTORY_ADDRESS, Pair, computePairAddress, Trade, Route as Route$2, Router } from '@uniswap/v2-sdk' +import { + FACTORY_ADDRESS as FACTORY_ADDRESS$1, + Pool as Pool$1, + computePoolAddress, + FeeAmount, + Route as Route$1, + SwapQuoter, + toHex, + Trade as Trade$2, + SwapRouter, +} from '@uniswap/v3-sdk' +import { combineReducers, createStore } from 'redux' +import { namehash } from '@ethersproject/hash' +import { initializeApp } from 'firebase/app' +import { getDatabase, push, ref } from 'firebase/database' +import { arrayify, hexZeroPad, hexStripZeros, splitSignature } from '@ethersproject/bytes' +import { parseBytes32String } from '@ethersproject/strings' +import { initializeConnector } from 'widgets-web3-react/core' +import { EMPTY } from 'widgets-web3-react/empty' +import CID from 'cids' +import { getNameFromData, rmPrefix } from 'multicodec' +import { decode, toB58String } from 'multihashes' +import { Interface } from '@ethersproject/abi' +import { + X, + ExternalLink as ExternalLink$1, + Trash, + Check, + ArrowDown, + Info, + HelpCircle, + Coffee, + MessageCircle, + Globe, + Moon, + Sun, + BookOpen, + FileText, + ChevronLeft, + AlertTriangle, + CheckCircle, + Copy as Copy$1, + Triangle, + ArrowLeft, + ArrowRight, + Activity, + ArrowDownCircle, + ChevronDown, + AlertOctagon, + Heart, + AlertCircle, + ArrowUpRight, + Slash, + Plus, + Edit, + Settings, + Lock, + ArrowUpCircle, +} from 'react-feather' +import ReactGA from 'react-ga' +import { Box, Button as Button$1 } from 'rebass/styled-components' +import { darken, transparentize, readableColor, shade } from 'polished' +import ReactConfetti from 'react-confetti' +import { DialogOverlay, DialogContent } from '@reach/dialog' +import { animated, useTransition, useSpring } from 'react-spring' +import { useGesture } from 'react-use-gesture' +import { UAParser } from 'ua-parser-js' +import { createApi, fetchBaseQuery, skipToken, setupListeners } from '@reduxjs/toolkit/query/react' +import { save, load } from 'redux-localstorage-simple' +import { gql, ClientError, GraphQLClient } from 'graphql-request' +import { getVersionUpgrade, VersionUpgrade, minVersionBump } from '@uniswap/token-lists' +import { Protocol, Trade as Trade$1, SwapRouter as SwapRouter$1 } from '@uniswap/router-sdk' +import ms from 'ms.macro' +import { parseUnits } from '@ethersproject/units' +import useScrollPosition from '@react-hook/window-scroll' +import Portal from '@reach/portal' +import { usePopper } from 'react-popper' +import { SafeAppConnector } from '@gnosis.pm/safe-apps-web3-react' +import { InjectedConnector } from '@web3-react/injected-connector' +import { PortisConnector } from '@web3-react/portis-connector' +import { WalletConnectConnector } from '@web3-react/walletconnect-connector' +import { WalletLinkConnector } from '@web3-react/walletlink-connector' +import { Web3Provider } from '@ethersproject/providers' +import { FortmaticConnector as FortmaticConnector$1 } from '@web3-react/fortmatic-connector' +import { AbstractConnector } from '@web3-react/abstract-connector' +import invariant from 'tiny-invariant' +import jazzicon from '@metamask/jazzicon' +import { BigNumber } from '@ethersproject/bignumber' +import copy from 'copy-to-clipboard' +import { useSpring as useSpring$1 } from 'react-spring/web' +import useResizeObserver from 'use-resize-observer' +import AutoSizer from 'react-virtualized-auto-sizer' +import { FixedSizeList } from 'react-window' +import Vibrant from 'node-vibrant/lib/bundle' +import { hex } from 'wcag-contrast' +import { i18n } from '@lingui/core' +import { I18nProvider } from '@lingui/react' +import { + af, + ar, + ca, + cs, + da, + de, + el, + en, + es, + fi, + fr, + he, + hu, + id, + it, + ja, + ko, + nl, + no, + pl, + pt, + ro, + ru, + sr, + sv, + sw, + tr, + uk, + vi, + zh, +} from 'make-plural/plurals' +import { ChainId, routeAmountsToString, IMetric, setGlobalMetric, AlphaRouter } from '@uniswap/smart-order-router' +import { providers } from 'ethers/lib/ethers' + +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ +/* global Reflect, Promise */ + +var extendStatics = function (d, b) { + extendStatics = + Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && + function (d, b) { + d.__proto__ = b + }) || + function (d, b) { + for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p] + } + return extendStatics(d, b) } -var rotate$2 = keyframes(templateObject_1$1n || (templateObject_1$1n = __makeTemplateObject(["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"], ["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"]))); -var StyledSVG = styled.svg(templateObject_2$11 || (templateObject_2$11 = __makeTemplateObject(["\n animation: 2s ", " linear infinite;\n height: ", ";\n width: ", ";\n path {\n stroke: ", ";\n }\n"], ["\n animation: 2s ", " linear infinite;\n height: ", ";\n width: ", ";\n path {\n stroke: ", ";\n }\n" - /** - * Takes in custom size and stroke for circle color, default to primary color as fill, - * need ...rest for layered styles on top - */ -])), rotate$2, function (_a) { - var size = _a.size; - return size; -}, function (_a) { - var size = _a.size; - return size; -}, function (_a) { - var stroke = _a.stroke, theme = _a.theme; - return stroke !== null && stroke !== void 0 ? stroke : theme.primary1; -}); -/** - * Takes in custom size and stroke for circle color, default to primary color as fill, - * need ...rest for layered styles on top - */ -function Loader(_a) { - var _b = _a.size, size = _b === void 0 ? '16px' : _b, stroke = _a.stroke, rest = __rest(_a, ["size", "stroke"]); - return (jsx(StyledSVG, __assign({ viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", size: size, stroke: stroke }, rest, { children: jsx("path", { d: "M12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22C17.5228 22 22 17.5228 22 12C22 9.27455 20.9097 6.80375 19.1414 5", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round" }, void 0) }), void 0)); -} -var templateObject_1$1n, templateObject_2$11; - -var useAppDispatch = function () { return useDispatch(); }; -var useAppSelector = useSelector; - -var updateMatchesDarkMode = createAction('user/updateMatchesDarkMode'); -var updateUserDarkMode = createAction('user/updateUserDarkMode'); -var updateUserExpertMode = createAction('user/updateUserExpertMode'); -var updateUserLocale = createAction('user/updateUserLocale'); -var updateShowSurveyPopup = createAction('user/updateShowSurveyPopup'); -var updateUserClientSideRouter = createAction('user/updateUserClientSideRouter'); -var updateHideClosedPositions = createAction('user/hideClosedPositions'); -var updateUserSlippageTolerance = createAction('user/updateUserSlippageTolerance'); -var updateUserDeadline = createAction('user/updateUserDeadline'); -var addSerializedToken = createAction('user/addSerializedToken'); -var removeSerializedToken = createAction('user/removeSerializedToken'); -var addSerializedPair = createAction('user/addSerializedPair'); -var removeSerializedPair = createAction('user/removeSerializedPair'); - -function parsedQueryString(search) { - if (!search) { - // react-router-dom places search string in the hash - var hash = window.location.hash; - search = hash.substr(hash.indexOf('?')); - } - return search && search.length > 1 ? parse(search, { parseArrays: false, ignoreQueryPrefix: true }) : {}; -} -function useParsedQueryString() { - var search = useLocation().search; - return useMemo(function () { return parsedQueryString(search); }, [search]); +function __extends(d, b) { + if (typeof b !== 'function' && b !== null) + throw new TypeError('Class extends value ' + String(b) + ' is not a constructor or null') + extendStatics(d, b) + function __() { + this.constructor = d + } + d.prototype = b === null ? Object.create(b) : ((__.prototype = b.prototype), new __()) } -function ApeModeQueryParamReader() { - useApeModeQueryParamReader(); - return null; -} -function useApeModeQueryParamReader() { - var dispatch = useAppDispatch(); - var ape = useParsedQueryString().ape; - useEffect(function () { - if (typeof ape !== 'string') - return; - if (ape === '' || ape.toLowerCase() === 'true') { - dispatch(updateUserExpertMode({ userExpertMode: true })); - } - }); +var __assign = function () { + __assign = + Object.assign || + function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i] + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p] + } + return t + } + return __assign.apply(this, arguments) } -var NetworkContextName = 'NETWORK'; -var IS_IN_IFRAME = window.parent !== window; -// 30 minutes, denominated in seconds -var DEFAULT_DEADLINE_FROM_NOW = 60 * 30; -var L2_DEADLINE_FROM_NOW = 60 * 5; -// transaction popup dismisal amounts -var DEFAULT_TXN_DISMISS_MS = 25000; -var L2_TXN_DISMISS_MS = 5000; -// used for rewards deadlines -JSBI.BigInt(60 * 60 * 24 * 7); -JSBI.BigInt(0); -// one basis JSBI.BigInt -var BIPS_BASE = JSBI.BigInt(10000); -new Percent(JSBI.BigInt(1), BIPS_BASE); -// used for warning states -var ALLOWED_PRICE_IMPACT_LOW = new Percent(JSBI.BigInt(100), BIPS_BASE); // 1% -var ALLOWED_PRICE_IMPACT_MEDIUM = new Percent(JSBI.BigInt(300), BIPS_BASE); // 3% -var ALLOWED_PRICE_IMPACT_HIGH = new Percent(JSBI.BigInt(500), BIPS_BASE); // 5% -// if the price slippage exceeds this number, force the user to type 'confirm' to execute -var PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN = new Percent(JSBI.BigInt(1000), BIPS_BASE); // 10% -// for non expert mode disable swaps above this -var BLOCKED_PRICE_IMPACT_NON_EXPERT = new Percent(JSBI.BigInt(1500), BIPS_BASE); // 15% -var BETTER_TRADE_LESS_HOPS_THRESHOLD = new Percent(JSBI.BigInt(50), BIPS_BASE); -var ZERO_PERCENT = new Percent('0'); -new Percent(JSBI.BigInt(200), BIPS_BASE); -var ONE_HUNDRED_PERCENT = new Percent('1'); - -function useActiveWeb3React() { - // if (false) { - // return useWidgetsWeb3React() - // } - var interfaceContext = useWeb3React(); - var interfaceNetworkContext = useWeb3React(NetworkContextName); - if (interfaceContext.active) { - return interfaceContext; - } - return interfaceNetworkContext; +function __rest(s, e) { + var t = {} + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p] + if (s != null && typeof Object.getOwnPropertySymbols === 'function') + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { + if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]] + } + return t } -var Circle$1 = "data:image/svg+xml,%3Csvg%20width%3D%2294%22%20height%3D%2294%22%20viewBox%3D%220%200%2094%2094%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%20%20%3Cpath%20d%3D%22M92%2047C92%2022.1472%2071.8528%202%2047%202C22.1472%202%202%2022.1472%202%2047C2%2071.8528%2022.1472%2092%2047%2092%22%20stroke%3D%22%232172E5%22%20stroke-width%3D%223%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E"; +function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P + ? value + : new P(function (resolve) { + resolve(value) + }) + } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)) + } catch (e) { + reject(e) + } + } + function rejected(value) { + try { + step(generator['throw'](value)) + } catch (e) { + reject(e) + } + } + function step(result) { + result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected) + } + step((generator = generator.apply(thisArg, _arguments || [])).next()) + }) +} -var tokenLogo = "data:image/png;base64,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"; +function __generator(thisArg, body) { + var _ = { + label: 0, + sent() { + if (t[0] & 1) throw t[1] + return t[1] + }, + trys: [], + ops: [], + }, + f, + y, + t, + g + return ( + (g = { next: verb(0), throw: verb(1), return: verb(2) }), + typeof Symbol === 'function' && + (g[Symbol.iterator] = function () { + return this + }), + g + ) + function verb(n) { + return function (v) { + return step([n, v]) + } + } + function step(op) { + if (f) throw new TypeError('Generator is already executing.') + while (_) + try { + if ( + ((f = 1), + y && + (t = op[0] & 2 ? y['return'] : op[0] ? y['throw'] || ((t = y['return']) && t.call(y), 0) : y.next) && + !(t = t.call(y, op[1])).done) + ) + return t + if (((y = 0), t)) op = [op[0] & 2, t.value] + switch (op[0]) { + case 0: + case 1: + t = op + break + case 4: + _.label++ + return { value: op[1], done: false } + case 5: + _.label++ + y = op[1] + op = [0] + continue + case 7: + op = _.ops.pop() + _.trys.pop() + continue + default: + if (!((t = _.trys), (t = t.length > 0 && t[t.length - 1])) && (op[0] === 6 || op[0] === 2)) { + _ = 0 + continue + } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { + _.label = op[1] + break + } + if (op[0] === 6 && _.label < t[1]) { + _.label = t[1] + t = op + break + } + if (t && _.label < t[2]) { + _.label = t[2] + _.ops.push(op) + break + } + if (t[2]) _.ops.pop() + _.trys.pop() + continue + } + op = body.call(thisArg, _) + } catch (e) { + op = [6, e] + y = 0 + } finally { + f = t = 0 + } + if (op[0] & 5) throw op[1] + return { value: op[0] ? op[1] : void 0, done: true } + } +} -// returns the checksummed address if the address is valid, otherwise returns false -function isAddress(value) { - try { - return getAddress(value); - } - catch (_a) { - return false; - } -} -// shorten the checksummed version of the input address to have 0x + 4 characters at start and end -function shortenAddress(address, chars) { - if (chars === void 0) { chars = 4; } - var parsed = isAddress(address); - if (!parsed) { - throw Error("Invalid 'address' parameter '" + address + "'."); - } - return parsed.substring(0, chars + 2) + "..." + parsed.substring(42 - chars); -} -// account is not optional -function getSigner(library, account) { - return library.getSigner(account).connectUnchecked(); -} -// account is optional -function getProviderOrSigner(library, account) { - return account ? getSigner(library, account) : library; -} -// account is optional -function getContract(address, ABI, library, account) { - if (!isAddress(address) || address === AddressZero) { - throw Error("Invalid 'address' parameter '" + address + "'."); - } - return new Contract(address, ABI, getProviderOrSigner(library, account)); -} -function escapeRegExp(string) { - return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string -} -function isTokenOnList(chainTokenMap, token) { - var _a; - return Boolean((token === null || token === void 0 ? void 0 : token.isToken) && ((_a = chainTokenMap[token.chainId]) === null || _a === void 0 ? void 0 : _a[token.address])); +function __values(o) { + var s = typeof Symbol === 'function' && Symbol.iterator, + m = s && o[s], + i = 0 + if (m) return m.call(o) + if (o && typeof o.length === 'number') + return { + next() { + if (o && i >= o.length) o = void 0 + return { value: o && o[i++], done: !o } + }, + } + throw new TypeError(s ? 'Object is not iterable.' : 'Symbol.iterator is not defined.') } -/** - * Debounces updates to a value. - * Non-primitives *must* wrap the value in useMemo, or the value will be updated due to referential inequality. - */ -// modified from https://usehooks.com/useDebounce/ -function useDebounce(value, delay) { - var _a = __read(useState(value), 2), debouncedValue = _a[0], setDebouncedValue = _a[1]; - useEffect(function () { - // Update debounced value after delay - var handler = setTimeout(function () { - setDebouncedValue(value); - }, delay); - // Cancel the timeout if value changes (also on delay change or unmount) - // This is how we prevent debounced value from updating if value is changed ... - // .. within the delay period. Timeout gets cleared and restarted. - return function () { - clearTimeout(handler); - }; - }, [value, delay]); - return debouncedValue; +function __read(o, n) { + var m = typeof Symbol === 'function' && o[Symbol.iterator] + if (!m) return o + var i = m.call(o), + r, + ar = [], + e + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value) + } catch (error) { + e = { error } + } finally { + try { + if (r && !r.done && (m = i['return'])) m.call(i) + } finally { + if (e) throw e.error + } + } + return ar } -var VISIBILITY_STATE_SUPPORTED = 'visibilityState' in document; -function isWindowVisible() { - return !VISIBILITY_STATE_SUPPORTED || document.visibilityState !== 'hidden'; -} -/** - * Returns whether the window is currently visible to the user. - */ -function useIsWindowVisible() { - var _a = __read(useState(isWindowVisible()), 2), focused = _a[0], setFocused = _a[1]; - var listener = useCallback(function () { - setFocused(isWindowVisible()); - }, [setFocused]); - useEffect(function () { - if (!VISIBILITY_STATE_SUPPORTED) - return undefined; - document.addEventListener('visibilitychange', listener); - return function () { - document.removeEventListener('visibilitychange', listener); - }; - }, [listener]); - return focused; +function __spreadArray(to, from, pack) { + if (pack || arguments.length === 2) + for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i) + ar[i] = from[i] + } + } + return to.concat(ar || Array.prototype.slice.call(from)) } -function useBlock() { - var _a = useActiveWeb3React(), chainId = _a.chainId, library = _a.library; - var windowVisible = useIsWindowVisible(); - var _b = __read(useState({ chainId: chainId }), 2), state = _b[0], setState = _b[1]; - var onBlock = useCallback(function (block) { - setState(function (state) { - if (state.chainId === chainId) { - if (typeof state.block !== 'number') - return { chainId: chainId, block: block }; - return { chainId: chainId, block: Math.max(block, state.block) }; - } - return state; - }); - }, [chainId]); - useEffect(function () { - if (library && chainId && windowVisible) { - setState({ chainId: chainId }); - library - .getBlockNumber() - .then(onBlock) - .catch(function (error) { - console.error("Failed to get block number for chainId " + chainId, error); - }); - library.on('block', onBlock); - return function () { - library.removeListener('block', onBlock); - }; - } - return undefined; - }, [chainId, library, onBlock, windowVisible]); - var debouncedBlock = useDebounce(state.block, 100); - return state.block ? debouncedBlock : undefined; -} -var blockAtom = atom(undefined); -function BlockUpdater() { - var setBlock = useUpdateAtom(blockAtom); - var block = useBlock(); - useEffect(function () { - setBlock(block); - }, [block, setBlock]); - return null; -} -/** Requires that BlockUpdater be installed in the DOM tree. */ -function useBlockNumber() { - var chainId = useActiveWeb3React().chainId; - var block = useAtomValue(blockAtom); - return chainId ? block : undefined; -} -function useFastForwardBlockNumber() { - return useUpdateAtom(blockAtom); +function __makeTemplateObject(cooked, raw) { + if (Object.defineProperty) { + Object.defineProperty(cooked, 'raw', { value: raw }) + } else { + cooked.raw = raw + } + return cooked +} + +var rotate$2 = keyframes( + templateObject_1$1n || + (templateObject_1$1n = __makeTemplateObject( + ['\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n'], + ['\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n'] + )) +) +var StyledSVG = styled.svg( + templateObject_2$11 || + (templateObject_2$11 = __makeTemplateObject( + ['\n animation: 2s ', ' linear infinite;\n height: ', ';\n width: ', ';\n path {\n stroke: ', ';\n }\n'], + [ + '\n animation: 2s ', + ' linear infinite;\n height: ', + ';\n width: ', + ';\n path {\n stroke: ', + ';\n }\n', + /** + * Takes in custom size and stroke for circle color, default to primary color as fill, + * need ...rest for layered styles on top + */ + ] + )), + rotate$2, + function (_a) { + var size = _a.size + return size + }, + function (_a) { + var size = _a.size + return size + }, + function (_a) { + var stroke = _a.stroke, + theme = _a.theme + return stroke !== null && stroke !== void 0 ? stroke : theme.primary1 + } +) +/** + * Takes in custom size and stroke for circle color, default to primary color as fill, + * need ...rest for layered styles on top + */ +function Loader(_a) { + var _b = _a.size, + size = _b === void 0 ? '16px' : _b, + stroke = _a.stroke, + rest = __rest(_a, ['size', 'stroke']) + return jsx( + StyledSVG, + __assign({ viewBox: '0 0 24 24', fill: 'none', xmlns: 'http://www.w3.org/2000/svg', size, stroke }, rest, { + children: jsx( + 'path', + { + d: 'M12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22C17.5228 22 22 17.5228 22 12C22 9.27455 20.9097 6.80375 19.1414 5', + strokeWidth: '2.5', + strokeLinecap: 'round', + strokeLinejoin: 'round', + }, + void 0 + ), + }), + void 0 + ) +} +var templateObject_1$1n, templateObject_2$11 + +var useAppDispatch = function () { + return useDispatch() +} +var useAppSelector = useSelector + +var updateMatchesDarkMode = createAction('user/updateMatchesDarkMode') +var updateUserDarkMode = createAction('user/updateUserDarkMode') +var updateUserExpertMode = createAction('user/updateUserExpertMode') +var updateUserLocale = createAction('user/updateUserLocale') +var updateShowSurveyPopup = createAction('user/updateShowSurveyPopup') +var updateUserClientSideRouter = createAction('user/updateUserClientSideRouter') +var updateHideClosedPositions = createAction('user/hideClosedPositions') +var updateUserSlippageTolerance = createAction('user/updateUserSlippageTolerance') +var updateUserDeadline = createAction('user/updateUserDeadline') +var addSerializedToken = createAction('user/addSerializedToken') +var removeSerializedToken = createAction('user/removeSerializedToken') +var addSerializedPair = createAction('user/addSerializedPair') +var removeSerializedPair = createAction('user/removeSerializedPair') + +function parsedQueryString(search) { + if (!search) { + // react-router-dom places search string in the hash + var hash = window.location.hash + search = hash.substr(hash.indexOf('?')) + } + return search && search.length > 1 ? parse(search, { parseArrays: false, ignoreQueryPrefix: true }) : {} +} +function useParsedQueryString() { + var search = useLocation().search + return useMemo( + function () { + return parsedQueryString(search) + }, + [search] + ) +} + +function ApeModeQueryParamReader() { + useApeModeQueryParamReader() + return null +} +function useApeModeQueryParamReader() { + var dispatch = useAppDispatch() + var ape = useParsedQueryString().ape + useEffect(function () { + if (typeof ape !== 'string') return + if (ape === '' || ape.toLowerCase() === 'true') { + dispatch(updateUserExpertMode({ userExpertMode: true })) + } + }) +} + +var NetworkContextName = 'NETWORK' +var IS_IN_IFRAME = window.parent !== window +// 30 minutes, denominated in seconds +var DEFAULT_DEADLINE_FROM_NOW = 60 * 30 +var L2_DEADLINE_FROM_NOW = 60 * 5 +// transaction popup dismisal amounts +var DEFAULT_TXN_DISMISS_MS = 25000 +var L2_TXN_DISMISS_MS = 5000 +// used for rewards deadlines +JSBI.BigInt(60 * 60 * 24 * 7) +JSBI.BigInt(0) +// one basis JSBI.BigInt +var BIPS_BASE = JSBI.BigInt(10000) +new Percent(JSBI.BigInt(1), BIPS_BASE) +// used for warning states +var ALLOWED_PRICE_IMPACT_LOW = new Percent(JSBI.BigInt(100), BIPS_BASE) // 1% +var ALLOWED_PRICE_IMPACT_MEDIUM = new Percent(JSBI.BigInt(300), BIPS_BASE) // 3% +var ALLOWED_PRICE_IMPACT_HIGH = new Percent(JSBI.BigInt(500), BIPS_BASE) // 5% +// if the price slippage exceeds this number, force the user to type 'confirm' to execute +var PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN = new Percent(JSBI.BigInt(1000), BIPS_BASE) // 10% +// for non expert mode disable swaps above this +var BLOCKED_PRICE_IMPACT_NON_EXPERT = new Percent(JSBI.BigInt(1500), BIPS_BASE) // 15% +var BETTER_TRADE_LESS_HOPS_THRESHOLD = new Percent(JSBI.BigInt(50), BIPS_BASE) +var ZERO_PERCENT = new Percent('0') +new Percent(JSBI.BigInt(200), BIPS_BASE) +var ONE_HUNDRED_PERCENT = new Percent('1') + +function useActiveWeb3React() { + // if (false) { + // return useWidgetsWeb3React() + // } + var interfaceContext = useWeb3React() + var interfaceNetworkContext = useWeb3React(NetworkContextName) + if (interfaceContext.active) { + return interfaceContext + } + return interfaceNetworkContext +} + +var Circle$1 = + 'data:image/svg+xml,%3Csvg%20width%3D%2294%22%20height%3D%2294%22%20viewBox%3D%220%200%2094%2094%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%20%20%3Cpath%20d%3D%22M92%2047C92%2022.1472%2071.8528%202%2047%202C22.1472%202%202%2022.1472%202%2047C2%2071.8528%2022.1472%2092%2047%2092%22%20stroke%3D%22%232172E5%22%20stroke-width%3D%223%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E' + +var tokenLogo = + 'data:image/png;base64,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' + +// returns the checksummed address if the address is valid, otherwise returns false +function isAddress(value) { + try { + return getAddress(value) + } catch (_a) { + return false + } +} +// shorten the checksummed version of the input address to have 0x + 4 characters at start and end +function shortenAddress(address, chars) { + if (chars === void 0) { + chars = 4 + } + var parsed = isAddress(address) + if (!parsed) { + throw Error("Invalid 'address' parameter '" + address + "'.") + } + return parsed.substring(0, chars + 2) + '...' + parsed.substring(42 - chars) +} +// account is not optional +function getSigner(library, account) { + return library.getSigner(account).connectUnchecked() +} +// account is optional +function getProviderOrSigner(library, account) { + return account ? getSigner(library, account) : library +} +// account is optional +function getContract(address, ABI, library, account) { + if (!isAddress(address) || address === AddressZero) { + throw Error("Invalid 'address' parameter '" + address + "'.") + } + return new Contract(address, ABI, getProviderOrSigner(library, account)) +} +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') // $& means the whole matched string +} +function isTokenOnList(chainTokenMap, token) { + var _a + return Boolean( + (token === null || token === void 0 ? void 0 : token.isToken) && + ((_a = chainTokenMap[token.chainId]) === null || _a === void 0 ? void 0 : _a[token.address]) + ) +} + +/** + * Debounces updates to a value. + * Non-primitives *must* wrap the value in useMemo, or the value will be updated due to referential inequality. + */ +// modified from https://usehooks.com/useDebounce/ +function useDebounce(value, delay) { + var _a = __read(useState(value), 2), + debouncedValue = _a[0], + setDebouncedValue = _a[1] + useEffect( + function () { + // Update debounced value after delay + var handler = setTimeout(function () { + setDebouncedValue(value) + }, delay) + // Cancel the timeout if value changes (also on delay change or unmount) + // This is how we prevent debounced value from updating if value is changed ... + // .. within the delay period. Timeout gets cleared and restarted. + return function () { + clearTimeout(handler) + } + }, + [value, delay] + ) + return debouncedValue +} + +var VISIBILITY_STATE_SUPPORTED = 'visibilityState' in document +function isWindowVisible() { + return !VISIBILITY_STATE_SUPPORTED || document.visibilityState !== 'hidden' +} +/** + * Returns whether the window is currently visible to the user. + */ +function useIsWindowVisible() { + var _a = __read(useState(isWindowVisible()), 2), + focused = _a[0], + setFocused = _a[1] + var listener = useCallback( + function () { + setFocused(isWindowVisible()) + }, + [setFocused] + ) + useEffect( + function () { + if (!VISIBILITY_STATE_SUPPORTED) return undefined + document.addEventListener('visibilitychange', listener) + return function () { + document.removeEventListener('visibilitychange', listener) + } + }, + [listener] + ) + return focused +} + +function useBlock() { + var _a = useActiveWeb3React(), + chainId = _a.chainId, + library = _a.library + var windowVisible = useIsWindowVisible() + var _b = __read(useState({ chainId }), 2), + state = _b[0], + setState = _b[1] + var onBlock = useCallback( + function (block) { + setState(function (state) { + if (state.chainId === chainId) { + if (typeof state.block !== 'number') return { chainId, block } + return { chainId, block: Math.max(block, state.block) } + } + return state + }) + }, + [chainId] + ) + useEffect( + function () { + if (library && chainId && windowVisible) { + setState({ chainId }) + library + .getBlockNumber() + .then(onBlock) + .catch(function (error) { + console.error('Failed to get block number for chainId ' + chainId, error) + }) + library.on('block', onBlock) + return function () { + library.removeListener('block', onBlock) + } + } + return undefined + }, + [chainId, library, onBlock, windowVisible] + ) + var debouncedBlock = useDebounce(state.block, 100) + return state.block ? debouncedBlock : undefined +} +var blockAtom = atom(undefined) +function BlockUpdater() { + var setBlock = useUpdateAtom(blockAtom) + var block = useBlock() + useEffect( + function () { + setBlock(block) + }, + [block, setBlock] + ) + return null +} +/** Requires that BlockUpdater be installed in the DOM tree. */ +function useBlockNumber() { + var chainId = useActiveWeb3React().chainId + var block = useAtomValue(blockAtom) + return chainId ? block : undefined +} +function useFastForwardBlockNumber() { + return useUpdateAtom(blockAtom) } var abi$6 = [ - { - inputs: [ - { - internalType: "address", - name: "_rewardsDistribution", - type: "address" - }, - { - internalType: "address", - name: "_rewardsToken", - type: "address" - }, - { - internalType: "address", - name: "_stakingToken", - type: "address" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "constructor" - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "reward", - type: "uint256" - } - ], - name: "RewardAdded", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "user", - type: "address" - }, - { - indexed: false, - internalType: "uint256", - name: "reward", - type: "uint256" - } - ], - name: "RewardPaid", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "user", - type: "address" - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256" - } - ], - name: "Staked", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "user", - type: "address" - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256" - } - ], - name: "Withdrawn", - type: "event" - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "account", - type: "address" - } - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "account", - type: "address" - } - ], - name: "earned", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - ], - name: "exit", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - ], - name: "getReward", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "getRewardForDuration", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "lastTimeRewardApplicable", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "lastUpdateTime", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "reward", - type: "uint256" - } - ], - name: "notifyRewardAmount", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "periodFinish", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "rewardPerToken", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "rewardPerTokenStored", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "rewardRate", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - name: "rewards", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "rewardsDistribution", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "rewardsDuration", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "rewardsToken", - outputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256" - } - ], - name: "stake", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - }, - { - internalType: "uint8", - name: "v", - type: "uint8" - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32" - } - ], - name: "stakeWithPermit", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "stakingToken", - outputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - name: "userRewardPerTokenPaid", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256" - } - ], - name: "withdraw", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - } -]; + { + inputs: [ + { + internalType: 'address', + name: '_rewardsDistribution', + type: 'address', + }, + { + internalType: 'address', + name: '_rewardsToken', + type: 'address', + }, + { + internalType: 'address', + name: '_stakingToken', + type: 'address', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'uint256', + name: 'reward', + type: 'uint256', + }, + ], + name: 'RewardAdded', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'user', + type: 'address', + }, + { + indexed: false, + internalType: 'uint256', + name: 'reward', + type: 'uint256', + }, + ], + name: 'RewardPaid', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'user', + type: 'address', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount', + type: 'uint256', + }, + ], + name: 'Staked', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'user', + type: 'address', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount', + type: 'uint256', + }, + ], + name: 'Withdrawn', + type: 'event', + }, + { + constant: true, + inputs: [ + { + internalType: 'address', + name: 'account', + type: 'address', + }, + ], + name: 'balanceOf', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'address', + name: 'account', + type: 'address', + }, + ], + name: 'earned', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [], + name: 'exit', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [], + name: 'getReward', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'getRewardForDuration', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'lastTimeRewardApplicable', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'lastUpdateTime', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'uint256', + name: 'reward', + type: 'uint256', + }, + ], + name: 'notifyRewardAmount', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'periodFinish', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'rewardPerToken', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'rewardPerTokenStored', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'rewardRate', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + name: 'rewards', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'rewardsDistribution', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'rewardsDuration', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'rewardsToken', + outputs: [ + { + internalType: 'contract IERC20', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'uint256', + name: 'amount', + type: 'uint256', + }, + ], + name: 'stake', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'uint256', + name: 'amount', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + { + internalType: 'uint8', + name: 'v', + type: 'uint8', + }, + { + internalType: 'bytes32', + name: 'r', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 's', + type: 'bytes32', + }, + ], + name: 'stakeWithPermit', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'stakingToken', + outputs: [ + { + internalType: 'contract IERC20', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'totalSupply', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + name: 'userRewardPerTokenPaid', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'uint256', + name: 'amount', + type: 'uint256', + }, + ], + name: 'withdraw', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, +] var abi$5 = [ - { - inputs: [ - { - internalType: "address", - name: "token_", - type: "address" - }, - { - internalType: "bytes32", - name: "merkleRoot_", - type: "bytes32" - } - ], - stateMutability: "nonpayable", - type: "constructor" - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "index", - type: "uint256" - }, - { - indexed: false, - internalType: "address", - name: "account", - type: "address" - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256" - } - ], - name: "Claimed", - type: "event" - }, - { - inputs: [ - { - internalType: "uint256", - name: "index", - type: "uint256" - }, - { - internalType: "address", - name: "account", - type: "address" - }, - { - internalType: "uint256", - name: "amount", - type: "uint256" - }, - { - internalType: "bytes32[]", - name: "merkleProof", - type: "bytes32[]" - } - ], - name: "claim", - outputs: [ - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "index", - type: "uint256" - } - ], - name: "isClaimed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - ], - name: "merkleRoot", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - ], - name: "token", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - stateMutability: "view", - type: "function" - } -]; + { + inputs: [ + { + internalType: 'address', + name: 'token_', + type: 'address', + }, + { + internalType: 'bytes32', + name: 'merkleRoot_', + type: 'bytes32', + }, + ], + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'uint256', + name: 'index', + type: 'uint256', + }, + { + indexed: false, + internalType: 'address', + name: 'account', + type: 'address', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount', + type: 'uint256', + }, + ], + name: 'Claimed', + type: 'event', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'index', + type: 'uint256', + }, + { + internalType: 'address', + name: 'account', + type: 'address', + }, + { + internalType: 'uint256', + name: 'amount', + type: 'uint256', + }, + { + internalType: 'bytes32[]', + name: 'merkleProof', + type: 'bytes32[]', + }, + ], + name: 'claim', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'index', + type: 'uint256', + }, + ], + name: 'isClaimed', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'merkleRoot', + outputs: [ + { + internalType: 'bytes32', + name: '', + type: 'bytes32', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'token', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, +] var abi$4 = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address" - }, - { - indexed: true, - internalType: "address", - name: "spender", - type: "address" - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256" - } - ], - name: "Approval", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "sender", - type: "address" - }, - { - indexed: false, - internalType: "uint256", - name: "amount0", - type: "uint256" - }, - { - indexed: false, - internalType: "uint256", - name: "amount1", - type: "uint256" - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address" - } - ], - name: "Burn", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "sender", - type: "address" - }, - { - indexed: false, - internalType: "uint256", - name: "amount0", - type: "uint256" - }, - { - indexed: false, - internalType: "uint256", - name: "amount1", - type: "uint256" - } - ], - name: "Mint", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "sender", - type: "address" - }, - { - indexed: false, - internalType: "uint256", - name: "amount0In", - type: "uint256" - }, - { - indexed: false, - internalType: "uint256", - name: "amount1In", - type: "uint256" - }, - { - indexed: false, - internalType: "uint256", - name: "amount0Out", - type: "uint256" - }, - { - indexed: false, - internalType: "uint256", - name: "amount1Out", - type: "uint256" - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address" - } - ], - name: "Swap", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint112", - name: "reserve0", - type: "uint112" - }, - { - indexed: false, - internalType: "uint112", - name: "reserve1", - type: "uint112" - } - ], - name: "Sync", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address" - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address" - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256" - } - ], - name: "Transfer", - type: "event" - }, - { - constant: true, - inputs: [ - ], - name: "DOMAIN_SEPARATOR", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "MINIMUM_LIQUIDITY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "pure", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "PERMIT_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32" - } - ], - payable: false, - stateMutability: "pure", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "owner", - type: "address" - }, - { - internalType: "address", - name: "spender", - type: "address" - } - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "spender", - type: "address" - }, - { - internalType: "uint256", - name: "value", - type: "uint256" - } - ], - name: "approve", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "owner", - type: "address" - } - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "to", - type: "address" - } - ], - name: "burn", - outputs: [ - { - internalType: "uint256", - name: "amount0", - type: "uint256" - }, - { - internalType: "uint256", - name: "amount1", - type: "uint256" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8" - } - ], - payable: false, - stateMutability: "pure", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "factory", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "getReserves", - outputs: [ - { - internalType: "uint112", - name: "reserve0", - type: "uint112" - }, - { - internalType: "uint112", - name: "reserve1", - type: "uint112" - }, - { - internalType: "uint32", - name: "blockTimestampLast", - type: "uint32" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "", - type: "address" - }, - { - internalType: "address", - name: "", - type: "address" - } - ], - name: "initialize", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "kLast", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "to", - type: "address" - } - ], - name: "mint", - outputs: [ - { - internalType: "uint256", - name: "liquidity", - type: "uint256" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string" - } - ], - payable: false, - stateMutability: "pure", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "owner", - type: "address" - } - ], - name: "nonces", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "owner", - type: "address" - }, - { - internalType: "address", - name: "spender", - type: "address" - }, - { - internalType: "uint256", - name: "value", - type: "uint256" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - }, - { - internalType: "uint8", - name: "v", - type: "uint8" - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32" - } - ], - name: "permit", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "price0CumulativeLast", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "price1CumulativeLast", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "to", - type: "address" - } - ], - name: "skim", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "amount0Out", - type: "uint256" - }, - { - internalType: "uint256", - name: "amount1Out", - type: "uint256" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "bytes", - name: "data", - type: "bytes" - } - ], - name: "swap", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string" - } - ], - payable: false, - stateMutability: "pure", - type: "function" - }, - { - constant: false, - inputs: [ - ], - name: "sync", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "token0", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "token1", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "value", - type: "uint256" - } - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "from", - type: "address" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "value", - type: "uint256" - } - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - } -]; - -var abi$3 = [ - { - inputs: [ - ], - name: "WETH", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - stateMutability: "pure", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "tokenA", - type: "address" - }, - { - internalType: "address", - name: "tokenB", - type: "address" - }, - { - internalType: "uint256", - name: "amountADesired", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountBDesired", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountAMin", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountBMin", - type: "uint256" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "addLiquidity", - outputs: [ - { - internalType: "uint256", - name: "amountA", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountB", - type: "uint256" - }, - { - internalType: "uint256", - name: "liquidity", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address" - }, - { - internalType: "uint256", - name: "amountTokenDesired", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountTokenMin", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountETHMin", - type: "uint256" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "addLiquidityETH", - outputs: [ - { - internalType: "uint256", - name: "amountToken", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountETH", - type: "uint256" - }, - { - internalType: "uint256", - name: "liquidity", - type: "uint256" - } - ], - stateMutability: "payable", - type: "function" - }, - { - inputs: [ - ], - name: "factory", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - stateMutability: "pure", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256" - }, - { - internalType: "uint256", - name: "reserveIn", - type: "uint256" - }, - { - internalType: "uint256", - name: "reserveOut", - type: "uint256" - } - ], - name: "getAmountIn", - outputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - } - ], - stateMutability: "pure", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - }, - { - internalType: "uint256", - name: "reserveIn", - type: "uint256" - }, - { - internalType: "uint256", - name: "reserveOut", - type: "uint256" - } - ], - name: "getAmountOut", - outputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256" - } - ], - stateMutability: "pure", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - } - ], - name: "getAmountsIn", - outputs: [ - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - } - ], - name: "getAmountsOut", - outputs: [ - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountA", - type: "uint256" - }, - { - internalType: "uint256", - name: "reserveA", - type: "uint256" - }, - { - internalType: "uint256", - name: "reserveB", - type: "uint256" - } - ], - name: "quote", - outputs: [ - { - internalType: "uint256", - name: "amountB", - type: "uint256" - } - ], - stateMutability: "pure", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "tokenA", - type: "address" - }, - { - internalType: "address", - name: "tokenB", - type: "address" - }, - { - internalType: "uint256", - name: "liquidity", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountAMin", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountBMin", - type: "uint256" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "removeLiquidity", - outputs: [ - { - internalType: "uint256", - name: "amountA", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountB", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address" - }, - { - internalType: "uint256", - name: "liquidity", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountTokenMin", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountETHMin", - type: "uint256" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "removeLiquidityETH", - outputs: [ - { - internalType: "uint256", - name: "amountToken", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountETH", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address" - }, - { - internalType: "uint256", - name: "liquidity", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountTokenMin", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountETHMin", - type: "uint256" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "removeLiquidityETHSupportingFeeOnTransferTokens", - outputs: [ - { - internalType: "uint256", - name: "amountETH", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address" - }, - { - internalType: "uint256", - name: "liquidity", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountTokenMin", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountETHMin", - type: "uint256" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - }, - { - internalType: "bool", - name: "approveMax", - type: "bool" - }, - { - internalType: "uint8", - name: "v", - type: "uint8" - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32" - } - ], - name: "removeLiquidityETHWithPermit", - outputs: [ - { - internalType: "uint256", - name: "amountToken", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountETH", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address" - }, - { - internalType: "uint256", - name: "liquidity", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountTokenMin", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountETHMin", - type: "uint256" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - }, - { - internalType: "bool", - name: "approveMax", - type: "bool" - }, - { - internalType: "uint8", - name: "v", - type: "uint8" - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32" - } - ], - name: "removeLiquidityETHWithPermitSupportingFeeOnTransferTokens", - outputs: [ - { - internalType: "uint256", - name: "amountETH", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "tokenA", - type: "address" - }, - { - internalType: "address", - name: "tokenB", - type: "address" - }, - { - internalType: "uint256", - name: "liquidity", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountAMin", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountBMin", - type: "uint256" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - }, - { - internalType: "bool", - name: "approveMax", - type: "bool" - }, - { - internalType: "uint8", - name: "v", - type: "uint8" - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32" - } - ], - name: "removeLiquidityWithPermit", - outputs: [ - { - internalType: "uint256", - name: "amountA", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountB", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "swapETHForExactTokens", - outputs: [ - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]" - } - ], - stateMutability: "payable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOutMin", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "swapExactETHForTokens", - outputs: [ - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]" - } - ], - stateMutability: "payable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOutMin", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "swapExactETHForTokensSupportingFeeOnTransferTokens", - outputs: [ - ], - stateMutability: "payable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountOutMin", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "swapExactTokensForETH", - outputs: [ - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountOutMin", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "swapExactTokensForETHSupportingFeeOnTransferTokens", - outputs: [ - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountOutMin", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "swapExactTokensForTokens", - outputs: [ - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountOutMin", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "swapExactTokensForTokensSupportingFeeOnTransferTokens", - outputs: [ - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountInMax", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "swapTokensForExactETH", - outputs: [ - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountInMax", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "swapTokensForExactTokens", - outputs: [ - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]" - } - ], - stateMutability: "nonpayable", - type: "function" - } -]; - -var abi$2 = [ - { - inputs: [ - { - internalType: "address", - name: "_factory", - type: "address" - }, - { - internalType: "address", - name: "_WETH9", - type: "address" - } - ], - stateMutability: "nonpayable", - type: "constructor" - }, - { - inputs: [ - ], - name: "WETH9", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - ], - name: "factory", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "bytes", - name: "path", - type: "bytes" - }, - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - } - ], - name: "quoteExactInput", - outputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "tokenIn", - type: "address" - }, - { - internalType: "address", - name: "tokenOut", - type: "address" - }, - { - internalType: "uint24", - name: "fee", - type: "uint24" - }, - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - }, - { - internalType: "uint160", - name: "sqrtPriceLimitX96", - type: "uint160" - } - ], - name: "quoteExactInputSingle", - outputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "bytes", - name: "path", - type: "bytes" - }, - { - internalType: "uint256", - name: "amountOut", - type: "uint256" - } - ], - name: "quoteExactOutput", - outputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "tokenIn", - type: "address" - }, - { - internalType: "address", - name: "tokenOut", - type: "address" - }, - { - internalType: "uint24", - name: "fee", - type: "uint24" - }, - { - internalType: "uint256", - name: "amountOut", - type: "uint256" - }, - { - internalType: "uint160", - name: "sqrtPriceLimitX96", - type: "uint160" - } - ], - name: "quoteExactOutputSingle", - outputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "int256", - name: "amount0Delta", - type: "int256" - }, - { - internalType: "int256", - name: "amount1Delta", - type: "int256" - }, - { - internalType: "bytes", - name: "path", - type: "bytes" - } - ], - name: "uniswapV3SwapCallback", - outputs: [ - ], - stateMutability: "view", - type: "function" - } -]; - -var abi$1 = [ - { - inputs: [ - ], - name: "getCurrentBlockTimestamp", - outputs: [ - { - internalType: "uint256", - name: "timestamp", - type: "uint256" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "addr", - type: "address" - } - ], - name: "getEthBalance", - outputs: [ - { - internalType: "uint256", - name: "balance", - type: "uint256" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "target", - type: "address" - }, - { - internalType: "uint256", - name: "gasLimit", - type: "uint256" - }, - { - internalType: "bytes", - name: "callData", - type: "bytes" - } - ], - internalType: "struct UniswapInterfaceMulticall.Call[]", - name: "calls", - type: "tuple[]" - } - ], - name: "multicall", - outputs: [ - { - internalType: "uint256", - name: "blockNumber", - type: "uint256" - }, - { - components: [ - { - internalType: "bool", - name: "success", - type: "bool" - }, - { - internalType: "uint256", - name: "gasUsed", - type: "uint256" - }, - { - internalType: "bytes", - name: "returnData", - type: "bytes" - } - ], - internalType: "struct UniswapInterfaceMulticall.Result[]", - name: "returnData", - type: "tuple[]" - } - ], - stateMutability: "nonpayable", - type: "function" - } -]; - -var ARGENT_WALLET_DETECTOR_ABI = [ - { - inputs: [ - { - internalType: "bytes32[]", - name: "_codes", - type: "bytes32[]" - }, - { - internalType: "address[]", - name: "_implementations", - type: "address[]" - } - ], - stateMutability: "nonpayable", - type: "constructor" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "code", - type: "bytes32" - } - ], - name: "CodeAdded", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "implementation", - type: "address" - } - ], - name: "ImplementationAdded", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_newOwner", - type: "address" - } - ], - name: "OwnerChanged", - type: "event" - }, - { - inputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32" - } - ], - name: "acceptedCodes", - outputs: [ - { - internalType: "bool", - name: "exists", - type: "bool" - }, - { - internalType: "uint128", - name: "index", - type: "uint128" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - name: "acceptedImplementations", - outputs: [ - { - internalType: "bool", - name: "exists", - type: "bool" - }, - { - internalType: "uint128", - name: "index", - type: "uint128" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "bytes32", - name: "_code", - type: "bytes32" - } - ], - name: "addCode", - outputs: [ - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "_argentWallet", - type: "address" - } - ], - name: "addCodeAndImplementationFromWallet", - outputs: [ - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "_impl", - type: "address" - } - ], - name: "addImplementation", - outputs: [ - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "_newOwner", - type: "address" - } - ], - name: "changeOwner", - outputs: [ - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - ], - name: "getCodes", - outputs: [ - { - internalType: "bytes32[]", - name: "", - type: "bytes32[]" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - ], - name: "getImplementations", - outputs: [ - { - internalType: "address[]", - name: "", - type: "address[]" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "_wallet", - type: "address" - } - ], - name: "isArgentWallet", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - ], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - stateMutability: "view", - type: "function" - } -]; - -var EIP_2612 = [ - { - constant: true, - inputs: [ - { - name: "owner", - type: "address" - } - ], - name: "nonces", - outputs: [ - { - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "DOMAIN_SEPARATOR", - outputs: [ - { - name: "", - type: "bytes32" - } - ], - payable: false, - stateMutability: "view", - type: "function" - } -]; - -var ENS_PUBLIC_RESOLVER_ABI = [ - { - inputs: [ - { - internalType: "contract ENS", - name: "_ens", - type: "address" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "constructor" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: true, - internalType: "uint256", - name: "contentType", - type: "uint256" - } - ], - name: "ABIChanged", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: false, - internalType: "address", - name: "a", - type: "address" - } - ], - name: "AddrChanged", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: false, - internalType: "uint256", - name: "coinType", - type: "uint256" - }, - { - indexed: false, - internalType: "bytes", - name: "newAddress", - type: "bytes" - } - ], - name: "AddressChanged", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: true, - internalType: "address", - name: "owner", - type: "address" - }, - { - indexed: true, - internalType: "address", - name: "target", - type: "address" - }, - { - indexed: false, - internalType: "bool", - name: "isAuthorised", - type: "bool" - } - ], - name: "AuthorisationChanged", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: false, - internalType: "bytes", - name: "hash", - type: "bytes" - } - ], - name: "ContenthashChanged", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: false, - internalType: "bytes", - name: "name", - type: "bytes" - }, - { - indexed: false, - internalType: "uint16", - name: "resource", - type: "uint16" - }, - { - indexed: false, - internalType: "bytes", - name: "record", - type: "bytes" - } - ], - name: "DNSRecordChanged", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: false, - internalType: "bytes", - name: "name", - type: "bytes" - }, - { - indexed: false, - internalType: "uint16", - name: "resource", - type: "uint16" - } - ], - name: "DNSRecordDeleted", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - } - ], - name: "DNSZoneCleared", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: true, - internalType: "bytes4", - name: "interfaceID", - type: "bytes4" - }, - { - indexed: false, - internalType: "address", - name: "implementer", - type: "address" - } - ], - name: "InterfaceChanged", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: false, - internalType: "string", - name: "name", - type: "string" - } - ], - name: "NameChanged", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: false, - internalType: "bytes32", - name: "x", - type: "bytes32" - }, - { - indexed: false, - internalType: "bytes32", - name: "y", - type: "bytes32" - } - ], - name: "PubkeyChanged", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: true, - internalType: "string", - name: "indexedKey", - type: "string" - }, - { - indexed: false, - internalType: "string", - name: "key", - type: "string" - } - ], - name: "TextChanged", - type: "event" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "uint256", - name: "contentTypes", - type: "uint256" - } - ], - name: "ABI", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - }, - { - internalType: "bytes", - name: "", - type: "bytes" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - } - ], - name: "addr", - outputs: [ - { - internalType: "address payable", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32" - }, - { - internalType: "address", - name: "", - type: "address" - }, - { - internalType: "address", - name: "", - type: "address" - } - ], - name: "authorisations", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - } - ], - name: "clearDNSZone", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - } - ], - name: "contenthash", - outputs: [ - { - internalType: "bytes", - name: "", - type: "bytes" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "name", - type: "bytes32" - }, - { - internalType: "uint16", - name: "resource", - type: "uint16" - } - ], - name: "dnsRecord", - outputs: [ - { - internalType: "bytes", - name: "", - type: "bytes" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "name", - type: "bytes32" - } - ], - name: "hasDNSRecords", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "bytes4", - name: "interfaceID", - type: "bytes4" - } - ], - name: "interfaceImplementer", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - } - ], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - } - ], - name: "pubkey", - outputs: [ - { - internalType: "bytes32", - name: "x", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "y", - type: "bytes32" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "uint256", - name: "contentType", - type: "uint256" - }, - { - internalType: "bytes", - name: "data", - type: "bytes" - } - ], - name: "setABI", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "uint256", - name: "coinType", - type: "uint256" - }, - { - internalType: "bytes", - name: "a", - type: "bytes" - } - ], - name: "setAddr", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "address", - name: "a", - type: "address" - } - ], - name: "setAddr", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "address", - name: "target", - type: "address" - }, - { - internalType: "bool", - name: "isAuthorised", - type: "bool" - } - ], - name: "setAuthorisation", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "bytes", - name: "hash", - type: "bytes" - } - ], - name: "setContenthash", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "bytes", - name: "data", - type: "bytes" - } - ], - name: "setDNSRecords", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "bytes4", - name: "interfaceID", - type: "bytes4" - }, - { - internalType: "address", - name: "implementer", - type: "address" - } - ], - name: "setInterface", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "string", - name: "name", - type: "string" - } - ], - name: "setName", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "x", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "y", - type: "bytes32" - } - ], - name: "setPubkey", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "string", - name: "key", - type: "string" - }, - { - internalType: "string", - name: "value", - type: "string" - } - ], - name: "setText", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes4", - name: "interfaceID", - type: "bytes4" - } - ], - name: "supportsInterface", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "pure", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "string", - name: "key", - type: "string" - } - ], - name: "text", - outputs: [ - { - internalType: "string", - name: "", - type: "string" - } - ], - payable: false, - stateMutability: "view", - type: "function" - } -]; - -var ENS_ABI = [ - { - inputs: [ - { - internalType: "contract ENS", - name: "_old", - type: "address" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "constructor" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address" - }, - { - indexed: true, - internalType: "address", - name: "operator", - type: "address" - }, - { - indexed: false, - internalType: "bool", - name: "approved", - type: "bool" - } - ], - name: "ApprovalForAll", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: true, - internalType: "bytes32", - name: "label", - type: "bytes32" - }, - { - indexed: false, - internalType: "address", - name: "owner", - type: "address" - } - ], - name: "NewOwner", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: false, - internalType: "address", - name: "resolver", - type: "address" - } - ], - name: "NewResolver", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: false, - internalType: "uint64", - name: "ttl", - type: "uint64" - } - ], - name: "NewTTL", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: false, - internalType: "address", - name: "owner", - type: "address" - } - ], - name: "Transfer", - type: "event" - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "owner", - type: "address" - }, - { - internalType: "address", - name: "operator", - type: "address" - } - ], - name: "isApprovedForAll", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "old", - outputs: [ - { - internalType: "contract ENS", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - } - ], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - } - ], - name: "recordExists", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - } - ], - name: "resolver", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "operator", - type: "address" - }, - { - internalType: "bool", - name: "approved", - type: "bool" - } - ], - name: "setApprovalForAll", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "address", - name: "owner", - type: "address" - } - ], - name: "setOwner", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "address", - name: "owner", - type: "address" - }, - { - internalType: "address", - name: "resolver", - type: "address" - }, - { - internalType: "uint64", - name: "ttl", - type: "uint64" - } - ], - name: "setRecord", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "address", - name: "resolver", - type: "address" - } - ], - name: "setResolver", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "label", - type: "bytes32" - }, - { - internalType: "address", - name: "owner", - type: "address" - } - ], - name: "setSubnodeOwner", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "label", - type: "bytes32" - }, - { - internalType: "address", - name: "owner", - type: "address" - }, - { - internalType: "address", - name: "resolver", - type: "address" - }, - { - internalType: "uint64", - name: "ttl", - type: "uint64" - } - ], - name: "setSubnodeRecord", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "uint64", - name: "ttl", - type: "uint64" - } - ], - name: "setTTL", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - } - ], - name: "ttl", - outputs: [ - { - internalType: "uint64", - name: "", - type: "uint64" - } - ], - payable: false, - stateMutability: "view", - type: "function" - } -]; - -var ERC20ABI = [ - { - constant: true, - inputs: [ - ], - name: "name", - outputs: [ - { - name: "", - type: "string" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - name: "_spender", - type: "address" - }, - { - name: "_value", - type: "uint256" - } - ], - name: "approve", - outputs: [ - { - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "totalSupply", - outputs: [ - { - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - name: "_from", - type: "address" - }, - { - name: "_to", - type: "address" - }, - { - name: "_value", - type: "uint256" - } - ], - name: "transferFrom", - outputs: [ - { - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "decimals", - outputs: [ - { - name: "", - type: "uint8" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - name: "_owner", - type: "address" - } - ], - name: "balanceOf", - outputs: [ - { - name: "balance", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "symbol", - outputs: [ - { - name: "", - type: "string" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - name: "_to", - type: "address" - }, - { - name: "_value", - type: "uint256" - } - ], - name: "transfer", - outputs: [ - { - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - { - name: "_owner", - type: "address" - }, - { - name: "_spender", - type: "address" - } - ], - name: "allowance", - outputs: [ - { - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - payable: true, - stateMutability: "payable", - type: "fallback" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: "owner", - type: "address" - }, - { - indexed: true, - name: "spender", - type: "address" - }, - { - indexed: false, - name: "value", - type: "uint256" - } - ], - name: "Approval", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: "from", - type: "address" - }, - { - indexed: true, - name: "to", - type: "address" - }, - { - indexed: false, - name: "value", - type: "uint256" - } - ], - name: "Transfer", - type: "event" - } -]; - -var ERC20_BYTES32_ABI = [ - { - constant: true, - inputs: [ - ], - name: "name", - outputs: [ - { - name: "", - type: "bytes32" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "symbol", - outputs: [ - { - name: "", - type: "bytes32" - } - ], - payable: false, - stateMutability: "view", - type: "function" - } -]; - -var ERC721_ABI = [ - { - inputs: [ - { - internalType: "uint256", - name: "tokenId", - type: "uint256" - } - ], - name: "ownerOf", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "tokenId", - type: "uint256" - } - ], - name: "tokenURI", - outputs: [ - { - internalType: "string", - name: "", - type: "string" - } - ], - stateMutability: "view", - type: "function" - } -]; - -var ERC1155_ABI = [ - { - constant: true, - inputs: [ - { - internalType: "address", - name: "_owner", - type: "address" - }, - { - internalType: "uint256", - name: "_id", - type: "uint256" - } - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "uint256", - name: "_id", - type: "uint256" - } - ], - name: "uri", - outputs: [ - { - internalType: "string", - name: "", - type: "string" - } - ], - payable: false, - stateMutability: "view", - type: "function" - } -]; - -var WETH_ABI = [ - { - constant: true, - inputs: [ - ], - name: "name", - outputs: [ - { - name: "", - type: "string" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - name: "guy", - type: "address" - }, - { - name: "wad", - type: "uint256" - } - ], - name: "approve", - outputs: [ - { - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "totalSupply", - outputs: [ - { - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - name: "src", - type: "address" - }, - { - name: "dst", - type: "address" - }, - { - name: "wad", - type: "uint256" - } - ], - name: "transferFrom", - outputs: [ - { - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - name: "wad", - type: "uint256" - } - ], - name: "withdraw", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "decimals", - outputs: [ - { - name: "", - type: "uint8" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - name: "", - type: "address" - } - ], - name: "balanceOf", - outputs: [ - { - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "symbol", - outputs: [ - { - name: "", - type: "string" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - name: "dst", - type: "address" - }, - { - name: "wad", - type: "uint256" - } - ], - name: "transfer", - outputs: [ - { - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - ], - name: "deposit", - outputs: [ - ], - payable: true, - stateMutability: "payable", - type: "function" - }, - { - constant: true, - inputs: [ - { - name: "", - type: "address" - }, - { - name: "", - type: "address" - } - ], - name: "allowance", - outputs: [ - { - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - payable: true, - stateMutability: "payable", - type: "fallback" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: "src", - type: "address" - }, - { - indexed: true, - name: "guy", - type: "address" - }, - { - indexed: false, - name: "wad", - type: "uint256" - } - ], - name: "Approval", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: "src", - type: "address" - }, - { - indexed: true, - name: "dst", - type: "address" - }, - { - indexed: false, - name: "wad", - type: "uint256" - } - ], - name: "Transfer", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: "dst", - type: "address" - }, - { - indexed: false, - name: "wad", - type: "uint256" - } - ], - name: "Deposit", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: "src", - type: "address" - }, - { - indexed: false, - name: "wad", - type: "uint256" - } - ], - name: "Withdrawal", - type: "event" - } -]; - -var _a$h; -/** - * List of all the networks supported by the Uniswap Interface - */ -var SupportedChainId; -(function (SupportedChainId) { - SupportedChainId[SupportedChainId["MAINNET"] = 1] = "MAINNET"; - SupportedChainId[SupportedChainId["ROPSTEN"] = 3] = "ROPSTEN"; - SupportedChainId[SupportedChainId["RINKEBY"] = 4] = "RINKEBY"; - SupportedChainId[SupportedChainId["GOERLI"] = 5] = "GOERLI"; - SupportedChainId[SupportedChainId["KOVAN"] = 42] = "KOVAN"; - SupportedChainId[SupportedChainId["ARBITRUM_ONE"] = 42161] = "ARBITRUM_ONE"; - SupportedChainId[SupportedChainId["ARBITRUM_RINKEBY"] = 421611] = "ARBITRUM_RINKEBY"; - SupportedChainId[SupportedChainId["OPTIMISM"] = 10] = "OPTIMISM"; - SupportedChainId[SupportedChainId["OPTIMISTIC_KOVAN"] = 69] = "OPTIMISTIC_KOVAN"; - SupportedChainId[SupportedChainId["POLYGON"] = 137] = "POLYGON"; - SupportedChainId[SupportedChainId["POLYGON_MUMBAI"] = 80001] = "POLYGON_MUMBAI"; -})(SupportedChainId || (SupportedChainId = {})); -var CHAIN_IDS_TO_NAMES = (_a$h = {}, - _a$h[SupportedChainId.MAINNET] = 'mainnet', - _a$h[SupportedChainId.ROPSTEN] = 'ropsten', - _a$h[SupportedChainId.RINKEBY] = 'rinkeby', - _a$h[SupportedChainId.GOERLI] = 'goerli', - _a$h[SupportedChainId.KOVAN] = 'kovan', - _a$h[SupportedChainId.POLYGON] = 'polygon', - _a$h[SupportedChainId.POLYGON_MUMBAI] = 'polygon_mumbai', - _a$h[SupportedChainId.ARBITRUM_ONE] = 'arbitrum', - _a$h[SupportedChainId.ARBITRUM_RINKEBY] = 'arbitrum_rinkeby', - _a$h[SupportedChainId.OPTIMISM] = 'optimism', - _a$h[SupportedChainId.OPTIMISTIC_KOVAN] = 'optimistic_kovan', - _a$h); -/** - * Array of all the supported chain IDs - */ -var ALL_SUPPORTED_CHAIN_IDS = Object.values(SupportedChainId).filter(function (id) { return typeof id === 'number'; }); -var SUPPORTED_GAS_ESTIMATE_CHAIN_IDS = [SupportedChainId.MAINNET, SupportedChainId.POLYGON]; -/** - * All the chain IDs that are running the Ethereum protocol. - */ -[ - SupportedChainId.MAINNET, - SupportedChainId.ROPSTEN, - SupportedChainId.RINKEBY, - SupportedChainId.GOERLI, - SupportedChainId.KOVAN, - SupportedChainId.POLYGON, - SupportedChainId.POLYGON_MUMBAI, -]; -/** - * Controls some L2 specific behavior, e.g. slippage tolerance, special UI behavior. - * The expectation is that all of these networks have immediate transaction confirmation. - */ -var L2_CHAIN_IDS = [ - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, -]; - -var DEFAULT_NETWORKS = [ - SupportedChainId.MAINNET, - SupportedChainId.ROPSTEN, - SupportedChainId.RINKEBY, - SupportedChainId.GOERLI, - SupportedChainId.KOVAN, -]; -function constructSameAddressMap(address, additionalNetworks) { - if (additionalNetworks === void 0) { additionalNetworks = []; } - return DEFAULT_NETWORKS.concat(additionalNetworks).reduce(function (memo, chainId) { - memo[chainId] = address; - return memo; - }, {}); -} - -var _a$g, _b$6, _c$4, _d$3, _e$2, _f$1, _g$1, _h$1; -var UNI_ADDRESS = constructSameAddressMap('0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984'); -var MULTICALL_ADDRESS = __assign(__assign({}, constructSameAddressMap('0x1F98415757620B543A52E61c46B32eB19261F984', [ - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.OPTIMISM, - SupportedChainId.POLYGON_MUMBAI, - SupportedChainId.POLYGON, -])), (_a$g = {}, _a$g[SupportedChainId.ARBITRUM_ONE] = '0xadF885960B47eA2CD9B55E6DAc6B42b7Cb2806dB', _a$g[SupportedChainId.ARBITRUM_RINKEBY] = '0xa501c031958F579dB7676fF1CE78AD305794d579', _a$g)); -var V2_FACTORY_ADDRESSES = constructSameAddressMap(FACTORY_ADDRESS); -var V2_ROUTER_ADDRESS = constructSameAddressMap('0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D'); -var V3_ROUTER_ADDRESS = constructSameAddressMap('0xE592427A0AEce92De3Edee1F18E0157C05861564', [ - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON, - SupportedChainId.POLYGON_MUMBAI, -]); -var SWAP_ROUTER_ADDRESSES = constructSameAddressMap('0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45', [ - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON, - SupportedChainId.POLYGON_MUMBAI, -]); -/** - * The oldest V0 governance address - */ -constructSameAddressMap('0x5e4be8Bc9637f0EAA1A755019e06A68ce081D58F'); -/** - * The older V1 governance address - */ -(_b$6 = {}, - _b$6[SupportedChainId.MAINNET] = '0xC4e172459f1E7939D522503B81AFAaC1014CE6F6', - _b$6); -/** - * The latest governor bravo that is currently admin of timelock - */ -(_c$4 = {}, - _c$4[SupportedChainId.MAINNET] = '0x408ED6354d4973f66138C91495F2f2FCbd8724C3', - _c$4); -constructSameAddressMap('0x1a9C8182C09F50C8318d769245beA52c32BE35BC'); -var MERKLE_DISTRIBUTOR_ADDRESS = (_d$3 = {}, - _d$3[SupportedChainId.MAINNET] = '0x090D4613473dEE047c3f2706764f49E0821D256e', - _d$3); -var ARGENT_WALLET_DETECTOR_ADDRESS = (_e$2 = {}, - _e$2[SupportedChainId.MAINNET] = '0xeca4B0bDBf7c55E9b7925919d03CbF8Dc82537E8', - _e$2); -var V3_CORE_FACTORY_ADDRESSES = constructSameAddressMap(FACTORY_ADDRESS$1, [ - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON_MUMBAI, - SupportedChainId.POLYGON, -]); -var QUOTER_ADDRESSES = constructSameAddressMap('0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6', [ - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON_MUMBAI, - SupportedChainId.POLYGON, -]); -constructSameAddressMap('0xC36442b4a4522E871399CD717aBDD847Ab11FE88', [ - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON_MUMBAI, - SupportedChainId.POLYGON, -]); -var ENS_REGISTRAR_ADDRESSES = (_f$1 = {}, - _f$1[SupportedChainId.MAINNET] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', - _f$1[SupportedChainId.ROPSTEN] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', - _f$1[SupportedChainId.GOERLI] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', - _f$1[SupportedChainId.RINKEBY] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', - _f$1); -var SOCKS_CONTROLLER_ADDRESSES = (_g$1 = {}, - _g$1[SupportedChainId.MAINNET] = '0x65770b5283117639760beA3F867b69b3697a91dd', - _g$1); -constructSameAddressMap('0xA5644E29708357803b5A882D272c41cC0dF92B34', [ - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON_MUMBAI, - SupportedChainId.POLYGON, -]); -(_h$1 = {}, - _h$1[SupportedChainId.ARBITRUM_ONE] = '0xbfd8137f7d1516D3ea5cA83523914859ec47F573', - _h$1[SupportedChainId.ARBITRUM_RINKEBY] = '0xbfd8137f7d1516D3ea5cA83523914859ec47F573', - _h$1); - -var _a$f, _b$5; -var AMPL = new Token(SupportedChainId.MAINNET, '0xD46bA6D942050d489DBd938a2C909A5d5039A161', 9, 'AMPL', 'Ampleforth'); -var DAI = new Token(SupportedChainId.MAINNET, '0x6B175474E89094C44Da98b954EedeAC495271d0F', 18, 'DAI', 'Dai Stablecoin'); -var DAI_ARBITRUM_ONE = new Token(SupportedChainId.ARBITRUM_ONE, '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', 18, 'DAI', 'Dai stable coin'); -var DAI_OPTIMISM = new Token(SupportedChainId.OPTIMISM, '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', 18, 'DAI', 'Dai stable coin'); -var USDC = new Token(SupportedChainId.MAINNET, '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', 6, 'USDC', 'USD//C'); -var USDC_ARBITRUM = new Token(SupportedChainId.ARBITRUM_ONE, '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8', 6, 'USDC', 'USD//C'); -var USDC_POLYGON = new Token(SupportedChainId.POLYGON, '0x2791bca1f2de4661ed88a30c99a7a9449aa84174', 6, 'USDC', 'USD//C'); -var DAI_POLYGON = new Token(SupportedChainId.POLYGON, '0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063', 18, 'DAI', 'Dai Stablecoin'); -var USDT_POLYGON = new Token(SupportedChainId.POLYGON, '0xc2132d05d31c914a87c6611c10748aeb04b58e8f', 6, 'USDT', 'Tether USD'); -var WBTC_POLYGON = new Token(SupportedChainId.POLYGON, '0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6', 8, 'WBTC', 'Wrapped BTC'); -var USDC_OPTIMISM = new Token(SupportedChainId.OPTIMISM, '0x7F5c764cBc14f9669B88837ca1490cCa17c31607', 6, 'USDC', 'USD//C'); -var USDT = new Token(SupportedChainId.MAINNET, '0xdAC17F958D2ee523a2206206994597C13D831ec7', 6, 'USDT', 'Tether USD'); -var USDT_ARBITRUM_ONE = new Token(SupportedChainId.ARBITRUM_ONE, '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9', 6, 'USDT', 'Tether USD'); -var USDT_OPTIMISM = new Token(SupportedChainId.OPTIMISM, '0x94b008aA00579c1307B0EF2c499aD98a8ce58e58', 6, 'USDT', 'Tether USD'); -var WBTC = new Token(SupportedChainId.MAINNET, '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', 8, 'WBTC', 'Wrapped BTC'); -var WBTC_ARBITRUM_ONE = new Token(SupportedChainId.ARBITRUM_ONE, '0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f', 8, 'WBTC', 'Wrapped BTC'); -var WBTC_OPTIMISM = new Token(SupportedChainId.OPTIMISM, '0x68f180fcCe6836688e9084f035309E29Bf0A2095', 8, 'WBTC', 'Wrapped BTC'); -var FEI = new Token(SupportedChainId.MAINNET, '0x956F47F50A910163D8BF957Cf5846D573E7f87CA', 18, 'FEI', 'Fei USD'); -var TRIBE = new Token(SupportedChainId.MAINNET, '0xc7283b66Eb1EB5FB86327f08e1B5816b0720212B', 18, 'TRIBE', 'Tribe'); -var FRAX = new Token(SupportedChainId.MAINNET, '0x853d955aCEf822Db058eb8505911ED77F175b99e', 18, 'FRAX', 'Frax'); -var FXS = new Token(SupportedChainId.MAINNET, '0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0', 18, 'FXS', 'Frax Share'); -var renBTC = new Token(SupportedChainId.MAINNET, '0xEB4C2781e4ebA804CE9a9803C67d0893436bB27D', 8, 'renBTC', 'renBTC'); -var ETH2X_FLI = new Token(SupportedChainId.MAINNET, '0xAa6E8127831c9DE45ae56bB1b0d4D4Da6e5665BD', 18, 'ETH2x-FLI', 'ETH 2x Flexible Leverage Index'); -var sETH2 = new Token(SupportedChainId.MAINNET, '0xFe2e637202056d30016725477c5da089Ab0A043A', 18, 'sETH2', 'StakeWise Staked ETH2'); -var rETH2 = new Token(SupportedChainId.MAINNET, '0x20BC832ca081b91433ff6c17f85701B6e92486c5', 18, 'rETH2', 'StakeWise Reward ETH2'); -var SWISE = new Token(SupportedChainId.MAINNET, '0x48C3399719B582dD63eB5AADf12A40B4C3f52FA2', 18, 'SWISE', 'StakeWise'); -var WETH_POLYGON_MUMBAI = new Token(SupportedChainId.POLYGON_MUMBAI, '0xa6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa', 18, 'WETH', 'Wrapped Ether'); -var WETH_POLYGON = new Token(SupportedChainId.POLYGON, '0x7ceb23fd6bc0add59e62ac25578270cff1b9f619', 18, 'WETH', 'Wrapped Ether'); -var UNI = (_a$f = {}, - _a$f[SupportedChainId.MAINNET] = new Token(SupportedChainId.MAINNET, UNI_ADDRESS[1], 18, 'UNI', 'Uniswap'), - _a$f[SupportedChainId.RINKEBY] = new Token(SupportedChainId.RINKEBY, UNI_ADDRESS[4], 18, 'UNI', 'Uniswap'), - _a$f[SupportedChainId.ROPSTEN] = new Token(SupportedChainId.ROPSTEN, UNI_ADDRESS[3], 18, 'UNI', 'Uniswap'), - _a$f[SupportedChainId.GOERLI] = new Token(SupportedChainId.GOERLI, UNI_ADDRESS[5], 18, 'UNI', 'Uniswap'), - _a$f[SupportedChainId.KOVAN] = new Token(SupportedChainId.KOVAN, UNI_ADDRESS[42], 18, 'UNI', 'Uniswap'), - _a$f); -var WRAPPED_NATIVE_CURRENCY = __assign(__assign({}, WETH9), (_b$5 = {}, _b$5[SupportedChainId.OPTIMISM] = new Token(SupportedChainId.OPTIMISM, '0x4200000000000000000000000000000000000006', 18, 'WETH', 'Wrapped Ether'), _b$5[SupportedChainId.OPTIMISTIC_KOVAN] = new Token(SupportedChainId.OPTIMISTIC_KOVAN, '0x4200000000000000000000000000000000000006', 18, 'WETH', 'Wrapped Ether'), _b$5[SupportedChainId.ARBITRUM_ONE] = new Token(SupportedChainId.ARBITRUM_ONE, '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1', 18, 'WETH', 'Wrapped Ether'), _b$5[SupportedChainId.ARBITRUM_RINKEBY] = new Token(SupportedChainId.ARBITRUM_RINKEBY, '0xB47e6A5f8b33b3F17603C83a0535A9dcD7E32681', 18, 'WETH', 'Wrapped Ether'), _b$5[SupportedChainId.POLYGON] = new Token(SupportedChainId.POLYGON, '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270', 18, 'WMATIC', 'Wrapped MATIC'), _b$5[SupportedChainId.POLYGON_MUMBAI] = new Token(SupportedChainId.POLYGON_MUMBAI, '0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889', 18, 'WMATIC', 'Wrapped MATIC'), _b$5)); -function isMatic(chainId) { - return chainId === SupportedChainId.POLYGON_MUMBAI || chainId === SupportedChainId.POLYGON; -} -var MaticNativeCurrency = /** @class */ (function (_super) { - __extends(MaticNativeCurrency, _super); - function MaticNativeCurrency(chainId) { - var _this = this; - if (!isMatic(chainId)) - throw new Error('Not matic'); - _this = _super.call(this, chainId, 18, 'MATIC', 'Polygon Matic') || this; - return _this; - } - MaticNativeCurrency.prototype.equals = function (other) { - return other.isNative && other.chainId === this.chainId; - }; - Object.defineProperty(MaticNativeCurrency.prototype, "wrapped", { - get: function () { - if (!isMatic(this.chainId)) - throw new Error('Not matic'); - return WRAPPED_NATIVE_CURRENCY[this.chainId]; - }, - enumerable: false, - configurable: true - }); - return MaticNativeCurrency; -}(NativeCurrency)); -var ExtendedEther = /** @class */ (function (_super) { - __extends(ExtendedEther, _super); - function ExtendedEther() { - return _super !== null && _super.apply(this, arguments) || this; - } - Object.defineProperty(ExtendedEther.prototype, "wrapped", { - get: function () { - if (this.chainId in WRAPPED_NATIVE_CURRENCY) - return WRAPPED_NATIVE_CURRENCY[this.chainId]; - throw new Error('Unsupported chain ID'); - }, - enumerable: false, - configurable: true - }); - ExtendedEther.onChain = function (chainId) { - var _a; - return (_a = this._cachedExtendedEther[chainId]) !== null && _a !== void 0 ? _a : (this._cachedExtendedEther[chainId] = new ExtendedEther(chainId)); - }; - ExtendedEther._cachedExtendedEther = {}; - return ExtendedEther; -}(Ether)); -var cachedNativeCurrency = {}; -function nativeOnChain(chainId) { - var _a; - return ((_a = cachedNativeCurrency[chainId]) !== null && _a !== void 0 ? _a : (cachedNativeCurrency[chainId] = isMatic(chainId) - ? new MaticNativeCurrency(chainId) - : ExtendedEther.onChain(chainId))); -} - -// returns null on errors -function useContract(addressOrAddressMap, ABI, withSignerIfPossible) { - if (withSignerIfPossible === void 0) { withSignerIfPossible = true; } - var _a = useActiveWeb3React(), library = _a.library, account = _a.account, chainId = _a.chainId; - return useMemo(function () { - if (!addressOrAddressMap || !ABI || !library || !chainId) - return null; - var address; - if (typeof addressOrAddressMap === 'string') - address = addressOrAddressMap; - else - address = addressOrAddressMap[chainId]; - if (!address) - return null; - try { - return getContract(address, ABI, library, withSignerIfPossible && account ? account : undefined); - } - catch (error) { - console.error('Failed to get contract', error); - return null; - } - }, [addressOrAddressMap, ABI, library, chainId, withSignerIfPossible, account]); -} -function useTokenContract(tokenAddress, withSignerIfPossible) { - return useContract(tokenAddress, ERC20ABI, withSignerIfPossible); -} -function useWETHContract(withSignerIfPossible) { - var _a; - var chainId = useActiveWeb3React().chainId; - return useContract(chainId ? (_a = WRAPPED_NATIVE_CURRENCY[chainId]) === null || _a === void 0 ? void 0 : _a.address : undefined, WETH_ABI, withSignerIfPossible); -} -function useERC721Contract(nftAddress) { - return useContract(nftAddress, ERC721_ABI, false); -} -function useERC1155Contract(nftAddress) { - return useContract(nftAddress, ERC1155_ABI, false); -} -function useArgentWalletDetectorContract() { - return useContract(ARGENT_WALLET_DETECTOR_ADDRESS, ARGENT_WALLET_DETECTOR_ABI, false); -} -function useENSRegistrarContract(withSignerIfPossible) { - return useContract(ENS_REGISTRAR_ADDRESSES, ENS_ABI, withSignerIfPossible); -} -function useENSResolverContract(address, withSignerIfPossible) { - return useContract(address, ENS_PUBLIC_RESOLVER_ABI, withSignerIfPossible); -} -function useBytes32TokenContract(tokenAddress, withSignerIfPossible) { - return useContract(tokenAddress, ERC20_BYTES32_ABI, withSignerIfPossible); -} -function useEIP2612Contract(tokenAddress) { - return useContract(tokenAddress, EIP_2612, false); -} -function useV2RouterContract() { - return useContract(V2_ROUTER_ADDRESS, abi$3, true); -} -function useInterfaceMulticall() { - return useContract(MULTICALL_ADDRESS, abi$1, false); -} -function useMerkleDistributorContract() { - return useContract(MERKLE_DISTRIBUTOR_ADDRESS, abi$5, true); -} -function useV3Quoter() { - return useContract(QUOTER_ADDRESSES, abi$2); -} - -var _a$e; -var multicall = createMulticall(); -var reducer = combineReducers((_a$e = {}, _a$e[multicall.reducerPath] = multicall.reducer, _a$e)); -createStore(reducer); -function MulticallUpdater() { - var latestBlockNumber = useBlockNumber(); - var chainId = useActiveWeb3React().chainId; - var contract = useInterfaceMulticall(); - return jsx(multicall.Updater, { chainId: chainId, latestBlockNumber: latestBlockNumber, contract: contract }, void 0); -} - -function useMultipleContractSingleData() { - var _a; - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var _b = useCallContext(), chainId = _b.chainId, latestBlock = _b.latestBlock; - return (_a = multicall.hooks).useMultipleContractSingleData.apply(_a, __spreadArray([chainId, latestBlock], __read(args), false)); -} -function useSingleCallResult() { - var _a; - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var _b = useCallContext(), chainId = _b.chainId, latestBlock = _b.latestBlock; - return (_a = multicall.hooks).useSingleCallResult.apply(_a, __spreadArray([chainId, latestBlock], __read(args), false)); -} -function useSingleContractMultipleData() { - var _a; - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var _b = useCallContext(), chainId = _b.chainId, latestBlock = _b.latestBlock; - return (_a = multicall.hooks).useSingleContractMultipleData.apply(_a, __spreadArray([chainId, latestBlock], __read(args), false)); -} -function useSingleContractWithCallData() { - var _a; - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var _b = useCallContext(), chainId = _b.chainId, latestBlock = _b.latestBlock; - return (_a = multicall.hooks).useSingleContractWithCallData.apply(_a, __spreadArray([chainId, latestBlock], __read(args), false)); -} -function useCallContext() { - var chainId = useActiveWeb3React().chainId; - var latestBlock = useBlockNumber(); - return { chainId: chainId, latestBlock: latestBlock }; -} - -function safeNamehash(name) { - if (name === undefined) - return undefined; - try { - return namehash(name); - } - catch (error) { - console.debug(error); - return undefined; - } -} - -/** - * Returns true if the string value is zero in hex - * @param hexNumberString - */ -function isZero(hexNumberString) { - return /^0x0*$/.test(hexNumberString); -} - -/** - * Does a lookup for an ENS name to find its address. - */ -function useENSAddress(ensName) { - var _a; - var debouncedName = useDebounce(ensName, 200); - var ensNodeArgument = useMemo(function () { return [debouncedName === null ? undefined : safeNamehash(debouncedName)]; }, [debouncedName]); - var registrarContract = useENSRegistrarContract(false); - var resolverAddress = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument); - var resolverAddressResult = (_a = resolverAddress.result) === null || _a === void 0 ? void 0 : _a[0]; - var resolverContract = useENSResolverContract(resolverAddressResult && !isZero(resolverAddressResult) ? resolverAddressResult : undefined, false); - var addr = useSingleCallResult(resolverContract, 'addr', ensNodeArgument); - var changed = debouncedName !== ensName; - return useMemo(function () { - var _a, _b; - return ({ - address: changed ? null : (_b = (_a = addr.result) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : null, - loading: changed || resolverAddress.loading || addr.loading, - }); - }, [addr.loading, addr.result, changed, resolverAddress.loading]); -} - -/** - * Does a reverse lookup for an address to find its ENS name. - * Note this is not the same as looking up an ENS name to find an address. - */ -function useENSName(address) { - var _a, _b; - var debouncedAddress = useDebounce(address, 200); - var ensNodeArgument = useMemo(function () { - if (!debouncedAddress || !isAddress(debouncedAddress)) - return [undefined]; - return [namehash(debouncedAddress.toLowerCase().substr(2) + ".addr.reverse")]; - }, [debouncedAddress]); - var registrarContract = useENSRegistrarContract(false); - var resolverAddress = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument); - var resolverAddressResult = (_a = resolverAddress.result) === null || _a === void 0 ? void 0 : _a[0]; - var resolverContract = useENSResolverContract(resolverAddressResult && !isZero(resolverAddressResult) ? resolverAddressResult : undefined, false); - var nameCallRes = useSingleCallResult(resolverContract, 'name', ensNodeArgument); - var name = (_b = nameCallRes.result) === null || _b === void 0 ? void 0 : _b[0]; - /* ENS does not enforce that an address owns a .eth domain before setting it as a reverse proxy - and recommends that you perform a match on the forward resolution - see: https://docs.ens.domains/dapp-developer-guide/resolving-names#reverse-resolution - */ - var fwdAddr = useENSAddress(name); - var checkedName = address === (fwdAddr === null || fwdAddr === void 0 ? void 0 : fwdAddr.address) ? name : null; - var changed = debouncedAddress !== address; - return useMemo(function () { return ({ - ENSName: changed ? null : checkedName, - loading: changed || resolverAddress.loading || nameCallRes.loading, - }); }, [changed, nameCallRes.loading, checkedName, resolverAddress.loading]); -} - -/** - * Given a name or address, does a lookup to resolve to an address and name - * @param nameOrAddress ENS name or address - */ -function useENS(nameOrAddress) { - var validated = isAddress(nameOrAddress); - var reverseLookup = useENSName(validated ? validated : undefined); - var lookup = useENSAddress(nameOrAddress); - return useMemo(function () { return ({ - loading: reverseLookup.loading || lookup.loading, - address: validated ? validated : lookup.address, - name: reverseLookup.ENSName ? reverseLookup.ENSName : !validated && lookup.address ? nameOrAddress || null : null, - }); }, [lookup.address, lookup.loading, nameOrAddress, reverseLookup.ENSName, reverseLookup.loading, validated]); -} - -/** - * Returns the gas value plus a margin for unexpected or variable gas costs - * @param value the gas value to pad - */ -function calculateGasMargin(value) { - return value.mul(120).div(100); -} - -/** - * Be careful adding to this enum, always assign a unique value (typescript will not prevent duplicate values). - * These values is persisted in state and if you change the value it will cause errors - */ -var TransactionType; -(function (TransactionType) { - TransactionType[TransactionType["APPROVAL"] = 0] = "APPROVAL"; - TransactionType[TransactionType["SWAP"] = 1] = "SWAP"; - TransactionType[TransactionType["DEPOSIT_LIQUIDITY_STAKING"] = 2] = "DEPOSIT_LIQUIDITY_STAKING"; - TransactionType[TransactionType["WITHDRAW_LIQUIDITY_STAKING"] = 3] = "WITHDRAW_LIQUIDITY_STAKING"; - TransactionType[TransactionType["CLAIM"] = 4] = "CLAIM"; - TransactionType[TransactionType["VOTE"] = 5] = "VOTE"; - TransactionType[TransactionType["DELEGATE"] = 6] = "DELEGATE"; - TransactionType[TransactionType["WRAP"] = 7] = "WRAP"; - TransactionType[TransactionType["CREATE_V3_POOL"] = 8] = "CREATE_V3_POOL"; - TransactionType[TransactionType["ADD_LIQUIDITY_V3_POOL"] = 9] = "ADD_LIQUIDITY_V3_POOL"; - TransactionType[TransactionType["ADD_LIQUIDITY_V2_POOL"] = 10] = "ADD_LIQUIDITY_V2_POOL"; - TransactionType[TransactionType["MIGRATE_LIQUIDITY_V3"] = 11] = "MIGRATE_LIQUIDITY_V3"; - TransactionType[TransactionType["COLLECT_FEES"] = 12] = "COLLECT_FEES"; - TransactionType[TransactionType["REMOVE_LIQUIDITY_V3"] = 13] = "REMOVE_LIQUIDITY_V3"; - TransactionType[TransactionType["SUBMIT_PROPOSAL"] = 14] = "SUBMIT_PROPOSAL"; -})(TransactionType || (TransactionType = {})); -var addTransaction = createAction('transactions/addTransaction'); -var clearAllTransactions = createAction('transactions/clearAllTransactions'); -var finalizeTransaction = createAction('transactions/finalizeTransaction'); -var checkedTransaction = createAction('transactions/checkedTransaction'); - -var SUPPORTED_TRANSACTION_TYPES = [ - TransactionType.ADD_LIQUIDITY_V2_POOL, - TransactionType.ADD_LIQUIDITY_V3_POOL, - TransactionType.CREATE_V3_POOL, - TransactionType.REMOVE_LIQUIDITY_V3, - TransactionType.SWAP, -]; -var FIREBASE_API_KEY = process.env.REACT_APP_FIREBASE_KEY; -var firebaseEnabled = typeof FIREBASE_API_KEY !== 'undefined'; -if (firebaseEnabled) - initializeFirebase(); -function useMonitoringEventCallback() { - var chainId = useActiveWeb3React().chainId; - return useCallback(function log(type, _a) { - var transactionResponse = _a.transactionResponse, walletAddress = _a.walletAddress; - return __awaiter(this, void 0, void 0, function () { - var db; - return __generator(this, function (_b) { - if (!firebaseEnabled) - return [2 /*return*/]; - db = getDatabase(); - if (!walletAddress) { - console.debug('Wallet address required to log monitoring events.'); - return [2 /*return*/]; - } - try { - push(ref(db, 'trm'), { - chainId: chainId, - origin: window.location.origin, - timestamp: Date.now(), - tx: transactionResponse, - type: type, - walletAddress: walletAddress, - }); - } - catch (e) { - console.debug('Error adding document: ', e); - } - return [2 /*return*/]; - }); - }); - }, [chainId]); -} -function useTransactionMonitoringEventCallback() { - var account = useActiveWeb3React().account; - var log = useMonitoringEventCallback(); - return useCallback(function (info, transactionResponse) { - if (SUPPORTED_TRANSACTION_TYPES.includes(info.type)) { - log(TransactionType[info.type], { - transactionResponse: (function (_a) { - var hash = _a.hash, v = _a.v, r = _a.r, s = _a.s; - return ({ hash: hash, v: v, r: r, s: s }); - })(transactionResponse), - walletAddress: account !== null && account !== void 0 ? account : undefined, - }); - } - }, [account, log]); -} -function useWalletConnectMonitoringEventCallback() { - var log = useMonitoringEventCallback(); - return useCallback(function (walletAddress) { - log('WALLET_CONNECTED', { transactionResponse: { hash: '', r: '', s: '', v: -1 }, walletAddress: walletAddress }); - }, [log]); -} -function initializeFirebase() { - initializeApp({ - apiKey: process.env.REACT_APP_FIREBASE_KEY, - authDomain: 'interface-monitoring.firebaseapp.com', - databaseURL: 'https://interface-monitoring-default-rtdb.firebaseio.com', - projectId: 'interface-monitoring', - storageBucket: 'interface-monitoring.appspot.com', - messagingSenderId: '968187720053', - appId: '1:968187720053:web:acedf72dce629d470be33c', - }); -} - -// helper that can take a ethers library transaction response and add it to the list of transactions -function useTransactionAdder() { - var _a = useActiveWeb3React(), chainId = _a.chainId, account = _a.account; - var dispatch = useAppDispatch(); - var logMonitoringEvent = useTransactionMonitoringEventCallback(); - return useCallback(function (response, info) { - if (!account) - return; - if (!chainId) - return; - var hash = response.hash; - if (!hash) { - throw Error('No transaction hash found.'); - } - dispatch(addTransaction({ hash: hash, from: account, info: info, chainId: chainId })); - logMonitoringEvent(info, response); - }, [account, chainId, dispatch, logMonitoringEvent]); -} -// returns all the transactions for the current chain -function useAllTransactions() { - var _a; - var chainId = useActiveWeb3React().chainId; - var state = useAppSelector(function (state) { return state.transactions; }); - return chainId ? (_a = state[chainId]) !== null && _a !== void 0 ? _a : {} : {}; -} -function useTransaction(transactionHash) { - var allTransactions = useAllTransactions(); - if (!transactionHash) { - return undefined; - } - return allTransactions[transactionHash]; -} -function useIsTransactionPending(transactionHash) { - var transactions = useAllTransactions(); - if (!transactionHash || !transactions[transactionHash]) - return false; - return !transactions[transactionHash].receipt; -} -function useIsTransactionConfirmed(transactionHash) { - var transactions = useAllTransactions(); - if (!transactionHash || !transactions[transactionHash]) - return false; - return Boolean(transactions[transactionHash].receipt); -} -/** - * Returns whether a transaction happened in the last day (86400 seconds * 1000 milliseconds / second) - * @param tx to check for recency - */ -function isTransactionRecent(tx) { - return new Date().getTime() - tx.addedTime < 86400000; -} -// returns whether a token has a pending approval transaction -function useHasPendingApproval(token, spender) { - var allTransactions = useAllTransactions(); - return useMemo(function () { - return typeof (token === null || token === void 0 ? void 0 : token.address) === 'string' && - typeof spender === 'string' && - Object.keys(allTransactions).some(function (hash) { - var tx = allTransactions[hash]; - if (!tx) - return false; - if (tx.receipt) { - return false; - } - else { - if (tx.info.type !== TransactionType.APPROVAL) - return false; - return tx.info.spender === spender && tx.info.tokenAddress === token.address && isTransactionRecent(tx); - } - }); - }, [allTransactions, spender, token === null || token === void 0 ? void 0 : token.address]); -} -// watch for submissions to claim -// return null if not done loading, return undefined if not found -function useUserHasSubmittedClaim(account) { - var allTransactions = useAllTransactions(); - // get the txn if it has been submitted - var claimTxn = useMemo(function () { - var txnIndex = Object.keys(allTransactions).find(function (hash) { - var tx = allTransactions[hash]; - return tx.info.type === TransactionType.CLAIM && tx.info.recipient === account; - }); - return txnIndex && allTransactions[txnIndex] ? allTransactions[txnIndex] : undefined; - }, [account, allTransactions]); - return { claimSubmitted: Boolean(claimTxn), claimTxn: claimTxn }; -} - -var FETCH_CLAIM_MAPPING_PROMISE = null; -function fetchClaimMapping() { - return (FETCH_CLAIM_MAPPING_PROMISE !== null && FETCH_CLAIM_MAPPING_PROMISE !== void 0 ? FETCH_CLAIM_MAPPING_PROMISE : (FETCH_CLAIM_MAPPING_PROMISE = fetch("https://raw.githubusercontent.com/Uniswap/mrkl-drop-data-chunks/final/chunks/mapping.json") - .then(function (res) { return res.json(); }) - .catch(function (error) { - console.error('Failed to get claims mapping', error); - FETCH_CLAIM_MAPPING_PROMISE = null; - }))); -} -var FETCH_CLAIM_FILE_PROMISES = {}; -function fetchClaimFile(key) { - var _a; - return ((_a = FETCH_CLAIM_FILE_PROMISES[key]) !== null && _a !== void 0 ? _a : (FETCH_CLAIM_FILE_PROMISES[key] = fetch("https://raw.githubusercontent.com/Uniswap/mrkl-drop-data-chunks/final/chunks/" + key + ".json") - .then(function (res) { return res.json(); }) - .catch(function (error) { - console.error("Failed to get claim file mapping for starting address " + key, error); - delete FETCH_CLAIM_FILE_PROMISES[key]; - }))); -} -var FETCH_CLAIM_PROMISES = {}; -// returns the claim for the given address, or null if not valid -function fetchClaim(account) { - var _a; - var formatted = isAddress(account); - if (!formatted) - return Promise.reject(new Error('Invalid address')); - return ((_a = FETCH_CLAIM_PROMISES[account]) !== null && _a !== void 0 ? _a : (FETCH_CLAIM_PROMISES[account] = fetchClaimMapping() - .then(function (mapping) { - var e_1, _a; - var sorted = Object.keys(mapping).sort(function (a, b) { return (a.toLowerCase() < b.toLowerCase() ? -1 : 1); }); - try { - for (var sorted_1 = __values(sorted), sorted_1_1 = sorted_1.next(); !sorted_1_1.done; sorted_1_1 = sorted_1.next()) { - var startingAddress = sorted_1_1.value; - var lastAddress = mapping[startingAddress]; - if (startingAddress.toLowerCase() <= formatted.toLowerCase()) { - if (formatted.toLowerCase() <= lastAddress.toLowerCase()) { - return startingAddress; - } - } - else { - throw new Error("Claim for " + formatted + " was not found in partial search"); - } - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (sorted_1_1 && !sorted_1_1.done && (_a = sorted_1.return)) _a.call(sorted_1); - } - finally { if (e_1) throw e_1.error; } - } - throw new Error("Claim for " + formatted + " was not found after searching all mappings"); - }) - .then(fetchClaimFile) - .then(function (result) { - if (result[formatted]) - return result[formatted]; - throw new Error("Claim for " + formatted + " was not found in claim file!"); - }) - .catch(function (error) { - console.debug('Claim fetch failed', error); - throw error; - }))); -} -// parse distributorContract blob and detect if user has claim data -// null means we know it does not -function useUserClaimData(account) { - var chainId = useActiveWeb3React().chainId; - var _a = __read(useState({}), 2), claimInfo = _a[0], setClaimInfo = _a[1]; - useEffect(function () { - if (!account || chainId !== 1) - return; - fetchClaim(account) - .then(function (accountClaimInfo) { - return setClaimInfo(function (claimInfo) { - var _a; - return __assign(__assign({}, claimInfo), (_a = {}, _a[account] = accountClaimInfo, _a)); - }); - }) - .catch(function () { - setClaimInfo(function (claimInfo) { - var _a; - return __assign(__assign({}, claimInfo), (_a = {}, _a[account] = null, _a)); - }); - }); - }, [account, chainId]); - return account && chainId === 1 ? claimInfo[account] : null; -} -// check if user is in blob and has not yet claimed UNI -function useUserHasAvailableClaim(account) { - var _a; - var userClaimData = useUserClaimData(account); - var distributorContract = useMerkleDistributorContract(); - var isClaimedResult = useSingleCallResult(distributorContract, 'isClaimed', [userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.index]); - // user is in blob and contract marks as unclaimed - return Boolean(userClaimData && !isClaimedResult.loading && ((_a = isClaimedResult.result) === null || _a === void 0 ? void 0 : _a[0]) === false); -} -function useUserUnclaimedAmount(account) { - var chainId = useActiveWeb3React().chainId; - var userClaimData = useUserClaimData(account); - var canClaim = useUserHasAvailableClaim(account); - var uni = chainId ? UNI[chainId] : undefined; - if (!uni) - return undefined; - if (!canClaim || !userClaimData) { - return CurrencyAmount.fromRawAmount(uni, JSBI.BigInt(0)); - } - return CurrencyAmount.fromRawAmount(uni, JSBI.BigInt(userClaimData.amount)); -} -function useClaimCallback(account) { - // get claim data for this account - var _a = useActiveWeb3React(), library = _a.library, chainId = _a.chainId; - var claimData = useUserClaimData(account); - // used for popup summary - var unclaimedAmount = useUserUnclaimedAmount(account); - var addTransaction = useTransactionAdder(); - var distributorContract = useMerkleDistributorContract(); - var claimCallback = function () { - return __awaiter(this, void 0, void 0, function () { - var args; - var _a; - return __generator(this, function (_b) { - if (!claimData || !account || !library || !chainId || !distributorContract) - return [2 /*return*/]; - args = [claimData.index, account, claimData.amount, claimData.proof]; - return [2 /*return*/, (_a = distributorContract.estimateGas)['claim'].apply(_a, __spreadArray(__spreadArray([], __read(args), false), [{}], false)).then(function (estimatedGasLimit) { - return distributorContract - .claim.apply(distributorContract, __spreadArray(__spreadArray([], __read(args), false), [{ value: null, gasLimit: calculateGasMargin(estimatedGasLimit) }], false)).then(function (response) { - addTransaction(response, { - type: TransactionType.CLAIM, - recipient: account, - uniAmountRaw: unclaimedAmount === null || unclaimedAmount === void 0 ? void 0 : unclaimedAmount.quotient.toString(), - }); - return response.hash; - }); - })]; - }); - }); - }; - return { claimCallback: claimCallback }; -} - -var _a$d, _b$4, _c$3, _d$2, _e$1, _f, _g, _h; -var WRAPPED_NATIVE_CURRENCIES_ONLY = Object.fromEntries(Object.entries(WRAPPED_NATIVE_CURRENCY).map(function (_a) { - var _b = __read(_a, 2), key = _b[0], value = _b[1]; - return [key, [value]]; -})); -// used to construct intermediary pairs for trading -var BASES_TO_CHECK_TRADES_AGAINST = __assign(__assign({}, WRAPPED_NATIVE_CURRENCIES_ONLY), (_a$d = {}, _a$d[SupportedChainId.MAINNET] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.MAINNET]), false), [DAI, USDC, USDT, WBTC], false), _a$d[SupportedChainId.OPTIMISM] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.OPTIMISM]), false), [ - DAI_OPTIMISM, - USDT_OPTIMISM, - WBTC_OPTIMISM, -], false), _a$d[SupportedChainId.ARBITRUM_ONE] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.ARBITRUM_ONE]), false), [ - DAI_ARBITRUM_ONE, - USDT_ARBITRUM_ONE, - WBTC_ARBITRUM_ONE, -], false), _a$d[SupportedChainId.POLYGON] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.POLYGON]), false), [ - DAI_POLYGON, - USDC_POLYGON, - USDT_POLYGON, - WETH_POLYGON, -], false), _a$d)); -var ADDITIONAL_BASES = (_b$4 = {}, - _b$4[SupportedChainId.MAINNET] = (_c$3 = { - '0xF16E4d813f4DcfDe4c5b44f305c908742De84eF0': [ETH2X_FLI] - }, - _c$3[rETH2.address] = [sETH2], - _c$3[SWISE.address] = [sETH2], - _c$3[FEI.address] = [TRIBE], - _c$3[TRIBE.address] = [FEI], - _c$3[FRAX.address] = [FXS], - _c$3[FXS.address] = [FRAX], - _c$3[WBTC.address] = [renBTC], - _c$3[renBTC.address] = [WBTC], - _c$3), - _b$4); -/** - * Some tokens can only be swapped via certain pairs, so we override the list of bases that are considered for these - * tokens. - */ -var CUSTOM_BASES = (_d$2 = {}, - _d$2[SupportedChainId.MAINNET] = (_e$1 = {}, - _e$1[AMPL.address] = [DAI, WRAPPED_NATIVE_CURRENCY[SupportedChainId.MAINNET]], - _e$1), - _d$2); -/** - * Shows up in the currency select for swap and add liquidity - */ -var COMMON_BASES = (_f = {}, - _f[SupportedChainId.MAINNET] = [ - nativeOnChain(SupportedChainId.MAINNET), - DAI, - USDC, - USDT, - WBTC, - WRAPPED_NATIVE_CURRENCY[SupportedChainId.MAINNET], - ], - _f[SupportedChainId.ROPSTEN] = [ - nativeOnChain(SupportedChainId.ROPSTEN), - WRAPPED_NATIVE_CURRENCY[SupportedChainId.ROPSTEN], - ], - _f[SupportedChainId.RINKEBY] = [ - nativeOnChain(SupportedChainId.RINKEBY), - WRAPPED_NATIVE_CURRENCY[SupportedChainId.RINKEBY], - ], - _f[SupportedChainId.GOERLI] = [nativeOnChain(SupportedChainId.GOERLI), WRAPPED_NATIVE_CURRENCY[SupportedChainId.GOERLI]], - _f[SupportedChainId.KOVAN] = [nativeOnChain(SupportedChainId.KOVAN), WRAPPED_NATIVE_CURRENCY[SupportedChainId.KOVAN]], - _f[SupportedChainId.ARBITRUM_ONE] = [ - nativeOnChain(SupportedChainId.ARBITRUM_ONE), - DAI_ARBITRUM_ONE, - USDC_ARBITRUM, - USDT_ARBITRUM_ONE, - WBTC_ARBITRUM_ONE, - WRAPPED_NATIVE_CURRENCY[SupportedChainId.ARBITRUM_ONE], - ], - _f[SupportedChainId.ARBITRUM_RINKEBY] = [ - nativeOnChain(SupportedChainId.ARBITRUM_RINKEBY), - WRAPPED_NATIVE_CURRENCY[SupportedChainId.ARBITRUM_RINKEBY], - ], - _f[SupportedChainId.OPTIMISM] = [ - nativeOnChain(SupportedChainId.OPTIMISM), - DAI_OPTIMISM, - USDC_OPTIMISM, - USDT_OPTIMISM, - WBTC_OPTIMISM, - ], - _f[SupportedChainId.OPTIMISTIC_KOVAN] = [nativeOnChain(SupportedChainId.OPTIMISTIC_KOVAN)], - _f[SupportedChainId.POLYGON] = [ - nativeOnChain(SupportedChainId.POLYGON), - WETH_POLYGON, - USDC_POLYGON, - DAI_POLYGON, - USDT_POLYGON, - WBTC_POLYGON, - ], - _f[SupportedChainId.POLYGON_MUMBAI] = [ - nativeOnChain(SupportedChainId.POLYGON_MUMBAI), - WRAPPED_NATIVE_CURRENCY[SupportedChainId.POLYGON_MUMBAI], - WETH_POLYGON_MUMBAI, - ], - _f); -// used to construct the list of all pairs we consider by default in the frontend -__assign(__assign({}, WRAPPED_NATIVE_CURRENCIES_ONLY), (_g = {}, _g[SupportedChainId.MAINNET] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.MAINNET]), false), [DAI, USDC, USDT, WBTC], false), _g)); -(_h = {}, - _h[SupportedChainId.MAINNET] = [ - [ - new Token(SupportedChainId.MAINNET, '0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643', 8, 'cDAI', 'Compound Dai'), - new Token(SupportedChainId.MAINNET, '0x39AA39c021dfbaE8faC545936693aC917d5E7563', 8, 'cUSDC', 'Compound USD Coin'), - ], - [USDC, USDT], - [DAI, USDT], - ], - _h); - -var EthereumLogo = "data:image/png;base64,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"; - -var arbitrumLogoUrl = "data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20viewBox%3D%220%200%20470.287%20514.251%22%20enable-background%3D%22new%200%200%20470.287%20514.251%22%20xml%3Aspace%3D%22preserve%22%3E%3Cg%20id%3D%22Background%22%3E%3C%2Fg%3E%3Cg%20id%3D%22Logos_and_symbols%22%3E%20%3Cg%20id%3D%22SYMBOL_VER_3%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_4_3_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_1_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_1_%22%3E%20%20%3Cg%20id%3D%22_x31_-3%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_14_%22%3E%20%20%20%3Cpath%20fill%3D%22%232D374B%22%20d%3D%22M291.134%2C237.469l35.654-60.5l96.103%2C149.684l0.046%2C28.727l-0.313-197.672%20%20%20%20c-0.228-4.832-2.794-9.252-6.887-11.859L242.715%2C46.324c-4.045-1.99-9.18-1.967-13.22%2C0.063c-0.546%2C0.272-1.06%2C0.57-1.548%2C0.895%20%20%20%20l-0.604%2C0.379L59.399%2C144.983l-0.651%2C0.296c-0.838%2C0.385-1.686%2C0.875-2.48%2C1.444c-3.185%2C2.283-5.299%2C5.66-5.983%2C9.448%20%20%20%20c-0.103%2C0.574-0.179%2C1.158-0.214%2C1.749l0.264%2C161.083l89.515-138.745c11.271-18.397%2C35.825-24.323%2C58.62-24.001l26.753%2C0.706%20%20%20%20L67.588%2C409.765l18.582%2C10.697L245.692%2C157.22l70.51-0.256L157.091%2C426.849l66.306%2C38.138l7.922%2C4.556%20%20%20%20c3.351%2C1.362%2C7.302%2C1.431%2C10.681%2C0.21l175.453-101.678l-33.544%2C19.438L291.134%2C237.469z%20M304.736%2C433.395l-66.969-105.108%20%20%20%20l40.881-69.371l87.952%2C138.628L304.736%2C433.395z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%2328A0F0%22%20points%3D%22237.768%2C328.286%20304.736%2C433.395%20366.601%2C397.543%20278.648%2C258.915%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2328A0F0%22%20d%3D%22M422.937%2C355.379l-0.046-28.727l-96.103-149.684l-35.654%2C60.5l92.774%2C150.043l33.544-19.438%20%20%20%20c3.29-2.673%2C5.281-6.594%2C5.49-10.825L422.937%2C355.379z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23FFFFFF%22%20d%3D%22M20.219%2C382.469l47.369%2C27.296l157.634-252.801l-26.753-0.706c-22.795-0.322-47.35%2C5.604-58.62%2C24.001%20%20%20%20L50.334%2C319.004l-30.115%2C46.271V382.469z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%23FFFFFF%22%20points%3D%22316.202%2C156.964%20245.692%2C157.22%2086.17%2C420.462%20141.928%2C452.565%20157.091%2C426.849%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2396BEDC%22%20d%3D%22M452.65%2C156.601c-0.59-14.746-8.574-28.245-21.08-36.104L256.28%2C19.692%20%20%20%20c-12.371-6.229-27.825-6.237-40.218-0.004c-1.465%2C0.739-170.465%2C98.752-170.465%2C98.752c-2.339%2C1.122-4.592%2C2.458-6.711%2C3.975%20%20%20%20c-11.164%2C8.001-17.969%2C20.435-18.668%2C34.095v208.765l30.115-46.271L50.07%2C157.921c0.035-0.589%2C0.109-1.169%2C0.214-1.741%20%20%20%20c0.681-3.79%2C2.797-7.171%2C5.983-9.456c0.795-0.569%2C172.682-100.064%2C173.228-100.337c4.04-2.029%2C9.175-2.053%2C13.22-0.063%20%20%20%20l173.022%2C99.523c4.093%2C2.607%2C6.659%2C7.027%2C6.887%2C11.859v199.542c-0.209%2C4.231-1.882%2C8.152-5.172%2C10.825l-33.544%2C19.438%20%20%20%20l-17.308%2C10.031l-61.864%2C35.852l-62.737%2C36.357c-3.379%2C1.221-7.33%2C1.152-10.681-0.21l-74.228-42.693l-15.163%2C25.717%20%20%20%20l66.706%2C38.406c2.206%2C1.255%2C4.171%2C2.367%2C5.784%2C3.272c2.497%2C1.4%2C4.199%2C2.337%2C4.8%2C2.629c4.741%2C2.303%2C11.563%2C3.643%2C17.71%2C3.643%20%20%20%20c5.636%2C0%2C11.132-1.035%2C16.332-3.072l182.225-105.531c10.459-8.104%2C16.612-20.325%2C17.166-33.564V156.601z%22%2F%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_13_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_6_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_3_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_15_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_3_%22%3E%20%20%20%3Cg%20id%3D%22_x33__7_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic%22%3E%20%20%20%3Cg%20id%3D%22_x33__3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_10_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x34__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_2_%22%3E%20%20%20%3Cg%20id%3D%22_x33__6_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_2_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_11_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_5_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_12_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_1_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_9_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_2_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol_1_%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_1_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_7_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_8_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Monochromatic_1_%22%3E%20%20%3Cg%20id%3D%22_x33__4_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E"; - -var optimismLogoUrl = "data:image/svg+xml,%3Csvg%20width%3D%22170%22%20height%3D%22168%22%20viewBox%3D%220%200%20170%20168%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20clip-path%3D%22url%28%23clip0%29%22%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF505F%22%2F%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF0320%22%2F%3E%3Cpath%20d%3D%22M85.05%200C132.022%200%20170.1%2037.8949%20170.1%2084.6407C170.1%20131.386%200%20131.386%200%2084.6407C0%2037.8949%2038.0782%200%2085.05%200Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.665%2064.0394L112.444%2012.3742L89.0263%2078.9477L144.665%2064.0394Z%22%20fill%3D%22%23FF4E65%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.777%2064.215L112.444%2012.3742L165.349%2058.4347L143.777%2064.215Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.551%2063.613L142.479%20124.467L88.912%2078.5213L144.551%2063.613Z%22%20fill%3D%22%23D0001A%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.663%2063.7886L142.479%20124.467L165.235%2058.0083L143.663%2063.7886Z%22%20fill%3D%22%23FF697B%22%2F%3E%3C%2Fg%3E%3Cdefs%3E%3CclipPath%20id%3D%22clip0%22%3E%3Crect%20width%3D%22170%22%20height%3D%22168%22%20fill%3D%22white%22%2F%3E%3C%2FclipPath%3E%3C%2Fdefs%3E%3C%2Fsvg%3E"; - -var polygonMaticLogo = "data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20viewBox%3D%220%200%2038.4%2033.5%22%20style%3D%22enable-background%3Anew%200%200%2038.4%2033.5%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cstyle%20type%3D%22text%2Fcss%22%3E%20.st0%7Bfill%3A%238247E5%3B%7D%3C%2Fstyle%3E%3Cg%3E%20%3Cpath%20class%3D%22st0%22%20d%3D%22M29%2C10.2c-0.7-0.4-1.6-0.4-2.4%2C0L21%2C13.5l-3.8%2C2.1l-5.5%2C3.3c-0.7%2C0.4-1.6%2C0.4-2.4%2C0L5%2C16.3%20%20c-0.7-0.4-1.2-1.2-1.2-2.1v-5c0-0.8%2C0.4-1.6%2C1.2-2.1l4.3-2.5c0.7-0.4%2C1.6-0.4%2C2.4%2C0L16%2C7.2c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v3.3l3.8-2.2V7%20%20c0-0.8-0.4-1.6-1.2-2.1l-8-4.7c-0.7-0.4-1.6-0.4-2.4%2C0L1.2%2C5C0.4%2C5.4%2C0%2C6.2%2C0%2C7v9.4c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l5.5-3.2l3.8-2.2l5.5-3.2c0.7-0.4%2C1.6-0.4%2C2.4%2C0l4.3%2C2.5c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v5c0%2C0.8-0.4%2C1.6-1.2%2C2.1%20%20L29%2C28.8c-0.7%2C0.4-1.6%2C0.4-2.4%2C0l-4.3-2.5c-0.7-0.4-1.2-1.2-1.2-2.1V21l-3.8%2C2.2v3.3c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l8.1-4.7c0.7-0.4%2C1.2-1.2%2C1.2-2.1V17c0-0.8-0.4-1.6-1.2-2.1L29%2C10.2z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"; - -var UNI_LIST = 'https://tokens.uniswap.org'; -var AAVE_LIST = 'tokenlist.aave.eth'; -var BA_LIST = 'https://raw.githubusercontent.com/The-Blockchain-Association/sec-notice-list/master/ba-sec-list.json'; -var CMC_ALL_LIST = 'https://api.coinmarketcap.com/data-api/v3/uniswap/all.json'; -var COINGECKO_LIST = 'https://tokens.coingecko.com/uniswap/all.json'; -var COMPOUND_LIST = 'https://raw.githubusercontent.com/compound-finance/token-list/master/compound.tokenlist.json'; -var GEMINI_LIST = 'https://www.gemini.com/uniswap/manifest.json'; -var ARBITRUM_LIST = 'https://bridge.arbitrum.io/token-list-42161.json'; -var KLEROS_LIST = 't2crtokens.eth'; -var OPTIMISM_LIST = 'https://static.optimism.io/optimism.tokenlist.json'; -var ROLL_LIST = 'https://app.tryroll.com/tokens.json'; -var SET_LIST = 'https://raw.githubusercontent.com/SetProtocol/uniswap-tokenlist/main/set.tokenlist.json'; -var WRAPPED_LIST = 'wrapped.tokensoft.eth'; -var UNSUPPORTED_LIST_URLS = [BA_LIST]; -// this is the default list of lists that are exposed to users -// lower index == higher priority for token import -var DEFAULT_LIST_OF_LISTS_TO_DISPLAY = [ - UNI_LIST, - COMPOUND_LIST, - AAVE_LIST, - CMC_ALL_LIST, - COINGECKO_LIST, - KLEROS_LIST, - GEMINI_LIST, - WRAPPED_LIST, - SET_LIST, - ROLL_LIST, - ARBITRUM_LIST, - OPTIMISM_LIST, -]; -var DEFAULT_LIST_OF_LISTS = __spreadArray(__spreadArray([], __read(DEFAULT_LIST_OF_LISTS_TO_DISPLAY), false), __read(UNSUPPORTED_LIST_URLS), false); -// default lists to be 'active' aka searched across -var DEFAULT_ACTIVE_LIST_URLS = [UNI_LIST, GEMINI_LIST]; - -var _a$c, _b$3; -var INFURA_KEY = process.env.REACT_APP_INFURA_KEY; -if (typeof INFURA_KEY === 'undefined') { - throw new Error("REACT_APP_INFURA_KEY must be a defined environment variable"); -} -/** - * These are the network URLs used by the interface when there is not another available source of chain data - */ -var INFURA_NETWORK_URLS = (_a$c = {}, - _a$c[SupportedChainId.MAINNET] = "https://mainnet.infura.io/v3/" + INFURA_KEY, - _a$c[SupportedChainId.RINKEBY] = "https://rinkeby.infura.io/v3/" + INFURA_KEY, - _a$c[SupportedChainId.ROPSTEN] = "https://ropsten.infura.io/v3/" + INFURA_KEY, - _a$c[SupportedChainId.GOERLI] = "https://goerli.infura.io/v3/" + INFURA_KEY, - _a$c[SupportedChainId.KOVAN] = "https://kovan.infura.io/v3/" + INFURA_KEY, - _a$c[SupportedChainId.OPTIMISM] = "https://optimism-mainnet.infura.io/v3/" + INFURA_KEY, - _a$c[SupportedChainId.OPTIMISTIC_KOVAN] = "https://optimism-kovan.infura.io/v3/" + INFURA_KEY, - _a$c[SupportedChainId.ARBITRUM_ONE] = "https://arbitrum-mainnet.infura.io/v3/" + INFURA_KEY, - _a$c[SupportedChainId.ARBITRUM_RINKEBY] = "https://arbitrum-rinkeby.infura.io/v3/" + INFURA_KEY, - _a$c[SupportedChainId.POLYGON] = "https://polygon-mainnet.infura.io/v3/" + INFURA_KEY, - _a$c[SupportedChainId.POLYGON_MUMBAI] = "https://polygon-mumbai.infura.io/v3/" + INFURA_KEY, - _a$c); -var NetworkType; -(function (NetworkType) { - NetworkType[NetworkType["L1"] = 0] = "L1"; - NetworkType[NetworkType["L2"] = 1] = "L2"; -})(NetworkType || (NetworkType = {})); -var CHAIN_INFO = (_b$3 = {}, - _b$3[SupportedChainId.MAINNET] = { - networkType: NetworkType.L1, - docs: 'https://docs.uniswap.org/', - explorer: 'https://etherscan.io/', - infoLink: 'https://info.uniswap.org/#/', - label: 'Ethereum', - logoUrl: EthereumLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, - rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.MAINNET], - }, - }, - _b$3[SupportedChainId.RINKEBY] = { - networkType: NetworkType.L1, - docs: 'https://docs.uniswap.org/', - explorer: 'https://rinkeby.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/', - label: 'Rinkeby', - logoUrl: EthereumLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Rinkeby Ether', symbol: 'rETH', decimals: 18 }, - rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.RINKEBY], - }, - }, - _b$3[SupportedChainId.ROPSTEN] = { - networkType: NetworkType.L1, - docs: 'https://docs.uniswap.org/', - explorer: 'https://ropsten.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/', - label: 'Ropsten', - logoUrl: EthereumLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Ropsten Ether', symbol: 'ropETH', decimals: 18 }, - rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.ROPSTEN], - }, - }, - _b$3[SupportedChainId.KOVAN] = { - networkType: NetworkType.L1, - docs: 'https://docs.uniswap.org/', - explorer: 'https://kovan.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/', - label: 'Kovan', - logoUrl: EthereumLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Kovan Ether', symbol: 'kovETH', decimals: 18 }, - rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.KOVAN], - }, - }, - _b$3[SupportedChainId.GOERLI] = { - networkType: NetworkType.L1, - docs: 'https://docs.uniswap.org/', - explorer: 'https://goerli.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/', - label: 'Görli', - logoUrl: EthereumLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Görli Ether', symbol: 'görETH', decimals: 18 }, - rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.GOERLI], - }, - }, - _b$3[SupportedChainId.OPTIMISM] = { - networkType: NetworkType.L2, - blockWaitMsBeforeWarning: ms(templateObject_1$1m || (templateObject_1$1m = __makeTemplateObject(["25m"], ["25m"]))), - bridge: 'https://gateway.optimism.io/?chainId=1', - defaultListUrl: OPTIMISM_LIST, - docs: 'https://optimism.io/', - explorer: 'https://optimistic.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/optimism/', - label: 'Optimism', - logoUrl: optimismLogoUrl, - statusPage: 'https://optimism.io/status', - helpCenterUrl: 'https://help.uniswap.org/en/collections/3137778-uniswap-on-optimistic-ethereum-oξ', - addNetworkInfo: { - nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, - rpcUrl: 'https://mainnet.optimism.io', - }, - }, - _b$3[SupportedChainId.OPTIMISTIC_KOVAN] = { - networkType: NetworkType.L2, - blockWaitMsBeforeWarning: ms(templateObject_2$10 || (templateObject_2$10 = __makeTemplateObject(["25m"], ["25m"]))), - bridge: 'https://gateway.optimism.io/', - defaultListUrl: OPTIMISM_LIST, - docs: 'https://optimism.io/', - explorer: 'https://optimistic.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/optimism/', - label: 'Optimistic Kovan', - logoUrl: optimismLogoUrl, - statusPage: 'https://optimism.io/status', - helpCenterUrl: 'https://help.uniswap.org/en/collections/3137778-uniswap-on-optimistic-ethereum-oξ', - addNetworkInfo: { - nativeCurrency: { name: 'Optimistic Kovan Ether', symbol: 'kovOpETH', decimals: 18 }, - rpcUrl: 'https://kovan.optimism.io', - }, - }, - _b$3[SupportedChainId.ARBITRUM_ONE] = { - networkType: NetworkType.L2, - blockWaitMsBeforeWarning: ms(templateObject_3$T || (templateObject_3$T = __makeTemplateObject(["10m"], ["10m"]))), - bridge: 'https://bridge.arbitrum.io/', - docs: 'https://offchainlabs.com/', - explorer: 'https://arbiscan.io/', - infoLink: 'https://info.uniswap.org/#/arbitrum', - label: 'Arbitrum', - logoUrl: arbitrumLogoUrl, - defaultListUrl: ARBITRUM_LIST, - helpCenterUrl: 'https://help.uniswap.org/en/collections/3137787-uniswap-on-arbitrum', - addNetworkInfo: { - nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, - rpcUrl: 'https://arb1.arbitrum.io/rpc', - }, - }, - _b$3[SupportedChainId.ARBITRUM_RINKEBY] = { - networkType: NetworkType.L2, - blockWaitMsBeforeWarning: ms(templateObject_4$H || (templateObject_4$H = __makeTemplateObject(["10m"], ["10m"]))), - bridge: 'https://bridge.arbitrum.io/', - docs: 'https://offchainlabs.com/', - explorer: 'https://rinkeby-explorer.arbitrum.io/', - infoLink: 'https://info.uniswap.org/#/arbitrum/', - label: 'Arbitrum Rinkeby', - logoUrl: arbitrumLogoUrl, - defaultListUrl: ARBITRUM_LIST, - helpCenterUrl: 'https://help.uniswap.org/en/collections/3137787-uniswap-on-arbitrum', - addNetworkInfo: { - nativeCurrency: { name: 'Rinkeby Arbitrum Ether', symbol: 'rinkArbETH', decimals: 18 }, - rpcUrl: 'https://rinkeby.arbitrum.io/rpc', - }, - }, - _b$3[SupportedChainId.POLYGON] = { - networkType: NetworkType.L1, - blockWaitMsBeforeWarning: ms(templateObject_5$y || (templateObject_5$y = __makeTemplateObject(["10m"], ["10m"]))), - bridge: 'https://wallet.polygon.technology/bridge', - docs: 'https://polygon.io/', - explorer: 'https://polygonscan.com/', - infoLink: 'https://info.uniswap.org/#/polygon/', - label: 'Polygon', - logoUrl: polygonMaticLogo, - addNetworkInfo: { - rpcUrl: 'https://polygon-rpc.com/', - nativeCurrency: { name: 'Polygon Matic', symbol: 'MATIC', decimals: 18 }, - }, - }, - _b$3[SupportedChainId.POLYGON_MUMBAI] = { - networkType: NetworkType.L1, - blockWaitMsBeforeWarning: ms(templateObject_6$p || (templateObject_6$p = __makeTemplateObject(["10m"], ["10m"]))), - bridge: 'https://wallet.polygon.technology/bridge', - docs: 'https://polygon.io/', - explorer: 'https://mumbai.polygonscan.com/', - infoLink: 'https://info.uniswap.org/#/polygon/', - label: 'Polygon Mumbai', - logoUrl: polygonMaticLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Polygon Mumbai Matic', symbol: 'mMATIC', decimals: 18 }, - rpcUrl: 'https://rpc-endpoints.superfluid.dev/mumbai', - }, - }, - _b$3); -var templateObject_1$1m, templateObject_2$10, templateObject_3$T, templateObject_4$H, templateObject_5$y, templateObject_6$p; - -function useNativeCurrency() { - var chainId = useActiveWeb3React().chainId; - return useMemo(function () { - return chainId - ? nativeOnChain(chainId) - : // display mainnet when not connected - nativeOnChain(SupportedChainId.MAINNET); - }, [chainId]); -} - -var EMPTY_CONNECTOR = initializeConnector(function () { return EMPTY; }); -atomWithDefault(function () { return EMPTY_CONNECTOR; }); -atomWithDefault(function () { return EMPTY_CONNECTOR; }); - -var REGISTRAR_ABI = [ - { - constant: true, - inputs: [ - { - name: 'node', - type: 'bytes32', - }, - ], - name: 'resolver', - outputs: [ - { - name: 'resolverAddress', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, -]; -var REGISTRAR_ADDRESS = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'; -var RESOLVER_ABI = [ - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - ], - name: 'contenthash', - outputs: [ - { - internalType: 'bytes', - name: '', - type: 'bytes', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, -]; -// cache the resolver contracts since most of them are the public resolver -function resolverContract(resolverAddress, provider) { - return new Contract(resolverAddress, RESOLVER_ABI, provider); -} -/** - * Fetches and decodes the result of an ENS contenthash lookup on mainnet to a URI - * @param ensName to resolve - * @param provider provider to use to fetch the data - */ -function resolveENSContentHash(ensName, provider) { - return __awaiter(this, void 0, void 0, function () { - var ensRegistrarContract, hash, resolverAddress; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - ensRegistrarContract = new Contract(REGISTRAR_ADDRESS, REGISTRAR_ABI, provider); - hash = namehash(ensName); - return [4 /*yield*/, ensRegistrarContract.resolver(hash)]; - case 1: - resolverAddress = _a.sent(); - return [2 /*return*/, resolverContract(resolverAddress, provider).contenthash(hash)]; - } - }); - }); -} - -function hexToUint8Array(hex) { - hex = hex.startsWith('0x') ? hex.substr(2) : hex; - if (hex.length % 2 !== 0) - throw new Error('hex must have length that is multiple of 2'); - var arr = new Uint8Array(hex.length / 2); - for (var i = 0; i < arr.length; i++) { - arr[i] = parseInt(hex.substr(i * 2, 2), 16); - } - return arr; -} -var UTF_8_DECODER = new TextDecoder('utf-8'); -/** - * Returns the URI representation of the content hash for supported codecs - * @param contenthash to decode - */ -function contenthashToUri(contenthash) { - var data = hexToUint8Array(contenthash); - var codec = getNameFromData(data); - switch (codec) { - case 'ipfs-ns': { - var unprefixedData = rmPrefix(data); - var cid = new CID(unprefixedData); - return "ipfs://" + toB58String(cid.multihash); - } - case 'ipns-ns': { - var unprefixedData = rmPrefix(data); - var cid = new CID(unprefixedData); - var multihash = decode(cid.multihash); - if (multihash.name === 'identity') { - return "ipns://" + UTF_8_DECODER.decode(multihash.digest).trim(); - } - else { - return "ipns://" + toB58String(cid.multihash); - } - } - default: - throw new Error("Unrecognized codec: " + codec); - } -} - -var ENS_NAME_REGEX$1 = /^(([a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\.)+)eth(\/.*)?$/; -function parseENSAddress(ensAddress) { - var match = ensAddress.match(ENS_NAME_REGEX$1); - if (!match) - return undefined; - return { ensName: match[1].toLowerCase() + "eth", ensPath: match[4] }; -} - -/** - * Given a URI that may be ipfs, ipns, http, https, ar, or data protocol, return the fetch-able http(s) URLs for the same content - * @param uri to convert to fetch-able http url - */ -function uriToHttp(uri) { - var _a, _b, _c; - var protocol = uri.split(':')[0].toLowerCase(); - switch (protocol) { - case 'data': - return [uri]; - case 'https': - return [uri]; - case 'http': - return ['https' + uri.substr(4), uri]; - case 'ipfs': - var hash = (_a = uri.match(/^ipfs:(\/\/)?(.*)$/i)) === null || _a === void 0 ? void 0 : _a[2]; - return ["https://cloudflare-ipfs.com/ipfs/" + hash + "/", "https://ipfs.io/ipfs/" + hash + "/"]; - case 'ipns': - var name_1 = (_b = uri.match(/^ipns:(\/\/)?(.*)$/i)) === null || _b === void 0 ? void 0 : _b[2]; - return ["https://cloudflare-ipfs.com/ipns/" + name_1 + "/", "https://ipfs.io/ipns/" + name_1 + "/"]; - case 'ar': - var tx = (_c = uri.match(/^ar:(\/\/)?(.*)$/i)) === null || _c === void 0 ? void 0 : _c[2]; - return ["https://arweave.net/" + tx]; - default: - return []; - } -} - -var ValidationSchema; -(function (ValidationSchema) { - ValidationSchema["LIST"] = "list"; - ValidationSchema["TOKENS"] = "tokens"; -})(ValidationSchema || (ValidationSchema = {})); -var validator = new Promise(function (resolve) { return __awaiter(void 0, void 0, void 0, function () { - var _a, ajv, schema, validator; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, Promise.all([import('ajv'), Promise.resolve().then(function () { return tokenlist_schema$1; })])]; - case 1: - _a = __read.apply(void 0, [_b.sent(), 2]), ajv = _a[0], schema = _a[1]; - validator = new ajv.default({ allErrors: true }) - .addSchema(schema, ValidationSchema.LIST) - // Adds a meta scheme of Pick - .addSchema(__assign(__assign({}, schema), { $id: schema.$id + '#tokens', required: ['tokens'] }), ValidationSchema.TOKENS); - resolve(validator); - return [2 /*return*/]; - } - }); -}); }); -function getValidationErrors(validate) { - var _a, _b; - return ((_b = (_a = validate === null || validate === void 0 ? void 0 : validate.errors) === null || _a === void 0 ? void 0 : _a.map(function (error) { return [error.dataPath, error.message].filter(Boolean).join(' '); }).join('; ')) !== null && _b !== void 0 ? _b : 'unknown error'); -} -/** - * Validates a token list. - * @param json the TokenList to validate - */ -function validateTokenList(json) { - return __awaiter(this, void 0, void 0, function () { - var validate; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, validator]; - case 1: - validate = (_a.sent()).getSchema(ValidationSchema.LIST); - if (validate === null || validate === void 0 ? void 0 : validate(json)) { - return [2 /*return*/, json]; - } - throw new Error("Token list failed validation: " + getValidationErrors(validate)); - } - }); - }); -} - -var listCache = new Map(); -/** Fetches and validates a token list. */ -function fetchTokenList$1(listUrl, resolveENSContentHash) { - var _a; - return __awaiter(this, void 0, void 0, function () { - var cached, urls, parsedENS, contentHashUri, error_1, message, translatedUri, message, i, url, isLast, response, error_2, message, message, json, list; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - cached = listCache === null || listCache === void 0 ? void 0 : listCache.get(listUrl) // avoid spurious re-fetches - ; - if (cached) { - return [2 /*return*/, cached]; - } - parsedENS = parseENSAddress(listUrl); - if (!parsedENS) return [3 /*break*/, 5]; - contentHashUri = void 0; - _b.label = 1; - case 1: - _b.trys.push([1, 3, , 4]); - return [4 /*yield*/, resolveENSContentHash(parsedENS.ensName)]; - case 2: - contentHashUri = _b.sent(); - return [3 /*break*/, 4]; - case 3: - error_1 = _b.sent(); - message = "failed to resolve ENS name: " + parsedENS.ensName; - console.debug(message, error_1); - throw new Error(message); - case 4: - translatedUri = void 0; - try { - translatedUri = contenthashToUri(contentHashUri); - } - catch (error) { - message = "failed to translate contenthash to URI: " + contentHashUri; - console.debug(message, error); - throw new Error(message); - } - urls = uriToHttp("" + translatedUri + ((_a = parsedENS.ensPath) !== null && _a !== void 0 ? _a : '')); - return [3 /*break*/, 6]; - case 5: - urls = uriToHttp(listUrl); - _b.label = 6; - case 6: - i = 0; - _b.label = 7; - case 7: - if (!(i < urls.length)) return [3 /*break*/, 15]; - url = urls[i]; - isLast = i === urls.length - 1; - response = void 0; - _b.label = 8; - case 8: - _b.trys.push([8, 10, , 11]); - return [4 /*yield*/, fetch(url, { credentials: 'omit' })]; - case 9: - response = _b.sent(); - return [3 /*break*/, 11]; - case 10: - error_2 = _b.sent(); - message = "failed to fetch list: " + listUrl; - console.debug(message, error_2); - if (isLast) - throw new Error(message); - return [3 /*break*/, 14]; - case 11: - if (!response.ok) { - message = "failed to fetch list: " + listUrl; - console.debug(message, response.statusText); - if (isLast) - throw new Error(message); - return [3 /*break*/, 14]; - } - return [4 /*yield*/, response.json()]; - case 12: - json = _b.sent(); - return [4 /*yield*/, validateTokenList(json)]; - case 13: - list = _b.sent(); - listCache === null || listCache === void 0 ? void 0 : listCache.set(listUrl, list); - return [2 /*return*/, list]; - case 14: - i++; - return [3 /*break*/, 7]; - case 15: throw new Error('Unrecognized list URL protocol.'); - } - }); - }); -} - -/** - * Returns a map of the given addresses to their eventually consistent ETH balances. - */ -function useNativeCurrencyBalances(uncheckedAddresses) { - var chainId = useActiveWeb3React().chainId; - var multicallContract = useInterfaceMulticall(); - var validAddressInputs = useMemo(function () { - return uncheckedAddresses - ? uncheckedAddresses - .map(isAddress) - .filter(function (a) { return a !== false; }) - .sort() - .map(function (addr) { return [addr]; }) - : []; - }, [uncheckedAddresses]); - var results = useSingleContractMultipleData(multicallContract, 'getEthBalance', validAddressInputs); - return useMemo(function () { - return validAddressInputs.reduce(function (memo, _a, i) { - var _b, _c; - var _d = __read(_a, 1), address = _d[0]; - var value = (_c = (_b = results === null || results === void 0 ? void 0 : results[i]) === null || _b === void 0 ? void 0 : _b.result) === null || _c === void 0 ? void 0 : _c[0]; - if (value && chainId) - memo[address] = CurrencyAmount.fromRawAmount(nativeOnChain(chainId), JSBI.BigInt(value.toString())); - return memo; - }, {}); - }, [validAddressInputs, chainId, results]); -} -var ERC20Interface = new Interface(ERC20ABI); -var tokenBalancesGasRequirement = { gasRequired: 125000 }; -/** - * Returns a map of token addresses to their eventually consistent token balances for a single account. - */ -function useTokenBalancesWithLoadingIndicator(address, tokens) { - var validatedTokens = useMemo(function () { var _a; return (_a = tokens === null || tokens === void 0 ? void 0 : tokens.filter(function (t) { return isAddress(t === null || t === void 0 ? void 0 : t.address) !== false; })) !== null && _a !== void 0 ? _a : []; }, [tokens]); - var validatedTokenAddresses = useMemo(function () { return validatedTokens.map(function (vt) { return vt.address; }); }, [validatedTokens]); - var balances = useMultipleContractSingleData(validatedTokenAddresses, ERC20Interface, 'balanceOf', useMemo(function () { return [address]; }, [address]), tokenBalancesGasRequirement); - var anyLoading = useMemo(function () { return balances.some(function (callState) { return callState.loading; }); }, [balances]); - return useMemo(function () { return [ - address && validatedTokens.length > 0 - ? validatedTokens.reduce(function (memo, token, i) { - var _a, _b; - var value = (_b = (_a = balances === null || balances === void 0 ? void 0 : balances[i]) === null || _a === void 0 ? void 0 : _a.result) === null || _b === void 0 ? void 0 : _b[0]; - var amount = value ? JSBI.BigInt(value.toString()) : undefined; - if (amount) { - memo[token.address] = CurrencyAmount.fromRawAmount(token, amount); - } - return memo; - }, {}) - : {}, - anyLoading, - ]; }, [address, validatedTokens, anyLoading, balances]); -} -function useTokenBalances(address, tokens) { - return useTokenBalancesWithLoadingIndicator(address, tokens)[0]; -} -// get the balance for a single token/account combo -function useTokenBalance(account, token) { - var tokenBalances = useTokenBalances(account, useMemo(function () { return [token]; }, [token])); - if (!token) - return undefined; - return tokenBalances[token.address]; -} -function useCurrencyBalances(account, currencies) { - var tokens = useMemo(function () { var _a; return (_a = currencies === null || currencies === void 0 ? void 0 : currencies.filter(function (currency) { var _a; return (_a = currency === null || currency === void 0 ? void 0 : currency.isToken) !== null && _a !== void 0 ? _a : false; })) !== null && _a !== void 0 ? _a : []; }, [currencies]); - var tokenBalances = useTokenBalances(account, tokens); - var containsETH = useMemo(function () { var _a; return (_a = currencies === null || currencies === void 0 ? void 0 : currencies.some(function (currency) { return currency === null || currency === void 0 ? void 0 : currency.isNative; })) !== null && _a !== void 0 ? _a : false; }, [currencies]); - var ethBalance = useNativeCurrencyBalances(useMemo(function () { return (containsETH ? [account] : []); }, [containsETH, account])); - return useMemo(function () { - var _a; - return (_a = currencies === null || currencies === void 0 ? void 0 : currencies.map(function (currency) { - if (!account || !currency) - return undefined; - if (currency.isToken) - return tokenBalances[currency.address]; - if (currency.isNative) - return ethBalance[account]; - return undefined; - })) !== null && _a !== void 0 ? _a : []; - }, [account, currencies, ethBalance, tokenBalances]); -} -function useCurrencyBalance(account, currency) { - return useCurrencyBalances(account, useMemo(function () { return [currency]; }, [currency]))[0]; -} - -var alwaysTrue = function () { return true; }; -/** Creates a filter function that filters tokens that do not match the query. */ -function getTokenFilter(query) { - var searchingAddress = isAddress(query); - if (searchingAddress) { - var address_1 = searchingAddress.toLowerCase(); - return function (t) { return 'address' in t && address_1 === t.address.toLowerCase(); }; - } - var queryParts = query - .toLowerCase() - .split(/\s+/) - .filter(function (s) { return s.length > 0; }); - if (queryParts.length === 0) - return alwaysTrue; - var match = function (s) { - var parts = s - .toLowerCase() - .split(/\s+/) - .filter(function (s) { return s.length > 0; }); - return queryParts.every(function (p) { return p.length === 0 || parts.some(function (sp) { return sp.startsWith(p) || sp.endsWith(p); }); }); - }; - return function (_a) { - var name = _a.name, symbol = _a.symbol; - return Boolean((symbol && match(symbol)) || (name && match(name))); - }; -} - -/** Sorts currency amounts (descending). */ -function balanceComparator(a, b) { - if (a && b) { - return a.greaterThan(b) ? -1 : a.equalTo(b) ? 0 : 1; - } - else if (a === null || a === void 0 ? void 0 : a.greaterThan('0')) { - return -1; - } - else if (b === null || b === void 0 ? void 0 : b.greaterThan('0')) { - return 1; - } - return 0; -} -/** Sorts tokens by currency amount (descending), then symbol (ascending). */ -function tokenComparator(balances, a, b) { - // Sorts by balances - var balanceComparison = balanceComparator(balances[a.address], balances[b.address]); - if (balanceComparison !== 0) - return balanceComparison; - // Sorts by symbol - if (a.symbol && b.symbol) { - return a.symbol.toLowerCase() < b.symbol.toLowerCase() ? -1 : 1; - } - return -1; -} -/** Sorts tokens by query, giving precedence to exact matches and partial matches. */ -function useSortTokensByQuery(query, tokens) { - return useMemo(function () { - if (!tokens) { - return []; - } - var matches = query - .toLowerCase() - .split(/\s+/) - .filter(function (s) { return s.length > 0; }); - if (matches.length > 1) { - return tokens; - } - var exactMatches = []; - var symbolSubtrings = []; - var rest = []; - // sort tokens by exact match -> subtring on symbol match -> rest - tokens.map(function (token) { - var _a, _b; - if (((_a = token.symbol) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === matches[0]) { - return exactMatches.push(token); - } - else if ((_b = token.symbol) === null || _b === void 0 ? void 0 : _b.toLowerCase().startsWith(query.toLowerCase().trim())) { - return symbolSubtrings.push(token); - } - else { - return rest.push(token); - } - }); - return __spreadArray(__spreadArray(__spreadArray([], __read(exactMatches), false), __read(symbolSubtrings), false), __read(rest), false); - }, [tokens, query]); -} - -/** - * Token instances created from token info on a token list. - */ -var WrappedTokenInfo = /** @class */ (function () { - function WrappedTokenInfo(tokenInfo, list) { - this.isNative = false; - this.isToken = true; - this._checksummedAddress = null; - this._tags = null; - this.tokenInfo = tokenInfo; - this.list = list; - } - Object.defineProperty(WrappedTokenInfo.prototype, "address", { - get: function () { - if (this._checksummedAddress) - return this._checksummedAddress; - var checksummedAddress = isAddress(this.tokenInfo.address); - if (!checksummedAddress) - throw new Error("Invalid token address: " + this.tokenInfo.address); - return (this._checksummedAddress = checksummedAddress); - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(WrappedTokenInfo.prototype, "chainId", { - get: function () { - return this.tokenInfo.chainId; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(WrappedTokenInfo.prototype, "decimals", { - get: function () { - return this.tokenInfo.decimals; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(WrappedTokenInfo.prototype, "name", { - get: function () { - return this.tokenInfo.name; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(WrappedTokenInfo.prototype, "symbol", { - get: function () { - return this.tokenInfo.symbol; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(WrappedTokenInfo.prototype, "logoURI", { - get: function () { - return this.tokenInfo.logoURI; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(WrappedTokenInfo.prototype, "tags", { - get: function () { - var _a; - if (this._tags !== null) - return this._tags; - if (!this.tokenInfo.tags) - return (this._tags = []); - var listTags = (_a = this.list) === null || _a === void 0 ? void 0 : _a.tags; - if (!listTags) - return (this._tags = []); - return (this._tags = this.tokenInfo.tags.map(function (tagId) { - return __assign(__assign({}, listTags[tagId]), { id: tagId }); - })); - }, - enumerable: false, - configurable: true - }); - WrappedTokenInfo.prototype.equals = function (other) { - return other.chainId === this.chainId && other.isToken && other.address.toLowerCase() === this.address.toLowerCase(); - }; - WrappedTokenInfo.prototype.sortsBefore = function (other) { - if (this.equals(other)) - throw new Error('Addresses should not be equal'); - return this.address.toLowerCase() < other.address.toLowerCase(); - }; - Object.defineProperty(WrappedTokenInfo.prototype, "wrapped", { - get: function () { - return this; - }, - enumerable: false, - configurable: true - }); - return WrappedTokenInfo; -}()); - -var mapCache = typeof WeakMap !== 'undefined' ? new WeakMap() : null; -function tokensToChainTokenMap(tokens) { - var cached = mapCache === null || mapCache === void 0 ? void 0 : mapCache.get(tokens); - if (cached) - return cached; - var _a = __read(Array.isArray(tokens) ? [undefined, tokens] : [tokens, tokens.tokens], 2), list = _a[0], infos = _a[1]; - var map = infos.reduce(function (map, info) { - var _a; - var token = new WrappedTokenInfo(info, list); - if (((_a = map[token.chainId]) === null || _a === void 0 ? void 0 : _a[token.address]) !== undefined) { - console.warn("Duplicate token skipped: " + token.address); - return map; - } - if (!map[token.chainId]) { - map[token.chainId] = {}; - } - map[token.chainId][token.address] = { token: token, list: list }; - return map; - }, {}); - mapCache === null || mapCache === void 0 ? void 0 : mapCache.set(tokens, map); - return map; -} - -atom({}); - -// parse a name or symbol from a token response -var BYTES32_REGEX = /^0x[a-fA-F0-9]{64}$/; -function parseStringOrBytes32(str, bytes32, defaultValue) { - return str && str.length > 0 - ? str - : // need to check for proper bytes string and valid terminator - bytes32 && BYTES32_REGEX.test(bytes32) && arrayify(bytes32)[31] === 0 - ? parseBytes32String(bytes32) - : defaultValue; -} -/** - * Returns a Token from the tokenAddress. - * Returns null if token is loading or null was passed. - * Returns undefined if tokenAddress is invalid or token does not exist. - */ -function useTokenFromMap(tokens, tokenAddress) { - var chainId = useActiveWeb3React().chainId; - var address = isAddress(tokenAddress); - var tokenContract = useTokenContract(address ? address : undefined, false); - var tokenContractBytes32 = useBytes32TokenContract(address ? address : undefined, false); - var token = address ? tokens[address] : undefined; - var tokenName = useSingleCallResult(token ? undefined : tokenContract, 'name', undefined, NEVER_RELOAD); - var tokenNameBytes32 = useSingleCallResult(token ? undefined : tokenContractBytes32, 'name', undefined, NEVER_RELOAD); - var symbol = useSingleCallResult(token ? undefined : tokenContract, 'symbol', undefined, NEVER_RELOAD); - var symbolBytes32 = useSingleCallResult(token ? undefined : tokenContractBytes32, 'symbol', undefined, NEVER_RELOAD); - var decimals = useSingleCallResult(token ? undefined : tokenContract, 'decimals', undefined, NEVER_RELOAD); - return useMemo(function () { - var _a, _b, _c, _d; - if (token) - return token; - if (tokenAddress === null) - return null; - if (!chainId || !address) - return undefined; - if (decimals.loading || symbol.loading || tokenName.loading) - return null; - if (decimals.result) { - return new Token(chainId, address, decimals.result[0], parseStringOrBytes32((_a = symbol.result) === null || _a === void 0 ? void 0 : _a[0], (_b = symbolBytes32.result) === null || _b === void 0 ? void 0 : _b[0], 'UNKNOWN'), parseStringOrBytes32((_c = tokenName.result) === null || _c === void 0 ? void 0 : _c[0], (_d = tokenNameBytes32.result) === null || _d === void 0 ? void 0 : _d[0], 'Unknown Token')); - } - return undefined; - }, [ - address, - chainId, - decimals.loading, - decimals.result, - symbol.loading, - symbol.result, - symbolBytes32.result, - token, - tokenAddress, - tokenName.loading, - tokenName.result, - tokenNameBytes32.result, - ]); -} -/** - * Returns a Currency from the currencyId. - * Returns null if currency is loading or null was passed. - * Returns undefined if currencyId is invalid or token does not exist. - */ -function useCurrencyFromMap(tokens, currencyId) { - var _a; - var nativeCurrency = useNativeCurrency(); - var isNative = Boolean(nativeCurrency && (currencyId === null || currencyId === void 0 ? void 0 : currencyId.toUpperCase()) === 'ETH'); - var token = useTokenFromMap(tokens, isNative ? undefined : currencyId); - if (currencyId === null || currencyId === undefined) - return currencyId; - // this case so we use our builtin wrapped token instead of wrapped tokens on token lists - var wrappedNative = nativeCurrency === null || nativeCurrency === void 0 ? void 0 : nativeCurrency.wrapped; - if (((_a = wrappedNative === null || wrappedNative === void 0 ? void 0 : wrappedNative.address) === null || _a === void 0 ? void 0 : _a.toUpperCase()) === (currencyId === null || currencyId === void 0 ? void 0 : currencyId.toUpperCase())) - return wrappedNative; - return isNative ? nativeCurrency : token; -} - -var DEFAULT_LIST_PRIORITIES = DEFAULT_LIST_OF_LISTS.reduce(function (memo, listUrl, index) { - memo[listUrl] = index + 1; - return memo; -}, {}); -// use ordering of default list of lists to assign priority -function sortByListPriority(urlA, urlB) { - if (DEFAULT_LIST_PRIORITIES[urlA] && DEFAULT_LIST_PRIORITIES[urlB]) { - return DEFAULT_LIST_PRIORITIES[urlA] - DEFAULT_LIST_PRIORITIES[urlB]; - } - return 0; -} - -var name$1 = "Broken Token List"; -var timestamp$1 = "2021-01-05T20:47:02.923Z"; -var version$1 = { - major: 1, - minor: 0, - patch: 0 -}; -var tags$1 = { -}; -var logoURI$1 = "ipfs://QmNa8mQkrNKp1WEEeGjFezDmDeodkWRevGFN8JCV7b4Xir"; -var keywords$1 = [ - "uniswap", - "broken" -]; -var tokens$1 = [ - { - name: "UNI HODL", - address: "0x4bf5dc91E2555449293D7824028Eb8Fe5879B689", - symbol: "UniH", - decimals: 18, - chainId: 1, - logoURI: "" - } -]; -var BROKEN_LIST = { - name: name$1, - timestamp: timestamp$1, - version: version$1, - tags: tags$1, - logoURI: logoURI$1, - keywords: keywords$1, - tokens: tokens$1 -}; - -var name = "Unsupported Tokens"; -var timestamp = "2021-01-05T20:47:02.923Z"; -var version = { - major: 1, - minor: 0, - patch: 0 -}; -var tags = { -}; -var logoURI = "ipfs://QmNa8mQkrNKp1WEEeGjFezDmDeodkWRevGFN8JCV7b4Xir"; -var keywords = [ - "uniswap", - "unsupported" -]; -var tokens = [ - { - name: "Gold Tether", - address: "0x4922a015c4407F87432B179bb209e125432E4a2A", - symbol: "XAUt", - decimals: 6, - chainId: 1, - logoURI: "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4922a015c4407F87432B179bb209e125432E4a2A/logo.png" - }, - { - name: "Grump Cat", - address: "0x93B2FfF814FCaEFFB01406e80B4Ecd89Ca6A021b", - symbol: "GRUMPY", - decimals: 9, - chainId: 1, - logoURI: "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4922a015c4407F87432B179bb209e125432E4a2A/logo.png" - }, - { - name: "apeUSD-UMA Synthetic USD (Dec 2021)", - address: "0xfA5e27893aee4805283D86e4283Da64F8c72dd56", - symbol: "apeUSD-UMA-DEC21", - decimals: 18, - chainId: 1, - logoURI: "" - }, - { - chainId: 1, - address: "0xc6b11850241c5127eab73af4b6c68bc267cbbff4", - name: "oWETHp Put 360 DEC2520", - symbol: "oWETH-360P-12/25/20", - decimals: 7 - }, - { - chainId: 1, - name: "oYFIp Put 25000 OCT0220", - address: "0x452b421be5b30f0c6ad8c3f03c06bdaab4f5c56c", - symbol: "oYFI-25000P-10/02/20", - decimals: 7 - }, - { - chainId: 1, - name: "oWETHp Put 360 OCT3020", - address: "0x0578779e746d7186253a36cf651ea786acfcf087", - symbol: "oWETH-360P-10/30/20", - decimals: 7 - }, - { - chainId: 1, - name: "ETHc Call 500 OCT3020", - address: "0xf9aba2e43fb19184408ea3b572a0fd672946f87b", - symbol: "oETH-500C-10/30/20", - decimals: 6 - }, - { - chainId: 1, - name: "oBALp Put 22 OCT0220", - address: "0xdb0991dfc7e828b5a2837dc82d68e16490562c8d", - symbol: "oBAL-22P-10/02/20", - decimals: 7 - }, - { - chainId: 1, - name: "oCOMPp Put 150 SEP2520", - address: "0xe951ebe6b4420ab3f4844cf36dedd263d095b416", - symbol: "oCOMP-150P-09/25/20", - decimals: 7 - }, - { - chainId: 1, - name: "oCRVp Put 3 SEP252020", - address: "0x9215bd49b59748419eac6bad9dbe247df06ebdb9", - symbol: "oCRV-3P-09/25/20", - decimals: 7 - }, - { - chainId: 1, - name: "oETHp Put 180 SEP2520", - address: "0xE3A2c34Fa2F59ffa95C4ACd1E5663633d45Bc3AD", - symbol: "oETH-180P-09/25/20", - decimals: 7 - }, - { - chainId: 1, - name: "oETHc Call 400 SEP2520", - address: "0x05977EBC26825C0CD6097E0Ad7204721516711Eb", - symbol: "oETH-400C-09/25/20", - decimals: 7 - }, - { - chainId: 1, - name: "oWETHp Put 380 SEP1820", - address: "0x31f88266301b08631f9f0e33fd5c43c2a5d1e5b2", - symbol: "oWETH-380P-09/18/20", - decimals: 7 - }, - { - chainId: 1, - name: "oYFIp Put 8500 SEP1820", - address: "0xd1cec2f67fdc4c60e0963515dfc3343f31e32e47", - symbol: "oYFI-8500P-09/18/20", - decimals: 7 - }, - { - chainId: 1, - name: "oWETHp Put 370 SEP1120", - address: "0x15844029b2c2bf24506e9937739a9a912f1e4354", - symbol: "oWETH-370P-09/11/20", - decimals: 7 - }, - { - chainId: 1, - name: "oWETHp Put 400 SEP0420", - address: "0x5562c33c383f6386be4f6dcdbd35a3a99bbcfde6", - symbol: "oWETH-400P-09/04/20", - decimals: 7 - }, - { - chainId: 1, - name: "oETHp Put 200 AUG2820", - address: "0x3CBFC1397deF0602c2d211c70A1c0c38CEDB5448", - symbol: "oWETH-400P-09/04/20", - decimals: 7 - }, - { - chainId: 1, - name: "Opyn cDai Insurance", - symbol: "ocDai", - address: "0x98cc3bd6af1880fcfda17ac477b2f612980e5e33", - decimals: 8 - }, - { - chainId: 1, - name: "Opyn cUSDC Insurance", - symbol: "ocUSDC", - address: "0x8ED9f862363fFdFD3a07546e618214b6D59F03d4", - decimals: 8 - }, - { - chainId: 1, - address: "0x176C674Ee533C6139B0dc8b458D72A93dCB3e705", - symbol: "iAAVE", - name: "Synth Inverse Aave", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iAAVE.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x8A8079c7149B8A1611e5C5d978DCA3bE16545F83", - symbol: "iADA", - name: "Synth Inverse Cardano", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iADA.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0xAFD870F32CE54EfdBF677466B612bf8ad164454B", - symbol: "iBNB", - name: "Synth Inverse Binance Coin", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iBNB.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0xD6014EA05BDe904448B743833dDF07c3C7837481", - symbol: "iBTC", - name: "Synth Inverse Bitcoin", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iBTC.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x336213e1DDFC69f4701Fc3F86F4ef4A160c1159d", - symbol: "iCEX", - name: "Synth Inverse Centralised Exchange Index", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iCEX.svg", - tags: [ - "index", - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x6345728B1ccE16E6f8C509950b5c84FFF88530d9", - symbol: "iCOMP", - name: "Synth Inverse Compound", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iCOMP.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0xCB98f42221b2C251A4E74A1609722eE09f0cc08E", - symbol: "iDASH", - name: "Synth Inverse Dash", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDASH.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x14d10003807AC60d07BB0ba82cAeaC8d2087c157", - symbol: "iDEFI", - name: "Synth Inverse DeFi Index", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDEFI.svg", - tags: [ - "index", - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x46a97629C9C1F58De6EC18C7F536e7E6d6A6ecDe", - symbol: "iDOT", - name: "Synth Inverse Polkadot", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDOT.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0xF4EebDD0704021eF2a6Bbe993fdf93030Cd784b4", - symbol: "iEOS", - name: "Synth Inverse EOS", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iEOS.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0xd50c1746D835d2770dDA3703B69187bFfeB14126", - symbol: "iETC", - name: "Synth Inverse Ethereum Classic", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iETC.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0xA9859874e1743A32409f75bB11549892138BBA1E", - symbol: "iETH", - name: "Synth Inverse Ether", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iETH.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x2d7aC061fc3db53c39fe1607fB8cec1B2C162B01", - symbol: "iLINK", - name: "Synth Inverse Chainlink", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iLINK.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x79da1431150C9b82D2E5dfc1C68B33216846851e", - symbol: "iLTC", - name: "Synth Inverse Litecoin", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iLTC.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0xA5a5DF41883Cdc00c4cCC6E8097130535399d9a3", - symbol: "iOIL", - name: "Synth Inverse Perpetual Oil Futures", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iOIL.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x0fEd38108bdb8e62ef7b5680E8E0726E2F29e0De", - symbol: "iREN", - name: "Synth Inverse Ren", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iREN.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0xC5807183a9661A533CB08CbC297594a0B864dc12", - symbol: "iTRX", - name: "Synth Inverse TRON", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iTRX.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x36A00FF9072570eF4B9292117850B8FE08d96cce", - symbol: "iUNI", - name: "Synth Inverse Uniswap", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iUNI.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x4AdF728E2Df4945082cDD6053869f51278fae196", - symbol: "iXMR", - name: "Synth Inverse Monero", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXMR.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x27269b3e45A4D3E79A3D6BFeE0C8fB13d0D711A6", - symbol: "iXRP", - name: "Synth Inverse Ripple", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXRP.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x8deef89058090ac5655A99EEB451a4f9183D1678", - symbol: "iXTZ", - name: "Synth Inverse Tezos", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXTZ.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x592244301CeA952d6daB2fdC1fE6bd9E53917306", - symbol: "iYFI", - name: "Synth Inverse yearn.finance", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iYFI.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0xcD39b5434a0A92cf47D1F567a7dF84bE356814F0", - symbol: "s1INCH", - name: "Synth 1inch", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/s1INCH.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x7537AAe01f3B218DAE75e10d952473823F961B87", - symbol: "sAAPL", - name: "Synth Apple", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAAPL.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xd2dF355C19471c8bd7D8A3aa27Ff4e26A21b4076", - symbol: "sAAVE", - name: "Synth Aave", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAAVE.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xe36E2D3c7c34281FA3bC737950a68571736880A1", - symbol: "sADA", - name: "Synth Cardano", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sADA.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x9CF7E61853ea30A41b02169391b393B901eac457", - symbol: "sAMZN", - name: "Synth Amazon", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAMZN.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xF48e200EAF9906362BB1442fca31e0835773b8B4", - symbol: "sAUD", - name: "Synth Australian Dollars", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAUD.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x617aeCB6137B5108D1E7D4918e3725C8cEbdB848", - symbol: "sBNB", - name: "Synth Binance Coin", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sBNB.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xfE18be6b3Bd88A2D2A7f928d00292E7a9963CfC6", - symbol: "sBTC", - name: "Synth Bitcoin", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sBTC.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xeABACD844A196D7Faf3CE596edeBF9900341B420", - symbol: "sCEX", - name: "Synth Centralised Exchange Index", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCEX.svg", - tags: [ - "index", - "synth" - ] - }, - { - chainId: 1, - address: "0x0F83287FF768D1c1e17a42F44d644D7F22e8ee1d", - symbol: "sCHF", - name: "Synth Swiss Franc", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCHF.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x9EeF4CA7aB9fa8bc0650127341C2d3F707a40f8A", - symbol: "sCOIN", - name: "Synth Coinbase", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCOIN.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xEb029507d3e043DD6C87F2917C4E82B902c35618", - symbol: "sCOMP", - name: "Synth Compound", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCOMP.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xD38aEb759891882e78E957c80656572503D8c1B1", - symbol: "sCRV", - name: "Synth Curve DAO Token", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCRV.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xfE33ae95A9f0DA8A845aF33516EDc240DCD711d6", - symbol: "sDASH", - name: "Synth Dash", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDASH.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xe1aFe1Fd76Fd88f78cBf599ea1846231B8bA3B6B", - symbol: "sDEFI", - name: "Synth DeFi Index", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDEFI.svg", - tags: [ - "index", - "synth" - ] - }, - { - chainId: 1, - address: "0x1715AC0743102BF5Cd58EfBB6Cf2dC2685d967b6", - symbol: "sDOT", - name: "Synth Polkadot", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDOT.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x88C8Cf3A212c0369698D13FE98Fcb76620389841", - symbol: "sEOS", - name: "Synth EOS", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sEOS.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x22602469d704BfFb0936c7A7cfcD18f7aA269375", - symbol: "sETC", - name: "Synth Ethereum Classic", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sETC.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x5e74C9036fb86BD7eCdcb084a0673EFc32eA31cb", - symbol: "sETH", - name: "Synth Ether", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sETH.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xD71eCFF9342A5Ced620049e616c5035F1dB98620", - symbol: "sEUR", - name: "Synth Euros", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sEUR.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xf50B5e535F62a56A9BD2d8e2434204E726c027Fa", - symbol: "sFB", - name: "Synth Facebook", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sFB.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x23348160D7f5aca21195dF2b70f28Fce2B0be9fC", - symbol: "sFTSE", - name: "Synth FTSE 100 Index", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sFTSE.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x97fe22E7341a0Cd8Db6F6C021A24Dc8f4DAD855F", - symbol: "sGBP", - name: "Synth Pound Sterling", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sGBP.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xC63B8ECCE56aB9C46184eC6aB85e4771fEa4c8AD", - symbol: "sGOOG", - name: "Synth Alphabet", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sGOOG.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xF6b1C627e95BFc3c1b4c9B825a032Ff0fBf3e07d", - symbol: "sJPY", - name: "Synth Japanese Yen", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sJPY.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x269895a3dF4D73b077Fc823dD6dA1B95f72Aaf9B", - symbol: "sKRW", - name: "Synth South Korean Won", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sKRW.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xbBC455cb4F1B9e4bFC4B73970d360c8f032EfEE6", - symbol: "sLINK", - name: "Synth Chainlink", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sLINK.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xC14103C2141E842e228FBaC594579e798616ce7A", - symbol: "sLTC", - name: "Synth Litecoin", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sLTC.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x745a824D6aBBD236AA794b5530062778A6Ad7523", - symbol: "sMSFT", - name: "Synth Microsoft", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sMSFT.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x5A7E3c07604EB515C16b36cd51906a65f021F609", - symbol: "sNFLX", - name: "Synth Netflix", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sNFLX.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x757de3ac6B830a931eF178C6634c5C551773155c", - symbol: "sNIKKEI", - name: "Synth Nikkei 225 Index", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sNIKKEI.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x6d16cF3EC5F763d4d99cB0B0b110eefD93B11B56", - symbol: "sOIL", - name: "Synth Perpetual Oil Futures", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sOIL.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xD31533E8d0f3DF62060e94B3F1318137bB6E3525", - symbol: "sREN", - name: "Synth Ren", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sREN.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x0352557B007A4Aae1511C114409b932F06F9E2f4", - symbol: "sRUNE", - name: "Synth THORChain", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sRUNE.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xf2E08356588EC5cd9E437552Da87C0076b4970B0", - symbol: "sTRX", - name: "Synth TRON", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sTRX.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x918dA91Ccbc32B7a6A0cc4eCd5987bbab6E31e6D", - symbol: "sTSLA", - name: "Synth Tesla", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sTSLA.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x30635297E450b930f8693297eBa160D9e6c8eBcf", - symbol: "sUNI", - name: "Synth Uniswap", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sUNI.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x6A22e5e94388464181578Aa7A6B869e00fE27846", - symbol: "sXAG", - name: "Synth Silver Ounce", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXAG.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x261EfCdD24CeA98652B9700800a13DfBca4103fF", - symbol: "sXAU", - name: "Synth Gold Ounce", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXAU.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x5299d6F7472DCc137D7f3C4BcfBBB514BaBF341A", - symbol: "sXMR", - name: "Synth Monero", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXMR.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xa2B0fDe6D710e201d0d608e924A484d1A5fEd57c", - symbol: "sXRP", - name: "Synth Ripple", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXRP.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x2e59005c5c0f0a4D77CcA82653d48b46322EE5Cd", - symbol: "sXTZ", - name: "Synth Tezos", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXTZ.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x992058B7DB08F9734d84485bfbC243C4ee6954A7", - symbol: "sYFI", - name: "Synth yearn.finance", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sYFI.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x81ab848898b5ffD3354dbbEfb333D5D183eEDcB5", - name: "yUSD Synthetic Expiring 1 September 2020", - symbol: "yUSDSEP20", - decimals: 18 - }, - { - chainId: 1, - address: "0xB2FdD60AD80ca7bA89B9BAb3b5336c2601C020b4", - name: "yUSD Synthetic Expiring 1 October 2020", - symbol: "yUSDOCT20", - decimals: 18 - }, - { - chainId: 1, - address: "0x208d174775dc39fe18b1b374972f77ddec6c0f73", - name: "uUSDrBTC Synthetic Expiring 1 Oct 2020", - symbol: "uUSDrBTC-OCT", - decimals: 18 - }, - { - chainId: 1, - address: "0xf06ddacf71e2992e2122a1a0168c6967afdf63ce", - name: "uUSDrBTC Synthetic Expiring 31 Dec 2020", - symbol: "uUSDrBTC-DEC", - decimals: 18 - }, - { - chainId: 1, - address: "0xd16c79c8a39d44b2f3eb45d2019cd6a42b03e2a9", - name: "uUSDwETH Synthetic Expiring 31 Dec 2020", - symbol: "uUSDwETH-DEC", - decimals: 18 - }, - { - chainId: 1, - address: "0x3d995510f8d82c2ea341845932b5ddde0bead9a3", - name: "uGAS-JAN21 Token Expiring 31 Jan 2021", - symbol: "uGAS-JAN21", - decimals: 18 - }, - { - chainId: 1, - address: "0x90f802c7e8fb5d40b0de583e34c065a3bd2020d8", - name: "YD-ETH-MAR21 Token Expiring 31 Mar 2021", - symbol: "YD-ETH-MAR21", - decimals: 18 - }, - { - chainId: 1, - address: "0x002f0b1a71c5730cf2f4da1970a889207bdb6d0d", - name: "YD-BTC-MAR21 Token Expiring 31 Mar 2021", - symbol: "YD-BTC-MAR21", - decimals: 18 - }, - { - chainId: 1, - address: "0x1062ad0e59fa67fa0b27369113098cc941dd0d5f", - name: "UMA 35 Call Expirying 30 Apr 2021", - symbol: "UMAc35-0421", - decimals: 18 - }, - { - chainId: 1, - address: "0xf93340b1a3adf7eedcaec25fae8171d4b736e89f", - name: "pxUSD Synthetic USD Expiring 1 April 2021", - symbol: "pxUSD_MAR2021", - decimals: 18 - }, - { - chainId: 1, - address: "0x84bd083b1c8bf929f39c98bc17cf518f40154f58", - name: "Mario Cash Synthetic Token Expiring 15 January 2021", - symbol: "Mario Cash-JAN-2021", - decimals: 18 - }, - { - chainId: 1, - address: "0x81fab276aec924fbde190cf379783526d413cf70", - name: "uGAS-FEB21 Token Expiring 28 Feb 2021", - symbol: "uGAS-FEB21", - decimals: 18 - }, - { - chainId: 1, - address: "0x4e110603e70b0b5f1c403ee543b37e1f1244cf28", - name: "uGAS-MAR21 Token Expiring 31 Mar 2021", - symbol: "uGAS-MAR21", - decimals: 18 - }, - { - chainId: 1, - address: "0xcf55a7f92d5e0c6683debbc1fc20c0a6e056df13", - name: "Zelda Elastic Cash", - symbol: "Zelda Elastic Cash", - decimals: 18 - }, - { - chainId: 1, - address: "0x654eebac62240e6c56bab5f6adf7cfa74a894510", - name: "Zelda Spring Nuts Cash", - symbol: "Zelda Spring Nuts Cash", - decimals: 18 - }, - { - chainId: 1, - address: "0xa48920cc1ad85d8ea13af5d7be180c0338c306dd", - name: "Zelda Summer Nuts Cash", - symbol: "Zelda Summer Nuts Cash", - decimals: 18 - }, - { - chainId: 1, - address: "0x249a198d59b57fda5dda90630febc86fd8c7594c", - name: "Zelda Whirlwind Cash", - symbol: "Zelda Whirlwind Cash", - decimals: 18 - }, - { - chainId: 1, - address: "0x5ed1406873c9eb91f6f9a67ac4e152387c1132e7", - name: "Zelda Reinforced Cash", - symbol: "Zelda Reinforced Cash", - decimals: 18 - }, - { - chainId: 1, - address: "0x8104c9f13118320eefe5fbea8a44d600b85981ef", - name: "Mini Mario Summer Cash", - symbol: "Mini Mario Summer Cash", - decimals: 18 - }, - { - chainId: 1, - address: "0x69746c719e59674b147df25f50e7cfa0673cb625", - name: "Mini Mario Spring Cash", - symbol: "Mini Mario Spring Cash", - decimals: 18 - }, - { - chainId: 1, - address: "0x6b1257641d18791141f025eab36fb567c4b564ff", - name: "Bitcoin Dominance Token 31 March 2021", - symbol: "BTCDOM-MAR2021", - decimals: 18 - }, - { - chainId: 1, - address: "0x4e83b6287588a96321b2661c5e041845ff7814af", - name: "Altcoin Dominance Token 31 March 2021", - symbol: "ALTDOM-MAR2021", - decimals: 18 - }, - { - chainId: 1, - address: "0x59fec83ec709c893aedd1a144cf1828eb04127cd", - name: "pxGOLD Synthetic GOLD Expiring 31 May 2021", - symbol: "pxGOLD_MAY2021", - decimals: 18 - }, - { - chainId: 1, - address: "0x89337BFb7938804c3776C9FB921EccAf5ab76758", - name: "Compound Annualized Rate Future Expiring 28 March 2021", - symbol: "CAR-USDC-MAR21", - decimals: 18 - }, - { - chainId: 1, - address: "0xec58d3aefc9aaa2e0036fa65f70d569f49d9d1ed", - name: "uSTONKS Index Token April 2021", - symbol: "uSTONKS_APR21", - decimals: 6 - }, - { - chainId: 1, - address: "0xa6B9d7E3d76cF23549293Fb22c488E0Ea591A44e", - name: "uGAS-JUN21 Token Expiring 30 Jun 2021", - symbol: "uGAS-JUN21", - decimals: 18 - }, - { - chainId: 1, - address: "0xe813b65da6c38a04591aed3f082d32db7d53c382", - name: "Yield Dollar [WETH Dec 2021]", - symbol: "YD-ETH-DEC21", - decimals: 18 - }, - { - chainId: 1, - address: "0x4b606e9eb2228c70f44453afe5a73e1fea258ce1", - name: "pxUSD Synthetic USD Expiring 31 Mar 2022", - symbol: "pxUSD_MAR2022", - decimals: 18 - }, - { - chainId: 1, - address: "0x5247c0db4044fb6f97f32c7e1b48758019a5a912", - name: "pxGOLD Synthetic Gold Expiring 31 Mar 2022", - symbol: "pxGOLD_MAR2022", - decimals: 18 - }, - { - chainId: 1, - address: "0x56fb1acaff95c0b6ebcd17c8361a63d98b1a5a11", - name: "uForex CNYUSD Synthetic Token April 2021", - symbol: "uCNYUSD-APR", - decimals: 6 - }, - { - chainId: 1, - address: "0xd49fa405dce086c65d66ca1ca41f8e98583812b4", - name: "uForex EURUSD Synthetic Token April 2021", - symbol: "uEURUSD-APR", - decimals: 6 - }, - { - chainId: 1, - address: "0x29dddacba3b231ee8d673dd0f0fa759ea145561b", - name: "DEFI_PULSE_TOTAL_TVL Synthetic Token Expiring 15 April 2021", - symbol: "TVL_ALL_APRIL15", - decimals: 6 - }, - { - chainId: 1, - address: "0xcbe430927370e95b4b10cfc702c6017ec7abefc3", - name: "Yield Dollar [WETH Jun 2021]", - symbol: "YD-ETH-JUN21", - decimals: 18 - }, - { - chainId: 1, - address: "0x4b7fb448df91c8ed973494f8c8c4f12daf3a8521", - name: "Yield Dollar [renBTC Jun 2021]", - symbol: "YD-BTC-JUN21", - decimals: 8 - }, - { - chainId: 1, - address: "0x3108c33b6fb38efedaefd8b5f7ca01d5f5c7372d", - name: "Yield Dollar UMA 21", - symbol: "yUMA21", - decimals: 18 - }, - { - chainId: 1, - address: "0x0cae9e4d663793c2a2A0b211c1Cf4bBca2B9cAa7", - name: "Mirrored Amazon", - symbol: "MAMZN", - decimals: 18 - }, - { - chainId: 1, - address: "0x31c63146a635EB7465e5853020b39713AC356991", - name: "M US Oil", - symbol: "MUSO", - decimals: 18 - }, - { - chainId: 1, - address: "0x59A921Db27Dd6d4d974745B7FfC5c33932653442", - name: "M Google", - symbol: "MGOOGL", - decimals: 18 - }, - { - chainId: 1, - address: "0xf72FCd9DCF0190923Fadd44811E240Ef4533fc86", - name: "Mirrored ProShares", - symbol: "MVIXY", - decimals: 18 - }, - { - chainId: 1, - address: "0x56aA298a19C93c6801FDde870fA63EF75Cc0aF72", - name: "Mirrored Alibaba", - symbol: "MBABA", - decimals: 18 - }, - { - chainId: 1, - address: "0x0e99cC0535BB6251F6679Fa6E65d6d3b430e840B", - name: "Mirrored Facebook", - symbol: "MFB", - decimals: 18 - }, - { - chainId: 1, - address: "0x13B02c8dE71680e71F0820c996E4bE43c2F57d15", - name: "Mirrored Invesco QQ", - symbol: "MQQQ", - decimals: 18 - }, - { - chainId: 1, - address: "0x41BbEDd7286dAab5910a1f15d12CBda839852BD7", - name: "Mirrored Microsoft", - symbol: "MMSFT", - decimals: 18 - }, - { - chainId: 1, - address: "0x9d1555d8cB3C846Bb4f7D5B1B1080872c3166676", - name: "Mirrored iShares Si", - symbol: "MSLV", - decimals: 18 - }, - { - chainId: 1, - address: "0x21cA39943E91d704678F5D00b6616650F066fD63", - name: "Mirrored Tesla", - symbol: "MTSLA", - decimals: 18 - }, - { - chainId: 1, - address: "0xe82bbB62fA81d0701643d1675FB50ec52fD3Df92", - name: "DYDX Token", - symbol: "DYDX", - decimals: 18 - }, - { - chainId: 10, - address: "0xE405de8F52ba7559f9df3C368500B6E6ae6Cee49", - name: "sETH", - symbol: "Synth Ether", - decimals: 18 - }, - { - chainId: 10, - address: "0x298B9B95708152ff6968aafd889c6586e9169f1D", - name: "sBTC", - symbol: "Synth Bitcoin", - decimals: 18 - }, - { - chainId: 10, - address: "0xc5Db22719A06418028A40A9B5E9A7c02959D0d08", - name: "sLINK", - symbol: "Synth Link", - decimals: 18 - }, - { - chainId: 1, - address: "0x6B60eE11b73230045cF9095E6e43AE9Ea638e172", - name: "Shatner", - symbol: "SHAT", - decimals: 18 - }, - { - chainId: 1, - address: "0x7277a44D1325D81Ac58893002a1B40a41bea43fe", - name: "FAANG Index", - symbol: "FAANG", - decimals: 18 - }, - { - chainId: 1, - address: "0x76175599887730786bdA1545D0D7AcE8737fEBB1", - name: "ENS DAO", - symbol: "ENS", - decimals: 18 - }, - { - chainId: 1, - address: "0xa82AA729AE2F0d78e961D66db53949e27a9E866d", - name: "BMEX", - symbol: "BMEX", - decimals: 18 - } -]; -var UNSUPPORTED_TOKEN_LIST = { - name: name, - timestamp: timestamp, - version: version, - tags: tags, - logoURI: logoURI, - keywords: keywords, - tokens: tokens -}; + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + indexed: true, + internalType: 'address', + name: 'spender', + type: 'address', + }, + { + indexed: false, + internalType: 'uint256', + name: 'value', + type: 'uint256', + }, + ], + name: 'Approval', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'sender', + type: 'address', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount0', + type: 'uint256', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount1', + type: 'uint256', + }, + { + indexed: true, + internalType: 'address', + name: 'to', + type: 'address', + }, + ], + name: 'Burn', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'sender', + type: 'address', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount0', + type: 'uint256', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount1', + type: 'uint256', + }, + ], + name: 'Mint', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'sender', + type: 'address', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount0In', + type: 'uint256', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount1In', + type: 'uint256', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount0Out', + type: 'uint256', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount1Out', + type: 'uint256', + }, + { + indexed: true, + internalType: 'address', + name: 'to', + type: 'address', + }, + ], + name: 'Swap', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'uint112', + name: 'reserve0', + type: 'uint112', + }, + { + indexed: false, + internalType: 'uint112', + name: 'reserve1', + type: 'uint112', + }, + ], + name: 'Sync', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'from', + type: 'address', + }, + { + indexed: true, + internalType: 'address', + name: 'to', + type: 'address', + }, + { + indexed: false, + internalType: 'uint256', + name: 'value', + type: 'uint256', + }, + ], + name: 'Transfer', + type: 'event', + }, + { + constant: true, + inputs: [], + name: 'DOMAIN_SEPARATOR', + outputs: [ + { + internalType: 'bytes32', + name: '', + type: 'bytes32', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'MINIMUM_LIQUIDITY', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'pure', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'PERMIT_TYPEHASH', + outputs: [ + { + internalType: 'bytes32', + name: '', + type: 'bytes32', + }, + ], + payable: false, + stateMutability: 'pure', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + internalType: 'address', + name: 'spender', + type: 'address', + }, + ], + name: 'allowance', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'address', + name: 'spender', + type: 'address', + }, + { + internalType: 'uint256', + name: 'value', + type: 'uint256', + }, + ], + name: 'approve', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + ], + name: 'balanceOf', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'address', + name: 'to', + type: 'address', + }, + ], + name: 'burn', + outputs: [ + { + internalType: 'uint256', + name: 'amount0', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amount1', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'decimals', + outputs: [ + { + internalType: 'uint8', + name: '', + type: 'uint8', + }, + ], + payable: false, + stateMutability: 'pure', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'factory', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'getReserves', + outputs: [ + { + internalType: 'uint112', + name: 'reserve0', + type: 'uint112', + }, + { + internalType: 'uint112', + name: 'reserve1', + type: 'uint112', + }, + { + internalType: 'uint32', + name: 'blockTimestampLast', + type: 'uint32', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + name: 'initialize', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'kLast', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'address', + name: 'to', + type: 'address', + }, + ], + name: 'mint', + outputs: [ + { + internalType: 'uint256', + name: 'liquidity', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'name', + outputs: [ + { + internalType: 'string', + name: '', + type: 'string', + }, + ], + payable: false, + stateMutability: 'pure', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + ], + name: 'nonces', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + internalType: 'address', + name: 'spender', + type: 'address', + }, + { + internalType: 'uint256', + name: 'value', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + { + internalType: 'uint8', + name: 'v', + type: 'uint8', + }, + { + internalType: 'bytes32', + name: 'r', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 's', + type: 'bytes32', + }, + ], + name: 'permit', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'price0CumulativeLast', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'price1CumulativeLast', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'address', + name: 'to', + type: 'address', + }, + ], + name: 'skim', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'uint256', + name: 'amount0Out', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amount1Out', + type: 'uint256', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'bytes', + name: 'data', + type: 'bytes', + }, + ], + name: 'swap', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'symbol', + outputs: [ + { + internalType: 'string', + name: '', + type: 'string', + }, + ], + payable: false, + stateMutability: 'pure', + type: 'function', + }, + { + constant: false, + inputs: [], + name: 'sync', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'token0', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'token1', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'totalSupply', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'value', + type: 'uint256', + }, + ], + name: 'transfer', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'address', + name: 'from', + type: 'address', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'value', + type: 'uint256', + }, + ], + name: 'transferFrom', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, +] -function useAllLists() { - return useAppSelector(function (state) { return state.lists.byUrl; }); -} -/** - * Combine the tokens in map2 with the tokens on map1, where tokens on map1 take precedence - * @param map1 the base token map - * @param map2 the map of additioanl tokens to add to the base map - */ -function combineMaps(map1, map2) { - var chainIds = Object.keys(Object.keys(map1) - .concat(Object.keys(map2)) - .reduce(function (memo, value) { - memo[value] = true; - return memo; - }, {})).map(function (id) { return parseInt(id); }); - return chainIds.reduce(function (memo, chainId) { - memo[chainId] = __assign(__assign({}, map2[chainId]), map1[chainId]); - return memo; - }, {}); -} -// merge tokens contained within lists from urls -function useCombinedTokenMapFromUrls(urls) { - var lists = useAllLists(); - return useMemo(function () { - if (!urls) - return {}; - return (urls - .slice() - // sort by priority so top priority goes last - .sort(sortByListPriority) - .reduce(function (allTokens, currentUrl) { - var _a; - var current = (_a = lists[currentUrl]) === null || _a === void 0 ? void 0 : _a.current; - if (!current) - return allTokens; - try { - return combineMaps(allTokens, tokensToChainTokenMap(current)); - } - catch (error) { - console.error('Could not show token list due to error', error); - return allTokens; - } - }, {})); - }, [lists, urls]); -} -// filter out unsupported lists -function useActiveListUrls() { - var activeListUrls = useAppSelector(function (state) { return state.lists.activeListUrls; }); - return useMemo(function () { return activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.filter(function (url) { return !UNSUPPORTED_LIST_URLS.includes(url); }); }, [activeListUrls]); -} -function useInactiveListUrls() { - var lists = useAllLists(); - var allActiveListUrls = useActiveListUrls(); - return useMemo(function () { return Object.keys(lists).filter(function (url) { return !(allActiveListUrls === null || allActiveListUrls === void 0 ? void 0 : allActiveListUrls.includes(url)) && !UNSUPPORTED_LIST_URLS.includes(url); }); }, [lists, allActiveListUrls]); -} -// get all the tokens from active lists, combine with local default tokens -function useCombinedActiveList() { - var activeListUrls = useActiveListUrls(); - var activeTokens = useCombinedTokenMapFromUrls(activeListUrls); - return activeTokens; -} -// list of tokens not supported on interface for various reasons, used to show warnings and prevent swaps and adds -function useUnsupportedTokenList() { - // get hard-coded broken tokens - var brokenListMap = useMemo(function () { return tokensToChainTokenMap(BROKEN_LIST); }, []); - // get hard-coded list of unsupported tokens - var localUnsupportedListMap = useMemo(function () { return tokensToChainTokenMap(UNSUPPORTED_TOKEN_LIST); }, []); - // get dynamic list of unsupported tokens - var loadedUnsupportedListMap = useCombinedTokenMapFromUrls(UNSUPPORTED_LIST_URLS); - // format into one token address map - return useMemo(function () { return combineMaps(brokenListMap, combineMaps(localUnsupportedListMap, loadedUnsupportedListMap)); }, [brokenListMap, localUnsupportedListMap, loadedUnsupportedListMap]); -} -function useIsListActive(url) { - var activeListUrls = useActiveListUrls(); - return Boolean(activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(url)); -} +var abi$3 = [ + { + inputs: [], + name: 'WETH', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'pure', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'tokenA', + type: 'address', + }, + { + internalType: 'address', + name: 'tokenB', + type: 'address', + }, + { + internalType: 'uint256', + name: 'amountADesired', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountBDesired', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountAMin', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountBMin', + type: 'uint256', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'addLiquidity', + outputs: [ + { + internalType: 'uint256', + name: 'amountA', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountB', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'liquidity', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'token', + type: 'address', + }, + { + internalType: 'uint256', + name: 'amountTokenDesired', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountTokenMin', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountETHMin', + type: 'uint256', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'addLiquidityETH', + outputs: [ + { + internalType: 'uint256', + name: 'amountToken', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountETH', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'liquidity', + type: 'uint256', + }, + ], + stateMutability: 'payable', + type: 'function', + }, + { + inputs: [], + name: 'factory', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'pure', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountOut', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'reserveIn', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'reserveOut', + type: 'uint256', + }, + ], + name: 'getAmountIn', + outputs: [ + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + ], + stateMutability: 'pure', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'reserveIn', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'reserveOut', + type: 'uint256', + }, + ], + name: 'getAmountOut', + outputs: [ + { + internalType: 'uint256', + name: 'amountOut', + type: 'uint256', + }, + ], + stateMutability: 'pure', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountOut', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + ], + name: 'getAmountsIn', + outputs: [ + { + internalType: 'uint256[]', + name: 'amounts', + type: 'uint256[]', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + ], + name: 'getAmountsOut', + outputs: [ + { + internalType: 'uint256[]', + name: 'amounts', + type: 'uint256[]', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountA', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'reserveA', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'reserveB', + type: 'uint256', + }, + ], + name: 'quote', + outputs: [ + { + internalType: 'uint256', + name: 'amountB', + type: 'uint256', + }, + ], + stateMutability: 'pure', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'tokenA', + type: 'address', + }, + { + internalType: 'address', + name: 'tokenB', + type: 'address', + }, + { + internalType: 'uint256', + name: 'liquidity', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountAMin', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountBMin', + type: 'uint256', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'removeLiquidity', + outputs: [ + { + internalType: 'uint256', + name: 'amountA', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountB', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'token', + type: 'address', + }, + { + internalType: 'uint256', + name: 'liquidity', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountTokenMin', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountETHMin', + type: 'uint256', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'removeLiquidityETH', + outputs: [ + { + internalType: 'uint256', + name: 'amountToken', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountETH', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'token', + type: 'address', + }, + { + internalType: 'uint256', + name: 'liquidity', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountTokenMin', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountETHMin', + type: 'uint256', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'removeLiquidityETHSupportingFeeOnTransferTokens', + outputs: [ + { + internalType: 'uint256', + name: 'amountETH', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'token', + type: 'address', + }, + { + internalType: 'uint256', + name: 'liquidity', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountTokenMin', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountETHMin', + type: 'uint256', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + { + internalType: 'bool', + name: 'approveMax', + type: 'bool', + }, + { + internalType: 'uint8', + name: 'v', + type: 'uint8', + }, + { + internalType: 'bytes32', + name: 'r', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 's', + type: 'bytes32', + }, + ], + name: 'removeLiquidityETHWithPermit', + outputs: [ + { + internalType: 'uint256', + name: 'amountToken', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountETH', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'token', + type: 'address', + }, + { + internalType: 'uint256', + name: 'liquidity', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountTokenMin', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountETHMin', + type: 'uint256', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + { + internalType: 'bool', + name: 'approveMax', + type: 'bool', + }, + { + internalType: 'uint8', + name: 'v', + type: 'uint8', + }, + { + internalType: 'bytes32', + name: 'r', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 's', + type: 'bytes32', + }, + ], + name: 'removeLiquidityETHWithPermitSupportingFeeOnTransferTokens', + outputs: [ + { + internalType: 'uint256', + name: 'amountETH', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'tokenA', + type: 'address', + }, + { + internalType: 'address', + name: 'tokenB', + type: 'address', + }, + { + internalType: 'uint256', + name: 'liquidity', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountAMin', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountBMin', + type: 'uint256', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + { + internalType: 'bool', + name: 'approveMax', + type: 'bool', + }, + { + internalType: 'uint8', + name: 'v', + type: 'uint8', + }, + { + internalType: 'bytes32', + name: 'r', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 's', + type: 'bytes32', + }, + ], + name: 'removeLiquidityWithPermit', + outputs: [ + { + internalType: 'uint256', + name: 'amountA', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountB', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountOut', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'swapETHForExactTokens', + outputs: [ + { + internalType: 'uint256[]', + name: 'amounts', + type: 'uint256[]', + }, + ], + stateMutability: 'payable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountOutMin', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'swapExactETHForTokens', + outputs: [ + { + internalType: 'uint256[]', + name: 'amounts', + type: 'uint256[]', + }, + ], + stateMutability: 'payable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountOutMin', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'swapExactETHForTokensSupportingFeeOnTransferTokens', + outputs: [], + stateMutability: 'payable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountOutMin', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'swapExactTokensForETH', + outputs: [ + { + internalType: 'uint256[]', + name: 'amounts', + type: 'uint256[]', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountOutMin', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'swapExactTokensForETHSupportingFeeOnTransferTokens', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountOutMin', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'swapExactTokensForTokens', + outputs: [ + { + internalType: 'uint256[]', + name: 'amounts', + type: 'uint256[]', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountOutMin', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'swapExactTokensForTokensSupportingFeeOnTransferTokens', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountOut', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountInMax', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'swapTokensForExactETH', + outputs: [ + { + internalType: 'uint256[]', + name: 'amounts', + type: 'uint256[]', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountOut', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountInMax', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'swapTokensForExactTokens', + outputs: [ + { + internalType: 'uint256[]', + name: 'amounts', + type: 'uint256[]', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, +] -// reduce token map into standard address <-> Token mapping, optionally include user added tokens -function useTokensFromMap(tokenMap, includeUserAdded) { - var chainId = useActiveWeb3React().chainId; - var userAddedTokens = useUserAddedTokens(); - return useMemo(function () { - var _a; - if (!chainId) - return {}; - // reduce to just tokens - var mapWithoutUrls = Object.keys((_a = tokenMap[chainId]) !== null && _a !== void 0 ? _a : {}).reduce(function (newMap, address) { - newMap[address] = tokenMap[chainId][address].token; - return newMap; - }, {}); - if (includeUserAdded) { - return (userAddedTokens - // reduce into all ALL_TOKENS filtered by the current chain - .reduce(function (tokenMap, token) { - tokenMap[token.address] = token; - return tokenMap; - }, __assign({}, mapWithoutUrls))); - } - return mapWithoutUrls; - }, [chainId, userAddedTokens, tokenMap, includeUserAdded]); -} -function useAllTokens() { - var allTokens = useCombinedActiveList(); - return useTokensFromMap(allTokens, true); -} -function useUnsupportedTokens() { - var chainId = useActiveWeb3React().chainId; - var listsByUrl = useAllLists(); - var unsupportedTokensMap = useUnsupportedTokenList(); - var unsupportedTokens = useTokensFromMap(unsupportedTokensMap, false); - // checks the default L2 lists to see if `bridgeInfo` has an L1 address value that is unsupported - var l2InferredBlockedTokens = useMemo(function () { - if (!chainId || !L2_CHAIN_IDS.includes(chainId)) { - return {}; - } - if (!listsByUrl) { - return {}; - } - var listUrl = CHAIN_INFO[chainId].defaultListUrl; - var list = listsByUrl[listUrl].current; - if (!list) { - return {}; - } - var unsupportedSet = new Set(Object.keys(unsupportedTokens)); - return list.tokens.reduce(function (acc, tokenInfo) { - var _a; - var _b; - var bridgeInfo = (_b = tokenInfo.extensions) === null || _b === void 0 ? void 0 : _b.bridgeInfo; - if (bridgeInfo && - bridgeInfo[SupportedChainId.MAINNET] && - bridgeInfo[SupportedChainId.MAINNET].tokenAddress && - unsupportedSet.has(bridgeInfo[SupportedChainId.MAINNET].tokenAddress)) { - var address = bridgeInfo[SupportedChainId.MAINNET].tokenAddress; - // don't rely on decimals--it's possible that a token could be bridged w/ different decimals on the L2 - return __assign(__assign({}, acc), (_a = {}, _a[address] = new Token(SupportedChainId.MAINNET, address, tokenInfo.decimals), _a)); - } - return acc; - }, {}); - }, [chainId, listsByUrl, unsupportedTokens]); - return __assign(__assign({}, unsupportedTokens), l2InferredBlockedTokens); -} -function useSearchInactiveTokenLists(search, minResults) { - if (minResults === void 0) { minResults = 10; } - var lists = useAllLists(); - var inactiveUrls = useInactiveListUrls(); - var chainId = useActiveWeb3React().chainId; - var activeTokens = useAllTokens(); - return useMemo(function () { - var e_1, _a, e_2, _b; - if (!search || search.trim().length === 0) - return []; - var tokenFilter = getTokenFilter(search); - var result = []; - var addressSet = {}; - try { - for (var inactiveUrls_1 = __values(inactiveUrls), inactiveUrls_1_1 = inactiveUrls_1.next(); !inactiveUrls_1_1.done; inactiveUrls_1_1 = inactiveUrls_1.next()) { - var url = inactiveUrls_1_1.value; - var list = lists[url].current; - if (!list) - continue; - try { - for (var _c = (e_2 = void 0, __values(list.tokens)), _d = _c.next(); !_d.done; _d = _c.next()) { - var tokenInfo = _d.value; - if (tokenInfo.chainId === chainId && tokenFilter(tokenInfo)) { - var wrapped = new WrappedTokenInfo(tokenInfo, list); - if (!(wrapped.address in activeTokens) && !addressSet[wrapped.address]) { - addressSet[wrapped.address] = true; - result.push(wrapped); - if (result.length >= minResults) - return result; - } - } - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (_d && !_d.done && (_b = _c.return)) _b.call(_c); - } - finally { if (e_2) throw e_2.error; } - } - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (inactiveUrls_1_1 && !inactiveUrls_1_1.done && (_a = inactiveUrls_1.return)) _a.call(inactiveUrls_1); - } - finally { if (e_1) throw e_1.error; } - } - return result; - }, [activeTokens, chainId, inactiveUrls, lists, minResults, search]); -} -function useIsTokenActive(token) { - var activeTokens = useAllTokens(); - if (!activeTokens || !token) { - return false; - } - return !!activeTokens[token.address]; -} -// Check if currency is included in custom list from user storage -function useIsUserAddedToken(currency) { - var userAddedTokens = useUserAddedTokens(); - if (!currency) { - return false; - } - return !!userAddedTokens.find(function (token) { return currency.equals(token); }); -} -// undefined if invalid or does not exist -// null if loading or null was passed -// otherwise returns the token -function useToken(tokenAddress) { - var tokens = useAllTokens(); - return useTokenFromMap(tokens, tokenAddress); -} -function useCurrency(currencyId) { - var tokens = useAllTokens(); - return useCurrencyFromMap(tokens, currencyId); -} +var abi$2 = [ + { + inputs: [ + { + internalType: 'address', + name: '_factory', + type: 'address', + }, + { + internalType: 'address', + name: '_WETH9', + type: 'address', + }, + ], + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + inputs: [], + name: 'WETH9', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'factory', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes', + name: 'path', + type: 'bytes', + }, + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + ], + name: 'quoteExactInput', + outputs: [ + { + internalType: 'uint256', + name: 'amountOut', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'tokenIn', + type: 'address', + }, + { + internalType: 'address', + name: 'tokenOut', + type: 'address', + }, + { + internalType: 'uint24', + name: 'fee', + type: 'uint24', + }, + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + { + internalType: 'uint160', + name: 'sqrtPriceLimitX96', + type: 'uint160', + }, + ], + name: 'quoteExactInputSingle', + outputs: [ + { + internalType: 'uint256', + name: 'amountOut', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes', + name: 'path', + type: 'bytes', + }, + { + internalType: 'uint256', + name: 'amountOut', + type: 'uint256', + }, + ], + name: 'quoteExactOutput', + outputs: [ + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'tokenIn', + type: 'address', + }, + { + internalType: 'address', + name: 'tokenOut', + type: 'address', + }, + { + internalType: 'uint24', + name: 'fee', + type: 'uint24', + }, + { + internalType: 'uint256', + name: 'amountOut', + type: 'uint256', + }, + { + internalType: 'uint160', + name: 'sqrtPriceLimitX96', + type: 'uint160', + }, + ], + name: 'quoteExactOutputSingle', + outputs: [ + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'int256', + name: 'amount0Delta', + type: 'int256', + }, + { + internalType: 'int256', + name: 'amount1Delta', + type: 'int256', + }, + { + internalType: 'bytes', + name: 'path', + type: 'bytes', + }, + ], + name: 'uniswapV3SwapCallback', + outputs: [], + stateMutability: 'view', + type: 'function', + }, +] + +var abi$1 = [ + { + inputs: [], + name: 'getCurrentBlockTimestamp', + outputs: [ + { + internalType: 'uint256', + name: 'timestamp', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'addr', + type: 'address', + }, + ], + name: 'getEthBalance', + outputs: [ + { + internalType: 'uint256', + name: 'balance', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + components: [ + { + internalType: 'address', + name: 'target', + type: 'address', + }, + { + internalType: 'uint256', + name: 'gasLimit', + type: 'uint256', + }, + { + internalType: 'bytes', + name: 'callData', + type: 'bytes', + }, + ], + internalType: 'struct UniswapInterfaceMulticall.Call[]', + name: 'calls', + type: 'tuple[]', + }, + ], + name: 'multicall', + outputs: [ + { + internalType: 'uint256', + name: 'blockNumber', + type: 'uint256', + }, + { + components: [ + { + internalType: 'bool', + name: 'success', + type: 'bool', + }, + { + internalType: 'uint256', + name: 'gasUsed', + type: 'uint256', + }, + { + internalType: 'bytes', + name: 'returnData', + type: 'bytes', + }, + ], + internalType: 'struct UniswapInterfaceMulticall.Result[]', + name: 'returnData', + type: 'tuple[]', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, +] + +var ARGENT_WALLET_DETECTOR_ABI = [ + { + inputs: [ + { + internalType: 'bytes32[]', + name: '_codes', + type: 'bytes32[]', + }, + { + internalType: 'address[]', + name: '_implementations', + type: 'address[]', + }, + ], + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'code', + type: 'bytes32', + }, + ], + name: 'CodeAdded', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'implementation', + type: 'address', + }, + ], + name: 'ImplementationAdded', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: '_newOwner', + type: 'address', + }, + ], + name: 'OwnerChanged', + type: 'event', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: '', + type: 'bytes32', + }, + ], + name: 'acceptedCodes', + outputs: [ + { + internalType: 'bool', + name: 'exists', + type: 'bool', + }, + { + internalType: 'uint128', + name: 'index', + type: 'uint128', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + name: 'acceptedImplementations', + outputs: [ + { + internalType: 'bool', + name: 'exists', + type: 'bool', + }, + { + internalType: 'uint128', + name: 'index', + type: 'uint128', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: '_code', + type: 'bytes32', + }, + ], + name: 'addCode', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: '_argentWallet', + type: 'address', + }, + ], + name: 'addCodeAndImplementationFromWallet', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: '_impl', + type: 'address', + }, + ], + name: 'addImplementation', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: '_newOwner', + type: 'address', + }, + ], + name: 'changeOwner', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [], + name: 'getCodes', + outputs: [ + { + internalType: 'bytes32[]', + name: '', + type: 'bytes32[]', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'getImplementations', + outputs: [ + { + internalType: 'address[]', + name: '', + type: 'address[]', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: '_wallet', + type: 'address', + }, + ], + name: 'isArgentWallet', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'owner', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, +] + +var EIP_2612 = [ + { + constant: true, + inputs: [ + { + name: 'owner', + type: 'address', + }, + ], + name: 'nonces', + outputs: [ + { + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'DOMAIN_SEPARATOR', + outputs: [ + { + name: '', + type: 'bytes32', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, +] + +var ENS_PUBLIC_RESOLVER_ABI = [ + { + inputs: [ + { + internalType: 'contract ENS', + name: '_ens', + type: 'address', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: true, + internalType: 'uint256', + name: 'contentType', + type: 'uint256', + }, + ], + name: 'ABIChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'address', + name: 'a', + type: 'address', + }, + ], + name: 'AddrChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'uint256', + name: 'coinType', + type: 'uint256', + }, + { + indexed: false, + internalType: 'bytes', + name: 'newAddress', + type: 'bytes', + }, + ], + name: 'AddressChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: true, + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + indexed: true, + internalType: 'address', + name: 'target', + type: 'address', + }, + { + indexed: false, + internalType: 'bool', + name: 'isAuthorised', + type: 'bool', + }, + ], + name: 'AuthorisationChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'bytes', + name: 'hash', + type: 'bytes', + }, + ], + name: 'ContenthashChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'bytes', + name: 'name', + type: 'bytes', + }, + { + indexed: false, + internalType: 'uint16', + name: 'resource', + type: 'uint16', + }, + { + indexed: false, + internalType: 'bytes', + name: 'record', + type: 'bytes', + }, + ], + name: 'DNSRecordChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'bytes', + name: 'name', + type: 'bytes', + }, + { + indexed: false, + internalType: 'uint16', + name: 'resource', + type: 'uint16', + }, + ], + name: 'DNSRecordDeleted', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'DNSZoneCleared', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: true, + internalType: 'bytes4', + name: 'interfaceID', + type: 'bytes4', + }, + { + indexed: false, + internalType: 'address', + name: 'implementer', + type: 'address', + }, + ], + name: 'InterfaceChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'string', + name: 'name', + type: 'string', + }, + ], + name: 'NameChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'bytes32', + name: 'x', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'bytes32', + name: 'y', + type: 'bytes32', + }, + ], + name: 'PubkeyChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: true, + internalType: 'string', + name: 'indexedKey', + type: 'string', + }, + { + indexed: false, + internalType: 'string', + name: 'key', + type: 'string', + }, + ], + name: 'TextChanged', + type: 'event', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'uint256', + name: 'contentTypes', + type: 'uint256', + }, + ], + name: 'ABI', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + { + internalType: 'bytes', + name: '', + type: 'bytes', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'addr', + outputs: [ + { + internalType: 'address payable', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: '', + type: 'bytes32', + }, + { + internalType: 'address', + name: '', + type: 'address', + }, + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + name: 'authorisations', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'clearDNSZone', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'contenthash', + outputs: [ + { + internalType: 'bytes', + name: '', + type: 'bytes', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 'name', + type: 'bytes32', + }, + { + internalType: 'uint16', + name: 'resource', + type: 'uint16', + }, + ], + name: 'dnsRecord', + outputs: [ + { + internalType: 'bytes', + name: '', + type: 'bytes', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 'name', + type: 'bytes32', + }, + ], + name: 'hasDNSRecords', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes4', + name: 'interfaceID', + type: 'bytes4', + }, + ], + name: 'interfaceImplementer', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'name', + outputs: [ + { + internalType: 'string', + name: '', + type: 'string', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'pubkey', + outputs: [ + { + internalType: 'bytes32', + name: 'x', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 'y', + type: 'bytes32', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'uint256', + name: 'contentType', + type: 'uint256', + }, + { + internalType: 'bytes', + name: 'data', + type: 'bytes', + }, + ], + name: 'setABI', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'uint256', + name: 'coinType', + type: 'uint256', + }, + { + internalType: 'bytes', + name: 'a', + type: 'bytes', + }, + ], + name: 'setAddr', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'address', + name: 'a', + type: 'address', + }, + ], + name: 'setAddr', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'address', + name: 'target', + type: 'address', + }, + { + internalType: 'bool', + name: 'isAuthorised', + type: 'bool', + }, + ], + name: 'setAuthorisation', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes', + name: 'hash', + type: 'bytes', + }, + ], + name: 'setContenthash', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes', + name: 'data', + type: 'bytes', + }, + ], + name: 'setDNSRecords', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes4', + name: 'interfaceID', + type: 'bytes4', + }, + { + internalType: 'address', + name: 'implementer', + type: 'address', + }, + ], + name: 'setInterface', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'string', + name: 'name', + type: 'string', + }, + ], + name: 'setName', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 'x', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 'y', + type: 'bytes32', + }, + ], + name: 'setPubkey', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'string', + name: 'key', + type: 'string', + }, + { + internalType: 'string', + name: 'value', + type: 'string', + }, + ], + name: 'setText', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes4', + name: 'interfaceID', + type: 'bytes4', + }, + ], + name: 'supportsInterface', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'pure', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'string', + name: 'key', + type: 'string', + }, + ], + name: 'text', + outputs: [ + { + internalType: 'string', + name: '', + type: 'string', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, +] + +var ENS_ABI = [ + { + inputs: [ + { + internalType: 'contract ENS', + name: '_old', + type: 'address', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + indexed: true, + internalType: 'address', + name: 'operator', + type: 'address', + }, + { + indexed: false, + internalType: 'bool', + name: 'approved', + type: 'bool', + }, + ], + name: 'ApprovalForAll', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: true, + internalType: 'bytes32', + name: 'label', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'address', + name: 'owner', + type: 'address', + }, + ], + name: 'NewOwner', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'address', + name: 'resolver', + type: 'address', + }, + ], + name: 'NewResolver', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'uint64', + name: 'ttl', + type: 'uint64', + }, + ], + name: 'NewTTL', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'address', + name: 'owner', + type: 'address', + }, + ], + name: 'Transfer', + type: 'event', + }, + { + constant: true, + inputs: [ + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + internalType: 'address', + name: 'operator', + type: 'address', + }, + ], + name: 'isApprovedForAll', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'old', + outputs: [ + { + internalType: 'contract ENS', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'owner', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'recordExists', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'resolver', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'address', + name: 'operator', + type: 'address', + }, + { + internalType: 'bool', + name: 'approved', + type: 'bool', + }, + ], + name: 'setApprovalForAll', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + ], + name: 'setOwner', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + internalType: 'address', + name: 'resolver', + type: 'address', + }, + { + internalType: 'uint64', + name: 'ttl', + type: 'uint64', + }, + ], + name: 'setRecord', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'address', + name: 'resolver', + type: 'address', + }, + ], + name: 'setResolver', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 'label', + type: 'bytes32', + }, + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + ], + name: 'setSubnodeOwner', + outputs: [ + { + internalType: 'bytes32', + name: '', + type: 'bytes32', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 'label', + type: 'bytes32', + }, + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + internalType: 'address', + name: 'resolver', + type: 'address', + }, + { + internalType: 'uint64', + name: 'ttl', + type: 'uint64', + }, + ], + name: 'setSubnodeRecord', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'uint64', + name: 'ttl', + type: 'uint64', + }, + ], + name: 'setTTL', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'ttl', + outputs: [ + { + internalType: 'uint64', + name: '', + type: 'uint64', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, +] + +var ERC20ABI = [ + { + constant: true, + inputs: [], + name: 'name', + outputs: [ + { + name: '', + type: 'string', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + name: '_spender', + type: 'address', + }, + { + name: '_value', + type: 'uint256', + }, + ], + name: 'approve', + outputs: [ + { + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'totalSupply', + outputs: [ + { + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + name: '_from', + type: 'address', + }, + { + name: '_to', + type: 'address', + }, + { + name: '_value', + type: 'uint256', + }, + ], + name: 'transferFrom', + outputs: [ + { + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'decimals', + outputs: [ + { + name: '', + type: 'uint8', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + name: '_owner', + type: 'address', + }, + ], + name: 'balanceOf', + outputs: [ + { + name: 'balance', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'symbol', + outputs: [ + { + name: '', + type: 'string', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + name: '_to', + type: 'address', + }, + { + name: '_value', + type: 'uint256', + }, + ], + name: 'transfer', + outputs: [ + { + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [ + { + name: '_owner', + type: 'address', + }, + { + name: '_spender', + type: 'address', + }, + ], + name: 'allowance', + outputs: [ + { + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + payable: true, + stateMutability: 'payable', + type: 'fallback', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: 'owner', + type: 'address', + }, + { + indexed: true, + name: 'spender', + type: 'address', + }, + { + indexed: false, + name: 'value', + type: 'uint256', + }, + ], + name: 'Approval', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: 'from', + type: 'address', + }, + { + indexed: true, + name: 'to', + type: 'address', + }, + { + indexed: false, + name: 'value', + type: 'uint256', + }, + ], + name: 'Transfer', + type: 'event', + }, +] -function serializeToken(token) { - return { - chainId: token.chainId, - address: token.address, - decimals: token.decimals, - symbol: token.symbol, - name: token.name, - }; -} -function deserializeToken(serializedToken) { - return new Token(serializedToken.chainId, serializedToken.address, serializedToken.decimals, serializedToken.symbol, serializedToken.name); -} -function useIsDarkMode() { - var _a = useAppSelector(function (_a) { - var _b = _a.user, matchesDarkMode = _b.matchesDarkMode, userDarkMode = _b.userDarkMode; - return ({ - userDarkMode: userDarkMode, - matchesDarkMode: matchesDarkMode, - }); - }, shallowEqual), userDarkMode = _a.userDarkMode, matchesDarkMode = _a.matchesDarkMode; - return userDarkMode === null ? matchesDarkMode : userDarkMode; -} -function useDarkModeManager() { - var dispatch = useAppDispatch(); - var darkMode = useIsDarkMode(); - var toggleSetDarkMode = useCallback(function () { - dispatch(updateUserDarkMode({ userDarkMode: !darkMode })); - }, [darkMode, dispatch]); - return [darkMode, toggleSetDarkMode]; -} -function useUserLocale() { - return useAppSelector(function (state) { return state.user.userLocale; }); -} -function useUserLocaleManager() { - var dispatch = useAppDispatch(); - var locale = useUserLocale(); - var setLocale = useCallback(function (newLocale) { - dispatch(updateUserLocale({ userLocale: newLocale })); - }, [dispatch]); - return [locale, setLocale]; -} -function useIsExpertMode() { - return useAppSelector(function (state) { return state.user.userExpertMode; }); -} -function useExpertModeManager() { - var dispatch = useAppDispatch(); - var expertMode = useIsExpertMode(); - var toggleSetExpertMode = useCallback(function () { - dispatch(updateUserExpertMode({ userExpertMode: !expertMode })); - }, [expertMode, dispatch]); - return [expertMode, toggleSetExpertMode]; -} -function useShowSurveyPopup() { - var dispatch = useAppDispatch(); - var showSurveyPopup = useAppSelector(function (state) { return state.user.showSurveyPopup; }); - var toggleShowSurveyPopup = useCallback(function (showPopup) { - dispatch(updateShowSurveyPopup({ showSurveyPopup: showPopup })); - }, [dispatch]); - return [showSurveyPopup, toggleShowSurveyPopup]; -} -function useClientSideRouter() { - var dispatch = useAppDispatch(); - var clientSideRouter = useAppSelector(function (state) { return Boolean(state.user.userClientSideRouter); }); - var setClientSideRouter = useCallback(function (newClientSideRouter) { - dispatch(updateUserClientSideRouter({ userClientSideRouter: newClientSideRouter })); - }, [dispatch]); - return [clientSideRouter, setClientSideRouter]; -} -function useSetUserSlippageTolerance() { - var dispatch = useAppDispatch(); - return useCallback(function (userSlippageTolerance) { - var value; - try { - value = - userSlippageTolerance === 'auto' ? 'auto' : JSBI.toNumber(userSlippageTolerance.multiply(10000).quotient); - } - catch (error) { - value = 'auto'; - } - dispatch(updateUserSlippageTolerance({ - userSlippageTolerance: value, - })); - }, [dispatch]); -} -/** - * Return the user's slippage tolerance, from the redux store, and a function to update the slippage tolerance - */ -function useUserSlippageTolerance() { - var userSlippageTolerance = useAppSelector(function (state) { - return state.user.userSlippageTolerance; - }); - return useMemo(function () { return (userSlippageTolerance === 'auto' ? 'auto' : new Percent(userSlippageTolerance, 10000)); }, [userSlippageTolerance]); -} -/** - * Same as above but replaces the auto with a default value - * @param defaultSlippageTolerance the default value to replace auto with - */ -function useUserSlippageToleranceWithDefault(defaultSlippageTolerance) { - var allowedSlippage = useUserSlippageTolerance(); - return useMemo(function () { return (allowedSlippage === 'auto' ? defaultSlippageTolerance : allowedSlippage); }, [allowedSlippage, defaultSlippageTolerance]); -} -function useUserTransactionTTL() { - var chainId = useActiveWeb3React().chainId; - var dispatch = useAppDispatch(); - var userDeadline = useAppSelector(function (state) { return state.user.userDeadline; }); - var onL2 = Boolean(chainId && L2_CHAIN_IDS.includes(chainId)); - var deadline = onL2 ? L2_DEADLINE_FROM_NOW : userDeadline; - var setUserDeadline = useCallback(function (userDeadline) { - dispatch(updateUserDeadline({ userDeadline: userDeadline })); - }, [dispatch]); - return [deadline, setUserDeadline]; -} -function useAddUserToken() { - var dispatch = useAppDispatch(); - return useCallback(function (token) { - dispatch(addSerializedToken({ serializedToken: serializeToken(token) })); - }, [dispatch]); -} -function useRemoveUserAddedToken() { - var dispatch = useAppDispatch(); - return useCallback(function (chainId, address) { - dispatch(removeSerializedToken({ chainId: chainId, address: address })); - }, [dispatch]); -} -function useUserAddedTokens() { - var chainId = useActiveWeb3React().chainId; - var serializedTokensMap = useAppSelector(function (_a) { - var tokens = _a.user.tokens; - return tokens; - }); - return useMemo(function () { - if (!chainId) - return []; - var tokenMap = (serializedTokensMap === null || serializedTokensMap === void 0 ? void 0 : serializedTokensMap[chainId]) - ? Object.values(serializedTokensMap[chainId]).map(deserializeToken) - : []; - return tokenMap; - }, [serializedTokensMap, chainId]); -} -function useURLWarningVisible() { - return useAppSelector(function (state) { return state.user.URLWarningVisible; }); -} - -var EXPLORER_HOSTNAMES = { - 'etherscan.io': true, - 'ropsten.etherscan.io': true, - 'rinkeby.etherscan.io': true, - 'kovan.etherscan.io': true, - 'goerli.etherscan.io': true, - 'optimistic.etherscan.io': true, - 'kovan-optimistic.etherscan.io': true, - 'rinkeby-explorer.arbitrum.io': true, - 'arbiscan.io': true, -}; -/** - * Returns the anonymized version of the given href, i.e. one that does not leak user information - * @param href the link to anonymize, i.e. remove any personal data from - * @return string anonymized version of the given href - */ -function anonymizeLink(href) { - try { - var url = new URL(href); - if (EXPLORER_HOSTNAMES[url.hostname]) { - var pathPieces = url.pathname.split('/'); - var anonymizedPath = pathPieces.map(function (pc) { return (/0x[a-fA-F0-9]+/.test(pc) ? '***' : pc); }).join('/'); - return url.protocol + "//" + url.hostname + anonymizedPath; - } - return href; - } - catch (error) { - return href; - } -} +var ERC20_BYTES32_ABI = [ + { + constant: true, + inputs: [], + name: 'name', + outputs: [ + { + name: '', + type: 'bytes32', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'symbol', + outputs: [ + { + name: '', + type: 'bytes32', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, +] -var ButtonText = styled.button(templateObject_1$1l || (templateObject_1$1l = __makeTemplateObject(["\n outline: none;\n border: none;\n font-size: inherit;\n padding: 0;\n margin: 0;\n background: none;\n cursor: pointer;\n\n :hover {\n opacity: 0.7;\n }\n\n :focus {\n text-decoration: underline;\n }\n"], ["\n outline: none;\n border: none;\n font-size: inherit;\n padding: 0;\n margin: 0;\n background: none;\n cursor: pointer;\n\n :hover {\n opacity: 0.7;\n }\n\n :focus {\n text-decoration: underline;\n }\n"]))); -var CloseIcon$2 = styled(X)(templateObject_2$$ || (templateObject_2$$ = __makeTemplateObject(["\n cursor: pointer;\n"], ["\n cursor: pointer;\n" - // for wrapper react feather icons -]))); -// for wrapper react feather icons -var IconWrapper$4 = styled.div(templateObject_3$S || (templateObject_3$S = __makeTemplateObject(["\n display: flex;\n align-items: center;\n justify-content: center;\n width: ", ";\n height: ", ";\n margin-right: ", ";\n margin-left: ", ";\n & > * {\n stroke: ", ";\n }\n"], ["\n display: flex;\n align-items: center;\n justify-content: center;\n width: ", ";\n height: ", ";\n margin-right: ", ";\n margin-left: ", ";\n & > * {\n stroke: ", ";\n }\n" - // A button that triggers some onClick result, but looks like a link. -])), function (_a) { - var size = _a.size; - return size !== null && size !== void 0 ? size : '20px'; -}, function (_a) { - var size = _a.size; - return size !== null && size !== void 0 ? size : '20px'; -}, function (_a) { - var marginRight = _a.marginRight; - return marginRight !== null && marginRight !== void 0 ? marginRight : 0; -}, function (_a) { - var marginLeft = _a.marginLeft; - return marginLeft !== null && marginLeft !== void 0 ? marginLeft : 0; -}, function (_a) { - var theme = _a.theme, stroke = _a.stroke; - return stroke !== null && stroke !== void 0 ? stroke : theme.blue1; -}); -// A button that triggers some onClick result, but looks like a link. -var LinkStyledButton = styled.button(templateObject_4$G || (templateObject_4$G = __makeTemplateObject(["\n border: none;\n text-decoration: none;\n background: none;\n\n cursor: ", ";\n color: ", ";\n font-weight: 500;\n\n :hover {\n text-decoration: ", ";\n }\n\n :focus {\n outline: none;\n text-decoration: ", ";\n }\n\n :active {\n text-decoration: none;\n }\n"], ["\n border: none;\n text-decoration: none;\n background: none;\n\n cursor: ", ";\n color: ", ";\n font-weight: 500;\n\n :hover {\n text-decoration: ", ";\n }\n\n :focus {\n outline: none;\n text-decoration: ", ";\n }\n\n :active {\n text-decoration: none;\n }\n" - // An internal link from the react-router-dom library that is correctly styled -])), function (_a) { - var disabled = _a.disabled; - return (disabled ? 'default' : 'pointer'); -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return (disabled ? theme.text2 : theme.primary1); -}, function (_a) { - var disabled = _a.disabled; - return (disabled ? null : 'underline'); -}, function (_a) { - var disabled = _a.disabled; - return (disabled ? null : 'underline'); -}); -// An internal link from the react-router-dom library that is correctly styled -var StyledInternalLink = styled(Link$1)(templateObject_5$x || (templateObject_5$x = __makeTemplateObject(["\n text-decoration: none;\n cursor: pointer;\n color: ", ";\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 text-decoration: none;\n cursor: pointer;\n color: ", ";\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"])), function (_a) { - var theme = _a.theme; - return theme.primary1; -}); -var StyledLink = styled.a(templateObject_6$o || (templateObject_6$o = __makeTemplateObject(["\n text-decoration: none;\n cursor: pointer;\n color: ", ";\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 text-decoration: none;\n cursor: pointer;\n color: ", ";\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"])), function (_a) { - var theme = _a.theme; - return theme.primary1; -}); -var LinkIconWrapper = styled.a(templateObject_7$k || (templateObject_7$k = __makeTemplateObject(["\n text-decoration: none;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n text-decoration: none;\n opacity: 0.7;\n }\n\n :focus {\n outline: none;\n text-decoration: none;\n }\n\n :active {\n text-decoration: none;\n }\n"], ["\n text-decoration: none;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n text-decoration: none;\n opacity: 0.7;\n }\n\n :focus {\n outline: none;\n text-decoration: none;\n }\n\n :active {\n text-decoration: none;\n }\n"]))); -var LinkIcon = styled(ExternalLink$1)(templateObject_8$h || (templateObject_8$h = __makeTemplateObject(["\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ", ";\n"], ["\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.blue1; -}); -var TrashIcon = styled(Trash)(templateObject_9$g || (templateObject_9$g = __makeTemplateObject(["\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ", ";\n\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n opacity: 0.7;\n }\n"], ["\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ", ";\n\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n opacity: 0.7;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.text3; -}); -var rotateImg = keyframes(templateObject_10$c || (templateObject_10$c = __makeTemplateObject(["\n 0% {\n transform: perspective(1000px) rotateY(0deg);\n }\n\n 100% {\n transform: perspective(1000px) rotateY(360deg);\n }\n"], ["\n 0% {\n transform: perspective(1000px) rotateY(0deg);\n }\n\n 100% {\n transform: perspective(1000px) rotateY(360deg);\n }\n"]))); -var UniTokenAnimated = styled.img(templateObject_11$a || (templateObject_11$a = __makeTemplateObject(["\n animation: ", " 5s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n padding: 2rem 0 0 0;\n filter: drop-shadow(0px 2px 4px rgba(0, 0, 0, 0.15));\n"], ["\n animation: ", " 5s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n padding: 2rem 0 0 0;\n filter: drop-shadow(0px 2px 4px rgba(0, 0, 0, 0.15));\n"])), rotateImg); -function handleClickExternalLink(event) { - var _a = event.currentTarget, target = _a.target, href = _a.href; - var anonymizedHref = anonymizeLink(href); - // don't prevent default, don't redirect if it's a new tab - if (target === '_blank' || event.ctrlKey || event.metaKey) { - ReactGA.outboundLink({ label: anonymizedHref }, function () { - console.debug('Fired outbound link event', anonymizedHref); - }); - } - else { - event.preventDefault(); - // send a ReactGA event and then trigger a location change - ReactGA.outboundLink({ label: anonymizedHref }, function () { - window.location.href = anonymizedHref; - }); - } -} -/** - * Outbound link that handles firing google analytics events - */ -function ExternalLink(_a) { - var _b = _a.target, target = _b === void 0 ? '_blank' : _b, href = _a.href, _c = _a.rel, rel = _c === void 0 ? 'noopener noreferrer' : _c, rest = __rest(_a, ["target", "href", "rel"]); - return jsx(StyledLink, __assign({ target: target, rel: rel, href: href, onClick: handleClickExternalLink }, rest), void 0); -} -function ExternalLinkIcon(_a) { - var _b = _a.target, target = _b === void 0 ? '_blank' : _b, href = _a.href, _c = _a.rel, rel = _c === void 0 ? 'noopener noreferrer' : _c, rest = __rest(_a, ["target", "href", "rel"]); - return (jsx(LinkIconWrapper, __assign({ target: target, rel: rel, href: href, onClick: handleClickExternalLink }, rest, { children: jsx(LinkIcon, {}, void 0) }), void 0)); -} -var rotate$1 = keyframes(templateObject_12$a || (templateObject_12$a = __makeTemplateObject(["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"], ["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"]))); -var Spinner$2 = styled.img(templateObject_13$6 || (templateObject_13$6 = __makeTemplateObject(["\n animation: 2s ", " linear infinite;\n width: 16px;\n height: 16px;\n"], ["\n animation: 2s ", " linear infinite;\n width: 16px;\n height: 16px;\n"])), rotate$1); -styled(StyledInternalLink)(templateObject_14$6 || (templateObject_14$6 = __makeTemplateObject(["\n color: ", ";\n"], ["\n color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.text1; -}); -var CustomLightSpinner = styled(Spinner$2)(templateObject_15$4 || (templateObject_15$4 = __makeTemplateObject(["\n height: ", ";\n width: ", ";\n"], ["\n height: ", ";\n width: ", ";\n"])), function (_a) { - var size = _a.size; - return size; -}, function (_a) { - var size = _a.size; - return size; -}); -var HideSmall = styled.span(templateObject_17$2 || (templateObject_17$2 = __makeTemplateObject(["\n ", ";\n"], ["\n ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToSmall(templateObject_16$3 || (templateObject_16$3 = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); -}); -styled.span(templateObject_19$2 || (templateObject_19$2 = __makeTemplateObject(["\n ", ";\n"], ["\n ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToExtraSmall(templateObject_18$2 || (templateObject_18$2 = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); -}); -styled.span(templateObject_21$1 || (templateObject_21$1 = __makeTemplateObject(["\n display: none;\n ", ";\n"], ["\n display: none;\n ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToSmall(templateObject_20$1 || (templateObject_20$1 = __makeTemplateObject(["\n display: block;\n "], ["\n display: block;\n "]))); -}); -var Separator$1 = styled.div(templateObject_22 || (templateObject_22 = __makeTemplateObject(["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"], ["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}); -var templateObject_1$1l, templateObject_2$$, templateObject_3$S, templateObject_4$G, templateObject_5$x, templateObject_6$o, templateObject_7$k, templateObject_8$h, templateObject_9$g, templateObject_10$c, templateObject_11$a, templateObject_12$a, templateObject_13$6, templateObject_14$6, templateObject_15$4, templateObject_16$3, templateObject_17$2, templateObject_18$2, templateObject_19$2, templateObject_20$1, templateObject_21$1, templateObject_22; +var ERC721_ABI = [ + { + inputs: [ + { + internalType: 'uint256', + name: 'tokenId', + type: 'uint256', + }, + ], + name: 'ownerOf', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'tokenId', + type: 'uint256', + }, + ], + name: 'tokenURI', + outputs: [ + { + internalType: 'string', + name: '', + type: 'string', + }, + ], + stateMutability: 'view', + type: 'function', + }, +] -var MEDIA_WIDTHS = { - upToExtraSmall: 500, - upToSmall: 720, - upToMedium: 960, - upToLarge: 1280, -}; -// Migrating to a standard z-index system https://getbootstrap.com/docs/5.0/layout/z-index/ -// Please avoid using deprecated numbers -var Z_INDEX; -(function (Z_INDEX) { - Z_INDEX[Z_INDEX["deprecated_zero"] = 0] = "deprecated_zero"; - Z_INDEX[Z_INDEX["deprecated_content"] = 1] = "deprecated_content"; - Z_INDEX[Z_INDEX["dropdown"] = 1000] = "dropdown"; - Z_INDEX[Z_INDEX["sticky"] = 1020] = "sticky"; - Z_INDEX[Z_INDEX["fixed"] = 1030] = "fixed"; - Z_INDEX[Z_INDEX["modalBackdrop"] = 1040] = "modalBackdrop"; - Z_INDEX[Z_INDEX["offcanvas"] = 1050] = "offcanvas"; - Z_INDEX[Z_INDEX["modal"] = 1060] = "modal"; - Z_INDEX[Z_INDEX["popover"] = 1070] = "popover"; - Z_INDEX[Z_INDEX["tooltip"] = 1080] = "tooltip"; -})(Z_INDEX || (Z_INDEX = {})); -var mediaWidthTemplates = Object.keys(MEDIA_WIDTHS).reduce(function (accumulator, size) { - accumulator[size] = function (a, b, c) { return css(templateObject_1$1k || (templateObject_1$1k = __makeTemplateObject(["\n @media (max-width: ", "px) {\n ", "\n }\n "], ["\n @media (max-width: ", "px) {\n ", "\n }\n "])), MEDIA_WIDTHS[size], css(a, b, c)); }; - return accumulator; -}, {}); -var white = '#FFFFFF'; -var black = '#000000'; -function colors(darkMode) { - return { - darkMode: darkMode, - // base - white: white, - black: black, - // text - text1: darkMode ? '#FFFFFF' : '#000000', - text2: darkMode ? '#C3C5CB' : '#565A69', - text3: darkMode ? '#8F96AC' : '#6E727D', - text4: darkMode ? '#B2B9D2' : '#C3C5CB', - text5: darkMode ? '#2C2F36' : '#EDEEF2', - // backgrounds / greys - bg0: darkMode ? '#191B1F' : '#FFF', - bg1: darkMode ? '#212429' : '#F7F8FA', - bg2: darkMode ? '#2C2F36' : '#EDEEF2', - bg3: darkMode ? '#40444F' : '#CED0D9', - bg4: darkMode ? '#565A69' : '#888D9B', - bg5: darkMode ? '#6C7284' : '#888D9B', - bg6: darkMode ? '#1A2028' : '#6C7284', - //specialty colors - modalBG: darkMode ? 'rgba(0,0,0,.425)' : 'rgba(0,0,0,0.3)', - advancedBG: darkMode ? 'rgba(0,0,0,0.1)' : 'rgba(255,255,255,0.6)', - //primary colors - primary1: darkMode ? '#2172E5' : '#E8006F', - primary2: darkMode ? '#3680E7' : '#FF8CC3', - primary3: darkMode ? '#4D8FEA' : '#FF99C9', - primary4: darkMode ? '#376bad70' : '#F6DDE8', - primary5: darkMode ? '#153d6f70' : '#FDEAF1', - // color text - primaryText1: darkMode ? '#5090ea' : '#D50066', - // secondary colors - secondary1: darkMode ? '#2172E5' : '#E8006F', - secondary2: darkMode ? '#17000b26' : '#F6DDE8', - secondary3: darkMode ? '#17000b26' : '#FDEAF1', - // other - red1: darkMode ? '#FF4343' : '#DA2D2B', - red2: darkMode ? '#F82D3A' : '#DF1F38', - red3: '#D60000', - green1: darkMode ? '#27AE60' : '#007D35', - yellow1: '#E3A507', - yellow2: '#FF8F00', - yellow3: '#F3B71E', - blue1: darkMode ? '#2172E5' : '#0068FC', - blue2: darkMode ? '#5199FF' : '#0068FC', - error: darkMode ? '#FD4040' : '#DF1F38', - success: darkMode ? '#27AE60' : '#007D35', - warning: '#FF8F00', - // dont wanna forget these blue yet - blue4: darkMode ? '#153d6f70' : '#C4D9F8', - // blue5: darkMode ? '#153d6f70' : '#EBF4FF', - }; -} -function theme(darkMode) { - return __assign(__assign({}, colors(darkMode)), { grids: { - sm: 8, - md: 12, - lg: 24, - }, - //shadows - shadow1: darkMode ? '#000' : '#2F80ED', - // media queries - mediaWidth: mediaWidthTemplates, - // css snippets - flexColumnNoWrap: css(templateObject_2$_ || (templateObject_2$_ = __makeTemplateObject(["\n display: flex;\n flex-flow: column nowrap;\n "], ["\n display: flex;\n flex-flow: column nowrap;\n "]))), flexRowNoWrap: css(templateObject_3$R || (templateObject_3$R = __makeTemplateObject(["\n display: flex;\n flex-flow: row nowrap;\n "], ["\n display: flex;\n flex-flow: row nowrap;\n "]))) }); -} -function ThemeProvider(_a) { - var children = _a.children; - var darkMode = useIsDarkMode(); - var themeObject = useMemo(function () { return theme(darkMode); }, [darkMode]); - return jsx(ThemeProvider$1, __assign({ theme: themeObject }, { children: children }), void 0); -} -var TextWrapper$1 = styled(Text$1)(templateObject_4$F || (templateObject_4$F = __makeTemplateObject(["\n color: ", ";\n"], ["\n color: ", ";\n" - /** - * Preset styles of the Rebass Text component - */ -])), function (_a) { - var color = _a.color, theme = _a.theme; - return theme[color]; -}); -/** - * Preset styles of the Rebass Text component - */ -var ThemedText = { - Main: function (props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text2' }, props), void 0); - }, - Link: function (props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'primary1' }, props), void 0); - }, - Label: function (props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 600, color: 'text1' }, props), void 0); - }, - Black: function (props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text1' }, props), void 0); - }, - White: function (props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'white' }, props), void 0); - }, - Body: function (props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 400, fontSize: 16, color: 'text1' }, props), void 0); - }, - LargeHeader: function (props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 600, fontSize: 24 }, props), void 0); - }, - MediumHeader: function (props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 500, fontSize: 20 }, props), void 0); - }, - SubHeader: function (props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 400, fontSize: 14 }, props), void 0); - }, - Small: function (props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 500, fontSize: 11 }, props), void 0); - }, - Blue: function (props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'blue1' }, props), void 0); - }, - Yellow: function (props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'yellow3' }, props), void 0); - }, - DarkGray: function (props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text3' }, props), void 0); - }, - Gray: function (props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'bg3' }, props), void 0); - }, - Italic: function (props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 500, fontSize: 12, fontStyle: 'italic', color: 'text2' }, props), void 0); - }, - Error: function (_a) { - var error = _a.error, props = __rest(_a, ["error"]); - return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: error ? 'red1' : 'text2' }, props), void 0); - }, -}; -var ThemedGlobalStyle = createGlobalStyle(templateObject_5$w || (templateObject_5$w = __makeTemplateObject(["\nhtml {\n color: ", ";\n background-color: ", " !important;\n}\n\na {\n color: ", "; \n}\n"], ["\nhtml {\n color: ", ";\n background-color: ", " !important;\n}\n\na {\n color: ", "; \n}\n"])), function (_a) { - var theme = _a.theme; - return theme.text1; -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var theme = _a.theme; - return theme.blue1; -}); -var templateObject_1$1k, templateObject_2$_, templateObject_3$R, templateObject_4$F, templateObject_5$w; - -var _a$b; -var ETHERSCAN_PREFIXES = (_a$b = {}, - _a$b[SupportedChainId.MAINNET] = 'https://etherscan.io', - _a$b[SupportedChainId.ROPSTEN] = 'https://ropsten.etherscan.io', - _a$b[SupportedChainId.RINKEBY] = 'https://rinkeby.etherscan.io', - _a$b[SupportedChainId.GOERLI] = 'https://goerli.etherscan.io', - _a$b[SupportedChainId.KOVAN] = 'https://kovan.etherscan.io', - _a$b[SupportedChainId.OPTIMISM] = 'https://optimistic.etherscan.io', - _a$b[SupportedChainId.OPTIMISTIC_KOVAN] = 'https://kovan-optimistic.etherscan.io', - _a$b[SupportedChainId.POLYGON_MUMBAI] = 'https://mumbai.polygonscan.com', - _a$b[SupportedChainId.POLYGON] = 'https://polygonscan.com', - _a$b); -var ExplorerDataType; -(function (ExplorerDataType) { - ExplorerDataType["TRANSACTION"] = "transaction"; - ExplorerDataType["TOKEN"] = "token"; - ExplorerDataType["ADDRESS"] = "address"; - ExplorerDataType["BLOCK"] = "block"; -})(ExplorerDataType || (ExplorerDataType = {})); -/** - * Return the explorer link for the given data and data type - * @param chainId the ID of the chain for which to return the data - * @param data the data to return a link for - * @param type the type of the data - */ -function getExplorerLink(chainId, data, type) { - var _a; - if (chainId === SupportedChainId.ARBITRUM_ONE) { - switch (type) { - case ExplorerDataType.TRANSACTION: - return "https://arbiscan.io/tx/" + data; - case ExplorerDataType.ADDRESS: - case ExplorerDataType.TOKEN: - return "https://arbiscan.io/address/" + data; - case ExplorerDataType.BLOCK: - return "https://arbiscan.io/block/" + data; - default: - return "https://arbiscan.io/"; - } - } - if (chainId === SupportedChainId.ARBITRUM_RINKEBY) { - switch (type) { - case ExplorerDataType.TRANSACTION: - return "https://rinkeby-explorer.arbitrum.io/tx/" + data; - case ExplorerDataType.ADDRESS: - case ExplorerDataType.TOKEN: - return "https://rinkeby-explorer.arbitrum.io/address/" + data; - case ExplorerDataType.BLOCK: - return "https://rinkeby-explorer.arbitrum.io/block/" + data; - default: - return "https://rinkeby-explorer.arbitrum.io/"; - } - } - var prefix = (_a = ETHERSCAN_PREFIXES[chainId]) !== null && _a !== void 0 ? _a : 'https://etherscan.io'; - switch (type) { - case ExplorerDataType.TRANSACTION: - return prefix + "/tx/" + data; - case ExplorerDataType.TOKEN: - return prefix + "/token/" + data; - case ExplorerDataType.BLOCK: - if (chainId === SupportedChainId.OPTIMISM || chainId === SupportedChainId.OPTIMISTIC_KOVAN) { - return prefix + "/tx/" + data; - } - return prefix + "/block/" + data; - case ExplorerDataType.ADDRESS: - return prefix + "/address/" + data; - default: - return "" + prefix; - } +var ERC1155_ABI = [ + { + constant: true, + inputs: [ + { + internalType: 'address', + name: '_owner', + type: 'address', + }, + { + internalType: 'uint256', + name: '_id', + type: 'uint256', + }, + ], + name: 'balanceOf', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'uint256', + name: '_id', + type: 'uint256', + }, + ], + name: 'uri', + outputs: [ + { + internalType: 'string', + name: '', + type: 'string', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, +] + +var WETH_ABI = [ + { + constant: true, + inputs: [], + name: 'name', + outputs: [ + { + name: '', + type: 'string', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + name: 'guy', + type: 'address', + }, + { + name: 'wad', + type: 'uint256', + }, + ], + name: 'approve', + outputs: [ + { + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'totalSupply', + outputs: [ + { + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + name: 'src', + type: 'address', + }, + { + name: 'dst', + type: 'address', + }, + { + name: 'wad', + type: 'uint256', + }, + ], + name: 'transferFrom', + outputs: [ + { + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + name: 'wad', + type: 'uint256', + }, + ], + name: 'withdraw', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'decimals', + outputs: [ + { + name: '', + type: 'uint8', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + name: '', + type: 'address', + }, + ], + name: 'balanceOf', + outputs: [ + { + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'symbol', + outputs: [ + { + name: '', + type: 'string', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + name: 'dst', + type: 'address', + }, + { + name: 'wad', + type: 'uint256', + }, + ], + name: 'transfer', + outputs: [ + { + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [], + name: 'deposit', + outputs: [], + payable: true, + stateMutability: 'payable', + type: 'function', + }, + { + constant: true, + inputs: [ + { + name: '', + type: 'address', + }, + { + name: '', + type: 'address', + }, + ], + name: 'allowance', + outputs: [ + { + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + payable: true, + stateMutability: 'payable', + type: 'fallback', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: 'src', + type: 'address', + }, + { + indexed: true, + name: 'guy', + type: 'address', + }, + { + indexed: false, + name: 'wad', + type: 'uint256', + }, + ], + name: 'Approval', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: 'src', + type: 'address', + }, + { + indexed: true, + name: 'dst', + type: 'address', + }, + { + indexed: false, + name: 'wad', + type: 'uint256', + }, + ], + name: 'Transfer', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: 'dst', + type: 'address', + }, + { + indexed: false, + name: 'wad', + type: 'uint256', + }, + ], + name: 'Deposit', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: 'src', + type: 'address', + }, + { + indexed: false, + name: 'wad', + type: 'uint256', + }, + ], + name: 'Withdrawal', + type: 'event', + }, +] + +var _a$h +/** + * List of all the networks supported by the Uniswap Interface + */ +var SupportedChainId +;(function (SupportedChainId) { + SupportedChainId[(SupportedChainId['MAINNET'] = 1)] = 'MAINNET' + SupportedChainId[(SupportedChainId['ROPSTEN'] = 3)] = 'ROPSTEN' + SupportedChainId[(SupportedChainId['RINKEBY'] = 4)] = 'RINKEBY' + SupportedChainId[(SupportedChainId['GOERLI'] = 5)] = 'GOERLI' + SupportedChainId[(SupportedChainId['KOVAN'] = 42)] = 'KOVAN' + SupportedChainId[(SupportedChainId['ARBITRUM_ONE'] = 42161)] = 'ARBITRUM_ONE' + SupportedChainId[(SupportedChainId['ARBITRUM_RINKEBY'] = 421611)] = 'ARBITRUM_RINKEBY' + SupportedChainId[(SupportedChainId['OPTIMISM'] = 10)] = 'OPTIMISM' + SupportedChainId[(SupportedChainId['OPTIMISTIC_KOVAN'] = 69)] = 'OPTIMISTIC_KOVAN' + SupportedChainId[(SupportedChainId['POLYGON'] = 137)] = 'POLYGON' + SupportedChainId[(SupportedChainId['POLYGON_MUMBAI'] = 80001)] = 'POLYGON_MUMBAI' +})(SupportedChainId || (SupportedChainId = {})) +var CHAIN_IDS_TO_NAMES = + ((_a$h = {}), + (_a$h[SupportedChainId.MAINNET] = 'mainnet'), + (_a$h[SupportedChainId.ROPSTEN] = 'ropsten'), + (_a$h[SupportedChainId.RINKEBY] = 'rinkeby'), + (_a$h[SupportedChainId.GOERLI] = 'goerli'), + (_a$h[SupportedChainId.KOVAN] = 'kovan'), + (_a$h[SupportedChainId.POLYGON] = 'polygon'), + (_a$h[SupportedChainId.POLYGON_MUMBAI] = 'polygon_mumbai'), + (_a$h[SupportedChainId.ARBITRUM_ONE] = 'arbitrum'), + (_a$h[SupportedChainId.ARBITRUM_RINKEBY] = 'arbitrum_rinkeby'), + (_a$h[SupportedChainId.OPTIMISM] = 'optimism'), + (_a$h[SupportedChainId.OPTIMISTIC_KOVAN] = 'optimistic_kovan'), + _a$h) +/** + * Array of all the supported chain IDs + */ +var ALL_SUPPORTED_CHAIN_IDS = Object.values(SupportedChainId).filter(function (id) { + return typeof id === 'number' +}) +var SUPPORTED_GAS_ESTIMATE_CHAIN_IDS = [SupportedChainId.MAINNET, SupportedChainId.POLYGON] +/** + * All the chain IDs that are running the Ethereum protocol. + */ +;[ + SupportedChainId.MAINNET, + SupportedChainId.ROPSTEN, + SupportedChainId.RINKEBY, + SupportedChainId.GOERLI, + SupportedChainId.KOVAN, + SupportedChainId.POLYGON, + SupportedChainId.POLYGON_MUMBAI, +] +/** + * Controls some L2 specific behavior, e.g. slippage tolerance, special UI behavior. + * The expectation is that all of these networks have immediate transaction confirmation. + */ +var L2_CHAIN_IDS = [ + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, +] + +var DEFAULT_NETWORKS = [ + SupportedChainId.MAINNET, + SupportedChainId.ROPSTEN, + SupportedChainId.RINKEBY, + SupportedChainId.GOERLI, + SupportedChainId.KOVAN, +] +function constructSameAddressMap(address, additionalNetworks) { + if (additionalNetworks === void 0) { + additionalNetworks = [] + } + return DEFAULT_NETWORKS.concat(additionalNetworks).reduce(function (memo, chainId) { + memo[chainId] = address + return memo + }, {}) } -var Column = styled.div(templateObject_1$1j || (templateObject_1$1j = __makeTemplateObject(["\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n"], ["\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n"]))); -var ColumnCenter = styled(Column)(templateObject_2$Z || (templateObject_2$Z = __makeTemplateObject(["\n width: 100%;\n align-items: center;\n"], ["\n width: 100%;\n align-items: center;\n"]))); -var AutoColumn = styled.div(templateObject_3$Q || (templateObject_3$Q = __makeTemplateObject(["\n display: grid;\n grid-auto-rows: auto;\n grid-row-gap: ", ";\n justify-items: ", ";\n"], ["\n display: grid;\n grid-auto-rows: auto;\n grid-row-gap: ", ";\n justify-items: ", ";\n"])), function (_a) { - var gap = _a.gap; - return (gap === 'sm' && '8px') || (gap === 'md' && '12px') || (gap === 'lg' && '24px') || gap; -}, function (_a) { - var justify = _a.justify; - return justify && justify; -}); -var templateObject_1$1j, templateObject_2$Z, templateObject_3$Q; +var _a$g, _b$6, _c$4, _d$3, _e$2, _f$1, _g$1, _h$1 +var UNI_ADDRESS = constructSameAddressMap('0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984') +var MULTICALL_ADDRESS = __assign( + __assign( + {}, + constructSameAddressMap('0x1F98415757620B543A52E61c46B32eB19261F984', [ + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.OPTIMISM, + SupportedChainId.POLYGON_MUMBAI, + SupportedChainId.POLYGON, + ]) + ), + ((_a$g = {}), + (_a$g[SupportedChainId.ARBITRUM_ONE] = '0xadF885960B47eA2CD9B55E6DAc6B42b7Cb2806dB'), + (_a$g[SupportedChainId.ARBITRUM_RINKEBY] = '0xa501c031958F579dB7676fF1CE78AD305794d579'), + _a$g) +) +var V2_FACTORY_ADDRESSES = constructSameAddressMap(FACTORY_ADDRESS) +var V2_ROUTER_ADDRESS = constructSameAddressMap('0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D') +var V3_ROUTER_ADDRESS = constructSameAddressMap('0xE592427A0AEce92De3Edee1F18E0157C05861564', [ + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON, + SupportedChainId.POLYGON_MUMBAI, +]) +var SWAP_ROUTER_ADDRESSES = constructSameAddressMap('0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45', [ + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON, + SupportedChainId.POLYGON_MUMBAI, +]) +/** + * The oldest V0 governance address + */ +constructSameAddressMap('0x5e4be8Bc9637f0EAA1A755019e06A68ce081D58F') +/** + * The older V1 governance address + */ +;(_b$6 = {}), (_b$6[SupportedChainId.MAINNET] = '0xC4e172459f1E7939D522503B81AFAaC1014CE6F6'), _b$6 +/** + * The latest governor bravo that is currently admin of timelock + */ +;(_c$4 = {}), (_c$4[SupportedChainId.MAINNET] = '0x408ED6354d4973f66138C91495F2f2FCbd8724C3'), _c$4 +constructSameAddressMap('0x1a9C8182C09F50C8318d769245beA52c32BE35BC') +var MERKLE_DISTRIBUTOR_ADDRESS = + ((_d$3 = {}), (_d$3[SupportedChainId.MAINNET] = '0x090D4613473dEE047c3f2706764f49E0821D256e'), _d$3) +var ARGENT_WALLET_DETECTOR_ADDRESS = + ((_e$2 = {}), (_e$2[SupportedChainId.MAINNET] = '0xeca4B0bDBf7c55E9b7925919d03CbF8Dc82537E8'), _e$2) +var V3_CORE_FACTORY_ADDRESSES = constructSameAddressMap(FACTORY_ADDRESS$1, [ + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON_MUMBAI, + SupportedChainId.POLYGON, +]) +var QUOTER_ADDRESSES = constructSameAddressMap('0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6', [ + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON_MUMBAI, + SupportedChainId.POLYGON, +]) +constructSameAddressMap('0xC36442b4a4522E871399CD717aBDD847Ab11FE88', [ + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON_MUMBAI, + SupportedChainId.POLYGON, +]) +var ENS_REGISTRAR_ADDRESSES = + ((_f$1 = {}), + (_f$1[SupportedChainId.MAINNET] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'), + (_f$1[SupportedChainId.ROPSTEN] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'), + (_f$1[SupportedChainId.GOERLI] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'), + (_f$1[SupportedChainId.RINKEBY] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'), + _f$1) +var SOCKS_CONTROLLER_ADDRESSES = + ((_g$1 = {}), (_g$1[SupportedChainId.MAINNET] = '0x65770b5283117639760beA3F867b69b3697a91dd'), _g$1) +constructSameAddressMap('0xA5644E29708357803b5A882D272c41cC0dF92B34', [ + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON_MUMBAI, + SupportedChainId.POLYGON, +]) +;(_h$1 = {}), + (_h$1[SupportedChainId.ARBITRUM_ONE] = '0xbfd8137f7d1516D3ea5cA83523914859ec47F573'), + (_h$1[SupportedChainId.ARBITRUM_RINKEBY] = '0xbfd8137f7d1516D3ea5cA83523914859ec47F573'), + _h$1 + +var _a$f, _b$5 +var AMPL = new Token(SupportedChainId.MAINNET, '0xD46bA6D942050d489DBd938a2C909A5d5039A161', 9, 'AMPL', 'Ampleforth') +var DAI = new Token(SupportedChainId.MAINNET, '0x6B175474E89094C44Da98b954EedeAC495271d0F', 18, 'DAI', 'Dai Stablecoin') +var DAI_ARBITRUM_ONE = new Token( + SupportedChainId.ARBITRUM_ONE, + '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', + 18, + 'DAI', + 'Dai stable coin' +) +var DAI_OPTIMISM = new Token( + SupportedChainId.OPTIMISM, + '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', + 18, + 'DAI', + 'Dai stable coin' +) +var USDC = new Token(SupportedChainId.MAINNET, '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', 6, 'USDC', 'USD//C') +var USDC_ARBITRUM = new Token( + SupportedChainId.ARBITRUM_ONE, + '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8', + 6, + 'USDC', + 'USD//C' +) +var USDC_POLYGON = new Token( + SupportedChainId.POLYGON, + '0x2791bca1f2de4661ed88a30c99a7a9449aa84174', + 6, + 'USDC', + 'USD//C' +) +var DAI_POLYGON = new Token( + SupportedChainId.POLYGON, + '0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063', + 18, + 'DAI', + 'Dai Stablecoin' +) +var USDT_POLYGON = new Token( + SupportedChainId.POLYGON, + '0xc2132d05d31c914a87c6611c10748aeb04b58e8f', + 6, + 'USDT', + 'Tether USD' +) +var WBTC_POLYGON = new Token( + SupportedChainId.POLYGON, + '0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6', + 8, + 'WBTC', + 'Wrapped BTC' +) +var USDC_OPTIMISM = new Token( + SupportedChainId.OPTIMISM, + '0x7F5c764cBc14f9669B88837ca1490cCa17c31607', + 6, + 'USDC', + 'USD//C' +) +var USDT = new Token(SupportedChainId.MAINNET, '0xdAC17F958D2ee523a2206206994597C13D831ec7', 6, 'USDT', 'Tether USD') +var USDT_ARBITRUM_ONE = new Token( + SupportedChainId.ARBITRUM_ONE, + '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9', + 6, + 'USDT', + 'Tether USD' +) +var USDT_OPTIMISM = new Token( + SupportedChainId.OPTIMISM, + '0x94b008aA00579c1307B0EF2c499aD98a8ce58e58', + 6, + 'USDT', + 'Tether USD' +) +var WBTC = new Token(SupportedChainId.MAINNET, '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', 8, 'WBTC', 'Wrapped BTC') +var WBTC_ARBITRUM_ONE = new Token( + SupportedChainId.ARBITRUM_ONE, + '0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f', + 8, + 'WBTC', + 'Wrapped BTC' +) +var WBTC_OPTIMISM = new Token( + SupportedChainId.OPTIMISM, + '0x68f180fcCe6836688e9084f035309E29Bf0A2095', + 8, + 'WBTC', + 'Wrapped BTC' +) +var FEI = new Token(SupportedChainId.MAINNET, '0x956F47F50A910163D8BF957Cf5846D573E7f87CA', 18, 'FEI', 'Fei USD') +var TRIBE = new Token(SupportedChainId.MAINNET, '0xc7283b66Eb1EB5FB86327f08e1B5816b0720212B', 18, 'TRIBE', 'Tribe') +var FRAX = new Token(SupportedChainId.MAINNET, '0x853d955aCEf822Db058eb8505911ED77F175b99e', 18, 'FRAX', 'Frax') +var FXS = new Token(SupportedChainId.MAINNET, '0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0', 18, 'FXS', 'Frax Share') +var renBTC = new Token(SupportedChainId.MAINNET, '0xEB4C2781e4ebA804CE9a9803C67d0893436bB27D', 8, 'renBTC', 'renBTC') +var ETH2X_FLI = new Token( + SupportedChainId.MAINNET, + '0xAa6E8127831c9DE45ae56bB1b0d4D4Da6e5665BD', + 18, + 'ETH2x-FLI', + 'ETH 2x Flexible Leverage Index' +) +var sETH2 = new Token( + SupportedChainId.MAINNET, + '0xFe2e637202056d30016725477c5da089Ab0A043A', + 18, + 'sETH2', + 'StakeWise Staked ETH2' +) +var rETH2 = new Token( + SupportedChainId.MAINNET, + '0x20BC832ca081b91433ff6c17f85701B6e92486c5', + 18, + 'rETH2', + 'StakeWise Reward ETH2' +) +var SWISE = new Token(SupportedChainId.MAINNET, '0x48C3399719B582dD63eB5AADf12A40B4C3f52FA2', 18, 'SWISE', 'StakeWise') +var WETH_POLYGON_MUMBAI = new Token( + SupportedChainId.POLYGON_MUMBAI, + '0xa6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa', + 18, + 'WETH', + 'Wrapped Ether' +) +var WETH_POLYGON = new Token( + SupportedChainId.POLYGON, + '0x7ceb23fd6bc0add59e62ac25578270cff1b9f619', + 18, + 'WETH', + 'Wrapped Ether' +) +var UNI = + ((_a$f = {}), + (_a$f[SupportedChainId.MAINNET] = new Token(SupportedChainId.MAINNET, UNI_ADDRESS[1], 18, 'UNI', 'Uniswap')), + (_a$f[SupportedChainId.RINKEBY] = new Token(SupportedChainId.RINKEBY, UNI_ADDRESS[4], 18, 'UNI', 'Uniswap')), + (_a$f[SupportedChainId.ROPSTEN] = new Token(SupportedChainId.ROPSTEN, UNI_ADDRESS[3], 18, 'UNI', 'Uniswap')), + (_a$f[SupportedChainId.GOERLI] = new Token(SupportedChainId.GOERLI, UNI_ADDRESS[5], 18, 'UNI', 'Uniswap')), + (_a$f[SupportedChainId.KOVAN] = new Token(SupportedChainId.KOVAN, UNI_ADDRESS[42], 18, 'UNI', 'Uniswap')), + _a$f) +var WRAPPED_NATIVE_CURRENCY = __assign( + __assign({}, WETH9), + ((_b$5 = {}), + (_b$5[SupportedChainId.OPTIMISM] = new Token( + SupportedChainId.OPTIMISM, + '0x4200000000000000000000000000000000000006', + 18, + 'WETH', + 'Wrapped Ether' + )), + (_b$5[SupportedChainId.OPTIMISTIC_KOVAN] = new Token( + SupportedChainId.OPTIMISTIC_KOVAN, + '0x4200000000000000000000000000000000000006', + 18, + 'WETH', + 'Wrapped Ether' + )), + (_b$5[SupportedChainId.ARBITRUM_ONE] = new Token( + SupportedChainId.ARBITRUM_ONE, + '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1', + 18, + 'WETH', + 'Wrapped Ether' + )), + (_b$5[SupportedChainId.ARBITRUM_RINKEBY] = new Token( + SupportedChainId.ARBITRUM_RINKEBY, + '0xB47e6A5f8b33b3F17603C83a0535A9dcD7E32681', + 18, + 'WETH', + 'Wrapped Ether' + )), + (_b$5[SupportedChainId.POLYGON] = new Token( + SupportedChainId.POLYGON, + '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270', + 18, + 'WMATIC', + 'Wrapped MATIC' + )), + (_b$5[SupportedChainId.POLYGON_MUMBAI] = new Token( + SupportedChainId.POLYGON_MUMBAI, + '0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889', + 18, + 'WMATIC', + 'Wrapped MATIC' + )), + _b$5) +) +function isMatic(chainId) { + return chainId === SupportedChainId.POLYGON_MUMBAI || chainId === SupportedChainId.POLYGON +} +var MaticNativeCurrency = /** @class */ (function (_super) { + __extends(MaticNativeCurrency, _super) + function MaticNativeCurrency(chainId) { + var _this = this + if (!isMatic(chainId)) throw new Error('Not matic') + _this = _super.call(this, chainId, 18, 'MATIC', 'Polygon Matic') || this + return _this + } + MaticNativeCurrency.prototype.equals = function (other) { + return other.isNative && other.chainId === this.chainId + } + Object.defineProperty(MaticNativeCurrency.prototype, 'wrapped', { + get() { + if (!isMatic(this.chainId)) throw new Error('Not matic') + return WRAPPED_NATIVE_CURRENCY[this.chainId] + }, + enumerable: false, + configurable: true, + }) + return MaticNativeCurrency +})(NativeCurrency) +var ExtendedEther = /** @class */ (function (_super) { + __extends(ExtendedEther, _super) + function ExtendedEther() { + return (_super !== null && _super.apply(this, arguments)) || this + } + Object.defineProperty(ExtendedEther.prototype, 'wrapped', { + get() { + if (this.chainId in WRAPPED_NATIVE_CURRENCY) return WRAPPED_NATIVE_CURRENCY[this.chainId] + throw new Error('Unsupported chain ID') + }, + enumerable: false, + configurable: true, + }) + ExtendedEther.onChain = function (chainId) { + var _a + return (_a = this._cachedExtendedEther[chainId]) !== null && _a !== void 0 + ? _a + : (this._cachedExtendedEther[chainId] = new ExtendedEther(chainId)) + } + ExtendedEther._cachedExtendedEther = {} + return ExtendedEther +})(Ether) +var cachedNativeCurrency = {} +function nativeOnChain(chainId) { + var _a + return (_a = cachedNativeCurrency[chainId]) !== null && _a !== void 0 + ? _a + : (cachedNativeCurrency[chainId] = isMatic(chainId) + ? new MaticNativeCurrency(chainId) + : ExtendedEther.onChain(chainId)) +} -var Row$1 = styled(Box)(templateObject_1$1i || (templateObject_1$1i = __makeTemplateObject(["\n width: ", ";\n display: flex;\n padding: 0;\n align-items: ", ";\n justify-content: ", ";\n padding: ", ";\n border: ", ";\n border-radius: ", ";\n"], ["\n width: ", ";\n display: flex;\n padding: 0;\n align-items: ", ";\n justify-content: ", ";\n padding: ", ";\n border: ", ";\n border-radius: ", ";\n"])), function (_a) { - var width = _a.width; - return width !== null && width !== void 0 ? width : '100%'; -}, function (_a) { - var align = _a.align; - return align !== null && align !== void 0 ? align : 'center'; -}, function (_a) { - var justify = _a.justify; - return justify !== null && justify !== void 0 ? justify : 'flex-start'; -}, function (_a) { - var padding = _a.padding; - return padding; -}, function (_a) { - var border = _a.border; - return border; -}, function (_a) { - var borderRadius = _a.borderRadius; - return borderRadius; -}); -var RowBetween = styled(Row$1)(templateObject_2$Y || (templateObject_2$Y = __makeTemplateObject(["\n justify-content: space-between;\n"], ["\n justify-content: space-between;\n"]))); -styled.div(templateObject_3$P || (templateObject_3$P = __makeTemplateObject(["\n display: flex;\n align-items: flex-end;\n"], ["\n display: flex;\n align-items: flex-end;\n"]))); -var AutoRow = styled(Row$1)(templateObject_4$E || (templateObject_4$E = __makeTemplateObject(["\n flex-wrap: wrap;\n margin: ", ";\n justify-content: ", ";\n\n & > * {\n margin: ", " !important;\n }\n"], ["\n flex-wrap: wrap;\n margin: ", ";\n justify-content: ", ";\n\n & > * {\n margin: ", " !important;\n }\n"])), function (_a) { - var gap = _a.gap; - return gap && "-" + gap; -}, function (_a) { - var justify = _a.justify; - return justify && justify; -}, function (_a) { - var gap = _a.gap; - return gap; -}); -var RowFixed = styled(Row$1)(templateObject_5$v || (templateObject_5$v = __makeTemplateObject(["\n width: fit-content;\n margin: ", ";\n"], ["\n width: fit-content;\n margin: ", ";\n"])), function (_a) { - var gap = _a.gap; - return gap && "-" + gap; -}); -var templateObject_1$1i, templateObject_2$Y, templateObject_3$P, templateObject_4$E, templateObject_5$v; +// returns null on errors +function useContract(addressOrAddressMap, ABI, withSignerIfPossible) { + if (withSignerIfPossible === void 0) { + withSignerIfPossible = true + } + var _a = useActiveWeb3React(), + library = _a.library, + account = _a.account, + chainId = _a.chainId + return useMemo( + function () { + if (!addressOrAddressMap || !ABI || !library || !chainId) return null + var address + if (typeof addressOrAddressMap === 'string') address = addressOrAddressMap + else address = addressOrAddressMap[chainId] + if (!address) return null + try { + return getContract(address, ABI, library, withSignerIfPossible && account ? account : undefined) + } catch (error) { + console.error('Failed to get contract', error) + return null + } + }, + [addressOrAddressMap, ABI, library, chainId, withSignerIfPossible, account] + ) +} +function useTokenContract(tokenAddress, withSignerIfPossible) { + return useContract(tokenAddress, ERC20ABI, withSignerIfPossible) +} +function useWETHContract(withSignerIfPossible) { + var _a + var chainId = useActiveWeb3React().chainId + return useContract( + chainId ? ((_a = WRAPPED_NATIVE_CURRENCY[chainId]) === null || _a === void 0 ? void 0 : _a.address) : undefined, + WETH_ABI, + withSignerIfPossible + ) +} +function useERC721Contract(nftAddress) { + return useContract(nftAddress, ERC721_ABI, false) +} +function useERC1155Contract(nftAddress) { + return useContract(nftAddress, ERC1155_ABI, false) +} +function useArgentWalletDetectorContract() { + return useContract(ARGENT_WALLET_DETECTOR_ADDRESS, ARGENT_WALLET_DETECTOR_ABI, false) +} +function useENSRegistrarContract(withSignerIfPossible) { + return useContract(ENS_REGISTRAR_ADDRESSES, ENS_ABI, withSignerIfPossible) +} +function useENSResolverContract(address, withSignerIfPossible) { + return useContract(address, ENS_PUBLIC_RESOLVER_ABI, withSignerIfPossible) +} +function useBytes32TokenContract(tokenAddress, withSignerIfPossible) { + return useContract(tokenAddress, ERC20_BYTES32_ABI, withSignerIfPossible) +} +function useEIP2612Contract(tokenAddress) { + return useContract(tokenAddress, EIP_2612, false) +} +function useV2RouterContract() { + return useContract(V2_ROUTER_ADDRESS, abi$3, true) +} +function useInterfaceMulticall() { + return useContract(MULTICALL_ADDRESS, abi$1, false) +} +function useMerkleDistributorContract() { + return useContract(MERKLE_DISTRIBUTOR_ADDRESS, abi$5, true) +} +function useV3Quoter() { + return useContract(QUOTER_ADDRESSES, abi$2) +} -var InputPanel$1 = styled.div(templateObject_1$1h || (templateObject_1$1h = __makeTemplateObject(["\n ", "\n position: relative;\n border-radius: 1.25rem;\n background-color: ", ";\n z-index: 1;\n width: 100%;\n"], ["\n ", "\n position: relative;\n border-radius: 1.25rem;\n background-color: ", ";\n z-index: 1;\n width: 100%;\n"])), function (_a) { - var theme = _a.theme; - return theme.flexColumnNoWrap; -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}); -var ContainerRow = styled.div(templateObject_2$X || (templateObject_2$X = __makeTemplateObject(["\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 1.25rem;\n border: 1px solid ", ";\n transition: border-color 300ms ", ",\n color 500ms ", ";\n background-color: ", ";\n"], ["\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 1.25rem;\n border: 1px solid ", ";\n transition: border-color 300ms ", ",\n color 500ms ", ";\n background-color: ", ";\n"])), function (_a) { - var error = _a.error, theme = _a.theme; - return (error ? theme.red1 : theme.bg2); -}, function (_a) { - var error = _a.error; - return (error ? 'step-end' : 'step-start'); -}, function (_a) { - var error = _a.error; - return (error ? 'step-end' : 'step-start'); -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}); -var InputContainer = styled.div(templateObject_3$O || (templateObject_3$O = __makeTemplateObject(["\n flex: 1;\n padding: 1rem;\n"], ["\n flex: 1;\n padding: 1rem;\n"]))); -var Input$2 = styled.input(templateObject_4$D || (templateObject_4$D = __makeTemplateObject(["\n font-size: 1.25rem;\n outline: none;\n border: none;\n flex: 1 1 auto;\n width: 0;\n background-color: ", ";\n transition: color 300ms ", ";\n color: ", ";\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 500;\n width: 100%;\n ::placeholder {\n color: ", ";\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: ", ";\n }\n"], ["\n font-size: 1.25rem;\n outline: none;\n border: none;\n flex: 1 1 auto;\n width: 0;\n background-color: ", ";\n transition: color 300ms ", ";\n color: ", ";\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 500;\n width: 100%;\n ::placeholder {\n color: ", ";\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: ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var error = _a.error; - return (error ? 'step-end' : 'step-start'); -}, function (_a) { - var error = _a.error, theme = _a.theme; - return (error ? theme.red1 : theme.text1); -}, function (_a) { - var theme = _a.theme; - return theme.text4; -}, function (_a) { - var theme = _a.theme; - return theme.text4; -}); -function AddressInputPanel(_a) { - var id = _a.id, _b = _a.className, className = _b === void 0 ? 'recipient-address-input' : _b, label = _a.label, placeholder = _a.placeholder, value = _a.value, onChange = _a.onChange; - var chainId = useActiveWeb3React().chainId; - var theme = useContext(ThemeContext); - var _c = useENS(value), address = _c.address, loading = _c.loading, name = _c.name; - var handleInput = useCallback(function (event) { - var input = event.target.value; - var withoutSpaces = input.replace(/\s+/g, ''); - onChange(withoutSpaces); - }, [onChange]); - var error = Boolean(value.length > 0 && !loading && !address); - return (jsx(InputPanel$1, __assign({ id: id }, { children: jsx(ContainerRow, __assign({ error: error }, { children: jsx(InputContainer, { children: jsxs(AutoColumn, __assign({ gap: "md" }, { children: [jsxs(RowBetween, { children: [jsx(ThemedText.Black, __assign({ color: theme.text2, fontWeight: 500, fontSize: 14 }, { children: label !== null && label !== void 0 ? label : jsx(Trans, { children: "Recipient" }, void 0) }), void 0), address && chainId && (jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, name !== null && name !== void 0 ? name : address, ExplorerDataType.ADDRESS), style: { fontSize: '14px' } }, { children: jsx(Trans, { children: "(View on Explorer)" }, void 0) }), void 0))] }, void 0), jsx(Input$2, { className: className, type: "text", autoComplete: "off", autoCorrect: "off", autoCapitalize: "off", spellCheck: "false", placeholder: placeholder !== null && placeholder !== void 0 ? placeholder : t(templateObject_5$u || (templateObject_5$u = __makeTemplateObject(["Wallet Address or ENS name"], ["Wallet Address or ENS name"]))), error: error, pattern: "^(0x[a-fA-F0-9]{40})$", onChange: handleInput, value: value }, void 0)] }), void 0) }, void 0) }), void 0) }), void 0)); -} -var templateObject_1$1h, templateObject_2$X, templateObject_3$O, templateObject_4$D, templateObject_5$u; +var _a$e +var multicall = createMulticall() +var reducer = combineReducers(((_a$e = {}), (_a$e[multicall.reducerPath] = multicall.reducer), _a$e)) +createStore(reducer) +function MulticallUpdater() { + var latestBlockNumber = useBlockNumber() + var chainId = useActiveWeb3React().chainId + var contract = useInterfaceMulticall() + return jsx(multicall.Updater, { chainId, latestBlockNumber, contract }, void 0) +} + +function useMultipleContractSingleData() { + var _a + var args = [] + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i] + } + var _b = useCallContext(), + chainId = _b.chainId, + latestBlock = _b.latestBlock + return (_a = multicall.hooks).useMultipleContractSingleData.apply( + _a, + __spreadArray([chainId, latestBlock], __read(args), false) + ) +} +function useSingleCallResult() { + var _a + var args = [] + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i] + } + var _b = useCallContext(), + chainId = _b.chainId, + latestBlock = _b.latestBlock + return (_a = multicall.hooks).useSingleCallResult.apply( + _a, + __spreadArray([chainId, latestBlock], __read(args), false) + ) +} +function useSingleContractMultipleData() { + var _a + var args = [] + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i] + } + var _b = useCallContext(), + chainId = _b.chainId, + latestBlock = _b.latestBlock + return (_a = multicall.hooks).useSingleContractMultipleData.apply( + _a, + __spreadArray([chainId, latestBlock], __read(args), false) + ) +} +function useSingleContractWithCallData() { + var _a + var args = [] + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i] + } + var _b = useCallContext(), + chainId = _b.chainId, + latestBlock = _b.latestBlock + return (_a = multicall.hooks).useSingleContractWithCallData.apply( + _a, + __spreadArray([chainId, latestBlock], __read(args), false) + ) +} +function useCallContext() { + var chainId = useActiveWeb3React().chainId + var latestBlock = useBlockNumber() + return { chainId, latestBlock } +} -function useTheme() { - return useContext(ThemeContext); +function safeNamehash(name) { + if (name === undefined) return undefined + try { + return namehash(name) + } catch (error) { + console.debug(error) + return undefined + } } -var BaseButton = styled(Button$1)(templateObject_1$1g || (templateObject_1$1g = __makeTemplateObject(["\n padding: ", ";\n width: ", ";\n font-weight: 500;\n text-align: center;\n border-radius: ", ";\n outline: none;\n border: 1px solid transparent;\n color: ", ";\n text-decoration: none;\n display: flex;\n justify-content: center;\n flex-wrap: nowrap;\n align-items: center;\n cursor: pointer;\n position: relative;\n z-index: 1;\n &:disabled {\n opacity: 50%;\n cursor: auto;\n pointer-events: none;\n }\n\n will-change: transform;\n transition: transform 450ms ease;\n transform: perspective(1px) translateZ(0);\n\n > * {\n user-select: none;\n }\n\n > a {\n text-decoration: none;\n }\n"], ["\n padding: ", ";\n width: ", ";\n font-weight: 500;\n text-align: center;\n border-radius: ", ";\n outline: none;\n border: 1px solid transparent;\n color: ", ";\n text-decoration: none;\n display: flex;\n justify-content: center;\n flex-wrap: nowrap;\n align-items: center;\n cursor: pointer;\n position: relative;\n z-index: 1;\n &:disabled {\n opacity: 50%;\n cursor: auto;\n pointer-events: none;\n }\n\n will-change: transform;\n transition: transform 450ms ease;\n transform: perspective(1px) translateZ(0);\n\n > * {\n user-select: none;\n }\n\n > a {\n text-decoration: none;\n }\n"])), function (_a) { - var padding = _a.padding; - return padding !== null && padding !== void 0 ? padding : '16px'; -}, function (_a) { - var width = _a.width; - return width !== null && width !== void 0 ? width : '100%'; -}, function (_a) { - var $borderRadius = _a.$borderRadius; - return $borderRadius !== null && $borderRadius !== void 0 ? $borderRadius : '20px'; -}, function (_a) { - var theme = _a.theme; - return theme.text1; -}); -var ButtonPrimary = styled(BaseButton)(templateObject_2$W || (templateObject_2$W = __makeTemplateObject(["\n background-color: ", ";\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n background-color: ", ";\n color: ", ";\n cursor: auto;\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n"], ["\n background-color: ", ";\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n background-color: ", ";\n color: ", ";\n cursor: auto;\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.primary1; -}, function (_a) { - var theme = _a.theme; - return darken(0.05, theme.primary1); -}, function (_a) { - var theme = _a.theme; - return darken(0.05, theme.primary1); -}, function (_a) { - var theme = _a.theme; - return darken(0.05, theme.primary1); -}, function (_a) { - var theme = _a.theme; - return darken(0.1, theme.primary1); -}, function (_a) { - var theme = _a.theme; - return darken(0.1, theme.primary1); -}, function (_a) { - var theme = _a.theme, altDisabledStyle = _a.altDisabledStyle, disabled = _a.disabled; - return altDisabledStyle ? (disabled ? theme.primary1 : theme.bg2) : theme.bg2; -}, function (_a) { - var altDisabledStyle = _a.altDisabledStyle, disabled = _a.disabled, theme = _a.theme; - return altDisabledStyle ? (disabled ? theme.white : theme.text2) : theme.text2; -}); -var ButtonLight = styled(BaseButton)(templateObject_3$N || (templateObject_3$N = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n font-size: 16px;\n font-weight: 500;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n :disabled {\n opacity: 0.4;\n :hover {\n cursor: auto;\n background-color: ", ";\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n }\n"], ["\n background-color: ", ";\n color: ", ";\n font-size: 16px;\n font-weight: 500;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n :disabled {\n opacity: 0.4;\n :hover {\n cursor: auto;\n background-color: ", ";\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.primary5; -}, function (_a) { - var theme = _a.theme; - return theme.primaryText1; -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return !disabled && darken(0.03, theme.primary5); -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return !disabled && darken(0.03, theme.primary5); -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return !disabled && darken(0.03, theme.primary5); -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return !disabled && darken(0.05, theme.primary5); -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return !disabled && darken(0.05, theme.primary5); -}, function (_a) { - var theme = _a.theme; - return theme.primary5; -}); -var ButtonGray = styled(BaseButton)(templateObject_4$C || (templateObject_4$C = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n font-size: 16px;\n font-weight: 500;\n\n &:hover {\n background-color: ", ";\n }\n &:active {\n background-color: ", ";\n }\n"], ["\n background-color: ", ";\n color: ", ";\n font-size: 16px;\n font-weight: 500;\n\n &:hover {\n background-color: ", ";\n }\n &:active {\n background-color: ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var theme = _a.theme; - return theme.text2; -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return !disabled && darken(0.05, theme.bg2); -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return !disabled && darken(0.1, theme.bg2); -}); -var ButtonSecondary = styled(BaseButton)(templateObject_5$t || (templateObject_5$t = __makeTemplateObject(["\n border: 1px solid ", ";\n color: ", ";\n background-color: transparent;\n font-size: 16px;\n border-radius: 12px;\n padding: ", ";\n\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n border: 1px solid ", ";\n }\n &:hover {\n border: 1px solid ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n border: 1px solid ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n a:hover {\n text-decoration: none;\n }\n"], ["\n border: 1px solid ", ";\n color: ", ";\n background-color: transparent;\n font-size: 16px;\n border-radius: 12px;\n padding: ", ";\n\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n border: 1px solid ", ";\n }\n &:hover {\n border: 1px solid ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n border: 1px solid ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n a:hover {\n text-decoration: none;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.primary4; -}, function (_a) { - var theme = _a.theme; - return theme.primary1; -}, function (_a) { - var padding = _a.padding; - return (padding ? padding : '10px'); -}, function (_a) { - var theme = _a.theme; - return theme.primary4; -}, function (_a) { - var theme = _a.theme; - return theme.primary3; -}, function (_a) { - var theme = _a.theme; - return theme.primary3; -}, function (_a) { - var theme = _a.theme; - return theme.primary4; -}, function (_a) { - var theme = _a.theme; - return theme.primary3; -}); -var ButtonOutlined = styled(BaseButton)(templateObject_6$n || (templateObject_6$n = __makeTemplateObject(["\n border: 1px solid ", ";\n background-color: transparent;\n color: ", ";\n &:focus {\n box-shadow: 0 0 0 1px ", ";\n }\n &:hover {\n box-shadow: 0 0 0 1px ", ";\n }\n &:active {\n box-shadow: 0 0 0 1px ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"], ["\n border: 1px solid ", ";\n background-color: transparent;\n color: ", ";\n &:focus {\n box-shadow: 0 0 0 1px ", ";\n }\n &:hover {\n box-shadow: 0 0 0 1px ", ";\n }\n &:active {\n box-shadow: 0 0 0 1px ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}, function (_a) { - var theme = _a.theme; - return theme.text1; -}, function (_a) { - var theme = _a.theme; - return theme.bg4; -}, function (_a) { - var theme = _a.theme; - return theme.bg4; -}, function (_a) { - var theme = _a.theme; - return theme.bg4; -}); -styled(BaseButton)(templateObject_7$j || (templateObject_7$j = __makeTemplateObject(["\n background-color: ", ";\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n background-color: ", ";\n opacity: 50%;\n cursor: auto;\n }\n"], ["\n background-color: ", ";\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n background-color: ", ";\n opacity: 50%;\n cursor: auto;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.yellow3; -}, function (_a) { - var theme = _a.theme; - return darken(0.05, theme.yellow3); -}, function (_a) { - var theme = _a.theme; - return darken(0.05, theme.yellow3); -}, function (_a) { - var theme = _a.theme; - return darken(0.05, theme.yellow3); -}, function (_a) { - var theme = _a.theme; - return darken(0.1, theme.yellow3); -}, function (_a) { - var theme = _a.theme; - return darken(0.1, theme.yellow3); -}, function (_a) { - var theme = _a.theme; - return theme.yellow3; -}); -var ButtonEmpty = styled(BaseButton)(templateObject_8$g || (templateObject_8$g = __makeTemplateObject(["\n background-color: transparent;\n color: ", ";\n display: flex;\n justify-content: center;\n align-items: center;\n\n &:focus {\n text-decoration: underline;\n }\n &:hover {\n text-decoration: none;\n }\n &:active {\n text-decoration: none;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"], ["\n background-color: transparent;\n color: ", ";\n display: flex;\n justify-content: center;\n align-items: center;\n\n &:focus {\n text-decoration: underline;\n }\n &:hover {\n text-decoration: none;\n }\n &:active {\n text-decoration: none;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.primary1; -}); -styled(BaseButton)(templateObject_9$f || (templateObject_9$f = __makeTemplateObject(["\n padding: 0;\n width: fit-content;\n background: none;\n text-decoration: none;\n &:focus {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n text-decoration: underline;\n }\n &:hover {\n // text-decoration: underline;\n opacity: 0.9;\n }\n &:active {\n text-decoration: underline;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"], ["\n padding: 0;\n width: fit-content;\n background: none;\n text-decoration: none;\n &:focus {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n text-decoration: underline;\n }\n &:hover {\n // text-decoration: underline;\n opacity: 0.9;\n }\n &:active {\n text-decoration: underline;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"]))); -var ButtonConfirmedStyle = styled(BaseButton)(templateObject_10$b || (templateObject_10$b = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n /* border: 1px solid ", "; */\n\n &:disabled {\n opacity: 50%;\n background-color: ", ";\n color: ", ";\n cursor: auto;\n }\n"], ["\n background-color: ", ";\n color: ", ";\n /* border: 1px solid ", "; */\n\n &:disabled {\n opacity: 50%;\n background-color: ", ";\n color: ", ";\n cursor: auto;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.bg3; -}, function (_a) { - var theme = _a.theme; - return theme.text1; -}, function (_a) { - var theme = _a.theme; - return theme.green1; -}, function (_a) { - var theme = _a.theme; - return theme.bg2; -}, function (_a) { - var theme = _a.theme; - return theme.text2; -}); -var ButtonErrorStyle = styled(BaseButton)(templateObject_11$9 || (templateObject_11$9 = __makeTemplateObject(["\n background-color: ", ";\n border: 1px solid ", ";\n\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n box-shadow: none;\n background-color: ", ";\n border: 1px solid ", ";\n }\n"], ["\n background-color: ", ";\n border: 1px solid ", ";\n\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n box-shadow: none;\n background-color: ", ";\n border: 1px solid ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.red1; -}, function (_a) { - var theme = _a.theme; - return theme.red1; -}, function (_a) { - var theme = _a.theme; - return darken(0.05, theme.red1); -}, function (_a) { - var theme = _a.theme; - return darken(0.05, theme.red1); -}, function (_a) { - var theme = _a.theme; - return darken(0.05, theme.red1); -}, function (_a) { - var theme = _a.theme; - return darken(0.1, theme.red1); -}, function (_a) { - var theme = _a.theme; - return darken(0.1, theme.red1); -}, function (_a) { - var theme = _a.theme; - return theme.red1; -}, function (_a) { - var theme = _a.theme; - return theme.red1; -}); -function ButtonConfirmed(_a) { - var confirmed = _a.confirmed, altDisabledStyle = _a.altDisabledStyle, rest = __rest(_a, ["confirmed", "altDisabledStyle"]); - if (confirmed) { - return jsx(ButtonConfirmedStyle, __assign({}, rest), void 0); - } - else { - return jsx(ButtonPrimary, __assign({}, rest, { altDisabledStyle: altDisabledStyle }), void 0); - } -} -function ButtonError(_a) { - var error = _a.error, rest = __rest(_a, ["error"]); - if (error) { - return jsx(ButtonErrorStyle, __assign({}, rest), void 0); - } - else { - return jsx(ButtonPrimary, __assign({}, rest), void 0); - } -} -styled(ButtonOutlined)(templateObject_12$9 || (templateObject_12$9 = __makeTemplateObject(["\n border: 1px solid;\n border-color: ", ";\n"], ["\n border: 1px solid;\n border-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.primary1; -}); -styled.div(templateObject_13$5 || (templateObject_13$5 = __makeTemplateObject(["\n height: 17px;\n width: 17px;\n border-radius: 50%;\n background-color: ", ";\n display: flex;\n align-items: center;\n justify-content: center;\n"], ["\n height: 17px;\n width: 17px;\n border-radius: 50%;\n background-color: ", ";\n display: flex;\n align-items: center;\n justify-content: center;\n"])), function (_a) { - var theme = _a.theme; - return theme.primary1; -}); -styled.div(templateObject_14$5 || (templateObject_14$5 = __makeTemplateObject(["\n width: 20px;\n padding: 0 10px;\n position: absolute;\n top: 11px;\n right: 15px;\n"], ["\n width: 20px;\n padding: 0 10px;\n position: absolute;\n top: 11px;\n right: 15px;\n"]))); -styled(Check)(templateObject_15$3 || (templateObject_15$3 = __makeTemplateObject(["\n size: 13px;\n"], ["\n size: 13px;\n"]))); -var templateObject_1$1g, templateObject_2$W, templateObject_3$N, templateObject_4$C, templateObject_5$t, templateObject_6$n, templateObject_7$j, templateObject_8$g, templateObject_9$f, templateObject_10$b, templateObject_11$9, templateObject_12$9, templateObject_13$5, templateObject_14$5, templateObject_15$3; +/** + * Returns true if the string value is zero in hex + * @param hexNumberString + */ +function isZero(hexNumberString) { + return /^0x0*$/.test(hexNumberString) +} -var isClient = typeof window === 'object'; -function getSize() { - return { - width: isClient ? window.innerWidth : undefined, - height: isClient ? window.innerHeight : undefined, - }; -} -// https://usehooks.com/useWindowSize/ -function useWindowSize() { - var _a = __read(useState(getSize), 2), windowSize = _a[0], setWindowSize = _a[1]; - useEffect(function () { - function handleResize() { - setWindowSize(getSize()); - } - if (isClient) { - window.addEventListener('resize', handleResize); - return function () { - window.removeEventListener('resize', handleResize); - }; - } - return undefined; - }, []); - return windowSize; +/** + * Does a lookup for an ENS name to find its address. + */ +function useENSAddress(ensName) { + var _a + var debouncedName = useDebounce(ensName, 200) + var ensNodeArgument = useMemo( + function () { + return [debouncedName === null ? undefined : safeNamehash(debouncedName)] + }, + [debouncedName] + ) + var registrarContract = useENSRegistrarContract(false) + var resolverAddress = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument) + var resolverAddressResult = (_a = resolverAddress.result) === null || _a === void 0 ? void 0 : _a[0] + var resolverContract = useENSResolverContract( + resolverAddressResult && !isZero(resolverAddressResult) ? resolverAddressResult : undefined, + false + ) + var addr = useSingleCallResult(resolverContract, 'addr', ensNodeArgument) + var changed = debouncedName !== ensName + return useMemo( + function () { + var _a, _b + return { + address: changed + ? null + : (_b = (_a = addr.result) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 + ? _b + : null, + loading: changed || resolverAddress.loading || addr.loading, + } + }, + [addr.loading, addr.result, changed, resolverAddress.loading] + ) } -// eslint-disable-next-line react/prop-types -function Confetti(_a) { - var start = _a.start, variant = _a.variant; - var _b = useWindowSize(), width = _b.width, height = _b.height; - var _variant = variant ? variant : height && width && height > 1.5 * width ? 'bottom' : variant; - return start && width && height ? (jsx(ReactConfetti, { style: { zIndex: 1401 }, numberOfPieces: 400, recycle: false, run: true, width: width, height: height, confettiSource: { - h: height, - w: width, - x: 0, - y: _variant === 'top' ? height * 0.25 : _variant === 'bottom' ? height * 0.75 : height * 0.5, - }, initialVelocityX: 15, initialVelocityY: 30, gravity: 0.45, tweenDuration: 100, wind: 0.05 }, void 0)) : null; +/** + * Does a reverse lookup for an address to find its ENS name. + * Note this is not the same as looking up an ENS name to find an address. + */ +function useENSName(address) { + var _a, _b + var debouncedAddress = useDebounce(address, 200) + var ensNodeArgument = useMemo( + function () { + if (!debouncedAddress || !isAddress(debouncedAddress)) return [undefined] + return [namehash(debouncedAddress.toLowerCase().substr(2) + '.addr.reverse')] + }, + [debouncedAddress] + ) + var registrarContract = useENSRegistrarContract(false) + var resolverAddress = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument) + var resolverAddressResult = (_a = resolverAddress.result) === null || _a === void 0 ? void 0 : _a[0] + var resolverContract = useENSResolverContract( + resolverAddressResult && !isZero(resolverAddressResult) ? resolverAddressResult : undefined, + false + ) + var nameCallRes = useSingleCallResult(resolverContract, 'name', ensNodeArgument) + var name = (_b = nameCallRes.result) === null || _b === void 0 ? void 0 : _b[0] + /* ENS does not enforce that an address owns a .eth domain before setting it as a reverse proxy + and recommends that you perform a match on the forward resolution + see: https://docs.ens.domains/dapp-developer-guide/resolving-names#reverse-resolution + */ + var fwdAddr = useENSAddress(name) + var checkedName = address === (fwdAddr === null || fwdAddr === void 0 ? void 0 : fwdAddr.address) ? name : null + var changed = debouncedAddress !== address + return useMemo( + function () { + return { + ENSName: changed ? null : checkedName, + loading: changed || resolverAddress.loading || nameCallRes.loading, + } + }, + [changed, nameCallRes.loading, checkedName, resolverAddress.loading] + ) } -var uImage = "10f062d02df4af77.png"; +/** + * Given a name or address, does a lookup to resolve to an address and name + * @param nameOrAddress ENS name or address + */ +function useENS(nameOrAddress) { + var validated = isAddress(nameOrAddress) + var reverseLookup = useENSName(validated ? validated : undefined) + var lookup = useENSAddress(nameOrAddress) + return useMemo( + function () { + return { + loading: reverseLookup.loading || lookup.loading, + address: validated ? validated : lookup.address, + name: reverseLookup.ENSName + ? reverseLookup.ENSName + : !validated && lookup.address + ? nameOrAddress || null + : null, + } + }, + [lookup.address, lookup.loading, nameOrAddress, reverseLookup.ENSName, reverseLookup.loading, validated] + ) +} -var noise = "f158a440053a5ad2.png"; +/** + * Returns the gas value plus a margin for unexpected or variable gas costs + * @param value the gas value to pad + */ +function calculateGasMargin(value) { + return value.mul(120).div(100) +} -var xlUnicorn = "c2cd04251aa24c34.png"; +/** + * Be careful adding to this enum, always assign a unique value (typescript will not prevent duplicate values). + * These values is persisted in state and if you change the value it will cause errors + */ +var TransactionType +;(function (TransactionType) { + TransactionType[(TransactionType['APPROVAL'] = 0)] = 'APPROVAL' + TransactionType[(TransactionType['SWAP'] = 1)] = 'SWAP' + TransactionType[(TransactionType['DEPOSIT_LIQUIDITY_STAKING'] = 2)] = 'DEPOSIT_LIQUIDITY_STAKING' + TransactionType[(TransactionType['WITHDRAW_LIQUIDITY_STAKING'] = 3)] = 'WITHDRAW_LIQUIDITY_STAKING' + TransactionType[(TransactionType['CLAIM'] = 4)] = 'CLAIM' + TransactionType[(TransactionType['VOTE'] = 5)] = 'VOTE' + TransactionType[(TransactionType['DELEGATE'] = 6)] = 'DELEGATE' + TransactionType[(TransactionType['WRAP'] = 7)] = 'WRAP' + TransactionType[(TransactionType['CREATE_V3_POOL'] = 8)] = 'CREATE_V3_POOL' + TransactionType[(TransactionType['ADD_LIQUIDITY_V3_POOL'] = 9)] = 'ADD_LIQUIDITY_V3_POOL' + TransactionType[(TransactionType['ADD_LIQUIDITY_V2_POOL'] = 10)] = 'ADD_LIQUIDITY_V2_POOL' + TransactionType[(TransactionType['MIGRATE_LIQUIDITY_V3'] = 11)] = 'MIGRATE_LIQUIDITY_V3' + TransactionType[(TransactionType['COLLECT_FEES'] = 12)] = 'COLLECT_FEES' + TransactionType[(TransactionType['REMOVE_LIQUIDITY_V3'] = 13)] = 'REMOVE_LIQUIDITY_V3' + TransactionType[(TransactionType['SUBMIT_PROPOSAL'] = 14)] = 'SUBMIT_PROPOSAL' +})(TransactionType || (TransactionType = {})) +var addTransaction = createAction('transactions/addTransaction') +var clearAllTransactions = createAction('transactions/clearAllTransactions') +var finalizeTransaction = createAction('transactions/finalizeTransaction') +var checkedTransaction = createAction('transactions/checkedTransaction') + +var SUPPORTED_TRANSACTION_TYPES = [ + TransactionType.ADD_LIQUIDITY_V2_POOL, + TransactionType.ADD_LIQUIDITY_V3_POOL, + TransactionType.CREATE_V3_POOL, + TransactionType.REMOVE_LIQUIDITY_V3, + TransactionType.SWAP, +] +var FIREBASE_API_KEY = process.env.REACT_APP_FIREBASE_KEY +var firebaseEnabled = typeof FIREBASE_API_KEY !== 'undefined' +if (firebaseEnabled) initializeFirebase() +function useMonitoringEventCallback() { + var chainId = useActiveWeb3React().chainId + return useCallback( + function log(type, _a) { + var transactionResponse = _a.transactionResponse, + walletAddress = _a.walletAddress + return __awaiter(this, void 0, void 0, function () { + var db + return __generator(this, function (_b) { + if (!firebaseEnabled) return [2 /*return*/] + db = getDatabase() + if (!walletAddress) { + console.debug('Wallet address required to log monitoring events.') + return [2 /*return*/] + } + try { + push(ref(db, 'trm'), { + chainId, + origin: window.location.origin, + timestamp: Date.now(), + tx: transactionResponse, + type, + walletAddress, + }) + } catch (e) { + console.debug('Error adding document: ', e) + } + return [2 /*return*/] + }) + }) + }, + [chainId] + ) +} +function useTransactionMonitoringEventCallback() { + var account = useActiveWeb3React().account + var log = useMonitoringEventCallback() + return useCallback( + function (info, transactionResponse) { + if (SUPPORTED_TRANSACTION_TYPES.includes(info.type)) { + log(TransactionType[info.type], { + transactionResponse: (function (_a) { + var hash = _a.hash, + v = _a.v, + r = _a.r, + s = _a.s + return { hash, v, r, s } + })(transactionResponse), + walletAddress: account !== null && account !== void 0 ? account : undefined, + }) + } + }, + [account, log] + ) +} +function useWalletConnectMonitoringEventCallback() { + var log = useMonitoringEventCallback() + return useCallback( + function (walletAddress) { + log('WALLET_CONNECTED', { transactionResponse: { hash: '', r: '', s: '', v: -1 }, walletAddress }) + }, + [log] + ) +} +function initializeFirebase() { + initializeApp({ + apiKey: process.env.REACT_APP_FIREBASE_KEY, + authDomain: 'interface-monitoring.firebaseapp.com', + databaseURL: 'https://interface-monitoring-default-rtdb.firebaseio.com', + projectId: 'interface-monitoring', + storageBucket: 'interface-monitoring.appspot.com', + messagingSenderId: '968187720053', + appId: '1:968187720053:web:acedf72dce629d470be33c', + }) +} -var DataCard = styled(AutoColumn)(templateObject_1$1f || (templateObject_1$1f = __makeTemplateObject(["\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #2172e5 100%);\n border-radius: 12px;\n width: 100%;\n position: relative;\n overflow: hidden;\n"], ["\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #2172e5 100%);\n border-radius: 12px;\n width: 100%;\n position: relative;\n overflow: hidden;\n"]))); -var CardBGImage = styled.span(templateObject_2$V || (templateObject_2$V = __makeTemplateObject(["\n background: url(", ");\n width: 1000px;\n height: 600px;\n position: absolute;\n border-radius: 12px;\n opacity: 0.4;\n top: -100px;\n left: -100px;\n transform: rotate(-15deg);\n user-select: none;\n ", "\n"], ["\n background: url(", ");\n width: 1000px;\n height: 600px;\n position: absolute;\n border-radius: 12px;\n opacity: 0.4;\n top: -100px;\n left: -100px;\n transform: rotate(-15deg);\n user-select: none;\n ", "\n"])), uImage, function (_a) { - var desaturate = _a.desaturate; - return desaturate && "filter: saturate(0)"; -}); -var CardBGImageSmaller = styled.span(templateObject_3$M || (templateObject_3$M = __makeTemplateObject(["\n background: url(", ");\n width: 1200px;\n height: 1200px;\n position: absolute;\n border-radius: 12px;\n top: -300px;\n left: -300px;\n opacity: 0.4;\n user-select: none;\n\n ", "\n"], ["\n background: url(", ");\n width: 1200px;\n height: 1200px;\n position: absolute;\n border-radius: 12px;\n top: -300px;\n left: -300px;\n opacity: 0.4;\n user-select: none;\n\n ", "\n"])), xlUnicorn, function (_a) { - var desaturate = _a.desaturate; - return desaturate && "filter: saturate(0)"; -}); -var CardNoise = styled.span(templateObject_4$B || (templateObject_4$B = __makeTemplateObject(["\n background: url(", ");\n background-size: cover;\n mix-blend-mode: overlay;\n border-radius: 12px;\n width: 100%;\n height: 100%;\n opacity: 0.15;\n position: absolute;\n top: 0;\n left: 0;\n user-select: none;\n"], ["\n background: url(", ");\n background-size: cover;\n mix-blend-mode: overlay;\n border-radius: 12px;\n width: 100%;\n height: 100%;\n opacity: 0.15;\n position: absolute;\n top: 0;\n left: 0;\n user-select: none;\n"])), noise); -var CardSection = styled(AutoColumn)(templateObject_5$s || (templateObject_5$s = __makeTemplateObject(["\n padding: 1rem;\n z-index: 1;\n opacity: ", ";\n"], ["\n padding: 1rem;\n z-index: 1;\n opacity: ", ";\n"])), function (_a) { - var disabled = _a.disabled; - return disabled && '0.4'; -}); -var Break$1 = styled.div(templateObject_6$m || (templateObject_6$m = __makeTemplateObject(["\n width: 100%;\n background-color: rgba(255, 255, 255, 0.2);\n height: 1px;\n"], ["\n width: 100%;\n background-color: rgba(255, 255, 255, 0.2);\n height: 1px;\n"]))); -var templateObject_1$1f, templateObject_2$V, templateObject_3$M, templateObject_4$B, templateObject_5$s, templateObject_6$m; +// helper that can take a ethers library transaction response and add it to the list of transactions +function useTransactionAdder() { + var _a = useActiveWeb3React(), + chainId = _a.chainId, + account = _a.account + var dispatch = useAppDispatch() + var logMonitoringEvent = useTransactionMonitoringEventCallback() + return useCallback( + function (response, info) { + if (!account) return + if (!chainId) return + var hash = response.hash + if (!hash) { + throw Error('No transaction hash found.') + } + dispatch(addTransaction({ hash, from: account, info, chainId })) + logMonitoringEvent(info, response) + }, + [account, chainId, dispatch, logMonitoringEvent] + ) +} +// returns all the transactions for the current chain +function useAllTransactions() { + var _a + var chainId = useActiveWeb3React().chainId + var state = useAppSelector(function (state) { + return state.transactions + }) + return chainId ? ((_a = state[chainId]) !== null && _a !== void 0 ? _a : {}) : {} +} +function useTransaction(transactionHash) { + var allTransactions = useAllTransactions() + if (!transactionHash) { + return undefined + } + return allTransactions[transactionHash] +} +function useIsTransactionPending(transactionHash) { + var transactions = useAllTransactions() + if (!transactionHash || !transactions[transactionHash]) return false + return !transactions[transactionHash].receipt +} +function useIsTransactionConfirmed(transactionHash) { + var transactions = useAllTransactions() + if (!transactionHash || !transactions[transactionHash]) return false + return Boolean(transactions[transactionHash].receipt) +} +/** + * Returns whether a transaction happened in the last day (86400 seconds * 1000 milliseconds / second) + * @param tx to check for recency + */ +function isTransactionRecent(tx) { + return new Date().getTime() - tx.addedTime < 86400000 +} +// returns whether a token has a pending approval transaction +function useHasPendingApproval(token, spender) { + var allTransactions = useAllTransactions() + return useMemo( + function () { + return ( + typeof (token === null || token === void 0 ? void 0 : token.address) === 'string' && + typeof spender === 'string' && + Object.keys(allTransactions).some(function (hash) { + var tx = allTransactions[hash] + if (!tx) return false + if (tx.receipt) { + return false + } else { + if (tx.info.type !== TransactionType.APPROVAL) return false + return tx.info.spender === spender && tx.info.tokenAddress === token.address && isTransactionRecent(tx) + } + }) + ) + }, + [allTransactions, spender, token === null || token === void 0 ? void 0 : token.address] + ) +} +// watch for submissions to claim +// return null if not done loading, return undefined if not found +function useUserHasSubmittedClaim(account) { + var allTransactions = useAllTransactions() + // get the txn if it has been submitted + var claimTxn = useMemo( + function () { + var txnIndex = Object.keys(allTransactions).find(function (hash) { + var tx = allTransactions[hash] + return tx.info.type === TransactionType.CLAIM && tx.info.recipient === account + }) + return txnIndex && allTransactions[txnIndex] ? allTransactions[txnIndex] : undefined + }, + [account, allTransactions] + ) + return { claimSubmitted: Boolean(claimTxn), claimTxn } +} + +var FETCH_CLAIM_MAPPING_PROMISE = null +function fetchClaimMapping() { + return FETCH_CLAIM_MAPPING_PROMISE !== null && FETCH_CLAIM_MAPPING_PROMISE !== void 0 + ? FETCH_CLAIM_MAPPING_PROMISE + : (FETCH_CLAIM_MAPPING_PROMISE = fetch( + 'https://raw.githubusercontent.com/Uniswap/mrkl-drop-data-chunks/final/chunks/mapping.json' + ) + .then(function (res) { + return res.json() + }) + .catch(function (error) { + console.error('Failed to get claims mapping', error) + FETCH_CLAIM_MAPPING_PROMISE = null + })) +} +var FETCH_CLAIM_FILE_PROMISES = {} +function fetchClaimFile(key) { + var _a + return (_a = FETCH_CLAIM_FILE_PROMISES[key]) !== null && _a !== void 0 + ? _a + : (FETCH_CLAIM_FILE_PROMISES[key] = fetch( + 'https://raw.githubusercontent.com/Uniswap/mrkl-drop-data-chunks/final/chunks/' + key + '.json' + ) + .then(function (res) { + return res.json() + }) + .catch(function (error) { + console.error('Failed to get claim file mapping for starting address ' + key, error) + delete FETCH_CLAIM_FILE_PROMISES[key] + })) +} +var FETCH_CLAIM_PROMISES = {} +// returns the claim for the given address, or null if not valid +function fetchClaim(account) { + var _a + var formatted = isAddress(account) + if (!formatted) return Promise.reject(new Error('Invalid address')) + return (_a = FETCH_CLAIM_PROMISES[account]) !== null && _a !== void 0 + ? _a + : (FETCH_CLAIM_PROMISES[account] = fetchClaimMapping() + .then(function (mapping) { + var e_1, _a + var sorted = Object.keys(mapping).sort(function (a, b) { + return a.toLowerCase() < b.toLowerCase() ? -1 : 1 + }) + try { + for ( + var sorted_1 = __values(sorted), sorted_1_1 = sorted_1.next(); + !sorted_1_1.done; + sorted_1_1 = sorted_1.next() + ) { + var startingAddress = sorted_1_1.value + var lastAddress = mapping[startingAddress] + if (startingAddress.toLowerCase() <= formatted.toLowerCase()) { + if (formatted.toLowerCase() <= lastAddress.toLowerCase()) { + return startingAddress + } + } else { + throw new Error('Claim for ' + formatted + ' was not found in partial search') + } + } + } catch (e_1_1) { + e_1 = { error: e_1_1 } + } finally { + try { + if (sorted_1_1 && !sorted_1_1.done && (_a = sorted_1.return)) _a.call(sorted_1) + } finally { + if (e_1) throw e_1.error + } + } + throw new Error('Claim for ' + formatted + ' was not found after searching all mappings') + }) + .then(fetchClaimFile) + .then(function (result) { + if (result[formatted]) return result[formatted] + throw new Error('Claim for ' + formatted + ' was not found in claim file!') + }) + .catch(function (error) { + console.debug('Claim fetch failed', error) + throw error + })) +} +// parse distributorContract blob and detect if user has claim data +// null means we know it does not +function useUserClaimData(account) { + var chainId = useActiveWeb3React().chainId + var _a = __read(useState({}), 2), + claimInfo = _a[0], + setClaimInfo = _a[1] + useEffect( + function () { + if (!account || chainId !== 1) return + fetchClaim(account) + .then(function (accountClaimInfo) { + return setClaimInfo(function (claimInfo) { + var _a + return __assign(__assign({}, claimInfo), ((_a = {}), (_a[account] = accountClaimInfo), _a)) + }) + }) + .catch(function () { + setClaimInfo(function (claimInfo) { + var _a + return __assign(__assign({}, claimInfo), ((_a = {}), (_a[account] = null), _a)) + }) + }) + }, + [account, chainId] + ) + return account && chainId === 1 ? claimInfo[account] : null +} +// check if user is in blob and has not yet claimed UNI +function useUserHasAvailableClaim(account) { + var _a + var userClaimData = useUserClaimData(account) + var distributorContract = useMerkleDistributorContract() + var isClaimedResult = useSingleCallResult(distributorContract, 'isClaimed', [ + userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.index, + ]) + // user is in blob and contract marks as unclaimed + return Boolean( + userClaimData && + !isClaimedResult.loading && + ((_a = isClaimedResult.result) === null || _a === void 0 ? void 0 : _a[0]) === false + ) +} +function useUserUnclaimedAmount(account) { + var chainId = useActiveWeb3React().chainId + var userClaimData = useUserClaimData(account) + var canClaim = useUserHasAvailableClaim(account) + var uni = chainId ? UNI[chainId] : undefined + if (!uni) return undefined + if (!canClaim || !userClaimData) { + return CurrencyAmount.fromRawAmount(uni, JSBI.BigInt(0)) + } + return CurrencyAmount.fromRawAmount(uni, JSBI.BigInt(userClaimData.amount)) +} +function useClaimCallback(account) { + // get claim data for this account + var _a = useActiveWeb3React(), + library = _a.library, + chainId = _a.chainId + var claimData = useUserClaimData(account) + // used for popup summary + var unclaimedAmount = useUserUnclaimedAmount(account) + var addTransaction = useTransactionAdder() + var distributorContract = useMerkleDistributorContract() + var claimCallback = function () { + return __awaiter(this, void 0, void 0, function () { + var args + var _a + return __generator(this, function (_b) { + if (!claimData || !account || !library || !chainId || !distributorContract) return [2 /*return*/] + args = [claimData.index, account, claimData.amount, claimData.proof] + return [ + 2 /*return*/, + (_a = distributorContract.estimateGas)['claim'] + .apply(_a, __spreadArray(__spreadArray([], __read(args), false), [{}], false)) + .then(function (estimatedGasLimit) { + return distributorContract.claim + .apply( + distributorContract, + __spreadArray( + __spreadArray([], __read(args), false), + [{ value: null, gasLimit: calculateGasMargin(estimatedGasLimit) }], + false + ) + ) + .then(function (response) { + addTransaction(response, { + type: TransactionType.CLAIM, + recipient: account, + uniAmountRaw: + unclaimedAmount === null || unclaimedAmount === void 0 + ? void 0 + : unclaimedAmount.quotient.toString(), + }) + return response.hash + }) + }), + ] + }) + }) + } + return { claimCallback } +} -var parser = new UAParser(window.navigator.userAgent); -var type$1 = parser.getDevice().type; -var userAgent = parser.getResult(); -var isMobile = type$1 === 'mobile' || type$1 === 'tablet'; +var _a$d, _b$4, _c$3, _d$2, _e$1, _f, _g, _h +var WRAPPED_NATIVE_CURRENCIES_ONLY = Object.fromEntries( + Object.entries(WRAPPED_NATIVE_CURRENCY).map(function (_a) { + var _b = __read(_a, 2), + key = _b[0], + value = _b[1] + return [key, [value]] + }) +) +// used to construct intermediary pairs for trading +var BASES_TO_CHECK_TRADES_AGAINST = __assign( + __assign({}, WRAPPED_NATIVE_CURRENCIES_ONLY), + ((_a$d = {}), + (_a$d[SupportedChainId.MAINNET] = __spreadArray( + __spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.MAINNET]), false), + [DAI, USDC, USDT, WBTC], + false + )), + (_a$d[SupportedChainId.OPTIMISM] = __spreadArray( + __spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.OPTIMISM]), false), + [DAI_OPTIMISM, USDT_OPTIMISM, WBTC_OPTIMISM], + false + )), + (_a$d[SupportedChainId.ARBITRUM_ONE] = __spreadArray( + __spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.ARBITRUM_ONE]), false), + [DAI_ARBITRUM_ONE, USDT_ARBITRUM_ONE, WBTC_ARBITRUM_ONE], + false + )), + (_a$d[SupportedChainId.POLYGON] = __spreadArray( + __spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.POLYGON]), false), + [DAI_POLYGON, USDC_POLYGON, USDT_POLYGON, WETH_POLYGON], + false + )), + _a$d) +) +var ADDITIONAL_BASES = + ((_b$4 = {}), + (_b$4[SupportedChainId.MAINNET] = + ((_c$3 = { + '0xF16E4d813f4DcfDe4c5b44f305c908742De84eF0': [ETH2X_FLI], + }), + (_c$3[rETH2.address] = [sETH2]), + (_c$3[SWISE.address] = [sETH2]), + (_c$3[FEI.address] = [TRIBE]), + (_c$3[TRIBE.address] = [FEI]), + (_c$3[FRAX.address] = [FXS]), + (_c$3[FXS.address] = [FRAX]), + (_c$3[WBTC.address] = [renBTC]), + (_c$3[renBTC.address] = [WBTC]), + _c$3)), + _b$4) +/** + * Some tokens can only be swapped via certain pairs, so we override the list of bases that are considered for these + * tokens. + */ +var CUSTOM_BASES = + ((_d$2 = {}), + (_d$2[SupportedChainId.MAINNET] = + ((_e$1 = {}), (_e$1[AMPL.address] = [DAI, WRAPPED_NATIVE_CURRENCY[SupportedChainId.MAINNET]]), _e$1)), + _d$2) +/** + * Shows up in the currency select for swap and add liquidity + */ +var COMMON_BASES = + ((_f = {}), + (_f[SupportedChainId.MAINNET] = [ + nativeOnChain(SupportedChainId.MAINNET), + DAI, + USDC, + USDT, + WBTC, + WRAPPED_NATIVE_CURRENCY[SupportedChainId.MAINNET], + ]), + (_f[SupportedChainId.ROPSTEN] = [ + nativeOnChain(SupportedChainId.ROPSTEN), + WRAPPED_NATIVE_CURRENCY[SupportedChainId.ROPSTEN], + ]), + (_f[SupportedChainId.RINKEBY] = [ + nativeOnChain(SupportedChainId.RINKEBY), + WRAPPED_NATIVE_CURRENCY[SupportedChainId.RINKEBY], + ]), + (_f[SupportedChainId.GOERLI] = [ + nativeOnChain(SupportedChainId.GOERLI), + WRAPPED_NATIVE_CURRENCY[SupportedChainId.GOERLI], + ]), + (_f[SupportedChainId.KOVAN] = [ + nativeOnChain(SupportedChainId.KOVAN), + WRAPPED_NATIVE_CURRENCY[SupportedChainId.KOVAN], + ]), + (_f[SupportedChainId.ARBITRUM_ONE] = [ + nativeOnChain(SupportedChainId.ARBITRUM_ONE), + DAI_ARBITRUM_ONE, + USDC_ARBITRUM, + USDT_ARBITRUM_ONE, + WBTC_ARBITRUM_ONE, + WRAPPED_NATIVE_CURRENCY[SupportedChainId.ARBITRUM_ONE], + ]), + (_f[SupportedChainId.ARBITRUM_RINKEBY] = [ + nativeOnChain(SupportedChainId.ARBITRUM_RINKEBY), + WRAPPED_NATIVE_CURRENCY[SupportedChainId.ARBITRUM_RINKEBY], + ]), + (_f[SupportedChainId.OPTIMISM] = [ + nativeOnChain(SupportedChainId.OPTIMISM), + DAI_OPTIMISM, + USDC_OPTIMISM, + USDT_OPTIMISM, + WBTC_OPTIMISM, + ]), + (_f[SupportedChainId.OPTIMISTIC_KOVAN] = [nativeOnChain(SupportedChainId.OPTIMISTIC_KOVAN)]), + (_f[SupportedChainId.POLYGON] = [ + nativeOnChain(SupportedChainId.POLYGON), + WETH_POLYGON, + USDC_POLYGON, + DAI_POLYGON, + USDT_POLYGON, + WBTC_POLYGON, + ]), + (_f[SupportedChainId.POLYGON_MUMBAI] = [ + nativeOnChain(SupportedChainId.POLYGON_MUMBAI), + WRAPPED_NATIVE_CURRENCY[SupportedChainId.POLYGON_MUMBAI], + WETH_POLYGON_MUMBAI, + ]), + _f) +// used to construct the list of all pairs we consider by default in the frontend +__assign( + __assign({}, WRAPPED_NATIVE_CURRENCIES_ONLY), + ((_g = {}), + (_g[SupportedChainId.MAINNET] = __spreadArray( + __spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.MAINNET]), false), + [DAI, USDC, USDT, WBTC], + false + )), + _g) +) +;(_h = {}), + (_h[SupportedChainId.MAINNET] = [ + [ + new Token(SupportedChainId.MAINNET, '0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643', 8, 'cDAI', 'Compound Dai'), + new Token( + SupportedChainId.MAINNET, + '0x39AA39c021dfbaE8faC545936693aC917d5E7563', + 8, + 'cUSDC', + 'Compound USD Coin' + ), + ], + [USDC, USDT], + [DAI, USDT], + ]), + _h + +var EthereumLogo = + 'data:image/png;base64,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' + +var arbitrumLogoUrl = + 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20viewBox%3D%220%200%20470.287%20514.251%22%20enable-background%3D%22new%200%200%20470.287%20514.251%22%20xml%3Aspace%3D%22preserve%22%3E%3Cg%20id%3D%22Background%22%3E%3C%2Fg%3E%3Cg%20id%3D%22Logos_and_symbols%22%3E%20%3Cg%20id%3D%22SYMBOL_VER_3%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_4_3_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_1_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_1_%22%3E%20%20%3Cg%20id%3D%22_x31_-3%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_14_%22%3E%20%20%20%3Cpath%20fill%3D%22%232D374B%22%20d%3D%22M291.134%2C237.469l35.654-60.5l96.103%2C149.684l0.046%2C28.727l-0.313-197.672%20%20%20%20c-0.228-4.832-2.794-9.252-6.887-11.859L242.715%2C46.324c-4.045-1.99-9.18-1.967-13.22%2C0.063c-0.546%2C0.272-1.06%2C0.57-1.548%2C0.895%20%20%20%20l-0.604%2C0.379L59.399%2C144.983l-0.651%2C0.296c-0.838%2C0.385-1.686%2C0.875-2.48%2C1.444c-3.185%2C2.283-5.299%2C5.66-5.983%2C9.448%20%20%20%20c-0.103%2C0.574-0.179%2C1.158-0.214%2C1.749l0.264%2C161.083l89.515-138.745c11.271-18.397%2C35.825-24.323%2C58.62-24.001l26.753%2C0.706%20%20%20%20L67.588%2C409.765l18.582%2C10.697L245.692%2C157.22l70.51-0.256L157.091%2C426.849l66.306%2C38.138l7.922%2C4.556%20%20%20%20c3.351%2C1.362%2C7.302%2C1.431%2C10.681%2C0.21l175.453-101.678l-33.544%2C19.438L291.134%2C237.469z%20M304.736%2C433.395l-66.969-105.108%20%20%20%20l40.881-69.371l87.952%2C138.628L304.736%2C433.395z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%2328A0F0%22%20points%3D%22237.768%2C328.286%20304.736%2C433.395%20366.601%2C397.543%20278.648%2C258.915%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2328A0F0%22%20d%3D%22M422.937%2C355.379l-0.046-28.727l-96.103-149.684l-35.654%2C60.5l92.774%2C150.043l33.544-19.438%20%20%20%20c3.29-2.673%2C5.281-6.594%2C5.49-10.825L422.937%2C355.379z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23FFFFFF%22%20d%3D%22M20.219%2C382.469l47.369%2C27.296l157.634-252.801l-26.753-0.706c-22.795-0.322-47.35%2C5.604-58.62%2C24.001%20%20%20%20L50.334%2C319.004l-30.115%2C46.271V382.469z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%23FFFFFF%22%20points%3D%22316.202%2C156.964%20245.692%2C157.22%2086.17%2C420.462%20141.928%2C452.565%20157.091%2C426.849%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2396BEDC%22%20d%3D%22M452.65%2C156.601c-0.59-14.746-8.574-28.245-21.08-36.104L256.28%2C19.692%20%20%20%20c-12.371-6.229-27.825-6.237-40.218-0.004c-1.465%2C0.739-170.465%2C98.752-170.465%2C98.752c-2.339%2C1.122-4.592%2C2.458-6.711%2C3.975%20%20%20%20c-11.164%2C8.001-17.969%2C20.435-18.668%2C34.095v208.765l30.115-46.271L50.07%2C157.921c0.035-0.589%2C0.109-1.169%2C0.214-1.741%20%20%20%20c0.681-3.79%2C2.797-7.171%2C5.983-9.456c0.795-0.569%2C172.682-100.064%2C173.228-100.337c4.04-2.029%2C9.175-2.053%2C13.22-0.063%20%20%20%20l173.022%2C99.523c4.093%2C2.607%2C6.659%2C7.027%2C6.887%2C11.859v199.542c-0.209%2C4.231-1.882%2C8.152-5.172%2C10.825l-33.544%2C19.438%20%20%20%20l-17.308%2C10.031l-61.864%2C35.852l-62.737%2C36.357c-3.379%2C1.221-7.33%2C1.152-10.681-0.21l-74.228-42.693l-15.163%2C25.717%20%20%20%20l66.706%2C38.406c2.206%2C1.255%2C4.171%2C2.367%2C5.784%2C3.272c2.497%2C1.4%2C4.199%2C2.337%2C4.8%2C2.629c4.741%2C2.303%2C11.563%2C3.643%2C17.71%2C3.643%20%20%20%20c5.636%2C0%2C11.132-1.035%2C16.332-3.072l182.225-105.531c10.459-8.104%2C16.612-20.325%2C17.166-33.564V156.601z%22%2F%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_13_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_6_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_3_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_15_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_3_%22%3E%20%20%20%3Cg%20id%3D%22_x33__7_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic%22%3E%20%20%20%3Cg%20id%3D%22_x33__3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_10_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x34__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_2_%22%3E%20%20%20%3Cg%20id%3D%22_x33__6_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_2_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_11_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_5_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_12_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_1_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_9_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_2_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol_1_%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_1_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_7_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_8_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Monochromatic_1_%22%3E%20%20%3Cg%20id%3D%22_x33__4_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E' + +var optimismLogoUrl = + 'data:image/svg+xml,%3Csvg%20width%3D%22170%22%20height%3D%22168%22%20viewBox%3D%220%200%20170%20168%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20clip-path%3D%22url%28%23clip0%29%22%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF505F%22%2F%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF0320%22%2F%3E%3Cpath%20d%3D%22M85.05%200C132.022%200%20170.1%2037.8949%20170.1%2084.6407C170.1%20131.386%200%20131.386%200%2084.6407C0%2037.8949%2038.0782%200%2085.05%200Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.665%2064.0394L112.444%2012.3742L89.0263%2078.9477L144.665%2064.0394Z%22%20fill%3D%22%23FF4E65%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.777%2064.215L112.444%2012.3742L165.349%2058.4347L143.777%2064.215Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.551%2063.613L142.479%20124.467L88.912%2078.5213L144.551%2063.613Z%22%20fill%3D%22%23D0001A%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.663%2063.7886L142.479%20124.467L165.235%2058.0083L143.663%2063.7886Z%22%20fill%3D%22%23FF697B%22%2F%3E%3C%2Fg%3E%3Cdefs%3E%3CclipPath%20id%3D%22clip0%22%3E%3Crect%20width%3D%22170%22%20height%3D%22168%22%20fill%3D%22white%22%2F%3E%3C%2FclipPath%3E%3C%2Fdefs%3E%3C%2Fsvg%3E' + +var polygonMaticLogo = + 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20viewBox%3D%220%200%2038.4%2033.5%22%20style%3D%22enable-background%3Anew%200%200%2038.4%2033.5%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cstyle%20type%3D%22text%2Fcss%22%3E%20.st0%7Bfill%3A%238247E5%3B%7D%3C%2Fstyle%3E%3Cg%3E%20%3Cpath%20class%3D%22st0%22%20d%3D%22M29%2C10.2c-0.7-0.4-1.6-0.4-2.4%2C0L21%2C13.5l-3.8%2C2.1l-5.5%2C3.3c-0.7%2C0.4-1.6%2C0.4-2.4%2C0L5%2C16.3%20%20c-0.7-0.4-1.2-1.2-1.2-2.1v-5c0-0.8%2C0.4-1.6%2C1.2-2.1l4.3-2.5c0.7-0.4%2C1.6-0.4%2C2.4%2C0L16%2C7.2c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v3.3l3.8-2.2V7%20%20c0-0.8-0.4-1.6-1.2-2.1l-8-4.7c-0.7-0.4-1.6-0.4-2.4%2C0L1.2%2C5C0.4%2C5.4%2C0%2C6.2%2C0%2C7v9.4c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l5.5-3.2l3.8-2.2l5.5-3.2c0.7-0.4%2C1.6-0.4%2C2.4%2C0l4.3%2C2.5c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v5c0%2C0.8-0.4%2C1.6-1.2%2C2.1%20%20L29%2C28.8c-0.7%2C0.4-1.6%2C0.4-2.4%2C0l-4.3-2.5c-0.7-0.4-1.2-1.2-1.2-2.1V21l-3.8%2C2.2v3.3c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l8.1-4.7c0.7-0.4%2C1.2-1.2%2C1.2-2.1V17c0-0.8-0.4-1.6-1.2-2.1L29%2C10.2z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E' + +var UNI_LIST = 'https://tokens.uniswap.org' +var AAVE_LIST = 'tokenlist.aave.eth' +var BA_LIST = 'https://raw.githubusercontent.com/The-Blockchain-Association/sec-notice-list/master/ba-sec-list.json' +var CMC_ALL_LIST = 'https://api.coinmarketcap.com/data-api/v3/uniswap/all.json' +var COINGECKO_LIST = 'https://tokens.coingecko.com/uniswap/all.json' +var COMPOUND_LIST = 'https://raw.githubusercontent.com/compound-finance/token-list/master/compound.tokenlist.json' +var GEMINI_LIST = 'https://www.gemini.com/uniswap/manifest.json' +var ARBITRUM_LIST = 'https://bridge.arbitrum.io/token-list-42161.json' +var KLEROS_LIST = 't2crtokens.eth' +var OPTIMISM_LIST = 'https://static.optimism.io/optimism.tokenlist.json' +var ROLL_LIST = 'https://app.tryroll.com/tokens.json' +var SET_LIST = 'https://raw.githubusercontent.com/SetProtocol/uniswap-tokenlist/main/set.tokenlist.json' +var WRAPPED_LIST = 'wrapped.tokensoft.eth' +var UNSUPPORTED_LIST_URLS = [BA_LIST] +// this is the default list of lists that are exposed to users +// lower index == higher priority for token import +var DEFAULT_LIST_OF_LISTS_TO_DISPLAY = [ + UNI_LIST, + COMPOUND_LIST, + AAVE_LIST, + CMC_ALL_LIST, + COINGECKO_LIST, + KLEROS_LIST, + GEMINI_LIST, + WRAPPED_LIST, + SET_LIST, + ROLL_LIST, + ARBITRUM_LIST, + OPTIMISM_LIST, +] +var DEFAULT_LIST_OF_LISTS = __spreadArray( + __spreadArray([], __read(DEFAULT_LIST_OF_LISTS_TO_DISPLAY), false), + __read(UNSUPPORTED_LIST_URLS), + false +) +// default lists to be 'active' aka searched across +var DEFAULT_ACTIVE_LIST_URLS = [UNI_LIST, GEMINI_LIST] + +var _a$c, _b$3 +var INFURA_KEY = process.env.REACT_APP_INFURA_KEY +if (typeof INFURA_KEY === 'undefined') { + throw new Error('REACT_APP_INFURA_KEY must be a defined environment variable') +} +/** + * These are the network URLs used by the interface when there is not another available source of chain data + */ +var INFURA_NETWORK_URLS = + ((_a$c = {}), + (_a$c[SupportedChainId.MAINNET] = 'https://mainnet.infura.io/v3/' + INFURA_KEY), + (_a$c[SupportedChainId.RINKEBY] = 'https://rinkeby.infura.io/v3/' + INFURA_KEY), + (_a$c[SupportedChainId.ROPSTEN] = 'https://ropsten.infura.io/v3/' + INFURA_KEY), + (_a$c[SupportedChainId.GOERLI] = 'https://goerli.infura.io/v3/' + INFURA_KEY), + (_a$c[SupportedChainId.KOVAN] = 'https://kovan.infura.io/v3/' + INFURA_KEY), + (_a$c[SupportedChainId.OPTIMISM] = 'https://optimism-mainnet.infura.io/v3/' + INFURA_KEY), + (_a$c[SupportedChainId.OPTIMISTIC_KOVAN] = 'https://optimism-kovan.infura.io/v3/' + INFURA_KEY), + (_a$c[SupportedChainId.ARBITRUM_ONE] = 'https://arbitrum-mainnet.infura.io/v3/' + INFURA_KEY), + (_a$c[SupportedChainId.ARBITRUM_RINKEBY] = 'https://arbitrum-rinkeby.infura.io/v3/' + INFURA_KEY), + (_a$c[SupportedChainId.POLYGON] = 'https://polygon-mainnet.infura.io/v3/' + INFURA_KEY), + (_a$c[SupportedChainId.POLYGON_MUMBAI] = 'https://polygon-mumbai.infura.io/v3/' + INFURA_KEY), + _a$c) +var NetworkType +;(function (NetworkType) { + NetworkType[(NetworkType['L1'] = 0)] = 'L1' + NetworkType[(NetworkType['L2'] = 1)] = 'L2' +})(NetworkType || (NetworkType = {})) +var CHAIN_INFO = + ((_b$3 = {}), + (_b$3[SupportedChainId.MAINNET] = { + networkType: NetworkType.L1, + docs: 'https://docs.uniswap.org/', + explorer: 'https://etherscan.io/', + infoLink: 'https://info.uniswap.org/#/', + label: 'Ethereum', + logoUrl: EthereumLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, + rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.MAINNET], + }, + }), + (_b$3[SupportedChainId.RINKEBY] = { + networkType: NetworkType.L1, + docs: 'https://docs.uniswap.org/', + explorer: 'https://rinkeby.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/', + label: 'Rinkeby', + logoUrl: EthereumLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Rinkeby Ether', symbol: 'rETH', decimals: 18 }, + rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.RINKEBY], + }, + }), + (_b$3[SupportedChainId.ROPSTEN] = { + networkType: NetworkType.L1, + docs: 'https://docs.uniswap.org/', + explorer: 'https://ropsten.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/', + label: 'Ropsten', + logoUrl: EthereumLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Ropsten Ether', symbol: 'ropETH', decimals: 18 }, + rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.ROPSTEN], + }, + }), + (_b$3[SupportedChainId.KOVAN] = { + networkType: NetworkType.L1, + docs: 'https://docs.uniswap.org/', + explorer: 'https://kovan.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/', + label: 'Kovan', + logoUrl: EthereumLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Kovan Ether', symbol: 'kovETH', decimals: 18 }, + rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.KOVAN], + }, + }), + (_b$3[SupportedChainId.GOERLI] = { + networkType: NetworkType.L1, + docs: 'https://docs.uniswap.org/', + explorer: 'https://goerli.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/', + label: 'Görli', + logoUrl: EthereumLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Görli Ether', symbol: 'görETH', decimals: 18 }, + rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.GOERLI], + }, + }), + (_b$3[SupportedChainId.OPTIMISM] = { + networkType: NetworkType.L2, + blockWaitMsBeforeWarning: ms(templateObject_1$1m || (templateObject_1$1m = __makeTemplateObject(['25m'], ['25m']))), + bridge: 'https://gateway.optimism.io/?chainId=1', + defaultListUrl: OPTIMISM_LIST, + docs: 'https://optimism.io/', + explorer: 'https://optimistic.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/optimism/', + label: 'Optimism', + logoUrl: optimismLogoUrl, + statusPage: 'https://optimism.io/status', + helpCenterUrl: 'https://help.uniswap.org/en/collections/3137778-uniswap-on-optimistic-ethereum-oξ', + addNetworkInfo: { + nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, + rpcUrl: 'https://mainnet.optimism.io', + }, + }), + (_b$3[SupportedChainId.OPTIMISTIC_KOVAN] = { + networkType: NetworkType.L2, + blockWaitMsBeforeWarning: ms(templateObject_2$10 || (templateObject_2$10 = __makeTemplateObject(['25m'], ['25m']))), + bridge: 'https://gateway.optimism.io/', + defaultListUrl: OPTIMISM_LIST, + docs: 'https://optimism.io/', + explorer: 'https://optimistic.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/optimism/', + label: 'Optimistic Kovan', + logoUrl: optimismLogoUrl, + statusPage: 'https://optimism.io/status', + helpCenterUrl: 'https://help.uniswap.org/en/collections/3137778-uniswap-on-optimistic-ethereum-oξ', + addNetworkInfo: { + nativeCurrency: { name: 'Optimistic Kovan Ether', symbol: 'kovOpETH', decimals: 18 }, + rpcUrl: 'https://kovan.optimism.io', + }, + }), + (_b$3[SupportedChainId.ARBITRUM_ONE] = { + networkType: NetworkType.L2, + blockWaitMsBeforeWarning: ms(templateObject_3$T || (templateObject_3$T = __makeTemplateObject(['10m'], ['10m']))), + bridge: 'https://bridge.arbitrum.io/', + docs: 'https://offchainlabs.com/', + explorer: 'https://arbiscan.io/', + infoLink: 'https://info.uniswap.org/#/arbitrum', + label: 'Arbitrum', + logoUrl: arbitrumLogoUrl, + defaultListUrl: ARBITRUM_LIST, + helpCenterUrl: 'https://help.uniswap.org/en/collections/3137787-uniswap-on-arbitrum', + addNetworkInfo: { + nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, + rpcUrl: 'https://arb1.arbitrum.io/rpc', + }, + }), + (_b$3[SupportedChainId.ARBITRUM_RINKEBY] = { + networkType: NetworkType.L2, + blockWaitMsBeforeWarning: ms(templateObject_4$H || (templateObject_4$H = __makeTemplateObject(['10m'], ['10m']))), + bridge: 'https://bridge.arbitrum.io/', + docs: 'https://offchainlabs.com/', + explorer: 'https://rinkeby-explorer.arbitrum.io/', + infoLink: 'https://info.uniswap.org/#/arbitrum/', + label: 'Arbitrum Rinkeby', + logoUrl: arbitrumLogoUrl, + defaultListUrl: ARBITRUM_LIST, + helpCenterUrl: 'https://help.uniswap.org/en/collections/3137787-uniswap-on-arbitrum', + addNetworkInfo: { + nativeCurrency: { name: 'Rinkeby Arbitrum Ether', symbol: 'rinkArbETH', decimals: 18 }, + rpcUrl: 'https://rinkeby.arbitrum.io/rpc', + }, + }), + (_b$3[SupportedChainId.POLYGON] = { + networkType: NetworkType.L1, + blockWaitMsBeforeWarning: ms(templateObject_5$y || (templateObject_5$y = __makeTemplateObject(['10m'], ['10m']))), + bridge: 'https://wallet.polygon.technology/bridge', + docs: 'https://polygon.io/', + explorer: 'https://polygonscan.com/', + infoLink: 'https://info.uniswap.org/#/polygon/', + label: 'Polygon', + logoUrl: polygonMaticLogo, + addNetworkInfo: { + rpcUrl: 'https://polygon-rpc.com/', + nativeCurrency: { name: 'Polygon Matic', symbol: 'MATIC', decimals: 18 }, + }, + }), + (_b$3[SupportedChainId.POLYGON_MUMBAI] = { + networkType: NetworkType.L1, + blockWaitMsBeforeWarning: ms(templateObject_6$p || (templateObject_6$p = __makeTemplateObject(['10m'], ['10m']))), + bridge: 'https://wallet.polygon.technology/bridge', + docs: 'https://polygon.io/', + explorer: 'https://mumbai.polygonscan.com/', + infoLink: 'https://info.uniswap.org/#/polygon/', + label: 'Polygon Mumbai', + logoUrl: polygonMaticLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Polygon Mumbai Matic', symbol: 'mMATIC', decimals: 18 }, + rpcUrl: 'https://rpc-endpoints.superfluid.dev/mumbai', + }, + }), + _b$3) +var templateObject_1$1m, + templateObject_2$10, + templateObject_3$T, + templateObject_4$H, + templateObject_5$y, + templateObject_6$p + +function useNativeCurrency() { + var chainId = useActiveWeb3React().chainId + return useMemo( + function () { + return chainId + ? nativeOnChain(chainId) + : // display mainnet when not connected + nativeOnChain(SupportedChainId.MAINNET) + }, + [chainId] + ) +} -var AnimatedDialogOverlay = animated(DialogOverlay); -// eslint-disable-next-line @typescript-eslint/no-unused-vars -var StyledDialogOverlay = styled(AnimatedDialogOverlay)(templateObject_1$1e || (templateObject_1$1e = __makeTemplateObject(["\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: ", ";\n }\n"], ["\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: ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.modalBG; -}); -var AnimatedDialogContent = animated(DialogContent); -// destructure to not pass custom props to Dialog DOM element -// eslint-disable-next-line @typescript-eslint/no-unused-vars -var StyledDialogContent = styled(function (_a) { - _a.minHeight; _a.maxHeight; _a.mobile; _a.isOpen; var rest = __rest(_a, ["minHeight", "maxHeight", "mobile", "isOpen"]); - return (jsx(AnimatedDialogContent, __assign({}, rest), void 0)); -}).attrs({ - 'aria-label': 'dialog', -})(templateObject_7$i || (templateObject_7$i = __makeTemplateObject(["\n overflow-y: auto;\n\n &[data-reach-dialog-content] {\n margin: 0 0 2rem 0;\n background-color: ", ";\n border: 1px solid ", ";\n box-shadow: 0 4px 8px 0 ", ";\n padding: 0px;\n width: 50vw;\n overflow-y: auto;\n overflow-x: hidden;\n\n align-self: ", ";\n\n max-width: 420px;\n ", "\n ", "\n display: flex;\n border-radius: 20px;\n ", "\n ", "\n }\n"], ["\n overflow-y: auto;\n\n &[data-reach-dialog-content] {\n margin: 0 0 2rem 0;\n background-color: ", ";\n border: 1px solid ", ";\n box-shadow: 0 4px 8px 0 ", ";\n padding: 0px;\n width: 50vw;\n overflow-y: auto;\n overflow-x: hidden;\n\n align-self: ", ";\n\n max-width: 420px;\n ", "\n ", "\n display: flex;\n border-radius: 20px;\n ", "\n ", "\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.bg0; -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var theme = _a.theme; - return transparentize(0.95, theme.shadow1); -}, function (_a) { - var mobile = _a.mobile; - return (mobile ? 'flex-end' : 'center'); -}, function (_a) { - var maxHeight = _a.maxHeight; - return maxHeight && css(templateObject_2$U || (templateObject_2$U = __makeTemplateObject(["\n max-height: ", "vh;\n "], ["\n max-height: ", "vh;\n "])), maxHeight); -}, function (_a) { - var minHeight = _a.minHeight; - return minHeight && css(templateObject_3$L || (templateObject_3$L = __makeTemplateObject(["\n min-height: ", "vh;\n "], ["\n min-height: ", "vh;\n "])), minHeight); -}, function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToMedium(templateObject_4$A || (templateObject_4$A = __makeTemplateObject(["\n width: 65vw;\n margin: 0;\n "], ["\n width: 65vw;\n margin: 0;\n "]))); -}, function (_a) { - var theme = _a.theme, mobile = _a.mobile; - return theme.mediaWidth.upToSmall(templateObject_6$l || (templateObject_6$l = __makeTemplateObject(["\n width: 85vw;\n ", "\n "], ["\n width: 85vw;\n ", "\n "])), mobile && css(templateObject_5$r || (templateObject_5$r = __makeTemplateObject(["\n width: 100vw;\n border-radius: 20px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n "], ["\n width: 100vw;\n border-radius: 20px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n "])))); -}); -function Modal(_a) { - var isOpen = _a.isOpen, onDismiss = _a.onDismiss, _b = _a.minHeight, minHeight = _b === void 0 ? false : _b, _c = _a.maxHeight, maxHeight = _c === void 0 ? 90 : _c, initialFocusRef = _a.initialFocusRef, children = _a.children; - var fadeTransition = useTransition(isOpen, null, { - config: { duration: 200 }, - from: { opacity: 0 }, - enter: { opacity: 1 }, - leave: { opacity: 0 }, - }); - var _d = __read(useSpring(function () { return ({ y: 0, config: { mass: 1, tension: 210, friction: 20 } }); }), 2), y = _d[0].y, set = _d[1]; - var bind = useGesture({ - onDrag: function (state) { - set({ - y: state.down ? state.movement[1] : 0, - }); - if (state.movement[1] > 300 || (state.velocity > 3 && state.direction[1] > 0)) { - onDismiss(); - } - }, - }); - return (jsx(Fragment, { children: fadeTransition.map(function (_a) { - var item = _a.item, key = _a.key, props = _a.props; - return item && (jsx(StyledDialogOverlay, __assign({ style: props, onDismiss: onDismiss, initialFocusRef: initialFocusRef, unstable_lockFocusAcrossFrames: false }, { children: jsxs(StyledDialogContent, __assign({}, (isMobile - ? __assign(__assign({}, bind()), { style: { transform: y.interpolate(function (y) { return "translateY(" + (y > 0 ? y : 0) + "px)"; }) } }) : {}), { "aria-label": "dialog content", minHeight: minHeight, maxHeight: maxHeight, mobile: isMobile }, { children: [!initialFocusRef && isMobile ? jsx("div", { tabIndex: 1 }, void 0) : null, children] }), void 0) }), key)); - }) }, void 0)); -} -var templateObject_1$1e, templateObject_2$U, templateObject_3$L, templateObject_4$A, templateObject_5$r, templateObject_6$l, templateObject_7$i; - -var ContentWrapper$4 = styled(AutoColumn)(templateObject_1$1d || (templateObject_1$1d = __makeTemplateObject(["\n width: 100%;\n"], ["\n width: 100%;\n"]))); -var ModalUpper$1 = styled(DataCard)(templateObject_2$T || (templateObject_2$T = __makeTemplateObject(["\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n"], ["\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n"]))); -var ConfirmOrLoadingWrapper$1 = styled.div(templateObject_3$K || (templateObject_3$K = __makeTemplateObject(["\n width: 100%;\n padding: 24px;\n position: relative;\n background: ", ";\n"], ["\n width: 100%;\n padding: 24px;\n position: relative;\n background: ", ";\n"])), function (_a) { - var activeBG = _a.activeBG; - return activeBG && - 'radial-gradient(76.02% 75.41% at 1.84% 0%, rgba(255, 0, 122, 0.2) 0%, rgba(33, 114, 229, 0.2) 100%), #FFFFFF;'; -}); -var ConfirmedIcon$2 = styled(ColumnCenter)(templateObject_4$z || (templateObject_4$z = __makeTemplateObject(["\n padding: 60px 0;\n"], ["\n padding: 60px 0;\n"]))); -function AddressClaimModal(_a) { - var _b, _c; - var isOpen = _a.isOpen, onDismiss = _a.onDismiss; - var chainId = useActiveWeb3React().chainId; - // state for smart contract input - var _d = __read(useState(''), 2), typed = _d[0], setTyped = _d[1]; - function handleRecipientType(val) { - setTyped(val); - } - // monitor for third party recipient of claim - var parsedAddress = useENS(typed).address; - // used for UI loading states - var _e = __read(useState(false), 2), attempting = _e[0], setAttempting = _e[1]; - // monitor the status of the claim from contracts and txns - var claimCallback = useClaimCallback(parsedAddress).claimCallback; - var unclaimedAmount = useUserUnclaimedAmount(parsedAddress); - // check if the user has something available - var hasAvailableClaim = useUserHasAvailableClaim(parsedAddress); - var _f = __read(useState(), 2), hash = _f[0], setHash = _f[1]; - // monitor the status of the claim from contracts and txns - var claimPending = useIsTransactionPending(hash !== null && hash !== void 0 ? hash : ''); - var claimConfirmed = hash && !claimPending; - // use the hash to monitor this txn - function onClaim() { - setAttempting(true); - claimCallback() - .then(function (hash) { - setHash(hash); - }) - // reset modal and log error - .catch(function (error) { - setAttempting(false); - console.log(error); - }); - } - function wrappedOnDismiss() { - setAttempting(false); - setHash(undefined); - setTyped(''); - onDismiss(); - } - return (jsxs(Modal, __assign({ isOpen: isOpen, onDismiss: wrappedOnDismiss, maxHeight: 90 }, { children: [jsx(Confetti, { start: Boolean(isOpen && claimConfirmed && attempting) }, void 0), !attempting && (jsxs(ContentWrapper$4, __assign({ gap: "lg" }, { children: [jsxs(ModalUpper$1, { children: [jsx(CardBGImage, {}, void 0), jsx(CardNoise, {}, void 0), jsxs(CardSection, __assign({ gap: "md" }, { children: [jsxs(RowBetween, { children: [jsx(ThemedText.White, __assign({ fontWeight: 500 }, { children: jsx(Trans, { children: "Claim UNI Token" }, void 0) }), void 0), jsx(CloseIcon$2, { onClick: wrappedOnDismiss, style: { zIndex: 99 }, stroke: "white" }, void 0)] }, void 0), jsx(ThemedText.White, __assign({ fontWeight: 700, fontSize: 36 }, { children: jsxs(Trans, { children: [unclaimedAmount === null || unclaimedAmount === void 0 ? void 0 : unclaimedAmount.toFixed(0, (_b = { groupSeparator: ',' }) !== null && _b !== void 0 ? _b : '-'), " UNI"] }, void 0) }), void 0)] }), void 0), jsx(Break$1, {}, void 0)] }, void 0), jsxs(AutoColumn, __assign({ gap: "md", style: { padding: '1rem', paddingTop: '0' }, justify: "center" }, { children: [jsx(ThemedText.SubHeader, __assign({ fontWeight: 500 }, { children: jsx(Trans, { children: "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission." }, void 0) }), void 0), jsx(AddressInputPanel, { value: typed, onChange: handleRecipientType }, void 0), parsedAddress && !hasAvailableClaim && (jsx(ThemedText.Error, __assign({ error: true }, { children: jsx(Trans, { children: "Address has no available claim" }, void 0) }), void 0)), jsx(ButtonPrimary, __assign({ disabled: !isAddress$1(parsedAddress !== null && parsedAddress !== void 0 ? parsedAddress : '') || !hasAvailableClaim, padding: "16px 16px", width: "100%", "$borderRadius": "12px", mt: "1rem", onClick: onClaim }, { children: jsx(Trans, { children: "Claim UNI" }, void 0) }), void 0)] }), void 0)] }), void 0)), (attempting || claimConfirmed) && (jsxs(ConfirmOrLoadingWrapper$1, __assign({ activeBG: true }, { children: [jsx(CardNoise, {}, void 0), jsx(CardBGImageSmaller, { desaturate: true }, void 0), jsxs(RowBetween, { children: [jsx("div", {}, void 0), jsx(CloseIcon$2, { onClick: wrappedOnDismiss, style: { zIndex: 99 }, stroke: "black" }, void 0)] }, void 0), jsx(ConfirmedIcon$2, { children: !claimConfirmed ? (jsx(CustomLightSpinner, { src: Circle$1, alt: "loader", size: '90px' }, void 0)) : (jsx(UniTokenAnimated, { width: "72px", src: tokenLogo, alt: "UNI logo" }, void 0)) }, void 0), jsxs(AutoColumn, __assign({ gap: "100px", justify: 'center' }, { children: [jsxs(AutoColumn, __assign({ gap: "12px", justify: 'center' }, { children: [jsx(ThemedText.LargeHeader, __assign({ fontWeight: 600, color: "black" }, { children: claimConfirmed ? jsx(Trans, { children: "Claimed" }, void 0) : jsx(Trans, { children: "Claiming" }, void 0) }), void 0), !claimConfirmed && (jsx(Text$1, __assign({ fontSize: 36, color: '#ff007a', fontWeight: 800 }, { children: jsxs(Trans, { children: [unclaimedAmount === null || unclaimedAmount === void 0 ? void 0 : unclaimedAmount.toFixed(0, (_c = { groupSeparator: ',' }) !== null && _c !== void 0 ? _c : '-'), " UNI"] }, void 0) }), void 0)), parsedAddress && (jsx(ThemedText.LargeHeader, __assign({ fontWeight: 600, color: "black" }, { children: jsxs(Trans, { children: ["for ", shortenAddress(parsedAddress)] }, void 0) }), void 0))] }), void 0), claimConfirmed && (jsx(Fragment, { children: jsxs(ThemedText.SubHeader, __assign({ fontWeight: 500, color: "black" }, { children: [jsxs("span", __assign({ role: "img", "aria-label": "party-hat" }, { children: ["\uD83C\uDF89", ' '] }), void 0), jsx(Trans, { children: "Welcome to team Unicorn :) " }, void 0), jsx("span", __assign({ role: "img", "aria-label": "party-hat" }, { children: "\uD83C\uDF89" }), void 0)] }), void 0) }, void 0)), attempting && !hash && (jsx(ThemedText.SubHeader, __assign({ color: "black" }, { children: jsx(Trans, { children: "Confirm this transaction in your wallet" }, void 0) }), void 0)), attempting && hash && !claimConfirmed && chainId && hash && (jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, hash, ExplorerDataType.TRANSACTION), style: { zIndex: 99 } }, { children: jsx(Trans, { children: "View transaction on Explorer" }, void 0) }), void 0))] }), void 0)] }), void 0))] }), void 0)); -} -var templateObject_1$1d, templateObject_2$T, templateObject_3$K, templateObject_4$z; - -var _a$a; -var ApplicationModal; -(function (ApplicationModal) { - ApplicationModal[ApplicationModal["WALLET"] = 0] = "WALLET"; - ApplicationModal[ApplicationModal["SETTINGS"] = 1] = "SETTINGS"; - ApplicationModal[ApplicationModal["SELF_CLAIM"] = 2] = "SELF_CLAIM"; - ApplicationModal[ApplicationModal["ADDRESS_CLAIM"] = 3] = "ADDRESS_CLAIM"; - ApplicationModal[ApplicationModal["CLAIM_POPUP"] = 4] = "CLAIM_POPUP"; - ApplicationModal[ApplicationModal["MENU"] = 5] = "MENU"; - ApplicationModal[ApplicationModal["DELEGATE"] = 6] = "DELEGATE"; - ApplicationModal[ApplicationModal["VOTE"] = 7] = "VOTE"; - ApplicationModal[ApplicationModal["POOL_OVERVIEW_OPTIONS"] = 8] = "POOL_OVERVIEW_OPTIONS"; - ApplicationModal[ApplicationModal["NETWORK_SELECTOR"] = 9] = "NETWORK_SELECTOR"; - ApplicationModal[ApplicationModal["PRIVACY_POLICY"] = 10] = "PRIVACY_POLICY"; -})(ApplicationModal || (ApplicationModal = {})); -var initialState$8 = { - chainId: null, - openModal: null, - popupList: [], -}; -var applicationSlice = createSlice({ - name: 'application', - initialState: initialState$8, - reducers: { - updateChainId: function (state, action) { - var chainId = action.payload.chainId; - state.chainId = chainId; - }, - setOpenModal: function (state, action) { - state.openModal = action.payload; - }, - addPopup: function (state, _a) { - var _b = _a.payload, content = _b.content, key = _b.key, _c = _b.removeAfterMs, removeAfterMs = _c === void 0 ? DEFAULT_TXN_DISMISS_MS : _c; - state.popupList = (key ? state.popupList.filter(function (popup) { return popup.key !== key; }) : state.popupList).concat([ - { - key: key || nanoid(), - show: true, - content: content, - removeAfterMs: removeAfterMs, - }, - ]); - }, - removePopup: function (state, _a) { - var key = _a.payload.key; - state.popupList.forEach(function (p) { - if (p.key === key) { - p.show = false; - } - }); - }, - }, -}); -var updateChainId = (_a$a = applicationSlice.actions, _a$a.updateChainId), setOpenModal = _a$a.setOpenModal, addPopup = _a$a.addPopup, removePopup = _a$a.removePopup; -var application = applicationSlice.reducer; - -var Field$3; -(function (Field) { - Field["LIQUIDITY_PERCENT"] = "LIQUIDITY_PERCENT"; - Field["LIQUIDITY"] = "LIQUIDITY"; - Field["CURRENCY_A"] = "CURRENCY_A"; - Field["CURRENCY_B"] = "CURRENCY_B"; -})(Field$3 || (Field$3 = {})); -var typeInput$3 = createAction('burn/typeInputBurn'); - -var initialState$7 = { - independentField: Field$3.LIQUIDITY_PERCENT, - typedValue: '0', -}; -var burn = createReducer(initialState$7, function (builder) { - return builder.addCase(typeInput$3, function (state, _a) { - var _b = _a.payload, field = _b.field, typedValue = _b.typedValue; - return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); - }); -}); +var EMPTY_CONNECTOR = initializeConnector(function () { + return EMPTY +}) +atomWithDefault(function () { + return EMPTY_CONNECTOR +}) +atomWithDefault(function () { + return EMPTY_CONNECTOR +}) + +var REGISTRAR_ABI = [ + { + constant: true, + inputs: [ + { + name: 'node', + type: 'bytes32', + }, + ], + name: 'resolver', + outputs: [ + { + name: 'resolverAddress', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, +] +var REGISTRAR_ADDRESS = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e' +var RESOLVER_ABI = [ + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'contenthash', + outputs: [ + { + internalType: 'bytes', + name: '', + type: 'bytes', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, +] +// cache the resolver contracts since most of them are the public resolver +function resolverContract(resolverAddress, provider) { + return new Contract(resolverAddress, RESOLVER_ABI, provider) +} +/** + * Fetches and decodes the result of an ENS contenthash lookup on mainnet to a URI + * @param ensName to resolve + * @param provider provider to use to fetch the data + */ +function resolveENSContentHash(ensName, provider) { + return __awaiter(this, void 0, void 0, function () { + var ensRegistrarContract, hash, resolverAddress + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + ensRegistrarContract = new Contract(REGISTRAR_ADDRESS, REGISTRAR_ABI, provider) + hash = namehash(ensName) + return [4 /*yield*/, ensRegistrarContract.resolver(hash)] + case 1: + resolverAddress = _a.sent() + return [2 /*return*/, resolverContract(resolverAddress, provider).contenthash(hash)] + } + }) + }) +} + +function hexToUint8Array(hex) { + hex = hex.startsWith('0x') ? hex.substr(2) : hex + if (hex.length % 2 !== 0) throw new Error('hex must have length that is multiple of 2') + var arr = new Uint8Array(hex.length / 2) + for (var i = 0; i < arr.length; i++) { + arr[i] = parseInt(hex.substr(i * 2, 2), 16) + } + return arr +} +var UTF_8_DECODER = new TextDecoder('utf-8') +/** + * Returns the URI representation of the content hash for supported codecs + * @param contenthash to decode + */ +function contenthashToUri(contenthash) { + var data = hexToUint8Array(contenthash) + var codec = getNameFromData(data) + switch (codec) { + case 'ipfs-ns': { + var unprefixedData = rmPrefix(data) + var cid = new CID(unprefixedData) + return 'ipfs://' + toB58String(cid.multihash) + } + case 'ipns-ns': { + var unprefixedData = rmPrefix(data) + var cid = new CID(unprefixedData) + var multihash = decode(cid.multihash) + if (multihash.name === 'identity') { + return 'ipns://' + UTF_8_DECODER.decode(multihash.digest).trim() + } else { + return 'ipns://' + toB58String(cid.multihash) + } + } + default: + throw new Error('Unrecognized codec: ' + codec) + } +} -var selectPercent = createAction('burnV3/selectBurnPercent'); +var ENS_NAME_REGEX$1 = /^(([a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\.)+)eth(\/.*)?$/ +function parseENSAddress(ensAddress) { + var match = ensAddress.match(ENS_NAME_REGEX$1) + if (!match) return undefined + return { ensName: match[1].toLowerCase() + 'eth', ensPath: match[4] } +} -var initialState$6 = { - percent: 0, -}; -var burnV3 = createReducer(initialState$6, function (builder) { - return builder.addCase(selectPercent, function (state, _a) { - var percent = _a.payload.percent; - return __assign(__assign({}, state), { percent: percent }); - }); -}); +/** + * Given a URI that may be ipfs, ipns, http, https, ar, or data protocol, return the fetch-able http(s) URLs for the same content + * @param uri to convert to fetch-able http url + */ +function uriToHttp(uri) { + var _a, _b, _c + var protocol = uri.split(':')[0].toLowerCase() + switch (protocol) { + case 'data': + return [uri] + case 'https': + return [uri] + case 'http': + return ['https' + uri.substr(4), uri] + case 'ipfs': + var hash = (_a = uri.match(/^ipfs:(\/\/)?(.*)$/i)) === null || _a === void 0 ? void 0 : _a[2] + return ['https://cloudflare-ipfs.com/ipfs/' + hash + '/', 'https://ipfs.io/ipfs/' + hash + '/'] + case 'ipns': + var name_1 = (_b = uri.match(/^ipns:(\/\/)?(.*)$/i)) === null || _b === void 0 ? void 0 : _b[2] + return ['https://cloudflare-ipfs.com/ipns/' + name_1 + '/', 'https://ipfs.io/ipns/' + name_1 + '/'] + case 'ar': + var tx = (_c = uri.match(/^ar:(\/\/)?(.*)$/i)) === null || _c === void 0 ? void 0 : _c[2] + return ['https://arweave.net/' + tx] + default: + return [] + } +} -var _a$9; -// List of supported subgraphs. Note that the app currently only support one active subgraph at a time -var CHAIN_SUBGRAPH_URL = (_a$9 = {}, - _a$9[SupportedChainId.MAINNET] = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3', - _a$9[SupportedChainId.RINKEBY] = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3', - _a$9[SupportedChainId.ARBITRUM_ONE] = 'https://api.thegraph.com/subgraphs/name/ianlapham/arbitrum-minimal', - _a$9[SupportedChainId.OPTIMISM] = 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-optimism-dev', - _a$9[SupportedChainId.POLYGON] = 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-v3-polygon', - _a$9); -var api$1 = createApi({ - reducerPath: 'dataApi', - baseQuery: graphqlRequestBaseQuery(), - endpoints: function (builder) { return ({ - allV3Ticks: builder.query({ - query: function (_a) { - var poolAddress = _a.poolAddress, _b = _a.skip, skip = _b === void 0 ? 0 : _b; - return ({ - document: gql(templateObject_1$1c || (templateObject_1$1c = __makeTemplateObject(["\n query allV3Ticks($poolAddress: String!, $skip: Int!) {\n ticks(first: 1000, skip: $skip, where: { poolAddress: $poolAddress }, orderBy: tickIdx) {\n tick: tickIdx\n liquidityNet\n price0\n price1\n }\n }\n "], ["\n query allV3Ticks($poolAddress: String!, $skip: Int!) {\n ticks(first: 1000, skip: $skip, where: { poolAddress: $poolAddress }, orderBy: tickIdx) {\n tick: tickIdx\n liquidityNet\n price0\n price1\n }\n }\n "]))), - variables: { - poolAddress: poolAddress, - skip: skip, - }, - }); - }, - }), - feeTierDistribution: builder.query({ - query: function (_a) { - var token0 = _a.token0, token1 = _a.token1; - return ({ - document: gql(templateObject_2$S || (templateObject_2$S = __makeTemplateObject(["\n query feeTierDistribution($token0: String!, $token1: String!) {\n _meta {\n block {\n number\n }\n }\n asToken0: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token0, token1: $token1 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n asToken1: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token1, token1: $token0 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n }\n "], ["\n query feeTierDistribution($token0: String!, $token1: String!) {\n _meta {\n block {\n number\n }\n }\n asToken0: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token0, token1: $token1 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n asToken1: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token1, token1: $token0 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n }\n "]))), - variables: { - token0: token0, - token1: token1, - }, - }); - }, - }), - }); }, -}); -// Graphql query client wrapper that builds a dynamic url based on chain id -function graphqlRequestBaseQuery() { - var _this = this; - return function (_a, _b) { - var document = _a.document, variables = _a.variables; - var getState = _b.getState; - return __awaiter(_this, void 0, void 0, function () { - var chainId, subgraphUrl, error_1, name_1, message, stack, request, response; - var _c; - return __generator(this, function (_d) { - switch (_d.label) { - case 0: - _d.trys.push([0, 2, , 3]); - chainId = getState().application.chainId; - subgraphUrl = chainId ? CHAIN_SUBGRAPH_URL[chainId] : undefined; - if (!subgraphUrl) { - return [2 /*return*/, { - error: { - name: 'UnsupportedChainId', - message: "Subgraph queries against ChainId " + chainId + " are not supported.", - stack: '', - }, - }]; - } - _c = {}; - return [4 /*yield*/, new GraphQLClient(subgraphUrl).request(document, variables)]; - case 1: return [2 /*return*/, (_c.data = _d.sent(), _c.meta = {}, _c)]; - case 2: - error_1 = _d.sent(); - if (error_1 instanceof ClientError) { - name_1 = error_1.name, message = error_1.message, stack = error_1.stack, request = error_1.request, response = error_1.response; - return [2 /*return*/, { error: { name: name_1, message: message, stack: stack }, meta: { request: request, response: response } }]; - } - throw error_1; - case 3: return [2 /*return*/]; - } - }); - }); - }; -} -var templateObject_1$1c, templateObject_2$S; +var ValidationSchema +;(function (ValidationSchema) { + ValidationSchema['LIST'] = 'list' + ValidationSchema['TOKENS'] = 'tokens' +})(ValidationSchema || (ValidationSchema = {})) +var validator = new Promise(function (resolve) { + return __awaiter(void 0, void 0, void 0, function () { + var _a, ajv, schema, validator + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + return [ + 4 /*yield*/, + Promise.all([ + import('ajv'), + Promise.resolve().then(function () { + return tokenlist_schema$1 + }), + ]), + ] + case 1: + ;(_a = __read.apply(void 0, [_b.sent(), 2])), (ajv = _a[0]), (schema = _a[1]) + validator = new ajv.default({ allErrors: true }) + .addSchema(schema, ValidationSchema.LIST) + // Adds a meta scheme of Pick + .addSchema( + __assign(__assign({}, schema), { $id: schema.$id + '#tokens', required: ['tokens'] }), + ValidationSchema.TOKENS + ) + resolve(validator) + return [2 /*return*/] + } + }) + }) +}) +function getValidationErrors(validate) { + var _a, _b + return (_b = + (_a = validate === null || validate === void 0 ? void 0 : validate.errors) === null || _a === void 0 + ? void 0 + : _a + .map(function (error) { + return [error.dataPath, error.message].filter(Boolean).join(' ') + }) + .join('; ')) !== null && _b !== void 0 + ? _b + : 'unknown error' +} +/** + * Validates a token list. + * @param json the TokenList to validate + */ +function validateTokenList(json) { + return __awaiter(this, void 0, void 0, function () { + var validate + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + return [4 /*yield*/, validator] + case 1: + validate = _a.sent().getSchema(ValidationSchema.LIST) + if (validate === null || validate === void 0 ? void 0 : validate(json)) { + return [2 /*return*/, json] + } + throw new Error('Token list failed validation: ' + getValidationErrors(validate)) + } + }) + }) +} -// fired once when the app reloads but before the app renders -// allows any updates to be applied to store data loaded from localStorage -var updateVersion = createAction('global/updateVersion'); +var listCache = new Map() +/** Fetches and validates a token list. */ +function fetchTokenList$1(listUrl, resolveENSContentHash) { + var _a + return __awaiter(this, void 0, void 0, function () { + var cached, + urls, + parsedENS, + contentHashUri, + error_1, + message, + translatedUri, + message, + i, + url, + isLast, + response, + error_2, + message, + message, + json, + list + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + cached = listCache === null || listCache === void 0 ? void 0 : listCache.get(listUrl) // avoid spurious re-fetches + if (cached) { + return [2 /*return*/, cached] + } + parsedENS = parseENSAddress(listUrl) + if (!parsedENS) return [3 /*break*/, 5] + contentHashUri = void 0 + _b.label = 1 + case 1: + _b.trys.push([1, 3, , 4]) + return [4 /*yield*/, resolveENSContentHash(parsedENS.ensName)] + case 2: + contentHashUri = _b.sent() + return [3 /*break*/, 4] + case 3: + error_1 = _b.sent() + message = 'failed to resolve ENS name: ' + parsedENS.ensName + console.debug(message, error_1) + throw new Error(message) + case 4: + translatedUri = void 0 + try { + translatedUri = contenthashToUri(contentHashUri) + } catch (error) { + message = 'failed to translate contenthash to URI: ' + contentHashUri + console.debug(message, error) + throw new Error(message) + } + urls = uriToHttp('' + translatedUri + ((_a = parsedENS.ensPath) !== null && _a !== void 0 ? _a : '')) + return [3 /*break*/, 6] + case 5: + urls = uriToHttp(listUrl) + _b.label = 6 + case 6: + i = 0 + _b.label = 7 + case 7: + if (!(i < urls.length)) return [3 /*break*/, 15] + url = urls[i] + isLast = i === urls.length - 1 + response = void 0 + _b.label = 8 + case 8: + _b.trys.push([8, 10, , 11]) + return [4 /*yield*/, fetch(url, { credentials: 'omit' })] + case 9: + response = _b.sent() + return [3 /*break*/, 11] + case 10: + error_2 = _b.sent() + message = 'failed to fetch list: ' + listUrl + console.debug(message, error_2) + if (isLast) throw new Error(message) + return [3 /*break*/, 14] + case 11: + if (!response.ok) { + message = 'failed to fetch list: ' + listUrl + console.debug(message, response.statusText) + if (isLast) throw new Error(message) + return [3 /*break*/, 14] + } + return [4 /*yield*/, response.json()] + case 12: + json = _b.sent() + return [4 /*yield*/, validateTokenList(json)] + case 13: + list = _b.sent() + listCache === null || listCache === void 0 ? void 0 : listCache.set(listUrl, list) + return [2 /*return*/, list] + case 14: + i++ + return [3 /*break*/, 7] + case 15: + throw new Error('Unrecognized list URL protocol.') + } + }) + }) +} -var fetchTokenList = { - pending: createAction('lists/fetchTokenList/pending'), - fulfilled: createAction('lists/fetchTokenList/fulfilled'), - rejected: createAction('lists/fetchTokenList/rejected'), -}; -// add and remove from list options -var addList = createAction('lists/addList'); -var removeList = createAction('lists/removeList'); -// select which lists to search across from loaded lists -var enableList = createAction('lists/enableList'); -var disableList = createAction('lists/disableList'); -// versioning -var acceptListUpdate = createAction('lists/acceptListUpdate'); - -var NEW_LIST_STATE = { - error: null, - current: null, - loadingRequestId: null, - pendingUpdate: null, -}; -var initialState$5 = { - lastInitializedDefaultListOfLists: DEFAULT_LIST_OF_LISTS, - byUrl: __assign({}, DEFAULT_LIST_OF_LISTS.reduce(function (memo, listUrl) { - memo[listUrl] = NEW_LIST_STATE; - return memo; - }, {})), - activeListUrls: DEFAULT_ACTIVE_LIST_URLS, -}; -var lists = createReducer(initialState$5, function (builder) { - return builder - .addCase(fetchTokenList.pending, function (state, _a) { - var _b, _c, _d, _e; - var _f = _a.payload, requestId = _f.requestId, url = _f.url; - var current = (_c = (_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.current) !== null && _c !== void 0 ? _c : null; - var pendingUpdate = (_e = (_d = state.byUrl[url]) === null || _d === void 0 ? void 0 : _d.pendingUpdate) !== null && _e !== void 0 ? _e : null; - state.byUrl[url] = { - current: current, - pendingUpdate: pendingUpdate, - loadingRequestId: requestId, - error: null, - }; - }) - .addCase(fetchTokenList.fulfilled, function (state, _a) { - var _b, _c, _d; - var _e = _a.payload, requestId = _e.requestId, tokenList = _e.tokenList, url = _e.url; - var current = (_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.current; - var loadingRequestId = (_c = state.byUrl[url]) === null || _c === void 0 ? void 0 : _c.loadingRequestId; - // no-op if update does nothing - if (current) { - var upgradeType = getVersionUpgrade(current.version, tokenList.version); - if (upgradeType === VersionUpgrade.NONE) - return; - if (loadingRequestId === null || loadingRequestId === requestId) { - state.byUrl[url] = { - current: current, - pendingUpdate: tokenList, - loadingRequestId: null, - error: null, - }; - } - } - else { - // activate if on default active - if (DEFAULT_ACTIVE_LIST_URLS.includes(url)) { - (_d = state.activeListUrls) === null || _d === void 0 ? void 0 : _d.push(url); - } - state.byUrl[url] = { - current: tokenList, - pendingUpdate: null, - loadingRequestId: null, - error: null, - }; - } - }) - .addCase(fetchTokenList.rejected, function (state, _a) { - var _b; - var _c = _a.payload, url = _c.url, requestId = _c.requestId, errorMessage = _c.errorMessage; - if (((_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.loadingRequestId) !== requestId) { - // no-op since it's not the latest request - return; - } - state.byUrl[url] = { - current: state.byUrl[url].current ? state.byUrl[url].current : null, - pendingUpdate: null, - loadingRequestId: null, - error: errorMessage, - }; - }) - .addCase(addList, function (state, _a) { - var url = _a.payload; - if (!state.byUrl[url]) { - state.byUrl[url] = NEW_LIST_STATE; - } - }) - .addCase(removeList, function (state, _a) { - var url = _a.payload; - if (state.byUrl[url]) { - delete state.byUrl[url]; - } - // remove list from active urls if needed - if (state.activeListUrls && state.activeListUrls.includes(url)) { - state.activeListUrls = state.activeListUrls.filter(function (u) { return u !== url; }); - } - }) - .addCase(enableList, function (state, _a) { - var url = _a.payload; - if (!state.byUrl[url]) { - state.byUrl[url] = NEW_LIST_STATE; - } - if (state.activeListUrls && !state.activeListUrls.includes(url)) { - state.activeListUrls.push(url); - } - if (!state.activeListUrls) { - state.activeListUrls = [url]; - } - }) - .addCase(disableList, function (state, _a) { - var url = _a.payload; - if (state.activeListUrls && state.activeListUrls.includes(url)) { - state.activeListUrls = state.activeListUrls.filter(function (u) { return u !== url; }); - } - }) - .addCase(acceptListUpdate, function (state, _a) { - var _b; - var url = _a.payload; - if (!((_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.pendingUpdate)) { - throw new Error('accept list update called without pending update'); - } - state.byUrl[url] = __assign(__assign({}, state.byUrl[url]), { current: state.byUrl[url].pendingUpdate, pendingUpdate: null }); - }) - .addCase(updateVersion, function (state) { - // state loaded from localStorage, but new lists have never been initialized - if (!state.lastInitializedDefaultListOfLists) { - state.byUrl = initialState$5.byUrl; - state.activeListUrls = initialState$5.activeListUrls; - } - else if (state.lastInitializedDefaultListOfLists) { - var lastInitializedSet_1 = state.lastInitializedDefaultListOfLists.reduce(function (s, l) { return s.add(l); }, new Set()); - var newListOfListsSet_1 = DEFAULT_LIST_OF_LISTS.reduce(function (s, l) { return s.add(l); }, new Set()); - DEFAULT_LIST_OF_LISTS.forEach(function (listUrl) { - if (!lastInitializedSet_1.has(listUrl)) { - state.byUrl[listUrl] = NEW_LIST_STATE; - } - }); - state.lastInitializedDefaultListOfLists.forEach(function (listUrl) { - if (!newListOfListsSet_1.has(listUrl)) { - delete state.byUrl[listUrl]; - } - }); - } - state.lastInitializedDefaultListOfLists = DEFAULT_LIST_OF_LISTS; - // if no active lists, activate defaults - if (!state.activeListUrls) { - state.activeListUrls = DEFAULT_ACTIVE_LIST_URLS; - // for each list on default list, initialize if needed - DEFAULT_ACTIVE_LIST_URLS.map(function (listUrl) { - if (!state.byUrl[listUrl]) { - state.byUrl[listUrl] = NEW_LIST_STATE; - } - return true; - }); - } - }); -}); +/** + * Returns a map of the given addresses to their eventually consistent ETH balances. + */ +function useNativeCurrencyBalances(uncheckedAddresses) { + var chainId = useActiveWeb3React().chainId + var multicallContract = useInterfaceMulticall() + var validAddressInputs = useMemo( + function () { + return uncheckedAddresses + ? uncheckedAddresses + .map(isAddress) + .filter(function (a) { + return a !== false + }) + .sort() + .map(function (addr) { + return [addr] + }) + : [] + }, + [uncheckedAddresses] + ) + var results = useSingleContractMultipleData(multicallContract, 'getEthBalance', validAddressInputs) + return useMemo( + function () { + return validAddressInputs.reduce(function (memo, _a, i) { + var _b, _c + var _d = __read(_a, 1), + address = _d[0] + var value = + (_c = + (_b = results === null || results === void 0 ? void 0 : results[i]) === null || _b === void 0 + ? void 0 + : _b.result) === null || _c === void 0 + ? void 0 + : _c[0] + if (value && chainId) + memo[address] = CurrencyAmount.fromRawAmount(nativeOnChain(chainId), JSBI.BigInt(value.toString())) + return memo + }, {}) + }, + [validAddressInputs, chainId, results] + ) +} +var ERC20Interface = new Interface(ERC20ABI) +var tokenBalancesGasRequirement = { gasRequired: 125000 } +/** + * Returns a map of token addresses to their eventually consistent token balances for a single account. + */ +function useTokenBalancesWithLoadingIndicator(address, tokens) { + var validatedTokens = useMemo( + function () { + var _a + return (_a = + tokens === null || tokens === void 0 + ? void 0 + : tokens.filter(function (t) { + return isAddress(t === null || t === void 0 ? void 0 : t.address) !== false + })) !== null && _a !== void 0 + ? _a + : [] + }, + [tokens] + ) + var validatedTokenAddresses = useMemo( + function () { + return validatedTokens.map(function (vt) { + return vt.address + }) + }, + [validatedTokens] + ) + var balances = useMultipleContractSingleData( + validatedTokenAddresses, + ERC20Interface, + 'balanceOf', + useMemo( + function () { + return [address] + }, + [address] + ), + tokenBalancesGasRequirement + ) + var anyLoading = useMemo( + function () { + return balances.some(function (callState) { + return callState.loading + }) + }, + [balances] + ) + return useMemo( + function () { + return [ + address && validatedTokens.length > 0 + ? validatedTokens.reduce(function (memo, token, i) { + var _a, _b + var value = + (_b = + (_a = balances === null || balances === void 0 ? void 0 : balances[i]) === null || _a === void 0 + ? void 0 + : _a.result) === null || _b === void 0 + ? void 0 + : _b[0] + var amount = value ? JSBI.BigInt(value.toString()) : undefined + if (amount) { + memo[token.address] = CurrencyAmount.fromRawAmount(token, amount) + } + return memo + }, {}) + : {}, + anyLoading, + ] + }, + [address, validatedTokens, anyLoading, balances] + ) +} +function useTokenBalances(address, tokens) { + return useTokenBalancesWithLoadingIndicator(address, tokens)[0] +} +// get the balance for a single token/account combo +function useTokenBalance(account, token) { + var tokenBalances = useTokenBalances( + account, + useMemo( + function () { + return [token] + }, + [token] + ) + ) + if (!token) return undefined + return tokenBalances[token.address] +} +function useCurrencyBalances(account, currencies) { + var tokens = useMemo( + function () { + var _a + return (_a = + currencies === null || currencies === void 0 + ? void 0 + : currencies.filter(function (currency) { + var _a + return (_a = currency === null || currency === void 0 ? void 0 : currency.isToken) !== null && + _a !== void 0 + ? _a + : false + })) !== null && _a !== void 0 + ? _a + : [] + }, + [currencies] + ) + var tokenBalances = useTokenBalances(account, tokens) + var containsETH = useMemo( + function () { + var _a + return (_a = + currencies === null || currencies === void 0 + ? void 0 + : currencies.some(function (currency) { + return currency === null || currency === void 0 ? void 0 : currency.isNative + })) !== null && _a !== void 0 + ? _a + : false + }, + [currencies] + ) + var ethBalance = useNativeCurrencyBalances( + useMemo( + function () { + return containsETH ? [account] : [] + }, + [containsETH, account] + ) + ) + return useMemo( + function () { + var _a + return (_a = + currencies === null || currencies === void 0 + ? void 0 + : currencies.map(function (currency) { + if (!account || !currency) return undefined + if (currency.isToken) return tokenBalances[currency.address] + if (currency.isNative) return ethBalance[account] + return undefined + })) !== null && _a !== void 0 + ? _a + : [] + }, + [account, currencies, ethBalance, tokenBalances] + ) +} +function useCurrencyBalance(account, currency) { + return useCurrencyBalances( + account, + useMemo( + function () { + return [currency] + }, + [currency] + ) + )[0] +} -/** - * Converts a filter to the corresponding string key - * @param filter the filter to convert - */ -function filterToKey(filter) { - var _a, _b, _c, _d; - return ((_a = filter.address) !== null && _a !== void 0 ? _a : '') + ":" + ((_d = (_c = (_b = filter.topics) === null || _b === void 0 ? void 0 : _b.map(function (topic) { return (topic ? (Array.isArray(topic) ? topic.join(';') : topic) : '\0'); })) === null || _c === void 0 ? void 0 : _c.join('-')) !== null && _d !== void 0 ? _d : ''); -} -/** - * Convert a filter key to the corresponding filter - * @param key key to convert - */ -function keyToFilter(key) { - var pcs = key.split(':'); - var address = pcs[0]; - var topics = pcs[1].split('-').map(function (topic) { - if (topic === '\0') - return null; - var parts = topic.split(';'); - if (parts.length === 1) - return parts[0]; - return parts; - }); - return { - address: address.length === 0 ? undefined : address, - topics: topics, - }; +var alwaysTrue = function () { + return true +} +/** Creates a filter function that filters tokens that do not match the query. */ +function getTokenFilter(query) { + var searchingAddress = isAddress(query) + if (searchingAddress) { + var address_1 = searchingAddress.toLowerCase() + return function (t) { + return 'address' in t && address_1 === t.address.toLowerCase() + } + } + var queryParts = query + .toLowerCase() + .split(/\s+/) + .filter(function (s) { + return s.length > 0 + }) + if (queryParts.length === 0) return alwaysTrue + var match = function (s) { + var parts = s + .toLowerCase() + .split(/\s+/) + .filter(function (s) { + return s.length > 0 + }) + return queryParts.every(function (p) { + return ( + p.length === 0 || + parts.some(function (sp) { + return sp.startsWith(p) || sp.endsWith(p) + }) + ) + }) + } + return function (_a) { + var name = _a.name, + symbol = _a.symbol + return Boolean((symbol && match(symbol)) || (name && match(name))) + } } -var _a$8; -var slice = createSlice({ - name: 'logs', - initialState: {}, - reducers: { - addListener: function (state, _a) { - var _b = _a.payload, chainId = _b.chainId, filter = _b.filter; - if (!state[chainId]) - state[chainId] = {}; - var key = filterToKey(filter); - if (!state[chainId][key]) - state[chainId][key] = { - listeners: 1, - }; - else - state[chainId][key].listeners++; - }, - fetchingLogs: function (state, _a) { - var e_1, _b; - var _c = _a.payload, chainId = _c.chainId, filters = _c.filters, blockNumber = _c.blockNumber; - if (!state[chainId]) - return; - try { - for (var filters_1 = __values(filters), filters_1_1 = filters_1.next(); !filters_1_1.done; filters_1_1 = filters_1.next()) { - var filter = filters_1_1.value; - var key = filterToKey(filter); - if (!state[chainId][key]) - continue; - state[chainId][key].fetchingBlockNumber = blockNumber; - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (filters_1_1 && !filters_1_1.done && (_b = filters_1.return)) _b.call(filters_1); - } - finally { if (e_1) throw e_1.error; } - } - }, - fetchedLogs: function (state, _a) { - var _b = _a.payload, chainId = _b.chainId, filter = _b.filter, results = _b.results; - if (!state[chainId]) - return; - var key = filterToKey(filter); - var fetchState = state[chainId][key]; - if (!fetchState || (fetchState.results && fetchState.results.blockNumber > results.blockNumber)) - return; - fetchState.results = results; - }, - fetchedLogsError: function (state, _a) { - var _b = _a.payload, chainId = _b.chainId, filter = _b.filter, blockNumber = _b.blockNumber; - if (!state[chainId]) - return; - var key = filterToKey(filter); - var fetchState = state[chainId][key]; - if (!fetchState || (fetchState.results && fetchState.results.blockNumber > blockNumber)) - return; - fetchState.results = { - blockNumber: blockNumber, - error: true, - }; - }, - removeListener: function (state, _a) { - var _b = _a.payload, chainId = _b.chainId, filter = _b.filter; - if (!state[chainId]) - return; - var key = filterToKey(filter); - if (!state[chainId][key]) - return; - state[chainId][key].listeners--; - }, - }, -}); -var logs = slice.reducer; -(_a$8 = slice.actions, _a$8.addListener); _a$8.removeListener; var fetchedLogs = _a$8.fetchedLogs, fetchedLogsError = _a$8.fetchedLogsError, fetchingLogs = _a$8.fetchingLogs; - -var Field$2; -(function (Field) { - Field["CURRENCY_A"] = "CURRENCY_A"; - Field["CURRENCY_B"] = "CURRENCY_B"; -})(Field$2 || (Field$2 = {})); -var typeInput$2 = createAction('mint/typeInputMint'); -var resetMintState$1 = createAction('mint/resetMintState'); - -var initialState$4 = { - independentField: Field$2.CURRENCY_A, - typedValue: '', - otherTypedValue: '', - startPriceTypedValue: '', - leftRangeTypedValue: '', - rightRangeTypedValue: '', -}; -var mint = createReducer(initialState$4, function (builder) { - return builder - .addCase(resetMintState$1, function () { return initialState$4; }) - .addCase(typeInput$2, function (state, _a) { - var _b = _a.payload, field = _b.field, typedValue = _b.typedValue, noLiquidity = _b.noLiquidity; - if (noLiquidity) { - // they're typing into the field they've last typed in - if (field === state.independentField) { - return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); - } - // they're typing into a new field, store the other value - else { - return __assign(__assign({}, state), { independentField: field, typedValue: typedValue, otherTypedValue: state.typedValue }); - } - } - else { - return __assign(__assign({}, state), { independentField: field, typedValue: typedValue, otherTypedValue: '' }); - } - }); -}); +/** Sorts currency amounts (descending). */ +function balanceComparator(a, b) { + if (a && b) { + return a.greaterThan(b) ? -1 : a.equalTo(b) ? 0 : 1 + } else if (a === null || a === void 0 ? void 0 : a.greaterThan('0')) { + return -1 + } else if (b === null || b === void 0 ? void 0 : b.greaterThan('0')) { + return 1 + } + return 0 +} +/** Sorts tokens by currency amount (descending), then symbol (ascending). */ +function tokenComparator(balances, a, b) { + // Sorts by balances + var balanceComparison = balanceComparator(balances[a.address], balances[b.address]) + if (balanceComparison !== 0) return balanceComparison + // Sorts by symbol + if (a.symbol && b.symbol) { + return a.symbol.toLowerCase() < b.symbol.toLowerCase() ? -1 : 1 + } + return -1 +} +/** Sorts tokens by query, giving precedence to exact matches and partial matches. */ +function useSortTokensByQuery(query, tokens) { + return useMemo( + function () { + if (!tokens) { + return [] + } + var matches = query + .toLowerCase() + .split(/\s+/) + .filter(function (s) { + return s.length > 0 + }) + if (matches.length > 1) { + return tokens + } + var exactMatches = [] + var symbolSubtrings = [] + var rest = [] + // sort tokens by exact match -> subtring on symbol match -> rest + tokens.map(function (token) { + var _a, _b + if (((_a = token.symbol) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === matches[0]) { + return exactMatches.push(token) + } else if ( + (_b = token.symbol) === null || _b === void 0 + ? void 0 + : _b.toLowerCase().startsWith(query.toLowerCase().trim()) + ) { + return symbolSubtrings.push(token) + } else { + return rest.push(token) + } + }) + return __spreadArray( + __spreadArray(__spreadArray([], __read(exactMatches), false), __read(symbolSubtrings), false), + __read(rest), + false + ) + }, + [tokens, query] + ) +} -var Field$1; -(function (Field) { - Field["CURRENCY_A"] = "CURRENCY_A"; - Field["CURRENCY_B"] = "CURRENCY_B"; -})(Field$1 || (Field$1 = {})); -var Bound; -(function (Bound) { - Bound["LOWER"] = "LOWER"; - Bound["UPPER"] = "UPPER"; -})(Bound || (Bound = {})); -var typeInput$1 = createAction('mintV3/typeInputMint'); -var typeStartPriceInput = createAction('mintV3/typeStartPriceInput'); -var typeLeftRangeInput = createAction('mintV3/typeLeftRangeInput'); -var typeRightRangeInput = createAction('mintV3/typeRightRangeInput'); -var resetMintState = createAction('mintV3/resetMintState'); -var setFullRange = createAction('mintV3/setFullRange'); - -var initialState$3 = { - independentField: Field$1.CURRENCY_A, - typedValue: '', - startPriceTypedValue: '', - leftRangeTypedValue: '', - rightRangeTypedValue: '', -}; -var mintV3 = createReducer(initialState$3, function (builder) { - return builder - .addCase(resetMintState, function () { return initialState$3; }) - .addCase(setFullRange, function (state) { - return __assign(__assign({}, state), { leftRangeTypedValue: true, rightRangeTypedValue: true }); - }) - .addCase(typeStartPriceInput, function (state, _a) { - var typedValue = _a.payload.typedValue; - return __assign(__assign({}, state), { startPriceTypedValue: typedValue }); - }) - .addCase(typeLeftRangeInput, function (state, _a) { - var typedValue = _a.payload.typedValue; - return __assign(__assign({}, state), { leftRangeTypedValue: typedValue }); - }) - .addCase(typeRightRangeInput, function (state, _a) { - var typedValue = _a.payload.typedValue; - return __assign(__assign({}, state), { rightRangeTypedValue: typedValue }); - }) - .addCase(typeInput$1, function (state, _a) { - var _b = _a.payload, field = _b.field, typedValue = _b.typedValue, noLiquidity = _b.noLiquidity; - if (noLiquidity) { - // they're typing into the field they've last typed in - if (field === state.independentField) { - return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); - } - // they're typing into a new field, store the other value - else { - return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); - } - } - else { - return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); - } - }); -}); +/** + * Token instances created from token info on a token list. + */ +var WrappedTokenInfo = /** @class */ (function () { + function WrappedTokenInfo(tokenInfo, list) { + this.isNative = false + this.isToken = true + this._checksummedAddress = null + this._tags = null + this.tokenInfo = tokenInfo + this.list = list + } + Object.defineProperty(WrappedTokenInfo.prototype, 'address', { + get() { + if (this._checksummedAddress) return this._checksummedAddress + var checksummedAddress = isAddress(this.tokenInfo.address) + if (!checksummedAddress) throw new Error('Invalid token address: ' + this.tokenInfo.address) + return (this._checksummedAddress = checksummedAddress) + }, + enumerable: false, + configurable: true, + }) + Object.defineProperty(WrappedTokenInfo.prototype, 'chainId', { + get() { + return this.tokenInfo.chainId + }, + enumerable: false, + configurable: true, + }) + Object.defineProperty(WrappedTokenInfo.prototype, 'decimals', { + get() { + return this.tokenInfo.decimals + }, + enumerable: false, + configurable: true, + }) + Object.defineProperty(WrappedTokenInfo.prototype, 'name', { + get() { + return this.tokenInfo.name + }, + enumerable: false, + configurable: true, + }) + Object.defineProperty(WrappedTokenInfo.prototype, 'symbol', { + get() { + return this.tokenInfo.symbol + }, + enumerable: false, + configurable: true, + }) + Object.defineProperty(WrappedTokenInfo.prototype, 'logoURI', { + get() { + return this.tokenInfo.logoURI + }, + enumerable: false, + configurable: true, + }) + Object.defineProperty(WrappedTokenInfo.prototype, 'tags', { + get() { + var _a + if (this._tags !== null) return this._tags + if (!this.tokenInfo.tags) return (this._tags = []) + var listTags = (_a = this.list) === null || _a === void 0 ? void 0 : _a.tags + if (!listTags) return (this._tags = []) + return (this._tags = this.tokenInfo.tags.map(function (tagId) { + return __assign(__assign({}, listTags[tagId]), { id: tagId }) + })) + }, + enumerable: false, + configurable: true, + }) + WrappedTokenInfo.prototype.equals = function (other) { + return other.chainId === this.chainId && other.isToken && other.address.toLowerCase() === this.address.toLowerCase() + } + WrappedTokenInfo.prototype.sortsBefore = function (other) { + if (this.equals(other)) throw new Error('Addresses should not be equal') + return this.address.toLowerCase() < other.address.toLowerCase() + } + Object.defineProperty(WrappedTokenInfo.prototype, 'wrapped', { + get() { + return this + }, + enumerable: false, + configurable: true, + }) + return WrappedTokenInfo +})() + +var mapCache = typeof WeakMap !== 'undefined' ? new WeakMap() : null +function tokensToChainTokenMap(tokens) { + var cached = mapCache === null || mapCache === void 0 ? void 0 : mapCache.get(tokens) + if (cached) return cached + var _a = __read(Array.isArray(tokens) ? [undefined, tokens] : [tokens, tokens.tokens], 2), + list = _a[0], + infos = _a[1] + var map = infos.reduce(function (map, info) { + var _a + var token = new WrappedTokenInfo(info, list) + if (((_a = map[token.chainId]) === null || _a === void 0 ? void 0 : _a[token.address]) !== undefined) { + console.warn('Duplicate token skipped: ' + token.address) + return map + } + if (!map[token.chainId]) { + map[token.chainId] = {} + } + map[token.chainId][token.address] = { token, list } + return map + }, {}) + mapCache === null || mapCache === void 0 ? void 0 : mapCache.set(tokens, map) + return map +} -var protocols = [Protocol.V2, Protocol.V3]; -var DEFAULT_QUERY_PARAMS = { - protocols: protocols.map(function (p) { return p.toLowerCase(); }).join(','), - // example other params - // forceCrossProtocol: 'true', - // minSplits: '5', -}; -function getClientSideQuote(_a) { - var tokenInAddress = _a.tokenInAddress, tokenInChainId = _a.tokenInChainId, tokenInDecimals = _a.tokenInDecimals, tokenInSymbol = _a.tokenInSymbol, tokenOutAddress = _a.tokenOutAddress, tokenOutChainId = _a.tokenOutChainId, tokenOutDecimals = _a.tokenOutDecimals, tokenOutSymbol = _a.tokenOutSymbol, amount = _a.amount, type = _a.type; - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, Promise.resolve().then(function () { return index; })]; - case 1: return [2 /*return*/, (_b.sent()).getQuote({ - type: type, - chainId: tokenInChainId, - tokenIn: { - address: tokenInAddress, - chainId: tokenInChainId, - decimals: tokenInDecimals, - symbol: tokenInSymbol, - }, - tokenOut: { - address: tokenOutAddress, - chainId: tokenOutChainId, - decimals: tokenOutDecimals, - symbol: tokenOutSymbol, - }, - amount: amount, - }, { protocols: protocols })]; - } - }); - }); -} -var routingApi = createApi({ - reducerPath: 'routingApi', - baseQuery: fetchBaseQuery({ - baseUrl: 'https://api.uniswap.org/v1/', - }), - endpoints: function (build) { return ({ - getQuote: build.query({ - queryFn: function (args, _api, _extraOptions, fetch) { - return __awaiter(this, void 0, void 0, function () { - var tokenInAddress, tokenInChainId, tokenOutAddress, tokenOutChainId, amount, useClientSideRouter, type, result, query, e_1; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - tokenInAddress = args.tokenInAddress, tokenInChainId = args.tokenInChainId, tokenOutAddress = args.tokenOutAddress, tokenOutChainId = args.tokenOutChainId, amount = args.amount, useClientSideRouter = args.useClientSideRouter, type = args.type; - _a.label = 1; - case 1: - _a.trys.push([1, 6, , 7]); - if (!useClientSideRouter) return [3 /*break*/, 3]; - return [4 /*yield*/, getClientSideQuote(args)]; - case 2: - result = _a.sent(); - return [3 /*break*/, 5]; - case 3: - query = qs.stringify(__assign(__assign({}, DEFAULT_QUERY_PARAMS), { tokenInAddress: tokenInAddress, tokenInChainId: tokenInChainId, tokenOutAddress: tokenOutAddress, tokenOutChainId: tokenOutChainId, amount: amount, type: type })); - return [4 /*yield*/, fetch("quote?" + query)]; - case 4: - result = _a.sent(); - _a.label = 5; - case 5: return [2 /*return*/, { data: result.data }]; - case 6: - e_1 = _a.sent(); - // TODO: fall back to client-side quoter when auto router fails. - // deprecate 'legacy' v2/v3 routers first. - return [2 /*return*/, { error: e_1 }]; - case 7: return [2 /*return*/]; - } - }); - }); - }, - keepUnusedDataFor: ms(templateObject_1$1b || (templateObject_1$1b = __makeTemplateObject(["10s"], ["10s"]))), - extraOptions: { - maxRetries: 0, - }, - }), - }); }, -}); -var useGetQuoteQuery = routingApi.useGetQuoteQuery; -var templateObject_1$1b; - -var Field; -(function (Field) { - Field["INPUT"] = "INPUT"; - Field["OUTPUT"] = "OUTPUT"; -})(Field || (Field = {})); -var selectCurrency = createAction('swap/selectCurrency'); -var switchCurrencies = createAction('swap/switchCurrencies'); -var typeInput = createAction('swap/typeInput'); -var replaceSwapState = createAction('swap/replaceSwapState'); -var setRecipient = createAction('swap/setRecipient'); - -var CHAIN_DATA_ABI = [ - { - inputs: [], - name: 'latestAnswer', - outputs: [{ internalType: 'int256', name: '', type: 'int256' }], - stateMutability: 'view', - type: 'function', - }, -]; -/** - * Returns the price of 1 gas in WEI for the currently selected network using the chainlink fast gas price oracle - */ -function useGasPrice() { - var _a, _b; - var address = useENSAddress('fast-gas-gwei.data.eth').address; - var contract = useContract(address !== null && address !== void 0 ? address : undefined, CHAIN_DATA_ABI, false); - var resultStr = (_b = (_a = useSingleCallResult(contract, 'latestAnswer').result) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.toString(); - return typeof resultStr === 'string' ? JSBI.BigInt(resultStr) : undefined; +atom({}) + +// parse a name or symbol from a token response +var BYTES32_REGEX = /^0x[a-fA-F0-9]{64}$/ +function parseStringOrBytes32(str, bytes32, defaultValue) { + return str && str.length > 0 + ? str + : // need to check for proper bytes string and valid terminator + bytes32 && BYTES32_REGEX.test(bytes32) && arrayify(bytes32)[31] === 0 + ? parseBytes32String(bytes32) + : defaultValue +} +/** + * Returns a Token from the tokenAddress. + * Returns null if token is loading or null was passed. + * Returns undefined if tokenAddress is invalid or token does not exist. + */ +function useTokenFromMap(tokens, tokenAddress) { + var chainId = useActiveWeb3React().chainId + var address = isAddress(tokenAddress) + var tokenContract = useTokenContract(address ? address : undefined, false) + var tokenContractBytes32 = useBytes32TokenContract(address ? address : undefined, false) + var token = address ? tokens[address] : undefined + var tokenName = useSingleCallResult(token ? undefined : tokenContract, 'name', undefined, NEVER_RELOAD) + var tokenNameBytes32 = useSingleCallResult(token ? undefined : tokenContractBytes32, 'name', undefined, NEVER_RELOAD) + var symbol = useSingleCallResult(token ? undefined : tokenContract, 'symbol', undefined, NEVER_RELOAD) + var symbolBytes32 = useSingleCallResult(token ? undefined : tokenContractBytes32, 'symbol', undefined, NEVER_RELOAD) + var decimals = useSingleCallResult(token ? undefined : tokenContract, 'decimals', undefined, NEVER_RELOAD) + return useMemo( + function () { + var _a, _b, _c, _d + if (token) return token + if (tokenAddress === null) return null + if (!chainId || !address) return undefined + if (decimals.loading || symbol.loading || tokenName.loading) return null + if (decimals.result) { + return new Token( + chainId, + address, + decimals.result[0], + parseStringOrBytes32( + (_a = symbol.result) === null || _a === void 0 ? void 0 : _a[0], + (_b = symbolBytes32.result) === null || _b === void 0 ? void 0 : _b[0], + 'UNKNOWN' + ), + parseStringOrBytes32( + (_c = tokenName.result) === null || _c === void 0 ? void 0 : _c[0], + (_d = tokenNameBytes32.result) === null || _d === void 0 ? void 0 : _d[0], + 'Unknown Token' + ) + ) + } + return undefined + }, + [ + address, + chainId, + decimals.loading, + decimals.result, + symbol.loading, + symbol.result, + symbolBytes32.result, + token, + tokenAddress, + tokenName.loading, + tokenName.result, + tokenNameBytes32.result, + ] + ) +} +/** + * Returns a Currency from the currencyId. + * Returns null if currency is loading or null was passed. + * Returns undefined if currencyId is invalid or token does not exist. + */ +function useCurrencyFromMap(tokens, currencyId) { + var _a + var nativeCurrency = useNativeCurrency() + var isNative = Boolean( + nativeCurrency && (currencyId === null || currencyId === void 0 ? void 0 : currencyId.toUpperCase()) === 'ETH' + ) + var token = useTokenFromMap(tokens, isNative ? undefined : currencyId) + if (currencyId === null || currencyId === undefined) return currencyId + // this case so we use our builtin wrapped token instead of wrapped tokens on token lists + var wrappedNative = nativeCurrency === null || nativeCurrency === void 0 ? void 0 : nativeCurrency.wrapped + if ( + ((_a = wrappedNative === null || wrappedNative === void 0 ? void 0 : wrappedNative.address) === null || + _a === void 0 + ? void 0 + : _a.toUpperCase()) === (currencyId === null || currencyId === void 0 ? void 0 : currencyId.toUpperCase()) + ) + return wrappedNative + return isNative ? nativeCurrency : token +} + +var DEFAULT_LIST_PRIORITIES = DEFAULT_LIST_OF_LISTS.reduce(function (memo, listUrl, index) { + memo[listUrl] = index + 1 + return memo +}, {}) +// use ordering of default list of lists to assign priority +function sortByListPriority(urlA, urlB) { + if (DEFAULT_LIST_PRIORITIES[urlA] && DEFAULT_LIST_PRIORITIES[urlB]) { + return DEFAULT_LIST_PRIORITIES[urlA] - DEFAULT_LIST_PRIORITIES[urlB] + } + return 0 +} + +var name$1 = 'Broken Token List' +var timestamp$1 = '2021-01-05T20:47:02.923Z' +var version$1 = { + major: 1, + minor: 0, + patch: 0, +} +var tags$1 = {} +var logoURI$1 = 'ipfs://QmNa8mQkrNKp1WEEeGjFezDmDeodkWRevGFN8JCV7b4Xir' +var keywords$1 = ['uniswap', 'broken'] +var tokens$1 = [ + { + name: 'UNI HODL', + address: '0x4bf5dc91E2555449293D7824028Eb8Fe5879B689', + symbol: 'UniH', + decimals: 18, + chainId: 1, + logoURI: '', + }, +] +var BROKEN_LIST = { + name: name$1, + timestamp: timestamp$1, + version: version$1, + tags: tags$1, + logoURI: logoURI$1, + keywords: keywords$1, + tokens: tokens$1, +} + +var name = 'Unsupported Tokens' +var timestamp = '2021-01-05T20:47:02.923Z' +var version = { + major: 1, + minor: 0, + patch: 0, +} +var tags = {} +var logoURI = 'ipfs://QmNa8mQkrNKp1WEEeGjFezDmDeodkWRevGFN8JCV7b4Xir' +var keywords = ['uniswap', 'unsupported'] +var tokens = [ + { + name: 'Gold Tether', + address: '0x4922a015c4407F87432B179bb209e125432E4a2A', + symbol: 'XAUt', + decimals: 6, + chainId: 1, + logoURI: + 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4922a015c4407F87432B179bb209e125432E4a2A/logo.png', + }, + { + name: 'Grump Cat', + address: '0x93B2FfF814FCaEFFB01406e80B4Ecd89Ca6A021b', + symbol: 'GRUMPY', + decimals: 9, + chainId: 1, + logoURI: + 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4922a015c4407F87432B179bb209e125432E4a2A/logo.png', + }, + { + name: 'apeUSD-UMA Synthetic USD (Dec 2021)', + address: '0xfA5e27893aee4805283D86e4283Da64F8c72dd56', + symbol: 'apeUSD-UMA-DEC21', + decimals: 18, + chainId: 1, + logoURI: '', + }, + { + chainId: 1, + address: '0xc6b11850241c5127eab73af4b6c68bc267cbbff4', + name: 'oWETHp Put 360 DEC2520', + symbol: 'oWETH-360P-12/25/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oYFIp Put 25000 OCT0220', + address: '0x452b421be5b30f0c6ad8c3f03c06bdaab4f5c56c', + symbol: 'oYFI-25000P-10/02/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oWETHp Put 360 OCT3020', + address: '0x0578779e746d7186253a36cf651ea786acfcf087', + symbol: 'oWETH-360P-10/30/20', + decimals: 7, + }, + { + chainId: 1, + name: 'ETHc Call 500 OCT3020', + address: '0xf9aba2e43fb19184408ea3b572a0fd672946f87b', + symbol: 'oETH-500C-10/30/20', + decimals: 6, + }, + { + chainId: 1, + name: 'oBALp Put 22 OCT0220', + address: '0xdb0991dfc7e828b5a2837dc82d68e16490562c8d', + symbol: 'oBAL-22P-10/02/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oCOMPp Put 150 SEP2520', + address: '0xe951ebe6b4420ab3f4844cf36dedd263d095b416', + symbol: 'oCOMP-150P-09/25/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oCRVp Put 3 SEP252020', + address: '0x9215bd49b59748419eac6bad9dbe247df06ebdb9', + symbol: 'oCRV-3P-09/25/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oETHp Put 180 SEP2520', + address: '0xE3A2c34Fa2F59ffa95C4ACd1E5663633d45Bc3AD', + symbol: 'oETH-180P-09/25/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oETHc Call 400 SEP2520', + address: '0x05977EBC26825C0CD6097E0Ad7204721516711Eb', + symbol: 'oETH-400C-09/25/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oWETHp Put 380 SEP1820', + address: '0x31f88266301b08631f9f0e33fd5c43c2a5d1e5b2', + symbol: 'oWETH-380P-09/18/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oYFIp Put 8500 SEP1820', + address: '0xd1cec2f67fdc4c60e0963515dfc3343f31e32e47', + symbol: 'oYFI-8500P-09/18/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oWETHp Put 370 SEP1120', + address: '0x15844029b2c2bf24506e9937739a9a912f1e4354', + symbol: 'oWETH-370P-09/11/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oWETHp Put 400 SEP0420', + address: '0x5562c33c383f6386be4f6dcdbd35a3a99bbcfde6', + symbol: 'oWETH-400P-09/04/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oETHp Put 200 AUG2820', + address: '0x3CBFC1397deF0602c2d211c70A1c0c38CEDB5448', + symbol: 'oWETH-400P-09/04/20', + decimals: 7, + }, + { + chainId: 1, + name: 'Opyn cDai Insurance', + symbol: 'ocDai', + address: '0x98cc3bd6af1880fcfda17ac477b2f612980e5e33', + decimals: 8, + }, + { + chainId: 1, + name: 'Opyn cUSDC Insurance', + symbol: 'ocUSDC', + address: '0x8ED9f862363fFdFD3a07546e618214b6D59F03d4', + decimals: 8, + }, + { + chainId: 1, + address: '0x176C674Ee533C6139B0dc8b458D72A93dCB3e705', + symbol: 'iAAVE', + name: 'Synth Inverse Aave', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iAAVE.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x8A8079c7149B8A1611e5C5d978DCA3bE16545F83', + symbol: 'iADA', + name: 'Synth Inverse Cardano', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iADA.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0xAFD870F32CE54EfdBF677466B612bf8ad164454B', + symbol: 'iBNB', + name: 'Synth Inverse Binance Coin', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iBNB.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0xD6014EA05BDe904448B743833dDF07c3C7837481', + symbol: 'iBTC', + name: 'Synth Inverse Bitcoin', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iBTC.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x336213e1DDFC69f4701Fc3F86F4ef4A160c1159d', + symbol: 'iCEX', + name: 'Synth Inverse Centralised Exchange Index', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iCEX.svg', + tags: ['index', 'inverse', 'synth'], + }, + { + chainId: 1, + address: '0x6345728B1ccE16E6f8C509950b5c84FFF88530d9', + symbol: 'iCOMP', + name: 'Synth Inverse Compound', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iCOMP.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0xCB98f42221b2C251A4E74A1609722eE09f0cc08E', + symbol: 'iDASH', + name: 'Synth Inverse Dash', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDASH.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x14d10003807AC60d07BB0ba82cAeaC8d2087c157', + symbol: 'iDEFI', + name: 'Synth Inverse DeFi Index', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDEFI.svg', + tags: ['index', 'inverse', 'synth'], + }, + { + chainId: 1, + address: '0x46a97629C9C1F58De6EC18C7F536e7E6d6A6ecDe', + symbol: 'iDOT', + name: 'Synth Inverse Polkadot', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDOT.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0xF4EebDD0704021eF2a6Bbe993fdf93030Cd784b4', + symbol: 'iEOS', + name: 'Synth Inverse EOS', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iEOS.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0xd50c1746D835d2770dDA3703B69187bFfeB14126', + symbol: 'iETC', + name: 'Synth Inverse Ethereum Classic', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iETC.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0xA9859874e1743A32409f75bB11549892138BBA1E', + symbol: 'iETH', + name: 'Synth Inverse Ether', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iETH.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x2d7aC061fc3db53c39fe1607fB8cec1B2C162B01', + symbol: 'iLINK', + name: 'Synth Inverse Chainlink', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iLINK.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x79da1431150C9b82D2E5dfc1C68B33216846851e', + symbol: 'iLTC', + name: 'Synth Inverse Litecoin', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iLTC.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0xA5a5DF41883Cdc00c4cCC6E8097130535399d9a3', + symbol: 'iOIL', + name: 'Synth Inverse Perpetual Oil Futures', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iOIL.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x0fEd38108bdb8e62ef7b5680E8E0726E2F29e0De', + symbol: 'iREN', + name: 'Synth Inverse Ren', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iREN.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0xC5807183a9661A533CB08CbC297594a0B864dc12', + symbol: 'iTRX', + name: 'Synth Inverse TRON', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iTRX.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x36A00FF9072570eF4B9292117850B8FE08d96cce', + symbol: 'iUNI', + name: 'Synth Inverse Uniswap', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iUNI.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x4AdF728E2Df4945082cDD6053869f51278fae196', + symbol: 'iXMR', + name: 'Synth Inverse Monero', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXMR.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x27269b3e45A4D3E79A3D6BFeE0C8fB13d0D711A6', + symbol: 'iXRP', + name: 'Synth Inverse Ripple', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXRP.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x8deef89058090ac5655A99EEB451a4f9183D1678', + symbol: 'iXTZ', + name: 'Synth Inverse Tezos', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXTZ.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x592244301CeA952d6daB2fdC1fE6bd9E53917306', + symbol: 'iYFI', + name: 'Synth Inverse yearn.finance', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iYFI.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0xcD39b5434a0A92cf47D1F567a7dF84bE356814F0', + symbol: 's1INCH', + name: 'Synth 1inch', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/s1INCH.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x7537AAe01f3B218DAE75e10d952473823F961B87', + symbol: 'sAAPL', + name: 'Synth Apple', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAAPL.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xd2dF355C19471c8bd7D8A3aa27Ff4e26A21b4076', + symbol: 'sAAVE', + name: 'Synth Aave', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAAVE.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xe36E2D3c7c34281FA3bC737950a68571736880A1', + symbol: 'sADA', + name: 'Synth Cardano', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sADA.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x9CF7E61853ea30A41b02169391b393B901eac457', + symbol: 'sAMZN', + name: 'Synth Amazon', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAMZN.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xF48e200EAF9906362BB1442fca31e0835773b8B4', + symbol: 'sAUD', + name: 'Synth Australian Dollars', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAUD.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x617aeCB6137B5108D1E7D4918e3725C8cEbdB848', + symbol: 'sBNB', + name: 'Synth Binance Coin', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sBNB.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xfE18be6b3Bd88A2D2A7f928d00292E7a9963CfC6', + symbol: 'sBTC', + name: 'Synth Bitcoin', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sBTC.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xeABACD844A196D7Faf3CE596edeBF9900341B420', + symbol: 'sCEX', + name: 'Synth Centralised Exchange Index', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCEX.svg', + tags: ['index', 'synth'], + }, + { + chainId: 1, + address: '0x0F83287FF768D1c1e17a42F44d644D7F22e8ee1d', + symbol: 'sCHF', + name: 'Synth Swiss Franc', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCHF.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x9EeF4CA7aB9fa8bc0650127341C2d3F707a40f8A', + symbol: 'sCOIN', + name: 'Synth Coinbase', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCOIN.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xEb029507d3e043DD6C87F2917C4E82B902c35618', + symbol: 'sCOMP', + name: 'Synth Compound', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCOMP.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xD38aEb759891882e78E957c80656572503D8c1B1', + symbol: 'sCRV', + name: 'Synth Curve DAO Token', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCRV.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xfE33ae95A9f0DA8A845aF33516EDc240DCD711d6', + symbol: 'sDASH', + name: 'Synth Dash', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDASH.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xe1aFe1Fd76Fd88f78cBf599ea1846231B8bA3B6B', + symbol: 'sDEFI', + name: 'Synth DeFi Index', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDEFI.svg', + tags: ['index', 'synth'], + }, + { + chainId: 1, + address: '0x1715AC0743102BF5Cd58EfBB6Cf2dC2685d967b6', + symbol: 'sDOT', + name: 'Synth Polkadot', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDOT.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x88C8Cf3A212c0369698D13FE98Fcb76620389841', + symbol: 'sEOS', + name: 'Synth EOS', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sEOS.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x22602469d704BfFb0936c7A7cfcD18f7aA269375', + symbol: 'sETC', + name: 'Synth Ethereum Classic', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sETC.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x5e74C9036fb86BD7eCdcb084a0673EFc32eA31cb', + symbol: 'sETH', + name: 'Synth Ether', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sETH.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xD71eCFF9342A5Ced620049e616c5035F1dB98620', + symbol: 'sEUR', + name: 'Synth Euros', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sEUR.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xf50B5e535F62a56A9BD2d8e2434204E726c027Fa', + symbol: 'sFB', + name: 'Synth Facebook', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sFB.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x23348160D7f5aca21195dF2b70f28Fce2B0be9fC', + symbol: 'sFTSE', + name: 'Synth FTSE 100 Index', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sFTSE.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x97fe22E7341a0Cd8Db6F6C021A24Dc8f4DAD855F', + symbol: 'sGBP', + name: 'Synth Pound Sterling', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sGBP.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xC63B8ECCE56aB9C46184eC6aB85e4771fEa4c8AD', + symbol: 'sGOOG', + name: 'Synth Alphabet', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sGOOG.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xF6b1C627e95BFc3c1b4c9B825a032Ff0fBf3e07d', + symbol: 'sJPY', + name: 'Synth Japanese Yen', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sJPY.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x269895a3dF4D73b077Fc823dD6dA1B95f72Aaf9B', + symbol: 'sKRW', + name: 'Synth South Korean Won', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sKRW.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xbBC455cb4F1B9e4bFC4B73970d360c8f032EfEE6', + symbol: 'sLINK', + name: 'Synth Chainlink', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sLINK.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xC14103C2141E842e228FBaC594579e798616ce7A', + symbol: 'sLTC', + name: 'Synth Litecoin', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sLTC.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x745a824D6aBBD236AA794b5530062778A6Ad7523', + symbol: 'sMSFT', + name: 'Synth Microsoft', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sMSFT.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x5A7E3c07604EB515C16b36cd51906a65f021F609', + symbol: 'sNFLX', + name: 'Synth Netflix', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sNFLX.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x757de3ac6B830a931eF178C6634c5C551773155c', + symbol: 'sNIKKEI', + name: 'Synth Nikkei 225 Index', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sNIKKEI.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x6d16cF3EC5F763d4d99cB0B0b110eefD93B11B56', + symbol: 'sOIL', + name: 'Synth Perpetual Oil Futures', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sOIL.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xD31533E8d0f3DF62060e94B3F1318137bB6E3525', + symbol: 'sREN', + name: 'Synth Ren', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sREN.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x0352557B007A4Aae1511C114409b932F06F9E2f4', + symbol: 'sRUNE', + name: 'Synth THORChain', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sRUNE.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xf2E08356588EC5cd9E437552Da87C0076b4970B0', + symbol: 'sTRX', + name: 'Synth TRON', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sTRX.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x918dA91Ccbc32B7a6A0cc4eCd5987bbab6E31e6D', + symbol: 'sTSLA', + name: 'Synth Tesla', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sTSLA.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x30635297E450b930f8693297eBa160D9e6c8eBcf', + symbol: 'sUNI', + name: 'Synth Uniswap', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sUNI.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x6A22e5e94388464181578Aa7A6B869e00fE27846', + symbol: 'sXAG', + name: 'Synth Silver Ounce', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXAG.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x261EfCdD24CeA98652B9700800a13DfBca4103fF', + symbol: 'sXAU', + name: 'Synth Gold Ounce', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXAU.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x5299d6F7472DCc137D7f3C4BcfBBB514BaBF341A', + symbol: 'sXMR', + name: 'Synth Monero', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXMR.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xa2B0fDe6D710e201d0d608e924A484d1A5fEd57c', + symbol: 'sXRP', + name: 'Synth Ripple', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXRP.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x2e59005c5c0f0a4D77CcA82653d48b46322EE5Cd', + symbol: 'sXTZ', + name: 'Synth Tezos', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXTZ.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x992058B7DB08F9734d84485bfbC243C4ee6954A7', + symbol: 'sYFI', + name: 'Synth yearn.finance', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sYFI.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x81ab848898b5ffD3354dbbEfb333D5D183eEDcB5', + name: 'yUSD Synthetic Expiring 1 September 2020', + symbol: 'yUSDSEP20', + decimals: 18, + }, + { + chainId: 1, + address: '0xB2FdD60AD80ca7bA89B9BAb3b5336c2601C020b4', + name: 'yUSD Synthetic Expiring 1 October 2020', + symbol: 'yUSDOCT20', + decimals: 18, + }, + { + chainId: 1, + address: '0x208d174775dc39fe18b1b374972f77ddec6c0f73', + name: 'uUSDrBTC Synthetic Expiring 1 Oct 2020', + symbol: 'uUSDrBTC-OCT', + decimals: 18, + }, + { + chainId: 1, + address: '0xf06ddacf71e2992e2122a1a0168c6967afdf63ce', + name: 'uUSDrBTC Synthetic Expiring 31 Dec 2020', + symbol: 'uUSDrBTC-DEC', + decimals: 18, + }, + { + chainId: 1, + address: '0xd16c79c8a39d44b2f3eb45d2019cd6a42b03e2a9', + name: 'uUSDwETH Synthetic Expiring 31 Dec 2020', + symbol: 'uUSDwETH-DEC', + decimals: 18, + }, + { + chainId: 1, + address: '0x3d995510f8d82c2ea341845932b5ddde0bead9a3', + name: 'uGAS-JAN21 Token Expiring 31 Jan 2021', + symbol: 'uGAS-JAN21', + decimals: 18, + }, + { + chainId: 1, + address: '0x90f802c7e8fb5d40b0de583e34c065a3bd2020d8', + name: 'YD-ETH-MAR21 Token Expiring 31 Mar 2021', + symbol: 'YD-ETH-MAR21', + decimals: 18, + }, + { + chainId: 1, + address: '0x002f0b1a71c5730cf2f4da1970a889207bdb6d0d', + name: 'YD-BTC-MAR21 Token Expiring 31 Mar 2021', + symbol: 'YD-BTC-MAR21', + decimals: 18, + }, + { + chainId: 1, + address: '0x1062ad0e59fa67fa0b27369113098cc941dd0d5f', + name: 'UMA 35 Call Expirying 30 Apr 2021', + symbol: 'UMAc35-0421', + decimals: 18, + }, + { + chainId: 1, + address: '0xf93340b1a3adf7eedcaec25fae8171d4b736e89f', + name: 'pxUSD Synthetic USD Expiring 1 April 2021', + symbol: 'pxUSD_MAR2021', + decimals: 18, + }, + { + chainId: 1, + address: '0x84bd083b1c8bf929f39c98bc17cf518f40154f58', + name: 'Mario Cash Synthetic Token Expiring 15 January 2021', + symbol: 'Mario Cash-JAN-2021', + decimals: 18, + }, + { + chainId: 1, + address: '0x81fab276aec924fbde190cf379783526d413cf70', + name: 'uGAS-FEB21 Token Expiring 28 Feb 2021', + symbol: 'uGAS-FEB21', + decimals: 18, + }, + { + chainId: 1, + address: '0x4e110603e70b0b5f1c403ee543b37e1f1244cf28', + name: 'uGAS-MAR21 Token Expiring 31 Mar 2021', + symbol: 'uGAS-MAR21', + decimals: 18, + }, + { + chainId: 1, + address: '0xcf55a7f92d5e0c6683debbc1fc20c0a6e056df13', + name: 'Zelda Elastic Cash', + symbol: 'Zelda Elastic Cash', + decimals: 18, + }, + { + chainId: 1, + address: '0x654eebac62240e6c56bab5f6adf7cfa74a894510', + name: 'Zelda Spring Nuts Cash', + symbol: 'Zelda Spring Nuts Cash', + decimals: 18, + }, + { + chainId: 1, + address: '0xa48920cc1ad85d8ea13af5d7be180c0338c306dd', + name: 'Zelda Summer Nuts Cash', + symbol: 'Zelda Summer Nuts Cash', + decimals: 18, + }, + { + chainId: 1, + address: '0x249a198d59b57fda5dda90630febc86fd8c7594c', + name: 'Zelda Whirlwind Cash', + symbol: 'Zelda Whirlwind Cash', + decimals: 18, + }, + { + chainId: 1, + address: '0x5ed1406873c9eb91f6f9a67ac4e152387c1132e7', + name: 'Zelda Reinforced Cash', + symbol: 'Zelda Reinforced Cash', + decimals: 18, + }, + { + chainId: 1, + address: '0x8104c9f13118320eefe5fbea8a44d600b85981ef', + name: 'Mini Mario Summer Cash', + symbol: 'Mini Mario Summer Cash', + decimals: 18, + }, + { + chainId: 1, + address: '0x69746c719e59674b147df25f50e7cfa0673cb625', + name: 'Mini Mario Spring Cash', + symbol: 'Mini Mario Spring Cash', + decimals: 18, + }, + { + chainId: 1, + address: '0x6b1257641d18791141f025eab36fb567c4b564ff', + name: 'Bitcoin Dominance Token 31 March 2021', + symbol: 'BTCDOM-MAR2021', + decimals: 18, + }, + { + chainId: 1, + address: '0x4e83b6287588a96321b2661c5e041845ff7814af', + name: 'Altcoin Dominance Token 31 March 2021', + symbol: 'ALTDOM-MAR2021', + decimals: 18, + }, + { + chainId: 1, + address: '0x59fec83ec709c893aedd1a144cf1828eb04127cd', + name: 'pxGOLD Synthetic GOLD Expiring 31 May 2021', + symbol: 'pxGOLD_MAY2021', + decimals: 18, + }, + { + chainId: 1, + address: '0x89337BFb7938804c3776C9FB921EccAf5ab76758', + name: 'Compound Annualized Rate Future Expiring 28 March 2021', + symbol: 'CAR-USDC-MAR21', + decimals: 18, + }, + { + chainId: 1, + address: '0xec58d3aefc9aaa2e0036fa65f70d569f49d9d1ed', + name: 'uSTONKS Index Token April 2021', + symbol: 'uSTONKS_APR21', + decimals: 6, + }, + { + chainId: 1, + address: '0xa6B9d7E3d76cF23549293Fb22c488E0Ea591A44e', + name: 'uGAS-JUN21 Token Expiring 30 Jun 2021', + symbol: 'uGAS-JUN21', + decimals: 18, + }, + { + chainId: 1, + address: '0xe813b65da6c38a04591aed3f082d32db7d53c382', + name: 'Yield Dollar [WETH Dec 2021]', + symbol: 'YD-ETH-DEC21', + decimals: 18, + }, + { + chainId: 1, + address: '0x4b606e9eb2228c70f44453afe5a73e1fea258ce1', + name: 'pxUSD Synthetic USD Expiring 31 Mar 2022', + symbol: 'pxUSD_MAR2022', + decimals: 18, + }, + { + chainId: 1, + address: '0x5247c0db4044fb6f97f32c7e1b48758019a5a912', + name: 'pxGOLD Synthetic Gold Expiring 31 Mar 2022', + symbol: 'pxGOLD_MAR2022', + decimals: 18, + }, + { + chainId: 1, + address: '0x56fb1acaff95c0b6ebcd17c8361a63d98b1a5a11', + name: 'uForex CNYUSD Synthetic Token April 2021', + symbol: 'uCNYUSD-APR', + decimals: 6, + }, + { + chainId: 1, + address: '0xd49fa405dce086c65d66ca1ca41f8e98583812b4', + name: 'uForex EURUSD Synthetic Token April 2021', + symbol: 'uEURUSD-APR', + decimals: 6, + }, + { + chainId: 1, + address: '0x29dddacba3b231ee8d673dd0f0fa759ea145561b', + name: 'DEFI_PULSE_TOTAL_TVL Synthetic Token Expiring 15 April 2021', + symbol: 'TVL_ALL_APRIL15', + decimals: 6, + }, + { + chainId: 1, + address: '0xcbe430927370e95b4b10cfc702c6017ec7abefc3', + name: 'Yield Dollar [WETH Jun 2021]', + symbol: 'YD-ETH-JUN21', + decimals: 18, + }, + { + chainId: 1, + address: '0x4b7fb448df91c8ed973494f8c8c4f12daf3a8521', + name: 'Yield Dollar [renBTC Jun 2021]', + symbol: 'YD-BTC-JUN21', + decimals: 8, + }, + { + chainId: 1, + address: '0x3108c33b6fb38efedaefd8b5f7ca01d5f5c7372d', + name: 'Yield Dollar UMA 21', + symbol: 'yUMA21', + decimals: 18, + }, + { + chainId: 1, + address: '0x0cae9e4d663793c2a2A0b211c1Cf4bBca2B9cAa7', + name: 'Mirrored Amazon', + symbol: 'MAMZN', + decimals: 18, + }, + { + chainId: 1, + address: '0x31c63146a635EB7465e5853020b39713AC356991', + name: 'M US Oil', + symbol: 'MUSO', + decimals: 18, + }, + { + chainId: 1, + address: '0x59A921Db27Dd6d4d974745B7FfC5c33932653442', + name: 'M Google', + symbol: 'MGOOGL', + decimals: 18, + }, + { + chainId: 1, + address: '0xf72FCd9DCF0190923Fadd44811E240Ef4533fc86', + name: 'Mirrored ProShares', + symbol: 'MVIXY', + decimals: 18, + }, + { + chainId: 1, + address: '0x56aA298a19C93c6801FDde870fA63EF75Cc0aF72', + name: 'Mirrored Alibaba', + symbol: 'MBABA', + decimals: 18, + }, + { + chainId: 1, + address: '0x0e99cC0535BB6251F6679Fa6E65d6d3b430e840B', + name: 'Mirrored Facebook', + symbol: 'MFB', + decimals: 18, + }, + { + chainId: 1, + address: '0x13B02c8dE71680e71F0820c996E4bE43c2F57d15', + name: 'Mirrored Invesco QQ', + symbol: 'MQQQ', + decimals: 18, + }, + { + chainId: 1, + address: '0x41BbEDd7286dAab5910a1f15d12CBda839852BD7', + name: 'Mirrored Microsoft', + symbol: 'MMSFT', + decimals: 18, + }, + { + chainId: 1, + address: '0x9d1555d8cB3C846Bb4f7D5B1B1080872c3166676', + name: 'Mirrored iShares Si', + symbol: 'MSLV', + decimals: 18, + }, + { + chainId: 1, + address: '0x21cA39943E91d704678F5D00b6616650F066fD63', + name: 'Mirrored Tesla', + symbol: 'MTSLA', + decimals: 18, + }, + { + chainId: 1, + address: '0xe82bbB62fA81d0701643d1675FB50ec52fD3Df92', + name: 'DYDX Token', + symbol: 'DYDX', + decimals: 18, + }, + { + chainId: 10, + address: '0xE405de8F52ba7559f9df3C368500B6E6ae6Cee49', + name: 'sETH', + symbol: 'Synth Ether', + decimals: 18, + }, + { + chainId: 10, + address: '0x298B9B95708152ff6968aafd889c6586e9169f1D', + name: 'sBTC', + symbol: 'Synth Bitcoin', + decimals: 18, + }, + { + chainId: 10, + address: '0xc5Db22719A06418028A40A9B5E9A7c02959D0d08', + name: 'sLINK', + symbol: 'Synth Link', + decimals: 18, + }, + { + chainId: 1, + address: '0x6B60eE11b73230045cF9095E6e43AE9Ea638e172', + name: 'Shatner', + symbol: 'SHAT', + decimals: 18, + }, + { + chainId: 1, + address: '0x7277a44D1325D81Ac58893002a1B40a41bea43fe', + name: 'FAANG Index', + symbol: 'FAANG', + decimals: 18, + }, + { + chainId: 1, + address: '0x76175599887730786bdA1545D0D7AcE8737fEBB1', + name: 'ENS DAO', + symbol: 'ENS', + decimals: 18, + }, + { + chainId: 1, + address: '0xa82AA729AE2F0d78e961D66db53949e27a9E866d', + name: 'BMEX', + symbol: 'BMEX', + decimals: 18, + }, +] +var UNSUPPORTED_TOKEN_LIST = { + name, + timestamp, + version, + tags, + logoURI, + keywords, + tokens, +} + +function useAllLists() { + return useAppSelector(function (state) { + return state.lists.byUrl + }) +} +/** + * Combine the tokens in map2 with the tokens on map1, where tokens on map1 take precedence + * @param map1 the base token map + * @param map2 the map of additioanl tokens to add to the base map + */ +function combineMaps(map1, map2) { + var chainIds = Object.keys( + Object.keys(map1) + .concat(Object.keys(map2)) + .reduce(function (memo, value) { + memo[value] = true + return memo + }, {}) + ).map(function (id) { + return parseInt(id) + }) + return chainIds.reduce(function (memo, chainId) { + memo[chainId] = __assign(__assign({}, map2[chainId]), map1[chainId]) + return memo + }, {}) +} +// merge tokens contained within lists from urls +function useCombinedTokenMapFromUrls(urls) { + var lists = useAllLists() + return useMemo( + function () { + if (!urls) return {} + return ( + urls + .slice() + // sort by priority so top priority goes last + .sort(sortByListPriority) + .reduce(function (allTokens, currentUrl) { + var _a + var current = (_a = lists[currentUrl]) === null || _a === void 0 ? void 0 : _a.current + if (!current) return allTokens + try { + return combineMaps(allTokens, tokensToChainTokenMap(current)) + } catch (error) { + console.error('Could not show token list due to error', error) + return allTokens + } + }, {}) + ) + }, + [lists, urls] + ) +} +// filter out unsupported lists +function useActiveListUrls() { + var activeListUrls = useAppSelector(function (state) { + return state.lists.activeListUrls + }) + return useMemo( + function () { + return activeListUrls === null || activeListUrls === void 0 + ? void 0 + : activeListUrls.filter(function (url) { + return !UNSUPPORTED_LIST_URLS.includes(url) + }) + }, + [activeListUrls] + ) +} +function useInactiveListUrls() { + var lists = useAllLists() + var allActiveListUrls = useActiveListUrls() + return useMemo( + function () { + return Object.keys(lists).filter(function (url) { + return ( + !(allActiveListUrls === null || allActiveListUrls === void 0 ? void 0 : allActiveListUrls.includes(url)) && + !UNSUPPORTED_LIST_URLS.includes(url) + ) + }) + }, + [lists, allActiveListUrls] + ) +} +// get all the tokens from active lists, combine with local default tokens +function useCombinedActiveList() { + var activeListUrls = useActiveListUrls() + var activeTokens = useCombinedTokenMapFromUrls(activeListUrls) + return activeTokens +} +// list of tokens not supported on interface for various reasons, used to show warnings and prevent swaps and adds +function useUnsupportedTokenList() { + // get hard-coded broken tokens + var brokenListMap = useMemo(function () { + return tokensToChainTokenMap(BROKEN_LIST) + }, []) + // get hard-coded list of unsupported tokens + var localUnsupportedListMap = useMemo(function () { + return tokensToChainTokenMap(UNSUPPORTED_TOKEN_LIST) + }, []) + // get dynamic list of unsupported tokens + var loadedUnsupportedListMap = useCombinedTokenMapFromUrls(UNSUPPORTED_LIST_URLS) + // format into one token address map + return useMemo( + function () { + return combineMaps(brokenListMap, combineMaps(localUnsupportedListMap, loadedUnsupportedListMap)) + }, + [brokenListMap, localUnsupportedListMap, loadedUnsupportedListMap] + ) +} +function useIsListActive(url) { + var activeListUrls = useActiveListUrls() + return Boolean(activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(url)) +} + +// reduce token map into standard address <-> Token mapping, optionally include user added tokens +function useTokensFromMap(tokenMap, includeUserAdded) { + var chainId = useActiveWeb3React().chainId + var userAddedTokens = useUserAddedTokens() + return useMemo( + function () { + var _a + if (!chainId) return {} + // reduce to just tokens + var mapWithoutUrls = Object.keys((_a = tokenMap[chainId]) !== null && _a !== void 0 ? _a : {}).reduce(function ( + newMap, + address + ) { + newMap[address] = tokenMap[chainId][address].token + return newMap + }, + {}) + if (includeUserAdded) { + return ( + userAddedTokens + // reduce into all ALL_TOKENS filtered by the current chain + .reduce(function (tokenMap, token) { + tokenMap[token.address] = token + return tokenMap + }, __assign({}, mapWithoutUrls)) + ) + } + return mapWithoutUrls + }, + [chainId, userAddedTokens, tokenMap, includeUserAdded] + ) +} +function useAllTokens() { + var allTokens = useCombinedActiveList() + return useTokensFromMap(allTokens, true) +} +function useUnsupportedTokens() { + var chainId = useActiveWeb3React().chainId + var listsByUrl = useAllLists() + var unsupportedTokensMap = useUnsupportedTokenList() + var unsupportedTokens = useTokensFromMap(unsupportedTokensMap, false) + // checks the default L2 lists to see if `bridgeInfo` has an L1 address value that is unsupported + var l2InferredBlockedTokens = useMemo( + function () { + if (!chainId || !L2_CHAIN_IDS.includes(chainId)) { + return {} + } + if (!listsByUrl) { + return {} + } + var listUrl = CHAIN_INFO[chainId].defaultListUrl + var list = listsByUrl[listUrl].current + if (!list) { + return {} + } + var unsupportedSet = new Set(Object.keys(unsupportedTokens)) + return list.tokens.reduce(function (acc, tokenInfo) { + var _a + var _b + var bridgeInfo = (_b = tokenInfo.extensions) === null || _b === void 0 ? void 0 : _b.bridgeInfo + if ( + bridgeInfo && + bridgeInfo[SupportedChainId.MAINNET] && + bridgeInfo[SupportedChainId.MAINNET].tokenAddress && + unsupportedSet.has(bridgeInfo[SupportedChainId.MAINNET].tokenAddress) + ) { + var address = bridgeInfo[SupportedChainId.MAINNET].tokenAddress + // don't rely on decimals--it's possible that a token could be bridged w/ different decimals on the L2 + return __assign( + __assign({}, acc), + ((_a = {}), (_a[address] = new Token(SupportedChainId.MAINNET, address, tokenInfo.decimals)), _a) + ) + } + return acc + }, {}) + }, + [chainId, listsByUrl, unsupportedTokens] + ) + return __assign(__assign({}, unsupportedTokens), l2InferredBlockedTokens) +} +function useSearchInactiveTokenLists(search, minResults) { + if (minResults === void 0) { + minResults = 10 + } + var lists = useAllLists() + var inactiveUrls = useInactiveListUrls() + var chainId = useActiveWeb3React().chainId + var activeTokens = useAllTokens() + return useMemo( + function () { + var e_1, _a, e_2, _b + if (!search || search.trim().length === 0) return [] + var tokenFilter = getTokenFilter(search) + var result = [] + var addressSet = {} + try { + for ( + var inactiveUrls_1 = __values(inactiveUrls), inactiveUrls_1_1 = inactiveUrls_1.next(); + !inactiveUrls_1_1.done; + inactiveUrls_1_1 = inactiveUrls_1.next() + ) { + var url = inactiveUrls_1_1.value + var list = lists[url].current + if (!list) continue + try { + for (var _c = ((e_2 = void 0), __values(list.tokens)), _d = _c.next(); !_d.done; _d = _c.next()) { + var tokenInfo = _d.value + if (tokenInfo.chainId === chainId && tokenFilter(tokenInfo)) { + var wrapped = new WrappedTokenInfo(tokenInfo, list) + if (!(wrapped.address in activeTokens) && !addressSet[wrapped.address]) { + addressSet[wrapped.address] = true + result.push(wrapped) + if (result.length >= minResults) return result + } + } + } + } catch (e_2_1) { + e_2 = { error: e_2_1 } + } finally { + try { + if (_d && !_d.done && (_b = _c.return)) _b.call(_c) + } finally { + if (e_2) throw e_2.error + } + } + } + } catch (e_1_1) { + e_1 = { error: e_1_1 } + } finally { + try { + if (inactiveUrls_1_1 && !inactiveUrls_1_1.done && (_a = inactiveUrls_1.return)) _a.call(inactiveUrls_1) + } finally { + if (e_1) throw e_1.error + } + } + return result + }, + [activeTokens, chainId, inactiveUrls, lists, minResults, search] + ) +} +function useIsTokenActive(token) { + var activeTokens = useAllTokens() + if (!activeTokens || !token) { + return false + } + return !!activeTokens[token.address] +} +// Check if currency is included in custom list from user storage +function useIsUserAddedToken(currency) { + var userAddedTokens = useUserAddedTokens() + if (!currency) { + return false + } + return !!userAddedTokens.find(function (token) { + return currency.equals(token) + }) +} +// undefined if invalid or does not exist +// null if loading or null was passed +// otherwise returns the token +function useToken(tokenAddress) { + var tokens = useAllTokens() + return useTokenFromMap(tokens, tokenAddress) +} +function useCurrency(currencyId) { + var tokens = useAllTokens() + return useCurrencyFromMap(tokens, currencyId) +} + +function serializeToken(token) { + return { + chainId: token.chainId, + address: token.address, + decimals: token.decimals, + symbol: token.symbol, + name: token.name, + } +} +function deserializeToken(serializedToken) { + return new Token( + serializedToken.chainId, + serializedToken.address, + serializedToken.decimals, + serializedToken.symbol, + serializedToken.name + ) +} +function useIsDarkMode() { + var _a = useAppSelector(function (_a) { + var _b = _a.user, + matchesDarkMode = _b.matchesDarkMode, + userDarkMode = _b.userDarkMode + return { + userDarkMode, + matchesDarkMode, + } + }, shallowEqual), + userDarkMode = _a.userDarkMode, + matchesDarkMode = _a.matchesDarkMode + return userDarkMode === null ? matchesDarkMode : userDarkMode +} +function useDarkModeManager() { + var dispatch = useAppDispatch() + var darkMode = useIsDarkMode() + var toggleSetDarkMode = useCallback( + function () { + dispatch(updateUserDarkMode({ userDarkMode: !darkMode })) + }, + [darkMode, dispatch] + ) + return [darkMode, toggleSetDarkMode] +} +function useUserLocale() { + return useAppSelector(function (state) { + return state.user.userLocale + }) +} +function useUserLocaleManager() { + var dispatch = useAppDispatch() + var locale = useUserLocale() + var setLocale = useCallback( + function (newLocale) { + dispatch(updateUserLocale({ userLocale: newLocale })) + }, + [dispatch] + ) + return [locale, setLocale] +} +function useIsExpertMode() { + return useAppSelector(function (state) { + return state.user.userExpertMode + }) +} +function useExpertModeManager() { + var dispatch = useAppDispatch() + var expertMode = useIsExpertMode() + var toggleSetExpertMode = useCallback( + function () { + dispatch(updateUserExpertMode({ userExpertMode: !expertMode })) + }, + [expertMode, dispatch] + ) + return [expertMode, toggleSetExpertMode] +} +function useShowSurveyPopup() { + var dispatch = useAppDispatch() + var showSurveyPopup = useAppSelector(function (state) { + return state.user.showSurveyPopup + }) + var toggleShowSurveyPopup = useCallback( + function (showPopup) { + dispatch(updateShowSurveyPopup({ showSurveyPopup: showPopup })) + }, + [dispatch] + ) + return [showSurveyPopup, toggleShowSurveyPopup] +} +function useClientSideRouter() { + var dispatch = useAppDispatch() + var clientSideRouter = useAppSelector(function (state) { + return Boolean(state.user.userClientSideRouter) + }) + var setClientSideRouter = useCallback( + function (newClientSideRouter) { + dispatch(updateUserClientSideRouter({ userClientSideRouter: newClientSideRouter })) + }, + [dispatch] + ) + return [clientSideRouter, setClientSideRouter] +} +function useSetUserSlippageTolerance() { + var dispatch = useAppDispatch() + return useCallback( + function (userSlippageTolerance) { + var value + try { + value = + userSlippageTolerance === 'auto' ? 'auto' : JSBI.toNumber(userSlippageTolerance.multiply(10000).quotient) + } catch (error) { + value = 'auto' + } + dispatch( + updateUserSlippageTolerance({ + userSlippageTolerance: value, + }) + ) + }, + [dispatch] + ) +} +/** + * Return the user's slippage tolerance, from the redux store, and a function to update the slippage tolerance + */ +function useUserSlippageTolerance() { + var userSlippageTolerance = useAppSelector(function (state) { + return state.user.userSlippageTolerance + }) + return useMemo( + function () { + return userSlippageTolerance === 'auto' ? 'auto' : new Percent(userSlippageTolerance, 10000) + }, + [userSlippageTolerance] + ) +} +/** + * Same as above but replaces the auto with a default value + * @param defaultSlippageTolerance the default value to replace auto with + */ +function useUserSlippageToleranceWithDefault(defaultSlippageTolerance) { + var allowedSlippage = useUserSlippageTolerance() + return useMemo( + function () { + return allowedSlippage === 'auto' ? defaultSlippageTolerance : allowedSlippage + }, + [allowedSlippage, defaultSlippageTolerance] + ) +} +function useUserTransactionTTL() { + var chainId = useActiveWeb3React().chainId + var dispatch = useAppDispatch() + var userDeadline = useAppSelector(function (state) { + return state.user.userDeadline + }) + var onL2 = Boolean(chainId && L2_CHAIN_IDS.includes(chainId)) + var deadline = onL2 ? L2_DEADLINE_FROM_NOW : userDeadline + var setUserDeadline = useCallback( + function (userDeadline) { + dispatch(updateUserDeadline({ userDeadline })) + }, + [dispatch] + ) + return [deadline, setUserDeadline] +} +function useAddUserToken() { + var dispatch = useAppDispatch() + return useCallback( + function (token) { + dispatch(addSerializedToken({ serializedToken: serializeToken(token) })) + }, + [dispatch] + ) +} +function useRemoveUserAddedToken() { + var dispatch = useAppDispatch() + return useCallback( + function (chainId, address) { + dispatch(removeSerializedToken({ chainId, address })) + }, + [dispatch] + ) +} +function useUserAddedTokens() { + var chainId = useActiveWeb3React().chainId + var serializedTokensMap = useAppSelector(function (_a) { + var tokens = _a.user.tokens + return tokens + }) + return useMemo( + function () { + if (!chainId) return [] + var tokenMap = ( + serializedTokensMap === null || serializedTokensMap === void 0 ? void 0 : serializedTokensMap[chainId] + ) + ? Object.values(serializedTokensMap[chainId]).map(deserializeToken) + : [] + return tokenMap + }, + [serializedTokensMap, chainId] + ) +} +function useURLWarningVisible() { + return useAppSelector(function (state) { + return state.user.URLWarningVisible + }) +} + +var EXPLORER_HOSTNAMES = { + 'etherscan.io': true, + 'ropsten.etherscan.io': true, + 'rinkeby.etherscan.io': true, + 'kovan.etherscan.io': true, + 'goerli.etherscan.io': true, + 'optimistic.etherscan.io': true, + 'kovan-optimistic.etherscan.io': true, + 'rinkeby-explorer.arbitrum.io': true, + 'arbiscan.io': true, +} +/** + * Returns the anonymized version of the given href, i.e. one that does not leak user information + * @param href the link to anonymize, i.e. remove any personal data from + * @return string anonymized version of the given href + */ +function anonymizeLink(href) { + try { + var url = new URL(href) + if (EXPLORER_HOSTNAMES[url.hostname]) { + var pathPieces = url.pathname.split('/') + var anonymizedPath = pathPieces + .map(function (pc) { + return /0x[a-fA-F0-9]+/.test(pc) ? '***' : pc + }) + .join('/') + return url.protocol + '//' + url.hostname + anonymizedPath + } + return href + } catch (error) { + return href + } +} + +var ButtonText = styled.button( + templateObject_1$1l || + (templateObject_1$1l = __makeTemplateObject( + [ + '\n outline: none;\n border: none;\n font-size: inherit;\n padding: 0;\n margin: 0;\n background: none;\n cursor: pointer;\n\n :hover {\n opacity: 0.7;\n }\n\n :focus {\n text-decoration: underline;\n }\n', + ], + [ + '\n outline: none;\n border: none;\n font-size: inherit;\n padding: 0;\n margin: 0;\n background: none;\n cursor: pointer;\n\n :hover {\n opacity: 0.7;\n }\n\n :focus {\n text-decoration: underline;\n }\n', + ] + )) +) +var CloseIcon$2 = styled(X)( + templateObject_2$$ || + (templateObject_2$$ = __makeTemplateObject( + ['\n cursor: pointer;\n'], + [ + '\n cursor: pointer;\n', + // for wrapper react feather icons + ] + )) +) +// for wrapper react feather icons +var IconWrapper$4 = styled.div( + templateObject_3$S || + (templateObject_3$S = __makeTemplateObject( + [ + '\n display: flex;\n align-items: center;\n justify-content: center;\n width: ', + ';\n height: ', + ';\n margin-right: ', + ';\n margin-left: ', + ';\n & > * {\n stroke: ', + ';\n }\n', + ], + [ + '\n display: flex;\n align-items: center;\n justify-content: center;\n width: ', + ';\n height: ', + ';\n margin-right: ', + ';\n margin-left: ', + ';\n & > * {\n stroke: ', + ';\n }\n', + // A button that triggers some onClick result, but looks like a link. + ] + )), + function (_a) { + var size = _a.size + return size !== null && size !== void 0 ? size : '20px' + }, + function (_a) { + var size = _a.size + return size !== null && size !== void 0 ? size : '20px' + }, + function (_a) { + var marginRight = _a.marginRight + return marginRight !== null && marginRight !== void 0 ? marginRight : 0 + }, + function (_a) { + var marginLeft = _a.marginLeft + return marginLeft !== null && marginLeft !== void 0 ? marginLeft : 0 + }, + function (_a) { + var theme = _a.theme, + stroke = _a.stroke + return stroke !== null && stroke !== void 0 ? stroke : theme.blue1 + } +) +// A button that triggers some onClick result, but looks like a link. +var LinkStyledButton = styled.button( + templateObject_4$G || + (templateObject_4$G = __makeTemplateObject( + [ + '\n border: none;\n text-decoration: none;\n background: none;\n\n cursor: ', + ';\n color: ', + ';\n font-weight: 500;\n\n :hover {\n text-decoration: ', + ';\n }\n\n :focus {\n outline: none;\n text-decoration: ', + ';\n }\n\n :active {\n text-decoration: none;\n }\n', + ], + [ + '\n border: none;\n text-decoration: none;\n background: none;\n\n cursor: ', + ';\n color: ', + ';\n font-weight: 500;\n\n :hover {\n text-decoration: ', + ';\n }\n\n :focus {\n outline: none;\n text-decoration: ', + ';\n }\n\n :active {\n text-decoration: none;\n }\n', + // An internal link from the react-router-dom library that is correctly styled + ] + )), + function (_a) { + var disabled = _a.disabled + return disabled ? 'default' : 'pointer' + }, + function (_a) { + var theme = _a.theme, + disabled = _a.disabled + return disabled ? theme.text2 : theme.primary1 + }, + function (_a) { + var disabled = _a.disabled + return disabled ? null : 'underline' + }, + function (_a) { + var disabled = _a.disabled + return disabled ? null : 'underline' + } +) +// An internal link from the react-router-dom library that is correctly styled +var StyledInternalLink = styled(Link$1)( + templateObject_5$x || + (templateObject_5$x = __makeTemplateObject( + [ + '\n text-decoration: none;\n cursor: pointer;\n color: ', + ';\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 text-decoration: none;\n cursor: pointer;\n color: ', + ';\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', + ] + )), + function (_a) { + var theme = _a.theme + return theme.primary1 + } +) +var StyledLink = styled.a( + templateObject_6$o || + (templateObject_6$o = __makeTemplateObject( + [ + '\n text-decoration: none;\n cursor: pointer;\n color: ', + ';\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 text-decoration: none;\n cursor: pointer;\n color: ', + ';\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', + ] + )), + function (_a) { + var theme = _a.theme + return theme.primary1 + } +) +var LinkIconWrapper = styled.a( + templateObject_7$k || + (templateObject_7$k = __makeTemplateObject( + [ + '\n text-decoration: none;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n text-decoration: none;\n opacity: 0.7;\n }\n\n :focus {\n outline: none;\n text-decoration: none;\n }\n\n :active {\n text-decoration: none;\n }\n', + ], + [ + '\n text-decoration: none;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n text-decoration: none;\n opacity: 0.7;\n }\n\n :focus {\n outline: none;\n text-decoration: none;\n }\n\n :active {\n text-decoration: none;\n }\n', + ] + )) +) +var LinkIcon = styled(ExternalLink$1)( + templateObject_8$h || + (templateObject_8$h = __makeTemplateObject( + ['\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ', ';\n'], + ['\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ', ';\n'] + )), + function (_a) { + var theme = _a.theme + return theme.blue1 + } +) +var TrashIcon = styled(Trash)( + templateObject_9$g || + (templateObject_9$g = __makeTemplateObject( + [ + '\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ', + ';\n\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n opacity: 0.7;\n }\n', + ], + [ + '\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ', + ';\n\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n opacity: 0.7;\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.text3 + } +) +var rotateImg = keyframes( + templateObject_10$c || + (templateObject_10$c = __makeTemplateObject( + [ + '\n 0% {\n transform: perspective(1000px) rotateY(0deg);\n }\n\n 100% {\n transform: perspective(1000px) rotateY(360deg);\n }\n', + ], + [ + '\n 0% {\n transform: perspective(1000px) rotateY(0deg);\n }\n\n 100% {\n transform: perspective(1000px) rotateY(360deg);\n }\n', + ] + )) +) +var UniTokenAnimated = styled.img( + templateObject_11$a || + (templateObject_11$a = __makeTemplateObject( + [ + '\n animation: ', + ' 5s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n padding: 2rem 0 0 0;\n filter: drop-shadow(0px 2px 4px rgba(0, 0, 0, 0.15));\n', + ], + [ + '\n animation: ', + ' 5s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n padding: 2rem 0 0 0;\n filter: drop-shadow(0px 2px 4px rgba(0, 0, 0, 0.15));\n', + ] + )), + rotateImg +) +function handleClickExternalLink(event) { + var _a = event.currentTarget, + target = _a.target, + href = _a.href + var anonymizedHref = anonymizeLink(href) + // don't prevent default, don't redirect if it's a new tab + if (target === '_blank' || event.ctrlKey || event.metaKey) { + ReactGA.outboundLink({ label: anonymizedHref }, function () { + console.debug('Fired outbound link event', anonymizedHref) + }) + } else { + event.preventDefault() + // send a ReactGA event and then trigger a location change + ReactGA.outboundLink({ label: anonymizedHref }, function () { + window.location.href = anonymizedHref + }) + } +} +/** + * Outbound link that handles firing google analytics events + */ +function ExternalLink(_a) { + var _b = _a.target, + target = _b === void 0 ? '_blank' : _b, + href = _a.href, + _c = _a.rel, + rel = _c === void 0 ? 'noopener noreferrer' : _c, + rest = __rest(_a, ['target', 'href', 'rel']) + return jsx(StyledLink, __assign({ target, rel, href, onClick: handleClickExternalLink }, rest), void 0) +} +function ExternalLinkIcon(_a) { + var _b = _a.target, + target = _b === void 0 ? '_blank' : _b, + href = _a.href, + _c = _a.rel, + rel = _c === void 0 ? 'noopener noreferrer' : _c, + rest = __rest(_a, ['target', 'href', 'rel']) + return jsx( + LinkIconWrapper, + __assign({ target, rel, href, onClick: handleClickExternalLink }, rest, { + children: jsx(LinkIcon, {}, void 0), + }), + void 0 + ) +} +var rotate$1 = keyframes( + templateObject_12$a || + (templateObject_12$a = __makeTemplateObject( + ['\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n'], + ['\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n'] + )) +) +var Spinner$2 = styled.img( + templateObject_13$6 || + (templateObject_13$6 = __makeTemplateObject( + ['\n animation: 2s ', ' linear infinite;\n width: 16px;\n height: 16px;\n'], + ['\n animation: 2s ', ' linear infinite;\n width: 16px;\n height: 16px;\n'] + )), + rotate$1 +) +styled(StyledInternalLink)( + templateObject_14$6 || (templateObject_14$6 = __makeTemplateObject(['\n color: ', ';\n'], ['\n color: ', ';\n'])), + function (_a) { + var theme = _a.theme + return theme.text1 + } +) +var CustomLightSpinner = styled(Spinner$2)( + templateObject_15$4 || + (templateObject_15$4 = __makeTemplateObject( + ['\n height: ', ';\n width: ', ';\n'], + ['\n height: ', ';\n width: ', ';\n'] + )), + function (_a) { + var size = _a.size + return size + }, + function (_a) { + var size = _a.size + return size + } +) +var HideSmall = styled.span( + templateObject_17$2 || (templateObject_17$2 = __makeTemplateObject(['\n ', ';\n'], ['\n ', ';\n'])), + function (_a) { + var theme = _a.theme + return theme.mediaWidth.upToSmall( + templateObject_16$3 || + (templateObject_16$3 = __makeTemplateObject(['\n display: none;\n '], ['\n display: none;\n '])) + ) + } +) +styled.span( + templateObject_19$2 || (templateObject_19$2 = __makeTemplateObject(['\n ', ';\n'], ['\n ', ';\n'])), + function (_a) { + var theme = _a.theme + return theme.mediaWidth.upToExtraSmall( + templateObject_18$2 || + (templateObject_18$2 = __makeTemplateObject(['\n display: none;\n '], ['\n display: none;\n '])) + ) + } +) +styled.span( + templateObject_21$1 || + (templateObject_21$1 = __makeTemplateObject(['\n display: none;\n ', ';\n'], ['\n display: none;\n ', ';\n'])), + function (_a) { + var theme = _a.theme + return theme.mediaWidth.upToSmall( + templateObject_20$1 || + (templateObject_20$1 = __makeTemplateObject(['\n display: block;\n '], ['\n display: block;\n '])) + ) + } +) +var Separator$1 = styled.div( + templateObject_22 || + (templateObject_22 = __makeTemplateObject( + ['\n width: 100%;\n height: 1px;\n background-color: ', ';\n'], + ['\n width: 100%;\n height: 1px;\n background-color: ', ';\n'] + )), + function (_a) { + var theme = _a.theme + return theme.bg2 + } +) +var templateObject_1$1l, + templateObject_2$$, + templateObject_3$S, + templateObject_4$G, + templateObject_5$x, + templateObject_6$o, + templateObject_7$k, + templateObject_8$h, + templateObject_9$g, + templateObject_10$c, + templateObject_11$a, + templateObject_12$a, + templateObject_13$6, + templateObject_14$6, + templateObject_15$4, + templateObject_16$3, + templateObject_17$2, + templateObject_18$2, + templateObject_19$2, + templateObject_20$1, + templateObject_21$1, + templateObject_22 + +var MEDIA_WIDTHS = { + upToExtraSmall: 500, + upToSmall: 720, + upToMedium: 960, + upToLarge: 1280, } - -/** - * Parses a CurrencyAmount from the passed string. - * Returns the CurrencyAmount, or undefined if parsing fails. - */ -function tryParseCurrencyAmount(value, currency) { - if (!value || !currency) { - return undefined; - } - try { - var typedValueParsed = parseUnits(value, currency.decimals).toString(); - if (typedValueParsed !== '0') { - return CurrencyAmount.fromRawAmount(currency, JSBI.BigInt(typedValueParsed)); - } - } - catch (error) { - // fails if the user specifies too many decimal places of precision (or maybe exceed max uint?) - console.debug("Failed to parse input amount: \"" + value + "\"", error); - } - return undefined; +// Migrating to a standard z-index system https://getbootstrap.com/docs/5.0/layout/z-index/ +// Please avoid using deprecated numbers +var Z_INDEX +;(function (Z_INDEX) { + Z_INDEX[(Z_INDEX['deprecated_zero'] = 0)] = 'deprecated_zero' + Z_INDEX[(Z_INDEX['deprecated_content'] = 1)] = 'deprecated_content' + Z_INDEX[(Z_INDEX['dropdown'] = 1000)] = 'dropdown' + Z_INDEX[(Z_INDEX['sticky'] = 1020)] = 'sticky' + Z_INDEX[(Z_INDEX['fixed'] = 1030)] = 'fixed' + Z_INDEX[(Z_INDEX['modalBackdrop'] = 1040)] = 'modalBackdrop' + Z_INDEX[(Z_INDEX['offcanvas'] = 1050)] = 'offcanvas' + Z_INDEX[(Z_INDEX['modal'] = 1060)] = 'modal' + Z_INDEX[(Z_INDEX['popover'] = 1070)] = 'popover' + Z_INDEX[(Z_INDEX['tooltip'] = 1080)] = 'tooltip' +})(Z_INDEX || (Z_INDEX = {})) +var mediaWidthTemplates = Object.keys(MEDIA_WIDTHS).reduce(function (accumulator, size) { + accumulator[size] = function (a, b, c) { + return css( + templateObject_1$1k || + (templateObject_1$1k = __makeTemplateObject( + ['\n @media (max-width: ', 'px) {\n ', '\n }\n '], + ['\n @media (max-width: ', 'px) {\n ', '\n }\n '] + )), + MEDIA_WIDTHS[size], + css(a, b, c) + ) + } + return accumulator +}, {}) +var white = '#FFFFFF' +var black = '#000000' +function colors(darkMode) { + return { + darkMode, + // base + white, + black, + // text + text1: darkMode ? '#FFFFFF' : '#000000', + text2: darkMode ? '#C3C5CB' : '#565A69', + text3: darkMode ? '#8F96AC' : '#6E727D', + text4: darkMode ? '#B2B9D2' : '#C3C5CB', + text5: darkMode ? '#2C2F36' : '#EDEEF2', + // backgrounds / greys + bg0: darkMode ? '#191B1F' : '#FFF', + bg1: darkMode ? '#212429' : '#F7F8FA', + bg2: darkMode ? '#2C2F36' : '#EDEEF2', + bg3: darkMode ? '#40444F' : '#CED0D9', + bg4: darkMode ? '#565A69' : '#888D9B', + bg5: darkMode ? '#6C7284' : '#888D9B', + bg6: darkMode ? '#1A2028' : '#6C7284', + //specialty colors + modalBG: darkMode ? 'rgba(0,0,0,.425)' : 'rgba(0,0,0,0.3)', + advancedBG: darkMode ? 'rgba(0,0,0,0.1)' : 'rgba(255,255,255,0.6)', + //primary colors + primary1: darkMode ? '#2172E5' : '#E8006F', + primary2: darkMode ? '#3680E7' : '#FF8CC3', + primary3: darkMode ? '#4D8FEA' : '#FF99C9', + primary4: darkMode ? '#376bad70' : '#F6DDE8', + primary5: darkMode ? '#153d6f70' : '#FDEAF1', + // color text + primaryText1: darkMode ? '#5090ea' : '#D50066', + // secondary colors + secondary1: darkMode ? '#2172E5' : '#E8006F', + secondary2: darkMode ? '#17000b26' : '#F6DDE8', + secondary3: darkMode ? '#17000b26' : '#FDEAF1', + // other + red1: darkMode ? '#FF4343' : '#DA2D2B', + red2: darkMode ? '#F82D3A' : '#DF1F38', + red3: '#D60000', + green1: darkMode ? '#27AE60' : '#007D35', + yellow1: '#E3A507', + yellow2: '#FF8F00', + yellow3: '#F3B71E', + blue1: darkMode ? '#2172E5' : '#0068FC', + blue2: darkMode ? '#5199FF' : '#0068FC', + error: darkMode ? '#FD4040' : '#DF1F38', + success: darkMode ? '#27AE60' : '#007D35', + warning: '#FF8F00', + // dont wanna forget these blue yet + blue4: darkMode ? '#153d6f70' : '#C4D9F8', + // blue5: darkMode ? '#153d6f70' : '#EBF4FF', + } +} +function theme(darkMode) { + return __assign(__assign({}, colors(darkMode)), { + grids: { + sm: 8, + md: 12, + lg: 24, + }, + //shadows + shadow1: darkMode ? '#000' : '#2F80ED', + // media queries + mediaWidth: mediaWidthTemplates, + // css snippets + flexColumnNoWrap: css( + templateObject_2$_ || + (templateObject_2$_ = __makeTemplateObject( + ['\n display: flex;\n flex-flow: column nowrap;\n '], + ['\n display: flex;\n flex-flow: column nowrap;\n '] + )) + ), + flexRowNoWrap: css( + templateObject_3$R || + (templateObject_3$R = __makeTemplateObject( + ['\n display: flex;\n flex-flow: row nowrap;\n '], + ['\n display: flex;\n flex-flow: row nowrap;\n '] + )) + ), + }) +} +function ThemeProvider(_a) { + var children = _a.children + var darkMode = useIsDarkMode() + var themeObject = useMemo( + function () { + return theme(darkMode) + }, + [darkMode] + ) + return jsx(ThemeProvider$1, __assign({ theme: themeObject }, { children }), void 0) +} +var TextWrapper$1 = styled(Text$1)( + templateObject_4$F || + (templateObject_4$F = __makeTemplateObject( + ['\n color: ', ';\n'], + [ + '\n color: ', + ';\n', + /** + * Preset styles of the Rebass Text component + */ + ] + )), + function (_a) { + var color = _a.color, + theme = _a.theme + return theme[color] + } +) +/** + * Preset styles of the Rebass Text component + */ +var ThemedText = { + Main(props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text2' }, props), void 0) + }, + Link(props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'primary1' }, props), void 0) + }, + Label(props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 600, color: 'text1' }, props), void 0) + }, + Black(props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text1' }, props), void 0) + }, + White(props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'white' }, props), void 0) + }, + Body(props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 400, fontSize: 16, color: 'text1' }, props), void 0) + }, + LargeHeader(props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 600, fontSize: 24 }, props), void 0) + }, + MediumHeader(props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 500, fontSize: 20 }, props), void 0) + }, + SubHeader(props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 400, fontSize: 14 }, props), void 0) + }, + Small(props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 500, fontSize: 11 }, props), void 0) + }, + Blue(props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'blue1' }, props), void 0) + }, + Yellow(props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'yellow3' }, props), void 0) + }, + DarkGray(props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text3' }, props), void 0) + }, + Gray(props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'bg3' }, props), void 0) + }, + Italic(props) { + return jsx( + TextWrapper$1, + __assign({ fontWeight: 500, fontSize: 12, fontStyle: 'italic', color: 'text2' }, props), + void 0 + ) + }, + Error(_a) { + var error = _a.error, + props = __rest(_a, ['error']) + return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: error ? 'red1' : 'text2' }, props), void 0) + }, +} +var ThemedGlobalStyle = createGlobalStyle( + templateObject_5$w || + (templateObject_5$w = __makeTemplateObject( + ['\nhtml {\n color: ', ';\n background-color: ', ' !important;\n}\n\na {\n color: ', '; \n}\n'], + ['\nhtml {\n color: ', ';\n background-color: ', ' !important;\n}\n\na {\n color: ', '; \n}\n'] + )), + function (_a) { + var theme = _a.theme + return theme.text1 + }, + function (_a) { + var theme = _a.theme + return theme.bg1 + }, + function (_a) { + var theme = _a.theme + return theme.blue1 + } +) +var templateObject_1$1k, templateObject_2$_, templateObject_3$R, templateObject_4$F, templateObject_5$w + +var _a$b +var ETHERSCAN_PREFIXES = + ((_a$b = {}), + (_a$b[SupportedChainId.MAINNET] = 'https://etherscan.io'), + (_a$b[SupportedChainId.ROPSTEN] = 'https://ropsten.etherscan.io'), + (_a$b[SupportedChainId.RINKEBY] = 'https://rinkeby.etherscan.io'), + (_a$b[SupportedChainId.GOERLI] = 'https://goerli.etherscan.io'), + (_a$b[SupportedChainId.KOVAN] = 'https://kovan.etherscan.io'), + (_a$b[SupportedChainId.OPTIMISM] = 'https://optimistic.etherscan.io'), + (_a$b[SupportedChainId.OPTIMISTIC_KOVAN] = 'https://kovan-optimistic.etherscan.io'), + (_a$b[SupportedChainId.POLYGON_MUMBAI] = 'https://mumbai.polygonscan.com'), + (_a$b[SupportedChainId.POLYGON] = 'https://polygonscan.com'), + _a$b) +var ExplorerDataType +;(function (ExplorerDataType) { + ExplorerDataType['TRANSACTION'] = 'transaction' + ExplorerDataType['TOKEN'] = 'token' + ExplorerDataType['ADDRESS'] = 'address' + ExplorerDataType['BLOCK'] = 'block' +})(ExplorerDataType || (ExplorerDataType = {})) +/** + * Return the explorer link for the given data and data type + * @param chainId the ID of the chain for which to return the data + * @param data the data to return a link for + * @param type the type of the data + */ +function getExplorerLink(chainId, data, type) { + var _a + if (chainId === SupportedChainId.ARBITRUM_ONE) { + switch (type) { + case ExplorerDataType.TRANSACTION: + return 'https://arbiscan.io/tx/' + data + case ExplorerDataType.ADDRESS: + case ExplorerDataType.TOKEN: + return 'https://arbiscan.io/address/' + data + case ExplorerDataType.BLOCK: + return 'https://arbiscan.io/block/' + data + default: + return 'https://arbiscan.io/' + } + } + if (chainId === SupportedChainId.ARBITRUM_RINKEBY) { + switch (type) { + case ExplorerDataType.TRANSACTION: + return 'https://rinkeby-explorer.arbitrum.io/tx/' + data + case ExplorerDataType.ADDRESS: + case ExplorerDataType.TOKEN: + return 'https://rinkeby-explorer.arbitrum.io/address/' + data + case ExplorerDataType.BLOCK: + return 'https://rinkeby-explorer.arbitrum.io/block/' + data + default: + return 'https://rinkeby-explorer.arbitrum.io/' + } + } + var prefix = (_a = ETHERSCAN_PREFIXES[chainId]) !== null && _a !== void 0 ? _a : 'https://etherscan.io' + switch (type) { + case ExplorerDataType.TRANSACTION: + return prefix + '/tx/' + data + case ExplorerDataType.TOKEN: + return prefix + '/token/' + data + case ExplorerDataType.BLOCK: + if (chainId === SupportedChainId.OPTIMISM || chainId === SupportedChainId.OPTIMISTIC_KOVAN) { + return prefix + '/tx/' + data + } + return prefix + '/block/' + data + case ExplorerDataType.ADDRESS: + return prefix + '/address/' + data + default: + return '' + prefix + } } -// returns whether tradeB is better than tradeA by at least a threshold percentage amount -// only used by v2 hooks -function isTradeBetter(tradeA, tradeB, minimumDelta) { - if (minimumDelta === void 0) { minimumDelta = ZERO_PERCENT; } - if (tradeA && !tradeB) - return false; - if (tradeB && !tradeA) - return true; - if (!tradeA || !tradeB) - return undefined; - if (tradeA.tradeType !== tradeB.tradeType || - !tradeA.inputAmount.currency.equals(tradeB.inputAmount.currency) || - !tradeA.outputAmount.currency.equals(tradeB.outputAmount.currency)) { - throw new Error('Comparing incomparable trades'); - } - if (minimumDelta.equalTo(ZERO_PERCENT)) { - return tradeA.executionPrice.lessThan(tradeB.executionPrice); - } - else { - return tradeA.executionPrice.asFraction - .multiply(minimumDelta.add(ONE_HUNDRED_PERCENT)) - .lessThan(tradeB.executionPrice); - } +var Column = styled.div( + templateObject_1$1j || + (templateObject_1$1j = __makeTemplateObject( + ['\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n'], + ['\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n'] + )) +) +var ColumnCenter = styled(Column)( + templateObject_2$Z || + (templateObject_2$Z = __makeTemplateObject( + ['\n width: 100%;\n align-items: center;\n'], + ['\n width: 100%;\n align-items: center;\n'] + )) +) +var AutoColumn = styled.div( + templateObject_3$Q || + (templateObject_3$Q = __makeTemplateObject( + ['\n display: grid;\n grid-auto-rows: auto;\n grid-row-gap: ', ';\n justify-items: ', ';\n'], + ['\n display: grid;\n grid-auto-rows: auto;\n grid-row-gap: ', ';\n justify-items: ', ';\n'] + )), + function (_a) { + var gap = _a.gap + return (gap === 'sm' && '8px') || (gap === 'md' && '12px') || (gap === 'lg' && '24px') || gap + }, + function (_a) { + var justify = _a.justify + return justify && justify + } +) +var templateObject_1$1j, templateObject_2$Z, templateObject_3$Q + +var Row$1 = styled(Box)( + templateObject_1$1i || + (templateObject_1$1i = __makeTemplateObject( + [ + '\n width: ', + ';\n display: flex;\n padding: 0;\n align-items: ', + ';\n justify-content: ', + ';\n padding: ', + ';\n border: ', + ';\n border-radius: ', + ';\n', + ], + [ + '\n width: ', + ';\n display: flex;\n padding: 0;\n align-items: ', + ';\n justify-content: ', + ';\n padding: ', + ';\n border: ', + ';\n border-radius: ', + ';\n', + ] + )), + function (_a) { + var width = _a.width + return width !== null && width !== void 0 ? width : '100%' + }, + function (_a) { + var align = _a.align + return align !== null && align !== void 0 ? align : 'center' + }, + function (_a) { + var justify = _a.justify + return justify !== null && justify !== void 0 ? justify : 'flex-start' + }, + function (_a) { + var padding = _a.padding + return padding + }, + function (_a) { + var border = _a.border + return border + }, + function (_a) { + var borderRadius = _a.borderRadius + return borderRadius + } +) +var RowBetween = styled(Row$1)( + templateObject_2$Y || + (templateObject_2$Y = __makeTemplateObject( + ['\n justify-content: space-between;\n'], + ['\n justify-content: space-between;\n'] + )) +) +styled.div( + templateObject_3$P || + (templateObject_3$P = __makeTemplateObject( + ['\n display: flex;\n align-items: flex-end;\n'], + ['\n display: flex;\n align-items: flex-end;\n'] + )) +) +var AutoRow = styled(Row$1)( + templateObject_4$E || + (templateObject_4$E = __makeTemplateObject( + [ + '\n flex-wrap: wrap;\n margin: ', + ';\n justify-content: ', + ';\n\n & > * {\n margin: ', + ' !important;\n }\n', + ], + [ + '\n flex-wrap: wrap;\n margin: ', + ';\n justify-content: ', + ';\n\n & > * {\n margin: ', + ' !important;\n }\n', + ] + )), + function (_a) { + var gap = _a.gap + return gap && '-' + gap + }, + function (_a) { + var justify = _a.justify + return justify && justify + }, + function (_a) { + var gap = _a.gap + return gap + } +) +var RowFixed = styled(Row$1)( + templateObject_5$v || + (templateObject_5$v = __makeTemplateObject( + ['\n width: fit-content;\n margin: ', ';\n'], + ['\n width: fit-content;\n margin: ', ';\n'] + )), + function (_a) { + var gap = _a.gap + return gap && '-' + gap + } +) +var templateObject_1$1i, templateObject_2$Y, templateObject_3$P, templateObject_4$E, templateObject_5$v + +var InputPanel$1 = styled.div( + templateObject_1$1h || + (templateObject_1$1h = __makeTemplateObject( + [ + '\n ', + '\n position: relative;\n border-radius: 1.25rem;\n background-color: ', + ';\n z-index: 1;\n width: 100%;\n', + ], + [ + '\n ', + '\n position: relative;\n border-radius: 1.25rem;\n background-color: ', + ';\n z-index: 1;\n width: 100%;\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.flexColumnNoWrap + }, + function (_a) { + var theme = _a.theme + return theme.bg1 + } +) +var ContainerRow = styled.div( + templateObject_2$X || + (templateObject_2$X = __makeTemplateObject( + [ + '\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 1.25rem;\n border: 1px solid ', + ';\n transition: border-color 300ms ', + ',\n color 500ms ', + ';\n background-color: ', + ';\n', + ], + [ + '\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 1.25rem;\n border: 1px solid ', + ';\n transition: border-color 300ms ', + ',\n color 500ms ', + ';\n background-color: ', + ';\n', + ] + )), + function (_a) { + var error = _a.error, + theme = _a.theme + return error ? theme.red1 : theme.bg2 + }, + function (_a) { + var error = _a.error + return error ? 'step-end' : 'step-start' + }, + function (_a) { + var error = _a.error + return error ? 'step-end' : 'step-start' + }, + function (_a) { + var theme = _a.theme + return theme.bg1 + } +) +var InputContainer = styled.div( + templateObject_3$O || + (templateObject_3$O = __makeTemplateObject( + ['\n flex: 1;\n padding: 1rem;\n'], + ['\n flex: 1;\n padding: 1rem;\n'] + )) +) +var Input$2 = styled.input( + templateObject_4$D || + (templateObject_4$D = __makeTemplateObject( + [ + '\n font-size: 1.25rem;\n outline: none;\n border: none;\n flex: 1 1 auto;\n width: 0;\n background-color: ', + ';\n transition: color 300ms ', + ';\n color: ', + ';\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 500;\n width: 100%;\n ::placeholder {\n color: ', + ';\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: ', + ';\n }\n', + ], + [ + '\n font-size: 1.25rem;\n outline: none;\n border: none;\n flex: 1 1 auto;\n width: 0;\n background-color: ', + ';\n transition: color 300ms ', + ';\n color: ', + ';\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 500;\n width: 100%;\n ::placeholder {\n color: ', + ';\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: ', + ';\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.bg1 + }, + function (_a) { + var error = _a.error + return error ? 'step-end' : 'step-start' + }, + function (_a) { + var error = _a.error, + theme = _a.theme + return error ? theme.red1 : theme.text1 + }, + function (_a) { + var theme = _a.theme + return theme.text4 + }, + function (_a) { + var theme = _a.theme + return theme.text4 + } +) +function AddressInputPanel(_a) { + var id = _a.id, + _b = _a.className, + className = _b === void 0 ? 'recipient-address-input' : _b, + label = _a.label, + placeholder = _a.placeholder, + value = _a.value, + onChange = _a.onChange + var chainId = useActiveWeb3React().chainId + var theme = useContext(ThemeContext) + var _c = useENS(value), + address = _c.address, + loading = _c.loading, + name = _c.name + var handleInput = useCallback( + function (event) { + var input = event.target.value + var withoutSpaces = input.replace(/\s+/g, '') + onChange(withoutSpaces) + }, + [onChange] + ) + var error = Boolean(value.length > 0 && !loading && !address) + return jsx( + InputPanel$1, + __assign( + { id }, + { + children: jsx( + ContainerRow, + __assign( + { error }, + { + children: jsx( + InputContainer, + { + children: jsxs( + AutoColumn, + __assign( + { gap: 'md' }, + { + children: [ + jsxs( + RowBetween, + { + children: [ + jsx( + ThemedText.Black, + __assign( + { color: theme.text2, fontWeight: 500, fontSize: 14 }, + { + children: + label !== null && label !== void 0 + ? label + : jsx(Trans, { children: 'Recipient' }, void 0), + } + ), + void 0 + ), + address && + chainId && + jsx( + ExternalLink, + __assign( + { + href: getExplorerLink( + chainId, + name !== null && name !== void 0 ? name : address, + ExplorerDataType.ADDRESS + ), + style: { fontSize: '14px' }, + }, + { children: jsx(Trans, { children: '(View on Explorer)' }, void 0) } + ), + void 0 + ), + ], + }, + void 0 + ), + jsx( + Input$2, + { + className, + type: 'text', + autoComplete: 'off', + autoCorrect: 'off', + autoCapitalize: 'off', + spellCheck: 'false', + placeholder: + placeholder !== null && placeholder !== void 0 + ? placeholder + : t( + templateObject_5$u || + (templateObject_5$u = __makeTemplateObject( + ['Wallet Address or ENS name'], + ['Wallet Address or ENS name'] + )) + ), + error, + pattern: '^(0x[a-fA-F0-9]{40})$', + onChange: handleInput, + value, + }, + void 0 + ), + ], + } + ), + void 0 + ), + }, + void 0 + ), + } + ), + void 0 + ), + } + ), + void 0 + ) } +var templateObject_1$1h, templateObject_2$X, templateObject_3$O, templateObject_4$D, templateObject_5$u -function useAllCurrencyCombinations(currencyA, currencyB) { - var chainId = currencyA === null || currencyA === void 0 ? void 0 : currencyA.chainId; - var _a = __read(chainId ? [currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped, currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped] : [undefined, undefined], 2), tokenA = _a[0], tokenB = _a[1]; - var bases = useMemo(function () { - var _a, _b, _c, _d, _e; - if (!chainId || chainId !== (tokenB === null || tokenB === void 0 ? void 0 : tokenB.chainId)) - return []; - var common = (_a = BASES_TO_CHECK_TRADES_AGAINST[chainId]) !== null && _a !== void 0 ? _a : []; - var additionalA = tokenA ? (_c = (_b = ADDITIONAL_BASES[chainId]) === null || _b === void 0 ? void 0 : _b[tokenA.address]) !== null && _c !== void 0 ? _c : [] : []; - var additionalB = tokenB ? (_e = (_d = ADDITIONAL_BASES[chainId]) === null || _d === void 0 ? void 0 : _d[tokenB.address]) !== null && _e !== void 0 ? _e : [] : []; - return __spreadArray(__spreadArray(__spreadArray([], __read(common), false), __read(additionalA), false), __read(additionalB), false); - }, [chainId, tokenA, tokenB]); - var basePairs = useMemo(function () { - return bases - .flatMap(function (base) { return bases.map(function (otherBase) { return [base, otherBase]; }); }) - // though redundant with the first filter below, that expression runs more often, so this is probably worthwhile - .filter(function (_a) { - var _b = __read(_a, 2), t0 = _b[0], t1 = _b[1]; - return !t0.equals(t1); - }); - }, [bases]); - return useMemo(function () { - return tokenA && tokenB - ? __spreadArray(__spreadArray(__spreadArray([ - // the direct pair - [tokenA, tokenB] - ], __read(bases.map(function (base) { return [tokenA, base]; })), false), __read(bases.map(function (base) { return [tokenB, base]; })), false), __read(basePairs), false).filter(function (_a) { - var _b = __read(_a, 2), t0 = _b[0], t1 = _b[1]; - return !t0.equals(t1); - }) - // filter out duplicate pairs - .filter(function (_a, i, otherPairs) { - var _b = __read(_a, 2), t0 = _b[0], t1 = _b[1]; - // find the first index in the array at which there are the same 2 tokens as the current - var firstIndexInOtherPairs = otherPairs.findIndex(function (_a) { - var _b = __read(_a, 2), t0Other = _b[0], t1Other = _b[1]; - return (t0.equals(t0Other) && t1.equals(t1Other)) || (t0.equals(t1Other) && t1.equals(t0Other)); - }); - // only accept the first occurrence of the same 2 tokens - return firstIndexInOtherPairs === i; - }) - // optionally filter out some pairs for tokens with custom bases defined - .filter(function (_a) { - var _b = __read(_a, 2), tokenA = _b[0], tokenB = _b[1]; - if (!chainId) - return true; - var customBases = CUSTOM_BASES[chainId]; - var customBasesA = customBases === null || customBases === void 0 ? void 0 : customBases[tokenA.address]; - var customBasesB = customBases === null || customBases === void 0 ? void 0 : customBases[tokenB.address]; - if (!customBasesA && !customBasesB) - return true; - if (customBasesA && !customBasesA.find(function (base) { return tokenB.equals(base); })) - return false; - if (customBasesB && !customBasesB.find(function (base) { return tokenA.equals(base); })) - return false; - return true; - }) - : []; - }, [tokenA, tokenB, bases, basePairs, chainId]); -} - -var PAIR_INTERFACE = new Interface(abi$4); -var PairState; -(function (PairState) { - PairState[PairState["LOADING"] = 0] = "LOADING"; - PairState[PairState["NOT_EXISTS"] = 1] = "NOT_EXISTS"; - PairState[PairState["EXISTS"] = 2] = "EXISTS"; - PairState[PairState["INVALID"] = 3] = "INVALID"; -})(PairState || (PairState = {})); -function useV2Pairs(currencies) { - var tokens = useMemo(function () { return currencies.map(function (_a) { - var _b = __read(_a, 2), currencyA = _b[0], currencyB = _b[1]; - return [currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped, currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped]; - }); }, [currencies]); - var pairAddresses = useMemo(function () { - return tokens.map(function (_a) { - var _b = __read(_a, 2), tokenA = _b[0], tokenB = _b[1]; - return tokenA && - tokenB && - tokenA.chainId === tokenB.chainId && - !tokenA.equals(tokenB) && - V2_FACTORY_ADDRESSES[tokenA.chainId] - ? computePairAddress({ factoryAddress: V2_FACTORY_ADDRESSES[tokenA.chainId], tokenA: tokenA, tokenB: tokenB }) - : undefined; - }); - }, [tokens]); - var results = useMultipleContractSingleData(pairAddresses, PAIR_INTERFACE, 'getReserves'); - return useMemo(function () { - return results.map(function (result, i) { - var reserves = result.result, loading = result.loading; - var tokenA = tokens[i][0]; - var tokenB = tokens[i][1]; - if (loading) - return [PairState.LOADING, null]; - if (!tokenA || !tokenB || tokenA.equals(tokenB)) - return [PairState.INVALID, null]; - if (!reserves) - return [PairState.NOT_EXISTS, null]; - var reserve0 = reserves.reserve0, reserve1 = reserves.reserve1; - var _a = __read(tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA], 2), token0 = _a[0], token1 = _a[1]; - return [ - PairState.EXISTS, - new Pair(CurrencyAmount.fromRawAmount(token0, reserve0.toString()), CurrencyAmount.fromRawAmount(token1, reserve1.toString())), - ]; - }); - }, [results, tokens]); +function useTheme() { + return useContext(ThemeContext) } -function useAllCommonPairs(currencyA, currencyB) { - var allCurrencyCombinations = useAllCurrencyCombinations(currencyA, currencyB); - var allPairs = useV2Pairs(allCurrencyCombinations); - return useMemo(function () { - return Object.values(allPairs - // filter out invalid pairs - .filter(function (result) { return Boolean(result[0] === PairState.EXISTS && result[1]); }) - .map(function (_a) { - var _b = __read(_a, 2), pair = _b[1]; - return pair; - })); - }, [allPairs]); -} -var MAX_HOPS = 3; -/** - * Returns the best v2 trade for a desired swap - * @param tradeType whether the swap is an exact in/out - * @param amountSpecified the exact amount to swap in/out - * @param otherCurrency the desired output/payment currency - */ -function useBestV2Trade(tradeType, amountSpecified, otherCurrency, _a) { - var _b = _a === void 0 ? {} : _a, _c = _b.maxHops, maxHops = _c === void 0 ? MAX_HOPS : _c; - var _d = __read(useMemo(function () { - return tradeType === TradeType.EXACT_INPUT - ? [amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, otherCurrency] - : [otherCurrency, amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency]; - }, [tradeType, amountSpecified, otherCurrency]), 2), currencyIn = _d[0], currencyOut = _d[1]; - var allowedPairs = useAllCommonPairs(currencyIn, currencyOut); - return useMemo(function () { - var _a, _b, _c, _d; - if (amountSpecified && currencyIn && currencyOut && allowedPairs.length > 0) { - if (maxHops === 1) { - var options = { maxHops: 1, maxNumResults: 1 }; - if (tradeType === TradeType.EXACT_INPUT) { - var amountIn = amountSpecified; - return (_a = Trade.bestTradeExactIn(allowedPairs, amountIn, currencyOut, options)[0]) !== null && _a !== void 0 ? _a : null; - } - else { - var amountOut = amountSpecified; - return (_b = Trade.bestTradeExactOut(allowedPairs, currencyIn, amountOut, options)[0]) !== null && _b !== void 0 ? _b : null; - } - } - // search through trades with varying hops, find best trade out of them - var bestTradeSoFar = null; - for (var i = 1; i <= maxHops; i++) { - var options = { maxHops: i, maxNumResults: 1 }; - var currentTrade = void 0; - if (tradeType === TradeType.EXACT_INPUT) { - var amountIn = amountSpecified; - currentTrade = (_c = Trade.bestTradeExactIn(allowedPairs, amountIn, currencyOut, options)[0]) !== null && _c !== void 0 ? _c : null; - } - else { - var amountOut = amountSpecified; - currentTrade = (_d = Trade.bestTradeExactOut(allowedPairs, currencyIn, amountOut, options)[0]) !== null && _d !== void 0 ? _d : null; - } - // if current trade is best yet, save it - if (isTradeBetter(bestTradeSoFar, currentTrade, BETTER_TRADE_LESS_HOPS_THRESHOLD)) { - bestTradeSoFar = currentTrade; - } - } - return bestTradeSoFar; - } - return null; - }, [tradeType, amountSpecified, currencyIn, currencyOut, allowedPairs, maxHops]); -} - -var TradeState; -(function (TradeState) { - TradeState[TradeState["LOADING"] = 0] = "LOADING"; - TradeState[TradeState["INVALID"] = 1] = "INVALID"; - TradeState[TradeState["NO_ROUTE_FOUND"] = 2] = "NO_ROUTE_FOUND"; - TradeState[TradeState["VALID"] = 3] = "VALID"; - TradeState[TradeState["SYNCING"] = 4] = "SYNCING"; -})(TradeState || (TradeState = {})); -var InterfaceTrade = /** @class */ (function (_super) { - __extends(InterfaceTrade, _super); - function InterfaceTrade(_a) { - var gasUseEstimateUSD = _a.gasUseEstimateUSD, routes = __rest(_a, ["gasUseEstimateUSD"]); - var _this = _super.call(this, routes) || this; - _this.gasUseEstimateUSD = gasUseEstimateUSD; - return _this; - } - return InterfaceTrade; -}(Trade$1)); +var BaseButton = styled(Button$1)( + templateObject_1$1g || + (templateObject_1$1g = __makeTemplateObject( + [ + '\n padding: ', + ';\n width: ', + ';\n font-weight: 500;\n text-align: center;\n border-radius: ', + ';\n outline: none;\n border: 1px solid transparent;\n color: ', + ';\n text-decoration: none;\n display: flex;\n justify-content: center;\n flex-wrap: nowrap;\n align-items: center;\n cursor: pointer;\n position: relative;\n z-index: 1;\n &:disabled {\n opacity: 50%;\n cursor: auto;\n pointer-events: none;\n }\n\n will-change: transform;\n transition: transform 450ms ease;\n transform: perspective(1px) translateZ(0);\n\n > * {\n user-select: none;\n }\n\n > a {\n text-decoration: none;\n }\n', + ], + [ + '\n padding: ', + ';\n width: ', + ';\n font-weight: 500;\n text-align: center;\n border-radius: ', + ';\n outline: none;\n border: 1px solid transparent;\n color: ', + ';\n text-decoration: none;\n display: flex;\n justify-content: center;\n flex-wrap: nowrap;\n align-items: center;\n cursor: pointer;\n position: relative;\n z-index: 1;\n &:disabled {\n opacity: 50%;\n cursor: auto;\n pointer-events: none;\n }\n\n will-change: transform;\n transition: transform 450ms ease;\n transform: perspective(1px) translateZ(0);\n\n > * {\n user-select: none;\n }\n\n > a {\n text-decoration: none;\n }\n', + ] + )), + function (_a) { + var padding = _a.padding + return padding !== null && padding !== void 0 ? padding : '16px' + }, + function (_a) { + var width = _a.width + return width !== null && width !== void 0 ? width : '100%' + }, + function (_a) { + var $borderRadius = _a.$borderRadius + return $borderRadius !== null && $borderRadius !== void 0 ? $borderRadius : '20px' + }, + function (_a) { + var theme = _a.theme + return theme.text1 + } +) +var ButtonPrimary = styled(BaseButton)( + templateObject_2$W || + (templateObject_2$W = __makeTemplateObject( + [ + '\n background-color: ', + ';\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:hover {\n background-color: ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:disabled {\n background-color: ', + ';\n color: ', + ';\n cursor: auto;\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n', + ], + [ + '\n background-color: ', + ';\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:hover {\n background-color: ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:disabled {\n background-color: ', + ';\n color: ', + ';\n cursor: auto;\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.primary1 + }, + function (_a) { + var theme = _a.theme + return darken(0.05, theme.primary1) + }, + function (_a) { + var theme = _a.theme + return darken(0.05, theme.primary1) + }, + function (_a) { + var theme = _a.theme + return darken(0.05, theme.primary1) + }, + function (_a) { + var theme = _a.theme + return darken(0.1, theme.primary1) + }, + function (_a) { + var theme = _a.theme + return darken(0.1, theme.primary1) + }, + function (_a) { + var theme = _a.theme, + altDisabledStyle = _a.altDisabledStyle, + disabled = _a.disabled + return altDisabledStyle ? (disabled ? theme.primary1 : theme.bg2) : theme.bg2 + }, + function (_a) { + var altDisabledStyle = _a.altDisabledStyle, + disabled = _a.disabled, + theme = _a.theme + return altDisabledStyle ? (disabled ? theme.white : theme.text2) : theme.text2 + } +) +var ButtonLight = styled(BaseButton)( + templateObject_3$N || + (templateObject_3$N = __makeTemplateObject( + [ + '\n background-color: ', + ';\n color: ', + ';\n font-size: 16px;\n font-weight: 500;\n &:focus {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:hover {\n background-color: ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n :disabled {\n opacity: 0.4;\n :hover {\n cursor: auto;\n background-color: ', + ';\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n }\n', + ], + [ + '\n background-color: ', + ';\n color: ', + ';\n font-size: 16px;\n font-weight: 500;\n &:focus {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:hover {\n background-color: ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n :disabled {\n opacity: 0.4;\n :hover {\n cursor: auto;\n background-color: ', + ';\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.primary5 + }, + function (_a) { + var theme = _a.theme + return theme.primaryText1 + }, + function (_a) { + var theme = _a.theme, + disabled = _a.disabled + return !disabled && darken(0.03, theme.primary5) + }, + function (_a) { + var theme = _a.theme, + disabled = _a.disabled + return !disabled && darken(0.03, theme.primary5) + }, + function (_a) { + var theme = _a.theme, + disabled = _a.disabled + return !disabled && darken(0.03, theme.primary5) + }, + function (_a) { + var theme = _a.theme, + disabled = _a.disabled + return !disabled && darken(0.05, theme.primary5) + }, + function (_a) { + var theme = _a.theme, + disabled = _a.disabled + return !disabled && darken(0.05, theme.primary5) + }, + function (_a) { + var theme = _a.theme + return theme.primary5 + } +) +var ButtonGray = styled(BaseButton)( + templateObject_4$C || + (templateObject_4$C = __makeTemplateObject( + [ + '\n background-color: ', + ';\n color: ', + ';\n font-size: 16px;\n font-weight: 500;\n\n &:hover {\n background-color: ', + ';\n }\n &:active {\n background-color: ', + ';\n }\n', + ], + [ + '\n background-color: ', + ';\n color: ', + ';\n font-size: 16px;\n font-weight: 500;\n\n &:hover {\n background-color: ', + ';\n }\n &:active {\n background-color: ', + ';\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.bg1 + }, + function (_a) { + var theme = _a.theme + return theme.text2 + }, + function (_a) { + var theme = _a.theme, + disabled = _a.disabled + return !disabled && darken(0.05, theme.bg2) + }, + function (_a) { + var theme = _a.theme, + disabled = _a.disabled + return !disabled && darken(0.1, theme.bg2) + } +) +var ButtonSecondary = styled(BaseButton)( + templateObject_5$t || + (templateObject_5$t = __makeTemplateObject( + [ + '\n border: 1px solid ', + ';\n color: ', + ';\n background-color: transparent;\n font-size: 16px;\n border-radius: 12px;\n padding: ', + ';\n\n &:focus {\n box-shadow: 0 0 0 1pt ', + ';\n border: 1px solid ', + ';\n }\n &:hover {\n border: 1px solid ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', + ';\n border: 1px solid ', + ';\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n a:hover {\n text-decoration: none;\n }\n', + ], + [ + '\n border: 1px solid ', + ';\n color: ', + ';\n background-color: transparent;\n font-size: 16px;\n border-radius: 12px;\n padding: ', + ';\n\n &:focus {\n box-shadow: 0 0 0 1pt ', + ';\n border: 1px solid ', + ';\n }\n &:hover {\n border: 1px solid ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', + ';\n border: 1px solid ', + ';\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n a:hover {\n text-decoration: none;\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.primary4 + }, + function (_a) { + var theme = _a.theme + return theme.primary1 + }, + function (_a) { + var padding = _a.padding + return padding ? padding : '10px' + }, + function (_a) { + var theme = _a.theme + return theme.primary4 + }, + function (_a) { + var theme = _a.theme + return theme.primary3 + }, + function (_a) { + var theme = _a.theme + return theme.primary3 + }, + function (_a) { + var theme = _a.theme + return theme.primary4 + }, + function (_a) { + var theme = _a.theme + return theme.primary3 + } +) +var ButtonOutlined = styled(BaseButton)( + templateObject_6$n || + (templateObject_6$n = __makeTemplateObject( + [ + '\n border: 1px solid ', + ';\n background-color: transparent;\n color: ', + ';\n &:focus {\n box-shadow: 0 0 0 1px ', + ';\n }\n &:hover {\n box-shadow: 0 0 0 1px ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1px ', + ';\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n', + ], + [ + '\n border: 1px solid ', + ';\n background-color: transparent;\n color: ', + ';\n &:focus {\n box-shadow: 0 0 0 1px ', + ';\n }\n &:hover {\n box-shadow: 0 0 0 1px ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1px ', + ';\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.bg2 + }, + function (_a) { + var theme = _a.theme + return theme.text1 + }, + function (_a) { + var theme = _a.theme + return theme.bg4 + }, + function (_a) { + var theme = _a.theme + return theme.bg4 + }, + function (_a) { + var theme = _a.theme + return theme.bg4 + } +) +styled(BaseButton)( + templateObject_7$j || + (templateObject_7$j = __makeTemplateObject( + [ + '\n background-color: ', + ';\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:hover {\n background-color: ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:disabled {\n background-color: ', + ';\n opacity: 50%;\n cursor: auto;\n }\n', + ], + [ + '\n background-color: ', + ';\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:hover {\n background-color: ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:disabled {\n background-color: ', + ';\n opacity: 50%;\n cursor: auto;\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.yellow3 + }, + function (_a) { + var theme = _a.theme + return darken(0.05, theme.yellow3) + }, + function (_a) { + var theme = _a.theme + return darken(0.05, theme.yellow3) + }, + function (_a) { + var theme = _a.theme + return darken(0.05, theme.yellow3) + }, + function (_a) { + var theme = _a.theme + return darken(0.1, theme.yellow3) + }, + function (_a) { + var theme = _a.theme + return darken(0.1, theme.yellow3) + }, + function (_a) { + var theme = _a.theme + return theme.yellow3 + } +) +var ButtonEmpty = styled(BaseButton)( + templateObject_8$g || + (templateObject_8$g = __makeTemplateObject( + [ + '\n background-color: transparent;\n color: ', + ';\n display: flex;\n justify-content: center;\n align-items: center;\n\n &:focus {\n text-decoration: underline;\n }\n &:hover {\n text-decoration: none;\n }\n &:active {\n text-decoration: none;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n', + ], + [ + '\n background-color: transparent;\n color: ', + ';\n display: flex;\n justify-content: center;\n align-items: center;\n\n &:focus {\n text-decoration: underline;\n }\n &:hover {\n text-decoration: none;\n }\n &:active {\n text-decoration: none;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.primary1 + } +) +styled(BaseButton)( + templateObject_9$f || + (templateObject_9$f = __makeTemplateObject( + [ + '\n padding: 0;\n width: fit-content;\n background: none;\n text-decoration: none;\n &:focus {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n text-decoration: underline;\n }\n &:hover {\n // text-decoration: underline;\n opacity: 0.9;\n }\n &:active {\n text-decoration: underline;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n', + ], + [ + '\n padding: 0;\n width: fit-content;\n background: none;\n text-decoration: none;\n &:focus {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n text-decoration: underline;\n }\n &:hover {\n // text-decoration: underline;\n opacity: 0.9;\n }\n &:active {\n text-decoration: underline;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n', + ] + )) +) +var ButtonConfirmedStyle = styled(BaseButton)( + templateObject_10$b || + (templateObject_10$b = __makeTemplateObject( + [ + '\n background-color: ', + ';\n color: ', + ';\n /* border: 1px solid ', + '; */\n\n &:disabled {\n opacity: 50%;\n background-color: ', + ';\n color: ', + ';\n cursor: auto;\n }\n', + ], + [ + '\n background-color: ', + ';\n color: ', + ';\n /* border: 1px solid ', + '; */\n\n &:disabled {\n opacity: 50%;\n background-color: ', + ';\n color: ', + ';\n cursor: auto;\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.bg3 + }, + function (_a) { + var theme = _a.theme + return theme.text1 + }, + function (_a) { + var theme = _a.theme + return theme.green1 + }, + function (_a) { + var theme = _a.theme + return theme.bg2 + }, + function (_a) { + var theme = _a.theme + return theme.text2 + } +) +var ButtonErrorStyle = styled(BaseButton)( + templateObject_11$9 || + (templateObject_11$9 = __makeTemplateObject( + [ + '\n background-color: ', + ';\n border: 1px solid ', + ';\n\n &:focus {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:hover {\n background-color: ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n box-shadow: none;\n background-color: ', + ';\n border: 1px solid ', + ';\n }\n', + ], + [ + '\n background-color: ', + ';\n border: 1px solid ', + ';\n\n &:focus {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:hover {\n background-color: ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n box-shadow: none;\n background-color: ', + ';\n border: 1px solid ', + ';\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.red1 + }, + function (_a) { + var theme = _a.theme + return theme.red1 + }, + function (_a) { + var theme = _a.theme + return darken(0.05, theme.red1) + }, + function (_a) { + var theme = _a.theme + return darken(0.05, theme.red1) + }, + function (_a) { + var theme = _a.theme + return darken(0.05, theme.red1) + }, + function (_a) { + var theme = _a.theme + return darken(0.1, theme.red1) + }, + function (_a) { + var theme = _a.theme + return darken(0.1, theme.red1) + }, + function (_a) { + var theme = _a.theme + return theme.red1 + }, + function (_a) { + var theme = _a.theme + return theme.red1 + } +) +function ButtonConfirmed(_a) { + var confirmed = _a.confirmed, + altDisabledStyle = _a.altDisabledStyle, + rest = __rest(_a, ['confirmed', 'altDisabledStyle']) + if (confirmed) { + return jsx(ButtonConfirmedStyle, __assign({}, rest), void 0) + } else { + return jsx(ButtonPrimary, __assign({}, rest, { altDisabledStyle }), void 0) + } +} +function ButtonError(_a) { + var error = _a.error, + rest = __rest(_a, ['error']) + if (error) { + return jsx(ButtonErrorStyle, __assign({}, rest), void 0) + } else { + return jsx(ButtonPrimary, __assign({}, rest), void 0) + } +} +styled(ButtonOutlined)( + templateObject_12$9 || + (templateObject_12$9 = __makeTemplateObject( + ['\n border: 1px solid;\n border-color: ', ';\n'], + ['\n border: 1px solid;\n border-color: ', ';\n'] + )), + function (_a) { + var theme = _a.theme + return theme.primary1 + } +) +styled.div( + templateObject_13$5 || + (templateObject_13$5 = __makeTemplateObject( + [ + '\n height: 17px;\n width: 17px;\n border-radius: 50%;\n background-color: ', + ';\n display: flex;\n align-items: center;\n justify-content: center;\n', + ], + [ + '\n height: 17px;\n width: 17px;\n border-radius: 50%;\n background-color: ', + ';\n display: flex;\n align-items: center;\n justify-content: center;\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.primary1 + } +) +styled.div( + templateObject_14$5 || + (templateObject_14$5 = __makeTemplateObject( + ['\n width: 20px;\n padding: 0 10px;\n position: absolute;\n top: 11px;\n right: 15px;\n'], + ['\n width: 20px;\n padding: 0 10px;\n position: absolute;\n top: 11px;\n right: 15px;\n'] + )) +) +styled(Check)( + templateObject_15$3 || (templateObject_15$3 = __makeTemplateObject(['\n size: 13px;\n'], ['\n size: 13px;\n'])) +) +var templateObject_1$1g, + templateObject_2$W, + templateObject_3$N, + templateObject_4$C, + templateObject_5$t, + templateObject_6$n, + templateObject_7$j, + templateObject_8$g, + templateObject_9$f, + templateObject_10$b, + templateObject_11$9, + templateObject_12$9, + templateObject_13$5, + templateObject_14$5, + templateObject_15$3 + +var isClient = typeof window === 'object' +function getSize() { + return { + width: isClient ? window.innerWidth : undefined, + height: isClient ? window.innerHeight : undefined, + } +} +// https://usehooks.com/useWindowSize/ +function useWindowSize() { + var _a = __read(useState(getSize), 2), + windowSize = _a[0], + setWindowSize = _a[1] + useEffect(function () { + function handleResize() { + setWindowSize(getSize()) + } + if (isClient) { + window.addEventListener('resize', handleResize) + return function () { + window.removeEventListener('resize', handleResize) + } + } + return undefined + }, []) + return windowSize +} -var abi = [ - { - inputs: [ - ], - name: "feeGrowthGlobal0X128", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - ], - name: "feeGrowthGlobal1X128", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - ], - name: "liquidity", - outputs: [ - { - internalType: "uint128", - name: "", - type: "uint128" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "index", - type: "uint256" - } - ], - name: "observations", - outputs: [ - { - internalType: "uint32", - name: "blockTimestamp", - type: "uint32" - }, - { - internalType: "int56", - name: "tickCumulative", - type: "int56" - }, - { - internalType: "uint160", - name: "secondsPerLiquidityCumulativeX128", - type: "uint160" - }, - { - internalType: "bool", - name: "initialized", - type: "bool" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "bytes32", - name: "key", - type: "bytes32" - } - ], - name: "positions", - outputs: [ - { - internalType: "uint128", - name: "_liquidity", - type: "uint128" - }, - { - internalType: "uint256", - name: "feeGrowthInside0LastX128", - type: "uint256" - }, - { - internalType: "uint256", - name: "feeGrowthInside1LastX128", - type: "uint256" - }, - { - internalType: "uint128", - name: "tokensOwed0", - type: "uint128" - }, - { - internalType: "uint128", - name: "tokensOwed1", - type: "uint128" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - ], - name: "protocolFees", - outputs: [ - { - internalType: "uint128", - name: "token0", - type: "uint128" - }, - { - internalType: "uint128", - name: "token1", - type: "uint128" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - ], - name: "slot0", - outputs: [ - { - internalType: "uint160", - name: "sqrtPriceX96", - type: "uint160" - }, - { - internalType: "int24", - name: "tick", - type: "int24" - }, - { - internalType: "uint16", - name: "observationIndex", - type: "uint16" - }, - { - internalType: "uint16", - name: "observationCardinality", - type: "uint16" - }, - { - internalType: "uint16", - name: "observationCardinalityNext", - type: "uint16" - }, - { - internalType: "uint8", - name: "feeProtocol", - type: "uint8" - }, - { - internalType: "bool", - name: "unlocked", - type: "bool" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "int16", - name: "wordPosition", - type: "int16" - } - ], - name: "tickBitmap", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "int24", - name: "tick", - type: "int24" - } - ], - name: "ticks", - outputs: [ - { - internalType: "uint128", - name: "liquidityGross", - type: "uint128" - }, - { - internalType: "int128", - name: "liquidityNet", - type: "int128" - }, - { - internalType: "uint256", - name: "feeGrowthOutside0X128", - type: "uint256" - }, - { - internalType: "uint256", - name: "feeGrowthOutside1X128", - type: "uint256" - }, - { - internalType: "int56", - name: "tickCumulativeOutside", - type: "int56" - }, - { - internalType: "uint160", - name: "secondsPerLiquidityOutsideX128", - type: "uint160" - }, - { - internalType: "uint32", - name: "secondsOutside", - type: "uint32" - }, - { - internalType: "bool", - name: "initialized", - type: "bool" - } - ], - stateMutability: "view", - type: "function" - } -]; +// eslint-disable-next-line react/prop-types +function Confetti(_a) { + var start = _a.start, + variant = _a.variant + var _b = useWindowSize(), + width = _b.width, + height = _b.height + var _variant = variant ? variant : height && width && height > 1.5 * width ? 'bottom' : variant + return start && width && height + ? jsx( + ReactConfetti, + { + style: { zIndex: 1401 }, + numberOfPieces: 400, + recycle: false, + run: true, + width, + height, + confettiSource: { + h: height, + w: width, + x: 0, + y: _variant === 'top' ? height * 0.25 : _variant === 'bottom' ? height * 0.75 : height * 0.5, + }, + initialVelocityX: 15, + initialVelocityY: 30, + gravity: 0.45, + tweenDuration: 100, + wind: 0.05, + }, + void 0 + ) + : null +} -var POOL_STATE_INTERFACE = new Interface(abi); -var PoolState; -(function (PoolState) { - PoolState[PoolState["LOADING"] = 0] = "LOADING"; - PoolState[PoolState["NOT_EXISTS"] = 1] = "NOT_EXISTS"; - PoolState[PoolState["EXISTS"] = 2] = "EXISTS"; - PoolState[PoolState["INVALID"] = 3] = "INVALID"; -})(PoolState || (PoolState = {})); -function usePools(poolKeys) { - var chainId = useActiveWeb3React().chainId; - var transformed = useMemo(function () { - return poolKeys.map(function (_a) { - var _b = __read(_a, 3), currencyA = _b[0], currencyB = _b[1], feeAmount = _b[2]; - if (!chainId || !currencyA || !currencyB || !feeAmount) - return null; - var tokenA = currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped; - var tokenB = currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped; - if (!tokenA || !tokenB || tokenA.equals(tokenB)) - return null; - var _c = __read(tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA], 2), token0 = _c[0], token1 = _c[1]; - return [token0, token1, feeAmount]; - }); - }, [chainId, poolKeys]); - var poolAddresses = useMemo(function () { - var v3CoreFactoryAddress = chainId && V3_CORE_FACTORY_ADDRESSES[chainId]; - return transformed.map(function (value) { - if (!v3CoreFactoryAddress || !value) - return undefined; - return computePoolAddress({ - factoryAddress: v3CoreFactoryAddress, - tokenA: value[0], - tokenB: value[1], - fee: value[2], - }); - }); - }, [chainId, transformed]); - var slot0s = useMultipleContractSingleData(poolAddresses, POOL_STATE_INTERFACE, 'slot0'); - var liquidities = useMultipleContractSingleData(poolAddresses, POOL_STATE_INTERFACE, 'liquidity'); - return useMemo(function () { - return poolKeys.map(function (_key, index) { - var _a; - var _b = __read((_a = transformed[index]) !== null && _a !== void 0 ? _a : [], 3), token0 = _b[0], token1 = _b[1], fee = _b[2]; - if (!token0 || !token1 || !fee) - return [PoolState.INVALID, null]; - var _c = slot0s[index], slot0 = _c.result, slot0Loading = _c.loading, slot0Valid = _c.valid; - var _d = liquidities[index], liquidity = _d.result, liquidityLoading = _d.loading, liquidityValid = _d.valid; - if (!slot0Valid || !liquidityValid) - return [PoolState.INVALID, null]; - if (slot0Loading || liquidityLoading) - return [PoolState.LOADING, null]; - if (!slot0 || !liquidity) - return [PoolState.NOT_EXISTS, null]; - if (!slot0.sqrtPriceX96 || slot0.sqrtPriceX96.eq(0)) - return [PoolState.NOT_EXISTS, null]; - try { - return [PoolState.EXISTS, new Pool$1(token0, token1, fee, slot0.sqrtPriceX96, liquidity[0], slot0.tick)]; - } - catch (error) { - console.error('Error when constructing the pool', error); - return [PoolState.NOT_EXISTS, null]; - } - }); - }, [liquidities, poolKeys, slot0s, transformed]); +var uImage = '10f062d02df4af77.png' + +var noise = 'f158a440053a5ad2.png' + +var xlUnicorn = 'c2cd04251aa24c34.png' + +var DataCard = styled(AutoColumn)( + templateObject_1$1f || + (templateObject_1$1f = __makeTemplateObject( + [ + '\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #2172e5 100%);\n border-radius: 12px;\n width: 100%;\n position: relative;\n overflow: hidden;\n', + ], + [ + '\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #2172e5 100%);\n border-radius: 12px;\n width: 100%;\n position: relative;\n overflow: hidden;\n', + ] + )) +) +var CardBGImage = styled.span( + templateObject_2$V || + (templateObject_2$V = __makeTemplateObject( + [ + '\n background: url(', + ');\n width: 1000px;\n height: 600px;\n position: absolute;\n border-radius: 12px;\n opacity: 0.4;\n top: -100px;\n left: -100px;\n transform: rotate(-15deg);\n user-select: none;\n ', + '\n', + ], + [ + '\n background: url(', + ');\n width: 1000px;\n height: 600px;\n position: absolute;\n border-radius: 12px;\n opacity: 0.4;\n top: -100px;\n left: -100px;\n transform: rotate(-15deg);\n user-select: none;\n ', + '\n', + ] + )), + uImage, + function (_a) { + var desaturate = _a.desaturate + return desaturate && 'filter: saturate(0)' + } +) +var CardBGImageSmaller = styled.span( + templateObject_3$M || + (templateObject_3$M = __makeTemplateObject( + [ + '\n background: url(', + ');\n width: 1200px;\n height: 1200px;\n position: absolute;\n border-radius: 12px;\n top: -300px;\n left: -300px;\n opacity: 0.4;\n user-select: none;\n\n ', + '\n', + ], + [ + '\n background: url(', + ');\n width: 1200px;\n height: 1200px;\n position: absolute;\n border-radius: 12px;\n top: -300px;\n left: -300px;\n opacity: 0.4;\n user-select: none;\n\n ', + '\n', + ] + )), + xlUnicorn, + function (_a) { + var desaturate = _a.desaturate + return desaturate && 'filter: saturate(0)' + } +) +var CardNoise = styled.span( + templateObject_4$B || + (templateObject_4$B = __makeTemplateObject( + [ + '\n background: url(', + ');\n background-size: cover;\n mix-blend-mode: overlay;\n border-radius: 12px;\n width: 100%;\n height: 100%;\n opacity: 0.15;\n position: absolute;\n top: 0;\n left: 0;\n user-select: none;\n', + ], + [ + '\n background: url(', + ');\n background-size: cover;\n mix-blend-mode: overlay;\n border-radius: 12px;\n width: 100%;\n height: 100%;\n opacity: 0.15;\n position: absolute;\n top: 0;\n left: 0;\n user-select: none;\n', + ] + )), + noise +) +var CardSection = styled(AutoColumn)( + templateObject_5$s || + (templateObject_5$s = __makeTemplateObject( + ['\n padding: 1rem;\n z-index: 1;\n opacity: ', ';\n'], + ['\n padding: 1rem;\n z-index: 1;\n opacity: ', ';\n'] + )), + function (_a) { + var disabled = _a.disabled + return disabled && '0.4' + } +) +var Break$1 = styled.div( + templateObject_6$m || + (templateObject_6$m = __makeTemplateObject( + ['\n width: 100%;\n background-color: rgba(255, 255, 255, 0.2);\n height: 1px;\n'], + ['\n width: 100%;\n background-color: rgba(255, 255, 255, 0.2);\n height: 1px;\n'] + )) +) +var templateObject_1$1f, + templateObject_2$V, + templateObject_3$M, + templateObject_4$B, + templateObject_5$s, + templateObject_6$m + +var parser = new UAParser(window.navigator.userAgent) +var type$1 = parser.getDevice().type +var userAgent = parser.getResult() +var isMobile = type$1 === 'mobile' || type$1 === 'tablet' + +var AnimatedDialogOverlay = animated(DialogOverlay) +// eslint-disable-next-line @typescript-eslint/no-unused-vars +var StyledDialogOverlay = styled(AnimatedDialogOverlay)( + templateObject_1$1e || + (templateObject_1$1e = __makeTemplateObject( + [ + '\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: ', + ';\n }\n', + ], + [ + '\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: ', + ';\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.modalBG + } +) +var AnimatedDialogContent = animated(DialogContent) +// destructure to not pass custom props to Dialog DOM element +// eslint-disable-next-line @typescript-eslint/no-unused-vars +var StyledDialogContent = styled(function (_a) { + _a.minHeight + _a.maxHeight + _a.mobile + _a.isOpen + var rest = __rest(_a, ['minHeight', 'maxHeight', 'mobile', 'isOpen']) + return jsx(AnimatedDialogContent, __assign({}, rest), void 0) +}).attrs({ + 'aria-label': 'dialog', +})( + templateObject_7$i || + (templateObject_7$i = __makeTemplateObject( + [ + '\n overflow-y: auto;\n\n &[data-reach-dialog-content] {\n margin: 0 0 2rem 0;\n background-color: ', + ';\n border: 1px solid ', + ';\n box-shadow: 0 4px 8px 0 ', + ';\n padding: 0px;\n width: 50vw;\n overflow-y: auto;\n overflow-x: hidden;\n\n align-self: ', + ';\n\n max-width: 420px;\n ', + '\n ', + '\n display: flex;\n border-radius: 20px;\n ', + '\n ', + '\n }\n', + ], + [ + '\n overflow-y: auto;\n\n &[data-reach-dialog-content] {\n margin: 0 0 2rem 0;\n background-color: ', + ';\n border: 1px solid ', + ';\n box-shadow: 0 4px 8px 0 ', + ';\n padding: 0px;\n width: 50vw;\n overflow-y: auto;\n overflow-x: hidden;\n\n align-self: ', + ';\n\n max-width: 420px;\n ', + '\n ', + '\n display: flex;\n border-radius: 20px;\n ', + '\n ', + '\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.bg0 + }, + function (_a) { + var theme = _a.theme + return theme.bg1 + }, + function (_a) { + var theme = _a.theme + return transparentize(0.95, theme.shadow1) + }, + function (_a) { + var mobile = _a.mobile + return mobile ? 'flex-end' : 'center' + }, + function (_a) { + var maxHeight = _a.maxHeight + return ( + maxHeight && + css( + templateObject_2$U || + (templateObject_2$U = __makeTemplateObject( + ['\n max-height: ', 'vh;\n '], + ['\n max-height: ', 'vh;\n '] + )), + maxHeight + ) + ) + }, + function (_a) { + var minHeight = _a.minHeight + return ( + minHeight && + css( + templateObject_3$L || + (templateObject_3$L = __makeTemplateObject( + ['\n min-height: ', 'vh;\n '], + ['\n min-height: ', 'vh;\n '] + )), + minHeight + ) + ) + }, + function (_a) { + var theme = _a.theme + return theme.mediaWidth.upToMedium( + templateObject_4$A || + (templateObject_4$A = __makeTemplateObject( + ['\n width: 65vw;\n margin: 0;\n '], + ['\n width: 65vw;\n margin: 0;\n '] + )) + ) + }, + function (_a) { + var theme = _a.theme, + mobile = _a.mobile + return theme.mediaWidth.upToSmall( + templateObject_6$l || + (templateObject_6$l = __makeTemplateObject( + ['\n width: 85vw;\n ', '\n '], + ['\n width: 85vw;\n ', '\n '] + )), + mobile && + css( + templateObject_5$r || + (templateObject_5$r = __makeTemplateObject( + [ + '\n width: 100vw;\n border-radius: 20px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n ', + ], + [ + '\n width: 100vw;\n border-radius: 20px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n ', + ] + )) + ) + ) + } +) +function Modal(_a) { + var isOpen = _a.isOpen, + onDismiss = _a.onDismiss, + _b = _a.minHeight, + minHeight = _b === void 0 ? false : _b, + _c = _a.maxHeight, + maxHeight = _c === void 0 ? 90 : _c, + initialFocusRef = _a.initialFocusRef, + children = _a.children + var fadeTransition = useTransition(isOpen, null, { + config: { duration: 200 }, + from: { opacity: 0 }, + enter: { opacity: 1 }, + leave: { opacity: 0 }, + }) + var _d = __read( + useSpring(function () { + return { y: 0, config: { mass: 1, tension: 210, friction: 20 } } + }), + 2 + ), + y = _d[0].y, + set = _d[1] + var bind = useGesture({ + onDrag(state) { + set({ + y: state.down ? state.movement[1] : 0, + }) + if (state.movement[1] > 300 || (state.velocity > 3 && state.direction[1] > 0)) { + onDismiss() + } + }, + }) + return jsx( + Fragment, + { + children: fadeTransition.map(function (_a) { + var item = _a.item, + key = _a.key, + props = _a.props + return ( + item && + jsx( + StyledDialogOverlay, + __assign( + { + style: props, + onDismiss, + initialFocusRef, + unstable_lockFocusAcrossFrames: false, + }, + { + children: jsxs( + StyledDialogContent, + __assign( + {}, + isMobile + ? __assign(__assign({}, bind()), { + style: { + transform: y.interpolate(function (y) { + return 'translateY(' + (y > 0 ? y : 0) + 'px)' + }), + }, + }) + : {}, + { 'aria-label': 'dialog content', minHeight, maxHeight, mobile: isMobile }, + { children: [!initialFocusRef && isMobile ? jsx('div', { tabIndex: 1 }, void 0) : null, children] } + ), + void 0 + ), + } + ), + key + ) + ) + }), + }, + void 0 + ) } - -/** - * Returns all the existing pools that should be considered for swapping between an input currency and an output currency - * @param currencyIn the input currency - * @param currencyOut the output currency - */ -function useV3SwapPools(currencyIn, currencyOut) { - var chainId = useActiveWeb3React().chainId; - var allCurrencyCombinations = useAllCurrencyCombinations(currencyIn, currencyOut); - var allCurrencyCombinationsWithAllFees = useMemo(function () { - return allCurrencyCombinations.reduce(function (list, _a) { - var _b = __read(_a, 2), tokenA = _b[0], tokenB = _b[1]; - return chainId === SupportedChainId.MAINNET - ? list.concat([ - [tokenA, tokenB, FeeAmount.LOW], - [tokenA, tokenB, FeeAmount.MEDIUM], - [tokenA, tokenB, FeeAmount.HIGH], - ]) - : list.concat([ - [tokenA, tokenB, FeeAmount.LOWEST], - [tokenA, tokenB, FeeAmount.LOW], - [tokenA, tokenB, FeeAmount.MEDIUM], - [tokenA, tokenB, FeeAmount.HIGH], - ]); - }, []); - }, [allCurrencyCombinations, chainId]); - var pools = usePools(allCurrencyCombinationsWithAllFees); - return useMemo(function () { - return { - pools: pools - .filter(function (tuple) { - return tuple[0] === PoolState.EXISTS && tuple[1] !== null; - }) - .map(function (_a) { - var _b = __read(_a, 2), pool = _b[1]; - return pool; - }), - loading: pools.some(function (_a) { - var _b = __read(_a, 1), state = _b[0]; - return state === PoolState.LOADING; - }), - }; - }, [pools]); +var templateObject_1$1e, + templateObject_2$U, + templateObject_3$L, + templateObject_4$A, + templateObject_5$r, + templateObject_6$l, + templateObject_7$i + +var ContentWrapper$4 = styled(AutoColumn)( + templateObject_1$1d || (templateObject_1$1d = __makeTemplateObject(['\n width: 100%;\n'], ['\n width: 100%;\n'])) +) +var ModalUpper$1 = styled(DataCard)( + templateObject_2$T || + (templateObject_2$T = __makeTemplateObject( + [ + '\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n', + ], + [ + '\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n', + ] + )) +) +var ConfirmOrLoadingWrapper$1 = styled.div( + templateObject_3$K || + (templateObject_3$K = __makeTemplateObject( + ['\n width: 100%;\n padding: 24px;\n position: relative;\n background: ', ';\n'], + ['\n width: 100%;\n padding: 24px;\n position: relative;\n background: ', ';\n'] + )), + function (_a) { + var activeBG = _a.activeBG + return ( + activeBG && + 'radial-gradient(76.02% 75.41% at 1.84% 0%, rgba(255, 0, 122, 0.2) 0%, rgba(33, 114, 229, 0.2) 100%), #FFFFFF;' + ) + } +) +var ConfirmedIcon$2 = styled(ColumnCenter)( + templateObject_4$z || + (templateObject_4$z = __makeTemplateObject(['\n padding: 60px 0;\n'], ['\n padding: 60px 0;\n'])) +) +function AddressClaimModal(_a) { + var _b, _c + var isOpen = _a.isOpen, + onDismiss = _a.onDismiss + var chainId = useActiveWeb3React().chainId + // state for smart contract input + var _d = __read(useState(''), 2), + typed = _d[0], + setTyped = _d[1] + function handleRecipientType(val) { + setTyped(val) + } + // monitor for third party recipient of claim + var parsedAddress = useENS(typed).address + // used for UI loading states + var _e = __read(useState(false), 2), + attempting = _e[0], + setAttempting = _e[1] + // monitor the status of the claim from contracts and txns + var claimCallback = useClaimCallback(parsedAddress).claimCallback + var unclaimedAmount = useUserUnclaimedAmount(parsedAddress) + // check if the user has something available + var hasAvailableClaim = useUserHasAvailableClaim(parsedAddress) + var _f = __read(useState(), 2), + hash = _f[0], + setHash = _f[1] + // monitor the status of the claim from contracts and txns + var claimPending = useIsTransactionPending(hash !== null && hash !== void 0 ? hash : '') + var claimConfirmed = hash && !claimPending + // use the hash to monitor this txn + function onClaim() { + setAttempting(true) + claimCallback() + .then(function (hash) { + setHash(hash) + }) + // reset modal and log error + .catch(function (error) { + setAttempting(false) + console.log(error) + }) + } + function wrappedOnDismiss() { + setAttempting(false) + setHash(undefined) + setTyped('') + onDismiss() + } + return jsxs( + Modal, + __assign( + { isOpen, onDismiss: wrappedOnDismiss, maxHeight: 90 }, + { + children: [ + jsx(Confetti, { start: Boolean(isOpen && claimConfirmed && attempting) }, void 0), + !attempting && + jsxs( + ContentWrapper$4, + __assign( + { gap: 'lg' }, + { + children: [ + jsxs( + ModalUpper$1, + { + children: [ + jsx(CardBGImage, {}, void 0), + jsx(CardNoise, {}, void 0), + jsxs( + CardSection, + __assign( + { gap: 'md' }, + { + children: [ + jsxs( + RowBetween, + { + children: [ + jsx( + ThemedText.White, + __assign( + { fontWeight: 500 }, + { children: jsx(Trans, { children: 'Claim UNI Token' }, void 0) } + ), + void 0 + ), + jsx( + CloseIcon$2, + { onClick: wrappedOnDismiss, style: { zIndex: 99 }, stroke: 'white' }, + void 0 + ), + ], + }, + void 0 + ), + jsx( + ThemedText.White, + __assign( + { fontWeight: 700, fontSize: 36 }, + { + children: jsxs( + Trans, + { + children: [ + unclaimedAmount === null || unclaimedAmount === void 0 + ? void 0 + : unclaimedAmount.toFixed( + 0, + (_b = { groupSeparator: ',' }) !== null && _b !== void 0 ? _b : '-' + ), + ' UNI', + ], + }, + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + jsx(Break$1, {}, void 0), + ], + }, + void 0 + ), + jsxs( + AutoColumn, + __assign( + { gap: 'md', style: { padding: '1rem', paddingTop: '0' }, justify: 'center' }, + { + children: [ + jsx( + ThemedText.SubHeader, + __assign( + { fontWeight: 500 }, + { + children: jsx( + Trans, + { + children: + 'Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.', + }, + void 0 + ), + } + ), + void 0 + ), + jsx(AddressInputPanel, { value: typed, onChange: handleRecipientType }, void 0), + parsedAddress && + !hasAvailableClaim && + jsx( + ThemedText.Error, + __assign( + { error: true }, + { children: jsx(Trans, { children: 'Address has no available claim' }, void 0) } + ), + void 0 + ), + jsx( + ButtonPrimary, + __assign( + { + disabled: + !isAddress$1( + parsedAddress !== null && parsedAddress !== void 0 ? parsedAddress : '' + ) || !hasAvailableClaim, + padding: '16px 16px', + width: '100%', + $borderRadius: '12px', + mt: '1rem', + onClick: onClaim, + }, + { children: jsx(Trans, { children: 'Claim UNI' }, void 0) } + ), + void 0 + ), + ], + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + (attempting || claimConfirmed) && + jsxs( + ConfirmOrLoadingWrapper$1, + __assign( + { activeBG: true }, + { + children: [ + jsx(CardNoise, {}, void 0), + jsx(CardBGImageSmaller, { desaturate: true }, void 0), + jsxs( + RowBetween, + { + children: [ + jsx('div', {}, void 0), + jsx( + CloseIcon$2, + { onClick: wrappedOnDismiss, style: { zIndex: 99 }, stroke: 'black' }, + void 0 + ), + ], + }, + void 0 + ), + jsx( + ConfirmedIcon$2, + { + children: !claimConfirmed + ? jsx(CustomLightSpinner, { src: Circle$1, alt: 'loader', size: '90px' }, void 0) + : jsx(UniTokenAnimated, { width: '72px', src: tokenLogo, alt: 'UNI logo' }, void 0), + }, + void 0 + ), + jsxs( + AutoColumn, + __assign( + { gap: '100px', justify: 'center' }, + { + children: [ + jsxs( + AutoColumn, + __assign( + { gap: '12px', justify: 'center' }, + { + children: [ + jsx( + ThemedText.LargeHeader, + __assign( + { fontWeight: 600, color: 'black' }, + { + children: claimConfirmed + ? jsx(Trans, { children: 'Claimed' }, void 0) + : jsx(Trans, { children: 'Claiming' }, void 0), + } + ), + void 0 + ), + !claimConfirmed && + jsx( + Text$1, + __assign( + { fontSize: 36, color: '#ff007a', fontWeight: 800 }, + { + children: jsxs( + Trans, + { + children: [ + unclaimedAmount === null || unclaimedAmount === void 0 + ? void 0 + : unclaimedAmount.toFixed( + 0, + (_c = { groupSeparator: ',' }) !== null && _c !== void 0 + ? _c + : '-' + ), + ' UNI', + ], + }, + void 0 + ), + } + ), + void 0 + ), + parsedAddress && + jsx( + ThemedText.LargeHeader, + __assign( + { fontWeight: 600, color: 'black' }, + { + children: jsxs( + Trans, + { children: ['for ', shortenAddress(parsedAddress)] }, + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + claimConfirmed && + jsx( + Fragment, + { + children: jsxs( + ThemedText.SubHeader, + __assign( + { fontWeight: 500, color: 'black' }, + { + children: [ + jsxs( + 'span', + __assign( + { role: 'img', 'aria-label': 'party-hat' }, + { children: ['\uD83C\uDF89', ' '] } + ), + void 0 + ), + jsx(Trans, { children: 'Welcome to team Unicorn :) ' }, void 0), + jsx( + 'span', + __assign( + { role: 'img', 'aria-label': 'party-hat' }, + { children: '\uD83C\uDF89' } + ), + void 0 + ), + ], + } + ), + void 0 + ), + }, + void 0 + ), + attempting && + !hash && + jsx( + ThemedText.SubHeader, + __assign( + { color: 'black' }, + { + children: jsx( + Trans, + { children: 'Confirm this transaction in your wallet' }, + void 0 + ), + } + ), + void 0 + ), + attempting && + hash && + !claimConfirmed && + chainId && + hash && + jsx( + ExternalLink, + __assign( + { + href: getExplorerLink(chainId, hash, ExplorerDataType.TRANSACTION), + style: { zIndex: 99 }, + }, + { children: jsx(Trans, { children: 'View transaction on Explorer' }, void 0) } + ), + void 0 + ), + ], + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + ], + } + ), + void 0 + ) +} +var templateObject_1$1d, templateObject_2$T, templateObject_3$K, templateObject_4$z + +var _a$a +var ApplicationModal +;(function (ApplicationModal) { + ApplicationModal[(ApplicationModal['WALLET'] = 0)] = 'WALLET' + ApplicationModal[(ApplicationModal['SETTINGS'] = 1)] = 'SETTINGS' + ApplicationModal[(ApplicationModal['SELF_CLAIM'] = 2)] = 'SELF_CLAIM' + ApplicationModal[(ApplicationModal['ADDRESS_CLAIM'] = 3)] = 'ADDRESS_CLAIM' + ApplicationModal[(ApplicationModal['CLAIM_POPUP'] = 4)] = 'CLAIM_POPUP' + ApplicationModal[(ApplicationModal['MENU'] = 5)] = 'MENU' + ApplicationModal[(ApplicationModal['DELEGATE'] = 6)] = 'DELEGATE' + ApplicationModal[(ApplicationModal['VOTE'] = 7)] = 'VOTE' + ApplicationModal[(ApplicationModal['POOL_OVERVIEW_OPTIONS'] = 8)] = 'POOL_OVERVIEW_OPTIONS' + ApplicationModal[(ApplicationModal['NETWORK_SELECTOR'] = 9)] = 'NETWORK_SELECTOR' + ApplicationModal[(ApplicationModal['PRIVACY_POLICY'] = 10)] = 'PRIVACY_POLICY' +})(ApplicationModal || (ApplicationModal = {})) +var initialState$8 = { + chainId: null, + openModal: null, + popupList: [], } +var applicationSlice = createSlice({ + name: 'application', + initialState: initialState$8, + reducers: { + updateChainId(state, action) { + var chainId = action.payload.chainId + state.chainId = chainId + }, + setOpenModal(state, action) { + state.openModal = action.payload + }, + addPopup(state, _a) { + var _b = _a.payload, + content = _b.content, + key = _b.key, + _c = _b.removeAfterMs, + removeAfterMs = _c === void 0 ? DEFAULT_TXN_DISMISS_MS : _c + state.popupList = ( + key + ? state.popupList.filter(function (popup) { + return popup.key !== key + }) + : state.popupList + ).concat([ + { + key: key || nanoid(), + show: true, + content, + removeAfterMs, + }, + ]) + }, + removePopup(state, _a) { + var key = _a.payload.key + state.popupList.forEach(function (p) { + if (p.key === key) { + p.show = false + } + }) + }, + }, +}) +var updateChainId = ((_a$a = applicationSlice.actions), _a$a.updateChainId), + setOpenModal = _a$a.setOpenModal, + addPopup = _a$a.addPopup, + removePopup = _a$a.removePopup +var application = applicationSlice.reducer + +var Field$3 +;(function (Field) { + Field['LIQUIDITY_PERCENT'] = 'LIQUIDITY_PERCENT' + Field['LIQUIDITY'] = 'LIQUIDITY' + Field['CURRENCY_A'] = 'CURRENCY_A' + Field['CURRENCY_B'] = 'CURRENCY_B' +})(Field$3 || (Field$3 = {})) +var typeInput$3 = createAction('burn/typeInputBurn') + +var initialState$7 = { + independentField: Field$3.LIQUIDITY_PERCENT, + typedValue: '0', +} +var burn = createReducer(initialState$7, function (builder) { + return builder.addCase(typeInput$3, function (state, _a) { + var _b = _a.payload, + field = _b.field, + typedValue = _b.typedValue + return __assign(__assign({}, state), { independentField: field, typedValue }) + }) +}) + +var selectPercent = createAction('burnV3/selectBurnPercent') + +var initialState$6 = { + percent: 0, +} +var burnV3 = createReducer(initialState$6, function (builder) { + return builder.addCase(selectPercent, function (state, _a) { + var percent = _a.payload.percent + return __assign(__assign({}, state), { percent }) + }) +}) + +var _a$9 +// List of supported subgraphs. Note that the app currently only support one active subgraph at a time +var CHAIN_SUBGRAPH_URL = + ((_a$9 = {}), + (_a$9[SupportedChainId.MAINNET] = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3'), + (_a$9[SupportedChainId.RINKEBY] = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3'), + (_a$9[SupportedChainId.ARBITRUM_ONE] = 'https://api.thegraph.com/subgraphs/name/ianlapham/arbitrum-minimal'), + (_a$9[SupportedChainId.OPTIMISM] = 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-optimism-dev'), + (_a$9[SupportedChainId.POLYGON] = 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-v3-polygon'), + _a$9) +var api$1 = createApi({ + reducerPath: 'dataApi', + baseQuery: graphqlRequestBaseQuery(), + endpoints(builder) { + return { + allV3Ticks: builder.query({ + query(_a) { + var poolAddress = _a.poolAddress, + _b = _a.skip, + skip = _b === void 0 ? 0 : _b + return { + document: gql( + templateObject_1$1c || + (templateObject_1$1c = __makeTemplateObject( + [ + '\n query allV3Ticks($poolAddress: String!, $skip: Int!) {\n ticks(first: 1000, skip: $skip, where: { poolAddress: $poolAddress }, orderBy: tickIdx) {\n tick: tickIdx\n liquidityNet\n price0\n price1\n }\n }\n ', + ], + [ + '\n query allV3Ticks($poolAddress: String!, $skip: Int!) {\n ticks(first: 1000, skip: $skip, where: { poolAddress: $poolAddress }, orderBy: tickIdx) {\n tick: tickIdx\n liquidityNet\n price0\n price1\n }\n }\n ', + ] + )) + ), + variables: { + poolAddress, + skip, + }, + } + }, + }), + feeTierDistribution: builder.query({ + query(_a) { + var token0 = _a.token0, + token1 = _a.token1 + return { + document: gql( + templateObject_2$S || + (templateObject_2$S = __makeTemplateObject( + [ + '\n query feeTierDistribution($token0: String!, $token1: String!) {\n _meta {\n block {\n number\n }\n }\n asToken0: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token0, token1: $token1 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n asToken1: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token1, token1: $token0 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n }\n ', + ], + [ + '\n query feeTierDistribution($token0: String!, $token1: String!) {\n _meta {\n block {\n number\n }\n }\n asToken0: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token0, token1: $token1 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n asToken1: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token1, token1: $token0 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n }\n ', + ] + )) + ), + variables: { + token0, + token1, + }, + } + }, + }), + } + }, +}) +// Graphql query client wrapper that builds a dynamic url based on chain id +function graphqlRequestBaseQuery() { + var _this = this + return function (_a, _b) { + var document = _a.document, + variables = _a.variables + var getState = _b.getState + return __awaiter(_this, void 0, void 0, function () { + var chainId, subgraphUrl, error_1, name_1, message, stack, request, response + var _c + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + chainId = getState().application.chainId + subgraphUrl = chainId ? CHAIN_SUBGRAPH_URL[chainId] : undefined + if (!subgraphUrl) { + return [ + 2 /*return*/, + { + error: { + name: 'UnsupportedChainId', + message: 'Subgraph queries against ChainId ' + chainId + ' are not supported.', + stack: '', + }, + }, + ] + } + _c = {} + return [4 /*yield*/, new GraphQLClient(subgraphUrl).request(document, variables)] + case 1: + return [2 /*return*/, ((_c.data = _d.sent()), (_c.meta = {}), _c)] + case 2: + error_1 = _d.sent() + if (error_1 instanceof ClientError) { + ;(name_1 = error_1.name), + (message = error_1.message), + (stack = error_1.stack), + (request = error_1.request), + (response = error_1.response) + return [ + 2 /*return*/, + { + error: { name: name_1, message, stack }, + meta: { request, response }, + }, + ] + } + throw error_1 + case 3: + return [2 /*return*/] + } + }) + }) + } +} +var templateObject_1$1c, templateObject_2$S -/** - * Returns true if poolA is equivalent to poolB - * @param poolA one of the two pools - * @param poolB the other pool - */ -function poolEquals(poolA, poolB) { - return (poolA === poolB || - (poolA.token0.equals(poolB.token0) && poolA.token1.equals(poolB.token1) && poolA.fee === poolB.fee)); -} -function computeAllRoutes(currencyIn, currencyOut, pools, chainId, currentPath, allPaths, startCurrencyIn, maxHops) { - var e_1, _a; - if (currentPath === void 0) { currentPath = []; } - if (allPaths === void 0) { allPaths = []; } - if (startCurrencyIn === void 0) { startCurrencyIn = currencyIn; } - if (maxHops === void 0) { maxHops = 2; } - var tokenIn = currencyIn === null || currencyIn === void 0 ? void 0 : currencyIn.wrapped; - var tokenOut = currencyOut === null || currencyOut === void 0 ? void 0 : currencyOut.wrapped; - if (!tokenIn || !tokenOut) - throw new Error('Missing tokenIn/tokenOut'); - var _loop_1 = function (pool) { - if (!pool.involvesToken(tokenIn) || currentPath.find(function (pathPool) { return poolEquals(pool, pathPool); })) - return "continue"; - var outputToken = pool.token0.equals(tokenIn) ? pool.token1 : pool.token0; - if (outputToken.equals(tokenOut)) { - allPaths.push(new Route$1(__spreadArray(__spreadArray([], __read(currentPath), false), [pool], false), startCurrencyIn, currencyOut)); - } - else if (maxHops > 1) { - computeAllRoutes(outputToken, currencyOut, pools, chainId, __spreadArray(__spreadArray([], __read(currentPath), false), [pool], false), allPaths, startCurrencyIn, maxHops - 1); - } - }; - try { - for (var pools_1 = __values(pools), pools_1_1 = pools_1.next(); !pools_1_1.done; pools_1_1 = pools_1.next()) { - var pool = pools_1_1.value; - _loop_1(pool); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (pools_1_1 && !pools_1_1.done && (_a = pools_1.return)) _a.call(pools_1); - } - finally { if (e_1) throw e_1.error; } - } - return allPaths; -} -/** - * Returns all the routes from an input currency to an output currency - * @param currencyIn the input currency - * @param currencyOut the output currency - */ -function useAllV3Routes(currencyIn, currencyOut) { - var chainId = useActiveWeb3React().chainId; - var _a = useV3SwapPools(currencyIn, currencyOut), pools = _a.pools, poolsLoading = _a.loading; - return useMemo(function () { - if (poolsLoading || !chainId || !pools || !currencyIn || !currencyOut) - return { loading: true, routes: [] }; - var routes = computeAllRoutes(currencyIn, currencyOut, pools, chainId, [], [], currencyIn, 2); - return { loading: false, routes: routes }; - }, [chainId, currencyIn, currencyOut, pools, poolsLoading]); -} - -var _a$7; -var QUOTE_GAS_OVERRIDES = (_a$7 = {}, - _a$7[SupportedChainId.ARBITRUM_ONE] = 25000000, - _a$7[SupportedChainId.ARBITRUM_RINKEBY] = 25000000, - _a$7); -var DEFAULT_GAS_QUOTE = 2000000; -/** - * Returns the best v3 trade for a desired swap - * @param tradeType whether the swap is an exact in/out - * @param amountSpecified the exact amount to swap in/out - * @param otherCurrency the desired output/payment currency - */ -function useClientSideV3Trade(tradeType, amountSpecified, otherCurrency) { - var _a; - var _b = __read(useMemo(function () { - return tradeType === TradeType.EXACT_INPUT - ? [amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, otherCurrency] - : [otherCurrency, amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency]; - }, [tradeType, amountSpecified, otherCurrency]), 2), currencyIn = _b[0], currencyOut = _b[1]; - var _c = useAllV3Routes(currencyIn, currencyOut), routes = _c.routes, routesLoading = _c.loading; - var quoter = useV3Quoter(); - var chainId = useActiveWeb3React().chainId; - var quotesResults = useSingleContractWithCallData(quoter, amountSpecified - ? routes.map(function (route) { return SwapQuoter.quoteCallParameters(route, amountSpecified, tradeType).calldata; }) - : [], { - gasRequired: chainId ? (_a = QUOTE_GAS_OVERRIDES[chainId]) !== null && _a !== void 0 ? _a : DEFAULT_GAS_QUOTE : undefined, - }); - return useMemo(function () { - if (!amountSpecified || - !currencyIn || - !currencyOut || - quotesResults.some(function (_a) { - var valid = _a.valid; - return !valid; - }) || - // skip when tokens are the same - (tradeType === TradeType.EXACT_INPUT - ? amountSpecified.currency.equals(currencyOut) - : amountSpecified.currency.equals(currencyIn))) { - return { - state: TradeState.INVALID, - trade: undefined, - }; - } - if (routesLoading || quotesResults.some(function (_a) { - var loading = _a.loading; - return loading; - })) { - return { - state: TradeState.LOADING, - trade: undefined, - }; - } - var _a = quotesResults.reduce(function (currentBest, _a, i) { - var result = _a.result; - if (!result) - return currentBest; - // overwrite the current best if it's not defined or if this route is better - if (tradeType === TradeType.EXACT_INPUT) { - var amountOut_1 = CurrencyAmount.fromRawAmount(currencyOut, result.amountOut.toString()); - if (currentBest.amountOut === null || JSBI.lessThan(currentBest.amountOut.quotient, amountOut_1.quotient)) { - return { - bestRoute: routes[i], - amountIn: amountSpecified, - amountOut: amountOut_1, - }; - } - } - else { - var amountIn_1 = CurrencyAmount.fromRawAmount(currencyIn, result.amountIn.toString()); - if (currentBest.amountIn === null || JSBI.greaterThan(currentBest.amountIn.quotient, amountIn_1.quotient)) { - return { - bestRoute: routes[i], - amountIn: amountIn_1, - amountOut: amountSpecified, - }; - } - } - return currentBest; - }, { - bestRoute: null, - amountIn: null, - amountOut: null, - }), bestRoute = _a.bestRoute, amountIn = _a.amountIn, amountOut = _a.amountOut; - if (!bestRoute || !amountIn || !amountOut) { - return { - state: TradeState.NO_ROUTE_FOUND, - trade: undefined, - }; - } - return { - state: TradeState.VALID, - trade: new InterfaceTrade({ - v2Routes: [], - v3Routes: [ - { - routev3: bestRoute, - inputAmount: amountIn, - outputAmount: amountOut, - }, - ], - tradeType: tradeType, - }), - }; - }, [amountSpecified, currencyIn, currencyOut, quotesResults, routes, routesLoading, tradeType]); -} - -var _a$6; -// Stablecoin amounts used when calculating spot price for a given currency. -// The amount is large enough to filter low liquidity pairs. -var STABLECOIN_AMOUNT_OUT = (_a$6 = {}, - _a$6[SupportedChainId.MAINNET] = CurrencyAmount.fromRawAmount(USDC, 100000000000), - _a$6[SupportedChainId.ARBITRUM_ONE] = CurrencyAmount.fromRawAmount(USDC_ARBITRUM, 10000000000), - _a$6[SupportedChainId.OPTIMISM] = CurrencyAmount.fromRawAmount(DAI_OPTIMISM, 1e+22), - _a$6[SupportedChainId.POLYGON] = CurrencyAmount.fromRawAmount(USDC_POLYGON, 10000000000), - _a$6); -/** - * Returns the price in USDC of the input currency - * @param currency currency to compute the USDC price of - */ -function useUSDCPrice(currency) { - var chainId = currency === null || currency === void 0 ? void 0 : currency.chainId; - var amountOut = chainId ? STABLECOIN_AMOUNT_OUT[chainId] : undefined; - var stablecoin = amountOut === null || amountOut === void 0 ? void 0 : amountOut.currency; - // TODO(#2808): remove dependency on useBestV2Trade - var v2USDCTrade = useBestV2Trade(TradeType.EXACT_OUTPUT, amountOut, currency, { - maxHops: 2, - }); - var v3USDCTrade = useClientSideV3Trade(TradeType.EXACT_OUTPUT, amountOut, currency); - return useMemo(function () { - if (!currency || !stablecoin) { - return undefined; - } - // handle usdc - if (currency === null || currency === void 0 ? void 0 : currency.wrapped.equals(stablecoin)) { - return new Price(stablecoin, stablecoin, '1', '1'); - } - // use v2 price if available, v3 as fallback - if (v2USDCTrade) { - var _a = v2USDCTrade.route.midPrice, numerator = _a.numerator, denominator = _a.denominator; - return new Price(currency, stablecoin, denominator, numerator); - } - else if (v3USDCTrade.trade) { - var _b = v3USDCTrade.trade.routes[0].midPrice, numerator = _b.numerator, denominator = _b.denominator; - return new Price(currency, stablecoin, denominator, numerator); - } - return undefined; - }, [currency, stablecoin, v2USDCTrade, v3USDCTrade.trade]); -} -function useUSDCValue(currencyAmount) { - var price = useUSDCPrice(currencyAmount === null || currencyAmount === void 0 ? void 0 : currencyAmount.currency); - return useMemo(function () { - if (!price || !currencyAmount) - return null; - try { - return price.quote(currencyAmount); - } - catch (error) { - return null; - } - }, [currencyAmount, price]); -} -/** - * - * @param fiatValue string representation of a USD amount - * @returns CurrencyAmount where currency is stablecoin on active chain - */ -function useStablecoinAmountFromFiatValue(fiatValue) { - var _a; - var chainId = useActiveWeb3React().chainId; - var stablecoin = chainId ? (_a = STABLECOIN_AMOUNT_OUT[chainId]) === null || _a === void 0 ? void 0 : _a.currency : undefined; - if (fiatValue === null || fiatValue === undefined || !chainId || !stablecoin) { - return undefined; - } - // trim for decimal precision when parsing - var parsedForDecimals = parseFloat(fiatValue).toFixed(stablecoin.decimals).toString(); - try { - // parse USD string into CurrencyAmount based on stablecoin decimals - return tryParseCurrencyAmount(parsedForDecimals, stablecoin); - } - catch (error) { - return undefined; - } +// fired once when the app reloads but before the app renders +// allows any updates to be applied to store data loaded from localStorage +var updateVersion = createAction('global/updateVersion') + +var fetchTokenList = { + pending: createAction('lists/fetchTokenList/pending'), + fulfilled: createAction('lists/fetchTokenList/fulfilled'), + rejected: createAction('lists/fetchTokenList/rejected'), +} +// add and remove from list options +var addList = createAction('lists/addList') +var removeList = createAction('lists/removeList') +// select which lists to search across from loaded lists +var enableList = createAction('lists/enableList') +var disableList = createAction('lists/disableList') +// versioning +var acceptListUpdate = createAction('lists/acceptListUpdate') + +var NEW_LIST_STATE = { + error: null, + current: null, + loadingRequestId: null, + pendingUpdate: null, +} +var initialState$5 = { + lastInitializedDefaultListOfLists: DEFAULT_LIST_OF_LISTS, + byUrl: __assign( + {}, + DEFAULT_LIST_OF_LISTS.reduce(function (memo, listUrl) { + memo[listUrl] = NEW_LIST_STATE + return memo + }, {}) + ), + activeListUrls: DEFAULT_ACTIVE_LIST_URLS, +} +var lists = createReducer(initialState$5, function (builder) { + return builder + .addCase(fetchTokenList.pending, function (state, _a) { + var _b, _c, _d, _e + var _f = _a.payload, + requestId = _f.requestId, + url = _f.url + var current = + (_c = (_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.current) !== null && _c !== void 0 + ? _c + : null + var pendingUpdate = + (_e = (_d = state.byUrl[url]) === null || _d === void 0 ? void 0 : _d.pendingUpdate) !== null && _e !== void 0 + ? _e + : null + state.byUrl[url] = { + current, + pendingUpdate, + loadingRequestId: requestId, + error: null, + } + }) + .addCase(fetchTokenList.fulfilled, function (state, _a) { + var _b, _c, _d + var _e = _a.payload, + requestId = _e.requestId, + tokenList = _e.tokenList, + url = _e.url + var current = (_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.current + var loadingRequestId = (_c = state.byUrl[url]) === null || _c === void 0 ? void 0 : _c.loadingRequestId + // no-op if update does nothing + if (current) { + var upgradeType = getVersionUpgrade(current.version, tokenList.version) + if (upgradeType === VersionUpgrade.NONE) return + if (loadingRequestId === null || loadingRequestId === requestId) { + state.byUrl[url] = { + current, + pendingUpdate: tokenList, + loadingRequestId: null, + error: null, + } + } + } else { + // activate if on default active + if (DEFAULT_ACTIVE_LIST_URLS.includes(url)) { + ;(_d = state.activeListUrls) === null || _d === void 0 ? void 0 : _d.push(url) + } + state.byUrl[url] = { + current: tokenList, + pendingUpdate: null, + loadingRequestId: null, + error: null, + } + } + }) + .addCase(fetchTokenList.rejected, function (state, _a) { + var _b + var _c = _a.payload, + url = _c.url, + requestId = _c.requestId, + errorMessage = _c.errorMessage + if (((_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.loadingRequestId) !== requestId) { + // no-op since it's not the latest request + return + } + state.byUrl[url] = { + current: state.byUrl[url].current ? state.byUrl[url].current : null, + pendingUpdate: null, + loadingRequestId: null, + error: errorMessage, + } + }) + .addCase(addList, function (state, _a) { + var url = _a.payload + if (!state.byUrl[url]) { + state.byUrl[url] = NEW_LIST_STATE + } + }) + .addCase(removeList, function (state, _a) { + var url = _a.payload + if (state.byUrl[url]) { + delete state.byUrl[url] + } + // remove list from active urls if needed + if (state.activeListUrls && state.activeListUrls.includes(url)) { + state.activeListUrls = state.activeListUrls.filter(function (u) { + return u !== url + }) + } + }) + .addCase(enableList, function (state, _a) { + var url = _a.payload + if (!state.byUrl[url]) { + state.byUrl[url] = NEW_LIST_STATE + } + if (state.activeListUrls && !state.activeListUrls.includes(url)) { + state.activeListUrls.push(url) + } + if (!state.activeListUrls) { + state.activeListUrls = [url] + } + }) + .addCase(disableList, function (state, _a) { + var url = _a.payload + if (state.activeListUrls && state.activeListUrls.includes(url)) { + state.activeListUrls = state.activeListUrls.filter(function (u) { + return u !== url + }) + } + }) + .addCase(acceptListUpdate, function (state, _a) { + var _b + var url = _a.payload + if (!((_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.pendingUpdate)) { + throw new Error('accept list update called without pending update') + } + state.byUrl[url] = __assign(__assign({}, state.byUrl[url]), { + current: state.byUrl[url].pendingUpdate, + pendingUpdate: null, + }) + }) + .addCase(updateVersion, function (state) { + // state loaded from localStorage, but new lists have never been initialized + if (!state.lastInitializedDefaultListOfLists) { + state.byUrl = initialState$5.byUrl + state.activeListUrls = initialState$5.activeListUrls + } else if (state.lastInitializedDefaultListOfLists) { + var lastInitializedSet_1 = state.lastInitializedDefaultListOfLists.reduce(function (s, l) { + return s.add(l) + }, new Set()) + var newListOfListsSet_1 = DEFAULT_LIST_OF_LISTS.reduce(function (s, l) { + return s.add(l) + }, new Set()) + DEFAULT_LIST_OF_LISTS.forEach(function (listUrl) { + if (!lastInitializedSet_1.has(listUrl)) { + state.byUrl[listUrl] = NEW_LIST_STATE + } + }) + state.lastInitializedDefaultListOfLists.forEach(function (listUrl) { + if (!newListOfListsSet_1.has(listUrl)) { + delete state.byUrl[listUrl] + } + }) + } + state.lastInitializedDefaultListOfLists = DEFAULT_LIST_OF_LISTS + // if no active lists, activate defaults + if (!state.activeListUrls) { + state.activeListUrls = DEFAULT_ACTIVE_LIST_URLS + // for each list on default list, initialize if needed + DEFAULT_ACTIVE_LIST_URLS.map(function (listUrl) { + if (!state.byUrl[listUrl]) { + state.byUrl[listUrl] = NEW_LIST_STATE + } + return true + }) + } + }) +}) + +/** + * Converts a filter to the corresponding string key + * @param filter the filter to convert + */ +function filterToKey(filter) { + var _a, _b, _c, _d + return ( + ((_a = filter.address) !== null && _a !== void 0 ? _a : '') + + ':' + + ((_d = + (_c = + (_b = filter.topics) === null || _b === void 0 + ? void 0 + : _b.map(function (topic) { + return topic ? (Array.isArray(topic) ? topic.join(';') : topic) : '\0' + })) === null || _c === void 0 + ? void 0 + : _c.join('-')) !== null && _d !== void 0 + ? _d + : '') + ) +} +/** + * Convert a filter key to the corresponding filter + * @param key key to convert + */ +function keyToFilter(key) { + var pcs = key.split(':') + var address = pcs[0] + var topics = pcs[1].split('-').map(function (topic) { + if (topic === '\0') return null + var parts = topic.split(';') + if (parts.length === 1) return parts[0] + return parts + }) + return { + address: address.length === 0 ? undefined : address, + topics, + } } -var V3_SWAP_DEFAULT_SLIPPAGE = new Percent(50, 10000); // .50% -var ONE_TENTHS_PERCENT = new Percent(10, 10000); // .10% -/** - * Return a guess of the gas cost used in computing slippage tolerance for a given trade - * @param trade the trade for which to _guess_ the amount of gas it would cost to execute - */ -function guesstimateGas(trade) { - if (!!trade) { - return 100000 + trade.swaps.reduce(function (memo, swap) { return swap.route.pools.length + memo; }, 0) * 30000; - } - return undefined; -} -var MIN_AUTO_SLIPPAGE_TOLERANCE = new Percent(5, 1000); // 0.5% -var MAX_AUTO_SLIPPAGE_TOLERANCE = new Percent(25, 100); // 25% -/** - * Returns slippage tolerance based on values from current trade, gas estimates from api, and active network. - */ -function useAutoSlippageTolerance(trade) { - var chainId = useActiveWeb3React().chainId; - var onL2 = chainId && L2_CHAIN_IDS.includes(chainId); - var outputDollarValue = useUSDCValue(trade === null || trade === void 0 ? void 0 : trade.outputAmount); - var nativeGasPrice = useGasPrice(); - var gasEstimate = guesstimateGas(trade); - var nativeCurrency = useNativeCurrency(); - var nativeCurrencyPrice = useUSDCPrice(nativeCurrency !== null && nativeCurrency !== void 0 ? nativeCurrency : undefined); - return useMemo(function () { - if (!trade || onL2) - return ONE_TENTHS_PERCENT; - var nativeGasCost = nativeGasPrice && typeof gasEstimate === 'number' - ? JSBI.multiply(nativeGasPrice, JSBI.BigInt(gasEstimate)) - : undefined; - var dollarGasCost = nativeCurrency && nativeGasCost && nativeCurrencyPrice - ? nativeCurrencyPrice.quote(CurrencyAmount.fromRawAmount(nativeCurrency, nativeGasCost)) - : undefined; - // if valid estimate from api and using api trade, use gas estimate from api - // NOTE - dont use gas estimate for L2s yet - need to verify accuracy - // if not, use local heuristic - var dollarCostToUse = chainId && SUPPORTED_GAS_ESTIMATE_CHAIN_IDS.includes(chainId) && (trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) - ? trade.gasUseEstimateUSD - : dollarGasCost; - if (outputDollarValue && dollarCostToUse) { - // the rationale is that a user will not want their trade to fail for a loss due to slippage that is less than - // the cost of the gas of the failed transaction - var fraction = dollarCostToUse.asFraction.divide(outputDollarValue.asFraction); - var result = new Percent(fraction.numerator, fraction.denominator); - if (result.greaterThan(MAX_AUTO_SLIPPAGE_TOLERANCE)) - return MAX_AUTO_SLIPPAGE_TOLERANCE; - if (result.lessThan(MIN_AUTO_SLIPPAGE_TOLERANCE)) - return MIN_AUTO_SLIPPAGE_TOLERANCE; - return result; - } - return V3_SWAP_DEFAULT_SLIPPAGE; - }, [trade, onL2, nativeGasPrice, gasEstimate, nativeCurrency, nativeCurrencyPrice, chainId, outputDollarValue]); +var _a$8 +var slice = createSlice({ + name: 'logs', + initialState: {}, + reducers: { + addListener(state, _a) { + var _b = _a.payload, + chainId = _b.chainId, + filter = _b.filter + if (!state[chainId]) state[chainId] = {} + var key = filterToKey(filter) + if (!state[chainId][key]) + state[chainId][key] = { + listeners: 1, + } + else state[chainId][key].listeners++ + }, + fetchingLogs(state, _a) { + var e_1, _b + var _c = _a.payload, + chainId = _c.chainId, + filters = _c.filters, + blockNumber = _c.blockNumber + if (!state[chainId]) return + try { + for ( + var filters_1 = __values(filters), filters_1_1 = filters_1.next(); + !filters_1_1.done; + filters_1_1 = filters_1.next() + ) { + var filter = filters_1_1.value + var key = filterToKey(filter) + if (!state[chainId][key]) continue + state[chainId][key].fetchingBlockNumber = blockNumber + } + } catch (e_1_1) { + e_1 = { error: e_1_1 } + } finally { + try { + if (filters_1_1 && !filters_1_1.done && (_b = filters_1.return)) _b.call(filters_1) + } finally { + if (e_1) throw e_1.error + } + } + }, + fetchedLogs(state, _a) { + var _b = _a.payload, + chainId = _b.chainId, + filter = _b.filter, + results = _b.results + if (!state[chainId]) return + var key = filterToKey(filter) + var fetchState = state[chainId][key] + if (!fetchState || (fetchState.results && fetchState.results.blockNumber > results.blockNumber)) return + fetchState.results = results + }, + fetchedLogsError(state, _a) { + var _b = _a.payload, + chainId = _b.chainId, + filter = _b.filter, + blockNumber = _b.blockNumber + if (!state[chainId]) return + var key = filterToKey(filter) + var fetchState = state[chainId][key] + if (!fetchState || (fetchState.results && fetchState.results.blockNumber > blockNumber)) return + fetchState.results = { + blockNumber, + error: true, + } + }, + removeListener(state, _a) { + var _b = _a.payload, + chainId = _b.chainId, + filter = _b.filter + if (!state[chainId]) return + var key = filterToKey(filter) + if (!state[chainId][key]) return + state[chainId][key].listeners-- + }, + }, +}) +var logs = slice.reducer +;(_a$8 = slice.actions), _a$8.addListener +_a$8.removeListener +var fetchedLogs = _a$8.fetchedLogs, + fetchedLogsError = _a$8.fetchedLogsError, + fetchingLogs = _a$8.fetchingLogs + +var Field$2 +;(function (Field) { + Field['CURRENCY_A'] = 'CURRENCY_A' + Field['CURRENCY_B'] = 'CURRENCY_B' +})(Field$2 || (Field$2 = {})) +var typeInput$2 = createAction('mint/typeInputMint') +var resetMintState$1 = createAction('mint/resetMintState') + +var initialState$4 = { + independentField: Field$2.CURRENCY_A, + typedValue: '', + otherTypedValue: '', + startPriceTypedValue: '', + leftRangeTypedValue: '', + rightRangeTypedValue: '', +} +var mint = createReducer(initialState$4, function (builder) { + return builder + .addCase(resetMintState$1, function () { + return initialState$4 + }) + .addCase(typeInput$2, function (state, _a) { + var _b = _a.payload, + field = _b.field, + typedValue = _b.typedValue, + noLiquidity = _b.noLiquidity + if (noLiquidity) { + // they're typing into the field they've last typed in + if (field === state.independentField) { + return __assign(__assign({}, state), { independentField: field, typedValue }) + } + // they're typing into a new field, store the other value + else { + return __assign(__assign({}, state), { + independentField: field, + typedValue, + otherTypedValue: state.typedValue, + }) + } + } else { + return __assign(__assign({}, state), { independentField: field, typedValue, otherTypedValue: '' }) + } + }) +}) + +var Field$1 +;(function (Field) { + Field['CURRENCY_A'] = 'CURRENCY_A' + Field['CURRENCY_B'] = 'CURRENCY_B' +})(Field$1 || (Field$1 = {})) +var Bound +;(function (Bound) { + Bound['LOWER'] = 'LOWER' + Bound['UPPER'] = 'UPPER' +})(Bound || (Bound = {})) +var typeInput$1 = createAction('mintV3/typeInputMint') +var typeStartPriceInput = createAction('mintV3/typeStartPriceInput') +var typeLeftRangeInput = createAction('mintV3/typeLeftRangeInput') +var typeRightRangeInput = createAction('mintV3/typeRightRangeInput') +var resetMintState = createAction('mintV3/resetMintState') +var setFullRange = createAction('mintV3/setFullRange') + +var initialState$3 = { + independentField: Field$1.CURRENCY_A, + typedValue: '', + startPriceTypedValue: '', + leftRangeTypedValue: '', + rightRangeTypedValue: '', +} +var mintV3 = createReducer(initialState$3, function (builder) { + return builder + .addCase(resetMintState, function () { + return initialState$3 + }) + .addCase(setFullRange, function (state) { + return __assign(__assign({}, state), { leftRangeTypedValue: true, rightRangeTypedValue: true }) + }) + .addCase(typeStartPriceInput, function (state, _a) { + var typedValue = _a.payload.typedValue + return __assign(__assign({}, state), { startPriceTypedValue: typedValue }) + }) + .addCase(typeLeftRangeInput, function (state, _a) { + var typedValue = _a.payload.typedValue + return __assign(__assign({}, state), { leftRangeTypedValue: typedValue }) + }) + .addCase(typeRightRangeInput, function (state, _a) { + var typedValue = _a.payload.typedValue + return __assign(__assign({}, state), { rightRangeTypedValue: typedValue }) + }) + .addCase(typeInput$1, function (state, _a) { + var _b = _a.payload, + field = _b.field, + typedValue = _b.typedValue, + noLiquidity = _b.noLiquidity + if (noLiquidity) { + // they're typing into the field they've last typed in + if (field === state.independentField) { + return __assign(__assign({}, state), { independentField: field, typedValue }) + } + // they're typing into a new field, store the other value + else { + return __assign(__assign({}, state), { independentField: field, typedValue }) + } + } else { + return __assign(__assign({}, state), { independentField: field, typedValue }) + } + }) +}) + +var protocols = [Protocol.V2, Protocol.V3] +var DEFAULT_QUERY_PARAMS = { + protocols: protocols + .map(function (p) { + return p.toLowerCase() + }) + .join(','), + // example other params + // forceCrossProtocol: 'true', + // minSplits: '5', +} +function getClientSideQuote(_a) { + var tokenInAddress = _a.tokenInAddress, + tokenInChainId = _a.tokenInChainId, + tokenInDecimals = _a.tokenInDecimals, + tokenInSymbol = _a.tokenInSymbol, + tokenOutAddress = _a.tokenOutAddress, + tokenOutChainId = _a.tokenOutChainId, + tokenOutDecimals = _a.tokenOutDecimals, + tokenOutSymbol = _a.tokenOutSymbol, + amount = _a.amount, + type = _a.type + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + return [ + 4 /*yield*/, + Promise.resolve().then(function () { + return index + }), + ] + case 1: + return [ + 2 /*return*/, + _b.sent().getQuote( + { + type, + chainId: tokenInChainId, + tokenIn: { + address: tokenInAddress, + chainId: tokenInChainId, + decimals: tokenInDecimals, + symbol: tokenInSymbol, + }, + tokenOut: { + address: tokenOutAddress, + chainId: tokenOutChainId, + decimals: tokenOutDecimals, + symbol: tokenOutSymbol, + }, + amount, + }, + { protocols } + ), + ] + } + }) + }) +} +var routingApi = createApi({ + reducerPath: 'routingApi', + baseQuery: fetchBaseQuery({ + baseUrl: 'https://api.uniswap.org/v1/', + }), + endpoints(build) { + return { + getQuote: build.query({ + queryFn(args, _api, _extraOptions, fetch) { + return __awaiter(this, void 0, void 0, function () { + var tokenInAddress, + tokenInChainId, + tokenOutAddress, + tokenOutChainId, + amount, + useClientSideRouter, + type, + result, + query, + e_1 + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + ;(tokenInAddress = args.tokenInAddress), + (tokenInChainId = args.tokenInChainId), + (tokenOutAddress = args.tokenOutAddress), + (tokenOutChainId = args.tokenOutChainId), + (amount = args.amount), + (useClientSideRouter = args.useClientSideRouter), + (type = args.type) + _a.label = 1 + case 1: + _a.trys.push([1, 6, , 7]) + if (!useClientSideRouter) return [3 /*break*/, 3] + return [4 /*yield*/, getClientSideQuote(args)] + case 2: + result = _a.sent() + return [3 /*break*/, 5] + case 3: + query = qs.stringify( + __assign(__assign({}, DEFAULT_QUERY_PARAMS), { + tokenInAddress, + tokenInChainId, + tokenOutAddress, + tokenOutChainId, + amount, + type, + }) + ) + return [4 /*yield*/, fetch('quote?' + query)] + case 4: + result = _a.sent() + _a.label = 5 + case 5: + return [2 /*return*/, { data: result.data }] + case 6: + e_1 = _a.sent() + // TODO: fall back to client-side quoter when auto router fails. + // deprecate 'legacy' v2/v3 routers first. + return [2 /*return*/, { error: e_1 }] + case 7: + return [2 /*return*/] + } + }) + }) + }, + keepUnusedDataFor: ms(templateObject_1$1b || (templateObject_1$1b = __makeTemplateObject(['10s'], ['10s']))), + extraOptions: { + maxRetries: 0, + }, + }), + } + }, +}) +var useGetQuoteQuery = routingApi.useGetQuoteQuery +var templateObject_1$1b + +var Field +;(function (Field) { + Field['INPUT'] = 'INPUT' + Field['OUTPUT'] = 'OUTPUT' +})(Field || (Field = {})) +var selectCurrency = createAction('swap/selectCurrency') +var switchCurrencies = createAction('swap/switchCurrencies') +var typeInput = createAction('swap/typeInput') +var replaceSwapState = createAction('swap/replaceSwapState') +var setRecipient = createAction('swap/setRecipient') + +var CHAIN_DATA_ABI = [ + { + inputs: [], + name: 'latestAnswer', + outputs: [{ internalType: 'int256', name: '', type: 'int256' }], + stateMutability: 'view', + type: 'function', + }, +] +/** + * Returns the price of 1 gas in WEI for the currently selected network using the chainlink fast gas price oracle + */ +function useGasPrice() { + var _a, _b + var address = useENSAddress('fast-gas-gwei.data.eth').address + var contract = useContract(address !== null && address !== void 0 ? address : undefined, CHAIN_DATA_ABI, false) + var resultStr = + (_b = (_a = useSingleCallResult(contract, 'latestAnswer').result) === null || _a === void 0 ? void 0 : _a[0]) === + null || _b === void 0 + ? void 0 + : _b.toString() + return typeof resultStr === 'string' ? JSBI.BigInt(resultStr) : undefined } -/** - * Transforms a Routing API quote into an array of routes that can be used to create - * a `Trade`. - */ -function computeRoutes(currencyIn, currencyOut, tradeType, quoteResult) { - if (!quoteResult || !quoteResult.route || !currencyIn || !currencyOut) - return undefined; - if (quoteResult.route.length === 0) - return []; - var parsedTokenIn = parseToken(quoteResult.route[0][0].tokenIn); - var parsedTokenOut = parseToken(quoteResult.route[0][quoteResult.route[0].length - 1].tokenOut); - if (parsedTokenIn.address !== currencyIn.wrapped.address) - return undefined; - if (parsedTokenOut.address !== currencyOut.wrapped.address) - return undefined; - var parsedCurrencyIn = currencyIn.isNative ? nativeOnChain(currencyIn.chainId) : parsedTokenIn; - var parsedCurrencyOut = currencyOut.isNative ? nativeOnChain(currencyOut.chainId) : parsedTokenOut; - try { - return quoteResult.route.map(function (route) { - if (route.length === 0) { - throw new Error('Expected route to have at least one pair or pool'); - } - var rawAmountIn = route[0].amountIn; - var rawAmountOut = route[route.length - 1].amountOut; - if (!rawAmountIn || !rawAmountOut) { - throw new Error('Expected both amountIn and amountOut to be present'); - } - return { - routev3: isV3Route(route) ? new Route$1(route.map(parsePool), parsedCurrencyIn, parsedCurrencyOut) : null, - routev2: !isV3Route(route) ? new Route$2(route.map(parsePair), parsedCurrencyIn, parsedCurrencyOut) : null, - inputAmount: CurrencyAmount.fromRawAmount(parsedCurrencyIn, rawAmountIn), - outputAmount: CurrencyAmount.fromRawAmount(parsedCurrencyOut, rawAmountOut), - }; - }); - } - catch (e) { - // `Route` constructor may throw if inputs/outputs are temporarily out of sync - // (RTK-Query always returns the latest data which may not be the right inputs/outputs) - // This is not fatal and will fix itself in future render cycles - console.error(e); - return undefined; - } -} -function transformRoutesToTrade(route, tradeType, gasUseEstimateUSD) { - var _a, _b; - return new InterfaceTrade({ - v2Routes: (_a = route === null || route === void 0 ? void 0 : route.filter(function (r) { return r.routev2 !== null; }).map(function (_a) { - var routev2 = _a.routev2, inputAmount = _a.inputAmount, outputAmount = _a.outputAmount; - return ({ routev2: routev2, inputAmount: inputAmount, outputAmount: outputAmount }); - })) !== null && _a !== void 0 ? _a : [], - v3Routes: (_b = route === null || route === void 0 ? void 0 : route.filter(function (r) { return r.routev3 !== null; }).map(function (_a) { - var routev3 = _a.routev3, inputAmount = _a.inputAmount, outputAmount = _a.outputAmount; - return ({ routev3: routev3, inputAmount: inputAmount, outputAmount: outputAmount }); - })) !== null && _b !== void 0 ? _b : [], - tradeType: tradeType, - gasUseEstimateUSD: gasUseEstimateUSD, - }); -} -var parseToken = function (_a) { - var address = _a.address, chainId = _a.chainId, decimals = _a.decimals, symbol = _a.symbol; - return new Token(chainId, address, parseInt(decimals.toString()), symbol); -}; -var parsePool = function (_a) { - var fee = _a.fee, sqrtRatioX96 = _a.sqrtRatioX96, liquidity = _a.liquidity, tickCurrent = _a.tickCurrent, tokenIn = _a.tokenIn, tokenOut = _a.tokenOut; - return new Pool$1(parseToken(tokenIn), parseToken(tokenOut), parseInt(fee), sqrtRatioX96, liquidity, parseInt(tickCurrent)); -}; -var parsePair = function (_a) { - var reserve0 = _a.reserve0, reserve1 = _a.reserve1; - return new Pair(CurrencyAmount.fromRawAmount(parseToken(reserve0.token), reserve0.quotient), CurrencyAmount.fromRawAmount(parseToken(reserve1.token), reserve1.quotient)); -}; -function isV3Route(route) { - return route[0].type === 'v3-pool'; +/** + * Parses a CurrencyAmount from the passed string. + * Returns the CurrencyAmount, or undefined if parsing fails. + */ +function tryParseCurrencyAmount(value, currency) { + if (!value || !currency) { + return undefined + } + try { + var typedValueParsed = parseUnits(value, currency.decimals).toString() + if (typedValueParsed !== '0') { + return CurrencyAmount.fromRawAmount(currency, JSBI.BigInt(typedValueParsed)) + } + } catch (error) { + // fails if the user specifies too many decimal places of precision (or maybe exceed max uint?) + console.debug('Failed to parse input amount: "' + value + '"', error) + } + return undefined } -function useFreshData(data, dataBlockNumber, maxBlockAge) { - if (maxBlockAge === void 0) { maxBlockAge = 10; } - var localBlockNumber = useBlockNumber(); - if (!localBlockNumber) - return undefined; - if (localBlockNumber - dataBlockNumber > maxBlockAge) { - return undefined; - } - return data; -} -/** - * Returns query arguments for the Routing API query or undefined if the - * query should be skipped. - */ -function useRoutingAPIArguments(_a) { - var tokenIn = _a.tokenIn, tokenOut = _a.tokenOut, amount = _a.amount, tradeType = _a.tradeType; - var _b = __read(useClientSideRouter(), 1), clientSideRouter = _b[0]; - return useMemo(function () { - return !tokenIn || !tokenOut || !amount || tokenIn.equals(tokenOut) - ? undefined - : { - amount: amount.quotient.toString(), - tokenInAddress: tokenIn.wrapped.address, - tokenInChainId: tokenIn.wrapped.chainId, - tokenInDecimals: tokenIn.wrapped.decimals, - tokenInSymbol: tokenIn.wrapped.symbol, - tokenOutAddress: tokenOut.wrapped.address, - tokenOutChainId: tokenOut.wrapped.chainId, - tokenOutDecimals: tokenOut.wrapped.decimals, - tokenOutSymbol: tokenOut.wrapped.symbol, - useClientSideRouter: clientSideRouter, - type: (tradeType === TradeType.EXACT_INPUT ? 'exactIn' : 'exactOut'), - }; - }, [amount, clientSideRouter, tokenIn, tokenOut, tradeType]); -} -/** - * Returns the best trade by invoking the routing api or the smart order router on the client - * @param tradeType whether the swap is an exact in/out - * @param amountSpecified the exact amount to swap in/out - * @param otherCurrency the desired output/payment currency - */ -function useRoutingAPITrade(tradeType, amountSpecified, otherCurrency) { - var _a; - var _b = __read(useMemo(function () { - return tradeType === TradeType.EXACT_INPUT - ? [amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, otherCurrency] - : [otherCurrency, amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency]; - }, [amountSpecified, otherCurrency, tradeType]), 2), currencyIn = _b[0], currencyOut = _b[1]; - var queryArgs = useRoutingAPIArguments({ - tokenIn: currencyIn, - tokenOut: currencyOut, - amount: amountSpecified, - tradeType: tradeType, - }); - var _c = useGetQuoteQuery(queryArgs !== null && queryArgs !== void 0 ? queryArgs : skipToken, { - pollingInterval: ms(templateObject_1$1a || (templateObject_1$1a = __makeTemplateObject(["15s"], ["15s"]))), - refetchOnFocus: true, - }), isLoading = _c.isLoading, isError = _c.isError, data = _c.data; - var quoteResult = useFreshData(data, Number(data === null || data === void 0 ? void 0 : data.blockNumber) || 0); - var route = useMemo(function () { return computeRoutes(currencyIn, currencyOut, tradeType, quoteResult); }, [currencyIn, currencyOut, quoteResult, tradeType]); - // get USD gas cost of trade in active chains stablecoin amount - var gasUseEstimateUSD = (_a = useStablecoinAmountFromFiatValue(quoteResult === null || quoteResult === void 0 ? void 0 : quoteResult.gasUseEstimateUSD)) !== null && _a !== void 0 ? _a : null; - return useMemo(function () { - if (!currencyIn || !currencyOut) { - return { - state: TradeState.INVALID, - trade: undefined, - }; - } - if (isLoading && !quoteResult) { - // only on first hook render - return { - state: TradeState.LOADING, - trade: undefined, - }; - } - var otherAmount = tradeType === TradeType.EXACT_INPUT - ? currencyOut && quoteResult - ? CurrencyAmount.fromRawAmount(currencyOut, quoteResult.quote) - : undefined - : currencyIn && quoteResult - ? CurrencyAmount.fromRawAmount(currencyIn, quoteResult.quote) - : undefined; - if (isError || !otherAmount || !route || route.length === 0 || !queryArgs) { - return { - state: TradeState.NO_ROUTE_FOUND, - trade: undefined, - }; - } - try { - var trade = transformRoutesToTrade(route, tradeType, gasUseEstimateUSD); - return { - // always return VALID regardless of isFetching status - state: TradeState.VALID, - trade: trade, - }; - } - catch (e) { - console.debug('transformRoutesToTrade failed: ', e); - return { state: TradeState.INVALID, trade: undefined }; - } - }, [currencyIn, currencyOut, isLoading, quoteResult, tradeType, isError, route, queryArgs, gasUseEstimateUSD]); -} -var templateObject_1$1a; +// returns whether tradeB is better than tradeA by at least a threshold percentage amount +// only used by v2 hooks +function isTradeBetter(tradeA, tradeB, minimumDelta) { + if (minimumDelta === void 0) { + minimumDelta = ZERO_PERCENT + } + if (tradeA && !tradeB) return false + if (tradeB && !tradeA) return true + if (!tradeA || !tradeB) return undefined + if ( + tradeA.tradeType !== tradeB.tradeType || + !tradeA.inputAmount.currency.equals(tradeB.inputAmount.currency) || + !tradeA.outputAmount.currency.equals(tradeB.outputAmount.currency) + ) { + throw new Error('Comparing incomparable trades') + } + if (minimumDelta.equalTo(ZERO_PERCENT)) { + return tradeA.executionPrice.lessThan(tradeB.executionPrice) + } else { + return tradeA.executionPrice.asFraction + .multiply(minimumDelta.add(ONE_HUNDRED_PERCENT)) + .lessThan(tradeB.executionPrice) + } +} -var AUTO_ROUTER_SUPPORTED_CHAINS = Object.values(ChainId); +function useAllCurrencyCombinations(currencyA, currencyB) { + var chainId = currencyA === null || currencyA === void 0 ? void 0 : currencyA.chainId + var _a = __read( + chainId + ? [ + currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped, + currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped, + ] + : [undefined, undefined], + 2 + ), + tokenA = _a[0], + tokenB = _a[1] + var bases = useMemo( + function () { + var _a, _b, _c, _d, _e + if (!chainId || chainId !== (tokenB === null || tokenB === void 0 ? void 0 : tokenB.chainId)) return [] + var common = (_a = BASES_TO_CHECK_TRADES_AGAINST[chainId]) !== null && _a !== void 0 ? _a : [] + var additionalA = tokenA + ? (_c = (_b = ADDITIONAL_BASES[chainId]) === null || _b === void 0 ? void 0 : _b[tokenA.address]) !== null && + _c !== void 0 + ? _c + : [] + : [] + var additionalB = tokenB + ? (_e = (_d = ADDITIONAL_BASES[chainId]) === null || _d === void 0 ? void 0 : _d[tokenB.address]) !== null && + _e !== void 0 + ? _e + : [] + : [] + return __spreadArray( + __spreadArray(__spreadArray([], __read(common), false), __read(additionalA), false), + __read(additionalB), + false + ) + }, + [chainId, tokenA, tokenB] + ) + var basePairs = useMemo( + function () { + return ( + bases + .flatMap(function (base) { + return bases.map(function (otherBase) { + return [base, otherBase] + }) + }) + // though redundant with the first filter below, that expression runs more often, so this is probably worthwhile + .filter(function (_a) { + var _b = __read(_a, 2), + t0 = _b[0], + t1 = _b[1] + return !t0.equals(t1) + }) + ) + }, + [bases] + ) + return useMemo( + function () { + return tokenA && tokenB + ? __spreadArray( + __spreadArray( + __spreadArray( + [ + // the direct pair + [tokenA, tokenB], + ], + __read( + bases.map(function (base) { + return [tokenA, base] + }) + ), + false + ), + __read( + bases.map(function (base) { + return [tokenB, base] + }) + ), + false + ), + __read(basePairs), + false + ) + .filter(function (_a) { + var _b = __read(_a, 2), + t0 = _b[0], + t1 = _b[1] + return !t0.equals(t1) + }) + // filter out duplicate pairs + .filter(function (_a, i, otherPairs) { + var _b = __read(_a, 2), + t0 = _b[0], + t1 = _b[1] + // find the first index in the array at which there are the same 2 tokens as the current + var firstIndexInOtherPairs = otherPairs.findIndex(function (_a) { + var _b = __read(_a, 2), + t0Other = _b[0], + t1Other = _b[1] + return (t0.equals(t0Other) && t1.equals(t1Other)) || (t0.equals(t1Other) && t1.equals(t0Other)) + }) + // only accept the first occurrence of the same 2 tokens + return firstIndexInOtherPairs === i + }) + // optionally filter out some pairs for tokens with custom bases defined + .filter(function (_a) { + var _b = __read(_a, 2), + tokenA = _b[0], + tokenB = _b[1] + if (!chainId) return true + var customBases = CUSTOM_BASES[chainId] + var customBasesA = customBases === null || customBases === void 0 ? void 0 : customBases[tokenA.address] + var customBasesB = customBases === null || customBases === void 0 ? void 0 : customBases[tokenB.address] + if (!customBasesA && !customBasesB) return true + if ( + customBasesA && + !customBasesA.find(function (base) { + return tokenB.equals(base) + }) + ) + return false + if ( + customBasesB && + !customBasesB.find(function (base) { + return tokenA.equals(base) + }) + ) + return false + return true + }) + : [] + }, + [tokenA, tokenB, bases, basePairs, chainId] + ) +} -function useAutoRouterSupported() { - var chainId = useActiveWeb3React().chainId; - return Boolean(chainId && AUTO_ROUTER_SUPPORTED_CHAINS.includes(chainId)); +var PAIR_INTERFACE = new Interface(abi$4) +var PairState +;(function (PairState) { + PairState[(PairState['LOADING'] = 0)] = 'LOADING' + PairState[(PairState['NOT_EXISTS'] = 1)] = 'NOT_EXISTS' + PairState[(PairState['EXISTS'] = 2)] = 'EXISTS' + PairState[(PairState['INVALID'] = 3)] = 'INVALID' +})(PairState || (PairState = {})) +function useV2Pairs(currencies) { + var tokens = useMemo( + function () { + return currencies.map(function (_a) { + var _b = __read(_a, 2), + currencyA = _b[0], + currencyB = _b[1] + return [ + currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped, + currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped, + ] + }) + }, + [currencies] + ) + var pairAddresses = useMemo( + function () { + return tokens.map(function (_a) { + var _b = __read(_a, 2), + tokenA = _b[0], + tokenB = _b[1] + return tokenA && + tokenB && + tokenA.chainId === tokenB.chainId && + !tokenA.equals(tokenB) && + V2_FACTORY_ADDRESSES[tokenA.chainId] + ? computePairAddress({ factoryAddress: V2_FACTORY_ADDRESSES[tokenA.chainId], tokenA, tokenB }) + : undefined + }) + }, + [tokens] + ) + var results = useMultipleContractSingleData(pairAddresses, PAIR_INTERFACE, 'getReserves') + return useMemo( + function () { + return results.map(function (result, i) { + var reserves = result.result, + loading = result.loading + var tokenA = tokens[i][0] + var tokenB = tokens[i][1] + if (loading) return [PairState.LOADING, null] + if (!tokenA || !tokenB || tokenA.equals(tokenB)) return [PairState.INVALID, null] + if (!reserves) return [PairState.NOT_EXISTS, null] + var reserve0 = reserves.reserve0, + reserve1 = reserves.reserve1 + var _a = __read(tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA], 2), + token0 = _a[0], + token1 = _a[1] + return [ + PairState.EXISTS, + new Pair( + CurrencyAmount.fromRawAmount(token0, reserve0.toString()), + CurrencyAmount.fromRawAmount(token1, reserve1.toString()) + ), + ] + }) + }, + [results, tokens] + ) } -/** - * Returns the best v2+v3 trade for a desired swap. - * @param tradeType whether the swap is an exact in/out - * @param amountSpecified the exact amount to swap in/out - * @param otherCurrency the desired output/payment currency - */ -function useBestTrade(tradeType, amountSpecified, otherCurrency) { - var autoRouterSupported = useAutoRouterSupported(); - var isWindowVisible = useIsWindowVisible(); - var _a = __read(useDebounce(useMemo(function () { return [amountSpecified, otherCurrency]; }, [amountSpecified, otherCurrency]), 200), 2), debouncedAmount = _a[0], debouncedOtherCurrency = _a[1]; - var routingAPITrade = useRoutingAPITrade(tradeType, autoRouterSupported && isWindowVisible ? debouncedAmount : undefined, debouncedOtherCurrency); - var isLoading = amountSpecified !== undefined && debouncedAmount === undefined; - // consider trade debouncing when inputs/outputs do not match - var debouncing = routingAPITrade.trade && - amountSpecified && - (tradeType === TradeType.EXACT_INPUT - ? !routingAPITrade.trade.inputAmount.equalTo(amountSpecified) || - !amountSpecified.currency.equals(routingAPITrade.trade.inputAmount.currency) || - !(debouncedOtherCurrency === null || debouncedOtherCurrency === void 0 ? void 0 : debouncedOtherCurrency.equals(routingAPITrade.trade.outputAmount.currency)) - : !routingAPITrade.trade.outputAmount.equalTo(amountSpecified) || - !amountSpecified.currency.equals(routingAPITrade.trade.outputAmount.currency) || - !(debouncedOtherCurrency === null || debouncedOtherCurrency === void 0 ? void 0 : debouncedOtherCurrency.equals(routingAPITrade.trade.inputAmount.currency))); - var useFallback = !autoRouterSupported || (!debouncing && routingAPITrade.state === TradeState.NO_ROUTE_FOUND); - // only use client side router if routing api trade failed or is not supported - var bestV3Trade = useClientSideV3Trade(tradeType, useFallback ? debouncedAmount : undefined, useFallback ? debouncedOtherCurrency : undefined); - // only return gas estimate from api if routing api trade is used - return useMemo(function () { return (__assign(__assign(__assign({}, (useFallback ? bestV3Trade : routingAPITrade)), (debouncing ? { state: TradeState.SYNCING } : {})), (isLoading ? { state: TradeState.LOADING } : {}))); }, [bestV3Trade, debouncing, isLoading, routingAPITrade, useFallback]); -} - -// gets the current timestamp from the blockchain -function useCurrentBlockTimestamp() { - var _a, _b; - var multicall = useInterfaceMulticall(); - return (_b = (_a = useSingleCallResult(multicall, 'getCurrentBlockTimestamp')) === null || _a === void 0 ? void 0 : _a.result) === null || _b === void 0 ? void 0 : _b[0]; +function useAllCommonPairs(currencyA, currencyB) { + var allCurrencyCombinations = useAllCurrencyCombinations(currencyA, currencyB) + var allPairs = useV2Pairs(allCurrencyCombinations) + return useMemo( + function () { + return Object.values( + allPairs + // filter out invalid pairs + .filter(function (result) { + return Boolean(result[0] === PairState.EXISTS && result[1]) + }) + .map(function (_a) { + var _b = __read(_a, 2), + pair = _b[1] + return pair + }) + ) + }, + [allPairs] + ) +} +var MAX_HOPS = 3 +/** + * Returns the best v2 trade for a desired swap + * @param tradeType whether the swap is an exact in/out + * @param amountSpecified the exact amount to swap in/out + * @param otherCurrency the desired output/payment currency + */ +function useBestV2Trade(tradeType, amountSpecified, otherCurrency, _a) { + var _b = _a === void 0 ? {} : _a, + _c = _b.maxHops, + maxHops = _c === void 0 ? MAX_HOPS : _c + var _d = __read( + useMemo( + function () { + return tradeType === TradeType.EXACT_INPUT + ? [ + amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, + otherCurrency, + ] + : [ + otherCurrency, + amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, + ] + }, + [tradeType, amountSpecified, otherCurrency] + ), + 2 + ), + currencyIn = _d[0], + currencyOut = _d[1] + var allowedPairs = useAllCommonPairs(currencyIn, currencyOut) + return useMemo( + function () { + var _a, _b, _c, _d + if (amountSpecified && currencyIn && currencyOut && allowedPairs.length > 0) { + if (maxHops === 1) { + var options = { maxHops: 1, maxNumResults: 1 } + if (tradeType === TradeType.EXACT_INPUT) { + var amountIn = amountSpecified + return (_a = Trade.bestTradeExactIn(allowedPairs, amountIn, currencyOut, options)[0]) !== null && + _a !== void 0 + ? _a + : null + } else { + var amountOut = amountSpecified + return (_b = Trade.bestTradeExactOut(allowedPairs, currencyIn, amountOut, options)[0]) !== null && + _b !== void 0 + ? _b + : null + } + } + // search through trades with varying hops, find best trade out of them + var bestTradeSoFar = null + for (var i = 1; i <= maxHops; i++) { + var options = { maxHops: i, maxNumResults: 1 } + var currentTrade = void 0 + if (tradeType === TradeType.EXACT_INPUT) { + var amountIn = amountSpecified + currentTrade = + (_c = Trade.bestTradeExactIn(allowedPairs, amountIn, currencyOut, options)[0]) !== null && _c !== void 0 + ? _c + : null + } else { + var amountOut = amountSpecified + currentTrade = + (_d = Trade.bestTradeExactOut(allowedPairs, currencyIn, amountOut, options)[0]) !== null && _d !== void 0 + ? _d + : null + } + // if current trade is best yet, save it + if (isTradeBetter(bestTradeSoFar, currentTrade, BETTER_TRADE_LESS_HOPS_THRESHOLD)) { + bestTradeSoFar = currentTrade + } + } + return bestTradeSoFar + } + return null + }, + [tradeType, amountSpecified, currencyIn, currencyOut, allowedPairs, maxHops] + ) } -new Interface(abi$6); -({ - 1: [ - { - tokens: [WRAPPED_NATIVE_CURRENCY[1], DAI], - stakingRewardAddress: '0xa1484C3aa22a66C62b77E0AE78E15258bd0cB711', - }, - { - tokens: [WRAPPED_NATIVE_CURRENCY[1], USDC], - stakingRewardAddress: '0x7FBa4B8Dc5E7616e59622806932DBea72537A56b', - }, - { - tokens: [WRAPPED_NATIVE_CURRENCY[1], USDT], - stakingRewardAddress: '0x6C3e4cb2E96B01F4b866965A91ed4437839A121a', - }, - { - tokens: [WRAPPED_NATIVE_CURRENCY[1], WBTC], - stakingRewardAddress: '0xCA35e32e7926b96A9988f61d510E038108d8068e', - }, - ], -}); +var TradeState +;(function (TradeState) { + TradeState[(TradeState['LOADING'] = 0)] = 'LOADING' + TradeState[(TradeState['INVALID'] = 1)] = 'INVALID' + TradeState[(TradeState['NO_ROUTE_FOUND'] = 2)] = 'NO_ROUTE_FOUND' + TradeState[(TradeState['VALID'] = 3)] = 'VALID' + TradeState[(TradeState['SYNCING'] = 4)] = 'SYNCING' +})(TradeState || (TradeState = {})) +var InterfaceTrade = /** @class */ (function (_super) { + __extends(InterfaceTrade, _super) + function InterfaceTrade(_a) { + var gasUseEstimateUSD = _a.gasUseEstimateUSD, + routes = __rest(_a, ['gasUseEstimateUSD']) + var _this = _super.call(this, routes) || this + _this.gasUseEstimateUSD = gasUseEstimateUSD + return _this + } + return InterfaceTrade +})(Trade$1) -// mimics useAllBalances -function useAllTokenBalances() { - var account = useActiveWeb3React().account; - var allTokens = useAllTokens(); - var allTokensArray = useMemo(function () { return Object.values(allTokens !== null && allTokens !== void 0 ? allTokens : {}); }, [allTokens]); - var balances = useTokenBalances(account !== null && account !== void 0 ? account : undefined, allTokensArray); - return balances !== null && balances !== void 0 ? balances : {}; +var abi = [ + { + inputs: [], + name: 'feeGrowthGlobal0X128', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'feeGrowthGlobal1X128', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'liquidity', + outputs: [ + { + internalType: 'uint128', + name: '', + type: 'uint128', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'index', + type: 'uint256', + }, + ], + name: 'observations', + outputs: [ + { + internalType: 'uint32', + name: 'blockTimestamp', + type: 'uint32', + }, + { + internalType: 'int56', + name: 'tickCumulative', + type: 'int56', + }, + { + internalType: 'uint160', + name: 'secondsPerLiquidityCumulativeX128', + type: 'uint160', + }, + { + internalType: 'bool', + name: 'initialized', + type: 'bool', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'key', + type: 'bytes32', + }, + ], + name: 'positions', + outputs: [ + { + internalType: 'uint128', + name: '_liquidity', + type: 'uint128', + }, + { + internalType: 'uint256', + name: 'feeGrowthInside0LastX128', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'feeGrowthInside1LastX128', + type: 'uint256', + }, + { + internalType: 'uint128', + name: 'tokensOwed0', + type: 'uint128', + }, + { + internalType: 'uint128', + name: 'tokensOwed1', + type: 'uint128', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'protocolFees', + outputs: [ + { + internalType: 'uint128', + name: 'token0', + type: 'uint128', + }, + { + internalType: 'uint128', + name: 'token1', + type: 'uint128', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'slot0', + outputs: [ + { + internalType: 'uint160', + name: 'sqrtPriceX96', + type: 'uint160', + }, + { + internalType: 'int24', + name: 'tick', + type: 'int24', + }, + { + internalType: 'uint16', + name: 'observationIndex', + type: 'uint16', + }, + { + internalType: 'uint16', + name: 'observationCardinality', + type: 'uint16', + }, + { + internalType: 'uint16', + name: 'observationCardinalityNext', + type: 'uint16', + }, + { + internalType: 'uint8', + name: 'feeProtocol', + type: 'uint8', + }, + { + internalType: 'bool', + name: 'unlocked', + type: 'bool', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'int16', + name: 'wordPosition', + type: 'int16', + }, + ], + name: 'tickBitmap', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'int24', + name: 'tick', + type: 'int24', + }, + ], + name: 'ticks', + outputs: [ + { + internalType: 'uint128', + name: 'liquidityGross', + type: 'uint128', + }, + { + internalType: 'int128', + name: 'liquidityNet', + type: 'int128', + }, + { + internalType: 'uint256', + name: 'feeGrowthOutside0X128', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'feeGrowthOutside1X128', + type: 'uint256', + }, + { + internalType: 'int56', + name: 'tickCumulativeOutside', + type: 'int56', + }, + { + internalType: 'uint160', + name: 'secondsPerLiquidityOutsideX128', + type: 'uint160', + }, + { + internalType: 'uint32', + name: 'secondsOutside', + type: 'uint32', + }, + { + internalType: 'bool', + name: 'initialized', + type: 'bool', + }, + ], + stateMutability: 'view', + type: 'function', + }, +] + +var POOL_STATE_INTERFACE = new Interface(abi) +var PoolState +;(function (PoolState) { + PoolState[(PoolState['LOADING'] = 0)] = 'LOADING' + PoolState[(PoolState['NOT_EXISTS'] = 1)] = 'NOT_EXISTS' + PoolState[(PoolState['EXISTS'] = 2)] = 'EXISTS' + PoolState[(PoolState['INVALID'] = 3)] = 'INVALID' +})(PoolState || (PoolState = {})) +function usePools(poolKeys) { + var chainId = useActiveWeb3React().chainId + var transformed = useMemo( + function () { + return poolKeys.map(function (_a) { + var _b = __read(_a, 3), + currencyA = _b[0], + currencyB = _b[1], + feeAmount = _b[2] + if (!chainId || !currencyA || !currencyB || !feeAmount) return null + var tokenA = currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped + var tokenB = currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped + if (!tokenA || !tokenB || tokenA.equals(tokenB)) return null + var _c = __read(tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA], 2), + token0 = _c[0], + token1 = _c[1] + return [token0, token1, feeAmount] + }) + }, + [chainId, poolKeys] + ) + var poolAddresses = useMemo( + function () { + var v3CoreFactoryAddress = chainId && V3_CORE_FACTORY_ADDRESSES[chainId] + return transformed.map(function (value) { + if (!v3CoreFactoryAddress || !value) return undefined + return computePoolAddress({ + factoryAddress: v3CoreFactoryAddress, + tokenA: value[0], + tokenB: value[1], + fee: value[2], + }) + }) + }, + [chainId, transformed] + ) + var slot0s = useMultipleContractSingleData(poolAddresses, POOL_STATE_INTERFACE, 'slot0') + var liquidities = useMultipleContractSingleData(poolAddresses, POOL_STATE_INTERFACE, 'liquidity') + return useMemo( + function () { + return poolKeys.map(function (_key, index) { + var _a + var _b = __read((_a = transformed[index]) !== null && _a !== void 0 ? _a : [], 3), + token0 = _b[0], + token1 = _b[1], + fee = _b[2] + if (!token0 || !token1 || !fee) return [PoolState.INVALID, null] + var _c = slot0s[index], + slot0 = _c.result, + slot0Loading = _c.loading, + slot0Valid = _c.valid + var _d = liquidities[index], + liquidity = _d.result, + liquidityLoading = _d.loading, + liquidityValid = _d.valid + if (!slot0Valid || !liquidityValid) return [PoolState.INVALID, null] + if (slot0Loading || liquidityLoading) return [PoolState.LOADING, null] + if (!slot0 || !liquidity) return [PoolState.NOT_EXISTS, null] + if (!slot0.sqrtPriceX96 || slot0.sqrtPriceX96.eq(0)) return [PoolState.NOT_EXISTS, null] + try { + return [PoolState.EXISTS, new Pool$1(token0, token1, fee, slot0.sqrtPriceX96, liquidity[0], slot0.tick)] + } catch (error) { + console.error('Error when constructing the pool', error) + return [PoolState.NOT_EXISTS, null] + } + }) + }, + [liquidities, poolKeys, slot0s, transformed] + ) } -function useSwapState() { - return useAppSelector(function (state) { return state.swap; }); -} -function useSwapActionHandlers() { - var dispatch = useAppDispatch(); - var onCurrencySelection = useCallback(function (field, currency) { - dispatch(selectCurrency({ - field: field, - currencyId: currency.isToken ? currency.address : currency.isNative ? 'ETH' : '', - })); - }, [dispatch]); - var onSwitchTokens = useCallback(function () { - dispatch(switchCurrencies()); - }, [dispatch]); - var onUserInput = useCallback(function (field, typedValue) { - dispatch(typeInput({ field: field, typedValue: typedValue })); - }, [dispatch]); - var onChangeRecipient = useCallback(function (recipient) { - dispatch(setRecipient({ recipient: recipient })); - }, [dispatch]); - return { - onSwitchTokens: onSwitchTokens, - onCurrencySelection: onCurrencySelection, - onUserInput: onUserInput, - onChangeRecipient: onChangeRecipient, - }; -} -var BAD_RECIPIENT_ADDRESSES = { - '0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f': true, - '0xf164fC0Ec4E93095b804a4795bBe1e041497b92a': true, - '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D': true, // v2 router 02 -}; -// from the current swap inputs, compute the best trade and return it. -function useDerivedSwapInfo() { - var _a, _b; - var account = useActiveWeb3React().account; - var _c = useSwapState(), independentField = _c.independentField, typedValue = _c.typedValue, _d = Field.INPUT, inputCurrencyId = _c[_d].currencyId, _e = Field.OUTPUT, outputCurrencyId = _c[_e].currencyId, recipient = _c.recipient; - var inputCurrency = useCurrency(inputCurrencyId); - var outputCurrency = useCurrency(outputCurrencyId); - var recipientLookup = useENS(recipient !== null && recipient !== void 0 ? recipient : undefined); - var to = (_a = (recipient === null ? account : recipientLookup.address)) !== null && _a !== void 0 ? _a : null; - var relevantTokenBalances = useCurrencyBalances(account !== null && account !== void 0 ? account : undefined, useMemo(function () { return [inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : undefined, outputCurrency !== null && outputCurrency !== void 0 ? outputCurrency : undefined]; }, [inputCurrency, outputCurrency])); - var isExactIn = independentField === Field.INPUT; - var parsedAmount = useMemo(function () { var _a; return tryParseCurrencyAmount(typedValue, (_a = (isExactIn ? inputCurrency : outputCurrency)) !== null && _a !== void 0 ? _a : undefined); }, [inputCurrency, isExactIn, outputCurrency, typedValue]); - var trade = useBestTrade(isExactIn ? TradeType.EXACT_INPUT : TradeType.EXACT_OUTPUT, parsedAmount, (_b = (isExactIn ? outputCurrency : inputCurrency)) !== null && _b !== void 0 ? _b : undefined); - var currencyBalances = useMemo(function () { - var _a; - return (_a = {}, - _a[Field.INPUT] = relevantTokenBalances[0], - _a[Field.OUTPUT] = relevantTokenBalances[1], - _a); - }, [relevantTokenBalances]); - var currencies = useMemo(function () { - var _a; - return (_a = {}, - _a[Field.INPUT] = inputCurrency, - _a[Field.OUTPUT] = outputCurrency, - _a); - }, [inputCurrency, outputCurrency]); - // allowed slippage is either auto slippage, or custom user defined slippage if auto slippage disabled - var autoSlippageTolerance = useAutoSlippageTolerance(trade.trade); - var allowedSlippage = useUserSlippageToleranceWithDefault(autoSlippageTolerance); - var inputError = useMemo(function () { - var _a; - var inputError; - if (!account) { - inputError = jsx(Trans, { children: "Connect Wallet" }, void 0); - } - if (!currencies[Field.INPUT] || !currencies[Field.OUTPUT]) { - inputError = inputError !== null && inputError !== void 0 ? inputError : jsx(Trans, { children: "Select a token" }, void 0); - } - if (!parsedAmount) { - inputError = inputError !== null && inputError !== void 0 ? inputError : jsx(Trans, { children: "Enter an amount" }, void 0); - } - var formattedTo = isAddress(to); - if (!to || !formattedTo) { - inputError = inputError !== null && inputError !== void 0 ? inputError : jsx(Trans, { children: "Enter a recipient" }, void 0); - } - else { - if (BAD_RECIPIENT_ADDRESSES[formattedTo]) { - inputError = inputError !== null && inputError !== void 0 ? inputError : jsx(Trans, { children: "Invalid recipient" }, void 0); - } - } - // compare input balance to max input based on version - var _b = __read([currencyBalances[Field.INPUT], (_a = trade.trade) === null || _a === void 0 ? void 0 : _a.maximumAmountIn(allowedSlippage)], 2), balanceIn = _b[0], amountIn = _b[1]; - if (balanceIn && amountIn && balanceIn.lessThan(amountIn)) { - inputError = jsxs(Trans, { children: ["Insufficient ", amountIn.currency.symbol, " balance"] }, void 0); - } - return inputError; - }, [account, allowedSlippage, currencies, currencyBalances, parsedAmount, to, trade.trade]); - return useMemo(function () { return ({ - currencies: currencies, - currencyBalances: currencyBalances, - parsedAmount: parsedAmount, - inputError: inputError, - trade: trade, - allowedSlippage: allowedSlippage, - }); }, [allowedSlippage, currencies, currencyBalances, inputError, parsedAmount, trade]); -} -function parseCurrencyFromURLParameter(urlParam) { - if (typeof urlParam === 'string') { - var valid = isAddress(urlParam); - if (valid) - return valid; - if (urlParam.toUpperCase() === 'ETH') - return 'ETH'; - } - return ''; -} -function parseTokenAmountURLParameter(urlParam) { - return typeof urlParam === 'string' && !isNaN(parseFloat(urlParam)) ? urlParam : ''; -} -function parseIndependentFieldURLParameter(urlParam) { - return typeof urlParam === 'string' && urlParam.toLowerCase() === 'output' ? Field.OUTPUT : Field.INPUT; -} -var ENS_NAME_REGEX = /^[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)?$/; -var ADDRESS_REGEX = /^0x[a-fA-F0-9]{40}$/; -function validatedRecipient(recipient) { - if (typeof recipient !== 'string') - return null; - var address = isAddress(recipient); - if (address) - return address; - if (ENS_NAME_REGEX.test(recipient)) - return recipient; - if (ADDRESS_REGEX.test(recipient)) - return recipient; - return null; -} -function queryParametersToSwapState(parsedQs) { - var _a; - var inputCurrency = parseCurrencyFromURLParameter(parsedQs.inputCurrency); - var outputCurrency = parseCurrencyFromURLParameter(parsedQs.outputCurrency); - if (inputCurrency === '' && outputCurrency === '') { - // default to ETH input - inputCurrency = 'ETH'; - } - else if (inputCurrency === outputCurrency) { - // clear output if identical - outputCurrency = ''; - } - var recipient = validatedRecipient(parsedQs.recipient); - return _a = {}, - _a[Field.INPUT] = { - currencyId: inputCurrency === '' ? null : inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : null, - }, - _a[Field.OUTPUT] = { - currencyId: outputCurrency === '' ? null : outputCurrency !== null && outputCurrency !== void 0 ? outputCurrency : null, - }, - _a.typedValue = parseTokenAmountURLParameter(parsedQs.exactAmount), - _a.independentField = parseIndependentFieldURLParameter(parsedQs.exactField), - _a.recipient = recipient, - _a; -} -// updates the swap state to use the defaults for a given network -function useDefaultsFromURLSearch() { - var chainId = useActiveWeb3React().chainId; - var dispatch = useAppDispatch(); - var parsedQs = useParsedQueryString(); - var _a = __read(useState(), 2), result = _a[0], setResult = _a[1]; - useEffect(function () { - var _a, _b; - if (!chainId) - return; - var parsed = queryParametersToSwapState(parsedQs); - var inputCurrencyId = (_a = parsed[Field.INPUT].currencyId) !== null && _a !== void 0 ? _a : undefined; - var outputCurrencyId = (_b = parsed[Field.OUTPUT].currencyId) !== null && _b !== void 0 ? _b : undefined; - dispatch(replaceSwapState({ - typedValue: parsed.typedValue, - field: parsed.independentField, - inputCurrencyId: inputCurrencyId, - outputCurrencyId: outputCurrencyId, - recipient: parsed.recipient, - })); - setResult({ inputCurrencyId: inputCurrencyId, outputCurrencyId: outputCurrencyId }); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [dispatch, chainId]); - return result; +/** + * Returns all the existing pools that should be considered for swapping between an input currency and an output currency + * @param currencyIn the input currency + * @param currencyOut the output currency + */ +function useV3SwapPools(currencyIn, currencyOut) { + var chainId = useActiveWeb3React().chainId + var allCurrencyCombinations = useAllCurrencyCombinations(currencyIn, currencyOut) + var allCurrencyCombinationsWithAllFees = useMemo( + function () { + return allCurrencyCombinations.reduce(function (list, _a) { + var _b = __read(_a, 2), + tokenA = _b[0], + tokenB = _b[1] + return chainId === SupportedChainId.MAINNET + ? list.concat([ + [tokenA, tokenB, FeeAmount.LOW], + [tokenA, tokenB, FeeAmount.MEDIUM], + [tokenA, tokenB, FeeAmount.HIGH], + ]) + : list.concat([ + [tokenA, tokenB, FeeAmount.LOWEST], + [tokenA, tokenB, FeeAmount.LOW], + [tokenA, tokenB, FeeAmount.MEDIUM], + [tokenA, tokenB, FeeAmount.HIGH], + ]) + }, []) + }, + [allCurrencyCombinations, chainId] + ) + var pools = usePools(allCurrencyCombinationsWithAllFees) + return useMemo( + function () { + return { + pools: pools + .filter(function (tuple) { + return tuple[0] === PoolState.EXISTS && tuple[1] !== null + }) + .map(function (_a) { + var _b = __read(_a, 2), + pool = _b[1] + return pool + }), + loading: pools.some(function (_a) { + var _b = __read(_a, 1), + state = _b[0] + return state === PoolState.LOADING + }), + } + }, + [pools] + ) +} + +/** + * Returns true if poolA is equivalent to poolB + * @param poolA one of the two pools + * @param poolB the other pool + */ +function poolEquals(poolA, poolB) { + return ( + poolA === poolB || + (poolA.token0.equals(poolB.token0) && poolA.token1.equals(poolB.token1) && poolA.fee === poolB.fee) + ) +} +function computeAllRoutes(currencyIn, currencyOut, pools, chainId, currentPath, allPaths, startCurrencyIn, maxHops) { + var e_1, _a + if (currentPath === void 0) { + currentPath = [] + } + if (allPaths === void 0) { + allPaths = [] + } + if (startCurrencyIn === void 0) { + startCurrencyIn = currencyIn + } + if (maxHops === void 0) { + maxHops = 2 + } + var tokenIn = currencyIn === null || currencyIn === void 0 ? void 0 : currencyIn.wrapped + var tokenOut = currencyOut === null || currencyOut === void 0 ? void 0 : currencyOut.wrapped + if (!tokenIn || !tokenOut) throw new Error('Missing tokenIn/tokenOut') + var _loop_1 = function (pool) { + if ( + !pool.involvesToken(tokenIn) || + currentPath.find(function (pathPool) { + return poolEquals(pool, pathPool) + }) + ) + return 'continue' + var outputToken = pool.token0.equals(tokenIn) ? pool.token1 : pool.token0 + if (outputToken.equals(tokenOut)) { + allPaths.push( + new Route$1( + __spreadArray(__spreadArray([], __read(currentPath), false), [pool], false), + startCurrencyIn, + currencyOut + ) + ) + } else if (maxHops > 1) { + computeAllRoutes( + outputToken, + currencyOut, + pools, + chainId, + __spreadArray(__spreadArray([], __read(currentPath), false), [pool], false), + allPaths, + startCurrencyIn, + maxHops - 1 + ) + } + } + try { + for (var pools_1 = __values(pools), pools_1_1 = pools_1.next(); !pools_1_1.done; pools_1_1 = pools_1.next()) { + var pool = pools_1_1.value + _loop_1(pool) + } + } catch (e_1_1) { + e_1 = { error: e_1_1 } + } finally { + try { + if (pools_1_1 && !pools_1_1.done && (_a = pools_1.return)) _a.call(pools_1) + } finally { + if (e_1) throw e_1.error + } + } + return allPaths +} +/** + * Returns all the routes from an input currency to an output currency + * @param currencyIn the input currency + * @param currencyOut the output currency + */ +function useAllV3Routes(currencyIn, currencyOut) { + var chainId = useActiveWeb3React().chainId + var _a = useV3SwapPools(currencyIn, currencyOut), + pools = _a.pools, + poolsLoading = _a.loading + return useMemo( + function () { + if (poolsLoading || !chainId || !pools || !currencyIn || !currencyOut) return { loading: true, routes: [] } + var routes = computeAllRoutes(currencyIn, currencyOut, pools, chainId, [], [], currencyIn, 2) + return { loading: false, routes } + }, + [chainId, currencyIn, currencyOut, pools, poolsLoading] + ) } -var initialState$2 = queryParametersToSwapState(parsedQueryString()); -var swap = createReducer(initialState$2, function (builder) { - return builder - .addCase(replaceSwapState, function (state, _a) { - var _b; - var _c = _a.payload, typedValue = _c.typedValue, recipient = _c.recipient, field = _c.field, inputCurrencyId = _c.inputCurrencyId, outputCurrencyId = _c.outputCurrencyId; - return _b = {}, - _b[Field.INPUT] = { - currencyId: inputCurrencyId !== null && inputCurrencyId !== void 0 ? inputCurrencyId : null, - }, - _b[Field.OUTPUT] = { - currencyId: outputCurrencyId !== null && outputCurrencyId !== void 0 ? outputCurrencyId : null, - }, - _b.independentField = field, - _b.typedValue = typedValue, - _b.recipient = recipient, - _b; - }) - .addCase(selectCurrency, function (state, _a) { - var _b, _c; - var _d = _a.payload, currencyId = _d.currencyId, field = _d.field; - var otherField = field === Field.INPUT ? Field.OUTPUT : Field.INPUT; - if (currencyId === state[otherField].currencyId) { - // the case where we have to swap the order - return __assign(__assign({}, state), (_b = { independentField: state.independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT }, _b[field] = { currencyId: currencyId }, _b[otherField] = { currencyId: state[field].currencyId }, _b)); - } - else { - // the normal case - return __assign(__assign({}, state), (_c = {}, _c[field] = { currencyId: currencyId }, _c)); - } - }) - .addCase(switchCurrencies, function (state) { - var _a; - return __assign(__assign({}, state), (_a = { independentField: state.independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT }, _a[Field.INPUT] = { currencyId: state[Field.OUTPUT].currencyId }, _a[Field.OUTPUT] = { currencyId: state[Field.INPUT].currencyId }, _a)); - }) - .addCase(typeInput, function (state, _a) { - var _b = _a.payload, field = _b.field, typedValue = _b.typedValue; - return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); - }) - .addCase(setRecipient, function (state, _a) { - var recipient = _a.payload.recipient; - state.recipient = recipient; - }); -}); +var _a$7 +var QUOTE_GAS_OVERRIDES = + ((_a$7 = {}), + (_a$7[SupportedChainId.ARBITRUM_ONE] = 25000000), + (_a$7[SupportedChainId.ARBITRUM_RINKEBY] = 25000000), + _a$7) +var DEFAULT_GAS_QUOTE = 2000000 +/** + * Returns the best v3 trade for a desired swap + * @param tradeType whether the swap is an exact in/out + * @param amountSpecified the exact amount to swap in/out + * @param otherCurrency the desired output/payment currency + */ +function useClientSideV3Trade(tradeType, amountSpecified, otherCurrency) { + var _a + var _b = __read( + useMemo( + function () { + return tradeType === TradeType.EXACT_INPUT + ? [ + amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, + otherCurrency, + ] + : [ + otherCurrency, + amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, + ] + }, + [tradeType, amountSpecified, otherCurrency] + ), + 2 + ), + currencyIn = _b[0], + currencyOut = _b[1] + var _c = useAllV3Routes(currencyIn, currencyOut), + routes = _c.routes, + routesLoading = _c.loading + var quoter = useV3Quoter() + var chainId = useActiveWeb3React().chainId + var quotesResults = useSingleContractWithCallData( + quoter, + amountSpecified + ? routes.map(function (route) { + return SwapQuoter.quoteCallParameters(route, amountSpecified, tradeType).calldata + }) + : [], + { + gasRequired: chainId + ? (_a = QUOTE_GAS_OVERRIDES[chainId]) !== null && _a !== void 0 + ? _a + : DEFAULT_GAS_QUOTE + : undefined, + } + ) + return useMemo( + function () { + if ( + !amountSpecified || + !currencyIn || + !currencyOut || + quotesResults.some(function (_a) { + var valid = _a.valid + return !valid + }) || + // skip when tokens are the same + (tradeType === TradeType.EXACT_INPUT + ? amountSpecified.currency.equals(currencyOut) + : amountSpecified.currency.equals(currencyIn)) + ) { + return { + state: TradeState.INVALID, + trade: undefined, + } + } + if ( + routesLoading || + quotesResults.some(function (_a) { + var loading = _a.loading + return loading + }) + ) { + return { + state: TradeState.LOADING, + trade: undefined, + } + } + var _a = quotesResults.reduce( + function (currentBest, _a, i) { + var result = _a.result + if (!result) return currentBest + // overwrite the current best if it's not defined or if this route is better + if (tradeType === TradeType.EXACT_INPUT) { + var amountOut_1 = CurrencyAmount.fromRawAmount(currencyOut, result.amountOut.toString()) + if ( + currentBest.amountOut === null || + JSBI.lessThan(currentBest.amountOut.quotient, amountOut_1.quotient) + ) { + return { + bestRoute: routes[i], + amountIn: amountSpecified, + amountOut: amountOut_1, + } + } + } else { + var amountIn_1 = CurrencyAmount.fromRawAmount(currencyIn, result.amountIn.toString()) + if ( + currentBest.amountIn === null || + JSBI.greaterThan(currentBest.amountIn.quotient, amountIn_1.quotient) + ) { + return { + bestRoute: routes[i], + amountIn: amountIn_1, + amountOut: amountSpecified, + } + } + } + return currentBest + }, + { + bestRoute: null, + amountIn: null, + amountOut: null, + } + ), + bestRoute = _a.bestRoute, + amountIn = _a.amountIn, + amountOut = _a.amountOut + if (!bestRoute || !amountIn || !amountOut) { + return { + state: TradeState.NO_ROUTE_FOUND, + trade: undefined, + } + } + return { + state: TradeState.VALID, + trade: new InterfaceTrade({ + v2Routes: [], + v3Routes: [ + { + routev3: bestRoute, + inputAmount: amountIn, + outputAmount: amountOut, + }, + ], + tradeType, + }), + } + }, + [amountSpecified, currencyIn, currencyOut, quotesResults, routes, routesLoading, tradeType] + ) +} -var now = function () { return new Date().getTime(); }; -var initialState$1 = {}; -var transactions = createReducer(initialState$1, function (builder) { - return builder - .addCase(updateVersion, function (transactions) { - // in case there are any transactions in the store with the old format, remove them - Object.keys(transactions).forEach(function (chainId) { - var chainTransactions = transactions[chainId]; - Object.keys(chainTransactions).forEach(function (hash) { - if (!('info' in chainTransactions[hash])) { - // clear old transactions that don't have the right format - delete chainTransactions[hash]; - } - }); - }); - }) - .addCase(addTransaction, function (transactions, _a) { - var _b, _c; - var _d = _a.payload, chainId = _d.chainId, from = _d.from, hash = _d.hash, info = _d.info; - if ((_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash]) { - throw Error('Attempted to add existing transaction.'); - } - var txs = (_c = transactions[chainId]) !== null && _c !== void 0 ? _c : {}; - txs[hash] = { hash: hash, info: info, from: from, addedTime: now() }; - transactions[chainId] = txs; - }) - .addCase(clearAllTransactions, function (transactions, _a) { - var chainId = _a.payload.chainId; - if (!transactions[chainId]) - return; - transactions[chainId] = {}; - }) - .addCase(checkedTransaction, function (transactions, _a) { - var _b; - var _c = _a.payload, chainId = _c.chainId, hash = _c.hash, blockNumber = _c.blockNumber; - var tx = (_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash]; - if (!tx) { - return; - } - if (!tx.lastCheckedBlockNumber) { - tx.lastCheckedBlockNumber = blockNumber; - } - else { - tx.lastCheckedBlockNumber = Math.max(blockNumber, tx.lastCheckedBlockNumber); - } - }) - .addCase(finalizeTransaction, function (transactions, _a) { - var _b; - var _c = _a.payload, hash = _c.hash, chainId = _c.chainId, receipt = _c.receipt; - var tx = (_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash]; - if (!tx) { - return; - } - tx.receipt = receipt; - tx.confirmedTime = now(); - }); -}); +var _a$6 +// Stablecoin amounts used when calculating spot price for a given currency. +// The amount is large enough to filter low liquidity pairs. +var STABLECOIN_AMOUNT_OUT = + ((_a$6 = {}), + (_a$6[SupportedChainId.MAINNET] = CurrencyAmount.fromRawAmount(USDC, 100000000000)), + (_a$6[SupportedChainId.ARBITRUM_ONE] = CurrencyAmount.fromRawAmount(USDC_ARBITRUM, 10000000000)), + (_a$6[SupportedChainId.OPTIMISM] = CurrencyAmount.fromRawAmount(DAI_OPTIMISM, 1e22)), + (_a$6[SupportedChainId.POLYGON] = CurrencyAmount.fromRawAmount(USDC_POLYGON, 10000000000)), + _a$6) +/** + * Returns the price in USDC of the input currency + * @param currency currency to compute the USDC price of + */ +function useUSDCPrice(currency) { + var chainId = currency === null || currency === void 0 ? void 0 : currency.chainId + var amountOut = chainId ? STABLECOIN_AMOUNT_OUT[chainId] : undefined + var stablecoin = amountOut === null || amountOut === void 0 ? void 0 : amountOut.currency + // TODO(#2808): remove dependency on useBestV2Trade + var v2USDCTrade = useBestV2Trade(TradeType.EXACT_OUTPUT, amountOut, currency, { + maxHops: 2, + }) + var v3USDCTrade = useClientSideV3Trade(TradeType.EXACT_OUTPUT, amountOut, currency) + return useMemo( + function () { + if (!currency || !stablecoin) { + return undefined + } + // handle usdc + if (currency === null || currency === void 0 ? void 0 : currency.wrapped.equals(stablecoin)) { + return new Price(stablecoin, stablecoin, '1', '1') + } + // use v2 price if available, v3 as fallback + if (v2USDCTrade) { + var _a = v2USDCTrade.route.midPrice, + numerator = _a.numerator, + denominator = _a.denominator + return new Price(currency, stablecoin, denominator, numerator) + } else if (v3USDCTrade.trade) { + var _b = v3USDCTrade.trade.routes[0].midPrice, + numerator = _b.numerator, + denominator = _b.denominator + return new Price(currency, stablecoin, denominator, numerator) + } + return undefined + }, + [currency, stablecoin, v2USDCTrade, v3USDCTrade.trade] + ) +} +function useUSDCValue(currencyAmount) { + var price = useUSDCPrice(currencyAmount === null || currencyAmount === void 0 ? void 0 : currencyAmount.currency) + return useMemo( + function () { + if (!price || !currencyAmount) return null + try { + return price.quote(currencyAmount) + } catch (error) { + return null + } + }, + [currencyAmount, price] + ) +} +/** + * + * @param fiatValue string representation of a USD amount + * @returns CurrencyAmount where currency is stablecoin on active chain + */ +function useStablecoinAmountFromFiatValue(fiatValue) { + var _a + var chainId = useActiveWeb3React().chainId + var stablecoin = chainId + ? (_a = STABLECOIN_AMOUNT_OUT[chainId]) === null || _a === void 0 + ? void 0 + : _a.currency + : undefined + if (fiatValue === null || fiatValue === undefined || !chainId || !stablecoin) { + return undefined + } + // trim for decimal precision when parsing + var parsedForDecimals = parseFloat(fiatValue).toFixed(stablecoin.decimals).toString() + try { + // parse USD string into CurrencyAmount based on stablecoin decimals + return tryParseCurrencyAmount(parsedForDecimals, stablecoin) + } catch (error) { + return undefined + } +} -var currentTimestamp = function () { return new Date().getTime(); }; -function pairKey(token0Address, token1Address) { - return token0Address + ";" + token1Address; -} -var initialState = { - matchesDarkMode: false, - userDarkMode: null, - userExpertMode: false, - userLocale: null, - userClientSideRouter: false, - userHideClosedPositions: false, - userSlippageTolerance: 'auto', - userSlippageToleranceHasBeenMigratedToAuto: true, - userDeadline: DEFAULT_DEADLINE_FROM_NOW, - tokens: {}, - pairs: {}, - timestamp: currentTimestamp(), - URLWarningVisible: true, - showSurveyPopup: undefined, -}; -var user = createReducer(initialState, function (builder) { - return builder - .addCase(updateVersion, function (state) { - // slippage isnt being tracked in local storage, reset to default - // noinspection SuspiciousTypeOfGuard - if (typeof state.userSlippageTolerance !== 'number' || - !Number.isInteger(state.userSlippageTolerance) || - state.userSlippageTolerance < 0 || - state.userSlippageTolerance > 5000) { - state.userSlippageTolerance = 'auto'; - } - else { - if (!state.userSlippageToleranceHasBeenMigratedToAuto && - [10, 50, 100].indexOf(state.userSlippageTolerance) !== -1) { - state.userSlippageTolerance = 'auto'; - state.userSlippageToleranceHasBeenMigratedToAuto = true; - } - } - // deadline isnt being tracked in local storage, reset to default - // noinspection SuspiciousTypeOfGuard - if (typeof state.userDeadline !== 'number' || - !Number.isInteger(state.userDeadline) || - state.userDeadline < 60 || - state.userDeadline > 180 * 60) { - state.userDeadline = DEFAULT_DEADLINE_FROM_NOW; - } - state.lastUpdateVersionTimestamp = currentTimestamp(); - }) - .addCase(updateUserDarkMode, function (state, action) { - state.userDarkMode = action.payload.userDarkMode; - state.timestamp = currentTimestamp(); - }) - .addCase(updateMatchesDarkMode, function (state, action) { - state.matchesDarkMode = action.payload.matchesDarkMode; - state.timestamp = currentTimestamp(); - }) - .addCase(updateUserExpertMode, function (state, action) { - state.userExpertMode = action.payload.userExpertMode; - state.timestamp = currentTimestamp(); - }) - .addCase(updateUserLocale, function (state, action) { - state.userLocale = action.payload.userLocale; - state.timestamp = currentTimestamp(); - }) - .addCase(updateUserSlippageTolerance, function (state, action) { - state.userSlippageTolerance = action.payload.userSlippageTolerance; - state.timestamp = currentTimestamp(); - }) - .addCase(updateUserDeadline, function (state, action) { - state.userDeadline = action.payload.userDeadline; - state.timestamp = currentTimestamp(); - }) - .addCase(updateUserClientSideRouter, function (state, action) { - state.userClientSideRouter = action.payload.userClientSideRouter; - }) - .addCase(updateHideClosedPositions, function (state, action) { - state.userHideClosedPositions = action.payload.userHideClosedPositions; - }) - .addCase(updateShowSurveyPopup, function (state, action) { - state.showSurveyPopup = action.payload.showSurveyPopup; - }) - .addCase(addSerializedToken, function (state, _a) { - var serializedToken = _a.payload.serializedToken; - if (!state.tokens) { - state.tokens = {}; - } - state.tokens[serializedToken.chainId] = state.tokens[serializedToken.chainId] || {}; - state.tokens[serializedToken.chainId][serializedToken.address] = serializedToken; - state.timestamp = currentTimestamp(); - }) - .addCase(removeSerializedToken, function (state, _a) { - var _b = _a.payload, address = _b.address, chainId = _b.chainId; - if (!state.tokens) { - state.tokens = {}; - } - state.tokens[chainId] = state.tokens[chainId] || {}; - delete state.tokens[chainId][address]; - state.timestamp = currentTimestamp(); - }) - .addCase(addSerializedPair, function (state, _a) { - var serializedPair = _a.payload.serializedPair; - if (serializedPair.token0.chainId === serializedPair.token1.chainId && - serializedPair.token0.address !== serializedPair.token1.address) { - var chainId = serializedPair.token0.chainId; - state.pairs[chainId] = state.pairs[chainId] || {}; - state.pairs[chainId][pairKey(serializedPair.token0.address, serializedPair.token1.address)] = serializedPair; - } - state.timestamp = currentTimestamp(); - }) - .addCase(removeSerializedPair, function (state, _a) { - var _b = _a.payload, chainId = _b.chainId, tokenAAddress = _b.tokenAAddress, tokenBAddress = _b.tokenBAddress; - if (state.pairs[chainId]) { - // just delete both keys if either exists - delete state.pairs[chainId][pairKey(tokenAAddress, tokenBAddress)]; - delete state.pairs[chainId][pairKey(tokenBAddress, tokenAAddress)]; - } - state.timestamp = currentTimestamp(); - }); -}); +var V3_SWAP_DEFAULT_SLIPPAGE = new Percent(50, 10000) // .50% +var ONE_TENTHS_PERCENT = new Percent(10, 10000) // .10% +/** + * Return a guess of the gas cost used in computing slippage tolerance for a given trade + * @param trade the trade for which to _guess_ the amount of gas it would cost to execute + */ +function guesstimateGas(trade) { + if (!!trade) { + return ( + 100000 + + trade.swaps.reduce(function (memo, swap) { + return swap.route.pools.length + memo + }, 0) * + 30000 + ) + } + return undefined +} +var MIN_AUTO_SLIPPAGE_TOLERANCE = new Percent(5, 1000) // 0.5% +var MAX_AUTO_SLIPPAGE_TOLERANCE = new Percent(25, 100) // 25% +/** + * Returns slippage tolerance based on values from current trade, gas estimates from api, and active network. + */ +function useAutoSlippageTolerance(trade) { + var chainId = useActiveWeb3React().chainId + var onL2 = chainId && L2_CHAIN_IDS.includes(chainId) + var outputDollarValue = useUSDCValue(trade === null || trade === void 0 ? void 0 : trade.outputAmount) + var nativeGasPrice = useGasPrice() + var gasEstimate = guesstimateGas(trade) + var nativeCurrency = useNativeCurrency() + var nativeCurrencyPrice = useUSDCPrice( + nativeCurrency !== null && nativeCurrency !== void 0 ? nativeCurrency : undefined + ) + return useMemo( + function () { + if (!trade || onL2) return ONE_TENTHS_PERCENT + var nativeGasCost = + nativeGasPrice && typeof gasEstimate === 'number' + ? JSBI.multiply(nativeGasPrice, JSBI.BigInt(gasEstimate)) + : undefined + var dollarGasCost = + nativeCurrency && nativeGasCost && nativeCurrencyPrice + ? nativeCurrencyPrice.quote(CurrencyAmount.fromRawAmount(nativeCurrency, nativeGasCost)) + : undefined + // if valid estimate from api and using api trade, use gas estimate from api + // NOTE - dont use gas estimate for L2s yet - need to verify accuracy + // if not, use local heuristic + var dollarCostToUse = + chainId && + SUPPORTED_GAS_ESTIMATE_CHAIN_IDS.includes(chainId) && + (trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) + ? trade.gasUseEstimateUSD + : dollarGasCost + if (outputDollarValue && dollarCostToUse) { + // the rationale is that a user will not want their trade to fail for a loss due to slippage that is less than + // the cost of the gas of the failed transaction + var fraction = dollarCostToUse.asFraction.divide(outputDollarValue.asFraction) + var result = new Percent(fraction.numerator, fraction.denominator) + if (result.greaterThan(MAX_AUTO_SLIPPAGE_TOLERANCE)) return MAX_AUTO_SLIPPAGE_TOLERANCE + if (result.lessThan(MIN_AUTO_SLIPPAGE_TOLERANCE)) return MIN_AUTO_SLIPPAGE_TOLERANCE + return result + } + return V3_SWAP_DEFAULT_SLIPPAGE + }, + [trade, onL2, nativeGasPrice, gasEstimate, nativeCurrency, nativeCurrencyPrice, chainId, outputDollarValue] + ) +} -var _a$5; -var PERSISTED_KEYS = ['user', 'transactions', 'lists']; -var store = configureStore({ - reducer: (_a$5 = { - application: application, - user: user, - transactions: transactions, - swap: swap, - mint: mint, - mintV3: mintV3, - burn: burn, - burnV3: burnV3, - multicall: multicall.reducer, - lists: lists, - logs: logs - }, - _a$5[api$1.reducerPath] = api$1.reducer, - _a$5[routingApi.reducerPath] = routingApi.reducer, - _a$5), - middleware: function (getDefaultMiddleware) { - return getDefaultMiddleware({ thunk: true }) - .concat(api$1.middleware) - .concat(routingApi.middleware) - .concat(save({ states: PERSISTED_KEYS, debounce: 1000 })); - }, - preloadedState: load({ states: PERSISTED_KEYS, disableWarnings: process.env.NODE_ENV === 'test' }), -}); -store.dispatch(updateVersion()); -setupListeners(store.dispatch); +/** + * Transforms a Routing API quote into an array of routes that can be used to create + * a `Trade`. + */ +function computeRoutes(currencyIn, currencyOut, tradeType, quoteResult) { + if (!quoteResult || !quoteResult.route || !currencyIn || !currencyOut) return undefined + if (quoteResult.route.length === 0) return [] + var parsedTokenIn = parseToken(quoteResult.route[0][0].tokenIn) + var parsedTokenOut = parseToken(quoteResult.route[0][quoteResult.route[0].length - 1].tokenOut) + if (parsedTokenIn.address !== currencyIn.wrapped.address) return undefined + if (parsedTokenOut.address !== currencyOut.wrapped.address) return undefined + var parsedCurrencyIn = currencyIn.isNative ? nativeOnChain(currencyIn.chainId) : parsedTokenIn + var parsedCurrencyOut = currencyOut.isNative ? nativeOnChain(currencyOut.chainId) : parsedTokenOut + try { + return quoteResult.route.map(function (route) { + if (route.length === 0) { + throw new Error('Expected route to have at least one pair or pool') + } + var rawAmountIn = route[0].amountIn + var rawAmountOut = route[route.length - 1].amountOut + if (!rawAmountIn || !rawAmountOut) { + throw new Error('Expected both amountIn and amountOut to be present') + } + return { + routev3: isV3Route(route) ? new Route$1(route.map(parsePool), parsedCurrencyIn, parsedCurrencyOut) : null, + routev2: !isV3Route(route) ? new Route$2(route.map(parsePair), parsedCurrencyIn, parsedCurrencyOut) : null, + inputAmount: CurrencyAmount.fromRawAmount(parsedCurrencyIn, rawAmountIn), + outputAmount: CurrencyAmount.fromRawAmount(parsedCurrencyOut, rawAmountOut), + } + }) + } catch (e) { + // `Route` constructor may throw if inputs/outputs are temporarily out of sync + // (RTK-Query always returns the latest data which may not be the right inputs/outputs) + // This is not fatal and will fix itself in future render cycles + console.error(e) + return undefined + } +} +function transformRoutesToTrade(route, tradeType, gasUseEstimateUSD) { + var _a, _b + return new InterfaceTrade({ + v2Routes: + (_a = + route === null || route === void 0 + ? void 0 + : route + .filter(function (r) { + return r.routev2 !== null + }) + .map(function (_a) { + var routev2 = _a.routev2, + inputAmount = _a.inputAmount, + outputAmount = _a.outputAmount + return { routev2, inputAmount, outputAmount } + })) !== null && _a !== void 0 + ? _a + : [], + v3Routes: + (_b = + route === null || route === void 0 + ? void 0 + : route + .filter(function (r) { + return r.routev3 !== null + }) + .map(function (_a) { + var routev3 = _a.routev3, + inputAmount = _a.inputAmount, + outputAmount = _a.outputAmount + return { routev3, inputAmount, outputAmount } + })) !== null && _b !== void 0 + ? _b + : [], + tradeType, + gasUseEstimateUSD, + }) +} +var parseToken = function (_a) { + var address = _a.address, + chainId = _a.chainId, + decimals = _a.decimals, + symbol = _a.symbol + return new Token(chainId, address, parseInt(decimals.toString()), symbol) +} +var parsePool = function (_a) { + var fee = _a.fee, + sqrtRatioX96 = _a.sqrtRatioX96, + liquidity = _a.liquidity, + tickCurrent = _a.tickCurrent, + tokenIn = _a.tokenIn, + tokenOut = _a.tokenOut + return new Pool$1( + parseToken(tokenIn), + parseToken(tokenOut), + parseInt(fee), + sqrtRatioX96, + liquidity, + parseInt(tickCurrent) + ) +} +var parsePair = function (_a) { + var reserve0 = _a.reserve0, + reserve1 = _a.reserve1 + return new Pair( + CurrencyAmount.fromRawAmount(parseToken(reserve0.token), reserve0.quotient), + CurrencyAmount.fromRawAmount(parseToken(reserve1.token), reserve1.quotient) + ) +} +function isV3Route(route) { + return route[0].type === 'v3-pool' +} -var FallbackWrapper = styled.div(templateObject_1$19 || (templateObject_1$19 = __makeTemplateObject(["\n display: flex;\n flex-direction: column;\n width: 100%;\n align-items: center;\n z-index: 1;\n"], ["\n display: flex;\n flex-direction: column;\n width: 100%;\n align-items: center;\n z-index: 1;\n"]))); -var BodyWrapper$2 = styled.div(templateObject_2$R || (templateObject_2$R = __makeTemplateObject(["\n padding: 1rem;\n width: 100%;\n white-space: ;\n"], ["\n padding: 1rem;\n width: 100%;\n white-space: ;\n"]))); -var CodeBlockWrapper = styled.div(templateObject_3$J || (templateObject_3$J = __makeTemplateObject(["\n background: ", ";\n overflow: auto;\n white-space: pre;\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 border-radius: 24px;\n padding: 18px 24px;\n color: ", ";\n"], ["\n background: ", ";\n overflow: auto;\n white-space: pre;\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 border-radius: 24px;\n padding: 18px 24px;\n color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg0; -}, function (_a) { - var theme = _a.theme; - return theme.text1; -}); -var LinkWrapper = styled.div(templateObject_4$y || (templateObject_4$y = __makeTemplateObject(["\n color: ", ";\n padding: 6px 24px;\n"], ["\n color: ", ";\n padding: 6px 24px;\n"])), function (_a) { - var theme = _a.theme; - return theme.blue1; -}); -var SomethingWentWrongWrapper = styled.div(templateObject_5$q || (templateObject_5$q = __makeTemplateObject(["\n padding: 6px 24px;\n"], ["\n padding: 6px 24px;\n"]))); -var IS_UNISWAP = window.location.hostname === 'app.uniswap.org'; -var ErrorBoundary = /** @class */ (function (_super) { - __extends(ErrorBoundary, _super); - function ErrorBoundary(props) { - var _this = _super.call(this, props) || this; - _this.state = { error: null }; - return _this; - } - ErrorBoundary.getDerivedStateFromError = function (error) { - return { error: error }; - }; - ErrorBoundary.prototype.componentDidCatch = function (error, errorInfo) { - ReactGA.exception(__assign(__assign(__assign({}, error), errorInfo), { fatal: true })); - }; - ErrorBoundary.prototype.render = function () { - var error = this.state.error; - if (error !== null) { - var encodedBody = encodeURIComponent(issueBody(error)); - return (jsx(FallbackWrapper, { children: jsx(BodyWrapper$2, { children: jsxs(AutoColumn, __assign({ gap: 'md' }, { children: [jsx(SomethingWentWrongWrapper, { children: jsx(ThemedText.Label, __assign({ fontSize: 24, fontWeight: 600 }, { children: jsx(Trans, { children: "Something went wrong" }, void 0) }), void 0) }, void 0), jsx(CodeBlockWrapper, { children: jsx("code", { children: jsx(ThemedText.Main, __assign({ fontSize: 10 }, { children: error.stack }), void 0) }, void 0) }, void 0), IS_UNISWAP ? (jsxs(AutoRow, { children: [jsx(LinkWrapper, { children: jsx(ExternalLink, __assign({ id: "create-github-issue-link", href: "https://github.com/Uniswap/uniswap-interface/issues/new?assignees=&labels=bug&body=" + encodedBody + "&title=" + encodeURIComponent("Crash report: `" + error.name + (error.message && ": " + error.message) + "`"), target: "_blank" }, { children: jsxs(ThemedText.Link, __assign({ fontSize: 16 }, { children: [jsx(Trans, { children: "Create an issue on GitHub" }, void 0), jsx("span", { children: "\u2197" }, void 0)] }), void 0) }), void 0) }, void 0), jsx(LinkWrapper, { children: jsx(ExternalLink, __assign({ id: "get-support-on-discord", href: "https://discord.gg/FCfyBSbCU5", target: "_blank" }, { children: jsxs(ThemedText.Link, __assign({ fontSize: 16 }, { children: [jsx(Trans, { children: "Get support on Discord" }, void 0), jsx("span", { children: "\u2197" }, void 0)] }), void 0) }), void 0) }, void 0)] }, void 0)) : null] }), void 0) }, void 0) }, void 0)); - } - return this.props.children; - }; - return ErrorBoundary; -}(React__default.Component)); -function getRelevantState() { - var path = window.location.hash; - if (!path.startsWith('#/')) { - return null; - } - var pieces = path.substring(2).split(/[/\\?]/); - switch (pieces[0]) { - case 'swap': - return 'swap'; - case 'add': - if (pieces[1] === 'v2') - return 'mint'; - else - return 'mintV3'; - case 'remove': - if (pieces[1] === 'v2') - return 'burn'; - else - return 'burnV3'; - } - return null; -} -function issueBody(error) { - var relevantState = getRelevantState(); - var deviceData = userAgent; - return "## URL\n \n" + window.location.href + "\n\n" + (relevantState - ? "## `" + relevantState + "` state\n \n```json\n" + JSON.stringify(store.getState()[relevantState], null, 2) + "\n```\n" - : '') + "\n" + (error.name && - "## Error\n\n```\n" + error.name + (error.message && ": " + error.message) + "\n```\n") + "\n" + (error.stack && - "## Stacktrace\n\n```\n" + error.stack + "\n```\n") + "\n" + (deviceData && - "## Device data\n\n```json\n" + JSON.stringify(deviceData, null, 2) + "\n```\n") + "\n"; -} -var templateObject_1$19, templateObject_2$R, templateObject_3$J, templateObject_4$y, templateObject_5$q; +function useFreshData(data, dataBlockNumber, maxBlockAge) { + if (maxBlockAge === void 0) { + maxBlockAge = 10 + } + var localBlockNumber = useBlockNumber() + if (!localBlockNumber) return undefined + if (localBlockNumber - dataBlockNumber > maxBlockAge) { + return undefined + } + return data +} +/** + * Returns query arguments for the Routing API query or undefined if the + * query should be skipped. + */ +function useRoutingAPIArguments(_a) { + var tokenIn = _a.tokenIn, + tokenOut = _a.tokenOut, + amount = _a.amount, + tradeType = _a.tradeType + var _b = __read(useClientSideRouter(), 1), + clientSideRouter = _b[0] + return useMemo( + function () { + return !tokenIn || !tokenOut || !amount || tokenIn.equals(tokenOut) + ? undefined + : { + amount: amount.quotient.toString(), + tokenInAddress: tokenIn.wrapped.address, + tokenInChainId: tokenIn.wrapped.chainId, + tokenInDecimals: tokenIn.wrapped.decimals, + tokenInSymbol: tokenIn.wrapped.symbol, + tokenOutAddress: tokenOut.wrapped.address, + tokenOutChainId: tokenOut.wrapped.chainId, + tokenOutDecimals: tokenOut.wrapped.decimals, + tokenOutSymbol: tokenOut.wrapped.symbol, + useClientSideRouter: clientSideRouter, + type: tradeType === TradeType.EXACT_INPUT ? 'exactIn' : 'exactOut', + } + }, + [amount, clientSideRouter, tokenIn, tokenOut, tradeType] + ) +} +/** + * Returns the best trade by invoking the routing api or the smart order router on the client + * @param tradeType whether the swap is an exact in/out + * @param amountSpecified the exact amount to swap in/out + * @param otherCurrency the desired output/payment currency + */ +function useRoutingAPITrade(tradeType, amountSpecified, otherCurrency) { + var _a + var _b = __read( + useMemo( + function () { + return tradeType === TradeType.EXACT_INPUT + ? [ + amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, + otherCurrency, + ] + : [ + otherCurrency, + amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, + ] + }, + [amountSpecified, otherCurrency, tradeType] + ), + 2 + ), + currencyIn = _b[0], + currencyOut = _b[1] + var queryArgs = useRoutingAPIArguments({ + tokenIn: currencyIn, + tokenOut: currencyOut, + amount: amountSpecified, + tradeType, + }) + var _c = useGetQuoteQuery(queryArgs !== null && queryArgs !== void 0 ? queryArgs : skipToken, { + pollingInterval: ms(templateObject_1$1a || (templateObject_1$1a = __makeTemplateObject(['15s'], ['15s']))), + refetchOnFocus: true, + }), + isLoading = _c.isLoading, + isError = _c.isError, + data = _c.data + var quoteResult = useFreshData(data, Number(data === null || data === void 0 ? void 0 : data.blockNumber) || 0) + var route = useMemo( + function () { + return computeRoutes(currencyIn, currencyOut, tradeType, quoteResult) + }, + [currencyIn, currencyOut, quoteResult, tradeType] + ) + // get USD gas cost of trade in active chains stablecoin amount + var gasUseEstimateUSD = + (_a = useStablecoinAmountFromFiatValue( + quoteResult === null || quoteResult === void 0 ? void 0 : quoteResult.gasUseEstimateUSD + )) !== null && _a !== void 0 + ? _a + : null + return useMemo( + function () { + if (!currencyIn || !currencyOut) { + return { + state: TradeState.INVALID, + trade: undefined, + } + } + if (isLoading && !quoteResult) { + // only on first hook render + return { + state: TradeState.LOADING, + trade: undefined, + } + } + var otherAmount = + tradeType === TradeType.EXACT_INPUT + ? currencyOut && quoteResult + ? CurrencyAmount.fromRawAmount(currencyOut, quoteResult.quote) + : undefined + : currencyIn && quoteResult + ? CurrencyAmount.fromRawAmount(currencyIn, quoteResult.quote) + : undefined + if (isError || !otherAmount || !route || route.length === 0 || !queryArgs) { + return { + state: TradeState.NO_ROUTE_FOUND, + trade: undefined, + } + } + try { + var trade = transformRoutesToTrade(route, tradeType, gasUseEstimateUSD) + return { + // always return VALID regardless of isFetching status + state: TradeState.VALID, + trade, + } + } catch (e) { + console.debug('transformRoutesToTrade failed: ', e) + return { state: TradeState.INVALID, trade: undefined } + } + }, + [currencyIn, currencyOut, isLoading, quoteResult, tradeType, isError, route, queryArgs, gasUseEstimateUSD] + ) +} +var templateObject_1$1a -function useModalOpen(modal) { - var openModal = useAppSelector(function (state) { return state.application.openModal; }); - return openModal === modal; -} -function useToggleModal(modal) { - var open = useModalOpen(modal); - var dispatch = useAppDispatch(); - return useCallback(function () { return dispatch(setOpenModal(open ? null : modal)); }, [dispatch, modal, open]); -} -function useWalletModalToggle() { - return useToggleModal(ApplicationModal.WALLET); -} -function useToggleSettingsMenu() { - return useToggleModal(ApplicationModal.SETTINGS); -} -function useShowClaimPopup() { - return useModalOpen(ApplicationModal.CLAIM_POPUP); -} -function useToggleShowClaimPopup() { - return useToggleModal(ApplicationModal.CLAIM_POPUP); -} -function useToggleSelfClaimModal() { - return useToggleModal(ApplicationModal.SELF_CLAIM); -} -function useTogglePrivacyPolicy() { - return useToggleModal(ApplicationModal.PRIVACY_POLICY); -} -// returns a function that allows adding a popup -function useAddPopup() { - var dispatch = useAppDispatch(); - return useCallback(function (content, key, removeAfterMs) { - dispatch(addPopup({ content: content, key: key, removeAfterMs: removeAfterMs !== null && removeAfterMs !== void 0 ? removeAfterMs : DEFAULT_TXN_DISMISS_MS })); - }, [dispatch]); -} -// returns a function that allows removing a popup via its key -function useRemovePopup() { - var dispatch = useAppDispatch(); - return useCallback(function (key) { - dispatch(removePopup({ key: key })); - }, [dispatch]); -} -// get the list of active popups -function useActivePopups() { - var list = useAppSelector(function (state) { return state.application.popupList; }); - return useMemo(function () { return list.filter(function (item) { return item.show; }); }, [list]); +var AUTO_ROUTER_SUPPORTED_CHAINS = Object.values(ChainId) + +function useAutoRouterSupported() { + var chainId = useActiveWeb3React().chainId + return Boolean(chainId && AUTO_ROUTER_SUPPORTED_CHAINS.includes(chainId)) } -var _path$5, _path2$2, _path3$1, _path4, _path5, _path6, _path7, _path8, _path9; +/** + * Returns the best v2+v3 trade for a desired swap. + * @param tradeType whether the swap is an exact in/out + * @param amountSpecified the exact amount to swap in/out + * @param otherCurrency the desired output/payment currency + */ +function useBestTrade(tradeType, amountSpecified, otherCurrency) { + var autoRouterSupported = useAutoRouterSupported() + var isWindowVisible = useIsWindowVisible() + var _a = __read( + useDebounce( + useMemo( + function () { + return [amountSpecified, otherCurrency] + }, + [amountSpecified, otherCurrency] + ), + 200 + ), + 2 + ), + debouncedAmount = _a[0], + debouncedOtherCurrency = _a[1] + var routingAPITrade = useRoutingAPITrade( + tradeType, + autoRouterSupported && isWindowVisible ? debouncedAmount : undefined, + debouncedOtherCurrency + ) + var isLoading = amountSpecified !== undefined && debouncedAmount === undefined + // consider trade debouncing when inputs/outputs do not match + var debouncing = + routingAPITrade.trade && + amountSpecified && + (tradeType === TradeType.EXACT_INPUT + ? !routingAPITrade.trade.inputAmount.equalTo(amountSpecified) || + !amountSpecified.currency.equals(routingAPITrade.trade.inputAmount.currency) || + !(debouncedOtherCurrency === null || debouncedOtherCurrency === void 0 + ? void 0 + : debouncedOtherCurrency.equals(routingAPITrade.trade.outputAmount.currency)) + : !routingAPITrade.trade.outputAmount.equalTo(amountSpecified) || + !amountSpecified.currency.equals(routingAPITrade.trade.outputAmount.currency) || + !(debouncedOtherCurrency === null || debouncedOtherCurrency === void 0 + ? void 0 + : debouncedOtherCurrency.equals(routingAPITrade.trade.inputAmount.currency))) + var useFallback = !autoRouterSupported || (!debouncing && routingAPITrade.state === TradeState.NO_ROUTE_FOUND) + // only use client side router if routing api trade failed or is not supported + var bestV3Trade = useClientSideV3Trade( + tradeType, + useFallback ? debouncedAmount : undefined, + useFallback ? debouncedOtherCurrency : undefined + ) + // only return gas estimate from api if routing api trade is used + return useMemo( + function () { + return __assign( + __assign( + __assign({}, useFallback ? bestV3Trade : routingAPITrade), + debouncing ? { state: TradeState.SYNCING } : {} + ), + isLoading ? { state: TradeState.LOADING } : {} + ) + }, + [bestV3Trade, debouncing, isLoading, routingAPITrade, useFallback] + ) +} -function _extends$7() { _extends$7 = 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$7.apply(this, arguments); } +// gets the current timestamp from the blockchain +function useCurrentBlockTimestamp() { + var _a, _b + var multicall = useInterfaceMulticall() + return (_b = + (_a = useSingleCallResult(multicall, 'getCurrentBlockTimestamp')) === null || _a === void 0 + ? void 0 + : _a.result) === null || _b === void 0 + ? void 0 + : _b[0] +} -const SvgLogo = props => /*#__PURE__*/React.createElement("svg", _extends$7({ - width: 14, - height: 15, - viewBox: "0 0 14 15", - fill: "black", - xmlns: "http://www.w3.org/2000/svg" -}, props), /*#__PURE__*/React.createElement("g", { - style: { - mixBlendMode: "darken" +new Interface(abi$6) +;({ + 1: [ + { + tokens: [WRAPPED_NATIVE_CURRENCY[1], DAI], + stakingRewardAddress: '0xa1484C3aa22a66C62b77E0AE78E15258bd0cB711', + }, + { + tokens: [WRAPPED_NATIVE_CURRENCY[1], USDC], + stakingRewardAddress: '0x7FBa4B8Dc5E7616e59622806932DBea72537A56b', + }, + { + tokens: [WRAPPED_NATIVE_CURRENCY[1], USDT], + stakingRewardAddress: '0x6C3e4cb2E96B01F4b866965A91ed4437839A121a', + }, + { + tokens: [WRAPPED_NATIVE_CURRENCY[1], WBTC], + stakingRewardAddress: '0xCA35e32e7926b96A9988f61d510E038108d8068e', + }, + ], +}) + +// mimics useAllBalances +function useAllTokenBalances() { + var account = useActiveWeb3React().account + var allTokens = useAllTokens() + var allTokensArray = useMemo( + function () { + return Object.values(allTokens !== null && allTokens !== void 0 ? allTokens : {}) + }, + [allTokens] + ) + var balances = useTokenBalances(account !== null && account !== void 0 ? account : undefined, allTokensArray) + return balances !== null && balances !== void 0 ? balances : {} +} + +function useSwapState() { + return useAppSelector(function (state) { + return state.swap + }) +} +function useSwapActionHandlers() { + var dispatch = useAppDispatch() + var onCurrencySelection = useCallback( + function (field, currency) { + dispatch( + selectCurrency({ + field, + currencyId: currency.isToken ? currency.address : currency.isNative ? 'ETH' : '', + }) + ) + }, + [dispatch] + ) + var onSwitchTokens = useCallback( + function () { + dispatch(switchCurrencies()) + }, + [dispatch] + ) + var onUserInput = useCallback( + function (field, typedValue) { + dispatch(typeInput({ field, typedValue })) + }, + [dispatch] + ) + var onChangeRecipient = useCallback( + function (recipient) { + dispatch(setRecipient({ recipient })) + }, + [dispatch] + ) + return { + onSwitchTokens, + onCurrencySelection, + onUserInput, + onChangeRecipient, } -}, _path$5 || (_path$5 = /*#__PURE__*/React.createElement("path", { - d: "M4.15217 1.55141C3.96412 1.52242 3.95619 1.51902 4.04468 1.5055C4.21427 1.47958 4.61472 1.51491 4.89067 1.58012C5.53489 1.73232 6.12109 2.12221 6.74683 2.81466L6.91307 2.99862L7.15088 2.96062C8.15274 2.8006 9.17194 2.92778 10.0244 3.31918C10.2589 3.42686 10.6287 3.64121 10.6749 3.69629C10.6896 3.71384 10.7166 3.82684 10.7349 3.94742C10.7982 4.36458 10.7665 4.68434 10.6382 4.92317C10.5683 5.05313 10.5644 5.09432 10.6114 5.20554C10.6489 5.2943 10.7534 5.35999 10.8569 5.35985C11.0687 5.35956 11.2968 5.0192 11.4024 4.54561L11.4444 4.3575L11.5275 4.45109C11.9835 4.96459 12.3417 5.66488 12.4032 6.16335L12.4192 6.29332L12.3426 6.17517C12.2107 5.97186 12.0781 5.83346 11.9084 5.72183C11.6024 5.52062 11.2789 5.45215 10.4222 5.40727C9.64839 5.36675 9.21045 5.30106 8.77621 5.16032C8.03738 4.9209 7.66493 4.60204 6.78729 3.4576C6.39748 2.94928 6.15654 2.66804 5.91687 2.44155C5.37228 1.92691 4.83716 1.65701 4.15217 1.55141Z" -})), _path2$2 || (_path2$2 = /*#__PURE__*/React.createElement("path", { - d: "M10.8494 2.68637C10.8689 2.34575 10.9153 2.12108 11.0088 1.9159C11.0458 1.83469 11.0804 1.76822 11.0858 1.76822C11.0911 1.76822 11.075 1.82816 11.05 1.90142C10.9821 2.10054 10.9709 2.3729 11.0177 2.68978C11.0771 3.09184 11.1109 3.14985 11.5385 3.58416C11.739 3.78788 11.9723 4.0448 12.0568 4.15511L12.2106 4.35568L12.0568 4.21234C11.8688 4.03705 11.4364 3.6952 11.3409 3.64633C11.2768 3.61356 11.2673 3.61413 11.2278 3.65321C11.1914 3.68922 11.1837 3.74333 11.1787 3.99915C11.1708 4.39786 11.1161 4.65377 10.9842 4.90965C10.9128 5.04805 10.9015 5.01851 10.9661 4.8623C11.0143 4.74566 11.0192 4.69439 11.0189 4.30842C11.0181 3.53291 10.9255 3.34647 10.3823 3.02709C10.2447 2.94618 10.0179 2.8295 9.87839 2.76778C9.73887 2.70606 9.62805 2.6523 9.63208 2.64828C9.64746 2.63307 10.1772 2.78675 10.3905 2.86828C10.7077 2.98954 10.76 3.00526 10.7985 2.99063C10.8244 2.98082 10.8369 2.90608 10.8494 2.68637Z" -})), _path3$1 || (_path3$1 = /*#__PURE__*/React.createElement("path", { - d: "M4.51745 4.01304C4.13569 3.49066 3.89948 2.68973 3.95062 2.091L3.96643 1.90572L4.05333 1.92148C4.21652 1.95106 4.49789 2.05515 4.62964 2.13469C4.9912 2.35293 5.14773 2.64027 5.30697 3.37811C5.35362 3.59423 5.41482 3.8388 5.44298 3.9216C5.48831 4.05487 5.65962 4.36617 5.7989 4.56834C5.89922 4.71395 5.83258 4.78295 5.61082 4.76305C5.27215 4.73267 4.8134 4.41799 4.51745 4.01304Z" -})), _path4 || (_path4 = /*#__PURE__*/React.createElement("path", { - d: "M10.3863 7.90088C8.60224 7.18693 7.97389 6.56721 7.97389 5.52157C7.97389 5.36769 7.97922 5.24179 7.98571 5.24179C7.99221 5.24179 8.06124 5.29257 8.1391 5.35465C8.50088 5.64305 8.906 5.76623 10.0275 5.92885C10.6875 6.02455 11.0589 6.10185 11.4015 6.21477C12.4904 6.57371 13.1641 7.30212 13.3248 8.29426C13.3715 8.58255 13.3441 9.12317 13.2684 9.4081C13.2087 9.63315 13.0263 10.0388 12.9779 10.0544C12.9645 10.0587 12.9514 10.0076 12.9479 9.93809C12.9296 9.56554 12.7402 9.20285 12.4221 8.93116C12.0604 8.62227 11.5745 8.37633 10.3863 7.90088Z" -})), _path5 || (_path5 = /*#__PURE__*/React.createElement("path", { - d: "M9.13385 8.19748C9.11149 8.06527 9.07272 7.89643 9.04769 7.82228L9.00217 7.68748L9.08672 7.7818C9.20374 7.91233 9.2962 8.07937 9.37457 8.30185C9.43438 8.47165 9.44111 8.52215 9.44066 8.79807C9.4402 9.06896 9.43273 9.12575 9.3775 9.27858C9.29042 9.51959 9.18233 9.69048 9.00097 9.87391C8.67507 10.2036 8.25607 10.3861 7.65143 10.4618C7.54633 10.4749 7.24 10.4971 6.97069 10.511C6.292 10.5461 5.84531 10.6186 5.44393 10.7587C5.38623 10.7788 5.3347 10.7911 5.32947 10.7859C5.31323 10.7698 5.58651 10.6079 5.81223 10.4998C6.1305 10.3474 6.44733 10.2643 7.15719 10.1468C7.50785 10.0887 7.86998 10.0183 7.96194 9.99029C8.83033 9.72566 9.27671 9.04276 9.13385 8.19748Z" -})), _path6 || (_path6 = /*#__PURE__*/React.createElement("path", { - d: "M9.95169 9.64109C9.71465 9.13463 9.66022 8.64564 9.79009 8.18961C9.80399 8.14088 9.82632 8.101 9.83976 8.101C9.85319 8.101 9.90913 8.13105 9.96404 8.16777C10.0733 8.24086 10.2924 8.36395 10.876 8.68023C11.6043 9.0749 12.0196 9.3805 12.302 9.72965C12.5493 10.0354 12.7023 10.3837 12.776 10.8084C12.8177 11.0489 12.7932 11.6277 12.7311 11.8699C12.5353 12.6337 12.0802 13.2336 11.4311 13.5837C11.336 13.635 11.2506 13.6771 11.2414 13.6773C11.2321 13.6775 11.2668 13.5899 11.3184 13.4827C11.5367 13.029 11.5616 12.5877 11.3965 12.0965C11.2954 11.7957 11.0893 11.4287 10.6732 10.8084C10.1893 10.0873 10.0707 9.89539 9.95169 9.64109Z" -})), _path7 || (_path7 = /*#__PURE__*/React.createElement("path", { - d: "M3.25046 12.3737C3.91252 11.8181 4.73629 11.4234 5.48666 11.3022C5.81005 11.25 6.34877 11.2707 6.64823 11.3469C7.12824 11.469 7.55763 11.7425 7.78094 12.0683C7.99918 12.3867 8.09281 12.6642 8.19029 13.2816C8.22875 13.5252 8.27057 13.7697 8.28323 13.8251C8.35644 14.1451 8.4989 14.4008 8.67544 14.5293C8.95583 14.7333 9.43865 14.7459 9.91362 14.5618C9.99423 14.5305 10.0642 14.5089 10.0691 14.5138C10.0864 14.5308 9.84719 14.6899 9.67847 14.7737C9.45143 14.8864 9.2709 14.93 9.03102 14.93C8.59601 14.93 8.23486 14.7101 7.9335 14.2616C7.87419 14.1733 7.7409 13.909 7.63729 13.6741C7.3191 12.9528 7.16199 12.7331 6.79255 12.4926C6.47104 12.2834 6.05641 12.2459 5.74449 12.3979C5.33475 12.5976 5.22043 13.118 5.51389 13.4478C5.63053 13.5789 5.84803 13.6919 6.02588 13.7139C6.35861 13.7551 6.64455 13.5035 6.64455 13.1696C6.64455 12.9528 6.56071 12.8291 6.34966 12.7344C6.0614 12.6051 5.75156 12.7562 5.75304 13.0254C5.75368 13.1402 5.80396 13.2122 5.91971 13.2643C5.99397 13.2977 5.99569 13.3003 5.93514 13.2878C5.67066 13.2333 5.6087 12.9164 5.82135 12.706C6.07667 12.4535 6.60461 12.5649 6.78591 12.9097C6.86208 13.0545 6.87092 13.3429 6.80451 13.517C6.6559 13.9068 6.22256 14.1117 5.78297 14.0002C5.48368 13.9242 5.36181 13.842 5.00097 13.4726C4.37395 12.8306 4.13053 12.7062 3.22657 12.566L3.05335 12.5391L3.25046 12.3737Z" -})), _path8 || (_path8 = /*#__PURE__*/React.createElement("path", { - fillRule: "evenodd", - clipRule: "evenodd", - d: "M0.308383 0.883984C2.40235 3.40996 3.84457 4.45213 4.00484 4.67231C4.13717 4.85412 4.08737 5.01757 3.86067 5.14567C3.7346 5.21689 3.47541 5.28905 3.34564 5.28905C3.19887 5.28905 3.14847 5.23278 3.14847 5.23278C3.06337 5.15255 3.01544 5.16658 2.5784 4.39555C1.97166 3.45981 1.46389 2.68357 1.45004 2.67057C1.41801 2.64052 1.41856 2.64153 2.51654 4.59413C2.69394 5.0011 2.55182 5.15049 2.55182 5.20845C2.55182 5.32636 2.51946 5.38834 2.37311 5.55059C2.12914 5.8211 2.02008 6.12505 1.94135 6.7541C1.8531 7.45926 1.60492 7.95737 0.917156 8.80989C0.514562 9.30893 0.448686 9.4004 0.3471 9.60153C0.219144 9.85482 0.183961 9.99669 0.169701 10.3165C0.154629 10.6547 0.183983 10.8732 0.287934 11.1965C0.378939 11.4796 0.473932 11.6665 0.716778 12.0403C0.926351 12.3629 1.04702 12.6027 1.04702 12.6965C1.04702 12.7711 1.06136 12.7712 1.38611 12.6983C2.16328 12.5239 2.79434 12.2171 3.14925 11.8411C3.36891 11.6084 3.42048 11.4799 3.42215 11.1611C3.42325 10.9525 3.41587 10.9088 3.35914 10.7888C3.2668 10.5935 3.09869 10.4311 2.72817 10.1794C2.2427 9.84953 2.03534 9.58398 1.97807 9.21878C1.93108 8.91913 1.98559 8.70771 2.25416 8.14825C2.53214 7.56916 2.60103 7.32239 2.64763 6.73869C2.67773 6.36158 2.71941 6.21286 2.82842 6.09348C2.94212 5.969 3.04447 5.92684 3.32584 5.88863C3.78457 5.82635 4.07667 5.70839 4.31677 5.48849C4.52505 5.29772 4.61221 5.11391 4.62558 4.8372L4.63574 4.62747L4.51934 4.49259C4.09783 4.00411 0.0261003 0.5 0.000160437 0.5C-0.00538105 0.5 0.133325 0.672804 0.308383 0.883984ZM1.28364 10.6992C1.37894 10.5314 1.3283 10.3158 1.16889 10.2104C1.01827 10.1109 0.78428 10.1578 0.78428 10.2875C0.78428 10.3271 0.806303 10.3559 0.855937 10.3813C0.939514 10.424 0.945581 10.4721 0.879823 10.5703C0.81323 10.6698 0.818604 10.7573 0.894991 10.8167C1.0181 10.9125 1.19237 10.8598 1.28364 10.6992Z" -})), _path9 || (_path9 = /*#__PURE__*/React.createElement("path", { - fillRule: "evenodd", - clipRule: "evenodd", - d: "M4.92523 5.99865C4.70988 6.06439 4.50054 6.29124 4.43574 6.5291C4.39621 6.67421 4.41864 6.92875 4.47785 7.00736C4.57351 7.13433 4.66602 7.16778 4.91651 7.16603C5.40693 7.16263 5.83327 6.95358 5.88284 6.69224C5.92347 6.47801 5.73622 6.18112 5.4783 6.05078C5.34521 5.98355 5.06217 5.95688 4.92523 5.99865ZM5.49853 6.44422C5.57416 6.33741 5.54107 6.22198 5.41245 6.14391C5.1675 5.99525 4.79708 6.11827 4.79708 6.34826C4.79708 6.46274 4.99025 6.58765 5.16731 6.58765C5.28516 6.58765 5.44644 6.5178 5.49853 6.44422Z" -})))); -var UNISWAP_LOGO_URL = "data:image/svg+xml,%3Csvg%20width%3D%2214%22%20height%3D%2215%22%20viewBox%3D%220%200%2014%2015%22%20fill%3D%22black%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20style%3D%22mix-blend-mode%3Adarken%22%3E%3Cpath%20d%3D%22M4.15217%201.55141C3.96412%201.52242%203.95619%201.51902%204.04468%201.5055C4.21427%201.47958%204.61472%201.51491%204.89067%201.58012C5.53489%201.73232%206.12109%202.12221%206.74683%202.81466L6.91307%202.99862L7.15088%202.96062C8.15274%202.8006%209.17194%202.92778%2010.0244%203.31918C10.2589%203.42686%2010.6287%203.64121%2010.6749%203.69629C10.6896%203.71384%2010.7166%203.82684%2010.7349%203.94742C10.7982%204.36458%2010.7665%204.68434%2010.6382%204.92317C10.5683%205.05313%2010.5644%205.09432%2010.6114%205.20554C10.6489%205.2943%2010.7534%205.35999%2010.8569%205.35985C11.0687%205.35956%2011.2968%205.0192%2011.4024%204.54561L11.4444%204.3575L11.5275%204.45109C11.9835%204.96459%2012.3417%205.66488%2012.4032%206.16335L12.4192%206.29332L12.3426%206.17517C12.2107%205.97186%2012.0781%205.83346%2011.9084%205.72183C11.6024%205.52062%2011.2789%205.45215%2010.4222%205.40727C9.64839%205.36675%209.21045%205.30106%208.77621%205.16032C8.03738%204.9209%207.66493%204.60204%206.78729%203.4576C6.39748%202.94928%206.15654%202.66804%205.91687%202.44155C5.37228%201.92691%204.83716%201.65701%204.15217%201.55141Z%22%2F%3E%3Cpath%20d%3D%22M10.8494%202.68637C10.8689%202.34575%2010.9153%202.12108%2011.0088%201.9159C11.0458%201.83469%2011.0804%201.76822%2011.0858%201.76822C11.0911%201.76822%2011.075%201.82816%2011.05%201.90142C10.9821%202.10054%2010.9709%202.3729%2011.0177%202.68978C11.0771%203.09184%2011.1109%203.14985%2011.5385%203.58416C11.739%203.78788%2011.9723%204.0448%2012.0568%204.15511L12.2106%204.35568L12.0568%204.21234C11.8688%204.03705%2011.4364%203.6952%2011.3409%203.64633C11.2768%203.61356%2011.2673%203.61413%2011.2278%203.65321C11.1914%203.68922%2011.1837%203.74333%2011.1787%203.99915C11.1708%204.39786%2011.1161%204.65377%2010.9842%204.90965C10.9128%205.04805%2010.9015%205.01851%2010.9661%204.8623C11.0143%204.74566%2011.0192%204.69439%2011.0189%204.30842C11.0181%203.53291%2010.9255%203.34647%2010.3823%203.02709C10.2447%202.94618%2010.0179%202.8295%209.87839%202.76778C9.73887%202.70606%209.62805%202.6523%209.63208%202.64828C9.64746%202.63307%2010.1772%202.78675%2010.3905%202.86828C10.7077%202.98954%2010.76%203.00526%2010.7985%202.99063C10.8244%202.98082%2010.8369%202.90608%2010.8494%202.68637Z%22%2F%3E%3Cpath%20d%3D%22M4.51745%204.01304C4.13569%203.49066%203.89948%202.68973%203.95062%202.091L3.96643%201.90572L4.05333%201.92148C4.21652%201.95106%204.49789%202.05515%204.62964%202.13469C4.9912%202.35293%205.14773%202.64027%205.30697%203.37811C5.35362%203.59423%205.41482%203.8388%205.44298%203.9216C5.48831%204.05487%205.65962%204.36617%205.7989%204.56834C5.89922%204.71395%205.83258%204.78295%205.61082%204.76305C5.27215%204.73267%204.8134%204.41799%204.51745%204.01304Z%22%2F%3E%3Cpath%20d%3D%22M10.3863%207.90088C8.60224%207.18693%207.97389%206.56721%207.97389%205.52157C7.97389%205.36769%207.97922%205.24179%207.98571%205.24179C7.99221%205.24179%208.06124%205.29257%208.1391%205.35465C8.50088%205.64305%208.906%205.76623%2010.0275%205.92885C10.6875%206.02455%2011.0589%206.10185%2011.4015%206.21477C12.4904%206.57371%2013.1641%207.30212%2013.3248%208.29426C13.3715%208.58255%2013.3441%209.12317%2013.2684%209.4081C13.2087%209.63315%2013.0263%2010.0388%2012.9779%2010.0544C12.9645%2010.0587%2012.9514%2010.0076%2012.9479%209.93809C12.9296%209.56554%2012.7402%209.20285%2012.4221%208.93116C12.0604%208.62227%2011.5745%208.37633%2010.3863%207.90088Z%22%2F%3E%3Cpath%20d%3D%22M9.13385%208.19748C9.11149%208.06527%209.07272%207.89643%209.04769%207.82228L9.00217%207.68748L9.08672%207.7818C9.20374%207.91233%209.2962%208.07937%209.37457%208.30185C9.43438%208.47165%209.44111%208.52215%209.44066%208.79807C9.4402%209.06896%209.43273%209.12575%209.3775%209.27858C9.29042%209.51959%209.18233%209.69048%209.00097%209.87391C8.67507%2010.2036%208.25607%2010.3861%207.65143%2010.4618C7.54633%2010.4749%207.24%2010.4971%206.97069%2010.511C6.292%2010.5461%205.84531%2010.6186%205.44393%2010.7587C5.38623%2010.7788%205.3347%2010.7911%205.32947%2010.7859C5.31323%2010.7698%205.58651%2010.6079%205.81223%2010.4998C6.1305%2010.3474%206.44733%2010.2643%207.15719%2010.1468C7.50785%2010.0887%207.86998%2010.0183%207.96194%209.99029C8.83033%209.72566%209.27671%209.04276%209.13385%208.19748Z%22%2F%3E%3Cpath%20d%3D%22M9.95169%209.64109C9.71465%209.13463%209.66022%208.64564%209.79009%208.18961C9.80399%208.14088%209.82632%208.101%209.83976%208.101C9.85319%208.101%209.90913%208.13105%209.96404%208.16777C10.0733%208.24086%2010.2924%208.36395%2010.876%208.68023C11.6043%209.0749%2012.0196%209.3805%2012.302%209.72965C12.5493%2010.0354%2012.7023%2010.3837%2012.776%2010.8084C12.8177%2011.0489%2012.7932%2011.6277%2012.7311%2011.8699C12.5353%2012.6337%2012.0802%2013.2336%2011.4311%2013.5837C11.336%2013.635%2011.2506%2013.6771%2011.2414%2013.6773C11.2321%2013.6775%2011.2668%2013.5899%2011.3184%2013.4827C11.5367%2013.029%2011.5616%2012.5877%2011.3965%2012.0965C11.2954%2011.7957%2011.0893%2011.4287%2010.6732%2010.8084C10.1893%2010.0873%2010.0707%209.89539%209.95169%209.64109Z%22%2F%3E%3Cpath%20d%3D%22M3.25046%2012.3737C3.91252%2011.8181%204.73629%2011.4234%205.48666%2011.3022C5.81005%2011.25%206.34877%2011.2707%206.64823%2011.3469C7.12824%2011.469%207.55763%2011.7425%207.78094%2012.0683C7.99918%2012.3867%208.09281%2012.6642%208.19029%2013.2816C8.22875%2013.5252%208.27057%2013.7697%208.28323%2013.8251C8.35644%2014.1451%208.4989%2014.4008%208.67544%2014.5293C8.95583%2014.7333%209.43865%2014.7459%209.91362%2014.5618C9.99423%2014.5305%2010.0642%2014.5089%2010.0691%2014.5138C10.0864%2014.5308%209.84719%2014.6899%209.67847%2014.7737C9.45143%2014.8864%209.2709%2014.93%209.03102%2014.93C8.59601%2014.93%208.23486%2014.7101%207.9335%2014.2616C7.87419%2014.1733%207.7409%2013.909%207.63729%2013.6741C7.3191%2012.9528%207.16199%2012.7331%206.79255%2012.4926C6.47104%2012.2834%206.05641%2012.2459%205.74449%2012.3979C5.33475%2012.5976%205.22043%2013.118%205.51389%2013.4478C5.63053%2013.5789%205.84803%2013.6919%206.02588%2013.7139C6.35861%2013.7551%206.64455%2013.5035%206.64455%2013.1696C6.64455%2012.9528%206.56071%2012.8291%206.34966%2012.7344C6.0614%2012.6051%205.75156%2012.7562%205.75304%2013.0254C5.75368%2013.1402%205.80396%2013.2122%205.91971%2013.2643C5.99397%2013.2977%205.99569%2013.3003%205.93514%2013.2878C5.67066%2013.2333%205.6087%2012.9164%205.82135%2012.706C6.07667%2012.4535%206.60461%2012.5649%206.78591%2012.9097C6.86208%2013.0545%206.87092%2013.3429%206.80451%2013.517C6.6559%2013.9068%206.22256%2014.1117%205.78297%2014.0002C5.48368%2013.9242%205.36181%2013.842%205.00097%2013.4726C4.37395%2012.8306%204.13053%2012.7062%203.22657%2012.566L3.05335%2012.5391L3.25046%2012.3737Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M0.308383%200.883984C2.40235%203.40996%203.84457%204.45213%204.00484%204.67231C4.13717%204.85412%204.08737%205.01757%203.86067%205.14567C3.7346%205.21689%203.47541%205.28905%203.34564%205.28905C3.19887%205.28905%203.14847%205.23278%203.14847%205.23278C3.06337%205.15255%203.01544%205.16658%202.5784%204.39555C1.97166%203.45981%201.46389%202.68357%201.45004%202.67057C1.41801%202.64052%201.41856%202.64153%202.51654%204.59413C2.69394%205.0011%202.55182%205.15049%202.55182%205.20845C2.55182%205.32636%202.51946%205.38834%202.37311%205.55059C2.12914%205.8211%202.02008%206.12505%201.94135%206.7541C1.8531%207.45926%201.60492%207.95737%200.917156%208.80989C0.514562%209.30893%200.448686%209.4004%200.3471%209.60153C0.219144%209.85482%200.183961%209.99669%200.169701%2010.3165C0.154629%2010.6547%200.183983%2010.8732%200.287934%2011.1965C0.378939%2011.4796%200.473932%2011.6665%200.716778%2012.0403C0.926351%2012.3629%201.04702%2012.6027%201.04702%2012.6965C1.04702%2012.7711%201.06136%2012.7712%201.38611%2012.6983C2.16328%2012.5239%202.79434%2012.2171%203.14925%2011.8411C3.36891%2011.6084%203.42048%2011.4799%203.42215%2011.1611C3.42325%2010.9525%203.41587%2010.9088%203.35914%2010.7888C3.2668%2010.5935%203.09869%2010.4311%202.72817%2010.1794C2.2427%209.84953%202.03534%209.58398%201.97807%209.21878C1.93108%208.91913%201.98559%208.70771%202.25416%208.14825C2.53214%207.56916%202.60103%207.32239%202.64763%206.73869C2.67773%206.36158%202.71941%206.21286%202.82842%206.09348C2.94212%205.969%203.04447%205.92684%203.32584%205.88863C3.78457%205.82635%204.07667%205.70839%204.31677%205.48849C4.52505%205.29772%204.61221%205.11391%204.62558%204.8372L4.63574%204.62747L4.51934%204.49259C4.09783%204.00411%200.0261003%200.5%200.000160437%200.5C-0.00538105%200.5%200.133325%200.672804%200.308383%200.883984ZM1.28364%2010.6992C1.37894%2010.5314%201.3283%2010.3158%201.16889%2010.2104C1.01827%2010.1109%200.78428%2010.1578%200.78428%2010.2875C0.78428%2010.3271%200.806303%2010.3559%200.855937%2010.3813C0.939514%2010.424%200.945581%2010.4721%200.879823%2010.5703C0.81323%2010.6698%200.818604%2010.7573%200.894991%2010.8167C1.0181%2010.9125%201.19237%2010.8598%201.28364%2010.6992Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M4.92523%205.99865C4.70988%206.06439%204.50054%206.29124%204.43574%206.5291C4.39621%206.67421%204.41864%206.92875%204.47785%207.00736C4.57351%207.13433%204.66602%207.16778%204.91651%207.16603C5.40693%207.16263%205.83327%206.95358%205.88284%206.69224C5.92347%206.47801%205.73622%206.18112%205.4783%206.05078C5.34521%205.98355%205.06217%205.95688%204.92523%205.99865ZM5.49853%206.44422C5.57416%206.33741%205.54107%206.22198%205.41245%206.14391C5.1675%205.99525%204.79708%206.11827%204.79708%206.34826C4.79708%206.46274%204.99025%206.58765%205.16731%206.58765C5.28516%206.58765%205.44644%206.5178%205.49853%206.44422Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"; - -var ContentWrapper$3 = styled(AutoColumn)(templateObject_1$18 || (templateObject_1$18 = __makeTemplateObject(["\n width: 100%;\n"], ["\n width: 100%;\n"]))); -var ModalUpper = styled(DataCard)(templateObject_2$Q || (templateObject_2$Q = __makeTemplateObject(["\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n"], ["\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n"]))); -var ConfirmOrLoadingWrapper = styled.div(templateObject_3$I || (templateObject_3$I = __makeTemplateObject(["\n width: 100%;\n padding: 24px;\n position: relative;\n background: ", ";\n"], ["\n width: 100%;\n padding: 24px;\n position: relative;\n background: ", ";\n"])), function (_a) { - var activeBG = _a.activeBG; - return activeBG && - 'radial-gradient(76.02% 75.41% at 1.84% 0%, rgba(255, 0, 122, 0.2) 0%, rgba(33, 114, 229, 0.2) 100%), #FFFFFF;'; -}); -var ConfirmedIcon$1 = styled(ColumnCenter)(templateObject_4$x || (templateObject_4$x = __makeTemplateObject(["\n padding: 60px 0;\n"], ["\n padding: 60px 0;\n"]))); -var SOCKS_AMOUNT = 1000; -var USER_AMOUNT = 400; -function ClaimModal() { - var _a, _b, _c, _d, _e, _f, _g; - var isOpen = useModalOpen(ApplicationModal.SELF_CLAIM); - var toggleClaimModal = useToggleSelfClaimModal(); - var _h = useActiveWeb3React(), account = _h.account, chainId = _h.chainId; - // used for UI loading states - var _j = __read(useState(false), 2), attempting = _j[0], setAttempting = _j[1]; - // get user claim data - var userClaimData = useUserClaimData(account); - // monitor the status of the claim from contracts and txns - var claimCallback = useClaimCallback(account).claimCallback; - var unclaimedAmount = useUserUnclaimedAmount(account); - var _k = useUserHasSubmittedClaim(account !== null && account !== void 0 ? account : undefined), claimSubmitted = _k.claimSubmitted, claimTxn = _k.claimTxn; - var claimConfirmed = Boolean(claimTxn === null || claimTxn === void 0 ? void 0 : claimTxn.receipt); - function onClaim() { - setAttempting(true); - claimCallback() - // reset modal and log error - .catch(function (error) { - setAttempting(false); - console.log(error); - }); - } - // once confirmed txn is found, if modal is closed open, mark as not attempting regradless - useEffect(function () { - if (claimConfirmed && claimSubmitted && attempting) { - setAttempting(false); - if (!isOpen) { - toggleClaimModal(); - } - } - }, [attempting, claimConfirmed, claimSubmitted, isOpen, toggleClaimModal]); - var nonLPAmount = JSBI.multiply(JSBI.BigInt((((_a = userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.flags) === null || _a === void 0 ? void 0 : _a.isSOCKS) ? SOCKS_AMOUNT : 0) + (((_b = userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.flags) === null || _b === void 0 ? void 0 : _b.isUser) ? USER_AMOUNT : 0)), JSBI.exponentiate(JSBI.BigInt(10), JSBI.BigInt(18))); - return (jsxs(Modal, __assign({ isOpen: isOpen, onDismiss: toggleClaimModal, maxHeight: 90 }, { children: [jsx(Confetti, { start: Boolean(isOpen && claimConfirmed) }, void 0), !attempting && !claimConfirmed && (jsxs(ContentWrapper$3, __assign({ gap: "lg" }, { children: [jsxs(ModalUpper, { children: [jsx(CardBGImage, {}, void 0), jsx(CardNoise, {}, void 0), jsxs(CardSection, __assign({ gap: "md" }, { children: [jsxs(RowBetween, { children: [jsx(ThemedText.White, __assign({ fontWeight: 500 }, { children: jsx(Trans, { children: "Claim UNI" }, void 0) }), void 0), jsx(CloseIcon$2, { onClick: toggleClaimModal, style: { zIndex: 99 }, color: "white" }, void 0)] }, void 0), jsx(ThemedText.White, __assign({ fontWeight: 700, fontSize: 36 }, { children: jsxs(Trans, { children: [unclaimedAmount === null || unclaimedAmount === void 0 ? void 0 : unclaimedAmount.toFixed(0, (_c = { groupSeparator: ',' }) !== null && _c !== void 0 ? _c : '-'), " UNI"] }, void 0) }), void 0)] }), void 0), jsx(Break$1, {}, void 0), jsxs(CardSection, __assign({ gap: "sm" }, { children: [((_d = userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.flags) === null || _d === void 0 ? void 0 : _d.isSOCKS) && (jsxs(RowBetween, { children: [jsx(ThemedText.SubHeader, __assign({ color: "white" }, { children: "SOCKS" }), void 0), jsx(ThemedText.SubHeader, __assign({ color: "white" }, { children: jsxs(Trans, { children: [SOCKS_AMOUNT, " UNI"] }, void 0) }), void 0)] }, void 0)), ((_e = userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.flags) === null || _e === void 0 ? void 0 : _e.isLP) && - unclaimedAmount && - JSBI.greaterThanOrEqual(unclaimedAmount.quotient, nonLPAmount) && (jsxs(RowBetween, { children: [jsx(ThemedText.SubHeader, __assign({ color: "white" }, { children: jsx(Trans, { children: "Liquidity" }, void 0) }), void 0), jsx(ThemedText.SubHeader, __assign({ color: "white" }, { children: jsxs(Trans, { children: [unclaimedAmount - .subtract(CurrencyAmount.fromRawAmount(unclaimedAmount.currency, nonLPAmount)) - .toFixed(0, { groupSeparator: ',' }), ' ', "UNI"] }, void 0) }), void 0)] }, void 0)), ((_f = userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.flags) === null || _f === void 0 ? void 0 : _f.isUser) && (jsxs(RowBetween, { children: [jsx(ThemedText.SubHeader, __assign({ color: "white" }, { children: jsx(Trans, { children: "User" }, void 0) }), void 0), jsx(ThemedText.SubHeader, __assign({ color: "white" }, { children: jsxs(Trans, { children: [USER_AMOUNT, " UNI"] }, void 0) }), void 0)] }, void 0))] }), void 0)] }, void 0), jsxs(AutoColumn, __assign({ gap: "md", style: { padding: '1rem', paddingTop: '0' }, justify: "center" }, { children: [jsx(ThemedText.SubHeader, __assign({ fontWeight: 500 }, { children: jsxs(Trans, { children: ["As a member of the Uniswap community you may claim UNI to be used for voting and governance.", jsx("br", {}, void 0), jsx("br", {}, void 0), jsx(ExternalLink, __assign({ href: "https://uniswap.org/blog/uni" }, { children: "Read more about UNI" }), void 0)] }, void 0) }), void 0), jsx(ButtonPrimary, __assign({ disabled: !isAddress$1(account !== null && account !== void 0 ? account : ''), padding: "16px 16px", width: "100%", "$borderRadius": "12px", mt: "1rem", onClick: onClaim }, { children: jsx(Trans, { children: "Claim UNI" }, void 0) }), void 0)] }), void 0)] }), void 0)), (attempting || claimConfirmed) && (jsxs(ConfirmOrLoadingWrapper, __assign({ activeBG: true }, { children: [jsx(CardNoise, {}, void 0), jsx(CardBGImageSmaller, { desaturate: true }, void 0), jsxs(RowBetween, { children: [jsx("div", {}, void 0), jsx(CloseIcon$2, { onClick: toggleClaimModal, style: { zIndex: 99 }, stroke: "black" }, void 0)] }, void 0), jsx(ConfirmedIcon$1, { children: !claimConfirmed ? (jsx(CustomLightSpinner, { src: Circle$1, alt: "loader", size: '90px' }, void 0)) : (jsx(UniTokenAnimated, { width: "72px", src: tokenLogo, alt: "UNI" }, void 0)) }, void 0), jsxs(AutoColumn, __assign({ gap: "100px", justify: 'center' }, { children: [jsxs(AutoColumn, __assign({ gap: "12px", justify: 'center' }, { children: [jsx(ThemedText.LargeHeader, __assign({ fontWeight: 600, color: "black" }, { children: claimConfirmed ? jsx(Trans, { children: "Claimed!" }, void 0) : jsx(Trans, { children: "Claiming" }, void 0) }), void 0), !claimConfirmed && (jsx(Text$1, __assign({ fontSize: 36, color: '#ff007a', fontWeight: 800 }, { children: jsxs(Trans, { children: [unclaimedAmount === null || unclaimedAmount === void 0 ? void 0 : unclaimedAmount.toFixed(0, (_g = { groupSeparator: ',' }) !== null && _g !== void 0 ? _g : '-'), " UNI"] }, void 0) }), void 0))] }), void 0), claimConfirmed && (jsx(Fragment, { children: jsx(ThemedText.SubHeader, __assign({ fontWeight: 500, color: "black" }, { children: jsxs(Trans, { children: [jsxs("span", __assign({ role: "img", "aria-label": "party-hat" }, { children: ["\uD83C\uDF89", ' '] }), void 0), "Welcome to team Unicorn :)", ' ', jsx("span", __assign({ role: "img", "aria-label": "party-hat" }, { children: "\uD83C\uDF89" }), void 0)] }, void 0) }), void 0) }, void 0)), attempting && !claimSubmitted && (jsx(ThemedText.SubHeader, __assign({ color: "black" }, { children: jsx(Trans, { children: "Confirm this transaction in your wallet" }, void 0) }), void 0)), attempting && claimSubmitted && !claimConfirmed && chainId && (claimTxn === null || claimTxn === void 0 ? void 0 : claimTxn.hash) && (jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, claimTxn === null || claimTxn === void 0 ? void 0 : claimTxn.hash, ExplorerDataType.TRANSACTION), style: { zIndex: 99 } }, { children: jsx(Trans, { children: "View transaction on Explorer" }, void 0) }), void 0))] }), void 0)] }), void 0))] }), void 0)); -} -var templateObject_1$18, templateObject_2$Q, templateObject_3$I, templateObject_4$x; +} +var BAD_RECIPIENT_ADDRESSES = { + '0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f': true, + '0xf164fC0Ec4E93095b804a4795bBe1e041497b92a': true, + '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D': true, // v2 router 02 +} +// from the current swap inputs, compute the best trade and return it. +function useDerivedSwapInfo() { + var _a, _b + var account = useActiveWeb3React().account + var _c = useSwapState(), + independentField = _c.independentField, + typedValue = _c.typedValue, + _d = Field.INPUT, + inputCurrencyId = _c[_d].currencyId, + _e = Field.OUTPUT, + outputCurrencyId = _c[_e].currencyId, + recipient = _c.recipient + var inputCurrency = useCurrency(inputCurrencyId) + var outputCurrency = useCurrency(outputCurrencyId) + var recipientLookup = useENS(recipient !== null && recipient !== void 0 ? recipient : undefined) + var to = (_a = recipient === null ? account : recipientLookup.address) !== null && _a !== void 0 ? _a : null + var relevantTokenBalances = useCurrencyBalances( + account !== null && account !== void 0 ? account : undefined, + useMemo( + function () { + return [ + inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : undefined, + outputCurrency !== null && outputCurrency !== void 0 ? outputCurrency : undefined, + ] + }, + [inputCurrency, outputCurrency] + ) + ) + var isExactIn = independentField === Field.INPUT + var parsedAmount = useMemo( + function () { + var _a + return tryParseCurrencyAmount( + typedValue, + (_a = isExactIn ? inputCurrency : outputCurrency) !== null && _a !== void 0 ? _a : undefined + ) + }, + [inputCurrency, isExactIn, outputCurrency, typedValue] + ) + var trade = useBestTrade( + isExactIn ? TradeType.EXACT_INPUT : TradeType.EXACT_OUTPUT, + parsedAmount, + (_b = isExactIn ? outputCurrency : inputCurrency) !== null && _b !== void 0 ? _b : undefined + ) + var currencyBalances = useMemo( + function () { + var _a + return (_a = {}), (_a[Field.INPUT] = relevantTokenBalances[0]), (_a[Field.OUTPUT] = relevantTokenBalances[1]), _a + }, + [relevantTokenBalances] + ) + var currencies = useMemo( + function () { + var _a + return (_a = {}), (_a[Field.INPUT] = inputCurrency), (_a[Field.OUTPUT] = outputCurrency), _a + }, + [inputCurrency, outputCurrency] + ) + // allowed slippage is either auto slippage, or custom user defined slippage if auto slippage disabled + var autoSlippageTolerance = useAutoSlippageTolerance(trade.trade) + var allowedSlippage = useUserSlippageToleranceWithDefault(autoSlippageTolerance) + var inputError = useMemo( + function () { + var _a + var inputError + if (!account) { + inputError = jsx(Trans, { children: 'Connect Wallet' }, void 0) + } + if (!currencies[Field.INPUT] || !currencies[Field.OUTPUT]) { + inputError = + inputError !== null && inputError !== void 0 ? inputError : jsx(Trans, { children: 'Select a token' }, void 0) + } + if (!parsedAmount) { + inputError = + inputError !== null && inputError !== void 0 + ? inputError + : jsx(Trans, { children: 'Enter an amount' }, void 0) + } + var formattedTo = isAddress(to) + if (!to || !formattedTo) { + inputError = + inputError !== null && inputError !== void 0 + ? inputError + : jsx(Trans, { children: 'Enter a recipient' }, void 0) + } else { + if (BAD_RECIPIENT_ADDRESSES[formattedTo]) { + inputError = + inputError !== null && inputError !== void 0 + ? inputError + : jsx(Trans, { children: 'Invalid recipient' }, void 0) + } + } + // compare input balance to max input based on version + var _b = __read( + [ + currencyBalances[Field.INPUT], + (_a = trade.trade) === null || _a === void 0 ? void 0 : _a.maximumAmountIn(allowedSlippage), + ], + 2 + ), + balanceIn = _b[0], + amountIn = _b[1] + if (balanceIn && amountIn && balanceIn.lessThan(amountIn)) { + inputError = jsxs(Trans, { children: ['Insufficient ', amountIn.currency.symbol, ' balance'] }, void 0) + } + return inputError + }, + [account, allowedSlippage, currencies, currencyBalances, parsedAmount, to, trade.trade] + ) + return useMemo( + function () { + return { + currencies, + currencyBalances, + parsedAmount, + inputError, + trade, + allowedSlippage, + } + }, + [allowedSlippage, currencies, currencyBalances, inputError, parsedAmount, trade] + ) +} +function parseCurrencyFromURLParameter(urlParam) { + if (typeof urlParam === 'string') { + var valid = isAddress(urlParam) + if (valid) return valid + if (urlParam.toUpperCase() === 'ETH') return 'ETH' + } + return '' +} +function parseTokenAmountURLParameter(urlParam) { + return typeof urlParam === 'string' && !isNaN(parseFloat(urlParam)) ? urlParam : '' +} +function parseIndependentFieldURLParameter(urlParam) { + return typeof urlParam === 'string' && urlParam.toLowerCase() === 'output' ? Field.OUTPUT : Field.INPUT +} +var ENS_NAME_REGEX = /^[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)?$/ +var ADDRESS_REGEX = /^0x[a-fA-F0-9]{40}$/ +function validatedRecipient(recipient) { + if (typeof recipient !== 'string') return null + var address = isAddress(recipient) + if (address) return address + if (ENS_NAME_REGEX.test(recipient)) return recipient + if (ADDRESS_REGEX.test(recipient)) return recipient + return null +} +function queryParametersToSwapState(parsedQs) { + var _a + var inputCurrency = parseCurrencyFromURLParameter(parsedQs.inputCurrency) + var outputCurrency = parseCurrencyFromURLParameter(parsedQs.outputCurrency) + if (inputCurrency === '' && outputCurrency === '') { + // default to ETH input + inputCurrency = 'ETH' + } else if (inputCurrency === outputCurrency) { + // clear output if identical + outputCurrency = '' + } + var recipient = validatedRecipient(parsedQs.recipient) + return ( + (_a = {}), + (_a[Field.INPUT] = { + currencyId: + inputCurrency === '' ? null : inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : null, + }), + (_a[Field.OUTPUT] = { + currencyId: + outputCurrency === '' ? null : outputCurrency !== null && outputCurrency !== void 0 ? outputCurrency : null, + }), + (_a.typedValue = parseTokenAmountURLParameter(parsedQs.exactAmount)), + (_a.independentField = parseIndependentFieldURLParameter(parsedQs.exactField)), + (_a.recipient = recipient), + _a + ) +} +// updates the swap state to use the defaults for a given network +function useDefaultsFromURLSearch() { + var chainId = useActiveWeb3React().chainId + var dispatch = useAppDispatch() + var parsedQs = useParsedQueryString() + var _a = __read(useState(), 2), + result = _a[0], + setResult = _a[1] + useEffect( + function () { + var _a, _b + if (!chainId) return + var parsed = queryParametersToSwapState(parsedQs) + var inputCurrencyId = (_a = parsed[Field.INPUT].currencyId) !== null && _a !== void 0 ? _a : undefined + var outputCurrencyId = (_b = parsed[Field.OUTPUT].currencyId) !== null && _b !== void 0 ? _b : undefined + dispatch( + replaceSwapState({ + typedValue: parsed.typedValue, + field: parsed.independentField, + inputCurrencyId, + outputCurrencyId, + recipient: parsed.recipient, + }) + ) + setResult({ inputCurrencyId, outputCurrencyId }) + // eslint-disable-next-line react-hooks/exhaustive-deps + }, + [dispatch, chainId] + ) + return result +} -var Card = styled(Box)(templateObject_1$17 || (templateObject_1$17 = __makeTemplateObject(["\n width: ", ";\n padding: ", ";\n border-radius: ", ";\n border: ", ";\n"], ["\n width: ", ";\n padding: ", ";\n border-radius: ", ";\n border: ", ";\n"])), function (_a) { - var width = _a.width; - return width !== null && width !== void 0 ? width : '100%'; -}, function (_a) { - var padding = _a.padding; - return padding !== null && padding !== void 0 ? padding : '1rem'; -}, function (_a) { - var $borderRadius = _a.$borderRadius; - return $borderRadius !== null && $borderRadius !== void 0 ? $borderRadius : '16px'; -}, function (_a) { - var border = _a.border; - return border; -}); -var LightCard = styled(Card)(templateObject_2$P || (templateObject_2$P = __makeTemplateObject(["\n border: 1px solid ", ";\n background-color: ", ";\n"], ["\n border: 1px solid ", ";\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}); -var LightGreyCard = styled(Card)(templateObject_3$H || (templateObject_3$H = __makeTemplateObject(["\n background-color: ", ";\n"], ["\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}); -var GreyCard = styled(Card)(templateObject_4$w || (templateObject_4$w = __makeTemplateObject(["\n background-color: ", ";\n"], ["\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg3; -}); -var DarkGreyCard = styled(Card)(templateObject_5$p || (templateObject_5$p = __makeTemplateObject(["\n background-color: ", ";\n"], ["\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}); -styled(Card)(templateObject_6$k || (templateObject_6$k = __makeTemplateObject(["\n background-color: ", ";\n"], ["\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg0; -}); -var OutlineCard = styled(Card)(templateObject_7$h || (templateObject_7$h = __makeTemplateObject(["\n border: 1px solid ", ";\n"], ["\n border: 1px solid ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg3; -}); -styled(Card)(templateObject_8$f || (templateObject_8$f = __makeTemplateObject(["\n background-color: rgba(243, 132, 30, 0.05);\n color: ", ";\n font-weight: 500;\n"], ["\n background-color: rgba(243, 132, 30, 0.05);\n color: ", ";\n font-weight: 500;\n"])), function (_a) { - var theme = _a.theme; - return theme.yellow3; -}); -styled(Card)(templateObject_9$e || (templateObject_9$e = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n border-radius: 12px;\n"], ["\n background-color: ", ";\n color: ", ";\n border-radius: 12px;\n"])), function (_a) { - var theme = _a.theme; - return theme.primary5; -}, function (_a) { - var theme = _a.theme; - return theme.blue2; -}); -var templateObject_1$17, templateObject_2$P, templateObject_3$H, templateObject_4$w, templateObject_5$p, templateObject_6$k, templateObject_7$h, templateObject_8$f, templateObject_9$e; +var initialState$2 = queryParametersToSwapState(parsedQueryString()) +var swap = createReducer(initialState$2, function (builder) { + return builder + .addCase(replaceSwapState, function (state, _a) { + var _b + var _c = _a.payload, + typedValue = _c.typedValue, + recipient = _c.recipient, + field = _c.field, + inputCurrencyId = _c.inputCurrencyId, + outputCurrencyId = _c.outputCurrencyId + return ( + (_b = {}), + (_b[Field.INPUT] = { + currencyId: inputCurrencyId !== null && inputCurrencyId !== void 0 ? inputCurrencyId : null, + }), + (_b[Field.OUTPUT] = { + currencyId: outputCurrencyId !== null && outputCurrencyId !== void 0 ? outputCurrencyId : null, + }), + (_b.independentField = field), + (_b.typedValue = typedValue), + (_b.recipient = recipient), + _b + ) + }) + .addCase(selectCurrency, function (state, _a) { + var _b, _c + var _d = _a.payload, + currencyId = _d.currencyId, + field = _d.field + var otherField = field === Field.INPUT ? Field.OUTPUT : Field.INPUT + if (currencyId === state[otherField].currencyId) { + // the case where we have to swap the order + return __assign( + __assign({}, state), + ((_b = { independentField: state.independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT }), + (_b[field] = { currencyId }), + (_b[otherField] = { currencyId: state[field].currencyId }), + _b) + ) + } else { + // the normal case + return __assign(__assign({}, state), ((_c = {}), (_c[field] = { currencyId }), _c)) + } + }) + .addCase(switchCurrencies, function (state) { + var _a + return __assign( + __assign({}, state), + ((_a = { independentField: state.independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT }), + (_a[Field.INPUT] = { currencyId: state[Field.OUTPUT].currencyId }), + (_a[Field.OUTPUT] = { currencyId: state[Field.INPUT].currencyId }), + _a) + ) + }) + .addCase(typeInput, function (state, _a) { + var _b = _a.payload, + field = _b.field, + typedValue = _b.typedValue + return __assign(__assign({}, state), { independentField: field, typedValue }) + }) + .addCase(setRecipient, function (state, _a) { + var recipient = _a.payload.recipient + state.recipient = recipient + }) +}) + +var now = function () { + return new Date().getTime() +} +var initialState$1 = {} +var transactions = createReducer(initialState$1, function (builder) { + return builder + .addCase(updateVersion, function (transactions) { + // in case there are any transactions in the store with the old format, remove them + Object.keys(transactions).forEach(function (chainId) { + var chainTransactions = transactions[chainId] + Object.keys(chainTransactions).forEach(function (hash) { + if (!('info' in chainTransactions[hash])) { + // clear old transactions that don't have the right format + delete chainTransactions[hash] + } + }) + }) + }) + .addCase(addTransaction, function (transactions, _a) { + var _b, _c + var _d = _a.payload, + chainId = _d.chainId, + from = _d.from, + hash = _d.hash, + info = _d.info + if ((_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash]) { + throw Error('Attempted to add existing transaction.') + } + var txs = (_c = transactions[chainId]) !== null && _c !== void 0 ? _c : {} + txs[hash] = { hash, info, from, addedTime: now() } + transactions[chainId] = txs + }) + .addCase(clearAllTransactions, function (transactions, _a) { + var chainId = _a.payload.chainId + if (!transactions[chainId]) return + transactions[chainId] = {} + }) + .addCase(checkedTransaction, function (transactions, _a) { + var _b + var _c = _a.payload, + chainId = _c.chainId, + hash = _c.hash, + blockNumber = _c.blockNumber + var tx = (_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash] + if (!tx) { + return + } + if (!tx.lastCheckedBlockNumber) { + tx.lastCheckedBlockNumber = blockNumber + } else { + tx.lastCheckedBlockNumber = Math.max(blockNumber, tx.lastCheckedBlockNumber) + } + }) + .addCase(finalizeTransaction, function (transactions, _a) { + var _b + var _c = _a.payload, + hash = _c.hash, + chainId = _c.chainId, + receipt = _c.receipt + var tx = (_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash] + if (!tx) { + return + } + tx.receipt = receipt + tx.confirmedTime = now() + }) +}) + +var currentTimestamp = function () { + return new Date().getTime() +} +function pairKey(token0Address, token1Address) { + return token0Address + ';' + token1Address +} +var initialState = { + matchesDarkMode: false, + userDarkMode: null, + userExpertMode: false, + userLocale: null, + userClientSideRouter: false, + userHideClosedPositions: false, + userSlippageTolerance: 'auto', + userSlippageToleranceHasBeenMigratedToAuto: true, + userDeadline: DEFAULT_DEADLINE_FROM_NOW, + tokens: {}, + pairs: {}, + timestamp: currentTimestamp(), + URLWarningVisible: true, + showSurveyPopup: undefined, +} +var user = createReducer(initialState, function (builder) { + return builder + .addCase(updateVersion, function (state) { + // slippage isnt being tracked in local storage, reset to default + // noinspection SuspiciousTypeOfGuard + if ( + typeof state.userSlippageTolerance !== 'number' || + !Number.isInteger(state.userSlippageTolerance) || + state.userSlippageTolerance < 0 || + state.userSlippageTolerance > 5000 + ) { + state.userSlippageTolerance = 'auto' + } else { + if ( + !state.userSlippageToleranceHasBeenMigratedToAuto && + [10, 50, 100].indexOf(state.userSlippageTolerance) !== -1 + ) { + state.userSlippageTolerance = 'auto' + state.userSlippageToleranceHasBeenMigratedToAuto = true + } + } + // deadline isnt being tracked in local storage, reset to default + // noinspection SuspiciousTypeOfGuard + if ( + typeof state.userDeadline !== 'number' || + !Number.isInteger(state.userDeadline) || + state.userDeadline < 60 || + state.userDeadline > 180 * 60 + ) { + state.userDeadline = DEFAULT_DEADLINE_FROM_NOW + } + state.lastUpdateVersionTimestamp = currentTimestamp() + }) + .addCase(updateUserDarkMode, function (state, action) { + state.userDarkMode = action.payload.userDarkMode + state.timestamp = currentTimestamp() + }) + .addCase(updateMatchesDarkMode, function (state, action) { + state.matchesDarkMode = action.payload.matchesDarkMode + state.timestamp = currentTimestamp() + }) + .addCase(updateUserExpertMode, function (state, action) { + state.userExpertMode = action.payload.userExpertMode + state.timestamp = currentTimestamp() + }) + .addCase(updateUserLocale, function (state, action) { + state.userLocale = action.payload.userLocale + state.timestamp = currentTimestamp() + }) + .addCase(updateUserSlippageTolerance, function (state, action) { + state.userSlippageTolerance = action.payload.userSlippageTolerance + state.timestamp = currentTimestamp() + }) + .addCase(updateUserDeadline, function (state, action) { + state.userDeadline = action.payload.userDeadline + state.timestamp = currentTimestamp() + }) + .addCase(updateUserClientSideRouter, function (state, action) { + state.userClientSideRouter = action.payload.userClientSideRouter + }) + .addCase(updateHideClosedPositions, function (state, action) { + state.userHideClosedPositions = action.payload.userHideClosedPositions + }) + .addCase(updateShowSurveyPopup, function (state, action) { + state.showSurveyPopup = action.payload.showSurveyPopup + }) + .addCase(addSerializedToken, function (state, _a) { + var serializedToken = _a.payload.serializedToken + if (!state.tokens) { + state.tokens = {} + } + state.tokens[serializedToken.chainId] = state.tokens[serializedToken.chainId] || {} + state.tokens[serializedToken.chainId][serializedToken.address] = serializedToken + state.timestamp = currentTimestamp() + }) + .addCase(removeSerializedToken, function (state, _a) { + var _b = _a.payload, + address = _b.address, + chainId = _b.chainId + if (!state.tokens) { + state.tokens = {} + } + state.tokens[chainId] = state.tokens[chainId] || {} + delete state.tokens[chainId][address] + state.timestamp = currentTimestamp() + }) + .addCase(addSerializedPair, function (state, _a) { + var serializedPair = _a.payload.serializedPair + if ( + serializedPair.token0.chainId === serializedPair.token1.chainId && + serializedPair.token0.address !== serializedPair.token1.address + ) { + var chainId = serializedPair.token0.chainId + state.pairs[chainId] = state.pairs[chainId] || {} + state.pairs[chainId][pairKey(serializedPair.token0.address, serializedPair.token1.address)] = serializedPair + } + state.timestamp = currentTimestamp() + }) + .addCase(removeSerializedPair, function (state, _a) { + var _b = _a.payload, + chainId = _b.chainId, + tokenAAddress = _b.tokenAAddress, + tokenBAddress = _b.tokenBAddress + if (state.pairs[chainId]) { + // just delete both keys if either exists + delete state.pairs[chainId][pairKey(tokenAAddress, tokenBAddress)] + delete state.pairs[chainId][pairKey(tokenBAddress, tokenAAddress)] + } + state.timestamp = currentTimestamp() + }) +}) + +var _a$5 +var PERSISTED_KEYS = ['user', 'transactions', 'lists'] +var store = configureStore({ + reducer: + ((_a$5 = { + application, + user, + transactions, + swap, + mint, + mintV3, + burn, + burnV3, + multicall: multicall.reducer, + lists, + logs, + }), + (_a$5[api$1.reducerPath] = api$1.reducer), + (_a$5[routingApi.reducerPath] = routingApi.reducer), + _a$5), + middleware(getDefaultMiddleware) { + return getDefaultMiddleware({ thunk: true }) + .concat(api$1.middleware) + .concat(routingApi.middleware) + .concat(save({ states: PERSISTED_KEYS, debounce: 1000 })) + }, + preloadedState: load({ states: PERSISTED_KEYS, disableWarnings: process.env.NODE_ENV === 'test' }), +}) +store.dispatch(updateVersion()) +setupListeners(store.dispatch) + +var FallbackWrapper = styled.div( + templateObject_1$19 || + (templateObject_1$19 = __makeTemplateObject( + ['\n display: flex;\n flex-direction: column;\n width: 100%;\n align-items: center;\n z-index: 1;\n'], + ['\n display: flex;\n flex-direction: column;\n width: 100%;\n align-items: center;\n z-index: 1;\n'] + )) +) +var BodyWrapper$2 = styled.div( + templateObject_2$R || + (templateObject_2$R = __makeTemplateObject( + ['\n padding: 1rem;\n width: 100%;\n white-space: ;\n'], + ['\n padding: 1rem;\n width: 100%;\n white-space: ;\n'] + )) +) +var CodeBlockWrapper = styled.div( + templateObject_3$J || + (templateObject_3$J = __makeTemplateObject( + [ + '\n background: ', + ';\n overflow: auto;\n white-space: pre;\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 border-radius: 24px;\n padding: 18px 24px;\n color: ', + ';\n', + ], + [ + '\n background: ', + ';\n overflow: auto;\n white-space: pre;\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 border-radius: 24px;\n padding: 18px 24px;\n color: ', + ';\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.bg0 + }, + function (_a) { + var theme = _a.theme + return theme.text1 + } +) +var LinkWrapper = styled.div( + templateObject_4$y || + (templateObject_4$y = __makeTemplateObject( + ['\n color: ', ';\n padding: 6px 24px;\n'], + ['\n color: ', ';\n padding: 6px 24px;\n'] + )), + function (_a) { + var theme = _a.theme + return theme.blue1 + } +) +var SomethingWentWrongWrapper = styled.div( + templateObject_5$q || + (templateObject_5$q = __makeTemplateObject(['\n padding: 6px 24px;\n'], ['\n padding: 6px 24px;\n'])) +) +var IS_UNISWAP = window.location.hostname === 'app.uniswap.org' +var ErrorBoundary = /** @class */ (function (_super) { + __extends(ErrorBoundary, _super) + function ErrorBoundary(props) { + var _this = _super.call(this, props) || this + _this.state = { error: null } + return _this + } + ErrorBoundary.getDerivedStateFromError = function (error) { + return { error } + } + ErrorBoundary.prototype.componentDidCatch = function (error, errorInfo) { + ReactGA.exception(__assign(__assign(__assign({}, error), errorInfo), { fatal: true })) + } + ErrorBoundary.prototype.render = function () { + var error = this.state.error + if (error !== null) { + var encodedBody = encodeURIComponent(issueBody(error)) + return jsx( + FallbackWrapper, + { + children: jsx( + BodyWrapper$2, + { + children: jsxs( + AutoColumn, + __assign( + { gap: 'md' }, + { + children: [ + jsx( + SomethingWentWrongWrapper, + { + children: jsx( + ThemedText.Label, + __assign( + { fontSize: 24, fontWeight: 600 }, + { children: jsx(Trans, { children: 'Something went wrong' }, void 0) } + ), + void 0 + ), + }, + void 0 + ), + jsx( + CodeBlockWrapper, + { + children: jsx( + 'code', + { + children: jsx( + ThemedText.Main, + __assign({ fontSize: 10 }, { children: error.stack }), + void 0 + ), + }, + void 0 + ), + }, + void 0 + ), + IS_UNISWAP + ? jsxs( + AutoRow, + { + children: [ + jsx( + LinkWrapper, + { + children: jsx( + ExternalLink, + __assign( + { + id: 'create-github-issue-link', + href: + 'https://github.com/Uniswap/uniswap-interface/issues/new?assignees=&labels=bug&body=' + + encodedBody + + '&title=' + + encodeURIComponent( + 'Crash report: `' + + error.name + + (error.message && ': ' + error.message) + + '`' + ), + target: '_blank', + }, + { + children: jsxs( + ThemedText.Link, + __assign( + { fontSize: 16 }, + { + children: [ + jsx(Trans, { children: 'Create an issue on GitHub' }, void 0), + jsx('span', { children: '\u2197' }, void 0), + ], + } + ), + void 0 + ), + } + ), + void 0 + ), + }, + void 0 + ), + jsx( + LinkWrapper, + { + children: jsx( + ExternalLink, + __assign( + { + id: 'get-support-on-discord', + href: 'https://discord.gg/FCfyBSbCU5', + target: '_blank', + }, + { + children: jsxs( + ThemedText.Link, + __assign( + { fontSize: 16 }, + { + children: [ + jsx(Trans, { children: 'Get support on Discord' }, void 0), + jsx('span', { children: '\u2197' }, void 0), + ], + } + ), + void 0 + ), + } + ), + void 0 + ), + }, + void 0 + ), + ], + }, + void 0 + ) + : null, + ], + } + ), + void 0 + ), + }, + void 0 + ), + }, + void 0 + ) + } + return this.props.children + } + return ErrorBoundary +})(React__default.Component) +function getRelevantState() { + var path = window.location.hash + if (!path.startsWith('#/')) { + return null + } + var pieces = path.substring(2).split(/[/\\?]/) + switch (pieces[0]) { + case 'swap': + return 'swap' + case 'add': + if (pieces[1] === 'v2') return 'mint' + else return 'mintV3' + case 'remove': + if (pieces[1] === 'v2') return 'burn' + else return 'burnV3' + } + return null +} +function issueBody(error) { + var relevantState = getRelevantState() + var deviceData = userAgent + return ( + '## URL\n \n' + + window.location.href + + '\n\n' + + (relevantState + ? '## `' + + relevantState + + '` state\n \n```json\n' + + JSON.stringify(store.getState()[relevantState], null, 2) + + '\n```\n' + : '') + + '\n' + + (error.name && '## Error\n\n```\n' + error.name + (error.message && ': ' + error.message) + '\n```\n') + + '\n' + + (error.stack && '## Stacktrace\n\n```\n' + error.stack + '\n```\n') + + '\n' + + (deviceData && '## Device data\n\n```json\n' + JSON.stringify(deviceData, null, 2) + '\n```\n') + + '\n' + ) +} +var templateObject_1$19, templateObject_2$R, templateObject_3$J, templateObject_4$y, templateObject_5$q -var Wrapper$h = styled.div(templateObject_1$16 || (templateObject_1$16 = __makeTemplateObject(["\n max-height: 70vh;\n overflow: auto;\n padding: 0 1rem;\n"], ["\n max-height: 70vh;\n overflow: auto;\n padding: 0 1rem;\n"]))); -var StyledExternalCard = styled(Card)(templateObject_2$O || (templateObject_2$O = __makeTemplateObject(["\n background-color: ", ";\n padding: 0.5rem;\n width: 100%;\n\n :hover,\n :focus,\n :active {\n background-color: ", ";\n }\n"], ["\n background-color: ", ";\n padding: 0.5rem;\n width: 100%;\n\n :hover,\n :focus,\n :active {\n background-color: ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.primary5; -}, function (_a) { - var theme = _a.theme; - return theme.primary4; -}); -var HoverText$1 = styled.div(templateObject_3$G || (templateObject_3$G = __makeTemplateObject(["\n text-decoration: none;\n color: ", ";\n display: flex;\n align-items: center;\n\n :hover {\n cursor: pointer;\n }\n"], ["\n text-decoration: none;\n color: ", ";\n display: flex;\n align-items: center;\n\n :hover {\n cursor: pointer;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.text1; -}); -var StyledLinkOut = styled(ArrowDown)(templateObject_4$v || (templateObject_4$v = __makeTemplateObject(["\n transform: rotate(230deg);\n"], ["\n transform: rotate(230deg);\n"]))); -var EXTERNAL_APIS = [ - { - name: 'Auto Router', - description: jsx(Trans, { children: "The app fetches the optimal trade route from a Uniswap Labs server." }, void 0), - }, - { - name: 'Infura', - description: jsx(Trans, { children: "The app fetches on-chain data and constructs contract calls with an Infura API." }, void 0), - }, - { - name: 'TRM Labs', - description: (jsxs(Fragment, { children: [jsx(Trans, { children: "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons." }, void 0), ' ', jsx(ExternalLink, __assign({ href: "https://help.uniswap.org/en/articles/5675203-terms-of-service-faq" }, { children: jsx(Trans, { children: "Learn more" }, void 0) }), void 0)] }, void 0)), - }, - { - name: 'Google Analytics', - description: jsx(Trans, { children: "The app logs anonymized usage statistics in order to improve over time." }, void 0), - }, - { - name: 'The Graph', - description: jsx(Trans, { children: "The app fetches blockchain data from The Graph\u2019s hosted service." }, void 0), - }, -]; -function PrivacyPolicyModal() { - var node = useRef(); - var open = useModalOpen(ApplicationModal.PRIVACY_POLICY); - var toggle = useTogglePrivacyPolicy(); - useEffect(function () { - if (!open) - return; - ReactGA.event({ - category: 'Modal', - action: 'Show Legal', - }); - }, [open]); - return (jsx(Modal, __assign({ isOpen: open, onDismiss: function () { return toggle(); } }, { children: jsxs(AutoColumn, __assign({ gap: "12px", ref: node }, { children: [jsxs(RowBetween, __assign({ padding: "1rem 1rem 0.5rem 1rem" }, { children: [jsx(ThemedText.MediumHeader, { children: jsx(Trans, { children: "Legal & Privacy" }, void 0) }, void 0), jsx(HoverText$1, __assign({ onClick: function () { return toggle(); } }, { children: jsx(X, { size: 24 }, void 0) }), void 0)] }), void 0), jsx(PrivacyPolicy, {}, void 0)] }), void 0) }), void 0)); -} -function PrivacyPolicy() { - return (jsx(Wrapper$h, __assign({ draggable: "true", onTouchMove: function (e) { - // prevent modal gesture handler from dismissing modal when content is scrolling - if (isMobile) { - e.stopPropagation(); - } - } }, { children: jsxs(AutoColumn, __assign({ gap: "16px" }, { children: [jsxs(AutoColumn, __assign({ gap: "8px", style: { width: '100%' } }, { children: [jsx(StyledExternalCard, { children: jsx(ExternalLink, __assign({ href: 'https://uniswap.org/terms-of-service' }, { children: jsxs(RowBetween, { children: [jsxs(AutoRow, __assign({ gap: "4px" }, { children: [jsx(Info, { size: 20 }, void 0), jsx(ThemedText.Main, __assign({ fontSize: 14, color: 'primaryText1' }, { children: jsx(Trans, { children: "Uniswap Labs' Terms of Service" }, void 0) }), void 0)] }), void 0), jsx(StyledLinkOut, { size: 20 }, void 0)] }, void 0) }), void 0) }, void 0), jsx(StyledExternalCard, { children: jsx(ExternalLink, __assign({ href: 'https://uniswap.org/disclaimer/' }, { children: jsxs(RowBetween, { children: [jsxs(AutoRow, __assign({ gap: "4px" }, { children: [jsx(Info, { size: 20 }, void 0), jsx(ThemedText.Main, __assign({ fontSize: 14, color: 'primaryText1' }, { children: jsx(Trans, { children: "Protocol Disclaimer" }, void 0) }), void 0)] }), void 0), jsx(StyledLinkOut, { size: 20 }, void 0)] }, void 0) }), void 0) }, void 0)] }), void 0), jsx(ThemedText.Main, __assign({ fontSize: 14 }, { children: jsx(Trans, { children: "This app uses the following third-party APIs:" }, void 0) }), void 0), jsxs(AutoColumn, __assign({ gap: "12px" }, { children: [EXTERNAL_APIS.map(function (_a, i) { - var name = _a.name, description = _a.description; - return (jsx(DarkGreyCard, { children: jsxs(AutoColumn, __assign({ gap: "8px" }, { children: [jsxs(AutoRow, __assign({ gap: "4px" }, { children: [jsx(Info, { size: 18 }, void 0), jsx(ThemedText.Main, __assign({ fontSize: 14, color: 'text1' }, { children: name }), void 0)] }), void 0), jsx(ThemedText.Main, __assign({ fontSize: 14 }, { children: description }), void 0)] }), void 0) }, i)); - }), jsx(Row$1, __assign({ justify: "center", marginBottom: "1rem" }, { children: jsx(ExternalLink, __assign({ href: "https://help.uniswap.org/en/articles/5675203-terms-of-service-faq" }, { children: jsx(Trans, { children: "Learn more" }, void 0) }), void 0) }), void 0)] }), void 0)] }), void 0) }), void 0)); -} -var templateObject_1$16, templateObject_2$O, templateObject_3$G, templateObject_4$v; +function useModalOpen(modal) { + var openModal = useAppSelector(function (state) { + return state.application.openModal + }) + return openModal === modal +} +function useToggleModal(modal) { + var open = useModalOpen(modal) + var dispatch = useAppDispatch() + return useCallback( + function () { + return dispatch(setOpenModal(open ? null : modal)) + }, + [dispatch, modal, open] + ) +} +function useWalletModalToggle() { + return useToggleModal(ApplicationModal.WALLET) +} +function useToggleSettingsMenu() { + return useToggleModal(ApplicationModal.SETTINGS) +} +function useShowClaimPopup() { + return useModalOpen(ApplicationModal.CLAIM_POPUP) +} +function useToggleShowClaimPopup() { + return useToggleModal(ApplicationModal.CLAIM_POPUP) +} +function useToggleSelfClaimModal() { + return useToggleModal(ApplicationModal.SELF_CLAIM) +} +function useTogglePrivacyPolicy() { + return useToggleModal(ApplicationModal.PRIVACY_POLICY) +} +// returns a function that allows adding a popup +function useAddPopup() { + var dispatch = useAppDispatch() + return useCallback( + function (content, key, removeAfterMs) { + dispatch( + addPopup({ + content, + key, + removeAfterMs: removeAfterMs !== null && removeAfterMs !== void 0 ? removeAfterMs : DEFAULT_TXN_DISMISS_MS, + }) + ) + }, + [dispatch] + ) +} +// returns a function that allows removing a popup via its key +function useRemovePopup() { + var dispatch = useAppDispatch() + return useCallback( + function (key) { + dispatch(removePopup({ key })) + }, + [dispatch] + ) +} +// get the list of active popups +function useActivePopups() { + var list = useAppSelector(function (state) { + return state.application.popupList + }) + return useMemo( + function () { + return list.filter(function (item) { + return item.show + }) + }, + [list] + ) +} + +var _path$5, _path2$2, _path3$1, _path4, _path5, _path6, _path7, _path8, _path9 + +function _extends$7() { + _extends$7 = + 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$7.apply(this, arguments) +} + +const SvgLogo = (props) => + /*#__PURE__*/ React.createElement( + 'svg', + _extends$7( + { + width: 14, + height: 15, + viewBox: '0 0 14 15', + fill: 'black', + xmlns: 'http://www.w3.org/2000/svg', + }, + props + ), + /*#__PURE__*/ React.createElement( + 'g', + { + style: { + mixBlendMode: 'darken', + }, + }, + _path$5 || + (_path$5 = /*#__PURE__*/ React.createElement('path', { + d: 'M4.15217 1.55141C3.96412 1.52242 3.95619 1.51902 4.04468 1.5055C4.21427 1.47958 4.61472 1.51491 4.89067 1.58012C5.53489 1.73232 6.12109 2.12221 6.74683 2.81466L6.91307 2.99862L7.15088 2.96062C8.15274 2.8006 9.17194 2.92778 10.0244 3.31918C10.2589 3.42686 10.6287 3.64121 10.6749 3.69629C10.6896 3.71384 10.7166 3.82684 10.7349 3.94742C10.7982 4.36458 10.7665 4.68434 10.6382 4.92317C10.5683 5.05313 10.5644 5.09432 10.6114 5.20554C10.6489 5.2943 10.7534 5.35999 10.8569 5.35985C11.0687 5.35956 11.2968 5.0192 11.4024 4.54561L11.4444 4.3575L11.5275 4.45109C11.9835 4.96459 12.3417 5.66488 12.4032 6.16335L12.4192 6.29332L12.3426 6.17517C12.2107 5.97186 12.0781 5.83346 11.9084 5.72183C11.6024 5.52062 11.2789 5.45215 10.4222 5.40727C9.64839 5.36675 9.21045 5.30106 8.77621 5.16032C8.03738 4.9209 7.66493 4.60204 6.78729 3.4576C6.39748 2.94928 6.15654 2.66804 5.91687 2.44155C5.37228 1.92691 4.83716 1.65701 4.15217 1.55141Z', + })), + _path2$2 || + (_path2$2 = /*#__PURE__*/ React.createElement('path', { + d: 'M10.8494 2.68637C10.8689 2.34575 10.9153 2.12108 11.0088 1.9159C11.0458 1.83469 11.0804 1.76822 11.0858 1.76822C11.0911 1.76822 11.075 1.82816 11.05 1.90142C10.9821 2.10054 10.9709 2.3729 11.0177 2.68978C11.0771 3.09184 11.1109 3.14985 11.5385 3.58416C11.739 3.78788 11.9723 4.0448 12.0568 4.15511L12.2106 4.35568L12.0568 4.21234C11.8688 4.03705 11.4364 3.6952 11.3409 3.64633C11.2768 3.61356 11.2673 3.61413 11.2278 3.65321C11.1914 3.68922 11.1837 3.74333 11.1787 3.99915C11.1708 4.39786 11.1161 4.65377 10.9842 4.90965C10.9128 5.04805 10.9015 5.01851 10.9661 4.8623C11.0143 4.74566 11.0192 4.69439 11.0189 4.30842C11.0181 3.53291 10.9255 3.34647 10.3823 3.02709C10.2447 2.94618 10.0179 2.8295 9.87839 2.76778C9.73887 2.70606 9.62805 2.6523 9.63208 2.64828C9.64746 2.63307 10.1772 2.78675 10.3905 2.86828C10.7077 2.98954 10.76 3.00526 10.7985 2.99063C10.8244 2.98082 10.8369 2.90608 10.8494 2.68637Z', + })), + _path3$1 || + (_path3$1 = /*#__PURE__*/ React.createElement('path', { + d: 'M4.51745 4.01304C4.13569 3.49066 3.89948 2.68973 3.95062 2.091L3.96643 1.90572L4.05333 1.92148C4.21652 1.95106 4.49789 2.05515 4.62964 2.13469C4.9912 2.35293 5.14773 2.64027 5.30697 3.37811C5.35362 3.59423 5.41482 3.8388 5.44298 3.9216C5.48831 4.05487 5.65962 4.36617 5.7989 4.56834C5.89922 4.71395 5.83258 4.78295 5.61082 4.76305C5.27215 4.73267 4.8134 4.41799 4.51745 4.01304Z', + })), + _path4 || + (_path4 = /*#__PURE__*/ React.createElement('path', { + d: 'M10.3863 7.90088C8.60224 7.18693 7.97389 6.56721 7.97389 5.52157C7.97389 5.36769 7.97922 5.24179 7.98571 5.24179C7.99221 5.24179 8.06124 5.29257 8.1391 5.35465C8.50088 5.64305 8.906 5.76623 10.0275 5.92885C10.6875 6.02455 11.0589 6.10185 11.4015 6.21477C12.4904 6.57371 13.1641 7.30212 13.3248 8.29426C13.3715 8.58255 13.3441 9.12317 13.2684 9.4081C13.2087 9.63315 13.0263 10.0388 12.9779 10.0544C12.9645 10.0587 12.9514 10.0076 12.9479 9.93809C12.9296 9.56554 12.7402 9.20285 12.4221 8.93116C12.0604 8.62227 11.5745 8.37633 10.3863 7.90088Z', + })), + _path5 || + (_path5 = /*#__PURE__*/ React.createElement('path', { + d: 'M9.13385 8.19748C9.11149 8.06527 9.07272 7.89643 9.04769 7.82228L9.00217 7.68748L9.08672 7.7818C9.20374 7.91233 9.2962 8.07937 9.37457 8.30185C9.43438 8.47165 9.44111 8.52215 9.44066 8.79807C9.4402 9.06896 9.43273 9.12575 9.3775 9.27858C9.29042 9.51959 9.18233 9.69048 9.00097 9.87391C8.67507 10.2036 8.25607 10.3861 7.65143 10.4618C7.54633 10.4749 7.24 10.4971 6.97069 10.511C6.292 10.5461 5.84531 10.6186 5.44393 10.7587C5.38623 10.7788 5.3347 10.7911 5.32947 10.7859C5.31323 10.7698 5.58651 10.6079 5.81223 10.4998C6.1305 10.3474 6.44733 10.2643 7.15719 10.1468C7.50785 10.0887 7.86998 10.0183 7.96194 9.99029C8.83033 9.72566 9.27671 9.04276 9.13385 8.19748Z', + })), + _path6 || + (_path6 = /*#__PURE__*/ React.createElement('path', { + d: 'M9.95169 9.64109C9.71465 9.13463 9.66022 8.64564 9.79009 8.18961C9.80399 8.14088 9.82632 8.101 9.83976 8.101C9.85319 8.101 9.90913 8.13105 9.96404 8.16777C10.0733 8.24086 10.2924 8.36395 10.876 8.68023C11.6043 9.0749 12.0196 9.3805 12.302 9.72965C12.5493 10.0354 12.7023 10.3837 12.776 10.8084C12.8177 11.0489 12.7932 11.6277 12.7311 11.8699C12.5353 12.6337 12.0802 13.2336 11.4311 13.5837C11.336 13.635 11.2506 13.6771 11.2414 13.6773C11.2321 13.6775 11.2668 13.5899 11.3184 13.4827C11.5367 13.029 11.5616 12.5877 11.3965 12.0965C11.2954 11.7957 11.0893 11.4287 10.6732 10.8084C10.1893 10.0873 10.0707 9.89539 9.95169 9.64109Z', + })), + _path7 || + (_path7 = /*#__PURE__*/ React.createElement('path', { + d: 'M3.25046 12.3737C3.91252 11.8181 4.73629 11.4234 5.48666 11.3022C5.81005 11.25 6.34877 11.2707 6.64823 11.3469C7.12824 11.469 7.55763 11.7425 7.78094 12.0683C7.99918 12.3867 8.09281 12.6642 8.19029 13.2816C8.22875 13.5252 8.27057 13.7697 8.28323 13.8251C8.35644 14.1451 8.4989 14.4008 8.67544 14.5293C8.95583 14.7333 9.43865 14.7459 9.91362 14.5618C9.99423 14.5305 10.0642 14.5089 10.0691 14.5138C10.0864 14.5308 9.84719 14.6899 9.67847 14.7737C9.45143 14.8864 9.2709 14.93 9.03102 14.93C8.59601 14.93 8.23486 14.7101 7.9335 14.2616C7.87419 14.1733 7.7409 13.909 7.63729 13.6741C7.3191 12.9528 7.16199 12.7331 6.79255 12.4926C6.47104 12.2834 6.05641 12.2459 5.74449 12.3979C5.33475 12.5976 5.22043 13.118 5.51389 13.4478C5.63053 13.5789 5.84803 13.6919 6.02588 13.7139C6.35861 13.7551 6.64455 13.5035 6.64455 13.1696C6.64455 12.9528 6.56071 12.8291 6.34966 12.7344C6.0614 12.6051 5.75156 12.7562 5.75304 13.0254C5.75368 13.1402 5.80396 13.2122 5.91971 13.2643C5.99397 13.2977 5.99569 13.3003 5.93514 13.2878C5.67066 13.2333 5.6087 12.9164 5.82135 12.706C6.07667 12.4535 6.60461 12.5649 6.78591 12.9097C6.86208 13.0545 6.87092 13.3429 6.80451 13.517C6.6559 13.9068 6.22256 14.1117 5.78297 14.0002C5.48368 13.9242 5.36181 13.842 5.00097 13.4726C4.37395 12.8306 4.13053 12.7062 3.22657 12.566L3.05335 12.5391L3.25046 12.3737Z', + })), + _path8 || + (_path8 = /*#__PURE__*/ React.createElement('path', { + fillRule: 'evenodd', + clipRule: 'evenodd', + d: 'M0.308383 0.883984C2.40235 3.40996 3.84457 4.45213 4.00484 4.67231C4.13717 4.85412 4.08737 5.01757 3.86067 5.14567C3.7346 5.21689 3.47541 5.28905 3.34564 5.28905C3.19887 5.28905 3.14847 5.23278 3.14847 5.23278C3.06337 5.15255 3.01544 5.16658 2.5784 4.39555C1.97166 3.45981 1.46389 2.68357 1.45004 2.67057C1.41801 2.64052 1.41856 2.64153 2.51654 4.59413C2.69394 5.0011 2.55182 5.15049 2.55182 5.20845C2.55182 5.32636 2.51946 5.38834 2.37311 5.55059C2.12914 5.8211 2.02008 6.12505 1.94135 6.7541C1.8531 7.45926 1.60492 7.95737 0.917156 8.80989C0.514562 9.30893 0.448686 9.4004 0.3471 9.60153C0.219144 9.85482 0.183961 9.99669 0.169701 10.3165C0.154629 10.6547 0.183983 10.8732 0.287934 11.1965C0.378939 11.4796 0.473932 11.6665 0.716778 12.0403C0.926351 12.3629 1.04702 12.6027 1.04702 12.6965C1.04702 12.7711 1.06136 12.7712 1.38611 12.6983C2.16328 12.5239 2.79434 12.2171 3.14925 11.8411C3.36891 11.6084 3.42048 11.4799 3.42215 11.1611C3.42325 10.9525 3.41587 10.9088 3.35914 10.7888C3.2668 10.5935 3.09869 10.4311 2.72817 10.1794C2.2427 9.84953 2.03534 9.58398 1.97807 9.21878C1.93108 8.91913 1.98559 8.70771 2.25416 8.14825C2.53214 7.56916 2.60103 7.32239 2.64763 6.73869C2.67773 6.36158 2.71941 6.21286 2.82842 6.09348C2.94212 5.969 3.04447 5.92684 3.32584 5.88863C3.78457 5.82635 4.07667 5.70839 4.31677 5.48849C4.52505 5.29772 4.61221 5.11391 4.62558 4.8372L4.63574 4.62747L4.51934 4.49259C4.09783 4.00411 0.0261003 0.5 0.000160437 0.5C-0.00538105 0.5 0.133325 0.672804 0.308383 0.883984ZM1.28364 10.6992C1.37894 10.5314 1.3283 10.3158 1.16889 10.2104C1.01827 10.1109 0.78428 10.1578 0.78428 10.2875C0.78428 10.3271 0.806303 10.3559 0.855937 10.3813C0.939514 10.424 0.945581 10.4721 0.879823 10.5703C0.81323 10.6698 0.818604 10.7573 0.894991 10.8167C1.0181 10.9125 1.19237 10.8598 1.28364 10.6992Z', + })), + _path9 || + (_path9 = /*#__PURE__*/ React.createElement('path', { + fillRule: 'evenodd', + clipRule: 'evenodd', + d: 'M4.92523 5.99865C4.70988 6.06439 4.50054 6.29124 4.43574 6.5291C4.39621 6.67421 4.41864 6.92875 4.47785 7.00736C4.57351 7.13433 4.66602 7.16778 4.91651 7.16603C5.40693 7.16263 5.83327 6.95358 5.88284 6.69224C5.92347 6.47801 5.73622 6.18112 5.4783 6.05078C5.34521 5.98355 5.06217 5.95688 4.92523 5.99865ZM5.49853 6.44422C5.57416 6.33741 5.54107 6.22198 5.41245 6.14391C5.1675 5.99525 4.79708 6.11827 4.79708 6.34826C4.79708 6.46274 4.99025 6.58765 5.16731 6.58765C5.28516 6.58765 5.44644 6.5178 5.49853 6.44422Z', + })) + ) + ) +var UNISWAP_LOGO_URL = + 'data:image/svg+xml,%3Csvg%20width%3D%2214%22%20height%3D%2215%22%20viewBox%3D%220%200%2014%2015%22%20fill%3D%22black%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20style%3D%22mix-blend-mode%3Adarken%22%3E%3Cpath%20d%3D%22M4.15217%201.55141C3.96412%201.52242%203.95619%201.51902%204.04468%201.5055C4.21427%201.47958%204.61472%201.51491%204.89067%201.58012C5.53489%201.73232%206.12109%202.12221%206.74683%202.81466L6.91307%202.99862L7.15088%202.96062C8.15274%202.8006%209.17194%202.92778%2010.0244%203.31918C10.2589%203.42686%2010.6287%203.64121%2010.6749%203.69629C10.6896%203.71384%2010.7166%203.82684%2010.7349%203.94742C10.7982%204.36458%2010.7665%204.68434%2010.6382%204.92317C10.5683%205.05313%2010.5644%205.09432%2010.6114%205.20554C10.6489%205.2943%2010.7534%205.35999%2010.8569%205.35985C11.0687%205.35956%2011.2968%205.0192%2011.4024%204.54561L11.4444%204.3575L11.5275%204.45109C11.9835%204.96459%2012.3417%205.66488%2012.4032%206.16335L12.4192%206.29332L12.3426%206.17517C12.2107%205.97186%2012.0781%205.83346%2011.9084%205.72183C11.6024%205.52062%2011.2789%205.45215%2010.4222%205.40727C9.64839%205.36675%209.21045%205.30106%208.77621%205.16032C8.03738%204.9209%207.66493%204.60204%206.78729%203.4576C6.39748%202.94928%206.15654%202.66804%205.91687%202.44155C5.37228%201.92691%204.83716%201.65701%204.15217%201.55141Z%22%2F%3E%3Cpath%20d%3D%22M10.8494%202.68637C10.8689%202.34575%2010.9153%202.12108%2011.0088%201.9159C11.0458%201.83469%2011.0804%201.76822%2011.0858%201.76822C11.0911%201.76822%2011.075%201.82816%2011.05%201.90142C10.9821%202.10054%2010.9709%202.3729%2011.0177%202.68978C11.0771%203.09184%2011.1109%203.14985%2011.5385%203.58416C11.739%203.78788%2011.9723%204.0448%2012.0568%204.15511L12.2106%204.35568L12.0568%204.21234C11.8688%204.03705%2011.4364%203.6952%2011.3409%203.64633C11.2768%203.61356%2011.2673%203.61413%2011.2278%203.65321C11.1914%203.68922%2011.1837%203.74333%2011.1787%203.99915C11.1708%204.39786%2011.1161%204.65377%2010.9842%204.90965C10.9128%205.04805%2010.9015%205.01851%2010.9661%204.8623C11.0143%204.74566%2011.0192%204.69439%2011.0189%204.30842C11.0181%203.53291%2010.9255%203.34647%2010.3823%203.02709C10.2447%202.94618%2010.0179%202.8295%209.87839%202.76778C9.73887%202.70606%209.62805%202.6523%209.63208%202.64828C9.64746%202.63307%2010.1772%202.78675%2010.3905%202.86828C10.7077%202.98954%2010.76%203.00526%2010.7985%202.99063C10.8244%202.98082%2010.8369%202.90608%2010.8494%202.68637Z%22%2F%3E%3Cpath%20d%3D%22M4.51745%204.01304C4.13569%203.49066%203.89948%202.68973%203.95062%202.091L3.96643%201.90572L4.05333%201.92148C4.21652%201.95106%204.49789%202.05515%204.62964%202.13469C4.9912%202.35293%205.14773%202.64027%205.30697%203.37811C5.35362%203.59423%205.41482%203.8388%205.44298%203.9216C5.48831%204.05487%205.65962%204.36617%205.7989%204.56834C5.89922%204.71395%205.83258%204.78295%205.61082%204.76305C5.27215%204.73267%204.8134%204.41799%204.51745%204.01304Z%22%2F%3E%3Cpath%20d%3D%22M10.3863%207.90088C8.60224%207.18693%207.97389%206.56721%207.97389%205.52157C7.97389%205.36769%207.97922%205.24179%207.98571%205.24179C7.99221%205.24179%208.06124%205.29257%208.1391%205.35465C8.50088%205.64305%208.906%205.76623%2010.0275%205.92885C10.6875%206.02455%2011.0589%206.10185%2011.4015%206.21477C12.4904%206.57371%2013.1641%207.30212%2013.3248%208.29426C13.3715%208.58255%2013.3441%209.12317%2013.2684%209.4081C13.2087%209.63315%2013.0263%2010.0388%2012.9779%2010.0544C12.9645%2010.0587%2012.9514%2010.0076%2012.9479%209.93809C12.9296%209.56554%2012.7402%209.20285%2012.4221%208.93116C12.0604%208.62227%2011.5745%208.37633%2010.3863%207.90088Z%22%2F%3E%3Cpath%20d%3D%22M9.13385%208.19748C9.11149%208.06527%209.07272%207.89643%209.04769%207.82228L9.00217%207.68748L9.08672%207.7818C9.20374%207.91233%209.2962%208.07937%209.37457%208.30185C9.43438%208.47165%209.44111%208.52215%209.44066%208.79807C9.4402%209.06896%209.43273%209.12575%209.3775%209.27858C9.29042%209.51959%209.18233%209.69048%209.00097%209.87391C8.67507%2010.2036%208.25607%2010.3861%207.65143%2010.4618C7.54633%2010.4749%207.24%2010.4971%206.97069%2010.511C6.292%2010.5461%205.84531%2010.6186%205.44393%2010.7587C5.38623%2010.7788%205.3347%2010.7911%205.32947%2010.7859C5.31323%2010.7698%205.58651%2010.6079%205.81223%2010.4998C6.1305%2010.3474%206.44733%2010.2643%207.15719%2010.1468C7.50785%2010.0887%207.86998%2010.0183%207.96194%209.99029C8.83033%209.72566%209.27671%209.04276%209.13385%208.19748Z%22%2F%3E%3Cpath%20d%3D%22M9.95169%209.64109C9.71465%209.13463%209.66022%208.64564%209.79009%208.18961C9.80399%208.14088%209.82632%208.101%209.83976%208.101C9.85319%208.101%209.90913%208.13105%209.96404%208.16777C10.0733%208.24086%2010.2924%208.36395%2010.876%208.68023C11.6043%209.0749%2012.0196%209.3805%2012.302%209.72965C12.5493%2010.0354%2012.7023%2010.3837%2012.776%2010.8084C12.8177%2011.0489%2012.7932%2011.6277%2012.7311%2011.8699C12.5353%2012.6337%2012.0802%2013.2336%2011.4311%2013.5837C11.336%2013.635%2011.2506%2013.6771%2011.2414%2013.6773C11.2321%2013.6775%2011.2668%2013.5899%2011.3184%2013.4827C11.5367%2013.029%2011.5616%2012.5877%2011.3965%2012.0965C11.2954%2011.7957%2011.0893%2011.4287%2010.6732%2010.8084C10.1893%2010.0873%2010.0707%209.89539%209.95169%209.64109Z%22%2F%3E%3Cpath%20d%3D%22M3.25046%2012.3737C3.91252%2011.8181%204.73629%2011.4234%205.48666%2011.3022C5.81005%2011.25%206.34877%2011.2707%206.64823%2011.3469C7.12824%2011.469%207.55763%2011.7425%207.78094%2012.0683C7.99918%2012.3867%208.09281%2012.6642%208.19029%2013.2816C8.22875%2013.5252%208.27057%2013.7697%208.28323%2013.8251C8.35644%2014.1451%208.4989%2014.4008%208.67544%2014.5293C8.95583%2014.7333%209.43865%2014.7459%209.91362%2014.5618C9.99423%2014.5305%2010.0642%2014.5089%2010.0691%2014.5138C10.0864%2014.5308%209.84719%2014.6899%209.67847%2014.7737C9.45143%2014.8864%209.2709%2014.93%209.03102%2014.93C8.59601%2014.93%208.23486%2014.7101%207.9335%2014.2616C7.87419%2014.1733%207.7409%2013.909%207.63729%2013.6741C7.3191%2012.9528%207.16199%2012.7331%206.79255%2012.4926C6.47104%2012.2834%206.05641%2012.2459%205.74449%2012.3979C5.33475%2012.5976%205.22043%2013.118%205.51389%2013.4478C5.63053%2013.5789%205.84803%2013.6919%206.02588%2013.7139C6.35861%2013.7551%206.64455%2013.5035%206.64455%2013.1696C6.64455%2012.9528%206.56071%2012.8291%206.34966%2012.7344C6.0614%2012.6051%205.75156%2012.7562%205.75304%2013.0254C5.75368%2013.1402%205.80396%2013.2122%205.91971%2013.2643C5.99397%2013.2977%205.99569%2013.3003%205.93514%2013.2878C5.67066%2013.2333%205.6087%2012.9164%205.82135%2012.706C6.07667%2012.4535%206.60461%2012.5649%206.78591%2012.9097C6.86208%2013.0545%206.87092%2013.3429%206.80451%2013.517C6.6559%2013.9068%206.22256%2014.1117%205.78297%2014.0002C5.48368%2013.9242%205.36181%2013.842%205.00097%2013.4726C4.37395%2012.8306%204.13053%2012.7062%203.22657%2012.566L3.05335%2012.5391L3.25046%2012.3737Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M0.308383%200.883984C2.40235%203.40996%203.84457%204.45213%204.00484%204.67231C4.13717%204.85412%204.08737%205.01757%203.86067%205.14567C3.7346%205.21689%203.47541%205.28905%203.34564%205.28905C3.19887%205.28905%203.14847%205.23278%203.14847%205.23278C3.06337%205.15255%203.01544%205.16658%202.5784%204.39555C1.97166%203.45981%201.46389%202.68357%201.45004%202.67057C1.41801%202.64052%201.41856%202.64153%202.51654%204.59413C2.69394%205.0011%202.55182%205.15049%202.55182%205.20845C2.55182%205.32636%202.51946%205.38834%202.37311%205.55059C2.12914%205.8211%202.02008%206.12505%201.94135%206.7541C1.8531%207.45926%201.60492%207.95737%200.917156%208.80989C0.514562%209.30893%200.448686%209.4004%200.3471%209.60153C0.219144%209.85482%200.183961%209.99669%200.169701%2010.3165C0.154629%2010.6547%200.183983%2010.8732%200.287934%2011.1965C0.378939%2011.4796%200.473932%2011.6665%200.716778%2012.0403C0.926351%2012.3629%201.04702%2012.6027%201.04702%2012.6965C1.04702%2012.7711%201.06136%2012.7712%201.38611%2012.6983C2.16328%2012.5239%202.79434%2012.2171%203.14925%2011.8411C3.36891%2011.6084%203.42048%2011.4799%203.42215%2011.1611C3.42325%2010.9525%203.41587%2010.9088%203.35914%2010.7888C3.2668%2010.5935%203.09869%2010.4311%202.72817%2010.1794C2.2427%209.84953%202.03534%209.58398%201.97807%209.21878C1.93108%208.91913%201.98559%208.70771%202.25416%208.14825C2.53214%207.56916%202.60103%207.32239%202.64763%206.73869C2.67773%206.36158%202.71941%206.21286%202.82842%206.09348C2.94212%205.969%203.04447%205.92684%203.32584%205.88863C3.78457%205.82635%204.07667%205.70839%204.31677%205.48849C4.52505%205.29772%204.61221%205.11391%204.62558%204.8372L4.63574%204.62747L4.51934%204.49259C4.09783%204.00411%200.0261003%200.5%200.000160437%200.5C-0.00538105%200.5%200.133325%200.672804%200.308383%200.883984ZM1.28364%2010.6992C1.37894%2010.5314%201.3283%2010.3158%201.16889%2010.2104C1.01827%2010.1109%200.78428%2010.1578%200.78428%2010.2875C0.78428%2010.3271%200.806303%2010.3559%200.855937%2010.3813C0.939514%2010.424%200.945581%2010.4721%200.879823%2010.5703C0.81323%2010.6698%200.818604%2010.7573%200.894991%2010.8167C1.0181%2010.9125%201.19237%2010.8598%201.28364%2010.6992Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M4.92523%205.99865C4.70988%206.06439%204.50054%206.29124%204.43574%206.5291C4.39621%206.67421%204.41864%206.92875%204.47785%207.00736C4.57351%207.13433%204.66602%207.16778%204.91651%207.16603C5.40693%207.16263%205.83327%206.95358%205.88284%206.69224C5.92347%206.47801%205.73622%206.18112%205.4783%206.05078C5.34521%205.98355%205.06217%205.95688%204.92523%205.99865ZM5.49853%206.44422C5.57416%206.33741%205.54107%206.22198%205.41245%206.14391C5.1675%205.99525%204.79708%206.11827%204.79708%206.34826C4.79708%206.46274%204.99025%206.58765%205.16731%206.58765C5.28516%206.58765%205.44644%206.5178%205.49853%206.44422Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E' + +var ContentWrapper$3 = styled(AutoColumn)( + templateObject_1$18 || (templateObject_1$18 = __makeTemplateObject(['\n width: 100%;\n'], ['\n width: 100%;\n'])) +) +var ModalUpper = styled(DataCard)( + templateObject_2$Q || + (templateObject_2$Q = __makeTemplateObject( + [ + '\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n', + ], + [ + '\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n', + ] + )) +) +var ConfirmOrLoadingWrapper = styled.div( + templateObject_3$I || + (templateObject_3$I = __makeTemplateObject( + ['\n width: 100%;\n padding: 24px;\n position: relative;\n background: ', ';\n'], + ['\n width: 100%;\n padding: 24px;\n position: relative;\n background: ', ';\n'] + )), + function (_a) { + var activeBG = _a.activeBG + return ( + activeBG && + 'radial-gradient(76.02% 75.41% at 1.84% 0%, rgba(255, 0, 122, 0.2) 0%, rgba(33, 114, 229, 0.2) 100%), #FFFFFF;' + ) + } +) +var ConfirmedIcon$1 = styled(ColumnCenter)( + templateObject_4$x || + (templateObject_4$x = __makeTemplateObject(['\n padding: 60px 0;\n'], ['\n padding: 60px 0;\n'])) +) +var SOCKS_AMOUNT = 1000 +var USER_AMOUNT = 400 +function ClaimModal() { + var _a, _b, _c, _d, _e, _f, _g + var isOpen = useModalOpen(ApplicationModal.SELF_CLAIM) + var toggleClaimModal = useToggleSelfClaimModal() + var _h = useActiveWeb3React(), + account = _h.account, + chainId = _h.chainId + // used for UI loading states + var _j = __read(useState(false), 2), + attempting = _j[0], + setAttempting = _j[1] + // get user claim data + var userClaimData = useUserClaimData(account) + // monitor the status of the claim from contracts and txns + var claimCallback = useClaimCallback(account).claimCallback + var unclaimedAmount = useUserUnclaimedAmount(account) + var _k = useUserHasSubmittedClaim(account !== null && account !== void 0 ? account : undefined), + claimSubmitted = _k.claimSubmitted, + claimTxn = _k.claimTxn + var claimConfirmed = Boolean(claimTxn === null || claimTxn === void 0 ? void 0 : claimTxn.receipt) + function onClaim() { + setAttempting(true) + claimCallback() + // reset modal and log error + .catch(function (error) { + setAttempting(false) + console.log(error) + }) + } + // once confirmed txn is found, if modal is closed open, mark as not attempting regradless + useEffect( + function () { + if (claimConfirmed && claimSubmitted && attempting) { + setAttempting(false) + if (!isOpen) { + toggleClaimModal() + } + } + }, + [attempting, claimConfirmed, claimSubmitted, isOpen, toggleClaimModal] + ) + var nonLPAmount = JSBI.multiply( + JSBI.BigInt( + (( + (_a = userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.flags) === null || + _a === void 0 + ? void 0 + : _a.isSOCKS + ) + ? SOCKS_AMOUNT + : 0) + + (( + (_b = userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.flags) === null || + _b === void 0 + ? void 0 + : _b.isUser + ) + ? USER_AMOUNT + : 0) + ), + JSBI.exponentiate(JSBI.BigInt(10), JSBI.BigInt(18)) + ) + return jsxs( + Modal, + __assign( + { isOpen, onDismiss: toggleClaimModal, maxHeight: 90 }, + { + children: [ + jsx(Confetti, { start: Boolean(isOpen && claimConfirmed) }, void 0), + !attempting && + !claimConfirmed && + jsxs( + ContentWrapper$3, + __assign( + { gap: 'lg' }, + { + children: [ + jsxs( + ModalUpper, + { + children: [ + jsx(CardBGImage, {}, void 0), + jsx(CardNoise, {}, void 0), + jsxs( + CardSection, + __assign( + { gap: 'md' }, + { + children: [ + jsxs( + RowBetween, + { + children: [ + jsx( + ThemedText.White, + __assign( + { fontWeight: 500 }, + { children: jsx(Trans, { children: 'Claim UNI' }, void 0) } + ), + void 0 + ), + jsx( + CloseIcon$2, + { onClick: toggleClaimModal, style: { zIndex: 99 }, color: 'white' }, + void 0 + ), + ], + }, + void 0 + ), + jsx( + ThemedText.White, + __assign( + { fontWeight: 700, fontSize: 36 }, + { + children: jsxs( + Trans, + { + children: [ + unclaimedAmount === null || unclaimedAmount === void 0 + ? void 0 + : unclaimedAmount.toFixed( + 0, + (_c = { groupSeparator: ',' }) !== null && _c !== void 0 ? _c : '-' + ), + ' UNI', + ], + }, + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + jsx(Break$1, {}, void 0), + jsxs( + CardSection, + __assign( + { gap: 'sm' }, + { + children: [ + ((_d = + userClaimData === null || userClaimData === void 0 + ? void 0 + : userClaimData.flags) === null || _d === void 0 + ? void 0 + : _d.isSOCKS) && + jsxs( + RowBetween, + { + children: [ + jsx( + ThemedText.SubHeader, + __assign({ color: 'white' }, { children: 'SOCKS' }), + void 0 + ), + jsx( + ThemedText.SubHeader, + __assign( + { color: 'white' }, + { children: jsxs(Trans, { children: [SOCKS_AMOUNT, ' UNI'] }, void 0) } + ), + void 0 + ), + ], + }, + void 0 + ), + ((_e = + userClaimData === null || userClaimData === void 0 + ? void 0 + : userClaimData.flags) === null || _e === void 0 + ? void 0 + : _e.isLP) && + unclaimedAmount && + JSBI.greaterThanOrEqual(unclaimedAmount.quotient, nonLPAmount) && + jsxs( + RowBetween, + { + children: [ + jsx( + ThemedText.SubHeader, + __assign( + { color: 'white' }, + { children: jsx(Trans, { children: 'Liquidity' }, void 0) } + ), + void 0 + ), + jsx( + ThemedText.SubHeader, + __assign( + { color: 'white' }, + { + children: jsxs( + Trans, + { + children: [ + unclaimedAmount + .subtract( + CurrencyAmount.fromRawAmount( + unclaimedAmount.currency, + nonLPAmount + ) + ) + .toFixed(0, { groupSeparator: ',' }), + ' ', + 'UNI', + ], + }, + void 0 + ), + } + ), + void 0 + ), + ], + }, + void 0 + ), + ((_f = + userClaimData === null || userClaimData === void 0 + ? void 0 + : userClaimData.flags) === null || _f === void 0 + ? void 0 + : _f.isUser) && + jsxs( + RowBetween, + { + children: [ + jsx( + ThemedText.SubHeader, + __assign( + { color: 'white' }, + { children: jsx(Trans, { children: 'User' }, void 0) } + ), + void 0 + ), + jsx( + ThemedText.SubHeader, + __assign( + { color: 'white' }, + { children: jsxs(Trans, { children: [USER_AMOUNT, ' UNI'] }, void 0) } + ), + void 0 + ), + ], + }, + void 0 + ), + ], + } + ), + void 0 + ), + ], + }, + void 0 + ), + jsxs( + AutoColumn, + __assign( + { gap: 'md', style: { padding: '1rem', paddingTop: '0' }, justify: 'center' }, + { + children: [ + jsx( + ThemedText.SubHeader, + __assign( + { fontWeight: 500 }, + { + children: jsxs( + Trans, + { + children: [ + 'As a member of the Uniswap community you may claim UNI to be used for voting and governance.', + jsx('br', {}, void 0), + jsx('br', {}, void 0), + jsx( + ExternalLink, + __assign( + { href: 'https://uniswap.org/blog/uni' }, + { children: 'Read more about UNI' } + ), + void 0 + ), + ], + }, + void 0 + ), + } + ), + void 0 + ), + jsx( + ButtonPrimary, + __assign( + { + disabled: !isAddress$1(account !== null && account !== void 0 ? account : ''), + padding: '16px 16px', + width: '100%', + $borderRadius: '12px', + mt: '1rem', + onClick: onClaim, + }, + { children: jsx(Trans, { children: 'Claim UNI' }, void 0) } + ), + void 0 + ), + ], + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + (attempting || claimConfirmed) && + jsxs( + ConfirmOrLoadingWrapper, + __assign( + { activeBG: true }, + { + children: [ + jsx(CardNoise, {}, void 0), + jsx(CardBGImageSmaller, { desaturate: true }, void 0), + jsxs( + RowBetween, + { + children: [ + jsx('div', {}, void 0), + jsx( + CloseIcon$2, + { onClick: toggleClaimModal, style: { zIndex: 99 }, stroke: 'black' }, + void 0 + ), + ], + }, + void 0 + ), + jsx( + ConfirmedIcon$1, + { + children: !claimConfirmed + ? jsx(CustomLightSpinner, { src: Circle$1, alt: 'loader', size: '90px' }, void 0) + : jsx(UniTokenAnimated, { width: '72px', src: tokenLogo, alt: 'UNI' }, void 0), + }, + void 0 + ), + jsxs( + AutoColumn, + __assign( + { gap: '100px', justify: 'center' }, + { + children: [ + jsxs( + AutoColumn, + __assign( + { gap: '12px', justify: 'center' }, + { + children: [ + jsx( + ThemedText.LargeHeader, + __assign( + { fontWeight: 600, color: 'black' }, + { + children: claimConfirmed + ? jsx(Trans, { children: 'Claimed!' }, void 0) + : jsx(Trans, { children: 'Claiming' }, void 0), + } + ), + void 0 + ), + !claimConfirmed && + jsx( + Text$1, + __assign( + { fontSize: 36, color: '#ff007a', fontWeight: 800 }, + { + children: jsxs( + Trans, + { + children: [ + unclaimedAmount === null || unclaimedAmount === void 0 + ? void 0 + : unclaimedAmount.toFixed( + 0, + (_g = { groupSeparator: ',' }) !== null && _g !== void 0 + ? _g + : '-' + ), + ' UNI', + ], + }, + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + claimConfirmed && + jsx( + Fragment, + { + children: jsx( + ThemedText.SubHeader, + __assign( + { fontWeight: 500, color: 'black' }, + { + children: jsxs( + Trans, + { + children: [ + jsxs( + 'span', + __assign( + { role: 'img', 'aria-label': 'party-hat' }, + { children: ['\uD83C\uDF89', ' '] } + ), + void 0 + ), + 'Welcome to team Unicorn :)', + ' ', + jsx( + 'span', + __assign( + { role: 'img', 'aria-label': 'party-hat' }, + { children: '\uD83C\uDF89' } + ), + void 0 + ), + ], + }, + void 0 + ), + } + ), + void 0 + ), + }, + void 0 + ), + attempting && + !claimSubmitted && + jsx( + ThemedText.SubHeader, + __assign( + { color: 'black' }, + { + children: jsx( + Trans, + { children: 'Confirm this transaction in your wallet' }, + void 0 + ), + } + ), + void 0 + ), + attempting && + claimSubmitted && + !claimConfirmed && + chainId && + (claimTxn === null || claimTxn === void 0 ? void 0 : claimTxn.hash) && + jsx( + ExternalLink, + __assign( + { + href: getExplorerLink( + chainId, + claimTxn === null || claimTxn === void 0 ? void 0 : claimTxn.hash, + ExplorerDataType.TRANSACTION + ), + style: { zIndex: 99 }, + }, + { children: jsx(Trans, { children: 'View transaction on Explorer' }, void 0) } + ), + void 0 + ), + ], + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + ], + } + ), + void 0 + ) +} +var templateObject_1$18, templateObject_2$Q, templateObject_3$I, templateObject_4$x + +var Card = styled(Box)( + templateObject_1$17 || + (templateObject_1$17 = __makeTemplateObject( + ['\n width: ', ';\n padding: ', ';\n border-radius: ', ';\n border: ', ';\n'], + ['\n width: ', ';\n padding: ', ';\n border-radius: ', ';\n border: ', ';\n'] + )), + function (_a) { + var width = _a.width + return width !== null && width !== void 0 ? width : '100%' + }, + function (_a) { + var padding = _a.padding + return padding !== null && padding !== void 0 ? padding : '1rem' + }, + function (_a) { + var $borderRadius = _a.$borderRadius + return $borderRadius !== null && $borderRadius !== void 0 ? $borderRadius : '16px' + }, + function (_a) { + var border = _a.border + return border + } +) +var LightCard = styled(Card)( + templateObject_2$P || + (templateObject_2$P = __makeTemplateObject( + ['\n border: 1px solid ', ';\n background-color: ', ';\n'], + ['\n border: 1px solid ', ';\n background-color: ', ';\n'] + )), + function (_a) { + var theme = _a.theme + return theme.bg2 + }, + function (_a) { + var theme = _a.theme + return theme.bg1 + } +) +var LightGreyCard = styled(Card)( + templateObject_3$H || + (templateObject_3$H = __makeTemplateObject(['\n background-color: ', ';\n'], ['\n background-color: ', ';\n'])), + function (_a) { + var theme = _a.theme + return theme.bg2 + } +) +var GreyCard = styled(Card)( + templateObject_4$w || + (templateObject_4$w = __makeTemplateObject(['\n background-color: ', ';\n'], ['\n background-color: ', ';\n'])), + function (_a) { + var theme = _a.theme + return theme.bg3 + } +) +var DarkGreyCard = styled(Card)( + templateObject_5$p || + (templateObject_5$p = __makeTemplateObject(['\n background-color: ', ';\n'], ['\n background-color: ', ';\n'])), + function (_a) { + var theme = _a.theme + return theme.bg2 + } +) +styled(Card)( + templateObject_6$k || + (templateObject_6$k = __makeTemplateObject(['\n background-color: ', ';\n'], ['\n background-color: ', ';\n'])), + function (_a) { + var theme = _a.theme + return theme.bg0 + } +) +var OutlineCard = styled(Card)( + templateObject_7$h || + (templateObject_7$h = __makeTemplateObject(['\n border: 1px solid ', ';\n'], ['\n border: 1px solid ', ';\n'])), + function (_a) { + var theme = _a.theme + return theme.bg3 + } +) +styled(Card)( + templateObject_8$f || + (templateObject_8$f = __makeTemplateObject( + ['\n background-color: rgba(243, 132, 30, 0.05);\n color: ', ';\n font-weight: 500;\n'], + ['\n background-color: rgba(243, 132, 30, 0.05);\n color: ', ';\n font-weight: 500;\n'] + )), + function (_a) { + var theme = _a.theme + return theme.yellow3 + } +) +styled(Card)( + templateObject_9$e || + (templateObject_9$e = __makeTemplateObject( + ['\n background-color: ', ';\n color: ', ';\n border-radius: 12px;\n'], + ['\n background-color: ', ';\n color: ', ';\n border-radius: 12px;\n'] + )), + function (_a) { + var theme = _a.theme + return theme.primary5 + }, + function (_a) { + var theme = _a.theme + return theme.blue2 + } +) +var templateObject_1$17, + templateObject_2$P, + templateObject_3$H, + templateObject_4$w, + templateObject_5$p, + templateObject_6$k, + templateObject_7$h, + templateObject_8$f, + templateObject_9$e + +var Wrapper$h = styled.div( + templateObject_1$16 || + (templateObject_1$16 = __makeTemplateObject( + ['\n max-height: 70vh;\n overflow: auto;\n padding: 0 1rem;\n'], + ['\n max-height: 70vh;\n overflow: auto;\n padding: 0 1rem;\n'] + )) +) +var StyledExternalCard = styled(Card)( + templateObject_2$O || + (templateObject_2$O = __makeTemplateObject( + [ + '\n background-color: ', + ';\n padding: 0.5rem;\n width: 100%;\n\n :hover,\n :focus,\n :active {\n background-color: ', + ';\n }\n', + ], + [ + '\n background-color: ', + ';\n padding: 0.5rem;\n width: 100%;\n\n :hover,\n :focus,\n :active {\n background-color: ', + ';\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.primary5 + }, + function (_a) { + var theme = _a.theme + return theme.primary4 + } +) +var HoverText$1 = styled.div( + templateObject_3$G || + (templateObject_3$G = __makeTemplateObject( + [ + '\n text-decoration: none;\n color: ', + ';\n display: flex;\n align-items: center;\n\n :hover {\n cursor: pointer;\n }\n', + ], + [ + '\n text-decoration: none;\n color: ', + ';\n display: flex;\n align-items: center;\n\n :hover {\n cursor: pointer;\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.text1 + } +) +var StyledLinkOut = styled(ArrowDown)( + templateObject_4$v || + (templateObject_4$v = __makeTemplateObject( + ['\n transform: rotate(230deg);\n'], + ['\n transform: rotate(230deg);\n'] + )) +) +var EXTERNAL_APIS = [ + { + name: 'Auto Router', + description: jsx( + Trans, + { children: 'The app fetches the optimal trade route from a Uniswap Labs server.' }, + void 0 + ), + }, + { + name: 'Infura', + description: jsx( + Trans, + { children: 'The app fetches on-chain data and constructs contract calls with an Infura API.' }, + void 0 + ), + }, + { + name: 'TRM Labs', + description: jsxs( + Fragment, + { + children: [ + jsx( + Trans, + { + children: + 'The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.', + }, + void 0 + ), + ' ', + jsx( + ExternalLink, + __assign( + { href: 'https://help.uniswap.org/en/articles/5675203-terms-of-service-faq' }, + { children: jsx(Trans, { children: 'Learn more' }, void 0) } + ), + void 0 + ), + ], + }, + void 0 + ), + }, + { + name: 'Google Analytics', + description: jsx( + Trans, + { children: 'The app logs anonymized usage statistics in order to improve over time.' }, + void 0 + ), + }, + { + name: 'The Graph', + description: jsx( + Trans, + { children: 'The app fetches blockchain data from The Graph\u2019s hosted service.' }, + void 0 + ), + }, +] +function PrivacyPolicyModal() { + var node = useRef() + var open = useModalOpen(ApplicationModal.PRIVACY_POLICY) + var toggle = useTogglePrivacyPolicy() + useEffect( + function () { + if (!open) return + ReactGA.event({ + category: 'Modal', + action: 'Show Legal', + }) + }, + [open] + ) + return jsx( + Modal, + __assign( + { + isOpen: open, + onDismiss() { + return toggle() + }, + }, + { + children: jsxs( + AutoColumn, + __assign( + { gap: '12px', ref: node }, + { + children: [ + jsxs( + RowBetween, + __assign( + { padding: '1rem 1rem 0.5rem 1rem' }, + { + children: [ + jsx( + ThemedText.MediumHeader, + { children: jsx(Trans, { children: 'Legal & Privacy' }, void 0) }, + void 0 + ), + jsx( + HoverText$1, + __assign( + { + onClick() { + return toggle() + }, + }, + { children: jsx(X, { size: 24 }, void 0) } + ), + void 0 + ), + ], + } + ), + void 0 + ), + jsx(PrivacyPolicy, {}, void 0), + ], + } + ), + void 0 + ), + } + ), + void 0 + ) +} +function PrivacyPolicy() { + return jsx( + Wrapper$h, + __assign( + { + draggable: 'true', + onTouchMove(e) { + // prevent modal gesture handler from dismissing modal when content is scrolling + if (isMobile) { + e.stopPropagation() + } + }, + }, + { + children: jsxs( + AutoColumn, + __assign( + { gap: '16px' }, + { + children: [ + jsxs( + AutoColumn, + __assign( + { gap: '8px', style: { width: '100%' } }, + { + children: [ + jsx( + StyledExternalCard, + { + children: jsx( + ExternalLink, + __assign( + { href: 'https://uniswap.org/terms-of-service' }, + { + children: jsxs( + RowBetween, + { + children: [ + jsxs( + AutoRow, + __assign( + { gap: '4px' }, + { + children: [ + jsx(Info, { size: 20 }, void 0), + jsx( + ThemedText.Main, + __assign( + { fontSize: 14, color: 'primaryText1' }, + { + children: jsx( + Trans, + { children: "Uniswap Labs' Terms of Service" }, + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + jsx(StyledLinkOut, { size: 20 }, void 0), + ], + }, + void 0 + ), + } + ), + void 0 + ), + }, + void 0 + ), + jsx( + StyledExternalCard, + { + children: jsx( + ExternalLink, + __assign( + { href: 'https://uniswap.org/disclaimer/' }, + { + children: jsxs( + RowBetween, + { + children: [ + jsxs( + AutoRow, + __assign( + { gap: '4px' }, + { + children: [ + jsx(Info, { size: 20 }, void 0), + jsx( + ThemedText.Main, + __assign( + { fontSize: 14, color: 'primaryText1' }, + { + children: jsx(Trans, { children: 'Protocol Disclaimer' }, void 0), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + jsx(StyledLinkOut, { size: 20 }, void 0), + ], + }, + void 0 + ), + } + ), + void 0 + ), + }, + void 0 + ), + ], + } + ), + void 0 + ), + jsx( + ThemedText.Main, + __assign( + { fontSize: 14 }, + { children: jsx(Trans, { children: 'This app uses the following third-party APIs:' }, void 0) } + ), + void 0 + ), + jsxs( + AutoColumn, + __assign( + { gap: '12px' }, + { + children: [ + EXTERNAL_APIS.map(function (_a, i) { + var name = _a.name, + description = _a.description + return jsx( + DarkGreyCard, + { + children: jsxs( + AutoColumn, + __assign( + { gap: '8px' }, + { + children: [ + jsxs( + AutoRow, + __assign( + { gap: '4px' }, + { + children: [ + jsx(Info, { size: 18 }, void 0), + jsx( + ThemedText.Main, + __assign({ fontSize: 14, color: 'text1' }, { children: name }), + void 0 + ), + ], + } + ), + void 0 + ), + jsx( + ThemedText.Main, + __assign({ fontSize: 14 }, { children: description }), + void 0 + ), + ], + } + ), + void 0 + ), + }, + i + ) + }), + jsx( + Row$1, + __assign( + { justify: 'center', marginBottom: '1rem' }, + { + children: jsx( + ExternalLink, + __assign( + { href: 'https://help.uniswap.org/en/articles/5675203-terms-of-service-faq' }, + { children: jsx(Trans, { children: 'Learn more' }, void 0) } + ), + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + } + ), + void 0 + ) +} +var templateObject_1$16, templateObject_2$O, templateObject_3$G, templateObject_4$v /*eslint-disable*/module.exports={messages:{"$-":"$-","$<0/>":"$<0/>","${0}":["$",["0"]],"(${0})":["($",["0"],")"],"(View on Explorer)":"(View on Explorer)","(clear all)":"(clear all)","(edit)":"(edit)","- Remove recipient":"- Remove recipient","0 UNI / week":"0 UNI / week","25%":"25%","50%":"50%","75%":"75%","<0/> All Proposals":"<0/> All Proposals","<0/> Votes":"<0/> Votes","<0>Account analytics and accrued fees<1> ↗ ":"<0>Account analytics and accrued fees<1> ↗ ","<0>Current Price:<1><2/><3>{0} per {1}":["<0>Current Price:<1><2/><3>",["0"]," per ",["1"],""],"<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.":"<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.","<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.":"<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.","<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.":"<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.","<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.":"<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.","<0>Unlock voting to prepare for the next proposal.":"<0>Unlock voting to prepare for the next proposal.","<0>🎉 Welcome to team Unicorn :) <1>🎉":"<0>🎉 Welcome to team Unicorn :) <1>🎉","A minimum threshold of 0.25% of the total UNI supply is required to submit proposals":"A minimum threshold of 0.25% of the total UNI supply is required to submit proposals","About":"About","Accept":"Accept","Account":"Account","Active":"Active","Add":"Add","Add <0/> and <1/> to Uniswap V2":"Add <0/> and <1/> to Uniswap V2","Add Delegate +":"Add Delegate +","Add Liquidity":"Add Liquidity","Add V2 Liquidity":"Add V2 Liquidity","Add liquidity.":"Add liquidity.","Add more liquidity":"Add more liquidity","Add {0} to Metamask <0/>":["Add ",["0"]," to Metamask <0/>"],"Add {0}-{1} liquidity":["Add ",["0"],"-",["1"]," liquidity"],"Add {0}/{1} V3 liquidity":["Add ",["0"],"/",["1"]," V3 liquidity"],"Added {0}":["Added ",["0"]],"Address has no available claim":"Address has no available claim","Against":"Against","Allow LP token migration":"Allow LP token migration","Allow high price impact trades and skip the confirm screen. Use at your own risk.":"Allow high price impact trades and skip the confirm screen. Use at your own risk.","Allow the Uniswap Protocol to use your {0}":["Allow the Uniswap Protocol to use your ",["0"]],"Allowed":"Allowed","Amount":"Amount","An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.":"An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.","Approval pending <0/>":"Approval pending <0/>","Approve":"Approve","Approve Token":"Approve Token","Approve {0}":["Approve ",["0"]],"Approve {0} first":["Approve ",["0"]," first"],"Approved":"Approved","Approving":"Approving","Approving {0}":["Approving ",["0"]],"Arbiscan":"Arbiscan","Arbitrum Bridge":"Arbitrum Bridge","Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.":"Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.","Are you sure?":"Are you sure?","As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI":"As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI","At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.":["At least ",["0"]," ",["1"]," and ",["2"]," ",["3"]," will be refunded to your wallet due to selected price range."],"Auto":"Auto","Auto Router API":"Auto Router API","Available to deposit: {0}":["Available to deposit: ",["0"]],"Balance: {0}":["Balance: ",["0"]],"Best for exotic pairs.":"Best for exotic pairs.","Best for most pairs.":"Best for most pairs.","Best for stable pairs.":"Best for stable pairs.","Best for very stable pairs.":"Best for very stable pairs.","Best price route costs ~{formattedGasPriceString} in gas.":["Best price route costs ~",["formattedGasPriceString"]," in gas."],"Blocked address":"Blocked address","Bridge":"Bridge","By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.":"By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.","By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.":"By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.","By connecting a wallet, you agree to Uniswap Labs’ <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.":"By connecting a wallet, you agree to Uniswap Labs’ <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.","Canceled":"Canceled","Change":"Change","Charts":"Charts","Check network status":"Check network status","Check out our v3 LP walkthrough and migration guides.":"Check out our v3 LP walkthrough and migration guides.","Claim":"Claim","Claim <0/> for {0}":["Claim <0/> for ",["0"]],"Claim UNI":"Claim UNI","Claim UNI Token":"Claim UNI Token","Claim UNI reward for {0}":["Claim UNI reward for ",["0"]],"Claim fees":"Claim fees","Claim your UNI tokens":"Claim your UNI tokens","Claimed":"Claimed","Claimed UNI!":"Claimed UNI!","Claimed!":"Claimed!","Claiming":"Claiming","Claiming UNI":"Claiming UNI","Claiming {0} UNI":["Claiming ",["0"]," UNI"],"Clear All":"Clear All","Clear all":"Clear all","Close":"Close","Closed":"Closed","Collect":"Collect","Collect as WETH":"Collect as WETH","Collect fees":"Collect fees","Collect {0}/{1} fees":["Collect ",["0"],"/",["1"]," fees"],"Collected":"Collected","Collecting":"Collecting","Collecting fees":"Collecting fees","Collecting fees will withdraw currently available fees for you.":"Collecting fees will withdraw currently available fees for you.","Confirm":"Confirm","Confirm Supply":"Confirm Supply","Confirm Swap":"Confirm Swap","Confirm swap":"Confirm swap","Confirm this transaction in your wallet":"Confirm this transaction in your wallet","Confirm transaction in wallet":"Confirm transaction in wallet","Connect Wallet":"Connect Wallet","Connect a wallet":"Connect a wallet","Connect to a wallet to find pools":"Connect to a wallet to find pools","Connect to a wallet to view your V2 liquidity.":"Connect to a wallet to view your V2 liquidity.","Connect to a wallet to view your liquidity.":"Connect to a wallet to view your liquidity.","Connect wallet to swap":"Connect wallet to swap","Connected with {name}":["Connected with ",["name"]],"Copied":"Copied","Copy Address":"Copy Address","Create Pool & Supply":"Create Pool & Supply","Create Proposal":"Create Proposal","Create a pair":"Create a pair","Create a pool":"Create a pool","Create an issue on GitHub":"Create an issue on GitHub","Create pool and add {0}/{1} V3 liquidity":["Create pool and add ",["0"],"/",["1"]," V3 liquidity"],"Create pool.":"Create pool.","Create {0}/{1} V3 pool":["Create ",["0"],"/",["1"]," V3 pool"],"Current price":"Current price","Current {0} Price:":["Current ",["0"]," Price:"],"Custom":"Custom","Dark Theme":"Dark Theme","Defeated":"Defeated","Delegate Votes":"Delegate Votes","Delegate voting power to {0}":["Delegate voting power to ",["0"]],"Delegated to:":"Delegated to:","Delegating votes":"Delegating votes","Deposit":"Deposit","Deposit Amounts":"Deposit Amounts","Deposit UNI-V2 LP Tokens":"Deposit UNI-V2 LP Tokens","Deposit liquidity":"Deposit liquidity","Deposit tokens to the {label} network.":["Deposit tokens to the ",["label"]," network."],"Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.":"Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.","Deposited liquidity:":"Deposited liquidity:","Deposited {0} UNI-V2":["Deposited ",["0"]," UNI-V2"],"Depositing Liquidity":"Depositing Liquidity","Description":"Description","Detailed":"Detailed","Details":"Details","Disconnect":"Disconnect","Discord":"Discord","Dismiss":"Dismiss","Docs":"Docs","Don’t see one of your v2 positions? <0>Import it.":"Don’t see one of your v2 positions? <0>Import it.","Earned UNI tokens represent voting shares in Uniswap governance.":"Earned UNI tokens represent voting shares in Uniswap governance.","Edit":"Edit","Efficiency Comparison":"Efficiency Comparison","Enter a percent":"Enter a percent","Enter a recipient":"Enter a recipient","Enter a valid slippage percentage":"Enter a valid slippage percentage","Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.":"Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.","Enter an amount":"Enter an amount","Enter valid list location":"Enter valid list location","Enter valid token address":"Enter valid token address","Enter {0} amount":["Enter ",["0"]," amount"],"Error":"Error","Error connecting":"Error connecting","Error connecting. Try refreshing the page.":"Error connecting. Try refreshing the page.","Error details":"Error details","Error importing list":"Error importing list","Estimate may differ due to your wallet gas settings":"Estimate may differ due to your wallet gas settings","Estimated network fee":"Estimated network fee","Etherscan":"Etherscan","Executed":"Executed","Expanded results from inactive Token Lists":"Expanded results from inactive Token Lists","Expected Output":"Expected Output","Expert Mode":"Expert Mode","Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.":"Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.","Expired":"Expired","Explore Uniswap Analytics.":"Explore Uniswap Analytics.","Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.":["Failed to switch networks from the Uniswap Interface. In order to use Uniswap on ",["0"],", you must change the network in your wallet."],"Fee Tier":"Fee Tier","Fee tier":"Fee tier","Fetching best price...":"Fetching best price...","Fetching best price…":"Fetching best price…","For":"For","For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.":"For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.","From":"From","From (at most)":"From (at most)","Full Range":"Full Range","Full range positions may earn less fees than concentrated positions. Learn more <0>here.":"Full range positions may earn less fees than concentrated positions. Learn more <0>here.","Get support on Discord":"Get support on Discord","Help Center":"Help Center","Hide":"Hide","Hide closed positions":"Hide closed positions","High Price Impact":"High Price Impact","How this app uses APIs":"How this app uses APIs","I understand":"I understand","If you purchase a token from this list, you may not be able to sell it back.":"If you purchase a token from this list, you may not be able to sell it back.","Import":"Import","Import List":"Import List","Import Pool":"Import Pool","Import V2 Pool":"Import V2 Pool","Import at your own risk":"Import at your own risk","In range":"In range","Increase Liquidity":"Increase Liquidity","Initial prices and pool share":"Initial prices and pool share","Initializing...":"Initializing...","Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.":["Input is estimated. You will sell at most <0>",["0"]," ",["1"]," or the transaction will revert."],"Install Metamask":"Install Metamask","Insufficient liquidity for this trade.":"Insufficient liquidity for this trade.","Insufficient {0}":["Insufficient ",["0"]],"Insufficient {0} balance":["Insufficient ",["0"]," balance"],"Interface Settings":"Interface Settings","Invalid pair":"Invalid pair","Invalid pair.":"Invalid pair.","Invalid price input":"Invalid price input","Invalid range selected. The min price must be lower than the max price.":"Invalid range selected. The min price must be lower than the max price.","Invalid recipient":"Invalid recipient","Language":"Language","Learn":"Learn","Learn about providing liquidity":"Learn about providing liquidity","Learn more":"Learn more","Legal & Privacy":"Legal & Privacy","Light Theme":"Light Theme","Liquidity":"Liquidity","Liquidity data not available.":"Liquidity data not available.","Liquidity provider rewards":"Liquidity provider rewards","Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.":"Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.","Lists":"Lists","Loaded":"Loaded","Loading":"Loading","MAX":"MAX","Manage":"Manage","Manage Liquidity in Rewards Pool":"Manage Liquidity in Rewards Pool","Manage Token Lists":"Manage Token Lists","Manage this pool.":"Manage this pool.","Max":"Max","Max Price":"Max Price","Max price":"Max price","Max slippage":"Max slippage","Max:":"Max:","Maximum sent":"Maximum sent","Menu":"Menu","Migrate":"Migrate","Migrate Liquidity to V3":"Migrate Liquidity to V3","Migrate V2 Liquidity":"Migrate V2 Liquidity","Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.":"Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.","Migrate {0}/{1} liquidity to V3":["Migrate ",["0"],"/",["1"]," liquidity to V3"],"Migrating":"Migrating","Min Price":"Min Price","Min price":"Min price","Min:":"Min:","Minimum received":"Minimum received","Missing dependencies":"Missing dependencies","Mock Toggle":"Mock Toggle","More":"More","Network Fee":"Network Fee","Network Warning":"Network Warning","Network fees exceed 50% of the swap amount!":"Network fees exceed 50% of the swap amount!","New Position":"New Position","No V2 Liquidity found.":"No V2 Liquidity found.","No active pools":"No active pools","No data":"No data","No description.":"No description.","No liquidity found.":"No liquidity found.","No pool found.":"No pool found.","No proposals found.":"No proposals found.","No results found.":"No results found.","Not created":"Not created","OFF":"OFF","ON":"ON","ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.":"ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.","Off":"Off","On":"On","Once you are happy with the rate click supply to review.":"Once you are happy with the rate click supply to review.","Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.":["Only UNI votes that were self delegated or delegated to another address before block ",["0"]," are eligible for voting."],"Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.":"Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.","Optimism Gateway":"Optimism Gateway","Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.":"Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.","Optimistic Etherscan":"Optimistic Etherscan","Out of range":"Out of range","Output is estimated.":"Output is estimated.","Output is estimated. If the price changes by more than {0}% your transaction will revert.":["Output is estimated. If the price changes by more than ",["0"],"% your transaction will revert."],"Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.":["Output is estimated. You will receive at least <0>",["0"]," ",["1"]," or the transaction will revert."],"Output will be sent to <0>{0}":["Output will be sent to <0>",["0"],""],"Owner":"Owner","Participating pools":"Participating pools","Pending":"Pending","Please confirm you would like to remove this list by typing REMOVE":"Please confirm you would like to remove this list by typing REMOVE","Please connect to Layer 1 Ethereum":"Please connect to Layer 1 Ethereum","Please connect to a supported network in the dropdown menu or in your wallet.":"Please connect to a supported network in the dropdown menu or in your wallet.","Please type the word \"{confirmWord}\" to enable expert mode.":["Please type the word \"",["confirmWord"],"\" to enable expert mode."],"Polygon Bridge":"Polygon Bridge","Polygonscan":"Polygonscan","Pool":"Pool","Pool Found!":"Pool Found!","Pool Rate":"Pool Rate","Pool rate":"Pool rate","Pool tokens in rewards pool:":"Pool tokens in rewards pool:","Pooled {0}:":["Pooled ",["0"],":"],"Pools Overview":"Pools Overview","Preview":"Preview","Price":"Price","Price Difference:":"Price Difference:","Price Impact":"Price Impact","Price Impact Too High":"Price Impact Too High","Price Updated":"Price Updated","Price impact":"Price impact","Price range":"Price range","Price updated":"Price updated","Price:":"Price:","Prices and pool share":"Prices and pool share","Proposal":"Proposal","Proposal Submitted":"Proposal Submitted","Proposal Title":"Proposal Title","Proposals":"Proposals","Proposals submitted by community members will appear here.":"Proposals submitted by community members will appear here.","Proposed Action":"Proposed Action","Proposer":"Proposer","Protocol Disclaimer":"Protocol Disclaimer","Queued":"Queued","Rates":"Rates","Read more about UNI":"Read more about UNI","Read more about Uniswap governance":"Read more about Uniswap governance","Read more about providing liquidity":"Read more about providing liquidity","Read more about unsupported assets":"Read more about unsupported assets","Recent Transactions":"Recent Transactions","Recent transactions":"Recent transactions","Recipient":"Recipient","Reload the page":"Reload the page","Remove":"Remove","Remove <0/> and <1/>":"Remove <0/> and <1/>","Remove Amount":"Remove Amount","Remove Delegate":"Remove Delegate","Remove Liquidity":"Remove Liquidity","Remove list":"Remove list","Removing {0} {1} and {2} {3}":["Removing ",["0"]," ",["1"]," and ",["2"]," ",["3"]],"Removing {0} {1} and{2} {3}":["Removing ",["0"]," ",["1"]," and",["2"]," ",["3"]],"Request Features":"Request Features","Reset":"Reset","Return":"Return","Review swap":"Review swap","Search by token name or address":"Search by token name or address","Search name or paste address":"Search name or paste address","Select Pair":"Select Pair","Select a network":"Select a network","Select a token":"Select a token","Select a token to find your v2 liquidity.":"Select a token to find your v2 liquidity.","Select an action":"Select an action","Selected Range":"Selected Range","Self":"Self","Self Delegate":"Self Delegate","Set Price Range":"Set Price Range","Set Starting Price":"Set Starting Price","Settings":"Settings","Share of Pool":"Share of Pool","Share of Pool:":"Share of Pool:","Show Portis":"Show Portis","Show closed positions":"Show closed positions","Simple":"Simple","Slippage tolerance":"Slippage tolerance","Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.":"Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.","Something went wrong":"Something went wrong","Something went wrong.":"Something went wrong.","Step 1. Get UNI-V2 Liquidity tokens":"Step 1. Get UNI-V2 Liquidity tokens","Submit new proposal":"Submit new proposal","Submitting Proposal":"Submitting Proposal","Submitting Vote":"Submitting Vote","Succeeded":"Succeeded","Success":"Success","Supply":"Supply","Supplying {0} {1} and {2} {3}":["Supplying ",["0"]," ",["1"]," and ",["2"]," ",["3"]],"Swap":"Swap","Swap <0/> for exactly <1/>":"Swap <0/> for exactly <1/>","Swap Anyway":"Swap Anyway","Swap details":"Swap details","Swap exactly <0/> for <1/>":"Swap exactly <0/> for <1/>","Swap failed: {0}":["Swap failed: ",["0"]],"Swap summary":"Swap summary","Swapping {0} {1} for {2} {3}":["Swapping ",["0"]," ",["1"]," for ",["2"]," ",["3"]],"Take a 10 minute survey to help us improve your experience in the Uniswap app.":"Take a 10 minute survey to help us improve your experience in the Uniswap app.","Tell us what you think ↗":"Tell us what you think ↗","Thanks for being part of the Uniswap community <0/>":"Thanks for being part of the Uniswap community <0/>","The % you will earn in fees.":"The % you will earn in fees.","The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.":"The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.","The app fetches blockchain data from The Graph’s hosted service.":"The app fetches blockchain data from The Graph’s hosted service.","The app fetches on-chain data and constructs contract calls with an Infura API.":"The app fetches on-chain data and constructs contract calls with an Infura API.","The app fetches the optimal trade route from a Uniswap Labs server.":"The app fetches the optimal trade route from a Uniswap Labs server.","The app logs anonymized usage statistics in order to improve over time.":"The app logs anonymized usage statistics in order to improve over time.","The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.":"The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.","The cost of sending this transaction is more than half of the value of the input amount.":"The cost of sending this transaction is more than half of the value of the input amount.","The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.":"The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.","The estimated difference between the USD values of input and output amounts.":"The estimated difference between the USD values of input and output amounts.","The input token cannot be transferred. There may be an issue with the input token.":"The input token cannot be transferred. There may be an issue with the input token.","The market price is outside your specified price range. Single-asset deposit only.":"The market price is outside your specified price range. Single-asset deposit only.","The most recent block number on this network. Prices update on every block.":"The most recent block number on this network. Prices update on every block.","The output token cannot be transferred. There may be an issue with the output token.":"The output token cannot be transferred. There may be an issue with the output token.","The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.":"The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.","The price of this pool is outside of your selected range. Your position is not currently earning fees.":"The price of this pool is outside of your selected range. Your position is not currently earning fees.","The price of this pool is within your selected range. Your position is currently earning fees.":"The price of this pool is within your selected range. Your position is currently earning fees.","The ratio of tokens you add will set the price of this pool.":"The ratio of tokens you add will set the price of this pool.","The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.":"The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.","There is no liquidity data.":"There is no liquidity data.","This app uses the following third-party APIs:":"This app uses the following third-party APIs:","This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.":"This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.","This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.":"This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.","This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.":"This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.","This token is not supported in the Uniswap Labs app":"This token is not supported in the Uniswap Labs app","This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the":["This tool will safely migrate your ",["0"]," liquidity to V3. The process is completely trustless thanks to the"],"This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.":"This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.","This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.":"This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.","Tip: Custom tokens are stored locally in your browser":"Tip: Custom tokens are stored locally in your browser","To":"To","To (at least)":"To (at least)","Token not supported":"Token not supported","Tokens":"Tokens","Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.":"Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.","Top pools":"Top pools","Total deposited":"Total deposited","Total deposits":"Total deposits","Trade Route":"Trade Route","Trading":"Trading","Transaction Settings":"Transaction Settings","Transaction Submitted":"Transaction Submitted","Transaction completed in":"Transaction completed in","Transaction deadline":"Transaction deadline","Transaction pending":"Transaction pending","Transaction rejected.":"Transaction rejected.","Transaction submitted":"Transaction submitted","Transfer Token":"Transfer Token","Try Again":"Try Again","Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.":"Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.","Turn On Expert Mode":"Turn On Expert Mode","UNI has arrived":"UNI has arrived","UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.":"UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.","UNI {0}/{1} Burned":["UNI ",["0"],"/",["1"]," Burned"],"UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.":["UNI-V2 LP tokens are required. Once you've added liquidity to the ",["0"],"-",["1"]," pool you can stake your liquidity tokens on this page."],"UNI-V2 {0}-{1}":["UNI-V2 ",["0"],"-",["1"]],"Unclaimed UNI":"Unclaimed UNI","Unclaimed fees":"Unclaimed fees","Undetermined":"Undetermined","Unexpected error. Could not estimate gas for the swap.":"Unexpected error. Could not estimate gas for the swap.","Unexpected issue with estimating the gas. Please try again.":"Unexpected issue with estimating the gas. Please try again.","Uniswap Governance":"Uniswap Governance","Uniswap Labs' Terms of Service":"Uniswap Labs' Terms of Service","Uniswap available in: <0>{0}":["Uniswap available in: <0>",["0"],""],"Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.":"Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.","Uniswap liquidity mining":"Uniswap liquidity mining","Uniswap migration contract↗":"Uniswap migration contract↗","Unknown Source":"Unknown Source","Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.":["Unknown error",["0"],". Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3."],"Unlock Votes":"Unlock Votes","Unlock Voting":"Unlock Voting","Unlocking Votes":"Unlocking Votes","Unsupported Asset":"Unsupported Asset","Unsupported Assets":"Unsupported Assets","Unsupported network–switch to another to trade.":"Unsupported network–switch to another to trade.","Untitled":"Untitled","Unwrap":"Unwrap","Unwrap <0/> to {0}":["Unwrap <0/> to ",["0"]],"Update Delegation":"Update Delegation","Update list":"Update list","Use the Uniswap Labs API to get faster quotes.":"Use the Uniswap Labs API to get faster quotes.","User":"User","V2 is not available on Layer 2. Switch to Layer 1 Ethereum.":"V2 is not available on Layer 2. Switch to Layer 1 Ethereum.","V2 liquidity":"V2 liquidity","V3 {0} Price:":["V3 ",["0"]," Price:"],"View accrued fees and analytics<0>↗":"View accrued fees and analytics<0>↗","View list":"View list","View on Etherscan":"View on Etherscan","View on Explorer":"View on Explorer","View transaction on Explorer":"View transaction on Explorer","Vote":"Vote","Vote Against":"Vote Against","Vote For":"Vote For","Vote against proposal {proposalId}":["Vote against proposal ",["proposalId"]],"Vote against proposal {proposalKey}":["Vote against proposal ",["proposalKey"]],"Vote against proposal {proposalKey} with reason \"{0}\"":["Vote against proposal ",["proposalKey"]," with reason \"",["0"],"\""],"Vote for proposal {proposalId}":["Vote for proposal ",["proposalId"]],"Vote for proposal {proposalKey}":["Vote for proposal ",["proposalKey"]],"Vote for proposal {proposalKey} with reason \"{0}\"":["Vote for proposal ",["proposalKey"]," with reason \"",["0"],"\""],"Vote to abstain on proposal {proposalId}":["Vote to abstain on proposal ",["proposalId"]],"Vote to abstain on proposal {proposalKey}":["Vote to abstain on proposal ",["proposalKey"]],"Vote to abstain on proposal {proposalKey} with reason \"{0}\"":["Vote to abstain on proposal ",["proposalKey"]," with reason \"",["0"],"\""],"Voting ended {0}":["Voting ended ",["0"]],"Voting ends approximately {0}":["Voting ends approximately ",["0"]],"Voting starts approximately {0}":["Voting starts approximately ",["0"]],"Waiting For Confirmation":"Waiting For Confirmation","Wallet Address or ENS name":"Wallet Address or ENS name","Weekly Rewards":"Weekly Rewards","Welcome to team Unicorn :)":"Welcome to team Unicorn :)","When you claim without withdrawing your liquidity remains in the mining pool.":"When you claim without withdrawing your liquidity remains in the mining pool.","When you withdraw, the contract will automagically claim UNI on your behalf!":"When you withdraw, the contract will automagically claim UNI on your behalf!","When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.":"When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.","Withdraw":"Withdraw","Withdraw & Claim":"Withdraw & Claim","Withdraw deposited liquidity":"Withdraw deposited liquidity","Withdrawing {0} UNI-V2":["Withdrawing ",["0"]," UNI-V2"],"Withdrew UNI-V2!":"Withdrew UNI-V2!","Wrap":"Wrap","Wrap <0/> to {0}":["Wrap <0/> to ",["0"]],"Wrong Network":"Wrong Network","You already have an active or pending proposal":"You already have an active or pending proposal","You are creating a pool":"You are creating a pool","You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.":["You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current ",["0"]," price."],"You are the first liquidity provider.":"You are the first liquidity provider.","You can either vote on each proposal yourself or delegate your votes to a third party.":"You can either vote on each proposal yourself or delegate your votes to a third party.","You can now trade {0}":["You can now trade ",["0"]],"You don't have enough votes to submit a proposal":"You don't have enough votes to submit a proposal","You don’t have liquidity in this pool yet.":"You don’t have liquidity in this pool yet.","You may have lost your network connection, or {label} might be down right now.":["You may have lost your network connection, or ",["label"]," might be down right now."],"You may have lost your network connection.":"You may have lost your network connection.","You might consider waiting until the network fees go down to complete this transaction.":"You might consider waiting until the network fees go down to complete this transaction.","You must connect an account.":"You must connect an account.","You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.":["You must give the Uniswap smart contracts permission to use your ",["0"],". You only have to do this once per token."],"You must have {formattedProposalThreshold} votes to submit a proposal":["You must have ",["formattedProposalThreshold"]," votes to submit a proposal"],"You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.":"You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.","You will also collect fees earned from this position.":"You will also collect fees earned from this position.","You will receive":"You will receive","You will receive at least {0} {1} or the transaction will revert.":["You will receive at least ",["0"]," ",["1"]," or the transaction will revert."],"You will send at most {0} {1} or the transaction will revert.":["You will send at most ",["0"]," ",["1"]," or the transaction will revert."],"Your V2 liquidity":"Your V2 liquidity","Your active V3 liquidity positions will appear here.":"Your active V3 liquidity positions will appear here.","Your liquidity deposits":"Your liquidity deposits","Your pool share:":"Your pool share:","Your position":"Your position","Your position has 0 liquidity, and is not earning fees.":"Your position has 0 liquidity, and is not earning fees.","Your position will appear here.":"Your position will appear here.","Your position will be 100% composed of {0} at this price":["Your position will be 100% composed of ",["0"]," at this price"],"Your position will be 100% {0} at this price.":["Your position will be 100% ",["0"]," at this price."],"Your position will not earn fees or be used in trades until the market price moves into your range.":"Your position will not earn fees or be used in trades until the market price moves into your range.","Your positions":"Your positions","Your rate":"Your rate","Your total pool tokens:":"Your total pool tokens:","Your transaction cost will be much higher as it includes the gas to create the pool.":"Your transaction cost will be much higher as it includes the gas to create the pool.","Your transaction may be frontrun":"Your transaction may be frontrun","Your transaction may fail":"Your transaction may fail","Your transaction will revert if it has been pending for longer than this period of time.":"Your transaction will revert if it has been pending for longer than this period of time.","Your transaction will revert if it is pending for more than this period of time.":"Your transaction will revert if it is pending for more than this period of time.","Your transaction will revert if the price changes unfavorably by more than this percentage.":"Your transaction will revert if the price changes unfavorably by more than this percentage.","Your transactions will appear here...":"Your transactions will appear here...","Your unclaimed UNI":"Your unclaimed UNI","after slippage":"after slippage","confirm":"confirm","for {0}":["for ",["0"]],"gwei":"gwei","has socks emoji":"has socks emoji","here.":"here.","https:// or ipfs:// or ENS name":"https:// or ipfs:// or ENS name","minutes":"minutes","via {0}":["via ",["0"]],"via {0} token list":["via ",["0"]," token list"],"{0, plural, one {Import token} other {Import tokens}}":[["0","plural",{one:"Import token",other:"Import tokens"}]],"{0}":[["0"]],"{0} %":[["0"]," %"],"{0} <0/> per <1/>":[["0"]," <0/> per <1/>"],"{0} Custom Tokens":[["0"]," Custom Tokens"],"{0} Deposited":[["0"]," Deposited"],"{0} ETH":[["0"]," ETH"],"{0} Fees Earned:":[["0"]," Fees Earned:"],"{0} Pending":[["0"]," Pending"],"{0} UNI":[["0"]," UNI"],"{0} UNI / week":[["0"]," UNI / week"],"{0} UNI-V2":[["0"]," UNI-V2"],"{0} UNI-V2 LP tokens available":[["0"]," UNI-V2 LP tokens available"],"{0} Votes":[["0"]," Votes"],"{0} per {1}":[["0"]," per ",["1"]],"{0} tokens":[["0"]," tokens"],"{0} {1} Price:":[["0"]," ",["1"]," Price:"],"{0} {nativeCurrencySymbol}":[["0"]," ",["nativeCurrencySymbol"]],"{0} • Added by user":[["0"]," • Added by user"],"{0}%":[["0"],"%"],"{0}% fee tier":[["0"],"% fee tier"],"{0}% pool":[["0"],"% pool"],"{0}% select":[["0"],"% select"],"{0}-{1} Liquidity Mining":[["0"],"-",["1"]," Liquidity Mining"],"{0}/{1} LP NFT":[["0"],"/",["1"]," LP NFT"],"{0}/{1} LP Tokens":[["0"],"/",["1"]," LP Tokens"],"{SOCKS_AMOUNT} UNI":[["SOCKS_AMOUNT"]," UNI"],"{USER_AMOUNT} UNI":[["USER_AMOUNT"]," UNI"],"{activeTokensOnThisChain} tokens":[["activeTokensOnThisChain"]," tokens"],"{integrator} fee":[["integrator"]," fee"],"{label} token bridge":[["label"]," token bridge"],"{min}m {sec}s":[["min"],"m ",["sec"],"s"],"{percentForSlider}%":[["percentForSlider"],"%"],"{sec}s":[["sec"],"s"],"{tokenB} per {tokenA}":[["tokenB"]," per ",["tokenA"]],"← Back to Pools Overview":"← Back to Pools Overview"}}; diff --git a/rollup.config.js b/rollup.config.js index ff8e6db0b0e..3de214f2780 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -2,16 +2,12 @@ * Bundles the widgets library, which is released independently of the interface application. * This library lives in src/lib, but shares code with the interface application. */ -require('dotenv').config() // import eslint from '@rollup/plugin-eslint' // import babel from '@rollup/plugin-babel' -import commonjs from '@rollup/plugin-commonjs' -import babel, { getBabelOutputPlugin } from '@rollup/plugin-babel' import nodePolyfills from 'rollup-plugin-node-polyfills' // import { getBabelOutputPlugin } from '@rollup/plugin-babel' import json from '@rollup/plugin-json' -import resolve from '@rollup/plugin-node-resolve' import url from '@rollup/plugin-url' import svgr from '@svgr/rollup' import dts from 'rollup-plugin-dts' @@ -22,6 +18,7 @@ import typescript from 'rollup-plugin-typescript2' // import babel from '@rollup/plugin-babel' // import { DEFAULT_EXTENSIONS } from '@babel/core' import replace from '@rollup/plugin-replace' +require('dotenv').config() // import external from 'rollup-plugin-peer-deps-external' // import { dependencies } from './package.json' From 265e4be4375c2c6ff8f0c060e56a644600b14387 Mon Sep 17 00:00:00 2001 From: David Wisner Date: Sun, 30 Jan 2022 19:36:09 +0800 Subject: [PATCH 12/15] styled-components peer --- package.json | 6 +++-- yarn.lock | 64 ++++++---------------------------------------------- 2 files changed, 11 insertions(+), 59 deletions(-) diff --git a/package.json b/package.json index 5c65d59c8a2..d6963ba1b54 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "files": [ "dist2" ], - "version": "1.0.3", + "version": "1.0.4", "private": false, "resolutions": { "@walletconnect/ethereum-provider": "1.7.1" @@ -44,6 +44,9 @@ ] }, "license": "GPL-3.0-or-later", + "peerDependencies": { + "styled-components": "5.3.0" + }, "dependencies": { "@babel/runtime": "^7.16.7", "@ethersproject/abi": "^5.4.1", @@ -198,7 +201,6 @@ "sass": "^1.45.1", "serve": "^11.3.2", "start-server-and-test": "^1.11.0", - "styled-components": "^5.3.0", "tiny-invariant": "^1.2.0", "typechain": "^5.0.0", "typescript": "^4.2.3", diff --git a/yarn.lock b/yarn.lock index 472d3f99e08..c5624c46b9b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -87,7 +87,7 @@ jsesc "^2.5.1" source-map "^0.5.0" -"@babel/helper-annotate-as-pure@^7.0.0", "@babel/helper-annotate-as-pure@^7.16.7": +"@babel/helper-annotate-as-pure@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== @@ -1276,7 +1276,7 @@ globals "^11.1.0" lodash "^4.17.19" -"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.12.1", "@babel/traverse@^7.13.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.0": +"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.12.1", "@babel/traverse@^7.13.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.7.0": version "7.16.8" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.8.tgz#bab2f2b09a5fe8a8d9cad22cbfe3ba1d126fef9c" integrity sha512-xe+H7JlvKsDQwXRsBhSnq1/+9c+LlQcCK3Tn/l5sbx02HYns/cn7ibp9+RV1sIUqu7hKg91NWsgHurO9dowITQ== @@ -1411,7 +1411,7 @@ resolved "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz" integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== -"@emotion/is-prop-valid@0.8.8", "@emotion/is-prop-valid@^0.8.1", "@emotion/is-prop-valid@^0.8.8": +"@emotion/is-prop-valid@0.8.8", "@emotion/is-prop-valid@^0.8.1": version "0.8.8" resolved "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz" integrity sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA== @@ -1462,12 +1462,12 @@ "@emotion/styled-base" "^10.0.27" babel-plugin-emotion "^10.0.27" -"@emotion/stylis@0.8.5", "@emotion/stylis@^0.8.4": +"@emotion/stylis@0.8.5": version "0.8.5" resolved "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz" integrity sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ== -"@emotion/unitless@0.7.5", "@emotion/unitless@^0.7.4": +"@emotion/unitless@0.7.5": version "0.7.5" resolved "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz" integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== @@ -6762,16 +6762,6 @@ babel-plugin-polyfill-regenerator@^0.3.0: dependencies: "@babel/helper-define-polyfill-provider" "^0.3.0" -"babel-plugin-styled-components@>= 1.12.0": - version "1.13.1" - resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-1.13.1.tgz#5ecd28b207627c2a26ef8d5da401e9644065095a" - integrity sha512-iY11g5orsdBnvWtXKCFBzDyTxZ9jvmkcYCCs5ONlvASYltDRhieCVzeDC7Do0fSW7psAL0zfVoXB3FHz2CkUSg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-module-imports" "^7.0.0" - babel-plugin-syntax-jsx "^6.18.0" - lodash "^4.17.11" - babel-plugin-syntax-async-functions@^6.8.0: version "6.13.0" resolved "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz" @@ -7877,11 +7867,6 @@ camelcase@^6.0.0, camelcase@^6.1.0, camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== -camelize@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz" - integrity sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs= - caniuse-api@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" @@ -8885,11 +8870,6 @@ css-blank-pseudo@^0.1.4: dependencies: postcss "^7.0.5" -css-color-keywords@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz" - integrity sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU= - css-color-names@0.0.4, css-color-names@^0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" @@ -8969,15 +8949,6 @@ css-select@^4.1.3: domutils "^2.6.0" nth-check "^2.0.0" -css-to-react-native@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-3.0.0.tgz#62dbe678072a824a689bcfee011fc96e02a7d756" - integrity sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ== - dependencies: - camelize "^1.0.0" - css-color-keywords "^1.0.0" - postcss-value-parser "^4.0.2" - css-tree@1.0.0-alpha.37: version "1.0.0-alpha.37" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" @@ -12368,7 +12339,7 @@ hmac-drbg@^1.0.1: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: +hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: version "3.3.2" resolved "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz" integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== @@ -19491,11 +19462,6 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" -shallowequal@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" - integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== - shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -20224,22 +20190,6 @@ style-loader@1.3.0: loader-utils "^2.0.0" schema-utils "^2.7.0" -styled-components@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-5.3.0.tgz#e47c3d3e9ddfff539f118a3dd0fd4f8f4fb25727" - integrity sha512-bPJKwZCHjJPf/hwTJl6TbkSZg/3evha+XPEizrZUGb535jLImwDUdjTNxXqjjaASt2M4qO4AVfoHJNe3XB/tpQ== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/traverse" "^7.4.5" - "@emotion/is-prop-valid" "^0.8.8" - "@emotion/stylis" "^0.8.4" - "@emotion/unitless" "^0.7.4" - babel-plugin-styled-components ">= 1.12.0" - css-to-react-native "^3.0.0" - hoist-non-react-statics "^3.0.0" - shallowequal "^1.1.0" - supports-color "^5.5.0" - styled-system@^5.0.0, styled-system@^5.1.5: version "5.1.5" resolved "https://registry.npmjs.org/styled-system/-/styled-system-5.1.5.tgz" @@ -20292,7 +20242,7 @@ supports-color@^2.0.0: resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= -supports-color@^5.3.0, supports-color@^5.5.0: +supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== From 829aaf8a4c7ed6478fd668cc82e0d498eacb44da Mon Sep 17 00:00:00 2001 From: David Wisner Date: Sun, 30 Jan 2022 19:38:20 +0800 Subject: [PATCH 13/15] update esm --- dist2/snowflake.esm.js | 28162 +++++++++++++++++---------------------- 1 file changed, 12063 insertions(+), 16099 deletions(-) diff --git a/dist2/snowflake.esm.js b/dist2/snowflake.esm.js index 5bf782315ea..00beaa70597 100644 --- a/dist2/snowflake.esm.js +++ b/dist2/snowflake.esm.js @@ -1,16186 +1,12150 @@ -import { jsx, jsxs, Fragment } from 'react/jsx-runtime' -import styled, { - keyframes, - css, - createGlobalStyle, - ThemeProvider as ThemeProvider$1, - ThemeContext, - useTheme as useTheme$1, -} from 'styled-components/macro' -import * as React from 'react' -import React__default, { - useMemo, - useEffect, - useState, - useCallback, - useContext, - useRef, - useLayoutEffect, - memo, - Suspense, -} from 'react' -import { useDispatch, useSelector, shallowEqual, Provider as Provider$1 } from 'react-redux' -import { createAction, createSlice, nanoid, createReducer, configureStore } from '@reduxjs/toolkit' -import qs, { parse, stringify } from 'qs' -import { - useLocation, - Link as Link$1, - useHistory, - NavLink, - Redirect, - Route as Route$3, - Switch, - HashRouter, -} from 'react-router-dom' -import { getAddress, isAddress as isAddress$1 } from '@ethersproject/address' -import { Trans, t, Plural } from '@lingui/macro' -import { useWeb3React, UnsupportedChainIdError, createWeb3ReactRoot, Web3ReactProvider } from '@web3-react/core' -import { - Percent, - Token, - WETH9, - NativeCurrency, - Ether, - CurrencyAmount, - TradeType, - Price, - Fraction, -} from '@uniswap/sdk-core' -import JSBI from 'jsbi' -import { Text as Text$1, Box as Box$1 } from 'rebass' -import { AddressZero, MaxUint256 } from '@ethersproject/constants' -import { Contract } from '@ethersproject/contracts' -import { atom } from 'jotai' -import { useAtomValue, useUpdateAtom, atomWithDefault } from 'jotai/utils' -import { createMulticall, NEVER_RELOAD } from '@uniswap/redux-multicall' -import { FACTORY_ADDRESS, Pair, computePairAddress, Trade, Route as Route$2, Router } from '@uniswap/v2-sdk' -import { - FACTORY_ADDRESS as FACTORY_ADDRESS$1, - Pool as Pool$1, - computePoolAddress, - FeeAmount, - Route as Route$1, - SwapQuoter, - toHex, - Trade as Trade$2, - SwapRouter, -} from '@uniswap/v3-sdk' -import { combineReducers, createStore } from 'redux' -import { namehash } from '@ethersproject/hash' -import { initializeApp } from 'firebase/app' -import { getDatabase, push, ref } from 'firebase/database' -import { arrayify, hexZeroPad, hexStripZeros, splitSignature } from '@ethersproject/bytes' -import { parseBytes32String } from '@ethersproject/strings' -import { initializeConnector } from 'widgets-web3-react/core' -import { EMPTY } from 'widgets-web3-react/empty' -import CID from 'cids' -import { getNameFromData, rmPrefix } from 'multicodec' -import { decode, toB58String } from 'multihashes' -import { Interface } from '@ethersproject/abi' -import { - X, - ExternalLink as ExternalLink$1, - Trash, - Check, - ArrowDown, - Info, - HelpCircle, - Coffee, - MessageCircle, - Globe, - Moon, - Sun, - BookOpen, - FileText, - ChevronLeft, - AlertTriangle, - CheckCircle, - Copy as Copy$1, - Triangle, - ArrowLeft, - ArrowRight, - Activity, - ArrowDownCircle, - ChevronDown, - AlertOctagon, - Heart, - AlertCircle, - ArrowUpRight, - Slash, - Plus, - Edit, - Settings, - Lock, - ArrowUpCircle, -} from 'react-feather' -import ReactGA from 'react-ga' -import { Box, Button as Button$1 } from 'rebass/styled-components' -import { darken, transparentize, readableColor, shade } from 'polished' -import ReactConfetti from 'react-confetti' -import { DialogOverlay, DialogContent } from '@reach/dialog' -import { animated, useTransition, useSpring } from 'react-spring' -import { useGesture } from 'react-use-gesture' -import { UAParser } from 'ua-parser-js' -import { createApi, fetchBaseQuery, skipToken, setupListeners } from '@reduxjs/toolkit/query/react' -import { save, load } from 'redux-localstorage-simple' -import { gql, ClientError, GraphQLClient } from 'graphql-request' -import { getVersionUpgrade, VersionUpgrade, minVersionBump } from '@uniswap/token-lists' -import { Protocol, Trade as Trade$1, SwapRouter as SwapRouter$1 } from '@uniswap/router-sdk' -import ms from 'ms.macro' -import { parseUnits } from '@ethersproject/units' -import useScrollPosition from '@react-hook/window-scroll' -import Portal from '@reach/portal' -import { usePopper } from 'react-popper' -import { SafeAppConnector } from '@gnosis.pm/safe-apps-web3-react' -import { InjectedConnector } from '@web3-react/injected-connector' -import { PortisConnector } from '@web3-react/portis-connector' -import { WalletConnectConnector } from '@web3-react/walletconnect-connector' -import { WalletLinkConnector } from '@web3-react/walletlink-connector' -import { Web3Provider } from '@ethersproject/providers' -import { FortmaticConnector as FortmaticConnector$1 } from '@web3-react/fortmatic-connector' -import { AbstractConnector } from '@web3-react/abstract-connector' -import invariant from 'tiny-invariant' -import jazzicon from '@metamask/jazzicon' -import { BigNumber } from '@ethersproject/bignumber' -import copy from 'copy-to-clipboard' -import { useSpring as useSpring$1 } from 'react-spring/web' -import useResizeObserver from 'use-resize-observer' -import AutoSizer from 'react-virtualized-auto-sizer' -import { FixedSizeList } from 'react-window' -import Vibrant from 'node-vibrant/lib/bundle' -import { hex } from 'wcag-contrast' -import { i18n } from '@lingui/core' -import { I18nProvider } from '@lingui/react' -import { - af, - ar, - ca, - cs, - da, - de, - el, - en, - es, - fi, - fr, - he, - hu, - id, - it, - ja, - ko, - nl, - no, - pl, - pt, - ro, - ru, - sr, - sv, - sw, - tr, - uk, - vi, - zh, -} from 'make-plural/plurals' -import { ChainId, routeAmountsToString, IMetric, setGlobalMetric, AlphaRouter } from '@uniswap/smart-order-router' -import { providers } from 'ethers/lib/ethers' - -/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */ -/* global Reflect, Promise */ - -var extendStatics = function (d, b) { - extendStatics = - Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && - function (d, b) { - d.__proto__ = b - }) || - function (d, b) { - for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p] - } - return extendStatics(d, b) -} - -function __extends(d, b) { - if (typeof b !== 'function' && b !== null) - throw new TypeError('Class extends value ' + String(b) + ' is not a constructor or null') - extendStatics(d, b) - function __() { - this.constructor = d - } - d.prototype = b === null ? Object.create(b) : ((__.prototype = b.prototype), new __()) -} - -var __assign = function () { - __assign = - Object.assign || - function __assign(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i] - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p] - } - return t - } - return __assign.apply(this, arguments) -} - -function __rest(s, e) { - var t = {} - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p] - if (s != null && typeof Object.getOwnPropertySymbols === 'function') - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]] - } - return t -} - -function __awaiter(thisArg, _arguments, P, generator) { - function adopt(value) { - return value instanceof P - ? value - : new P(function (resolve) { - resolve(value) - }) - } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { - try { - step(generator.next(value)) - } catch (e) { - reject(e) - } - } - function rejected(value) { - try { - step(generator['throw'](value)) - } catch (e) { - reject(e) - } - } - function step(result) { - result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected) - } - step((generator = generator.apply(thisArg, _arguments || [])).next()) - }) -} - -function __generator(thisArg, body) { - var _ = { - label: 0, - sent() { - if (t[0] & 1) throw t[1] - return t[1] - }, - trys: [], - ops: [], - }, - f, - y, - t, - g - return ( - (g = { next: verb(0), throw: verb(1), return: verb(2) }), - typeof Symbol === 'function' && - (g[Symbol.iterator] = function () { - return this - }), - g - ) - function verb(n) { - return function (v) { - return step([n, v]) - } - } - function step(op) { - if (f) throw new TypeError('Generator is already executing.') - while (_) - try { - if ( - ((f = 1), - y && - (t = op[0] & 2 ? y['return'] : op[0] ? y['throw'] || ((t = y['return']) && t.call(y), 0) : y.next) && - !(t = t.call(y, op[1])).done) - ) - return t - if (((y = 0), t)) op = [op[0] & 2, t.value] - switch (op[0]) { - case 0: - case 1: - t = op - break - case 4: - _.label++ - return { value: op[1], done: false } - case 5: - _.label++ - y = op[1] - op = [0] - continue - case 7: - op = _.ops.pop() - _.trys.pop() - continue - default: - if (!((t = _.trys), (t = t.length > 0 && t[t.length - 1])) && (op[0] === 6 || op[0] === 2)) { - _ = 0 - continue - } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { - _.label = op[1] - break - } - if (op[0] === 6 && _.label < t[1]) { - _.label = t[1] - t = op - break - } - if (t && _.label < t[2]) { - _.label = t[2] - _.ops.push(op) - break - } - if (t[2]) _.ops.pop() - _.trys.pop() - continue - } - op = body.call(thisArg, _) - } catch (e) { - op = [6, e] - y = 0 - } finally { - f = t = 0 - } - if (op[0] & 5) throw op[1] - return { value: op[0] ? op[1] : void 0, done: true } - } -} - -function __values(o) { - var s = typeof Symbol === 'function' && Symbol.iterator, - m = s && o[s], - i = 0 - if (m) return m.call(o) - if (o && typeof o.length === 'number') - return { - next() { - if (o && i >= o.length) o = void 0 - return { value: o && o[i++], done: !o } - }, - } - throw new TypeError(s ? 'Object is not iterable.' : 'Symbol.iterator is not defined.') -} - -function __read(o, n) { - var m = typeof Symbol === 'function' && o[Symbol.iterator] - if (!m) return o - var i = m.call(o), - r, - ar = [], - e - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value) - } catch (error) { - e = { error } - } finally { - try { - if (r && !r.done && (m = i['return'])) m.call(i) - } finally { - if (e) throw e.error - } - } - return ar -} - -function __spreadArray(to, from, pack) { - if (pack || arguments.length === 2) - for (var i = 0, l = from.length, ar; i < l; i++) { - if (ar || !(i in from)) { - if (!ar) ar = Array.prototype.slice.call(from, 0, i) - ar[i] = from[i] - } - } - return to.concat(ar || Array.prototype.slice.call(from)) -} - -function __makeTemplateObject(cooked, raw) { - if (Object.defineProperty) { - Object.defineProperty(cooked, 'raw', { value: raw }) - } else { - cooked.raw = raw - } - return cooked -} - -var rotate$2 = keyframes( - templateObject_1$1n || - (templateObject_1$1n = __makeTemplateObject( - ['\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n'], - ['\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n'] - )) -) -var StyledSVG = styled.svg( - templateObject_2$11 || - (templateObject_2$11 = __makeTemplateObject( - ['\n animation: 2s ', ' linear infinite;\n height: ', ';\n width: ', ';\n path {\n stroke: ', ';\n }\n'], - [ - '\n animation: 2s ', - ' linear infinite;\n height: ', - ';\n width: ', - ';\n path {\n stroke: ', - ';\n }\n', - /** - * Takes in custom size and stroke for circle color, default to primary color as fill, - * need ...rest for layered styles on top - */ - ] - )), - rotate$2, - function (_a) { - var size = _a.size - return size - }, - function (_a) { - var size = _a.size - return size - }, - function (_a) { - var stroke = _a.stroke, - theme = _a.theme - return stroke !== null && stroke !== void 0 ? stroke : theme.primary1 - } -) -/** - * Takes in custom size and stroke for circle color, default to primary color as fill, - * need ...rest for layered styles on top - */ -function Loader(_a) { - var _b = _a.size, - size = _b === void 0 ? '16px' : _b, - stroke = _a.stroke, - rest = __rest(_a, ['size', 'stroke']) - return jsx( - StyledSVG, - __assign({ viewBox: '0 0 24 24', fill: 'none', xmlns: 'http://www.w3.org/2000/svg', size, stroke }, rest, { - children: jsx( - 'path', - { - d: 'M12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22C17.5228 22 22 17.5228 22 12C22 9.27455 20.9097 6.80375 19.1414 5', - strokeWidth: '2.5', - strokeLinecap: 'round', - strokeLinejoin: 'round', - }, - void 0 - ), - }), - void 0 - ) +import { jsx, jsxs, Fragment } from 'react/jsx-runtime'; +import styled, { keyframes, css, createGlobalStyle, ThemeProvider as ThemeProvider$1, ThemeContext, useTheme as useTheme$1 } from 'styled-components/macro'; +import * as React from 'react'; +import React__default, { useMemo, useEffect, useState, useCallback, useContext, useRef, useLayoutEffect, memo, Suspense } from 'react'; +import { useDispatch, useSelector, shallowEqual, Provider as Provider$1 } from 'react-redux'; +import { createAction, createSlice, nanoid, createReducer, configureStore } from '@reduxjs/toolkit'; +import qs, { parse, stringify } from 'qs'; +import { useLocation, Link as Link$1, useHistory, NavLink, Redirect, Route as Route$3, Switch, HashRouter } from 'react-router-dom'; +import { getAddress, isAddress as isAddress$1 } from '@ethersproject/address'; +import { Trans, t, Plural } from '@lingui/macro'; +import { useWeb3React, UnsupportedChainIdError, createWeb3ReactRoot, Web3ReactProvider } from '@web3-react/core'; +import { Percent, Token, WETH9, NativeCurrency, Ether, CurrencyAmount, TradeType, Price, Fraction } from '@uniswap/sdk-core'; +import JSBI from 'jsbi'; +import { Text as Text$1, Box as Box$1 } from 'rebass'; +import { AddressZero, MaxUint256 } from '@ethersproject/constants'; +import { Contract } from '@ethersproject/contracts'; +import { atom } from 'jotai'; +import { useAtomValue, useUpdateAtom, atomWithDefault } from 'jotai/utils'; +import { createMulticall, NEVER_RELOAD } from '@uniswap/redux-multicall'; +import { FACTORY_ADDRESS, Pair, computePairAddress, Trade, Route as Route$2, Router } from '@uniswap/v2-sdk'; +import { FACTORY_ADDRESS as FACTORY_ADDRESS$1, Pool as Pool$1, computePoolAddress, FeeAmount, Route as Route$1, SwapQuoter, toHex, Trade as Trade$2, SwapRouter } from '@uniswap/v3-sdk'; +import { combineReducers, createStore } from 'redux'; +import { namehash } from '@ethersproject/hash'; +import { initializeApp } from 'firebase/app'; +import { getDatabase, push, ref } from 'firebase/database'; +import { arrayify, hexZeroPad, hexStripZeros, splitSignature } from '@ethersproject/bytes'; +import { parseBytes32String } from '@ethersproject/strings'; +import { initializeConnector } from 'widgets-web3-react/core'; +import { EMPTY } from 'widgets-web3-react/empty'; +import CID from 'cids'; +import { getNameFromData, rmPrefix } from 'multicodec'; +import { decode, toB58String } from 'multihashes'; +import { Interface } from '@ethersproject/abi'; +import { X, ExternalLink as ExternalLink$1, Trash, Check, ArrowDown, Info, HelpCircle, Coffee, MessageCircle, Globe, Moon, Sun, BookOpen, FileText, ChevronLeft, AlertTriangle, CheckCircle, Copy as Copy$1, Triangle, ArrowLeft, ArrowRight, Activity, ArrowDownCircle, ChevronDown, AlertOctagon, Heart, AlertCircle, ArrowUpRight, Slash, Plus, Edit, Settings, Lock, ArrowUpCircle } from 'react-feather'; +import ReactGA from 'react-ga'; +import { Box, Button as Button$1 } from 'rebass/styled-components'; +import { darken, transparentize, readableColor, shade } from 'polished'; +import ReactConfetti from 'react-confetti'; +import { DialogOverlay, DialogContent } from '@reach/dialog'; +import { animated, useTransition, useSpring } from 'react-spring'; +import { useGesture } from 'react-use-gesture'; +import { UAParser } from 'ua-parser-js'; +import { createApi, fetchBaseQuery, skipToken, setupListeners } from '@reduxjs/toolkit/query/react'; +import { save, load } from 'redux-localstorage-simple'; +import { gql, ClientError, GraphQLClient } from 'graphql-request'; +import { getVersionUpgrade, VersionUpgrade, minVersionBump } from '@uniswap/token-lists'; +import { Protocol, Trade as Trade$1, SwapRouter as SwapRouter$1 } from '@uniswap/router-sdk'; +import ms from 'ms.macro'; +import { parseUnits } from '@ethersproject/units'; +import useScrollPosition from '@react-hook/window-scroll'; +import Portal from '@reach/portal'; +import { usePopper } from 'react-popper'; +import { SafeAppConnector } from '@gnosis.pm/safe-apps-web3-react'; +import { InjectedConnector } from '@web3-react/injected-connector'; +import { PortisConnector } from '@web3-react/portis-connector'; +import { WalletConnectConnector } from '@web3-react/walletconnect-connector'; +import { WalletLinkConnector } from '@web3-react/walletlink-connector'; +import { Web3Provider } from '@ethersproject/providers'; +import { FortmaticConnector as FortmaticConnector$1 } from '@web3-react/fortmatic-connector'; +import { AbstractConnector } from '@web3-react/abstract-connector'; +import invariant from 'tiny-invariant'; +import jazzicon from '@metamask/jazzicon'; +import { BigNumber } from '@ethersproject/bignumber'; +import copy from 'copy-to-clipboard'; +import { useSpring as useSpring$1 } from 'react-spring/web'; +import useResizeObserver from 'use-resize-observer'; +import AutoSizer from 'react-virtualized-auto-sizer'; +import { FixedSizeList } from 'react-window'; +import Vibrant from 'node-vibrant/lib/bundle'; +import { hex } from 'wcag-contrast'; +import { i18n } from '@lingui/core'; +import { I18nProvider } from '@lingui/react'; +import { af, ar, ca, cs, da, de, el, en, es, fi, fr, he, hu, id, it, ja, ko, nl, no, pl, pt, ro, ru, sr, sv, sw, tr, uk, vi, zh } from 'make-plural/plurals'; +import { ChainId, routeAmountsToString, IMetric, setGlobalMetric, AlphaRouter } from '@uniswap/smart-order-router'; +import { providers } from 'ethers/lib/ethers'; + +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ +/* global Reflect, Promise */ + +var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); +}; + +function __extends(d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +} + +var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; + +function __rest(s, e) { + var t = {}; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { + if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) + t[p[i]] = s[p[i]]; + } + return t; +} + +function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +} + +function __generator(thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +} + +function __values(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +} + +function __read(o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +} + +function __spreadArray(to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); +} + +function __makeTemplateObject(cooked, raw) { + if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } + return cooked; } -var templateObject_1$1n, templateObject_2$11 -var useAppDispatch = function () { - return useDispatch() -} -var useAppSelector = useSelector - -var updateMatchesDarkMode = createAction('user/updateMatchesDarkMode') -var updateUserDarkMode = createAction('user/updateUserDarkMode') -var updateUserExpertMode = createAction('user/updateUserExpertMode') -var updateUserLocale = createAction('user/updateUserLocale') -var updateShowSurveyPopup = createAction('user/updateShowSurveyPopup') -var updateUserClientSideRouter = createAction('user/updateUserClientSideRouter') -var updateHideClosedPositions = createAction('user/hideClosedPositions') -var updateUserSlippageTolerance = createAction('user/updateUserSlippageTolerance') -var updateUserDeadline = createAction('user/updateUserDeadline') -var addSerializedToken = createAction('user/addSerializedToken') -var removeSerializedToken = createAction('user/removeSerializedToken') -var addSerializedPair = createAction('user/addSerializedPair') -var removeSerializedPair = createAction('user/removeSerializedPair') - -function parsedQueryString(search) { - if (!search) { - // react-router-dom places search string in the hash - var hash = window.location.hash - search = hash.substr(hash.indexOf('?')) - } - return search && search.length > 1 ? parse(search, { parseArrays: false, ignoreQueryPrefix: true }) : {} -} -function useParsedQueryString() { - var search = useLocation().search - return useMemo( - function () { - return parsedQueryString(search) - }, - [search] - ) +var rotate$2 = keyframes(templateObject_1$1n || (templateObject_1$1n = __makeTemplateObject(["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"], ["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"]))); +var StyledSVG = styled.svg(templateObject_2$11 || (templateObject_2$11 = __makeTemplateObject(["\n animation: 2s ", " linear infinite;\n height: ", ";\n width: ", ";\n path {\n stroke: ", ";\n }\n"], ["\n animation: 2s ", " linear infinite;\n height: ", ";\n width: ", ";\n path {\n stroke: ", ";\n }\n" + /** + * Takes in custom size and stroke for circle color, default to primary color as fill, + * need ...rest for layered styles on top + */ +])), rotate$2, function (_a) { + var size = _a.size; + return size; +}, function (_a) { + var size = _a.size; + return size; +}, function (_a) { + var stroke = _a.stroke, theme = _a.theme; + return stroke !== null && stroke !== void 0 ? stroke : theme.primary1; +}); +/** + * Takes in custom size and stroke for circle color, default to primary color as fill, + * need ...rest for layered styles on top + */ +function Loader(_a) { + var _b = _a.size, size = _b === void 0 ? '16px' : _b, stroke = _a.stroke, rest = __rest(_a, ["size", "stroke"]); + return (jsx(StyledSVG, __assign({ viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", size: size, stroke: stroke }, rest, { children: jsx("path", { d: "M12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22C17.5228 22 22 17.5228 22 12C22 9.27455 20.9097 6.80375 19.1414 5", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round" }, void 0) }), void 0)); +} +var templateObject_1$1n, templateObject_2$11; + +var useAppDispatch = function () { return useDispatch(); }; +var useAppSelector = useSelector; + +var updateMatchesDarkMode = createAction('user/updateMatchesDarkMode'); +var updateUserDarkMode = createAction('user/updateUserDarkMode'); +var updateUserExpertMode = createAction('user/updateUserExpertMode'); +var updateUserLocale = createAction('user/updateUserLocale'); +var updateShowSurveyPopup = createAction('user/updateShowSurveyPopup'); +var updateUserClientSideRouter = createAction('user/updateUserClientSideRouter'); +var updateHideClosedPositions = createAction('user/hideClosedPositions'); +var updateUserSlippageTolerance = createAction('user/updateUserSlippageTolerance'); +var updateUserDeadline = createAction('user/updateUserDeadline'); +var addSerializedToken = createAction('user/addSerializedToken'); +var removeSerializedToken = createAction('user/removeSerializedToken'); +var addSerializedPair = createAction('user/addSerializedPair'); +var removeSerializedPair = createAction('user/removeSerializedPair'); + +function parsedQueryString(search) { + if (!search) { + // react-router-dom places search string in the hash + var hash = window.location.hash; + search = hash.substr(hash.indexOf('?')); + } + return search && search.length > 1 ? parse(search, { parseArrays: false, ignoreQueryPrefix: true }) : {}; +} +function useParsedQueryString() { + var search = useLocation().search; + return useMemo(function () { return parsedQueryString(search); }, [search]); } -function ApeModeQueryParamReader() { - useApeModeQueryParamReader() - return null -} -function useApeModeQueryParamReader() { - var dispatch = useAppDispatch() - var ape = useParsedQueryString().ape - useEffect(function () { - if (typeof ape !== 'string') return - if (ape === '' || ape.toLowerCase() === 'true') { - dispatch(updateUserExpertMode({ userExpertMode: true })) - } - }) +function ApeModeQueryParamReader() { + useApeModeQueryParamReader(); + return null; +} +function useApeModeQueryParamReader() { + var dispatch = useAppDispatch(); + var ape = useParsedQueryString().ape; + useEffect(function () { + if (typeof ape !== 'string') + return; + if (ape === '' || ape.toLowerCase() === 'true') { + dispatch(updateUserExpertMode({ userExpertMode: true })); + } + }); } -var NetworkContextName = 'NETWORK' -var IS_IN_IFRAME = window.parent !== window -// 30 minutes, denominated in seconds -var DEFAULT_DEADLINE_FROM_NOW = 60 * 30 -var L2_DEADLINE_FROM_NOW = 60 * 5 -// transaction popup dismisal amounts -var DEFAULT_TXN_DISMISS_MS = 25000 -var L2_TXN_DISMISS_MS = 5000 -// used for rewards deadlines -JSBI.BigInt(60 * 60 * 24 * 7) -JSBI.BigInt(0) -// one basis JSBI.BigInt -var BIPS_BASE = JSBI.BigInt(10000) -new Percent(JSBI.BigInt(1), BIPS_BASE) -// used for warning states -var ALLOWED_PRICE_IMPACT_LOW = new Percent(JSBI.BigInt(100), BIPS_BASE) // 1% -var ALLOWED_PRICE_IMPACT_MEDIUM = new Percent(JSBI.BigInt(300), BIPS_BASE) // 3% -var ALLOWED_PRICE_IMPACT_HIGH = new Percent(JSBI.BigInt(500), BIPS_BASE) // 5% -// if the price slippage exceeds this number, force the user to type 'confirm' to execute -var PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN = new Percent(JSBI.BigInt(1000), BIPS_BASE) // 10% -// for non expert mode disable swaps above this -var BLOCKED_PRICE_IMPACT_NON_EXPERT = new Percent(JSBI.BigInt(1500), BIPS_BASE) // 15% -var BETTER_TRADE_LESS_HOPS_THRESHOLD = new Percent(JSBI.BigInt(50), BIPS_BASE) -var ZERO_PERCENT = new Percent('0') -new Percent(JSBI.BigInt(200), BIPS_BASE) -var ONE_HUNDRED_PERCENT = new Percent('1') - -function useActiveWeb3React() { - // if (false) { - // return useWidgetsWeb3React() - // } - var interfaceContext = useWeb3React() - var interfaceNetworkContext = useWeb3React(NetworkContextName) - if (interfaceContext.active) { - return interfaceContext - } - return interfaceNetworkContext +var NetworkContextName = 'NETWORK'; +var IS_IN_IFRAME = window.parent !== window; +// 30 minutes, denominated in seconds +var DEFAULT_DEADLINE_FROM_NOW = 60 * 30; +var L2_DEADLINE_FROM_NOW = 60 * 5; +// transaction popup dismisal amounts +var DEFAULT_TXN_DISMISS_MS = 25000; +var L2_TXN_DISMISS_MS = 5000; +// used for rewards deadlines +JSBI.BigInt(60 * 60 * 24 * 7); +JSBI.BigInt(0); +// one basis JSBI.BigInt +var BIPS_BASE = JSBI.BigInt(10000); +new Percent(JSBI.BigInt(1), BIPS_BASE); +// used for warning states +var ALLOWED_PRICE_IMPACT_LOW = new Percent(JSBI.BigInt(100), BIPS_BASE); // 1% +var ALLOWED_PRICE_IMPACT_MEDIUM = new Percent(JSBI.BigInt(300), BIPS_BASE); // 3% +var ALLOWED_PRICE_IMPACT_HIGH = new Percent(JSBI.BigInt(500), BIPS_BASE); // 5% +// if the price slippage exceeds this number, force the user to type 'confirm' to execute +var PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN = new Percent(JSBI.BigInt(1000), BIPS_BASE); // 10% +// for non expert mode disable swaps above this +var BLOCKED_PRICE_IMPACT_NON_EXPERT = new Percent(JSBI.BigInt(1500), BIPS_BASE); // 15% +var BETTER_TRADE_LESS_HOPS_THRESHOLD = new Percent(JSBI.BigInt(50), BIPS_BASE); +var ZERO_PERCENT = new Percent('0'); +new Percent(JSBI.BigInt(200), BIPS_BASE); +var ONE_HUNDRED_PERCENT = new Percent('1'); + +function useActiveWeb3React() { + // if (false) { + // return useWidgetsWeb3React() + // } + var interfaceContext = useWeb3React(); + var interfaceNetworkContext = useWeb3React(NetworkContextName); + if (interfaceContext.active) { + return interfaceContext; + } + return interfaceNetworkContext; } -var Circle$1 = - 'data:image/svg+xml,%3Csvg%20width%3D%2294%22%20height%3D%2294%22%20viewBox%3D%220%200%2094%2094%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%20%20%3Cpath%20d%3D%22M92%2047C92%2022.1472%2071.8528%202%2047%202C22.1472%202%202%2022.1472%202%2047C2%2071.8528%2022.1472%2092%2047%2092%22%20stroke%3D%22%232172E5%22%20stroke-width%3D%223%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E' +var Circle$1 = "data:image/svg+xml,%3Csvg%20width%3D%2294%22%20height%3D%2294%22%20viewBox%3D%220%200%2094%2094%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%20%20%3Cpath%20d%3D%22M92%2047C92%2022.1472%2071.8528%202%2047%202C22.1472%202%202%2022.1472%202%2047C2%2071.8528%2022.1472%2092%2047%2092%22%20stroke%3D%22%232172E5%22%20stroke-width%3D%223%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E"; -var tokenLogo = - 'data:image/png;base64,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' +var tokenLogo = "data:image/png;base64,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"; -// returns the checksummed address if the address is valid, otherwise returns false -function isAddress(value) { - try { - return getAddress(value) - } catch (_a) { - return false - } -} -// shorten the checksummed version of the input address to have 0x + 4 characters at start and end -function shortenAddress(address, chars) { - if (chars === void 0) { - chars = 4 - } - var parsed = isAddress(address) - if (!parsed) { - throw Error("Invalid 'address' parameter '" + address + "'.") - } - return parsed.substring(0, chars + 2) + '...' + parsed.substring(42 - chars) -} -// account is not optional -function getSigner(library, account) { - return library.getSigner(account).connectUnchecked() -} -// account is optional -function getProviderOrSigner(library, account) { - return account ? getSigner(library, account) : library -} -// account is optional -function getContract(address, ABI, library, account) { - if (!isAddress(address) || address === AddressZero) { - throw Error("Invalid 'address' parameter '" + address + "'.") - } - return new Contract(address, ABI, getProviderOrSigner(library, account)) -} -function escapeRegExp(string) { - return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') // $& means the whole matched string -} -function isTokenOnList(chainTokenMap, token) { - var _a - return Boolean( - (token === null || token === void 0 ? void 0 : token.isToken) && - ((_a = chainTokenMap[token.chainId]) === null || _a === void 0 ? void 0 : _a[token.address]) - ) +// returns the checksummed address if the address is valid, otherwise returns false +function isAddress(value) { + try { + return getAddress(value); + } + catch (_a) { + return false; + } +} +// shorten the checksummed version of the input address to have 0x + 4 characters at start and end +function shortenAddress(address, chars) { + if (chars === void 0) { chars = 4; } + var parsed = isAddress(address); + if (!parsed) { + throw Error("Invalid 'address' parameter '" + address + "'."); + } + return parsed.substring(0, chars + 2) + "..." + parsed.substring(42 - chars); +} +// account is not optional +function getSigner(library, account) { + return library.getSigner(account).connectUnchecked(); +} +// account is optional +function getProviderOrSigner(library, account) { + return account ? getSigner(library, account) : library; +} +// account is optional +function getContract(address, ABI, library, account) { + if (!isAddress(address) || address === AddressZero) { + throw Error("Invalid 'address' parameter '" + address + "'."); + } + return new Contract(address, ABI, getProviderOrSigner(library, account)); +} +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} +function isTokenOnList(chainTokenMap, token) { + var _a; + return Boolean((token === null || token === void 0 ? void 0 : token.isToken) && ((_a = chainTokenMap[token.chainId]) === null || _a === void 0 ? void 0 : _a[token.address])); } -/** - * Debounces updates to a value. - * Non-primitives *must* wrap the value in useMemo, or the value will be updated due to referential inequality. - */ -// modified from https://usehooks.com/useDebounce/ -function useDebounce(value, delay) { - var _a = __read(useState(value), 2), - debouncedValue = _a[0], - setDebouncedValue = _a[1] - useEffect( - function () { - // Update debounced value after delay - var handler = setTimeout(function () { - setDebouncedValue(value) - }, delay) - // Cancel the timeout if value changes (also on delay change or unmount) - // This is how we prevent debounced value from updating if value is changed ... - // .. within the delay period. Timeout gets cleared and restarted. - return function () { - clearTimeout(handler) - } - }, - [value, delay] - ) - return debouncedValue +/** + * Debounces updates to a value. + * Non-primitives *must* wrap the value in useMemo, or the value will be updated due to referential inequality. + */ +// modified from https://usehooks.com/useDebounce/ +function useDebounce(value, delay) { + var _a = __read(useState(value), 2), debouncedValue = _a[0], setDebouncedValue = _a[1]; + useEffect(function () { + // Update debounced value after delay + var handler = setTimeout(function () { + setDebouncedValue(value); + }, delay); + // Cancel the timeout if value changes (also on delay change or unmount) + // This is how we prevent debounced value from updating if value is changed ... + // .. within the delay period. Timeout gets cleared and restarted. + return function () { + clearTimeout(handler); + }; + }, [value, delay]); + return debouncedValue; } -var VISIBILITY_STATE_SUPPORTED = 'visibilityState' in document -function isWindowVisible() { - return !VISIBILITY_STATE_SUPPORTED || document.visibilityState !== 'hidden' -} -/** - * Returns whether the window is currently visible to the user. - */ -function useIsWindowVisible() { - var _a = __read(useState(isWindowVisible()), 2), - focused = _a[0], - setFocused = _a[1] - var listener = useCallback( - function () { - setFocused(isWindowVisible()) - }, - [setFocused] - ) - useEffect( - function () { - if (!VISIBILITY_STATE_SUPPORTED) return undefined - document.addEventListener('visibilitychange', listener) - return function () { - document.removeEventListener('visibilitychange', listener) - } - }, - [listener] - ) - return focused +var VISIBILITY_STATE_SUPPORTED = 'visibilityState' in document; +function isWindowVisible() { + return !VISIBILITY_STATE_SUPPORTED || document.visibilityState !== 'hidden'; +} +/** + * Returns whether the window is currently visible to the user. + */ +function useIsWindowVisible() { + var _a = __read(useState(isWindowVisible()), 2), focused = _a[0], setFocused = _a[1]; + var listener = useCallback(function () { + setFocused(isWindowVisible()); + }, [setFocused]); + useEffect(function () { + if (!VISIBILITY_STATE_SUPPORTED) + return undefined; + document.addEventListener('visibilitychange', listener); + return function () { + document.removeEventListener('visibilitychange', listener); + }; + }, [listener]); + return focused; } -function useBlock() { - var _a = useActiveWeb3React(), - chainId = _a.chainId, - library = _a.library - var windowVisible = useIsWindowVisible() - var _b = __read(useState({ chainId }), 2), - state = _b[0], - setState = _b[1] - var onBlock = useCallback( - function (block) { - setState(function (state) { - if (state.chainId === chainId) { - if (typeof state.block !== 'number') return { chainId, block } - return { chainId, block: Math.max(block, state.block) } - } - return state - }) - }, - [chainId] - ) - useEffect( - function () { - if (library && chainId && windowVisible) { - setState({ chainId }) - library - .getBlockNumber() - .then(onBlock) - .catch(function (error) { - console.error('Failed to get block number for chainId ' + chainId, error) - }) - library.on('block', onBlock) - return function () { - library.removeListener('block', onBlock) - } - } - return undefined - }, - [chainId, library, onBlock, windowVisible] - ) - var debouncedBlock = useDebounce(state.block, 100) - return state.block ? debouncedBlock : undefined -} -var blockAtom = atom(undefined) -function BlockUpdater() { - var setBlock = useUpdateAtom(blockAtom) - var block = useBlock() - useEffect( - function () { - setBlock(block) - }, - [block, setBlock] - ) - return null -} -/** Requires that BlockUpdater be installed in the DOM tree. */ -function useBlockNumber() { - var chainId = useActiveWeb3React().chainId - var block = useAtomValue(blockAtom) - return chainId ? block : undefined -} -function useFastForwardBlockNumber() { - return useUpdateAtom(blockAtom) +function useBlock() { + var _a = useActiveWeb3React(), chainId = _a.chainId, library = _a.library; + var windowVisible = useIsWindowVisible(); + var _b = __read(useState({ chainId: chainId }), 2), state = _b[0], setState = _b[1]; + var onBlock = useCallback(function (block) { + setState(function (state) { + if (state.chainId === chainId) { + if (typeof state.block !== 'number') + return { chainId: chainId, block: block }; + return { chainId: chainId, block: Math.max(block, state.block) }; + } + return state; + }); + }, [chainId]); + useEffect(function () { + if (library && chainId && windowVisible) { + setState({ chainId: chainId }); + library + .getBlockNumber() + .then(onBlock) + .catch(function (error) { + console.error("Failed to get block number for chainId " + chainId, error); + }); + library.on('block', onBlock); + return function () { + library.removeListener('block', onBlock); + }; + } + return undefined; + }, [chainId, library, onBlock, windowVisible]); + var debouncedBlock = useDebounce(state.block, 100); + return state.block ? debouncedBlock : undefined; +} +var blockAtom = atom(undefined); +function BlockUpdater() { + var setBlock = useUpdateAtom(blockAtom); + var block = useBlock(); + useEffect(function () { + setBlock(block); + }, [block, setBlock]); + return null; +} +/** Requires that BlockUpdater be installed in the DOM tree. */ +function useBlockNumber() { + var chainId = useActiveWeb3React().chainId; + var block = useAtomValue(blockAtom); + return chainId ? block : undefined; +} +function useFastForwardBlockNumber() { + return useUpdateAtom(blockAtom); } var abi$6 = [ - { - inputs: [ - { - internalType: 'address', - name: '_rewardsDistribution', - type: 'address', - }, - { - internalType: 'address', - name: '_rewardsToken', - type: 'address', - }, - { - internalType: 'address', - name: '_stakingToken', - type: 'address', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'constructor', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'reward', - type: 'uint256', - }, - ], - name: 'RewardAdded', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'user', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'reward', - type: 'uint256', - }, - ], - name: 'RewardPaid', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'user', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'Staked', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'user', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'Withdrawn', - type: 'event', - }, - { - constant: true, - inputs: [ - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'balanceOf', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'earned', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [], - name: 'exit', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [], - name: 'getReward', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'getRewardForDuration', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'lastTimeRewardApplicable', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'lastUpdateTime', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'uint256', - name: 'reward', - type: 'uint256', - }, - ], - name: 'notifyRewardAmount', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'periodFinish', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'rewardPerToken', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'rewardPerTokenStored', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'rewardRate', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'rewards', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'rewardsDistribution', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'rewardsDuration', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'rewardsToken', - outputs: [ - { - internalType: 'contract IERC20', - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'stake', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - { - internalType: 'uint8', - name: 'v', - type: 'uint8', - }, - { - internalType: 'bytes32', - name: 'r', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 's', - type: 'bytes32', - }, - ], - name: 'stakeWithPermit', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'stakingToken', - outputs: [ - { - internalType: 'contract IERC20', - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'totalSupply', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'userRewardPerTokenPaid', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'withdraw', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, -] - -var abi$5 = [ - { - inputs: [ - { - internalType: 'address', - name: 'token_', - type: 'address', - }, - { - internalType: 'bytes32', - name: 'merkleRoot_', - type: 'bytes32', - }, - ], - stateMutability: 'nonpayable', - type: 'constructor', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'index', - type: 'uint256', - }, - { - indexed: false, - internalType: 'address', - name: 'account', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'Claimed', - type: 'event', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'index', - type: 'uint256', - }, - { - internalType: 'address', - name: 'account', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - { - internalType: 'bytes32[]', - name: 'merkleProof', - type: 'bytes32[]', - }, - ], - name: 'claim', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'index', - type: 'uint256', - }, - ], - name: 'isClaimed', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'merkleRoot', - outputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'token', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, -] - -var abi$4 = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'Approval', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'sender', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount0', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount1', - type: 'uint256', - }, - { - indexed: true, - internalType: 'address', - name: 'to', - type: 'address', - }, - ], - name: 'Burn', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'sender', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount0', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount1', - type: 'uint256', - }, - ], - name: 'Mint', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'sender', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount0In', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount1In', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount0Out', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount1Out', - type: 'uint256', - }, - { - indexed: true, - internalType: 'address', - name: 'to', - type: 'address', - }, - ], - name: 'Swap', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint112', - name: 'reserve0', - type: 'uint112', - }, - { - indexed: false, - internalType: 'uint112', - name: 'reserve1', - type: 'uint112', - }, - ], - name: 'Sync', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'from', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'to', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'Transfer', - type: 'event', - }, - { - constant: true, - inputs: [], - name: 'DOMAIN_SEPARATOR', - outputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'MINIMUM_LIQUIDITY', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'pure', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'PERMIT_TYPEHASH', - outputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - ], - payable: false, - stateMutability: 'pure', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - ], - name: 'allowance', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'approve', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'balanceOf', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'address', - name: 'to', - type: 'address', - }, - ], - name: 'burn', - outputs: [ - { - internalType: 'uint256', - name: 'amount0', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amount1', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'decimals', - outputs: [ - { - internalType: 'uint8', - name: '', - type: 'uint8', - }, - ], - payable: false, - stateMutability: 'pure', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'factory', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'getReserves', - outputs: [ - { - internalType: 'uint112', - name: 'reserve0', - type: 'uint112', - }, - { - internalType: 'uint112', - name: 'reserve1', - type: 'uint112', - }, - { - internalType: 'uint32', - name: 'blockTimestampLast', - type: 'uint32', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'initialize', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'kLast', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'address', - name: 'to', - type: 'address', - }, - ], - name: 'mint', - outputs: [ - { - internalType: 'uint256', - name: 'liquidity', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'name', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - payable: false, - stateMutability: 'pure', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'nonces', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - { - internalType: 'uint8', - name: 'v', - type: 'uint8', - }, - { - internalType: 'bytes32', - name: 'r', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 's', - type: 'bytes32', - }, - ], - name: 'permit', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'price0CumulativeLast', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'price1CumulativeLast', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'address', - name: 'to', - type: 'address', - }, - ], - name: 'skim', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'uint256', - name: 'amount0Out', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amount1Out', - type: 'uint256', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'bytes', - name: 'data', - type: 'bytes', - }, - ], - name: 'swap', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'symbol', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - payable: false, - stateMutability: 'pure', - type: 'function', - }, - { - constant: false, - inputs: [], - name: 'sync', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'token0', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'token1', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'totalSupply', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'transfer', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'address', - name: 'from', - type: 'address', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'transferFrom', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, -] - -var abi$3 = [ - { - inputs: [], - name: 'WETH', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'pure', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'tokenA', - type: 'address', - }, - { - internalType: 'address', - name: 'tokenB', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amountADesired', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountBDesired', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountAMin', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountBMin', - type: 'uint256', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - ], - name: 'addLiquidity', - outputs: [ - { - internalType: 'uint256', - name: 'amountA', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountB', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'liquidity', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'token', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amountTokenDesired', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountTokenMin', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountETHMin', - type: 'uint256', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - ], - name: 'addLiquidityETH', - outputs: [ - { - internalType: 'uint256', - name: 'amountToken', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountETH', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'liquidity', - type: 'uint256', - }, - ], - stateMutability: 'payable', - type: 'function', - }, - { - inputs: [], - name: 'factory', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'pure', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountOut', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'reserveIn', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'reserveOut', - type: 'uint256', - }, - ], - name: 'getAmountIn', - outputs: [ - { - internalType: 'uint256', - name: 'amountIn', - type: 'uint256', - }, - ], - stateMutability: 'pure', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountIn', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'reserveIn', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'reserveOut', - type: 'uint256', - }, - ], - name: 'getAmountOut', - outputs: [ - { - internalType: 'uint256', - name: 'amountOut', - type: 'uint256', - }, - ], - stateMutability: 'pure', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountOut', - type: 'uint256', - }, - { - internalType: 'address[]', - name: 'path', - type: 'address[]', - }, - ], - name: 'getAmountsIn', - outputs: [ - { - internalType: 'uint256[]', - name: 'amounts', - type: 'uint256[]', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountIn', - type: 'uint256', - }, - { - internalType: 'address[]', - name: 'path', - type: 'address[]', - }, - ], - name: 'getAmountsOut', - outputs: [ - { - internalType: 'uint256[]', - name: 'amounts', - type: 'uint256[]', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountA', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'reserveA', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'reserveB', - type: 'uint256', - }, - ], - name: 'quote', - outputs: [ - { - internalType: 'uint256', - name: 'amountB', - type: 'uint256', - }, - ], - stateMutability: 'pure', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'tokenA', - type: 'address', - }, - { - internalType: 'address', - name: 'tokenB', - type: 'address', - }, - { - internalType: 'uint256', - name: 'liquidity', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountAMin', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountBMin', - type: 'uint256', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - ], - name: 'removeLiquidity', - outputs: [ - { - internalType: 'uint256', - name: 'amountA', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountB', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'token', - type: 'address', - }, - { - internalType: 'uint256', - name: 'liquidity', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountTokenMin', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountETHMin', - type: 'uint256', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - ], - name: 'removeLiquidityETH', - outputs: [ - { - internalType: 'uint256', - name: 'amountToken', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountETH', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'token', - type: 'address', - }, - { - internalType: 'uint256', - name: 'liquidity', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountTokenMin', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountETHMin', - type: 'uint256', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - ], - name: 'removeLiquidityETHSupportingFeeOnTransferTokens', - outputs: [ - { - internalType: 'uint256', - name: 'amountETH', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'token', - type: 'address', - }, - { - internalType: 'uint256', - name: 'liquidity', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountTokenMin', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountETHMin', - type: 'uint256', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - { - internalType: 'bool', - name: 'approveMax', - type: 'bool', - }, - { - internalType: 'uint8', - name: 'v', - type: 'uint8', - }, - { - internalType: 'bytes32', - name: 'r', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 's', - type: 'bytes32', - }, - ], - name: 'removeLiquidityETHWithPermit', - outputs: [ - { - internalType: 'uint256', - name: 'amountToken', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountETH', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'token', - type: 'address', - }, - { - internalType: 'uint256', - name: 'liquidity', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountTokenMin', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountETHMin', - type: 'uint256', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - { - internalType: 'bool', - name: 'approveMax', - type: 'bool', - }, - { - internalType: 'uint8', - name: 'v', - type: 'uint8', - }, - { - internalType: 'bytes32', - name: 'r', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 's', - type: 'bytes32', - }, - ], - name: 'removeLiquidityETHWithPermitSupportingFeeOnTransferTokens', - outputs: [ - { - internalType: 'uint256', - name: 'amountETH', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'tokenA', - type: 'address', - }, - { - internalType: 'address', - name: 'tokenB', - type: 'address', - }, - { - internalType: 'uint256', - name: 'liquidity', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountAMin', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountBMin', - type: 'uint256', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - { - internalType: 'bool', - name: 'approveMax', - type: 'bool', - }, - { - internalType: 'uint8', - name: 'v', - type: 'uint8', - }, - { - internalType: 'bytes32', - name: 'r', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 's', - type: 'bytes32', - }, - ], - name: 'removeLiquidityWithPermit', - outputs: [ - { - internalType: 'uint256', - name: 'amountA', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountB', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountOut', - type: 'uint256', - }, - { - internalType: 'address[]', - name: 'path', - type: 'address[]', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - ], - name: 'swapETHForExactTokens', - outputs: [ - { - internalType: 'uint256[]', - name: 'amounts', - type: 'uint256[]', - }, - ], - stateMutability: 'payable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountOutMin', - type: 'uint256', - }, - { - internalType: 'address[]', - name: 'path', - type: 'address[]', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - ], - name: 'swapExactETHForTokens', - outputs: [ - { - internalType: 'uint256[]', - name: 'amounts', - type: 'uint256[]', - }, - ], - stateMutability: 'payable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountOutMin', - type: 'uint256', - }, - { - internalType: 'address[]', - name: 'path', - type: 'address[]', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - ], - name: 'swapExactETHForTokensSupportingFeeOnTransferTokens', - outputs: [], - stateMutability: 'payable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountIn', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountOutMin', - type: 'uint256', - }, - { - internalType: 'address[]', - name: 'path', - type: 'address[]', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - ], - name: 'swapExactTokensForETH', - outputs: [ - { - internalType: 'uint256[]', - name: 'amounts', - type: 'uint256[]', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountIn', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountOutMin', - type: 'uint256', - }, - { - internalType: 'address[]', - name: 'path', - type: 'address[]', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - ], - name: 'swapExactTokensForETHSupportingFeeOnTransferTokens', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountIn', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountOutMin', - type: 'uint256', - }, - { - internalType: 'address[]', - name: 'path', - type: 'address[]', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - ], - name: 'swapExactTokensForTokens', - outputs: [ - { - internalType: 'uint256[]', - name: 'amounts', - type: 'uint256[]', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountIn', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountOutMin', - type: 'uint256', - }, - { - internalType: 'address[]', - name: 'path', - type: 'address[]', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - ], - name: 'swapExactTokensForTokensSupportingFeeOnTransferTokens', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountOut', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountInMax', - type: 'uint256', - }, - { - internalType: 'address[]', - name: 'path', - type: 'address[]', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - ], - name: 'swapTokensForExactETH', - outputs: [ - { - internalType: 'uint256[]', - name: 'amounts', - type: 'uint256[]', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountOut', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amountInMax', - type: 'uint256', - }, - { - internalType: 'address[]', - name: 'path', - type: 'address[]', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - ], - name: 'swapTokensForExactTokens', - outputs: [ - { - internalType: 'uint256[]', - name: 'amounts', - type: 'uint256[]', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, -] - -var abi$2 = [ - { - inputs: [ - { - internalType: 'address', - name: '_factory', - type: 'address', - }, - { - internalType: 'address', - name: '_WETH9', - type: 'address', - }, - ], - stateMutability: 'nonpayable', - type: 'constructor', - }, - { - inputs: [], - name: 'WETH9', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'factory', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes', - name: 'path', - type: 'bytes', - }, - { - internalType: 'uint256', - name: 'amountIn', - type: 'uint256', - }, - ], - name: 'quoteExactInput', - outputs: [ - { - internalType: 'uint256', - name: 'amountOut', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'tokenIn', - type: 'address', - }, - { - internalType: 'address', - name: 'tokenOut', - type: 'address', - }, - { - internalType: 'uint24', - name: 'fee', - type: 'uint24', - }, - { - internalType: 'uint256', - name: 'amountIn', - type: 'uint256', - }, - { - internalType: 'uint160', - name: 'sqrtPriceLimitX96', - type: 'uint160', - }, - ], - name: 'quoteExactInputSingle', - outputs: [ - { - internalType: 'uint256', - name: 'amountOut', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes', - name: 'path', - type: 'bytes', - }, - { - internalType: 'uint256', - name: 'amountOut', - type: 'uint256', - }, - ], - name: 'quoteExactOutput', - outputs: [ - { - internalType: 'uint256', - name: 'amountIn', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'tokenIn', - type: 'address', - }, - { - internalType: 'address', - name: 'tokenOut', - type: 'address', - }, - { - internalType: 'uint24', - name: 'fee', - type: 'uint24', - }, - { - internalType: 'uint256', - name: 'amountOut', - type: 'uint256', - }, - { - internalType: 'uint160', - name: 'sqrtPriceLimitX96', - type: 'uint160', - }, - ], - name: 'quoteExactOutputSingle', - outputs: [ - { - internalType: 'uint256', - name: 'amountIn', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'int256', - name: 'amount0Delta', - type: 'int256', - }, - { - internalType: 'int256', - name: 'amount1Delta', - type: 'int256', - }, - { - internalType: 'bytes', - name: 'path', - type: 'bytes', - }, - ], - name: 'uniswapV3SwapCallback', - outputs: [], - stateMutability: 'view', - type: 'function', - }, -] - -var abi$1 = [ - { - inputs: [], - name: 'getCurrentBlockTimestamp', - outputs: [ - { - internalType: 'uint256', - name: 'timestamp', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'addr', - type: 'address', - }, - ], - name: 'getEthBalance', - outputs: [ - { - internalType: 'uint256', - name: 'balance', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - components: [ - { - internalType: 'address', - name: 'target', - type: 'address', - }, - { - internalType: 'uint256', - name: 'gasLimit', - type: 'uint256', - }, - { - internalType: 'bytes', - name: 'callData', - type: 'bytes', - }, - ], - internalType: 'struct UniswapInterfaceMulticall.Call[]', - name: 'calls', - type: 'tuple[]', - }, - ], - name: 'multicall', - outputs: [ - { - internalType: 'uint256', - name: 'blockNumber', - type: 'uint256', - }, - { - components: [ - { - internalType: 'bool', - name: 'success', - type: 'bool', - }, - { - internalType: 'uint256', - name: 'gasUsed', - type: 'uint256', - }, - { - internalType: 'bytes', - name: 'returnData', - type: 'bytes', - }, - ], - internalType: 'struct UniswapInterfaceMulticall.Result[]', - name: 'returnData', - type: 'tuple[]', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, -] - -var ARGENT_WALLET_DETECTOR_ABI = [ - { - inputs: [ - { - internalType: 'bytes32[]', - name: '_codes', - type: 'bytes32[]', - }, - { - internalType: 'address[]', - name: '_implementations', - type: 'address[]', - }, - ], - stateMutability: 'nonpayable', - type: 'constructor', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'code', - type: 'bytes32', - }, - ], - name: 'CodeAdded', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'implementation', - type: 'address', - }, - ], - name: 'ImplementationAdded', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: '_newOwner', - type: 'address', - }, - ], - name: 'OwnerChanged', - type: 'event', - }, - { - inputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - ], - name: 'acceptedCodes', - outputs: [ - { - internalType: 'bool', - name: 'exists', - type: 'bool', - }, - { - internalType: 'uint128', - name: 'index', - type: 'uint128', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'acceptedImplementations', - outputs: [ - { - internalType: 'bool', - name: 'exists', - type: 'bool', - }, - { - internalType: 'uint128', - name: 'index', - type: 'uint128', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes32', - name: '_code', - type: 'bytes32', - }, - ], - name: 'addCode', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_argentWallet', - type: 'address', - }, - ], - name: 'addCodeAndImplementationFromWallet', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_impl', - type: 'address', - }, - ], - name: 'addImplementation', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_newOwner', - type: 'address', - }, - ], - name: 'changeOwner', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'getCodes', - outputs: [ - { - internalType: 'bytes32[]', - name: '', - type: 'bytes32[]', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'getImplementations', - outputs: [ - { - internalType: 'address[]', - name: '', - type: 'address[]', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_wallet', - type: 'address', - }, - ], - name: 'isArgentWallet', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'owner', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, -] - -var EIP_2612 = [ - { - constant: true, - inputs: [ - { - name: 'owner', - type: 'address', - }, - ], - name: 'nonces', - outputs: [ - { - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'DOMAIN_SEPARATOR', - outputs: [ - { - name: '', - type: 'bytes32', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, -] - -var ENS_PUBLIC_RESOLVER_ABI = [ - { - inputs: [ - { - internalType: 'contract ENS', - name: '_ens', - type: 'address', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'constructor', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: true, - internalType: 'uint256', - name: 'contentType', - type: 'uint256', - }, - ], - name: 'ABIChanged', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: false, - internalType: 'address', - name: 'a', - type: 'address', - }, - ], - name: 'AddrChanged', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: false, - internalType: 'uint256', - name: 'coinType', - type: 'uint256', - }, - { - indexed: false, - internalType: 'bytes', - name: 'newAddress', - type: 'bytes', - }, - ], - name: 'AddressChanged', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'target', - type: 'address', - }, - { - indexed: false, - internalType: 'bool', - name: 'isAuthorised', - type: 'bool', - }, - ], - name: 'AuthorisationChanged', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: false, - internalType: 'bytes', - name: 'hash', - type: 'bytes', - }, - ], - name: 'ContenthashChanged', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: false, - internalType: 'bytes', - name: 'name', - type: 'bytes', - }, - { - indexed: false, - internalType: 'uint16', - name: 'resource', - type: 'uint16', - }, - { - indexed: false, - internalType: 'bytes', - name: 'record', - type: 'bytes', - }, - ], - name: 'DNSRecordChanged', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: false, - internalType: 'bytes', - name: 'name', - type: 'bytes', - }, - { - indexed: false, - internalType: 'uint16', - name: 'resource', - type: 'uint16', - }, - ], - name: 'DNSRecordDeleted', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - ], - name: 'DNSZoneCleared', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: true, - internalType: 'bytes4', - name: 'interfaceID', - type: 'bytes4', - }, - { - indexed: false, - internalType: 'address', - name: 'implementer', - type: 'address', - }, - ], - name: 'InterfaceChanged', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: false, - internalType: 'string', - name: 'name', - type: 'string', - }, - ], - name: 'NameChanged', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: false, - internalType: 'bytes32', - name: 'x', - type: 'bytes32', - }, - { - indexed: false, - internalType: 'bytes32', - name: 'y', - type: 'bytes32', - }, - ], - name: 'PubkeyChanged', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: true, - internalType: 'string', - name: 'indexedKey', - type: 'string', - }, - { - indexed: false, - internalType: 'string', - name: 'key', - type: 'string', - }, - ], - name: 'TextChanged', - type: 'event', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'uint256', - name: 'contentTypes', - type: 'uint256', - }, - ], - name: 'ABI', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - { - internalType: 'bytes', - name: '', - type: 'bytes', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - ], - name: 'addr', - outputs: [ - { - internalType: 'address payable', - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - { - internalType: 'address', - name: '', - type: 'address', - }, - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'authorisations', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - ], - name: 'clearDNSZone', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - ], - name: 'contenthash', - outputs: [ - { - internalType: 'bytes', - name: '', - type: 'bytes', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 'name', - type: 'bytes32', - }, - { - internalType: 'uint16', - name: 'resource', - type: 'uint16', - }, - ], - name: 'dnsRecord', - outputs: [ - { - internalType: 'bytes', - name: '', - type: 'bytes', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 'name', - type: 'bytes32', - }, - ], - name: 'hasDNSRecords', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'bytes4', - name: 'interfaceID', - type: 'bytes4', - }, - ], - name: 'interfaceImplementer', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - ], - name: 'name', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - ], - name: 'pubkey', - outputs: [ - { - internalType: 'bytes32', - name: 'x', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 'y', - type: 'bytes32', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'uint256', - name: 'contentType', - type: 'uint256', - }, - { - internalType: 'bytes', - name: 'data', - type: 'bytes', - }, - ], - name: 'setABI', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'uint256', - name: 'coinType', - type: 'uint256', - }, - { - internalType: 'bytes', - name: 'a', - type: 'bytes', - }, - ], - name: 'setAddr', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'address', - name: 'a', - type: 'address', - }, - ], - name: 'setAddr', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'address', - name: 'target', - type: 'address', - }, - { - internalType: 'bool', - name: 'isAuthorised', - type: 'bool', - }, - ], - name: 'setAuthorisation', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'bytes', - name: 'hash', - type: 'bytes', - }, - ], - name: 'setContenthash', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'bytes', - name: 'data', - type: 'bytes', - }, - ], - name: 'setDNSRecords', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'bytes4', - name: 'interfaceID', - type: 'bytes4', - }, - { - internalType: 'address', - name: 'implementer', - type: 'address', - }, - ], - name: 'setInterface', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'string', - name: 'name', - type: 'string', - }, - ], - name: 'setName', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 'x', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 'y', - type: 'bytes32', - }, - ], - name: 'setPubkey', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'string', - name: 'key', - type: 'string', - }, - { - internalType: 'string', - name: 'value', - type: 'string', - }, - ], - name: 'setText', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes4', - name: 'interfaceID', - type: 'bytes4', - }, - ], - name: 'supportsInterface', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'pure', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'string', - name: 'key', - type: 'string', - }, - ], - name: 'text', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, -] - -var ENS_ABI = [ - { - inputs: [ - { - internalType: 'contract ENS', - name: '_old', - type: 'address', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'constructor', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'operator', - type: 'address', - }, - { - indexed: false, - internalType: 'bool', - name: 'approved', - type: 'bool', - }, - ], - name: 'ApprovalForAll', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: true, - internalType: 'bytes32', - name: 'label', - type: 'bytes32', - }, - { - indexed: false, - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'NewOwner', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: false, - internalType: 'address', - name: 'resolver', - type: 'address', - }, - ], - name: 'NewResolver', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: false, - internalType: 'uint64', - name: 'ttl', - type: 'uint64', - }, - ], - name: 'NewTTL', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - indexed: false, - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'Transfer', - type: 'event', - }, - { - constant: true, - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - internalType: 'address', - name: 'operator', - type: 'address', - }, - ], - name: 'isApprovedForAll', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'old', - outputs: [ - { - internalType: 'contract ENS', - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - ], - name: 'owner', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - ], - name: 'recordExists', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - ], - name: 'resolver', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'address', - name: 'operator', - type: 'address', - }, - { - internalType: 'bool', - name: 'approved', - type: 'bool', - }, - ], - name: 'setApprovalForAll', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'setOwner', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - internalType: 'address', - name: 'resolver', - type: 'address', - }, - { - internalType: 'uint64', - name: 'ttl', - type: 'uint64', - }, - ], - name: 'setRecord', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'address', - name: 'resolver', - type: 'address', - }, - ], - name: 'setResolver', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 'label', - type: 'bytes32', - }, - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'setSubnodeOwner', - outputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 'label', - type: 'bytes32', - }, - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - internalType: 'address', - name: 'resolver', - type: 'address', - }, - { - internalType: 'uint64', - name: 'ttl', - type: 'uint64', - }, - ], - name: 'setSubnodeRecord', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - { - internalType: 'uint64', - name: 'ttl', - type: 'uint64', - }, - ], - name: 'setTTL', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - ], - name: 'ttl', - outputs: [ - { - internalType: 'uint64', - name: '', - type: 'uint64', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, -] - -var ERC20ABI = [ - { - constant: true, - inputs: [], - name: 'name', - outputs: [ - { - name: '', - type: 'string', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - name: '_spender', - type: 'address', - }, - { - name: '_value', - type: 'uint256', - }, - ], - name: 'approve', - outputs: [ - { - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'totalSupply', - outputs: [ - { - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - name: '_from', - type: 'address', - }, - { - name: '_to', - type: 'address', - }, - { - name: '_value', - type: 'uint256', - }, - ], - name: 'transferFrom', - outputs: [ - { - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'decimals', - outputs: [ - { - name: '', - type: 'uint8', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - name: '_owner', - type: 'address', - }, - ], - name: 'balanceOf', - outputs: [ - { - name: 'balance', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'symbol', - outputs: [ - { - name: '', - type: 'string', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - name: '_to', - type: 'address', - }, - { - name: '_value', - type: 'uint256', - }, - ], - name: 'transfer', - outputs: [ - { - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [ - { - name: '_owner', - type: 'address', - }, - { - name: '_spender', - type: 'address', - }, - ], - name: 'allowance', - outputs: [ - { - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - payable: true, - stateMutability: 'payable', - type: 'fallback', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: 'owner', - type: 'address', - }, - { - indexed: true, - name: 'spender', - type: 'address', - }, - { - indexed: false, - name: 'value', - type: 'uint256', - }, - ], - name: 'Approval', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: 'from', - type: 'address', - }, - { - indexed: true, - name: 'to', - type: 'address', - }, - { - indexed: false, - name: 'value', - type: 'uint256', - }, - ], - name: 'Transfer', - type: 'event', - }, -] - -var ERC20_BYTES32_ABI = [ - { - constant: true, - inputs: [], - name: 'name', - outputs: [ - { - name: '', - type: 'bytes32', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'symbol', - outputs: [ - { - name: '', - type: 'bytes32', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, -] - -var ERC721_ABI = [ - { - inputs: [ - { - internalType: 'uint256', - name: 'tokenId', - type: 'uint256', - }, - ], - name: 'ownerOf', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'tokenId', - type: 'uint256', - }, - ], - name: 'tokenURI', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, -] - -var ERC1155_ABI = [ - { - constant: true, - inputs: [ - { - internalType: 'address', - name: '_owner', - type: 'address', - }, - { - internalType: 'uint256', - name: '_id', - type: 'uint256', - }, - ], - name: 'balanceOf', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'uint256', - name: '_id', - type: 'uint256', - }, - ], - name: 'uri', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, -] - -var WETH_ABI = [ - { - constant: true, - inputs: [], - name: 'name', - outputs: [ - { - name: '', - type: 'string', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - name: 'guy', - type: 'address', - }, - { - name: 'wad', - type: 'uint256', - }, - ], - name: 'approve', - outputs: [ - { - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'totalSupply', - outputs: [ - { - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - name: 'src', - type: 'address', - }, - { - name: 'dst', - type: 'address', - }, - { - name: 'wad', - type: 'uint256', - }, - ], - name: 'transferFrom', - outputs: [ - { - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - name: 'wad', - type: 'uint256', - }, - ], - name: 'withdraw', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'decimals', - outputs: [ - { - name: '', - type: 'uint8', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - name: '', - type: 'address', - }, - ], - name: 'balanceOf', - outputs: [ - { - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'symbol', - outputs: [ - { - name: '', - type: 'string', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - name: 'dst', - type: 'address', - }, - { - name: 'wad', - type: 'uint256', - }, - ], - name: 'transfer', - outputs: [ - { - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [], - name: 'deposit', - outputs: [], - payable: true, - stateMutability: 'payable', - type: 'function', - }, - { - constant: true, - inputs: [ - { - name: '', - type: 'address', - }, - { - name: '', - type: 'address', - }, - ], - name: 'allowance', - outputs: [ - { - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - payable: true, - stateMutability: 'payable', - type: 'fallback', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: 'src', - type: 'address', - }, - { - indexed: true, - name: 'guy', - type: 'address', - }, - { - indexed: false, - name: 'wad', - type: 'uint256', - }, - ], - name: 'Approval', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: 'src', - type: 'address', - }, - { - indexed: true, - name: 'dst', - type: 'address', - }, - { - indexed: false, - name: 'wad', - type: 'uint256', - }, - ], - name: 'Transfer', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: 'dst', - type: 'address', - }, - { - indexed: false, - name: 'wad', - type: 'uint256', - }, - ], - name: 'Deposit', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: 'src', - type: 'address', - }, - { - indexed: false, - name: 'wad', - type: 'uint256', - }, - ], - name: 'Withdrawal', - type: 'event', - }, -] - -var _a$h -/** - * List of all the networks supported by the Uniswap Interface - */ -var SupportedChainId -;(function (SupportedChainId) { - SupportedChainId[(SupportedChainId['MAINNET'] = 1)] = 'MAINNET' - SupportedChainId[(SupportedChainId['ROPSTEN'] = 3)] = 'ROPSTEN' - SupportedChainId[(SupportedChainId['RINKEBY'] = 4)] = 'RINKEBY' - SupportedChainId[(SupportedChainId['GOERLI'] = 5)] = 'GOERLI' - SupportedChainId[(SupportedChainId['KOVAN'] = 42)] = 'KOVAN' - SupportedChainId[(SupportedChainId['ARBITRUM_ONE'] = 42161)] = 'ARBITRUM_ONE' - SupportedChainId[(SupportedChainId['ARBITRUM_RINKEBY'] = 421611)] = 'ARBITRUM_RINKEBY' - SupportedChainId[(SupportedChainId['OPTIMISM'] = 10)] = 'OPTIMISM' - SupportedChainId[(SupportedChainId['OPTIMISTIC_KOVAN'] = 69)] = 'OPTIMISTIC_KOVAN' - SupportedChainId[(SupportedChainId['POLYGON'] = 137)] = 'POLYGON' - SupportedChainId[(SupportedChainId['POLYGON_MUMBAI'] = 80001)] = 'POLYGON_MUMBAI' -})(SupportedChainId || (SupportedChainId = {})) -var CHAIN_IDS_TO_NAMES = - ((_a$h = {}), - (_a$h[SupportedChainId.MAINNET] = 'mainnet'), - (_a$h[SupportedChainId.ROPSTEN] = 'ropsten'), - (_a$h[SupportedChainId.RINKEBY] = 'rinkeby'), - (_a$h[SupportedChainId.GOERLI] = 'goerli'), - (_a$h[SupportedChainId.KOVAN] = 'kovan'), - (_a$h[SupportedChainId.POLYGON] = 'polygon'), - (_a$h[SupportedChainId.POLYGON_MUMBAI] = 'polygon_mumbai'), - (_a$h[SupportedChainId.ARBITRUM_ONE] = 'arbitrum'), - (_a$h[SupportedChainId.ARBITRUM_RINKEBY] = 'arbitrum_rinkeby'), - (_a$h[SupportedChainId.OPTIMISM] = 'optimism'), - (_a$h[SupportedChainId.OPTIMISTIC_KOVAN] = 'optimistic_kovan'), - _a$h) -/** - * Array of all the supported chain IDs - */ -var ALL_SUPPORTED_CHAIN_IDS = Object.values(SupportedChainId).filter(function (id) { - return typeof id === 'number' -}) -var SUPPORTED_GAS_ESTIMATE_CHAIN_IDS = [SupportedChainId.MAINNET, SupportedChainId.POLYGON] -/** - * All the chain IDs that are running the Ethereum protocol. - */ -;[ - SupportedChainId.MAINNET, - SupportedChainId.ROPSTEN, - SupportedChainId.RINKEBY, - SupportedChainId.GOERLI, - SupportedChainId.KOVAN, - SupportedChainId.POLYGON, - SupportedChainId.POLYGON_MUMBAI, -] -/** - * Controls some L2 specific behavior, e.g. slippage tolerance, special UI behavior. - * The expectation is that all of these networks have immediate transaction confirmation. - */ -var L2_CHAIN_IDS = [ - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, -] - -var DEFAULT_NETWORKS = [ - SupportedChainId.MAINNET, - SupportedChainId.ROPSTEN, - SupportedChainId.RINKEBY, - SupportedChainId.GOERLI, - SupportedChainId.KOVAN, -] -function constructSameAddressMap(address, additionalNetworks) { - if (additionalNetworks === void 0) { - additionalNetworks = [] - } - return DEFAULT_NETWORKS.concat(additionalNetworks).reduce(function (memo, chainId) { - memo[chainId] = address - return memo - }, {}) -} - -var _a$g, _b$6, _c$4, _d$3, _e$2, _f$1, _g$1, _h$1 -var UNI_ADDRESS = constructSameAddressMap('0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984') -var MULTICALL_ADDRESS = __assign( - __assign( - {}, - constructSameAddressMap('0x1F98415757620B543A52E61c46B32eB19261F984', [ - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.OPTIMISM, - SupportedChainId.POLYGON_MUMBAI, - SupportedChainId.POLYGON, - ]) - ), - ((_a$g = {}), - (_a$g[SupportedChainId.ARBITRUM_ONE] = '0xadF885960B47eA2CD9B55E6DAc6B42b7Cb2806dB'), - (_a$g[SupportedChainId.ARBITRUM_RINKEBY] = '0xa501c031958F579dB7676fF1CE78AD305794d579'), - _a$g) -) -var V2_FACTORY_ADDRESSES = constructSameAddressMap(FACTORY_ADDRESS) -var V2_ROUTER_ADDRESS = constructSameAddressMap('0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D') -var V3_ROUTER_ADDRESS = constructSameAddressMap('0xE592427A0AEce92De3Edee1F18E0157C05861564', [ - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON, - SupportedChainId.POLYGON_MUMBAI, -]) -var SWAP_ROUTER_ADDRESSES = constructSameAddressMap('0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45', [ - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON, - SupportedChainId.POLYGON_MUMBAI, -]) -/** - * The oldest V0 governance address - */ -constructSameAddressMap('0x5e4be8Bc9637f0EAA1A755019e06A68ce081D58F') -/** - * The older V1 governance address - */ -;(_b$6 = {}), (_b$6[SupportedChainId.MAINNET] = '0xC4e172459f1E7939D522503B81AFAaC1014CE6F6'), _b$6 -/** - * The latest governor bravo that is currently admin of timelock - */ -;(_c$4 = {}), (_c$4[SupportedChainId.MAINNET] = '0x408ED6354d4973f66138C91495F2f2FCbd8724C3'), _c$4 -constructSameAddressMap('0x1a9C8182C09F50C8318d769245beA52c32BE35BC') -var MERKLE_DISTRIBUTOR_ADDRESS = - ((_d$3 = {}), (_d$3[SupportedChainId.MAINNET] = '0x090D4613473dEE047c3f2706764f49E0821D256e'), _d$3) -var ARGENT_WALLET_DETECTOR_ADDRESS = - ((_e$2 = {}), (_e$2[SupportedChainId.MAINNET] = '0xeca4B0bDBf7c55E9b7925919d03CbF8Dc82537E8'), _e$2) -var V3_CORE_FACTORY_ADDRESSES = constructSameAddressMap(FACTORY_ADDRESS$1, [ - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON_MUMBAI, - SupportedChainId.POLYGON, -]) -var QUOTER_ADDRESSES = constructSameAddressMap('0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6', [ - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON_MUMBAI, - SupportedChainId.POLYGON, -]) -constructSameAddressMap('0xC36442b4a4522E871399CD717aBDD847Ab11FE88', [ - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON_MUMBAI, - SupportedChainId.POLYGON, -]) -var ENS_REGISTRAR_ADDRESSES = - ((_f$1 = {}), - (_f$1[SupportedChainId.MAINNET] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'), - (_f$1[SupportedChainId.ROPSTEN] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'), - (_f$1[SupportedChainId.GOERLI] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'), - (_f$1[SupportedChainId.RINKEBY] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'), - _f$1) -var SOCKS_CONTROLLER_ADDRESSES = - ((_g$1 = {}), (_g$1[SupportedChainId.MAINNET] = '0x65770b5283117639760beA3F867b69b3697a91dd'), _g$1) -constructSameAddressMap('0xA5644E29708357803b5A882D272c41cC0dF92B34', [ - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON_MUMBAI, - SupportedChainId.POLYGON, -]) -;(_h$1 = {}), - (_h$1[SupportedChainId.ARBITRUM_ONE] = '0xbfd8137f7d1516D3ea5cA83523914859ec47F573'), - (_h$1[SupportedChainId.ARBITRUM_RINKEBY] = '0xbfd8137f7d1516D3ea5cA83523914859ec47F573'), - _h$1 - -var _a$f, _b$5 -var AMPL = new Token(SupportedChainId.MAINNET, '0xD46bA6D942050d489DBd938a2C909A5d5039A161', 9, 'AMPL', 'Ampleforth') -var DAI = new Token(SupportedChainId.MAINNET, '0x6B175474E89094C44Da98b954EedeAC495271d0F', 18, 'DAI', 'Dai Stablecoin') -var DAI_ARBITRUM_ONE = new Token( - SupportedChainId.ARBITRUM_ONE, - '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', - 18, - 'DAI', - 'Dai stable coin' -) -var DAI_OPTIMISM = new Token( - SupportedChainId.OPTIMISM, - '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', - 18, - 'DAI', - 'Dai stable coin' -) -var USDC = new Token(SupportedChainId.MAINNET, '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', 6, 'USDC', 'USD//C') -var USDC_ARBITRUM = new Token( - SupportedChainId.ARBITRUM_ONE, - '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8', - 6, - 'USDC', - 'USD//C' -) -var USDC_POLYGON = new Token( - SupportedChainId.POLYGON, - '0x2791bca1f2de4661ed88a30c99a7a9449aa84174', - 6, - 'USDC', - 'USD//C' -) -var DAI_POLYGON = new Token( - SupportedChainId.POLYGON, - '0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063', - 18, - 'DAI', - 'Dai Stablecoin' -) -var USDT_POLYGON = new Token( - SupportedChainId.POLYGON, - '0xc2132d05d31c914a87c6611c10748aeb04b58e8f', - 6, - 'USDT', - 'Tether USD' -) -var WBTC_POLYGON = new Token( - SupportedChainId.POLYGON, - '0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6', - 8, - 'WBTC', - 'Wrapped BTC' -) -var USDC_OPTIMISM = new Token( - SupportedChainId.OPTIMISM, - '0x7F5c764cBc14f9669B88837ca1490cCa17c31607', - 6, - 'USDC', - 'USD//C' -) -var USDT = new Token(SupportedChainId.MAINNET, '0xdAC17F958D2ee523a2206206994597C13D831ec7', 6, 'USDT', 'Tether USD') -var USDT_ARBITRUM_ONE = new Token( - SupportedChainId.ARBITRUM_ONE, - '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9', - 6, - 'USDT', - 'Tether USD' -) -var USDT_OPTIMISM = new Token( - SupportedChainId.OPTIMISM, - '0x94b008aA00579c1307B0EF2c499aD98a8ce58e58', - 6, - 'USDT', - 'Tether USD' -) -var WBTC = new Token(SupportedChainId.MAINNET, '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', 8, 'WBTC', 'Wrapped BTC') -var WBTC_ARBITRUM_ONE = new Token( - SupportedChainId.ARBITRUM_ONE, - '0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f', - 8, - 'WBTC', - 'Wrapped BTC' -) -var WBTC_OPTIMISM = new Token( - SupportedChainId.OPTIMISM, - '0x68f180fcCe6836688e9084f035309E29Bf0A2095', - 8, - 'WBTC', - 'Wrapped BTC' -) -var FEI = new Token(SupportedChainId.MAINNET, '0x956F47F50A910163D8BF957Cf5846D573E7f87CA', 18, 'FEI', 'Fei USD') -var TRIBE = new Token(SupportedChainId.MAINNET, '0xc7283b66Eb1EB5FB86327f08e1B5816b0720212B', 18, 'TRIBE', 'Tribe') -var FRAX = new Token(SupportedChainId.MAINNET, '0x853d955aCEf822Db058eb8505911ED77F175b99e', 18, 'FRAX', 'Frax') -var FXS = new Token(SupportedChainId.MAINNET, '0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0', 18, 'FXS', 'Frax Share') -var renBTC = new Token(SupportedChainId.MAINNET, '0xEB4C2781e4ebA804CE9a9803C67d0893436bB27D', 8, 'renBTC', 'renBTC') -var ETH2X_FLI = new Token( - SupportedChainId.MAINNET, - '0xAa6E8127831c9DE45ae56bB1b0d4D4Da6e5665BD', - 18, - 'ETH2x-FLI', - 'ETH 2x Flexible Leverage Index' -) -var sETH2 = new Token( - SupportedChainId.MAINNET, - '0xFe2e637202056d30016725477c5da089Ab0A043A', - 18, - 'sETH2', - 'StakeWise Staked ETH2' -) -var rETH2 = new Token( - SupportedChainId.MAINNET, - '0x20BC832ca081b91433ff6c17f85701B6e92486c5', - 18, - 'rETH2', - 'StakeWise Reward ETH2' -) -var SWISE = new Token(SupportedChainId.MAINNET, '0x48C3399719B582dD63eB5AADf12A40B4C3f52FA2', 18, 'SWISE', 'StakeWise') -var WETH_POLYGON_MUMBAI = new Token( - SupportedChainId.POLYGON_MUMBAI, - '0xa6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa', - 18, - 'WETH', - 'Wrapped Ether' -) -var WETH_POLYGON = new Token( - SupportedChainId.POLYGON, - '0x7ceb23fd6bc0add59e62ac25578270cff1b9f619', - 18, - 'WETH', - 'Wrapped Ether' -) -var UNI = - ((_a$f = {}), - (_a$f[SupportedChainId.MAINNET] = new Token(SupportedChainId.MAINNET, UNI_ADDRESS[1], 18, 'UNI', 'Uniswap')), - (_a$f[SupportedChainId.RINKEBY] = new Token(SupportedChainId.RINKEBY, UNI_ADDRESS[4], 18, 'UNI', 'Uniswap')), - (_a$f[SupportedChainId.ROPSTEN] = new Token(SupportedChainId.ROPSTEN, UNI_ADDRESS[3], 18, 'UNI', 'Uniswap')), - (_a$f[SupportedChainId.GOERLI] = new Token(SupportedChainId.GOERLI, UNI_ADDRESS[5], 18, 'UNI', 'Uniswap')), - (_a$f[SupportedChainId.KOVAN] = new Token(SupportedChainId.KOVAN, UNI_ADDRESS[42], 18, 'UNI', 'Uniswap')), - _a$f) -var WRAPPED_NATIVE_CURRENCY = __assign( - __assign({}, WETH9), - ((_b$5 = {}), - (_b$5[SupportedChainId.OPTIMISM] = new Token( - SupportedChainId.OPTIMISM, - '0x4200000000000000000000000000000000000006', - 18, - 'WETH', - 'Wrapped Ether' - )), - (_b$5[SupportedChainId.OPTIMISTIC_KOVAN] = new Token( - SupportedChainId.OPTIMISTIC_KOVAN, - '0x4200000000000000000000000000000000000006', - 18, - 'WETH', - 'Wrapped Ether' - )), - (_b$5[SupportedChainId.ARBITRUM_ONE] = new Token( - SupportedChainId.ARBITRUM_ONE, - '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1', - 18, - 'WETH', - 'Wrapped Ether' - )), - (_b$5[SupportedChainId.ARBITRUM_RINKEBY] = new Token( - SupportedChainId.ARBITRUM_RINKEBY, - '0xB47e6A5f8b33b3F17603C83a0535A9dcD7E32681', - 18, - 'WETH', - 'Wrapped Ether' - )), - (_b$5[SupportedChainId.POLYGON] = new Token( - SupportedChainId.POLYGON, - '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270', - 18, - 'WMATIC', - 'Wrapped MATIC' - )), - (_b$5[SupportedChainId.POLYGON_MUMBAI] = new Token( - SupportedChainId.POLYGON_MUMBAI, - '0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889', - 18, - 'WMATIC', - 'Wrapped MATIC' - )), - _b$5) -) -function isMatic(chainId) { - return chainId === SupportedChainId.POLYGON_MUMBAI || chainId === SupportedChainId.POLYGON -} -var MaticNativeCurrency = /** @class */ (function (_super) { - __extends(MaticNativeCurrency, _super) - function MaticNativeCurrency(chainId) { - var _this = this - if (!isMatic(chainId)) throw new Error('Not matic') - _this = _super.call(this, chainId, 18, 'MATIC', 'Polygon Matic') || this - return _this - } - MaticNativeCurrency.prototype.equals = function (other) { - return other.isNative && other.chainId === this.chainId - } - Object.defineProperty(MaticNativeCurrency.prototype, 'wrapped', { - get() { - if (!isMatic(this.chainId)) throw new Error('Not matic') - return WRAPPED_NATIVE_CURRENCY[this.chainId] - }, - enumerable: false, - configurable: true, - }) - return MaticNativeCurrency -})(NativeCurrency) -var ExtendedEther = /** @class */ (function (_super) { - __extends(ExtendedEther, _super) - function ExtendedEther() { - return (_super !== null && _super.apply(this, arguments)) || this - } - Object.defineProperty(ExtendedEther.prototype, 'wrapped', { - get() { - if (this.chainId in WRAPPED_NATIVE_CURRENCY) return WRAPPED_NATIVE_CURRENCY[this.chainId] - throw new Error('Unsupported chain ID') - }, - enumerable: false, - configurable: true, - }) - ExtendedEther.onChain = function (chainId) { - var _a - return (_a = this._cachedExtendedEther[chainId]) !== null && _a !== void 0 - ? _a - : (this._cachedExtendedEther[chainId] = new ExtendedEther(chainId)) - } - ExtendedEther._cachedExtendedEther = {} - return ExtendedEther -})(Ether) -var cachedNativeCurrency = {} -function nativeOnChain(chainId) { - var _a - return (_a = cachedNativeCurrency[chainId]) !== null && _a !== void 0 - ? _a - : (cachedNativeCurrency[chainId] = isMatic(chainId) - ? new MaticNativeCurrency(chainId) - : ExtendedEther.onChain(chainId)) -} - -// returns null on errors -function useContract(addressOrAddressMap, ABI, withSignerIfPossible) { - if (withSignerIfPossible === void 0) { - withSignerIfPossible = true - } - var _a = useActiveWeb3React(), - library = _a.library, - account = _a.account, - chainId = _a.chainId - return useMemo( - function () { - if (!addressOrAddressMap || !ABI || !library || !chainId) return null - var address - if (typeof addressOrAddressMap === 'string') address = addressOrAddressMap - else address = addressOrAddressMap[chainId] - if (!address) return null - try { - return getContract(address, ABI, library, withSignerIfPossible && account ? account : undefined) - } catch (error) { - console.error('Failed to get contract', error) - return null - } - }, - [addressOrAddressMap, ABI, library, chainId, withSignerIfPossible, account] - ) -} -function useTokenContract(tokenAddress, withSignerIfPossible) { - return useContract(tokenAddress, ERC20ABI, withSignerIfPossible) -} -function useWETHContract(withSignerIfPossible) { - var _a - var chainId = useActiveWeb3React().chainId - return useContract( - chainId ? ((_a = WRAPPED_NATIVE_CURRENCY[chainId]) === null || _a === void 0 ? void 0 : _a.address) : undefined, - WETH_ABI, - withSignerIfPossible - ) -} -function useERC721Contract(nftAddress) { - return useContract(nftAddress, ERC721_ABI, false) -} -function useERC1155Contract(nftAddress) { - return useContract(nftAddress, ERC1155_ABI, false) -} -function useArgentWalletDetectorContract() { - return useContract(ARGENT_WALLET_DETECTOR_ADDRESS, ARGENT_WALLET_DETECTOR_ABI, false) -} -function useENSRegistrarContract(withSignerIfPossible) { - return useContract(ENS_REGISTRAR_ADDRESSES, ENS_ABI, withSignerIfPossible) -} -function useENSResolverContract(address, withSignerIfPossible) { - return useContract(address, ENS_PUBLIC_RESOLVER_ABI, withSignerIfPossible) -} -function useBytes32TokenContract(tokenAddress, withSignerIfPossible) { - return useContract(tokenAddress, ERC20_BYTES32_ABI, withSignerIfPossible) -} -function useEIP2612Contract(tokenAddress) { - return useContract(tokenAddress, EIP_2612, false) -} -function useV2RouterContract() { - return useContract(V2_ROUTER_ADDRESS, abi$3, true) -} -function useInterfaceMulticall() { - return useContract(MULTICALL_ADDRESS, abi$1, false) -} -function useMerkleDistributorContract() { - return useContract(MERKLE_DISTRIBUTOR_ADDRESS, abi$5, true) -} -function useV3Quoter() { - return useContract(QUOTER_ADDRESSES, abi$2) -} - -var _a$e -var multicall = createMulticall() -var reducer = combineReducers(((_a$e = {}), (_a$e[multicall.reducerPath] = multicall.reducer), _a$e)) -createStore(reducer) -function MulticallUpdater() { - var latestBlockNumber = useBlockNumber() - var chainId = useActiveWeb3React().chainId - var contract = useInterfaceMulticall() - return jsx(multicall.Updater, { chainId, latestBlockNumber, contract }, void 0) -} - -function useMultipleContractSingleData() { - var _a - var args = [] - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i] - } - var _b = useCallContext(), - chainId = _b.chainId, - latestBlock = _b.latestBlock - return (_a = multicall.hooks).useMultipleContractSingleData.apply( - _a, - __spreadArray([chainId, latestBlock], __read(args), false) - ) -} -function useSingleCallResult() { - var _a - var args = [] - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i] - } - var _b = useCallContext(), - chainId = _b.chainId, - latestBlock = _b.latestBlock - return (_a = multicall.hooks).useSingleCallResult.apply( - _a, - __spreadArray([chainId, latestBlock], __read(args), false) - ) -} -function useSingleContractMultipleData() { - var _a - var args = [] - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i] - } - var _b = useCallContext(), - chainId = _b.chainId, - latestBlock = _b.latestBlock - return (_a = multicall.hooks).useSingleContractMultipleData.apply( - _a, - __spreadArray([chainId, latestBlock], __read(args), false) - ) -} -function useSingleContractWithCallData() { - var _a - var args = [] - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i] - } - var _b = useCallContext(), - chainId = _b.chainId, - latestBlock = _b.latestBlock - return (_a = multicall.hooks).useSingleContractWithCallData.apply( - _a, - __spreadArray([chainId, latestBlock], __read(args), false) - ) -} -function useCallContext() { - var chainId = useActiveWeb3React().chainId - var latestBlock = useBlockNumber() - return { chainId, latestBlock } -} - -function safeNamehash(name) { - if (name === undefined) return undefined - try { - return namehash(name) - } catch (error) { - console.debug(error) - return undefined - } -} - -/** - * Returns true if the string value is zero in hex - * @param hexNumberString - */ -function isZero(hexNumberString) { - return /^0x0*$/.test(hexNumberString) -} - -/** - * Does a lookup for an ENS name to find its address. - */ -function useENSAddress(ensName) { - var _a - var debouncedName = useDebounce(ensName, 200) - var ensNodeArgument = useMemo( - function () { - return [debouncedName === null ? undefined : safeNamehash(debouncedName)] - }, - [debouncedName] - ) - var registrarContract = useENSRegistrarContract(false) - var resolverAddress = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument) - var resolverAddressResult = (_a = resolverAddress.result) === null || _a === void 0 ? void 0 : _a[0] - var resolverContract = useENSResolverContract( - resolverAddressResult && !isZero(resolverAddressResult) ? resolverAddressResult : undefined, - false - ) - var addr = useSingleCallResult(resolverContract, 'addr', ensNodeArgument) - var changed = debouncedName !== ensName - return useMemo( - function () { - var _a, _b - return { - address: changed - ? null - : (_b = (_a = addr.result) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 - ? _b - : null, - loading: changed || resolverAddress.loading || addr.loading, - } - }, - [addr.loading, addr.result, changed, resolverAddress.loading] - ) -} - -/** - * Does a reverse lookup for an address to find its ENS name. - * Note this is not the same as looking up an ENS name to find an address. - */ -function useENSName(address) { - var _a, _b - var debouncedAddress = useDebounce(address, 200) - var ensNodeArgument = useMemo( - function () { - if (!debouncedAddress || !isAddress(debouncedAddress)) return [undefined] - return [namehash(debouncedAddress.toLowerCase().substr(2) + '.addr.reverse')] - }, - [debouncedAddress] - ) - var registrarContract = useENSRegistrarContract(false) - var resolverAddress = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument) - var resolverAddressResult = (_a = resolverAddress.result) === null || _a === void 0 ? void 0 : _a[0] - var resolverContract = useENSResolverContract( - resolverAddressResult && !isZero(resolverAddressResult) ? resolverAddressResult : undefined, - false - ) - var nameCallRes = useSingleCallResult(resolverContract, 'name', ensNodeArgument) - var name = (_b = nameCallRes.result) === null || _b === void 0 ? void 0 : _b[0] - /* ENS does not enforce that an address owns a .eth domain before setting it as a reverse proxy - and recommends that you perform a match on the forward resolution - see: https://docs.ens.domains/dapp-developer-guide/resolving-names#reverse-resolution - */ - var fwdAddr = useENSAddress(name) - var checkedName = address === (fwdAddr === null || fwdAddr === void 0 ? void 0 : fwdAddr.address) ? name : null - var changed = debouncedAddress !== address - return useMemo( - function () { - return { - ENSName: changed ? null : checkedName, - loading: changed || resolverAddress.loading || nameCallRes.loading, - } - }, - [changed, nameCallRes.loading, checkedName, resolverAddress.loading] - ) -} - -/** - * Given a name or address, does a lookup to resolve to an address and name - * @param nameOrAddress ENS name or address - */ -function useENS(nameOrAddress) { - var validated = isAddress(nameOrAddress) - var reverseLookup = useENSName(validated ? validated : undefined) - var lookup = useENSAddress(nameOrAddress) - return useMemo( - function () { - return { - loading: reverseLookup.loading || lookup.loading, - address: validated ? validated : lookup.address, - name: reverseLookup.ENSName - ? reverseLookup.ENSName - : !validated && lookup.address - ? nameOrAddress || null - : null, - } - }, - [lookup.address, lookup.loading, nameOrAddress, reverseLookup.ENSName, reverseLookup.loading, validated] - ) -} - -/** - * Returns the gas value plus a margin for unexpected or variable gas costs - * @param value the gas value to pad - */ -function calculateGasMargin(value) { - return value.mul(120).div(100) -} - -/** - * Be careful adding to this enum, always assign a unique value (typescript will not prevent duplicate values). - * These values is persisted in state and if you change the value it will cause errors - */ -var TransactionType -;(function (TransactionType) { - TransactionType[(TransactionType['APPROVAL'] = 0)] = 'APPROVAL' - TransactionType[(TransactionType['SWAP'] = 1)] = 'SWAP' - TransactionType[(TransactionType['DEPOSIT_LIQUIDITY_STAKING'] = 2)] = 'DEPOSIT_LIQUIDITY_STAKING' - TransactionType[(TransactionType['WITHDRAW_LIQUIDITY_STAKING'] = 3)] = 'WITHDRAW_LIQUIDITY_STAKING' - TransactionType[(TransactionType['CLAIM'] = 4)] = 'CLAIM' - TransactionType[(TransactionType['VOTE'] = 5)] = 'VOTE' - TransactionType[(TransactionType['DELEGATE'] = 6)] = 'DELEGATE' - TransactionType[(TransactionType['WRAP'] = 7)] = 'WRAP' - TransactionType[(TransactionType['CREATE_V3_POOL'] = 8)] = 'CREATE_V3_POOL' - TransactionType[(TransactionType['ADD_LIQUIDITY_V3_POOL'] = 9)] = 'ADD_LIQUIDITY_V3_POOL' - TransactionType[(TransactionType['ADD_LIQUIDITY_V2_POOL'] = 10)] = 'ADD_LIQUIDITY_V2_POOL' - TransactionType[(TransactionType['MIGRATE_LIQUIDITY_V3'] = 11)] = 'MIGRATE_LIQUIDITY_V3' - TransactionType[(TransactionType['COLLECT_FEES'] = 12)] = 'COLLECT_FEES' - TransactionType[(TransactionType['REMOVE_LIQUIDITY_V3'] = 13)] = 'REMOVE_LIQUIDITY_V3' - TransactionType[(TransactionType['SUBMIT_PROPOSAL'] = 14)] = 'SUBMIT_PROPOSAL' -})(TransactionType || (TransactionType = {})) -var addTransaction = createAction('transactions/addTransaction') -var clearAllTransactions = createAction('transactions/clearAllTransactions') -var finalizeTransaction = createAction('transactions/finalizeTransaction') -var checkedTransaction = createAction('transactions/checkedTransaction') - -var SUPPORTED_TRANSACTION_TYPES = [ - TransactionType.ADD_LIQUIDITY_V2_POOL, - TransactionType.ADD_LIQUIDITY_V3_POOL, - TransactionType.CREATE_V3_POOL, - TransactionType.REMOVE_LIQUIDITY_V3, - TransactionType.SWAP, -] -var FIREBASE_API_KEY = process.env.REACT_APP_FIREBASE_KEY -var firebaseEnabled = typeof FIREBASE_API_KEY !== 'undefined' -if (firebaseEnabled) initializeFirebase() -function useMonitoringEventCallback() { - var chainId = useActiveWeb3React().chainId - return useCallback( - function log(type, _a) { - var transactionResponse = _a.transactionResponse, - walletAddress = _a.walletAddress - return __awaiter(this, void 0, void 0, function () { - var db - return __generator(this, function (_b) { - if (!firebaseEnabled) return [2 /*return*/] - db = getDatabase() - if (!walletAddress) { - console.debug('Wallet address required to log monitoring events.') - return [2 /*return*/] - } - try { - push(ref(db, 'trm'), { - chainId, - origin: window.location.origin, - timestamp: Date.now(), - tx: transactionResponse, - type, - walletAddress, - }) - } catch (e) { - console.debug('Error adding document: ', e) - } - return [2 /*return*/] - }) - }) - }, - [chainId] - ) -} -function useTransactionMonitoringEventCallback() { - var account = useActiveWeb3React().account - var log = useMonitoringEventCallback() - return useCallback( - function (info, transactionResponse) { - if (SUPPORTED_TRANSACTION_TYPES.includes(info.type)) { - log(TransactionType[info.type], { - transactionResponse: (function (_a) { - var hash = _a.hash, - v = _a.v, - r = _a.r, - s = _a.s - return { hash, v, r, s } - })(transactionResponse), - walletAddress: account !== null && account !== void 0 ? account : undefined, - }) - } - }, - [account, log] - ) -} -function useWalletConnectMonitoringEventCallback() { - var log = useMonitoringEventCallback() - return useCallback( - function (walletAddress) { - log('WALLET_CONNECTED', { transactionResponse: { hash: '', r: '', s: '', v: -1 }, walletAddress }) - }, - [log] - ) -} -function initializeFirebase() { - initializeApp({ - apiKey: process.env.REACT_APP_FIREBASE_KEY, - authDomain: 'interface-monitoring.firebaseapp.com', - databaseURL: 'https://interface-monitoring-default-rtdb.firebaseio.com', - projectId: 'interface-monitoring', - storageBucket: 'interface-monitoring.appspot.com', - messagingSenderId: '968187720053', - appId: '1:968187720053:web:acedf72dce629d470be33c', - }) -} - -// helper that can take a ethers library transaction response and add it to the list of transactions -function useTransactionAdder() { - var _a = useActiveWeb3React(), - chainId = _a.chainId, - account = _a.account - var dispatch = useAppDispatch() - var logMonitoringEvent = useTransactionMonitoringEventCallback() - return useCallback( - function (response, info) { - if (!account) return - if (!chainId) return - var hash = response.hash - if (!hash) { - throw Error('No transaction hash found.') - } - dispatch(addTransaction({ hash, from: account, info, chainId })) - logMonitoringEvent(info, response) - }, - [account, chainId, dispatch, logMonitoringEvent] - ) -} -// returns all the transactions for the current chain -function useAllTransactions() { - var _a - var chainId = useActiveWeb3React().chainId - var state = useAppSelector(function (state) { - return state.transactions - }) - return chainId ? ((_a = state[chainId]) !== null && _a !== void 0 ? _a : {}) : {} -} -function useTransaction(transactionHash) { - var allTransactions = useAllTransactions() - if (!transactionHash) { - return undefined - } - return allTransactions[transactionHash] -} -function useIsTransactionPending(transactionHash) { - var transactions = useAllTransactions() - if (!transactionHash || !transactions[transactionHash]) return false - return !transactions[transactionHash].receipt -} -function useIsTransactionConfirmed(transactionHash) { - var transactions = useAllTransactions() - if (!transactionHash || !transactions[transactionHash]) return false - return Boolean(transactions[transactionHash].receipt) -} -/** - * Returns whether a transaction happened in the last day (86400 seconds * 1000 milliseconds / second) - * @param tx to check for recency - */ -function isTransactionRecent(tx) { - return new Date().getTime() - tx.addedTime < 86400000 -} -// returns whether a token has a pending approval transaction -function useHasPendingApproval(token, spender) { - var allTransactions = useAllTransactions() - return useMemo( - function () { - return ( - typeof (token === null || token === void 0 ? void 0 : token.address) === 'string' && - typeof spender === 'string' && - Object.keys(allTransactions).some(function (hash) { - var tx = allTransactions[hash] - if (!tx) return false - if (tx.receipt) { - return false - } else { - if (tx.info.type !== TransactionType.APPROVAL) return false - return tx.info.spender === spender && tx.info.tokenAddress === token.address && isTransactionRecent(tx) - } - }) - ) - }, - [allTransactions, spender, token === null || token === void 0 ? void 0 : token.address] - ) -} -// watch for submissions to claim -// return null if not done loading, return undefined if not found -function useUserHasSubmittedClaim(account) { - var allTransactions = useAllTransactions() - // get the txn if it has been submitted - var claimTxn = useMemo( - function () { - var txnIndex = Object.keys(allTransactions).find(function (hash) { - var tx = allTransactions[hash] - return tx.info.type === TransactionType.CLAIM && tx.info.recipient === account - }) - return txnIndex && allTransactions[txnIndex] ? allTransactions[txnIndex] : undefined - }, - [account, allTransactions] - ) - return { claimSubmitted: Boolean(claimTxn), claimTxn } -} - -var FETCH_CLAIM_MAPPING_PROMISE = null -function fetchClaimMapping() { - return FETCH_CLAIM_MAPPING_PROMISE !== null && FETCH_CLAIM_MAPPING_PROMISE !== void 0 - ? FETCH_CLAIM_MAPPING_PROMISE - : (FETCH_CLAIM_MAPPING_PROMISE = fetch( - 'https://raw.githubusercontent.com/Uniswap/mrkl-drop-data-chunks/final/chunks/mapping.json' - ) - .then(function (res) { - return res.json() - }) - .catch(function (error) { - console.error('Failed to get claims mapping', error) - FETCH_CLAIM_MAPPING_PROMISE = null - })) -} -var FETCH_CLAIM_FILE_PROMISES = {} -function fetchClaimFile(key) { - var _a - return (_a = FETCH_CLAIM_FILE_PROMISES[key]) !== null && _a !== void 0 - ? _a - : (FETCH_CLAIM_FILE_PROMISES[key] = fetch( - 'https://raw.githubusercontent.com/Uniswap/mrkl-drop-data-chunks/final/chunks/' + key + '.json' - ) - .then(function (res) { - return res.json() - }) - .catch(function (error) { - console.error('Failed to get claim file mapping for starting address ' + key, error) - delete FETCH_CLAIM_FILE_PROMISES[key] - })) -} -var FETCH_CLAIM_PROMISES = {} -// returns the claim for the given address, or null if not valid -function fetchClaim(account) { - var _a - var formatted = isAddress(account) - if (!formatted) return Promise.reject(new Error('Invalid address')) - return (_a = FETCH_CLAIM_PROMISES[account]) !== null && _a !== void 0 - ? _a - : (FETCH_CLAIM_PROMISES[account] = fetchClaimMapping() - .then(function (mapping) { - var e_1, _a - var sorted = Object.keys(mapping).sort(function (a, b) { - return a.toLowerCase() < b.toLowerCase() ? -1 : 1 - }) - try { - for ( - var sorted_1 = __values(sorted), sorted_1_1 = sorted_1.next(); - !sorted_1_1.done; - sorted_1_1 = sorted_1.next() - ) { - var startingAddress = sorted_1_1.value - var lastAddress = mapping[startingAddress] - if (startingAddress.toLowerCase() <= formatted.toLowerCase()) { - if (formatted.toLowerCase() <= lastAddress.toLowerCase()) { - return startingAddress - } - } else { - throw new Error('Claim for ' + formatted + ' was not found in partial search') - } - } - } catch (e_1_1) { - e_1 = { error: e_1_1 } - } finally { - try { - if (sorted_1_1 && !sorted_1_1.done && (_a = sorted_1.return)) _a.call(sorted_1) - } finally { - if (e_1) throw e_1.error - } - } - throw new Error('Claim for ' + formatted + ' was not found after searching all mappings') - }) - .then(fetchClaimFile) - .then(function (result) { - if (result[formatted]) return result[formatted] - throw new Error('Claim for ' + formatted + ' was not found in claim file!') - }) - .catch(function (error) { - console.debug('Claim fetch failed', error) - throw error - })) -} -// parse distributorContract blob and detect if user has claim data -// null means we know it does not -function useUserClaimData(account) { - var chainId = useActiveWeb3React().chainId - var _a = __read(useState({}), 2), - claimInfo = _a[0], - setClaimInfo = _a[1] - useEffect( - function () { - if (!account || chainId !== 1) return - fetchClaim(account) - .then(function (accountClaimInfo) { - return setClaimInfo(function (claimInfo) { - var _a - return __assign(__assign({}, claimInfo), ((_a = {}), (_a[account] = accountClaimInfo), _a)) - }) - }) - .catch(function () { - setClaimInfo(function (claimInfo) { - var _a - return __assign(__assign({}, claimInfo), ((_a = {}), (_a[account] = null), _a)) - }) - }) - }, - [account, chainId] - ) - return account && chainId === 1 ? claimInfo[account] : null -} -// check if user is in blob and has not yet claimed UNI -function useUserHasAvailableClaim(account) { - var _a - var userClaimData = useUserClaimData(account) - var distributorContract = useMerkleDistributorContract() - var isClaimedResult = useSingleCallResult(distributorContract, 'isClaimed', [ - userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.index, - ]) - // user is in blob and contract marks as unclaimed - return Boolean( - userClaimData && - !isClaimedResult.loading && - ((_a = isClaimedResult.result) === null || _a === void 0 ? void 0 : _a[0]) === false - ) -} -function useUserUnclaimedAmount(account) { - var chainId = useActiveWeb3React().chainId - var userClaimData = useUserClaimData(account) - var canClaim = useUserHasAvailableClaim(account) - var uni = chainId ? UNI[chainId] : undefined - if (!uni) return undefined - if (!canClaim || !userClaimData) { - return CurrencyAmount.fromRawAmount(uni, JSBI.BigInt(0)) - } - return CurrencyAmount.fromRawAmount(uni, JSBI.BigInt(userClaimData.amount)) -} -function useClaimCallback(account) { - // get claim data for this account - var _a = useActiveWeb3React(), - library = _a.library, - chainId = _a.chainId - var claimData = useUserClaimData(account) - // used for popup summary - var unclaimedAmount = useUserUnclaimedAmount(account) - var addTransaction = useTransactionAdder() - var distributorContract = useMerkleDistributorContract() - var claimCallback = function () { - return __awaiter(this, void 0, void 0, function () { - var args - var _a - return __generator(this, function (_b) { - if (!claimData || !account || !library || !chainId || !distributorContract) return [2 /*return*/] - args = [claimData.index, account, claimData.amount, claimData.proof] - return [ - 2 /*return*/, - (_a = distributorContract.estimateGas)['claim'] - .apply(_a, __spreadArray(__spreadArray([], __read(args), false), [{}], false)) - .then(function (estimatedGasLimit) { - return distributorContract.claim - .apply( - distributorContract, - __spreadArray( - __spreadArray([], __read(args), false), - [{ value: null, gasLimit: calculateGasMargin(estimatedGasLimit) }], - false - ) - ) - .then(function (response) { - addTransaction(response, { - type: TransactionType.CLAIM, - recipient: account, - uniAmountRaw: - unclaimedAmount === null || unclaimedAmount === void 0 - ? void 0 - : unclaimedAmount.quotient.toString(), - }) - return response.hash - }) - }), - ] - }) - }) - } - return { claimCallback } -} - -var _a$d, _b$4, _c$3, _d$2, _e$1, _f, _g, _h -var WRAPPED_NATIVE_CURRENCIES_ONLY = Object.fromEntries( - Object.entries(WRAPPED_NATIVE_CURRENCY).map(function (_a) { - var _b = __read(_a, 2), - key = _b[0], - value = _b[1] - return [key, [value]] - }) -) -// used to construct intermediary pairs for trading -var BASES_TO_CHECK_TRADES_AGAINST = __assign( - __assign({}, WRAPPED_NATIVE_CURRENCIES_ONLY), - ((_a$d = {}), - (_a$d[SupportedChainId.MAINNET] = __spreadArray( - __spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.MAINNET]), false), - [DAI, USDC, USDT, WBTC], - false - )), - (_a$d[SupportedChainId.OPTIMISM] = __spreadArray( - __spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.OPTIMISM]), false), - [DAI_OPTIMISM, USDT_OPTIMISM, WBTC_OPTIMISM], - false - )), - (_a$d[SupportedChainId.ARBITRUM_ONE] = __spreadArray( - __spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.ARBITRUM_ONE]), false), - [DAI_ARBITRUM_ONE, USDT_ARBITRUM_ONE, WBTC_ARBITRUM_ONE], - false - )), - (_a$d[SupportedChainId.POLYGON] = __spreadArray( - __spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.POLYGON]), false), - [DAI_POLYGON, USDC_POLYGON, USDT_POLYGON, WETH_POLYGON], - false - )), - _a$d) -) -var ADDITIONAL_BASES = - ((_b$4 = {}), - (_b$4[SupportedChainId.MAINNET] = - ((_c$3 = { - '0xF16E4d813f4DcfDe4c5b44f305c908742De84eF0': [ETH2X_FLI], - }), - (_c$3[rETH2.address] = [sETH2]), - (_c$3[SWISE.address] = [sETH2]), - (_c$3[FEI.address] = [TRIBE]), - (_c$3[TRIBE.address] = [FEI]), - (_c$3[FRAX.address] = [FXS]), - (_c$3[FXS.address] = [FRAX]), - (_c$3[WBTC.address] = [renBTC]), - (_c$3[renBTC.address] = [WBTC]), - _c$3)), - _b$4) -/** - * Some tokens can only be swapped via certain pairs, so we override the list of bases that are considered for these - * tokens. - */ -var CUSTOM_BASES = - ((_d$2 = {}), - (_d$2[SupportedChainId.MAINNET] = - ((_e$1 = {}), (_e$1[AMPL.address] = [DAI, WRAPPED_NATIVE_CURRENCY[SupportedChainId.MAINNET]]), _e$1)), - _d$2) -/** - * Shows up in the currency select for swap and add liquidity - */ -var COMMON_BASES = - ((_f = {}), - (_f[SupportedChainId.MAINNET] = [ - nativeOnChain(SupportedChainId.MAINNET), - DAI, - USDC, - USDT, - WBTC, - WRAPPED_NATIVE_CURRENCY[SupportedChainId.MAINNET], - ]), - (_f[SupportedChainId.ROPSTEN] = [ - nativeOnChain(SupportedChainId.ROPSTEN), - WRAPPED_NATIVE_CURRENCY[SupportedChainId.ROPSTEN], - ]), - (_f[SupportedChainId.RINKEBY] = [ - nativeOnChain(SupportedChainId.RINKEBY), - WRAPPED_NATIVE_CURRENCY[SupportedChainId.RINKEBY], - ]), - (_f[SupportedChainId.GOERLI] = [ - nativeOnChain(SupportedChainId.GOERLI), - WRAPPED_NATIVE_CURRENCY[SupportedChainId.GOERLI], - ]), - (_f[SupportedChainId.KOVAN] = [ - nativeOnChain(SupportedChainId.KOVAN), - WRAPPED_NATIVE_CURRENCY[SupportedChainId.KOVAN], - ]), - (_f[SupportedChainId.ARBITRUM_ONE] = [ - nativeOnChain(SupportedChainId.ARBITRUM_ONE), - DAI_ARBITRUM_ONE, - USDC_ARBITRUM, - USDT_ARBITRUM_ONE, - WBTC_ARBITRUM_ONE, - WRAPPED_NATIVE_CURRENCY[SupportedChainId.ARBITRUM_ONE], - ]), - (_f[SupportedChainId.ARBITRUM_RINKEBY] = [ - nativeOnChain(SupportedChainId.ARBITRUM_RINKEBY), - WRAPPED_NATIVE_CURRENCY[SupportedChainId.ARBITRUM_RINKEBY], - ]), - (_f[SupportedChainId.OPTIMISM] = [ - nativeOnChain(SupportedChainId.OPTIMISM), - DAI_OPTIMISM, - USDC_OPTIMISM, - USDT_OPTIMISM, - WBTC_OPTIMISM, - ]), - (_f[SupportedChainId.OPTIMISTIC_KOVAN] = [nativeOnChain(SupportedChainId.OPTIMISTIC_KOVAN)]), - (_f[SupportedChainId.POLYGON] = [ - nativeOnChain(SupportedChainId.POLYGON), - WETH_POLYGON, - USDC_POLYGON, - DAI_POLYGON, - USDT_POLYGON, - WBTC_POLYGON, - ]), - (_f[SupportedChainId.POLYGON_MUMBAI] = [ - nativeOnChain(SupportedChainId.POLYGON_MUMBAI), - WRAPPED_NATIVE_CURRENCY[SupportedChainId.POLYGON_MUMBAI], - WETH_POLYGON_MUMBAI, - ]), - _f) -// used to construct the list of all pairs we consider by default in the frontend -__assign( - __assign({}, WRAPPED_NATIVE_CURRENCIES_ONLY), - ((_g = {}), - (_g[SupportedChainId.MAINNET] = __spreadArray( - __spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.MAINNET]), false), - [DAI, USDC, USDT, WBTC], - false - )), - _g) -) -;(_h = {}), - (_h[SupportedChainId.MAINNET] = [ - [ - new Token(SupportedChainId.MAINNET, '0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643', 8, 'cDAI', 'Compound Dai'), - new Token( - SupportedChainId.MAINNET, - '0x39AA39c021dfbaE8faC545936693aC917d5E7563', - 8, - 'cUSDC', - 'Compound USD Coin' - ), - ], - [USDC, USDT], - [DAI, USDT], - ]), - _h - -var EthereumLogo = - 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAAAXNSR0IB2cksfwAAAAlwSFlzAAALEwAACxMBAJqcGAAADxdJREFUeJztXVtzFMcVplwuP8VVeYmf7HJ+RKqSl/AQP6X8H+yqXUEIjhMnQY5jO9oVCIzA5mowdzAYG4xAGAyWLC5G3IyDL8gOASUYKrarYGZWC7qi23b6692VV6uZ7e6ZnT3di07VV6JUaLfnnG+6z+lz+vScOXUoL6SzP52/2PtlQ9p7piHlLU2k3P2JJqcjkXLO8589/OdN/tPjvx8VEP8Wv+sp/J8O/A3+Fp+Bz8JnUj/XrPjIwjT7ybxm57fJlLsy2eR2cwPe4QZksYB/Nr4D34XvxHdTP/8DJ+k0e4S/lb9Jpr2WZJNzgRtjPDaDS4DvFmPgY8GYMDZq/dStNKQzv0qmnA1c6RkqgysQIoMxYqzU+qoLWZDO/jyZdl7lir1ObdwQZLiOseMZqPVonSTS7i+4AtsTTW6O2pDR4ebEs/Bnotar8dKw2Pk1n0I76Y0W16zgdOIZqfVsnCSbvaeEB2+AkWpCBEQS/Jmp9U4u3Fl6nIdWB6gNQgb+7NABtR1qLjxcejiZdhfxKXGA3AjUswHXAXQBnVDbpSbCPeO5fAr8hlrxpgE6gW6o7ROb5N96Z3l9ePZxgUcMXEd1NxssbMk8kWxyztEr2A5AV3XjGySb3acTSLYYoFjL4EF31PYLLXwaeyiZcltnp/woEJtIrdAltT21BEkR7tnuo1dgfQC6tCbRlGh1H02k3C5qpalg/bt3WdOGDPk4lACdct1S27eiLEgPPMbDmcvkylLAgiUOc/sm2LHuITavmX48KoBun1828DNqO/tKsiX7JF+zeqmVpIqPzg2xyckc++Sfw2ImoB6POtxe6Jra3tMEb75Nxv/Hmxk2MZGbIsCpz4bZn1d45OPSIQF0Tm13IViXbJn2i+i9NcYgRQIA+zsGyMelA6Fzap8AnqktDl8RO9r7WVFKCQAs3dJHPj4tcN2TRQcizrcs1Hv+NZf1D04GEqDj/JBwDqnHqYNCiFj7fYL8Jg+9AnTQfXmYlUo5AYAtbffIx6lNAm6L2hpfbO/atcO3dGsfy+VyUgIAL66yySEE3FzNto2R2ElYtrffkHbYd7fHWbkEEeDQyUHk6cnHrQkPtonV+CKla2FWDx6+nwQRAFi5K0s+bl3ANrGmkvP5fPoH1cFfX/fYyP2cNgG6Lg6z55a55OPXJgG3UVzGn2vbug98fvW+r/FlBADePtJPPn59iKKS6lYW5ad++8q4Vu+5G2h8FQIAr663JFlUAtiqqksBZ1Uj9UPp4neLHeb0TUQmwNEzg2xemv559OE2VsX4KE2ysXoXhpOJCgGAdXttShblAZtVpayMe5Zt1A+ji5fXZdj4uL/jF4YApy4NsxdaLXQIue2iGb/Ze4r6IcLg6rejUuPrEAB47yO7kkVTJIhyAsnG41rYylUVHQIAizdZlixqyh9DC2V8HGKkHrwuELffHZiUWz4kAVBEAueS+jl1EepAqo2ndLFW64guAYBNB2xMFjmdWsbHWXbqQesC0zMMGjcBgEVv2JYs4tDpT5BvzmDAoBWBxM2tH8a0jB+FAAe77EsWwaZKxkdLE9u2fPce65dbu4oEAFp32JYscnNK7WrQ14Z+sOpAMefwiLrjVy0CdF0cYguX2rU3ANtKCWBTdS9wqWcklPGjEgDYcdiuZBEaV1U0PtqbUQ9SB6/vyoY2fjUIALy81q5kUcUWduhxRz1AVcxvdthtb2aVT60JcOT0oKg4otaHKmBjX+OLA50GN2Esx+FT8mRPLQgAIO1MrQ91ArgZ31JytDqlHpwqXlrjsbExvZg/TgKcvDTM/rjcHocQtp45/ae9FuqBqeLr/6gle2pFAAChKLVeVAFbzyRAk3OBemAq2LhfPdlTSwIA6Y12JItg62nGR9tzyq7bqljY4rK+e5WrfCgJcPzskHBOqfUkJQC39bRW9+h9Tz0oFXx8Yahqxo+DAMCGfXY4hLB5SfjnrqQekAypjRntZA8FAU5/NixK0an1JQNsXrL+m1/4ceM7/WRPJcExsas3Rtn7nQNVJ8GBj82vHppWKBLrNStVAOrzqyWjPHzEWQGEbjBW81t9bPn2LNt9tF/UE1SLBMu2Ge4QcpsL4+MyJPLBVADi68HhcMmeUrnbP8kufDUyw8ggQBHoD7Dt4D3WyX2NqASAv/L7Fnr9VYK4CAs3YlEPpBLOfxk+2QP5wRlnZy7ztTnAUKUEKGLJpj72JnfmUFoehQTbDpldPQTb8/Xfe5Z6IEHA1BxWem+N8rdd/ib7EaAUq/dkxZoelgTYtaTWYxBwJR7y/8uoB+IHnMbB26sjY+M59uU1vr5/qj6FywhQxIodWfbOh/2ioZQOAZCzMLV6CLafU7hUkXww5Wjr8j/S7Sdo+3LxyojSGx+WAFN+wtY+tp1P7V0afsIbbxtaPcRtb2T1b+Mqj90flcf8t91x1v158PoeBwGKWLy5j23kfsIxBT/h5KfDoj8RtV7LIaqFTcwBfHUt+Eg35L//G2WnqxSyhSVAKdZwP+FgV2U/Yc9R85JFIieQwH25BgymCHTt9JPxiRy7ch3xe/QQrdoEKGLlzqzICgb5CQb2Je6ZU7g0mXogAmjR5mWnJ3uwB3Dp65nxu4kEKGIZ9xN2tN9jJy5OJ6txfYm57TEDGNPwCdm0otzJTLCzX+T31uMwfJwEmNpP2NLHNu2/y453/0gEw/oSe3MK16dTD2Sqf+/N78diN3qtCDDlMG7qY2v33mWHTg6Y1ZeY294YAhw7Ozi1P19L1IIA0/yEXdxpfMeQWUAQwJAlAClUtHOrdwL8fW3GpBPGnlFOIIDp8lh3dT19EwiAJe4PprWdKziBRoWBALaB1/JpEhsothMAdYJY8w3dDhZh4HkDBuIL7J7t+qDfWgKg57BRYV85uO0xA3SQD0SCl9ZkRP9eWwjwyrqM8bUABXQYkwySpU0xhb62Lcs6z5u7E4idPpUDIn8ypeOYSAYZkg5esTPLPr0yIu2+gd1CnA3QTcvGSYA0B6IY2TpfXNLQxo5a30BDyluKI2HPUA+kCHj/qNlDDl0WKsGxevd49LAxqvGxPM2XjBV+AJpNYp/DpJ1AURBiUkkYvP9i9S9yAnjTZX+DaffoJ+H9g7CGR1j3nEKDCIS12OLGd6HGwaRoQJSEmVYU+rfVHhu+/2MR6LWbo+JMQGUmO6Lo4kSIsDFMWKfSNRRLWWnJOdrPm3aAVBSFmlgWXt7sEQc4kB+QKRBv5Pb2e7ERAIUqssbROL629eDMMSzZbFiZeLEs3NSDISjhLpeh4Umx7ssaMiD+bpMUaOgQAE6b7DYxjAkdS7ouzoxScFUdtT7LMe1giIlHw/AmORn/g6AoFlWps0OdP7p7hiUA/AuVUi74A+gU4vf5KC2XOYkkBCg9Gmbq4VBMm0gRBwkqgGX7B1A+PO+ggpKgsO4vK+VhHXwBVAAFkQuhqqk3kE07HGry8XDU5FcStIWHl40Zo9LnwH9AXZ6MAHBCZUe8EaLiFLBsL2LVbjOrgWccDze5QQTeQpX27zj6tV3hJM4r6zPsg5Lpemr7lv9eRiIA5V4dCruR+wxuLz+jQYTpLWIwHQ8MqZ0P/Pb7MdYiuQMYpMLOI87vIcRU2ZrFUnPwhNp+A7arTb5xzLdFjOlNorCTpio4+o0zhSBOpc+EZy+LKJDD33lYLyNpYPXvNPg2ibKhTRzqA3QE9wUiHAzTtgXx/po9+jUJpreTD2wTlw8HzW4UCY/e7wpYmSCc1NmDRxQQpioJOQzTbxgLbBSZXwbMbxWLmDtsj8B/3RiteA8gMnr7QtYlItEjW3JMQMVWsflZwL1OPUgZEM6FFWwrI2dQWp+H4o3NB/S2kMuBo+zUepFB2ixaEMCSdvFf/Lvy+UGZIKpAW5hiNBDF+Cae+/MlgEq7eFsujMAWbdSegdXoEoZNKFmewAwoXhhRWAasuDIGTRuitI57kNrFK18ZA7Hp0qgPz4RvHhmVACZV90ihc2lUfhYwr3GEHxrS4XsIRiEAchQmVfdUgva1cRCbLo58sayKKG4CIOdvWnVPxZckzMWRYhYwsFAkCDpXxkYlgHHVPRUQ+upYQQDLLo/W7SkYhgAoOaN+Ti0CRLk8GpJIOQeoH0IVSOfeCagiqgYBUH1sYnVPILjtIhkf0pDOPM6diAHyh1EEpufxClVEYQmA4o9Gi66Mhc1gu8gEgCTT7iLqB9KBrIooDAGM7fUXRABus6oYH5JOs4e5M/EN9UNpsF+0gq8WAd4zuLrH9/m5rWCzqhEAkkw7c23YIi4CmTl0EI1KAFHdY9UVsW4Otqqq8UtIsJz+AdWBJhNRCYD0M/Vz6AA2isX4kPxS4JyjfkgdVKoikhHgrfctC/m4bao+9ZfLwpbMEwlDGkupoFIVUSUCtJ80v7qnDB5sE6vxi5Jsdp+2yR9AFdCoTxVREAEwaxjTy08JfN3nNqmJ8adIkHJb6R9cHbt9qoiCCIBOJNTj1QFsUVPjQ/ha8xCPNfdRP7wOcFmUjAC7j9hR3TNlfG4D2KLmBCiQ4JFEyu2iVoIqyquIyglgT3VPAVz3gSXetZJEq/tossm9TK4MRbSWVBGVEwDtXqjHpwqhc657UuMXZUF64DHuiPRSK0UVOLJdTgCcPKIelzrcXuic2u7TJNmSfdIWEhSriIoEsKm6BzqGrqnt7StgpS3LAc7to+MIqntMvM/HD9CtcW9+uWBdssUxxDk+dPGiHocSoFNT1nyZiIOmloWIJqMQ6tF6+7oi9gnEZpE9O4bmwc1Bh2RxfjUkv21sT+7AIHg1396NS5CksC2LSAnoqmaJnVqJSCWLeoLZJSEYophjeewpXUpBtYpN5WW1AnQSWyWPaQKGc7Y32lRtHJvhhQ7cxrp+64NElJw3OW3URqB76522qpVu2yw4vWLTMbTohne7I5/YqUfBIUZbTiWHMjx/ttAHNR8kwVn2fJOKeogYxGZOu/b5/FnJt6vJ9yyyI8tYZvhejF25LcusVBa0N0OPO5ObWWJsGKO0FdushBckRdDqFP1u0fSYsss5vluMgY8FY7IuYVMPgrbn6H2PCxBEJBHn9Tf8s4UHz78L3zmj5fqsmCG4DAk3YiWbvGfFvYgpdz888EJL/J7Chdkerk8XEP8Wv+vJzyo8EsHf8L/FZ+Czpi5YqjP5P2ey0rAsl+yGAAAAAElFTkSuQmCC' - -var arbitrumLogoUrl = - 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20viewBox%3D%220%200%20470.287%20514.251%22%20enable-background%3D%22new%200%200%20470.287%20514.251%22%20xml%3Aspace%3D%22preserve%22%3E%3Cg%20id%3D%22Background%22%3E%3C%2Fg%3E%3Cg%20id%3D%22Logos_and_symbols%22%3E%20%3Cg%20id%3D%22SYMBOL_VER_3%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_4_3_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_1_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_1_%22%3E%20%20%3Cg%20id%3D%22_x31_-3%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_14_%22%3E%20%20%20%3Cpath%20fill%3D%22%232D374B%22%20d%3D%22M291.134%2C237.469l35.654-60.5l96.103%2C149.684l0.046%2C28.727l-0.313-197.672%20%20%20%20c-0.228-4.832-2.794-9.252-6.887-11.859L242.715%2C46.324c-4.045-1.99-9.18-1.967-13.22%2C0.063c-0.546%2C0.272-1.06%2C0.57-1.548%2C0.895%20%20%20%20l-0.604%2C0.379L59.399%2C144.983l-0.651%2C0.296c-0.838%2C0.385-1.686%2C0.875-2.48%2C1.444c-3.185%2C2.283-5.299%2C5.66-5.983%2C9.448%20%20%20%20c-0.103%2C0.574-0.179%2C1.158-0.214%2C1.749l0.264%2C161.083l89.515-138.745c11.271-18.397%2C35.825-24.323%2C58.62-24.001l26.753%2C0.706%20%20%20%20L67.588%2C409.765l18.582%2C10.697L245.692%2C157.22l70.51-0.256L157.091%2C426.849l66.306%2C38.138l7.922%2C4.556%20%20%20%20c3.351%2C1.362%2C7.302%2C1.431%2C10.681%2C0.21l175.453-101.678l-33.544%2C19.438L291.134%2C237.469z%20M304.736%2C433.395l-66.969-105.108%20%20%20%20l40.881-69.371l87.952%2C138.628L304.736%2C433.395z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%2328A0F0%22%20points%3D%22237.768%2C328.286%20304.736%2C433.395%20366.601%2C397.543%20278.648%2C258.915%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2328A0F0%22%20d%3D%22M422.937%2C355.379l-0.046-28.727l-96.103-149.684l-35.654%2C60.5l92.774%2C150.043l33.544-19.438%20%20%20%20c3.29-2.673%2C5.281-6.594%2C5.49-10.825L422.937%2C355.379z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23FFFFFF%22%20d%3D%22M20.219%2C382.469l47.369%2C27.296l157.634-252.801l-26.753-0.706c-22.795-0.322-47.35%2C5.604-58.62%2C24.001%20%20%20%20L50.334%2C319.004l-30.115%2C46.271V382.469z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%23FFFFFF%22%20points%3D%22316.202%2C156.964%20245.692%2C157.22%2086.17%2C420.462%20141.928%2C452.565%20157.091%2C426.849%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2396BEDC%22%20d%3D%22M452.65%2C156.601c-0.59-14.746-8.574-28.245-21.08-36.104L256.28%2C19.692%20%20%20%20c-12.371-6.229-27.825-6.237-40.218-0.004c-1.465%2C0.739-170.465%2C98.752-170.465%2C98.752c-2.339%2C1.122-4.592%2C2.458-6.711%2C3.975%20%20%20%20c-11.164%2C8.001-17.969%2C20.435-18.668%2C34.095v208.765l30.115-46.271L50.07%2C157.921c0.035-0.589%2C0.109-1.169%2C0.214-1.741%20%20%20%20c0.681-3.79%2C2.797-7.171%2C5.983-9.456c0.795-0.569%2C172.682-100.064%2C173.228-100.337c4.04-2.029%2C9.175-2.053%2C13.22-0.063%20%20%20%20l173.022%2C99.523c4.093%2C2.607%2C6.659%2C7.027%2C6.887%2C11.859v199.542c-0.209%2C4.231-1.882%2C8.152-5.172%2C10.825l-33.544%2C19.438%20%20%20%20l-17.308%2C10.031l-61.864%2C35.852l-62.737%2C36.357c-3.379%2C1.221-7.33%2C1.152-10.681-0.21l-74.228-42.693l-15.163%2C25.717%20%20%20%20l66.706%2C38.406c2.206%2C1.255%2C4.171%2C2.367%2C5.784%2C3.272c2.497%2C1.4%2C4.199%2C2.337%2C4.8%2C2.629c4.741%2C2.303%2C11.563%2C3.643%2C17.71%2C3.643%20%20%20%20c5.636%2C0%2C11.132-1.035%2C16.332-3.072l182.225-105.531c10.459-8.104%2C16.612-20.325%2C17.166-33.564V156.601z%22%2F%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_13_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_6_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_3_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_15_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_3_%22%3E%20%20%20%3Cg%20id%3D%22_x33__7_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic%22%3E%20%20%20%3Cg%20id%3D%22_x33__3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_10_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x34__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_2_%22%3E%20%20%20%3Cg%20id%3D%22_x33__6_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_2_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_11_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_5_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_12_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_1_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_9_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_2_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol_1_%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_1_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_7_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_8_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Monochromatic_1_%22%3E%20%20%3Cg%20id%3D%22_x33__4_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E' - -var optimismLogoUrl = - 'data:image/svg+xml,%3Csvg%20width%3D%22170%22%20height%3D%22168%22%20viewBox%3D%220%200%20170%20168%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20clip-path%3D%22url%28%23clip0%29%22%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF505F%22%2F%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF0320%22%2F%3E%3Cpath%20d%3D%22M85.05%200C132.022%200%20170.1%2037.8949%20170.1%2084.6407C170.1%20131.386%200%20131.386%200%2084.6407C0%2037.8949%2038.0782%200%2085.05%200Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.665%2064.0394L112.444%2012.3742L89.0263%2078.9477L144.665%2064.0394Z%22%20fill%3D%22%23FF4E65%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.777%2064.215L112.444%2012.3742L165.349%2058.4347L143.777%2064.215Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.551%2063.613L142.479%20124.467L88.912%2078.5213L144.551%2063.613Z%22%20fill%3D%22%23D0001A%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.663%2063.7886L142.479%20124.467L165.235%2058.0083L143.663%2063.7886Z%22%20fill%3D%22%23FF697B%22%2F%3E%3C%2Fg%3E%3Cdefs%3E%3CclipPath%20id%3D%22clip0%22%3E%3Crect%20width%3D%22170%22%20height%3D%22168%22%20fill%3D%22white%22%2F%3E%3C%2FclipPath%3E%3C%2Fdefs%3E%3C%2Fsvg%3E' - -var polygonMaticLogo = - 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20viewBox%3D%220%200%2038.4%2033.5%22%20style%3D%22enable-background%3Anew%200%200%2038.4%2033.5%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cstyle%20type%3D%22text%2Fcss%22%3E%20.st0%7Bfill%3A%238247E5%3B%7D%3C%2Fstyle%3E%3Cg%3E%20%3Cpath%20class%3D%22st0%22%20d%3D%22M29%2C10.2c-0.7-0.4-1.6-0.4-2.4%2C0L21%2C13.5l-3.8%2C2.1l-5.5%2C3.3c-0.7%2C0.4-1.6%2C0.4-2.4%2C0L5%2C16.3%20%20c-0.7-0.4-1.2-1.2-1.2-2.1v-5c0-0.8%2C0.4-1.6%2C1.2-2.1l4.3-2.5c0.7-0.4%2C1.6-0.4%2C2.4%2C0L16%2C7.2c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v3.3l3.8-2.2V7%20%20c0-0.8-0.4-1.6-1.2-2.1l-8-4.7c-0.7-0.4-1.6-0.4-2.4%2C0L1.2%2C5C0.4%2C5.4%2C0%2C6.2%2C0%2C7v9.4c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l5.5-3.2l3.8-2.2l5.5-3.2c0.7-0.4%2C1.6-0.4%2C2.4%2C0l4.3%2C2.5c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v5c0%2C0.8-0.4%2C1.6-1.2%2C2.1%20%20L29%2C28.8c-0.7%2C0.4-1.6%2C0.4-2.4%2C0l-4.3-2.5c-0.7-0.4-1.2-1.2-1.2-2.1V21l-3.8%2C2.2v3.3c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l8.1-4.7c0.7-0.4%2C1.2-1.2%2C1.2-2.1V17c0-0.8-0.4-1.6-1.2-2.1L29%2C10.2z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E' - -var UNI_LIST = 'https://tokens.uniswap.org' -var AAVE_LIST = 'tokenlist.aave.eth' -var BA_LIST = 'https://raw.githubusercontent.com/The-Blockchain-Association/sec-notice-list/master/ba-sec-list.json' -var CMC_ALL_LIST = 'https://api.coinmarketcap.com/data-api/v3/uniswap/all.json' -var COINGECKO_LIST = 'https://tokens.coingecko.com/uniswap/all.json' -var COMPOUND_LIST = 'https://raw.githubusercontent.com/compound-finance/token-list/master/compound.tokenlist.json' -var GEMINI_LIST = 'https://www.gemini.com/uniswap/manifest.json' -var ARBITRUM_LIST = 'https://bridge.arbitrum.io/token-list-42161.json' -var KLEROS_LIST = 't2crtokens.eth' -var OPTIMISM_LIST = 'https://static.optimism.io/optimism.tokenlist.json' -var ROLL_LIST = 'https://app.tryroll.com/tokens.json' -var SET_LIST = 'https://raw.githubusercontent.com/SetProtocol/uniswap-tokenlist/main/set.tokenlist.json' -var WRAPPED_LIST = 'wrapped.tokensoft.eth' -var UNSUPPORTED_LIST_URLS = [BA_LIST] -// this is the default list of lists that are exposed to users -// lower index == higher priority for token import -var DEFAULT_LIST_OF_LISTS_TO_DISPLAY = [ - UNI_LIST, - COMPOUND_LIST, - AAVE_LIST, - CMC_ALL_LIST, - COINGECKO_LIST, - KLEROS_LIST, - GEMINI_LIST, - WRAPPED_LIST, - SET_LIST, - ROLL_LIST, - ARBITRUM_LIST, - OPTIMISM_LIST, -] -var DEFAULT_LIST_OF_LISTS = __spreadArray( - __spreadArray([], __read(DEFAULT_LIST_OF_LISTS_TO_DISPLAY), false), - __read(UNSUPPORTED_LIST_URLS), - false -) -// default lists to be 'active' aka searched across -var DEFAULT_ACTIVE_LIST_URLS = [UNI_LIST, GEMINI_LIST] - -var _a$c, _b$3 -var INFURA_KEY = process.env.REACT_APP_INFURA_KEY -if (typeof INFURA_KEY === 'undefined') { - throw new Error('REACT_APP_INFURA_KEY must be a defined environment variable') -} -/** - * These are the network URLs used by the interface when there is not another available source of chain data - */ -var INFURA_NETWORK_URLS = - ((_a$c = {}), - (_a$c[SupportedChainId.MAINNET] = 'https://mainnet.infura.io/v3/' + INFURA_KEY), - (_a$c[SupportedChainId.RINKEBY] = 'https://rinkeby.infura.io/v3/' + INFURA_KEY), - (_a$c[SupportedChainId.ROPSTEN] = 'https://ropsten.infura.io/v3/' + INFURA_KEY), - (_a$c[SupportedChainId.GOERLI] = 'https://goerli.infura.io/v3/' + INFURA_KEY), - (_a$c[SupportedChainId.KOVAN] = 'https://kovan.infura.io/v3/' + INFURA_KEY), - (_a$c[SupportedChainId.OPTIMISM] = 'https://optimism-mainnet.infura.io/v3/' + INFURA_KEY), - (_a$c[SupportedChainId.OPTIMISTIC_KOVAN] = 'https://optimism-kovan.infura.io/v3/' + INFURA_KEY), - (_a$c[SupportedChainId.ARBITRUM_ONE] = 'https://arbitrum-mainnet.infura.io/v3/' + INFURA_KEY), - (_a$c[SupportedChainId.ARBITRUM_RINKEBY] = 'https://arbitrum-rinkeby.infura.io/v3/' + INFURA_KEY), - (_a$c[SupportedChainId.POLYGON] = 'https://polygon-mainnet.infura.io/v3/' + INFURA_KEY), - (_a$c[SupportedChainId.POLYGON_MUMBAI] = 'https://polygon-mumbai.infura.io/v3/' + INFURA_KEY), - _a$c) -var NetworkType -;(function (NetworkType) { - NetworkType[(NetworkType['L1'] = 0)] = 'L1' - NetworkType[(NetworkType['L2'] = 1)] = 'L2' -})(NetworkType || (NetworkType = {})) -var CHAIN_INFO = - ((_b$3 = {}), - (_b$3[SupportedChainId.MAINNET] = { - networkType: NetworkType.L1, - docs: 'https://docs.uniswap.org/', - explorer: 'https://etherscan.io/', - infoLink: 'https://info.uniswap.org/#/', - label: 'Ethereum', - logoUrl: EthereumLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, - rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.MAINNET], - }, - }), - (_b$3[SupportedChainId.RINKEBY] = { - networkType: NetworkType.L1, - docs: 'https://docs.uniswap.org/', - explorer: 'https://rinkeby.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/', - label: 'Rinkeby', - logoUrl: EthereumLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Rinkeby Ether', symbol: 'rETH', decimals: 18 }, - rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.RINKEBY], - }, - }), - (_b$3[SupportedChainId.ROPSTEN] = { - networkType: NetworkType.L1, - docs: 'https://docs.uniswap.org/', - explorer: 'https://ropsten.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/', - label: 'Ropsten', - logoUrl: EthereumLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Ropsten Ether', symbol: 'ropETH', decimals: 18 }, - rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.ROPSTEN], - }, - }), - (_b$3[SupportedChainId.KOVAN] = { - networkType: NetworkType.L1, - docs: 'https://docs.uniswap.org/', - explorer: 'https://kovan.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/', - label: 'Kovan', - logoUrl: EthereumLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Kovan Ether', symbol: 'kovETH', decimals: 18 }, - rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.KOVAN], - }, - }), - (_b$3[SupportedChainId.GOERLI] = { - networkType: NetworkType.L1, - docs: 'https://docs.uniswap.org/', - explorer: 'https://goerli.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/', - label: 'Görli', - logoUrl: EthereumLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Görli Ether', symbol: 'görETH', decimals: 18 }, - rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.GOERLI], - }, - }), - (_b$3[SupportedChainId.OPTIMISM] = { - networkType: NetworkType.L2, - blockWaitMsBeforeWarning: ms(templateObject_1$1m || (templateObject_1$1m = __makeTemplateObject(['25m'], ['25m']))), - bridge: 'https://gateway.optimism.io/?chainId=1', - defaultListUrl: OPTIMISM_LIST, - docs: 'https://optimism.io/', - explorer: 'https://optimistic.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/optimism/', - label: 'Optimism', - logoUrl: optimismLogoUrl, - statusPage: 'https://optimism.io/status', - helpCenterUrl: 'https://help.uniswap.org/en/collections/3137778-uniswap-on-optimistic-ethereum-oξ', - addNetworkInfo: { - nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, - rpcUrl: 'https://mainnet.optimism.io', - }, - }), - (_b$3[SupportedChainId.OPTIMISTIC_KOVAN] = { - networkType: NetworkType.L2, - blockWaitMsBeforeWarning: ms(templateObject_2$10 || (templateObject_2$10 = __makeTemplateObject(['25m'], ['25m']))), - bridge: 'https://gateway.optimism.io/', - defaultListUrl: OPTIMISM_LIST, - docs: 'https://optimism.io/', - explorer: 'https://optimistic.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/optimism/', - label: 'Optimistic Kovan', - logoUrl: optimismLogoUrl, - statusPage: 'https://optimism.io/status', - helpCenterUrl: 'https://help.uniswap.org/en/collections/3137778-uniswap-on-optimistic-ethereum-oξ', - addNetworkInfo: { - nativeCurrency: { name: 'Optimistic Kovan Ether', symbol: 'kovOpETH', decimals: 18 }, - rpcUrl: 'https://kovan.optimism.io', - }, - }), - (_b$3[SupportedChainId.ARBITRUM_ONE] = { - networkType: NetworkType.L2, - blockWaitMsBeforeWarning: ms(templateObject_3$T || (templateObject_3$T = __makeTemplateObject(['10m'], ['10m']))), - bridge: 'https://bridge.arbitrum.io/', - docs: 'https://offchainlabs.com/', - explorer: 'https://arbiscan.io/', - infoLink: 'https://info.uniswap.org/#/arbitrum', - label: 'Arbitrum', - logoUrl: arbitrumLogoUrl, - defaultListUrl: ARBITRUM_LIST, - helpCenterUrl: 'https://help.uniswap.org/en/collections/3137787-uniswap-on-arbitrum', - addNetworkInfo: { - nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, - rpcUrl: 'https://arb1.arbitrum.io/rpc', - }, - }), - (_b$3[SupportedChainId.ARBITRUM_RINKEBY] = { - networkType: NetworkType.L2, - blockWaitMsBeforeWarning: ms(templateObject_4$H || (templateObject_4$H = __makeTemplateObject(['10m'], ['10m']))), - bridge: 'https://bridge.arbitrum.io/', - docs: 'https://offchainlabs.com/', - explorer: 'https://rinkeby-explorer.arbitrum.io/', - infoLink: 'https://info.uniswap.org/#/arbitrum/', - label: 'Arbitrum Rinkeby', - logoUrl: arbitrumLogoUrl, - defaultListUrl: ARBITRUM_LIST, - helpCenterUrl: 'https://help.uniswap.org/en/collections/3137787-uniswap-on-arbitrum', - addNetworkInfo: { - nativeCurrency: { name: 'Rinkeby Arbitrum Ether', symbol: 'rinkArbETH', decimals: 18 }, - rpcUrl: 'https://rinkeby.arbitrum.io/rpc', - }, - }), - (_b$3[SupportedChainId.POLYGON] = { - networkType: NetworkType.L1, - blockWaitMsBeforeWarning: ms(templateObject_5$y || (templateObject_5$y = __makeTemplateObject(['10m'], ['10m']))), - bridge: 'https://wallet.polygon.technology/bridge', - docs: 'https://polygon.io/', - explorer: 'https://polygonscan.com/', - infoLink: 'https://info.uniswap.org/#/polygon/', - label: 'Polygon', - logoUrl: polygonMaticLogo, - addNetworkInfo: { - rpcUrl: 'https://polygon-rpc.com/', - nativeCurrency: { name: 'Polygon Matic', symbol: 'MATIC', decimals: 18 }, - }, - }), - (_b$3[SupportedChainId.POLYGON_MUMBAI] = { - networkType: NetworkType.L1, - blockWaitMsBeforeWarning: ms(templateObject_6$p || (templateObject_6$p = __makeTemplateObject(['10m'], ['10m']))), - bridge: 'https://wallet.polygon.technology/bridge', - docs: 'https://polygon.io/', - explorer: 'https://mumbai.polygonscan.com/', - infoLink: 'https://info.uniswap.org/#/polygon/', - label: 'Polygon Mumbai', - logoUrl: polygonMaticLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Polygon Mumbai Matic', symbol: 'mMATIC', decimals: 18 }, - rpcUrl: 'https://rpc-endpoints.superfluid.dev/mumbai', - }, - }), - _b$3) -var templateObject_1$1m, - templateObject_2$10, - templateObject_3$T, - templateObject_4$H, - templateObject_5$y, - templateObject_6$p - -function useNativeCurrency() { - var chainId = useActiveWeb3React().chainId - return useMemo( - function () { - return chainId - ? nativeOnChain(chainId) - : // display mainnet when not connected - nativeOnChain(SupportedChainId.MAINNET) - }, - [chainId] - ) -} - -var EMPTY_CONNECTOR = initializeConnector(function () { - return EMPTY -}) -atomWithDefault(function () { - return EMPTY_CONNECTOR -}) -atomWithDefault(function () { - return EMPTY_CONNECTOR -}) - -var REGISTRAR_ABI = [ - { - constant: true, - inputs: [ - { - name: 'node', - type: 'bytes32', - }, - ], - name: 'resolver', - outputs: [ - { - name: 'resolverAddress', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, -] -var REGISTRAR_ADDRESS = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e' -var RESOLVER_ABI = [ - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - ], - name: 'contenthash', - outputs: [ - { - internalType: 'bytes', - name: '', - type: 'bytes', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, -] -// cache the resolver contracts since most of them are the public resolver -function resolverContract(resolverAddress, provider) { - return new Contract(resolverAddress, RESOLVER_ABI, provider) -} -/** - * Fetches and decodes the result of an ENS contenthash lookup on mainnet to a URI - * @param ensName to resolve - * @param provider provider to use to fetch the data - */ -function resolveENSContentHash(ensName, provider) { - return __awaiter(this, void 0, void 0, function () { - var ensRegistrarContract, hash, resolverAddress - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - ensRegistrarContract = new Contract(REGISTRAR_ADDRESS, REGISTRAR_ABI, provider) - hash = namehash(ensName) - return [4 /*yield*/, ensRegistrarContract.resolver(hash)] - case 1: - resolverAddress = _a.sent() - return [2 /*return*/, resolverContract(resolverAddress, provider).contenthash(hash)] - } - }) - }) -} - -function hexToUint8Array(hex) { - hex = hex.startsWith('0x') ? hex.substr(2) : hex - if (hex.length % 2 !== 0) throw new Error('hex must have length that is multiple of 2') - var arr = new Uint8Array(hex.length / 2) - for (var i = 0; i < arr.length; i++) { - arr[i] = parseInt(hex.substr(i * 2, 2), 16) - } - return arr -} -var UTF_8_DECODER = new TextDecoder('utf-8') -/** - * Returns the URI representation of the content hash for supported codecs - * @param contenthash to decode - */ -function contenthashToUri(contenthash) { - var data = hexToUint8Array(contenthash) - var codec = getNameFromData(data) - switch (codec) { - case 'ipfs-ns': { - var unprefixedData = rmPrefix(data) - var cid = new CID(unprefixedData) - return 'ipfs://' + toB58String(cid.multihash) - } - case 'ipns-ns': { - var unprefixedData = rmPrefix(data) - var cid = new CID(unprefixedData) - var multihash = decode(cid.multihash) - if (multihash.name === 'identity') { - return 'ipns://' + UTF_8_DECODER.decode(multihash.digest).trim() - } else { - return 'ipns://' + toB58String(cid.multihash) - } - } - default: - throw new Error('Unrecognized codec: ' + codec) - } -} - -var ENS_NAME_REGEX$1 = /^(([a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\.)+)eth(\/.*)?$/ -function parseENSAddress(ensAddress) { - var match = ensAddress.match(ENS_NAME_REGEX$1) - if (!match) return undefined - return { ensName: match[1].toLowerCase() + 'eth', ensPath: match[4] } -} - -/** - * Given a URI that may be ipfs, ipns, http, https, ar, or data protocol, return the fetch-able http(s) URLs for the same content - * @param uri to convert to fetch-able http url - */ -function uriToHttp(uri) { - var _a, _b, _c - var protocol = uri.split(':')[0].toLowerCase() - switch (protocol) { - case 'data': - return [uri] - case 'https': - return [uri] - case 'http': - return ['https' + uri.substr(4), uri] - case 'ipfs': - var hash = (_a = uri.match(/^ipfs:(\/\/)?(.*)$/i)) === null || _a === void 0 ? void 0 : _a[2] - return ['https://cloudflare-ipfs.com/ipfs/' + hash + '/', 'https://ipfs.io/ipfs/' + hash + '/'] - case 'ipns': - var name_1 = (_b = uri.match(/^ipns:(\/\/)?(.*)$/i)) === null || _b === void 0 ? void 0 : _b[2] - return ['https://cloudflare-ipfs.com/ipns/' + name_1 + '/', 'https://ipfs.io/ipns/' + name_1 + '/'] - case 'ar': - var tx = (_c = uri.match(/^ar:(\/\/)?(.*)$/i)) === null || _c === void 0 ? void 0 : _c[2] - return ['https://arweave.net/' + tx] - default: - return [] - } + { + inputs: [ + { + internalType: "address", + name: "_rewardsDistribution", + type: "address" + }, + { + internalType: "address", + name: "_rewardsToken", + type: "address" + }, + { + internalType: "address", + name: "_stakingToken", + type: "address" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint256", + name: "reward", + type: "uint256" + } + ], + name: "RewardAdded", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "user", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "reward", + type: "uint256" + } + ], + name: "RewardPaid", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "user", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "Staked", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "user", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "Withdrawn", + type: "event" + }, + { + constant: true, + inputs: [ + { + internalType: "address", + name: "account", + type: "address" + } + ], + name: "balanceOf", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "address", + name: "account", + type: "address" + } + ], + name: "earned", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + ], + name: "exit", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + ], + name: "getReward", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "getRewardForDuration", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "lastTimeRewardApplicable", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "lastUpdateTime", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "uint256", + name: "reward", + type: "uint256" + } + ], + name: "notifyRewardAmount", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "periodFinish", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "rewardPerToken", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "rewardPerTokenStored", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "rewardRate", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "rewards", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "rewardsDistribution", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "rewardsDuration", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "rewardsToken", + outputs: [ + { + internalType: "contract IERC20", + name: "", + type: "address" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "stake", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + }, + { + internalType: "uint8", + name: "v", + type: "uint8" + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32" + } + ], + name: "stakeWithPermit", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "stakingToken", + outputs: [ + { + internalType: "contract IERC20", + name: "", + type: "address" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "totalSupply", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "userRewardPerTokenPaid", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "withdraw", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + } +]; + +var abi$5 = [ + { + inputs: [ + { + internalType: "address", + name: "token_", + type: "address" + }, + { + internalType: "bytes32", + name: "merkleRoot_", + type: "bytes32" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint256", + name: "index", + type: "uint256" + }, + { + indexed: false, + internalType: "address", + name: "account", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "Claimed", + type: "event" + }, + { + inputs: [ + { + internalType: "uint256", + name: "index", + type: "uint256" + }, + { + internalType: "address", + name: "account", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + }, + { + internalType: "bytes32[]", + name: "merkleProof", + type: "bytes32[]" + } + ], + name: "claim", + outputs: [ + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "index", + type: "uint256" + } + ], + name: "isClaimed", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + ], + name: "merkleRoot", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + ], + name: "token", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + } +]; + +var abi$4 = [ + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "owner", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "spender", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "Approval", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "sender", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "amount0", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "amount1", + type: "uint256" + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address" + } + ], + name: "Burn", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "sender", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "amount0", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "amount1", + type: "uint256" + } + ], + name: "Mint", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "sender", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "amount0In", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "amount1In", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "amount0Out", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "amount1Out", + type: "uint256" + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address" + } + ], + name: "Swap", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint112", + name: "reserve0", + type: "uint112" + }, + { + indexed: false, + internalType: "uint112", + name: "reserve1", + type: "uint112" + } + ], + name: "Sync", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "from", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "Transfer", + type: "event" + }, + { + constant: true, + inputs: [ + ], + name: "DOMAIN_SEPARATOR", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "MINIMUM_LIQUIDITY", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "pure", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "PERMIT_TYPEHASH", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + payable: false, + stateMutability: "pure", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "spender", + type: "address" + } + ], + name: "allowance", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "approve", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + } + ], + name: "balanceOf", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "address", + name: "to", + type: "address" + } + ], + name: "burn", + outputs: [ + { + internalType: "uint256", + name: "amount0", + type: "uint256" + }, + { + internalType: "uint256", + name: "amount1", + type: "uint256" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "decimals", + outputs: [ + { + internalType: "uint8", + name: "", + type: "uint8" + } + ], + payable: false, + stateMutability: "pure", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "factory", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "getReserves", + outputs: [ + { + internalType: "uint112", + name: "reserve0", + type: "uint112" + }, + { + internalType: "uint112", + name: "reserve1", + type: "uint112" + }, + { + internalType: "uint32", + name: "blockTimestampLast", + type: "uint32" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "address", + name: "", + type: "address" + }, + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "initialize", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "kLast", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "address", + name: "to", + type: "address" + } + ], + name: "mint", + outputs: [ + { + internalType: "uint256", + name: "liquidity", + type: "uint256" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "name", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + payable: false, + stateMutability: "pure", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + } + ], + name: "nonces", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + }, + { + internalType: "uint8", + name: "v", + type: "uint8" + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32" + } + ], + name: "permit", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "price0CumulativeLast", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "price1CumulativeLast", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "address", + name: "to", + type: "address" + } + ], + name: "skim", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "uint256", + name: "amount0Out", + type: "uint256" + }, + { + internalType: "uint256", + name: "amount1Out", + type: "uint256" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "swap", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "symbol", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + payable: false, + stateMutability: "pure", + type: "function" + }, + { + constant: false, + inputs: [ + ], + name: "sync", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "token0", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "token1", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "totalSupply", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "transfer", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "address", + name: "from", + type: "address" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "transferFrom", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + } +]; + +var abi$3 = [ + { + inputs: [ + ], + name: "WETH", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "tokenA", + type: "address" + }, + { + internalType: "address", + name: "tokenB", + type: "address" + }, + { + internalType: "uint256", + name: "amountADesired", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountBDesired", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountAMin", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountBMin", + type: "uint256" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "addLiquidity", + outputs: [ + { + internalType: "uint256", + name: "amountA", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountB", + type: "uint256" + }, + { + internalType: "uint256", + name: "liquidity", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address" + }, + { + internalType: "uint256", + name: "amountTokenDesired", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountTokenMin", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountETHMin", + type: "uint256" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "addLiquidityETH", + outputs: [ + { + internalType: "uint256", + name: "amountToken", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountETH", + type: "uint256" + }, + { + internalType: "uint256", + name: "liquidity", + type: "uint256" + } + ], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + ], + name: "factory", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountOut", + type: "uint256" + }, + { + internalType: "uint256", + name: "reserveIn", + type: "uint256" + }, + { + internalType: "uint256", + name: "reserveOut", + type: "uint256" + } + ], + name: "getAmountIn", + outputs: [ + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + }, + { + internalType: "uint256", + name: "reserveIn", + type: "uint256" + }, + { + internalType: "uint256", + name: "reserveOut", + type: "uint256" + } + ], + name: "getAmountOut", + outputs: [ + { + internalType: "uint256", + name: "amountOut", + type: "uint256" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountOut", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + } + ], + name: "getAmountsIn", + outputs: [ + { + internalType: "uint256[]", + name: "amounts", + type: "uint256[]" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + } + ], + name: "getAmountsOut", + outputs: [ + { + internalType: "uint256[]", + name: "amounts", + type: "uint256[]" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountA", + type: "uint256" + }, + { + internalType: "uint256", + name: "reserveA", + type: "uint256" + }, + { + internalType: "uint256", + name: "reserveB", + type: "uint256" + } + ], + name: "quote", + outputs: [ + { + internalType: "uint256", + name: "amountB", + type: "uint256" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "tokenA", + type: "address" + }, + { + internalType: "address", + name: "tokenB", + type: "address" + }, + { + internalType: "uint256", + name: "liquidity", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountAMin", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountBMin", + type: "uint256" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "removeLiquidity", + outputs: [ + { + internalType: "uint256", + name: "amountA", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountB", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address" + }, + { + internalType: "uint256", + name: "liquidity", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountTokenMin", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountETHMin", + type: "uint256" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "removeLiquidityETH", + outputs: [ + { + internalType: "uint256", + name: "amountToken", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountETH", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address" + }, + { + internalType: "uint256", + name: "liquidity", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountTokenMin", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountETHMin", + type: "uint256" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "removeLiquidityETHSupportingFeeOnTransferTokens", + outputs: [ + { + internalType: "uint256", + name: "amountETH", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address" + }, + { + internalType: "uint256", + name: "liquidity", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountTokenMin", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountETHMin", + type: "uint256" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + }, + { + internalType: "bool", + name: "approveMax", + type: "bool" + }, + { + internalType: "uint8", + name: "v", + type: "uint8" + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32" + } + ], + name: "removeLiquidityETHWithPermit", + outputs: [ + { + internalType: "uint256", + name: "amountToken", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountETH", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address" + }, + { + internalType: "uint256", + name: "liquidity", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountTokenMin", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountETHMin", + type: "uint256" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + }, + { + internalType: "bool", + name: "approveMax", + type: "bool" + }, + { + internalType: "uint8", + name: "v", + type: "uint8" + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32" + } + ], + name: "removeLiquidityETHWithPermitSupportingFeeOnTransferTokens", + outputs: [ + { + internalType: "uint256", + name: "amountETH", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "tokenA", + type: "address" + }, + { + internalType: "address", + name: "tokenB", + type: "address" + }, + { + internalType: "uint256", + name: "liquidity", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountAMin", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountBMin", + type: "uint256" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + }, + { + internalType: "bool", + name: "approveMax", + type: "bool" + }, + { + internalType: "uint8", + name: "v", + type: "uint8" + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32" + } + ], + name: "removeLiquidityWithPermit", + outputs: [ + { + internalType: "uint256", + name: "amountA", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountB", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountOut", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "swapETHForExactTokens", + outputs: [ + { + internalType: "uint256[]", + name: "amounts", + type: "uint256[]" + } + ], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountOutMin", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "swapExactETHForTokens", + outputs: [ + { + internalType: "uint256[]", + name: "amounts", + type: "uint256[]" + } + ], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountOutMin", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "swapExactETHForTokensSupportingFeeOnTransferTokens", + outputs: [ + ], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountOutMin", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "swapExactTokensForETH", + outputs: [ + { + internalType: "uint256[]", + name: "amounts", + type: "uint256[]" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountOutMin", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "swapExactTokensForETHSupportingFeeOnTransferTokens", + outputs: [ + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountOutMin", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "swapExactTokensForTokens", + outputs: [ + { + internalType: "uint256[]", + name: "amounts", + type: "uint256[]" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountOutMin", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "swapExactTokensForTokensSupportingFeeOnTransferTokens", + outputs: [ + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountOut", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountInMax", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "swapTokensForExactETH", + outputs: [ + { + internalType: "uint256[]", + name: "amounts", + type: "uint256[]" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "amountOut", + type: "uint256" + }, + { + internalType: "uint256", + name: "amountInMax", + type: "uint256" + }, + { + internalType: "address[]", + name: "path", + type: "address[]" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "swapTokensForExactTokens", + outputs: [ + { + internalType: "uint256[]", + name: "amounts", + type: "uint256[]" + } + ], + stateMutability: "nonpayable", + type: "function" + } +]; + +var abi$2 = [ + { + inputs: [ + { + internalType: "address", + name: "_factory", + type: "address" + }, + { + internalType: "address", + name: "_WETH9", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + inputs: [ + ], + name: "WETH9", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + ], + name: "factory", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes", + name: "path", + type: "bytes" + }, + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + } + ], + name: "quoteExactInput", + outputs: [ + { + internalType: "uint256", + name: "amountOut", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "tokenIn", + type: "address" + }, + { + internalType: "address", + name: "tokenOut", + type: "address" + }, + { + internalType: "uint24", + name: "fee", + type: "uint24" + }, + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + }, + { + internalType: "uint160", + name: "sqrtPriceLimitX96", + type: "uint160" + } + ], + name: "quoteExactInputSingle", + outputs: [ + { + internalType: "uint256", + name: "amountOut", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes", + name: "path", + type: "bytes" + }, + { + internalType: "uint256", + name: "amountOut", + type: "uint256" + } + ], + name: "quoteExactOutput", + outputs: [ + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "tokenIn", + type: "address" + }, + { + internalType: "address", + name: "tokenOut", + type: "address" + }, + { + internalType: "uint24", + name: "fee", + type: "uint24" + }, + { + internalType: "uint256", + name: "amountOut", + type: "uint256" + }, + { + internalType: "uint160", + name: "sqrtPriceLimitX96", + type: "uint160" + } + ], + name: "quoteExactOutputSingle", + outputs: [ + { + internalType: "uint256", + name: "amountIn", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "int256", + name: "amount0Delta", + type: "int256" + }, + { + internalType: "int256", + name: "amount1Delta", + type: "int256" + }, + { + internalType: "bytes", + name: "path", + type: "bytes" + } + ], + name: "uniswapV3SwapCallback", + outputs: [ + ], + stateMutability: "view", + type: "function" + } +]; + +var abi$1 = [ + { + inputs: [ + ], + name: "getCurrentBlockTimestamp", + outputs: [ + { + internalType: "uint256", + name: "timestamp", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "addr", + type: "address" + } + ], + name: "getEthBalance", + outputs: [ + { + internalType: "uint256", + name: "balance", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "uint256", + name: "gasLimit", + type: "uint256" + }, + { + internalType: "bytes", + name: "callData", + type: "bytes" + } + ], + internalType: "struct UniswapInterfaceMulticall.Call[]", + name: "calls", + type: "tuple[]" + } + ], + name: "multicall", + outputs: [ + { + internalType: "uint256", + name: "blockNumber", + type: "uint256" + }, + { + components: [ + { + internalType: "bool", + name: "success", + type: "bool" + }, + { + internalType: "uint256", + name: "gasUsed", + type: "uint256" + }, + { + internalType: "bytes", + name: "returnData", + type: "bytes" + } + ], + internalType: "struct UniswapInterfaceMulticall.Result[]", + name: "returnData", + type: "tuple[]" + } + ], + stateMutability: "nonpayable", + type: "function" + } +]; + +var ARGENT_WALLET_DETECTOR_ABI = [ + { + inputs: [ + { + internalType: "bytes32[]", + name: "_codes", + type: "bytes32[]" + }, + { + internalType: "address[]", + name: "_implementations", + type: "address[]" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "code", + type: "bytes32" + } + ], + name: "CodeAdded", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "implementation", + type: "address" + } + ], + name: "ImplementationAdded", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "_newOwner", + type: "address" + } + ], + name: "OwnerChanged", + type: "event" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + name: "acceptedCodes", + outputs: [ + { + internalType: "bool", + name: "exists", + type: "bool" + }, + { + internalType: "uint128", + name: "index", + type: "uint128" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "acceptedImplementations", + outputs: [ + { + internalType: "bool", + name: "exists", + type: "bool" + }, + { + internalType: "uint128", + name: "index", + type: "uint128" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "_code", + type: "bytes32" + } + ], + name: "addCode", + outputs: [ + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "_argentWallet", + type: "address" + } + ], + name: "addCodeAndImplementationFromWallet", + outputs: [ + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "_impl", + type: "address" + } + ], + name: "addImplementation", + outputs: [ + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "_newOwner", + type: "address" + } + ], + name: "changeOwner", + outputs: [ + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + ], + name: "getCodes", + outputs: [ + { + internalType: "bytes32[]", + name: "", + type: "bytes32[]" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + ], + name: "getImplementations", + outputs: [ + { + internalType: "address[]", + name: "", + type: "address[]" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "_wallet", + type: "address" + } + ], + name: "isArgentWallet", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + ], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + } +]; + +var EIP_2612 = [ + { + constant: true, + inputs: [ + { + name: "owner", + type: "address" + } + ], + name: "nonces", + outputs: [ + { + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "DOMAIN_SEPARATOR", + outputs: [ + { + name: "", + type: "bytes32" + } + ], + payable: false, + stateMutability: "view", + type: "function" + } +]; + +var ENS_PUBLIC_RESOLVER_ABI = [ + { + inputs: [ + { + internalType: "contract ENS", + name: "_ens", + type: "address" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: true, + internalType: "uint256", + name: "contentType", + type: "uint256" + } + ], + name: "ABIChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "address", + name: "a", + type: "address" + } + ], + name: "AddrChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "uint256", + name: "coinType", + type: "uint256" + }, + { + indexed: false, + internalType: "bytes", + name: "newAddress", + type: "bytes" + } + ], + name: "AddressChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: true, + internalType: "address", + name: "owner", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "target", + type: "address" + }, + { + indexed: false, + internalType: "bool", + name: "isAuthorised", + type: "bool" + } + ], + name: "AuthorisationChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "bytes", + name: "hash", + type: "bytes" + } + ], + name: "ContenthashChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "bytes", + name: "name", + type: "bytes" + }, + { + indexed: false, + internalType: "uint16", + name: "resource", + type: "uint16" + }, + { + indexed: false, + internalType: "bytes", + name: "record", + type: "bytes" + } + ], + name: "DNSRecordChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "bytes", + name: "name", + type: "bytes" + }, + { + indexed: false, + internalType: "uint16", + name: "resource", + type: "uint16" + } + ], + name: "DNSRecordDeleted", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "DNSZoneCleared", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: true, + internalType: "bytes4", + name: "interfaceID", + type: "bytes4" + }, + { + indexed: false, + internalType: "address", + name: "implementer", + type: "address" + } + ], + name: "InterfaceChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "string", + name: "name", + type: "string" + } + ], + name: "NameChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "bytes32", + name: "x", + type: "bytes32" + }, + { + indexed: false, + internalType: "bytes32", + name: "y", + type: "bytes32" + } + ], + name: "PubkeyChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: true, + internalType: "string", + name: "indexedKey", + type: "string" + }, + { + indexed: false, + internalType: "string", + name: "key", + type: "string" + } + ], + name: "TextChanged", + type: "event" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "uint256", + name: "contentTypes", + type: "uint256" + } + ], + name: "ABI", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + }, + { + internalType: "bytes", + name: "", + type: "bytes" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "addr", + outputs: [ + { + internalType: "address payable", + name: "", + type: "address" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + }, + { + internalType: "address", + name: "", + type: "address" + }, + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "authorisations", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "clearDNSZone", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "contenthash", + outputs: [ + { + internalType: "bytes", + name: "", + type: "bytes" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "name", + type: "bytes32" + }, + { + internalType: "uint16", + name: "resource", + type: "uint16" + } + ], + name: "dnsRecord", + outputs: [ + { + internalType: "bytes", + name: "", + type: "bytes" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "name", + type: "bytes32" + } + ], + name: "hasDNSRecords", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "bytes4", + name: "interfaceID", + type: "bytes4" + } + ], + name: "interfaceImplementer", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "name", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "pubkey", + outputs: [ + { + internalType: "bytes32", + name: "x", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "y", + type: "bytes32" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "uint256", + name: "contentType", + type: "uint256" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "setABI", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "uint256", + name: "coinType", + type: "uint256" + }, + { + internalType: "bytes", + name: "a", + type: "bytes" + } + ], + name: "setAddr", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "address", + name: "a", + type: "address" + } + ], + name: "setAddr", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "bool", + name: "isAuthorised", + type: "bool" + } + ], + name: "setAuthorisation", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "bytes", + name: "hash", + type: "bytes" + } + ], + name: "setContenthash", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "setDNSRecords", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "bytes4", + name: "interfaceID", + type: "bytes4" + }, + { + internalType: "address", + name: "implementer", + type: "address" + } + ], + name: "setInterface", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "string", + name: "name", + type: "string" + } + ], + name: "setName", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "x", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "y", + type: "bytes32" + } + ], + name: "setPubkey", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "string", + name: "key", + type: "string" + }, + { + internalType: "string", + name: "value", + type: "string" + } + ], + name: "setText", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes4", + name: "interfaceID", + type: "bytes4" + } + ], + name: "supportsInterface", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "pure", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "string", + name: "key", + type: "string" + } + ], + name: "text", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + payable: false, + stateMutability: "view", + type: "function" + } +]; + +var ENS_ABI = [ + { + inputs: [ + { + internalType: "contract ENS", + name: "_old", + type: "address" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "constructor" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "owner", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "operator", + type: "address" + }, + { + indexed: false, + internalType: "bool", + name: "approved", + type: "bool" + } + ], + name: "ApprovalForAll", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: true, + internalType: "bytes32", + name: "label", + type: "bytes32" + }, + { + indexed: false, + internalType: "address", + name: "owner", + type: "address" + } + ], + name: "NewOwner", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "address", + name: "resolver", + type: "address" + } + ], + name: "NewResolver", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "uint64", + name: "ttl", + type: "uint64" + } + ], + name: "NewTTL", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + indexed: false, + internalType: "address", + name: "owner", + type: "address" + } + ], + name: "Transfer", + type: "event" + }, + { + constant: true, + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "operator", + type: "address" + } + ], + name: "isApprovedForAll", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "old", + outputs: [ + { + internalType: "contract ENS", + name: "", + type: "address" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "recordExists", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "resolver", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "address", + name: "operator", + type: "address" + }, + { + internalType: "bool", + name: "approved", + type: "bool" + } + ], + name: "setApprovalForAll", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "address", + name: "owner", + type: "address" + } + ], + name: "setOwner", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "resolver", + type: "address" + }, + { + internalType: "uint64", + name: "ttl", + type: "uint64" + } + ], + name: "setRecord", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "address", + name: "resolver", + type: "address" + } + ], + name: "setResolver", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "label", + type: "bytes32" + }, + { + internalType: "address", + name: "owner", + type: "address" + } + ], + name: "setSubnodeOwner", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "label", + type: "bytes32" + }, + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "resolver", + type: "address" + }, + { + internalType: "uint64", + name: "ttl", + type: "uint64" + } + ], + name: "setSubnodeRecord", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + }, + { + internalType: "uint64", + name: "ttl", + type: "uint64" + } + ], + name: "setTTL", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "bytes32", + name: "node", + type: "bytes32" + } + ], + name: "ttl", + outputs: [ + { + internalType: "uint64", + name: "", + type: "uint64" + } + ], + payable: false, + stateMutability: "view", + type: "function" + } +]; + +var ERC20ABI = [ + { + constant: true, + inputs: [ + ], + name: "name", + outputs: [ + { + name: "", + type: "string" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + name: "_spender", + type: "address" + }, + { + name: "_value", + type: "uint256" + } + ], + name: "approve", + outputs: [ + { + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "totalSupply", + outputs: [ + { + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + name: "_from", + type: "address" + }, + { + name: "_to", + type: "address" + }, + { + name: "_value", + type: "uint256" + } + ], + name: "transferFrom", + outputs: [ + { + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "decimals", + outputs: [ + { + name: "", + type: "uint8" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + name: "_owner", + type: "address" + } + ], + name: "balanceOf", + outputs: [ + { + name: "balance", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "symbol", + outputs: [ + { + name: "", + type: "string" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + name: "_to", + type: "address" + }, + { + name: "_value", + type: "uint256" + } + ], + name: "transfer", + outputs: [ + { + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + { + name: "_owner", + type: "address" + }, + { + name: "_spender", + type: "address" + } + ], + name: "allowance", + outputs: [ + { + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + payable: true, + stateMutability: "payable", + type: "fallback" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: "owner", + type: "address" + }, + { + indexed: true, + name: "spender", + type: "address" + }, + { + indexed: false, + name: "value", + type: "uint256" + } + ], + name: "Approval", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: "from", + type: "address" + }, + { + indexed: true, + name: "to", + type: "address" + }, + { + indexed: false, + name: "value", + type: "uint256" + } + ], + name: "Transfer", + type: "event" + } +]; + +var ERC20_BYTES32_ABI = [ + { + constant: true, + inputs: [ + ], + name: "name", + outputs: [ + { + name: "", + type: "bytes32" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "symbol", + outputs: [ + { + name: "", + type: "bytes32" + } + ], + payable: false, + stateMutability: "view", + type: "function" + } +]; + +var ERC721_ABI = [ + { + inputs: [ + { + internalType: "uint256", + name: "tokenId", + type: "uint256" + } + ], + name: "ownerOf", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "tokenId", + type: "uint256" + } + ], + name: "tokenURI", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "view", + type: "function" + } +]; + +var ERC1155_ABI = [ + { + constant: true, + inputs: [ + { + internalType: "address", + name: "_owner", + type: "address" + }, + { + internalType: "uint256", + name: "_id", + type: "uint256" + } + ], + name: "balanceOf", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + internalType: "uint256", + name: "_id", + type: "uint256" + } + ], + name: "uri", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + payable: false, + stateMutability: "view", + type: "function" + } +]; + +var WETH_ABI = [ + { + constant: true, + inputs: [ + ], + name: "name", + outputs: [ + { + name: "", + type: "string" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + name: "guy", + type: "address" + }, + { + name: "wad", + type: "uint256" + } + ], + name: "approve", + outputs: [ + { + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "totalSupply", + outputs: [ + { + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + name: "src", + type: "address" + }, + { + name: "dst", + type: "address" + }, + { + name: "wad", + type: "uint256" + } + ], + name: "transferFrom", + outputs: [ + { + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + { + name: "wad", + type: "uint256" + } + ], + name: "withdraw", + outputs: [ + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "decimals", + outputs: [ + { + name: "", + type: "uint8" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + { + name: "", + type: "address" + } + ], + name: "balanceOf", + outputs: [ + { + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: true, + inputs: [ + ], + name: "symbol", + outputs: [ + { + name: "", + type: "string" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + constant: false, + inputs: [ + { + name: "dst", + type: "address" + }, + { + name: "wad", + type: "uint256" + } + ], + name: "transfer", + outputs: [ + { + name: "", + type: "bool" + } + ], + payable: false, + stateMutability: "nonpayable", + type: "function" + }, + { + constant: false, + inputs: [ + ], + name: "deposit", + outputs: [ + ], + payable: true, + stateMutability: "payable", + type: "function" + }, + { + constant: true, + inputs: [ + { + name: "", + type: "address" + }, + { + name: "", + type: "address" + } + ], + name: "allowance", + outputs: [ + { + name: "", + type: "uint256" + } + ], + payable: false, + stateMutability: "view", + type: "function" + }, + { + payable: true, + stateMutability: "payable", + type: "fallback" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: "src", + type: "address" + }, + { + indexed: true, + name: "guy", + type: "address" + }, + { + indexed: false, + name: "wad", + type: "uint256" + } + ], + name: "Approval", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: "src", + type: "address" + }, + { + indexed: true, + name: "dst", + type: "address" + }, + { + indexed: false, + name: "wad", + type: "uint256" + } + ], + name: "Transfer", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: "dst", + type: "address" + }, + { + indexed: false, + name: "wad", + type: "uint256" + } + ], + name: "Deposit", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: "src", + type: "address" + }, + { + indexed: false, + name: "wad", + type: "uint256" + } + ], + name: "Withdrawal", + type: "event" + } +]; + +var _a$h; +/** + * List of all the networks supported by the Uniswap Interface + */ +var SupportedChainId; +(function (SupportedChainId) { + SupportedChainId[SupportedChainId["MAINNET"] = 1] = "MAINNET"; + SupportedChainId[SupportedChainId["ROPSTEN"] = 3] = "ROPSTEN"; + SupportedChainId[SupportedChainId["RINKEBY"] = 4] = "RINKEBY"; + SupportedChainId[SupportedChainId["GOERLI"] = 5] = "GOERLI"; + SupportedChainId[SupportedChainId["KOVAN"] = 42] = "KOVAN"; + SupportedChainId[SupportedChainId["ARBITRUM_ONE"] = 42161] = "ARBITRUM_ONE"; + SupportedChainId[SupportedChainId["ARBITRUM_RINKEBY"] = 421611] = "ARBITRUM_RINKEBY"; + SupportedChainId[SupportedChainId["OPTIMISM"] = 10] = "OPTIMISM"; + SupportedChainId[SupportedChainId["OPTIMISTIC_KOVAN"] = 69] = "OPTIMISTIC_KOVAN"; + SupportedChainId[SupportedChainId["POLYGON"] = 137] = "POLYGON"; + SupportedChainId[SupportedChainId["POLYGON_MUMBAI"] = 80001] = "POLYGON_MUMBAI"; +})(SupportedChainId || (SupportedChainId = {})); +var CHAIN_IDS_TO_NAMES = (_a$h = {}, + _a$h[SupportedChainId.MAINNET] = 'mainnet', + _a$h[SupportedChainId.ROPSTEN] = 'ropsten', + _a$h[SupportedChainId.RINKEBY] = 'rinkeby', + _a$h[SupportedChainId.GOERLI] = 'goerli', + _a$h[SupportedChainId.KOVAN] = 'kovan', + _a$h[SupportedChainId.POLYGON] = 'polygon', + _a$h[SupportedChainId.POLYGON_MUMBAI] = 'polygon_mumbai', + _a$h[SupportedChainId.ARBITRUM_ONE] = 'arbitrum', + _a$h[SupportedChainId.ARBITRUM_RINKEBY] = 'arbitrum_rinkeby', + _a$h[SupportedChainId.OPTIMISM] = 'optimism', + _a$h[SupportedChainId.OPTIMISTIC_KOVAN] = 'optimistic_kovan', + _a$h); +/** + * Array of all the supported chain IDs + */ +var ALL_SUPPORTED_CHAIN_IDS = Object.values(SupportedChainId).filter(function (id) { return typeof id === 'number'; }); +var SUPPORTED_GAS_ESTIMATE_CHAIN_IDS = [SupportedChainId.MAINNET, SupportedChainId.POLYGON]; +/** + * All the chain IDs that are running the Ethereum protocol. + */ +[ + SupportedChainId.MAINNET, + SupportedChainId.ROPSTEN, + SupportedChainId.RINKEBY, + SupportedChainId.GOERLI, + SupportedChainId.KOVAN, + SupportedChainId.POLYGON, + SupportedChainId.POLYGON_MUMBAI, +]; +/** + * Controls some L2 specific behavior, e.g. slippage tolerance, special UI behavior. + * The expectation is that all of these networks have immediate transaction confirmation. + */ +var L2_CHAIN_IDS = [ + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, +]; + +var DEFAULT_NETWORKS = [ + SupportedChainId.MAINNET, + SupportedChainId.ROPSTEN, + SupportedChainId.RINKEBY, + SupportedChainId.GOERLI, + SupportedChainId.KOVAN, +]; +function constructSameAddressMap(address, additionalNetworks) { + if (additionalNetworks === void 0) { additionalNetworks = []; } + return DEFAULT_NETWORKS.concat(additionalNetworks).reduce(function (memo, chainId) { + memo[chainId] = address; + return memo; + }, {}); +} + +var _a$g, _b$6, _c$4, _d$3, _e$2, _f$1, _g$1, _h$1; +var UNI_ADDRESS = constructSameAddressMap('0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984'); +var MULTICALL_ADDRESS = __assign(__assign({}, constructSameAddressMap('0x1F98415757620B543A52E61c46B32eB19261F984', [ + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.OPTIMISM, + SupportedChainId.POLYGON_MUMBAI, + SupportedChainId.POLYGON, +])), (_a$g = {}, _a$g[SupportedChainId.ARBITRUM_ONE] = '0xadF885960B47eA2CD9B55E6DAc6B42b7Cb2806dB', _a$g[SupportedChainId.ARBITRUM_RINKEBY] = '0xa501c031958F579dB7676fF1CE78AD305794d579', _a$g)); +var V2_FACTORY_ADDRESSES = constructSameAddressMap(FACTORY_ADDRESS); +var V2_ROUTER_ADDRESS = constructSameAddressMap('0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D'); +var V3_ROUTER_ADDRESS = constructSameAddressMap('0xE592427A0AEce92De3Edee1F18E0157C05861564', [ + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON, + SupportedChainId.POLYGON_MUMBAI, +]); +var SWAP_ROUTER_ADDRESSES = constructSameAddressMap('0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45', [ + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON, + SupportedChainId.POLYGON_MUMBAI, +]); +/** + * The oldest V0 governance address + */ +constructSameAddressMap('0x5e4be8Bc9637f0EAA1A755019e06A68ce081D58F'); +/** + * The older V1 governance address + */ +(_b$6 = {}, + _b$6[SupportedChainId.MAINNET] = '0xC4e172459f1E7939D522503B81AFAaC1014CE6F6', + _b$6); +/** + * The latest governor bravo that is currently admin of timelock + */ +(_c$4 = {}, + _c$4[SupportedChainId.MAINNET] = '0x408ED6354d4973f66138C91495F2f2FCbd8724C3', + _c$4); +constructSameAddressMap('0x1a9C8182C09F50C8318d769245beA52c32BE35BC'); +var MERKLE_DISTRIBUTOR_ADDRESS = (_d$3 = {}, + _d$3[SupportedChainId.MAINNET] = '0x090D4613473dEE047c3f2706764f49E0821D256e', + _d$3); +var ARGENT_WALLET_DETECTOR_ADDRESS = (_e$2 = {}, + _e$2[SupportedChainId.MAINNET] = '0xeca4B0bDBf7c55E9b7925919d03CbF8Dc82537E8', + _e$2); +var V3_CORE_FACTORY_ADDRESSES = constructSameAddressMap(FACTORY_ADDRESS$1, [ + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON_MUMBAI, + SupportedChainId.POLYGON, +]); +var QUOTER_ADDRESSES = constructSameAddressMap('0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6', [ + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON_MUMBAI, + SupportedChainId.POLYGON, +]); +constructSameAddressMap('0xC36442b4a4522E871399CD717aBDD847Ab11FE88', [ + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON_MUMBAI, + SupportedChainId.POLYGON, +]); +var ENS_REGISTRAR_ADDRESSES = (_f$1 = {}, + _f$1[SupportedChainId.MAINNET] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', + _f$1[SupportedChainId.ROPSTEN] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', + _f$1[SupportedChainId.GOERLI] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', + _f$1[SupportedChainId.RINKEBY] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', + _f$1); +var SOCKS_CONTROLLER_ADDRESSES = (_g$1 = {}, + _g$1[SupportedChainId.MAINNET] = '0x65770b5283117639760beA3F867b69b3697a91dd', + _g$1); +constructSameAddressMap('0xA5644E29708357803b5A882D272c41cC0dF92B34', [ + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON_MUMBAI, + SupportedChainId.POLYGON, +]); +(_h$1 = {}, + _h$1[SupportedChainId.ARBITRUM_ONE] = '0xbfd8137f7d1516D3ea5cA83523914859ec47F573', + _h$1[SupportedChainId.ARBITRUM_RINKEBY] = '0xbfd8137f7d1516D3ea5cA83523914859ec47F573', + _h$1); + +var _a$f, _b$5; +var AMPL = new Token(SupportedChainId.MAINNET, '0xD46bA6D942050d489DBd938a2C909A5d5039A161', 9, 'AMPL', 'Ampleforth'); +var DAI = new Token(SupportedChainId.MAINNET, '0x6B175474E89094C44Da98b954EedeAC495271d0F', 18, 'DAI', 'Dai Stablecoin'); +var DAI_ARBITRUM_ONE = new Token(SupportedChainId.ARBITRUM_ONE, '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', 18, 'DAI', 'Dai stable coin'); +var DAI_OPTIMISM = new Token(SupportedChainId.OPTIMISM, '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', 18, 'DAI', 'Dai stable coin'); +var USDC = new Token(SupportedChainId.MAINNET, '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', 6, 'USDC', 'USD//C'); +var USDC_ARBITRUM = new Token(SupportedChainId.ARBITRUM_ONE, '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8', 6, 'USDC', 'USD//C'); +var USDC_POLYGON = new Token(SupportedChainId.POLYGON, '0x2791bca1f2de4661ed88a30c99a7a9449aa84174', 6, 'USDC', 'USD//C'); +var DAI_POLYGON = new Token(SupportedChainId.POLYGON, '0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063', 18, 'DAI', 'Dai Stablecoin'); +var USDT_POLYGON = new Token(SupportedChainId.POLYGON, '0xc2132d05d31c914a87c6611c10748aeb04b58e8f', 6, 'USDT', 'Tether USD'); +var WBTC_POLYGON = new Token(SupportedChainId.POLYGON, '0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6', 8, 'WBTC', 'Wrapped BTC'); +var USDC_OPTIMISM = new Token(SupportedChainId.OPTIMISM, '0x7F5c764cBc14f9669B88837ca1490cCa17c31607', 6, 'USDC', 'USD//C'); +var USDT = new Token(SupportedChainId.MAINNET, '0xdAC17F958D2ee523a2206206994597C13D831ec7', 6, 'USDT', 'Tether USD'); +var USDT_ARBITRUM_ONE = new Token(SupportedChainId.ARBITRUM_ONE, '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9', 6, 'USDT', 'Tether USD'); +var USDT_OPTIMISM = new Token(SupportedChainId.OPTIMISM, '0x94b008aA00579c1307B0EF2c499aD98a8ce58e58', 6, 'USDT', 'Tether USD'); +var WBTC = new Token(SupportedChainId.MAINNET, '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', 8, 'WBTC', 'Wrapped BTC'); +var WBTC_ARBITRUM_ONE = new Token(SupportedChainId.ARBITRUM_ONE, '0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f', 8, 'WBTC', 'Wrapped BTC'); +var WBTC_OPTIMISM = new Token(SupportedChainId.OPTIMISM, '0x68f180fcCe6836688e9084f035309E29Bf0A2095', 8, 'WBTC', 'Wrapped BTC'); +var FEI = new Token(SupportedChainId.MAINNET, '0x956F47F50A910163D8BF957Cf5846D573E7f87CA', 18, 'FEI', 'Fei USD'); +var TRIBE = new Token(SupportedChainId.MAINNET, '0xc7283b66Eb1EB5FB86327f08e1B5816b0720212B', 18, 'TRIBE', 'Tribe'); +var FRAX = new Token(SupportedChainId.MAINNET, '0x853d955aCEf822Db058eb8505911ED77F175b99e', 18, 'FRAX', 'Frax'); +var FXS = new Token(SupportedChainId.MAINNET, '0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0', 18, 'FXS', 'Frax Share'); +var renBTC = new Token(SupportedChainId.MAINNET, '0xEB4C2781e4ebA804CE9a9803C67d0893436bB27D', 8, 'renBTC', 'renBTC'); +var ETH2X_FLI = new Token(SupportedChainId.MAINNET, '0xAa6E8127831c9DE45ae56bB1b0d4D4Da6e5665BD', 18, 'ETH2x-FLI', 'ETH 2x Flexible Leverage Index'); +var sETH2 = new Token(SupportedChainId.MAINNET, '0xFe2e637202056d30016725477c5da089Ab0A043A', 18, 'sETH2', 'StakeWise Staked ETH2'); +var rETH2 = new Token(SupportedChainId.MAINNET, '0x20BC832ca081b91433ff6c17f85701B6e92486c5', 18, 'rETH2', 'StakeWise Reward ETH2'); +var SWISE = new Token(SupportedChainId.MAINNET, '0x48C3399719B582dD63eB5AADf12A40B4C3f52FA2', 18, 'SWISE', 'StakeWise'); +var WETH_POLYGON_MUMBAI = new Token(SupportedChainId.POLYGON_MUMBAI, '0xa6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa', 18, 'WETH', 'Wrapped Ether'); +var WETH_POLYGON = new Token(SupportedChainId.POLYGON, '0x7ceb23fd6bc0add59e62ac25578270cff1b9f619', 18, 'WETH', 'Wrapped Ether'); +var UNI = (_a$f = {}, + _a$f[SupportedChainId.MAINNET] = new Token(SupportedChainId.MAINNET, UNI_ADDRESS[1], 18, 'UNI', 'Uniswap'), + _a$f[SupportedChainId.RINKEBY] = new Token(SupportedChainId.RINKEBY, UNI_ADDRESS[4], 18, 'UNI', 'Uniswap'), + _a$f[SupportedChainId.ROPSTEN] = new Token(SupportedChainId.ROPSTEN, UNI_ADDRESS[3], 18, 'UNI', 'Uniswap'), + _a$f[SupportedChainId.GOERLI] = new Token(SupportedChainId.GOERLI, UNI_ADDRESS[5], 18, 'UNI', 'Uniswap'), + _a$f[SupportedChainId.KOVAN] = new Token(SupportedChainId.KOVAN, UNI_ADDRESS[42], 18, 'UNI', 'Uniswap'), + _a$f); +var WRAPPED_NATIVE_CURRENCY = __assign(__assign({}, WETH9), (_b$5 = {}, _b$5[SupportedChainId.OPTIMISM] = new Token(SupportedChainId.OPTIMISM, '0x4200000000000000000000000000000000000006', 18, 'WETH', 'Wrapped Ether'), _b$5[SupportedChainId.OPTIMISTIC_KOVAN] = new Token(SupportedChainId.OPTIMISTIC_KOVAN, '0x4200000000000000000000000000000000000006', 18, 'WETH', 'Wrapped Ether'), _b$5[SupportedChainId.ARBITRUM_ONE] = new Token(SupportedChainId.ARBITRUM_ONE, '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1', 18, 'WETH', 'Wrapped Ether'), _b$5[SupportedChainId.ARBITRUM_RINKEBY] = new Token(SupportedChainId.ARBITRUM_RINKEBY, '0xB47e6A5f8b33b3F17603C83a0535A9dcD7E32681', 18, 'WETH', 'Wrapped Ether'), _b$5[SupportedChainId.POLYGON] = new Token(SupportedChainId.POLYGON, '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270', 18, 'WMATIC', 'Wrapped MATIC'), _b$5[SupportedChainId.POLYGON_MUMBAI] = new Token(SupportedChainId.POLYGON_MUMBAI, '0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889', 18, 'WMATIC', 'Wrapped MATIC'), _b$5)); +function isMatic(chainId) { + return chainId === SupportedChainId.POLYGON_MUMBAI || chainId === SupportedChainId.POLYGON; +} +var MaticNativeCurrency = /** @class */ (function (_super) { + __extends(MaticNativeCurrency, _super); + function MaticNativeCurrency(chainId) { + var _this = this; + if (!isMatic(chainId)) + throw new Error('Not matic'); + _this = _super.call(this, chainId, 18, 'MATIC', 'Polygon Matic') || this; + return _this; + } + MaticNativeCurrency.prototype.equals = function (other) { + return other.isNative && other.chainId === this.chainId; + }; + Object.defineProperty(MaticNativeCurrency.prototype, "wrapped", { + get: function () { + if (!isMatic(this.chainId)) + throw new Error('Not matic'); + return WRAPPED_NATIVE_CURRENCY[this.chainId]; + }, + enumerable: false, + configurable: true + }); + return MaticNativeCurrency; +}(NativeCurrency)); +var ExtendedEther = /** @class */ (function (_super) { + __extends(ExtendedEther, _super); + function ExtendedEther() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(ExtendedEther.prototype, "wrapped", { + get: function () { + if (this.chainId in WRAPPED_NATIVE_CURRENCY) + return WRAPPED_NATIVE_CURRENCY[this.chainId]; + throw new Error('Unsupported chain ID'); + }, + enumerable: false, + configurable: true + }); + ExtendedEther.onChain = function (chainId) { + var _a; + return (_a = this._cachedExtendedEther[chainId]) !== null && _a !== void 0 ? _a : (this._cachedExtendedEther[chainId] = new ExtendedEther(chainId)); + }; + ExtendedEther._cachedExtendedEther = {}; + return ExtendedEther; +}(Ether)); +var cachedNativeCurrency = {}; +function nativeOnChain(chainId) { + var _a; + return ((_a = cachedNativeCurrency[chainId]) !== null && _a !== void 0 ? _a : (cachedNativeCurrency[chainId] = isMatic(chainId) + ? new MaticNativeCurrency(chainId) + : ExtendedEther.onChain(chainId))); +} + +// returns null on errors +function useContract(addressOrAddressMap, ABI, withSignerIfPossible) { + if (withSignerIfPossible === void 0) { withSignerIfPossible = true; } + var _a = useActiveWeb3React(), library = _a.library, account = _a.account, chainId = _a.chainId; + return useMemo(function () { + if (!addressOrAddressMap || !ABI || !library || !chainId) + return null; + var address; + if (typeof addressOrAddressMap === 'string') + address = addressOrAddressMap; + else + address = addressOrAddressMap[chainId]; + if (!address) + return null; + try { + return getContract(address, ABI, library, withSignerIfPossible && account ? account : undefined); + } + catch (error) { + console.error('Failed to get contract', error); + return null; + } + }, [addressOrAddressMap, ABI, library, chainId, withSignerIfPossible, account]); +} +function useTokenContract(tokenAddress, withSignerIfPossible) { + return useContract(tokenAddress, ERC20ABI, withSignerIfPossible); +} +function useWETHContract(withSignerIfPossible) { + var _a; + var chainId = useActiveWeb3React().chainId; + return useContract(chainId ? (_a = WRAPPED_NATIVE_CURRENCY[chainId]) === null || _a === void 0 ? void 0 : _a.address : undefined, WETH_ABI, withSignerIfPossible); +} +function useERC721Contract(nftAddress) { + return useContract(nftAddress, ERC721_ABI, false); +} +function useERC1155Contract(nftAddress) { + return useContract(nftAddress, ERC1155_ABI, false); +} +function useArgentWalletDetectorContract() { + return useContract(ARGENT_WALLET_DETECTOR_ADDRESS, ARGENT_WALLET_DETECTOR_ABI, false); +} +function useENSRegistrarContract(withSignerIfPossible) { + return useContract(ENS_REGISTRAR_ADDRESSES, ENS_ABI, withSignerIfPossible); +} +function useENSResolverContract(address, withSignerIfPossible) { + return useContract(address, ENS_PUBLIC_RESOLVER_ABI, withSignerIfPossible); +} +function useBytes32TokenContract(tokenAddress, withSignerIfPossible) { + return useContract(tokenAddress, ERC20_BYTES32_ABI, withSignerIfPossible); +} +function useEIP2612Contract(tokenAddress) { + return useContract(tokenAddress, EIP_2612, false); +} +function useV2RouterContract() { + return useContract(V2_ROUTER_ADDRESS, abi$3, true); +} +function useInterfaceMulticall() { + return useContract(MULTICALL_ADDRESS, abi$1, false); +} +function useMerkleDistributorContract() { + return useContract(MERKLE_DISTRIBUTOR_ADDRESS, abi$5, true); +} +function useV3Quoter() { + return useContract(QUOTER_ADDRESSES, abi$2); +} + +var _a$e; +var multicall = createMulticall(); +var reducer = combineReducers((_a$e = {}, _a$e[multicall.reducerPath] = multicall.reducer, _a$e)); +createStore(reducer); +function MulticallUpdater() { + var latestBlockNumber = useBlockNumber(); + var chainId = useActiveWeb3React().chainId; + var contract = useInterfaceMulticall(); + return jsx(multicall.Updater, { chainId: chainId, latestBlockNumber: latestBlockNumber, contract: contract }, void 0); +} + +function useMultipleContractSingleData() { + var _a; + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var _b = useCallContext(), chainId = _b.chainId, latestBlock = _b.latestBlock; + return (_a = multicall.hooks).useMultipleContractSingleData.apply(_a, __spreadArray([chainId, latestBlock], __read(args), false)); +} +function useSingleCallResult() { + var _a; + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var _b = useCallContext(), chainId = _b.chainId, latestBlock = _b.latestBlock; + return (_a = multicall.hooks).useSingleCallResult.apply(_a, __spreadArray([chainId, latestBlock], __read(args), false)); +} +function useSingleContractMultipleData() { + var _a; + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var _b = useCallContext(), chainId = _b.chainId, latestBlock = _b.latestBlock; + return (_a = multicall.hooks).useSingleContractMultipleData.apply(_a, __spreadArray([chainId, latestBlock], __read(args), false)); +} +function useSingleContractWithCallData() { + var _a; + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var _b = useCallContext(), chainId = _b.chainId, latestBlock = _b.latestBlock; + return (_a = multicall.hooks).useSingleContractWithCallData.apply(_a, __spreadArray([chainId, latestBlock], __read(args), false)); +} +function useCallContext() { + var chainId = useActiveWeb3React().chainId; + var latestBlock = useBlockNumber(); + return { chainId: chainId, latestBlock: latestBlock }; +} + +function safeNamehash(name) { + if (name === undefined) + return undefined; + try { + return namehash(name); + } + catch (error) { + console.debug(error); + return undefined; + } +} + +/** + * Returns true if the string value is zero in hex + * @param hexNumberString + */ +function isZero(hexNumberString) { + return /^0x0*$/.test(hexNumberString); +} + +/** + * Does a lookup for an ENS name to find its address. + */ +function useENSAddress(ensName) { + var _a; + var debouncedName = useDebounce(ensName, 200); + var ensNodeArgument = useMemo(function () { return [debouncedName === null ? undefined : safeNamehash(debouncedName)]; }, [debouncedName]); + var registrarContract = useENSRegistrarContract(false); + var resolverAddress = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument); + var resolverAddressResult = (_a = resolverAddress.result) === null || _a === void 0 ? void 0 : _a[0]; + var resolverContract = useENSResolverContract(resolverAddressResult && !isZero(resolverAddressResult) ? resolverAddressResult : undefined, false); + var addr = useSingleCallResult(resolverContract, 'addr', ensNodeArgument); + var changed = debouncedName !== ensName; + return useMemo(function () { + var _a, _b; + return ({ + address: changed ? null : (_b = (_a = addr.result) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : null, + loading: changed || resolverAddress.loading || addr.loading, + }); + }, [addr.loading, addr.result, changed, resolverAddress.loading]); +} + +/** + * Does a reverse lookup for an address to find its ENS name. + * Note this is not the same as looking up an ENS name to find an address. + */ +function useENSName(address) { + var _a, _b; + var debouncedAddress = useDebounce(address, 200); + var ensNodeArgument = useMemo(function () { + if (!debouncedAddress || !isAddress(debouncedAddress)) + return [undefined]; + return [namehash(debouncedAddress.toLowerCase().substr(2) + ".addr.reverse")]; + }, [debouncedAddress]); + var registrarContract = useENSRegistrarContract(false); + var resolverAddress = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument); + var resolverAddressResult = (_a = resolverAddress.result) === null || _a === void 0 ? void 0 : _a[0]; + var resolverContract = useENSResolverContract(resolverAddressResult && !isZero(resolverAddressResult) ? resolverAddressResult : undefined, false); + var nameCallRes = useSingleCallResult(resolverContract, 'name', ensNodeArgument); + var name = (_b = nameCallRes.result) === null || _b === void 0 ? void 0 : _b[0]; + /* ENS does not enforce that an address owns a .eth domain before setting it as a reverse proxy + and recommends that you perform a match on the forward resolution + see: https://docs.ens.domains/dapp-developer-guide/resolving-names#reverse-resolution + */ + var fwdAddr = useENSAddress(name); + var checkedName = address === (fwdAddr === null || fwdAddr === void 0 ? void 0 : fwdAddr.address) ? name : null; + var changed = debouncedAddress !== address; + return useMemo(function () { return ({ + ENSName: changed ? null : checkedName, + loading: changed || resolverAddress.loading || nameCallRes.loading, + }); }, [changed, nameCallRes.loading, checkedName, resolverAddress.loading]); +} + +/** + * Given a name or address, does a lookup to resolve to an address and name + * @param nameOrAddress ENS name or address + */ +function useENS(nameOrAddress) { + var validated = isAddress(nameOrAddress); + var reverseLookup = useENSName(validated ? validated : undefined); + var lookup = useENSAddress(nameOrAddress); + return useMemo(function () { return ({ + loading: reverseLookup.loading || lookup.loading, + address: validated ? validated : lookup.address, + name: reverseLookup.ENSName ? reverseLookup.ENSName : !validated && lookup.address ? nameOrAddress || null : null, + }); }, [lookup.address, lookup.loading, nameOrAddress, reverseLookup.ENSName, reverseLookup.loading, validated]); +} + +/** + * Returns the gas value plus a margin for unexpected or variable gas costs + * @param value the gas value to pad + */ +function calculateGasMargin(value) { + return value.mul(120).div(100); +} + +/** + * Be careful adding to this enum, always assign a unique value (typescript will not prevent duplicate values). + * These values is persisted in state and if you change the value it will cause errors + */ +var TransactionType; +(function (TransactionType) { + TransactionType[TransactionType["APPROVAL"] = 0] = "APPROVAL"; + TransactionType[TransactionType["SWAP"] = 1] = "SWAP"; + TransactionType[TransactionType["DEPOSIT_LIQUIDITY_STAKING"] = 2] = "DEPOSIT_LIQUIDITY_STAKING"; + TransactionType[TransactionType["WITHDRAW_LIQUIDITY_STAKING"] = 3] = "WITHDRAW_LIQUIDITY_STAKING"; + TransactionType[TransactionType["CLAIM"] = 4] = "CLAIM"; + TransactionType[TransactionType["VOTE"] = 5] = "VOTE"; + TransactionType[TransactionType["DELEGATE"] = 6] = "DELEGATE"; + TransactionType[TransactionType["WRAP"] = 7] = "WRAP"; + TransactionType[TransactionType["CREATE_V3_POOL"] = 8] = "CREATE_V3_POOL"; + TransactionType[TransactionType["ADD_LIQUIDITY_V3_POOL"] = 9] = "ADD_LIQUIDITY_V3_POOL"; + TransactionType[TransactionType["ADD_LIQUIDITY_V2_POOL"] = 10] = "ADD_LIQUIDITY_V2_POOL"; + TransactionType[TransactionType["MIGRATE_LIQUIDITY_V3"] = 11] = "MIGRATE_LIQUIDITY_V3"; + TransactionType[TransactionType["COLLECT_FEES"] = 12] = "COLLECT_FEES"; + TransactionType[TransactionType["REMOVE_LIQUIDITY_V3"] = 13] = "REMOVE_LIQUIDITY_V3"; + TransactionType[TransactionType["SUBMIT_PROPOSAL"] = 14] = "SUBMIT_PROPOSAL"; +})(TransactionType || (TransactionType = {})); +var addTransaction = createAction('transactions/addTransaction'); +var clearAllTransactions = createAction('transactions/clearAllTransactions'); +var finalizeTransaction = createAction('transactions/finalizeTransaction'); +var checkedTransaction = createAction('transactions/checkedTransaction'); + +var SUPPORTED_TRANSACTION_TYPES = [ + TransactionType.ADD_LIQUIDITY_V2_POOL, + TransactionType.ADD_LIQUIDITY_V3_POOL, + TransactionType.CREATE_V3_POOL, + TransactionType.REMOVE_LIQUIDITY_V3, + TransactionType.SWAP, +]; +var FIREBASE_API_KEY = process.env.REACT_APP_FIREBASE_KEY; +var firebaseEnabled = typeof FIREBASE_API_KEY !== 'undefined'; +if (firebaseEnabled) + initializeFirebase(); +function useMonitoringEventCallback() { + var chainId = useActiveWeb3React().chainId; + return useCallback(function log(type, _a) { + var transactionResponse = _a.transactionResponse, walletAddress = _a.walletAddress; + return __awaiter(this, void 0, void 0, function () { + var db; + return __generator(this, function (_b) { + if (!firebaseEnabled) + return [2 /*return*/]; + db = getDatabase(); + if (!walletAddress) { + console.debug('Wallet address required to log monitoring events.'); + return [2 /*return*/]; + } + try { + push(ref(db, 'trm'), { + chainId: chainId, + origin: window.location.origin, + timestamp: Date.now(), + tx: transactionResponse, + type: type, + walletAddress: walletAddress, + }); + } + catch (e) { + console.debug('Error adding document: ', e); + } + return [2 /*return*/]; + }); + }); + }, [chainId]); +} +function useTransactionMonitoringEventCallback() { + var account = useActiveWeb3React().account; + var log = useMonitoringEventCallback(); + return useCallback(function (info, transactionResponse) { + if (SUPPORTED_TRANSACTION_TYPES.includes(info.type)) { + log(TransactionType[info.type], { + transactionResponse: (function (_a) { + var hash = _a.hash, v = _a.v, r = _a.r, s = _a.s; + return ({ hash: hash, v: v, r: r, s: s }); + })(transactionResponse), + walletAddress: account !== null && account !== void 0 ? account : undefined, + }); + } + }, [account, log]); +} +function useWalletConnectMonitoringEventCallback() { + var log = useMonitoringEventCallback(); + return useCallback(function (walletAddress) { + log('WALLET_CONNECTED', { transactionResponse: { hash: '', r: '', s: '', v: -1 }, walletAddress: walletAddress }); + }, [log]); +} +function initializeFirebase() { + initializeApp({ + apiKey: process.env.REACT_APP_FIREBASE_KEY, + authDomain: 'interface-monitoring.firebaseapp.com', + databaseURL: 'https://interface-monitoring-default-rtdb.firebaseio.com', + projectId: 'interface-monitoring', + storageBucket: 'interface-monitoring.appspot.com', + messagingSenderId: '968187720053', + appId: '1:968187720053:web:acedf72dce629d470be33c', + }); +} + +// helper that can take a ethers library transaction response and add it to the list of transactions +function useTransactionAdder() { + var _a = useActiveWeb3React(), chainId = _a.chainId, account = _a.account; + var dispatch = useAppDispatch(); + var logMonitoringEvent = useTransactionMonitoringEventCallback(); + return useCallback(function (response, info) { + if (!account) + return; + if (!chainId) + return; + var hash = response.hash; + if (!hash) { + throw Error('No transaction hash found.'); + } + dispatch(addTransaction({ hash: hash, from: account, info: info, chainId: chainId })); + logMonitoringEvent(info, response); + }, [account, chainId, dispatch, logMonitoringEvent]); +} +// returns all the transactions for the current chain +function useAllTransactions() { + var _a; + var chainId = useActiveWeb3React().chainId; + var state = useAppSelector(function (state) { return state.transactions; }); + return chainId ? (_a = state[chainId]) !== null && _a !== void 0 ? _a : {} : {}; +} +function useTransaction(transactionHash) { + var allTransactions = useAllTransactions(); + if (!transactionHash) { + return undefined; + } + return allTransactions[transactionHash]; +} +function useIsTransactionPending(transactionHash) { + var transactions = useAllTransactions(); + if (!transactionHash || !transactions[transactionHash]) + return false; + return !transactions[transactionHash].receipt; +} +function useIsTransactionConfirmed(transactionHash) { + var transactions = useAllTransactions(); + if (!transactionHash || !transactions[transactionHash]) + return false; + return Boolean(transactions[transactionHash].receipt); +} +/** + * Returns whether a transaction happened in the last day (86400 seconds * 1000 milliseconds / second) + * @param tx to check for recency + */ +function isTransactionRecent(tx) { + return new Date().getTime() - tx.addedTime < 86400000; +} +// returns whether a token has a pending approval transaction +function useHasPendingApproval(token, spender) { + var allTransactions = useAllTransactions(); + return useMemo(function () { + return typeof (token === null || token === void 0 ? void 0 : token.address) === 'string' && + typeof spender === 'string' && + Object.keys(allTransactions).some(function (hash) { + var tx = allTransactions[hash]; + if (!tx) + return false; + if (tx.receipt) { + return false; + } + else { + if (tx.info.type !== TransactionType.APPROVAL) + return false; + return tx.info.spender === spender && tx.info.tokenAddress === token.address && isTransactionRecent(tx); + } + }); + }, [allTransactions, spender, token === null || token === void 0 ? void 0 : token.address]); +} +// watch for submissions to claim +// return null if not done loading, return undefined if not found +function useUserHasSubmittedClaim(account) { + var allTransactions = useAllTransactions(); + // get the txn if it has been submitted + var claimTxn = useMemo(function () { + var txnIndex = Object.keys(allTransactions).find(function (hash) { + var tx = allTransactions[hash]; + return tx.info.type === TransactionType.CLAIM && tx.info.recipient === account; + }); + return txnIndex && allTransactions[txnIndex] ? allTransactions[txnIndex] : undefined; + }, [account, allTransactions]); + return { claimSubmitted: Boolean(claimTxn), claimTxn: claimTxn }; +} + +var FETCH_CLAIM_MAPPING_PROMISE = null; +function fetchClaimMapping() { + return (FETCH_CLAIM_MAPPING_PROMISE !== null && FETCH_CLAIM_MAPPING_PROMISE !== void 0 ? FETCH_CLAIM_MAPPING_PROMISE : (FETCH_CLAIM_MAPPING_PROMISE = fetch("https://raw.githubusercontent.com/Uniswap/mrkl-drop-data-chunks/final/chunks/mapping.json") + .then(function (res) { return res.json(); }) + .catch(function (error) { + console.error('Failed to get claims mapping', error); + FETCH_CLAIM_MAPPING_PROMISE = null; + }))); +} +var FETCH_CLAIM_FILE_PROMISES = {}; +function fetchClaimFile(key) { + var _a; + return ((_a = FETCH_CLAIM_FILE_PROMISES[key]) !== null && _a !== void 0 ? _a : (FETCH_CLAIM_FILE_PROMISES[key] = fetch("https://raw.githubusercontent.com/Uniswap/mrkl-drop-data-chunks/final/chunks/" + key + ".json") + .then(function (res) { return res.json(); }) + .catch(function (error) { + console.error("Failed to get claim file mapping for starting address " + key, error); + delete FETCH_CLAIM_FILE_PROMISES[key]; + }))); +} +var FETCH_CLAIM_PROMISES = {}; +// returns the claim for the given address, or null if not valid +function fetchClaim(account) { + var _a; + var formatted = isAddress(account); + if (!formatted) + return Promise.reject(new Error('Invalid address')); + return ((_a = FETCH_CLAIM_PROMISES[account]) !== null && _a !== void 0 ? _a : (FETCH_CLAIM_PROMISES[account] = fetchClaimMapping() + .then(function (mapping) { + var e_1, _a; + var sorted = Object.keys(mapping).sort(function (a, b) { return (a.toLowerCase() < b.toLowerCase() ? -1 : 1); }); + try { + for (var sorted_1 = __values(sorted), sorted_1_1 = sorted_1.next(); !sorted_1_1.done; sorted_1_1 = sorted_1.next()) { + var startingAddress = sorted_1_1.value; + var lastAddress = mapping[startingAddress]; + if (startingAddress.toLowerCase() <= formatted.toLowerCase()) { + if (formatted.toLowerCase() <= lastAddress.toLowerCase()) { + return startingAddress; + } + } + else { + throw new Error("Claim for " + formatted + " was not found in partial search"); + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (sorted_1_1 && !sorted_1_1.done && (_a = sorted_1.return)) _a.call(sorted_1); + } + finally { if (e_1) throw e_1.error; } + } + throw new Error("Claim for " + formatted + " was not found after searching all mappings"); + }) + .then(fetchClaimFile) + .then(function (result) { + if (result[formatted]) + return result[formatted]; + throw new Error("Claim for " + formatted + " was not found in claim file!"); + }) + .catch(function (error) { + console.debug('Claim fetch failed', error); + throw error; + }))); +} +// parse distributorContract blob and detect if user has claim data +// null means we know it does not +function useUserClaimData(account) { + var chainId = useActiveWeb3React().chainId; + var _a = __read(useState({}), 2), claimInfo = _a[0], setClaimInfo = _a[1]; + useEffect(function () { + if (!account || chainId !== 1) + return; + fetchClaim(account) + .then(function (accountClaimInfo) { + return setClaimInfo(function (claimInfo) { + var _a; + return __assign(__assign({}, claimInfo), (_a = {}, _a[account] = accountClaimInfo, _a)); + }); + }) + .catch(function () { + setClaimInfo(function (claimInfo) { + var _a; + return __assign(__assign({}, claimInfo), (_a = {}, _a[account] = null, _a)); + }); + }); + }, [account, chainId]); + return account && chainId === 1 ? claimInfo[account] : null; +} +// check if user is in blob and has not yet claimed UNI +function useUserHasAvailableClaim(account) { + var _a; + var userClaimData = useUserClaimData(account); + var distributorContract = useMerkleDistributorContract(); + var isClaimedResult = useSingleCallResult(distributorContract, 'isClaimed', [userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.index]); + // user is in blob and contract marks as unclaimed + return Boolean(userClaimData && !isClaimedResult.loading && ((_a = isClaimedResult.result) === null || _a === void 0 ? void 0 : _a[0]) === false); +} +function useUserUnclaimedAmount(account) { + var chainId = useActiveWeb3React().chainId; + var userClaimData = useUserClaimData(account); + var canClaim = useUserHasAvailableClaim(account); + var uni = chainId ? UNI[chainId] : undefined; + if (!uni) + return undefined; + if (!canClaim || !userClaimData) { + return CurrencyAmount.fromRawAmount(uni, JSBI.BigInt(0)); + } + return CurrencyAmount.fromRawAmount(uni, JSBI.BigInt(userClaimData.amount)); +} +function useClaimCallback(account) { + // get claim data for this account + var _a = useActiveWeb3React(), library = _a.library, chainId = _a.chainId; + var claimData = useUserClaimData(account); + // used for popup summary + var unclaimedAmount = useUserUnclaimedAmount(account); + var addTransaction = useTransactionAdder(); + var distributorContract = useMerkleDistributorContract(); + var claimCallback = function () { + return __awaiter(this, void 0, void 0, function () { + var args; + var _a; + return __generator(this, function (_b) { + if (!claimData || !account || !library || !chainId || !distributorContract) + return [2 /*return*/]; + args = [claimData.index, account, claimData.amount, claimData.proof]; + return [2 /*return*/, (_a = distributorContract.estimateGas)['claim'].apply(_a, __spreadArray(__spreadArray([], __read(args), false), [{}], false)).then(function (estimatedGasLimit) { + return distributorContract + .claim.apply(distributorContract, __spreadArray(__spreadArray([], __read(args), false), [{ value: null, gasLimit: calculateGasMargin(estimatedGasLimit) }], false)).then(function (response) { + addTransaction(response, { + type: TransactionType.CLAIM, + recipient: account, + uniAmountRaw: unclaimedAmount === null || unclaimedAmount === void 0 ? void 0 : unclaimedAmount.quotient.toString(), + }); + return response.hash; + }); + })]; + }); + }); + }; + return { claimCallback: claimCallback }; +} + +var _a$d, _b$4, _c$3, _d$2, _e$1, _f, _g, _h; +var WRAPPED_NATIVE_CURRENCIES_ONLY = Object.fromEntries(Object.entries(WRAPPED_NATIVE_CURRENCY).map(function (_a) { + var _b = __read(_a, 2), key = _b[0], value = _b[1]; + return [key, [value]]; +})); +// used to construct intermediary pairs for trading +var BASES_TO_CHECK_TRADES_AGAINST = __assign(__assign({}, WRAPPED_NATIVE_CURRENCIES_ONLY), (_a$d = {}, _a$d[SupportedChainId.MAINNET] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.MAINNET]), false), [DAI, USDC, USDT, WBTC], false), _a$d[SupportedChainId.OPTIMISM] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.OPTIMISM]), false), [ + DAI_OPTIMISM, + USDT_OPTIMISM, + WBTC_OPTIMISM, +], false), _a$d[SupportedChainId.ARBITRUM_ONE] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.ARBITRUM_ONE]), false), [ + DAI_ARBITRUM_ONE, + USDT_ARBITRUM_ONE, + WBTC_ARBITRUM_ONE, +], false), _a$d[SupportedChainId.POLYGON] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.POLYGON]), false), [ + DAI_POLYGON, + USDC_POLYGON, + USDT_POLYGON, + WETH_POLYGON, +], false), _a$d)); +var ADDITIONAL_BASES = (_b$4 = {}, + _b$4[SupportedChainId.MAINNET] = (_c$3 = { + '0xF16E4d813f4DcfDe4c5b44f305c908742De84eF0': [ETH2X_FLI] + }, + _c$3[rETH2.address] = [sETH2], + _c$3[SWISE.address] = [sETH2], + _c$3[FEI.address] = [TRIBE], + _c$3[TRIBE.address] = [FEI], + _c$3[FRAX.address] = [FXS], + _c$3[FXS.address] = [FRAX], + _c$3[WBTC.address] = [renBTC], + _c$3[renBTC.address] = [WBTC], + _c$3), + _b$4); +/** + * Some tokens can only be swapped via certain pairs, so we override the list of bases that are considered for these + * tokens. + */ +var CUSTOM_BASES = (_d$2 = {}, + _d$2[SupportedChainId.MAINNET] = (_e$1 = {}, + _e$1[AMPL.address] = [DAI, WRAPPED_NATIVE_CURRENCY[SupportedChainId.MAINNET]], + _e$1), + _d$2); +/** + * Shows up in the currency select for swap and add liquidity + */ +var COMMON_BASES = (_f = {}, + _f[SupportedChainId.MAINNET] = [ + nativeOnChain(SupportedChainId.MAINNET), + DAI, + USDC, + USDT, + WBTC, + WRAPPED_NATIVE_CURRENCY[SupportedChainId.MAINNET], + ], + _f[SupportedChainId.ROPSTEN] = [ + nativeOnChain(SupportedChainId.ROPSTEN), + WRAPPED_NATIVE_CURRENCY[SupportedChainId.ROPSTEN], + ], + _f[SupportedChainId.RINKEBY] = [ + nativeOnChain(SupportedChainId.RINKEBY), + WRAPPED_NATIVE_CURRENCY[SupportedChainId.RINKEBY], + ], + _f[SupportedChainId.GOERLI] = [nativeOnChain(SupportedChainId.GOERLI), WRAPPED_NATIVE_CURRENCY[SupportedChainId.GOERLI]], + _f[SupportedChainId.KOVAN] = [nativeOnChain(SupportedChainId.KOVAN), WRAPPED_NATIVE_CURRENCY[SupportedChainId.KOVAN]], + _f[SupportedChainId.ARBITRUM_ONE] = [ + nativeOnChain(SupportedChainId.ARBITRUM_ONE), + DAI_ARBITRUM_ONE, + USDC_ARBITRUM, + USDT_ARBITRUM_ONE, + WBTC_ARBITRUM_ONE, + WRAPPED_NATIVE_CURRENCY[SupportedChainId.ARBITRUM_ONE], + ], + _f[SupportedChainId.ARBITRUM_RINKEBY] = [ + nativeOnChain(SupportedChainId.ARBITRUM_RINKEBY), + WRAPPED_NATIVE_CURRENCY[SupportedChainId.ARBITRUM_RINKEBY], + ], + _f[SupportedChainId.OPTIMISM] = [ + nativeOnChain(SupportedChainId.OPTIMISM), + DAI_OPTIMISM, + USDC_OPTIMISM, + USDT_OPTIMISM, + WBTC_OPTIMISM, + ], + _f[SupportedChainId.OPTIMISTIC_KOVAN] = [nativeOnChain(SupportedChainId.OPTIMISTIC_KOVAN)], + _f[SupportedChainId.POLYGON] = [ + nativeOnChain(SupportedChainId.POLYGON), + WETH_POLYGON, + USDC_POLYGON, + DAI_POLYGON, + USDT_POLYGON, + WBTC_POLYGON, + ], + _f[SupportedChainId.POLYGON_MUMBAI] = [ + nativeOnChain(SupportedChainId.POLYGON_MUMBAI), + WRAPPED_NATIVE_CURRENCY[SupportedChainId.POLYGON_MUMBAI], + WETH_POLYGON_MUMBAI, + ], + _f); +// used to construct the list of all pairs we consider by default in the frontend +__assign(__assign({}, WRAPPED_NATIVE_CURRENCIES_ONLY), (_g = {}, _g[SupportedChainId.MAINNET] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.MAINNET]), false), [DAI, USDC, USDT, WBTC], false), _g)); +(_h = {}, + _h[SupportedChainId.MAINNET] = [ + [ + new Token(SupportedChainId.MAINNET, '0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643', 8, 'cDAI', 'Compound Dai'), + new Token(SupportedChainId.MAINNET, '0x39AA39c021dfbaE8faC545936693aC917d5E7563', 8, 'cUSDC', 'Compound USD Coin'), + ], + [USDC, USDT], + [DAI, USDT], + ], + _h); + +var EthereumLogo = "data:image/png;base64,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"; + +var arbitrumLogoUrl = "data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20viewBox%3D%220%200%20470.287%20514.251%22%20enable-background%3D%22new%200%200%20470.287%20514.251%22%20xml%3Aspace%3D%22preserve%22%3E%3Cg%20id%3D%22Background%22%3E%3C%2Fg%3E%3Cg%20id%3D%22Logos_and_symbols%22%3E%20%3Cg%20id%3D%22SYMBOL_VER_3%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_4_3_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_1_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_1_%22%3E%20%20%3Cg%20id%3D%22_x31_-3%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_14_%22%3E%20%20%20%3Cpath%20fill%3D%22%232D374B%22%20d%3D%22M291.134%2C237.469l35.654-60.5l96.103%2C149.684l0.046%2C28.727l-0.313-197.672%20%20%20%20c-0.228-4.832-2.794-9.252-6.887-11.859L242.715%2C46.324c-4.045-1.99-9.18-1.967-13.22%2C0.063c-0.546%2C0.272-1.06%2C0.57-1.548%2C0.895%20%20%20%20l-0.604%2C0.379L59.399%2C144.983l-0.651%2C0.296c-0.838%2C0.385-1.686%2C0.875-2.48%2C1.444c-3.185%2C2.283-5.299%2C5.66-5.983%2C9.448%20%20%20%20c-0.103%2C0.574-0.179%2C1.158-0.214%2C1.749l0.264%2C161.083l89.515-138.745c11.271-18.397%2C35.825-24.323%2C58.62-24.001l26.753%2C0.706%20%20%20%20L67.588%2C409.765l18.582%2C10.697L245.692%2C157.22l70.51-0.256L157.091%2C426.849l66.306%2C38.138l7.922%2C4.556%20%20%20%20c3.351%2C1.362%2C7.302%2C1.431%2C10.681%2C0.21l175.453-101.678l-33.544%2C19.438L291.134%2C237.469z%20M304.736%2C433.395l-66.969-105.108%20%20%20%20l40.881-69.371l87.952%2C138.628L304.736%2C433.395z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%2328A0F0%22%20points%3D%22237.768%2C328.286%20304.736%2C433.395%20366.601%2C397.543%20278.648%2C258.915%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2328A0F0%22%20d%3D%22M422.937%2C355.379l-0.046-28.727l-96.103-149.684l-35.654%2C60.5l92.774%2C150.043l33.544-19.438%20%20%20%20c3.29-2.673%2C5.281-6.594%2C5.49-10.825L422.937%2C355.379z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23FFFFFF%22%20d%3D%22M20.219%2C382.469l47.369%2C27.296l157.634-252.801l-26.753-0.706c-22.795-0.322-47.35%2C5.604-58.62%2C24.001%20%20%20%20L50.334%2C319.004l-30.115%2C46.271V382.469z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%23FFFFFF%22%20points%3D%22316.202%2C156.964%20245.692%2C157.22%2086.17%2C420.462%20141.928%2C452.565%20157.091%2C426.849%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2396BEDC%22%20d%3D%22M452.65%2C156.601c-0.59-14.746-8.574-28.245-21.08-36.104L256.28%2C19.692%20%20%20%20c-12.371-6.229-27.825-6.237-40.218-0.004c-1.465%2C0.739-170.465%2C98.752-170.465%2C98.752c-2.339%2C1.122-4.592%2C2.458-6.711%2C3.975%20%20%20%20c-11.164%2C8.001-17.969%2C20.435-18.668%2C34.095v208.765l30.115-46.271L50.07%2C157.921c0.035-0.589%2C0.109-1.169%2C0.214-1.741%20%20%20%20c0.681-3.79%2C2.797-7.171%2C5.983-9.456c0.795-0.569%2C172.682-100.064%2C173.228-100.337c4.04-2.029%2C9.175-2.053%2C13.22-0.063%20%20%20%20l173.022%2C99.523c4.093%2C2.607%2C6.659%2C7.027%2C6.887%2C11.859v199.542c-0.209%2C4.231-1.882%2C8.152-5.172%2C10.825l-33.544%2C19.438%20%20%20%20l-17.308%2C10.031l-61.864%2C35.852l-62.737%2C36.357c-3.379%2C1.221-7.33%2C1.152-10.681-0.21l-74.228-42.693l-15.163%2C25.717%20%20%20%20l66.706%2C38.406c2.206%2C1.255%2C4.171%2C2.367%2C5.784%2C3.272c2.497%2C1.4%2C4.199%2C2.337%2C4.8%2C2.629c4.741%2C2.303%2C11.563%2C3.643%2C17.71%2C3.643%20%20%20%20c5.636%2C0%2C11.132-1.035%2C16.332-3.072l182.225-105.531c10.459-8.104%2C16.612-20.325%2C17.166-33.564V156.601z%22%2F%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_13_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_6_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_3_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_15_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_3_%22%3E%20%20%20%3Cg%20id%3D%22_x33__7_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic%22%3E%20%20%20%3Cg%20id%3D%22_x33__3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_10_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x34__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_2_%22%3E%20%20%20%3Cg%20id%3D%22_x33__6_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_2_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_11_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_5_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_12_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_1_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_9_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_2_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol_1_%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_1_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_7_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_8_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Monochromatic_1_%22%3E%20%20%3Cg%20id%3D%22_x33__4_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E"; + +var optimismLogoUrl = "data:image/svg+xml,%3Csvg%20width%3D%22170%22%20height%3D%22168%22%20viewBox%3D%220%200%20170%20168%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20clip-path%3D%22url%28%23clip0%29%22%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF505F%22%2F%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF0320%22%2F%3E%3Cpath%20d%3D%22M85.05%200C132.022%200%20170.1%2037.8949%20170.1%2084.6407C170.1%20131.386%200%20131.386%200%2084.6407C0%2037.8949%2038.0782%200%2085.05%200Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.665%2064.0394L112.444%2012.3742L89.0263%2078.9477L144.665%2064.0394Z%22%20fill%3D%22%23FF4E65%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.777%2064.215L112.444%2012.3742L165.349%2058.4347L143.777%2064.215Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.551%2063.613L142.479%20124.467L88.912%2078.5213L144.551%2063.613Z%22%20fill%3D%22%23D0001A%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.663%2063.7886L142.479%20124.467L165.235%2058.0083L143.663%2063.7886Z%22%20fill%3D%22%23FF697B%22%2F%3E%3C%2Fg%3E%3Cdefs%3E%3CclipPath%20id%3D%22clip0%22%3E%3Crect%20width%3D%22170%22%20height%3D%22168%22%20fill%3D%22white%22%2F%3E%3C%2FclipPath%3E%3C%2Fdefs%3E%3C%2Fsvg%3E"; + +var polygonMaticLogo = "data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20viewBox%3D%220%200%2038.4%2033.5%22%20style%3D%22enable-background%3Anew%200%200%2038.4%2033.5%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cstyle%20type%3D%22text%2Fcss%22%3E%20.st0%7Bfill%3A%238247E5%3B%7D%3C%2Fstyle%3E%3Cg%3E%20%3Cpath%20class%3D%22st0%22%20d%3D%22M29%2C10.2c-0.7-0.4-1.6-0.4-2.4%2C0L21%2C13.5l-3.8%2C2.1l-5.5%2C3.3c-0.7%2C0.4-1.6%2C0.4-2.4%2C0L5%2C16.3%20%20c-0.7-0.4-1.2-1.2-1.2-2.1v-5c0-0.8%2C0.4-1.6%2C1.2-2.1l4.3-2.5c0.7-0.4%2C1.6-0.4%2C2.4%2C0L16%2C7.2c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v3.3l3.8-2.2V7%20%20c0-0.8-0.4-1.6-1.2-2.1l-8-4.7c-0.7-0.4-1.6-0.4-2.4%2C0L1.2%2C5C0.4%2C5.4%2C0%2C6.2%2C0%2C7v9.4c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l5.5-3.2l3.8-2.2l5.5-3.2c0.7-0.4%2C1.6-0.4%2C2.4%2C0l4.3%2C2.5c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v5c0%2C0.8-0.4%2C1.6-1.2%2C2.1%20%20L29%2C28.8c-0.7%2C0.4-1.6%2C0.4-2.4%2C0l-4.3-2.5c-0.7-0.4-1.2-1.2-1.2-2.1V21l-3.8%2C2.2v3.3c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l8.1-4.7c0.7-0.4%2C1.2-1.2%2C1.2-2.1V17c0-0.8-0.4-1.6-1.2-2.1L29%2C10.2z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"; + +var UNI_LIST = 'https://tokens.uniswap.org'; +var AAVE_LIST = 'tokenlist.aave.eth'; +var BA_LIST = 'https://raw.githubusercontent.com/The-Blockchain-Association/sec-notice-list/master/ba-sec-list.json'; +var CMC_ALL_LIST = 'https://api.coinmarketcap.com/data-api/v3/uniswap/all.json'; +var COINGECKO_LIST = 'https://tokens.coingecko.com/uniswap/all.json'; +var COMPOUND_LIST = 'https://raw.githubusercontent.com/compound-finance/token-list/master/compound.tokenlist.json'; +var GEMINI_LIST = 'https://www.gemini.com/uniswap/manifest.json'; +var ARBITRUM_LIST = 'https://bridge.arbitrum.io/token-list-42161.json'; +var KLEROS_LIST = 't2crtokens.eth'; +var OPTIMISM_LIST = 'https://static.optimism.io/optimism.tokenlist.json'; +var ROLL_LIST = 'https://app.tryroll.com/tokens.json'; +var SET_LIST = 'https://raw.githubusercontent.com/SetProtocol/uniswap-tokenlist/main/set.tokenlist.json'; +var WRAPPED_LIST = 'wrapped.tokensoft.eth'; +var UNSUPPORTED_LIST_URLS = [BA_LIST]; +// this is the default list of lists that are exposed to users +// lower index == higher priority for token import +var DEFAULT_LIST_OF_LISTS_TO_DISPLAY = [ + UNI_LIST, + COMPOUND_LIST, + AAVE_LIST, + CMC_ALL_LIST, + COINGECKO_LIST, + KLEROS_LIST, + GEMINI_LIST, + WRAPPED_LIST, + SET_LIST, + ROLL_LIST, + ARBITRUM_LIST, + OPTIMISM_LIST, +]; +var DEFAULT_LIST_OF_LISTS = __spreadArray(__spreadArray([], __read(DEFAULT_LIST_OF_LISTS_TO_DISPLAY), false), __read(UNSUPPORTED_LIST_URLS), false); +// default lists to be 'active' aka searched across +var DEFAULT_ACTIVE_LIST_URLS = [UNI_LIST, GEMINI_LIST]; + +var _a$c, _b$3; +var INFURA_KEY = process.env.REACT_APP_INFURA_KEY; +if (typeof INFURA_KEY === 'undefined') { + throw new Error("REACT_APP_INFURA_KEY must be a defined environment variable"); +} +/** + * These are the network URLs used by the interface when there is not another available source of chain data + */ +var INFURA_NETWORK_URLS = (_a$c = {}, + _a$c[SupportedChainId.MAINNET] = "https://mainnet.infura.io/v3/" + INFURA_KEY, + _a$c[SupportedChainId.RINKEBY] = "https://rinkeby.infura.io/v3/" + INFURA_KEY, + _a$c[SupportedChainId.ROPSTEN] = "https://ropsten.infura.io/v3/" + INFURA_KEY, + _a$c[SupportedChainId.GOERLI] = "https://goerli.infura.io/v3/" + INFURA_KEY, + _a$c[SupportedChainId.KOVAN] = "https://kovan.infura.io/v3/" + INFURA_KEY, + _a$c[SupportedChainId.OPTIMISM] = "https://optimism-mainnet.infura.io/v3/" + INFURA_KEY, + _a$c[SupportedChainId.OPTIMISTIC_KOVAN] = "https://optimism-kovan.infura.io/v3/" + INFURA_KEY, + _a$c[SupportedChainId.ARBITRUM_ONE] = "https://arbitrum-mainnet.infura.io/v3/" + INFURA_KEY, + _a$c[SupportedChainId.ARBITRUM_RINKEBY] = "https://arbitrum-rinkeby.infura.io/v3/" + INFURA_KEY, + _a$c[SupportedChainId.POLYGON] = "https://polygon-mainnet.infura.io/v3/" + INFURA_KEY, + _a$c[SupportedChainId.POLYGON_MUMBAI] = "https://polygon-mumbai.infura.io/v3/" + INFURA_KEY, + _a$c); +var NetworkType; +(function (NetworkType) { + NetworkType[NetworkType["L1"] = 0] = "L1"; + NetworkType[NetworkType["L2"] = 1] = "L2"; +})(NetworkType || (NetworkType = {})); +var CHAIN_INFO = (_b$3 = {}, + _b$3[SupportedChainId.MAINNET] = { + networkType: NetworkType.L1, + docs: 'https://docs.uniswap.org/', + explorer: 'https://etherscan.io/', + infoLink: 'https://info.uniswap.org/#/', + label: 'Ethereum', + logoUrl: EthereumLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, + rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.MAINNET], + }, + }, + _b$3[SupportedChainId.RINKEBY] = { + networkType: NetworkType.L1, + docs: 'https://docs.uniswap.org/', + explorer: 'https://rinkeby.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/', + label: 'Rinkeby', + logoUrl: EthereumLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Rinkeby Ether', symbol: 'rETH', decimals: 18 }, + rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.RINKEBY], + }, + }, + _b$3[SupportedChainId.ROPSTEN] = { + networkType: NetworkType.L1, + docs: 'https://docs.uniswap.org/', + explorer: 'https://ropsten.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/', + label: 'Ropsten', + logoUrl: EthereumLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Ropsten Ether', symbol: 'ropETH', decimals: 18 }, + rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.ROPSTEN], + }, + }, + _b$3[SupportedChainId.KOVAN] = { + networkType: NetworkType.L1, + docs: 'https://docs.uniswap.org/', + explorer: 'https://kovan.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/', + label: 'Kovan', + logoUrl: EthereumLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Kovan Ether', symbol: 'kovETH', decimals: 18 }, + rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.KOVAN], + }, + }, + _b$3[SupportedChainId.GOERLI] = { + networkType: NetworkType.L1, + docs: 'https://docs.uniswap.org/', + explorer: 'https://goerli.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/', + label: 'Görli', + logoUrl: EthereumLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Görli Ether', symbol: 'görETH', decimals: 18 }, + rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.GOERLI], + }, + }, + _b$3[SupportedChainId.OPTIMISM] = { + networkType: NetworkType.L2, + blockWaitMsBeforeWarning: ms(templateObject_1$1m || (templateObject_1$1m = __makeTemplateObject(["25m"], ["25m"]))), + bridge: 'https://gateway.optimism.io/?chainId=1', + defaultListUrl: OPTIMISM_LIST, + docs: 'https://optimism.io/', + explorer: 'https://optimistic.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/optimism/', + label: 'Optimism', + logoUrl: optimismLogoUrl, + statusPage: 'https://optimism.io/status', + helpCenterUrl: 'https://help.uniswap.org/en/collections/3137778-uniswap-on-optimistic-ethereum-oξ', + addNetworkInfo: { + nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, + rpcUrl: 'https://mainnet.optimism.io', + }, + }, + _b$3[SupportedChainId.OPTIMISTIC_KOVAN] = { + networkType: NetworkType.L2, + blockWaitMsBeforeWarning: ms(templateObject_2$10 || (templateObject_2$10 = __makeTemplateObject(["25m"], ["25m"]))), + bridge: 'https://gateway.optimism.io/', + defaultListUrl: OPTIMISM_LIST, + docs: 'https://optimism.io/', + explorer: 'https://optimistic.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/optimism/', + label: 'Optimistic Kovan', + logoUrl: optimismLogoUrl, + statusPage: 'https://optimism.io/status', + helpCenterUrl: 'https://help.uniswap.org/en/collections/3137778-uniswap-on-optimistic-ethereum-oξ', + addNetworkInfo: { + nativeCurrency: { name: 'Optimistic Kovan Ether', symbol: 'kovOpETH', decimals: 18 }, + rpcUrl: 'https://kovan.optimism.io', + }, + }, + _b$3[SupportedChainId.ARBITRUM_ONE] = { + networkType: NetworkType.L2, + blockWaitMsBeforeWarning: ms(templateObject_3$T || (templateObject_3$T = __makeTemplateObject(["10m"], ["10m"]))), + bridge: 'https://bridge.arbitrum.io/', + docs: 'https://offchainlabs.com/', + explorer: 'https://arbiscan.io/', + infoLink: 'https://info.uniswap.org/#/arbitrum', + label: 'Arbitrum', + logoUrl: arbitrumLogoUrl, + defaultListUrl: ARBITRUM_LIST, + helpCenterUrl: 'https://help.uniswap.org/en/collections/3137787-uniswap-on-arbitrum', + addNetworkInfo: { + nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, + rpcUrl: 'https://arb1.arbitrum.io/rpc', + }, + }, + _b$3[SupportedChainId.ARBITRUM_RINKEBY] = { + networkType: NetworkType.L2, + blockWaitMsBeforeWarning: ms(templateObject_4$H || (templateObject_4$H = __makeTemplateObject(["10m"], ["10m"]))), + bridge: 'https://bridge.arbitrum.io/', + docs: 'https://offchainlabs.com/', + explorer: 'https://rinkeby-explorer.arbitrum.io/', + infoLink: 'https://info.uniswap.org/#/arbitrum/', + label: 'Arbitrum Rinkeby', + logoUrl: arbitrumLogoUrl, + defaultListUrl: ARBITRUM_LIST, + helpCenterUrl: 'https://help.uniswap.org/en/collections/3137787-uniswap-on-arbitrum', + addNetworkInfo: { + nativeCurrency: { name: 'Rinkeby Arbitrum Ether', symbol: 'rinkArbETH', decimals: 18 }, + rpcUrl: 'https://rinkeby.arbitrum.io/rpc', + }, + }, + _b$3[SupportedChainId.POLYGON] = { + networkType: NetworkType.L1, + blockWaitMsBeforeWarning: ms(templateObject_5$y || (templateObject_5$y = __makeTemplateObject(["10m"], ["10m"]))), + bridge: 'https://wallet.polygon.technology/bridge', + docs: 'https://polygon.io/', + explorer: 'https://polygonscan.com/', + infoLink: 'https://info.uniswap.org/#/polygon/', + label: 'Polygon', + logoUrl: polygonMaticLogo, + addNetworkInfo: { + rpcUrl: 'https://polygon-rpc.com/', + nativeCurrency: { name: 'Polygon Matic', symbol: 'MATIC', decimals: 18 }, + }, + }, + _b$3[SupportedChainId.POLYGON_MUMBAI] = { + networkType: NetworkType.L1, + blockWaitMsBeforeWarning: ms(templateObject_6$p || (templateObject_6$p = __makeTemplateObject(["10m"], ["10m"]))), + bridge: 'https://wallet.polygon.technology/bridge', + docs: 'https://polygon.io/', + explorer: 'https://mumbai.polygonscan.com/', + infoLink: 'https://info.uniswap.org/#/polygon/', + label: 'Polygon Mumbai', + logoUrl: polygonMaticLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Polygon Mumbai Matic', symbol: 'mMATIC', decimals: 18 }, + rpcUrl: 'https://rpc-endpoints.superfluid.dev/mumbai', + }, + }, + _b$3); +var templateObject_1$1m, templateObject_2$10, templateObject_3$T, templateObject_4$H, templateObject_5$y, templateObject_6$p; + +function useNativeCurrency() { + var chainId = useActiveWeb3React().chainId; + return useMemo(function () { + return chainId + ? nativeOnChain(chainId) + : // display mainnet when not connected + nativeOnChain(SupportedChainId.MAINNET); + }, [chainId]); +} + +var EMPTY_CONNECTOR = initializeConnector(function () { return EMPTY; }); +atomWithDefault(function () { return EMPTY_CONNECTOR; }); +atomWithDefault(function () { return EMPTY_CONNECTOR; }); + +var REGISTRAR_ABI = [ + { + constant: true, + inputs: [ + { + name: 'node', + type: 'bytes32', + }, + ], + name: 'resolver', + outputs: [ + { + name: 'resolverAddress', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, +]; +var REGISTRAR_ADDRESS = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'; +var RESOLVER_ABI = [ + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'contenthash', + outputs: [ + { + internalType: 'bytes', + name: '', + type: 'bytes', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, +]; +// cache the resolver contracts since most of them are the public resolver +function resolverContract(resolverAddress, provider) { + return new Contract(resolverAddress, RESOLVER_ABI, provider); +} +/** + * Fetches and decodes the result of an ENS contenthash lookup on mainnet to a URI + * @param ensName to resolve + * @param provider provider to use to fetch the data + */ +function resolveENSContentHash(ensName, provider) { + return __awaiter(this, void 0, void 0, function () { + var ensRegistrarContract, hash, resolverAddress; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + ensRegistrarContract = new Contract(REGISTRAR_ADDRESS, REGISTRAR_ABI, provider); + hash = namehash(ensName); + return [4 /*yield*/, ensRegistrarContract.resolver(hash)]; + case 1: + resolverAddress = _a.sent(); + return [2 /*return*/, resolverContract(resolverAddress, provider).contenthash(hash)]; + } + }); + }); +} + +function hexToUint8Array(hex) { + hex = hex.startsWith('0x') ? hex.substr(2) : hex; + if (hex.length % 2 !== 0) + throw new Error('hex must have length that is multiple of 2'); + var arr = new Uint8Array(hex.length / 2); + for (var i = 0; i < arr.length; i++) { + arr[i] = parseInt(hex.substr(i * 2, 2), 16); + } + return arr; +} +var UTF_8_DECODER = new TextDecoder('utf-8'); +/** + * Returns the URI representation of the content hash for supported codecs + * @param contenthash to decode + */ +function contenthashToUri(contenthash) { + var data = hexToUint8Array(contenthash); + var codec = getNameFromData(data); + switch (codec) { + case 'ipfs-ns': { + var unprefixedData = rmPrefix(data); + var cid = new CID(unprefixedData); + return "ipfs://" + toB58String(cid.multihash); + } + case 'ipns-ns': { + var unprefixedData = rmPrefix(data); + var cid = new CID(unprefixedData); + var multihash = decode(cid.multihash); + if (multihash.name === 'identity') { + return "ipns://" + UTF_8_DECODER.decode(multihash.digest).trim(); + } + else { + return "ipns://" + toB58String(cid.multihash); + } + } + default: + throw new Error("Unrecognized codec: " + codec); + } +} + +var ENS_NAME_REGEX$1 = /^(([a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\.)+)eth(\/.*)?$/; +function parseENSAddress(ensAddress) { + var match = ensAddress.match(ENS_NAME_REGEX$1); + if (!match) + return undefined; + return { ensName: match[1].toLowerCase() + "eth", ensPath: match[4] }; +} + +/** + * Given a URI that may be ipfs, ipns, http, https, ar, or data protocol, return the fetch-able http(s) URLs for the same content + * @param uri to convert to fetch-able http url + */ +function uriToHttp(uri) { + var _a, _b, _c; + var protocol = uri.split(':')[0].toLowerCase(); + switch (protocol) { + case 'data': + return [uri]; + case 'https': + return [uri]; + case 'http': + return ['https' + uri.substr(4), uri]; + case 'ipfs': + var hash = (_a = uri.match(/^ipfs:(\/\/)?(.*)$/i)) === null || _a === void 0 ? void 0 : _a[2]; + return ["https://cloudflare-ipfs.com/ipfs/" + hash + "/", "https://ipfs.io/ipfs/" + hash + "/"]; + case 'ipns': + var name_1 = (_b = uri.match(/^ipns:(\/\/)?(.*)$/i)) === null || _b === void 0 ? void 0 : _b[2]; + return ["https://cloudflare-ipfs.com/ipns/" + name_1 + "/", "https://ipfs.io/ipns/" + name_1 + "/"]; + case 'ar': + var tx = (_c = uri.match(/^ar:(\/\/)?(.*)$/i)) === null || _c === void 0 ? void 0 : _c[2]; + return ["https://arweave.net/" + tx]; + default: + return []; + } +} + +var ValidationSchema; +(function (ValidationSchema) { + ValidationSchema["LIST"] = "list"; + ValidationSchema["TOKENS"] = "tokens"; +})(ValidationSchema || (ValidationSchema = {})); +var validator = new Promise(function (resolve) { return __awaiter(void 0, void 0, void 0, function () { + var _a, ajv, schema, validator; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: return [4 /*yield*/, Promise.all([import('ajv'), Promise.resolve().then(function () { return tokenlist_schema$1; })])]; + case 1: + _a = __read.apply(void 0, [_b.sent(), 2]), ajv = _a[0], schema = _a[1]; + validator = new ajv.default({ allErrors: true }) + .addSchema(schema, ValidationSchema.LIST) + // Adds a meta scheme of Pick + .addSchema(__assign(__assign({}, schema), { $id: schema.$id + '#tokens', required: ['tokens'] }), ValidationSchema.TOKENS); + resolve(validator); + return [2 /*return*/]; + } + }); +}); }); +function getValidationErrors(validate) { + var _a, _b; + return ((_b = (_a = validate === null || validate === void 0 ? void 0 : validate.errors) === null || _a === void 0 ? void 0 : _a.map(function (error) { return [error.dataPath, error.message].filter(Boolean).join(' '); }).join('; ')) !== null && _b !== void 0 ? _b : 'unknown error'); +} +/** + * Validates a token list. + * @param json the TokenList to validate + */ +function validateTokenList(json) { + return __awaiter(this, void 0, void 0, function () { + var validate; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, validator]; + case 1: + validate = (_a.sent()).getSchema(ValidationSchema.LIST); + if (validate === null || validate === void 0 ? void 0 : validate(json)) { + return [2 /*return*/, json]; + } + throw new Error("Token list failed validation: " + getValidationErrors(validate)); + } + }); + }); +} + +var listCache = new Map(); +/** Fetches and validates a token list. */ +function fetchTokenList$1(listUrl, resolveENSContentHash) { + var _a; + return __awaiter(this, void 0, void 0, function () { + var cached, urls, parsedENS, contentHashUri, error_1, message, translatedUri, message, i, url, isLast, response, error_2, message, message, json, list; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + cached = listCache === null || listCache === void 0 ? void 0 : listCache.get(listUrl) // avoid spurious re-fetches + ; + if (cached) { + return [2 /*return*/, cached]; + } + parsedENS = parseENSAddress(listUrl); + if (!parsedENS) return [3 /*break*/, 5]; + contentHashUri = void 0; + _b.label = 1; + case 1: + _b.trys.push([1, 3, , 4]); + return [4 /*yield*/, resolveENSContentHash(parsedENS.ensName)]; + case 2: + contentHashUri = _b.sent(); + return [3 /*break*/, 4]; + case 3: + error_1 = _b.sent(); + message = "failed to resolve ENS name: " + parsedENS.ensName; + console.debug(message, error_1); + throw new Error(message); + case 4: + translatedUri = void 0; + try { + translatedUri = contenthashToUri(contentHashUri); + } + catch (error) { + message = "failed to translate contenthash to URI: " + contentHashUri; + console.debug(message, error); + throw new Error(message); + } + urls = uriToHttp("" + translatedUri + ((_a = parsedENS.ensPath) !== null && _a !== void 0 ? _a : '')); + return [3 /*break*/, 6]; + case 5: + urls = uriToHttp(listUrl); + _b.label = 6; + case 6: + i = 0; + _b.label = 7; + case 7: + if (!(i < urls.length)) return [3 /*break*/, 15]; + url = urls[i]; + isLast = i === urls.length - 1; + response = void 0; + _b.label = 8; + case 8: + _b.trys.push([8, 10, , 11]); + return [4 /*yield*/, fetch(url, { credentials: 'omit' })]; + case 9: + response = _b.sent(); + return [3 /*break*/, 11]; + case 10: + error_2 = _b.sent(); + message = "failed to fetch list: " + listUrl; + console.debug(message, error_2); + if (isLast) + throw new Error(message); + return [3 /*break*/, 14]; + case 11: + if (!response.ok) { + message = "failed to fetch list: " + listUrl; + console.debug(message, response.statusText); + if (isLast) + throw new Error(message); + return [3 /*break*/, 14]; + } + return [4 /*yield*/, response.json()]; + case 12: + json = _b.sent(); + return [4 /*yield*/, validateTokenList(json)]; + case 13: + list = _b.sent(); + listCache === null || listCache === void 0 ? void 0 : listCache.set(listUrl, list); + return [2 /*return*/, list]; + case 14: + i++; + return [3 /*break*/, 7]; + case 15: throw new Error('Unrecognized list URL protocol.'); + } + }); + }); +} + +/** + * Returns a map of the given addresses to their eventually consistent ETH balances. + */ +function useNativeCurrencyBalances(uncheckedAddresses) { + var chainId = useActiveWeb3React().chainId; + var multicallContract = useInterfaceMulticall(); + var validAddressInputs = useMemo(function () { + return uncheckedAddresses + ? uncheckedAddresses + .map(isAddress) + .filter(function (a) { return a !== false; }) + .sort() + .map(function (addr) { return [addr]; }) + : []; + }, [uncheckedAddresses]); + var results = useSingleContractMultipleData(multicallContract, 'getEthBalance', validAddressInputs); + return useMemo(function () { + return validAddressInputs.reduce(function (memo, _a, i) { + var _b, _c; + var _d = __read(_a, 1), address = _d[0]; + var value = (_c = (_b = results === null || results === void 0 ? void 0 : results[i]) === null || _b === void 0 ? void 0 : _b.result) === null || _c === void 0 ? void 0 : _c[0]; + if (value && chainId) + memo[address] = CurrencyAmount.fromRawAmount(nativeOnChain(chainId), JSBI.BigInt(value.toString())); + return memo; + }, {}); + }, [validAddressInputs, chainId, results]); +} +var ERC20Interface = new Interface(ERC20ABI); +var tokenBalancesGasRequirement = { gasRequired: 125000 }; +/** + * Returns a map of token addresses to their eventually consistent token balances for a single account. + */ +function useTokenBalancesWithLoadingIndicator(address, tokens) { + var validatedTokens = useMemo(function () { var _a; return (_a = tokens === null || tokens === void 0 ? void 0 : tokens.filter(function (t) { return isAddress(t === null || t === void 0 ? void 0 : t.address) !== false; })) !== null && _a !== void 0 ? _a : []; }, [tokens]); + var validatedTokenAddresses = useMemo(function () { return validatedTokens.map(function (vt) { return vt.address; }); }, [validatedTokens]); + var balances = useMultipleContractSingleData(validatedTokenAddresses, ERC20Interface, 'balanceOf', useMemo(function () { return [address]; }, [address]), tokenBalancesGasRequirement); + var anyLoading = useMemo(function () { return balances.some(function (callState) { return callState.loading; }); }, [balances]); + return useMemo(function () { return [ + address && validatedTokens.length > 0 + ? validatedTokens.reduce(function (memo, token, i) { + var _a, _b; + var value = (_b = (_a = balances === null || balances === void 0 ? void 0 : balances[i]) === null || _a === void 0 ? void 0 : _a.result) === null || _b === void 0 ? void 0 : _b[0]; + var amount = value ? JSBI.BigInt(value.toString()) : undefined; + if (amount) { + memo[token.address] = CurrencyAmount.fromRawAmount(token, amount); + } + return memo; + }, {}) + : {}, + anyLoading, + ]; }, [address, validatedTokens, anyLoading, balances]); +} +function useTokenBalances(address, tokens) { + return useTokenBalancesWithLoadingIndicator(address, tokens)[0]; +} +// get the balance for a single token/account combo +function useTokenBalance(account, token) { + var tokenBalances = useTokenBalances(account, useMemo(function () { return [token]; }, [token])); + if (!token) + return undefined; + return tokenBalances[token.address]; +} +function useCurrencyBalances(account, currencies) { + var tokens = useMemo(function () { var _a; return (_a = currencies === null || currencies === void 0 ? void 0 : currencies.filter(function (currency) { var _a; return (_a = currency === null || currency === void 0 ? void 0 : currency.isToken) !== null && _a !== void 0 ? _a : false; })) !== null && _a !== void 0 ? _a : []; }, [currencies]); + var tokenBalances = useTokenBalances(account, tokens); + var containsETH = useMemo(function () { var _a; return (_a = currencies === null || currencies === void 0 ? void 0 : currencies.some(function (currency) { return currency === null || currency === void 0 ? void 0 : currency.isNative; })) !== null && _a !== void 0 ? _a : false; }, [currencies]); + var ethBalance = useNativeCurrencyBalances(useMemo(function () { return (containsETH ? [account] : []); }, [containsETH, account])); + return useMemo(function () { + var _a; + return (_a = currencies === null || currencies === void 0 ? void 0 : currencies.map(function (currency) { + if (!account || !currency) + return undefined; + if (currency.isToken) + return tokenBalances[currency.address]; + if (currency.isNative) + return ethBalance[account]; + return undefined; + })) !== null && _a !== void 0 ? _a : []; + }, [account, currencies, ethBalance, tokenBalances]); +} +function useCurrencyBalance(account, currency) { + return useCurrencyBalances(account, useMemo(function () { return [currency]; }, [currency]))[0]; +} + +var alwaysTrue = function () { return true; }; +/** Creates a filter function that filters tokens that do not match the query. */ +function getTokenFilter(query) { + var searchingAddress = isAddress(query); + if (searchingAddress) { + var address_1 = searchingAddress.toLowerCase(); + return function (t) { return 'address' in t && address_1 === t.address.toLowerCase(); }; + } + var queryParts = query + .toLowerCase() + .split(/\s+/) + .filter(function (s) { return s.length > 0; }); + if (queryParts.length === 0) + return alwaysTrue; + var match = function (s) { + var parts = s + .toLowerCase() + .split(/\s+/) + .filter(function (s) { return s.length > 0; }); + return queryParts.every(function (p) { return p.length === 0 || parts.some(function (sp) { return sp.startsWith(p) || sp.endsWith(p); }); }); + }; + return function (_a) { + var name = _a.name, symbol = _a.symbol; + return Boolean((symbol && match(symbol)) || (name && match(name))); + }; +} + +/** Sorts currency amounts (descending). */ +function balanceComparator(a, b) { + if (a && b) { + return a.greaterThan(b) ? -1 : a.equalTo(b) ? 0 : 1; + } + else if (a === null || a === void 0 ? void 0 : a.greaterThan('0')) { + return -1; + } + else if (b === null || b === void 0 ? void 0 : b.greaterThan('0')) { + return 1; + } + return 0; +} +/** Sorts tokens by currency amount (descending), then symbol (ascending). */ +function tokenComparator(balances, a, b) { + // Sorts by balances + var balanceComparison = balanceComparator(balances[a.address], balances[b.address]); + if (balanceComparison !== 0) + return balanceComparison; + // Sorts by symbol + if (a.symbol && b.symbol) { + return a.symbol.toLowerCase() < b.symbol.toLowerCase() ? -1 : 1; + } + return -1; +} +/** Sorts tokens by query, giving precedence to exact matches and partial matches. */ +function useSortTokensByQuery(query, tokens) { + return useMemo(function () { + if (!tokens) { + return []; + } + var matches = query + .toLowerCase() + .split(/\s+/) + .filter(function (s) { return s.length > 0; }); + if (matches.length > 1) { + return tokens; + } + var exactMatches = []; + var symbolSubtrings = []; + var rest = []; + // sort tokens by exact match -> subtring on symbol match -> rest + tokens.map(function (token) { + var _a, _b; + if (((_a = token.symbol) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === matches[0]) { + return exactMatches.push(token); + } + else if ((_b = token.symbol) === null || _b === void 0 ? void 0 : _b.toLowerCase().startsWith(query.toLowerCase().trim())) { + return symbolSubtrings.push(token); + } + else { + return rest.push(token); + } + }); + return __spreadArray(__spreadArray(__spreadArray([], __read(exactMatches), false), __read(symbolSubtrings), false), __read(rest), false); + }, [tokens, query]); +} + +/** + * Token instances created from token info on a token list. + */ +var WrappedTokenInfo = /** @class */ (function () { + function WrappedTokenInfo(tokenInfo, list) { + this.isNative = false; + this.isToken = true; + this._checksummedAddress = null; + this._tags = null; + this.tokenInfo = tokenInfo; + this.list = list; + } + Object.defineProperty(WrappedTokenInfo.prototype, "address", { + get: function () { + if (this._checksummedAddress) + return this._checksummedAddress; + var checksummedAddress = isAddress(this.tokenInfo.address); + if (!checksummedAddress) + throw new Error("Invalid token address: " + this.tokenInfo.address); + return (this._checksummedAddress = checksummedAddress); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(WrappedTokenInfo.prototype, "chainId", { + get: function () { + return this.tokenInfo.chainId; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(WrappedTokenInfo.prototype, "decimals", { + get: function () { + return this.tokenInfo.decimals; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(WrappedTokenInfo.prototype, "name", { + get: function () { + return this.tokenInfo.name; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(WrappedTokenInfo.prototype, "symbol", { + get: function () { + return this.tokenInfo.symbol; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(WrappedTokenInfo.prototype, "logoURI", { + get: function () { + return this.tokenInfo.logoURI; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(WrappedTokenInfo.prototype, "tags", { + get: function () { + var _a; + if (this._tags !== null) + return this._tags; + if (!this.tokenInfo.tags) + return (this._tags = []); + var listTags = (_a = this.list) === null || _a === void 0 ? void 0 : _a.tags; + if (!listTags) + return (this._tags = []); + return (this._tags = this.tokenInfo.tags.map(function (tagId) { + return __assign(__assign({}, listTags[tagId]), { id: tagId }); + })); + }, + enumerable: false, + configurable: true + }); + WrappedTokenInfo.prototype.equals = function (other) { + return other.chainId === this.chainId && other.isToken && other.address.toLowerCase() === this.address.toLowerCase(); + }; + WrappedTokenInfo.prototype.sortsBefore = function (other) { + if (this.equals(other)) + throw new Error('Addresses should not be equal'); + return this.address.toLowerCase() < other.address.toLowerCase(); + }; + Object.defineProperty(WrappedTokenInfo.prototype, "wrapped", { + get: function () { + return this; + }, + enumerable: false, + configurable: true + }); + return WrappedTokenInfo; +}()); + +var mapCache = typeof WeakMap !== 'undefined' ? new WeakMap() : null; +function tokensToChainTokenMap(tokens) { + var cached = mapCache === null || mapCache === void 0 ? void 0 : mapCache.get(tokens); + if (cached) + return cached; + var _a = __read(Array.isArray(tokens) ? [undefined, tokens] : [tokens, tokens.tokens], 2), list = _a[0], infos = _a[1]; + var map = infos.reduce(function (map, info) { + var _a; + var token = new WrappedTokenInfo(info, list); + if (((_a = map[token.chainId]) === null || _a === void 0 ? void 0 : _a[token.address]) !== undefined) { + console.warn("Duplicate token skipped: " + token.address); + return map; + } + if (!map[token.chainId]) { + map[token.chainId] = {}; + } + map[token.chainId][token.address] = { token: token, list: list }; + return map; + }, {}); + mapCache === null || mapCache === void 0 ? void 0 : mapCache.set(tokens, map); + return map; +} + +atom({}); + +// parse a name or symbol from a token response +var BYTES32_REGEX = /^0x[a-fA-F0-9]{64}$/; +function parseStringOrBytes32(str, bytes32, defaultValue) { + return str && str.length > 0 + ? str + : // need to check for proper bytes string and valid terminator + bytes32 && BYTES32_REGEX.test(bytes32) && arrayify(bytes32)[31] === 0 + ? parseBytes32String(bytes32) + : defaultValue; +} +/** + * Returns a Token from the tokenAddress. + * Returns null if token is loading or null was passed. + * Returns undefined if tokenAddress is invalid or token does not exist. + */ +function useTokenFromMap(tokens, tokenAddress) { + var chainId = useActiveWeb3React().chainId; + var address = isAddress(tokenAddress); + var tokenContract = useTokenContract(address ? address : undefined, false); + var tokenContractBytes32 = useBytes32TokenContract(address ? address : undefined, false); + var token = address ? tokens[address] : undefined; + var tokenName = useSingleCallResult(token ? undefined : tokenContract, 'name', undefined, NEVER_RELOAD); + var tokenNameBytes32 = useSingleCallResult(token ? undefined : tokenContractBytes32, 'name', undefined, NEVER_RELOAD); + var symbol = useSingleCallResult(token ? undefined : tokenContract, 'symbol', undefined, NEVER_RELOAD); + var symbolBytes32 = useSingleCallResult(token ? undefined : tokenContractBytes32, 'symbol', undefined, NEVER_RELOAD); + var decimals = useSingleCallResult(token ? undefined : tokenContract, 'decimals', undefined, NEVER_RELOAD); + return useMemo(function () { + var _a, _b, _c, _d; + if (token) + return token; + if (tokenAddress === null) + return null; + if (!chainId || !address) + return undefined; + if (decimals.loading || symbol.loading || tokenName.loading) + return null; + if (decimals.result) { + return new Token(chainId, address, decimals.result[0], parseStringOrBytes32((_a = symbol.result) === null || _a === void 0 ? void 0 : _a[0], (_b = symbolBytes32.result) === null || _b === void 0 ? void 0 : _b[0], 'UNKNOWN'), parseStringOrBytes32((_c = tokenName.result) === null || _c === void 0 ? void 0 : _c[0], (_d = tokenNameBytes32.result) === null || _d === void 0 ? void 0 : _d[0], 'Unknown Token')); + } + return undefined; + }, [ + address, + chainId, + decimals.loading, + decimals.result, + symbol.loading, + symbol.result, + symbolBytes32.result, + token, + tokenAddress, + tokenName.loading, + tokenName.result, + tokenNameBytes32.result, + ]); +} +/** + * Returns a Currency from the currencyId. + * Returns null if currency is loading or null was passed. + * Returns undefined if currencyId is invalid or token does not exist. + */ +function useCurrencyFromMap(tokens, currencyId) { + var _a; + var nativeCurrency = useNativeCurrency(); + var isNative = Boolean(nativeCurrency && (currencyId === null || currencyId === void 0 ? void 0 : currencyId.toUpperCase()) === 'ETH'); + var token = useTokenFromMap(tokens, isNative ? undefined : currencyId); + if (currencyId === null || currencyId === undefined) + return currencyId; + // this case so we use our builtin wrapped token instead of wrapped tokens on token lists + var wrappedNative = nativeCurrency === null || nativeCurrency === void 0 ? void 0 : nativeCurrency.wrapped; + if (((_a = wrappedNative === null || wrappedNative === void 0 ? void 0 : wrappedNative.address) === null || _a === void 0 ? void 0 : _a.toUpperCase()) === (currencyId === null || currencyId === void 0 ? void 0 : currencyId.toUpperCase())) + return wrappedNative; + return isNative ? nativeCurrency : token; +} + +var DEFAULT_LIST_PRIORITIES = DEFAULT_LIST_OF_LISTS.reduce(function (memo, listUrl, index) { + memo[listUrl] = index + 1; + return memo; +}, {}); +// use ordering of default list of lists to assign priority +function sortByListPriority(urlA, urlB) { + if (DEFAULT_LIST_PRIORITIES[urlA] && DEFAULT_LIST_PRIORITIES[urlB]) { + return DEFAULT_LIST_PRIORITIES[urlA] - DEFAULT_LIST_PRIORITIES[urlB]; + } + return 0; +} + +var name$1 = "Broken Token List"; +var timestamp$1 = "2021-01-05T20:47:02.923Z"; +var version$1 = { + major: 1, + minor: 0, + patch: 0 +}; +var tags$1 = { +}; +var logoURI$1 = "ipfs://QmNa8mQkrNKp1WEEeGjFezDmDeodkWRevGFN8JCV7b4Xir"; +var keywords$1 = [ + "uniswap", + "broken" +]; +var tokens$1 = [ + { + name: "UNI HODL", + address: "0x4bf5dc91E2555449293D7824028Eb8Fe5879B689", + symbol: "UniH", + decimals: 18, + chainId: 1, + logoURI: "" + } +]; +var BROKEN_LIST = { + name: name$1, + timestamp: timestamp$1, + version: version$1, + tags: tags$1, + logoURI: logoURI$1, + keywords: keywords$1, + tokens: tokens$1 +}; + +var name = "Unsupported Tokens"; +var timestamp = "2021-01-05T20:47:02.923Z"; +var version = { + major: 1, + minor: 0, + patch: 0 +}; +var tags = { +}; +var logoURI = "ipfs://QmNa8mQkrNKp1WEEeGjFezDmDeodkWRevGFN8JCV7b4Xir"; +var keywords = [ + "uniswap", + "unsupported" +]; +var tokens = [ + { + name: "Gold Tether", + address: "0x4922a015c4407F87432B179bb209e125432E4a2A", + symbol: "XAUt", + decimals: 6, + chainId: 1, + logoURI: "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4922a015c4407F87432B179bb209e125432E4a2A/logo.png" + }, + { + name: "Grump Cat", + address: "0x93B2FfF814FCaEFFB01406e80B4Ecd89Ca6A021b", + symbol: "GRUMPY", + decimals: 9, + chainId: 1, + logoURI: "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4922a015c4407F87432B179bb209e125432E4a2A/logo.png" + }, + { + name: "apeUSD-UMA Synthetic USD (Dec 2021)", + address: "0xfA5e27893aee4805283D86e4283Da64F8c72dd56", + symbol: "apeUSD-UMA-DEC21", + decimals: 18, + chainId: 1, + logoURI: "" + }, + { + chainId: 1, + address: "0xc6b11850241c5127eab73af4b6c68bc267cbbff4", + name: "oWETHp Put 360 DEC2520", + symbol: "oWETH-360P-12/25/20", + decimals: 7 + }, + { + chainId: 1, + name: "oYFIp Put 25000 OCT0220", + address: "0x452b421be5b30f0c6ad8c3f03c06bdaab4f5c56c", + symbol: "oYFI-25000P-10/02/20", + decimals: 7 + }, + { + chainId: 1, + name: "oWETHp Put 360 OCT3020", + address: "0x0578779e746d7186253a36cf651ea786acfcf087", + symbol: "oWETH-360P-10/30/20", + decimals: 7 + }, + { + chainId: 1, + name: "ETHc Call 500 OCT3020", + address: "0xf9aba2e43fb19184408ea3b572a0fd672946f87b", + symbol: "oETH-500C-10/30/20", + decimals: 6 + }, + { + chainId: 1, + name: "oBALp Put 22 OCT0220", + address: "0xdb0991dfc7e828b5a2837dc82d68e16490562c8d", + symbol: "oBAL-22P-10/02/20", + decimals: 7 + }, + { + chainId: 1, + name: "oCOMPp Put 150 SEP2520", + address: "0xe951ebe6b4420ab3f4844cf36dedd263d095b416", + symbol: "oCOMP-150P-09/25/20", + decimals: 7 + }, + { + chainId: 1, + name: "oCRVp Put 3 SEP252020", + address: "0x9215bd49b59748419eac6bad9dbe247df06ebdb9", + symbol: "oCRV-3P-09/25/20", + decimals: 7 + }, + { + chainId: 1, + name: "oETHp Put 180 SEP2520", + address: "0xE3A2c34Fa2F59ffa95C4ACd1E5663633d45Bc3AD", + symbol: "oETH-180P-09/25/20", + decimals: 7 + }, + { + chainId: 1, + name: "oETHc Call 400 SEP2520", + address: "0x05977EBC26825C0CD6097E0Ad7204721516711Eb", + symbol: "oETH-400C-09/25/20", + decimals: 7 + }, + { + chainId: 1, + name: "oWETHp Put 380 SEP1820", + address: "0x31f88266301b08631f9f0e33fd5c43c2a5d1e5b2", + symbol: "oWETH-380P-09/18/20", + decimals: 7 + }, + { + chainId: 1, + name: "oYFIp Put 8500 SEP1820", + address: "0xd1cec2f67fdc4c60e0963515dfc3343f31e32e47", + symbol: "oYFI-8500P-09/18/20", + decimals: 7 + }, + { + chainId: 1, + name: "oWETHp Put 370 SEP1120", + address: "0x15844029b2c2bf24506e9937739a9a912f1e4354", + symbol: "oWETH-370P-09/11/20", + decimals: 7 + }, + { + chainId: 1, + name: "oWETHp Put 400 SEP0420", + address: "0x5562c33c383f6386be4f6dcdbd35a3a99bbcfde6", + symbol: "oWETH-400P-09/04/20", + decimals: 7 + }, + { + chainId: 1, + name: "oETHp Put 200 AUG2820", + address: "0x3CBFC1397deF0602c2d211c70A1c0c38CEDB5448", + symbol: "oWETH-400P-09/04/20", + decimals: 7 + }, + { + chainId: 1, + name: "Opyn cDai Insurance", + symbol: "ocDai", + address: "0x98cc3bd6af1880fcfda17ac477b2f612980e5e33", + decimals: 8 + }, + { + chainId: 1, + name: "Opyn cUSDC Insurance", + symbol: "ocUSDC", + address: "0x8ED9f862363fFdFD3a07546e618214b6D59F03d4", + decimals: 8 + }, + { + chainId: 1, + address: "0x176C674Ee533C6139B0dc8b458D72A93dCB3e705", + symbol: "iAAVE", + name: "Synth Inverse Aave", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iAAVE.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x8A8079c7149B8A1611e5C5d978DCA3bE16545F83", + symbol: "iADA", + name: "Synth Inverse Cardano", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iADA.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0xAFD870F32CE54EfdBF677466B612bf8ad164454B", + symbol: "iBNB", + name: "Synth Inverse Binance Coin", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iBNB.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0xD6014EA05BDe904448B743833dDF07c3C7837481", + symbol: "iBTC", + name: "Synth Inverse Bitcoin", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iBTC.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x336213e1DDFC69f4701Fc3F86F4ef4A160c1159d", + symbol: "iCEX", + name: "Synth Inverse Centralised Exchange Index", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iCEX.svg", + tags: [ + "index", + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x6345728B1ccE16E6f8C509950b5c84FFF88530d9", + symbol: "iCOMP", + name: "Synth Inverse Compound", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iCOMP.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0xCB98f42221b2C251A4E74A1609722eE09f0cc08E", + symbol: "iDASH", + name: "Synth Inverse Dash", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDASH.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x14d10003807AC60d07BB0ba82cAeaC8d2087c157", + symbol: "iDEFI", + name: "Synth Inverse DeFi Index", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDEFI.svg", + tags: [ + "index", + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x46a97629C9C1F58De6EC18C7F536e7E6d6A6ecDe", + symbol: "iDOT", + name: "Synth Inverse Polkadot", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDOT.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0xF4EebDD0704021eF2a6Bbe993fdf93030Cd784b4", + symbol: "iEOS", + name: "Synth Inverse EOS", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iEOS.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0xd50c1746D835d2770dDA3703B69187bFfeB14126", + symbol: "iETC", + name: "Synth Inverse Ethereum Classic", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iETC.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0xA9859874e1743A32409f75bB11549892138BBA1E", + symbol: "iETH", + name: "Synth Inverse Ether", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iETH.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x2d7aC061fc3db53c39fe1607fB8cec1B2C162B01", + symbol: "iLINK", + name: "Synth Inverse Chainlink", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iLINK.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x79da1431150C9b82D2E5dfc1C68B33216846851e", + symbol: "iLTC", + name: "Synth Inverse Litecoin", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iLTC.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0xA5a5DF41883Cdc00c4cCC6E8097130535399d9a3", + symbol: "iOIL", + name: "Synth Inverse Perpetual Oil Futures", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iOIL.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x0fEd38108bdb8e62ef7b5680E8E0726E2F29e0De", + symbol: "iREN", + name: "Synth Inverse Ren", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iREN.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0xC5807183a9661A533CB08CbC297594a0B864dc12", + symbol: "iTRX", + name: "Synth Inverse TRON", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iTRX.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x36A00FF9072570eF4B9292117850B8FE08d96cce", + symbol: "iUNI", + name: "Synth Inverse Uniswap", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iUNI.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x4AdF728E2Df4945082cDD6053869f51278fae196", + symbol: "iXMR", + name: "Synth Inverse Monero", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXMR.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x27269b3e45A4D3E79A3D6BFeE0C8fB13d0D711A6", + symbol: "iXRP", + name: "Synth Inverse Ripple", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXRP.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x8deef89058090ac5655A99EEB451a4f9183D1678", + symbol: "iXTZ", + name: "Synth Inverse Tezos", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXTZ.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0x592244301CeA952d6daB2fdC1fE6bd9E53917306", + symbol: "iYFI", + name: "Synth Inverse yearn.finance", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iYFI.svg", + tags: [ + "inverse", + "synth" + ] + }, + { + chainId: 1, + address: "0xcD39b5434a0A92cf47D1F567a7dF84bE356814F0", + symbol: "s1INCH", + name: "Synth 1inch", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/s1INCH.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x7537AAe01f3B218DAE75e10d952473823F961B87", + symbol: "sAAPL", + name: "Synth Apple", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAAPL.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xd2dF355C19471c8bd7D8A3aa27Ff4e26A21b4076", + symbol: "sAAVE", + name: "Synth Aave", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAAVE.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xe36E2D3c7c34281FA3bC737950a68571736880A1", + symbol: "sADA", + name: "Synth Cardano", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sADA.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x9CF7E61853ea30A41b02169391b393B901eac457", + symbol: "sAMZN", + name: "Synth Amazon", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAMZN.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xF48e200EAF9906362BB1442fca31e0835773b8B4", + symbol: "sAUD", + name: "Synth Australian Dollars", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAUD.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x617aeCB6137B5108D1E7D4918e3725C8cEbdB848", + symbol: "sBNB", + name: "Synth Binance Coin", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sBNB.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xfE18be6b3Bd88A2D2A7f928d00292E7a9963CfC6", + symbol: "sBTC", + name: "Synth Bitcoin", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sBTC.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xeABACD844A196D7Faf3CE596edeBF9900341B420", + symbol: "sCEX", + name: "Synth Centralised Exchange Index", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCEX.svg", + tags: [ + "index", + "synth" + ] + }, + { + chainId: 1, + address: "0x0F83287FF768D1c1e17a42F44d644D7F22e8ee1d", + symbol: "sCHF", + name: "Synth Swiss Franc", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCHF.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x9EeF4CA7aB9fa8bc0650127341C2d3F707a40f8A", + symbol: "sCOIN", + name: "Synth Coinbase", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCOIN.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xEb029507d3e043DD6C87F2917C4E82B902c35618", + symbol: "sCOMP", + name: "Synth Compound", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCOMP.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xD38aEb759891882e78E957c80656572503D8c1B1", + symbol: "sCRV", + name: "Synth Curve DAO Token", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCRV.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xfE33ae95A9f0DA8A845aF33516EDc240DCD711d6", + symbol: "sDASH", + name: "Synth Dash", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDASH.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xe1aFe1Fd76Fd88f78cBf599ea1846231B8bA3B6B", + symbol: "sDEFI", + name: "Synth DeFi Index", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDEFI.svg", + tags: [ + "index", + "synth" + ] + }, + { + chainId: 1, + address: "0x1715AC0743102BF5Cd58EfBB6Cf2dC2685d967b6", + symbol: "sDOT", + name: "Synth Polkadot", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDOT.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x88C8Cf3A212c0369698D13FE98Fcb76620389841", + symbol: "sEOS", + name: "Synth EOS", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sEOS.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x22602469d704BfFb0936c7A7cfcD18f7aA269375", + symbol: "sETC", + name: "Synth Ethereum Classic", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sETC.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x5e74C9036fb86BD7eCdcb084a0673EFc32eA31cb", + symbol: "sETH", + name: "Synth Ether", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sETH.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xD71eCFF9342A5Ced620049e616c5035F1dB98620", + symbol: "sEUR", + name: "Synth Euros", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sEUR.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xf50B5e535F62a56A9BD2d8e2434204E726c027Fa", + symbol: "sFB", + name: "Synth Facebook", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sFB.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x23348160D7f5aca21195dF2b70f28Fce2B0be9fC", + symbol: "sFTSE", + name: "Synth FTSE 100 Index", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sFTSE.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x97fe22E7341a0Cd8Db6F6C021A24Dc8f4DAD855F", + symbol: "sGBP", + name: "Synth Pound Sterling", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sGBP.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xC63B8ECCE56aB9C46184eC6aB85e4771fEa4c8AD", + symbol: "sGOOG", + name: "Synth Alphabet", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sGOOG.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xF6b1C627e95BFc3c1b4c9B825a032Ff0fBf3e07d", + symbol: "sJPY", + name: "Synth Japanese Yen", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sJPY.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x269895a3dF4D73b077Fc823dD6dA1B95f72Aaf9B", + symbol: "sKRW", + name: "Synth South Korean Won", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sKRW.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xbBC455cb4F1B9e4bFC4B73970d360c8f032EfEE6", + symbol: "sLINK", + name: "Synth Chainlink", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sLINK.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xC14103C2141E842e228FBaC594579e798616ce7A", + symbol: "sLTC", + name: "Synth Litecoin", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sLTC.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x745a824D6aBBD236AA794b5530062778A6Ad7523", + symbol: "sMSFT", + name: "Synth Microsoft", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sMSFT.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x5A7E3c07604EB515C16b36cd51906a65f021F609", + symbol: "sNFLX", + name: "Synth Netflix", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sNFLX.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x757de3ac6B830a931eF178C6634c5C551773155c", + symbol: "sNIKKEI", + name: "Synth Nikkei 225 Index", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sNIKKEI.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x6d16cF3EC5F763d4d99cB0B0b110eefD93B11B56", + symbol: "sOIL", + name: "Synth Perpetual Oil Futures", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sOIL.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xD31533E8d0f3DF62060e94B3F1318137bB6E3525", + symbol: "sREN", + name: "Synth Ren", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sREN.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x0352557B007A4Aae1511C114409b932F06F9E2f4", + symbol: "sRUNE", + name: "Synth THORChain", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sRUNE.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xf2E08356588EC5cd9E437552Da87C0076b4970B0", + symbol: "sTRX", + name: "Synth TRON", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sTRX.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x918dA91Ccbc32B7a6A0cc4eCd5987bbab6E31e6D", + symbol: "sTSLA", + name: "Synth Tesla", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sTSLA.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x30635297E450b930f8693297eBa160D9e6c8eBcf", + symbol: "sUNI", + name: "Synth Uniswap", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sUNI.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x6A22e5e94388464181578Aa7A6B869e00fE27846", + symbol: "sXAG", + name: "Synth Silver Ounce", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXAG.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x261EfCdD24CeA98652B9700800a13DfBca4103fF", + symbol: "sXAU", + name: "Synth Gold Ounce", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXAU.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x5299d6F7472DCc137D7f3C4BcfBBB514BaBF341A", + symbol: "sXMR", + name: "Synth Monero", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXMR.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0xa2B0fDe6D710e201d0d608e924A484d1A5fEd57c", + symbol: "sXRP", + name: "Synth Ripple", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXRP.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x2e59005c5c0f0a4D77CcA82653d48b46322EE5Cd", + symbol: "sXTZ", + name: "Synth Tezos", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXTZ.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x992058B7DB08F9734d84485bfbC243C4ee6954A7", + symbol: "sYFI", + name: "Synth yearn.finance", + decimals: 18, + logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sYFI.svg", + tags: [ + "synth" + ] + }, + { + chainId: 1, + address: "0x81ab848898b5ffD3354dbbEfb333D5D183eEDcB5", + name: "yUSD Synthetic Expiring 1 September 2020", + symbol: "yUSDSEP20", + decimals: 18 + }, + { + chainId: 1, + address: "0xB2FdD60AD80ca7bA89B9BAb3b5336c2601C020b4", + name: "yUSD Synthetic Expiring 1 October 2020", + symbol: "yUSDOCT20", + decimals: 18 + }, + { + chainId: 1, + address: "0x208d174775dc39fe18b1b374972f77ddec6c0f73", + name: "uUSDrBTC Synthetic Expiring 1 Oct 2020", + symbol: "uUSDrBTC-OCT", + decimals: 18 + }, + { + chainId: 1, + address: "0xf06ddacf71e2992e2122a1a0168c6967afdf63ce", + name: "uUSDrBTC Synthetic Expiring 31 Dec 2020", + symbol: "uUSDrBTC-DEC", + decimals: 18 + }, + { + chainId: 1, + address: "0xd16c79c8a39d44b2f3eb45d2019cd6a42b03e2a9", + name: "uUSDwETH Synthetic Expiring 31 Dec 2020", + symbol: "uUSDwETH-DEC", + decimals: 18 + }, + { + chainId: 1, + address: "0x3d995510f8d82c2ea341845932b5ddde0bead9a3", + name: "uGAS-JAN21 Token Expiring 31 Jan 2021", + symbol: "uGAS-JAN21", + decimals: 18 + }, + { + chainId: 1, + address: "0x90f802c7e8fb5d40b0de583e34c065a3bd2020d8", + name: "YD-ETH-MAR21 Token Expiring 31 Mar 2021", + symbol: "YD-ETH-MAR21", + decimals: 18 + }, + { + chainId: 1, + address: "0x002f0b1a71c5730cf2f4da1970a889207bdb6d0d", + name: "YD-BTC-MAR21 Token Expiring 31 Mar 2021", + symbol: "YD-BTC-MAR21", + decimals: 18 + }, + { + chainId: 1, + address: "0x1062ad0e59fa67fa0b27369113098cc941dd0d5f", + name: "UMA 35 Call Expirying 30 Apr 2021", + symbol: "UMAc35-0421", + decimals: 18 + }, + { + chainId: 1, + address: "0xf93340b1a3adf7eedcaec25fae8171d4b736e89f", + name: "pxUSD Synthetic USD Expiring 1 April 2021", + symbol: "pxUSD_MAR2021", + decimals: 18 + }, + { + chainId: 1, + address: "0x84bd083b1c8bf929f39c98bc17cf518f40154f58", + name: "Mario Cash Synthetic Token Expiring 15 January 2021", + symbol: "Mario Cash-JAN-2021", + decimals: 18 + }, + { + chainId: 1, + address: "0x81fab276aec924fbde190cf379783526d413cf70", + name: "uGAS-FEB21 Token Expiring 28 Feb 2021", + symbol: "uGAS-FEB21", + decimals: 18 + }, + { + chainId: 1, + address: "0x4e110603e70b0b5f1c403ee543b37e1f1244cf28", + name: "uGAS-MAR21 Token Expiring 31 Mar 2021", + symbol: "uGAS-MAR21", + decimals: 18 + }, + { + chainId: 1, + address: "0xcf55a7f92d5e0c6683debbc1fc20c0a6e056df13", + name: "Zelda Elastic Cash", + symbol: "Zelda Elastic Cash", + decimals: 18 + }, + { + chainId: 1, + address: "0x654eebac62240e6c56bab5f6adf7cfa74a894510", + name: "Zelda Spring Nuts Cash", + symbol: "Zelda Spring Nuts Cash", + decimals: 18 + }, + { + chainId: 1, + address: "0xa48920cc1ad85d8ea13af5d7be180c0338c306dd", + name: "Zelda Summer Nuts Cash", + symbol: "Zelda Summer Nuts Cash", + decimals: 18 + }, + { + chainId: 1, + address: "0x249a198d59b57fda5dda90630febc86fd8c7594c", + name: "Zelda Whirlwind Cash", + symbol: "Zelda Whirlwind Cash", + decimals: 18 + }, + { + chainId: 1, + address: "0x5ed1406873c9eb91f6f9a67ac4e152387c1132e7", + name: "Zelda Reinforced Cash", + symbol: "Zelda Reinforced Cash", + decimals: 18 + }, + { + chainId: 1, + address: "0x8104c9f13118320eefe5fbea8a44d600b85981ef", + name: "Mini Mario Summer Cash", + symbol: "Mini Mario Summer Cash", + decimals: 18 + }, + { + chainId: 1, + address: "0x69746c719e59674b147df25f50e7cfa0673cb625", + name: "Mini Mario Spring Cash", + symbol: "Mini Mario Spring Cash", + decimals: 18 + }, + { + chainId: 1, + address: "0x6b1257641d18791141f025eab36fb567c4b564ff", + name: "Bitcoin Dominance Token 31 March 2021", + symbol: "BTCDOM-MAR2021", + decimals: 18 + }, + { + chainId: 1, + address: "0x4e83b6287588a96321b2661c5e041845ff7814af", + name: "Altcoin Dominance Token 31 March 2021", + symbol: "ALTDOM-MAR2021", + decimals: 18 + }, + { + chainId: 1, + address: "0x59fec83ec709c893aedd1a144cf1828eb04127cd", + name: "pxGOLD Synthetic GOLD Expiring 31 May 2021", + symbol: "pxGOLD_MAY2021", + decimals: 18 + }, + { + chainId: 1, + address: "0x89337BFb7938804c3776C9FB921EccAf5ab76758", + name: "Compound Annualized Rate Future Expiring 28 March 2021", + symbol: "CAR-USDC-MAR21", + decimals: 18 + }, + { + chainId: 1, + address: "0xec58d3aefc9aaa2e0036fa65f70d569f49d9d1ed", + name: "uSTONKS Index Token April 2021", + symbol: "uSTONKS_APR21", + decimals: 6 + }, + { + chainId: 1, + address: "0xa6B9d7E3d76cF23549293Fb22c488E0Ea591A44e", + name: "uGAS-JUN21 Token Expiring 30 Jun 2021", + symbol: "uGAS-JUN21", + decimals: 18 + }, + { + chainId: 1, + address: "0xe813b65da6c38a04591aed3f082d32db7d53c382", + name: "Yield Dollar [WETH Dec 2021]", + symbol: "YD-ETH-DEC21", + decimals: 18 + }, + { + chainId: 1, + address: "0x4b606e9eb2228c70f44453afe5a73e1fea258ce1", + name: "pxUSD Synthetic USD Expiring 31 Mar 2022", + symbol: "pxUSD_MAR2022", + decimals: 18 + }, + { + chainId: 1, + address: "0x5247c0db4044fb6f97f32c7e1b48758019a5a912", + name: "pxGOLD Synthetic Gold Expiring 31 Mar 2022", + symbol: "pxGOLD_MAR2022", + decimals: 18 + }, + { + chainId: 1, + address: "0x56fb1acaff95c0b6ebcd17c8361a63d98b1a5a11", + name: "uForex CNYUSD Synthetic Token April 2021", + symbol: "uCNYUSD-APR", + decimals: 6 + }, + { + chainId: 1, + address: "0xd49fa405dce086c65d66ca1ca41f8e98583812b4", + name: "uForex EURUSD Synthetic Token April 2021", + symbol: "uEURUSD-APR", + decimals: 6 + }, + { + chainId: 1, + address: "0x29dddacba3b231ee8d673dd0f0fa759ea145561b", + name: "DEFI_PULSE_TOTAL_TVL Synthetic Token Expiring 15 April 2021", + symbol: "TVL_ALL_APRIL15", + decimals: 6 + }, + { + chainId: 1, + address: "0xcbe430927370e95b4b10cfc702c6017ec7abefc3", + name: "Yield Dollar [WETH Jun 2021]", + symbol: "YD-ETH-JUN21", + decimals: 18 + }, + { + chainId: 1, + address: "0x4b7fb448df91c8ed973494f8c8c4f12daf3a8521", + name: "Yield Dollar [renBTC Jun 2021]", + symbol: "YD-BTC-JUN21", + decimals: 8 + }, + { + chainId: 1, + address: "0x3108c33b6fb38efedaefd8b5f7ca01d5f5c7372d", + name: "Yield Dollar UMA 21", + symbol: "yUMA21", + decimals: 18 + }, + { + chainId: 1, + address: "0x0cae9e4d663793c2a2A0b211c1Cf4bBca2B9cAa7", + name: "Mirrored Amazon", + symbol: "MAMZN", + decimals: 18 + }, + { + chainId: 1, + address: "0x31c63146a635EB7465e5853020b39713AC356991", + name: "M US Oil", + symbol: "MUSO", + decimals: 18 + }, + { + chainId: 1, + address: "0x59A921Db27Dd6d4d974745B7FfC5c33932653442", + name: "M Google", + symbol: "MGOOGL", + decimals: 18 + }, + { + chainId: 1, + address: "0xf72FCd9DCF0190923Fadd44811E240Ef4533fc86", + name: "Mirrored ProShares", + symbol: "MVIXY", + decimals: 18 + }, + { + chainId: 1, + address: "0x56aA298a19C93c6801FDde870fA63EF75Cc0aF72", + name: "Mirrored Alibaba", + symbol: "MBABA", + decimals: 18 + }, + { + chainId: 1, + address: "0x0e99cC0535BB6251F6679Fa6E65d6d3b430e840B", + name: "Mirrored Facebook", + symbol: "MFB", + decimals: 18 + }, + { + chainId: 1, + address: "0x13B02c8dE71680e71F0820c996E4bE43c2F57d15", + name: "Mirrored Invesco QQ", + symbol: "MQQQ", + decimals: 18 + }, + { + chainId: 1, + address: "0x41BbEDd7286dAab5910a1f15d12CBda839852BD7", + name: "Mirrored Microsoft", + symbol: "MMSFT", + decimals: 18 + }, + { + chainId: 1, + address: "0x9d1555d8cB3C846Bb4f7D5B1B1080872c3166676", + name: "Mirrored iShares Si", + symbol: "MSLV", + decimals: 18 + }, + { + chainId: 1, + address: "0x21cA39943E91d704678F5D00b6616650F066fD63", + name: "Mirrored Tesla", + symbol: "MTSLA", + decimals: 18 + }, + { + chainId: 1, + address: "0xe82bbB62fA81d0701643d1675FB50ec52fD3Df92", + name: "DYDX Token", + symbol: "DYDX", + decimals: 18 + }, + { + chainId: 10, + address: "0xE405de8F52ba7559f9df3C368500B6E6ae6Cee49", + name: "sETH", + symbol: "Synth Ether", + decimals: 18 + }, + { + chainId: 10, + address: "0x298B9B95708152ff6968aafd889c6586e9169f1D", + name: "sBTC", + symbol: "Synth Bitcoin", + decimals: 18 + }, + { + chainId: 10, + address: "0xc5Db22719A06418028A40A9B5E9A7c02959D0d08", + name: "sLINK", + symbol: "Synth Link", + decimals: 18 + }, + { + chainId: 1, + address: "0x6B60eE11b73230045cF9095E6e43AE9Ea638e172", + name: "Shatner", + symbol: "SHAT", + decimals: 18 + }, + { + chainId: 1, + address: "0x7277a44D1325D81Ac58893002a1B40a41bea43fe", + name: "FAANG Index", + symbol: "FAANG", + decimals: 18 + }, + { + chainId: 1, + address: "0x76175599887730786bdA1545D0D7AcE8737fEBB1", + name: "ENS DAO", + symbol: "ENS", + decimals: 18 + }, + { + chainId: 1, + address: "0xa82AA729AE2F0d78e961D66db53949e27a9E866d", + name: "BMEX", + symbol: "BMEX", + decimals: 18 + } +]; +var UNSUPPORTED_TOKEN_LIST = { + name: name, + timestamp: timestamp, + version: version, + tags: tags, + logoURI: logoURI, + keywords: keywords, + tokens: tokens +}; + +function useAllLists() { + return useAppSelector(function (state) { return state.lists.byUrl; }); +} +/** + * Combine the tokens in map2 with the tokens on map1, where tokens on map1 take precedence + * @param map1 the base token map + * @param map2 the map of additioanl tokens to add to the base map + */ +function combineMaps(map1, map2) { + var chainIds = Object.keys(Object.keys(map1) + .concat(Object.keys(map2)) + .reduce(function (memo, value) { + memo[value] = true; + return memo; + }, {})).map(function (id) { return parseInt(id); }); + return chainIds.reduce(function (memo, chainId) { + memo[chainId] = __assign(__assign({}, map2[chainId]), map1[chainId]); + return memo; + }, {}); +} +// merge tokens contained within lists from urls +function useCombinedTokenMapFromUrls(urls) { + var lists = useAllLists(); + return useMemo(function () { + if (!urls) + return {}; + return (urls + .slice() + // sort by priority so top priority goes last + .sort(sortByListPriority) + .reduce(function (allTokens, currentUrl) { + var _a; + var current = (_a = lists[currentUrl]) === null || _a === void 0 ? void 0 : _a.current; + if (!current) + return allTokens; + try { + return combineMaps(allTokens, tokensToChainTokenMap(current)); + } + catch (error) { + console.error('Could not show token list due to error', error); + return allTokens; + } + }, {})); + }, [lists, urls]); +} +// filter out unsupported lists +function useActiveListUrls() { + var activeListUrls = useAppSelector(function (state) { return state.lists.activeListUrls; }); + return useMemo(function () { return activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.filter(function (url) { return !UNSUPPORTED_LIST_URLS.includes(url); }); }, [activeListUrls]); +} +function useInactiveListUrls() { + var lists = useAllLists(); + var allActiveListUrls = useActiveListUrls(); + return useMemo(function () { return Object.keys(lists).filter(function (url) { return !(allActiveListUrls === null || allActiveListUrls === void 0 ? void 0 : allActiveListUrls.includes(url)) && !UNSUPPORTED_LIST_URLS.includes(url); }); }, [lists, allActiveListUrls]); +} +// get all the tokens from active lists, combine with local default tokens +function useCombinedActiveList() { + var activeListUrls = useActiveListUrls(); + var activeTokens = useCombinedTokenMapFromUrls(activeListUrls); + return activeTokens; +} +// list of tokens not supported on interface for various reasons, used to show warnings and prevent swaps and adds +function useUnsupportedTokenList() { + // get hard-coded broken tokens + var brokenListMap = useMemo(function () { return tokensToChainTokenMap(BROKEN_LIST); }, []); + // get hard-coded list of unsupported tokens + var localUnsupportedListMap = useMemo(function () { return tokensToChainTokenMap(UNSUPPORTED_TOKEN_LIST); }, []); + // get dynamic list of unsupported tokens + var loadedUnsupportedListMap = useCombinedTokenMapFromUrls(UNSUPPORTED_LIST_URLS); + // format into one token address map + return useMemo(function () { return combineMaps(brokenListMap, combineMaps(localUnsupportedListMap, loadedUnsupportedListMap)); }, [brokenListMap, localUnsupportedListMap, loadedUnsupportedListMap]); +} +function useIsListActive(url) { + var activeListUrls = useActiveListUrls(); + return Boolean(activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(url)); +} + +// reduce token map into standard address <-> Token mapping, optionally include user added tokens +function useTokensFromMap(tokenMap, includeUserAdded) { + var chainId = useActiveWeb3React().chainId; + var userAddedTokens = useUserAddedTokens(); + return useMemo(function () { + var _a; + if (!chainId) + return {}; + // reduce to just tokens + var mapWithoutUrls = Object.keys((_a = tokenMap[chainId]) !== null && _a !== void 0 ? _a : {}).reduce(function (newMap, address) { + newMap[address] = tokenMap[chainId][address].token; + return newMap; + }, {}); + if (includeUserAdded) { + return (userAddedTokens + // reduce into all ALL_TOKENS filtered by the current chain + .reduce(function (tokenMap, token) { + tokenMap[token.address] = token; + return tokenMap; + }, __assign({}, mapWithoutUrls))); + } + return mapWithoutUrls; + }, [chainId, userAddedTokens, tokenMap, includeUserAdded]); +} +function useAllTokens() { + var allTokens = useCombinedActiveList(); + return useTokensFromMap(allTokens, true); +} +function useUnsupportedTokens() { + var chainId = useActiveWeb3React().chainId; + var listsByUrl = useAllLists(); + var unsupportedTokensMap = useUnsupportedTokenList(); + var unsupportedTokens = useTokensFromMap(unsupportedTokensMap, false); + // checks the default L2 lists to see if `bridgeInfo` has an L1 address value that is unsupported + var l2InferredBlockedTokens = useMemo(function () { + if (!chainId || !L2_CHAIN_IDS.includes(chainId)) { + return {}; + } + if (!listsByUrl) { + return {}; + } + var listUrl = CHAIN_INFO[chainId].defaultListUrl; + var list = listsByUrl[listUrl].current; + if (!list) { + return {}; + } + var unsupportedSet = new Set(Object.keys(unsupportedTokens)); + return list.tokens.reduce(function (acc, tokenInfo) { + var _a; + var _b; + var bridgeInfo = (_b = tokenInfo.extensions) === null || _b === void 0 ? void 0 : _b.bridgeInfo; + if (bridgeInfo && + bridgeInfo[SupportedChainId.MAINNET] && + bridgeInfo[SupportedChainId.MAINNET].tokenAddress && + unsupportedSet.has(bridgeInfo[SupportedChainId.MAINNET].tokenAddress)) { + var address = bridgeInfo[SupportedChainId.MAINNET].tokenAddress; + // don't rely on decimals--it's possible that a token could be bridged w/ different decimals on the L2 + return __assign(__assign({}, acc), (_a = {}, _a[address] = new Token(SupportedChainId.MAINNET, address, tokenInfo.decimals), _a)); + } + return acc; + }, {}); + }, [chainId, listsByUrl, unsupportedTokens]); + return __assign(__assign({}, unsupportedTokens), l2InferredBlockedTokens); +} +function useSearchInactiveTokenLists(search, minResults) { + if (minResults === void 0) { minResults = 10; } + var lists = useAllLists(); + var inactiveUrls = useInactiveListUrls(); + var chainId = useActiveWeb3React().chainId; + var activeTokens = useAllTokens(); + return useMemo(function () { + var e_1, _a, e_2, _b; + if (!search || search.trim().length === 0) + return []; + var tokenFilter = getTokenFilter(search); + var result = []; + var addressSet = {}; + try { + for (var inactiveUrls_1 = __values(inactiveUrls), inactiveUrls_1_1 = inactiveUrls_1.next(); !inactiveUrls_1_1.done; inactiveUrls_1_1 = inactiveUrls_1.next()) { + var url = inactiveUrls_1_1.value; + var list = lists[url].current; + if (!list) + continue; + try { + for (var _c = (e_2 = void 0, __values(list.tokens)), _d = _c.next(); !_d.done; _d = _c.next()) { + var tokenInfo = _d.value; + if (tokenInfo.chainId === chainId && tokenFilter(tokenInfo)) { + var wrapped = new WrappedTokenInfo(tokenInfo, list); + if (!(wrapped.address in activeTokens) && !addressSet[wrapped.address]) { + addressSet[wrapped.address] = true; + result.push(wrapped); + if (result.length >= minResults) + return result; + } + } + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_d && !_d.done && (_b = _c.return)) _b.call(_c); + } + finally { if (e_2) throw e_2.error; } + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (inactiveUrls_1_1 && !inactiveUrls_1_1.done && (_a = inactiveUrls_1.return)) _a.call(inactiveUrls_1); + } + finally { if (e_1) throw e_1.error; } + } + return result; + }, [activeTokens, chainId, inactiveUrls, lists, minResults, search]); +} +function useIsTokenActive(token) { + var activeTokens = useAllTokens(); + if (!activeTokens || !token) { + return false; + } + return !!activeTokens[token.address]; +} +// Check if currency is included in custom list from user storage +function useIsUserAddedToken(currency) { + var userAddedTokens = useUserAddedTokens(); + if (!currency) { + return false; + } + return !!userAddedTokens.find(function (token) { return currency.equals(token); }); +} +// undefined if invalid or does not exist +// null if loading or null was passed +// otherwise returns the token +function useToken(tokenAddress) { + var tokens = useAllTokens(); + return useTokenFromMap(tokens, tokenAddress); +} +function useCurrency(currencyId) { + var tokens = useAllTokens(); + return useCurrencyFromMap(tokens, currencyId); +} + +function serializeToken(token) { + return { + chainId: token.chainId, + address: token.address, + decimals: token.decimals, + symbol: token.symbol, + name: token.name, + }; +} +function deserializeToken(serializedToken) { + return new Token(serializedToken.chainId, serializedToken.address, serializedToken.decimals, serializedToken.symbol, serializedToken.name); +} +function useIsDarkMode() { + var _a = useAppSelector(function (_a) { + var _b = _a.user, matchesDarkMode = _b.matchesDarkMode, userDarkMode = _b.userDarkMode; + return ({ + userDarkMode: userDarkMode, + matchesDarkMode: matchesDarkMode, + }); + }, shallowEqual), userDarkMode = _a.userDarkMode, matchesDarkMode = _a.matchesDarkMode; + return userDarkMode === null ? matchesDarkMode : userDarkMode; +} +function useDarkModeManager() { + var dispatch = useAppDispatch(); + var darkMode = useIsDarkMode(); + var toggleSetDarkMode = useCallback(function () { + dispatch(updateUserDarkMode({ userDarkMode: !darkMode })); + }, [darkMode, dispatch]); + return [darkMode, toggleSetDarkMode]; +} +function useUserLocale() { + return useAppSelector(function (state) { return state.user.userLocale; }); +} +function useUserLocaleManager() { + var dispatch = useAppDispatch(); + var locale = useUserLocale(); + var setLocale = useCallback(function (newLocale) { + dispatch(updateUserLocale({ userLocale: newLocale })); + }, [dispatch]); + return [locale, setLocale]; +} +function useIsExpertMode() { + return useAppSelector(function (state) { return state.user.userExpertMode; }); +} +function useExpertModeManager() { + var dispatch = useAppDispatch(); + var expertMode = useIsExpertMode(); + var toggleSetExpertMode = useCallback(function () { + dispatch(updateUserExpertMode({ userExpertMode: !expertMode })); + }, [expertMode, dispatch]); + return [expertMode, toggleSetExpertMode]; +} +function useShowSurveyPopup() { + var dispatch = useAppDispatch(); + var showSurveyPopup = useAppSelector(function (state) { return state.user.showSurveyPopup; }); + var toggleShowSurveyPopup = useCallback(function (showPopup) { + dispatch(updateShowSurveyPopup({ showSurveyPopup: showPopup })); + }, [dispatch]); + return [showSurveyPopup, toggleShowSurveyPopup]; +} +function useClientSideRouter() { + var dispatch = useAppDispatch(); + var clientSideRouter = useAppSelector(function (state) { return Boolean(state.user.userClientSideRouter); }); + var setClientSideRouter = useCallback(function (newClientSideRouter) { + dispatch(updateUserClientSideRouter({ userClientSideRouter: newClientSideRouter })); + }, [dispatch]); + return [clientSideRouter, setClientSideRouter]; +} +function useSetUserSlippageTolerance() { + var dispatch = useAppDispatch(); + return useCallback(function (userSlippageTolerance) { + var value; + try { + value = + userSlippageTolerance === 'auto' ? 'auto' : JSBI.toNumber(userSlippageTolerance.multiply(10000).quotient); + } + catch (error) { + value = 'auto'; + } + dispatch(updateUserSlippageTolerance({ + userSlippageTolerance: value, + })); + }, [dispatch]); +} +/** + * Return the user's slippage tolerance, from the redux store, and a function to update the slippage tolerance + */ +function useUserSlippageTolerance() { + var userSlippageTolerance = useAppSelector(function (state) { + return state.user.userSlippageTolerance; + }); + return useMemo(function () { return (userSlippageTolerance === 'auto' ? 'auto' : new Percent(userSlippageTolerance, 10000)); }, [userSlippageTolerance]); +} +/** + * Same as above but replaces the auto with a default value + * @param defaultSlippageTolerance the default value to replace auto with + */ +function useUserSlippageToleranceWithDefault(defaultSlippageTolerance) { + var allowedSlippage = useUserSlippageTolerance(); + return useMemo(function () { return (allowedSlippage === 'auto' ? defaultSlippageTolerance : allowedSlippage); }, [allowedSlippage, defaultSlippageTolerance]); +} +function useUserTransactionTTL() { + var chainId = useActiveWeb3React().chainId; + var dispatch = useAppDispatch(); + var userDeadline = useAppSelector(function (state) { return state.user.userDeadline; }); + var onL2 = Boolean(chainId && L2_CHAIN_IDS.includes(chainId)); + var deadline = onL2 ? L2_DEADLINE_FROM_NOW : userDeadline; + var setUserDeadline = useCallback(function (userDeadline) { + dispatch(updateUserDeadline({ userDeadline: userDeadline })); + }, [dispatch]); + return [deadline, setUserDeadline]; +} +function useAddUserToken() { + var dispatch = useAppDispatch(); + return useCallback(function (token) { + dispatch(addSerializedToken({ serializedToken: serializeToken(token) })); + }, [dispatch]); +} +function useRemoveUserAddedToken() { + var dispatch = useAppDispatch(); + return useCallback(function (chainId, address) { + dispatch(removeSerializedToken({ chainId: chainId, address: address })); + }, [dispatch]); +} +function useUserAddedTokens() { + var chainId = useActiveWeb3React().chainId; + var serializedTokensMap = useAppSelector(function (_a) { + var tokens = _a.user.tokens; + return tokens; + }); + return useMemo(function () { + if (!chainId) + return []; + var tokenMap = (serializedTokensMap === null || serializedTokensMap === void 0 ? void 0 : serializedTokensMap[chainId]) + ? Object.values(serializedTokensMap[chainId]).map(deserializeToken) + : []; + return tokenMap; + }, [serializedTokensMap, chainId]); +} +function useURLWarningVisible() { + return useAppSelector(function (state) { return state.user.URLWarningVisible; }); +} + +var EXPLORER_HOSTNAMES = { + 'etherscan.io': true, + 'ropsten.etherscan.io': true, + 'rinkeby.etherscan.io': true, + 'kovan.etherscan.io': true, + 'goerli.etherscan.io': true, + 'optimistic.etherscan.io': true, + 'kovan-optimistic.etherscan.io': true, + 'rinkeby-explorer.arbitrum.io': true, + 'arbiscan.io': true, +}; +/** + * Returns the anonymized version of the given href, i.e. one that does not leak user information + * @param href the link to anonymize, i.e. remove any personal data from + * @return string anonymized version of the given href + */ +function anonymizeLink(href) { + try { + var url = new URL(href); + if (EXPLORER_HOSTNAMES[url.hostname]) { + var pathPieces = url.pathname.split('/'); + var anonymizedPath = pathPieces.map(function (pc) { return (/0x[a-fA-F0-9]+/.test(pc) ? '***' : pc); }).join('/'); + return url.protocol + "//" + url.hostname + anonymizedPath; + } + return href; + } + catch (error) { + return href; + } +} + +var ButtonText = styled.button(templateObject_1$1l || (templateObject_1$1l = __makeTemplateObject(["\n outline: none;\n border: none;\n font-size: inherit;\n padding: 0;\n margin: 0;\n background: none;\n cursor: pointer;\n\n :hover {\n opacity: 0.7;\n }\n\n :focus {\n text-decoration: underline;\n }\n"], ["\n outline: none;\n border: none;\n font-size: inherit;\n padding: 0;\n margin: 0;\n background: none;\n cursor: pointer;\n\n :hover {\n opacity: 0.7;\n }\n\n :focus {\n text-decoration: underline;\n }\n"]))); +var CloseIcon$2 = styled(X)(templateObject_2$$ || (templateObject_2$$ = __makeTemplateObject(["\n cursor: pointer;\n"], ["\n cursor: pointer;\n" + // for wrapper react feather icons +]))); +// for wrapper react feather icons +var IconWrapper$4 = styled.div(templateObject_3$S || (templateObject_3$S = __makeTemplateObject(["\n display: flex;\n align-items: center;\n justify-content: center;\n width: ", ";\n height: ", ";\n margin-right: ", ";\n margin-left: ", ";\n & > * {\n stroke: ", ";\n }\n"], ["\n display: flex;\n align-items: center;\n justify-content: center;\n width: ", ";\n height: ", ";\n margin-right: ", ";\n margin-left: ", ";\n & > * {\n stroke: ", ";\n }\n" + // A button that triggers some onClick result, but looks like a link. +])), function (_a) { + var size = _a.size; + return size !== null && size !== void 0 ? size : '20px'; +}, function (_a) { + var size = _a.size; + return size !== null && size !== void 0 ? size : '20px'; +}, function (_a) { + var marginRight = _a.marginRight; + return marginRight !== null && marginRight !== void 0 ? marginRight : 0; +}, function (_a) { + var marginLeft = _a.marginLeft; + return marginLeft !== null && marginLeft !== void 0 ? marginLeft : 0; +}, function (_a) { + var theme = _a.theme, stroke = _a.stroke; + return stroke !== null && stroke !== void 0 ? stroke : theme.blue1; +}); +// A button that triggers some onClick result, but looks like a link. +var LinkStyledButton = styled.button(templateObject_4$G || (templateObject_4$G = __makeTemplateObject(["\n border: none;\n text-decoration: none;\n background: none;\n\n cursor: ", ";\n color: ", ";\n font-weight: 500;\n\n :hover {\n text-decoration: ", ";\n }\n\n :focus {\n outline: none;\n text-decoration: ", ";\n }\n\n :active {\n text-decoration: none;\n }\n"], ["\n border: none;\n text-decoration: none;\n background: none;\n\n cursor: ", ";\n color: ", ";\n font-weight: 500;\n\n :hover {\n text-decoration: ", ";\n }\n\n :focus {\n outline: none;\n text-decoration: ", ";\n }\n\n :active {\n text-decoration: none;\n }\n" + // An internal link from the react-router-dom library that is correctly styled +])), function (_a) { + var disabled = _a.disabled; + return (disabled ? 'default' : 'pointer'); +}, function (_a) { + var theme = _a.theme, disabled = _a.disabled; + return (disabled ? theme.text2 : theme.primary1); +}, function (_a) { + var disabled = _a.disabled; + return (disabled ? null : 'underline'); +}, function (_a) { + var disabled = _a.disabled; + return (disabled ? null : 'underline'); +}); +// An internal link from the react-router-dom library that is correctly styled +var StyledInternalLink = styled(Link$1)(templateObject_5$x || (templateObject_5$x = __makeTemplateObject(["\n text-decoration: none;\n cursor: pointer;\n color: ", ";\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 text-decoration: none;\n cursor: pointer;\n color: ", ";\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"])), function (_a) { + var theme = _a.theme; + return theme.primary1; +}); +var StyledLink = styled.a(templateObject_6$o || (templateObject_6$o = __makeTemplateObject(["\n text-decoration: none;\n cursor: pointer;\n color: ", ";\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 text-decoration: none;\n cursor: pointer;\n color: ", ";\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"])), function (_a) { + var theme = _a.theme; + return theme.primary1; +}); +var LinkIconWrapper = styled.a(templateObject_7$k || (templateObject_7$k = __makeTemplateObject(["\n text-decoration: none;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n text-decoration: none;\n opacity: 0.7;\n }\n\n :focus {\n outline: none;\n text-decoration: none;\n }\n\n :active {\n text-decoration: none;\n }\n"], ["\n text-decoration: none;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n text-decoration: none;\n opacity: 0.7;\n }\n\n :focus {\n outline: none;\n text-decoration: none;\n }\n\n :active {\n text-decoration: none;\n }\n"]))); +var LinkIcon = styled(ExternalLink$1)(templateObject_8$h || (templateObject_8$h = __makeTemplateObject(["\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ", ";\n"], ["\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.blue1; +}); +var TrashIcon = styled(Trash)(templateObject_9$g || (templateObject_9$g = __makeTemplateObject(["\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ", ";\n\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n opacity: 0.7;\n }\n"], ["\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ", ";\n\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n opacity: 0.7;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text3; +}); +var rotateImg = keyframes(templateObject_10$c || (templateObject_10$c = __makeTemplateObject(["\n 0% {\n transform: perspective(1000px) rotateY(0deg);\n }\n\n 100% {\n transform: perspective(1000px) rotateY(360deg);\n }\n"], ["\n 0% {\n transform: perspective(1000px) rotateY(0deg);\n }\n\n 100% {\n transform: perspective(1000px) rotateY(360deg);\n }\n"]))); +var UniTokenAnimated = styled.img(templateObject_11$a || (templateObject_11$a = __makeTemplateObject(["\n animation: ", " 5s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n padding: 2rem 0 0 0;\n filter: drop-shadow(0px 2px 4px rgba(0, 0, 0, 0.15));\n"], ["\n animation: ", " 5s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n padding: 2rem 0 0 0;\n filter: drop-shadow(0px 2px 4px rgba(0, 0, 0, 0.15));\n"])), rotateImg); +function handleClickExternalLink(event) { + var _a = event.currentTarget, target = _a.target, href = _a.href; + var anonymizedHref = anonymizeLink(href); + // don't prevent default, don't redirect if it's a new tab + if (target === '_blank' || event.ctrlKey || event.metaKey) { + ReactGA.outboundLink({ label: anonymizedHref }, function () { + console.debug('Fired outbound link event', anonymizedHref); + }); + } + else { + event.preventDefault(); + // send a ReactGA event and then trigger a location change + ReactGA.outboundLink({ label: anonymizedHref }, function () { + window.location.href = anonymizedHref; + }); + } +} +/** + * Outbound link that handles firing google analytics events + */ +function ExternalLink(_a) { + var _b = _a.target, target = _b === void 0 ? '_blank' : _b, href = _a.href, _c = _a.rel, rel = _c === void 0 ? 'noopener noreferrer' : _c, rest = __rest(_a, ["target", "href", "rel"]); + return jsx(StyledLink, __assign({ target: target, rel: rel, href: href, onClick: handleClickExternalLink }, rest), void 0); +} +function ExternalLinkIcon(_a) { + var _b = _a.target, target = _b === void 0 ? '_blank' : _b, href = _a.href, _c = _a.rel, rel = _c === void 0 ? 'noopener noreferrer' : _c, rest = __rest(_a, ["target", "href", "rel"]); + return (jsx(LinkIconWrapper, __assign({ target: target, rel: rel, href: href, onClick: handleClickExternalLink }, rest, { children: jsx(LinkIcon, {}, void 0) }), void 0)); +} +var rotate$1 = keyframes(templateObject_12$a || (templateObject_12$a = __makeTemplateObject(["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"], ["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"]))); +var Spinner$2 = styled.img(templateObject_13$6 || (templateObject_13$6 = __makeTemplateObject(["\n animation: 2s ", " linear infinite;\n width: 16px;\n height: 16px;\n"], ["\n animation: 2s ", " linear infinite;\n width: 16px;\n height: 16px;\n"])), rotate$1); +styled(StyledInternalLink)(templateObject_14$6 || (templateObject_14$6 = __makeTemplateObject(["\n color: ", ";\n"], ["\n color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.text1; +}); +var CustomLightSpinner = styled(Spinner$2)(templateObject_15$4 || (templateObject_15$4 = __makeTemplateObject(["\n height: ", ";\n width: ", ";\n"], ["\n height: ", ";\n width: ", ";\n"])), function (_a) { + var size = _a.size; + return size; +}, function (_a) { + var size = _a.size; + return size; +}); +var HideSmall = styled.span(templateObject_17$2 || (templateObject_17$2 = __makeTemplateObject(["\n ", ";\n"], ["\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToSmall(templateObject_16$3 || (templateObject_16$3 = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); +}); +styled.span(templateObject_19$2 || (templateObject_19$2 = __makeTemplateObject(["\n ", ";\n"], ["\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToExtraSmall(templateObject_18$2 || (templateObject_18$2 = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); +}); +styled.span(templateObject_21$1 || (templateObject_21$1 = __makeTemplateObject(["\n display: none;\n ", ";\n"], ["\n display: none;\n ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToSmall(templateObject_20$1 || (templateObject_20$1 = __makeTemplateObject(["\n display: block;\n "], ["\n display: block;\n "]))); +}); +var Separator$1 = styled.div(templateObject_22 || (templateObject_22 = __makeTemplateObject(["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"], ["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}); +var templateObject_1$1l, templateObject_2$$, templateObject_3$S, templateObject_4$G, templateObject_5$x, templateObject_6$o, templateObject_7$k, templateObject_8$h, templateObject_9$g, templateObject_10$c, templateObject_11$a, templateObject_12$a, templateObject_13$6, templateObject_14$6, templateObject_15$4, templateObject_16$3, templateObject_17$2, templateObject_18$2, templateObject_19$2, templateObject_20$1, templateObject_21$1, templateObject_22; + +var MEDIA_WIDTHS = { + upToExtraSmall: 500, + upToSmall: 720, + upToMedium: 960, + upToLarge: 1280, +}; +// Migrating to a standard z-index system https://getbootstrap.com/docs/5.0/layout/z-index/ +// Please avoid using deprecated numbers +var Z_INDEX; +(function (Z_INDEX) { + Z_INDEX[Z_INDEX["deprecated_zero"] = 0] = "deprecated_zero"; + Z_INDEX[Z_INDEX["deprecated_content"] = 1] = "deprecated_content"; + Z_INDEX[Z_INDEX["dropdown"] = 1000] = "dropdown"; + Z_INDEX[Z_INDEX["sticky"] = 1020] = "sticky"; + Z_INDEX[Z_INDEX["fixed"] = 1030] = "fixed"; + Z_INDEX[Z_INDEX["modalBackdrop"] = 1040] = "modalBackdrop"; + Z_INDEX[Z_INDEX["offcanvas"] = 1050] = "offcanvas"; + Z_INDEX[Z_INDEX["modal"] = 1060] = "modal"; + Z_INDEX[Z_INDEX["popover"] = 1070] = "popover"; + Z_INDEX[Z_INDEX["tooltip"] = 1080] = "tooltip"; +})(Z_INDEX || (Z_INDEX = {})); +var mediaWidthTemplates = Object.keys(MEDIA_WIDTHS).reduce(function (accumulator, size) { + accumulator[size] = function (a, b, c) { return css(templateObject_1$1k || (templateObject_1$1k = __makeTemplateObject(["\n @media (max-width: ", "px) {\n ", "\n }\n "], ["\n @media (max-width: ", "px) {\n ", "\n }\n "])), MEDIA_WIDTHS[size], css(a, b, c)); }; + return accumulator; +}, {}); +var white = '#FFFFFF'; +var black = '#000000'; +function colors(darkMode) { + return { + darkMode: darkMode, + // base + white: white, + black: black, + // text + text1: darkMode ? '#FFFFFF' : '#000000', + text2: darkMode ? '#C3C5CB' : '#565A69', + text3: darkMode ? '#8F96AC' : '#6E727D', + text4: darkMode ? '#B2B9D2' : '#C3C5CB', + text5: darkMode ? '#2C2F36' : '#EDEEF2', + // backgrounds / greys + bg0: darkMode ? '#191B1F' : '#FFF', + bg1: darkMode ? '#212429' : '#F7F8FA', + bg2: darkMode ? '#2C2F36' : '#EDEEF2', + bg3: darkMode ? '#40444F' : '#CED0D9', + bg4: darkMode ? '#565A69' : '#888D9B', + bg5: darkMode ? '#6C7284' : '#888D9B', + bg6: darkMode ? '#1A2028' : '#6C7284', + //specialty colors + modalBG: darkMode ? 'rgba(0,0,0,.425)' : 'rgba(0,0,0,0.3)', + advancedBG: darkMode ? 'rgba(0,0,0,0.1)' : 'rgba(255,255,255,0.6)', + //primary colors + primary1: darkMode ? '#2172E5' : '#E8006F', + primary2: darkMode ? '#3680E7' : '#FF8CC3', + primary3: darkMode ? '#4D8FEA' : '#FF99C9', + primary4: darkMode ? '#376bad70' : '#F6DDE8', + primary5: darkMode ? '#153d6f70' : '#FDEAF1', + // color text + primaryText1: darkMode ? '#5090ea' : '#D50066', + // secondary colors + secondary1: darkMode ? '#2172E5' : '#E8006F', + secondary2: darkMode ? '#17000b26' : '#F6DDE8', + secondary3: darkMode ? '#17000b26' : '#FDEAF1', + // other + red1: darkMode ? '#FF4343' : '#DA2D2B', + red2: darkMode ? '#F82D3A' : '#DF1F38', + red3: '#D60000', + green1: darkMode ? '#27AE60' : '#007D35', + yellow1: '#E3A507', + yellow2: '#FF8F00', + yellow3: '#F3B71E', + blue1: darkMode ? '#2172E5' : '#0068FC', + blue2: darkMode ? '#5199FF' : '#0068FC', + error: darkMode ? '#FD4040' : '#DF1F38', + success: darkMode ? '#27AE60' : '#007D35', + warning: '#FF8F00', + // dont wanna forget these blue yet + blue4: darkMode ? '#153d6f70' : '#C4D9F8', + // blue5: darkMode ? '#153d6f70' : '#EBF4FF', + }; +} +function theme(darkMode) { + return __assign(__assign({}, colors(darkMode)), { grids: { + sm: 8, + md: 12, + lg: 24, + }, + //shadows + shadow1: darkMode ? '#000' : '#2F80ED', + // media queries + mediaWidth: mediaWidthTemplates, + // css snippets + flexColumnNoWrap: css(templateObject_2$_ || (templateObject_2$_ = __makeTemplateObject(["\n display: flex;\n flex-flow: column nowrap;\n "], ["\n display: flex;\n flex-flow: column nowrap;\n "]))), flexRowNoWrap: css(templateObject_3$R || (templateObject_3$R = __makeTemplateObject(["\n display: flex;\n flex-flow: row nowrap;\n "], ["\n display: flex;\n flex-flow: row nowrap;\n "]))) }); +} +function ThemeProvider(_a) { + var children = _a.children; + var darkMode = useIsDarkMode(); + var themeObject = useMemo(function () { return theme(darkMode); }, [darkMode]); + return jsx(ThemeProvider$1, __assign({ theme: themeObject }, { children: children }), void 0); +} +var TextWrapper$1 = styled(Text$1)(templateObject_4$F || (templateObject_4$F = __makeTemplateObject(["\n color: ", ";\n"], ["\n color: ", ";\n" + /** + * Preset styles of the Rebass Text component + */ +])), function (_a) { + var color = _a.color, theme = _a.theme; + return theme[color]; +}); +/** + * Preset styles of the Rebass Text component + */ +var ThemedText = { + Main: function (props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text2' }, props), void 0); + }, + Link: function (props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'primary1' }, props), void 0); + }, + Label: function (props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 600, color: 'text1' }, props), void 0); + }, + Black: function (props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text1' }, props), void 0); + }, + White: function (props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'white' }, props), void 0); + }, + Body: function (props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 400, fontSize: 16, color: 'text1' }, props), void 0); + }, + LargeHeader: function (props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 600, fontSize: 24 }, props), void 0); + }, + MediumHeader: function (props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 500, fontSize: 20 }, props), void 0); + }, + SubHeader: function (props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 400, fontSize: 14 }, props), void 0); + }, + Small: function (props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 500, fontSize: 11 }, props), void 0); + }, + Blue: function (props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'blue1' }, props), void 0); + }, + Yellow: function (props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'yellow3' }, props), void 0); + }, + DarkGray: function (props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text3' }, props), void 0); + }, + Gray: function (props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'bg3' }, props), void 0); + }, + Italic: function (props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 500, fontSize: 12, fontStyle: 'italic', color: 'text2' }, props), void 0); + }, + Error: function (_a) { + var error = _a.error, props = __rest(_a, ["error"]); + return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: error ? 'red1' : 'text2' }, props), void 0); + }, +}; +var ThemedGlobalStyle = createGlobalStyle(templateObject_5$w || (templateObject_5$w = __makeTemplateObject(["\nhtml {\n color: ", ";\n background-color: ", " !important;\n}\n\na {\n color: ", "; \n}\n"], ["\nhtml {\n color: ", ";\n background-color: ", " !important;\n}\n\na {\n color: ", "; \n}\n"])), function (_a) { + var theme = _a.theme; + return theme.text1; +}, function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var theme = _a.theme; + return theme.blue1; +}); +var templateObject_1$1k, templateObject_2$_, templateObject_3$R, templateObject_4$F, templateObject_5$w; + +var _a$b; +var ETHERSCAN_PREFIXES = (_a$b = {}, + _a$b[SupportedChainId.MAINNET] = 'https://etherscan.io', + _a$b[SupportedChainId.ROPSTEN] = 'https://ropsten.etherscan.io', + _a$b[SupportedChainId.RINKEBY] = 'https://rinkeby.etherscan.io', + _a$b[SupportedChainId.GOERLI] = 'https://goerli.etherscan.io', + _a$b[SupportedChainId.KOVAN] = 'https://kovan.etherscan.io', + _a$b[SupportedChainId.OPTIMISM] = 'https://optimistic.etherscan.io', + _a$b[SupportedChainId.OPTIMISTIC_KOVAN] = 'https://kovan-optimistic.etherscan.io', + _a$b[SupportedChainId.POLYGON_MUMBAI] = 'https://mumbai.polygonscan.com', + _a$b[SupportedChainId.POLYGON] = 'https://polygonscan.com', + _a$b); +var ExplorerDataType; +(function (ExplorerDataType) { + ExplorerDataType["TRANSACTION"] = "transaction"; + ExplorerDataType["TOKEN"] = "token"; + ExplorerDataType["ADDRESS"] = "address"; + ExplorerDataType["BLOCK"] = "block"; +})(ExplorerDataType || (ExplorerDataType = {})); +/** + * Return the explorer link for the given data and data type + * @param chainId the ID of the chain for which to return the data + * @param data the data to return a link for + * @param type the type of the data + */ +function getExplorerLink(chainId, data, type) { + var _a; + if (chainId === SupportedChainId.ARBITRUM_ONE) { + switch (type) { + case ExplorerDataType.TRANSACTION: + return "https://arbiscan.io/tx/" + data; + case ExplorerDataType.ADDRESS: + case ExplorerDataType.TOKEN: + return "https://arbiscan.io/address/" + data; + case ExplorerDataType.BLOCK: + return "https://arbiscan.io/block/" + data; + default: + return "https://arbiscan.io/"; + } + } + if (chainId === SupportedChainId.ARBITRUM_RINKEBY) { + switch (type) { + case ExplorerDataType.TRANSACTION: + return "https://rinkeby-explorer.arbitrum.io/tx/" + data; + case ExplorerDataType.ADDRESS: + case ExplorerDataType.TOKEN: + return "https://rinkeby-explorer.arbitrum.io/address/" + data; + case ExplorerDataType.BLOCK: + return "https://rinkeby-explorer.arbitrum.io/block/" + data; + default: + return "https://rinkeby-explorer.arbitrum.io/"; + } + } + var prefix = (_a = ETHERSCAN_PREFIXES[chainId]) !== null && _a !== void 0 ? _a : 'https://etherscan.io'; + switch (type) { + case ExplorerDataType.TRANSACTION: + return prefix + "/tx/" + data; + case ExplorerDataType.TOKEN: + return prefix + "/token/" + data; + case ExplorerDataType.BLOCK: + if (chainId === SupportedChainId.OPTIMISM || chainId === SupportedChainId.OPTIMISTIC_KOVAN) { + return prefix + "/tx/" + data; + } + return prefix + "/block/" + data; + case ExplorerDataType.ADDRESS: + return prefix + "/address/" + data; + default: + return "" + prefix; + } } -var ValidationSchema -;(function (ValidationSchema) { - ValidationSchema['LIST'] = 'list' - ValidationSchema['TOKENS'] = 'tokens' -})(ValidationSchema || (ValidationSchema = {})) -var validator = new Promise(function (resolve) { - return __awaiter(void 0, void 0, void 0, function () { - var _a, ajv, schema, validator - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - return [ - 4 /*yield*/, - Promise.all([ - import('ajv'), - Promise.resolve().then(function () { - return tokenlist_schema$1 - }), - ]), - ] - case 1: - ;(_a = __read.apply(void 0, [_b.sent(), 2])), (ajv = _a[0]), (schema = _a[1]) - validator = new ajv.default({ allErrors: true }) - .addSchema(schema, ValidationSchema.LIST) - // Adds a meta scheme of Pick - .addSchema( - __assign(__assign({}, schema), { $id: schema.$id + '#tokens', required: ['tokens'] }), - ValidationSchema.TOKENS - ) - resolve(validator) - return [2 /*return*/] - } - }) - }) -}) -function getValidationErrors(validate) { - var _a, _b - return (_b = - (_a = validate === null || validate === void 0 ? void 0 : validate.errors) === null || _a === void 0 - ? void 0 - : _a - .map(function (error) { - return [error.dataPath, error.message].filter(Boolean).join(' ') - }) - .join('; ')) !== null && _b !== void 0 - ? _b - : 'unknown error' -} -/** - * Validates a token list. - * @param json the TokenList to validate - */ -function validateTokenList(json) { - return __awaiter(this, void 0, void 0, function () { - var validate - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - return [4 /*yield*/, validator] - case 1: - validate = _a.sent().getSchema(ValidationSchema.LIST) - if (validate === null || validate === void 0 ? void 0 : validate(json)) { - return [2 /*return*/, json] - } - throw new Error('Token list failed validation: ' + getValidationErrors(validate)) - } - }) - }) -} +var Column = styled.div(templateObject_1$1j || (templateObject_1$1j = __makeTemplateObject(["\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n"], ["\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n"]))); +var ColumnCenter = styled(Column)(templateObject_2$Z || (templateObject_2$Z = __makeTemplateObject(["\n width: 100%;\n align-items: center;\n"], ["\n width: 100%;\n align-items: center;\n"]))); +var AutoColumn = styled.div(templateObject_3$Q || (templateObject_3$Q = __makeTemplateObject(["\n display: grid;\n grid-auto-rows: auto;\n grid-row-gap: ", ";\n justify-items: ", ";\n"], ["\n display: grid;\n grid-auto-rows: auto;\n grid-row-gap: ", ";\n justify-items: ", ";\n"])), function (_a) { + var gap = _a.gap; + return (gap === 'sm' && '8px') || (gap === 'md' && '12px') || (gap === 'lg' && '24px') || gap; +}, function (_a) { + var justify = _a.justify; + return justify && justify; +}); +var templateObject_1$1j, templateObject_2$Z, templateObject_3$Q; -var listCache = new Map() -/** Fetches and validates a token list. */ -function fetchTokenList$1(listUrl, resolveENSContentHash) { - var _a - return __awaiter(this, void 0, void 0, function () { - var cached, - urls, - parsedENS, - contentHashUri, - error_1, - message, - translatedUri, - message, - i, - url, - isLast, - response, - error_2, - message, - message, - json, - list - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - cached = listCache === null || listCache === void 0 ? void 0 : listCache.get(listUrl) // avoid spurious re-fetches - if (cached) { - return [2 /*return*/, cached] - } - parsedENS = parseENSAddress(listUrl) - if (!parsedENS) return [3 /*break*/, 5] - contentHashUri = void 0 - _b.label = 1 - case 1: - _b.trys.push([1, 3, , 4]) - return [4 /*yield*/, resolveENSContentHash(parsedENS.ensName)] - case 2: - contentHashUri = _b.sent() - return [3 /*break*/, 4] - case 3: - error_1 = _b.sent() - message = 'failed to resolve ENS name: ' + parsedENS.ensName - console.debug(message, error_1) - throw new Error(message) - case 4: - translatedUri = void 0 - try { - translatedUri = contenthashToUri(contentHashUri) - } catch (error) { - message = 'failed to translate contenthash to URI: ' + contentHashUri - console.debug(message, error) - throw new Error(message) - } - urls = uriToHttp('' + translatedUri + ((_a = parsedENS.ensPath) !== null && _a !== void 0 ? _a : '')) - return [3 /*break*/, 6] - case 5: - urls = uriToHttp(listUrl) - _b.label = 6 - case 6: - i = 0 - _b.label = 7 - case 7: - if (!(i < urls.length)) return [3 /*break*/, 15] - url = urls[i] - isLast = i === urls.length - 1 - response = void 0 - _b.label = 8 - case 8: - _b.trys.push([8, 10, , 11]) - return [4 /*yield*/, fetch(url, { credentials: 'omit' })] - case 9: - response = _b.sent() - return [3 /*break*/, 11] - case 10: - error_2 = _b.sent() - message = 'failed to fetch list: ' + listUrl - console.debug(message, error_2) - if (isLast) throw new Error(message) - return [3 /*break*/, 14] - case 11: - if (!response.ok) { - message = 'failed to fetch list: ' + listUrl - console.debug(message, response.statusText) - if (isLast) throw new Error(message) - return [3 /*break*/, 14] - } - return [4 /*yield*/, response.json()] - case 12: - json = _b.sent() - return [4 /*yield*/, validateTokenList(json)] - case 13: - list = _b.sent() - listCache === null || listCache === void 0 ? void 0 : listCache.set(listUrl, list) - return [2 /*return*/, list] - case 14: - i++ - return [3 /*break*/, 7] - case 15: - throw new Error('Unrecognized list URL protocol.') - } - }) - }) -} +var Row$1 = styled(Box)(templateObject_1$1i || (templateObject_1$1i = __makeTemplateObject(["\n width: ", ";\n display: flex;\n padding: 0;\n align-items: ", ";\n justify-content: ", ";\n padding: ", ";\n border: ", ";\n border-radius: ", ";\n"], ["\n width: ", ";\n display: flex;\n padding: 0;\n align-items: ", ";\n justify-content: ", ";\n padding: ", ";\n border: ", ";\n border-radius: ", ";\n"])), function (_a) { + var width = _a.width; + return width !== null && width !== void 0 ? width : '100%'; +}, function (_a) { + var align = _a.align; + return align !== null && align !== void 0 ? align : 'center'; +}, function (_a) { + var justify = _a.justify; + return justify !== null && justify !== void 0 ? justify : 'flex-start'; +}, function (_a) { + var padding = _a.padding; + return padding; +}, function (_a) { + var border = _a.border; + return border; +}, function (_a) { + var borderRadius = _a.borderRadius; + return borderRadius; +}); +var RowBetween = styled(Row$1)(templateObject_2$Y || (templateObject_2$Y = __makeTemplateObject(["\n justify-content: space-between;\n"], ["\n justify-content: space-between;\n"]))); +styled.div(templateObject_3$P || (templateObject_3$P = __makeTemplateObject(["\n display: flex;\n align-items: flex-end;\n"], ["\n display: flex;\n align-items: flex-end;\n"]))); +var AutoRow = styled(Row$1)(templateObject_4$E || (templateObject_4$E = __makeTemplateObject(["\n flex-wrap: wrap;\n margin: ", ";\n justify-content: ", ";\n\n & > * {\n margin: ", " !important;\n }\n"], ["\n flex-wrap: wrap;\n margin: ", ";\n justify-content: ", ";\n\n & > * {\n margin: ", " !important;\n }\n"])), function (_a) { + var gap = _a.gap; + return gap && "-" + gap; +}, function (_a) { + var justify = _a.justify; + return justify && justify; +}, function (_a) { + var gap = _a.gap; + return gap; +}); +var RowFixed = styled(Row$1)(templateObject_5$v || (templateObject_5$v = __makeTemplateObject(["\n width: fit-content;\n margin: ", ";\n"], ["\n width: fit-content;\n margin: ", ";\n"])), function (_a) { + var gap = _a.gap; + return gap && "-" + gap; +}); +var templateObject_1$1i, templateObject_2$Y, templateObject_3$P, templateObject_4$E, templateObject_5$v; -/** - * Returns a map of the given addresses to their eventually consistent ETH balances. - */ -function useNativeCurrencyBalances(uncheckedAddresses) { - var chainId = useActiveWeb3React().chainId - var multicallContract = useInterfaceMulticall() - var validAddressInputs = useMemo( - function () { - return uncheckedAddresses - ? uncheckedAddresses - .map(isAddress) - .filter(function (a) { - return a !== false - }) - .sort() - .map(function (addr) { - return [addr] - }) - : [] - }, - [uncheckedAddresses] - ) - var results = useSingleContractMultipleData(multicallContract, 'getEthBalance', validAddressInputs) - return useMemo( - function () { - return validAddressInputs.reduce(function (memo, _a, i) { - var _b, _c - var _d = __read(_a, 1), - address = _d[0] - var value = - (_c = - (_b = results === null || results === void 0 ? void 0 : results[i]) === null || _b === void 0 - ? void 0 - : _b.result) === null || _c === void 0 - ? void 0 - : _c[0] - if (value && chainId) - memo[address] = CurrencyAmount.fromRawAmount(nativeOnChain(chainId), JSBI.BigInt(value.toString())) - return memo - }, {}) - }, - [validAddressInputs, chainId, results] - ) -} -var ERC20Interface = new Interface(ERC20ABI) -var tokenBalancesGasRequirement = { gasRequired: 125000 } -/** - * Returns a map of token addresses to their eventually consistent token balances for a single account. - */ -function useTokenBalancesWithLoadingIndicator(address, tokens) { - var validatedTokens = useMemo( - function () { - var _a - return (_a = - tokens === null || tokens === void 0 - ? void 0 - : tokens.filter(function (t) { - return isAddress(t === null || t === void 0 ? void 0 : t.address) !== false - })) !== null && _a !== void 0 - ? _a - : [] - }, - [tokens] - ) - var validatedTokenAddresses = useMemo( - function () { - return validatedTokens.map(function (vt) { - return vt.address - }) - }, - [validatedTokens] - ) - var balances = useMultipleContractSingleData( - validatedTokenAddresses, - ERC20Interface, - 'balanceOf', - useMemo( - function () { - return [address] - }, - [address] - ), - tokenBalancesGasRequirement - ) - var anyLoading = useMemo( - function () { - return balances.some(function (callState) { - return callState.loading - }) - }, - [balances] - ) - return useMemo( - function () { - return [ - address && validatedTokens.length > 0 - ? validatedTokens.reduce(function (memo, token, i) { - var _a, _b - var value = - (_b = - (_a = balances === null || balances === void 0 ? void 0 : balances[i]) === null || _a === void 0 - ? void 0 - : _a.result) === null || _b === void 0 - ? void 0 - : _b[0] - var amount = value ? JSBI.BigInt(value.toString()) : undefined - if (amount) { - memo[token.address] = CurrencyAmount.fromRawAmount(token, amount) - } - return memo - }, {}) - : {}, - anyLoading, - ] - }, - [address, validatedTokens, anyLoading, balances] - ) -} -function useTokenBalances(address, tokens) { - return useTokenBalancesWithLoadingIndicator(address, tokens)[0] -} -// get the balance for a single token/account combo -function useTokenBalance(account, token) { - var tokenBalances = useTokenBalances( - account, - useMemo( - function () { - return [token] - }, - [token] - ) - ) - if (!token) return undefined - return tokenBalances[token.address] -} -function useCurrencyBalances(account, currencies) { - var tokens = useMemo( - function () { - var _a - return (_a = - currencies === null || currencies === void 0 - ? void 0 - : currencies.filter(function (currency) { - var _a - return (_a = currency === null || currency === void 0 ? void 0 : currency.isToken) !== null && - _a !== void 0 - ? _a - : false - })) !== null && _a !== void 0 - ? _a - : [] - }, - [currencies] - ) - var tokenBalances = useTokenBalances(account, tokens) - var containsETH = useMemo( - function () { - var _a - return (_a = - currencies === null || currencies === void 0 - ? void 0 - : currencies.some(function (currency) { - return currency === null || currency === void 0 ? void 0 : currency.isNative - })) !== null && _a !== void 0 - ? _a - : false - }, - [currencies] - ) - var ethBalance = useNativeCurrencyBalances( - useMemo( - function () { - return containsETH ? [account] : [] - }, - [containsETH, account] - ) - ) - return useMemo( - function () { - var _a - return (_a = - currencies === null || currencies === void 0 - ? void 0 - : currencies.map(function (currency) { - if (!account || !currency) return undefined - if (currency.isToken) return tokenBalances[currency.address] - if (currency.isNative) return ethBalance[account] - return undefined - })) !== null && _a !== void 0 - ? _a - : [] - }, - [account, currencies, ethBalance, tokenBalances] - ) -} -function useCurrencyBalance(account, currency) { - return useCurrencyBalances( - account, - useMemo( - function () { - return [currency] - }, - [currency] - ) - )[0] -} +var InputPanel$1 = styled.div(templateObject_1$1h || (templateObject_1$1h = __makeTemplateObject(["\n ", "\n position: relative;\n border-radius: 1.25rem;\n background-color: ", ";\n z-index: 1;\n width: 100%;\n"], ["\n ", "\n position: relative;\n border-radius: 1.25rem;\n background-color: ", ";\n z-index: 1;\n width: 100%;\n"])), function (_a) { + var theme = _a.theme; + return theme.flexColumnNoWrap; +}, function (_a) { + var theme = _a.theme; + return theme.bg1; +}); +var ContainerRow = styled.div(templateObject_2$X || (templateObject_2$X = __makeTemplateObject(["\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 1.25rem;\n border: 1px solid ", ";\n transition: border-color 300ms ", ",\n color 500ms ", ";\n background-color: ", ";\n"], ["\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 1.25rem;\n border: 1px solid ", ";\n transition: border-color 300ms ", ",\n color 500ms ", ";\n background-color: ", ";\n"])), function (_a) { + var error = _a.error, theme = _a.theme; + return (error ? theme.red1 : theme.bg2); +}, function (_a) { + var error = _a.error; + return (error ? 'step-end' : 'step-start'); +}, function (_a) { + var error = _a.error; + return (error ? 'step-end' : 'step-start'); +}, function (_a) { + var theme = _a.theme; + return theme.bg1; +}); +var InputContainer = styled.div(templateObject_3$O || (templateObject_3$O = __makeTemplateObject(["\n flex: 1;\n padding: 1rem;\n"], ["\n flex: 1;\n padding: 1rem;\n"]))); +var Input$2 = styled.input(templateObject_4$D || (templateObject_4$D = __makeTemplateObject(["\n font-size: 1.25rem;\n outline: none;\n border: none;\n flex: 1 1 auto;\n width: 0;\n background-color: ", ";\n transition: color 300ms ", ";\n color: ", ";\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 500;\n width: 100%;\n ::placeholder {\n color: ", ";\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: ", ";\n }\n"], ["\n font-size: 1.25rem;\n outline: none;\n border: none;\n flex: 1 1 auto;\n width: 0;\n background-color: ", ";\n transition: color 300ms ", ";\n color: ", ";\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 500;\n width: 100%;\n ::placeholder {\n color: ", ";\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: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var error = _a.error; + return (error ? 'step-end' : 'step-start'); +}, function (_a) { + var error = _a.error, theme = _a.theme; + return (error ? theme.red1 : theme.text1); +}, function (_a) { + var theme = _a.theme; + return theme.text4; +}, function (_a) { + var theme = _a.theme; + return theme.text4; +}); +function AddressInputPanel(_a) { + var id = _a.id, _b = _a.className, className = _b === void 0 ? 'recipient-address-input' : _b, label = _a.label, placeholder = _a.placeholder, value = _a.value, onChange = _a.onChange; + var chainId = useActiveWeb3React().chainId; + var theme = useContext(ThemeContext); + var _c = useENS(value), address = _c.address, loading = _c.loading, name = _c.name; + var handleInput = useCallback(function (event) { + var input = event.target.value; + var withoutSpaces = input.replace(/\s+/g, ''); + onChange(withoutSpaces); + }, [onChange]); + var error = Boolean(value.length > 0 && !loading && !address); + return (jsx(InputPanel$1, __assign({ id: id }, { children: jsx(ContainerRow, __assign({ error: error }, { children: jsx(InputContainer, { children: jsxs(AutoColumn, __assign({ gap: "md" }, { children: [jsxs(RowBetween, { children: [jsx(ThemedText.Black, __assign({ color: theme.text2, fontWeight: 500, fontSize: 14 }, { children: label !== null && label !== void 0 ? label : jsx(Trans, { children: "Recipient" }, void 0) }), void 0), address && chainId && (jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, name !== null && name !== void 0 ? name : address, ExplorerDataType.ADDRESS), style: { fontSize: '14px' } }, { children: jsx(Trans, { children: "(View on Explorer)" }, void 0) }), void 0))] }, void 0), jsx(Input$2, { className: className, type: "text", autoComplete: "off", autoCorrect: "off", autoCapitalize: "off", spellCheck: "false", placeholder: placeholder !== null && placeholder !== void 0 ? placeholder : t(templateObject_5$u || (templateObject_5$u = __makeTemplateObject(["Wallet Address or ENS name"], ["Wallet Address or ENS name"]))), error: error, pattern: "^(0x[a-fA-F0-9]{40})$", onChange: handleInput, value: value }, void 0)] }), void 0) }, void 0) }), void 0) }), void 0)); +} +var templateObject_1$1h, templateObject_2$X, templateObject_3$O, templateObject_4$D, templateObject_5$u; -var alwaysTrue = function () { - return true -} -/** Creates a filter function that filters tokens that do not match the query. */ -function getTokenFilter(query) { - var searchingAddress = isAddress(query) - if (searchingAddress) { - var address_1 = searchingAddress.toLowerCase() - return function (t) { - return 'address' in t && address_1 === t.address.toLowerCase() - } - } - var queryParts = query - .toLowerCase() - .split(/\s+/) - .filter(function (s) { - return s.length > 0 - }) - if (queryParts.length === 0) return alwaysTrue - var match = function (s) { - var parts = s - .toLowerCase() - .split(/\s+/) - .filter(function (s) { - return s.length > 0 - }) - return queryParts.every(function (p) { - return ( - p.length === 0 || - parts.some(function (sp) { - return sp.startsWith(p) || sp.endsWith(p) - }) - ) - }) - } - return function (_a) { - var name = _a.name, - symbol = _a.symbol - return Boolean((symbol && match(symbol)) || (name && match(name))) - } +function useTheme() { + return useContext(ThemeContext); } -/** Sorts currency amounts (descending). */ -function balanceComparator(a, b) { - if (a && b) { - return a.greaterThan(b) ? -1 : a.equalTo(b) ? 0 : 1 - } else if (a === null || a === void 0 ? void 0 : a.greaterThan('0')) { - return -1 - } else if (b === null || b === void 0 ? void 0 : b.greaterThan('0')) { - return 1 - } - return 0 -} -/** Sorts tokens by currency amount (descending), then symbol (ascending). */ -function tokenComparator(balances, a, b) { - // Sorts by balances - var balanceComparison = balanceComparator(balances[a.address], balances[b.address]) - if (balanceComparison !== 0) return balanceComparison - // Sorts by symbol - if (a.symbol && b.symbol) { - return a.symbol.toLowerCase() < b.symbol.toLowerCase() ? -1 : 1 - } - return -1 -} -/** Sorts tokens by query, giving precedence to exact matches and partial matches. */ -function useSortTokensByQuery(query, tokens) { - return useMemo( - function () { - if (!tokens) { - return [] - } - var matches = query - .toLowerCase() - .split(/\s+/) - .filter(function (s) { - return s.length > 0 - }) - if (matches.length > 1) { - return tokens - } - var exactMatches = [] - var symbolSubtrings = [] - var rest = [] - // sort tokens by exact match -> subtring on symbol match -> rest - tokens.map(function (token) { - var _a, _b - if (((_a = token.symbol) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === matches[0]) { - return exactMatches.push(token) - } else if ( - (_b = token.symbol) === null || _b === void 0 - ? void 0 - : _b.toLowerCase().startsWith(query.toLowerCase().trim()) - ) { - return symbolSubtrings.push(token) - } else { - return rest.push(token) - } - }) - return __spreadArray( - __spreadArray(__spreadArray([], __read(exactMatches), false), __read(symbolSubtrings), false), - __read(rest), - false - ) - }, - [tokens, query] - ) -} +var BaseButton = styled(Button$1)(templateObject_1$1g || (templateObject_1$1g = __makeTemplateObject(["\n padding: ", ";\n width: ", ";\n font-weight: 500;\n text-align: center;\n border-radius: ", ";\n outline: none;\n border: 1px solid transparent;\n color: ", ";\n text-decoration: none;\n display: flex;\n justify-content: center;\n flex-wrap: nowrap;\n align-items: center;\n cursor: pointer;\n position: relative;\n z-index: 1;\n &:disabled {\n opacity: 50%;\n cursor: auto;\n pointer-events: none;\n }\n\n will-change: transform;\n transition: transform 450ms ease;\n transform: perspective(1px) translateZ(0);\n\n > * {\n user-select: none;\n }\n\n > a {\n text-decoration: none;\n }\n"], ["\n padding: ", ";\n width: ", ";\n font-weight: 500;\n text-align: center;\n border-radius: ", ";\n outline: none;\n border: 1px solid transparent;\n color: ", ";\n text-decoration: none;\n display: flex;\n justify-content: center;\n flex-wrap: nowrap;\n align-items: center;\n cursor: pointer;\n position: relative;\n z-index: 1;\n &:disabled {\n opacity: 50%;\n cursor: auto;\n pointer-events: none;\n }\n\n will-change: transform;\n transition: transform 450ms ease;\n transform: perspective(1px) translateZ(0);\n\n > * {\n user-select: none;\n }\n\n > a {\n text-decoration: none;\n }\n"])), function (_a) { + var padding = _a.padding; + return padding !== null && padding !== void 0 ? padding : '16px'; +}, function (_a) { + var width = _a.width; + return width !== null && width !== void 0 ? width : '100%'; +}, function (_a) { + var $borderRadius = _a.$borderRadius; + return $borderRadius !== null && $borderRadius !== void 0 ? $borderRadius : '20px'; +}, function (_a) { + var theme = _a.theme; + return theme.text1; +}); +var ButtonPrimary = styled(BaseButton)(templateObject_2$W || (templateObject_2$W = __makeTemplateObject(["\n background-color: ", ";\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n background-color: ", ";\n color: ", ";\n cursor: auto;\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n"], ["\n background-color: ", ";\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n background-color: ", ";\n color: ", ";\n cursor: auto;\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.primary1; +}, function (_a) { + var theme = _a.theme; + return darken(0.05, theme.primary1); +}, function (_a) { + var theme = _a.theme; + return darken(0.05, theme.primary1); +}, function (_a) { + var theme = _a.theme; + return darken(0.05, theme.primary1); +}, function (_a) { + var theme = _a.theme; + return darken(0.1, theme.primary1); +}, function (_a) { + var theme = _a.theme; + return darken(0.1, theme.primary1); +}, function (_a) { + var theme = _a.theme, altDisabledStyle = _a.altDisabledStyle, disabled = _a.disabled; + return altDisabledStyle ? (disabled ? theme.primary1 : theme.bg2) : theme.bg2; +}, function (_a) { + var altDisabledStyle = _a.altDisabledStyle, disabled = _a.disabled, theme = _a.theme; + return altDisabledStyle ? (disabled ? theme.white : theme.text2) : theme.text2; +}); +var ButtonLight = styled(BaseButton)(templateObject_3$N || (templateObject_3$N = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n font-size: 16px;\n font-weight: 500;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n :disabled {\n opacity: 0.4;\n :hover {\n cursor: auto;\n background-color: ", ";\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n }\n"], ["\n background-color: ", ";\n color: ", ";\n font-size: 16px;\n font-weight: 500;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n :disabled {\n opacity: 0.4;\n :hover {\n cursor: auto;\n background-color: ", ";\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.primary5; +}, function (_a) { + var theme = _a.theme; + return theme.primaryText1; +}, function (_a) { + var theme = _a.theme, disabled = _a.disabled; + return !disabled && darken(0.03, theme.primary5); +}, function (_a) { + var theme = _a.theme, disabled = _a.disabled; + return !disabled && darken(0.03, theme.primary5); +}, function (_a) { + var theme = _a.theme, disabled = _a.disabled; + return !disabled && darken(0.03, theme.primary5); +}, function (_a) { + var theme = _a.theme, disabled = _a.disabled; + return !disabled && darken(0.05, theme.primary5); +}, function (_a) { + var theme = _a.theme, disabled = _a.disabled; + return !disabled && darken(0.05, theme.primary5); +}, function (_a) { + var theme = _a.theme; + return theme.primary5; +}); +var ButtonGray = styled(BaseButton)(templateObject_4$C || (templateObject_4$C = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n font-size: 16px;\n font-weight: 500;\n\n &:hover {\n background-color: ", ";\n }\n &:active {\n background-color: ", ";\n }\n"], ["\n background-color: ", ";\n color: ", ";\n font-size: 16px;\n font-weight: 500;\n\n &:hover {\n background-color: ", ";\n }\n &:active {\n background-color: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var theme = _a.theme; + return theme.text2; +}, function (_a) { + var theme = _a.theme, disabled = _a.disabled; + return !disabled && darken(0.05, theme.bg2); +}, function (_a) { + var theme = _a.theme, disabled = _a.disabled; + return !disabled && darken(0.1, theme.bg2); +}); +var ButtonSecondary = styled(BaseButton)(templateObject_5$t || (templateObject_5$t = __makeTemplateObject(["\n border: 1px solid ", ";\n color: ", ";\n background-color: transparent;\n font-size: 16px;\n border-radius: 12px;\n padding: ", ";\n\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n border: 1px solid ", ";\n }\n &:hover {\n border: 1px solid ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n border: 1px solid ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n a:hover {\n text-decoration: none;\n }\n"], ["\n border: 1px solid ", ";\n color: ", ";\n background-color: transparent;\n font-size: 16px;\n border-radius: 12px;\n padding: ", ";\n\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n border: 1px solid ", ";\n }\n &:hover {\n border: 1px solid ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n border: 1px solid ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n a:hover {\n text-decoration: none;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.primary4; +}, function (_a) { + var theme = _a.theme; + return theme.primary1; +}, function (_a) { + var padding = _a.padding; + return (padding ? padding : '10px'); +}, function (_a) { + var theme = _a.theme; + return theme.primary4; +}, function (_a) { + var theme = _a.theme; + return theme.primary3; +}, function (_a) { + var theme = _a.theme; + return theme.primary3; +}, function (_a) { + var theme = _a.theme; + return theme.primary4; +}, function (_a) { + var theme = _a.theme; + return theme.primary3; +}); +var ButtonOutlined = styled(BaseButton)(templateObject_6$n || (templateObject_6$n = __makeTemplateObject(["\n border: 1px solid ", ";\n background-color: transparent;\n color: ", ";\n &:focus {\n box-shadow: 0 0 0 1px ", ";\n }\n &:hover {\n box-shadow: 0 0 0 1px ", ";\n }\n &:active {\n box-shadow: 0 0 0 1px ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"], ["\n border: 1px solid ", ";\n background-color: transparent;\n color: ", ";\n &:focus {\n box-shadow: 0 0 0 1px ", ";\n }\n &:hover {\n box-shadow: 0 0 0 1px ", ";\n }\n &:active {\n box-shadow: 0 0 0 1px ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}, function (_a) { + var theme = _a.theme; + return theme.text1; +}, function (_a) { + var theme = _a.theme; + return theme.bg4; +}, function (_a) { + var theme = _a.theme; + return theme.bg4; +}, function (_a) { + var theme = _a.theme; + return theme.bg4; +}); +styled(BaseButton)(templateObject_7$j || (templateObject_7$j = __makeTemplateObject(["\n background-color: ", ";\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n background-color: ", ";\n opacity: 50%;\n cursor: auto;\n }\n"], ["\n background-color: ", ";\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n background-color: ", ";\n opacity: 50%;\n cursor: auto;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.yellow3; +}, function (_a) { + var theme = _a.theme; + return darken(0.05, theme.yellow3); +}, function (_a) { + var theme = _a.theme; + return darken(0.05, theme.yellow3); +}, function (_a) { + var theme = _a.theme; + return darken(0.05, theme.yellow3); +}, function (_a) { + var theme = _a.theme; + return darken(0.1, theme.yellow3); +}, function (_a) { + var theme = _a.theme; + return darken(0.1, theme.yellow3); +}, function (_a) { + var theme = _a.theme; + return theme.yellow3; +}); +var ButtonEmpty = styled(BaseButton)(templateObject_8$g || (templateObject_8$g = __makeTemplateObject(["\n background-color: transparent;\n color: ", ";\n display: flex;\n justify-content: center;\n align-items: center;\n\n &:focus {\n text-decoration: underline;\n }\n &:hover {\n text-decoration: none;\n }\n &:active {\n text-decoration: none;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"], ["\n background-color: transparent;\n color: ", ";\n display: flex;\n justify-content: center;\n align-items: center;\n\n &:focus {\n text-decoration: underline;\n }\n &:hover {\n text-decoration: none;\n }\n &:active {\n text-decoration: none;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.primary1; +}); +styled(BaseButton)(templateObject_9$f || (templateObject_9$f = __makeTemplateObject(["\n padding: 0;\n width: fit-content;\n background: none;\n text-decoration: none;\n &:focus {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n text-decoration: underline;\n }\n &:hover {\n // text-decoration: underline;\n opacity: 0.9;\n }\n &:active {\n text-decoration: underline;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"], ["\n padding: 0;\n width: fit-content;\n background: none;\n text-decoration: none;\n &:focus {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n text-decoration: underline;\n }\n &:hover {\n // text-decoration: underline;\n opacity: 0.9;\n }\n &:active {\n text-decoration: underline;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"]))); +var ButtonConfirmedStyle = styled(BaseButton)(templateObject_10$b || (templateObject_10$b = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n /* border: 1px solid ", "; */\n\n &:disabled {\n opacity: 50%;\n background-color: ", ";\n color: ", ";\n cursor: auto;\n }\n"], ["\n background-color: ", ";\n color: ", ";\n /* border: 1px solid ", "; */\n\n &:disabled {\n opacity: 50%;\n background-color: ", ";\n color: ", ";\n cursor: auto;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.bg3; +}, function (_a) { + var theme = _a.theme; + return theme.text1; +}, function (_a) { + var theme = _a.theme; + return theme.green1; +}, function (_a) { + var theme = _a.theme; + return theme.bg2; +}, function (_a) { + var theme = _a.theme; + return theme.text2; +}); +var ButtonErrorStyle = styled(BaseButton)(templateObject_11$9 || (templateObject_11$9 = __makeTemplateObject(["\n background-color: ", ";\n border: 1px solid ", ";\n\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n box-shadow: none;\n background-color: ", ";\n border: 1px solid ", ";\n }\n"], ["\n background-color: ", ";\n border: 1px solid ", ";\n\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n box-shadow: none;\n background-color: ", ";\n border: 1px solid ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.red1; +}, function (_a) { + var theme = _a.theme; + return theme.red1; +}, function (_a) { + var theme = _a.theme; + return darken(0.05, theme.red1); +}, function (_a) { + var theme = _a.theme; + return darken(0.05, theme.red1); +}, function (_a) { + var theme = _a.theme; + return darken(0.05, theme.red1); +}, function (_a) { + var theme = _a.theme; + return darken(0.1, theme.red1); +}, function (_a) { + var theme = _a.theme; + return darken(0.1, theme.red1); +}, function (_a) { + var theme = _a.theme; + return theme.red1; +}, function (_a) { + var theme = _a.theme; + return theme.red1; +}); +function ButtonConfirmed(_a) { + var confirmed = _a.confirmed, altDisabledStyle = _a.altDisabledStyle, rest = __rest(_a, ["confirmed", "altDisabledStyle"]); + if (confirmed) { + return jsx(ButtonConfirmedStyle, __assign({}, rest), void 0); + } + else { + return jsx(ButtonPrimary, __assign({}, rest, { altDisabledStyle: altDisabledStyle }), void 0); + } +} +function ButtonError(_a) { + var error = _a.error, rest = __rest(_a, ["error"]); + if (error) { + return jsx(ButtonErrorStyle, __assign({}, rest), void 0); + } + else { + return jsx(ButtonPrimary, __assign({}, rest), void 0); + } +} +styled(ButtonOutlined)(templateObject_12$9 || (templateObject_12$9 = __makeTemplateObject(["\n border: 1px solid;\n border-color: ", ";\n"], ["\n border: 1px solid;\n border-color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.primary1; +}); +styled.div(templateObject_13$5 || (templateObject_13$5 = __makeTemplateObject(["\n height: 17px;\n width: 17px;\n border-radius: 50%;\n background-color: ", ";\n display: flex;\n align-items: center;\n justify-content: center;\n"], ["\n height: 17px;\n width: 17px;\n border-radius: 50%;\n background-color: ", ";\n display: flex;\n align-items: center;\n justify-content: center;\n"])), function (_a) { + var theme = _a.theme; + return theme.primary1; +}); +styled.div(templateObject_14$5 || (templateObject_14$5 = __makeTemplateObject(["\n width: 20px;\n padding: 0 10px;\n position: absolute;\n top: 11px;\n right: 15px;\n"], ["\n width: 20px;\n padding: 0 10px;\n position: absolute;\n top: 11px;\n right: 15px;\n"]))); +styled(Check)(templateObject_15$3 || (templateObject_15$3 = __makeTemplateObject(["\n size: 13px;\n"], ["\n size: 13px;\n"]))); +var templateObject_1$1g, templateObject_2$W, templateObject_3$N, templateObject_4$C, templateObject_5$t, templateObject_6$n, templateObject_7$j, templateObject_8$g, templateObject_9$f, templateObject_10$b, templateObject_11$9, templateObject_12$9, templateObject_13$5, templateObject_14$5, templateObject_15$3; -/** - * Token instances created from token info on a token list. - */ -var WrappedTokenInfo = /** @class */ (function () { - function WrappedTokenInfo(tokenInfo, list) { - this.isNative = false - this.isToken = true - this._checksummedAddress = null - this._tags = null - this.tokenInfo = tokenInfo - this.list = list - } - Object.defineProperty(WrappedTokenInfo.prototype, 'address', { - get() { - if (this._checksummedAddress) return this._checksummedAddress - var checksummedAddress = isAddress(this.tokenInfo.address) - if (!checksummedAddress) throw new Error('Invalid token address: ' + this.tokenInfo.address) - return (this._checksummedAddress = checksummedAddress) - }, - enumerable: false, - configurable: true, - }) - Object.defineProperty(WrappedTokenInfo.prototype, 'chainId', { - get() { - return this.tokenInfo.chainId - }, - enumerable: false, - configurable: true, - }) - Object.defineProperty(WrappedTokenInfo.prototype, 'decimals', { - get() { - return this.tokenInfo.decimals - }, - enumerable: false, - configurable: true, - }) - Object.defineProperty(WrappedTokenInfo.prototype, 'name', { - get() { - return this.tokenInfo.name - }, - enumerable: false, - configurable: true, - }) - Object.defineProperty(WrappedTokenInfo.prototype, 'symbol', { - get() { - return this.tokenInfo.symbol - }, - enumerable: false, - configurable: true, - }) - Object.defineProperty(WrappedTokenInfo.prototype, 'logoURI', { - get() { - return this.tokenInfo.logoURI - }, - enumerable: false, - configurable: true, - }) - Object.defineProperty(WrappedTokenInfo.prototype, 'tags', { - get() { - var _a - if (this._tags !== null) return this._tags - if (!this.tokenInfo.tags) return (this._tags = []) - var listTags = (_a = this.list) === null || _a === void 0 ? void 0 : _a.tags - if (!listTags) return (this._tags = []) - return (this._tags = this.tokenInfo.tags.map(function (tagId) { - return __assign(__assign({}, listTags[tagId]), { id: tagId }) - })) - }, - enumerable: false, - configurable: true, - }) - WrappedTokenInfo.prototype.equals = function (other) { - return other.chainId === this.chainId && other.isToken && other.address.toLowerCase() === this.address.toLowerCase() - } - WrappedTokenInfo.prototype.sortsBefore = function (other) { - if (this.equals(other)) throw new Error('Addresses should not be equal') - return this.address.toLowerCase() < other.address.toLowerCase() - } - Object.defineProperty(WrappedTokenInfo.prototype, 'wrapped', { - get() { - return this - }, - enumerable: false, - configurable: true, - }) - return WrappedTokenInfo -})() - -var mapCache = typeof WeakMap !== 'undefined' ? new WeakMap() : null -function tokensToChainTokenMap(tokens) { - var cached = mapCache === null || mapCache === void 0 ? void 0 : mapCache.get(tokens) - if (cached) return cached - var _a = __read(Array.isArray(tokens) ? [undefined, tokens] : [tokens, tokens.tokens], 2), - list = _a[0], - infos = _a[1] - var map = infos.reduce(function (map, info) { - var _a - var token = new WrappedTokenInfo(info, list) - if (((_a = map[token.chainId]) === null || _a === void 0 ? void 0 : _a[token.address]) !== undefined) { - console.warn('Duplicate token skipped: ' + token.address) - return map - } - if (!map[token.chainId]) { - map[token.chainId] = {} - } - map[token.chainId][token.address] = { token, list } - return map - }, {}) - mapCache === null || mapCache === void 0 ? void 0 : mapCache.set(tokens, map) - return map +var isClient = typeof window === 'object'; +function getSize() { + return { + width: isClient ? window.innerWidth : undefined, + height: isClient ? window.innerHeight : undefined, + }; +} +// https://usehooks.com/useWindowSize/ +function useWindowSize() { + var _a = __read(useState(getSize), 2), windowSize = _a[0], setWindowSize = _a[1]; + useEffect(function () { + function handleResize() { + setWindowSize(getSize()); + } + if (isClient) { + window.addEventListener('resize', handleResize); + return function () { + window.removeEventListener('resize', handleResize); + }; + } + return undefined; + }, []); + return windowSize; } -atom({}) - -// parse a name or symbol from a token response -var BYTES32_REGEX = /^0x[a-fA-F0-9]{64}$/ -function parseStringOrBytes32(str, bytes32, defaultValue) { - return str && str.length > 0 - ? str - : // need to check for proper bytes string and valid terminator - bytes32 && BYTES32_REGEX.test(bytes32) && arrayify(bytes32)[31] === 0 - ? parseBytes32String(bytes32) - : defaultValue -} -/** - * Returns a Token from the tokenAddress. - * Returns null if token is loading or null was passed. - * Returns undefined if tokenAddress is invalid or token does not exist. - */ -function useTokenFromMap(tokens, tokenAddress) { - var chainId = useActiveWeb3React().chainId - var address = isAddress(tokenAddress) - var tokenContract = useTokenContract(address ? address : undefined, false) - var tokenContractBytes32 = useBytes32TokenContract(address ? address : undefined, false) - var token = address ? tokens[address] : undefined - var tokenName = useSingleCallResult(token ? undefined : tokenContract, 'name', undefined, NEVER_RELOAD) - var tokenNameBytes32 = useSingleCallResult(token ? undefined : tokenContractBytes32, 'name', undefined, NEVER_RELOAD) - var symbol = useSingleCallResult(token ? undefined : tokenContract, 'symbol', undefined, NEVER_RELOAD) - var symbolBytes32 = useSingleCallResult(token ? undefined : tokenContractBytes32, 'symbol', undefined, NEVER_RELOAD) - var decimals = useSingleCallResult(token ? undefined : tokenContract, 'decimals', undefined, NEVER_RELOAD) - return useMemo( - function () { - var _a, _b, _c, _d - if (token) return token - if (tokenAddress === null) return null - if (!chainId || !address) return undefined - if (decimals.loading || symbol.loading || tokenName.loading) return null - if (decimals.result) { - return new Token( - chainId, - address, - decimals.result[0], - parseStringOrBytes32( - (_a = symbol.result) === null || _a === void 0 ? void 0 : _a[0], - (_b = symbolBytes32.result) === null || _b === void 0 ? void 0 : _b[0], - 'UNKNOWN' - ), - parseStringOrBytes32( - (_c = tokenName.result) === null || _c === void 0 ? void 0 : _c[0], - (_d = tokenNameBytes32.result) === null || _d === void 0 ? void 0 : _d[0], - 'Unknown Token' - ) - ) - } - return undefined - }, - [ - address, - chainId, - decimals.loading, - decimals.result, - symbol.loading, - symbol.result, - symbolBytes32.result, - token, - tokenAddress, - tokenName.loading, - tokenName.result, - tokenNameBytes32.result, - ] - ) -} -/** - * Returns a Currency from the currencyId. - * Returns null if currency is loading or null was passed. - * Returns undefined if currencyId is invalid or token does not exist. - */ -function useCurrencyFromMap(tokens, currencyId) { - var _a - var nativeCurrency = useNativeCurrency() - var isNative = Boolean( - nativeCurrency && (currencyId === null || currencyId === void 0 ? void 0 : currencyId.toUpperCase()) === 'ETH' - ) - var token = useTokenFromMap(tokens, isNative ? undefined : currencyId) - if (currencyId === null || currencyId === undefined) return currencyId - // this case so we use our builtin wrapped token instead of wrapped tokens on token lists - var wrappedNative = nativeCurrency === null || nativeCurrency === void 0 ? void 0 : nativeCurrency.wrapped - if ( - ((_a = wrappedNative === null || wrappedNative === void 0 ? void 0 : wrappedNative.address) === null || - _a === void 0 - ? void 0 - : _a.toUpperCase()) === (currencyId === null || currencyId === void 0 ? void 0 : currencyId.toUpperCase()) - ) - return wrappedNative - return isNative ? nativeCurrency : token +// eslint-disable-next-line react/prop-types +function Confetti(_a) { + var start = _a.start, variant = _a.variant; + var _b = useWindowSize(), width = _b.width, height = _b.height; + var _variant = variant ? variant : height && width && height > 1.5 * width ? 'bottom' : variant; + return start && width && height ? (jsx(ReactConfetti, { style: { zIndex: 1401 }, numberOfPieces: 400, recycle: false, run: true, width: width, height: height, confettiSource: { + h: height, + w: width, + x: 0, + y: _variant === 'top' ? height * 0.25 : _variant === 'bottom' ? height * 0.75 : height * 0.5, + }, initialVelocityX: 15, initialVelocityY: 30, gravity: 0.45, tweenDuration: 100, wind: 0.05 }, void 0)) : null; } -var DEFAULT_LIST_PRIORITIES = DEFAULT_LIST_OF_LISTS.reduce(function (memo, listUrl, index) { - memo[listUrl] = index + 1 - return memo -}, {}) -// use ordering of default list of lists to assign priority -function sortByListPriority(urlA, urlB) { - if (DEFAULT_LIST_PRIORITIES[urlA] && DEFAULT_LIST_PRIORITIES[urlB]) { - return DEFAULT_LIST_PRIORITIES[urlA] - DEFAULT_LIST_PRIORITIES[urlB] - } - return 0 -} +var uImage = "10f062d02df4af77.png"; + +var noise = "f158a440053a5ad2.png"; + +var xlUnicorn = "c2cd04251aa24c34.png"; + +var DataCard = styled(AutoColumn)(templateObject_1$1f || (templateObject_1$1f = __makeTemplateObject(["\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #2172e5 100%);\n border-radius: 12px;\n width: 100%;\n position: relative;\n overflow: hidden;\n"], ["\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #2172e5 100%);\n border-radius: 12px;\n width: 100%;\n position: relative;\n overflow: hidden;\n"]))); +var CardBGImage = styled.span(templateObject_2$V || (templateObject_2$V = __makeTemplateObject(["\n background: url(", ");\n width: 1000px;\n height: 600px;\n position: absolute;\n border-radius: 12px;\n opacity: 0.4;\n top: -100px;\n left: -100px;\n transform: rotate(-15deg);\n user-select: none;\n ", "\n"], ["\n background: url(", ");\n width: 1000px;\n height: 600px;\n position: absolute;\n border-radius: 12px;\n opacity: 0.4;\n top: -100px;\n left: -100px;\n transform: rotate(-15deg);\n user-select: none;\n ", "\n"])), uImage, function (_a) { + var desaturate = _a.desaturate; + return desaturate && "filter: saturate(0)"; +}); +var CardBGImageSmaller = styled.span(templateObject_3$M || (templateObject_3$M = __makeTemplateObject(["\n background: url(", ");\n width: 1200px;\n height: 1200px;\n position: absolute;\n border-radius: 12px;\n top: -300px;\n left: -300px;\n opacity: 0.4;\n user-select: none;\n\n ", "\n"], ["\n background: url(", ");\n width: 1200px;\n height: 1200px;\n position: absolute;\n border-radius: 12px;\n top: -300px;\n left: -300px;\n opacity: 0.4;\n user-select: none;\n\n ", "\n"])), xlUnicorn, function (_a) { + var desaturate = _a.desaturate; + return desaturate && "filter: saturate(0)"; +}); +var CardNoise = styled.span(templateObject_4$B || (templateObject_4$B = __makeTemplateObject(["\n background: url(", ");\n background-size: cover;\n mix-blend-mode: overlay;\n border-radius: 12px;\n width: 100%;\n height: 100%;\n opacity: 0.15;\n position: absolute;\n top: 0;\n left: 0;\n user-select: none;\n"], ["\n background: url(", ");\n background-size: cover;\n mix-blend-mode: overlay;\n border-radius: 12px;\n width: 100%;\n height: 100%;\n opacity: 0.15;\n position: absolute;\n top: 0;\n left: 0;\n user-select: none;\n"])), noise); +var CardSection = styled(AutoColumn)(templateObject_5$s || (templateObject_5$s = __makeTemplateObject(["\n padding: 1rem;\n z-index: 1;\n opacity: ", ";\n"], ["\n padding: 1rem;\n z-index: 1;\n opacity: ", ";\n"])), function (_a) { + var disabled = _a.disabled; + return disabled && '0.4'; +}); +var Break$1 = styled.div(templateObject_6$m || (templateObject_6$m = __makeTemplateObject(["\n width: 100%;\n background-color: rgba(255, 255, 255, 0.2);\n height: 1px;\n"], ["\n width: 100%;\n background-color: rgba(255, 255, 255, 0.2);\n height: 1px;\n"]))); +var templateObject_1$1f, templateObject_2$V, templateObject_3$M, templateObject_4$B, templateObject_5$s, templateObject_6$m; + +var parser = new UAParser(window.navigator.userAgent); +var type$1 = parser.getDevice().type; +var userAgent = parser.getResult(); +var isMobile = type$1 === 'mobile' || type$1 === 'tablet'; + +var AnimatedDialogOverlay = animated(DialogOverlay); +// eslint-disable-next-line @typescript-eslint/no-unused-vars +var StyledDialogOverlay = styled(AnimatedDialogOverlay)(templateObject_1$1e || (templateObject_1$1e = __makeTemplateObject(["\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: ", ";\n }\n"], ["\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: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.modalBG; +}); +var AnimatedDialogContent = animated(DialogContent); +// destructure to not pass custom props to Dialog DOM element +// eslint-disable-next-line @typescript-eslint/no-unused-vars +var StyledDialogContent = styled(function (_a) { + _a.minHeight; _a.maxHeight; _a.mobile; _a.isOpen; var rest = __rest(_a, ["minHeight", "maxHeight", "mobile", "isOpen"]); + return (jsx(AnimatedDialogContent, __assign({}, rest), void 0)); +}).attrs({ + 'aria-label': 'dialog', +})(templateObject_7$i || (templateObject_7$i = __makeTemplateObject(["\n overflow-y: auto;\n\n &[data-reach-dialog-content] {\n margin: 0 0 2rem 0;\n background-color: ", ";\n border: 1px solid ", ";\n box-shadow: 0 4px 8px 0 ", ";\n padding: 0px;\n width: 50vw;\n overflow-y: auto;\n overflow-x: hidden;\n\n align-self: ", ";\n\n max-width: 420px;\n ", "\n ", "\n display: flex;\n border-radius: 20px;\n ", "\n ", "\n }\n"], ["\n overflow-y: auto;\n\n &[data-reach-dialog-content] {\n margin: 0 0 2rem 0;\n background-color: ", ";\n border: 1px solid ", ";\n box-shadow: 0 4px 8px 0 ", ";\n padding: 0px;\n width: 50vw;\n overflow-y: auto;\n overflow-x: hidden;\n\n align-self: ", ";\n\n max-width: 420px;\n ", "\n ", "\n display: flex;\n border-radius: 20px;\n ", "\n ", "\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.bg0; +}, function (_a) { + var theme = _a.theme; + return theme.bg1; +}, function (_a) { + var theme = _a.theme; + return transparentize(0.95, theme.shadow1); +}, function (_a) { + var mobile = _a.mobile; + return (mobile ? 'flex-end' : 'center'); +}, function (_a) { + var maxHeight = _a.maxHeight; + return maxHeight && css(templateObject_2$U || (templateObject_2$U = __makeTemplateObject(["\n max-height: ", "vh;\n "], ["\n max-height: ", "vh;\n "])), maxHeight); +}, function (_a) { + var minHeight = _a.minHeight; + return minHeight && css(templateObject_3$L || (templateObject_3$L = __makeTemplateObject(["\n min-height: ", "vh;\n "], ["\n min-height: ", "vh;\n "])), minHeight); +}, function (_a) { + var theme = _a.theme; + return theme.mediaWidth.upToMedium(templateObject_4$A || (templateObject_4$A = __makeTemplateObject(["\n width: 65vw;\n margin: 0;\n "], ["\n width: 65vw;\n margin: 0;\n "]))); +}, function (_a) { + var theme = _a.theme, mobile = _a.mobile; + return theme.mediaWidth.upToSmall(templateObject_6$l || (templateObject_6$l = __makeTemplateObject(["\n width: 85vw;\n ", "\n "], ["\n width: 85vw;\n ", "\n "])), mobile && css(templateObject_5$r || (templateObject_5$r = __makeTemplateObject(["\n width: 100vw;\n border-radius: 20px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n "], ["\n width: 100vw;\n border-radius: 20px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n "])))); +}); +function Modal(_a) { + var isOpen = _a.isOpen, onDismiss = _a.onDismiss, _b = _a.minHeight, minHeight = _b === void 0 ? false : _b, _c = _a.maxHeight, maxHeight = _c === void 0 ? 90 : _c, initialFocusRef = _a.initialFocusRef, children = _a.children; + var fadeTransition = useTransition(isOpen, null, { + config: { duration: 200 }, + from: { opacity: 0 }, + enter: { opacity: 1 }, + leave: { opacity: 0 }, + }); + var _d = __read(useSpring(function () { return ({ y: 0, config: { mass: 1, tension: 210, friction: 20 } }); }), 2), y = _d[0].y, set = _d[1]; + var bind = useGesture({ + onDrag: function (state) { + set({ + y: state.down ? state.movement[1] : 0, + }); + if (state.movement[1] > 300 || (state.velocity > 3 && state.direction[1] > 0)) { + onDismiss(); + } + }, + }); + return (jsx(Fragment, { children: fadeTransition.map(function (_a) { + var item = _a.item, key = _a.key, props = _a.props; + return item && (jsx(StyledDialogOverlay, __assign({ style: props, onDismiss: onDismiss, initialFocusRef: initialFocusRef, unstable_lockFocusAcrossFrames: false }, { children: jsxs(StyledDialogContent, __assign({}, (isMobile + ? __assign(__assign({}, bind()), { style: { transform: y.interpolate(function (y) { return "translateY(" + (y > 0 ? y : 0) + "px)"; }) } }) : {}), { "aria-label": "dialog content", minHeight: minHeight, maxHeight: maxHeight, mobile: isMobile }, { children: [!initialFocusRef && isMobile ? jsx("div", { tabIndex: 1 }, void 0) : null, children] }), void 0) }), key)); + }) }, void 0)); +} +var templateObject_1$1e, templateObject_2$U, templateObject_3$L, templateObject_4$A, templateObject_5$r, templateObject_6$l, templateObject_7$i; + +var ContentWrapper$4 = styled(AutoColumn)(templateObject_1$1d || (templateObject_1$1d = __makeTemplateObject(["\n width: 100%;\n"], ["\n width: 100%;\n"]))); +var ModalUpper$1 = styled(DataCard)(templateObject_2$T || (templateObject_2$T = __makeTemplateObject(["\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n"], ["\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n"]))); +var ConfirmOrLoadingWrapper$1 = styled.div(templateObject_3$K || (templateObject_3$K = __makeTemplateObject(["\n width: 100%;\n padding: 24px;\n position: relative;\n background: ", ";\n"], ["\n width: 100%;\n padding: 24px;\n position: relative;\n background: ", ";\n"])), function (_a) { + var activeBG = _a.activeBG; + return activeBG && + 'radial-gradient(76.02% 75.41% at 1.84% 0%, rgba(255, 0, 122, 0.2) 0%, rgba(33, 114, 229, 0.2) 100%), #FFFFFF;'; +}); +var ConfirmedIcon$2 = styled(ColumnCenter)(templateObject_4$z || (templateObject_4$z = __makeTemplateObject(["\n padding: 60px 0;\n"], ["\n padding: 60px 0;\n"]))); +function AddressClaimModal(_a) { + var _b, _c; + var isOpen = _a.isOpen, onDismiss = _a.onDismiss; + var chainId = useActiveWeb3React().chainId; + // state for smart contract input + var _d = __read(useState(''), 2), typed = _d[0], setTyped = _d[1]; + function handleRecipientType(val) { + setTyped(val); + } + // monitor for third party recipient of claim + var parsedAddress = useENS(typed).address; + // used for UI loading states + var _e = __read(useState(false), 2), attempting = _e[0], setAttempting = _e[1]; + // monitor the status of the claim from contracts and txns + var claimCallback = useClaimCallback(parsedAddress).claimCallback; + var unclaimedAmount = useUserUnclaimedAmount(parsedAddress); + // check if the user has something available + var hasAvailableClaim = useUserHasAvailableClaim(parsedAddress); + var _f = __read(useState(), 2), hash = _f[0], setHash = _f[1]; + // monitor the status of the claim from contracts and txns + var claimPending = useIsTransactionPending(hash !== null && hash !== void 0 ? hash : ''); + var claimConfirmed = hash && !claimPending; + // use the hash to monitor this txn + function onClaim() { + setAttempting(true); + claimCallback() + .then(function (hash) { + setHash(hash); + }) + // reset modal and log error + .catch(function (error) { + setAttempting(false); + console.log(error); + }); + } + function wrappedOnDismiss() { + setAttempting(false); + setHash(undefined); + setTyped(''); + onDismiss(); + } + return (jsxs(Modal, __assign({ isOpen: isOpen, onDismiss: wrappedOnDismiss, maxHeight: 90 }, { children: [jsx(Confetti, { start: Boolean(isOpen && claimConfirmed && attempting) }, void 0), !attempting && (jsxs(ContentWrapper$4, __assign({ gap: "lg" }, { children: [jsxs(ModalUpper$1, { children: [jsx(CardBGImage, {}, void 0), jsx(CardNoise, {}, void 0), jsxs(CardSection, __assign({ gap: "md" }, { children: [jsxs(RowBetween, { children: [jsx(ThemedText.White, __assign({ fontWeight: 500 }, { children: jsx(Trans, { children: "Claim UNI Token" }, void 0) }), void 0), jsx(CloseIcon$2, { onClick: wrappedOnDismiss, style: { zIndex: 99 }, stroke: "white" }, void 0)] }, void 0), jsx(ThemedText.White, __assign({ fontWeight: 700, fontSize: 36 }, { children: jsxs(Trans, { children: [unclaimedAmount === null || unclaimedAmount === void 0 ? void 0 : unclaimedAmount.toFixed(0, (_b = { groupSeparator: ',' }) !== null && _b !== void 0 ? _b : '-'), " UNI"] }, void 0) }), void 0)] }), void 0), jsx(Break$1, {}, void 0)] }, void 0), jsxs(AutoColumn, __assign({ gap: "md", style: { padding: '1rem', paddingTop: '0' }, justify: "center" }, { children: [jsx(ThemedText.SubHeader, __assign({ fontWeight: 500 }, { children: jsx(Trans, { children: "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission." }, void 0) }), void 0), jsx(AddressInputPanel, { value: typed, onChange: handleRecipientType }, void 0), parsedAddress && !hasAvailableClaim && (jsx(ThemedText.Error, __assign({ error: true }, { children: jsx(Trans, { children: "Address has no available claim" }, void 0) }), void 0)), jsx(ButtonPrimary, __assign({ disabled: !isAddress$1(parsedAddress !== null && parsedAddress !== void 0 ? parsedAddress : '') || !hasAvailableClaim, padding: "16px 16px", width: "100%", "$borderRadius": "12px", mt: "1rem", onClick: onClaim }, { children: jsx(Trans, { children: "Claim UNI" }, void 0) }), void 0)] }), void 0)] }), void 0)), (attempting || claimConfirmed) && (jsxs(ConfirmOrLoadingWrapper$1, __assign({ activeBG: true }, { children: [jsx(CardNoise, {}, void 0), jsx(CardBGImageSmaller, { desaturate: true }, void 0), jsxs(RowBetween, { children: [jsx("div", {}, void 0), jsx(CloseIcon$2, { onClick: wrappedOnDismiss, style: { zIndex: 99 }, stroke: "black" }, void 0)] }, void 0), jsx(ConfirmedIcon$2, { children: !claimConfirmed ? (jsx(CustomLightSpinner, { src: Circle$1, alt: "loader", size: '90px' }, void 0)) : (jsx(UniTokenAnimated, { width: "72px", src: tokenLogo, alt: "UNI logo" }, void 0)) }, void 0), jsxs(AutoColumn, __assign({ gap: "100px", justify: 'center' }, { children: [jsxs(AutoColumn, __assign({ gap: "12px", justify: 'center' }, { children: [jsx(ThemedText.LargeHeader, __assign({ fontWeight: 600, color: "black" }, { children: claimConfirmed ? jsx(Trans, { children: "Claimed" }, void 0) : jsx(Trans, { children: "Claiming" }, void 0) }), void 0), !claimConfirmed && (jsx(Text$1, __assign({ fontSize: 36, color: '#ff007a', fontWeight: 800 }, { children: jsxs(Trans, { children: [unclaimedAmount === null || unclaimedAmount === void 0 ? void 0 : unclaimedAmount.toFixed(0, (_c = { groupSeparator: ',' }) !== null && _c !== void 0 ? _c : '-'), " UNI"] }, void 0) }), void 0)), parsedAddress && (jsx(ThemedText.LargeHeader, __assign({ fontWeight: 600, color: "black" }, { children: jsxs(Trans, { children: ["for ", shortenAddress(parsedAddress)] }, void 0) }), void 0))] }), void 0), claimConfirmed && (jsx(Fragment, { children: jsxs(ThemedText.SubHeader, __assign({ fontWeight: 500, color: "black" }, { children: [jsxs("span", __assign({ role: "img", "aria-label": "party-hat" }, { children: ["\uD83C\uDF89", ' '] }), void 0), jsx(Trans, { children: "Welcome to team Unicorn :) " }, void 0), jsx("span", __assign({ role: "img", "aria-label": "party-hat" }, { children: "\uD83C\uDF89" }), void 0)] }), void 0) }, void 0)), attempting && !hash && (jsx(ThemedText.SubHeader, __assign({ color: "black" }, { children: jsx(Trans, { children: "Confirm this transaction in your wallet" }, void 0) }), void 0)), attempting && hash && !claimConfirmed && chainId && hash && (jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, hash, ExplorerDataType.TRANSACTION), style: { zIndex: 99 } }, { children: jsx(Trans, { children: "View transaction on Explorer" }, void 0) }), void 0))] }), void 0)] }), void 0))] }), void 0)); +} +var templateObject_1$1d, templateObject_2$T, templateObject_3$K, templateObject_4$z; + +var _a$a; +var ApplicationModal; +(function (ApplicationModal) { + ApplicationModal[ApplicationModal["WALLET"] = 0] = "WALLET"; + ApplicationModal[ApplicationModal["SETTINGS"] = 1] = "SETTINGS"; + ApplicationModal[ApplicationModal["SELF_CLAIM"] = 2] = "SELF_CLAIM"; + ApplicationModal[ApplicationModal["ADDRESS_CLAIM"] = 3] = "ADDRESS_CLAIM"; + ApplicationModal[ApplicationModal["CLAIM_POPUP"] = 4] = "CLAIM_POPUP"; + ApplicationModal[ApplicationModal["MENU"] = 5] = "MENU"; + ApplicationModal[ApplicationModal["DELEGATE"] = 6] = "DELEGATE"; + ApplicationModal[ApplicationModal["VOTE"] = 7] = "VOTE"; + ApplicationModal[ApplicationModal["POOL_OVERVIEW_OPTIONS"] = 8] = "POOL_OVERVIEW_OPTIONS"; + ApplicationModal[ApplicationModal["NETWORK_SELECTOR"] = 9] = "NETWORK_SELECTOR"; + ApplicationModal[ApplicationModal["PRIVACY_POLICY"] = 10] = "PRIVACY_POLICY"; +})(ApplicationModal || (ApplicationModal = {})); +var initialState$8 = { + chainId: null, + openModal: null, + popupList: [], +}; +var applicationSlice = createSlice({ + name: 'application', + initialState: initialState$8, + reducers: { + updateChainId: function (state, action) { + var chainId = action.payload.chainId; + state.chainId = chainId; + }, + setOpenModal: function (state, action) { + state.openModal = action.payload; + }, + addPopup: function (state, _a) { + var _b = _a.payload, content = _b.content, key = _b.key, _c = _b.removeAfterMs, removeAfterMs = _c === void 0 ? DEFAULT_TXN_DISMISS_MS : _c; + state.popupList = (key ? state.popupList.filter(function (popup) { return popup.key !== key; }) : state.popupList).concat([ + { + key: key || nanoid(), + show: true, + content: content, + removeAfterMs: removeAfterMs, + }, + ]); + }, + removePopup: function (state, _a) { + var key = _a.payload.key; + state.popupList.forEach(function (p) { + if (p.key === key) { + p.show = false; + } + }); + }, + }, +}); +var updateChainId = (_a$a = applicationSlice.actions, _a$a.updateChainId), setOpenModal = _a$a.setOpenModal, addPopup = _a$a.addPopup, removePopup = _a$a.removePopup; +var application = applicationSlice.reducer; + +var Field$3; +(function (Field) { + Field["LIQUIDITY_PERCENT"] = "LIQUIDITY_PERCENT"; + Field["LIQUIDITY"] = "LIQUIDITY"; + Field["CURRENCY_A"] = "CURRENCY_A"; + Field["CURRENCY_B"] = "CURRENCY_B"; +})(Field$3 || (Field$3 = {})); +var typeInput$3 = createAction('burn/typeInputBurn'); + +var initialState$7 = { + independentField: Field$3.LIQUIDITY_PERCENT, + typedValue: '0', +}; +var burn = createReducer(initialState$7, function (builder) { + return builder.addCase(typeInput$3, function (state, _a) { + var _b = _a.payload, field = _b.field, typedValue = _b.typedValue; + return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); + }); +}); -var name$1 = 'Broken Token List' -var timestamp$1 = '2021-01-05T20:47:02.923Z' -var version$1 = { - major: 1, - minor: 0, - patch: 0, -} -var tags$1 = {} -var logoURI$1 = 'ipfs://QmNa8mQkrNKp1WEEeGjFezDmDeodkWRevGFN8JCV7b4Xir' -var keywords$1 = ['uniswap', 'broken'] -var tokens$1 = [ - { - name: 'UNI HODL', - address: '0x4bf5dc91E2555449293D7824028Eb8Fe5879B689', - symbol: 'UniH', - decimals: 18, - chainId: 1, - logoURI: '', - }, -] -var BROKEN_LIST = { - name: name$1, - timestamp: timestamp$1, - version: version$1, - tags: tags$1, - logoURI: logoURI$1, - keywords: keywords$1, - tokens: tokens$1, -} +var selectPercent = createAction('burnV3/selectBurnPercent'); -var name = 'Unsupported Tokens' -var timestamp = '2021-01-05T20:47:02.923Z' -var version = { - major: 1, - minor: 0, - patch: 0, -} -var tags = {} -var logoURI = 'ipfs://QmNa8mQkrNKp1WEEeGjFezDmDeodkWRevGFN8JCV7b4Xir' -var keywords = ['uniswap', 'unsupported'] -var tokens = [ - { - name: 'Gold Tether', - address: '0x4922a015c4407F87432B179bb209e125432E4a2A', - symbol: 'XAUt', - decimals: 6, - chainId: 1, - logoURI: - 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4922a015c4407F87432B179bb209e125432E4a2A/logo.png', - }, - { - name: 'Grump Cat', - address: '0x93B2FfF814FCaEFFB01406e80B4Ecd89Ca6A021b', - symbol: 'GRUMPY', - decimals: 9, - chainId: 1, - logoURI: - 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4922a015c4407F87432B179bb209e125432E4a2A/logo.png', - }, - { - name: 'apeUSD-UMA Synthetic USD (Dec 2021)', - address: '0xfA5e27893aee4805283D86e4283Da64F8c72dd56', - symbol: 'apeUSD-UMA-DEC21', - decimals: 18, - chainId: 1, - logoURI: '', - }, - { - chainId: 1, - address: '0xc6b11850241c5127eab73af4b6c68bc267cbbff4', - name: 'oWETHp Put 360 DEC2520', - symbol: 'oWETH-360P-12/25/20', - decimals: 7, - }, - { - chainId: 1, - name: 'oYFIp Put 25000 OCT0220', - address: '0x452b421be5b30f0c6ad8c3f03c06bdaab4f5c56c', - symbol: 'oYFI-25000P-10/02/20', - decimals: 7, - }, - { - chainId: 1, - name: 'oWETHp Put 360 OCT3020', - address: '0x0578779e746d7186253a36cf651ea786acfcf087', - symbol: 'oWETH-360P-10/30/20', - decimals: 7, - }, - { - chainId: 1, - name: 'ETHc Call 500 OCT3020', - address: '0xf9aba2e43fb19184408ea3b572a0fd672946f87b', - symbol: 'oETH-500C-10/30/20', - decimals: 6, - }, - { - chainId: 1, - name: 'oBALp Put 22 OCT0220', - address: '0xdb0991dfc7e828b5a2837dc82d68e16490562c8d', - symbol: 'oBAL-22P-10/02/20', - decimals: 7, - }, - { - chainId: 1, - name: 'oCOMPp Put 150 SEP2520', - address: '0xe951ebe6b4420ab3f4844cf36dedd263d095b416', - symbol: 'oCOMP-150P-09/25/20', - decimals: 7, - }, - { - chainId: 1, - name: 'oCRVp Put 3 SEP252020', - address: '0x9215bd49b59748419eac6bad9dbe247df06ebdb9', - symbol: 'oCRV-3P-09/25/20', - decimals: 7, - }, - { - chainId: 1, - name: 'oETHp Put 180 SEP2520', - address: '0xE3A2c34Fa2F59ffa95C4ACd1E5663633d45Bc3AD', - symbol: 'oETH-180P-09/25/20', - decimals: 7, - }, - { - chainId: 1, - name: 'oETHc Call 400 SEP2520', - address: '0x05977EBC26825C0CD6097E0Ad7204721516711Eb', - symbol: 'oETH-400C-09/25/20', - decimals: 7, - }, - { - chainId: 1, - name: 'oWETHp Put 380 SEP1820', - address: '0x31f88266301b08631f9f0e33fd5c43c2a5d1e5b2', - symbol: 'oWETH-380P-09/18/20', - decimals: 7, - }, - { - chainId: 1, - name: 'oYFIp Put 8500 SEP1820', - address: '0xd1cec2f67fdc4c60e0963515dfc3343f31e32e47', - symbol: 'oYFI-8500P-09/18/20', - decimals: 7, - }, - { - chainId: 1, - name: 'oWETHp Put 370 SEP1120', - address: '0x15844029b2c2bf24506e9937739a9a912f1e4354', - symbol: 'oWETH-370P-09/11/20', - decimals: 7, - }, - { - chainId: 1, - name: 'oWETHp Put 400 SEP0420', - address: '0x5562c33c383f6386be4f6dcdbd35a3a99bbcfde6', - symbol: 'oWETH-400P-09/04/20', - decimals: 7, - }, - { - chainId: 1, - name: 'oETHp Put 200 AUG2820', - address: '0x3CBFC1397deF0602c2d211c70A1c0c38CEDB5448', - symbol: 'oWETH-400P-09/04/20', - decimals: 7, - }, - { - chainId: 1, - name: 'Opyn cDai Insurance', - symbol: 'ocDai', - address: '0x98cc3bd6af1880fcfda17ac477b2f612980e5e33', - decimals: 8, - }, - { - chainId: 1, - name: 'Opyn cUSDC Insurance', - symbol: 'ocUSDC', - address: '0x8ED9f862363fFdFD3a07546e618214b6D59F03d4', - decimals: 8, - }, - { - chainId: 1, - address: '0x176C674Ee533C6139B0dc8b458D72A93dCB3e705', - symbol: 'iAAVE', - name: 'Synth Inverse Aave', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iAAVE.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0x8A8079c7149B8A1611e5C5d978DCA3bE16545F83', - symbol: 'iADA', - name: 'Synth Inverse Cardano', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iADA.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0xAFD870F32CE54EfdBF677466B612bf8ad164454B', - symbol: 'iBNB', - name: 'Synth Inverse Binance Coin', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iBNB.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0xD6014EA05BDe904448B743833dDF07c3C7837481', - symbol: 'iBTC', - name: 'Synth Inverse Bitcoin', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iBTC.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0x336213e1DDFC69f4701Fc3F86F4ef4A160c1159d', - symbol: 'iCEX', - name: 'Synth Inverse Centralised Exchange Index', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iCEX.svg', - tags: ['index', 'inverse', 'synth'], - }, - { - chainId: 1, - address: '0x6345728B1ccE16E6f8C509950b5c84FFF88530d9', - symbol: 'iCOMP', - name: 'Synth Inverse Compound', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iCOMP.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0xCB98f42221b2C251A4E74A1609722eE09f0cc08E', - symbol: 'iDASH', - name: 'Synth Inverse Dash', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDASH.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0x14d10003807AC60d07BB0ba82cAeaC8d2087c157', - symbol: 'iDEFI', - name: 'Synth Inverse DeFi Index', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDEFI.svg', - tags: ['index', 'inverse', 'synth'], - }, - { - chainId: 1, - address: '0x46a97629C9C1F58De6EC18C7F536e7E6d6A6ecDe', - symbol: 'iDOT', - name: 'Synth Inverse Polkadot', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDOT.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0xF4EebDD0704021eF2a6Bbe993fdf93030Cd784b4', - symbol: 'iEOS', - name: 'Synth Inverse EOS', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iEOS.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0xd50c1746D835d2770dDA3703B69187bFfeB14126', - symbol: 'iETC', - name: 'Synth Inverse Ethereum Classic', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iETC.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0xA9859874e1743A32409f75bB11549892138BBA1E', - symbol: 'iETH', - name: 'Synth Inverse Ether', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iETH.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0x2d7aC061fc3db53c39fe1607fB8cec1B2C162B01', - symbol: 'iLINK', - name: 'Synth Inverse Chainlink', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iLINK.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0x79da1431150C9b82D2E5dfc1C68B33216846851e', - symbol: 'iLTC', - name: 'Synth Inverse Litecoin', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iLTC.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0xA5a5DF41883Cdc00c4cCC6E8097130535399d9a3', - symbol: 'iOIL', - name: 'Synth Inverse Perpetual Oil Futures', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iOIL.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0x0fEd38108bdb8e62ef7b5680E8E0726E2F29e0De', - symbol: 'iREN', - name: 'Synth Inverse Ren', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iREN.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0xC5807183a9661A533CB08CbC297594a0B864dc12', - symbol: 'iTRX', - name: 'Synth Inverse TRON', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iTRX.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0x36A00FF9072570eF4B9292117850B8FE08d96cce', - symbol: 'iUNI', - name: 'Synth Inverse Uniswap', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iUNI.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0x4AdF728E2Df4945082cDD6053869f51278fae196', - symbol: 'iXMR', - name: 'Synth Inverse Monero', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXMR.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0x27269b3e45A4D3E79A3D6BFeE0C8fB13d0D711A6', - symbol: 'iXRP', - name: 'Synth Inverse Ripple', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXRP.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0x8deef89058090ac5655A99EEB451a4f9183D1678', - symbol: 'iXTZ', - name: 'Synth Inverse Tezos', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXTZ.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0x592244301CeA952d6daB2fdC1fE6bd9E53917306', - symbol: 'iYFI', - name: 'Synth Inverse yearn.finance', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iYFI.svg', - tags: ['inverse', 'synth'], - }, - { - chainId: 1, - address: '0xcD39b5434a0A92cf47D1F567a7dF84bE356814F0', - symbol: 's1INCH', - name: 'Synth 1inch', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/s1INCH.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x7537AAe01f3B218DAE75e10d952473823F961B87', - symbol: 'sAAPL', - name: 'Synth Apple', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAAPL.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xd2dF355C19471c8bd7D8A3aa27Ff4e26A21b4076', - symbol: 'sAAVE', - name: 'Synth Aave', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAAVE.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xe36E2D3c7c34281FA3bC737950a68571736880A1', - symbol: 'sADA', - name: 'Synth Cardano', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sADA.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x9CF7E61853ea30A41b02169391b393B901eac457', - symbol: 'sAMZN', - name: 'Synth Amazon', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAMZN.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xF48e200EAF9906362BB1442fca31e0835773b8B4', - symbol: 'sAUD', - name: 'Synth Australian Dollars', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAUD.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x617aeCB6137B5108D1E7D4918e3725C8cEbdB848', - symbol: 'sBNB', - name: 'Synth Binance Coin', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sBNB.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xfE18be6b3Bd88A2D2A7f928d00292E7a9963CfC6', - symbol: 'sBTC', - name: 'Synth Bitcoin', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sBTC.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xeABACD844A196D7Faf3CE596edeBF9900341B420', - symbol: 'sCEX', - name: 'Synth Centralised Exchange Index', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCEX.svg', - tags: ['index', 'synth'], - }, - { - chainId: 1, - address: '0x0F83287FF768D1c1e17a42F44d644D7F22e8ee1d', - symbol: 'sCHF', - name: 'Synth Swiss Franc', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCHF.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x9EeF4CA7aB9fa8bc0650127341C2d3F707a40f8A', - symbol: 'sCOIN', - name: 'Synth Coinbase', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCOIN.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xEb029507d3e043DD6C87F2917C4E82B902c35618', - symbol: 'sCOMP', - name: 'Synth Compound', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCOMP.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xD38aEb759891882e78E957c80656572503D8c1B1', - symbol: 'sCRV', - name: 'Synth Curve DAO Token', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCRV.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xfE33ae95A9f0DA8A845aF33516EDc240DCD711d6', - symbol: 'sDASH', - name: 'Synth Dash', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDASH.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xe1aFe1Fd76Fd88f78cBf599ea1846231B8bA3B6B', - symbol: 'sDEFI', - name: 'Synth DeFi Index', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDEFI.svg', - tags: ['index', 'synth'], - }, - { - chainId: 1, - address: '0x1715AC0743102BF5Cd58EfBB6Cf2dC2685d967b6', - symbol: 'sDOT', - name: 'Synth Polkadot', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDOT.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x88C8Cf3A212c0369698D13FE98Fcb76620389841', - symbol: 'sEOS', - name: 'Synth EOS', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sEOS.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x22602469d704BfFb0936c7A7cfcD18f7aA269375', - symbol: 'sETC', - name: 'Synth Ethereum Classic', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sETC.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x5e74C9036fb86BD7eCdcb084a0673EFc32eA31cb', - symbol: 'sETH', - name: 'Synth Ether', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sETH.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xD71eCFF9342A5Ced620049e616c5035F1dB98620', - symbol: 'sEUR', - name: 'Synth Euros', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sEUR.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xf50B5e535F62a56A9BD2d8e2434204E726c027Fa', - symbol: 'sFB', - name: 'Synth Facebook', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sFB.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x23348160D7f5aca21195dF2b70f28Fce2B0be9fC', - symbol: 'sFTSE', - name: 'Synth FTSE 100 Index', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sFTSE.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x97fe22E7341a0Cd8Db6F6C021A24Dc8f4DAD855F', - symbol: 'sGBP', - name: 'Synth Pound Sterling', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sGBP.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xC63B8ECCE56aB9C46184eC6aB85e4771fEa4c8AD', - symbol: 'sGOOG', - name: 'Synth Alphabet', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sGOOG.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xF6b1C627e95BFc3c1b4c9B825a032Ff0fBf3e07d', - symbol: 'sJPY', - name: 'Synth Japanese Yen', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sJPY.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x269895a3dF4D73b077Fc823dD6dA1B95f72Aaf9B', - symbol: 'sKRW', - name: 'Synth South Korean Won', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sKRW.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xbBC455cb4F1B9e4bFC4B73970d360c8f032EfEE6', - symbol: 'sLINK', - name: 'Synth Chainlink', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sLINK.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xC14103C2141E842e228FBaC594579e798616ce7A', - symbol: 'sLTC', - name: 'Synth Litecoin', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sLTC.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x745a824D6aBBD236AA794b5530062778A6Ad7523', - symbol: 'sMSFT', - name: 'Synth Microsoft', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sMSFT.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x5A7E3c07604EB515C16b36cd51906a65f021F609', - symbol: 'sNFLX', - name: 'Synth Netflix', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sNFLX.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x757de3ac6B830a931eF178C6634c5C551773155c', - symbol: 'sNIKKEI', - name: 'Synth Nikkei 225 Index', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sNIKKEI.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x6d16cF3EC5F763d4d99cB0B0b110eefD93B11B56', - symbol: 'sOIL', - name: 'Synth Perpetual Oil Futures', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sOIL.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xD31533E8d0f3DF62060e94B3F1318137bB6E3525', - symbol: 'sREN', - name: 'Synth Ren', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sREN.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x0352557B007A4Aae1511C114409b932F06F9E2f4', - symbol: 'sRUNE', - name: 'Synth THORChain', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sRUNE.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xf2E08356588EC5cd9E437552Da87C0076b4970B0', - symbol: 'sTRX', - name: 'Synth TRON', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sTRX.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x918dA91Ccbc32B7a6A0cc4eCd5987bbab6E31e6D', - symbol: 'sTSLA', - name: 'Synth Tesla', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sTSLA.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x30635297E450b930f8693297eBa160D9e6c8eBcf', - symbol: 'sUNI', - name: 'Synth Uniswap', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sUNI.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x6A22e5e94388464181578Aa7A6B869e00fE27846', - symbol: 'sXAG', - name: 'Synth Silver Ounce', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXAG.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x261EfCdD24CeA98652B9700800a13DfBca4103fF', - symbol: 'sXAU', - name: 'Synth Gold Ounce', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXAU.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x5299d6F7472DCc137D7f3C4BcfBBB514BaBF341A', - symbol: 'sXMR', - name: 'Synth Monero', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXMR.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0xa2B0fDe6D710e201d0d608e924A484d1A5fEd57c', - symbol: 'sXRP', - name: 'Synth Ripple', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXRP.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x2e59005c5c0f0a4D77CcA82653d48b46322EE5Cd', - symbol: 'sXTZ', - name: 'Synth Tezos', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXTZ.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x992058B7DB08F9734d84485bfbC243C4ee6954A7', - symbol: 'sYFI', - name: 'Synth yearn.finance', - decimals: 18, - logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sYFI.svg', - tags: ['synth'], - }, - { - chainId: 1, - address: '0x81ab848898b5ffD3354dbbEfb333D5D183eEDcB5', - name: 'yUSD Synthetic Expiring 1 September 2020', - symbol: 'yUSDSEP20', - decimals: 18, - }, - { - chainId: 1, - address: '0xB2FdD60AD80ca7bA89B9BAb3b5336c2601C020b4', - name: 'yUSD Synthetic Expiring 1 October 2020', - symbol: 'yUSDOCT20', - decimals: 18, - }, - { - chainId: 1, - address: '0x208d174775dc39fe18b1b374972f77ddec6c0f73', - name: 'uUSDrBTC Synthetic Expiring 1 Oct 2020', - symbol: 'uUSDrBTC-OCT', - decimals: 18, - }, - { - chainId: 1, - address: '0xf06ddacf71e2992e2122a1a0168c6967afdf63ce', - name: 'uUSDrBTC Synthetic Expiring 31 Dec 2020', - symbol: 'uUSDrBTC-DEC', - decimals: 18, - }, - { - chainId: 1, - address: '0xd16c79c8a39d44b2f3eb45d2019cd6a42b03e2a9', - name: 'uUSDwETH Synthetic Expiring 31 Dec 2020', - symbol: 'uUSDwETH-DEC', - decimals: 18, - }, - { - chainId: 1, - address: '0x3d995510f8d82c2ea341845932b5ddde0bead9a3', - name: 'uGAS-JAN21 Token Expiring 31 Jan 2021', - symbol: 'uGAS-JAN21', - decimals: 18, - }, - { - chainId: 1, - address: '0x90f802c7e8fb5d40b0de583e34c065a3bd2020d8', - name: 'YD-ETH-MAR21 Token Expiring 31 Mar 2021', - symbol: 'YD-ETH-MAR21', - decimals: 18, - }, - { - chainId: 1, - address: '0x002f0b1a71c5730cf2f4da1970a889207bdb6d0d', - name: 'YD-BTC-MAR21 Token Expiring 31 Mar 2021', - symbol: 'YD-BTC-MAR21', - decimals: 18, - }, - { - chainId: 1, - address: '0x1062ad0e59fa67fa0b27369113098cc941dd0d5f', - name: 'UMA 35 Call Expirying 30 Apr 2021', - symbol: 'UMAc35-0421', - decimals: 18, - }, - { - chainId: 1, - address: '0xf93340b1a3adf7eedcaec25fae8171d4b736e89f', - name: 'pxUSD Synthetic USD Expiring 1 April 2021', - symbol: 'pxUSD_MAR2021', - decimals: 18, - }, - { - chainId: 1, - address: '0x84bd083b1c8bf929f39c98bc17cf518f40154f58', - name: 'Mario Cash Synthetic Token Expiring 15 January 2021', - symbol: 'Mario Cash-JAN-2021', - decimals: 18, - }, - { - chainId: 1, - address: '0x81fab276aec924fbde190cf379783526d413cf70', - name: 'uGAS-FEB21 Token Expiring 28 Feb 2021', - symbol: 'uGAS-FEB21', - decimals: 18, - }, - { - chainId: 1, - address: '0x4e110603e70b0b5f1c403ee543b37e1f1244cf28', - name: 'uGAS-MAR21 Token Expiring 31 Mar 2021', - symbol: 'uGAS-MAR21', - decimals: 18, - }, - { - chainId: 1, - address: '0xcf55a7f92d5e0c6683debbc1fc20c0a6e056df13', - name: 'Zelda Elastic Cash', - symbol: 'Zelda Elastic Cash', - decimals: 18, - }, - { - chainId: 1, - address: '0x654eebac62240e6c56bab5f6adf7cfa74a894510', - name: 'Zelda Spring Nuts Cash', - symbol: 'Zelda Spring Nuts Cash', - decimals: 18, - }, - { - chainId: 1, - address: '0xa48920cc1ad85d8ea13af5d7be180c0338c306dd', - name: 'Zelda Summer Nuts Cash', - symbol: 'Zelda Summer Nuts Cash', - decimals: 18, - }, - { - chainId: 1, - address: '0x249a198d59b57fda5dda90630febc86fd8c7594c', - name: 'Zelda Whirlwind Cash', - symbol: 'Zelda Whirlwind Cash', - decimals: 18, - }, - { - chainId: 1, - address: '0x5ed1406873c9eb91f6f9a67ac4e152387c1132e7', - name: 'Zelda Reinforced Cash', - symbol: 'Zelda Reinforced Cash', - decimals: 18, - }, - { - chainId: 1, - address: '0x8104c9f13118320eefe5fbea8a44d600b85981ef', - name: 'Mini Mario Summer Cash', - symbol: 'Mini Mario Summer Cash', - decimals: 18, - }, - { - chainId: 1, - address: '0x69746c719e59674b147df25f50e7cfa0673cb625', - name: 'Mini Mario Spring Cash', - symbol: 'Mini Mario Spring Cash', - decimals: 18, - }, - { - chainId: 1, - address: '0x6b1257641d18791141f025eab36fb567c4b564ff', - name: 'Bitcoin Dominance Token 31 March 2021', - symbol: 'BTCDOM-MAR2021', - decimals: 18, - }, - { - chainId: 1, - address: '0x4e83b6287588a96321b2661c5e041845ff7814af', - name: 'Altcoin Dominance Token 31 March 2021', - symbol: 'ALTDOM-MAR2021', - decimals: 18, - }, - { - chainId: 1, - address: '0x59fec83ec709c893aedd1a144cf1828eb04127cd', - name: 'pxGOLD Synthetic GOLD Expiring 31 May 2021', - symbol: 'pxGOLD_MAY2021', - decimals: 18, - }, - { - chainId: 1, - address: '0x89337BFb7938804c3776C9FB921EccAf5ab76758', - name: 'Compound Annualized Rate Future Expiring 28 March 2021', - symbol: 'CAR-USDC-MAR21', - decimals: 18, - }, - { - chainId: 1, - address: '0xec58d3aefc9aaa2e0036fa65f70d569f49d9d1ed', - name: 'uSTONKS Index Token April 2021', - symbol: 'uSTONKS_APR21', - decimals: 6, - }, - { - chainId: 1, - address: '0xa6B9d7E3d76cF23549293Fb22c488E0Ea591A44e', - name: 'uGAS-JUN21 Token Expiring 30 Jun 2021', - symbol: 'uGAS-JUN21', - decimals: 18, - }, - { - chainId: 1, - address: '0xe813b65da6c38a04591aed3f082d32db7d53c382', - name: 'Yield Dollar [WETH Dec 2021]', - symbol: 'YD-ETH-DEC21', - decimals: 18, - }, - { - chainId: 1, - address: '0x4b606e9eb2228c70f44453afe5a73e1fea258ce1', - name: 'pxUSD Synthetic USD Expiring 31 Mar 2022', - symbol: 'pxUSD_MAR2022', - decimals: 18, - }, - { - chainId: 1, - address: '0x5247c0db4044fb6f97f32c7e1b48758019a5a912', - name: 'pxGOLD Synthetic Gold Expiring 31 Mar 2022', - symbol: 'pxGOLD_MAR2022', - decimals: 18, - }, - { - chainId: 1, - address: '0x56fb1acaff95c0b6ebcd17c8361a63d98b1a5a11', - name: 'uForex CNYUSD Synthetic Token April 2021', - symbol: 'uCNYUSD-APR', - decimals: 6, - }, - { - chainId: 1, - address: '0xd49fa405dce086c65d66ca1ca41f8e98583812b4', - name: 'uForex EURUSD Synthetic Token April 2021', - symbol: 'uEURUSD-APR', - decimals: 6, - }, - { - chainId: 1, - address: '0x29dddacba3b231ee8d673dd0f0fa759ea145561b', - name: 'DEFI_PULSE_TOTAL_TVL Synthetic Token Expiring 15 April 2021', - symbol: 'TVL_ALL_APRIL15', - decimals: 6, - }, - { - chainId: 1, - address: '0xcbe430927370e95b4b10cfc702c6017ec7abefc3', - name: 'Yield Dollar [WETH Jun 2021]', - symbol: 'YD-ETH-JUN21', - decimals: 18, - }, - { - chainId: 1, - address: '0x4b7fb448df91c8ed973494f8c8c4f12daf3a8521', - name: 'Yield Dollar [renBTC Jun 2021]', - symbol: 'YD-BTC-JUN21', - decimals: 8, - }, - { - chainId: 1, - address: '0x3108c33b6fb38efedaefd8b5f7ca01d5f5c7372d', - name: 'Yield Dollar UMA 21', - symbol: 'yUMA21', - decimals: 18, - }, - { - chainId: 1, - address: '0x0cae9e4d663793c2a2A0b211c1Cf4bBca2B9cAa7', - name: 'Mirrored Amazon', - symbol: 'MAMZN', - decimals: 18, - }, - { - chainId: 1, - address: '0x31c63146a635EB7465e5853020b39713AC356991', - name: 'M US Oil', - symbol: 'MUSO', - decimals: 18, - }, - { - chainId: 1, - address: '0x59A921Db27Dd6d4d974745B7FfC5c33932653442', - name: 'M Google', - symbol: 'MGOOGL', - decimals: 18, - }, - { - chainId: 1, - address: '0xf72FCd9DCF0190923Fadd44811E240Ef4533fc86', - name: 'Mirrored ProShares', - symbol: 'MVIXY', - decimals: 18, - }, - { - chainId: 1, - address: '0x56aA298a19C93c6801FDde870fA63EF75Cc0aF72', - name: 'Mirrored Alibaba', - symbol: 'MBABA', - decimals: 18, - }, - { - chainId: 1, - address: '0x0e99cC0535BB6251F6679Fa6E65d6d3b430e840B', - name: 'Mirrored Facebook', - symbol: 'MFB', - decimals: 18, - }, - { - chainId: 1, - address: '0x13B02c8dE71680e71F0820c996E4bE43c2F57d15', - name: 'Mirrored Invesco QQ', - symbol: 'MQQQ', - decimals: 18, - }, - { - chainId: 1, - address: '0x41BbEDd7286dAab5910a1f15d12CBda839852BD7', - name: 'Mirrored Microsoft', - symbol: 'MMSFT', - decimals: 18, - }, - { - chainId: 1, - address: '0x9d1555d8cB3C846Bb4f7D5B1B1080872c3166676', - name: 'Mirrored iShares Si', - symbol: 'MSLV', - decimals: 18, - }, - { - chainId: 1, - address: '0x21cA39943E91d704678F5D00b6616650F066fD63', - name: 'Mirrored Tesla', - symbol: 'MTSLA', - decimals: 18, - }, - { - chainId: 1, - address: '0xe82bbB62fA81d0701643d1675FB50ec52fD3Df92', - name: 'DYDX Token', - symbol: 'DYDX', - decimals: 18, - }, - { - chainId: 10, - address: '0xE405de8F52ba7559f9df3C368500B6E6ae6Cee49', - name: 'sETH', - symbol: 'Synth Ether', - decimals: 18, - }, - { - chainId: 10, - address: '0x298B9B95708152ff6968aafd889c6586e9169f1D', - name: 'sBTC', - symbol: 'Synth Bitcoin', - decimals: 18, - }, - { - chainId: 10, - address: '0xc5Db22719A06418028A40A9B5E9A7c02959D0d08', - name: 'sLINK', - symbol: 'Synth Link', - decimals: 18, - }, - { - chainId: 1, - address: '0x6B60eE11b73230045cF9095E6e43AE9Ea638e172', - name: 'Shatner', - symbol: 'SHAT', - decimals: 18, - }, - { - chainId: 1, - address: '0x7277a44D1325D81Ac58893002a1B40a41bea43fe', - name: 'FAANG Index', - symbol: 'FAANG', - decimals: 18, - }, - { - chainId: 1, - address: '0x76175599887730786bdA1545D0D7AcE8737fEBB1', - name: 'ENS DAO', - symbol: 'ENS', - decimals: 18, - }, - { - chainId: 1, - address: '0xa82AA729AE2F0d78e961D66db53949e27a9E866d', - name: 'BMEX', - symbol: 'BMEX', - decimals: 18, - }, -] -var UNSUPPORTED_TOKEN_LIST = { - name, - timestamp, - version, - tags, - logoURI, - keywords, - tokens, -} +var initialState$6 = { + percent: 0, +}; +var burnV3 = createReducer(initialState$6, function (builder) { + return builder.addCase(selectPercent, function (state, _a) { + var percent = _a.payload.percent; + return __assign(__assign({}, state), { percent: percent }); + }); +}); -function useAllLists() { - return useAppSelector(function (state) { - return state.lists.byUrl - }) -} -/** - * Combine the tokens in map2 with the tokens on map1, where tokens on map1 take precedence - * @param map1 the base token map - * @param map2 the map of additioanl tokens to add to the base map - */ -function combineMaps(map1, map2) { - var chainIds = Object.keys( - Object.keys(map1) - .concat(Object.keys(map2)) - .reduce(function (memo, value) { - memo[value] = true - return memo - }, {}) - ).map(function (id) { - return parseInt(id) - }) - return chainIds.reduce(function (memo, chainId) { - memo[chainId] = __assign(__assign({}, map2[chainId]), map1[chainId]) - return memo - }, {}) -} -// merge tokens contained within lists from urls -function useCombinedTokenMapFromUrls(urls) { - var lists = useAllLists() - return useMemo( - function () { - if (!urls) return {} - return ( - urls - .slice() - // sort by priority so top priority goes last - .sort(sortByListPriority) - .reduce(function (allTokens, currentUrl) { - var _a - var current = (_a = lists[currentUrl]) === null || _a === void 0 ? void 0 : _a.current - if (!current) return allTokens - try { - return combineMaps(allTokens, tokensToChainTokenMap(current)) - } catch (error) { - console.error('Could not show token list due to error', error) - return allTokens - } - }, {}) - ) - }, - [lists, urls] - ) -} -// filter out unsupported lists -function useActiveListUrls() { - var activeListUrls = useAppSelector(function (state) { - return state.lists.activeListUrls - }) - return useMemo( - function () { - return activeListUrls === null || activeListUrls === void 0 - ? void 0 - : activeListUrls.filter(function (url) { - return !UNSUPPORTED_LIST_URLS.includes(url) - }) - }, - [activeListUrls] - ) -} -function useInactiveListUrls() { - var lists = useAllLists() - var allActiveListUrls = useActiveListUrls() - return useMemo( - function () { - return Object.keys(lists).filter(function (url) { - return ( - !(allActiveListUrls === null || allActiveListUrls === void 0 ? void 0 : allActiveListUrls.includes(url)) && - !UNSUPPORTED_LIST_URLS.includes(url) - ) - }) - }, - [lists, allActiveListUrls] - ) -} -// get all the tokens from active lists, combine with local default tokens -function useCombinedActiveList() { - var activeListUrls = useActiveListUrls() - var activeTokens = useCombinedTokenMapFromUrls(activeListUrls) - return activeTokens -} -// list of tokens not supported on interface for various reasons, used to show warnings and prevent swaps and adds -function useUnsupportedTokenList() { - // get hard-coded broken tokens - var brokenListMap = useMemo(function () { - return tokensToChainTokenMap(BROKEN_LIST) - }, []) - // get hard-coded list of unsupported tokens - var localUnsupportedListMap = useMemo(function () { - return tokensToChainTokenMap(UNSUPPORTED_TOKEN_LIST) - }, []) - // get dynamic list of unsupported tokens - var loadedUnsupportedListMap = useCombinedTokenMapFromUrls(UNSUPPORTED_LIST_URLS) - // format into one token address map - return useMemo( - function () { - return combineMaps(brokenListMap, combineMaps(localUnsupportedListMap, loadedUnsupportedListMap)) - }, - [brokenListMap, localUnsupportedListMap, loadedUnsupportedListMap] - ) -} -function useIsListActive(url) { - var activeListUrls = useActiveListUrls() - return Boolean(activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(url)) -} +var _a$9; +// List of supported subgraphs. Note that the app currently only support one active subgraph at a time +var CHAIN_SUBGRAPH_URL = (_a$9 = {}, + _a$9[SupportedChainId.MAINNET] = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3', + _a$9[SupportedChainId.RINKEBY] = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3', + _a$9[SupportedChainId.ARBITRUM_ONE] = 'https://api.thegraph.com/subgraphs/name/ianlapham/arbitrum-minimal', + _a$9[SupportedChainId.OPTIMISM] = 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-optimism-dev', + _a$9[SupportedChainId.POLYGON] = 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-v3-polygon', + _a$9); +var api$1 = createApi({ + reducerPath: 'dataApi', + baseQuery: graphqlRequestBaseQuery(), + endpoints: function (builder) { return ({ + allV3Ticks: builder.query({ + query: function (_a) { + var poolAddress = _a.poolAddress, _b = _a.skip, skip = _b === void 0 ? 0 : _b; + return ({ + document: gql(templateObject_1$1c || (templateObject_1$1c = __makeTemplateObject(["\n query allV3Ticks($poolAddress: String!, $skip: Int!) {\n ticks(first: 1000, skip: $skip, where: { poolAddress: $poolAddress }, orderBy: tickIdx) {\n tick: tickIdx\n liquidityNet\n price0\n price1\n }\n }\n "], ["\n query allV3Ticks($poolAddress: String!, $skip: Int!) {\n ticks(first: 1000, skip: $skip, where: { poolAddress: $poolAddress }, orderBy: tickIdx) {\n tick: tickIdx\n liquidityNet\n price0\n price1\n }\n }\n "]))), + variables: { + poolAddress: poolAddress, + skip: skip, + }, + }); + }, + }), + feeTierDistribution: builder.query({ + query: function (_a) { + var token0 = _a.token0, token1 = _a.token1; + return ({ + document: gql(templateObject_2$S || (templateObject_2$S = __makeTemplateObject(["\n query feeTierDistribution($token0: String!, $token1: String!) {\n _meta {\n block {\n number\n }\n }\n asToken0: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token0, token1: $token1 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n asToken1: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token1, token1: $token0 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n }\n "], ["\n query feeTierDistribution($token0: String!, $token1: String!) {\n _meta {\n block {\n number\n }\n }\n asToken0: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token0, token1: $token1 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n asToken1: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token1, token1: $token0 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n }\n "]))), + variables: { + token0: token0, + token1: token1, + }, + }); + }, + }), + }); }, +}); +// Graphql query client wrapper that builds a dynamic url based on chain id +function graphqlRequestBaseQuery() { + var _this = this; + return function (_a, _b) { + var document = _a.document, variables = _a.variables; + var getState = _b.getState; + return __awaiter(_this, void 0, void 0, function () { + var chainId, subgraphUrl, error_1, name_1, message, stack, request, response; + var _c; + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]); + chainId = getState().application.chainId; + subgraphUrl = chainId ? CHAIN_SUBGRAPH_URL[chainId] : undefined; + if (!subgraphUrl) { + return [2 /*return*/, { + error: { + name: 'UnsupportedChainId', + message: "Subgraph queries against ChainId " + chainId + " are not supported.", + stack: '', + }, + }]; + } + _c = {}; + return [4 /*yield*/, new GraphQLClient(subgraphUrl).request(document, variables)]; + case 1: return [2 /*return*/, (_c.data = _d.sent(), _c.meta = {}, _c)]; + case 2: + error_1 = _d.sent(); + if (error_1 instanceof ClientError) { + name_1 = error_1.name, message = error_1.message, stack = error_1.stack, request = error_1.request, response = error_1.response; + return [2 /*return*/, { error: { name: name_1, message: message, stack: stack }, meta: { request: request, response: response } }]; + } + throw error_1; + case 3: return [2 /*return*/]; + } + }); + }); + }; +} +var templateObject_1$1c, templateObject_2$S; -// reduce token map into standard address <-> Token mapping, optionally include user added tokens -function useTokensFromMap(tokenMap, includeUserAdded) { - var chainId = useActiveWeb3React().chainId - var userAddedTokens = useUserAddedTokens() - return useMemo( - function () { - var _a - if (!chainId) return {} - // reduce to just tokens - var mapWithoutUrls = Object.keys((_a = tokenMap[chainId]) !== null && _a !== void 0 ? _a : {}).reduce(function ( - newMap, - address - ) { - newMap[address] = tokenMap[chainId][address].token - return newMap - }, - {}) - if (includeUserAdded) { - return ( - userAddedTokens - // reduce into all ALL_TOKENS filtered by the current chain - .reduce(function (tokenMap, token) { - tokenMap[token.address] = token - return tokenMap - }, __assign({}, mapWithoutUrls)) - ) - } - return mapWithoutUrls - }, - [chainId, userAddedTokens, tokenMap, includeUserAdded] - ) -} -function useAllTokens() { - var allTokens = useCombinedActiveList() - return useTokensFromMap(allTokens, true) -} -function useUnsupportedTokens() { - var chainId = useActiveWeb3React().chainId - var listsByUrl = useAllLists() - var unsupportedTokensMap = useUnsupportedTokenList() - var unsupportedTokens = useTokensFromMap(unsupportedTokensMap, false) - // checks the default L2 lists to see if `bridgeInfo` has an L1 address value that is unsupported - var l2InferredBlockedTokens = useMemo( - function () { - if (!chainId || !L2_CHAIN_IDS.includes(chainId)) { - return {} - } - if (!listsByUrl) { - return {} - } - var listUrl = CHAIN_INFO[chainId].defaultListUrl - var list = listsByUrl[listUrl].current - if (!list) { - return {} - } - var unsupportedSet = new Set(Object.keys(unsupportedTokens)) - return list.tokens.reduce(function (acc, tokenInfo) { - var _a - var _b - var bridgeInfo = (_b = tokenInfo.extensions) === null || _b === void 0 ? void 0 : _b.bridgeInfo - if ( - bridgeInfo && - bridgeInfo[SupportedChainId.MAINNET] && - bridgeInfo[SupportedChainId.MAINNET].tokenAddress && - unsupportedSet.has(bridgeInfo[SupportedChainId.MAINNET].tokenAddress) - ) { - var address = bridgeInfo[SupportedChainId.MAINNET].tokenAddress - // don't rely on decimals--it's possible that a token could be bridged w/ different decimals on the L2 - return __assign( - __assign({}, acc), - ((_a = {}), (_a[address] = new Token(SupportedChainId.MAINNET, address, tokenInfo.decimals)), _a) - ) - } - return acc - }, {}) - }, - [chainId, listsByUrl, unsupportedTokens] - ) - return __assign(__assign({}, unsupportedTokens), l2InferredBlockedTokens) -} -function useSearchInactiveTokenLists(search, minResults) { - if (minResults === void 0) { - minResults = 10 - } - var lists = useAllLists() - var inactiveUrls = useInactiveListUrls() - var chainId = useActiveWeb3React().chainId - var activeTokens = useAllTokens() - return useMemo( - function () { - var e_1, _a, e_2, _b - if (!search || search.trim().length === 0) return [] - var tokenFilter = getTokenFilter(search) - var result = [] - var addressSet = {} - try { - for ( - var inactiveUrls_1 = __values(inactiveUrls), inactiveUrls_1_1 = inactiveUrls_1.next(); - !inactiveUrls_1_1.done; - inactiveUrls_1_1 = inactiveUrls_1.next() - ) { - var url = inactiveUrls_1_1.value - var list = lists[url].current - if (!list) continue - try { - for (var _c = ((e_2 = void 0), __values(list.tokens)), _d = _c.next(); !_d.done; _d = _c.next()) { - var tokenInfo = _d.value - if (tokenInfo.chainId === chainId && tokenFilter(tokenInfo)) { - var wrapped = new WrappedTokenInfo(tokenInfo, list) - if (!(wrapped.address in activeTokens) && !addressSet[wrapped.address]) { - addressSet[wrapped.address] = true - result.push(wrapped) - if (result.length >= minResults) return result - } - } - } - } catch (e_2_1) { - e_2 = { error: e_2_1 } - } finally { - try { - if (_d && !_d.done && (_b = _c.return)) _b.call(_c) - } finally { - if (e_2) throw e_2.error - } - } - } - } catch (e_1_1) { - e_1 = { error: e_1_1 } - } finally { - try { - if (inactiveUrls_1_1 && !inactiveUrls_1_1.done && (_a = inactiveUrls_1.return)) _a.call(inactiveUrls_1) - } finally { - if (e_1) throw e_1.error - } - } - return result - }, - [activeTokens, chainId, inactiveUrls, lists, minResults, search] - ) -} -function useIsTokenActive(token) { - var activeTokens = useAllTokens() - if (!activeTokens || !token) { - return false - } - return !!activeTokens[token.address] -} -// Check if currency is included in custom list from user storage -function useIsUserAddedToken(currency) { - var userAddedTokens = useUserAddedTokens() - if (!currency) { - return false - } - return !!userAddedTokens.find(function (token) { - return currency.equals(token) - }) -} -// undefined if invalid or does not exist -// null if loading or null was passed -// otherwise returns the token -function useToken(tokenAddress) { - var tokens = useAllTokens() - return useTokenFromMap(tokens, tokenAddress) -} -function useCurrency(currencyId) { - var tokens = useAllTokens() - return useCurrencyFromMap(tokens, currencyId) -} +// fired once when the app reloads but before the app renders +// allows any updates to be applied to store data loaded from localStorage +var updateVersion = createAction('global/updateVersion'); -function serializeToken(token) { - return { - chainId: token.chainId, - address: token.address, - decimals: token.decimals, - symbol: token.symbol, - name: token.name, - } -} -function deserializeToken(serializedToken) { - return new Token( - serializedToken.chainId, - serializedToken.address, - serializedToken.decimals, - serializedToken.symbol, - serializedToken.name - ) -} -function useIsDarkMode() { - var _a = useAppSelector(function (_a) { - var _b = _a.user, - matchesDarkMode = _b.matchesDarkMode, - userDarkMode = _b.userDarkMode - return { - userDarkMode, - matchesDarkMode, - } - }, shallowEqual), - userDarkMode = _a.userDarkMode, - matchesDarkMode = _a.matchesDarkMode - return userDarkMode === null ? matchesDarkMode : userDarkMode -} -function useDarkModeManager() { - var dispatch = useAppDispatch() - var darkMode = useIsDarkMode() - var toggleSetDarkMode = useCallback( - function () { - dispatch(updateUserDarkMode({ userDarkMode: !darkMode })) - }, - [darkMode, dispatch] - ) - return [darkMode, toggleSetDarkMode] -} -function useUserLocale() { - return useAppSelector(function (state) { - return state.user.userLocale - }) -} -function useUserLocaleManager() { - var dispatch = useAppDispatch() - var locale = useUserLocale() - var setLocale = useCallback( - function (newLocale) { - dispatch(updateUserLocale({ userLocale: newLocale })) - }, - [dispatch] - ) - return [locale, setLocale] -} -function useIsExpertMode() { - return useAppSelector(function (state) { - return state.user.userExpertMode - }) -} -function useExpertModeManager() { - var dispatch = useAppDispatch() - var expertMode = useIsExpertMode() - var toggleSetExpertMode = useCallback( - function () { - dispatch(updateUserExpertMode({ userExpertMode: !expertMode })) - }, - [expertMode, dispatch] - ) - return [expertMode, toggleSetExpertMode] -} -function useShowSurveyPopup() { - var dispatch = useAppDispatch() - var showSurveyPopup = useAppSelector(function (state) { - return state.user.showSurveyPopup - }) - var toggleShowSurveyPopup = useCallback( - function (showPopup) { - dispatch(updateShowSurveyPopup({ showSurveyPopup: showPopup })) - }, - [dispatch] - ) - return [showSurveyPopup, toggleShowSurveyPopup] -} -function useClientSideRouter() { - var dispatch = useAppDispatch() - var clientSideRouter = useAppSelector(function (state) { - return Boolean(state.user.userClientSideRouter) - }) - var setClientSideRouter = useCallback( - function (newClientSideRouter) { - dispatch(updateUserClientSideRouter({ userClientSideRouter: newClientSideRouter })) - }, - [dispatch] - ) - return [clientSideRouter, setClientSideRouter] -} -function useSetUserSlippageTolerance() { - var dispatch = useAppDispatch() - return useCallback( - function (userSlippageTolerance) { - var value - try { - value = - userSlippageTolerance === 'auto' ? 'auto' : JSBI.toNumber(userSlippageTolerance.multiply(10000).quotient) - } catch (error) { - value = 'auto' - } - dispatch( - updateUserSlippageTolerance({ - userSlippageTolerance: value, - }) - ) - }, - [dispatch] - ) -} -/** - * Return the user's slippage tolerance, from the redux store, and a function to update the slippage tolerance - */ -function useUserSlippageTolerance() { - var userSlippageTolerance = useAppSelector(function (state) { - return state.user.userSlippageTolerance - }) - return useMemo( - function () { - return userSlippageTolerance === 'auto' ? 'auto' : new Percent(userSlippageTolerance, 10000) - }, - [userSlippageTolerance] - ) -} -/** - * Same as above but replaces the auto with a default value - * @param defaultSlippageTolerance the default value to replace auto with - */ -function useUserSlippageToleranceWithDefault(defaultSlippageTolerance) { - var allowedSlippage = useUserSlippageTolerance() - return useMemo( - function () { - return allowedSlippage === 'auto' ? defaultSlippageTolerance : allowedSlippage - }, - [allowedSlippage, defaultSlippageTolerance] - ) -} -function useUserTransactionTTL() { - var chainId = useActiveWeb3React().chainId - var dispatch = useAppDispatch() - var userDeadline = useAppSelector(function (state) { - return state.user.userDeadline - }) - var onL2 = Boolean(chainId && L2_CHAIN_IDS.includes(chainId)) - var deadline = onL2 ? L2_DEADLINE_FROM_NOW : userDeadline - var setUserDeadline = useCallback( - function (userDeadline) { - dispatch(updateUserDeadline({ userDeadline })) - }, - [dispatch] - ) - return [deadline, setUserDeadline] -} -function useAddUserToken() { - var dispatch = useAppDispatch() - return useCallback( - function (token) { - dispatch(addSerializedToken({ serializedToken: serializeToken(token) })) - }, - [dispatch] - ) -} -function useRemoveUserAddedToken() { - var dispatch = useAppDispatch() - return useCallback( - function (chainId, address) { - dispatch(removeSerializedToken({ chainId, address })) - }, - [dispatch] - ) -} -function useUserAddedTokens() { - var chainId = useActiveWeb3React().chainId - var serializedTokensMap = useAppSelector(function (_a) { - var tokens = _a.user.tokens - return tokens - }) - return useMemo( - function () { - if (!chainId) return [] - var tokenMap = ( - serializedTokensMap === null || serializedTokensMap === void 0 ? void 0 : serializedTokensMap[chainId] - ) - ? Object.values(serializedTokensMap[chainId]).map(deserializeToken) - : [] - return tokenMap - }, - [serializedTokensMap, chainId] - ) -} -function useURLWarningVisible() { - return useAppSelector(function (state) { - return state.user.URLWarningVisible - }) -} +var fetchTokenList = { + pending: createAction('lists/fetchTokenList/pending'), + fulfilled: createAction('lists/fetchTokenList/fulfilled'), + rejected: createAction('lists/fetchTokenList/rejected'), +}; +// add and remove from list options +var addList = createAction('lists/addList'); +var removeList = createAction('lists/removeList'); +// select which lists to search across from loaded lists +var enableList = createAction('lists/enableList'); +var disableList = createAction('lists/disableList'); +// versioning +var acceptListUpdate = createAction('lists/acceptListUpdate'); + +var NEW_LIST_STATE = { + error: null, + current: null, + loadingRequestId: null, + pendingUpdate: null, +}; +var initialState$5 = { + lastInitializedDefaultListOfLists: DEFAULT_LIST_OF_LISTS, + byUrl: __assign({}, DEFAULT_LIST_OF_LISTS.reduce(function (memo, listUrl) { + memo[listUrl] = NEW_LIST_STATE; + return memo; + }, {})), + activeListUrls: DEFAULT_ACTIVE_LIST_URLS, +}; +var lists = createReducer(initialState$5, function (builder) { + return builder + .addCase(fetchTokenList.pending, function (state, _a) { + var _b, _c, _d, _e; + var _f = _a.payload, requestId = _f.requestId, url = _f.url; + var current = (_c = (_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.current) !== null && _c !== void 0 ? _c : null; + var pendingUpdate = (_e = (_d = state.byUrl[url]) === null || _d === void 0 ? void 0 : _d.pendingUpdate) !== null && _e !== void 0 ? _e : null; + state.byUrl[url] = { + current: current, + pendingUpdate: pendingUpdate, + loadingRequestId: requestId, + error: null, + }; + }) + .addCase(fetchTokenList.fulfilled, function (state, _a) { + var _b, _c, _d; + var _e = _a.payload, requestId = _e.requestId, tokenList = _e.tokenList, url = _e.url; + var current = (_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.current; + var loadingRequestId = (_c = state.byUrl[url]) === null || _c === void 0 ? void 0 : _c.loadingRequestId; + // no-op if update does nothing + if (current) { + var upgradeType = getVersionUpgrade(current.version, tokenList.version); + if (upgradeType === VersionUpgrade.NONE) + return; + if (loadingRequestId === null || loadingRequestId === requestId) { + state.byUrl[url] = { + current: current, + pendingUpdate: tokenList, + loadingRequestId: null, + error: null, + }; + } + } + else { + // activate if on default active + if (DEFAULT_ACTIVE_LIST_URLS.includes(url)) { + (_d = state.activeListUrls) === null || _d === void 0 ? void 0 : _d.push(url); + } + state.byUrl[url] = { + current: tokenList, + pendingUpdate: null, + loadingRequestId: null, + error: null, + }; + } + }) + .addCase(fetchTokenList.rejected, function (state, _a) { + var _b; + var _c = _a.payload, url = _c.url, requestId = _c.requestId, errorMessage = _c.errorMessage; + if (((_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.loadingRequestId) !== requestId) { + // no-op since it's not the latest request + return; + } + state.byUrl[url] = { + current: state.byUrl[url].current ? state.byUrl[url].current : null, + pendingUpdate: null, + loadingRequestId: null, + error: errorMessage, + }; + }) + .addCase(addList, function (state, _a) { + var url = _a.payload; + if (!state.byUrl[url]) { + state.byUrl[url] = NEW_LIST_STATE; + } + }) + .addCase(removeList, function (state, _a) { + var url = _a.payload; + if (state.byUrl[url]) { + delete state.byUrl[url]; + } + // remove list from active urls if needed + if (state.activeListUrls && state.activeListUrls.includes(url)) { + state.activeListUrls = state.activeListUrls.filter(function (u) { return u !== url; }); + } + }) + .addCase(enableList, function (state, _a) { + var url = _a.payload; + if (!state.byUrl[url]) { + state.byUrl[url] = NEW_LIST_STATE; + } + if (state.activeListUrls && !state.activeListUrls.includes(url)) { + state.activeListUrls.push(url); + } + if (!state.activeListUrls) { + state.activeListUrls = [url]; + } + }) + .addCase(disableList, function (state, _a) { + var url = _a.payload; + if (state.activeListUrls && state.activeListUrls.includes(url)) { + state.activeListUrls = state.activeListUrls.filter(function (u) { return u !== url; }); + } + }) + .addCase(acceptListUpdate, function (state, _a) { + var _b; + var url = _a.payload; + if (!((_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.pendingUpdate)) { + throw new Error('accept list update called without pending update'); + } + state.byUrl[url] = __assign(__assign({}, state.byUrl[url]), { current: state.byUrl[url].pendingUpdate, pendingUpdate: null }); + }) + .addCase(updateVersion, function (state) { + // state loaded from localStorage, but new lists have never been initialized + if (!state.lastInitializedDefaultListOfLists) { + state.byUrl = initialState$5.byUrl; + state.activeListUrls = initialState$5.activeListUrls; + } + else if (state.lastInitializedDefaultListOfLists) { + var lastInitializedSet_1 = state.lastInitializedDefaultListOfLists.reduce(function (s, l) { return s.add(l); }, new Set()); + var newListOfListsSet_1 = DEFAULT_LIST_OF_LISTS.reduce(function (s, l) { return s.add(l); }, new Set()); + DEFAULT_LIST_OF_LISTS.forEach(function (listUrl) { + if (!lastInitializedSet_1.has(listUrl)) { + state.byUrl[listUrl] = NEW_LIST_STATE; + } + }); + state.lastInitializedDefaultListOfLists.forEach(function (listUrl) { + if (!newListOfListsSet_1.has(listUrl)) { + delete state.byUrl[listUrl]; + } + }); + } + state.lastInitializedDefaultListOfLists = DEFAULT_LIST_OF_LISTS; + // if no active lists, activate defaults + if (!state.activeListUrls) { + state.activeListUrls = DEFAULT_ACTIVE_LIST_URLS; + // for each list on default list, initialize if needed + DEFAULT_ACTIVE_LIST_URLS.map(function (listUrl) { + if (!state.byUrl[listUrl]) { + state.byUrl[listUrl] = NEW_LIST_STATE; + } + return true; + }); + } + }); +}); -var EXPLORER_HOSTNAMES = { - 'etherscan.io': true, - 'ropsten.etherscan.io': true, - 'rinkeby.etherscan.io': true, - 'kovan.etherscan.io': true, - 'goerli.etherscan.io': true, - 'optimistic.etherscan.io': true, - 'kovan-optimistic.etherscan.io': true, - 'rinkeby-explorer.arbitrum.io': true, - 'arbiscan.io': true, -} -/** - * Returns the anonymized version of the given href, i.e. one that does not leak user information - * @param href the link to anonymize, i.e. remove any personal data from - * @return string anonymized version of the given href - */ -function anonymizeLink(href) { - try { - var url = new URL(href) - if (EXPLORER_HOSTNAMES[url.hostname]) { - var pathPieces = url.pathname.split('/') - var anonymizedPath = pathPieces - .map(function (pc) { - return /0x[a-fA-F0-9]+/.test(pc) ? '***' : pc - }) - .join('/') - return url.protocol + '//' + url.hostname + anonymizedPath - } - return href - } catch (error) { - return href - } +/** + * Converts a filter to the corresponding string key + * @param filter the filter to convert + */ +function filterToKey(filter) { + var _a, _b, _c, _d; + return ((_a = filter.address) !== null && _a !== void 0 ? _a : '') + ":" + ((_d = (_c = (_b = filter.topics) === null || _b === void 0 ? void 0 : _b.map(function (topic) { return (topic ? (Array.isArray(topic) ? topic.join(';') : topic) : '\0'); })) === null || _c === void 0 ? void 0 : _c.join('-')) !== null && _d !== void 0 ? _d : ''); +} +/** + * Convert a filter key to the corresponding filter + * @param key key to convert + */ +function keyToFilter(key) { + var pcs = key.split(':'); + var address = pcs[0]; + var topics = pcs[1].split('-').map(function (topic) { + if (topic === '\0') + return null; + var parts = topic.split(';'); + if (parts.length === 1) + return parts[0]; + return parts; + }); + return { + address: address.length === 0 ? undefined : address, + topics: topics, + }; } -var ButtonText = styled.button( - templateObject_1$1l || - (templateObject_1$1l = __makeTemplateObject( - [ - '\n outline: none;\n border: none;\n font-size: inherit;\n padding: 0;\n margin: 0;\n background: none;\n cursor: pointer;\n\n :hover {\n opacity: 0.7;\n }\n\n :focus {\n text-decoration: underline;\n }\n', - ], - [ - '\n outline: none;\n border: none;\n font-size: inherit;\n padding: 0;\n margin: 0;\n background: none;\n cursor: pointer;\n\n :hover {\n opacity: 0.7;\n }\n\n :focus {\n text-decoration: underline;\n }\n', - ] - )) -) -var CloseIcon$2 = styled(X)( - templateObject_2$$ || - (templateObject_2$$ = __makeTemplateObject( - ['\n cursor: pointer;\n'], - [ - '\n cursor: pointer;\n', - // for wrapper react feather icons - ] - )) -) -// for wrapper react feather icons -var IconWrapper$4 = styled.div( - templateObject_3$S || - (templateObject_3$S = __makeTemplateObject( - [ - '\n display: flex;\n align-items: center;\n justify-content: center;\n width: ', - ';\n height: ', - ';\n margin-right: ', - ';\n margin-left: ', - ';\n & > * {\n stroke: ', - ';\n }\n', - ], - [ - '\n display: flex;\n align-items: center;\n justify-content: center;\n width: ', - ';\n height: ', - ';\n margin-right: ', - ';\n margin-left: ', - ';\n & > * {\n stroke: ', - ';\n }\n', - // A button that triggers some onClick result, but looks like a link. - ] - )), - function (_a) { - var size = _a.size - return size !== null && size !== void 0 ? size : '20px' - }, - function (_a) { - var size = _a.size - return size !== null && size !== void 0 ? size : '20px' - }, - function (_a) { - var marginRight = _a.marginRight - return marginRight !== null && marginRight !== void 0 ? marginRight : 0 - }, - function (_a) { - var marginLeft = _a.marginLeft - return marginLeft !== null && marginLeft !== void 0 ? marginLeft : 0 - }, - function (_a) { - var theme = _a.theme, - stroke = _a.stroke - return stroke !== null && stroke !== void 0 ? stroke : theme.blue1 - } -) -// A button that triggers some onClick result, but looks like a link. -var LinkStyledButton = styled.button( - templateObject_4$G || - (templateObject_4$G = __makeTemplateObject( - [ - '\n border: none;\n text-decoration: none;\n background: none;\n\n cursor: ', - ';\n color: ', - ';\n font-weight: 500;\n\n :hover {\n text-decoration: ', - ';\n }\n\n :focus {\n outline: none;\n text-decoration: ', - ';\n }\n\n :active {\n text-decoration: none;\n }\n', - ], - [ - '\n border: none;\n text-decoration: none;\n background: none;\n\n cursor: ', - ';\n color: ', - ';\n font-weight: 500;\n\n :hover {\n text-decoration: ', - ';\n }\n\n :focus {\n outline: none;\n text-decoration: ', - ';\n }\n\n :active {\n text-decoration: none;\n }\n', - // An internal link from the react-router-dom library that is correctly styled - ] - )), - function (_a) { - var disabled = _a.disabled - return disabled ? 'default' : 'pointer' - }, - function (_a) { - var theme = _a.theme, - disabled = _a.disabled - return disabled ? theme.text2 : theme.primary1 - }, - function (_a) { - var disabled = _a.disabled - return disabled ? null : 'underline' - }, - function (_a) { - var disabled = _a.disabled - return disabled ? null : 'underline' - } -) -// An internal link from the react-router-dom library that is correctly styled -var StyledInternalLink = styled(Link$1)( - templateObject_5$x || - (templateObject_5$x = __makeTemplateObject( - [ - '\n text-decoration: none;\n cursor: pointer;\n color: ', - ';\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 text-decoration: none;\n cursor: pointer;\n color: ', - ';\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', - ] - )), - function (_a) { - var theme = _a.theme - return theme.primary1 - } -) -var StyledLink = styled.a( - templateObject_6$o || - (templateObject_6$o = __makeTemplateObject( - [ - '\n text-decoration: none;\n cursor: pointer;\n color: ', - ';\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 text-decoration: none;\n cursor: pointer;\n color: ', - ';\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', - ] - )), - function (_a) { - var theme = _a.theme - return theme.primary1 - } -) -var LinkIconWrapper = styled.a( - templateObject_7$k || - (templateObject_7$k = __makeTemplateObject( - [ - '\n text-decoration: none;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n text-decoration: none;\n opacity: 0.7;\n }\n\n :focus {\n outline: none;\n text-decoration: none;\n }\n\n :active {\n text-decoration: none;\n }\n', - ], - [ - '\n text-decoration: none;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n text-decoration: none;\n opacity: 0.7;\n }\n\n :focus {\n outline: none;\n text-decoration: none;\n }\n\n :active {\n text-decoration: none;\n }\n', - ] - )) -) -var LinkIcon = styled(ExternalLink$1)( - templateObject_8$h || - (templateObject_8$h = __makeTemplateObject( - ['\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ', ';\n'], - ['\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ', ';\n'] - )), - function (_a) { - var theme = _a.theme - return theme.blue1 - } -) -var TrashIcon = styled(Trash)( - templateObject_9$g || - (templateObject_9$g = __makeTemplateObject( - [ - '\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ', - ';\n\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n opacity: 0.7;\n }\n', - ], - [ - '\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ', - ';\n\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n opacity: 0.7;\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.text3 - } -) -var rotateImg = keyframes( - templateObject_10$c || - (templateObject_10$c = __makeTemplateObject( - [ - '\n 0% {\n transform: perspective(1000px) rotateY(0deg);\n }\n\n 100% {\n transform: perspective(1000px) rotateY(360deg);\n }\n', - ], - [ - '\n 0% {\n transform: perspective(1000px) rotateY(0deg);\n }\n\n 100% {\n transform: perspective(1000px) rotateY(360deg);\n }\n', - ] - )) -) -var UniTokenAnimated = styled.img( - templateObject_11$a || - (templateObject_11$a = __makeTemplateObject( - [ - '\n animation: ', - ' 5s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n padding: 2rem 0 0 0;\n filter: drop-shadow(0px 2px 4px rgba(0, 0, 0, 0.15));\n', - ], - [ - '\n animation: ', - ' 5s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n padding: 2rem 0 0 0;\n filter: drop-shadow(0px 2px 4px rgba(0, 0, 0, 0.15));\n', - ] - )), - rotateImg -) -function handleClickExternalLink(event) { - var _a = event.currentTarget, - target = _a.target, - href = _a.href - var anonymizedHref = anonymizeLink(href) - // don't prevent default, don't redirect if it's a new tab - if (target === '_blank' || event.ctrlKey || event.metaKey) { - ReactGA.outboundLink({ label: anonymizedHref }, function () { - console.debug('Fired outbound link event', anonymizedHref) - }) - } else { - event.preventDefault() - // send a ReactGA event and then trigger a location change - ReactGA.outboundLink({ label: anonymizedHref }, function () { - window.location.href = anonymizedHref - }) - } -} -/** - * Outbound link that handles firing google analytics events - */ -function ExternalLink(_a) { - var _b = _a.target, - target = _b === void 0 ? '_blank' : _b, - href = _a.href, - _c = _a.rel, - rel = _c === void 0 ? 'noopener noreferrer' : _c, - rest = __rest(_a, ['target', 'href', 'rel']) - return jsx(StyledLink, __assign({ target, rel, href, onClick: handleClickExternalLink }, rest), void 0) -} -function ExternalLinkIcon(_a) { - var _b = _a.target, - target = _b === void 0 ? '_blank' : _b, - href = _a.href, - _c = _a.rel, - rel = _c === void 0 ? 'noopener noreferrer' : _c, - rest = __rest(_a, ['target', 'href', 'rel']) - return jsx( - LinkIconWrapper, - __assign({ target, rel, href, onClick: handleClickExternalLink }, rest, { - children: jsx(LinkIcon, {}, void 0), - }), - void 0 - ) -} -var rotate$1 = keyframes( - templateObject_12$a || - (templateObject_12$a = __makeTemplateObject( - ['\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n'], - ['\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n'] - )) -) -var Spinner$2 = styled.img( - templateObject_13$6 || - (templateObject_13$6 = __makeTemplateObject( - ['\n animation: 2s ', ' linear infinite;\n width: 16px;\n height: 16px;\n'], - ['\n animation: 2s ', ' linear infinite;\n width: 16px;\n height: 16px;\n'] - )), - rotate$1 -) -styled(StyledInternalLink)( - templateObject_14$6 || (templateObject_14$6 = __makeTemplateObject(['\n color: ', ';\n'], ['\n color: ', ';\n'])), - function (_a) { - var theme = _a.theme - return theme.text1 - } -) -var CustomLightSpinner = styled(Spinner$2)( - templateObject_15$4 || - (templateObject_15$4 = __makeTemplateObject( - ['\n height: ', ';\n width: ', ';\n'], - ['\n height: ', ';\n width: ', ';\n'] - )), - function (_a) { - var size = _a.size - return size - }, - function (_a) { - var size = _a.size - return size - } -) -var HideSmall = styled.span( - templateObject_17$2 || (templateObject_17$2 = __makeTemplateObject(['\n ', ';\n'], ['\n ', ';\n'])), - function (_a) { - var theme = _a.theme - return theme.mediaWidth.upToSmall( - templateObject_16$3 || - (templateObject_16$3 = __makeTemplateObject(['\n display: none;\n '], ['\n display: none;\n '])) - ) - } -) -styled.span( - templateObject_19$2 || (templateObject_19$2 = __makeTemplateObject(['\n ', ';\n'], ['\n ', ';\n'])), - function (_a) { - var theme = _a.theme - return theme.mediaWidth.upToExtraSmall( - templateObject_18$2 || - (templateObject_18$2 = __makeTemplateObject(['\n display: none;\n '], ['\n display: none;\n '])) - ) - } -) -styled.span( - templateObject_21$1 || - (templateObject_21$1 = __makeTemplateObject(['\n display: none;\n ', ';\n'], ['\n display: none;\n ', ';\n'])), - function (_a) { - var theme = _a.theme - return theme.mediaWidth.upToSmall( - templateObject_20$1 || - (templateObject_20$1 = __makeTemplateObject(['\n display: block;\n '], ['\n display: block;\n '])) - ) - } -) -var Separator$1 = styled.div( - templateObject_22 || - (templateObject_22 = __makeTemplateObject( - ['\n width: 100%;\n height: 1px;\n background-color: ', ';\n'], - ['\n width: 100%;\n height: 1px;\n background-color: ', ';\n'] - )), - function (_a) { - var theme = _a.theme - return theme.bg2 - } -) -var templateObject_1$1l, - templateObject_2$$, - templateObject_3$S, - templateObject_4$G, - templateObject_5$x, - templateObject_6$o, - templateObject_7$k, - templateObject_8$h, - templateObject_9$g, - templateObject_10$c, - templateObject_11$a, - templateObject_12$a, - templateObject_13$6, - templateObject_14$6, - templateObject_15$4, - templateObject_16$3, - templateObject_17$2, - templateObject_18$2, - templateObject_19$2, - templateObject_20$1, - templateObject_21$1, - templateObject_22 - -var MEDIA_WIDTHS = { - upToExtraSmall: 500, - upToSmall: 720, - upToMedium: 960, - upToLarge: 1280, -} -// Migrating to a standard z-index system https://getbootstrap.com/docs/5.0/layout/z-index/ -// Please avoid using deprecated numbers -var Z_INDEX -;(function (Z_INDEX) { - Z_INDEX[(Z_INDEX['deprecated_zero'] = 0)] = 'deprecated_zero' - Z_INDEX[(Z_INDEX['deprecated_content'] = 1)] = 'deprecated_content' - Z_INDEX[(Z_INDEX['dropdown'] = 1000)] = 'dropdown' - Z_INDEX[(Z_INDEX['sticky'] = 1020)] = 'sticky' - Z_INDEX[(Z_INDEX['fixed'] = 1030)] = 'fixed' - Z_INDEX[(Z_INDEX['modalBackdrop'] = 1040)] = 'modalBackdrop' - Z_INDEX[(Z_INDEX['offcanvas'] = 1050)] = 'offcanvas' - Z_INDEX[(Z_INDEX['modal'] = 1060)] = 'modal' - Z_INDEX[(Z_INDEX['popover'] = 1070)] = 'popover' - Z_INDEX[(Z_INDEX['tooltip'] = 1080)] = 'tooltip' -})(Z_INDEX || (Z_INDEX = {})) -var mediaWidthTemplates = Object.keys(MEDIA_WIDTHS).reduce(function (accumulator, size) { - accumulator[size] = function (a, b, c) { - return css( - templateObject_1$1k || - (templateObject_1$1k = __makeTemplateObject( - ['\n @media (max-width: ', 'px) {\n ', '\n }\n '], - ['\n @media (max-width: ', 'px) {\n ', '\n }\n '] - )), - MEDIA_WIDTHS[size], - css(a, b, c) - ) - } - return accumulator -}, {}) -var white = '#FFFFFF' -var black = '#000000' -function colors(darkMode) { - return { - darkMode, - // base - white, - black, - // text - text1: darkMode ? '#FFFFFF' : '#000000', - text2: darkMode ? '#C3C5CB' : '#565A69', - text3: darkMode ? '#8F96AC' : '#6E727D', - text4: darkMode ? '#B2B9D2' : '#C3C5CB', - text5: darkMode ? '#2C2F36' : '#EDEEF2', - // backgrounds / greys - bg0: darkMode ? '#191B1F' : '#FFF', - bg1: darkMode ? '#212429' : '#F7F8FA', - bg2: darkMode ? '#2C2F36' : '#EDEEF2', - bg3: darkMode ? '#40444F' : '#CED0D9', - bg4: darkMode ? '#565A69' : '#888D9B', - bg5: darkMode ? '#6C7284' : '#888D9B', - bg6: darkMode ? '#1A2028' : '#6C7284', - //specialty colors - modalBG: darkMode ? 'rgba(0,0,0,.425)' : 'rgba(0,0,0,0.3)', - advancedBG: darkMode ? 'rgba(0,0,0,0.1)' : 'rgba(255,255,255,0.6)', - //primary colors - primary1: darkMode ? '#2172E5' : '#E8006F', - primary2: darkMode ? '#3680E7' : '#FF8CC3', - primary3: darkMode ? '#4D8FEA' : '#FF99C9', - primary4: darkMode ? '#376bad70' : '#F6DDE8', - primary5: darkMode ? '#153d6f70' : '#FDEAF1', - // color text - primaryText1: darkMode ? '#5090ea' : '#D50066', - // secondary colors - secondary1: darkMode ? '#2172E5' : '#E8006F', - secondary2: darkMode ? '#17000b26' : '#F6DDE8', - secondary3: darkMode ? '#17000b26' : '#FDEAF1', - // other - red1: darkMode ? '#FF4343' : '#DA2D2B', - red2: darkMode ? '#F82D3A' : '#DF1F38', - red3: '#D60000', - green1: darkMode ? '#27AE60' : '#007D35', - yellow1: '#E3A507', - yellow2: '#FF8F00', - yellow3: '#F3B71E', - blue1: darkMode ? '#2172E5' : '#0068FC', - blue2: darkMode ? '#5199FF' : '#0068FC', - error: darkMode ? '#FD4040' : '#DF1F38', - success: darkMode ? '#27AE60' : '#007D35', - warning: '#FF8F00', - // dont wanna forget these blue yet - blue4: darkMode ? '#153d6f70' : '#C4D9F8', - // blue5: darkMode ? '#153d6f70' : '#EBF4FF', - } -} -function theme(darkMode) { - return __assign(__assign({}, colors(darkMode)), { - grids: { - sm: 8, - md: 12, - lg: 24, - }, - //shadows - shadow1: darkMode ? '#000' : '#2F80ED', - // media queries - mediaWidth: mediaWidthTemplates, - // css snippets - flexColumnNoWrap: css( - templateObject_2$_ || - (templateObject_2$_ = __makeTemplateObject( - ['\n display: flex;\n flex-flow: column nowrap;\n '], - ['\n display: flex;\n flex-flow: column nowrap;\n '] - )) - ), - flexRowNoWrap: css( - templateObject_3$R || - (templateObject_3$R = __makeTemplateObject( - ['\n display: flex;\n flex-flow: row nowrap;\n '], - ['\n display: flex;\n flex-flow: row nowrap;\n '] - )) - ), - }) -} -function ThemeProvider(_a) { - var children = _a.children - var darkMode = useIsDarkMode() - var themeObject = useMemo( - function () { - return theme(darkMode) - }, - [darkMode] - ) - return jsx(ThemeProvider$1, __assign({ theme: themeObject }, { children }), void 0) -} -var TextWrapper$1 = styled(Text$1)( - templateObject_4$F || - (templateObject_4$F = __makeTemplateObject( - ['\n color: ', ';\n'], - [ - '\n color: ', - ';\n', - /** - * Preset styles of the Rebass Text component - */ - ] - )), - function (_a) { - var color = _a.color, - theme = _a.theme - return theme[color] - } -) -/** - * Preset styles of the Rebass Text component - */ -var ThemedText = { - Main(props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text2' }, props), void 0) - }, - Link(props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'primary1' }, props), void 0) - }, - Label(props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 600, color: 'text1' }, props), void 0) - }, - Black(props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text1' }, props), void 0) - }, - White(props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'white' }, props), void 0) - }, - Body(props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 400, fontSize: 16, color: 'text1' }, props), void 0) - }, - LargeHeader(props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 600, fontSize: 24 }, props), void 0) - }, - MediumHeader(props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 500, fontSize: 20 }, props), void 0) - }, - SubHeader(props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 400, fontSize: 14 }, props), void 0) - }, - Small(props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 500, fontSize: 11 }, props), void 0) - }, - Blue(props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'blue1' }, props), void 0) - }, - Yellow(props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'yellow3' }, props), void 0) - }, - DarkGray(props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text3' }, props), void 0) - }, - Gray(props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'bg3' }, props), void 0) - }, - Italic(props) { - return jsx( - TextWrapper$1, - __assign({ fontWeight: 500, fontSize: 12, fontStyle: 'italic', color: 'text2' }, props), - void 0 - ) - }, - Error(_a) { - var error = _a.error, - props = __rest(_a, ['error']) - return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: error ? 'red1' : 'text2' }, props), void 0) - }, -} -var ThemedGlobalStyle = createGlobalStyle( - templateObject_5$w || - (templateObject_5$w = __makeTemplateObject( - ['\nhtml {\n color: ', ';\n background-color: ', ' !important;\n}\n\na {\n color: ', '; \n}\n'], - ['\nhtml {\n color: ', ';\n background-color: ', ' !important;\n}\n\na {\n color: ', '; \n}\n'] - )), - function (_a) { - var theme = _a.theme - return theme.text1 - }, - function (_a) { - var theme = _a.theme - return theme.bg1 - }, - function (_a) { - var theme = _a.theme - return theme.blue1 - } -) -var templateObject_1$1k, templateObject_2$_, templateObject_3$R, templateObject_4$F, templateObject_5$w - -var _a$b -var ETHERSCAN_PREFIXES = - ((_a$b = {}), - (_a$b[SupportedChainId.MAINNET] = 'https://etherscan.io'), - (_a$b[SupportedChainId.ROPSTEN] = 'https://ropsten.etherscan.io'), - (_a$b[SupportedChainId.RINKEBY] = 'https://rinkeby.etherscan.io'), - (_a$b[SupportedChainId.GOERLI] = 'https://goerli.etherscan.io'), - (_a$b[SupportedChainId.KOVAN] = 'https://kovan.etherscan.io'), - (_a$b[SupportedChainId.OPTIMISM] = 'https://optimistic.etherscan.io'), - (_a$b[SupportedChainId.OPTIMISTIC_KOVAN] = 'https://kovan-optimistic.etherscan.io'), - (_a$b[SupportedChainId.POLYGON_MUMBAI] = 'https://mumbai.polygonscan.com'), - (_a$b[SupportedChainId.POLYGON] = 'https://polygonscan.com'), - _a$b) -var ExplorerDataType -;(function (ExplorerDataType) { - ExplorerDataType['TRANSACTION'] = 'transaction' - ExplorerDataType['TOKEN'] = 'token' - ExplorerDataType['ADDRESS'] = 'address' - ExplorerDataType['BLOCK'] = 'block' -})(ExplorerDataType || (ExplorerDataType = {})) -/** - * Return the explorer link for the given data and data type - * @param chainId the ID of the chain for which to return the data - * @param data the data to return a link for - * @param type the type of the data - */ -function getExplorerLink(chainId, data, type) { - var _a - if (chainId === SupportedChainId.ARBITRUM_ONE) { - switch (type) { - case ExplorerDataType.TRANSACTION: - return 'https://arbiscan.io/tx/' + data - case ExplorerDataType.ADDRESS: - case ExplorerDataType.TOKEN: - return 'https://arbiscan.io/address/' + data - case ExplorerDataType.BLOCK: - return 'https://arbiscan.io/block/' + data - default: - return 'https://arbiscan.io/' - } - } - if (chainId === SupportedChainId.ARBITRUM_RINKEBY) { - switch (type) { - case ExplorerDataType.TRANSACTION: - return 'https://rinkeby-explorer.arbitrum.io/tx/' + data - case ExplorerDataType.ADDRESS: - case ExplorerDataType.TOKEN: - return 'https://rinkeby-explorer.arbitrum.io/address/' + data - case ExplorerDataType.BLOCK: - return 'https://rinkeby-explorer.arbitrum.io/block/' + data - default: - return 'https://rinkeby-explorer.arbitrum.io/' - } - } - var prefix = (_a = ETHERSCAN_PREFIXES[chainId]) !== null && _a !== void 0 ? _a : 'https://etherscan.io' - switch (type) { - case ExplorerDataType.TRANSACTION: - return prefix + '/tx/' + data - case ExplorerDataType.TOKEN: - return prefix + '/token/' + data - case ExplorerDataType.BLOCK: - if (chainId === SupportedChainId.OPTIMISM || chainId === SupportedChainId.OPTIMISTIC_KOVAN) { - return prefix + '/tx/' + data - } - return prefix + '/block/' + data - case ExplorerDataType.ADDRESS: - return prefix + '/address/' + data - default: - return '' + prefix - } -} +var _a$8; +var slice = createSlice({ + name: 'logs', + initialState: {}, + reducers: { + addListener: function (state, _a) { + var _b = _a.payload, chainId = _b.chainId, filter = _b.filter; + if (!state[chainId]) + state[chainId] = {}; + var key = filterToKey(filter); + if (!state[chainId][key]) + state[chainId][key] = { + listeners: 1, + }; + else + state[chainId][key].listeners++; + }, + fetchingLogs: function (state, _a) { + var e_1, _b; + var _c = _a.payload, chainId = _c.chainId, filters = _c.filters, blockNumber = _c.blockNumber; + if (!state[chainId]) + return; + try { + for (var filters_1 = __values(filters), filters_1_1 = filters_1.next(); !filters_1_1.done; filters_1_1 = filters_1.next()) { + var filter = filters_1_1.value; + var key = filterToKey(filter); + if (!state[chainId][key]) + continue; + state[chainId][key].fetchingBlockNumber = blockNumber; + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (filters_1_1 && !filters_1_1.done && (_b = filters_1.return)) _b.call(filters_1); + } + finally { if (e_1) throw e_1.error; } + } + }, + fetchedLogs: function (state, _a) { + var _b = _a.payload, chainId = _b.chainId, filter = _b.filter, results = _b.results; + if (!state[chainId]) + return; + var key = filterToKey(filter); + var fetchState = state[chainId][key]; + if (!fetchState || (fetchState.results && fetchState.results.blockNumber > results.blockNumber)) + return; + fetchState.results = results; + }, + fetchedLogsError: function (state, _a) { + var _b = _a.payload, chainId = _b.chainId, filter = _b.filter, blockNumber = _b.blockNumber; + if (!state[chainId]) + return; + var key = filterToKey(filter); + var fetchState = state[chainId][key]; + if (!fetchState || (fetchState.results && fetchState.results.blockNumber > blockNumber)) + return; + fetchState.results = { + blockNumber: blockNumber, + error: true, + }; + }, + removeListener: function (state, _a) { + var _b = _a.payload, chainId = _b.chainId, filter = _b.filter; + if (!state[chainId]) + return; + var key = filterToKey(filter); + if (!state[chainId][key]) + return; + state[chainId][key].listeners--; + }, + }, +}); +var logs = slice.reducer; +(_a$8 = slice.actions, _a$8.addListener); _a$8.removeListener; var fetchedLogs = _a$8.fetchedLogs, fetchedLogsError = _a$8.fetchedLogsError, fetchingLogs = _a$8.fetchingLogs; + +var Field$2; +(function (Field) { + Field["CURRENCY_A"] = "CURRENCY_A"; + Field["CURRENCY_B"] = "CURRENCY_B"; +})(Field$2 || (Field$2 = {})); +var typeInput$2 = createAction('mint/typeInputMint'); +var resetMintState$1 = createAction('mint/resetMintState'); + +var initialState$4 = { + independentField: Field$2.CURRENCY_A, + typedValue: '', + otherTypedValue: '', + startPriceTypedValue: '', + leftRangeTypedValue: '', + rightRangeTypedValue: '', +}; +var mint = createReducer(initialState$4, function (builder) { + return builder + .addCase(resetMintState$1, function () { return initialState$4; }) + .addCase(typeInput$2, function (state, _a) { + var _b = _a.payload, field = _b.field, typedValue = _b.typedValue, noLiquidity = _b.noLiquidity; + if (noLiquidity) { + // they're typing into the field they've last typed in + if (field === state.independentField) { + return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); + } + // they're typing into a new field, store the other value + else { + return __assign(__assign({}, state), { independentField: field, typedValue: typedValue, otherTypedValue: state.typedValue }); + } + } + else { + return __assign(__assign({}, state), { independentField: field, typedValue: typedValue, otherTypedValue: '' }); + } + }); +}); -var Column = styled.div( - templateObject_1$1j || - (templateObject_1$1j = __makeTemplateObject( - ['\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n'], - ['\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n'] - )) -) -var ColumnCenter = styled(Column)( - templateObject_2$Z || - (templateObject_2$Z = __makeTemplateObject( - ['\n width: 100%;\n align-items: center;\n'], - ['\n width: 100%;\n align-items: center;\n'] - )) -) -var AutoColumn = styled.div( - templateObject_3$Q || - (templateObject_3$Q = __makeTemplateObject( - ['\n display: grid;\n grid-auto-rows: auto;\n grid-row-gap: ', ';\n justify-items: ', ';\n'], - ['\n display: grid;\n grid-auto-rows: auto;\n grid-row-gap: ', ';\n justify-items: ', ';\n'] - )), - function (_a) { - var gap = _a.gap - return (gap === 'sm' && '8px') || (gap === 'md' && '12px') || (gap === 'lg' && '24px') || gap - }, - function (_a) { - var justify = _a.justify - return justify && justify - } -) -var templateObject_1$1j, templateObject_2$Z, templateObject_3$Q - -var Row$1 = styled(Box)( - templateObject_1$1i || - (templateObject_1$1i = __makeTemplateObject( - [ - '\n width: ', - ';\n display: flex;\n padding: 0;\n align-items: ', - ';\n justify-content: ', - ';\n padding: ', - ';\n border: ', - ';\n border-radius: ', - ';\n', - ], - [ - '\n width: ', - ';\n display: flex;\n padding: 0;\n align-items: ', - ';\n justify-content: ', - ';\n padding: ', - ';\n border: ', - ';\n border-radius: ', - ';\n', - ] - )), - function (_a) { - var width = _a.width - return width !== null && width !== void 0 ? width : '100%' - }, - function (_a) { - var align = _a.align - return align !== null && align !== void 0 ? align : 'center' - }, - function (_a) { - var justify = _a.justify - return justify !== null && justify !== void 0 ? justify : 'flex-start' - }, - function (_a) { - var padding = _a.padding - return padding - }, - function (_a) { - var border = _a.border - return border - }, - function (_a) { - var borderRadius = _a.borderRadius - return borderRadius - } -) -var RowBetween = styled(Row$1)( - templateObject_2$Y || - (templateObject_2$Y = __makeTemplateObject( - ['\n justify-content: space-between;\n'], - ['\n justify-content: space-between;\n'] - )) -) -styled.div( - templateObject_3$P || - (templateObject_3$P = __makeTemplateObject( - ['\n display: flex;\n align-items: flex-end;\n'], - ['\n display: flex;\n align-items: flex-end;\n'] - )) -) -var AutoRow = styled(Row$1)( - templateObject_4$E || - (templateObject_4$E = __makeTemplateObject( - [ - '\n flex-wrap: wrap;\n margin: ', - ';\n justify-content: ', - ';\n\n & > * {\n margin: ', - ' !important;\n }\n', - ], - [ - '\n flex-wrap: wrap;\n margin: ', - ';\n justify-content: ', - ';\n\n & > * {\n margin: ', - ' !important;\n }\n', - ] - )), - function (_a) { - var gap = _a.gap - return gap && '-' + gap - }, - function (_a) { - var justify = _a.justify - return justify && justify - }, - function (_a) { - var gap = _a.gap - return gap - } -) -var RowFixed = styled(Row$1)( - templateObject_5$v || - (templateObject_5$v = __makeTemplateObject( - ['\n width: fit-content;\n margin: ', ';\n'], - ['\n width: fit-content;\n margin: ', ';\n'] - )), - function (_a) { - var gap = _a.gap - return gap && '-' + gap - } -) -var templateObject_1$1i, templateObject_2$Y, templateObject_3$P, templateObject_4$E, templateObject_5$v - -var InputPanel$1 = styled.div( - templateObject_1$1h || - (templateObject_1$1h = __makeTemplateObject( - [ - '\n ', - '\n position: relative;\n border-radius: 1.25rem;\n background-color: ', - ';\n z-index: 1;\n width: 100%;\n', - ], - [ - '\n ', - '\n position: relative;\n border-radius: 1.25rem;\n background-color: ', - ';\n z-index: 1;\n width: 100%;\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.flexColumnNoWrap - }, - function (_a) { - var theme = _a.theme - return theme.bg1 - } -) -var ContainerRow = styled.div( - templateObject_2$X || - (templateObject_2$X = __makeTemplateObject( - [ - '\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 1.25rem;\n border: 1px solid ', - ';\n transition: border-color 300ms ', - ',\n color 500ms ', - ';\n background-color: ', - ';\n', - ], - [ - '\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 1.25rem;\n border: 1px solid ', - ';\n transition: border-color 300ms ', - ',\n color 500ms ', - ';\n background-color: ', - ';\n', - ] - )), - function (_a) { - var error = _a.error, - theme = _a.theme - return error ? theme.red1 : theme.bg2 - }, - function (_a) { - var error = _a.error - return error ? 'step-end' : 'step-start' - }, - function (_a) { - var error = _a.error - return error ? 'step-end' : 'step-start' - }, - function (_a) { - var theme = _a.theme - return theme.bg1 - } -) -var InputContainer = styled.div( - templateObject_3$O || - (templateObject_3$O = __makeTemplateObject( - ['\n flex: 1;\n padding: 1rem;\n'], - ['\n flex: 1;\n padding: 1rem;\n'] - )) -) -var Input$2 = styled.input( - templateObject_4$D || - (templateObject_4$D = __makeTemplateObject( - [ - '\n font-size: 1.25rem;\n outline: none;\n border: none;\n flex: 1 1 auto;\n width: 0;\n background-color: ', - ';\n transition: color 300ms ', - ';\n color: ', - ';\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 500;\n width: 100%;\n ::placeholder {\n color: ', - ';\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: ', - ';\n }\n', - ], - [ - '\n font-size: 1.25rem;\n outline: none;\n border: none;\n flex: 1 1 auto;\n width: 0;\n background-color: ', - ';\n transition: color 300ms ', - ';\n color: ', - ';\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 500;\n width: 100%;\n ::placeholder {\n color: ', - ';\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: ', - ';\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.bg1 - }, - function (_a) { - var error = _a.error - return error ? 'step-end' : 'step-start' - }, - function (_a) { - var error = _a.error, - theme = _a.theme - return error ? theme.red1 : theme.text1 - }, - function (_a) { - var theme = _a.theme - return theme.text4 - }, - function (_a) { - var theme = _a.theme - return theme.text4 - } -) -function AddressInputPanel(_a) { - var id = _a.id, - _b = _a.className, - className = _b === void 0 ? 'recipient-address-input' : _b, - label = _a.label, - placeholder = _a.placeholder, - value = _a.value, - onChange = _a.onChange - var chainId = useActiveWeb3React().chainId - var theme = useContext(ThemeContext) - var _c = useENS(value), - address = _c.address, - loading = _c.loading, - name = _c.name - var handleInput = useCallback( - function (event) { - var input = event.target.value - var withoutSpaces = input.replace(/\s+/g, '') - onChange(withoutSpaces) - }, - [onChange] - ) - var error = Boolean(value.length > 0 && !loading && !address) - return jsx( - InputPanel$1, - __assign( - { id }, - { - children: jsx( - ContainerRow, - __assign( - { error }, - { - children: jsx( - InputContainer, - { - children: jsxs( - AutoColumn, - __assign( - { gap: 'md' }, - { - children: [ - jsxs( - RowBetween, - { - children: [ - jsx( - ThemedText.Black, - __assign( - { color: theme.text2, fontWeight: 500, fontSize: 14 }, - { - children: - label !== null && label !== void 0 - ? label - : jsx(Trans, { children: 'Recipient' }, void 0), - } - ), - void 0 - ), - address && - chainId && - jsx( - ExternalLink, - __assign( - { - href: getExplorerLink( - chainId, - name !== null && name !== void 0 ? name : address, - ExplorerDataType.ADDRESS - ), - style: { fontSize: '14px' }, - }, - { children: jsx(Trans, { children: '(View on Explorer)' }, void 0) } - ), - void 0 - ), - ], - }, - void 0 - ), - jsx( - Input$2, - { - className, - type: 'text', - autoComplete: 'off', - autoCorrect: 'off', - autoCapitalize: 'off', - spellCheck: 'false', - placeholder: - placeholder !== null && placeholder !== void 0 - ? placeholder - : t( - templateObject_5$u || - (templateObject_5$u = __makeTemplateObject( - ['Wallet Address or ENS name'], - ['Wallet Address or ENS name'] - )) - ), - error, - pattern: '^(0x[a-fA-F0-9]{40})$', - onChange: handleInput, - value, - }, - void 0 - ), - ], - } - ), - void 0 - ), - }, - void 0 - ), - } - ), - void 0 - ), - } - ), - void 0 - ) -} -var templateObject_1$1h, templateObject_2$X, templateObject_3$O, templateObject_4$D, templateObject_5$u +var Field$1; +(function (Field) { + Field["CURRENCY_A"] = "CURRENCY_A"; + Field["CURRENCY_B"] = "CURRENCY_B"; +})(Field$1 || (Field$1 = {})); +var Bound; +(function (Bound) { + Bound["LOWER"] = "LOWER"; + Bound["UPPER"] = "UPPER"; +})(Bound || (Bound = {})); +var typeInput$1 = createAction('mintV3/typeInputMint'); +var typeStartPriceInput = createAction('mintV3/typeStartPriceInput'); +var typeLeftRangeInput = createAction('mintV3/typeLeftRangeInput'); +var typeRightRangeInput = createAction('mintV3/typeRightRangeInput'); +var resetMintState = createAction('mintV3/resetMintState'); +var setFullRange = createAction('mintV3/setFullRange'); + +var initialState$3 = { + independentField: Field$1.CURRENCY_A, + typedValue: '', + startPriceTypedValue: '', + leftRangeTypedValue: '', + rightRangeTypedValue: '', +}; +var mintV3 = createReducer(initialState$3, function (builder) { + return builder + .addCase(resetMintState, function () { return initialState$3; }) + .addCase(setFullRange, function (state) { + return __assign(__assign({}, state), { leftRangeTypedValue: true, rightRangeTypedValue: true }); + }) + .addCase(typeStartPriceInput, function (state, _a) { + var typedValue = _a.payload.typedValue; + return __assign(__assign({}, state), { startPriceTypedValue: typedValue }); + }) + .addCase(typeLeftRangeInput, function (state, _a) { + var typedValue = _a.payload.typedValue; + return __assign(__assign({}, state), { leftRangeTypedValue: typedValue }); + }) + .addCase(typeRightRangeInput, function (state, _a) { + var typedValue = _a.payload.typedValue; + return __assign(__assign({}, state), { rightRangeTypedValue: typedValue }); + }) + .addCase(typeInput$1, function (state, _a) { + var _b = _a.payload, field = _b.field, typedValue = _b.typedValue, noLiquidity = _b.noLiquidity; + if (noLiquidity) { + // they're typing into the field they've last typed in + if (field === state.independentField) { + return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); + } + // they're typing into a new field, store the other value + else { + return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); + } + } + else { + return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); + } + }); +}); -function useTheme() { - return useContext(ThemeContext) +var protocols = [Protocol.V2, Protocol.V3]; +var DEFAULT_QUERY_PARAMS = { + protocols: protocols.map(function (p) { return p.toLowerCase(); }).join(','), + // example other params + // forceCrossProtocol: 'true', + // minSplits: '5', +}; +function getClientSideQuote(_a) { + var tokenInAddress = _a.tokenInAddress, tokenInChainId = _a.tokenInChainId, tokenInDecimals = _a.tokenInDecimals, tokenInSymbol = _a.tokenInSymbol, tokenOutAddress = _a.tokenOutAddress, tokenOutChainId = _a.tokenOutChainId, tokenOutDecimals = _a.tokenOutDecimals, tokenOutSymbol = _a.tokenOutSymbol, amount = _a.amount, type = _a.type; + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_b) { + switch (_b.label) { + case 0: return [4 /*yield*/, Promise.resolve().then(function () { return index; })]; + case 1: return [2 /*return*/, (_b.sent()).getQuote({ + type: type, + chainId: tokenInChainId, + tokenIn: { + address: tokenInAddress, + chainId: tokenInChainId, + decimals: tokenInDecimals, + symbol: tokenInSymbol, + }, + tokenOut: { + address: tokenOutAddress, + chainId: tokenOutChainId, + decimals: tokenOutDecimals, + symbol: tokenOutSymbol, + }, + amount: amount, + }, { protocols: protocols })]; + } + }); + }); +} +var routingApi = createApi({ + reducerPath: 'routingApi', + baseQuery: fetchBaseQuery({ + baseUrl: 'https://api.uniswap.org/v1/', + }), + endpoints: function (build) { return ({ + getQuote: build.query({ + queryFn: function (args, _api, _extraOptions, fetch) { + return __awaiter(this, void 0, void 0, function () { + var tokenInAddress, tokenInChainId, tokenOutAddress, tokenOutChainId, amount, useClientSideRouter, type, result, query, e_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + tokenInAddress = args.tokenInAddress, tokenInChainId = args.tokenInChainId, tokenOutAddress = args.tokenOutAddress, tokenOutChainId = args.tokenOutChainId, amount = args.amount, useClientSideRouter = args.useClientSideRouter, type = args.type; + _a.label = 1; + case 1: + _a.trys.push([1, 6, , 7]); + if (!useClientSideRouter) return [3 /*break*/, 3]; + return [4 /*yield*/, getClientSideQuote(args)]; + case 2: + result = _a.sent(); + return [3 /*break*/, 5]; + case 3: + query = qs.stringify(__assign(__assign({}, DEFAULT_QUERY_PARAMS), { tokenInAddress: tokenInAddress, tokenInChainId: tokenInChainId, tokenOutAddress: tokenOutAddress, tokenOutChainId: tokenOutChainId, amount: amount, type: type })); + return [4 /*yield*/, fetch("quote?" + query)]; + case 4: + result = _a.sent(); + _a.label = 5; + case 5: return [2 /*return*/, { data: result.data }]; + case 6: + e_1 = _a.sent(); + // TODO: fall back to client-side quoter when auto router fails. + // deprecate 'legacy' v2/v3 routers first. + return [2 /*return*/, { error: e_1 }]; + case 7: return [2 /*return*/]; + } + }); + }); + }, + keepUnusedDataFor: ms(templateObject_1$1b || (templateObject_1$1b = __makeTemplateObject(["10s"], ["10s"]))), + extraOptions: { + maxRetries: 0, + }, + }), + }); }, +}); +var useGetQuoteQuery = routingApi.useGetQuoteQuery; +var templateObject_1$1b; + +var Field; +(function (Field) { + Field["INPUT"] = "INPUT"; + Field["OUTPUT"] = "OUTPUT"; +})(Field || (Field = {})); +var selectCurrency = createAction('swap/selectCurrency'); +var switchCurrencies = createAction('swap/switchCurrencies'); +var typeInput = createAction('swap/typeInput'); +var replaceSwapState = createAction('swap/replaceSwapState'); +var setRecipient = createAction('swap/setRecipient'); + +var CHAIN_DATA_ABI = [ + { + inputs: [], + name: 'latestAnswer', + outputs: [{ internalType: 'int256', name: '', type: 'int256' }], + stateMutability: 'view', + type: 'function', + }, +]; +/** + * Returns the price of 1 gas in WEI for the currently selected network using the chainlink fast gas price oracle + */ +function useGasPrice() { + var _a, _b; + var address = useENSAddress('fast-gas-gwei.data.eth').address; + var contract = useContract(address !== null && address !== void 0 ? address : undefined, CHAIN_DATA_ABI, false); + var resultStr = (_b = (_a = useSingleCallResult(contract, 'latestAnswer').result) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.toString(); + return typeof resultStr === 'string' ? JSBI.BigInt(resultStr) : undefined; } -var BaseButton = styled(Button$1)( - templateObject_1$1g || - (templateObject_1$1g = __makeTemplateObject( - [ - '\n padding: ', - ';\n width: ', - ';\n font-weight: 500;\n text-align: center;\n border-radius: ', - ';\n outline: none;\n border: 1px solid transparent;\n color: ', - ';\n text-decoration: none;\n display: flex;\n justify-content: center;\n flex-wrap: nowrap;\n align-items: center;\n cursor: pointer;\n position: relative;\n z-index: 1;\n &:disabled {\n opacity: 50%;\n cursor: auto;\n pointer-events: none;\n }\n\n will-change: transform;\n transition: transform 450ms ease;\n transform: perspective(1px) translateZ(0);\n\n > * {\n user-select: none;\n }\n\n > a {\n text-decoration: none;\n }\n', - ], - [ - '\n padding: ', - ';\n width: ', - ';\n font-weight: 500;\n text-align: center;\n border-radius: ', - ';\n outline: none;\n border: 1px solid transparent;\n color: ', - ';\n text-decoration: none;\n display: flex;\n justify-content: center;\n flex-wrap: nowrap;\n align-items: center;\n cursor: pointer;\n position: relative;\n z-index: 1;\n &:disabled {\n opacity: 50%;\n cursor: auto;\n pointer-events: none;\n }\n\n will-change: transform;\n transition: transform 450ms ease;\n transform: perspective(1px) translateZ(0);\n\n > * {\n user-select: none;\n }\n\n > a {\n text-decoration: none;\n }\n', - ] - )), - function (_a) { - var padding = _a.padding - return padding !== null && padding !== void 0 ? padding : '16px' - }, - function (_a) { - var width = _a.width - return width !== null && width !== void 0 ? width : '100%' - }, - function (_a) { - var $borderRadius = _a.$borderRadius - return $borderRadius !== null && $borderRadius !== void 0 ? $borderRadius : '20px' - }, - function (_a) { - var theme = _a.theme - return theme.text1 - } -) -var ButtonPrimary = styled(BaseButton)( - templateObject_2$W || - (templateObject_2$W = __makeTemplateObject( - [ - '\n background-color: ', - ';\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n &:hover {\n background-color: ', - ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n &:disabled {\n background-color: ', - ';\n color: ', - ';\n cursor: auto;\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n', - ], - [ - '\n background-color: ', - ';\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n &:hover {\n background-color: ', - ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n &:disabled {\n background-color: ', - ';\n color: ', - ';\n cursor: auto;\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.primary1 - }, - function (_a) { - var theme = _a.theme - return darken(0.05, theme.primary1) - }, - function (_a) { - var theme = _a.theme - return darken(0.05, theme.primary1) - }, - function (_a) { - var theme = _a.theme - return darken(0.05, theme.primary1) - }, - function (_a) { - var theme = _a.theme - return darken(0.1, theme.primary1) - }, - function (_a) { - var theme = _a.theme - return darken(0.1, theme.primary1) - }, - function (_a) { - var theme = _a.theme, - altDisabledStyle = _a.altDisabledStyle, - disabled = _a.disabled - return altDisabledStyle ? (disabled ? theme.primary1 : theme.bg2) : theme.bg2 - }, - function (_a) { - var altDisabledStyle = _a.altDisabledStyle, - disabled = _a.disabled, - theme = _a.theme - return altDisabledStyle ? (disabled ? theme.white : theme.text2) : theme.text2 - } -) -var ButtonLight = styled(BaseButton)( - templateObject_3$N || - (templateObject_3$N = __makeTemplateObject( - [ - '\n background-color: ', - ';\n color: ', - ';\n font-size: 16px;\n font-weight: 500;\n &:focus {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n &:hover {\n background-color: ', - ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n :disabled {\n opacity: 0.4;\n :hover {\n cursor: auto;\n background-color: ', - ';\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n }\n', - ], - [ - '\n background-color: ', - ';\n color: ', - ';\n font-size: 16px;\n font-weight: 500;\n &:focus {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n &:hover {\n background-color: ', - ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n :disabled {\n opacity: 0.4;\n :hover {\n cursor: auto;\n background-color: ', - ';\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.primary5 - }, - function (_a) { - var theme = _a.theme - return theme.primaryText1 - }, - function (_a) { - var theme = _a.theme, - disabled = _a.disabled - return !disabled && darken(0.03, theme.primary5) - }, - function (_a) { - var theme = _a.theme, - disabled = _a.disabled - return !disabled && darken(0.03, theme.primary5) - }, - function (_a) { - var theme = _a.theme, - disabled = _a.disabled - return !disabled && darken(0.03, theme.primary5) - }, - function (_a) { - var theme = _a.theme, - disabled = _a.disabled - return !disabled && darken(0.05, theme.primary5) - }, - function (_a) { - var theme = _a.theme, - disabled = _a.disabled - return !disabled && darken(0.05, theme.primary5) - }, - function (_a) { - var theme = _a.theme - return theme.primary5 - } -) -var ButtonGray = styled(BaseButton)( - templateObject_4$C || - (templateObject_4$C = __makeTemplateObject( - [ - '\n background-color: ', - ';\n color: ', - ';\n font-size: 16px;\n font-weight: 500;\n\n &:hover {\n background-color: ', - ';\n }\n &:active {\n background-color: ', - ';\n }\n', - ], - [ - '\n background-color: ', - ';\n color: ', - ';\n font-size: 16px;\n font-weight: 500;\n\n &:hover {\n background-color: ', - ';\n }\n &:active {\n background-color: ', - ';\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.bg1 - }, - function (_a) { - var theme = _a.theme - return theme.text2 - }, - function (_a) { - var theme = _a.theme, - disabled = _a.disabled - return !disabled && darken(0.05, theme.bg2) - }, - function (_a) { - var theme = _a.theme, - disabled = _a.disabled - return !disabled && darken(0.1, theme.bg2) - } -) -var ButtonSecondary = styled(BaseButton)( - templateObject_5$t || - (templateObject_5$t = __makeTemplateObject( - [ - '\n border: 1px solid ', - ';\n color: ', - ';\n background-color: transparent;\n font-size: 16px;\n border-radius: 12px;\n padding: ', - ';\n\n &:focus {\n box-shadow: 0 0 0 1pt ', - ';\n border: 1px solid ', - ';\n }\n &:hover {\n border: 1px solid ', - ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', - ';\n border: 1px solid ', - ';\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n a:hover {\n text-decoration: none;\n }\n', - ], - [ - '\n border: 1px solid ', - ';\n color: ', - ';\n background-color: transparent;\n font-size: 16px;\n border-radius: 12px;\n padding: ', - ';\n\n &:focus {\n box-shadow: 0 0 0 1pt ', - ';\n border: 1px solid ', - ';\n }\n &:hover {\n border: 1px solid ', - ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', - ';\n border: 1px solid ', - ';\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n a:hover {\n text-decoration: none;\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.primary4 - }, - function (_a) { - var theme = _a.theme - return theme.primary1 - }, - function (_a) { - var padding = _a.padding - return padding ? padding : '10px' - }, - function (_a) { - var theme = _a.theme - return theme.primary4 - }, - function (_a) { - var theme = _a.theme - return theme.primary3 - }, - function (_a) { - var theme = _a.theme - return theme.primary3 - }, - function (_a) { - var theme = _a.theme - return theme.primary4 - }, - function (_a) { - var theme = _a.theme - return theme.primary3 - } -) -var ButtonOutlined = styled(BaseButton)( - templateObject_6$n || - (templateObject_6$n = __makeTemplateObject( - [ - '\n border: 1px solid ', - ';\n background-color: transparent;\n color: ', - ';\n &:focus {\n box-shadow: 0 0 0 1px ', - ';\n }\n &:hover {\n box-shadow: 0 0 0 1px ', - ';\n }\n &:active {\n box-shadow: 0 0 0 1px ', - ';\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n', - ], - [ - '\n border: 1px solid ', - ';\n background-color: transparent;\n color: ', - ';\n &:focus {\n box-shadow: 0 0 0 1px ', - ';\n }\n &:hover {\n box-shadow: 0 0 0 1px ', - ';\n }\n &:active {\n box-shadow: 0 0 0 1px ', - ';\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.bg2 - }, - function (_a) { - var theme = _a.theme - return theme.text1 - }, - function (_a) { - var theme = _a.theme - return theme.bg4 - }, - function (_a) { - var theme = _a.theme - return theme.bg4 - }, - function (_a) { - var theme = _a.theme - return theme.bg4 - } -) -styled(BaseButton)( - templateObject_7$j || - (templateObject_7$j = __makeTemplateObject( - [ - '\n background-color: ', - ';\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n &:hover {\n background-color: ', - ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n &:disabled {\n background-color: ', - ';\n opacity: 50%;\n cursor: auto;\n }\n', - ], - [ - '\n background-color: ', - ';\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n &:hover {\n background-color: ', - ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n &:disabled {\n background-color: ', - ';\n opacity: 50%;\n cursor: auto;\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.yellow3 - }, - function (_a) { - var theme = _a.theme - return darken(0.05, theme.yellow3) - }, - function (_a) { - var theme = _a.theme - return darken(0.05, theme.yellow3) - }, - function (_a) { - var theme = _a.theme - return darken(0.05, theme.yellow3) - }, - function (_a) { - var theme = _a.theme - return darken(0.1, theme.yellow3) - }, - function (_a) { - var theme = _a.theme - return darken(0.1, theme.yellow3) - }, - function (_a) { - var theme = _a.theme - return theme.yellow3 - } -) -var ButtonEmpty = styled(BaseButton)( - templateObject_8$g || - (templateObject_8$g = __makeTemplateObject( - [ - '\n background-color: transparent;\n color: ', - ';\n display: flex;\n justify-content: center;\n align-items: center;\n\n &:focus {\n text-decoration: underline;\n }\n &:hover {\n text-decoration: none;\n }\n &:active {\n text-decoration: none;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n', - ], - [ - '\n background-color: transparent;\n color: ', - ';\n display: flex;\n justify-content: center;\n align-items: center;\n\n &:focus {\n text-decoration: underline;\n }\n &:hover {\n text-decoration: none;\n }\n &:active {\n text-decoration: none;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.primary1 - } -) -styled(BaseButton)( - templateObject_9$f || - (templateObject_9$f = __makeTemplateObject( - [ - '\n padding: 0;\n width: fit-content;\n background: none;\n text-decoration: none;\n &:focus {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n text-decoration: underline;\n }\n &:hover {\n // text-decoration: underline;\n opacity: 0.9;\n }\n &:active {\n text-decoration: underline;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n', - ], - [ - '\n padding: 0;\n width: fit-content;\n background: none;\n text-decoration: none;\n &:focus {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n text-decoration: underline;\n }\n &:hover {\n // text-decoration: underline;\n opacity: 0.9;\n }\n &:active {\n text-decoration: underline;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n', - ] - )) -) -var ButtonConfirmedStyle = styled(BaseButton)( - templateObject_10$b || - (templateObject_10$b = __makeTemplateObject( - [ - '\n background-color: ', - ';\n color: ', - ';\n /* border: 1px solid ', - '; */\n\n &:disabled {\n opacity: 50%;\n background-color: ', - ';\n color: ', - ';\n cursor: auto;\n }\n', - ], - [ - '\n background-color: ', - ';\n color: ', - ';\n /* border: 1px solid ', - '; */\n\n &:disabled {\n opacity: 50%;\n background-color: ', - ';\n color: ', - ';\n cursor: auto;\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.bg3 - }, - function (_a) { - var theme = _a.theme - return theme.text1 - }, - function (_a) { - var theme = _a.theme - return theme.green1 - }, - function (_a) { - var theme = _a.theme - return theme.bg2 - }, - function (_a) { - var theme = _a.theme - return theme.text2 - } -) -var ButtonErrorStyle = styled(BaseButton)( - templateObject_11$9 || - (templateObject_11$9 = __makeTemplateObject( - [ - '\n background-color: ', - ';\n border: 1px solid ', - ';\n\n &:focus {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n &:hover {\n background-color: ', - ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n box-shadow: none;\n background-color: ', - ';\n border: 1px solid ', - ';\n }\n', - ], - [ - '\n background-color: ', - ';\n border: 1px solid ', - ';\n\n &:focus {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n &:hover {\n background-color: ', - ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', - ';\n background-color: ', - ';\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n box-shadow: none;\n background-color: ', - ';\n border: 1px solid ', - ';\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.red1 - }, - function (_a) { - var theme = _a.theme - return theme.red1 - }, - function (_a) { - var theme = _a.theme - return darken(0.05, theme.red1) - }, - function (_a) { - var theme = _a.theme - return darken(0.05, theme.red1) - }, - function (_a) { - var theme = _a.theme - return darken(0.05, theme.red1) - }, - function (_a) { - var theme = _a.theme - return darken(0.1, theme.red1) - }, - function (_a) { - var theme = _a.theme - return darken(0.1, theme.red1) - }, - function (_a) { - var theme = _a.theme - return theme.red1 - }, - function (_a) { - var theme = _a.theme - return theme.red1 - } -) -function ButtonConfirmed(_a) { - var confirmed = _a.confirmed, - altDisabledStyle = _a.altDisabledStyle, - rest = __rest(_a, ['confirmed', 'altDisabledStyle']) - if (confirmed) { - return jsx(ButtonConfirmedStyle, __assign({}, rest), void 0) - } else { - return jsx(ButtonPrimary, __assign({}, rest, { altDisabledStyle }), void 0) - } -} -function ButtonError(_a) { - var error = _a.error, - rest = __rest(_a, ['error']) - if (error) { - return jsx(ButtonErrorStyle, __assign({}, rest), void 0) - } else { - return jsx(ButtonPrimary, __assign({}, rest), void 0) - } -} -styled(ButtonOutlined)( - templateObject_12$9 || - (templateObject_12$9 = __makeTemplateObject( - ['\n border: 1px solid;\n border-color: ', ';\n'], - ['\n border: 1px solid;\n border-color: ', ';\n'] - )), - function (_a) { - var theme = _a.theme - return theme.primary1 - } -) -styled.div( - templateObject_13$5 || - (templateObject_13$5 = __makeTemplateObject( - [ - '\n height: 17px;\n width: 17px;\n border-radius: 50%;\n background-color: ', - ';\n display: flex;\n align-items: center;\n justify-content: center;\n', - ], - [ - '\n height: 17px;\n width: 17px;\n border-radius: 50%;\n background-color: ', - ';\n display: flex;\n align-items: center;\n justify-content: center;\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.primary1 - } -) -styled.div( - templateObject_14$5 || - (templateObject_14$5 = __makeTemplateObject( - ['\n width: 20px;\n padding: 0 10px;\n position: absolute;\n top: 11px;\n right: 15px;\n'], - ['\n width: 20px;\n padding: 0 10px;\n position: absolute;\n top: 11px;\n right: 15px;\n'] - )) -) -styled(Check)( - templateObject_15$3 || (templateObject_15$3 = __makeTemplateObject(['\n size: 13px;\n'], ['\n size: 13px;\n'])) -) -var templateObject_1$1g, - templateObject_2$W, - templateObject_3$N, - templateObject_4$C, - templateObject_5$t, - templateObject_6$n, - templateObject_7$j, - templateObject_8$g, - templateObject_9$f, - templateObject_10$b, - templateObject_11$9, - templateObject_12$9, - templateObject_13$5, - templateObject_14$5, - templateObject_15$3 - -var isClient = typeof window === 'object' -function getSize() { - return { - width: isClient ? window.innerWidth : undefined, - height: isClient ? window.innerHeight : undefined, - } -} -// https://usehooks.com/useWindowSize/ -function useWindowSize() { - var _a = __read(useState(getSize), 2), - windowSize = _a[0], - setWindowSize = _a[1] - useEffect(function () { - function handleResize() { - setWindowSize(getSize()) - } - if (isClient) { - window.addEventListener('resize', handleResize) - return function () { - window.removeEventListener('resize', handleResize) - } - } - return undefined - }, []) - return windowSize +/** + * Parses a CurrencyAmount from the passed string. + * Returns the CurrencyAmount, or undefined if parsing fails. + */ +function tryParseCurrencyAmount(value, currency) { + if (!value || !currency) { + return undefined; + } + try { + var typedValueParsed = parseUnits(value, currency.decimals).toString(); + if (typedValueParsed !== '0') { + return CurrencyAmount.fromRawAmount(currency, JSBI.BigInt(typedValueParsed)); + } + } + catch (error) { + // fails if the user specifies too many decimal places of precision (or maybe exceed max uint?) + console.debug("Failed to parse input amount: \"" + value + "\"", error); + } + return undefined; } -// eslint-disable-next-line react/prop-types -function Confetti(_a) { - var start = _a.start, - variant = _a.variant - var _b = useWindowSize(), - width = _b.width, - height = _b.height - var _variant = variant ? variant : height && width && height > 1.5 * width ? 'bottom' : variant - return start && width && height - ? jsx( - ReactConfetti, - { - style: { zIndex: 1401 }, - numberOfPieces: 400, - recycle: false, - run: true, - width, - height, - confettiSource: { - h: height, - w: width, - x: 0, - y: _variant === 'top' ? height * 0.25 : _variant === 'bottom' ? height * 0.75 : height * 0.5, - }, - initialVelocityX: 15, - initialVelocityY: 30, - gravity: 0.45, - tweenDuration: 100, - wind: 0.05, - }, - void 0 - ) - : null +// returns whether tradeB is better than tradeA by at least a threshold percentage amount +// only used by v2 hooks +function isTradeBetter(tradeA, tradeB, minimumDelta) { + if (minimumDelta === void 0) { minimumDelta = ZERO_PERCENT; } + if (tradeA && !tradeB) + return false; + if (tradeB && !tradeA) + return true; + if (!tradeA || !tradeB) + return undefined; + if (tradeA.tradeType !== tradeB.tradeType || + !tradeA.inputAmount.currency.equals(tradeB.inputAmount.currency) || + !tradeA.outputAmount.currency.equals(tradeB.outputAmount.currency)) { + throw new Error('Comparing incomparable trades'); + } + if (minimumDelta.equalTo(ZERO_PERCENT)) { + return tradeA.executionPrice.lessThan(tradeB.executionPrice); + } + else { + return tradeA.executionPrice.asFraction + .multiply(minimumDelta.add(ONE_HUNDRED_PERCENT)) + .lessThan(tradeB.executionPrice); + } } -var uImage = '10f062d02df4af77.png' - -var noise = 'f158a440053a5ad2.png' - -var xlUnicorn = 'c2cd04251aa24c34.png' - -var DataCard = styled(AutoColumn)( - templateObject_1$1f || - (templateObject_1$1f = __makeTemplateObject( - [ - '\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #2172e5 100%);\n border-radius: 12px;\n width: 100%;\n position: relative;\n overflow: hidden;\n', - ], - [ - '\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #2172e5 100%);\n border-radius: 12px;\n width: 100%;\n position: relative;\n overflow: hidden;\n', - ] - )) -) -var CardBGImage = styled.span( - templateObject_2$V || - (templateObject_2$V = __makeTemplateObject( - [ - '\n background: url(', - ');\n width: 1000px;\n height: 600px;\n position: absolute;\n border-radius: 12px;\n opacity: 0.4;\n top: -100px;\n left: -100px;\n transform: rotate(-15deg);\n user-select: none;\n ', - '\n', - ], - [ - '\n background: url(', - ');\n width: 1000px;\n height: 600px;\n position: absolute;\n border-radius: 12px;\n opacity: 0.4;\n top: -100px;\n left: -100px;\n transform: rotate(-15deg);\n user-select: none;\n ', - '\n', - ] - )), - uImage, - function (_a) { - var desaturate = _a.desaturate - return desaturate && 'filter: saturate(0)' - } -) -var CardBGImageSmaller = styled.span( - templateObject_3$M || - (templateObject_3$M = __makeTemplateObject( - [ - '\n background: url(', - ');\n width: 1200px;\n height: 1200px;\n position: absolute;\n border-radius: 12px;\n top: -300px;\n left: -300px;\n opacity: 0.4;\n user-select: none;\n\n ', - '\n', - ], - [ - '\n background: url(', - ');\n width: 1200px;\n height: 1200px;\n position: absolute;\n border-radius: 12px;\n top: -300px;\n left: -300px;\n opacity: 0.4;\n user-select: none;\n\n ', - '\n', - ] - )), - xlUnicorn, - function (_a) { - var desaturate = _a.desaturate - return desaturate && 'filter: saturate(0)' - } -) -var CardNoise = styled.span( - templateObject_4$B || - (templateObject_4$B = __makeTemplateObject( - [ - '\n background: url(', - ');\n background-size: cover;\n mix-blend-mode: overlay;\n border-radius: 12px;\n width: 100%;\n height: 100%;\n opacity: 0.15;\n position: absolute;\n top: 0;\n left: 0;\n user-select: none;\n', - ], - [ - '\n background: url(', - ');\n background-size: cover;\n mix-blend-mode: overlay;\n border-radius: 12px;\n width: 100%;\n height: 100%;\n opacity: 0.15;\n position: absolute;\n top: 0;\n left: 0;\n user-select: none;\n', - ] - )), - noise -) -var CardSection = styled(AutoColumn)( - templateObject_5$s || - (templateObject_5$s = __makeTemplateObject( - ['\n padding: 1rem;\n z-index: 1;\n opacity: ', ';\n'], - ['\n padding: 1rem;\n z-index: 1;\n opacity: ', ';\n'] - )), - function (_a) { - var disabled = _a.disabled - return disabled && '0.4' - } -) -var Break$1 = styled.div( - templateObject_6$m || - (templateObject_6$m = __makeTemplateObject( - ['\n width: 100%;\n background-color: rgba(255, 255, 255, 0.2);\n height: 1px;\n'], - ['\n width: 100%;\n background-color: rgba(255, 255, 255, 0.2);\n height: 1px;\n'] - )) -) -var templateObject_1$1f, - templateObject_2$V, - templateObject_3$M, - templateObject_4$B, - templateObject_5$s, - templateObject_6$m - -var parser = new UAParser(window.navigator.userAgent) -var type$1 = parser.getDevice().type -var userAgent = parser.getResult() -var isMobile = type$1 === 'mobile' || type$1 === 'tablet' - -var AnimatedDialogOverlay = animated(DialogOverlay) -// eslint-disable-next-line @typescript-eslint/no-unused-vars -var StyledDialogOverlay = styled(AnimatedDialogOverlay)( - templateObject_1$1e || - (templateObject_1$1e = __makeTemplateObject( - [ - '\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: ', - ';\n }\n', - ], - [ - '\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: ', - ';\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.modalBG - } -) -var AnimatedDialogContent = animated(DialogContent) -// destructure to not pass custom props to Dialog DOM element -// eslint-disable-next-line @typescript-eslint/no-unused-vars -var StyledDialogContent = styled(function (_a) { - _a.minHeight - _a.maxHeight - _a.mobile - _a.isOpen - var rest = __rest(_a, ['minHeight', 'maxHeight', 'mobile', 'isOpen']) - return jsx(AnimatedDialogContent, __assign({}, rest), void 0) -}).attrs({ - 'aria-label': 'dialog', -})( - templateObject_7$i || - (templateObject_7$i = __makeTemplateObject( - [ - '\n overflow-y: auto;\n\n &[data-reach-dialog-content] {\n margin: 0 0 2rem 0;\n background-color: ', - ';\n border: 1px solid ', - ';\n box-shadow: 0 4px 8px 0 ', - ';\n padding: 0px;\n width: 50vw;\n overflow-y: auto;\n overflow-x: hidden;\n\n align-self: ', - ';\n\n max-width: 420px;\n ', - '\n ', - '\n display: flex;\n border-radius: 20px;\n ', - '\n ', - '\n }\n', - ], - [ - '\n overflow-y: auto;\n\n &[data-reach-dialog-content] {\n margin: 0 0 2rem 0;\n background-color: ', - ';\n border: 1px solid ', - ';\n box-shadow: 0 4px 8px 0 ', - ';\n padding: 0px;\n width: 50vw;\n overflow-y: auto;\n overflow-x: hidden;\n\n align-self: ', - ';\n\n max-width: 420px;\n ', - '\n ', - '\n display: flex;\n border-radius: 20px;\n ', - '\n ', - '\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.bg0 - }, - function (_a) { - var theme = _a.theme - return theme.bg1 - }, - function (_a) { - var theme = _a.theme - return transparentize(0.95, theme.shadow1) - }, - function (_a) { - var mobile = _a.mobile - return mobile ? 'flex-end' : 'center' - }, - function (_a) { - var maxHeight = _a.maxHeight - return ( - maxHeight && - css( - templateObject_2$U || - (templateObject_2$U = __makeTemplateObject( - ['\n max-height: ', 'vh;\n '], - ['\n max-height: ', 'vh;\n '] - )), - maxHeight - ) - ) - }, - function (_a) { - var minHeight = _a.minHeight - return ( - minHeight && - css( - templateObject_3$L || - (templateObject_3$L = __makeTemplateObject( - ['\n min-height: ', 'vh;\n '], - ['\n min-height: ', 'vh;\n '] - )), - minHeight - ) - ) - }, - function (_a) { - var theme = _a.theme - return theme.mediaWidth.upToMedium( - templateObject_4$A || - (templateObject_4$A = __makeTemplateObject( - ['\n width: 65vw;\n margin: 0;\n '], - ['\n width: 65vw;\n margin: 0;\n '] - )) - ) - }, - function (_a) { - var theme = _a.theme, - mobile = _a.mobile - return theme.mediaWidth.upToSmall( - templateObject_6$l || - (templateObject_6$l = __makeTemplateObject( - ['\n width: 85vw;\n ', '\n '], - ['\n width: 85vw;\n ', '\n '] - )), - mobile && - css( - templateObject_5$r || - (templateObject_5$r = __makeTemplateObject( - [ - '\n width: 100vw;\n border-radius: 20px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n ', - ], - [ - '\n width: 100vw;\n border-radius: 20px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n ', - ] - )) - ) - ) - } -) -function Modal(_a) { - var isOpen = _a.isOpen, - onDismiss = _a.onDismiss, - _b = _a.minHeight, - minHeight = _b === void 0 ? false : _b, - _c = _a.maxHeight, - maxHeight = _c === void 0 ? 90 : _c, - initialFocusRef = _a.initialFocusRef, - children = _a.children - var fadeTransition = useTransition(isOpen, null, { - config: { duration: 200 }, - from: { opacity: 0 }, - enter: { opacity: 1 }, - leave: { opacity: 0 }, - }) - var _d = __read( - useSpring(function () { - return { y: 0, config: { mass: 1, tension: 210, friction: 20 } } - }), - 2 - ), - y = _d[0].y, - set = _d[1] - var bind = useGesture({ - onDrag(state) { - set({ - y: state.down ? state.movement[1] : 0, - }) - if (state.movement[1] > 300 || (state.velocity > 3 && state.direction[1] > 0)) { - onDismiss() - } - }, - }) - return jsx( - Fragment, - { - children: fadeTransition.map(function (_a) { - var item = _a.item, - key = _a.key, - props = _a.props - return ( - item && - jsx( - StyledDialogOverlay, - __assign( - { - style: props, - onDismiss, - initialFocusRef, - unstable_lockFocusAcrossFrames: false, - }, - { - children: jsxs( - StyledDialogContent, - __assign( - {}, - isMobile - ? __assign(__assign({}, bind()), { - style: { - transform: y.interpolate(function (y) { - return 'translateY(' + (y > 0 ? y : 0) + 'px)' - }), - }, - }) - : {}, - { 'aria-label': 'dialog content', minHeight, maxHeight, mobile: isMobile }, - { children: [!initialFocusRef && isMobile ? jsx('div', { tabIndex: 1 }, void 0) : null, children] } - ), - void 0 - ), - } - ), - key - ) - ) - }), - }, - void 0 - ) -} -var templateObject_1$1e, - templateObject_2$U, - templateObject_3$L, - templateObject_4$A, - templateObject_5$r, - templateObject_6$l, - templateObject_7$i - -var ContentWrapper$4 = styled(AutoColumn)( - templateObject_1$1d || (templateObject_1$1d = __makeTemplateObject(['\n width: 100%;\n'], ['\n width: 100%;\n'])) -) -var ModalUpper$1 = styled(DataCard)( - templateObject_2$T || - (templateObject_2$T = __makeTemplateObject( - [ - '\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n', - ], - [ - '\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n', - ] - )) -) -var ConfirmOrLoadingWrapper$1 = styled.div( - templateObject_3$K || - (templateObject_3$K = __makeTemplateObject( - ['\n width: 100%;\n padding: 24px;\n position: relative;\n background: ', ';\n'], - ['\n width: 100%;\n padding: 24px;\n position: relative;\n background: ', ';\n'] - )), - function (_a) { - var activeBG = _a.activeBG - return ( - activeBG && - 'radial-gradient(76.02% 75.41% at 1.84% 0%, rgba(255, 0, 122, 0.2) 0%, rgba(33, 114, 229, 0.2) 100%), #FFFFFF;' - ) - } -) -var ConfirmedIcon$2 = styled(ColumnCenter)( - templateObject_4$z || - (templateObject_4$z = __makeTemplateObject(['\n padding: 60px 0;\n'], ['\n padding: 60px 0;\n'])) -) -function AddressClaimModal(_a) { - var _b, _c - var isOpen = _a.isOpen, - onDismiss = _a.onDismiss - var chainId = useActiveWeb3React().chainId - // state for smart contract input - var _d = __read(useState(''), 2), - typed = _d[0], - setTyped = _d[1] - function handleRecipientType(val) { - setTyped(val) - } - // monitor for third party recipient of claim - var parsedAddress = useENS(typed).address - // used for UI loading states - var _e = __read(useState(false), 2), - attempting = _e[0], - setAttempting = _e[1] - // monitor the status of the claim from contracts and txns - var claimCallback = useClaimCallback(parsedAddress).claimCallback - var unclaimedAmount = useUserUnclaimedAmount(parsedAddress) - // check if the user has something available - var hasAvailableClaim = useUserHasAvailableClaim(parsedAddress) - var _f = __read(useState(), 2), - hash = _f[0], - setHash = _f[1] - // monitor the status of the claim from contracts and txns - var claimPending = useIsTransactionPending(hash !== null && hash !== void 0 ? hash : '') - var claimConfirmed = hash && !claimPending - // use the hash to monitor this txn - function onClaim() { - setAttempting(true) - claimCallback() - .then(function (hash) { - setHash(hash) - }) - // reset modal and log error - .catch(function (error) { - setAttempting(false) - console.log(error) - }) - } - function wrappedOnDismiss() { - setAttempting(false) - setHash(undefined) - setTyped('') - onDismiss() - } - return jsxs( - Modal, - __assign( - { isOpen, onDismiss: wrappedOnDismiss, maxHeight: 90 }, - { - children: [ - jsx(Confetti, { start: Boolean(isOpen && claimConfirmed && attempting) }, void 0), - !attempting && - jsxs( - ContentWrapper$4, - __assign( - { gap: 'lg' }, - { - children: [ - jsxs( - ModalUpper$1, - { - children: [ - jsx(CardBGImage, {}, void 0), - jsx(CardNoise, {}, void 0), - jsxs( - CardSection, - __assign( - { gap: 'md' }, - { - children: [ - jsxs( - RowBetween, - { - children: [ - jsx( - ThemedText.White, - __assign( - { fontWeight: 500 }, - { children: jsx(Trans, { children: 'Claim UNI Token' }, void 0) } - ), - void 0 - ), - jsx( - CloseIcon$2, - { onClick: wrappedOnDismiss, style: { zIndex: 99 }, stroke: 'white' }, - void 0 - ), - ], - }, - void 0 - ), - jsx( - ThemedText.White, - __assign( - { fontWeight: 700, fontSize: 36 }, - { - children: jsxs( - Trans, - { - children: [ - unclaimedAmount === null || unclaimedAmount === void 0 - ? void 0 - : unclaimedAmount.toFixed( - 0, - (_b = { groupSeparator: ',' }) !== null && _b !== void 0 ? _b : '-' - ), - ' UNI', - ], - }, - void 0 - ), - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - jsx(Break$1, {}, void 0), - ], - }, - void 0 - ), - jsxs( - AutoColumn, - __assign( - { gap: 'md', style: { padding: '1rem', paddingTop: '0' }, justify: 'center' }, - { - children: [ - jsx( - ThemedText.SubHeader, - __assign( - { fontWeight: 500 }, - { - children: jsx( - Trans, - { - children: - 'Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.', - }, - void 0 - ), - } - ), - void 0 - ), - jsx(AddressInputPanel, { value: typed, onChange: handleRecipientType }, void 0), - parsedAddress && - !hasAvailableClaim && - jsx( - ThemedText.Error, - __assign( - { error: true }, - { children: jsx(Trans, { children: 'Address has no available claim' }, void 0) } - ), - void 0 - ), - jsx( - ButtonPrimary, - __assign( - { - disabled: - !isAddress$1( - parsedAddress !== null && parsedAddress !== void 0 ? parsedAddress : '' - ) || !hasAvailableClaim, - padding: '16px 16px', - width: '100%', - $borderRadius: '12px', - mt: '1rem', - onClick: onClaim, - }, - { children: jsx(Trans, { children: 'Claim UNI' }, void 0) } - ), - void 0 - ), - ], - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - (attempting || claimConfirmed) && - jsxs( - ConfirmOrLoadingWrapper$1, - __assign( - { activeBG: true }, - { - children: [ - jsx(CardNoise, {}, void 0), - jsx(CardBGImageSmaller, { desaturate: true }, void 0), - jsxs( - RowBetween, - { - children: [ - jsx('div', {}, void 0), - jsx( - CloseIcon$2, - { onClick: wrappedOnDismiss, style: { zIndex: 99 }, stroke: 'black' }, - void 0 - ), - ], - }, - void 0 - ), - jsx( - ConfirmedIcon$2, - { - children: !claimConfirmed - ? jsx(CustomLightSpinner, { src: Circle$1, alt: 'loader', size: '90px' }, void 0) - : jsx(UniTokenAnimated, { width: '72px', src: tokenLogo, alt: 'UNI logo' }, void 0), - }, - void 0 - ), - jsxs( - AutoColumn, - __assign( - { gap: '100px', justify: 'center' }, - { - children: [ - jsxs( - AutoColumn, - __assign( - { gap: '12px', justify: 'center' }, - { - children: [ - jsx( - ThemedText.LargeHeader, - __assign( - { fontWeight: 600, color: 'black' }, - { - children: claimConfirmed - ? jsx(Trans, { children: 'Claimed' }, void 0) - : jsx(Trans, { children: 'Claiming' }, void 0), - } - ), - void 0 - ), - !claimConfirmed && - jsx( - Text$1, - __assign( - { fontSize: 36, color: '#ff007a', fontWeight: 800 }, - { - children: jsxs( - Trans, - { - children: [ - unclaimedAmount === null || unclaimedAmount === void 0 - ? void 0 - : unclaimedAmount.toFixed( - 0, - (_c = { groupSeparator: ',' }) !== null && _c !== void 0 - ? _c - : '-' - ), - ' UNI', - ], - }, - void 0 - ), - } - ), - void 0 - ), - parsedAddress && - jsx( - ThemedText.LargeHeader, - __assign( - { fontWeight: 600, color: 'black' }, - { - children: jsxs( - Trans, - { children: ['for ', shortenAddress(parsedAddress)] }, - void 0 - ), - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - claimConfirmed && - jsx( - Fragment, - { - children: jsxs( - ThemedText.SubHeader, - __assign( - { fontWeight: 500, color: 'black' }, - { - children: [ - jsxs( - 'span', - __assign( - { role: 'img', 'aria-label': 'party-hat' }, - { children: ['\uD83C\uDF89', ' '] } - ), - void 0 - ), - jsx(Trans, { children: 'Welcome to team Unicorn :) ' }, void 0), - jsx( - 'span', - __assign( - { role: 'img', 'aria-label': 'party-hat' }, - { children: '\uD83C\uDF89' } - ), - void 0 - ), - ], - } - ), - void 0 - ), - }, - void 0 - ), - attempting && - !hash && - jsx( - ThemedText.SubHeader, - __assign( - { color: 'black' }, - { - children: jsx( - Trans, - { children: 'Confirm this transaction in your wallet' }, - void 0 - ), - } - ), - void 0 - ), - attempting && - hash && - !claimConfirmed && - chainId && - hash && - jsx( - ExternalLink, - __assign( - { - href: getExplorerLink(chainId, hash, ExplorerDataType.TRANSACTION), - style: { zIndex: 99 }, - }, - { children: jsx(Trans, { children: 'View transaction on Explorer' }, void 0) } - ), - void 0 - ), - ], - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - ], - } - ), - void 0 - ) -} -var templateObject_1$1d, templateObject_2$T, templateObject_3$K, templateObject_4$z - -var _a$a -var ApplicationModal -;(function (ApplicationModal) { - ApplicationModal[(ApplicationModal['WALLET'] = 0)] = 'WALLET' - ApplicationModal[(ApplicationModal['SETTINGS'] = 1)] = 'SETTINGS' - ApplicationModal[(ApplicationModal['SELF_CLAIM'] = 2)] = 'SELF_CLAIM' - ApplicationModal[(ApplicationModal['ADDRESS_CLAIM'] = 3)] = 'ADDRESS_CLAIM' - ApplicationModal[(ApplicationModal['CLAIM_POPUP'] = 4)] = 'CLAIM_POPUP' - ApplicationModal[(ApplicationModal['MENU'] = 5)] = 'MENU' - ApplicationModal[(ApplicationModal['DELEGATE'] = 6)] = 'DELEGATE' - ApplicationModal[(ApplicationModal['VOTE'] = 7)] = 'VOTE' - ApplicationModal[(ApplicationModal['POOL_OVERVIEW_OPTIONS'] = 8)] = 'POOL_OVERVIEW_OPTIONS' - ApplicationModal[(ApplicationModal['NETWORK_SELECTOR'] = 9)] = 'NETWORK_SELECTOR' - ApplicationModal[(ApplicationModal['PRIVACY_POLICY'] = 10)] = 'PRIVACY_POLICY' -})(ApplicationModal || (ApplicationModal = {})) -var initialState$8 = { - chainId: null, - openModal: null, - popupList: [], -} -var applicationSlice = createSlice({ - name: 'application', - initialState: initialState$8, - reducers: { - updateChainId(state, action) { - var chainId = action.payload.chainId - state.chainId = chainId - }, - setOpenModal(state, action) { - state.openModal = action.payload - }, - addPopup(state, _a) { - var _b = _a.payload, - content = _b.content, - key = _b.key, - _c = _b.removeAfterMs, - removeAfterMs = _c === void 0 ? DEFAULT_TXN_DISMISS_MS : _c - state.popupList = ( - key - ? state.popupList.filter(function (popup) { - return popup.key !== key - }) - : state.popupList - ).concat([ - { - key: key || nanoid(), - show: true, - content, - removeAfterMs, - }, - ]) - }, - removePopup(state, _a) { - var key = _a.payload.key - state.popupList.forEach(function (p) { - if (p.key === key) { - p.show = false - } - }) - }, - }, -}) -var updateChainId = ((_a$a = applicationSlice.actions), _a$a.updateChainId), - setOpenModal = _a$a.setOpenModal, - addPopup = _a$a.addPopup, - removePopup = _a$a.removePopup -var application = applicationSlice.reducer - -var Field$3 -;(function (Field) { - Field['LIQUIDITY_PERCENT'] = 'LIQUIDITY_PERCENT' - Field['LIQUIDITY'] = 'LIQUIDITY' - Field['CURRENCY_A'] = 'CURRENCY_A' - Field['CURRENCY_B'] = 'CURRENCY_B' -})(Field$3 || (Field$3 = {})) -var typeInput$3 = createAction('burn/typeInputBurn') - -var initialState$7 = { - independentField: Field$3.LIQUIDITY_PERCENT, - typedValue: '0', -} -var burn = createReducer(initialState$7, function (builder) { - return builder.addCase(typeInput$3, function (state, _a) { - var _b = _a.payload, - field = _b.field, - typedValue = _b.typedValue - return __assign(__assign({}, state), { independentField: field, typedValue }) - }) -}) - -var selectPercent = createAction('burnV3/selectBurnPercent') - -var initialState$6 = { - percent: 0, -} -var burnV3 = createReducer(initialState$6, function (builder) { - return builder.addCase(selectPercent, function (state, _a) { - var percent = _a.payload.percent - return __assign(__assign({}, state), { percent }) - }) -}) - -var _a$9 -// List of supported subgraphs. Note that the app currently only support one active subgraph at a time -var CHAIN_SUBGRAPH_URL = - ((_a$9 = {}), - (_a$9[SupportedChainId.MAINNET] = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3'), - (_a$9[SupportedChainId.RINKEBY] = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3'), - (_a$9[SupportedChainId.ARBITRUM_ONE] = 'https://api.thegraph.com/subgraphs/name/ianlapham/arbitrum-minimal'), - (_a$9[SupportedChainId.OPTIMISM] = 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-optimism-dev'), - (_a$9[SupportedChainId.POLYGON] = 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-v3-polygon'), - _a$9) -var api$1 = createApi({ - reducerPath: 'dataApi', - baseQuery: graphqlRequestBaseQuery(), - endpoints(builder) { - return { - allV3Ticks: builder.query({ - query(_a) { - var poolAddress = _a.poolAddress, - _b = _a.skip, - skip = _b === void 0 ? 0 : _b - return { - document: gql( - templateObject_1$1c || - (templateObject_1$1c = __makeTemplateObject( - [ - '\n query allV3Ticks($poolAddress: String!, $skip: Int!) {\n ticks(first: 1000, skip: $skip, where: { poolAddress: $poolAddress }, orderBy: tickIdx) {\n tick: tickIdx\n liquidityNet\n price0\n price1\n }\n }\n ', - ], - [ - '\n query allV3Ticks($poolAddress: String!, $skip: Int!) {\n ticks(first: 1000, skip: $skip, where: { poolAddress: $poolAddress }, orderBy: tickIdx) {\n tick: tickIdx\n liquidityNet\n price0\n price1\n }\n }\n ', - ] - )) - ), - variables: { - poolAddress, - skip, - }, - } - }, - }), - feeTierDistribution: builder.query({ - query(_a) { - var token0 = _a.token0, - token1 = _a.token1 - return { - document: gql( - templateObject_2$S || - (templateObject_2$S = __makeTemplateObject( - [ - '\n query feeTierDistribution($token0: String!, $token1: String!) {\n _meta {\n block {\n number\n }\n }\n asToken0: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token0, token1: $token1 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n asToken1: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token1, token1: $token0 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n }\n ', - ], - [ - '\n query feeTierDistribution($token0: String!, $token1: String!) {\n _meta {\n block {\n number\n }\n }\n asToken0: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token0, token1: $token1 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n asToken1: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token1, token1: $token0 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n }\n ', - ] - )) - ), - variables: { - token0, - token1, - }, - } - }, - }), - } - }, -}) -// Graphql query client wrapper that builds a dynamic url based on chain id -function graphqlRequestBaseQuery() { - var _this = this - return function (_a, _b) { - var document = _a.document, - variables = _a.variables - var getState = _b.getState - return __awaiter(_this, void 0, void 0, function () { - var chainId, subgraphUrl, error_1, name_1, message, stack, request, response - var _c - return __generator(this, function (_d) { - switch (_d.label) { - case 0: - _d.trys.push([0, 2, , 3]) - chainId = getState().application.chainId - subgraphUrl = chainId ? CHAIN_SUBGRAPH_URL[chainId] : undefined - if (!subgraphUrl) { - return [ - 2 /*return*/, - { - error: { - name: 'UnsupportedChainId', - message: 'Subgraph queries against ChainId ' + chainId + ' are not supported.', - stack: '', - }, - }, - ] - } - _c = {} - return [4 /*yield*/, new GraphQLClient(subgraphUrl).request(document, variables)] - case 1: - return [2 /*return*/, ((_c.data = _d.sent()), (_c.meta = {}), _c)] - case 2: - error_1 = _d.sent() - if (error_1 instanceof ClientError) { - ;(name_1 = error_1.name), - (message = error_1.message), - (stack = error_1.stack), - (request = error_1.request), - (response = error_1.response) - return [ - 2 /*return*/, - { - error: { name: name_1, message, stack }, - meta: { request, response }, - }, - ] - } - throw error_1 - case 3: - return [2 /*return*/] - } - }) - }) - } +function useAllCurrencyCombinations(currencyA, currencyB) { + var chainId = currencyA === null || currencyA === void 0 ? void 0 : currencyA.chainId; + var _a = __read(chainId ? [currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped, currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped] : [undefined, undefined], 2), tokenA = _a[0], tokenB = _a[1]; + var bases = useMemo(function () { + var _a, _b, _c, _d, _e; + if (!chainId || chainId !== (tokenB === null || tokenB === void 0 ? void 0 : tokenB.chainId)) + return []; + var common = (_a = BASES_TO_CHECK_TRADES_AGAINST[chainId]) !== null && _a !== void 0 ? _a : []; + var additionalA = tokenA ? (_c = (_b = ADDITIONAL_BASES[chainId]) === null || _b === void 0 ? void 0 : _b[tokenA.address]) !== null && _c !== void 0 ? _c : [] : []; + var additionalB = tokenB ? (_e = (_d = ADDITIONAL_BASES[chainId]) === null || _d === void 0 ? void 0 : _d[tokenB.address]) !== null && _e !== void 0 ? _e : [] : []; + return __spreadArray(__spreadArray(__spreadArray([], __read(common), false), __read(additionalA), false), __read(additionalB), false); + }, [chainId, tokenA, tokenB]); + var basePairs = useMemo(function () { + return bases + .flatMap(function (base) { return bases.map(function (otherBase) { return [base, otherBase]; }); }) + // though redundant with the first filter below, that expression runs more often, so this is probably worthwhile + .filter(function (_a) { + var _b = __read(_a, 2), t0 = _b[0], t1 = _b[1]; + return !t0.equals(t1); + }); + }, [bases]); + return useMemo(function () { + return tokenA && tokenB + ? __spreadArray(__spreadArray(__spreadArray([ + // the direct pair + [tokenA, tokenB] + ], __read(bases.map(function (base) { return [tokenA, base]; })), false), __read(bases.map(function (base) { return [tokenB, base]; })), false), __read(basePairs), false).filter(function (_a) { + var _b = __read(_a, 2), t0 = _b[0], t1 = _b[1]; + return !t0.equals(t1); + }) + // filter out duplicate pairs + .filter(function (_a, i, otherPairs) { + var _b = __read(_a, 2), t0 = _b[0], t1 = _b[1]; + // find the first index in the array at which there are the same 2 tokens as the current + var firstIndexInOtherPairs = otherPairs.findIndex(function (_a) { + var _b = __read(_a, 2), t0Other = _b[0], t1Other = _b[1]; + return (t0.equals(t0Other) && t1.equals(t1Other)) || (t0.equals(t1Other) && t1.equals(t0Other)); + }); + // only accept the first occurrence of the same 2 tokens + return firstIndexInOtherPairs === i; + }) + // optionally filter out some pairs for tokens with custom bases defined + .filter(function (_a) { + var _b = __read(_a, 2), tokenA = _b[0], tokenB = _b[1]; + if (!chainId) + return true; + var customBases = CUSTOM_BASES[chainId]; + var customBasesA = customBases === null || customBases === void 0 ? void 0 : customBases[tokenA.address]; + var customBasesB = customBases === null || customBases === void 0 ? void 0 : customBases[tokenB.address]; + if (!customBasesA && !customBasesB) + return true; + if (customBasesA && !customBasesA.find(function (base) { return tokenB.equals(base); })) + return false; + if (customBasesB && !customBasesB.find(function (base) { return tokenA.equals(base); })) + return false; + return true; + }) + : []; + }, [tokenA, tokenB, bases, basePairs, chainId]); +} + +var PAIR_INTERFACE = new Interface(abi$4); +var PairState; +(function (PairState) { + PairState[PairState["LOADING"] = 0] = "LOADING"; + PairState[PairState["NOT_EXISTS"] = 1] = "NOT_EXISTS"; + PairState[PairState["EXISTS"] = 2] = "EXISTS"; + PairState[PairState["INVALID"] = 3] = "INVALID"; +})(PairState || (PairState = {})); +function useV2Pairs(currencies) { + var tokens = useMemo(function () { return currencies.map(function (_a) { + var _b = __read(_a, 2), currencyA = _b[0], currencyB = _b[1]; + return [currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped, currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped]; + }); }, [currencies]); + var pairAddresses = useMemo(function () { + return tokens.map(function (_a) { + var _b = __read(_a, 2), tokenA = _b[0], tokenB = _b[1]; + return tokenA && + tokenB && + tokenA.chainId === tokenB.chainId && + !tokenA.equals(tokenB) && + V2_FACTORY_ADDRESSES[tokenA.chainId] + ? computePairAddress({ factoryAddress: V2_FACTORY_ADDRESSES[tokenA.chainId], tokenA: tokenA, tokenB: tokenB }) + : undefined; + }); + }, [tokens]); + var results = useMultipleContractSingleData(pairAddresses, PAIR_INTERFACE, 'getReserves'); + return useMemo(function () { + return results.map(function (result, i) { + var reserves = result.result, loading = result.loading; + var tokenA = tokens[i][0]; + var tokenB = tokens[i][1]; + if (loading) + return [PairState.LOADING, null]; + if (!tokenA || !tokenB || tokenA.equals(tokenB)) + return [PairState.INVALID, null]; + if (!reserves) + return [PairState.NOT_EXISTS, null]; + var reserve0 = reserves.reserve0, reserve1 = reserves.reserve1; + var _a = __read(tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA], 2), token0 = _a[0], token1 = _a[1]; + return [ + PairState.EXISTS, + new Pair(CurrencyAmount.fromRawAmount(token0, reserve0.toString()), CurrencyAmount.fromRawAmount(token1, reserve1.toString())), + ]; + }); + }, [results, tokens]); } -var templateObject_1$1c, templateObject_2$S - -// fired once when the app reloads but before the app renders -// allows any updates to be applied to store data loaded from localStorage -var updateVersion = createAction('global/updateVersion') -var fetchTokenList = { - pending: createAction('lists/fetchTokenList/pending'), - fulfilled: createAction('lists/fetchTokenList/fulfilled'), - rejected: createAction('lists/fetchTokenList/rejected'), -} -// add and remove from list options -var addList = createAction('lists/addList') -var removeList = createAction('lists/removeList') -// select which lists to search across from loaded lists -var enableList = createAction('lists/enableList') -var disableList = createAction('lists/disableList') -// versioning -var acceptListUpdate = createAction('lists/acceptListUpdate') - -var NEW_LIST_STATE = { - error: null, - current: null, - loadingRequestId: null, - pendingUpdate: null, -} -var initialState$5 = { - lastInitializedDefaultListOfLists: DEFAULT_LIST_OF_LISTS, - byUrl: __assign( - {}, - DEFAULT_LIST_OF_LISTS.reduce(function (memo, listUrl) { - memo[listUrl] = NEW_LIST_STATE - return memo - }, {}) - ), - activeListUrls: DEFAULT_ACTIVE_LIST_URLS, -} -var lists = createReducer(initialState$5, function (builder) { - return builder - .addCase(fetchTokenList.pending, function (state, _a) { - var _b, _c, _d, _e - var _f = _a.payload, - requestId = _f.requestId, - url = _f.url - var current = - (_c = (_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.current) !== null && _c !== void 0 - ? _c - : null - var pendingUpdate = - (_e = (_d = state.byUrl[url]) === null || _d === void 0 ? void 0 : _d.pendingUpdate) !== null && _e !== void 0 - ? _e - : null - state.byUrl[url] = { - current, - pendingUpdate, - loadingRequestId: requestId, - error: null, - } - }) - .addCase(fetchTokenList.fulfilled, function (state, _a) { - var _b, _c, _d - var _e = _a.payload, - requestId = _e.requestId, - tokenList = _e.tokenList, - url = _e.url - var current = (_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.current - var loadingRequestId = (_c = state.byUrl[url]) === null || _c === void 0 ? void 0 : _c.loadingRequestId - // no-op if update does nothing - if (current) { - var upgradeType = getVersionUpgrade(current.version, tokenList.version) - if (upgradeType === VersionUpgrade.NONE) return - if (loadingRequestId === null || loadingRequestId === requestId) { - state.byUrl[url] = { - current, - pendingUpdate: tokenList, - loadingRequestId: null, - error: null, - } - } - } else { - // activate if on default active - if (DEFAULT_ACTIVE_LIST_URLS.includes(url)) { - ;(_d = state.activeListUrls) === null || _d === void 0 ? void 0 : _d.push(url) - } - state.byUrl[url] = { - current: tokenList, - pendingUpdate: null, - loadingRequestId: null, - error: null, - } - } - }) - .addCase(fetchTokenList.rejected, function (state, _a) { - var _b - var _c = _a.payload, - url = _c.url, - requestId = _c.requestId, - errorMessage = _c.errorMessage - if (((_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.loadingRequestId) !== requestId) { - // no-op since it's not the latest request - return - } - state.byUrl[url] = { - current: state.byUrl[url].current ? state.byUrl[url].current : null, - pendingUpdate: null, - loadingRequestId: null, - error: errorMessage, - } - }) - .addCase(addList, function (state, _a) { - var url = _a.payload - if (!state.byUrl[url]) { - state.byUrl[url] = NEW_LIST_STATE - } - }) - .addCase(removeList, function (state, _a) { - var url = _a.payload - if (state.byUrl[url]) { - delete state.byUrl[url] - } - // remove list from active urls if needed - if (state.activeListUrls && state.activeListUrls.includes(url)) { - state.activeListUrls = state.activeListUrls.filter(function (u) { - return u !== url - }) - } - }) - .addCase(enableList, function (state, _a) { - var url = _a.payload - if (!state.byUrl[url]) { - state.byUrl[url] = NEW_LIST_STATE - } - if (state.activeListUrls && !state.activeListUrls.includes(url)) { - state.activeListUrls.push(url) - } - if (!state.activeListUrls) { - state.activeListUrls = [url] - } - }) - .addCase(disableList, function (state, _a) { - var url = _a.payload - if (state.activeListUrls && state.activeListUrls.includes(url)) { - state.activeListUrls = state.activeListUrls.filter(function (u) { - return u !== url - }) - } - }) - .addCase(acceptListUpdate, function (state, _a) { - var _b - var url = _a.payload - if (!((_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.pendingUpdate)) { - throw new Error('accept list update called without pending update') - } - state.byUrl[url] = __assign(__assign({}, state.byUrl[url]), { - current: state.byUrl[url].pendingUpdate, - pendingUpdate: null, - }) - }) - .addCase(updateVersion, function (state) { - // state loaded from localStorage, but new lists have never been initialized - if (!state.lastInitializedDefaultListOfLists) { - state.byUrl = initialState$5.byUrl - state.activeListUrls = initialState$5.activeListUrls - } else if (state.lastInitializedDefaultListOfLists) { - var lastInitializedSet_1 = state.lastInitializedDefaultListOfLists.reduce(function (s, l) { - return s.add(l) - }, new Set()) - var newListOfListsSet_1 = DEFAULT_LIST_OF_LISTS.reduce(function (s, l) { - return s.add(l) - }, new Set()) - DEFAULT_LIST_OF_LISTS.forEach(function (listUrl) { - if (!lastInitializedSet_1.has(listUrl)) { - state.byUrl[listUrl] = NEW_LIST_STATE - } - }) - state.lastInitializedDefaultListOfLists.forEach(function (listUrl) { - if (!newListOfListsSet_1.has(listUrl)) { - delete state.byUrl[listUrl] - } - }) - } - state.lastInitializedDefaultListOfLists = DEFAULT_LIST_OF_LISTS - // if no active lists, activate defaults - if (!state.activeListUrls) { - state.activeListUrls = DEFAULT_ACTIVE_LIST_URLS - // for each list on default list, initialize if needed - DEFAULT_ACTIVE_LIST_URLS.map(function (listUrl) { - if (!state.byUrl[listUrl]) { - state.byUrl[listUrl] = NEW_LIST_STATE - } - return true - }) - } - }) -}) - -/** - * Converts a filter to the corresponding string key - * @param filter the filter to convert - */ -function filterToKey(filter) { - var _a, _b, _c, _d - return ( - ((_a = filter.address) !== null && _a !== void 0 ? _a : '') + - ':' + - ((_d = - (_c = - (_b = filter.topics) === null || _b === void 0 - ? void 0 - : _b.map(function (topic) { - return topic ? (Array.isArray(topic) ? topic.join(';') : topic) : '\0' - })) === null || _c === void 0 - ? void 0 - : _c.join('-')) !== null && _d !== void 0 - ? _d - : '') - ) -} -/** - * Convert a filter key to the corresponding filter - * @param key key to convert - */ -function keyToFilter(key) { - var pcs = key.split(':') - var address = pcs[0] - var topics = pcs[1].split('-').map(function (topic) { - if (topic === '\0') return null - var parts = topic.split(';') - if (parts.length === 1) return parts[0] - return parts - }) - return { - address: address.length === 0 ? undefined : address, - topics, - } -} +function useAllCommonPairs(currencyA, currencyB) { + var allCurrencyCombinations = useAllCurrencyCombinations(currencyA, currencyB); + var allPairs = useV2Pairs(allCurrencyCombinations); + return useMemo(function () { + return Object.values(allPairs + // filter out invalid pairs + .filter(function (result) { return Boolean(result[0] === PairState.EXISTS && result[1]); }) + .map(function (_a) { + var _b = __read(_a, 2), pair = _b[1]; + return pair; + })); + }, [allPairs]); +} +var MAX_HOPS = 3; +/** + * Returns the best v2 trade for a desired swap + * @param tradeType whether the swap is an exact in/out + * @param amountSpecified the exact amount to swap in/out + * @param otherCurrency the desired output/payment currency + */ +function useBestV2Trade(tradeType, amountSpecified, otherCurrency, _a) { + var _b = _a === void 0 ? {} : _a, _c = _b.maxHops, maxHops = _c === void 0 ? MAX_HOPS : _c; + var _d = __read(useMemo(function () { + return tradeType === TradeType.EXACT_INPUT + ? [amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, otherCurrency] + : [otherCurrency, amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency]; + }, [tradeType, amountSpecified, otherCurrency]), 2), currencyIn = _d[0], currencyOut = _d[1]; + var allowedPairs = useAllCommonPairs(currencyIn, currencyOut); + return useMemo(function () { + var _a, _b, _c, _d; + if (amountSpecified && currencyIn && currencyOut && allowedPairs.length > 0) { + if (maxHops === 1) { + var options = { maxHops: 1, maxNumResults: 1 }; + if (tradeType === TradeType.EXACT_INPUT) { + var amountIn = amountSpecified; + return (_a = Trade.bestTradeExactIn(allowedPairs, amountIn, currencyOut, options)[0]) !== null && _a !== void 0 ? _a : null; + } + else { + var amountOut = amountSpecified; + return (_b = Trade.bestTradeExactOut(allowedPairs, currencyIn, amountOut, options)[0]) !== null && _b !== void 0 ? _b : null; + } + } + // search through trades with varying hops, find best trade out of them + var bestTradeSoFar = null; + for (var i = 1; i <= maxHops; i++) { + var options = { maxHops: i, maxNumResults: 1 }; + var currentTrade = void 0; + if (tradeType === TradeType.EXACT_INPUT) { + var amountIn = amountSpecified; + currentTrade = (_c = Trade.bestTradeExactIn(allowedPairs, amountIn, currencyOut, options)[0]) !== null && _c !== void 0 ? _c : null; + } + else { + var amountOut = amountSpecified; + currentTrade = (_d = Trade.bestTradeExactOut(allowedPairs, currencyIn, amountOut, options)[0]) !== null && _d !== void 0 ? _d : null; + } + // if current trade is best yet, save it + if (isTradeBetter(bestTradeSoFar, currentTrade, BETTER_TRADE_LESS_HOPS_THRESHOLD)) { + bestTradeSoFar = currentTrade; + } + } + return bestTradeSoFar; + } + return null; + }, [tradeType, amountSpecified, currencyIn, currencyOut, allowedPairs, maxHops]); +} + +var TradeState; +(function (TradeState) { + TradeState[TradeState["LOADING"] = 0] = "LOADING"; + TradeState[TradeState["INVALID"] = 1] = "INVALID"; + TradeState[TradeState["NO_ROUTE_FOUND"] = 2] = "NO_ROUTE_FOUND"; + TradeState[TradeState["VALID"] = 3] = "VALID"; + TradeState[TradeState["SYNCING"] = 4] = "SYNCING"; +})(TradeState || (TradeState = {})); +var InterfaceTrade = /** @class */ (function (_super) { + __extends(InterfaceTrade, _super); + function InterfaceTrade(_a) { + var gasUseEstimateUSD = _a.gasUseEstimateUSD, routes = __rest(_a, ["gasUseEstimateUSD"]); + var _this = _super.call(this, routes) || this; + _this.gasUseEstimateUSD = gasUseEstimateUSD; + return _this; + } + return InterfaceTrade; +}(Trade$1)); -var _a$8 -var slice = createSlice({ - name: 'logs', - initialState: {}, - reducers: { - addListener(state, _a) { - var _b = _a.payload, - chainId = _b.chainId, - filter = _b.filter - if (!state[chainId]) state[chainId] = {} - var key = filterToKey(filter) - if (!state[chainId][key]) - state[chainId][key] = { - listeners: 1, - } - else state[chainId][key].listeners++ - }, - fetchingLogs(state, _a) { - var e_1, _b - var _c = _a.payload, - chainId = _c.chainId, - filters = _c.filters, - blockNumber = _c.blockNumber - if (!state[chainId]) return - try { - for ( - var filters_1 = __values(filters), filters_1_1 = filters_1.next(); - !filters_1_1.done; - filters_1_1 = filters_1.next() - ) { - var filter = filters_1_1.value - var key = filterToKey(filter) - if (!state[chainId][key]) continue - state[chainId][key].fetchingBlockNumber = blockNumber - } - } catch (e_1_1) { - e_1 = { error: e_1_1 } - } finally { - try { - if (filters_1_1 && !filters_1_1.done && (_b = filters_1.return)) _b.call(filters_1) - } finally { - if (e_1) throw e_1.error - } - } - }, - fetchedLogs(state, _a) { - var _b = _a.payload, - chainId = _b.chainId, - filter = _b.filter, - results = _b.results - if (!state[chainId]) return - var key = filterToKey(filter) - var fetchState = state[chainId][key] - if (!fetchState || (fetchState.results && fetchState.results.blockNumber > results.blockNumber)) return - fetchState.results = results - }, - fetchedLogsError(state, _a) { - var _b = _a.payload, - chainId = _b.chainId, - filter = _b.filter, - blockNumber = _b.blockNumber - if (!state[chainId]) return - var key = filterToKey(filter) - var fetchState = state[chainId][key] - if (!fetchState || (fetchState.results && fetchState.results.blockNumber > blockNumber)) return - fetchState.results = { - blockNumber, - error: true, - } - }, - removeListener(state, _a) { - var _b = _a.payload, - chainId = _b.chainId, - filter = _b.filter - if (!state[chainId]) return - var key = filterToKey(filter) - if (!state[chainId][key]) return - state[chainId][key].listeners-- - }, - }, -}) -var logs = slice.reducer -;(_a$8 = slice.actions), _a$8.addListener -_a$8.removeListener -var fetchedLogs = _a$8.fetchedLogs, - fetchedLogsError = _a$8.fetchedLogsError, - fetchingLogs = _a$8.fetchingLogs - -var Field$2 -;(function (Field) { - Field['CURRENCY_A'] = 'CURRENCY_A' - Field['CURRENCY_B'] = 'CURRENCY_B' -})(Field$2 || (Field$2 = {})) -var typeInput$2 = createAction('mint/typeInputMint') -var resetMintState$1 = createAction('mint/resetMintState') - -var initialState$4 = { - independentField: Field$2.CURRENCY_A, - typedValue: '', - otherTypedValue: '', - startPriceTypedValue: '', - leftRangeTypedValue: '', - rightRangeTypedValue: '', -} -var mint = createReducer(initialState$4, function (builder) { - return builder - .addCase(resetMintState$1, function () { - return initialState$4 - }) - .addCase(typeInput$2, function (state, _a) { - var _b = _a.payload, - field = _b.field, - typedValue = _b.typedValue, - noLiquidity = _b.noLiquidity - if (noLiquidity) { - // they're typing into the field they've last typed in - if (field === state.independentField) { - return __assign(__assign({}, state), { independentField: field, typedValue }) - } - // they're typing into a new field, store the other value - else { - return __assign(__assign({}, state), { - independentField: field, - typedValue, - otherTypedValue: state.typedValue, - }) - } - } else { - return __assign(__assign({}, state), { independentField: field, typedValue, otherTypedValue: '' }) - } - }) -}) - -var Field$1 -;(function (Field) { - Field['CURRENCY_A'] = 'CURRENCY_A' - Field['CURRENCY_B'] = 'CURRENCY_B' -})(Field$1 || (Field$1 = {})) -var Bound -;(function (Bound) { - Bound['LOWER'] = 'LOWER' - Bound['UPPER'] = 'UPPER' -})(Bound || (Bound = {})) -var typeInput$1 = createAction('mintV3/typeInputMint') -var typeStartPriceInput = createAction('mintV3/typeStartPriceInput') -var typeLeftRangeInput = createAction('mintV3/typeLeftRangeInput') -var typeRightRangeInput = createAction('mintV3/typeRightRangeInput') -var resetMintState = createAction('mintV3/resetMintState') -var setFullRange = createAction('mintV3/setFullRange') - -var initialState$3 = { - independentField: Field$1.CURRENCY_A, - typedValue: '', - startPriceTypedValue: '', - leftRangeTypedValue: '', - rightRangeTypedValue: '', -} -var mintV3 = createReducer(initialState$3, function (builder) { - return builder - .addCase(resetMintState, function () { - return initialState$3 - }) - .addCase(setFullRange, function (state) { - return __assign(__assign({}, state), { leftRangeTypedValue: true, rightRangeTypedValue: true }) - }) - .addCase(typeStartPriceInput, function (state, _a) { - var typedValue = _a.payload.typedValue - return __assign(__assign({}, state), { startPriceTypedValue: typedValue }) - }) - .addCase(typeLeftRangeInput, function (state, _a) { - var typedValue = _a.payload.typedValue - return __assign(__assign({}, state), { leftRangeTypedValue: typedValue }) - }) - .addCase(typeRightRangeInput, function (state, _a) { - var typedValue = _a.payload.typedValue - return __assign(__assign({}, state), { rightRangeTypedValue: typedValue }) - }) - .addCase(typeInput$1, function (state, _a) { - var _b = _a.payload, - field = _b.field, - typedValue = _b.typedValue, - noLiquidity = _b.noLiquidity - if (noLiquidity) { - // they're typing into the field they've last typed in - if (field === state.independentField) { - return __assign(__assign({}, state), { independentField: field, typedValue }) - } - // they're typing into a new field, store the other value - else { - return __assign(__assign({}, state), { independentField: field, typedValue }) - } - } else { - return __assign(__assign({}, state), { independentField: field, typedValue }) - } - }) -}) - -var protocols = [Protocol.V2, Protocol.V3] -var DEFAULT_QUERY_PARAMS = { - protocols: protocols - .map(function (p) { - return p.toLowerCase() - }) - .join(','), - // example other params - // forceCrossProtocol: 'true', - // minSplits: '5', -} -function getClientSideQuote(_a) { - var tokenInAddress = _a.tokenInAddress, - tokenInChainId = _a.tokenInChainId, - tokenInDecimals = _a.tokenInDecimals, - tokenInSymbol = _a.tokenInSymbol, - tokenOutAddress = _a.tokenOutAddress, - tokenOutChainId = _a.tokenOutChainId, - tokenOutDecimals = _a.tokenOutDecimals, - tokenOutSymbol = _a.tokenOutSymbol, - amount = _a.amount, - type = _a.type - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - return [ - 4 /*yield*/, - Promise.resolve().then(function () { - return index - }), - ] - case 1: - return [ - 2 /*return*/, - _b.sent().getQuote( - { - type, - chainId: tokenInChainId, - tokenIn: { - address: tokenInAddress, - chainId: tokenInChainId, - decimals: tokenInDecimals, - symbol: tokenInSymbol, - }, - tokenOut: { - address: tokenOutAddress, - chainId: tokenOutChainId, - decimals: tokenOutDecimals, - symbol: tokenOutSymbol, - }, - amount, - }, - { protocols } - ), - ] - } - }) - }) -} -var routingApi = createApi({ - reducerPath: 'routingApi', - baseQuery: fetchBaseQuery({ - baseUrl: 'https://api.uniswap.org/v1/', - }), - endpoints(build) { - return { - getQuote: build.query({ - queryFn(args, _api, _extraOptions, fetch) { - return __awaiter(this, void 0, void 0, function () { - var tokenInAddress, - tokenInChainId, - tokenOutAddress, - tokenOutChainId, - amount, - useClientSideRouter, - type, - result, - query, - e_1 - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - ;(tokenInAddress = args.tokenInAddress), - (tokenInChainId = args.tokenInChainId), - (tokenOutAddress = args.tokenOutAddress), - (tokenOutChainId = args.tokenOutChainId), - (amount = args.amount), - (useClientSideRouter = args.useClientSideRouter), - (type = args.type) - _a.label = 1 - case 1: - _a.trys.push([1, 6, , 7]) - if (!useClientSideRouter) return [3 /*break*/, 3] - return [4 /*yield*/, getClientSideQuote(args)] - case 2: - result = _a.sent() - return [3 /*break*/, 5] - case 3: - query = qs.stringify( - __assign(__assign({}, DEFAULT_QUERY_PARAMS), { - tokenInAddress, - tokenInChainId, - tokenOutAddress, - tokenOutChainId, - amount, - type, - }) - ) - return [4 /*yield*/, fetch('quote?' + query)] - case 4: - result = _a.sent() - _a.label = 5 - case 5: - return [2 /*return*/, { data: result.data }] - case 6: - e_1 = _a.sent() - // TODO: fall back to client-side quoter when auto router fails. - // deprecate 'legacy' v2/v3 routers first. - return [2 /*return*/, { error: e_1 }] - case 7: - return [2 /*return*/] - } - }) - }) - }, - keepUnusedDataFor: ms(templateObject_1$1b || (templateObject_1$1b = __makeTemplateObject(['10s'], ['10s']))), - extraOptions: { - maxRetries: 0, - }, - }), - } - }, -}) -var useGetQuoteQuery = routingApi.useGetQuoteQuery -var templateObject_1$1b - -var Field -;(function (Field) { - Field['INPUT'] = 'INPUT' - Field['OUTPUT'] = 'OUTPUT' -})(Field || (Field = {})) -var selectCurrency = createAction('swap/selectCurrency') -var switchCurrencies = createAction('swap/switchCurrencies') -var typeInput = createAction('swap/typeInput') -var replaceSwapState = createAction('swap/replaceSwapState') -var setRecipient = createAction('swap/setRecipient') - -var CHAIN_DATA_ABI = [ - { - inputs: [], - name: 'latestAnswer', - outputs: [{ internalType: 'int256', name: '', type: 'int256' }], - stateMutability: 'view', - type: 'function', - }, -] -/** - * Returns the price of 1 gas in WEI for the currently selected network using the chainlink fast gas price oracle - */ -function useGasPrice() { - var _a, _b - var address = useENSAddress('fast-gas-gwei.data.eth').address - var contract = useContract(address !== null && address !== void 0 ? address : undefined, CHAIN_DATA_ABI, false) - var resultStr = - (_b = (_a = useSingleCallResult(contract, 'latestAnswer').result) === null || _a === void 0 ? void 0 : _a[0]) === - null || _b === void 0 - ? void 0 - : _b.toString() - return typeof resultStr === 'string' ? JSBI.BigInt(resultStr) : undefined -} +var abi = [ + { + inputs: [ + ], + name: "feeGrowthGlobal0X128", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + ], + name: "feeGrowthGlobal1X128", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + ], + name: "liquidity", + outputs: [ + { + internalType: "uint128", + name: "", + type: "uint128" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "index", + type: "uint256" + } + ], + name: "observations", + outputs: [ + { + internalType: "uint32", + name: "blockTimestamp", + type: "uint32" + }, + { + internalType: "int56", + name: "tickCumulative", + type: "int56" + }, + { + internalType: "uint160", + name: "secondsPerLiquidityCumulativeX128", + type: "uint160" + }, + { + internalType: "bool", + name: "initialized", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "key", + type: "bytes32" + } + ], + name: "positions", + outputs: [ + { + internalType: "uint128", + name: "_liquidity", + type: "uint128" + }, + { + internalType: "uint256", + name: "feeGrowthInside0LastX128", + type: "uint256" + }, + { + internalType: "uint256", + name: "feeGrowthInside1LastX128", + type: "uint256" + }, + { + internalType: "uint128", + name: "tokensOwed0", + type: "uint128" + }, + { + internalType: "uint128", + name: "tokensOwed1", + type: "uint128" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + ], + name: "protocolFees", + outputs: [ + { + internalType: "uint128", + name: "token0", + type: "uint128" + }, + { + internalType: "uint128", + name: "token1", + type: "uint128" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + ], + name: "slot0", + outputs: [ + { + internalType: "uint160", + name: "sqrtPriceX96", + type: "uint160" + }, + { + internalType: "int24", + name: "tick", + type: "int24" + }, + { + internalType: "uint16", + name: "observationIndex", + type: "uint16" + }, + { + internalType: "uint16", + name: "observationCardinality", + type: "uint16" + }, + { + internalType: "uint16", + name: "observationCardinalityNext", + type: "uint16" + }, + { + internalType: "uint8", + name: "feeProtocol", + type: "uint8" + }, + { + internalType: "bool", + name: "unlocked", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "int16", + name: "wordPosition", + type: "int16" + } + ], + name: "tickBitmap", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "int24", + name: "tick", + type: "int24" + } + ], + name: "ticks", + outputs: [ + { + internalType: "uint128", + name: "liquidityGross", + type: "uint128" + }, + { + internalType: "int128", + name: "liquidityNet", + type: "int128" + }, + { + internalType: "uint256", + name: "feeGrowthOutside0X128", + type: "uint256" + }, + { + internalType: "uint256", + name: "feeGrowthOutside1X128", + type: "uint256" + }, + { + internalType: "int56", + name: "tickCumulativeOutside", + type: "int56" + }, + { + internalType: "uint160", + name: "secondsPerLiquidityOutsideX128", + type: "uint160" + }, + { + internalType: "uint32", + name: "secondsOutside", + type: "uint32" + }, + { + internalType: "bool", + name: "initialized", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + } +]; -/** - * Parses a CurrencyAmount from the passed string. - * Returns the CurrencyAmount, or undefined if parsing fails. - */ -function tryParseCurrencyAmount(value, currency) { - if (!value || !currency) { - return undefined - } - try { - var typedValueParsed = parseUnits(value, currency.decimals).toString() - if (typedValueParsed !== '0') { - return CurrencyAmount.fromRawAmount(currency, JSBI.BigInt(typedValueParsed)) - } - } catch (error) { - // fails if the user specifies too many decimal places of precision (or maybe exceed max uint?) - console.debug('Failed to parse input amount: "' + value + '"', error) - } - return undefined +var POOL_STATE_INTERFACE = new Interface(abi); +var PoolState; +(function (PoolState) { + PoolState[PoolState["LOADING"] = 0] = "LOADING"; + PoolState[PoolState["NOT_EXISTS"] = 1] = "NOT_EXISTS"; + PoolState[PoolState["EXISTS"] = 2] = "EXISTS"; + PoolState[PoolState["INVALID"] = 3] = "INVALID"; +})(PoolState || (PoolState = {})); +function usePools(poolKeys) { + var chainId = useActiveWeb3React().chainId; + var transformed = useMemo(function () { + return poolKeys.map(function (_a) { + var _b = __read(_a, 3), currencyA = _b[0], currencyB = _b[1], feeAmount = _b[2]; + if (!chainId || !currencyA || !currencyB || !feeAmount) + return null; + var tokenA = currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped; + var tokenB = currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped; + if (!tokenA || !tokenB || tokenA.equals(tokenB)) + return null; + var _c = __read(tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA], 2), token0 = _c[0], token1 = _c[1]; + return [token0, token1, feeAmount]; + }); + }, [chainId, poolKeys]); + var poolAddresses = useMemo(function () { + var v3CoreFactoryAddress = chainId && V3_CORE_FACTORY_ADDRESSES[chainId]; + return transformed.map(function (value) { + if (!v3CoreFactoryAddress || !value) + return undefined; + return computePoolAddress({ + factoryAddress: v3CoreFactoryAddress, + tokenA: value[0], + tokenB: value[1], + fee: value[2], + }); + }); + }, [chainId, transformed]); + var slot0s = useMultipleContractSingleData(poolAddresses, POOL_STATE_INTERFACE, 'slot0'); + var liquidities = useMultipleContractSingleData(poolAddresses, POOL_STATE_INTERFACE, 'liquidity'); + return useMemo(function () { + return poolKeys.map(function (_key, index) { + var _a; + var _b = __read((_a = transformed[index]) !== null && _a !== void 0 ? _a : [], 3), token0 = _b[0], token1 = _b[1], fee = _b[2]; + if (!token0 || !token1 || !fee) + return [PoolState.INVALID, null]; + var _c = slot0s[index], slot0 = _c.result, slot0Loading = _c.loading, slot0Valid = _c.valid; + var _d = liquidities[index], liquidity = _d.result, liquidityLoading = _d.loading, liquidityValid = _d.valid; + if (!slot0Valid || !liquidityValid) + return [PoolState.INVALID, null]; + if (slot0Loading || liquidityLoading) + return [PoolState.LOADING, null]; + if (!slot0 || !liquidity) + return [PoolState.NOT_EXISTS, null]; + if (!slot0.sqrtPriceX96 || slot0.sqrtPriceX96.eq(0)) + return [PoolState.NOT_EXISTS, null]; + try { + return [PoolState.EXISTS, new Pool$1(token0, token1, fee, slot0.sqrtPriceX96, liquidity[0], slot0.tick)]; + } + catch (error) { + console.error('Error when constructing the pool', error); + return [PoolState.NOT_EXISTS, null]; + } + }); + }, [liquidities, poolKeys, slot0s, transformed]); } -// returns whether tradeB is better than tradeA by at least a threshold percentage amount -// only used by v2 hooks -function isTradeBetter(tradeA, tradeB, minimumDelta) { - if (minimumDelta === void 0) { - minimumDelta = ZERO_PERCENT - } - if (tradeA && !tradeB) return false - if (tradeB && !tradeA) return true - if (!tradeA || !tradeB) return undefined - if ( - tradeA.tradeType !== tradeB.tradeType || - !tradeA.inputAmount.currency.equals(tradeB.inputAmount.currency) || - !tradeA.outputAmount.currency.equals(tradeB.outputAmount.currency) - ) { - throw new Error('Comparing incomparable trades') - } - if (minimumDelta.equalTo(ZERO_PERCENT)) { - return tradeA.executionPrice.lessThan(tradeB.executionPrice) - } else { - return tradeA.executionPrice.asFraction - .multiply(minimumDelta.add(ONE_HUNDRED_PERCENT)) - .lessThan(tradeB.executionPrice) - } +/** + * Returns all the existing pools that should be considered for swapping between an input currency and an output currency + * @param currencyIn the input currency + * @param currencyOut the output currency + */ +function useV3SwapPools(currencyIn, currencyOut) { + var chainId = useActiveWeb3React().chainId; + var allCurrencyCombinations = useAllCurrencyCombinations(currencyIn, currencyOut); + var allCurrencyCombinationsWithAllFees = useMemo(function () { + return allCurrencyCombinations.reduce(function (list, _a) { + var _b = __read(_a, 2), tokenA = _b[0], tokenB = _b[1]; + return chainId === SupportedChainId.MAINNET + ? list.concat([ + [tokenA, tokenB, FeeAmount.LOW], + [tokenA, tokenB, FeeAmount.MEDIUM], + [tokenA, tokenB, FeeAmount.HIGH], + ]) + : list.concat([ + [tokenA, tokenB, FeeAmount.LOWEST], + [tokenA, tokenB, FeeAmount.LOW], + [tokenA, tokenB, FeeAmount.MEDIUM], + [tokenA, tokenB, FeeAmount.HIGH], + ]); + }, []); + }, [allCurrencyCombinations, chainId]); + var pools = usePools(allCurrencyCombinationsWithAllFees); + return useMemo(function () { + return { + pools: pools + .filter(function (tuple) { + return tuple[0] === PoolState.EXISTS && tuple[1] !== null; + }) + .map(function (_a) { + var _b = __read(_a, 2), pool = _b[1]; + return pool; + }), + loading: pools.some(function (_a) { + var _b = __read(_a, 1), state = _b[0]; + return state === PoolState.LOADING; + }), + }; + }, [pools]); } -function useAllCurrencyCombinations(currencyA, currencyB) { - var chainId = currencyA === null || currencyA === void 0 ? void 0 : currencyA.chainId - var _a = __read( - chainId - ? [ - currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped, - currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped, - ] - : [undefined, undefined], - 2 - ), - tokenA = _a[0], - tokenB = _a[1] - var bases = useMemo( - function () { - var _a, _b, _c, _d, _e - if (!chainId || chainId !== (tokenB === null || tokenB === void 0 ? void 0 : tokenB.chainId)) return [] - var common = (_a = BASES_TO_CHECK_TRADES_AGAINST[chainId]) !== null && _a !== void 0 ? _a : [] - var additionalA = tokenA - ? (_c = (_b = ADDITIONAL_BASES[chainId]) === null || _b === void 0 ? void 0 : _b[tokenA.address]) !== null && - _c !== void 0 - ? _c - : [] - : [] - var additionalB = tokenB - ? (_e = (_d = ADDITIONAL_BASES[chainId]) === null || _d === void 0 ? void 0 : _d[tokenB.address]) !== null && - _e !== void 0 - ? _e - : [] - : [] - return __spreadArray( - __spreadArray(__spreadArray([], __read(common), false), __read(additionalA), false), - __read(additionalB), - false - ) - }, - [chainId, tokenA, tokenB] - ) - var basePairs = useMemo( - function () { - return ( - bases - .flatMap(function (base) { - return bases.map(function (otherBase) { - return [base, otherBase] - }) - }) - // though redundant with the first filter below, that expression runs more often, so this is probably worthwhile - .filter(function (_a) { - var _b = __read(_a, 2), - t0 = _b[0], - t1 = _b[1] - return !t0.equals(t1) - }) - ) - }, - [bases] - ) - return useMemo( - function () { - return tokenA && tokenB - ? __spreadArray( - __spreadArray( - __spreadArray( - [ - // the direct pair - [tokenA, tokenB], - ], - __read( - bases.map(function (base) { - return [tokenA, base] - }) - ), - false - ), - __read( - bases.map(function (base) { - return [tokenB, base] - }) - ), - false - ), - __read(basePairs), - false - ) - .filter(function (_a) { - var _b = __read(_a, 2), - t0 = _b[0], - t1 = _b[1] - return !t0.equals(t1) - }) - // filter out duplicate pairs - .filter(function (_a, i, otherPairs) { - var _b = __read(_a, 2), - t0 = _b[0], - t1 = _b[1] - // find the first index in the array at which there are the same 2 tokens as the current - var firstIndexInOtherPairs = otherPairs.findIndex(function (_a) { - var _b = __read(_a, 2), - t0Other = _b[0], - t1Other = _b[1] - return (t0.equals(t0Other) && t1.equals(t1Other)) || (t0.equals(t1Other) && t1.equals(t0Other)) - }) - // only accept the first occurrence of the same 2 tokens - return firstIndexInOtherPairs === i - }) - // optionally filter out some pairs for tokens with custom bases defined - .filter(function (_a) { - var _b = __read(_a, 2), - tokenA = _b[0], - tokenB = _b[1] - if (!chainId) return true - var customBases = CUSTOM_BASES[chainId] - var customBasesA = customBases === null || customBases === void 0 ? void 0 : customBases[tokenA.address] - var customBasesB = customBases === null || customBases === void 0 ? void 0 : customBases[tokenB.address] - if (!customBasesA && !customBasesB) return true - if ( - customBasesA && - !customBasesA.find(function (base) { - return tokenB.equals(base) - }) - ) - return false - if ( - customBasesB && - !customBasesB.find(function (base) { - return tokenA.equals(base) - }) - ) - return false - return true - }) - : [] - }, - [tokenA, tokenB, bases, basePairs, chainId] - ) +/** + * Returns true if poolA is equivalent to poolB + * @param poolA one of the two pools + * @param poolB the other pool + */ +function poolEquals(poolA, poolB) { + return (poolA === poolB || + (poolA.token0.equals(poolB.token0) && poolA.token1.equals(poolB.token1) && poolA.fee === poolB.fee)); +} +function computeAllRoutes(currencyIn, currencyOut, pools, chainId, currentPath, allPaths, startCurrencyIn, maxHops) { + var e_1, _a; + if (currentPath === void 0) { currentPath = []; } + if (allPaths === void 0) { allPaths = []; } + if (startCurrencyIn === void 0) { startCurrencyIn = currencyIn; } + if (maxHops === void 0) { maxHops = 2; } + var tokenIn = currencyIn === null || currencyIn === void 0 ? void 0 : currencyIn.wrapped; + var tokenOut = currencyOut === null || currencyOut === void 0 ? void 0 : currencyOut.wrapped; + if (!tokenIn || !tokenOut) + throw new Error('Missing tokenIn/tokenOut'); + var _loop_1 = function (pool) { + if (!pool.involvesToken(tokenIn) || currentPath.find(function (pathPool) { return poolEquals(pool, pathPool); })) + return "continue"; + var outputToken = pool.token0.equals(tokenIn) ? pool.token1 : pool.token0; + if (outputToken.equals(tokenOut)) { + allPaths.push(new Route$1(__spreadArray(__spreadArray([], __read(currentPath), false), [pool], false), startCurrencyIn, currencyOut)); + } + else if (maxHops > 1) { + computeAllRoutes(outputToken, currencyOut, pools, chainId, __spreadArray(__spreadArray([], __read(currentPath), false), [pool], false), allPaths, startCurrencyIn, maxHops - 1); + } + }; + try { + for (var pools_1 = __values(pools), pools_1_1 = pools_1.next(); !pools_1_1.done; pools_1_1 = pools_1.next()) { + var pool = pools_1_1.value; + _loop_1(pool); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (pools_1_1 && !pools_1_1.done && (_a = pools_1.return)) _a.call(pools_1); + } + finally { if (e_1) throw e_1.error; } + } + return allPaths; +} +/** + * Returns all the routes from an input currency to an output currency + * @param currencyIn the input currency + * @param currencyOut the output currency + */ +function useAllV3Routes(currencyIn, currencyOut) { + var chainId = useActiveWeb3React().chainId; + var _a = useV3SwapPools(currencyIn, currencyOut), pools = _a.pools, poolsLoading = _a.loading; + return useMemo(function () { + if (poolsLoading || !chainId || !pools || !currencyIn || !currencyOut) + return { loading: true, routes: [] }; + var routes = computeAllRoutes(currencyIn, currencyOut, pools, chainId, [], [], currencyIn, 2); + return { loading: false, routes: routes }; + }, [chainId, currencyIn, currencyOut, pools, poolsLoading]); +} + +var _a$7; +var QUOTE_GAS_OVERRIDES = (_a$7 = {}, + _a$7[SupportedChainId.ARBITRUM_ONE] = 25000000, + _a$7[SupportedChainId.ARBITRUM_RINKEBY] = 25000000, + _a$7); +var DEFAULT_GAS_QUOTE = 2000000; +/** + * Returns the best v3 trade for a desired swap + * @param tradeType whether the swap is an exact in/out + * @param amountSpecified the exact amount to swap in/out + * @param otherCurrency the desired output/payment currency + */ +function useClientSideV3Trade(tradeType, amountSpecified, otherCurrency) { + var _a; + var _b = __read(useMemo(function () { + return tradeType === TradeType.EXACT_INPUT + ? [amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, otherCurrency] + : [otherCurrency, amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency]; + }, [tradeType, amountSpecified, otherCurrency]), 2), currencyIn = _b[0], currencyOut = _b[1]; + var _c = useAllV3Routes(currencyIn, currencyOut), routes = _c.routes, routesLoading = _c.loading; + var quoter = useV3Quoter(); + var chainId = useActiveWeb3React().chainId; + var quotesResults = useSingleContractWithCallData(quoter, amountSpecified + ? routes.map(function (route) { return SwapQuoter.quoteCallParameters(route, amountSpecified, tradeType).calldata; }) + : [], { + gasRequired: chainId ? (_a = QUOTE_GAS_OVERRIDES[chainId]) !== null && _a !== void 0 ? _a : DEFAULT_GAS_QUOTE : undefined, + }); + return useMemo(function () { + if (!amountSpecified || + !currencyIn || + !currencyOut || + quotesResults.some(function (_a) { + var valid = _a.valid; + return !valid; + }) || + // skip when tokens are the same + (tradeType === TradeType.EXACT_INPUT + ? amountSpecified.currency.equals(currencyOut) + : amountSpecified.currency.equals(currencyIn))) { + return { + state: TradeState.INVALID, + trade: undefined, + }; + } + if (routesLoading || quotesResults.some(function (_a) { + var loading = _a.loading; + return loading; + })) { + return { + state: TradeState.LOADING, + trade: undefined, + }; + } + var _a = quotesResults.reduce(function (currentBest, _a, i) { + var result = _a.result; + if (!result) + return currentBest; + // overwrite the current best if it's not defined or if this route is better + if (tradeType === TradeType.EXACT_INPUT) { + var amountOut_1 = CurrencyAmount.fromRawAmount(currencyOut, result.amountOut.toString()); + if (currentBest.amountOut === null || JSBI.lessThan(currentBest.amountOut.quotient, amountOut_1.quotient)) { + return { + bestRoute: routes[i], + amountIn: amountSpecified, + amountOut: amountOut_1, + }; + } + } + else { + var amountIn_1 = CurrencyAmount.fromRawAmount(currencyIn, result.amountIn.toString()); + if (currentBest.amountIn === null || JSBI.greaterThan(currentBest.amountIn.quotient, amountIn_1.quotient)) { + return { + bestRoute: routes[i], + amountIn: amountIn_1, + amountOut: amountSpecified, + }; + } + } + return currentBest; + }, { + bestRoute: null, + amountIn: null, + amountOut: null, + }), bestRoute = _a.bestRoute, amountIn = _a.amountIn, amountOut = _a.amountOut; + if (!bestRoute || !amountIn || !amountOut) { + return { + state: TradeState.NO_ROUTE_FOUND, + trade: undefined, + }; + } + return { + state: TradeState.VALID, + trade: new InterfaceTrade({ + v2Routes: [], + v3Routes: [ + { + routev3: bestRoute, + inputAmount: amountIn, + outputAmount: amountOut, + }, + ], + tradeType: tradeType, + }), + }; + }, [amountSpecified, currencyIn, currencyOut, quotesResults, routes, routesLoading, tradeType]); +} + +var _a$6; +// Stablecoin amounts used when calculating spot price for a given currency. +// The amount is large enough to filter low liquidity pairs. +var STABLECOIN_AMOUNT_OUT = (_a$6 = {}, + _a$6[SupportedChainId.MAINNET] = CurrencyAmount.fromRawAmount(USDC, 100000000000), + _a$6[SupportedChainId.ARBITRUM_ONE] = CurrencyAmount.fromRawAmount(USDC_ARBITRUM, 10000000000), + _a$6[SupportedChainId.OPTIMISM] = CurrencyAmount.fromRawAmount(DAI_OPTIMISM, 1e+22), + _a$6[SupportedChainId.POLYGON] = CurrencyAmount.fromRawAmount(USDC_POLYGON, 10000000000), + _a$6); +/** + * Returns the price in USDC of the input currency + * @param currency currency to compute the USDC price of + */ +function useUSDCPrice(currency) { + var chainId = currency === null || currency === void 0 ? void 0 : currency.chainId; + var amountOut = chainId ? STABLECOIN_AMOUNT_OUT[chainId] : undefined; + var stablecoin = amountOut === null || amountOut === void 0 ? void 0 : amountOut.currency; + // TODO(#2808): remove dependency on useBestV2Trade + var v2USDCTrade = useBestV2Trade(TradeType.EXACT_OUTPUT, amountOut, currency, { + maxHops: 2, + }); + var v3USDCTrade = useClientSideV3Trade(TradeType.EXACT_OUTPUT, amountOut, currency); + return useMemo(function () { + if (!currency || !stablecoin) { + return undefined; + } + // handle usdc + if (currency === null || currency === void 0 ? void 0 : currency.wrapped.equals(stablecoin)) { + return new Price(stablecoin, stablecoin, '1', '1'); + } + // use v2 price if available, v3 as fallback + if (v2USDCTrade) { + var _a = v2USDCTrade.route.midPrice, numerator = _a.numerator, denominator = _a.denominator; + return new Price(currency, stablecoin, denominator, numerator); + } + else if (v3USDCTrade.trade) { + var _b = v3USDCTrade.trade.routes[0].midPrice, numerator = _b.numerator, denominator = _b.denominator; + return new Price(currency, stablecoin, denominator, numerator); + } + return undefined; + }, [currency, stablecoin, v2USDCTrade, v3USDCTrade.trade]); +} +function useUSDCValue(currencyAmount) { + var price = useUSDCPrice(currencyAmount === null || currencyAmount === void 0 ? void 0 : currencyAmount.currency); + return useMemo(function () { + if (!price || !currencyAmount) + return null; + try { + return price.quote(currencyAmount); + } + catch (error) { + return null; + } + }, [currencyAmount, price]); +} +/** + * + * @param fiatValue string representation of a USD amount + * @returns CurrencyAmount where currency is stablecoin on active chain + */ +function useStablecoinAmountFromFiatValue(fiatValue) { + var _a; + var chainId = useActiveWeb3React().chainId; + var stablecoin = chainId ? (_a = STABLECOIN_AMOUNT_OUT[chainId]) === null || _a === void 0 ? void 0 : _a.currency : undefined; + if (fiatValue === null || fiatValue === undefined || !chainId || !stablecoin) { + return undefined; + } + // trim for decimal precision when parsing + var parsedForDecimals = parseFloat(fiatValue).toFixed(stablecoin.decimals).toString(); + try { + // parse USD string into CurrencyAmount based on stablecoin decimals + return tryParseCurrencyAmount(parsedForDecimals, stablecoin); + } + catch (error) { + return undefined; + } } -var PAIR_INTERFACE = new Interface(abi$4) -var PairState -;(function (PairState) { - PairState[(PairState['LOADING'] = 0)] = 'LOADING' - PairState[(PairState['NOT_EXISTS'] = 1)] = 'NOT_EXISTS' - PairState[(PairState['EXISTS'] = 2)] = 'EXISTS' - PairState[(PairState['INVALID'] = 3)] = 'INVALID' -})(PairState || (PairState = {})) -function useV2Pairs(currencies) { - var tokens = useMemo( - function () { - return currencies.map(function (_a) { - var _b = __read(_a, 2), - currencyA = _b[0], - currencyB = _b[1] - return [ - currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped, - currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped, - ] - }) - }, - [currencies] - ) - var pairAddresses = useMemo( - function () { - return tokens.map(function (_a) { - var _b = __read(_a, 2), - tokenA = _b[0], - tokenB = _b[1] - return tokenA && - tokenB && - tokenA.chainId === tokenB.chainId && - !tokenA.equals(tokenB) && - V2_FACTORY_ADDRESSES[tokenA.chainId] - ? computePairAddress({ factoryAddress: V2_FACTORY_ADDRESSES[tokenA.chainId], tokenA, tokenB }) - : undefined - }) - }, - [tokens] - ) - var results = useMultipleContractSingleData(pairAddresses, PAIR_INTERFACE, 'getReserves') - return useMemo( - function () { - return results.map(function (result, i) { - var reserves = result.result, - loading = result.loading - var tokenA = tokens[i][0] - var tokenB = tokens[i][1] - if (loading) return [PairState.LOADING, null] - if (!tokenA || !tokenB || tokenA.equals(tokenB)) return [PairState.INVALID, null] - if (!reserves) return [PairState.NOT_EXISTS, null] - var reserve0 = reserves.reserve0, - reserve1 = reserves.reserve1 - var _a = __read(tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA], 2), - token0 = _a[0], - token1 = _a[1] - return [ - PairState.EXISTS, - new Pair( - CurrencyAmount.fromRawAmount(token0, reserve0.toString()), - CurrencyAmount.fromRawAmount(token1, reserve1.toString()) - ), - ] - }) - }, - [results, tokens] - ) +var V3_SWAP_DEFAULT_SLIPPAGE = new Percent(50, 10000); // .50% +var ONE_TENTHS_PERCENT = new Percent(10, 10000); // .10% +/** + * Return a guess of the gas cost used in computing slippage tolerance for a given trade + * @param trade the trade for which to _guess_ the amount of gas it would cost to execute + */ +function guesstimateGas(trade) { + if (!!trade) { + return 100000 + trade.swaps.reduce(function (memo, swap) { return swap.route.pools.length + memo; }, 0) * 30000; + } + return undefined; +} +var MIN_AUTO_SLIPPAGE_TOLERANCE = new Percent(5, 1000); // 0.5% +var MAX_AUTO_SLIPPAGE_TOLERANCE = new Percent(25, 100); // 25% +/** + * Returns slippage tolerance based on values from current trade, gas estimates from api, and active network. + */ +function useAutoSlippageTolerance(trade) { + var chainId = useActiveWeb3React().chainId; + var onL2 = chainId && L2_CHAIN_IDS.includes(chainId); + var outputDollarValue = useUSDCValue(trade === null || trade === void 0 ? void 0 : trade.outputAmount); + var nativeGasPrice = useGasPrice(); + var gasEstimate = guesstimateGas(trade); + var nativeCurrency = useNativeCurrency(); + var nativeCurrencyPrice = useUSDCPrice(nativeCurrency !== null && nativeCurrency !== void 0 ? nativeCurrency : undefined); + return useMemo(function () { + if (!trade || onL2) + return ONE_TENTHS_PERCENT; + var nativeGasCost = nativeGasPrice && typeof gasEstimate === 'number' + ? JSBI.multiply(nativeGasPrice, JSBI.BigInt(gasEstimate)) + : undefined; + var dollarGasCost = nativeCurrency && nativeGasCost && nativeCurrencyPrice + ? nativeCurrencyPrice.quote(CurrencyAmount.fromRawAmount(nativeCurrency, nativeGasCost)) + : undefined; + // if valid estimate from api and using api trade, use gas estimate from api + // NOTE - dont use gas estimate for L2s yet - need to verify accuracy + // if not, use local heuristic + var dollarCostToUse = chainId && SUPPORTED_GAS_ESTIMATE_CHAIN_IDS.includes(chainId) && (trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) + ? trade.gasUseEstimateUSD + : dollarGasCost; + if (outputDollarValue && dollarCostToUse) { + // the rationale is that a user will not want their trade to fail for a loss due to slippage that is less than + // the cost of the gas of the failed transaction + var fraction = dollarCostToUse.asFraction.divide(outputDollarValue.asFraction); + var result = new Percent(fraction.numerator, fraction.denominator); + if (result.greaterThan(MAX_AUTO_SLIPPAGE_TOLERANCE)) + return MAX_AUTO_SLIPPAGE_TOLERANCE; + if (result.lessThan(MIN_AUTO_SLIPPAGE_TOLERANCE)) + return MIN_AUTO_SLIPPAGE_TOLERANCE; + return result; + } + return V3_SWAP_DEFAULT_SLIPPAGE; + }, [trade, onL2, nativeGasPrice, gasEstimate, nativeCurrency, nativeCurrencyPrice, chainId, outputDollarValue]); } -function useAllCommonPairs(currencyA, currencyB) { - var allCurrencyCombinations = useAllCurrencyCombinations(currencyA, currencyB) - var allPairs = useV2Pairs(allCurrencyCombinations) - return useMemo( - function () { - return Object.values( - allPairs - // filter out invalid pairs - .filter(function (result) { - return Boolean(result[0] === PairState.EXISTS && result[1]) - }) - .map(function (_a) { - var _b = __read(_a, 2), - pair = _b[1] - return pair - }) - ) - }, - [allPairs] - ) -} -var MAX_HOPS = 3 -/** - * Returns the best v2 trade for a desired swap - * @param tradeType whether the swap is an exact in/out - * @param amountSpecified the exact amount to swap in/out - * @param otherCurrency the desired output/payment currency - */ -function useBestV2Trade(tradeType, amountSpecified, otherCurrency, _a) { - var _b = _a === void 0 ? {} : _a, - _c = _b.maxHops, - maxHops = _c === void 0 ? MAX_HOPS : _c - var _d = __read( - useMemo( - function () { - return tradeType === TradeType.EXACT_INPUT - ? [ - amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, - otherCurrency, - ] - : [ - otherCurrency, - amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, - ] - }, - [tradeType, amountSpecified, otherCurrency] - ), - 2 - ), - currencyIn = _d[0], - currencyOut = _d[1] - var allowedPairs = useAllCommonPairs(currencyIn, currencyOut) - return useMemo( - function () { - var _a, _b, _c, _d - if (amountSpecified && currencyIn && currencyOut && allowedPairs.length > 0) { - if (maxHops === 1) { - var options = { maxHops: 1, maxNumResults: 1 } - if (tradeType === TradeType.EXACT_INPUT) { - var amountIn = amountSpecified - return (_a = Trade.bestTradeExactIn(allowedPairs, amountIn, currencyOut, options)[0]) !== null && - _a !== void 0 - ? _a - : null - } else { - var amountOut = amountSpecified - return (_b = Trade.bestTradeExactOut(allowedPairs, currencyIn, amountOut, options)[0]) !== null && - _b !== void 0 - ? _b - : null - } - } - // search through trades with varying hops, find best trade out of them - var bestTradeSoFar = null - for (var i = 1; i <= maxHops; i++) { - var options = { maxHops: i, maxNumResults: 1 } - var currentTrade = void 0 - if (tradeType === TradeType.EXACT_INPUT) { - var amountIn = amountSpecified - currentTrade = - (_c = Trade.bestTradeExactIn(allowedPairs, amountIn, currencyOut, options)[0]) !== null && _c !== void 0 - ? _c - : null - } else { - var amountOut = amountSpecified - currentTrade = - (_d = Trade.bestTradeExactOut(allowedPairs, currencyIn, amountOut, options)[0]) !== null && _d !== void 0 - ? _d - : null - } - // if current trade is best yet, save it - if (isTradeBetter(bestTradeSoFar, currentTrade, BETTER_TRADE_LESS_HOPS_THRESHOLD)) { - bestTradeSoFar = currentTrade - } - } - return bestTradeSoFar - } - return null - }, - [tradeType, amountSpecified, currencyIn, currencyOut, allowedPairs, maxHops] - ) +/** + * Transforms a Routing API quote into an array of routes that can be used to create + * a `Trade`. + */ +function computeRoutes(currencyIn, currencyOut, tradeType, quoteResult) { + if (!quoteResult || !quoteResult.route || !currencyIn || !currencyOut) + return undefined; + if (quoteResult.route.length === 0) + return []; + var parsedTokenIn = parseToken(quoteResult.route[0][0].tokenIn); + var parsedTokenOut = parseToken(quoteResult.route[0][quoteResult.route[0].length - 1].tokenOut); + if (parsedTokenIn.address !== currencyIn.wrapped.address) + return undefined; + if (parsedTokenOut.address !== currencyOut.wrapped.address) + return undefined; + var parsedCurrencyIn = currencyIn.isNative ? nativeOnChain(currencyIn.chainId) : parsedTokenIn; + var parsedCurrencyOut = currencyOut.isNative ? nativeOnChain(currencyOut.chainId) : parsedTokenOut; + try { + return quoteResult.route.map(function (route) { + if (route.length === 0) { + throw new Error('Expected route to have at least one pair or pool'); + } + var rawAmountIn = route[0].amountIn; + var rawAmountOut = route[route.length - 1].amountOut; + if (!rawAmountIn || !rawAmountOut) { + throw new Error('Expected both amountIn and amountOut to be present'); + } + return { + routev3: isV3Route(route) ? new Route$1(route.map(parsePool), parsedCurrencyIn, parsedCurrencyOut) : null, + routev2: !isV3Route(route) ? new Route$2(route.map(parsePair), parsedCurrencyIn, parsedCurrencyOut) : null, + inputAmount: CurrencyAmount.fromRawAmount(parsedCurrencyIn, rawAmountIn), + outputAmount: CurrencyAmount.fromRawAmount(parsedCurrencyOut, rawAmountOut), + }; + }); + } + catch (e) { + // `Route` constructor may throw if inputs/outputs are temporarily out of sync + // (RTK-Query always returns the latest data which may not be the right inputs/outputs) + // This is not fatal and will fix itself in future render cycles + console.error(e); + return undefined; + } +} +function transformRoutesToTrade(route, tradeType, gasUseEstimateUSD) { + var _a, _b; + return new InterfaceTrade({ + v2Routes: (_a = route === null || route === void 0 ? void 0 : route.filter(function (r) { return r.routev2 !== null; }).map(function (_a) { + var routev2 = _a.routev2, inputAmount = _a.inputAmount, outputAmount = _a.outputAmount; + return ({ routev2: routev2, inputAmount: inputAmount, outputAmount: outputAmount }); + })) !== null && _a !== void 0 ? _a : [], + v3Routes: (_b = route === null || route === void 0 ? void 0 : route.filter(function (r) { return r.routev3 !== null; }).map(function (_a) { + var routev3 = _a.routev3, inputAmount = _a.inputAmount, outputAmount = _a.outputAmount; + return ({ routev3: routev3, inputAmount: inputAmount, outputAmount: outputAmount }); + })) !== null && _b !== void 0 ? _b : [], + tradeType: tradeType, + gasUseEstimateUSD: gasUseEstimateUSD, + }); +} +var parseToken = function (_a) { + var address = _a.address, chainId = _a.chainId, decimals = _a.decimals, symbol = _a.symbol; + return new Token(chainId, address, parseInt(decimals.toString()), symbol); +}; +var parsePool = function (_a) { + var fee = _a.fee, sqrtRatioX96 = _a.sqrtRatioX96, liquidity = _a.liquidity, tickCurrent = _a.tickCurrent, tokenIn = _a.tokenIn, tokenOut = _a.tokenOut; + return new Pool$1(parseToken(tokenIn), parseToken(tokenOut), parseInt(fee), sqrtRatioX96, liquidity, parseInt(tickCurrent)); +}; +var parsePair = function (_a) { + var reserve0 = _a.reserve0, reserve1 = _a.reserve1; + return new Pair(CurrencyAmount.fromRawAmount(parseToken(reserve0.token), reserve0.quotient), CurrencyAmount.fromRawAmount(parseToken(reserve1.token), reserve1.quotient)); +}; +function isV3Route(route) { + return route[0].type === 'v3-pool'; } -var TradeState -;(function (TradeState) { - TradeState[(TradeState['LOADING'] = 0)] = 'LOADING' - TradeState[(TradeState['INVALID'] = 1)] = 'INVALID' - TradeState[(TradeState['NO_ROUTE_FOUND'] = 2)] = 'NO_ROUTE_FOUND' - TradeState[(TradeState['VALID'] = 3)] = 'VALID' - TradeState[(TradeState['SYNCING'] = 4)] = 'SYNCING' -})(TradeState || (TradeState = {})) -var InterfaceTrade = /** @class */ (function (_super) { - __extends(InterfaceTrade, _super) - function InterfaceTrade(_a) { - var gasUseEstimateUSD = _a.gasUseEstimateUSD, - routes = __rest(_a, ['gasUseEstimateUSD']) - var _this = _super.call(this, routes) || this - _this.gasUseEstimateUSD = gasUseEstimateUSD - return _this - } - return InterfaceTrade -})(Trade$1) +function useFreshData(data, dataBlockNumber, maxBlockAge) { + if (maxBlockAge === void 0) { maxBlockAge = 10; } + var localBlockNumber = useBlockNumber(); + if (!localBlockNumber) + return undefined; + if (localBlockNumber - dataBlockNumber > maxBlockAge) { + return undefined; + } + return data; +} +/** + * Returns query arguments for the Routing API query or undefined if the + * query should be skipped. + */ +function useRoutingAPIArguments(_a) { + var tokenIn = _a.tokenIn, tokenOut = _a.tokenOut, amount = _a.amount, tradeType = _a.tradeType; + var _b = __read(useClientSideRouter(), 1), clientSideRouter = _b[0]; + return useMemo(function () { + return !tokenIn || !tokenOut || !amount || tokenIn.equals(tokenOut) + ? undefined + : { + amount: amount.quotient.toString(), + tokenInAddress: tokenIn.wrapped.address, + tokenInChainId: tokenIn.wrapped.chainId, + tokenInDecimals: tokenIn.wrapped.decimals, + tokenInSymbol: tokenIn.wrapped.symbol, + tokenOutAddress: tokenOut.wrapped.address, + tokenOutChainId: tokenOut.wrapped.chainId, + tokenOutDecimals: tokenOut.wrapped.decimals, + tokenOutSymbol: tokenOut.wrapped.symbol, + useClientSideRouter: clientSideRouter, + type: (tradeType === TradeType.EXACT_INPUT ? 'exactIn' : 'exactOut'), + }; + }, [amount, clientSideRouter, tokenIn, tokenOut, tradeType]); +} +/** + * Returns the best trade by invoking the routing api or the smart order router on the client + * @param tradeType whether the swap is an exact in/out + * @param amountSpecified the exact amount to swap in/out + * @param otherCurrency the desired output/payment currency + */ +function useRoutingAPITrade(tradeType, amountSpecified, otherCurrency) { + var _a; + var _b = __read(useMemo(function () { + return tradeType === TradeType.EXACT_INPUT + ? [amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, otherCurrency] + : [otherCurrency, amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency]; + }, [amountSpecified, otherCurrency, tradeType]), 2), currencyIn = _b[0], currencyOut = _b[1]; + var queryArgs = useRoutingAPIArguments({ + tokenIn: currencyIn, + tokenOut: currencyOut, + amount: amountSpecified, + tradeType: tradeType, + }); + var _c = useGetQuoteQuery(queryArgs !== null && queryArgs !== void 0 ? queryArgs : skipToken, { + pollingInterval: ms(templateObject_1$1a || (templateObject_1$1a = __makeTemplateObject(["15s"], ["15s"]))), + refetchOnFocus: true, + }), isLoading = _c.isLoading, isError = _c.isError, data = _c.data; + var quoteResult = useFreshData(data, Number(data === null || data === void 0 ? void 0 : data.blockNumber) || 0); + var route = useMemo(function () { return computeRoutes(currencyIn, currencyOut, tradeType, quoteResult); }, [currencyIn, currencyOut, quoteResult, tradeType]); + // get USD gas cost of trade in active chains stablecoin amount + var gasUseEstimateUSD = (_a = useStablecoinAmountFromFiatValue(quoteResult === null || quoteResult === void 0 ? void 0 : quoteResult.gasUseEstimateUSD)) !== null && _a !== void 0 ? _a : null; + return useMemo(function () { + if (!currencyIn || !currencyOut) { + return { + state: TradeState.INVALID, + trade: undefined, + }; + } + if (isLoading && !quoteResult) { + // only on first hook render + return { + state: TradeState.LOADING, + trade: undefined, + }; + } + var otherAmount = tradeType === TradeType.EXACT_INPUT + ? currencyOut && quoteResult + ? CurrencyAmount.fromRawAmount(currencyOut, quoteResult.quote) + : undefined + : currencyIn && quoteResult + ? CurrencyAmount.fromRawAmount(currencyIn, quoteResult.quote) + : undefined; + if (isError || !otherAmount || !route || route.length === 0 || !queryArgs) { + return { + state: TradeState.NO_ROUTE_FOUND, + trade: undefined, + }; + } + try { + var trade = transformRoutesToTrade(route, tradeType, gasUseEstimateUSD); + return { + // always return VALID regardless of isFetching status + state: TradeState.VALID, + trade: trade, + }; + } + catch (e) { + console.debug('transformRoutesToTrade failed: ', e); + return { state: TradeState.INVALID, trade: undefined }; + } + }, [currencyIn, currencyOut, isLoading, quoteResult, tradeType, isError, route, queryArgs, gasUseEstimateUSD]); +} +var templateObject_1$1a; -var abi = [ - { - inputs: [], - name: 'feeGrowthGlobal0X128', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'feeGrowthGlobal1X128', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'liquidity', - outputs: [ - { - internalType: 'uint128', - name: '', - type: 'uint128', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'index', - type: 'uint256', - }, - ], - name: 'observations', - outputs: [ - { - internalType: 'uint32', - name: 'blockTimestamp', - type: 'uint32', - }, - { - internalType: 'int56', - name: 'tickCumulative', - type: 'int56', - }, - { - internalType: 'uint160', - name: 'secondsPerLiquidityCumulativeX128', - type: 'uint160', - }, - { - internalType: 'bool', - name: 'initialized', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes32', - name: 'key', - type: 'bytes32', - }, - ], - name: 'positions', - outputs: [ - { - internalType: 'uint128', - name: '_liquidity', - type: 'uint128', - }, - { - internalType: 'uint256', - name: 'feeGrowthInside0LastX128', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'feeGrowthInside1LastX128', - type: 'uint256', - }, - { - internalType: 'uint128', - name: 'tokensOwed0', - type: 'uint128', - }, - { - internalType: 'uint128', - name: 'tokensOwed1', - type: 'uint128', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'protocolFees', - outputs: [ - { - internalType: 'uint128', - name: 'token0', - type: 'uint128', - }, - { - internalType: 'uint128', - name: 'token1', - type: 'uint128', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'slot0', - outputs: [ - { - internalType: 'uint160', - name: 'sqrtPriceX96', - type: 'uint160', - }, - { - internalType: 'int24', - name: 'tick', - type: 'int24', - }, - { - internalType: 'uint16', - name: 'observationIndex', - type: 'uint16', - }, - { - internalType: 'uint16', - name: 'observationCardinality', - type: 'uint16', - }, - { - internalType: 'uint16', - name: 'observationCardinalityNext', - type: 'uint16', - }, - { - internalType: 'uint8', - name: 'feeProtocol', - type: 'uint8', - }, - { - internalType: 'bool', - name: 'unlocked', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'int16', - name: 'wordPosition', - type: 'int16', - }, - ], - name: 'tickBitmap', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'int24', - name: 'tick', - type: 'int24', - }, - ], - name: 'ticks', - outputs: [ - { - internalType: 'uint128', - name: 'liquidityGross', - type: 'uint128', - }, - { - internalType: 'int128', - name: 'liquidityNet', - type: 'int128', - }, - { - internalType: 'uint256', - name: 'feeGrowthOutside0X128', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'feeGrowthOutside1X128', - type: 'uint256', - }, - { - internalType: 'int56', - name: 'tickCumulativeOutside', - type: 'int56', - }, - { - internalType: 'uint160', - name: 'secondsPerLiquidityOutsideX128', - type: 'uint160', - }, - { - internalType: 'uint32', - name: 'secondsOutside', - type: 'uint32', - }, - { - internalType: 'bool', - name: 'initialized', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, -] - -var POOL_STATE_INTERFACE = new Interface(abi) -var PoolState -;(function (PoolState) { - PoolState[(PoolState['LOADING'] = 0)] = 'LOADING' - PoolState[(PoolState['NOT_EXISTS'] = 1)] = 'NOT_EXISTS' - PoolState[(PoolState['EXISTS'] = 2)] = 'EXISTS' - PoolState[(PoolState['INVALID'] = 3)] = 'INVALID' -})(PoolState || (PoolState = {})) -function usePools(poolKeys) { - var chainId = useActiveWeb3React().chainId - var transformed = useMemo( - function () { - return poolKeys.map(function (_a) { - var _b = __read(_a, 3), - currencyA = _b[0], - currencyB = _b[1], - feeAmount = _b[2] - if (!chainId || !currencyA || !currencyB || !feeAmount) return null - var tokenA = currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped - var tokenB = currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped - if (!tokenA || !tokenB || tokenA.equals(tokenB)) return null - var _c = __read(tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA], 2), - token0 = _c[0], - token1 = _c[1] - return [token0, token1, feeAmount] - }) - }, - [chainId, poolKeys] - ) - var poolAddresses = useMemo( - function () { - var v3CoreFactoryAddress = chainId && V3_CORE_FACTORY_ADDRESSES[chainId] - return transformed.map(function (value) { - if (!v3CoreFactoryAddress || !value) return undefined - return computePoolAddress({ - factoryAddress: v3CoreFactoryAddress, - tokenA: value[0], - tokenB: value[1], - fee: value[2], - }) - }) - }, - [chainId, transformed] - ) - var slot0s = useMultipleContractSingleData(poolAddresses, POOL_STATE_INTERFACE, 'slot0') - var liquidities = useMultipleContractSingleData(poolAddresses, POOL_STATE_INTERFACE, 'liquidity') - return useMemo( - function () { - return poolKeys.map(function (_key, index) { - var _a - var _b = __read((_a = transformed[index]) !== null && _a !== void 0 ? _a : [], 3), - token0 = _b[0], - token1 = _b[1], - fee = _b[2] - if (!token0 || !token1 || !fee) return [PoolState.INVALID, null] - var _c = slot0s[index], - slot0 = _c.result, - slot0Loading = _c.loading, - slot0Valid = _c.valid - var _d = liquidities[index], - liquidity = _d.result, - liquidityLoading = _d.loading, - liquidityValid = _d.valid - if (!slot0Valid || !liquidityValid) return [PoolState.INVALID, null] - if (slot0Loading || liquidityLoading) return [PoolState.LOADING, null] - if (!slot0 || !liquidity) return [PoolState.NOT_EXISTS, null] - if (!slot0.sqrtPriceX96 || slot0.sqrtPriceX96.eq(0)) return [PoolState.NOT_EXISTS, null] - try { - return [PoolState.EXISTS, new Pool$1(token0, token1, fee, slot0.sqrtPriceX96, liquidity[0], slot0.tick)] - } catch (error) { - console.error('Error when constructing the pool', error) - return [PoolState.NOT_EXISTS, null] - } - }) - }, - [liquidities, poolKeys, slot0s, transformed] - ) -} +var AUTO_ROUTER_SUPPORTED_CHAINS = Object.values(ChainId); -/** - * Returns all the existing pools that should be considered for swapping between an input currency and an output currency - * @param currencyIn the input currency - * @param currencyOut the output currency - */ -function useV3SwapPools(currencyIn, currencyOut) { - var chainId = useActiveWeb3React().chainId - var allCurrencyCombinations = useAllCurrencyCombinations(currencyIn, currencyOut) - var allCurrencyCombinationsWithAllFees = useMemo( - function () { - return allCurrencyCombinations.reduce(function (list, _a) { - var _b = __read(_a, 2), - tokenA = _b[0], - tokenB = _b[1] - return chainId === SupportedChainId.MAINNET - ? list.concat([ - [tokenA, tokenB, FeeAmount.LOW], - [tokenA, tokenB, FeeAmount.MEDIUM], - [tokenA, tokenB, FeeAmount.HIGH], - ]) - : list.concat([ - [tokenA, tokenB, FeeAmount.LOWEST], - [tokenA, tokenB, FeeAmount.LOW], - [tokenA, tokenB, FeeAmount.MEDIUM], - [tokenA, tokenB, FeeAmount.HIGH], - ]) - }, []) - }, - [allCurrencyCombinations, chainId] - ) - var pools = usePools(allCurrencyCombinationsWithAllFees) - return useMemo( - function () { - return { - pools: pools - .filter(function (tuple) { - return tuple[0] === PoolState.EXISTS && tuple[1] !== null - }) - .map(function (_a) { - var _b = __read(_a, 2), - pool = _b[1] - return pool - }), - loading: pools.some(function (_a) { - var _b = __read(_a, 1), - state = _b[0] - return state === PoolState.LOADING - }), - } - }, - [pools] - ) +function useAutoRouterSupported() { + var chainId = useActiveWeb3React().chainId; + return Boolean(chainId && AUTO_ROUTER_SUPPORTED_CHAINS.includes(chainId)); } -/** - * Returns true if poolA is equivalent to poolB - * @param poolA one of the two pools - * @param poolB the other pool - */ -function poolEquals(poolA, poolB) { - return ( - poolA === poolB || - (poolA.token0.equals(poolB.token0) && poolA.token1.equals(poolB.token1) && poolA.fee === poolB.fee) - ) -} -function computeAllRoutes(currencyIn, currencyOut, pools, chainId, currentPath, allPaths, startCurrencyIn, maxHops) { - var e_1, _a - if (currentPath === void 0) { - currentPath = [] - } - if (allPaths === void 0) { - allPaths = [] - } - if (startCurrencyIn === void 0) { - startCurrencyIn = currencyIn - } - if (maxHops === void 0) { - maxHops = 2 - } - var tokenIn = currencyIn === null || currencyIn === void 0 ? void 0 : currencyIn.wrapped - var tokenOut = currencyOut === null || currencyOut === void 0 ? void 0 : currencyOut.wrapped - if (!tokenIn || !tokenOut) throw new Error('Missing tokenIn/tokenOut') - var _loop_1 = function (pool) { - if ( - !pool.involvesToken(tokenIn) || - currentPath.find(function (pathPool) { - return poolEquals(pool, pathPool) - }) - ) - return 'continue' - var outputToken = pool.token0.equals(tokenIn) ? pool.token1 : pool.token0 - if (outputToken.equals(tokenOut)) { - allPaths.push( - new Route$1( - __spreadArray(__spreadArray([], __read(currentPath), false), [pool], false), - startCurrencyIn, - currencyOut - ) - ) - } else if (maxHops > 1) { - computeAllRoutes( - outputToken, - currencyOut, - pools, - chainId, - __spreadArray(__spreadArray([], __read(currentPath), false), [pool], false), - allPaths, - startCurrencyIn, - maxHops - 1 - ) - } - } - try { - for (var pools_1 = __values(pools), pools_1_1 = pools_1.next(); !pools_1_1.done; pools_1_1 = pools_1.next()) { - var pool = pools_1_1.value - _loop_1(pool) - } - } catch (e_1_1) { - e_1 = { error: e_1_1 } - } finally { - try { - if (pools_1_1 && !pools_1_1.done && (_a = pools_1.return)) _a.call(pools_1) - } finally { - if (e_1) throw e_1.error - } - } - return allPaths -} -/** - * Returns all the routes from an input currency to an output currency - * @param currencyIn the input currency - * @param currencyOut the output currency - */ -function useAllV3Routes(currencyIn, currencyOut) { - var chainId = useActiveWeb3React().chainId - var _a = useV3SwapPools(currencyIn, currencyOut), - pools = _a.pools, - poolsLoading = _a.loading - return useMemo( - function () { - if (poolsLoading || !chainId || !pools || !currencyIn || !currencyOut) return { loading: true, routes: [] } - var routes = computeAllRoutes(currencyIn, currencyOut, pools, chainId, [], [], currencyIn, 2) - return { loading: false, routes } - }, - [chainId, currencyIn, currencyOut, pools, poolsLoading] - ) +/** + * Returns the best v2+v3 trade for a desired swap. + * @param tradeType whether the swap is an exact in/out + * @param amountSpecified the exact amount to swap in/out + * @param otherCurrency the desired output/payment currency + */ +function useBestTrade(tradeType, amountSpecified, otherCurrency) { + var autoRouterSupported = useAutoRouterSupported(); + var isWindowVisible = useIsWindowVisible(); + var _a = __read(useDebounce(useMemo(function () { return [amountSpecified, otherCurrency]; }, [amountSpecified, otherCurrency]), 200), 2), debouncedAmount = _a[0], debouncedOtherCurrency = _a[1]; + var routingAPITrade = useRoutingAPITrade(tradeType, autoRouterSupported && isWindowVisible ? debouncedAmount : undefined, debouncedOtherCurrency); + var isLoading = amountSpecified !== undefined && debouncedAmount === undefined; + // consider trade debouncing when inputs/outputs do not match + var debouncing = routingAPITrade.trade && + amountSpecified && + (tradeType === TradeType.EXACT_INPUT + ? !routingAPITrade.trade.inputAmount.equalTo(amountSpecified) || + !amountSpecified.currency.equals(routingAPITrade.trade.inputAmount.currency) || + !(debouncedOtherCurrency === null || debouncedOtherCurrency === void 0 ? void 0 : debouncedOtherCurrency.equals(routingAPITrade.trade.outputAmount.currency)) + : !routingAPITrade.trade.outputAmount.equalTo(amountSpecified) || + !amountSpecified.currency.equals(routingAPITrade.trade.outputAmount.currency) || + !(debouncedOtherCurrency === null || debouncedOtherCurrency === void 0 ? void 0 : debouncedOtherCurrency.equals(routingAPITrade.trade.inputAmount.currency))); + var useFallback = !autoRouterSupported || (!debouncing && routingAPITrade.state === TradeState.NO_ROUTE_FOUND); + // only use client side router if routing api trade failed or is not supported + var bestV3Trade = useClientSideV3Trade(tradeType, useFallback ? debouncedAmount : undefined, useFallback ? debouncedOtherCurrency : undefined); + // only return gas estimate from api if routing api trade is used + return useMemo(function () { return (__assign(__assign(__assign({}, (useFallback ? bestV3Trade : routingAPITrade)), (debouncing ? { state: TradeState.SYNCING } : {})), (isLoading ? { state: TradeState.LOADING } : {}))); }, [bestV3Trade, debouncing, isLoading, routingAPITrade, useFallback]); +} + +// gets the current timestamp from the blockchain +function useCurrentBlockTimestamp() { + var _a, _b; + var multicall = useInterfaceMulticall(); + return (_b = (_a = useSingleCallResult(multicall, 'getCurrentBlockTimestamp')) === null || _a === void 0 ? void 0 : _a.result) === null || _b === void 0 ? void 0 : _b[0]; } -var _a$7 -var QUOTE_GAS_OVERRIDES = - ((_a$7 = {}), - (_a$7[SupportedChainId.ARBITRUM_ONE] = 25000000), - (_a$7[SupportedChainId.ARBITRUM_RINKEBY] = 25000000), - _a$7) -var DEFAULT_GAS_QUOTE = 2000000 -/** - * Returns the best v3 trade for a desired swap - * @param tradeType whether the swap is an exact in/out - * @param amountSpecified the exact amount to swap in/out - * @param otherCurrency the desired output/payment currency - */ -function useClientSideV3Trade(tradeType, amountSpecified, otherCurrency) { - var _a - var _b = __read( - useMemo( - function () { - return tradeType === TradeType.EXACT_INPUT - ? [ - amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, - otherCurrency, - ] - : [ - otherCurrency, - amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, - ] - }, - [tradeType, amountSpecified, otherCurrency] - ), - 2 - ), - currencyIn = _b[0], - currencyOut = _b[1] - var _c = useAllV3Routes(currencyIn, currencyOut), - routes = _c.routes, - routesLoading = _c.loading - var quoter = useV3Quoter() - var chainId = useActiveWeb3React().chainId - var quotesResults = useSingleContractWithCallData( - quoter, - amountSpecified - ? routes.map(function (route) { - return SwapQuoter.quoteCallParameters(route, amountSpecified, tradeType).calldata - }) - : [], - { - gasRequired: chainId - ? (_a = QUOTE_GAS_OVERRIDES[chainId]) !== null && _a !== void 0 - ? _a - : DEFAULT_GAS_QUOTE - : undefined, - } - ) - return useMemo( - function () { - if ( - !amountSpecified || - !currencyIn || - !currencyOut || - quotesResults.some(function (_a) { - var valid = _a.valid - return !valid - }) || - // skip when tokens are the same - (tradeType === TradeType.EXACT_INPUT - ? amountSpecified.currency.equals(currencyOut) - : amountSpecified.currency.equals(currencyIn)) - ) { - return { - state: TradeState.INVALID, - trade: undefined, - } - } - if ( - routesLoading || - quotesResults.some(function (_a) { - var loading = _a.loading - return loading - }) - ) { - return { - state: TradeState.LOADING, - trade: undefined, - } - } - var _a = quotesResults.reduce( - function (currentBest, _a, i) { - var result = _a.result - if (!result) return currentBest - // overwrite the current best if it's not defined or if this route is better - if (tradeType === TradeType.EXACT_INPUT) { - var amountOut_1 = CurrencyAmount.fromRawAmount(currencyOut, result.amountOut.toString()) - if ( - currentBest.amountOut === null || - JSBI.lessThan(currentBest.amountOut.quotient, amountOut_1.quotient) - ) { - return { - bestRoute: routes[i], - amountIn: amountSpecified, - amountOut: amountOut_1, - } - } - } else { - var amountIn_1 = CurrencyAmount.fromRawAmount(currencyIn, result.amountIn.toString()) - if ( - currentBest.amountIn === null || - JSBI.greaterThan(currentBest.amountIn.quotient, amountIn_1.quotient) - ) { - return { - bestRoute: routes[i], - amountIn: amountIn_1, - amountOut: amountSpecified, - } - } - } - return currentBest - }, - { - bestRoute: null, - amountIn: null, - amountOut: null, - } - ), - bestRoute = _a.bestRoute, - amountIn = _a.amountIn, - amountOut = _a.amountOut - if (!bestRoute || !amountIn || !amountOut) { - return { - state: TradeState.NO_ROUTE_FOUND, - trade: undefined, - } - } - return { - state: TradeState.VALID, - trade: new InterfaceTrade({ - v2Routes: [], - v3Routes: [ - { - routev3: bestRoute, - inputAmount: amountIn, - outputAmount: amountOut, - }, - ], - tradeType, - }), - } - }, - [amountSpecified, currencyIn, currencyOut, quotesResults, routes, routesLoading, tradeType] - ) -} +new Interface(abi$6); +({ + 1: [ + { + tokens: [WRAPPED_NATIVE_CURRENCY[1], DAI], + stakingRewardAddress: '0xa1484C3aa22a66C62b77E0AE78E15258bd0cB711', + }, + { + tokens: [WRAPPED_NATIVE_CURRENCY[1], USDC], + stakingRewardAddress: '0x7FBa4B8Dc5E7616e59622806932DBea72537A56b', + }, + { + tokens: [WRAPPED_NATIVE_CURRENCY[1], USDT], + stakingRewardAddress: '0x6C3e4cb2E96B01F4b866965A91ed4437839A121a', + }, + { + tokens: [WRAPPED_NATIVE_CURRENCY[1], WBTC], + stakingRewardAddress: '0xCA35e32e7926b96A9988f61d510E038108d8068e', + }, + ], +}); -var _a$6 -// Stablecoin amounts used when calculating spot price for a given currency. -// The amount is large enough to filter low liquidity pairs. -var STABLECOIN_AMOUNT_OUT = - ((_a$6 = {}), - (_a$6[SupportedChainId.MAINNET] = CurrencyAmount.fromRawAmount(USDC, 100000000000)), - (_a$6[SupportedChainId.ARBITRUM_ONE] = CurrencyAmount.fromRawAmount(USDC_ARBITRUM, 10000000000)), - (_a$6[SupportedChainId.OPTIMISM] = CurrencyAmount.fromRawAmount(DAI_OPTIMISM, 1e22)), - (_a$6[SupportedChainId.POLYGON] = CurrencyAmount.fromRawAmount(USDC_POLYGON, 10000000000)), - _a$6) -/** - * Returns the price in USDC of the input currency - * @param currency currency to compute the USDC price of - */ -function useUSDCPrice(currency) { - var chainId = currency === null || currency === void 0 ? void 0 : currency.chainId - var amountOut = chainId ? STABLECOIN_AMOUNT_OUT[chainId] : undefined - var stablecoin = amountOut === null || amountOut === void 0 ? void 0 : amountOut.currency - // TODO(#2808): remove dependency on useBestV2Trade - var v2USDCTrade = useBestV2Trade(TradeType.EXACT_OUTPUT, amountOut, currency, { - maxHops: 2, - }) - var v3USDCTrade = useClientSideV3Trade(TradeType.EXACT_OUTPUT, amountOut, currency) - return useMemo( - function () { - if (!currency || !stablecoin) { - return undefined - } - // handle usdc - if (currency === null || currency === void 0 ? void 0 : currency.wrapped.equals(stablecoin)) { - return new Price(stablecoin, stablecoin, '1', '1') - } - // use v2 price if available, v3 as fallback - if (v2USDCTrade) { - var _a = v2USDCTrade.route.midPrice, - numerator = _a.numerator, - denominator = _a.denominator - return new Price(currency, stablecoin, denominator, numerator) - } else if (v3USDCTrade.trade) { - var _b = v3USDCTrade.trade.routes[0].midPrice, - numerator = _b.numerator, - denominator = _b.denominator - return new Price(currency, stablecoin, denominator, numerator) - } - return undefined - }, - [currency, stablecoin, v2USDCTrade, v3USDCTrade.trade] - ) -} -function useUSDCValue(currencyAmount) { - var price = useUSDCPrice(currencyAmount === null || currencyAmount === void 0 ? void 0 : currencyAmount.currency) - return useMemo( - function () { - if (!price || !currencyAmount) return null - try { - return price.quote(currencyAmount) - } catch (error) { - return null - } - }, - [currencyAmount, price] - ) -} -/** - * - * @param fiatValue string representation of a USD amount - * @returns CurrencyAmount where currency is stablecoin on active chain - */ -function useStablecoinAmountFromFiatValue(fiatValue) { - var _a - var chainId = useActiveWeb3React().chainId - var stablecoin = chainId - ? (_a = STABLECOIN_AMOUNT_OUT[chainId]) === null || _a === void 0 - ? void 0 - : _a.currency - : undefined - if (fiatValue === null || fiatValue === undefined || !chainId || !stablecoin) { - return undefined - } - // trim for decimal precision when parsing - var parsedForDecimals = parseFloat(fiatValue).toFixed(stablecoin.decimals).toString() - try { - // parse USD string into CurrencyAmount based on stablecoin decimals - return tryParseCurrencyAmount(parsedForDecimals, stablecoin) - } catch (error) { - return undefined - } +// mimics useAllBalances +function useAllTokenBalances() { + var account = useActiveWeb3React().account; + var allTokens = useAllTokens(); + var allTokensArray = useMemo(function () { return Object.values(allTokens !== null && allTokens !== void 0 ? allTokens : {}); }, [allTokens]); + var balances = useTokenBalances(account !== null && account !== void 0 ? account : undefined, allTokensArray); + return balances !== null && balances !== void 0 ? balances : {}; } -var V3_SWAP_DEFAULT_SLIPPAGE = new Percent(50, 10000) // .50% -var ONE_TENTHS_PERCENT = new Percent(10, 10000) // .10% -/** - * Return a guess of the gas cost used in computing slippage tolerance for a given trade - * @param trade the trade for which to _guess_ the amount of gas it would cost to execute - */ -function guesstimateGas(trade) { - if (!!trade) { - return ( - 100000 + - trade.swaps.reduce(function (memo, swap) { - return swap.route.pools.length + memo - }, 0) * - 30000 - ) - } - return undefined -} -var MIN_AUTO_SLIPPAGE_TOLERANCE = new Percent(5, 1000) // 0.5% -var MAX_AUTO_SLIPPAGE_TOLERANCE = new Percent(25, 100) // 25% -/** - * Returns slippage tolerance based on values from current trade, gas estimates from api, and active network. - */ -function useAutoSlippageTolerance(trade) { - var chainId = useActiveWeb3React().chainId - var onL2 = chainId && L2_CHAIN_IDS.includes(chainId) - var outputDollarValue = useUSDCValue(trade === null || trade === void 0 ? void 0 : trade.outputAmount) - var nativeGasPrice = useGasPrice() - var gasEstimate = guesstimateGas(trade) - var nativeCurrency = useNativeCurrency() - var nativeCurrencyPrice = useUSDCPrice( - nativeCurrency !== null && nativeCurrency !== void 0 ? nativeCurrency : undefined - ) - return useMemo( - function () { - if (!trade || onL2) return ONE_TENTHS_PERCENT - var nativeGasCost = - nativeGasPrice && typeof gasEstimate === 'number' - ? JSBI.multiply(nativeGasPrice, JSBI.BigInt(gasEstimate)) - : undefined - var dollarGasCost = - nativeCurrency && nativeGasCost && nativeCurrencyPrice - ? nativeCurrencyPrice.quote(CurrencyAmount.fromRawAmount(nativeCurrency, nativeGasCost)) - : undefined - // if valid estimate from api and using api trade, use gas estimate from api - // NOTE - dont use gas estimate for L2s yet - need to verify accuracy - // if not, use local heuristic - var dollarCostToUse = - chainId && - SUPPORTED_GAS_ESTIMATE_CHAIN_IDS.includes(chainId) && - (trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) - ? trade.gasUseEstimateUSD - : dollarGasCost - if (outputDollarValue && dollarCostToUse) { - // the rationale is that a user will not want their trade to fail for a loss due to slippage that is less than - // the cost of the gas of the failed transaction - var fraction = dollarCostToUse.asFraction.divide(outputDollarValue.asFraction) - var result = new Percent(fraction.numerator, fraction.denominator) - if (result.greaterThan(MAX_AUTO_SLIPPAGE_TOLERANCE)) return MAX_AUTO_SLIPPAGE_TOLERANCE - if (result.lessThan(MIN_AUTO_SLIPPAGE_TOLERANCE)) return MIN_AUTO_SLIPPAGE_TOLERANCE - return result - } - return V3_SWAP_DEFAULT_SLIPPAGE - }, - [trade, onL2, nativeGasPrice, gasEstimate, nativeCurrency, nativeCurrencyPrice, chainId, outputDollarValue] - ) +function useSwapState() { + return useAppSelector(function (state) { return state.swap; }); +} +function useSwapActionHandlers() { + var dispatch = useAppDispatch(); + var onCurrencySelection = useCallback(function (field, currency) { + dispatch(selectCurrency({ + field: field, + currencyId: currency.isToken ? currency.address : currency.isNative ? 'ETH' : '', + })); + }, [dispatch]); + var onSwitchTokens = useCallback(function () { + dispatch(switchCurrencies()); + }, [dispatch]); + var onUserInput = useCallback(function (field, typedValue) { + dispatch(typeInput({ field: field, typedValue: typedValue })); + }, [dispatch]); + var onChangeRecipient = useCallback(function (recipient) { + dispatch(setRecipient({ recipient: recipient })); + }, [dispatch]); + return { + onSwitchTokens: onSwitchTokens, + onCurrencySelection: onCurrencySelection, + onUserInput: onUserInput, + onChangeRecipient: onChangeRecipient, + }; +} +var BAD_RECIPIENT_ADDRESSES = { + '0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f': true, + '0xf164fC0Ec4E93095b804a4795bBe1e041497b92a': true, + '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D': true, // v2 router 02 +}; +// from the current swap inputs, compute the best trade and return it. +function useDerivedSwapInfo() { + var _a, _b; + var account = useActiveWeb3React().account; + var _c = useSwapState(), independentField = _c.independentField, typedValue = _c.typedValue, _d = Field.INPUT, inputCurrencyId = _c[_d].currencyId, _e = Field.OUTPUT, outputCurrencyId = _c[_e].currencyId, recipient = _c.recipient; + var inputCurrency = useCurrency(inputCurrencyId); + var outputCurrency = useCurrency(outputCurrencyId); + var recipientLookup = useENS(recipient !== null && recipient !== void 0 ? recipient : undefined); + var to = (_a = (recipient === null ? account : recipientLookup.address)) !== null && _a !== void 0 ? _a : null; + var relevantTokenBalances = useCurrencyBalances(account !== null && account !== void 0 ? account : undefined, useMemo(function () { return [inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : undefined, outputCurrency !== null && outputCurrency !== void 0 ? outputCurrency : undefined]; }, [inputCurrency, outputCurrency])); + var isExactIn = independentField === Field.INPUT; + var parsedAmount = useMemo(function () { var _a; return tryParseCurrencyAmount(typedValue, (_a = (isExactIn ? inputCurrency : outputCurrency)) !== null && _a !== void 0 ? _a : undefined); }, [inputCurrency, isExactIn, outputCurrency, typedValue]); + var trade = useBestTrade(isExactIn ? TradeType.EXACT_INPUT : TradeType.EXACT_OUTPUT, parsedAmount, (_b = (isExactIn ? outputCurrency : inputCurrency)) !== null && _b !== void 0 ? _b : undefined); + var currencyBalances = useMemo(function () { + var _a; + return (_a = {}, + _a[Field.INPUT] = relevantTokenBalances[0], + _a[Field.OUTPUT] = relevantTokenBalances[1], + _a); + }, [relevantTokenBalances]); + var currencies = useMemo(function () { + var _a; + return (_a = {}, + _a[Field.INPUT] = inputCurrency, + _a[Field.OUTPUT] = outputCurrency, + _a); + }, [inputCurrency, outputCurrency]); + // allowed slippage is either auto slippage, or custom user defined slippage if auto slippage disabled + var autoSlippageTolerance = useAutoSlippageTolerance(trade.trade); + var allowedSlippage = useUserSlippageToleranceWithDefault(autoSlippageTolerance); + var inputError = useMemo(function () { + var _a; + var inputError; + if (!account) { + inputError = jsx(Trans, { children: "Connect Wallet" }, void 0); + } + if (!currencies[Field.INPUT] || !currencies[Field.OUTPUT]) { + inputError = inputError !== null && inputError !== void 0 ? inputError : jsx(Trans, { children: "Select a token" }, void 0); + } + if (!parsedAmount) { + inputError = inputError !== null && inputError !== void 0 ? inputError : jsx(Trans, { children: "Enter an amount" }, void 0); + } + var formattedTo = isAddress(to); + if (!to || !formattedTo) { + inputError = inputError !== null && inputError !== void 0 ? inputError : jsx(Trans, { children: "Enter a recipient" }, void 0); + } + else { + if (BAD_RECIPIENT_ADDRESSES[formattedTo]) { + inputError = inputError !== null && inputError !== void 0 ? inputError : jsx(Trans, { children: "Invalid recipient" }, void 0); + } + } + // compare input balance to max input based on version + var _b = __read([currencyBalances[Field.INPUT], (_a = trade.trade) === null || _a === void 0 ? void 0 : _a.maximumAmountIn(allowedSlippage)], 2), balanceIn = _b[0], amountIn = _b[1]; + if (balanceIn && amountIn && balanceIn.lessThan(amountIn)) { + inputError = jsxs(Trans, { children: ["Insufficient ", amountIn.currency.symbol, " balance"] }, void 0); + } + return inputError; + }, [account, allowedSlippage, currencies, currencyBalances, parsedAmount, to, trade.trade]); + return useMemo(function () { return ({ + currencies: currencies, + currencyBalances: currencyBalances, + parsedAmount: parsedAmount, + inputError: inputError, + trade: trade, + allowedSlippage: allowedSlippage, + }); }, [allowedSlippage, currencies, currencyBalances, inputError, parsedAmount, trade]); +} +function parseCurrencyFromURLParameter(urlParam) { + if (typeof urlParam === 'string') { + var valid = isAddress(urlParam); + if (valid) + return valid; + if (urlParam.toUpperCase() === 'ETH') + return 'ETH'; + } + return ''; +} +function parseTokenAmountURLParameter(urlParam) { + return typeof urlParam === 'string' && !isNaN(parseFloat(urlParam)) ? urlParam : ''; +} +function parseIndependentFieldURLParameter(urlParam) { + return typeof urlParam === 'string' && urlParam.toLowerCase() === 'output' ? Field.OUTPUT : Field.INPUT; +} +var ENS_NAME_REGEX = /^[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)?$/; +var ADDRESS_REGEX = /^0x[a-fA-F0-9]{40}$/; +function validatedRecipient(recipient) { + if (typeof recipient !== 'string') + return null; + var address = isAddress(recipient); + if (address) + return address; + if (ENS_NAME_REGEX.test(recipient)) + return recipient; + if (ADDRESS_REGEX.test(recipient)) + return recipient; + return null; +} +function queryParametersToSwapState(parsedQs) { + var _a; + var inputCurrency = parseCurrencyFromURLParameter(parsedQs.inputCurrency); + var outputCurrency = parseCurrencyFromURLParameter(parsedQs.outputCurrency); + if (inputCurrency === '' && outputCurrency === '') { + // default to ETH input + inputCurrency = 'ETH'; + } + else if (inputCurrency === outputCurrency) { + // clear output if identical + outputCurrency = ''; + } + var recipient = validatedRecipient(parsedQs.recipient); + return _a = {}, + _a[Field.INPUT] = { + currencyId: inputCurrency === '' ? null : inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : null, + }, + _a[Field.OUTPUT] = { + currencyId: outputCurrency === '' ? null : outputCurrency !== null && outputCurrency !== void 0 ? outputCurrency : null, + }, + _a.typedValue = parseTokenAmountURLParameter(parsedQs.exactAmount), + _a.independentField = parseIndependentFieldURLParameter(parsedQs.exactField), + _a.recipient = recipient, + _a; +} +// updates the swap state to use the defaults for a given network +function useDefaultsFromURLSearch() { + var chainId = useActiveWeb3React().chainId; + var dispatch = useAppDispatch(); + var parsedQs = useParsedQueryString(); + var _a = __read(useState(), 2), result = _a[0], setResult = _a[1]; + useEffect(function () { + var _a, _b; + if (!chainId) + return; + var parsed = queryParametersToSwapState(parsedQs); + var inputCurrencyId = (_a = parsed[Field.INPUT].currencyId) !== null && _a !== void 0 ? _a : undefined; + var outputCurrencyId = (_b = parsed[Field.OUTPUT].currencyId) !== null && _b !== void 0 ? _b : undefined; + dispatch(replaceSwapState({ + typedValue: parsed.typedValue, + field: parsed.independentField, + inputCurrencyId: inputCurrencyId, + outputCurrencyId: outputCurrencyId, + recipient: parsed.recipient, + })); + setResult({ inputCurrencyId: inputCurrencyId, outputCurrencyId: outputCurrencyId }); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [dispatch, chainId]); + return result; } -/** - * Transforms a Routing API quote into an array of routes that can be used to create - * a `Trade`. - */ -function computeRoutes(currencyIn, currencyOut, tradeType, quoteResult) { - if (!quoteResult || !quoteResult.route || !currencyIn || !currencyOut) return undefined - if (quoteResult.route.length === 0) return [] - var parsedTokenIn = parseToken(quoteResult.route[0][0].tokenIn) - var parsedTokenOut = parseToken(quoteResult.route[0][quoteResult.route[0].length - 1].tokenOut) - if (parsedTokenIn.address !== currencyIn.wrapped.address) return undefined - if (parsedTokenOut.address !== currencyOut.wrapped.address) return undefined - var parsedCurrencyIn = currencyIn.isNative ? nativeOnChain(currencyIn.chainId) : parsedTokenIn - var parsedCurrencyOut = currencyOut.isNative ? nativeOnChain(currencyOut.chainId) : parsedTokenOut - try { - return quoteResult.route.map(function (route) { - if (route.length === 0) { - throw new Error('Expected route to have at least one pair or pool') - } - var rawAmountIn = route[0].amountIn - var rawAmountOut = route[route.length - 1].amountOut - if (!rawAmountIn || !rawAmountOut) { - throw new Error('Expected both amountIn and amountOut to be present') - } - return { - routev3: isV3Route(route) ? new Route$1(route.map(parsePool), parsedCurrencyIn, parsedCurrencyOut) : null, - routev2: !isV3Route(route) ? new Route$2(route.map(parsePair), parsedCurrencyIn, parsedCurrencyOut) : null, - inputAmount: CurrencyAmount.fromRawAmount(parsedCurrencyIn, rawAmountIn), - outputAmount: CurrencyAmount.fromRawAmount(parsedCurrencyOut, rawAmountOut), - } - }) - } catch (e) { - // `Route` constructor may throw if inputs/outputs are temporarily out of sync - // (RTK-Query always returns the latest data which may not be the right inputs/outputs) - // This is not fatal and will fix itself in future render cycles - console.error(e) - return undefined - } -} -function transformRoutesToTrade(route, tradeType, gasUseEstimateUSD) { - var _a, _b - return new InterfaceTrade({ - v2Routes: - (_a = - route === null || route === void 0 - ? void 0 - : route - .filter(function (r) { - return r.routev2 !== null - }) - .map(function (_a) { - var routev2 = _a.routev2, - inputAmount = _a.inputAmount, - outputAmount = _a.outputAmount - return { routev2, inputAmount, outputAmount } - })) !== null && _a !== void 0 - ? _a - : [], - v3Routes: - (_b = - route === null || route === void 0 - ? void 0 - : route - .filter(function (r) { - return r.routev3 !== null - }) - .map(function (_a) { - var routev3 = _a.routev3, - inputAmount = _a.inputAmount, - outputAmount = _a.outputAmount - return { routev3, inputAmount, outputAmount } - })) !== null && _b !== void 0 - ? _b - : [], - tradeType, - gasUseEstimateUSD, - }) -} -var parseToken = function (_a) { - var address = _a.address, - chainId = _a.chainId, - decimals = _a.decimals, - symbol = _a.symbol - return new Token(chainId, address, parseInt(decimals.toString()), symbol) -} -var parsePool = function (_a) { - var fee = _a.fee, - sqrtRatioX96 = _a.sqrtRatioX96, - liquidity = _a.liquidity, - tickCurrent = _a.tickCurrent, - tokenIn = _a.tokenIn, - tokenOut = _a.tokenOut - return new Pool$1( - parseToken(tokenIn), - parseToken(tokenOut), - parseInt(fee), - sqrtRatioX96, - liquidity, - parseInt(tickCurrent) - ) -} -var parsePair = function (_a) { - var reserve0 = _a.reserve0, - reserve1 = _a.reserve1 - return new Pair( - CurrencyAmount.fromRawAmount(parseToken(reserve0.token), reserve0.quotient), - CurrencyAmount.fromRawAmount(parseToken(reserve1.token), reserve1.quotient) - ) -} -function isV3Route(route) { - return route[0].type === 'v3-pool' -} +var initialState$2 = queryParametersToSwapState(parsedQueryString()); +var swap = createReducer(initialState$2, function (builder) { + return builder + .addCase(replaceSwapState, function (state, _a) { + var _b; + var _c = _a.payload, typedValue = _c.typedValue, recipient = _c.recipient, field = _c.field, inputCurrencyId = _c.inputCurrencyId, outputCurrencyId = _c.outputCurrencyId; + return _b = {}, + _b[Field.INPUT] = { + currencyId: inputCurrencyId !== null && inputCurrencyId !== void 0 ? inputCurrencyId : null, + }, + _b[Field.OUTPUT] = { + currencyId: outputCurrencyId !== null && outputCurrencyId !== void 0 ? outputCurrencyId : null, + }, + _b.independentField = field, + _b.typedValue = typedValue, + _b.recipient = recipient, + _b; + }) + .addCase(selectCurrency, function (state, _a) { + var _b, _c; + var _d = _a.payload, currencyId = _d.currencyId, field = _d.field; + var otherField = field === Field.INPUT ? Field.OUTPUT : Field.INPUT; + if (currencyId === state[otherField].currencyId) { + // the case where we have to swap the order + return __assign(__assign({}, state), (_b = { independentField: state.independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT }, _b[field] = { currencyId: currencyId }, _b[otherField] = { currencyId: state[field].currencyId }, _b)); + } + else { + // the normal case + return __assign(__assign({}, state), (_c = {}, _c[field] = { currencyId: currencyId }, _c)); + } + }) + .addCase(switchCurrencies, function (state) { + var _a; + return __assign(__assign({}, state), (_a = { independentField: state.independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT }, _a[Field.INPUT] = { currencyId: state[Field.OUTPUT].currencyId }, _a[Field.OUTPUT] = { currencyId: state[Field.INPUT].currencyId }, _a)); + }) + .addCase(typeInput, function (state, _a) { + var _b = _a.payload, field = _b.field, typedValue = _b.typedValue; + return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); + }) + .addCase(setRecipient, function (state, _a) { + var recipient = _a.payload.recipient; + state.recipient = recipient; + }); +}); -function useFreshData(data, dataBlockNumber, maxBlockAge) { - if (maxBlockAge === void 0) { - maxBlockAge = 10 - } - var localBlockNumber = useBlockNumber() - if (!localBlockNumber) return undefined - if (localBlockNumber - dataBlockNumber > maxBlockAge) { - return undefined - } - return data -} -/** - * Returns query arguments for the Routing API query or undefined if the - * query should be skipped. - */ -function useRoutingAPIArguments(_a) { - var tokenIn = _a.tokenIn, - tokenOut = _a.tokenOut, - amount = _a.amount, - tradeType = _a.tradeType - var _b = __read(useClientSideRouter(), 1), - clientSideRouter = _b[0] - return useMemo( - function () { - return !tokenIn || !tokenOut || !amount || tokenIn.equals(tokenOut) - ? undefined - : { - amount: amount.quotient.toString(), - tokenInAddress: tokenIn.wrapped.address, - tokenInChainId: tokenIn.wrapped.chainId, - tokenInDecimals: tokenIn.wrapped.decimals, - tokenInSymbol: tokenIn.wrapped.symbol, - tokenOutAddress: tokenOut.wrapped.address, - tokenOutChainId: tokenOut.wrapped.chainId, - tokenOutDecimals: tokenOut.wrapped.decimals, - tokenOutSymbol: tokenOut.wrapped.symbol, - useClientSideRouter: clientSideRouter, - type: tradeType === TradeType.EXACT_INPUT ? 'exactIn' : 'exactOut', - } - }, - [amount, clientSideRouter, tokenIn, tokenOut, tradeType] - ) -} -/** - * Returns the best trade by invoking the routing api or the smart order router on the client - * @param tradeType whether the swap is an exact in/out - * @param amountSpecified the exact amount to swap in/out - * @param otherCurrency the desired output/payment currency - */ -function useRoutingAPITrade(tradeType, amountSpecified, otherCurrency) { - var _a - var _b = __read( - useMemo( - function () { - return tradeType === TradeType.EXACT_INPUT - ? [ - amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, - otherCurrency, - ] - : [ - otherCurrency, - amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, - ] - }, - [amountSpecified, otherCurrency, tradeType] - ), - 2 - ), - currencyIn = _b[0], - currencyOut = _b[1] - var queryArgs = useRoutingAPIArguments({ - tokenIn: currencyIn, - tokenOut: currencyOut, - amount: amountSpecified, - tradeType, - }) - var _c = useGetQuoteQuery(queryArgs !== null && queryArgs !== void 0 ? queryArgs : skipToken, { - pollingInterval: ms(templateObject_1$1a || (templateObject_1$1a = __makeTemplateObject(['15s'], ['15s']))), - refetchOnFocus: true, - }), - isLoading = _c.isLoading, - isError = _c.isError, - data = _c.data - var quoteResult = useFreshData(data, Number(data === null || data === void 0 ? void 0 : data.blockNumber) || 0) - var route = useMemo( - function () { - return computeRoutes(currencyIn, currencyOut, tradeType, quoteResult) - }, - [currencyIn, currencyOut, quoteResult, tradeType] - ) - // get USD gas cost of trade in active chains stablecoin amount - var gasUseEstimateUSD = - (_a = useStablecoinAmountFromFiatValue( - quoteResult === null || quoteResult === void 0 ? void 0 : quoteResult.gasUseEstimateUSD - )) !== null && _a !== void 0 - ? _a - : null - return useMemo( - function () { - if (!currencyIn || !currencyOut) { - return { - state: TradeState.INVALID, - trade: undefined, - } - } - if (isLoading && !quoteResult) { - // only on first hook render - return { - state: TradeState.LOADING, - trade: undefined, - } - } - var otherAmount = - tradeType === TradeType.EXACT_INPUT - ? currencyOut && quoteResult - ? CurrencyAmount.fromRawAmount(currencyOut, quoteResult.quote) - : undefined - : currencyIn && quoteResult - ? CurrencyAmount.fromRawAmount(currencyIn, quoteResult.quote) - : undefined - if (isError || !otherAmount || !route || route.length === 0 || !queryArgs) { - return { - state: TradeState.NO_ROUTE_FOUND, - trade: undefined, - } - } - try { - var trade = transformRoutesToTrade(route, tradeType, gasUseEstimateUSD) - return { - // always return VALID regardless of isFetching status - state: TradeState.VALID, - trade, - } - } catch (e) { - console.debug('transformRoutesToTrade failed: ', e) - return { state: TradeState.INVALID, trade: undefined } - } - }, - [currencyIn, currencyOut, isLoading, quoteResult, tradeType, isError, route, queryArgs, gasUseEstimateUSD] - ) -} -var templateObject_1$1a +var now = function () { return new Date().getTime(); }; +var initialState$1 = {}; +var transactions = createReducer(initialState$1, function (builder) { + return builder + .addCase(updateVersion, function (transactions) { + // in case there are any transactions in the store with the old format, remove them + Object.keys(transactions).forEach(function (chainId) { + var chainTransactions = transactions[chainId]; + Object.keys(chainTransactions).forEach(function (hash) { + if (!('info' in chainTransactions[hash])) { + // clear old transactions that don't have the right format + delete chainTransactions[hash]; + } + }); + }); + }) + .addCase(addTransaction, function (transactions, _a) { + var _b, _c; + var _d = _a.payload, chainId = _d.chainId, from = _d.from, hash = _d.hash, info = _d.info; + if ((_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash]) { + throw Error('Attempted to add existing transaction.'); + } + var txs = (_c = transactions[chainId]) !== null && _c !== void 0 ? _c : {}; + txs[hash] = { hash: hash, info: info, from: from, addedTime: now() }; + transactions[chainId] = txs; + }) + .addCase(clearAllTransactions, function (transactions, _a) { + var chainId = _a.payload.chainId; + if (!transactions[chainId]) + return; + transactions[chainId] = {}; + }) + .addCase(checkedTransaction, function (transactions, _a) { + var _b; + var _c = _a.payload, chainId = _c.chainId, hash = _c.hash, blockNumber = _c.blockNumber; + var tx = (_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash]; + if (!tx) { + return; + } + if (!tx.lastCheckedBlockNumber) { + tx.lastCheckedBlockNumber = blockNumber; + } + else { + tx.lastCheckedBlockNumber = Math.max(blockNumber, tx.lastCheckedBlockNumber); + } + }) + .addCase(finalizeTransaction, function (transactions, _a) { + var _b; + var _c = _a.payload, hash = _c.hash, chainId = _c.chainId, receipt = _c.receipt; + var tx = (_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash]; + if (!tx) { + return; + } + tx.receipt = receipt; + tx.confirmedTime = now(); + }); +}); -var AUTO_ROUTER_SUPPORTED_CHAINS = Object.values(ChainId) +var currentTimestamp = function () { return new Date().getTime(); }; +function pairKey(token0Address, token1Address) { + return token0Address + ";" + token1Address; +} +var initialState = { + matchesDarkMode: false, + userDarkMode: null, + userExpertMode: false, + userLocale: null, + userClientSideRouter: false, + userHideClosedPositions: false, + userSlippageTolerance: 'auto', + userSlippageToleranceHasBeenMigratedToAuto: true, + userDeadline: DEFAULT_DEADLINE_FROM_NOW, + tokens: {}, + pairs: {}, + timestamp: currentTimestamp(), + URLWarningVisible: true, + showSurveyPopup: undefined, +}; +var user = createReducer(initialState, function (builder) { + return builder + .addCase(updateVersion, function (state) { + // slippage isnt being tracked in local storage, reset to default + // noinspection SuspiciousTypeOfGuard + if (typeof state.userSlippageTolerance !== 'number' || + !Number.isInteger(state.userSlippageTolerance) || + state.userSlippageTolerance < 0 || + state.userSlippageTolerance > 5000) { + state.userSlippageTolerance = 'auto'; + } + else { + if (!state.userSlippageToleranceHasBeenMigratedToAuto && + [10, 50, 100].indexOf(state.userSlippageTolerance) !== -1) { + state.userSlippageTolerance = 'auto'; + state.userSlippageToleranceHasBeenMigratedToAuto = true; + } + } + // deadline isnt being tracked in local storage, reset to default + // noinspection SuspiciousTypeOfGuard + if (typeof state.userDeadline !== 'number' || + !Number.isInteger(state.userDeadline) || + state.userDeadline < 60 || + state.userDeadline > 180 * 60) { + state.userDeadline = DEFAULT_DEADLINE_FROM_NOW; + } + state.lastUpdateVersionTimestamp = currentTimestamp(); + }) + .addCase(updateUserDarkMode, function (state, action) { + state.userDarkMode = action.payload.userDarkMode; + state.timestamp = currentTimestamp(); + }) + .addCase(updateMatchesDarkMode, function (state, action) { + state.matchesDarkMode = action.payload.matchesDarkMode; + state.timestamp = currentTimestamp(); + }) + .addCase(updateUserExpertMode, function (state, action) { + state.userExpertMode = action.payload.userExpertMode; + state.timestamp = currentTimestamp(); + }) + .addCase(updateUserLocale, function (state, action) { + state.userLocale = action.payload.userLocale; + state.timestamp = currentTimestamp(); + }) + .addCase(updateUserSlippageTolerance, function (state, action) { + state.userSlippageTolerance = action.payload.userSlippageTolerance; + state.timestamp = currentTimestamp(); + }) + .addCase(updateUserDeadline, function (state, action) { + state.userDeadline = action.payload.userDeadline; + state.timestamp = currentTimestamp(); + }) + .addCase(updateUserClientSideRouter, function (state, action) { + state.userClientSideRouter = action.payload.userClientSideRouter; + }) + .addCase(updateHideClosedPositions, function (state, action) { + state.userHideClosedPositions = action.payload.userHideClosedPositions; + }) + .addCase(updateShowSurveyPopup, function (state, action) { + state.showSurveyPopup = action.payload.showSurveyPopup; + }) + .addCase(addSerializedToken, function (state, _a) { + var serializedToken = _a.payload.serializedToken; + if (!state.tokens) { + state.tokens = {}; + } + state.tokens[serializedToken.chainId] = state.tokens[serializedToken.chainId] || {}; + state.tokens[serializedToken.chainId][serializedToken.address] = serializedToken; + state.timestamp = currentTimestamp(); + }) + .addCase(removeSerializedToken, function (state, _a) { + var _b = _a.payload, address = _b.address, chainId = _b.chainId; + if (!state.tokens) { + state.tokens = {}; + } + state.tokens[chainId] = state.tokens[chainId] || {}; + delete state.tokens[chainId][address]; + state.timestamp = currentTimestamp(); + }) + .addCase(addSerializedPair, function (state, _a) { + var serializedPair = _a.payload.serializedPair; + if (serializedPair.token0.chainId === serializedPair.token1.chainId && + serializedPair.token0.address !== serializedPair.token1.address) { + var chainId = serializedPair.token0.chainId; + state.pairs[chainId] = state.pairs[chainId] || {}; + state.pairs[chainId][pairKey(serializedPair.token0.address, serializedPair.token1.address)] = serializedPair; + } + state.timestamp = currentTimestamp(); + }) + .addCase(removeSerializedPair, function (state, _a) { + var _b = _a.payload, chainId = _b.chainId, tokenAAddress = _b.tokenAAddress, tokenBAddress = _b.tokenBAddress; + if (state.pairs[chainId]) { + // just delete both keys if either exists + delete state.pairs[chainId][pairKey(tokenAAddress, tokenBAddress)]; + delete state.pairs[chainId][pairKey(tokenBAddress, tokenAAddress)]; + } + state.timestamp = currentTimestamp(); + }); +}); -function useAutoRouterSupported() { - var chainId = useActiveWeb3React().chainId - return Boolean(chainId && AUTO_ROUTER_SUPPORTED_CHAINS.includes(chainId)) -} +var _a$5; +var PERSISTED_KEYS = ['user', 'transactions', 'lists']; +var store = configureStore({ + reducer: (_a$5 = { + application: application, + user: user, + transactions: transactions, + swap: swap, + mint: mint, + mintV3: mintV3, + burn: burn, + burnV3: burnV3, + multicall: multicall.reducer, + lists: lists, + logs: logs + }, + _a$5[api$1.reducerPath] = api$1.reducer, + _a$5[routingApi.reducerPath] = routingApi.reducer, + _a$5), + middleware: function (getDefaultMiddleware) { + return getDefaultMiddleware({ thunk: true }) + .concat(api$1.middleware) + .concat(routingApi.middleware) + .concat(save({ states: PERSISTED_KEYS, debounce: 1000 })); + }, + preloadedState: load({ states: PERSISTED_KEYS, disableWarnings: process.env.NODE_ENV === 'test' }), +}); +store.dispatch(updateVersion()); +setupListeners(store.dispatch); -/** - * Returns the best v2+v3 trade for a desired swap. - * @param tradeType whether the swap is an exact in/out - * @param amountSpecified the exact amount to swap in/out - * @param otherCurrency the desired output/payment currency - */ -function useBestTrade(tradeType, amountSpecified, otherCurrency) { - var autoRouterSupported = useAutoRouterSupported() - var isWindowVisible = useIsWindowVisible() - var _a = __read( - useDebounce( - useMemo( - function () { - return [amountSpecified, otherCurrency] - }, - [amountSpecified, otherCurrency] - ), - 200 - ), - 2 - ), - debouncedAmount = _a[0], - debouncedOtherCurrency = _a[1] - var routingAPITrade = useRoutingAPITrade( - tradeType, - autoRouterSupported && isWindowVisible ? debouncedAmount : undefined, - debouncedOtherCurrency - ) - var isLoading = amountSpecified !== undefined && debouncedAmount === undefined - // consider trade debouncing when inputs/outputs do not match - var debouncing = - routingAPITrade.trade && - amountSpecified && - (tradeType === TradeType.EXACT_INPUT - ? !routingAPITrade.trade.inputAmount.equalTo(amountSpecified) || - !amountSpecified.currency.equals(routingAPITrade.trade.inputAmount.currency) || - !(debouncedOtherCurrency === null || debouncedOtherCurrency === void 0 - ? void 0 - : debouncedOtherCurrency.equals(routingAPITrade.trade.outputAmount.currency)) - : !routingAPITrade.trade.outputAmount.equalTo(amountSpecified) || - !amountSpecified.currency.equals(routingAPITrade.trade.outputAmount.currency) || - !(debouncedOtherCurrency === null || debouncedOtherCurrency === void 0 - ? void 0 - : debouncedOtherCurrency.equals(routingAPITrade.trade.inputAmount.currency))) - var useFallback = !autoRouterSupported || (!debouncing && routingAPITrade.state === TradeState.NO_ROUTE_FOUND) - // only use client side router if routing api trade failed or is not supported - var bestV3Trade = useClientSideV3Trade( - tradeType, - useFallback ? debouncedAmount : undefined, - useFallback ? debouncedOtherCurrency : undefined - ) - // only return gas estimate from api if routing api trade is used - return useMemo( - function () { - return __assign( - __assign( - __assign({}, useFallback ? bestV3Trade : routingAPITrade), - debouncing ? { state: TradeState.SYNCING } : {} - ), - isLoading ? { state: TradeState.LOADING } : {} - ) - }, - [bestV3Trade, debouncing, isLoading, routingAPITrade, useFallback] - ) -} +var FallbackWrapper = styled.div(templateObject_1$19 || (templateObject_1$19 = __makeTemplateObject(["\n display: flex;\n flex-direction: column;\n width: 100%;\n align-items: center;\n z-index: 1;\n"], ["\n display: flex;\n flex-direction: column;\n width: 100%;\n align-items: center;\n z-index: 1;\n"]))); +var BodyWrapper$2 = styled.div(templateObject_2$R || (templateObject_2$R = __makeTemplateObject(["\n padding: 1rem;\n width: 100%;\n white-space: ;\n"], ["\n padding: 1rem;\n width: 100%;\n white-space: ;\n"]))); +var CodeBlockWrapper = styled.div(templateObject_3$J || (templateObject_3$J = __makeTemplateObject(["\n background: ", ";\n overflow: auto;\n white-space: pre;\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 border-radius: 24px;\n padding: 18px 24px;\n color: ", ";\n"], ["\n background: ", ";\n overflow: auto;\n white-space: pre;\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 border-radius: 24px;\n padding: 18px 24px;\n color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg0; +}, function (_a) { + var theme = _a.theme; + return theme.text1; +}); +var LinkWrapper = styled.div(templateObject_4$y || (templateObject_4$y = __makeTemplateObject(["\n color: ", ";\n padding: 6px 24px;\n"], ["\n color: ", ";\n padding: 6px 24px;\n"])), function (_a) { + var theme = _a.theme; + return theme.blue1; +}); +var SomethingWentWrongWrapper = styled.div(templateObject_5$q || (templateObject_5$q = __makeTemplateObject(["\n padding: 6px 24px;\n"], ["\n padding: 6px 24px;\n"]))); +var IS_UNISWAP = window.location.hostname === 'app.uniswap.org'; +var ErrorBoundary = /** @class */ (function (_super) { + __extends(ErrorBoundary, _super); + function ErrorBoundary(props) { + var _this = _super.call(this, props) || this; + _this.state = { error: null }; + return _this; + } + ErrorBoundary.getDerivedStateFromError = function (error) { + return { error: error }; + }; + ErrorBoundary.prototype.componentDidCatch = function (error, errorInfo) { + ReactGA.exception(__assign(__assign(__assign({}, error), errorInfo), { fatal: true })); + }; + ErrorBoundary.prototype.render = function () { + var error = this.state.error; + if (error !== null) { + var encodedBody = encodeURIComponent(issueBody(error)); + return (jsx(FallbackWrapper, { children: jsx(BodyWrapper$2, { children: jsxs(AutoColumn, __assign({ gap: 'md' }, { children: [jsx(SomethingWentWrongWrapper, { children: jsx(ThemedText.Label, __assign({ fontSize: 24, fontWeight: 600 }, { children: jsx(Trans, { children: "Something went wrong" }, void 0) }), void 0) }, void 0), jsx(CodeBlockWrapper, { children: jsx("code", { children: jsx(ThemedText.Main, __assign({ fontSize: 10 }, { children: error.stack }), void 0) }, void 0) }, void 0), IS_UNISWAP ? (jsxs(AutoRow, { children: [jsx(LinkWrapper, { children: jsx(ExternalLink, __assign({ id: "create-github-issue-link", href: "https://github.com/Uniswap/uniswap-interface/issues/new?assignees=&labels=bug&body=" + encodedBody + "&title=" + encodeURIComponent("Crash report: `" + error.name + (error.message && ": " + error.message) + "`"), target: "_blank" }, { children: jsxs(ThemedText.Link, __assign({ fontSize: 16 }, { children: [jsx(Trans, { children: "Create an issue on GitHub" }, void 0), jsx("span", { children: "\u2197" }, void 0)] }), void 0) }), void 0) }, void 0), jsx(LinkWrapper, { children: jsx(ExternalLink, __assign({ id: "get-support-on-discord", href: "https://discord.gg/FCfyBSbCU5", target: "_blank" }, { children: jsxs(ThemedText.Link, __assign({ fontSize: 16 }, { children: [jsx(Trans, { children: "Get support on Discord" }, void 0), jsx("span", { children: "\u2197" }, void 0)] }), void 0) }), void 0) }, void 0)] }, void 0)) : null] }), void 0) }, void 0) }, void 0)); + } + return this.props.children; + }; + return ErrorBoundary; +}(React__default.Component)); +function getRelevantState() { + var path = window.location.hash; + if (!path.startsWith('#/')) { + return null; + } + var pieces = path.substring(2).split(/[/\\?]/); + switch (pieces[0]) { + case 'swap': + return 'swap'; + case 'add': + if (pieces[1] === 'v2') + return 'mint'; + else + return 'mintV3'; + case 'remove': + if (pieces[1] === 'v2') + return 'burn'; + else + return 'burnV3'; + } + return null; +} +function issueBody(error) { + var relevantState = getRelevantState(); + var deviceData = userAgent; + return "## URL\n \n" + window.location.href + "\n\n" + (relevantState + ? "## `" + relevantState + "` state\n \n```json\n" + JSON.stringify(store.getState()[relevantState], null, 2) + "\n```\n" + : '') + "\n" + (error.name && + "## Error\n\n```\n" + error.name + (error.message && ": " + error.message) + "\n```\n") + "\n" + (error.stack && + "## Stacktrace\n\n```\n" + error.stack + "\n```\n") + "\n" + (deviceData && + "## Device data\n\n```json\n" + JSON.stringify(deviceData, null, 2) + "\n```\n") + "\n"; +} +var templateObject_1$19, templateObject_2$R, templateObject_3$J, templateObject_4$y, templateObject_5$q; -// gets the current timestamp from the blockchain -function useCurrentBlockTimestamp() { - var _a, _b - var multicall = useInterfaceMulticall() - return (_b = - (_a = useSingleCallResult(multicall, 'getCurrentBlockTimestamp')) === null || _a === void 0 - ? void 0 - : _a.result) === null || _b === void 0 - ? void 0 - : _b[0] +function useModalOpen(modal) { + var openModal = useAppSelector(function (state) { return state.application.openModal; }); + return openModal === modal; +} +function useToggleModal(modal) { + var open = useModalOpen(modal); + var dispatch = useAppDispatch(); + return useCallback(function () { return dispatch(setOpenModal(open ? null : modal)); }, [dispatch, modal, open]); +} +function useWalletModalToggle() { + return useToggleModal(ApplicationModal.WALLET); +} +function useToggleSettingsMenu() { + return useToggleModal(ApplicationModal.SETTINGS); +} +function useShowClaimPopup() { + return useModalOpen(ApplicationModal.CLAIM_POPUP); +} +function useToggleShowClaimPopup() { + return useToggleModal(ApplicationModal.CLAIM_POPUP); +} +function useToggleSelfClaimModal() { + return useToggleModal(ApplicationModal.SELF_CLAIM); +} +function useTogglePrivacyPolicy() { + return useToggleModal(ApplicationModal.PRIVACY_POLICY); +} +// returns a function that allows adding a popup +function useAddPopup() { + var dispatch = useAppDispatch(); + return useCallback(function (content, key, removeAfterMs) { + dispatch(addPopup({ content: content, key: key, removeAfterMs: removeAfterMs !== null && removeAfterMs !== void 0 ? removeAfterMs : DEFAULT_TXN_DISMISS_MS })); + }, [dispatch]); +} +// returns a function that allows removing a popup via its key +function useRemovePopup() { + var dispatch = useAppDispatch(); + return useCallback(function (key) { + dispatch(removePopup({ key: key })); + }, [dispatch]); +} +// get the list of active popups +function useActivePopups() { + var list = useAppSelector(function (state) { return state.application.popupList; }); + return useMemo(function () { return list.filter(function (item) { return item.show; }); }, [list]); } -new Interface(abi$6) -;({ - 1: [ - { - tokens: [WRAPPED_NATIVE_CURRENCY[1], DAI], - stakingRewardAddress: '0xa1484C3aa22a66C62b77E0AE78E15258bd0cB711', - }, - { - tokens: [WRAPPED_NATIVE_CURRENCY[1], USDC], - stakingRewardAddress: '0x7FBa4B8Dc5E7616e59622806932DBea72537A56b', - }, - { - tokens: [WRAPPED_NATIVE_CURRENCY[1], USDT], - stakingRewardAddress: '0x6C3e4cb2E96B01F4b866965A91ed4437839A121a', - }, - { - tokens: [WRAPPED_NATIVE_CURRENCY[1], WBTC], - stakingRewardAddress: '0xCA35e32e7926b96A9988f61d510E038108d8068e', - }, - ], -}) - -// mimics useAllBalances -function useAllTokenBalances() { - var account = useActiveWeb3React().account - var allTokens = useAllTokens() - var allTokensArray = useMemo( - function () { - return Object.values(allTokens !== null && allTokens !== void 0 ? allTokens : {}) - }, - [allTokens] - ) - var balances = useTokenBalances(account !== null && account !== void 0 ? account : undefined, allTokensArray) - return balances !== null && balances !== void 0 ? balances : {} -} +var _path$5, _path2$2, _path3$1, _path4, _path5, _path6, _path7, _path8, _path9; -function useSwapState() { - return useAppSelector(function (state) { - return state.swap - }) -} -function useSwapActionHandlers() { - var dispatch = useAppDispatch() - var onCurrencySelection = useCallback( - function (field, currency) { - dispatch( - selectCurrency({ - field, - currencyId: currency.isToken ? currency.address : currency.isNative ? 'ETH' : '', - }) - ) - }, - [dispatch] - ) - var onSwitchTokens = useCallback( - function () { - dispatch(switchCurrencies()) - }, - [dispatch] - ) - var onUserInput = useCallback( - function (field, typedValue) { - dispatch(typeInput({ field, typedValue })) - }, - [dispatch] - ) - var onChangeRecipient = useCallback( - function (recipient) { - dispatch(setRecipient({ recipient })) - }, - [dispatch] - ) - return { - onSwitchTokens, - onCurrencySelection, - onUserInput, - onChangeRecipient, - } -} -var BAD_RECIPIENT_ADDRESSES = { - '0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f': true, - '0xf164fC0Ec4E93095b804a4795bBe1e041497b92a': true, - '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D': true, // v2 router 02 -} -// from the current swap inputs, compute the best trade and return it. -function useDerivedSwapInfo() { - var _a, _b - var account = useActiveWeb3React().account - var _c = useSwapState(), - independentField = _c.independentField, - typedValue = _c.typedValue, - _d = Field.INPUT, - inputCurrencyId = _c[_d].currencyId, - _e = Field.OUTPUT, - outputCurrencyId = _c[_e].currencyId, - recipient = _c.recipient - var inputCurrency = useCurrency(inputCurrencyId) - var outputCurrency = useCurrency(outputCurrencyId) - var recipientLookup = useENS(recipient !== null && recipient !== void 0 ? recipient : undefined) - var to = (_a = recipient === null ? account : recipientLookup.address) !== null && _a !== void 0 ? _a : null - var relevantTokenBalances = useCurrencyBalances( - account !== null && account !== void 0 ? account : undefined, - useMemo( - function () { - return [ - inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : undefined, - outputCurrency !== null && outputCurrency !== void 0 ? outputCurrency : undefined, - ] - }, - [inputCurrency, outputCurrency] - ) - ) - var isExactIn = independentField === Field.INPUT - var parsedAmount = useMemo( - function () { - var _a - return tryParseCurrencyAmount( - typedValue, - (_a = isExactIn ? inputCurrency : outputCurrency) !== null && _a !== void 0 ? _a : undefined - ) - }, - [inputCurrency, isExactIn, outputCurrency, typedValue] - ) - var trade = useBestTrade( - isExactIn ? TradeType.EXACT_INPUT : TradeType.EXACT_OUTPUT, - parsedAmount, - (_b = isExactIn ? outputCurrency : inputCurrency) !== null && _b !== void 0 ? _b : undefined - ) - var currencyBalances = useMemo( - function () { - var _a - return (_a = {}), (_a[Field.INPUT] = relevantTokenBalances[0]), (_a[Field.OUTPUT] = relevantTokenBalances[1]), _a - }, - [relevantTokenBalances] - ) - var currencies = useMemo( - function () { - var _a - return (_a = {}), (_a[Field.INPUT] = inputCurrency), (_a[Field.OUTPUT] = outputCurrency), _a - }, - [inputCurrency, outputCurrency] - ) - // allowed slippage is either auto slippage, or custom user defined slippage if auto slippage disabled - var autoSlippageTolerance = useAutoSlippageTolerance(trade.trade) - var allowedSlippage = useUserSlippageToleranceWithDefault(autoSlippageTolerance) - var inputError = useMemo( - function () { - var _a - var inputError - if (!account) { - inputError = jsx(Trans, { children: 'Connect Wallet' }, void 0) - } - if (!currencies[Field.INPUT] || !currencies[Field.OUTPUT]) { - inputError = - inputError !== null && inputError !== void 0 ? inputError : jsx(Trans, { children: 'Select a token' }, void 0) - } - if (!parsedAmount) { - inputError = - inputError !== null && inputError !== void 0 - ? inputError - : jsx(Trans, { children: 'Enter an amount' }, void 0) - } - var formattedTo = isAddress(to) - if (!to || !formattedTo) { - inputError = - inputError !== null && inputError !== void 0 - ? inputError - : jsx(Trans, { children: 'Enter a recipient' }, void 0) - } else { - if (BAD_RECIPIENT_ADDRESSES[formattedTo]) { - inputError = - inputError !== null && inputError !== void 0 - ? inputError - : jsx(Trans, { children: 'Invalid recipient' }, void 0) - } - } - // compare input balance to max input based on version - var _b = __read( - [ - currencyBalances[Field.INPUT], - (_a = trade.trade) === null || _a === void 0 ? void 0 : _a.maximumAmountIn(allowedSlippage), - ], - 2 - ), - balanceIn = _b[0], - amountIn = _b[1] - if (balanceIn && amountIn && balanceIn.lessThan(amountIn)) { - inputError = jsxs(Trans, { children: ['Insufficient ', amountIn.currency.symbol, ' balance'] }, void 0) - } - return inputError - }, - [account, allowedSlippage, currencies, currencyBalances, parsedAmount, to, trade.trade] - ) - return useMemo( - function () { - return { - currencies, - currencyBalances, - parsedAmount, - inputError, - trade, - allowedSlippage, - } - }, - [allowedSlippage, currencies, currencyBalances, inputError, parsedAmount, trade] - ) -} -function parseCurrencyFromURLParameter(urlParam) { - if (typeof urlParam === 'string') { - var valid = isAddress(urlParam) - if (valid) return valid - if (urlParam.toUpperCase() === 'ETH') return 'ETH' - } - return '' -} -function parseTokenAmountURLParameter(urlParam) { - return typeof urlParam === 'string' && !isNaN(parseFloat(urlParam)) ? urlParam : '' -} -function parseIndependentFieldURLParameter(urlParam) { - return typeof urlParam === 'string' && urlParam.toLowerCase() === 'output' ? Field.OUTPUT : Field.INPUT -} -var ENS_NAME_REGEX = /^[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)?$/ -var ADDRESS_REGEX = /^0x[a-fA-F0-9]{40}$/ -function validatedRecipient(recipient) { - if (typeof recipient !== 'string') return null - var address = isAddress(recipient) - if (address) return address - if (ENS_NAME_REGEX.test(recipient)) return recipient - if (ADDRESS_REGEX.test(recipient)) return recipient - return null -} -function queryParametersToSwapState(parsedQs) { - var _a - var inputCurrency = parseCurrencyFromURLParameter(parsedQs.inputCurrency) - var outputCurrency = parseCurrencyFromURLParameter(parsedQs.outputCurrency) - if (inputCurrency === '' && outputCurrency === '') { - // default to ETH input - inputCurrency = 'ETH' - } else if (inputCurrency === outputCurrency) { - // clear output if identical - outputCurrency = '' - } - var recipient = validatedRecipient(parsedQs.recipient) - return ( - (_a = {}), - (_a[Field.INPUT] = { - currencyId: - inputCurrency === '' ? null : inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : null, - }), - (_a[Field.OUTPUT] = { - currencyId: - outputCurrency === '' ? null : outputCurrency !== null && outputCurrency !== void 0 ? outputCurrency : null, - }), - (_a.typedValue = parseTokenAmountURLParameter(parsedQs.exactAmount)), - (_a.independentField = parseIndependentFieldURLParameter(parsedQs.exactField)), - (_a.recipient = recipient), - _a - ) -} -// updates the swap state to use the defaults for a given network -function useDefaultsFromURLSearch() { - var chainId = useActiveWeb3React().chainId - var dispatch = useAppDispatch() - var parsedQs = useParsedQueryString() - var _a = __read(useState(), 2), - result = _a[0], - setResult = _a[1] - useEffect( - function () { - var _a, _b - if (!chainId) return - var parsed = queryParametersToSwapState(parsedQs) - var inputCurrencyId = (_a = parsed[Field.INPUT].currencyId) !== null && _a !== void 0 ? _a : undefined - var outputCurrencyId = (_b = parsed[Field.OUTPUT].currencyId) !== null && _b !== void 0 ? _b : undefined - dispatch( - replaceSwapState({ - typedValue: parsed.typedValue, - field: parsed.independentField, - inputCurrencyId, - outputCurrencyId, - recipient: parsed.recipient, - }) - ) - setResult({ inputCurrencyId, outputCurrencyId }) - // eslint-disable-next-line react-hooks/exhaustive-deps - }, - [dispatch, chainId] - ) - return result -} +function _extends$7() { _extends$7 = 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$7.apply(this, arguments); } -var initialState$2 = queryParametersToSwapState(parsedQueryString()) -var swap = createReducer(initialState$2, function (builder) { - return builder - .addCase(replaceSwapState, function (state, _a) { - var _b - var _c = _a.payload, - typedValue = _c.typedValue, - recipient = _c.recipient, - field = _c.field, - inputCurrencyId = _c.inputCurrencyId, - outputCurrencyId = _c.outputCurrencyId - return ( - (_b = {}), - (_b[Field.INPUT] = { - currencyId: inputCurrencyId !== null && inputCurrencyId !== void 0 ? inputCurrencyId : null, - }), - (_b[Field.OUTPUT] = { - currencyId: outputCurrencyId !== null && outputCurrencyId !== void 0 ? outputCurrencyId : null, - }), - (_b.independentField = field), - (_b.typedValue = typedValue), - (_b.recipient = recipient), - _b - ) - }) - .addCase(selectCurrency, function (state, _a) { - var _b, _c - var _d = _a.payload, - currencyId = _d.currencyId, - field = _d.field - var otherField = field === Field.INPUT ? Field.OUTPUT : Field.INPUT - if (currencyId === state[otherField].currencyId) { - // the case where we have to swap the order - return __assign( - __assign({}, state), - ((_b = { independentField: state.independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT }), - (_b[field] = { currencyId }), - (_b[otherField] = { currencyId: state[field].currencyId }), - _b) - ) - } else { - // the normal case - return __assign(__assign({}, state), ((_c = {}), (_c[field] = { currencyId }), _c)) - } - }) - .addCase(switchCurrencies, function (state) { - var _a - return __assign( - __assign({}, state), - ((_a = { independentField: state.independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT }), - (_a[Field.INPUT] = { currencyId: state[Field.OUTPUT].currencyId }), - (_a[Field.OUTPUT] = { currencyId: state[Field.INPUT].currencyId }), - _a) - ) - }) - .addCase(typeInput, function (state, _a) { - var _b = _a.payload, - field = _b.field, - typedValue = _b.typedValue - return __assign(__assign({}, state), { independentField: field, typedValue }) - }) - .addCase(setRecipient, function (state, _a) { - var recipient = _a.payload.recipient - state.recipient = recipient - }) -}) - -var now = function () { - return new Date().getTime() -} -var initialState$1 = {} -var transactions = createReducer(initialState$1, function (builder) { - return builder - .addCase(updateVersion, function (transactions) { - // in case there are any transactions in the store with the old format, remove them - Object.keys(transactions).forEach(function (chainId) { - var chainTransactions = transactions[chainId] - Object.keys(chainTransactions).forEach(function (hash) { - if (!('info' in chainTransactions[hash])) { - // clear old transactions that don't have the right format - delete chainTransactions[hash] - } - }) - }) - }) - .addCase(addTransaction, function (transactions, _a) { - var _b, _c - var _d = _a.payload, - chainId = _d.chainId, - from = _d.from, - hash = _d.hash, - info = _d.info - if ((_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash]) { - throw Error('Attempted to add existing transaction.') - } - var txs = (_c = transactions[chainId]) !== null && _c !== void 0 ? _c : {} - txs[hash] = { hash, info, from, addedTime: now() } - transactions[chainId] = txs - }) - .addCase(clearAllTransactions, function (transactions, _a) { - var chainId = _a.payload.chainId - if (!transactions[chainId]) return - transactions[chainId] = {} - }) - .addCase(checkedTransaction, function (transactions, _a) { - var _b - var _c = _a.payload, - chainId = _c.chainId, - hash = _c.hash, - blockNumber = _c.blockNumber - var tx = (_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash] - if (!tx) { - return - } - if (!tx.lastCheckedBlockNumber) { - tx.lastCheckedBlockNumber = blockNumber - } else { - tx.lastCheckedBlockNumber = Math.max(blockNumber, tx.lastCheckedBlockNumber) - } - }) - .addCase(finalizeTransaction, function (transactions, _a) { - var _b - var _c = _a.payload, - hash = _c.hash, - chainId = _c.chainId, - receipt = _c.receipt - var tx = (_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash] - if (!tx) { - return - } - tx.receipt = receipt - tx.confirmedTime = now() - }) -}) - -var currentTimestamp = function () { - return new Date().getTime() -} -function pairKey(token0Address, token1Address) { - return token0Address + ';' + token1Address -} -var initialState = { - matchesDarkMode: false, - userDarkMode: null, - userExpertMode: false, - userLocale: null, - userClientSideRouter: false, - userHideClosedPositions: false, - userSlippageTolerance: 'auto', - userSlippageToleranceHasBeenMigratedToAuto: true, - userDeadline: DEFAULT_DEADLINE_FROM_NOW, - tokens: {}, - pairs: {}, - timestamp: currentTimestamp(), - URLWarningVisible: true, - showSurveyPopup: undefined, -} -var user = createReducer(initialState, function (builder) { - return builder - .addCase(updateVersion, function (state) { - // slippage isnt being tracked in local storage, reset to default - // noinspection SuspiciousTypeOfGuard - if ( - typeof state.userSlippageTolerance !== 'number' || - !Number.isInteger(state.userSlippageTolerance) || - state.userSlippageTolerance < 0 || - state.userSlippageTolerance > 5000 - ) { - state.userSlippageTolerance = 'auto' - } else { - if ( - !state.userSlippageToleranceHasBeenMigratedToAuto && - [10, 50, 100].indexOf(state.userSlippageTolerance) !== -1 - ) { - state.userSlippageTolerance = 'auto' - state.userSlippageToleranceHasBeenMigratedToAuto = true - } - } - // deadline isnt being tracked in local storage, reset to default - // noinspection SuspiciousTypeOfGuard - if ( - typeof state.userDeadline !== 'number' || - !Number.isInteger(state.userDeadline) || - state.userDeadline < 60 || - state.userDeadline > 180 * 60 - ) { - state.userDeadline = DEFAULT_DEADLINE_FROM_NOW - } - state.lastUpdateVersionTimestamp = currentTimestamp() - }) - .addCase(updateUserDarkMode, function (state, action) { - state.userDarkMode = action.payload.userDarkMode - state.timestamp = currentTimestamp() - }) - .addCase(updateMatchesDarkMode, function (state, action) { - state.matchesDarkMode = action.payload.matchesDarkMode - state.timestamp = currentTimestamp() - }) - .addCase(updateUserExpertMode, function (state, action) { - state.userExpertMode = action.payload.userExpertMode - state.timestamp = currentTimestamp() - }) - .addCase(updateUserLocale, function (state, action) { - state.userLocale = action.payload.userLocale - state.timestamp = currentTimestamp() - }) - .addCase(updateUserSlippageTolerance, function (state, action) { - state.userSlippageTolerance = action.payload.userSlippageTolerance - state.timestamp = currentTimestamp() - }) - .addCase(updateUserDeadline, function (state, action) { - state.userDeadline = action.payload.userDeadline - state.timestamp = currentTimestamp() - }) - .addCase(updateUserClientSideRouter, function (state, action) { - state.userClientSideRouter = action.payload.userClientSideRouter - }) - .addCase(updateHideClosedPositions, function (state, action) { - state.userHideClosedPositions = action.payload.userHideClosedPositions - }) - .addCase(updateShowSurveyPopup, function (state, action) { - state.showSurveyPopup = action.payload.showSurveyPopup - }) - .addCase(addSerializedToken, function (state, _a) { - var serializedToken = _a.payload.serializedToken - if (!state.tokens) { - state.tokens = {} - } - state.tokens[serializedToken.chainId] = state.tokens[serializedToken.chainId] || {} - state.tokens[serializedToken.chainId][serializedToken.address] = serializedToken - state.timestamp = currentTimestamp() - }) - .addCase(removeSerializedToken, function (state, _a) { - var _b = _a.payload, - address = _b.address, - chainId = _b.chainId - if (!state.tokens) { - state.tokens = {} - } - state.tokens[chainId] = state.tokens[chainId] || {} - delete state.tokens[chainId][address] - state.timestamp = currentTimestamp() - }) - .addCase(addSerializedPair, function (state, _a) { - var serializedPair = _a.payload.serializedPair - if ( - serializedPair.token0.chainId === serializedPair.token1.chainId && - serializedPair.token0.address !== serializedPair.token1.address - ) { - var chainId = serializedPair.token0.chainId - state.pairs[chainId] = state.pairs[chainId] || {} - state.pairs[chainId][pairKey(serializedPair.token0.address, serializedPair.token1.address)] = serializedPair - } - state.timestamp = currentTimestamp() - }) - .addCase(removeSerializedPair, function (state, _a) { - var _b = _a.payload, - chainId = _b.chainId, - tokenAAddress = _b.tokenAAddress, - tokenBAddress = _b.tokenBAddress - if (state.pairs[chainId]) { - // just delete both keys if either exists - delete state.pairs[chainId][pairKey(tokenAAddress, tokenBAddress)] - delete state.pairs[chainId][pairKey(tokenBAddress, tokenAAddress)] - } - state.timestamp = currentTimestamp() - }) -}) - -var _a$5 -var PERSISTED_KEYS = ['user', 'transactions', 'lists'] -var store = configureStore({ - reducer: - ((_a$5 = { - application, - user, - transactions, - swap, - mint, - mintV3, - burn, - burnV3, - multicall: multicall.reducer, - lists, - logs, - }), - (_a$5[api$1.reducerPath] = api$1.reducer), - (_a$5[routingApi.reducerPath] = routingApi.reducer), - _a$5), - middleware(getDefaultMiddleware) { - return getDefaultMiddleware({ thunk: true }) - .concat(api$1.middleware) - .concat(routingApi.middleware) - .concat(save({ states: PERSISTED_KEYS, debounce: 1000 })) - }, - preloadedState: load({ states: PERSISTED_KEYS, disableWarnings: process.env.NODE_ENV === 'test' }), -}) -store.dispatch(updateVersion()) -setupListeners(store.dispatch) - -var FallbackWrapper = styled.div( - templateObject_1$19 || - (templateObject_1$19 = __makeTemplateObject( - ['\n display: flex;\n flex-direction: column;\n width: 100%;\n align-items: center;\n z-index: 1;\n'], - ['\n display: flex;\n flex-direction: column;\n width: 100%;\n align-items: center;\n z-index: 1;\n'] - )) -) -var BodyWrapper$2 = styled.div( - templateObject_2$R || - (templateObject_2$R = __makeTemplateObject( - ['\n padding: 1rem;\n width: 100%;\n white-space: ;\n'], - ['\n padding: 1rem;\n width: 100%;\n white-space: ;\n'] - )) -) -var CodeBlockWrapper = styled.div( - templateObject_3$J || - (templateObject_3$J = __makeTemplateObject( - [ - '\n background: ', - ';\n overflow: auto;\n white-space: pre;\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 border-radius: 24px;\n padding: 18px 24px;\n color: ', - ';\n', - ], - [ - '\n background: ', - ';\n overflow: auto;\n white-space: pre;\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 border-radius: 24px;\n padding: 18px 24px;\n color: ', - ';\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.bg0 - }, - function (_a) { - var theme = _a.theme - return theme.text1 - } -) -var LinkWrapper = styled.div( - templateObject_4$y || - (templateObject_4$y = __makeTemplateObject( - ['\n color: ', ';\n padding: 6px 24px;\n'], - ['\n color: ', ';\n padding: 6px 24px;\n'] - )), - function (_a) { - var theme = _a.theme - return theme.blue1 - } -) -var SomethingWentWrongWrapper = styled.div( - templateObject_5$q || - (templateObject_5$q = __makeTemplateObject(['\n padding: 6px 24px;\n'], ['\n padding: 6px 24px;\n'])) -) -var IS_UNISWAP = window.location.hostname === 'app.uniswap.org' -var ErrorBoundary = /** @class */ (function (_super) { - __extends(ErrorBoundary, _super) - function ErrorBoundary(props) { - var _this = _super.call(this, props) || this - _this.state = { error: null } - return _this - } - ErrorBoundary.getDerivedStateFromError = function (error) { - return { error } - } - ErrorBoundary.prototype.componentDidCatch = function (error, errorInfo) { - ReactGA.exception(__assign(__assign(__assign({}, error), errorInfo), { fatal: true })) - } - ErrorBoundary.prototype.render = function () { - var error = this.state.error - if (error !== null) { - var encodedBody = encodeURIComponent(issueBody(error)) - return jsx( - FallbackWrapper, - { - children: jsx( - BodyWrapper$2, - { - children: jsxs( - AutoColumn, - __assign( - { gap: 'md' }, - { - children: [ - jsx( - SomethingWentWrongWrapper, - { - children: jsx( - ThemedText.Label, - __assign( - { fontSize: 24, fontWeight: 600 }, - { children: jsx(Trans, { children: 'Something went wrong' }, void 0) } - ), - void 0 - ), - }, - void 0 - ), - jsx( - CodeBlockWrapper, - { - children: jsx( - 'code', - { - children: jsx( - ThemedText.Main, - __assign({ fontSize: 10 }, { children: error.stack }), - void 0 - ), - }, - void 0 - ), - }, - void 0 - ), - IS_UNISWAP - ? jsxs( - AutoRow, - { - children: [ - jsx( - LinkWrapper, - { - children: jsx( - ExternalLink, - __assign( - { - id: 'create-github-issue-link', - href: - 'https://github.com/Uniswap/uniswap-interface/issues/new?assignees=&labels=bug&body=' + - encodedBody + - '&title=' + - encodeURIComponent( - 'Crash report: `' + - error.name + - (error.message && ': ' + error.message) + - '`' - ), - target: '_blank', - }, - { - children: jsxs( - ThemedText.Link, - __assign( - { fontSize: 16 }, - { - children: [ - jsx(Trans, { children: 'Create an issue on GitHub' }, void 0), - jsx('span', { children: '\u2197' }, void 0), - ], - } - ), - void 0 - ), - } - ), - void 0 - ), - }, - void 0 - ), - jsx( - LinkWrapper, - { - children: jsx( - ExternalLink, - __assign( - { - id: 'get-support-on-discord', - href: 'https://discord.gg/FCfyBSbCU5', - target: '_blank', - }, - { - children: jsxs( - ThemedText.Link, - __assign( - { fontSize: 16 }, - { - children: [ - jsx(Trans, { children: 'Get support on Discord' }, void 0), - jsx('span', { children: '\u2197' }, void 0), - ], - } - ), - void 0 - ), - } - ), - void 0 - ), - }, - void 0 - ), - ], - }, - void 0 - ) - : null, - ], - } - ), - void 0 - ), - }, - void 0 - ), - }, - void 0 - ) - } - return this.props.children - } - return ErrorBoundary -})(React__default.Component) -function getRelevantState() { - var path = window.location.hash - if (!path.startsWith('#/')) { - return null - } - var pieces = path.substring(2).split(/[/\\?]/) - switch (pieces[0]) { - case 'swap': - return 'swap' - case 'add': - if (pieces[1] === 'v2') return 'mint' - else return 'mintV3' - case 'remove': - if (pieces[1] === 'v2') return 'burn' - else return 'burnV3' +const SvgLogo = props => /*#__PURE__*/React.createElement("svg", _extends$7({ + width: 14, + height: 15, + viewBox: "0 0 14 15", + fill: "black", + xmlns: "http://www.w3.org/2000/svg" +}, props), /*#__PURE__*/React.createElement("g", { + style: { + mixBlendMode: "darken" } - return null -} -function issueBody(error) { - var relevantState = getRelevantState() - var deviceData = userAgent - return ( - '## URL\n \n' + - window.location.href + - '\n\n' + - (relevantState - ? '## `' + - relevantState + - '` state\n \n```json\n' + - JSON.stringify(store.getState()[relevantState], null, 2) + - '\n```\n' - : '') + - '\n' + - (error.name && '## Error\n\n```\n' + error.name + (error.message && ': ' + error.message) + '\n```\n') + - '\n' + - (error.stack && '## Stacktrace\n\n```\n' + error.stack + '\n```\n') + - '\n' + - (deviceData && '## Device data\n\n```json\n' + JSON.stringify(deviceData, null, 2) + '\n```\n') + - '\n' - ) -} -var templateObject_1$19, templateObject_2$R, templateObject_3$J, templateObject_4$y, templateObject_5$q - -function useModalOpen(modal) { - var openModal = useAppSelector(function (state) { - return state.application.openModal - }) - return openModal === modal -} -function useToggleModal(modal) { - var open = useModalOpen(modal) - var dispatch = useAppDispatch() - return useCallback( - function () { - return dispatch(setOpenModal(open ? null : modal)) - }, - [dispatch, modal, open] - ) -} -function useWalletModalToggle() { - return useToggleModal(ApplicationModal.WALLET) -} -function useToggleSettingsMenu() { - return useToggleModal(ApplicationModal.SETTINGS) -} -function useShowClaimPopup() { - return useModalOpen(ApplicationModal.CLAIM_POPUP) -} -function useToggleShowClaimPopup() { - return useToggleModal(ApplicationModal.CLAIM_POPUP) -} -function useToggleSelfClaimModal() { - return useToggleModal(ApplicationModal.SELF_CLAIM) -} -function useTogglePrivacyPolicy() { - return useToggleModal(ApplicationModal.PRIVACY_POLICY) -} -// returns a function that allows adding a popup -function useAddPopup() { - var dispatch = useAppDispatch() - return useCallback( - function (content, key, removeAfterMs) { - dispatch( - addPopup({ - content, - key, - removeAfterMs: removeAfterMs !== null && removeAfterMs !== void 0 ? removeAfterMs : DEFAULT_TXN_DISMISS_MS, - }) - ) - }, - [dispatch] - ) -} -// returns a function that allows removing a popup via its key -function useRemovePopup() { - var dispatch = useAppDispatch() - return useCallback( - function (key) { - dispatch(removePopup({ key })) - }, - [dispatch] - ) -} -// get the list of active popups -function useActivePopups() { - var list = useAppSelector(function (state) { - return state.application.popupList - }) - return useMemo( - function () { - return list.filter(function (item) { - return item.show - }) - }, - [list] - ) -} +}, _path$5 || (_path$5 = /*#__PURE__*/React.createElement("path", { + d: "M4.15217 1.55141C3.96412 1.52242 3.95619 1.51902 4.04468 1.5055C4.21427 1.47958 4.61472 1.51491 4.89067 1.58012C5.53489 1.73232 6.12109 2.12221 6.74683 2.81466L6.91307 2.99862L7.15088 2.96062C8.15274 2.8006 9.17194 2.92778 10.0244 3.31918C10.2589 3.42686 10.6287 3.64121 10.6749 3.69629C10.6896 3.71384 10.7166 3.82684 10.7349 3.94742C10.7982 4.36458 10.7665 4.68434 10.6382 4.92317C10.5683 5.05313 10.5644 5.09432 10.6114 5.20554C10.6489 5.2943 10.7534 5.35999 10.8569 5.35985C11.0687 5.35956 11.2968 5.0192 11.4024 4.54561L11.4444 4.3575L11.5275 4.45109C11.9835 4.96459 12.3417 5.66488 12.4032 6.16335L12.4192 6.29332L12.3426 6.17517C12.2107 5.97186 12.0781 5.83346 11.9084 5.72183C11.6024 5.52062 11.2789 5.45215 10.4222 5.40727C9.64839 5.36675 9.21045 5.30106 8.77621 5.16032C8.03738 4.9209 7.66493 4.60204 6.78729 3.4576C6.39748 2.94928 6.15654 2.66804 5.91687 2.44155C5.37228 1.92691 4.83716 1.65701 4.15217 1.55141Z" +})), _path2$2 || (_path2$2 = /*#__PURE__*/React.createElement("path", { + d: "M10.8494 2.68637C10.8689 2.34575 10.9153 2.12108 11.0088 1.9159C11.0458 1.83469 11.0804 1.76822 11.0858 1.76822C11.0911 1.76822 11.075 1.82816 11.05 1.90142C10.9821 2.10054 10.9709 2.3729 11.0177 2.68978C11.0771 3.09184 11.1109 3.14985 11.5385 3.58416C11.739 3.78788 11.9723 4.0448 12.0568 4.15511L12.2106 4.35568L12.0568 4.21234C11.8688 4.03705 11.4364 3.6952 11.3409 3.64633C11.2768 3.61356 11.2673 3.61413 11.2278 3.65321C11.1914 3.68922 11.1837 3.74333 11.1787 3.99915C11.1708 4.39786 11.1161 4.65377 10.9842 4.90965C10.9128 5.04805 10.9015 5.01851 10.9661 4.8623C11.0143 4.74566 11.0192 4.69439 11.0189 4.30842C11.0181 3.53291 10.9255 3.34647 10.3823 3.02709C10.2447 2.94618 10.0179 2.8295 9.87839 2.76778C9.73887 2.70606 9.62805 2.6523 9.63208 2.64828C9.64746 2.63307 10.1772 2.78675 10.3905 2.86828C10.7077 2.98954 10.76 3.00526 10.7985 2.99063C10.8244 2.98082 10.8369 2.90608 10.8494 2.68637Z" +})), _path3$1 || (_path3$1 = /*#__PURE__*/React.createElement("path", { + d: "M4.51745 4.01304C4.13569 3.49066 3.89948 2.68973 3.95062 2.091L3.96643 1.90572L4.05333 1.92148C4.21652 1.95106 4.49789 2.05515 4.62964 2.13469C4.9912 2.35293 5.14773 2.64027 5.30697 3.37811C5.35362 3.59423 5.41482 3.8388 5.44298 3.9216C5.48831 4.05487 5.65962 4.36617 5.7989 4.56834C5.89922 4.71395 5.83258 4.78295 5.61082 4.76305C5.27215 4.73267 4.8134 4.41799 4.51745 4.01304Z" +})), _path4 || (_path4 = /*#__PURE__*/React.createElement("path", { + d: "M10.3863 7.90088C8.60224 7.18693 7.97389 6.56721 7.97389 5.52157C7.97389 5.36769 7.97922 5.24179 7.98571 5.24179C7.99221 5.24179 8.06124 5.29257 8.1391 5.35465C8.50088 5.64305 8.906 5.76623 10.0275 5.92885C10.6875 6.02455 11.0589 6.10185 11.4015 6.21477C12.4904 6.57371 13.1641 7.30212 13.3248 8.29426C13.3715 8.58255 13.3441 9.12317 13.2684 9.4081C13.2087 9.63315 13.0263 10.0388 12.9779 10.0544C12.9645 10.0587 12.9514 10.0076 12.9479 9.93809C12.9296 9.56554 12.7402 9.20285 12.4221 8.93116C12.0604 8.62227 11.5745 8.37633 10.3863 7.90088Z" +})), _path5 || (_path5 = /*#__PURE__*/React.createElement("path", { + d: "M9.13385 8.19748C9.11149 8.06527 9.07272 7.89643 9.04769 7.82228L9.00217 7.68748L9.08672 7.7818C9.20374 7.91233 9.2962 8.07937 9.37457 8.30185C9.43438 8.47165 9.44111 8.52215 9.44066 8.79807C9.4402 9.06896 9.43273 9.12575 9.3775 9.27858C9.29042 9.51959 9.18233 9.69048 9.00097 9.87391C8.67507 10.2036 8.25607 10.3861 7.65143 10.4618C7.54633 10.4749 7.24 10.4971 6.97069 10.511C6.292 10.5461 5.84531 10.6186 5.44393 10.7587C5.38623 10.7788 5.3347 10.7911 5.32947 10.7859C5.31323 10.7698 5.58651 10.6079 5.81223 10.4998C6.1305 10.3474 6.44733 10.2643 7.15719 10.1468C7.50785 10.0887 7.86998 10.0183 7.96194 9.99029C8.83033 9.72566 9.27671 9.04276 9.13385 8.19748Z" +})), _path6 || (_path6 = /*#__PURE__*/React.createElement("path", { + d: "M9.95169 9.64109C9.71465 9.13463 9.66022 8.64564 9.79009 8.18961C9.80399 8.14088 9.82632 8.101 9.83976 8.101C9.85319 8.101 9.90913 8.13105 9.96404 8.16777C10.0733 8.24086 10.2924 8.36395 10.876 8.68023C11.6043 9.0749 12.0196 9.3805 12.302 9.72965C12.5493 10.0354 12.7023 10.3837 12.776 10.8084C12.8177 11.0489 12.7932 11.6277 12.7311 11.8699C12.5353 12.6337 12.0802 13.2336 11.4311 13.5837C11.336 13.635 11.2506 13.6771 11.2414 13.6773C11.2321 13.6775 11.2668 13.5899 11.3184 13.4827C11.5367 13.029 11.5616 12.5877 11.3965 12.0965C11.2954 11.7957 11.0893 11.4287 10.6732 10.8084C10.1893 10.0873 10.0707 9.89539 9.95169 9.64109Z" +})), _path7 || (_path7 = /*#__PURE__*/React.createElement("path", { + d: "M3.25046 12.3737C3.91252 11.8181 4.73629 11.4234 5.48666 11.3022C5.81005 11.25 6.34877 11.2707 6.64823 11.3469C7.12824 11.469 7.55763 11.7425 7.78094 12.0683C7.99918 12.3867 8.09281 12.6642 8.19029 13.2816C8.22875 13.5252 8.27057 13.7697 8.28323 13.8251C8.35644 14.1451 8.4989 14.4008 8.67544 14.5293C8.95583 14.7333 9.43865 14.7459 9.91362 14.5618C9.99423 14.5305 10.0642 14.5089 10.0691 14.5138C10.0864 14.5308 9.84719 14.6899 9.67847 14.7737C9.45143 14.8864 9.2709 14.93 9.03102 14.93C8.59601 14.93 8.23486 14.7101 7.9335 14.2616C7.87419 14.1733 7.7409 13.909 7.63729 13.6741C7.3191 12.9528 7.16199 12.7331 6.79255 12.4926C6.47104 12.2834 6.05641 12.2459 5.74449 12.3979C5.33475 12.5976 5.22043 13.118 5.51389 13.4478C5.63053 13.5789 5.84803 13.6919 6.02588 13.7139C6.35861 13.7551 6.64455 13.5035 6.64455 13.1696C6.64455 12.9528 6.56071 12.8291 6.34966 12.7344C6.0614 12.6051 5.75156 12.7562 5.75304 13.0254C5.75368 13.1402 5.80396 13.2122 5.91971 13.2643C5.99397 13.2977 5.99569 13.3003 5.93514 13.2878C5.67066 13.2333 5.6087 12.9164 5.82135 12.706C6.07667 12.4535 6.60461 12.5649 6.78591 12.9097C6.86208 13.0545 6.87092 13.3429 6.80451 13.517C6.6559 13.9068 6.22256 14.1117 5.78297 14.0002C5.48368 13.9242 5.36181 13.842 5.00097 13.4726C4.37395 12.8306 4.13053 12.7062 3.22657 12.566L3.05335 12.5391L3.25046 12.3737Z" +})), _path8 || (_path8 = /*#__PURE__*/React.createElement("path", { + fillRule: "evenodd", + clipRule: "evenodd", + d: "M0.308383 0.883984C2.40235 3.40996 3.84457 4.45213 4.00484 4.67231C4.13717 4.85412 4.08737 5.01757 3.86067 5.14567C3.7346 5.21689 3.47541 5.28905 3.34564 5.28905C3.19887 5.28905 3.14847 5.23278 3.14847 5.23278C3.06337 5.15255 3.01544 5.16658 2.5784 4.39555C1.97166 3.45981 1.46389 2.68357 1.45004 2.67057C1.41801 2.64052 1.41856 2.64153 2.51654 4.59413C2.69394 5.0011 2.55182 5.15049 2.55182 5.20845C2.55182 5.32636 2.51946 5.38834 2.37311 5.55059C2.12914 5.8211 2.02008 6.12505 1.94135 6.7541C1.8531 7.45926 1.60492 7.95737 0.917156 8.80989C0.514562 9.30893 0.448686 9.4004 0.3471 9.60153C0.219144 9.85482 0.183961 9.99669 0.169701 10.3165C0.154629 10.6547 0.183983 10.8732 0.287934 11.1965C0.378939 11.4796 0.473932 11.6665 0.716778 12.0403C0.926351 12.3629 1.04702 12.6027 1.04702 12.6965C1.04702 12.7711 1.06136 12.7712 1.38611 12.6983C2.16328 12.5239 2.79434 12.2171 3.14925 11.8411C3.36891 11.6084 3.42048 11.4799 3.42215 11.1611C3.42325 10.9525 3.41587 10.9088 3.35914 10.7888C3.2668 10.5935 3.09869 10.4311 2.72817 10.1794C2.2427 9.84953 2.03534 9.58398 1.97807 9.21878C1.93108 8.91913 1.98559 8.70771 2.25416 8.14825C2.53214 7.56916 2.60103 7.32239 2.64763 6.73869C2.67773 6.36158 2.71941 6.21286 2.82842 6.09348C2.94212 5.969 3.04447 5.92684 3.32584 5.88863C3.78457 5.82635 4.07667 5.70839 4.31677 5.48849C4.52505 5.29772 4.61221 5.11391 4.62558 4.8372L4.63574 4.62747L4.51934 4.49259C4.09783 4.00411 0.0261003 0.5 0.000160437 0.5C-0.00538105 0.5 0.133325 0.672804 0.308383 0.883984ZM1.28364 10.6992C1.37894 10.5314 1.3283 10.3158 1.16889 10.2104C1.01827 10.1109 0.78428 10.1578 0.78428 10.2875C0.78428 10.3271 0.806303 10.3559 0.855937 10.3813C0.939514 10.424 0.945581 10.4721 0.879823 10.5703C0.81323 10.6698 0.818604 10.7573 0.894991 10.8167C1.0181 10.9125 1.19237 10.8598 1.28364 10.6992Z" +})), _path9 || (_path9 = /*#__PURE__*/React.createElement("path", { + fillRule: "evenodd", + clipRule: "evenodd", + d: "M4.92523 5.99865C4.70988 6.06439 4.50054 6.29124 4.43574 6.5291C4.39621 6.67421 4.41864 6.92875 4.47785 7.00736C4.57351 7.13433 4.66602 7.16778 4.91651 7.16603C5.40693 7.16263 5.83327 6.95358 5.88284 6.69224C5.92347 6.47801 5.73622 6.18112 5.4783 6.05078C5.34521 5.98355 5.06217 5.95688 4.92523 5.99865ZM5.49853 6.44422C5.57416 6.33741 5.54107 6.22198 5.41245 6.14391C5.1675 5.99525 4.79708 6.11827 4.79708 6.34826C4.79708 6.46274 4.99025 6.58765 5.16731 6.58765C5.28516 6.58765 5.44644 6.5178 5.49853 6.44422Z" +})))); +var UNISWAP_LOGO_URL = "data:image/svg+xml,%3Csvg%20width%3D%2214%22%20height%3D%2215%22%20viewBox%3D%220%200%2014%2015%22%20fill%3D%22black%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20style%3D%22mix-blend-mode%3Adarken%22%3E%3Cpath%20d%3D%22M4.15217%201.55141C3.96412%201.52242%203.95619%201.51902%204.04468%201.5055C4.21427%201.47958%204.61472%201.51491%204.89067%201.58012C5.53489%201.73232%206.12109%202.12221%206.74683%202.81466L6.91307%202.99862L7.15088%202.96062C8.15274%202.8006%209.17194%202.92778%2010.0244%203.31918C10.2589%203.42686%2010.6287%203.64121%2010.6749%203.69629C10.6896%203.71384%2010.7166%203.82684%2010.7349%203.94742C10.7982%204.36458%2010.7665%204.68434%2010.6382%204.92317C10.5683%205.05313%2010.5644%205.09432%2010.6114%205.20554C10.6489%205.2943%2010.7534%205.35999%2010.8569%205.35985C11.0687%205.35956%2011.2968%205.0192%2011.4024%204.54561L11.4444%204.3575L11.5275%204.45109C11.9835%204.96459%2012.3417%205.66488%2012.4032%206.16335L12.4192%206.29332L12.3426%206.17517C12.2107%205.97186%2012.0781%205.83346%2011.9084%205.72183C11.6024%205.52062%2011.2789%205.45215%2010.4222%205.40727C9.64839%205.36675%209.21045%205.30106%208.77621%205.16032C8.03738%204.9209%207.66493%204.60204%206.78729%203.4576C6.39748%202.94928%206.15654%202.66804%205.91687%202.44155C5.37228%201.92691%204.83716%201.65701%204.15217%201.55141Z%22%2F%3E%3Cpath%20d%3D%22M10.8494%202.68637C10.8689%202.34575%2010.9153%202.12108%2011.0088%201.9159C11.0458%201.83469%2011.0804%201.76822%2011.0858%201.76822C11.0911%201.76822%2011.075%201.82816%2011.05%201.90142C10.9821%202.10054%2010.9709%202.3729%2011.0177%202.68978C11.0771%203.09184%2011.1109%203.14985%2011.5385%203.58416C11.739%203.78788%2011.9723%204.0448%2012.0568%204.15511L12.2106%204.35568L12.0568%204.21234C11.8688%204.03705%2011.4364%203.6952%2011.3409%203.64633C11.2768%203.61356%2011.2673%203.61413%2011.2278%203.65321C11.1914%203.68922%2011.1837%203.74333%2011.1787%203.99915C11.1708%204.39786%2011.1161%204.65377%2010.9842%204.90965C10.9128%205.04805%2010.9015%205.01851%2010.9661%204.8623C11.0143%204.74566%2011.0192%204.69439%2011.0189%204.30842C11.0181%203.53291%2010.9255%203.34647%2010.3823%203.02709C10.2447%202.94618%2010.0179%202.8295%209.87839%202.76778C9.73887%202.70606%209.62805%202.6523%209.63208%202.64828C9.64746%202.63307%2010.1772%202.78675%2010.3905%202.86828C10.7077%202.98954%2010.76%203.00526%2010.7985%202.99063C10.8244%202.98082%2010.8369%202.90608%2010.8494%202.68637Z%22%2F%3E%3Cpath%20d%3D%22M4.51745%204.01304C4.13569%203.49066%203.89948%202.68973%203.95062%202.091L3.96643%201.90572L4.05333%201.92148C4.21652%201.95106%204.49789%202.05515%204.62964%202.13469C4.9912%202.35293%205.14773%202.64027%205.30697%203.37811C5.35362%203.59423%205.41482%203.8388%205.44298%203.9216C5.48831%204.05487%205.65962%204.36617%205.7989%204.56834C5.89922%204.71395%205.83258%204.78295%205.61082%204.76305C5.27215%204.73267%204.8134%204.41799%204.51745%204.01304Z%22%2F%3E%3Cpath%20d%3D%22M10.3863%207.90088C8.60224%207.18693%207.97389%206.56721%207.97389%205.52157C7.97389%205.36769%207.97922%205.24179%207.98571%205.24179C7.99221%205.24179%208.06124%205.29257%208.1391%205.35465C8.50088%205.64305%208.906%205.76623%2010.0275%205.92885C10.6875%206.02455%2011.0589%206.10185%2011.4015%206.21477C12.4904%206.57371%2013.1641%207.30212%2013.3248%208.29426C13.3715%208.58255%2013.3441%209.12317%2013.2684%209.4081C13.2087%209.63315%2013.0263%2010.0388%2012.9779%2010.0544C12.9645%2010.0587%2012.9514%2010.0076%2012.9479%209.93809C12.9296%209.56554%2012.7402%209.20285%2012.4221%208.93116C12.0604%208.62227%2011.5745%208.37633%2010.3863%207.90088Z%22%2F%3E%3Cpath%20d%3D%22M9.13385%208.19748C9.11149%208.06527%209.07272%207.89643%209.04769%207.82228L9.00217%207.68748L9.08672%207.7818C9.20374%207.91233%209.2962%208.07937%209.37457%208.30185C9.43438%208.47165%209.44111%208.52215%209.44066%208.79807C9.4402%209.06896%209.43273%209.12575%209.3775%209.27858C9.29042%209.51959%209.18233%209.69048%209.00097%209.87391C8.67507%2010.2036%208.25607%2010.3861%207.65143%2010.4618C7.54633%2010.4749%207.24%2010.4971%206.97069%2010.511C6.292%2010.5461%205.84531%2010.6186%205.44393%2010.7587C5.38623%2010.7788%205.3347%2010.7911%205.32947%2010.7859C5.31323%2010.7698%205.58651%2010.6079%205.81223%2010.4998C6.1305%2010.3474%206.44733%2010.2643%207.15719%2010.1468C7.50785%2010.0887%207.86998%2010.0183%207.96194%209.99029C8.83033%209.72566%209.27671%209.04276%209.13385%208.19748Z%22%2F%3E%3Cpath%20d%3D%22M9.95169%209.64109C9.71465%209.13463%209.66022%208.64564%209.79009%208.18961C9.80399%208.14088%209.82632%208.101%209.83976%208.101C9.85319%208.101%209.90913%208.13105%209.96404%208.16777C10.0733%208.24086%2010.2924%208.36395%2010.876%208.68023C11.6043%209.0749%2012.0196%209.3805%2012.302%209.72965C12.5493%2010.0354%2012.7023%2010.3837%2012.776%2010.8084C12.8177%2011.0489%2012.7932%2011.6277%2012.7311%2011.8699C12.5353%2012.6337%2012.0802%2013.2336%2011.4311%2013.5837C11.336%2013.635%2011.2506%2013.6771%2011.2414%2013.6773C11.2321%2013.6775%2011.2668%2013.5899%2011.3184%2013.4827C11.5367%2013.029%2011.5616%2012.5877%2011.3965%2012.0965C11.2954%2011.7957%2011.0893%2011.4287%2010.6732%2010.8084C10.1893%2010.0873%2010.0707%209.89539%209.95169%209.64109Z%22%2F%3E%3Cpath%20d%3D%22M3.25046%2012.3737C3.91252%2011.8181%204.73629%2011.4234%205.48666%2011.3022C5.81005%2011.25%206.34877%2011.2707%206.64823%2011.3469C7.12824%2011.469%207.55763%2011.7425%207.78094%2012.0683C7.99918%2012.3867%208.09281%2012.6642%208.19029%2013.2816C8.22875%2013.5252%208.27057%2013.7697%208.28323%2013.8251C8.35644%2014.1451%208.4989%2014.4008%208.67544%2014.5293C8.95583%2014.7333%209.43865%2014.7459%209.91362%2014.5618C9.99423%2014.5305%2010.0642%2014.5089%2010.0691%2014.5138C10.0864%2014.5308%209.84719%2014.6899%209.67847%2014.7737C9.45143%2014.8864%209.2709%2014.93%209.03102%2014.93C8.59601%2014.93%208.23486%2014.7101%207.9335%2014.2616C7.87419%2014.1733%207.7409%2013.909%207.63729%2013.6741C7.3191%2012.9528%207.16199%2012.7331%206.79255%2012.4926C6.47104%2012.2834%206.05641%2012.2459%205.74449%2012.3979C5.33475%2012.5976%205.22043%2013.118%205.51389%2013.4478C5.63053%2013.5789%205.84803%2013.6919%206.02588%2013.7139C6.35861%2013.7551%206.64455%2013.5035%206.64455%2013.1696C6.64455%2012.9528%206.56071%2012.8291%206.34966%2012.7344C6.0614%2012.6051%205.75156%2012.7562%205.75304%2013.0254C5.75368%2013.1402%205.80396%2013.2122%205.91971%2013.2643C5.99397%2013.2977%205.99569%2013.3003%205.93514%2013.2878C5.67066%2013.2333%205.6087%2012.9164%205.82135%2012.706C6.07667%2012.4535%206.60461%2012.5649%206.78591%2012.9097C6.86208%2013.0545%206.87092%2013.3429%206.80451%2013.517C6.6559%2013.9068%206.22256%2014.1117%205.78297%2014.0002C5.48368%2013.9242%205.36181%2013.842%205.00097%2013.4726C4.37395%2012.8306%204.13053%2012.7062%203.22657%2012.566L3.05335%2012.5391L3.25046%2012.3737Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M0.308383%200.883984C2.40235%203.40996%203.84457%204.45213%204.00484%204.67231C4.13717%204.85412%204.08737%205.01757%203.86067%205.14567C3.7346%205.21689%203.47541%205.28905%203.34564%205.28905C3.19887%205.28905%203.14847%205.23278%203.14847%205.23278C3.06337%205.15255%203.01544%205.16658%202.5784%204.39555C1.97166%203.45981%201.46389%202.68357%201.45004%202.67057C1.41801%202.64052%201.41856%202.64153%202.51654%204.59413C2.69394%205.0011%202.55182%205.15049%202.55182%205.20845C2.55182%205.32636%202.51946%205.38834%202.37311%205.55059C2.12914%205.8211%202.02008%206.12505%201.94135%206.7541C1.8531%207.45926%201.60492%207.95737%200.917156%208.80989C0.514562%209.30893%200.448686%209.4004%200.3471%209.60153C0.219144%209.85482%200.183961%209.99669%200.169701%2010.3165C0.154629%2010.6547%200.183983%2010.8732%200.287934%2011.1965C0.378939%2011.4796%200.473932%2011.6665%200.716778%2012.0403C0.926351%2012.3629%201.04702%2012.6027%201.04702%2012.6965C1.04702%2012.7711%201.06136%2012.7712%201.38611%2012.6983C2.16328%2012.5239%202.79434%2012.2171%203.14925%2011.8411C3.36891%2011.6084%203.42048%2011.4799%203.42215%2011.1611C3.42325%2010.9525%203.41587%2010.9088%203.35914%2010.7888C3.2668%2010.5935%203.09869%2010.4311%202.72817%2010.1794C2.2427%209.84953%202.03534%209.58398%201.97807%209.21878C1.93108%208.91913%201.98559%208.70771%202.25416%208.14825C2.53214%207.56916%202.60103%207.32239%202.64763%206.73869C2.67773%206.36158%202.71941%206.21286%202.82842%206.09348C2.94212%205.969%203.04447%205.92684%203.32584%205.88863C3.78457%205.82635%204.07667%205.70839%204.31677%205.48849C4.52505%205.29772%204.61221%205.11391%204.62558%204.8372L4.63574%204.62747L4.51934%204.49259C4.09783%204.00411%200.0261003%200.5%200.000160437%200.5C-0.00538105%200.5%200.133325%200.672804%200.308383%200.883984ZM1.28364%2010.6992C1.37894%2010.5314%201.3283%2010.3158%201.16889%2010.2104C1.01827%2010.1109%200.78428%2010.1578%200.78428%2010.2875C0.78428%2010.3271%200.806303%2010.3559%200.855937%2010.3813C0.939514%2010.424%200.945581%2010.4721%200.879823%2010.5703C0.81323%2010.6698%200.818604%2010.7573%200.894991%2010.8167C1.0181%2010.9125%201.19237%2010.8598%201.28364%2010.6992Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M4.92523%205.99865C4.70988%206.06439%204.50054%206.29124%204.43574%206.5291C4.39621%206.67421%204.41864%206.92875%204.47785%207.00736C4.57351%207.13433%204.66602%207.16778%204.91651%207.16603C5.40693%207.16263%205.83327%206.95358%205.88284%206.69224C5.92347%206.47801%205.73622%206.18112%205.4783%206.05078C5.34521%205.98355%205.06217%205.95688%204.92523%205.99865ZM5.49853%206.44422C5.57416%206.33741%205.54107%206.22198%205.41245%206.14391C5.1675%205.99525%204.79708%206.11827%204.79708%206.34826C4.79708%206.46274%204.99025%206.58765%205.16731%206.58765C5.28516%206.58765%205.44644%206.5178%205.49853%206.44422Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"; + +var ContentWrapper$3 = styled(AutoColumn)(templateObject_1$18 || (templateObject_1$18 = __makeTemplateObject(["\n width: 100%;\n"], ["\n width: 100%;\n"]))); +var ModalUpper = styled(DataCard)(templateObject_2$Q || (templateObject_2$Q = __makeTemplateObject(["\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n"], ["\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n"]))); +var ConfirmOrLoadingWrapper = styled.div(templateObject_3$I || (templateObject_3$I = __makeTemplateObject(["\n width: 100%;\n padding: 24px;\n position: relative;\n background: ", ";\n"], ["\n width: 100%;\n padding: 24px;\n position: relative;\n background: ", ";\n"])), function (_a) { + var activeBG = _a.activeBG; + return activeBG && + 'radial-gradient(76.02% 75.41% at 1.84% 0%, rgba(255, 0, 122, 0.2) 0%, rgba(33, 114, 229, 0.2) 100%), #FFFFFF;'; +}); +var ConfirmedIcon$1 = styled(ColumnCenter)(templateObject_4$x || (templateObject_4$x = __makeTemplateObject(["\n padding: 60px 0;\n"], ["\n padding: 60px 0;\n"]))); +var SOCKS_AMOUNT = 1000; +var USER_AMOUNT = 400; +function ClaimModal() { + var _a, _b, _c, _d, _e, _f, _g; + var isOpen = useModalOpen(ApplicationModal.SELF_CLAIM); + var toggleClaimModal = useToggleSelfClaimModal(); + var _h = useActiveWeb3React(), account = _h.account, chainId = _h.chainId; + // used for UI loading states + var _j = __read(useState(false), 2), attempting = _j[0], setAttempting = _j[1]; + // get user claim data + var userClaimData = useUserClaimData(account); + // monitor the status of the claim from contracts and txns + var claimCallback = useClaimCallback(account).claimCallback; + var unclaimedAmount = useUserUnclaimedAmount(account); + var _k = useUserHasSubmittedClaim(account !== null && account !== void 0 ? account : undefined), claimSubmitted = _k.claimSubmitted, claimTxn = _k.claimTxn; + var claimConfirmed = Boolean(claimTxn === null || claimTxn === void 0 ? void 0 : claimTxn.receipt); + function onClaim() { + setAttempting(true); + claimCallback() + // reset modal and log error + .catch(function (error) { + setAttempting(false); + console.log(error); + }); + } + // once confirmed txn is found, if modal is closed open, mark as not attempting regradless + useEffect(function () { + if (claimConfirmed && claimSubmitted && attempting) { + setAttempting(false); + if (!isOpen) { + toggleClaimModal(); + } + } + }, [attempting, claimConfirmed, claimSubmitted, isOpen, toggleClaimModal]); + var nonLPAmount = JSBI.multiply(JSBI.BigInt((((_a = userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.flags) === null || _a === void 0 ? void 0 : _a.isSOCKS) ? SOCKS_AMOUNT : 0) + (((_b = userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.flags) === null || _b === void 0 ? void 0 : _b.isUser) ? USER_AMOUNT : 0)), JSBI.exponentiate(JSBI.BigInt(10), JSBI.BigInt(18))); + return (jsxs(Modal, __assign({ isOpen: isOpen, onDismiss: toggleClaimModal, maxHeight: 90 }, { children: [jsx(Confetti, { start: Boolean(isOpen && claimConfirmed) }, void 0), !attempting && !claimConfirmed && (jsxs(ContentWrapper$3, __assign({ gap: "lg" }, { children: [jsxs(ModalUpper, { children: [jsx(CardBGImage, {}, void 0), jsx(CardNoise, {}, void 0), jsxs(CardSection, __assign({ gap: "md" }, { children: [jsxs(RowBetween, { children: [jsx(ThemedText.White, __assign({ fontWeight: 500 }, { children: jsx(Trans, { children: "Claim UNI" }, void 0) }), void 0), jsx(CloseIcon$2, { onClick: toggleClaimModal, style: { zIndex: 99 }, color: "white" }, void 0)] }, void 0), jsx(ThemedText.White, __assign({ fontWeight: 700, fontSize: 36 }, { children: jsxs(Trans, { children: [unclaimedAmount === null || unclaimedAmount === void 0 ? void 0 : unclaimedAmount.toFixed(0, (_c = { groupSeparator: ',' }) !== null && _c !== void 0 ? _c : '-'), " UNI"] }, void 0) }), void 0)] }), void 0), jsx(Break$1, {}, void 0), jsxs(CardSection, __assign({ gap: "sm" }, { children: [((_d = userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.flags) === null || _d === void 0 ? void 0 : _d.isSOCKS) && (jsxs(RowBetween, { children: [jsx(ThemedText.SubHeader, __assign({ color: "white" }, { children: "SOCKS" }), void 0), jsx(ThemedText.SubHeader, __assign({ color: "white" }, { children: jsxs(Trans, { children: [SOCKS_AMOUNT, " UNI"] }, void 0) }), void 0)] }, void 0)), ((_e = userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.flags) === null || _e === void 0 ? void 0 : _e.isLP) && + unclaimedAmount && + JSBI.greaterThanOrEqual(unclaimedAmount.quotient, nonLPAmount) && (jsxs(RowBetween, { children: [jsx(ThemedText.SubHeader, __assign({ color: "white" }, { children: jsx(Trans, { children: "Liquidity" }, void 0) }), void 0), jsx(ThemedText.SubHeader, __assign({ color: "white" }, { children: jsxs(Trans, { children: [unclaimedAmount + .subtract(CurrencyAmount.fromRawAmount(unclaimedAmount.currency, nonLPAmount)) + .toFixed(0, { groupSeparator: ',' }), ' ', "UNI"] }, void 0) }), void 0)] }, void 0)), ((_f = userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.flags) === null || _f === void 0 ? void 0 : _f.isUser) && (jsxs(RowBetween, { children: [jsx(ThemedText.SubHeader, __assign({ color: "white" }, { children: jsx(Trans, { children: "User" }, void 0) }), void 0), jsx(ThemedText.SubHeader, __assign({ color: "white" }, { children: jsxs(Trans, { children: [USER_AMOUNT, " UNI"] }, void 0) }), void 0)] }, void 0))] }), void 0)] }, void 0), jsxs(AutoColumn, __assign({ gap: "md", style: { padding: '1rem', paddingTop: '0' }, justify: "center" }, { children: [jsx(ThemedText.SubHeader, __assign({ fontWeight: 500 }, { children: jsxs(Trans, { children: ["As a member of the Uniswap community you may claim UNI to be used for voting and governance.", jsx("br", {}, void 0), jsx("br", {}, void 0), jsx(ExternalLink, __assign({ href: "https://uniswap.org/blog/uni" }, { children: "Read more about UNI" }), void 0)] }, void 0) }), void 0), jsx(ButtonPrimary, __assign({ disabled: !isAddress$1(account !== null && account !== void 0 ? account : ''), padding: "16px 16px", width: "100%", "$borderRadius": "12px", mt: "1rem", onClick: onClaim }, { children: jsx(Trans, { children: "Claim UNI" }, void 0) }), void 0)] }), void 0)] }), void 0)), (attempting || claimConfirmed) && (jsxs(ConfirmOrLoadingWrapper, __assign({ activeBG: true }, { children: [jsx(CardNoise, {}, void 0), jsx(CardBGImageSmaller, { desaturate: true }, void 0), jsxs(RowBetween, { children: [jsx("div", {}, void 0), jsx(CloseIcon$2, { onClick: toggleClaimModal, style: { zIndex: 99 }, stroke: "black" }, void 0)] }, void 0), jsx(ConfirmedIcon$1, { children: !claimConfirmed ? (jsx(CustomLightSpinner, { src: Circle$1, alt: "loader", size: '90px' }, void 0)) : (jsx(UniTokenAnimated, { width: "72px", src: tokenLogo, alt: "UNI" }, void 0)) }, void 0), jsxs(AutoColumn, __assign({ gap: "100px", justify: 'center' }, { children: [jsxs(AutoColumn, __assign({ gap: "12px", justify: 'center' }, { children: [jsx(ThemedText.LargeHeader, __assign({ fontWeight: 600, color: "black" }, { children: claimConfirmed ? jsx(Trans, { children: "Claimed!" }, void 0) : jsx(Trans, { children: "Claiming" }, void 0) }), void 0), !claimConfirmed && (jsx(Text$1, __assign({ fontSize: 36, color: '#ff007a', fontWeight: 800 }, { children: jsxs(Trans, { children: [unclaimedAmount === null || unclaimedAmount === void 0 ? void 0 : unclaimedAmount.toFixed(0, (_g = { groupSeparator: ',' }) !== null && _g !== void 0 ? _g : '-'), " UNI"] }, void 0) }), void 0))] }), void 0), claimConfirmed && (jsx(Fragment, { children: jsx(ThemedText.SubHeader, __assign({ fontWeight: 500, color: "black" }, { children: jsxs(Trans, { children: [jsxs("span", __assign({ role: "img", "aria-label": "party-hat" }, { children: ["\uD83C\uDF89", ' '] }), void 0), "Welcome to team Unicorn :)", ' ', jsx("span", __assign({ role: "img", "aria-label": "party-hat" }, { children: "\uD83C\uDF89" }), void 0)] }, void 0) }), void 0) }, void 0)), attempting && !claimSubmitted && (jsx(ThemedText.SubHeader, __assign({ color: "black" }, { children: jsx(Trans, { children: "Confirm this transaction in your wallet" }, void 0) }), void 0)), attempting && claimSubmitted && !claimConfirmed && chainId && (claimTxn === null || claimTxn === void 0 ? void 0 : claimTxn.hash) && (jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, claimTxn === null || claimTxn === void 0 ? void 0 : claimTxn.hash, ExplorerDataType.TRANSACTION), style: { zIndex: 99 } }, { children: jsx(Trans, { children: "View transaction on Explorer" }, void 0) }), void 0))] }), void 0)] }), void 0))] }), void 0)); +} +var templateObject_1$18, templateObject_2$Q, templateObject_3$I, templateObject_4$x; -var _path$5, _path2$2, _path3$1, _path4, _path5, _path6, _path7, _path8, _path9 - -function _extends$7() { - _extends$7 = - 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$7.apply(this, arguments) -} +var Card = styled(Box)(templateObject_1$17 || (templateObject_1$17 = __makeTemplateObject(["\n width: ", ";\n padding: ", ";\n border-radius: ", ";\n border: ", ";\n"], ["\n width: ", ";\n padding: ", ";\n border-radius: ", ";\n border: ", ";\n"])), function (_a) { + var width = _a.width; + return width !== null && width !== void 0 ? width : '100%'; +}, function (_a) { + var padding = _a.padding; + return padding !== null && padding !== void 0 ? padding : '1rem'; +}, function (_a) { + var $borderRadius = _a.$borderRadius; + return $borderRadius !== null && $borderRadius !== void 0 ? $borderRadius : '16px'; +}, function (_a) { + var border = _a.border; + return border; +}); +var LightCard = styled(Card)(templateObject_2$P || (templateObject_2$P = __makeTemplateObject(["\n border: 1px solid ", ";\n background-color: ", ";\n"], ["\n border: 1px solid ", ";\n background-color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}, function (_a) { + var theme = _a.theme; + return theme.bg1; +}); +var LightGreyCard = styled(Card)(templateObject_3$H || (templateObject_3$H = __makeTemplateObject(["\n background-color: ", ";\n"], ["\n background-color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}); +var GreyCard = styled(Card)(templateObject_4$w || (templateObject_4$w = __makeTemplateObject(["\n background-color: ", ";\n"], ["\n background-color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg3; +}); +var DarkGreyCard = styled(Card)(templateObject_5$p || (templateObject_5$p = __makeTemplateObject(["\n background-color: ", ";\n"], ["\n background-color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg2; +}); +styled(Card)(templateObject_6$k || (templateObject_6$k = __makeTemplateObject(["\n background-color: ", ";\n"], ["\n background-color: ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg0; +}); +var OutlineCard = styled(Card)(templateObject_7$h || (templateObject_7$h = __makeTemplateObject(["\n border: 1px solid ", ";\n"], ["\n border: 1px solid ", ";\n"])), function (_a) { + var theme = _a.theme; + return theme.bg3; +}); +styled(Card)(templateObject_8$f || (templateObject_8$f = __makeTemplateObject(["\n background-color: rgba(243, 132, 30, 0.05);\n color: ", ";\n font-weight: 500;\n"], ["\n background-color: rgba(243, 132, 30, 0.05);\n color: ", ";\n font-weight: 500;\n"])), function (_a) { + var theme = _a.theme; + return theme.yellow3; +}); +styled(Card)(templateObject_9$e || (templateObject_9$e = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n border-radius: 12px;\n"], ["\n background-color: ", ";\n color: ", ";\n border-radius: 12px;\n"])), function (_a) { + var theme = _a.theme; + return theme.primary5; +}, function (_a) { + var theme = _a.theme; + return theme.blue2; +}); +var templateObject_1$17, templateObject_2$P, templateObject_3$H, templateObject_4$w, templateObject_5$p, templateObject_6$k, templateObject_7$h, templateObject_8$f, templateObject_9$e; -const SvgLogo = (props) => - /*#__PURE__*/ React.createElement( - 'svg', - _extends$7( - { - width: 14, - height: 15, - viewBox: '0 0 14 15', - fill: 'black', - xmlns: 'http://www.w3.org/2000/svg', - }, - props - ), - /*#__PURE__*/ React.createElement( - 'g', - { - style: { - mixBlendMode: 'darken', - }, - }, - _path$5 || - (_path$5 = /*#__PURE__*/ React.createElement('path', { - d: 'M4.15217 1.55141C3.96412 1.52242 3.95619 1.51902 4.04468 1.5055C4.21427 1.47958 4.61472 1.51491 4.89067 1.58012C5.53489 1.73232 6.12109 2.12221 6.74683 2.81466L6.91307 2.99862L7.15088 2.96062C8.15274 2.8006 9.17194 2.92778 10.0244 3.31918C10.2589 3.42686 10.6287 3.64121 10.6749 3.69629C10.6896 3.71384 10.7166 3.82684 10.7349 3.94742C10.7982 4.36458 10.7665 4.68434 10.6382 4.92317C10.5683 5.05313 10.5644 5.09432 10.6114 5.20554C10.6489 5.2943 10.7534 5.35999 10.8569 5.35985C11.0687 5.35956 11.2968 5.0192 11.4024 4.54561L11.4444 4.3575L11.5275 4.45109C11.9835 4.96459 12.3417 5.66488 12.4032 6.16335L12.4192 6.29332L12.3426 6.17517C12.2107 5.97186 12.0781 5.83346 11.9084 5.72183C11.6024 5.52062 11.2789 5.45215 10.4222 5.40727C9.64839 5.36675 9.21045 5.30106 8.77621 5.16032C8.03738 4.9209 7.66493 4.60204 6.78729 3.4576C6.39748 2.94928 6.15654 2.66804 5.91687 2.44155C5.37228 1.92691 4.83716 1.65701 4.15217 1.55141Z', - })), - _path2$2 || - (_path2$2 = /*#__PURE__*/ React.createElement('path', { - d: 'M10.8494 2.68637C10.8689 2.34575 10.9153 2.12108 11.0088 1.9159C11.0458 1.83469 11.0804 1.76822 11.0858 1.76822C11.0911 1.76822 11.075 1.82816 11.05 1.90142C10.9821 2.10054 10.9709 2.3729 11.0177 2.68978C11.0771 3.09184 11.1109 3.14985 11.5385 3.58416C11.739 3.78788 11.9723 4.0448 12.0568 4.15511L12.2106 4.35568L12.0568 4.21234C11.8688 4.03705 11.4364 3.6952 11.3409 3.64633C11.2768 3.61356 11.2673 3.61413 11.2278 3.65321C11.1914 3.68922 11.1837 3.74333 11.1787 3.99915C11.1708 4.39786 11.1161 4.65377 10.9842 4.90965C10.9128 5.04805 10.9015 5.01851 10.9661 4.8623C11.0143 4.74566 11.0192 4.69439 11.0189 4.30842C11.0181 3.53291 10.9255 3.34647 10.3823 3.02709C10.2447 2.94618 10.0179 2.8295 9.87839 2.76778C9.73887 2.70606 9.62805 2.6523 9.63208 2.64828C9.64746 2.63307 10.1772 2.78675 10.3905 2.86828C10.7077 2.98954 10.76 3.00526 10.7985 2.99063C10.8244 2.98082 10.8369 2.90608 10.8494 2.68637Z', - })), - _path3$1 || - (_path3$1 = /*#__PURE__*/ React.createElement('path', { - d: 'M4.51745 4.01304C4.13569 3.49066 3.89948 2.68973 3.95062 2.091L3.96643 1.90572L4.05333 1.92148C4.21652 1.95106 4.49789 2.05515 4.62964 2.13469C4.9912 2.35293 5.14773 2.64027 5.30697 3.37811C5.35362 3.59423 5.41482 3.8388 5.44298 3.9216C5.48831 4.05487 5.65962 4.36617 5.7989 4.56834C5.89922 4.71395 5.83258 4.78295 5.61082 4.76305C5.27215 4.73267 4.8134 4.41799 4.51745 4.01304Z', - })), - _path4 || - (_path4 = /*#__PURE__*/ React.createElement('path', { - d: 'M10.3863 7.90088C8.60224 7.18693 7.97389 6.56721 7.97389 5.52157C7.97389 5.36769 7.97922 5.24179 7.98571 5.24179C7.99221 5.24179 8.06124 5.29257 8.1391 5.35465C8.50088 5.64305 8.906 5.76623 10.0275 5.92885C10.6875 6.02455 11.0589 6.10185 11.4015 6.21477C12.4904 6.57371 13.1641 7.30212 13.3248 8.29426C13.3715 8.58255 13.3441 9.12317 13.2684 9.4081C13.2087 9.63315 13.0263 10.0388 12.9779 10.0544C12.9645 10.0587 12.9514 10.0076 12.9479 9.93809C12.9296 9.56554 12.7402 9.20285 12.4221 8.93116C12.0604 8.62227 11.5745 8.37633 10.3863 7.90088Z', - })), - _path5 || - (_path5 = /*#__PURE__*/ React.createElement('path', { - d: 'M9.13385 8.19748C9.11149 8.06527 9.07272 7.89643 9.04769 7.82228L9.00217 7.68748L9.08672 7.7818C9.20374 7.91233 9.2962 8.07937 9.37457 8.30185C9.43438 8.47165 9.44111 8.52215 9.44066 8.79807C9.4402 9.06896 9.43273 9.12575 9.3775 9.27858C9.29042 9.51959 9.18233 9.69048 9.00097 9.87391C8.67507 10.2036 8.25607 10.3861 7.65143 10.4618C7.54633 10.4749 7.24 10.4971 6.97069 10.511C6.292 10.5461 5.84531 10.6186 5.44393 10.7587C5.38623 10.7788 5.3347 10.7911 5.32947 10.7859C5.31323 10.7698 5.58651 10.6079 5.81223 10.4998C6.1305 10.3474 6.44733 10.2643 7.15719 10.1468C7.50785 10.0887 7.86998 10.0183 7.96194 9.99029C8.83033 9.72566 9.27671 9.04276 9.13385 8.19748Z', - })), - _path6 || - (_path6 = /*#__PURE__*/ React.createElement('path', { - d: 'M9.95169 9.64109C9.71465 9.13463 9.66022 8.64564 9.79009 8.18961C9.80399 8.14088 9.82632 8.101 9.83976 8.101C9.85319 8.101 9.90913 8.13105 9.96404 8.16777C10.0733 8.24086 10.2924 8.36395 10.876 8.68023C11.6043 9.0749 12.0196 9.3805 12.302 9.72965C12.5493 10.0354 12.7023 10.3837 12.776 10.8084C12.8177 11.0489 12.7932 11.6277 12.7311 11.8699C12.5353 12.6337 12.0802 13.2336 11.4311 13.5837C11.336 13.635 11.2506 13.6771 11.2414 13.6773C11.2321 13.6775 11.2668 13.5899 11.3184 13.4827C11.5367 13.029 11.5616 12.5877 11.3965 12.0965C11.2954 11.7957 11.0893 11.4287 10.6732 10.8084C10.1893 10.0873 10.0707 9.89539 9.95169 9.64109Z', - })), - _path7 || - (_path7 = /*#__PURE__*/ React.createElement('path', { - d: 'M3.25046 12.3737C3.91252 11.8181 4.73629 11.4234 5.48666 11.3022C5.81005 11.25 6.34877 11.2707 6.64823 11.3469C7.12824 11.469 7.55763 11.7425 7.78094 12.0683C7.99918 12.3867 8.09281 12.6642 8.19029 13.2816C8.22875 13.5252 8.27057 13.7697 8.28323 13.8251C8.35644 14.1451 8.4989 14.4008 8.67544 14.5293C8.95583 14.7333 9.43865 14.7459 9.91362 14.5618C9.99423 14.5305 10.0642 14.5089 10.0691 14.5138C10.0864 14.5308 9.84719 14.6899 9.67847 14.7737C9.45143 14.8864 9.2709 14.93 9.03102 14.93C8.59601 14.93 8.23486 14.7101 7.9335 14.2616C7.87419 14.1733 7.7409 13.909 7.63729 13.6741C7.3191 12.9528 7.16199 12.7331 6.79255 12.4926C6.47104 12.2834 6.05641 12.2459 5.74449 12.3979C5.33475 12.5976 5.22043 13.118 5.51389 13.4478C5.63053 13.5789 5.84803 13.6919 6.02588 13.7139C6.35861 13.7551 6.64455 13.5035 6.64455 13.1696C6.64455 12.9528 6.56071 12.8291 6.34966 12.7344C6.0614 12.6051 5.75156 12.7562 5.75304 13.0254C5.75368 13.1402 5.80396 13.2122 5.91971 13.2643C5.99397 13.2977 5.99569 13.3003 5.93514 13.2878C5.67066 13.2333 5.6087 12.9164 5.82135 12.706C6.07667 12.4535 6.60461 12.5649 6.78591 12.9097C6.86208 13.0545 6.87092 13.3429 6.80451 13.517C6.6559 13.9068 6.22256 14.1117 5.78297 14.0002C5.48368 13.9242 5.36181 13.842 5.00097 13.4726C4.37395 12.8306 4.13053 12.7062 3.22657 12.566L3.05335 12.5391L3.25046 12.3737Z', - })), - _path8 || - (_path8 = /*#__PURE__*/ React.createElement('path', { - fillRule: 'evenodd', - clipRule: 'evenodd', - d: 'M0.308383 0.883984C2.40235 3.40996 3.84457 4.45213 4.00484 4.67231C4.13717 4.85412 4.08737 5.01757 3.86067 5.14567C3.7346 5.21689 3.47541 5.28905 3.34564 5.28905C3.19887 5.28905 3.14847 5.23278 3.14847 5.23278C3.06337 5.15255 3.01544 5.16658 2.5784 4.39555C1.97166 3.45981 1.46389 2.68357 1.45004 2.67057C1.41801 2.64052 1.41856 2.64153 2.51654 4.59413C2.69394 5.0011 2.55182 5.15049 2.55182 5.20845C2.55182 5.32636 2.51946 5.38834 2.37311 5.55059C2.12914 5.8211 2.02008 6.12505 1.94135 6.7541C1.8531 7.45926 1.60492 7.95737 0.917156 8.80989C0.514562 9.30893 0.448686 9.4004 0.3471 9.60153C0.219144 9.85482 0.183961 9.99669 0.169701 10.3165C0.154629 10.6547 0.183983 10.8732 0.287934 11.1965C0.378939 11.4796 0.473932 11.6665 0.716778 12.0403C0.926351 12.3629 1.04702 12.6027 1.04702 12.6965C1.04702 12.7711 1.06136 12.7712 1.38611 12.6983C2.16328 12.5239 2.79434 12.2171 3.14925 11.8411C3.36891 11.6084 3.42048 11.4799 3.42215 11.1611C3.42325 10.9525 3.41587 10.9088 3.35914 10.7888C3.2668 10.5935 3.09869 10.4311 2.72817 10.1794C2.2427 9.84953 2.03534 9.58398 1.97807 9.21878C1.93108 8.91913 1.98559 8.70771 2.25416 8.14825C2.53214 7.56916 2.60103 7.32239 2.64763 6.73869C2.67773 6.36158 2.71941 6.21286 2.82842 6.09348C2.94212 5.969 3.04447 5.92684 3.32584 5.88863C3.78457 5.82635 4.07667 5.70839 4.31677 5.48849C4.52505 5.29772 4.61221 5.11391 4.62558 4.8372L4.63574 4.62747L4.51934 4.49259C4.09783 4.00411 0.0261003 0.5 0.000160437 0.5C-0.00538105 0.5 0.133325 0.672804 0.308383 0.883984ZM1.28364 10.6992C1.37894 10.5314 1.3283 10.3158 1.16889 10.2104C1.01827 10.1109 0.78428 10.1578 0.78428 10.2875C0.78428 10.3271 0.806303 10.3559 0.855937 10.3813C0.939514 10.424 0.945581 10.4721 0.879823 10.5703C0.81323 10.6698 0.818604 10.7573 0.894991 10.8167C1.0181 10.9125 1.19237 10.8598 1.28364 10.6992Z', - })), - _path9 || - (_path9 = /*#__PURE__*/ React.createElement('path', { - fillRule: 'evenodd', - clipRule: 'evenodd', - d: 'M4.92523 5.99865C4.70988 6.06439 4.50054 6.29124 4.43574 6.5291C4.39621 6.67421 4.41864 6.92875 4.47785 7.00736C4.57351 7.13433 4.66602 7.16778 4.91651 7.16603C5.40693 7.16263 5.83327 6.95358 5.88284 6.69224C5.92347 6.47801 5.73622 6.18112 5.4783 6.05078C5.34521 5.98355 5.06217 5.95688 4.92523 5.99865ZM5.49853 6.44422C5.57416 6.33741 5.54107 6.22198 5.41245 6.14391C5.1675 5.99525 4.79708 6.11827 4.79708 6.34826C4.79708 6.46274 4.99025 6.58765 5.16731 6.58765C5.28516 6.58765 5.44644 6.5178 5.49853 6.44422Z', - })) - ) - ) -var UNISWAP_LOGO_URL = - 'data:image/svg+xml,%3Csvg%20width%3D%2214%22%20height%3D%2215%22%20viewBox%3D%220%200%2014%2015%22%20fill%3D%22black%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20style%3D%22mix-blend-mode%3Adarken%22%3E%3Cpath%20d%3D%22M4.15217%201.55141C3.96412%201.52242%203.95619%201.51902%204.04468%201.5055C4.21427%201.47958%204.61472%201.51491%204.89067%201.58012C5.53489%201.73232%206.12109%202.12221%206.74683%202.81466L6.91307%202.99862L7.15088%202.96062C8.15274%202.8006%209.17194%202.92778%2010.0244%203.31918C10.2589%203.42686%2010.6287%203.64121%2010.6749%203.69629C10.6896%203.71384%2010.7166%203.82684%2010.7349%203.94742C10.7982%204.36458%2010.7665%204.68434%2010.6382%204.92317C10.5683%205.05313%2010.5644%205.09432%2010.6114%205.20554C10.6489%205.2943%2010.7534%205.35999%2010.8569%205.35985C11.0687%205.35956%2011.2968%205.0192%2011.4024%204.54561L11.4444%204.3575L11.5275%204.45109C11.9835%204.96459%2012.3417%205.66488%2012.4032%206.16335L12.4192%206.29332L12.3426%206.17517C12.2107%205.97186%2012.0781%205.83346%2011.9084%205.72183C11.6024%205.52062%2011.2789%205.45215%2010.4222%205.40727C9.64839%205.36675%209.21045%205.30106%208.77621%205.16032C8.03738%204.9209%207.66493%204.60204%206.78729%203.4576C6.39748%202.94928%206.15654%202.66804%205.91687%202.44155C5.37228%201.92691%204.83716%201.65701%204.15217%201.55141Z%22%2F%3E%3Cpath%20d%3D%22M10.8494%202.68637C10.8689%202.34575%2010.9153%202.12108%2011.0088%201.9159C11.0458%201.83469%2011.0804%201.76822%2011.0858%201.76822C11.0911%201.76822%2011.075%201.82816%2011.05%201.90142C10.9821%202.10054%2010.9709%202.3729%2011.0177%202.68978C11.0771%203.09184%2011.1109%203.14985%2011.5385%203.58416C11.739%203.78788%2011.9723%204.0448%2012.0568%204.15511L12.2106%204.35568L12.0568%204.21234C11.8688%204.03705%2011.4364%203.6952%2011.3409%203.64633C11.2768%203.61356%2011.2673%203.61413%2011.2278%203.65321C11.1914%203.68922%2011.1837%203.74333%2011.1787%203.99915C11.1708%204.39786%2011.1161%204.65377%2010.9842%204.90965C10.9128%205.04805%2010.9015%205.01851%2010.9661%204.8623C11.0143%204.74566%2011.0192%204.69439%2011.0189%204.30842C11.0181%203.53291%2010.9255%203.34647%2010.3823%203.02709C10.2447%202.94618%2010.0179%202.8295%209.87839%202.76778C9.73887%202.70606%209.62805%202.6523%209.63208%202.64828C9.64746%202.63307%2010.1772%202.78675%2010.3905%202.86828C10.7077%202.98954%2010.76%203.00526%2010.7985%202.99063C10.8244%202.98082%2010.8369%202.90608%2010.8494%202.68637Z%22%2F%3E%3Cpath%20d%3D%22M4.51745%204.01304C4.13569%203.49066%203.89948%202.68973%203.95062%202.091L3.96643%201.90572L4.05333%201.92148C4.21652%201.95106%204.49789%202.05515%204.62964%202.13469C4.9912%202.35293%205.14773%202.64027%205.30697%203.37811C5.35362%203.59423%205.41482%203.8388%205.44298%203.9216C5.48831%204.05487%205.65962%204.36617%205.7989%204.56834C5.89922%204.71395%205.83258%204.78295%205.61082%204.76305C5.27215%204.73267%204.8134%204.41799%204.51745%204.01304Z%22%2F%3E%3Cpath%20d%3D%22M10.3863%207.90088C8.60224%207.18693%207.97389%206.56721%207.97389%205.52157C7.97389%205.36769%207.97922%205.24179%207.98571%205.24179C7.99221%205.24179%208.06124%205.29257%208.1391%205.35465C8.50088%205.64305%208.906%205.76623%2010.0275%205.92885C10.6875%206.02455%2011.0589%206.10185%2011.4015%206.21477C12.4904%206.57371%2013.1641%207.30212%2013.3248%208.29426C13.3715%208.58255%2013.3441%209.12317%2013.2684%209.4081C13.2087%209.63315%2013.0263%2010.0388%2012.9779%2010.0544C12.9645%2010.0587%2012.9514%2010.0076%2012.9479%209.93809C12.9296%209.56554%2012.7402%209.20285%2012.4221%208.93116C12.0604%208.62227%2011.5745%208.37633%2010.3863%207.90088Z%22%2F%3E%3Cpath%20d%3D%22M9.13385%208.19748C9.11149%208.06527%209.07272%207.89643%209.04769%207.82228L9.00217%207.68748L9.08672%207.7818C9.20374%207.91233%209.2962%208.07937%209.37457%208.30185C9.43438%208.47165%209.44111%208.52215%209.44066%208.79807C9.4402%209.06896%209.43273%209.12575%209.3775%209.27858C9.29042%209.51959%209.18233%209.69048%209.00097%209.87391C8.67507%2010.2036%208.25607%2010.3861%207.65143%2010.4618C7.54633%2010.4749%207.24%2010.4971%206.97069%2010.511C6.292%2010.5461%205.84531%2010.6186%205.44393%2010.7587C5.38623%2010.7788%205.3347%2010.7911%205.32947%2010.7859C5.31323%2010.7698%205.58651%2010.6079%205.81223%2010.4998C6.1305%2010.3474%206.44733%2010.2643%207.15719%2010.1468C7.50785%2010.0887%207.86998%2010.0183%207.96194%209.99029C8.83033%209.72566%209.27671%209.04276%209.13385%208.19748Z%22%2F%3E%3Cpath%20d%3D%22M9.95169%209.64109C9.71465%209.13463%209.66022%208.64564%209.79009%208.18961C9.80399%208.14088%209.82632%208.101%209.83976%208.101C9.85319%208.101%209.90913%208.13105%209.96404%208.16777C10.0733%208.24086%2010.2924%208.36395%2010.876%208.68023C11.6043%209.0749%2012.0196%209.3805%2012.302%209.72965C12.5493%2010.0354%2012.7023%2010.3837%2012.776%2010.8084C12.8177%2011.0489%2012.7932%2011.6277%2012.7311%2011.8699C12.5353%2012.6337%2012.0802%2013.2336%2011.4311%2013.5837C11.336%2013.635%2011.2506%2013.6771%2011.2414%2013.6773C11.2321%2013.6775%2011.2668%2013.5899%2011.3184%2013.4827C11.5367%2013.029%2011.5616%2012.5877%2011.3965%2012.0965C11.2954%2011.7957%2011.0893%2011.4287%2010.6732%2010.8084C10.1893%2010.0873%2010.0707%209.89539%209.95169%209.64109Z%22%2F%3E%3Cpath%20d%3D%22M3.25046%2012.3737C3.91252%2011.8181%204.73629%2011.4234%205.48666%2011.3022C5.81005%2011.25%206.34877%2011.2707%206.64823%2011.3469C7.12824%2011.469%207.55763%2011.7425%207.78094%2012.0683C7.99918%2012.3867%208.09281%2012.6642%208.19029%2013.2816C8.22875%2013.5252%208.27057%2013.7697%208.28323%2013.8251C8.35644%2014.1451%208.4989%2014.4008%208.67544%2014.5293C8.95583%2014.7333%209.43865%2014.7459%209.91362%2014.5618C9.99423%2014.5305%2010.0642%2014.5089%2010.0691%2014.5138C10.0864%2014.5308%209.84719%2014.6899%209.67847%2014.7737C9.45143%2014.8864%209.2709%2014.93%209.03102%2014.93C8.59601%2014.93%208.23486%2014.7101%207.9335%2014.2616C7.87419%2014.1733%207.7409%2013.909%207.63729%2013.6741C7.3191%2012.9528%207.16199%2012.7331%206.79255%2012.4926C6.47104%2012.2834%206.05641%2012.2459%205.74449%2012.3979C5.33475%2012.5976%205.22043%2013.118%205.51389%2013.4478C5.63053%2013.5789%205.84803%2013.6919%206.02588%2013.7139C6.35861%2013.7551%206.64455%2013.5035%206.64455%2013.1696C6.64455%2012.9528%206.56071%2012.8291%206.34966%2012.7344C6.0614%2012.6051%205.75156%2012.7562%205.75304%2013.0254C5.75368%2013.1402%205.80396%2013.2122%205.91971%2013.2643C5.99397%2013.2977%205.99569%2013.3003%205.93514%2013.2878C5.67066%2013.2333%205.6087%2012.9164%205.82135%2012.706C6.07667%2012.4535%206.60461%2012.5649%206.78591%2012.9097C6.86208%2013.0545%206.87092%2013.3429%206.80451%2013.517C6.6559%2013.9068%206.22256%2014.1117%205.78297%2014.0002C5.48368%2013.9242%205.36181%2013.842%205.00097%2013.4726C4.37395%2012.8306%204.13053%2012.7062%203.22657%2012.566L3.05335%2012.5391L3.25046%2012.3737Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M0.308383%200.883984C2.40235%203.40996%203.84457%204.45213%204.00484%204.67231C4.13717%204.85412%204.08737%205.01757%203.86067%205.14567C3.7346%205.21689%203.47541%205.28905%203.34564%205.28905C3.19887%205.28905%203.14847%205.23278%203.14847%205.23278C3.06337%205.15255%203.01544%205.16658%202.5784%204.39555C1.97166%203.45981%201.46389%202.68357%201.45004%202.67057C1.41801%202.64052%201.41856%202.64153%202.51654%204.59413C2.69394%205.0011%202.55182%205.15049%202.55182%205.20845C2.55182%205.32636%202.51946%205.38834%202.37311%205.55059C2.12914%205.8211%202.02008%206.12505%201.94135%206.7541C1.8531%207.45926%201.60492%207.95737%200.917156%208.80989C0.514562%209.30893%200.448686%209.4004%200.3471%209.60153C0.219144%209.85482%200.183961%209.99669%200.169701%2010.3165C0.154629%2010.6547%200.183983%2010.8732%200.287934%2011.1965C0.378939%2011.4796%200.473932%2011.6665%200.716778%2012.0403C0.926351%2012.3629%201.04702%2012.6027%201.04702%2012.6965C1.04702%2012.7711%201.06136%2012.7712%201.38611%2012.6983C2.16328%2012.5239%202.79434%2012.2171%203.14925%2011.8411C3.36891%2011.6084%203.42048%2011.4799%203.42215%2011.1611C3.42325%2010.9525%203.41587%2010.9088%203.35914%2010.7888C3.2668%2010.5935%203.09869%2010.4311%202.72817%2010.1794C2.2427%209.84953%202.03534%209.58398%201.97807%209.21878C1.93108%208.91913%201.98559%208.70771%202.25416%208.14825C2.53214%207.56916%202.60103%207.32239%202.64763%206.73869C2.67773%206.36158%202.71941%206.21286%202.82842%206.09348C2.94212%205.969%203.04447%205.92684%203.32584%205.88863C3.78457%205.82635%204.07667%205.70839%204.31677%205.48849C4.52505%205.29772%204.61221%205.11391%204.62558%204.8372L4.63574%204.62747L4.51934%204.49259C4.09783%204.00411%200.0261003%200.5%200.000160437%200.5C-0.00538105%200.5%200.133325%200.672804%200.308383%200.883984ZM1.28364%2010.6992C1.37894%2010.5314%201.3283%2010.3158%201.16889%2010.2104C1.01827%2010.1109%200.78428%2010.1578%200.78428%2010.2875C0.78428%2010.3271%200.806303%2010.3559%200.855937%2010.3813C0.939514%2010.424%200.945581%2010.4721%200.879823%2010.5703C0.81323%2010.6698%200.818604%2010.7573%200.894991%2010.8167C1.0181%2010.9125%201.19237%2010.8598%201.28364%2010.6992Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M4.92523%205.99865C4.70988%206.06439%204.50054%206.29124%204.43574%206.5291C4.39621%206.67421%204.41864%206.92875%204.47785%207.00736C4.57351%207.13433%204.66602%207.16778%204.91651%207.16603C5.40693%207.16263%205.83327%206.95358%205.88284%206.69224C5.92347%206.47801%205.73622%206.18112%205.4783%206.05078C5.34521%205.98355%205.06217%205.95688%204.92523%205.99865ZM5.49853%206.44422C5.57416%206.33741%205.54107%206.22198%205.41245%206.14391C5.1675%205.99525%204.79708%206.11827%204.79708%206.34826C4.79708%206.46274%204.99025%206.58765%205.16731%206.58765C5.28516%206.58765%205.44644%206.5178%205.49853%206.44422Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E' - -var ContentWrapper$3 = styled(AutoColumn)( - templateObject_1$18 || (templateObject_1$18 = __makeTemplateObject(['\n width: 100%;\n'], ['\n width: 100%;\n'])) -) -var ModalUpper = styled(DataCard)( - templateObject_2$Q || - (templateObject_2$Q = __makeTemplateObject( - [ - '\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n', - ], - [ - '\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n', - ] - )) -) -var ConfirmOrLoadingWrapper = styled.div( - templateObject_3$I || - (templateObject_3$I = __makeTemplateObject( - ['\n width: 100%;\n padding: 24px;\n position: relative;\n background: ', ';\n'], - ['\n width: 100%;\n padding: 24px;\n position: relative;\n background: ', ';\n'] - )), - function (_a) { - var activeBG = _a.activeBG - return ( - activeBG && - 'radial-gradient(76.02% 75.41% at 1.84% 0%, rgba(255, 0, 122, 0.2) 0%, rgba(33, 114, 229, 0.2) 100%), #FFFFFF;' - ) - } -) -var ConfirmedIcon$1 = styled(ColumnCenter)( - templateObject_4$x || - (templateObject_4$x = __makeTemplateObject(['\n padding: 60px 0;\n'], ['\n padding: 60px 0;\n'])) -) -var SOCKS_AMOUNT = 1000 -var USER_AMOUNT = 400 -function ClaimModal() { - var _a, _b, _c, _d, _e, _f, _g - var isOpen = useModalOpen(ApplicationModal.SELF_CLAIM) - var toggleClaimModal = useToggleSelfClaimModal() - var _h = useActiveWeb3React(), - account = _h.account, - chainId = _h.chainId - // used for UI loading states - var _j = __read(useState(false), 2), - attempting = _j[0], - setAttempting = _j[1] - // get user claim data - var userClaimData = useUserClaimData(account) - // monitor the status of the claim from contracts and txns - var claimCallback = useClaimCallback(account).claimCallback - var unclaimedAmount = useUserUnclaimedAmount(account) - var _k = useUserHasSubmittedClaim(account !== null && account !== void 0 ? account : undefined), - claimSubmitted = _k.claimSubmitted, - claimTxn = _k.claimTxn - var claimConfirmed = Boolean(claimTxn === null || claimTxn === void 0 ? void 0 : claimTxn.receipt) - function onClaim() { - setAttempting(true) - claimCallback() - // reset modal and log error - .catch(function (error) { - setAttempting(false) - console.log(error) - }) - } - // once confirmed txn is found, if modal is closed open, mark as not attempting regradless - useEffect( - function () { - if (claimConfirmed && claimSubmitted && attempting) { - setAttempting(false) - if (!isOpen) { - toggleClaimModal() - } - } - }, - [attempting, claimConfirmed, claimSubmitted, isOpen, toggleClaimModal] - ) - var nonLPAmount = JSBI.multiply( - JSBI.BigInt( - (( - (_a = userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.flags) === null || - _a === void 0 - ? void 0 - : _a.isSOCKS - ) - ? SOCKS_AMOUNT - : 0) + - (( - (_b = userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.flags) === null || - _b === void 0 - ? void 0 - : _b.isUser - ) - ? USER_AMOUNT - : 0) - ), - JSBI.exponentiate(JSBI.BigInt(10), JSBI.BigInt(18)) - ) - return jsxs( - Modal, - __assign( - { isOpen, onDismiss: toggleClaimModal, maxHeight: 90 }, - { - children: [ - jsx(Confetti, { start: Boolean(isOpen && claimConfirmed) }, void 0), - !attempting && - !claimConfirmed && - jsxs( - ContentWrapper$3, - __assign( - { gap: 'lg' }, - { - children: [ - jsxs( - ModalUpper, - { - children: [ - jsx(CardBGImage, {}, void 0), - jsx(CardNoise, {}, void 0), - jsxs( - CardSection, - __assign( - { gap: 'md' }, - { - children: [ - jsxs( - RowBetween, - { - children: [ - jsx( - ThemedText.White, - __assign( - { fontWeight: 500 }, - { children: jsx(Trans, { children: 'Claim UNI' }, void 0) } - ), - void 0 - ), - jsx( - CloseIcon$2, - { onClick: toggleClaimModal, style: { zIndex: 99 }, color: 'white' }, - void 0 - ), - ], - }, - void 0 - ), - jsx( - ThemedText.White, - __assign( - { fontWeight: 700, fontSize: 36 }, - { - children: jsxs( - Trans, - { - children: [ - unclaimedAmount === null || unclaimedAmount === void 0 - ? void 0 - : unclaimedAmount.toFixed( - 0, - (_c = { groupSeparator: ',' }) !== null && _c !== void 0 ? _c : '-' - ), - ' UNI', - ], - }, - void 0 - ), - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - jsx(Break$1, {}, void 0), - jsxs( - CardSection, - __assign( - { gap: 'sm' }, - { - children: [ - ((_d = - userClaimData === null || userClaimData === void 0 - ? void 0 - : userClaimData.flags) === null || _d === void 0 - ? void 0 - : _d.isSOCKS) && - jsxs( - RowBetween, - { - children: [ - jsx( - ThemedText.SubHeader, - __assign({ color: 'white' }, { children: 'SOCKS' }), - void 0 - ), - jsx( - ThemedText.SubHeader, - __assign( - { color: 'white' }, - { children: jsxs(Trans, { children: [SOCKS_AMOUNT, ' UNI'] }, void 0) } - ), - void 0 - ), - ], - }, - void 0 - ), - ((_e = - userClaimData === null || userClaimData === void 0 - ? void 0 - : userClaimData.flags) === null || _e === void 0 - ? void 0 - : _e.isLP) && - unclaimedAmount && - JSBI.greaterThanOrEqual(unclaimedAmount.quotient, nonLPAmount) && - jsxs( - RowBetween, - { - children: [ - jsx( - ThemedText.SubHeader, - __assign( - { color: 'white' }, - { children: jsx(Trans, { children: 'Liquidity' }, void 0) } - ), - void 0 - ), - jsx( - ThemedText.SubHeader, - __assign( - { color: 'white' }, - { - children: jsxs( - Trans, - { - children: [ - unclaimedAmount - .subtract( - CurrencyAmount.fromRawAmount( - unclaimedAmount.currency, - nonLPAmount - ) - ) - .toFixed(0, { groupSeparator: ',' }), - ' ', - 'UNI', - ], - }, - void 0 - ), - } - ), - void 0 - ), - ], - }, - void 0 - ), - ((_f = - userClaimData === null || userClaimData === void 0 - ? void 0 - : userClaimData.flags) === null || _f === void 0 - ? void 0 - : _f.isUser) && - jsxs( - RowBetween, - { - children: [ - jsx( - ThemedText.SubHeader, - __assign( - { color: 'white' }, - { children: jsx(Trans, { children: 'User' }, void 0) } - ), - void 0 - ), - jsx( - ThemedText.SubHeader, - __assign( - { color: 'white' }, - { children: jsxs(Trans, { children: [USER_AMOUNT, ' UNI'] }, void 0) } - ), - void 0 - ), - ], - }, - void 0 - ), - ], - } - ), - void 0 - ), - ], - }, - void 0 - ), - jsxs( - AutoColumn, - __assign( - { gap: 'md', style: { padding: '1rem', paddingTop: '0' }, justify: 'center' }, - { - children: [ - jsx( - ThemedText.SubHeader, - __assign( - { fontWeight: 500 }, - { - children: jsxs( - Trans, - { - children: [ - 'As a member of the Uniswap community you may claim UNI to be used for voting and governance.', - jsx('br', {}, void 0), - jsx('br', {}, void 0), - jsx( - ExternalLink, - __assign( - { href: 'https://uniswap.org/blog/uni' }, - { children: 'Read more about UNI' } - ), - void 0 - ), - ], - }, - void 0 - ), - } - ), - void 0 - ), - jsx( - ButtonPrimary, - __assign( - { - disabled: !isAddress$1(account !== null && account !== void 0 ? account : ''), - padding: '16px 16px', - width: '100%', - $borderRadius: '12px', - mt: '1rem', - onClick: onClaim, - }, - { children: jsx(Trans, { children: 'Claim UNI' }, void 0) } - ), - void 0 - ), - ], - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - (attempting || claimConfirmed) && - jsxs( - ConfirmOrLoadingWrapper, - __assign( - { activeBG: true }, - { - children: [ - jsx(CardNoise, {}, void 0), - jsx(CardBGImageSmaller, { desaturate: true }, void 0), - jsxs( - RowBetween, - { - children: [ - jsx('div', {}, void 0), - jsx( - CloseIcon$2, - { onClick: toggleClaimModal, style: { zIndex: 99 }, stroke: 'black' }, - void 0 - ), - ], - }, - void 0 - ), - jsx( - ConfirmedIcon$1, - { - children: !claimConfirmed - ? jsx(CustomLightSpinner, { src: Circle$1, alt: 'loader', size: '90px' }, void 0) - : jsx(UniTokenAnimated, { width: '72px', src: tokenLogo, alt: 'UNI' }, void 0), - }, - void 0 - ), - jsxs( - AutoColumn, - __assign( - { gap: '100px', justify: 'center' }, - { - children: [ - jsxs( - AutoColumn, - __assign( - { gap: '12px', justify: 'center' }, - { - children: [ - jsx( - ThemedText.LargeHeader, - __assign( - { fontWeight: 600, color: 'black' }, - { - children: claimConfirmed - ? jsx(Trans, { children: 'Claimed!' }, void 0) - : jsx(Trans, { children: 'Claiming' }, void 0), - } - ), - void 0 - ), - !claimConfirmed && - jsx( - Text$1, - __assign( - { fontSize: 36, color: '#ff007a', fontWeight: 800 }, - { - children: jsxs( - Trans, - { - children: [ - unclaimedAmount === null || unclaimedAmount === void 0 - ? void 0 - : unclaimedAmount.toFixed( - 0, - (_g = { groupSeparator: ',' }) !== null && _g !== void 0 - ? _g - : '-' - ), - ' UNI', - ], - }, - void 0 - ), - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - claimConfirmed && - jsx( - Fragment, - { - children: jsx( - ThemedText.SubHeader, - __assign( - { fontWeight: 500, color: 'black' }, - { - children: jsxs( - Trans, - { - children: [ - jsxs( - 'span', - __assign( - { role: 'img', 'aria-label': 'party-hat' }, - { children: ['\uD83C\uDF89', ' '] } - ), - void 0 - ), - 'Welcome to team Unicorn :)', - ' ', - jsx( - 'span', - __assign( - { role: 'img', 'aria-label': 'party-hat' }, - { children: '\uD83C\uDF89' } - ), - void 0 - ), - ], - }, - void 0 - ), - } - ), - void 0 - ), - }, - void 0 - ), - attempting && - !claimSubmitted && - jsx( - ThemedText.SubHeader, - __assign( - { color: 'black' }, - { - children: jsx( - Trans, - { children: 'Confirm this transaction in your wallet' }, - void 0 - ), - } - ), - void 0 - ), - attempting && - claimSubmitted && - !claimConfirmed && - chainId && - (claimTxn === null || claimTxn === void 0 ? void 0 : claimTxn.hash) && - jsx( - ExternalLink, - __assign( - { - href: getExplorerLink( - chainId, - claimTxn === null || claimTxn === void 0 ? void 0 : claimTxn.hash, - ExplorerDataType.TRANSACTION - ), - style: { zIndex: 99 }, - }, - { children: jsx(Trans, { children: 'View transaction on Explorer' }, void 0) } - ), - void 0 - ), - ], - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - ], - } - ), - void 0 - ) -} -var templateObject_1$18, templateObject_2$Q, templateObject_3$I, templateObject_4$x - -var Card = styled(Box)( - templateObject_1$17 || - (templateObject_1$17 = __makeTemplateObject( - ['\n width: ', ';\n padding: ', ';\n border-radius: ', ';\n border: ', ';\n'], - ['\n width: ', ';\n padding: ', ';\n border-radius: ', ';\n border: ', ';\n'] - )), - function (_a) { - var width = _a.width - return width !== null && width !== void 0 ? width : '100%' - }, - function (_a) { - var padding = _a.padding - return padding !== null && padding !== void 0 ? padding : '1rem' - }, - function (_a) { - var $borderRadius = _a.$borderRadius - return $borderRadius !== null && $borderRadius !== void 0 ? $borderRadius : '16px' - }, - function (_a) { - var border = _a.border - return border - } -) -var LightCard = styled(Card)( - templateObject_2$P || - (templateObject_2$P = __makeTemplateObject( - ['\n border: 1px solid ', ';\n background-color: ', ';\n'], - ['\n border: 1px solid ', ';\n background-color: ', ';\n'] - )), - function (_a) { - var theme = _a.theme - return theme.bg2 - }, - function (_a) { - var theme = _a.theme - return theme.bg1 - } -) -var LightGreyCard = styled(Card)( - templateObject_3$H || - (templateObject_3$H = __makeTemplateObject(['\n background-color: ', ';\n'], ['\n background-color: ', ';\n'])), - function (_a) { - var theme = _a.theme - return theme.bg2 - } -) -var GreyCard = styled(Card)( - templateObject_4$w || - (templateObject_4$w = __makeTemplateObject(['\n background-color: ', ';\n'], ['\n background-color: ', ';\n'])), - function (_a) { - var theme = _a.theme - return theme.bg3 - } -) -var DarkGreyCard = styled(Card)( - templateObject_5$p || - (templateObject_5$p = __makeTemplateObject(['\n background-color: ', ';\n'], ['\n background-color: ', ';\n'])), - function (_a) { - var theme = _a.theme - return theme.bg2 - } -) -styled(Card)( - templateObject_6$k || - (templateObject_6$k = __makeTemplateObject(['\n background-color: ', ';\n'], ['\n background-color: ', ';\n'])), - function (_a) { - var theme = _a.theme - return theme.bg0 - } -) -var OutlineCard = styled(Card)( - templateObject_7$h || - (templateObject_7$h = __makeTemplateObject(['\n border: 1px solid ', ';\n'], ['\n border: 1px solid ', ';\n'])), - function (_a) { - var theme = _a.theme - return theme.bg3 - } -) -styled(Card)( - templateObject_8$f || - (templateObject_8$f = __makeTemplateObject( - ['\n background-color: rgba(243, 132, 30, 0.05);\n color: ', ';\n font-weight: 500;\n'], - ['\n background-color: rgba(243, 132, 30, 0.05);\n color: ', ';\n font-weight: 500;\n'] - )), - function (_a) { - var theme = _a.theme - return theme.yellow3 - } -) -styled(Card)( - templateObject_9$e || - (templateObject_9$e = __makeTemplateObject( - ['\n background-color: ', ';\n color: ', ';\n border-radius: 12px;\n'], - ['\n background-color: ', ';\n color: ', ';\n border-radius: 12px;\n'] - )), - function (_a) { - var theme = _a.theme - return theme.primary5 - }, - function (_a) { - var theme = _a.theme - return theme.blue2 - } -) -var templateObject_1$17, - templateObject_2$P, - templateObject_3$H, - templateObject_4$w, - templateObject_5$p, - templateObject_6$k, - templateObject_7$h, - templateObject_8$f, - templateObject_9$e - -var Wrapper$h = styled.div( - templateObject_1$16 || - (templateObject_1$16 = __makeTemplateObject( - ['\n max-height: 70vh;\n overflow: auto;\n padding: 0 1rem;\n'], - ['\n max-height: 70vh;\n overflow: auto;\n padding: 0 1rem;\n'] - )) -) -var StyledExternalCard = styled(Card)( - templateObject_2$O || - (templateObject_2$O = __makeTemplateObject( - [ - '\n background-color: ', - ';\n padding: 0.5rem;\n width: 100%;\n\n :hover,\n :focus,\n :active {\n background-color: ', - ';\n }\n', - ], - [ - '\n background-color: ', - ';\n padding: 0.5rem;\n width: 100%;\n\n :hover,\n :focus,\n :active {\n background-color: ', - ';\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.primary5 - }, - function (_a) { - var theme = _a.theme - return theme.primary4 - } -) -var HoverText$1 = styled.div( - templateObject_3$G || - (templateObject_3$G = __makeTemplateObject( - [ - '\n text-decoration: none;\n color: ', - ';\n display: flex;\n align-items: center;\n\n :hover {\n cursor: pointer;\n }\n', - ], - [ - '\n text-decoration: none;\n color: ', - ';\n display: flex;\n align-items: center;\n\n :hover {\n cursor: pointer;\n }\n', - ] - )), - function (_a) { - var theme = _a.theme - return theme.text1 - } -) -var StyledLinkOut = styled(ArrowDown)( - templateObject_4$v || - (templateObject_4$v = __makeTemplateObject( - ['\n transform: rotate(230deg);\n'], - ['\n transform: rotate(230deg);\n'] - )) -) -var EXTERNAL_APIS = [ - { - name: 'Auto Router', - description: jsx( - Trans, - { children: 'The app fetches the optimal trade route from a Uniswap Labs server.' }, - void 0 - ), - }, - { - name: 'Infura', - description: jsx( - Trans, - { children: 'The app fetches on-chain data and constructs contract calls with an Infura API.' }, - void 0 - ), - }, - { - name: 'TRM Labs', - description: jsxs( - Fragment, - { - children: [ - jsx( - Trans, - { - children: - 'The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.', - }, - void 0 - ), - ' ', - jsx( - ExternalLink, - __assign( - { href: 'https://help.uniswap.org/en/articles/5675203-terms-of-service-faq' }, - { children: jsx(Trans, { children: 'Learn more' }, void 0) } - ), - void 0 - ), - ], - }, - void 0 - ), - }, - { - name: 'Google Analytics', - description: jsx( - Trans, - { children: 'The app logs anonymized usage statistics in order to improve over time.' }, - void 0 - ), - }, - { - name: 'The Graph', - description: jsx( - Trans, - { children: 'The app fetches blockchain data from The Graph\u2019s hosted service.' }, - void 0 - ), - }, -] -function PrivacyPolicyModal() { - var node = useRef() - var open = useModalOpen(ApplicationModal.PRIVACY_POLICY) - var toggle = useTogglePrivacyPolicy() - useEffect( - function () { - if (!open) return - ReactGA.event({ - category: 'Modal', - action: 'Show Legal', - }) - }, - [open] - ) - return jsx( - Modal, - __assign( - { - isOpen: open, - onDismiss() { - return toggle() - }, - }, - { - children: jsxs( - AutoColumn, - __assign( - { gap: '12px', ref: node }, - { - children: [ - jsxs( - RowBetween, - __assign( - { padding: '1rem 1rem 0.5rem 1rem' }, - { - children: [ - jsx( - ThemedText.MediumHeader, - { children: jsx(Trans, { children: 'Legal & Privacy' }, void 0) }, - void 0 - ), - jsx( - HoverText$1, - __assign( - { - onClick() { - return toggle() - }, - }, - { children: jsx(X, { size: 24 }, void 0) } - ), - void 0 - ), - ], - } - ), - void 0 - ), - jsx(PrivacyPolicy, {}, void 0), - ], - } - ), - void 0 - ), - } - ), - void 0 - ) -} -function PrivacyPolicy() { - return jsx( - Wrapper$h, - __assign( - { - draggable: 'true', - onTouchMove(e) { - // prevent modal gesture handler from dismissing modal when content is scrolling - if (isMobile) { - e.stopPropagation() - } - }, - }, - { - children: jsxs( - AutoColumn, - __assign( - { gap: '16px' }, - { - children: [ - jsxs( - AutoColumn, - __assign( - { gap: '8px', style: { width: '100%' } }, - { - children: [ - jsx( - StyledExternalCard, - { - children: jsx( - ExternalLink, - __assign( - { href: 'https://uniswap.org/terms-of-service' }, - { - children: jsxs( - RowBetween, - { - children: [ - jsxs( - AutoRow, - __assign( - { gap: '4px' }, - { - children: [ - jsx(Info, { size: 20 }, void 0), - jsx( - ThemedText.Main, - __assign( - { fontSize: 14, color: 'primaryText1' }, - { - children: jsx( - Trans, - { children: "Uniswap Labs' Terms of Service" }, - void 0 - ), - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - jsx(StyledLinkOut, { size: 20 }, void 0), - ], - }, - void 0 - ), - } - ), - void 0 - ), - }, - void 0 - ), - jsx( - StyledExternalCard, - { - children: jsx( - ExternalLink, - __assign( - { href: 'https://uniswap.org/disclaimer/' }, - { - children: jsxs( - RowBetween, - { - children: [ - jsxs( - AutoRow, - __assign( - { gap: '4px' }, - { - children: [ - jsx(Info, { size: 20 }, void 0), - jsx( - ThemedText.Main, - __assign( - { fontSize: 14, color: 'primaryText1' }, - { - children: jsx(Trans, { children: 'Protocol Disclaimer' }, void 0), - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - jsx(StyledLinkOut, { size: 20 }, void 0), - ], - }, - void 0 - ), - } - ), - void 0 - ), - }, - void 0 - ), - ], - } - ), - void 0 - ), - jsx( - ThemedText.Main, - __assign( - { fontSize: 14 }, - { children: jsx(Trans, { children: 'This app uses the following third-party APIs:' }, void 0) } - ), - void 0 - ), - jsxs( - AutoColumn, - __assign( - { gap: '12px' }, - { - children: [ - EXTERNAL_APIS.map(function (_a, i) { - var name = _a.name, - description = _a.description - return jsx( - DarkGreyCard, - { - children: jsxs( - AutoColumn, - __assign( - { gap: '8px' }, - { - children: [ - jsxs( - AutoRow, - __assign( - { gap: '4px' }, - { - children: [ - jsx(Info, { size: 18 }, void 0), - jsx( - ThemedText.Main, - __assign({ fontSize: 14, color: 'text1' }, { children: name }), - void 0 - ), - ], - } - ), - void 0 - ), - jsx( - ThemedText.Main, - __assign({ fontSize: 14 }, { children: description }), - void 0 - ), - ], - } - ), - void 0 - ), - }, - i - ) - }), - jsx( - Row$1, - __assign( - { justify: 'center', marginBottom: '1rem' }, - { - children: jsx( - ExternalLink, - __assign( - { href: 'https://help.uniswap.org/en/articles/5675203-terms-of-service-faq' }, - { children: jsx(Trans, { children: 'Learn more' }, void 0) } - ), - void 0 - ), - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - ], - } - ), - void 0 - ), - } - ), - void 0 - ) -} -var templateObject_1$16, templateObject_2$O, templateObject_3$G, templateObject_4$v +var Wrapper$h = styled.div(templateObject_1$16 || (templateObject_1$16 = __makeTemplateObject(["\n max-height: 70vh;\n overflow: auto;\n padding: 0 1rem;\n"], ["\n max-height: 70vh;\n overflow: auto;\n padding: 0 1rem;\n"]))); +var StyledExternalCard = styled(Card)(templateObject_2$O || (templateObject_2$O = __makeTemplateObject(["\n background-color: ", ";\n padding: 0.5rem;\n width: 100%;\n\n :hover,\n :focus,\n :active {\n background-color: ", ";\n }\n"], ["\n background-color: ", ";\n padding: 0.5rem;\n width: 100%;\n\n :hover,\n :focus,\n :active {\n background-color: ", ";\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.primary5; +}, function (_a) { + var theme = _a.theme; + return theme.primary4; +}); +var HoverText$1 = styled.div(templateObject_3$G || (templateObject_3$G = __makeTemplateObject(["\n text-decoration: none;\n color: ", ";\n display: flex;\n align-items: center;\n\n :hover {\n cursor: pointer;\n }\n"], ["\n text-decoration: none;\n color: ", ";\n display: flex;\n align-items: center;\n\n :hover {\n cursor: pointer;\n }\n"])), function (_a) { + var theme = _a.theme; + return theme.text1; +}); +var StyledLinkOut = styled(ArrowDown)(templateObject_4$v || (templateObject_4$v = __makeTemplateObject(["\n transform: rotate(230deg);\n"], ["\n transform: rotate(230deg);\n"]))); +var EXTERNAL_APIS = [ + { + name: 'Auto Router', + description: jsx(Trans, { children: "The app fetches the optimal trade route from a Uniswap Labs server." }, void 0), + }, + { + name: 'Infura', + description: jsx(Trans, { children: "The app fetches on-chain data and constructs contract calls with an Infura API." }, void 0), + }, + { + name: 'TRM Labs', + description: (jsxs(Fragment, { children: [jsx(Trans, { children: "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons." }, void 0), ' ', jsx(ExternalLink, __assign({ href: "https://help.uniswap.org/en/articles/5675203-terms-of-service-faq" }, { children: jsx(Trans, { children: "Learn more" }, void 0) }), void 0)] }, void 0)), + }, + { + name: 'Google Analytics', + description: jsx(Trans, { children: "The app logs anonymized usage statistics in order to improve over time." }, void 0), + }, + { + name: 'The Graph', + description: jsx(Trans, { children: "The app fetches blockchain data from The Graph\u2019s hosted service." }, void 0), + }, +]; +function PrivacyPolicyModal() { + var node = useRef(); + var open = useModalOpen(ApplicationModal.PRIVACY_POLICY); + var toggle = useTogglePrivacyPolicy(); + useEffect(function () { + if (!open) + return; + ReactGA.event({ + category: 'Modal', + action: 'Show Legal', + }); + }, [open]); + return (jsx(Modal, __assign({ isOpen: open, onDismiss: function () { return toggle(); } }, { children: jsxs(AutoColumn, __assign({ gap: "12px", ref: node }, { children: [jsxs(RowBetween, __assign({ padding: "1rem 1rem 0.5rem 1rem" }, { children: [jsx(ThemedText.MediumHeader, { children: jsx(Trans, { children: "Legal & Privacy" }, void 0) }, void 0), jsx(HoverText$1, __assign({ onClick: function () { return toggle(); } }, { children: jsx(X, { size: 24 }, void 0) }), void 0)] }), void 0), jsx(PrivacyPolicy, {}, void 0)] }), void 0) }), void 0)); +} +function PrivacyPolicy() { + return (jsx(Wrapper$h, __assign({ draggable: "true", onTouchMove: function (e) { + // prevent modal gesture handler from dismissing modal when content is scrolling + if (isMobile) { + e.stopPropagation(); + } + } }, { children: jsxs(AutoColumn, __assign({ gap: "16px" }, { children: [jsxs(AutoColumn, __assign({ gap: "8px", style: { width: '100%' } }, { children: [jsx(StyledExternalCard, { children: jsx(ExternalLink, __assign({ href: 'https://uniswap.org/terms-of-service' }, { children: jsxs(RowBetween, { children: [jsxs(AutoRow, __assign({ gap: "4px" }, { children: [jsx(Info, { size: 20 }, void 0), jsx(ThemedText.Main, __assign({ fontSize: 14, color: 'primaryText1' }, { children: jsx(Trans, { children: "Uniswap Labs' Terms of Service" }, void 0) }), void 0)] }), void 0), jsx(StyledLinkOut, { size: 20 }, void 0)] }, void 0) }), void 0) }, void 0), jsx(StyledExternalCard, { children: jsx(ExternalLink, __assign({ href: 'https://uniswap.org/disclaimer/' }, { children: jsxs(RowBetween, { children: [jsxs(AutoRow, __assign({ gap: "4px" }, { children: [jsx(Info, { size: 20 }, void 0), jsx(ThemedText.Main, __assign({ fontSize: 14, color: 'primaryText1' }, { children: jsx(Trans, { children: "Protocol Disclaimer" }, void 0) }), void 0)] }), void 0), jsx(StyledLinkOut, { size: 20 }, void 0)] }, void 0) }), void 0) }, void 0)] }), void 0), jsx(ThemedText.Main, __assign({ fontSize: 14 }, { children: jsx(Trans, { children: "This app uses the following third-party APIs:" }, void 0) }), void 0), jsxs(AutoColumn, __assign({ gap: "12px" }, { children: [EXTERNAL_APIS.map(function (_a, i) { + var name = _a.name, description = _a.description; + return (jsx(DarkGreyCard, { children: jsxs(AutoColumn, __assign({ gap: "8px" }, { children: [jsxs(AutoRow, __assign({ gap: "4px" }, { children: [jsx(Info, { size: 18 }, void 0), jsx(ThemedText.Main, __assign({ fontSize: 14, color: 'text1' }, { children: name }), void 0)] }), void 0), jsx(ThemedText.Main, __assign({ fontSize: 14 }, { children: description }), void 0)] }), void 0) }, i)); + }), jsx(Row$1, __assign({ justify: "center", marginBottom: "1rem" }, { children: jsx(ExternalLink, __assign({ href: "https://help.uniswap.org/en/articles/5675203-terms-of-service-faq" }, { children: jsx(Trans, { children: "Learn more" }, void 0) }), void 0) }), void 0)] }), void 0)] }), void 0) }), void 0)); +} +var templateObject_1$16, templateObject_2$O, templateObject_3$G, templateObject_4$v; /*eslint-disable*/module.exports={messages:{"$-":"$-","$<0/>":"$<0/>","${0}":["$",["0"]],"(${0})":["($",["0"],")"],"(View on Explorer)":"(View on Explorer)","(clear all)":"(clear all)","(edit)":"(edit)","- Remove recipient":"- Remove recipient","0 UNI / week":"0 UNI / week","25%":"25%","50%":"50%","75%":"75%","<0/> All Proposals":"<0/> All Proposals","<0/> Votes":"<0/> Votes","<0>Account analytics and accrued fees<1> ↗ ":"<0>Account analytics and accrued fees<1> ↗ ","<0>Current Price:<1><2/><3>{0} per {1}":["<0>Current Price:<1><2/><3>",["0"]," per ",["1"],""],"<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.":"<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.","<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.":"<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.","<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.":"<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.","<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.":"<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.","<0>Unlock voting to prepare for the next proposal.":"<0>Unlock voting to prepare for the next proposal.","<0>🎉 Welcome to team Unicorn :) <1>🎉":"<0>🎉 Welcome to team Unicorn :) <1>🎉","A minimum threshold of 0.25% of the total UNI supply is required to submit proposals":"A minimum threshold of 0.25% of the total UNI supply is required to submit proposals","About":"About","Accept":"Accept","Account":"Account","Active":"Active","Add":"Add","Add <0/> and <1/> to Uniswap V2":"Add <0/> and <1/> to Uniswap V2","Add Delegate +":"Add Delegate +","Add Liquidity":"Add Liquidity","Add V2 Liquidity":"Add V2 Liquidity","Add liquidity.":"Add liquidity.","Add more liquidity":"Add more liquidity","Add {0} to Metamask <0/>":["Add ",["0"]," to Metamask <0/>"],"Add {0}-{1} liquidity":["Add ",["0"],"-",["1"]," liquidity"],"Add {0}/{1} V3 liquidity":["Add ",["0"],"/",["1"]," V3 liquidity"],"Added {0}":["Added ",["0"]],"Address has no available claim":"Address has no available claim","Against":"Against","Allow LP token migration":"Allow LP token migration","Allow high price impact trades and skip the confirm screen. Use at your own risk.":"Allow high price impact trades and skip the confirm screen. Use at your own risk.","Allow the Uniswap Protocol to use your {0}":["Allow the Uniswap Protocol to use your ",["0"]],"Allowed":"Allowed","Amount":"Amount","An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.":"An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.","Approval pending <0/>":"Approval pending <0/>","Approve":"Approve","Approve Token":"Approve Token","Approve {0}":["Approve ",["0"]],"Approve {0} first":["Approve ",["0"]," first"],"Approved":"Approved","Approving":"Approving","Approving {0}":["Approving ",["0"]],"Arbiscan":"Arbiscan","Arbitrum Bridge":"Arbitrum Bridge","Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.":"Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.","Are you sure?":"Are you sure?","As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI":"As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI","At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.":["At least ",["0"]," ",["1"]," and ",["2"]," ",["3"]," will be refunded to your wallet due to selected price range."],"Auto":"Auto","Auto Router API":"Auto Router API","Available to deposit: {0}":["Available to deposit: ",["0"]],"Balance: {0}":["Balance: ",["0"]],"Best for exotic pairs.":"Best for exotic pairs.","Best for most pairs.":"Best for most pairs.","Best for stable pairs.":"Best for stable pairs.","Best for very stable pairs.":"Best for very stable pairs.","Best price route costs ~{formattedGasPriceString} in gas.":["Best price route costs ~",["formattedGasPriceString"]," in gas."],"Blocked address":"Blocked address","Bridge":"Bridge","By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.":"By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.","By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.":"By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.","By connecting a wallet, you agree to Uniswap Labs’ <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.":"By connecting a wallet, you agree to Uniswap Labs’ <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.","Canceled":"Canceled","Change":"Change","Charts":"Charts","Check network status":"Check network status","Check out our v3 LP walkthrough and migration guides.":"Check out our v3 LP walkthrough and migration guides.","Claim":"Claim","Claim <0/> for {0}":["Claim <0/> for ",["0"]],"Claim UNI":"Claim UNI","Claim UNI Token":"Claim UNI Token","Claim UNI reward for {0}":["Claim UNI reward for ",["0"]],"Claim fees":"Claim fees","Claim your UNI tokens":"Claim your UNI tokens","Claimed":"Claimed","Claimed UNI!":"Claimed UNI!","Claimed!":"Claimed!","Claiming":"Claiming","Claiming UNI":"Claiming UNI","Claiming {0} UNI":["Claiming ",["0"]," UNI"],"Clear All":"Clear All","Clear all":"Clear all","Close":"Close","Closed":"Closed","Collect":"Collect","Collect as WETH":"Collect as WETH","Collect fees":"Collect fees","Collect {0}/{1} fees":["Collect ",["0"],"/",["1"]," fees"],"Collected":"Collected","Collecting":"Collecting","Collecting fees":"Collecting fees","Collecting fees will withdraw currently available fees for you.":"Collecting fees will withdraw currently available fees for you.","Confirm":"Confirm","Confirm Supply":"Confirm Supply","Confirm Swap":"Confirm Swap","Confirm swap":"Confirm swap","Confirm this transaction in your wallet":"Confirm this transaction in your wallet","Confirm transaction in wallet":"Confirm transaction in wallet","Connect Wallet":"Connect Wallet","Connect a wallet":"Connect a wallet","Connect to a wallet to find pools":"Connect to a wallet to find pools","Connect to a wallet to view your V2 liquidity.":"Connect to a wallet to view your V2 liquidity.","Connect to a wallet to view your liquidity.":"Connect to a wallet to view your liquidity.","Connect wallet to swap":"Connect wallet to swap","Connected with {name}":["Connected with ",["name"]],"Copied":"Copied","Copy Address":"Copy Address","Create Pool & Supply":"Create Pool & Supply","Create Proposal":"Create Proposal","Create a pair":"Create a pair","Create a pool":"Create a pool","Create an issue on GitHub":"Create an issue on GitHub","Create pool and add {0}/{1} V3 liquidity":["Create pool and add ",["0"],"/",["1"]," V3 liquidity"],"Create pool.":"Create pool.","Create {0}/{1} V3 pool":["Create ",["0"],"/",["1"]," V3 pool"],"Current price":"Current price","Current {0} Price:":["Current ",["0"]," Price:"],"Custom":"Custom","Dark Theme":"Dark Theme","Defeated":"Defeated","Delegate Votes":"Delegate Votes","Delegate voting power to {0}":["Delegate voting power to ",["0"]],"Delegated to:":"Delegated to:","Delegating votes":"Delegating votes","Deposit":"Deposit","Deposit Amounts":"Deposit Amounts","Deposit UNI-V2 LP Tokens":"Deposit UNI-V2 LP Tokens","Deposit liquidity":"Deposit liquidity","Deposit tokens to the {label} network.":["Deposit tokens to the ",["label"]," network."],"Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.":"Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.","Deposited liquidity:":"Deposited liquidity:","Deposited {0} UNI-V2":["Deposited ",["0"]," UNI-V2"],"Depositing Liquidity":"Depositing Liquidity","Description":"Description","Detailed":"Detailed","Details":"Details","Disconnect":"Disconnect","Discord":"Discord","Dismiss":"Dismiss","Docs":"Docs","Don’t see one of your v2 positions? <0>Import it.":"Don’t see one of your v2 positions? <0>Import it.","Earned UNI tokens represent voting shares in Uniswap governance.":"Earned UNI tokens represent voting shares in Uniswap governance.","Edit":"Edit","Efficiency Comparison":"Efficiency Comparison","Enter a percent":"Enter a percent","Enter a recipient":"Enter a recipient","Enter a valid slippage percentage":"Enter a valid slippage percentage","Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.":"Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.","Enter an amount":"Enter an amount","Enter valid list location":"Enter valid list location","Enter valid token address":"Enter valid token address","Enter {0} amount":["Enter ",["0"]," amount"],"Error":"Error","Error connecting":"Error connecting","Error connecting. Try refreshing the page.":"Error connecting. Try refreshing the page.","Error details":"Error details","Error importing list":"Error importing list","Estimate may differ due to your wallet gas settings":"Estimate may differ due to your wallet gas settings","Estimated network fee":"Estimated network fee","Etherscan":"Etherscan","Executed":"Executed","Expanded results from inactive Token Lists":"Expanded results from inactive Token Lists","Expected Output":"Expected Output","Expert Mode":"Expert Mode","Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.":"Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.","Expired":"Expired","Explore Uniswap Analytics.":"Explore Uniswap Analytics.","Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.":["Failed to switch networks from the Uniswap Interface. In order to use Uniswap on ",["0"],", you must change the network in your wallet."],"Fee Tier":"Fee Tier","Fee tier":"Fee tier","Fetching best price...":"Fetching best price...","Fetching best price…":"Fetching best price…","For":"For","For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.":"For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.","From":"From","From (at most)":"From (at most)","Full Range":"Full Range","Full range positions may earn less fees than concentrated positions. Learn more <0>here.":"Full range positions may earn less fees than concentrated positions. Learn more <0>here.","Get support on Discord":"Get support on Discord","Help Center":"Help Center","Hide":"Hide","Hide closed positions":"Hide closed positions","High Price Impact":"High Price Impact","How this app uses APIs":"How this app uses APIs","I understand":"I understand","If you purchase a token from this list, you may not be able to sell it back.":"If you purchase a token from this list, you may not be able to sell it back.","Import":"Import","Import List":"Import List","Import Pool":"Import Pool","Import V2 Pool":"Import V2 Pool","Import at your own risk":"Import at your own risk","In range":"In range","Increase Liquidity":"Increase Liquidity","Initial prices and pool share":"Initial prices and pool share","Initializing...":"Initializing...","Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.":["Input is estimated. You will sell at most <0>",["0"]," ",["1"]," or the transaction will revert."],"Install Metamask":"Install Metamask","Insufficient liquidity for this trade.":"Insufficient liquidity for this trade.","Insufficient {0}":["Insufficient ",["0"]],"Insufficient {0} balance":["Insufficient ",["0"]," balance"],"Interface Settings":"Interface Settings","Invalid pair":"Invalid pair","Invalid pair.":"Invalid pair.","Invalid price input":"Invalid price input","Invalid range selected. The min price must be lower than the max price.":"Invalid range selected. The min price must be lower than the max price.","Invalid recipient":"Invalid recipient","Language":"Language","Learn":"Learn","Learn about providing liquidity":"Learn about providing liquidity","Learn more":"Learn more","Legal & Privacy":"Legal & Privacy","Light Theme":"Light Theme","Liquidity":"Liquidity","Liquidity data not available.":"Liquidity data not available.","Liquidity provider rewards":"Liquidity provider rewards","Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.":"Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.","Lists":"Lists","Loaded":"Loaded","Loading":"Loading","MAX":"MAX","Manage":"Manage","Manage Liquidity in Rewards Pool":"Manage Liquidity in Rewards Pool","Manage Token Lists":"Manage Token Lists","Manage this pool.":"Manage this pool.","Max":"Max","Max Price":"Max Price","Max price":"Max price","Max slippage":"Max slippage","Max:":"Max:","Maximum sent":"Maximum sent","Menu":"Menu","Migrate":"Migrate","Migrate Liquidity to V3":"Migrate Liquidity to V3","Migrate V2 Liquidity":"Migrate V2 Liquidity","Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.":"Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.","Migrate {0}/{1} liquidity to V3":["Migrate ",["0"],"/",["1"]," liquidity to V3"],"Migrating":"Migrating","Min Price":"Min Price","Min price":"Min price","Min:":"Min:","Minimum received":"Minimum received","Missing dependencies":"Missing dependencies","Mock Toggle":"Mock Toggle","More":"More","Network Fee":"Network Fee","Network Warning":"Network Warning","Network fees exceed 50% of the swap amount!":"Network fees exceed 50% of the swap amount!","New Position":"New Position","No V2 Liquidity found.":"No V2 Liquidity found.","No active pools":"No active pools","No data":"No data","No description.":"No description.","No liquidity found.":"No liquidity found.","No pool found.":"No pool found.","No proposals found.":"No proposals found.","No results found.":"No results found.","Not created":"Not created","OFF":"OFF","ON":"ON","ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.":"ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.","Off":"Off","On":"On","Once you are happy with the rate click supply to review.":"Once you are happy with the rate click supply to review.","Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.":["Only UNI votes that were self delegated or delegated to another address before block ",["0"]," are eligible for voting."],"Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.":"Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.","Optimism Gateway":"Optimism Gateway","Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.":"Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.","Optimistic Etherscan":"Optimistic Etherscan","Out of range":"Out of range","Output is estimated.":"Output is estimated.","Output is estimated. If the price changes by more than {0}% your transaction will revert.":["Output is estimated. If the price changes by more than ",["0"],"% your transaction will revert."],"Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.":["Output is estimated. You will receive at least <0>",["0"]," ",["1"]," or the transaction will revert."],"Output will be sent to <0>{0}":["Output will be sent to <0>",["0"],""],"Owner":"Owner","Participating pools":"Participating pools","Pending":"Pending","Please confirm you would like to remove this list by typing REMOVE":"Please confirm you would like to remove this list by typing REMOVE","Please connect to Layer 1 Ethereum":"Please connect to Layer 1 Ethereum","Please connect to a supported network in the dropdown menu or in your wallet.":"Please connect to a supported network in the dropdown menu or in your wallet.","Please type the word \"{confirmWord}\" to enable expert mode.":["Please type the word \"",["confirmWord"],"\" to enable expert mode."],"Polygon Bridge":"Polygon Bridge","Polygonscan":"Polygonscan","Pool":"Pool","Pool Found!":"Pool Found!","Pool Rate":"Pool Rate","Pool rate":"Pool rate","Pool tokens in rewards pool:":"Pool tokens in rewards pool:","Pooled {0}:":["Pooled ",["0"],":"],"Pools Overview":"Pools Overview","Preview":"Preview","Price":"Price","Price Difference:":"Price Difference:","Price Impact":"Price Impact","Price Impact Too High":"Price Impact Too High","Price Updated":"Price Updated","Price impact":"Price impact","Price range":"Price range","Price updated":"Price updated","Price:":"Price:","Prices and pool share":"Prices and pool share","Proposal":"Proposal","Proposal Submitted":"Proposal Submitted","Proposal Title":"Proposal Title","Proposals":"Proposals","Proposals submitted by community members will appear here.":"Proposals submitted by community members will appear here.","Proposed Action":"Proposed Action","Proposer":"Proposer","Protocol Disclaimer":"Protocol Disclaimer","Queued":"Queued","Rates":"Rates","Read more about UNI":"Read more about UNI","Read more about Uniswap governance":"Read more about Uniswap governance","Read more about providing liquidity":"Read more about providing liquidity","Read more about unsupported assets":"Read more about unsupported assets","Recent Transactions":"Recent Transactions","Recent transactions":"Recent transactions","Recipient":"Recipient","Reload the page":"Reload the page","Remove":"Remove","Remove <0/> and <1/>":"Remove <0/> and <1/>","Remove Amount":"Remove Amount","Remove Delegate":"Remove Delegate","Remove Liquidity":"Remove Liquidity","Remove list":"Remove list","Removing {0} {1} and {2} {3}":["Removing ",["0"]," ",["1"]," and ",["2"]," ",["3"]],"Removing {0} {1} and{2} {3}":["Removing ",["0"]," ",["1"]," and",["2"]," ",["3"]],"Request Features":"Request Features","Reset":"Reset","Return":"Return","Review swap":"Review swap","Search by token name or address":"Search by token name or address","Search name or paste address":"Search name or paste address","Select Pair":"Select Pair","Select a network":"Select a network","Select a token":"Select a token","Select a token to find your v2 liquidity.":"Select a token to find your v2 liquidity.","Select an action":"Select an action","Selected Range":"Selected Range","Self":"Self","Self Delegate":"Self Delegate","Set Price Range":"Set Price Range","Set Starting Price":"Set Starting Price","Settings":"Settings","Share of Pool":"Share of Pool","Share of Pool:":"Share of Pool:","Show Portis":"Show Portis","Show closed positions":"Show closed positions","Simple":"Simple","Slippage tolerance":"Slippage tolerance","Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.":"Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.","Something went wrong":"Something went wrong","Something went wrong.":"Something went wrong.","Step 1. Get UNI-V2 Liquidity tokens":"Step 1. Get UNI-V2 Liquidity tokens","Submit new proposal":"Submit new proposal","Submitting Proposal":"Submitting Proposal","Submitting Vote":"Submitting Vote","Succeeded":"Succeeded","Success":"Success","Supply":"Supply","Supplying {0} {1} and {2} {3}":["Supplying ",["0"]," ",["1"]," and ",["2"]," ",["3"]],"Swap":"Swap","Swap <0/> for exactly <1/>":"Swap <0/> for exactly <1/>","Swap Anyway":"Swap Anyway","Swap details":"Swap details","Swap exactly <0/> for <1/>":"Swap exactly <0/> for <1/>","Swap failed: {0}":["Swap failed: ",["0"]],"Swap summary":"Swap summary","Swapping {0} {1} for {2} {3}":["Swapping ",["0"]," ",["1"]," for ",["2"]," ",["3"]],"Take a 10 minute survey to help us improve your experience in the Uniswap app.":"Take a 10 minute survey to help us improve your experience in the Uniswap app.","Tell us what you think ↗":"Tell us what you think ↗","Thanks for being part of the Uniswap community <0/>":"Thanks for being part of the Uniswap community <0/>","The % you will earn in fees.":"The % you will earn in fees.","The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.":"The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.","The app fetches blockchain data from The Graph’s hosted service.":"The app fetches blockchain data from The Graph’s hosted service.","The app fetches on-chain data and constructs contract calls with an Infura API.":"The app fetches on-chain data and constructs contract calls with an Infura API.","The app fetches the optimal trade route from a Uniswap Labs server.":"The app fetches the optimal trade route from a Uniswap Labs server.","The app logs anonymized usage statistics in order to improve over time.":"The app logs anonymized usage statistics in order to improve over time.","The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.":"The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.","The cost of sending this transaction is more than half of the value of the input amount.":"The cost of sending this transaction is more than half of the value of the input amount.","The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.":"The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.","The estimated difference between the USD values of input and output amounts.":"The estimated difference between the USD values of input and output amounts.","The input token cannot be transferred. There may be an issue with the input token.":"The input token cannot be transferred. There may be an issue with the input token.","The market price is outside your specified price range. Single-asset deposit only.":"The market price is outside your specified price range. Single-asset deposit only.","The most recent block number on this network. Prices update on every block.":"The most recent block number on this network. Prices update on every block.","The output token cannot be transferred. There may be an issue with the output token.":"The output token cannot be transferred. There may be an issue with the output token.","The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.":"The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.","The price of this pool is outside of your selected range. Your position is not currently earning fees.":"The price of this pool is outside of your selected range. Your position is not currently earning fees.","The price of this pool is within your selected range. Your position is currently earning fees.":"The price of this pool is within your selected range. Your position is currently earning fees.","The ratio of tokens you add will set the price of this pool.":"The ratio of tokens you add will set the price of this pool.","The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.":"The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.","There is no liquidity data.":"There is no liquidity data.","This app uses the following third-party APIs:":"This app uses the following third-party APIs:","This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.":"This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.","This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.":"This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.","This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.":"This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.","This token is not supported in the Uniswap Labs app":"This token is not supported in the Uniswap Labs app","This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the":["This tool will safely migrate your ",["0"]," liquidity to V3. The process is completely trustless thanks to the"],"This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.":"This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.","This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.":"This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.","Tip: Custom tokens are stored locally in your browser":"Tip: Custom tokens are stored locally in your browser","To":"To","To (at least)":"To (at least)","Token not supported":"Token not supported","Tokens":"Tokens","Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.":"Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.","Top pools":"Top pools","Total deposited":"Total deposited","Total deposits":"Total deposits","Trade Route":"Trade Route","Trading":"Trading","Transaction Settings":"Transaction Settings","Transaction Submitted":"Transaction Submitted","Transaction completed in":"Transaction completed in","Transaction deadline":"Transaction deadline","Transaction pending":"Transaction pending","Transaction rejected.":"Transaction rejected.","Transaction submitted":"Transaction submitted","Transfer Token":"Transfer Token","Try Again":"Try Again","Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.":"Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.","Turn On Expert Mode":"Turn On Expert Mode","UNI has arrived":"UNI has arrived","UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.":"UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.","UNI {0}/{1} Burned":["UNI ",["0"],"/",["1"]," Burned"],"UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.":["UNI-V2 LP tokens are required. Once you've added liquidity to the ",["0"],"-",["1"]," pool you can stake your liquidity tokens on this page."],"UNI-V2 {0}-{1}":["UNI-V2 ",["0"],"-",["1"]],"Unclaimed UNI":"Unclaimed UNI","Unclaimed fees":"Unclaimed fees","Undetermined":"Undetermined","Unexpected error. Could not estimate gas for the swap.":"Unexpected error. Could not estimate gas for the swap.","Unexpected issue with estimating the gas. Please try again.":"Unexpected issue with estimating the gas. Please try again.","Uniswap Governance":"Uniswap Governance","Uniswap Labs' Terms of Service":"Uniswap Labs' Terms of Service","Uniswap available in: <0>{0}":["Uniswap available in: <0>",["0"],""],"Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.":"Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.","Uniswap liquidity mining":"Uniswap liquidity mining","Uniswap migration contract↗":"Uniswap migration contract↗","Unknown Source":"Unknown Source","Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.":["Unknown error",["0"],". Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3."],"Unlock Votes":"Unlock Votes","Unlock Voting":"Unlock Voting","Unlocking Votes":"Unlocking Votes","Unsupported Asset":"Unsupported Asset","Unsupported Assets":"Unsupported Assets","Unsupported network–switch to another to trade.":"Unsupported network–switch to another to trade.","Untitled":"Untitled","Unwrap":"Unwrap","Unwrap <0/> to {0}":["Unwrap <0/> to ",["0"]],"Update Delegation":"Update Delegation","Update list":"Update list","Use the Uniswap Labs API to get faster quotes.":"Use the Uniswap Labs API to get faster quotes.","User":"User","V2 is not available on Layer 2. Switch to Layer 1 Ethereum.":"V2 is not available on Layer 2. Switch to Layer 1 Ethereum.","V2 liquidity":"V2 liquidity","V3 {0} Price:":["V3 ",["0"]," Price:"],"View accrued fees and analytics<0>↗":"View accrued fees and analytics<0>↗","View list":"View list","View on Etherscan":"View on Etherscan","View on Explorer":"View on Explorer","View transaction on Explorer":"View transaction on Explorer","Vote":"Vote","Vote Against":"Vote Against","Vote For":"Vote For","Vote against proposal {proposalId}":["Vote against proposal ",["proposalId"]],"Vote against proposal {proposalKey}":["Vote against proposal ",["proposalKey"]],"Vote against proposal {proposalKey} with reason \"{0}\"":["Vote against proposal ",["proposalKey"]," with reason \"",["0"],"\""],"Vote for proposal {proposalId}":["Vote for proposal ",["proposalId"]],"Vote for proposal {proposalKey}":["Vote for proposal ",["proposalKey"]],"Vote for proposal {proposalKey} with reason \"{0}\"":["Vote for proposal ",["proposalKey"]," with reason \"",["0"],"\""],"Vote to abstain on proposal {proposalId}":["Vote to abstain on proposal ",["proposalId"]],"Vote to abstain on proposal {proposalKey}":["Vote to abstain on proposal ",["proposalKey"]],"Vote to abstain on proposal {proposalKey} with reason \"{0}\"":["Vote to abstain on proposal ",["proposalKey"]," with reason \"",["0"],"\""],"Voting ended {0}":["Voting ended ",["0"]],"Voting ends approximately {0}":["Voting ends approximately ",["0"]],"Voting starts approximately {0}":["Voting starts approximately ",["0"]],"Waiting For Confirmation":"Waiting For Confirmation","Wallet Address or ENS name":"Wallet Address or ENS name","Weekly Rewards":"Weekly Rewards","Welcome to team Unicorn :)":"Welcome to team Unicorn :)","When you claim without withdrawing your liquidity remains in the mining pool.":"When you claim without withdrawing your liquidity remains in the mining pool.","When you withdraw, the contract will automagically claim UNI on your behalf!":"When you withdraw, the contract will automagically claim UNI on your behalf!","When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.":"When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.","Withdraw":"Withdraw","Withdraw & Claim":"Withdraw & Claim","Withdraw deposited liquidity":"Withdraw deposited liquidity","Withdrawing {0} UNI-V2":["Withdrawing ",["0"]," UNI-V2"],"Withdrew UNI-V2!":"Withdrew UNI-V2!","Wrap":"Wrap","Wrap <0/> to {0}":["Wrap <0/> to ",["0"]],"Wrong Network":"Wrong Network","You already have an active or pending proposal":"You already have an active or pending proposal","You are creating a pool":"You are creating a pool","You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.":["You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current ",["0"]," price."],"You are the first liquidity provider.":"You are the first liquidity provider.","You can either vote on each proposal yourself or delegate your votes to a third party.":"You can either vote on each proposal yourself or delegate your votes to a third party.","You can now trade {0}":["You can now trade ",["0"]],"You don't have enough votes to submit a proposal":"You don't have enough votes to submit a proposal","You don’t have liquidity in this pool yet.":"You don’t have liquidity in this pool yet.","You may have lost your network connection, or {label} might be down right now.":["You may have lost your network connection, or ",["label"]," might be down right now."],"You may have lost your network connection.":"You may have lost your network connection.","You might consider waiting until the network fees go down to complete this transaction.":"You might consider waiting until the network fees go down to complete this transaction.","You must connect an account.":"You must connect an account.","You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.":["You must give the Uniswap smart contracts permission to use your ",["0"],". You only have to do this once per token."],"You must have {formattedProposalThreshold} votes to submit a proposal":["You must have ",["formattedProposalThreshold"]," votes to submit a proposal"],"You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.":"You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.","You will also collect fees earned from this position.":"You will also collect fees earned from this position.","You will receive":"You will receive","You will receive at least {0} {1} or the transaction will revert.":["You will receive at least ",["0"]," ",["1"]," or the transaction will revert."],"You will send at most {0} {1} or the transaction will revert.":["You will send at most ",["0"]," ",["1"]," or the transaction will revert."],"Your V2 liquidity":"Your V2 liquidity","Your active V3 liquidity positions will appear here.":"Your active V3 liquidity positions will appear here.","Your liquidity deposits":"Your liquidity deposits","Your pool share:":"Your pool share:","Your position":"Your position","Your position has 0 liquidity, and is not earning fees.":"Your position has 0 liquidity, and is not earning fees.","Your position will appear here.":"Your position will appear here.","Your position will be 100% composed of {0} at this price":["Your position will be 100% composed of ",["0"]," at this price"],"Your position will be 100% {0} at this price.":["Your position will be 100% ",["0"]," at this price."],"Your position will not earn fees or be used in trades until the market price moves into your range.":"Your position will not earn fees or be used in trades until the market price moves into your range.","Your positions":"Your positions","Your rate":"Your rate","Your total pool tokens:":"Your total pool tokens:","Your transaction cost will be much higher as it includes the gas to create the pool.":"Your transaction cost will be much higher as it includes the gas to create the pool.","Your transaction may be frontrun":"Your transaction may be frontrun","Your transaction may fail":"Your transaction may fail","Your transaction will revert if it has been pending for longer than this period of time.":"Your transaction will revert if it has been pending for longer than this period of time.","Your transaction will revert if it is pending for more than this period of time.":"Your transaction will revert if it is pending for more than this period of time.","Your transaction will revert if the price changes unfavorably by more than this percentage.":"Your transaction will revert if the price changes unfavorably by more than this percentage.","Your transactions will appear here...":"Your transactions will appear here...","Your unclaimed UNI":"Your unclaimed UNI","after slippage":"after slippage","confirm":"confirm","for {0}":["for ",["0"]],"gwei":"gwei","has socks emoji":"has socks emoji","here.":"here.","https:// or ipfs:// or ENS name":"https:// or ipfs:// or ENS name","minutes":"minutes","via {0}":["via ",["0"]],"via {0} token list":["via ",["0"]," token list"],"{0, plural, one {Import token} other {Import tokens}}":[["0","plural",{one:"Import token",other:"Import tokens"}]],"{0}":[["0"]],"{0} %":[["0"]," %"],"{0} <0/> per <1/>":[["0"]," <0/> per <1/>"],"{0} Custom Tokens":[["0"]," Custom Tokens"],"{0} Deposited":[["0"]," Deposited"],"{0} ETH":[["0"]," ETH"],"{0} Fees Earned:":[["0"]," Fees Earned:"],"{0} Pending":[["0"]," Pending"],"{0} UNI":[["0"]," UNI"],"{0} UNI / week":[["0"]," UNI / week"],"{0} UNI-V2":[["0"]," UNI-V2"],"{0} UNI-V2 LP tokens available":[["0"]," UNI-V2 LP tokens available"],"{0} Votes":[["0"]," Votes"],"{0} per {1}":[["0"]," per ",["1"]],"{0} tokens":[["0"]," tokens"],"{0} {1} Price:":[["0"]," ",["1"]," Price:"],"{0} {nativeCurrencySymbol}":[["0"]," ",["nativeCurrencySymbol"]],"{0} • Added by user":[["0"]," • Added by user"],"{0}%":[["0"],"%"],"{0}% fee tier":[["0"],"% fee tier"],"{0}% pool":[["0"],"% pool"],"{0}% select":[["0"],"% select"],"{0}-{1} Liquidity Mining":[["0"],"-",["1"]," Liquidity Mining"],"{0}/{1} LP NFT":[["0"],"/",["1"]," LP NFT"],"{0}/{1} LP Tokens":[["0"],"/",["1"]," LP Tokens"],"{SOCKS_AMOUNT} UNI":[["SOCKS_AMOUNT"]," UNI"],"{USER_AMOUNT} UNI":[["USER_AMOUNT"]," UNI"],"{activeTokensOnThisChain} tokens":[["activeTokensOnThisChain"]," tokens"],"{integrator} fee":[["integrator"]," fee"],"{label} token bridge":[["label"]," token bridge"],"{min}m {sec}s":[["min"],"m ",["sec"],"s"],"{percentForSlider}%":[["percentForSlider"],"%"],"{sec}s":[["sec"],"s"],"{tokenB} per {tokenA}":[["tokenB"]," per ",["tokenA"]],"← Back to Pools Overview":"← Back to Pools Overview"}}; From 6c6a8d95126c830d12fc1af59e10291434d5a728 Mon Sep 17 00:00:00 2001 From: David Wisner Date: Sun, 30 Jan 2022 19:43:41 +0800 Subject: [PATCH 14/15] update peers --- package.json | 44 +++++++++++++++---------------- yarn.lock | 73 ---------------------------------------------------- 2 files changed, 22 insertions(+), 95 deletions(-) diff --git a/package.json b/package.json index d6963ba1b54..6ef05d2de51 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "files": [ "dist2" ], - "version": "1.0.4", + "version": "1.0.5", "private": false, "resolutions": { "@walletconnect/ethereum-provider": "1.7.1" @@ -45,7 +45,13 @@ }, "license": "GPL-3.0-or-later", "peerDependencies": { - "styled-components": "5.3.0" + "styled-components": "5.3.0", + "widgets-web3-react/core": "npm:@web3-react/core@8.0.16-alpha.0", + "widgets-web3-react/eip1193": "npm:@web3-react/eip1193@8.0.16-alpha.0", + "widgets-web3-react/empty": "npm:@web3-react/empty@8.0.17-alpha.0", + "widgets-web3-react/metamask": "npm:@web3-react/metamask@8.0.16-alpha.0", + "widgets-web3-react/types": "npm:@web3-react/types@8.0.16-alpha.0", + "widgets-web3-react/url": "npm:@web3-react/url@8.0.17-alpha.0" }, "dependencies": { "@babel/runtime": "^7.16.7", @@ -66,10 +72,6 @@ "@fontsource/ibm-plex-mono": "^4.5.1", "@fontsource/inter": "^4.5.1", "@gnosis.pm/safe-apps-web3-react": "^0.6.0", - "@graphql-codegen/cli": "1.21.5", - "@graphql-codegen/typescript": "1.22.3", - "@graphql-codegen/typescript-operations": "^1.18.2", - "@graphql-codegen/typescript-rtk-query": "^1.1.1", "@lingui/cli": "^3.9.0", "@lingui/core": "^3.9.0", "@lingui/macro": "^3.9.0", @@ -80,13 +82,6 @@ "@reach/portal": "^0.10.3", "@react-hook/window-scroll": "^1.3.0", "@reduxjs/toolkit": "^1.6.1", - "@rollup/plugin-babel": "^5.3.0", - "@rollup/plugin-commonjs": "^21.0.1", - "@rollup/plugin-eslint": "^8.0.1", - "@rollup/plugin-json": "^4.1.0", - "@rollup/plugin-node-resolve": "^13.1.3", - "@rollup/plugin-replace": "^3.0.1", - "@rollup/plugin-url": "^6.1.0", "@svgr/rollup": "^6.2.0", "@testing-library/jest-dom": "^5.14.1", "@testing-library/react": "^12.0.0", @@ -202,25 +197,30 @@ "serve": "^11.3.2", "start-server-and-test": "^1.11.0", "tiny-invariant": "^1.2.0", - "typechain": "^5.0.0", - "typescript": "^4.2.3", "ua-parser-js": "^0.7.28", "use-count-up": "^2.2.5", "use-resize-observer": "^8.0.0", "wcag-contrast": "^3.0.0", "web-vitals": "^2.1.0", "wicg-inert": "^3.1.1", - "widgets-web3-react/core": "npm:@web3-react/core@8.0.16-alpha.0", - "widgets-web3-react/eip1193": "npm:@web3-react/eip1193@8.0.16-alpha.0", - "widgets-web3-react/empty": "npm:@web3-react/empty@8.0.17-alpha.0", - "widgets-web3-react/metamask": "npm:@web3-react/metamask@8.0.16-alpha.0", - "widgets-web3-react/types": "npm:@web3-react/types@8.0.16-alpha.0", - "widgets-web3-react/url": "npm:@web3-react/url@8.0.17-alpha.0", "workbox-core": "^6.1.0", "workbox-precaching": "^6.1.0", "workbox-routing": "^6.1.0" }, "devDependencies": { - "rollup-plugin-node-polyfills": "^0.2.1" + "rollup-plugin-node-polyfills": "^0.2.1", + "@rollup/plugin-babel": "^5.3.0", + "@rollup/plugin-commonjs": "^21.0.1", + "@rollup/plugin-eslint": "^8.0.1", + "@rollup/plugin-json": "^4.1.0", + "@rollup/plugin-node-resolve": "^13.1.3", + "@rollup/plugin-replace": "^3.0.1", + "@rollup/plugin-url": "^6.1.0", + "typechain": "^5.0.0", + "typescript": "^4.2.3", + "@graphql-codegen/cli": "1.21.5", + "@graphql-codegen/typescript": "1.22.3", + "@graphql-codegen/typescript-operations": "^1.18.2", + "@graphql-codegen/typescript-rtk-query": "^1.1.1" } } diff --git a/yarn.lock b/yarn.lock index c5624c46b9b..374a02266de 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3320,11 +3320,6 @@ "@babel/runtime" "^7.11.2" "@lingui/core" "^3.9.0" -"@metamask/detect-provider@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@metamask/detect-provider/-/detect-provider-1.2.0.tgz#3667a7531f2a682e3c3a43eaf3a1958bdb42a696" - integrity sha512-ocA76vt+8D0thgXZ7LxFPyqw3H7988qblgzddTDA6B8a/yU0uKV42QR/DhA+Jh11rJjxW0jKvwb5htA6krNZDQ== - "@metamask/jazzicon@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@metamask/jazzicon/-/jazzicon-2.0.0.tgz#5615528e91c0fc5c9d79202d1f0954a7922525a0" @@ -5637,27 +5632,11 @@ "@web3-react/types" "^6.0.7" tiny-invariant "^1.0.6" -"@web3-react/store@^8.0.16-alpha.0": - version "8.0.16-alpha.0" - resolved "https://registry.yarnpkg.com/@web3-react/store/-/store-8.0.16-alpha.0.tgz#05b1a7ddfdaceba98bb9b878ea81616de88acce0" - integrity sha512-U5jX4kyaErGYyvxNv6FCb73OwqS6Wy/iQOut/JAzx1xJ/Gi31vsF1JyIt+y+z5YZty1hU1Bh5T0jNXp+9S75Rw== - dependencies: - "@ethersproject/address" "^5.4.0" - "@web3-react/types" "^8.0.16-alpha.0" - zustand "^4.0.0-beta.0" - "@web3-react/types@^6.0.7": version "6.0.7" resolved "https://registry.yarnpkg.com/@web3-react/types/-/types-6.0.7.tgz#34a6204224467eedc6123abaf55fbb6baeb2809f" integrity sha512-ofGmfDhxmNT1/P/MgVa8IKSkCStFiyvXe+U5tyZurKdrtTDFU+wJ/LxClPDtFerWpczNFPUSrKcuhfPX1sI6+A== -"@web3-react/types@^8.0.16-alpha.0", "widgets-web3-react/types@npm:@web3-react/types@8.0.16-alpha.0": - version "8.0.16-alpha.0" - resolved "https://registry.yarnpkg.com/@web3-react/types/-/types-8.0.16-alpha.0.tgz#bc9eeaf24d6a3e43cd262a90b4f48d1e4c95bfa4" - integrity sha512-vVVUeV0xNaYpn+35nbU2qmfELU5c6nioSTp5esRX3qChIc9eHss9r43AopTMOGiS6keC/fjzuSXOxK33nRBIyA== - dependencies: - zustand "^4.0.0-beta.0" - "@web3-react/walletconnect-connector@^7.0.2-alpha.0": version "7.0.2-alpha.0" resolved "https://registry.yarnpkg.com/@web3-react/walletconnect-connector/-/walletconnect-connector-7.0.2-alpha.0.tgz#dacd59db626b42137a1e4f34ea23ef1f04cc8b99" @@ -21222,11 +21201,6 @@ use-sidecar@^1.0.1: detect-node-es "^1.1.0" tslib "^1.9.3" -use-sync-external-store@1.0.0-beta-96ca8d915-20211115: - version "1.0.0-beta-96ca8d915-20211115" - resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.0.0-beta-96ca8d915-20211115.tgz#80777c497f60b57ca23f52de760ff22080814a3c" - integrity sha512-Xkzd7SoZv29jYc95GO0k1v69oSHUdC+4nNaBQ309zvFFyvzYn+I87ee+OD1RKF8SGRwkEJQxjyFzYRcncdpSSg== - use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" @@ -21757,46 +21731,6 @@ widest-line@^3.1.0: dependencies: string-width "^4.0.0" -"widgets-web3-react/core@npm:@web3-react/core@8.0.16-alpha.0": - version "8.0.16-alpha.0" - resolved "https://registry.yarnpkg.com/@web3-react/core/-/core-8.0.16-alpha.0.tgz#7e8a2e28ee492f40e482f609fd8c353b0bafa8c3" - integrity sha512-eRkZxSdOR4c0U0IpRnWf/5djWfmtLQ52RmpwwvAozxIEyM6UANsfvuyV3j8LSNIC0kWwZNl5fcOWTHQB6vetcg== - dependencies: - "@web3-react/store" "^8.0.16-alpha.0" - "@web3-react/types" "^8.0.16-alpha.0" - zustand "^4.0.0-beta.0" - -"widgets-web3-react/eip1193@npm:@web3-react/eip1193@8.0.16-alpha.0": - version "8.0.16-alpha.0" - resolved "https://registry.yarnpkg.com/@web3-react/eip1193/-/eip1193-8.0.16-alpha.0.tgz#d0c7703804edc40c393086e5c136824cebb0d3e3" - integrity sha512-prHcUj3Te8lqowZ0DQX81qL50uYVq7242B1IX5l+kgFxMlO1lwTH1JHpIm4T/sjxQce93Y4896eu1naNM55QtA== - dependencies: - "@web3-react/types" "^8.0.16-alpha.0" - -"widgets-web3-react/empty@npm:@web3-react/empty@8.0.17-alpha.0": - version "8.0.17-alpha.0" - resolved "https://registry.yarnpkg.com/@web3-react/empty/-/empty-8.0.17-alpha.0.tgz#79a3d42a01f59b00106acb055bf1be90cdc1b5ce" - integrity sha512-XpbN5It5+ajNFOP/9HVCc5fiMIYTJtqKrvWEeGwz2cRSP1TSFFlPFgpHU2T9gwffXjWXDfxPM2oRTE9v1gQu/Q== - dependencies: - "@web3-react/types" "^8.0.16-alpha.0" - -"widgets-web3-react/metamask@npm:@web3-react/metamask@8.0.16-alpha.0": - version "8.0.16-alpha.0" - resolved "https://registry.yarnpkg.com/@web3-react/metamask/-/metamask-8.0.16-alpha.0.tgz#7870580484ea0872b3b5713440f1858b9b6b03b8" - integrity sha512-KizXfLb2NPwlrSn7oJ/hbMTRsUoBmMbN1Wuur1oI1pxbDlqRMkfAZpfibSEgTLuTye1uNI8XmWCLIbWzU4oOSA== - dependencies: - "@metamask/detect-provider" "^1.2.0" - "@web3-react/types" "^8.0.16-alpha.0" - -"widgets-web3-react/url@npm:@web3-react/url@8.0.17-alpha.0": - version "8.0.17-alpha.0" - resolved "https://registry.yarnpkg.com/@web3-react/url/-/url-8.0.17-alpha.0.tgz#799082966ba8e3f752b9cdd1991c8b8037bd96c9" - integrity sha512-bcHtkUUhW8hrLDnx3Y1q88LK1i5qtQKWQQnYiCd8963ayAP/XuxoKiR56a/H5v5ofl9f3EM7GMO3WwFNabD6iQ== - dependencies: - "@ethersproject/experimental" "^5.4.0" - "@ethersproject/providers" "^5.4.5" - "@web3-react/types" "^8.0.16-alpha.0" - word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" @@ -22294,10 +22228,3 @@ yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== - -zustand@^4.0.0-beta.0: - version "4.0.0-beta.0" - resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.0.0-beta.0.tgz#880bb21d9308ebc733a2ae07edd7c2c7b4f68eed" - integrity sha512-m7POAHkAeTEQqUdGC9M62/KXSsX6YQu6Gd4CiGZ6FOOTaUp1a0Hm9D8/fnBiMv8rGg0dfZu19JFSbRT9b+qQwA== - dependencies: - use-sync-external-store "1.0.0-beta-96ca8d915-20211115" From 33ed55bbc964489a5e18cf3d0219d76948575bc1 Mon Sep 17 00:00:00 2001 From: Lint Action Date: Sun, 30 Jan 2022 14:03:33 +0000 Subject: [PATCH 15/15] Fix code style issues with ESLint --- dist2/snowflake.esm.js | 28138 ++++++++++++++++++++++----------------- 1 file changed, 16087 insertions(+), 12051 deletions(-) diff --git a/dist2/snowflake.esm.js b/dist2/snowflake.esm.js index 00beaa70597..5bf782315ea 100644 --- a/dist2/snowflake.esm.js +++ b/dist2/snowflake.esm.js @@ -1,12150 +1,16186 @@ -import { jsx, jsxs, Fragment } from 'react/jsx-runtime'; -import styled, { keyframes, css, createGlobalStyle, ThemeProvider as ThemeProvider$1, ThemeContext, useTheme as useTheme$1 } from 'styled-components/macro'; -import * as React from 'react'; -import React__default, { useMemo, useEffect, useState, useCallback, useContext, useRef, useLayoutEffect, memo, Suspense } from 'react'; -import { useDispatch, useSelector, shallowEqual, Provider as Provider$1 } from 'react-redux'; -import { createAction, createSlice, nanoid, createReducer, configureStore } from '@reduxjs/toolkit'; -import qs, { parse, stringify } from 'qs'; -import { useLocation, Link as Link$1, useHistory, NavLink, Redirect, Route as Route$3, Switch, HashRouter } from 'react-router-dom'; -import { getAddress, isAddress as isAddress$1 } from '@ethersproject/address'; -import { Trans, t, Plural } from '@lingui/macro'; -import { useWeb3React, UnsupportedChainIdError, createWeb3ReactRoot, Web3ReactProvider } from '@web3-react/core'; -import { Percent, Token, WETH9, NativeCurrency, Ether, CurrencyAmount, TradeType, Price, Fraction } from '@uniswap/sdk-core'; -import JSBI from 'jsbi'; -import { Text as Text$1, Box as Box$1 } from 'rebass'; -import { AddressZero, MaxUint256 } from '@ethersproject/constants'; -import { Contract } from '@ethersproject/contracts'; -import { atom } from 'jotai'; -import { useAtomValue, useUpdateAtom, atomWithDefault } from 'jotai/utils'; -import { createMulticall, NEVER_RELOAD } from '@uniswap/redux-multicall'; -import { FACTORY_ADDRESS, Pair, computePairAddress, Trade, Route as Route$2, Router } from '@uniswap/v2-sdk'; -import { FACTORY_ADDRESS as FACTORY_ADDRESS$1, Pool as Pool$1, computePoolAddress, FeeAmount, Route as Route$1, SwapQuoter, toHex, Trade as Trade$2, SwapRouter } from '@uniswap/v3-sdk'; -import { combineReducers, createStore } from 'redux'; -import { namehash } from '@ethersproject/hash'; -import { initializeApp } from 'firebase/app'; -import { getDatabase, push, ref } from 'firebase/database'; -import { arrayify, hexZeroPad, hexStripZeros, splitSignature } from '@ethersproject/bytes'; -import { parseBytes32String } from '@ethersproject/strings'; -import { initializeConnector } from 'widgets-web3-react/core'; -import { EMPTY } from 'widgets-web3-react/empty'; -import CID from 'cids'; -import { getNameFromData, rmPrefix } from 'multicodec'; -import { decode, toB58String } from 'multihashes'; -import { Interface } from '@ethersproject/abi'; -import { X, ExternalLink as ExternalLink$1, Trash, Check, ArrowDown, Info, HelpCircle, Coffee, MessageCircle, Globe, Moon, Sun, BookOpen, FileText, ChevronLeft, AlertTriangle, CheckCircle, Copy as Copy$1, Triangle, ArrowLeft, ArrowRight, Activity, ArrowDownCircle, ChevronDown, AlertOctagon, Heart, AlertCircle, ArrowUpRight, Slash, Plus, Edit, Settings, Lock, ArrowUpCircle } from 'react-feather'; -import ReactGA from 'react-ga'; -import { Box, Button as Button$1 } from 'rebass/styled-components'; -import { darken, transparentize, readableColor, shade } from 'polished'; -import ReactConfetti from 'react-confetti'; -import { DialogOverlay, DialogContent } from '@reach/dialog'; -import { animated, useTransition, useSpring } from 'react-spring'; -import { useGesture } from 'react-use-gesture'; -import { UAParser } from 'ua-parser-js'; -import { createApi, fetchBaseQuery, skipToken, setupListeners } from '@reduxjs/toolkit/query/react'; -import { save, load } from 'redux-localstorage-simple'; -import { gql, ClientError, GraphQLClient } from 'graphql-request'; -import { getVersionUpgrade, VersionUpgrade, minVersionBump } from '@uniswap/token-lists'; -import { Protocol, Trade as Trade$1, SwapRouter as SwapRouter$1 } from '@uniswap/router-sdk'; -import ms from 'ms.macro'; -import { parseUnits } from '@ethersproject/units'; -import useScrollPosition from '@react-hook/window-scroll'; -import Portal from '@reach/portal'; -import { usePopper } from 'react-popper'; -import { SafeAppConnector } from '@gnosis.pm/safe-apps-web3-react'; -import { InjectedConnector } from '@web3-react/injected-connector'; -import { PortisConnector } from '@web3-react/portis-connector'; -import { WalletConnectConnector } from '@web3-react/walletconnect-connector'; -import { WalletLinkConnector } from '@web3-react/walletlink-connector'; -import { Web3Provider } from '@ethersproject/providers'; -import { FortmaticConnector as FortmaticConnector$1 } from '@web3-react/fortmatic-connector'; -import { AbstractConnector } from '@web3-react/abstract-connector'; -import invariant from 'tiny-invariant'; -import jazzicon from '@metamask/jazzicon'; -import { BigNumber } from '@ethersproject/bignumber'; -import copy from 'copy-to-clipboard'; -import { useSpring as useSpring$1 } from 'react-spring/web'; -import useResizeObserver from 'use-resize-observer'; -import AutoSizer from 'react-virtualized-auto-sizer'; -import { FixedSizeList } from 'react-window'; -import Vibrant from 'node-vibrant/lib/bundle'; -import { hex } from 'wcag-contrast'; -import { i18n } from '@lingui/core'; -import { I18nProvider } from '@lingui/react'; -import { af, ar, ca, cs, da, de, el, en, es, fi, fr, he, hu, id, it, ja, ko, nl, no, pl, pt, ro, ru, sr, sv, sw, tr, uk, vi, zh } from 'make-plural/plurals'; -import { ChainId, routeAmountsToString, IMetric, setGlobalMetric, AlphaRouter } from '@uniswap/smart-order-router'; -import { providers } from 'ethers/lib/ethers'; - -/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */ -/* global Reflect, Promise */ - -var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); -}; - -function __extends(d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); -} - -var __assign = function() { - __assign = Object.assign || function __assign(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); -}; - -function __rest(s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -} - -function __awaiter(thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -} - -function __generator(thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -} - -function __values(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -} - -function __read(o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; -} - -function __spreadArray(to, from, pack) { - if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { - if (ar || !(i in from)) { - if (!ar) ar = Array.prototype.slice.call(from, 0, i); - ar[i] = from[i]; - } - } - return to.concat(ar || Array.prototype.slice.call(from)); -} - -function __makeTemplateObject(cooked, raw) { - if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } - return cooked; +import { jsx, jsxs, Fragment } from 'react/jsx-runtime' +import styled, { + keyframes, + css, + createGlobalStyle, + ThemeProvider as ThemeProvider$1, + ThemeContext, + useTheme as useTheme$1, +} from 'styled-components/macro' +import * as React from 'react' +import React__default, { + useMemo, + useEffect, + useState, + useCallback, + useContext, + useRef, + useLayoutEffect, + memo, + Suspense, +} from 'react' +import { useDispatch, useSelector, shallowEqual, Provider as Provider$1 } from 'react-redux' +import { createAction, createSlice, nanoid, createReducer, configureStore } from '@reduxjs/toolkit' +import qs, { parse, stringify } from 'qs' +import { + useLocation, + Link as Link$1, + useHistory, + NavLink, + Redirect, + Route as Route$3, + Switch, + HashRouter, +} from 'react-router-dom' +import { getAddress, isAddress as isAddress$1 } from '@ethersproject/address' +import { Trans, t, Plural } from '@lingui/macro' +import { useWeb3React, UnsupportedChainIdError, createWeb3ReactRoot, Web3ReactProvider } from '@web3-react/core' +import { + Percent, + Token, + WETH9, + NativeCurrency, + Ether, + CurrencyAmount, + TradeType, + Price, + Fraction, +} from '@uniswap/sdk-core' +import JSBI from 'jsbi' +import { Text as Text$1, Box as Box$1 } from 'rebass' +import { AddressZero, MaxUint256 } from '@ethersproject/constants' +import { Contract } from '@ethersproject/contracts' +import { atom } from 'jotai' +import { useAtomValue, useUpdateAtom, atomWithDefault } from 'jotai/utils' +import { createMulticall, NEVER_RELOAD } from '@uniswap/redux-multicall' +import { FACTORY_ADDRESS, Pair, computePairAddress, Trade, Route as Route$2, Router } from '@uniswap/v2-sdk' +import { + FACTORY_ADDRESS as FACTORY_ADDRESS$1, + Pool as Pool$1, + computePoolAddress, + FeeAmount, + Route as Route$1, + SwapQuoter, + toHex, + Trade as Trade$2, + SwapRouter, +} from '@uniswap/v3-sdk' +import { combineReducers, createStore } from 'redux' +import { namehash } from '@ethersproject/hash' +import { initializeApp } from 'firebase/app' +import { getDatabase, push, ref } from 'firebase/database' +import { arrayify, hexZeroPad, hexStripZeros, splitSignature } from '@ethersproject/bytes' +import { parseBytes32String } from '@ethersproject/strings' +import { initializeConnector } from 'widgets-web3-react/core' +import { EMPTY } from 'widgets-web3-react/empty' +import CID from 'cids' +import { getNameFromData, rmPrefix } from 'multicodec' +import { decode, toB58String } from 'multihashes' +import { Interface } from '@ethersproject/abi' +import { + X, + ExternalLink as ExternalLink$1, + Trash, + Check, + ArrowDown, + Info, + HelpCircle, + Coffee, + MessageCircle, + Globe, + Moon, + Sun, + BookOpen, + FileText, + ChevronLeft, + AlertTriangle, + CheckCircle, + Copy as Copy$1, + Triangle, + ArrowLeft, + ArrowRight, + Activity, + ArrowDownCircle, + ChevronDown, + AlertOctagon, + Heart, + AlertCircle, + ArrowUpRight, + Slash, + Plus, + Edit, + Settings, + Lock, + ArrowUpCircle, +} from 'react-feather' +import ReactGA from 'react-ga' +import { Box, Button as Button$1 } from 'rebass/styled-components' +import { darken, transparentize, readableColor, shade } from 'polished' +import ReactConfetti from 'react-confetti' +import { DialogOverlay, DialogContent } from '@reach/dialog' +import { animated, useTransition, useSpring } from 'react-spring' +import { useGesture } from 'react-use-gesture' +import { UAParser } from 'ua-parser-js' +import { createApi, fetchBaseQuery, skipToken, setupListeners } from '@reduxjs/toolkit/query/react' +import { save, load } from 'redux-localstorage-simple' +import { gql, ClientError, GraphQLClient } from 'graphql-request' +import { getVersionUpgrade, VersionUpgrade, minVersionBump } from '@uniswap/token-lists' +import { Protocol, Trade as Trade$1, SwapRouter as SwapRouter$1 } from '@uniswap/router-sdk' +import ms from 'ms.macro' +import { parseUnits } from '@ethersproject/units' +import useScrollPosition from '@react-hook/window-scroll' +import Portal from '@reach/portal' +import { usePopper } from 'react-popper' +import { SafeAppConnector } from '@gnosis.pm/safe-apps-web3-react' +import { InjectedConnector } from '@web3-react/injected-connector' +import { PortisConnector } from '@web3-react/portis-connector' +import { WalletConnectConnector } from '@web3-react/walletconnect-connector' +import { WalletLinkConnector } from '@web3-react/walletlink-connector' +import { Web3Provider } from '@ethersproject/providers' +import { FortmaticConnector as FortmaticConnector$1 } from '@web3-react/fortmatic-connector' +import { AbstractConnector } from '@web3-react/abstract-connector' +import invariant from 'tiny-invariant' +import jazzicon from '@metamask/jazzicon' +import { BigNumber } from '@ethersproject/bignumber' +import copy from 'copy-to-clipboard' +import { useSpring as useSpring$1 } from 'react-spring/web' +import useResizeObserver from 'use-resize-observer' +import AutoSizer from 'react-virtualized-auto-sizer' +import { FixedSizeList } from 'react-window' +import Vibrant from 'node-vibrant/lib/bundle' +import { hex } from 'wcag-contrast' +import { i18n } from '@lingui/core' +import { I18nProvider } from '@lingui/react' +import { + af, + ar, + ca, + cs, + da, + de, + el, + en, + es, + fi, + fr, + he, + hu, + id, + it, + ja, + ko, + nl, + no, + pl, + pt, + ro, + ru, + sr, + sv, + sw, + tr, + uk, + vi, + zh, +} from 'make-plural/plurals' +import { ChainId, routeAmountsToString, IMetric, setGlobalMetric, AlphaRouter } from '@uniswap/smart-order-router' +import { providers } from 'ethers/lib/ethers' + +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ +/* global Reflect, Promise */ + +var extendStatics = function (d, b) { + extendStatics = + Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && + function (d, b) { + d.__proto__ = b + }) || + function (d, b) { + for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p] + } + return extendStatics(d, b) } -var rotate$2 = keyframes(templateObject_1$1n || (templateObject_1$1n = __makeTemplateObject(["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"], ["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"]))); -var StyledSVG = styled.svg(templateObject_2$11 || (templateObject_2$11 = __makeTemplateObject(["\n animation: 2s ", " linear infinite;\n height: ", ";\n width: ", ";\n path {\n stroke: ", ";\n }\n"], ["\n animation: 2s ", " linear infinite;\n height: ", ";\n width: ", ";\n path {\n stroke: ", ";\n }\n" - /** - * Takes in custom size and stroke for circle color, default to primary color as fill, - * need ...rest for layered styles on top - */ -])), rotate$2, function (_a) { - var size = _a.size; - return size; -}, function (_a) { - var size = _a.size; - return size; -}, function (_a) { - var stroke = _a.stroke, theme = _a.theme; - return stroke !== null && stroke !== void 0 ? stroke : theme.primary1; -}); -/** - * Takes in custom size and stroke for circle color, default to primary color as fill, - * need ...rest for layered styles on top - */ -function Loader(_a) { - var _b = _a.size, size = _b === void 0 ? '16px' : _b, stroke = _a.stroke, rest = __rest(_a, ["size", "stroke"]); - return (jsx(StyledSVG, __assign({ viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", size: size, stroke: stroke }, rest, { children: jsx("path", { d: "M12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22C17.5228 22 22 17.5228 22 12C22 9.27455 20.9097 6.80375 19.1414 5", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round" }, void 0) }), void 0)); -} -var templateObject_1$1n, templateObject_2$11; - -var useAppDispatch = function () { return useDispatch(); }; -var useAppSelector = useSelector; - -var updateMatchesDarkMode = createAction('user/updateMatchesDarkMode'); -var updateUserDarkMode = createAction('user/updateUserDarkMode'); -var updateUserExpertMode = createAction('user/updateUserExpertMode'); -var updateUserLocale = createAction('user/updateUserLocale'); -var updateShowSurveyPopup = createAction('user/updateShowSurveyPopup'); -var updateUserClientSideRouter = createAction('user/updateUserClientSideRouter'); -var updateHideClosedPositions = createAction('user/hideClosedPositions'); -var updateUserSlippageTolerance = createAction('user/updateUserSlippageTolerance'); -var updateUserDeadline = createAction('user/updateUserDeadline'); -var addSerializedToken = createAction('user/addSerializedToken'); -var removeSerializedToken = createAction('user/removeSerializedToken'); -var addSerializedPair = createAction('user/addSerializedPair'); -var removeSerializedPair = createAction('user/removeSerializedPair'); - -function parsedQueryString(search) { - if (!search) { - // react-router-dom places search string in the hash - var hash = window.location.hash; - search = hash.substr(hash.indexOf('?')); - } - return search && search.length > 1 ? parse(search, { parseArrays: false, ignoreQueryPrefix: true }) : {}; -} -function useParsedQueryString() { - var search = useLocation().search; - return useMemo(function () { return parsedQueryString(search); }, [search]); +function __extends(d, b) { + if (typeof b !== 'function' && b !== null) + throw new TypeError('Class extends value ' + String(b) + ' is not a constructor or null') + extendStatics(d, b) + function __() { + this.constructor = d + } + d.prototype = b === null ? Object.create(b) : ((__.prototype = b.prototype), new __()) } -function ApeModeQueryParamReader() { - useApeModeQueryParamReader(); - return null; -} -function useApeModeQueryParamReader() { - var dispatch = useAppDispatch(); - var ape = useParsedQueryString().ape; - useEffect(function () { - if (typeof ape !== 'string') - return; - if (ape === '' || ape.toLowerCase() === 'true') { - dispatch(updateUserExpertMode({ userExpertMode: true })); - } - }); +var __assign = function () { + __assign = + Object.assign || + function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i] + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p] + } + return t + } + return __assign.apply(this, arguments) } -var NetworkContextName = 'NETWORK'; -var IS_IN_IFRAME = window.parent !== window; -// 30 minutes, denominated in seconds -var DEFAULT_DEADLINE_FROM_NOW = 60 * 30; -var L2_DEADLINE_FROM_NOW = 60 * 5; -// transaction popup dismisal amounts -var DEFAULT_TXN_DISMISS_MS = 25000; -var L2_TXN_DISMISS_MS = 5000; -// used for rewards deadlines -JSBI.BigInt(60 * 60 * 24 * 7); -JSBI.BigInt(0); -// one basis JSBI.BigInt -var BIPS_BASE = JSBI.BigInt(10000); -new Percent(JSBI.BigInt(1), BIPS_BASE); -// used for warning states -var ALLOWED_PRICE_IMPACT_LOW = new Percent(JSBI.BigInt(100), BIPS_BASE); // 1% -var ALLOWED_PRICE_IMPACT_MEDIUM = new Percent(JSBI.BigInt(300), BIPS_BASE); // 3% -var ALLOWED_PRICE_IMPACT_HIGH = new Percent(JSBI.BigInt(500), BIPS_BASE); // 5% -// if the price slippage exceeds this number, force the user to type 'confirm' to execute -var PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN = new Percent(JSBI.BigInt(1000), BIPS_BASE); // 10% -// for non expert mode disable swaps above this -var BLOCKED_PRICE_IMPACT_NON_EXPERT = new Percent(JSBI.BigInt(1500), BIPS_BASE); // 15% -var BETTER_TRADE_LESS_HOPS_THRESHOLD = new Percent(JSBI.BigInt(50), BIPS_BASE); -var ZERO_PERCENT = new Percent('0'); -new Percent(JSBI.BigInt(200), BIPS_BASE); -var ONE_HUNDRED_PERCENT = new Percent('1'); - -function useActiveWeb3React() { - // if (false) { - // return useWidgetsWeb3React() - // } - var interfaceContext = useWeb3React(); - var interfaceNetworkContext = useWeb3React(NetworkContextName); - if (interfaceContext.active) { - return interfaceContext; - } - return interfaceNetworkContext; +function __rest(s, e) { + var t = {} + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p] + if (s != null && typeof Object.getOwnPropertySymbols === 'function') + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { + if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]] + } + return t } -var Circle$1 = "data:image/svg+xml,%3Csvg%20width%3D%2294%22%20height%3D%2294%22%20viewBox%3D%220%200%2094%2094%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%20%20%3Cpath%20d%3D%22M92%2047C92%2022.1472%2071.8528%202%2047%202C22.1472%202%202%2022.1472%202%2047C2%2071.8528%2022.1472%2092%2047%2092%22%20stroke%3D%22%232172E5%22%20stroke-width%3D%223%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E"; +function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P + ? value + : new P(function (resolve) { + resolve(value) + }) + } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)) + } catch (e) { + reject(e) + } + } + function rejected(value) { + try { + step(generator['throw'](value)) + } catch (e) { + reject(e) + } + } + function step(result) { + result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected) + } + step((generator = generator.apply(thisArg, _arguments || [])).next()) + }) +} -var tokenLogo = "data:image/png;base64,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"; +function __generator(thisArg, body) { + var _ = { + label: 0, + sent() { + if (t[0] & 1) throw t[1] + return t[1] + }, + trys: [], + ops: [], + }, + f, + y, + t, + g + return ( + (g = { next: verb(0), throw: verb(1), return: verb(2) }), + typeof Symbol === 'function' && + (g[Symbol.iterator] = function () { + return this + }), + g + ) + function verb(n) { + return function (v) { + return step([n, v]) + } + } + function step(op) { + if (f) throw new TypeError('Generator is already executing.') + while (_) + try { + if ( + ((f = 1), + y && + (t = op[0] & 2 ? y['return'] : op[0] ? y['throw'] || ((t = y['return']) && t.call(y), 0) : y.next) && + !(t = t.call(y, op[1])).done) + ) + return t + if (((y = 0), t)) op = [op[0] & 2, t.value] + switch (op[0]) { + case 0: + case 1: + t = op + break + case 4: + _.label++ + return { value: op[1], done: false } + case 5: + _.label++ + y = op[1] + op = [0] + continue + case 7: + op = _.ops.pop() + _.trys.pop() + continue + default: + if (!((t = _.trys), (t = t.length > 0 && t[t.length - 1])) && (op[0] === 6 || op[0] === 2)) { + _ = 0 + continue + } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { + _.label = op[1] + break + } + if (op[0] === 6 && _.label < t[1]) { + _.label = t[1] + t = op + break + } + if (t && _.label < t[2]) { + _.label = t[2] + _.ops.push(op) + break + } + if (t[2]) _.ops.pop() + _.trys.pop() + continue + } + op = body.call(thisArg, _) + } catch (e) { + op = [6, e] + y = 0 + } finally { + f = t = 0 + } + if (op[0] & 5) throw op[1] + return { value: op[0] ? op[1] : void 0, done: true } + } +} -// returns the checksummed address if the address is valid, otherwise returns false -function isAddress(value) { - try { - return getAddress(value); - } - catch (_a) { - return false; - } -} -// shorten the checksummed version of the input address to have 0x + 4 characters at start and end -function shortenAddress(address, chars) { - if (chars === void 0) { chars = 4; } - var parsed = isAddress(address); - if (!parsed) { - throw Error("Invalid 'address' parameter '" + address + "'."); - } - return parsed.substring(0, chars + 2) + "..." + parsed.substring(42 - chars); -} -// account is not optional -function getSigner(library, account) { - return library.getSigner(account).connectUnchecked(); -} -// account is optional -function getProviderOrSigner(library, account) { - return account ? getSigner(library, account) : library; -} -// account is optional -function getContract(address, ABI, library, account) { - if (!isAddress(address) || address === AddressZero) { - throw Error("Invalid 'address' parameter '" + address + "'."); - } - return new Contract(address, ABI, getProviderOrSigner(library, account)); -} -function escapeRegExp(string) { - return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string -} -function isTokenOnList(chainTokenMap, token) { - var _a; - return Boolean((token === null || token === void 0 ? void 0 : token.isToken) && ((_a = chainTokenMap[token.chainId]) === null || _a === void 0 ? void 0 : _a[token.address])); +function __values(o) { + var s = typeof Symbol === 'function' && Symbol.iterator, + m = s && o[s], + i = 0 + if (m) return m.call(o) + if (o && typeof o.length === 'number') + return { + next() { + if (o && i >= o.length) o = void 0 + return { value: o && o[i++], done: !o } + }, + } + throw new TypeError(s ? 'Object is not iterable.' : 'Symbol.iterator is not defined.') } -/** - * Debounces updates to a value. - * Non-primitives *must* wrap the value in useMemo, or the value will be updated due to referential inequality. - */ -// modified from https://usehooks.com/useDebounce/ -function useDebounce(value, delay) { - var _a = __read(useState(value), 2), debouncedValue = _a[0], setDebouncedValue = _a[1]; - useEffect(function () { - // Update debounced value after delay - var handler = setTimeout(function () { - setDebouncedValue(value); - }, delay); - // Cancel the timeout if value changes (also on delay change or unmount) - // This is how we prevent debounced value from updating if value is changed ... - // .. within the delay period. Timeout gets cleared and restarted. - return function () { - clearTimeout(handler); - }; - }, [value, delay]); - return debouncedValue; +function __read(o, n) { + var m = typeof Symbol === 'function' && o[Symbol.iterator] + if (!m) return o + var i = m.call(o), + r, + ar = [], + e + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value) + } catch (error) { + e = { error } + } finally { + try { + if (r && !r.done && (m = i['return'])) m.call(i) + } finally { + if (e) throw e.error + } + } + return ar } -var VISIBILITY_STATE_SUPPORTED = 'visibilityState' in document; -function isWindowVisible() { - return !VISIBILITY_STATE_SUPPORTED || document.visibilityState !== 'hidden'; -} -/** - * Returns whether the window is currently visible to the user. - */ -function useIsWindowVisible() { - var _a = __read(useState(isWindowVisible()), 2), focused = _a[0], setFocused = _a[1]; - var listener = useCallback(function () { - setFocused(isWindowVisible()); - }, [setFocused]); - useEffect(function () { - if (!VISIBILITY_STATE_SUPPORTED) - return undefined; - document.addEventListener('visibilitychange', listener); - return function () { - document.removeEventListener('visibilitychange', listener); - }; - }, [listener]); - return focused; +function __spreadArray(to, from, pack) { + if (pack || arguments.length === 2) + for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i) + ar[i] = from[i] + } + } + return to.concat(ar || Array.prototype.slice.call(from)) } -function useBlock() { - var _a = useActiveWeb3React(), chainId = _a.chainId, library = _a.library; - var windowVisible = useIsWindowVisible(); - var _b = __read(useState({ chainId: chainId }), 2), state = _b[0], setState = _b[1]; - var onBlock = useCallback(function (block) { - setState(function (state) { - if (state.chainId === chainId) { - if (typeof state.block !== 'number') - return { chainId: chainId, block: block }; - return { chainId: chainId, block: Math.max(block, state.block) }; - } - return state; - }); - }, [chainId]); - useEffect(function () { - if (library && chainId && windowVisible) { - setState({ chainId: chainId }); - library - .getBlockNumber() - .then(onBlock) - .catch(function (error) { - console.error("Failed to get block number for chainId " + chainId, error); - }); - library.on('block', onBlock); - return function () { - library.removeListener('block', onBlock); - }; - } - return undefined; - }, [chainId, library, onBlock, windowVisible]); - var debouncedBlock = useDebounce(state.block, 100); - return state.block ? debouncedBlock : undefined; -} -var blockAtom = atom(undefined); -function BlockUpdater() { - var setBlock = useUpdateAtom(blockAtom); - var block = useBlock(); - useEffect(function () { - setBlock(block); - }, [block, setBlock]); - return null; -} -/** Requires that BlockUpdater be installed in the DOM tree. */ -function useBlockNumber() { - var chainId = useActiveWeb3React().chainId; - var block = useAtomValue(blockAtom); - return chainId ? block : undefined; -} -function useFastForwardBlockNumber() { - return useUpdateAtom(blockAtom); +function __makeTemplateObject(cooked, raw) { + if (Object.defineProperty) { + Object.defineProperty(cooked, 'raw', { value: raw }) + } else { + cooked.raw = raw + } + return cooked +} + +var rotate$2 = keyframes( + templateObject_1$1n || + (templateObject_1$1n = __makeTemplateObject( + ['\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n'], + ['\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n'] + )) +) +var StyledSVG = styled.svg( + templateObject_2$11 || + (templateObject_2$11 = __makeTemplateObject( + ['\n animation: 2s ', ' linear infinite;\n height: ', ';\n width: ', ';\n path {\n stroke: ', ';\n }\n'], + [ + '\n animation: 2s ', + ' linear infinite;\n height: ', + ';\n width: ', + ';\n path {\n stroke: ', + ';\n }\n', + /** + * Takes in custom size and stroke for circle color, default to primary color as fill, + * need ...rest for layered styles on top + */ + ] + )), + rotate$2, + function (_a) { + var size = _a.size + return size + }, + function (_a) { + var size = _a.size + return size + }, + function (_a) { + var stroke = _a.stroke, + theme = _a.theme + return stroke !== null && stroke !== void 0 ? stroke : theme.primary1 + } +) +/** + * Takes in custom size and stroke for circle color, default to primary color as fill, + * need ...rest for layered styles on top + */ +function Loader(_a) { + var _b = _a.size, + size = _b === void 0 ? '16px' : _b, + stroke = _a.stroke, + rest = __rest(_a, ['size', 'stroke']) + return jsx( + StyledSVG, + __assign({ viewBox: '0 0 24 24', fill: 'none', xmlns: 'http://www.w3.org/2000/svg', size, stroke }, rest, { + children: jsx( + 'path', + { + d: 'M12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22C17.5228 22 22 17.5228 22 12C22 9.27455 20.9097 6.80375 19.1414 5', + strokeWidth: '2.5', + strokeLinecap: 'round', + strokeLinejoin: 'round', + }, + void 0 + ), + }), + void 0 + ) +} +var templateObject_1$1n, templateObject_2$11 + +var useAppDispatch = function () { + return useDispatch() +} +var useAppSelector = useSelector + +var updateMatchesDarkMode = createAction('user/updateMatchesDarkMode') +var updateUserDarkMode = createAction('user/updateUserDarkMode') +var updateUserExpertMode = createAction('user/updateUserExpertMode') +var updateUserLocale = createAction('user/updateUserLocale') +var updateShowSurveyPopup = createAction('user/updateShowSurveyPopup') +var updateUserClientSideRouter = createAction('user/updateUserClientSideRouter') +var updateHideClosedPositions = createAction('user/hideClosedPositions') +var updateUserSlippageTolerance = createAction('user/updateUserSlippageTolerance') +var updateUserDeadline = createAction('user/updateUserDeadline') +var addSerializedToken = createAction('user/addSerializedToken') +var removeSerializedToken = createAction('user/removeSerializedToken') +var addSerializedPair = createAction('user/addSerializedPair') +var removeSerializedPair = createAction('user/removeSerializedPair') + +function parsedQueryString(search) { + if (!search) { + // react-router-dom places search string in the hash + var hash = window.location.hash + search = hash.substr(hash.indexOf('?')) + } + return search && search.length > 1 ? parse(search, { parseArrays: false, ignoreQueryPrefix: true }) : {} +} +function useParsedQueryString() { + var search = useLocation().search + return useMemo( + function () { + return parsedQueryString(search) + }, + [search] + ) +} + +function ApeModeQueryParamReader() { + useApeModeQueryParamReader() + return null +} +function useApeModeQueryParamReader() { + var dispatch = useAppDispatch() + var ape = useParsedQueryString().ape + useEffect(function () { + if (typeof ape !== 'string') return + if (ape === '' || ape.toLowerCase() === 'true') { + dispatch(updateUserExpertMode({ userExpertMode: true })) + } + }) +} + +var NetworkContextName = 'NETWORK' +var IS_IN_IFRAME = window.parent !== window +// 30 minutes, denominated in seconds +var DEFAULT_DEADLINE_FROM_NOW = 60 * 30 +var L2_DEADLINE_FROM_NOW = 60 * 5 +// transaction popup dismisal amounts +var DEFAULT_TXN_DISMISS_MS = 25000 +var L2_TXN_DISMISS_MS = 5000 +// used for rewards deadlines +JSBI.BigInt(60 * 60 * 24 * 7) +JSBI.BigInt(0) +// one basis JSBI.BigInt +var BIPS_BASE = JSBI.BigInt(10000) +new Percent(JSBI.BigInt(1), BIPS_BASE) +// used for warning states +var ALLOWED_PRICE_IMPACT_LOW = new Percent(JSBI.BigInt(100), BIPS_BASE) // 1% +var ALLOWED_PRICE_IMPACT_MEDIUM = new Percent(JSBI.BigInt(300), BIPS_BASE) // 3% +var ALLOWED_PRICE_IMPACT_HIGH = new Percent(JSBI.BigInt(500), BIPS_BASE) // 5% +// if the price slippage exceeds this number, force the user to type 'confirm' to execute +var PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN = new Percent(JSBI.BigInt(1000), BIPS_BASE) // 10% +// for non expert mode disable swaps above this +var BLOCKED_PRICE_IMPACT_NON_EXPERT = new Percent(JSBI.BigInt(1500), BIPS_BASE) // 15% +var BETTER_TRADE_LESS_HOPS_THRESHOLD = new Percent(JSBI.BigInt(50), BIPS_BASE) +var ZERO_PERCENT = new Percent('0') +new Percent(JSBI.BigInt(200), BIPS_BASE) +var ONE_HUNDRED_PERCENT = new Percent('1') + +function useActiveWeb3React() { + // if (false) { + // return useWidgetsWeb3React() + // } + var interfaceContext = useWeb3React() + var interfaceNetworkContext = useWeb3React(NetworkContextName) + if (interfaceContext.active) { + return interfaceContext + } + return interfaceNetworkContext +} + +var Circle$1 = + 'data:image/svg+xml,%3Csvg%20width%3D%2294%22%20height%3D%2294%22%20viewBox%3D%220%200%2094%2094%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%20%20%3Cpath%20d%3D%22M92%2047C92%2022.1472%2071.8528%202%2047%202C22.1472%202%202%2022.1472%202%2047C2%2071.8528%2022.1472%2092%2047%2092%22%20stroke%3D%22%232172E5%22%20stroke-width%3D%223%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E' + +var tokenLogo = + 'data:image/png;base64,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' + +// returns the checksummed address if the address is valid, otherwise returns false +function isAddress(value) { + try { + return getAddress(value) + } catch (_a) { + return false + } +} +// shorten the checksummed version of the input address to have 0x + 4 characters at start and end +function shortenAddress(address, chars) { + if (chars === void 0) { + chars = 4 + } + var parsed = isAddress(address) + if (!parsed) { + throw Error("Invalid 'address' parameter '" + address + "'.") + } + return parsed.substring(0, chars + 2) + '...' + parsed.substring(42 - chars) +} +// account is not optional +function getSigner(library, account) { + return library.getSigner(account).connectUnchecked() +} +// account is optional +function getProviderOrSigner(library, account) { + return account ? getSigner(library, account) : library +} +// account is optional +function getContract(address, ABI, library, account) { + if (!isAddress(address) || address === AddressZero) { + throw Error("Invalid 'address' parameter '" + address + "'.") + } + return new Contract(address, ABI, getProviderOrSigner(library, account)) +} +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') // $& means the whole matched string +} +function isTokenOnList(chainTokenMap, token) { + var _a + return Boolean( + (token === null || token === void 0 ? void 0 : token.isToken) && + ((_a = chainTokenMap[token.chainId]) === null || _a === void 0 ? void 0 : _a[token.address]) + ) +} + +/** + * Debounces updates to a value. + * Non-primitives *must* wrap the value in useMemo, or the value will be updated due to referential inequality. + */ +// modified from https://usehooks.com/useDebounce/ +function useDebounce(value, delay) { + var _a = __read(useState(value), 2), + debouncedValue = _a[0], + setDebouncedValue = _a[1] + useEffect( + function () { + // Update debounced value after delay + var handler = setTimeout(function () { + setDebouncedValue(value) + }, delay) + // Cancel the timeout if value changes (also on delay change or unmount) + // This is how we prevent debounced value from updating if value is changed ... + // .. within the delay period. Timeout gets cleared and restarted. + return function () { + clearTimeout(handler) + } + }, + [value, delay] + ) + return debouncedValue +} + +var VISIBILITY_STATE_SUPPORTED = 'visibilityState' in document +function isWindowVisible() { + return !VISIBILITY_STATE_SUPPORTED || document.visibilityState !== 'hidden' +} +/** + * Returns whether the window is currently visible to the user. + */ +function useIsWindowVisible() { + var _a = __read(useState(isWindowVisible()), 2), + focused = _a[0], + setFocused = _a[1] + var listener = useCallback( + function () { + setFocused(isWindowVisible()) + }, + [setFocused] + ) + useEffect( + function () { + if (!VISIBILITY_STATE_SUPPORTED) return undefined + document.addEventListener('visibilitychange', listener) + return function () { + document.removeEventListener('visibilitychange', listener) + } + }, + [listener] + ) + return focused +} + +function useBlock() { + var _a = useActiveWeb3React(), + chainId = _a.chainId, + library = _a.library + var windowVisible = useIsWindowVisible() + var _b = __read(useState({ chainId }), 2), + state = _b[0], + setState = _b[1] + var onBlock = useCallback( + function (block) { + setState(function (state) { + if (state.chainId === chainId) { + if (typeof state.block !== 'number') return { chainId, block } + return { chainId, block: Math.max(block, state.block) } + } + return state + }) + }, + [chainId] + ) + useEffect( + function () { + if (library && chainId && windowVisible) { + setState({ chainId }) + library + .getBlockNumber() + .then(onBlock) + .catch(function (error) { + console.error('Failed to get block number for chainId ' + chainId, error) + }) + library.on('block', onBlock) + return function () { + library.removeListener('block', onBlock) + } + } + return undefined + }, + [chainId, library, onBlock, windowVisible] + ) + var debouncedBlock = useDebounce(state.block, 100) + return state.block ? debouncedBlock : undefined +} +var blockAtom = atom(undefined) +function BlockUpdater() { + var setBlock = useUpdateAtom(blockAtom) + var block = useBlock() + useEffect( + function () { + setBlock(block) + }, + [block, setBlock] + ) + return null +} +/** Requires that BlockUpdater be installed in the DOM tree. */ +function useBlockNumber() { + var chainId = useActiveWeb3React().chainId + var block = useAtomValue(blockAtom) + return chainId ? block : undefined +} +function useFastForwardBlockNumber() { + return useUpdateAtom(blockAtom) } var abi$6 = [ - { - inputs: [ - { - internalType: "address", - name: "_rewardsDistribution", - type: "address" - }, - { - internalType: "address", - name: "_rewardsToken", - type: "address" - }, - { - internalType: "address", - name: "_stakingToken", - type: "address" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "constructor" - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "reward", - type: "uint256" - } - ], - name: "RewardAdded", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "user", - type: "address" - }, - { - indexed: false, - internalType: "uint256", - name: "reward", - type: "uint256" - } - ], - name: "RewardPaid", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "user", - type: "address" - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256" - } - ], - name: "Staked", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "user", - type: "address" - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256" - } - ], - name: "Withdrawn", - type: "event" - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "account", - type: "address" - } - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "account", - type: "address" - } - ], - name: "earned", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - ], - name: "exit", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - ], - name: "getReward", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "getRewardForDuration", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "lastTimeRewardApplicable", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "lastUpdateTime", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "reward", - type: "uint256" - } - ], - name: "notifyRewardAmount", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "periodFinish", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "rewardPerToken", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "rewardPerTokenStored", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "rewardRate", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - name: "rewards", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "rewardsDistribution", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "rewardsDuration", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "rewardsToken", - outputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256" - } - ], - name: "stake", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - }, - { - internalType: "uint8", - name: "v", - type: "uint8" - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32" - } - ], - name: "stakeWithPermit", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "stakingToken", - outputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - name: "userRewardPerTokenPaid", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256" - } - ], - name: "withdraw", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - } -]; + { + inputs: [ + { + internalType: 'address', + name: '_rewardsDistribution', + type: 'address', + }, + { + internalType: 'address', + name: '_rewardsToken', + type: 'address', + }, + { + internalType: 'address', + name: '_stakingToken', + type: 'address', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'uint256', + name: 'reward', + type: 'uint256', + }, + ], + name: 'RewardAdded', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'user', + type: 'address', + }, + { + indexed: false, + internalType: 'uint256', + name: 'reward', + type: 'uint256', + }, + ], + name: 'RewardPaid', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'user', + type: 'address', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount', + type: 'uint256', + }, + ], + name: 'Staked', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'user', + type: 'address', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount', + type: 'uint256', + }, + ], + name: 'Withdrawn', + type: 'event', + }, + { + constant: true, + inputs: [ + { + internalType: 'address', + name: 'account', + type: 'address', + }, + ], + name: 'balanceOf', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'address', + name: 'account', + type: 'address', + }, + ], + name: 'earned', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [], + name: 'exit', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [], + name: 'getReward', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'getRewardForDuration', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'lastTimeRewardApplicable', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'lastUpdateTime', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'uint256', + name: 'reward', + type: 'uint256', + }, + ], + name: 'notifyRewardAmount', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'periodFinish', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'rewardPerToken', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'rewardPerTokenStored', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'rewardRate', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + name: 'rewards', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'rewardsDistribution', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'rewardsDuration', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'rewardsToken', + outputs: [ + { + internalType: 'contract IERC20', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'uint256', + name: 'amount', + type: 'uint256', + }, + ], + name: 'stake', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'uint256', + name: 'amount', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + { + internalType: 'uint8', + name: 'v', + type: 'uint8', + }, + { + internalType: 'bytes32', + name: 'r', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 's', + type: 'bytes32', + }, + ], + name: 'stakeWithPermit', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'stakingToken', + outputs: [ + { + internalType: 'contract IERC20', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'totalSupply', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + name: 'userRewardPerTokenPaid', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'uint256', + name: 'amount', + type: 'uint256', + }, + ], + name: 'withdraw', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, +] var abi$5 = [ - { - inputs: [ - { - internalType: "address", - name: "token_", - type: "address" - }, - { - internalType: "bytes32", - name: "merkleRoot_", - type: "bytes32" - } - ], - stateMutability: "nonpayable", - type: "constructor" - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "index", - type: "uint256" - }, - { - indexed: false, - internalType: "address", - name: "account", - type: "address" - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256" - } - ], - name: "Claimed", - type: "event" - }, - { - inputs: [ - { - internalType: "uint256", - name: "index", - type: "uint256" - }, - { - internalType: "address", - name: "account", - type: "address" - }, - { - internalType: "uint256", - name: "amount", - type: "uint256" - }, - { - internalType: "bytes32[]", - name: "merkleProof", - type: "bytes32[]" - } - ], - name: "claim", - outputs: [ - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "index", - type: "uint256" - } - ], - name: "isClaimed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - ], - name: "merkleRoot", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - ], - name: "token", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - stateMutability: "view", - type: "function" - } -]; + { + inputs: [ + { + internalType: 'address', + name: 'token_', + type: 'address', + }, + { + internalType: 'bytes32', + name: 'merkleRoot_', + type: 'bytes32', + }, + ], + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'uint256', + name: 'index', + type: 'uint256', + }, + { + indexed: false, + internalType: 'address', + name: 'account', + type: 'address', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount', + type: 'uint256', + }, + ], + name: 'Claimed', + type: 'event', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'index', + type: 'uint256', + }, + { + internalType: 'address', + name: 'account', + type: 'address', + }, + { + internalType: 'uint256', + name: 'amount', + type: 'uint256', + }, + { + internalType: 'bytes32[]', + name: 'merkleProof', + type: 'bytes32[]', + }, + ], + name: 'claim', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'index', + type: 'uint256', + }, + ], + name: 'isClaimed', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'merkleRoot', + outputs: [ + { + internalType: 'bytes32', + name: '', + type: 'bytes32', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'token', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, +] var abi$4 = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address" - }, - { - indexed: true, - internalType: "address", - name: "spender", - type: "address" - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256" - } - ], - name: "Approval", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "sender", - type: "address" - }, - { - indexed: false, - internalType: "uint256", - name: "amount0", - type: "uint256" - }, - { - indexed: false, - internalType: "uint256", - name: "amount1", - type: "uint256" - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address" - } - ], - name: "Burn", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "sender", - type: "address" - }, - { - indexed: false, - internalType: "uint256", - name: "amount0", - type: "uint256" - }, - { - indexed: false, - internalType: "uint256", - name: "amount1", - type: "uint256" - } - ], - name: "Mint", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "sender", - type: "address" - }, - { - indexed: false, - internalType: "uint256", - name: "amount0In", - type: "uint256" - }, - { - indexed: false, - internalType: "uint256", - name: "amount1In", - type: "uint256" - }, - { - indexed: false, - internalType: "uint256", - name: "amount0Out", - type: "uint256" - }, - { - indexed: false, - internalType: "uint256", - name: "amount1Out", - type: "uint256" - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address" - } - ], - name: "Swap", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint112", - name: "reserve0", - type: "uint112" - }, - { - indexed: false, - internalType: "uint112", - name: "reserve1", - type: "uint112" - } - ], - name: "Sync", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address" - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address" - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256" - } - ], - name: "Transfer", - type: "event" - }, - { - constant: true, - inputs: [ - ], - name: "DOMAIN_SEPARATOR", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "MINIMUM_LIQUIDITY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "pure", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "PERMIT_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32" - } - ], - payable: false, - stateMutability: "pure", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "owner", - type: "address" - }, - { - internalType: "address", - name: "spender", - type: "address" - } - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "spender", - type: "address" - }, - { - internalType: "uint256", - name: "value", - type: "uint256" - } - ], - name: "approve", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "owner", - type: "address" - } - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "to", - type: "address" - } - ], - name: "burn", - outputs: [ - { - internalType: "uint256", - name: "amount0", - type: "uint256" - }, - { - internalType: "uint256", - name: "amount1", - type: "uint256" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8" - } - ], - payable: false, - stateMutability: "pure", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "factory", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "getReserves", - outputs: [ - { - internalType: "uint112", - name: "reserve0", - type: "uint112" - }, - { - internalType: "uint112", - name: "reserve1", - type: "uint112" - }, - { - internalType: "uint32", - name: "blockTimestampLast", - type: "uint32" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "", - type: "address" - }, - { - internalType: "address", - name: "", - type: "address" - } - ], - name: "initialize", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "kLast", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "to", - type: "address" - } - ], - name: "mint", - outputs: [ - { - internalType: "uint256", - name: "liquidity", - type: "uint256" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string" - } - ], - payable: false, - stateMutability: "pure", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "owner", - type: "address" - } - ], - name: "nonces", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "owner", - type: "address" - }, - { - internalType: "address", - name: "spender", - type: "address" - }, - { - internalType: "uint256", - name: "value", - type: "uint256" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - }, - { - internalType: "uint8", - name: "v", - type: "uint8" - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32" - } - ], - name: "permit", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "price0CumulativeLast", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "price1CumulativeLast", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "to", - type: "address" - } - ], - name: "skim", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "amount0Out", - type: "uint256" - }, - { - internalType: "uint256", - name: "amount1Out", - type: "uint256" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "bytes", - name: "data", - type: "bytes" - } - ], - name: "swap", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string" - } - ], - payable: false, - stateMutability: "pure", - type: "function" - }, - { - constant: false, - inputs: [ - ], - name: "sync", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "token0", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "token1", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "value", - type: "uint256" - } - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "from", - type: "address" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "value", - type: "uint256" - } - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - } -]; - -var abi$3 = [ - { - inputs: [ - ], - name: "WETH", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - stateMutability: "pure", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "tokenA", - type: "address" - }, - { - internalType: "address", - name: "tokenB", - type: "address" - }, - { - internalType: "uint256", - name: "amountADesired", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountBDesired", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountAMin", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountBMin", - type: "uint256" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "addLiquidity", - outputs: [ - { - internalType: "uint256", - name: "amountA", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountB", - type: "uint256" - }, - { - internalType: "uint256", - name: "liquidity", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address" - }, - { - internalType: "uint256", - name: "amountTokenDesired", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountTokenMin", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountETHMin", - type: "uint256" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "addLiquidityETH", - outputs: [ - { - internalType: "uint256", - name: "amountToken", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountETH", - type: "uint256" - }, - { - internalType: "uint256", - name: "liquidity", - type: "uint256" - } - ], - stateMutability: "payable", - type: "function" - }, - { - inputs: [ - ], - name: "factory", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - stateMutability: "pure", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256" - }, - { - internalType: "uint256", - name: "reserveIn", - type: "uint256" - }, - { - internalType: "uint256", - name: "reserveOut", - type: "uint256" - } - ], - name: "getAmountIn", - outputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - } - ], - stateMutability: "pure", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - }, - { - internalType: "uint256", - name: "reserveIn", - type: "uint256" - }, - { - internalType: "uint256", - name: "reserveOut", - type: "uint256" - } - ], - name: "getAmountOut", - outputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256" - } - ], - stateMutability: "pure", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - } - ], - name: "getAmountsIn", - outputs: [ - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - } - ], - name: "getAmountsOut", - outputs: [ - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountA", - type: "uint256" - }, - { - internalType: "uint256", - name: "reserveA", - type: "uint256" - }, - { - internalType: "uint256", - name: "reserveB", - type: "uint256" - } - ], - name: "quote", - outputs: [ - { - internalType: "uint256", - name: "amountB", - type: "uint256" - } - ], - stateMutability: "pure", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "tokenA", - type: "address" - }, - { - internalType: "address", - name: "tokenB", - type: "address" - }, - { - internalType: "uint256", - name: "liquidity", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountAMin", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountBMin", - type: "uint256" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "removeLiquidity", - outputs: [ - { - internalType: "uint256", - name: "amountA", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountB", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address" - }, - { - internalType: "uint256", - name: "liquidity", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountTokenMin", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountETHMin", - type: "uint256" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "removeLiquidityETH", - outputs: [ - { - internalType: "uint256", - name: "amountToken", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountETH", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address" - }, - { - internalType: "uint256", - name: "liquidity", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountTokenMin", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountETHMin", - type: "uint256" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "removeLiquidityETHSupportingFeeOnTransferTokens", - outputs: [ - { - internalType: "uint256", - name: "amountETH", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address" - }, - { - internalType: "uint256", - name: "liquidity", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountTokenMin", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountETHMin", - type: "uint256" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - }, - { - internalType: "bool", - name: "approveMax", - type: "bool" - }, - { - internalType: "uint8", - name: "v", - type: "uint8" - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32" - } - ], - name: "removeLiquidityETHWithPermit", - outputs: [ - { - internalType: "uint256", - name: "amountToken", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountETH", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address" - }, - { - internalType: "uint256", - name: "liquidity", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountTokenMin", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountETHMin", - type: "uint256" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - }, - { - internalType: "bool", - name: "approveMax", - type: "bool" - }, - { - internalType: "uint8", - name: "v", - type: "uint8" - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32" - } - ], - name: "removeLiquidityETHWithPermitSupportingFeeOnTransferTokens", - outputs: [ - { - internalType: "uint256", - name: "amountETH", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "tokenA", - type: "address" - }, - { - internalType: "address", - name: "tokenB", - type: "address" - }, - { - internalType: "uint256", - name: "liquidity", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountAMin", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountBMin", - type: "uint256" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - }, - { - internalType: "bool", - name: "approveMax", - type: "bool" - }, - { - internalType: "uint8", - name: "v", - type: "uint8" - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32" - } - ], - name: "removeLiquidityWithPermit", - outputs: [ - { - internalType: "uint256", - name: "amountA", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountB", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "swapETHForExactTokens", - outputs: [ - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]" - } - ], - stateMutability: "payable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOutMin", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "swapExactETHForTokens", - outputs: [ - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]" - } - ], - stateMutability: "payable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOutMin", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "swapExactETHForTokensSupportingFeeOnTransferTokens", - outputs: [ - ], - stateMutability: "payable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountOutMin", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "swapExactTokensForETH", - outputs: [ - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountOutMin", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "swapExactTokensForETHSupportingFeeOnTransferTokens", - outputs: [ - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountOutMin", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "swapExactTokensForTokens", - outputs: [ - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountOutMin", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "swapExactTokensForTokensSupportingFeeOnTransferTokens", - outputs: [ - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountInMax", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "swapTokensForExactETH", - outputs: [ - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256" - }, - { - internalType: "uint256", - name: "amountInMax", - type: "uint256" - }, - { - internalType: "address[]", - name: "path", - type: "address[]" - }, - { - internalType: "address", - name: "to", - type: "address" - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256" - } - ], - name: "swapTokensForExactTokens", - outputs: [ - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]" - } - ], - stateMutability: "nonpayable", - type: "function" - } -]; - -var abi$2 = [ - { - inputs: [ - { - internalType: "address", - name: "_factory", - type: "address" - }, - { - internalType: "address", - name: "_WETH9", - type: "address" - } - ], - stateMutability: "nonpayable", - type: "constructor" - }, - { - inputs: [ - ], - name: "WETH9", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - ], - name: "factory", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "bytes", - name: "path", - type: "bytes" - }, - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - } - ], - name: "quoteExactInput", - outputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "tokenIn", - type: "address" - }, - { - internalType: "address", - name: "tokenOut", - type: "address" - }, - { - internalType: "uint24", - name: "fee", - type: "uint24" - }, - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - }, - { - internalType: "uint160", - name: "sqrtPriceLimitX96", - type: "uint160" - } - ], - name: "quoteExactInputSingle", - outputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "bytes", - name: "path", - type: "bytes" - }, - { - internalType: "uint256", - name: "amountOut", - type: "uint256" - } - ], - name: "quoteExactOutput", - outputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "tokenIn", - type: "address" - }, - { - internalType: "address", - name: "tokenOut", - type: "address" - }, - { - internalType: "uint24", - name: "fee", - type: "uint24" - }, - { - internalType: "uint256", - name: "amountOut", - type: "uint256" - }, - { - internalType: "uint160", - name: "sqrtPriceLimitX96", - type: "uint160" - } - ], - name: "quoteExactOutputSingle", - outputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "int256", - name: "amount0Delta", - type: "int256" - }, - { - internalType: "int256", - name: "amount1Delta", - type: "int256" - }, - { - internalType: "bytes", - name: "path", - type: "bytes" - } - ], - name: "uniswapV3SwapCallback", - outputs: [ - ], - stateMutability: "view", - type: "function" - } -]; - -var abi$1 = [ - { - inputs: [ - ], - name: "getCurrentBlockTimestamp", - outputs: [ - { - internalType: "uint256", - name: "timestamp", - type: "uint256" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "addr", - type: "address" - } - ], - name: "getEthBalance", - outputs: [ - { - internalType: "uint256", - name: "balance", - type: "uint256" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "target", - type: "address" - }, - { - internalType: "uint256", - name: "gasLimit", - type: "uint256" - }, - { - internalType: "bytes", - name: "callData", - type: "bytes" - } - ], - internalType: "struct UniswapInterfaceMulticall.Call[]", - name: "calls", - type: "tuple[]" - } - ], - name: "multicall", - outputs: [ - { - internalType: "uint256", - name: "blockNumber", - type: "uint256" - }, - { - components: [ - { - internalType: "bool", - name: "success", - type: "bool" - }, - { - internalType: "uint256", - name: "gasUsed", - type: "uint256" - }, - { - internalType: "bytes", - name: "returnData", - type: "bytes" - } - ], - internalType: "struct UniswapInterfaceMulticall.Result[]", - name: "returnData", - type: "tuple[]" - } - ], - stateMutability: "nonpayable", - type: "function" - } -]; - -var ARGENT_WALLET_DETECTOR_ABI = [ - { - inputs: [ - { - internalType: "bytes32[]", - name: "_codes", - type: "bytes32[]" - }, - { - internalType: "address[]", - name: "_implementations", - type: "address[]" - } - ], - stateMutability: "nonpayable", - type: "constructor" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "code", - type: "bytes32" - } - ], - name: "CodeAdded", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "implementation", - type: "address" - } - ], - name: "ImplementationAdded", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_newOwner", - type: "address" - } - ], - name: "OwnerChanged", - type: "event" - }, - { - inputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32" - } - ], - name: "acceptedCodes", - outputs: [ - { - internalType: "bool", - name: "exists", - type: "bool" - }, - { - internalType: "uint128", - name: "index", - type: "uint128" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - name: "acceptedImplementations", - outputs: [ - { - internalType: "bool", - name: "exists", - type: "bool" - }, - { - internalType: "uint128", - name: "index", - type: "uint128" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "bytes32", - name: "_code", - type: "bytes32" - } - ], - name: "addCode", - outputs: [ - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "_argentWallet", - type: "address" - } - ], - name: "addCodeAndImplementationFromWallet", - outputs: [ - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "_impl", - type: "address" - } - ], - name: "addImplementation", - outputs: [ - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "_newOwner", - type: "address" - } - ], - name: "changeOwner", - outputs: [ - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - ], - name: "getCodes", - outputs: [ - { - internalType: "bytes32[]", - name: "", - type: "bytes32[]" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - ], - name: "getImplementations", - outputs: [ - { - internalType: "address[]", - name: "", - type: "address[]" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "_wallet", - type: "address" - } - ], - name: "isArgentWallet", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - ], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - stateMutability: "view", - type: "function" - } -]; - -var EIP_2612 = [ - { - constant: true, - inputs: [ - { - name: "owner", - type: "address" - } - ], - name: "nonces", - outputs: [ - { - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "DOMAIN_SEPARATOR", - outputs: [ - { - name: "", - type: "bytes32" - } - ], - payable: false, - stateMutability: "view", - type: "function" - } -]; - -var ENS_PUBLIC_RESOLVER_ABI = [ - { - inputs: [ - { - internalType: "contract ENS", - name: "_ens", - type: "address" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "constructor" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: true, - internalType: "uint256", - name: "contentType", - type: "uint256" - } - ], - name: "ABIChanged", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: false, - internalType: "address", - name: "a", - type: "address" - } - ], - name: "AddrChanged", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: false, - internalType: "uint256", - name: "coinType", - type: "uint256" - }, - { - indexed: false, - internalType: "bytes", - name: "newAddress", - type: "bytes" - } - ], - name: "AddressChanged", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: true, - internalType: "address", - name: "owner", - type: "address" - }, - { - indexed: true, - internalType: "address", - name: "target", - type: "address" - }, - { - indexed: false, - internalType: "bool", - name: "isAuthorised", - type: "bool" - } - ], - name: "AuthorisationChanged", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: false, - internalType: "bytes", - name: "hash", - type: "bytes" - } - ], - name: "ContenthashChanged", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: false, - internalType: "bytes", - name: "name", - type: "bytes" - }, - { - indexed: false, - internalType: "uint16", - name: "resource", - type: "uint16" - }, - { - indexed: false, - internalType: "bytes", - name: "record", - type: "bytes" - } - ], - name: "DNSRecordChanged", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: false, - internalType: "bytes", - name: "name", - type: "bytes" - }, - { - indexed: false, - internalType: "uint16", - name: "resource", - type: "uint16" - } - ], - name: "DNSRecordDeleted", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - } - ], - name: "DNSZoneCleared", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: true, - internalType: "bytes4", - name: "interfaceID", - type: "bytes4" - }, - { - indexed: false, - internalType: "address", - name: "implementer", - type: "address" - } - ], - name: "InterfaceChanged", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: false, - internalType: "string", - name: "name", - type: "string" - } - ], - name: "NameChanged", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: false, - internalType: "bytes32", - name: "x", - type: "bytes32" - }, - { - indexed: false, - internalType: "bytes32", - name: "y", - type: "bytes32" - } - ], - name: "PubkeyChanged", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: true, - internalType: "string", - name: "indexedKey", - type: "string" - }, - { - indexed: false, - internalType: "string", - name: "key", - type: "string" - } - ], - name: "TextChanged", - type: "event" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "uint256", - name: "contentTypes", - type: "uint256" - } - ], - name: "ABI", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - }, - { - internalType: "bytes", - name: "", - type: "bytes" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - } - ], - name: "addr", - outputs: [ - { - internalType: "address payable", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32" - }, - { - internalType: "address", - name: "", - type: "address" - }, - { - internalType: "address", - name: "", - type: "address" - } - ], - name: "authorisations", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - } - ], - name: "clearDNSZone", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - } - ], - name: "contenthash", - outputs: [ - { - internalType: "bytes", - name: "", - type: "bytes" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "name", - type: "bytes32" - }, - { - internalType: "uint16", - name: "resource", - type: "uint16" - } - ], - name: "dnsRecord", - outputs: [ - { - internalType: "bytes", - name: "", - type: "bytes" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "name", - type: "bytes32" - } - ], - name: "hasDNSRecords", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "bytes4", - name: "interfaceID", - type: "bytes4" - } - ], - name: "interfaceImplementer", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - } - ], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - } - ], - name: "pubkey", - outputs: [ - { - internalType: "bytes32", - name: "x", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "y", - type: "bytes32" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "uint256", - name: "contentType", - type: "uint256" - }, - { - internalType: "bytes", - name: "data", - type: "bytes" - } - ], - name: "setABI", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "uint256", - name: "coinType", - type: "uint256" - }, - { - internalType: "bytes", - name: "a", - type: "bytes" - } - ], - name: "setAddr", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "address", - name: "a", - type: "address" - } - ], - name: "setAddr", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "address", - name: "target", - type: "address" - }, - { - internalType: "bool", - name: "isAuthorised", - type: "bool" - } - ], - name: "setAuthorisation", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "bytes", - name: "hash", - type: "bytes" - } - ], - name: "setContenthash", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "bytes", - name: "data", - type: "bytes" - } - ], - name: "setDNSRecords", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "bytes4", - name: "interfaceID", - type: "bytes4" - }, - { - internalType: "address", - name: "implementer", - type: "address" - } - ], - name: "setInterface", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "string", - name: "name", - type: "string" - } - ], - name: "setName", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "x", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "y", - type: "bytes32" - } - ], - name: "setPubkey", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "string", - name: "key", - type: "string" - }, - { - internalType: "string", - name: "value", - type: "string" - } - ], - name: "setText", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes4", - name: "interfaceID", - type: "bytes4" - } - ], - name: "supportsInterface", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "pure", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "string", - name: "key", - type: "string" - } - ], - name: "text", - outputs: [ - { - internalType: "string", - name: "", - type: "string" - } - ], - payable: false, - stateMutability: "view", - type: "function" - } -]; - -var ENS_ABI = [ - { - inputs: [ - { - internalType: "contract ENS", - name: "_old", - type: "address" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "constructor" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address" - }, - { - indexed: true, - internalType: "address", - name: "operator", - type: "address" - }, - { - indexed: false, - internalType: "bool", - name: "approved", - type: "bool" - } - ], - name: "ApprovalForAll", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: true, - internalType: "bytes32", - name: "label", - type: "bytes32" - }, - { - indexed: false, - internalType: "address", - name: "owner", - type: "address" - } - ], - name: "NewOwner", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: false, - internalType: "address", - name: "resolver", - type: "address" - } - ], - name: "NewResolver", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: false, - internalType: "uint64", - name: "ttl", - type: "uint64" - } - ], - name: "NewTTL", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - indexed: false, - internalType: "address", - name: "owner", - type: "address" - } - ], - name: "Transfer", - type: "event" - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "owner", - type: "address" - }, - { - internalType: "address", - name: "operator", - type: "address" - } - ], - name: "isApprovedForAll", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "old", - outputs: [ - { - internalType: "contract ENS", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - } - ], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - } - ], - name: "recordExists", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - } - ], - name: "resolver", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "operator", - type: "address" - }, - { - internalType: "bool", - name: "approved", - type: "bool" - } - ], - name: "setApprovalForAll", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "address", - name: "owner", - type: "address" - } - ], - name: "setOwner", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "address", - name: "owner", - type: "address" - }, - { - internalType: "address", - name: "resolver", - type: "address" - }, - { - internalType: "uint64", - name: "ttl", - type: "uint64" - } - ], - name: "setRecord", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "address", - name: "resolver", - type: "address" - } - ], - name: "setResolver", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "label", - type: "bytes32" - }, - { - internalType: "address", - name: "owner", - type: "address" - } - ], - name: "setSubnodeOwner", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "bytes32", - name: "label", - type: "bytes32" - }, - { - internalType: "address", - name: "owner", - type: "address" - }, - { - internalType: "address", - name: "resolver", - type: "address" - }, - { - internalType: "uint64", - name: "ttl", - type: "uint64" - } - ], - name: "setSubnodeRecord", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - }, - { - internalType: "uint64", - name: "ttl", - type: "uint64" - } - ], - name: "setTTL", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "node", - type: "bytes32" - } - ], - name: "ttl", - outputs: [ - { - internalType: "uint64", - name: "", - type: "uint64" - } - ], - payable: false, - stateMutability: "view", - type: "function" - } -]; - -var ERC20ABI = [ - { - constant: true, - inputs: [ - ], - name: "name", - outputs: [ - { - name: "", - type: "string" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - name: "_spender", - type: "address" - }, - { - name: "_value", - type: "uint256" - } - ], - name: "approve", - outputs: [ - { - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "totalSupply", - outputs: [ - { - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - name: "_from", - type: "address" - }, - { - name: "_to", - type: "address" - }, - { - name: "_value", - type: "uint256" - } - ], - name: "transferFrom", - outputs: [ - { - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "decimals", - outputs: [ - { - name: "", - type: "uint8" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - name: "_owner", - type: "address" - } - ], - name: "balanceOf", - outputs: [ - { - name: "balance", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "symbol", - outputs: [ - { - name: "", - type: "string" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - name: "_to", - type: "address" - }, - { - name: "_value", - type: "uint256" - } - ], - name: "transfer", - outputs: [ - { - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - { - name: "_owner", - type: "address" - }, - { - name: "_spender", - type: "address" - } - ], - name: "allowance", - outputs: [ - { - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - payable: true, - stateMutability: "payable", - type: "fallback" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: "owner", - type: "address" - }, - { - indexed: true, - name: "spender", - type: "address" - }, - { - indexed: false, - name: "value", - type: "uint256" - } - ], - name: "Approval", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: "from", - type: "address" - }, - { - indexed: true, - name: "to", - type: "address" - }, - { - indexed: false, - name: "value", - type: "uint256" - } - ], - name: "Transfer", - type: "event" - } -]; - -var ERC20_BYTES32_ABI = [ - { - constant: true, - inputs: [ - ], - name: "name", - outputs: [ - { - name: "", - type: "bytes32" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "symbol", - outputs: [ - { - name: "", - type: "bytes32" - } - ], - payable: false, - stateMutability: "view", - type: "function" - } -]; - -var ERC721_ABI = [ - { - inputs: [ - { - internalType: "uint256", - name: "tokenId", - type: "uint256" - } - ], - name: "ownerOf", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "tokenId", - type: "uint256" - } - ], - name: "tokenURI", - outputs: [ - { - internalType: "string", - name: "", - type: "string" - } - ], - stateMutability: "view", - type: "function" - } -]; - -var ERC1155_ABI = [ - { - constant: true, - inputs: [ - { - internalType: "address", - name: "_owner", - type: "address" - }, - { - internalType: "uint256", - name: "_id", - type: "uint256" - } - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - internalType: "uint256", - name: "_id", - type: "uint256" - } - ], - name: "uri", - outputs: [ - { - internalType: "string", - name: "", - type: "string" - } - ], - payable: false, - stateMutability: "view", - type: "function" - } -]; - -var WETH_ABI = [ - { - constant: true, - inputs: [ - ], - name: "name", - outputs: [ - { - name: "", - type: "string" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - name: "guy", - type: "address" - }, - { - name: "wad", - type: "uint256" - } - ], - name: "approve", - outputs: [ - { - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "totalSupply", - outputs: [ - { - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - name: "src", - type: "address" - }, - { - name: "dst", - type: "address" - }, - { - name: "wad", - type: "uint256" - } - ], - name: "transferFrom", - outputs: [ - { - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - { - name: "wad", - type: "uint256" - } - ], - name: "withdraw", - outputs: [ - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "decimals", - outputs: [ - { - name: "", - type: "uint8" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - { - name: "", - type: "address" - } - ], - name: "balanceOf", - outputs: [ - { - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: true, - inputs: [ - ], - name: "symbol", - outputs: [ - { - name: "", - type: "string" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - constant: false, - inputs: [ - { - name: "dst", - type: "address" - }, - { - name: "wad", - type: "uint256" - } - ], - name: "transfer", - outputs: [ - { - name: "", - type: "bool" - } - ], - payable: false, - stateMutability: "nonpayable", - type: "function" - }, - { - constant: false, - inputs: [ - ], - name: "deposit", - outputs: [ - ], - payable: true, - stateMutability: "payable", - type: "function" - }, - { - constant: true, - inputs: [ - { - name: "", - type: "address" - }, - { - name: "", - type: "address" - } - ], - name: "allowance", - outputs: [ - { - name: "", - type: "uint256" - } - ], - payable: false, - stateMutability: "view", - type: "function" - }, - { - payable: true, - stateMutability: "payable", - type: "fallback" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: "src", - type: "address" - }, - { - indexed: true, - name: "guy", - type: "address" - }, - { - indexed: false, - name: "wad", - type: "uint256" - } - ], - name: "Approval", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: "src", - type: "address" - }, - { - indexed: true, - name: "dst", - type: "address" - }, - { - indexed: false, - name: "wad", - type: "uint256" - } - ], - name: "Transfer", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: "dst", - type: "address" - }, - { - indexed: false, - name: "wad", - type: "uint256" - } - ], - name: "Deposit", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: "src", - type: "address" - }, - { - indexed: false, - name: "wad", - type: "uint256" - } - ], - name: "Withdrawal", - type: "event" - } -]; - -var _a$h; -/** - * List of all the networks supported by the Uniswap Interface - */ -var SupportedChainId; -(function (SupportedChainId) { - SupportedChainId[SupportedChainId["MAINNET"] = 1] = "MAINNET"; - SupportedChainId[SupportedChainId["ROPSTEN"] = 3] = "ROPSTEN"; - SupportedChainId[SupportedChainId["RINKEBY"] = 4] = "RINKEBY"; - SupportedChainId[SupportedChainId["GOERLI"] = 5] = "GOERLI"; - SupportedChainId[SupportedChainId["KOVAN"] = 42] = "KOVAN"; - SupportedChainId[SupportedChainId["ARBITRUM_ONE"] = 42161] = "ARBITRUM_ONE"; - SupportedChainId[SupportedChainId["ARBITRUM_RINKEBY"] = 421611] = "ARBITRUM_RINKEBY"; - SupportedChainId[SupportedChainId["OPTIMISM"] = 10] = "OPTIMISM"; - SupportedChainId[SupportedChainId["OPTIMISTIC_KOVAN"] = 69] = "OPTIMISTIC_KOVAN"; - SupportedChainId[SupportedChainId["POLYGON"] = 137] = "POLYGON"; - SupportedChainId[SupportedChainId["POLYGON_MUMBAI"] = 80001] = "POLYGON_MUMBAI"; -})(SupportedChainId || (SupportedChainId = {})); -var CHAIN_IDS_TO_NAMES = (_a$h = {}, - _a$h[SupportedChainId.MAINNET] = 'mainnet', - _a$h[SupportedChainId.ROPSTEN] = 'ropsten', - _a$h[SupportedChainId.RINKEBY] = 'rinkeby', - _a$h[SupportedChainId.GOERLI] = 'goerli', - _a$h[SupportedChainId.KOVAN] = 'kovan', - _a$h[SupportedChainId.POLYGON] = 'polygon', - _a$h[SupportedChainId.POLYGON_MUMBAI] = 'polygon_mumbai', - _a$h[SupportedChainId.ARBITRUM_ONE] = 'arbitrum', - _a$h[SupportedChainId.ARBITRUM_RINKEBY] = 'arbitrum_rinkeby', - _a$h[SupportedChainId.OPTIMISM] = 'optimism', - _a$h[SupportedChainId.OPTIMISTIC_KOVAN] = 'optimistic_kovan', - _a$h); -/** - * Array of all the supported chain IDs - */ -var ALL_SUPPORTED_CHAIN_IDS = Object.values(SupportedChainId).filter(function (id) { return typeof id === 'number'; }); -var SUPPORTED_GAS_ESTIMATE_CHAIN_IDS = [SupportedChainId.MAINNET, SupportedChainId.POLYGON]; -/** - * All the chain IDs that are running the Ethereum protocol. - */ -[ - SupportedChainId.MAINNET, - SupportedChainId.ROPSTEN, - SupportedChainId.RINKEBY, - SupportedChainId.GOERLI, - SupportedChainId.KOVAN, - SupportedChainId.POLYGON, - SupportedChainId.POLYGON_MUMBAI, -]; -/** - * Controls some L2 specific behavior, e.g. slippage tolerance, special UI behavior. - * The expectation is that all of these networks have immediate transaction confirmation. - */ -var L2_CHAIN_IDS = [ - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, -]; - -var DEFAULT_NETWORKS = [ - SupportedChainId.MAINNET, - SupportedChainId.ROPSTEN, - SupportedChainId.RINKEBY, - SupportedChainId.GOERLI, - SupportedChainId.KOVAN, -]; -function constructSameAddressMap(address, additionalNetworks) { - if (additionalNetworks === void 0) { additionalNetworks = []; } - return DEFAULT_NETWORKS.concat(additionalNetworks).reduce(function (memo, chainId) { - memo[chainId] = address; - return memo; - }, {}); -} - -var _a$g, _b$6, _c$4, _d$3, _e$2, _f$1, _g$1, _h$1; -var UNI_ADDRESS = constructSameAddressMap('0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984'); -var MULTICALL_ADDRESS = __assign(__assign({}, constructSameAddressMap('0x1F98415757620B543A52E61c46B32eB19261F984', [ - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.OPTIMISM, - SupportedChainId.POLYGON_MUMBAI, - SupportedChainId.POLYGON, -])), (_a$g = {}, _a$g[SupportedChainId.ARBITRUM_ONE] = '0xadF885960B47eA2CD9B55E6DAc6B42b7Cb2806dB', _a$g[SupportedChainId.ARBITRUM_RINKEBY] = '0xa501c031958F579dB7676fF1CE78AD305794d579', _a$g)); -var V2_FACTORY_ADDRESSES = constructSameAddressMap(FACTORY_ADDRESS); -var V2_ROUTER_ADDRESS = constructSameAddressMap('0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D'); -var V3_ROUTER_ADDRESS = constructSameAddressMap('0xE592427A0AEce92De3Edee1F18E0157C05861564', [ - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON, - SupportedChainId.POLYGON_MUMBAI, -]); -var SWAP_ROUTER_ADDRESSES = constructSameAddressMap('0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45', [ - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON, - SupportedChainId.POLYGON_MUMBAI, -]); -/** - * The oldest V0 governance address - */ -constructSameAddressMap('0x5e4be8Bc9637f0EAA1A755019e06A68ce081D58F'); -/** - * The older V1 governance address - */ -(_b$6 = {}, - _b$6[SupportedChainId.MAINNET] = '0xC4e172459f1E7939D522503B81AFAaC1014CE6F6', - _b$6); -/** - * The latest governor bravo that is currently admin of timelock - */ -(_c$4 = {}, - _c$4[SupportedChainId.MAINNET] = '0x408ED6354d4973f66138C91495F2f2FCbd8724C3', - _c$4); -constructSameAddressMap('0x1a9C8182C09F50C8318d769245beA52c32BE35BC'); -var MERKLE_DISTRIBUTOR_ADDRESS = (_d$3 = {}, - _d$3[SupportedChainId.MAINNET] = '0x090D4613473dEE047c3f2706764f49E0821D256e', - _d$3); -var ARGENT_WALLET_DETECTOR_ADDRESS = (_e$2 = {}, - _e$2[SupportedChainId.MAINNET] = '0xeca4B0bDBf7c55E9b7925919d03CbF8Dc82537E8', - _e$2); -var V3_CORE_FACTORY_ADDRESSES = constructSameAddressMap(FACTORY_ADDRESS$1, [ - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON_MUMBAI, - SupportedChainId.POLYGON, -]); -var QUOTER_ADDRESSES = constructSameAddressMap('0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6', [ - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON_MUMBAI, - SupportedChainId.POLYGON, -]); -constructSameAddressMap('0xC36442b4a4522E871399CD717aBDD847Ab11FE88', [ - SupportedChainId.OPTIMISM, - SupportedChainId.OPTIMISTIC_KOVAN, - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON_MUMBAI, - SupportedChainId.POLYGON, -]); -var ENS_REGISTRAR_ADDRESSES = (_f$1 = {}, - _f$1[SupportedChainId.MAINNET] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', - _f$1[SupportedChainId.ROPSTEN] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', - _f$1[SupportedChainId.GOERLI] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', - _f$1[SupportedChainId.RINKEBY] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', - _f$1); -var SOCKS_CONTROLLER_ADDRESSES = (_g$1 = {}, - _g$1[SupportedChainId.MAINNET] = '0x65770b5283117639760beA3F867b69b3697a91dd', - _g$1); -constructSameAddressMap('0xA5644E29708357803b5A882D272c41cC0dF92B34', [ - SupportedChainId.ARBITRUM_ONE, - SupportedChainId.ARBITRUM_RINKEBY, - SupportedChainId.POLYGON_MUMBAI, - SupportedChainId.POLYGON, -]); -(_h$1 = {}, - _h$1[SupportedChainId.ARBITRUM_ONE] = '0xbfd8137f7d1516D3ea5cA83523914859ec47F573', - _h$1[SupportedChainId.ARBITRUM_RINKEBY] = '0xbfd8137f7d1516D3ea5cA83523914859ec47F573', - _h$1); - -var _a$f, _b$5; -var AMPL = new Token(SupportedChainId.MAINNET, '0xD46bA6D942050d489DBd938a2C909A5d5039A161', 9, 'AMPL', 'Ampleforth'); -var DAI = new Token(SupportedChainId.MAINNET, '0x6B175474E89094C44Da98b954EedeAC495271d0F', 18, 'DAI', 'Dai Stablecoin'); -var DAI_ARBITRUM_ONE = new Token(SupportedChainId.ARBITRUM_ONE, '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', 18, 'DAI', 'Dai stable coin'); -var DAI_OPTIMISM = new Token(SupportedChainId.OPTIMISM, '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', 18, 'DAI', 'Dai stable coin'); -var USDC = new Token(SupportedChainId.MAINNET, '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', 6, 'USDC', 'USD//C'); -var USDC_ARBITRUM = new Token(SupportedChainId.ARBITRUM_ONE, '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8', 6, 'USDC', 'USD//C'); -var USDC_POLYGON = new Token(SupportedChainId.POLYGON, '0x2791bca1f2de4661ed88a30c99a7a9449aa84174', 6, 'USDC', 'USD//C'); -var DAI_POLYGON = new Token(SupportedChainId.POLYGON, '0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063', 18, 'DAI', 'Dai Stablecoin'); -var USDT_POLYGON = new Token(SupportedChainId.POLYGON, '0xc2132d05d31c914a87c6611c10748aeb04b58e8f', 6, 'USDT', 'Tether USD'); -var WBTC_POLYGON = new Token(SupportedChainId.POLYGON, '0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6', 8, 'WBTC', 'Wrapped BTC'); -var USDC_OPTIMISM = new Token(SupportedChainId.OPTIMISM, '0x7F5c764cBc14f9669B88837ca1490cCa17c31607', 6, 'USDC', 'USD//C'); -var USDT = new Token(SupportedChainId.MAINNET, '0xdAC17F958D2ee523a2206206994597C13D831ec7', 6, 'USDT', 'Tether USD'); -var USDT_ARBITRUM_ONE = new Token(SupportedChainId.ARBITRUM_ONE, '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9', 6, 'USDT', 'Tether USD'); -var USDT_OPTIMISM = new Token(SupportedChainId.OPTIMISM, '0x94b008aA00579c1307B0EF2c499aD98a8ce58e58', 6, 'USDT', 'Tether USD'); -var WBTC = new Token(SupportedChainId.MAINNET, '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', 8, 'WBTC', 'Wrapped BTC'); -var WBTC_ARBITRUM_ONE = new Token(SupportedChainId.ARBITRUM_ONE, '0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f', 8, 'WBTC', 'Wrapped BTC'); -var WBTC_OPTIMISM = new Token(SupportedChainId.OPTIMISM, '0x68f180fcCe6836688e9084f035309E29Bf0A2095', 8, 'WBTC', 'Wrapped BTC'); -var FEI = new Token(SupportedChainId.MAINNET, '0x956F47F50A910163D8BF957Cf5846D573E7f87CA', 18, 'FEI', 'Fei USD'); -var TRIBE = new Token(SupportedChainId.MAINNET, '0xc7283b66Eb1EB5FB86327f08e1B5816b0720212B', 18, 'TRIBE', 'Tribe'); -var FRAX = new Token(SupportedChainId.MAINNET, '0x853d955aCEf822Db058eb8505911ED77F175b99e', 18, 'FRAX', 'Frax'); -var FXS = new Token(SupportedChainId.MAINNET, '0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0', 18, 'FXS', 'Frax Share'); -var renBTC = new Token(SupportedChainId.MAINNET, '0xEB4C2781e4ebA804CE9a9803C67d0893436bB27D', 8, 'renBTC', 'renBTC'); -var ETH2X_FLI = new Token(SupportedChainId.MAINNET, '0xAa6E8127831c9DE45ae56bB1b0d4D4Da6e5665BD', 18, 'ETH2x-FLI', 'ETH 2x Flexible Leverage Index'); -var sETH2 = new Token(SupportedChainId.MAINNET, '0xFe2e637202056d30016725477c5da089Ab0A043A', 18, 'sETH2', 'StakeWise Staked ETH2'); -var rETH2 = new Token(SupportedChainId.MAINNET, '0x20BC832ca081b91433ff6c17f85701B6e92486c5', 18, 'rETH2', 'StakeWise Reward ETH2'); -var SWISE = new Token(SupportedChainId.MAINNET, '0x48C3399719B582dD63eB5AADf12A40B4C3f52FA2', 18, 'SWISE', 'StakeWise'); -var WETH_POLYGON_MUMBAI = new Token(SupportedChainId.POLYGON_MUMBAI, '0xa6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa', 18, 'WETH', 'Wrapped Ether'); -var WETH_POLYGON = new Token(SupportedChainId.POLYGON, '0x7ceb23fd6bc0add59e62ac25578270cff1b9f619', 18, 'WETH', 'Wrapped Ether'); -var UNI = (_a$f = {}, - _a$f[SupportedChainId.MAINNET] = new Token(SupportedChainId.MAINNET, UNI_ADDRESS[1], 18, 'UNI', 'Uniswap'), - _a$f[SupportedChainId.RINKEBY] = new Token(SupportedChainId.RINKEBY, UNI_ADDRESS[4], 18, 'UNI', 'Uniswap'), - _a$f[SupportedChainId.ROPSTEN] = new Token(SupportedChainId.ROPSTEN, UNI_ADDRESS[3], 18, 'UNI', 'Uniswap'), - _a$f[SupportedChainId.GOERLI] = new Token(SupportedChainId.GOERLI, UNI_ADDRESS[5], 18, 'UNI', 'Uniswap'), - _a$f[SupportedChainId.KOVAN] = new Token(SupportedChainId.KOVAN, UNI_ADDRESS[42], 18, 'UNI', 'Uniswap'), - _a$f); -var WRAPPED_NATIVE_CURRENCY = __assign(__assign({}, WETH9), (_b$5 = {}, _b$5[SupportedChainId.OPTIMISM] = new Token(SupportedChainId.OPTIMISM, '0x4200000000000000000000000000000000000006', 18, 'WETH', 'Wrapped Ether'), _b$5[SupportedChainId.OPTIMISTIC_KOVAN] = new Token(SupportedChainId.OPTIMISTIC_KOVAN, '0x4200000000000000000000000000000000000006', 18, 'WETH', 'Wrapped Ether'), _b$5[SupportedChainId.ARBITRUM_ONE] = new Token(SupportedChainId.ARBITRUM_ONE, '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1', 18, 'WETH', 'Wrapped Ether'), _b$5[SupportedChainId.ARBITRUM_RINKEBY] = new Token(SupportedChainId.ARBITRUM_RINKEBY, '0xB47e6A5f8b33b3F17603C83a0535A9dcD7E32681', 18, 'WETH', 'Wrapped Ether'), _b$5[SupportedChainId.POLYGON] = new Token(SupportedChainId.POLYGON, '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270', 18, 'WMATIC', 'Wrapped MATIC'), _b$5[SupportedChainId.POLYGON_MUMBAI] = new Token(SupportedChainId.POLYGON_MUMBAI, '0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889', 18, 'WMATIC', 'Wrapped MATIC'), _b$5)); -function isMatic(chainId) { - return chainId === SupportedChainId.POLYGON_MUMBAI || chainId === SupportedChainId.POLYGON; -} -var MaticNativeCurrency = /** @class */ (function (_super) { - __extends(MaticNativeCurrency, _super); - function MaticNativeCurrency(chainId) { - var _this = this; - if (!isMatic(chainId)) - throw new Error('Not matic'); - _this = _super.call(this, chainId, 18, 'MATIC', 'Polygon Matic') || this; - return _this; - } - MaticNativeCurrency.prototype.equals = function (other) { - return other.isNative && other.chainId === this.chainId; - }; - Object.defineProperty(MaticNativeCurrency.prototype, "wrapped", { - get: function () { - if (!isMatic(this.chainId)) - throw new Error('Not matic'); - return WRAPPED_NATIVE_CURRENCY[this.chainId]; - }, - enumerable: false, - configurable: true - }); - return MaticNativeCurrency; -}(NativeCurrency)); -var ExtendedEther = /** @class */ (function (_super) { - __extends(ExtendedEther, _super); - function ExtendedEther() { - return _super !== null && _super.apply(this, arguments) || this; - } - Object.defineProperty(ExtendedEther.prototype, "wrapped", { - get: function () { - if (this.chainId in WRAPPED_NATIVE_CURRENCY) - return WRAPPED_NATIVE_CURRENCY[this.chainId]; - throw new Error('Unsupported chain ID'); - }, - enumerable: false, - configurable: true - }); - ExtendedEther.onChain = function (chainId) { - var _a; - return (_a = this._cachedExtendedEther[chainId]) !== null && _a !== void 0 ? _a : (this._cachedExtendedEther[chainId] = new ExtendedEther(chainId)); - }; - ExtendedEther._cachedExtendedEther = {}; - return ExtendedEther; -}(Ether)); -var cachedNativeCurrency = {}; -function nativeOnChain(chainId) { - var _a; - return ((_a = cachedNativeCurrency[chainId]) !== null && _a !== void 0 ? _a : (cachedNativeCurrency[chainId] = isMatic(chainId) - ? new MaticNativeCurrency(chainId) - : ExtendedEther.onChain(chainId))); -} - -// returns null on errors -function useContract(addressOrAddressMap, ABI, withSignerIfPossible) { - if (withSignerIfPossible === void 0) { withSignerIfPossible = true; } - var _a = useActiveWeb3React(), library = _a.library, account = _a.account, chainId = _a.chainId; - return useMemo(function () { - if (!addressOrAddressMap || !ABI || !library || !chainId) - return null; - var address; - if (typeof addressOrAddressMap === 'string') - address = addressOrAddressMap; - else - address = addressOrAddressMap[chainId]; - if (!address) - return null; - try { - return getContract(address, ABI, library, withSignerIfPossible && account ? account : undefined); - } - catch (error) { - console.error('Failed to get contract', error); - return null; - } - }, [addressOrAddressMap, ABI, library, chainId, withSignerIfPossible, account]); -} -function useTokenContract(tokenAddress, withSignerIfPossible) { - return useContract(tokenAddress, ERC20ABI, withSignerIfPossible); -} -function useWETHContract(withSignerIfPossible) { - var _a; - var chainId = useActiveWeb3React().chainId; - return useContract(chainId ? (_a = WRAPPED_NATIVE_CURRENCY[chainId]) === null || _a === void 0 ? void 0 : _a.address : undefined, WETH_ABI, withSignerIfPossible); -} -function useERC721Contract(nftAddress) { - return useContract(nftAddress, ERC721_ABI, false); -} -function useERC1155Contract(nftAddress) { - return useContract(nftAddress, ERC1155_ABI, false); -} -function useArgentWalletDetectorContract() { - return useContract(ARGENT_WALLET_DETECTOR_ADDRESS, ARGENT_WALLET_DETECTOR_ABI, false); -} -function useENSRegistrarContract(withSignerIfPossible) { - return useContract(ENS_REGISTRAR_ADDRESSES, ENS_ABI, withSignerIfPossible); -} -function useENSResolverContract(address, withSignerIfPossible) { - return useContract(address, ENS_PUBLIC_RESOLVER_ABI, withSignerIfPossible); -} -function useBytes32TokenContract(tokenAddress, withSignerIfPossible) { - return useContract(tokenAddress, ERC20_BYTES32_ABI, withSignerIfPossible); -} -function useEIP2612Contract(tokenAddress) { - return useContract(tokenAddress, EIP_2612, false); -} -function useV2RouterContract() { - return useContract(V2_ROUTER_ADDRESS, abi$3, true); -} -function useInterfaceMulticall() { - return useContract(MULTICALL_ADDRESS, abi$1, false); -} -function useMerkleDistributorContract() { - return useContract(MERKLE_DISTRIBUTOR_ADDRESS, abi$5, true); -} -function useV3Quoter() { - return useContract(QUOTER_ADDRESSES, abi$2); -} - -var _a$e; -var multicall = createMulticall(); -var reducer = combineReducers((_a$e = {}, _a$e[multicall.reducerPath] = multicall.reducer, _a$e)); -createStore(reducer); -function MulticallUpdater() { - var latestBlockNumber = useBlockNumber(); - var chainId = useActiveWeb3React().chainId; - var contract = useInterfaceMulticall(); - return jsx(multicall.Updater, { chainId: chainId, latestBlockNumber: latestBlockNumber, contract: contract }, void 0); -} - -function useMultipleContractSingleData() { - var _a; - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var _b = useCallContext(), chainId = _b.chainId, latestBlock = _b.latestBlock; - return (_a = multicall.hooks).useMultipleContractSingleData.apply(_a, __spreadArray([chainId, latestBlock], __read(args), false)); -} -function useSingleCallResult() { - var _a; - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var _b = useCallContext(), chainId = _b.chainId, latestBlock = _b.latestBlock; - return (_a = multicall.hooks).useSingleCallResult.apply(_a, __spreadArray([chainId, latestBlock], __read(args), false)); -} -function useSingleContractMultipleData() { - var _a; - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var _b = useCallContext(), chainId = _b.chainId, latestBlock = _b.latestBlock; - return (_a = multicall.hooks).useSingleContractMultipleData.apply(_a, __spreadArray([chainId, latestBlock], __read(args), false)); -} -function useSingleContractWithCallData() { - var _a; - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var _b = useCallContext(), chainId = _b.chainId, latestBlock = _b.latestBlock; - return (_a = multicall.hooks).useSingleContractWithCallData.apply(_a, __spreadArray([chainId, latestBlock], __read(args), false)); -} -function useCallContext() { - var chainId = useActiveWeb3React().chainId; - var latestBlock = useBlockNumber(); - return { chainId: chainId, latestBlock: latestBlock }; -} - -function safeNamehash(name) { - if (name === undefined) - return undefined; - try { - return namehash(name); - } - catch (error) { - console.debug(error); - return undefined; - } -} - -/** - * Returns true if the string value is zero in hex - * @param hexNumberString - */ -function isZero(hexNumberString) { - return /^0x0*$/.test(hexNumberString); -} - -/** - * Does a lookup for an ENS name to find its address. - */ -function useENSAddress(ensName) { - var _a; - var debouncedName = useDebounce(ensName, 200); - var ensNodeArgument = useMemo(function () { return [debouncedName === null ? undefined : safeNamehash(debouncedName)]; }, [debouncedName]); - var registrarContract = useENSRegistrarContract(false); - var resolverAddress = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument); - var resolverAddressResult = (_a = resolverAddress.result) === null || _a === void 0 ? void 0 : _a[0]; - var resolverContract = useENSResolverContract(resolverAddressResult && !isZero(resolverAddressResult) ? resolverAddressResult : undefined, false); - var addr = useSingleCallResult(resolverContract, 'addr', ensNodeArgument); - var changed = debouncedName !== ensName; - return useMemo(function () { - var _a, _b; - return ({ - address: changed ? null : (_b = (_a = addr.result) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : null, - loading: changed || resolverAddress.loading || addr.loading, - }); - }, [addr.loading, addr.result, changed, resolverAddress.loading]); -} - -/** - * Does a reverse lookup for an address to find its ENS name. - * Note this is not the same as looking up an ENS name to find an address. - */ -function useENSName(address) { - var _a, _b; - var debouncedAddress = useDebounce(address, 200); - var ensNodeArgument = useMemo(function () { - if (!debouncedAddress || !isAddress(debouncedAddress)) - return [undefined]; - return [namehash(debouncedAddress.toLowerCase().substr(2) + ".addr.reverse")]; - }, [debouncedAddress]); - var registrarContract = useENSRegistrarContract(false); - var resolverAddress = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument); - var resolverAddressResult = (_a = resolverAddress.result) === null || _a === void 0 ? void 0 : _a[0]; - var resolverContract = useENSResolverContract(resolverAddressResult && !isZero(resolverAddressResult) ? resolverAddressResult : undefined, false); - var nameCallRes = useSingleCallResult(resolverContract, 'name', ensNodeArgument); - var name = (_b = nameCallRes.result) === null || _b === void 0 ? void 0 : _b[0]; - /* ENS does not enforce that an address owns a .eth domain before setting it as a reverse proxy - and recommends that you perform a match on the forward resolution - see: https://docs.ens.domains/dapp-developer-guide/resolving-names#reverse-resolution - */ - var fwdAddr = useENSAddress(name); - var checkedName = address === (fwdAddr === null || fwdAddr === void 0 ? void 0 : fwdAddr.address) ? name : null; - var changed = debouncedAddress !== address; - return useMemo(function () { return ({ - ENSName: changed ? null : checkedName, - loading: changed || resolverAddress.loading || nameCallRes.loading, - }); }, [changed, nameCallRes.loading, checkedName, resolverAddress.loading]); -} - -/** - * Given a name or address, does a lookup to resolve to an address and name - * @param nameOrAddress ENS name or address - */ -function useENS(nameOrAddress) { - var validated = isAddress(nameOrAddress); - var reverseLookup = useENSName(validated ? validated : undefined); - var lookup = useENSAddress(nameOrAddress); - return useMemo(function () { return ({ - loading: reverseLookup.loading || lookup.loading, - address: validated ? validated : lookup.address, - name: reverseLookup.ENSName ? reverseLookup.ENSName : !validated && lookup.address ? nameOrAddress || null : null, - }); }, [lookup.address, lookup.loading, nameOrAddress, reverseLookup.ENSName, reverseLookup.loading, validated]); -} - -/** - * Returns the gas value plus a margin for unexpected or variable gas costs - * @param value the gas value to pad - */ -function calculateGasMargin(value) { - return value.mul(120).div(100); -} - -/** - * Be careful adding to this enum, always assign a unique value (typescript will not prevent duplicate values). - * These values is persisted in state and if you change the value it will cause errors - */ -var TransactionType; -(function (TransactionType) { - TransactionType[TransactionType["APPROVAL"] = 0] = "APPROVAL"; - TransactionType[TransactionType["SWAP"] = 1] = "SWAP"; - TransactionType[TransactionType["DEPOSIT_LIQUIDITY_STAKING"] = 2] = "DEPOSIT_LIQUIDITY_STAKING"; - TransactionType[TransactionType["WITHDRAW_LIQUIDITY_STAKING"] = 3] = "WITHDRAW_LIQUIDITY_STAKING"; - TransactionType[TransactionType["CLAIM"] = 4] = "CLAIM"; - TransactionType[TransactionType["VOTE"] = 5] = "VOTE"; - TransactionType[TransactionType["DELEGATE"] = 6] = "DELEGATE"; - TransactionType[TransactionType["WRAP"] = 7] = "WRAP"; - TransactionType[TransactionType["CREATE_V3_POOL"] = 8] = "CREATE_V3_POOL"; - TransactionType[TransactionType["ADD_LIQUIDITY_V3_POOL"] = 9] = "ADD_LIQUIDITY_V3_POOL"; - TransactionType[TransactionType["ADD_LIQUIDITY_V2_POOL"] = 10] = "ADD_LIQUIDITY_V2_POOL"; - TransactionType[TransactionType["MIGRATE_LIQUIDITY_V3"] = 11] = "MIGRATE_LIQUIDITY_V3"; - TransactionType[TransactionType["COLLECT_FEES"] = 12] = "COLLECT_FEES"; - TransactionType[TransactionType["REMOVE_LIQUIDITY_V3"] = 13] = "REMOVE_LIQUIDITY_V3"; - TransactionType[TransactionType["SUBMIT_PROPOSAL"] = 14] = "SUBMIT_PROPOSAL"; -})(TransactionType || (TransactionType = {})); -var addTransaction = createAction('transactions/addTransaction'); -var clearAllTransactions = createAction('transactions/clearAllTransactions'); -var finalizeTransaction = createAction('transactions/finalizeTransaction'); -var checkedTransaction = createAction('transactions/checkedTransaction'); - -var SUPPORTED_TRANSACTION_TYPES = [ - TransactionType.ADD_LIQUIDITY_V2_POOL, - TransactionType.ADD_LIQUIDITY_V3_POOL, - TransactionType.CREATE_V3_POOL, - TransactionType.REMOVE_LIQUIDITY_V3, - TransactionType.SWAP, -]; -var FIREBASE_API_KEY = process.env.REACT_APP_FIREBASE_KEY; -var firebaseEnabled = typeof FIREBASE_API_KEY !== 'undefined'; -if (firebaseEnabled) - initializeFirebase(); -function useMonitoringEventCallback() { - var chainId = useActiveWeb3React().chainId; - return useCallback(function log(type, _a) { - var transactionResponse = _a.transactionResponse, walletAddress = _a.walletAddress; - return __awaiter(this, void 0, void 0, function () { - var db; - return __generator(this, function (_b) { - if (!firebaseEnabled) - return [2 /*return*/]; - db = getDatabase(); - if (!walletAddress) { - console.debug('Wallet address required to log monitoring events.'); - return [2 /*return*/]; - } - try { - push(ref(db, 'trm'), { - chainId: chainId, - origin: window.location.origin, - timestamp: Date.now(), - tx: transactionResponse, - type: type, - walletAddress: walletAddress, - }); - } - catch (e) { - console.debug('Error adding document: ', e); - } - return [2 /*return*/]; - }); - }); - }, [chainId]); -} -function useTransactionMonitoringEventCallback() { - var account = useActiveWeb3React().account; - var log = useMonitoringEventCallback(); - return useCallback(function (info, transactionResponse) { - if (SUPPORTED_TRANSACTION_TYPES.includes(info.type)) { - log(TransactionType[info.type], { - transactionResponse: (function (_a) { - var hash = _a.hash, v = _a.v, r = _a.r, s = _a.s; - return ({ hash: hash, v: v, r: r, s: s }); - })(transactionResponse), - walletAddress: account !== null && account !== void 0 ? account : undefined, - }); - } - }, [account, log]); -} -function useWalletConnectMonitoringEventCallback() { - var log = useMonitoringEventCallback(); - return useCallback(function (walletAddress) { - log('WALLET_CONNECTED', { transactionResponse: { hash: '', r: '', s: '', v: -1 }, walletAddress: walletAddress }); - }, [log]); -} -function initializeFirebase() { - initializeApp({ - apiKey: process.env.REACT_APP_FIREBASE_KEY, - authDomain: 'interface-monitoring.firebaseapp.com', - databaseURL: 'https://interface-monitoring-default-rtdb.firebaseio.com', - projectId: 'interface-monitoring', - storageBucket: 'interface-monitoring.appspot.com', - messagingSenderId: '968187720053', - appId: '1:968187720053:web:acedf72dce629d470be33c', - }); -} - -// helper that can take a ethers library transaction response and add it to the list of transactions -function useTransactionAdder() { - var _a = useActiveWeb3React(), chainId = _a.chainId, account = _a.account; - var dispatch = useAppDispatch(); - var logMonitoringEvent = useTransactionMonitoringEventCallback(); - return useCallback(function (response, info) { - if (!account) - return; - if (!chainId) - return; - var hash = response.hash; - if (!hash) { - throw Error('No transaction hash found.'); - } - dispatch(addTransaction({ hash: hash, from: account, info: info, chainId: chainId })); - logMonitoringEvent(info, response); - }, [account, chainId, dispatch, logMonitoringEvent]); -} -// returns all the transactions for the current chain -function useAllTransactions() { - var _a; - var chainId = useActiveWeb3React().chainId; - var state = useAppSelector(function (state) { return state.transactions; }); - return chainId ? (_a = state[chainId]) !== null && _a !== void 0 ? _a : {} : {}; -} -function useTransaction(transactionHash) { - var allTransactions = useAllTransactions(); - if (!transactionHash) { - return undefined; - } - return allTransactions[transactionHash]; -} -function useIsTransactionPending(transactionHash) { - var transactions = useAllTransactions(); - if (!transactionHash || !transactions[transactionHash]) - return false; - return !transactions[transactionHash].receipt; -} -function useIsTransactionConfirmed(transactionHash) { - var transactions = useAllTransactions(); - if (!transactionHash || !transactions[transactionHash]) - return false; - return Boolean(transactions[transactionHash].receipt); -} -/** - * Returns whether a transaction happened in the last day (86400 seconds * 1000 milliseconds / second) - * @param tx to check for recency - */ -function isTransactionRecent(tx) { - return new Date().getTime() - tx.addedTime < 86400000; -} -// returns whether a token has a pending approval transaction -function useHasPendingApproval(token, spender) { - var allTransactions = useAllTransactions(); - return useMemo(function () { - return typeof (token === null || token === void 0 ? void 0 : token.address) === 'string' && - typeof spender === 'string' && - Object.keys(allTransactions).some(function (hash) { - var tx = allTransactions[hash]; - if (!tx) - return false; - if (tx.receipt) { - return false; - } - else { - if (tx.info.type !== TransactionType.APPROVAL) - return false; - return tx.info.spender === spender && tx.info.tokenAddress === token.address && isTransactionRecent(tx); - } - }); - }, [allTransactions, spender, token === null || token === void 0 ? void 0 : token.address]); -} -// watch for submissions to claim -// return null if not done loading, return undefined if not found -function useUserHasSubmittedClaim(account) { - var allTransactions = useAllTransactions(); - // get the txn if it has been submitted - var claimTxn = useMemo(function () { - var txnIndex = Object.keys(allTransactions).find(function (hash) { - var tx = allTransactions[hash]; - return tx.info.type === TransactionType.CLAIM && tx.info.recipient === account; - }); - return txnIndex && allTransactions[txnIndex] ? allTransactions[txnIndex] : undefined; - }, [account, allTransactions]); - return { claimSubmitted: Boolean(claimTxn), claimTxn: claimTxn }; -} - -var FETCH_CLAIM_MAPPING_PROMISE = null; -function fetchClaimMapping() { - return (FETCH_CLAIM_MAPPING_PROMISE !== null && FETCH_CLAIM_MAPPING_PROMISE !== void 0 ? FETCH_CLAIM_MAPPING_PROMISE : (FETCH_CLAIM_MAPPING_PROMISE = fetch("https://raw.githubusercontent.com/Uniswap/mrkl-drop-data-chunks/final/chunks/mapping.json") - .then(function (res) { return res.json(); }) - .catch(function (error) { - console.error('Failed to get claims mapping', error); - FETCH_CLAIM_MAPPING_PROMISE = null; - }))); -} -var FETCH_CLAIM_FILE_PROMISES = {}; -function fetchClaimFile(key) { - var _a; - return ((_a = FETCH_CLAIM_FILE_PROMISES[key]) !== null && _a !== void 0 ? _a : (FETCH_CLAIM_FILE_PROMISES[key] = fetch("https://raw.githubusercontent.com/Uniswap/mrkl-drop-data-chunks/final/chunks/" + key + ".json") - .then(function (res) { return res.json(); }) - .catch(function (error) { - console.error("Failed to get claim file mapping for starting address " + key, error); - delete FETCH_CLAIM_FILE_PROMISES[key]; - }))); -} -var FETCH_CLAIM_PROMISES = {}; -// returns the claim for the given address, or null if not valid -function fetchClaim(account) { - var _a; - var formatted = isAddress(account); - if (!formatted) - return Promise.reject(new Error('Invalid address')); - return ((_a = FETCH_CLAIM_PROMISES[account]) !== null && _a !== void 0 ? _a : (FETCH_CLAIM_PROMISES[account] = fetchClaimMapping() - .then(function (mapping) { - var e_1, _a; - var sorted = Object.keys(mapping).sort(function (a, b) { return (a.toLowerCase() < b.toLowerCase() ? -1 : 1); }); - try { - for (var sorted_1 = __values(sorted), sorted_1_1 = sorted_1.next(); !sorted_1_1.done; sorted_1_1 = sorted_1.next()) { - var startingAddress = sorted_1_1.value; - var lastAddress = mapping[startingAddress]; - if (startingAddress.toLowerCase() <= formatted.toLowerCase()) { - if (formatted.toLowerCase() <= lastAddress.toLowerCase()) { - return startingAddress; - } - } - else { - throw new Error("Claim for " + formatted + " was not found in partial search"); - } - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (sorted_1_1 && !sorted_1_1.done && (_a = sorted_1.return)) _a.call(sorted_1); - } - finally { if (e_1) throw e_1.error; } - } - throw new Error("Claim for " + formatted + " was not found after searching all mappings"); - }) - .then(fetchClaimFile) - .then(function (result) { - if (result[formatted]) - return result[formatted]; - throw new Error("Claim for " + formatted + " was not found in claim file!"); - }) - .catch(function (error) { - console.debug('Claim fetch failed', error); - throw error; - }))); -} -// parse distributorContract blob and detect if user has claim data -// null means we know it does not -function useUserClaimData(account) { - var chainId = useActiveWeb3React().chainId; - var _a = __read(useState({}), 2), claimInfo = _a[0], setClaimInfo = _a[1]; - useEffect(function () { - if (!account || chainId !== 1) - return; - fetchClaim(account) - .then(function (accountClaimInfo) { - return setClaimInfo(function (claimInfo) { - var _a; - return __assign(__assign({}, claimInfo), (_a = {}, _a[account] = accountClaimInfo, _a)); - }); - }) - .catch(function () { - setClaimInfo(function (claimInfo) { - var _a; - return __assign(__assign({}, claimInfo), (_a = {}, _a[account] = null, _a)); - }); - }); - }, [account, chainId]); - return account && chainId === 1 ? claimInfo[account] : null; -} -// check if user is in blob and has not yet claimed UNI -function useUserHasAvailableClaim(account) { - var _a; - var userClaimData = useUserClaimData(account); - var distributorContract = useMerkleDistributorContract(); - var isClaimedResult = useSingleCallResult(distributorContract, 'isClaimed', [userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.index]); - // user is in blob and contract marks as unclaimed - return Boolean(userClaimData && !isClaimedResult.loading && ((_a = isClaimedResult.result) === null || _a === void 0 ? void 0 : _a[0]) === false); -} -function useUserUnclaimedAmount(account) { - var chainId = useActiveWeb3React().chainId; - var userClaimData = useUserClaimData(account); - var canClaim = useUserHasAvailableClaim(account); - var uni = chainId ? UNI[chainId] : undefined; - if (!uni) - return undefined; - if (!canClaim || !userClaimData) { - return CurrencyAmount.fromRawAmount(uni, JSBI.BigInt(0)); - } - return CurrencyAmount.fromRawAmount(uni, JSBI.BigInt(userClaimData.amount)); -} -function useClaimCallback(account) { - // get claim data for this account - var _a = useActiveWeb3React(), library = _a.library, chainId = _a.chainId; - var claimData = useUserClaimData(account); - // used for popup summary - var unclaimedAmount = useUserUnclaimedAmount(account); - var addTransaction = useTransactionAdder(); - var distributorContract = useMerkleDistributorContract(); - var claimCallback = function () { - return __awaiter(this, void 0, void 0, function () { - var args; - var _a; - return __generator(this, function (_b) { - if (!claimData || !account || !library || !chainId || !distributorContract) - return [2 /*return*/]; - args = [claimData.index, account, claimData.amount, claimData.proof]; - return [2 /*return*/, (_a = distributorContract.estimateGas)['claim'].apply(_a, __spreadArray(__spreadArray([], __read(args), false), [{}], false)).then(function (estimatedGasLimit) { - return distributorContract - .claim.apply(distributorContract, __spreadArray(__spreadArray([], __read(args), false), [{ value: null, gasLimit: calculateGasMargin(estimatedGasLimit) }], false)).then(function (response) { - addTransaction(response, { - type: TransactionType.CLAIM, - recipient: account, - uniAmountRaw: unclaimedAmount === null || unclaimedAmount === void 0 ? void 0 : unclaimedAmount.quotient.toString(), - }); - return response.hash; - }); - })]; - }); - }); - }; - return { claimCallback: claimCallback }; -} - -var _a$d, _b$4, _c$3, _d$2, _e$1, _f, _g, _h; -var WRAPPED_NATIVE_CURRENCIES_ONLY = Object.fromEntries(Object.entries(WRAPPED_NATIVE_CURRENCY).map(function (_a) { - var _b = __read(_a, 2), key = _b[0], value = _b[1]; - return [key, [value]]; -})); -// used to construct intermediary pairs for trading -var BASES_TO_CHECK_TRADES_AGAINST = __assign(__assign({}, WRAPPED_NATIVE_CURRENCIES_ONLY), (_a$d = {}, _a$d[SupportedChainId.MAINNET] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.MAINNET]), false), [DAI, USDC, USDT, WBTC], false), _a$d[SupportedChainId.OPTIMISM] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.OPTIMISM]), false), [ - DAI_OPTIMISM, - USDT_OPTIMISM, - WBTC_OPTIMISM, -], false), _a$d[SupportedChainId.ARBITRUM_ONE] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.ARBITRUM_ONE]), false), [ - DAI_ARBITRUM_ONE, - USDT_ARBITRUM_ONE, - WBTC_ARBITRUM_ONE, -], false), _a$d[SupportedChainId.POLYGON] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.POLYGON]), false), [ - DAI_POLYGON, - USDC_POLYGON, - USDT_POLYGON, - WETH_POLYGON, -], false), _a$d)); -var ADDITIONAL_BASES = (_b$4 = {}, - _b$4[SupportedChainId.MAINNET] = (_c$3 = { - '0xF16E4d813f4DcfDe4c5b44f305c908742De84eF0': [ETH2X_FLI] - }, - _c$3[rETH2.address] = [sETH2], - _c$3[SWISE.address] = [sETH2], - _c$3[FEI.address] = [TRIBE], - _c$3[TRIBE.address] = [FEI], - _c$3[FRAX.address] = [FXS], - _c$3[FXS.address] = [FRAX], - _c$3[WBTC.address] = [renBTC], - _c$3[renBTC.address] = [WBTC], - _c$3), - _b$4); -/** - * Some tokens can only be swapped via certain pairs, so we override the list of bases that are considered for these - * tokens. - */ -var CUSTOM_BASES = (_d$2 = {}, - _d$2[SupportedChainId.MAINNET] = (_e$1 = {}, - _e$1[AMPL.address] = [DAI, WRAPPED_NATIVE_CURRENCY[SupportedChainId.MAINNET]], - _e$1), - _d$2); -/** - * Shows up in the currency select for swap and add liquidity - */ -var COMMON_BASES = (_f = {}, - _f[SupportedChainId.MAINNET] = [ - nativeOnChain(SupportedChainId.MAINNET), - DAI, - USDC, - USDT, - WBTC, - WRAPPED_NATIVE_CURRENCY[SupportedChainId.MAINNET], - ], - _f[SupportedChainId.ROPSTEN] = [ - nativeOnChain(SupportedChainId.ROPSTEN), - WRAPPED_NATIVE_CURRENCY[SupportedChainId.ROPSTEN], - ], - _f[SupportedChainId.RINKEBY] = [ - nativeOnChain(SupportedChainId.RINKEBY), - WRAPPED_NATIVE_CURRENCY[SupportedChainId.RINKEBY], - ], - _f[SupportedChainId.GOERLI] = [nativeOnChain(SupportedChainId.GOERLI), WRAPPED_NATIVE_CURRENCY[SupportedChainId.GOERLI]], - _f[SupportedChainId.KOVAN] = [nativeOnChain(SupportedChainId.KOVAN), WRAPPED_NATIVE_CURRENCY[SupportedChainId.KOVAN]], - _f[SupportedChainId.ARBITRUM_ONE] = [ - nativeOnChain(SupportedChainId.ARBITRUM_ONE), - DAI_ARBITRUM_ONE, - USDC_ARBITRUM, - USDT_ARBITRUM_ONE, - WBTC_ARBITRUM_ONE, - WRAPPED_NATIVE_CURRENCY[SupportedChainId.ARBITRUM_ONE], - ], - _f[SupportedChainId.ARBITRUM_RINKEBY] = [ - nativeOnChain(SupportedChainId.ARBITRUM_RINKEBY), - WRAPPED_NATIVE_CURRENCY[SupportedChainId.ARBITRUM_RINKEBY], - ], - _f[SupportedChainId.OPTIMISM] = [ - nativeOnChain(SupportedChainId.OPTIMISM), - DAI_OPTIMISM, - USDC_OPTIMISM, - USDT_OPTIMISM, - WBTC_OPTIMISM, - ], - _f[SupportedChainId.OPTIMISTIC_KOVAN] = [nativeOnChain(SupportedChainId.OPTIMISTIC_KOVAN)], - _f[SupportedChainId.POLYGON] = [ - nativeOnChain(SupportedChainId.POLYGON), - WETH_POLYGON, - USDC_POLYGON, - DAI_POLYGON, - USDT_POLYGON, - WBTC_POLYGON, - ], - _f[SupportedChainId.POLYGON_MUMBAI] = [ - nativeOnChain(SupportedChainId.POLYGON_MUMBAI), - WRAPPED_NATIVE_CURRENCY[SupportedChainId.POLYGON_MUMBAI], - WETH_POLYGON_MUMBAI, - ], - _f); -// used to construct the list of all pairs we consider by default in the frontend -__assign(__assign({}, WRAPPED_NATIVE_CURRENCIES_ONLY), (_g = {}, _g[SupportedChainId.MAINNET] = __spreadArray(__spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.MAINNET]), false), [DAI, USDC, USDT, WBTC], false), _g)); -(_h = {}, - _h[SupportedChainId.MAINNET] = [ - [ - new Token(SupportedChainId.MAINNET, '0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643', 8, 'cDAI', 'Compound Dai'), - new Token(SupportedChainId.MAINNET, '0x39AA39c021dfbaE8faC545936693aC917d5E7563', 8, 'cUSDC', 'Compound USD Coin'), - ], - [USDC, USDT], - [DAI, USDT], - ], - _h); - -var EthereumLogo = "data:image/png;base64,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"; - -var arbitrumLogoUrl = "data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20viewBox%3D%220%200%20470.287%20514.251%22%20enable-background%3D%22new%200%200%20470.287%20514.251%22%20xml%3Aspace%3D%22preserve%22%3E%3Cg%20id%3D%22Background%22%3E%3C%2Fg%3E%3Cg%20id%3D%22Logos_and_symbols%22%3E%20%3Cg%20id%3D%22SYMBOL_VER_3%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_4_3_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_1_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_1_%22%3E%20%20%3Cg%20id%3D%22_x31_-3%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_14_%22%3E%20%20%20%3Cpath%20fill%3D%22%232D374B%22%20d%3D%22M291.134%2C237.469l35.654-60.5l96.103%2C149.684l0.046%2C28.727l-0.313-197.672%20%20%20%20c-0.228-4.832-2.794-9.252-6.887-11.859L242.715%2C46.324c-4.045-1.99-9.18-1.967-13.22%2C0.063c-0.546%2C0.272-1.06%2C0.57-1.548%2C0.895%20%20%20%20l-0.604%2C0.379L59.399%2C144.983l-0.651%2C0.296c-0.838%2C0.385-1.686%2C0.875-2.48%2C1.444c-3.185%2C2.283-5.299%2C5.66-5.983%2C9.448%20%20%20%20c-0.103%2C0.574-0.179%2C1.158-0.214%2C1.749l0.264%2C161.083l89.515-138.745c11.271-18.397%2C35.825-24.323%2C58.62-24.001l26.753%2C0.706%20%20%20%20L67.588%2C409.765l18.582%2C10.697L245.692%2C157.22l70.51-0.256L157.091%2C426.849l66.306%2C38.138l7.922%2C4.556%20%20%20%20c3.351%2C1.362%2C7.302%2C1.431%2C10.681%2C0.21l175.453-101.678l-33.544%2C19.438L291.134%2C237.469z%20M304.736%2C433.395l-66.969-105.108%20%20%20%20l40.881-69.371l87.952%2C138.628L304.736%2C433.395z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%2328A0F0%22%20points%3D%22237.768%2C328.286%20304.736%2C433.395%20366.601%2C397.543%20278.648%2C258.915%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2328A0F0%22%20d%3D%22M422.937%2C355.379l-0.046-28.727l-96.103-149.684l-35.654%2C60.5l92.774%2C150.043l33.544-19.438%20%20%20%20c3.29-2.673%2C5.281-6.594%2C5.49-10.825L422.937%2C355.379z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23FFFFFF%22%20d%3D%22M20.219%2C382.469l47.369%2C27.296l157.634-252.801l-26.753-0.706c-22.795-0.322-47.35%2C5.604-58.62%2C24.001%20%20%20%20L50.334%2C319.004l-30.115%2C46.271V382.469z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%23FFFFFF%22%20points%3D%22316.202%2C156.964%20245.692%2C157.22%2086.17%2C420.462%20141.928%2C452.565%20157.091%2C426.849%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2396BEDC%22%20d%3D%22M452.65%2C156.601c-0.59-14.746-8.574-28.245-21.08-36.104L256.28%2C19.692%20%20%20%20c-12.371-6.229-27.825-6.237-40.218-0.004c-1.465%2C0.739-170.465%2C98.752-170.465%2C98.752c-2.339%2C1.122-4.592%2C2.458-6.711%2C3.975%20%20%20%20c-11.164%2C8.001-17.969%2C20.435-18.668%2C34.095v208.765l30.115-46.271L50.07%2C157.921c0.035-0.589%2C0.109-1.169%2C0.214-1.741%20%20%20%20c0.681-3.79%2C2.797-7.171%2C5.983-9.456c0.795-0.569%2C172.682-100.064%2C173.228-100.337c4.04-2.029%2C9.175-2.053%2C13.22-0.063%20%20%20%20l173.022%2C99.523c4.093%2C2.607%2C6.659%2C7.027%2C6.887%2C11.859v199.542c-0.209%2C4.231-1.882%2C8.152-5.172%2C10.825l-33.544%2C19.438%20%20%20%20l-17.308%2C10.031l-61.864%2C35.852l-62.737%2C36.357c-3.379%2C1.221-7.33%2C1.152-10.681-0.21l-74.228-42.693l-15.163%2C25.717%20%20%20%20l66.706%2C38.406c2.206%2C1.255%2C4.171%2C2.367%2C5.784%2C3.272c2.497%2C1.4%2C4.199%2C2.337%2C4.8%2C2.629c4.741%2C2.303%2C11.563%2C3.643%2C17.71%2C3.643%20%20%20%20c5.636%2C0%2C11.132-1.035%2C16.332-3.072l182.225-105.531c10.459-8.104%2C16.612-20.325%2C17.166-33.564V156.601z%22%2F%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_13_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_6_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_3_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_15_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_3_%22%3E%20%20%20%3Cg%20id%3D%22_x33__7_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic%22%3E%20%20%20%3Cg%20id%3D%22_x33__3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_10_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x34__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_2_%22%3E%20%20%20%3Cg%20id%3D%22_x33__6_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_2_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_11_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_5_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_12_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_1_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_9_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_2_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol_1_%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_1_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_7_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_8_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Monochromatic_1_%22%3E%20%20%3Cg%20id%3D%22_x33__4_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E"; - -var optimismLogoUrl = "data:image/svg+xml,%3Csvg%20width%3D%22170%22%20height%3D%22168%22%20viewBox%3D%220%200%20170%20168%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20clip-path%3D%22url%28%23clip0%29%22%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF505F%22%2F%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF0320%22%2F%3E%3Cpath%20d%3D%22M85.05%200C132.022%200%20170.1%2037.8949%20170.1%2084.6407C170.1%20131.386%200%20131.386%200%2084.6407C0%2037.8949%2038.0782%200%2085.05%200Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.665%2064.0394L112.444%2012.3742L89.0263%2078.9477L144.665%2064.0394Z%22%20fill%3D%22%23FF4E65%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.777%2064.215L112.444%2012.3742L165.349%2058.4347L143.777%2064.215Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.551%2063.613L142.479%20124.467L88.912%2078.5213L144.551%2063.613Z%22%20fill%3D%22%23D0001A%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.663%2063.7886L142.479%20124.467L165.235%2058.0083L143.663%2063.7886Z%22%20fill%3D%22%23FF697B%22%2F%3E%3C%2Fg%3E%3Cdefs%3E%3CclipPath%20id%3D%22clip0%22%3E%3Crect%20width%3D%22170%22%20height%3D%22168%22%20fill%3D%22white%22%2F%3E%3C%2FclipPath%3E%3C%2Fdefs%3E%3C%2Fsvg%3E"; - -var polygonMaticLogo = "data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20viewBox%3D%220%200%2038.4%2033.5%22%20style%3D%22enable-background%3Anew%200%200%2038.4%2033.5%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cstyle%20type%3D%22text%2Fcss%22%3E%20.st0%7Bfill%3A%238247E5%3B%7D%3C%2Fstyle%3E%3Cg%3E%20%3Cpath%20class%3D%22st0%22%20d%3D%22M29%2C10.2c-0.7-0.4-1.6-0.4-2.4%2C0L21%2C13.5l-3.8%2C2.1l-5.5%2C3.3c-0.7%2C0.4-1.6%2C0.4-2.4%2C0L5%2C16.3%20%20c-0.7-0.4-1.2-1.2-1.2-2.1v-5c0-0.8%2C0.4-1.6%2C1.2-2.1l4.3-2.5c0.7-0.4%2C1.6-0.4%2C2.4%2C0L16%2C7.2c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v3.3l3.8-2.2V7%20%20c0-0.8-0.4-1.6-1.2-2.1l-8-4.7c-0.7-0.4-1.6-0.4-2.4%2C0L1.2%2C5C0.4%2C5.4%2C0%2C6.2%2C0%2C7v9.4c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l5.5-3.2l3.8-2.2l5.5-3.2c0.7-0.4%2C1.6-0.4%2C2.4%2C0l4.3%2C2.5c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v5c0%2C0.8-0.4%2C1.6-1.2%2C2.1%20%20L29%2C28.8c-0.7%2C0.4-1.6%2C0.4-2.4%2C0l-4.3-2.5c-0.7-0.4-1.2-1.2-1.2-2.1V21l-3.8%2C2.2v3.3c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l8.1-4.7c0.7-0.4%2C1.2-1.2%2C1.2-2.1V17c0-0.8-0.4-1.6-1.2-2.1L29%2C10.2z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"; - -var UNI_LIST = 'https://tokens.uniswap.org'; -var AAVE_LIST = 'tokenlist.aave.eth'; -var BA_LIST = 'https://raw.githubusercontent.com/The-Blockchain-Association/sec-notice-list/master/ba-sec-list.json'; -var CMC_ALL_LIST = 'https://api.coinmarketcap.com/data-api/v3/uniswap/all.json'; -var COINGECKO_LIST = 'https://tokens.coingecko.com/uniswap/all.json'; -var COMPOUND_LIST = 'https://raw.githubusercontent.com/compound-finance/token-list/master/compound.tokenlist.json'; -var GEMINI_LIST = 'https://www.gemini.com/uniswap/manifest.json'; -var ARBITRUM_LIST = 'https://bridge.arbitrum.io/token-list-42161.json'; -var KLEROS_LIST = 't2crtokens.eth'; -var OPTIMISM_LIST = 'https://static.optimism.io/optimism.tokenlist.json'; -var ROLL_LIST = 'https://app.tryroll.com/tokens.json'; -var SET_LIST = 'https://raw.githubusercontent.com/SetProtocol/uniswap-tokenlist/main/set.tokenlist.json'; -var WRAPPED_LIST = 'wrapped.tokensoft.eth'; -var UNSUPPORTED_LIST_URLS = [BA_LIST]; -// this is the default list of lists that are exposed to users -// lower index == higher priority for token import -var DEFAULT_LIST_OF_LISTS_TO_DISPLAY = [ - UNI_LIST, - COMPOUND_LIST, - AAVE_LIST, - CMC_ALL_LIST, - COINGECKO_LIST, - KLEROS_LIST, - GEMINI_LIST, - WRAPPED_LIST, - SET_LIST, - ROLL_LIST, - ARBITRUM_LIST, - OPTIMISM_LIST, -]; -var DEFAULT_LIST_OF_LISTS = __spreadArray(__spreadArray([], __read(DEFAULT_LIST_OF_LISTS_TO_DISPLAY), false), __read(UNSUPPORTED_LIST_URLS), false); -// default lists to be 'active' aka searched across -var DEFAULT_ACTIVE_LIST_URLS = [UNI_LIST, GEMINI_LIST]; - -var _a$c, _b$3; -var INFURA_KEY = process.env.REACT_APP_INFURA_KEY; -if (typeof INFURA_KEY === 'undefined') { - throw new Error("REACT_APP_INFURA_KEY must be a defined environment variable"); -} -/** - * These are the network URLs used by the interface when there is not another available source of chain data - */ -var INFURA_NETWORK_URLS = (_a$c = {}, - _a$c[SupportedChainId.MAINNET] = "https://mainnet.infura.io/v3/" + INFURA_KEY, - _a$c[SupportedChainId.RINKEBY] = "https://rinkeby.infura.io/v3/" + INFURA_KEY, - _a$c[SupportedChainId.ROPSTEN] = "https://ropsten.infura.io/v3/" + INFURA_KEY, - _a$c[SupportedChainId.GOERLI] = "https://goerli.infura.io/v3/" + INFURA_KEY, - _a$c[SupportedChainId.KOVAN] = "https://kovan.infura.io/v3/" + INFURA_KEY, - _a$c[SupportedChainId.OPTIMISM] = "https://optimism-mainnet.infura.io/v3/" + INFURA_KEY, - _a$c[SupportedChainId.OPTIMISTIC_KOVAN] = "https://optimism-kovan.infura.io/v3/" + INFURA_KEY, - _a$c[SupportedChainId.ARBITRUM_ONE] = "https://arbitrum-mainnet.infura.io/v3/" + INFURA_KEY, - _a$c[SupportedChainId.ARBITRUM_RINKEBY] = "https://arbitrum-rinkeby.infura.io/v3/" + INFURA_KEY, - _a$c[SupportedChainId.POLYGON] = "https://polygon-mainnet.infura.io/v3/" + INFURA_KEY, - _a$c[SupportedChainId.POLYGON_MUMBAI] = "https://polygon-mumbai.infura.io/v3/" + INFURA_KEY, - _a$c); -var NetworkType; -(function (NetworkType) { - NetworkType[NetworkType["L1"] = 0] = "L1"; - NetworkType[NetworkType["L2"] = 1] = "L2"; -})(NetworkType || (NetworkType = {})); -var CHAIN_INFO = (_b$3 = {}, - _b$3[SupportedChainId.MAINNET] = { - networkType: NetworkType.L1, - docs: 'https://docs.uniswap.org/', - explorer: 'https://etherscan.io/', - infoLink: 'https://info.uniswap.org/#/', - label: 'Ethereum', - logoUrl: EthereumLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, - rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.MAINNET], - }, - }, - _b$3[SupportedChainId.RINKEBY] = { - networkType: NetworkType.L1, - docs: 'https://docs.uniswap.org/', - explorer: 'https://rinkeby.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/', - label: 'Rinkeby', - logoUrl: EthereumLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Rinkeby Ether', symbol: 'rETH', decimals: 18 }, - rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.RINKEBY], - }, - }, - _b$3[SupportedChainId.ROPSTEN] = { - networkType: NetworkType.L1, - docs: 'https://docs.uniswap.org/', - explorer: 'https://ropsten.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/', - label: 'Ropsten', - logoUrl: EthereumLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Ropsten Ether', symbol: 'ropETH', decimals: 18 }, - rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.ROPSTEN], - }, - }, - _b$3[SupportedChainId.KOVAN] = { - networkType: NetworkType.L1, - docs: 'https://docs.uniswap.org/', - explorer: 'https://kovan.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/', - label: 'Kovan', - logoUrl: EthereumLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Kovan Ether', symbol: 'kovETH', decimals: 18 }, - rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.KOVAN], - }, - }, - _b$3[SupportedChainId.GOERLI] = { - networkType: NetworkType.L1, - docs: 'https://docs.uniswap.org/', - explorer: 'https://goerli.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/', - label: 'Görli', - logoUrl: EthereumLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Görli Ether', symbol: 'görETH', decimals: 18 }, - rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.GOERLI], - }, - }, - _b$3[SupportedChainId.OPTIMISM] = { - networkType: NetworkType.L2, - blockWaitMsBeforeWarning: ms(templateObject_1$1m || (templateObject_1$1m = __makeTemplateObject(["25m"], ["25m"]))), - bridge: 'https://gateway.optimism.io/?chainId=1', - defaultListUrl: OPTIMISM_LIST, - docs: 'https://optimism.io/', - explorer: 'https://optimistic.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/optimism/', - label: 'Optimism', - logoUrl: optimismLogoUrl, - statusPage: 'https://optimism.io/status', - helpCenterUrl: 'https://help.uniswap.org/en/collections/3137778-uniswap-on-optimistic-ethereum-oξ', - addNetworkInfo: { - nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, - rpcUrl: 'https://mainnet.optimism.io', - }, - }, - _b$3[SupportedChainId.OPTIMISTIC_KOVAN] = { - networkType: NetworkType.L2, - blockWaitMsBeforeWarning: ms(templateObject_2$10 || (templateObject_2$10 = __makeTemplateObject(["25m"], ["25m"]))), - bridge: 'https://gateway.optimism.io/', - defaultListUrl: OPTIMISM_LIST, - docs: 'https://optimism.io/', - explorer: 'https://optimistic.etherscan.io/', - infoLink: 'https://info.uniswap.org/#/optimism/', - label: 'Optimistic Kovan', - logoUrl: optimismLogoUrl, - statusPage: 'https://optimism.io/status', - helpCenterUrl: 'https://help.uniswap.org/en/collections/3137778-uniswap-on-optimistic-ethereum-oξ', - addNetworkInfo: { - nativeCurrency: { name: 'Optimistic Kovan Ether', symbol: 'kovOpETH', decimals: 18 }, - rpcUrl: 'https://kovan.optimism.io', - }, - }, - _b$3[SupportedChainId.ARBITRUM_ONE] = { - networkType: NetworkType.L2, - blockWaitMsBeforeWarning: ms(templateObject_3$T || (templateObject_3$T = __makeTemplateObject(["10m"], ["10m"]))), - bridge: 'https://bridge.arbitrum.io/', - docs: 'https://offchainlabs.com/', - explorer: 'https://arbiscan.io/', - infoLink: 'https://info.uniswap.org/#/arbitrum', - label: 'Arbitrum', - logoUrl: arbitrumLogoUrl, - defaultListUrl: ARBITRUM_LIST, - helpCenterUrl: 'https://help.uniswap.org/en/collections/3137787-uniswap-on-arbitrum', - addNetworkInfo: { - nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, - rpcUrl: 'https://arb1.arbitrum.io/rpc', - }, - }, - _b$3[SupportedChainId.ARBITRUM_RINKEBY] = { - networkType: NetworkType.L2, - blockWaitMsBeforeWarning: ms(templateObject_4$H || (templateObject_4$H = __makeTemplateObject(["10m"], ["10m"]))), - bridge: 'https://bridge.arbitrum.io/', - docs: 'https://offchainlabs.com/', - explorer: 'https://rinkeby-explorer.arbitrum.io/', - infoLink: 'https://info.uniswap.org/#/arbitrum/', - label: 'Arbitrum Rinkeby', - logoUrl: arbitrumLogoUrl, - defaultListUrl: ARBITRUM_LIST, - helpCenterUrl: 'https://help.uniswap.org/en/collections/3137787-uniswap-on-arbitrum', - addNetworkInfo: { - nativeCurrency: { name: 'Rinkeby Arbitrum Ether', symbol: 'rinkArbETH', decimals: 18 }, - rpcUrl: 'https://rinkeby.arbitrum.io/rpc', - }, - }, - _b$3[SupportedChainId.POLYGON] = { - networkType: NetworkType.L1, - blockWaitMsBeforeWarning: ms(templateObject_5$y || (templateObject_5$y = __makeTemplateObject(["10m"], ["10m"]))), - bridge: 'https://wallet.polygon.technology/bridge', - docs: 'https://polygon.io/', - explorer: 'https://polygonscan.com/', - infoLink: 'https://info.uniswap.org/#/polygon/', - label: 'Polygon', - logoUrl: polygonMaticLogo, - addNetworkInfo: { - rpcUrl: 'https://polygon-rpc.com/', - nativeCurrency: { name: 'Polygon Matic', symbol: 'MATIC', decimals: 18 }, - }, - }, - _b$3[SupportedChainId.POLYGON_MUMBAI] = { - networkType: NetworkType.L1, - blockWaitMsBeforeWarning: ms(templateObject_6$p || (templateObject_6$p = __makeTemplateObject(["10m"], ["10m"]))), - bridge: 'https://wallet.polygon.technology/bridge', - docs: 'https://polygon.io/', - explorer: 'https://mumbai.polygonscan.com/', - infoLink: 'https://info.uniswap.org/#/polygon/', - label: 'Polygon Mumbai', - logoUrl: polygonMaticLogo, - addNetworkInfo: { - nativeCurrency: { name: 'Polygon Mumbai Matic', symbol: 'mMATIC', decimals: 18 }, - rpcUrl: 'https://rpc-endpoints.superfluid.dev/mumbai', - }, - }, - _b$3); -var templateObject_1$1m, templateObject_2$10, templateObject_3$T, templateObject_4$H, templateObject_5$y, templateObject_6$p; - -function useNativeCurrency() { - var chainId = useActiveWeb3React().chainId; - return useMemo(function () { - return chainId - ? nativeOnChain(chainId) - : // display mainnet when not connected - nativeOnChain(SupportedChainId.MAINNET); - }, [chainId]); -} - -var EMPTY_CONNECTOR = initializeConnector(function () { return EMPTY; }); -atomWithDefault(function () { return EMPTY_CONNECTOR; }); -atomWithDefault(function () { return EMPTY_CONNECTOR; }); - -var REGISTRAR_ABI = [ - { - constant: true, - inputs: [ - { - name: 'node', - type: 'bytes32', - }, - ], - name: 'resolver', - outputs: [ - { - name: 'resolverAddress', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, -]; -var REGISTRAR_ADDRESS = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'; -var RESOLVER_ABI = [ - { - constant: true, - inputs: [ - { - internalType: 'bytes32', - name: 'node', - type: 'bytes32', - }, - ], - name: 'contenthash', - outputs: [ - { - internalType: 'bytes', - name: '', - type: 'bytes', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, -]; -// cache the resolver contracts since most of them are the public resolver -function resolverContract(resolverAddress, provider) { - return new Contract(resolverAddress, RESOLVER_ABI, provider); -} -/** - * Fetches and decodes the result of an ENS contenthash lookup on mainnet to a URI - * @param ensName to resolve - * @param provider provider to use to fetch the data - */ -function resolveENSContentHash(ensName, provider) { - return __awaiter(this, void 0, void 0, function () { - var ensRegistrarContract, hash, resolverAddress; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - ensRegistrarContract = new Contract(REGISTRAR_ADDRESS, REGISTRAR_ABI, provider); - hash = namehash(ensName); - return [4 /*yield*/, ensRegistrarContract.resolver(hash)]; - case 1: - resolverAddress = _a.sent(); - return [2 /*return*/, resolverContract(resolverAddress, provider).contenthash(hash)]; - } - }); - }); -} - -function hexToUint8Array(hex) { - hex = hex.startsWith('0x') ? hex.substr(2) : hex; - if (hex.length % 2 !== 0) - throw new Error('hex must have length that is multiple of 2'); - var arr = new Uint8Array(hex.length / 2); - for (var i = 0; i < arr.length; i++) { - arr[i] = parseInt(hex.substr(i * 2, 2), 16); - } - return arr; -} -var UTF_8_DECODER = new TextDecoder('utf-8'); -/** - * Returns the URI representation of the content hash for supported codecs - * @param contenthash to decode - */ -function contenthashToUri(contenthash) { - var data = hexToUint8Array(contenthash); - var codec = getNameFromData(data); - switch (codec) { - case 'ipfs-ns': { - var unprefixedData = rmPrefix(data); - var cid = new CID(unprefixedData); - return "ipfs://" + toB58String(cid.multihash); - } - case 'ipns-ns': { - var unprefixedData = rmPrefix(data); - var cid = new CID(unprefixedData); - var multihash = decode(cid.multihash); - if (multihash.name === 'identity') { - return "ipns://" + UTF_8_DECODER.decode(multihash.digest).trim(); - } - else { - return "ipns://" + toB58String(cid.multihash); - } - } - default: - throw new Error("Unrecognized codec: " + codec); - } -} - -var ENS_NAME_REGEX$1 = /^(([a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\.)+)eth(\/.*)?$/; -function parseENSAddress(ensAddress) { - var match = ensAddress.match(ENS_NAME_REGEX$1); - if (!match) - return undefined; - return { ensName: match[1].toLowerCase() + "eth", ensPath: match[4] }; -} - -/** - * Given a URI that may be ipfs, ipns, http, https, ar, or data protocol, return the fetch-able http(s) URLs for the same content - * @param uri to convert to fetch-able http url - */ -function uriToHttp(uri) { - var _a, _b, _c; - var protocol = uri.split(':')[0].toLowerCase(); - switch (protocol) { - case 'data': - return [uri]; - case 'https': - return [uri]; - case 'http': - return ['https' + uri.substr(4), uri]; - case 'ipfs': - var hash = (_a = uri.match(/^ipfs:(\/\/)?(.*)$/i)) === null || _a === void 0 ? void 0 : _a[2]; - return ["https://cloudflare-ipfs.com/ipfs/" + hash + "/", "https://ipfs.io/ipfs/" + hash + "/"]; - case 'ipns': - var name_1 = (_b = uri.match(/^ipns:(\/\/)?(.*)$/i)) === null || _b === void 0 ? void 0 : _b[2]; - return ["https://cloudflare-ipfs.com/ipns/" + name_1 + "/", "https://ipfs.io/ipns/" + name_1 + "/"]; - case 'ar': - var tx = (_c = uri.match(/^ar:(\/\/)?(.*)$/i)) === null || _c === void 0 ? void 0 : _c[2]; - return ["https://arweave.net/" + tx]; - default: - return []; - } -} - -var ValidationSchema; -(function (ValidationSchema) { - ValidationSchema["LIST"] = "list"; - ValidationSchema["TOKENS"] = "tokens"; -})(ValidationSchema || (ValidationSchema = {})); -var validator = new Promise(function (resolve) { return __awaiter(void 0, void 0, void 0, function () { - var _a, ajv, schema, validator; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, Promise.all([import('ajv'), Promise.resolve().then(function () { return tokenlist_schema$1; })])]; - case 1: - _a = __read.apply(void 0, [_b.sent(), 2]), ajv = _a[0], schema = _a[1]; - validator = new ajv.default({ allErrors: true }) - .addSchema(schema, ValidationSchema.LIST) - // Adds a meta scheme of Pick - .addSchema(__assign(__assign({}, schema), { $id: schema.$id + '#tokens', required: ['tokens'] }), ValidationSchema.TOKENS); - resolve(validator); - return [2 /*return*/]; - } - }); -}); }); -function getValidationErrors(validate) { - var _a, _b; - return ((_b = (_a = validate === null || validate === void 0 ? void 0 : validate.errors) === null || _a === void 0 ? void 0 : _a.map(function (error) { return [error.dataPath, error.message].filter(Boolean).join(' '); }).join('; ')) !== null && _b !== void 0 ? _b : 'unknown error'); -} -/** - * Validates a token list. - * @param json the TokenList to validate - */ -function validateTokenList(json) { - return __awaiter(this, void 0, void 0, function () { - var validate; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, validator]; - case 1: - validate = (_a.sent()).getSchema(ValidationSchema.LIST); - if (validate === null || validate === void 0 ? void 0 : validate(json)) { - return [2 /*return*/, json]; - } - throw new Error("Token list failed validation: " + getValidationErrors(validate)); - } - }); - }); -} - -var listCache = new Map(); -/** Fetches and validates a token list. */ -function fetchTokenList$1(listUrl, resolveENSContentHash) { - var _a; - return __awaiter(this, void 0, void 0, function () { - var cached, urls, parsedENS, contentHashUri, error_1, message, translatedUri, message, i, url, isLast, response, error_2, message, message, json, list; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - cached = listCache === null || listCache === void 0 ? void 0 : listCache.get(listUrl) // avoid spurious re-fetches - ; - if (cached) { - return [2 /*return*/, cached]; - } - parsedENS = parseENSAddress(listUrl); - if (!parsedENS) return [3 /*break*/, 5]; - contentHashUri = void 0; - _b.label = 1; - case 1: - _b.trys.push([1, 3, , 4]); - return [4 /*yield*/, resolveENSContentHash(parsedENS.ensName)]; - case 2: - contentHashUri = _b.sent(); - return [3 /*break*/, 4]; - case 3: - error_1 = _b.sent(); - message = "failed to resolve ENS name: " + parsedENS.ensName; - console.debug(message, error_1); - throw new Error(message); - case 4: - translatedUri = void 0; - try { - translatedUri = contenthashToUri(contentHashUri); - } - catch (error) { - message = "failed to translate contenthash to URI: " + contentHashUri; - console.debug(message, error); - throw new Error(message); - } - urls = uriToHttp("" + translatedUri + ((_a = parsedENS.ensPath) !== null && _a !== void 0 ? _a : '')); - return [3 /*break*/, 6]; - case 5: - urls = uriToHttp(listUrl); - _b.label = 6; - case 6: - i = 0; - _b.label = 7; - case 7: - if (!(i < urls.length)) return [3 /*break*/, 15]; - url = urls[i]; - isLast = i === urls.length - 1; - response = void 0; - _b.label = 8; - case 8: - _b.trys.push([8, 10, , 11]); - return [4 /*yield*/, fetch(url, { credentials: 'omit' })]; - case 9: - response = _b.sent(); - return [3 /*break*/, 11]; - case 10: - error_2 = _b.sent(); - message = "failed to fetch list: " + listUrl; - console.debug(message, error_2); - if (isLast) - throw new Error(message); - return [3 /*break*/, 14]; - case 11: - if (!response.ok) { - message = "failed to fetch list: " + listUrl; - console.debug(message, response.statusText); - if (isLast) - throw new Error(message); - return [3 /*break*/, 14]; - } - return [4 /*yield*/, response.json()]; - case 12: - json = _b.sent(); - return [4 /*yield*/, validateTokenList(json)]; - case 13: - list = _b.sent(); - listCache === null || listCache === void 0 ? void 0 : listCache.set(listUrl, list); - return [2 /*return*/, list]; - case 14: - i++; - return [3 /*break*/, 7]; - case 15: throw new Error('Unrecognized list URL protocol.'); - } - }); - }); -} - -/** - * Returns a map of the given addresses to their eventually consistent ETH balances. - */ -function useNativeCurrencyBalances(uncheckedAddresses) { - var chainId = useActiveWeb3React().chainId; - var multicallContract = useInterfaceMulticall(); - var validAddressInputs = useMemo(function () { - return uncheckedAddresses - ? uncheckedAddresses - .map(isAddress) - .filter(function (a) { return a !== false; }) - .sort() - .map(function (addr) { return [addr]; }) - : []; - }, [uncheckedAddresses]); - var results = useSingleContractMultipleData(multicallContract, 'getEthBalance', validAddressInputs); - return useMemo(function () { - return validAddressInputs.reduce(function (memo, _a, i) { - var _b, _c; - var _d = __read(_a, 1), address = _d[0]; - var value = (_c = (_b = results === null || results === void 0 ? void 0 : results[i]) === null || _b === void 0 ? void 0 : _b.result) === null || _c === void 0 ? void 0 : _c[0]; - if (value && chainId) - memo[address] = CurrencyAmount.fromRawAmount(nativeOnChain(chainId), JSBI.BigInt(value.toString())); - return memo; - }, {}); - }, [validAddressInputs, chainId, results]); -} -var ERC20Interface = new Interface(ERC20ABI); -var tokenBalancesGasRequirement = { gasRequired: 125000 }; -/** - * Returns a map of token addresses to their eventually consistent token balances for a single account. - */ -function useTokenBalancesWithLoadingIndicator(address, tokens) { - var validatedTokens = useMemo(function () { var _a; return (_a = tokens === null || tokens === void 0 ? void 0 : tokens.filter(function (t) { return isAddress(t === null || t === void 0 ? void 0 : t.address) !== false; })) !== null && _a !== void 0 ? _a : []; }, [tokens]); - var validatedTokenAddresses = useMemo(function () { return validatedTokens.map(function (vt) { return vt.address; }); }, [validatedTokens]); - var balances = useMultipleContractSingleData(validatedTokenAddresses, ERC20Interface, 'balanceOf', useMemo(function () { return [address]; }, [address]), tokenBalancesGasRequirement); - var anyLoading = useMemo(function () { return balances.some(function (callState) { return callState.loading; }); }, [balances]); - return useMemo(function () { return [ - address && validatedTokens.length > 0 - ? validatedTokens.reduce(function (memo, token, i) { - var _a, _b; - var value = (_b = (_a = balances === null || balances === void 0 ? void 0 : balances[i]) === null || _a === void 0 ? void 0 : _a.result) === null || _b === void 0 ? void 0 : _b[0]; - var amount = value ? JSBI.BigInt(value.toString()) : undefined; - if (amount) { - memo[token.address] = CurrencyAmount.fromRawAmount(token, amount); - } - return memo; - }, {}) - : {}, - anyLoading, - ]; }, [address, validatedTokens, anyLoading, balances]); -} -function useTokenBalances(address, tokens) { - return useTokenBalancesWithLoadingIndicator(address, tokens)[0]; -} -// get the balance for a single token/account combo -function useTokenBalance(account, token) { - var tokenBalances = useTokenBalances(account, useMemo(function () { return [token]; }, [token])); - if (!token) - return undefined; - return tokenBalances[token.address]; -} -function useCurrencyBalances(account, currencies) { - var tokens = useMemo(function () { var _a; return (_a = currencies === null || currencies === void 0 ? void 0 : currencies.filter(function (currency) { var _a; return (_a = currency === null || currency === void 0 ? void 0 : currency.isToken) !== null && _a !== void 0 ? _a : false; })) !== null && _a !== void 0 ? _a : []; }, [currencies]); - var tokenBalances = useTokenBalances(account, tokens); - var containsETH = useMemo(function () { var _a; return (_a = currencies === null || currencies === void 0 ? void 0 : currencies.some(function (currency) { return currency === null || currency === void 0 ? void 0 : currency.isNative; })) !== null && _a !== void 0 ? _a : false; }, [currencies]); - var ethBalance = useNativeCurrencyBalances(useMemo(function () { return (containsETH ? [account] : []); }, [containsETH, account])); - return useMemo(function () { - var _a; - return (_a = currencies === null || currencies === void 0 ? void 0 : currencies.map(function (currency) { - if (!account || !currency) - return undefined; - if (currency.isToken) - return tokenBalances[currency.address]; - if (currency.isNative) - return ethBalance[account]; - return undefined; - })) !== null && _a !== void 0 ? _a : []; - }, [account, currencies, ethBalance, tokenBalances]); -} -function useCurrencyBalance(account, currency) { - return useCurrencyBalances(account, useMemo(function () { return [currency]; }, [currency]))[0]; -} - -var alwaysTrue = function () { return true; }; -/** Creates a filter function that filters tokens that do not match the query. */ -function getTokenFilter(query) { - var searchingAddress = isAddress(query); - if (searchingAddress) { - var address_1 = searchingAddress.toLowerCase(); - return function (t) { return 'address' in t && address_1 === t.address.toLowerCase(); }; - } - var queryParts = query - .toLowerCase() - .split(/\s+/) - .filter(function (s) { return s.length > 0; }); - if (queryParts.length === 0) - return alwaysTrue; - var match = function (s) { - var parts = s - .toLowerCase() - .split(/\s+/) - .filter(function (s) { return s.length > 0; }); - return queryParts.every(function (p) { return p.length === 0 || parts.some(function (sp) { return sp.startsWith(p) || sp.endsWith(p); }); }); - }; - return function (_a) { - var name = _a.name, symbol = _a.symbol; - return Boolean((symbol && match(symbol)) || (name && match(name))); - }; -} - -/** Sorts currency amounts (descending). */ -function balanceComparator(a, b) { - if (a && b) { - return a.greaterThan(b) ? -1 : a.equalTo(b) ? 0 : 1; - } - else if (a === null || a === void 0 ? void 0 : a.greaterThan('0')) { - return -1; - } - else if (b === null || b === void 0 ? void 0 : b.greaterThan('0')) { - return 1; - } - return 0; -} -/** Sorts tokens by currency amount (descending), then symbol (ascending). */ -function tokenComparator(balances, a, b) { - // Sorts by balances - var balanceComparison = balanceComparator(balances[a.address], balances[b.address]); - if (balanceComparison !== 0) - return balanceComparison; - // Sorts by symbol - if (a.symbol && b.symbol) { - return a.symbol.toLowerCase() < b.symbol.toLowerCase() ? -1 : 1; - } - return -1; -} -/** Sorts tokens by query, giving precedence to exact matches and partial matches. */ -function useSortTokensByQuery(query, tokens) { - return useMemo(function () { - if (!tokens) { - return []; - } - var matches = query - .toLowerCase() - .split(/\s+/) - .filter(function (s) { return s.length > 0; }); - if (matches.length > 1) { - return tokens; - } - var exactMatches = []; - var symbolSubtrings = []; - var rest = []; - // sort tokens by exact match -> subtring on symbol match -> rest - tokens.map(function (token) { - var _a, _b; - if (((_a = token.symbol) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === matches[0]) { - return exactMatches.push(token); - } - else if ((_b = token.symbol) === null || _b === void 0 ? void 0 : _b.toLowerCase().startsWith(query.toLowerCase().trim())) { - return symbolSubtrings.push(token); - } - else { - return rest.push(token); - } - }); - return __spreadArray(__spreadArray(__spreadArray([], __read(exactMatches), false), __read(symbolSubtrings), false), __read(rest), false); - }, [tokens, query]); -} - -/** - * Token instances created from token info on a token list. - */ -var WrappedTokenInfo = /** @class */ (function () { - function WrappedTokenInfo(tokenInfo, list) { - this.isNative = false; - this.isToken = true; - this._checksummedAddress = null; - this._tags = null; - this.tokenInfo = tokenInfo; - this.list = list; - } - Object.defineProperty(WrappedTokenInfo.prototype, "address", { - get: function () { - if (this._checksummedAddress) - return this._checksummedAddress; - var checksummedAddress = isAddress(this.tokenInfo.address); - if (!checksummedAddress) - throw new Error("Invalid token address: " + this.tokenInfo.address); - return (this._checksummedAddress = checksummedAddress); - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(WrappedTokenInfo.prototype, "chainId", { - get: function () { - return this.tokenInfo.chainId; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(WrappedTokenInfo.prototype, "decimals", { - get: function () { - return this.tokenInfo.decimals; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(WrappedTokenInfo.prototype, "name", { - get: function () { - return this.tokenInfo.name; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(WrappedTokenInfo.prototype, "symbol", { - get: function () { - return this.tokenInfo.symbol; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(WrappedTokenInfo.prototype, "logoURI", { - get: function () { - return this.tokenInfo.logoURI; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(WrappedTokenInfo.prototype, "tags", { - get: function () { - var _a; - if (this._tags !== null) - return this._tags; - if (!this.tokenInfo.tags) - return (this._tags = []); - var listTags = (_a = this.list) === null || _a === void 0 ? void 0 : _a.tags; - if (!listTags) - return (this._tags = []); - return (this._tags = this.tokenInfo.tags.map(function (tagId) { - return __assign(__assign({}, listTags[tagId]), { id: tagId }); - })); - }, - enumerable: false, - configurable: true - }); - WrappedTokenInfo.prototype.equals = function (other) { - return other.chainId === this.chainId && other.isToken && other.address.toLowerCase() === this.address.toLowerCase(); - }; - WrappedTokenInfo.prototype.sortsBefore = function (other) { - if (this.equals(other)) - throw new Error('Addresses should not be equal'); - return this.address.toLowerCase() < other.address.toLowerCase(); - }; - Object.defineProperty(WrappedTokenInfo.prototype, "wrapped", { - get: function () { - return this; - }, - enumerable: false, - configurable: true - }); - return WrappedTokenInfo; -}()); - -var mapCache = typeof WeakMap !== 'undefined' ? new WeakMap() : null; -function tokensToChainTokenMap(tokens) { - var cached = mapCache === null || mapCache === void 0 ? void 0 : mapCache.get(tokens); - if (cached) - return cached; - var _a = __read(Array.isArray(tokens) ? [undefined, tokens] : [tokens, tokens.tokens], 2), list = _a[0], infos = _a[1]; - var map = infos.reduce(function (map, info) { - var _a; - var token = new WrappedTokenInfo(info, list); - if (((_a = map[token.chainId]) === null || _a === void 0 ? void 0 : _a[token.address]) !== undefined) { - console.warn("Duplicate token skipped: " + token.address); - return map; - } - if (!map[token.chainId]) { - map[token.chainId] = {}; - } - map[token.chainId][token.address] = { token: token, list: list }; - return map; - }, {}); - mapCache === null || mapCache === void 0 ? void 0 : mapCache.set(tokens, map); - return map; -} - -atom({}); - -// parse a name or symbol from a token response -var BYTES32_REGEX = /^0x[a-fA-F0-9]{64}$/; -function parseStringOrBytes32(str, bytes32, defaultValue) { - return str && str.length > 0 - ? str - : // need to check for proper bytes string and valid terminator - bytes32 && BYTES32_REGEX.test(bytes32) && arrayify(bytes32)[31] === 0 - ? parseBytes32String(bytes32) - : defaultValue; -} -/** - * Returns a Token from the tokenAddress. - * Returns null if token is loading or null was passed. - * Returns undefined if tokenAddress is invalid or token does not exist. - */ -function useTokenFromMap(tokens, tokenAddress) { - var chainId = useActiveWeb3React().chainId; - var address = isAddress(tokenAddress); - var tokenContract = useTokenContract(address ? address : undefined, false); - var tokenContractBytes32 = useBytes32TokenContract(address ? address : undefined, false); - var token = address ? tokens[address] : undefined; - var tokenName = useSingleCallResult(token ? undefined : tokenContract, 'name', undefined, NEVER_RELOAD); - var tokenNameBytes32 = useSingleCallResult(token ? undefined : tokenContractBytes32, 'name', undefined, NEVER_RELOAD); - var symbol = useSingleCallResult(token ? undefined : tokenContract, 'symbol', undefined, NEVER_RELOAD); - var symbolBytes32 = useSingleCallResult(token ? undefined : tokenContractBytes32, 'symbol', undefined, NEVER_RELOAD); - var decimals = useSingleCallResult(token ? undefined : tokenContract, 'decimals', undefined, NEVER_RELOAD); - return useMemo(function () { - var _a, _b, _c, _d; - if (token) - return token; - if (tokenAddress === null) - return null; - if (!chainId || !address) - return undefined; - if (decimals.loading || symbol.loading || tokenName.loading) - return null; - if (decimals.result) { - return new Token(chainId, address, decimals.result[0], parseStringOrBytes32((_a = symbol.result) === null || _a === void 0 ? void 0 : _a[0], (_b = symbolBytes32.result) === null || _b === void 0 ? void 0 : _b[0], 'UNKNOWN'), parseStringOrBytes32((_c = tokenName.result) === null || _c === void 0 ? void 0 : _c[0], (_d = tokenNameBytes32.result) === null || _d === void 0 ? void 0 : _d[0], 'Unknown Token')); - } - return undefined; - }, [ - address, - chainId, - decimals.loading, - decimals.result, - symbol.loading, - symbol.result, - symbolBytes32.result, - token, - tokenAddress, - tokenName.loading, - tokenName.result, - tokenNameBytes32.result, - ]); -} -/** - * Returns a Currency from the currencyId. - * Returns null if currency is loading or null was passed. - * Returns undefined if currencyId is invalid or token does not exist. - */ -function useCurrencyFromMap(tokens, currencyId) { - var _a; - var nativeCurrency = useNativeCurrency(); - var isNative = Boolean(nativeCurrency && (currencyId === null || currencyId === void 0 ? void 0 : currencyId.toUpperCase()) === 'ETH'); - var token = useTokenFromMap(tokens, isNative ? undefined : currencyId); - if (currencyId === null || currencyId === undefined) - return currencyId; - // this case so we use our builtin wrapped token instead of wrapped tokens on token lists - var wrappedNative = nativeCurrency === null || nativeCurrency === void 0 ? void 0 : nativeCurrency.wrapped; - if (((_a = wrappedNative === null || wrappedNative === void 0 ? void 0 : wrappedNative.address) === null || _a === void 0 ? void 0 : _a.toUpperCase()) === (currencyId === null || currencyId === void 0 ? void 0 : currencyId.toUpperCase())) - return wrappedNative; - return isNative ? nativeCurrency : token; -} - -var DEFAULT_LIST_PRIORITIES = DEFAULT_LIST_OF_LISTS.reduce(function (memo, listUrl, index) { - memo[listUrl] = index + 1; - return memo; -}, {}); -// use ordering of default list of lists to assign priority -function sortByListPriority(urlA, urlB) { - if (DEFAULT_LIST_PRIORITIES[urlA] && DEFAULT_LIST_PRIORITIES[urlB]) { - return DEFAULT_LIST_PRIORITIES[urlA] - DEFAULT_LIST_PRIORITIES[urlB]; - } - return 0; -} - -var name$1 = "Broken Token List"; -var timestamp$1 = "2021-01-05T20:47:02.923Z"; -var version$1 = { - major: 1, - minor: 0, - patch: 0 -}; -var tags$1 = { -}; -var logoURI$1 = "ipfs://QmNa8mQkrNKp1WEEeGjFezDmDeodkWRevGFN8JCV7b4Xir"; -var keywords$1 = [ - "uniswap", - "broken" -]; -var tokens$1 = [ - { - name: "UNI HODL", - address: "0x4bf5dc91E2555449293D7824028Eb8Fe5879B689", - symbol: "UniH", - decimals: 18, - chainId: 1, - logoURI: "" - } -]; -var BROKEN_LIST = { - name: name$1, - timestamp: timestamp$1, - version: version$1, - tags: tags$1, - logoURI: logoURI$1, - keywords: keywords$1, - tokens: tokens$1 -}; - -var name = "Unsupported Tokens"; -var timestamp = "2021-01-05T20:47:02.923Z"; -var version = { - major: 1, - minor: 0, - patch: 0 -}; -var tags = { -}; -var logoURI = "ipfs://QmNa8mQkrNKp1WEEeGjFezDmDeodkWRevGFN8JCV7b4Xir"; -var keywords = [ - "uniswap", - "unsupported" -]; -var tokens = [ - { - name: "Gold Tether", - address: "0x4922a015c4407F87432B179bb209e125432E4a2A", - symbol: "XAUt", - decimals: 6, - chainId: 1, - logoURI: "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4922a015c4407F87432B179bb209e125432E4a2A/logo.png" - }, - { - name: "Grump Cat", - address: "0x93B2FfF814FCaEFFB01406e80B4Ecd89Ca6A021b", - symbol: "GRUMPY", - decimals: 9, - chainId: 1, - logoURI: "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4922a015c4407F87432B179bb209e125432E4a2A/logo.png" - }, - { - name: "apeUSD-UMA Synthetic USD (Dec 2021)", - address: "0xfA5e27893aee4805283D86e4283Da64F8c72dd56", - symbol: "apeUSD-UMA-DEC21", - decimals: 18, - chainId: 1, - logoURI: "" - }, - { - chainId: 1, - address: "0xc6b11850241c5127eab73af4b6c68bc267cbbff4", - name: "oWETHp Put 360 DEC2520", - symbol: "oWETH-360P-12/25/20", - decimals: 7 - }, - { - chainId: 1, - name: "oYFIp Put 25000 OCT0220", - address: "0x452b421be5b30f0c6ad8c3f03c06bdaab4f5c56c", - symbol: "oYFI-25000P-10/02/20", - decimals: 7 - }, - { - chainId: 1, - name: "oWETHp Put 360 OCT3020", - address: "0x0578779e746d7186253a36cf651ea786acfcf087", - symbol: "oWETH-360P-10/30/20", - decimals: 7 - }, - { - chainId: 1, - name: "ETHc Call 500 OCT3020", - address: "0xf9aba2e43fb19184408ea3b572a0fd672946f87b", - symbol: "oETH-500C-10/30/20", - decimals: 6 - }, - { - chainId: 1, - name: "oBALp Put 22 OCT0220", - address: "0xdb0991dfc7e828b5a2837dc82d68e16490562c8d", - symbol: "oBAL-22P-10/02/20", - decimals: 7 - }, - { - chainId: 1, - name: "oCOMPp Put 150 SEP2520", - address: "0xe951ebe6b4420ab3f4844cf36dedd263d095b416", - symbol: "oCOMP-150P-09/25/20", - decimals: 7 - }, - { - chainId: 1, - name: "oCRVp Put 3 SEP252020", - address: "0x9215bd49b59748419eac6bad9dbe247df06ebdb9", - symbol: "oCRV-3P-09/25/20", - decimals: 7 - }, - { - chainId: 1, - name: "oETHp Put 180 SEP2520", - address: "0xE3A2c34Fa2F59ffa95C4ACd1E5663633d45Bc3AD", - symbol: "oETH-180P-09/25/20", - decimals: 7 - }, - { - chainId: 1, - name: "oETHc Call 400 SEP2520", - address: "0x05977EBC26825C0CD6097E0Ad7204721516711Eb", - symbol: "oETH-400C-09/25/20", - decimals: 7 - }, - { - chainId: 1, - name: "oWETHp Put 380 SEP1820", - address: "0x31f88266301b08631f9f0e33fd5c43c2a5d1e5b2", - symbol: "oWETH-380P-09/18/20", - decimals: 7 - }, - { - chainId: 1, - name: "oYFIp Put 8500 SEP1820", - address: "0xd1cec2f67fdc4c60e0963515dfc3343f31e32e47", - symbol: "oYFI-8500P-09/18/20", - decimals: 7 - }, - { - chainId: 1, - name: "oWETHp Put 370 SEP1120", - address: "0x15844029b2c2bf24506e9937739a9a912f1e4354", - symbol: "oWETH-370P-09/11/20", - decimals: 7 - }, - { - chainId: 1, - name: "oWETHp Put 400 SEP0420", - address: "0x5562c33c383f6386be4f6dcdbd35a3a99bbcfde6", - symbol: "oWETH-400P-09/04/20", - decimals: 7 - }, - { - chainId: 1, - name: "oETHp Put 200 AUG2820", - address: "0x3CBFC1397deF0602c2d211c70A1c0c38CEDB5448", - symbol: "oWETH-400P-09/04/20", - decimals: 7 - }, - { - chainId: 1, - name: "Opyn cDai Insurance", - symbol: "ocDai", - address: "0x98cc3bd6af1880fcfda17ac477b2f612980e5e33", - decimals: 8 - }, - { - chainId: 1, - name: "Opyn cUSDC Insurance", - symbol: "ocUSDC", - address: "0x8ED9f862363fFdFD3a07546e618214b6D59F03d4", - decimals: 8 - }, - { - chainId: 1, - address: "0x176C674Ee533C6139B0dc8b458D72A93dCB3e705", - symbol: "iAAVE", - name: "Synth Inverse Aave", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iAAVE.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x8A8079c7149B8A1611e5C5d978DCA3bE16545F83", - symbol: "iADA", - name: "Synth Inverse Cardano", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iADA.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0xAFD870F32CE54EfdBF677466B612bf8ad164454B", - symbol: "iBNB", - name: "Synth Inverse Binance Coin", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iBNB.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0xD6014EA05BDe904448B743833dDF07c3C7837481", - symbol: "iBTC", - name: "Synth Inverse Bitcoin", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iBTC.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x336213e1DDFC69f4701Fc3F86F4ef4A160c1159d", - symbol: "iCEX", - name: "Synth Inverse Centralised Exchange Index", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iCEX.svg", - tags: [ - "index", - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x6345728B1ccE16E6f8C509950b5c84FFF88530d9", - symbol: "iCOMP", - name: "Synth Inverse Compound", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iCOMP.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0xCB98f42221b2C251A4E74A1609722eE09f0cc08E", - symbol: "iDASH", - name: "Synth Inverse Dash", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDASH.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x14d10003807AC60d07BB0ba82cAeaC8d2087c157", - symbol: "iDEFI", - name: "Synth Inverse DeFi Index", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDEFI.svg", - tags: [ - "index", - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x46a97629C9C1F58De6EC18C7F536e7E6d6A6ecDe", - symbol: "iDOT", - name: "Synth Inverse Polkadot", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDOT.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0xF4EebDD0704021eF2a6Bbe993fdf93030Cd784b4", - symbol: "iEOS", - name: "Synth Inverse EOS", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iEOS.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0xd50c1746D835d2770dDA3703B69187bFfeB14126", - symbol: "iETC", - name: "Synth Inverse Ethereum Classic", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iETC.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0xA9859874e1743A32409f75bB11549892138BBA1E", - symbol: "iETH", - name: "Synth Inverse Ether", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iETH.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x2d7aC061fc3db53c39fe1607fB8cec1B2C162B01", - symbol: "iLINK", - name: "Synth Inverse Chainlink", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iLINK.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x79da1431150C9b82D2E5dfc1C68B33216846851e", - symbol: "iLTC", - name: "Synth Inverse Litecoin", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iLTC.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0xA5a5DF41883Cdc00c4cCC6E8097130535399d9a3", - symbol: "iOIL", - name: "Synth Inverse Perpetual Oil Futures", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iOIL.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x0fEd38108bdb8e62ef7b5680E8E0726E2F29e0De", - symbol: "iREN", - name: "Synth Inverse Ren", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iREN.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0xC5807183a9661A533CB08CbC297594a0B864dc12", - symbol: "iTRX", - name: "Synth Inverse TRON", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iTRX.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x36A00FF9072570eF4B9292117850B8FE08d96cce", - symbol: "iUNI", - name: "Synth Inverse Uniswap", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iUNI.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x4AdF728E2Df4945082cDD6053869f51278fae196", - symbol: "iXMR", - name: "Synth Inverse Monero", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXMR.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x27269b3e45A4D3E79A3D6BFeE0C8fB13d0D711A6", - symbol: "iXRP", - name: "Synth Inverse Ripple", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXRP.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x8deef89058090ac5655A99EEB451a4f9183D1678", - symbol: "iXTZ", - name: "Synth Inverse Tezos", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXTZ.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0x592244301CeA952d6daB2fdC1fE6bd9E53917306", - symbol: "iYFI", - name: "Synth Inverse yearn.finance", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iYFI.svg", - tags: [ - "inverse", - "synth" - ] - }, - { - chainId: 1, - address: "0xcD39b5434a0A92cf47D1F567a7dF84bE356814F0", - symbol: "s1INCH", - name: "Synth 1inch", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/s1INCH.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x7537AAe01f3B218DAE75e10d952473823F961B87", - symbol: "sAAPL", - name: "Synth Apple", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAAPL.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xd2dF355C19471c8bd7D8A3aa27Ff4e26A21b4076", - symbol: "sAAVE", - name: "Synth Aave", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAAVE.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xe36E2D3c7c34281FA3bC737950a68571736880A1", - symbol: "sADA", - name: "Synth Cardano", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sADA.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x9CF7E61853ea30A41b02169391b393B901eac457", - symbol: "sAMZN", - name: "Synth Amazon", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAMZN.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xF48e200EAF9906362BB1442fca31e0835773b8B4", - symbol: "sAUD", - name: "Synth Australian Dollars", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAUD.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x617aeCB6137B5108D1E7D4918e3725C8cEbdB848", - symbol: "sBNB", - name: "Synth Binance Coin", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sBNB.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xfE18be6b3Bd88A2D2A7f928d00292E7a9963CfC6", - symbol: "sBTC", - name: "Synth Bitcoin", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sBTC.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xeABACD844A196D7Faf3CE596edeBF9900341B420", - symbol: "sCEX", - name: "Synth Centralised Exchange Index", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCEX.svg", - tags: [ - "index", - "synth" - ] - }, - { - chainId: 1, - address: "0x0F83287FF768D1c1e17a42F44d644D7F22e8ee1d", - symbol: "sCHF", - name: "Synth Swiss Franc", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCHF.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x9EeF4CA7aB9fa8bc0650127341C2d3F707a40f8A", - symbol: "sCOIN", - name: "Synth Coinbase", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCOIN.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xEb029507d3e043DD6C87F2917C4E82B902c35618", - symbol: "sCOMP", - name: "Synth Compound", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCOMP.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xD38aEb759891882e78E957c80656572503D8c1B1", - symbol: "sCRV", - name: "Synth Curve DAO Token", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCRV.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xfE33ae95A9f0DA8A845aF33516EDc240DCD711d6", - symbol: "sDASH", - name: "Synth Dash", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDASH.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xe1aFe1Fd76Fd88f78cBf599ea1846231B8bA3B6B", - symbol: "sDEFI", - name: "Synth DeFi Index", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDEFI.svg", - tags: [ - "index", - "synth" - ] - }, - { - chainId: 1, - address: "0x1715AC0743102BF5Cd58EfBB6Cf2dC2685d967b6", - symbol: "sDOT", - name: "Synth Polkadot", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDOT.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x88C8Cf3A212c0369698D13FE98Fcb76620389841", - symbol: "sEOS", - name: "Synth EOS", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sEOS.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x22602469d704BfFb0936c7A7cfcD18f7aA269375", - symbol: "sETC", - name: "Synth Ethereum Classic", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sETC.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x5e74C9036fb86BD7eCdcb084a0673EFc32eA31cb", - symbol: "sETH", - name: "Synth Ether", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sETH.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xD71eCFF9342A5Ced620049e616c5035F1dB98620", - symbol: "sEUR", - name: "Synth Euros", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sEUR.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xf50B5e535F62a56A9BD2d8e2434204E726c027Fa", - symbol: "sFB", - name: "Synth Facebook", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sFB.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x23348160D7f5aca21195dF2b70f28Fce2B0be9fC", - symbol: "sFTSE", - name: "Synth FTSE 100 Index", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sFTSE.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x97fe22E7341a0Cd8Db6F6C021A24Dc8f4DAD855F", - symbol: "sGBP", - name: "Synth Pound Sterling", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sGBP.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xC63B8ECCE56aB9C46184eC6aB85e4771fEa4c8AD", - symbol: "sGOOG", - name: "Synth Alphabet", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sGOOG.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xF6b1C627e95BFc3c1b4c9B825a032Ff0fBf3e07d", - symbol: "sJPY", - name: "Synth Japanese Yen", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sJPY.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x269895a3dF4D73b077Fc823dD6dA1B95f72Aaf9B", - symbol: "sKRW", - name: "Synth South Korean Won", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sKRW.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xbBC455cb4F1B9e4bFC4B73970d360c8f032EfEE6", - symbol: "sLINK", - name: "Synth Chainlink", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sLINK.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xC14103C2141E842e228FBaC594579e798616ce7A", - symbol: "sLTC", - name: "Synth Litecoin", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sLTC.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x745a824D6aBBD236AA794b5530062778A6Ad7523", - symbol: "sMSFT", - name: "Synth Microsoft", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sMSFT.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x5A7E3c07604EB515C16b36cd51906a65f021F609", - symbol: "sNFLX", - name: "Synth Netflix", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sNFLX.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x757de3ac6B830a931eF178C6634c5C551773155c", - symbol: "sNIKKEI", - name: "Synth Nikkei 225 Index", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sNIKKEI.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x6d16cF3EC5F763d4d99cB0B0b110eefD93B11B56", - symbol: "sOIL", - name: "Synth Perpetual Oil Futures", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sOIL.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xD31533E8d0f3DF62060e94B3F1318137bB6E3525", - symbol: "sREN", - name: "Synth Ren", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sREN.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x0352557B007A4Aae1511C114409b932F06F9E2f4", - symbol: "sRUNE", - name: "Synth THORChain", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sRUNE.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xf2E08356588EC5cd9E437552Da87C0076b4970B0", - symbol: "sTRX", - name: "Synth TRON", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sTRX.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x918dA91Ccbc32B7a6A0cc4eCd5987bbab6E31e6D", - symbol: "sTSLA", - name: "Synth Tesla", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sTSLA.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x30635297E450b930f8693297eBa160D9e6c8eBcf", - symbol: "sUNI", - name: "Synth Uniswap", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sUNI.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x6A22e5e94388464181578Aa7A6B869e00fE27846", - symbol: "sXAG", - name: "Synth Silver Ounce", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXAG.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x261EfCdD24CeA98652B9700800a13DfBca4103fF", - symbol: "sXAU", - name: "Synth Gold Ounce", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXAU.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x5299d6F7472DCc137D7f3C4BcfBBB514BaBF341A", - symbol: "sXMR", - name: "Synth Monero", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXMR.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0xa2B0fDe6D710e201d0d608e924A484d1A5fEd57c", - symbol: "sXRP", - name: "Synth Ripple", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXRP.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x2e59005c5c0f0a4D77CcA82653d48b46322EE5Cd", - symbol: "sXTZ", - name: "Synth Tezos", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXTZ.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x992058B7DB08F9734d84485bfbC243C4ee6954A7", - symbol: "sYFI", - name: "Synth yearn.finance", - decimals: 18, - logoURI: "https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sYFI.svg", - tags: [ - "synth" - ] - }, - { - chainId: 1, - address: "0x81ab848898b5ffD3354dbbEfb333D5D183eEDcB5", - name: "yUSD Synthetic Expiring 1 September 2020", - symbol: "yUSDSEP20", - decimals: 18 - }, - { - chainId: 1, - address: "0xB2FdD60AD80ca7bA89B9BAb3b5336c2601C020b4", - name: "yUSD Synthetic Expiring 1 October 2020", - symbol: "yUSDOCT20", - decimals: 18 - }, - { - chainId: 1, - address: "0x208d174775dc39fe18b1b374972f77ddec6c0f73", - name: "uUSDrBTC Synthetic Expiring 1 Oct 2020", - symbol: "uUSDrBTC-OCT", - decimals: 18 - }, - { - chainId: 1, - address: "0xf06ddacf71e2992e2122a1a0168c6967afdf63ce", - name: "uUSDrBTC Synthetic Expiring 31 Dec 2020", - symbol: "uUSDrBTC-DEC", - decimals: 18 - }, - { - chainId: 1, - address: "0xd16c79c8a39d44b2f3eb45d2019cd6a42b03e2a9", - name: "uUSDwETH Synthetic Expiring 31 Dec 2020", - symbol: "uUSDwETH-DEC", - decimals: 18 - }, - { - chainId: 1, - address: "0x3d995510f8d82c2ea341845932b5ddde0bead9a3", - name: "uGAS-JAN21 Token Expiring 31 Jan 2021", - symbol: "uGAS-JAN21", - decimals: 18 - }, - { - chainId: 1, - address: "0x90f802c7e8fb5d40b0de583e34c065a3bd2020d8", - name: "YD-ETH-MAR21 Token Expiring 31 Mar 2021", - symbol: "YD-ETH-MAR21", - decimals: 18 - }, - { - chainId: 1, - address: "0x002f0b1a71c5730cf2f4da1970a889207bdb6d0d", - name: "YD-BTC-MAR21 Token Expiring 31 Mar 2021", - symbol: "YD-BTC-MAR21", - decimals: 18 - }, - { - chainId: 1, - address: "0x1062ad0e59fa67fa0b27369113098cc941dd0d5f", - name: "UMA 35 Call Expirying 30 Apr 2021", - symbol: "UMAc35-0421", - decimals: 18 - }, - { - chainId: 1, - address: "0xf93340b1a3adf7eedcaec25fae8171d4b736e89f", - name: "pxUSD Synthetic USD Expiring 1 April 2021", - symbol: "pxUSD_MAR2021", - decimals: 18 - }, - { - chainId: 1, - address: "0x84bd083b1c8bf929f39c98bc17cf518f40154f58", - name: "Mario Cash Synthetic Token Expiring 15 January 2021", - symbol: "Mario Cash-JAN-2021", - decimals: 18 - }, - { - chainId: 1, - address: "0x81fab276aec924fbde190cf379783526d413cf70", - name: "uGAS-FEB21 Token Expiring 28 Feb 2021", - symbol: "uGAS-FEB21", - decimals: 18 - }, - { - chainId: 1, - address: "0x4e110603e70b0b5f1c403ee543b37e1f1244cf28", - name: "uGAS-MAR21 Token Expiring 31 Mar 2021", - symbol: "uGAS-MAR21", - decimals: 18 - }, - { - chainId: 1, - address: "0xcf55a7f92d5e0c6683debbc1fc20c0a6e056df13", - name: "Zelda Elastic Cash", - symbol: "Zelda Elastic Cash", - decimals: 18 - }, - { - chainId: 1, - address: "0x654eebac62240e6c56bab5f6adf7cfa74a894510", - name: "Zelda Spring Nuts Cash", - symbol: "Zelda Spring Nuts Cash", - decimals: 18 - }, - { - chainId: 1, - address: "0xa48920cc1ad85d8ea13af5d7be180c0338c306dd", - name: "Zelda Summer Nuts Cash", - symbol: "Zelda Summer Nuts Cash", - decimals: 18 - }, - { - chainId: 1, - address: "0x249a198d59b57fda5dda90630febc86fd8c7594c", - name: "Zelda Whirlwind Cash", - symbol: "Zelda Whirlwind Cash", - decimals: 18 - }, - { - chainId: 1, - address: "0x5ed1406873c9eb91f6f9a67ac4e152387c1132e7", - name: "Zelda Reinforced Cash", - symbol: "Zelda Reinforced Cash", - decimals: 18 - }, - { - chainId: 1, - address: "0x8104c9f13118320eefe5fbea8a44d600b85981ef", - name: "Mini Mario Summer Cash", - symbol: "Mini Mario Summer Cash", - decimals: 18 - }, - { - chainId: 1, - address: "0x69746c719e59674b147df25f50e7cfa0673cb625", - name: "Mini Mario Spring Cash", - symbol: "Mini Mario Spring Cash", - decimals: 18 - }, - { - chainId: 1, - address: "0x6b1257641d18791141f025eab36fb567c4b564ff", - name: "Bitcoin Dominance Token 31 March 2021", - symbol: "BTCDOM-MAR2021", - decimals: 18 - }, - { - chainId: 1, - address: "0x4e83b6287588a96321b2661c5e041845ff7814af", - name: "Altcoin Dominance Token 31 March 2021", - symbol: "ALTDOM-MAR2021", - decimals: 18 - }, - { - chainId: 1, - address: "0x59fec83ec709c893aedd1a144cf1828eb04127cd", - name: "pxGOLD Synthetic GOLD Expiring 31 May 2021", - symbol: "pxGOLD_MAY2021", - decimals: 18 - }, - { - chainId: 1, - address: "0x89337BFb7938804c3776C9FB921EccAf5ab76758", - name: "Compound Annualized Rate Future Expiring 28 March 2021", - symbol: "CAR-USDC-MAR21", - decimals: 18 - }, - { - chainId: 1, - address: "0xec58d3aefc9aaa2e0036fa65f70d569f49d9d1ed", - name: "uSTONKS Index Token April 2021", - symbol: "uSTONKS_APR21", - decimals: 6 - }, - { - chainId: 1, - address: "0xa6B9d7E3d76cF23549293Fb22c488E0Ea591A44e", - name: "uGAS-JUN21 Token Expiring 30 Jun 2021", - symbol: "uGAS-JUN21", - decimals: 18 - }, - { - chainId: 1, - address: "0xe813b65da6c38a04591aed3f082d32db7d53c382", - name: "Yield Dollar [WETH Dec 2021]", - symbol: "YD-ETH-DEC21", - decimals: 18 - }, - { - chainId: 1, - address: "0x4b606e9eb2228c70f44453afe5a73e1fea258ce1", - name: "pxUSD Synthetic USD Expiring 31 Mar 2022", - symbol: "pxUSD_MAR2022", - decimals: 18 - }, - { - chainId: 1, - address: "0x5247c0db4044fb6f97f32c7e1b48758019a5a912", - name: "pxGOLD Synthetic Gold Expiring 31 Mar 2022", - symbol: "pxGOLD_MAR2022", - decimals: 18 - }, - { - chainId: 1, - address: "0x56fb1acaff95c0b6ebcd17c8361a63d98b1a5a11", - name: "uForex CNYUSD Synthetic Token April 2021", - symbol: "uCNYUSD-APR", - decimals: 6 - }, - { - chainId: 1, - address: "0xd49fa405dce086c65d66ca1ca41f8e98583812b4", - name: "uForex EURUSD Synthetic Token April 2021", - symbol: "uEURUSD-APR", - decimals: 6 - }, - { - chainId: 1, - address: "0x29dddacba3b231ee8d673dd0f0fa759ea145561b", - name: "DEFI_PULSE_TOTAL_TVL Synthetic Token Expiring 15 April 2021", - symbol: "TVL_ALL_APRIL15", - decimals: 6 - }, - { - chainId: 1, - address: "0xcbe430927370e95b4b10cfc702c6017ec7abefc3", - name: "Yield Dollar [WETH Jun 2021]", - symbol: "YD-ETH-JUN21", - decimals: 18 - }, - { - chainId: 1, - address: "0x4b7fb448df91c8ed973494f8c8c4f12daf3a8521", - name: "Yield Dollar [renBTC Jun 2021]", - symbol: "YD-BTC-JUN21", - decimals: 8 - }, - { - chainId: 1, - address: "0x3108c33b6fb38efedaefd8b5f7ca01d5f5c7372d", - name: "Yield Dollar UMA 21", - symbol: "yUMA21", - decimals: 18 - }, - { - chainId: 1, - address: "0x0cae9e4d663793c2a2A0b211c1Cf4bBca2B9cAa7", - name: "Mirrored Amazon", - symbol: "MAMZN", - decimals: 18 - }, - { - chainId: 1, - address: "0x31c63146a635EB7465e5853020b39713AC356991", - name: "M US Oil", - symbol: "MUSO", - decimals: 18 - }, - { - chainId: 1, - address: "0x59A921Db27Dd6d4d974745B7FfC5c33932653442", - name: "M Google", - symbol: "MGOOGL", - decimals: 18 - }, - { - chainId: 1, - address: "0xf72FCd9DCF0190923Fadd44811E240Ef4533fc86", - name: "Mirrored ProShares", - symbol: "MVIXY", - decimals: 18 - }, - { - chainId: 1, - address: "0x56aA298a19C93c6801FDde870fA63EF75Cc0aF72", - name: "Mirrored Alibaba", - symbol: "MBABA", - decimals: 18 - }, - { - chainId: 1, - address: "0x0e99cC0535BB6251F6679Fa6E65d6d3b430e840B", - name: "Mirrored Facebook", - symbol: "MFB", - decimals: 18 - }, - { - chainId: 1, - address: "0x13B02c8dE71680e71F0820c996E4bE43c2F57d15", - name: "Mirrored Invesco QQ", - symbol: "MQQQ", - decimals: 18 - }, - { - chainId: 1, - address: "0x41BbEDd7286dAab5910a1f15d12CBda839852BD7", - name: "Mirrored Microsoft", - symbol: "MMSFT", - decimals: 18 - }, - { - chainId: 1, - address: "0x9d1555d8cB3C846Bb4f7D5B1B1080872c3166676", - name: "Mirrored iShares Si", - symbol: "MSLV", - decimals: 18 - }, - { - chainId: 1, - address: "0x21cA39943E91d704678F5D00b6616650F066fD63", - name: "Mirrored Tesla", - symbol: "MTSLA", - decimals: 18 - }, - { - chainId: 1, - address: "0xe82bbB62fA81d0701643d1675FB50ec52fD3Df92", - name: "DYDX Token", - symbol: "DYDX", - decimals: 18 - }, - { - chainId: 10, - address: "0xE405de8F52ba7559f9df3C368500B6E6ae6Cee49", - name: "sETH", - symbol: "Synth Ether", - decimals: 18 - }, - { - chainId: 10, - address: "0x298B9B95708152ff6968aafd889c6586e9169f1D", - name: "sBTC", - symbol: "Synth Bitcoin", - decimals: 18 - }, - { - chainId: 10, - address: "0xc5Db22719A06418028A40A9B5E9A7c02959D0d08", - name: "sLINK", - symbol: "Synth Link", - decimals: 18 - }, - { - chainId: 1, - address: "0x6B60eE11b73230045cF9095E6e43AE9Ea638e172", - name: "Shatner", - symbol: "SHAT", - decimals: 18 - }, - { - chainId: 1, - address: "0x7277a44D1325D81Ac58893002a1B40a41bea43fe", - name: "FAANG Index", - symbol: "FAANG", - decimals: 18 - }, - { - chainId: 1, - address: "0x76175599887730786bdA1545D0D7AcE8737fEBB1", - name: "ENS DAO", - symbol: "ENS", - decimals: 18 - }, - { - chainId: 1, - address: "0xa82AA729AE2F0d78e961D66db53949e27a9E866d", - name: "BMEX", - symbol: "BMEX", - decimals: 18 - } -]; -var UNSUPPORTED_TOKEN_LIST = { - name: name, - timestamp: timestamp, - version: version, - tags: tags, - logoURI: logoURI, - keywords: keywords, - tokens: tokens -}; + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + indexed: true, + internalType: 'address', + name: 'spender', + type: 'address', + }, + { + indexed: false, + internalType: 'uint256', + name: 'value', + type: 'uint256', + }, + ], + name: 'Approval', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'sender', + type: 'address', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount0', + type: 'uint256', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount1', + type: 'uint256', + }, + { + indexed: true, + internalType: 'address', + name: 'to', + type: 'address', + }, + ], + name: 'Burn', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'sender', + type: 'address', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount0', + type: 'uint256', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount1', + type: 'uint256', + }, + ], + name: 'Mint', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'sender', + type: 'address', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount0In', + type: 'uint256', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount1In', + type: 'uint256', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount0Out', + type: 'uint256', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount1Out', + type: 'uint256', + }, + { + indexed: true, + internalType: 'address', + name: 'to', + type: 'address', + }, + ], + name: 'Swap', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'uint112', + name: 'reserve0', + type: 'uint112', + }, + { + indexed: false, + internalType: 'uint112', + name: 'reserve1', + type: 'uint112', + }, + ], + name: 'Sync', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'from', + type: 'address', + }, + { + indexed: true, + internalType: 'address', + name: 'to', + type: 'address', + }, + { + indexed: false, + internalType: 'uint256', + name: 'value', + type: 'uint256', + }, + ], + name: 'Transfer', + type: 'event', + }, + { + constant: true, + inputs: [], + name: 'DOMAIN_SEPARATOR', + outputs: [ + { + internalType: 'bytes32', + name: '', + type: 'bytes32', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'MINIMUM_LIQUIDITY', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'pure', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'PERMIT_TYPEHASH', + outputs: [ + { + internalType: 'bytes32', + name: '', + type: 'bytes32', + }, + ], + payable: false, + stateMutability: 'pure', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + internalType: 'address', + name: 'spender', + type: 'address', + }, + ], + name: 'allowance', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'address', + name: 'spender', + type: 'address', + }, + { + internalType: 'uint256', + name: 'value', + type: 'uint256', + }, + ], + name: 'approve', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + ], + name: 'balanceOf', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'address', + name: 'to', + type: 'address', + }, + ], + name: 'burn', + outputs: [ + { + internalType: 'uint256', + name: 'amount0', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amount1', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'decimals', + outputs: [ + { + internalType: 'uint8', + name: '', + type: 'uint8', + }, + ], + payable: false, + stateMutability: 'pure', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'factory', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'getReserves', + outputs: [ + { + internalType: 'uint112', + name: 'reserve0', + type: 'uint112', + }, + { + internalType: 'uint112', + name: 'reserve1', + type: 'uint112', + }, + { + internalType: 'uint32', + name: 'blockTimestampLast', + type: 'uint32', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + name: 'initialize', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'kLast', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'address', + name: 'to', + type: 'address', + }, + ], + name: 'mint', + outputs: [ + { + internalType: 'uint256', + name: 'liquidity', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'name', + outputs: [ + { + internalType: 'string', + name: '', + type: 'string', + }, + ], + payable: false, + stateMutability: 'pure', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + ], + name: 'nonces', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + internalType: 'address', + name: 'spender', + type: 'address', + }, + { + internalType: 'uint256', + name: 'value', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + { + internalType: 'uint8', + name: 'v', + type: 'uint8', + }, + { + internalType: 'bytes32', + name: 'r', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 's', + type: 'bytes32', + }, + ], + name: 'permit', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'price0CumulativeLast', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'price1CumulativeLast', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'address', + name: 'to', + type: 'address', + }, + ], + name: 'skim', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'uint256', + name: 'amount0Out', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amount1Out', + type: 'uint256', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'bytes', + name: 'data', + type: 'bytes', + }, + ], + name: 'swap', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'symbol', + outputs: [ + { + internalType: 'string', + name: '', + type: 'string', + }, + ], + payable: false, + stateMutability: 'pure', + type: 'function', + }, + { + constant: false, + inputs: [], + name: 'sync', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'token0', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'token1', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'totalSupply', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'value', + type: 'uint256', + }, + ], + name: 'transfer', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'address', + name: 'from', + type: 'address', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'value', + type: 'uint256', + }, + ], + name: 'transferFrom', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, +] -function useAllLists() { - return useAppSelector(function (state) { return state.lists.byUrl; }); -} -/** - * Combine the tokens in map2 with the tokens on map1, where tokens on map1 take precedence - * @param map1 the base token map - * @param map2 the map of additioanl tokens to add to the base map - */ -function combineMaps(map1, map2) { - var chainIds = Object.keys(Object.keys(map1) - .concat(Object.keys(map2)) - .reduce(function (memo, value) { - memo[value] = true; - return memo; - }, {})).map(function (id) { return parseInt(id); }); - return chainIds.reduce(function (memo, chainId) { - memo[chainId] = __assign(__assign({}, map2[chainId]), map1[chainId]); - return memo; - }, {}); -} -// merge tokens contained within lists from urls -function useCombinedTokenMapFromUrls(urls) { - var lists = useAllLists(); - return useMemo(function () { - if (!urls) - return {}; - return (urls - .slice() - // sort by priority so top priority goes last - .sort(sortByListPriority) - .reduce(function (allTokens, currentUrl) { - var _a; - var current = (_a = lists[currentUrl]) === null || _a === void 0 ? void 0 : _a.current; - if (!current) - return allTokens; - try { - return combineMaps(allTokens, tokensToChainTokenMap(current)); - } - catch (error) { - console.error('Could not show token list due to error', error); - return allTokens; - } - }, {})); - }, [lists, urls]); -} -// filter out unsupported lists -function useActiveListUrls() { - var activeListUrls = useAppSelector(function (state) { return state.lists.activeListUrls; }); - return useMemo(function () { return activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.filter(function (url) { return !UNSUPPORTED_LIST_URLS.includes(url); }); }, [activeListUrls]); -} -function useInactiveListUrls() { - var lists = useAllLists(); - var allActiveListUrls = useActiveListUrls(); - return useMemo(function () { return Object.keys(lists).filter(function (url) { return !(allActiveListUrls === null || allActiveListUrls === void 0 ? void 0 : allActiveListUrls.includes(url)) && !UNSUPPORTED_LIST_URLS.includes(url); }); }, [lists, allActiveListUrls]); -} -// get all the tokens from active lists, combine with local default tokens -function useCombinedActiveList() { - var activeListUrls = useActiveListUrls(); - var activeTokens = useCombinedTokenMapFromUrls(activeListUrls); - return activeTokens; -} -// list of tokens not supported on interface for various reasons, used to show warnings and prevent swaps and adds -function useUnsupportedTokenList() { - // get hard-coded broken tokens - var brokenListMap = useMemo(function () { return tokensToChainTokenMap(BROKEN_LIST); }, []); - // get hard-coded list of unsupported tokens - var localUnsupportedListMap = useMemo(function () { return tokensToChainTokenMap(UNSUPPORTED_TOKEN_LIST); }, []); - // get dynamic list of unsupported tokens - var loadedUnsupportedListMap = useCombinedTokenMapFromUrls(UNSUPPORTED_LIST_URLS); - // format into one token address map - return useMemo(function () { return combineMaps(brokenListMap, combineMaps(localUnsupportedListMap, loadedUnsupportedListMap)); }, [brokenListMap, localUnsupportedListMap, loadedUnsupportedListMap]); -} -function useIsListActive(url) { - var activeListUrls = useActiveListUrls(); - return Boolean(activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(url)); -} +var abi$3 = [ + { + inputs: [], + name: 'WETH', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'pure', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'tokenA', + type: 'address', + }, + { + internalType: 'address', + name: 'tokenB', + type: 'address', + }, + { + internalType: 'uint256', + name: 'amountADesired', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountBDesired', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountAMin', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountBMin', + type: 'uint256', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'addLiquidity', + outputs: [ + { + internalType: 'uint256', + name: 'amountA', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountB', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'liquidity', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'token', + type: 'address', + }, + { + internalType: 'uint256', + name: 'amountTokenDesired', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountTokenMin', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountETHMin', + type: 'uint256', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'addLiquidityETH', + outputs: [ + { + internalType: 'uint256', + name: 'amountToken', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountETH', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'liquidity', + type: 'uint256', + }, + ], + stateMutability: 'payable', + type: 'function', + }, + { + inputs: [], + name: 'factory', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'pure', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountOut', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'reserveIn', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'reserveOut', + type: 'uint256', + }, + ], + name: 'getAmountIn', + outputs: [ + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + ], + stateMutability: 'pure', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'reserveIn', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'reserveOut', + type: 'uint256', + }, + ], + name: 'getAmountOut', + outputs: [ + { + internalType: 'uint256', + name: 'amountOut', + type: 'uint256', + }, + ], + stateMutability: 'pure', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountOut', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + ], + name: 'getAmountsIn', + outputs: [ + { + internalType: 'uint256[]', + name: 'amounts', + type: 'uint256[]', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + ], + name: 'getAmountsOut', + outputs: [ + { + internalType: 'uint256[]', + name: 'amounts', + type: 'uint256[]', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountA', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'reserveA', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'reserveB', + type: 'uint256', + }, + ], + name: 'quote', + outputs: [ + { + internalType: 'uint256', + name: 'amountB', + type: 'uint256', + }, + ], + stateMutability: 'pure', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'tokenA', + type: 'address', + }, + { + internalType: 'address', + name: 'tokenB', + type: 'address', + }, + { + internalType: 'uint256', + name: 'liquidity', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountAMin', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountBMin', + type: 'uint256', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'removeLiquidity', + outputs: [ + { + internalType: 'uint256', + name: 'amountA', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountB', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'token', + type: 'address', + }, + { + internalType: 'uint256', + name: 'liquidity', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountTokenMin', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountETHMin', + type: 'uint256', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'removeLiquidityETH', + outputs: [ + { + internalType: 'uint256', + name: 'amountToken', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountETH', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'token', + type: 'address', + }, + { + internalType: 'uint256', + name: 'liquidity', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountTokenMin', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountETHMin', + type: 'uint256', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'removeLiquidityETHSupportingFeeOnTransferTokens', + outputs: [ + { + internalType: 'uint256', + name: 'amountETH', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'token', + type: 'address', + }, + { + internalType: 'uint256', + name: 'liquidity', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountTokenMin', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountETHMin', + type: 'uint256', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + { + internalType: 'bool', + name: 'approveMax', + type: 'bool', + }, + { + internalType: 'uint8', + name: 'v', + type: 'uint8', + }, + { + internalType: 'bytes32', + name: 'r', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 's', + type: 'bytes32', + }, + ], + name: 'removeLiquidityETHWithPermit', + outputs: [ + { + internalType: 'uint256', + name: 'amountToken', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountETH', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'token', + type: 'address', + }, + { + internalType: 'uint256', + name: 'liquidity', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountTokenMin', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountETHMin', + type: 'uint256', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + { + internalType: 'bool', + name: 'approveMax', + type: 'bool', + }, + { + internalType: 'uint8', + name: 'v', + type: 'uint8', + }, + { + internalType: 'bytes32', + name: 'r', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 's', + type: 'bytes32', + }, + ], + name: 'removeLiquidityETHWithPermitSupportingFeeOnTransferTokens', + outputs: [ + { + internalType: 'uint256', + name: 'amountETH', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'tokenA', + type: 'address', + }, + { + internalType: 'address', + name: 'tokenB', + type: 'address', + }, + { + internalType: 'uint256', + name: 'liquidity', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountAMin', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountBMin', + type: 'uint256', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + { + internalType: 'bool', + name: 'approveMax', + type: 'bool', + }, + { + internalType: 'uint8', + name: 'v', + type: 'uint8', + }, + { + internalType: 'bytes32', + name: 'r', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 's', + type: 'bytes32', + }, + ], + name: 'removeLiquidityWithPermit', + outputs: [ + { + internalType: 'uint256', + name: 'amountA', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountB', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountOut', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'swapETHForExactTokens', + outputs: [ + { + internalType: 'uint256[]', + name: 'amounts', + type: 'uint256[]', + }, + ], + stateMutability: 'payable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountOutMin', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'swapExactETHForTokens', + outputs: [ + { + internalType: 'uint256[]', + name: 'amounts', + type: 'uint256[]', + }, + ], + stateMutability: 'payable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountOutMin', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'swapExactETHForTokensSupportingFeeOnTransferTokens', + outputs: [], + stateMutability: 'payable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountOutMin', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'swapExactTokensForETH', + outputs: [ + { + internalType: 'uint256[]', + name: 'amounts', + type: 'uint256[]', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountOutMin', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'swapExactTokensForETHSupportingFeeOnTransferTokens', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountOutMin', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'swapExactTokensForTokens', + outputs: [ + { + internalType: 'uint256[]', + name: 'amounts', + type: 'uint256[]', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountOutMin', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'swapExactTokensForTokensSupportingFeeOnTransferTokens', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountOut', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountInMax', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'swapTokensForExactETH', + outputs: [ + { + internalType: 'uint256[]', + name: 'amounts', + type: 'uint256[]', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'amountOut', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amountInMax', + type: 'uint256', + }, + { + internalType: 'address[]', + name: 'path', + type: 'address[]', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + ], + name: 'swapTokensForExactTokens', + outputs: [ + { + internalType: 'uint256[]', + name: 'amounts', + type: 'uint256[]', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, +] -// reduce token map into standard address <-> Token mapping, optionally include user added tokens -function useTokensFromMap(tokenMap, includeUserAdded) { - var chainId = useActiveWeb3React().chainId; - var userAddedTokens = useUserAddedTokens(); - return useMemo(function () { - var _a; - if (!chainId) - return {}; - // reduce to just tokens - var mapWithoutUrls = Object.keys((_a = tokenMap[chainId]) !== null && _a !== void 0 ? _a : {}).reduce(function (newMap, address) { - newMap[address] = tokenMap[chainId][address].token; - return newMap; - }, {}); - if (includeUserAdded) { - return (userAddedTokens - // reduce into all ALL_TOKENS filtered by the current chain - .reduce(function (tokenMap, token) { - tokenMap[token.address] = token; - return tokenMap; - }, __assign({}, mapWithoutUrls))); - } - return mapWithoutUrls; - }, [chainId, userAddedTokens, tokenMap, includeUserAdded]); -} -function useAllTokens() { - var allTokens = useCombinedActiveList(); - return useTokensFromMap(allTokens, true); -} -function useUnsupportedTokens() { - var chainId = useActiveWeb3React().chainId; - var listsByUrl = useAllLists(); - var unsupportedTokensMap = useUnsupportedTokenList(); - var unsupportedTokens = useTokensFromMap(unsupportedTokensMap, false); - // checks the default L2 lists to see if `bridgeInfo` has an L1 address value that is unsupported - var l2InferredBlockedTokens = useMemo(function () { - if (!chainId || !L2_CHAIN_IDS.includes(chainId)) { - return {}; - } - if (!listsByUrl) { - return {}; - } - var listUrl = CHAIN_INFO[chainId].defaultListUrl; - var list = listsByUrl[listUrl].current; - if (!list) { - return {}; - } - var unsupportedSet = new Set(Object.keys(unsupportedTokens)); - return list.tokens.reduce(function (acc, tokenInfo) { - var _a; - var _b; - var bridgeInfo = (_b = tokenInfo.extensions) === null || _b === void 0 ? void 0 : _b.bridgeInfo; - if (bridgeInfo && - bridgeInfo[SupportedChainId.MAINNET] && - bridgeInfo[SupportedChainId.MAINNET].tokenAddress && - unsupportedSet.has(bridgeInfo[SupportedChainId.MAINNET].tokenAddress)) { - var address = bridgeInfo[SupportedChainId.MAINNET].tokenAddress; - // don't rely on decimals--it's possible that a token could be bridged w/ different decimals on the L2 - return __assign(__assign({}, acc), (_a = {}, _a[address] = new Token(SupportedChainId.MAINNET, address, tokenInfo.decimals), _a)); - } - return acc; - }, {}); - }, [chainId, listsByUrl, unsupportedTokens]); - return __assign(__assign({}, unsupportedTokens), l2InferredBlockedTokens); -} -function useSearchInactiveTokenLists(search, minResults) { - if (minResults === void 0) { minResults = 10; } - var lists = useAllLists(); - var inactiveUrls = useInactiveListUrls(); - var chainId = useActiveWeb3React().chainId; - var activeTokens = useAllTokens(); - return useMemo(function () { - var e_1, _a, e_2, _b; - if (!search || search.trim().length === 0) - return []; - var tokenFilter = getTokenFilter(search); - var result = []; - var addressSet = {}; - try { - for (var inactiveUrls_1 = __values(inactiveUrls), inactiveUrls_1_1 = inactiveUrls_1.next(); !inactiveUrls_1_1.done; inactiveUrls_1_1 = inactiveUrls_1.next()) { - var url = inactiveUrls_1_1.value; - var list = lists[url].current; - if (!list) - continue; - try { - for (var _c = (e_2 = void 0, __values(list.tokens)), _d = _c.next(); !_d.done; _d = _c.next()) { - var tokenInfo = _d.value; - if (tokenInfo.chainId === chainId && tokenFilter(tokenInfo)) { - var wrapped = new WrappedTokenInfo(tokenInfo, list); - if (!(wrapped.address in activeTokens) && !addressSet[wrapped.address]) { - addressSet[wrapped.address] = true; - result.push(wrapped); - if (result.length >= minResults) - return result; - } - } - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (_d && !_d.done && (_b = _c.return)) _b.call(_c); - } - finally { if (e_2) throw e_2.error; } - } - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (inactiveUrls_1_1 && !inactiveUrls_1_1.done && (_a = inactiveUrls_1.return)) _a.call(inactiveUrls_1); - } - finally { if (e_1) throw e_1.error; } - } - return result; - }, [activeTokens, chainId, inactiveUrls, lists, minResults, search]); -} -function useIsTokenActive(token) { - var activeTokens = useAllTokens(); - if (!activeTokens || !token) { - return false; - } - return !!activeTokens[token.address]; -} -// Check if currency is included in custom list from user storage -function useIsUserAddedToken(currency) { - var userAddedTokens = useUserAddedTokens(); - if (!currency) { - return false; - } - return !!userAddedTokens.find(function (token) { return currency.equals(token); }); -} -// undefined if invalid or does not exist -// null if loading or null was passed -// otherwise returns the token -function useToken(tokenAddress) { - var tokens = useAllTokens(); - return useTokenFromMap(tokens, tokenAddress); -} -function useCurrency(currencyId) { - var tokens = useAllTokens(); - return useCurrencyFromMap(tokens, currencyId); -} +var abi$2 = [ + { + inputs: [ + { + internalType: 'address', + name: '_factory', + type: 'address', + }, + { + internalType: 'address', + name: '_WETH9', + type: 'address', + }, + ], + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + inputs: [], + name: 'WETH9', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'factory', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes', + name: 'path', + type: 'bytes', + }, + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + ], + name: 'quoteExactInput', + outputs: [ + { + internalType: 'uint256', + name: 'amountOut', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'tokenIn', + type: 'address', + }, + { + internalType: 'address', + name: 'tokenOut', + type: 'address', + }, + { + internalType: 'uint24', + name: 'fee', + type: 'uint24', + }, + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + { + internalType: 'uint160', + name: 'sqrtPriceLimitX96', + type: 'uint160', + }, + ], + name: 'quoteExactInputSingle', + outputs: [ + { + internalType: 'uint256', + name: 'amountOut', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes', + name: 'path', + type: 'bytes', + }, + { + internalType: 'uint256', + name: 'amountOut', + type: 'uint256', + }, + ], + name: 'quoteExactOutput', + outputs: [ + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'tokenIn', + type: 'address', + }, + { + internalType: 'address', + name: 'tokenOut', + type: 'address', + }, + { + internalType: 'uint24', + name: 'fee', + type: 'uint24', + }, + { + internalType: 'uint256', + name: 'amountOut', + type: 'uint256', + }, + { + internalType: 'uint160', + name: 'sqrtPriceLimitX96', + type: 'uint160', + }, + ], + name: 'quoteExactOutputSingle', + outputs: [ + { + internalType: 'uint256', + name: 'amountIn', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'int256', + name: 'amount0Delta', + type: 'int256', + }, + { + internalType: 'int256', + name: 'amount1Delta', + type: 'int256', + }, + { + internalType: 'bytes', + name: 'path', + type: 'bytes', + }, + ], + name: 'uniswapV3SwapCallback', + outputs: [], + stateMutability: 'view', + type: 'function', + }, +] + +var abi$1 = [ + { + inputs: [], + name: 'getCurrentBlockTimestamp', + outputs: [ + { + internalType: 'uint256', + name: 'timestamp', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'addr', + type: 'address', + }, + ], + name: 'getEthBalance', + outputs: [ + { + internalType: 'uint256', + name: 'balance', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + components: [ + { + internalType: 'address', + name: 'target', + type: 'address', + }, + { + internalType: 'uint256', + name: 'gasLimit', + type: 'uint256', + }, + { + internalType: 'bytes', + name: 'callData', + type: 'bytes', + }, + ], + internalType: 'struct UniswapInterfaceMulticall.Call[]', + name: 'calls', + type: 'tuple[]', + }, + ], + name: 'multicall', + outputs: [ + { + internalType: 'uint256', + name: 'blockNumber', + type: 'uint256', + }, + { + components: [ + { + internalType: 'bool', + name: 'success', + type: 'bool', + }, + { + internalType: 'uint256', + name: 'gasUsed', + type: 'uint256', + }, + { + internalType: 'bytes', + name: 'returnData', + type: 'bytes', + }, + ], + internalType: 'struct UniswapInterfaceMulticall.Result[]', + name: 'returnData', + type: 'tuple[]', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, +] + +var ARGENT_WALLET_DETECTOR_ABI = [ + { + inputs: [ + { + internalType: 'bytes32[]', + name: '_codes', + type: 'bytes32[]', + }, + { + internalType: 'address[]', + name: '_implementations', + type: 'address[]', + }, + ], + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'code', + type: 'bytes32', + }, + ], + name: 'CodeAdded', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'implementation', + type: 'address', + }, + ], + name: 'ImplementationAdded', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: '_newOwner', + type: 'address', + }, + ], + name: 'OwnerChanged', + type: 'event', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: '', + type: 'bytes32', + }, + ], + name: 'acceptedCodes', + outputs: [ + { + internalType: 'bool', + name: 'exists', + type: 'bool', + }, + { + internalType: 'uint128', + name: 'index', + type: 'uint128', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + name: 'acceptedImplementations', + outputs: [ + { + internalType: 'bool', + name: 'exists', + type: 'bool', + }, + { + internalType: 'uint128', + name: 'index', + type: 'uint128', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: '_code', + type: 'bytes32', + }, + ], + name: 'addCode', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: '_argentWallet', + type: 'address', + }, + ], + name: 'addCodeAndImplementationFromWallet', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: '_impl', + type: 'address', + }, + ], + name: 'addImplementation', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: '_newOwner', + type: 'address', + }, + ], + name: 'changeOwner', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [], + name: 'getCodes', + outputs: [ + { + internalType: 'bytes32[]', + name: '', + type: 'bytes32[]', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'getImplementations', + outputs: [ + { + internalType: 'address[]', + name: '', + type: 'address[]', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: '_wallet', + type: 'address', + }, + ], + name: 'isArgentWallet', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'owner', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, +] + +var EIP_2612 = [ + { + constant: true, + inputs: [ + { + name: 'owner', + type: 'address', + }, + ], + name: 'nonces', + outputs: [ + { + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'DOMAIN_SEPARATOR', + outputs: [ + { + name: '', + type: 'bytes32', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, +] + +var ENS_PUBLIC_RESOLVER_ABI = [ + { + inputs: [ + { + internalType: 'contract ENS', + name: '_ens', + type: 'address', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: true, + internalType: 'uint256', + name: 'contentType', + type: 'uint256', + }, + ], + name: 'ABIChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'address', + name: 'a', + type: 'address', + }, + ], + name: 'AddrChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'uint256', + name: 'coinType', + type: 'uint256', + }, + { + indexed: false, + internalType: 'bytes', + name: 'newAddress', + type: 'bytes', + }, + ], + name: 'AddressChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: true, + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + indexed: true, + internalType: 'address', + name: 'target', + type: 'address', + }, + { + indexed: false, + internalType: 'bool', + name: 'isAuthorised', + type: 'bool', + }, + ], + name: 'AuthorisationChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'bytes', + name: 'hash', + type: 'bytes', + }, + ], + name: 'ContenthashChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'bytes', + name: 'name', + type: 'bytes', + }, + { + indexed: false, + internalType: 'uint16', + name: 'resource', + type: 'uint16', + }, + { + indexed: false, + internalType: 'bytes', + name: 'record', + type: 'bytes', + }, + ], + name: 'DNSRecordChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'bytes', + name: 'name', + type: 'bytes', + }, + { + indexed: false, + internalType: 'uint16', + name: 'resource', + type: 'uint16', + }, + ], + name: 'DNSRecordDeleted', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'DNSZoneCleared', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: true, + internalType: 'bytes4', + name: 'interfaceID', + type: 'bytes4', + }, + { + indexed: false, + internalType: 'address', + name: 'implementer', + type: 'address', + }, + ], + name: 'InterfaceChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'string', + name: 'name', + type: 'string', + }, + ], + name: 'NameChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'bytes32', + name: 'x', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'bytes32', + name: 'y', + type: 'bytes32', + }, + ], + name: 'PubkeyChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: true, + internalType: 'string', + name: 'indexedKey', + type: 'string', + }, + { + indexed: false, + internalType: 'string', + name: 'key', + type: 'string', + }, + ], + name: 'TextChanged', + type: 'event', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'uint256', + name: 'contentTypes', + type: 'uint256', + }, + ], + name: 'ABI', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + { + internalType: 'bytes', + name: '', + type: 'bytes', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'addr', + outputs: [ + { + internalType: 'address payable', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: '', + type: 'bytes32', + }, + { + internalType: 'address', + name: '', + type: 'address', + }, + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + name: 'authorisations', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'clearDNSZone', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'contenthash', + outputs: [ + { + internalType: 'bytes', + name: '', + type: 'bytes', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 'name', + type: 'bytes32', + }, + { + internalType: 'uint16', + name: 'resource', + type: 'uint16', + }, + ], + name: 'dnsRecord', + outputs: [ + { + internalType: 'bytes', + name: '', + type: 'bytes', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 'name', + type: 'bytes32', + }, + ], + name: 'hasDNSRecords', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes4', + name: 'interfaceID', + type: 'bytes4', + }, + ], + name: 'interfaceImplementer', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'name', + outputs: [ + { + internalType: 'string', + name: '', + type: 'string', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'pubkey', + outputs: [ + { + internalType: 'bytes32', + name: 'x', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 'y', + type: 'bytes32', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'uint256', + name: 'contentType', + type: 'uint256', + }, + { + internalType: 'bytes', + name: 'data', + type: 'bytes', + }, + ], + name: 'setABI', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'uint256', + name: 'coinType', + type: 'uint256', + }, + { + internalType: 'bytes', + name: 'a', + type: 'bytes', + }, + ], + name: 'setAddr', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'address', + name: 'a', + type: 'address', + }, + ], + name: 'setAddr', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'address', + name: 'target', + type: 'address', + }, + { + internalType: 'bool', + name: 'isAuthorised', + type: 'bool', + }, + ], + name: 'setAuthorisation', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes', + name: 'hash', + type: 'bytes', + }, + ], + name: 'setContenthash', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes', + name: 'data', + type: 'bytes', + }, + ], + name: 'setDNSRecords', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes4', + name: 'interfaceID', + type: 'bytes4', + }, + { + internalType: 'address', + name: 'implementer', + type: 'address', + }, + ], + name: 'setInterface', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'string', + name: 'name', + type: 'string', + }, + ], + name: 'setName', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 'x', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 'y', + type: 'bytes32', + }, + ], + name: 'setPubkey', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'string', + name: 'key', + type: 'string', + }, + { + internalType: 'string', + name: 'value', + type: 'string', + }, + ], + name: 'setText', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes4', + name: 'interfaceID', + type: 'bytes4', + }, + ], + name: 'supportsInterface', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'pure', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'string', + name: 'key', + type: 'string', + }, + ], + name: 'text', + outputs: [ + { + internalType: 'string', + name: '', + type: 'string', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, +] + +var ENS_ABI = [ + { + inputs: [ + { + internalType: 'contract ENS', + name: '_old', + type: 'address', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + indexed: true, + internalType: 'address', + name: 'operator', + type: 'address', + }, + { + indexed: false, + internalType: 'bool', + name: 'approved', + type: 'bool', + }, + ], + name: 'ApprovalForAll', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: true, + internalType: 'bytes32', + name: 'label', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'address', + name: 'owner', + type: 'address', + }, + ], + name: 'NewOwner', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'address', + name: 'resolver', + type: 'address', + }, + ], + name: 'NewResolver', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'uint64', + name: 'ttl', + type: 'uint64', + }, + ], + name: 'NewTTL', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'address', + name: 'owner', + type: 'address', + }, + ], + name: 'Transfer', + type: 'event', + }, + { + constant: true, + inputs: [ + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + internalType: 'address', + name: 'operator', + type: 'address', + }, + ], + name: 'isApprovedForAll', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'old', + outputs: [ + { + internalType: 'contract ENS', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'owner', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'recordExists', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'resolver', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'address', + name: 'operator', + type: 'address', + }, + { + internalType: 'bool', + name: 'approved', + type: 'bool', + }, + ], + name: 'setApprovalForAll', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + ], + name: 'setOwner', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + internalType: 'address', + name: 'resolver', + type: 'address', + }, + { + internalType: 'uint64', + name: 'ttl', + type: 'uint64', + }, + ], + name: 'setRecord', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'address', + name: 'resolver', + type: 'address', + }, + ], + name: 'setResolver', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 'label', + type: 'bytes32', + }, + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + ], + name: 'setSubnodeOwner', + outputs: [ + { + internalType: 'bytes32', + name: '', + type: 'bytes32', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 'label', + type: 'bytes32', + }, + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + internalType: 'address', + name: 'resolver', + type: 'address', + }, + { + internalType: 'uint64', + name: 'ttl', + type: 'uint64', + }, + ], + name: 'setSubnodeRecord', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'uint64', + name: 'ttl', + type: 'uint64', + }, + ], + name: 'setTTL', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'ttl', + outputs: [ + { + internalType: 'uint64', + name: '', + type: 'uint64', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, +] + +var ERC20ABI = [ + { + constant: true, + inputs: [], + name: 'name', + outputs: [ + { + name: '', + type: 'string', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + name: '_spender', + type: 'address', + }, + { + name: '_value', + type: 'uint256', + }, + ], + name: 'approve', + outputs: [ + { + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'totalSupply', + outputs: [ + { + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + name: '_from', + type: 'address', + }, + { + name: '_to', + type: 'address', + }, + { + name: '_value', + type: 'uint256', + }, + ], + name: 'transferFrom', + outputs: [ + { + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'decimals', + outputs: [ + { + name: '', + type: 'uint8', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + name: '_owner', + type: 'address', + }, + ], + name: 'balanceOf', + outputs: [ + { + name: 'balance', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'symbol', + outputs: [ + { + name: '', + type: 'string', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + name: '_to', + type: 'address', + }, + { + name: '_value', + type: 'uint256', + }, + ], + name: 'transfer', + outputs: [ + { + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [ + { + name: '_owner', + type: 'address', + }, + { + name: '_spender', + type: 'address', + }, + ], + name: 'allowance', + outputs: [ + { + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + payable: true, + stateMutability: 'payable', + type: 'fallback', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: 'owner', + type: 'address', + }, + { + indexed: true, + name: 'spender', + type: 'address', + }, + { + indexed: false, + name: 'value', + type: 'uint256', + }, + ], + name: 'Approval', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: 'from', + type: 'address', + }, + { + indexed: true, + name: 'to', + type: 'address', + }, + { + indexed: false, + name: 'value', + type: 'uint256', + }, + ], + name: 'Transfer', + type: 'event', + }, +] -function serializeToken(token) { - return { - chainId: token.chainId, - address: token.address, - decimals: token.decimals, - symbol: token.symbol, - name: token.name, - }; -} -function deserializeToken(serializedToken) { - return new Token(serializedToken.chainId, serializedToken.address, serializedToken.decimals, serializedToken.symbol, serializedToken.name); -} -function useIsDarkMode() { - var _a = useAppSelector(function (_a) { - var _b = _a.user, matchesDarkMode = _b.matchesDarkMode, userDarkMode = _b.userDarkMode; - return ({ - userDarkMode: userDarkMode, - matchesDarkMode: matchesDarkMode, - }); - }, shallowEqual), userDarkMode = _a.userDarkMode, matchesDarkMode = _a.matchesDarkMode; - return userDarkMode === null ? matchesDarkMode : userDarkMode; -} -function useDarkModeManager() { - var dispatch = useAppDispatch(); - var darkMode = useIsDarkMode(); - var toggleSetDarkMode = useCallback(function () { - dispatch(updateUserDarkMode({ userDarkMode: !darkMode })); - }, [darkMode, dispatch]); - return [darkMode, toggleSetDarkMode]; -} -function useUserLocale() { - return useAppSelector(function (state) { return state.user.userLocale; }); -} -function useUserLocaleManager() { - var dispatch = useAppDispatch(); - var locale = useUserLocale(); - var setLocale = useCallback(function (newLocale) { - dispatch(updateUserLocale({ userLocale: newLocale })); - }, [dispatch]); - return [locale, setLocale]; -} -function useIsExpertMode() { - return useAppSelector(function (state) { return state.user.userExpertMode; }); -} -function useExpertModeManager() { - var dispatch = useAppDispatch(); - var expertMode = useIsExpertMode(); - var toggleSetExpertMode = useCallback(function () { - dispatch(updateUserExpertMode({ userExpertMode: !expertMode })); - }, [expertMode, dispatch]); - return [expertMode, toggleSetExpertMode]; -} -function useShowSurveyPopup() { - var dispatch = useAppDispatch(); - var showSurveyPopup = useAppSelector(function (state) { return state.user.showSurveyPopup; }); - var toggleShowSurveyPopup = useCallback(function (showPopup) { - dispatch(updateShowSurveyPopup({ showSurveyPopup: showPopup })); - }, [dispatch]); - return [showSurveyPopup, toggleShowSurveyPopup]; -} -function useClientSideRouter() { - var dispatch = useAppDispatch(); - var clientSideRouter = useAppSelector(function (state) { return Boolean(state.user.userClientSideRouter); }); - var setClientSideRouter = useCallback(function (newClientSideRouter) { - dispatch(updateUserClientSideRouter({ userClientSideRouter: newClientSideRouter })); - }, [dispatch]); - return [clientSideRouter, setClientSideRouter]; -} -function useSetUserSlippageTolerance() { - var dispatch = useAppDispatch(); - return useCallback(function (userSlippageTolerance) { - var value; - try { - value = - userSlippageTolerance === 'auto' ? 'auto' : JSBI.toNumber(userSlippageTolerance.multiply(10000).quotient); - } - catch (error) { - value = 'auto'; - } - dispatch(updateUserSlippageTolerance({ - userSlippageTolerance: value, - })); - }, [dispatch]); -} -/** - * Return the user's slippage tolerance, from the redux store, and a function to update the slippage tolerance - */ -function useUserSlippageTolerance() { - var userSlippageTolerance = useAppSelector(function (state) { - return state.user.userSlippageTolerance; - }); - return useMemo(function () { return (userSlippageTolerance === 'auto' ? 'auto' : new Percent(userSlippageTolerance, 10000)); }, [userSlippageTolerance]); -} -/** - * Same as above but replaces the auto with a default value - * @param defaultSlippageTolerance the default value to replace auto with - */ -function useUserSlippageToleranceWithDefault(defaultSlippageTolerance) { - var allowedSlippage = useUserSlippageTolerance(); - return useMemo(function () { return (allowedSlippage === 'auto' ? defaultSlippageTolerance : allowedSlippage); }, [allowedSlippage, defaultSlippageTolerance]); -} -function useUserTransactionTTL() { - var chainId = useActiveWeb3React().chainId; - var dispatch = useAppDispatch(); - var userDeadline = useAppSelector(function (state) { return state.user.userDeadline; }); - var onL2 = Boolean(chainId && L2_CHAIN_IDS.includes(chainId)); - var deadline = onL2 ? L2_DEADLINE_FROM_NOW : userDeadline; - var setUserDeadline = useCallback(function (userDeadline) { - dispatch(updateUserDeadline({ userDeadline: userDeadline })); - }, [dispatch]); - return [deadline, setUserDeadline]; -} -function useAddUserToken() { - var dispatch = useAppDispatch(); - return useCallback(function (token) { - dispatch(addSerializedToken({ serializedToken: serializeToken(token) })); - }, [dispatch]); -} -function useRemoveUserAddedToken() { - var dispatch = useAppDispatch(); - return useCallback(function (chainId, address) { - dispatch(removeSerializedToken({ chainId: chainId, address: address })); - }, [dispatch]); -} -function useUserAddedTokens() { - var chainId = useActiveWeb3React().chainId; - var serializedTokensMap = useAppSelector(function (_a) { - var tokens = _a.user.tokens; - return tokens; - }); - return useMemo(function () { - if (!chainId) - return []; - var tokenMap = (serializedTokensMap === null || serializedTokensMap === void 0 ? void 0 : serializedTokensMap[chainId]) - ? Object.values(serializedTokensMap[chainId]).map(deserializeToken) - : []; - return tokenMap; - }, [serializedTokensMap, chainId]); -} -function useURLWarningVisible() { - return useAppSelector(function (state) { return state.user.URLWarningVisible; }); -} - -var EXPLORER_HOSTNAMES = { - 'etherscan.io': true, - 'ropsten.etherscan.io': true, - 'rinkeby.etherscan.io': true, - 'kovan.etherscan.io': true, - 'goerli.etherscan.io': true, - 'optimistic.etherscan.io': true, - 'kovan-optimistic.etherscan.io': true, - 'rinkeby-explorer.arbitrum.io': true, - 'arbiscan.io': true, -}; -/** - * Returns the anonymized version of the given href, i.e. one that does not leak user information - * @param href the link to anonymize, i.e. remove any personal data from - * @return string anonymized version of the given href - */ -function anonymizeLink(href) { - try { - var url = new URL(href); - if (EXPLORER_HOSTNAMES[url.hostname]) { - var pathPieces = url.pathname.split('/'); - var anonymizedPath = pathPieces.map(function (pc) { return (/0x[a-fA-F0-9]+/.test(pc) ? '***' : pc); }).join('/'); - return url.protocol + "//" + url.hostname + anonymizedPath; - } - return href; - } - catch (error) { - return href; - } -} +var ERC20_BYTES32_ABI = [ + { + constant: true, + inputs: [], + name: 'name', + outputs: [ + { + name: '', + type: 'bytes32', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'symbol', + outputs: [ + { + name: '', + type: 'bytes32', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, +] -var ButtonText = styled.button(templateObject_1$1l || (templateObject_1$1l = __makeTemplateObject(["\n outline: none;\n border: none;\n font-size: inherit;\n padding: 0;\n margin: 0;\n background: none;\n cursor: pointer;\n\n :hover {\n opacity: 0.7;\n }\n\n :focus {\n text-decoration: underline;\n }\n"], ["\n outline: none;\n border: none;\n font-size: inherit;\n padding: 0;\n margin: 0;\n background: none;\n cursor: pointer;\n\n :hover {\n opacity: 0.7;\n }\n\n :focus {\n text-decoration: underline;\n }\n"]))); -var CloseIcon$2 = styled(X)(templateObject_2$$ || (templateObject_2$$ = __makeTemplateObject(["\n cursor: pointer;\n"], ["\n cursor: pointer;\n" - // for wrapper react feather icons -]))); -// for wrapper react feather icons -var IconWrapper$4 = styled.div(templateObject_3$S || (templateObject_3$S = __makeTemplateObject(["\n display: flex;\n align-items: center;\n justify-content: center;\n width: ", ";\n height: ", ";\n margin-right: ", ";\n margin-left: ", ";\n & > * {\n stroke: ", ";\n }\n"], ["\n display: flex;\n align-items: center;\n justify-content: center;\n width: ", ";\n height: ", ";\n margin-right: ", ";\n margin-left: ", ";\n & > * {\n stroke: ", ";\n }\n" - // A button that triggers some onClick result, but looks like a link. -])), function (_a) { - var size = _a.size; - return size !== null && size !== void 0 ? size : '20px'; -}, function (_a) { - var size = _a.size; - return size !== null && size !== void 0 ? size : '20px'; -}, function (_a) { - var marginRight = _a.marginRight; - return marginRight !== null && marginRight !== void 0 ? marginRight : 0; -}, function (_a) { - var marginLeft = _a.marginLeft; - return marginLeft !== null && marginLeft !== void 0 ? marginLeft : 0; -}, function (_a) { - var theme = _a.theme, stroke = _a.stroke; - return stroke !== null && stroke !== void 0 ? stroke : theme.blue1; -}); -// A button that triggers some onClick result, but looks like a link. -var LinkStyledButton = styled.button(templateObject_4$G || (templateObject_4$G = __makeTemplateObject(["\n border: none;\n text-decoration: none;\n background: none;\n\n cursor: ", ";\n color: ", ";\n font-weight: 500;\n\n :hover {\n text-decoration: ", ";\n }\n\n :focus {\n outline: none;\n text-decoration: ", ";\n }\n\n :active {\n text-decoration: none;\n }\n"], ["\n border: none;\n text-decoration: none;\n background: none;\n\n cursor: ", ";\n color: ", ";\n font-weight: 500;\n\n :hover {\n text-decoration: ", ";\n }\n\n :focus {\n outline: none;\n text-decoration: ", ";\n }\n\n :active {\n text-decoration: none;\n }\n" - // An internal link from the react-router-dom library that is correctly styled -])), function (_a) { - var disabled = _a.disabled; - return (disabled ? 'default' : 'pointer'); -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return (disabled ? theme.text2 : theme.primary1); -}, function (_a) { - var disabled = _a.disabled; - return (disabled ? null : 'underline'); -}, function (_a) { - var disabled = _a.disabled; - return (disabled ? null : 'underline'); -}); -// An internal link from the react-router-dom library that is correctly styled -var StyledInternalLink = styled(Link$1)(templateObject_5$x || (templateObject_5$x = __makeTemplateObject(["\n text-decoration: none;\n cursor: pointer;\n color: ", ";\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 text-decoration: none;\n cursor: pointer;\n color: ", ";\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"])), function (_a) { - var theme = _a.theme; - return theme.primary1; -}); -var StyledLink = styled.a(templateObject_6$o || (templateObject_6$o = __makeTemplateObject(["\n text-decoration: none;\n cursor: pointer;\n color: ", ";\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 text-decoration: none;\n cursor: pointer;\n color: ", ";\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"])), function (_a) { - var theme = _a.theme; - return theme.primary1; -}); -var LinkIconWrapper = styled.a(templateObject_7$k || (templateObject_7$k = __makeTemplateObject(["\n text-decoration: none;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n text-decoration: none;\n opacity: 0.7;\n }\n\n :focus {\n outline: none;\n text-decoration: none;\n }\n\n :active {\n text-decoration: none;\n }\n"], ["\n text-decoration: none;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n text-decoration: none;\n opacity: 0.7;\n }\n\n :focus {\n outline: none;\n text-decoration: none;\n }\n\n :active {\n text-decoration: none;\n }\n"]))); -var LinkIcon = styled(ExternalLink$1)(templateObject_8$h || (templateObject_8$h = __makeTemplateObject(["\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ", ";\n"], ["\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.blue1; -}); -var TrashIcon = styled(Trash)(templateObject_9$g || (templateObject_9$g = __makeTemplateObject(["\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ", ";\n\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n opacity: 0.7;\n }\n"], ["\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ", ";\n\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n opacity: 0.7;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.text3; -}); -var rotateImg = keyframes(templateObject_10$c || (templateObject_10$c = __makeTemplateObject(["\n 0% {\n transform: perspective(1000px) rotateY(0deg);\n }\n\n 100% {\n transform: perspective(1000px) rotateY(360deg);\n }\n"], ["\n 0% {\n transform: perspective(1000px) rotateY(0deg);\n }\n\n 100% {\n transform: perspective(1000px) rotateY(360deg);\n }\n"]))); -var UniTokenAnimated = styled.img(templateObject_11$a || (templateObject_11$a = __makeTemplateObject(["\n animation: ", " 5s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n padding: 2rem 0 0 0;\n filter: drop-shadow(0px 2px 4px rgba(0, 0, 0, 0.15));\n"], ["\n animation: ", " 5s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n padding: 2rem 0 0 0;\n filter: drop-shadow(0px 2px 4px rgba(0, 0, 0, 0.15));\n"])), rotateImg); -function handleClickExternalLink(event) { - var _a = event.currentTarget, target = _a.target, href = _a.href; - var anonymizedHref = anonymizeLink(href); - // don't prevent default, don't redirect if it's a new tab - if (target === '_blank' || event.ctrlKey || event.metaKey) { - ReactGA.outboundLink({ label: anonymizedHref }, function () { - console.debug('Fired outbound link event', anonymizedHref); - }); - } - else { - event.preventDefault(); - // send a ReactGA event and then trigger a location change - ReactGA.outboundLink({ label: anonymizedHref }, function () { - window.location.href = anonymizedHref; - }); - } -} -/** - * Outbound link that handles firing google analytics events - */ -function ExternalLink(_a) { - var _b = _a.target, target = _b === void 0 ? '_blank' : _b, href = _a.href, _c = _a.rel, rel = _c === void 0 ? 'noopener noreferrer' : _c, rest = __rest(_a, ["target", "href", "rel"]); - return jsx(StyledLink, __assign({ target: target, rel: rel, href: href, onClick: handleClickExternalLink }, rest), void 0); -} -function ExternalLinkIcon(_a) { - var _b = _a.target, target = _b === void 0 ? '_blank' : _b, href = _a.href, _c = _a.rel, rel = _c === void 0 ? 'noopener noreferrer' : _c, rest = __rest(_a, ["target", "href", "rel"]); - return (jsx(LinkIconWrapper, __assign({ target: target, rel: rel, href: href, onClick: handleClickExternalLink }, rest, { children: jsx(LinkIcon, {}, void 0) }), void 0)); -} -var rotate$1 = keyframes(templateObject_12$a || (templateObject_12$a = __makeTemplateObject(["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"], ["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"]))); -var Spinner$2 = styled.img(templateObject_13$6 || (templateObject_13$6 = __makeTemplateObject(["\n animation: 2s ", " linear infinite;\n width: 16px;\n height: 16px;\n"], ["\n animation: 2s ", " linear infinite;\n width: 16px;\n height: 16px;\n"])), rotate$1); -styled(StyledInternalLink)(templateObject_14$6 || (templateObject_14$6 = __makeTemplateObject(["\n color: ", ";\n"], ["\n color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.text1; -}); -var CustomLightSpinner = styled(Spinner$2)(templateObject_15$4 || (templateObject_15$4 = __makeTemplateObject(["\n height: ", ";\n width: ", ";\n"], ["\n height: ", ";\n width: ", ";\n"])), function (_a) { - var size = _a.size; - return size; -}, function (_a) { - var size = _a.size; - return size; -}); -var HideSmall = styled.span(templateObject_17$2 || (templateObject_17$2 = __makeTemplateObject(["\n ", ";\n"], ["\n ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToSmall(templateObject_16$3 || (templateObject_16$3 = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); -}); -styled.span(templateObject_19$2 || (templateObject_19$2 = __makeTemplateObject(["\n ", ";\n"], ["\n ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToExtraSmall(templateObject_18$2 || (templateObject_18$2 = __makeTemplateObject(["\n display: none;\n "], ["\n display: none;\n "]))); -}); -styled.span(templateObject_21$1 || (templateObject_21$1 = __makeTemplateObject(["\n display: none;\n ", ";\n"], ["\n display: none;\n ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToSmall(templateObject_20$1 || (templateObject_20$1 = __makeTemplateObject(["\n display: block;\n "], ["\n display: block;\n "]))); -}); -var Separator$1 = styled.div(templateObject_22 || (templateObject_22 = __makeTemplateObject(["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"], ["\n width: 100%;\n height: 1px;\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}); -var templateObject_1$1l, templateObject_2$$, templateObject_3$S, templateObject_4$G, templateObject_5$x, templateObject_6$o, templateObject_7$k, templateObject_8$h, templateObject_9$g, templateObject_10$c, templateObject_11$a, templateObject_12$a, templateObject_13$6, templateObject_14$6, templateObject_15$4, templateObject_16$3, templateObject_17$2, templateObject_18$2, templateObject_19$2, templateObject_20$1, templateObject_21$1, templateObject_22; +var ERC721_ABI = [ + { + inputs: [ + { + internalType: 'uint256', + name: 'tokenId', + type: 'uint256', + }, + ], + name: 'ownerOf', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'tokenId', + type: 'uint256', + }, + ], + name: 'tokenURI', + outputs: [ + { + internalType: 'string', + name: '', + type: 'string', + }, + ], + stateMutability: 'view', + type: 'function', + }, +] -var MEDIA_WIDTHS = { - upToExtraSmall: 500, - upToSmall: 720, - upToMedium: 960, - upToLarge: 1280, -}; -// Migrating to a standard z-index system https://getbootstrap.com/docs/5.0/layout/z-index/ -// Please avoid using deprecated numbers -var Z_INDEX; -(function (Z_INDEX) { - Z_INDEX[Z_INDEX["deprecated_zero"] = 0] = "deprecated_zero"; - Z_INDEX[Z_INDEX["deprecated_content"] = 1] = "deprecated_content"; - Z_INDEX[Z_INDEX["dropdown"] = 1000] = "dropdown"; - Z_INDEX[Z_INDEX["sticky"] = 1020] = "sticky"; - Z_INDEX[Z_INDEX["fixed"] = 1030] = "fixed"; - Z_INDEX[Z_INDEX["modalBackdrop"] = 1040] = "modalBackdrop"; - Z_INDEX[Z_INDEX["offcanvas"] = 1050] = "offcanvas"; - Z_INDEX[Z_INDEX["modal"] = 1060] = "modal"; - Z_INDEX[Z_INDEX["popover"] = 1070] = "popover"; - Z_INDEX[Z_INDEX["tooltip"] = 1080] = "tooltip"; -})(Z_INDEX || (Z_INDEX = {})); -var mediaWidthTemplates = Object.keys(MEDIA_WIDTHS).reduce(function (accumulator, size) { - accumulator[size] = function (a, b, c) { return css(templateObject_1$1k || (templateObject_1$1k = __makeTemplateObject(["\n @media (max-width: ", "px) {\n ", "\n }\n "], ["\n @media (max-width: ", "px) {\n ", "\n }\n "])), MEDIA_WIDTHS[size], css(a, b, c)); }; - return accumulator; -}, {}); -var white = '#FFFFFF'; -var black = '#000000'; -function colors(darkMode) { - return { - darkMode: darkMode, - // base - white: white, - black: black, - // text - text1: darkMode ? '#FFFFFF' : '#000000', - text2: darkMode ? '#C3C5CB' : '#565A69', - text3: darkMode ? '#8F96AC' : '#6E727D', - text4: darkMode ? '#B2B9D2' : '#C3C5CB', - text5: darkMode ? '#2C2F36' : '#EDEEF2', - // backgrounds / greys - bg0: darkMode ? '#191B1F' : '#FFF', - bg1: darkMode ? '#212429' : '#F7F8FA', - bg2: darkMode ? '#2C2F36' : '#EDEEF2', - bg3: darkMode ? '#40444F' : '#CED0D9', - bg4: darkMode ? '#565A69' : '#888D9B', - bg5: darkMode ? '#6C7284' : '#888D9B', - bg6: darkMode ? '#1A2028' : '#6C7284', - //specialty colors - modalBG: darkMode ? 'rgba(0,0,0,.425)' : 'rgba(0,0,0,0.3)', - advancedBG: darkMode ? 'rgba(0,0,0,0.1)' : 'rgba(255,255,255,0.6)', - //primary colors - primary1: darkMode ? '#2172E5' : '#E8006F', - primary2: darkMode ? '#3680E7' : '#FF8CC3', - primary3: darkMode ? '#4D8FEA' : '#FF99C9', - primary4: darkMode ? '#376bad70' : '#F6DDE8', - primary5: darkMode ? '#153d6f70' : '#FDEAF1', - // color text - primaryText1: darkMode ? '#5090ea' : '#D50066', - // secondary colors - secondary1: darkMode ? '#2172E5' : '#E8006F', - secondary2: darkMode ? '#17000b26' : '#F6DDE8', - secondary3: darkMode ? '#17000b26' : '#FDEAF1', - // other - red1: darkMode ? '#FF4343' : '#DA2D2B', - red2: darkMode ? '#F82D3A' : '#DF1F38', - red3: '#D60000', - green1: darkMode ? '#27AE60' : '#007D35', - yellow1: '#E3A507', - yellow2: '#FF8F00', - yellow3: '#F3B71E', - blue1: darkMode ? '#2172E5' : '#0068FC', - blue2: darkMode ? '#5199FF' : '#0068FC', - error: darkMode ? '#FD4040' : '#DF1F38', - success: darkMode ? '#27AE60' : '#007D35', - warning: '#FF8F00', - // dont wanna forget these blue yet - blue4: darkMode ? '#153d6f70' : '#C4D9F8', - // blue5: darkMode ? '#153d6f70' : '#EBF4FF', - }; -} -function theme(darkMode) { - return __assign(__assign({}, colors(darkMode)), { grids: { - sm: 8, - md: 12, - lg: 24, - }, - //shadows - shadow1: darkMode ? '#000' : '#2F80ED', - // media queries - mediaWidth: mediaWidthTemplates, - // css snippets - flexColumnNoWrap: css(templateObject_2$_ || (templateObject_2$_ = __makeTemplateObject(["\n display: flex;\n flex-flow: column nowrap;\n "], ["\n display: flex;\n flex-flow: column nowrap;\n "]))), flexRowNoWrap: css(templateObject_3$R || (templateObject_3$R = __makeTemplateObject(["\n display: flex;\n flex-flow: row nowrap;\n "], ["\n display: flex;\n flex-flow: row nowrap;\n "]))) }); -} -function ThemeProvider(_a) { - var children = _a.children; - var darkMode = useIsDarkMode(); - var themeObject = useMemo(function () { return theme(darkMode); }, [darkMode]); - return jsx(ThemeProvider$1, __assign({ theme: themeObject }, { children: children }), void 0); -} -var TextWrapper$1 = styled(Text$1)(templateObject_4$F || (templateObject_4$F = __makeTemplateObject(["\n color: ", ";\n"], ["\n color: ", ";\n" - /** - * Preset styles of the Rebass Text component - */ -])), function (_a) { - var color = _a.color, theme = _a.theme; - return theme[color]; -}); -/** - * Preset styles of the Rebass Text component - */ -var ThemedText = { - Main: function (props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text2' }, props), void 0); - }, - Link: function (props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'primary1' }, props), void 0); - }, - Label: function (props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 600, color: 'text1' }, props), void 0); - }, - Black: function (props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text1' }, props), void 0); - }, - White: function (props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'white' }, props), void 0); - }, - Body: function (props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 400, fontSize: 16, color: 'text1' }, props), void 0); - }, - LargeHeader: function (props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 600, fontSize: 24 }, props), void 0); - }, - MediumHeader: function (props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 500, fontSize: 20 }, props), void 0); - }, - SubHeader: function (props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 400, fontSize: 14 }, props), void 0); - }, - Small: function (props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 500, fontSize: 11 }, props), void 0); - }, - Blue: function (props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'blue1' }, props), void 0); - }, - Yellow: function (props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'yellow3' }, props), void 0); - }, - DarkGray: function (props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text3' }, props), void 0); - }, - Gray: function (props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'bg3' }, props), void 0); - }, - Italic: function (props) { - return jsx(TextWrapper$1, __assign({ fontWeight: 500, fontSize: 12, fontStyle: 'italic', color: 'text2' }, props), void 0); - }, - Error: function (_a) { - var error = _a.error, props = __rest(_a, ["error"]); - return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: error ? 'red1' : 'text2' }, props), void 0); - }, -}; -var ThemedGlobalStyle = createGlobalStyle(templateObject_5$w || (templateObject_5$w = __makeTemplateObject(["\nhtml {\n color: ", ";\n background-color: ", " !important;\n}\n\na {\n color: ", "; \n}\n"], ["\nhtml {\n color: ", ";\n background-color: ", " !important;\n}\n\na {\n color: ", "; \n}\n"])), function (_a) { - var theme = _a.theme; - return theme.text1; -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var theme = _a.theme; - return theme.blue1; -}); -var templateObject_1$1k, templateObject_2$_, templateObject_3$R, templateObject_4$F, templateObject_5$w; - -var _a$b; -var ETHERSCAN_PREFIXES = (_a$b = {}, - _a$b[SupportedChainId.MAINNET] = 'https://etherscan.io', - _a$b[SupportedChainId.ROPSTEN] = 'https://ropsten.etherscan.io', - _a$b[SupportedChainId.RINKEBY] = 'https://rinkeby.etherscan.io', - _a$b[SupportedChainId.GOERLI] = 'https://goerli.etherscan.io', - _a$b[SupportedChainId.KOVAN] = 'https://kovan.etherscan.io', - _a$b[SupportedChainId.OPTIMISM] = 'https://optimistic.etherscan.io', - _a$b[SupportedChainId.OPTIMISTIC_KOVAN] = 'https://kovan-optimistic.etherscan.io', - _a$b[SupportedChainId.POLYGON_MUMBAI] = 'https://mumbai.polygonscan.com', - _a$b[SupportedChainId.POLYGON] = 'https://polygonscan.com', - _a$b); -var ExplorerDataType; -(function (ExplorerDataType) { - ExplorerDataType["TRANSACTION"] = "transaction"; - ExplorerDataType["TOKEN"] = "token"; - ExplorerDataType["ADDRESS"] = "address"; - ExplorerDataType["BLOCK"] = "block"; -})(ExplorerDataType || (ExplorerDataType = {})); -/** - * Return the explorer link for the given data and data type - * @param chainId the ID of the chain for which to return the data - * @param data the data to return a link for - * @param type the type of the data - */ -function getExplorerLink(chainId, data, type) { - var _a; - if (chainId === SupportedChainId.ARBITRUM_ONE) { - switch (type) { - case ExplorerDataType.TRANSACTION: - return "https://arbiscan.io/tx/" + data; - case ExplorerDataType.ADDRESS: - case ExplorerDataType.TOKEN: - return "https://arbiscan.io/address/" + data; - case ExplorerDataType.BLOCK: - return "https://arbiscan.io/block/" + data; - default: - return "https://arbiscan.io/"; - } - } - if (chainId === SupportedChainId.ARBITRUM_RINKEBY) { - switch (type) { - case ExplorerDataType.TRANSACTION: - return "https://rinkeby-explorer.arbitrum.io/tx/" + data; - case ExplorerDataType.ADDRESS: - case ExplorerDataType.TOKEN: - return "https://rinkeby-explorer.arbitrum.io/address/" + data; - case ExplorerDataType.BLOCK: - return "https://rinkeby-explorer.arbitrum.io/block/" + data; - default: - return "https://rinkeby-explorer.arbitrum.io/"; - } - } - var prefix = (_a = ETHERSCAN_PREFIXES[chainId]) !== null && _a !== void 0 ? _a : 'https://etherscan.io'; - switch (type) { - case ExplorerDataType.TRANSACTION: - return prefix + "/tx/" + data; - case ExplorerDataType.TOKEN: - return prefix + "/token/" + data; - case ExplorerDataType.BLOCK: - if (chainId === SupportedChainId.OPTIMISM || chainId === SupportedChainId.OPTIMISTIC_KOVAN) { - return prefix + "/tx/" + data; - } - return prefix + "/block/" + data; - case ExplorerDataType.ADDRESS: - return prefix + "/address/" + data; - default: - return "" + prefix; - } +var ERC1155_ABI = [ + { + constant: true, + inputs: [ + { + internalType: 'address', + name: '_owner', + type: 'address', + }, + { + internalType: 'uint256', + name: '_id', + type: 'uint256', + }, + ], + name: 'balanceOf', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + internalType: 'uint256', + name: '_id', + type: 'uint256', + }, + ], + name: 'uri', + outputs: [ + { + internalType: 'string', + name: '', + type: 'string', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, +] + +var WETH_ABI = [ + { + constant: true, + inputs: [], + name: 'name', + outputs: [ + { + name: '', + type: 'string', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + name: 'guy', + type: 'address', + }, + { + name: 'wad', + type: 'uint256', + }, + ], + name: 'approve', + outputs: [ + { + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'totalSupply', + outputs: [ + { + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + name: 'src', + type: 'address', + }, + { + name: 'dst', + type: 'address', + }, + { + name: 'wad', + type: 'uint256', + }, + ], + name: 'transferFrom', + outputs: [ + { + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + name: 'wad', + type: 'uint256', + }, + ], + name: 'withdraw', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'decimals', + outputs: [ + { + name: '', + type: 'uint8', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + name: '', + type: 'address', + }, + ], + name: 'balanceOf', + outputs: [ + { + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'symbol', + outputs: [ + { + name: '', + type: 'string', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + name: 'dst', + type: 'address', + }, + { + name: 'wad', + type: 'uint256', + }, + ], + name: 'transfer', + outputs: [ + { + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: false, + inputs: [], + name: 'deposit', + outputs: [], + payable: true, + stateMutability: 'payable', + type: 'function', + }, + { + constant: true, + inputs: [ + { + name: '', + type: 'address', + }, + { + name: '', + type: 'address', + }, + ], + name: 'allowance', + outputs: [ + { + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + payable: true, + stateMutability: 'payable', + type: 'fallback', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: 'src', + type: 'address', + }, + { + indexed: true, + name: 'guy', + type: 'address', + }, + { + indexed: false, + name: 'wad', + type: 'uint256', + }, + ], + name: 'Approval', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: 'src', + type: 'address', + }, + { + indexed: true, + name: 'dst', + type: 'address', + }, + { + indexed: false, + name: 'wad', + type: 'uint256', + }, + ], + name: 'Transfer', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: 'dst', + type: 'address', + }, + { + indexed: false, + name: 'wad', + type: 'uint256', + }, + ], + name: 'Deposit', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: 'src', + type: 'address', + }, + { + indexed: false, + name: 'wad', + type: 'uint256', + }, + ], + name: 'Withdrawal', + type: 'event', + }, +] + +var _a$h +/** + * List of all the networks supported by the Uniswap Interface + */ +var SupportedChainId +;(function (SupportedChainId) { + SupportedChainId[(SupportedChainId['MAINNET'] = 1)] = 'MAINNET' + SupportedChainId[(SupportedChainId['ROPSTEN'] = 3)] = 'ROPSTEN' + SupportedChainId[(SupportedChainId['RINKEBY'] = 4)] = 'RINKEBY' + SupportedChainId[(SupportedChainId['GOERLI'] = 5)] = 'GOERLI' + SupportedChainId[(SupportedChainId['KOVAN'] = 42)] = 'KOVAN' + SupportedChainId[(SupportedChainId['ARBITRUM_ONE'] = 42161)] = 'ARBITRUM_ONE' + SupportedChainId[(SupportedChainId['ARBITRUM_RINKEBY'] = 421611)] = 'ARBITRUM_RINKEBY' + SupportedChainId[(SupportedChainId['OPTIMISM'] = 10)] = 'OPTIMISM' + SupportedChainId[(SupportedChainId['OPTIMISTIC_KOVAN'] = 69)] = 'OPTIMISTIC_KOVAN' + SupportedChainId[(SupportedChainId['POLYGON'] = 137)] = 'POLYGON' + SupportedChainId[(SupportedChainId['POLYGON_MUMBAI'] = 80001)] = 'POLYGON_MUMBAI' +})(SupportedChainId || (SupportedChainId = {})) +var CHAIN_IDS_TO_NAMES = + ((_a$h = {}), + (_a$h[SupportedChainId.MAINNET] = 'mainnet'), + (_a$h[SupportedChainId.ROPSTEN] = 'ropsten'), + (_a$h[SupportedChainId.RINKEBY] = 'rinkeby'), + (_a$h[SupportedChainId.GOERLI] = 'goerli'), + (_a$h[SupportedChainId.KOVAN] = 'kovan'), + (_a$h[SupportedChainId.POLYGON] = 'polygon'), + (_a$h[SupportedChainId.POLYGON_MUMBAI] = 'polygon_mumbai'), + (_a$h[SupportedChainId.ARBITRUM_ONE] = 'arbitrum'), + (_a$h[SupportedChainId.ARBITRUM_RINKEBY] = 'arbitrum_rinkeby'), + (_a$h[SupportedChainId.OPTIMISM] = 'optimism'), + (_a$h[SupportedChainId.OPTIMISTIC_KOVAN] = 'optimistic_kovan'), + _a$h) +/** + * Array of all the supported chain IDs + */ +var ALL_SUPPORTED_CHAIN_IDS = Object.values(SupportedChainId).filter(function (id) { + return typeof id === 'number' +}) +var SUPPORTED_GAS_ESTIMATE_CHAIN_IDS = [SupportedChainId.MAINNET, SupportedChainId.POLYGON] +/** + * All the chain IDs that are running the Ethereum protocol. + */ +;[ + SupportedChainId.MAINNET, + SupportedChainId.ROPSTEN, + SupportedChainId.RINKEBY, + SupportedChainId.GOERLI, + SupportedChainId.KOVAN, + SupportedChainId.POLYGON, + SupportedChainId.POLYGON_MUMBAI, +] +/** + * Controls some L2 specific behavior, e.g. slippage tolerance, special UI behavior. + * The expectation is that all of these networks have immediate transaction confirmation. + */ +var L2_CHAIN_IDS = [ + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, +] + +var DEFAULT_NETWORKS = [ + SupportedChainId.MAINNET, + SupportedChainId.ROPSTEN, + SupportedChainId.RINKEBY, + SupportedChainId.GOERLI, + SupportedChainId.KOVAN, +] +function constructSameAddressMap(address, additionalNetworks) { + if (additionalNetworks === void 0) { + additionalNetworks = [] + } + return DEFAULT_NETWORKS.concat(additionalNetworks).reduce(function (memo, chainId) { + memo[chainId] = address + return memo + }, {}) } -var Column = styled.div(templateObject_1$1j || (templateObject_1$1j = __makeTemplateObject(["\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n"], ["\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n"]))); -var ColumnCenter = styled(Column)(templateObject_2$Z || (templateObject_2$Z = __makeTemplateObject(["\n width: 100%;\n align-items: center;\n"], ["\n width: 100%;\n align-items: center;\n"]))); -var AutoColumn = styled.div(templateObject_3$Q || (templateObject_3$Q = __makeTemplateObject(["\n display: grid;\n grid-auto-rows: auto;\n grid-row-gap: ", ";\n justify-items: ", ";\n"], ["\n display: grid;\n grid-auto-rows: auto;\n grid-row-gap: ", ";\n justify-items: ", ";\n"])), function (_a) { - var gap = _a.gap; - return (gap === 'sm' && '8px') || (gap === 'md' && '12px') || (gap === 'lg' && '24px') || gap; -}, function (_a) { - var justify = _a.justify; - return justify && justify; -}); -var templateObject_1$1j, templateObject_2$Z, templateObject_3$Q; +var _a$g, _b$6, _c$4, _d$3, _e$2, _f$1, _g$1, _h$1 +var UNI_ADDRESS = constructSameAddressMap('0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984') +var MULTICALL_ADDRESS = __assign( + __assign( + {}, + constructSameAddressMap('0x1F98415757620B543A52E61c46B32eB19261F984', [ + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.OPTIMISM, + SupportedChainId.POLYGON_MUMBAI, + SupportedChainId.POLYGON, + ]) + ), + ((_a$g = {}), + (_a$g[SupportedChainId.ARBITRUM_ONE] = '0xadF885960B47eA2CD9B55E6DAc6B42b7Cb2806dB'), + (_a$g[SupportedChainId.ARBITRUM_RINKEBY] = '0xa501c031958F579dB7676fF1CE78AD305794d579'), + _a$g) +) +var V2_FACTORY_ADDRESSES = constructSameAddressMap(FACTORY_ADDRESS) +var V2_ROUTER_ADDRESS = constructSameAddressMap('0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D') +var V3_ROUTER_ADDRESS = constructSameAddressMap('0xE592427A0AEce92De3Edee1F18E0157C05861564', [ + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON, + SupportedChainId.POLYGON_MUMBAI, +]) +var SWAP_ROUTER_ADDRESSES = constructSameAddressMap('0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45', [ + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON, + SupportedChainId.POLYGON_MUMBAI, +]) +/** + * The oldest V0 governance address + */ +constructSameAddressMap('0x5e4be8Bc9637f0EAA1A755019e06A68ce081D58F') +/** + * The older V1 governance address + */ +;(_b$6 = {}), (_b$6[SupportedChainId.MAINNET] = '0xC4e172459f1E7939D522503B81AFAaC1014CE6F6'), _b$6 +/** + * The latest governor bravo that is currently admin of timelock + */ +;(_c$4 = {}), (_c$4[SupportedChainId.MAINNET] = '0x408ED6354d4973f66138C91495F2f2FCbd8724C3'), _c$4 +constructSameAddressMap('0x1a9C8182C09F50C8318d769245beA52c32BE35BC') +var MERKLE_DISTRIBUTOR_ADDRESS = + ((_d$3 = {}), (_d$3[SupportedChainId.MAINNET] = '0x090D4613473dEE047c3f2706764f49E0821D256e'), _d$3) +var ARGENT_WALLET_DETECTOR_ADDRESS = + ((_e$2 = {}), (_e$2[SupportedChainId.MAINNET] = '0xeca4B0bDBf7c55E9b7925919d03CbF8Dc82537E8'), _e$2) +var V3_CORE_FACTORY_ADDRESSES = constructSameAddressMap(FACTORY_ADDRESS$1, [ + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON_MUMBAI, + SupportedChainId.POLYGON, +]) +var QUOTER_ADDRESSES = constructSameAddressMap('0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6', [ + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON_MUMBAI, + SupportedChainId.POLYGON, +]) +constructSameAddressMap('0xC36442b4a4522E871399CD717aBDD847Ab11FE88', [ + SupportedChainId.OPTIMISM, + SupportedChainId.OPTIMISTIC_KOVAN, + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON_MUMBAI, + SupportedChainId.POLYGON, +]) +var ENS_REGISTRAR_ADDRESSES = + ((_f$1 = {}), + (_f$1[SupportedChainId.MAINNET] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'), + (_f$1[SupportedChainId.ROPSTEN] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'), + (_f$1[SupportedChainId.GOERLI] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'), + (_f$1[SupportedChainId.RINKEBY] = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'), + _f$1) +var SOCKS_CONTROLLER_ADDRESSES = + ((_g$1 = {}), (_g$1[SupportedChainId.MAINNET] = '0x65770b5283117639760beA3F867b69b3697a91dd'), _g$1) +constructSameAddressMap('0xA5644E29708357803b5A882D272c41cC0dF92B34', [ + SupportedChainId.ARBITRUM_ONE, + SupportedChainId.ARBITRUM_RINKEBY, + SupportedChainId.POLYGON_MUMBAI, + SupportedChainId.POLYGON, +]) +;(_h$1 = {}), + (_h$1[SupportedChainId.ARBITRUM_ONE] = '0xbfd8137f7d1516D3ea5cA83523914859ec47F573'), + (_h$1[SupportedChainId.ARBITRUM_RINKEBY] = '0xbfd8137f7d1516D3ea5cA83523914859ec47F573'), + _h$1 + +var _a$f, _b$5 +var AMPL = new Token(SupportedChainId.MAINNET, '0xD46bA6D942050d489DBd938a2C909A5d5039A161', 9, 'AMPL', 'Ampleforth') +var DAI = new Token(SupportedChainId.MAINNET, '0x6B175474E89094C44Da98b954EedeAC495271d0F', 18, 'DAI', 'Dai Stablecoin') +var DAI_ARBITRUM_ONE = new Token( + SupportedChainId.ARBITRUM_ONE, + '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', + 18, + 'DAI', + 'Dai stable coin' +) +var DAI_OPTIMISM = new Token( + SupportedChainId.OPTIMISM, + '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', + 18, + 'DAI', + 'Dai stable coin' +) +var USDC = new Token(SupportedChainId.MAINNET, '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', 6, 'USDC', 'USD//C') +var USDC_ARBITRUM = new Token( + SupportedChainId.ARBITRUM_ONE, + '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8', + 6, + 'USDC', + 'USD//C' +) +var USDC_POLYGON = new Token( + SupportedChainId.POLYGON, + '0x2791bca1f2de4661ed88a30c99a7a9449aa84174', + 6, + 'USDC', + 'USD//C' +) +var DAI_POLYGON = new Token( + SupportedChainId.POLYGON, + '0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063', + 18, + 'DAI', + 'Dai Stablecoin' +) +var USDT_POLYGON = new Token( + SupportedChainId.POLYGON, + '0xc2132d05d31c914a87c6611c10748aeb04b58e8f', + 6, + 'USDT', + 'Tether USD' +) +var WBTC_POLYGON = new Token( + SupportedChainId.POLYGON, + '0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6', + 8, + 'WBTC', + 'Wrapped BTC' +) +var USDC_OPTIMISM = new Token( + SupportedChainId.OPTIMISM, + '0x7F5c764cBc14f9669B88837ca1490cCa17c31607', + 6, + 'USDC', + 'USD//C' +) +var USDT = new Token(SupportedChainId.MAINNET, '0xdAC17F958D2ee523a2206206994597C13D831ec7', 6, 'USDT', 'Tether USD') +var USDT_ARBITRUM_ONE = new Token( + SupportedChainId.ARBITRUM_ONE, + '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9', + 6, + 'USDT', + 'Tether USD' +) +var USDT_OPTIMISM = new Token( + SupportedChainId.OPTIMISM, + '0x94b008aA00579c1307B0EF2c499aD98a8ce58e58', + 6, + 'USDT', + 'Tether USD' +) +var WBTC = new Token(SupportedChainId.MAINNET, '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', 8, 'WBTC', 'Wrapped BTC') +var WBTC_ARBITRUM_ONE = new Token( + SupportedChainId.ARBITRUM_ONE, + '0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f', + 8, + 'WBTC', + 'Wrapped BTC' +) +var WBTC_OPTIMISM = new Token( + SupportedChainId.OPTIMISM, + '0x68f180fcCe6836688e9084f035309E29Bf0A2095', + 8, + 'WBTC', + 'Wrapped BTC' +) +var FEI = new Token(SupportedChainId.MAINNET, '0x956F47F50A910163D8BF957Cf5846D573E7f87CA', 18, 'FEI', 'Fei USD') +var TRIBE = new Token(SupportedChainId.MAINNET, '0xc7283b66Eb1EB5FB86327f08e1B5816b0720212B', 18, 'TRIBE', 'Tribe') +var FRAX = new Token(SupportedChainId.MAINNET, '0x853d955aCEf822Db058eb8505911ED77F175b99e', 18, 'FRAX', 'Frax') +var FXS = new Token(SupportedChainId.MAINNET, '0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0', 18, 'FXS', 'Frax Share') +var renBTC = new Token(SupportedChainId.MAINNET, '0xEB4C2781e4ebA804CE9a9803C67d0893436bB27D', 8, 'renBTC', 'renBTC') +var ETH2X_FLI = new Token( + SupportedChainId.MAINNET, + '0xAa6E8127831c9DE45ae56bB1b0d4D4Da6e5665BD', + 18, + 'ETH2x-FLI', + 'ETH 2x Flexible Leverage Index' +) +var sETH2 = new Token( + SupportedChainId.MAINNET, + '0xFe2e637202056d30016725477c5da089Ab0A043A', + 18, + 'sETH2', + 'StakeWise Staked ETH2' +) +var rETH2 = new Token( + SupportedChainId.MAINNET, + '0x20BC832ca081b91433ff6c17f85701B6e92486c5', + 18, + 'rETH2', + 'StakeWise Reward ETH2' +) +var SWISE = new Token(SupportedChainId.MAINNET, '0x48C3399719B582dD63eB5AADf12A40B4C3f52FA2', 18, 'SWISE', 'StakeWise') +var WETH_POLYGON_MUMBAI = new Token( + SupportedChainId.POLYGON_MUMBAI, + '0xa6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa', + 18, + 'WETH', + 'Wrapped Ether' +) +var WETH_POLYGON = new Token( + SupportedChainId.POLYGON, + '0x7ceb23fd6bc0add59e62ac25578270cff1b9f619', + 18, + 'WETH', + 'Wrapped Ether' +) +var UNI = + ((_a$f = {}), + (_a$f[SupportedChainId.MAINNET] = new Token(SupportedChainId.MAINNET, UNI_ADDRESS[1], 18, 'UNI', 'Uniswap')), + (_a$f[SupportedChainId.RINKEBY] = new Token(SupportedChainId.RINKEBY, UNI_ADDRESS[4], 18, 'UNI', 'Uniswap')), + (_a$f[SupportedChainId.ROPSTEN] = new Token(SupportedChainId.ROPSTEN, UNI_ADDRESS[3], 18, 'UNI', 'Uniswap')), + (_a$f[SupportedChainId.GOERLI] = new Token(SupportedChainId.GOERLI, UNI_ADDRESS[5], 18, 'UNI', 'Uniswap')), + (_a$f[SupportedChainId.KOVAN] = new Token(SupportedChainId.KOVAN, UNI_ADDRESS[42], 18, 'UNI', 'Uniswap')), + _a$f) +var WRAPPED_NATIVE_CURRENCY = __assign( + __assign({}, WETH9), + ((_b$5 = {}), + (_b$5[SupportedChainId.OPTIMISM] = new Token( + SupportedChainId.OPTIMISM, + '0x4200000000000000000000000000000000000006', + 18, + 'WETH', + 'Wrapped Ether' + )), + (_b$5[SupportedChainId.OPTIMISTIC_KOVAN] = new Token( + SupportedChainId.OPTIMISTIC_KOVAN, + '0x4200000000000000000000000000000000000006', + 18, + 'WETH', + 'Wrapped Ether' + )), + (_b$5[SupportedChainId.ARBITRUM_ONE] = new Token( + SupportedChainId.ARBITRUM_ONE, + '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1', + 18, + 'WETH', + 'Wrapped Ether' + )), + (_b$5[SupportedChainId.ARBITRUM_RINKEBY] = new Token( + SupportedChainId.ARBITRUM_RINKEBY, + '0xB47e6A5f8b33b3F17603C83a0535A9dcD7E32681', + 18, + 'WETH', + 'Wrapped Ether' + )), + (_b$5[SupportedChainId.POLYGON] = new Token( + SupportedChainId.POLYGON, + '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270', + 18, + 'WMATIC', + 'Wrapped MATIC' + )), + (_b$5[SupportedChainId.POLYGON_MUMBAI] = new Token( + SupportedChainId.POLYGON_MUMBAI, + '0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889', + 18, + 'WMATIC', + 'Wrapped MATIC' + )), + _b$5) +) +function isMatic(chainId) { + return chainId === SupportedChainId.POLYGON_MUMBAI || chainId === SupportedChainId.POLYGON +} +var MaticNativeCurrency = /** @class */ (function (_super) { + __extends(MaticNativeCurrency, _super) + function MaticNativeCurrency(chainId) { + var _this = this + if (!isMatic(chainId)) throw new Error('Not matic') + _this = _super.call(this, chainId, 18, 'MATIC', 'Polygon Matic') || this + return _this + } + MaticNativeCurrency.prototype.equals = function (other) { + return other.isNative && other.chainId === this.chainId + } + Object.defineProperty(MaticNativeCurrency.prototype, 'wrapped', { + get() { + if (!isMatic(this.chainId)) throw new Error('Not matic') + return WRAPPED_NATIVE_CURRENCY[this.chainId] + }, + enumerable: false, + configurable: true, + }) + return MaticNativeCurrency +})(NativeCurrency) +var ExtendedEther = /** @class */ (function (_super) { + __extends(ExtendedEther, _super) + function ExtendedEther() { + return (_super !== null && _super.apply(this, arguments)) || this + } + Object.defineProperty(ExtendedEther.prototype, 'wrapped', { + get() { + if (this.chainId in WRAPPED_NATIVE_CURRENCY) return WRAPPED_NATIVE_CURRENCY[this.chainId] + throw new Error('Unsupported chain ID') + }, + enumerable: false, + configurable: true, + }) + ExtendedEther.onChain = function (chainId) { + var _a + return (_a = this._cachedExtendedEther[chainId]) !== null && _a !== void 0 + ? _a + : (this._cachedExtendedEther[chainId] = new ExtendedEther(chainId)) + } + ExtendedEther._cachedExtendedEther = {} + return ExtendedEther +})(Ether) +var cachedNativeCurrency = {} +function nativeOnChain(chainId) { + var _a + return (_a = cachedNativeCurrency[chainId]) !== null && _a !== void 0 + ? _a + : (cachedNativeCurrency[chainId] = isMatic(chainId) + ? new MaticNativeCurrency(chainId) + : ExtendedEther.onChain(chainId)) +} -var Row$1 = styled(Box)(templateObject_1$1i || (templateObject_1$1i = __makeTemplateObject(["\n width: ", ";\n display: flex;\n padding: 0;\n align-items: ", ";\n justify-content: ", ";\n padding: ", ";\n border: ", ";\n border-radius: ", ";\n"], ["\n width: ", ";\n display: flex;\n padding: 0;\n align-items: ", ";\n justify-content: ", ";\n padding: ", ";\n border: ", ";\n border-radius: ", ";\n"])), function (_a) { - var width = _a.width; - return width !== null && width !== void 0 ? width : '100%'; -}, function (_a) { - var align = _a.align; - return align !== null && align !== void 0 ? align : 'center'; -}, function (_a) { - var justify = _a.justify; - return justify !== null && justify !== void 0 ? justify : 'flex-start'; -}, function (_a) { - var padding = _a.padding; - return padding; -}, function (_a) { - var border = _a.border; - return border; -}, function (_a) { - var borderRadius = _a.borderRadius; - return borderRadius; -}); -var RowBetween = styled(Row$1)(templateObject_2$Y || (templateObject_2$Y = __makeTemplateObject(["\n justify-content: space-between;\n"], ["\n justify-content: space-between;\n"]))); -styled.div(templateObject_3$P || (templateObject_3$P = __makeTemplateObject(["\n display: flex;\n align-items: flex-end;\n"], ["\n display: flex;\n align-items: flex-end;\n"]))); -var AutoRow = styled(Row$1)(templateObject_4$E || (templateObject_4$E = __makeTemplateObject(["\n flex-wrap: wrap;\n margin: ", ";\n justify-content: ", ";\n\n & > * {\n margin: ", " !important;\n }\n"], ["\n flex-wrap: wrap;\n margin: ", ";\n justify-content: ", ";\n\n & > * {\n margin: ", " !important;\n }\n"])), function (_a) { - var gap = _a.gap; - return gap && "-" + gap; -}, function (_a) { - var justify = _a.justify; - return justify && justify; -}, function (_a) { - var gap = _a.gap; - return gap; -}); -var RowFixed = styled(Row$1)(templateObject_5$v || (templateObject_5$v = __makeTemplateObject(["\n width: fit-content;\n margin: ", ";\n"], ["\n width: fit-content;\n margin: ", ";\n"])), function (_a) { - var gap = _a.gap; - return gap && "-" + gap; -}); -var templateObject_1$1i, templateObject_2$Y, templateObject_3$P, templateObject_4$E, templateObject_5$v; +// returns null on errors +function useContract(addressOrAddressMap, ABI, withSignerIfPossible) { + if (withSignerIfPossible === void 0) { + withSignerIfPossible = true + } + var _a = useActiveWeb3React(), + library = _a.library, + account = _a.account, + chainId = _a.chainId + return useMemo( + function () { + if (!addressOrAddressMap || !ABI || !library || !chainId) return null + var address + if (typeof addressOrAddressMap === 'string') address = addressOrAddressMap + else address = addressOrAddressMap[chainId] + if (!address) return null + try { + return getContract(address, ABI, library, withSignerIfPossible && account ? account : undefined) + } catch (error) { + console.error('Failed to get contract', error) + return null + } + }, + [addressOrAddressMap, ABI, library, chainId, withSignerIfPossible, account] + ) +} +function useTokenContract(tokenAddress, withSignerIfPossible) { + return useContract(tokenAddress, ERC20ABI, withSignerIfPossible) +} +function useWETHContract(withSignerIfPossible) { + var _a + var chainId = useActiveWeb3React().chainId + return useContract( + chainId ? ((_a = WRAPPED_NATIVE_CURRENCY[chainId]) === null || _a === void 0 ? void 0 : _a.address) : undefined, + WETH_ABI, + withSignerIfPossible + ) +} +function useERC721Contract(nftAddress) { + return useContract(nftAddress, ERC721_ABI, false) +} +function useERC1155Contract(nftAddress) { + return useContract(nftAddress, ERC1155_ABI, false) +} +function useArgentWalletDetectorContract() { + return useContract(ARGENT_WALLET_DETECTOR_ADDRESS, ARGENT_WALLET_DETECTOR_ABI, false) +} +function useENSRegistrarContract(withSignerIfPossible) { + return useContract(ENS_REGISTRAR_ADDRESSES, ENS_ABI, withSignerIfPossible) +} +function useENSResolverContract(address, withSignerIfPossible) { + return useContract(address, ENS_PUBLIC_RESOLVER_ABI, withSignerIfPossible) +} +function useBytes32TokenContract(tokenAddress, withSignerIfPossible) { + return useContract(tokenAddress, ERC20_BYTES32_ABI, withSignerIfPossible) +} +function useEIP2612Contract(tokenAddress) { + return useContract(tokenAddress, EIP_2612, false) +} +function useV2RouterContract() { + return useContract(V2_ROUTER_ADDRESS, abi$3, true) +} +function useInterfaceMulticall() { + return useContract(MULTICALL_ADDRESS, abi$1, false) +} +function useMerkleDistributorContract() { + return useContract(MERKLE_DISTRIBUTOR_ADDRESS, abi$5, true) +} +function useV3Quoter() { + return useContract(QUOTER_ADDRESSES, abi$2) +} -var InputPanel$1 = styled.div(templateObject_1$1h || (templateObject_1$1h = __makeTemplateObject(["\n ", "\n position: relative;\n border-radius: 1.25rem;\n background-color: ", ";\n z-index: 1;\n width: 100%;\n"], ["\n ", "\n position: relative;\n border-radius: 1.25rem;\n background-color: ", ";\n z-index: 1;\n width: 100%;\n"])), function (_a) { - var theme = _a.theme; - return theme.flexColumnNoWrap; -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}); -var ContainerRow = styled.div(templateObject_2$X || (templateObject_2$X = __makeTemplateObject(["\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 1.25rem;\n border: 1px solid ", ";\n transition: border-color 300ms ", ",\n color 500ms ", ";\n background-color: ", ";\n"], ["\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 1.25rem;\n border: 1px solid ", ";\n transition: border-color 300ms ", ",\n color 500ms ", ";\n background-color: ", ";\n"])), function (_a) { - var error = _a.error, theme = _a.theme; - return (error ? theme.red1 : theme.bg2); -}, function (_a) { - var error = _a.error; - return (error ? 'step-end' : 'step-start'); -}, function (_a) { - var error = _a.error; - return (error ? 'step-end' : 'step-start'); -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}); -var InputContainer = styled.div(templateObject_3$O || (templateObject_3$O = __makeTemplateObject(["\n flex: 1;\n padding: 1rem;\n"], ["\n flex: 1;\n padding: 1rem;\n"]))); -var Input$2 = styled.input(templateObject_4$D || (templateObject_4$D = __makeTemplateObject(["\n font-size: 1.25rem;\n outline: none;\n border: none;\n flex: 1 1 auto;\n width: 0;\n background-color: ", ";\n transition: color 300ms ", ";\n color: ", ";\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 500;\n width: 100%;\n ::placeholder {\n color: ", ";\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: ", ";\n }\n"], ["\n font-size: 1.25rem;\n outline: none;\n border: none;\n flex: 1 1 auto;\n width: 0;\n background-color: ", ";\n transition: color 300ms ", ";\n color: ", ";\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 500;\n width: 100%;\n ::placeholder {\n color: ", ";\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: ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var error = _a.error; - return (error ? 'step-end' : 'step-start'); -}, function (_a) { - var error = _a.error, theme = _a.theme; - return (error ? theme.red1 : theme.text1); -}, function (_a) { - var theme = _a.theme; - return theme.text4; -}, function (_a) { - var theme = _a.theme; - return theme.text4; -}); -function AddressInputPanel(_a) { - var id = _a.id, _b = _a.className, className = _b === void 0 ? 'recipient-address-input' : _b, label = _a.label, placeholder = _a.placeholder, value = _a.value, onChange = _a.onChange; - var chainId = useActiveWeb3React().chainId; - var theme = useContext(ThemeContext); - var _c = useENS(value), address = _c.address, loading = _c.loading, name = _c.name; - var handleInput = useCallback(function (event) { - var input = event.target.value; - var withoutSpaces = input.replace(/\s+/g, ''); - onChange(withoutSpaces); - }, [onChange]); - var error = Boolean(value.length > 0 && !loading && !address); - return (jsx(InputPanel$1, __assign({ id: id }, { children: jsx(ContainerRow, __assign({ error: error }, { children: jsx(InputContainer, { children: jsxs(AutoColumn, __assign({ gap: "md" }, { children: [jsxs(RowBetween, { children: [jsx(ThemedText.Black, __assign({ color: theme.text2, fontWeight: 500, fontSize: 14 }, { children: label !== null && label !== void 0 ? label : jsx(Trans, { children: "Recipient" }, void 0) }), void 0), address && chainId && (jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, name !== null && name !== void 0 ? name : address, ExplorerDataType.ADDRESS), style: { fontSize: '14px' } }, { children: jsx(Trans, { children: "(View on Explorer)" }, void 0) }), void 0))] }, void 0), jsx(Input$2, { className: className, type: "text", autoComplete: "off", autoCorrect: "off", autoCapitalize: "off", spellCheck: "false", placeholder: placeholder !== null && placeholder !== void 0 ? placeholder : t(templateObject_5$u || (templateObject_5$u = __makeTemplateObject(["Wallet Address or ENS name"], ["Wallet Address or ENS name"]))), error: error, pattern: "^(0x[a-fA-F0-9]{40})$", onChange: handleInput, value: value }, void 0)] }), void 0) }, void 0) }), void 0) }), void 0)); -} -var templateObject_1$1h, templateObject_2$X, templateObject_3$O, templateObject_4$D, templateObject_5$u; +var _a$e +var multicall = createMulticall() +var reducer = combineReducers(((_a$e = {}), (_a$e[multicall.reducerPath] = multicall.reducer), _a$e)) +createStore(reducer) +function MulticallUpdater() { + var latestBlockNumber = useBlockNumber() + var chainId = useActiveWeb3React().chainId + var contract = useInterfaceMulticall() + return jsx(multicall.Updater, { chainId, latestBlockNumber, contract }, void 0) +} + +function useMultipleContractSingleData() { + var _a + var args = [] + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i] + } + var _b = useCallContext(), + chainId = _b.chainId, + latestBlock = _b.latestBlock + return (_a = multicall.hooks).useMultipleContractSingleData.apply( + _a, + __spreadArray([chainId, latestBlock], __read(args), false) + ) +} +function useSingleCallResult() { + var _a + var args = [] + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i] + } + var _b = useCallContext(), + chainId = _b.chainId, + latestBlock = _b.latestBlock + return (_a = multicall.hooks).useSingleCallResult.apply( + _a, + __spreadArray([chainId, latestBlock], __read(args), false) + ) +} +function useSingleContractMultipleData() { + var _a + var args = [] + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i] + } + var _b = useCallContext(), + chainId = _b.chainId, + latestBlock = _b.latestBlock + return (_a = multicall.hooks).useSingleContractMultipleData.apply( + _a, + __spreadArray([chainId, latestBlock], __read(args), false) + ) +} +function useSingleContractWithCallData() { + var _a + var args = [] + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i] + } + var _b = useCallContext(), + chainId = _b.chainId, + latestBlock = _b.latestBlock + return (_a = multicall.hooks).useSingleContractWithCallData.apply( + _a, + __spreadArray([chainId, latestBlock], __read(args), false) + ) +} +function useCallContext() { + var chainId = useActiveWeb3React().chainId + var latestBlock = useBlockNumber() + return { chainId, latestBlock } +} -function useTheme() { - return useContext(ThemeContext); +function safeNamehash(name) { + if (name === undefined) return undefined + try { + return namehash(name) + } catch (error) { + console.debug(error) + return undefined + } } -var BaseButton = styled(Button$1)(templateObject_1$1g || (templateObject_1$1g = __makeTemplateObject(["\n padding: ", ";\n width: ", ";\n font-weight: 500;\n text-align: center;\n border-radius: ", ";\n outline: none;\n border: 1px solid transparent;\n color: ", ";\n text-decoration: none;\n display: flex;\n justify-content: center;\n flex-wrap: nowrap;\n align-items: center;\n cursor: pointer;\n position: relative;\n z-index: 1;\n &:disabled {\n opacity: 50%;\n cursor: auto;\n pointer-events: none;\n }\n\n will-change: transform;\n transition: transform 450ms ease;\n transform: perspective(1px) translateZ(0);\n\n > * {\n user-select: none;\n }\n\n > a {\n text-decoration: none;\n }\n"], ["\n padding: ", ";\n width: ", ";\n font-weight: 500;\n text-align: center;\n border-radius: ", ";\n outline: none;\n border: 1px solid transparent;\n color: ", ";\n text-decoration: none;\n display: flex;\n justify-content: center;\n flex-wrap: nowrap;\n align-items: center;\n cursor: pointer;\n position: relative;\n z-index: 1;\n &:disabled {\n opacity: 50%;\n cursor: auto;\n pointer-events: none;\n }\n\n will-change: transform;\n transition: transform 450ms ease;\n transform: perspective(1px) translateZ(0);\n\n > * {\n user-select: none;\n }\n\n > a {\n text-decoration: none;\n }\n"])), function (_a) { - var padding = _a.padding; - return padding !== null && padding !== void 0 ? padding : '16px'; -}, function (_a) { - var width = _a.width; - return width !== null && width !== void 0 ? width : '100%'; -}, function (_a) { - var $borderRadius = _a.$borderRadius; - return $borderRadius !== null && $borderRadius !== void 0 ? $borderRadius : '20px'; -}, function (_a) { - var theme = _a.theme; - return theme.text1; -}); -var ButtonPrimary = styled(BaseButton)(templateObject_2$W || (templateObject_2$W = __makeTemplateObject(["\n background-color: ", ";\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n background-color: ", ";\n color: ", ";\n cursor: auto;\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n"], ["\n background-color: ", ";\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n background-color: ", ";\n color: ", ";\n cursor: auto;\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.primary1; -}, function (_a) { - var theme = _a.theme; - return darken(0.05, theme.primary1); -}, function (_a) { - var theme = _a.theme; - return darken(0.05, theme.primary1); -}, function (_a) { - var theme = _a.theme; - return darken(0.05, theme.primary1); -}, function (_a) { - var theme = _a.theme; - return darken(0.1, theme.primary1); -}, function (_a) { - var theme = _a.theme; - return darken(0.1, theme.primary1); -}, function (_a) { - var theme = _a.theme, altDisabledStyle = _a.altDisabledStyle, disabled = _a.disabled; - return altDisabledStyle ? (disabled ? theme.primary1 : theme.bg2) : theme.bg2; -}, function (_a) { - var altDisabledStyle = _a.altDisabledStyle, disabled = _a.disabled, theme = _a.theme; - return altDisabledStyle ? (disabled ? theme.white : theme.text2) : theme.text2; -}); -var ButtonLight = styled(BaseButton)(templateObject_3$N || (templateObject_3$N = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n font-size: 16px;\n font-weight: 500;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n :disabled {\n opacity: 0.4;\n :hover {\n cursor: auto;\n background-color: ", ";\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n }\n"], ["\n background-color: ", ";\n color: ", ";\n font-size: 16px;\n font-weight: 500;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n :disabled {\n opacity: 0.4;\n :hover {\n cursor: auto;\n background-color: ", ";\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.primary5; -}, function (_a) { - var theme = _a.theme; - return theme.primaryText1; -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return !disabled && darken(0.03, theme.primary5); -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return !disabled && darken(0.03, theme.primary5); -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return !disabled && darken(0.03, theme.primary5); -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return !disabled && darken(0.05, theme.primary5); -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return !disabled && darken(0.05, theme.primary5); -}, function (_a) { - var theme = _a.theme; - return theme.primary5; -}); -var ButtonGray = styled(BaseButton)(templateObject_4$C || (templateObject_4$C = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n font-size: 16px;\n font-weight: 500;\n\n &:hover {\n background-color: ", ";\n }\n &:active {\n background-color: ", ";\n }\n"], ["\n background-color: ", ";\n color: ", ";\n font-size: 16px;\n font-weight: 500;\n\n &:hover {\n background-color: ", ";\n }\n &:active {\n background-color: ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var theme = _a.theme; - return theme.text2; -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return !disabled && darken(0.05, theme.bg2); -}, function (_a) { - var theme = _a.theme, disabled = _a.disabled; - return !disabled && darken(0.1, theme.bg2); -}); -var ButtonSecondary = styled(BaseButton)(templateObject_5$t || (templateObject_5$t = __makeTemplateObject(["\n border: 1px solid ", ";\n color: ", ";\n background-color: transparent;\n font-size: 16px;\n border-radius: 12px;\n padding: ", ";\n\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n border: 1px solid ", ";\n }\n &:hover {\n border: 1px solid ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n border: 1px solid ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n a:hover {\n text-decoration: none;\n }\n"], ["\n border: 1px solid ", ";\n color: ", ";\n background-color: transparent;\n font-size: 16px;\n border-radius: 12px;\n padding: ", ";\n\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n border: 1px solid ", ";\n }\n &:hover {\n border: 1px solid ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n border: 1px solid ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n a:hover {\n text-decoration: none;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.primary4; -}, function (_a) { - var theme = _a.theme; - return theme.primary1; -}, function (_a) { - var padding = _a.padding; - return (padding ? padding : '10px'); -}, function (_a) { - var theme = _a.theme; - return theme.primary4; -}, function (_a) { - var theme = _a.theme; - return theme.primary3; -}, function (_a) { - var theme = _a.theme; - return theme.primary3; -}, function (_a) { - var theme = _a.theme; - return theme.primary4; -}, function (_a) { - var theme = _a.theme; - return theme.primary3; -}); -var ButtonOutlined = styled(BaseButton)(templateObject_6$n || (templateObject_6$n = __makeTemplateObject(["\n border: 1px solid ", ";\n background-color: transparent;\n color: ", ";\n &:focus {\n box-shadow: 0 0 0 1px ", ";\n }\n &:hover {\n box-shadow: 0 0 0 1px ", ";\n }\n &:active {\n box-shadow: 0 0 0 1px ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"], ["\n border: 1px solid ", ";\n background-color: transparent;\n color: ", ";\n &:focus {\n box-shadow: 0 0 0 1px ", ";\n }\n &:hover {\n box-shadow: 0 0 0 1px ", ";\n }\n &:active {\n box-shadow: 0 0 0 1px ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}, function (_a) { - var theme = _a.theme; - return theme.text1; -}, function (_a) { - var theme = _a.theme; - return theme.bg4; -}, function (_a) { - var theme = _a.theme; - return theme.bg4; -}, function (_a) { - var theme = _a.theme; - return theme.bg4; -}); -styled(BaseButton)(templateObject_7$j || (templateObject_7$j = __makeTemplateObject(["\n background-color: ", ";\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n background-color: ", ";\n opacity: 50%;\n cursor: auto;\n }\n"], ["\n background-color: ", ";\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n background-color: ", ";\n opacity: 50%;\n cursor: auto;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.yellow3; -}, function (_a) { - var theme = _a.theme; - return darken(0.05, theme.yellow3); -}, function (_a) { - var theme = _a.theme; - return darken(0.05, theme.yellow3); -}, function (_a) { - var theme = _a.theme; - return darken(0.05, theme.yellow3); -}, function (_a) { - var theme = _a.theme; - return darken(0.1, theme.yellow3); -}, function (_a) { - var theme = _a.theme; - return darken(0.1, theme.yellow3); -}, function (_a) { - var theme = _a.theme; - return theme.yellow3; -}); -var ButtonEmpty = styled(BaseButton)(templateObject_8$g || (templateObject_8$g = __makeTemplateObject(["\n background-color: transparent;\n color: ", ";\n display: flex;\n justify-content: center;\n align-items: center;\n\n &:focus {\n text-decoration: underline;\n }\n &:hover {\n text-decoration: none;\n }\n &:active {\n text-decoration: none;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"], ["\n background-color: transparent;\n color: ", ";\n display: flex;\n justify-content: center;\n align-items: center;\n\n &:focus {\n text-decoration: underline;\n }\n &:hover {\n text-decoration: none;\n }\n &:active {\n text-decoration: none;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.primary1; -}); -styled(BaseButton)(templateObject_9$f || (templateObject_9$f = __makeTemplateObject(["\n padding: 0;\n width: fit-content;\n background: none;\n text-decoration: none;\n &:focus {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n text-decoration: underline;\n }\n &:hover {\n // text-decoration: underline;\n opacity: 0.9;\n }\n &:active {\n text-decoration: underline;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"], ["\n padding: 0;\n width: fit-content;\n background: none;\n text-decoration: none;\n &:focus {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n text-decoration: underline;\n }\n &:hover {\n // text-decoration: underline;\n opacity: 0.9;\n }\n &:active {\n text-decoration: underline;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n"]))); -var ButtonConfirmedStyle = styled(BaseButton)(templateObject_10$b || (templateObject_10$b = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n /* border: 1px solid ", "; */\n\n &:disabled {\n opacity: 50%;\n background-color: ", ";\n color: ", ";\n cursor: auto;\n }\n"], ["\n background-color: ", ";\n color: ", ";\n /* border: 1px solid ", "; */\n\n &:disabled {\n opacity: 50%;\n background-color: ", ";\n color: ", ";\n cursor: auto;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.bg3; -}, function (_a) { - var theme = _a.theme; - return theme.text1; -}, function (_a) { - var theme = _a.theme; - return theme.green1; -}, function (_a) { - var theme = _a.theme; - return theme.bg2; -}, function (_a) { - var theme = _a.theme; - return theme.text2; -}); -var ButtonErrorStyle = styled(BaseButton)(templateObject_11$9 || (templateObject_11$9 = __makeTemplateObject(["\n background-color: ", ";\n border: 1px solid ", ";\n\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n box-shadow: none;\n background-color: ", ";\n border: 1px solid ", ";\n }\n"], ["\n background-color: ", ";\n border: 1px solid ", ";\n\n &:focus {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n box-shadow: 0 0 0 1pt ", ";\n background-color: ", ";\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n box-shadow: none;\n background-color: ", ";\n border: 1px solid ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.red1; -}, function (_a) { - var theme = _a.theme; - return theme.red1; -}, function (_a) { - var theme = _a.theme; - return darken(0.05, theme.red1); -}, function (_a) { - var theme = _a.theme; - return darken(0.05, theme.red1); -}, function (_a) { - var theme = _a.theme; - return darken(0.05, theme.red1); -}, function (_a) { - var theme = _a.theme; - return darken(0.1, theme.red1); -}, function (_a) { - var theme = _a.theme; - return darken(0.1, theme.red1); -}, function (_a) { - var theme = _a.theme; - return theme.red1; -}, function (_a) { - var theme = _a.theme; - return theme.red1; -}); -function ButtonConfirmed(_a) { - var confirmed = _a.confirmed, altDisabledStyle = _a.altDisabledStyle, rest = __rest(_a, ["confirmed", "altDisabledStyle"]); - if (confirmed) { - return jsx(ButtonConfirmedStyle, __assign({}, rest), void 0); - } - else { - return jsx(ButtonPrimary, __assign({}, rest, { altDisabledStyle: altDisabledStyle }), void 0); - } -} -function ButtonError(_a) { - var error = _a.error, rest = __rest(_a, ["error"]); - if (error) { - return jsx(ButtonErrorStyle, __assign({}, rest), void 0); - } - else { - return jsx(ButtonPrimary, __assign({}, rest), void 0); - } -} -styled(ButtonOutlined)(templateObject_12$9 || (templateObject_12$9 = __makeTemplateObject(["\n border: 1px solid;\n border-color: ", ";\n"], ["\n border: 1px solid;\n border-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.primary1; -}); -styled.div(templateObject_13$5 || (templateObject_13$5 = __makeTemplateObject(["\n height: 17px;\n width: 17px;\n border-radius: 50%;\n background-color: ", ";\n display: flex;\n align-items: center;\n justify-content: center;\n"], ["\n height: 17px;\n width: 17px;\n border-radius: 50%;\n background-color: ", ";\n display: flex;\n align-items: center;\n justify-content: center;\n"])), function (_a) { - var theme = _a.theme; - return theme.primary1; -}); -styled.div(templateObject_14$5 || (templateObject_14$5 = __makeTemplateObject(["\n width: 20px;\n padding: 0 10px;\n position: absolute;\n top: 11px;\n right: 15px;\n"], ["\n width: 20px;\n padding: 0 10px;\n position: absolute;\n top: 11px;\n right: 15px;\n"]))); -styled(Check)(templateObject_15$3 || (templateObject_15$3 = __makeTemplateObject(["\n size: 13px;\n"], ["\n size: 13px;\n"]))); -var templateObject_1$1g, templateObject_2$W, templateObject_3$N, templateObject_4$C, templateObject_5$t, templateObject_6$n, templateObject_7$j, templateObject_8$g, templateObject_9$f, templateObject_10$b, templateObject_11$9, templateObject_12$9, templateObject_13$5, templateObject_14$5, templateObject_15$3; +/** + * Returns true if the string value is zero in hex + * @param hexNumberString + */ +function isZero(hexNumberString) { + return /^0x0*$/.test(hexNumberString) +} -var isClient = typeof window === 'object'; -function getSize() { - return { - width: isClient ? window.innerWidth : undefined, - height: isClient ? window.innerHeight : undefined, - }; -} -// https://usehooks.com/useWindowSize/ -function useWindowSize() { - var _a = __read(useState(getSize), 2), windowSize = _a[0], setWindowSize = _a[1]; - useEffect(function () { - function handleResize() { - setWindowSize(getSize()); - } - if (isClient) { - window.addEventListener('resize', handleResize); - return function () { - window.removeEventListener('resize', handleResize); - }; - } - return undefined; - }, []); - return windowSize; +/** + * Does a lookup for an ENS name to find its address. + */ +function useENSAddress(ensName) { + var _a + var debouncedName = useDebounce(ensName, 200) + var ensNodeArgument = useMemo( + function () { + return [debouncedName === null ? undefined : safeNamehash(debouncedName)] + }, + [debouncedName] + ) + var registrarContract = useENSRegistrarContract(false) + var resolverAddress = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument) + var resolverAddressResult = (_a = resolverAddress.result) === null || _a === void 0 ? void 0 : _a[0] + var resolverContract = useENSResolverContract( + resolverAddressResult && !isZero(resolverAddressResult) ? resolverAddressResult : undefined, + false + ) + var addr = useSingleCallResult(resolverContract, 'addr', ensNodeArgument) + var changed = debouncedName !== ensName + return useMemo( + function () { + var _a, _b + return { + address: changed + ? null + : (_b = (_a = addr.result) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 + ? _b + : null, + loading: changed || resolverAddress.loading || addr.loading, + } + }, + [addr.loading, addr.result, changed, resolverAddress.loading] + ) } -// eslint-disable-next-line react/prop-types -function Confetti(_a) { - var start = _a.start, variant = _a.variant; - var _b = useWindowSize(), width = _b.width, height = _b.height; - var _variant = variant ? variant : height && width && height > 1.5 * width ? 'bottom' : variant; - return start && width && height ? (jsx(ReactConfetti, { style: { zIndex: 1401 }, numberOfPieces: 400, recycle: false, run: true, width: width, height: height, confettiSource: { - h: height, - w: width, - x: 0, - y: _variant === 'top' ? height * 0.25 : _variant === 'bottom' ? height * 0.75 : height * 0.5, - }, initialVelocityX: 15, initialVelocityY: 30, gravity: 0.45, tweenDuration: 100, wind: 0.05 }, void 0)) : null; +/** + * Does a reverse lookup for an address to find its ENS name. + * Note this is not the same as looking up an ENS name to find an address. + */ +function useENSName(address) { + var _a, _b + var debouncedAddress = useDebounce(address, 200) + var ensNodeArgument = useMemo( + function () { + if (!debouncedAddress || !isAddress(debouncedAddress)) return [undefined] + return [namehash(debouncedAddress.toLowerCase().substr(2) + '.addr.reverse')] + }, + [debouncedAddress] + ) + var registrarContract = useENSRegistrarContract(false) + var resolverAddress = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument) + var resolverAddressResult = (_a = resolverAddress.result) === null || _a === void 0 ? void 0 : _a[0] + var resolverContract = useENSResolverContract( + resolverAddressResult && !isZero(resolverAddressResult) ? resolverAddressResult : undefined, + false + ) + var nameCallRes = useSingleCallResult(resolverContract, 'name', ensNodeArgument) + var name = (_b = nameCallRes.result) === null || _b === void 0 ? void 0 : _b[0] + /* ENS does not enforce that an address owns a .eth domain before setting it as a reverse proxy + and recommends that you perform a match on the forward resolution + see: https://docs.ens.domains/dapp-developer-guide/resolving-names#reverse-resolution + */ + var fwdAddr = useENSAddress(name) + var checkedName = address === (fwdAddr === null || fwdAddr === void 0 ? void 0 : fwdAddr.address) ? name : null + var changed = debouncedAddress !== address + return useMemo( + function () { + return { + ENSName: changed ? null : checkedName, + loading: changed || resolverAddress.loading || nameCallRes.loading, + } + }, + [changed, nameCallRes.loading, checkedName, resolverAddress.loading] + ) } -var uImage = "10f062d02df4af77.png"; +/** + * Given a name or address, does a lookup to resolve to an address and name + * @param nameOrAddress ENS name or address + */ +function useENS(nameOrAddress) { + var validated = isAddress(nameOrAddress) + var reverseLookup = useENSName(validated ? validated : undefined) + var lookup = useENSAddress(nameOrAddress) + return useMemo( + function () { + return { + loading: reverseLookup.loading || lookup.loading, + address: validated ? validated : lookup.address, + name: reverseLookup.ENSName + ? reverseLookup.ENSName + : !validated && lookup.address + ? nameOrAddress || null + : null, + } + }, + [lookup.address, lookup.loading, nameOrAddress, reverseLookup.ENSName, reverseLookup.loading, validated] + ) +} -var noise = "f158a440053a5ad2.png"; +/** + * Returns the gas value plus a margin for unexpected or variable gas costs + * @param value the gas value to pad + */ +function calculateGasMargin(value) { + return value.mul(120).div(100) +} -var xlUnicorn = "c2cd04251aa24c34.png"; +/** + * Be careful adding to this enum, always assign a unique value (typescript will not prevent duplicate values). + * These values is persisted in state and if you change the value it will cause errors + */ +var TransactionType +;(function (TransactionType) { + TransactionType[(TransactionType['APPROVAL'] = 0)] = 'APPROVAL' + TransactionType[(TransactionType['SWAP'] = 1)] = 'SWAP' + TransactionType[(TransactionType['DEPOSIT_LIQUIDITY_STAKING'] = 2)] = 'DEPOSIT_LIQUIDITY_STAKING' + TransactionType[(TransactionType['WITHDRAW_LIQUIDITY_STAKING'] = 3)] = 'WITHDRAW_LIQUIDITY_STAKING' + TransactionType[(TransactionType['CLAIM'] = 4)] = 'CLAIM' + TransactionType[(TransactionType['VOTE'] = 5)] = 'VOTE' + TransactionType[(TransactionType['DELEGATE'] = 6)] = 'DELEGATE' + TransactionType[(TransactionType['WRAP'] = 7)] = 'WRAP' + TransactionType[(TransactionType['CREATE_V3_POOL'] = 8)] = 'CREATE_V3_POOL' + TransactionType[(TransactionType['ADD_LIQUIDITY_V3_POOL'] = 9)] = 'ADD_LIQUIDITY_V3_POOL' + TransactionType[(TransactionType['ADD_LIQUIDITY_V2_POOL'] = 10)] = 'ADD_LIQUIDITY_V2_POOL' + TransactionType[(TransactionType['MIGRATE_LIQUIDITY_V3'] = 11)] = 'MIGRATE_LIQUIDITY_V3' + TransactionType[(TransactionType['COLLECT_FEES'] = 12)] = 'COLLECT_FEES' + TransactionType[(TransactionType['REMOVE_LIQUIDITY_V3'] = 13)] = 'REMOVE_LIQUIDITY_V3' + TransactionType[(TransactionType['SUBMIT_PROPOSAL'] = 14)] = 'SUBMIT_PROPOSAL' +})(TransactionType || (TransactionType = {})) +var addTransaction = createAction('transactions/addTransaction') +var clearAllTransactions = createAction('transactions/clearAllTransactions') +var finalizeTransaction = createAction('transactions/finalizeTransaction') +var checkedTransaction = createAction('transactions/checkedTransaction') + +var SUPPORTED_TRANSACTION_TYPES = [ + TransactionType.ADD_LIQUIDITY_V2_POOL, + TransactionType.ADD_LIQUIDITY_V3_POOL, + TransactionType.CREATE_V3_POOL, + TransactionType.REMOVE_LIQUIDITY_V3, + TransactionType.SWAP, +] +var FIREBASE_API_KEY = process.env.REACT_APP_FIREBASE_KEY +var firebaseEnabled = typeof FIREBASE_API_KEY !== 'undefined' +if (firebaseEnabled) initializeFirebase() +function useMonitoringEventCallback() { + var chainId = useActiveWeb3React().chainId + return useCallback( + function log(type, _a) { + var transactionResponse = _a.transactionResponse, + walletAddress = _a.walletAddress + return __awaiter(this, void 0, void 0, function () { + var db + return __generator(this, function (_b) { + if (!firebaseEnabled) return [2 /*return*/] + db = getDatabase() + if (!walletAddress) { + console.debug('Wallet address required to log monitoring events.') + return [2 /*return*/] + } + try { + push(ref(db, 'trm'), { + chainId, + origin: window.location.origin, + timestamp: Date.now(), + tx: transactionResponse, + type, + walletAddress, + }) + } catch (e) { + console.debug('Error adding document: ', e) + } + return [2 /*return*/] + }) + }) + }, + [chainId] + ) +} +function useTransactionMonitoringEventCallback() { + var account = useActiveWeb3React().account + var log = useMonitoringEventCallback() + return useCallback( + function (info, transactionResponse) { + if (SUPPORTED_TRANSACTION_TYPES.includes(info.type)) { + log(TransactionType[info.type], { + transactionResponse: (function (_a) { + var hash = _a.hash, + v = _a.v, + r = _a.r, + s = _a.s + return { hash, v, r, s } + })(transactionResponse), + walletAddress: account !== null && account !== void 0 ? account : undefined, + }) + } + }, + [account, log] + ) +} +function useWalletConnectMonitoringEventCallback() { + var log = useMonitoringEventCallback() + return useCallback( + function (walletAddress) { + log('WALLET_CONNECTED', { transactionResponse: { hash: '', r: '', s: '', v: -1 }, walletAddress }) + }, + [log] + ) +} +function initializeFirebase() { + initializeApp({ + apiKey: process.env.REACT_APP_FIREBASE_KEY, + authDomain: 'interface-monitoring.firebaseapp.com', + databaseURL: 'https://interface-monitoring-default-rtdb.firebaseio.com', + projectId: 'interface-monitoring', + storageBucket: 'interface-monitoring.appspot.com', + messagingSenderId: '968187720053', + appId: '1:968187720053:web:acedf72dce629d470be33c', + }) +} -var DataCard = styled(AutoColumn)(templateObject_1$1f || (templateObject_1$1f = __makeTemplateObject(["\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #2172e5 100%);\n border-radius: 12px;\n width: 100%;\n position: relative;\n overflow: hidden;\n"], ["\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #2172e5 100%);\n border-radius: 12px;\n width: 100%;\n position: relative;\n overflow: hidden;\n"]))); -var CardBGImage = styled.span(templateObject_2$V || (templateObject_2$V = __makeTemplateObject(["\n background: url(", ");\n width: 1000px;\n height: 600px;\n position: absolute;\n border-radius: 12px;\n opacity: 0.4;\n top: -100px;\n left: -100px;\n transform: rotate(-15deg);\n user-select: none;\n ", "\n"], ["\n background: url(", ");\n width: 1000px;\n height: 600px;\n position: absolute;\n border-radius: 12px;\n opacity: 0.4;\n top: -100px;\n left: -100px;\n transform: rotate(-15deg);\n user-select: none;\n ", "\n"])), uImage, function (_a) { - var desaturate = _a.desaturate; - return desaturate && "filter: saturate(0)"; -}); -var CardBGImageSmaller = styled.span(templateObject_3$M || (templateObject_3$M = __makeTemplateObject(["\n background: url(", ");\n width: 1200px;\n height: 1200px;\n position: absolute;\n border-radius: 12px;\n top: -300px;\n left: -300px;\n opacity: 0.4;\n user-select: none;\n\n ", "\n"], ["\n background: url(", ");\n width: 1200px;\n height: 1200px;\n position: absolute;\n border-radius: 12px;\n top: -300px;\n left: -300px;\n opacity: 0.4;\n user-select: none;\n\n ", "\n"])), xlUnicorn, function (_a) { - var desaturate = _a.desaturate; - return desaturate && "filter: saturate(0)"; -}); -var CardNoise = styled.span(templateObject_4$B || (templateObject_4$B = __makeTemplateObject(["\n background: url(", ");\n background-size: cover;\n mix-blend-mode: overlay;\n border-radius: 12px;\n width: 100%;\n height: 100%;\n opacity: 0.15;\n position: absolute;\n top: 0;\n left: 0;\n user-select: none;\n"], ["\n background: url(", ");\n background-size: cover;\n mix-blend-mode: overlay;\n border-radius: 12px;\n width: 100%;\n height: 100%;\n opacity: 0.15;\n position: absolute;\n top: 0;\n left: 0;\n user-select: none;\n"])), noise); -var CardSection = styled(AutoColumn)(templateObject_5$s || (templateObject_5$s = __makeTemplateObject(["\n padding: 1rem;\n z-index: 1;\n opacity: ", ";\n"], ["\n padding: 1rem;\n z-index: 1;\n opacity: ", ";\n"])), function (_a) { - var disabled = _a.disabled; - return disabled && '0.4'; -}); -var Break$1 = styled.div(templateObject_6$m || (templateObject_6$m = __makeTemplateObject(["\n width: 100%;\n background-color: rgba(255, 255, 255, 0.2);\n height: 1px;\n"], ["\n width: 100%;\n background-color: rgba(255, 255, 255, 0.2);\n height: 1px;\n"]))); -var templateObject_1$1f, templateObject_2$V, templateObject_3$M, templateObject_4$B, templateObject_5$s, templateObject_6$m; +// helper that can take a ethers library transaction response and add it to the list of transactions +function useTransactionAdder() { + var _a = useActiveWeb3React(), + chainId = _a.chainId, + account = _a.account + var dispatch = useAppDispatch() + var logMonitoringEvent = useTransactionMonitoringEventCallback() + return useCallback( + function (response, info) { + if (!account) return + if (!chainId) return + var hash = response.hash + if (!hash) { + throw Error('No transaction hash found.') + } + dispatch(addTransaction({ hash, from: account, info, chainId })) + logMonitoringEvent(info, response) + }, + [account, chainId, dispatch, logMonitoringEvent] + ) +} +// returns all the transactions for the current chain +function useAllTransactions() { + var _a + var chainId = useActiveWeb3React().chainId + var state = useAppSelector(function (state) { + return state.transactions + }) + return chainId ? ((_a = state[chainId]) !== null && _a !== void 0 ? _a : {}) : {} +} +function useTransaction(transactionHash) { + var allTransactions = useAllTransactions() + if (!transactionHash) { + return undefined + } + return allTransactions[transactionHash] +} +function useIsTransactionPending(transactionHash) { + var transactions = useAllTransactions() + if (!transactionHash || !transactions[transactionHash]) return false + return !transactions[transactionHash].receipt +} +function useIsTransactionConfirmed(transactionHash) { + var transactions = useAllTransactions() + if (!transactionHash || !transactions[transactionHash]) return false + return Boolean(transactions[transactionHash].receipt) +} +/** + * Returns whether a transaction happened in the last day (86400 seconds * 1000 milliseconds / second) + * @param tx to check for recency + */ +function isTransactionRecent(tx) { + return new Date().getTime() - tx.addedTime < 86400000 +} +// returns whether a token has a pending approval transaction +function useHasPendingApproval(token, spender) { + var allTransactions = useAllTransactions() + return useMemo( + function () { + return ( + typeof (token === null || token === void 0 ? void 0 : token.address) === 'string' && + typeof spender === 'string' && + Object.keys(allTransactions).some(function (hash) { + var tx = allTransactions[hash] + if (!tx) return false + if (tx.receipt) { + return false + } else { + if (tx.info.type !== TransactionType.APPROVAL) return false + return tx.info.spender === spender && tx.info.tokenAddress === token.address && isTransactionRecent(tx) + } + }) + ) + }, + [allTransactions, spender, token === null || token === void 0 ? void 0 : token.address] + ) +} +// watch for submissions to claim +// return null if not done loading, return undefined if not found +function useUserHasSubmittedClaim(account) { + var allTransactions = useAllTransactions() + // get the txn if it has been submitted + var claimTxn = useMemo( + function () { + var txnIndex = Object.keys(allTransactions).find(function (hash) { + var tx = allTransactions[hash] + return tx.info.type === TransactionType.CLAIM && tx.info.recipient === account + }) + return txnIndex && allTransactions[txnIndex] ? allTransactions[txnIndex] : undefined + }, + [account, allTransactions] + ) + return { claimSubmitted: Boolean(claimTxn), claimTxn } +} + +var FETCH_CLAIM_MAPPING_PROMISE = null +function fetchClaimMapping() { + return FETCH_CLAIM_MAPPING_PROMISE !== null && FETCH_CLAIM_MAPPING_PROMISE !== void 0 + ? FETCH_CLAIM_MAPPING_PROMISE + : (FETCH_CLAIM_MAPPING_PROMISE = fetch( + 'https://raw.githubusercontent.com/Uniswap/mrkl-drop-data-chunks/final/chunks/mapping.json' + ) + .then(function (res) { + return res.json() + }) + .catch(function (error) { + console.error('Failed to get claims mapping', error) + FETCH_CLAIM_MAPPING_PROMISE = null + })) +} +var FETCH_CLAIM_FILE_PROMISES = {} +function fetchClaimFile(key) { + var _a + return (_a = FETCH_CLAIM_FILE_PROMISES[key]) !== null && _a !== void 0 + ? _a + : (FETCH_CLAIM_FILE_PROMISES[key] = fetch( + 'https://raw.githubusercontent.com/Uniswap/mrkl-drop-data-chunks/final/chunks/' + key + '.json' + ) + .then(function (res) { + return res.json() + }) + .catch(function (error) { + console.error('Failed to get claim file mapping for starting address ' + key, error) + delete FETCH_CLAIM_FILE_PROMISES[key] + })) +} +var FETCH_CLAIM_PROMISES = {} +// returns the claim for the given address, or null if not valid +function fetchClaim(account) { + var _a + var formatted = isAddress(account) + if (!formatted) return Promise.reject(new Error('Invalid address')) + return (_a = FETCH_CLAIM_PROMISES[account]) !== null && _a !== void 0 + ? _a + : (FETCH_CLAIM_PROMISES[account] = fetchClaimMapping() + .then(function (mapping) { + var e_1, _a + var sorted = Object.keys(mapping).sort(function (a, b) { + return a.toLowerCase() < b.toLowerCase() ? -1 : 1 + }) + try { + for ( + var sorted_1 = __values(sorted), sorted_1_1 = sorted_1.next(); + !sorted_1_1.done; + sorted_1_1 = sorted_1.next() + ) { + var startingAddress = sorted_1_1.value + var lastAddress = mapping[startingAddress] + if (startingAddress.toLowerCase() <= formatted.toLowerCase()) { + if (formatted.toLowerCase() <= lastAddress.toLowerCase()) { + return startingAddress + } + } else { + throw new Error('Claim for ' + formatted + ' was not found in partial search') + } + } + } catch (e_1_1) { + e_1 = { error: e_1_1 } + } finally { + try { + if (sorted_1_1 && !sorted_1_1.done && (_a = sorted_1.return)) _a.call(sorted_1) + } finally { + if (e_1) throw e_1.error + } + } + throw new Error('Claim for ' + formatted + ' was not found after searching all mappings') + }) + .then(fetchClaimFile) + .then(function (result) { + if (result[formatted]) return result[formatted] + throw new Error('Claim for ' + formatted + ' was not found in claim file!') + }) + .catch(function (error) { + console.debug('Claim fetch failed', error) + throw error + })) +} +// parse distributorContract blob and detect if user has claim data +// null means we know it does not +function useUserClaimData(account) { + var chainId = useActiveWeb3React().chainId + var _a = __read(useState({}), 2), + claimInfo = _a[0], + setClaimInfo = _a[1] + useEffect( + function () { + if (!account || chainId !== 1) return + fetchClaim(account) + .then(function (accountClaimInfo) { + return setClaimInfo(function (claimInfo) { + var _a + return __assign(__assign({}, claimInfo), ((_a = {}), (_a[account] = accountClaimInfo), _a)) + }) + }) + .catch(function () { + setClaimInfo(function (claimInfo) { + var _a + return __assign(__assign({}, claimInfo), ((_a = {}), (_a[account] = null), _a)) + }) + }) + }, + [account, chainId] + ) + return account && chainId === 1 ? claimInfo[account] : null +} +// check if user is in blob and has not yet claimed UNI +function useUserHasAvailableClaim(account) { + var _a + var userClaimData = useUserClaimData(account) + var distributorContract = useMerkleDistributorContract() + var isClaimedResult = useSingleCallResult(distributorContract, 'isClaimed', [ + userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.index, + ]) + // user is in blob and contract marks as unclaimed + return Boolean( + userClaimData && + !isClaimedResult.loading && + ((_a = isClaimedResult.result) === null || _a === void 0 ? void 0 : _a[0]) === false + ) +} +function useUserUnclaimedAmount(account) { + var chainId = useActiveWeb3React().chainId + var userClaimData = useUserClaimData(account) + var canClaim = useUserHasAvailableClaim(account) + var uni = chainId ? UNI[chainId] : undefined + if (!uni) return undefined + if (!canClaim || !userClaimData) { + return CurrencyAmount.fromRawAmount(uni, JSBI.BigInt(0)) + } + return CurrencyAmount.fromRawAmount(uni, JSBI.BigInt(userClaimData.amount)) +} +function useClaimCallback(account) { + // get claim data for this account + var _a = useActiveWeb3React(), + library = _a.library, + chainId = _a.chainId + var claimData = useUserClaimData(account) + // used for popup summary + var unclaimedAmount = useUserUnclaimedAmount(account) + var addTransaction = useTransactionAdder() + var distributorContract = useMerkleDistributorContract() + var claimCallback = function () { + return __awaiter(this, void 0, void 0, function () { + var args + var _a + return __generator(this, function (_b) { + if (!claimData || !account || !library || !chainId || !distributorContract) return [2 /*return*/] + args = [claimData.index, account, claimData.amount, claimData.proof] + return [ + 2 /*return*/, + (_a = distributorContract.estimateGas)['claim'] + .apply(_a, __spreadArray(__spreadArray([], __read(args), false), [{}], false)) + .then(function (estimatedGasLimit) { + return distributorContract.claim + .apply( + distributorContract, + __spreadArray( + __spreadArray([], __read(args), false), + [{ value: null, gasLimit: calculateGasMargin(estimatedGasLimit) }], + false + ) + ) + .then(function (response) { + addTransaction(response, { + type: TransactionType.CLAIM, + recipient: account, + uniAmountRaw: + unclaimedAmount === null || unclaimedAmount === void 0 + ? void 0 + : unclaimedAmount.quotient.toString(), + }) + return response.hash + }) + }), + ] + }) + }) + } + return { claimCallback } +} -var parser = new UAParser(window.navigator.userAgent); -var type$1 = parser.getDevice().type; -var userAgent = parser.getResult(); -var isMobile = type$1 === 'mobile' || type$1 === 'tablet'; +var _a$d, _b$4, _c$3, _d$2, _e$1, _f, _g, _h +var WRAPPED_NATIVE_CURRENCIES_ONLY = Object.fromEntries( + Object.entries(WRAPPED_NATIVE_CURRENCY).map(function (_a) { + var _b = __read(_a, 2), + key = _b[0], + value = _b[1] + return [key, [value]] + }) +) +// used to construct intermediary pairs for trading +var BASES_TO_CHECK_TRADES_AGAINST = __assign( + __assign({}, WRAPPED_NATIVE_CURRENCIES_ONLY), + ((_a$d = {}), + (_a$d[SupportedChainId.MAINNET] = __spreadArray( + __spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.MAINNET]), false), + [DAI, USDC, USDT, WBTC], + false + )), + (_a$d[SupportedChainId.OPTIMISM] = __spreadArray( + __spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.OPTIMISM]), false), + [DAI_OPTIMISM, USDT_OPTIMISM, WBTC_OPTIMISM], + false + )), + (_a$d[SupportedChainId.ARBITRUM_ONE] = __spreadArray( + __spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.ARBITRUM_ONE]), false), + [DAI_ARBITRUM_ONE, USDT_ARBITRUM_ONE, WBTC_ARBITRUM_ONE], + false + )), + (_a$d[SupportedChainId.POLYGON] = __spreadArray( + __spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.POLYGON]), false), + [DAI_POLYGON, USDC_POLYGON, USDT_POLYGON, WETH_POLYGON], + false + )), + _a$d) +) +var ADDITIONAL_BASES = + ((_b$4 = {}), + (_b$4[SupportedChainId.MAINNET] = + ((_c$3 = { + '0xF16E4d813f4DcfDe4c5b44f305c908742De84eF0': [ETH2X_FLI], + }), + (_c$3[rETH2.address] = [sETH2]), + (_c$3[SWISE.address] = [sETH2]), + (_c$3[FEI.address] = [TRIBE]), + (_c$3[TRIBE.address] = [FEI]), + (_c$3[FRAX.address] = [FXS]), + (_c$3[FXS.address] = [FRAX]), + (_c$3[WBTC.address] = [renBTC]), + (_c$3[renBTC.address] = [WBTC]), + _c$3)), + _b$4) +/** + * Some tokens can only be swapped via certain pairs, so we override the list of bases that are considered for these + * tokens. + */ +var CUSTOM_BASES = + ((_d$2 = {}), + (_d$2[SupportedChainId.MAINNET] = + ((_e$1 = {}), (_e$1[AMPL.address] = [DAI, WRAPPED_NATIVE_CURRENCY[SupportedChainId.MAINNET]]), _e$1)), + _d$2) +/** + * Shows up in the currency select for swap and add liquidity + */ +var COMMON_BASES = + ((_f = {}), + (_f[SupportedChainId.MAINNET] = [ + nativeOnChain(SupportedChainId.MAINNET), + DAI, + USDC, + USDT, + WBTC, + WRAPPED_NATIVE_CURRENCY[SupportedChainId.MAINNET], + ]), + (_f[SupportedChainId.ROPSTEN] = [ + nativeOnChain(SupportedChainId.ROPSTEN), + WRAPPED_NATIVE_CURRENCY[SupportedChainId.ROPSTEN], + ]), + (_f[SupportedChainId.RINKEBY] = [ + nativeOnChain(SupportedChainId.RINKEBY), + WRAPPED_NATIVE_CURRENCY[SupportedChainId.RINKEBY], + ]), + (_f[SupportedChainId.GOERLI] = [ + nativeOnChain(SupportedChainId.GOERLI), + WRAPPED_NATIVE_CURRENCY[SupportedChainId.GOERLI], + ]), + (_f[SupportedChainId.KOVAN] = [ + nativeOnChain(SupportedChainId.KOVAN), + WRAPPED_NATIVE_CURRENCY[SupportedChainId.KOVAN], + ]), + (_f[SupportedChainId.ARBITRUM_ONE] = [ + nativeOnChain(SupportedChainId.ARBITRUM_ONE), + DAI_ARBITRUM_ONE, + USDC_ARBITRUM, + USDT_ARBITRUM_ONE, + WBTC_ARBITRUM_ONE, + WRAPPED_NATIVE_CURRENCY[SupportedChainId.ARBITRUM_ONE], + ]), + (_f[SupportedChainId.ARBITRUM_RINKEBY] = [ + nativeOnChain(SupportedChainId.ARBITRUM_RINKEBY), + WRAPPED_NATIVE_CURRENCY[SupportedChainId.ARBITRUM_RINKEBY], + ]), + (_f[SupportedChainId.OPTIMISM] = [ + nativeOnChain(SupportedChainId.OPTIMISM), + DAI_OPTIMISM, + USDC_OPTIMISM, + USDT_OPTIMISM, + WBTC_OPTIMISM, + ]), + (_f[SupportedChainId.OPTIMISTIC_KOVAN] = [nativeOnChain(SupportedChainId.OPTIMISTIC_KOVAN)]), + (_f[SupportedChainId.POLYGON] = [ + nativeOnChain(SupportedChainId.POLYGON), + WETH_POLYGON, + USDC_POLYGON, + DAI_POLYGON, + USDT_POLYGON, + WBTC_POLYGON, + ]), + (_f[SupportedChainId.POLYGON_MUMBAI] = [ + nativeOnChain(SupportedChainId.POLYGON_MUMBAI), + WRAPPED_NATIVE_CURRENCY[SupportedChainId.POLYGON_MUMBAI], + WETH_POLYGON_MUMBAI, + ]), + _f) +// used to construct the list of all pairs we consider by default in the frontend +__assign( + __assign({}, WRAPPED_NATIVE_CURRENCIES_ONLY), + ((_g = {}), + (_g[SupportedChainId.MAINNET] = __spreadArray( + __spreadArray([], __read(WRAPPED_NATIVE_CURRENCIES_ONLY[SupportedChainId.MAINNET]), false), + [DAI, USDC, USDT, WBTC], + false + )), + _g) +) +;(_h = {}), + (_h[SupportedChainId.MAINNET] = [ + [ + new Token(SupportedChainId.MAINNET, '0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643', 8, 'cDAI', 'Compound Dai'), + new Token( + SupportedChainId.MAINNET, + '0x39AA39c021dfbaE8faC545936693aC917d5E7563', + 8, + 'cUSDC', + 'Compound USD Coin' + ), + ], + [USDC, USDT], + [DAI, USDT], + ]), + _h + +var EthereumLogo = + 'data:image/png;base64,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' + +var arbitrumLogoUrl = + 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20viewBox%3D%220%200%20470.287%20514.251%22%20enable-background%3D%22new%200%200%20470.287%20514.251%22%20xml%3Aspace%3D%22preserve%22%3E%3Cg%20id%3D%22Background%22%3E%3C%2Fg%3E%3Cg%20id%3D%22Logos_and_symbols%22%3E%20%3Cg%20id%3D%22SYMBOL_VER_3%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_4_3_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3_1_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_1_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22VER_3%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22off_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_3_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1_1_%22%3E%20%20%3Cg%20id%3D%22_x31_-3%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_14_%22%3E%20%20%20%3Cpath%20fill%3D%22%232D374B%22%20d%3D%22M291.134%2C237.469l35.654-60.5l96.103%2C149.684l0.046%2C28.727l-0.313-197.672%20%20%20%20c-0.228-4.832-2.794-9.252-6.887-11.859L242.715%2C46.324c-4.045-1.99-9.18-1.967-13.22%2C0.063c-0.546%2C0.272-1.06%2C0.57-1.548%2C0.895%20%20%20%20l-0.604%2C0.379L59.399%2C144.983l-0.651%2C0.296c-0.838%2C0.385-1.686%2C0.875-2.48%2C1.444c-3.185%2C2.283-5.299%2C5.66-5.983%2C9.448%20%20%20%20c-0.103%2C0.574-0.179%2C1.158-0.214%2C1.749l0.264%2C161.083l89.515-138.745c11.271-18.397%2C35.825-24.323%2C58.62-24.001l26.753%2C0.706%20%20%20%20L67.588%2C409.765l18.582%2C10.697L245.692%2C157.22l70.51-0.256L157.091%2C426.849l66.306%2C38.138l7.922%2C4.556%20%20%20%20c3.351%2C1.362%2C7.302%2C1.431%2C10.681%2C0.21l175.453-101.678l-33.544%2C19.438L291.134%2C237.469z%20M304.736%2C433.395l-66.969-105.108%20%20%20%20l40.881-69.371l87.952%2C138.628L304.736%2C433.395z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%2328A0F0%22%20points%3D%22237.768%2C328.286%20304.736%2C433.395%20366.601%2C397.543%20278.648%2C258.915%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2328A0F0%22%20d%3D%22M422.937%2C355.379l-0.046-28.727l-96.103-149.684l-35.654%2C60.5l92.774%2C150.043l33.544-19.438%20%20%20%20c3.29-2.673%2C5.281-6.594%2C5.49-10.825L422.937%2C355.379z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23FFFFFF%22%20d%3D%22M20.219%2C382.469l47.369%2C27.296l157.634-252.801l-26.753-0.706c-22.795-0.322-47.35%2C5.604-58.62%2C24.001%20%20%20%20L50.334%2C319.004l-30.115%2C46.271V382.469z%22%2F%3E%20%20%20%3Cpolygon%20fill%3D%22%23FFFFFF%22%20points%3D%22316.202%2C156.964%20245.692%2C157.22%2086.17%2C420.462%20141.928%2C452.565%20157.091%2C426.849%20%20%20%20%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%2396BEDC%22%20d%3D%22M452.65%2C156.601c-0.59-14.746-8.574-28.245-21.08-36.104L256.28%2C19.692%20%20%20%20c-12.371-6.229-27.825-6.237-40.218-0.004c-1.465%2C0.739-170.465%2C98.752-170.465%2C98.752c-2.339%2C1.122-4.592%2C2.458-6.711%2C3.975%20%20%20%20c-11.164%2C8.001-17.969%2C20.435-18.668%2C34.095v208.765l30.115-46.271L50.07%2C157.921c0.035-0.589%2C0.109-1.169%2C0.214-1.741%20%20%20%20c0.681-3.79%2C2.797-7.171%2C5.983-9.456c0.795-0.569%2C172.682-100.064%2C173.228-100.337c4.04-2.029%2C9.175-2.053%2C13.22-0.063%20%20%20%20l173.022%2C99.523c4.093%2C2.607%2C6.659%2C7.027%2C6.887%2C11.859v199.542c-0.209%2C4.231-1.882%2C8.152-5.172%2C10.825l-33.544%2C19.438%20%20%20%20l-17.308%2C10.031l-61.864%2C35.852l-62.737%2C36.357c-3.379%2C1.221-7.33%2C1.152-10.681-0.21l-74.228-42.693l-15.163%2C25.717%20%20%20%20l66.706%2C38.406c2.206%2C1.255%2C4.171%2C2.367%2C5.784%2C3.272c2.497%2C1.4%2C4.199%2C2.337%2C4.8%2C2.629c4.741%2C2.303%2C11.563%2C3.643%2C17.71%2C3.643%20%20%20%20c5.636%2C0%2C11.132-1.035%2C16.332-3.072l182.225-105.531c10.459-8.104%2C16.612-20.325%2C17.166-33.564V156.601z%22%2F%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_13_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_6_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_3_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_15_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_3_%22%3E%20%20%20%3Cg%20id%3D%22_x33__7_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic%22%3E%20%20%20%3Cg%20id%3D%22_x33__3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x33_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_10_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_2_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22_x34__1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Monochromatic_2_%22%3E%20%20%20%3Cg%20id%3D%22_x33__6_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_2_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_11_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22Symbol_-_Original_5_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_12_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22One_color_version_-_White_1_%22%3E%20%20%20%3Cg%20id%3D%22Symbol_-_Original_9_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1_2_%22%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1_1_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_4_%22%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol_1_%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_3_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%20%3Cg%20id%3D%22New_Symbol%22%3E%20%20%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1_1_%22%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_4_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_3_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_2_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_1-1-1_2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_7_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Original_8_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-1-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-2-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_2-3-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-1%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2_1_%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22SYMBOL_VER_5-2%22%3E%20%3C%2Fg%3E%20%3Cg%20id%3D%22Symbol_-_Monochromatic_1_%22%3E%20%20%3Cg%20id%3D%22_x33__4_%22%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E' + +var optimismLogoUrl = + 'data:image/svg+xml,%3Csvg%20width%3D%22170%22%20height%3D%22168%22%20viewBox%3D%220%200%20170%20168%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20clip-path%3D%22url%28%23clip0%29%22%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF505F%22%2F%3E%3Cpath%20opacity%3D%220.6%22%20d%3D%22M85.05%20168C132.022%20168%20170.1%20130.105%20170.1%2083.3593C170.1%2036.6135%200%2036.6135%200%2083.3593C0%20130.105%2038.0782%20168%2085.05%20168Z%22%20fill%3D%22%23FF0320%22%2F%3E%3Cpath%20d%3D%22M85.05%200C132.022%200%20170.1%2037.8949%20170.1%2084.6407C170.1%20131.386%200%20131.386%200%2084.6407C0%2037.8949%2038.0782%200%2085.05%200Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.665%2064.0394L112.444%2012.3742L89.0263%2078.9477L144.665%2064.0394Z%22%20fill%3D%22%23FF4E65%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.777%2064.215L112.444%2012.3742L165.349%2058.4347L143.777%2064.215Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M144.551%2063.613L142.479%20124.467L88.912%2078.5213L144.551%2063.613Z%22%20fill%3D%22%23D0001A%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M143.663%2063.7886L142.479%20124.467L165.235%2058.0083L143.663%2063.7886Z%22%20fill%3D%22%23FF697B%22%2F%3E%3C%2Fg%3E%3Cdefs%3E%3CclipPath%20id%3D%22clip0%22%3E%3Crect%20width%3D%22170%22%20height%3D%22168%22%20fill%3D%22white%22%2F%3E%3C%2FclipPath%3E%3C%2Fdefs%3E%3C%2Fsvg%3E' + +var polygonMaticLogo = + 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20viewBox%3D%220%200%2038.4%2033.5%22%20style%3D%22enable-background%3Anew%200%200%2038.4%2033.5%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cstyle%20type%3D%22text%2Fcss%22%3E%20.st0%7Bfill%3A%238247E5%3B%7D%3C%2Fstyle%3E%3Cg%3E%20%3Cpath%20class%3D%22st0%22%20d%3D%22M29%2C10.2c-0.7-0.4-1.6-0.4-2.4%2C0L21%2C13.5l-3.8%2C2.1l-5.5%2C3.3c-0.7%2C0.4-1.6%2C0.4-2.4%2C0L5%2C16.3%20%20c-0.7-0.4-1.2-1.2-1.2-2.1v-5c0-0.8%2C0.4-1.6%2C1.2-2.1l4.3-2.5c0.7-0.4%2C1.6-0.4%2C2.4%2C0L16%2C7.2c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v3.3l3.8-2.2V7%20%20c0-0.8-0.4-1.6-1.2-2.1l-8-4.7c-0.7-0.4-1.6-0.4-2.4%2C0L1.2%2C5C0.4%2C5.4%2C0%2C6.2%2C0%2C7v9.4c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l5.5-3.2l3.8-2.2l5.5-3.2c0.7-0.4%2C1.6-0.4%2C2.4%2C0l4.3%2C2.5c0.7%2C0.4%2C1.2%2C1.2%2C1.2%2C2.1v5c0%2C0.8-0.4%2C1.6-1.2%2C2.1%20%20L29%2C28.8c-0.7%2C0.4-1.6%2C0.4-2.4%2C0l-4.3-2.5c-0.7-0.4-1.2-1.2-1.2-2.1V21l-3.8%2C2.2v3.3c0%2C0.8%2C0.4%2C1.6%2C1.2%2C2.1l8.1%2C4.7%20%20c0.7%2C0.4%2C1.6%2C0.4%2C2.4%2C0l8.1-4.7c0.7-0.4%2C1.2-1.2%2C1.2-2.1V17c0-0.8-0.4-1.6-1.2-2.1L29%2C10.2z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E' + +var UNI_LIST = 'https://tokens.uniswap.org' +var AAVE_LIST = 'tokenlist.aave.eth' +var BA_LIST = 'https://raw.githubusercontent.com/The-Blockchain-Association/sec-notice-list/master/ba-sec-list.json' +var CMC_ALL_LIST = 'https://api.coinmarketcap.com/data-api/v3/uniswap/all.json' +var COINGECKO_LIST = 'https://tokens.coingecko.com/uniswap/all.json' +var COMPOUND_LIST = 'https://raw.githubusercontent.com/compound-finance/token-list/master/compound.tokenlist.json' +var GEMINI_LIST = 'https://www.gemini.com/uniswap/manifest.json' +var ARBITRUM_LIST = 'https://bridge.arbitrum.io/token-list-42161.json' +var KLEROS_LIST = 't2crtokens.eth' +var OPTIMISM_LIST = 'https://static.optimism.io/optimism.tokenlist.json' +var ROLL_LIST = 'https://app.tryroll.com/tokens.json' +var SET_LIST = 'https://raw.githubusercontent.com/SetProtocol/uniswap-tokenlist/main/set.tokenlist.json' +var WRAPPED_LIST = 'wrapped.tokensoft.eth' +var UNSUPPORTED_LIST_URLS = [BA_LIST] +// this is the default list of lists that are exposed to users +// lower index == higher priority for token import +var DEFAULT_LIST_OF_LISTS_TO_DISPLAY = [ + UNI_LIST, + COMPOUND_LIST, + AAVE_LIST, + CMC_ALL_LIST, + COINGECKO_LIST, + KLEROS_LIST, + GEMINI_LIST, + WRAPPED_LIST, + SET_LIST, + ROLL_LIST, + ARBITRUM_LIST, + OPTIMISM_LIST, +] +var DEFAULT_LIST_OF_LISTS = __spreadArray( + __spreadArray([], __read(DEFAULT_LIST_OF_LISTS_TO_DISPLAY), false), + __read(UNSUPPORTED_LIST_URLS), + false +) +// default lists to be 'active' aka searched across +var DEFAULT_ACTIVE_LIST_URLS = [UNI_LIST, GEMINI_LIST] + +var _a$c, _b$3 +var INFURA_KEY = process.env.REACT_APP_INFURA_KEY +if (typeof INFURA_KEY === 'undefined') { + throw new Error('REACT_APP_INFURA_KEY must be a defined environment variable') +} +/** + * These are the network URLs used by the interface when there is not another available source of chain data + */ +var INFURA_NETWORK_URLS = + ((_a$c = {}), + (_a$c[SupportedChainId.MAINNET] = 'https://mainnet.infura.io/v3/' + INFURA_KEY), + (_a$c[SupportedChainId.RINKEBY] = 'https://rinkeby.infura.io/v3/' + INFURA_KEY), + (_a$c[SupportedChainId.ROPSTEN] = 'https://ropsten.infura.io/v3/' + INFURA_KEY), + (_a$c[SupportedChainId.GOERLI] = 'https://goerli.infura.io/v3/' + INFURA_KEY), + (_a$c[SupportedChainId.KOVAN] = 'https://kovan.infura.io/v3/' + INFURA_KEY), + (_a$c[SupportedChainId.OPTIMISM] = 'https://optimism-mainnet.infura.io/v3/' + INFURA_KEY), + (_a$c[SupportedChainId.OPTIMISTIC_KOVAN] = 'https://optimism-kovan.infura.io/v3/' + INFURA_KEY), + (_a$c[SupportedChainId.ARBITRUM_ONE] = 'https://arbitrum-mainnet.infura.io/v3/' + INFURA_KEY), + (_a$c[SupportedChainId.ARBITRUM_RINKEBY] = 'https://arbitrum-rinkeby.infura.io/v3/' + INFURA_KEY), + (_a$c[SupportedChainId.POLYGON] = 'https://polygon-mainnet.infura.io/v3/' + INFURA_KEY), + (_a$c[SupportedChainId.POLYGON_MUMBAI] = 'https://polygon-mumbai.infura.io/v3/' + INFURA_KEY), + _a$c) +var NetworkType +;(function (NetworkType) { + NetworkType[(NetworkType['L1'] = 0)] = 'L1' + NetworkType[(NetworkType['L2'] = 1)] = 'L2' +})(NetworkType || (NetworkType = {})) +var CHAIN_INFO = + ((_b$3 = {}), + (_b$3[SupportedChainId.MAINNET] = { + networkType: NetworkType.L1, + docs: 'https://docs.uniswap.org/', + explorer: 'https://etherscan.io/', + infoLink: 'https://info.uniswap.org/#/', + label: 'Ethereum', + logoUrl: EthereumLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, + rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.MAINNET], + }, + }), + (_b$3[SupportedChainId.RINKEBY] = { + networkType: NetworkType.L1, + docs: 'https://docs.uniswap.org/', + explorer: 'https://rinkeby.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/', + label: 'Rinkeby', + logoUrl: EthereumLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Rinkeby Ether', symbol: 'rETH', decimals: 18 }, + rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.RINKEBY], + }, + }), + (_b$3[SupportedChainId.ROPSTEN] = { + networkType: NetworkType.L1, + docs: 'https://docs.uniswap.org/', + explorer: 'https://ropsten.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/', + label: 'Ropsten', + logoUrl: EthereumLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Ropsten Ether', symbol: 'ropETH', decimals: 18 }, + rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.ROPSTEN], + }, + }), + (_b$3[SupportedChainId.KOVAN] = { + networkType: NetworkType.L1, + docs: 'https://docs.uniswap.org/', + explorer: 'https://kovan.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/', + label: 'Kovan', + logoUrl: EthereumLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Kovan Ether', symbol: 'kovETH', decimals: 18 }, + rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.KOVAN], + }, + }), + (_b$3[SupportedChainId.GOERLI] = { + networkType: NetworkType.L1, + docs: 'https://docs.uniswap.org/', + explorer: 'https://goerli.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/', + label: 'Görli', + logoUrl: EthereumLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Görli Ether', symbol: 'görETH', decimals: 18 }, + rpcUrl: INFURA_NETWORK_URLS[SupportedChainId.GOERLI], + }, + }), + (_b$3[SupportedChainId.OPTIMISM] = { + networkType: NetworkType.L2, + blockWaitMsBeforeWarning: ms(templateObject_1$1m || (templateObject_1$1m = __makeTemplateObject(['25m'], ['25m']))), + bridge: 'https://gateway.optimism.io/?chainId=1', + defaultListUrl: OPTIMISM_LIST, + docs: 'https://optimism.io/', + explorer: 'https://optimistic.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/optimism/', + label: 'Optimism', + logoUrl: optimismLogoUrl, + statusPage: 'https://optimism.io/status', + helpCenterUrl: 'https://help.uniswap.org/en/collections/3137778-uniswap-on-optimistic-ethereum-oξ', + addNetworkInfo: { + nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, + rpcUrl: 'https://mainnet.optimism.io', + }, + }), + (_b$3[SupportedChainId.OPTIMISTIC_KOVAN] = { + networkType: NetworkType.L2, + blockWaitMsBeforeWarning: ms(templateObject_2$10 || (templateObject_2$10 = __makeTemplateObject(['25m'], ['25m']))), + bridge: 'https://gateway.optimism.io/', + defaultListUrl: OPTIMISM_LIST, + docs: 'https://optimism.io/', + explorer: 'https://optimistic.etherscan.io/', + infoLink: 'https://info.uniswap.org/#/optimism/', + label: 'Optimistic Kovan', + logoUrl: optimismLogoUrl, + statusPage: 'https://optimism.io/status', + helpCenterUrl: 'https://help.uniswap.org/en/collections/3137778-uniswap-on-optimistic-ethereum-oξ', + addNetworkInfo: { + nativeCurrency: { name: 'Optimistic Kovan Ether', symbol: 'kovOpETH', decimals: 18 }, + rpcUrl: 'https://kovan.optimism.io', + }, + }), + (_b$3[SupportedChainId.ARBITRUM_ONE] = { + networkType: NetworkType.L2, + blockWaitMsBeforeWarning: ms(templateObject_3$T || (templateObject_3$T = __makeTemplateObject(['10m'], ['10m']))), + bridge: 'https://bridge.arbitrum.io/', + docs: 'https://offchainlabs.com/', + explorer: 'https://arbiscan.io/', + infoLink: 'https://info.uniswap.org/#/arbitrum', + label: 'Arbitrum', + logoUrl: arbitrumLogoUrl, + defaultListUrl: ARBITRUM_LIST, + helpCenterUrl: 'https://help.uniswap.org/en/collections/3137787-uniswap-on-arbitrum', + addNetworkInfo: { + nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, + rpcUrl: 'https://arb1.arbitrum.io/rpc', + }, + }), + (_b$3[SupportedChainId.ARBITRUM_RINKEBY] = { + networkType: NetworkType.L2, + blockWaitMsBeforeWarning: ms(templateObject_4$H || (templateObject_4$H = __makeTemplateObject(['10m'], ['10m']))), + bridge: 'https://bridge.arbitrum.io/', + docs: 'https://offchainlabs.com/', + explorer: 'https://rinkeby-explorer.arbitrum.io/', + infoLink: 'https://info.uniswap.org/#/arbitrum/', + label: 'Arbitrum Rinkeby', + logoUrl: arbitrumLogoUrl, + defaultListUrl: ARBITRUM_LIST, + helpCenterUrl: 'https://help.uniswap.org/en/collections/3137787-uniswap-on-arbitrum', + addNetworkInfo: { + nativeCurrency: { name: 'Rinkeby Arbitrum Ether', symbol: 'rinkArbETH', decimals: 18 }, + rpcUrl: 'https://rinkeby.arbitrum.io/rpc', + }, + }), + (_b$3[SupportedChainId.POLYGON] = { + networkType: NetworkType.L1, + blockWaitMsBeforeWarning: ms(templateObject_5$y || (templateObject_5$y = __makeTemplateObject(['10m'], ['10m']))), + bridge: 'https://wallet.polygon.technology/bridge', + docs: 'https://polygon.io/', + explorer: 'https://polygonscan.com/', + infoLink: 'https://info.uniswap.org/#/polygon/', + label: 'Polygon', + logoUrl: polygonMaticLogo, + addNetworkInfo: { + rpcUrl: 'https://polygon-rpc.com/', + nativeCurrency: { name: 'Polygon Matic', symbol: 'MATIC', decimals: 18 }, + }, + }), + (_b$3[SupportedChainId.POLYGON_MUMBAI] = { + networkType: NetworkType.L1, + blockWaitMsBeforeWarning: ms(templateObject_6$p || (templateObject_6$p = __makeTemplateObject(['10m'], ['10m']))), + bridge: 'https://wallet.polygon.technology/bridge', + docs: 'https://polygon.io/', + explorer: 'https://mumbai.polygonscan.com/', + infoLink: 'https://info.uniswap.org/#/polygon/', + label: 'Polygon Mumbai', + logoUrl: polygonMaticLogo, + addNetworkInfo: { + nativeCurrency: { name: 'Polygon Mumbai Matic', symbol: 'mMATIC', decimals: 18 }, + rpcUrl: 'https://rpc-endpoints.superfluid.dev/mumbai', + }, + }), + _b$3) +var templateObject_1$1m, + templateObject_2$10, + templateObject_3$T, + templateObject_4$H, + templateObject_5$y, + templateObject_6$p + +function useNativeCurrency() { + var chainId = useActiveWeb3React().chainId + return useMemo( + function () { + return chainId + ? nativeOnChain(chainId) + : // display mainnet when not connected + nativeOnChain(SupportedChainId.MAINNET) + }, + [chainId] + ) +} -var AnimatedDialogOverlay = animated(DialogOverlay); -// eslint-disable-next-line @typescript-eslint/no-unused-vars -var StyledDialogOverlay = styled(AnimatedDialogOverlay)(templateObject_1$1e || (templateObject_1$1e = __makeTemplateObject(["\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: ", ";\n }\n"], ["\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: ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.modalBG; -}); -var AnimatedDialogContent = animated(DialogContent); -// destructure to not pass custom props to Dialog DOM element -// eslint-disable-next-line @typescript-eslint/no-unused-vars -var StyledDialogContent = styled(function (_a) { - _a.minHeight; _a.maxHeight; _a.mobile; _a.isOpen; var rest = __rest(_a, ["minHeight", "maxHeight", "mobile", "isOpen"]); - return (jsx(AnimatedDialogContent, __assign({}, rest), void 0)); -}).attrs({ - 'aria-label': 'dialog', -})(templateObject_7$i || (templateObject_7$i = __makeTemplateObject(["\n overflow-y: auto;\n\n &[data-reach-dialog-content] {\n margin: 0 0 2rem 0;\n background-color: ", ";\n border: 1px solid ", ";\n box-shadow: 0 4px 8px 0 ", ";\n padding: 0px;\n width: 50vw;\n overflow-y: auto;\n overflow-x: hidden;\n\n align-self: ", ";\n\n max-width: 420px;\n ", "\n ", "\n display: flex;\n border-radius: 20px;\n ", "\n ", "\n }\n"], ["\n overflow-y: auto;\n\n &[data-reach-dialog-content] {\n margin: 0 0 2rem 0;\n background-color: ", ";\n border: 1px solid ", ";\n box-shadow: 0 4px 8px 0 ", ";\n padding: 0px;\n width: 50vw;\n overflow-y: auto;\n overflow-x: hidden;\n\n align-self: ", ";\n\n max-width: 420px;\n ", "\n ", "\n display: flex;\n border-radius: 20px;\n ", "\n ", "\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.bg0; -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}, function (_a) { - var theme = _a.theme; - return transparentize(0.95, theme.shadow1); -}, function (_a) { - var mobile = _a.mobile; - return (mobile ? 'flex-end' : 'center'); -}, function (_a) { - var maxHeight = _a.maxHeight; - return maxHeight && css(templateObject_2$U || (templateObject_2$U = __makeTemplateObject(["\n max-height: ", "vh;\n "], ["\n max-height: ", "vh;\n "])), maxHeight); -}, function (_a) { - var minHeight = _a.minHeight; - return minHeight && css(templateObject_3$L || (templateObject_3$L = __makeTemplateObject(["\n min-height: ", "vh;\n "], ["\n min-height: ", "vh;\n "])), minHeight); -}, function (_a) { - var theme = _a.theme; - return theme.mediaWidth.upToMedium(templateObject_4$A || (templateObject_4$A = __makeTemplateObject(["\n width: 65vw;\n margin: 0;\n "], ["\n width: 65vw;\n margin: 0;\n "]))); -}, function (_a) { - var theme = _a.theme, mobile = _a.mobile; - return theme.mediaWidth.upToSmall(templateObject_6$l || (templateObject_6$l = __makeTemplateObject(["\n width: 85vw;\n ", "\n "], ["\n width: 85vw;\n ", "\n "])), mobile && css(templateObject_5$r || (templateObject_5$r = __makeTemplateObject(["\n width: 100vw;\n border-radius: 20px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n "], ["\n width: 100vw;\n border-radius: 20px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n "])))); -}); -function Modal(_a) { - var isOpen = _a.isOpen, onDismiss = _a.onDismiss, _b = _a.minHeight, minHeight = _b === void 0 ? false : _b, _c = _a.maxHeight, maxHeight = _c === void 0 ? 90 : _c, initialFocusRef = _a.initialFocusRef, children = _a.children; - var fadeTransition = useTransition(isOpen, null, { - config: { duration: 200 }, - from: { opacity: 0 }, - enter: { opacity: 1 }, - leave: { opacity: 0 }, - }); - var _d = __read(useSpring(function () { return ({ y: 0, config: { mass: 1, tension: 210, friction: 20 } }); }), 2), y = _d[0].y, set = _d[1]; - var bind = useGesture({ - onDrag: function (state) { - set({ - y: state.down ? state.movement[1] : 0, - }); - if (state.movement[1] > 300 || (state.velocity > 3 && state.direction[1] > 0)) { - onDismiss(); - } - }, - }); - return (jsx(Fragment, { children: fadeTransition.map(function (_a) { - var item = _a.item, key = _a.key, props = _a.props; - return item && (jsx(StyledDialogOverlay, __assign({ style: props, onDismiss: onDismiss, initialFocusRef: initialFocusRef, unstable_lockFocusAcrossFrames: false }, { children: jsxs(StyledDialogContent, __assign({}, (isMobile - ? __assign(__assign({}, bind()), { style: { transform: y.interpolate(function (y) { return "translateY(" + (y > 0 ? y : 0) + "px)"; }) } }) : {}), { "aria-label": "dialog content", minHeight: minHeight, maxHeight: maxHeight, mobile: isMobile }, { children: [!initialFocusRef && isMobile ? jsx("div", { tabIndex: 1 }, void 0) : null, children] }), void 0) }), key)); - }) }, void 0)); -} -var templateObject_1$1e, templateObject_2$U, templateObject_3$L, templateObject_4$A, templateObject_5$r, templateObject_6$l, templateObject_7$i; - -var ContentWrapper$4 = styled(AutoColumn)(templateObject_1$1d || (templateObject_1$1d = __makeTemplateObject(["\n width: 100%;\n"], ["\n width: 100%;\n"]))); -var ModalUpper$1 = styled(DataCard)(templateObject_2$T || (templateObject_2$T = __makeTemplateObject(["\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n"], ["\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n"]))); -var ConfirmOrLoadingWrapper$1 = styled.div(templateObject_3$K || (templateObject_3$K = __makeTemplateObject(["\n width: 100%;\n padding: 24px;\n position: relative;\n background: ", ";\n"], ["\n width: 100%;\n padding: 24px;\n position: relative;\n background: ", ";\n"])), function (_a) { - var activeBG = _a.activeBG; - return activeBG && - 'radial-gradient(76.02% 75.41% at 1.84% 0%, rgba(255, 0, 122, 0.2) 0%, rgba(33, 114, 229, 0.2) 100%), #FFFFFF;'; -}); -var ConfirmedIcon$2 = styled(ColumnCenter)(templateObject_4$z || (templateObject_4$z = __makeTemplateObject(["\n padding: 60px 0;\n"], ["\n padding: 60px 0;\n"]))); -function AddressClaimModal(_a) { - var _b, _c; - var isOpen = _a.isOpen, onDismiss = _a.onDismiss; - var chainId = useActiveWeb3React().chainId; - // state for smart contract input - var _d = __read(useState(''), 2), typed = _d[0], setTyped = _d[1]; - function handleRecipientType(val) { - setTyped(val); - } - // monitor for third party recipient of claim - var parsedAddress = useENS(typed).address; - // used for UI loading states - var _e = __read(useState(false), 2), attempting = _e[0], setAttempting = _e[1]; - // monitor the status of the claim from contracts and txns - var claimCallback = useClaimCallback(parsedAddress).claimCallback; - var unclaimedAmount = useUserUnclaimedAmount(parsedAddress); - // check if the user has something available - var hasAvailableClaim = useUserHasAvailableClaim(parsedAddress); - var _f = __read(useState(), 2), hash = _f[0], setHash = _f[1]; - // monitor the status of the claim from contracts and txns - var claimPending = useIsTransactionPending(hash !== null && hash !== void 0 ? hash : ''); - var claimConfirmed = hash && !claimPending; - // use the hash to monitor this txn - function onClaim() { - setAttempting(true); - claimCallback() - .then(function (hash) { - setHash(hash); - }) - // reset modal and log error - .catch(function (error) { - setAttempting(false); - console.log(error); - }); - } - function wrappedOnDismiss() { - setAttempting(false); - setHash(undefined); - setTyped(''); - onDismiss(); - } - return (jsxs(Modal, __assign({ isOpen: isOpen, onDismiss: wrappedOnDismiss, maxHeight: 90 }, { children: [jsx(Confetti, { start: Boolean(isOpen && claimConfirmed && attempting) }, void 0), !attempting && (jsxs(ContentWrapper$4, __assign({ gap: "lg" }, { children: [jsxs(ModalUpper$1, { children: [jsx(CardBGImage, {}, void 0), jsx(CardNoise, {}, void 0), jsxs(CardSection, __assign({ gap: "md" }, { children: [jsxs(RowBetween, { children: [jsx(ThemedText.White, __assign({ fontWeight: 500 }, { children: jsx(Trans, { children: "Claim UNI Token" }, void 0) }), void 0), jsx(CloseIcon$2, { onClick: wrappedOnDismiss, style: { zIndex: 99 }, stroke: "white" }, void 0)] }, void 0), jsx(ThemedText.White, __assign({ fontWeight: 700, fontSize: 36 }, { children: jsxs(Trans, { children: [unclaimedAmount === null || unclaimedAmount === void 0 ? void 0 : unclaimedAmount.toFixed(0, (_b = { groupSeparator: ',' }) !== null && _b !== void 0 ? _b : '-'), " UNI"] }, void 0) }), void 0)] }), void 0), jsx(Break$1, {}, void 0)] }, void 0), jsxs(AutoColumn, __assign({ gap: "md", style: { padding: '1rem', paddingTop: '0' }, justify: "center" }, { children: [jsx(ThemedText.SubHeader, __assign({ fontWeight: 500 }, { children: jsx(Trans, { children: "Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission." }, void 0) }), void 0), jsx(AddressInputPanel, { value: typed, onChange: handleRecipientType }, void 0), parsedAddress && !hasAvailableClaim && (jsx(ThemedText.Error, __assign({ error: true }, { children: jsx(Trans, { children: "Address has no available claim" }, void 0) }), void 0)), jsx(ButtonPrimary, __assign({ disabled: !isAddress$1(parsedAddress !== null && parsedAddress !== void 0 ? parsedAddress : '') || !hasAvailableClaim, padding: "16px 16px", width: "100%", "$borderRadius": "12px", mt: "1rem", onClick: onClaim }, { children: jsx(Trans, { children: "Claim UNI" }, void 0) }), void 0)] }), void 0)] }), void 0)), (attempting || claimConfirmed) && (jsxs(ConfirmOrLoadingWrapper$1, __assign({ activeBG: true }, { children: [jsx(CardNoise, {}, void 0), jsx(CardBGImageSmaller, { desaturate: true }, void 0), jsxs(RowBetween, { children: [jsx("div", {}, void 0), jsx(CloseIcon$2, { onClick: wrappedOnDismiss, style: { zIndex: 99 }, stroke: "black" }, void 0)] }, void 0), jsx(ConfirmedIcon$2, { children: !claimConfirmed ? (jsx(CustomLightSpinner, { src: Circle$1, alt: "loader", size: '90px' }, void 0)) : (jsx(UniTokenAnimated, { width: "72px", src: tokenLogo, alt: "UNI logo" }, void 0)) }, void 0), jsxs(AutoColumn, __assign({ gap: "100px", justify: 'center' }, { children: [jsxs(AutoColumn, __assign({ gap: "12px", justify: 'center' }, { children: [jsx(ThemedText.LargeHeader, __assign({ fontWeight: 600, color: "black" }, { children: claimConfirmed ? jsx(Trans, { children: "Claimed" }, void 0) : jsx(Trans, { children: "Claiming" }, void 0) }), void 0), !claimConfirmed && (jsx(Text$1, __assign({ fontSize: 36, color: '#ff007a', fontWeight: 800 }, { children: jsxs(Trans, { children: [unclaimedAmount === null || unclaimedAmount === void 0 ? void 0 : unclaimedAmount.toFixed(0, (_c = { groupSeparator: ',' }) !== null && _c !== void 0 ? _c : '-'), " UNI"] }, void 0) }), void 0)), parsedAddress && (jsx(ThemedText.LargeHeader, __assign({ fontWeight: 600, color: "black" }, { children: jsxs(Trans, { children: ["for ", shortenAddress(parsedAddress)] }, void 0) }), void 0))] }), void 0), claimConfirmed && (jsx(Fragment, { children: jsxs(ThemedText.SubHeader, __assign({ fontWeight: 500, color: "black" }, { children: [jsxs("span", __assign({ role: "img", "aria-label": "party-hat" }, { children: ["\uD83C\uDF89", ' '] }), void 0), jsx(Trans, { children: "Welcome to team Unicorn :) " }, void 0), jsx("span", __assign({ role: "img", "aria-label": "party-hat" }, { children: "\uD83C\uDF89" }), void 0)] }), void 0) }, void 0)), attempting && !hash && (jsx(ThemedText.SubHeader, __assign({ color: "black" }, { children: jsx(Trans, { children: "Confirm this transaction in your wallet" }, void 0) }), void 0)), attempting && hash && !claimConfirmed && chainId && hash && (jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, hash, ExplorerDataType.TRANSACTION), style: { zIndex: 99 } }, { children: jsx(Trans, { children: "View transaction on Explorer" }, void 0) }), void 0))] }), void 0)] }), void 0))] }), void 0)); -} -var templateObject_1$1d, templateObject_2$T, templateObject_3$K, templateObject_4$z; - -var _a$a; -var ApplicationModal; -(function (ApplicationModal) { - ApplicationModal[ApplicationModal["WALLET"] = 0] = "WALLET"; - ApplicationModal[ApplicationModal["SETTINGS"] = 1] = "SETTINGS"; - ApplicationModal[ApplicationModal["SELF_CLAIM"] = 2] = "SELF_CLAIM"; - ApplicationModal[ApplicationModal["ADDRESS_CLAIM"] = 3] = "ADDRESS_CLAIM"; - ApplicationModal[ApplicationModal["CLAIM_POPUP"] = 4] = "CLAIM_POPUP"; - ApplicationModal[ApplicationModal["MENU"] = 5] = "MENU"; - ApplicationModal[ApplicationModal["DELEGATE"] = 6] = "DELEGATE"; - ApplicationModal[ApplicationModal["VOTE"] = 7] = "VOTE"; - ApplicationModal[ApplicationModal["POOL_OVERVIEW_OPTIONS"] = 8] = "POOL_OVERVIEW_OPTIONS"; - ApplicationModal[ApplicationModal["NETWORK_SELECTOR"] = 9] = "NETWORK_SELECTOR"; - ApplicationModal[ApplicationModal["PRIVACY_POLICY"] = 10] = "PRIVACY_POLICY"; -})(ApplicationModal || (ApplicationModal = {})); -var initialState$8 = { - chainId: null, - openModal: null, - popupList: [], -}; -var applicationSlice = createSlice({ - name: 'application', - initialState: initialState$8, - reducers: { - updateChainId: function (state, action) { - var chainId = action.payload.chainId; - state.chainId = chainId; - }, - setOpenModal: function (state, action) { - state.openModal = action.payload; - }, - addPopup: function (state, _a) { - var _b = _a.payload, content = _b.content, key = _b.key, _c = _b.removeAfterMs, removeAfterMs = _c === void 0 ? DEFAULT_TXN_DISMISS_MS : _c; - state.popupList = (key ? state.popupList.filter(function (popup) { return popup.key !== key; }) : state.popupList).concat([ - { - key: key || nanoid(), - show: true, - content: content, - removeAfterMs: removeAfterMs, - }, - ]); - }, - removePopup: function (state, _a) { - var key = _a.payload.key; - state.popupList.forEach(function (p) { - if (p.key === key) { - p.show = false; - } - }); - }, - }, -}); -var updateChainId = (_a$a = applicationSlice.actions, _a$a.updateChainId), setOpenModal = _a$a.setOpenModal, addPopup = _a$a.addPopup, removePopup = _a$a.removePopup; -var application = applicationSlice.reducer; - -var Field$3; -(function (Field) { - Field["LIQUIDITY_PERCENT"] = "LIQUIDITY_PERCENT"; - Field["LIQUIDITY"] = "LIQUIDITY"; - Field["CURRENCY_A"] = "CURRENCY_A"; - Field["CURRENCY_B"] = "CURRENCY_B"; -})(Field$3 || (Field$3 = {})); -var typeInput$3 = createAction('burn/typeInputBurn'); - -var initialState$7 = { - independentField: Field$3.LIQUIDITY_PERCENT, - typedValue: '0', -}; -var burn = createReducer(initialState$7, function (builder) { - return builder.addCase(typeInput$3, function (state, _a) { - var _b = _a.payload, field = _b.field, typedValue = _b.typedValue; - return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); - }); -}); +var EMPTY_CONNECTOR = initializeConnector(function () { + return EMPTY +}) +atomWithDefault(function () { + return EMPTY_CONNECTOR +}) +atomWithDefault(function () { + return EMPTY_CONNECTOR +}) + +var REGISTRAR_ABI = [ + { + constant: true, + inputs: [ + { + name: 'node', + type: 'bytes32', + }, + ], + name: 'resolver', + outputs: [ + { + name: 'resolverAddress', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, +] +var REGISTRAR_ADDRESS = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e' +var RESOLVER_ABI = [ + { + constant: true, + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'contenthash', + outputs: [ + { + internalType: 'bytes', + name: '', + type: 'bytes', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, +] +// cache the resolver contracts since most of them are the public resolver +function resolverContract(resolverAddress, provider) { + return new Contract(resolverAddress, RESOLVER_ABI, provider) +} +/** + * Fetches and decodes the result of an ENS contenthash lookup on mainnet to a URI + * @param ensName to resolve + * @param provider provider to use to fetch the data + */ +function resolveENSContentHash(ensName, provider) { + return __awaiter(this, void 0, void 0, function () { + var ensRegistrarContract, hash, resolverAddress + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + ensRegistrarContract = new Contract(REGISTRAR_ADDRESS, REGISTRAR_ABI, provider) + hash = namehash(ensName) + return [4 /*yield*/, ensRegistrarContract.resolver(hash)] + case 1: + resolverAddress = _a.sent() + return [2 /*return*/, resolverContract(resolverAddress, provider).contenthash(hash)] + } + }) + }) +} + +function hexToUint8Array(hex) { + hex = hex.startsWith('0x') ? hex.substr(2) : hex + if (hex.length % 2 !== 0) throw new Error('hex must have length that is multiple of 2') + var arr = new Uint8Array(hex.length / 2) + for (var i = 0; i < arr.length; i++) { + arr[i] = parseInt(hex.substr(i * 2, 2), 16) + } + return arr +} +var UTF_8_DECODER = new TextDecoder('utf-8') +/** + * Returns the URI representation of the content hash for supported codecs + * @param contenthash to decode + */ +function contenthashToUri(contenthash) { + var data = hexToUint8Array(contenthash) + var codec = getNameFromData(data) + switch (codec) { + case 'ipfs-ns': { + var unprefixedData = rmPrefix(data) + var cid = new CID(unprefixedData) + return 'ipfs://' + toB58String(cid.multihash) + } + case 'ipns-ns': { + var unprefixedData = rmPrefix(data) + var cid = new CID(unprefixedData) + var multihash = decode(cid.multihash) + if (multihash.name === 'identity') { + return 'ipns://' + UTF_8_DECODER.decode(multihash.digest).trim() + } else { + return 'ipns://' + toB58String(cid.multihash) + } + } + default: + throw new Error('Unrecognized codec: ' + codec) + } +} -var selectPercent = createAction('burnV3/selectBurnPercent'); +var ENS_NAME_REGEX$1 = /^(([a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\.)+)eth(\/.*)?$/ +function parseENSAddress(ensAddress) { + var match = ensAddress.match(ENS_NAME_REGEX$1) + if (!match) return undefined + return { ensName: match[1].toLowerCase() + 'eth', ensPath: match[4] } +} -var initialState$6 = { - percent: 0, -}; -var burnV3 = createReducer(initialState$6, function (builder) { - return builder.addCase(selectPercent, function (state, _a) { - var percent = _a.payload.percent; - return __assign(__assign({}, state), { percent: percent }); - }); -}); +/** + * Given a URI that may be ipfs, ipns, http, https, ar, or data protocol, return the fetch-able http(s) URLs for the same content + * @param uri to convert to fetch-able http url + */ +function uriToHttp(uri) { + var _a, _b, _c + var protocol = uri.split(':')[0].toLowerCase() + switch (protocol) { + case 'data': + return [uri] + case 'https': + return [uri] + case 'http': + return ['https' + uri.substr(4), uri] + case 'ipfs': + var hash = (_a = uri.match(/^ipfs:(\/\/)?(.*)$/i)) === null || _a === void 0 ? void 0 : _a[2] + return ['https://cloudflare-ipfs.com/ipfs/' + hash + '/', 'https://ipfs.io/ipfs/' + hash + '/'] + case 'ipns': + var name_1 = (_b = uri.match(/^ipns:(\/\/)?(.*)$/i)) === null || _b === void 0 ? void 0 : _b[2] + return ['https://cloudflare-ipfs.com/ipns/' + name_1 + '/', 'https://ipfs.io/ipns/' + name_1 + '/'] + case 'ar': + var tx = (_c = uri.match(/^ar:(\/\/)?(.*)$/i)) === null || _c === void 0 ? void 0 : _c[2] + return ['https://arweave.net/' + tx] + default: + return [] + } +} -var _a$9; -// List of supported subgraphs. Note that the app currently only support one active subgraph at a time -var CHAIN_SUBGRAPH_URL = (_a$9 = {}, - _a$9[SupportedChainId.MAINNET] = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3', - _a$9[SupportedChainId.RINKEBY] = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3', - _a$9[SupportedChainId.ARBITRUM_ONE] = 'https://api.thegraph.com/subgraphs/name/ianlapham/arbitrum-minimal', - _a$9[SupportedChainId.OPTIMISM] = 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-optimism-dev', - _a$9[SupportedChainId.POLYGON] = 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-v3-polygon', - _a$9); -var api$1 = createApi({ - reducerPath: 'dataApi', - baseQuery: graphqlRequestBaseQuery(), - endpoints: function (builder) { return ({ - allV3Ticks: builder.query({ - query: function (_a) { - var poolAddress = _a.poolAddress, _b = _a.skip, skip = _b === void 0 ? 0 : _b; - return ({ - document: gql(templateObject_1$1c || (templateObject_1$1c = __makeTemplateObject(["\n query allV3Ticks($poolAddress: String!, $skip: Int!) {\n ticks(first: 1000, skip: $skip, where: { poolAddress: $poolAddress }, orderBy: tickIdx) {\n tick: tickIdx\n liquidityNet\n price0\n price1\n }\n }\n "], ["\n query allV3Ticks($poolAddress: String!, $skip: Int!) {\n ticks(first: 1000, skip: $skip, where: { poolAddress: $poolAddress }, orderBy: tickIdx) {\n tick: tickIdx\n liquidityNet\n price0\n price1\n }\n }\n "]))), - variables: { - poolAddress: poolAddress, - skip: skip, - }, - }); - }, - }), - feeTierDistribution: builder.query({ - query: function (_a) { - var token0 = _a.token0, token1 = _a.token1; - return ({ - document: gql(templateObject_2$S || (templateObject_2$S = __makeTemplateObject(["\n query feeTierDistribution($token0: String!, $token1: String!) {\n _meta {\n block {\n number\n }\n }\n asToken0: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token0, token1: $token1 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n asToken1: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token1, token1: $token0 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n }\n "], ["\n query feeTierDistribution($token0: String!, $token1: String!) {\n _meta {\n block {\n number\n }\n }\n asToken0: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token0, token1: $token1 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n asToken1: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token1, token1: $token0 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n }\n "]))), - variables: { - token0: token0, - token1: token1, - }, - }); - }, - }), - }); }, -}); -// Graphql query client wrapper that builds a dynamic url based on chain id -function graphqlRequestBaseQuery() { - var _this = this; - return function (_a, _b) { - var document = _a.document, variables = _a.variables; - var getState = _b.getState; - return __awaiter(_this, void 0, void 0, function () { - var chainId, subgraphUrl, error_1, name_1, message, stack, request, response; - var _c; - return __generator(this, function (_d) { - switch (_d.label) { - case 0: - _d.trys.push([0, 2, , 3]); - chainId = getState().application.chainId; - subgraphUrl = chainId ? CHAIN_SUBGRAPH_URL[chainId] : undefined; - if (!subgraphUrl) { - return [2 /*return*/, { - error: { - name: 'UnsupportedChainId', - message: "Subgraph queries against ChainId " + chainId + " are not supported.", - stack: '', - }, - }]; - } - _c = {}; - return [4 /*yield*/, new GraphQLClient(subgraphUrl).request(document, variables)]; - case 1: return [2 /*return*/, (_c.data = _d.sent(), _c.meta = {}, _c)]; - case 2: - error_1 = _d.sent(); - if (error_1 instanceof ClientError) { - name_1 = error_1.name, message = error_1.message, stack = error_1.stack, request = error_1.request, response = error_1.response; - return [2 /*return*/, { error: { name: name_1, message: message, stack: stack }, meta: { request: request, response: response } }]; - } - throw error_1; - case 3: return [2 /*return*/]; - } - }); - }); - }; -} -var templateObject_1$1c, templateObject_2$S; +var ValidationSchema +;(function (ValidationSchema) { + ValidationSchema['LIST'] = 'list' + ValidationSchema['TOKENS'] = 'tokens' +})(ValidationSchema || (ValidationSchema = {})) +var validator = new Promise(function (resolve) { + return __awaiter(void 0, void 0, void 0, function () { + var _a, ajv, schema, validator + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + return [ + 4 /*yield*/, + Promise.all([ + import('ajv'), + Promise.resolve().then(function () { + return tokenlist_schema$1 + }), + ]), + ] + case 1: + ;(_a = __read.apply(void 0, [_b.sent(), 2])), (ajv = _a[0]), (schema = _a[1]) + validator = new ajv.default({ allErrors: true }) + .addSchema(schema, ValidationSchema.LIST) + // Adds a meta scheme of Pick + .addSchema( + __assign(__assign({}, schema), { $id: schema.$id + '#tokens', required: ['tokens'] }), + ValidationSchema.TOKENS + ) + resolve(validator) + return [2 /*return*/] + } + }) + }) +}) +function getValidationErrors(validate) { + var _a, _b + return (_b = + (_a = validate === null || validate === void 0 ? void 0 : validate.errors) === null || _a === void 0 + ? void 0 + : _a + .map(function (error) { + return [error.dataPath, error.message].filter(Boolean).join(' ') + }) + .join('; ')) !== null && _b !== void 0 + ? _b + : 'unknown error' +} +/** + * Validates a token list. + * @param json the TokenList to validate + */ +function validateTokenList(json) { + return __awaiter(this, void 0, void 0, function () { + var validate + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + return [4 /*yield*/, validator] + case 1: + validate = _a.sent().getSchema(ValidationSchema.LIST) + if (validate === null || validate === void 0 ? void 0 : validate(json)) { + return [2 /*return*/, json] + } + throw new Error('Token list failed validation: ' + getValidationErrors(validate)) + } + }) + }) +} -// fired once when the app reloads but before the app renders -// allows any updates to be applied to store data loaded from localStorage -var updateVersion = createAction('global/updateVersion'); +var listCache = new Map() +/** Fetches and validates a token list. */ +function fetchTokenList$1(listUrl, resolveENSContentHash) { + var _a + return __awaiter(this, void 0, void 0, function () { + var cached, + urls, + parsedENS, + contentHashUri, + error_1, + message, + translatedUri, + message, + i, + url, + isLast, + response, + error_2, + message, + message, + json, + list + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + cached = listCache === null || listCache === void 0 ? void 0 : listCache.get(listUrl) // avoid spurious re-fetches + if (cached) { + return [2 /*return*/, cached] + } + parsedENS = parseENSAddress(listUrl) + if (!parsedENS) return [3 /*break*/, 5] + contentHashUri = void 0 + _b.label = 1 + case 1: + _b.trys.push([1, 3, , 4]) + return [4 /*yield*/, resolveENSContentHash(parsedENS.ensName)] + case 2: + contentHashUri = _b.sent() + return [3 /*break*/, 4] + case 3: + error_1 = _b.sent() + message = 'failed to resolve ENS name: ' + parsedENS.ensName + console.debug(message, error_1) + throw new Error(message) + case 4: + translatedUri = void 0 + try { + translatedUri = contenthashToUri(contentHashUri) + } catch (error) { + message = 'failed to translate contenthash to URI: ' + contentHashUri + console.debug(message, error) + throw new Error(message) + } + urls = uriToHttp('' + translatedUri + ((_a = parsedENS.ensPath) !== null && _a !== void 0 ? _a : '')) + return [3 /*break*/, 6] + case 5: + urls = uriToHttp(listUrl) + _b.label = 6 + case 6: + i = 0 + _b.label = 7 + case 7: + if (!(i < urls.length)) return [3 /*break*/, 15] + url = urls[i] + isLast = i === urls.length - 1 + response = void 0 + _b.label = 8 + case 8: + _b.trys.push([8, 10, , 11]) + return [4 /*yield*/, fetch(url, { credentials: 'omit' })] + case 9: + response = _b.sent() + return [3 /*break*/, 11] + case 10: + error_2 = _b.sent() + message = 'failed to fetch list: ' + listUrl + console.debug(message, error_2) + if (isLast) throw new Error(message) + return [3 /*break*/, 14] + case 11: + if (!response.ok) { + message = 'failed to fetch list: ' + listUrl + console.debug(message, response.statusText) + if (isLast) throw new Error(message) + return [3 /*break*/, 14] + } + return [4 /*yield*/, response.json()] + case 12: + json = _b.sent() + return [4 /*yield*/, validateTokenList(json)] + case 13: + list = _b.sent() + listCache === null || listCache === void 0 ? void 0 : listCache.set(listUrl, list) + return [2 /*return*/, list] + case 14: + i++ + return [3 /*break*/, 7] + case 15: + throw new Error('Unrecognized list URL protocol.') + } + }) + }) +} -var fetchTokenList = { - pending: createAction('lists/fetchTokenList/pending'), - fulfilled: createAction('lists/fetchTokenList/fulfilled'), - rejected: createAction('lists/fetchTokenList/rejected'), -}; -// add and remove from list options -var addList = createAction('lists/addList'); -var removeList = createAction('lists/removeList'); -// select which lists to search across from loaded lists -var enableList = createAction('lists/enableList'); -var disableList = createAction('lists/disableList'); -// versioning -var acceptListUpdate = createAction('lists/acceptListUpdate'); - -var NEW_LIST_STATE = { - error: null, - current: null, - loadingRequestId: null, - pendingUpdate: null, -}; -var initialState$5 = { - lastInitializedDefaultListOfLists: DEFAULT_LIST_OF_LISTS, - byUrl: __assign({}, DEFAULT_LIST_OF_LISTS.reduce(function (memo, listUrl) { - memo[listUrl] = NEW_LIST_STATE; - return memo; - }, {})), - activeListUrls: DEFAULT_ACTIVE_LIST_URLS, -}; -var lists = createReducer(initialState$5, function (builder) { - return builder - .addCase(fetchTokenList.pending, function (state, _a) { - var _b, _c, _d, _e; - var _f = _a.payload, requestId = _f.requestId, url = _f.url; - var current = (_c = (_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.current) !== null && _c !== void 0 ? _c : null; - var pendingUpdate = (_e = (_d = state.byUrl[url]) === null || _d === void 0 ? void 0 : _d.pendingUpdate) !== null && _e !== void 0 ? _e : null; - state.byUrl[url] = { - current: current, - pendingUpdate: pendingUpdate, - loadingRequestId: requestId, - error: null, - }; - }) - .addCase(fetchTokenList.fulfilled, function (state, _a) { - var _b, _c, _d; - var _e = _a.payload, requestId = _e.requestId, tokenList = _e.tokenList, url = _e.url; - var current = (_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.current; - var loadingRequestId = (_c = state.byUrl[url]) === null || _c === void 0 ? void 0 : _c.loadingRequestId; - // no-op if update does nothing - if (current) { - var upgradeType = getVersionUpgrade(current.version, tokenList.version); - if (upgradeType === VersionUpgrade.NONE) - return; - if (loadingRequestId === null || loadingRequestId === requestId) { - state.byUrl[url] = { - current: current, - pendingUpdate: tokenList, - loadingRequestId: null, - error: null, - }; - } - } - else { - // activate if on default active - if (DEFAULT_ACTIVE_LIST_URLS.includes(url)) { - (_d = state.activeListUrls) === null || _d === void 0 ? void 0 : _d.push(url); - } - state.byUrl[url] = { - current: tokenList, - pendingUpdate: null, - loadingRequestId: null, - error: null, - }; - } - }) - .addCase(fetchTokenList.rejected, function (state, _a) { - var _b; - var _c = _a.payload, url = _c.url, requestId = _c.requestId, errorMessage = _c.errorMessage; - if (((_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.loadingRequestId) !== requestId) { - // no-op since it's not the latest request - return; - } - state.byUrl[url] = { - current: state.byUrl[url].current ? state.byUrl[url].current : null, - pendingUpdate: null, - loadingRequestId: null, - error: errorMessage, - }; - }) - .addCase(addList, function (state, _a) { - var url = _a.payload; - if (!state.byUrl[url]) { - state.byUrl[url] = NEW_LIST_STATE; - } - }) - .addCase(removeList, function (state, _a) { - var url = _a.payload; - if (state.byUrl[url]) { - delete state.byUrl[url]; - } - // remove list from active urls if needed - if (state.activeListUrls && state.activeListUrls.includes(url)) { - state.activeListUrls = state.activeListUrls.filter(function (u) { return u !== url; }); - } - }) - .addCase(enableList, function (state, _a) { - var url = _a.payload; - if (!state.byUrl[url]) { - state.byUrl[url] = NEW_LIST_STATE; - } - if (state.activeListUrls && !state.activeListUrls.includes(url)) { - state.activeListUrls.push(url); - } - if (!state.activeListUrls) { - state.activeListUrls = [url]; - } - }) - .addCase(disableList, function (state, _a) { - var url = _a.payload; - if (state.activeListUrls && state.activeListUrls.includes(url)) { - state.activeListUrls = state.activeListUrls.filter(function (u) { return u !== url; }); - } - }) - .addCase(acceptListUpdate, function (state, _a) { - var _b; - var url = _a.payload; - if (!((_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.pendingUpdate)) { - throw new Error('accept list update called without pending update'); - } - state.byUrl[url] = __assign(__assign({}, state.byUrl[url]), { current: state.byUrl[url].pendingUpdate, pendingUpdate: null }); - }) - .addCase(updateVersion, function (state) { - // state loaded from localStorage, but new lists have never been initialized - if (!state.lastInitializedDefaultListOfLists) { - state.byUrl = initialState$5.byUrl; - state.activeListUrls = initialState$5.activeListUrls; - } - else if (state.lastInitializedDefaultListOfLists) { - var lastInitializedSet_1 = state.lastInitializedDefaultListOfLists.reduce(function (s, l) { return s.add(l); }, new Set()); - var newListOfListsSet_1 = DEFAULT_LIST_OF_LISTS.reduce(function (s, l) { return s.add(l); }, new Set()); - DEFAULT_LIST_OF_LISTS.forEach(function (listUrl) { - if (!lastInitializedSet_1.has(listUrl)) { - state.byUrl[listUrl] = NEW_LIST_STATE; - } - }); - state.lastInitializedDefaultListOfLists.forEach(function (listUrl) { - if (!newListOfListsSet_1.has(listUrl)) { - delete state.byUrl[listUrl]; - } - }); - } - state.lastInitializedDefaultListOfLists = DEFAULT_LIST_OF_LISTS; - // if no active lists, activate defaults - if (!state.activeListUrls) { - state.activeListUrls = DEFAULT_ACTIVE_LIST_URLS; - // for each list on default list, initialize if needed - DEFAULT_ACTIVE_LIST_URLS.map(function (listUrl) { - if (!state.byUrl[listUrl]) { - state.byUrl[listUrl] = NEW_LIST_STATE; - } - return true; - }); - } - }); -}); +/** + * Returns a map of the given addresses to their eventually consistent ETH balances. + */ +function useNativeCurrencyBalances(uncheckedAddresses) { + var chainId = useActiveWeb3React().chainId + var multicallContract = useInterfaceMulticall() + var validAddressInputs = useMemo( + function () { + return uncheckedAddresses + ? uncheckedAddresses + .map(isAddress) + .filter(function (a) { + return a !== false + }) + .sort() + .map(function (addr) { + return [addr] + }) + : [] + }, + [uncheckedAddresses] + ) + var results = useSingleContractMultipleData(multicallContract, 'getEthBalance', validAddressInputs) + return useMemo( + function () { + return validAddressInputs.reduce(function (memo, _a, i) { + var _b, _c + var _d = __read(_a, 1), + address = _d[0] + var value = + (_c = + (_b = results === null || results === void 0 ? void 0 : results[i]) === null || _b === void 0 + ? void 0 + : _b.result) === null || _c === void 0 + ? void 0 + : _c[0] + if (value && chainId) + memo[address] = CurrencyAmount.fromRawAmount(nativeOnChain(chainId), JSBI.BigInt(value.toString())) + return memo + }, {}) + }, + [validAddressInputs, chainId, results] + ) +} +var ERC20Interface = new Interface(ERC20ABI) +var tokenBalancesGasRequirement = { gasRequired: 125000 } +/** + * Returns a map of token addresses to their eventually consistent token balances for a single account. + */ +function useTokenBalancesWithLoadingIndicator(address, tokens) { + var validatedTokens = useMemo( + function () { + var _a + return (_a = + tokens === null || tokens === void 0 + ? void 0 + : tokens.filter(function (t) { + return isAddress(t === null || t === void 0 ? void 0 : t.address) !== false + })) !== null && _a !== void 0 + ? _a + : [] + }, + [tokens] + ) + var validatedTokenAddresses = useMemo( + function () { + return validatedTokens.map(function (vt) { + return vt.address + }) + }, + [validatedTokens] + ) + var balances = useMultipleContractSingleData( + validatedTokenAddresses, + ERC20Interface, + 'balanceOf', + useMemo( + function () { + return [address] + }, + [address] + ), + tokenBalancesGasRequirement + ) + var anyLoading = useMemo( + function () { + return balances.some(function (callState) { + return callState.loading + }) + }, + [balances] + ) + return useMemo( + function () { + return [ + address && validatedTokens.length > 0 + ? validatedTokens.reduce(function (memo, token, i) { + var _a, _b + var value = + (_b = + (_a = balances === null || balances === void 0 ? void 0 : balances[i]) === null || _a === void 0 + ? void 0 + : _a.result) === null || _b === void 0 + ? void 0 + : _b[0] + var amount = value ? JSBI.BigInt(value.toString()) : undefined + if (amount) { + memo[token.address] = CurrencyAmount.fromRawAmount(token, amount) + } + return memo + }, {}) + : {}, + anyLoading, + ] + }, + [address, validatedTokens, anyLoading, balances] + ) +} +function useTokenBalances(address, tokens) { + return useTokenBalancesWithLoadingIndicator(address, tokens)[0] +} +// get the balance for a single token/account combo +function useTokenBalance(account, token) { + var tokenBalances = useTokenBalances( + account, + useMemo( + function () { + return [token] + }, + [token] + ) + ) + if (!token) return undefined + return tokenBalances[token.address] +} +function useCurrencyBalances(account, currencies) { + var tokens = useMemo( + function () { + var _a + return (_a = + currencies === null || currencies === void 0 + ? void 0 + : currencies.filter(function (currency) { + var _a + return (_a = currency === null || currency === void 0 ? void 0 : currency.isToken) !== null && + _a !== void 0 + ? _a + : false + })) !== null && _a !== void 0 + ? _a + : [] + }, + [currencies] + ) + var tokenBalances = useTokenBalances(account, tokens) + var containsETH = useMemo( + function () { + var _a + return (_a = + currencies === null || currencies === void 0 + ? void 0 + : currencies.some(function (currency) { + return currency === null || currency === void 0 ? void 0 : currency.isNative + })) !== null && _a !== void 0 + ? _a + : false + }, + [currencies] + ) + var ethBalance = useNativeCurrencyBalances( + useMemo( + function () { + return containsETH ? [account] : [] + }, + [containsETH, account] + ) + ) + return useMemo( + function () { + var _a + return (_a = + currencies === null || currencies === void 0 + ? void 0 + : currencies.map(function (currency) { + if (!account || !currency) return undefined + if (currency.isToken) return tokenBalances[currency.address] + if (currency.isNative) return ethBalance[account] + return undefined + })) !== null && _a !== void 0 + ? _a + : [] + }, + [account, currencies, ethBalance, tokenBalances] + ) +} +function useCurrencyBalance(account, currency) { + return useCurrencyBalances( + account, + useMemo( + function () { + return [currency] + }, + [currency] + ) + )[0] +} -/** - * Converts a filter to the corresponding string key - * @param filter the filter to convert - */ -function filterToKey(filter) { - var _a, _b, _c, _d; - return ((_a = filter.address) !== null && _a !== void 0 ? _a : '') + ":" + ((_d = (_c = (_b = filter.topics) === null || _b === void 0 ? void 0 : _b.map(function (topic) { return (topic ? (Array.isArray(topic) ? topic.join(';') : topic) : '\0'); })) === null || _c === void 0 ? void 0 : _c.join('-')) !== null && _d !== void 0 ? _d : ''); -} -/** - * Convert a filter key to the corresponding filter - * @param key key to convert - */ -function keyToFilter(key) { - var pcs = key.split(':'); - var address = pcs[0]; - var topics = pcs[1].split('-').map(function (topic) { - if (topic === '\0') - return null; - var parts = topic.split(';'); - if (parts.length === 1) - return parts[0]; - return parts; - }); - return { - address: address.length === 0 ? undefined : address, - topics: topics, - }; +var alwaysTrue = function () { + return true +} +/** Creates a filter function that filters tokens that do not match the query. */ +function getTokenFilter(query) { + var searchingAddress = isAddress(query) + if (searchingAddress) { + var address_1 = searchingAddress.toLowerCase() + return function (t) { + return 'address' in t && address_1 === t.address.toLowerCase() + } + } + var queryParts = query + .toLowerCase() + .split(/\s+/) + .filter(function (s) { + return s.length > 0 + }) + if (queryParts.length === 0) return alwaysTrue + var match = function (s) { + var parts = s + .toLowerCase() + .split(/\s+/) + .filter(function (s) { + return s.length > 0 + }) + return queryParts.every(function (p) { + return ( + p.length === 0 || + parts.some(function (sp) { + return sp.startsWith(p) || sp.endsWith(p) + }) + ) + }) + } + return function (_a) { + var name = _a.name, + symbol = _a.symbol + return Boolean((symbol && match(symbol)) || (name && match(name))) + } } -var _a$8; -var slice = createSlice({ - name: 'logs', - initialState: {}, - reducers: { - addListener: function (state, _a) { - var _b = _a.payload, chainId = _b.chainId, filter = _b.filter; - if (!state[chainId]) - state[chainId] = {}; - var key = filterToKey(filter); - if (!state[chainId][key]) - state[chainId][key] = { - listeners: 1, - }; - else - state[chainId][key].listeners++; - }, - fetchingLogs: function (state, _a) { - var e_1, _b; - var _c = _a.payload, chainId = _c.chainId, filters = _c.filters, blockNumber = _c.blockNumber; - if (!state[chainId]) - return; - try { - for (var filters_1 = __values(filters), filters_1_1 = filters_1.next(); !filters_1_1.done; filters_1_1 = filters_1.next()) { - var filter = filters_1_1.value; - var key = filterToKey(filter); - if (!state[chainId][key]) - continue; - state[chainId][key].fetchingBlockNumber = blockNumber; - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (filters_1_1 && !filters_1_1.done && (_b = filters_1.return)) _b.call(filters_1); - } - finally { if (e_1) throw e_1.error; } - } - }, - fetchedLogs: function (state, _a) { - var _b = _a.payload, chainId = _b.chainId, filter = _b.filter, results = _b.results; - if (!state[chainId]) - return; - var key = filterToKey(filter); - var fetchState = state[chainId][key]; - if (!fetchState || (fetchState.results && fetchState.results.blockNumber > results.blockNumber)) - return; - fetchState.results = results; - }, - fetchedLogsError: function (state, _a) { - var _b = _a.payload, chainId = _b.chainId, filter = _b.filter, blockNumber = _b.blockNumber; - if (!state[chainId]) - return; - var key = filterToKey(filter); - var fetchState = state[chainId][key]; - if (!fetchState || (fetchState.results && fetchState.results.blockNumber > blockNumber)) - return; - fetchState.results = { - blockNumber: blockNumber, - error: true, - }; - }, - removeListener: function (state, _a) { - var _b = _a.payload, chainId = _b.chainId, filter = _b.filter; - if (!state[chainId]) - return; - var key = filterToKey(filter); - if (!state[chainId][key]) - return; - state[chainId][key].listeners--; - }, - }, -}); -var logs = slice.reducer; -(_a$8 = slice.actions, _a$8.addListener); _a$8.removeListener; var fetchedLogs = _a$8.fetchedLogs, fetchedLogsError = _a$8.fetchedLogsError, fetchingLogs = _a$8.fetchingLogs; - -var Field$2; -(function (Field) { - Field["CURRENCY_A"] = "CURRENCY_A"; - Field["CURRENCY_B"] = "CURRENCY_B"; -})(Field$2 || (Field$2 = {})); -var typeInput$2 = createAction('mint/typeInputMint'); -var resetMintState$1 = createAction('mint/resetMintState'); - -var initialState$4 = { - independentField: Field$2.CURRENCY_A, - typedValue: '', - otherTypedValue: '', - startPriceTypedValue: '', - leftRangeTypedValue: '', - rightRangeTypedValue: '', -}; -var mint = createReducer(initialState$4, function (builder) { - return builder - .addCase(resetMintState$1, function () { return initialState$4; }) - .addCase(typeInput$2, function (state, _a) { - var _b = _a.payload, field = _b.field, typedValue = _b.typedValue, noLiquidity = _b.noLiquidity; - if (noLiquidity) { - // they're typing into the field they've last typed in - if (field === state.independentField) { - return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); - } - // they're typing into a new field, store the other value - else { - return __assign(__assign({}, state), { independentField: field, typedValue: typedValue, otherTypedValue: state.typedValue }); - } - } - else { - return __assign(__assign({}, state), { independentField: field, typedValue: typedValue, otherTypedValue: '' }); - } - }); -}); +/** Sorts currency amounts (descending). */ +function balanceComparator(a, b) { + if (a && b) { + return a.greaterThan(b) ? -1 : a.equalTo(b) ? 0 : 1 + } else if (a === null || a === void 0 ? void 0 : a.greaterThan('0')) { + return -1 + } else if (b === null || b === void 0 ? void 0 : b.greaterThan('0')) { + return 1 + } + return 0 +} +/** Sorts tokens by currency amount (descending), then symbol (ascending). */ +function tokenComparator(balances, a, b) { + // Sorts by balances + var balanceComparison = balanceComparator(balances[a.address], balances[b.address]) + if (balanceComparison !== 0) return balanceComparison + // Sorts by symbol + if (a.symbol && b.symbol) { + return a.symbol.toLowerCase() < b.symbol.toLowerCase() ? -1 : 1 + } + return -1 +} +/** Sorts tokens by query, giving precedence to exact matches and partial matches. */ +function useSortTokensByQuery(query, tokens) { + return useMemo( + function () { + if (!tokens) { + return [] + } + var matches = query + .toLowerCase() + .split(/\s+/) + .filter(function (s) { + return s.length > 0 + }) + if (matches.length > 1) { + return tokens + } + var exactMatches = [] + var symbolSubtrings = [] + var rest = [] + // sort tokens by exact match -> subtring on symbol match -> rest + tokens.map(function (token) { + var _a, _b + if (((_a = token.symbol) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === matches[0]) { + return exactMatches.push(token) + } else if ( + (_b = token.symbol) === null || _b === void 0 + ? void 0 + : _b.toLowerCase().startsWith(query.toLowerCase().trim()) + ) { + return symbolSubtrings.push(token) + } else { + return rest.push(token) + } + }) + return __spreadArray( + __spreadArray(__spreadArray([], __read(exactMatches), false), __read(symbolSubtrings), false), + __read(rest), + false + ) + }, + [tokens, query] + ) +} -var Field$1; -(function (Field) { - Field["CURRENCY_A"] = "CURRENCY_A"; - Field["CURRENCY_B"] = "CURRENCY_B"; -})(Field$1 || (Field$1 = {})); -var Bound; -(function (Bound) { - Bound["LOWER"] = "LOWER"; - Bound["UPPER"] = "UPPER"; -})(Bound || (Bound = {})); -var typeInput$1 = createAction('mintV3/typeInputMint'); -var typeStartPriceInput = createAction('mintV3/typeStartPriceInput'); -var typeLeftRangeInput = createAction('mintV3/typeLeftRangeInput'); -var typeRightRangeInput = createAction('mintV3/typeRightRangeInput'); -var resetMintState = createAction('mintV3/resetMintState'); -var setFullRange = createAction('mintV3/setFullRange'); - -var initialState$3 = { - independentField: Field$1.CURRENCY_A, - typedValue: '', - startPriceTypedValue: '', - leftRangeTypedValue: '', - rightRangeTypedValue: '', -}; -var mintV3 = createReducer(initialState$3, function (builder) { - return builder - .addCase(resetMintState, function () { return initialState$3; }) - .addCase(setFullRange, function (state) { - return __assign(__assign({}, state), { leftRangeTypedValue: true, rightRangeTypedValue: true }); - }) - .addCase(typeStartPriceInput, function (state, _a) { - var typedValue = _a.payload.typedValue; - return __assign(__assign({}, state), { startPriceTypedValue: typedValue }); - }) - .addCase(typeLeftRangeInput, function (state, _a) { - var typedValue = _a.payload.typedValue; - return __assign(__assign({}, state), { leftRangeTypedValue: typedValue }); - }) - .addCase(typeRightRangeInput, function (state, _a) { - var typedValue = _a.payload.typedValue; - return __assign(__assign({}, state), { rightRangeTypedValue: typedValue }); - }) - .addCase(typeInput$1, function (state, _a) { - var _b = _a.payload, field = _b.field, typedValue = _b.typedValue, noLiquidity = _b.noLiquidity; - if (noLiquidity) { - // they're typing into the field they've last typed in - if (field === state.independentField) { - return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); - } - // they're typing into a new field, store the other value - else { - return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); - } - } - else { - return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); - } - }); -}); +/** + * Token instances created from token info on a token list. + */ +var WrappedTokenInfo = /** @class */ (function () { + function WrappedTokenInfo(tokenInfo, list) { + this.isNative = false + this.isToken = true + this._checksummedAddress = null + this._tags = null + this.tokenInfo = tokenInfo + this.list = list + } + Object.defineProperty(WrappedTokenInfo.prototype, 'address', { + get() { + if (this._checksummedAddress) return this._checksummedAddress + var checksummedAddress = isAddress(this.tokenInfo.address) + if (!checksummedAddress) throw new Error('Invalid token address: ' + this.tokenInfo.address) + return (this._checksummedAddress = checksummedAddress) + }, + enumerable: false, + configurable: true, + }) + Object.defineProperty(WrappedTokenInfo.prototype, 'chainId', { + get() { + return this.tokenInfo.chainId + }, + enumerable: false, + configurable: true, + }) + Object.defineProperty(WrappedTokenInfo.prototype, 'decimals', { + get() { + return this.tokenInfo.decimals + }, + enumerable: false, + configurable: true, + }) + Object.defineProperty(WrappedTokenInfo.prototype, 'name', { + get() { + return this.tokenInfo.name + }, + enumerable: false, + configurable: true, + }) + Object.defineProperty(WrappedTokenInfo.prototype, 'symbol', { + get() { + return this.tokenInfo.symbol + }, + enumerable: false, + configurable: true, + }) + Object.defineProperty(WrappedTokenInfo.prototype, 'logoURI', { + get() { + return this.tokenInfo.logoURI + }, + enumerable: false, + configurable: true, + }) + Object.defineProperty(WrappedTokenInfo.prototype, 'tags', { + get() { + var _a + if (this._tags !== null) return this._tags + if (!this.tokenInfo.tags) return (this._tags = []) + var listTags = (_a = this.list) === null || _a === void 0 ? void 0 : _a.tags + if (!listTags) return (this._tags = []) + return (this._tags = this.tokenInfo.tags.map(function (tagId) { + return __assign(__assign({}, listTags[tagId]), { id: tagId }) + })) + }, + enumerable: false, + configurable: true, + }) + WrappedTokenInfo.prototype.equals = function (other) { + return other.chainId === this.chainId && other.isToken && other.address.toLowerCase() === this.address.toLowerCase() + } + WrappedTokenInfo.prototype.sortsBefore = function (other) { + if (this.equals(other)) throw new Error('Addresses should not be equal') + return this.address.toLowerCase() < other.address.toLowerCase() + } + Object.defineProperty(WrappedTokenInfo.prototype, 'wrapped', { + get() { + return this + }, + enumerable: false, + configurable: true, + }) + return WrappedTokenInfo +})() + +var mapCache = typeof WeakMap !== 'undefined' ? new WeakMap() : null +function tokensToChainTokenMap(tokens) { + var cached = mapCache === null || mapCache === void 0 ? void 0 : mapCache.get(tokens) + if (cached) return cached + var _a = __read(Array.isArray(tokens) ? [undefined, tokens] : [tokens, tokens.tokens], 2), + list = _a[0], + infos = _a[1] + var map = infos.reduce(function (map, info) { + var _a + var token = new WrappedTokenInfo(info, list) + if (((_a = map[token.chainId]) === null || _a === void 0 ? void 0 : _a[token.address]) !== undefined) { + console.warn('Duplicate token skipped: ' + token.address) + return map + } + if (!map[token.chainId]) { + map[token.chainId] = {} + } + map[token.chainId][token.address] = { token, list } + return map + }, {}) + mapCache === null || mapCache === void 0 ? void 0 : mapCache.set(tokens, map) + return map +} -var protocols = [Protocol.V2, Protocol.V3]; -var DEFAULT_QUERY_PARAMS = { - protocols: protocols.map(function (p) { return p.toLowerCase(); }).join(','), - // example other params - // forceCrossProtocol: 'true', - // minSplits: '5', -}; -function getClientSideQuote(_a) { - var tokenInAddress = _a.tokenInAddress, tokenInChainId = _a.tokenInChainId, tokenInDecimals = _a.tokenInDecimals, tokenInSymbol = _a.tokenInSymbol, tokenOutAddress = _a.tokenOutAddress, tokenOutChainId = _a.tokenOutChainId, tokenOutDecimals = _a.tokenOutDecimals, tokenOutSymbol = _a.tokenOutSymbol, amount = _a.amount, type = _a.type; - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, Promise.resolve().then(function () { return index; })]; - case 1: return [2 /*return*/, (_b.sent()).getQuote({ - type: type, - chainId: tokenInChainId, - tokenIn: { - address: tokenInAddress, - chainId: tokenInChainId, - decimals: tokenInDecimals, - symbol: tokenInSymbol, - }, - tokenOut: { - address: tokenOutAddress, - chainId: tokenOutChainId, - decimals: tokenOutDecimals, - symbol: tokenOutSymbol, - }, - amount: amount, - }, { protocols: protocols })]; - } - }); - }); -} -var routingApi = createApi({ - reducerPath: 'routingApi', - baseQuery: fetchBaseQuery({ - baseUrl: 'https://api.uniswap.org/v1/', - }), - endpoints: function (build) { return ({ - getQuote: build.query({ - queryFn: function (args, _api, _extraOptions, fetch) { - return __awaiter(this, void 0, void 0, function () { - var tokenInAddress, tokenInChainId, tokenOutAddress, tokenOutChainId, amount, useClientSideRouter, type, result, query, e_1; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - tokenInAddress = args.tokenInAddress, tokenInChainId = args.tokenInChainId, tokenOutAddress = args.tokenOutAddress, tokenOutChainId = args.tokenOutChainId, amount = args.amount, useClientSideRouter = args.useClientSideRouter, type = args.type; - _a.label = 1; - case 1: - _a.trys.push([1, 6, , 7]); - if (!useClientSideRouter) return [3 /*break*/, 3]; - return [4 /*yield*/, getClientSideQuote(args)]; - case 2: - result = _a.sent(); - return [3 /*break*/, 5]; - case 3: - query = qs.stringify(__assign(__assign({}, DEFAULT_QUERY_PARAMS), { tokenInAddress: tokenInAddress, tokenInChainId: tokenInChainId, tokenOutAddress: tokenOutAddress, tokenOutChainId: tokenOutChainId, amount: amount, type: type })); - return [4 /*yield*/, fetch("quote?" + query)]; - case 4: - result = _a.sent(); - _a.label = 5; - case 5: return [2 /*return*/, { data: result.data }]; - case 6: - e_1 = _a.sent(); - // TODO: fall back to client-side quoter when auto router fails. - // deprecate 'legacy' v2/v3 routers first. - return [2 /*return*/, { error: e_1 }]; - case 7: return [2 /*return*/]; - } - }); - }); - }, - keepUnusedDataFor: ms(templateObject_1$1b || (templateObject_1$1b = __makeTemplateObject(["10s"], ["10s"]))), - extraOptions: { - maxRetries: 0, - }, - }), - }); }, -}); -var useGetQuoteQuery = routingApi.useGetQuoteQuery; -var templateObject_1$1b; - -var Field; -(function (Field) { - Field["INPUT"] = "INPUT"; - Field["OUTPUT"] = "OUTPUT"; -})(Field || (Field = {})); -var selectCurrency = createAction('swap/selectCurrency'); -var switchCurrencies = createAction('swap/switchCurrencies'); -var typeInput = createAction('swap/typeInput'); -var replaceSwapState = createAction('swap/replaceSwapState'); -var setRecipient = createAction('swap/setRecipient'); - -var CHAIN_DATA_ABI = [ - { - inputs: [], - name: 'latestAnswer', - outputs: [{ internalType: 'int256', name: '', type: 'int256' }], - stateMutability: 'view', - type: 'function', - }, -]; -/** - * Returns the price of 1 gas in WEI for the currently selected network using the chainlink fast gas price oracle - */ -function useGasPrice() { - var _a, _b; - var address = useENSAddress('fast-gas-gwei.data.eth').address; - var contract = useContract(address !== null && address !== void 0 ? address : undefined, CHAIN_DATA_ABI, false); - var resultStr = (_b = (_a = useSingleCallResult(contract, 'latestAnswer').result) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.toString(); - return typeof resultStr === 'string' ? JSBI.BigInt(resultStr) : undefined; +atom({}) + +// parse a name or symbol from a token response +var BYTES32_REGEX = /^0x[a-fA-F0-9]{64}$/ +function parseStringOrBytes32(str, bytes32, defaultValue) { + return str && str.length > 0 + ? str + : // need to check for proper bytes string and valid terminator + bytes32 && BYTES32_REGEX.test(bytes32) && arrayify(bytes32)[31] === 0 + ? parseBytes32String(bytes32) + : defaultValue +} +/** + * Returns a Token from the tokenAddress. + * Returns null if token is loading or null was passed. + * Returns undefined if tokenAddress is invalid or token does not exist. + */ +function useTokenFromMap(tokens, tokenAddress) { + var chainId = useActiveWeb3React().chainId + var address = isAddress(tokenAddress) + var tokenContract = useTokenContract(address ? address : undefined, false) + var tokenContractBytes32 = useBytes32TokenContract(address ? address : undefined, false) + var token = address ? tokens[address] : undefined + var tokenName = useSingleCallResult(token ? undefined : tokenContract, 'name', undefined, NEVER_RELOAD) + var tokenNameBytes32 = useSingleCallResult(token ? undefined : tokenContractBytes32, 'name', undefined, NEVER_RELOAD) + var symbol = useSingleCallResult(token ? undefined : tokenContract, 'symbol', undefined, NEVER_RELOAD) + var symbolBytes32 = useSingleCallResult(token ? undefined : tokenContractBytes32, 'symbol', undefined, NEVER_RELOAD) + var decimals = useSingleCallResult(token ? undefined : tokenContract, 'decimals', undefined, NEVER_RELOAD) + return useMemo( + function () { + var _a, _b, _c, _d + if (token) return token + if (tokenAddress === null) return null + if (!chainId || !address) return undefined + if (decimals.loading || symbol.loading || tokenName.loading) return null + if (decimals.result) { + return new Token( + chainId, + address, + decimals.result[0], + parseStringOrBytes32( + (_a = symbol.result) === null || _a === void 0 ? void 0 : _a[0], + (_b = symbolBytes32.result) === null || _b === void 0 ? void 0 : _b[0], + 'UNKNOWN' + ), + parseStringOrBytes32( + (_c = tokenName.result) === null || _c === void 0 ? void 0 : _c[0], + (_d = tokenNameBytes32.result) === null || _d === void 0 ? void 0 : _d[0], + 'Unknown Token' + ) + ) + } + return undefined + }, + [ + address, + chainId, + decimals.loading, + decimals.result, + symbol.loading, + symbol.result, + symbolBytes32.result, + token, + tokenAddress, + tokenName.loading, + tokenName.result, + tokenNameBytes32.result, + ] + ) +} +/** + * Returns a Currency from the currencyId. + * Returns null if currency is loading or null was passed. + * Returns undefined if currencyId is invalid or token does not exist. + */ +function useCurrencyFromMap(tokens, currencyId) { + var _a + var nativeCurrency = useNativeCurrency() + var isNative = Boolean( + nativeCurrency && (currencyId === null || currencyId === void 0 ? void 0 : currencyId.toUpperCase()) === 'ETH' + ) + var token = useTokenFromMap(tokens, isNative ? undefined : currencyId) + if (currencyId === null || currencyId === undefined) return currencyId + // this case so we use our builtin wrapped token instead of wrapped tokens on token lists + var wrappedNative = nativeCurrency === null || nativeCurrency === void 0 ? void 0 : nativeCurrency.wrapped + if ( + ((_a = wrappedNative === null || wrappedNative === void 0 ? void 0 : wrappedNative.address) === null || + _a === void 0 + ? void 0 + : _a.toUpperCase()) === (currencyId === null || currencyId === void 0 ? void 0 : currencyId.toUpperCase()) + ) + return wrappedNative + return isNative ? nativeCurrency : token +} + +var DEFAULT_LIST_PRIORITIES = DEFAULT_LIST_OF_LISTS.reduce(function (memo, listUrl, index) { + memo[listUrl] = index + 1 + return memo +}, {}) +// use ordering of default list of lists to assign priority +function sortByListPriority(urlA, urlB) { + if (DEFAULT_LIST_PRIORITIES[urlA] && DEFAULT_LIST_PRIORITIES[urlB]) { + return DEFAULT_LIST_PRIORITIES[urlA] - DEFAULT_LIST_PRIORITIES[urlB] + } + return 0 +} + +var name$1 = 'Broken Token List' +var timestamp$1 = '2021-01-05T20:47:02.923Z' +var version$1 = { + major: 1, + minor: 0, + patch: 0, +} +var tags$1 = {} +var logoURI$1 = 'ipfs://QmNa8mQkrNKp1WEEeGjFezDmDeodkWRevGFN8JCV7b4Xir' +var keywords$1 = ['uniswap', 'broken'] +var tokens$1 = [ + { + name: 'UNI HODL', + address: '0x4bf5dc91E2555449293D7824028Eb8Fe5879B689', + symbol: 'UniH', + decimals: 18, + chainId: 1, + logoURI: '', + }, +] +var BROKEN_LIST = { + name: name$1, + timestamp: timestamp$1, + version: version$1, + tags: tags$1, + logoURI: logoURI$1, + keywords: keywords$1, + tokens: tokens$1, +} + +var name = 'Unsupported Tokens' +var timestamp = '2021-01-05T20:47:02.923Z' +var version = { + major: 1, + minor: 0, + patch: 0, +} +var tags = {} +var logoURI = 'ipfs://QmNa8mQkrNKp1WEEeGjFezDmDeodkWRevGFN8JCV7b4Xir' +var keywords = ['uniswap', 'unsupported'] +var tokens = [ + { + name: 'Gold Tether', + address: '0x4922a015c4407F87432B179bb209e125432E4a2A', + symbol: 'XAUt', + decimals: 6, + chainId: 1, + logoURI: + 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4922a015c4407F87432B179bb209e125432E4a2A/logo.png', + }, + { + name: 'Grump Cat', + address: '0x93B2FfF814FCaEFFB01406e80B4Ecd89Ca6A021b', + symbol: 'GRUMPY', + decimals: 9, + chainId: 1, + logoURI: + 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4922a015c4407F87432B179bb209e125432E4a2A/logo.png', + }, + { + name: 'apeUSD-UMA Synthetic USD (Dec 2021)', + address: '0xfA5e27893aee4805283D86e4283Da64F8c72dd56', + symbol: 'apeUSD-UMA-DEC21', + decimals: 18, + chainId: 1, + logoURI: '', + }, + { + chainId: 1, + address: '0xc6b11850241c5127eab73af4b6c68bc267cbbff4', + name: 'oWETHp Put 360 DEC2520', + symbol: 'oWETH-360P-12/25/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oYFIp Put 25000 OCT0220', + address: '0x452b421be5b30f0c6ad8c3f03c06bdaab4f5c56c', + symbol: 'oYFI-25000P-10/02/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oWETHp Put 360 OCT3020', + address: '0x0578779e746d7186253a36cf651ea786acfcf087', + symbol: 'oWETH-360P-10/30/20', + decimals: 7, + }, + { + chainId: 1, + name: 'ETHc Call 500 OCT3020', + address: '0xf9aba2e43fb19184408ea3b572a0fd672946f87b', + symbol: 'oETH-500C-10/30/20', + decimals: 6, + }, + { + chainId: 1, + name: 'oBALp Put 22 OCT0220', + address: '0xdb0991dfc7e828b5a2837dc82d68e16490562c8d', + symbol: 'oBAL-22P-10/02/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oCOMPp Put 150 SEP2520', + address: '0xe951ebe6b4420ab3f4844cf36dedd263d095b416', + symbol: 'oCOMP-150P-09/25/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oCRVp Put 3 SEP252020', + address: '0x9215bd49b59748419eac6bad9dbe247df06ebdb9', + symbol: 'oCRV-3P-09/25/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oETHp Put 180 SEP2520', + address: '0xE3A2c34Fa2F59ffa95C4ACd1E5663633d45Bc3AD', + symbol: 'oETH-180P-09/25/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oETHc Call 400 SEP2520', + address: '0x05977EBC26825C0CD6097E0Ad7204721516711Eb', + symbol: 'oETH-400C-09/25/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oWETHp Put 380 SEP1820', + address: '0x31f88266301b08631f9f0e33fd5c43c2a5d1e5b2', + symbol: 'oWETH-380P-09/18/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oYFIp Put 8500 SEP1820', + address: '0xd1cec2f67fdc4c60e0963515dfc3343f31e32e47', + symbol: 'oYFI-8500P-09/18/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oWETHp Put 370 SEP1120', + address: '0x15844029b2c2bf24506e9937739a9a912f1e4354', + symbol: 'oWETH-370P-09/11/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oWETHp Put 400 SEP0420', + address: '0x5562c33c383f6386be4f6dcdbd35a3a99bbcfde6', + symbol: 'oWETH-400P-09/04/20', + decimals: 7, + }, + { + chainId: 1, + name: 'oETHp Put 200 AUG2820', + address: '0x3CBFC1397deF0602c2d211c70A1c0c38CEDB5448', + symbol: 'oWETH-400P-09/04/20', + decimals: 7, + }, + { + chainId: 1, + name: 'Opyn cDai Insurance', + symbol: 'ocDai', + address: '0x98cc3bd6af1880fcfda17ac477b2f612980e5e33', + decimals: 8, + }, + { + chainId: 1, + name: 'Opyn cUSDC Insurance', + symbol: 'ocUSDC', + address: '0x8ED9f862363fFdFD3a07546e618214b6D59F03d4', + decimals: 8, + }, + { + chainId: 1, + address: '0x176C674Ee533C6139B0dc8b458D72A93dCB3e705', + symbol: 'iAAVE', + name: 'Synth Inverse Aave', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iAAVE.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x8A8079c7149B8A1611e5C5d978DCA3bE16545F83', + symbol: 'iADA', + name: 'Synth Inverse Cardano', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iADA.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0xAFD870F32CE54EfdBF677466B612bf8ad164454B', + symbol: 'iBNB', + name: 'Synth Inverse Binance Coin', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iBNB.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0xD6014EA05BDe904448B743833dDF07c3C7837481', + symbol: 'iBTC', + name: 'Synth Inverse Bitcoin', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iBTC.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x336213e1DDFC69f4701Fc3F86F4ef4A160c1159d', + symbol: 'iCEX', + name: 'Synth Inverse Centralised Exchange Index', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iCEX.svg', + tags: ['index', 'inverse', 'synth'], + }, + { + chainId: 1, + address: '0x6345728B1ccE16E6f8C509950b5c84FFF88530d9', + symbol: 'iCOMP', + name: 'Synth Inverse Compound', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iCOMP.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0xCB98f42221b2C251A4E74A1609722eE09f0cc08E', + symbol: 'iDASH', + name: 'Synth Inverse Dash', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDASH.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x14d10003807AC60d07BB0ba82cAeaC8d2087c157', + symbol: 'iDEFI', + name: 'Synth Inverse DeFi Index', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDEFI.svg', + tags: ['index', 'inverse', 'synth'], + }, + { + chainId: 1, + address: '0x46a97629C9C1F58De6EC18C7F536e7E6d6A6ecDe', + symbol: 'iDOT', + name: 'Synth Inverse Polkadot', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iDOT.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0xF4EebDD0704021eF2a6Bbe993fdf93030Cd784b4', + symbol: 'iEOS', + name: 'Synth Inverse EOS', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iEOS.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0xd50c1746D835d2770dDA3703B69187bFfeB14126', + symbol: 'iETC', + name: 'Synth Inverse Ethereum Classic', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iETC.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0xA9859874e1743A32409f75bB11549892138BBA1E', + symbol: 'iETH', + name: 'Synth Inverse Ether', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iETH.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x2d7aC061fc3db53c39fe1607fB8cec1B2C162B01', + symbol: 'iLINK', + name: 'Synth Inverse Chainlink', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iLINK.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x79da1431150C9b82D2E5dfc1C68B33216846851e', + symbol: 'iLTC', + name: 'Synth Inverse Litecoin', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iLTC.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0xA5a5DF41883Cdc00c4cCC6E8097130535399d9a3', + symbol: 'iOIL', + name: 'Synth Inverse Perpetual Oil Futures', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iOIL.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x0fEd38108bdb8e62ef7b5680E8E0726E2F29e0De', + symbol: 'iREN', + name: 'Synth Inverse Ren', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iREN.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0xC5807183a9661A533CB08CbC297594a0B864dc12', + symbol: 'iTRX', + name: 'Synth Inverse TRON', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iTRX.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x36A00FF9072570eF4B9292117850B8FE08d96cce', + symbol: 'iUNI', + name: 'Synth Inverse Uniswap', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iUNI.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x4AdF728E2Df4945082cDD6053869f51278fae196', + symbol: 'iXMR', + name: 'Synth Inverse Monero', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXMR.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x27269b3e45A4D3E79A3D6BFeE0C8fB13d0D711A6', + symbol: 'iXRP', + name: 'Synth Inverse Ripple', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXRP.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x8deef89058090ac5655A99EEB451a4f9183D1678', + symbol: 'iXTZ', + name: 'Synth Inverse Tezos', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iXTZ.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0x592244301CeA952d6daB2fdC1fE6bd9E53917306', + symbol: 'iYFI', + name: 'Synth Inverse yearn.finance', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/iYFI.svg', + tags: ['inverse', 'synth'], + }, + { + chainId: 1, + address: '0xcD39b5434a0A92cf47D1F567a7dF84bE356814F0', + symbol: 's1INCH', + name: 'Synth 1inch', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/s1INCH.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x7537AAe01f3B218DAE75e10d952473823F961B87', + symbol: 'sAAPL', + name: 'Synth Apple', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAAPL.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xd2dF355C19471c8bd7D8A3aa27Ff4e26A21b4076', + symbol: 'sAAVE', + name: 'Synth Aave', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAAVE.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xe36E2D3c7c34281FA3bC737950a68571736880A1', + symbol: 'sADA', + name: 'Synth Cardano', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sADA.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x9CF7E61853ea30A41b02169391b393B901eac457', + symbol: 'sAMZN', + name: 'Synth Amazon', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAMZN.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xF48e200EAF9906362BB1442fca31e0835773b8B4', + symbol: 'sAUD', + name: 'Synth Australian Dollars', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sAUD.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x617aeCB6137B5108D1E7D4918e3725C8cEbdB848', + symbol: 'sBNB', + name: 'Synth Binance Coin', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sBNB.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xfE18be6b3Bd88A2D2A7f928d00292E7a9963CfC6', + symbol: 'sBTC', + name: 'Synth Bitcoin', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sBTC.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xeABACD844A196D7Faf3CE596edeBF9900341B420', + symbol: 'sCEX', + name: 'Synth Centralised Exchange Index', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCEX.svg', + tags: ['index', 'synth'], + }, + { + chainId: 1, + address: '0x0F83287FF768D1c1e17a42F44d644D7F22e8ee1d', + symbol: 'sCHF', + name: 'Synth Swiss Franc', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCHF.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x9EeF4CA7aB9fa8bc0650127341C2d3F707a40f8A', + symbol: 'sCOIN', + name: 'Synth Coinbase', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCOIN.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xEb029507d3e043DD6C87F2917C4E82B902c35618', + symbol: 'sCOMP', + name: 'Synth Compound', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCOMP.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xD38aEb759891882e78E957c80656572503D8c1B1', + symbol: 'sCRV', + name: 'Synth Curve DAO Token', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sCRV.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xfE33ae95A9f0DA8A845aF33516EDc240DCD711d6', + symbol: 'sDASH', + name: 'Synth Dash', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDASH.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xe1aFe1Fd76Fd88f78cBf599ea1846231B8bA3B6B', + symbol: 'sDEFI', + name: 'Synth DeFi Index', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDEFI.svg', + tags: ['index', 'synth'], + }, + { + chainId: 1, + address: '0x1715AC0743102BF5Cd58EfBB6Cf2dC2685d967b6', + symbol: 'sDOT', + name: 'Synth Polkadot', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sDOT.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x88C8Cf3A212c0369698D13FE98Fcb76620389841', + symbol: 'sEOS', + name: 'Synth EOS', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sEOS.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x22602469d704BfFb0936c7A7cfcD18f7aA269375', + symbol: 'sETC', + name: 'Synth Ethereum Classic', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sETC.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x5e74C9036fb86BD7eCdcb084a0673EFc32eA31cb', + symbol: 'sETH', + name: 'Synth Ether', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sETH.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xD71eCFF9342A5Ced620049e616c5035F1dB98620', + symbol: 'sEUR', + name: 'Synth Euros', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sEUR.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xf50B5e535F62a56A9BD2d8e2434204E726c027Fa', + symbol: 'sFB', + name: 'Synth Facebook', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sFB.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x23348160D7f5aca21195dF2b70f28Fce2B0be9fC', + symbol: 'sFTSE', + name: 'Synth FTSE 100 Index', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sFTSE.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x97fe22E7341a0Cd8Db6F6C021A24Dc8f4DAD855F', + symbol: 'sGBP', + name: 'Synth Pound Sterling', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sGBP.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xC63B8ECCE56aB9C46184eC6aB85e4771fEa4c8AD', + symbol: 'sGOOG', + name: 'Synth Alphabet', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sGOOG.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xF6b1C627e95BFc3c1b4c9B825a032Ff0fBf3e07d', + symbol: 'sJPY', + name: 'Synth Japanese Yen', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sJPY.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x269895a3dF4D73b077Fc823dD6dA1B95f72Aaf9B', + symbol: 'sKRW', + name: 'Synth South Korean Won', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sKRW.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xbBC455cb4F1B9e4bFC4B73970d360c8f032EfEE6', + symbol: 'sLINK', + name: 'Synth Chainlink', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sLINK.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xC14103C2141E842e228FBaC594579e798616ce7A', + symbol: 'sLTC', + name: 'Synth Litecoin', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sLTC.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x745a824D6aBBD236AA794b5530062778A6Ad7523', + symbol: 'sMSFT', + name: 'Synth Microsoft', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sMSFT.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x5A7E3c07604EB515C16b36cd51906a65f021F609', + symbol: 'sNFLX', + name: 'Synth Netflix', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sNFLX.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x757de3ac6B830a931eF178C6634c5C551773155c', + symbol: 'sNIKKEI', + name: 'Synth Nikkei 225 Index', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sNIKKEI.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x6d16cF3EC5F763d4d99cB0B0b110eefD93B11B56', + symbol: 'sOIL', + name: 'Synth Perpetual Oil Futures', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sOIL.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xD31533E8d0f3DF62060e94B3F1318137bB6E3525', + symbol: 'sREN', + name: 'Synth Ren', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sREN.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x0352557B007A4Aae1511C114409b932F06F9E2f4', + symbol: 'sRUNE', + name: 'Synth THORChain', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sRUNE.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xf2E08356588EC5cd9E437552Da87C0076b4970B0', + symbol: 'sTRX', + name: 'Synth TRON', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sTRX.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x918dA91Ccbc32B7a6A0cc4eCd5987bbab6E31e6D', + symbol: 'sTSLA', + name: 'Synth Tesla', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sTSLA.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x30635297E450b930f8693297eBa160D9e6c8eBcf', + symbol: 'sUNI', + name: 'Synth Uniswap', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sUNI.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x6A22e5e94388464181578Aa7A6B869e00fE27846', + symbol: 'sXAG', + name: 'Synth Silver Ounce', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXAG.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x261EfCdD24CeA98652B9700800a13DfBca4103fF', + symbol: 'sXAU', + name: 'Synth Gold Ounce', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXAU.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x5299d6F7472DCc137D7f3C4BcfBBB514BaBF341A', + symbol: 'sXMR', + name: 'Synth Monero', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXMR.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0xa2B0fDe6D710e201d0d608e924A484d1A5fEd57c', + symbol: 'sXRP', + name: 'Synth Ripple', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXRP.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x2e59005c5c0f0a4D77CcA82653d48b46322EE5Cd', + symbol: 'sXTZ', + name: 'Synth Tezos', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sXTZ.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x992058B7DB08F9734d84485bfbC243C4ee6954A7', + symbol: 'sYFI', + name: 'Synth yearn.finance', + decimals: 18, + logoURI: 'https://raw.githubusercontent.com/Synthetixio/synthetix-assets/v2.0.10/synths/sYFI.svg', + tags: ['synth'], + }, + { + chainId: 1, + address: '0x81ab848898b5ffD3354dbbEfb333D5D183eEDcB5', + name: 'yUSD Synthetic Expiring 1 September 2020', + symbol: 'yUSDSEP20', + decimals: 18, + }, + { + chainId: 1, + address: '0xB2FdD60AD80ca7bA89B9BAb3b5336c2601C020b4', + name: 'yUSD Synthetic Expiring 1 October 2020', + symbol: 'yUSDOCT20', + decimals: 18, + }, + { + chainId: 1, + address: '0x208d174775dc39fe18b1b374972f77ddec6c0f73', + name: 'uUSDrBTC Synthetic Expiring 1 Oct 2020', + symbol: 'uUSDrBTC-OCT', + decimals: 18, + }, + { + chainId: 1, + address: '0xf06ddacf71e2992e2122a1a0168c6967afdf63ce', + name: 'uUSDrBTC Synthetic Expiring 31 Dec 2020', + symbol: 'uUSDrBTC-DEC', + decimals: 18, + }, + { + chainId: 1, + address: '0xd16c79c8a39d44b2f3eb45d2019cd6a42b03e2a9', + name: 'uUSDwETH Synthetic Expiring 31 Dec 2020', + symbol: 'uUSDwETH-DEC', + decimals: 18, + }, + { + chainId: 1, + address: '0x3d995510f8d82c2ea341845932b5ddde0bead9a3', + name: 'uGAS-JAN21 Token Expiring 31 Jan 2021', + symbol: 'uGAS-JAN21', + decimals: 18, + }, + { + chainId: 1, + address: '0x90f802c7e8fb5d40b0de583e34c065a3bd2020d8', + name: 'YD-ETH-MAR21 Token Expiring 31 Mar 2021', + symbol: 'YD-ETH-MAR21', + decimals: 18, + }, + { + chainId: 1, + address: '0x002f0b1a71c5730cf2f4da1970a889207bdb6d0d', + name: 'YD-BTC-MAR21 Token Expiring 31 Mar 2021', + symbol: 'YD-BTC-MAR21', + decimals: 18, + }, + { + chainId: 1, + address: '0x1062ad0e59fa67fa0b27369113098cc941dd0d5f', + name: 'UMA 35 Call Expirying 30 Apr 2021', + symbol: 'UMAc35-0421', + decimals: 18, + }, + { + chainId: 1, + address: '0xf93340b1a3adf7eedcaec25fae8171d4b736e89f', + name: 'pxUSD Synthetic USD Expiring 1 April 2021', + symbol: 'pxUSD_MAR2021', + decimals: 18, + }, + { + chainId: 1, + address: '0x84bd083b1c8bf929f39c98bc17cf518f40154f58', + name: 'Mario Cash Synthetic Token Expiring 15 January 2021', + symbol: 'Mario Cash-JAN-2021', + decimals: 18, + }, + { + chainId: 1, + address: '0x81fab276aec924fbde190cf379783526d413cf70', + name: 'uGAS-FEB21 Token Expiring 28 Feb 2021', + symbol: 'uGAS-FEB21', + decimals: 18, + }, + { + chainId: 1, + address: '0x4e110603e70b0b5f1c403ee543b37e1f1244cf28', + name: 'uGAS-MAR21 Token Expiring 31 Mar 2021', + symbol: 'uGAS-MAR21', + decimals: 18, + }, + { + chainId: 1, + address: '0xcf55a7f92d5e0c6683debbc1fc20c0a6e056df13', + name: 'Zelda Elastic Cash', + symbol: 'Zelda Elastic Cash', + decimals: 18, + }, + { + chainId: 1, + address: '0x654eebac62240e6c56bab5f6adf7cfa74a894510', + name: 'Zelda Spring Nuts Cash', + symbol: 'Zelda Spring Nuts Cash', + decimals: 18, + }, + { + chainId: 1, + address: '0xa48920cc1ad85d8ea13af5d7be180c0338c306dd', + name: 'Zelda Summer Nuts Cash', + symbol: 'Zelda Summer Nuts Cash', + decimals: 18, + }, + { + chainId: 1, + address: '0x249a198d59b57fda5dda90630febc86fd8c7594c', + name: 'Zelda Whirlwind Cash', + symbol: 'Zelda Whirlwind Cash', + decimals: 18, + }, + { + chainId: 1, + address: '0x5ed1406873c9eb91f6f9a67ac4e152387c1132e7', + name: 'Zelda Reinforced Cash', + symbol: 'Zelda Reinforced Cash', + decimals: 18, + }, + { + chainId: 1, + address: '0x8104c9f13118320eefe5fbea8a44d600b85981ef', + name: 'Mini Mario Summer Cash', + symbol: 'Mini Mario Summer Cash', + decimals: 18, + }, + { + chainId: 1, + address: '0x69746c719e59674b147df25f50e7cfa0673cb625', + name: 'Mini Mario Spring Cash', + symbol: 'Mini Mario Spring Cash', + decimals: 18, + }, + { + chainId: 1, + address: '0x6b1257641d18791141f025eab36fb567c4b564ff', + name: 'Bitcoin Dominance Token 31 March 2021', + symbol: 'BTCDOM-MAR2021', + decimals: 18, + }, + { + chainId: 1, + address: '0x4e83b6287588a96321b2661c5e041845ff7814af', + name: 'Altcoin Dominance Token 31 March 2021', + symbol: 'ALTDOM-MAR2021', + decimals: 18, + }, + { + chainId: 1, + address: '0x59fec83ec709c893aedd1a144cf1828eb04127cd', + name: 'pxGOLD Synthetic GOLD Expiring 31 May 2021', + symbol: 'pxGOLD_MAY2021', + decimals: 18, + }, + { + chainId: 1, + address: '0x89337BFb7938804c3776C9FB921EccAf5ab76758', + name: 'Compound Annualized Rate Future Expiring 28 March 2021', + symbol: 'CAR-USDC-MAR21', + decimals: 18, + }, + { + chainId: 1, + address: '0xec58d3aefc9aaa2e0036fa65f70d569f49d9d1ed', + name: 'uSTONKS Index Token April 2021', + symbol: 'uSTONKS_APR21', + decimals: 6, + }, + { + chainId: 1, + address: '0xa6B9d7E3d76cF23549293Fb22c488E0Ea591A44e', + name: 'uGAS-JUN21 Token Expiring 30 Jun 2021', + symbol: 'uGAS-JUN21', + decimals: 18, + }, + { + chainId: 1, + address: '0xe813b65da6c38a04591aed3f082d32db7d53c382', + name: 'Yield Dollar [WETH Dec 2021]', + symbol: 'YD-ETH-DEC21', + decimals: 18, + }, + { + chainId: 1, + address: '0x4b606e9eb2228c70f44453afe5a73e1fea258ce1', + name: 'pxUSD Synthetic USD Expiring 31 Mar 2022', + symbol: 'pxUSD_MAR2022', + decimals: 18, + }, + { + chainId: 1, + address: '0x5247c0db4044fb6f97f32c7e1b48758019a5a912', + name: 'pxGOLD Synthetic Gold Expiring 31 Mar 2022', + symbol: 'pxGOLD_MAR2022', + decimals: 18, + }, + { + chainId: 1, + address: '0x56fb1acaff95c0b6ebcd17c8361a63d98b1a5a11', + name: 'uForex CNYUSD Synthetic Token April 2021', + symbol: 'uCNYUSD-APR', + decimals: 6, + }, + { + chainId: 1, + address: '0xd49fa405dce086c65d66ca1ca41f8e98583812b4', + name: 'uForex EURUSD Synthetic Token April 2021', + symbol: 'uEURUSD-APR', + decimals: 6, + }, + { + chainId: 1, + address: '0x29dddacba3b231ee8d673dd0f0fa759ea145561b', + name: 'DEFI_PULSE_TOTAL_TVL Synthetic Token Expiring 15 April 2021', + symbol: 'TVL_ALL_APRIL15', + decimals: 6, + }, + { + chainId: 1, + address: '0xcbe430927370e95b4b10cfc702c6017ec7abefc3', + name: 'Yield Dollar [WETH Jun 2021]', + symbol: 'YD-ETH-JUN21', + decimals: 18, + }, + { + chainId: 1, + address: '0x4b7fb448df91c8ed973494f8c8c4f12daf3a8521', + name: 'Yield Dollar [renBTC Jun 2021]', + symbol: 'YD-BTC-JUN21', + decimals: 8, + }, + { + chainId: 1, + address: '0x3108c33b6fb38efedaefd8b5f7ca01d5f5c7372d', + name: 'Yield Dollar UMA 21', + symbol: 'yUMA21', + decimals: 18, + }, + { + chainId: 1, + address: '0x0cae9e4d663793c2a2A0b211c1Cf4bBca2B9cAa7', + name: 'Mirrored Amazon', + symbol: 'MAMZN', + decimals: 18, + }, + { + chainId: 1, + address: '0x31c63146a635EB7465e5853020b39713AC356991', + name: 'M US Oil', + symbol: 'MUSO', + decimals: 18, + }, + { + chainId: 1, + address: '0x59A921Db27Dd6d4d974745B7FfC5c33932653442', + name: 'M Google', + symbol: 'MGOOGL', + decimals: 18, + }, + { + chainId: 1, + address: '0xf72FCd9DCF0190923Fadd44811E240Ef4533fc86', + name: 'Mirrored ProShares', + symbol: 'MVIXY', + decimals: 18, + }, + { + chainId: 1, + address: '0x56aA298a19C93c6801FDde870fA63EF75Cc0aF72', + name: 'Mirrored Alibaba', + symbol: 'MBABA', + decimals: 18, + }, + { + chainId: 1, + address: '0x0e99cC0535BB6251F6679Fa6E65d6d3b430e840B', + name: 'Mirrored Facebook', + symbol: 'MFB', + decimals: 18, + }, + { + chainId: 1, + address: '0x13B02c8dE71680e71F0820c996E4bE43c2F57d15', + name: 'Mirrored Invesco QQ', + symbol: 'MQQQ', + decimals: 18, + }, + { + chainId: 1, + address: '0x41BbEDd7286dAab5910a1f15d12CBda839852BD7', + name: 'Mirrored Microsoft', + symbol: 'MMSFT', + decimals: 18, + }, + { + chainId: 1, + address: '0x9d1555d8cB3C846Bb4f7D5B1B1080872c3166676', + name: 'Mirrored iShares Si', + symbol: 'MSLV', + decimals: 18, + }, + { + chainId: 1, + address: '0x21cA39943E91d704678F5D00b6616650F066fD63', + name: 'Mirrored Tesla', + symbol: 'MTSLA', + decimals: 18, + }, + { + chainId: 1, + address: '0xe82bbB62fA81d0701643d1675FB50ec52fD3Df92', + name: 'DYDX Token', + symbol: 'DYDX', + decimals: 18, + }, + { + chainId: 10, + address: '0xE405de8F52ba7559f9df3C368500B6E6ae6Cee49', + name: 'sETH', + symbol: 'Synth Ether', + decimals: 18, + }, + { + chainId: 10, + address: '0x298B9B95708152ff6968aafd889c6586e9169f1D', + name: 'sBTC', + symbol: 'Synth Bitcoin', + decimals: 18, + }, + { + chainId: 10, + address: '0xc5Db22719A06418028A40A9B5E9A7c02959D0d08', + name: 'sLINK', + symbol: 'Synth Link', + decimals: 18, + }, + { + chainId: 1, + address: '0x6B60eE11b73230045cF9095E6e43AE9Ea638e172', + name: 'Shatner', + symbol: 'SHAT', + decimals: 18, + }, + { + chainId: 1, + address: '0x7277a44D1325D81Ac58893002a1B40a41bea43fe', + name: 'FAANG Index', + symbol: 'FAANG', + decimals: 18, + }, + { + chainId: 1, + address: '0x76175599887730786bdA1545D0D7AcE8737fEBB1', + name: 'ENS DAO', + symbol: 'ENS', + decimals: 18, + }, + { + chainId: 1, + address: '0xa82AA729AE2F0d78e961D66db53949e27a9E866d', + name: 'BMEX', + symbol: 'BMEX', + decimals: 18, + }, +] +var UNSUPPORTED_TOKEN_LIST = { + name, + timestamp, + version, + tags, + logoURI, + keywords, + tokens, +} + +function useAllLists() { + return useAppSelector(function (state) { + return state.lists.byUrl + }) +} +/** + * Combine the tokens in map2 with the tokens on map1, where tokens on map1 take precedence + * @param map1 the base token map + * @param map2 the map of additioanl tokens to add to the base map + */ +function combineMaps(map1, map2) { + var chainIds = Object.keys( + Object.keys(map1) + .concat(Object.keys(map2)) + .reduce(function (memo, value) { + memo[value] = true + return memo + }, {}) + ).map(function (id) { + return parseInt(id) + }) + return chainIds.reduce(function (memo, chainId) { + memo[chainId] = __assign(__assign({}, map2[chainId]), map1[chainId]) + return memo + }, {}) +} +// merge tokens contained within lists from urls +function useCombinedTokenMapFromUrls(urls) { + var lists = useAllLists() + return useMemo( + function () { + if (!urls) return {} + return ( + urls + .slice() + // sort by priority so top priority goes last + .sort(sortByListPriority) + .reduce(function (allTokens, currentUrl) { + var _a + var current = (_a = lists[currentUrl]) === null || _a === void 0 ? void 0 : _a.current + if (!current) return allTokens + try { + return combineMaps(allTokens, tokensToChainTokenMap(current)) + } catch (error) { + console.error('Could not show token list due to error', error) + return allTokens + } + }, {}) + ) + }, + [lists, urls] + ) +} +// filter out unsupported lists +function useActiveListUrls() { + var activeListUrls = useAppSelector(function (state) { + return state.lists.activeListUrls + }) + return useMemo( + function () { + return activeListUrls === null || activeListUrls === void 0 + ? void 0 + : activeListUrls.filter(function (url) { + return !UNSUPPORTED_LIST_URLS.includes(url) + }) + }, + [activeListUrls] + ) +} +function useInactiveListUrls() { + var lists = useAllLists() + var allActiveListUrls = useActiveListUrls() + return useMemo( + function () { + return Object.keys(lists).filter(function (url) { + return ( + !(allActiveListUrls === null || allActiveListUrls === void 0 ? void 0 : allActiveListUrls.includes(url)) && + !UNSUPPORTED_LIST_URLS.includes(url) + ) + }) + }, + [lists, allActiveListUrls] + ) +} +// get all the tokens from active lists, combine with local default tokens +function useCombinedActiveList() { + var activeListUrls = useActiveListUrls() + var activeTokens = useCombinedTokenMapFromUrls(activeListUrls) + return activeTokens +} +// list of tokens not supported on interface for various reasons, used to show warnings and prevent swaps and adds +function useUnsupportedTokenList() { + // get hard-coded broken tokens + var brokenListMap = useMemo(function () { + return tokensToChainTokenMap(BROKEN_LIST) + }, []) + // get hard-coded list of unsupported tokens + var localUnsupportedListMap = useMemo(function () { + return tokensToChainTokenMap(UNSUPPORTED_TOKEN_LIST) + }, []) + // get dynamic list of unsupported tokens + var loadedUnsupportedListMap = useCombinedTokenMapFromUrls(UNSUPPORTED_LIST_URLS) + // format into one token address map + return useMemo( + function () { + return combineMaps(brokenListMap, combineMaps(localUnsupportedListMap, loadedUnsupportedListMap)) + }, + [brokenListMap, localUnsupportedListMap, loadedUnsupportedListMap] + ) +} +function useIsListActive(url) { + var activeListUrls = useActiveListUrls() + return Boolean(activeListUrls === null || activeListUrls === void 0 ? void 0 : activeListUrls.includes(url)) +} + +// reduce token map into standard address <-> Token mapping, optionally include user added tokens +function useTokensFromMap(tokenMap, includeUserAdded) { + var chainId = useActiveWeb3React().chainId + var userAddedTokens = useUserAddedTokens() + return useMemo( + function () { + var _a + if (!chainId) return {} + // reduce to just tokens + var mapWithoutUrls = Object.keys((_a = tokenMap[chainId]) !== null && _a !== void 0 ? _a : {}).reduce(function ( + newMap, + address + ) { + newMap[address] = tokenMap[chainId][address].token + return newMap + }, + {}) + if (includeUserAdded) { + return ( + userAddedTokens + // reduce into all ALL_TOKENS filtered by the current chain + .reduce(function (tokenMap, token) { + tokenMap[token.address] = token + return tokenMap + }, __assign({}, mapWithoutUrls)) + ) + } + return mapWithoutUrls + }, + [chainId, userAddedTokens, tokenMap, includeUserAdded] + ) +} +function useAllTokens() { + var allTokens = useCombinedActiveList() + return useTokensFromMap(allTokens, true) +} +function useUnsupportedTokens() { + var chainId = useActiveWeb3React().chainId + var listsByUrl = useAllLists() + var unsupportedTokensMap = useUnsupportedTokenList() + var unsupportedTokens = useTokensFromMap(unsupportedTokensMap, false) + // checks the default L2 lists to see if `bridgeInfo` has an L1 address value that is unsupported + var l2InferredBlockedTokens = useMemo( + function () { + if (!chainId || !L2_CHAIN_IDS.includes(chainId)) { + return {} + } + if (!listsByUrl) { + return {} + } + var listUrl = CHAIN_INFO[chainId].defaultListUrl + var list = listsByUrl[listUrl].current + if (!list) { + return {} + } + var unsupportedSet = new Set(Object.keys(unsupportedTokens)) + return list.tokens.reduce(function (acc, tokenInfo) { + var _a + var _b + var bridgeInfo = (_b = tokenInfo.extensions) === null || _b === void 0 ? void 0 : _b.bridgeInfo + if ( + bridgeInfo && + bridgeInfo[SupportedChainId.MAINNET] && + bridgeInfo[SupportedChainId.MAINNET].tokenAddress && + unsupportedSet.has(bridgeInfo[SupportedChainId.MAINNET].tokenAddress) + ) { + var address = bridgeInfo[SupportedChainId.MAINNET].tokenAddress + // don't rely on decimals--it's possible that a token could be bridged w/ different decimals on the L2 + return __assign( + __assign({}, acc), + ((_a = {}), (_a[address] = new Token(SupportedChainId.MAINNET, address, tokenInfo.decimals)), _a) + ) + } + return acc + }, {}) + }, + [chainId, listsByUrl, unsupportedTokens] + ) + return __assign(__assign({}, unsupportedTokens), l2InferredBlockedTokens) +} +function useSearchInactiveTokenLists(search, minResults) { + if (minResults === void 0) { + minResults = 10 + } + var lists = useAllLists() + var inactiveUrls = useInactiveListUrls() + var chainId = useActiveWeb3React().chainId + var activeTokens = useAllTokens() + return useMemo( + function () { + var e_1, _a, e_2, _b + if (!search || search.trim().length === 0) return [] + var tokenFilter = getTokenFilter(search) + var result = [] + var addressSet = {} + try { + for ( + var inactiveUrls_1 = __values(inactiveUrls), inactiveUrls_1_1 = inactiveUrls_1.next(); + !inactiveUrls_1_1.done; + inactiveUrls_1_1 = inactiveUrls_1.next() + ) { + var url = inactiveUrls_1_1.value + var list = lists[url].current + if (!list) continue + try { + for (var _c = ((e_2 = void 0), __values(list.tokens)), _d = _c.next(); !_d.done; _d = _c.next()) { + var tokenInfo = _d.value + if (tokenInfo.chainId === chainId && tokenFilter(tokenInfo)) { + var wrapped = new WrappedTokenInfo(tokenInfo, list) + if (!(wrapped.address in activeTokens) && !addressSet[wrapped.address]) { + addressSet[wrapped.address] = true + result.push(wrapped) + if (result.length >= minResults) return result + } + } + } + } catch (e_2_1) { + e_2 = { error: e_2_1 } + } finally { + try { + if (_d && !_d.done && (_b = _c.return)) _b.call(_c) + } finally { + if (e_2) throw e_2.error + } + } + } + } catch (e_1_1) { + e_1 = { error: e_1_1 } + } finally { + try { + if (inactiveUrls_1_1 && !inactiveUrls_1_1.done && (_a = inactiveUrls_1.return)) _a.call(inactiveUrls_1) + } finally { + if (e_1) throw e_1.error + } + } + return result + }, + [activeTokens, chainId, inactiveUrls, lists, minResults, search] + ) +} +function useIsTokenActive(token) { + var activeTokens = useAllTokens() + if (!activeTokens || !token) { + return false + } + return !!activeTokens[token.address] +} +// Check if currency is included in custom list from user storage +function useIsUserAddedToken(currency) { + var userAddedTokens = useUserAddedTokens() + if (!currency) { + return false + } + return !!userAddedTokens.find(function (token) { + return currency.equals(token) + }) +} +// undefined if invalid or does not exist +// null if loading or null was passed +// otherwise returns the token +function useToken(tokenAddress) { + var tokens = useAllTokens() + return useTokenFromMap(tokens, tokenAddress) +} +function useCurrency(currencyId) { + var tokens = useAllTokens() + return useCurrencyFromMap(tokens, currencyId) +} + +function serializeToken(token) { + return { + chainId: token.chainId, + address: token.address, + decimals: token.decimals, + symbol: token.symbol, + name: token.name, + } +} +function deserializeToken(serializedToken) { + return new Token( + serializedToken.chainId, + serializedToken.address, + serializedToken.decimals, + serializedToken.symbol, + serializedToken.name + ) +} +function useIsDarkMode() { + var _a = useAppSelector(function (_a) { + var _b = _a.user, + matchesDarkMode = _b.matchesDarkMode, + userDarkMode = _b.userDarkMode + return { + userDarkMode, + matchesDarkMode, + } + }, shallowEqual), + userDarkMode = _a.userDarkMode, + matchesDarkMode = _a.matchesDarkMode + return userDarkMode === null ? matchesDarkMode : userDarkMode +} +function useDarkModeManager() { + var dispatch = useAppDispatch() + var darkMode = useIsDarkMode() + var toggleSetDarkMode = useCallback( + function () { + dispatch(updateUserDarkMode({ userDarkMode: !darkMode })) + }, + [darkMode, dispatch] + ) + return [darkMode, toggleSetDarkMode] +} +function useUserLocale() { + return useAppSelector(function (state) { + return state.user.userLocale + }) +} +function useUserLocaleManager() { + var dispatch = useAppDispatch() + var locale = useUserLocale() + var setLocale = useCallback( + function (newLocale) { + dispatch(updateUserLocale({ userLocale: newLocale })) + }, + [dispatch] + ) + return [locale, setLocale] +} +function useIsExpertMode() { + return useAppSelector(function (state) { + return state.user.userExpertMode + }) +} +function useExpertModeManager() { + var dispatch = useAppDispatch() + var expertMode = useIsExpertMode() + var toggleSetExpertMode = useCallback( + function () { + dispatch(updateUserExpertMode({ userExpertMode: !expertMode })) + }, + [expertMode, dispatch] + ) + return [expertMode, toggleSetExpertMode] +} +function useShowSurveyPopup() { + var dispatch = useAppDispatch() + var showSurveyPopup = useAppSelector(function (state) { + return state.user.showSurveyPopup + }) + var toggleShowSurveyPopup = useCallback( + function (showPopup) { + dispatch(updateShowSurveyPopup({ showSurveyPopup: showPopup })) + }, + [dispatch] + ) + return [showSurveyPopup, toggleShowSurveyPopup] +} +function useClientSideRouter() { + var dispatch = useAppDispatch() + var clientSideRouter = useAppSelector(function (state) { + return Boolean(state.user.userClientSideRouter) + }) + var setClientSideRouter = useCallback( + function (newClientSideRouter) { + dispatch(updateUserClientSideRouter({ userClientSideRouter: newClientSideRouter })) + }, + [dispatch] + ) + return [clientSideRouter, setClientSideRouter] +} +function useSetUserSlippageTolerance() { + var dispatch = useAppDispatch() + return useCallback( + function (userSlippageTolerance) { + var value + try { + value = + userSlippageTolerance === 'auto' ? 'auto' : JSBI.toNumber(userSlippageTolerance.multiply(10000).quotient) + } catch (error) { + value = 'auto' + } + dispatch( + updateUserSlippageTolerance({ + userSlippageTolerance: value, + }) + ) + }, + [dispatch] + ) +} +/** + * Return the user's slippage tolerance, from the redux store, and a function to update the slippage tolerance + */ +function useUserSlippageTolerance() { + var userSlippageTolerance = useAppSelector(function (state) { + return state.user.userSlippageTolerance + }) + return useMemo( + function () { + return userSlippageTolerance === 'auto' ? 'auto' : new Percent(userSlippageTolerance, 10000) + }, + [userSlippageTolerance] + ) +} +/** + * Same as above but replaces the auto with a default value + * @param defaultSlippageTolerance the default value to replace auto with + */ +function useUserSlippageToleranceWithDefault(defaultSlippageTolerance) { + var allowedSlippage = useUserSlippageTolerance() + return useMemo( + function () { + return allowedSlippage === 'auto' ? defaultSlippageTolerance : allowedSlippage + }, + [allowedSlippage, defaultSlippageTolerance] + ) +} +function useUserTransactionTTL() { + var chainId = useActiveWeb3React().chainId + var dispatch = useAppDispatch() + var userDeadline = useAppSelector(function (state) { + return state.user.userDeadline + }) + var onL2 = Boolean(chainId && L2_CHAIN_IDS.includes(chainId)) + var deadline = onL2 ? L2_DEADLINE_FROM_NOW : userDeadline + var setUserDeadline = useCallback( + function (userDeadline) { + dispatch(updateUserDeadline({ userDeadline })) + }, + [dispatch] + ) + return [deadline, setUserDeadline] +} +function useAddUserToken() { + var dispatch = useAppDispatch() + return useCallback( + function (token) { + dispatch(addSerializedToken({ serializedToken: serializeToken(token) })) + }, + [dispatch] + ) +} +function useRemoveUserAddedToken() { + var dispatch = useAppDispatch() + return useCallback( + function (chainId, address) { + dispatch(removeSerializedToken({ chainId, address })) + }, + [dispatch] + ) +} +function useUserAddedTokens() { + var chainId = useActiveWeb3React().chainId + var serializedTokensMap = useAppSelector(function (_a) { + var tokens = _a.user.tokens + return tokens + }) + return useMemo( + function () { + if (!chainId) return [] + var tokenMap = ( + serializedTokensMap === null || serializedTokensMap === void 0 ? void 0 : serializedTokensMap[chainId] + ) + ? Object.values(serializedTokensMap[chainId]).map(deserializeToken) + : [] + return tokenMap + }, + [serializedTokensMap, chainId] + ) +} +function useURLWarningVisible() { + return useAppSelector(function (state) { + return state.user.URLWarningVisible + }) +} + +var EXPLORER_HOSTNAMES = { + 'etherscan.io': true, + 'ropsten.etherscan.io': true, + 'rinkeby.etherscan.io': true, + 'kovan.etherscan.io': true, + 'goerli.etherscan.io': true, + 'optimistic.etherscan.io': true, + 'kovan-optimistic.etherscan.io': true, + 'rinkeby-explorer.arbitrum.io': true, + 'arbiscan.io': true, +} +/** + * Returns the anonymized version of the given href, i.e. one that does not leak user information + * @param href the link to anonymize, i.e. remove any personal data from + * @return string anonymized version of the given href + */ +function anonymizeLink(href) { + try { + var url = new URL(href) + if (EXPLORER_HOSTNAMES[url.hostname]) { + var pathPieces = url.pathname.split('/') + var anonymizedPath = pathPieces + .map(function (pc) { + return /0x[a-fA-F0-9]+/.test(pc) ? '***' : pc + }) + .join('/') + return url.protocol + '//' + url.hostname + anonymizedPath + } + return href + } catch (error) { + return href + } +} + +var ButtonText = styled.button( + templateObject_1$1l || + (templateObject_1$1l = __makeTemplateObject( + [ + '\n outline: none;\n border: none;\n font-size: inherit;\n padding: 0;\n margin: 0;\n background: none;\n cursor: pointer;\n\n :hover {\n opacity: 0.7;\n }\n\n :focus {\n text-decoration: underline;\n }\n', + ], + [ + '\n outline: none;\n border: none;\n font-size: inherit;\n padding: 0;\n margin: 0;\n background: none;\n cursor: pointer;\n\n :hover {\n opacity: 0.7;\n }\n\n :focus {\n text-decoration: underline;\n }\n', + ] + )) +) +var CloseIcon$2 = styled(X)( + templateObject_2$$ || + (templateObject_2$$ = __makeTemplateObject( + ['\n cursor: pointer;\n'], + [ + '\n cursor: pointer;\n', + // for wrapper react feather icons + ] + )) +) +// for wrapper react feather icons +var IconWrapper$4 = styled.div( + templateObject_3$S || + (templateObject_3$S = __makeTemplateObject( + [ + '\n display: flex;\n align-items: center;\n justify-content: center;\n width: ', + ';\n height: ', + ';\n margin-right: ', + ';\n margin-left: ', + ';\n & > * {\n stroke: ', + ';\n }\n', + ], + [ + '\n display: flex;\n align-items: center;\n justify-content: center;\n width: ', + ';\n height: ', + ';\n margin-right: ', + ';\n margin-left: ', + ';\n & > * {\n stroke: ', + ';\n }\n', + // A button that triggers some onClick result, but looks like a link. + ] + )), + function (_a) { + var size = _a.size + return size !== null && size !== void 0 ? size : '20px' + }, + function (_a) { + var size = _a.size + return size !== null && size !== void 0 ? size : '20px' + }, + function (_a) { + var marginRight = _a.marginRight + return marginRight !== null && marginRight !== void 0 ? marginRight : 0 + }, + function (_a) { + var marginLeft = _a.marginLeft + return marginLeft !== null && marginLeft !== void 0 ? marginLeft : 0 + }, + function (_a) { + var theme = _a.theme, + stroke = _a.stroke + return stroke !== null && stroke !== void 0 ? stroke : theme.blue1 + } +) +// A button that triggers some onClick result, but looks like a link. +var LinkStyledButton = styled.button( + templateObject_4$G || + (templateObject_4$G = __makeTemplateObject( + [ + '\n border: none;\n text-decoration: none;\n background: none;\n\n cursor: ', + ';\n color: ', + ';\n font-weight: 500;\n\n :hover {\n text-decoration: ', + ';\n }\n\n :focus {\n outline: none;\n text-decoration: ', + ';\n }\n\n :active {\n text-decoration: none;\n }\n', + ], + [ + '\n border: none;\n text-decoration: none;\n background: none;\n\n cursor: ', + ';\n color: ', + ';\n font-weight: 500;\n\n :hover {\n text-decoration: ', + ';\n }\n\n :focus {\n outline: none;\n text-decoration: ', + ';\n }\n\n :active {\n text-decoration: none;\n }\n', + // An internal link from the react-router-dom library that is correctly styled + ] + )), + function (_a) { + var disabled = _a.disabled + return disabled ? 'default' : 'pointer' + }, + function (_a) { + var theme = _a.theme, + disabled = _a.disabled + return disabled ? theme.text2 : theme.primary1 + }, + function (_a) { + var disabled = _a.disabled + return disabled ? null : 'underline' + }, + function (_a) { + var disabled = _a.disabled + return disabled ? null : 'underline' + } +) +// An internal link from the react-router-dom library that is correctly styled +var StyledInternalLink = styled(Link$1)( + templateObject_5$x || + (templateObject_5$x = __makeTemplateObject( + [ + '\n text-decoration: none;\n cursor: pointer;\n color: ', + ';\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 text-decoration: none;\n cursor: pointer;\n color: ', + ';\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', + ] + )), + function (_a) { + var theme = _a.theme + return theme.primary1 + } +) +var StyledLink = styled.a( + templateObject_6$o || + (templateObject_6$o = __makeTemplateObject( + [ + '\n text-decoration: none;\n cursor: pointer;\n color: ', + ';\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 text-decoration: none;\n cursor: pointer;\n color: ', + ';\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', + ] + )), + function (_a) { + var theme = _a.theme + return theme.primary1 + } +) +var LinkIconWrapper = styled.a( + templateObject_7$k || + (templateObject_7$k = __makeTemplateObject( + [ + '\n text-decoration: none;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n text-decoration: none;\n opacity: 0.7;\n }\n\n :focus {\n outline: none;\n text-decoration: none;\n }\n\n :active {\n text-decoration: none;\n }\n', + ], + [ + '\n text-decoration: none;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n text-decoration: none;\n opacity: 0.7;\n }\n\n :focus {\n outline: none;\n text-decoration: none;\n }\n\n :active {\n text-decoration: none;\n }\n', + ] + )) +) +var LinkIcon = styled(ExternalLink$1)( + templateObject_8$h || + (templateObject_8$h = __makeTemplateObject( + ['\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ', ';\n'], + ['\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ', ';\n'] + )), + function (_a) { + var theme = _a.theme + return theme.blue1 + } +) +var TrashIcon = styled(Trash)( + templateObject_9$g || + (templateObject_9$g = __makeTemplateObject( + [ + '\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ', + ';\n\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n opacity: 0.7;\n }\n', + ], + [ + '\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ', + ';\n\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n opacity: 0.7;\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.text3 + } +) +var rotateImg = keyframes( + templateObject_10$c || + (templateObject_10$c = __makeTemplateObject( + [ + '\n 0% {\n transform: perspective(1000px) rotateY(0deg);\n }\n\n 100% {\n transform: perspective(1000px) rotateY(360deg);\n }\n', + ], + [ + '\n 0% {\n transform: perspective(1000px) rotateY(0deg);\n }\n\n 100% {\n transform: perspective(1000px) rotateY(360deg);\n }\n', + ] + )) +) +var UniTokenAnimated = styled.img( + templateObject_11$a || + (templateObject_11$a = __makeTemplateObject( + [ + '\n animation: ', + ' 5s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n padding: 2rem 0 0 0;\n filter: drop-shadow(0px 2px 4px rgba(0, 0, 0, 0.15));\n', + ], + [ + '\n animation: ', + ' 5s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n padding: 2rem 0 0 0;\n filter: drop-shadow(0px 2px 4px rgba(0, 0, 0, 0.15));\n', + ] + )), + rotateImg +) +function handleClickExternalLink(event) { + var _a = event.currentTarget, + target = _a.target, + href = _a.href + var anonymizedHref = anonymizeLink(href) + // don't prevent default, don't redirect if it's a new tab + if (target === '_blank' || event.ctrlKey || event.metaKey) { + ReactGA.outboundLink({ label: anonymizedHref }, function () { + console.debug('Fired outbound link event', anonymizedHref) + }) + } else { + event.preventDefault() + // send a ReactGA event and then trigger a location change + ReactGA.outboundLink({ label: anonymizedHref }, function () { + window.location.href = anonymizedHref + }) + } +} +/** + * Outbound link that handles firing google analytics events + */ +function ExternalLink(_a) { + var _b = _a.target, + target = _b === void 0 ? '_blank' : _b, + href = _a.href, + _c = _a.rel, + rel = _c === void 0 ? 'noopener noreferrer' : _c, + rest = __rest(_a, ['target', 'href', 'rel']) + return jsx(StyledLink, __assign({ target, rel, href, onClick: handleClickExternalLink }, rest), void 0) +} +function ExternalLinkIcon(_a) { + var _b = _a.target, + target = _b === void 0 ? '_blank' : _b, + href = _a.href, + _c = _a.rel, + rel = _c === void 0 ? 'noopener noreferrer' : _c, + rest = __rest(_a, ['target', 'href', 'rel']) + return jsx( + LinkIconWrapper, + __assign({ target, rel, href, onClick: handleClickExternalLink }, rest, { + children: jsx(LinkIcon, {}, void 0), + }), + void 0 + ) +} +var rotate$1 = keyframes( + templateObject_12$a || + (templateObject_12$a = __makeTemplateObject( + ['\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n'], + ['\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n'] + )) +) +var Spinner$2 = styled.img( + templateObject_13$6 || + (templateObject_13$6 = __makeTemplateObject( + ['\n animation: 2s ', ' linear infinite;\n width: 16px;\n height: 16px;\n'], + ['\n animation: 2s ', ' linear infinite;\n width: 16px;\n height: 16px;\n'] + )), + rotate$1 +) +styled(StyledInternalLink)( + templateObject_14$6 || (templateObject_14$6 = __makeTemplateObject(['\n color: ', ';\n'], ['\n color: ', ';\n'])), + function (_a) { + var theme = _a.theme + return theme.text1 + } +) +var CustomLightSpinner = styled(Spinner$2)( + templateObject_15$4 || + (templateObject_15$4 = __makeTemplateObject( + ['\n height: ', ';\n width: ', ';\n'], + ['\n height: ', ';\n width: ', ';\n'] + )), + function (_a) { + var size = _a.size + return size + }, + function (_a) { + var size = _a.size + return size + } +) +var HideSmall = styled.span( + templateObject_17$2 || (templateObject_17$2 = __makeTemplateObject(['\n ', ';\n'], ['\n ', ';\n'])), + function (_a) { + var theme = _a.theme + return theme.mediaWidth.upToSmall( + templateObject_16$3 || + (templateObject_16$3 = __makeTemplateObject(['\n display: none;\n '], ['\n display: none;\n '])) + ) + } +) +styled.span( + templateObject_19$2 || (templateObject_19$2 = __makeTemplateObject(['\n ', ';\n'], ['\n ', ';\n'])), + function (_a) { + var theme = _a.theme + return theme.mediaWidth.upToExtraSmall( + templateObject_18$2 || + (templateObject_18$2 = __makeTemplateObject(['\n display: none;\n '], ['\n display: none;\n '])) + ) + } +) +styled.span( + templateObject_21$1 || + (templateObject_21$1 = __makeTemplateObject(['\n display: none;\n ', ';\n'], ['\n display: none;\n ', ';\n'])), + function (_a) { + var theme = _a.theme + return theme.mediaWidth.upToSmall( + templateObject_20$1 || + (templateObject_20$1 = __makeTemplateObject(['\n display: block;\n '], ['\n display: block;\n '])) + ) + } +) +var Separator$1 = styled.div( + templateObject_22 || + (templateObject_22 = __makeTemplateObject( + ['\n width: 100%;\n height: 1px;\n background-color: ', ';\n'], + ['\n width: 100%;\n height: 1px;\n background-color: ', ';\n'] + )), + function (_a) { + var theme = _a.theme + return theme.bg2 + } +) +var templateObject_1$1l, + templateObject_2$$, + templateObject_3$S, + templateObject_4$G, + templateObject_5$x, + templateObject_6$o, + templateObject_7$k, + templateObject_8$h, + templateObject_9$g, + templateObject_10$c, + templateObject_11$a, + templateObject_12$a, + templateObject_13$6, + templateObject_14$6, + templateObject_15$4, + templateObject_16$3, + templateObject_17$2, + templateObject_18$2, + templateObject_19$2, + templateObject_20$1, + templateObject_21$1, + templateObject_22 + +var MEDIA_WIDTHS = { + upToExtraSmall: 500, + upToSmall: 720, + upToMedium: 960, + upToLarge: 1280, } - -/** - * Parses a CurrencyAmount from the passed string. - * Returns the CurrencyAmount, or undefined if parsing fails. - */ -function tryParseCurrencyAmount(value, currency) { - if (!value || !currency) { - return undefined; - } - try { - var typedValueParsed = parseUnits(value, currency.decimals).toString(); - if (typedValueParsed !== '0') { - return CurrencyAmount.fromRawAmount(currency, JSBI.BigInt(typedValueParsed)); - } - } - catch (error) { - // fails if the user specifies too many decimal places of precision (or maybe exceed max uint?) - console.debug("Failed to parse input amount: \"" + value + "\"", error); - } - return undefined; +// Migrating to a standard z-index system https://getbootstrap.com/docs/5.0/layout/z-index/ +// Please avoid using deprecated numbers +var Z_INDEX +;(function (Z_INDEX) { + Z_INDEX[(Z_INDEX['deprecated_zero'] = 0)] = 'deprecated_zero' + Z_INDEX[(Z_INDEX['deprecated_content'] = 1)] = 'deprecated_content' + Z_INDEX[(Z_INDEX['dropdown'] = 1000)] = 'dropdown' + Z_INDEX[(Z_INDEX['sticky'] = 1020)] = 'sticky' + Z_INDEX[(Z_INDEX['fixed'] = 1030)] = 'fixed' + Z_INDEX[(Z_INDEX['modalBackdrop'] = 1040)] = 'modalBackdrop' + Z_INDEX[(Z_INDEX['offcanvas'] = 1050)] = 'offcanvas' + Z_INDEX[(Z_INDEX['modal'] = 1060)] = 'modal' + Z_INDEX[(Z_INDEX['popover'] = 1070)] = 'popover' + Z_INDEX[(Z_INDEX['tooltip'] = 1080)] = 'tooltip' +})(Z_INDEX || (Z_INDEX = {})) +var mediaWidthTemplates = Object.keys(MEDIA_WIDTHS).reduce(function (accumulator, size) { + accumulator[size] = function (a, b, c) { + return css( + templateObject_1$1k || + (templateObject_1$1k = __makeTemplateObject( + ['\n @media (max-width: ', 'px) {\n ', '\n }\n '], + ['\n @media (max-width: ', 'px) {\n ', '\n }\n '] + )), + MEDIA_WIDTHS[size], + css(a, b, c) + ) + } + return accumulator +}, {}) +var white = '#FFFFFF' +var black = '#000000' +function colors(darkMode) { + return { + darkMode, + // base + white, + black, + // text + text1: darkMode ? '#FFFFFF' : '#000000', + text2: darkMode ? '#C3C5CB' : '#565A69', + text3: darkMode ? '#8F96AC' : '#6E727D', + text4: darkMode ? '#B2B9D2' : '#C3C5CB', + text5: darkMode ? '#2C2F36' : '#EDEEF2', + // backgrounds / greys + bg0: darkMode ? '#191B1F' : '#FFF', + bg1: darkMode ? '#212429' : '#F7F8FA', + bg2: darkMode ? '#2C2F36' : '#EDEEF2', + bg3: darkMode ? '#40444F' : '#CED0D9', + bg4: darkMode ? '#565A69' : '#888D9B', + bg5: darkMode ? '#6C7284' : '#888D9B', + bg6: darkMode ? '#1A2028' : '#6C7284', + //specialty colors + modalBG: darkMode ? 'rgba(0,0,0,.425)' : 'rgba(0,0,0,0.3)', + advancedBG: darkMode ? 'rgba(0,0,0,0.1)' : 'rgba(255,255,255,0.6)', + //primary colors + primary1: darkMode ? '#2172E5' : '#E8006F', + primary2: darkMode ? '#3680E7' : '#FF8CC3', + primary3: darkMode ? '#4D8FEA' : '#FF99C9', + primary4: darkMode ? '#376bad70' : '#F6DDE8', + primary5: darkMode ? '#153d6f70' : '#FDEAF1', + // color text + primaryText1: darkMode ? '#5090ea' : '#D50066', + // secondary colors + secondary1: darkMode ? '#2172E5' : '#E8006F', + secondary2: darkMode ? '#17000b26' : '#F6DDE8', + secondary3: darkMode ? '#17000b26' : '#FDEAF1', + // other + red1: darkMode ? '#FF4343' : '#DA2D2B', + red2: darkMode ? '#F82D3A' : '#DF1F38', + red3: '#D60000', + green1: darkMode ? '#27AE60' : '#007D35', + yellow1: '#E3A507', + yellow2: '#FF8F00', + yellow3: '#F3B71E', + blue1: darkMode ? '#2172E5' : '#0068FC', + blue2: darkMode ? '#5199FF' : '#0068FC', + error: darkMode ? '#FD4040' : '#DF1F38', + success: darkMode ? '#27AE60' : '#007D35', + warning: '#FF8F00', + // dont wanna forget these blue yet + blue4: darkMode ? '#153d6f70' : '#C4D9F8', + // blue5: darkMode ? '#153d6f70' : '#EBF4FF', + } +} +function theme(darkMode) { + return __assign(__assign({}, colors(darkMode)), { + grids: { + sm: 8, + md: 12, + lg: 24, + }, + //shadows + shadow1: darkMode ? '#000' : '#2F80ED', + // media queries + mediaWidth: mediaWidthTemplates, + // css snippets + flexColumnNoWrap: css( + templateObject_2$_ || + (templateObject_2$_ = __makeTemplateObject( + ['\n display: flex;\n flex-flow: column nowrap;\n '], + ['\n display: flex;\n flex-flow: column nowrap;\n '] + )) + ), + flexRowNoWrap: css( + templateObject_3$R || + (templateObject_3$R = __makeTemplateObject( + ['\n display: flex;\n flex-flow: row nowrap;\n '], + ['\n display: flex;\n flex-flow: row nowrap;\n '] + )) + ), + }) +} +function ThemeProvider(_a) { + var children = _a.children + var darkMode = useIsDarkMode() + var themeObject = useMemo( + function () { + return theme(darkMode) + }, + [darkMode] + ) + return jsx(ThemeProvider$1, __assign({ theme: themeObject }, { children }), void 0) +} +var TextWrapper$1 = styled(Text$1)( + templateObject_4$F || + (templateObject_4$F = __makeTemplateObject( + ['\n color: ', ';\n'], + [ + '\n color: ', + ';\n', + /** + * Preset styles of the Rebass Text component + */ + ] + )), + function (_a) { + var color = _a.color, + theme = _a.theme + return theme[color] + } +) +/** + * Preset styles of the Rebass Text component + */ +var ThemedText = { + Main(props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text2' }, props), void 0) + }, + Link(props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'primary1' }, props), void 0) + }, + Label(props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 600, color: 'text1' }, props), void 0) + }, + Black(props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text1' }, props), void 0) + }, + White(props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'white' }, props), void 0) + }, + Body(props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 400, fontSize: 16, color: 'text1' }, props), void 0) + }, + LargeHeader(props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 600, fontSize: 24 }, props), void 0) + }, + MediumHeader(props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 500, fontSize: 20 }, props), void 0) + }, + SubHeader(props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 400, fontSize: 14 }, props), void 0) + }, + Small(props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 500, fontSize: 11 }, props), void 0) + }, + Blue(props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'blue1' }, props), void 0) + }, + Yellow(props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'yellow3' }, props), void 0) + }, + DarkGray(props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'text3' }, props), void 0) + }, + Gray(props) { + return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: 'bg3' }, props), void 0) + }, + Italic(props) { + return jsx( + TextWrapper$1, + __assign({ fontWeight: 500, fontSize: 12, fontStyle: 'italic', color: 'text2' }, props), + void 0 + ) + }, + Error(_a) { + var error = _a.error, + props = __rest(_a, ['error']) + return jsx(TextWrapper$1, __assign({ fontWeight: 500, color: error ? 'red1' : 'text2' }, props), void 0) + }, +} +var ThemedGlobalStyle = createGlobalStyle( + templateObject_5$w || + (templateObject_5$w = __makeTemplateObject( + ['\nhtml {\n color: ', ';\n background-color: ', ' !important;\n}\n\na {\n color: ', '; \n}\n'], + ['\nhtml {\n color: ', ';\n background-color: ', ' !important;\n}\n\na {\n color: ', '; \n}\n'] + )), + function (_a) { + var theme = _a.theme + return theme.text1 + }, + function (_a) { + var theme = _a.theme + return theme.bg1 + }, + function (_a) { + var theme = _a.theme + return theme.blue1 + } +) +var templateObject_1$1k, templateObject_2$_, templateObject_3$R, templateObject_4$F, templateObject_5$w + +var _a$b +var ETHERSCAN_PREFIXES = + ((_a$b = {}), + (_a$b[SupportedChainId.MAINNET] = 'https://etherscan.io'), + (_a$b[SupportedChainId.ROPSTEN] = 'https://ropsten.etherscan.io'), + (_a$b[SupportedChainId.RINKEBY] = 'https://rinkeby.etherscan.io'), + (_a$b[SupportedChainId.GOERLI] = 'https://goerli.etherscan.io'), + (_a$b[SupportedChainId.KOVAN] = 'https://kovan.etherscan.io'), + (_a$b[SupportedChainId.OPTIMISM] = 'https://optimistic.etherscan.io'), + (_a$b[SupportedChainId.OPTIMISTIC_KOVAN] = 'https://kovan-optimistic.etherscan.io'), + (_a$b[SupportedChainId.POLYGON_MUMBAI] = 'https://mumbai.polygonscan.com'), + (_a$b[SupportedChainId.POLYGON] = 'https://polygonscan.com'), + _a$b) +var ExplorerDataType +;(function (ExplorerDataType) { + ExplorerDataType['TRANSACTION'] = 'transaction' + ExplorerDataType['TOKEN'] = 'token' + ExplorerDataType['ADDRESS'] = 'address' + ExplorerDataType['BLOCK'] = 'block' +})(ExplorerDataType || (ExplorerDataType = {})) +/** + * Return the explorer link for the given data and data type + * @param chainId the ID of the chain for which to return the data + * @param data the data to return a link for + * @param type the type of the data + */ +function getExplorerLink(chainId, data, type) { + var _a + if (chainId === SupportedChainId.ARBITRUM_ONE) { + switch (type) { + case ExplorerDataType.TRANSACTION: + return 'https://arbiscan.io/tx/' + data + case ExplorerDataType.ADDRESS: + case ExplorerDataType.TOKEN: + return 'https://arbiscan.io/address/' + data + case ExplorerDataType.BLOCK: + return 'https://arbiscan.io/block/' + data + default: + return 'https://arbiscan.io/' + } + } + if (chainId === SupportedChainId.ARBITRUM_RINKEBY) { + switch (type) { + case ExplorerDataType.TRANSACTION: + return 'https://rinkeby-explorer.arbitrum.io/tx/' + data + case ExplorerDataType.ADDRESS: + case ExplorerDataType.TOKEN: + return 'https://rinkeby-explorer.arbitrum.io/address/' + data + case ExplorerDataType.BLOCK: + return 'https://rinkeby-explorer.arbitrum.io/block/' + data + default: + return 'https://rinkeby-explorer.arbitrum.io/' + } + } + var prefix = (_a = ETHERSCAN_PREFIXES[chainId]) !== null && _a !== void 0 ? _a : 'https://etherscan.io' + switch (type) { + case ExplorerDataType.TRANSACTION: + return prefix + '/tx/' + data + case ExplorerDataType.TOKEN: + return prefix + '/token/' + data + case ExplorerDataType.BLOCK: + if (chainId === SupportedChainId.OPTIMISM || chainId === SupportedChainId.OPTIMISTIC_KOVAN) { + return prefix + '/tx/' + data + } + return prefix + '/block/' + data + case ExplorerDataType.ADDRESS: + return prefix + '/address/' + data + default: + return '' + prefix + } } -// returns whether tradeB is better than tradeA by at least a threshold percentage amount -// only used by v2 hooks -function isTradeBetter(tradeA, tradeB, minimumDelta) { - if (minimumDelta === void 0) { minimumDelta = ZERO_PERCENT; } - if (tradeA && !tradeB) - return false; - if (tradeB && !tradeA) - return true; - if (!tradeA || !tradeB) - return undefined; - if (tradeA.tradeType !== tradeB.tradeType || - !tradeA.inputAmount.currency.equals(tradeB.inputAmount.currency) || - !tradeA.outputAmount.currency.equals(tradeB.outputAmount.currency)) { - throw new Error('Comparing incomparable trades'); - } - if (minimumDelta.equalTo(ZERO_PERCENT)) { - return tradeA.executionPrice.lessThan(tradeB.executionPrice); - } - else { - return tradeA.executionPrice.asFraction - .multiply(minimumDelta.add(ONE_HUNDRED_PERCENT)) - .lessThan(tradeB.executionPrice); - } +var Column = styled.div( + templateObject_1$1j || + (templateObject_1$1j = __makeTemplateObject( + ['\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n'], + ['\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n'] + )) +) +var ColumnCenter = styled(Column)( + templateObject_2$Z || + (templateObject_2$Z = __makeTemplateObject( + ['\n width: 100%;\n align-items: center;\n'], + ['\n width: 100%;\n align-items: center;\n'] + )) +) +var AutoColumn = styled.div( + templateObject_3$Q || + (templateObject_3$Q = __makeTemplateObject( + ['\n display: grid;\n grid-auto-rows: auto;\n grid-row-gap: ', ';\n justify-items: ', ';\n'], + ['\n display: grid;\n grid-auto-rows: auto;\n grid-row-gap: ', ';\n justify-items: ', ';\n'] + )), + function (_a) { + var gap = _a.gap + return (gap === 'sm' && '8px') || (gap === 'md' && '12px') || (gap === 'lg' && '24px') || gap + }, + function (_a) { + var justify = _a.justify + return justify && justify + } +) +var templateObject_1$1j, templateObject_2$Z, templateObject_3$Q + +var Row$1 = styled(Box)( + templateObject_1$1i || + (templateObject_1$1i = __makeTemplateObject( + [ + '\n width: ', + ';\n display: flex;\n padding: 0;\n align-items: ', + ';\n justify-content: ', + ';\n padding: ', + ';\n border: ', + ';\n border-radius: ', + ';\n', + ], + [ + '\n width: ', + ';\n display: flex;\n padding: 0;\n align-items: ', + ';\n justify-content: ', + ';\n padding: ', + ';\n border: ', + ';\n border-radius: ', + ';\n', + ] + )), + function (_a) { + var width = _a.width + return width !== null && width !== void 0 ? width : '100%' + }, + function (_a) { + var align = _a.align + return align !== null && align !== void 0 ? align : 'center' + }, + function (_a) { + var justify = _a.justify + return justify !== null && justify !== void 0 ? justify : 'flex-start' + }, + function (_a) { + var padding = _a.padding + return padding + }, + function (_a) { + var border = _a.border + return border + }, + function (_a) { + var borderRadius = _a.borderRadius + return borderRadius + } +) +var RowBetween = styled(Row$1)( + templateObject_2$Y || + (templateObject_2$Y = __makeTemplateObject( + ['\n justify-content: space-between;\n'], + ['\n justify-content: space-between;\n'] + )) +) +styled.div( + templateObject_3$P || + (templateObject_3$P = __makeTemplateObject( + ['\n display: flex;\n align-items: flex-end;\n'], + ['\n display: flex;\n align-items: flex-end;\n'] + )) +) +var AutoRow = styled(Row$1)( + templateObject_4$E || + (templateObject_4$E = __makeTemplateObject( + [ + '\n flex-wrap: wrap;\n margin: ', + ';\n justify-content: ', + ';\n\n & > * {\n margin: ', + ' !important;\n }\n', + ], + [ + '\n flex-wrap: wrap;\n margin: ', + ';\n justify-content: ', + ';\n\n & > * {\n margin: ', + ' !important;\n }\n', + ] + )), + function (_a) { + var gap = _a.gap + return gap && '-' + gap + }, + function (_a) { + var justify = _a.justify + return justify && justify + }, + function (_a) { + var gap = _a.gap + return gap + } +) +var RowFixed = styled(Row$1)( + templateObject_5$v || + (templateObject_5$v = __makeTemplateObject( + ['\n width: fit-content;\n margin: ', ';\n'], + ['\n width: fit-content;\n margin: ', ';\n'] + )), + function (_a) { + var gap = _a.gap + return gap && '-' + gap + } +) +var templateObject_1$1i, templateObject_2$Y, templateObject_3$P, templateObject_4$E, templateObject_5$v + +var InputPanel$1 = styled.div( + templateObject_1$1h || + (templateObject_1$1h = __makeTemplateObject( + [ + '\n ', + '\n position: relative;\n border-radius: 1.25rem;\n background-color: ', + ';\n z-index: 1;\n width: 100%;\n', + ], + [ + '\n ', + '\n position: relative;\n border-radius: 1.25rem;\n background-color: ', + ';\n z-index: 1;\n width: 100%;\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.flexColumnNoWrap + }, + function (_a) { + var theme = _a.theme + return theme.bg1 + } +) +var ContainerRow = styled.div( + templateObject_2$X || + (templateObject_2$X = __makeTemplateObject( + [ + '\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 1.25rem;\n border: 1px solid ', + ';\n transition: border-color 300ms ', + ',\n color 500ms ', + ';\n background-color: ', + ';\n', + ], + [ + '\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 1.25rem;\n border: 1px solid ', + ';\n transition: border-color 300ms ', + ',\n color 500ms ', + ';\n background-color: ', + ';\n', + ] + )), + function (_a) { + var error = _a.error, + theme = _a.theme + return error ? theme.red1 : theme.bg2 + }, + function (_a) { + var error = _a.error + return error ? 'step-end' : 'step-start' + }, + function (_a) { + var error = _a.error + return error ? 'step-end' : 'step-start' + }, + function (_a) { + var theme = _a.theme + return theme.bg1 + } +) +var InputContainer = styled.div( + templateObject_3$O || + (templateObject_3$O = __makeTemplateObject( + ['\n flex: 1;\n padding: 1rem;\n'], + ['\n flex: 1;\n padding: 1rem;\n'] + )) +) +var Input$2 = styled.input( + templateObject_4$D || + (templateObject_4$D = __makeTemplateObject( + [ + '\n font-size: 1.25rem;\n outline: none;\n border: none;\n flex: 1 1 auto;\n width: 0;\n background-color: ', + ';\n transition: color 300ms ', + ';\n color: ', + ';\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 500;\n width: 100%;\n ::placeholder {\n color: ', + ';\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: ', + ';\n }\n', + ], + [ + '\n font-size: 1.25rem;\n outline: none;\n border: none;\n flex: 1 1 auto;\n width: 0;\n background-color: ', + ';\n transition: color 300ms ', + ';\n color: ', + ';\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 500;\n width: 100%;\n ::placeholder {\n color: ', + ';\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: ', + ';\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.bg1 + }, + function (_a) { + var error = _a.error + return error ? 'step-end' : 'step-start' + }, + function (_a) { + var error = _a.error, + theme = _a.theme + return error ? theme.red1 : theme.text1 + }, + function (_a) { + var theme = _a.theme + return theme.text4 + }, + function (_a) { + var theme = _a.theme + return theme.text4 + } +) +function AddressInputPanel(_a) { + var id = _a.id, + _b = _a.className, + className = _b === void 0 ? 'recipient-address-input' : _b, + label = _a.label, + placeholder = _a.placeholder, + value = _a.value, + onChange = _a.onChange + var chainId = useActiveWeb3React().chainId + var theme = useContext(ThemeContext) + var _c = useENS(value), + address = _c.address, + loading = _c.loading, + name = _c.name + var handleInput = useCallback( + function (event) { + var input = event.target.value + var withoutSpaces = input.replace(/\s+/g, '') + onChange(withoutSpaces) + }, + [onChange] + ) + var error = Boolean(value.length > 0 && !loading && !address) + return jsx( + InputPanel$1, + __assign( + { id }, + { + children: jsx( + ContainerRow, + __assign( + { error }, + { + children: jsx( + InputContainer, + { + children: jsxs( + AutoColumn, + __assign( + { gap: 'md' }, + { + children: [ + jsxs( + RowBetween, + { + children: [ + jsx( + ThemedText.Black, + __assign( + { color: theme.text2, fontWeight: 500, fontSize: 14 }, + { + children: + label !== null && label !== void 0 + ? label + : jsx(Trans, { children: 'Recipient' }, void 0), + } + ), + void 0 + ), + address && + chainId && + jsx( + ExternalLink, + __assign( + { + href: getExplorerLink( + chainId, + name !== null && name !== void 0 ? name : address, + ExplorerDataType.ADDRESS + ), + style: { fontSize: '14px' }, + }, + { children: jsx(Trans, { children: '(View on Explorer)' }, void 0) } + ), + void 0 + ), + ], + }, + void 0 + ), + jsx( + Input$2, + { + className, + type: 'text', + autoComplete: 'off', + autoCorrect: 'off', + autoCapitalize: 'off', + spellCheck: 'false', + placeholder: + placeholder !== null && placeholder !== void 0 + ? placeholder + : t( + templateObject_5$u || + (templateObject_5$u = __makeTemplateObject( + ['Wallet Address or ENS name'], + ['Wallet Address or ENS name'] + )) + ), + error, + pattern: '^(0x[a-fA-F0-9]{40})$', + onChange: handleInput, + value, + }, + void 0 + ), + ], + } + ), + void 0 + ), + }, + void 0 + ), + } + ), + void 0 + ), + } + ), + void 0 + ) } +var templateObject_1$1h, templateObject_2$X, templateObject_3$O, templateObject_4$D, templateObject_5$u -function useAllCurrencyCombinations(currencyA, currencyB) { - var chainId = currencyA === null || currencyA === void 0 ? void 0 : currencyA.chainId; - var _a = __read(chainId ? [currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped, currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped] : [undefined, undefined], 2), tokenA = _a[0], tokenB = _a[1]; - var bases = useMemo(function () { - var _a, _b, _c, _d, _e; - if (!chainId || chainId !== (tokenB === null || tokenB === void 0 ? void 0 : tokenB.chainId)) - return []; - var common = (_a = BASES_TO_CHECK_TRADES_AGAINST[chainId]) !== null && _a !== void 0 ? _a : []; - var additionalA = tokenA ? (_c = (_b = ADDITIONAL_BASES[chainId]) === null || _b === void 0 ? void 0 : _b[tokenA.address]) !== null && _c !== void 0 ? _c : [] : []; - var additionalB = tokenB ? (_e = (_d = ADDITIONAL_BASES[chainId]) === null || _d === void 0 ? void 0 : _d[tokenB.address]) !== null && _e !== void 0 ? _e : [] : []; - return __spreadArray(__spreadArray(__spreadArray([], __read(common), false), __read(additionalA), false), __read(additionalB), false); - }, [chainId, tokenA, tokenB]); - var basePairs = useMemo(function () { - return bases - .flatMap(function (base) { return bases.map(function (otherBase) { return [base, otherBase]; }); }) - // though redundant with the first filter below, that expression runs more often, so this is probably worthwhile - .filter(function (_a) { - var _b = __read(_a, 2), t0 = _b[0], t1 = _b[1]; - return !t0.equals(t1); - }); - }, [bases]); - return useMemo(function () { - return tokenA && tokenB - ? __spreadArray(__spreadArray(__spreadArray([ - // the direct pair - [tokenA, tokenB] - ], __read(bases.map(function (base) { return [tokenA, base]; })), false), __read(bases.map(function (base) { return [tokenB, base]; })), false), __read(basePairs), false).filter(function (_a) { - var _b = __read(_a, 2), t0 = _b[0], t1 = _b[1]; - return !t0.equals(t1); - }) - // filter out duplicate pairs - .filter(function (_a, i, otherPairs) { - var _b = __read(_a, 2), t0 = _b[0], t1 = _b[1]; - // find the first index in the array at which there are the same 2 tokens as the current - var firstIndexInOtherPairs = otherPairs.findIndex(function (_a) { - var _b = __read(_a, 2), t0Other = _b[0], t1Other = _b[1]; - return (t0.equals(t0Other) && t1.equals(t1Other)) || (t0.equals(t1Other) && t1.equals(t0Other)); - }); - // only accept the first occurrence of the same 2 tokens - return firstIndexInOtherPairs === i; - }) - // optionally filter out some pairs for tokens with custom bases defined - .filter(function (_a) { - var _b = __read(_a, 2), tokenA = _b[0], tokenB = _b[1]; - if (!chainId) - return true; - var customBases = CUSTOM_BASES[chainId]; - var customBasesA = customBases === null || customBases === void 0 ? void 0 : customBases[tokenA.address]; - var customBasesB = customBases === null || customBases === void 0 ? void 0 : customBases[tokenB.address]; - if (!customBasesA && !customBasesB) - return true; - if (customBasesA && !customBasesA.find(function (base) { return tokenB.equals(base); })) - return false; - if (customBasesB && !customBasesB.find(function (base) { return tokenA.equals(base); })) - return false; - return true; - }) - : []; - }, [tokenA, tokenB, bases, basePairs, chainId]); -} - -var PAIR_INTERFACE = new Interface(abi$4); -var PairState; -(function (PairState) { - PairState[PairState["LOADING"] = 0] = "LOADING"; - PairState[PairState["NOT_EXISTS"] = 1] = "NOT_EXISTS"; - PairState[PairState["EXISTS"] = 2] = "EXISTS"; - PairState[PairState["INVALID"] = 3] = "INVALID"; -})(PairState || (PairState = {})); -function useV2Pairs(currencies) { - var tokens = useMemo(function () { return currencies.map(function (_a) { - var _b = __read(_a, 2), currencyA = _b[0], currencyB = _b[1]; - return [currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped, currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped]; - }); }, [currencies]); - var pairAddresses = useMemo(function () { - return tokens.map(function (_a) { - var _b = __read(_a, 2), tokenA = _b[0], tokenB = _b[1]; - return tokenA && - tokenB && - tokenA.chainId === tokenB.chainId && - !tokenA.equals(tokenB) && - V2_FACTORY_ADDRESSES[tokenA.chainId] - ? computePairAddress({ factoryAddress: V2_FACTORY_ADDRESSES[tokenA.chainId], tokenA: tokenA, tokenB: tokenB }) - : undefined; - }); - }, [tokens]); - var results = useMultipleContractSingleData(pairAddresses, PAIR_INTERFACE, 'getReserves'); - return useMemo(function () { - return results.map(function (result, i) { - var reserves = result.result, loading = result.loading; - var tokenA = tokens[i][0]; - var tokenB = tokens[i][1]; - if (loading) - return [PairState.LOADING, null]; - if (!tokenA || !tokenB || tokenA.equals(tokenB)) - return [PairState.INVALID, null]; - if (!reserves) - return [PairState.NOT_EXISTS, null]; - var reserve0 = reserves.reserve0, reserve1 = reserves.reserve1; - var _a = __read(tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA], 2), token0 = _a[0], token1 = _a[1]; - return [ - PairState.EXISTS, - new Pair(CurrencyAmount.fromRawAmount(token0, reserve0.toString()), CurrencyAmount.fromRawAmount(token1, reserve1.toString())), - ]; - }); - }, [results, tokens]); +function useTheme() { + return useContext(ThemeContext) } -function useAllCommonPairs(currencyA, currencyB) { - var allCurrencyCombinations = useAllCurrencyCombinations(currencyA, currencyB); - var allPairs = useV2Pairs(allCurrencyCombinations); - return useMemo(function () { - return Object.values(allPairs - // filter out invalid pairs - .filter(function (result) { return Boolean(result[0] === PairState.EXISTS && result[1]); }) - .map(function (_a) { - var _b = __read(_a, 2), pair = _b[1]; - return pair; - })); - }, [allPairs]); -} -var MAX_HOPS = 3; -/** - * Returns the best v2 trade for a desired swap - * @param tradeType whether the swap is an exact in/out - * @param amountSpecified the exact amount to swap in/out - * @param otherCurrency the desired output/payment currency - */ -function useBestV2Trade(tradeType, amountSpecified, otherCurrency, _a) { - var _b = _a === void 0 ? {} : _a, _c = _b.maxHops, maxHops = _c === void 0 ? MAX_HOPS : _c; - var _d = __read(useMemo(function () { - return tradeType === TradeType.EXACT_INPUT - ? [amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, otherCurrency] - : [otherCurrency, amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency]; - }, [tradeType, amountSpecified, otherCurrency]), 2), currencyIn = _d[0], currencyOut = _d[1]; - var allowedPairs = useAllCommonPairs(currencyIn, currencyOut); - return useMemo(function () { - var _a, _b, _c, _d; - if (amountSpecified && currencyIn && currencyOut && allowedPairs.length > 0) { - if (maxHops === 1) { - var options = { maxHops: 1, maxNumResults: 1 }; - if (tradeType === TradeType.EXACT_INPUT) { - var amountIn = amountSpecified; - return (_a = Trade.bestTradeExactIn(allowedPairs, amountIn, currencyOut, options)[0]) !== null && _a !== void 0 ? _a : null; - } - else { - var amountOut = amountSpecified; - return (_b = Trade.bestTradeExactOut(allowedPairs, currencyIn, amountOut, options)[0]) !== null && _b !== void 0 ? _b : null; - } - } - // search through trades with varying hops, find best trade out of them - var bestTradeSoFar = null; - for (var i = 1; i <= maxHops; i++) { - var options = { maxHops: i, maxNumResults: 1 }; - var currentTrade = void 0; - if (tradeType === TradeType.EXACT_INPUT) { - var amountIn = amountSpecified; - currentTrade = (_c = Trade.bestTradeExactIn(allowedPairs, amountIn, currencyOut, options)[0]) !== null && _c !== void 0 ? _c : null; - } - else { - var amountOut = amountSpecified; - currentTrade = (_d = Trade.bestTradeExactOut(allowedPairs, currencyIn, amountOut, options)[0]) !== null && _d !== void 0 ? _d : null; - } - // if current trade is best yet, save it - if (isTradeBetter(bestTradeSoFar, currentTrade, BETTER_TRADE_LESS_HOPS_THRESHOLD)) { - bestTradeSoFar = currentTrade; - } - } - return bestTradeSoFar; - } - return null; - }, [tradeType, amountSpecified, currencyIn, currencyOut, allowedPairs, maxHops]); -} - -var TradeState; -(function (TradeState) { - TradeState[TradeState["LOADING"] = 0] = "LOADING"; - TradeState[TradeState["INVALID"] = 1] = "INVALID"; - TradeState[TradeState["NO_ROUTE_FOUND"] = 2] = "NO_ROUTE_FOUND"; - TradeState[TradeState["VALID"] = 3] = "VALID"; - TradeState[TradeState["SYNCING"] = 4] = "SYNCING"; -})(TradeState || (TradeState = {})); -var InterfaceTrade = /** @class */ (function (_super) { - __extends(InterfaceTrade, _super); - function InterfaceTrade(_a) { - var gasUseEstimateUSD = _a.gasUseEstimateUSD, routes = __rest(_a, ["gasUseEstimateUSD"]); - var _this = _super.call(this, routes) || this; - _this.gasUseEstimateUSD = gasUseEstimateUSD; - return _this; - } - return InterfaceTrade; -}(Trade$1)); +var BaseButton = styled(Button$1)( + templateObject_1$1g || + (templateObject_1$1g = __makeTemplateObject( + [ + '\n padding: ', + ';\n width: ', + ';\n font-weight: 500;\n text-align: center;\n border-radius: ', + ';\n outline: none;\n border: 1px solid transparent;\n color: ', + ';\n text-decoration: none;\n display: flex;\n justify-content: center;\n flex-wrap: nowrap;\n align-items: center;\n cursor: pointer;\n position: relative;\n z-index: 1;\n &:disabled {\n opacity: 50%;\n cursor: auto;\n pointer-events: none;\n }\n\n will-change: transform;\n transition: transform 450ms ease;\n transform: perspective(1px) translateZ(0);\n\n > * {\n user-select: none;\n }\n\n > a {\n text-decoration: none;\n }\n', + ], + [ + '\n padding: ', + ';\n width: ', + ';\n font-weight: 500;\n text-align: center;\n border-radius: ', + ';\n outline: none;\n border: 1px solid transparent;\n color: ', + ';\n text-decoration: none;\n display: flex;\n justify-content: center;\n flex-wrap: nowrap;\n align-items: center;\n cursor: pointer;\n position: relative;\n z-index: 1;\n &:disabled {\n opacity: 50%;\n cursor: auto;\n pointer-events: none;\n }\n\n will-change: transform;\n transition: transform 450ms ease;\n transform: perspective(1px) translateZ(0);\n\n > * {\n user-select: none;\n }\n\n > a {\n text-decoration: none;\n }\n', + ] + )), + function (_a) { + var padding = _a.padding + return padding !== null && padding !== void 0 ? padding : '16px' + }, + function (_a) { + var width = _a.width + return width !== null && width !== void 0 ? width : '100%' + }, + function (_a) { + var $borderRadius = _a.$borderRadius + return $borderRadius !== null && $borderRadius !== void 0 ? $borderRadius : '20px' + }, + function (_a) { + var theme = _a.theme + return theme.text1 + } +) +var ButtonPrimary = styled(BaseButton)( + templateObject_2$W || + (templateObject_2$W = __makeTemplateObject( + [ + '\n background-color: ', + ';\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:hover {\n background-color: ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:disabled {\n background-color: ', + ';\n color: ', + ';\n cursor: auto;\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n', + ], + [ + '\n background-color: ', + ';\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:hover {\n background-color: ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:disabled {\n background-color: ', + ';\n color: ', + ';\n cursor: auto;\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.primary1 + }, + function (_a) { + var theme = _a.theme + return darken(0.05, theme.primary1) + }, + function (_a) { + var theme = _a.theme + return darken(0.05, theme.primary1) + }, + function (_a) { + var theme = _a.theme + return darken(0.05, theme.primary1) + }, + function (_a) { + var theme = _a.theme + return darken(0.1, theme.primary1) + }, + function (_a) { + var theme = _a.theme + return darken(0.1, theme.primary1) + }, + function (_a) { + var theme = _a.theme, + altDisabledStyle = _a.altDisabledStyle, + disabled = _a.disabled + return altDisabledStyle ? (disabled ? theme.primary1 : theme.bg2) : theme.bg2 + }, + function (_a) { + var altDisabledStyle = _a.altDisabledStyle, + disabled = _a.disabled, + theme = _a.theme + return altDisabledStyle ? (disabled ? theme.white : theme.text2) : theme.text2 + } +) +var ButtonLight = styled(BaseButton)( + templateObject_3$N || + (templateObject_3$N = __makeTemplateObject( + [ + '\n background-color: ', + ';\n color: ', + ';\n font-size: 16px;\n font-weight: 500;\n &:focus {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:hover {\n background-color: ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n :disabled {\n opacity: 0.4;\n :hover {\n cursor: auto;\n background-color: ', + ';\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n }\n', + ], + [ + '\n background-color: ', + ';\n color: ', + ';\n font-size: 16px;\n font-weight: 500;\n &:focus {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:hover {\n background-color: ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n :disabled {\n opacity: 0.4;\n :hover {\n cursor: auto;\n background-color: ', + ';\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n }\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.primary5 + }, + function (_a) { + var theme = _a.theme + return theme.primaryText1 + }, + function (_a) { + var theme = _a.theme, + disabled = _a.disabled + return !disabled && darken(0.03, theme.primary5) + }, + function (_a) { + var theme = _a.theme, + disabled = _a.disabled + return !disabled && darken(0.03, theme.primary5) + }, + function (_a) { + var theme = _a.theme, + disabled = _a.disabled + return !disabled && darken(0.03, theme.primary5) + }, + function (_a) { + var theme = _a.theme, + disabled = _a.disabled + return !disabled && darken(0.05, theme.primary5) + }, + function (_a) { + var theme = _a.theme, + disabled = _a.disabled + return !disabled && darken(0.05, theme.primary5) + }, + function (_a) { + var theme = _a.theme + return theme.primary5 + } +) +var ButtonGray = styled(BaseButton)( + templateObject_4$C || + (templateObject_4$C = __makeTemplateObject( + [ + '\n background-color: ', + ';\n color: ', + ';\n font-size: 16px;\n font-weight: 500;\n\n &:hover {\n background-color: ', + ';\n }\n &:active {\n background-color: ', + ';\n }\n', + ], + [ + '\n background-color: ', + ';\n color: ', + ';\n font-size: 16px;\n font-weight: 500;\n\n &:hover {\n background-color: ', + ';\n }\n &:active {\n background-color: ', + ';\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.bg1 + }, + function (_a) { + var theme = _a.theme + return theme.text2 + }, + function (_a) { + var theme = _a.theme, + disabled = _a.disabled + return !disabled && darken(0.05, theme.bg2) + }, + function (_a) { + var theme = _a.theme, + disabled = _a.disabled + return !disabled && darken(0.1, theme.bg2) + } +) +var ButtonSecondary = styled(BaseButton)( + templateObject_5$t || + (templateObject_5$t = __makeTemplateObject( + [ + '\n border: 1px solid ', + ';\n color: ', + ';\n background-color: transparent;\n font-size: 16px;\n border-radius: 12px;\n padding: ', + ';\n\n &:focus {\n box-shadow: 0 0 0 1pt ', + ';\n border: 1px solid ', + ';\n }\n &:hover {\n border: 1px solid ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', + ';\n border: 1px solid ', + ';\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n a:hover {\n text-decoration: none;\n }\n', + ], + [ + '\n border: 1px solid ', + ';\n color: ', + ';\n background-color: transparent;\n font-size: 16px;\n border-radius: 12px;\n padding: ', + ';\n\n &:focus {\n box-shadow: 0 0 0 1pt ', + ';\n border: 1px solid ', + ';\n }\n &:hover {\n border: 1px solid ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', + ';\n border: 1px solid ', + ';\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n a:hover {\n text-decoration: none;\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.primary4 + }, + function (_a) { + var theme = _a.theme + return theme.primary1 + }, + function (_a) { + var padding = _a.padding + return padding ? padding : '10px' + }, + function (_a) { + var theme = _a.theme + return theme.primary4 + }, + function (_a) { + var theme = _a.theme + return theme.primary3 + }, + function (_a) { + var theme = _a.theme + return theme.primary3 + }, + function (_a) { + var theme = _a.theme + return theme.primary4 + }, + function (_a) { + var theme = _a.theme + return theme.primary3 + } +) +var ButtonOutlined = styled(BaseButton)( + templateObject_6$n || + (templateObject_6$n = __makeTemplateObject( + [ + '\n border: 1px solid ', + ';\n background-color: transparent;\n color: ', + ';\n &:focus {\n box-shadow: 0 0 0 1px ', + ';\n }\n &:hover {\n box-shadow: 0 0 0 1px ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1px ', + ';\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n', + ], + [ + '\n border: 1px solid ', + ';\n background-color: transparent;\n color: ', + ';\n &:focus {\n box-shadow: 0 0 0 1px ', + ';\n }\n &:hover {\n box-shadow: 0 0 0 1px ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1px ', + ';\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.bg2 + }, + function (_a) { + var theme = _a.theme + return theme.text1 + }, + function (_a) { + var theme = _a.theme + return theme.bg4 + }, + function (_a) { + var theme = _a.theme + return theme.bg4 + }, + function (_a) { + var theme = _a.theme + return theme.bg4 + } +) +styled(BaseButton)( + templateObject_7$j || + (templateObject_7$j = __makeTemplateObject( + [ + '\n background-color: ', + ';\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:hover {\n background-color: ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:disabled {\n background-color: ', + ';\n opacity: 50%;\n cursor: auto;\n }\n', + ], + [ + '\n background-color: ', + ';\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:hover {\n background-color: ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:disabled {\n background-color: ', + ';\n opacity: 50%;\n cursor: auto;\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.yellow3 + }, + function (_a) { + var theme = _a.theme + return darken(0.05, theme.yellow3) + }, + function (_a) { + var theme = _a.theme + return darken(0.05, theme.yellow3) + }, + function (_a) { + var theme = _a.theme + return darken(0.05, theme.yellow3) + }, + function (_a) { + var theme = _a.theme + return darken(0.1, theme.yellow3) + }, + function (_a) { + var theme = _a.theme + return darken(0.1, theme.yellow3) + }, + function (_a) { + var theme = _a.theme + return theme.yellow3 + } +) +var ButtonEmpty = styled(BaseButton)( + templateObject_8$g || + (templateObject_8$g = __makeTemplateObject( + [ + '\n background-color: transparent;\n color: ', + ';\n display: flex;\n justify-content: center;\n align-items: center;\n\n &:focus {\n text-decoration: underline;\n }\n &:hover {\n text-decoration: none;\n }\n &:active {\n text-decoration: none;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n', + ], + [ + '\n background-color: transparent;\n color: ', + ';\n display: flex;\n justify-content: center;\n align-items: center;\n\n &:focus {\n text-decoration: underline;\n }\n &:hover {\n text-decoration: none;\n }\n &:active {\n text-decoration: none;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.primary1 + } +) +styled(BaseButton)( + templateObject_9$f || + (templateObject_9$f = __makeTemplateObject( + [ + '\n padding: 0;\n width: fit-content;\n background: none;\n text-decoration: none;\n &:focus {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n text-decoration: underline;\n }\n &:hover {\n // text-decoration: underline;\n opacity: 0.9;\n }\n &:active {\n text-decoration: underline;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n', + ], + [ + '\n padding: 0;\n width: fit-content;\n background: none;\n text-decoration: none;\n &:focus {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n text-decoration: underline;\n }\n &:hover {\n // text-decoration: underline;\n opacity: 0.9;\n }\n &:active {\n text-decoration: underline;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n', + ] + )) +) +var ButtonConfirmedStyle = styled(BaseButton)( + templateObject_10$b || + (templateObject_10$b = __makeTemplateObject( + [ + '\n background-color: ', + ';\n color: ', + ';\n /* border: 1px solid ', + '; */\n\n &:disabled {\n opacity: 50%;\n background-color: ', + ';\n color: ', + ';\n cursor: auto;\n }\n', + ], + [ + '\n background-color: ', + ';\n color: ', + ';\n /* border: 1px solid ', + '; */\n\n &:disabled {\n opacity: 50%;\n background-color: ', + ';\n color: ', + ';\n cursor: auto;\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.bg3 + }, + function (_a) { + var theme = _a.theme + return theme.text1 + }, + function (_a) { + var theme = _a.theme + return theme.green1 + }, + function (_a) { + var theme = _a.theme + return theme.bg2 + }, + function (_a) { + var theme = _a.theme + return theme.text2 + } +) +var ButtonErrorStyle = styled(BaseButton)( + templateObject_11$9 || + (templateObject_11$9 = __makeTemplateObject( + [ + '\n background-color: ', + ';\n border: 1px solid ', + ';\n\n &:focus {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:hover {\n background-color: ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n box-shadow: none;\n background-color: ', + ';\n border: 1px solid ', + ';\n }\n', + ], + [ + '\n background-color: ', + ';\n border: 1px solid ', + ';\n\n &:focus {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:hover {\n background-color: ', + ';\n }\n &:active {\n box-shadow: 0 0 0 1pt ', + ';\n background-color: ', + ';\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n box-shadow: none;\n background-color: ', + ';\n border: 1px solid ', + ';\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.red1 + }, + function (_a) { + var theme = _a.theme + return theme.red1 + }, + function (_a) { + var theme = _a.theme + return darken(0.05, theme.red1) + }, + function (_a) { + var theme = _a.theme + return darken(0.05, theme.red1) + }, + function (_a) { + var theme = _a.theme + return darken(0.05, theme.red1) + }, + function (_a) { + var theme = _a.theme + return darken(0.1, theme.red1) + }, + function (_a) { + var theme = _a.theme + return darken(0.1, theme.red1) + }, + function (_a) { + var theme = _a.theme + return theme.red1 + }, + function (_a) { + var theme = _a.theme + return theme.red1 + } +) +function ButtonConfirmed(_a) { + var confirmed = _a.confirmed, + altDisabledStyle = _a.altDisabledStyle, + rest = __rest(_a, ['confirmed', 'altDisabledStyle']) + if (confirmed) { + return jsx(ButtonConfirmedStyle, __assign({}, rest), void 0) + } else { + return jsx(ButtonPrimary, __assign({}, rest, { altDisabledStyle }), void 0) + } +} +function ButtonError(_a) { + var error = _a.error, + rest = __rest(_a, ['error']) + if (error) { + return jsx(ButtonErrorStyle, __assign({}, rest), void 0) + } else { + return jsx(ButtonPrimary, __assign({}, rest), void 0) + } +} +styled(ButtonOutlined)( + templateObject_12$9 || + (templateObject_12$9 = __makeTemplateObject( + ['\n border: 1px solid;\n border-color: ', ';\n'], + ['\n border: 1px solid;\n border-color: ', ';\n'] + )), + function (_a) { + var theme = _a.theme + return theme.primary1 + } +) +styled.div( + templateObject_13$5 || + (templateObject_13$5 = __makeTemplateObject( + [ + '\n height: 17px;\n width: 17px;\n border-radius: 50%;\n background-color: ', + ';\n display: flex;\n align-items: center;\n justify-content: center;\n', + ], + [ + '\n height: 17px;\n width: 17px;\n border-radius: 50%;\n background-color: ', + ';\n display: flex;\n align-items: center;\n justify-content: center;\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.primary1 + } +) +styled.div( + templateObject_14$5 || + (templateObject_14$5 = __makeTemplateObject( + ['\n width: 20px;\n padding: 0 10px;\n position: absolute;\n top: 11px;\n right: 15px;\n'], + ['\n width: 20px;\n padding: 0 10px;\n position: absolute;\n top: 11px;\n right: 15px;\n'] + )) +) +styled(Check)( + templateObject_15$3 || (templateObject_15$3 = __makeTemplateObject(['\n size: 13px;\n'], ['\n size: 13px;\n'])) +) +var templateObject_1$1g, + templateObject_2$W, + templateObject_3$N, + templateObject_4$C, + templateObject_5$t, + templateObject_6$n, + templateObject_7$j, + templateObject_8$g, + templateObject_9$f, + templateObject_10$b, + templateObject_11$9, + templateObject_12$9, + templateObject_13$5, + templateObject_14$5, + templateObject_15$3 + +var isClient = typeof window === 'object' +function getSize() { + return { + width: isClient ? window.innerWidth : undefined, + height: isClient ? window.innerHeight : undefined, + } +} +// https://usehooks.com/useWindowSize/ +function useWindowSize() { + var _a = __read(useState(getSize), 2), + windowSize = _a[0], + setWindowSize = _a[1] + useEffect(function () { + function handleResize() { + setWindowSize(getSize()) + } + if (isClient) { + window.addEventListener('resize', handleResize) + return function () { + window.removeEventListener('resize', handleResize) + } + } + return undefined + }, []) + return windowSize +} -var abi = [ - { - inputs: [ - ], - name: "feeGrowthGlobal0X128", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - ], - name: "feeGrowthGlobal1X128", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - ], - name: "liquidity", - outputs: [ - { - internalType: "uint128", - name: "", - type: "uint128" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "index", - type: "uint256" - } - ], - name: "observations", - outputs: [ - { - internalType: "uint32", - name: "blockTimestamp", - type: "uint32" - }, - { - internalType: "int56", - name: "tickCumulative", - type: "int56" - }, - { - internalType: "uint160", - name: "secondsPerLiquidityCumulativeX128", - type: "uint160" - }, - { - internalType: "bool", - name: "initialized", - type: "bool" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "bytes32", - name: "key", - type: "bytes32" - } - ], - name: "positions", - outputs: [ - { - internalType: "uint128", - name: "_liquidity", - type: "uint128" - }, - { - internalType: "uint256", - name: "feeGrowthInside0LastX128", - type: "uint256" - }, - { - internalType: "uint256", - name: "feeGrowthInside1LastX128", - type: "uint256" - }, - { - internalType: "uint128", - name: "tokensOwed0", - type: "uint128" - }, - { - internalType: "uint128", - name: "tokensOwed1", - type: "uint128" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - ], - name: "protocolFees", - outputs: [ - { - internalType: "uint128", - name: "token0", - type: "uint128" - }, - { - internalType: "uint128", - name: "token1", - type: "uint128" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - ], - name: "slot0", - outputs: [ - { - internalType: "uint160", - name: "sqrtPriceX96", - type: "uint160" - }, - { - internalType: "int24", - name: "tick", - type: "int24" - }, - { - internalType: "uint16", - name: "observationIndex", - type: "uint16" - }, - { - internalType: "uint16", - name: "observationCardinality", - type: "uint16" - }, - { - internalType: "uint16", - name: "observationCardinalityNext", - type: "uint16" - }, - { - internalType: "uint8", - name: "feeProtocol", - type: "uint8" - }, - { - internalType: "bool", - name: "unlocked", - type: "bool" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "int16", - name: "wordPosition", - type: "int16" - } - ], - name: "tickBitmap", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "int24", - name: "tick", - type: "int24" - } - ], - name: "ticks", - outputs: [ - { - internalType: "uint128", - name: "liquidityGross", - type: "uint128" - }, - { - internalType: "int128", - name: "liquidityNet", - type: "int128" - }, - { - internalType: "uint256", - name: "feeGrowthOutside0X128", - type: "uint256" - }, - { - internalType: "uint256", - name: "feeGrowthOutside1X128", - type: "uint256" - }, - { - internalType: "int56", - name: "tickCumulativeOutside", - type: "int56" - }, - { - internalType: "uint160", - name: "secondsPerLiquidityOutsideX128", - type: "uint160" - }, - { - internalType: "uint32", - name: "secondsOutside", - type: "uint32" - }, - { - internalType: "bool", - name: "initialized", - type: "bool" - } - ], - stateMutability: "view", - type: "function" - } -]; +// eslint-disable-next-line react/prop-types +function Confetti(_a) { + var start = _a.start, + variant = _a.variant + var _b = useWindowSize(), + width = _b.width, + height = _b.height + var _variant = variant ? variant : height && width && height > 1.5 * width ? 'bottom' : variant + return start && width && height + ? jsx( + ReactConfetti, + { + style: { zIndex: 1401 }, + numberOfPieces: 400, + recycle: false, + run: true, + width, + height, + confettiSource: { + h: height, + w: width, + x: 0, + y: _variant === 'top' ? height * 0.25 : _variant === 'bottom' ? height * 0.75 : height * 0.5, + }, + initialVelocityX: 15, + initialVelocityY: 30, + gravity: 0.45, + tweenDuration: 100, + wind: 0.05, + }, + void 0 + ) + : null +} -var POOL_STATE_INTERFACE = new Interface(abi); -var PoolState; -(function (PoolState) { - PoolState[PoolState["LOADING"] = 0] = "LOADING"; - PoolState[PoolState["NOT_EXISTS"] = 1] = "NOT_EXISTS"; - PoolState[PoolState["EXISTS"] = 2] = "EXISTS"; - PoolState[PoolState["INVALID"] = 3] = "INVALID"; -})(PoolState || (PoolState = {})); -function usePools(poolKeys) { - var chainId = useActiveWeb3React().chainId; - var transformed = useMemo(function () { - return poolKeys.map(function (_a) { - var _b = __read(_a, 3), currencyA = _b[0], currencyB = _b[1], feeAmount = _b[2]; - if (!chainId || !currencyA || !currencyB || !feeAmount) - return null; - var tokenA = currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped; - var tokenB = currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped; - if (!tokenA || !tokenB || tokenA.equals(tokenB)) - return null; - var _c = __read(tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA], 2), token0 = _c[0], token1 = _c[1]; - return [token0, token1, feeAmount]; - }); - }, [chainId, poolKeys]); - var poolAddresses = useMemo(function () { - var v3CoreFactoryAddress = chainId && V3_CORE_FACTORY_ADDRESSES[chainId]; - return transformed.map(function (value) { - if (!v3CoreFactoryAddress || !value) - return undefined; - return computePoolAddress({ - factoryAddress: v3CoreFactoryAddress, - tokenA: value[0], - tokenB: value[1], - fee: value[2], - }); - }); - }, [chainId, transformed]); - var slot0s = useMultipleContractSingleData(poolAddresses, POOL_STATE_INTERFACE, 'slot0'); - var liquidities = useMultipleContractSingleData(poolAddresses, POOL_STATE_INTERFACE, 'liquidity'); - return useMemo(function () { - return poolKeys.map(function (_key, index) { - var _a; - var _b = __read((_a = transformed[index]) !== null && _a !== void 0 ? _a : [], 3), token0 = _b[0], token1 = _b[1], fee = _b[2]; - if (!token0 || !token1 || !fee) - return [PoolState.INVALID, null]; - var _c = slot0s[index], slot0 = _c.result, slot0Loading = _c.loading, slot0Valid = _c.valid; - var _d = liquidities[index], liquidity = _d.result, liquidityLoading = _d.loading, liquidityValid = _d.valid; - if (!slot0Valid || !liquidityValid) - return [PoolState.INVALID, null]; - if (slot0Loading || liquidityLoading) - return [PoolState.LOADING, null]; - if (!slot0 || !liquidity) - return [PoolState.NOT_EXISTS, null]; - if (!slot0.sqrtPriceX96 || slot0.sqrtPriceX96.eq(0)) - return [PoolState.NOT_EXISTS, null]; - try { - return [PoolState.EXISTS, new Pool$1(token0, token1, fee, slot0.sqrtPriceX96, liquidity[0], slot0.tick)]; - } - catch (error) { - console.error('Error when constructing the pool', error); - return [PoolState.NOT_EXISTS, null]; - } - }); - }, [liquidities, poolKeys, slot0s, transformed]); +var uImage = '10f062d02df4af77.png' + +var noise = 'f158a440053a5ad2.png' + +var xlUnicorn = 'c2cd04251aa24c34.png' + +var DataCard = styled(AutoColumn)( + templateObject_1$1f || + (templateObject_1$1f = __makeTemplateObject( + [ + '\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #2172e5 100%);\n border-radius: 12px;\n width: 100%;\n position: relative;\n overflow: hidden;\n', + ], + [ + '\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #2172e5 100%);\n border-radius: 12px;\n width: 100%;\n position: relative;\n overflow: hidden;\n', + ] + )) +) +var CardBGImage = styled.span( + templateObject_2$V || + (templateObject_2$V = __makeTemplateObject( + [ + '\n background: url(', + ');\n width: 1000px;\n height: 600px;\n position: absolute;\n border-radius: 12px;\n opacity: 0.4;\n top: -100px;\n left: -100px;\n transform: rotate(-15deg);\n user-select: none;\n ', + '\n', + ], + [ + '\n background: url(', + ');\n width: 1000px;\n height: 600px;\n position: absolute;\n border-radius: 12px;\n opacity: 0.4;\n top: -100px;\n left: -100px;\n transform: rotate(-15deg);\n user-select: none;\n ', + '\n', + ] + )), + uImage, + function (_a) { + var desaturate = _a.desaturate + return desaturate && 'filter: saturate(0)' + } +) +var CardBGImageSmaller = styled.span( + templateObject_3$M || + (templateObject_3$M = __makeTemplateObject( + [ + '\n background: url(', + ');\n width: 1200px;\n height: 1200px;\n position: absolute;\n border-radius: 12px;\n top: -300px;\n left: -300px;\n opacity: 0.4;\n user-select: none;\n\n ', + '\n', + ], + [ + '\n background: url(', + ');\n width: 1200px;\n height: 1200px;\n position: absolute;\n border-radius: 12px;\n top: -300px;\n left: -300px;\n opacity: 0.4;\n user-select: none;\n\n ', + '\n', + ] + )), + xlUnicorn, + function (_a) { + var desaturate = _a.desaturate + return desaturate && 'filter: saturate(0)' + } +) +var CardNoise = styled.span( + templateObject_4$B || + (templateObject_4$B = __makeTemplateObject( + [ + '\n background: url(', + ');\n background-size: cover;\n mix-blend-mode: overlay;\n border-radius: 12px;\n width: 100%;\n height: 100%;\n opacity: 0.15;\n position: absolute;\n top: 0;\n left: 0;\n user-select: none;\n', + ], + [ + '\n background: url(', + ');\n background-size: cover;\n mix-blend-mode: overlay;\n border-radius: 12px;\n width: 100%;\n height: 100%;\n opacity: 0.15;\n position: absolute;\n top: 0;\n left: 0;\n user-select: none;\n', + ] + )), + noise +) +var CardSection = styled(AutoColumn)( + templateObject_5$s || + (templateObject_5$s = __makeTemplateObject( + ['\n padding: 1rem;\n z-index: 1;\n opacity: ', ';\n'], + ['\n padding: 1rem;\n z-index: 1;\n opacity: ', ';\n'] + )), + function (_a) { + var disabled = _a.disabled + return disabled && '0.4' + } +) +var Break$1 = styled.div( + templateObject_6$m || + (templateObject_6$m = __makeTemplateObject( + ['\n width: 100%;\n background-color: rgba(255, 255, 255, 0.2);\n height: 1px;\n'], + ['\n width: 100%;\n background-color: rgba(255, 255, 255, 0.2);\n height: 1px;\n'] + )) +) +var templateObject_1$1f, + templateObject_2$V, + templateObject_3$M, + templateObject_4$B, + templateObject_5$s, + templateObject_6$m + +var parser = new UAParser(window.navigator.userAgent) +var type$1 = parser.getDevice().type +var userAgent = parser.getResult() +var isMobile = type$1 === 'mobile' || type$1 === 'tablet' + +var AnimatedDialogOverlay = animated(DialogOverlay) +// eslint-disable-next-line @typescript-eslint/no-unused-vars +var StyledDialogOverlay = styled(AnimatedDialogOverlay)( + templateObject_1$1e || + (templateObject_1$1e = __makeTemplateObject( + [ + '\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: ', + ';\n }\n', + ], + [ + '\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: ', + ';\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.modalBG + } +) +var AnimatedDialogContent = animated(DialogContent) +// destructure to not pass custom props to Dialog DOM element +// eslint-disable-next-line @typescript-eslint/no-unused-vars +var StyledDialogContent = styled(function (_a) { + _a.minHeight + _a.maxHeight + _a.mobile + _a.isOpen + var rest = __rest(_a, ['minHeight', 'maxHeight', 'mobile', 'isOpen']) + return jsx(AnimatedDialogContent, __assign({}, rest), void 0) +}).attrs({ + 'aria-label': 'dialog', +})( + templateObject_7$i || + (templateObject_7$i = __makeTemplateObject( + [ + '\n overflow-y: auto;\n\n &[data-reach-dialog-content] {\n margin: 0 0 2rem 0;\n background-color: ', + ';\n border: 1px solid ', + ';\n box-shadow: 0 4px 8px 0 ', + ';\n padding: 0px;\n width: 50vw;\n overflow-y: auto;\n overflow-x: hidden;\n\n align-self: ', + ';\n\n max-width: 420px;\n ', + '\n ', + '\n display: flex;\n border-radius: 20px;\n ', + '\n ', + '\n }\n', + ], + [ + '\n overflow-y: auto;\n\n &[data-reach-dialog-content] {\n margin: 0 0 2rem 0;\n background-color: ', + ';\n border: 1px solid ', + ';\n box-shadow: 0 4px 8px 0 ', + ';\n padding: 0px;\n width: 50vw;\n overflow-y: auto;\n overflow-x: hidden;\n\n align-self: ', + ';\n\n max-width: 420px;\n ', + '\n ', + '\n display: flex;\n border-radius: 20px;\n ', + '\n ', + '\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.bg0 + }, + function (_a) { + var theme = _a.theme + return theme.bg1 + }, + function (_a) { + var theme = _a.theme + return transparentize(0.95, theme.shadow1) + }, + function (_a) { + var mobile = _a.mobile + return mobile ? 'flex-end' : 'center' + }, + function (_a) { + var maxHeight = _a.maxHeight + return ( + maxHeight && + css( + templateObject_2$U || + (templateObject_2$U = __makeTemplateObject( + ['\n max-height: ', 'vh;\n '], + ['\n max-height: ', 'vh;\n '] + )), + maxHeight + ) + ) + }, + function (_a) { + var minHeight = _a.minHeight + return ( + minHeight && + css( + templateObject_3$L || + (templateObject_3$L = __makeTemplateObject( + ['\n min-height: ', 'vh;\n '], + ['\n min-height: ', 'vh;\n '] + )), + minHeight + ) + ) + }, + function (_a) { + var theme = _a.theme + return theme.mediaWidth.upToMedium( + templateObject_4$A || + (templateObject_4$A = __makeTemplateObject( + ['\n width: 65vw;\n margin: 0;\n '], + ['\n width: 65vw;\n margin: 0;\n '] + )) + ) + }, + function (_a) { + var theme = _a.theme, + mobile = _a.mobile + return theme.mediaWidth.upToSmall( + templateObject_6$l || + (templateObject_6$l = __makeTemplateObject( + ['\n width: 85vw;\n ', '\n '], + ['\n width: 85vw;\n ', '\n '] + )), + mobile && + css( + templateObject_5$r || + (templateObject_5$r = __makeTemplateObject( + [ + '\n width: 100vw;\n border-radius: 20px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n ', + ], + [ + '\n width: 100vw;\n border-radius: 20px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n ', + ] + )) + ) + ) + } +) +function Modal(_a) { + var isOpen = _a.isOpen, + onDismiss = _a.onDismiss, + _b = _a.minHeight, + minHeight = _b === void 0 ? false : _b, + _c = _a.maxHeight, + maxHeight = _c === void 0 ? 90 : _c, + initialFocusRef = _a.initialFocusRef, + children = _a.children + var fadeTransition = useTransition(isOpen, null, { + config: { duration: 200 }, + from: { opacity: 0 }, + enter: { opacity: 1 }, + leave: { opacity: 0 }, + }) + var _d = __read( + useSpring(function () { + return { y: 0, config: { mass: 1, tension: 210, friction: 20 } } + }), + 2 + ), + y = _d[0].y, + set = _d[1] + var bind = useGesture({ + onDrag(state) { + set({ + y: state.down ? state.movement[1] : 0, + }) + if (state.movement[1] > 300 || (state.velocity > 3 && state.direction[1] > 0)) { + onDismiss() + } + }, + }) + return jsx( + Fragment, + { + children: fadeTransition.map(function (_a) { + var item = _a.item, + key = _a.key, + props = _a.props + return ( + item && + jsx( + StyledDialogOverlay, + __assign( + { + style: props, + onDismiss, + initialFocusRef, + unstable_lockFocusAcrossFrames: false, + }, + { + children: jsxs( + StyledDialogContent, + __assign( + {}, + isMobile + ? __assign(__assign({}, bind()), { + style: { + transform: y.interpolate(function (y) { + return 'translateY(' + (y > 0 ? y : 0) + 'px)' + }), + }, + }) + : {}, + { 'aria-label': 'dialog content', minHeight, maxHeight, mobile: isMobile }, + { children: [!initialFocusRef && isMobile ? jsx('div', { tabIndex: 1 }, void 0) : null, children] } + ), + void 0 + ), + } + ), + key + ) + ) + }), + }, + void 0 + ) } - -/** - * Returns all the existing pools that should be considered for swapping between an input currency and an output currency - * @param currencyIn the input currency - * @param currencyOut the output currency - */ -function useV3SwapPools(currencyIn, currencyOut) { - var chainId = useActiveWeb3React().chainId; - var allCurrencyCombinations = useAllCurrencyCombinations(currencyIn, currencyOut); - var allCurrencyCombinationsWithAllFees = useMemo(function () { - return allCurrencyCombinations.reduce(function (list, _a) { - var _b = __read(_a, 2), tokenA = _b[0], tokenB = _b[1]; - return chainId === SupportedChainId.MAINNET - ? list.concat([ - [tokenA, tokenB, FeeAmount.LOW], - [tokenA, tokenB, FeeAmount.MEDIUM], - [tokenA, tokenB, FeeAmount.HIGH], - ]) - : list.concat([ - [tokenA, tokenB, FeeAmount.LOWEST], - [tokenA, tokenB, FeeAmount.LOW], - [tokenA, tokenB, FeeAmount.MEDIUM], - [tokenA, tokenB, FeeAmount.HIGH], - ]); - }, []); - }, [allCurrencyCombinations, chainId]); - var pools = usePools(allCurrencyCombinationsWithAllFees); - return useMemo(function () { - return { - pools: pools - .filter(function (tuple) { - return tuple[0] === PoolState.EXISTS && tuple[1] !== null; - }) - .map(function (_a) { - var _b = __read(_a, 2), pool = _b[1]; - return pool; - }), - loading: pools.some(function (_a) { - var _b = __read(_a, 1), state = _b[0]; - return state === PoolState.LOADING; - }), - }; - }, [pools]); +var templateObject_1$1e, + templateObject_2$U, + templateObject_3$L, + templateObject_4$A, + templateObject_5$r, + templateObject_6$l, + templateObject_7$i + +var ContentWrapper$4 = styled(AutoColumn)( + templateObject_1$1d || (templateObject_1$1d = __makeTemplateObject(['\n width: 100%;\n'], ['\n width: 100%;\n'])) +) +var ModalUpper$1 = styled(DataCard)( + templateObject_2$T || + (templateObject_2$T = __makeTemplateObject( + [ + '\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n', + ], + [ + '\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n', + ] + )) +) +var ConfirmOrLoadingWrapper$1 = styled.div( + templateObject_3$K || + (templateObject_3$K = __makeTemplateObject( + ['\n width: 100%;\n padding: 24px;\n position: relative;\n background: ', ';\n'], + ['\n width: 100%;\n padding: 24px;\n position: relative;\n background: ', ';\n'] + )), + function (_a) { + var activeBG = _a.activeBG + return ( + activeBG && + 'radial-gradient(76.02% 75.41% at 1.84% 0%, rgba(255, 0, 122, 0.2) 0%, rgba(33, 114, 229, 0.2) 100%), #FFFFFF;' + ) + } +) +var ConfirmedIcon$2 = styled(ColumnCenter)( + templateObject_4$z || + (templateObject_4$z = __makeTemplateObject(['\n padding: 60px 0;\n'], ['\n padding: 60px 0;\n'])) +) +function AddressClaimModal(_a) { + var _b, _c + var isOpen = _a.isOpen, + onDismiss = _a.onDismiss + var chainId = useActiveWeb3React().chainId + // state for smart contract input + var _d = __read(useState(''), 2), + typed = _d[0], + setTyped = _d[1] + function handleRecipientType(val) { + setTyped(val) + } + // monitor for third party recipient of claim + var parsedAddress = useENS(typed).address + // used for UI loading states + var _e = __read(useState(false), 2), + attempting = _e[0], + setAttempting = _e[1] + // monitor the status of the claim from contracts and txns + var claimCallback = useClaimCallback(parsedAddress).claimCallback + var unclaimedAmount = useUserUnclaimedAmount(parsedAddress) + // check if the user has something available + var hasAvailableClaim = useUserHasAvailableClaim(parsedAddress) + var _f = __read(useState(), 2), + hash = _f[0], + setHash = _f[1] + // monitor the status of the claim from contracts and txns + var claimPending = useIsTransactionPending(hash !== null && hash !== void 0 ? hash : '') + var claimConfirmed = hash && !claimPending + // use the hash to monitor this txn + function onClaim() { + setAttempting(true) + claimCallback() + .then(function (hash) { + setHash(hash) + }) + // reset modal and log error + .catch(function (error) { + setAttempting(false) + console.log(error) + }) + } + function wrappedOnDismiss() { + setAttempting(false) + setHash(undefined) + setTyped('') + onDismiss() + } + return jsxs( + Modal, + __assign( + { isOpen, onDismiss: wrappedOnDismiss, maxHeight: 90 }, + { + children: [ + jsx(Confetti, { start: Boolean(isOpen && claimConfirmed && attempting) }, void 0), + !attempting && + jsxs( + ContentWrapper$4, + __assign( + { gap: 'lg' }, + { + children: [ + jsxs( + ModalUpper$1, + { + children: [ + jsx(CardBGImage, {}, void 0), + jsx(CardNoise, {}, void 0), + jsxs( + CardSection, + __assign( + { gap: 'md' }, + { + children: [ + jsxs( + RowBetween, + { + children: [ + jsx( + ThemedText.White, + __assign( + { fontWeight: 500 }, + { children: jsx(Trans, { children: 'Claim UNI Token' }, void 0) } + ), + void 0 + ), + jsx( + CloseIcon$2, + { onClick: wrappedOnDismiss, style: { zIndex: 99 }, stroke: 'white' }, + void 0 + ), + ], + }, + void 0 + ), + jsx( + ThemedText.White, + __assign( + { fontWeight: 700, fontSize: 36 }, + { + children: jsxs( + Trans, + { + children: [ + unclaimedAmount === null || unclaimedAmount === void 0 + ? void 0 + : unclaimedAmount.toFixed( + 0, + (_b = { groupSeparator: ',' }) !== null && _b !== void 0 ? _b : '-' + ), + ' UNI', + ], + }, + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + jsx(Break$1, {}, void 0), + ], + }, + void 0 + ), + jsxs( + AutoColumn, + __assign( + { gap: 'md', style: { padding: '1rem', paddingTop: '0' }, justify: 'center' }, + { + children: [ + jsx( + ThemedText.SubHeader, + __assign( + { fontWeight: 500 }, + { + children: jsx( + Trans, + { + children: + 'Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.', + }, + void 0 + ), + } + ), + void 0 + ), + jsx(AddressInputPanel, { value: typed, onChange: handleRecipientType }, void 0), + parsedAddress && + !hasAvailableClaim && + jsx( + ThemedText.Error, + __assign( + { error: true }, + { children: jsx(Trans, { children: 'Address has no available claim' }, void 0) } + ), + void 0 + ), + jsx( + ButtonPrimary, + __assign( + { + disabled: + !isAddress$1( + parsedAddress !== null && parsedAddress !== void 0 ? parsedAddress : '' + ) || !hasAvailableClaim, + padding: '16px 16px', + width: '100%', + $borderRadius: '12px', + mt: '1rem', + onClick: onClaim, + }, + { children: jsx(Trans, { children: 'Claim UNI' }, void 0) } + ), + void 0 + ), + ], + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + (attempting || claimConfirmed) && + jsxs( + ConfirmOrLoadingWrapper$1, + __assign( + { activeBG: true }, + { + children: [ + jsx(CardNoise, {}, void 0), + jsx(CardBGImageSmaller, { desaturate: true }, void 0), + jsxs( + RowBetween, + { + children: [ + jsx('div', {}, void 0), + jsx( + CloseIcon$2, + { onClick: wrappedOnDismiss, style: { zIndex: 99 }, stroke: 'black' }, + void 0 + ), + ], + }, + void 0 + ), + jsx( + ConfirmedIcon$2, + { + children: !claimConfirmed + ? jsx(CustomLightSpinner, { src: Circle$1, alt: 'loader', size: '90px' }, void 0) + : jsx(UniTokenAnimated, { width: '72px', src: tokenLogo, alt: 'UNI logo' }, void 0), + }, + void 0 + ), + jsxs( + AutoColumn, + __assign( + { gap: '100px', justify: 'center' }, + { + children: [ + jsxs( + AutoColumn, + __assign( + { gap: '12px', justify: 'center' }, + { + children: [ + jsx( + ThemedText.LargeHeader, + __assign( + { fontWeight: 600, color: 'black' }, + { + children: claimConfirmed + ? jsx(Trans, { children: 'Claimed' }, void 0) + : jsx(Trans, { children: 'Claiming' }, void 0), + } + ), + void 0 + ), + !claimConfirmed && + jsx( + Text$1, + __assign( + { fontSize: 36, color: '#ff007a', fontWeight: 800 }, + { + children: jsxs( + Trans, + { + children: [ + unclaimedAmount === null || unclaimedAmount === void 0 + ? void 0 + : unclaimedAmount.toFixed( + 0, + (_c = { groupSeparator: ',' }) !== null && _c !== void 0 + ? _c + : '-' + ), + ' UNI', + ], + }, + void 0 + ), + } + ), + void 0 + ), + parsedAddress && + jsx( + ThemedText.LargeHeader, + __assign( + { fontWeight: 600, color: 'black' }, + { + children: jsxs( + Trans, + { children: ['for ', shortenAddress(parsedAddress)] }, + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + claimConfirmed && + jsx( + Fragment, + { + children: jsxs( + ThemedText.SubHeader, + __assign( + { fontWeight: 500, color: 'black' }, + { + children: [ + jsxs( + 'span', + __assign( + { role: 'img', 'aria-label': 'party-hat' }, + { children: ['\uD83C\uDF89', ' '] } + ), + void 0 + ), + jsx(Trans, { children: 'Welcome to team Unicorn :) ' }, void 0), + jsx( + 'span', + __assign( + { role: 'img', 'aria-label': 'party-hat' }, + { children: '\uD83C\uDF89' } + ), + void 0 + ), + ], + } + ), + void 0 + ), + }, + void 0 + ), + attempting && + !hash && + jsx( + ThemedText.SubHeader, + __assign( + { color: 'black' }, + { + children: jsx( + Trans, + { children: 'Confirm this transaction in your wallet' }, + void 0 + ), + } + ), + void 0 + ), + attempting && + hash && + !claimConfirmed && + chainId && + hash && + jsx( + ExternalLink, + __assign( + { + href: getExplorerLink(chainId, hash, ExplorerDataType.TRANSACTION), + style: { zIndex: 99 }, + }, + { children: jsx(Trans, { children: 'View transaction on Explorer' }, void 0) } + ), + void 0 + ), + ], + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + ], + } + ), + void 0 + ) +} +var templateObject_1$1d, templateObject_2$T, templateObject_3$K, templateObject_4$z + +var _a$a +var ApplicationModal +;(function (ApplicationModal) { + ApplicationModal[(ApplicationModal['WALLET'] = 0)] = 'WALLET' + ApplicationModal[(ApplicationModal['SETTINGS'] = 1)] = 'SETTINGS' + ApplicationModal[(ApplicationModal['SELF_CLAIM'] = 2)] = 'SELF_CLAIM' + ApplicationModal[(ApplicationModal['ADDRESS_CLAIM'] = 3)] = 'ADDRESS_CLAIM' + ApplicationModal[(ApplicationModal['CLAIM_POPUP'] = 4)] = 'CLAIM_POPUP' + ApplicationModal[(ApplicationModal['MENU'] = 5)] = 'MENU' + ApplicationModal[(ApplicationModal['DELEGATE'] = 6)] = 'DELEGATE' + ApplicationModal[(ApplicationModal['VOTE'] = 7)] = 'VOTE' + ApplicationModal[(ApplicationModal['POOL_OVERVIEW_OPTIONS'] = 8)] = 'POOL_OVERVIEW_OPTIONS' + ApplicationModal[(ApplicationModal['NETWORK_SELECTOR'] = 9)] = 'NETWORK_SELECTOR' + ApplicationModal[(ApplicationModal['PRIVACY_POLICY'] = 10)] = 'PRIVACY_POLICY' +})(ApplicationModal || (ApplicationModal = {})) +var initialState$8 = { + chainId: null, + openModal: null, + popupList: [], } +var applicationSlice = createSlice({ + name: 'application', + initialState: initialState$8, + reducers: { + updateChainId(state, action) { + var chainId = action.payload.chainId + state.chainId = chainId + }, + setOpenModal(state, action) { + state.openModal = action.payload + }, + addPopup(state, _a) { + var _b = _a.payload, + content = _b.content, + key = _b.key, + _c = _b.removeAfterMs, + removeAfterMs = _c === void 0 ? DEFAULT_TXN_DISMISS_MS : _c + state.popupList = ( + key + ? state.popupList.filter(function (popup) { + return popup.key !== key + }) + : state.popupList + ).concat([ + { + key: key || nanoid(), + show: true, + content, + removeAfterMs, + }, + ]) + }, + removePopup(state, _a) { + var key = _a.payload.key + state.popupList.forEach(function (p) { + if (p.key === key) { + p.show = false + } + }) + }, + }, +}) +var updateChainId = ((_a$a = applicationSlice.actions), _a$a.updateChainId), + setOpenModal = _a$a.setOpenModal, + addPopup = _a$a.addPopup, + removePopup = _a$a.removePopup +var application = applicationSlice.reducer + +var Field$3 +;(function (Field) { + Field['LIQUIDITY_PERCENT'] = 'LIQUIDITY_PERCENT' + Field['LIQUIDITY'] = 'LIQUIDITY' + Field['CURRENCY_A'] = 'CURRENCY_A' + Field['CURRENCY_B'] = 'CURRENCY_B' +})(Field$3 || (Field$3 = {})) +var typeInput$3 = createAction('burn/typeInputBurn') + +var initialState$7 = { + independentField: Field$3.LIQUIDITY_PERCENT, + typedValue: '0', +} +var burn = createReducer(initialState$7, function (builder) { + return builder.addCase(typeInput$3, function (state, _a) { + var _b = _a.payload, + field = _b.field, + typedValue = _b.typedValue + return __assign(__assign({}, state), { independentField: field, typedValue }) + }) +}) + +var selectPercent = createAction('burnV3/selectBurnPercent') + +var initialState$6 = { + percent: 0, +} +var burnV3 = createReducer(initialState$6, function (builder) { + return builder.addCase(selectPercent, function (state, _a) { + var percent = _a.payload.percent + return __assign(__assign({}, state), { percent }) + }) +}) + +var _a$9 +// List of supported subgraphs. Note that the app currently only support one active subgraph at a time +var CHAIN_SUBGRAPH_URL = + ((_a$9 = {}), + (_a$9[SupportedChainId.MAINNET] = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3'), + (_a$9[SupportedChainId.RINKEBY] = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3'), + (_a$9[SupportedChainId.ARBITRUM_ONE] = 'https://api.thegraph.com/subgraphs/name/ianlapham/arbitrum-minimal'), + (_a$9[SupportedChainId.OPTIMISM] = 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-optimism-dev'), + (_a$9[SupportedChainId.POLYGON] = 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-v3-polygon'), + _a$9) +var api$1 = createApi({ + reducerPath: 'dataApi', + baseQuery: graphqlRequestBaseQuery(), + endpoints(builder) { + return { + allV3Ticks: builder.query({ + query(_a) { + var poolAddress = _a.poolAddress, + _b = _a.skip, + skip = _b === void 0 ? 0 : _b + return { + document: gql( + templateObject_1$1c || + (templateObject_1$1c = __makeTemplateObject( + [ + '\n query allV3Ticks($poolAddress: String!, $skip: Int!) {\n ticks(first: 1000, skip: $skip, where: { poolAddress: $poolAddress }, orderBy: tickIdx) {\n tick: tickIdx\n liquidityNet\n price0\n price1\n }\n }\n ', + ], + [ + '\n query allV3Ticks($poolAddress: String!, $skip: Int!) {\n ticks(first: 1000, skip: $skip, where: { poolAddress: $poolAddress }, orderBy: tickIdx) {\n tick: tickIdx\n liquidityNet\n price0\n price1\n }\n }\n ', + ] + )) + ), + variables: { + poolAddress, + skip, + }, + } + }, + }), + feeTierDistribution: builder.query({ + query(_a) { + var token0 = _a.token0, + token1 = _a.token1 + return { + document: gql( + templateObject_2$S || + (templateObject_2$S = __makeTemplateObject( + [ + '\n query feeTierDistribution($token0: String!, $token1: String!) {\n _meta {\n block {\n number\n }\n }\n asToken0: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token0, token1: $token1 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n asToken1: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token1, token1: $token0 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n }\n ', + ], + [ + '\n query feeTierDistribution($token0: String!, $token1: String!) {\n _meta {\n block {\n number\n }\n }\n asToken0: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token0, token1: $token1 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n asToken1: pools(\n orderBy: totalValueLockedToken0\n orderDirection: desc\n where: { token0: $token1, token1: $token0 }\n ) {\n feeTier\n totalValueLockedToken0\n totalValueLockedToken1\n }\n }\n ', + ] + )) + ), + variables: { + token0, + token1, + }, + } + }, + }), + } + }, +}) +// Graphql query client wrapper that builds a dynamic url based on chain id +function graphqlRequestBaseQuery() { + var _this = this + return function (_a, _b) { + var document = _a.document, + variables = _a.variables + var getState = _b.getState + return __awaiter(_this, void 0, void 0, function () { + var chainId, subgraphUrl, error_1, name_1, message, stack, request, response + var _c + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + chainId = getState().application.chainId + subgraphUrl = chainId ? CHAIN_SUBGRAPH_URL[chainId] : undefined + if (!subgraphUrl) { + return [ + 2 /*return*/, + { + error: { + name: 'UnsupportedChainId', + message: 'Subgraph queries against ChainId ' + chainId + ' are not supported.', + stack: '', + }, + }, + ] + } + _c = {} + return [4 /*yield*/, new GraphQLClient(subgraphUrl).request(document, variables)] + case 1: + return [2 /*return*/, ((_c.data = _d.sent()), (_c.meta = {}), _c)] + case 2: + error_1 = _d.sent() + if (error_1 instanceof ClientError) { + ;(name_1 = error_1.name), + (message = error_1.message), + (stack = error_1.stack), + (request = error_1.request), + (response = error_1.response) + return [ + 2 /*return*/, + { + error: { name: name_1, message, stack }, + meta: { request, response }, + }, + ] + } + throw error_1 + case 3: + return [2 /*return*/] + } + }) + }) + } +} +var templateObject_1$1c, templateObject_2$S -/** - * Returns true if poolA is equivalent to poolB - * @param poolA one of the two pools - * @param poolB the other pool - */ -function poolEquals(poolA, poolB) { - return (poolA === poolB || - (poolA.token0.equals(poolB.token0) && poolA.token1.equals(poolB.token1) && poolA.fee === poolB.fee)); -} -function computeAllRoutes(currencyIn, currencyOut, pools, chainId, currentPath, allPaths, startCurrencyIn, maxHops) { - var e_1, _a; - if (currentPath === void 0) { currentPath = []; } - if (allPaths === void 0) { allPaths = []; } - if (startCurrencyIn === void 0) { startCurrencyIn = currencyIn; } - if (maxHops === void 0) { maxHops = 2; } - var tokenIn = currencyIn === null || currencyIn === void 0 ? void 0 : currencyIn.wrapped; - var tokenOut = currencyOut === null || currencyOut === void 0 ? void 0 : currencyOut.wrapped; - if (!tokenIn || !tokenOut) - throw new Error('Missing tokenIn/tokenOut'); - var _loop_1 = function (pool) { - if (!pool.involvesToken(tokenIn) || currentPath.find(function (pathPool) { return poolEquals(pool, pathPool); })) - return "continue"; - var outputToken = pool.token0.equals(tokenIn) ? pool.token1 : pool.token0; - if (outputToken.equals(tokenOut)) { - allPaths.push(new Route$1(__spreadArray(__spreadArray([], __read(currentPath), false), [pool], false), startCurrencyIn, currencyOut)); - } - else if (maxHops > 1) { - computeAllRoutes(outputToken, currencyOut, pools, chainId, __spreadArray(__spreadArray([], __read(currentPath), false), [pool], false), allPaths, startCurrencyIn, maxHops - 1); - } - }; - try { - for (var pools_1 = __values(pools), pools_1_1 = pools_1.next(); !pools_1_1.done; pools_1_1 = pools_1.next()) { - var pool = pools_1_1.value; - _loop_1(pool); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (pools_1_1 && !pools_1_1.done && (_a = pools_1.return)) _a.call(pools_1); - } - finally { if (e_1) throw e_1.error; } - } - return allPaths; -} -/** - * Returns all the routes from an input currency to an output currency - * @param currencyIn the input currency - * @param currencyOut the output currency - */ -function useAllV3Routes(currencyIn, currencyOut) { - var chainId = useActiveWeb3React().chainId; - var _a = useV3SwapPools(currencyIn, currencyOut), pools = _a.pools, poolsLoading = _a.loading; - return useMemo(function () { - if (poolsLoading || !chainId || !pools || !currencyIn || !currencyOut) - return { loading: true, routes: [] }; - var routes = computeAllRoutes(currencyIn, currencyOut, pools, chainId, [], [], currencyIn, 2); - return { loading: false, routes: routes }; - }, [chainId, currencyIn, currencyOut, pools, poolsLoading]); -} - -var _a$7; -var QUOTE_GAS_OVERRIDES = (_a$7 = {}, - _a$7[SupportedChainId.ARBITRUM_ONE] = 25000000, - _a$7[SupportedChainId.ARBITRUM_RINKEBY] = 25000000, - _a$7); -var DEFAULT_GAS_QUOTE = 2000000; -/** - * Returns the best v3 trade for a desired swap - * @param tradeType whether the swap is an exact in/out - * @param amountSpecified the exact amount to swap in/out - * @param otherCurrency the desired output/payment currency - */ -function useClientSideV3Trade(tradeType, amountSpecified, otherCurrency) { - var _a; - var _b = __read(useMemo(function () { - return tradeType === TradeType.EXACT_INPUT - ? [amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, otherCurrency] - : [otherCurrency, amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency]; - }, [tradeType, amountSpecified, otherCurrency]), 2), currencyIn = _b[0], currencyOut = _b[1]; - var _c = useAllV3Routes(currencyIn, currencyOut), routes = _c.routes, routesLoading = _c.loading; - var quoter = useV3Quoter(); - var chainId = useActiveWeb3React().chainId; - var quotesResults = useSingleContractWithCallData(quoter, amountSpecified - ? routes.map(function (route) { return SwapQuoter.quoteCallParameters(route, amountSpecified, tradeType).calldata; }) - : [], { - gasRequired: chainId ? (_a = QUOTE_GAS_OVERRIDES[chainId]) !== null && _a !== void 0 ? _a : DEFAULT_GAS_QUOTE : undefined, - }); - return useMemo(function () { - if (!amountSpecified || - !currencyIn || - !currencyOut || - quotesResults.some(function (_a) { - var valid = _a.valid; - return !valid; - }) || - // skip when tokens are the same - (tradeType === TradeType.EXACT_INPUT - ? amountSpecified.currency.equals(currencyOut) - : amountSpecified.currency.equals(currencyIn))) { - return { - state: TradeState.INVALID, - trade: undefined, - }; - } - if (routesLoading || quotesResults.some(function (_a) { - var loading = _a.loading; - return loading; - })) { - return { - state: TradeState.LOADING, - trade: undefined, - }; - } - var _a = quotesResults.reduce(function (currentBest, _a, i) { - var result = _a.result; - if (!result) - return currentBest; - // overwrite the current best if it's not defined or if this route is better - if (tradeType === TradeType.EXACT_INPUT) { - var amountOut_1 = CurrencyAmount.fromRawAmount(currencyOut, result.amountOut.toString()); - if (currentBest.amountOut === null || JSBI.lessThan(currentBest.amountOut.quotient, amountOut_1.quotient)) { - return { - bestRoute: routes[i], - amountIn: amountSpecified, - amountOut: amountOut_1, - }; - } - } - else { - var amountIn_1 = CurrencyAmount.fromRawAmount(currencyIn, result.amountIn.toString()); - if (currentBest.amountIn === null || JSBI.greaterThan(currentBest.amountIn.quotient, amountIn_1.quotient)) { - return { - bestRoute: routes[i], - amountIn: amountIn_1, - amountOut: amountSpecified, - }; - } - } - return currentBest; - }, { - bestRoute: null, - amountIn: null, - amountOut: null, - }), bestRoute = _a.bestRoute, amountIn = _a.amountIn, amountOut = _a.amountOut; - if (!bestRoute || !amountIn || !amountOut) { - return { - state: TradeState.NO_ROUTE_FOUND, - trade: undefined, - }; - } - return { - state: TradeState.VALID, - trade: new InterfaceTrade({ - v2Routes: [], - v3Routes: [ - { - routev3: bestRoute, - inputAmount: amountIn, - outputAmount: amountOut, - }, - ], - tradeType: tradeType, - }), - }; - }, [amountSpecified, currencyIn, currencyOut, quotesResults, routes, routesLoading, tradeType]); -} - -var _a$6; -// Stablecoin amounts used when calculating spot price for a given currency. -// The amount is large enough to filter low liquidity pairs. -var STABLECOIN_AMOUNT_OUT = (_a$6 = {}, - _a$6[SupportedChainId.MAINNET] = CurrencyAmount.fromRawAmount(USDC, 100000000000), - _a$6[SupportedChainId.ARBITRUM_ONE] = CurrencyAmount.fromRawAmount(USDC_ARBITRUM, 10000000000), - _a$6[SupportedChainId.OPTIMISM] = CurrencyAmount.fromRawAmount(DAI_OPTIMISM, 1e+22), - _a$6[SupportedChainId.POLYGON] = CurrencyAmount.fromRawAmount(USDC_POLYGON, 10000000000), - _a$6); -/** - * Returns the price in USDC of the input currency - * @param currency currency to compute the USDC price of - */ -function useUSDCPrice(currency) { - var chainId = currency === null || currency === void 0 ? void 0 : currency.chainId; - var amountOut = chainId ? STABLECOIN_AMOUNT_OUT[chainId] : undefined; - var stablecoin = amountOut === null || amountOut === void 0 ? void 0 : amountOut.currency; - // TODO(#2808): remove dependency on useBestV2Trade - var v2USDCTrade = useBestV2Trade(TradeType.EXACT_OUTPUT, amountOut, currency, { - maxHops: 2, - }); - var v3USDCTrade = useClientSideV3Trade(TradeType.EXACT_OUTPUT, amountOut, currency); - return useMemo(function () { - if (!currency || !stablecoin) { - return undefined; - } - // handle usdc - if (currency === null || currency === void 0 ? void 0 : currency.wrapped.equals(stablecoin)) { - return new Price(stablecoin, stablecoin, '1', '1'); - } - // use v2 price if available, v3 as fallback - if (v2USDCTrade) { - var _a = v2USDCTrade.route.midPrice, numerator = _a.numerator, denominator = _a.denominator; - return new Price(currency, stablecoin, denominator, numerator); - } - else if (v3USDCTrade.trade) { - var _b = v3USDCTrade.trade.routes[0].midPrice, numerator = _b.numerator, denominator = _b.denominator; - return new Price(currency, stablecoin, denominator, numerator); - } - return undefined; - }, [currency, stablecoin, v2USDCTrade, v3USDCTrade.trade]); -} -function useUSDCValue(currencyAmount) { - var price = useUSDCPrice(currencyAmount === null || currencyAmount === void 0 ? void 0 : currencyAmount.currency); - return useMemo(function () { - if (!price || !currencyAmount) - return null; - try { - return price.quote(currencyAmount); - } - catch (error) { - return null; - } - }, [currencyAmount, price]); -} -/** - * - * @param fiatValue string representation of a USD amount - * @returns CurrencyAmount where currency is stablecoin on active chain - */ -function useStablecoinAmountFromFiatValue(fiatValue) { - var _a; - var chainId = useActiveWeb3React().chainId; - var stablecoin = chainId ? (_a = STABLECOIN_AMOUNT_OUT[chainId]) === null || _a === void 0 ? void 0 : _a.currency : undefined; - if (fiatValue === null || fiatValue === undefined || !chainId || !stablecoin) { - return undefined; - } - // trim for decimal precision when parsing - var parsedForDecimals = parseFloat(fiatValue).toFixed(stablecoin.decimals).toString(); - try { - // parse USD string into CurrencyAmount based on stablecoin decimals - return tryParseCurrencyAmount(parsedForDecimals, stablecoin); - } - catch (error) { - return undefined; - } +// fired once when the app reloads but before the app renders +// allows any updates to be applied to store data loaded from localStorage +var updateVersion = createAction('global/updateVersion') + +var fetchTokenList = { + pending: createAction('lists/fetchTokenList/pending'), + fulfilled: createAction('lists/fetchTokenList/fulfilled'), + rejected: createAction('lists/fetchTokenList/rejected'), +} +// add and remove from list options +var addList = createAction('lists/addList') +var removeList = createAction('lists/removeList') +// select which lists to search across from loaded lists +var enableList = createAction('lists/enableList') +var disableList = createAction('lists/disableList') +// versioning +var acceptListUpdate = createAction('lists/acceptListUpdate') + +var NEW_LIST_STATE = { + error: null, + current: null, + loadingRequestId: null, + pendingUpdate: null, +} +var initialState$5 = { + lastInitializedDefaultListOfLists: DEFAULT_LIST_OF_LISTS, + byUrl: __assign( + {}, + DEFAULT_LIST_OF_LISTS.reduce(function (memo, listUrl) { + memo[listUrl] = NEW_LIST_STATE + return memo + }, {}) + ), + activeListUrls: DEFAULT_ACTIVE_LIST_URLS, +} +var lists = createReducer(initialState$5, function (builder) { + return builder + .addCase(fetchTokenList.pending, function (state, _a) { + var _b, _c, _d, _e + var _f = _a.payload, + requestId = _f.requestId, + url = _f.url + var current = + (_c = (_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.current) !== null && _c !== void 0 + ? _c + : null + var pendingUpdate = + (_e = (_d = state.byUrl[url]) === null || _d === void 0 ? void 0 : _d.pendingUpdate) !== null && _e !== void 0 + ? _e + : null + state.byUrl[url] = { + current, + pendingUpdate, + loadingRequestId: requestId, + error: null, + } + }) + .addCase(fetchTokenList.fulfilled, function (state, _a) { + var _b, _c, _d + var _e = _a.payload, + requestId = _e.requestId, + tokenList = _e.tokenList, + url = _e.url + var current = (_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.current + var loadingRequestId = (_c = state.byUrl[url]) === null || _c === void 0 ? void 0 : _c.loadingRequestId + // no-op if update does nothing + if (current) { + var upgradeType = getVersionUpgrade(current.version, tokenList.version) + if (upgradeType === VersionUpgrade.NONE) return + if (loadingRequestId === null || loadingRequestId === requestId) { + state.byUrl[url] = { + current, + pendingUpdate: tokenList, + loadingRequestId: null, + error: null, + } + } + } else { + // activate if on default active + if (DEFAULT_ACTIVE_LIST_URLS.includes(url)) { + ;(_d = state.activeListUrls) === null || _d === void 0 ? void 0 : _d.push(url) + } + state.byUrl[url] = { + current: tokenList, + pendingUpdate: null, + loadingRequestId: null, + error: null, + } + } + }) + .addCase(fetchTokenList.rejected, function (state, _a) { + var _b + var _c = _a.payload, + url = _c.url, + requestId = _c.requestId, + errorMessage = _c.errorMessage + if (((_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.loadingRequestId) !== requestId) { + // no-op since it's not the latest request + return + } + state.byUrl[url] = { + current: state.byUrl[url].current ? state.byUrl[url].current : null, + pendingUpdate: null, + loadingRequestId: null, + error: errorMessage, + } + }) + .addCase(addList, function (state, _a) { + var url = _a.payload + if (!state.byUrl[url]) { + state.byUrl[url] = NEW_LIST_STATE + } + }) + .addCase(removeList, function (state, _a) { + var url = _a.payload + if (state.byUrl[url]) { + delete state.byUrl[url] + } + // remove list from active urls if needed + if (state.activeListUrls && state.activeListUrls.includes(url)) { + state.activeListUrls = state.activeListUrls.filter(function (u) { + return u !== url + }) + } + }) + .addCase(enableList, function (state, _a) { + var url = _a.payload + if (!state.byUrl[url]) { + state.byUrl[url] = NEW_LIST_STATE + } + if (state.activeListUrls && !state.activeListUrls.includes(url)) { + state.activeListUrls.push(url) + } + if (!state.activeListUrls) { + state.activeListUrls = [url] + } + }) + .addCase(disableList, function (state, _a) { + var url = _a.payload + if (state.activeListUrls && state.activeListUrls.includes(url)) { + state.activeListUrls = state.activeListUrls.filter(function (u) { + return u !== url + }) + } + }) + .addCase(acceptListUpdate, function (state, _a) { + var _b + var url = _a.payload + if (!((_b = state.byUrl[url]) === null || _b === void 0 ? void 0 : _b.pendingUpdate)) { + throw new Error('accept list update called without pending update') + } + state.byUrl[url] = __assign(__assign({}, state.byUrl[url]), { + current: state.byUrl[url].pendingUpdate, + pendingUpdate: null, + }) + }) + .addCase(updateVersion, function (state) { + // state loaded from localStorage, but new lists have never been initialized + if (!state.lastInitializedDefaultListOfLists) { + state.byUrl = initialState$5.byUrl + state.activeListUrls = initialState$5.activeListUrls + } else if (state.lastInitializedDefaultListOfLists) { + var lastInitializedSet_1 = state.lastInitializedDefaultListOfLists.reduce(function (s, l) { + return s.add(l) + }, new Set()) + var newListOfListsSet_1 = DEFAULT_LIST_OF_LISTS.reduce(function (s, l) { + return s.add(l) + }, new Set()) + DEFAULT_LIST_OF_LISTS.forEach(function (listUrl) { + if (!lastInitializedSet_1.has(listUrl)) { + state.byUrl[listUrl] = NEW_LIST_STATE + } + }) + state.lastInitializedDefaultListOfLists.forEach(function (listUrl) { + if (!newListOfListsSet_1.has(listUrl)) { + delete state.byUrl[listUrl] + } + }) + } + state.lastInitializedDefaultListOfLists = DEFAULT_LIST_OF_LISTS + // if no active lists, activate defaults + if (!state.activeListUrls) { + state.activeListUrls = DEFAULT_ACTIVE_LIST_URLS + // for each list on default list, initialize if needed + DEFAULT_ACTIVE_LIST_URLS.map(function (listUrl) { + if (!state.byUrl[listUrl]) { + state.byUrl[listUrl] = NEW_LIST_STATE + } + return true + }) + } + }) +}) + +/** + * Converts a filter to the corresponding string key + * @param filter the filter to convert + */ +function filterToKey(filter) { + var _a, _b, _c, _d + return ( + ((_a = filter.address) !== null && _a !== void 0 ? _a : '') + + ':' + + ((_d = + (_c = + (_b = filter.topics) === null || _b === void 0 + ? void 0 + : _b.map(function (topic) { + return topic ? (Array.isArray(topic) ? topic.join(';') : topic) : '\0' + })) === null || _c === void 0 + ? void 0 + : _c.join('-')) !== null && _d !== void 0 + ? _d + : '') + ) +} +/** + * Convert a filter key to the corresponding filter + * @param key key to convert + */ +function keyToFilter(key) { + var pcs = key.split(':') + var address = pcs[0] + var topics = pcs[1].split('-').map(function (topic) { + if (topic === '\0') return null + var parts = topic.split(';') + if (parts.length === 1) return parts[0] + return parts + }) + return { + address: address.length === 0 ? undefined : address, + topics, + } } -var V3_SWAP_DEFAULT_SLIPPAGE = new Percent(50, 10000); // .50% -var ONE_TENTHS_PERCENT = new Percent(10, 10000); // .10% -/** - * Return a guess of the gas cost used in computing slippage tolerance for a given trade - * @param trade the trade for which to _guess_ the amount of gas it would cost to execute - */ -function guesstimateGas(trade) { - if (!!trade) { - return 100000 + trade.swaps.reduce(function (memo, swap) { return swap.route.pools.length + memo; }, 0) * 30000; - } - return undefined; -} -var MIN_AUTO_SLIPPAGE_TOLERANCE = new Percent(5, 1000); // 0.5% -var MAX_AUTO_SLIPPAGE_TOLERANCE = new Percent(25, 100); // 25% -/** - * Returns slippage tolerance based on values from current trade, gas estimates from api, and active network. - */ -function useAutoSlippageTolerance(trade) { - var chainId = useActiveWeb3React().chainId; - var onL2 = chainId && L2_CHAIN_IDS.includes(chainId); - var outputDollarValue = useUSDCValue(trade === null || trade === void 0 ? void 0 : trade.outputAmount); - var nativeGasPrice = useGasPrice(); - var gasEstimate = guesstimateGas(trade); - var nativeCurrency = useNativeCurrency(); - var nativeCurrencyPrice = useUSDCPrice(nativeCurrency !== null && nativeCurrency !== void 0 ? nativeCurrency : undefined); - return useMemo(function () { - if (!trade || onL2) - return ONE_TENTHS_PERCENT; - var nativeGasCost = nativeGasPrice && typeof gasEstimate === 'number' - ? JSBI.multiply(nativeGasPrice, JSBI.BigInt(gasEstimate)) - : undefined; - var dollarGasCost = nativeCurrency && nativeGasCost && nativeCurrencyPrice - ? nativeCurrencyPrice.quote(CurrencyAmount.fromRawAmount(nativeCurrency, nativeGasCost)) - : undefined; - // if valid estimate from api and using api trade, use gas estimate from api - // NOTE - dont use gas estimate for L2s yet - need to verify accuracy - // if not, use local heuristic - var dollarCostToUse = chainId && SUPPORTED_GAS_ESTIMATE_CHAIN_IDS.includes(chainId) && (trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) - ? trade.gasUseEstimateUSD - : dollarGasCost; - if (outputDollarValue && dollarCostToUse) { - // the rationale is that a user will not want their trade to fail for a loss due to slippage that is less than - // the cost of the gas of the failed transaction - var fraction = dollarCostToUse.asFraction.divide(outputDollarValue.asFraction); - var result = new Percent(fraction.numerator, fraction.denominator); - if (result.greaterThan(MAX_AUTO_SLIPPAGE_TOLERANCE)) - return MAX_AUTO_SLIPPAGE_TOLERANCE; - if (result.lessThan(MIN_AUTO_SLIPPAGE_TOLERANCE)) - return MIN_AUTO_SLIPPAGE_TOLERANCE; - return result; - } - return V3_SWAP_DEFAULT_SLIPPAGE; - }, [trade, onL2, nativeGasPrice, gasEstimate, nativeCurrency, nativeCurrencyPrice, chainId, outputDollarValue]); +var _a$8 +var slice = createSlice({ + name: 'logs', + initialState: {}, + reducers: { + addListener(state, _a) { + var _b = _a.payload, + chainId = _b.chainId, + filter = _b.filter + if (!state[chainId]) state[chainId] = {} + var key = filterToKey(filter) + if (!state[chainId][key]) + state[chainId][key] = { + listeners: 1, + } + else state[chainId][key].listeners++ + }, + fetchingLogs(state, _a) { + var e_1, _b + var _c = _a.payload, + chainId = _c.chainId, + filters = _c.filters, + blockNumber = _c.blockNumber + if (!state[chainId]) return + try { + for ( + var filters_1 = __values(filters), filters_1_1 = filters_1.next(); + !filters_1_1.done; + filters_1_1 = filters_1.next() + ) { + var filter = filters_1_1.value + var key = filterToKey(filter) + if (!state[chainId][key]) continue + state[chainId][key].fetchingBlockNumber = blockNumber + } + } catch (e_1_1) { + e_1 = { error: e_1_1 } + } finally { + try { + if (filters_1_1 && !filters_1_1.done && (_b = filters_1.return)) _b.call(filters_1) + } finally { + if (e_1) throw e_1.error + } + } + }, + fetchedLogs(state, _a) { + var _b = _a.payload, + chainId = _b.chainId, + filter = _b.filter, + results = _b.results + if (!state[chainId]) return + var key = filterToKey(filter) + var fetchState = state[chainId][key] + if (!fetchState || (fetchState.results && fetchState.results.blockNumber > results.blockNumber)) return + fetchState.results = results + }, + fetchedLogsError(state, _a) { + var _b = _a.payload, + chainId = _b.chainId, + filter = _b.filter, + blockNumber = _b.blockNumber + if (!state[chainId]) return + var key = filterToKey(filter) + var fetchState = state[chainId][key] + if (!fetchState || (fetchState.results && fetchState.results.blockNumber > blockNumber)) return + fetchState.results = { + blockNumber, + error: true, + } + }, + removeListener(state, _a) { + var _b = _a.payload, + chainId = _b.chainId, + filter = _b.filter + if (!state[chainId]) return + var key = filterToKey(filter) + if (!state[chainId][key]) return + state[chainId][key].listeners-- + }, + }, +}) +var logs = slice.reducer +;(_a$8 = slice.actions), _a$8.addListener +_a$8.removeListener +var fetchedLogs = _a$8.fetchedLogs, + fetchedLogsError = _a$8.fetchedLogsError, + fetchingLogs = _a$8.fetchingLogs + +var Field$2 +;(function (Field) { + Field['CURRENCY_A'] = 'CURRENCY_A' + Field['CURRENCY_B'] = 'CURRENCY_B' +})(Field$2 || (Field$2 = {})) +var typeInput$2 = createAction('mint/typeInputMint') +var resetMintState$1 = createAction('mint/resetMintState') + +var initialState$4 = { + independentField: Field$2.CURRENCY_A, + typedValue: '', + otherTypedValue: '', + startPriceTypedValue: '', + leftRangeTypedValue: '', + rightRangeTypedValue: '', +} +var mint = createReducer(initialState$4, function (builder) { + return builder + .addCase(resetMintState$1, function () { + return initialState$4 + }) + .addCase(typeInput$2, function (state, _a) { + var _b = _a.payload, + field = _b.field, + typedValue = _b.typedValue, + noLiquidity = _b.noLiquidity + if (noLiquidity) { + // they're typing into the field they've last typed in + if (field === state.independentField) { + return __assign(__assign({}, state), { independentField: field, typedValue }) + } + // they're typing into a new field, store the other value + else { + return __assign(__assign({}, state), { + independentField: field, + typedValue, + otherTypedValue: state.typedValue, + }) + } + } else { + return __assign(__assign({}, state), { independentField: field, typedValue, otherTypedValue: '' }) + } + }) +}) + +var Field$1 +;(function (Field) { + Field['CURRENCY_A'] = 'CURRENCY_A' + Field['CURRENCY_B'] = 'CURRENCY_B' +})(Field$1 || (Field$1 = {})) +var Bound +;(function (Bound) { + Bound['LOWER'] = 'LOWER' + Bound['UPPER'] = 'UPPER' +})(Bound || (Bound = {})) +var typeInput$1 = createAction('mintV3/typeInputMint') +var typeStartPriceInput = createAction('mintV3/typeStartPriceInput') +var typeLeftRangeInput = createAction('mintV3/typeLeftRangeInput') +var typeRightRangeInput = createAction('mintV3/typeRightRangeInput') +var resetMintState = createAction('mintV3/resetMintState') +var setFullRange = createAction('mintV3/setFullRange') + +var initialState$3 = { + independentField: Field$1.CURRENCY_A, + typedValue: '', + startPriceTypedValue: '', + leftRangeTypedValue: '', + rightRangeTypedValue: '', +} +var mintV3 = createReducer(initialState$3, function (builder) { + return builder + .addCase(resetMintState, function () { + return initialState$3 + }) + .addCase(setFullRange, function (state) { + return __assign(__assign({}, state), { leftRangeTypedValue: true, rightRangeTypedValue: true }) + }) + .addCase(typeStartPriceInput, function (state, _a) { + var typedValue = _a.payload.typedValue + return __assign(__assign({}, state), { startPriceTypedValue: typedValue }) + }) + .addCase(typeLeftRangeInput, function (state, _a) { + var typedValue = _a.payload.typedValue + return __assign(__assign({}, state), { leftRangeTypedValue: typedValue }) + }) + .addCase(typeRightRangeInput, function (state, _a) { + var typedValue = _a.payload.typedValue + return __assign(__assign({}, state), { rightRangeTypedValue: typedValue }) + }) + .addCase(typeInput$1, function (state, _a) { + var _b = _a.payload, + field = _b.field, + typedValue = _b.typedValue, + noLiquidity = _b.noLiquidity + if (noLiquidity) { + // they're typing into the field they've last typed in + if (field === state.independentField) { + return __assign(__assign({}, state), { independentField: field, typedValue }) + } + // they're typing into a new field, store the other value + else { + return __assign(__assign({}, state), { independentField: field, typedValue }) + } + } else { + return __assign(__assign({}, state), { independentField: field, typedValue }) + } + }) +}) + +var protocols = [Protocol.V2, Protocol.V3] +var DEFAULT_QUERY_PARAMS = { + protocols: protocols + .map(function (p) { + return p.toLowerCase() + }) + .join(','), + // example other params + // forceCrossProtocol: 'true', + // minSplits: '5', +} +function getClientSideQuote(_a) { + var tokenInAddress = _a.tokenInAddress, + tokenInChainId = _a.tokenInChainId, + tokenInDecimals = _a.tokenInDecimals, + tokenInSymbol = _a.tokenInSymbol, + tokenOutAddress = _a.tokenOutAddress, + tokenOutChainId = _a.tokenOutChainId, + tokenOutDecimals = _a.tokenOutDecimals, + tokenOutSymbol = _a.tokenOutSymbol, + amount = _a.amount, + type = _a.type + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + return [ + 4 /*yield*/, + Promise.resolve().then(function () { + return index + }), + ] + case 1: + return [ + 2 /*return*/, + _b.sent().getQuote( + { + type, + chainId: tokenInChainId, + tokenIn: { + address: tokenInAddress, + chainId: tokenInChainId, + decimals: tokenInDecimals, + symbol: tokenInSymbol, + }, + tokenOut: { + address: tokenOutAddress, + chainId: tokenOutChainId, + decimals: tokenOutDecimals, + symbol: tokenOutSymbol, + }, + amount, + }, + { protocols } + ), + ] + } + }) + }) +} +var routingApi = createApi({ + reducerPath: 'routingApi', + baseQuery: fetchBaseQuery({ + baseUrl: 'https://api.uniswap.org/v1/', + }), + endpoints(build) { + return { + getQuote: build.query({ + queryFn(args, _api, _extraOptions, fetch) { + return __awaiter(this, void 0, void 0, function () { + var tokenInAddress, + tokenInChainId, + tokenOutAddress, + tokenOutChainId, + amount, + useClientSideRouter, + type, + result, + query, + e_1 + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + ;(tokenInAddress = args.tokenInAddress), + (tokenInChainId = args.tokenInChainId), + (tokenOutAddress = args.tokenOutAddress), + (tokenOutChainId = args.tokenOutChainId), + (amount = args.amount), + (useClientSideRouter = args.useClientSideRouter), + (type = args.type) + _a.label = 1 + case 1: + _a.trys.push([1, 6, , 7]) + if (!useClientSideRouter) return [3 /*break*/, 3] + return [4 /*yield*/, getClientSideQuote(args)] + case 2: + result = _a.sent() + return [3 /*break*/, 5] + case 3: + query = qs.stringify( + __assign(__assign({}, DEFAULT_QUERY_PARAMS), { + tokenInAddress, + tokenInChainId, + tokenOutAddress, + tokenOutChainId, + amount, + type, + }) + ) + return [4 /*yield*/, fetch('quote?' + query)] + case 4: + result = _a.sent() + _a.label = 5 + case 5: + return [2 /*return*/, { data: result.data }] + case 6: + e_1 = _a.sent() + // TODO: fall back to client-side quoter when auto router fails. + // deprecate 'legacy' v2/v3 routers first. + return [2 /*return*/, { error: e_1 }] + case 7: + return [2 /*return*/] + } + }) + }) + }, + keepUnusedDataFor: ms(templateObject_1$1b || (templateObject_1$1b = __makeTemplateObject(['10s'], ['10s']))), + extraOptions: { + maxRetries: 0, + }, + }), + } + }, +}) +var useGetQuoteQuery = routingApi.useGetQuoteQuery +var templateObject_1$1b + +var Field +;(function (Field) { + Field['INPUT'] = 'INPUT' + Field['OUTPUT'] = 'OUTPUT' +})(Field || (Field = {})) +var selectCurrency = createAction('swap/selectCurrency') +var switchCurrencies = createAction('swap/switchCurrencies') +var typeInput = createAction('swap/typeInput') +var replaceSwapState = createAction('swap/replaceSwapState') +var setRecipient = createAction('swap/setRecipient') + +var CHAIN_DATA_ABI = [ + { + inputs: [], + name: 'latestAnswer', + outputs: [{ internalType: 'int256', name: '', type: 'int256' }], + stateMutability: 'view', + type: 'function', + }, +] +/** + * Returns the price of 1 gas in WEI for the currently selected network using the chainlink fast gas price oracle + */ +function useGasPrice() { + var _a, _b + var address = useENSAddress('fast-gas-gwei.data.eth').address + var contract = useContract(address !== null && address !== void 0 ? address : undefined, CHAIN_DATA_ABI, false) + var resultStr = + (_b = (_a = useSingleCallResult(contract, 'latestAnswer').result) === null || _a === void 0 ? void 0 : _a[0]) === + null || _b === void 0 + ? void 0 + : _b.toString() + return typeof resultStr === 'string' ? JSBI.BigInt(resultStr) : undefined } -/** - * Transforms a Routing API quote into an array of routes that can be used to create - * a `Trade`. - */ -function computeRoutes(currencyIn, currencyOut, tradeType, quoteResult) { - if (!quoteResult || !quoteResult.route || !currencyIn || !currencyOut) - return undefined; - if (quoteResult.route.length === 0) - return []; - var parsedTokenIn = parseToken(quoteResult.route[0][0].tokenIn); - var parsedTokenOut = parseToken(quoteResult.route[0][quoteResult.route[0].length - 1].tokenOut); - if (parsedTokenIn.address !== currencyIn.wrapped.address) - return undefined; - if (parsedTokenOut.address !== currencyOut.wrapped.address) - return undefined; - var parsedCurrencyIn = currencyIn.isNative ? nativeOnChain(currencyIn.chainId) : parsedTokenIn; - var parsedCurrencyOut = currencyOut.isNative ? nativeOnChain(currencyOut.chainId) : parsedTokenOut; - try { - return quoteResult.route.map(function (route) { - if (route.length === 0) { - throw new Error('Expected route to have at least one pair or pool'); - } - var rawAmountIn = route[0].amountIn; - var rawAmountOut = route[route.length - 1].amountOut; - if (!rawAmountIn || !rawAmountOut) { - throw new Error('Expected both amountIn and amountOut to be present'); - } - return { - routev3: isV3Route(route) ? new Route$1(route.map(parsePool), parsedCurrencyIn, parsedCurrencyOut) : null, - routev2: !isV3Route(route) ? new Route$2(route.map(parsePair), parsedCurrencyIn, parsedCurrencyOut) : null, - inputAmount: CurrencyAmount.fromRawAmount(parsedCurrencyIn, rawAmountIn), - outputAmount: CurrencyAmount.fromRawAmount(parsedCurrencyOut, rawAmountOut), - }; - }); - } - catch (e) { - // `Route` constructor may throw if inputs/outputs are temporarily out of sync - // (RTK-Query always returns the latest data which may not be the right inputs/outputs) - // This is not fatal and will fix itself in future render cycles - console.error(e); - return undefined; - } -} -function transformRoutesToTrade(route, tradeType, gasUseEstimateUSD) { - var _a, _b; - return new InterfaceTrade({ - v2Routes: (_a = route === null || route === void 0 ? void 0 : route.filter(function (r) { return r.routev2 !== null; }).map(function (_a) { - var routev2 = _a.routev2, inputAmount = _a.inputAmount, outputAmount = _a.outputAmount; - return ({ routev2: routev2, inputAmount: inputAmount, outputAmount: outputAmount }); - })) !== null && _a !== void 0 ? _a : [], - v3Routes: (_b = route === null || route === void 0 ? void 0 : route.filter(function (r) { return r.routev3 !== null; }).map(function (_a) { - var routev3 = _a.routev3, inputAmount = _a.inputAmount, outputAmount = _a.outputAmount; - return ({ routev3: routev3, inputAmount: inputAmount, outputAmount: outputAmount }); - })) !== null && _b !== void 0 ? _b : [], - tradeType: tradeType, - gasUseEstimateUSD: gasUseEstimateUSD, - }); -} -var parseToken = function (_a) { - var address = _a.address, chainId = _a.chainId, decimals = _a.decimals, symbol = _a.symbol; - return new Token(chainId, address, parseInt(decimals.toString()), symbol); -}; -var parsePool = function (_a) { - var fee = _a.fee, sqrtRatioX96 = _a.sqrtRatioX96, liquidity = _a.liquidity, tickCurrent = _a.tickCurrent, tokenIn = _a.tokenIn, tokenOut = _a.tokenOut; - return new Pool$1(parseToken(tokenIn), parseToken(tokenOut), parseInt(fee), sqrtRatioX96, liquidity, parseInt(tickCurrent)); -}; -var parsePair = function (_a) { - var reserve0 = _a.reserve0, reserve1 = _a.reserve1; - return new Pair(CurrencyAmount.fromRawAmount(parseToken(reserve0.token), reserve0.quotient), CurrencyAmount.fromRawAmount(parseToken(reserve1.token), reserve1.quotient)); -}; -function isV3Route(route) { - return route[0].type === 'v3-pool'; +/** + * Parses a CurrencyAmount from the passed string. + * Returns the CurrencyAmount, or undefined if parsing fails. + */ +function tryParseCurrencyAmount(value, currency) { + if (!value || !currency) { + return undefined + } + try { + var typedValueParsed = parseUnits(value, currency.decimals).toString() + if (typedValueParsed !== '0') { + return CurrencyAmount.fromRawAmount(currency, JSBI.BigInt(typedValueParsed)) + } + } catch (error) { + // fails if the user specifies too many decimal places of precision (or maybe exceed max uint?) + console.debug('Failed to parse input amount: "' + value + '"', error) + } + return undefined } -function useFreshData(data, dataBlockNumber, maxBlockAge) { - if (maxBlockAge === void 0) { maxBlockAge = 10; } - var localBlockNumber = useBlockNumber(); - if (!localBlockNumber) - return undefined; - if (localBlockNumber - dataBlockNumber > maxBlockAge) { - return undefined; - } - return data; -} -/** - * Returns query arguments for the Routing API query or undefined if the - * query should be skipped. - */ -function useRoutingAPIArguments(_a) { - var tokenIn = _a.tokenIn, tokenOut = _a.tokenOut, amount = _a.amount, tradeType = _a.tradeType; - var _b = __read(useClientSideRouter(), 1), clientSideRouter = _b[0]; - return useMemo(function () { - return !tokenIn || !tokenOut || !amount || tokenIn.equals(tokenOut) - ? undefined - : { - amount: amount.quotient.toString(), - tokenInAddress: tokenIn.wrapped.address, - tokenInChainId: tokenIn.wrapped.chainId, - tokenInDecimals: tokenIn.wrapped.decimals, - tokenInSymbol: tokenIn.wrapped.symbol, - tokenOutAddress: tokenOut.wrapped.address, - tokenOutChainId: tokenOut.wrapped.chainId, - tokenOutDecimals: tokenOut.wrapped.decimals, - tokenOutSymbol: tokenOut.wrapped.symbol, - useClientSideRouter: clientSideRouter, - type: (tradeType === TradeType.EXACT_INPUT ? 'exactIn' : 'exactOut'), - }; - }, [amount, clientSideRouter, tokenIn, tokenOut, tradeType]); -} -/** - * Returns the best trade by invoking the routing api or the smart order router on the client - * @param tradeType whether the swap is an exact in/out - * @param amountSpecified the exact amount to swap in/out - * @param otherCurrency the desired output/payment currency - */ -function useRoutingAPITrade(tradeType, amountSpecified, otherCurrency) { - var _a; - var _b = __read(useMemo(function () { - return tradeType === TradeType.EXACT_INPUT - ? [amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, otherCurrency] - : [otherCurrency, amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency]; - }, [amountSpecified, otherCurrency, tradeType]), 2), currencyIn = _b[0], currencyOut = _b[1]; - var queryArgs = useRoutingAPIArguments({ - tokenIn: currencyIn, - tokenOut: currencyOut, - amount: amountSpecified, - tradeType: tradeType, - }); - var _c = useGetQuoteQuery(queryArgs !== null && queryArgs !== void 0 ? queryArgs : skipToken, { - pollingInterval: ms(templateObject_1$1a || (templateObject_1$1a = __makeTemplateObject(["15s"], ["15s"]))), - refetchOnFocus: true, - }), isLoading = _c.isLoading, isError = _c.isError, data = _c.data; - var quoteResult = useFreshData(data, Number(data === null || data === void 0 ? void 0 : data.blockNumber) || 0); - var route = useMemo(function () { return computeRoutes(currencyIn, currencyOut, tradeType, quoteResult); }, [currencyIn, currencyOut, quoteResult, tradeType]); - // get USD gas cost of trade in active chains stablecoin amount - var gasUseEstimateUSD = (_a = useStablecoinAmountFromFiatValue(quoteResult === null || quoteResult === void 0 ? void 0 : quoteResult.gasUseEstimateUSD)) !== null && _a !== void 0 ? _a : null; - return useMemo(function () { - if (!currencyIn || !currencyOut) { - return { - state: TradeState.INVALID, - trade: undefined, - }; - } - if (isLoading && !quoteResult) { - // only on first hook render - return { - state: TradeState.LOADING, - trade: undefined, - }; - } - var otherAmount = tradeType === TradeType.EXACT_INPUT - ? currencyOut && quoteResult - ? CurrencyAmount.fromRawAmount(currencyOut, quoteResult.quote) - : undefined - : currencyIn && quoteResult - ? CurrencyAmount.fromRawAmount(currencyIn, quoteResult.quote) - : undefined; - if (isError || !otherAmount || !route || route.length === 0 || !queryArgs) { - return { - state: TradeState.NO_ROUTE_FOUND, - trade: undefined, - }; - } - try { - var trade = transformRoutesToTrade(route, tradeType, gasUseEstimateUSD); - return { - // always return VALID regardless of isFetching status - state: TradeState.VALID, - trade: trade, - }; - } - catch (e) { - console.debug('transformRoutesToTrade failed: ', e); - return { state: TradeState.INVALID, trade: undefined }; - } - }, [currencyIn, currencyOut, isLoading, quoteResult, tradeType, isError, route, queryArgs, gasUseEstimateUSD]); -} -var templateObject_1$1a; +// returns whether tradeB is better than tradeA by at least a threshold percentage amount +// only used by v2 hooks +function isTradeBetter(tradeA, tradeB, minimumDelta) { + if (minimumDelta === void 0) { + minimumDelta = ZERO_PERCENT + } + if (tradeA && !tradeB) return false + if (tradeB && !tradeA) return true + if (!tradeA || !tradeB) return undefined + if ( + tradeA.tradeType !== tradeB.tradeType || + !tradeA.inputAmount.currency.equals(tradeB.inputAmount.currency) || + !tradeA.outputAmount.currency.equals(tradeB.outputAmount.currency) + ) { + throw new Error('Comparing incomparable trades') + } + if (minimumDelta.equalTo(ZERO_PERCENT)) { + return tradeA.executionPrice.lessThan(tradeB.executionPrice) + } else { + return tradeA.executionPrice.asFraction + .multiply(minimumDelta.add(ONE_HUNDRED_PERCENT)) + .lessThan(tradeB.executionPrice) + } +} -var AUTO_ROUTER_SUPPORTED_CHAINS = Object.values(ChainId); +function useAllCurrencyCombinations(currencyA, currencyB) { + var chainId = currencyA === null || currencyA === void 0 ? void 0 : currencyA.chainId + var _a = __read( + chainId + ? [ + currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped, + currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped, + ] + : [undefined, undefined], + 2 + ), + tokenA = _a[0], + tokenB = _a[1] + var bases = useMemo( + function () { + var _a, _b, _c, _d, _e + if (!chainId || chainId !== (tokenB === null || tokenB === void 0 ? void 0 : tokenB.chainId)) return [] + var common = (_a = BASES_TO_CHECK_TRADES_AGAINST[chainId]) !== null && _a !== void 0 ? _a : [] + var additionalA = tokenA + ? (_c = (_b = ADDITIONAL_BASES[chainId]) === null || _b === void 0 ? void 0 : _b[tokenA.address]) !== null && + _c !== void 0 + ? _c + : [] + : [] + var additionalB = tokenB + ? (_e = (_d = ADDITIONAL_BASES[chainId]) === null || _d === void 0 ? void 0 : _d[tokenB.address]) !== null && + _e !== void 0 + ? _e + : [] + : [] + return __spreadArray( + __spreadArray(__spreadArray([], __read(common), false), __read(additionalA), false), + __read(additionalB), + false + ) + }, + [chainId, tokenA, tokenB] + ) + var basePairs = useMemo( + function () { + return ( + bases + .flatMap(function (base) { + return bases.map(function (otherBase) { + return [base, otherBase] + }) + }) + // though redundant with the first filter below, that expression runs more often, so this is probably worthwhile + .filter(function (_a) { + var _b = __read(_a, 2), + t0 = _b[0], + t1 = _b[1] + return !t0.equals(t1) + }) + ) + }, + [bases] + ) + return useMemo( + function () { + return tokenA && tokenB + ? __spreadArray( + __spreadArray( + __spreadArray( + [ + // the direct pair + [tokenA, tokenB], + ], + __read( + bases.map(function (base) { + return [tokenA, base] + }) + ), + false + ), + __read( + bases.map(function (base) { + return [tokenB, base] + }) + ), + false + ), + __read(basePairs), + false + ) + .filter(function (_a) { + var _b = __read(_a, 2), + t0 = _b[0], + t1 = _b[1] + return !t0.equals(t1) + }) + // filter out duplicate pairs + .filter(function (_a, i, otherPairs) { + var _b = __read(_a, 2), + t0 = _b[0], + t1 = _b[1] + // find the first index in the array at which there are the same 2 tokens as the current + var firstIndexInOtherPairs = otherPairs.findIndex(function (_a) { + var _b = __read(_a, 2), + t0Other = _b[0], + t1Other = _b[1] + return (t0.equals(t0Other) && t1.equals(t1Other)) || (t0.equals(t1Other) && t1.equals(t0Other)) + }) + // only accept the first occurrence of the same 2 tokens + return firstIndexInOtherPairs === i + }) + // optionally filter out some pairs for tokens with custom bases defined + .filter(function (_a) { + var _b = __read(_a, 2), + tokenA = _b[0], + tokenB = _b[1] + if (!chainId) return true + var customBases = CUSTOM_BASES[chainId] + var customBasesA = customBases === null || customBases === void 0 ? void 0 : customBases[tokenA.address] + var customBasesB = customBases === null || customBases === void 0 ? void 0 : customBases[tokenB.address] + if (!customBasesA && !customBasesB) return true + if ( + customBasesA && + !customBasesA.find(function (base) { + return tokenB.equals(base) + }) + ) + return false + if ( + customBasesB && + !customBasesB.find(function (base) { + return tokenA.equals(base) + }) + ) + return false + return true + }) + : [] + }, + [tokenA, tokenB, bases, basePairs, chainId] + ) +} -function useAutoRouterSupported() { - var chainId = useActiveWeb3React().chainId; - return Boolean(chainId && AUTO_ROUTER_SUPPORTED_CHAINS.includes(chainId)); +var PAIR_INTERFACE = new Interface(abi$4) +var PairState +;(function (PairState) { + PairState[(PairState['LOADING'] = 0)] = 'LOADING' + PairState[(PairState['NOT_EXISTS'] = 1)] = 'NOT_EXISTS' + PairState[(PairState['EXISTS'] = 2)] = 'EXISTS' + PairState[(PairState['INVALID'] = 3)] = 'INVALID' +})(PairState || (PairState = {})) +function useV2Pairs(currencies) { + var tokens = useMemo( + function () { + return currencies.map(function (_a) { + var _b = __read(_a, 2), + currencyA = _b[0], + currencyB = _b[1] + return [ + currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped, + currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped, + ] + }) + }, + [currencies] + ) + var pairAddresses = useMemo( + function () { + return tokens.map(function (_a) { + var _b = __read(_a, 2), + tokenA = _b[0], + tokenB = _b[1] + return tokenA && + tokenB && + tokenA.chainId === tokenB.chainId && + !tokenA.equals(tokenB) && + V2_FACTORY_ADDRESSES[tokenA.chainId] + ? computePairAddress({ factoryAddress: V2_FACTORY_ADDRESSES[tokenA.chainId], tokenA, tokenB }) + : undefined + }) + }, + [tokens] + ) + var results = useMultipleContractSingleData(pairAddresses, PAIR_INTERFACE, 'getReserves') + return useMemo( + function () { + return results.map(function (result, i) { + var reserves = result.result, + loading = result.loading + var tokenA = tokens[i][0] + var tokenB = tokens[i][1] + if (loading) return [PairState.LOADING, null] + if (!tokenA || !tokenB || tokenA.equals(tokenB)) return [PairState.INVALID, null] + if (!reserves) return [PairState.NOT_EXISTS, null] + var reserve0 = reserves.reserve0, + reserve1 = reserves.reserve1 + var _a = __read(tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA], 2), + token0 = _a[0], + token1 = _a[1] + return [ + PairState.EXISTS, + new Pair( + CurrencyAmount.fromRawAmount(token0, reserve0.toString()), + CurrencyAmount.fromRawAmount(token1, reserve1.toString()) + ), + ] + }) + }, + [results, tokens] + ) } -/** - * Returns the best v2+v3 trade for a desired swap. - * @param tradeType whether the swap is an exact in/out - * @param amountSpecified the exact amount to swap in/out - * @param otherCurrency the desired output/payment currency - */ -function useBestTrade(tradeType, amountSpecified, otherCurrency) { - var autoRouterSupported = useAutoRouterSupported(); - var isWindowVisible = useIsWindowVisible(); - var _a = __read(useDebounce(useMemo(function () { return [amountSpecified, otherCurrency]; }, [amountSpecified, otherCurrency]), 200), 2), debouncedAmount = _a[0], debouncedOtherCurrency = _a[1]; - var routingAPITrade = useRoutingAPITrade(tradeType, autoRouterSupported && isWindowVisible ? debouncedAmount : undefined, debouncedOtherCurrency); - var isLoading = amountSpecified !== undefined && debouncedAmount === undefined; - // consider trade debouncing when inputs/outputs do not match - var debouncing = routingAPITrade.trade && - amountSpecified && - (tradeType === TradeType.EXACT_INPUT - ? !routingAPITrade.trade.inputAmount.equalTo(amountSpecified) || - !amountSpecified.currency.equals(routingAPITrade.trade.inputAmount.currency) || - !(debouncedOtherCurrency === null || debouncedOtherCurrency === void 0 ? void 0 : debouncedOtherCurrency.equals(routingAPITrade.trade.outputAmount.currency)) - : !routingAPITrade.trade.outputAmount.equalTo(amountSpecified) || - !amountSpecified.currency.equals(routingAPITrade.trade.outputAmount.currency) || - !(debouncedOtherCurrency === null || debouncedOtherCurrency === void 0 ? void 0 : debouncedOtherCurrency.equals(routingAPITrade.trade.inputAmount.currency))); - var useFallback = !autoRouterSupported || (!debouncing && routingAPITrade.state === TradeState.NO_ROUTE_FOUND); - // only use client side router if routing api trade failed or is not supported - var bestV3Trade = useClientSideV3Trade(tradeType, useFallback ? debouncedAmount : undefined, useFallback ? debouncedOtherCurrency : undefined); - // only return gas estimate from api if routing api trade is used - return useMemo(function () { return (__assign(__assign(__assign({}, (useFallback ? bestV3Trade : routingAPITrade)), (debouncing ? { state: TradeState.SYNCING } : {})), (isLoading ? { state: TradeState.LOADING } : {}))); }, [bestV3Trade, debouncing, isLoading, routingAPITrade, useFallback]); -} - -// gets the current timestamp from the blockchain -function useCurrentBlockTimestamp() { - var _a, _b; - var multicall = useInterfaceMulticall(); - return (_b = (_a = useSingleCallResult(multicall, 'getCurrentBlockTimestamp')) === null || _a === void 0 ? void 0 : _a.result) === null || _b === void 0 ? void 0 : _b[0]; +function useAllCommonPairs(currencyA, currencyB) { + var allCurrencyCombinations = useAllCurrencyCombinations(currencyA, currencyB) + var allPairs = useV2Pairs(allCurrencyCombinations) + return useMemo( + function () { + return Object.values( + allPairs + // filter out invalid pairs + .filter(function (result) { + return Boolean(result[0] === PairState.EXISTS && result[1]) + }) + .map(function (_a) { + var _b = __read(_a, 2), + pair = _b[1] + return pair + }) + ) + }, + [allPairs] + ) +} +var MAX_HOPS = 3 +/** + * Returns the best v2 trade for a desired swap + * @param tradeType whether the swap is an exact in/out + * @param amountSpecified the exact amount to swap in/out + * @param otherCurrency the desired output/payment currency + */ +function useBestV2Trade(tradeType, amountSpecified, otherCurrency, _a) { + var _b = _a === void 0 ? {} : _a, + _c = _b.maxHops, + maxHops = _c === void 0 ? MAX_HOPS : _c + var _d = __read( + useMemo( + function () { + return tradeType === TradeType.EXACT_INPUT + ? [ + amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, + otherCurrency, + ] + : [ + otherCurrency, + amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, + ] + }, + [tradeType, amountSpecified, otherCurrency] + ), + 2 + ), + currencyIn = _d[0], + currencyOut = _d[1] + var allowedPairs = useAllCommonPairs(currencyIn, currencyOut) + return useMemo( + function () { + var _a, _b, _c, _d + if (amountSpecified && currencyIn && currencyOut && allowedPairs.length > 0) { + if (maxHops === 1) { + var options = { maxHops: 1, maxNumResults: 1 } + if (tradeType === TradeType.EXACT_INPUT) { + var amountIn = amountSpecified + return (_a = Trade.bestTradeExactIn(allowedPairs, amountIn, currencyOut, options)[0]) !== null && + _a !== void 0 + ? _a + : null + } else { + var amountOut = amountSpecified + return (_b = Trade.bestTradeExactOut(allowedPairs, currencyIn, amountOut, options)[0]) !== null && + _b !== void 0 + ? _b + : null + } + } + // search through trades with varying hops, find best trade out of them + var bestTradeSoFar = null + for (var i = 1; i <= maxHops; i++) { + var options = { maxHops: i, maxNumResults: 1 } + var currentTrade = void 0 + if (tradeType === TradeType.EXACT_INPUT) { + var amountIn = amountSpecified + currentTrade = + (_c = Trade.bestTradeExactIn(allowedPairs, amountIn, currencyOut, options)[0]) !== null && _c !== void 0 + ? _c + : null + } else { + var amountOut = amountSpecified + currentTrade = + (_d = Trade.bestTradeExactOut(allowedPairs, currencyIn, amountOut, options)[0]) !== null && _d !== void 0 + ? _d + : null + } + // if current trade is best yet, save it + if (isTradeBetter(bestTradeSoFar, currentTrade, BETTER_TRADE_LESS_HOPS_THRESHOLD)) { + bestTradeSoFar = currentTrade + } + } + return bestTradeSoFar + } + return null + }, + [tradeType, amountSpecified, currencyIn, currencyOut, allowedPairs, maxHops] + ) } -new Interface(abi$6); -({ - 1: [ - { - tokens: [WRAPPED_NATIVE_CURRENCY[1], DAI], - stakingRewardAddress: '0xa1484C3aa22a66C62b77E0AE78E15258bd0cB711', - }, - { - tokens: [WRAPPED_NATIVE_CURRENCY[1], USDC], - stakingRewardAddress: '0x7FBa4B8Dc5E7616e59622806932DBea72537A56b', - }, - { - tokens: [WRAPPED_NATIVE_CURRENCY[1], USDT], - stakingRewardAddress: '0x6C3e4cb2E96B01F4b866965A91ed4437839A121a', - }, - { - tokens: [WRAPPED_NATIVE_CURRENCY[1], WBTC], - stakingRewardAddress: '0xCA35e32e7926b96A9988f61d510E038108d8068e', - }, - ], -}); +var TradeState +;(function (TradeState) { + TradeState[(TradeState['LOADING'] = 0)] = 'LOADING' + TradeState[(TradeState['INVALID'] = 1)] = 'INVALID' + TradeState[(TradeState['NO_ROUTE_FOUND'] = 2)] = 'NO_ROUTE_FOUND' + TradeState[(TradeState['VALID'] = 3)] = 'VALID' + TradeState[(TradeState['SYNCING'] = 4)] = 'SYNCING' +})(TradeState || (TradeState = {})) +var InterfaceTrade = /** @class */ (function (_super) { + __extends(InterfaceTrade, _super) + function InterfaceTrade(_a) { + var gasUseEstimateUSD = _a.gasUseEstimateUSD, + routes = __rest(_a, ['gasUseEstimateUSD']) + var _this = _super.call(this, routes) || this + _this.gasUseEstimateUSD = gasUseEstimateUSD + return _this + } + return InterfaceTrade +})(Trade$1) -// mimics useAllBalances -function useAllTokenBalances() { - var account = useActiveWeb3React().account; - var allTokens = useAllTokens(); - var allTokensArray = useMemo(function () { return Object.values(allTokens !== null && allTokens !== void 0 ? allTokens : {}); }, [allTokens]); - var balances = useTokenBalances(account !== null && account !== void 0 ? account : undefined, allTokensArray); - return balances !== null && balances !== void 0 ? balances : {}; +var abi = [ + { + inputs: [], + name: 'feeGrowthGlobal0X128', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'feeGrowthGlobal1X128', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'liquidity', + outputs: [ + { + internalType: 'uint128', + name: '', + type: 'uint128', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'index', + type: 'uint256', + }, + ], + name: 'observations', + outputs: [ + { + internalType: 'uint32', + name: 'blockTimestamp', + type: 'uint32', + }, + { + internalType: 'int56', + name: 'tickCumulative', + type: 'int56', + }, + { + internalType: 'uint160', + name: 'secondsPerLiquidityCumulativeX128', + type: 'uint160', + }, + { + internalType: 'bool', + name: 'initialized', + type: 'bool', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'key', + type: 'bytes32', + }, + ], + name: 'positions', + outputs: [ + { + internalType: 'uint128', + name: '_liquidity', + type: 'uint128', + }, + { + internalType: 'uint256', + name: 'feeGrowthInside0LastX128', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'feeGrowthInside1LastX128', + type: 'uint256', + }, + { + internalType: 'uint128', + name: 'tokensOwed0', + type: 'uint128', + }, + { + internalType: 'uint128', + name: 'tokensOwed1', + type: 'uint128', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'protocolFees', + outputs: [ + { + internalType: 'uint128', + name: 'token0', + type: 'uint128', + }, + { + internalType: 'uint128', + name: 'token1', + type: 'uint128', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'slot0', + outputs: [ + { + internalType: 'uint160', + name: 'sqrtPriceX96', + type: 'uint160', + }, + { + internalType: 'int24', + name: 'tick', + type: 'int24', + }, + { + internalType: 'uint16', + name: 'observationIndex', + type: 'uint16', + }, + { + internalType: 'uint16', + name: 'observationCardinality', + type: 'uint16', + }, + { + internalType: 'uint16', + name: 'observationCardinalityNext', + type: 'uint16', + }, + { + internalType: 'uint8', + name: 'feeProtocol', + type: 'uint8', + }, + { + internalType: 'bool', + name: 'unlocked', + type: 'bool', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'int16', + name: 'wordPosition', + type: 'int16', + }, + ], + name: 'tickBitmap', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'int24', + name: 'tick', + type: 'int24', + }, + ], + name: 'ticks', + outputs: [ + { + internalType: 'uint128', + name: 'liquidityGross', + type: 'uint128', + }, + { + internalType: 'int128', + name: 'liquidityNet', + type: 'int128', + }, + { + internalType: 'uint256', + name: 'feeGrowthOutside0X128', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'feeGrowthOutside1X128', + type: 'uint256', + }, + { + internalType: 'int56', + name: 'tickCumulativeOutside', + type: 'int56', + }, + { + internalType: 'uint160', + name: 'secondsPerLiquidityOutsideX128', + type: 'uint160', + }, + { + internalType: 'uint32', + name: 'secondsOutside', + type: 'uint32', + }, + { + internalType: 'bool', + name: 'initialized', + type: 'bool', + }, + ], + stateMutability: 'view', + type: 'function', + }, +] + +var POOL_STATE_INTERFACE = new Interface(abi) +var PoolState +;(function (PoolState) { + PoolState[(PoolState['LOADING'] = 0)] = 'LOADING' + PoolState[(PoolState['NOT_EXISTS'] = 1)] = 'NOT_EXISTS' + PoolState[(PoolState['EXISTS'] = 2)] = 'EXISTS' + PoolState[(PoolState['INVALID'] = 3)] = 'INVALID' +})(PoolState || (PoolState = {})) +function usePools(poolKeys) { + var chainId = useActiveWeb3React().chainId + var transformed = useMemo( + function () { + return poolKeys.map(function (_a) { + var _b = __read(_a, 3), + currencyA = _b[0], + currencyB = _b[1], + feeAmount = _b[2] + if (!chainId || !currencyA || !currencyB || !feeAmount) return null + var tokenA = currencyA === null || currencyA === void 0 ? void 0 : currencyA.wrapped + var tokenB = currencyB === null || currencyB === void 0 ? void 0 : currencyB.wrapped + if (!tokenA || !tokenB || tokenA.equals(tokenB)) return null + var _c = __read(tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA], 2), + token0 = _c[0], + token1 = _c[1] + return [token0, token1, feeAmount] + }) + }, + [chainId, poolKeys] + ) + var poolAddresses = useMemo( + function () { + var v3CoreFactoryAddress = chainId && V3_CORE_FACTORY_ADDRESSES[chainId] + return transformed.map(function (value) { + if (!v3CoreFactoryAddress || !value) return undefined + return computePoolAddress({ + factoryAddress: v3CoreFactoryAddress, + tokenA: value[0], + tokenB: value[1], + fee: value[2], + }) + }) + }, + [chainId, transformed] + ) + var slot0s = useMultipleContractSingleData(poolAddresses, POOL_STATE_INTERFACE, 'slot0') + var liquidities = useMultipleContractSingleData(poolAddresses, POOL_STATE_INTERFACE, 'liquidity') + return useMemo( + function () { + return poolKeys.map(function (_key, index) { + var _a + var _b = __read((_a = transformed[index]) !== null && _a !== void 0 ? _a : [], 3), + token0 = _b[0], + token1 = _b[1], + fee = _b[2] + if (!token0 || !token1 || !fee) return [PoolState.INVALID, null] + var _c = slot0s[index], + slot0 = _c.result, + slot0Loading = _c.loading, + slot0Valid = _c.valid + var _d = liquidities[index], + liquidity = _d.result, + liquidityLoading = _d.loading, + liquidityValid = _d.valid + if (!slot0Valid || !liquidityValid) return [PoolState.INVALID, null] + if (slot0Loading || liquidityLoading) return [PoolState.LOADING, null] + if (!slot0 || !liquidity) return [PoolState.NOT_EXISTS, null] + if (!slot0.sqrtPriceX96 || slot0.sqrtPriceX96.eq(0)) return [PoolState.NOT_EXISTS, null] + try { + return [PoolState.EXISTS, new Pool$1(token0, token1, fee, slot0.sqrtPriceX96, liquidity[0], slot0.tick)] + } catch (error) { + console.error('Error when constructing the pool', error) + return [PoolState.NOT_EXISTS, null] + } + }) + }, + [liquidities, poolKeys, slot0s, transformed] + ) } -function useSwapState() { - return useAppSelector(function (state) { return state.swap; }); -} -function useSwapActionHandlers() { - var dispatch = useAppDispatch(); - var onCurrencySelection = useCallback(function (field, currency) { - dispatch(selectCurrency({ - field: field, - currencyId: currency.isToken ? currency.address : currency.isNative ? 'ETH' : '', - })); - }, [dispatch]); - var onSwitchTokens = useCallback(function () { - dispatch(switchCurrencies()); - }, [dispatch]); - var onUserInput = useCallback(function (field, typedValue) { - dispatch(typeInput({ field: field, typedValue: typedValue })); - }, [dispatch]); - var onChangeRecipient = useCallback(function (recipient) { - dispatch(setRecipient({ recipient: recipient })); - }, [dispatch]); - return { - onSwitchTokens: onSwitchTokens, - onCurrencySelection: onCurrencySelection, - onUserInput: onUserInput, - onChangeRecipient: onChangeRecipient, - }; -} -var BAD_RECIPIENT_ADDRESSES = { - '0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f': true, - '0xf164fC0Ec4E93095b804a4795bBe1e041497b92a': true, - '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D': true, // v2 router 02 -}; -// from the current swap inputs, compute the best trade and return it. -function useDerivedSwapInfo() { - var _a, _b; - var account = useActiveWeb3React().account; - var _c = useSwapState(), independentField = _c.independentField, typedValue = _c.typedValue, _d = Field.INPUT, inputCurrencyId = _c[_d].currencyId, _e = Field.OUTPUT, outputCurrencyId = _c[_e].currencyId, recipient = _c.recipient; - var inputCurrency = useCurrency(inputCurrencyId); - var outputCurrency = useCurrency(outputCurrencyId); - var recipientLookup = useENS(recipient !== null && recipient !== void 0 ? recipient : undefined); - var to = (_a = (recipient === null ? account : recipientLookup.address)) !== null && _a !== void 0 ? _a : null; - var relevantTokenBalances = useCurrencyBalances(account !== null && account !== void 0 ? account : undefined, useMemo(function () { return [inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : undefined, outputCurrency !== null && outputCurrency !== void 0 ? outputCurrency : undefined]; }, [inputCurrency, outputCurrency])); - var isExactIn = independentField === Field.INPUT; - var parsedAmount = useMemo(function () { var _a; return tryParseCurrencyAmount(typedValue, (_a = (isExactIn ? inputCurrency : outputCurrency)) !== null && _a !== void 0 ? _a : undefined); }, [inputCurrency, isExactIn, outputCurrency, typedValue]); - var trade = useBestTrade(isExactIn ? TradeType.EXACT_INPUT : TradeType.EXACT_OUTPUT, parsedAmount, (_b = (isExactIn ? outputCurrency : inputCurrency)) !== null && _b !== void 0 ? _b : undefined); - var currencyBalances = useMemo(function () { - var _a; - return (_a = {}, - _a[Field.INPUT] = relevantTokenBalances[0], - _a[Field.OUTPUT] = relevantTokenBalances[1], - _a); - }, [relevantTokenBalances]); - var currencies = useMemo(function () { - var _a; - return (_a = {}, - _a[Field.INPUT] = inputCurrency, - _a[Field.OUTPUT] = outputCurrency, - _a); - }, [inputCurrency, outputCurrency]); - // allowed slippage is either auto slippage, or custom user defined slippage if auto slippage disabled - var autoSlippageTolerance = useAutoSlippageTolerance(trade.trade); - var allowedSlippage = useUserSlippageToleranceWithDefault(autoSlippageTolerance); - var inputError = useMemo(function () { - var _a; - var inputError; - if (!account) { - inputError = jsx(Trans, { children: "Connect Wallet" }, void 0); - } - if (!currencies[Field.INPUT] || !currencies[Field.OUTPUT]) { - inputError = inputError !== null && inputError !== void 0 ? inputError : jsx(Trans, { children: "Select a token" }, void 0); - } - if (!parsedAmount) { - inputError = inputError !== null && inputError !== void 0 ? inputError : jsx(Trans, { children: "Enter an amount" }, void 0); - } - var formattedTo = isAddress(to); - if (!to || !formattedTo) { - inputError = inputError !== null && inputError !== void 0 ? inputError : jsx(Trans, { children: "Enter a recipient" }, void 0); - } - else { - if (BAD_RECIPIENT_ADDRESSES[formattedTo]) { - inputError = inputError !== null && inputError !== void 0 ? inputError : jsx(Trans, { children: "Invalid recipient" }, void 0); - } - } - // compare input balance to max input based on version - var _b = __read([currencyBalances[Field.INPUT], (_a = trade.trade) === null || _a === void 0 ? void 0 : _a.maximumAmountIn(allowedSlippage)], 2), balanceIn = _b[0], amountIn = _b[1]; - if (balanceIn && amountIn && balanceIn.lessThan(amountIn)) { - inputError = jsxs(Trans, { children: ["Insufficient ", amountIn.currency.symbol, " balance"] }, void 0); - } - return inputError; - }, [account, allowedSlippage, currencies, currencyBalances, parsedAmount, to, trade.trade]); - return useMemo(function () { return ({ - currencies: currencies, - currencyBalances: currencyBalances, - parsedAmount: parsedAmount, - inputError: inputError, - trade: trade, - allowedSlippage: allowedSlippage, - }); }, [allowedSlippage, currencies, currencyBalances, inputError, parsedAmount, trade]); -} -function parseCurrencyFromURLParameter(urlParam) { - if (typeof urlParam === 'string') { - var valid = isAddress(urlParam); - if (valid) - return valid; - if (urlParam.toUpperCase() === 'ETH') - return 'ETH'; - } - return ''; -} -function parseTokenAmountURLParameter(urlParam) { - return typeof urlParam === 'string' && !isNaN(parseFloat(urlParam)) ? urlParam : ''; -} -function parseIndependentFieldURLParameter(urlParam) { - return typeof urlParam === 'string' && urlParam.toLowerCase() === 'output' ? Field.OUTPUT : Field.INPUT; -} -var ENS_NAME_REGEX = /^[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)?$/; -var ADDRESS_REGEX = /^0x[a-fA-F0-9]{40}$/; -function validatedRecipient(recipient) { - if (typeof recipient !== 'string') - return null; - var address = isAddress(recipient); - if (address) - return address; - if (ENS_NAME_REGEX.test(recipient)) - return recipient; - if (ADDRESS_REGEX.test(recipient)) - return recipient; - return null; -} -function queryParametersToSwapState(parsedQs) { - var _a; - var inputCurrency = parseCurrencyFromURLParameter(parsedQs.inputCurrency); - var outputCurrency = parseCurrencyFromURLParameter(parsedQs.outputCurrency); - if (inputCurrency === '' && outputCurrency === '') { - // default to ETH input - inputCurrency = 'ETH'; - } - else if (inputCurrency === outputCurrency) { - // clear output if identical - outputCurrency = ''; - } - var recipient = validatedRecipient(parsedQs.recipient); - return _a = {}, - _a[Field.INPUT] = { - currencyId: inputCurrency === '' ? null : inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : null, - }, - _a[Field.OUTPUT] = { - currencyId: outputCurrency === '' ? null : outputCurrency !== null && outputCurrency !== void 0 ? outputCurrency : null, - }, - _a.typedValue = parseTokenAmountURLParameter(parsedQs.exactAmount), - _a.independentField = parseIndependentFieldURLParameter(parsedQs.exactField), - _a.recipient = recipient, - _a; -} -// updates the swap state to use the defaults for a given network -function useDefaultsFromURLSearch() { - var chainId = useActiveWeb3React().chainId; - var dispatch = useAppDispatch(); - var parsedQs = useParsedQueryString(); - var _a = __read(useState(), 2), result = _a[0], setResult = _a[1]; - useEffect(function () { - var _a, _b; - if (!chainId) - return; - var parsed = queryParametersToSwapState(parsedQs); - var inputCurrencyId = (_a = parsed[Field.INPUT].currencyId) !== null && _a !== void 0 ? _a : undefined; - var outputCurrencyId = (_b = parsed[Field.OUTPUT].currencyId) !== null && _b !== void 0 ? _b : undefined; - dispatch(replaceSwapState({ - typedValue: parsed.typedValue, - field: parsed.independentField, - inputCurrencyId: inputCurrencyId, - outputCurrencyId: outputCurrencyId, - recipient: parsed.recipient, - })); - setResult({ inputCurrencyId: inputCurrencyId, outputCurrencyId: outputCurrencyId }); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [dispatch, chainId]); - return result; +/** + * Returns all the existing pools that should be considered for swapping between an input currency and an output currency + * @param currencyIn the input currency + * @param currencyOut the output currency + */ +function useV3SwapPools(currencyIn, currencyOut) { + var chainId = useActiveWeb3React().chainId + var allCurrencyCombinations = useAllCurrencyCombinations(currencyIn, currencyOut) + var allCurrencyCombinationsWithAllFees = useMemo( + function () { + return allCurrencyCombinations.reduce(function (list, _a) { + var _b = __read(_a, 2), + tokenA = _b[0], + tokenB = _b[1] + return chainId === SupportedChainId.MAINNET + ? list.concat([ + [tokenA, tokenB, FeeAmount.LOW], + [tokenA, tokenB, FeeAmount.MEDIUM], + [tokenA, tokenB, FeeAmount.HIGH], + ]) + : list.concat([ + [tokenA, tokenB, FeeAmount.LOWEST], + [tokenA, tokenB, FeeAmount.LOW], + [tokenA, tokenB, FeeAmount.MEDIUM], + [tokenA, tokenB, FeeAmount.HIGH], + ]) + }, []) + }, + [allCurrencyCombinations, chainId] + ) + var pools = usePools(allCurrencyCombinationsWithAllFees) + return useMemo( + function () { + return { + pools: pools + .filter(function (tuple) { + return tuple[0] === PoolState.EXISTS && tuple[1] !== null + }) + .map(function (_a) { + var _b = __read(_a, 2), + pool = _b[1] + return pool + }), + loading: pools.some(function (_a) { + var _b = __read(_a, 1), + state = _b[0] + return state === PoolState.LOADING + }), + } + }, + [pools] + ) +} + +/** + * Returns true if poolA is equivalent to poolB + * @param poolA one of the two pools + * @param poolB the other pool + */ +function poolEquals(poolA, poolB) { + return ( + poolA === poolB || + (poolA.token0.equals(poolB.token0) && poolA.token1.equals(poolB.token1) && poolA.fee === poolB.fee) + ) +} +function computeAllRoutes(currencyIn, currencyOut, pools, chainId, currentPath, allPaths, startCurrencyIn, maxHops) { + var e_1, _a + if (currentPath === void 0) { + currentPath = [] + } + if (allPaths === void 0) { + allPaths = [] + } + if (startCurrencyIn === void 0) { + startCurrencyIn = currencyIn + } + if (maxHops === void 0) { + maxHops = 2 + } + var tokenIn = currencyIn === null || currencyIn === void 0 ? void 0 : currencyIn.wrapped + var tokenOut = currencyOut === null || currencyOut === void 0 ? void 0 : currencyOut.wrapped + if (!tokenIn || !tokenOut) throw new Error('Missing tokenIn/tokenOut') + var _loop_1 = function (pool) { + if ( + !pool.involvesToken(tokenIn) || + currentPath.find(function (pathPool) { + return poolEquals(pool, pathPool) + }) + ) + return 'continue' + var outputToken = pool.token0.equals(tokenIn) ? pool.token1 : pool.token0 + if (outputToken.equals(tokenOut)) { + allPaths.push( + new Route$1( + __spreadArray(__spreadArray([], __read(currentPath), false), [pool], false), + startCurrencyIn, + currencyOut + ) + ) + } else if (maxHops > 1) { + computeAllRoutes( + outputToken, + currencyOut, + pools, + chainId, + __spreadArray(__spreadArray([], __read(currentPath), false), [pool], false), + allPaths, + startCurrencyIn, + maxHops - 1 + ) + } + } + try { + for (var pools_1 = __values(pools), pools_1_1 = pools_1.next(); !pools_1_1.done; pools_1_1 = pools_1.next()) { + var pool = pools_1_1.value + _loop_1(pool) + } + } catch (e_1_1) { + e_1 = { error: e_1_1 } + } finally { + try { + if (pools_1_1 && !pools_1_1.done && (_a = pools_1.return)) _a.call(pools_1) + } finally { + if (e_1) throw e_1.error + } + } + return allPaths +} +/** + * Returns all the routes from an input currency to an output currency + * @param currencyIn the input currency + * @param currencyOut the output currency + */ +function useAllV3Routes(currencyIn, currencyOut) { + var chainId = useActiveWeb3React().chainId + var _a = useV3SwapPools(currencyIn, currencyOut), + pools = _a.pools, + poolsLoading = _a.loading + return useMemo( + function () { + if (poolsLoading || !chainId || !pools || !currencyIn || !currencyOut) return { loading: true, routes: [] } + var routes = computeAllRoutes(currencyIn, currencyOut, pools, chainId, [], [], currencyIn, 2) + return { loading: false, routes } + }, + [chainId, currencyIn, currencyOut, pools, poolsLoading] + ) } -var initialState$2 = queryParametersToSwapState(parsedQueryString()); -var swap = createReducer(initialState$2, function (builder) { - return builder - .addCase(replaceSwapState, function (state, _a) { - var _b; - var _c = _a.payload, typedValue = _c.typedValue, recipient = _c.recipient, field = _c.field, inputCurrencyId = _c.inputCurrencyId, outputCurrencyId = _c.outputCurrencyId; - return _b = {}, - _b[Field.INPUT] = { - currencyId: inputCurrencyId !== null && inputCurrencyId !== void 0 ? inputCurrencyId : null, - }, - _b[Field.OUTPUT] = { - currencyId: outputCurrencyId !== null && outputCurrencyId !== void 0 ? outputCurrencyId : null, - }, - _b.independentField = field, - _b.typedValue = typedValue, - _b.recipient = recipient, - _b; - }) - .addCase(selectCurrency, function (state, _a) { - var _b, _c; - var _d = _a.payload, currencyId = _d.currencyId, field = _d.field; - var otherField = field === Field.INPUT ? Field.OUTPUT : Field.INPUT; - if (currencyId === state[otherField].currencyId) { - // the case where we have to swap the order - return __assign(__assign({}, state), (_b = { independentField: state.independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT }, _b[field] = { currencyId: currencyId }, _b[otherField] = { currencyId: state[field].currencyId }, _b)); - } - else { - // the normal case - return __assign(__assign({}, state), (_c = {}, _c[field] = { currencyId: currencyId }, _c)); - } - }) - .addCase(switchCurrencies, function (state) { - var _a; - return __assign(__assign({}, state), (_a = { independentField: state.independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT }, _a[Field.INPUT] = { currencyId: state[Field.OUTPUT].currencyId }, _a[Field.OUTPUT] = { currencyId: state[Field.INPUT].currencyId }, _a)); - }) - .addCase(typeInput, function (state, _a) { - var _b = _a.payload, field = _b.field, typedValue = _b.typedValue; - return __assign(__assign({}, state), { independentField: field, typedValue: typedValue }); - }) - .addCase(setRecipient, function (state, _a) { - var recipient = _a.payload.recipient; - state.recipient = recipient; - }); -}); +var _a$7 +var QUOTE_GAS_OVERRIDES = + ((_a$7 = {}), + (_a$7[SupportedChainId.ARBITRUM_ONE] = 25000000), + (_a$7[SupportedChainId.ARBITRUM_RINKEBY] = 25000000), + _a$7) +var DEFAULT_GAS_QUOTE = 2000000 +/** + * Returns the best v3 trade for a desired swap + * @param tradeType whether the swap is an exact in/out + * @param amountSpecified the exact amount to swap in/out + * @param otherCurrency the desired output/payment currency + */ +function useClientSideV3Trade(tradeType, amountSpecified, otherCurrency) { + var _a + var _b = __read( + useMemo( + function () { + return tradeType === TradeType.EXACT_INPUT + ? [ + amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, + otherCurrency, + ] + : [ + otherCurrency, + amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, + ] + }, + [tradeType, amountSpecified, otherCurrency] + ), + 2 + ), + currencyIn = _b[0], + currencyOut = _b[1] + var _c = useAllV3Routes(currencyIn, currencyOut), + routes = _c.routes, + routesLoading = _c.loading + var quoter = useV3Quoter() + var chainId = useActiveWeb3React().chainId + var quotesResults = useSingleContractWithCallData( + quoter, + amountSpecified + ? routes.map(function (route) { + return SwapQuoter.quoteCallParameters(route, amountSpecified, tradeType).calldata + }) + : [], + { + gasRequired: chainId + ? (_a = QUOTE_GAS_OVERRIDES[chainId]) !== null && _a !== void 0 + ? _a + : DEFAULT_GAS_QUOTE + : undefined, + } + ) + return useMemo( + function () { + if ( + !amountSpecified || + !currencyIn || + !currencyOut || + quotesResults.some(function (_a) { + var valid = _a.valid + return !valid + }) || + // skip when tokens are the same + (tradeType === TradeType.EXACT_INPUT + ? amountSpecified.currency.equals(currencyOut) + : amountSpecified.currency.equals(currencyIn)) + ) { + return { + state: TradeState.INVALID, + trade: undefined, + } + } + if ( + routesLoading || + quotesResults.some(function (_a) { + var loading = _a.loading + return loading + }) + ) { + return { + state: TradeState.LOADING, + trade: undefined, + } + } + var _a = quotesResults.reduce( + function (currentBest, _a, i) { + var result = _a.result + if (!result) return currentBest + // overwrite the current best if it's not defined or if this route is better + if (tradeType === TradeType.EXACT_INPUT) { + var amountOut_1 = CurrencyAmount.fromRawAmount(currencyOut, result.amountOut.toString()) + if ( + currentBest.amountOut === null || + JSBI.lessThan(currentBest.amountOut.quotient, amountOut_1.quotient) + ) { + return { + bestRoute: routes[i], + amountIn: amountSpecified, + amountOut: amountOut_1, + } + } + } else { + var amountIn_1 = CurrencyAmount.fromRawAmount(currencyIn, result.amountIn.toString()) + if ( + currentBest.amountIn === null || + JSBI.greaterThan(currentBest.amountIn.quotient, amountIn_1.quotient) + ) { + return { + bestRoute: routes[i], + amountIn: amountIn_1, + amountOut: amountSpecified, + } + } + } + return currentBest + }, + { + bestRoute: null, + amountIn: null, + amountOut: null, + } + ), + bestRoute = _a.bestRoute, + amountIn = _a.amountIn, + amountOut = _a.amountOut + if (!bestRoute || !amountIn || !amountOut) { + return { + state: TradeState.NO_ROUTE_FOUND, + trade: undefined, + } + } + return { + state: TradeState.VALID, + trade: new InterfaceTrade({ + v2Routes: [], + v3Routes: [ + { + routev3: bestRoute, + inputAmount: amountIn, + outputAmount: amountOut, + }, + ], + tradeType, + }), + } + }, + [amountSpecified, currencyIn, currencyOut, quotesResults, routes, routesLoading, tradeType] + ) +} -var now = function () { return new Date().getTime(); }; -var initialState$1 = {}; -var transactions = createReducer(initialState$1, function (builder) { - return builder - .addCase(updateVersion, function (transactions) { - // in case there are any transactions in the store with the old format, remove them - Object.keys(transactions).forEach(function (chainId) { - var chainTransactions = transactions[chainId]; - Object.keys(chainTransactions).forEach(function (hash) { - if (!('info' in chainTransactions[hash])) { - // clear old transactions that don't have the right format - delete chainTransactions[hash]; - } - }); - }); - }) - .addCase(addTransaction, function (transactions, _a) { - var _b, _c; - var _d = _a.payload, chainId = _d.chainId, from = _d.from, hash = _d.hash, info = _d.info; - if ((_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash]) { - throw Error('Attempted to add existing transaction.'); - } - var txs = (_c = transactions[chainId]) !== null && _c !== void 0 ? _c : {}; - txs[hash] = { hash: hash, info: info, from: from, addedTime: now() }; - transactions[chainId] = txs; - }) - .addCase(clearAllTransactions, function (transactions, _a) { - var chainId = _a.payload.chainId; - if (!transactions[chainId]) - return; - transactions[chainId] = {}; - }) - .addCase(checkedTransaction, function (transactions, _a) { - var _b; - var _c = _a.payload, chainId = _c.chainId, hash = _c.hash, blockNumber = _c.blockNumber; - var tx = (_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash]; - if (!tx) { - return; - } - if (!tx.lastCheckedBlockNumber) { - tx.lastCheckedBlockNumber = blockNumber; - } - else { - tx.lastCheckedBlockNumber = Math.max(blockNumber, tx.lastCheckedBlockNumber); - } - }) - .addCase(finalizeTransaction, function (transactions, _a) { - var _b; - var _c = _a.payload, hash = _c.hash, chainId = _c.chainId, receipt = _c.receipt; - var tx = (_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash]; - if (!tx) { - return; - } - tx.receipt = receipt; - tx.confirmedTime = now(); - }); -}); +var _a$6 +// Stablecoin amounts used when calculating spot price for a given currency. +// The amount is large enough to filter low liquidity pairs. +var STABLECOIN_AMOUNT_OUT = + ((_a$6 = {}), + (_a$6[SupportedChainId.MAINNET] = CurrencyAmount.fromRawAmount(USDC, 100000000000)), + (_a$6[SupportedChainId.ARBITRUM_ONE] = CurrencyAmount.fromRawAmount(USDC_ARBITRUM, 10000000000)), + (_a$6[SupportedChainId.OPTIMISM] = CurrencyAmount.fromRawAmount(DAI_OPTIMISM, 1e22)), + (_a$6[SupportedChainId.POLYGON] = CurrencyAmount.fromRawAmount(USDC_POLYGON, 10000000000)), + _a$6) +/** + * Returns the price in USDC of the input currency + * @param currency currency to compute the USDC price of + */ +function useUSDCPrice(currency) { + var chainId = currency === null || currency === void 0 ? void 0 : currency.chainId + var amountOut = chainId ? STABLECOIN_AMOUNT_OUT[chainId] : undefined + var stablecoin = amountOut === null || amountOut === void 0 ? void 0 : amountOut.currency + // TODO(#2808): remove dependency on useBestV2Trade + var v2USDCTrade = useBestV2Trade(TradeType.EXACT_OUTPUT, amountOut, currency, { + maxHops: 2, + }) + var v3USDCTrade = useClientSideV3Trade(TradeType.EXACT_OUTPUT, amountOut, currency) + return useMemo( + function () { + if (!currency || !stablecoin) { + return undefined + } + // handle usdc + if (currency === null || currency === void 0 ? void 0 : currency.wrapped.equals(stablecoin)) { + return new Price(stablecoin, stablecoin, '1', '1') + } + // use v2 price if available, v3 as fallback + if (v2USDCTrade) { + var _a = v2USDCTrade.route.midPrice, + numerator = _a.numerator, + denominator = _a.denominator + return new Price(currency, stablecoin, denominator, numerator) + } else if (v3USDCTrade.trade) { + var _b = v3USDCTrade.trade.routes[0].midPrice, + numerator = _b.numerator, + denominator = _b.denominator + return new Price(currency, stablecoin, denominator, numerator) + } + return undefined + }, + [currency, stablecoin, v2USDCTrade, v3USDCTrade.trade] + ) +} +function useUSDCValue(currencyAmount) { + var price = useUSDCPrice(currencyAmount === null || currencyAmount === void 0 ? void 0 : currencyAmount.currency) + return useMemo( + function () { + if (!price || !currencyAmount) return null + try { + return price.quote(currencyAmount) + } catch (error) { + return null + } + }, + [currencyAmount, price] + ) +} +/** + * + * @param fiatValue string representation of a USD amount + * @returns CurrencyAmount where currency is stablecoin on active chain + */ +function useStablecoinAmountFromFiatValue(fiatValue) { + var _a + var chainId = useActiveWeb3React().chainId + var stablecoin = chainId + ? (_a = STABLECOIN_AMOUNT_OUT[chainId]) === null || _a === void 0 + ? void 0 + : _a.currency + : undefined + if (fiatValue === null || fiatValue === undefined || !chainId || !stablecoin) { + return undefined + } + // trim for decimal precision when parsing + var parsedForDecimals = parseFloat(fiatValue).toFixed(stablecoin.decimals).toString() + try { + // parse USD string into CurrencyAmount based on stablecoin decimals + return tryParseCurrencyAmount(parsedForDecimals, stablecoin) + } catch (error) { + return undefined + } +} -var currentTimestamp = function () { return new Date().getTime(); }; -function pairKey(token0Address, token1Address) { - return token0Address + ";" + token1Address; -} -var initialState = { - matchesDarkMode: false, - userDarkMode: null, - userExpertMode: false, - userLocale: null, - userClientSideRouter: false, - userHideClosedPositions: false, - userSlippageTolerance: 'auto', - userSlippageToleranceHasBeenMigratedToAuto: true, - userDeadline: DEFAULT_DEADLINE_FROM_NOW, - tokens: {}, - pairs: {}, - timestamp: currentTimestamp(), - URLWarningVisible: true, - showSurveyPopup: undefined, -}; -var user = createReducer(initialState, function (builder) { - return builder - .addCase(updateVersion, function (state) { - // slippage isnt being tracked in local storage, reset to default - // noinspection SuspiciousTypeOfGuard - if (typeof state.userSlippageTolerance !== 'number' || - !Number.isInteger(state.userSlippageTolerance) || - state.userSlippageTolerance < 0 || - state.userSlippageTolerance > 5000) { - state.userSlippageTolerance = 'auto'; - } - else { - if (!state.userSlippageToleranceHasBeenMigratedToAuto && - [10, 50, 100].indexOf(state.userSlippageTolerance) !== -1) { - state.userSlippageTolerance = 'auto'; - state.userSlippageToleranceHasBeenMigratedToAuto = true; - } - } - // deadline isnt being tracked in local storage, reset to default - // noinspection SuspiciousTypeOfGuard - if (typeof state.userDeadline !== 'number' || - !Number.isInteger(state.userDeadline) || - state.userDeadline < 60 || - state.userDeadline > 180 * 60) { - state.userDeadline = DEFAULT_DEADLINE_FROM_NOW; - } - state.lastUpdateVersionTimestamp = currentTimestamp(); - }) - .addCase(updateUserDarkMode, function (state, action) { - state.userDarkMode = action.payload.userDarkMode; - state.timestamp = currentTimestamp(); - }) - .addCase(updateMatchesDarkMode, function (state, action) { - state.matchesDarkMode = action.payload.matchesDarkMode; - state.timestamp = currentTimestamp(); - }) - .addCase(updateUserExpertMode, function (state, action) { - state.userExpertMode = action.payload.userExpertMode; - state.timestamp = currentTimestamp(); - }) - .addCase(updateUserLocale, function (state, action) { - state.userLocale = action.payload.userLocale; - state.timestamp = currentTimestamp(); - }) - .addCase(updateUserSlippageTolerance, function (state, action) { - state.userSlippageTolerance = action.payload.userSlippageTolerance; - state.timestamp = currentTimestamp(); - }) - .addCase(updateUserDeadline, function (state, action) { - state.userDeadline = action.payload.userDeadline; - state.timestamp = currentTimestamp(); - }) - .addCase(updateUserClientSideRouter, function (state, action) { - state.userClientSideRouter = action.payload.userClientSideRouter; - }) - .addCase(updateHideClosedPositions, function (state, action) { - state.userHideClosedPositions = action.payload.userHideClosedPositions; - }) - .addCase(updateShowSurveyPopup, function (state, action) { - state.showSurveyPopup = action.payload.showSurveyPopup; - }) - .addCase(addSerializedToken, function (state, _a) { - var serializedToken = _a.payload.serializedToken; - if (!state.tokens) { - state.tokens = {}; - } - state.tokens[serializedToken.chainId] = state.tokens[serializedToken.chainId] || {}; - state.tokens[serializedToken.chainId][serializedToken.address] = serializedToken; - state.timestamp = currentTimestamp(); - }) - .addCase(removeSerializedToken, function (state, _a) { - var _b = _a.payload, address = _b.address, chainId = _b.chainId; - if (!state.tokens) { - state.tokens = {}; - } - state.tokens[chainId] = state.tokens[chainId] || {}; - delete state.tokens[chainId][address]; - state.timestamp = currentTimestamp(); - }) - .addCase(addSerializedPair, function (state, _a) { - var serializedPair = _a.payload.serializedPair; - if (serializedPair.token0.chainId === serializedPair.token1.chainId && - serializedPair.token0.address !== serializedPair.token1.address) { - var chainId = serializedPair.token0.chainId; - state.pairs[chainId] = state.pairs[chainId] || {}; - state.pairs[chainId][pairKey(serializedPair.token0.address, serializedPair.token1.address)] = serializedPair; - } - state.timestamp = currentTimestamp(); - }) - .addCase(removeSerializedPair, function (state, _a) { - var _b = _a.payload, chainId = _b.chainId, tokenAAddress = _b.tokenAAddress, tokenBAddress = _b.tokenBAddress; - if (state.pairs[chainId]) { - // just delete both keys if either exists - delete state.pairs[chainId][pairKey(tokenAAddress, tokenBAddress)]; - delete state.pairs[chainId][pairKey(tokenBAddress, tokenAAddress)]; - } - state.timestamp = currentTimestamp(); - }); -}); +var V3_SWAP_DEFAULT_SLIPPAGE = new Percent(50, 10000) // .50% +var ONE_TENTHS_PERCENT = new Percent(10, 10000) // .10% +/** + * Return a guess of the gas cost used in computing slippage tolerance for a given trade + * @param trade the trade for which to _guess_ the amount of gas it would cost to execute + */ +function guesstimateGas(trade) { + if (!!trade) { + return ( + 100000 + + trade.swaps.reduce(function (memo, swap) { + return swap.route.pools.length + memo + }, 0) * + 30000 + ) + } + return undefined +} +var MIN_AUTO_SLIPPAGE_TOLERANCE = new Percent(5, 1000) // 0.5% +var MAX_AUTO_SLIPPAGE_TOLERANCE = new Percent(25, 100) // 25% +/** + * Returns slippage tolerance based on values from current trade, gas estimates from api, and active network. + */ +function useAutoSlippageTolerance(trade) { + var chainId = useActiveWeb3React().chainId + var onL2 = chainId && L2_CHAIN_IDS.includes(chainId) + var outputDollarValue = useUSDCValue(trade === null || trade === void 0 ? void 0 : trade.outputAmount) + var nativeGasPrice = useGasPrice() + var gasEstimate = guesstimateGas(trade) + var nativeCurrency = useNativeCurrency() + var nativeCurrencyPrice = useUSDCPrice( + nativeCurrency !== null && nativeCurrency !== void 0 ? nativeCurrency : undefined + ) + return useMemo( + function () { + if (!trade || onL2) return ONE_TENTHS_PERCENT + var nativeGasCost = + nativeGasPrice && typeof gasEstimate === 'number' + ? JSBI.multiply(nativeGasPrice, JSBI.BigInt(gasEstimate)) + : undefined + var dollarGasCost = + nativeCurrency && nativeGasCost && nativeCurrencyPrice + ? nativeCurrencyPrice.quote(CurrencyAmount.fromRawAmount(nativeCurrency, nativeGasCost)) + : undefined + // if valid estimate from api and using api trade, use gas estimate from api + // NOTE - dont use gas estimate for L2s yet - need to verify accuracy + // if not, use local heuristic + var dollarCostToUse = + chainId && + SUPPORTED_GAS_ESTIMATE_CHAIN_IDS.includes(chainId) && + (trade === null || trade === void 0 ? void 0 : trade.gasUseEstimateUSD) + ? trade.gasUseEstimateUSD + : dollarGasCost + if (outputDollarValue && dollarCostToUse) { + // the rationale is that a user will not want their trade to fail for a loss due to slippage that is less than + // the cost of the gas of the failed transaction + var fraction = dollarCostToUse.asFraction.divide(outputDollarValue.asFraction) + var result = new Percent(fraction.numerator, fraction.denominator) + if (result.greaterThan(MAX_AUTO_SLIPPAGE_TOLERANCE)) return MAX_AUTO_SLIPPAGE_TOLERANCE + if (result.lessThan(MIN_AUTO_SLIPPAGE_TOLERANCE)) return MIN_AUTO_SLIPPAGE_TOLERANCE + return result + } + return V3_SWAP_DEFAULT_SLIPPAGE + }, + [trade, onL2, nativeGasPrice, gasEstimate, nativeCurrency, nativeCurrencyPrice, chainId, outputDollarValue] + ) +} -var _a$5; -var PERSISTED_KEYS = ['user', 'transactions', 'lists']; -var store = configureStore({ - reducer: (_a$5 = { - application: application, - user: user, - transactions: transactions, - swap: swap, - mint: mint, - mintV3: mintV3, - burn: burn, - burnV3: burnV3, - multicall: multicall.reducer, - lists: lists, - logs: logs - }, - _a$5[api$1.reducerPath] = api$1.reducer, - _a$5[routingApi.reducerPath] = routingApi.reducer, - _a$5), - middleware: function (getDefaultMiddleware) { - return getDefaultMiddleware({ thunk: true }) - .concat(api$1.middleware) - .concat(routingApi.middleware) - .concat(save({ states: PERSISTED_KEYS, debounce: 1000 })); - }, - preloadedState: load({ states: PERSISTED_KEYS, disableWarnings: process.env.NODE_ENV === 'test' }), -}); -store.dispatch(updateVersion()); -setupListeners(store.dispatch); +/** + * Transforms a Routing API quote into an array of routes that can be used to create + * a `Trade`. + */ +function computeRoutes(currencyIn, currencyOut, tradeType, quoteResult) { + if (!quoteResult || !quoteResult.route || !currencyIn || !currencyOut) return undefined + if (quoteResult.route.length === 0) return [] + var parsedTokenIn = parseToken(quoteResult.route[0][0].tokenIn) + var parsedTokenOut = parseToken(quoteResult.route[0][quoteResult.route[0].length - 1].tokenOut) + if (parsedTokenIn.address !== currencyIn.wrapped.address) return undefined + if (parsedTokenOut.address !== currencyOut.wrapped.address) return undefined + var parsedCurrencyIn = currencyIn.isNative ? nativeOnChain(currencyIn.chainId) : parsedTokenIn + var parsedCurrencyOut = currencyOut.isNative ? nativeOnChain(currencyOut.chainId) : parsedTokenOut + try { + return quoteResult.route.map(function (route) { + if (route.length === 0) { + throw new Error('Expected route to have at least one pair or pool') + } + var rawAmountIn = route[0].amountIn + var rawAmountOut = route[route.length - 1].amountOut + if (!rawAmountIn || !rawAmountOut) { + throw new Error('Expected both amountIn and amountOut to be present') + } + return { + routev3: isV3Route(route) ? new Route$1(route.map(parsePool), parsedCurrencyIn, parsedCurrencyOut) : null, + routev2: !isV3Route(route) ? new Route$2(route.map(parsePair), parsedCurrencyIn, parsedCurrencyOut) : null, + inputAmount: CurrencyAmount.fromRawAmount(parsedCurrencyIn, rawAmountIn), + outputAmount: CurrencyAmount.fromRawAmount(parsedCurrencyOut, rawAmountOut), + } + }) + } catch (e) { + // `Route` constructor may throw if inputs/outputs are temporarily out of sync + // (RTK-Query always returns the latest data which may not be the right inputs/outputs) + // This is not fatal and will fix itself in future render cycles + console.error(e) + return undefined + } +} +function transformRoutesToTrade(route, tradeType, gasUseEstimateUSD) { + var _a, _b + return new InterfaceTrade({ + v2Routes: + (_a = + route === null || route === void 0 + ? void 0 + : route + .filter(function (r) { + return r.routev2 !== null + }) + .map(function (_a) { + var routev2 = _a.routev2, + inputAmount = _a.inputAmount, + outputAmount = _a.outputAmount + return { routev2, inputAmount, outputAmount } + })) !== null && _a !== void 0 + ? _a + : [], + v3Routes: + (_b = + route === null || route === void 0 + ? void 0 + : route + .filter(function (r) { + return r.routev3 !== null + }) + .map(function (_a) { + var routev3 = _a.routev3, + inputAmount = _a.inputAmount, + outputAmount = _a.outputAmount + return { routev3, inputAmount, outputAmount } + })) !== null && _b !== void 0 + ? _b + : [], + tradeType, + gasUseEstimateUSD, + }) +} +var parseToken = function (_a) { + var address = _a.address, + chainId = _a.chainId, + decimals = _a.decimals, + symbol = _a.symbol + return new Token(chainId, address, parseInt(decimals.toString()), symbol) +} +var parsePool = function (_a) { + var fee = _a.fee, + sqrtRatioX96 = _a.sqrtRatioX96, + liquidity = _a.liquidity, + tickCurrent = _a.tickCurrent, + tokenIn = _a.tokenIn, + tokenOut = _a.tokenOut + return new Pool$1( + parseToken(tokenIn), + parseToken(tokenOut), + parseInt(fee), + sqrtRatioX96, + liquidity, + parseInt(tickCurrent) + ) +} +var parsePair = function (_a) { + var reserve0 = _a.reserve0, + reserve1 = _a.reserve1 + return new Pair( + CurrencyAmount.fromRawAmount(parseToken(reserve0.token), reserve0.quotient), + CurrencyAmount.fromRawAmount(parseToken(reserve1.token), reserve1.quotient) + ) +} +function isV3Route(route) { + return route[0].type === 'v3-pool' +} -var FallbackWrapper = styled.div(templateObject_1$19 || (templateObject_1$19 = __makeTemplateObject(["\n display: flex;\n flex-direction: column;\n width: 100%;\n align-items: center;\n z-index: 1;\n"], ["\n display: flex;\n flex-direction: column;\n width: 100%;\n align-items: center;\n z-index: 1;\n"]))); -var BodyWrapper$2 = styled.div(templateObject_2$R || (templateObject_2$R = __makeTemplateObject(["\n padding: 1rem;\n width: 100%;\n white-space: ;\n"], ["\n padding: 1rem;\n width: 100%;\n white-space: ;\n"]))); -var CodeBlockWrapper = styled.div(templateObject_3$J || (templateObject_3$J = __makeTemplateObject(["\n background: ", ";\n overflow: auto;\n white-space: pre;\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 border-radius: 24px;\n padding: 18px 24px;\n color: ", ";\n"], ["\n background: ", ";\n overflow: auto;\n white-space: pre;\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 border-radius: 24px;\n padding: 18px 24px;\n color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg0; -}, function (_a) { - var theme = _a.theme; - return theme.text1; -}); -var LinkWrapper = styled.div(templateObject_4$y || (templateObject_4$y = __makeTemplateObject(["\n color: ", ";\n padding: 6px 24px;\n"], ["\n color: ", ";\n padding: 6px 24px;\n"])), function (_a) { - var theme = _a.theme; - return theme.blue1; -}); -var SomethingWentWrongWrapper = styled.div(templateObject_5$q || (templateObject_5$q = __makeTemplateObject(["\n padding: 6px 24px;\n"], ["\n padding: 6px 24px;\n"]))); -var IS_UNISWAP = window.location.hostname === 'app.uniswap.org'; -var ErrorBoundary = /** @class */ (function (_super) { - __extends(ErrorBoundary, _super); - function ErrorBoundary(props) { - var _this = _super.call(this, props) || this; - _this.state = { error: null }; - return _this; - } - ErrorBoundary.getDerivedStateFromError = function (error) { - return { error: error }; - }; - ErrorBoundary.prototype.componentDidCatch = function (error, errorInfo) { - ReactGA.exception(__assign(__assign(__assign({}, error), errorInfo), { fatal: true })); - }; - ErrorBoundary.prototype.render = function () { - var error = this.state.error; - if (error !== null) { - var encodedBody = encodeURIComponent(issueBody(error)); - return (jsx(FallbackWrapper, { children: jsx(BodyWrapper$2, { children: jsxs(AutoColumn, __assign({ gap: 'md' }, { children: [jsx(SomethingWentWrongWrapper, { children: jsx(ThemedText.Label, __assign({ fontSize: 24, fontWeight: 600 }, { children: jsx(Trans, { children: "Something went wrong" }, void 0) }), void 0) }, void 0), jsx(CodeBlockWrapper, { children: jsx("code", { children: jsx(ThemedText.Main, __assign({ fontSize: 10 }, { children: error.stack }), void 0) }, void 0) }, void 0), IS_UNISWAP ? (jsxs(AutoRow, { children: [jsx(LinkWrapper, { children: jsx(ExternalLink, __assign({ id: "create-github-issue-link", href: "https://github.com/Uniswap/uniswap-interface/issues/new?assignees=&labels=bug&body=" + encodedBody + "&title=" + encodeURIComponent("Crash report: `" + error.name + (error.message && ": " + error.message) + "`"), target: "_blank" }, { children: jsxs(ThemedText.Link, __assign({ fontSize: 16 }, { children: [jsx(Trans, { children: "Create an issue on GitHub" }, void 0), jsx("span", { children: "\u2197" }, void 0)] }), void 0) }), void 0) }, void 0), jsx(LinkWrapper, { children: jsx(ExternalLink, __assign({ id: "get-support-on-discord", href: "https://discord.gg/FCfyBSbCU5", target: "_blank" }, { children: jsxs(ThemedText.Link, __assign({ fontSize: 16 }, { children: [jsx(Trans, { children: "Get support on Discord" }, void 0), jsx("span", { children: "\u2197" }, void 0)] }), void 0) }), void 0) }, void 0)] }, void 0)) : null] }), void 0) }, void 0) }, void 0)); - } - return this.props.children; - }; - return ErrorBoundary; -}(React__default.Component)); -function getRelevantState() { - var path = window.location.hash; - if (!path.startsWith('#/')) { - return null; - } - var pieces = path.substring(2).split(/[/\\?]/); - switch (pieces[0]) { - case 'swap': - return 'swap'; - case 'add': - if (pieces[1] === 'v2') - return 'mint'; - else - return 'mintV3'; - case 'remove': - if (pieces[1] === 'v2') - return 'burn'; - else - return 'burnV3'; - } - return null; -} -function issueBody(error) { - var relevantState = getRelevantState(); - var deviceData = userAgent; - return "## URL\n \n" + window.location.href + "\n\n" + (relevantState - ? "## `" + relevantState + "` state\n \n```json\n" + JSON.stringify(store.getState()[relevantState], null, 2) + "\n```\n" - : '') + "\n" + (error.name && - "## Error\n\n```\n" + error.name + (error.message && ": " + error.message) + "\n```\n") + "\n" + (error.stack && - "## Stacktrace\n\n```\n" + error.stack + "\n```\n") + "\n" + (deviceData && - "## Device data\n\n```json\n" + JSON.stringify(deviceData, null, 2) + "\n```\n") + "\n"; -} -var templateObject_1$19, templateObject_2$R, templateObject_3$J, templateObject_4$y, templateObject_5$q; +function useFreshData(data, dataBlockNumber, maxBlockAge) { + if (maxBlockAge === void 0) { + maxBlockAge = 10 + } + var localBlockNumber = useBlockNumber() + if (!localBlockNumber) return undefined + if (localBlockNumber - dataBlockNumber > maxBlockAge) { + return undefined + } + return data +} +/** + * Returns query arguments for the Routing API query or undefined if the + * query should be skipped. + */ +function useRoutingAPIArguments(_a) { + var tokenIn = _a.tokenIn, + tokenOut = _a.tokenOut, + amount = _a.amount, + tradeType = _a.tradeType + var _b = __read(useClientSideRouter(), 1), + clientSideRouter = _b[0] + return useMemo( + function () { + return !tokenIn || !tokenOut || !amount || tokenIn.equals(tokenOut) + ? undefined + : { + amount: amount.quotient.toString(), + tokenInAddress: tokenIn.wrapped.address, + tokenInChainId: tokenIn.wrapped.chainId, + tokenInDecimals: tokenIn.wrapped.decimals, + tokenInSymbol: tokenIn.wrapped.symbol, + tokenOutAddress: tokenOut.wrapped.address, + tokenOutChainId: tokenOut.wrapped.chainId, + tokenOutDecimals: tokenOut.wrapped.decimals, + tokenOutSymbol: tokenOut.wrapped.symbol, + useClientSideRouter: clientSideRouter, + type: tradeType === TradeType.EXACT_INPUT ? 'exactIn' : 'exactOut', + } + }, + [amount, clientSideRouter, tokenIn, tokenOut, tradeType] + ) +} +/** + * Returns the best trade by invoking the routing api or the smart order router on the client + * @param tradeType whether the swap is an exact in/out + * @param amountSpecified the exact amount to swap in/out + * @param otherCurrency the desired output/payment currency + */ +function useRoutingAPITrade(tradeType, amountSpecified, otherCurrency) { + var _a + var _b = __read( + useMemo( + function () { + return tradeType === TradeType.EXACT_INPUT + ? [ + amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, + otherCurrency, + ] + : [ + otherCurrency, + amountSpecified === null || amountSpecified === void 0 ? void 0 : amountSpecified.currency, + ] + }, + [amountSpecified, otherCurrency, tradeType] + ), + 2 + ), + currencyIn = _b[0], + currencyOut = _b[1] + var queryArgs = useRoutingAPIArguments({ + tokenIn: currencyIn, + tokenOut: currencyOut, + amount: amountSpecified, + tradeType, + }) + var _c = useGetQuoteQuery(queryArgs !== null && queryArgs !== void 0 ? queryArgs : skipToken, { + pollingInterval: ms(templateObject_1$1a || (templateObject_1$1a = __makeTemplateObject(['15s'], ['15s']))), + refetchOnFocus: true, + }), + isLoading = _c.isLoading, + isError = _c.isError, + data = _c.data + var quoteResult = useFreshData(data, Number(data === null || data === void 0 ? void 0 : data.blockNumber) || 0) + var route = useMemo( + function () { + return computeRoutes(currencyIn, currencyOut, tradeType, quoteResult) + }, + [currencyIn, currencyOut, quoteResult, tradeType] + ) + // get USD gas cost of trade in active chains stablecoin amount + var gasUseEstimateUSD = + (_a = useStablecoinAmountFromFiatValue( + quoteResult === null || quoteResult === void 0 ? void 0 : quoteResult.gasUseEstimateUSD + )) !== null && _a !== void 0 + ? _a + : null + return useMemo( + function () { + if (!currencyIn || !currencyOut) { + return { + state: TradeState.INVALID, + trade: undefined, + } + } + if (isLoading && !quoteResult) { + // only on first hook render + return { + state: TradeState.LOADING, + trade: undefined, + } + } + var otherAmount = + tradeType === TradeType.EXACT_INPUT + ? currencyOut && quoteResult + ? CurrencyAmount.fromRawAmount(currencyOut, quoteResult.quote) + : undefined + : currencyIn && quoteResult + ? CurrencyAmount.fromRawAmount(currencyIn, quoteResult.quote) + : undefined + if (isError || !otherAmount || !route || route.length === 0 || !queryArgs) { + return { + state: TradeState.NO_ROUTE_FOUND, + trade: undefined, + } + } + try { + var trade = transformRoutesToTrade(route, tradeType, gasUseEstimateUSD) + return { + // always return VALID regardless of isFetching status + state: TradeState.VALID, + trade, + } + } catch (e) { + console.debug('transformRoutesToTrade failed: ', e) + return { state: TradeState.INVALID, trade: undefined } + } + }, + [currencyIn, currencyOut, isLoading, quoteResult, tradeType, isError, route, queryArgs, gasUseEstimateUSD] + ) +} +var templateObject_1$1a -function useModalOpen(modal) { - var openModal = useAppSelector(function (state) { return state.application.openModal; }); - return openModal === modal; -} -function useToggleModal(modal) { - var open = useModalOpen(modal); - var dispatch = useAppDispatch(); - return useCallback(function () { return dispatch(setOpenModal(open ? null : modal)); }, [dispatch, modal, open]); -} -function useWalletModalToggle() { - return useToggleModal(ApplicationModal.WALLET); -} -function useToggleSettingsMenu() { - return useToggleModal(ApplicationModal.SETTINGS); -} -function useShowClaimPopup() { - return useModalOpen(ApplicationModal.CLAIM_POPUP); -} -function useToggleShowClaimPopup() { - return useToggleModal(ApplicationModal.CLAIM_POPUP); -} -function useToggleSelfClaimModal() { - return useToggleModal(ApplicationModal.SELF_CLAIM); -} -function useTogglePrivacyPolicy() { - return useToggleModal(ApplicationModal.PRIVACY_POLICY); -} -// returns a function that allows adding a popup -function useAddPopup() { - var dispatch = useAppDispatch(); - return useCallback(function (content, key, removeAfterMs) { - dispatch(addPopup({ content: content, key: key, removeAfterMs: removeAfterMs !== null && removeAfterMs !== void 0 ? removeAfterMs : DEFAULT_TXN_DISMISS_MS })); - }, [dispatch]); -} -// returns a function that allows removing a popup via its key -function useRemovePopup() { - var dispatch = useAppDispatch(); - return useCallback(function (key) { - dispatch(removePopup({ key: key })); - }, [dispatch]); -} -// get the list of active popups -function useActivePopups() { - var list = useAppSelector(function (state) { return state.application.popupList; }); - return useMemo(function () { return list.filter(function (item) { return item.show; }); }, [list]); +var AUTO_ROUTER_SUPPORTED_CHAINS = Object.values(ChainId) + +function useAutoRouterSupported() { + var chainId = useActiveWeb3React().chainId + return Boolean(chainId && AUTO_ROUTER_SUPPORTED_CHAINS.includes(chainId)) } -var _path$5, _path2$2, _path3$1, _path4, _path5, _path6, _path7, _path8, _path9; +/** + * Returns the best v2+v3 trade for a desired swap. + * @param tradeType whether the swap is an exact in/out + * @param amountSpecified the exact amount to swap in/out + * @param otherCurrency the desired output/payment currency + */ +function useBestTrade(tradeType, amountSpecified, otherCurrency) { + var autoRouterSupported = useAutoRouterSupported() + var isWindowVisible = useIsWindowVisible() + var _a = __read( + useDebounce( + useMemo( + function () { + return [amountSpecified, otherCurrency] + }, + [amountSpecified, otherCurrency] + ), + 200 + ), + 2 + ), + debouncedAmount = _a[0], + debouncedOtherCurrency = _a[1] + var routingAPITrade = useRoutingAPITrade( + tradeType, + autoRouterSupported && isWindowVisible ? debouncedAmount : undefined, + debouncedOtherCurrency + ) + var isLoading = amountSpecified !== undefined && debouncedAmount === undefined + // consider trade debouncing when inputs/outputs do not match + var debouncing = + routingAPITrade.trade && + amountSpecified && + (tradeType === TradeType.EXACT_INPUT + ? !routingAPITrade.trade.inputAmount.equalTo(amountSpecified) || + !amountSpecified.currency.equals(routingAPITrade.trade.inputAmount.currency) || + !(debouncedOtherCurrency === null || debouncedOtherCurrency === void 0 + ? void 0 + : debouncedOtherCurrency.equals(routingAPITrade.trade.outputAmount.currency)) + : !routingAPITrade.trade.outputAmount.equalTo(amountSpecified) || + !amountSpecified.currency.equals(routingAPITrade.trade.outputAmount.currency) || + !(debouncedOtherCurrency === null || debouncedOtherCurrency === void 0 + ? void 0 + : debouncedOtherCurrency.equals(routingAPITrade.trade.inputAmount.currency))) + var useFallback = !autoRouterSupported || (!debouncing && routingAPITrade.state === TradeState.NO_ROUTE_FOUND) + // only use client side router if routing api trade failed or is not supported + var bestV3Trade = useClientSideV3Trade( + tradeType, + useFallback ? debouncedAmount : undefined, + useFallback ? debouncedOtherCurrency : undefined + ) + // only return gas estimate from api if routing api trade is used + return useMemo( + function () { + return __assign( + __assign( + __assign({}, useFallback ? bestV3Trade : routingAPITrade), + debouncing ? { state: TradeState.SYNCING } : {} + ), + isLoading ? { state: TradeState.LOADING } : {} + ) + }, + [bestV3Trade, debouncing, isLoading, routingAPITrade, useFallback] + ) +} -function _extends$7() { _extends$7 = 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$7.apply(this, arguments); } +// gets the current timestamp from the blockchain +function useCurrentBlockTimestamp() { + var _a, _b + var multicall = useInterfaceMulticall() + return (_b = + (_a = useSingleCallResult(multicall, 'getCurrentBlockTimestamp')) === null || _a === void 0 + ? void 0 + : _a.result) === null || _b === void 0 + ? void 0 + : _b[0] +} -const SvgLogo = props => /*#__PURE__*/React.createElement("svg", _extends$7({ - width: 14, - height: 15, - viewBox: "0 0 14 15", - fill: "black", - xmlns: "http://www.w3.org/2000/svg" -}, props), /*#__PURE__*/React.createElement("g", { - style: { - mixBlendMode: "darken" +new Interface(abi$6) +;({ + 1: [ + { + tokens: [WRAPPED_NATIVE_CURRENCY[1], DAI], + stakingRewardAddress: '0xa1484C3aa22a66C62b77E0AE78E15258bd0cB711', + }, + { + tokens: [WRAPPED_NATIVE_CURRENCY[1], USDC], + stakingRewardAddress: '0x7FBa4B8Dc5E7616e59622806932DBea72537A56b', + }, + { + tokens: [WRAPPED_NATIVE_CURRENCY[1], USDT], + stakingRewardAddress: '0x6C3e4cb2E96B01F4b866965A91ed4437839A121a', + }, + { + tokens: [WRAPPED_NATIVE_CURRENCY[1], WBTC], + stakingRewardAddress: '0xCA35e32e7926b96A9988f61d510E038108d8068e', + }, + ], +}) + +// mimics useAllBalances +function useAllTokenBalances() { + var account = useActiveWeb3React().account + var allTokens = useAllTokens() + var allTokensArray = useMemo( + function () { + return Object.values(allTokens !== null && allTokens !== void 0 ? allTokens : {}) + }, + [allTokens] + ) + var balances = useTokenBalances(account !== null && account !== void 0 ? account : undefined, allTokensArray) + return balances !== null && balances !== void 0 ? balances : {} +} + +function useSwapState() { + return useAppSelector(function (state) { + return state.swap + }) +} +function useSwapActionHandlers() { + var dispatch = useAppDispatch() + var onCurrencySelection = useCallback( + function (field, currency) { + dispatch( + selectCurrency({ + field, + currencyId: currency.isToken ? currency.address : currency.isNative ? 'ETH' : '', + }) + ) + }, + [dispatch] + ) + var onSwitchTokens = useCallback( + function () { + dispatch(switchCurrencies()) + }, + [dispatch] + ) + var onUserInput = useCallback( + function (field, typedValue) { + dispatch(typeInput({ field, typedValue })) + }, + [dispatch] + ) + var onChangeRecipient = useCallback( + function (recipient) { + dispatch(setRecipient({ recipient })) + }, + [dispatch] + ) + return { + onSwitchTokens, + onCurrencySelection, + onUserInput, + onChangeRecipient, } -}, _path$5 || (_path$5 = /*#__PURE__*/React.createElement("path", { - d: "M4.15217 1.55141C3.96412 1.52242 3.95619 1.51902 4.04468 1.5055C4.21427 1.47958 4.61472 1.51491 4.89067 1.58012C5.53489 1.73232 6.12109 2.12221 6.74683 2.81466L6.91307 2.99862L7.15088 2.96062C8.15274 2.8006 9.17194 2.92778 10.0244 3.31918C10.2589 3.42686 10.6287 3.64121 10.6749 3.69629C10.6896 3.71384 10.7166 3.82684 10.7349 3.94742C10.7982 4.36458 10.7665 4.68434 10.6382 4.92317C10.5683 5.05313 10.5644 5.09432 10.6114 5.20554C10.6489 5.2943 10.7534 5.35999 10.8569 5.35985C11.0687 5.35956 11.2968 5.0192 11.4024 4.54561L11.4444 4.3575L11.5275 4.45109C11.9835 4.96459 12.3417 5.66488 12.4032 6.16335L12.4192 6.29332L12.3426 6.17517C12.2107 5.97186 12.0781 5.83346 11.9084 5.72183C11.6024 5.52062 11.2789 5.45215 10.4222 5.40727C9.64839 5.36675 9.21045 5.30106 8.77621 5.16032C8.03738 4.9209 7.66493 4.60204 6.78729 3.4576C6.39748 2.94928 6.15654 2.66804 5.91687 2.44155C5.37228 1.92691 4.83716 1.65701 4.15217 1.55141Z" -})), _path2$2 || (_path2$2 = /*#__PURE__*/React.createElement("path", { - d: "M10.8494 2.68637C10.8689 2.34575 10.9153 2.12108 11.0088 1.9159C11.0458 1.83469 11.0804 1.76822 11.0858 1.76822C11.0911 1.76822 11.075 1.82816 11.05 1.90142C10.9821 2.10054 10.9709 2.3729 11.0177 2.68978C11.0771 3.09184 11.1109 3.14985 11.5385 3.58416C11.739 3.78788 11.9723 4.0448 12.0568 4.15511L12.2106 4.35568L12.0568 4.21234C11.8688 4.03705 11.4364 3.6952 11.3409 3.64633C11.2768 3.61356 11.2673 3.61413 11.2278 3.65321C11.1914 3.68922 11.1837 3.74333 11.1787 3.99915C11.1708 4.39786 11.1161 4.65377 10.9842 4.90965C10.9128 5.04805 10.9015 5.01851 10.9661 4.8623C11.0143 4.74566 11.0192 4.69439 11.0189 4.30842C11.0181 3.53291 10.9255 3.34647 10.3823 3.02709C10.2447 2.94618 10.0179 2.8295 9.87839 2.76778C9.73887 2.70606 9.62805 2.6523 9.63208 2.64828C9.64746 2.63307 10.1772 2.78675 10.3905 2.86828C10.7077 2.98954 10.76 3.00526 10.7985 2.99063C10.8244 2.98082 10.8369 2.90608 10.8494 2.68637Z" -})), _path3$1 || (_path3$1 = /*#__PURE__*/React.createElement("path", { - d: "M4.51745 4.01304C4.13569 3.49066 3.89948 2.68973 3.95062 2.091L3.96643 1.90572L4.05333 1.92148C4.21652 1.95106 4.49789 2.05515 4.62964 2.13469C4.9912 2.35293 5.14773 2.64027 5.30697 3.37811C5.35362 3.59423 5.41482 3.8388 5.44298 3.9216C5.48831 4.05487 5.65962 4.36617 5.7989 4.56834C5.89922 4.71395 5.83258 4.78295 5.61082 4.76305C5.27215 4.73267 4.8134 4.41799 4.51745 4.01304Z" -})), _path4 || (_path4 = /*#__PURE__*/React.createElement("path", { - d: "M10.3863 7.90088C8.60224 7.18693 7.97389 6.56721 7.97389 5.52157C7.97389 5.36769 7.97922 5.24179 7.98571 5.24179C7.99221 5.24179 8.06124 5.29257 8.1391 5.35465C8.50088 5.64305 8.906 5.76623 10.0275 5.92885C10.6875 6.02455 11.0589 6.10185 11.4015 6.21477C12.4904 6.57371 13.1641 7.30212 13.3248 8.29426C13.3715 8.58255 13.3441 9.12317 13.2684 9.4081C13.2087 9.63315 13.0263 10.0388 12.9779 10.0544C12.9645 10.0587 12.9514 10.0076 12.9479 9.93809C12.9296 9.56554 12.7402 9.20285 12.4221 8.93116C12.0604 8.62227 11.5745 8.37633 10.3863 7.90088Z" -})), _path5 || (_path5 = /*#__PURE__*/React.createElement("path", { - d: "M9.13385 8.19748C9.11149 8.06527 9.07272 7.89643 9.04769 7.82228L9.00217 7.68748L9.08672 7.7818C9.20374 7.91233 9.2962 8.07937 9.37457 8.30185C9.43438 8.47165 9.44111 8.52215 9.44066 8.79807C9.4402 9.06896 9.43273 9.12575 9.3775 9.27858C9.29042 9.51959 9.18233 9.69048 9.00097 9.87391C8.67507 10.2036 8.25607 10.3861 7.65143 10.4618C7.54633 10.4749 7.24 10.4971 6.97069 10.511C6.292 10.5461 5.84531 10.6186 5.44393 10.7587C5.38623 10.7788 5.3347 10.7911 5.32947 10.7859C5.31323 10.7698 5.58651 10.6079 5.81223 10.4998C6.1305 10.3474 6.44733 10.2643 7.15719 10.1468C7.50785 10.0887 7.86998 10.0183 7.96194 9.99029C8.83033 9.72566 9.27671 9.04276 9.13385 8.19748Z" -})), _path6 || (_path6 = /*#__PURE__*/React.createElement("path", { - d: "M9.95169 9.64109C9.71465 9.13463 9.66022 8.64564 9.79009 8.18961C9.80399 8.14088 9.82632 8.101 9.83976 8.101C9.85319 8.101 9.90913 8.13105 9.96404 8.16777C10.0733 8.24086 10.2924 8.36395 10.876 8.68023C11.6043 9.0749 12.0196 9.3805 12.302 9.72965C12.5493 10.0354 12.7023 10.3837 12.776 10.8084C12.8177 11.0489 12.7932 11.6277 12.7311 11.8699C12.5353 12.6337 12.0802 13.2336 11.4311 13.5837C11.336 13.635 11.2506 13.6771 11.2414 13.6773C11.2321 13.6775 11.2668 13.5899 11.3184 13.4827C11.5367 13.029 11.5616 12.5877 11.3965 12.0965C11.2954 11.7957 11.0893 11.4287 10.6732 10.8084C10.1893 10.0873 10.0707 9.89539 9.95169 9.64109Z" -})), _path7 || (_path7 = /*#__PURE__*/React.createElement("path", { - d: "M3.25046 12.3737C3.91252 11.8181 4.73629 11.4234 5.48666 11.3022C5.81005 11.25 6.34877 11.2707 6.64823 11.3469C7.12824 11.469 7.55763 11.7425 7.78094 12.0683C7.99918 12.3867 8.09281 12.6642 8.19029 13.2816C8.22875 13.5252 8.27057 13.7697 8.28323 13.8251C8.35644 14.1451 8.4989 14.4008 8.67544 14.5293C8.95583 14.7333 9.43865 14.7459 9.91362 14.5618C9.99423 14.5305 10.0642 14.5089 10.0691 14.5138C10.0864 14.5308 9.84719 14.6899 9.67847 14.7737C9.45143 14.8864 9.2709 14.93 9.03102 14.93C8.59601 14.93 8.23486 14.7101 7.9335 14.2616C7.87419 14.1733 7.7409 13.909 7.63729 13.6741C7.3191 12.9528 7.16199 12.7331 6.79255 12.4926C6.47104 12.2834 6.05641 12.2459 5.74449 12.3979C5.33475 12.5976 5.22043 13.118 5.51389 13.4478C5.63053 13.5789 5.84803 13.6919 6.02588 13.7139C6.35861 13.7551 6.64455 13.5035 6.64455 13.1696C6.64455 12.9528 6.56071 12.8291 6.34966 12.7344C6.0614 12.6051 5.75156 12.7562 5.75304 13.0254C5.75368 13.1402 5.80396 13.2122 5.91971 13.2643C5.99397 13.2977 5.99569 13.3003 5.93514 13.2878C5.67066 13.2333 5.6087 12.9164 5.82135 12.706C6.07667 12.4535 6.60461 12.5649 6.78591 12.9097C6.86208 13.0545 6.87092 13.3429 6.80451 13.517C6.6559 13.9068 6.22256 14.1117 5.78297 14.0002C5.48368 13.9242 5.36181 13.842 5.00097 13.4726C4.37395 12.8306 4.13053 12.7062 3.22657 12.566L3.05335 12.5391L3.25046 12.3737Z" -})), _path8 || (_path8 = /*#__PURE__*/React.createElement("path", { - fillRule: "evenodd", - clipRule: "evenodd", - d: "M0.308383 0.883984C2.40235 3.40996 3.84457 4.45213 4.00484 4.67231C4.13717 4.85412 4.08737 5.01757 3.86067 5.14567C3.7346 5.21689 3.47541 5.28905 3.34564 5.28905C3.19887 5.28905 3.14847 5.23278 3.14847 5.23278C3.06337 5.15255 3.01544 5.16658 2.5784 4.39555C1.97166 3.45981 1.46389 2.68357 1.45004 2.67057C1.41801 2.64052 1.41856 2.64153 2.51654 4.59413C2.69394 5.0011 2.55182 5.15049 2.55182 5.20845C2.55182 5.32636 2.51946 5.38834 2.37311 5.55059C2.12914 5.8211 2.02008 6.12505 1.94135 6.7541C1.8531 7.45926 1.60492 7.95737 0.917156 8.80989C0.514562 9.30893 0.448686 9.4004 0.3471 9.60153C0.219144 9.85482 0.183961 9.99669 0.169701 10.3165C0.154629 10.6547 0.183983 10.8732 0.287934 11.1965C0.378939 11.4796 0.473932 11.6665 0.716778 12.0403C0.926351 12.3629 1.04702 12.6027 1.04702 12.6965C1.04702 12.7711 1.06136 12.7712 1.38611 12.6983C2.16328 12.5239 2.79434 12.2171 3.14925 11.8411C3.36891 11.6084 3.42048 11.4799 3.42215 11.1611C3.42325 10.9525 3.41587 10.9088 3.35914 10.7888C3.2668 10.5935 3.09869 10.4311 2.72817 10.1794C2.2427 9.84953 2.03534 9.58398 1.97807 9.21878C1.93108 8.91913 1.98559 8.70771 2.25416 8.14825C2.53214 7.56916 2.60103 7.32239 2.64763 6.73869C2.67773 6.36158 2.71941 6.21286 2.82842 6.09348C2.94212 5.969 3.04447 5.92684 3.32584 5.88863C3.78457 5.82635 4.07667 5.70839 4.31677 5.48849C4.52505 5.29772 4.61221 5.11391 4.62558 4.8372L4.63574 4.62747L4.51934 4.49259C4.09783 4.00411 0.0261003 0.5 0.000160437 0.5C-0.00538105 0.5 0.133325 0.672804 0.308383 0.883984ZM1.28364 10.6992C1.37894 10.5314 1.3283 10.3158 1.16889 10.2104C1.01827 10.1109 0.78428 10.1578 0.78428 10.2875C0.78428 10.3271 0.806303 10.3559 0.855937 10.3813C0.939514 10.424 0.945581 10.4721 0.879823 10.5703C0.81323 10.6698 0.818604 10.7573 0.894991 10.8167C1.0181 10.9125 1.19237 10.8598 1.28364 10.6992Z" -})), _path9 || (_path9 = /*#__PURE__*/React.createElement("path", { - fillRule: "evenodd", - clipRule: "evenodd", - d: "M4.92523 5.99865C4.70988 6.06439 4.50054 6.29124 4.43574 6.5291C4.39621 6.67421 4.41864 6.92875 4.47785 7.00736C4.57351 7.13433 4.66602 7.16778 4.91651 7.16603C5.40693 7.16263 5.83327 6.95358 5.88284 6.69224C5.92347 6.47801 5.73622 6.18112 5.4783 6.05078C5.34521 5.98355 5.06217 5.95688 4.92523 5.99865ZM5.49853 6.44422C5.57416 6.33741 5.54107 6.22198 5.41245 6.14391C5.1675 5.99525 4.79708 6.11827 4.79708 6.34826C4.79708 6.46274 4.99025 6.58765 5.16731 6.58765C5.28516 6.58765 5.44644 6.5178 5.49853 6.44422Z" -})))); -var UNISWAP_LOGO_URL = "data:image/svg+xml,%3Csvg%20width%3D%2214%22%20height%3D%2215%22%20viewBox%3D%220%200%2014%2015%22%20fill%3D%22black%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20style%3D%22mix-blend-mode%3Adarken%22%3E%3Cpath%20d%3D%22M4.15217%201.55141C3.96412%201.52242%203.95619%201.51902%204.04468%201.5055C4.21427%201.47958%204.61472%201.51491%204.89067%201.58012C5.53489%201.73232%206.12109%202.12221%206.74683%202.81466L6.91307%202.99862L7.15088%202.96062C8.15274%202.8006%209.17194%202.92778%2010.0244%203.31918C10.2589%203.42686%2010.6287%203.64121%2010.6749%203.69629C10.6896%203.71384%2010.7166%203.82684%2010.7349%203.94742C10.7982%204.36458%2010.7665%204.68434%2010.6382%204.92317C10.5683%205.05313%2010.5644%205.09432%2010.6114%205.20554C10.6489%205.2943%2010.7534%205.35999%2010.8569%205.35985C11.0687%205.35956%2011.2968%205.0192%2011.4024%204.54561L11.4444%204.3575L11.5275%204.45109C11.9835%204.96459%2012.3417%205.66488%2012.4032%206.16335L12.4192%206.29332L12.3426%206.17517C12.2107%205.97186%2012.0781%205.83346%2011.9084%205.72183C11.6024%205.52062%2011.2789%205.45215%2010.4222%205.40727C9.64839%205.36675%209.21045%205.30106%208.77621%205.16032C8.03738%204.9209%207.66493%204.60204%206.78729%203.4576C6.39748%202.94928%206.15654%202.66804%205.91687%202.44155C5.37228%201.92691%204.83716%201.65701%204.15217%201.55141Z%22%2F%3E%3Cpath%20d%3D%22M10.8494%202.68637C10.8689%202.34575%2010.9153%202.12108%2011.0088%201.9159C11.0458%201.83469%2011.0804%201.76822%2011.0858%201.76822C11.0911%201.76822%2011.075%201.82816%2011.05%201.90142C10.9821%202.10054%2010.9709%202.3729%2011.0177%202.68978C11.0771%203.09184%2011.1109%203.14985%2011.5385%203.58416C11.739%203.78788%2011.9723%204.0448%2012.0568%204.15511L12.2106%204.35568L12.0568%204.21234C11.8688%204.03705%2011.4364%203.6952%2011.3409%203.64633C11.2768%203.61356%2011.2673%203.61413%2011.2278%203.65321C11.1914%203.68922%2011.1837%203.74333%2011.1787%203.99915C11.1708%204.39786%2011.1161%204.65377%2010.9842%204.90965C10.9128%205.04805%2010.9015%205.01851%2010.9661%204.8623C11.0143%204.74566%2011.0192%204.69439%2011.0189%204.30842C11.0181%203.53291%2010.9255%203.34647%2010.3823%203.02709C10.2447%202.94618%2010.0179%202.8295%209.87839%202.76778C9.73887%202.70606%209.62805%202.6523%209.63208%202.64828C9.64746%202.63307%2010.1772%202.78675%2010.3905%202.86828C10.7077%202.98954%2010.76%203.00526%2010.7985%202.99063C10.8244%202.98082%2010.8369%202.90608%2010.8494%202.68637Z%22%2F%3E%3Cpath%20d%3D%22M4.51745%204.01304C4.13569%203.49066%203.89948%202.68973%203.95062%202.091L3.96643%201.90572L4.05333%201.92148C4.21652%201.95106%204.49789%202.05515%204.62964%202.13469C4.9912%202.35293%205.14773%202.64027%205.30697%203.37811C5.35362%203.59423%205.41482%203.8388%205.44298%203.9216C5.48831%204.05487%205.65962%204.36617%205.7989%204.56834C5.89922%204.71395%205.83258%204.78295%205.61082%204.76305C5.27215%204.73267%204.8134%204.41799%204.51745%204.01304Z%22%2F%3E%3Cpath%20d%3D%22M10.3863%207.90088C8.60224%207.18693%207.97389%206.56721%207.97389%205.52157C7.97389%205.36769%207.97922%205.24179%207.98571%205.24179C7.99221%205.24179%208.06124%205.29257%208.1391%205.35465C8.50088%205.64305%208.906%205.76623%2010.0275%205.92885C10.6875%206.02455%2011.0589%206.10185%2011.4015%206.21477C12.4904%206.57371%2013.1641%207.30212%2013.3248%208.29426C13.3715%208.58255%2013.3441%209.12317%2013.2684%209.4081C13.2087%209.63315%2013.0263%2010.0388%2012.9779%2010.0544C12.9645%2010.0587%2012.9514%2010.0076%2012.9479%209.93809C12.9296%209.56554%2012.7402%209.20285%2012.4221%208.93116C12.0604%208.62227%2011.5745%208.37633%2010.3863%207.90088Z%22%2F%3E%3Cpath%20d%3D%22M9.13385%208.19748C9.11149%208.06527%209.07272%207.89643%209.04769%207.82228L9.00217%207.68748L9.08672%207.7818C9.20374%207.91233%209.2962%208.07937%209.37457%208.30185C9.43438%208.47165%209.44111%208.52215%209.44066%208.79807C9.4402%209.06896%209.43273%209.12575%209.3775%209.27858C9.29042%209.51959%209.18233%209.69048%209.00097%209.87391C8.67507%2010.2036%208.25607%2010.3861%207.65143%2010.4618C7.54633%2010.4749%207.24%2010.4971%206.97069%2010.511C6.292%2010.5461%205.84531%2010.6186%205.44393%2010.7587C5.38623%2010.7788%205.3347%2010.7911%205.32947%2010.7859C5.31323%2010.7698%205.58651%2010.6079%205.81223%2010.4998C6.1305%2010.3474%206.44733%2010.2643%207.15719%2010.1468C7.50785%2010.0887%207.86998%2010.0183%207.96194%209.99029C8.83033%209.72566%209.27671%209.04276%209.13385%208.19748Z%22%2F%3E%3Cpath%20d%3D%22M9.95169%209.64109C9.71465%209.13463%209.66022%208.64564%209.79009%208.18961C9.80399%208.14088%209.82632%208.101%209.83976%208.101C9.85319%208.101%209.90913%208.13105%209.96404%208.16777C10.0733%208.24086%2010.2924%208.36395%2010.876%208.68023C11.6043%209.0749%2012.0196%209.3805%2012.302%209.72965C12.5493%2010.0354%2012.7023%2010.3837%2012.776%2010.8084C12.8177%2011.0489%2012.7932%2011.6277%2012.7311%2011.8699C12.5353%2012.6337%2012.0802%2013.2336%2011.4311%2013.5837C11.336%2013.635%2011.2506%2013.6771%2011.2414%2013.6773C11.2321%2013.6775%2011.2668%2013.5899%2011.3184%2013.4827C11.5367%2013.029%2011.5616%2012.5877%2011.3965%2012.0965C11.2954%2011.7957%2011.0893%2011.4287%2010.6732%2010.8084C10.1893%2010.0873%2010.0707%209.89539%209.95169%209.64109Z%22%2F%3E%3Cpath%20d%3D%22M3.25046%2012.3737C3.91252%2011.8181%204.73629%2011.4234%205.48666%2011.3022C5.81005%2011.25%206.34877%2011.2707%206.64823%2011.3469C7.12824%2011.469%207.55763%2011.7425%207.78094%2012.0683C7.99918%2012.3867%208.09281%2012.6642%208.19029%2013.2816C8.22875%2013.5252%208.27057%2013.7697%208.28323%2013.8251C8.35644%2014.1451%208.4989%2014.4008%208.67544%2014.5293C8.95583%2014.7333%209.43865%2014.7459%209.91362%2014.5618C9.99423%2014.5305%2010.0642%2014.5089%2010.0691%2014.5138C10.0864%2014.5308%209.84719%2014.6899%209.67847%2014.7737C9.45143%2014.8864%209.2709%2014.93%209.03102%2014.93C8.59601%2014.93%208.23486%2014.7101%207.9335%2014.2616C7.87419%2014.1733%207.7409%2013.909%207.63729%2013.6741C7.3191%2012.9528%207.16199%2012.7331%206.79255%2012.4926C6.47104%2012.2834%206.05641%2012.2459%205.74449%2012.3979C5.33475%2012.5976%205.22043%2013.118%205.51389%2013.4478C5.63053%2013.5789%205.84803%2013.6919%206.02588%2013.7139C6.35861%2013.7551%206.64455%2013.5035%206.64455%2013.1696C6.64455%2012.9528%206.56071%2012.8291%206.34966%2012.7344C6.0614%2012.6051%205.75156%2012.7562%205.75304%2013.0254C5.75368%2013.1402%205.80396%2013.2122%205.91971%2013.2643C5.99397%2013.2977%205.99569%2013.3003%205.93514%2013.2878C5.67066%2013.2333%205.6087%2012.9164%205.82135%2012.706C6.07667%2012.4535%206.60461%2012.5649%206.78591%2012.9097C6.86208%2013.0545%206.87092%2013.3429%206.80451%2013.517C6.6559%2013.9068%206.22256%2014.1117%205.78297%2014.0002C5.48368%2013.9242%205.36181%2013.842%205.00097%2013.4726C4.37395%2012.8306%204.13053%2012.7062%203.22657%2012.566L3.05335%2012.5391L3.25046%2012.3737Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M0.308383%200.883984C2.40235%203.40996%203.84457%204.45213%204.00484%204.67231C4.13717%204.85412%204.08737%205.01757%203.86067%205.14567C3.7346%205.21689%203.47541%205.28905%203.34564%205.28905C3.19887%205.28905%203.14847%205.23278%203.14847%205.23278C3.06337%205.15255%203.01544%205.16658%202.5784%204.39555C1.97166%203.45981%201.46389%202.68357%201.45004%202.67057C1.41801%202.64052%201.41856%202.64153%202.51654%204.59413C2.69394%205.0011%202.55182%205.15049%202.55182%205.20845C2.55182%205.32636%202.51946%205.38834%202.37311%205.55059C2.12914%205.8211%202.02008%206.12505%201.94135%206.7541C1.8531%207.45926%201.60492%207.95737%200.917156%208.80989C0.514562%209.30893%200.448686%209.4004%200.3471%209.60153C0.219144%209.85482%200.183961%209.99669%200.169701%2010.3165C0.154629%2010.6547%200.183983%2010.8732%200.287934%2011.1965C0.378939%2011.4796%200.473932%2011.6665%200.716778%2012.0403C0.926351%2012.3629%201.04702%2012.6027%201.04702%2012.6965C1.04702%2012.7711%201.06136%2012.7712%201.38611%2012.6983C2.16328%2012.5239%202.79434%2012.2171%203.14925%2011.8411C3.36891%2011.6084%203.42048%2011.4799%203.42215%2011.1611C3.42325%2010.9525%203.41587%2010.9088%203.35914%2010.7888C3.2668%2010.5935%203.09869%2010.4311%202.72817%2010.1794C2.2427%209.84953%202.03534%209.58398%201.97807%209.21878C1.93108%208.91913%201.98559%208.70771%202.25416%208.14825C2.53214%207.56916%202.60103%207.32239%202.64763%206.73869C2.67773%206.36158%202.71941%206.21286%202.82842%206.09348C2.94212%205.969%203.04447%205.92684%203.32584%205.88863C3.78457%205.82635%204.07667%205.70839%204.31677%205.48849C4.52505%205.29772%204.61221%205.11391%204.62558%204.8372L4.63574%204.62747L4.51934%204.49259C4.09783%204.00411%200.0261003%200.5%200.000160437%200.5C-0.00538105%200.5%200.133325%200.672804%200.308383%200.883984ZM1.28364%2010.6992C1.37894%2010.5314%201.3283%2010.3158%201.16889%2010.2104C1.01827%2010.1109%200.78428%2010.1578%200.78428%2010.2875C0.78428%2010.3271%200.806303%2010.3559%200.855937%2010.3813C0.939514%2010.424%200.945581%2010.4721%200.879823%2010.5703C0.81323%2010.6698%200.818604%2010.7573%200.894991%2010.8167C1.0181%2010.9125%201.19237%2010.8598%201.28364%2010.6992Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M4.92523%205.99865C4.70988%206.06439%204.50054%206.29124%204.43574%206.5291C4.39621%206.67421%204.41864%206.92875%204.47785%207.00736C4.57351%207.13433%204.66602%207.16778%204.91651%207.16603C5.40693%207.16263%205.83327%206.95358%205.88284%206.69224C5.92347%206.47801%205.73622%206.18112%205.4783%206.05078C5.34521%205.98355%205.06217%205.95688%204.92523%205.99865ZM5.49853%206.44422C5.57416%206.33741%205.54107%206.22198%205.41245%206.14391C5.1675%205.99525%204.79708%206.11827%204.79708%206.34826C4.79708%206.46274%204.99025%206.58765%205.16731%206.58765C5.28516%206.58765%205.44644%206.5178%205.49853%206.44422Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"; - -var ContentWrapper$3 = styled(AutoColumn)(templateObject_1$18 || (templateObject_1$18 = __makeTemplateObject(["\n width: 100%;\n"], ["\n width: 100%;\n"]))); -var ModalUpper = styled(DataCard)(templateObject_2$Q || (templateObject_2$Q = __makeTemplateObject(["\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n"], ["\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n"]))); -var ConfirmOrLoadingWrapper = styled.div(templateObject_3$I || (templateObject_3$I = __makeTemplateObject(["\n width: 100%;\n padding: 24px;\n position: relative;\n background: ", ";\n"], ["\n width: 100%;\n padding: 24px;\n position: relative;\n background: ", ";\n"])), function (_a) { - var activeBG = _a.activeBG; - return activeBG && - 'radial-gradient(76.02% 75.41% at 1.84% 0%, rgba(255, 0, 122, 0.2) 0%, rgba(33, 114, 229, 0.2) 100%), #FFFFFF;'; -}); -var ConfirmedIcon$1 = styled(ColumnCenter)(templateObject_4$x || (templateObject_4$x = __makeTemplateObject(["\n padding: 60px 0;\n"], ["\n padding: 60px 0;\n"]))); -var SOCKS_AMOUNT = 1000; -var USER_AMOUNT = 400; -function ClaimModal() { - var _a, _b, _c, _d, _e, _f, _g; - var isOpen = useModalOpen(ApplicationModal.SELF_CLAIM); - var toggleClaimModal = useToggleSelfClaimModal(); - var _h = useActiveWeb3React(), account = _h.account, chainId = _h.chainId; - // used for UI loading states - var _j = __read(useState(false), 2), attempting = _j[0], setAttempting = _j[1]; - // get user claim data - var userClaimData = useUserClaimData(account); - // monitor the status of the claim from contracts and txns - var claimCallback = useClaimCallback(account).claimCallback; - var unclaimedAmount = useUserUnclaimedAmount(account); - var _k = useUserHasSubmittedClaim(account !== null && account !== void 0 ? account : undefined), claimSubmitted = _k.claimSubmitted, claimTxn = _k.claimTxn; - var claimConfirmed = Boolean(claimTxn === null || claimTxn === void 0 ? void 0 : claimTxn.receipt); - function onClaim() { - setAttempting(true); - claimCallback() - // reset modal and log error - .catch(function (error) { - setAttempting(false); - console.log(error); - }); - } - // once confirmed txn is found, if modal is closed open, mark as not attempting regradless - useEffect(function () { - if (claimConfirmed && claimSubmitted && attempting) { - setAttempting(false); - if (!isOpen) { - toggleClaimModal(); - } - } - }, [attempting, claimConfirmed, claimSubmitted, isOpen, toggleClaimModal]); - var nonLPAmount = JSBI.multiply(JSBI.BigInt((((_a = userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.flags) === null || _a === void 0 ? void 0 : _a.isSOCKS) ? SOCKS_AMOUNT : 0) + (((_b = userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.flags) === null || _b === void 0 ? void 0 : _b.isUser) ? USER_AMOUNT : 0)), JSBI.exponentiate(JSBI.BigInt(10), JSBI.BigInt(18))); - return (jsxs(Modal, __assign({ isOpen: isOpen, onDismiss: toggleClaimModal, maxHeight: 90 }, { children: [jsx(Confetti, { start: Boolean(isOpen && claimConfirmed) }, void 0), !attempting && !claimConfirmed && (jsxs(ContentWrapper$3, __assign({ gap: "lg" }, { children: [jsxs(ModalUpper, { children: [jsx(CardBGImage, {}, void 0), jsx(CardNoise, {}, void 0), jsxs(CardSection, __assign({ gap: "md" }, { children: [jsxs(RowBetween, { children: [jsx(ThemedText.White, __assign({ fontWeight: 500 }, { children: jsx(Trans, { children: "Claim UNI" }, void 0) }), void 0), jsx(CloseIcon$2, { onClick: toggleClaimModal, style: { zIndex: 99 }, color: "white" }, void 0)] }, void 0), jsx(ThemedText.White, __assign({ fontWeight: 700, fontSize: 36 }, { children: jsxs(Trans, { children: [unclaimedAmount === null || unclaimedAmount === void 0 ? void 0 : unclaimedAmount.toFixed(0, (_c = { groupSeparator: ',' }) !== null && _c !== void 0 ? _c : '-'), " UNI"] }, void 0) }), void 0)] }), void 0), jsx(Break$1, {}, void 0), jsxs(CardSection, __assign({ gap: "sm" }, { children: [((_d = userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.flags) === null || _d === void 0 ? void 0 : _d.isSOCKS) && (jsxs(RowBetween, { children: [jsx(ThemedText.SubHeader, __assign({ color: "white" }, { children: "SOCKS" }), void 0), jsx(ThemedText.SubHeader, __assign({ color: "white" }, { children: jsxs(Trans, { children: [SOCKS_AMOUNT, " UNI"] }, void 0) }), void 0)] }, void 0)), ((_e = userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.flags) === null || _e === void 0 ? void 0 : _e.isLP) && - unclaimedAmount && - JSBI.greaterThanOrEqual(unclaimedAmount.quotient, nonLPAmount) && (jsxs(RowBetween, { children: [jsx(ThemedText.SubHeader, __assign({ color: "white" }, { children: jsx(Trans, { children: "Liquidity" }, void 0) }), void 0), jsx(ThemedText.SubHeader, __assign({ color: "white" }, { children: jsxs(Trans, { children: [unclaimedAmount - .subtract(CurrencyAmount.fromRawAmount(unclaimedAmount.currency, nonLPAmount)) - .toFixed(0, { groupSeparator: ',' }), ' ', "UNI"] }, void 0) }), void 0)] }, void 0)), ((_f = userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.flags) === null || _f === void 0 ? void 0 : _f.isUser) && (jsxs(RowBetween, { children: [jsx(ThemedText.SubHeader, __assign({ color: "white" }, { children: jsx(Trans, { children: "User" }, void 0) }), void 0), jsx(ThemedText.SubHeader, __assign({ color: "white" }, { children: jsxs(Trans, { children: [USER_AMOUNT, " UNI"] }, void 0) }), void 0)] }, void 0))] }), void 0)] }, void 0), jsxs(AutoColumn, __assign({ gap: "md", style: { padding: '1rem', paddingTop: '0' }, justify: "center" }, { children: [jsx(ThemedText.SubHeader, __assign({ fontWeight: 500 }, { children: jsxs(Trans, { children: ["As a member of the Uniswap community you may claim UNI to be used for voting and governance.", jsx("br", {}, void 0), jsx("br", {}, void 0), jsx(ExternalLink, __assign({ href: "https://uniswap.org/blog/uni" }, { children: "Read more about UNI" }), void 0)] }, void 0) }), void 0), jsx(ButtonPrimary, __assign({ disabled: !isAddress$1(account !== null && account !== void 0 ? account : ''), padding: "16px 16px", width: "100%", "$borderRadius": "12px", mt: "1rem", onClick: onClaim }, { children: jsx(Trans, { children: "Claim UNI" }, void 0) }), void 0)] }), void 0)] }), void 0)), (attempting || claimConfirmed) && (jsxs(ConfirmOrLoadingWrapper, __assign({ activeBG: true }, { children: [jsx(CardNoise, {}, void 0), jsx(CardBGImageSmaller, { desaturate: true }, void 0), jsxs(RowBetween, { children: [jsx("div", {}, void 0), jsx(CloseIcon$2, { onClick: toggleClaimModal, style: { zIndex: 99 }, stroke: "black" }, void 0)] }, void 0), jsx(ConfirmedIcon$1, { children: !claimConfirmed ? (jsx(CustomLightSpinner, { src: Circle$1, alt: "loader", size: '90px' }, void 0)) : (jsx(UniTokenAnimated, { width: "72px", src: tokenLogo, alt: "UNI" }, void 0)) }, void 0), jsxs(AutoColumn, __assign({ gap: "100px", justify: 'center' }, { children: [jsxs(AutoColumn, __assign({ gap: "12px", justify: 'center' }, { children: [jsx(ThemedText.LargeHeader, __assign({ fontWeight: 600, color: "black" }, { children: claimConfirmed ? jsx(Trans, { children: "Claimed!" }, void 0) : jsx(Trans, { children: "Claiming" }, void 0) }), void 0), !claimConfirmed && (jsx(Text$1, __assign({ fontSize: 36, color: '#ff007a', fontWeight: 800 }, { children: jsxs(Trans, { children: [unclaimedAmount === null || unclaimedAmount === void 0 ? void 0 : unclaimedAmount.toFixed(0, (_g = { groupSeparator: ',' }) !== null && _g !== void 0 ? _g : '-'), " UNI"] }, void 0) }), void 0))] }), void 0), claimConfirmed && (jsx(Fragment, { children: jsx(ThemedText.SubHeader, __assign({ fontWeight: 500, color: "black" }, { children: jsxs(Trans, { children: [jsxs("span", __assign({ role: "img", "aria-label": "party-hat" }, { children: ["\uD83C\uDF89", ' '] }), void 0), "Welcome to team Unicorn :)", ' ', jsx("span", __assign({ role: "img", "aria-label": "party-hat" }, { children: "\uD83C\uDF89" }), void 0)] }, void 0) }), void 0) }, void 0)), attempting && !claimSubmitted && (jsx(ThemedText.SubHeader, __assign({ color: "black" }, { children: jsx(Trans, { children: "Confirm this transaction in your wallet" }, void 0) }), void 0)), attempting && claimSubmitted && !claimConfirmed && chainId && (claimTxn === null || claimTxn === void 0 ? void 0 : claimTxn.hash) && (jsx(ExternalLink, __assign({ href: getExplorerLink(chainId, claimTxn === null || claimTxn === void 0 ? void 0 : claimTxn.hash, ExplorerDataType.TRANSACTION), style: { zIndex: 99 } }, { children: jsx(Trans, { children: "View transaction on Explorer" }, void 0) }), void 0))] }), void 0)] }), void 0))] }), void 0)); -} -var templateObject_1$18, templateObject_2$Q, templateObject_3$I, templateObject_4$x; +} +var BAD_RECIPIENT_ADDRESSES = { + '0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f': true, + '0xf164fC0Ec4E93095b804a4795bBe1e041497b92a': true, + '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D': true, // v2 router 02 +} +// from the current swap inputs, compute the best trade and return it. +function useDerivedSwapInfo() { + var _a, _b + var account = useActiveWeb3React().account + var _c = useSwapState(), + independentField = _c.independentField, + typedValue = _c.typedValue, + _d = Field.INPUT, + inputCurrencyId = _c[_d].currencyId, + _e = Field.OUTPUT, + outputCurrencyId = _c[_e].currencyId, + recipient = _c.recipient + var inputCurrency = useCurrency(inputCurrencyId) + var outputCurrency = useCurrency(outputCurrencyId) + var recipientLookup = useENS(recipient !== null && recipient !== void 0 ? recipient : undefined) + var to = (_a = recipient === null ? account : recipientLookup.address) !== null && _a !== void 0 ? _a : null + var relevantTokenBalances = useCurrencyBalances( + account !== null && account !== void 0 ? account : undefined, + useMemo( + function () { + return [ + inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : undefined, + outputCurrency !== null && outputCurrency !== void 0 ? outputCurrency : undefined, + ] + }, + [inputCurrency, outputCurrency] + ) + ) + var isExactIn = independentField === Field.INPUT + var parsedAmount = useMemo( + function () { + var _a + return tryParseCurrencyAmount( + typedValue, + (_a = isExactIn ? inputCurrency : outputCurrency) !== null && _a !== void 0 ? _a : undefined + ) + }, + [inputCurrency, isExactIn, outputCurrency, typedValue] + ) + var trade = useBestTrade( + isExactIn ? TradeType.EXACT_INPUT : TradeType.EXACT_OUTPUT, + parsedAmount, + (_b = isExactIn ? outputCurrency : inputCurrency) !== null && _b !== void 0 ? _b : undefined + ) + var currencyBalances = useMemo( + function () { + var _a + return (_a = {}), (_a[Field.INPUT] = relevantTokenBalances[0]), (_a[Field.OUTPUT] = relevantTokenBalances[1]), _a + }, + [relevantTokenBalances] + ) + var currencies = useMemo( + function () { + var _a + return (_a = {}), (_a[Field.INPUT] = inputCurrency), (_a[Field.OUTPUT] = outputCurrency), _a + }, + [inputCurrency, outputCurrency] + ) + // allowed slippage is either auto slippage, or custom user defined slippage if auto slippage disabled + var autoSlippageTolerance = useAutoSlippageTolerance(trade.trade) + var allowedSlippage = useUserSlippageToleranceWithDefault(autoSlippageTolerance) + var inputError = useMemo( + function () { + var _a + var inputError + if (!account) { + inputError = jsx(Trans, { children: 'Connect Wallet' }, void 0) + } + if (!currencies[Field.INPUT] || !currencies[Field.OUTPUT]) { + inputError = + inputError !== null && inputError !== void 0 ? inputError : jsx(Trans, { children: 'Select a token' }, void 0) + } + if (!parsedAmount) { + inputError = + inputError !== null && inputError !== void 0 + ? inputError + : jsx(Trans, { children: 'Enter an amount' }, void 0) + } + var formattedTo = isAddress(to) + if (!to || !formattedTo) { + inputError = + inputError !== null && inputError !== void 0 + ? inputError + : jsx(Trans, { children: 'Enter a recipient' }, void 0) + } else { + if (BAD_RECIPIENT_ADDRESSES[formattedTo]) { + inputError = + inputError !== null && inputError !== void 0 + ? inputError + : jsx(Trans, { children: 'Invalid recipient' }, void 0) + } + } + // compare input balance to max input based on version + var _b = __read( + [ + currencyBalances[Field.INPUT], + (_a = trade.trade) === null || _a === void 0 ? void 0 : _a.maximumAmountIn(allowedSlippage), + ], + 2 + ), + balanceIn = _b[0], + amountIn = _b[1] + if (balanceIn && amountIn && balanceIn.lessThan(amountIn)) { + inputError = jsxs(Trans, { children: ['Insufficient ', amountIn.currency.symbol, ' balance'] }, void 0) + } + return inputError + }, + [account, allowedSlippage, currencies, currencyBalances, parsedAmount, to, trade.trade] + ) + return useMemo( + function () { + return { + currencies, + currencyBalances, + parsedAmount, + inputError, + trade, + allowedSlippage, + } + }, + [allowedSlippage, currencies, currencyBalances, inputError, parsedAmount, trade] + ) +} +function parseCurrencyFromURLParameter(urlParam) { + if (typeof urlParam === 'string') { + var valid = isAddress(urlParam) + if (valid) return valid + if (urlParam.toUpperCase() === 'ETH') return 'ETH' + } + return '' +} +function parseTokenAmountURLParameter(urlParam) { + return typeof urlParam === 'string' && !isNaN(parseFloat(urlParam)) ? urlParam : '' +} +function parseIndependentFieldURLParameter(urlParam) { + return typeof urlParam === 'string' && urlParam.toLowerCase() === 'output' ? Field.OUTPUT : Field.INPUT +} +var ENS_NAME_REGEX = /^[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)?$/ +var ADDRESS_REGEX = /^0x[a-fA-F0-9]{40}$/ +function validatedRecipient(recipient) { + if (typeof recipient !== 'string') return null + var address = isAddress(recipient) + if (address) return address + if (ENS_NAME_REGEX.test(recipient)) return recipient + if (ADDRESS_REGEX.test(recipient)) return recipient + return null +} +function queryParametersToSwapState(parsedQs) { + var _a + var inputCurrency = parseCurrencyFromURLParameter(parsedQs.inputCurrency) + var outputCurrency = parseCurrencyFromURLParameter(parsedQs.outputCurrency) + if (inputCurrency === '' && outputCurrency === '') { + // default to ETH input + inputCurrency = 'ETH' + } else if (inputCurrency === outputCurrency) { + // clear output if identical + outputCurrency = '' + } + var recipient = validatedRecipient(parsedQs.recipient) + return ( + (_a = {}), + (_a[Field.INPUT] = { + currencyId: + inputCurrency === '' ? null : inputCurrency !== null && inputCurrency !== void 0 ? inputCurrency : null, + }), + (_a[Field.OUTPUT] = { + currencyId: + outputCurrency === '' ? null : outputCurrency !== null && outputCurrency !== void 0 ? outputCurrency : null, + }), + (_a.typedValue = parseTokenAmountURLParameter(parsedQs.exactAmount)), + (_a.independentField = parseIndependentFieldURLParameter(parsedQs.exactField)), + (_a.recipient = recipient), + _a + ) +} +// updates the swap state to use the defaults for a given network +function useDefaultsFromURLSearch() { + var chainId = useActiveWeb3React().chainId + var dispatch = useAppDispatch() + var parsedQs = useParsedQueryString() + var _a = __read(useState(), 2), + result = _a[0], + setResult = _a[1] + useEffect( + function () { + var _a, _b + if (!chainId) return + var parsed = queryParametersToSwapState(parsedQs) + var inputCurrencyId = (_a = parsed[Field.INPUT].currencyId) !== null && _a !== void 0 ? _a : undefined + var outputCurrencyId = (_b = parsed[Field.OUTPUT].currencyId) !== null && _b !== void 0 ? _b : undefined + dispatch( + replaceSwapState({ + typedValue: parsed.typedValue, + field: parsed.independentField, + inputCurrencyId, + outputCurrencyId, + recipient: parsed.recipient, + }) + ) + setResult({ inputCurrencyId, outputCurrencyId }) + // eslint-disable-next-line react-hooks/exhaustive-deps + }, + [dispatch, chainId] + ) + return result +} -var Card = styled(Box)(templateObject_1$17 || (templateObject_1$17 = __makeTemplateObject(["\n width: ", ";\n padding: ", ";\n border-radius: ", ";\n border: ", ";\n"], ["\n width: ", ";\n padding: ", ";\n border-radius: ", ";\n border: ", ";\n"])), function (_a) { - var width = _a.width; - return width !== null && width !== void 0 ? width : '100%'; -}, function (_a) { - var padding = _a.padding; - return padding !== null && padding !== void 0 ? padding : '1rem'; -}, function (_a) { - var $borderRadius = _a.$borderRadius; - return $borderRadius !== null && $borderRadius !== void 0 ? $borderRadius : '16px'; -}, function (_a) { - var border = _a.border; - return border; -}); -var LightCard = styled(Card)(templateObject_2$P || (templateObject_2$P = __makeTemplateObject(["\n border: 1px solid ", ";\n background-color: ", ";\n"], ["\n border: 1px solid ", ";\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}, function (_a) { - var theme = _a.theme; - return theme.bg1; -}); -var LightGreyCard = styled(Card)(templateObject_3$H || (templateObject_3$H = __makeTemplateObject(["\n background-color: ", ";\n"], ["\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}); -var GreyCard = styled(Card)(templateObject_4$w || (templateObject_4$w = __makeTemplateObject(["\n background-color: ", ";\n"], ["\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg3; -}); -var DarkGreyCard = styled(Card)(templateObject_5$p || (templateObject_5$p = __makeTemplateObject(["\n background-color: ", ";\n"], ["\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg2; -}); -styled(Card)(templateObject_6$k || (templateObject_6$k = __makeTemplateObject(["\n background-color: ", ";\n"], ["\n background-color: ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg0; -}); -var OutlineCard = styled(Card)(templateObject_7$h || (templateObject_7$h = __makeTemplateObject(["\n border: 1px solid ", ";\n"], ["\n border: 1px solid ", ";\n"])), function (_a) { - var theme = _a.theme; - return theme.bg3; -}); -styled(Card)(templateObject_8$f || (templateObject_8$f = __makeTemplateObject(["\n background-color: rgba(243, 132, 30, 0.05);\n color: ", ";\n font-weight: 500;\n"], ["\n background-color: rgba(243, 132, 30, 0.05);\n color: ", ";\n font-weight: 500;\n"])), function (_a) { - var theme = _a.theme; - return theme.yellow3; -}); -styled(Card)(templateObject_9$e || (templateObject_9$e = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n border-radius: 12px;\n"], ["\n background-color: ", ";\n color: ", ";\n border-radius: 12px;\n"])), function (_a) { - var theme = _a.theme; - return theme.primary5; -}, function (_a) { - var theme = _a.theme; - return theme.blue2; -}); -var templateObject_1$17, templateObject_2$P, templateObject_3$H, templateObject_4$w, templateObject_5$p, templateObject_6$k, templateObject_7$h, templateObject_8$f, templateObject_9$e; +var initialState$2 = queryParametersToSwapState(parsedQueryString()) +var swap = createReducer(initialState$2, function (builder) { + return builder + .addCase(replaceSwapState, function (state, _a) { + var _b + var _c = _a.payload, + typedValue = _c.typedValue, + recipient = _c.recipient, + field = _c.field, + inputCurrencyId = _c.inputCurrencyId, + outputCurrencyId = _c.outputCurrencyId + return ( + (_b = {}), + (_b[Field.INPUT] = { + currencyId: inputCurrencyId !== null && inputCurrencyId !== void 0 ? inputCurrencyId : null, + }), + (_b[Field.OUTPUT] = { + currencyId: outputCurrencyId !== null && outputCurrencyId !== void 0 ? outputCurrencyId : null, + }), + (_b.independentField = field), + (_b.typedValue = typedValue), + (_b.recipient = recipient), + _b + ) + }) + .addCase(selectCurrency, function (state, _a) { + var _b, _c + var _d = _a.payload, + currencyId = _d.currencyId, + field = _d.field + var otherField = field === Field.INPUT ? Field.OUTPUT : Field.INPUT + if (currencyId === state[otherField].currencyId) { + // the case where we have to swap the order + return __assign( + __assign({}, state), + ((_b = { independentField: state.independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT }), + (_b[field] = { currencyId }), + (_b[otherField] = { currencyId: state[field].currencyId }), + _b) + ) + } else { + // the normal case + return __assign(__assign({}, state), ((_c = {}), (_c[field] = { currencyId }), _c)) + } + }) + .addCase(switchCurrencies, function (state) { + var _a + return __assign( + __assign({}, state), + ((_a = { independentField: state.independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT }), + (_a[Field.INPUT] = { currencyId: state[Field.OUTPUT].currencyId }), + (_a[Field.OUTPUT] = { currencyId: state[Field.INPUT].currencyId }), + _a) + ) + }) + .addCase(typeInput, function (state, _a) { + var _b = _a.payload, + field = _b.field, + typedValue = _b.typedValue + return __assign(__assign({}, state), { independentField: field, typedValue }) + }) + .addCase(setRecipient, function (state, _a) { + var recipient = _a.payload.recipient + state.recipient = recipient + }) +}) + +var now = function () { + return new Date().getTime() +} +var initialState$1 = {} +var transactions = createReducer(initialState$1, function (builder) { + return builder + .addCase(updateVersion, function (transactions) { + // in case there are any transactions in the store with the old format, remove them + Object.keys(transactions).forEach(function (chainId) { + var chainTransactions = transactions[chainId] + Object.keys(chainTransactions).forEach(function (hash) { + if (!('info' in chainTransactions[hash])) { + // clear old transactions that don't have the right format + delete chainTransactions[hash] + } + }) + }) + }) + .addCase(addTransaction, function (transactions, _a) { + var _b, _c + var _d = _a.payload, + chainId = _d.chainId, + from = _d.from, + hash = _d.hash, + info = _d.info + if ((_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash]) { + throw Error('Attempted to add existing transaction.') + } + var txs = (_c = transactions[chainId]) !== null && _c !== void 0 ? _c : {} + txs[hash] = { hash, info, from, addedTime: now() } + transactions[chainId] = txs + }) + .addCase(clearAllTransactions, function (transactions, _a) { + var chainId = _a.payload.chainId + if (!transactions[chainId]) return + transactions[chainId] = {} + }) + .addCase(checkedTransaction, function (transactions, _a) { + var _b + var _c = _a.payload, + chainId = _c.chainId, + hash = _c.hash, + blockNumber = _c.blockNumber + var tx = (_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash] + if (!tx) { + return + } + if (!tx.lastCheckedBlockNumber) { + tx.lastCheckedBlockNumber = blockNumber + } else { + tx.lastCheckedBlockNumber = Math.max(blockNumber, tx.lastCheckedBlockNumber) + } + }) + .addCase(finalizeTransaction, function (transactions, _a) { + var _b + var _c = _a.payload, + hash = _c.hash, + chainId = _c.chainId, + receipt = _c.receipt + var tx = (_b = transactions[chainId]) === null || _b === void 0 ? void 0 : _b[hash] + if (!tx) { + return + } + tx.receipt = receipt + tx.confirmedTime = now() + }) +}) + +var currentTimestamp = function () { + return new Date().getTime() +} +function pairKey(token0Address, token1Address) { + return token0Address + ';' + token1Address +} +var initialState = { + matchesDarkMode: false, + userDarkMode: null, + userExpertMode: false, + userLocale: null, + userClientSideRouter: false, + userHideClosedPositions: false, + userSlippageTolerance: 'auto', + userSlippageToleranceHasBeenMigratedToAuto: true, + userDeadline: DEFAULT_DEADLINE_FROM_NOW, + tokens: {}, + pairs: {}, + timestamp: currentTimestamp(), + URLWarningVisible: true, + showSurveyPopup: undefined, +} +var user = createReducer(initialState, function (builder) { + return builder + .addCase(updateVersion, function (state) { + // slippage isnt being tracked in local storage, reset to default + // noinspection SuspiciousTypeOfGuard + if ( + typeof state.userSlippageTolerance !== 'number' || + !Number.isInteger(state.userSlippageTolerance) || + state.userSlippageTolerance < 0 || + state.userSlippageTolerance > 5000 + ) { + state.userSlippageTolerance = 'auto' + } else { + if ( + !state.userSlippageToleranceHasBeenMigratedToAuto && + [10, 50, 100].indexOf(state.userSlippageTolerance) !== -1 + ) { + state.userSlippageTolerance = 'auto' + state.userSlippageToleranceHasBeenMigratedToAuto = true + } + } + // deadline isnt being tracked in local storage, reset to default + // noinspection SuspiciousTypeOfGuard + if ( + typeof state.userDeadline !== 'number' || + !Number.isInteger(state.userDeadline) || + state.userDeadline < 60 || + state.userDeadline > 180 * 60 + ) { + state.userDeadline = DEFAULT_DEADLINE_FROM_NOW + } + state.lastUpdateVersionTimestamp = currentTimestamp() + }) + .addCase(updateUserDarkMode, function (state, action) { + state.userDarkMode = action.payload.userDarkMode + state.timestamp = currentTimestamp() + }) + .addCase(updateMatchesDarkMode, function (state, action) { + state.matchesDarkMode = action.payload.matchesDarkMode + state.timestamp = currentTimestamp() + }) + .addCase(updateUserExpertMode, function (state, action) { + state.userExpertMode = action.payload.userExpertMode + state.timestamp = currentTimestamp() + }) + .addCase(updateUserLocale, function (state, action) { + state.userLocale = action.payload.userLocale + state.timestamp = currentTimestamp() + }) + .addCase(updateUserSlippageTolerance, function (state, action) { + state.userSlippageTolerance = action.payload.userSlippageTolerance + state.timestamp = currentTimestamp() + }) + .addCase(updateUserDeadline, function (state, action) { + state.userDeadline = action.payload.userDeadline + state.timestamp = currentTimestamp() + }) + .addCase(updateUserClientSideRouter, function (state, action) { + state.userClientSideRouter = action.payload.userClientSideRouter + }) + .addCase(updateHideClosedPositions, function (state, action) { + state.userHideClosedPositions = action.payload.userHideClosedPositions + }) + .addCase(updateShowSurveyPopup, function (state, action) { + state.showSurveyPopup = action.payload.showSurveyPopup + }) + .addCase(addSerializedToken, function (state, _a) { + var serializedToken = _a.payload.serializedToken + if (!state.tokens) { + state.tokens = {} + } + state.tokens[serializedToken.chainId] = state.tokens[serializedToken.chainId] || {} + state.tokens[serializedToken.chainId][serializedToken.address] = serializedToken + state.timestamp = currentTimestamp() + }) + .addCase(removeSerializedToken, function (state, _a) { + var _b = _a.payload, + address = _b.address, + chainId = _b.chainId + if (!state.tokens) { + state.tokens = {} + } + state.tokens[chainId] = state.tokens[chainId] || {} + delete state.tokens[chainId][address] + state.timestamp = currentTimestamp() + }) + .addCase(addSerializedPair, function (state, _a) { + var serializedPair = _a.payload.serializedPair + if ( + serializedPair.token0.chainId === serializedPair.token1.chainId && + serializedPair.token0.address !== serializedPair.token1.address + ) { + var chainId = serializedPair.token0.chainId + state.pairs[chainId] = state.pairs[chainId] || {} + state.pairs[chainId][pairKey(serializedPair.token0.address, serializedPair.token1.address)] = serializedPair + } + state.timestamp = currentTimestamp() + }) + .addCase(removeSerializedPair, function (state, _a) { + var _b = _a.payload, + chainId = _b.chainId, + tokenAAddress = _b.tokenAAddress, + tokenBAddress = _b.tokenBAddress + if (state.pairs[chainId]) { + // just delete both keys if either exists + delete state.pairs[chainId][pairKey(tokenAAddress, tokenBAddress)] + delete state.pairs[chainId][pairKey(tokenBAddress, tokenAAddress)] + } + state.timestamp = currentTimestamp() + }) +}) + +var _a$5 +var PERSISTED_KEYS = ['user', 'transactions', 'lists'] +var store = configureStore({ + reducer: + ((_a$5 = { + application, + user, + transactions, + swap, + mint, + mintV3, + burn, + burnV3, + multicall: multicall.reducer, + lists, + logs, + }), + (_a$5[api$1.reducerPath] = api$1.reducer), + (_a$5[routingApi.reducerPath] = routingApi.reducer), + _a$5), + middleware(getDefaultMiddleware) { + return getDefaultMiddleware({ thunk: true }) + .concat(api$1.middleware) + .concat(routingApi.middleware) + .concat(save({ states: PERSISTED_KEYS, debounce: 1000 })) + }, + preloadedState: load({ states: PERSISTED_KEYS, disableWarnings: process.env.NODE_ENV === 'test' }), +}) +store.dispatch(updateVersion()) +setupListeners(store.dispatch) + +var FallbackWrapper = styled.div( + templateObject_1$19 || + (templateObject_1$19 = __makeTemplateObject( + ['\n display: flex;\n flex-direction: column;\n width: 100%;\n align-items: center;\n z-index: 1;\n'], + ['\n display: flex;\n flex-direction: column;\n width: 100%;\n align-items: center;\n z-index: 1;\n'] + )) +) +var BodyWrapper$2 = styled.div( + templateObject_2$R || + (templateObject_2$R = __makeTemplateObject( + ['\n padding: 1rem;\n width: 100%;\n white-space: ;\n'], + ['\n padding: 1rem;\n width: 100%;\n white-space: ;\n'] + )) +) +var CodeBlockWrapper = styled.div( + templateObject_3$J || + (templateObject_3$J = __makeTemplateObject( + [ + '\n background: ', + ';\n overflow: auto;\n white-space: pre;\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 border-radius: 24px;\n padding: 18px 24px;\n color: ', + ';\n', + ], + [ + '\n background: ', + ';\n overflow: auto;\n white-space: pre;\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 border-radius: 24px;\n padding: 18px 24px;\n color: ', + ';\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.bg0 + }, + function (_a) { + var theme = _a.theme + return theme.text1 + } +) +var LinkWrapper = styled.div( + templateObject_4$y || + (templateObject_4$y = __makeTemplateObject( + ['\n color: ', ';\n padding: 6px 24px;\n'], + ['\n color: ', ';\n padding: 6px 24px;\n'] + )), + function (_a) { + var theme = _a.theme + return theme.blue1 + } +) +var SomethingWentWrongWrapper = styled.div( + templateObject_5$q || + (templateObject_5$q = __makeTemplateObject(['\n padding: 6px 24px;\n'], ['\n padding: 6px 24px;\n'])) +) +var IS_UNISWAP = window.location.hostname === 'app.uniswap.org' +var ErrorBoundary = /** @class */ (function (_super) { + __extends(ErrorBoundary, _super) + function ErrorBoundary(props) { + var _this = _super.call(this, props) || this + _this.state = { error: null } + return _this + } + ErrorBoundary.getDerivedStateFromError = function (error) { + return { error } + } + ErrorBoundary.prototype.componentDidCatch = function (error, errorInfo) { + ReactGA.exception(__assign(__assign(__assign({}, error), errorInfo), { fatal: true })) + } + ErrorBoundary.prototype.render = function () { + var error = this.state.error + if (error !== null) { + var encodedBody = encodeURIComponent(issueBody(error)) + return jsx( + FallbackWrapper, + { + children: jsx( + BodyWrapper$2, + { + children: jsxs( + AutoColumn, + __assign( + { gap: 'md' }, + { + children: [ + jsx( + SomethingWentWrongWrapper, + { + children: jsx( + ThemedText.Label, + __assign( + { fontSize: 24, fontWeight: 600 }, + { children: jsx(Trans, { children: 'Something went wrong' }, void 0) } + ), + void 0 + ), + }, + void 0 + ), + jsx( + CodeBlockWrapper, + { + children: jsx( + 'code', + { + children: jsx( + ThemedText.Main, + __assign({ fontSize: 10 }, { children: error.stack }), + void 0 + ), + }, + void 0 + ), + }, + void 0 + ), + IS_UNISWAP + ? jsxs( + AutoRow, + { + children: [ + jsx( + LinkWrapper, + { + children: jsx( + ExternalLink, + __assign( + { + id: 'create-github-issue-link', + href: + 'https://github.com/Uniswap/uniswap-interface/issues/new?assignees=&labels=bug&body=' + + encodedBody + + '&title=' + + encodeURIComponent( + 'Crash report: `' + + error.name + + (error.message && ': ' + error.message) + + '`' + ), + target: '_blank', + }, + { + children: jsxs( + ThemedText.Link, + __assign( + { fontSize: 16 }, + { + children: [ + jsx(Trans, { children: 'Create an issue on GitHub' }, void 0), + jsx('span', { children: '\u2197' }, void 0), + ], + } + ), + void 0 + ), + } + ), + void 0 + ), + }, + void 0 + ), + jsx( + LinkWrapper, + { + children: jsx( + ExternalLink, + __assign( + { + id: 'get-support-on-discord', + href: 'https://discord.gg/FCfyBSbCU5', + target: '_blank', + }, + { + children: jsxs( + ThemedText.Link, + __assign( + { fontSize: 16 }, + { + children: [ + jsx(Trans, { children: 'Get support on Discord' }, void 0), + jsx('span', { children: '\u2197' }, void 0), + ], + } + ), + void 0 + ), + } + ), + void 0 + ), + }, + void 0 + ), + ], + }, + void 0 + ) + : null, + ], + } + ), + void 0 + ), + }, + void 0 + ), + }, + void 0 + ) + } + return this.props.children + } + return ErrorBoundary +})(React__default.Component) +function getRelevantState() { + var path = window.location.hash + if (!path.startsWith('#/')) { + return null + } + var pieces = path.substring(2).split(/[/\\?]/) + switch (pieces[0]) { + case 'swap': + return 'swap' + case 'add': + if (pieces[1] === 'v2') return 'mint' + else return 'mintV3' + case 'remove': + if (pieces[1] === 'v2') return 'burn' + else return 'burnV3' + } + return null +} +function issueBody(error) { + var relevantState = getRelevantState() + var deviceData = userAgent + return ( + '## URL\n \n' + + window.location.href + + '\n\n' + + (relevantState + ? '## `' + + relevantState + + '` state\n \n```json\n' + + JSON.stringify(store.getState()[relevantState], null, 2) + + '\n```\n' + : '') + + '\n' + + (error.name && '## Error\n\n```\n' + error.name + (error.message && ': ' + error.message) + '\n```\n') + + '\n' + + (error.stack && '## Stacktrace\n\n```\n' + error.stack + '\n```\n') + + '\n' + + (deviceData && '## Device data\n\n```json\n' + JSON.stringify(deviceData, null, 2) + '\n```\n') + + '\n' + ) +} +var templateObject_1$19, templateObject_2$R, templateObject_3$J, templateObject_4$y, templateObject_5$q -var Wrapper$h = styled.div(templateObject_1$16 || (templateObject_1$16 = __makeTemplateObject(["\n max-height: 70vh;\n overflow: auto;\n padding: 0 1rem;\n"], ["\n max-height: 70vh;\n overflow: auto;\n padding: 0 1rem;\n"]))); -var StyledExternalCard = styled(Card)(templateObject_2$O || (templateObject_2$O = __makeTemplateObject(["\n background-color: ", ";\n padding: 0.5rem;\n width: 100%;\n\n :hover,\n :focus,\n :active {\n background-color: ", ";\n }\n"], ["\n background-color: ", ";\n padding: 0.5rem;\n width: 100%;\n\n :hover,\n :focus,\n :active {\n background-color: ", ";\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.primary5; -}, function (_a) { - var theme = _a.theme; - return theme.primary4; -}); -var HoverText$1 = styled.div(templateObject_3$G || (templateObject_3$G = __makeTemplateObject(["\n text-decoration: none;\n color: ", ";\n display: flex;\n align-items: center;\n\n :hover {\n cursor: pointer;\n }\n"], ["\n text-decoration: none;\n color: ", ";\n display: flex;\n align-items: center;\n\n :hover {\n cursor: pointer;\n }\n"])), function (_a) { - var theme = _a.theme; - return theme.text1; -}); -var StyledLinkOut = styled(ArrowDown)(templateObject_4$v || (templateObject_4$v = __makeTemplateObject(["\n transform: rotate(230deg);\n"], ["\n transform: rotate(230deg);\n"]))); -var EXTERNAL_APIS = [ - { - name: 'Auto Router', - description: jsx(Trans, { children: "The app fetches the optimal trade route from a Uniswap Labs server." }, void 0), - }, - { - name: 'Infura', - description: jsx(Trans, { children: "The app fetches on-chain data and constructs contract calls with an Infura API." }, void 0), - }, - { - name: 'TRM Labs', - description: (jsxs(Fragment, { children: [jsx(Trans, { children: "The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons." }, void 0), ' ', jsx(ExternalLink, __assign({ href: "https://help.uniswap.org/en/articles/5675203-terms-of-service-faq" }, { children: jsx(Trans, { children: "Learn more" }, void 0) }), void 0)] }, void 0)), - }, - { - name: 'Google Analytics', - description: jsx(Trans, { children: "The app logs anonymized usage statistics in order to improve over time." }, void 0), - }, - { - name: 'The Graph', - description: jsx(Trans, { children: "The app fetches blockchain data from The Graph\u2019s hosted service." }, void 0), - }, -]; -function PrivacyPolicyModal() { - var node = useRef(); - var open = useModalOpen(ApplicationModal.PRIVACY_POLICY); - var toggle = useTogglePrivacyPolicy(); - useEffect(function () { - if (!open) - return; - ReactGA.event({ - category: 'Modal', - action: 'Show Legal', - }); - }, [open]); - return (jsx(Modal, __assign({ isOpen: open, onDismiss: function () { return toggle(); } }, { children: jsxs(AutoColumn, __assign({ gap: "12px", ref: node }, { children: [jsxs(RowBetween, __assign({ padding: "1rem 1rem 0.5rem 1rem" }, { children: [jsx(ThemedText.MediumHeader, { children: jsx(Trans, { children: "Legal & Privacy" }, void 0) }, void 0), jsx(HoverText$1, __assign({ onClick: function () { return toggle(); } }, { children: jsx(X, { size: 24 }, void 0) }), void 0)] }), void 0), jsx(PrivacyPolicy, {}, void 0)] }), void 0) }), void 0)); -} -function PrivacyPolicy() { - return (jsx(Wrapper$h, __assign({ draggable: "true", onTouchMove: function (e) { - // prevent modal gesture handler from dismissing modal when content is scrolling - if (isMobile) { - e.stopPropagation(); - } - } }, { children: jsxs(AutoColumn, __assign({ gap: "16px" }, { children: [jsxs(AutoColumn, __assign({ gap: "8px", style: { width: '100%' } }, { children: [jsx(StyledExternalCard, { children: jsx(ExternalLink, __assign({ href: 'https://uniswap.org/terms-of-service' }, { children: jsxs(RowBetween, { children: [jsxs(AutoRow, __assign({ gap: "4px" }, { children: [jsx(Info, { size: 20 }, void 0), jsx(ThemedText.Main, __assign({ fontSize: 14, color: 'primaryText1' }, { children: jsx(Trans, { children: "Uniswap Labs' Terms of Service" }, void 0) }), void 0)] }), void 0), jsx(StyledLinkOut, { size: 20 }, void 0)] }, void 0) }), void 0) }, void 0), jsx(StyledExternalCard, { children: jsx(ExternalLink, __assign({ href: 'https://uniswap.org/disclaimer/' }, { children: jsxs(RowBetween, { children: [jsxs(AutoRow, __assign({ gap: "4px" }, { children: [jsx(Info, { size: 20 }, void 0), jsx(ThemedText.Main, __assign({ fontSize: 14, color: 'primaryText1' }, { children: jsx(Trans, { children: "Protocol Disclaimer" }, void 0) }), void 0)] }), void 0), jsx(StyledLinkOut, { size: 20 }, void 0)] }, void 0) }), void 0) }, void 0)] }), void 0), jsx(ThemedText.Main, __assign({ fontSize: 14 }, { children: jsx(Trans, { children: "This app uses the following third-party APIs:" }, void 0) }), void 0), jsxs(AutoColumn, __assign({ gap: "12px" }, { children: [EXTERNAL_APIS.map(function (_a, i) { - var name = _a.name, description = _a.description; - return (jsx(DarkGreyCard, { children: jsxs(AutoColumn, __assign({ gap: "8px" }, { children: [jsxs(AutoRow, __assign({ gap: "4px" }, { children: [jsx(Info, { size: 18 }, void 0), jsx(ThemedText.Main, __assign({ fontSize: 14, color: 'text1' }, { children: name }), void 0)] }), void 0), jsx(ThemedText.Main, __assign({ fontSize: 14 }, { children: description }), void 0)] }), void 0) }, i)); - }), jsx(Row$1, __assign({ justify: "center", marginBottom: "1rem" }, { children: jsx(ExternalLink, __assign({ href: "https://help.uniswap.org/en/articles/5675203-terms-of-service-faq" }, { children: jsx(Trans, { children: "Learn more" }, void 0) }), void 0) }), void 0)] }), void 0)] }), void 0) }), void 0)); -} -var templateObject_1$16, templateObject_2$O, templateObject_3$G, templateObject_4$v; +function useModalOpen(modal) { + var openModal = useAppSelector(function (state) { + return state.application.openModal + }) + return openModal === modal +} +function useToggleModal(modal) { + var open = useModalOpen(modal) + var dispatch = useAppDispatch() + return useCallback( + function () { + return dispatch(setOpenModal(open ? null : modal)) + }, + [dispatch, modal, open] + ) +} +function useWalletModalToggle() { + return useToggleModal(ApplicationModal.WALLET) +} +function useToggleSettingsMenu() { + return useToggleModal(ApplicationModal.SETTINGS) +} +function useShowClaimPopup() { + return useModalOpen(ApplicationModal.CLAIM_POPUP) +} +function useToggleShowClaimPopup() { + return useToggleModal(ApplicationModal.CLAIM_POPUP) +} +function useToggleSelfClaimModal() { + return useToggleModal(ApplicationModal.SELF_CLAIM) +} +function useTogglePrivacyPolicy() { + return useToggleModal(ApplicationModal.PRIVACY_POLICY) +} +// returns a function that allows adding a popup +function useAddPopup() { + var dispatch = useAppDispatch() + return useCallback( + function (content, key, removeAfterMs) { + dispatch( + addPopup({ + content, + key, + removeAfterMs: removeAfterMs !== null && removeAfterMs !== void 0 ? removeAfterMs : DEFAULT_TXN_DISMISS_MS, + }) + ) + }, + [dispatch] + ) +} +// returns a function that allows removing a popup via its key +function useRemovePopup() { + var dispatch = useAppDispatch() + return useCallback( + function (key) { + dispatch(removePopup({ key })) + }, + [dispatch] + ) +} +// get the list of active popups +function useActivePopups() { + var list = useAppSelector(function (state) { + return state.application.popupList + }) + return useMemo( + function () { + return list.filter(function (item) { + return item.show + }) + }, + [list] + ) +} + +var _path$5, _path2$2, _path3$1, _path4, _path5, _path6, _path7, _path8, _path9 + +function _extends$7() { + _extends$7 = + 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$7.apply(this, arguments) +} + +const SvgLogo = (props) => + /*#__PURE__*/ React.createElement( + 'svg', + _extends$7( + { + width: 14, + height: 15, + viewBox: '0 0 14 15', + fill: 'black', + xmlns: 'http://www.w3.org/2000/svg', + }, + props + ), + /*#__PURE__*/ React.createElement( + 'g', + { + style: { + mixBlendMode: 'darken', + }, + }, + _path$5 || + (_path$5 = /*#__PURE__*/ React.createElement('path', { + d: 'M4.15217 1.55141C3.96412 1.52242 3.95619 1.51902 4.04468 1.5055C4.21427 1.47958 4.61472 1.51491 4.89067 1.58012C5.53489 1.73232 6.12109 2.12221 6.74683 2.81466L6.91307 2.99862L7.15088 2.96062C8.15274 2.8006 9.17194 2.92778 10.0244 3.31918C10.2589 3.42686 10.6287 3.64121 10.6749 3.69629C10.6896 3.71384 10.7166 3.82684 10.7349 3.94742C10.7982 4.36458 10.7665 4.68434 10.6382 4.92317C10.5683 5.05313 10.5644 5.09432 10.6114 5.20554C10.6489 5.2943 10.7534 5.35999 10.8569 5.35985C11.0687 5.35956 11.2968 5.0192 11.4024 4.54561L11.4444 4.3575L11.5275 4.45109C11.9835 4.96459 12.3417 5.66488 12.4032 6.16335L12.4192 6.29332L12.3426 6.17517C12.2107 5.97186 12.0781 5.83346 11.9084 5.72183C11.6024 5.52062 11.2789 5.45215 10.4222 5.40727C9.64839 5.36675 9.21045 5.30106 8.77621 5.16032C8.03738 4.9209 7.66493 4.60204 6.78729 3.4576C6.39748 2.94928 6.15654 2.66804 5.91687 2.44155C5.37228 1.92691 4.83716 1.65701 4.15217 1.55141Z', + })), + _path2$2 || + (_path2$2 = /*#__PURE__*/ React.createElement('path', { + d: 'M10.8494 2.68637C10.8689 2.34575 10.9153 2.12108 11.0088 1.9159C11.0458 1.83469 11.0804 1.76822 11.0858 1.76822C11.0911 1.76822 11.075 1.82816 11.05 1.90142C10.9821 2.10054 10.9709 2.3729 11.0177 2.68978C11.0771 3.09184 11.1109 3.14985 11.5385 3.58416C11.739 3.78788 11.9723 4.0448 12.0568 4.15511L12.2106 4.35568L12.0568 4.21234C11.8688 4.03705 11.4364 3.6952 11.3409 3.64633C11.2768 3.61356 11.2673 3.61413 11.2278 3.65321C11.1914 3.68922 11.1837 3.74333 11.1787 3.99915C11.1708 4.39786 11.1161 4.65377 10.9842 4.90965C10.9128 5.04805 10.9015 5.01851 10.9661 4.8623C11.0143 4.74566 11.0192 4.69439 11.0189 4.30842C11.0181 3.53291 10.9255 3.34647 10.3823 3.02709C10.2447 2.94618 10.0179 2.8295 9.87839 2.76778C9.73887 2.70606 9.62805 2.6523 9.63208 2.64828C9.64746 2.63307 10.1772 2.78675 10.3905 2.86828C10.7077 2.98954 10.76 3.00526 10.7985 2.99063C10.8244 2.98082 10.8369 2.90608 10.8494 2.68637Z', + })), + _path3$1 || + (_path3$1 = /*#__PURE__*/ React.createElement('path', { + d: 'M4.51745 4.01304C4.13569 3.49066 3.89948 2.68973 3.95062 2.091L3.96643 1.90572L4.05333 1.92148C4.21652 1.95106 4.49789 2.05515 4.62964 2.13469C4.9912 2.35293 5.14773 2.64027 5.30697 3.37811C5.35362 3.59423 5.41482 3.8388 5.44298 3.9216C5.48831 4.05487 5.65962 4.36617 5.7989 4.56834C5.89922 4.71395 5.83258 4.78295 5.61082 4.76305C5.27215 4.73267 4.8134 4.41799 4.51745 4.01304Z', + })), + _path4 || + (_path4 = /*#__PURE__*/ React.createElement('path', { + d: 'M10.3863 7.90088C8.60224 7.18693 7.97389 6.56721 7.97389 5.52157C7.97389 5.36769 7.97922 5.24179 7.98571 5.24179C7.99221 5.24179 8.06124 5.29257 8.1391 5.35465C8.50088 5.64305 8.906 5.76623 10.0275 5.92885C10.6875 6.02455 11.0589 6.10185 11.4015 6.21477C12.4904 6.57371 13.1641 7.30212 13.3248 8.29426C13.3715 8.58255 13.3441 9.12317 13.2684 9.4081C13.2087 9.63315 13.0263 10.0388 12.9779 10.0544C12.9645 10.0587 12.9514 10.0076 12.9479 9.93809C12.9296 9.56554 12.7402 9.20285 12.4221 8.93116C12.0604 8.62227 11.5745 8.37633 10.3863 7.90088Z', + })), + _path5 || + (_path5 = /*#__PURE__*/ React.createElement('path', { + d: 'M9.13385 8.19748C9.11149 8.06527 9.07272 7.89643 9.04769 7.82228L9.00217 7.68748L9.08672 7.7818C9.20374 7.91233 9.2962 8.07937 9.37457 8.30185C9.43438 8.47165 9.44111 8.52215 9.44066 8.79807C9.4402 9.06896 9.43273 9.12575 9.3775 9.27858C9.29042 9.51959 9.18233 9.69048 9.00097 9.87391C8.67507 10.2036 8.25607 10.3861 7.65143 10.4618C7.54633 10.4749 7.24 10.4971 6.97069 10.511C6.292 10.5461 5.84531 10.6186 5.44393 10.7587C5.38623 10.7788 5.3347 10.7911 5.32947 10.7859C5.31323 10.7698 5.58651 10.6079 5.81223 10.4998C6.1305 10.3474 6.44733 10.2643 7.15719 10.1468C7.50785 10.0887 7.86998 10.0183 7.96194 9.99029C8.83033 9.72566 9.27671 9.04276 9.13385 8.19748Z', + })), + _path6 || + (_path6 = /*#__PURE__*/ React.createElement('path', { + d: 'M9.95169 9.64109C9.71465 9.13463 9.66022 8.64564 9.79009 8.18961C9.80399 8.14088 9.82632 8.101 9.83976 8.101C9.85319 8.101 9.90913 8.13105 9.96404 8.16777C10.0733 8.24086 10.2924 8.36395 10.876 8.68023C11.6043 9.0749 12.0196 9.3805 12.302 9.72965C12.5493 10.0354 12.7023 10.3837 12.776 10.8084C12.8177 11.0489 12.7932 11.6277 12.7311 11.8699C12.5353 12.6337 12.0802 13.2336 11.4311 13.5837C11.336 13.635 11.2506 13.6771 11.2414 13.6773C11.2321 13.6775 11.2668 13.5899 11.3184 13.4827C11.5367 13.029 11.5616 12.5877 11.3965 12.0965C11.2954 11.7957 11.0893 11.4287 10.6732 10.8084C10.1893 10.0873 10.0707 9.89539 9.95169 9.64109Z', + })), + _path7 || + (_path7 = /*#__PURE__*/ React.createElement('path', { + d: 'M3.25046 12.3737C3.91252 11.8181 4.73629 11.4234 5.48666 11.3022C5.81005 11.25 6.34877 11.2707 6.64823 11.3469C7.12824 11.469 7.55763 11.7425 7.78094 12.0683C7.99918 12.3867 8.09281 12.6642 8.19029 13.2816C8.22875 13.5252 8.27057 13.7697 8.28323 13.8251C8.35644 14.1451 8.4989 14.4008 8.67544 14.5293C8.95583 14.7333 9.43865 14.7459 9.91362 14.5618C9.99423 14.5305 10.0642 14.5089 10.0691 14.5138C10.0864 14.5308 9.84719 14.6899 9.67847 14.7737C9.45143 14.8864 9.2709 14.93 9.03102 14.93C8.59601 14.93 8.23486 14.7101 7.9335 14.2616C7.87419 14.1733 7.7409 13.909 7.63729 13.6741C7.3191 12.9528 7.16199 12.7331 6.79255 12.4926C6.47104 12.2834 6.05641 12.2459 5.74449 12.3979C5.33475 12.5976 5.22043 13.118 5.51389 13.4478C5.63053 13.5789 5.84803 13.6919 6.02588 13.7139C6.35861 13.7551 6.64455 13.5035 6.64455 13.1696C6.64455 12.9528 6.56071 12.8291 6.34966 12.7344C6.0614 12.6051 5.75156 12.7562 5.75304 13.0254C5.75368 13.1402 5.80396 13.2122 5.91971 13.2643C5.99397 13.2977 5.99569 13.3003 5.93514 13.2878C5.67066 13.2333 5.6087 12.9164 5.82135 12.706C6.07667 12.4535 6.60461 12.5649 6.78591 12.9097C6.86208 13.0545 6.87092 13.3429 6.80451 13.517C6.6559 13.9068 6.22256 14.1117 5.78297 14.0002C5.48368 13.9242 5.36181 13.842 5.00097 13.4726C4.37395 12.8306 4.13053 12.7062 3.22657 12.566L3.05335 12.5391L3.25046 12.3737Z', + })), + _path8 || + (_path8 = /*#__PURE__*/ React.createElement('path', { + fillRule: 'evenodd', + clipRule: 'evenodd', + d: 'M0.308383 0.883984C2.40235 3.40996 3.84457 4.45213 4.00484 4.67231C4.13717 4.85412 4.08737 5.01757 3.86067 5.14567C3.7346 5.21689 3.47541 5.28905 3.34564 5.28905C3.19887 5.28905 3.14847 5.23278 3.14847 5.23278C3.06337 5.15255 3.01544 5.16658 2.5784 4.39555C1.97166 3.45981 1.46389 2.68357 1.45004 2.67057C1.41801 2.64052 1.41856 2.64153 2.51654 4.59413C2.69394 5.0011 2.55182 5.15049 2.55182 5.20845C2.55182 5.32636 2.51946 5.38834 2.37311 5.55059C2.12914 5.8211 2.02008 6.12505 1.94135 6.7541C1.8531 7.45926 1.60492 7.95737 0.917156 8.80989C0.514562 9.30893 0.448686 9.4004 0.3471 9.60153C0.219144 9.85482 0.183961 9.99669 0.169701 10.3165C0.154629 10.6547 0.183983 10.8732 0.287934 11.1965C0.378939 11.4796 0.473932 11.6665 0.716778 12.0403C0.926351 12.3629 1.04702 12.6027 1.04702 12.6965C1.04702 12.7711 1.06136 12.7712 1.38611 12.6983C2.16328 12.5239 2.79434 12.2171 3.14925 11.8411C3.36891 11.6084 3.42048 11.4799 3.42215 11.1611C3.42325 10.9525 3.41587 10.9088 3.35914 10.7888C3.2668 10.5935 3.09869 10.4311 2.72817 10.1794C2.2427 9.84953 2.03534 9.58398 1.97807 9.21878C1.93108 8.91913 1.98559 8.70771 2.25416 8.14825C2.53214 7.56916 2.60103 7.32239 2.64763 6.73869C2.67773 6.36158 2.71941 6.21286 2.82842 6.09348C2.94212 5.969 3.04447 5.92684 3.32584 5.88863C3.78457 5.82635 4.07667 5.70839 4.31677 5.48849C4.52505 5.29772 4.61221 5.11391 4.62558 4.8372L4.63574 4.62747L4.51934 4.49259C4.09783 4.00411 0.0261003 0.5 0.000160437 0.5C-0.00538105 0.5 0.133325 0.672804 0.308383 0.883984ZM1.28364 10.6992C1.37894 10.5314 1.3283 10.3158 1.16889 10.2104C1.01827 10.1109 0.78428 10.1578 0.78428 10.2875C0.78428 10.3271 0.806303 10.3559 0.855937 10.3813C0.939514 10.424 0.945581 10.4721 0.879823 10.5703C0.81323 10.6698 0.818604 10.7573 0.894991 10.8167C1.0181 10.9125 1.19237 10.8598 1.28364 10.6992Z', + })), + _path9 || + (_path9 = /*#__PURE__*/ React.createElement('path', { + fillRule: 'evenodd', + clipRule: 'evenodd', + d: 'M4.92523 5.99865C4.70988 6.06439 4.50054 6.29124 4.43574 6.5291C4.39621 6.67421 4.41864 6.92875 4.47785 7.00736C4.57351 7.13433 4.66602 7.16778 4.91651 7.16603C5.40693 7.16263 5.83327 6.95358 5.88284 6.69224C5.92347 6.47801 5.73622 6.18112 5.4783 6.05078C5.34521 5.98355 5.06217 5.95688 4.92523 5.99865ZM5.49853 6.44422C5.57416 6.33741 5.54107 6.22198 5.41245 6.14391C5.1675 5.99525 4.79708 6.11827 4.79708 6.34826C4.79708 6.46274 4.99025 6.58765 5.16731 6.58765C5.28516 6.58765 5.44644 6.5178 5.49853 6.44422Z', + })) + ) + ) +var UNISWAP_LOGO_URL = + 'data:image/svg+xml,%3Csvg%20width%3D%2214%22%20height%3D%2215%22%20viewBox%3D%220%200%2014%2015%22%20fill%3D%22black%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20style%3D%22mix-blend-mode%3Adarken%22%3E%3Cpath%20d%3D%22M4.15217%201.55141C3.96412%201.52242%203.95619%201.51902%204.04468%201.5055C4.21427%201.47958%204.61472%201.51491%204.89067%201.58012C5.53489%201.73232%206.12109%202.12221%206.74683%202.81466L6.91307%202.99862L7.15088%202.96062C8.15274%202.8006%209.17194%202.92778%2010.0244%203.31918C10.2589%203.42686%2010.6287%203.64121%2010.6749%203.69629C10.6896%203.71384%2010.7166%203.82684%2010.7349%203.94742C10.7982%204.36458%2010.7665%204.68434%2010.6382%204.92317C10.5683%205.05313%2010.5644%205.09432%2010.6114%205.20554C10.6489%205.2943%2010.7534%205.35999%2010.8569%205.35985C11.0687%205.35956%2011.2968%205.0192%2011.4024%204.54561L11.4444%204.3575L11.5275%204.45109C11.9835%204.96459%2012.3417%205.66488%2012.4032%206.16335L12.4192%206.29332L12.3426%206.17517C12.2107%205.97186%2012.0781%205.83346%2011.9084%205.72183C11.6024%205.52062%2011.2789%205.45215%2010.4222%205.40727C9.64839%205.36675%209.21045%205.30106%208.77621%205.16032C8.03738%204.9209%207.66493%204.60204%206.78729%203.4576C6.39748%202.94928%206.15654%202.66804%205.91687%202.44155C5.37228%201.92691%204.83716%201.65701%204.15217%201.55141Z%22%2F%3E%3Cpath%20d%3D%22M10.8494%202.68637C10.8689%202.34575%2010.9153%202.12108%2011.0088%201.9159C11.0458%201.83469%2011.0804%201.76822%2011.0858%201.76822C11.0911%201.76822%2011.075%201.82816%2011.05%201.90142C10.9821%202.10054%2010.9709%202.3729%2011.0177%202.68978C11.0771%203.09184%2011.1109%203.14985%2011.5385%203.58416C11.739%203.78788%2011.9723%204.0448%2012.0568%204.15511L12.2106%204.35568L12.0568%204.21234C11.8688%204.03705%2011.4364%203.6952%2011.3409%203.64633C11.2768%203.61356%2011.2673%203.61413%2011.2278%203.65321C11.1914%203.68922%2011.1837%203.74333%2011.1787%203.99915C11.1708%204.39786%2011.1161%204.65377%2010.9842%204.90965C10.9128%205.04805%2010.9015%205.01851%2010.9661%204.8623C11.0143%204.74566%2011.0192%204.69439%2011.0189%204.30842C11.0181%203.53291%2010.9255%203.34647%2010.3823%203.02709C10.2447%202.94618%2010.0179%202.8295%209.87839%202.76778C9.73887%202.70606%209.62805%202.6523%209.63208%202.64828C9.64746%202.63307%2010.1772%202.78675%2010.3905%202.86828C10.7077%202.98954%2010.76%203.00526%2010.7985%202.99063C10.8244%202.98082%2010.8369%202.90608%2010.8494%202.68637Z%22%2F%3E%3Cpath%20d%3D%22M4.51745%204.01304C4.13569%203.49066%203.89948%202.68973%203.95062%202.091L3.96643%201.90572L4.05333%201.92148C4.21652%201.95106%204.49789%202.05515%204.62964%202.13469C4.9912%202.35293%205.14773%202.64027%205.30697%203.37811C5.35362%203.59423%205.41482%203.8388%205.44298%203.9216C5.48831%204.05487%205.65962%204.36617%205.7989%204.56834C5.89922%204.71395%205.83258%204.78295%205.61082%204.76305C5.27215%204.73267%204.8134%204.41799%204.51745%204.01304Z%22%2F%3E%3Cpath%20d%3D%22M10.3863%207.90088C8.60224%207.18693%207.97389%206.56721%207.97389%205.52157C7.97389%205.36769%207.97922%205.24179%207.98571%205.24179C7.99221%205.24179%208.06124%205.29257%208.1391%205.35465C8.50088%205.64305%208.906%205.76623%2010.0275%205.92885C10.6875%206.02455%2011.0589%206.10185%2011.4015%206.21477C12.4904%206.57371%2013.1641%207.30212%2013.3248%208.29426C13.3715%208.58255%2013.3441%209.12317%2013.2684%209.4081C13.2087%209.63315%2013.0263%2010.0388%2012.9779%2010.0544C12.9645%2010.0587%2012.9514%2010.0076%2012.9479%209.93809C12.9296%209.56554%2012.7402%209.20285%2012.4221%208.93116C12.0604%208.62227%2011.5745%208.37633%2010.3863%207.90088Z%22%2F%3E%3Cpath%20d%3D%22M9.13385%208.19748C9.11149%208.06527%209.07272%207.89643%209.04769%207.82228L9.00217%207.68748L9.08672%207.7818C9.20374%207.91233%209.2962%208.07937%209.37457%208.30185C9.43438%208.47165%209.44111%208.52215%209.44066%208.79807C9.4402%209.06896%209.43273%209.12575%209.3775%209.27858C9.29042%209.51959%209.18233%209.69048%209.00097%209.87391C8.67507%2010.2036%208.25607%2010.3861%207.65143%2010.4618C7.54633%2010.4749%207.24%2010.4971%206.97069%2010.511C6.292%2010.5461%205.84531%2010.6186%205.44393%2010.7587C5.38623%2010.7788%205.3347%2010.7911%205.32947%2010.7859C5.31323%2010.7698%205.58651%2010.6079%205.81223%2010.4998C6.1305%2010.3474%206.44733%2010.2643%207.15719%2010.1468C7.50785%2010.0887%207.86998%2010.0183%207.96194%209.99029C8.83033%209.72566%209.27671%209.04276%209.13385%208.19748Z%22%2F%3E%3Cpath%20d%3D%22M9.95169%209.64109C9.71465%209.13463%209.66022%208.64564%209.79009%208.18961C9.80399%208.14088%209.82632%208.101%209.83976%208.101C9.85319%208.101%209.90913%208.13105%209.96404%208.16777C10.0733%208.24086%2010.2924%208.36395%2010.876%208.68023C11.6043%209.0749%2012.0196%209.3805%2012.302%209.72965C12.5493%2010.0354%2012.7023%2010.3837%2012.776%2010.8084C12.8177%2011.0489%2012.7932%2011.6277%2012.7311%2011.8699C12.5353%2012.6337%2012.0802%2013.2336%2011.4311%2013.5837C11.336%2013.635%2011.2506%2013.6771%2011.2414%2013.6773C11.2321%2013.6775%2011.2668%2013.5899%2011.3184%2013.4827C11.5367%2013.029%2011.5616%2012.5877%2011.3965%2012.0965C11.2954%2011.7957%2011.0893%2011.4287%2010.6732%2010.8084C10.1893%2010.0873%2010.0707%209.89539%209.95169%209.64109Z%22%2F%3E%3Cpath%20d%3D%22M3.25046%2012.3737C3.91252%2011.8181%204.73629%2011.4234%205.48666%2011.3022C5.81005%2011.25%206.34877%2011.2707%206.64823%2011.3469C7.12824%2011.469%207.55763%2011.7425%207.78094%2012.0683C7.99918%2012.3867%208.09281%2012.6642%208.19029%2013.2816C8.22875%2013.5252%208.27057%2013.7697%208.28323%2013.8251C8.35644%2014.1451%208.4989%2014.4008%208.67544%2014.5293C8.95583%2014.7333%209.43865%2014.7459%209.91362%2014.5618C9.99423%2014.5305%2010.0642%2014.5089%2010.0691%2014.5138C10.0864%2014.5308%209.84719%2014.6899%209.67847%2014.7737C9.45143%2014.8864%209.2709%2014.93%209.03102%2014.93C8.59601%2014.93%208.23486%2014.7101%207.9335%2014.2616C7.87419%2014.1733%207.7409%2013.909%207.63729%2013.6741C7.3191%2012.9528%207.16199%2012.7331%206.79255%2012.4926C6.47104%2012.2834%206.05641%2012.2459%205.74449%2012.3979C5.33475%2012.5976%205.22043%2013.118%205.51389%2013.4478C5.63053%2013.5789%205.84803%2013.6919%206.02588%2013.7139C6.35861%2013.7551%206.64455%2013.5035%206.64455%2013.1696C6.64455%2012.9528%206.56071%2012.8291%206.34966%2012.7344C6.0614%2012.6051%205.75156%2012.7562%205.75304%2013.0254C5.75368%2013.1402%205.80396%2013.2122%205.91971%2013.2643C5.99397%2013.2977%205.99569%2013.3003%205.93514%2013.2878C5.67066%2013.2333%205.6087%2012.9164%205.82135%2012.706C6.07667%2012.4535%206.60461%2012.5649%206.78591%2012.9097C6.86208%2013.0545%206.87092%2013.3429%206.80451%2013.517C6.6559%2013.9068%206.22256%2014.1117%205.78297%2014.0002C5.48368%2013.9242%205.36181%2013.842%205.00097%2013.4726C4.37395%2012.8306%204.13053%2012.7062%203.22657%2012.566L3.05335%2012.5391L3.25046%2012.3737Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M0.308383%200.883984C2.40235%203.40996%203.84457%204.45213%204.00484%204.67231C4.13717%204.85412%204.08737%205.01757%203.86067%205.14567C3.7346%205.21689%203.47541%205.28905%203.34564%205.28905C3.19887%205.28905%203.14847%205.23278%203.14847%205.23278C3.06337%205.15255%203.01544%205.16658%202.5784%204.39555C1.97166%203.45981%201.46389%202.68357%201.45004%202.67057C1.41801%202.64052%201.41856%202.64153%202.51654%204.59413C2.69394%205.0011%202.55182%205.15049%202.55182%205.20845C2.55182%205.32636%202.51946%205.38834%202.37311%205.55059C2.12914%205.8211%202.02008%206.12505%201.94135%206.7541C1.8531%207.45926%201.60492%207.95737%200.917156%208.80989C0.514562%209.30893%200.448686%209.4004%200.3471%209.60153C0.219144%209.85482%200.183961%209.99669%200.169701%2010.3165C0.154629%2010.6547%200.183983%2010.8732%200.287934%2011.1965C0.378939%2011.4796%200.473932%2011.6665%200.716778%2012.0403C0.926351%2012.3629%201.04702%2012.6027%201.04702%2012.6965C1.04702%2012.7711%201.06136%2012.7712%201.38611%2012.6983C2.16328%2012.5239%202.79434%2012.2171%203.14925%2011.8411C3.36891%2011.6084%203.42048%2011.4799%203.42215%2011.1611C3.42325%2010.9525%203.41587%2010.9088%203.35914%2010.7888C3.2668%2010.5935%203.09869%2010.4311%202.72817%2010.1794C2.2427%209.84953%202.03534%209.58398%201.97807%209.21878C1.93108%208.91913%201.98559%208.70771%202.25416%208.14825C2.53214%207.56916%202.60103%207.32239%202.64763%206.73869C2.67773%206.36158%202.71941%206.21286%202.82842%206.09348C2.94212%205.969%203.04447%205.92684%203.32584%205.88863C3.78457%205.82635%204.07667%205.70839%204.31677%205.48849C4.52505%205.29772%204.61221%205.11391%204.62558%204.8372L4.63574%204.62747L4.51934%204.49259C4.09783%204.00411%200.0261003%200.5%200.000160437%200.5C-0.00538105%200.5%200.133325%200.672804%200.308383%200.883984ZM1.28364%2010.6992C1.37894%2010.5314%201.3283%2010.3158%201.16889%2010.2104C1.01827%2010.1109%200.78428%2010.1578%200.78428%2010.2875C0.78428%2010.3271%200.806303%2010.3559%200.855937%2010.3813C0.939514%2010.424%200.945581%2010.4721%200.879823%2010.5703C0.81323%2010.6698%200.818604%2010.7573%200.894991%2010.8167C1.0181%2010.9125%201.19237%2010.8598%201.28364%2010.6992Z%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M4.92523%205.99865C4.70988%206.06439%204.50054%206.29124%204.43574%206.5291C4.39621%206.67421%204.41864%206.92875%204.47785%207.00736C4.57351%207.13433%204.66602%207.16778%204.91651%207.16603C5.40693%207.16263%205.83327%206.95358%205.88284%206.69224C5.92347%206.47801%205.73622%206.18112%205.4783%206.05078C5.34521%205.98355%205.06217%205.95688%204.92523%205.99865ZM5.49853%206.44422C5.57416%206.33741%205.54107%206.22198%205.41245%206.14391C5.1675%205.99525%204.79708%206.11827%204.79708%206.34826C4.79708%206.46274%204.99025%206.58765%205.16731%206.58765C5.28516%206.58765%205.44644%206.5178%205.49853%206.44422Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E' + +var ContentWrapper$3 = styled(AutoColumn)( + templateObject_1$18 || (templateObject_1$18 = __makeTemplateObject(['\n width: 100%;\n'], ['\n width: 100%;\n'])) +) +var ModalUpper = styled(DataCard)( + templateObject_2$Q || + (templateObject_2$Q = __makeTemplateObject( + [ + '\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n', + ], + [ + '\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n background: radial-gradient(76.02% 75.41% at 1.84% 0%, #ff007a 0%, #021d43 100%);\n', + ] + )) +) +var ConfirmOrLoadingWrapper = styled.div( + templateObject_3$I || + (templateObject_3$I = __makeTemplateObject( + ['\n width: 100%;\n padding: 24px;\n position: relative;\n background: ', ';\n'], + ['\n width: 100%;\n padding: 24px;\n position: relative;\n background: ', ';\n'] + )), + function (_a) { + var activeBG = _a.activeBG + return ( + activeBG && + 'radial-gradient(76.02% 75.41% at 1.84% 0%, rgba(255, 0, 122, 0.2) 0%, rgba(33, 114, 229, 0.2) 100%), #FFFFFF;' + ) + } +) +var ConfirmedIcon$1 = styled(ColumnCenter)( + templateObject_4$x || + (templateObject_4$x = __makeTemplateObject(['\n padding: 60px 0;\n'], ['\n padding: 60px 0;\n'])) +) +var SOCKS_AMOUNT = 1000 +var USER_AMOUNT = 400 +function ClaimModal() { + var _a, _b, _c, _d, _e, _f, _g + var isOpen = useModalOpen(ApplicationModal.SELF_CLAIM) + var toggleClaimModal = useToggleSelfClaimModal() + var _h = useActiveWeb3React(), + account = _h.account, + chainId = _h.chainId + // used for UI loading states + var _j = __read(useState(false), 2), + attempting = _j[0], + setAttempting = _j[1] + // get user claim data + var userClaimData = useUserClaimData(account) + // monitor the status of the claim from contracts and txns + var claimCallback = useClaimCallback(account).claimCallback + var unclaimedAmount = useUserUnclaimedAmount(account) + var _k = useUserHasSubmittedClaim(account !== null && account !== void 0 ? account : undefined), + claimSubmitted = _k.claimSubmitted, + claimTxn = _k.claimTxn + var claimConfirmed = Boolean(claimTxn === null || claimTxn === void 0 ? void 0 : claimTxn.receipt) + function onClaim() { + setAttempting(true) + claimCallback() + // reset modal and log error + .catch(function (error) { + setAttempting(false) + console.log(error) + }) + } + // once confirmed txn is found, if modal is closed open, mark as not attempting regradless + useEffect( + function () { + if (claimConfirmed && claimSubmitted && attempting) { + setAttempting(false) + if (!isOpen) { + toggleClaimModal() + } + } + }, + [attempting, claimConfirmed, claimSubmitted, isOpen, toggleClaimModal] + ) + var nonLPAmount = JSBI.multiply( + JSBI.BigInt( + (( + (_a = userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.flags) === null || + _a === void 0 + ? void 0 + : _a.isSOCKS + ) + ? SOCKS_AMOUNT + : 0) + + (( + (_b = userClaimData === null || userClaimData === void 0 ? void 0 : userClaimData.flags) === null || + _b === void 0 + ? void 0 + : _b.isUser + ) + ? USER_AMOUNT + : 0) + ), + JSBI.exponentiate(JSBI.BigInt(10), JSBI.BigInt(18)) + ) + return jsxs( + Modal, + __assign( + { isOpen, onDismiss: toggleClaimModal, maxHeight: 90 }, + { + children: [ + jsx(Confetti, { start: Boolean(isOpen && claimConfirmed) }, void 0), + !attempting && + !claimConfirmed && + jsxs( + ContentWrapper$3, + __assign( + { gap: 'lg' }, + { + children: [ + jsxs( + ModalUpper, + { + children: [ + jsx(CardBGImage, {}, void 0), + jsx(CardNoise, {}, void 0), + jsxs( + CardSection, + __assign( + { gap: 'md' }, + { + children: [ + jsxs( + RowBetween, + { + children: [ + jsx( + ThemedText.White, + __assign( + { fontWeight: 500 }, + { children: jsx(Trans, { children: 'Claim UNI' }, void 0) } + ), + void 0 + ), + jsx( + CloseIcon$2, + { onClick: toggleClaimModal, style: { zIndex: 99 }, color: 'white' }, + void 0 + ), + ], + }, + void 0 + ), + jsx( + ThemedText.White, + __assign( + { fontWeight: 700, fontSize: 36 }, + { + children: jsxs( + Trans, + { + children: [ + unclaimedAmount === null || unclaimedAmount === void 0 + ? void 0 + : unclaimedAmount.toFixed( + 0, + (_c = { groupSeparator: ',' }) !== null && _c !== void 0 ? _c : '-' + ), + ' UNI', + ], + }, + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + jsx(Break$1, {}, void 0), + jsxs( + CardSection, + __assign( + { gap: 'sm' }, + { + children: [ + ((_d = + userClaimData === null || userClaimData === void 0 + ? void 0 + : userClaimData.flags) === null || _d === void 0 + ? void 0 + : _d.isSOCKS) && + jsxs( + RowBetween, + { + children: [ + jsx( + ThemedText.SubHeader, + __assign({ color: 'white' }, { children: 'SOCKS' }), + void 0 + ), + jsx( + ThemedText.SubHeader, + __assign( + { color: 'white' }, + { children: jsxs(Trans, { children: [SOCKS_AMOUNT, ' UNI'] }, void 0) } + ), + void 0 + ), + ], + }, + void 0 + ), + ((_e = + userClaimData === null || userClaimData === void 0 + ? void 0 + : userClaimData.flags) === null || _e === void 0 + ? void 0 + : _e.isLP) && + unclaimedAmount && + JSBI.greaterThanOrEqual(unclaimedAmount.quotient, nonLPAmount) && + jsxs( + RowBetween, + { + children: [ + jsx( + ThemedText.SubHeader, + __assign( + { color: 'white' }, + { children: jsx(Trans, { children: 'Liquidity' }, void 0) } + ), + void 0 + ), + jsx( + ThemedText.SubHeader, + __assign( + { color: 'white' }, + { + children: jsxs( + Trans, + { + children: [ + unclaimedAmount + .subtract( + CurrencyAmount.fromRawAmount( + unclaimedAmount.currency, + nonLPAmount + ) + ) + .toFixed(0, { groupSeparator: ',' }), + ' ', + 'UNI', + ], + }, + void 0 + ), + } + ), + void 0 + ), + ], + }, + void 0 + ), + ((_f = + userClaimData === null || userClaimData === void 0 + ? void 0 + : userClaimData.flags) === null || _f === void 0 + ? void 0 + : _f.isUser) && + jsxs( + RowBetween, + { + children: [ + jsx( + ThemedText.SubHeader, + __assign( + { color: 'white' }, + { children: jsx(Trans, { children: 'User' }, void 0) } + ), + void 0 + ), + jsx( + ThemedText.SubHeader, + __assign( + { color: 'white' }, + { children: jsxs(Trans, { children: [USER_AMOUNT, ' UNI'] }, void 0) } + ), + void 0 + ), + ], + }, + void 0 + ), + ], + } + ), + void 0 + ), + ], + }, + void 0 + ), + jsxs( + AutoColumn, + __assign( + { gap: 'md', style: { padding: '1rem', paddingTop: '0' }, justify: 'center' }, + { + children: [ + jsx( + ThemedText.SubHeader, + __assign( + { fontWeight: 500 }, + { + children: jsxs( + Trans, + { + children: [ + 'As a member of the Uniswap community you may claim UNI to be used for voting and governance.', + jsx('br', {}, void 0), + jsx('br', {}, void 0), + jsx( + ExternalLink, + __assign( + { href: 'https://uniswap.org/blog/uni' }, + { children: 'Read more about UNI' } + ), + void 0 + ), + ], + }, + void 0 + ), + } + ), + void 0 + ), + jsx( + ButtonPrimary, + __assign( + { + disabled: !isAddress$1(account !== null && account !== void 0 ? account : ''), + padding: '16px 16px', + width: '100%', + $borderRadius: '12px', + mt: '1rem', + onClick: onClaim, + }, + { children: jsx(Trans, { children: 'Claim UNI' }, void 0) } + ), + void 0 + ), + ], + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + (attempting || claimConfirmed) && + jsxs( + ConfirmOrLoadingWrapper, + __assign( + { activeBG: true }, + { + children: [ + jsx(CardNoise, {}, void 0), + jsx(CardBGImageSmaller, { desaturate: true }, void 0), + jsxs( + RowBetween, + { + children: [ + jsx('div', {}, void 0), + jsx( + CloseIcon$2, + { onClick: toggleClaimModal, style: { zIndex: 99 }, stroke: 'black' }, + void 0 + ), + ], + }, + void 0 + ), + jsx( + ConfirmedIcon$1, + { + children: !claimConfirmed + ? jsx(CustomLightSpinner, { src: Circle$1, alt: 'loader', size: '90px' }, void 0) + : jsx(UniTokenAnimated, { width: '72px', src: tokenLogo, alt: 'UNI' }, void 0), + }, + void 0 + ), + jsxs( + AutoColumn, + __assign( + { gap: '100px', justify: 'center' }, + { + children: [ + jsxs( + AutoColumn, + __assign( + { gap: '12px', justify: 'center' }, + { + children: [ + jsx( + ThemedText.LargeHeader, + __assign( + { fontWeight: 600, color: 'black' }, + { + children: claimConfirmed + ? jsx(Trans, { children: 'Claimed!' }, void 0) + : jsx(Trans, { children: 'Claiming' }, void 0), + } + ), + void 0 + ), + !claimConfirmed && + jsx( + Text$1, + __assign( + { fontSize: 36, color: '#ff007a', fontWeight: 800 }, + { + children: jsxs( + Trans, + { + children: [ + unclaimedAmount === null || unclaimedAmount === void 0 + ? void 0 + : unclaimedAmount.toFixed( + 0, + (_g = { groupSeparator: ',' }) !== null && _g !== void 0 + ? _g + : '-' + ), + ' UNI', + ], + }, + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + claimConfirmed && + jsx( + Fragment, + { + children: jsx( + ThemedText.SubHeader, + __assign( + { fontWeight: 500, color: 'black' }, + { + children: jsxs( + Trans, + { + children: [ + jsxs( + 'span', + __assign( + { role: 'img', 'aria-label': 'party-hat' }, + { children: ['\uD83C\uDF89', ' '] } + ), + void 0 + ), + 'Welcome to team Unicorn :)', + ' ', + jsx( + 'span', + __assign( + { role: 'img', 'aria-label': 'party-hat' }, + { children: '\uD83C\uDF89' } + ), + void 0 + ), + ], + }, + void 0 + ), + } + ), + void 0 + ), + }, + void 0 + ), + attempting && + !claimSubmitted && + jsx( + ThemedText.SubHeader, + __assign( + { color: 'black' }, + { + children: jsx( + Trans, + { children: 'Confirm this transaction in your wallet' }, + void 0 + ), + } + ), + void 0 + ), + attempting && + claimSubmitted && + !claimConfirmed && + chainId && + (claimTxn === null || claimTxn === void 0 ? void 0 : claimTxn.hash) && + jsx( + ExternalLink, + __assign( + { + href: getExplorerLink( + chainId, + claimTxn === null || claimTxn === void 0 ? void 0 : claimTxn.hash, + ExplorerDataType.TRANSACTION + ), + style: { zIndex: 99 }, + }, + { children: jsx(Trans, { children: 'View transaction on Explorer' }, void 0) } + ), + void 0 + ), + ], + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + ], + } + ), + void 0 + ) +} +var templateObject_1$18, templateObject_2$Q, templateObject_3$I, templateObject_4$x + +var Card = styled(Box)( + templateObject_1$17 || + (templateObject_1$17 = __makeTemplateObject( + ['\n width: ', ';\n padding: ', ';\n border-radius: ', ';\n border: ', ';\n'], + ['\n width: ', ';\n padding: ', ';\n border-radius: ', ';\n border: ', ';\n'] + )), + function (_a) { + var width = _a.width + return width !== null && width !== void 0 ? width : '100%' + }, + function (_a) { + var padding = _a.padding + return padding !== null && padding !== void 0 ? padding : '1rem' + }, + function (_a) { + var $borderRadius = _a.$borderRadius + return $borderRadius !== null && $borderRadius !== void 0 ? $borderRadius : '16px' + }, + function (_a) { + var border = _a.border + return border + } +) +var LightCard = styled(Card)( + templateObject_2$P || + (templateObject_2$P = __makeTemplateObject( + ['\n border: 1px solid ', ';\n background-color: ', ';\n'], + ['\n border: 1px solid ', ';\n background-color: ', ';\n'] + )), + function (_a) { + var theme = _a.theme + return theme.bg2 + }, + function (_a) { + var theme = _a.theme + return theme.bg1 + } +) +var LightGreyCard = styled(Card)( + templateObject_3$H || + (templateObject_3$H = __makeTemplateObject(['\n background-color: ', ';\n'], ['\n background-color: ', ';\n'])), + function (_a) { + var theme = _a.theme + return theme.bg2 + } +) +var GreyCard = styled(Card)( + templateObject_4$w || + (templateObject_4$w = __makeTemplateObject(['\n background-color: ', ';\n'], ['\n background-color: ', ';\n'])), + function (_a) { + var theme = _a.theme + return theme.bg3 + } +) +var DarkGreyCard = styled(Card)( + templateObject_5$p || + (templateObject_5$p = __makeTemplateObject(['\n background-color: ', ';\n'], ['\n background-color: ', ';\n'])), + function (_a) { + var theme = _a.theme + return theme.bg2 + } +) +styled(Card)( + templateObject_6$k || + (templateObject_6$k = __makeTemplateObject(['\n background-color: ', ';\n'], ['\n background-color: ', ';\n'])), + function (_a) { + var theme = _a.theme + return theme.bg0 + } +) +var OutlineCard = styled(Card)( + templateObject_7$h || + (templateObject_7$h = __makeTemplateObject(['\n border: 1px solid ', ';\n'], ['\n border: 1px solid ', ';\n'])), + function (_a) { + var theme = _a.theme + return theme.bg3 + } +) +styled(Card)( + templateObject_8$f || + (templateObject_8$f = __makeTemplateObject( + ['\n background-color: rgba(243, 132, 30, 0.05);\n color: ', ';\n font-weight: 500;\n'], + ['\n background-color: rgba(243, 132, 30, 0.05);\n color: ', ';\n font-weight: 500;\n'] + )), + function (_a) { + var theme = _a.theme + return theme.yellow3 + } +) +styled(Card)( + templateObject_9$e || + (templateObject_9$e = __makeTemplateObject( + ['\n background-color: ', ';\n color: ', ';\n border-radius: 12px;\n'], + ['\n background-color: ', ';\n color: ', ';\n border-radius: 12px;\n'] + )), + function (_a) { + var theme = _a.theme + return theme.primary5 + }, + function (_a) { + var theme = _a.theme + return theme.blue2 + } +) +var templateObject_1$17, + templateObject_2$P, + templateObject_3$H, + templateObject_4$w, + templateObject_5$p, + templateObject_6$k, + templateObject_7$h, + templateObject_8$f, + templateObject_9$e + +var Wrapper$h = styled.div( + templateObject_1$16 || + (templateObject_1$16 = __makeTemplateObject( + ['\n max-height: 70vh;\n overflow: auto;\n padding: 0 1rem;\n'], + ['\n max-height: 70vh;\n overflow: auto;\n padding: 0 1rem;\n'] + )) +) +var StyledExternalCard = styled(Card)( + templateObject_2$O || + (templateObject_2$O = __makeTemplateObject( + [ + '\n background-color: ', + ';\n padding: 0.5rem;\n width: 100%;\n\n :hover,\n :focus,\n :active {\n background-color: ', + ';\n }\n', + ], + [ + '\n background-color: ', + ';\n padding: 0.5rem;\n width: 100%;\n\n :hover,\n :focus,\n :active {\n background-color: ', + ';\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.primary5 + }, + function (_a) { + var theme = _a.theme + return theme.primary4 + } +) +var HoverText$1 = styled.div( + templateObject_3$G || + (templateObject_3$G = __makeTemplateObject( + [ + '\n text-decoration: none;\n color: ', + ';\n display: flex;\n align-items: center;\n\n :hover {\n cursor: pointer;\n }\n', + ], + [ + '\n text-decoration: none;\n color: ', + ';\n display: flex;\n align-items: center;\n\n :hover {\n cursor: pointer;\n }\n', + ] + )), + function (_a) { + var theme = _a.theme + return theme.text1 + } +) +var StyledLinkOut = styled(ArrowDown)( + templateObject_4$v || + (templateObject_4$v = __makeTemplateObject( + ['\n transform: rotate(230deg);\n'], + ['\n transform: rotate(230deg);\n'] + )) +) +var EXTERNAL_APIS = [ + { + name: 'Auto Router', + description: jsx( + Trans, + { children: 'The app fetches the optimal trade route from a Uniswap Labs server.' }, + void 0 + ), + }, + { + name: 'Infura', + description: jsx( + Trans, + { children: 'The app fetches on-chain data and constructs contract calls with an Infura API.' }, + void 0 + ), + }, + { + name: 'TRM Labs', + description: jsxs( + Fragment, + { + children: [ + jsx( + Trans, + { + children: + 'The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.', + }, + void 0 + ), + ' ', + jsx( + ExternalLink, + __assign( + { href: 'https://help.uniswap.org/en/articles/5675203-terms-of-service-faq' }, + { children: jsx(Trans, { children: 'Learn more' }, void 0) } + ), + void 0 + ), + ], + }, + void 0 + ), + }, + { + name: 'Google Analytics', + description: jsx( + Trans, + { children: 'The app logs anonymized usage statistics in order to improve over time.' }, + void 0 + ), + }, + { + name: 'The Graph', + description: jsx( + Trans, + { children: 'The app fetches blockchain data from The Graph\u2019s hosted service.' }, + void 0 + ), + }, +] +function PrivacyPolicyModal() { + var node = useRef() + var open = useModalOpen(ApplicationModal.PRIVACY_POLICY) + var toggle = useTogglePrivacyPolicy() + useEffect( + function () { + if (!open) return + ReactGA.event({ + category: 'Modal', + action: 'Show Legal', + }) + }, + [open] + ) + return jsx( + Modal, + __assign( + { + isOpen: open, + onDismiss() { + return toggle() + }, + }, + { + children: jsxs( + AutoColumn, + __assign( + { gap: '12px', ref: node }, + { + children: [ + jsxs( + RowBetween, + __assign( + { padding: '1rem 1rem 0.5rem 1rem' }, + { + children: [ + jsx( + ThemedText.MediumHeader, + { children: jsx(Trans, { children: 'Legal & Privacy' }, void 0) }, + void 0 + ), + jsx( + HoverText$1, + __assign( + { + onClick() { + return toggle() + }, + }, + { children: jsx(X, { size: 24 }, void 0) } + ), + void 0 + ), + ], + } + ), + void 0 + ), + jsx(PrivacyPolicy, {}, void 0), + ], + } + ), + void 0 + ), + } + ), + void 0 + ) +} +function PrivacyPolicy() { + return jsx( + Wrapper$h, + __assign( + { + draggable: 'true', + onTouchMove(e) { + // prevent modal gesture handler from dismissing modal when content is scrolling + if (isMobile) { + e.stopPropagation() + } + }, + }, + { + children: jsxs( + AutoColumn, + __assign( + { gap: '16px' }, + { + children: [ + jsxs( + AutoColumn, + __assign( + { gap: '8px', style: { width: '100%' } }, + { + children: [ + jsx( + StyledExternalCard, + { + children: jsx( + ExternalLink, + __assign( + { href: 'https://uniswap.org/terms-of-service' }, + { + children: jsxs( + RowBetween, + { + children: [ + jsxs( + AutoRow, + __assign( + { gap: '4px' }, + { + children: [ + jsx(Info, { size: 20 }, void 0), + jsx( + ThemedText.Main, + __assign( + { fontSize: 14, color: 'primaryText1' }, + { + children: jsx( + Trans, + { children: "Uniswap Labs' Terms of Service" }, + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + jsx(StyledLinkOut, { size: 20 }, void 0), + ], + }, + void 0 + ), + } + ), + void 0 + ), + }, + void 0 + ), + jsx( + StyledExternalCard, + { + children: jsx( + ExternalLink, + __assign( + { href: 'https://uniswap.org/disclaimer/' }, + { + children: jsxs( + RowBetween, + { + children: [ + jsxs( + AutoRow, + __assign( + { gap: '4px' }, + { + children: [ + jsx(Info, { size: 20 }, void 0), + jsx( + ThemedText.Main, + __assign( + { fontSize: 14, color: 'primaryText1' }, + { + children: jsx(Trans, { children: 'Protocol Disclaimer' }, void 0), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + jsx(StyledLinkOut, { size: 20 }, void 0), + ], + }, + void 0 + ), + } + ), + void 0 + ), + }, + void 0 + ), + ], + } + ), + void 0 + ), + jsx( + ThemedText.Main, + __assign( + { fontSize: 14 }, + { children: jsx(Trans, { children: 'This app uses the following third-party APIs:' }, void 0) } + ), + void 0 + ), + jsxs( + AutoColumn, + __assign( + { gap: '12px' }, + { + children: [ + EXTERNAL_APIS.map(function (_a, i) { + var name = _a.name, + description = _a.description + return jsx( + DarkGreyCard, + { + children: jsxs( + AutoColumn, + __assign( + { gap: '8px' }, + { + children: [ + jsxs( + AutoRow, + __assign( + { gap: '4px' }, + { + children: [ + jsx(Info, { size: 18 }, void 0), + jsx( + ThemedText.Main, + __assign({ fontSize: 14, color: 'text1' }, { children: name }), + void 0 + ), + ], + } + ), + void 0 + ), + jsx( + ThemedText.Main, + __assign({ fontSize: 14 }, { children: description }), + void 0 + ), + ], + } + ), + void 0 + ), + }, + i + ) + }), + jsx( + Row$1, + __assign( + { justify: 'center', marginBottom: '1rem' }, + { + children: jsx( + ExternalLink, + __assign( + { href: 'https://help.uniswap.org/en/articles/5675203-terms-of-service-faq' }, + { children: jsx(Trans, { children: 'Learn more' }, void 0) } + ), + void 0 + ), + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + ], + } + ), + void 0 + ), + } + ), + void 0 + ) +} +var templateObject_1$16, templateObject_2$O, templateObject_3$G, templateObject_4$v /*eslint-disable*/module.exports={messages:{"$-":"$-","$<0/>":"$<0/>","${0}":["$",["0"]],"(${0})":["($",["0"],")"],"(View on Explorer)":"(View on Explorer)","(clear all)":"(clear all)","(edit)":"(edit)","- Remove recipient":"- Remove recipient","0 UNI / week":"0 UNI / week","25%":"25%","50%":"50%","75%":"75%","<0/> All Proposals":"<0/> All Proposals","<0/> Votes":"<0/> Votes","<0>Account analytics and accrued fees<1> ↗ ":"<0>Account analytics and accrued fees<1> ↗ ","<0>Current Price:<1><2/><3>{0} per {1}":["<0>Current Price:<1><2/><3>",["0"]," per ",["1"],""],"<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.":"<0>Tip: Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.","<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.":"<0>Tip: Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs.","<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.":"<0>Tip: Use this tool to find v2 pools that don't automatically appear in the interface.","<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.":"<0>Tip: When you add liquidity, you will receive pool tokens representing your position. These tokens automatically earn fees proportional to your share of the pool, and can be redeemed at any time.","<0>Unlock voting to prepare for the next proposal.":"<0>Unlock voting to prepare for the next proposal.","<0>🎉 Welcome to team Unicorn :) <1>🎉":"<0>🎉 Welcome to team Unicorn :) <1>🎉","A minimum threshold of 0.25% of the total UNI supply is required to submit proposals":"A minimum threshold of 0.25% of the total UNI supply is required to submit proposals","About":"About","Accept":"Accept","Account":"Account","Active":"Active","Add":"Add","Add <0/> and <1/> to Uniswap V2":"Add <0/> and <1/> to Uniswap V2","Add Delegate +":"Add Delegate +","Add Liquidity":"Add Liquidity","Add V2 Liquidity":"Add V2 Liquidity","Add liquidity.":"Add liquidity.","Add more liquidity":"Add more liquidity","Add {0} to Metamask <0/>":["Add ",["0"]," to Metamask <0/>"],"Add {0}-{1} liquidity":["Add ",["0"],"-",["1"]," liquidity"],"Add {0}/{1} V3 liquidity":["Add ",["0"],"/",["1"]," V3 liquidity"],"Added {0}":["Added ",["0"]],"Address has no available claim":"Address has no available claim","Against":"Against","Allow LP token migration":"Allow LP token migration","Allow high price impact trades and skip the confirm screen. Use at your own risk.":"Allow high price impact trades and skip the confirm screen. Use at your own risk.","Allow the Uniswap Protocol to use your {0}":["Allow the Uniswap Protocol to use your ",["0"]],"Allowed":"Allowed","Amount":"Amount","An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.":"An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.","Approval pending <0/>":"Approval pending <0/>","Approve":"Approve","Approve Token":"Approve Token","Approve {0}":["Approve ",["0"]],"Approve {0} first":["Approve ",["0"]," first"],"Approved":"Approved","Approving":"Approving","Approving {0}":["Approving ",["0"]],"Arbiscan":"Arbiscan","Arbitrum Bridge":"Arbitrum Bridge","Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.":"Arbitrum is in Beta and may experience downtime. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.","Are you sure?":"Are you sure?","As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI":"As a member of the Uniswap community you may claim UNI to be used for voting and governance.<0/><1/><2>Read more about UNI","At least {0} {1} and {2} {3} will be refunded to your wallet due to selected price range.":["At least ",["0"]," ",["1"]," and ",["2"]," ",["3"]," will be refunded to your wallet due to selected price range."],"Auto":"Auto","Auto Router API":"Auto Router API","Available to deposit: {0}":["Available to deposit: ",["0"]],"Balance: {0}":["Balance: ",["0"]],"Best for exotic pairs.":"Best for exotic pairs.","Best for most pairs.":"Best for most pairs.","Best for stable pairs.":"Best for stable pairs.","Best for very stable pairs.":"Best for very stable pairs.","Best price route costs ~{formattedGasPriceString} in gas.":["Best price route costs ~",["formattedGasPriceString"]," in gas."],"Blocked address":"Blocked address","Bridge":"Bridge","By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.":"By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.","By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.":"By adding this list you are implicitly trusting that the data is correct. Anyone can create a list, including creating fake versions of existing lists and lists that claim to represent projects that do not have one.","By connecting a wallet, you agree to Uniswap Labs’ <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.":"By connecting a wallet, you agree to Uniswap Labs’ <0>Terms of Service and acknowledge that you have read and understand the Uniswap <1>Protocol Disclaimer.","Canceled":"Canceled","Change":"Change","Charts":"Charts","Check network status":"Check network status","Check out our v3 LP walkthrough and migration guides.":"Check out our v3 LP walkthrough and migration guides.","Claim":"Claim","Claim <0/> for {0}":["Claim <0/> for ",["0"]],"Claim UNI":"Claim UNI","Claim UNI Token":"Claim UNI Token","Claim UNI reward for {0}":["Claim UNI reward for ",["0"]],"Claim fees":"Claim fees","Claim your UNI tokens":"Claim your UNI tokens","Claimed":"Claimed","Claimed UNI!":"Claimed UNI!","Claimed!":"Claimed!","Claiming":"Claiming","Claiming UNI":"Claiming UNI","Claiming {0} UNI":["Claiming ",["0"]," UNI"],"Clear All":"Clear All","Clear all":"Clear all","Close":"Close","Closed":"Closed","Collect":"Collect","Collect as WETH":"Collect as WETH","Collect fees":"Collect fees","Collect {0}/{1} fees":["Collect ",["0"],"/",["1"]," fees"],"Collected":"Collected","Collecting":"Collecting","Collecting fees":"Collecting fees","Collecting fees will withdraw currently available fees for you.":"Collecting fees will withdraw currently available fees for you.","Confirm":"Confirm","Confirm Supply":"Confirm Supply","Confirm Swap":"Confirm Swap","Confirm swap":"Confirm swap","Confirm this transaction in your wallet":"Confirm this transaction in your wallet","Confirm transaction in wallet":"Confirm transaction in wallet","Connect Wallet":"Connect Wallet","Connect a wallet":"Connect a wallet","Connect to a wallet to find pools":"Connect to a wallet to find pools","Connect to a wallet to view your V2 liquidity.":"Connect to a wallet to view your V2 liquidity.","Connect to a wallet to view your liquidity.":"Connect to a wallet to view your liquidity.","Connect wallet to swap":"Connect wallet to swap","Connected with {name}":["Connected with ",["name"]],"Copied":"Copied","Copy Address":"Copy Address","Create Pool & Supply":"Create Pool & Supply","Create Proposal":"Create Proposal","Create a pair":"Create a pair","Create a pool":"Create a pool","Create an issue on GitHub":"Create an issue on GitHub","Create pool and add {0}/{1} V3 liquidity":["Create pool and add ",["0"],"/",["1"]," V3 liquidity"],"Create pool.":"Create pool.","Create {0}/{1} V3 pool":["Create ",["0"],"/",["1"]," V3 pool"],"Current price":"Current price","Current {0} Price:":["Current ",["0"]," Price:"],"Custom":"Custom","Dark Theme":"Dark Theme","Defeated":"Defeated","Delegate Votes":"Delegate Votes","Delegate voting power to {0}":["Delegate voting power to ",["0"]],"Delegated to:":"Delegated to:","Delegating votes":"Delegating votes","Deposit":"Deposit","Deposit Amounts":"Deposit Amounts","Deposit UNI-V2 LP Tokens":"Deposit UNI-V2 LP Tokens","Deposit liquidity":"Deposit liquidity","Deposit tokens to the {label} network.":["Deposit tokens to the ",["label"]," network."],"Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.":"Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token.","Deposited liquidity:":"Deposited liquidity:","Deposited {0} UNI-V2":["Deposited ",["0"]," UNI-V2"],"Depositing Liquidity":"Depositing Liquidity","Description":"Description","Detailed":"Detailed","Details":"Details","Disconnect":"Disconnect","Discord":"Discord","Dismiss":"Dismiss","Docs":"Docs","Don’t see one of your v2 positions? <0>Import it.":"Don’t see one of your v2 positions? <0>Import it.","Earned UNI tokens represent voting shares in Uniswap governance.":"Earned UNI tokens represent voting shares in Uniswap governance.","Edit":"Edit","Efficiency Comparison":"Efficiency Comparison","Enter a percent":"Enter a percent","Enter a recipient":"Enter a recipient","Enter a valid slippage percentage":"Enter a valid slippage percentage","Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.":"Enter an address to trigger a UNI claim. If the address has any claimable UNI it will be sent to them on submission.","Enter an amount":"Enter an amount","Enter valid list location":"Enter valid list location","Enter valid token address":"Enter valid token address","Enter {0} amount":["Enter ",["0"]," amount"],"Error":"Error","Error connecting":"Error connecting","Error connecting. Try refreshing the page.":"Error connecting. Try refreshing the page.","Error details":"Error details","Error importing list":"Error importing list","Estimate may differ due to your wallet gas settings":"Estimate may differ due to your wallet gas settings","Estimated network fee":"Estimated network fee","Etherscan":"Etherscan","Executed":"Executed","Expanded results from inactive Token Lists":"Expanded results from inactive Token Lists","Expected Output":"Expected Output","Expert Mode":"Expert Mode","Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.":"Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result in bad rates and lost funds.","Expired":"Expired","Explore Uniswap Analytics.":"Explore Uniswap Analytics.","Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet.":["Failed to switch networks from the Uniswap Interface. In order to use Uniswap on ",["0"],", you must change the network in your wallet."],"Fee Tier":"Fee Tier","Fee tier":"Fee tier","Fetching best price...":"Fetching best price...","Fetching best price…":"Fetching best price…","For":"For","For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.":"For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.","From":"From","From (at most)":"From (at most)","Full Range":"Full Range","Full range positions may earn less fees than concentrated positions. Learn more <0>here.":"Full range positions may earn less fees than concentrated positions. Learn more <0>here.","Get support on Discord":"Get support on Discord","Help Center":"Help Center","Hide":"Hide","Hide closed positions":"Hide closed positions","High Price Impact":"High Price Impact","How this app uses APIs":"How this app uses APIs","I understand":"I understand","If you purchase a token from this list, you may not be able to sell it back.":"If you purchase a token from this list, you may not be able to sell it back.","Import":"Import","Import List":"Import List","Import Pool":"Import Pool","Import V2 Pool":"Import V2 Pool","Import at your own risk":"Import at your own risk","In range":"In range","Increase Liquidity":"Increase Liquidity","Initial prices and pool share":"Initial prices and pool share","Initializing...":"Initializing...","Input is estimated. You will sell at most <0>{0} {1} or the transaction will revert.":["Input is estimated. You will sell at most <0>",["0"]," ",["1"]," or the transaction will revert."],"Install Metamask":"Install Metamask","Insufficient liquidity for this trade.":"Insufficient liquidity for this trade.","Insufficient {0}":["Insufficient ",["0"]],"Insufficient {0} balance":["Insufficient ",["0"]," balance"],"Interface Settings":"Interface Settings","Invalid pair":"Invalid pair","Invalid pair.":"Invalid pair.","Invalid price input":"Invalid price input","Invalid range selected. The min price must be lower than the max price.":"Invalid range selected. The min price must be lower than the max price.","Invalid recipient":"Invalid recipient","Language":"Language","Learn":"Learn","Learn about providing liquidity":"Learn about providing liquidity","Learn more":"Learn more","Legal & Privacy":"Legal & Privacy","Light Theme":"Light Theme","Liquidity":"Liquidity","Liquidity data not available.":"Liquidity data not available.","Liquidity provider rewards":"Liquidity provider rewards","Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.":"Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.","Lists":"Lists","Loaded":"Loaded","Loading":"Loading","MAX":"MAX","Manage":"Manage","Manage Liquidity in Rewards Pool":"Manage Liquidity in Rewards Pool","Manage Token Lists":"Manage Token Lists","Manage this pool.":"Manage this pool.","Max":"Max","Max Price":"Max Price","Max price":"Max price","Max slippage":"Max slippage","Max:":"Max:","Maximum sent":"Maximum sent","Menu":"Menu","Migrate":"Migrate","Migrate Liquidity to V3":"Migrate Liquidity to V3","Migrate V2 Liquidity":"Migrate V2 Liquidity","Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.":"Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.","Migrate {0}/{1} liquidity to V3":["Migrate ",["0"],"/",["1"]," liquidity to V3"],"Migrating":"Migrating","Min Price":"Min Price","Min price":"Min price","Min:":"Min:","Minimum received":"Minimum received","Missing dependencies":"Missing dependencies","Mock Toggle":"Mock Toggle","More":"More","Network Fee":"Network Fee","Network Warning":"Network Warning","Network fees exceed 50% of the swap amount!":"Network fees exceed 50% of the swap amount!","New Position":"New Position","No V2 Liquidity found.":"No V2 Liquidity found.","No active pools":"No active pools","No data":"No data","No description.":"No description.","No liquidity found.":"No liquidity found.","No pool found.":"No pool found.","No proposals found.":"No proposals found.","No results found.":"No results found.","Not created":"Not created","OFF":"OFF","ON":"ON","ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.":"ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.","Off":"Off","On":"On","Once you are happy with the rate click supply to review.":"Once you are happy with the rate click supply to review.","Only UNI votes that were self delegated or delegated to another address before block {0} are eligible for voting.":["Only UNI votes that were self delegated or delegated to another address before block ",["0"]," are eligible for voting."],"Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.":"Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.","Optimism Gateway":"Optimism Gateway","Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.":"Optimism is in Beta and may experience downtime. Optimism expects planned downtime to upgrade the network in the near future. During downtime, your position will not earn fees and you will be unable to remove liquidity. <0>Read more.","Optimistic Etherscan":"Optimistic Etherscan","Out of range":"Out of range","Output is estimated.":"Output is estimated.","Output is estimated. If the price changes by more than {0}% your transaction will revert.":["Output is estimated. If the price changes by more than ",["0"],"% your transaction will revert."],"Output is estimated. You will receive at least <0>{0} {1} or the transaction will revert.":["Output is estimated. You will receive at least <0>",["0"]," ",["1"]," or the transaction will revert."],"Output will be sent to <0>{0}":["Output will be sent to <0>",["0"],""],"Owner":"Owner","Participating pools":"Participating pools","Pending":"Pending","Please confirm you would like to remove this list by typing REMOVE":"Please confirm you would like to remove this list by typing REMOVE","Please connect to Layer 1 Ethereum":"Please connect to Layer 1 Ethereum","Please connect to a supported network in the dropdown menu or in your wallet.":"Please connect to a supported network in the dropdown menu or in your wallet.","Please type the word \"{confirmWord}\" to enable expert mode.":["Please type the word \"",["confirmWord"],"\" to enable expert mode."],"Polygon Bridge":"Polygon Bridge","Polygonscan":"Polygonscan","Pool":"Pool","Pool Found!":"Pool Found!","Pool Rate":"Pool Rate","Pool rate":"Pool rate","Pool tokens in rewards pool:":"Pool tokens in rewards pool:","Pooled {0}:":["Pooled ",["0"],":"],"Pools Overview":"Pools Overview","Preview":"Preview","Price":"Price","Price Difference:":"Price Difference:","Price Impact":"Price Impact","Price Impact Too High":"Price Impact Too High","Price Updated":"Price Updated","Price impact":"Price impact","Price range":"Price range","Price updated":"Price updated","Price:":"Price:","Prices and pool share":"Prices and pool share","Proposal":"Proposal","Proposal Submitted":"Proposal Submitted","Proposal Title":"Proposal Title","Proposals":"Proposals","Proposals submitted by community members will appear here.":"Proposals submitted by community members will appear here.","Proposed Action":"Proposed Action","Proposer":"Proposer","Protocol Disclaimer":"Protocol Disclaimer","Queued":"Queued","Rates":"Rates","Read more about UNI":"Read more about UNI","Read more about Uniswap governance":"Read more about Uniswap governance","Read more about providing liquidity":"Read more about providing liquidity","Read more about unsupported assets":"Read more about unsupported assets","Recent Transactions":"Recent Transactions","Recent transactions":"Recent transactions","Recipient":"Recipient","Reload the page":"Reload the page","Remove":"Remove","Remove <0/> and <1/>":"Remove <0/> and <1/>","Remove Amount":"Remove Amount","Remove Delegate":"Remove Delegate","Remove Liquidity":"Remove Liquidity","Remove list":"Remove list","Removing {0} {1} and {2} {3}":["Removing ",["0"]," ",["1"]," and ",["2"]," ",["3"]],"Removing {0} {1} and{2} {3}":["Removing ",["0"]," ",["1"]," and",["2"]," ",["3"]],"Request Features":"Request Features","Reset":"Reset","Return":"Return","Review swap":"Review swap","Search by token name or address":"Search by token name or address","Search name or paste address":"Search name or paste address","Select Pair":"Select Pair","Select a network":"Select a network","Select a token":"Select a token","Select a token to find your v2 liquidity.":"Select a token to find your v2 liquidity.","Select an action":"Select an action","Selected Range":"Selected Range","Self":"Self","Self Delegate":"Self Delegate","Set Price Range":"Set Price Range","Set Starting Price":"Set Starting Price","Settings":"Settings","Share of Pool":"Share of Pool","Share of Pool:":"Share of Pool:","Show Portis":"Show Portis","Show closed positions":"Show closed positions","Simple":"Simple","Slippage tolerance":"Slippage tolerance","Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.":"Some assets are not available through this interface because they may not work well with the smart contracts or we are unable to allow trading for legal reasons.","Something went wrong":"Something went wrong","Something went wrong.":"Something went wrong.","Step 1. Get UNI-V2 Liquidity tokens":"Step 1. Get UNI-V2 Liquidity tokens","Submit new proposal":"Submit new proposal","Submitting Proposal":"Submitting Proposal","Submitting Vote":"Submitting Vote","Succeeded":"Succeeded","Success":"Success","Supply":"Supply","Supplying {0} {1} and {2} {3}":["Supplying ",["0"]," ",["1"]," and ",["2"]," ",["3"]],"Swap":"Swap","Swap <0/> for exactly <1/>":"Swap <0/> for exactly <1/>","Swap Anyway":"Swap Anyway","Swap details":"Swap details","Swap exactly <0/> for <1/>":"Swap exactly <0/> for <1/>","Swap failed: {0}":["Swap failed: ",["0"]],"Swap summary":"Swap summary","Swapping {0} {1} for {2} {3}":["Swapping ",["0"]," ",["1"]," for ",["2"]," ",["3"]],"Take a 10 minute survey to help us improve your experience in the Uniswap app.":"Take a 10 minute survey to help us improve your experience in the Uniswap app.","Tell us what you think ↗":"Tell us what you think ↗","Thanks for being part of the Uniswap community <0/>":"Thanks for being part of the Uniswap community <0/>","The % you will earn in fees.":"The % you will earn in fees.","The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.":"The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.","The app fetches blockchain data from The Graph’s hosted service.":"The app fetches blockchain data from The Graph’s hosted service.","The app fetches on-chain data and constructs contract calls with an Infura API.":"The app fetches on-chain data and constructs contract calls with an Infura API.","The app fetches the optimal trade route from a Uniswap Labs server.":"The app fetches the optimal trade route from a Uniswap Labs server.","The app logs anonymized usage statistics in order to improve over time.":"The app logs anonymized usage statistics in order to improve over time.","The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.":"The app securely collects your wallet address and shares it with TRM Labs Inc. for risk and compliance reasons.","The cost of sending this transaction is more than half of the value of the input amount.":"The cost of sending this transaction is more than half of the value of the input amount.","The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.":"The current fast gas amount for sending a transaction on L1. Gas fees are paid in Ethereum's native currency Ether (ETH) and denominated in GWEI.","The estimated difference between the USD values of input and output amounts.":"The estimated difference between the USD values of input and output amounts.","The input token cannot be transferred. There may be an issue with the input token.":"The input token cannot be transferred. There may be an issue with the input token.","The market price is outside your specified price range. Single-asset deposit only.":"The market price is outside your specified price range. Single-asset deposit only.","The most recent block number on this network. Prices update on every block.":"The most recent block number on this network. Prices update on every block.","The output token cannot be transferred. There may be an issue with the output token.":"The output token cannot be transferred. There may be an issue with the output token.","The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.":"The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.","The price of this pool is outside of your selected range. Your position is not currently earning fees.":"The price of this pool is outside of your selected range. Your position is not currently earning fees.","The price of this pool is within your selected range. Your position is currently earning fees.":"The price of this pool is within your selected range. Your position is currently earning fees.","The ratio of tokens you add will set the price of this pool.":"The ratio of tokens you add will set the price of this pool.","The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.":"The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.","There is no liquidity data.":"There is no liquidity data.","This app uses the following third-party APIs:":"This app uses the following third-party APIs:","This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.":"This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.","This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.":"This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.","This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.":"This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade.","This token is not supported in the Uniswap Labs app":"This token is not supported in the Uniswap Labs app","This tool will safely migrate your {0} liquidity to V3. The process is completely trustless thanks to the":["This tool will safely migrate your ",["0"]," liquidity to V3. The process is completely trustless thanks to the"],"This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.":"This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.","This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.":"This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.","Tip: Custom tokens are stored locally in your browser":"Tip: Custom tokens are stored locally in your browser","To":"To","To (at least)":"To (at least)","Token not supported":"Token not supported","Tokens":"Tokens","Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.":"Tokens from inactive lists. Import specific tokens below or click Manage to activate more lists.","Top pools":"Top pools","Total deposited":"Total deposited","Total deposits":"Total deposits","Trade Route":"Trade Route","Trading":"Trading","Transaction Settings":"Transaction Settings","Transaction Submitted":"Transaction Submitted","Transaction completed in":"Transaction completed in","Transaction deadline":"Transaction deadline","Transaction pending":"Transaction pending","Transaction rejected.":"Transaction rejected.","Transaction submitted":"Transaction submitted","Transfer Token":"Transfer Token","Try Again":"Try Again","Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.":"Try increasing your slippage tolerance.<0/>NOTE: Fee on transfer and rebase tokens are incompatible with Uniswap V3.","Turn On Expert Mode":"Turn On Expert Mode","UNI has arrived":"UNI has arrived","UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.":"UNI tokens represent voting shares in Uniswap governance. You can vote on each proposal yourself or delegate your votes to a third party.","UNI {0}/{1} Burned":["UNI ",["0"],"/",["1"]," Burned"],"UNI-V2 LP tokens are required. Once you've added liquidity to the {0}-{1} pool you can stake your liquidity tokens on this page.":["UNI-V2 LP tokens are required. Once you've added liquidity to the ",["0"],"-",["1"]," pool you can stake your liquidity tokens on this page."],"UNI-V2 {0}-{1}":["UNI-V2 ",["0"],"-",["1"]],"Unclaimed UNI":"Unclaimed UNI","Unclaimed fees":"Unclaimed fees","Undetermined":"Undetermined","Unexpected error. Could not estimate gas for the swap.":"Unexpected error. Could not estimate gas for the swap.","Unexpected issue with estimating the gas. Please try again.":"Unexpected issue with estimating the gas. Please try again.","Uniswap Governance":"Uniswap Governance","Uniswap Labs' Terms of Service":"Uniswap Labs' Terms of Service","Uniswap available in: <0>{0}":["Uniswap available in: <0>",["0"],""],"Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.":"Uniswap governance is only available on Layer 1. Switch your network to Ethereum Mainnet to view Proposals and Vote.","Uniswap liquidity mining":"Uniswap liquidity mining","Uniswap migration contract↗":"Uniswap migration contract↗","Unknown Source":"Unknown Source","Unknown error{0}. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.":["Unknown error",["0"],". Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3."],"Unlock Votes":"Unlock Votes","Unlock Voting":"Unlock Voting","Unlocking Votes":"Unlocking Votes","Unsupported Asset":"Unsupported Asset","Unsupported Assets":"Unsupported Assets","Unsupported network–switch to another to trade.":"Unsupported network–switch to another to trade.","Untitled":"Untitled","Unwrap":"Unwrap","Unwrap <0/> to {0}":["Unwrap <0/> to ",["0"]],"Update Delegation":"Update Delegation","Update list":"Update list","Use the Uniswap Labs API to get faster quotes.":"Use the Uniswap Labs API to get faster quotes.","User":"User","V2 is not available on Layer 2. Switch to Layer 1 Ethereum.":"V2 is not available on Layer 2. Switch to Layer 1 Ethereum.","V2 liquidity":"V2 liquidity","V3 {0} Price:":["V3 ",["0"]," Price:"],"View accrued fees and analytics<0>↗":"View accrued fees and analytics<0>↗","View list":"View list","View on Etherscan":"View on Etherscan","View on Explorer":"View on Explorer","View transaction on Explorer":"View transaction on Explorer","Vote":"Vote","Vote Against":"Vote Against","Vote For":"Vote For","Vote against proposal {proposalId}":["Vote against proposal ",["proposalId"]],"Vote against proposal {proposalKey}":["Vote against proposal ",["proposalKey"]],"Vote against proposal {proposalKey} with reason \"{0}\"":["Vote against proposal ",["proposalKey"]," with reason \"",["0"],"\""],"Vote for proposal {proposalId}":["Vote for proposal ",["proposalId"]],"Vote for proposal {proposalKey}":["Vote for proposal ",["proposalKey"]],"Vote for proposal {proposalKey} with reason \"{0}\"":["Vote for proposal ",["proposalKey"]," with reason \"",["0"],"\""],"Vote to abstain on proposal {proposalId}":["Vote to abstain on proposal ",["proposalId"]],"Vote to abstain on proposal {proposalKey}":["Vote to abstain on proposal ",["proposalKey"]],"Vote to abstain on proposal {proposalKey} with reason \"{0}\"":["Vote to abstain on proposal ",["proposalKey"]," with reason \"",["0"],"\""],"Voting ended {0}":["Voting ended ",["0"]],"Voting ends approximately {0}":["Voting ends approximately ",["0"]],"Voting starts approximately {0}":["Voting starts approximately ",["0"]],"Waiting For Confirmation":"Waiting For Confirmation","Wallet Address or ENS name":"Wallet Address or ENS name","Weekly Rewards":"Weekly Rewards","Welcome to team Unicorn :)":"Welcome to team Unicorn :)","When you claim without withdrawing your liquidity remains in the mining pool.":"When you claim without withdrawing your liquidity remains in the mining pool.","When you withdraw, the contract will automagically claim UNI on your behalf!":"When you withdraw, the contract will automagically claim UNI on your behalf!","When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.":"When you withdraw, your UNI is claimed and your liquidity is removed from the mining pool.","Withdraw":"Withdraw","Withdraw & Claim":"Withdraw & Claim","Withdraw deposited liquidity":"Withdraw deposited liquidity","Withdrawing {0} UNI-V2":["Withdrawing ",["0"]," UNI-V2"],"Withdrew UNI-V2!":"Withdrew UNI-V2!","Wrap":"Wrap","Wrap <0/> to {0}":["Wrap <0/> to ",["0"]],"Wrong Network":"Wrong Network","You already have an active or pending proposal":"You already have an active or pending proposal","You are creating a pool":"You are creating a pool","You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current {0} price.":["You are the first liquidity provider for this Uniswap V3 pool. Your liquidity will migrate at the current ",["0"]," price."],"You are the first liquidity provider.":"You are the first liquidity provider.","You can either vote on each proposal yourself or delegate your votes to a third party.":"You can either vote on each proposal yourself or delegate your votes to a third party.","You can now trade {0}":["You can now trade ",["0"]],"You don't have enough votes to submit a proposal":"You don't have enough votes to submit a proposal","You don’t have liquidity in this pool yet.":"You don’t have liquidity in this pool yet.","You may have lost your network connection, or {label} might be down right now.":["You may have lost your network connection, or ",["label"]," might be down right now."],"You may have lost your network connection.":"You may have lost your network connection.","You might consider waiting until the network fees go down to complete this transaction.":"You might consider waiting until the network fees go down to complete this transaction.","You must connect an account.":"You must connect an account.","You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token.":["You must give the Uniswap smart contracts permission to use your ",["0"],". You only have to do this once per token."],"You must have {formattedProposalThreshold} votes to submit a proposal":["You must have ",["formattedProposalThreshold"]," votes to submit a proposal"],"You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.":"You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so.","You will also collect fees earned from this position.":"You will also collect fees earned from this position.","You will receive":"You will receive","You will receive at least {0} {1} or the transaction will revert.":["You will receive at least ",["0"]," ",["1"]," or the transaction will revert."],"You will send at most {0} {1} or the transaction will revert.":["You will send at most ",["0"]," ",["1"]," or the transaction will revert."],"Your V2 liquidity":"Your V2 liquidity","Your active V3 liquidity positions will appear here.":"Your active V3 liquidity positions will appear here.","Your liquidity deposits":"Your liquidity deposits","Your pool share:":"Your pool share:","Your position":"Your position","Your position has 0 liquidity, and is not earning fees.":"Your position has 0 liquidity, and is not earning fees.","Your position will appear here.":"Your position will appear here.","Your position will be 100% composed of {0} at this price":["Your position will be 100% composed of ",["0"]," at this price"],"Your position will be 100% {0} at this price.":["Your position will be 100% ",["0"]," at this price."],"Your position will not earn fees or be used in trades until the market price moves into your range.":"Your position will not earn fees or be used in trades until the market price moves into your range.","Your positions":"Your positions","Your rate":"Your rate","Your total pool tokens:":"Your total pool tokens:","Your transaction cost will be much higher as it includes the gas to create the pool.":"Your transaction cost will be much higher as it includes the gas to create the pool.","Your transaction may be frontrun":"Your transaction may be frontrun","Your transaction may fail":"Your transaction may fail","Your transaction will revert if it has been pending for longer than this period of time.":"Your transaction will revert if it has been pending for longer than this period of time.","Your transaction will revert if it is pending for more than this period of time.":"Your transaction will revert if it is pending for more than this period of time.","Your transaction will revert if the price changes unfavorably by more than this percentage.":"Your transaction will revert if the price changes unfavorably by more than this percentage.","Your transactions will appear here...":"Your transactions will appear here...","Your unclaimed UNI":"Your unclaimed UNI","after slippage":"after slippage","confirm":"confirm","for {0}":["for ",["0"]],"gwei":"gwei","has socks emoji":"has socks emoji","here.":"here.","https:// or ipfs:// or ENS name":"https:// or ipfs:// or ENS name","minutes":"minutes","via {0}":["via ",["0"]],"via {0} token list":["via ",["0"]," token list"],"{0, plural, one {Import token} other {Import tokens}}":[["0","plural",{one:"Import token",other:"Import tokens"}]],"{0}":[["0"]],"{0} %":[["0"]," %"],"{0} <0/> per <1/>":[["0"]," <0/> per <1/>"],"{0} Custom Tokens":[["0"]," Custom Tokens"],"{0} Deposited":[["0"]," Deposited"],"{0} ETH":[["0"]," ETH"],"{0} Fees Earned:":[["0"]," Fees Earned:"],"{0} Pending":[["0"]," Pending"],"{0} UNI":[["0"]," UNI"],"{0} UNI / week":[["0"]," UNI / week"],"{0} UNI-V2":[["0"]," UNI-V2"],"{0} UNI-V2 LP tokens available":[["0"]," UNI-V2 LP tokens available"],"{0} Votes":[["0"]," Votes"],"{0} per {1}":[["0"]," per ",["1"]],"{0} tokens":[["0"]," tokens"],"{0} {1} Price:":[["0"]," ",["1"]," Price:"],"{0} {nativeCurrencySymbol}":[["0"]," ",["nativeCurrencySymbol"]],"{0} • Added by user":[["0"]," • Added by user"],"{0}%":[["0"],"%"],"{0}% fee tier":[["0"],"% fee tier"],"{0}% pool":[["0"],"% pool"],"{0}% select":[["0"],"% select"],"{0}-{1} Liquidity Mining":[["0"],"-",["1"]," Liquidity Mining"],"{0}/{1} LP NFT":[["0"],"/",["1"]," LP NFT"],"{0}/{1} LP Tokens":[["0"],"/",["1"]," LP Tokens"],"{SOCKS_AMOUNT} UNI":[["SOCKS_AMOUNT"]," UNI"],"{USER_AMOUNT} UNI":[["USER_AMOUNT"]," UNI"],"{activeTokensOnThisChain} tokens":[["activeTokensOnThisChain"]," tokens"],"{integrator} fee":[["integrator"]," fee"],"{label} token bridge":[["label"]," token bridge"],"{min}m {sec}s":[["min"],"m ",["sec"],"s"],"{percentForSlider}%":[["percentForSlider"],"%"],"{sec}s":[["sec"],"s"],"{tokenB} per {tokenA}":[["tokenB"]," per ",["tokenA"]],"← Back to Pools Overview":"← Back to Pools Overview"}};